ITSMChangeManagement
5.0.29
OTRS AG
http://otrs.org/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
Build for OTRS::ITSM 5 patch level 29.
Build for OTRS::ITSM 5 patch level 28.
Build for OTRS::ITSM 5 patch level 27.
Build for OTRS::ITSM 5 patch level 26.
Build for OTRS::ITSM 5 patch level 25.
Build for OTRS::ITSM 5 patch level 24.
Build for OTRS::ITSM 5 patch level 23.
Build for OTRS::ITSM 5 patch level 22.
Build for OTRS::ITSM 5 patch level 21.
Build for OTRS::ITSM 5 patch level 20.
Build for OTRS::ITSM 5 patch level 19.
Build for OTRS::ITSM 5 patch level 18.
Build for OTRS::ITSM 5 patch level 17.
Build for OTRS::ITSM 5 patch level 16.
Build for OTRS::ITSM 5 patch level 15.
Build for OTRS::ITSM 5 patch level 14.
Build for OTRS::ITSM 5 patch level 13.
Build for OTRS::ITSM 5 patch level 12.
Build for OTRS::ITSM 5 patch level 11.
Build for OTRS::ITSM 5 patch level 10.
Build for OTRS::ITSM 5 patch level 9.
Build for OTRS::ITSM 5 patch level 8.
Build for OTRS::ITSM 5 patch level 7.
Build for OTRS::ITSM 5 patch level 6.
Build for OTRS::ITSM 5 patch level 5.
Build for OTRS::ITSM 5 patch level 4.
Build for OTRS::ITSM 5 patch level 3.
Build for OTRS::ITSM 5 patch level 2.
Build for OTRS::ITSM 5.
Build for OTRS::ITSM 5 rc1.
Build for OTRS::ITSM 5 beta3.
Build for OTRS::ITSM 5 beta2.
Build for OTRS::ITSM 5 beta1.
The OTRS::ITSM Change Management package.
Das OTRS::ITSM Change Management Paket.
El paquete OTRS::ITSM Change Management.
Az OTRS::ITSM változásmenedzsment csomag.
5.0.x
<br/>
<strong>WELCOME</strong>
<br/>
<br/>
You are about to install the OTRS package ITSMChangeManagement.<br/>
<br/>
<br/>
<strong>REQUIRED OTRS PACKAGES</strong>
<ul>
<li>ITSMCore 5.0.29</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WILLKOMMEN</strong>
<br/>
<br/>
Sie sind im Begriff das OTRS-Paket ITSMChangeManagement zu installieren.<br/>
<br/>
<br/>
<strong>BENÖTIGTE OTRS-PAKETE</strong>
<ul>
<li>ITSMCore 5.0.29</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>BIENVENIDO</strong>
<br/>
<br/>
Usted está a punto de instalar el paquete ITSMChangeManagement de OTRS.<br/>
<br/>
<br/>
<strong>PAQUETES OTRS REQUERIDOS</strong>
<ul>
<li>ITSMCore 5.0.29</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ÜDVÖZÖLJÜK</strong>
<br/>
<br/>
Ön az ITSMChangeManagement OTRS csomag telepítésére készül.<br/>
<br/>
<br/>
<strong>SZÜKSÉGES OTRS CSOMAGOK</strong>
<ul>
<li>ITSMCore 5.0.29</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>NOTICE</strong>
<br/>
<br/>
In order to grant users access to the change menu, you need to add them as member to the group 'itsm-change'.
<br/>
<br/>
The menu items that were added by this package will be visible after you log-in to the system again.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>HINWEIS</strong>
<br/>
<br/>
Um Benutzern Zugriff auf das Change-Menü zu gewähren, müssen diese Mitglied der neuen Gruppe 'itsm-change' sein.
<br/>
<br/>
Die von diesem Paket hinzugefügten Menü-Punkte sind erst nach einem erneuten Anmeldevorgang im System sichtbar.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>AVISO</strong>
<br/>
<br/>
Para poder permitir el acceso a los usuarios al menú de faq, usted necesita agregarlos como miembros del grupo 'itsm-change'.<br/>
<br/>
<br/>
Los elementos del menu que fueron agregados por este paquete serán visibles después de que cierre y abra su sesión de nuevo.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>FIGYELMEZTETÉS</strong>
<br/>
<br/>
Annak érdekében, hogy hozzáférést adjon a felhasználók számára a változás menühöz, hozzá kell adnia őket az „itsm-change” csoporthoz tagként.
<br/>
<br/>
Azok a menüpontok, amelyeket ez a csomag adott hozzá, azután lesznek láthatóak, miután ismét bejelentkezik a rendszerbe.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ATTENTION</strong>
<br/>
<br/>
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!
<br/>
<br/>
The groups 'itsm-change', 'itsm-change-builder' and 'itsm-change-manager' that were created during package installation will be deactivated.
You can activate these groups again in the admin area.
<br/>
<br/>
All links to change objects and workorder objects will be irrevocably deleted!
<br/>
<br/>
The statistics that are associated with this package, will no longer be available if the package is uninstalled.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ACHTUNG</strong>
<br/>
<br/>
Bei der Deinstallation werden die von diesem Paket angelegten Datenbank-Tabellen gelöscht.
Alle darin enthaltenen Daten gehen unwiderruflich verloren!
<br/>
<br/>
Die von diesem Paket angelegten Gruppen 'itsm-change', 'itsm-change-builder' und 'itsm-change-manager' werden deaktiviert.
Sie können jederzeit im Admin-Bereich wieder aktiviert werden.
<br/>
<br/>
Alle Verknüpfungen zu Change-Objekten und zu Workorder-Objekten werden unwiderruflich gelöscht!
<br/>
<br/>
Nach der Deinstallation sind die zu diesem Paket zugehörigen Statistiken nicht mehr verfügbar.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ATENCIÓN</strong>
<br/>
<br/>
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 se perderán irrevocablemente!.
<br/>
<br/>
Los grupos 'itsm-change', 'itsm-change-builder' y 'itsm-change-manager' que fueron creados durante la instalación del paquete serán desactivados.
Usted puede activar estos grupos nuevamente en el área de admin.
<br/>
<br/>
¡Todos los vínculos a objetos cambio y objetos órdenes de trabajo serán borrados irrevocablemente!.
<br/>
<br/>
Si usted desinstala este paquete, las estadísticas que están asociadas a él ya no estarán disponibles.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>FIGYELEM</strong>
<br/>
<br/>
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!
<br/>
<br/>
A csomagtelepítés során létrehozott „itsm-change”, „itsm-change-builder” és „itsm-change-manager” csoport ki lesz kapcsolva.
Ezeket a csoportokat az adminisztrációs területen tudja ismét bekapcsolni.
<br/>
<br/>
A változás objektumokra és a munkamegrendelés objektumokra mutató összes hivatkozás visszavonhatatlanul törölve lesz!
<br/>
<br/>
Az ehhez a csomaghoz hozzárendelt statisztikák többé nem lesznek elérhetők, ha a csomag eltávolításra kerül.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WELCOME</strong>
<br/>
<br/>
You are about to upgrade the OTRS package ITSMChangeManagement.<br/>
<br/>
<br/>
<strong>REQUIRED OTRS PACKAGES</strong>
<ul>
<li>ITSMCore 5.0.29</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WILLKOMMEN</strong>
<br/>
<br/>
Sie sind im Begriff das OTRS-Paket ITSMChangeManagement zu aktualisieren.<br/>
<br/>
<br/>
<strong>BENÖTIGTE OTRS-PAKETE</strong>
<ul>
<li>ITSMCore 5.0.29</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>BIENVENIDO</strong>
<br/>
<br/>
Usted está apunto de actualizar el paquete ITSMChangeManagement de OTRS.<br/>
<br/>
<br/>
<strong>PAQUETES OTRS REQUERIDOS</strong>
<ul>
<li>ITSMCore 5.0.29</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ÜDVÖZÖLJÜK</strong>
<br/>
<br/>
Ön az ITSMChangeManagement OTRS csomag frissítésére készül.<br/>
<br/>
<br/>
<strong>SZÜKSÉGES OTRS CSOMAGOK</strong>
<ul>
<li>ITSMCore 5.0.29</li>
</ul>
<br/>
((enjoy))<br/>
<br/>
ITSMCore
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeInstall();
# uninstall Feature AddOn OTRSWorkOrderTimeDependency that has been integrated in OTRS::ITSM 3.2.91 (OTRS::ITSM 3.3.0 Beta 1)
$Kernel::OM->Get('Kernel::System::Package')->_PackageUninstallMerged(
Name => 'OTRSWorkOrderTimeDependency',
);
# uninstall Feature AddOn OTRSWorkOrderReportAttachments that has been integrated in OTRS::ITSM 3.2.91 (OTRS::ITSM 3.3.0 Beta 1)
$Kernel::OM->Get('Kernel::System::Package')->_PackageUninstallMerged(
Name => 'OTRSWorkOrderReportAttachments',
);
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->CodeUpgrade();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_3_3_91();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_4_0_2();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_4_0_91();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_5_0_12();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUninstall();
{
# cleanup stats list
$Kernel::OM->Get('Kernel::System::Stats')->StatsCleanUp(
UserID => 1,
);
}
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeReinstall();
2018-07-25 20:49:10
opms.otrs.com
H4sIAAAAAAACA+2dXY/iRtbH7/MpUOdmHwlqXO/lsMnqSaTVs1KiSDuzN3ODDLhpJwazxsxM78V+9qfKwHTzYvAr03T/O8rMNBQ+LlO/ejn1P6f++rcv87j3KUxXUbL48Y4S764XLibJNFrMfrz714e/D8zd33767q/TKPjB/j9Lg3nPfmKxcr/9ePeQZcsf3r37/PkziR9XQZakJI7WZBW++28Qx8E7W+jd3U/f9XrPLzANssC9tn01yLI0Gq+zsLcI5uGPd+Ng8ucsTdaL6d2m1LbcJImTtPcpiH+8+/4+/7l7t73Mu73rnLn2MpiF4zQM/iy+tGd/fL/OpZdhenjZ+TJZRbZI9rg8KlJwHffnszLbUitbaDH76fv/Fd9vbmn7wtO1Tt1ooZFsHqSzaHFsxz6bePMgGDGMMfswpG98TwtNd8+kurnxdc3F1zWXXtdctBotkzRLgyg7NjlOkjgMFhur90G8CusbWk2C2Laxc/XyiKS++zGez5SkXOn69u6jLEtaqtLm5a8AVoV5lkbT8yzvlSi4yudomj2Mvpx7gA3awebqjx1d/VO0isZxeOruo0XW2uUf27n84beTd+hPH2/YGjZXKxwxpiaUoaw+YszW0TRcXWhm+2UKrvSwLfbu0lM/LFf2wWxeOhi/cxNx8Bim28v//DRy97ZfsB1q0nV41wsmWfRp99uzZ5KM/wgn2bay//rt196g90scrFZ3T3MSOyOJpj/e/e7tP6nDutkr2X7x6FEtk6/taeAT0aeEysP6H/ceRQbG48Prp/b2g8UsDp9sSGdkSA3xKJN9zuuZC+NwPpok6eJ4ytBenXIjeUdyXK+vY5cmXDHpff2hDWw9hNHsISs2xikx3vMfU8/YwSxqbw41ebBfWDiy7X1+cjJVxc4qC9Mwcc23yFpjE5bOebjIOrt+MLaftXweGjg37lZ6ROvlMg1Xq9HXN1adm0rsRDvIbPfRmandAFayUnm/18hQySo1N7Rtb509uc9psLzCF5SbCe4tnyML/FEf+rUHFV69628f08hOkcNRHC5mx33o00xGN7ORBbPZ/ky81UeVV+HCKOAR6u3/0AbG9mdUBatwr+Y3cx/F8WUL+y6Eahay8EvWbR0WiV1VxqP75Ljjd6/17oN5FD+6FrJOIzcBCz/f9VbZo5tx2QnT5iK/bN6sdwe7YeFb3sMyiR/nSbp8iCbf8jYmbkbq/vkivo8Kd7MKbP96dBv/F8afwiyaBM06pW9j/RkYFyeTlKhWuqzDZljCMPf3f1pg8KJV72Dq7HmijfZ+0S5rtUFffrjNm22JR6kOvkBVs5KF08PDlf56Hn8tfOwUueglPlgVRNMCP/EZT0rRYLe/uDkyNY7s3CRrzZx9/uuz9lqzdLyw6s5WPrmO4ih7PGUuXKzn24b33IdT3cyJtVxJP2qNx+ewHa0myenmUdvcSZ/UlbDZugbs1zEO06sR9ClI3RLlL3aG/T/gCBzdPkdZlMXh1flhEvyAn9fAzzRcTdJo6RxkV6eIGwxDwOi1YTRaxkEEmAATYKoJ0x/rVRbdR5MAoxJAAkgtgYRxCTgBpxZ8dqssyMLRFf3ecHoDoNcE0Nz9mYIgEASC6hE0XkfxFAgBISBUHSE7e5sl6SPgATyAp6raZ750QiqgA3SATjV0lmmUpPZLAjyAB/BUhCcN/70OV1k4HWXR/Hp6n6mdKwIgAPQKVj1p6LzWoAf0gJ669IwfMXMDOkCnhscaAw/oAT2193sw8ACd14NOpWRIT/k73l1IlTBfWvTCrnJX7K6/2s+/tckrVS/RFG2aaIoZwvoDj+gOE01ZG1TmRuRQCuJpLftcEl92mW2qYcVKZZuSxDB9rWxT6iBDgN9ZtqnPSfpnkk4LokqRcgopp5ByCimnkHIKKaeQcgopp5ByCimnqqWcai35E3JOIecUck7BIwaP2HWdyaAH9ICeyvR8TtJp7le7dtI2EASCXgVByNUGfsBPg2XPwv5rPUFWHGAEjFrBCDlxABNgahaY446IBEEgCAQ1IQgjETgCRw39cxvdGxK0gSEw1JAhd3UgBISAUG2EgplTZIAhMASGKqbKiYPFIpy6iZxdGSF0FBABotoQhQskzQFCQKgGQvbRrYMYwxAYAkMNGcIoBIJAULOJ3P39Nbdap+EkmgfxX6jXZ9giAkmvYiyaJOvF9bOIgiSQhHSimNGBHtCDdKJAB+g0jWHFwAN6QA/SiQIdoIN0ott0oqxpOlGpCace7Rvie5p2mFPUGmIqN2SkpkNtiDRM9ZkiXGraZWLRNqpYKrsoJYwx2WFKUWprspfER3aWUvQhWmVJ+oiEokgoioSiSCiKhKJIKIqEokgoioSiSCiKhKJIKIqEokiJCJ/Y23Ungx7QA3oaRIoCIAAEgKrnE0WOAoADcGrM2+yizi3uFuFnZJwCRsCoGUZJPAVGwAgY1cPoPgrjqSuE1PBgCAwhHgf0gB7E4wAdoANZdAuyaN5YFu0TjzHe55x4vFNZtCG+doYY8Q0dak0Mtb8KQ4zpVhXdQg3LqKKpIVo8l1ywLgXSkuh9VULXAuk8ay5U0lBJQyUNlTRU0lBJQyUNlfRrVkkbcyRUHvycxNPfx3H077qDRj3J9Ik7aXQXkE5DOg3p9IuSTsNpBqfZq/A3Y7MT+ACfBrqbjTcBCAEhIFQLIXuz0fSa2umVXUzFmMABH8htILcBPaAHchugA3SQ/hb0gJ4r04OBB+hA53mDOs/3WbCYBum0N+h9jGYfg9mv0SJ8pvikW8WnaKr4VJr4jIo8IW23mXCtJaM3lphLhasMEWKrxKyr+UzS7GGU16ZWHU8UNYQxSasUPVSSnizJ/aaqWlfTJI1OaBkLeo6D9+iZ92rKbIJ1lqTJOmtRXDVJFgvbbBy2R+Pl7p2eHdumW2lIluTZoHtP79rHfVTTE5+l28/y/c8efTtHN9QmvbKFNNZM+qZPNVEd57EWxGPad5akHLrc0t7Wbu001uXgLaziiaKSKGUqFz1bzlZbb6qt3h645eWwbXDLKoFL9z8svauSq5qSaxuUr5jsU9sQZYfcOjvU2eFEyyGzY5Z0jdl4VHVJbUH1zhTU9v7oWRbdzZcvx4npENiSUJ773C2OtN4BsbwBsYy1Quz5iCjdlNMBpXbA43by5hPh0y5RdaaUtzUlqBxSRrTxmYuK8gWVXYZFtVPNUsdFCML8To+LsDVoRbJZIhpqEowRBIUgKARBIQgKQVAIgkIQFIKgcFQEjopAvBPinRDvhFzd2D9+u9IL0AN6QE9letar654SAXAAzusYdtarLJlbeK5NEEIGgRIUgN9MAWia7nB6RPrM1+IKO5zWlNiYYsQfCsK5kyZYu7L29mY5OUJxHY/Liq2sr3xJW5lL5Uxe0f2CkP+1I0rQhRK+y5oEr1A62I6I6EP4JTsBrd8UWmaItE3Pbdsbr0vd31dDnGhOh1ISRjd2OaX1tz4uebIOyhRunaf7je9o6P7Hh/e//ZIvyH8LFsEsdEN9a8P5gfu6oQu7zh0c+SBPuVbPuLDr2NxvmFUaZ73p2f4W2cltMn3v/ms4aYqj2aJoJlh9atbC/OVTfkvF3T2/gF87XRX1GkuotB1+89bgd6me2lrhxPDhQHpEabaxKm6gn/r9wz/f90Tv76kt707LRB/VcR91slGig3rJHdTP4X+iMD1YBu2EnnYy0rSb4rLvc+LrTjWebgJlPGVbniS+J21XxQUxSoi+LwilXs09wnH4n8uroFM1PFVKE3s39j4vlLMEMclZXzBC2fmiQhHtirpa67oPeCNizTPPr+otgrwu9UbTwP3XpXyKtSifyjv74qdYcz9+GqweTgvZym/1Nxd9U9Y4KtIjHhe8r+zwQOvu25eLq/KJbzaWjPLVUBvCuDJ94xFf1bVcTvPdSiVLnoVBZaeSb2uhFalFCcn3zpkH3Td039B9Q/cN3Td039B9Q/eNwy96OPwCYnCIwSEGhyQPOiJI8nD4BfABPk0UrTj8AggBoWYILbI2FU+XCIqTxWwcJ2PQA3punx53TcQiARyAgzOXgA/wudqsDWcugR7QgzOXgA7QwZlLoAf04MwlDDxABxkXusy4cCGogDcNKvAN0T7z+8olPlCmw6ACZ0lsLDGjzJBSQ6TgfW3/MnUtlwsqaKWSpYIK/ENJTZfxBYLQNoxViC/I45wQZIAgAwQZIMgAQQYIMkCQAYIMEGSAIAMEGSDIAEEGcJ3BdQavM4IMgA/wgVQN+AAfSNVAD+iBVA3LHqADqRoGHtADeiBVAzqQqr3dw4GoaCpa2+SjVX3t8uh3mgnXWqJmY4m7TLgbJZnMLdcWrZU7Hqiwkif0bYxILSqW3BPCndbMiW1NeaOa4oSgkycEUbZ/zA8zVc4Iovzg06yVU4IuyE1lU3KlJtyXpj+ggnCjeZdJrK0psTUluOZDo+wLnPcFUYrpLvWm7dSyjOCUGWJ8LRtvzL+0hNa28U4j13YhNoXYFGJTiE0hNoXYFGJTiE1fs9j03CFn3etL27IOXSl0pdCVvihd6TiawdUNV/dr2iUCPaAH9ECYDXyAz/XwCb/k3ssoWTgP9R/rxaTQRw2gABSAwnEKQAgIIVgI+AAfBAtBsw16ECwEzTbQAToIFgI9oAfBQkAH6CBYqDhYSLURciCk6g8EMd1GHFBNfEWdId/FG2yiAFTfvky7DBQqrOBxUcYJVYxXKWrv3pPnClJDPEoPyyFKqKUoIdkkSsjb/7AQ1wgS0o1z0nNi8ugZSahgrMuc9NaSt7XkMzak9h/Gty949q+6lkvmpG+jkqVChCjx/eeSQ3brOel3sUGjp+1YhAkhTAhhQggTQpgQwoQQJoQwIYQJIUwIYUIIE0KYEAId4OR+k8LSnZMAAAEgAFQZoI3HF7pS8AN+6vDztTwQAkJAqNYQlPuWkxQEgSAQVIegVRjbSVySIrwOCAGhuhGqyyANR3kjBEfgCKrTN6A6NW1o2Dyt+wNDvG41bEYR5vONJadhy4VlzrIghtfWu5ZSnhZW8kRRj3haVit6WaS6SemtG2p7b1h+Wl4lVE99qouzzJfIUX9Gu9qd/NRvAV2tjd/nRGipulWfarYxxKTKxaeepH3qE87qGi4tPm1cxZLaU8aY7FJwKom+nuA0mCAnPcSmEJtCbAqxKcSmEJtCbAqxKcSmEJtCbAqxKbRy8G1DbAqAABAAqiyWy/1qI/t1jMMUGX2AD/CBVhv8gB9otYEQEIJWGwSBIGi1oTEFQkDoohsBUm1gBKn2jUu1z6s8mddU5UmZJNxpl5lHPOGbLvMCO1Nsa8r3zZAKSpixL1Du1IumS6lnO/UsI/Z0uVNlC1LMUrpPRdj+Jj3tUve5aZnQfUL3Cd0ndJ/QfUL3Cd0ndJ+vWfdpzJH0cvBzEk9/H8fRv+sOGvVEoCfupNFdQAwKMSjEoC9KDIqdHPjPXo8b2r0P9zPwgfv51bqfaRvuZ0VZf0ApoUqojt3PUm1MMSrUkApBhMfyg+qoUF17n5tXs5T32RAtrnXM1XW9z18/BQc0HNBwQMMBDQc0HNBwQMMBDQc0HNBwQMMBDQc0HNDwoMEBDQc08IED+k04oFkbDmjpPLOMSF+Jjv3PQuWWlFBiSAUnXLA+J0ryzr3PjetYyvmsiTYtzNJfovR5G9gJ3zN8z/A9w/cM3zN8z/A9w/cM3zN8z/A9w/cM3zN8z3CewfcM3zPwge/5TfieeeMT1gxRxud9IYkStMvUG84S31iSPjVDSg0R3O9LToRPO0280UolSzmf/cPJVofOZ304R9YdOJ8f7DcYjlaZbbejeTB5iBaQPsP9DPcz3M9wP8P9DPcz3M84cw1nrsHTDE8zPM04MgqOsjeZLj33DlwRHpADcl7HDo1bEwEf4IMdmpvdoXmfBYtpkE57g97HaPYxmP0aLcJnezV0t1cjmu7VGEW44NolizFG8w73aqwl5m8s2b/40OdEa6P6lBLBZN0MOWn2MMqrU6uSJ7Z1POJxxaoUtRXg+nkFThS1dWWbuu4XrVzXJI1O7EEU9B4H79Ez79V0jwXrLEmTdXbJKVreGz5JFoswP+hjdTRs7t7pPVg8ts6MLLEcUHnXe3rbLoTNUVVPfJruPu0ffPpotX50U61CLBsH+7jc/L7pDwzxBGNdBvs4S8Jaoor4+VkHu/MHtP29tulSFBfW8lRkkLfJS1WhqKvR3gEKBYctuJMejsqC43Y41gcksiocM2//05Rdl2N1gxwbQvOccbtEbi8OY80rltxLQ1cQNKjYcVEg/BIQpt8WYX2TCHsW2eEmGpb3PSJrx912MxB7ukpRe/8ev4iwUPyo5FshuMJq9FsgzL4twqYNhD1JGy7WyiLsedQ2ZGGRHVLhW67kNVbEhXU8UdTdlZBVipZAeJskAAh3hPCZJe3LR9i/PYSfFsSvBeJSC+L8pEP1hhfELxzkb7si5s2P8RSCcEtTs9VaJZB3K+IrclxUyTNwli9aBvlWuktQXEjxuWXtN/NPnw8D4o3PQOAeYVr0FSNSqC5Xws4Qyw0JX7GhbfeWjb42FirFuowBaqOGL+7wA9sX6DbijUqEAE2i5SiI42QS4PADRAAhAggRQIgAQgQQIoAQAYQIIEQAIQIIEUCIAEIEEITYbzKOwTkFZkn6iCgGwAN4qo4586UbzoEO0AE61dBZplGS2i8J8AAewFN10mbXbVk4yqIrZgmdFu0egR7Qc4v0jB8x8AAdoFMJnY2iAAMP6AE9denBwAN0kC/k1WV0541PE/UF4ULSPuPE91WnGd0FYf7WklAuo7tPhJR9bggTqtuM7m1Usoyckzm19bUyulNB6JXknIski+6jSY4R5JyQc0LOCTkn5JyQc0LOCTkn5JyQc0LOCTkn5JyQc8JP9hbTUuPgUOADfGqPOlk4f3KJACSABJBqgRR+clNVaDtBDsipRo692Wh6TXJW8yCOgQ/weR0am+3uD+ZuQAgI1fMhPBMYjNJ1jHUQWIJu7fXq1njj9KGMOzlZXyjCvU51a7klkVti0unW7D+MkX3JiJTd6tZaqWQp3Ronkl9Lt2af4/4OI72Kbm00S5criNcgXoN4DeI1iNcgXoN4DeI1iNcgXoN4DeI1iNcgXoOzDOI1+JqBD3zNr8vXLJr7mkV+YBRjRHTtaxb5yU7WEt/4mjWRTPbdcTSd+5pbqGQpXzMj0lzryBt9OEPW1/E12+8Vrma4muFqhqsZrma4muFqhqsZrma4muFqhqsZrma4muEre+saZzAEhsBQZYZmabJeAh7Ag82aG92seZ8Fi2mQTnuD3sdo9jGY/RotwmfbNnS3bSNb27bRnYcIUJ9wmVtieWpba9kXG8u1t22SNHsY5dWpVclTRRmhFUsy/0JJl8TXO1G0ck2TNDqxE1HQdxy8R8+8V9NJFqyzxI412SXXaHmf+CRZLGyzcdweDZm7d3oPFo6tSyNLNpuXvae3bU2PH8OJT9Pdp9n+p4+iOo7uqVWCVWsEG+J3vfFqW/zGkpHPCBY+Udci+LCSp7l0oUgViroKXCy6jTI6LAqGu2GYVWKY73/atM3wh/BLdope3ZxeRZgWfSWIYKxTeLeGODFMD5/ZlZrV34W55FQ7KFO4i5/ut7/upuEHXvOGnvM6d3Dk+qzqSa5jdL8VVmmJ9dZV+1tzpbbnaq124mi2KFrCVV9TtbDw+JTfUnH3zi+w1lLHZBp3TNxOWu2ApzQRWnbZMe0MuYjh4TOzikn0S+iXihoi+qVb7Jf8pv3SgHt2xmJYf2AIrd1FlOqZnpvSUsvh8xc8iu4J3dO59ogO6gY7KOE1nzjp3KlgxytG66oWSs6ctpaUnSsJNXxmmau6ltE7va7JU0FjROd0i50TbWNVR43q+4oIO1p1vKzLLUliGGXDZ5alUvA4oXMqbozonG6xc2LNOyfbEIRtD5wYyrr1OW0tUeK7AEKfaN/+JgjT+gZWdb9/+Of7H374x4f3v/XEG+umGBHKF0Jw4QvP2G9Od99LFbRK9FK32EvxVnopP5/YaNV9L7Xpl4Rkckil26yjbrz0/BvoplwH9Use9/tbsAhmoWuOb6y7oraNcGN/GPU86SbCV+muTjVPdFe32F2JNror49qDJp7qVmGws2QboNJ2xSc8omhu2bb7G1jxMY+KgecPqMTa7xrd1MlmiW7qFrupxjrkgfL6A8pcIpcud/RyK5xQNtwZ5BrbeOiPTrc/9EW32Bep5n2RIDrvJ1jHvdHOjnH90e4XDz0SeqTCVog+6Zv2SZvf4+AxTH/6bvOL/X+WBvOfvvt/8D/3XYZIAwA=
iVBORw0KGgoAAAANSUhEUgAACSQAAATECAIAAAD3JA7bAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdeVxTV94/8BO2CgFqwiYJoKAsLtVWFpVC1eIK44Ib1qp19Gnt1LH2Z4s6trU4Uxcqrc9o7VMFLWKVolREEdx5WmQpCCMuLIIgSwICBmQPScjvj/v0Nk0guawB/Lz/6Cv33HPP+d5DZwr5noUll8sJAAAAAAAAAAAAAAAMHseOHdu4caO2o4D+88EHHxw5ckTbUUDH9LQdAAAAAAAAAAAAAAAAdNnq1atPnTql7SigP4SEhBQXF2s7CuiUjrYDAAAAAAAAAAAAAAAAABiskGwDAAAAAAAAAAAAAAAA6CYk2wAAAAAAAAAAAAAAAAC6Cck2AAAAAAAAAAAAAADoKRaLpZVntWUwxgx9BMk2AAAAAAAAAAAAAABghMViDe0k05B/QegLSLYBAAAAAAAAAAAAAAAjcrm8q7d4PF5Pmu1nzCPpi5iZjBUMQEi2AQAAAAAAAAAAAABAX6moqNB2CP1NLBZ378EXcKyGBiTbAAAAAAAAAAAAAAAGvfz8/KVLl3I4HENDQ29v75s3bzo5OdF3c3NzFy9ezOfz+Xz+kiVL8vPz6VvUxomNjY2LFy82MDAwMDCIiYlRbDk2Nnbs2LEmJiarV69ubGxU7bqgoKDD3RfHjBlDFbIUMHy2hzGrp6ZlikQi2bhxo4mJiaOjY3R0NF3u6+vL+jOlB6Oiovh8/rBhw4yNjefOnZuZmal4V83PiMlYwYCFZBsAAAAAAAAAAAAAwOCWm5s7b968efPmPXz4sL6+PjIysqCgQCQS0XffeeedgwcPCgQCgUDwzTffrFu3js4wUdshBgYGfvzxx2KxOCoqKiAggG75l19++fzzz8+ePVtVVfXXv/71k08+Ue3d0dGxwz0VCwsLqXK5AobP9iRmjWOlpmXKrl275syZIxAIvvvuu61bt6akpFDl8fHxat4lMTExIiIiLi6uubm5srJy586dmzZtunPnDt2vmp8Rk7GCAYuFnxYAAAAAAAAAAAAAwOBy7NixpKSkU6dOUZeLFi1aunTp2rVrO6y8cOHCv/3tb/Pnz6dLEhISjh49euHCBeqSxWKdPXt2+fLl9CWdO5g7d+62bdt8fHyoy4sXLy5atKjDzILiU0zK1dfpSczqMWn5+PHj69evpy4vXLjw3XffXbt2TWPY06dPP3ny5KhRo+iS+/fvb9269fr160TTz0j9W4SEhBQXFx85coTJC0L/Q7INAAAAAAAAAAAAAGCQUUq2mZqaPn782MLCosPKJiYmJSUlXC6XLnn27Jm9vX19fT11qZTjUbw0NTUtLS0dPnw4dSkSiczMzPoh2daTmNVj0nJ1dbW5uTl919nZuaamRmPYhoaGra2tSnWMjIyampqIpp+R+rdAsm2AwzaSAAAAAAAAAAAAAACDm0wmU3/El2oKZ+Avxem7mLvUsq6uro4Oo2SKoaFhcXGx/M+oTBth8DOCwQvJNgAAAAAAAAAAAACAwW3atGkXL17s7O7MmTPT0tIUS1JTU+mdIdWbOnUqfeoYIeT27dvdDpIiFouZVOtJzD1vWXEwU1NT3dzcmLTs5+d3+vTpzu6q/xl1iOFYgdYh2QYAAAAAAAAAAAAAMLjt3bv3888/v3Hjhlwub2lpyc/PDwsLo08dCw4O/uyzz1JSUqRSqVQqTUlJ2bVrV3BwMJOWd+7cuXXr1vv377e0tNy8eTMhIaGrsenr68fExBBCKioqDh8+7OnpyeSpnsTc85bz8/PPnz/f0NCQmJi4efPm3bt3M2l53759oaGhX3755ZMnTyQSiUgkunr1qp+fH3VX/c+I0r2xAq1Dsg0AAAAAAAAAAAAAYHDz8PCIiYkJDg7mcDg8Hm/NmjWtra3ffvstdXfs2LFnzpzZv38/h8PhcDjBwcGRkZHOzs7UXWpvQ3qHQ6XLGTNmBAUFLVu2zMLC4sSJE1999ZXiXeozRekzLSoqKiAgQEdHZ8qUKYWFhXFxcUye7UnM6jFp+Z///Ofly5etra3fe++9AwcOuLu7M2nZxsYmOTm5sLDQ3d3d2NjY09MzMTExPDycuqv+Z6RxrGAgY3pgIAAAAAAAAAAAAAAADBDHjh1LSko6deqUtgN5cbW1tQ0fPry5ubkf+goJCSkuLj5y5Eg/9AXdgJVtAAAAAAAAAAAAAAAAXXPs2LEZM2ZoOwoYEPS0HQAAAAAAAAAAAAAAAMDgwOfzhUKhrq6up6fnmTNntB0ODAhItgEAAAAAAAAAAAAAADAiEAi0HQIMONhGEgAAAAAAAAAAAAAAhoiRI0eyOjFy5EhtRwdDE1a2AQAAAAAAAAAAAADAEFFSUqLtEOCFg5VtAAAAAAAAAAAAAAAAAN2ElW0AAAAAAAAAAAAAAIOMVCptbGwsLi7WdiDQH0QikVQq1XYU0Ckk2wAAAAAAAAAAAAAABpnU1NQLFy5cuHBB24FAP5k4caK2Q4BOIdkGAAAAAAAAAAAAADDIeHt7E0JOnTql7UCgP4SEhGAV40CGM9sAAAAAAAAAAAAAAAAAugnJNgAAAAAAAAAAAAAAAIBuQrINAAAAAAAAAAAAAAAAoJuQbAMAAAAAAAAAAAAAGMpYLJaaW2ru9qfOIlET4QCJHADJNgAAAAAAAAAAAACAocDa2rrDcrlc3tkjam71s84i6ZXgTUxMuhMTADN62g4AAAAAAAAAAAAAAGBAe+ONN5qbm7UdxZ/Y2toaGxsrFVZWViqVxMfH+/n5kT/npZqamjZt2hQdHe3o6Hjq1CmlRzw8PAgh6enpGmOIiYkJCAiQSCQmJiYTJ06sqqp69OgRtdrsm2++2bVr19WrV3Nzcz/66KOIiAh/f39CyObNm69du1ZeXu7p6blz586ZM2d2+c07fy+q60OHDgUHB1dVVUVFRVGdcrncxsZGehncwMkvdklhYaGbm5u2oxgo4uPjLS0ttR3FH5BsAwAAAAAAAAAAAABQ5+7du8ePH+dwONoO5A8pKSkFBQUaq/n6+srlcqXtFrdv325tbS0Sierr60NDQ5UeYZ6LWrt27V/+8pezZ8+2tbVdu3btvffeox5nsVgymeyHH37w8/Nbt27dDz/8EBAQ0NbWRgjZt2/f4cOHJRLJr7/+unDhwoaGBoZ9MXkvqkQoFObk5Ny8eZPuVCQSsVisQZpjo40YMSIwMFDbUQwIS5YsoX6yA8eg/9cLAAAAAAAAAAAAAKBPmZqaFhQUWFlZaTuQPxw7diwpKYlal8bn84VCoeJdHo8nEAjoS6VUE5fLLSws5HK5hJBnz56Zm5t3L1Nw6dKlpUuXSiQSc3NzCwuLkydPuru7K3an9KGgoGDr1q0pKSlisXjy5MlJSUlK/XaWEmNerljS2efBKCQkpLi4+MiRI9oOZEAwMzPLzs62sbHRdiB/wJltAAAAAAAAAAAAAACDmEAgkMvlVDKJ+qCYaVOvJyuEFixY0NbW1tjYmJWVtWbNmjlz5qivv2LFCi8vr9zc3Lq6urNnz3a73x4aaIuiYAhAsg0AAAAAAAAAAAAA4AWycuXKr7/+WiKRCIXC4OBgpbseHh7UsW0aWVhYpKen6+jo2Nrauri4NDU1qa8vEAjc3NxMTU1zcnIOHTrUzei7RV9fPyYmRiKRJCQkzJo1qz+7hhcBkm0AAAAAAAAAAAAAAEOBpaWlUgmLxaIONqM/EEIOHDhQXl7O4XDmz5+/fv166i79iEwmY7jjor29/d27d52cnFgsVkBAQFRUFN0U3aBiy0ePHt2wYQOXy92xY8fatWuVqqnG2dVyxa6VwoiKigoICOBwOGFhYcePH2fydgDMDe5dSgEAAAAAAAAAAAAA+toAP7MNhjyc2aYIZ7YBAAAAAAAAAAAAAAAADB1ItgEAAAAAAAAAAAAAAAB0E5JtAAAAAAAAAAAAAAAAAN2EZBsAAAAAAAAAAAAAAABANyHZBgAAAAAAAAAAAAAAANBNSLYBAAAAAAAAAAAAAAAAdBOSbQAAAAAAAAAAAAAAAADdhGQbDGVPnz6tq6trb2/XdiAAAAAAAAAAAAAAADA0IdkGQ5ZYLK6vr6+pqZHL5dqOBQAAAAAAAAAAAAD6FovFYrFYvdvmZ599Rn+OjIzU1dVlsVgGBgYxMTGqXbNYrOHDh+fk5FCFv/766+rVq/39/VUfUWwWhgA9bQcA0Ff09fUtLS0lEomurq62YwEAAAAAAAAAAADoc9bW1hUVFX3UeHNzs5GRUR813ivkcnnvJtsKCgpqa2vpy02bNsXFxc2fPz8mJiYgIKCtrU2pd6XH33vvvdTUVA6HQwhJSUmZM2dOY2Mjdau2traoqMjBwaEXowUtwso2GLJ0dHRefvllc3NzbQcCAAAAAAAAAAAA0B8qKysVL6m1VocPH7axsVFaWbV582ZnZ2c2mz179uzExES68sGDB01MTFJSUo4fP25iYkI9Ul1d7e7uzmazrays/v73vzc3Nyv24uHh4eHhoTE2eu1Xh5eq8dB16urqNmzYYGJiEhgYSJW3trZu2bLFysrK2to6PDzcyclJsaNbt24xeV817dNCQ0PnzJlDX4pEovnz5xNC/Pz8XnvtNY2vLBaLqUwbIcTT07OpqYm+5ePjc/ToUY0twGCBZBsAAAAAAAAAAAAAwBBErbUSCoU5OTlRUVEBAQH0rX379uXn59fV1e3YsWPhwoV0ZZlM9sMPP/j5+T148OCHH36gHgkMDAwJCWlra3v8+LGPj49SUkoulzM5ykcul0+dOjUlJYW6TElJmTZtGv2gajx0SEuWLPH29hYIBPPmzaPKd+7c2dbW9uDBg6KiIjabLRKJFDtKSEjIz8/X+L5q2qddu3Zt7Nixqu9y8+bNy5cvK5YYGhpSqTvFJF9ZWVlno+Hi4nLt2rXORwsGGRaOswIAAAAAAAAAABjasrKyXF1dtR0FAFPbtm0LDg7WdhR/YmpqWlBQYGVlpe1A/nDs2LGkpKRTp04RQvh8vlAoVLzL4/EEAgEhhMX6IwtAfy4oKNi6dWtKSopYLJ48eXJSUhJVTldQ+mBmZqaY0LKwsKiqqupGzNeuXTtw4MD169cJIbNnz962bdvs2bPVxEMF0NDQYGxsrNiOtbX1w4cPuVyuahcsFksikejp6TF5387ap7388ssCgUDp7o0bNyZMmDBixIgOHyktLR0zZgy1w6Ti4Ctd1tfX29nZ1dXVaRqz/xMSElJcXHzkyBGG9Yc2MzOz7OxsGxsbbQfyB5zZBgAAAAAAAAAAMPQ5Ojr+9ttv2o4CQLPg4GAsEekqKq9GVLI7nVmxYsXKlSuPHz/O5XJramqsra3V13d1de2VZVhz5sz55z//mZSURAhpbW2lMm0a41HNhEmlUjW9UJk2RV1tn6Y6mBEREdOmTess00YIsbOzk0gknd2VyWS6urqdNQ6DF5JtAAAAAAAAAAAAQ5+uri59dBDAQDZs2LCWlhZtRzHECQQCNzc3U1PTnJycn376SWP9+fPnh4WFzZs3j8fj6egon05FHdiWnp7OpOvdu3fv2rWL+tDteJYtWxYSErJ3797q6urbt2///PPPP/74o5r6XW2fNnLkSKFQSJ8Jd+7cuVdeecXR0ZH8Oa/p7e09c+bMd955Z/To0TExMfr6+lS5oaFhSkqKp6cnISQjI8PU1LS9vZ1KtpWXlzs4ODCPBAY4nNkGAAAAAAAAAAAAADAUWFpaKl6yWKwO/3n06NENGzZwudwdO3asXbuWKlesoPiBEPLhhx9WV1d7e3tzudy5c+fu379fsReZTMZ8kZaPj097e7tcLn/zzTfpwg7jUfwnHR4lJCSkrq7O0tJy/PjxsbGxBw4c6Mb7qmmfNmfOnLy8PPpy3bp1kydPVq0cExNTUlLi6urKYrECAgKioqKo8tOnT8+YMYPFYllYWCxevPjSpUt0Hi4vL2/u3LkMBw0GPpzZBgAAAAAAAAAAMMRlZWW9/fbbubm52g4EQLOgoKCWlhac2aaR4plt0EcePXr073//uy9OStu0adPHH3/MfHEbzmxTNADPbMPKNhhqZDKZtkMAAAAAAAAAAIBe0OFCk354FhRhJOFF5uTkNHz48L5omcvlYhvJoQTJNhhS2traiouLhUKhtgMBAAAAAAAAAABGOtu9DQBgINizZ09fNPuvf/2rL5oFbdHTdgAAvam+vl4ul+P3MwAAAAAAGBTq6+tramq0HQXAi87GxsbAwEDbUbzQ1HyZ09kJODweT+Nka5ye01swkgAAGiHZBkOHXC6vr68nhLz88svajgUAAAAAAECzyMjITz75xNLSUtuBALy4ysrKsrKyJkyYoO1AoGsqKiq0HULHxGLxSy+99OL0CwAAFCTbYOhobGyUyWR6enpGRkbajgUAAAAAAIARf3//iIgIbUcB8OIaPXq0tkMY0PLz83fu3Hnr1q3W1lY3N7egoKC//e1vjx49ou7m5ub+4x//yMjIIIRMmTJl3759zs7O1C1qpVpDQ8Pq1avj4+MJIVFRUf7+/nTLsbGxO3bsKC8vX7Ro0ffff6/adUFBgZOTE1FZVjVmzJjHjx+TPx8kplSns2d7GLN6UVFRW7duFQqFbDb79ddf37t3r6urK3WLz+cLhUJ7e/uioiJCyOjRo4uKimxsbMrKyhT7feedd65cuWJnZ/evf/1r2bJldMtUBblcfu3atcDAwJaWloMHD/r5+WnsNyYmJiAgQCKRmJqa+vj4bN68efPmzQ8ePGByV4sjCczdv3//0qVLfD5f24FAfxCLxePGjdN2FNApJNtg6KCWtZmammo7EAAAAAAAAACAQS83N9fX13fnzp2HDx+2sLB4+vRpXFycSCSi777zzjtRUVH29vaEkCdPnrz11lvh4eFUxoXaGTIwMPDjjz+OiYm5cOFCQEBAW1sb9ewvv/zy+eefnz17dsyYMSkpKZ988olq746Ojh1uL1lYWEgIYbFYavY27OzZnsSsXmJiYkRERFxcnIuLi0wmy8zM3LRp07fffuvm5kYISU5O/tvf/nbixAmq8u3bt9evX0+nGKl+Q0JC3n333dOnT1dVVa1Zs4bD4fj4+ChW+Pe//93Q0JCQkGBtbb1ixQoq2aa+34CAACrL1d7e/uzZs6tXr1ZVVdExq7+rrZGELrG2tp4wYcKWLVu0HQj0h0uXLonFYm1HAZ2TAwwJEonk0aNHjx49amtr03YsAAAAAAAAjHz//fdr1qzRdhQALzQHB4f79+9rO4r+kJmZ6eLi0qVHFi5cePLkyc7uLliwID4+XrEkPj5+0aJF9CUh5OzZs4qX9Oc5c+bcuHGDvoyNje3sW8qulquv05OY1XvjjTeKi4sVS+7duzdr1iz6sqSkZN68eQKBoLy8fN68eSUlJUqhXrhwgb5MT0/38fFRqnDt2jX6UiqVMunXxMQkISHh+fPnHcas/q5S70olfTeSlC+++GLbtm1deqQfmJiYVFZWajuKPzl69Ojq1au1HQX0kwMHDnzwwQfajmKg4HK5ZWVl2o7iT7CyDYYIalmbkZGRvr6+tmMBAAAAAAAAABj0EhMTw8LC1NwNDw9XLPHw8AgICFAsWb58eYfPpqam0lsdEkK8vLx6FChjPYlZvfT0dGqNlyLFg07s7OyOHTu2YcMGuVweGhpqa2urVNnb25v+PHHixPT0dKUKs2fPpj/r6uoy6TctLW3z5s23b98eMWLEhAkTDA0NDx8+bG1tzeSuen03kgAAgxSSbTBEYA9JAAAAAAAAGMLUb5rXd8/Ci0wmk6nuH6hI9d+rgf9vWh/FbGhomJubO2rUKI01WSyW+lGlGBgY9LzfcePG3bx5U7HEz8/v8uXLTO5qNBh/+kPSf/7znx07dmg7CugP6enpY8eO1XYU0Ckk22AoaG5ulkgkOjo6xsbG2o4FAAAAAAAA1KG+ZcZ3sh3C4MCAMm3atIsXL65fv77DuzNnzkxLS6NODqOkpqbSx4ypN3Xq1Dt37syaNYu6vH37dg9DFYvFL730ksZqPYlZPT8/v9OnT3/66aedVSgtLd24cePx48flcvl//dd/HT161M7OTrFCSkrKX/7yF+rzvXv3FFf+9aRfJfHx8d2+q6jvRhK6ZMqUKWvWrNF2FNBP5s6d+9prr2k7CugUkm0wFFDL2kxMTJjMDAIAAAAAAAAtksvl+NutM2oGp7MMHI/HEwqFGpvtaWTwQtq7d6+/v7+dnZ2Pj09ra2tpaWlSUlJKSsqJEycIIcHBwatWreJwOB4eHoSQ9PT0Xbt2RUZGMml5586dH3744enTp8eMGZOSkpKQkNDV2PT19WNiYvz9/SsqKqKjo8PDwzMzMzU+1ZOY1du3b5+Xl5dcLl+9ejWfz29oaMjIyDh06BC1UKykpOT9998/ceIEtUnj8ePHN2zY8P33348cOZJuoaio6Nq1a9OnT6+qqgoMDNy7d2/P+7WwsAgLC3vjjTc4HA4hJCUlRfH4FfV31eu7kYQumTRp0qRJk7QdBQAQQoiOtgMA6Kn29vbGxkaCPSQBAAAAAACAAbFYrO0QelNFRYW2Q4Ahy8PDIyYmJjg4mMPh8Hi8NWvWtLa2fvvtt9TdsWPHnjlzZv/+/RwOh8PhBAcHR0ZGOjs7U3eptDGdPFa6nDFjRlBQ0LJlyywsLE6cOPHVV18p3iW/77VIP6W69WJUVFRAQICOjs6UKVMKCwvj4uKYPNuTmNWzsbFJTk4uLCx0d3c3Njb29PRUPNVs6tSpV65cmTp1KnU5ZcqUK1eueHp6KrbwwQcf/Pzzz+bm5jNnzvzggw8U7yq9i2JI6vu1t7fn8XgffPABj8dzdXVduXJlVFQU/az6u9oaSQCAwUoO0Ku++OKLL774oj97rK2tffToUUlJSX92CgAAAAAA0HPff//9mjVrtB1Fn8jLy1uyZMnw4cOHDRvm5eV148YNR0dH+i4h5MmTJ2+88Yaurq6+vv758+cVnw0ODnZzczMxMbGxsfnoo49qamoUHySENDQ0LFq0SF9fX/XZn3/+ecyYMWw2++23325qalL66uOnn37i8XiEEDabPWfOnDt37vTWG+Xk5CxatIjH4/F4PH9//7y8POYxX7hwwcXFxdjY+O23325oaFD9rubRo0cdfoczevRojd/zdPZsD2MeShwcHO7fv6/tKPpDZmami4uLtqOAjuFLWiVffPHFtm3btB2FMhMTk8rKSm1HAQByuVzO5XLLysq0HcWf/Gkbyba2tjt37jx69Ki6urq1tXXYsGHm5ubOzs5ubm6KZ3IGBQUxzOQFBQUpVdbX1x8+fPiYMWNef/111eO12tvbMzMzHzx4UFVVRW21bG5uPmrUqPHjx48YMYJhp/S7HDly5Pnz58wDVlON+StD/6P2kMSyNgAAAAAgv//qjl/gAbQrNzfX19d3586dhw8ftrCwePr0aVxcnEgkUqyzcePGb775ZvLkyRcuXAgICGhra6NvTZo0adu2bYQQkUh08OBBf3//X3/9lboll8tZLFZgYODHH38cExOj9GxaWtrnn39+7ty5sWPH/uc//6H+r0D+e+ooMTExIiIiLi7OxcVFJpNlZmZu2rTp22+/dXNz6+Eb5ebmvvPOO1FRUfb29oSQJ0+evPXWW+Hh4dQiD/Ux//LLL59//vnZs2epzfQ++eQT1d6prJ7qopDCwkJCCIvFkne+S2Rnz/YkZgAAAABQ8keyraSk5Ny5c9R2fJSmpqampqaSkpLk5OQVK1YobiLcbRKJpLq6urq6+v79+xs2bKB2BKa0tbWdOnWqrKyMLmlpaSkrKysrK0tKSurqX8s3btygcjAwtInFYrFYzGKxTExMtB0LAAAAwCCmmKPq0uw65hPm6GanTJkyf/581dbi4+PT09OVKtOkUml2dvajR48qKiqam5t1dXW5XK6Tk5OHhwebzWYY8ODSwxED0KIdO3bs3r177dq11KWNjc3777///vvvK9YJDg6mjpnx9/eXSCSKt+bOnUt94HK5QUFBqmcIvfnmm97e3qrPBgUFffPNN6+++iohZOrUqUonmQUFBZ08eXLUqFHU5fTp00NDQ7du3Xr9+vUevtH27dt3795NZa0IIaNGjdq1a9f27dsvXLigMea9e/cePHjwlVdeIYT4+Pg0NTUdPXpUYzw915OYAaB30bssqkmcAwDAAPd/ybaysrKIiAiZTMbj8V5//fWRI0caGhq2tLSUlpYmJycLBIKIiIi//vWvNjY2pKO/4jT+TU7fampqKisru3r1am1t7a1bt5YuXUrX+d///d+ysjI2mz1z5kxHR0djY2OJRFJTU1NcXPzgwYMuvVVZWVlGRoarq+udO3e69KD6t4ABiEqpstlsXV1dbccCAAAA8MLp3oS5e/fuzZ49W0/vT9tsSCSSe/fuddZReXn5uXPnqI0rKFKptKKioqKiIjU11dfXl/pufajqxohBH8HSSYYSExPDwsLU16EybarEYvHXX38dERFRWlpqZGT06quvqn77vHz58g6fvXPnzpQpU+jL6dOnK95NT0+nc0s0IyMj9XFS1L+R4glJFA8Pj4CAACYxp6amurq60pdeXl5M4um5nsQMAL0LOTYAgCFAjxAik8l+/vlnmUz26quvLly4UEdHh7pnbGw8btw4FxeXixcv3r17Nzo6evPmzT1MabDZbBcXFyMjoxMnThQVFSneevjwISFkyZIl9J7jurq6NjY2NjY21EQqhmQy2cWLF9ls9qxZs7qRbINBRC6XU9vZYw9JAAAAgF7EfHbdtWvXujphjs/nCwSCnJyciRMnKpbn5OS0trZSd5UeKS8vDw8Pl0qlPB5vypQpI0eONDY2lkqlIpHo0aNHGRkZFy5cGMLJtm6MGIDWyWQy1X0LGfroo48sLCxu3749fPhwiURSUlIyduzYXonK0NAwNzeXXtnWJRrfSPW78oH/7flgjBlAW0aOHFlaWtrhLTs7u5KSkn6OBwAABho9Qsi9e+vU+EIAACAASURBVPfq6uosLCwWLFhAZ9poOjo6CxYsEAgE1N6PvfJHLLWfjFgsViyksia2trY9bDwpKam6unrZsmXDhg3rYVOqqO8Xvvjii8zMzKysrJqaGolE8sUXXxBCBALB3bt3nzx5Ultby2KxXn75ZWdnZy8vL0NDQ9UWgoKC7t69m5GRUV1draOjY2tr6+PjQw1LdnY2VS6Xy21tbWfPnq16Xl1tbW1KSsrjx4/r6+v19PSsra2nTJni4uJCV/jv//7vurq6jRs3WltbUyUxMTHZ2dmEkEmTJvn7+1OFFRUVR48e5XA4W7ZsoZ8tKytLSUkpKytraWkxNDS0s7Pz9PSkFjUyGQdVYrH4/Pnz+fn5Ojo68+fPd3d37+Kod6q5uVkmk+np6TGciggAAAAAvasbE+YmT54sEAgyMzOVUkdZWVmEEFdXV6XUkUwmi46Olkqlbm5uvr6+9B8senp6PB6Px+N5enrGx8f3+qsNHF0dMYCBYNq0aRcvXly/fn03nv3pp5+Ki4uHDx9OCNHT0zMzM2P+rJubW0ZGxuzZs6nLGzduKN718/M7ffr0p59+2o2o1L/RzJkz09LS/Pz86JLU1FQfHx8mLU+dOvXOnTuzZs2iLm/fvt2N8BRRO/pqrNaTmAFeQEinAQCAenqEkPz8fELI1KlTO1u1pqurO2XKlLi4uPz8/F5JtlVUVBCV1UgmJibPnz8vLCwcN25ct1uurq5OSkoaM2bMhAkTehpl5y5fvqy6Zi40NFTxsqampqamJicn591331VNBSUkJPz222/0ZUFBQUlJybvvvpuRkUEfukAIefz4cXl5+caNG7lcrmJhVFQUfS6xVCotLi4uLi5+44033nzzTarQwcEhKyuruLiYTrYVFxcrfSCEUIsLFbfRyMjIiI+Pp+eyNTY25uTk5Obm/uUvf1Hc10LNOCipra2NjIysqqoyMjJavny56pYdPUHtI2RqatrtKZMAAAAA0BPdmDD3yiuvXL16taSkpKamxtzcnCqsqakpKSkxMDCYMGHCxYsXFetTUwNHjBihmGlTZGBgsHjxYtXy7Ozs3377jZrcZmdnR09uo3V1tpzGBgkhBQUFycnJFRUVcrnc3Nzc1dXV1dW1w3WBGufPdXvE+uLVGDbY6yPQP1MVmQ8F/QqK74ItJTu0d+9ef39/agxbW1tLS0uTkpJSUlJOnDih8VlHR8djx45t2rRJLBZfunTpzJkzzPsNCgrauHHjuXPn7O3tMzIyfvnlF8W7+/bt8/Lyksvlq1ev5vP5DQ0NGRkZhw4dunz5cg/fKDg4eNWqVRwOx8PDgxCSnp6+a9euyMhIJjHv3Lnzww8/PH369JgxY1JSUhISEpi/L0VfXz8mJsbf37+ioiI6Ojo8PDwzM1PjUz2JGQAAAACU6BFCqBOD1WdBqLtKZwt3Q3Nzc0lJydWrVwkh1PG/tIkTJyYlJZ0/f/7x48fOzs58Pr+r55zL5fKLFy/q6OgozszqC5mZmZ6enpMnT+ZyufQf/KNGjXJ1dbWzszM2Nm5raxMKhbdu3RIIBElJSfTZzrSMjIzXX3998uTJpqamT58+jY2Nra6uPn36dH19vWp5UlLSokWLqAfr6+vPnj3b1tb2yiuveHp6mpmZtbS0PHz4MDEx8ddffx09evTIkSMJIfb29lSyzdPTkxBSU1NTX19vbGwsl8vr6+vpv9KpxBv9o6+srExISJDL5a+99pqXl9fw4cPr6uqSkpLu3r0bHx9va2traWmpcRwUPXny5OzZs83NzZaWlm+99RaHw+nFn4JMJmtubibYQxIAAABAe7oxYY7KD2VlZWVlZc2ZM4cqpBZpvfLKKwYGBkr16amBHf7C2ZmrV6+mpqbSl9Tkto0bNyoukenSbDkmDaalpV25coW+FAqFQqGwsrJSNTwm8+doXR2xvng1hg320Qj09VTFLg0FMOTh4RETE/Ppp58uW7aMxWI5OjquXbv222+/pe5S0yVZLBY10VPp8tSpU++///7u3bs5HM6qVauio6OpGZYdVla6nDp16q5du3x9fSsqKhYuXHjs2LH/+Z//oaOysbFJTk7+9NNP3d3d6+vr7e3tFy9erHRuWffeaOzYsWfOnNm+fXtiYiIh5M0334yMjHR2dmbyvjNmzAgKClq2bJlAIFi0aNH333///fff03fp+kqfFfd7jIqKCggIkEqlNjY2/v7+cXFxqvVVn+1JzAAAAACgRI8QwiRjQd2lanaD6ly/V1555Y033lAsmTFjRn19fXZ2dmZmJjUJy9TUdNSoUZMmTaI3pVEvPT29rKzMx8enJ0mdzg6oUOTu7k7/lUtbt24d/dnQ0HD06NHm5uYHDx589OiRarLt9ddfpzdnsLGx8fX1PXnyZF1dnbe3t2q54lq0tLQ0sVisuBWkgYGBp6enrq5uQkJCeno6nWwjhJSUlMhkMl1dXTqpJpfLHzx4UFxcbG5uLpPJqCXwdLLtt99+a29vd3JyonN7ZmZmixcvbmxsLCwsTEtLW7hwocZxoN25cyc+Pr69vd3Z2XnJkiVMdrHoEhaLZWZmJhaL9fX1e7dlAAAAAGCoexPmXF1ds7KysrOzfXx8dHV1ZTLZ3bt3CSGTJ09WrUztikH9lsvcb7/95u3t/dprrxkbG1dWVsbGxj579iwpKUlxDVyXZstpbLCysvLatWuEEHd3d09PT1NT0/r6+pSUlIyMDKWmGM6f6/aI9fqrMWyw70agr6cqMh+KoKCgzs4vBFUeHh7Xr1/v8JZSwkbp0tnZmUr/dFhB/bOEkKVLly5dupT6XF1dbWJioniXz+czzK6pUvNGhJCxY8eqLjPtMEjVmJcsWbJkyRLm9ZX4+/vTGWX1XSvpScwwGOXl5eXl5WFzIBgspkyZou0QAAC6QE8rvb788svTp09X2rVSV1fX39/f09PzwYMHJSUllZWV9fX19+7du3fv3rhx45YuXdrZLpeU58+f37x508LCglrL1afc3NxUC6m/JIuKiurq6hR/zaW2OlSi9Fcxj8dTU05tzkMpLCwkHf3HZvz48QkJCWVlZdSlsbGxpaVlVVWVQCCws7NT3C7ywYMHRUVF7u7u5eXlEonE0tLS2NiYeorKvXl5eSk17u3tXVhY+OTJEybjQLl8+TL1R7WXl5ePj09f/Cano6PTu0vlAAAAAKCrujdhjs/nW1lZPX36NC8vb/z48Xl5ec3NzSNGjODz+aqVm5qaCCFKX5dr5O3tPXPmTOqznZ2dn59fRESE0i+0XZotp7HB9PT09vb2cePG0dtscDgcPz+/pqamnJwcxaYYzp9T1KUR6/VXY9hg341AX09V7NJQwCAiFAp3794dGBio7UAABgoXFxcXF5fc3FxtBwKgWVBQUEtLi7ajAADoAj1CiJGRUX19fX19veJuG0rq6+upmt3rhpr3J5VKq6qqrl+/XlxcfPr06Q8++EB1TZKVlZWVlRUhRC6XP336NCcnJy0tLScnx9zcXHWXD0VxcXESiWTBggXqc3IMQ1VPNcdTXV194sSJDv8bIJVKVQupo55p9KqvDstlMhldUltbSwgJCwsjHU3uo76JoNjb21dVVRUVFdna2lJ/Hzo4OFDVnjx5IpfLVQ9so37KFhYWStFSu0cq5vwoanJdVKZt5syZ06dP76wOAAAAAAx23Z4w5+rqGh8fn5WVNX78eCpLp3pCcE8oHTVNJaWUfqHt0mw5jQ1Sv3KrzvybNm2aUqqJ4fw5JV0asd59NYYN9t0I9PVURRqToYCB76uvvtq+fTshxMLCYteuXX//+9+1HREAAAAADH16hBAej1dfX19cXKwm2UZND6T/qulmZ3p6PB5v1apVx44dq66uTktL8/b27qwyi8UaMWLEiBEjrK2to6Ki7t27pz7ZVlBQQAjp8LDlXt/oQzVHeOPGjZaWFj6f7+PjY2VlZWhoqKOjI5VKv/zyyw5b6Gyll8YVYFS2rL29vcO7imk5e3v73377rbi42NnZuaWlhcvlUpk8DodTW1tbUVFB/UwdHBzU96iGmv0bR40a9eTJk99++23MmDGdzbcFAAAAgKGhGxPmJk6ceP369aKioqKiouLiYn19faUTnWlsNvv58+cNDQ1d2tVA4yS2Xpktp9ggNXFN9XAv6rBkRcznzyliPmK9/moMG+y7EeiHqYoMG4RBYdu2bdu2bdN2FAAAAADwYtEjhDg7O+fl5aWlpb366qsdzjyVyWTUedT0Sbk9oa+vP3fu3B9//DEtLW3atGl6ehq2shwzZgwZ8NMJqVmcy5YtU/wK4NmzZ73e0csvv/zs2bPNmzdrPKN71KhROjo65eXl1JHy9Ao2BweHzMzM/Px8gUCgo6OjuHGKqampSCSqrq62s7NTbKqqqop0ceuet99+OzIysqioKCIi4q233ho1ahTzZwEAAABgkGI+YW7YsGHjxo3Lzs6Ojo6Wy+Xjx48fNmxYhzWtra2fP39eUlLSpWSbxklsvTVbrhuYz59TxHzEev3VutqgRl0dgX6YqsiwQRjCRo4cWVpa2uEtOzs76swFAAAAAIDO6BFCJk6c+Msvv1RXV1+6dGnhwoU6OjqKNdrb2y9dulRdXT18+PDO5k521ZgxY3g8nlAovHv3rppzvyjl5eWEEPpcsc50uHCt3w6vpv5OU0ocpqSk9HpHTk5OqampycnJCxcuVF9z2LBh1tbWAoEgLS2NKKxgs7e3z8zMTEtLk8lkfD5f8U/0kSNHikSi5ORkpWTb7du3CSFdSpjp6+uvWrXqp59+Kiws/PHHH1esWOHk5MT8cQAAAAAY1JhMmHN1dc3Ozm5ubiYq+wEqoqcGTpw4UelPlZ7o9dly1MS1Z8+e2djYKJbX1NQo1WQ+f04JwxHr9Vdj2GA/jEBX9VtHMAQgnQaghMViKa4JVrpF/rximHmbGh9U02+v1AcAAOgjOoQQXV1d6jSFu3fvhoWFPXz4sLGxUSaTUQdZHz9+/O7du3Sd3ur49ddfJ4SkpqbS/0U8cuTIzZs3CwsLnz9/LpVKJRKJSCRKSUk5d+4cIWTcuHG91XVfoLbNiY2Nra6ulkgkVVVVsbGx2dnZvd6Rp6enkZFRVlZWZGTk48ePGxoa2tvbW1tbhUJhSkrK0aNHFStTq9laW1tZLBadKrO3t2exWGKxmKjsITllyhQdHZ38/PxLly6JRCKZTCYSiWJjYwsKCnR1dVWPOlBPT09v5cqVTk5OUqn0p59+un//fk9eHAAAAAAGESYT5uzs7KjTgi0sLJQmeymaOHHi8OHDKysr4+PjO1yi1NbWduHCha5G2Ouz5ajft1VbSE1NVSqhZqElJyd3tQuGI9brr8awwX4Yga7qi46ocaD+ngIAGAKsra07LFeTwep2covJg11tnHn9Lu3YBAAA0FX/9/eSra3t2rVrz549KxQKqeSWIjabvXz5cltb217seOzYsRwO59mzZ/n5+S4uLoSQ6urq6urqpKQk1cq2trYzZszoxd573YwZM86cOVNYWEgdwU3x8PBIT0/v3Y5MTExWrVoVFRWVn59P7Q+phoODA7UozcrKis1mU4VsNtvS0vLp06dEYW9JyogRI+bPnx8fH5+ZmUkduk5hsVi+vr5UQrFL9PT0AgICzp07l5eXd/78ebFYrHEhIwAAAAAMIkeOHHFxcRk5cqSFhQWbzZbL5Q0NDXl5edRvoRonzG3atEljF7q6usuWLQsPD79z545QKJw6derIkSONjY2lUqlIJHr06FF6enpTU9PixYu7FLmVlZVAIIiNjZ07d+7w4cNra2tTU1N7MlvOw8Pj7t27OTk58fHx06ZNMzU1ra+vT01NzcnJUarp6emZnZ2dlZXV1NTk4eFhaWnJZrPb2tpEItGTJ0/u37+/cePGznphMmK9/moMG+yfEeiSvuiIWi33n//8Z/LkyQYGBj0PsqGhoaio6Mcff+x5UwDQPY2NjS9yBr2yslKpJD4+3s/Pj/w5j9XU1LRp06bo6GhHR8dTp04pPeLh4UEIYfglWGlp6YoVK/Lz8/39/Q8fPkx/YdVhv83NzVu2bImOjra3t4+MjKS+QqQqdFifWjx36NCh4ODgqqqqqKgof39/QgiXy21sbKS3C8ZiOAAA6HV/TE4cOXLkli1b7ty5k5+fX11d3draOmzYMAsLCycnJzc3N/oM6t6io6Mzbdq0+Pj45ORk6r+UmzZtysvLKykpqaqqoo6qNjIysrKyGj9+/KRJk3pxx5i+4OjouGrVql9//bWiokJHR8fCwsLV1XXy5Mm9nmwjhNjY2HzwwQfUT6qmpqatrc3AwMDMzMzR0VHp6wxbW1s9PT2pVKqUVHNwcHj69Kmenp7qfFh3d3crK6vU1NTS0tKWlhZDQ0M7OztPT89up1p1dXVXrFjx888/P3z4MC4urrW11cvLq3tNAQAAAMBA0z8T5mxsbNatW3fu3DmhUHj+/HmluwYGBl3NtJE+mC03YsSI2bNnX716NT09XbERNze3O3fuKO4R0qX5c93Q66/GsMGBMwJ92tG4ceOSkpKuXLly5coVqqSHxxbk5eXduXPnk08+6YXgAKBbampqVBNOLzJfX1+5XK50jOX27dutra1FIlF9fX1oaKjSI13KXYWHh0dHRxsZGQUFBW3btu3IkSPq++VyuZWVlVKpNCwsTLGvDutTJUKhMCcn5+bNmwEBAW1tbYQQkUiEDScBAKBP/WknEAMDA09PT09Pz662ouavCzW3PDw8qJkvFAsLCwsLC29v76723r3AuldZTR1HR0dHR0eN9TtroUvlhoaG3t7eGsdKX1//s88+Uy2fO3fu3LlzO3vKzs5OzaY0aqLq7JaOjs7y5cuXL1+uvk2GhEKhjo6OmZmZvr5+rzQIAAAAAN3WbxPmbGxsNm/enJ2dnZ+fX1lZ2dzcrKury+VynZycPDw86EnxzPXFbLlp06aZm5snJycLhUJCiLm5uaur67hx4+7cuaM0eZH5/Llu6PVXY97gABmBPu1o+vTpcrk8Jyfn+fPn1AabPeTu7t7W1hYREdHzpgCge0aPHj1y5EhtR9Hf+Hw+9f/V5PfVYDweTyAQdFafmnVhYGBgbm7+3nvv7dy5U/FuRkYG8643bNjA5/MJIUFBQS4uLnSyrUNRUVF5eXkvvfTSSy+9tGrVqo8++ohJF/v27SOE+Pv7SyQS5oEBAAD0BOZ0wGAilUqLi4sJIfb29kqHRgAAAAAADECPHz8+deqUra3thg0btB2LdmAE1Dt69GhycjKSbQBaNHr06NjY2AkTJmg7kD6XlZX19ttv5+bmKhZ2tt5LqZzL5RYWFnK5XEJIRUUFj8fr3jeKLBarvLycSrbV1NRMmDBBaVmhUr9WVla5ublUv1VVVVZWVkr9qsavWNLZZ2ruRTfih34TFBTU0tISHBys7UD+xNTUtKCgoBtH7QBArzMzM8vOzraxsdF2IH8Y0HszAiihtr60tLREpg0AAAAABj65XE7tseng4KDtWLQDIwAAMDSsXLny66+/lkgkQqFQNf+htHmVeqGhoeXl5bW1tXv27FmxYoX6ygEBAQcPHmxvb29sbKS2kew2fX39mJgYiUSSkJAwa9asnjQFAACgCsk2GGReeumll19+WdtRAAAAAAAoO3HiRHZ2dk1NjUQiEYvFxcXFERERT548MTAwmDx5sraj6w8YAQCAQcfS0lKphMViURtL0h8IIQcOHCgvL+dwOPPnz1+/fj35ffNJikwmY7LQjXpk3bp1S5YscXBwaGxs3L9/v/p+9+/fX1lZaW5u7uXltWDBAo1x0iVK/ySEREVFBQQEcDicsLCw48ePMxseAAAAprA8CAAAAAAAoBeUlpaWlpYqFerq6i5atOgFmS6GEehrne32Rn7/Nrkbu7oxeVBNv71SHwC06OnTp0olHf7vl81mnzx58uTJkx3WyczMZNIX/VSHx4h22K+RkVFoaGhoaKhEIomLi1M8brPD+oqFShX8/f3b2tqYxAkAANANSLYBAAAAAAD0gvXr12dmZgqFwvr6eplMZmJiMmrUqGnTpqkuGhiqMAK9xdrauqKiQrVcTQZLLpcrrjJhjsmDXc2cMa9vYmLS0NDQpcYB4EXz6aef7t2718DAwNfX99atW9oOBwAAoGNItgEAAAAAAPQCOzs7Ozs7bUehTRiB3lJZWalUEh8f7+fnR/6cx2pqatq0aVN0dLSjo+OpU6eUHqHOT+pw+Yiq0tLSFStW5Ofn+/v7Hz58mM1mq+m3ubl5y5Yt0dHR9vb2kZGRLi4udIUO61PJvEOHDgUHB1dVVUVFRfn7+xNCuFxuY2MjnerDYjgA6NCePXv27Nmj7SgAAAA0QLINAAAAAAAAYEDz9fVVXYK2fft2a2trkUhUX18fGhqq9EiXclfh4eHR0dFGRkZBQUHbtm07cuSI+n65XG5lZaVUKg0LC1Psq8P6VIlQKMzJybl582ZAQAC1k5tIJMKGkwAAAL3iww8/FIvF2o4CBj1dXd3vvvtO21EMVvi9FgAAAAAAAEA7jh49mpycHBERQQjh8/lCoVDxLo/HEwgE9KVSaorL5RYWFnK5XELIs2fPzM3Nu/cHPovFKi8v5/P5hBCRSOTi4lJVVaVUQbFlS0vLvLw8qt/q6mpLS0ulflVTaIolnX0G0JbRo0fHxsZOmDBB24H0uaysrLfffjs3N1fbgQBoFhQU1NLSEhwcrO1A/sTU1LSgoMDKykrbgXTAxMQkKCjIxMRE24HAINbS0hIYGDhYjrc0MzPLzs62sbHRdiB/wMo2AAAAAAAAAO2j82rdSEH11tci7e3tOjo66usoLlzrxVRZW1ubgYFBb7UGAADwolmzZg0OyoWeeP78eWBgoLajGMQ0/A4NMBDIZDJthwAAAAAAADCwrFy58uuvv5ZIJEKhUHXuv4eHB3VsGxOhoaHl5eW1tbV79uxZsWKF+soBAQEHDx5sb29vbGyktpHsNn19/ZiYGIlEkpCQMGvWrJ40BQAAAACgRUi2wSBQVVVVVFTU1NSk7UAAAAAAAAD6nOq0dBaLRa0noz8QQg4cOFBeXs7hcObPn79+/Xry5zVnMpmMybIz6pF169YtWbLEwcGhsbFx//796vvdv39/ZWWlubm5l5fXggULNMZJlyj9kxASFRUVEBDA4XDCwsKOHz/ObHgAAAAAAAYcbCMJA51MJmtqapLL5fr6+tqOBQAAAAAAoM89ffpUqaTDtBmbzT558uTJkyc7rJOZmcmkL/qp9PR0NXcVGRkZhYaGhoaGSiSSuLi4cePGqa+vWKhUwd/ff7CcCwIAAAAAoAZWtsFA19jYKJfLX3rpJWzfDwAAAAAAMBB8+umnLBbL2Ng4IiLi1q1b2g4HAAY0xaWuioVdbaT3Iupa+x3Gz7BNjQ8OtHEA6C09+Xf1Rfv3/EV73yEMyTYY6BoaGgghJiYm2g4EAAAAAAAACCFkz549crlcLBbHxMRYWVlpOxwA6D5ra+u+7kLjmleK+m9+mOyL2xNq2u9210we7GrjzOvjmzToB91ORYN6GNhBCsk2GNCkUmlLSwvBrwgAAAAAAAAAAL2tsrJS8bK1tXXLli1WVlbW1tbh4eFOTk5UuUQi2bFjh7Ozs5OT07Zt2+gNYKlvhA8fPmxjY2NgYBATE0OVNzU1rVu3ztjY+LXXXnvw4IFiF/Hx8arfI3O53MbGRtbvNNbvajxqdNi+mvgJIR4eHh4eHhpbppSWlk6dOpXD4axfv76pqUl9v83Nze+++y6Hw5k8eXJ+fr5ihQ7rd/a+asYToBd1I0vN4/F60qxWqI+ZyRupp/q+PR+BnkcF3YBkGwxo1LI2Q0NDPT2cLwgAAAAAAAAA0Id27tzZ1tb24MGDoqIiNpstEomo8s8++4zP5+fn5z969IjP53/22WdUOfWNsFAozMnJiYqKCggIoMq3b99ubW0tEomuX79+6dIlxS58fX1Vv0emOpL/TmP9rsajRoftq4mfjlNjy5Tw8PDo6OjHjx8bGxtv27ZNY79cLreysjIpKenKlStE4Tv3Dut39r5qxhNAuyoqKrQdQpepj3lgvpHGqMRicf9E8kJBsg0GNCrZZmpqqu1AAAAAAAAAAACGCD6fT695oj7w+XxCSGRk5J49eywsLAwNDZcvX15TU0PVP3ny5Jo1a6jPa9euPXXqlGJr+/btMzU19ff3l0gkVMmZM2cCAwMNDAzMzc3fe++9Xo+/q/F0lfr4MzIyMjIyGDa1YcMGGxsbLpcbFBR07tw59ZWjoqK2b9/+0ksvsdnsVatWMeyi5+8LQ09+fv7SpUs5HI6hoaG3t/fNmzfphaqEkNzc3MWLF/P5fD6fv2TJkvz8fPoW9X8IjY2NixcvNjAwUF0hGhsbO3bsWBMTk9WrVzc2Nqp2XVBQ0OGSyjFjxij+f06HdTp7tocxq/fVV1+5u7ubmpra2tr+v//3/549e8YwZo1vRJdcu3Zt0qRJTk5Oly9fZvi+hBCJRLJx40YTExNHR8fo6GjVZju81BhVVFQUn88fNmyYsbHx3LlzMzMzmY8VqIdkGwxcbW1tYrGYxWIZGxtrOxYAAAAAAAAAgCFCIBDQa56oDwKBgBAilUo7e6TbC6ToPR5795F+W7DVjfg71N7erqOj4ZtYxe/Ee/EFe+sVYLDIzc2dN2/evHnzHj58WF9fHxkZWVBQQC9Uzc3Nfeeddw4ePCgQCAQCwTfffLNu3To6d0X9ixcYGPjxxx+LxWKlFaK//PLL559/fvbs2aqqqr/+9a+ffPKJau+Ojo4d/ttbWFio+P85HS677OzZnsSs0aRJkzIyMurr67Ozs42Njf39/RnGrPGNqMt///vf6enpCQkJ+fn54eHhTN6XsmvXrjlz5ggEgu+++27r1q0pKSmKzSr1wjCqxMTEiIiIuLi45ubmysrKnTt3btq06c6dO8yGCjRABlFF5wAAIABJREFUsg0GLmpyhJGRkcbfRQAAAAAAAAAAoIeWLVsWEhJCCKmuro6JiVm9ejVVvnbt2tDQUOpL26NHj9KryjqzcuXKr7/+WiKRCIXC4OBgJl3r6+vHxMRIJJKEhIRZs2apr9zVeLpKffxdOrMtNDS0vLy8trZ2z549K1asUF85ICDg4MGD7e3tjY2NYWFh3Qn9d10aTxhiduzYsXv37nfffZfH4+nr69vY2Lz//vv0QtXt27fv3r3b3t6euhw1atSuXbu2b9+u2MKbb77p7e3NYrGUVkzu3bv34MGDr7zyiqGhoY+Pj6+vb/+8UU9i1mju3LnUB2oF6u3bt3srbMq4ceM+++wzHo/HYrF++ukn5g86OjouXbrU1NR09uzZhw4dCgoK6nkwQUFBR44cee211wwNDY2NjadPnx4aGvqPf/yj5y0DQbINBjJqD0kTExNtBwIAAAAAAAAAMARZWloqXoaEhNTV1VlaWo4fPz42NvbAgQNU+ZdfflldXW1ra2tra/vs2bMvv/ySKqc3K1P654EDB8rLyzkczvz589evX08U1mwpbV9Jd00tRuFwOGFhYcePH6fLO6zf1XjU6LB9NfETQmQyGZNlZ9Qj69atW7JkiYODQ2Nj4/79+9X3u3///srKSnNzcy8vrwULFmiMU837djae8CJITEycP3++mrtTpkxRLPHw8Lh165ZiyfLlyzt8NjU11dXVlb708vLqWaRM9SRm9cRi8d69e11cXIyMjMzNzefOndvrq2Znz55Nf9bV1WX+4MKFC+nP3t7eWVlZPQ8mPT3d3t5ecYfJiRMn0mvmoIf0tB0AQMfa2tra2tpYLBabzdZ2LAAAAAAAAAMO9Y1qv22kxhyLxeosqm7HzORBNf32Sn2AIenp06eKl2w2+7vvvvvuu++UqhkYGBw4cIDOvdEU/0ek+JnNZp88efLkyZPqqyny9/fvcLfDDut3NR41OqymJn5CCMMjjuin0tPTGfZrZGQUGhoaGhoqkUji4uLGjRunvr6a9+1sPOFFIJPJ1KeZVf91Gvj/QeyjmD/66CMLC4vbt28PHz5cIpGUlJSMHTu25832Ol1d3V7Z+83Q0DA3N3fUqFE9bwpUYWUbDFDUsjY2m409JAEAAAAA4IVibW3NpFr/fC/W3Nzc1UfUBNbtmJk82NXGmdfHhisA0G8+/fRTFotlbGwcERGhtHAHgKFp06ZdvHixs7szZ85MS0tTLElNTfXx8WHS8tSpUxXP9+r5jotisZhJtZ7ErN5PP/20detWc3NzPT09Q0NDMzMzjY+oj5nhGzGh+ENMTU11c3PrsFpOTo7Gpuio/Pz8Tp8+3SvhgSqkMWCAopJtxsbG2g4EAAAAAACgX1VWVipetra2btmyxcrKytraOjw83MnJSfHurVu3bGxsDAwMYmJi6MLNmzc7Ozuz2ezZs2cnJiZShdRmQYcPH1aq39zc/O6773I4nMmTJ+fn59MblFVXV7u7u7PZbCsrq7///e9Msm7x8fFK+8IRQpqamtatW2dsbPzaa689ePBA6ZEuHX1UWlo6depUDoezfv36pqYm9f129l6d1e9sfLhcbmNjI73bEsNQAQC6Z8+ePXK5XCwWx8TEWFlZaTscGJT27t37+eef37hxQy6Xt7S05Ofnh4WFURuiEkKCg4M/++yzlJQUqVQqlUpTUlJ27drF8GzFnTt3bt269f79+y0tLTdv3kxISOhqbNRpgoSQioqKw4cPe3p6MnmqJzGr5+joeOzYsaamJpFIdPLkSfqgSuYxd++NmMjPzz9//nxDQ0NiYuLmzZt3796t1Glra+v58+c//vhj5jHv27cvNDT0yy+/fPLkiUQiEYlEV69e9fPz662YX3BItsFAJBaLJRKJjo4Okm0AAAAAAPCC27lzZ1tb24MHD4qKithstkgkUrybkJCQn59Pnc1DF+7bty8/P7+urm7Hjh30gR/UQi6hUJiTk6NYf/v27Vwut7KyMikp6cqVK3TNwMDAkJCQtra2x48f+/j4BAYGagzV19dXdbnY9u3bra2tRSLR9evXL126pHRXLpczX2EWHh4eHR39+PFjY2Pjbdu2aey3w/fqrH5n40MNuPx3DEMFgIHDysqKpQJ5LBjCPDw8YmJigoODORwOj8dbs2ZNa2vrt99+S90dO3bsmTNn9u/fz+FwOBxOcHBwZGSks7MzdVfp8D+lyxkzZgQFBS1btszCwuLEiRNfffUV+fOJhopzUzqcp0L9F1ZHR2fKlCmFhYVxcXFMnu1JzOqdOnUqISHB0tJy4sSJDx8+jI6OVn1WTcwa30jxXTqc5dPh+1If/vnPf16+fNna2vq99947cOCAu7u7UqdWVlaXL1+OjIxkHrONjU1ycnJhYaG7u7uxsbGnp2diYmJ4eDiTsQKNsEE5DEQ1NTW1tbXGxsYMt08BAAAAAAAYjI4ePZqcnBwREUEI4fP5QqFQ8S6PxxMIBNbW1g8fPuRyuaqPs1gsiUSip6dHFE4gKygo2Lp1a0pKilgsnjx5clJSEv2Hv+IpZfRnS0vLvLw8qv3q6mpLS0uq3MzMTDGxZ2FhUVVVxeSllM5C43K5hYWFVPvPnj0zNzfv3hcRLBarvLycz+cTQkQikYuLi1I8Sv129l6d1SedjE+HNWEoGT16dGxs7IQJE7QdSJ/Lysp6++23c3NztR0IgGZBQUEtLS29snSpF5mamhYUFAzMTK2Jicnjx48tLS21HQgMYs+fP7ewsBgsxz2amZllZ2fb2NhoO5A/YGUbDETUHpLYFh8AAAAAAF4cAoGAXjtFfRAIBIQQqVSq5ikq06ZoxYoVXl5eubm5dXV1Z8+e1div4lRoxZSSq6urXAHDTJt6vfX1TXt7u8bjvTt7rx4aLN9AAQAAAEB/QrINBpzW1lapVKqjo8Nms7UdCwAAAAAAgJYtW7YsJCSEEFJdXR0TE9PhaSKKBAKBm5ubqalpTk7OoUOHNLYfEBBw8ODB9vb2xsbGsLAwunz+/PlhYWHl5eXt7e09iX/lypVff/21RCIRCoWqaxS6dGZbaGhoeXl5bW3tnj17VqxYob5yZ+/VDdTBJxKJJCEhYdasWT1pCgAAAACGJCTbYMChlrWx2WwcPQ0AAAAAAC8gpT2gQkJC6urqLC0tx48fHxsbe+DAAapc8UgSxX8ePXp0w4YNXC53x44da9euVVOT+uf+/fsrKyvNzc29vLwWLFhA9/vhhx9WV1d7e3tzudy5c+fu379fY+RKR49QhQcOHCgvL+dwOPPnz1+/fj3585ozmUzGZNkZ9ci6deuWLFni4ODQ2NioGE+H/Xb2Xp3V72x8yO8Hn3A4nLCwsOPHj2uMFgAAAABeNNh2HAac4uJiqVTK4/Gwsg0AAAAAAIY2xTPbtE4ikcTF/X/27j6uiSvfH/gJSCpCokQDhoisWhGtbVcQ13rhroqAgLqCD7hbydLSun3Vh7YqipSysmJRQVn0uq8icFH6oGB3U4vKLWi9lZquaH25u8hjsRclgKRAhPCUkOT3x/ycnSYkBAiEh8/7j75mzsx8z3cOKcE5c865HBsb++DBA0vnYk5j9b7AXLBmW5+ojmfjjxAttbShkXpNSXt4GMrESIZYKhJrtvUX1mzrlaur66NHj3o9NHPmzJqammHOZ4TDmm2DhJFtMLJoNJqJEydaW1tPmjTJ0rkAAAAAAACMC++//z6LxbK3t8/Ozv76668tnY7ZjNX7AjAjgUDQ5zmm9Pr0ek5HR4fpmXA4HNNPNl5vn4eGmaFMzJL8wNoNYJyoqanRGoCeNjA7dLbByGJlZSUQCGbNmoU5JAEAAAAAAIbH4cOHtVptd3e3WCwemS/sD8xYvS8AM2poaGDuqlSq6OjoefPmubm57du3jzm+4dGjR0uXLnVwcHj99dfb29upwhUrVrAY6JNlMpmXl5ednZ2Tk9OOHTvoXreurq533nnHyclJIBCcPXvWzc2NKufxeAqFQj+OEVevXtU/ub29PSIiwt7eftGiRSUlJTqXmL5IpFgsZrPZLBaLy+V6e3tTeVLVpaSkcDgciUSSmZnJ4XDEYjF1yc6dO+fNm2dnZ+fn53fjxg1TajH9vqiSU6dOzZgxg81m05UOoN0AAGCITLB0AgC9wN8HAAAAAAAAI5CTk1NjY6NOoaOj45MnTyySDwCYV2xs7IwZMyoqKgghqampsbGxx44dow6dPXv2888/nzRp0sGDB/ft23f69GlCCLNXifkwJyoqKjk5edmyZd3d3YWFhVFRUdT5MTExSqWypKTE3t7+8uXLzc3N1PnNzc39nTgxKChIq9XqPEHav3+/QCBobm5ubW1NT0/XucT0+CKRaM2aNbm5uUqlsqCgYNu2bdTlLBZLrVZnZWUFBwdHRERkZWWFhYVRXZKJiYmnTp1SqVQ3b95ct25dW1ub6ffS531RJXV1daWlpdevX6crHUC7wVjV09OzdOlSKysMrYGB02g0eCw/GPh1DAAAAAAAAGAZI2rNNoDxaXyu2SYUCuvq6phHnZ2dpVLp9OnTy8vLp0yZQghpaWlZsGBBfX09IYTFYtXW1gqFQkJIc3Ozu7u7fr87s9dn6tSpdEcaIYTP51PnCwSCBw8e8Hg8/fQG1mmkcxWPx/vhhx+o+E1NTdOmTRvYk8+8vLwNGzaoVKpp06bx+fxz5855eXkxq9PZqKqq2r17t0Qi6e7u9vDwKCoq0qnX0N2ZXs4sMbQ9lmDNtv6aNGnSoUOHMK0oDEZnZ+fevXtVKpWlEzHJCFyzDSPbAAAAAAAAAAAAxhGpVEpt6HfV9Nlzo9Fo+hw94+npWVBQoF/e09NjSnpKpZLNZptypvEgA7527dq1SqWyvb29ubn5k08+8ff3b2lpMXL+5s2bt2zZkpmZyePxfvrpJ1NWwhsKZmk3GKWsra3Dw8MdHR0tnQiMYk+fPo2KirJ0FqMYBpYCAAAAAAAAAAAAEYlE6enpWq1Wq9WmpaWFh4fTh9LT02tra1taWg4fPrx582bjcQIDAzMyMmprazUaDbN848aNycnJhBCZTCYWi7du3UofsrGxEYvFKpUqPz9/1apVA8t/y5Ytx48fV6lUdXV1+oOiTF+zjc/nFxcXW1lZubi4uLu702vUGSKVShcvXszlcktLS0+ePDmw5AfGLO0GAACDh842AAAAAAAAAACA8UhnHExCQoJMJnNxcXFxcWlqakpISCDPFmOLiIgIDQ2dPXu2QqE4cuSIThyd8XC7du2SyWQ+Pj48Hi8gIIA+Pzk5WS6XOzo6vvDCC5cuXUpKSqIvycnJCQsLc3BwyMjIyMzM7DNzFotFJUZvEEKSkpJqa2sdHBwCAwNff/118vOV5NRqtYkzLs6aNev+/ftubm4sFissLCwnJ4cORQdkRk5LS4uMjOTxeNHR0SKRSOc0/Tz7W86sWieN/rYbAAAMkbE5qy8AAAAAAADAyIc12/RRT5DN+7AiNjaW6jMghJw/f37r1q0ajcbGxiYnJyckJESnakLI5MmTJRLJggULCCE3b948c+ZMe3v7F198oXMJMyyMXuNzzTaz++abb0QiUU1NzVAEh3EIa7b1F4fDqa6uxjSSMBhPnz7l8/mDmYN3OGHNNgAAAAAAAAAwRiAQ1NfXD1Hwjo6OSZMmDVFws9BqtcxBHoNXVVXFXGxp+/btly9fDgwMFIvFYWFhOk+U9Dv5tm3b9t133zk4OBBCJBKJv7+/QqGgDrW0tDx8+HD27NlmzBZgdBEKhXV1dba2tgsWLPjkk08snQ4A9E1/pUbmIWLu910GxlAmRjI0cl8AwwOdbTAiKJVKhUJhb2+PdVwBAAAAAGCca2hoYO5Sz5VOnjx59OjRxsZG5siqnTt3FhQU1NbWLlu2LCYmZsWKFdTJJ06ciIuL++qrr8rKyt59993s7OyQkBCZTBYUFHT37l1HR8dNmzYdO3aM2etGrWNUXFxsPDe6G4x6nqWzq58PfU5LS8uePXtyc3PfeustauK4rq6u/fv3X7hwwcrKKjEx8cMPP6ysrKQr+vrrr0UiUZ/3ayQ+LT093d/fn95tbm6mNoKDgxctWtTHD4OQ7u5uqqeNELJs2TLm0k2+vr5paWkjbeAFjArNzc1yuXyYK21sbDR7TKlUavaYABSZTHb+/HlLZ/EzPT09eXl5OisRjliG3t0x0iNl9vddBsxQJkYyNL2njcPhtLW1DTy5se7MmTOWTsEk3d3dHR0dls7iZ9DZBiNCW1tbc3Nzd3e3QCCwdC4AAAAAAAAjCPVcqa6urrS09Pr168zBWImJiadOnVKpVDdv3ly3bl1bWxt1slqtzsrKCg4OjoiIyMrKoi6JiopKTk5etmxZd3d3YWFhVFTU6dOnmbWYmMwrr7xy4sQJalcikezZs0cikRjKh84/NDRUJBKlpKTcuXOHOjkmJkapVJaUlNjb21++fJnuA6Pk5+dXVFQUFBQYv18j8WkFBQVvvPGG/r1cv379ypUrzBJbW1vqER5zusjHjx8bag13d/dDhw6hsw0GICkpKS0tje7HHR4uLi7DWd3gOTk56XcQOjo6PnnyxCL5wDD76quvzp49a+ksfkar1R46dGjevHlTpkyxdC5903l3hxBy9erV4OBg8vMv/fb29u3bt3/++edz5879+OOPdS4x8V0cQgg1XlylUnE4nJdeeqmxsbGystLIO0DEwDs0A9DrfRl6V4nH4ykUCp23hYDp2rVrlk7BJO3t7U+fPrV0Fj+DwZUwIigUiqdPn3K5XA6HY+lcAAAAAAAAhglzzTZqNjbmUWdnZ2rUCHNmJHq7qqpq9+7dEomku7vbw8OjqKiIHm3W68bUqVOZHVp8Pn9gw1wKCgqSkpIKCwsJIX5+fvv27fPz8zOSD5VAW1ubvb09M45AIHjw4AGPx9OvgsViqVSqCRMmmHK/huLTJk+eLJVKdY5eu3Zt4cKF06dP7/WSR48ePf/881Qnn860VMzd1tbWmTNnDv/4JDAvi6zZduDAATabHR8fP5yVDumabQDmNQLXbNNoNNbW1p2dnRMnTrR0Lr3QX7PN0LSKOuU7duzgcDjx8fGtra3p6ekxMTHMo15eXoQQ/RdZek3Az88vNzdXqVQWFBRs27aN+jODxWIlJSX94he/ePPNNyMiIv7jP/7jd7/7HfUNS81zRr1Ds379ep3RZibmb6ScxWJFR0cfOHBA510lTDhpyOhas83Kyur27dvUR3SEsLJ0AgCEEGJvby8UCtHTBgAAAAAA45ZUKtVqtdTTH2rD+Pxsmzdv9vb2Lisrk8vlubm5fcb39PTUMgx4Qjl/f//Ozs6ioqKioqKuri6qp63PfPR7wnp6eozUQvW0MfU3Pk3/gVp2drarq6uhnjZCyMyZM1UqlaGjarXaSHAAAAALEgqFLBaLGrlFbQiFQiPnf/bZZ1FRUWw2e9q0adu2bdM5eufOHVN62qg4ly9ftrGxcXV1jYmJYY4d37t378aNG+VyeUpKysaNG6lv2Kqqqt/+9rdTp051cHCIj4+n10M1r8TERC6XGxISYuRrHcBc0NkGAAAAAAAAMPpIpdLFixdzudzS0tKTJ0/2eX5gYGBGRkZtbW2vi80sWbKEmirKFPHx8XFxcXFxccxxOf3NZ+PGjcnJyYQQmUwmFou3bt1q/Pz+xqe5uroyhwxevHjxxRdfnDt3LmGsOUcI8fHxiYuLq66uJoSIxWIbGxuq3NbWlp4n886dO1wul27A2tra2bNnm54JAADAUOvvuztMgxnStHbtWqVSqVAo7t27Fx4ezlwttVf9fWdoiIyWUVwwKqCzDQAAAAAAAGAEYc4BRZ51COn/Ny0tLTIyksfjRUdHi0Qi8uwFdsLoQ2J2Ju3atUsmk/n4+PB4vICAgCNHjjBrUavVpg/S8vX11Wg0Wq125cqVdGGv+TD/S6dHSU5Olsvljo6OL7zwwqVLl5KSkgZwv0bi0/z9/cvLy+ndiIgIDw8P/ZPFYnFNTY2npyeLxQoLC8vJyaHKP/300+XLl7NYLD6fv379+ry8PLofrry8PCAgwMRGAwAAGIG2bNly/PhxlUpVV1enP2+n6e/i8Pn84uJiKysrFxcXd3f39vZ24+cP+B2awbOxsRGLxSqVKj8/f9WqVcNZNYxtutMyAAAAAAAAAIAFPXnyhLnL7ANjboeEhISEhPR6SKeE2rC2tj5w4MCBAwd6rfT777/vV5LffPONTomhfAz14dnZ2f3lL3/5y1/+YihtYtr99tlH+Ic//CE1NXXdunXUrqHHf9OmTTt37px+eUhIiKHX3q9fv75nzx7jtQMAAFiEzrs7RO9dHOoLNCkp6e2333ZwcJgzZ87HH3+cmprKXNJMrVZbWZk0XGfWrFn379/fsGFDbW2tjY0N9c4K/UKMzmqy5Nk7NI2NjcuXLz9x4kRiYiLzNP08+1vOrFonjZycnLCwMDabHRAQkJmZaVpzAvQNnW0AAAAAAAAAMGa5ublNmTJlKCLzeDxMIwkwMMxn7jrPzS2ej/4hYun0jGdiJEMj9wVjns67O8TAh8TOzu7cuXP06yY655j+Lk5xcTEhRGfVt15foKE2jLwzZOhD269yIwGNvEYDMBiYRhIAAAAAAAAAxrLDhw8PRdhDhw4NRViA4SQQCEw8k8Ph9KvcOFMerA8sH0JIR0fHYPIx/dAw628PhPFDOgb2cwQAABo62wAAAAAAAAAAAMajhoYGnZKdO3fOmzfPzs7Oz8/vxo0bVCGPx1MoFPqLIxoqp3blcnlkZCSHw4mKiqIPXb16tdcVFh89erR06VIHB4fXX3+dnu6VeSZz21C9MpnMy8vLzs7Oyclpx44dpvS69ZpPe3t7RESEvb39okWLSkpKdC4xfRUrsVjMZrNZLBaXy/X29nZzc6NvJCUlhcPhSCSSzMxMDocjFoupS3pt/wHo9b6oklOnTs2YMYPNZtOVGmpPAAAwHTrbAAAAAAAAAAAAgBBCEhMTKyoq5HJ5dHQ0vdhhc3MzIUT7DH2yoXJqOzQ01MfHRyqVrl69mj4UFBTU63Crs2fPfv7559XV1fb29vv27WPG0d82VG9UVFRycrJSqayurvb19WV28hnSaz779+8XCATNzc2FhYV5eXk6R3UqNUIkEq1Zs0alUjU0NOzdu1cul9M3olars7KygoODS0pKsrKywsLCqEt6bf8B6PW+qJK6urrS0lJq2Sqq3FB7AgCA6bBmG1hSU1OTtbU1h8Oxtra2dC4AAAAAAAAAAOOCUCisq6ujtqmRTM7OzlKptKqqavfu3RKJpLu728PDQ6FQDKaWL7/80t7enhDi6+vb58mRkZFCoZAQcvDgQXd399OnTw+gxry8PHrpKUIIn88fWJzPPvvshx9+YLPZ06ZN27ZtW0xMDPPonTt3TI+zYcMGGxubadOm8fn8K1eu0If27t1LCNm0aVNKSgq1QQgxb/sbkpiYSAgJCQlRqVRDER8AYHzCyDawGI1G09LSIpPJ1Gq1pXMBAAAAAAAAABgvpFIpPYaJ2pBKpYSQzZs3e3t7l5WVyeXy3NxcQ5crlUpTyqmetv7SaDRWVr08sdRoNH3m4+npqWVobGwcQAKGgg/A2rVrlUqlQqG4d+9eeHi4v7+/8fNNbP+hNphbBgAYt9DZBhbT0dGh1WrZbDabzbZ0LgAAAAAAAAAA451UKl28eDGXyy0tLT158iTzkI2NjVgsVqlU+fn5q1at6rO8v9LT02tra1taWg4fPrx582ad+PX19e+++26f+QQGBmZkZNTW1hrpmTPFli1bjh8/rlKp6urqjh49qnPU9DXb+Hx+cXGxlZWVi4uLu7s7vRadIUbaf6iZ6+cIADBuobMNLIYaC29nZ2fpRAAAAAAAAAAAxiNHR0fmblpaWmRkJI/Hi46OFolE5Nkkk4QQaokvBweHjIyMzMxM+pJey6mrWM8wq6BLmBuEkIiIiNDQ0NmzZysUiiNHjjDjb9myZe3atW+88Uaf+ezatUsmk/n4+PB4vICAAGYcQ/TzIYQkJSXV1tY6ODgEBga+/vrrzHoJIWq12sSFzWbNmnX//n03NzcWixUWFpaTk8NsHGZbUYy0f6959recWbVOGoZ+vgAAYCIWFr0Ei9BqtQ8fPtRoNC4uLhMnTrR0OgAAAAAAABaQlpZ269at7OxsSydiTizW6HjUYKk8R0v7mIh6Um/eO4qNjU1ISKC2z58/v3XrVo1GY2Njk5OTExISolM1IWTy5MkSiWTBggWEkJs3b545c6a9vf2LL77QuYQZlmnOnDmXLl1auHChGW+hTwcOHGCz2fHx8cNZ6b1791599dWysrLhrBRgYA4ePNjZ2ak/rNCCNBqNtbV1Z2fnyHySyeFwqqurdbrPx7Mx8PU0/J4+fcrn80fLRLJWVla3b9/28vKydCL/NsHSCcA41dnZqdFoJkyYMDK/nwAAAAAAACxFIBDU19frFHZ0dEyaNGnoKjVj/NHSkzR0eXI4nLa2tuGv1yK0Wq3OuKVBqqqqamlpoXe3b99++fLlwMBAsVgcFham8wRQvzG3bdv23XffOTg4EEIkEom/vz81rQ4hpKWl5eHDh7NnzzZjtgAAI1avf06Yy1D/WTJ4+HqC4YdpJMEyMIckAAAAAABArxoaGpi7MpnMy8vLzs7Oyclpx44dHR0dVLmjoyOPx6O2eTyek5MTtU3NGHb9+nVHR8fFixfX1NQwy+VyeWRkJIfDiYqKMh5fLBaz2WwWi8Xlcr29vd3c3IyXE0KuXr2qP2WcSqWKjo6eN2+em5vbvn376KdR1JmnTp2aMWMGm80Wi8XGm6Wrq+udd95xcnISCARnz56l6+1v/BUrVrAY6Pg6M63pbOvHMZQPj8dTKBS9zp5nxvYxcckonTR0dnfu3Dlv3jw7Ozs/P78bN24wz9H/nBi6X8rXX3+tn2e/4tPS09P9/f3p3eaLG/thAAAgAElEQVTm5sDAQEJIcHDwokWL+rzl7u5u6lEmIWTZsmXMJbJ8fX3T0tL6jAAAMDbo/Dlh5GtF/9c1dXJKSgqHw5FIJJmZmRwOh7rE0J8NFHw9GYKvp/EAnW1gGdQvFHS2AQAAAAAAGBcVFZWcnKxUKqurq319femnP8XFxb/61a/q6+sfP37s4eFx+/Ztqpx6mbqpqenx48f79+9/7733mOWhoaE+Pj5SqXT16tXG44tEojVr1qhUqoaGhr1798rlcuPlhJCgoCD9V7ljY2OFQmFFRUVlZaVQKIyNjWXmU1dXV1paSq0VZLwdYmJilEplSUnJw4cP7ezsmpubBxb/xo0b2meY8Zm7+tv6cQzlQ230WoUZ20c/eK+0Wu3SpUslEgm1K5FIXnnlFfrCxMTEiooKuVweHR29bt06Zr36nxND90vJz8+vqKjQybNf8WkFBQXz58/Xv5fr169fuXKFWWJra0s9G2U+RX38+LGh1nB3dy8oKDDcWjBmOTk5sfTQLygAjBNGvlb0f11TJ6vV6qysrODg4JKSkqysLOoSQ3820LXg6wlfT+OXFmDYdXZ2VlZW/vDDDxqNxtK5AAAAAAAAWMxHH30UHh5ObTs7O+v8g93Z2Vmr1dLD1yh8Pp++/P/+7/9Wr169cuXKH3/8kRmWENLS0qLVatva2jgcDrO8ra1NJwdD8b/88ksbGxtCyLRp0+bPn19cXGy8nFkLc9fJyYlKRqvVNjc3T58+vdcz+3xAMX369KamJv3ywcTXKTR0fq/bhvIxVJeho+ZqH0O++uqrVatWUdurVq0qKCigtisrK9esWcPj8ezs7Hx8fHTq0v+cGL9flUqlk2d/49O4XK7+0cLCwvr6ekOX1NTU2NjY6CSgv/v06dPJkyfrXz579ux//etfhoIPkejo6Li4uGGu9Pvvv3d3dx/mSgEG5o9//OO+ffssncXPqNVqQkhnZ6elE+mdvb39kydPtIb/nNAa+Fox9Ova0IaRP0v6BV9P9Lahr6fhJ5fL6YRHPhaLpf9XqGVhZBtYAD2sjWXWmXMBAAAAAABGL6lUSv1DnTx7/iKVSgkhnp6ezH/GNzY20pewWCyVSjVx4kRra2tDYSdM+Nli7fb29jonGIq/du1apVKpUCju3bsXHh5OT51kqNwIrTlWKevp6RnS+EwajabPc4zkw6SziEuvzJ4/k7+/f2dnZ1FRUVFRUVdXl5+fH1W+efNmb2/vsrIyuVyem5urc5X+58T4/ep8zAYQn6bfGtnZ2a6urtOnTzd0ycyZM1UqlaGj1PNxQ8EBAMYYQ39OGGL817U+I3+W9Au+nvD1NPagsw0sAHNIAgAAAAAAmCgwMDAjI6O2tlanB6impua111777//+74yMjD/84Q/02myUb7/9VqlU5ufn00+v+hufz+cXFxdbWVm5uLi4u7vTi4sYKjdEJBKlp6dTj+TS0tLCw8NNvfOf27hxY3JyMiFEJpOJxeKtW7eaNz4hxMbGRiwW19fXv/vuuwPOh46jUqny8/NXrVplPM7A8jdxURxKfHx8XFxcXFxcfHw8XSiVShcvXszlcktLS0+ePNlnECP326v+xqe5urrW1dXRuxcvXnzxxRfnzp1LCGG+sOvj4xMXF1ddXU0IEYvF1GhLQoitrS09L9mdO3e4XC79wa6trZ09e7bpmQAAjAf9/XVt6M8GCr6e8PU0nqGzDYabSqXq7u5msViTJk2ydC4AAAAAAAAjjqOjI3N3165dMpnMx8eHx+MFBAQcOXKEKvf09Lx79+7MmTMFAsGtW7e8vLyYVzk7O8+ZMyclJeXEiRNUCfUkiF6vqM/4s2bNun//vpubG4vFCgsLy8nJMV5OB2duEEISEhJkMpmLi4uLi0tTU1NCQoJOPjr/NSQ5OVkulzs6Or7wwguXLl1KSkoaZHz9t8hzcnK2bNmydu3aN954w0gE6r+G8qHihIWFOTg4ZGRkZGZmDkX7qNVq09+C9/X1pRZxWLlyJV2YlpYWGRnJ4/Gio6NFIpF+XTqfE0P3ayjP/san+fv7l5eX07sREREeHh76J4vF4pqaGk9PT53P4aeffrp8+XIWi8Xn89evX5+Xl0c/6CwvLw8ICDCx0QAARjudPyf69eta53vHlD8bKPh6wtfTeMbCEEUYZk+fPm1sbLS1tZ0xY4alcwEAAAAAALCktLS0W7duZWdnmzcsi4V/7Pftm2++EYlEOiMCweIqKytTU1NPnz5t9sjbt2/fs2eP/uiBOXPmXLp0aeHChWav0YgDBw6w2WzmYI5hcO/evVdffbWsrGw4KwUYmIMHD3Z2dh49etTSifybRqOxtrbu7OycOHGipXPpBYfDqa6u1ulgAzMa/q+n4ff06VM+n2/KDNgjgZWV1e3bt3XeNrMs3UlLAYYa5pAEAAAAAAAYOvSr2ehv65VQKKyrq7O1tV2wYMEnn3xi6XRAl5ub25QpU4YiMo/HGwmPMsGyjPxupH55joTfnIYyMZIhfucDDDV8PUGf0NkGw0qj0XR0dBB0tgEAAAAAAAwNPG81TiqVWjoF6MPhw4eHIuyhQ4eGIuxoJxAI6uvrBxmko6Nj8GuFcDictra2QQbpk5HfkFqt1vhktsPGUCZGMjT9N//wtDPAmISvJzAOa7bBsOro6NBqtTY2Nmw229K5AAAAAAAAwMji5OTE0uPk5GTpvADGrIaGBuauSqWKjo6eN2+em5vbvn376MnEqP8Zr1+/7ujouHjxYnr+VZlM5uXlZWdn5+TktGPHDuoFa/p8uVweGRnJ4XCioqLoKnbu3Dlv3jw7Ozs/P78bN25QhTweT6FQ6K+WZDyfXuMbcvXqVf3Vldrb2yMiIuzt7RctWlRSUqJzyZIlS5YsWdJnZEKIWCxms9ksFovL5Xp7e7u5udFJpqSkcDgciUSSmZnJ4XDEYrGRdhiAXu+LKjl16tSMGTPYbDZdqaF2BgCAwUNnGwwrzCEJAAAAAAAAhjx58kSr58mTJ5bOC2C8iI2NFQqFFRUVlZWVQqEwNjaWKqcGTjU1NT1+/Hj//v3vvfceVR4VFZWcnKxUKqurq319felOL+r80NBQHx8fqVS6evVquorExMSKigq5XB4dHb1u3TqqsLm5mbqKYmI+vcY3JCgoSH/41/79+wUCQXNzc2FhYV5ens5RnWSMEIlEa9asUalUDQ0Ne/fulcvldJJqtTorKys4OLikpCQrKyssLMxIOwxAr/dFldTV1ZWWlubk5NCVGmpnAAAYPMznC8Pq4cOHarVaKBQOfnoBAAAAAACA0S4tLe3WrVvZ2dmWTgRg/JozZ86lS5cWLlw4nJUeOHCAzWbHx8cPZ6X37t179dVXy8rKyLPFC5lHnZ2dpVLp9OnTy8vLqXWJWlpaFixYQE8yyWKxWlpapkyZolAonJ2dW1tbCSFTp06l+m8ofD6/sbGRPr+trc3e3p5ZS1VV1e7duyUSSXd3t4eHR1FREf1kstdVx4znox+/Tzq18Hi8H374gcfjEUKampqmTZs2sCeleXl5GzZsUKlU06ZN4/P5586d8/LyYlans2GkHXrNcwDlzBJD2yPZwYMHOzs7jx49aulE/k2j0VhbW3d2dk6cONHSufTC1tb297//PZ64wmAolcqPPvqop6fH0omYxMrK6vbt29Qv2xECa7bB8Onq6lKr1VZWVra2tpbOBQAAAAAAAABgnKIXL9TvejGlJ2bChP//RNHT07OgoMDQafo9YZs3b96yZUtmZiaPx/vpp58EAkGvFyqVSnr9ESP59LenzTh6jsoBWLt2rVKpbG9vb25u/uSTT/z9/VtaWoycb2I7DDVmO8Nop9Fo7t69a2NjY+lEYBRTq9WWTmF0Q2cbDB9qDslJkyZhVmgAAAAAAAAAgJFGJBKlp6dTs0GmpaWFh4czj3777bf+/v75+fl+fn5USWBgYEZGxurVq52dna2s+l6tRiqVLl68mMvllpaWXrhwgXnIxsZGLBavWbPm2rVriYmJN2/e7DOfwduyZcvx48cPHjwok8mOHTumc5RasK24uLjPOHw+/8qVKy+++KKLi4u7uzv1BMwII+0w1HptZxgD2Gz21atXHR0dLZ0IjGJPnz7l8/mWzmIUw5ptMHzs7e0dHBy4XK6lEwEAAAAAAAAAAKLzaD4hIUEmk7m4uLi4uDQ1NSUkJDCPOjs7z5kzJyUl5cSJE1TJrl27ZDKZj48Pj8cLCAg4cuQIVU69Zs16ho6QlpYWGRnJ4/Gio6NFIhF9JiGEWlrMwcEhIyMjMzPTeD6G4htBn8m8JCkpqba21sHBITAw8PXXX2fmQwhRq9Umzrg4a9as+/fvu7m5sVissLCwnJwcZpLMnPtsh17z7G85s2qdNHptZwAAGLzRMUsvAAAAAAAAwNiDNduGH/XE2bwPQ2JjY+k+gPPnz2/dulWj0djY2OTk5ISEhOhUTQiZPHmyRCJZsGABIeTmzZtnzpxpb2//4osvdC5hhoWhMz7XbBuA0bLWF4wNWLOtvzgcztdffz116lRLJwKjWFtbm5eX12Dm1B1OWLMNAAAAAGBcqKqqun//vqWzAICR7tGjR/qFAoGgvr5+mDPp6OiYNGmSiSdzOJy2trYhzWfoaLVa8y5tUFVVxVycafv27ZcvXw4MDBSLxWFhYTpPrPT7KrZt2/bdd985ODgQQiQSib+/v0KhoA61tLQ8fPhw9uzZZswWepWRkWHKFIhm9O2339IzMY4K9Ogo9LcBjEy/+MUvtmzZYuksYNSbNWuWpVMYxdDZBgAAAABgflevXj158qSnp6elEwGAEe25557T7/hpaGhg7nZ1de3fv//ChQtWVlaJiYkffvhhZWUlIUSlUn3wwQdisVir1a5fvz4hIYHNZlPRTpw4ERcX99VXX5WVlb377rvZ2dmhoaG9loeEhMhksqCgoLt37zo6Om7atOnYsWNUrxsV6uTJk0ePHm1sbKRHXPF4PIVCQadNP3mn+pZUKhWHw3nppZcaGxupPCkmLn2kE1Znd+fOnQUFBbW1tcuWLYuJiVmxYgV9TktLy549e3Jzc996662kpCQj7Ub5+uuvRSIR8776G5+Wnp7u7+9P7zY3N1MbwcHBixYtMn6/hJDu7m6qp40QsmzZMuZST76+vmlpaSNqYMdYde3atadPnw5njXV1dW+88cZw1jhI6GMDGOH+9a9/WToFgPEOnW0AAAAAAEPC19f3zJkzls4CAEY0ahpJ4+fExMQolcqSkhJ7e/vLly/TfTmxsbEzZsyoqKgghKSmpsbGxh47dowatqVWq7OysoKDgyMiIrKyssLCwgyVK5XKqKio5OTkZcuWdXd3FxYWRkVFnT59mjwbAVZXV1daWnr9+nV6kFZzc3Ovo1tEItGaNWtyc3OVSmVBQcG2bduYR018Uq/Val955RV6OSiJRLJnzx6JRELtJiYmnjp1SqVS3bx5c926ddToOirP0NBQkUiUkpJy584d4+1Gyc/Pr6ioKCgoYA4+61d8WkFBQa+9JtevX79y5QqzxNbWluq6Y04X+fjxY0Ot4e7ufujQIXS2DYMLFy4M8zSSkydPXrdu3XDWOB44OTk1NjbqFDo6Oj558sQi+QAAwLiC0d8AAAAAAOaXmpr64MEDdLYBgHHMNduEQmFdXR3zqLOzs1QqFQgEDx484PF4OtdOnz69vLx8ypQphJCWlpYFCxZQk0/SPWE6G4bKp06dyuyI4vP59NNqZqeaoW1aXl7ehg0bVCrVtGnT+Hz+uXPnBraKRkFBQVJSUmFhISHEz89v37591Gx7VVVVu3fvlkgk3d3dHh4eRUVFzHza2trs7e2ZcQy1G3W+SqWaMGEC8176G582efJkqVSqc/TatWsLFy6cPn16r5c8evTo+eefpzr5dBqTudva2jpz5ky5XN5Xm8GgWGTNtsmTJ1dUVBj6hAyRQa7ZBjCcsGYbABg3AtdsG9YJqQEAAAAAAACgV1KpVKvVUh0t1IZUKiWE9PT0GLrELK/Penp6ahn0x4UYRw8LW7t2rVKpVCgU9+7dCw8PZ86s2C/+/v6dnZ1FRUVFRUVdXV30ulabN2/29vYuKyuTy+W5ubk6V+n3hBlpN0II1dPG1N/4NP2fQnZ2tqurq5F+lJkzZ6pUKkNH1Wq1keAAAAAAMAKhsw0AAAAAAABg5Nq4cWNycjIhRCaTicXirVu3UuUikSg9PZ3qIUtLSwsPDx9Y/MDAwIyMjNraWo1GY+IlNjY2YrFYpVLl5+evWrWKKuTz+cXFxVZWVi4uLu7u7sy1xwghS5YsoZZtM0V8fHxcXFxcXFx8fDxdKJVKFy9ezOVyS0tLT5482WcQQ+1mSH/j01xdXZlDEi9evPjiiy/OnTuXMNacI4T4+PjExcVVV1cTQsRisY2NDVVua2tLz5N5584dLpdL/yBqa2tnz55teiYAAAAAYCnobAMAAAAAAAAYQRwdHZm7ycnJcrnc0dHxhRdeuHTpUlJSElWekJAgk8lcXFxcXFyampoSEhLIs94duo9HZ0O/nBCya9cumUzm4+PD4/ECAgKOHDmif4nO5Tk5OWFhYQ4ODhkZGZmZmVThrFmz7t+/7+bmxmKxwsLCcnJymHehVqtNH6Tl6+ur0Wi0Wu3KlSvpwrS0tMjISB6PFx0dLRKJ9HOj9Nluhu6rv/Fp/v7+5eXl9G5ERISHh4f+yWKxuKamxtPTU6d9Pv300+XLl7NYLD6fv379+ry8PLofrry8PCAgwMRGAwAAAAALwpptMOTa2to6Ojo4HM6kSZMsnQsAAADAMMGabQBgCuaabTBKVVZWpqamnj592uyRt2/fvmfPHgxuG2pYs23wqK5lPGPUNxQtExsbS71dQQg5f/781q1bNRqNjY1NTk5OSEiITtWEkMmTJ0skkgULFhBCbt68eebMmfb29i+++ELnEmbYkQBrtgGAcSNwzTbdOcoBzK6tra29vZ3NZqOzDQAAAAAAAMYYNze3KVOmDEVkHo+HnjYYagKBoL6+3sSTOzo6en22o9Vqex33aej8XnE4nLa2NhNPHi0MtcyAVVVVtbS00Lvbt2+/fPlyYGCgWCwOCwujF9Gka9e5fNu2bd99952DgwMhRCKR+Pv7KxQK6lBLS8vDhw/xOwcAYMAwjSQMOQcHBwcHBzs7O0snAgAAAAAAAGB+hw8fHoqwhw4dGoqwAEwNDQ3MXbFYzGazWSwWl8v19vZ2c3OjymUymZeXl52dnZOT044dOzo6OoyHNXR+V1fXO++84+TkJBAIzp49S8fn8XgKhUJ/vlaVShUdHT1v3jw3N7d9+/bRnUnUaXK5PDIyksPhREVFMWs3cZFInep0dnfu3Dlv3jw7Ozs/P78bN24Yr9fQfVG+/vrrGTNmsNlssVhMF/YrPi09Pd3f35/ebW5uDgwMJIQEBwcvWrSoz1vu7u6metoIIcuWLWMurunr65uWltZnBAAAMASdbTDkbG1tp02bxmazLZ0IAAAAAAAAAAAYJBKJ1qxZo1KpGhoa9u7dK5fLqfKoqKjk5GSlUlldXe3r66vfCaTD0PkxMTFKpbKkpOThw4d2dnbNzc1UObWhfYaOExsbKxQKKyoqKisrhUJhbGwsVU6dExoa6uPjI5VKV69ezaxdJ4ghWq126dKlEomE2pVIJK+88gp9YWJiYkVFhVwuj46OXrdunfF6Dd0XJT8/v6Kiglrtki7sV3xaQUHB/Pnz9e/l+vXrV65cYZbY2tpSXXfMTr7Hjx8bag13d/eCggLDrQUAAH3Amm0AAAAAAOaHNdsAwBRYsw3A4sbnmm1CobCuro551NnZWSqV5uXlbdiwQaVSTZs2jc/nnzt3jloOZ+rUqcwOJD6f39jYyLycxfrZM0ZD5wsEggcPHvB4PP30dCJQpk+fXl5eTs3U2tLSsmDBAnrSSxaL1dbWZm9vP5C2eKagoCApKamwsJAQ4ufnt2/fPj8/P0JIVVXV7t27JRJJd3e3h4dHUVERnVuv9Rq/L5VKNWHCBOY99jc+bfLkyVKpVOfotWvXFi5caOjj9OjRo+eff54aFKjTyMzd1tbWmTNn0t2rFoc12wDAuBG4ZhtGtgEAAAAAAAAAAIwjUqmUHv5FbUilUkLI2rVrlUqlQqG4d+9eeHg4PWOhp6enlkGnp02fofN7enpMSY+59piRcQKD7GkjhPj7+3d2dhYVFRUVFXV1dVE9bYSQzZs3e3t7l5WVyeXy3NzcPus1fl9UTxtTf+PT9FsjOzvb1dXVSMftzJkzVSqVoaNqtdpIcAAAMB062wAAAAAAAAAAAIDw+fzi4mIrKysXFxd3d3d6Ta/AwMCMjIza2lqNRmNKHEPnb9y4MTk5mRAik8nEYvHWrVvpQzY2NmKxWKVS5efnr1q1iioUiUTp6elUj11aWlp4eLgptZu4ZhslPj4+Li4uLi4uPj6eLpRKpYsXL+ZyuaWlpSdPnuwziJH76lV/49NcXV2ZQxIvXrz44osvzp07lxDCXOvOx8cnLi6uurqaECIWi21sbKhyW1tbetrMO3fucLlc+gdUW1s7e/Zs0zMBAAAd6GwDAAAAAAAAAAAYjxwdHZm7s2bNun//vpubG4vFCgsLy8nJocp37dolk8l8fHx4PF5AQMCRI0foS6iFwZgbRs5PTk6Wy+WOjo4vvPDCpUuXkpKS6DjUkmYODg4ZGRmZmZlUYUJCgkwmc3FxcXFxaWpqSkhIoCula2R2MlHUarXpg7R8fX01Go1Wq125ciVdmJaWFhkZyePxoqOjRSIRs8Ze6zV0XzpX0f/tb3yav79/eXk5vRsREeHh4aF/slgsrqmp8fT01Pk5fvrpp8uXL2exWHw+f/369Xl5eXQ/XHl5eUBAgImNBgAA+rBmGwAAAACA+WHNNgAwxdCt2UY9eO31n/y9LozU51VDF2dIGcpkYO0DY9L4XLMNRqnKysrU1NTTp0+bPfL27dv37Nkzcga3Yc02ADAOa7YBAAAAAAAAgDECgWDwQYx0Fw3s0NDFGVKGMjFL8hwOZyA5AQAMlJub25QpU4YiMo/HGzk9bQAAoxE62wAAAAAAAABGkIaGBnpbZzIxnd2dO3fOmzfPzs7Oz8/vxo0bfUa+evWq/mxj7e3tERER9vb2ixYtKikpMSXDAcQxfQklsVjMZrNZLBaXy/X29nZzcyPPbjwlJYXD4UgkkszMTA6HIxaLqUv62w79ui+q5NSpUzNmzGCz2XSlPB5PoVAYme0NAGAoHD58eCjCHjp0aCjCAgCMH+hsg6Eil8sbGxu7urosnQgAAAAAAMBopdVqly5dKpFIqF2JRPLKK6/QQ68SExMrKirkcnl0dPS6dev6jBYUFKQ/bGv//v0CgaC5ubmwsDAvL8+UrAYQR6vVmjhiTCQSrVmzRqVSNTQ07N27Vy6Xk2ejzdRqdVZWVnBwcElJSVZWVlhYGHVJf9uhX/dFldTV1ZWWllJrSlHlzc3N9H2NnJF8AAAAAGAREyydAIxZbW1tXV1dtra2mMgYAAAAAACgT0KhsK6ujtqmRko5OztLpdL4+Pi4uLjCwkJCSFxcXHx8PHVOVVXV7t27JRJJd3e3h4eHQqEYWL2fffbZDz/8wGazp02btm3btpiYmKGIc+fOHdPjbNiwwcbGZtq0aXw+/8qVK/ShvXv3EkI2bdqUkpJCbRDztYNxiYmJhJCQkBCVSjUU8QEAAABgVMPINhgSarWaGtM2adIkS+cCAAAAAAAwCkilUnqMFLUhlUoJIf7+/p2dnUVFRUVFRV1dXX5+ftT5mzdv9vb2Lisrk8vlubm5ZslBqVRaPM7atWuVSqVCobh37154eLi/v7/x84eiHQbAXE0HAAAAAKMROttgSHR0dBBCnnvuOWtra0vnAgAAAAAAMLpRg9uYw9oIIVKpdPHixVwut7S09OTJkwMOvmXLluPHj6tUqrq6uqNHjw5RHNPXbOPz+cXFxVZWVi4uLu7u7u3t7cbPN1c7DICNjY1YLFapVPn5+atWrRrOqgEAAABgREFnGwwJqrMNw9oAAAAAAAD6y9HRUafE19dXo9FotdqVK1fShWlpaZGRkTweLzo6WiQSkWeTT1Ib1Da9YaQ8KSmptrbWwcEhMDDw9ddfZ8YxZABx1Gq1iQubzZo16/79+25ubiwWKywsLCcnhw7FvEGzt4OhcmbVOmlQS7g5ODhkZGRkZmaacncAAAAAMCZhzTYYEuhsAwAAAAAAGJgnT57oF37zzTc6JSEhISEhIfQusyvLULdWr+V2dnbnzp07d+6c8WsHGef777/vMyyluLiYELJt2zZDNdLb1Ia52sFQuZGAISEhmD0SAAAAAAg622AoKJXKnp4eFotla2tr6VwAAAAAAAAAAAAMooarmjj6dlQYijuKjY1NSEigts+fP79161aNRmNjY5OTk8N844Ee+zt58mSJRLJgwQJCyM2bN8+cOdPe3v7FF1/oXMIMCwN24MCBsfQBhqHDZrP/9Kc/WTqLMQvTSIL5UcPabG1t+5x7BAAAAAAAAAAALEUgEFg6hb5RD5qGTn97KYY6n8Eze79LVVVVS0sLvbt9+/bLly9rtVpqNl392rVarVwup3raCCHbtm07deqUWCzWarX/+7//Gx4eTp/c0tLy8OFD82Y7Dh09elSlUlk6CxjpOjo6UlJSLJ3FWIaRbWB+mEMSAAAAAABgVHNycmpsbNQpdHR07HWKSwAYvRoaGpi7XV1d+/fvv3DhgpWVVWJi4ocfflhZWUkIUalUH3zwAdVZsn79+oSEBDabTb1jfeLEibi4uK+++qqsrOzdd9/Nzs4OCQmhDl27du23v/3tzJkz//rXv7q6ulJV7Ny5s6CgoLa2dtmyZTExMStWrCDPhkO1tLTs2bMnNzf3rbfeSkpKIoTIZLKgoKC7d+86Ojpu2rTp2LFjRh430e98U11NOru91ms8FDMOtRGXvrkAACAASURBVG08nyVLlpBnc+H2GbxfeRpqH0M/L8rXX38tEokaGxuZI8n6FZ+Wnp7u7+9P7zY3N1MbwcHBixYtMn6/hJDu7m4HBwdqe9myZe3t7fQhX1/ftLS0o0eP9hkEjPvTn/5kZ2dn6SxgRGtsbMzKyrJ0FmMZRraBmWm12s7OToLONgAAAAAAgFHryZMnWj3oaQMY82JiYpRKZUlJycOHD+3s7Og+ldjYWKFQWFFRUVlZKRQKY2NjybPOIbVanZWVFRwcXFJSkpWVRY1zog41NTU9fvx4//797733Hl1FYmJiRUWFXC6Pjo5et24dVUidHxoa6uPjI5VKV69eTZVHRUUlJycrlcrq6mpfX9+oqCgjyWu12qVLl0okEmpXIpG88sor9BivXus1EqrXbeP5UL8qjUceWJ6G2sfQz4uSn59fUVGhM/isX/FpBQUF8+fP17+X69evX7lyhVlCzXTFYrHYbLZYLKYKHz9+bKg13N3dCwoKDLcWAMCowcJ0rmBenZ2dtbW11tbWs2fPtnQuAAAAABaTmpr64MGDM2fOWDoRABjR0tLSbt26lZ2dbelEAMavOXPmXLp0aeHChcNZ6eTJkysqKqZPnz6cld67d+/VV18tKysjhAiFwrq6OuZRZ2dnqVQqEAgePHjA4/F0rp0+fXp5efmUKVMIIS0tLQsWLKivryeEsFgseniW/kZLS8uUKVMUCoWzs3NrayshpKqqavfu3RKJpLu728PDo6ioiH4yyWKx2tra7O3tmfVOnTqV2YHE5/P1B90yFRQUJCUlFRYWEkL8/Pz27dvn5+dnvF66diMl9HZ/8zFjnr22j6GfF3W+SqWaMGECM//+xqdNnjxZKpXqHL127drChQsNfYwfPXr0/PPPK5VKote8zN3W1taZM2fK5XKdyw8ePNjZ2TmiRrxpNBpra+vOzs6JEydaOhddVlZWbW1tGNkGxjU2Ns6ZM6etrc3SiZiHlZXV7du3vby8LJ3Iv2FkG5gZ5pAEAAAAAAAAABjJpFIpPQyL2pBKpYSQnp4eQ5cM5n19qsuHELJ582Zvb++ysjK5XJ6bm6tzmn5Pj6enJ3N8bZ89W/7+/p2dnUVFRUVFRV1dXVQPVp/1GqfRaAacj3nz1G8fIz8vwmh2Wn/j0/R/+tnZ2a6urkY6jGfOnGlkFTG1Wm0kOADAaITONjAzdLYBAAAAAAAAAIxGGzduTE5OJoTIZDKxWLx161aqXCQSpaenUz1MaWlp4eHhpkT79ttvlUplfn4+3ZkklUoXL17M5XJLS0tPnjzZZ4TAwMCMjIza2lpmj5dx8fHxcXFxcXFx8fHxdGF/6yWE2NjYiMXi+vr6d99918R8lixZQi3bNmx5Gvp5GTKAdqC4uroyh0JevHjxxRdfnDt3LmGsOUcI8fHxiYuLq66uJoSIxWIbGxuq3NbWlp42886dO1wul27A2tpaTI419jA/FcN5LYBlobMNzEmj0XR3dxN0tgEAAAAAAAAAjHiOjo7M3eTkZLlc7ujo+MILL1y6dCkpKYkqT0hIkMlkLi4uLi4uTU1NCQkJ5NkzcfrJuP4jcmdn5zlz5qSkpJw4cYIqSUtLi4yM5PF40dHRIpFIJwjrGTrCrl27ZDKZj48Pj8cLCAg4cuRIn3fk6+ur0Wi0Wu3KlSvpQkP10pUyNyg5OTlbtmxZu3btG2+8QZ9vPB+1Wm36IK1+5WmofQz9vHSuov/b3/g0f3//8vJyejciIsLDw0P/ZLFYXFNT4+npyWKxwsLCcnJyqPJPP/10+fLlLBaLz+evX78+Ly+P7ocrLy8PCAgwsdFgRDH0aQEYt7BmG5hTe3t7XV0dm812dXW1dC4AAAAAloQ12wDAFONqzTb9JZGGs2qCmcrAgPG5ZtswsOD/8mB2lZWVqampp0+fNnvk7du379mzR39wG9Zs6xdLrdnW3//NnZ2ddVaLBEOGoq2wZttQw8g2MCdqDklbW1tLJwIAAAAAADBaCQSCwQeh/nVmIg6HM9RxSD/7uvpVb59MrNpc7QAAOoPeYLRzc3ObMmXKUETm8XiYRnL8qK+vt3QK5kdN82Z2Y7Ktxjx0toE5YcE2AAAAAACAQWpoaGDudnV1vfPOO05OTgKB4OzZs25ublQ5NX2TXC6PjIzkcDhRUVFUuUwm8/LysrOzc3Jy2rFjB7OXaOfOnfPmzbOzs/Pz87tx4wZVyOPxFAqF/uxhRuL0ylAcQsjVq1d1CqndlJQUDocjkUgyMzM5HI5YLO6zXtOXRGpvb4+IiLC3t1+0aFFJSQnz0JC2AwAQQrTPWDoRMJvDhw8PRdhDhw4NRdhxrqKiYsOGDQ4ODra2tj4+PtevX6f/eCCElJWVrV+/XigUCoXC0NDQiooK+hD1DahQKNavX89ms9lsNvXVTLt06dL8+fM5HM7WrVsVCoV+1VVVVb1OL/n888/rzFaqf46haweZs3GmRN6wYYOdnd38+fM///xz5rU5OTlCoXDixIn29vYBAQHff/898yh9LwUFBS+//LKbm9uVK1foo8eOHfPy8uJyuS4uLu+9915TU5PpbWUk5z7rhSGFzjYwm56eHqVSSTCyDQAAAAAAwHxiYmKUSmVJScnDhw/t7Oyam5upcuopdmhoqI+Pj1QqXb16NVUeFRWVnJysVCqrq6t9fX3pTjhCSGJiYkVFhVwuj46OXrduHVVIBdR/Mm4kTq8MxSGEBAUF6ZRQu2q1OisrKzg4uKSkJCsrKywsrM96TX98v3//foFA0NzcXFhYmJeXxzw0pO0AAEPNycmJpcfJycnSeQGMCGVlZatXr169evWDBw9aW1vPnz9fVVVF//FQVlb2+9//PiUlRSqVSqXSEydORERE0L011NdfVFTUnj17uru7c3JyqK9myjfffPPBBx/k5uY2Nja+9tpre/fu1a997ty5vX5N//DDD1S5lsHEaweTc59t1Wfk5OTkN998s6mp6auvvjp16tT169epozdu3MjOzr58+XJHR0dDQ0NMTMz27dvv3r1LB6cuT01NLS4uzs/Pr6ioOHv2LH305ZdfvnPnTmtr6z/+8Q97e/uQkBAT28p4zn3WC0NLC2Amra2tlZWVNTU1lk4EAAAAwPL+/Oc/v/nmm5bOAgBGuo8++ig8PJzadnZ21vkHu7Ozs1arnT59elNTU6+XE0La2tp0Cnk8HjMIn8+nyisrK9esWcPj8ezs7Hx8fMjPO5b0gxuKY4TxhwxE77FRrxsDqLdXDg4OdLv99NNPdC3D0A4wusyePftf//rXMFfK5XLr6+uHudLvv//e3d19mCsFGJg//vGP+/bts3QWP6NWqwkhnZ2dlk6kF9QALGp73bp1586dM3Tm2rVrr169yiy5evXqb37zG3qXEJKbm8vcpbf9/f2vXbtG7166dMnQ935/y42fM5icjTMl8hdffEHvFhcX+/r6Utv/+Z//+eOPPzKv/ec//7lq1SqdeykoKKB3e3p6ek2jp6eHWv1O59qB5Wyk3idPntjb2/cadjRisVjFxcWWzuJnJgyohw6gF5hDEgAAAAAAYMCkUim1QT1woct7enqMXGVvb69T4unpWVBQoH/m5s2bt2zZkpmZyePxfvrpJ0MrwymVSjabbSSOieg4/TXIeg0lQ28PczsAjBzNzc2PHz8OCgqydCIAfauqqlq8eLGlsxiVbty4kZGRYeSozjinJUuW6AwF27RpU6/Xfvfdd56envSut7f3oBI12WByHnxk6r0cyksvvVRcXExtFxcXz5o1Syeg/oNxPz8/etva2pra6O7uPn78eHZ29qNHjyZNmvTLX/5S29uQvgHnbKheGGrobAOz4XA4VlZWdnZ2lk4EAAAAAABg7Ni4cWNycvKHH34ok8m+/fbbv/71r5988omR8wMDAzMyMlavXu3s7Gxl9e/FI6RS6eLFi7lcbmlp6YULF5iX2NjYiMXiNWvWXLt2LTEx8ebNm0biGNFrnP4yXi+1YBv9qMuILVu2HD9+/ODBgzKZ7NixY3T5MLQDwMjU09MzYcKE+fPnWzoRgL7J5XJqJBn0l1qt7nXZM5p+v47pPT2WMnQ59zcy/SKRra1tWVnZL37xiwFU+u677/L5/G+//XbKlCkqlaqmpqZfv5lH409wnEBnG5jNpEmTMKwNAAAAAABgkBwdHZm7ycnJUVFRVGFQUFBSUhJVTj1Kox+o0c9Zdu3adezYMR8fn5aWll/96lcrVqyIjo4mhKSlpUVGRjY2Ni5fvvzEiROJiYn0EDpqgRM2mx0QEJCZmWk8jhG9xmEmSW1otVo6eSoB5mA+4/Wq1WoTe7ySkpLefvttBweHOXPmfPzxx6mpqVQtw9AOACOTo6OjQCA4fvy4pRMB6NvBgwc7OzstncWo9Morr3z55Zevv/56r0dXrFjx97//PTg4mC757rvvfH19TYm8dOnSu3fvrlq1itr99ttvB5lqd3f3c8891+dpg8l58JElEsmaNWuo7X/+85/02L7g4OBPP/30/fffH0C9Fy5c+PHHH6dMmUIImTBhwtSpU/u8hG6roWsNMINhn7gSAAAAAGDsw5ptAGAK5pptAGARWLMNYATCmm39wlyz7fbt287OzoWFhRqNpqOjo7y8PD09/bXXXqOOlpaW/vKXv7x165ZKpVKpVLdu3Vq0aFF5eTkdihhYYFWr1d64cePFF1/85z//2dHRce3atbfeestQ54Khchsbm7/97W9arbauru7kyZMeHh6mXDuYnI0zJXJqaupXX33V1dX16NGjX//617du3aIOPX782NXV9dChQz/++KNSqWxqavqf//mfoKAgUzLx8vI6evSoQqFoamo6e/asv7+//pmG2qrPnI3UizXbhhpGtgEAAAAAAAAAAIx9bW1tFy9etHQWAH0rLS3VXxALTLFkyRKxWPz+++9v3LiRxWLNnTtXJBL913/9F3V0/vz5n3322f79+2/cuEEIWbly5fnz5+fNm0cd1R93ztxdvnz5wYMHN27cKJVKf/Ob33z00UcfffQRc2w6c/pK/ZH35NkI8p6enhkzZoSEhFy+fFn/fP1rB5OzccYjU95+++3t27dv2LDBycnpww8/XLZsGVU+Y8aMW7duvf/++15eXq2trbNmzVq/fj1zNTWdGQiYTfHxxx+/9dZb8fHxDg4Ov/vd7z7//HMul6uTs6G26jNnI/XCUDPpYwcAAAAAAP2Smpr64MGDM2fOWDoRABjR0tLSbt26lZ2dbelEAMavOXPmXLp0aeHChcNZ6eTJkysqKqZPnz6clVZVVb399tvDWSPAYGzevPnNN9+0dBb/ptForK2tOzs7J06caOlcdFlZWbW1tdnZ2Vk6kbHGxE670aKxsXHOnDltbW2WTsQ8rKysbt++7eXlZelE/g0j2wAAAAAAAADAJE5OTo2NjTqFjo6OT548sUg+AGC6uXPnFhYWWjoLAACAsQmdbQAAAAAA40tXV5e3t7elswAY6davXx8bG2vpLEYcdKoBAADAeNCvGSkBCDrbAAAAAADGG41G8/333+PddgAjxGLxo0ePLJ0FAAAAAFgG+tigv9DZBgAAAAAwHq1atcrSKQCMXA8ePHjw4IGlswAAAACAAXJ1dTX07tTMmTNramqGOR8Y89DZBoPV09PT2tpqa2tra2tr6VwAAAAAAAAAAAAAYLxDdxoMMytLJwCjXkdHR1NTU1NTk6UTAQAAAAAAAAAAAAAAGG4Y2QaDZWNjw+FwnnvuOUsnAgAAAAAAAJbBYrHIcK1uwmKxsIwKAAAATavVrly50soK42rAGJVKpVQqLZ3FWIbONhgsTCAJAAAAABYxnA/3R75haw00+zAQCAT19fWDDNLR0TFp0iQTT+ZwOG1tbYOJo9Vqqc/GMDD942fkvgAAAMYMFou1Zs0aNptt6URgRFMoFKWlpZbOYixDZxsAAAAAAIxKw/lwf+QbttZAsw+DhoYG5m5XV9f+/fsvXLhgZWWVmJj44YcfVlZWkmcdny0tLXv27MnNzX3rrbeSkpIIITKZLCgo6O7du46Ojps2bTp27BjdW7Zz586CgoLa2tply5bFxMSsWLGCEMLj8RQKBf1jpbuyjMQx5NGjR5s3b66oqAgJCTl16pSdnR2d55UrV4KCgq5evRocHDxjxozHjx9TlyxZsoQQUlxcbErLUJeTn/e3UfFPnjx59OjRxsbGnJyckJAQI/cFAAAw9uzevZv62gUwpLGx8c9//rOlsxjLMLYUAAAAAABgILq7uy2dwgiC1hg6MTExSqWypKTk4cOHdnZ2zc3NVDnVexQaGurj4yOVSlevXk2VR0VFJScnK5XK6upqX1/fqKgoOlRiYmJFRYVcLo+Ojl63bh1VSAXUPkOfbCSOIWfPnv3888+rq6vt7e337dtHFX733XdLly4NCgoihAQGBi5evPjKlSv0JTqVGhcUFKR/MlVSV1dXWlqak5MTFhZm/L4AAAAAAMwOnW0AAAAAADByVVRUbNiwwcHBwdbW1sfH5/r1625ubswTampqfv3rX0+YMIHNZovFYuahY8eOeXl5cblcFxeX9957r6mpiT7EYrFYLJZCoVi/fj2bzda/9m9/+9vcuXPt7e23bt3a0dFBnU8fzcnJEQqFEydOtLe3DwgI+P777025F9YzvZZT22VlZevXrxcKhUKhMDQ0tKKiotczCwoKXn75ZTc3N2anhX5FzLoGE/nSpUvz58/ncDhbt25VKBQ61RlvDRNzBkKIUCikm4vaEAqFhJDz588fPnyYz+fb2tpu2rTpp59+Yl715ZdfRkREcLlcX19fqiQvL2/58uVsNpvD4YSGhl68eJEqr6qq+u1vfzt16lQHB4f4+Hj9H6UOQ3GMiIyMnDFjBo/HO3jwIH3+0qVLBQLB3/72N0LIX//61+eff/6ll16iL7lz586dO3dMbCIjEhMTuVxuSEiISqUafDQAAAAAgH5BZxsAAAAAAIxQZWVlq1evXr169YMHD1pbW8+fP19VVUUP66H84Q9/OHHihEqlYo5oobz88st37txpbW39xz/+YW9vT80sR6GGuURFRe3Zs6e7u1vn2r///e8ffPDBxYsXm5qaduzYcfDgQcKYg+7GjRvZ2dmXL1/u6OhoaGiIiYnZvn373bt3+7ydzs5OJycn/RFgnZ2dU6dO7e7uLisr+/3vf5+SkiKVSqVS6YkTJyIiIpi9YlQOqampxcXF+fn5FRUVZ8+e1a/o4cOHb7zxxpMnT+icBxP5m2+++eCDD3JzcxsbG1977bW9e/cy6+qzNUzMGQghUqmUHoNFbUilUkJIT0/P/2Pv3uOauPL+gZ8oxEICmshFLpWqVdS21iuiP3mqi4qA2gYR3D7qw+Ot2623tctVitoKEUWtsvWpAhWwVfGWKggWFLriYh+p+2xbQCNeVgVEIoGWi5AQ8vtjtrPTSTKEawA/7z98zZw5l+8MkjBz5pzDUUooFLJSpkyZomWoqqqi0gMCAmbNmnXr1q3a2tpTp04ZqlClUnHXY4zW1tYBA/79wCEmJiYqKqq5ufnjjz/++OOPja+nC9HnBQAAAADQ9bQAAAAAANDVPv3007Vr15o6Cv0aGhr6yo3A4sWLU1JSODIQQv7xj38wdw3lbGlp4fF4rLKnTp3SW9bLy+vSpUv07tmzZ5lH/+M//uPBgwfMqn788ce5c+dyxElbsmRJbm6uVquVy+Xbtm2jErOzsxcsWKDVahctWpSZmcnMn5mZ+fbbb7PCzs7OZp4X6xQuXbq0bNmyuro6ZqnO1Dx//vzLly/T6efPn2/v1eCIudfqsV/hzz//fMWKFaxE1v/kP/zhD+Hh4Vqttqqq6ty5c//5n/9pKCdl3759CQkJjx8/1mg0zHRbW9vLly8/f/78hx9+CA8PZ5Y1Nzc/d+6cSqXKzMz08PDgrscQQsi2bdseP36sVCo3b968YcMG5tE1a9bMmzdvzZo1rFLTpk2bNm2aMfUzG+JIafO8AFhGjhz5008/9XCj1tbWT5486eFGAaAzNBoNIeT58+emDkQPasIGY3Jy/LXcezoLDEXCEWEvibyXe/r0qVAoNHUUXYbH4924ccPUUfyGWbf35gEAAAAAAHRIXl5eYmIid54333xTb3pzc/PevXtTU1MfPXpkaWk5ceJErc6iTUuXLtVb9vvvv58+fTq9+9ZbbzGP3rhxY8SIEawilpaW3HFS3nnnnW+++WbOnDnp6ek7dux45513Jk6cmJ2dPX/+fEJIXl4ea9SXm5sba7geIWTevHn09sCBA5mHpFLpjRs3Tp06ZW5uzkzvTM3Xr1+fMmUKnT5r1ixmESOvBkfMoMvOzo65GxcXFxwcTCX6+Pjs2bOHSqcnnKR26f/hGzdu3L17t4eHR01NzfTp0+fMmRMWFkYIOXz48OrVq6uqqmbPnr1v3z6pVEr1QBNCqMGdfD7fy8srKSmJux69qDCCgoL8/PxKS0v9/f0PHDjAzBAeHj5+/PjS0lJWQY1GwxwDx40+WWqDCp6+Dlqtlrlt6LwAAAA6LDc3l8/nmzqKtjk4ODx58kQ3XffvYeYh3dnOTcJQJBwRcpwXi5WVVV1dXceD6/suX75s6hC6TG+bPBydbQAAAAAA0EtpNJoO3/Nv3rzZ1tb22rVrQ4YMUavVDx8+HDduXJdEZWFhcevWrVdeeaUDZRcuXHjw4EFCSHp6uru7e3Jy8qeffpqdnX38+HEqg+6TAuOfHRBCGhoafv755/v377u6urZZT7tqNqQzVwMMefr0KXNXIBAcOnTo0KFDrGyGfoIDBw4MDw+nxq4xSSQS3clU6UO6sywaqkcvurYbN27ozXDx4sX333//5ZdfZqUbueQhqxVDiawMes8LAACgA3g83ty5c/fv32/qQIxSWVnJSsnMzPT19SW//a5saGj44IMPzpw5M3r06GPHjrGKuLm5EcPf7EwymSwwMFCtVltZWU2YMKGqqurOnTvUn/H79u2Lior65ptvbt26tXnz5tTUVOqvkQ0bNmRnZ5eVlc2cOTMiImLOnDkdO1O950U1ffDgwdjY2KqqqrS0NKpRsVhcX1+v+6LSCyU2NtbUIXQNrVZbU1Nj6ih+A51t0HF1dXXUYvK95K0HAAAAAOhnZsyYceHChVWrVnWg7MmTJx88eDBkyBBCiJmZ2dChQ40vO3Xq1MLCQnowFuv1T19f36+++mrr1q0diGrIkCFDhgy5ffv2zZs3f/zxRw8Pjw8//LC6uvq1114jhMyZM+e7776jnhdQrl+/7unpaXz9O3furKysfPfdd48cOfLqq6/S6Z2p2d3d/fvvv587dy61e+3aNebRzlwNeHHQ94x95RklAAAAC4/Hy8nJMXUU+hkzRtzHx0d3ZFhoaKiDg4NSqfzll18SEhJYRYzvi1q5cuXChQtPnTqlUqmys7PXrVtHfh2IptFojh496uvrGxQUdPTo0cDAQOo9GKlUGh8fr1arr169unjx4g6PNtN7XlRKRUVFSUnJlStX6EaVSiU9/P2F1Wv/G7dXL+ySMHauBgAWjUZTWVn56NGj1tZWU8cCAAAAAP1TTEzMRx99RC0Y9vz5c7lcnpiYaGTf2+jRo48cOdLQ0KBUKlNSUpYvX258u9u3b//zn/98584dtVpdUFDw17/+lXlUKpUmJCTs3Lnzn//8p1qtViqV33zzDbMfi9vixYu3bNni5eU1YsSI6dOnb968me7Hio2NjYyMLCgoaGlpaWlpKSgoiIqKau/Lp8OGDfvyyy/XrVt3//59OrEzNUdERGzZsuWnn356/vz5lStXsrKymEc7eTXgBUEvZWHqQAAAAPozJycnHo9HT6rM4/GcnJw48h8/fjw4OJjP59vY2FA9ZEyFhYWFhYXGtHv8+PGMjAxzc3MXF5eIiIiLFy/Sh/785z/7+/vX1tbu37/f39+fmvevtLT097///dChQ0Ui0Y4dO+rr69t9qkaQSqXW1tYSiaS3TTYI/RU626CDmpqaCCF8Ph8rLgAAAABAN3Fzc5PJZLGxsSKRyNHRccWKFU1NTX/5y1+oo6wFq1i7x44dy8rKsrOzmzBhQnFx8ZkzZzgys3bd3d2joqJ8fHyGDBkSHx/P6pRydnb+29/+dvfu3WnTpgmFwpkzZ+quiMbhnXfeycrKWrZsGSHkv//7v8+dO0ct2EYIGTdu3PHjx3ft2iUSiUQiUWxs7IkTJ5gTQjIfndBPUpiHKE5OTnl5eaNGjaITO1Pz7Nmzt2/f7u/vb2tr+8UXX+zevZvZXJtXg6Nm6Ivs7e15Ouzt7U0dFwAAAJDy8nL67RZqo7y83MiynZl4edGiRSqVqr6+/u9///uKFSvoP24NCQgImDVr1q1bt2pra0+dOtXhdjsJc01D18I0ktBBz58/J4RYWFiYOhAAAAAA6M/c3NwMTXXCGiXD2nV1dc3LyzOUgbssIWTJkiVLliyhthUKhZWVFfOok5OT8b1rLM7OznRzCxcuZDU9bty4CxcuGCrLvaY9d7YO10wI8fPz8/PzM5SZ+2pgMFM/w1pPDgAAAPquZcuW7d27d/v27QqFgnqhisn4NdtsbW0vXrz4xhtvvPzyy2PHjm1oaODOX15ePnXqVGtr65KSkpMnT3Y4/g4wNzeXyWQLFy68fPmyVCq9evVqT7YO/RtGtkEHobMNAAAAAF4EFRUVkZGRwcHBpg4EAAAAAMAodnZ2rBTW9JJU4p49e8rKykQikbe3NzVVO3MSAo1GY+RbUyNGjPjHP/4xZswYHo8XGBiYlpZGDMwkQTl8+PDq1avFYnFYWNjKlStZ2XTjbG86s2lWGGlpaYGBgSKRKDExMSkpyZizAzASRrZBR2i12ubmZkLISy+9ZOpYAAD6gIaGhk8++cTUUQD0N7Nnz16wYIGpo4B+a/fu3aGhoYQQW1vbqKio9evXmzoiAAAAAACj6I5E19ttJhAIUlJSWDK3AQAAIABJREFUUlJS9Oa5efOmkc1Ro99Yq77pnXeB2pBIJBKJhDunMfEbSueoUCKRYPZI6CbobIOOaGpq0mq1ZmZm5ubmpo4FAKAPeP78+b59+9DfBtCFcnJyeDweOtug+4SEhISEhJg6CgAAAAAAAOgD0NkGHYE5JAEA2svc3JwaIQEAXaKxsREvJEIv5OLi8ujRI72Hhg8f/vDhwx6OB/o3akKkPrQqHo/HM1W0fe5aAQAAAEDfgjXboCOozjbMIQkAAAAAwPTw4UOtAehpA+M5ODgYk61nuo4aGxuNz2xlZcVxtF0Bt6vdNhnZNEf8XRsPAAAAAPQz6GyDdtNqtU1NTQQj2wAAAAAAALpBZWUlc7epqWnTpk329vYODg7JycljxoxhHs3NzXV2dubz+TKZjE7csGGDq6urQCCYN29eXl4elcjj8Xg8Xnx8PCt/Y2Pj2rVrRSLR5MmT5XI5lY0QolAopk2bJhAI7O3t169f32Zvk1gsrq+v5/2KeSgzM5OVSO3u37/fysqqoKAgKSnJysqKCom7XTc3Nzc3N2MuY0NDQ1BQkFAonDRpUlFREfOQ3utjKP72XgcAAAAAeAGhsw3aTaVStba2DhgwYNCgQaaOBQAAAAAAoJ+LiIhQqVRFRUX3798XCARKpZJ5NCsrSy6Xp6WlBQYG0olSqVQul9fW1oaFhS1evJhKpEZ3VVRUlJSUMPOHhoaKxeLKysr8/PxLly7ROYODg+Pi4lQq1b179zw9PYODg7njpAKjR3MyD/n4+LBSqF2NRnP06FFfX9+ioqKjR49SIXG3q1u5IaGhoQ4ODkqlMicnJz09nXlI7/UxFH97rwMAAAAAvIBMNmE69F0///xzVVWVpaWlk5OTqWMBAOgbnj175uLi0tDQYOpAoNuZcDWaF822bdtUKpVUKjV1IAYdOHCguLj4yJEjpg5Ej+rqagcHB0wJDsChtbXV1dX15s2b3d3Q4cOH//a3v6WmphJCnJycKioqmEcdHR3Ly8sdHByKi4vFYrFucR6Pp1arzczMCOM7qLS0dMuWLQUFBc3NzZMnT87Pz6e/m5jfU/S2nZ3d7du3qfoVCoWdnR2VPnToUGbHnq2tbVVVFffpcH8Pso7Su6yNDrSrl1gsvnv3LnVe1dXVNjY27bo+tK6KB3qtUaNGnT9//vXXX+/JRgcPHiyXy4cNG9aTjQJAfzVgwIC6ujqBQGDqQKBXq6qqGjVqVF1dnakD6Ro8Hi8jI8PX19fUgfybmakDgL6HWrANc0gCAEB3oGZtQn8VQLcaNGiQWq2+fv26qQMB6L1OnjzJ6vfqAeXl5dQGq8unpaWFoxTV08YUEBCwbNmypKQksVj87NmzNleAY06ZyGx3ypQp2dnZRgavS6VS8fn8DhTsZLuGgqG3jbw+dPzdEQ8AAAAA9DPobIN2w4JtAADQfbRaLWuVl77FUDeho6Njzz+0BTBkwIABhJApU6aYOhCA3uvatWs///yzqaP4F39//7i4uJiYGIVCce3atbNnz3755Zcc+cvLy6dOnWptbV1SUnLy5Mk26w8MDNy/f/+OHTsaGxsTExPpdG9v78TExAULFjg6OlKfG20yNzeXyWQLFy68fPmyVCq9evWqMaVYuNulFmy7ceNGm/UsW7Zs796927dvVygUu3fvptM5ro/e+DtwHQAAAMCEuuMt3sjIyJ07d1LbJ06cWL58eWtrq7m5eVpamkQiYTVNCBk8eHBBQcH48eMJIVevXj1y5EhDQ8PXX3/NKsKsFvo6/JkI7aPRaNRqNY/Hw4JtAADQLzU3N3dHtU+ePDFJuwAA0BfZ2dkxd+Pi4mpra+3s7F577bXz58/v2bOHSqee5uj+e/jw4dWrV4vF4rCwsJUrV3LkpP7dtWtXZWWljY3NrFmzFi1aRLe7ceNGhULh4eEhFou9vLx27drVZuTUUnAikSgxMTEpKYlO5/F4dIu6AZDfjq7jblej0Rj57GzPnj1lZWUikcjb23vVqlVtXh9D8XfgOgAAAJhWm+PaO6OxsbH7Ku8SXT5ZTmlpaU1NDb37wQcfZGRkaLVa1qK5dOtarba2tpbqaSOErFu3Lj4+XiaTabXab7/9dsWKFXTmmpqa+/fvd220YCrobIP2oeaQ5PP5eKEPAAA6TC6XL1myRCQSWVhYeHh4XLlyZcyYMcwMDx8+fOutt8zMzPh8vkwmYx7avXv3tGnTrK2tX3755T/96U/V1dX0Ier5XX19/TvvvMPn83XLnjt3bvTo0UKhcPny5Y2NjfTzPkpaWpqTk9NLL70kFAq9vLzau05PaWkpq0LKq6++yny8qJvHULtUzkOHDllZWRUUFMTExAgEAtYZAQBAv/T06VPmrkAgOHToUFVVVVVVVXJyMv34TPsr1rZEIvnnP//Z2NiYmZk5duxYvXmY25aWlgkJCUqlsrCw8O7du/SDoYEDB4aHhz948KC2tvabb74JCwtrM3KJRKJSqerr68+ePTt69Gg6XftbeoMhvz4a42735s2bhYWFxlxGgUCQkpJSX1//ww8/TJgwoc3rYyj+DlwHAAAA06qsrGTuUneX8fHxzs7OrDvlDRs2uLq6CgSCefPm5eXl0Zn3799P3YomJSVZWVlRRRQKxbRp0wQCgb29/fr161m9bm5ubtQAdG6s+2LWrm48dJ7a2trVq1dbWVkFBwdT6U1NTZs2bbK3t3dwcEhOTmY9WMjNzTXmfDnqpyUkJMyfP5/eVSqV3t7ehBBfX99Jkya1ecrNzc0ikYjanjlzZkNDA33I09Pz8OHDbdYAfQL6S6B9qDkkX3rpJVMHAgAAfdWtW7cWLFiwYMGC4uLiX3755cSJE6WlpUqlkpnnvffe27dvn1qt1n1N7M033ywsLPzll19++OEHoVDInK6BelIWHBz84YcfNjc3s8p+9913H3300enTp6urq9evX799+3bCeN8tLy8vNTU1IyOjsbGxsrIyIiLigw8++P77740/r9GjR+t9e+7u3busp4rMbBztUtlKS0uTk5PffvvtZ8+epaam6r40B9DdOGZ21dvBbGSdbRZsb819egZaAJPbunUrj8cTCoWpqam5ubmmDgcAAAC6EnV3WVFRUVJSwrpTlkqlcrm8trY2LCxs8eLFdGaNRnP06FFfX9+ioqKjR49SRYKDg+Pi4lQq1b179zw9PVmdUqy7XY5g3N3dCwoKqN2CgoIZM2bQBXXjoUPy8/Pz8PAoLy9fsGABlR4REaFSqYqKiu7fvy8QCFgPFrKysuRyeZvny1E/LTs7e9y4cbrncuXKlYsXLzJTLCwsqJsdZiff48ePDV2NsWPHYmnY/kML0B6PHz++c+fOzz//bOpAAAD6EoVCYWlpaeooeovFixenpKRwZCCE/OMf/2DuGsrZ0tLC4/FYZU+dOqW3rJeX16VLl+jds2fPMo/+x3/8x4MHD5hV/fjjj3PnzuWI01Dw7UrnbpcQQn3nEkJ++eUXjnpeQFFRUWFhYaaOgsunn366du1aU0ehH/UqJStx2LBhHaiqw/8nTfifWSgUmqpp6EN67Ff4888/X7FiRQ80BACGjBw58qeffurhRq2trZ88edLDjQJAf0VN8aLVah0dHVkP/x0dHak8RN+w8jt37ixcuFAsFgsEAg8PD/Lb4ea6G2KxmFm5ra1txwL+5ptv6NveuXPnZmdnc8dDBVBXV8eqZ9iwYdXV1XqbIISo1Wojz9dQ/TRra2vdozk5ORyf5A8fPjQ3N2cFoLv7888/Dx482FAlXevp06f96VaIEEJN5tl7YGQbtINWq6VGtllYWJg6FgAA6Kvy8vKo+RY4vPnmm3rTm5ubY2Jixo4da2lpaWNj4+XlpdV5b27p0qV6y37//ffTp0+nd9966y3m0Rs3bowYMYI50+OECRPoV+26T5vtWltbUxtWVlbdHQy84FhTzRBCMjMzdYegNTQ0BAUFCYXCSZMmFRUVsYoYOXUM5dGjR+7u7iKRaNWqVcypVPS229jYuHbtWpFINHnyZLlczsygN7+hqXLEYnF9fb3eOV0BwBj29vY8Hfb29qaOCwAAAEh5eTn10J/82p1TXl7OkT8gIGDWrFm3bt2qra09depUm/VPmTKF2bVQVVXVsTjnz5///Pnz/Pz8/Pz8pqamefPmGROPUChkpbS0tHC0YmZmxkppb/003ScPqampLi4uw4YNM1Rk+PDharXa0FGNRsNROfRR6GyDdmhubtZqtQMHDjQ3Nzd1LAAA0FdpNJoOP+DevHlzU1PTtWvXfvnll8ePH//lL3/pqqgsLCxYI8y0v47+6VamahfAGD4+Pro3fqGhoQ4ODkqlMicnJz09nXWUvrc3RnJy8pkzZ+7duycUCkNCQtpsVywWV1ZW5ufnX7p0iTBuSvXm1xqYKoeaW4b+dTMyVACgPX36VPc1XtYicwAAANAnlJeXT5061drauqSk5ODBg23m9/b2TkxMLCsra21t1T3arhfvduzYERUVFRUVtWPHjg7H4+/vHxcXRwhRKBQymWz58uXc+dtbP83FxaWiooLePX369BtvvEEt78p8vuHh4REVFXXv3j1CiEwmox+hW1hY0O/UFhYWWltb0xewrKxs5MiRxkcCvRk626AdqNm6sGAbAAB0xowZMy5cuNCxsidPntyyZYuNjY2ZmZmFhcXQoUONLzt16tTCwkJ69/Lly8yjvr6+X331Vcei6oDm5maTtAugy8nJiR7jRW04OTlx5D9+/HhwcDCfz7exsVm3bh3raGFhIfMXjdvq1audnZ3FYvH27dtPnz7NnTktLS00NHTQoEECgeDdd981sgmpVGptbS2RSDjeKgUAAAAA6Gfs7OyYu/Rf+6x/Dx8+vHr1arFYHBYWtnLlSsJYXJnuQ2J2Jm3cuFGhUHh4eIjFYi8vr127djFb0Wg0xr/N5unp2draqtVqf/e739GJeuNh/suanSIuLq62ttbOzu611147f/78nj17OnC+HPXT5s+ff/v2bXo3KCho8uTJupllMtnDhw+nTJnC4/ECAwPT0tKo9K+++mr27Nk8Hs/W1vadd95JT0+n++Fu377t5eVl5EWDXo49lBKAg1AoHDVqFHOUKwAAQHvFxMRIJJLhw4d7eno2NTU9evQoPz+/oKDgiy++aLPs6NGjjxw58sEHHzQ3N6enpx8/ftz4drdv3/7ee++dPn16xIgRhYWFf/3rX5lHpVLprFmztFrt8uXLnZyc6urqCgsLDx48yFrruMPMzc1lMplEInny5MmZM2eSk5Nv3rzZA+0CtImeWIZaAbFdZVUqVZfE0NraOmBAG28BMu9ju3BEmkql4vP5XVUbAAAAAEBvwBp0zvz7mbktkUgkEoneQ6wUamPgwIHh4eHh4eF6G6Vuco3HuivniMfQ3/8CgeDQoUOHDh0yFDYx7nzbvL947733Dhw4sHjxYmrX0Gw0NjY2KSkpuukSicTQrdOVK1c+/PBD7tahr8DINmgfHo+nO90tAACA8dzc3GQyWWxsrEgkcnR0XLFiRVNTEz0hpN536OjdY8eOZWVl2dnZTZgwobi4+MyZMxyZWbvu7u5RUVE+Pj5DhgyJj4+PjY1lRuXs7Py3v/3t7t2706ZNEwqFM2fOzMvLS05ONvKkmG/A6X0bjprFbsCAAdOnT797925GRkab7Rp6nRCrTIFpLVu2bO/evWq1uqKigvV7RNo5dUxCQkJZWVlNTU10dHRAQAB35sDAwP3797e2ttbX1ycmJnYk9F9Rnd9qtTorK2vu3LmdqQoAAAAAAPq9MWPGDBkypDtqFovFmEay30CvCQAAAPQ0Nze3nJwcvYdYL5Sxdl1dXfPy8gxl4C5LCFmyZMmSJUuobYVCYWVlxTzq5ORkfO8ad9i6OF5kM9Su3lPDElPQfVhTzRCdLl7qv9+ePXv++Mc/ikSiUaNGHTt27MCBA8whcRqNps0xanSFQUFBfn5+paWl/v7+Bw4c4G53165dmzZtsrGxGT58+LFjx7Zu3cqdn+6u1mq1zG3ya+c3n8/38vJKSkpq32UCAAAAAIAXT3R0dHdU+8knn3RHtWAS6GwDAACAF05FRcWOHTuCg4NNHQhAL8KaaoYY6NwVCAQpKSn07CisPEZOHUOXunHjBsdRJktLy4SEhISEBLVanZGRMX78eO78HD3xHJ3fAH0Ls4PZ5HoymA5MewsAAAAA0K0wjSQAAAC8KHbv3k1N8Dhx4sQ33njjo48+MnVEANAOW7du5fF4QqEwNTU1NzfX1OEAdCMHBwdjsvVMh1NjY6Mx2Xqy98v4tlij2AEAAAAAuglGtgEAAMCLIiQkJCQkxNRRAEAHRUdHd9PkLQC9TWVlJXO3qakpNDT05MmTAwYMkEqlMTExd+7coY/m5uauXLmyqqoqLS1NIpFQiRs2bMjOzi4rK5s5c2ZERMScOXPIr4PPDh48GBsby8zf2Ni4adOmM2fOjBgx4sSJE2PHjiWEaLVahULh4+Pz/fff29nZLV26dPfu3ZaWltyRP3r0KCAgQC6XSySS+Ph4gUBAt3vx4kUfH5/MzExfX19nZ+fHjx9TRaiFHvWOc9VFFSe/7W8zdF5isbi+vp6eaRaD4QAAoB87efLkoEGDTB0F9Gq//PJLa2urqaPoz9DZBgAAAMDFxcXl0aNHeg8NHz784cOHPRwPAAC8aCIiIlQqVVFRkVAozMjIUCqVzKNZWVlyuTw7OzswMJCeIlUqlcbHx6vV6qtXry5evLiuro4QQi1hWFFRUVJScuXKFTp/aGioWCyurKxsaWlJTEwkv/ZLBQcHx8XFzZw5s7m5OScnJzg4+LPPPuMONTk5+cyZM5aWltu3bw8JCaHyX79+/U9/+pOPjw8hxNvbe+rUqczlEtvVB+bj40MvxMisQe95KZVKTDgJAAAvAq1WS00CYepAoFdrbW1Vq9WmjqI/Q2cbAAAAABd0pwEAQM9wcnKqqKigtqnnZY6OjuXl5SdOnCguLhaLxYSQpUuXLl26lFlKKpWamZlJJBL66UlpaemWLVsKCgqam5snT55cX1/Pyk8IYeZPS0u7ffv2oEGDBg0a9O67727evJlKT09PpxdoJITY2tq22dm2evVqJycnQsj27dvHjh1L5Xd3d3dwcDh37pyfn9/Zs2dfffXVCRMm0EUKCwvbeZ300z0vAACAFwSPx7t37x41oBzAkKqqqlGjRpk6iv4MnW1gFN2XBwEAAAAAAKALlZeXUxus8VgtLS0cpczM2Pf1AQEBy5YtS0pKEovFz549a3MFOOa9HrPdKVOmZGdnGxk8S2tr64AB/14kPiYmxt/f39fX9+OPPz579mzH6uwklUrF5/NN0jRAb9Da2koNXQXoVZycnKj5gQEA+jp0toFRFApFQ0ODjY0N1pcGAOiAhoYGlUr1xhtvmDoQgP7j2bNnM2fONHUUAAA9wd/fPy4uLiYmRqFQXLt27ezZs19++SVH/vLy8qlTp1pbW5eUlJw8ebLN+gMDA/fv379jx47Gxkbms3hvb+/ExMQFCxY4Ojoye844JCQkrFmzRiAQREdHBwQE0Oljx46dMWPGokWLpk+fPnr0aGaRdq3Z1l7m5uYymWzhwoWXL1+WSqVXr17tjlYA+gSNRvPee+8tWbLEyF9ngB5QUVFhYWGBzrYuUVtbS88mDaDXzz//bOoQ+jl0toFRmpqaWlpaMLgNAKBjBg4cSAhZvny5qQMB6D9ycnIsLCxMHQUAQLews7Nj7sbFxQUHB1OJPj4+e/bsodKpGzRqGBxz+/Dhw6tXr66qqpo9e/a+ffukUqluHub2rl27Nm3aZGNjM3z48GPHjm3dupWqf+PGjbt37/bw8KipqZk+ffqcOXPCwsIMxUxVGBQU5OfnV1pa6u/vf+DAAWaG8PDw8ePHl5aWsgpqNBrjH/3T96TUBjUOz9B5EULS0tICAwP5fL6XlxdzoTiAF9aJEyfMzc1NHQXAv1y4cCE+Pt7UUfQTzs7Opg4B+gChUGjqEPozdLaBUZydnZubmwcNGmTqQAAA+qSXXnqJz+eHhoaaOhCA/qOxsRFvbgJAf/X06VPmrkAgOHTo0KFDh1jZmFM+MrclEolEItE9ZCi/paVlQkJCQkKCWq3OyMgYP348lT5w4MDw8PDw8HBjYqYrNDRG7eLFi++///7LL7/MSr9586Yx9euGrTeRlUEikeDLAgAA+r3W1lZThwAA6GwD4wwYMAAvjwMAAAAAczRJr8Ja44p1iHQoZmMKcrTbJfkBesbWrVtjYmL4fL6Pj09ubm6X10+PSNu/f3+XVw4AAAAAYHKYphkAAAAAAIiDg4Mx2Xqmo6ixsbG9RTgC63DMxhRsb+XG58diydCToqOjtVptc3OzTCazt7fv8vq1v+rymgEAAAAAegN0tgEAAAAAAKmsrGTuNjU1bdq0yd7e3sHBITk5ecyYMcyjubm5zs7OfD5fJpPRiRs2bHB1dRUIBPPmzcvLy6MSeTwej8eLj49n5W9sbFy7dq1IJJo8ebJcLqeyEUIUCsW0adMEAoG9vf369euN6XXLzMyki9MaGhqCgoKEQuGkSZOKiopYRdzc3Nzc3Iy8Mo8ePXJ3dxeJRKtWrWpoaOBu19B5Gcpv6PqIxeL6+nrer4wMFaAH2Nvb83R0R/8cAEAHdOZLs/994fa/MwIA6M3Q2QYAANC7cNwRdfiRqzEF21sz7twA+reIiAiVSlVUVHT//n2BQKBUKplHs7Ky5HJ5WlpaYGAgnSiVSuVyeW1tbVhY2OLFi6lEaiBLRUVFSUkJM39oaKhYLK6srMzPz7906RKdMzg4OC4uTqVS3bt3z9PTMzg4uM1QfXx8dIfLhIaGOjg4KJXKnJyc9PR01tF2jbBJTk4+c+bMvXv3hEJhSEhIm+3qPS9D+Q1dH+qCYzAQ9EJPnz7V6mAtMgcA0K3wJgoAAPRCWDAAAACg2z179szFxYU5HoIQ4uDg8OTJk/ZW1eHFfky4SpCVlVVdXZ1JmoZ+bNu2bSqVSiqVmjoQgw4cOFBcXHzkyBFTB6JHY2OjQCCgPhOcnJwqKiqYRx0dHcvLyx0cHIqLi8VisW5xHo+nVqvNzMwI47OltLR0y5YtBQUFzc3NkydPzs/Ppz9zmJ8/9Ladnd3t27ep+hUKhZ2dHZU+dOhQZseera1tVVWVMSfF+pQTi8V3796l6q+urraxsenwh2dZWZmTkxMhRKlUjh07lhUPq11D52UoPzFwffTmhJ7UY7/C69ev//LLLwUCQXc3BACG1NTUfP311/Pnz+/JRgcPHiyXy4cNG9ZjLarVaj6fr1KpzM3Ne6zR7tPeb0lHR0fWHzx9Xf84owsXLsTHx+fk5Jg6EADoe3g8XkZGhq+vr6kD+TczUwcAAADwgmLN2EYIyczMpP5KYN43NjQ0fPDBB2fOnBk9evSxY8dYRahp0G7cuGFMi48ePQoICJDL5RKJJD4+nn6up7fdxsbGTZs2nTlzZsSIESdOnBg7diydQW9+6t3SgwcPxsbGVlVVpaWlSSQSwpgJjcqGB8cAvU15eTm1wXpo1dLSwlGK6mljCggIWLZsWVJSklgsfvbsWZsrwDFfSGe2O2XKlOzsbCODN5JKpeqSelpbWwcMaGNqEEPn1UkqlYrP53dVbdCrODg4vPHGGxs3bjR1IAAvrj/+8Y/W1tamjgK6Vwdec+zl+t8ZAQD0dehsAwAA6C2oGcZYM6LQM6H98ssvCQkJrCLtepJLzYRmaWm5ffv2kJCQzz77jLtdaia0lpaWxMREojMTGis/lULNhHblypXAwEDq6bZSqcTgDIC+yN/fPy4uLiYmRqFQXLt27ezZs19++SVH/vLy8qlTp1pbW5eUlJw8ebLN+gMDA/fv379jx47GxkbqQ4bi7e2dmJi4YMECR0fHNnu2OCxbtmzv3r3bt29XKBS7d+9mHW3XmwoJCQlr1qwRCATR0dEBAQHcmQ2dVweYm5vLZLKFCxdevnxZKpVevXq1M7VBr2VjYzNixIilS5eaOhCAF1dYWJhQKDR1FP2EXC6PiIjIzc1tamqaOnXq9u3b33///Tt37lBHb926FR4eXlhYSAiZPn26VCp1dXWlDlE3F3V1dcuXL8/MzCSE0G/vUc6fPx8WFlZWVvb2229//vnnuk2XlpZSS8yybj1effXVe/fuEc4XYgyV7WTM3Hbv3n369Gm5XD548GB/f//IyMihQ4cacyV77RkBALzodCdbBwAAgK6lUCgsLS2pbUdHR9Z3saOjIzMz69tZJBJVV1dT28+ePevwdzchpKysjNqurq62tbXVzcDctbW1pdul5kzjzs9KMbQN0FWioqLCwsJMHQWXTz/9dO3ataaOQj9qVltWIjXhIa2+vv7999+3tbW1tbX9r//6r4qKCiqdeR/B3D537pyLi4uFhYW3t/etW7f05mFuNzQ0rFmzRiQSvfnmmz/++CMdT0tLS0xMzCuvvDJ48OD58+dLpdI2T0fvDU59ff3KlSsFAsGECRN++OEH1r3P5MmTp06damTNDx48mDZt2pAhQ9asWdPQ0MDdrqHzMpTf0PWhLqm5ublAIPDz87tz506b0ULX6rFf4c8//3zFihU90BAAGDJy5Miffvqphxu1trZ+8uRJT7ZIvQmnUqm6r4mSkpJXXnnlyJEj5eXlKpXq8ePH//M//zN06FD66LRp0+7fv0/tPnjwwN3d/fbt23RxQsgf/vCHq1evtra2Ul+C9KFvv/32jTfe+PHHHxsbGy9fvvzee+8ZusVobzp3ns7E3KZLly5RG9XV1ZGRkR4eHsx2Oa5krz2jDjh//vzcuXO7tQkA6K8IIRkZGaaO4jfwpjm0oby83NzcfOjQoQMHDjR1LAAAfZXeNdsMjffiWHboyZMnVM9cB2JgLjv07Nmz119/nTWPJatde3v7W7duUe1WVVXZ29uz2u3YskOYCQ26CtaPbjBBAAAgAElEQVRs6wzmmm0mp1arMzIyIiMji4uLTR1LV+qv5/Xi6LFf4cOHD8fHxy9cuLC7GwIAQw4fPpyfn//666/3ZKP9cs22t99+e8mSJStXrtR7dPHixe+//763tzedkpWVdfjw4a+//pra5fF4p06dokf6Mm8ivLy8QkJCPD09qd0LFy68/fbbxtxMtZnOnaczMbeLRqMxNzdvbW2ldrmvpPFtmfCMjIQ12wCgw7BmG/QxGo2msbGREGJjY2PqWAAAXlCYCQ0A+qutW7fGxMTw+XwfH5/c3FxTh9Nl+ut5QTeZPn16bW2tqaMAeKGFhYX1ZKdXP5aXl8dx45CXl5ecnMxMcXNzCwwMZKYYmlP3+vXrU6ZMoXdnzZrVqUCN1pmYuTU3N+/duzc1NfXRo0eWlpYTJ05k9mlxX8nO6L4zAgAAdLYBl+bmZkIIn8/vzIIZAACgl52dHSuFnnOf2qBut/bs2fPHP/5RJBKNGjXq2LFjBw4cYL5dqNFojPmIpioMCgry8/MrLS319/c/cOAAd7u7du3atGmTjY3N8OHDjx07tnXrVu781DYVG3ObEJKWlhYYGMjn8728vJKSktp3mQCg/4qOjo6OjjZ1FF2vv54XdJOJEydOnDjR1FEAAHQBjUbDWteZRXeMVC8ZZ8+hm2LevHmzra3ttWvXhgwZolarHz58OG7cOPpom1eyM/riTwEAoE9ADwpwaWpqIoQMGjTI1IEAAPRDT58+ZaWw5nqmEgUCQUpKSn19/Q8//DBhwgTmIULIzZs3qaWtuVGlXnnllRs3btTU1CQkJFhaWnK3a2lpmZCQoFQqCwsL7969O378eO78zF3WIYlEolKp6uvrz549O3r06PZeKAAAe3t7ng57e3tTxwUAAAD/NmPGjAsXLhg6OmfOnO+++46Zcv36dXpmSG7u7u7ff/89vXvt2rUOB0mhXi5vU2di5nby5MktW7bY2NiYmZlZWFgMHTqUeZT7Supl8jMCAAB0tgEX6qsanW0AAC+mrVu38ng8oVCYmpqKmdAAwISePn2qu/q07isLAAAAYEIxMTEfffTR5cuXtVrt8+fP5XJ5YmLiqlWrqKOxsbGRkZEFBQUtLS0tLS0FBQVRUVGxsbHG1BwREbFly5affvrp+fPnV65cycrKam9s1Mz2hJAnT57Ex8fPnDnTmFKdiZnb6NGjjxw50tDQoFQqU1JSli9fzjzKfSV75xkBAAA624AL1dn20ksvmToQAAAwgejoaK1W29zcLJPJMIIEAAAAAAA4uLm5yWSy2NhYkUjk6Oi4YsWKpqamv/zlL9TRcePGHT9+fNeuXSKRSCQSxcbGnjhxwtXVlTpKT0Svd3f27Nnbt2/39/e3tbX94osvqKWsmRMt0gPfWds0amb7AQMGTJ8+/e7duxkZGcaU7UzM3I4dO5aVlWVnZzdhwoTi4uIzZ84wy3Jfyd55RgAAgDXbwCCNRqNWqwlGtgEAAAAAAAAAQFvc3NxycnIMHR03bpyh2RFZy4bpriLm5+fn5+dnfH4WamZ7Y5pm6UzMHFxdXfPy8jiKc19J0vvOCAAAMLINDKKGtZmbmw8YgP8nAAAAAAAAAAAAAAAAeqATBQzCHJIAAAAAAAAAAAAAAADc0NkGBjU1NRHMIQkAAAAAXUR3ARXT1tPlekNgJg8AAAAAAADgBYTONjAII9sAAAB6LY1GY+oQoL9xcHDo7ia6auUP3XoaGxu7pOZOavMEeyBO4y+ylZVVt0YCAADwwnJxceEZ4OLiYuroAACgW6CzDfRrbW1Vq9UEI9sAAEytN4yT6HL98qQo3XFqkZGR9LZWq338+HFJScnEiROZea5evbp8+XKJRMLj8fh8vkwm405nVQtACKmsrGTu0o+EWNtqtTosLMzV1XXMmDEhISEqlYqZv7a2dvXq1VZWVsHBwVR6Q0NDUFCQUCicNGlSUVERXX9X1aNQKKZNmyYQCOzt7devX0/3ZhmqxxAqf3x8vLOzM/OXhflLzbog+/fvt7KyKigoSEpKsrKyoos8evTI3d1dJBKtWrWqoaGhM3G6ubm5ublxR07LzMzU/QgydF5isbi+vp75kwUAAICu8vDhQ60BDx8+NHV0AADQLdDZBvpRw9rMzc0HDMB/EgCAbmHkIJKuGgjCrYcHhfSGwR/dpMt/XqWlpTU1NfTuTz/9dPPmzXHjxjE7Gwgh69ati4+Pl8lkWq3222+/XbFiBXc6IaSmpub+/ftdGy30J1qt1s7Orq6ujtq2tram+o0iIyOdnJzkcvmdO3ecnJzoXlvqP7+fn5+Hh0d5efmCBQuo9NDQUAcHB6VSmZOTk56eTtffVfUEBwfHxcWpVKp79+55enrSnVWG6uE4X0JIRUVFSUlJWlpaYGAgM521TW1oNJqjR4/6+voWFRUdPXqULpKcnHzmzJl79+4JhcKQkJDOxEk9leOOnObj46Ob2dB5KZVKuv6e+aIBAAAAAADox3i4swK9amtrFQqFUCjsgQmFAAD6vWfPnrm4uNDjGyg83m++hZuamkJDQ0+ePDlgwACpVBoTE3Pnzh0655UrV1auXFlVVZWWliaRSKj0DRs2ZGdnl5WVzZw5MyIiYs6cOeTX1XoOHjwYGxvLzN/Y2Lhp06YzZ86MGDHixIkTY8eOJYRotVqFQuHj4/P999/b2dktXbp09+7dlpaWHOdiqH4qnTojepva2LdvX1RU1DfffHPr1q3NmzenpqZSA60ePnwYEBAgl8slEkl8fLxAICCEGIqHqqqmpubDDz88derUH/7whz179tBRUSM/bty4wf2DoEdvMOOkdzmup267XfvzMnRehJCQkJD/9//+39tvv617Lsz/PyNGjHjw4IHuUUPphJBz58797//+b2xsLPdF67W2bdumUqmkUqmpAzHowIEDxcXFR44cMXUgejQ2NgoEAuo/g5OTU0VFBfOoo6NjeXk5IWTu3Lnh4eFz5879+9///vbbbz969IgQMmzYsNu3bw8ZMoQQUlNTM378+CdPnlAFeTxeXV2dUChk1iYWi+/evSsWiwkh1dXVNjY2VLtdVc/QoUOpfiOKra1tVVUVRz0cmL8gbW4b2uDxeGVlZU5OToQQpVI5duxYKp4ujNP4szD+vEBXb/4VBoB+YPDgwXK5fNiwYT3WYnNz80svvfTuu+/ipWroPcrKympra//v//7P1IEAQN/D4/EyMjJ8fX1NHci/4fsV9KNGtvH5fFMHAgDwooiIiFCpVEVFRffv3xcIBMxnsoSQrKwsuVzOHJRACJFKpXK5vLa2NiwsbPHixVSioUEMoaGhYrG4srIyPz//0qVLdE5Dgy0M6dODP7Rarbu7e0FBAbVbUFAwY8YMuiDH9dRtt2t/XhyDb7Kzs8eNG9fmqT1+/Lhd6YSQsWPHZmdnt1kz9Hvl5eX0bxC1QfW0EUImTJiQkZFBCDl37pyrqytdhOPXjbvHiJ4rsgvrmTJlCnNqJroHy5h62qu1tbW9+ekHmj0ZZwewfjQAAND/0K+GAPQqLS0tpv7lAADoIoZmEIYX3MOHD+/cuVNXV2fqQAAA+gOFQmFpaUltOzo6sr6LHR0dtVrtsGHDqqur9RYnhKjVanqb2rhz587ChQvFYrFAIPDw8CC/nQ1Md9vW1paun3rIS21Tw0Rotra2bZ5Om20xtw1tEELKysqolOrqarpdjngIIZ3/Yvrmm2/mzp1Lbc+dOzc7O5va5r6euu127c+L47ysra31HmX9FWdolyPbzz//PHjwYEPt9n5RUVFhYWGmjoLLp59+unbtWlNHoR810JaVqJvyxRdfjB49mhAybty4P/7xj1RicHBwbGxsa2tra2urVCoNDg7mqEGr1b7//vtU53R5efmmTZvoPF1Vz759+xISEh4/fqzRaNo8I26GPtDMzc3PnTtXUVGxYcMGYz7ctm3b9vjxY6VSuXnz5g0bNnQmzmnTpk2bNq3DZ2HMealUqszMTA8Pj3a18iLozb/CANAPWFtbP3nypCdbpN6rUKlUPdkoALfz58/Td2cAAO1CCMnIyDB1FL+BkW2gh/bXP8IGDRpk6lgAAPobQ4NIuF/oMzMzY6UEBATMmjXr1q1btbW1p06darNd3q9TJpLfjibhHmzRMb158Mf8+fOfP3+en5+fn5/f1NQ0b948Kp37euq227U/L47zYv6w2kWj0bSZ3uHKoV+ys7NjpUyYMKG0tHTChAm3bt0aM2YMlbhz506FQvHyyy+//PLL1dXVO3fupNKpDxn6JWW6kj179pSVlYlEIm9v71WrVtE5u6qejRs3KhQKDw8PsVjs5eW1a9cu7noMofOz/iWEpKWlLVu2bNGiRWvWrKHrZGZgbQQFBfn5+Y0cObK+vp6Op2NxUj1zbQZPV8WszZjzCgwMFIlEiYmJSUlJRrYCAAAAAAAAuthPggDIry86DRgwwNzc3NSxAAC8KPz9/ePi4mJiYhQKxbVr186ePfvll19y5C8vL586daq1tXVJScnJkyfbrD8wMHD//v07duxobGxMTEyk0729vRMTExcsWODo6NjJ9RvMzc1lMpm7u7uRy2glJCSsWbNGIBBER0cHBAR0Jh4j12yj7NixIyoqitqgE9t7Pbv750VzcXGpqKig+zkMsbCwKCgomDlzJiGksLDQ2tq6tbV14MCBhtIJIWVlZSNHjjQ+Euj3nj59ykqhOr9ZiXw+f8+ePazFBYnhvluBQJCSkpKSksLK1lX1DBw4MDw8PDw83Mh6DGHmZ5WVSCTUFOt6q6VTmId0P446FufNmzfbDp2zKu7zwuyRAAAAAAAAXQIj20APDGsDAOgBrEEkcXFxtbW1dnZ2r7322vnz5+kH0IYGJRw+fHj16tVisTgsLGzlypUcOal/d+3aVVlZaWNjM2vWrEWLFtHtGhpsYUg/GPzh6enZ2tqq1Wp/97vf0YltXk9Wu13+8zI0+Gb+/Pm3b99mpugdvPLVV1/Nnj2bx+PZ2tq+88476enp1BszhtIJIbdv3/by8jLyogEAAAAAAAAAgCE8TB8Eup49e1ZTUzNkyBBbW1tTxwIA0B88e/bMxcWFWiTJ5NRqdUZGRmRkZHFxsaljgbbduXPnwIEDn332WZfX/MEHH3z44Yd9d3Dbtm3bVCqVkcMoTeLAgQPFxcVHjhwxdSB6NDY2CgQC3AgAcOjNv8IA0A8MHjxYLpcPGzasx1pUq9V8Pl+lUhkziRGPZ/CBIfWyVwf+ijCmIEe7XZIfepsLFy7Ex8fn5OSYOhAA6Ht4PF5GRoavr6+pA/k3jGwDPQYOHDho0CCMbAMA6Ge2bt3K4/GEQmFqampubq6pwwGjjBkzZsiQId1Rs1gs7rs9bQAdY29vz9Nhb29v6rgAAABMw8HBQW86Rw9Whzu3jCnYmVmguVlZWbWrZgAAgPZCZxvoIRKJhg8fbm1tbepAAACgK0VHR2u12ubmZplMhofLfUh0dHR3VPvJJ590R7UAvdnTp0+1OnQXqwMAAHhBVFZWslIyMzN1pzdvaGgICgoSCoWTJk0qKipiFXFzc6NWUDbGo0eP3N3dRSLRqlWrmDN/6G23sbFx7dq1IpFo8uTJcrmcmUFvfiolPj7e2dmZz+fLZDIqXSwW19fXc8zcDgAA0HnobAMAAAA2DP4AAAAAAHgB+fj46A4XCw0NdXBwUCqVOTk56enprKPUyytG1p+cnHzmzJl79+4JhcKQkJA22xWLxZWVlfn5+ZcuXSKMoWx681MpFRUVJSUlaWlpgYGBVLpSqaTjxLSTAADQTdDZBgAAAGwY/AEAAAAA0F85OTnRY7yoDScnJ478x48fDw4O5vP5NjY269atYx0tLCwsLCw0sunVq1c7OzuLxeLt27efPn2aO3NaWlpoaOigQYMEAsG7775rZBNSqdTa2loikajVaiOLAAAAdJ6ZqQMAAAAAAAAAAACAHlJeXk5t8Hi89o70UqlUXRJDa2vrgAFtjAFgTvnYhSPSVCoVn8/vqtoAAAAoGNkGAAAAAADt1q4lT/ruEindEXlkZCS9feLEiYEDB/J4PObSMsymeTzekCFDSkpKqMSrV68uX75cIpHoFmFWCwAA0IWWLVu2d+9etVpdUVERGxvLOtquNdsSEhLKyspqamqio6MDAgK4MwcGBu7fv7+1tbW+vj4xMbEjof/K3NxcJpOp1eqsrKy5c+d2pioAAAC90NkGAAAAAADEwcGBlWJlZcWRX/cFc478ht5Gb2xsNC46k+nylV1KS0tramro3Q8++CAjI0Or1TKXlmG2rtVqa2trx48fT6WsW7cuPj5eJpNptdpvv/12xYoVdOaampr79+93bbQAANC/2dnZsVJY00tSiXv27CkrKxOJRN7e3qtWrSK/fedGo9EY83VJFQkKCvLz8xs5cmR9ff2uXbu42921a1dlZaWNjc2sWbMWLVrUZpx0CutfQgj1PSsSiRITE5OSkoy7PAAAAO2AzjYAAAAAACCVlZXMXbFYXF9fTw+uYh7KzMzUTeTIr5dCoZg2bZpAILC3t1+/fj2r183Id+RZzbF2N2zY4OrqKhAI5s2bl5eXx8xTW1u7evVqKyur4OBgKr2pqWnTpk329vYODg7JycljxoxhNpSbm+vs7MwaSdau+mkJCQnz58+nd5VKpbe3NyHE19d30qRJbZ5yc3OzSCSitmfOnNnQ0EAf8vT0PHz4cJs1AAAA0HRXZWYt20wlCgSClJSU+vr6H374YcKECcxDhJCbN28as2YbVeqVV165ceNGTU1NQkKCpaUld7uWlpYJCQlKpbKwsPDu3bv0qyeG8jN3WYckEolKpaqvrz979uzo0aPbe6EAAADahM42AACAvgEztnUYZmwD6AClUkl0HlRRfHx8dF9g58ivV3BwcFxcnEqlunfvnqenJ6tTyshKtFqtu7t7QUEBtVtQUDBjxgy6oFQqlcvltbW1YWFhixcvposQQvz8/Dw8PMrLyxcsWEClR0REqFSqoqKi+/fvCwQC6nRoWVlZcrmcNfisXfXTsrOzx40bp3suV65cuXjxIjPFwsKC+lBifvg8fvzY0NUYO3Zsdna24asFAADQ92zdupXH4wmFwtTU1NzcXFOHAwAAYJCZqQOA3kWj0fB4vDaXqAUAgM5zcHB48uQJM8XKyqqurs5Qfr0zthnKr9Vq9XZZNTY2Ml8g7YUMRd5hemds8/b2lslkgYGBrAXedS/yunXrrl+/To0jKSgomD9/fn19PXWImrFt5MiRXRgtQM9zcnKqqKigtqnfPkdHx/Ly8u5uNz09PSUlhd61tbX97LPP6F1jXpCn7NixIyoqKicnhxASFRW1Y8cOKr20tHTLli0FBQXNzc2TJ0+mf3MpFy5cEAqFhBBPT08q5cSJE8XFxWKxmBCydOnSpUuXMvNLpVIzMzOJRKJWqztWP+3BgweOjo6sxMuXL0+aNMnGxoaZSI/2e/To0auvvkp9Xmk0GkOXwtnZ+cGDB4aOAgAA9EXR0dHR0dGmjgIAAKBt6FOB36ipqbl37151dbWpAwEA6P8wYxtmbAPoDcrLy1kTLuntaWP1TLepzfxTpkxhzv5UVVXVrvpp8+fPf/78eX5+fn5+flNT07x586j0gICAWbNm3bp1q7a29tSpU6xSVE8YU0tLC0crZmbslxTbWz9Nt1M/NTXVxcVl2LBhhooMHz6c7uTTxex+6/IV5gAAAAAAAMAY6GyD36Du1XWfJgAAQHfDjG3MhjBjG0BvYG5uLpPJ1Gp1VlbW3Llzuza/t7d3YmJiWVlZa2ur7lEj3wCgUIPbmMPaCCHl5eVTp061trYuKSk5ePBgm5X4+/vHxcURQhQKhUwmW758OXf+9tZPc3FxoYcSEkJOnz79xhtvUIvHMN+c8PDwiIqKunfvHiFEJpOZm5tT6RYWFvSHcGFhobW1NX0By8rKMNYWAAAAAADAJNDZBr9hb28/atQoa2trUwcCANBvOTk50aPBqA0nJ6ceaDc9PX327Nl8Pt/KysrPz+/06dPMo4WFhUZO2kY91Ka2WTO2/f73vx86dKhIJNqxY4fujGpBQUHW1tbMGduio6NtbW0tLCyWLl367NkzZn6pVCoQCFgztrWrflq7ZmyjOh3v3r1Ld/JhxjZ4cdjZ2bFSqA5vkUiUmJiYlJREp7M+xDqWf+PGjQqFwsPDQywWe3l57dq1i9m0RqMxfpCWp6dna2urVqv93e9+RycePnx49erVYrE4LCxs5cqV5NeuLGYkzODj4uJqa2vt7Oxee+218+fP79mzhw5e77/trZ82f/7827dv07tBQUGTJ0/WzSyTyR4+fDhlyhQejxcYGJiWlkalf/XVV7Nnz+bxeLa2tu+88056ejrdD3f79m0vLy8jLxoAAAAAAAB0IQxgAjYs2AYA0K3o+dl4PB7Ho2SVSsXn842vts38U6ZM6ZJhWPPnz//444/z8/MJIawZ25YtW5aUlCQWi589e+bg4MAs1SUztrWrfpreGdtmzJjRmRnbBg4caKhygL7r6dOnrBSJRKJ3NkhD//PblX/gwIHh4eHh4eF6q7p582Yb4f7WX//6V91gJBKJbgyGghcIBIcOHTp06BArnZmfud3e+mnvvffegQMH6OG5zMlpmWxsbJhr2jHbNTRF55UrVz788EPu1gEAAAAAAKA7oFsFAACgt8CMbRwwYxsA9A9jxowZMmRId9QsFovxoQQAAAAAAGAS6GwDAAAwDczYhhnbAODFFB0d3R3VfvLJJ91RLQAAQGfo/Std79/t3JV0XUTtq9/QXYYxdbZZsLddBwAA6AxMIwkAAGAamLENM7YBAAAAAJiQg4PDkydPurUJrVar20Wk+ze8lZVVXV0dRyVdH5lx9euN38g62yzY3vMyPj/39QQAgO6AkW0AAADQn2HGNgAAAAAAvSorK5m7TU1NmzZtsre3d3BwSE5OHjNmDJWuVqvDwsJcXV3HjBkTEhJCv4tGDd6Kj493dnbm8/kymYxKb2hoCAoKEgqFkyZNKioqYjaRmZmpO+RLLBbX19frnaxCb/72xsNBb/0c8ZN2zsD/6NEjd3d3kUi0atUq5mt/etttbGxcu3atSCSaPHmyXC5nZtCb39D5clxPAADoPuhsAwAAgH4OM7YBAAAAALQpIiJCpVIVFRXdv39fIBAolUoqPTIy0snJSS6X37lzx8nJKTIykkqnBlpVVFSUlJRQU9xT6aGhoQ4ODkqlMicnJz09ndmEj4+P7vAsqiHtr9rM3954OOitnyN+Os42a6YkJyefOXPm3r17QqEwJCSkzXbFYnFlZWV+fv6lS5cIYyib3vyGzpfjegIAQPfh4TMXAACguz179szFxcXQBIYA0AHbtm1TqVRSqdTUgRh04MCB4uLiI0eOmDoQPRobGwUCAW4EADj05l9hAOgHBg8eLJfLhw0b1mMtqtVqPp+vUqnMzc2dnJwqKiqYRx0dHcvLyx0cHIqLi8ViMavssGHDbt++TU0XUVNTM378eHrySR7v348W6W2xWHz37l2qnurqahsbG9ZfHcxShlI4jrY3njaxcrYZv5F4PF5ZWZmTkxMhRKlUjh07tqqqiqNdOzu727dvU+0qFAo7O7t2XbeOnbtpXbhwIT4+Picnx9SBAEDfw+PxMjIyfH19TR3Iv2HNNgAAAAAAAAAAgBdFeXk5tcHqkmlpaTFUpMM9N4bWP+YuwufzufP0WE9SB+LXq7W1dcCANiYYY0752IUnaMz1BACAzsM0kvAvdXV1ZWVltbW1pg4EAAAAAAAAAAB6mr+/f1xcHCFEoVDIZLLly5dT6StXrkxISKDmJDx8+PCKFSu461m2bNnevXvVanVFRUVsbKwxTZubm8tkMrVanZWVNXfuXO7M7Y2nvbjjb9eabQkJCWVlZTU1NdHR0QEBAdyZAwMD9+/f39raWl9fn5iY2JHQf9Wu6wkAAF0CnW3wL01NTc+fP+d4iQkAAAAAXkDMl6z7or4ePwuPx+vyM6KXuiGElJSUvPvuuxYWFnw+XyaT0emXL1/m8/lU63w+//Lly1T61atXly9fLpFIqHS6iKF0VnMAAGBadnZ2zN24uLja2lo7O7vXXnvt/Pnze/bsodJ37typUChefvnll19+ubq6eufOnVQ69ZWk+++ePXvKyspEIpG3t/eqVasI4+uY/iJjfaNRS46JRKLExMSkpCQ6XW/+9sbDQW/9HPETQjQajTHDzqgiQUFBfn5+I0eOrK+v37VrF3e7u3btqqystLGxmTVr1qJFi9qMk+N8DV1PAADoPphGEv6FGhePceUAAAAALyYHBwd6vROmzs9iZGVlVVdX18lKOlx/n1iwxHharbZrO9tKS0tramro3Y0bN3700Uepqanp6emBgYH03FkrV658+PChg4MDIeTJkydTpkyhFvtZt27d9evXRSIRIaSgoGD+/Pn19fUc6YSQmpqa+/fvjxw5sgvPAgAAOubp06fMXYFAcOjQoUOHDrGy8fn8PXv20H1vNOaXLHNbIBCkpKSkpKRwZ2OSSCR6J2zUm7+98XDQm40jfkLIzZs321XzjRs3jGzX0tIyISEhISFBrVZnZGSMHz+eOz/H+Rq6ngAA0H0wsg3+pbm5maCzDQAAAOBFVVlZyUrJzMzUHUdFpcTHxzs7OzNHLMlkMmrkk7W19axZs8aMGUOli8Xi+vp63q9Y9dTW1q5evdrKyio4OJiZrrvd1NS0adMme3t7BweH5OTkNus3FL9arQ4LC3N1dR0zZkxISAj9HMrQeVGMnDCKFQZrd8OGDa6urgKBYN68eXl5edzXwdD5UnJzc3XjbFf9tISEhPnz59O7ly9ffuuttwYMGGBmZvb666/T6RqNhu6Ta2xs1Gg01HZzczPVo0YImTlzZkNDA3c6IcTT0/Pw4cNtXkwAAIAX0NatW3k8nlAoTE1Nzc3NNXU4AADQDhjZBpM229IAACAASURBVIQQotFoqBtmdLYBAPQG1JPZHh6Nwfvt6ugmr6eX6I6fRWRkJD3XTUlJyc6dO2UymUajSUtLk0gkVPrly5d9fHzUajUhxNzcPDMzk1pr4erVq0eOHGloaPj666/Nzc3pIobSWc0BtIuPj4/uOCoqpaKioqSk5MqVK/Tgp5UrVy5cuPDUqVMqlSo7O3vdunVUfqVSqfdjgarHz89v5cqV+/fvLywsZKbrbkdERKhUqqKiIqFQmJGRoVQques3FH9kZKSzs7NcLieEHDhwIDIycvfu3RznRUdizBXTarUzZszYt28ftVtQUPDhhx8WFBRQu1KpND4+Xq1WX716dfHixdRoPEPXwdD5UrKysuRyeXZ2NjPOdtVPy87OXrNmDSvRxsZmwoQJWVlZdEpCQsKKFStGjhxpZ2f3ww8/fP7551T648eP9V4KQ+mEkLFjx37yySdGLuHT7+Xl5elefwCTCw0NpT/GAaAnRUdHR0dHmzoKAADoCHS2ASG/ziFpbm4+YAAGOwIA9BBDM7YRfbOENTY2Wlpadms8xvcnYca2zsCMbdDbODk5Uf+7yK+9y46OjuXl5dylpFIpIUQikVBdwoSQ48ePL1myxNzc3MbGxtbW9uLFi8a0fuHCBaFQSAjx9PTkznnixIni4mKxWEwIWbp06dKlS42pX1dKSsrt27ep7ZUrV44fP57qbKPonhdFt4/KkB07dkRFReXk5BBCoqKiduzYQaWXlpZu2bKloKCgubl58uTJ9G8oRfc6cJ+vVCo1MzNjxtne+mkPHjxwdHTUTfzkk08OHjxIP++7du1aUlLSxIkTCSHffffd/2fv3uOauNLGgZ+gpIVcNCkJl0ipdg1qu60X6GsVVi2I4u0VquB2BV1R2yq6VQkga+1Ni1SsF7b9LAVfrWvbxVpSBWVF1FYt7mIv2ioYFK1KAIlALCGaBDK/P86vZ6eTzJBwC8Lz/cPPzDMz5zwzycSQM+ecL7/8Erfoky5uDGxxhNCQIUNu3LjBtrW/MRqNcrn8k08+cXUiAPzXm2++qdfrXZ0FAF3G29u7vr6eEZTL5YwhNAEAAIDOogCgKL1eX1lZqdVqXZ0IAAD0TTqdztPTkxFk/C9sMBgWLVokEAhGjx79008/ka319fVBQUEIIblcvnLlypaWFhzPz893d3dHCIlEookTJw4fPhzH79+/v3r1arlc7uPjs2fPHhLH/+83NTUtWbJEKBQmJSWRqslv4oz0EEIlJSUymWzcuHE///wzjpNhwWwPsVuO2WxOSUlRKpXDhw9XqVQmk4le/q5duxQKhbu7e35+Pv2o4ODg4ODgdi8sIw3GamJiolKp9PT0DA8PP3nyJPd1YLtu+JATJ07Y5ulU+YRKpfryyy8Zwba2tsOHD48ZM4ZE5HL55cuX8fK1a9fkcjlefuKJJxhXgDtOUdQXX3yRnJzMdg0fXhs3bkxNTXV1Flx27NixbNkyV2dhHx7TjxFk+9OAe0/bj7Jbt269++67gwcPtrsP+RBwpEbcYIOXvby8Ghoa2s2QXr7dWry9vRsbG/FyY2Ojj4+PI+fllIkTJ54+ffr06dMhISEkOHr06C1btty5c8diseAnLbjrcvB8ybKz5RP4+QnbeEtLi4eHB1n19fW1WCx42WKx+Pr62i0cIdTa2soRpyjq3r17YrGYI6Veomdu4cLCwilTpnR3LQA4JTExMSMjw9VZ9H1isbi2trYna8QPdZnN5p6sFABuhw4dCg8Pd3UWAICHEkKosLDQ1Vn8BnRjAgj92rMNxpAEAAAXSklJ8fX1bWxsPH78eEFBAYmrVKrMzEyz2VxVVRUWFkam28Ejtlkslrq6uqSkJPIAMhl57Pr16wKBgIw8RlEUQig6Ojo0NFSr1U6fPp1UgUdaY+SDIw0NDbdv305JSVmzZg2O4wLJNwn6IXbL2bBhg0Kh0Gg0lZWVCoViw4YN9PLxiG15eXmxsbGM2m2LskVR1Pjx48kQbaWlpc8//zw5MD09XaPR6PX61NTUOXPmcF8HtuuG4RHbGHk6VT5RXFw8cuRIRtDLy2vbtm22I7bNnz9/5cqVixYt6uSIbcXFxWxbAegqMpmsrKzMzc3N399/xIgR9Dm63N3d1Wq1xWIpKirCA6Jyw/vX1ta+9tprJDhv3rzMzEyEkE6nU6vVCxcu7Fj58fHxOTk5+EMmOzs7Li7OkbNzcM42DHduo3drQwhptdqgoCCxWFxeXr5r1652C+E4X7ucLZ8ICAggXRsRQq+88spPP/1EUdSxY8daW1tJXCgU4jmeEUImkwn3k0MIeXh4kA/h8+fPi8Viq9XKEUcIVVdXQ19bAAAAAAAAQF/TY816oDerrq6urKy8d++eqxMBAIC+id6zzXa0Lj8/P4qiJBIJ6cRw9+5d8n80HkOMkMlkOH748GHcs83Ly2vkyJFlZWU47uPjw9EZwm73BbLVNtLU1ERRVHNzs0gk4tiToxxvb29cCNU9nUiOHTtGnoUMDw8vLi7Gy5WVlbNmzZJKpQKBIDQ0lFGX7XXgvm6kPwcpx9nyCbFYbLtVr9evW7cuLS2NRFQq1Q8//ICXz507l5KSwkiAscoWpyjq3r17gwYNYsvn4QU92zrDbs820oGSsPuHA32VvhwcHJydnT1kyBCEEKMbKO6JKxAIoqOjKysrOQon+/P5/HHjxl28eJFsNRgMr776qkwmk8lkixYtqqmp4S6frQqTyZSUlKRQKBQKRVJSEqO7re15YWPHjg0KCnL8Cv/hD3+YNGkS46QCAgI8PDwiIyMrKips62LUyHa+bHk6Wz6xdu3aQ4cOkdWLFy9OnDhxwIABdl9EXAh9E4l7eXn5+fl9/fXX3HGKor744gvymdabQc820G9Bz7aeAT3bAKCgZxsAoBNQ7+vZZn8ucdDf3Lhxo7W11d/f/9FHH3V1LgAA0AfdvXs3ICCA3s8DIcTj/eZ/YalUeu3aNdy0Vltbi1vgEEIREREc3ZJaWloaGxv379//3nvv4ZnAZDKZRqNhNNHZrbHdrTwer6mpafDgwQaD4fHHHyedveh7ms1mRsdoRjk+Pj4VFRV48MmmpqZRo0aRmeroe3Lnxi0kJARPs5SWlnbmzBkcHDNmzIIFC/785z9LpdK7d+/iEc846nLwupFlZ8snxGJxTU0N6RRCGI1GLy8vo9GIV/38/G7dujVw4ECEUGtr6+OPP467njAK5/F4ra2tAwYMYIsjhH755Rd/f/979+5xXMOH0RtvvGE2m/FL3zvt3Lnz8uXLH330kasTscNoNAoEAvhDACCEKisrd+7c+cEHH/RYjStXrly3bl3v79zWM7fwkSNHtm3bdvLkyW6tBdjVme8efduqVav8/f2Tk5NdnUgfN2jQII1G4+Pj02M1WiwWPp9vNpvJwxMAuNzhw4ezsrLwZLcAAOAUHo9XWFg4c+ZMVyfyXzCMJEBWqxUPEQPDSAIAgAstWLBg27ZtFoulpqYmIyODxCMjI3Nzc6urq8kAXBjbiG3OjjzG7ezZs2azuaioaOrUqSQII7Z1oHwCRmwDAPQqSqVy8ODBPVmjVCqFD6WHBY/H4/F4rs7COQ9jzgAAAAAAoA+AxjaALBYLQmjgwIFubvB+AACAniOXy+mrW7dura6ulkgkkZGRS5YsQQjhn4pWr16t0+lCQ0OlUum0adO2bNmC9x86dOiFCxeUSiWPx4uNjc3Ly8PxzMxMvV4vl8ufeuqpQ4cObd26Fcdxabxf0asmEdtNfn5+Tz755Pbt299//30SxFOXSSSS3Nzc3bt3c5ezadMmnU7n7+/v7+/f0NCwadMmRj6Mf7G2tjbHHzYPCwuzWq0URb3wwgskmJ2dnZCQIJVKU1NT4+PjbetinGy7143xr7PlExEREVeuXCGrK1asePXVV93d3ekvIkIoIyNDIpHgQiQSCWl//eSTTyZPnszj8WQy2dy5cwsKCvCzyWxxhNCVK1emTZvm4MUEAPRDmzdv7snq3nnnnZ6sDnTGw9jxy/GcO3Z2tuOBAwA49ObG797QNu/yBAAAAHQhGDYBoObm5rq6Og8PDzzHBgAAgC5ndxjJ3g+GV+oOMGJbV4FhJDsDhpEEoF0wjCTm2i8DJpPpkUcecfaobs25P3w7gmEke0YvGUbS19eXjPHeMSKRqLm5udPZuQb3HW00Gj09PXsyHw4P9XXmAMNIAgA6DIaRBL0RniMXxpAEAABAZ9vbDHQJGLENAABAr6LRaF588UWJROLh4REaGnrixAmlUknf4ebNm5MmTRo4cCCfz1er1fRN7733XnBwsFgs9vf3X7NmTUNDA9mEu4wYDIa5c+fy+XzbY/Pz84cPHy4UChcuXGg0GhldTPLy8hQKxaOPPioUCqdNm/bdd985dVIcOSOErl69ardHi1qt5vP5PB5v0KBB0dHRp06devrpp8nW3/3ud4z+64wSKioq5s6dq1AoFApFdHS0RqOhbyX7FxcXP/vss0ql8siRI2yl4dXhw4c7ddYAdEBdXR0jsmrVqsDAQIFAMHXq1FOnTuHggwcP/vKXv3h7e/v6+u7du5d8SkilUoPBYPeOOHr0qG3QYrGkpqYGBgYqlcrk5GT8exT69T2flZU1ZMgQu7ctA9v+9BoZo25s375dJBKVlpbu3r1bJBKRQ27dujV+/HiJRLJkyRLycKROpwsODhYIBN7e3omJiWRaZVyUXq9PSEgQiUQqlYqelVMj4du9PmznxXGdAQAA9B7Q2Ab+/zCSMEEuAAAAOupXrk6kD4IR2wAAAPQSFRUV06dPnz59+uXLl3/55ZfPPvvs6tWrjY2N9H1efvnl999/32Kx4HGk6ZueffbZ8+fP//LLLxcvXhQKhVFRUWQT/gqhUqnWrVtnMpkYx/773/9+/fXXP//884aGhsTExDfffBPRxnU8derUvn37CgsLjUZjXV1dWlraypUrv/32W8fPiyNnhNDw4cPtfsPBQzpTFNXU1JSdna3Vauvr68nWa9eu4aMoGvqVXLRo0fbt27VarVarff/99xcvXkxvb8M779y5s6ysrKioSKPR7N27F8cPHz48d+5cemlGo3HYsGHnzp1z/JQB6Crp6ekajUav16emps6ZMwcH09LSzGbzpUuXrl+/LhAIyKcEXrD7h8OMGTNsb7QNGzYoFAqNRlNZWalQKDZs2IDjeM+ampry8nK7ty0D2/70GskyXmhra9uzZ8/MmTMvXbq0Z88ecsjevXsPHjxYVVUlFApJh06VSpWZmWk2m6uqqsLCwkijGi4qOjo6NDRUq9VOnz6dkZXjfz3ZvT5s58VxnQEAAPQefX8ABNCuW7dumUwmPz8/gUDg6lwAAKBvekiHkQSgN4NhJDsDhpEEoF39ZBjJ//3f/33xxRfx5KN28Xi8CxcuPPvss2SV7aOjra3N3d3darXSjz1w4MD8+fNtj50+ffqaNWvIlKL5+fkvvvgi2Tpp0qSPP/74iSeeIEX99NNPa9eudXCcMQdzto2LxeIDBw5MmDBBLBZzFG63tDlz5rz66quRkZEkUlRUlJ2d/eWXX9KPLS4unjp1Kl5ta2sbMGAAXp44ceL27dtJn5gdO3ZotVoyg2wPg2Eke4Zrh5FUKBQ1NTX0rX5+flqt9urVq2vXri0tLTWZTGPHjj1z5gx+w/v6+l6+fFkqldoWyz0SI2Orj4/PlStX8DAPTU1No0aNIoNY0vd0ZLxWtv3tLrMt8Hi86upqhUKBEGpsbBwxYgRuYn/sscfojx3IZDLS9M7j8Zqbm4VCIXd6DrI9U0fOqy+BYSQBAB0Gw0iC3gj3bINhJAEAAAAAAACgXzl16hS9fcgu0mrFYDKZ3n333REjRnh6enp5eU2bNs32h2DS0sbw7bff/s///A9ZnTRpEn1rWVnZ0KFD6eMrPvPMM6Wlpe2fT3s5c/v3v/+9detWmUwWEBAwc+bMefPmOT6X1alTp+hnhBB67rnnbJtRSUsbQoi0tCGENm/enJaWhpdNJtPf/va3pKSkDpwCAA7SarWkjxRe0Gq1CKGYmJiQkJCKigq9Xn/gwAGyf2trqyPFkmEhOfRYixG97d/B/d3c/v/PpOPGjaP3YaV3ckUIdVVLW4c5cp0BAAD0PGhs6+9aW1utViuPxxs4cKCrcwEAAAAAAAAA0HPa2to6PP3Pa6+99uDBg7Nnz/7yyy+3b9/+29/+1lVZeXh43Lhxg/qtHhghYNSoUSdOnDCZTDdv3jxy5MjBgweXLl3q+OFsI8I5YvLkyQMGDDhx4gRCaPfu3TNnzvT29na8agC6ilarDQoKEovF5eXlu3btIvF58+ZlZmYihHQ6nVqtXrhwIdnk7u6uVqstFktRUVF4eDh3+fHx8Tk5Ofimzs7OjouL6/JTwPnU1ta+9tprjuyfk5NTXV3d1NS0efPmmJgYHIyMjMzNza2urnaqxc6pOduc5dR1BgAA4BLQ2NbfkQnbYIZVAAAAAABg62H/luiS/HFfHGcP6aZkulUHzrRdZAofhFB5eflLL73k4eHB5/PVajWJl5SU8Pl8XDufzy8pKcHx06dPL1y4MCoqCsfJIWxxRnX90PPPP3/48OGOHfvPf/5z7dq1Xl5eAwcO9PDweOyxxxw/Nigo6Pz582SVvILYzJkzP/nkk45l1bWOHj3KvYPJZMILU6ZM+fe//03fdO7cubCwMMfr2rx581//+lez2bxjx46UlBRnUwWgY+RyOX01Ozs7ISFBKpWmpqbiAWbxh3xmZqZer5fL5U899dShQ4foY5ziqcUkEklubu7u3btJnPwHQf+fYtOmTTqdzt/f39/fv6GhYdOmTWRnu/+y4dg/Ly9vwYIFs2fPxo3l9DTox5KFxYsXR0dHDxs2zGAwbNmyBW9avXq1TqcLDQ2VSqXTpk0jcfoZ2WbY1tbmeBO73evDfV52rzMAAIDeAzoz9Xe477m7u7urEwEAAAAAAK7k6+trd8C0zg/3JBKJmpubO1lIh8t3yQQneBoYZw/ppmS6VQfOlNvVq1ebmprI6urVq19//fV9+/YVFBTExsaSgbPi4+Nv3rzp6+uLEKqtrR03bhyefGj58uXnzp2TSCQIodLS0oiICIPBwBFHCDU1NV2/fn3YsGFdeBYPkXfffTcqKurxxx8PCwt78ODBrVu3zpw5U1pa+n//93/tHjt8+PCPPvpo5cqVJpOpoKDg008/dbzeN9988+WXX/7888+HDh16/vz5r7/+mr41PT09JCSEoqiFCxcqFIrm5ubz58/v2rXryJEjTp+hM2QyWW5u7h/+8AfyVrH9Sxl3LomKiqqtrT148ODevXu/++47hFBGRsZLL70kkUhwv5aysrKNGzd+9tlnjtceFBQ0ZMiQmJiY8PBwPz+/rjstALjcuXOHvhoVFRUVFUVWyf9NAoHgww8//PDDD21LiIqKsjuqod3/1/h8/tatW23nI6Tv7Mh/iBz7R0VFkVZwjv6m9E1lZWWM3QYMGLB+/fr169dz1GsLfxo4yG5R3OcFo0cCAEAvBz3b+js3N7dHHnnkkUcecXUiAAAA/qs7Ogo4UmmvKsfZSqETSYdBJxKA1dXVMSJHjx61fcvhSFZW1pAhQ+gvrlqtxm8SsVgcEhKiVCpxXCqVGgwG22fA8aper09ISBCJRCqVih63XX7w4MFf/vIXb29vX1/fvXv3tls+W/4WiyU1NTUwMFCpVCYnJ5PfrdjOiw3e/8SJE3K5PCgo6ObNm9z7I4RWrVoVGBgoEAimTp166tQp7jy583FwoCrGZWGs2s2H7XVhu/7YyZMnbfN0qnwiJycnIiKCrJaUlEyaNMnNzW3gwIFPP/00ibe1tZE2OaPR2NbWhpdNJhNuJkEITZgwgQw8yBZHCIWFhWVnZ7d7Mfuq5557Tq1WZ2RkSCQSPz+/uLi4Bw8ekAEh7XYHIav/+Mc/ioqK5HL5M888c/ny5YMHD3LszFgdP378xo0bZ8yYMXjw4KysrIyMDHpWQ4YM+eabb65duxYcHCwUCidMmHDq1Km9e/c6ckbc9aLf3giMm2Lo0KF+fn4rVqzw8/MbN27cggUL8vLyGOXjziVubm7/8z//c+3atcLCQhwfOXLkp59+umXLFolEIpFIMjIyPvvss8DAQNvE7H5eYW+88cbRo0dTU1MdOVMAAAAAANC7UAAAAADoZjqdztPTkxH08fHhOITxf3RLS0vXp9VRQqHQ1SnY0X++1XTtmVZWVq5YsYKshoWFffXVVxaLJT8/393dncR9fX1ramrwck1Nja+vL14ODAxsbGzEy998841AIOCOUxS1YsWKqqqqzme+cePG1NTUzpfTfXbs2LFs2TJXZ2EfbmlgBNneWnb3TE1NvXfvHv19IhQKo6KiLBZLS0uLWq2WyWSOlDxlypQ9e/bcu3evpKTE7v5kec2aNa+88kp9fb3RaDxw4MBjjz3Wbvl2tyYnJ+/atQsv79ixQ6VScZ8Xd8l5eXkPHjw4cOBAVFQUd70URTU3N1MUZTabS0pKbD9IHbzOWFBQUFBQULsZUhQ1fvz40tJSvFxaWvr888+3m4/d14X7+iclJRkMBkaeTpVPPPvssxqNhhGUSCSTJk2qq6sjkUOHDo0dO3bevHkrVqyYOHFifn4+jg8YMIB+ILmqbHGKoi5fvjx69GibK9dDt3BhYeGUKVO6u5ber76+XiQSuToL19u9e/fSpUtdnQWVmJiYkZHh6iz6PrFYXFtb25M14udLzGZzT1YKALdDhw6Fh4e7OgsAwEMJIVRYWOjqLH6jv/wsBQAAALiQ3cY2xu+qBoNh0aJFAoFg9OjRP/30E9laX18fFBSEEJLL5StXriStbvg3TYSQSCSaOHHi8OHDcfz+/furV6+Wy+U+Pj579uwhcfyQTVNT05IlS4RCYVJSEqmaDMrESA8hVFJSIpPJxo0b9/PPP+M46Rlge4jdcsxmc0pKilKpHD58uEqlMplM9PJ37dqlUCjc3d3J76Rs2PJhu54URSUmJiqVSk9Pz/Dw8JMnTzpyvmz5BAcHBwcHc2dI0UZ6sbtqNx+214XtdcSHnDhxwjZPp8onVCrVl19+yQi2tbUdPnx4zJgxJCKXyy9fvoyXr127JpfL8fITTzzBuALccYqivvjii+TkZLZr6DhobOsMemOb7WBlfn5+9J25m+XI8uHDh/GHkpeX18iRI8vKyjhKIHHcHuNI+T4+Pg0NDWzl2I3b3ert7d3U1ISXGxsb6c892K2Xu2RcVHNzs207AaOEysrKWbNmSaVSgUAQGhrqSGOns/nYdezYMfIbVnh4eHFxcbv52H1duK+/xWJh5Ols+YRYLLbdqtfr161bl5aWRiIqleqHH37Ay+fOnUtJSWEkwFhli1MUde/evUGDBtlmAo1tPUar1S5fvvztt992dSIu1traOnLkyC55HqWToLGtZ0BjW7sY88lh5Fso6BugsQ0A0GGo9zW2wTCSAAAAQK+QkpLi6+vb2Nh4/PjxgoICElepVJmZmWazuaqqKiwsjIy4FR8fP2vWLIvFUldXl5SUpNfrcTwtLc1sNl+6dOn69esCgaCxsRHHKYpCCEVHR4eGhmq12unTp5MqZsyYQbHMZ9DQ0HD79u2UlJQ1a9bgOC6QfJOgH2K3nA0bNigUCo1GU1lZqVAoyBCCeM+ampry8nI8IhP39WHLh0N6erpGo9Hr9ampqXPmzHHkfNnysT1ZtiRxJxK8SjqRcOTD9rqwvY5YUVGRRqNh5OlU+URxcfHIkSMZQS8vr23bthUVFZFITk5OXFzc/PnzV65cuWjRor///e84fvv2bbuXgi2OEBoxYkRxcTHbVtDztFoteYfjBa1W24FyZs+ebTabDQbD999/HxcXRx8JkI4x3YhQKOQo02q1kuXW1lZH0nBkOhNHbmdnDRzYzmTYMTExISEhFRUVer3+wIEDXZ4Am4iIiPv37585c+bMmTMPHjyYOnWqI/nYvi7c19/29J0tn7D76gwaNOjtt9/evn07iezfv5+MKhkUFLRv3z62AskIkxzx7nhLgHa99957eDTF0aNH//73v3/99dddnZHL4OswcODAioqKJ5980tXpANBb3Llzx/Z3TMYkcwAAAEAv0tWtdwAAAABgovdsY+tEIpFISKeBu3fvkv+jpVIpfWcyMhtbJxLuzgccnQlsvxUglk4b3N8fGFuhE0m7+dh9XfphJxJnQc+2zuj8MJK2y15eXv/5z3+MRiP1a9dbsg/uhWk2m48ePRoaGtpujXj/mpqaVatWkX1eeeWV9evXUxRVX1+fn5//pz/9qd3y7daiUqkyMjKsVqvVak1PT2cMI9luboySCwoKTCbTgQMHYmJiuOuVyWQlJSX379+/ePHi+vXrO/mh5GB3W6ykpGTy5MmTJ08+ceKEI/nYPXeO62/3WGfLJ55++mn6MJIvv/zyjz/+aLVaGW+q4cOHGwwGvGwwGEj3Xw8Pj2+++QYvl5WVicVi3IeDLU7BMJIA2ICebT0DerYBQEHPNgBAJyDo2QYAAAD0c450IqH3zBg3bhz9f+76+nocZ+tEwt35gLsTCQe2ThvQiYQBOpFAJ5KHl+1gTbizBX0BL9v9d+jQoRcuXFAqlTweLzY2Ni8vj5SDe2FKJJLc3Nzdu3czyqEXTvZfsGDB7Nmzly5dSvbMzMzU6/Vyufypp546dOjQ1q1buctny3/Tpk06nc7f39/f37+hoWHTpk3c58XNz8/vySef3L59+/vvv89db3Z2dkJCglQqTU1NjY+Pp5fv1HXG2traHL+PwsLCrFYrRVEvvPACCbLlw/a6sF1/tjydLZ+IiIi4cuUKWV2xYsWrr77q7u7OeFNlZGRIJBJciEQiycjIwPFPPvlk8uTJPB5PJpPNnTu3oKAAP5jCFkcIXblyZdq0aQ5eTOByAQEBPBYBAQGuzg4AAAAAAPRf7fxQBQAAAICeLWgkDwAAIABJREFUsWDBgm3btr355ps6ne69994j8cjIyNzc3OnTp/v5+bm5/fcpGZlMduTIkd///vf+/v4jRozA/VQQQvPmzcvMzHz33Xd1Ot3Zs2e/+OKL/fv3dzirs2fPRkREFBUVkUYjhJC7u7tarZ41a1ZJSUl6evrp06c5SoiPj8/JycGjX2ZnZ8fFxXU4GbZ87NJqtUFBQWKxuLy8/J///GdnKkUIPffccwihsrIyR3Z+6623Nm7ciBc6nI+zr2OHzzcgIKCmpkapVOLVV155ZeXKlU8//fSxY8foDX5CodBkMuFGPpPJRFrvPDw8SktLJ0yYgBA6f/68WCy2Wq0DBgxgiyOEqqurhw0b5niGoMfYjstktzmHHqQv4xtk+fLltodERUXZNsxztBVFRUWZTCbGbgKB4MMPP/zwww8dLJ+tCj6fv3XrVnpbne3OjrdjjR071nbQVLuHR0VFRUVFOV4d9w7fffedgxliX3/9tYP5sJ072/Vny9PZ8omXX355586dZCzcZ5555uzZs7a7sb3ozsYRQidOnFi3bh13VqD3uHnzpqtTAAAAAAAAwA7o2QYAAAC4BqMTydatW6urqyUSSWRk5JIlS9Cvj/+vXr1ap9OFhoZKpdJp06Zt2bIF78/WiaTdzge2nQnsdqrA7HbagE4k3KATCUccQScS0Fc4/sEFnKJUKgcPHtyTNUqlUngCAAAAAAAAANBJPBjGBwAAAOhud+/eDQgIIJ3PHhY8Xu/6ntDb8ukbKisrd+7c+cEHH/RYjStXrly3bl3nf9p+4403zGZzenp6l2TVHXbu3Hn58uWPPvrI1YnYYTQaBQIB3FAAcOiZW/jIkSPbtm07efJkt9YCgFNWrVrl7++fnJzs6kT6uEGDBmk0Gh8fnx6r0WKx8Pl8s9lMHoFyEH6yhPtrg6u+qHPU60jaPYMtE44M+88fPocPH87Kyjp+/LirEwEAPHx4PF5hYeHMmTNdnch/wTCS/RpFUfA0LgAAALtIp41e8mdeb8unz4BOJABw8Pb2JjNlEnK53HbITQA65ocffjh79uyjjz7q6kQA+C+KoqZPn+7qLPqFH3/80Xby5u5jd2JdX1/f2tpa7gMd+e3I7ld0o9Ho6enpYHoikai5udnBnbnrJZt6yU9ebJlwZOj4nzwdu269SktLyzvvvOPqLAAAoAtAY1v/RVFUVVWVm5tbQEAAnkMFAAAAIHpbm1Zvy6cv2bx5c09WB39Lg4cINKqB7jZq1KgxY8Z89tlnrk4EgP964403fve737k6i75v9OjRaWlpPVkjnnyXoa6ujr5qsVhef/11tVpNUdTcuXM3bdrE5/Pxplu3bsXExGg0mqioqKysLIFAgBCaMmXKV199RQ4n39h1Ot2MGTO+/fZbuVw+f/789957D7e6PXjwICUl5Z///Kebm1t6evq7775bWVmJEJJKpQaDgbQ8OfLN/+jRo7g3A33nlpaWlStXHjx4cPjw4f/4xz8Yhzg+DbNarY6NjbVYLCKR6Jlnnqmvr6+srMTpvf/++xs3bjx27FhFRcVrr722b98+PEfpqlWriouLq6urJ0yYkJaWNmXKlHZrcfy8cNW7du3KyMior6/Py8vDlXbguvVCtbW1b775pquzAAA8fNzc3AYNGuTqLH4DGtv6r9bWVoqirFYrtLQBAADoJaATCQAAgH7lkUceEQgE0N8X9CqDBw/28PBwdRZ939dff93DNeJhJLn32bBhw5AhQzQaDUJo586dGzZseO+99/CmvXv3Hjx40NPT880330xOTsaDkJ86dYocS++kpVKpMjMzJ0yYYDKZjh8/rlKp8P5paWlms/nSpUtCobCwsLCxsRHv39jY6OwIFjNmzLDtGZaSkuLr69vY2PjLL7/k5OQwDnG8/Pj4+FmzZh04cMBsNhcXFy9fvhz92hGtra1tz549M2fOXLx48Z49e2JjY81mM0IoPT09KyvLYrGcPn16zpw5He5tZve8cKSmpqa8vPzEiROk0g5ct17od7/73Y0bN1ydBQAAdIGH/hMZdIbVam1tbW33yxYAAIBOekjnbAOgN4M52zoD5mwDoF0wZxvot2DOtr6KPmebQqGoqamhb/Xz89NqtT4+PleuXMFjjDc1NY0aNQoPMsnj8aqrqxUKBUKosbFxxIgRtk/I0Vt9HnvsMdKQhhCSyWR4f19f38uXL0ulUtv0OtZoxDhKKpVeu3YNl9/Q0ODl5dWxbzsFBQUvvviixWLx8vKSyWQff/xxcHAwvTrGwtWrV9euXVtaWmoymcaOHXvmzBlGvWxn53icHmFbfhjBnG0AgL7EzdUJAFdyc3ODljYAAAAAAAAAAACA/kOr1VIUhRtp8AKZPa7dlhur1erm1s7PiePGjaNoSMtca2urI+nhblud1JlCZs+ebTabDQbD999/HxcXFxERwb1/TExMSEhIRUWFXq8/cOBAh+vtpC65bgAAADoMGtsAAAAAAAAAwDk8Ho8xxFPnbdiwgSyXl5e/9NJLHh4efD5frVaTeElJCZ/Px7Xz+fySkhIcP3369MKFC6OionCcHMIWZ1QHHgocb7kOvyEdOdDZkrv81gAA9Jj4+PicnBzcQpadnR0XF0c25eTkVFdXNzU1bd68OSYmhrucyMjI3Nzc6upqq9VKj8+bNy8zMxMhpNPp1Gr1woULySZ3d3e1Wm2xWIqKisLDwzuW/4IFC7Zt22axWGpqajIyMhhbn3vuOTxtW7tkMllZWZmbm5u/v/+IESPaHaFEq9UGBQWJxeLy8vJdu3Z1LPmO6ZLrBgAAoEtAYxsAAAAAAAAA+fr6Or6z0WjsvkxEIlH3Fd5VunzIpqtXrzY1NZHV1atXv/zyy83NzXl5ebGxsSQeHx9/8+ZN/DPozZs34+PjcXz58uVZWVlqtZqiqK+++or8PMoWRwg1NTVdv369a88CdAm2m5HjXdfhN6QjBzpbuOP7PxQ3OwB9m1wup69u2rRJp9P5+/v7+/s3NDRs2rQJ/dqCvnjx4ujo6GHDhhkMhi1btjDKYdz4q1ev1ul0oaGhUql02rRpZP/MzEy9Xi+Xy5966qlDhw5t3bqVHIL/v5NIJLm5ubt37243c/KsAP2hga1bt1ZXV0skksjIyCVLlqDfNv+3tbU5+AE1dOjQCxcuKJVKHo8XGxubl5dHiiIF0kvOzs5OSEiQSqWpqan4v2b6brZ5OhunV81Iw9nrBgAAoPtAYxsAAAAAAAAA1dXV0VfxTzx6vT4hIUEkEqlUKhzX6XTBwcECgcDb2zsxMZG0uuH9T5w4IZfLg4KCbt68ieMWiyU1NTUwMFCpVCYnJ5MBjtjKl0qlBoOB9ytGkg4+k844nLG6atWqwMBAgUAwderUU6dOcefz4MGDv/zlL97e3r6+vnv37lUqlfSKTp48OWTIEEaPMafKJ3JycuijVJWUlEyaNMnNzW3gwIFPP/00ibe1tZE2OaPR2NbWhpdNJpNEIsHLEyZMIM/gs8URQmFhYdnZ2e1eTNDzGDcjQujo0aO2d0RLS8vixYuFQuGYMWMuXbrEOMTxDhwIoVu3bo0fP14ikSxZsoT+JrFbr9FoXLZsmUQiGTt2rEajoe9gd38cycrKYtws3Dc7AKBn3Llzh77K5/Nxe1V1dfXWrVvxzCP4CY8nnniirKysqakpJyfH09OTUc7p06cff/xxsjpgwID169ffuHFDr9cfO3YsNTUVxwUCwYcfflhfX19fX7937176swVRUVF45MYvvvhi+PDh7WZO/RYp/+OPPzYYDBcvXnzmmWfomxBC33333fnz5x25LGVlZcuXL799+zZFUWazOSoqil4jWUa/tjJGRUX9/PPPRqPx6NGjI0aMoNdrN09n47ZVk03OXjcAAADdBxrbAAAAgN6lu39vslu+Wq3m8/lSqXTKlCm9IZ+HV3f8YggjywGXwD/iREdHh4aGarXa6dOn47hKpcrMzDSbzVVVVWFhYaTRCO/f0NBw+/btlJSUNWvW4PiGDRsUCoVGo6msrFQoFOQNxlZ+Y2MjsvkhiZ6Vgx1xxo8fX1paildLS0uff/55cmB6erpGo9Hr9ampqXPmzOHOJy0tzWw2X7p06fr16wKBAKdHFBUVaTQaRuczp8oniouLR44cyQh6eXlt27atqKiIRHJycuLi4ubPn79y5cpFixb9/e9/x/Hbt2/bvRRscYTQiBEjiouL2baCXmXGjBm27/yUlBRfX9/Gxsbjx48XFBQwtjp4s2B79+49ePBgVVWVUChMTk5ut16pVFpXV3fmzJl//etfiNajxe7+OFJTU1NeXk6/WbhvdgDAQ0GhUPB4PE9Pz3Xr1u3fv9/V6QAAAAAuRQEAAACgm+l0Ok9PT0bQx8enm6oTCoXOHuLu7p6fn98dyVAdyueh1rXfryorK1esWEFWw8LCvvrqK4vFkp+f7+7uTuK+vr41NTV4uaamxtfXFy8HBgY2Njbi5W+++UYgEHDHKYpasWJFVVVVF55CN9m4cWNqaqqrs+CyY8eOZcuWuToL+3DPFbzs5+fH+APBz88Pb0IINTc3M46VSqX0nWUyGdmEEGpqaqIoqrm5WSQS4aC3tzcOUhTV2NhI/+izWz7VRTfRsWPHwsPD8XJ4eHhxcTFerqysnDVrllQqFQgEoaGh6Le/9dvm4+Pj09DQYLcKhJDFYmHk7Gz5hFgstt2q1+vXrVuXlpZGIiqV6ocffsDL586dS0lJYSTAWGWLUxR17969QYMGseUDeuYWLiwsnDJlCl7muBkxxqspkUjIm/Pu3bsdvnEQQtXV1Xi5oaGBflPbrVcmk5F66+vrbevljrAtg94jMTExIyPD1VmAroc7l5vNZlcnAsB/HTp0iHxhAwCAhx30bAMAAABcgzFI1JQpU3g0JG47Ehpexn3ReDyeWCwOCQkhI5txDMpkd3CngIAAHo9nsViio6MZW+3uzzGimt2R05zNh3vEOdtBqDAYWQ5GlgMdptVq8R8G6NdfvbVaLdkqFAoZ+48bN47+5wT+qd3WwIEDyTLF3mfFtnwG8iHgrIiIiPv37585c+bMmTMPHjyYOnUqjsfExISEhFRUVOj1+gMHDrSbT2trK0ct9NPsWPmE3as0aNCgt99+e/v27SSyf/9+cu8HBQXt27ePrUDyOcAR53hpQM/jvhm5dfhOYbBarW5u7fxKQP+PuwvfQl11CgCAPsPb25tnw9vb29V5AQAAAPZBYxsAAADQK5w6dYr8eE2P01fpy/Hx8bNmzbJYLHV1dUlJSXq9Hsc5BmWyO7jTzZs3KZvHzDn25xhRze7Iac7mwz3inO0gVGSrI7/3UTCy3K9gZDnQYZGRkbm5udXV1Var1Xbr2bNnzWZzUVERadyKj4/PycnBN2l2dnZcXFy7Vbi7u6vVaovFUlRUFB4eTt/k1DRUb7311saNGzdu3PjWW2+RoFarDQoKEovF5eXlu3btareQefPmZWZmIoR0Op1arV64cCH3/s6WTwQEBNTU1JDVV1555aeffqIo6tixY/QGP6FQaDKZ8LLJZCKtdx4eHuTD7fz582KxGL9AbHGEUHV19bBhwxzPEPQ2CxYs2LZtm8ViqampycjIYGx16mbJycmprq5uamravHlzTEwM986xsbHbt2+3Wq0GgyE3N7cjqf+K42YHAIA7d+7YdhpgTDIHAAAA9CIO9H4DfdC9e/dqa2s5xrEBAADQhejDSLY7SBTFOeoXWT58+LC7uztCyMvLa+TIkWVlZWyHcxfe7iGMTWwjqnGPnOZ4PtwjzjlYJgcYWY47Tj08I8vBMJKdQR9GkpDL5fRVtr8aWltb33333SeeeGLQoEERERHp6en0Q7777rshQ4Y8//zzZFQ6k8mUlJSkUCgUCkVSUpLJZOIun6IoPEqqQCCIjo6urKykbxo7dmxQUJDjZ/qHP/xh0qRJjMIDAgI8PDwiIyMrKipI7Wz5GAyGV199VSaTyWSyRYsWkfFa6XvSl50tn1i7du2hQ4fI6sWLFydOnDhgwADGML/44uBC6JtI3MvLy8/P7+uvv+aOUxT1xRdfkM8KYKvnh5EkGDcjxfL+MRgM8fHxAoHgmWeeuXjxIuOt5eDNgo+6ceNGcHDw4MGDly5d2tLSwl1vS0vL0qVLJRLJs88+++OPPzL+R7Pdn+1moThvduBCMIxkXwXDSIJeCIaRBAD0JTwKRg7pl+7cufPLL794eXmRIaQAAAB0n7t37wYEBNBH6kMI8Xis/wszNpFVq9U6YMAA+qaWlpbGxsb9+/e/9957ZBRB+uFms5nP57dbr+PJyGQyjUbDmLQJITRmzJgFCxb8+c9/lkqld+/exXOGdSAfHx+fiooK/N9TU1PTqFGjamtrbffkSLhdISEh6enpCKG0tLQzZ844lX+714EtT2fLJ8RicU1Nje3Qc0aj0cvLy2g04lU/P79bt27hEe1aW1sff/xx3EXG9r3U2to6YMAAtjhC6JdffvH397937x7HNewN3njjDbPZjF/K3mnnzp2XL1/+6KOPXJ2IHUajEU/U17XFdubGBJWVlTt37vzggw96rMaVK1euW7cOOrex6Zlb+MiRI9u2bTt58mS31tJNLBZLYWHhhg0bLl++7OpcQFdatWqVv79/cnKyqxMBXcxisfD5fLPZTB7aAMDlDh8+nJWVdfz4cVcnAgAAXQCGkeynLBYLsjfJBAAAgF4ID7JUW1v72muvkaBMJisrK3Nzc/P39x8xYgS9Ja9bB2ViG1GNY+Q0p/LpwIhzCEaWg5HlQC+Ap3FizMIIHKdUKgcPHtyTNUqlUrjZQcf89a9/5fF4QqFw3759D2lLIQAAAAAAAF0LGtv6KdzYBk8zAQCAC8nlcrtx234heXl5CxYsmD179tKlS9Gvv2UPHTr0woULSqWSx+PFxsbm5eXR94+NjZVIJLm5ubt37yZxPKk4fQEhdPToUXqQ/kO53f0zMzP1er1cLn/qqacOHTq0detWHM/Ozk5ISJBKpampqfHx8Yj2m7tT+WzatEmn0/n7+/v7+zc0NGzatInsbPdfrK2tzfH+NGFhYVarlaKoF154gQTZ8me7OGzXgS1PZ8snIiIirly5QlZXrFjx6quvuru7M170jIwMiUSCC5FIJGTynk8++WTy5Mk8Hk8mk82dO7egoAD/788WRwhduXJl2rRpDl5MAAgydIarE3mIbd68uSere+edd3qyOtCXbN68maIok8mkVqu9vb1dnQ4A4OFj948OF+JIoDekh7FlwpFhL8kcAAD6CRjppT+iKOratWsIoWHDhuEBowAAAHQru8NIsvn666/j4+Nv3rzZ3VmBhwKMLMcGhpHsjG4aRhKAvgSGkQT9Fgwj2VfZHUbS19eXjNnOTSQSNTc3Ox53SgdGouao12g0enp6djIlut4zUDZbJp3PsEtexw6AYSQBAH0J9Gzrj/CoU25ubtDSBgAAvYdCoeDxeJ6enuvWrdu/f7+r0wG9BYwsBwAAAAAAukldXR0jsmrVqsDAQIFAMHXq1FOnTuGgVCo1GAy2gzGwxfGqXq9PSEgQiUQqlYpswuNq2Pa4unXr1vjx4yUSyZIlS8hDivQ96cts9ep0uuDgYIFA4O3tnZiYSKY35mA3n5aWlsWLFwuFwjFjxly6dIlxiOMj2KvVaj6fz+PxxGJxSEiIUqkkJ7J9+3aRSFRaWrp7926RSKRWq/Ehdq9/B9g9LxzJysoaMmQIn88nlbJdTwAAAE6Bxrb+CCZsAwCAXkir1VIUZTQav/3229DQUFenA3oRGFkOAAAAAAD0jPT0dI1Go9frU1NT58yZg4ONjY3I3pDRbHG8HB0dHRoaqtVqp0+fTjbNmDHDbh+svXv3Hjx4sKqqSigUko6VtmVy16tSqTIzM81mc1VVVVhYGL2Rj43dfFJSUnx9fRsbG48fP15QUMDY6vi42fHx8bNmzbJYLHV1dUlJSXq9npxIW1vbnj17Zs6ceenSpT179sTGxuJD7F7/DrB7XjhSU1NTXl6Oh/rHcbbrCQAAwCnQ3NIfwYRtAAAAAAAAAAAAAP2TQqGoqanBy7gnk5+fn1arvXr16tq1a0tLS00m09ixYw0GQ2dqOXz4sFAoRAiFhYW1u3NCQoJCoUAIvfnmmyNGjOjYIOoFBQUff/wxWZXJZB0r59NPP7127Rqfz/fy8lq+fHlaWhp96/nz5x0v58UXX3R3d/fy8pLJZEeOHCGbkpKSEELz58/fvn07XkAIde31Z4OHYY+KisI/DwIAAOgq0LOtP8LDSEJjGwAAAAAAAAAAAEB/gwfVwH2Y8IJWq0UIxcTEhISEVFRU6PX6AwcOsB1uNpsdieOWNmdZrVY3Nzs/V1qt1nbzGTduHEVTX1/fgQTYCu+A2bNnm81mg8Hw/fffx8XFRUREcO/v4PXvbp05ZQAA6M+gsa0/gmEkAQAAAAAAAAAAAACdVqsNCgoSi8Xl5eW7du2ib3J3d1er1RaLpaioKDw8vN24s3Jycqqrq5uamjZv3hwTE8Mov7a29rXXXms3n8jIyNzc3Orqao6WOUcsWLBg27ZtFoulpqYmIyODsdXxOdtkMllZWZmbm5u/v/+IESPIXHRsOK5/d+uq1xEAAPozaGzrj6BnGwAAAAAA6A94PB4eHcupQ7opmW7VgTNt14YNG8hyeXn5Sy+95OHhwefz1Wo1iZeUlPD5fFw7n88vKSnB8dOnTy9cuDAqKgrHySFscUZ1wBHd8aJ3CY6sOpyzIwf2k5sdgK4ll8vpq9nZ2QkJCVKpNDU1NT4+HtHuFDzFl0Qiyc3N3b17NznEbhwfxfsVvQoSoS8ghBYvXhwdHT1s2DCDwbBlyxZ6+QsWLJg9e/bSpUvbzWf16tU6nS40NFQqlU6bNo1eDhvbfBBCW7dura6ulkgkkZGRS5YsQb/9xGhra3NwYrOhQ4deuHBBqVTyeLzY2Ni8vDz6xaFfK4zj+tvN09k4vWpGGmyvLwAAAMdB36b+CHq2AQAAAAAABl9f39raWgd3NhqNnp6e3ZSJSCRqbm7ukqIoinL293QHfz7rbTpwptyuXr3a1NREVlevXv3666/v27evoKAgNjaWDDAVHx9/8+ZNX19fhFBtbe24cePwJEDLly8/d+6cRCJBCJWWlkZEROCJZ9jiCKGmpqbr168PGzasC8/iIeXgzdjlL7pdHbjZOW6iDufsyIHO3ryO79+FH0oA9DZ37tyhr0ZFRUVFRZFV+m0SFRVld3RBu3HuzwG2SFlZmd3yTSaTg/kMGDBg/fr169evZ6vdkXwQQgKB4OOPPybTvzH2+e677xwsHJ/R8uXL2Woky3iB4/qzXVKn4hwFsr2+AAAAHAc92/qjtrY2BI1tAADQW3X3D2d2y1er1Xw+XyqVTpkypTfk092gs0tnQGeXvqquro6+il8+vV6fkJAgEolUKhWO63S64OBggUDg7e2dmJhoNBrp+584cUIulwcFBd28eRPHLRZLampqYGCgUqlMTk4mv+OwlS+VSg0Gg91n4e1iq5fDqlWrAgMDBQLB1KlTT506ReJHjx5lewA/KytryJAhjDcncnggKcbpMFbt5sN2fR48ePCXv/zF29vb19d37969SqWSXtHJkydt83SqfCInJ4c+tUxJScmkSZPc3NwGDhz49NNPk3hbWxtpkzMajfgPDYSQyWTCLWoIoQkTJpCBs9jiCKGwsLDs7Ox2L2Z/wLgZu/ZFt30zG43GZcuWSSSSsWPHajQa8uZku9k52L2JWlpaFi9eLBQKx4wZc+nSJcYhjo/GhhC6devW+PHjJRLJkiVL6G8eu/WynRfb/mzXx9kPJQAAAAAA0D9BY1u/09raip8KhMY2AABwLdwPwFbnO1WIRCKOrXbLx6OaNDY20n93dmE+3a0DlT68nV26tkDbzi4vv/xyc3MzHnmGxHFnFzw1/c2bN/EwOAih5cuXZ2VlqdVqiqK++uqruLg47jj6tbNL154FcAR+80RHR4eGhmq12unTp+O4SqXKzMw0m81VVVVhYWGkkQbv39DQcPv27ZSUlDVr1uD4hg0bFAqFRqOprKxUKBSk9ZSt/MbGRrwVczBP23o5pKenazQavV6fmpo6Z84cEp8xYwbb4/Y1NTXl5eWM9znJ05Ekx48fX1paildLS0uff/55cqDdfNiuT1pamtlsvnTp0vXr1wUCAb5cRFFRkUajYeTpVPlEcXHxyJEjGUEvL69t27YVFRWRSE5OTlxc3Pz581euXLlo0aK///3vOH779m27l4ItjhAaMWJEcXEx29b+rGtfdNs3c0pKilQqraurO3PmzL/+9S+yJ9vNzsHuTZSSkuLr69vY2Hj8+PGCggLGVgdvImzv3r0HDx6sqqoSCoXJycnt1mv3vNj2Z7s+zn4oAQAAAACAfooC/cz9+/crKyuvX7/u6kQAAKAf0el0np6ejCDjf+HJkyfb/Q+avkpfzs/Px7NvikSiiRMnDh8+HMdJjwHb/+iPHDliG3z88cfZvhvY3f/+/furV6+Wy+U+Pj579uwh9VIUlZiYqFQqPT09w8PDT5482bF8zGZzSkqKUqkcPny4SqUymUz0c9+1a5dCoXB3d8/Pz2de5d/C+5eUlMhksnHjxv3888+2OzAidvNny5M7n+Dg4ODgYO4MKdoPdnZX7eaDd2hqalqyZIlQKExKSsJxjtcFIXTixAnbPJ0qn1CpVF9++SUj2NbWdvjw4TFjxpCIXC6/fPkyXr527ZpcLsfLTzzxBOMKcMcpivriiy+Sk5Ntr97GjRtTU1Nt473Hjh07li1b5uos7NPr9eQi+/n5MT4E/Pz88CaEUHNzM+NYqVRK31kmk5FN+M1DUVRzc7NIJMJBb29vHKQoqrGx0cfHh76/bfmUvduTm9162UqrrKycNWuWVCoVCAShoaG2dXFHnM2NOHbsWHh4OF4ODw8vLi5uNx+718eyKJMDAAAgAElEQVTHx6ehocFuFQghi8XCyNPZ8gmxWGy7Va/Xr1u3Li0tjURUKtUPP/yAl8+dO5eSksJIgLHKFqco6t69e4MGDWLLp+f1zC1cWFg4ZcoUvMx2M3bti267LJPJSPn19fUkznGzc2O8yhKJhJR/9+7dDt9ECKHq6mq83NDQYJsPo2S282Lbn2K/2Tuc80MqMTExIyPD1VmAroc7l5vNZlcn0tMY89Jh5NspcK1Dhw6RL0gAAPCwg55t/U5rayuCMSQBAKD3OXXqFPnvmR6nr9KX4+PjZ82aZbFY6urqkpKS8E/niPP5a7vPcePuR3YPsbs/x/P1dp+jdzYf7k4wbJ1LbFHQ2YUGOrsABjyDL6bVask7Fi9otVqyVSgUMo4dN24c/c8J/BO2Lfq3TY7bwbZ8BmenD2n3W25MTExISEhFRYVerz9w4IBThXdGRETE/fv3z5w5c+bMmQcPHkydOtWRfGyvD/4yz8b29J0tn7D7qg0aNOjtt9/evn07iezfv5+MKhkUFLRv3z62AskIkxxxRz45+zC2m7FrX3Rb9KER6S+Bgze7U7pqQiCr1erm1s6vGWzn1UkwpxEAD507d+7Y/h7KmKwOAAAA6DxobOt3oLENAABcS6FQkDk/8IJCoehAOZ9++mlhYaG7u3tAQEBaWhrpfdXdPvvss82bN8tkMg8Pj/nz5+NH1BFCV69e/eMf//jYY49JJJK33nrLYDB0rPyPP/6YDCEYHx//j3/8g741PT1dLBZHRUXRmwo4REREPPLII5GRkWTOMDYdy58tn/Pnz58/f96REt56662NGzfi5Y0bN7711luO5HP48OHFixeLxeKwsDAcYXtdSJ4CgYCep7PlEzdu3LDte3Hjxo2goKBdu3aRyNmzZ3fv3v35559/8MEHmZmZ//nPf3DckV/bGYYMGXLjxg22raDnRUZG5ubmVldXW61W261nz541m81FRUWkMSk+Pj4nJwf/sJWdnU0fI5SNu7u7Wq22WCxFRUXh4eGOZGVbLxutVhsUFCQWi8vLy+lv2o5xaropfL/T7/QO5DNv3rzMzEyEkE6nU6vVCxcu5N6/w+cbEBBQU1NDVl955ZWffvqJoqhjx47R236EQqHJZMLLJpOJtN55eHiQJwnOnz8vFovxG4YtjhCqrq4eNmyY4xn2H939osfGxm7fvt1qtRoMhtzcXBLnvtkdt2DBgm3btlkslpqamoyMDMZWp26inJyc6urqpqamzZs3x8TEcO/Mdl4d0IEPJQAAAAAA0N9AY1u/g/82xiOPAQAA6HncnUi40X/tmj17ttlsNhgM33//fVxcXEREhN1Duvz5a7bn6x18jt6RfLqjZwN0dmFEoLMLsMUYZIn+TAC9g8jq1at1Ol1oaKhUKp02bdqWLVvoR/n5+T355JPbt29///33cWTTpk06nc7f39/f37+hoWHTpk3c5SOEcC9MiUSSm5u7e/duR5K3rZcUTl9ACGVnZyckJEil0tTUVDybINlkd38SYfyLtbW1Of7+DAsLs1qtFEW98MILJMiWD9v1yczM1Ov1crn8qaeeOnTo0NatW7nzdLZ8IiIi4sqVK2R1xYoVr776qru7O57jk8QzMjIkEgkuRCKRkKaUTz75ZPLkyTweTyaTzZ07t6CgAP8BwhZHCF25cmXatGkOXsy+jXEzdvmLzvh3y5YtdXV1Xl5eISEhs2fPJvVy3+x22b2Jtm7dWl1dLZFIIiMjlyxZgjp0E+FDFi9eHB0dPWzYMIPBQM/Hbr1s58W2P8fN3oEPJQAAAAAA0O/Y9qQGfVttbW1lZSWZOQMAAEAPcGTONo5NeKqtmpqaVatWkU1eXl7/+c9/jEYj9ev8bYz9zWbz0aNHQ0NDHanX8WReeeWV9evXUxRVX1+fn5//pz/9CcdlMllJScn9+/cvXry4fv16+lFO5aNSqTIyMqxWq9VqTU9PV6lUdvd05DsMQqigoMBkMh04cCAmJoa7Xo782WrkyMfBOduwkpKSyZMnT548+cSJE47kY/fc2V4XtjydLZ94+umnNRoNWX355Zd//PFHq9XKeBMOHz7cYDDgZYPBQOaQ8/Dw+Oabb/ByWVmZWCzGE4ewxSmKunz58ujRo20zgTnbOkOn03XHHwKu+uMC/qjpDhqNZsWKFT1Z44oVK6qqqnqyRm49P2eby5nN5vz8/FGjRrk6kS7WV8+r+8CcbX1Vv52zDfRmMGcbAKAvgZ5t/Q4MIwkAAL2E3Zm6kb1OPHl5eQsWLJg9e/bSpUvRr89ZDx069MKFC0qlksfjMfoZsD1/bfc57qNHj7L1b7C7P9vz9RydRZzKp91OMMjmeXMO0NkFOruAHuP4jdk36u3zlErl4MGDe7JGqVQKw0i6yl//+lcejycUCvft23fy5ElXp9Nl+up5AQAAAACAXojn+C9BoG+4efOm2Wz29/d/9NFHXZ0LAAD0F3fv3g0ICGhpaXFk56+//jo+Pv7mzZvdnVWfx+PB95yuV1lZuXPnzg8++KDHaly5cuW6detsf4J/4403zGZzenp6j2XirJ07d16+fPmjjz5ydSJ23L17VyaTwQ0CAIeeuYWPHDmybds2aAcCvcqqVav8/f2Tk5NdnQjoYhaLhc/nm83m/jyxCMcfCPjBnd7w7YgtE44MH94/fA4fPpyVlXX8+HFXJwIAAF0Aerb1OwEBAcOGDXvkkUdcnQgAAIDfUCgUPB7P09Nz3bp1+/fvd3U6Dz3o7NJNoLMLcAlvb2+eDW9vb1fnBUC/AzcjAH2Mr69v5wsxGo2dL0QkEnW+kHZxtEj1nsYqtky6JPmeuc4AANA/QWNbfzRgwAD48REAAHobrVZLUZTRaPz2229DQ0Ndnc5DjwyZ7epE+qDNmzf3ZHXvvPNOT1YHeqc7d+7YDoh/584dV+cFQL8DNyMAfUxdXR191WKxpKamBgYGKpXK5ORkPM0b+nWM8RMnTsjl8qCgIDIIh06nCw4OFggE3t7eiYmJpNUN76/X6xMSEkQikUqlIlWsWrUqMDBQIBBMnTr11KlTOCiVSg0Gg+1I5tz52C2fDR48n/FrWEtLy+LFi4VC4ZgxYy5dusQ45LnnnnvuuefaLRkhpFar+Xw+j8cTi8UhISFKpZIkuX37dpFIVFpaunv3bpFIpFarOa5DB9g9LxzJysoaMmQIn88nlbJdZwAAAF0CGtsAAAAA8LCC5+sBAAAAAADoKhs2bFAoFBqNprKyUqFQbNiwAcfxE2wNDQ23b99OSUlZs2YNjqtUqszMTLPZXFVVFRYWRhq98P7R0dGhoaFarXb69OmkivT0dI1Go9frU1NT58yZg4ONjY3I3tNy3PnYLZ/NjBkzbJ/DS0lJ8fX1bWxsPH78eEFBAWOr44/uxcfHz5o1y2Kx1NXVJSUl6fV6kmRbW9uePXtmzpx56dKlPXv2xMbGclyHDrB7XjhSU1NTXl6O58/GcbbrDAAAoEs8rEP6AgAAAA8Rp+ZsAwA4AuZs6wyYsw2AdsGcbaDfgjnb+ir6nG0KhaKmpoa+1c/PT6vV+vj4XLlyBY8Z3tTUNGrUqNraWrwDj8dramoaPHiwwWDw8/P75ZdfEEKPPfYYbr/BZDJZfX092b+5uVkoFNJruXr16tq1a0tLS00m09ixY8+cOUO+jdiddYw7H9vy28WoRSqVXrt2TSqVIoQaGhq8vLw69u2ooKDgxRdftFgsXl5eMpns448/Dg4OplfHWOC4Dnbz7ECcHmFb7g1gzjYAQF8CPdsAAAAAAAAAAAAAAOgv8Aj2uNEFL2i1WrzJkZaYgQMH4oVx48bRB5UlLW2YbUtYTExMSEhIRUWFXq8/cOAAW/lkuEjufJxtaeNGr9RZs2fPNpvNBoPh+++/j4uLi4iI4N7fwevQ3TpzygAAAGxBYxsAAAAAAAAAAAAAAP1dfHx8Tk4ObjnLzs6Oi4ujbz179qzZbC4qKpo6dSqOREZG5ubmVldXW61WR8rXarVBQUFisbi8vHzXrl30Te7u7mq12mKxFBUVhYeHO5JP5y1YsGDbtm0Wi6WmpiYjI4Ox1fE522QyWVlZmZubm7+//4gRI9od0YTjOnQ3u9cZAABAl4DGNgAAAAAAAEB3wZMp9v4yey2OM+2S69B/riR46G7G7njzO3KgsyXDTQQeanK5nL66adMmnU7n7+/v7+/f0NCwadMm+lY/P78nn3xy+/bt77//Po6sXr1ap9OFhoZKpdJp06Zt2bIFx/F9QeZUJiVkZ2cnJCRIpdLU1NT4+HhEu4Pw1GISiSQ3N3f37t3c+bCVz4HsST9k69at1dXVEokkMjJyyZIl6Ld3dFtbm4MjLg4dOvTChQtKpZLH48XGxubl5dGTpOfc7nWwm6ezcXrVjDTsXmcAAABdoncN1AsAAAD0STBnGwBdDuZs6wy7c7b5+vqSeVC6VnfMDsIo02g0enp6dm0VhEgkam5u7pL9uzzPnpx5xdnr8LBz4ZxtcDN2oN4eOLDzHpabCOZs66voc7Z14PDeNtcX6BtgzjYAQF8CPdsAAACAXq1fdeDoDOj8AUAn1dXV0VfpT4vTly0WS2pqamBgoFKpTE5OJrN94B30en1CQoJIJFKpVIzyeTQdKKelpWXx4sVCoXDMmDGXLl0ixep0uuDgYIFA4O3tnZiYaDQaHcyHQa1W8/l8Ho8nFotDQkKUSiWOS6VSg8Fg99n5VatWBQYGCgSCqVOnnjp1int/tjw5HD161LZStuuAOT7gFVv5OJKVlTVkyBA+n69Wq9u9DqDL9fObEXX/m//WrVvjx4+XSCRLliyhPwtlt16j0bhs2TKJRDJ27FiNRkPfAW4i0H/wfts7CgAAAAC2oLGtf6mpqblz546DQ2kDAADoVr6+vo7s1jMPkDrys2+7RCJRV+3fgXw4LlSXXEPHC3H2OgDQO1EUJZfLcScMiqLEYjH+SXrDhg0KhUKj0VRWVioUig0bNpD9EULR0dGhoaFarXb69OmMAnNzcxMSElpaWvCezpaTkpLi6+vb2Nh4/PjxgoICUqxKpcrMzDSbzVVVVWFhYeR3/HbzYYiPj581a5bFYqmrq0tKStLr9Tje2NiIS8Poh6Snp2s0Gr1en5qaOmfOHO792fLkMGPGDNtPHrbrQM7a8Q8ru+XjSE1NTXl5OR5pivu8QA/obzcj6v43/969ew8ePFhVVSUUCun9t9jqlUqldXV1Z86c+de//oVoXwngJgL9B7x1AQAAgPZRoN9obW2trKy8evWqqxMBAIB+R6fTeXp6MoKM/4Xv37+/evVquVzu4+OzZ8+e4cOH0/c8ceKEQqFwd3fPz88n8cTERKVS6enpGR4efvLkSbIzQmjXrl2M/VtaWpYuXTp48OAxY8ZcuXKFfA2or68PCgpCCMnl8pUrV+Kf3jjk5+fjkWdEItHEiRNJnhKJhO0Lht082fZ3Nh+Koo4cOWJbqcFgWLRokUAgGD169E8//cTYGhwcHBwc3G7JHOWzXWeO6wC61saNG1NTU12dBZcdO3YsW7bM1VnYp9PpyPvTz8+P8QeCn58f3hQWFlZSUoIQ+v777/39/XHQ29u7qakJLzc2Nvr4+JBiEULNzc221SGEZs2atWbNGqvVSoLOliORSBoaGvDy3bt3Sf5SqZSePB4ekzsfuw4fPow/3Ly8vEaOHFlWVkYvx3b/ysrKWbNmSaVSgUAQGhqKfvtDpO3+HHlyY5TGdh06zLYEtnPpb59pPXMLFxYWTpkyBS/DzWibrSP1dqDY6upqvNzQ0GB7MzJKlslkpN76+nruW8Y28jDeRImJiRkZGa7OAnQ93G/VbDa7OpHuwph/DpPL5a7OC3A5dOhQeHi4q7MAAICuAT3b+hEej+fj4yOTyVydCAAAADvS0tLMZvOlS5euX78uEAjw489EUVGRRqOhPx+NWDpVUCzPU7M9l+1sZwvo/EFKQPDcOugTtFotebviBa1Wizc988wzhYWFCKH8/PzAwEByCMd7WygU2o2/+OKLly5dIp8YHS4HI8PcIYTGjRtH//MG/xTuYDl0s2fPNpvNBoPh+++/j4uLi4iI4K46JiYmJCSkoqJCr9cfOHCg3VS58+wY+nXoYS6sug+Dm9FxXfUOtFqtbm7t/CpCHzevC/9nh5sIgC53584d298979y54+q8AAAA9BfQ2NaPuLm5iUSiQYMGuToRAADo1xQKBWPmFYVCgRD67LPPNm/eLJPJPDw85s+fjx/ZJtLT0wUCQVRUlMViwZGrV6/+8Y9/fOyxxyQSyVtvvWUwGBj7i8Vi+v55eXkpKSmPPPKIQCB46aWXyJ4FBQWTJ0/m8/kikSg6Ovrzzz/nzv/TTz8tLCx0d3cPCAhIS0sjvb7YcOdpy9l8OPJUqVR8Pt/Ly2v58uWMrefPnz9//nzHSqazvc6gxzQ1NTU1Nbk6iz7u/7F373FNXPn/+E9U0sVwS0qCgEhvorXqVgWrVqqWi4KXrdYWP62iq7Wt97aKUGVpbRVEsAp+uvtB8WHVthZbzaogLaJ2pYufr/ZmCyhY3aoEkXBJJSAkQn5/nF/nM51kJhcSwuX1/MPH5MzM+7znzCSGnDlnRowYQd/jR44cYZ5hFhsbu2fPHvoDVlZW1oIFCywJtWjRovT09Jdffpn5ELA2zrx587Zv367X66uqqlJTU5nyqKio7OzsysrKDs6ULpfLL1y40KdPn4CAgKFDh7If4+Ti4qJUKvV6fX5+fnh4OC1UqVTBwcEeHh5lZWWZmZnsUCa3t1eefO1AWfXYKmuZPC7oHL3qzWhtvZRVF/+ePXsqKysbGhq2bNny4osvCm8cExOzY8eO9vZ2rVabnZ1tS+q/w5sIAAAAoAdDZxsAAECn4rtv/f79+wJ79evXj1Ni4aAKBt992dYOtsDgj+5SdY936dKlS5cuOTuLHsV48qWRI0devXp15MiRly9fZn7f37x5s1qtDggICAgIqKur27x5My1n30PA/sBhlkeOHJmfn+/u7n7y5Ekb4qSlpVVWVkql0qioqMWLFzNbrl69Wq1Wh4aGymSyqVOnbt26VTgOn4cffvjHH38MCgoSiUQxMTE5OTnMKjp6VSqVZmdn7927lxZmZWUtWbJEJpMlJCTExsayj9Tk9nx5CuDcmSHcDlRbW5vlI29MxmdKOP/yHRc4Qi9/MxJHXvx0l0WLFs2ZM+eRRx7RarXsN6PJerdu3VpdXe3t7T1x4sSZM2eazRNvIgAAAIDeSYQJjgAAAByttrY2MDCQPU6CECIS/eF/4WXLlkml0uTkZLVa/c033xw5cuTjjz823pJZVigUhw4devrppysqKj777LOUlBTjbdjLq1ev9vT03LRpU3Nzc2Zm5saNG2n5jh073N3dp02b5ufnZ3YmJUKIXC7Py8sbMWKEq6urUqmMiYlh+pPEYnFOTs6MGTMKCwtTUlLOnTsnnKfJ7a3Nh689ly9fLpVK3333XbVavW3btoyMDPZaevP7hQsXbI5PeNqZ77jA7iZNmqTT6c6fP+/sRHhlZGSUlpbu3r3b2YmYUFtbSx9T5OxEALquznkL5+Xlbd++/cyZMw6tBexCr9fn5uYmJiaWlpY6OxfHWrVqVUBAwPr1652dCNiZXq8Xi8U6nY4+oxSgKzh+/PiuXbtOnTrl7EQAAOwAI9sAAACcg3Pfenp6ukajUSgUTzzxxLFjx9LS0mg53/3RfIMq+P7luy/b2sEWGPzBFJr8l++4AAAAoJvauHGjSCRyc3M7cOAAekYBAAAAwCSMbAMAAHA4kyPbnKX33JcNPRtGtnUERrYBmIWRbdBrYWRbT+W4kW30njN8rzDmiJZJTExk5vs9dOjQ/Pnz29vbXVxccnJyZs+ezamaEOLp6VlcXDxs2DBCyLlz53bv3t3U1PTPf/6Tsws7bGfCyDYA6Ekwsg0AAKC3wH3ZANDL+fj4iIz4+PggH4BOhosfoIvw9fW1fOPm5maT5XydSXzbm+Tu7m75xt2F3Tsgr1692tDQwLxcsWJFbm6uwWCgU2sY124wGDQaDe1pI4S8+uqru3btUiqVBoPh66+/XrBgAbNxQ0PD9evX7ZstAEBvg842AACA3mLLli0Gg6G1tVWpVOL3LADohe7cuWMwcufOHeQD0Mlw8QN0EdXV1eyXSqVSLBaLRCIPD4+JEycGBQXRcrVaHRISIpFIfHx8Vq5cabYXjW/7lpaWNWvW+Pj4+Pr6fvTRR0x8mUym1WqZrncmjl6vT0hIGDJkSFBQ0Pr165lnRdPNNBrNkiVL3N3d4+Li2LWPHTuWPqFZGKc6zstVq1YNGTJEIpFEREScPXtWuF6+46LOnDkzcOBAsVisVCqZQqviM/bs2RMZGcm8rK+vj4qKIoRMnz591KhRZg+5tbVVKpXS5QkTJrBnXgkLC8vKyjIbAQAABKCzDQAAALi62v3mXS0fAAAAAICeJzY2dsaMGXq9vrq6et26dRqNhpbHxcWlp6frdLpr166FhYUZdwJx8G2/YcMGnU5XUlJy/fp1iURSX19Py+kC0/XOxElMTPT39y8vL6+oqPD3909MTKTldJs5c+aEhoaqVKpp06axa+cE4WMwGMaNG1dcXExfFhcXjx8/ntkxJSWlvLxco9EkJCTMmjVLuF6+46Ly8/PLy8s5g8+sis8oKCh4/PHHjY/l9OnTeXl57BJXV1f6RxO7k+/WrVt8rTF06NCCggL+1gIAAPPwzLbeor29/d69e3379v3Tn/7k7FwAAHqdLvXMNoCeAc9s6wg8sw3ALDyzDXotPLOtp2I/s83f37+qqoq91s/PT6VSnThx4vnnn9fr9d7e3nK5fP/+/SEhIYSQBx98kN2BJJfLa2pq2LuLRH/4gZFve19f39LSUplMZpweJwI1YMCAK1eueHl5EUIaGhqGDRt2+/ZtZvvGxkY3NzebGuP/V1BQkJaWRh8YFhERsX79+oiICELI1atX33rrreLi4tbW1tGjRxcVFTG5maxX+Lj0en2/fv3Yx2htfIanp6dKpeKsLSwsHD58+IABA0zucvPmzccee4wOCuQ0Mvvl3bt3Bw0axHSvdho8sw0AehKMbOst9Hp9VVUV86UEAAAAAAAAAAB6IZVKxQz/ogsqlYoQMnPmTJ1Op9Vqv//++wULFjAzFo4ZM4Y96Sunp80Y3/b379+3JD1mukgi+NizDva0EUIiIyPv3btXVFRUVFTU0tJCe9oIIS+++OLEiRMvX76s0WgOHz5stl7h46I9bWzWxmcYt8aBAwcCAwP5etoIIYMGDdLr9Xxr29raBIIDAIBV0NnWW9D/Pvv27evsRAAAAACgF+E8fKXLxnQ6gSOyy/H2vBaDToOLE6D3kMvlFy5c6NOnT0BAwNChQ5mZOaKiorKzsysrK9vb2y2Jw7f93Llz09PTCSFqtVqpVM6fP59Z5eLiolQq9Xp9fn5+eHg4LYyNjd2zZw/tscvKylqwYIEltVv4zDZq06ZNSUlJSUlJmzZtYgpVKlVwcLCHh0dZWVlmZqbZIALHZZK18RmBgYHsIYmff/75iBEjBg8eTP74WRoaGpqUlHTt2jVCiFKpdHFxoeWurq7MtJkXL1708PBgTlBlZeUjjzxieSYAAGAMnW29BTrbAAAAAECAr6+vI8I64i5p45jNzc0dD+vu7t7xIJQN+Qg0lF3a0PIgdmwHsI3xmxEXJ4WLE8DuFAoF++XDDz/8448/BgUFiUSimJiYnJwcWr569Wq1Wh0aGiqTyaZOnbp161ZmF6bTnd37zrd9enq6RqNRKBRPPPHEsWPH0tLSmDj0kWZSqTQ7O3vv3r20cPPmzWq1OiAgICAgoK6ubvPmzUylTI3GHfZtbW2Wf7CEhYW1t7cbDIZnn32WKczKylqyZIlMJktISIiNjWXXaLJevuPi7MX8a218RmRk5JUrV5iXixYtGj16tPHGSqXyxo0bY8aM4ZzHTz75ZPLkySKRSC6XP/fccydOnGD64a5cuTJ16lQLGw0AAEwzQO9QX19fUVFx+/ZtZycCANAbqdXq/v37OzsLgB7lmWeeGTdunLOzELJz586lS5c6OwvT1Gq18R8CnBL23wvsZZ1OFx8fHxQUNHjw4Li4uNbWVvb2DQ0NixcvdnNzW7duHScy528Qa+NotdqFCxdKJJInn3zy559/ZrKtqakJDg4mhCgUihUrVjQ1NZnNxySpVGryryT6Mi8vz2Aw5OXlEUIGDhzIlBcWFsrl8jFjxvz666/C+QigYTntz3e8VEhISEhIiNnIAvFpSWZmpr+/v4uLy9GjR4XboRfqnLdwbm7ulClTOIWclsfFKdwOYHcrV65MTU11dhZgf3RuRp1O5+xEwHbl5eXLly93ROTly5dfu3bNEZGFHTt2LDw8vPPrBQBwBIxs6y3oyDbjeaIBAKCL65GzpXUmTH4FYBuDwaBQKBobG+myh4cHnUsqMTHR39+/vLy8oqLC398/MTGR2Z4QMmfOnNDQUJVKNW3aNE7A7OzsJUuW0N/3bYgTHx/v6+tbX19/6tSpEydOMGHj4uLS09N1Ot21a9fCwsLi4uIszIejvr6eGHVjEELOnz8/bty46OhoQkhUVFRwcDDtHqDb1NXV3bp1Kz4+/s033xTOR0B0dLTB6AZ8vuNljs54F6vi05KqqqqysjI6mEC4HcCJcHEKtwMAQO8RFBTk5eXliMgymQzTSAIAdJAIX1J7iTt37ty9e9fb25tzPyAAAHSC2trawMBA5pkHlK+v7+3bty3ZXSRy+P/Xzc3N/fv3d2gVVum0fDqhbRnu7u603wLsYtKkSU1NTVlZWc5OhNdnn33222+/7d6929mJmFBbWyuXy+nF7+/vz374ByHEz89PpVIRQsLDw99+++3w8PDvv//+L3/5y82bNwkhAwYMuHLlCv2hp6GhYdiwYcxHmUgkamxsdHNz41QnEolmzJgxePDg7WaVWdMAACAASURBVNu3M/3T1saRyWS//PKLTCYjhNTV1Xl7e9P8H3zwQfoTPCWXy2tqaoTz4cP3gTBnzpz58+fPmTPniy++OHLkyKFDh5jtGxoavLy8tFqtn5/f3bt3hfOxqna+47WZ8dGxS/iWe7OMjIzS0lJHv4Xz8vK2b99+5swZIvhmxMXJtyU4wqpVqwICAtavX+/sRMDO9Hq9WCzW6XTMzIEATnf8+PFdu3adOnXK2YkAANgBxjn1Fvfv3yd4ZhsAQFdSXV3NftnS0hIfH//ZZ5/16dMnJSUlOTm5oqKCWXvmzJnY2NiampqcnJzZs2fTwlWrVhUUFFRWVk6YMGHDhg1Tpkwhvw+0yszMTE1NZW/f3Ny8Zs2aL7744uGHHz506NDQoUMJIQaDQa1WR0dHf/vttwqF4oUXXti2bZtALxcN/sEHHyQlJX311VeXL19+4403Dhw4QKtwaD40TkNDw9q1aw8fPvz666+zn/Fg0smTJ6dPn07+OH9dU1PTihUrvvjii8GDBx88eJCzC32U+oULF4QjC8TnO16ZTKbVapluBvxWaBf19fUvvviis7MQwgzI6MroT/nE1K/YI0eOzM3NJYQcPXp0yJAhTLnABczXs/X8889/+umnGo2GfeOXDXEoOhEWNWbMmIKCAtviCFchFovpcnJy8ty5c6dPn/7ee+8dOXLE5PbMBBLC+dicjH0DWlU10w7gaAJvRjZcnEzVuDgBAAAAoOvANJK9BaaRBADo4jZs2KDT6UpKSq5fvy6RSNj3nhNC8vPzy8vL2ZMpEUJSUlLKy8s1Gk1CQsKsWbNoId/kS/Hx8TKZrLq6uqio6Msvv2S2tGpSKbpLW1vbvn37pk+fXlJSsm/fPqYKh+Zj7YxwBJNf9QI+Pj7Xurbk5GRnN1KHjBgxgs5Kd+TIkaCgIFoYGxu7Z88eeiVnZWUtWLDAklCLFi1KT09/+eWXtVqtbXHmzZu3fft2vV5fVVWVmprKlEdFRWVnZ1dWVra3t9tykCwuLi5KpVKv1+fn54eHhzPlQ4cOHT9+/MyZM5966qnBgwezd/nmm290Ol1+fn5ERIR98+E7Xmrs2LH05gBH4GsHcCJcnBQuTgAAAADouvge5gY9zPXr1ysqKlpaWpydCABAb6RWq/v370+X/fz8OP8X+/n5GQyGAQMG1NXVmdydEKLX65llulBRUTFjxgyZTCaRSEJDQ8kfO3KMl+VyOROfThtFl+k0UAw6s5wAwuqRYi90Qj6EkMbGRuH0BBKmpFIpU29tbW3HvwsZRzB77GAXzzzzzLhx45ydRXelVquNL0iFQsEp+fbbbwkhI0eOJITs3LmTFra2tq5bt87f39/f33/dunWtra20nO+vDPZLupyXl2dDHK1WGxsbK5FIRo4ceenSJWbt/fv3k5OTH3roIU9Pz8jIyJSUFOE4Ao4ePeri4iKRSObMmVNRUcFede3atQceeODmzZvsQkLId999N3DgwPHjx1dWVtJCvnwEmEyV73ip0aNHBwcHW3JQfPHZLzmrBNqhV9m5c+fSpUsdXUtubu6UKVM4hcZvRlycZtsB7GjlypWpqanOzgLsjw5F1el0zk4E4P8cO3YsPDzc2VkAANgHZjzvLX755ReDwfDwww9jcBsAQOcz+cw2ziRRcrm8vLyc09VkvCWzPGrUqHnz5v31r3+VyWS1tbW+vr7G27CXfXx8Ll++TOPX1NT4+PjQ8sjISKsmlWICchY6IR/bntQi8KSZ27dv055Oa2MKZ2XJk2Yw+VXHTZo0SafTnT9/3tmJdEvsZ7aBJXbt2nX9+vUdO3awC/H4qJ6t85/ZZhtcnGB3eGZbT4VntkEXhGe2AUBPgmkke4W2tjb6txae2QYA0GXNnTs3PT2dEKJWq5VK5fz584W3V6lUwcHBHh4eZWVlmZmZZuPHxMTs2LGjvb1dq9VmZ2cz5faaVKqr5cMHk18BgLVEItHq1at37tzJKWT+BXAWXJwAAAAAAF0EBjn1CvSBbX379sVfXAAAXYdCoWC/TE9Pj4uLo4XR0dFpaWm0nPnJzGAwsJezsrKWLFlSU1MzefLkDz74ICUlxXgb9vLWrVvXrFnj7e09aNCggwcPbty4kcZfvXr1tm3bQkNDGxoannrqqSlTpiQkJPDlzA5I/njjvKPz4fx0aMkN+8zGdIHukpaWtnz5cqlU+uijjx48eDAjI4N9FG1tbX36WHorksn4fMdLCKGPcBOLxVOnTt27d6+FtQCA05n8wMGwod6gvr7e+LYMYWKxWCKRWL59dXW1lUn9AS5OAOjiutRAW/aX9p7BEUeUmJi4efNmunzo0KH58+e3t7e7uLjk5OTMnj2bUzUhxNPTs7i4eNiwYYSQc+fO7d69u6mp6Z///CdnF3ZYAICeqgv9nweOc+/evcrKSrFYHBgY6OxcAAB6I5PTSDqLXq/Pzc1NTEwsLS11di6EdL18oLvANJId0WunkfTx8aEPiWRTKBR37tzpkfVCR2RkZHz99ddDhgyxfBetVmt8ooX179//5s2bHZlGsoNwcYIxTCPZU5mcRtLX1/f27dsdCevu7t7Y2Njh7DqJVZ1/zc3N/fv3d2g+HWff7syrV6/u3Lnzww8/pC9lMtknn3wSFRWlVCpjYmLoY/8E6h06dOj58+elUikhpLi4ODIyUqvV0lUrVqxYu3btI488wtkF00gCQE+CkW29wv379wnmkAQA6PU2btyYnJwsFoujo6Od+Ltel80Hup0ff/zx0UcfdXYW3ZKDpmnt+pzVf4B+i25KLpdv3brVoVXQZ7Y5tAphuDgBejnj8bWrVq0qKCiorKycMGHChg0bpkyZQghpaWmJj4//7LPP+vTpk5KSkpycXFFRQQiRyWRardbk5BMnT56cPn06p1Cv1//tb39TKpUGg+G5557bvHkzfYwxjZCZmZmamlpTU8MZRMXBqY7z0mT+wqHYceiyWq2Ojo7+9ttvFQrFCy+8sG3bNnavG512/sKFCwKRbcuTbtPQ0LB27drDhw+//vrrdL4Tvvanzpw5Exsby2k3q+Iz9uzZExkZybysr6+nC9OnTx81apTw8RJCWltbaU8bIWTChAnsm03DwsKysrKsHS8OANC9oLOtV6DTSPbrh9MNANCrbdmyZcuWLc7O4v90tXygexk3btywYcPi4uKcnUi3dO/eveHDhzs7CwAAAOhyUlJSdu3apdfrz507N2vWLDpqbcOGDTqdrqSkxM3NLTc3l+mDqa+v5xtZFR0dzUyrzkhMTBw4cGB5eTkhJCMjIzExcdu2bYQQumVVVVVZWdnp06c5g6g4DAbD+PHjP/jgA/qyuLh47dq1xcXFAvkLhGL3gTHLcXFx6enpEyZMaG1tPXXqVFxcHDPYi1g8baMNedIc5syZExsbu2PHjosXL9KN+dqfys/PLy8vLygoYLebVfEZBQUFr7zyivGxnD59Oi8vj13i6upKm4s9XeStW7f4WmPo0KHvv/8+OtsAoGfDNJK9Ql1dXX19vZeXl1wud3YuAAC9UZeaRtIS3WVSqe6SJzjCO++8o9PpUlJSnJ1It9Tc3CyRSPCHAICAjIyM0tLS3bt3O7QWOrINw7uhS8E0kj0VexpJf3//qqoq9lo/Pz+VSnX16tW33nqruLi4tbV19OjRRUVF9NuCr69vaWmpTCYzDis8jSFn7YABA65cueLl5UUIaWhoGDZsGDOJJXtLs1MjFhQUpKWl0bkHIyIi1q9fHxERQQjhy18gW5P1Pvjgg+wOLblcbu0swTbnKRKJGhsb3dzc2HGE21+v19Pb65n8rY3P8PT0VKlUnLWFhYXDhw8fMGCAyV1u3rz52GOP0U4+TvOyX969e3fQoEEajYazO6aRBICepI+zE4DOQEe2YRpJAACw0J07dwxGumAPVnfJEwAAAACg61CpVPSbMyGELqhUKkLIiy++OHHixMuXL2s0msOHDzPb06eTmCUwHI1hl3t9IiMj7927V1RUVFRU1NLSQnuwCH/+lmBPsj1mzBj23xe29bTZnKdxT5hw+xtPZGVtfIbx2Tlw4EBgYCBfTxshZNCgQXq9nm8t/UGSLzgAQA+DzrZeAc9sAwAAAAAAAAAAASqVKjg42MPDo6ysLDMzkymfO3dueno6IUStViuVyvnz5zOrXFxclEqlXq/Pz88PDw8Xjh8bG7tnzx7ag5WVlbVgwQKbU920aVNSUlJSUtKmTZvM5i+A5n/79u033niDKYyKisrOzq6srDT5mNuxY8fSx7Z1Wp4C7W+SDe1ABQYGsoc8fv755yNGjBg8eDBhPXOOEBIaGpqUlHTt2jVCiFKpdHFxoeWurq7MPJkXL1708PBgGrCysvKRRx6xPBMAgO4InW29Ap7ZBgAAAABOIRKJOM9r6ZoxuyyBI7VLO/SelgSwL0d8ECUmJjLLZWVlL730kqurq1gsViqVTHlhYaFYLKa1i8XiwsJCWn7u3Ln58+fPnj2bljO78JVzqoNeS6FQsF9mZWUtWbJEJpMlJCTExsaS3/+bSE9P12g0CoXiiSeeOHbsWFpaGrNLTk5OTEyMVCrNzs7eu3cvU868R9hvls2bN6vV6oCAgICAgLq6us2bNzMbm/xXQFhYWHt7u8FgePbZZ83mz5cPzX/evHkzZ86kzyqjq1avXq1Wq0NDQ2Uy2dSpU7du3cquuq2tzfJBWlblyc6QnSRf+/O1m7XxGZGRkVeuXGFeLlq0aPTo0cYbK5XKGzdujBkzRiQSxcTE5OTk0PJPPvlk8uTJIpFILpc/99xzJ06cYPrhrly5MnXqVAsbDQCgm8Iz23qFX3/9Va/XBwQE/OlPf3J2LgAAvVG3e2YbQNeHZ7Z1hMlntvn6+jLPTbEvs09e6XjM5ubm/v3727cKS1hVr7u7e2Njo30TcETb8nFE/l2ZE5/Z5rg3o8BJdNbF7Kw3r13Y9w149erVnTt3fvjhh/RleHj43/72t6effvrEiRMxMTHM7Hx+fn7fffedr68vIeT27dtjxoyhw1CGDh16/vx5qVRKCCkuLo6MjNRqtQLlhJAVK1asXbvWeKwJntnWU7Gf2ebsXKCLqqioyMjIYD6I7IjvAwfPbAOAngQj23oFmUwmk8nwdQoAoDvqUgM4OpKMyR2FAzr02DFYBICjurqa/ZJ91zN7Wa/XJyQkDBkyJCgoaP369czvv3QDjUazZMkSd3f3uLg4TnwRiw1xmpqaFi1a5ObmNmrUqJKSEiasWq0OCQmRSCQ+Pj4rV65sbm62MB9jq1atGjJkiEQiiYiIOHv2LC1sbm5eunSpVCodPXp0eXk5k79wvbt27Ro4cCB7EIlMJtNqtQL3khs7efKk8cZ87UBZNbGVyfh2zB9sxnkztrS0rFmzxsfHx9fX96OPPgoKCqLlwm8iy0+ioy9mvjjC9Rp/+FAWXuScHTkvTb7Z+T40+NqfOnPmDOe4rI3P2LNnT2RkJPOysLBw0qRJffr06dev3/Dhw5nytra2hoYGutzc3Mw8D6m1tZX2qBFCJkyYwNzjxVdOCAkLC8vKyjLbmADQewQFBXl5eTkiskwmwzSSANDjobOtV/Dw8HjwwQfxzDYAgC6F3pJsVucMWWB+4RLWkWRM7isc0HithXnanI/ZVXaJz+Hu7t7x6gDszmAwKBQKOnjFYDB4eHjQn2gTExP9/f3Ly8srKir8/f2ZWcjoNT9nzpzQ0FCVSjVt2jROwOzs7CVLljQ1NdEtrY0THx/v6+tbX19/6tSpEydOMGHj4uLS09N1Ot21a9fCwsKY36/N5mMsJSWlvLxco9EkJCTMmjWLqVcmk1VXVxcVFX355ZdMZOF6q6qqysrK6MxatLy+vp6upSw5BdHR0cZb8rUDU7vlHz4m49sxf7CXDRs26HS6kpKS69evSyQSei6IuTeR5SfR0RczXxyBek1++DBrLax03LhxzKODiouLx48fz+xo8s3O96HB1/5Ufn5+eXk5+7isjc8oKCh4/PHHOYXe3t7bt2/Pz89nSvbs2bNgwYIXXnhhxYoVCxcu/J//+R9afuvWLZNNwVdOCBk6dGhBQQHfWgDonbZs2eKIsO+//74jwgIAdC0GAAAAcDC1Wt2/f39OIed/4Xv37q1evVqhUAwYMGDfvn2DBw9mb3n69Gl/f38XF5ejR48y5StXrgwKCurfv394ePiZM2eYjQkhmZmZnO2bmppeeeUVLy+vUaNGMRPxGwyGmpqa4OBgQohCoVixYgX9HVwAIeTGjRtPPfWUl5fXX//6V61Wy67XeNlgMOTl5Ql86+CUa7XahQsXSiSSJ5988ueff2bW8uVJIzc0NCxevNjNzW3dunXC+fPlw1cvFRISEhISYjayQHy+88LcbI4vZtZKSkpKSEhwdhbdFf3lmi77+flx/kDw8/Ojq8LCwujTgL7//vuAgABa6OPj09DQQJfr6+sHDBjAhCWENDY2GldHCJkxY8abb75Jn1liWxypVFpXV0eXa2trmfxlMhk7eblcbjYfkyoqKmbMmCGTySQSSWhoKBNfLpcz9dbU1FhYr9lly3H24msHmxlHsG/+3dfOnTuXLl3q6Fpyc3OnTJlCl/nejAMGDGBOOpvwm8jsMqMTLmaT+wrUa/LDx1pfffVVeHg4XQ4PDy8oKKDLfG92A8+HBl/70+31ej3nuKyNz/Dw8DBeq9Fo1q5du2HDBqYkLi7uhx9+oMvnz5+Pj4/nJMB5yVduMBh+++03T09P40xWrlyZmprKlyd0X3T8q06nc3YiluI8T45SKBTOzgvs6dixY8xnNQBAd4eRbQAAAF2Cfe+bNr5/3NrBGQI++uijL7744tq1a25ubszzPAys28zZy4Rn8ASfThi8gsEiAGwqlYq5/OiCSqWiq0aOHJmbm0sIOXr06JAhQ5hdBK5VNzc3k+XPP/98SUmJRqNhF9oQh2KmyyOEjBkzhv3nDe0PszAO24svvjhx4sTLly9rNJrDhw8z5ez569gJC9drFvsQbGaXIN2u6h6M7814//59vl068h8HcxKddTEL1Mv34WOVyMjIe/fuFRUVFRUVtbS0RERE0HK+Nztl/KEh0P6EkH79+nFKrI3PMHk2PT0933vvvR07djAlH3/8MTOrZHBw8IEDB/gCMjNMCpTjuwd0ZXfu3DH+HfPOnTvOzgsAAMA07vdCAAAAcCh/f3/6HHvy+2+4fn5+KpXq0KFDpaWl9C7vF1544YUXXmDvlZKS0q9fv9mzZ+v1elpy9erVt956q7i4uLW1dfTo0cyz7pntCSHs7XNycq5cufLAAw888MADL7300htvvEHLT5w4sX//fmZHuVxu9oHYS5Ys8ff3J4S8++67Q4cOte8DtD/99NNffvlFLBZ7e3u/+uqrGzZssCTP48eP01+vwsLC7FsvdfHiRdvCchifF4CubMSIEfSiPXLkyJQpU2hhbGzsnj17aId3VlbWggULLAm1aNGi0aNHv/zyy4cPH6bvVmvjzJs3b/v27e+++65ard62bRtTHhUVlZ2dPW3aND8/vz59bL+VUKVSBQcHe3h4lJWVffbZZ0x5TEzMjh07Nm3a1NzcnJ2d3ZF6XVxclErljBkzCgsLU1JSzp07Z0OefO1A0WdZXbhwwYbIZtklf7DB3Llz09PTk5OT1Wr1N998c+TIkY8//pjY9GY0eRKddTEL1Gvyw4ey6iLftGlTUlISXWAK+d7sfPjan4+18RmBgYFVVVXMM+Fef/31FStWDB8+/KuvvmJ3+Lm5ubW2ttJOvtbWVqb3ztXVtbi4eMKECYSQixcvenh4tLe39+3bl6+cEFJZWYlHKPUqtG/1008/xUNGoOv44Ycf7PikAAAA50JnGwAAQKdihoyIRCL23cQ23Dc9b968vXv3ymSy2tpas0+AExicYfPjOtrb203+Ktfe3m5bQA7O4BWBPC0fvGJtvZ1Mp9OJxWJn1Q69nPFkTSNHjrx69erIkSN/+umn1157jRZu3rx548aNAQEBhJD/+q//Yh7sQT9kmI8a5nOGKRk5cmR+fr67u3teXl50dLS1cdLS0pYvXy6VSh999NGDBw9mZGTQT9HVq1dv27YtNDS0oaHhqaeemjJlSkJCgkAcPllZWUuWLKmpqZk8efIHH3yQkpJC42/dunXNmjXe3t6DBg06ePDgxo0b6fZm6zUYDOxlQggd1SoWi6dOnbp3716zZ4RJni7QIHztQLdsa2uzvMfRZHw75g8247wZ09PT4+LiaGF0dHRaWhotN/smsvAkOvpi5ovDVy/h+fChrLrIw8LC3nvvPZFI9OyzzzKFfG92vg8NvvbnOy5r4zMiIyOvXLnCdLYtX7582bJl//u//9unT5+cnBxms9TUVKlUSu/acXFxYVZ98sknkydP1uv13t7eYrH4xIkTLi4uAuWEkCtXrkydOtXCxoQegA5q3Lx5M/vvAgDn0mq1rq6uzs4CAMA+RGb/7AQAAIAOqq2tDQwMpA9JYnA625YtWyaVSk3eN83ekllWKBSHDh16+umnKyoqPvvss5SUFONt2MurV6/29PSkgzMyMzM3btxIy3fs2OHu7m75/ewikeidd9555ZVXJBLJe++919bWlpmZSVeJxeKcnJxx48alpKTs2rWL8x2Dc7x85fRHZGbQRkZGhtk8+SKbPRBL6qVsGCxinJXJ80J+bzcMFrHWO++8o9Pp6NAHsFZzc7NEIsEfAlbR6/W5ubmJiYmlpaXOzgU6Q0ZGRmlp6e7dux1aS15e3vbt28+cOePQWqBbqKioyMjIsO+EAcJWrFixdu1a48Ftq1atCggIYKYKhx5Dr9eLxWKdTsd0uAI43fHjx3ft2nXq1ClnJwIAYAd4ZhsAAIBzGN+3rtFoFArFE088cezYMeP7pjn/0vumZTJZQkJCbGyswJb0361bt1ZXV3t7e0+cOHHmzJlMvatXr1ar1aGhoTKZbOrUqVu3bhXImYZatGjRnDlzHnnkEa1Wy94+Jydn3rx5M2fOfOWVVwjr3m2RSMRkwr6R1mR5WlpaZWWlVCqNiopavHgxE4cvT3YEC+/Stapeqq2tzfJuCZPx+c4L+X18gFQqzc7OxmARgC5o48aNIpHIzc3twIED6BQBAAcJCgry8vLqzBplMhmmkQQAAACwF4xsAwAAcDiTI9ucBYMzoGfAyLaOwMg2ALMwsg16LYxs66noyLY7d+5gZBt0Hfn5+fv27cPINgDoGfDMtp5Pp9O1tbWJxWI8AhcAoJfbuHFjcnKyWCyOjo7G73oA0Av5+PjU1NRwChUKxZ07d5APQEfgYgboLnx8fJydAsAfhIeHOzsFAAD7QGdbz1dfX9/Y2CiXyzt5SgoAAOhqtmzZsmXLFmdnAQDgNF3td/+ulg+AzXAxA3R9Li4uGNQOAADgOHhmW8/Xt29fsVjcrx86VgEAwFI+Pj4iI93oNtjunj8AAAAAAAAAAHQj6IDp+eRyubNTAACAbqa735/e3fMHAAAAAAAAAIBuBCPbAAAAAAAAAAAAAAAAAGyEzjYAAAAAALAOnZ21d9buIGhPAAAAAACA7gudbQAAAAAAQHx9fS3f2GAwOC4TQkhzc7Pjand3d+/I7jbHEd7eqoMSbh9rWVi1QP72zQd6FeG+3q7cE+yI3BITE5nlsrKyl156ydXVVSwWK5VKprywsFAsFtPaxWJxYWEhLT937tz8+fNnz55Ny5ld+Mo51QEAAABAB6GzDQAAAAAASHV1Nfsl/SX39OnTCoUiODj4xo0bZiOsWrVqyJAhEokkIiLi7Nmz7Di7du0aOHAg+3devnK1Wh0SEiKRSHx8fFauXMn04jQ1NS1atMjNzW3UqFElJSVmk1EqlfT3aA8Pj4kTJwYFBdFymUym1WpFv7Mwf41Gs2TJEnd397i4OLNxTBLY/uTJk5xC+nLHjh3u7u7FxcV79+51d3enTcTXPtTYsWPHjh1rNhki2J4m24Evf+F8wDZW9XxbxV49pvbqsSbm+nod3a/fEXbP7erVqw0NDczL1atXv/baa42NjTk5OTExMUx5bGzsjRs3DAaDwWC4ceNGbGwsLX/11Vd37dqlVCoNBsPXX3+9YMEC4XJCSENDw/Xr1+17FAAAAAC9FjrbAAAAoDM4+r71LnvnO0A3RX9Hrquru3XrVnx8/Jtvvml2l5SUlPLyco1Gk5CQMGvWLHacqqqqsrIy9k/GfOVxcXHp6ek6ne7atWthYWFM51Z8fLyvr299ff2pU6dOnDhhNpnY2NgZM2bo9frq6up169ZpNBpaXl9fT2unLMx/zpw5oaGhKpVq2rRpZuOYJLB9dHQ0p4S+bGtr27dv3/Tp00tKSvbt20ebiK99mB0t7AAQaE+T7cCXv3A+YBtOz3dLS8uaNWt8fHx8fX0/+ugjpudYr9cnJCQMGTIkKCho/fr1Op2OlvP1ZFvbY2ptHD58efIR7lm3sEeZkx7npVU963ztT505c4bTPtbGZ+zZsycyMpJ5WVhYOGnSpD59+vTr12/48OFMeVtbG9Mn19zc3NbWRpdbW1ulUildnjBhQlNTk3A5ISQsLCwrK8tsYwIAAACARQwAAADgYGq1un///pzCAQMGdDCsm5sb36qmpqYOBu9knfmdRKDdoBtJSkpKSEhwdhbdFf2xlS77+flx/kDw8/OjqwghDQ0NBoOhsbHR3d2dE4Tztq2oqJgxY4ZMJpNIJKGhoeSPHTOWL8tkMnYycrmclkul0rq6OrpcW1tr9kPj+PHjLi4uhBBvb+/HH3/8woULfJlbkn9jY6PxLtZ+cAlvz1lLWD1n7AW+9rEWX3taeB4Z9sqnC9q5c+fSpUsdXUtubu6UKVM4hZymfvPNN19//fWamprm5ubDhw8/+OCDtHz9+vWZmZlMtnFxcewICQkJv/3229GjR11cXPgiUwsXLvz66691Ol1jY+PRo0eXL19uWxw+AnmajLZixYqEOtILNwAAIABJREFUhITW1la1Wp2cnMxZGxwcHBwcbEm948aNKy4upsvFxcXjx49nVtF3tE6nKywsZH8rIIRMmTJl3759v/32W2FhIS3ka3+6/bp167RaLad9rIrP+POf/1xeXs4plEqlkyZNqq6uZkqOHTs2evTouXPnLl++/Omnnz569Cgt79u3L3tHpt34yg0GQ2lp6ZNPPmnUcoaVK1empqYalwMAAACAAHS2AQAAOJzJzjbOj0f37t1bvXq1QqEYMGDAvn37Bg8ezKxauXJlUFBQ//79w8PDz5w5QwuZm5Q5d8/U1NQEBwcTQhQKxYoVK5het6ampldeecXLy2vUqFFXrlxh9tLpdPHx8UFBQYMHD46Li2ttbWXSo7+zL1682M3Nbd26dezyvLw8g8GQl5dHCBk4cKDw4dPNOMer1WoXLlwokUiefPLJn3/+mbM2JCQkJCREOKxwfFqSmZnp7+/v4uLC/BTF127Q7aCzrSPYnW0MkyVMZ5tUKhXe/sknn9y6deudO3f0ev3t27dt7myLiIgwmTO7c6iqqsrC969Wq71582ZycrKXl5fJepkPPQvzZzMZR4Dw9hZ2tvG1j7X42tPCdmDyt1c+XVDnd7bx9XwPGDCAOVlsPj4+9B1qMBjq6+vZN/FY8qZjCPSYWhWHj0CeJqNZ27PO56uvvgoPD6fL4eHhBQUFdNnannW+9qfb6/V6zlHY0HNPeXh4GK/VaDRr167dsGEDUxIXF/fDDz/Q5fPnz8fHx3MS4LzkKzcYDL/99punp6dxJuhsAwAAALABppEEAADoEjZs2KDT6UpKSq5fvy6RSOiEXZRdZvSKj4+XyWTV1dVFRUVffvkl+X2assTERH9///Ly8oqKCn9//8TERLq9gWfmtPPnz48bNy46OpoQEhUVFRwczPR18TGeIY2YmxGOc1A2xDfwzFBn7cxvAL3cN998o9Pp8vPzIyIihLdUqVTBwcEeHh5lZWWZmZk21xgVFZWdnV1ZWdne3s4unzdv3vbt2/V6fVVVVWpqqtk4crn8woULffr0CQgIGDp0KHvmNBcXF6VSqdfr8/Pzw8PDbc7fZBw7bm8SX/tQlj+zja89BdrBZP7C+YBVVCoV838TXVCpVISQ+/fv8+3Skf/ImOkcx4wZw/6NoKamxrY4AmzO05LgfCIjI+/du1dUVFRUVNTS0sJ8iL344osTJ068fPmyRqM5fPgwZy83NzdOiUD7E0L69evHKbE2PsNkK3l6er733ns7duxgSj7++GNmVsng4OADBw7wBWRmmBQox3chAAAAALtxSBcedBl379799ddf1Wq1sxMBAOjV2CPbrL1v3V4zesnlciY+/R2NLgvfF2/y/uvZs2cfOXLEYDB8/vnn8+bNs7ARiGPuW+eLb7DT/fjQZWFkW0eYHNmmUCg4JYSQ7777buDAgePHj6+srGSXG/9BcfTo0cDAQFdX16ioqMuXLzOr2JtZsnz//v3k5OSHHnrI09MzMjIyJSWFxtdqtbGxsRKJZOTIkZcuXTL7t0xISEhWVtbAgQMJIezhrTRVFxcXiUQyZ86ciooKC/M3rtFkHAF82xtXYbxs+P2zi699qNGjR1s4wx5fe/K1A1/+wvl0a11nGsnXX3/97bffNhgMNTU1R48effnll2l5XFxcampqe3t7e3t7SkoKZxpJk8v0vaDT6U6ePBkaGkoLP/jggz179ty6dautrU0gE7Nx+AjkafJ4ly1bRu9AUqlUa9as4ay1aux7YWHh5MmTJ0+efPr0aaZQLpcXFhbeu3fv0qVLb7/9ttlvCHztb+BpH2vjM4YPH86eRvK111776aef2tvbOXNUDh48WKvV0mWtVsvMheDq6vrvf/+bLl+4cMHDw0On0wmUGzCNJAAAAIBd4cemHq6+vr6iooI9wzsAAHQ+S6aR9Pb2NtnZZq8ZvRQKBRP/zp077M62+vp6uiwwCRXb5cuXn3jiiZaWlhEjRljy+7LJaLbNCGd5fINlnW2WzPwGXRM62zrCZGebMfRMQ2/mxM42Ts+3VqtdtmyZXC6Xy+ULFy6sqqqi5a2trevWrfP39/f391+3bh1nImjjjluDlT2m1sbhw5engaczW7hn3fIeZeqZZ56ZNGkSu8TannW+9udrHxt67qm33nrr2LFjzMtLly49/fTTffv2NXm7AA3CXsWUe3t7+/n5/etf/xIuNxgMR44cYWahZENnGwAAAIANRAZMGtCj1dXV1dfXe3l5yeVyZ+cCANB71dbWBgYGsicxI4SIRH/4X3jZsmVSqTQ5OVmtVn/zzTdHjhz5+OOPCSEKheLQoUNPP/10RUXFZ599Rn8Co7uIxeKcnJwZM2YUFhampKScO3eOELJjxw53d/dp06b5+fn16fN/80WvXr3a09Nz06ZNzc3NmZmZGzdupHHWr1/v7e1NZ5tMTU2tr6/ftm2byQzZli5deuPGjcDAwD179ljYCJxoy5cvl0ql7777rlqt3rZtW0ZGBnstnQbtwoULFgY3mS27hL1sst2g23nnnXd0Ol1KSoqzE+mWmpubJRKJ8B8CIpGILuDvBeidMjIySktLd+/e7dBa8vLytm/ffubMGYfWAt1CRUVFRkbGhx9+2Gk1rlixYu3atY888ginfNWqVQEBAevXr++0TAAAAAB6ADyzrYejs7H37dvX2YkAAACXQqFgv0xPT9doNAqF4oknnjh27FhaWhotz8rKWrJkiUwmS0hIiI2NJaxfwOmjyKRSaXZ29t69e2nh6tWr1Wp1aGioTCabOnXq1q1bafnWrVurq6u9vb0nTpw4c+ZMpt7Nmzer1eqAgICAgIC6urrNmzfTclqL6Hec5N9+++1z584lJSVZcqRMBHaotLS0yspKqVQaFRW1ePFi9nERQuhMVpYE54vPlHD+JTztBgAczN15zk4EAKBXCAoK8vLy6swaZTKZcU8bAAAAANgGI9t6uOrq6sbGRrlc3snf2gEAgM3kyDZn0ev1ubm5iYmJpaWlNgfZtWvX9evXd+zYYcfEAKyCkW0dYcnItm7Bx8eHPoSSTaFQ0MlykQ90BEa2Qa+FkW0AAAAANujn7ATAsTCyDQAAGBs3bkxOThaLxdHR0R35XY8ZIobONgBwrq7WidXV8gHoNOhpBgAAAIBeDp1tPVx7ezshhP3MHgAA6LW2bNmyZcuWjsfpAaNhAAAAwI7QqQYAAAAAvRz6YHo4dLYBAEAn8PHxERnx8fFxdl4AAAAAAAAAAAAOh5FtPRztbGPm+wIAAHAE3M8OAAAAAAAAAAC9FgY89XB0pi+MbAMAAAAAAAAAAAAAAHAE9MH0cJhGEgAAAADsjs4W21Nrt0v8Htw+4BRKpVIsFstksilTpnBWWXW6hS+P3nzxOOLYExMTmeVDhw717dtXJBKJxWKlUmlctUgk8vLyKisro4Xnzp2bP3/+7NmzjXdhhwUAAACALgJ9MD2ZwWDAyDYAAAAAsISvr6/lG9MvmY7T3Nxsl9qF43Qwvru7e8eDULbl2cGqBfK3bz5gLZNvxpiYmJycnPr6+rNnz3JWmTzjfCdR+PJw3Fu7619Udj/2q1evNjQ0MC9XrFiRm5trMBhycnJiYmKMazcYDBqNZtiwYbTk1Vdf3bVrl1KpNBgMX3/99YIFC5iNGxoarl+/bt9sAQAAAKCD0AfTkzF/LfTamxMBAAAAwELV1dXsl3SYxenTpxUKRXBw8I0bN8xGWLVq1ZAhQyQSSUREBNMfQOPs2rVr4MCB7MEZfOVqtTokJEQikfj4+KxcuZL5gb6pqWnRokVubm6jRo0qKSkxmwxfHL56rY0vk8m0Wi0zHoW96uTJk5xC+nLHjh3u7u7FxcV79+51d3enVfPlSY0dO3bs2LFmkxHO3+R54ctfOB/oHJw3Y2BgoEgk0uv1c+bM4Zwv44uNWH8S+S4evjcLMXVROfoi51yrnJcCHz4ajWbJkiXu7u5xcXG0vKWlZc2aNT4+Pr6+vh999FFQUBC7ojNnzlhyvALxGXv27ImMjGRe1tfXR0VFEUKmT58+atQos4fc2toqlUrp8oQJE5qamphVYWFhWVlZZiMAAAAAQGdCZ1tPRueQ7M0zgQAAdEfd5UPb0ZNQdZd2AOip6G1bdXV1t27dio+Pf/PNN83ukpKSUl5ertFoEhISZs2axY5TVVVVVlbGHs/BVx4XF5eenq7T6a5duxYWFsb8fh0fH+/r61tfX3/q1KkTJ06YTYYvDl+91savr68nvw9G4QyIiY6O5pTQl21tbfv27Zs+fXpJScm+ffto1Xx5MjtaONpGIH+T54Uvf+F8wClu3LhBz5Hx+TK+2Ij1J5Hv4uF7sxBTF5WjL3KDwTBu3Lji4mL6sri4ePz48cyOAh8+c+bMCQ0NValU06ZNo+UbNmzQ6XQlJSXXr1+XSCT0vcDIz88vLy83e7wC8RkFBQWPP/648bGcPn06Ly+PXeLq6kq/O7E7+W7dusXXGkOHDi0oKOBvLQAAAABwApGjZ4ABJ9LpdDdu3Ojbt+8jjzzi7FwAAHq12trawMBA9i3JhBBfX9/bt287KyU2d3f3xsZG+8YUiTrvO4Yj8oeu75133tHpdCkpKc5OpFtqbm6WSCT0Terv719VVcVe6+fnp1KpCCEikaihocHLy0ur1fr5+d29e5e9GedtfvXq1bfeequ4uLi1tXX06NFFRUXsWRYsX37wwQfZv33L5fKamhpCiEwm++WXX2QyGSGkrq7O29tb+EOGLw5fvdbGN24B4bXMS86CQJ5W4cvfwvPCsFc+PUBGRkZpaenu3bsdWkteXt727dvPnDlDBN+MRPB646wyexI52wtc/CbfLHwXlaMv8oKCgrS0tFOnThFCIiIi1q9fHxERIZAPTaCxsdHNzY0dx9fXt7S0lB4vBx1B2K9fP0uOly8+w9PTU6VScdYWFhYOHz58wIABJne5efPmY489ptPpCP9nCCHk7t27gwYN0mg05trMRqtWrQoICFi/fr2D4gMAAAD0SBjZ1pMxf+E4OxEAADCBM0kUsXLmMbrK5AxvJic74ps0SWAmND4mJ60SnoHN8pnQ+OLzTWZlQ/4AwKZSqZiRJXSB+XGfjf76LODFF1+cOHHi5cuXNRrN4cOHbc5nzJgxBhaTP8rTX6I7HoePJfE7vgvVkTwtScbC88Ls4oh8wEIWvhnNcvTFb+2b3V4XVWRk5L1794qKioqKilpaWmhPm9l8jHvC7t+/L1CL8WedtfEZxp2jBw4cCAwM5OtpI4QMGjRIr9fzrW1raxMIDgAAAADOhc62noxOI9mnD84yAED3YNXMYwb+Gd5MTnbEN2mSwExoludJzM3AZnlwvvgGnsmsbMgfACz3zTff6HS6/Px85ndtPiqVKjg42MPDo6ysLDMz0+Yao6KisrOzKysr6VdZxrx587Zv367X66uqqlJTU22Ow8fa+IQQFxcXpVKp1+vz8/PDw8Mt2cXaPC2/U4Evf4HzYjJ/a9sNuiBHX/zWvtntdZETQjZt2pSUlJSUlLRp0yab85k7d256ejohRK1WK5XK+fPnC29v84dbYGAge6ji559/PmLEiMGDB5M/3hEbGhqalJR07do1QohSqXRxcaHlrq6uzLSZFy9e9PDwYBqwsrISs9cAAAAAdDkG6Lm0Wm1FRcXNmzednQgAQG+nVqv79+9Pl/38/Dj/F/v5+bE35vzvTFg9VcYLDQ0NBoOhsbHR3d2dFlZUVMyYMUMmk0kkktDQUGbjAQMG1NXVmUzPtu8DnL2kUikTv7a2tuPfMYwjkD92qglsCb1BUlJSQkKCs7PoruistpxChULBKSGEfPfddwMHDhw/fnxlZSW73PgPiqNHjwYGBrq6ukZFRV2+fJlZxd7MkuX79+8nJyc/9NBDnp6ekZGRKSkpNL5Wq42NjZVIJCNHjrx06ZLZv2X44vDVa218esguLi4SiWTOnDkVFRUC7WO8bPj9s4svT2r06NHBwcHCaQi3D9954ctfOJ9eZefOnUuXLnV0Lbm5uVOmTOEUct6MnOd7Ef5bTGihwEk0uT3fxcN3DZu8qDrhIqeeeeaZSZMmsUvMfvhwGk2r1S5btkwul8vl8oULF1ZVVXEax5LjFYjPeOutt44dO8a87N+/v8nt1Wp1bGysp6cnIcTFxeXo0aPMcdGON29vbz8/v3/961/MLkeOHImPj7e80ay1cuXK1NRUx8UHAAAA6JHwzLaeTKvV3r5929XVdeDAgc7OBQCgVzP5zDa+h69Y+Jgf8sfHKQ0aNIiO8Ro1atS8efP++te/ymSy2tpaX19furFcLi8vL+d7QglTo06nE4vFlhyUwBNfbt++TXsQLYljYXzC8+QYm/OH7g7PbOsI9jPbBHTmwxcBuprOf2Yb9DAVFRUZGRkffvih3SOvWLFi7dq1jhvchme2AQAAANgAEwz2ZJhGEgCgxzOe4Y1vsiOBSZPsMhOa8CRUVk0SZS275A8AHHSWMzwKEQDANkFBQV5eXo6ILJPJMI0kAAAAQFdj5jnn0K0ZDAaRSITONgCArkmhUHBKmB+16QL9GCemxrQx/Pz8Hn300YCAgM8//5yWZGVlLVmypKamZvLkyR988EFKSgrdKz09PS4ujlYaHR2dlpbGBKGPQBOLxVOnTt27d6/ZzI3zJISkpaUtX75cKpU++uijBw8ezMjIYGfb1tZm+f9HJuOzm4LTLNbmDwCWwJg2AIAO2rJliyPCvv/++44ICwAA3cIPP/xQUFDg7CwAbDd58uSnnnrK2Vk4BDrbejJPT0868zsAAHRBd+7c4ZQY/7RtMPUEEXbh6NGjb926xd5l9uzZs2fPNt5LIpH8/e9///vf/26cyezZs3U6neWZm/wJXiKR7N+/f//+/Sa3+e677zoY32RTUNbmDwA9ho+PT01NDadQoVAYf8B2zfgAAAAAAFb53//9348//nj69OnOTgTAFqdOnRKJROhsAwAAgC6EM7oLAKAXcnSnFzrVAAAAAKCrGTNmzNatW52dBYAtmpqanJ2CA6GzDQAAoFtCHxsAAAAAAAAAAEBXgKd5AQAAAJePj4/IiI+Pj7PzAgAAAAAAAAAA6HIwsg0AAAC4MHMaAAAAAAAAAACAhTCyDQAAAAAAAAAAAAAAegWRSOSUfTvCWfWC5dDZBgAAAAAAXQudvdbZWTiEE4+rB7cqdAu4+AEAADoT/vuzjVKpFIvFLi4uAwcOnDZtmrPTge4EnW0AAAAAAEB8fX07GMHd3d0umRBCDAZDx4PYKx9r4whvb9WhNTc3W1W1MAurFsjfvvkAn46/GYmVJ8teJx0XPwAAQNdhl2/U3ZGfn5/ZbQQaJyYmJicnR6/XV1ZWfvnll1bta7MO5gxdBDrbAAAAujd73arm6FveBOLb5YY73LIH0EHV1dWcklWrVg0ZMkQikURERJw9e5YWtrS0rFmzxsfHx9fX96OPPgoKCqLlMplMq9WKfscEYb/krDIZ31r0zlORSOTh4TFx4kSz+fDVSzfTaDRLlixxd3ePi4szG8ckge1PnjxpsnF27Njh7u5eXFy8d+9ed3d3pVJJCFGr1SEhIRKJxMfHZ+XKlZwf+seOHTt27FhL2qepqWnRokVubm6jRo0qKSkx2w58+QvnA/bFeTPyven4LlqBk+XQk46LHwAAADhaW1s7v9Lbt293ZHe9Xj979mx7JWOhDubsLE45v10ZOtt6spqamtu3b+v1emcnAgAAJtjlvnViv5ubjOPYcZCKyfiWrLJLfA77HhdAD5aSklJeXq7RaBISEmbNmkULN2zYoNPpSkpKrl+/LpFI6uvraTldMPyOCcK3zBffWrGxsTNmzNDr9dXV1evWrdNoNML58NVLt5kzZ05oaKhKpWJmjBGIY5LA9tHR0ZwS+rKtrW3fvn3Tp08vKSnZt29fTEwMISQuLi49PV2n0127di0sLIzpR2F2tPBDLz4+3tfXt76+/tSpUydOnDDbDnz5C+cDDsX3puO7aAVOlkNPOi5+AACAzldeXv78889LpVJXV9fQ0NDTp08z9+VQN27cmDRpUr9+/cRiMb2vhbFt27aQkBAPD4+AgIA333yzrq6OWUVvPdFqtc8995xYLDbe9+jRo4MHD3Zzc5s/f35zc7PxrTY5OTn+/v5/+tOf3Nzcpk6d+t1331l4RGarvnz58nPPPefv7+/v7z9nzpzy8nJm1WOPPUbTELFw4l+9epXvLrrAwEDO7lOmTLFwX+ETIdDUHcxZoDXMtqQwpsaCgoI///nPQUFBeXl5zFrh82v2suyxDNBzXbt2raKiorW11dmJAAD0dmq1un///pxCzv/C9P/lwsJCuVw+ZsyYX3/9lV3e0NCwePFiNze3devWMbswX3TYcXQ6XXx8fFBQ0ODBg+Pi4pj/BayNI5VKTX5hoC/z8vKYHQcOHCh8+Cbja7XahQsXSiSSJ5988ueff+asDQkJCQkJEQ4rHJ+WZGZm+vv7u7i4HD16VPi4oNtJSkpKSEhwdhbdVVNTE3P9G89Y4ufnZzAYKioqZsyYIZPJJBJJaGgos/2AAQPq6upMhuV7T3E+Q+gCX3yz0TiOHz/u4uJCCPH29n788ccvXLggHEGgXkJIY2Oj5cfFR3h74w8rkwsymYx9UuRyuVU5MKRSKXO+amtrLWl/k/nbK59uZOfOnUuXLnV0Lbm5uVOmTKHLfG9G4Ted8UXLd7I64aTj4u8ZVq5cmZqa6uwsAADAtL///e8LFy6ky2VlZQ899NDu3btVKpVOp7t169Y//vGPBx98kNmYEDJ16tRvv/22vb396NGjLi4u7FBffvklXairq0tMTAwNDWWvJYS8/vrr586dM973/Pnzw4YN++GHH1paWs6fP0/vRGHve+bMmejo6O+//765ubmxsfHrr79+6qmnLl68aOExClRdVlYWEhJy/fp1+vI///nPuHHjrly5wtndkipsWMW3gdkTIdzUNudstjUEWtIShJCdO3e+//77KpWqvb197ty5tFz4/Aq3Rs/+moHfmHqy3377TaPRtLW1OTsRAIDezpLONlqSk5PT0tJy+PDh2bNns8unTJmyb9++3377rbCwUDjO+vXrMzMz6fLOnTvj4uJsi2OyxGAwnD9/fty4cXS5vb09ODj40qVLxpsZ40RbsWJFQkJCa2urWq1OTk7mrA0ODg4ODrYkrEC2hJCEhITffvuN853S2t/NoWtCZ1tHsDvbGJySJ598cuvWrXfu3NHr9XRWE1ru7e1tSWcb+34vprytrY1Z5ovPl48wrVZ78+bN5ORkLy8v4XwE6uWrke+4+Ahvb2F/Q0REhNmKLMHub6iqqrKk/U3mb698upHO72xjcC4SC990DL6T1QknHRd/z9CzfwUDAOju2J1ts2bN2r9/v8DGhJAff/yR/ZJvy/v374tEIs6+hw8fNrnv1KlTmd4jg8Fw5MgRTuRnnnnmP//5D7vkp59+Cg8PF0jVwqpnzpx58uRJ9sYnT578y1/+wtndkipsWMW3gdkTwWbc1JZUanIbs60h0JKWIIQUFBQwL+/fv08XhM+vcGv07K8ZmEayJ/Pw8PD09OzTB2cZAKAL8ff3Zwbj0wV/f39mbWRk5AMPPBAVFVVYWMje6/jx44sWLfLw8AgLCxOOv3///gULFtDl2NjYgwcP2haHz7hx43x9fY8ePUoIOXLkyGOPPTZy5Egb4nz66adxcXFisdjb2/vVV1/lrL148eLFixdty5AtJSXFw8Nj9uzZmFQZwFoqlSo4ONjDw6OsrCwzM5Mpnzt3bnp6OiFErVYrlcr58+czq1xcXJRKpV6vz8/PDw8P55Tfvn37jTfeMBvfWnK5/MKFC3369AkICBg6dCjtRxTIx4Z6+Y7LXtubFBUVlZ2dXVlZ2d7ebrzW8sdWzZs3b/v27Xq9vqqqKjU1lSkXaAeT+QvnAw4l8KYzie9kdcJJx8UPAADQmc6ePRsVFSW8zZ///GeT5a2trcnJyUOHDu3fv7+3t/fUqVMNRhM1v/DCCyb3/fbbb5966inm5aRJkzgbXLhw4eGHH2bPizhy5Mji4mIzx2NB1WfPnmVXTQgZO3bsmTNnLI/sCMInwpKmtrles63B15IWioiIYJb79u1LF4TPryWXZU+FbhgAAIBOpVKp6A0v5PdbilQqlfFm/fr1Y790c3OzvAqB721WxWHT6XTMcnJyclJSUmtr63vvvffee+/ZFpAveCdzYtUAXY1CoWC/zMrKWrJkiUwmS0hIiI2NJYTQuwTS09M1Go1CoXjiiSeOHTuWlpbG7JKTkxMTEyOVSrOzs/fu3csunzdv3syZM1955RUmDl98wno8AN+TCdgefvjhH3/8MSgoSCQSxcTE5OTkCOfDVy/nSQnsKviOiw/f9sbHxf6XvUAIWb16tVqtDg0NlclkU6dO3bp1K7sKOneF2UwIIWlpaZWVlVKpNCoqavHixcSC9jeZv3A+YF+cNyPfm47vouU7WZ1w0nHxAwAAdKa2tjaz35b5vPHGGy0tLd98883du3dv3br13//933ZMzNXVlTPyyfD77BodZ/xNwF59VzYTPhEObWqntIbw+e3IZdndiZx+LQIAAPR4tbW1gYGBnG+WdN4ATsmJEyciIyOPHTv2xRdfMD8ZG28pEGf9+vXe3t50zvTU1NT6+vpt27bZEIcQIhaLc3JyZsyYUVhYmJKScu7cOWbV0qVLb9y4ERgYuGfPHrOHbzL+8uXLpVLpu+++q1art23blpGRwV5Lb1q/cOGChcFN5s8uYS8LHBd0I++8845Op0tJSXF2It1Sc3OzRCLBHwIAAjIyMkpLS3fv3u3QWvLy8rZv3+7027EB2FatWhUQELB+/XpnJwIAACb84x//+H//7/999NFHhJDw8PCXXnqJ3lNiEufPZPZLqVT6n//8x8vLi75Uq9UKhYJvY87LadOmrV27lhnHF6WQAAAgAElEQVTzRG+tY2+8YMGCoUOHbty40bZjFKh61qxZr7322vTp05m1ubm52dnZ//znP/l2b21tfeCBB4SrsHAV3wbCJ8JsU9ucs9nWEGhJS/BtL3x+hVujZ3/NwMg2AAAA5+Dct075+fk9+uijO3bs+OCDD2iJwGALk4M/Nm/erFarAwICAgIC6urqNm/ebFscIjiY4+233z537lxSUpIlR2oyPt/95pTl963zxTe+cV74vnUAAAAAAACAbiQ5Oflvf/sbfSL7vXv3ysvLs7OzBfre2AYPHrx79+6mpqb6+vr9+/ebnaea7d133123bl1FRYVery8uLv7Xv/7F2SAlJWXPnj2bN2/+9ddf9Xp9fX39V199xe4TsllqampiYmJxcfH9+/fv379fXFyclJTEni+a/D4vNCHk9u3bu3btmjBhQsfrFSZ8IixpattytqQ1HEH4/Hbksuzu+pnfBAAAABzgzp07xoWjR4++desWu0Sgz8nkKrFYnJaWxp7YzbY4hJDZs2fzzbKYl5e3bNmygIAAvphm40skkv379+/fv9/kNt99950lkQXisws5GwgcFwAAAABAL3Hjxo1Ro0Y5OwuArmLNmjXvvPOOs7OwztixY5VK5caNG+fOnSsSiQYPHhwbG8vMUsjcdUr/Iua8PHjw4Ouvv75p0yapVPrSSy998cUXHh4efBtzXo4bNy4pKSk6Ovr27duzZs3avXv3P/7xD3ZiAwcO/Pe//71x48aQkJC7d+8+/PDDzz33HB2NZ5Zw1Y8//vinn34aHx9/9uxZQsizzz576NChIUOGsCPQ+2vv378/cODA2bNn5+bmcoJzlplfDH766Sf6iDtmVVRU1MmTJ83uK3wihJu6IzkLt4ZwS5rFuWuZ3VDC51e4NXo2dLYBAAB0CdZ+73Ei5svWjh07nJsJAPQSPj4+NTU1nEKFQmHyroVemA9Ap8HFD9CTtLe39+vXr7y83NmJADjf1q1b79275+wsbDF27NhTp06ZXMX5bYHzcsiQIbSHxuQGwvsSQp5//vnnn3+eLqvVand3d84G/v7+FvauWZU2IeTxxx8/fvy4QASB+2uFf28ZOXKkDbcpUwIn4v9j797jmrjy/oGfYKGVJGgiJAS0WFvR3mxFvMDKs21RFLw8wkuB3ZdF6qXbrtfactFaBBUjgrXqY7sKPFJt1+It23pr8barXXxV22d/u4soqLAqASHcVkKEBMjvj3l1djrJTBJICITP+w9ekzNnzvnOSSYkOXPO4W9qSrdj5mkNiy3Jjz8///PL0xquDZ1tAAAAfULf72Oj9aNQAcA19LXf8ftaPAC9Bi9+ABfj5uYmkUicHQWA8w0ePLitrc3ZUfRL1dXVGRkZ1LLxAAMc1mwDAACAnpLL5QITcrnc2XEBAAAAAAAAgJ1t376d+uL/6quvvvzyyx999JGzIwJwPoxsc1ldXV1tbW0CgWDw4MHOjgUAAFwc7nMHAAAAAAAAGCCSk5OTk5OdHQVA34KRbS5Lr9er1Wr8+gkAAAAAAAAAANBP0Wtm9/KxPeGseqHvCwgIMJ0XhxIQEODs6AYKPAsOgs42l0UtqIP/bQAAAADQ71Df9PpFLU78vN07rQRgjd58NeJlD+Cq8H+tG1QqlYeHh7u7+/Dhw2fOnOnscAAsu3fvnpHDvXv3nB3dQIFnwUHQ2eay0NkGAAAAANZTKBQ9LEEsFtslEvLzR1nr6XQ6x9XCf142hdq9OHtYNU/89o0H7KXnFyOx8cnt+YvE1mu2J6yvy45vSgDQC3rznaTv8PPzs5iHp2Xi4uIKCwsNBkNVVdW3335r07Hd1sOYAQBcFdZsc1nobAMAAAAA6z18+JCVsnLlyqKioqqqqtDQ0PXr17/++uuEkLa2tpSUlK+++srNzU2pVG7durW8vJwQIpVKtVot/eGT/oWFSmF+NKV3mS3fVhqNJioq6scff5TJZAsWLNi+fbunpydd1+7du7Oysurq6goLC6Ojowkhra2ty5cvP3bs2OjRow8dOmSxfK7zIoScOXNm1qxZpif78ccfp6Wlfffddzdv3lyzZs3Bgwejo6O54qRMmjSJEHLt2jWL8fDEb7Y9ueLnjweci3Uxcl101NPa1NT0/vvvHzly5J133snOzia8T66jXyT379+PjY0tKyuLjo7es2ePUCik4zx9+nRUVBR11QwfPvzBgwfUIda/+Im5i45wX+w8Fy8AgFnt7e1PPvlkL1daU1PTk8MNBgP1ptebehgz9FBlZeWZM2dCQkKcHQhAd1RWVs6bN8/ZUTgKOttcFjrbAADAWVi/p3e7EGf9LmaX+AFcgFKp3LNnj8FguHz58ty5c1taWggh69ev1+v1JSUlIpHo1KlTjY2NVObGxkazl63RaGT+2M38dGq2fFslJSXl5OSEhoa2t7efO3cuKSlp7969dF3V1dWlpaUXLlyIi4vT6/WEkJSUFIVC0djY+OjRo9zcXIvlc50XISQqKop1RtTDzs7OAwcOzJo1KzEx8cCBA1TVXHHSB1p5vjzxm21Prvj544E+heuio15vMTExCQkJO3fuvH79OpXO8+Q6+kVSUFBw7NgxT0/P9PT05ORkKv/Vq1ffe++9qKgoQkhkZGRwcHB+fj59iE3/bU0vOsJ9sfNcvADgRGVlZevXr7948WJbW1twcHB6evq7775L3UNAuXfvXkJCwl//+lc3Nze6+5yyffv2o0ePlpWVDRkyZP78+Rs2bBg2bBi1i3pnaGlpWbhw4ZkzZwghrGNPnDiRkpJSU1Mzb968/fv3U3cD0G8RhYWFa9eura6uFgqFv/rVr7Zu3TphwgRrTsdivTdv3ly3bh31Fj158mSlUjlmzBhq13PPPXf37l3yy9/uWO9at2/fDgwMNE0nhAQEBNy/f595+GuvvXbp0iVrjuV/FnjauYcx87SGxZYEJm9v7//6r/9ydhQA3dHW1ubsEByJa3ZO6O8ePXpUXl5eVVXl7EAAAMCo0Wg8PT1Zib6+vtaX0NraapdIbCpHJBJ1uxxrPmPwlG8re7UPrYfx2z0eMJWWlpaamursKPqr1tZW+kVuOhGQn5+f0WgsLy+fPXu2VCoVCoVhYWF0fl9f34aGBrPFcl04zHR6m6t8i6WxSKVSZvA+Pj789UokEjr++vp6a2rhz8PaSz9kbfDEaROu+Hna02z89orHhX3yySfLli1zdC2nTp16/fXXqW2ui5H/omtpaWElcj25jn6REELor58NDQ3M/NHR0cePHzcajUePHo2Pj+cvxyL+twuL5wUWrVixIisry9lRQG+oqKiQy+W9WWNpaenIkSP379+vVqv1ev2DBw8+++yzYcOG0RkIITNmzPjxxx+7urpOnDjh7u7OPPzbb7+lNhoaGjZs2BAWFsbcSwh55513Ll++bHrs1atXX3jhhb/97W9tbW1Xr15NSkpivj9cvHgxKirq//7v/3Q6XUtLy5///OfJkydfv37dypPiqbe0tHTixIkVFRXUw8rKyilTpty6dYt1uDVVdGMXVwaLzwJ/O3c7ZoutwdOSvWDjxo0pKSm9WWO3ffrpp4sWLXJ2FADd5NofM7Bmm4vDyDYAgD6LNUkUtR54c3PzkiVLxGIx9Q2QEKLRaCZOnCgUCuVy+YoVK+ilU1pbW5csWfLMM88EBwdXVlbSy4kz1xVnbnOVQy2pLRAIvLy8pk6dSt2ESBiTL7EWKueJJzExUSQSjR8/vqSkxOLpc5VPCDlz5gwrkXq4c+dOsVhcXFycn58vFotVKhVPPJRJkyZR81NZxBP/ypUrx4wZIxQKp0+fTt8ramv7APRZarWa+mJAfv5NRK1WE0JiY2OnTp168+bN5ubmI0eO0Pk7OjqsKZYaWcLS1dVFb3OVb6sJEyYwv97U1dVZf6zZIO1+CKUncVoTjJXtSR/iiHigh7guRv6LTiQSsVK4ntzefJF0dXW5uf3n14atW7empaW1t7dv2rRp06ZN1pdjR92+eAHAjlJTUzMyMpYtW+bn5+fu7j58+PB33nmHuneElpWVNWHCBIFAEB0dbTAYmLtmzJhBbUil0vT09O+//55V/htvvBEWFmZ6bHp6+scff/zqq68++eSTU6ZMmTJlCvOo9PT0vXv3jh8/fvDgwSKR6Ne//nVubu66deusPy+uelNSUjIyMp555hnq4ciRI9PS0lJSUqwv2REsPgsW27l7rGkNrpYEAOgX0NnmsoyYLgMAoF+h3rdjYmLCwsLUavXMmTOpdGoSJ71ef/fu3fDwcLoTLjk5OTQ0tLKy8ttvvz1//jxdAvP9n7nNVU5CQsLs2bMNBsPDhw8/+OCD5uZmKp2apYr+ic1iOfTMZufOnTt58qTF8+Uqn/w8SZRp49Azs5WUlFAzs/HEQx9o5T9EnviVSmVZWVlzc3NqaurcuXO71z4A/Y5arQ4ODvby8iotLd29ezedPn/+/JycHEKIRqNRqVQLFy6kd7m7u6tUKoPBcPbs2WnTprHSa2pq1qxZY7F8W0VGRubl5VVVVTF78njEx8fv2LHDYDBUV1dnZWVZcwjXedkxTuvvDOCKn6c9zcZva7uBE/FcdGZxPbm98CLJzc2tqqpqamrKzMyMjY2l08eOHRsSEjJnzpzJkyePHj2aeYj1L/5usMvFCwB2dOnSpcjISP48r7zyitn09vb2rVu3jh071tPT09vbe8aMGaaf8xcsWGD22B9//HHy5Mn0w1//+tfMvdeuXXvmmWcEDOPGjSsuLrZ8PpbqvXTpErNeQsikSZMuXrxofcmOwP8sWNPO3a7XYmtwtSQAQP/AP/AN+q/m5uby8vLq6mpnBwIAAL+YRpJrkiijjZNB+fj4NDU1UdusmdDMbnOV880337i7uxNCvL29n3/++WvXrpktx2I8mJmNgpnZeg2mkewJ5jSSNJlMxnx44sSJgICAwYMHR0ZG3rx5k/7uoNVq3333XR8fHx8fn0WLFjE/bVIT/giFwpiYmPLycma6h4fHhAkT/v73v9PlcJVvNLfqG4+Ojo6tW7eOHDlyyJAhERERSqWSVQhrW6vVJiQkCIXCcePGMePhwXVepnGabht/fq/gipMSFBQUHBzMHwaFK36e9jQbP388YHTGNJI01sXIddFxXSlcT65DXyRUaZWVlRMnThw6dOjSpUtZMyrfvXv3ySefvH//PutA61/8XKfMdQ1ynRdY5NrzOwFT708j6enpqdFoeDIQjq8ARqPxnXfe+eijjzQajcFg0Ol01PuYlccOGzaM/upkNPm2IpFIKisrbTsT6+oViUT19fXMvfX19ay56C1+DuHPY/Fw0wz8z4LFdramUrN5LLYG/xPqaJhGEqB3uPbHDCwX7LKam5s1Go1YLPb19XV2LAAAA119fX1AQAD16zZNIGD/FzZNIYREREQUFRWZlimTycrLy4cOHUqVT3XqsMrp6uoaNGgQtc1VDqW1tbWxsfGLL77Yvn17U1OTaTx6vd7Dw4OnHKlUeufOHaqrqaamhupB5G4SzvK5WoN+yNrgPy/rccU/fvz4+Pj4t956SyqV1tfXKxQK03YmVrQP2N3GjRv1er1SqXR2IP2STqcTCoX4IgDAY9euXTdu3Ni/f79Dazl9+vSOHTucPsqhF+zZs6eiomLnzp3ODgQsW7ly5YgRI5KTk50dCDhcZWVlSEgIa3J7h5o2bdpvf/vbxYsXc2Xg+gpACKG6xKivP4QQjUZD3ZpgzbEzZ858//33p0+fTj0sLCyk1o+kHr755ptjx4798MMPu3dSPPXOnTv3d7/73axZs+i9p06dysvL+9Of/sR1eHt7+5NPPslfhZW7uDLwPwsW27nbMVtsDZ6W7AXp6eltbW3btm3rtRq77bPPPvvhhx8KCgqsycz/4iHdmhrNmgNtffp6+ekGJ3LtjxmYRtJl0T9EOjsQAADoEa5JnGJjY48dO0YIqa+vp1Yvo5mdsY2rHB8fn2vXrrm5uY0YMWLs2LHMHkGbJpXCzGzWxAMAADAACQSCVatWffLJJ84OBACcbOvWrR999NH58+eNRuPjx4/Lysry8vJ4+t6YRo8evX//fuoewc8//9zinLpM6enpH3zwQXl5ucFgKC4u/stf/sLcq1Qqc3Nzt2zZ8q9//ctgMDQ2Nn733XfMPqFuy8rK2rBhQ3FxcUdHR0dHR3FxcVpaGuu7EvWdghBSU1OzZ8+e0NDQntfLj/9ZsKaduxezNa0B3aZQKMym8/Rgdbtzy5oDbS3c+vxisdimkgF6EzrbXBY62wAA+jiZTMZ8SL1j0+sE0OmrVq3SaDRhYWFSqXTGjBn0rXZZWVnFxcUjR46MjIxk9VRRt2rOmTNn6dKldMlc5TzzzDP/7//9v8DAQIFAEBcXV1hYyCwnLi5OIpHk5eXl5+fzx5OdnV1VVSWRSCIjI6mvahb/B5ktn24E1gazQGvah9LZ2Wnlp3au+Pft27dkyRKpVJqampqQkMCs3ab2AQAAGLDoqXWcHQgAONmkSZNUKlVWVpZEIvHz83vzzTfb2tr+53/+h9pr9jM//fDQoUNnz56VyWTjxo27ceMGdd8hV2bWwylTpqSlpUVFRQ0dOnTPnj2sDp7hw4f/9a9/vXPnzsSJE0UiUWho6KVLl6wfNsRT7/PPP//HP/5x27ZtEolEIpFkZWUdPnx4zJgxzBKo7xRubm6TJ0++c+fOqVOnmIWzvhkxvwf94x//YO2Kioqy5lj+Z4G/nXsSM39r8LckWGQ6RPXMmTOs1wwhpLW1NTExUSQSjR8/vqSkhHWITQup3r9/f8qUKRKJZPHixcx7ds3Wq9Ppli1bJpFIgoKCysrKmBnM5qdS9uzZM3z4cA8PD/r2YqlUqtVqTS8HgD4CIzRdVkNDQ2Nj49ChQ318fJwdCwDAQGd2Gkn7wqwLMNBgGsme6HfTSMrl8rq6OlaiTCarra3tF+VDf4RpJM3CxTIQuPb8TsDU+9NI9hEajebZZ5999OiRswOBPqS/TyPJ9YMAK33FihVisTgjI+PRo0e5ubnr169n7p04cSIh5Pr16xZjEAgEGRkZixcv9vT0TE9P7+zs3Lt3L0+9K1eu9PT03LRpU0dHR15e3po1ayyuqSEQCFJTU9etW3fhwoW4uDi9Xs9/ptBfuPbHDIxsc1kY2QYAMHDgvj8AcG21tbWmq0/b8cd9R5cP4DJwsQBAf1ddXb1hw4akpCRnBwJgB/7+/qyhhP7+/jz5//jHPyYlJXl4eHh7e7/99tusvdevX7emp42yZMmS4cOHS6XS9PT0o0eP8mcuLCxMSUl58sknhULhb3/7WyurUCqVXl5e0dHRBoPBykMAnOsJZwcAjoLONgCAgQM3dgEAAPRHHR0djx8/rqysdHYgAP/x73//m2vtH4D+a/v27SkpKYQQHx+ftLS0FStWODsiADtQq9XURjfGe9FjxXqoq6vLzc3CeB7mD9R2/PlCr9d7eHjYqzSAnkNnm4tDZxsAADgRJpsCAADg8c9//vPatWsvvfSSswMB+A+9Xs9c+QnANSQnJ7vqrGUA1ouPj9+xY0d6erpGo9m+fTtrL7Vg27Vr16wpKjc3d+nSpUKhMDMzMzY2lj9zXFzczp07MzIydDpdXl5e94KnuLu7q1Sq2bNnnz9/XqlUXr58uSelAdgXOttcFkY5AACA06FTDQAAgMf48eN//etf96M122AgoBZTcXYUAH1CQEDA/fv3ze56+umn792718vxAHCRyWSsFHoABrVB/VCcnZ39+9//XiKRPPvss4cOHdq1axdzSFxnZ6fFMWp0gYmJiTExMbdv354/f/6uXbv46922bdvq1au9vb2ffvrpQ4cOffjhh/z56YkxjUYjc5sQUlhYGBcX5+HhMWPGjPz8fNuaCcDB0NkGAAAAAAAADtHZ2Tlo0CBnRwEAANAd6E6D/sL0PlezwzCEQuHnn3/++eefm83z008/WVMXfZTZMXBm6/X09MzNzc3NzTUYDKdOnXrhhRf48zMTWRmio6PtNQEmgN1Z7qyGfgprtgEAAACAg9ArsffT2lUqlYeHh1Qqff31161Jdy67tLZdni/+SDZs2EBvG43GBw8elJaWvvrqq8w8ly9fXrhwYXR0tEAg8PDwUKlU/DUePnx40KBBZjMzqwMAAACAvuzDDz8UCAQikejgwYMY0w+uCiPbAAAAAACAKBSKmpoaKzPTM7o4iE6n8/T07HntXOXExcUVFhZGR0dbmW4TsVjc0tLSkxJYTM+Xv324CnFEJLTbt283NTXRD//5z39WVFT893//d0lJCTPb22+/ffXqVYlEQggpLi6OiIjQarU8NS5fvvzUqVORkZEqlSouLo55I3NTU1NFRcWoUaN6dEp9wJUrV6RSqbOjcAXt7e2PHz+mtkUi0RNP4OeObtLpdJs2bXJ2FAAA4FIyMzMzMzOdHQWAY+HTp8sSCoWDBg166qmnnB0IAAAAAPQDDx8+ZD6k+lTOnz//m9/85umnnz5+/HhAQAB/CStXriwqKqqqqgoNDV2/fj01OIwqZ/fu3VlZWXV1dXRXFle6RqOJior68ccfZTLZggULtm/fTvUqtba2Ll++/NixY6NHjz506JDF0+Eqh158JSYmhspJ9UJxpRsMho8++kilUhmNxnnz5m3ZssXDw4OOv6mp6f333z9y5Mg777yTnZ1NCJFKpVqtlu6RYnVxWb/sPNf5cp1XW1tbSkrKV1995ebmplQqt27dWl5eTh1y5syZWbNmMYOhwvv444/T0tK+++67mzdvrlmz5uDBg9RTYPZ5tCg3NzciIoJ+OG7cuHHjxplma29vp3raCCGhoaGtra38xTY2NlIbs2bNGj9+PHNXeHj4vn37srKyrAmvz3r99dfLysqcHYWL0Gq1VI/v73//+3Xr1oWGhjo7on4MHcADxIMHD2prazElEgBlypQpzg4BAPo3dLa5LJFIJBKJnB0FAAAMOMwFlnu/amKn0RsAQI1hamhoePDgwTfffPPee++dOHGC/xClUrlnzx6DwXD58uW5c+dSo7uocqqrq0tLSy9cuEAPTuJKT0pKysnJCQ0NbW9vP3fuXFJS0t69ewkhKSkpCoWisbHx0aNHubm5FuPnKodafMX0nYorfcOGDcOHD6e6Q3bt2rVhw4bt27fT8cfExCQkJOzcufP69etU/sbGRp63QevfoLjOl+u81q9fr9frS0pKRCLRqVOn6D4qQkhUVBRrRBr1sLOz88CBA7NmzUpMTDxw4AD9FJh9Hi0qKipaunSpxWwPHjywsgVYLly4cPr0aWbK2LFjN2/e3N872zw9PV1gcF5fM2TIEIVCgYYFsMjf39/b25u+OQNgINu2bVtnZ6ezowCA/s1pP4cBAAAMHPX19QEBAaz7922asY2LTTOJ8cxsZq9ybNWNmdD4WdPVZ692AOfauHGjXq9XKpXODqRf0ul0QqGQulj8/f2rq6uZe/38/NRqNSFEIBA0NTUNHTpUq9X6+fk9evSImY11ud2+fXvt2rXFxcXt7e1BQUFXrlxhjqOyfnvYsGHMjiIfH5+6ujpCiFQqvXPnDjXYoqGhwdvbm/9i5yrHbPA86b6+vrdu3Ro6dCghpKmp6YUXXqDfugUCQUtLi+n9bXa554DrfLnOS6FQ3Lhxg2cwCisq+iFrg+d55D+7IUOGqNVqi63B/5DL+fPnX3rpJV9fX2bio0ePnn766ebmZouHd8+uXbtu3Lixf/9+B5UPjhMaGrp58+bw8HBnBwLQ11VWVoaEhLCGtgMMTOnp6W1tbdu2bXN2IJZ99tlnP/zwQ0FBgbMDAeiOlStXjhgxIjk52dmBOISbswMAAAAYoFhfa9va2lavXi2XyxUKRUFBQWBgIJUuEAgEAkFzc/OSJUvEYnFSUhKVrtFoJk6cKBQK5XL5ihUrdDodXdTKlSvHjBkjFAqnT59+6dIlKpGe2YxCZ+YpxyyucgghZ86cYSVSD3fu3CkWi4uLi/Pz88VisUqlsljvpEmTqMnWLGptbU1MTBSJROPHj2etDOTQdgBwGWq12mg0Uh0e1AbV08ZicfWj2NjYqVOn3rx5s7m5+ciRI92OZ8KECUYGZg8ZjblwV0/KsRJPb5DFmSSsCdUiZiFc59XR0dHzikgPnsdu9y9avIv84MGDAQEBrJ62HlYKAAAAAABgX+hsAwAA6BPoGcAqKiqEQiE9cIH6JTEmJiYsLEytVs+cOZNKp2YS0+v1d+/eDQ8PpzvhCCFKpbKsrKy5uTk1NXXu3LlUIlUg/fssnZmnHLO4yiE/z1TGTKEe0jOVlZSUUDOVWazXtHAu9Exr586dO3nyJHOXQ9sBYID4/vvv9Xr92bNnp0+fzp9TrVYHBwd7eXmVlpbu3r272zVGRkbm5eVVVVV1dXUx0+Pj43fs2GEwGKqrq62ZOZCrHFslJCTk5uZS7xj79u178803LR7i7u6uUqkMBsPZs2enTZvG3GX9nQRc58t1XvPnz8/JySGEaDQalUq1cOFCq07PRLefx4CAANYQSbMGDx5cXFxMbV+/ft3Ly4s+kTt37ggEAubCb4SQo0ePvvzyy6NHjyY/zxVMq6qqwjyBAAAAAADQVxgBAADAwTQajaenJ7Xt5+fH+l/s5+dnNBp9fX0bGhrMHk4IaWlpYSWy5grz8fGh0svLy2fPni2VSoVCYVhYGPllx5Jp4Vzl8OD//MDaSxg9Z8yNbtRrlkQiodutvr6erqUX2gGcKy0tLTU11dlR9FfUrLasRJlMxkohhPz000/Dhw8PCQmpqqpippt+oThx4kRAQMDgwYMjIyNv3rxJ72Jms2a7o6Nj69atI0eOHDJkSEREhFKppMrXarUJCQlCoXDcuHF///vfLX6X4SqHte4XXQhXent7+wcffODv7+/v7//BBx+0t7fzNALdFO7u7kKhMCYmpry8nLkrKCgoODiYJ2wa1/nytM+776V8YkAAACAASURBVL7r4+Pj4+OzaNGi6upqnufLdNv483sj1/PIf8pGo3Ht2rVff/01M8VsfqpxCCHe3t5+fn5/+ctf6Py7d+8WCAR/+9vfmIWwpvZl7jp+/HhKSoo1jdk9n3zyybJlyxxXPjhOSEjI+fPnnR0FQD9QUVEhl8utzMzzb9fiP+WeHGhryd2LBGDjxo0O/VxhR59++umiRYt6uVKzVxb1uU4ikbz22mvW5Hd0PL1TPt7xemjFihVZWVnOjsJRsGYbAACAw5lds421UI2Pj09ZWZnZ5XbMLmkTERFRVFRkmnn8+PHx8fFvvfWWVCqtr69XKBT0scxy9Hq9h4cHTzk8zJbDFS3XskDdqNcs5rJGNTU1VM8l6ZV2AOfCmm09wVyzjYdd1h6DAaK8vHzXrl179+7tdglRUVHDhg07dOiQlfmXL1/+/vvvO25wG9Zs67+wZhuAlcyu2da9haW7/ZnBiR827LgQNbiA/r5mW8+XhO/GFeHh4VFYWBgdHd2Teu0YT6/BO15PYM02AAAAcDhbZwDjmkmMZwYwszObdWOmNZ4Z0qzHX2/PZ1rrhXYAcG3UlH2sifsAuAQGBg4dOrQnJVRUVGzZssX6/FKpFNNIAgDYHavvjZhbmJnwLpxMbPkwTwi5f//+lClTJBLJ4sWLmbcnmq1Xp9MtW7ZMIpEEBQWVlZUxM5jNT6Xs2bNn+PDhHh4e1OrRhHchaoD+iHXlcr3yDQZDamrqmDFjAgMDk5OT6YWBbVqanRASEBAgEAgMBkNMTAxrr9n8XEvUExuXWucqn+u8uNqBB97xoCfQ2QYAAOAcMpmM+TAnJ6e5uVkmk7344otff/11dnY2lU7/3s36VLRq1SqNRhMWFiaVSmfMmEHfgrdv374lS5ZIpdLU1NSEhATC+K28sLAwLi5OIpHk5eXl5+fzl8PDbDl0kKwNZgDWxE/p7Oy08oav7OzsqqoqiUQSGRm5ePFiupZeaAcA10ZPheHsQKDfyMzM7Mnht27dCggIsD7/5s2be1IdAABYyXRhZsK7cDKxZQFmQkhBQcGxY8fu3r0rEomYYx246pVKpQ8fPrxy5cq3335LGFMim81PpVRXV5eWllLfAqh0noWoAVwA1yt/w4YN/v7+ZWVl5eXl/v7+GzZsoNJtWpqdEHLv3j3jL+cw5M/PtUQ9sXGpda7yuc6Lqx144B0PegIzw7iszs7Orq6uQYMGubmhSxUAwMnMTiMJAD2BaSR7wsppJPs+uVxeV1fHSpTJZLW1tU6JB1wJppHsvzCNJICVmNNI+vv7V1dXM/f6+fmp1Wr6IWv2M+Zc7g0NDd7e3t2eVK2qqsrf358Q0tjYOHbsWNZ/dla9Mpns1q1bVL0ajYZacZYnPyuFaxsgPT39m2++mThxot1LHjp0qH3HEv3tb38bNmzYH//4R8J75Zp9tfv6+t66dYuajaCpqemFF16gJ5/kvyLM7uU5hLVLoVDcuHHDdNWM27dvr127tri4uL29PSgo6MqVK1Zeoay9Vp6X9Vc93vEcx7WnkXzC2QGAo9TV1Wm1WplMNmTIEGfHAgAAAABgf+hUAwAAsAu6X60bP8jSM7b1UFdXl8X7xZmdFnb84dh0IWoYgORy+YQJE+xbZmVlpUN7OLpx5VqTze5XREdHh9n02NjY+Pj4/Px8eqn1bsfTaz1JeMcDHuhsc1lubm5ubm6YhhUAAAAAAAAAAOyIWjg5PT1do9Fs376dtZdavujatWvWFJWbm7t06VKhUJiZmRkbG8ufOS4ubufOnRkZGTqdLi8vr3vBU6iFnGfPnn3+/HmlUnn58uWelAYu4JVXXnn77bedHYVln3322Q8//NC9YxMSEnJzc5OSkggh+/bte/PNN+ldDr0iqCXqt27dqtFovv/+++PHj3/xxRfkl0utf/XVV8xDbIqH57zsAu94YCVMMOiy5HL5s88+6+Xl5exAAACg/5HL5QITcrnc2XEBAAAAAIADsRaWJuYWZibcCydTrFyAmTokMTExJiZm1KhRWq2WuXCy2Xq3bdv28OFDb2/vqVOnzpkzx2KcpitJ8y/kDNBPsa5crlf+li1bNBrNiBEjRowY0dDQsGXLFvoQ65dmJ4ScOXOGa3V5s/m5lqi3dal1rvK5zovnHYAL3vGgJ/rKZJ0AAAAuDGu2Adgd1mzrCZdZsw3AcbBmW/+FNdsArMRcs63fMRgMp06d2rBhw40bN5wdC7iC9PT0trY2ZudHn0WNbCsoKHB2INB7XOkdz7XXbMPINgAAAAAAAHCIzs5OZ4cAAAAu5cMPPxQIBCKR6ODBgxcvXnR2OAAADoR3vP4FnW0AAAAAAODKWJPbdLsQuwTTvar7SPz8kWzYsIHeNhqNDx48KC0tffXVV5l5Ll++vHDhwujoaIFA4OHhoVKp+Gs8fPjwoEGDzGZmVgcAAANHZmam0Whsb29XqVSY6B4AXBve8foXdLYBAAAAAABRKBTODsECsVjMtUun0/EcaOWEmTzlW1+INfHYyrTqbpRvl1lDeQq5fft2U1MT/fCf//znTz/99Pzzz5eUlDCzvf3223v27FGpVEaj8c9//rPF5euXL19+6tQpo9FIrTPB3NXU1FRRUdGt8wAAAACAAQpL1IPjoLMNAAAArGWX0RXW19U7FQEAxXTJlpUrV44ZM0YoFE6fPv3SpUtUYltb2+rVq+VyuUKhKCgoCAwM5E83GAypqaljxowJDAxMTk7W6/VUOmspb9b2nj17hg8fzhzMJJVKtVqt6RrsGo1m4sSJQqFQLpevWLGC7oVqbW1NTEwUiUTjx49n9feYxVU++XkFeNOF33fu3CkWi4uLi/Pz88ViMRUqVzyUSZMmTZo0yWIwPPFzlc/V/rbGTzied4tyc3MjIiLoh+PGjZs3b57pO3l7e7tEIqG2Q0NDLa5m2tjYGBkZSQiZNWvW+PHjmbvCw8P37dtnZXgAAAAAAISQ2tpao4na2lpnxwWuAJ1tAAAAzmGXQSQ2DW7o9qAQml0GRljJ+rr4B6MAQLcplcqysrLm5ubU1NS5c+dSievXr9fr9SUlJRUVFUKhsLGxkT99w4YN/v7+ZWVl5eXl/v7+9NR/zGvcdLu6urq0tJQ5mIkqkP4+TOdPSkrKycnR6/V3794NDw9PSkqi0lNSUhQKRWNj47lz506ePGnxZLnKJ4RERUWxUqiHnZ2dBw4cmDVrVklJyYEDB6hQueKhD7TyzY0rfq7yudrf1vgJx/NuUVFR0fPPP28x24MHD6wskOXChQunT59mpowdO7aoqKh7pQEAAAAAANiZaUcuAAAA2JdGo/H09GQlsv4LP378eNWqVTKZzNfX98CBA6NHj6azEUKampoWL14sEok++OADKr2uri44OJgQIpPJli9f3traShe1YsWKwMBAT0/PadOmXbx4kUqkRxKwPgDwlGMWIeTevXuTJ08eOnToW2+9pdVqmXGePn3aaDRSv4cOHz6cPmrixIkTJ060srnon1NZ9RJCdu/e7e/v7+7ufuLECf7zApeXlpaWmprq7Cj6K2o4EbXt5+fH+oLg5+dnNBrLy8tnz54tlUqFQmFYWBid39fXt6GhwbRMrnS5XN7U1ERtNzY2+vr60rvILzu3bNqmSaVSZvA+Pj5UukQioeOpr6+35v2BP4/pm5LZDa54bMUVP1f5XO1va/xczztXOTQvL6+Wlhbr6+UvjeXcuXM1NTWsxH//+99Dhgyx5vDu+eSTT5YtW+a48sFxQkJCzp8/7+woAPqBiooKuVzu7CgA+oSNGzempKQ4OwqrfPrpp4sWLXJ2FADdtGLFiqysLGdH4SgY2QYAANAncA1KMBqNhJCYmJiwsDC1Wj1z5kwqnWfwhNlBCbYOCuFRUFBw7Nixu3fvikSi5ORkKvHq1atTpkyJiooihERGRgYHBzOHILAq5Wc6CINuB+sHuwCAldRqNX35UBtqtZoQEhsbO3Xq1Js3bzY3Nx85coTO39HRYbYcrnRixUDVrq4uW8Omp6OcMGEC8+tNXV0dT+ZulG8ra+LpSTBc5fO0v024nneLuv0O3NnZyZ/h4MGDAQEBvr6+dqwUAAAAAADAvtDZ5rKamppqamoeP37s7EAAAOAX/P396bVzqA1/f39CyOHDhzMzM318fAYPHrxgwQJqHAPtm2++SUxM9PLyCg8Pp1JOnjz52muveXh4iMXimJiYo0ePUum3b9/+zW9+M2zYMIlEkpGRodVq+ePhKofHkiVLhg8fLpVK09PT6fxTpkxRKBQnTpwghBw/fvy5554bN24cfcj169evX79uZRPxUCqVXl5e0dHRBoOh56UBAA+1Wh0cHOzl5VVaWrp79246ff78+Tk5OYQQjUajUqkWLlzIn56QkJCbm0v1DO3bt+/NN9+ki3J3d1epVDU1NWvWrLEmJCq/wWA4e/bstGnTqMTIyMi8vLyqqipWj118fPyOHTsMBkN1dXVWVla3y7cVVzwU69ds44qfq3yu9rcV1/NuUUBAQHV1tcVsgwcPLi4upravX7/u5eVFn8idO3cEAgFz4TdCyNGjR19++eXRo0cTk7U8q6qqRo0aZX2EAAAAAAAAjoPONpf1+PFjrVaL3yIBAPoarkEk/IMSRCIRK4VrcIOVgxJsGhTCpaury83tP58ltm7dmpaW1t7evmnTpk2bNllfjh11ezAKAMhkMubDffv2LVmyRCqVpqamJiQkkJ+7OnJycpqbm2Uy2Ysvvvj1119nZ2dT+bnSt2zZotFoRowYMWLEiIaGhi1bttBVFBYWxsfHz5kzZ+nSpXT5XH+p/HFxcRKJJC8vLz8/n0pctWqVRqMJCwuTSqUzZszYtm0blZ6dnV1VVSWRSCIjIxcvXkxMumpMmS2f/HxjBGuDWSCzZK54KJ2dnVYOxuKKn6t8rva3NX6u591sOUwRERG3bt1ippjN/+WXX7722msCgcDHx2fevHknT550d3endp09e1YgEGzfvp1ZSGJiYlBQkNkab926NWPGDGsaEwAAwEpm/+P0EL1gLSHk8OHDgwYNEggEHh4eKpXKtGqBQDB06NDS0lIq8fLlywsXLoyOjjY9hFksQH/Bc311++qz5kBbS7b7+wAMEALMvOGqampqtFqtTCYbMmSIs2MBABjo6uvrAwICqEWSaALBL/4Lv/vuuxKJZOvWrRqN5vvvvz9+/PgXX3xhNidl586dYrF45syZfn5+zB4vmUx2+PDhX/3qV+Xl5V999ZVSqaSP9fDwKCwsnD179vnz55VK5eXLl3nK4SIQCDZu3Lh06VKhULhp06bOzk7m0Idly5bdu3cvICAgNzeXeRQ1kuPatWtWtJb59mGlMLfNnhe4vI0bN+r1eqVS6exA+iWdTicUCvFFAOyovLx8165de/fu7XYJUVFRw4YNO3TokJX5ly9f/v777ztucNuuXbtu3Lixf/9+B5UPjhMaGrp582Z6MgAA4FJZWRkSEvLw4UNmokKhqKmpcVCNOp3O09PTQYXbi9kvX912+/btTz75hP7/KJVKv/zyy8jISJVKFRcXx7xT0Gy9Y8eOvXr1KrVMdXFxcUREBD1ziaP/Dw406enpbW1trNuk+qbPPvvshx9+KCgoYCY69MrtNd2++ux72dpELBa3tLQ4pep+auXKlSNGjKBXJHExGNkGAADgHKxBJFyDEpjDAqwZPMEzKMGmQSFmUUUlJibGxMSMGjVKq9Wy8q9bt+7y5ctpaWmsA60fzEE4BkPYOtgFAAB6U2Bg4NChQ3tSQkVFBXPgo0VSqRS/MAIA2B2r7436QL5nz57hw4ezRlatXLlyzJgxQqFw+vTply5dojNTN/MVFxfn5+eLxWLqEI1GM3HiRKFQKJfLV6xYodPpmLVYOc0y6zsR66FpPHSe5ubmJUuWiMVieoHqtra21atXy+VyhUJRUFAQGBjIrOjixYvWnC9P+bTc3FzmDMmNjY2RkZGEkFmzZo0fP97iKbe3t1M9bYSQ0NBQ5u2b4eHh+/bts1gCDBCsK1en0y1btkwikQQFBZWVlbG+Ypu+Yg0GQ2pq6pgxYwIDA5OTk+luYNMrjrl94cIFmUwWHBx87949ixGeOXPGdAhaa2trYmKiSCQaP358SUkJ6xDrJ2AnhNy/f3/KlCkSiWTx4sXMK8VsvVztw5Wf651QKpVqtVrTn2tgwEJnm8uirnDcsAwA0GfV1tYyHwqFwk8//bSurq6urq6goEChUFDpxl+i8w8aNGjdunWVlZXNzc3fffddamoqlR4dHf2vf/1Lp9OdOXNm7NixzKOio6P1er1Wqz1+/Di1/g1POWZRpY0cOfLatWtNTU25ubmsW1NPnz797rvvjhgxgnXgTz/9ZP2abWZPmfmQtcvseQEAQC/LzMzsyeG3bt0KCAiwPv/mzZt7Uh0AAFiD+shdXV1dWlpK3eJG71IqlWVlZc3NzampqXPnzqUzd3Z2HjhwYNasWSUlJQcOHKAOSUpKysnJ0ev1d+/eDQ8PZ3VKsb7p8AQzZcoUeu3P4uLikJAQ+kDTeOiQYmJiwsLC1Gr1zJkzqfT169fr9fqSkpKKigqhUNjY2Mis6OzZs2VlZRbPl6d8WlFR0fPPP296LhcuXDh9+jQzZfDgwdTv9cyf8h88eMDVGmPHji0qKuJuLRjQUlJSpFLpw4cPr1y58u2335KfX6tcr9gNGzb4+/uXlZWVl5f7+/vTk5QyL0zT7YaGhgcPHqSkpLz33nsWQ4qKijK9zFNSUhQKRWNj47lz506ePMnaa+U7A6WgoODYsWN3794ViUTMUVNc9ZptH678XO+E1FuH6c81MGBhGkmXVVtb++jRI29vb/oWGAAAcBaz00i6HvpOLny6gF6AaSR7YsBOIymXy01XppTJZKy7HwAIppHszzCNJICVmNNI+vv7V1dXM/f6+flRa0ubncv99u3ba9euLS4ubm9vDwoKunLlCpVOZ2BtDBs2jNmh5ePjY9Na0bSioqLs7Oxz584RQqZPn56cnDx9+nSeeKgAWlpaWGtgKxSKGzduSKVS0yoEAoHBYHjiiSesOV+u8mlDhgxRq9WsvefPn3/ppZd8fX3NHnL//v3nnnuOGlrEmhyP+fDRo0dPP/10c3OzpTYDqzhuGsnnn3/eviuLP3r06I033igsLCTcV65MJrt16xb1CtdoNDKZjP8V6+vre+vWLWqWgqamphdeeIGelJJrNQeBQNDU1DR06FCtVuvn5/fo0SNrgme9pKVS6Z07d6g4GxoavL29uz2NZFVVlb+/PyGksbFx7NixrHcYVr087WM2P+FthwH4raonXHsaySecHQAAAAC4CHzEBIA+Dp1qAAAAZlH9asTqH45jY2Pj4+Pz8/OlUml9fT09LQeXCRMm2GUYVkRExKZNm65cuUIIaWtro3raLMZj2hPW0dHBUwvV08Zka/k008Y8ePBgSEgIV08bIeTpp582GAxcezs7OwcNGsRVOPRBlZWVV69eHTJkiL0K/PLLL+/cuUNtc125zCkNTV8nZl+xFl9OXV1dXLtML5lusFeXZFdXl8XV6Pnbp9v0er2Hh4e9SoP+CNNIuixMIwkAAN0ml8sFJuRyubPjAgAAAAAA51Or1cHBwV5eXqWlpbt377aYPzIyMi8vr6qqyuzv9TatzJSRkZGWlpaWlpaRkdHteObPn5+Tk0MI0Wg0KpVq4cKF/PltLZ8WEBDAHHh09OjRl19+mZr6nvlzf1hYWFpa2t27dwkhKpXK3d2dSh88eDA9beb169e9vLzoBqyqqsLapf3FyJEjR9mPt7e3xeXB4uLidu7c2dXVpdVq8/LyLEaYkJCQm5tLzYW4b9++N998k97l7u6uUqlqamrWrFnDOur777/X6/Vnz56lu71tFR8fv2PHDoPBUF1dnZWVxdpr0ztDbm5uVVVVU1NTZmZmbGwsf2Zb24cH1T4Gg+Hs2bPTpk3rSVHgAtDZ5rKwKiMAAHRbbW2t0QRGhAAAAAAAuDaZTMZ8SP24ZPp33759S5YskUqlqampCQkJVDozA/nlD1OrVq3SaDRhYWFSqXTGjBmsyfo6Ozutv1k8PDy8q6vLaDS+8cYbdKLZeJh/6fAoOTk5zc3NMpnsxRdf/Prrr7Ozs7txvjzl0yIiIm7dukU/TExMDAoKMs2sUqnu3bs3YcIEgUAQFxdHzRBICPnyyy9fe+01gUDg4+Mzb968kydP0v1wt27dmjFjhpWNBi6PdeVu27bt4cOH3t7eU6dOnTNnDp3O9YrdsmWLRqMZMWLEiBEjGhoatmzZQu8qLCyMj4+fM2fO0qVLyS+vaz8/v2effXbnzp0ff/yxxQiZbxF0IdnZ2VVVVRKJJDIycvHixazyrXxnoA5JTEyMiYkZNWqUVqtlvsOYrZerfbjyc70zUO0TFxcnkUjy8vLy8/MtRguuDZOKuiyNRtPc3CyVSocNG+bsWAAABroBsmYbQG/Cmm09MWDXbAOwHtZs67+wZhuAlZhrtoGDlJeX79q1a+/evXYvefny5e+//z4Gt9mL49Zse+qpp2pqaiQSib0K/Oyzz3744YeCggJrMhsMhlOnTm3YsOHGjRv2CoDiGmuVOa59gItrr9mGkW0uCyPbAAAAAACc+KmY6yZ3AAAAGCACAwOHDh3qiJKlUil62oDHhx9+KBAIRCLRwYMHL168aN/CWaO7+iOHtg8MWOhsc3EucIsBAAAAAPQChULR80J0Op31mcVisaPLITZ+HrapXousrNpe7QAAAAB9UGZmpiOK3bx5syOKBZeRmZlpNBrb29tVKpXd11+nF5uwb7G9yaHtAwMWOttcFnVzQb9+1wMAAACAXsOaRaqtrW316tVyuVyhUBQUFAQGBlLp1Git5ubmJUuWiMXipKQkKl2j0UycOFEoFMrl8hUrVjB7iVauXDlmzBihUDh9+vRLly5RiVKpVKvVmq4YwVOOWVzlEELOnDnDSqQe7ty5UywWFxcX5+fni8VilUplsV7rl2dvbW1NTEwUiUTjx48vKSlh7nJoOwAAAAAAOJFcLheYQD8WDCjobAMAAOjT+t0sZJixDcA1rF+/Xq/Xl5SUVFRUCIXCxsZGKp26lysmJiYsLEytVs+cOZNKT0pKysnJ0ev1d+/eDQ8PpzvhCCFKpbKsrKy5uTk1NXXu3LlUIlWg6V2xPOWYxVUOISQqKoqVQj3s7Ow8cODArFmzSkpKDhw4EBcXZ7Fe62/dTUlJUSgUjY2N586dO3nyJHOXQ9sBAAAAAMCJamtrjSZqa2udHRdA73GFlQzBrMbGxoaGhiFDhshkMmfHAgAw0NXX1wcEBLS2tjITFQpFTU2NNYf3wsrDOp3O09PTysxisbilpaX367WGNW3FE7/d4wHH2bhxo16vVyqVzg6kX9LpdEKhkLpY/P39q6urmXv9/PzUarVCobhx44ZUKjU9XCAQtLS0iEQiZuKwYcPoDjlCiI+PT11dHSHk9u3ba9euLS4ubm9vDwoKunLlCn2Rmr1gucrhwX/hs/bSD1kb3ajXLKlUeufOHardGhoavL29qVp6oR3Avnbt2nXjxo39+/c7OxCwWWho6ObNm8PDw50dCEBfV1lZGRISwhraDjAwpaent7W1bdu2ze4lP/XUUzU1NRKJxF4FJicnFxQUPPvss/YqEKA3VVZWzps37w9/+IOzA3GIJ5wdAAAAwABlOmNbSkrKV1995ebmplQqt27dWl5eTu+9ePFiQkJCXV1dYWFhdHQ0lbhy5cqioqKqqqrQ0ND169e//vrr5OeBZbt3787KymLm1+l0q1evPnbs2DPPPHP48OGxY8cSQoxGo0ajiYqK+vHHH2Uy2YIFC7Zv387f20TPeEY9ZP5AfObMmVmzZjETqWwff/xxWlrad999d/PmzTVr1hw8eDA6Opq/Xmq6tmvXrllsxtbW1uXLlx87dmz06NGHDh1i7jLbPlzx29oOAC5DrVZTG6wun46ODp6jWD1thJAJEyYUFRWZ5oyNjY2Pj8/Pz5dKpfX19Vwrw+n1eg8PD55yrESXY6se1ssVDL3dy+0AAAAAAK7K29v7v/7rv5wdBUB3tLW1OTsEB0Jnm8vCmm0AAP0LPWObSCQ6deoUc0ADIeTs2bNlZWVFRUVxcXH0r7dKpXLPnj0Gg+Hy5ctz586lRmsZjUaBQFBdXV1aWnrhwgU6f0pKilQqffjwYUdHR15eHvn5fwQ1U1loaGh7e/u5c+eSkpL27t3LE2djYyPXIBJqxjbmRI7UQ3rGtsTERGrGNr1ez1+v9f+/6BnbHj16lJuby9xltn244re1HQBc3vz583NycrZu3arRaL7//vvjx49/8cUXPPkjIyPz8vJmzpzp5+fn5vafyerVanVwcLCXl1dpaelXX33FPMTd3V2lUs2ePfv8+fNKpfLy5cs85fAwW46t+Ou1/g6A+Pj4HTt2pKenazSa7du30+m90A4AAAAA4PKeeeaZSZMmZWVlOTsQgO7Q6XQjRoxwdhQOYzqVKriGpqam8vLympoaZwcCAABGjUbj6elJbfv5+bH+F/v5+RmNRl9f34aGBrOHE0IMBgO9TW2Ul5fPnj1bKpUKhcKwsDDyyyV/TLd9fHzo8qm5yKht1hxxPj4+Fk+H//MDay9hrHXE3OhGvWZJJBL6vOrr621tH5q94oFek5aWlpqa6uwo+itqVltWokwmYz7UarXvvvuuj4+Pj4/PokWLqqurqXSubxMdHR1bt24dOXLkkCFDIiIilEollX7ixImAgIDBgwdHRkbevHmTedSJEyfc3d2FQmFMTEx5eTl/OTzMlmM2VNNt48/vCfz1BgUFBQcHW4yEareEhAShUDhu3Li///3vdC290A5gX5988smyZcucHQV0R0hIyPnz550dBUA/UFFRIZfLnR0FQJ+wcePGlJQUR5T85JNPNjY22rHATz/9dNGiRXYsEKA3rVixTTauVQAAIABJREFUIisry9lROArWbHNZzc3NGo1GLBb7+vo6OxYAgIHO7JptrPFVPj4+ZWVlXMsjGU2W9hk/fnx8fPxbb71Fz0hmmoe5LZfLb968SZVfV1dHfa8mhERERNg6UxmzfNMZ26xcHqkb9ZrFXB6ppqaG6rkkVrcPHb+94oFegzXbeoK5ZhsAmIU12/ovrNkGYCWb1mzrhWWknYL11YkMsDmiHHHKGzZs2LJlC7V9+PDhhQsXdnV1ubu7MxdEoKsmhAwZMqS4uPiFF14ghFy+fHn//v2tra1/+tOfWIcwi3WEfrRm22effVZYWLh8+XJ7FQjQm/73f//39ddfT05OdnYgDoFpJF3WAPyIAADQr9k6YxvPjGRmxcXF7dy5MyMjQ6fTUdNIUjBjG2ZsAwAAAACgKBSKmpoa03TT35fEYjE1T7spnU7nuPWPuerliYeH8ZcD35lT4vcwHuLgdrCL7p0yj9u3bzc1NdEPly9ffurUqcjISJVKxVwQga6ddfjbb7999epVql+quLg4IiJCq9VSu5qamioqKkaNGmXHaPupZ599ViaTHT161NmBAHSHWCweO3ass6NwmF4aQQe9rrm5uby8nJ7wBwAAnIg5jSTN1hnbWNtcM5Jx5W9tbV26dKlEInnllVf+8Y9/0J8BMGNbt9sBnAvTSPaE2WkkAYAJ00j2X5hGEsBKZqeRNP2EcPr0adOfEFnDdOj0urq64OBgQohMJlu+fHlra6vx5y8CH3/8sUgk+utf/5qXlycSiU6cOMEf3ooVKwIDAz09PadNm3bx4kX+ernSqYdNTU2LFy8WiUQffPAB/3kRQu7duzd58uShQ4e+9dZbWq2WWY7ptk3tQJs4ceLEiRP5T9/4yy9Tpg/Ntg/X+T5+/HjVqlUymczX1/fAgQOjR49m1nLhwgV/f393d3fmk2JT+bSkpKQ//elPpufS3t4+adIk1tmZZhs5ciRXnuPHjycnJ3O1Vc/1o2kkAaDPwndsl9XZ2anX6zs6OpwdCAAAmO9scxa9Xn/ixIkXXnjB2YEA9Ag623qi33W2yWQyYoJ1ywKAfaGzrf9CZxuAlazsbONKN5tz0aJFf/7zn/V6fUtLy4kTJ37/+9/TmbOzs48ePTp06NA1a9YcPXrU3d2dP7yWlhaj0ajX68+fPy8SiboRIZ3++uuvHzhw4N///rfpm4NpZ1tGRsaDBw8aGhpWrlxJx8/KybVN42oHSnBwsJV3Fk6ZMqW4uJjaLi4uDgkJoXfxtI/p+b733nvvvPNOXV2dTqc7cuTIsGHDmPk/+OADrVZL3ZLYvfJpr7zySllZmemJnDlzRqPRMFMGDx5MfaJjdvINGjSImYfZtjdu3Hj11Vc5W6rH0NkGAD3nmhMuAwAA9Clm12zrfR9++OHWrVs9PDyioqL+8Ic/yOVy58YD0BNYs60nsGYbgEVYs63/wpptAFZirtnm7+9fXV3N3Ovn56dWq+mHpmu2mV3FbdiwYY2NjfRDHx+furo6wr2QM1dst2/fXrt2bXFxcXt7e1BQ0JUrV+jMXAfypLe0tIhEIrMVmS44XVVV5e/vTwhpbGwcO3YsFT/hWBjb1nawVVFRUXZ29rlz5wgh06dPT05Onj59OrHUPqbnq1Aobty4wbVAuMFgeOKJJ5jnYmv5tCFDhqjVatbe8+fPv/TSS76+vmYPuX///nPPPUfNMMm1/jch5NGjR08//XRzc7OlNuumfrRmGwD0WViSBAAAYKDIzMw0Go3t7e0qlQo9bQAAAAAAQFGr1dRd+eTnsUTMnjaL6LW4JkyYwLzHv3s9TISQ2NjYqVOn3rx5s7m5+ciRIxbr5U/n6hni19XVZXYt566uLovx2KsdIiIiHj9+fOXKlStXrrS1tVE9bcRS+5ieb0dHB08tVE8bk63l00z7HQ8ePBgQEMDV00YIefrppw0GA9fezs5OnsIBAPoUdLYBAAAAm1wuF5hA/xwAAAAAAFDc3d1VKpXBYDh79uy0adOoxMjIyLy8vKqqKp4eKWuo1erg4GAvL6/S0tLdu3dbrJcn3Va5ublVVVVNTU2ZmZmxsbGs8mtqatasWWMxHv52mDRp0qRJk6yMJyMjIy0tLS0tLSMjg07kaR+z5s+fn5OTQwjRaDQqlWrhwoX8+W0tnxYQEMAcInn06NGXX3559OjRhBCBQECnh4WFpaWl3b17lxCiUqnc3d2p9MGDBxcXF1Pb169f9/Lyohuwqqpq1KhR1kcCAND70NkGAAAAbLW1taZzT9fW1jo7LgAAAAAAcCDTdVKpG++YG5TCwsK4uDiJRJKXl5efn08lrlq1SqPRhIWFSaXSGTNmUJPy0YfTBVoMY9++fUuWLJFKpampqQkJCcyjzNbLlc6MnFWv6XlRfxMTE2NiYkaNGqXVapmTChYWFsbHx8+ZM2fp0qUW4zHbDrTOzk7rB2mFh4d3dXUZjcY33njDYvtwnW9OTk5zc7NMJnvxxRe//vrr7OxsVvuw/tpaPi0iIuLWrVv0w8TExKCgINPMKpXq3r17EyZMEAgEcXFxhYWFVPqXX3752muvCQQCHx+fefPmnTx5ku6Hu3Xr1owZM6xsNAAAp8CabQAAAA7XR9ZsA3AlWLOtJ7BmG4BFWLOt/8KabQBWYq7ZBmAX5eXlu3bt2rt3r91LXr58+fvvv++4wW1Ysw0Aeg4j2wAAAAAAoF/iuqvaQXX1TkUAAAAA/VRgYODQoUMdUbJUKsU0kgDQx6GzDQAAAAAAiEKh6HkhOp3O+sxisbiH5fTm4Dzr6+I5LwAAAADXlpmZ6YhiN2/e7IhiAQDsCJ1tAAAAAABAWLNItbW1rV69Wi6XKxSKgoKCwMBAKp0aTNbc3LxkyRKxWJyUlESlazSaiRMnCoVCuVy+YsUKZm/ZypUrx4wZIxQKp0+ffunSJSpRKpVqtVrTNT94yuFy//79KVOmSCSSxYsX0xP2UsWeOXOGEHLmzBmBQDBixAj6kEmTJk2aNMnKlqEON7vQy549e4YPH+7h4aFSqfjPCwAAAFjkcrnAhFwud3ZcAAAA3YHONpfV1dXV2NjY0NDg7EAAAKBH+tTPtZixDWDgWL9+vV6vLykpqaioEAqFjY2NVDo1wCsmJiYsLEytVs+cOZNKT0pKysnJ0ev1d+/eDQ8PpzvhCCFKpbKsrKy5uTk1NXXu3LlUIlWg8Wd0Zp5yuBQUFBw7duzu3bsikSg5OZlKvHr16pQpU6KiogghkZGRwcHBp0+fpg9hVcovKirKNDOVUl1dXVpaWlhYGBcXx39eAAAAwFJbW2s0UVtb6+y4AAAAuuMJZwcAjtLV1dXQ0CAQCIYNG+bsWAAAwAyFQlFTU2Mxm9Fo7IVuJ51O5+np2UeCoeuyMqdYLG5paXFoMAAuzN/fv7q6mtqmLnA/Pz+1Wn348OEbN25IpVJCyIIFCxYsWMA86ptvvhGJRISQ8PBwKuXkyZOff/45ncHHx2fv3r2EkNu3b69du7a4uLi9vT0oKEir1fLHw1UOjyVLlvj7+xNC0tPTx44dS+WfMmWKQqE4ceJETEzM8ePHn3vuuXHjxtGHXL9+nb9MKymVSkJIdHS0wWCwS4EAAAAAAADQH2Fkm8tyc3MbMmSIl5eXswMBAADzrJyxjXLx4kXWTGWEY2Y2rpnNdDrdsmXLJBJJUFBQWVkZPUYNM7YBDHBqtZoeg0VtqNVqQkhHRwfPUVRPG9OECROYt6XX1dVR6bGxsVOnTr1582Zzc/ORI0e4CtTr9fzlWKOrq8vN7T9fcLZu3ZqWltbe3r5p06ZNmzZZX44d0ecFAAAAAAAALgydbS7Lzc1NJpPJZDJnBwIAAFbhmrGNcvbs2bKyMuZMZYRjZjaumc1SUlKkUunDhw+vXLny7bff0jkxYxsAmDV//vycnBxCiEajUalUCxcu5M8fGRmZl5dXVVXV1dXFTFer1cHBwV5eXqWlpbt372bucnd3V6lUBoPh7Nmz06ZN4y+HR25ublVVVVNTU2ZmZmxsLJ0+duzYkJCQOXPmTJ48efTo0cxDbLoDwFZmzwsAAAAAAABcGDrbAAAAepW/vz89BovaoGY/O3z4cGZmpo+Pz+DBgxcsWFBfX888SqlUCoVC5kxlt2/f/s1vfjNs2DCJRJKRkcGamU2pVHp5eTHzFxYWpqSkPPnkk0Kh8Le//S2d8+TJk6+99pqHh4dYLI6JiTl69KjFU1iyZMnw4cOlUml6ejqdn56xjRBidsY2u0zaZnpeAGAvrJu0cnJympubZTLZiy+++PXXX2dnZ1PpzLcv5nDSVatWaTSasLAwqVQ6Y8aMbdu2Uen79u1bsmSJVCpNTU1NSEggjBUZqY5ziUSSl5eXn5/PX45ZVFGJiYkxMTGjRo3SarWs/OvWrbt8+XJaWhrrwM7OTuu751lv2qx2YP3lOi8AAACwI545Lewy4wXmzAAAAFthzTYAAIBeRc3PRggRCATMn3r5Z2x74gn2v+zY2Nj4+Pj8/HypVFpfX69QKPjrZX5dZNY7YcKEoqIiK4NnMZ2xbf78+bNmzdq0adPx48e7V2YP6fV6Dw8Pp1QN0N/V1tYyHwqFwk8//fTTTz9lZePqoxo0aNC6devWrVvHSo+Ojo6OjjZ7eHR0tOksi1zlmEWXdu3aNbMZTp8+/e677zJntaX89NNP1pTPqoUrkZXB7HkBAAD0C2YXlrZygefu5e/eAsw8N83YZZ1pLCANAAC2wsg2AACAPsHWGdt4ZmYzKy4ubufOnV1dXVqtNi8vj07HjG0A4KoEAsGqVas++eQTZwcCAADQb7AWlja7wDNrgDvzIdeC0HZcgNnsAs+tra2JiYkikWj8+PElJSWsQ7CANAAA9AJ0tgEAADiHrTO2sf5yzczG9Xfbtm0PHz709vaeOnXqnDlz6HoxYxsAuCqs5ggAANBDZhd4NhqNU6ZMKS4upvIUFxeHhITwLwhtxwWYzS7wnJKSolAoGhsbz507d/LkSdZeLCANAAC9QID/BAAAAI5WX18fEBDQ2trq7EAIIcRgMJw6dWrDhg03btywe+F79uypqKjYuXOn3UsGYNm4caNer1cqlc4OpF/S6XRCobAffRGQy+V1dXWsRJlMxpr6EsCOdu3adePGjf379zs7ELBZaGjo5s2bw8PDnR0IQF9XWVkZEhJCDWXz9/evrq5m7vXz81Or1cOGDaP6kyg+Pj7Uf+SioqLs7Oxz584RQqZPn56cnDx9+nRCCFd+8stZ9Lm2rcc6SiqV3rlzRyqVEkIaGhq8vb17+DnHNCr7xg99TXp6eltbG/+9p93z1FNP1dTUSCQSu5cMAH0NRrYBAAAMFB9++KFAIBCJRAcPHrx48aLdy8eMbQDgILW1tUYT6GkDAACwF7VaTY/NojaopaYnTJjA/OdL95xFREQ8fvz4ypUrV65caWtro3raePJbyS6Lnjpx5VQs2goAMJChsw0AAGCgyMzMNBqN7e3tKpVKLpfbvXxMnwIAAAAA4Ep4FnjOyMhIS0tLS0vLyMiwJj8XuyzAHB8fv2PHDoPBUF1dnZWVxdqLBaQBAKAXoLPNlXV1dXV1deFHTwAAsJVcLheYcET/HAAAAAAA9B2shaV5FngODw+nfnR64403LOa34wLMZhd4zs7OrqqqkkgkkZGRixcvZpZPsIA0AAD0iiecHQA40MOHD1tbW+VyuZeXl7NjAQCA/gSTswEAAAAADECsLwKDBg1at27dunXrzGb+y1/+wkrhys/s62L1e0VHR9s0+6LZbjOhUPj5559//vnnZvP89NNPPSzfjvEDAICrQmebK6PussHINgAAp2tsbNTpdMybKwGg50JCQpwdAgAAAAAAAAAAOttcGjrbAAD6CIlEMnjwYGqNcQCwC6VSiQ85TtHvPmEKBAJnRdvv2goAAAAAAAC6B51trszNzY0QYv2atAAA4CDUdP8SicTZgQC4jsGDB2PGHvtSKBQ1NTUWsxmNxl4Yp6vT6Tw9Pa3MLBaLW1pauPba1NdlU70WWdlWPPHbNx4AAIB+QS6X19XVsRJlMhnmugcAgL7MzdkBgAPhXloAAAAAsNLDhw+ZD9va2lavXi2XyxUKRUFBQWBgIHPvxYsXhw8f7uHhoVKp6MSVK1eOGTNGKBROnz790qVLVCJ1t8GePXtY+XU63bJlyyQSSVBQUFlZGZWNEKLRaCZOnCgUCuVy+YoVK3Q6HX/YUqlUq9UKfsbcdebMGVYi9XDnzp1isbi4uDg/P18sFlMh8dc7adKkSZMmWdOMra2tiYmJIpFo/PjxJSUlzF1m24crflvbAQAAwGXU1tYaTaCnDQAA+jiMbHNl6GwDAOg7Hj9+/Oyzzzo7CrCgtbVVp9P5+Pg4OxCwrKmp6Xe/+52zo3Bl69ev1+v1JSUlIpHo1KlTjY2NzL1nz54tKysrKiqKi4ujhxgqlco9e/YYDIbLly/PnTuXGq1Fje6qrq4uLS29cOECnT8lJUUqlT58+LCjoyMvL4/8/Kk1KSkpJycnNDS0vb393LlzSUlJe/fu5YmzsbGRa6LIqKgo1tgy6mFnZ+eBAwdmzZqVmJh44MABKiT+eq3/RP3/2bv3sCau/H/gZxRSMIAmcjFEcKuCl2q7yqXiV55qkZuoW9SC+zxK/crWXddLWyxKreWrRUUlVi1tn4cCi7rtKt6yrRdWvLArbuxK22/bBSSiWJWES0oIGigkhPz+mF/nO5uQEEIgQN6vP3hmzsyc+ZxDa4b55Jyzbds2gUCgVCqfPHmSm5vLPtRt/5iKv7f9AAAAAAAAAHZktwUMYAAolcqmpqbRo0d7e3vbOxYAAIfW2dn5/fff2zsK6NmXX3558+bNAwcO2DsQsMi4ceOEQqG9oxiS2trauFwu/YeAUCiUy+Xso76+vjKZTCAQVFRU8Pl848spitJqtU5OToS1Ilp1dXVKSopEIuno6Jg9e3ZpaSnzhwY7mcRse3t7V1VV0fUrFApvb2+6fOzYsezEnpeXl/FEUsbxmPmjxuAos2uwYcV9u8Xn8+/du0e3q6mpydPTs1f9w7BVPGC1I0eOVFRUfPrpp/YOpBsZGRnp6en2jgKGg4MHD6akpNg7CrCbBw8ehIWFGQxtB3BMO3fubG9v37dvn81rdnFxqaurw6ISAI4AI9uGM4xsAwAYJJycnIKCguwdBfTshx9+kEql+GWBQ5HJZPSGQcqns7PTzFV0po0tISFh5cqV+fn5fD7/p59+EggE5u9rMOCM2Q4KCiouLrYweGMajYbD4VhxYR/vayoYZtvC/mHi7494YDjZsGFDRkaGvaMYpNRqdWdnp6ur6zPPPGPvWAa1LVu22DsEAAAAgOEDybbhDMk2AAAAALDOihUrRCLR3r17FQrFzZs3z549+9lnn5k5XyaTBQcHe3h4VFZWnjx5ssf6ExMTDx06tGvXrra2NnoaSVpsbGxeXl5MTIyvr++IERatMO3s7CwWixcvXnz16tXMzMwbN25YcpUB8/elF2y7fft2j/WsXLny4MGDO3fuVCgU7GGyZvqn2/it6AdwKC4uLviOvCnoGQshGQkAAABgQ/izbTij/yzv6uqydyAAAAAAMNgZTDwuEolUKpW3t/dzzz33xRdfZGVl0eX017mMf+bk5CQnJ/P5/LS0tKSkJDNn0j/37dtXX1/v6ek5b968JUuWMPfdvHmzQqEIDw/n8/nR0dGWTOZTWFiYmJjI4/Hy8vLy8/OZcoqimDsaB0D+c3Sd+fvqdDoLv8GWlZVVW1vL4/FiY2PXrl3bY/+Yit+KfgAAABgkmE/ebg9ZcVX/1dOvTEViXf8AAMAghzXbhjO1Wl1XV+fq6jp+/Hh7xwIAADAEFBQUXL582ZJBOQBDGnvNNrvTarUXLlzYsWNHRUWFvWMB+D+DfM22lpYWkUhk70BgaFu/fn1AQADWbHNk3a7ZJhAI6urq+l65+RVVbXtV/9XTd6Yi6XuE7u7uT58+7UsNwIY12wCg7zCybTjDyDYAAAAAGLTeffddiqLc3NyOHz9+/fp1e4cDAEMMxn8A9Ad27o36Rbe7mzZtmjJlCpfLjYyMLCkp6bHmS5cuGY/oam1tXbNmjZub26xZs8rLyy2J0Ip6QkND6RmheyQWizkcDkVRHh4e8+bNCwwMJL80/NChQ+7u7hKJJD8/393dXSwW05f0th961S66JDs7e/z48RwOh7kpn89Xq9UGvxEAALAvJNuGMyTbAAAAAGDQ2rNnj16v7+joEIvFPj4+9g4HYBgaii9hh2LMAMOVXq+fM2eORCKhdyUSSVhYGDMeKzMzUyqVqlSqtLS0pUuX9ljbokWLjMdybdu2TSAQKJXKK1eunD9/3pKorKhHr9dbOIwsKSlp8eLFWq22vr7+7bffVqlU9OWEEJ1OV1BQEBcXV15eXlBQkJiYSF/S237oVbvoErlcXllZSc87TZcrlUqmXYNkDB8AACDZNpwh2QYAAAAAw4CPjw9lBPk5gB4NxTewlsdsXet8fX2tuGoADNrAwEEIhUKDtU6FQiEhZNeuXenp6fQ56enpu3btorerq6t/+9vfjh07lsfj7dq1S61WW3ffv/zlL6mpqRwOx9PTc926dVbHb76esrKysrIyC+u5cOGCs7PzhAkTtm/ffvHiRebQ22+/vWLFCpVKdejQoRUrVmi1WmK7fjAvMzPTw8MjPj6evikAAAxOSLYNZ0i2AQAAAMAw0NDQoDfS0NBg77gAoAcdHR32DsGQTRaj6g/9Gtgg/EXAYCOTyZgxUvSGTCYjhERFRf3888+lpaWlpaXt7e2RkZH0+QkJCfPmzbtz545KpTp16pRNYtBoNHavZ8mSJRqNRq1Wf/vtt6tXr46KijJ/fn/0gxVs1XUAANAXSLYNZ3SyDSPKAQAAAAAAhiupVLp8+XIej+fq6hoeHn7t2jV6kSHGw4cPX3rpJScnJ/Z6P7QDBw6EhIR4eHj4+fm99dZbTU1NzCF6aItarX7llVc4HI7xtefOnQsICHBzc1u1alVbW5vB9I+FhYVCodDFxcXNzS06Ovqbb77pVaPMxEwIqa6u7na2SWaxpdGjRy9btqykpGTGjBnM0cmTJ7NH7RjXcOfOnVdeeUUoFAqFwmXLlkmlUvZR5vzi4uIXXnghMDCQHvLSbW30bkBAgCWNNRNYj5Uzv6bly5dzudxp06adOXOGXXkffxEA5JfBbexhbYQQmUwWHBzs4eFRWVn54YcfWl35ypUrDx48qNVq5XL5/v37+6key9ds8/Lyun379ogRI/z8/KZOndra2mr+fFv1gxWcnZ3FYrFWqy0qKlq4cOFA3hoAALqFZNtwRifbCAa3AQAAAAAADEd37tyJiYmJiYmpqKh48uTJiRMnqqur6bV8GL///e8/+OADrVbLXu+H9sILL5SVlT158uT77793c3OLj49nDtFf2UxNTd2yZUtHR4fBtV999dV77713+vTppqamjRs37ty5k7DmdSwpKTl+/PiFCxfa2trq6+u3b9++YcOGr7/+2vJ2mYmZEBIQENDtN0oTExMLCwv1en1zc3NOTo5MJmtsbGSO3rt3jz1qx+BrqXfu3HnttdcOHTokk8lkMtkHH3ywZs0adr6NPvnIkSO3b98uKiqSSqVHjx6ly7/88stXXnmFXVtbW9vEiRNv3bplSWPNBNZj5XS5SCR6/fXXm5qaLl++nJ2dfe3aNfrMvv8iwAF5e3sblERERHR1den1+pdffpkpzMnJSU5O5vP5aWlpSUlJhBCDJDExWoKx2/KsrKza2loejxcbG7t27Vp2PaZYUY9Op7Pwa+jPPvvsd999FxgYSFEU/U8KUxW7gTbvB1Pl7FsbhEH/88jj8fLy8vLz8y1pHQAA9CsKY56Gt/v373d1dU2YMIHD4dg7FgAAgMGuoKDg8uXLJ0+etHcgAP2rra2Ny+XiDwEAM44cOVJRUfHpp5/aO5BuZGRktLS0iEQiQshvfvOb5cuX0294u0VR1HfffffCCy8wu6b+39fpdM7OzuxvalIUderUqVdffdX42piYmLfeeis6OprePXfu3PLly5mjL7300rFjx371q18xVf373/9OSUm5cuWKJQ20MGbjcg8Pj1OnTs2dO9fDw8NM5d3WtnTp0vXr18fGxjIlRUVFOTk5f/3rX9nXFhcXM9Po6XS6kSNH0tv/9V//dejQIWbozOHDh2UyWVZWliXtNR9Yj5VTFPXXv/71N7/5Db1bVlb2zjvvXL16lfT0i1i/fn1AQEBKSorlQcIw8+DBg7CwsPr6ensHAmB/O3fubG9v37dvn81rdnFxqaur4/F4Nq8ZAAYbJ3sHAP1rxIgRXV1dGNkGAAAAADZBf596kCTqBjIYM+/BAeyopKQkLy/P/DlM1spAR0fHwYMHjx8//ujRo1GjRv361782/o+cybQZ+Prrr1988UVm96WXXmIfvX379rPPPmtwyahRo8zHaUnM5n311VebNm26efPmuHHjZsyY4erqmp2dLRAILLm2pKSEHqnGCA0NNR5Ux2TaCCFMpo0QsmfPnu3bt9Mpro6Ojo8++uif//ynFU3oVo+Vh4eHM9vPP//87du36e2+/yIAAAAAwEKYRnKYo5/+kWwDAAAAAPMsfB89MAmntrY2S04byOyX5fdyd3fv10gA2HQ6XY9Trpny5ptvtre337x588mTJ48fP/7oo49sFZWrq+uDBw/0/6nHpY/6bvr06deuXevo6Hj48OHFixfPnDnzu9/9zvLLjf83t/x//Pnz548cOZKevzE/Pz8uLs7Hx8fyW9u2cmZiG3v9IgAAAAAcEJJtw5yrq6ubmxuzeBsAAAAAQLcMZpFqb29/4403fHx8BALB0aNHAwMD2UevX78+fvx4DocjFouZwk2bNk2ZMoXL5UZGRpaUlNCF9Loj2dnZBue3tbW9/vrrPB5v9uzZUqmUWZ5EoVCEhIQocAw5AAAgAElEQVRwuVwfH5+NGzdaknV79OjRnDlzeDze2rVrmZfIdIWXLl0ihFy6dImiKD8/P+aS0NBQZkK2HtGXG+QzTLWLz+er1WrqFxbeAsBqYWFhX375pXXXnjx5MiUlxdPT08nJydXVdezYsZZfGxwcXFZWxuzSg64YcXFxn3/+uXVR2Rb9j4AZHR0d9MaCBQu++uor9qFbt25FRERYfq89e/a8++67Go3m8OHD27Zt622opgKzpHKJRMJs//DDD0FBQfT24PlFAPSKj48PZcSGCWwAAID+gBzMMOfl5SUQCFxcXOwdCAAAAAAMJdu3b9doNOXl5TU1NVwuV6lUso8WFRVJpdLCwkL2HGuZmZlSqVSlUqWlpS1dupQupMeFyOXyyspK9vnbtm3j8/n19fWlpaV/+9vfmDNTU1NFIpFGo7l//35ERERqamqPoR49evTMmTP37993c3PbunUrXXjr1q05c+YsWrSIEBIbGxscHHzx4kXmEnp4h4VdsWjRIlPjXYzbRXcUM4LEwlsAWG3v3r3vvffe1atX9Xr9zz//LJVK8/Ly1q5da8m1AQEBn376aWtrq1KpPHbs2KpVqyy/786dO99+++27d+9qtVqJRPKPf/yDfTQzMzM3N3f37t0//vijVqtVKpWXL1+Oi4vrXdt6z8vL64svvmhubqZ3JRKJs7OzwTnOzs50dryuri47O3vu3Ll0+f79+3fs2CGRSDo7Ozs7OyUSSXp6+v79+y2/e3Bw8Pjx4xMSEhYuXOjr69vb4E0FZknlNTU1xcXFHR0djx8/Tk1N/Z//+R+63F6/CIA+amho0BtpaGiwd1wAAABmGX96AQAAADimP/3pT4mJifaOAqDf0cO/6G3jl7a+vr56vX7cuHFNTU3dXk4I0Wq1zDa9cffu3cWLF/P5fC6XS68exD7feNvLy4upv7GxkSnn8/nsYLy8vMy3hRBSW1tLbzc1NbHPj4+PP3v2rF6vP3369MqVK3vqlR4Y/+nUYxthSDt8+PDrr79u7yi69/7772/ZsoXZ/de//rVw4cLRo0ePGTMmJCQkOzu7tbWVPmTwh7/BblVV1fz580eNGiUUClNTU588eWLmZON3CGfOnJk0adKoUaNWrlxJX8sOsra29rXXXvP09ORwOFOmTNm2bVtjY6MlrevxvmbebISEhNy+fXvlypUCgWD27Nl+fn7nzp0zqP/cuXPOzs70aNfNmzfL5XLmUGVl5ZIlS9zc3Nzc3JYuXVpVVdVtYGZep/zwww/Ozs4PHz60pKWWB2a+cvrf5HXr1rm5uU2aNKmwsJB91Mwv4g9/+MPBgwetCBWGjZqaGh8fH3tHATAo/M///M+2bdv6o+ZnnnlGqVT2R80AMNg4dfucCgAAAAAAjkAmk9EbFEXpWW+TOzs7zVzl5GT4d0RCQsLKlSvz8/P5fP5PP/3U4wpw7CkW2fcNCgoqLi62MHgDXV1d7OnT9+7du2LFiri4uPfff//s2bPW1dlHGo2GWTwJoJ+EhoZeuXKl20P6/0wRGexOmTKFmfHV+ATz1xJCli9fvnz5cnpboVAYrFYoFAqPHj1qSfy9irnbEsbt27cJISdOnDBTf3x8vEaj6fbQtGnTzMzJaea+jLKystdee83f37/HM3sVWI+VOzk55eTk5OTkGB+y+hcBAAAAAL2CaSQBAAAAAMDQihUrRCIRIUShUIjF4h7nl5PJZMHBwR4eHpWVlR9++GGP9ScmJh46dKirq0utVufl5THlsbGxeXl5tbW1XV1dFoaam5tbW1vb3Ny8Z8+ehIQEpnzq1KlhYWFLlix58cUXAwIC2Jf0as223qLngtNqtUVFRQsXLuynuwAMHnK5fMeOHZZM+jq86XQ6kUj0zjvvDLnKAQAAAKDvkGwDAAAAAADi7e3N3hWJRCqVytvb+7nnnvviiy+ysrLocnpEmvHPnJyc5ORkPp+flpaWlJRk5kz65759++rr6z09PefNm7dkyRLmvps3b1YoFOHh4Xw+Pzo6et++fWZipqtas2bNsmXLJk6cqFarDc5/5513bty4kZ6ebnChTqezZJAKcxcmcmZAnql2EULoJdx4PF5eXl5+fr6FdwEYcg4cOED/T/HrX/965syZ7733nr0jshu6H5ycnO7cuTNp0qSBrNzg3x8AGOTYzxK2smPHDmb7xIkTI0eOpCiKw+HQy0Aa3JqiqDFjxlRWVtKFN27cWLVqVXx8vPEl7GoBAMASmEYSAAAAAABIQ0MDe5fL5X7yySeffPKJwWmmZpmLj4+Pj483PmTq/FGjRuXm5ubm5mq12gsXLkyfPp0uHzly5DvvvGPh6A2mQnruOGMXL15cv369n5+fQfk333xjSf3GYXdbaHBCj3PBAQwPW7du3bp1q72jGBQsT97bvPJ+vTU4JoFAUFdXN8A3bWtrGzVqlIUnu7u7P336tF/j6T96vd62ybbq6urm5mZmd8OGDRcuXIiNjRWLxYmJiQYPJMb/Yqxbt+7WrVs8Ho8QIpFIoqKi1Go1fai5ubmmpmbixIk2jBYAYHjDyDYAAAAAALCDd999l6IoNze348ePX79+3eb1UxS1efPmw4cP27xmALDahAkTKBMmTJhg7+j6hQM2GYa0+vp69m57e/sbb7zh4+MjEAiOHj0aGBhIl2u12rS0tClTpgQGBm7dupVO6tD/YR86dMjd3V0ikeTn57u7u4vFYlPlhBCFQhESEsLlcn18fDZu3NjW1kbXT1+SnZ09fvx49ogrPp+vVquZ/4mYOMViMYfDoSjKw8Nj3rx5TJw0C6ePNqjWYHfTpk1TpkzhcrmRkZHMgpf0CSqVKjk52d3dnZlQ11S/0a5fv27Qrt7Wz8jNzY2KimJ2lUplbGwsISQuLm7WrFk9Nrmjo4POtBFC5s6d29rayhyKiIjodiVIAAAwBck2AAAAAACwgz179uj1+o6ODrFY7OPjY/P69b+wec0AYLWHDx/qTXj48KG9o+sXDthkGE62b9+u0WjKy8tramq4XK5SqaTLd+zYIRQKpVLp3bt3hUIhPeUg/Zmr0+kKCgri4uLKy8sLCgoSExNNlRNCUlNTRSKRRqO5f/9+REQEk0yiL5HL5ZWVlfT8zHQ5HYDxR3xSUtLixYu1Wm19ff3bb7+tUqnYrbDweUCv18+ZM0cikdC7EokkLCyMuTAzM1MqlapUqrS0tKVLl7LjXLZsWXh4uEwmi4mJMd9vtKKiIqlUym5Xb+tnFBcXT5s2zbgt165du3jxIrvE1dWVTt2xk3yPHz821RtTp04tLi423VsAAGCIwh+fAAAAALSCgoLLly+fPHnS3oEA9K+2tjYulzuE/hDw8fFpbGw0KPT29jaY+hLAho4cOVJRUfHpp5/aO5BuZGRktLS0iEQiewcCQ9v69esDAgJSUlLsHQjYzYMHD8LCwuihbEKhUC6Xs4/6+vrKZDKBQFBRUcHn8w2uHTduXFVV1ZgxYwghzc3N06dPpyefpKj//6bRYMNU+dixY9mJKC8vL+YTnznTzDbj/Pnzy5cv12q1np6eXl5ex44dCwkJsaJPiouLs7Kyrly5QgiJjIzcunVrZGQkIaS6ujolJUUikXR0dMyePbu0tJQdz9OnT93c3Nj1mOo3+nytVuvk5MRuS2/rZ4wePVomkxkcvXr16owZM8aNG9ftJY8ePZo8eTIzGJHdmezdJ0+e+Pv7G6Qth7GdO3e2t7ebXy3YOi4uLnV1dcwIQgAYxjCybZjr6Oi4f//+jz/+aO9AAAAAAACs1NDQYDwiBJk2AAAAW5HJZMzwL3pDJpMRQjo7O01dYpNv7QQFBbE/3I2/W2MesybZkiVLNBqNWq3+9ttvV69ezZ5ZsVeioqJ+/vnn0tLS0tLS9vZ2OtNGCElISJg3b96dO3dUKtWpU6cMrjLOhJnpN0IInWlj6239DOPfwvHjxydMmGAq00YI8ff312q1po7qdDozlQMAgBmG/7jDMENRVFdXl20XXwUAAACAIY1+jYLRDABm/O///u+g/RL63//+9+vXrx88eNDegcCQt3TpUnwWgHkrVqwQiUR79+5VKBQ3b948e/bsZ599RghJSkrKzc2lZ33MyclZvXq1dfXHxsbm5eXFxMT4+vqOGGHRkABnZ2exWLx48eKrV69mZmbeuHGDEOLl5XXx4sWZM2f6+flNnTqVvfYYIYResO327duW1L9r16709HR6gymUyWTBwcEeHh6VlZWWTINhqt9M6W39jAkTJsjlcmZNuNOnT8+cOTMgIID85zC18PDwBQsWvPbaa5MmTRKLxc7OznS5q6urRCKZO3cuIaSsrMzDw6Orq2vkyJGEkNra2okTJ1oeCQAAINk2zDk7O//qV7+ydxQAAAAAMIjQ37a+deuWvQMBGLzq6+vNfPHfvubPnz9r1ixMIwl9RE8jae8oYNDx9vZm74pEotTUVLpw0aJFWVlZdPnu3bvfffddPz8/Qshvf/vbPXv2EELor3p3O2Nkt+WEkM2bNx84cCA8PLy5ufnFF19csGBBWlqawSUGl9NLnXE4nOjo6Pz8fLqeZ5999rvvvlu+fHltba2zs3NhYSG7FTqdzsJMHiEkIiLi/fffpyjq5ZdfZgpzcnKSk5MbGxvnz5//wQcfZGZmGsRGn8a0y1S/mWpXb+tnREVFVVVVMcm2NWvWtLW1GTdKLBZv2bIlKCiopaWF3T+ff/75/Pnz6ek3ORzO+fPnmTxcVVVVdHS0hZ0GAAAEa7YBAAAAMLBmGziIIbdmG8DAw5ptMOxhzTZgr9kGQ9Tdu3ePHDny8ccf27zmDRs2bNmyxXEGt2HNNgDoO6zZBgAAAAAAAAAAADDEBAYGjhkzpj9q5vP5jpNpAwCwCUwjCQAAAADgiGpqauwdAsDg1dTUZO8QAAAAekbP4WlzGRkZ/VEtAMAwhmQbAAAAAIBjoShq4sSJkZGR9g4EYFBLTEy0dwg2wF4byfgQ6W4FIFvVDwAAAADgOJBsAwAAAABwLK6urvfv37d3FABgSwKBoK6uzrjcTCZMr9fT+ba+sDzT5u7u/vTp0z7eDgAAAABgcMKabQAAAAAAAABDW319vUHJpUuXKIoySKe1trauWbPGzc1t1qxZ5eXlBpeEhoaGhoZaeMdu66dLsrOzx48fz+FwxGIxXc7n89VqNfWLXjQMAAAAAGAowMg2AAAAAAAAgOFm0aJFxmPXtm3bJhAIlErlkydPcnNzDS7p1YSQ3dZPl8jl8srKymvXriUmJmo0GkKIUqnEhJMAAAAAMIxhZBsAAAAAAADAkCQUCpmxYvSGUCg0c/5f/vKX1NRUDofj6em5bt06g6NlZWVlZWV9jyozM9PDwyM+Pl6r1fa9NgAAAACAwQ8j24a/9vb21tZWJyen0aNH2zsWAAAAAAAAsBmZTEZvWDFujB5zZhcajYbD4djr7gAAAAAANoeRbcOfRqNRKpWtra32DgQAAAAAAADsaeXKlQcPHtRqtXK5fP/+/QZHe7VmW285OzuLxWKtVltUVLRw4cJ+ugsADHLdrtooFos5HA6fz1+wYIEl5/d3PPYydFe17I/Id+zYwWyfOHFi5MiRFEWxVwNl35qiqDFjxlRWVtKFN27cWLVqVXx8vPEl7GoBAGwLybbhb+TIkYQQnU5n70AAAAAAAACgX3h7exuUGEwvSRdmZWXV1tbyeLzY2Ni1a9eS/3zRrNPpLB8e1239TInBT0JIYWFhYmIij8fLy8vLz8+3sp0A0M8EAkEfa3B3dzdztNt/ZBITEwsLC5VKZUlJiSXn93c89mIqmLa2tgGOpLds3o3V1dXNzc3M7oYNGy5cuKDX6+mPEuO76/V6lUo1ffp0umTdunXZ2dlisViv1//9739fvXo1c3Jzc3NNTY1towUAoCHZNvwh2QYAAAAAADC8NTQ0GJTo/xNdyOVyjx07plarv//+++eff559iBDyzTffWL5mW7f1s3cNDsXHx2s0GrVaffbs2YCAgL40FgD6T319PXuXzqZnZ2ePHz+ePUJIq9WmpaVNmTIlMDBw69atzLS0fD5frVYzg43YVV26dMm4cMKECRRFabXaZcuWGRzt9vz29vY33njDx8dHIBAcPXo0MDCQObRp06YpU6ZwudzIyEgmadfbeEy1y1Q/mEKfr1KpkpOT3d3dU1NT2eXG26YoFIqQkBAul+vj47Nx40aDrJuFw5ENmm+w222/mYrfTP8TQq5fv27cP72qn5GbmxsVFcXsKpXK2NhYQkhcXNysWbN6bHJHRwePx6O3586dy57uKyIiIicnp8caAACsgGTb8DdixAiCZBsAAAAAAAAAAPQGnS+Xy+WVlZXsQUU7duwQCoVSqfTu3btCoZCZmk+pVBKjXDtt0aJFxuOfHj582G163tT527dv12g05eXlNTU1XC6Xvh0tMzNTKpWqVKq0tLSlS5daF4+pdpnqB/P9tmzZsvDwcJlMFhMTwy433jYlNTVVJBJpNJr79+9HREQYJKWMG2UqmDlz5kgkEnpXIpGEhYUxF3bbb6biN9P/hJCioiKpVGrQP72qn1FcXDxt2jTjtly7du3ixYvsEldXVzp1x07yPX782FRvTJ06tbi42HRvAQBYr9dLKMOQo9Pp6PHRkydPHqJTPwMAAAyMgoKCy5cvnzx50t6BAAAAmJSRkdHS0iISiewdCAxt69evDwgISElJsXcgYDcPHjwICwujh7IJhUK5XM4+6uvrK5PJCCEU9X8vD5ntcePGVVVVjRkzhhDS3Nw8ffr0uro6g3O61e1RM5cYHBIIBBUVFXw+3+C06urqlJQUiUTS0dExe/bs0tJS45gtqd/Cdpmvkznn6dOnbm5uZu5oXI9BydixY9kJLS8vr8bGRvP37VZxcXFWVtaVK1cIIZGRkVu3bo2MjCQ99Ztx/Kb6nz5fq9U6OTmxW9Hb+hmjR4+WyWQGR69evTpjxoxx48Z1e8mjR48mT55MD0Y06Eb27pMnT/z9/VUqlcHlO3fubG9v37dvX7eV94WLi0tdXR0z0g4AhjGMbBv+6GkkCSFdXV32jQQAAAAAAAAAAAYbmUxmMAcsnWkzw5Kv7zPTMNpKZ2dnt+UJCQnz5s27c+eOSqU6depUX+Kx4bAEU5kkmiWv6YKCgtgT9lqXaSOEREVF/fzzz6WlpaWlpe3t7XSmjfTUb8bxm+p/Gp1pY+tt/Qzj38Lx48cnTJhgKtNGCPH399dqtaaOsmf8wsgTAOgnSLY5BMwkCQAAAAAAAAAANpGUlJSbm0tngHJyclavXs0ccnZ2FovFWq22qKho4cKFtr3vihUr6HG9CoVCLBavWrWKLpfJZMHBwR4eHpWVlR9++CH7kl7FY6ZdtkLHU1dX9+abb/Z4cmxsbF5eXm1tbbeZOQvXbKPt2rUrPT09PT19165dTKGZfuuWqf43pbf1MyZMmMAeann69OmZM2fS632yZ+0KDw9PT0+/f/8+IUQsFjs7O9Plrq6uzLSZZWVlHh4eTAfW1tZOnDjR8kgAACyHZJtDoAe3IdkGAAAAAAAAAACmeHt7s3fpxIbxz927dysUCj8/Pz8/v6ampt27dzOX0Et28Xi8vLy8/Px8dlVMDUy+5NKlS+xCdh6l2/NFIpFKpfL29n7uuee++OKLrKwsujwnJyc5OZnP56elpSUlJRFWSqZX8Zhql6l+MMVUo+h4Vq5cuWTJkt/97nfserqNZ/PmzQqFIjw8nM/nR0dHG0xyqNPpLB+kFRER0dXVpdfrX375ZabQVL+Zit9U/5vqn97Wz4iKiqqqqmJ216xZM3v2bOOTxWLxw4cPg4KCKIpKTEwsLCykyz///PP58+dTFOXl5fXKK6+cP3+eycNVVVVFR0db2GkAAL2CNdscwuPHj9vb2319fblcrr1jAQAAGLywZhsAAAx+WLMNbAJrtgF7zTaAQeXu3btHjhz5+OOPbV7zhg0btmzZYjy4DWu2AUDfYWSbQ8DINgAAAAAAAAAAABj8AgMDx4wZ0x818/l8TCMJAP0EyTaHgDXbAAAAAAAAAAAAYEjYs2dPf1SbkZHRH9UCABAk2xwERrYBAAAAAADAcGVq1Z++2LFjB7N94sSJkSNHUhTF4XDEYrHxrSmKGjNmTGVlJV1448aNVatWxcfHG1/CrhYAhjQfHx/KiI+Pj73jAgAA+3CydwAwEOhkW1dXl70DAQAAAAAAANsTCAR1dXX9VHlbW9uoUaP6qXKb0Ov1tk22VVdXNzc3M7sbNmy4cOFCbGysWCxOTEzUaDQGdze4fN26dbdu3aJX6JFIJFFRUWq1mj7U3NxcU1ODScwAhoGGhgZ7hwAAAIMIkm0OASPbAAAAAAAAhrH6+nr2Lp15+vDDD/fv39/Y2FhYWBgfH08f2rRpU3FxcW1t7dy5c7dv375gwQL65A8++CA9Pf3y5ct37tx58803jx8/Hh8fr1AoFi1a9PXXX3t7e7/66qsHDhxgZ91CQ0MJIbdv3zYfG5MGo5NSBrvG8TDnNDc3b9my5dSpU3/4wx+ysrIIIe3t7du2bTt58uSIESMyMzP37t179+5d5kbXr19PSkrqsb1m6mfk5uZGRUUxu0qlkt6Ii4ubNWtWD78MQjo6OuhMGyFk7ty5ra2tzKGIiIicnJz9+/f3WAlAf2ttbW1paVm9erW9AwGwvx9++OGFF16wdxQAMLRhGkmHgGQbAAAAAACA46DzWHK5vLKysrCwMDExkTmUmZkplUpVKlVaWtrSpUuZk3U6XUFBQVxcXHl5eUFBAX1JamqqSCTSaDT379+PiIhITU01uIvxoK5ug5kzZ45EIqF3JRJJWFgYc6FxPExIy5YtCw8Pl8lkMTExdPn27ds1Gk15eXlNTQ2Xy2VyYLSioiKpVNpje83UzyguLp42bZpxW65du3bx4kV2iaurKz13HHu6yMePH5vqjalTpxYXF5vuLYCBo9Fourq6RgDAiBEURTFDkAEArENZ8mQMQ11bW5tMJnvmmWf8/f3tHQsAAMDgVVBQcPny5ZMnT9o7EAAAAJMyMjJaWlpEIhEhRCgUyuVy9lFfX1+ZTEYIoaj/+3uf2a6urk5JSZFIJB0dHbNnzy4tLWVGm3W7MXbsWHZCy8vLq7Gx0YqYi4uLs7Kyrly5QgiJjIzcunVrZGSkmXjoAJ4+ferm5sauRyAQVFRU8Pl841tQFKXVap2cnCxpr6n6GaNHj5bJZAZHr169OmPGjHHjxnV7yaNHjyZPnkzPMMnufIPdJ0+e+Pv7q1Sqnvqs361fvz4gICAlJcXegYDdPHjwICwszGBcLIBj2rlzZ3t7+759+2xes4uLS11dHTPcGQCGMYxscwj03xudnZ32DgQAAAAAAABsRiaTMcPL6A0602ZKQkLCvHnz7ty5o1KpTp061WP9QUFBehbrMm2EkKioqJ9//rm0tLS0tLS9vZ3OtPUYj3EmzPxftfRfvmy9rZ9h/L3k48ePT5gwwVSmjRDi7++v1WpNHWXPNIMvPQMAAAAMP1izzSEw00jafNVoAAAAAAAAGCpkMllwcLCHh0dlZaUlI7ljY2Pz8vJiYmJ8fX1HjDD8tq6Fa7bRdu3alZ6eTm9YHc+KFStEItHevXsVCsXNmzfPnj372WefmTm/t/UzJkyYIJfLAwMD6d3Tp0/PnDkzICCA/OcwtfDw8AULFrz22muTJk0Si8XOzs50uaurq0QimTt3LiGkrKzMw8Ojq6uL/sO8trZ24sSJlkcC0K80Gs3Vq1ftHQWA/dXU1Pj6+to7CgAY2pBscwgjR46k/x7Q6XTG3/UDAAAAAACAIc3b25u9S3/Jkv4zkL2dk5OTnJzc2Ng4f/78Dz74IDMzk/k6pvFMkoSQzZs3HzhwIDw8vLm5+cUXX1ywYEFaWhpzF51OZ5yBMyUiIuL999+nKOrll19mCruNhx0zfRoTj0gkSk1NpRu7aNGirKwsK9prpn5GVFRUVVUVk2xbs2ZNW1ubcaPEYvGWLVuCgoJaWlqcnZ0LCwvp8s8//3z+/PlardbT05PD4Zw/f57Jw1VVVUVHR1vYaQD96plnnpk4cSL7f2oARxYSEmLvEABgaMOabY7iwYMHnZ2d/v7+zzzzjL1jAQAAGKSwZhsAAAx+7DXboJ/cvXv3yJEjH3/8sc1r3rBhw5YtWwbD4Das2QYAMACwZhuA48AgJ0chEAhGjBjBfJkOAAAAAAAAALoVGBg4ZsyY/qiZz+cPhkwbAAAAANgWkm2OwsXFxd4hAAAAAAAAAAwNe/bs6Y9qMzIy+qNaAAAAALAvS2dXBwAAAAAAAAAAAAAAAAADSLYBAAAAAAAAAAAAAAAAWAnJNgAAAAAAAAAAAAAAAAArIdkGAAAAAAAAAAAAAAAAYCUk2wAAAAAAAAAAAAAAAACshGQbAAAAAAAAAIBJFEVRFGXbOnfs2MFsnzhxYuTIkRRFcTgcsVhsfGuKosaMGVNZWUkX3rhxY9WqVfHx8caXsKsFAAAAgAHjZO8AAAAAAAAAAKBPBAJBXV3dAN+0ra1t1KhRFp7s7u7+9OnTfo2n/+j1etsm26qrq5ubm5ndDRs2XLhwITY2ViwWJyYmajQag7sbXL5u3bpbt27xeDxCiEQiiYqKUqvV9KHm5uaampqJEyfaMFoAAAAA6BFGtjmQlpaWpqYmnU5n70AAAAAAAADAlurr69m77e3tb7zxho+Pj0AgOHr0aGBgIF2u1WrT0tKmTJkSGBi4detWOqlDD5w6dOiQu7u7RCLJz893d3cXi8WmygkhCoUiJCSEy+X6+Phs3Lixra2Nrp++JDs7e/z48ewRV3w+X61WM4O0mDjFYjGHw6EoysPDY968eUyctNDQ0NDQ0B7bblCtwe6mTZumTJnC5XIjIyNLSkrY56hUquTkZHd399TUVPP9Rrt+/bpBu3pbPyM3NzcqKorZVSqVsbGxhJC4uLhZs1nhGc8AACAASURBVGb12OSOjg4600YImTt3bmtrK3MoIiIiJyenxxoAAAAAwLaQbHMgzc3NSqVSq9XaOxAAAAAAAADoR9u3b9doNOXl5TU1NVwuV6lU0uU7duwQCoVSqfTu3btCoZCecpAeOKXT6QoKCuLi4srLywsKChITE02VE0JSU1NFIpFGo7l//35ERASTTKIvkcvllZWVhYWF9MmEEDoA/S+YOJOSkhYvXqzVauvr699++22VSsVuhcHJpuj1+jlz5kgkEnpXIpGEhYUxF2ZmZkqlUpVKlZaWtnTpUnacy5YtCw8Pl8lkMTEx5vuNVlRUJJVK2e3qbf2M4uLiadOmGbfl2rVrFy9eZJe4urrSqTt2ku/x48ememPq1KnFxcWmewsAAAAA+gVlyZMrDA9NTU1dXV2jR4/mcDj2jgUAYCg5evToRx99ZO8oHJRcLm9paRmw23V2dnK5XMy8RDt+/Pj06dPtHQUAABjKyMhoaWkRiUSEEKFQKJfL2Ud9fX1lMplAIKioqODz+QbXjhs3rqqqasyYMYSQ5ubm6dOn05NPUtT/fzlgsGGqfOzYsexElJeXV2NjI73NnGlmm3H+/Pnly5drtVpPT08vL69jx46FhIRY0SfFxcVZWVlXrlwhhERGRm7dujUyMpIQUl1dnZKSIpFIOjo6Zs+eXVpayo7n6dOnbm5u7HpM9Rt9vlardXJyYrelt/UzRo8eLZPJDI5evXp1xowZ48aN6/aSR48eTZ48mRmMyO5M9u6TJ0/8/f0N0pbdWr9+fUBAQEpKSo9nAgCA1VxcXOrq6pjhyAAwjGHNNgcyduxYe4cAADAk1dXV+fv7//GPf7R3II7oxx9/NPhSeX/j8XjPPvvsQN5xcPrd737HnpMKAAAGJ5lMRm8YZF86OztNXWKTb9wGBQX1ZfiURqOhvwO6ZMkSjUbT2tqqVCo/++yzqKgo9kpmlouKinr//fdLS0sJIe3t7XSmjRCSkJCwcuXK/Px8Pp//008/CQQC9lXGmTAz/UYIoTNtbL2tn2H8Wzh+/HhYWJipTBshxN/f38xENTqdbuTIkaYqBwAAAID+hmQbAABAz/z9/RcuXGjvKAAGjpn3gwAAMPitWLFCJBLt3btXoVDcvHnz7Nmzn332GSEkKSkpNzeXnvUxJydn9erV1tUfGxubl5cXExPj6+s7YoRF61M4OzuLxeLFixdfvXo1MzPzxo0bhBAvL6+LFy/OnDnTz89v6tSpBt/zoBdsu337tiX179q1Kz09nd5gCmUyWXBwsIeHR2Vl5cmTJ3usxFS/mdLb+hkTJkyQy+XMmnCnT5+eOXNmQEAA+c+8aXh4+IIFC1577bVJkyaJxWJnZ2e63NXVVSKRzJ07lxBSVlbm4eHR1dVFJ9tqa2sxRh8AAABg4GHNNgAAAAAAAIChzdvbm70rEolUKpW3t/dzzz33xRdfZGVl0eW7d+9WKBR+fn5+fn5NTU27d+8mhFAUxfw03jAuJ4Rs3rxZoVCEh4fz+fzo6Oh9+/YZX2JwOb3UGY/Hy8vLy8/PpwufffbZ7777LjAwkKKoxMTEwsJCdit0Op3lg7QiIiK6urr0ev3LL7/MFObk5CQnJ/P5/LS0tKSkJOPYaD32m6l29bZ+RlRUVFVVFbO7Zs2a2bNnG58sFosfPnwYFBRk0D+ff/75/PnzKYry8vJ65ZVXzp8/z+ThqqqqoqOjLew0AAAAALAVrNkGAADQg8zMzIaGhsOHD9s7EICBM2PGjIKCAusWzgEAgH7FXrMNhqi7d+8eOXLk448/tnnNGzZs2LJliyWD27BmGwDAAMCabQCOAyPbAAAAAAAAAAAGTmBg4JgxY/qjZj6fj2kkAQAAAAYekm0AAABgEVPzIA1XjtZeAAAAGEh79uzpj2ozMjL6o1oAAAAAMA/JNgAAALCIo0097WjtBQAAAAAAAAAA6yDZBgAAAENDR0eHvUMAAAAAAAAAAAAwhGSbY9Hr9Vqttqury96BAADAICWVSpcvX87j8VxdXcPDw69duxYYGMg+4eHDhy+99JKTkxOHwxGLxexDBw4cCAkJ8fDw8PPze+utt5qamphD9JSMarX6lVde4XA4xteeO3cuICDAzc1t1apVbW1tBlM4FhYWCoVCFxcXNze36Ojob775xlYtMhMzTavV/v73v3d3dw8ICDhz5ozl9wUAAAAAAAAAAAeBZJtjefz48Y8//tje3m7vQAAAYDC6c+dOTExMTExMRUXFkydPTpw4UV1drVQq2ef8/ve//+CDD7RabWFhYWJiIvvQCy+8UFZW9uTJk++//97NzS0+Pp45RE/JmJqaumXLlo6ODoNrv/rqq/fee+/06dNNTU0bN27cuXMnYc3iWFJScvz48QsXLrS1tdXX12/fvn3Dhg1ff/21TVpkJmZaenp6VFSUTCb75JNPUlJSJBKJJfcFAAAAAAAAAADHQWE9Eocil8tbW1u9vb1Hjx5t71gAAIaMzMzMhoaGw4cP2zuQfveb3/xm+fLlSUlJpk6gKOq777574YUXmF1TDxI6nc7Z2Zk9lpqiqFOnTr366qvG18bExLz11lvR0dH07rlz55YvX84cfemll44dO/arX/2Kqerf//53SkrKlStX+t6iHmPOz89fu3YtvfvXv/71k08+KS4utqS2oW7GjBkFBQUhISH2DgQAAAxlZGS0tLSIRCJ7BwJD2/r16wMCAlJSUuwdCADAcObi4lJXV8fj8ewdCAD0O4xscyxOTk6EkM7OTnsHAgAAg1FJSUlsbKz5c5hMm4GOjo69e/dOnTp11KhRnp6e0dHRxnk4JtNm4Ouvv37xxReZ3Zdeeol99Pbt288++yzF8vzzz1s4wsx8iyyJeenSpcx2eHj4t99+a8l9AQAAAAAAAADAcTjZOwAYUEi2AQCAGTqdjr1SWq+8+eabXl5eN2/eHDNmjFarffjw4bRp02wSlaur6507d9gj2yxnvkW9jXnkyJEjRuCLSgAAMGzRH5rdDls3M5zdzFX9V0+/MhWJdf0DAAAAAI4AL4wcC5JtAABgRlhY2JdffmndtSdPnkxJSfH09HRycnJ1dR07dqzl1wYHB5eVlTG7V69eZR+Ni4v7/PPPrYvKfIssiZl9+a1bt4KDg62LBAAAoF8JBIK+V2ImXWTdof6rp1+ZisQmwbu7u1sTEwAAAAAMbki2ORZnZ2eCZBsAAJiwd+/e99577+rVq3q9/ueff5ZKpXl5ecyKZeYFBAR8+umnra2tSqXy2LFjq1atsvy+O3fufPvtt+/evavVaiUSyT/+8Q/20czMzNzc3N27d//4449arVapVF6+fDkuLq7vLbIkZqlUeu7cuadPn5aUlGzatGnXrl2WtwsAAGDA1NfXM9vMxMvd7m7atGnKlClcLjcyMrKkpKTHmi9dusS+nNba2rpmzRo3N7dZs2aVl5dbEqEV9YSGhoaGhlpSuVgs5nA4FEV5eHjMmzcvMDCQ/NLwQ4cOubu7SySS/Px8d3d3sVhMX9LbfuhVu+iS7Ozs8ePHczgc5qZ8Pl+tVhv8RgAAAABgGECyzbFgZBsAAJgRGhoqFov379/P4/F8fX1Xr17d3t7+0Ucf0UfpV0LsN3fs3T//+c9FRUXe3t7PP/98RUXFmTNnzJxssDtnzpz09PRFixaNGTMmOzt7//797KjGjx//z3/+8969eyEhIW5ubnPnzi0pKTl69GjfW2RJzO+///7FixcFAsG6deuysrJCQkJ616cAAAADTq/Xz5kzh1nfVCKRhIWFMUOvMjMzpVKpSqVKS0tjL01qyqJFi4yHbW3btk0gECiVyitXrpw/f96SqKyoR6/XWzhiLCkpafHixVqttr6+/u2331apVOSX0WY6na6goCAuLq68vLygoCAxMZG+pLf90Kt20SVyubyysrKwsJC5qVKpZNo1eEbyAQAAAEDfYVZxx6LX6+/du0cImTRpEladAQCwUGZmZkNDw+HDh+0diKNQKBSTJk168uSJvQNxaDNmzCgoKEByEQBgEMrIyGhpaRGJRIQQoVAol8vZR319fWUyWXFxcVZW1pUrVwghkZGRW7dujYyMJIRUV1enpKRIJJKOjo7Zs2eXlpYavBMwtfaYQTmfz7937x6fzyeENDU1eXp6Wrdmm9X1GDh//vzy5cu1Wq2np6eXl9exY8fojzDmdgYbtuoHM+XsElPb9rV+/fqAgICUlBR7BwIAMJy5uLjU1dXxeDx7BwIA/Q7pFsdCUdTIkSMJBrcBAMBgJZfLd+zYkZqaau9AAAAAhgCZTMaMkaI3ZDIZISQqKurnn38uLS0tLS1tb2+nM22EkISEhHnz5t25c0elUp06dcomMWg0GrvXs2TJEo1Go1arv/3229WrV0dFRZk/vz/6wQq26joAAAAAsDsk2xwOPZOkVqu1dyAAAAD/58CBA/TiJb/+9a9nzpz53nvv2TsiAACAoW3Xrl3p6enp6ensBUdlMllwcLCHh0dlZeWHH35odeUrV648ePCgVquVy+UG8z/bsB7L12zz8vK6ffv2iBEj/Pz8pk6d2traav58W/WDFZydncVisVarLSoqWrhw4UDeGgAAAAD6D5JtDgfLtgEAwCC0detW+vv4jY2NGzdutHc4AAAAQ4y3t7dBSURERFdXl16vf/nll5nCnJyc5ORkPp+flpaWlJRE/nOxUmZRVabQVHlWVlZtbS2Px4uNjV27di27HlOsqEen01k44+Kzzz773XffBQYGUhSVmJhYWFhITCwZa9t+MFXOvrVBGPQSbjweLy8vLz8/35LWAQAAAMDgN1jmCocB09jY2NLSwufzx44da+9YAACGBqzZNmhNmDDh0aNH3R7y9/d/+PDhAMcznGDNNgCAQYu9ZhuA1bBmGwDAAMCabQCOw8neAcBAw8g2AAAYNpBOAwAAAAAAAAAAu8M0kg7H2dmZINkGAAAAAAAAAAAAAABgC0i2ORyMbAMAAAAAAACb8/HxoYz4+PjYOy4AAAAAgH6HaSQdDpJtAAC99a9//evq1at/+tOf7B0IwMDRaDT37t3Dmm0AAGC5hoYGe4cAAAAAAGAfSLY5HDrZ1tXV1dXVNWIEhjYCAPRs+vTpLi4uqamp9g4EYOCsWLFCKBTaOwoAAAAAAAAAgCEAyTaHQ1HUyJEjdTpdZ2cnh8OxdzgAAEOAu7v7uHHjgoKC7B0IwMDhcrmurq72jgIAAAAAAAAAYAjAwCZHhJkkAQAAAAAAAAAAAAAAbALJNkdEJ9u0Wq29AwEAAAAAAAAAAAAAABjaMI2kI+JyuU5OTphDEgCgP1AUpdfrTR0ihJg6ar7OHi80c1+bnA8AAAAw8Oz4xGL1kxsAAAAAOCCMbHNEo0eP9vb2xkIsAAB9IRAIui0380bG6pc1llzY28otP9/d3b1XNQMAAMDAM/Vk0ittbW2Wn2zmCcFW9ZBePuH06r49svDWtuoHAAAAABjSkGwDAACwRn19vUHJpUuXKIqivwTNaG1tXbNmjZub26xZs8rLyw0uCQ0NDQ0NtfCOjx49mjNnDo/HW7t2bWtrq/n7trW1vf766zweb/bs2VKplH1Ct+fTJdnZ2ePHj+dwOGKxmC7n8/lqtZr6hYWhAgAAwAAzeDJpb29/4403fHx8BALB0aNHAwMD6XL6A12lUiUnJ7u7u6emptLlCoUiJCSEy+X6+Phs3LiRnSXatGnTlClTuFxuZGRkSUkJXWjqCcFMPd0y86Rh/MRC7x46dMjd3V0ikeTn57u7u9MPLebva/kTl5knt37tBwAAAAAY6pBsAwAAsI1FixYZfwN627ZtAoFAqVReuXLl/PnzBkf1er3l39c+evTomTNn7t+/7+bmtnXr1h7vy+fz6+vrS0tL//a3vxHWt7O7PZ8ukcvllZWVhYWFiYmJdLlSqWTixDRKAAAAQ8X27ds1Gk15eXlNTQ2Xy6U/0Mkvn/jLli0LDw+XyWQxMTF0eWpqqkgk0mg09+/fj4iIYJJwhJDMzEypVKpSqdLS0pYuXUoXmnpCMFNPt8w8aRg/sdC7Op2uoKAgLi6uvLy8oKCAfmgxf1/LH2PMPLn1az8AAAAAwFCH9VoAAAB6kJmZ2dDQcPjwYUKIUCiUy+Xso76+vjKZjNk1WFmEz+ffu3ePz+cTQpqamjw9Pa375KUoqra2VigUEkKUSuXUqVMbGxsNTmDX7O3tXVVVRd9XoVB4e3sb3Nd4BRR2ialtcBwzZswoKCgICQmxdyAAAGAoIyOjpaVFJBIR008mAoGgoqKCfhIwQFHU06dP3dzc2IVjx45lEnKEEC8vL/pJo7q6OiUlRSKRdHR0zJ49u7S01PwTgql6zDD/pGFwlNk12LDivt0y9eQ2AP0w8NavXx8QEJCSkmLvQAAAhjMXF5e6ujoej2fvQACg32FkGwAAQC/IZDLmm8v0BjvTZp5Go7FJDF1dXSNG9PAJzp7IyIapMls1AQAAAGzC1JNJZ2enmasMMm2EkKCgID0LkxlKSEiYN2/enTt3VCrVqVOnTFXIPCGYqsdCVj9p9PG+PQYzwP0AAAAAAEMOkm0AAAD9aOXKlQcPHtRqtXK5fP/+/QZHe7VmW25ubm1tbXNz8549exISEsyfnJiYeOjQoa6uLrVanZeXZ03ov3B2dhaLxVqttqioaOHChX2pCgAAAAbGihUr6KFvCoVCLBavWrXK/PmxsbF5eXm1tbVdXV3scplMFhwc7OHhUVlZ+eGHH7IPdfuEYKoeM2zypGH+vpY/cZl6chuAfgAAAACAIQ3JNgAAAGt4e3sblFAURY8nYzYIIVlZWbW1tTweLzY2du3ateQ/x5zpdDpLhp3Rl6xZs2bZsmUTJ05Uq9X79u0zf999+/bV19d7enrOmzdvyZIlPcbJlBj8JITQS7jxeLy8vLz8/HzLugcAAAAGlMGTiUgkUqlU3t7ezz333BdffJGVlUWXs58B2M8kmzdvVigU4eHhfD4/OjqaedLIyclJTk7m8/lpaWlJSUmkpycEU/WYYepJw/iJxeARxZL4aRY+cRHTT24D0A8AAAAAMKRhFRYAAIAesNdsG3K0Wu2FCxd27NhRUVFh71hgKMGabQAAgxZ7zTYAq2HNNgCAAYA12wAcB0a2OS6dTqfVau0dBQAA9Jd3332Xoig3N7fjx49fv37d3uEAAAAAAAAAAAAMT0i2OSi1Wl1TU1NfX2/vQAAAoL/s2bNHr9d3dHSIxWIfHx97hwMAAAAAAAAAADA8IdnmoJydndkT3AMAAAAAAAD0Bx8fH8oIvgkEAAAAAMOJk70DAPt45plnJk+ebO8oAAAAAAAAYJhraGiwdwgAAAAAAP0LI9sAAAAAAAAAAAAAAAAArIRkGwAAAAAAAAAAAAAAAICVkGwDAAAAAAAAAAAAAAAAsBKSbQAAAAAAAAAw0CiKoihqwO41MDcCAAAAAMeEZBsAAEA/Gsi3SL1iJiqrY7bkwt7WPDh7DwAAYLARCAR9r6Strc3yk93d3ftYj16vt/x2fWT5vcy0CwAAAADAFCTbAAAArGHhK62BeYvUq1djNDOBWR2zJRf2tnK8GgMAALBEfX09e7e9vf2NN97w8fERCARHjx4NDAyky+lvxqhUquTkZHd399TUVLpcoVCEhIRwuVwfH5+NGzeyHy02bdo0ZcoULpcbGRlZUlJCF/L5fLVaTf2COdlMPaY8evRozpw5PB5v7dq1ra2t7DgvXbpECLl06RJFUX5+fswloaGhoaGhFvYMfbnB13fokuzs7PHjx3M4HLFYbL5dAAAAAADmIdkGAABgDQtfadGuX79u8CqHmHh1ZerVT1tb2+uvv87j8WbPni2VSpkXQFa80ur2lVNra+uaNWvc3NxmzZpVXl5ucEmvXml1+8rM1H1NtcvU+Xg1BgAAYInt27drNJry8vKamhoul6tUKuly+lssy5YtCw8Pl8lkMTExdHlqaqpIJNJoNPfv34+IiGCScISQzMxMqVSqUqnS0tKWLl1KF9IV6n/BnGymHlOOHj165syZ+/fvu7m5bd26lS68devWnDlzFi1aRAiJjY0NDg6+ePEic4nBTc1btGiR8cl0iVwur6ysLCwsTExMNN8uAAAAAADzkGwDAACwAVOvtGhFRUVSqZT9KoeYeHVl6tXPtm3b+Hx+fX19aWnp3/72N+ZMK15pdfvKadu2bQKBQKlUXrly5fz58wZHe/W+qdtXZmbu2227TJ2PV2MAAABsQqGQ+aIJvSEUCgkhJ06c2LNnj5eXl6ur66uvvvrTTz+xr/ryyy/XrFnj4eERERFBl5w/f37+/PkcDsfd3X3ZsmWnT5+my6urq3/729+OHTuWx+Pt2rVLrVabj8dUPWYkJyePHz+ez+fv3LmTOX/OnDkCgeDcuXOEkLNnz06ePPn5559nLikrKysrK7Owi8zIzMz08PCIj4/XarV9rw0AAAAAHBmFF1KOrKGhoaOjw8fH55lnnrF3LAAAg1dmZmZDQ8Phw4cJIUKhUC6Xs4/6+vrKZDKBQFBRUcHn840vpyhKq9U6OTnR2/Qnb3V1dUpKikQi6ejomD17dmlpKfOJzJzD3vb29q6qqqLrVygU3t7edPnYsWPZiT0vL6/GxkZLGsW+CyGEz+ffu3ePrr+pqcnT09O6JwSKompra+nXfEqlcurUqQbxGNzXVLtMnU9M9E+3Z0JfzJgxo6CgICQkxN6BAACAoYyMjJaWFpFIxC40+Bz08vKSSqWmnkyMPzGjoqKKi4uNT541a9bKlSv/+7//m8/n//TTTwKBoNtPXo1Gw+FwzNRjCvvJ4aeffpoxYwYzeUBVVdWKFSu++eabkJCQs2fPBgQEWF5ttzey4omCadewtH79+oCAgJSUFHsHAgAwnLm4uNTV1fF4PHsHAgD9DiPbHJpWq+3o6MCX+AAALCeTyZixU/SGTCYjhHR2dpq5is60sSUkJMybN+/OnTsqlerUqVM93pc9NSL7VVFQUJCexcJMm3kajabvlRBCurq6Rozo4UnDVLv6yFZNAAAAGKJWrFhBZ+MUCoVYLF61apX582NjY/Py8mpra7u6utjlMpksODjYw8OjsrLyww8/ZB9ydnYWi8VarbaoqGjhwoXm6zEjNze3tra2ubl5z549CQkJTPnUqVPDwsKWLFny4osvGmTaejXBdW912y4AAAAAAPOQbHNozs7OhBAk2wAA+q63r7TMvLrqVmJi4qFDh7q6utRqdV5eHlNuxSutbq1cufLgwYNarVYul+/fv9/gaK9eaZl6ZdYtU+2yAl6NAQCAI/P29mbvikQilUrl7e393HPPffHFF1lZWXQ5e8JJ9ldeNm/erFAowsPD+Xx+dHT0vn376PKcnJzk5GQ+n5+WlpaUlERYX5Sh53Pm8Xh5eXn5+fnm6+kWXdWaNWuWLVs2ceJEtVptcP4777xz48aN9PR0gwt1Op3l39ExmGbToB8MfppqFwAAAACAeZhwyaE1NTUplcrRo0cb/GEGAABs7GkkGT4+Pg0NDcxua2tramrqmTNnCCGLFi3KzMwUCASE9eJGr9ezt8Vi8VtvvdXY2Dh//vwPPvhg2rRpxuewt9va2t54442zZ8/6+/v/+c9/fv755+lPcJ1Od+DAgU8//bS5ufnFF19csGBBWlqa+eaw36yRX8aTtba2/vGPfzx79uykSZP+/Oc/v/DCC4Q11CwoKGjEiBE9Lo5C1/zgwYOEhITq6uoVK1YcOXJk1KhRZu5rql2mzjfVP4QQsVicmJjI4XDoV3t9nGwKMI0kAMCg1e00ksNSdnZ2TU3NoUOH7B3I8IRpJAEABgCmkQRwHEi2ObQnT540NDSMGjWKniIfAAC61W2yzV60Wu2FCxd27NhRUVFh71hsabi2a+hCsg0AYNBykGSbwbdqwOaQbAMAGABItgE4Dkwj6dDopZ4xjSQAwJDw7rvvUhTl5uZ2/Pjx69ev2zscmxmu7fp/7N15eBRVvvj/qiydrRPoJotJAxE1EVxAgYDyhUEvCAREDSjheS4yDDqOCoICMYjAuEFYXWC890HCIDheDSI9CoKyjoLRCeh1FAIhoASzkZBOyN7d6dTvj7pTv7bT6XQ6nVSW9+sPnlrOOfWpKqAq9ck5BwAAtIUyJa3agQAAAAAtI9nWoylztvEDDAB0fqtWrZIkyWw2G43GqKgotcPxmu56XgAAQBYVFSU2wUMfAAAA3QnJth7N19fX19dXoHMbAHQvfNICAACdx5UrV6Qm7Oe+BQAAALo6P7UDgMr8/f1tNpvFYpGHlAQAdAN8vQIAAAAAAAA6DD3bejqmbQMAAAAAAAAAAPAYybaeTp62zWKxqB0IAAAAAAAAAABA10OyraeTk230bAMAAAAAAAAAAPAAybaeTh5Gkp5tAAAAANDtiaIoiqLaUbSCitF2uWsFAAAAFfmpHQBUJvdss9lsjY2NPj4kXwGgqxJFUZKk5nYJgtDc3ra3DwAAVBcdHV1UVNRiMUmSOiCBVFtbGxwc7Gbh0NDQqqqq5va26vWjVcdtkZvXykX83o0H6MYGDx5cU1OjdhTo5gICArKzs9WOAkB3RrKtp/Px8fHz82toaLBarQEBAWqHAwBdhpuftFzz4icYF5+ivPJZzf1PXa4/mQEAgPZQXFxsv1pfX5+amvrhhx/6+PikpaWtXr36/Pnzyt6jR4/Onj27pKQkIyMjKSlJ3vjMM88cPHgwPz9/1KhRy5Ytu/fee4V//8rOpk2b1q5da1++trZ24cKFu3fvHjBgwAcffDBw4EBBECRJKi0tnTx58qlTpyIjIx955JF169a5ftXR6/XV1dXKi4r9+8b+/funTJliv1Eu9vrrr69cufKLL744e/bss88+u3PnzqSkJNfHHTFihCAIWVlZLV7GmpqaefPm7d69Oy4u7r333rPf5fT6NBd/a68D0MNdunTp448/1uv1KZ926wAAIABJREFUageCbquysnLy5MlqRwGgmyPZBsHf37+hocFisZBsAwD3OXzSsu89Zr9sNBqTk5OtVmtoaOjgwYNLSkrkT13NfYKR65aXly9evHjXrl1PPvnk+vXrXUfS9FOU4PJTkdCaT07Ntd/cpzcXn8wAAECHWbZsmcViOX36tFar3bdvn8lkst974MCBnJycgwcPJicnK3MKpKWlbd682Wq1fvXVVw888ID8qzPyr+wUFhZmZ2cfOXJEKZ+amqrX64uLixsaGtLT04V/P/RTUlI2bNgwatQos9l86NChlJSUt99+20WcJpOpud7zkydPdviFIXnVZrNt3759ypQpc+bM2b59uxyS6+O6/0KSmpoaHR1tMpkqKyu3bt1qv8vp9Wku/tZeBwCDBw+OiopSOwp0Ww7PQQBoDwwJBaGkpOTatWt9+vThd4gAwKm0tLQrV668+eab9hubflix36Ish4aG3nfffbt27bJYLAcPHnziiSdKSkoEQZgzZ84f/vAH5RPM4cOHlU8woijee++9s2fPnjZt2smTJ8eNG+dOkA7xzJ8/PzQ09OWXX5Y/FS1btsx+b0JCgiAIJ0+edP8iOD3fpUuXvvDCC/af3pyWRFd02223bd++Xf6rAgDoVF599dVr165t2LBBEASDwVBYWGi/NyYmpqCgIDo6+syZM05/xBNF0Wq1+vn5CXZP7dzc3EWLFmVmZprN5qFDhx4/frzpW439cmRk5Llz5+T2S0tLIyMj5e19+vSx/6AZEREhv/m44PrNwWGvsuqw4MFxndLr9RcuXJDPq6ysLDw8vFXXR+GteNrVU089FRcXt2jRIrUDAYSwsLDc3FySbWg/JpPJYDDU1dV1/KEDAwOLiop0Ol3HHxpAB2OOLvzftG3KR1IAgAsGg0EURfmXrOUFg8Hgovz//M//7Nu3z9/fPzY2dtmyZZ999pm8fe/evffcc49GowkNDZ02bdpHH31kX+vTTz+dM2dOWFiYm5k2p8dNSUnRaDTh4eFPPPGEw96TJ0+2KtPWnLS0tLCwsKSkJKvV2vbWAABAaxUUFEiSJCd75IWCggJBEBoaGlzUkjNt9mbMmDF69OizZ89WVFTs2rWrxeM6dDhTlocNGybZaW2GyeMfS9t43BaDcfP6KFXaIx4AAAB0ZiTb8H/JNr6TAoA7mvukZa+xsVFZnjp1qsViqa6u/v777x999NEJEybI211/gtFqtV6MWcVfp+A3OQAAUMXDDz8sd30rLS01Go2zZs1yXb6goGD48OFhYWHZ2dmbNm1qsf3k5OQ33nijsbGxurpaHkZSlpiYmJ6enp+fb/865Jq/v7/RaLRarQcOHBg/frybtRy4Pu6IESPkMbRbNHPmzI0bN1qt1sLCwrVr1yrbXVwfp/F7cB0AAPbaPu84AHQwkm0QNBqNwPdQAGgz+VNLUVHRs88+q2yMiIjIysry8fHp16/fwIEDa2pq5O3t/QmmuU9FMvc/OXnAK5/MAABAq0RGRtqvbtiwoaKiIjIy8tZbb/3kk0+UKWCV3vkOf27ZsuWxxx7T6/VLly6dPXu2i5Lyn2vWrCkuLg4PDx89evTUqVOV4y5YsKC0tHTMmDF6vX7ixIlr1qxpMfKMjIzk5GSdTpeenr5t2zZlu8NYAg4BCL/9Duv6uDabzc0xrtevX5+fn6/T6RITE+fOndvi9Wkufg+uAwB3KP8hoIviDgLoxphVBYIkSZcuXdJoNDExMTzwAKApp3O2RUVFXblyxX6L0WicOXPm7bff/te//nXIkCGCIEiSNGLEiMcff/zVV1/Nz8/39/fPyMhISkoSBMFms61bt+6dd94pLy8fOXLkvffeu3TpUqHJr++585h2WqWmpubpp5/++OOPb7zxxvfee0+JRy4zbNgwHx8fN0eSdNq+slGSJPtl+TokJydrNBr501JcXJw7R0Fnw5xtANBp2c/Zpjqr1bpv377ly5efOXNG7VjQOszZhs6jVXO2dcspomNiYhwm4OyYuqpQ5Q522jnbqqur+/fv38EhAR1m8ODB//jHP9SOouM4DtSOHkgUxQEDBqgdBQB0MQ6ZNkEQkpKSzGazvKz88JCVlSUIQtNZ03x9fV944YUXXnjBYbsHP3U4rRISErJjx44dO3Y4LfPdd9+1sX37jQ4FkpKS6C0NAEC39+KLL65evVqj0UyePPno0aNqhwMAHcFsNgcEBHi92aKiovar204xd1pd63wlSaqsrDx//rzagQDed+rUqaYjLXVzEgAAcGn16tULFy5UOwqgQ916661ZWVlqRwEAcOKVV15ZvHix2lGgy3vyySc3btyodhSAJElSaGhocXGxsnru3Llp06b17t07MDBw9OjRhw8fjouLU/YKgnDp0qXf/e53vr6+/v7+e/bssW9q7dq1w4cPDw0N7du377PPPnv16lX7ioIgVFVVPfjgg/7+/k3rfvzxxzfddFNISMh//ud/KuP/K3s//PDDmJgYQRBCQkImTJhw6tQpN89uz549/v7+giCEhYUlJSUdPXr01ltvVfbeeOONrr/WujijFut6FrPczttvv63Var/++utVq1YFBwe7f52ltt1BSZKUzJPTwFzcQRfnW1ZWFhgY6M7pe11AQIDJZGpub2Vlpa+vb0fGA3SY48ePDx06VO0oOhRztgEAAAAAgPYSFRUlNuHmeHEAepqzZ89OmjRp0qRJZ86cqays/OCDD3Jzc00mk32ZP/3pT6+//rrVapUnTbTfNWTIkJMnT1ZWVv7rX//SarXyGP4ySZIEQUhJSVm8eLHZbHao++23365YseKjjz4qKyubP3/+Sy+9JNiN4XHs2LGdO3fu27evtra2uLh42bJl8+bNO3XqlDtnlJycnJGRIUlSeXn5li1bCgoKSkpKlL0XLlyQj2L/udbNM3Jd1+OY5UZyc3PffffdBx988OrVqzt37nT/OrfxDgqCIGfmmgusuTvYlnsEAF7RDYc5BgDAu5zO2daRoqKi7H8ek0VGRjYdyhLwFuZsA4BOq1PN2Yauiznb0HnYz9n24IMPTp8+ffbs2c0VFkXxhx9+kCelFlxOAGaz2fz9/RsbG+3r7tq165FHHmlad9KkSc8999zEiRPl1T179kyfPl3ZO3bs2B07dlx//fVKUz/99NOiRYsOHTrkztnt2rVr1KhRYWFhLk7KnS+0Tc/IRd22xCyK4rVr18LCwkRRrKysDA0Ndf86e+sOOt3u4g66Pt9OO2dbVVWVTqdraGjo4KiADnDixImFCxe2ah6Tro452wAA6OxIqgEAAADoCY4dO5aenu66jJKncWA2mzdu3Lhz587Lly8HBwffcccdTbM1Sp7GwalTp0aOHKmsjh071n5vVlbWgAEDHKoEBwe7jlP27bffPvPMMydOnLjuuutuu+22oKCgzZs3R0dHu1PXnTNqTltiFgRBSQ2Ghoa2Kqq23EF3NHcH23i+6NLcTFd7vW5bqHVctCuSbQAAAAAAAADUZ7PZRFH0rO6zzz4bERFx4sSJ3r17W63WvLy8QYMGeSWqoKCgs2fP2veact8tt9xy5MgR+y1Tpkz57LPP3KnbljNqS8xtiaotd7At2u98Ow/5wpKhaRWj0ZicnCxJUlRU1G233fb555+rHRG6M+ZsAwAAAAAAAKC+u++++9NPP/Ws7ocffrho0aLw8HA/P7+goKA+ffq4X3f48OEnT55UVg8fPmy/d8qUKe+//75nUTW1f/9+1wXMZrO84MEZKXW9G7M911G15Q62Rfudb+fRM9NsMTExLZZxcWXkSROtVmt+fr7TTFt7XNU2xoyui2QbAAAAAAAAAPWtXr16xYoVhw8fliSprq4uJycnPT197ty57tSNi4t75513ampqTCbTjh07Zs2a5f5xX3rppSVLlpw/f95qtWZmZn755Zf2e9PS0rZu3fraa69dunTJarWaTKYvvvhiypQp7rQcERHxySeflJeXy6uZmZn+/v4OZfz9/Y1GoyAIRUVFmzdvHjVqlPtn1FzdtsTsmuuo2nIH26L9zhcKJZXbkYqKitpS3Wq1JiUleSsYN7UxZnRdJNvwGyTVAQCdiosRSERRVGV8Ene0R2zLly9Xlj/44ANfX19RFDUajfyjtcOhRVHs3bt3dna2vPGrr76aNWtWUlJS0yr2zQIAur1O9fTsyGA6z1kDcG3EiBFGo3Ht2rU6nS4mJubRRx+tr6//y1/+Iu+V/y0r/6IdVt97770DBw5ERkYOHjz4zJkzu3fvdlHYYfWuu+5auXLl5MmTe/fuvXnz5rVr19pH1bdv36+//vrChQsJCQlarXbUqFHHjh1799133TmjAQMGxMTEPP300zExMcOGDZs5c2ZGRoZDmYyMjOTkZB8fn5EjR164cGHfvn3unJHruh7H7PRCCW5f57bcQcHuxxmH5RbrtuUedSo5OTnTp0/X6XRBQUFjxow5cuRIfHy8fYG8vLyxY8f6+fk1/WFw3bp1CQkJYWFh/fr1e+6558rKypRd8pWsrq5+6KGHNBpN07p79uyJi4vTarWzZs2qra11eEZnZGQYDIbAwECtVjtx4sTvvvvOzdNp8bhnz5596KGHDAaDwWCYNm1aTk6Osuumm25y+JvQ9Gmem5vb3OtEbGysQ/V7773Xzbqu74KL69zGmF1cjRavpGuu76+yevDgwSFDhsTHxytD3SrHnT59ekhIyKBBg+R/8jKj0ajRaERR7NWr17Rp044dO3bbbbe5H1U3JAGSJElSRUXFhQsXiouL1Q4EADqd1atXL1y40GHjdddd106H02q13mqqpqbGW011zuN25jcZ78Z2/vz5p59+WlnV6XT79++XJGnPnj3+/v4tHvfmm282mUzy8tdffx0SEqLsevrppy9evNi0yq233pqVleWV4AEA3vXKK68sXrzYYaP7byYd8PR0/02gEz7Kvfgm1sk9+eSTGzduVDsKQJIkKTQ0tLN9jyopKQkNDVU7CnhNWVlZYGCgKocOCAhQfhZrqrKy0tfXV1nNzs6+/vrr33nnnYKCAovF8uuvv/73f/93nz59lAKCIEycOPHUqVONjY1Nfxj8/PPP5YWysrLly5ePGTPGfq8gCE8++eRXX33VtO4333xzyy23/O///m99ff0333yTkpJi/4A+evTo5MmTv//++9ra2qqqqn/84x8jR448efKkm1fAxXGzs7MTEhJ+/vlnefWXX3656667zp0751DdnUN4sKu5Ai3eBdfX2eOYW7waLq6ka67vr9L4m2+++eqrrxYUFDQ2Nj788MP2u/785z8fOHCgrq4uLy/vd7/7ndx1VZIkf3//PXv2SJJks9lKSkree++9iIgIpeLx48eHDh3qZpDdQ6d7r4Vaqqqqzp8/f/nyZbUDAYBOx2myzeHVpK6ubsGCBZGRkdddd9327dvj4uKUYkpJ+2X5xUgQhNDQ0P/3//6fUl6n0zn9nRiLxZKamhofHx8XF5eSkmI2m5UGX3/9da1W+/XXX6enp2u1WvlFp6SkZPjw4YIgREZGzps3T/nmJVcpLy+fO3euVqtdsmSJ63NvbfzeOq4kScovUtlvrK6u/v3vfx8SEnLHHXf89NNPDnsTEhISEhJabNnh8jqszp8/Pz4+Pjg4ePz48UePHnUdf3P3Xa5y5MgRg8GgvH160L4iJSXl73//e9NzMZvNI0aMcDi7psWuv/765sp8/PHHzz//fNMqJNsAoNNymmxz881E8ugJtWnTJofyNTU1jz/+eO/eve+8885z584pT9Lm3gSaIwhCXl7eyJEje/fu/Yc//KG6utr+uJ999pn071eCvn37KrXcfOLLnL5RNHdezb2JdUsk29B5dLZkW0FBwRNPPPHKK6+oHQi8pqsk2x544IEdO3a4aE0QhB9++MF+tbmSDQ0Noig61N21a5fTuhMnTlQSSJIkffzxx/Z7f/e73/3yyy/2Tf3444/jx493Eaebx506dar8W6SK/fv3P/jggw7V3TmEB7uaK9DiXbDX9Dq7c1CnZVq8Gi6upGuu76/S2sGDB5XVhoYG+132nyOysrLGjRsnL4eGhh44cODatWtOj9sDk20MI4n/Exwc3L9//759+6odCAB0ScuWLbNYLKdPn/75559DQkJMJpO8XfptLkdZnj179v3332+1WouLi5csWVJRUSFvlysqz2ml/PLlyw0GQ05Ozvnz5w0Ggzz0n1zAZrNt3759ypQpp0+f3r59e3JysiAIKSkpGzZssFgsFy9eHDdunPyLS0qVadOmjRkzpqCgYNKkSa7Pq7Xxe+u4giBMnjzZ/oiy1NTU6Ohok8l06NChvXv3No22aRWnJ3XXXXdlZmbKq5mZmXfffbdSMS0tLScnp6KiYunSpQ888IDr+Ju777IDBw7k5OTI47ooG1vVvuLgwYODBg1qei5HjhxRviHKgoKC5HEe7IeV+PXXX5u7GgMHDjx48GDzVwsA0CV59wlVWFiYnZ1tXz41NVWv1xcXFx8/fvzzzz9XSjb3JuDCu+++u3v37osXL2q12ueff17e+M0339x1112TJ08WBCExMXH48OH2zzs3n/gyp28UzZ1Xc29iAHqCdevWyS/Sd9xxx+23375ixQq1I0KPc+zYscTERNdlhgwZ4nS72WxevXr1wIEDg4ODw8PDJ06c2PRB9sgjjzite+rUqZEjRyqrY8eOtd+blZU1YMAA+3ERBw8erPxA7Y7mjnvs2DH74wqCMGLEiKNHj7rfcntwfRfcuc4eH7fFq9HclXTN9f1V3Hfffcqyr6+v/a4xY8Yoy4MHD87KypKXv/322/Xr10dERMTGxk6ZMuXhhx/u6fPVtV8eDwCA7sG+Z1tMTIzDkzQmJkaSpOuuu66srMxpdeG3n2zkhU8//VTuGRYeHj5o0CD7LkROn85RUVHl5eXysslkUoaKEuy+N9kv6PV6+yDtO/ILglBVVeX+6bcqfi8et+nRJUnS6XTKdb569arHbzJffPGF8ot448ePV36B6/z58/fff79erw8JCZHfJl3H7/q+W61Wh7NobfuKsLCwpnsPHTpUVFTUXJW8vDxlWAmHC2W/eu3atV69ejWtTs82AOi07Hu2efZm0tonVNPliIgIpf2SkhJlu4s3geaCyc/Pl5fLysrsyyclJX388ceSJH300UczZ85s6aq0oOk7Q4vn2O3Rsw2dR2fr2Ybup6v0bAsODi4tLXXRmouf7J588skVK1aUlpZardba2tqzZ8+6KOyw2qdPH+WDg9TkZ22dTufQs61VXBxXq9VevXrVfu/Vq1cdxnN257nsokyL1ZsWcH0XWrzO7hzUaZkWr4brG+qC6/vbYmuCINi/VdbX19sPqulA/iUnGT3bAACAKwUFBfITVPj3i0hBQYEgCA0NDS3WbWxsVJanTp1qsViqq6u///77Rx99dMKECU6rWCwWZVlqzW9LDRs2zP55L38FU2i1WvebUrgTf3sctzn2F6e1JkyYUFdXd/z48ePHj9fX1yu/wDVjxozRo0efPXu2oqJi165dDrWaxu/6vvv5+TlsaW37iqZ3f+fOnbGxsdddd11zVfr372+1Wpvba7PZXDQOAOgqPHszae0TqilRFJVl++eI6zcB1xobG318/v9vFKtXr165cqXZbH7llVdeeeUV99vxora8bADoIWJjY8VmxMbGqh2dc10x5h7i7rvv/vTTTz2r++GHHy5atCg8PNzPzy8oKKhPnz7u1x0+fPjJkyeV1cOHD9vvnTJlyvvvv+9ZVK7de++93377rf2Wb775Zty4cS6qmM3m9ojEnuu74MF1djNmD66Gm1zfX3fYd2T88ccfhw0b1lzJ/fv3t7bx7oRkGwAAXvDwww9v2LBBEITS0lKj0Thr1ixll7+/v9FoLCoqevbZZ5WNERERWVlZPj4+/fr1GzhwYE1NjUN5q9V64MCB8ePHyxtnz569detW+bvVli1bHn30UdfxJCYmpqen5+fn22fIPNOq+L14XKdmzpy5ceNGq9VaWFi4du1ah70jRowYMWKEm029/PLLK1euXLly5csvv6xsLCgoGD58eFhYWHZ29qZNm1psxMV9d6q17StiY2MLCwuV1Y8++uj222+Pi4sTfvu5c8yYMStXrrx48aIgCEajUe59KAhCUFCQ8nJ88uTJsLAw5Qbl5+ffcMMN7kcCAOgS2vsJlZyc/MYbbzQ2NlZXV6enpyvbPXgT2Lp1a35+fnl5+apVq2bMmKFsHzhw4N133z116tSRI0fKjzxFq574reX0TQwAmpOXl9dcF4e8vDy1o3OuK8bcQ6xevXrFihWHDx+WJKmuri4nJyc9PX3u3Lnu1I2Li3vnnXdqampMJtOOHTtafPTbe+mll5YsWXL+/Hmr1ZqZmfnll1/a701LS9u6detrr7126dIlq9VqMpm++OKLKVOmtO7cnFm7du3y5cszMzMbGhoaGhoyMzNXrlzp8JO+/FwWBKGoqGjz5s2jRo1q+3Fdc30X3LnOnsXsztXwjOv7646ff/754MGDZrP5119/TUlJ+fOf/yxvj4iI+OSTT8rLy+XVzMxM5StED+W64xsAALAfRlIRGRlpv1pdXf3UU09FRERERET8/ve/LywsVHbt2bNHo9EMGzbsX//6l/LwTUhI2LJlizxTpr+//549e+zL+/v7h4SETJs27fz58/JGs9m8ZMkSg8FgMBiWLFliNpslZ7OpSf/+xfaGhobVq1dff/31vXr1mjBhQlpamtyOB68BrYrfi8d1WqW6unr27NkhISGDBw+2j0c2dOjQ4cOHu9O47He/+93YsWMdTjY2NjYoKCgxMVEeDkJw1vFLKd/cfW96a+Tl1ravWLRo0SeffKKsBgcHOy1fWlo6e/bsXr16OdwX+S+VIAjh4eExMTFffvmlUuXjjz9OTU1tekSGkQSATst+GEmFm28mHj+hHJZramoef/xxnU43ZMiQH3/8UXkYNfcm4JTc2i+//JKQkNC7d+/HH3+8pqbGvsDFixcDAgIuX77sULFVT3ynD9nmzktq5k2sW2IYSXQeDCOJ9tZVhpGUJOmf//zn+PHje/Xq1bt374SEhM2bNysPRxfPMkmSzp07d8899wQHBxsMhpSUlMrKSheFm/4suXv37htvvDE4OHjmzJlyXfuo8vPzf//734eHh2s0mptvvjk1NbWkpMSd02/xuNnZ2VOnTtVqtVqt9oEHHjh37pxDC/JzWRTFfv36LViwwP5ji+CMslf5YqBITEx0s66Lu+D6OrcxZhdXo8Ur6Zrr++siJOnfI5A/8cQTWq32xhtvzMjIUHYlJCRkZWXNnDkzOjp66NCh/fr1s/+61QOHkRQlBg4CAMCltLS0K1euvPnmm2oHgp7r/Pnzb7311ttvv+31lufNm7d48eKmndtuu+227du3JyQkeP2IAIA2evXVV69duyZ3XFOd1Wrdt2/f8uXLz5w54/XGN2/e/PPPP7/xxhtebxmCIDz11FNxcXGLFi1SOxBACAsLy83NjYqKUjsQdFsmk8lgMNTV1XX8oQMDA4uKinQ6ndO9VVVVOp3OnWkpOlJpaemNN96opJHQzbT2/oqihymkEydOLFy48LvvvvOgbhflOFA7AAAAOpv4+PjevXu3R8t6vZ5hJAEAHnjxxRdXr16t0WgmT5589OhRr7evjJNMsg3o9qxWa3x8vNpRoJujw4mbCgsLX3755ZSUFLUDQbvg/rYrkm0AAABdwKpVq9qj2VdffbU9mgUAdHurVq1qp2eTjK+iQM/h5+d36NCh8PBwtQNBt1VRUdEBc311aevWrUtNTRUEISIiYuXKlfPnz1c7IniTx/dX/uUnjzu39TQk2wAA6OmioqJKSkocNkZGRl65cqVbHhcAAHQknvgAXBNFMTY2lmEk0X5MJpPSYRpOPf/8888//7zaUaC9eHx/ybG1io/aAaBzqaqqKiwsrKqqUjsQAEDHuXLlStNpXTvg+5daxwUAAB2JJz4AAN1SbGys2IzY2Fi1o+spuAudBz3b8BsWi6WmpsbPzy80NFTtWACgs6iqqjp79uzf/vY3tQMBOk5FRYUq84cDAFr0z3/+8x//+Mc777yjdiDo2mw229SpU9WOAgDQheXl5akdArgLnQjJNvyGRqMRBMFisagdCAB0ItnZ2SdOnPjxxx/VDgToOKWlpQUFBWpHAQBw4pZbbtHpdM8++6zagaBrW7169aBBg9SOAmgdF/MGyYMEejDimTsVWztfEfMbAUAPRLINvyEn28xms9qBAEAnMnLkyOuvv/7NN99UOxCg49x222033XST2lEAAJwIDQ1tbGwcNmyY2oGga4uMjGRIG3Ra0dHRRUVFTbe7yGBJkuTZpFzuVGxt5sz98qGhoUzmAgDdA8k2/IZGoxFFsbGx0Waz+fr6qh0OAAAAAAAAepbi4mKHLfv3758yZYrw2zxWTU3NvHnzdu/eHRcX99577zlUGTFihCAIWVlZ7hzx8uXLM2bMyMnJSUpK2rx5c0hIiIvj1tbWLly4cPfu3QMGDPjggw8GDhyoFHBaXk7mbdq0ae3atSUlJRkZGUlJSYIg6PX66upqJdVHZ7geqKamRhTFoKAgtQMB2kVwcLDaIXQokm34DVEU/f39LRaL2Wzuaf8YAMCF+vr68vJytaMAOo7NZlM7BABAs/bu3Xv58mW1o0DX9v3338fFxakdBeCuyZMnN+2ClpqaGh0dbTKZKisrt27d6lClVbmrd999d/fu3cHBwS+99NLzzz//9ttvuz6uXq8vLi5uaGhIT0+3P5bT8vKWwsLC7OzsI0eOJCcnyxO4mEwmBpzs4YKDgyVJKiwsVDsQwPu+/fbbZcuWqR1Fh+I/dDgqKiqqrq6OiIjo3bu32rEAQKeQlpbW094PAEEQsrKyEhIS1I4CAOAoOzv7zJkzakeB7mDIkCHx8fFqRwEIYWFhubm5UVH4JBgcAAAgAElEQVRRBoPBIesQExNjP5GwQ2pKr9dfuHBBr9cLglBWVhYeHu7Zd05RFPPz8w0GgyAIJpNp4MCBJSUlDgXsW46MjDx37px83NLS0sjISIfjNk2h2W9pbhntx2QyGQyGurq6jj90YGBgUVGRTqdzureqqkqn0zU0NHRwVEAHOHHixMKFC7/77ju1A+k49GyDI3naNvlXbAAAgiC88MILL7zwgtpRAAAACIIg3HLLLbfccovaUQCA9yl5NQ9SUN76kNXY2Ojj4+O6jH3HNS+myiwWi/xRDgDQFbXw8EAPRLINAAAAAAAAndzMmTM3btxotVoLCwvXrl3rsHfEiBHytG3u2Lp1a35+fnl5+apVq2bMmOG6cHJy8htvvNHY2FhdXS0PI+kxf39/o9FotVoPHDgwfvz4tjQFAFAXyTY4ItkGAAAAAAAAtURGRjpsEUVR7k+mLAiCsH79+vz8fJ1Ol5iYOHfuXOG3fc5sNps73c7kKnPmzJk2bdoNN9xQXV29Zs0a18dds2ZNcXFxeHj46NGjp06d2mKcyhaHPwVByMjISE5O1ul06enp27Ztc+/yoIdymAvQYZeLva7bbLFia1v2LBKgG2BcYDiSJOnixYuSJA0YMMDPj4FGAQAAAAAA0F6UOdvUDqTVrFbrvn37li9fzlSanVzXmrMtOjq6qKiotQfyeP4/FScODA0NraqqUuXQ6AA9cM42erbBkSiKcuc2s9msdiwAAAAAAABA5/Liiy+KoqjVanfu3Hn06FG1w0G3Ulxc7LBl//79Tbug1dTUzJkzR6vV3nnnnadPn3ao0qphVC9fvnzXXXfpdLq5c+fW1NS4Pm5tbe0f//hHnU43dOjQnJwc+wJOy8tbNm/e3LdvX41GYzQa5e16vb66ulr8NzdDBTozkm1wIiAgQCDZBgAAAAAAADSxatUqSZLMZrPRaOyKffLQtUyePLlp57PU1NTo6GiTyXTo0KG9e/c67JUkyf3+au++++7u3bsvXryo1Wqff/75Fo+r1+uLi4uPHz/++eefy8dyUV7eUlhYmJ2dLY+bKm83mUxKnIy9h+6BYSThRHl5+dWrV7VabXR0tNqxAAAAAAAAoNvqusNIoqtQdxjJmTNnyh0bmrJarTt27LDZbIIgGAyGwsJC+70xMTEFBQXKqsN4j3q9/sKFC3q9XhCEsrKy8PBwj4eRzM/PNxgMgiCYTKaBAweWlJQ4FLBvOTIy8ty5c/JxS0tLIyMjHY7bdFxK+y3NLaP76YHDSDIjF5yQHwAWi0XtQAAAAAAAAACgS3rttdfkXJpT9uOKKXk1D1JQ3vqK29jY6OPTwkh49kM+ejFVZrFY5ImNgK6LZBucUJJtkiQxZi4AAAAAAAAAtNaSJUtc7K2qqnrllVc8a3nmzJkbN2586aWXSktL161b57BXnrAtKyvLnaa2bt36+OOPh4SErFq1asaMGa4LJycnv/HGGy+//HJtbW16erpnwcv8/f2NRuP9999/+PDhtLS0r776qi2tAapjzjY44evr6+fnJzBtGwAAAAAAAAB0lMjISIctoijK3SGUBUEQ1q9fn5+fr9PpEhMT586dK/y2z5nNZnOn25lcZc6cOdOmTbvhhhuqq6vXrFnj+rhr1qwpLi4ODw8fPXr01KlTW4xT2eLwpyAI8hRuOp0uPT1927Zt7l0eoPNiXFQ4V1BQUFtbGxkZ2atXL7VjAQAAAAAAQPfEnG1obyrO2eZaVVWVTqdraGhQOxBPWK3Wffv2LV++/MyZM2rHgs6oB87ZRs82OMe0bQAAAAAAAAAAey+++KIoilqtdufOnUePHlU7HKCzINkG5+RkG8NIAgAAAAAAAE3Zj9rXdJeLvW1vH1DRqlWrJEkym81Go5E+qYCCZBuc02g0vr6+vr6+agcCAAAAAACAHiQ6OtrNkqGhoa1q2UX52traVjUlCIKL2Xm8MnGP+4209joAALyOZBucCwgIuOGGG9x/uQEAAAAAAADarri42H7VaDRqNBpRFMPCwkaPHh0fHy9v1+v11dXV4r/ZV3nmmWduvvnmkJCQ++6779ixY67Ll5aWJiQkhISEREVFzZ8/352s2/79+5setKamZs6cOVqt9s477zx9+rRDlREjRowYMcLNK+C0fXnL5s2b+/btq9FojEZji9cBANBhSLYBAAAAAAAA6KRmz559//33W63W4uLiJUuWVFRUyNtNJpMgCNK/2VdJS0vLycmpqKhYunTpAw884Lp8SkrKhg0bLBbLxYsXx40bl5KS0mJIkydPbtrtLDU1NTo62mQyHTp0aO/evQ57mwbZ2vblLYWFhdnZ2RkZGcnJya7PCwDQkUT+CwYAAAAAAACgirCwsNzc3KioKIPBUFhYaL8rJiamoKBg796906dPt1qt4eHhERERO3bsSEhIkAuIopNvm7m5uYsWLcrMzDSbzUOHDj1+/LhSxmn5Pn36yPkqWURERElJiTuRO7Sm1+svXLig1+sFQSgrKwsPD2/jd9em0dpvaW4ZTZlMJoPBUFdXp3YgjqqqqnQ6XUNDg9qBAN534sSJhQsXfvfdd2oH0nHo2QYAAAAAAABAZQUFBUrfLHmhoKBAEISpU6daLJbq6urvv//+0UcfnTBhgtPqFotFXpgxY8bo0aPPnj1bUVGxa9eu5g6nlB82bJhkx81Mm2tK4x1PxUMDQE9Gsg0AAAAAAABAJxUREZGVleXj49OvX7+BAwfW1NQou/z9/Y1Go9VqPXDgwPjx4+WNBQUFw4cPDwsLy87O3rRpk31TTssnJiamp6fn5+c3Nja2Jc6ZM2du3LjRarUWFhauXbvWYW+r5mxrLafnBQDoSCTbAAAAAAAAAHQWkZGR9qsDBgz44Ycf4uPjRVFMTk7OyMhQdslTl+l0uvT09G3btskbt2zZ8thjj+n1+qVLl86ePVsQBFEUXZRfsGBBaWnpmDFj9Hr9xIkT16xZ02KEoijKbSoLgiCsX78+Pz9fp9MlJibOnTvX/riCINhsNvdHenTavrLF4c/mzgvoiuz/znvL8uXLleUPPvjA19dXFEWNRmM0GpseWhTF3r17Z2dnyxu/+uqrWbNmJSUlNa1i3ywgMGcbAAAAAAAAALUoc7apHQi6ra41Z1t0dHRRUVE7HbG2tjY4OLidGvcW785BmJub++abb7799tvyql6vf//99xMTE41GY3Jysv2wq06PO3DgwG+++Uan0wmCkJmZOWHChOrqannXvHnzFi9efMMNN3gr1G6GOdsAAAAAAAAAAIAKiouL7VflvlabN2/u27evQ8+qZ5555uabbw4JCbnvvvuOHTumFH7jjTdCQ0MzMzO3bdsWGhoqVyktLU1ISAgJCYmKipo/f35tba39Udwc5lTp++V0tWk8SpmKiorHHnssNDQ0JSVF3l5fX79w4cKoqKjo6Oh33303Pj7e/kBHjx5153xdtK/YunWr/USPJpMpMTFREIQpU6bceeedLZ6y2WyWM22CIIwaNcp+GNtx48Zt2bKlxRbQc5BsQ8vaOGI1AAAAAAAAAKC15L5WhYWF2dnZ8nihyq60tLScnJyKioqlS5c+8MADSmGbzbZ9+/YpU6acPn16+/btcpWUlJQNGzZYLJaLFy+OGzfOISklSZI7nckkSbrrrrsyMzPl1czMzLvvvlup2DQeJaRp06aNGTOmoKBg0qRJ8vZly5ZZLJbTp0///PPPISEhJpPJ/kAHDhzIyclp8XxdtK84ePDgoEGDmp7LkSNHPvvsM/stQUFBcurOPsn366+/Nnc1Bg4cePDgweavFnochpGEK7W1tUVFRQEBAX379lU7FgAAAAAAAHQ3nXMYyaioqJKSEoeNkZGRV65cUSUetEWXGEbSYDAUFhba742JiSkoKBB+O7yhspybm7to0aLMzEyz2Tx06NDjx4/L25UCDgt9+vSxT2hFREQ0/RvujoMHD65fv/7QoUOCINx3333PP//8fffd5yIeOYCqqiqtVmvfTnR09JkzZ/R6fdNDiKJotVr9/PzcOd/m2lf06tWroKDAYe/hw4dvu+226667zmmVy5cv33TTTfIIkw5jS9qvVlZW9u/fv6KioqVr1kMxjCTwG35+fo2NjfZj1wIAAAAAAADd25UrV6QmyLSh/RQUFCjdy+QFOdPWnBkzZowePfrs2bMVFRW7du1qsf1hw4bZ/2X2LNMmCMKECRPq6uqOHz9+/Pjx+vp6OdPWYjxNM2EOM9U5kDNt9lrbvqJpX6OdO3fGxsY2l2kTBKF///5Wq7W5vTabzUXj6MlItsEVjUbTv3//AQMGqB0IAAAAAAAAAEAQBKGgoGD48OFhYWHZ2dmbNm1qsXxiYmJ6enp+fr7TCYPcnLNN9vLLL69cuXLlypUvv/yyx/E8/PDDGzZsEAShtLTUaDTOmjXLdfnWtq+IjY217zL40Ucf3X777XFxcYIgKLPNCYIwZsyYlStXXrx4URAEo9Ho7+8vbw8KClKGzTx58mRYWJhyAfPz82+44Qb3I0G3R7INLQgICLD/fwcAAAAAAAAA0B4iIyPtV+UPs03/3LJly2OPPabX65cuXTp79mx5u30B4bfJpAULFpSWlo4ZM0av10+cOHHNmjX2R7HZbO530ho3blxjY6MkSf/xH/+hbHQaj/2fSniyDRs2VFRUREZG3nrrrZ988sn69es9OF8X7SsmTJhw7tw5ZXXOnDlDhw5tWthoNObl5Q0bNkwUxeTk5IyMDHn7+++/f88994iiGBER8dBDD+3du1fJw507d27ixIluXjT0BMzZBgAAAAAAAEAdnXPONnQnXWLONrST8+fPv/XWW2+//bbXW543b97ixYvp3NYc5mwDAAAAAAAAAADo8uLj43v37t0eLev1ejJtsEeyDQAAAAAAAAC6BhcTvjQ3kp632ge6olWrVrVHs6+++mp7NIuui2QbAAAAAAAAgM4iOjra/cK1tbXuFw4NDW19OF5ox0X5VsUvczErkFcmDHK/EW9dTwDoBki2AQAAAAAAAOgsiouL7Vfl3lqbN2/u27evRqMxGo3y9tLS0oSEhJCQkKioqPnz5ytZq8jISL1eLy/r9XplNji9Xl9dXS3+W4thGI1GjUYjimJYWNjo0aPj4+NbbOeZZ565+eabQ0JC7rvvvmPHjrku31z8Luzfv7/pQWtqaubMmaPVau+8887Tp087VBkxYsSIESNabNlF+81d/9ZeTwDo3vzUDgAAAAAAAAAAnJMkSRTFwsLC7OzsI0eOJCcnWywWQRBSUlI2bNgwatQos9l86NChlJSUt99+WxCErKysp556qqioqKGhYejQoenp6XI7JpNJFEX3u23Nnj37/vvv37Vrl8ViOXjw4BNPPNFiO2lpaZs3b7ZarV999dUDDzxQVVXlonxz8bswefJk+WrYb0xNTY2OjjaZTJWVlVu3bm169dw83+bab+76t/Z6oqn6+npBEG6//Xa1AwG8r66uTv4b3nPwHyIAAAAAAAAAdYSFheXm5kZFRRkMhsLCQvtdMTExBQUFgiDYJ3WU5T59+phMJqVwRERESUmJvJyXl/fkk09aLJZt27Zdf/31SplWJYf27t07ffp0q9UaHh4eERGxY8eOhIQEF+3k5uYuWrQoMzPTbDYPHTr0+PHjTWO25yJ+1xxa0+v1Fy5ckDvzlZWVhYeHt/F7b9NonV5/pyU7J5PJZDAY6urq1A7EUVlZWWRk5OrVq9UOBPC+S5cuHT58ODc3V+1AOg4929Aym8125coVq9UaGxurdiwAAAAAAADohuS8muB2CmfYsGEHDx50uksURavVGhgY6Ovr21x1i8Wi0WhctD916lSLxVJTU2Mymf72t79NmDChvLzcRTszZsyYOXPmtm3b9Hr91atXm5t5TinvIn6PyX3OVNHi9URT8jilqampagcCeN+JEyeysrLUjqJDMWcbWubr61tXV2exWFR8YAMAAAAAAACKxMTE9PT0/Pz8xsZG++15eXl/+MMf/vrXv6anp//pT3/Ky8tTdvn7+xuNRqvVeuDAgfHjx7tuPyIiIisry8fHp1+/fgMHDqypqXHdTkFBwfDhw8PCwrKzszdt2mTflNPyzcXfWjNnzty4caPVai0sLFy7dq3D3lbN2dZarbqeANC90bMNbgkICKirqzObzfyKCgAAAAAAANpPZGSk/ao8hZjc3c1+ecGCBevWrRszZkx5efnIkSPvvffepUuXCoIwbNgwq9Xav39/QRC+/vrrhIQEZXjGjIyM5ORkjUYzceLEbdu2uQ5jwIABP/zww/Tp0/Pz8/39/TMyMpRdTtvZsmXLY489VlJScs8997z++utpaWlKFz2n5ZuL3wVlNjV5QW58/fr1Tz/9tE6nu/HGG99777233nrLvmugzWbz8XG3u4XT9pu7/q29nnBKkqSmKVKgG7h06ZLaIXS0rjGuLlRXWlpaUVHRu3fviIgItWMBAAAAAABAN6HM2aZ2IOi2Ou2cbfX19QsXLlQ7CqC99O/f/8UXX1Q7io5Dzza4JTAwUBAEs9msdiAAAAAAAAAA0OUFBgZu2bJF7SgAeAdztsEtAQEBAsk2AAAAAAAAAACA3yLZBrdoNBofH5/GxkaLxaJ2LAAAAAAAAIAXREVFiU2oOKZlZ4sHAOAmhpGEuwICAurq6sxms0ajUTsWAAAAAAAAoK2uXLmidgi/0dniAQC4iWQb3CUn2+rr60NDQ9WOBQAAAAAAAN2B1WqNj49XOwp0c5IkqR0CgG6OZBvcFRgYKDBtGwAAAAAAALzHz8/v0KFD4eHhageCbquiomLUqFFqRwGgmyPZBncFBAQIJNsAAAAAAADgPaIoxsbGMi0Z2o/JZBJFUe0oAHRzPmoHgC5Do9GIotjY2GixWNSOBQAAAAAAAAAAoFOgZxtaITAwUJ62TaPRqB0LAAAAAAAAuoMZM2bwrQntx2q1qh0CgO5PZHJIuO/q1avl5eW9evWKjIxUOxYAAAAAAAB0eUajsaGhQe0o0M35+vpOmzZN7SgAdGck29AK1dXVRUVFAQEB/fv3VzsWAAAAAAAAAAAA9TFnG1ohMDBQEASLxUKOFgAAAAAAAAAAQCDZhlbx8/Pz8/OTJMlsNqsdCwAAAAAAAAAAgPpItqF15M5t9fX1agcCAAAAAAAAAACgPpJtaB2SbQAAAAAAAAAAAAqSbWgdkm0AAAAAAAAAAAAKP7UDQBcTEBAQHBwcEBCgdiAAAAAAAAAAAADqEyVJUjsGAAAAAAAAAAAAoEtiGEkAAAAAAAAAAADAQyTbAAAAAAAAAAAAAA+RbAMAAAAAAAAAAAA8RLINAAAAAAAAAAAA8BDJNgAAAAAAAAAAAMBDJNsAAAAAAAAAAAAAD5FsAwAAAAAAAAAAADxEsg0eslqt1dXVkiSpHQgAAAAAAAAAAIBqSLbBQwUFBUVFRXV1dWoHAgAAAAAAAAAAoBo/tQNAVxUYGOjr66t2FAAAAAAAAAAAAGoSGQYQAAAAAAAAAAAA8AzDSAIAAAAAAAAAAAAeItkGAAAAAAAAAAAAeIhkGwAAAAAAAAAAAOAhkm0AAAAAAAAAAACAh0i2AQAAAAAAAAAAAB4i2QYAAAAAAAAAAAB4iGQbAAAAAAAAAAAA4CGSbWirxsZGq9WqdhQAAAAAAAAAAAAqINmGNqmpqbl48WJxcbHagQAAAAAAAAAAAKiAZBvaJCAgQBAEs9ksSZLasQAAAAAAAAAAAHQ0km1oEz8/Pz8/P0mS6uvr1Y4FAAAAAAAAAACgo5FsQ1sFBQUJglBXV6d2IAAAAAAAAAAAAB2NZBvaimQbAAAAAAAAAADosUi2oa0CAwMFQWAYSQAAAAAAAAAA0AORbENbBQQE+Pj4NDY2ms1mtWMBAAAAAAAAAADoUCTb4AWMJAkAAAAAAAAAAHomkm3wAkaSBAAAAAAAAAAAPRPJNngBPdsAAAAAAAAAAEDPRLINXhAYGCiKYkNDQ0NDg9qxAAAAAAAAAAAAdBySbfACURQDAgIEOrcBAAAAAAAAAIAehmQbvEMeSZJp2wAAAAAAAAAAQI9Csg3eERgYKNCzDQAAAAAAAAAA9DAk2+Adcs82s9lss9nUjgUAAAAAAAAAAKCDkGyDd/j6+jJtGwAAAAAAAAAA6GlItsFr5M5tJNsAAAAAAAAAAEDPQbINXkOyDQAAAAAAAAAA9DQk2+A1TNsGAAAAAAAAAAB6GpJt8BpfX1+NRiMIQn19vdqxAAAAAAAAAAAAdARRkiS1Y0D3UVdX5+fn5+/vr3YgAAAAAAAAAAAAHYFkGwAAAAAAAAAAAOAhhpEEAAAAAAAAAAAAPESyDQAAAAAAAAAAAPAQyTYAAAAAAAAAAADAQyTbAAAAAAAAAAAAAA+RbAMAAAAAAAAAAAA8RLINAAAAAAAAAAAA8BDJNgAAAAAAAAAAAMBDfmoHgG7IYrGUlpY2Njb269dP7VgAAAAAAAAAAADaEck2eJ+vr29tba0gCDabzdfXV+1wAAAAAAAAAAAA2osoSZLaMaAbqqqq0mg0AQEBagcCAAAAAAAAAADQjki2AQAAAAAAAAAAAB7yUTsAAAAAAAAAAAAAoKsi2QYAAAAAAAAAAAB4iGQbAAAAAAAAAAAA4CGSbQAAAAAAAAAAAICHSLYBAAAAAAAAAAAAHiLZBgAAAAAAAAAAAHiIZBsAAAAAAAAAAADgIT+1A0B3ZjabTSaTj49PVFSU2rEAAAAAAAAAAAB4Hz3b0L6qq6urq6vVjgIAAAAAAAAAAKBdkGxDOwoICPD19W1sbKyvr1c7FgAAAAAAAAAAAO8j2Yb2FRQUJAhCbW2t2oEAAAAAAAAAAAB4H8k2tK/g4GCBZBsAAAAAAAAAAOimSLahfcnJtvr6+sbGRrVjAQAAAAAAAAAA8DKSbWhf/v7+/v7+kiQxbRsAAAAAAAAAAOh+SLah3TGSJAAAAAAAAAAA6K5ItqHdBQUFCSTbAAAAAAAAAABAd0SyDe1O7tlmNpttNpvasQAAAAAAAAAAAHgTyTa0O19f34CAAIHObQAAAAAAAAAAoNsh2YaOIHduq6urUzsQAAAAAAAAAAAAbyLZho4gJ9vo2QYAAAAAAAAAALoZkm3oCIGBgaIoWq1Wq9WqdiwAAAAAAAAAAABeQ7INHcHHxycoKEgQhJqaGrVjAQAAAAAAAAAA8BqSbeggjCQJAAAAAAAAAAC6H5Jt6CBysq2urk6SJLVjAQAAAAAAAAAA8A6SbeggAQEBfn5+jY2NdXV1ascCAAAAAAAAAADgHSTb0HEYSRIAAAAAAAAAAHQzfmoHgB4kJCSksrKypqYmPDxc7VgAAAAAoHtasWKF1WpVOwp0MX369ElJSVE7CgAAgK5KZAItdBibzVZeXh4SEhIUFKR2LAAAAADQPYWEhCxevDgkJETtQNBlFBcX792798KFC2oHAgAA0FWRbAMAAAAAoPsICQnJy8tjQBG476effkpKSiLZBgAA4DHmbAMAAAAAAAAAAAA8RLINAAAAAAAAAAAA8BDJNgAAAAAAAAAAAMBDJNsAAAAAAAAAAAAAD5FsAwAAANA6a9asEQFvWLt2rdp/ndE68o1TO4qu5Mcff+SiAQAAdHt+agcAAAAAoOtZsGDBW2+9pXYU6NoWLFigdghoNUmSumjeKCYmprCwsOOPO3jwYI8vmloxAwAAoLXo2QYAAAAAALoGs9nsWcWioqJ2arn9dMWYAQAAeiaSbVCBxWIpKSm5evWq2oEAAAAAABzl5ORMnz5dp9MFBQWNGTPmyJEj8fHx9gXy8vLGjh3r5+en0WiMRqP9rnXr1iUkJISFhfXr1++5554rKytTdsmjKVZXVz/00EMajaZp3T179sTFxWm12lmzZtXW1jqMvpiRkWEwGAIDA7Va7cSJE7/77js3T+emm26S27EfwtS+QHMtyyX/67/+KzQ0NDMzc/Xq1SEhIfYxK2c0ffr0kJCQQYMG7d69282oXF8rj2MGAACAKki2QQU2m+3atWuVlZVqBwIAAAAA+I2zZ89OmjRp0qRJZ86cqays/OCDD3Jzc00mk32ZP/3pT6+//rrVas3IyEhOTrbfNWTIkJMnT1ZWVv7rX//SarVJSUnKLkmSBEFISUlZvHix2Wx2qPvtt9+uWLHio48+Kisrmz9//ksvvaRUEQTh2LFjO3fu3LdvX21tbXFx8bJly+bNm3fq1Cl3zujChQtyO5IdZa+LluViubm577777oMPPnj16tWdO3faxywX2LBhwx//+MeysrIvvvhi8+bNR44ccetCu7xWHscMAAAAVYj2r2tAx5Ak6erVqyEhIcHBwWrHAgAAgFZbs2ZNUVERc7aJIj9PtcmCBQsMBkNqaqragXQ3ISEheXl54eHhnlV/8MEHp0+fPnv27OYKiKL4ww8/DBkyRFlt7h+CzWbz9/dvbGy0r7tr165HHnmkad1JkyY999xzEydOlFf37Nkzffp0Ze/YsWN37Nhx/fXXK0399NNPixYtOnTokJvn1VycrlsWRfHatWthYWGiKFZWVoaGhjq0I4ri3//+9wcffFBePXny5AsvvHD48GE3j65oeq08jtkDP/30U1JS0oULFzyrDgAAAD+1A0BPJIpiRESE2lEAAACg3cnjnpGR8qIff/xRTnI4vaqu9wLuOHbsWHp6uusySqbNgdls3rhx486dOy9fvhwcHHzHHXc0/auoZNocnDp1auTIkcrq2LFj7fdmZWUNGDDAoYpXfn2zxZbDwsLkhdDQUKctjBkzRlkePHhwVlaWO8d151p5HDMAAAA6GMNIAgAAAGgv3Tvlo8rZDR482MVxXe9tPzExMR1/ULQTm83mMD2Y+5599tn6+voTJ05UVlb++uuvf/nLX7wVVVBQ0C+//CL9Vk1NTSdsWaPRuFOsLdeq/a4GAAAAPEOyDQAAAEC3ZTab1Q6hR0pg45oAACAASURBVCgqKnJdgBvRhdx9992ffvqpZ3U//PDDRYsWhYeH+/n5BQUF9enTx/26w4cPP3nypLLqMBLjlClT3n//fc+ickr5O9n2ljMzM5XlH3/8cdiwYe7U8uBaeTFmAAAAeBfJNgAAAABtkpOTM336dJ1OFxQUNGbMmCNHjsTHx9sXyMvLGzt2rJ+fn0ajMRqN9rvWrVuXkJAQFhbWr1+/5557rqysTNkliqIoitXV1Q899JBGo2lad8+ePXFxcVqtdtasWbW1tXJ5ZW9GRobBYAgMDNRqtRMnTvzuu++8eEa5ubkOh3OIefr06SEhIYMGDdq9e7f7xxVcXpA2Onv27EMPPWQwGAwGw7Rp03Jycuz3uj5lF1HddNNN8nUQ7di33JYbAVWsXr16xYoVhw8fliSprq4uJycnPT197ty57tSNi4t75513ampqTCbTjh07Zs2a5f5xX3rppSVLlpw/f95qtWZmZn755Zf2e9PS0rZu3fraa69dunTJarWaTKYvvvhiypQp/x979x7V1JXvAXwHIS0koSYCMQRq1YLWTu34wNfIrS2CAtVpqJX2jjIsnTpTHzhtjVBrqVgVECpFprOWA1xFp1p8NFMRaRVlKhbnSp3VVkRR1FIIIJGQQkCSEHL/OLdnTvMihGAgfD9/uM7Z55zf+Z2t8jg7v71tj+/h4UF9DWlqasrJyZk3b56jIt+5c+fMmTMajaa+vl4qlb7//vu2XGVLXw1ezgAAAADgWBhsAwAAAAAA+12/fn3x4sWLFy++du1ae3v7kSNHbt26pVQqmef88Y9/3LNnj06nKywsjI2NZR569tlnKysr29vbv/vuOy6XK5FI6EPUdIhSqfTtt9/WaDRG1/7rX/967733jh071traun79+m3bthHGvI5lZWUHDx48depUV1dXc3Pzli1b1q1b98033zjqiYKCgszO1kg1ZmZmvv76662trV9++WVOTs65c+dsuW+fHTIQ169f//3vf5+VlSWXy+Vy+Z49e+Lj4+nxtj4f2UpWtbW11FMzp7Ojjw7kLwKcZdasWTKZLD09nc/n+/v7r1y5sru7m57kkB5bNbt76NChkpISPz+/qVOnXrt2jRpstnSy0e6cOXOSk5OjoqJGjx6dk5OTnp7OzCogIODrr7+ura0NCQnhcrnz5s0rKys7cOCA7c9FfQ1xc3ObPXt2bW3tqVOn+oxsNmHmBmXt2rUnTpzw8fF5/vnn165dSw+JEcYgtNF2n31ld84AAAAA4BQs115EAQAAAAAAHC4tLa2pqSk7O5sQ8tvf/vbll1+Oi4uzdDKLxfr222+fffZZetfS7yB6vd7Dw6O3t5d57dGjR1955RXTaxcvXvzmm28uWrSI2v3ss89efvll+uhzzz1XUFDwxBNP0KGuXr361ltvnT17ts+n6/OJmOmZPguLxfrHP/7x29/+ltqtrKx85513jCbEs5Fph1i/tZWjS5cufeONNyIjI+mWkpKSffv2/eMf/yD9eWRLWVnKx/pfREJCglgsTkxMtOW+YDsOh1NXV+fj4+PsRAZEoVBMnDixvb3d2Yn0wfp/xuHi6tWrEomktrbW2YkAAAAADFeobAMAAAAAAPuVlZUxh3DMokfajGg0ml27dk2ePNnLy8vHx2fRokWm76zpkTYj33zzzezZs+nd5557jnn08uXL48ePZ05sOHXqVOa6SlbY8kTWhYaG0ttTp069fPmyjRfa0iH2KSsrY3YXIWTWrFnnz5+nj1p55IFkNZC/CBjJGhsbt27dKpVKnZ0IAAAAAIBNMNgGAAAAAAD20+v1pkuX2ejPf/5zd3f3xYsX29vb6+vr6XnqBs7T0/Pu3buGX+rs7LTl2oE8kVlsNtvGMwevQwhjjk3TFuuPPJCsBvIXASPQ7t27qUHZX//6188888x7773n7Iz6YDTPJAAAAACMWBhsA2fS6/X3799vbGx0diIAAAAAYKe5c+eePHnSvms//fTTt956y8fHx93d3dPTc8yYMbZfO3PmzMrKSnrXaJ7G6OjoTz75xL6sBvJEFGbl1vfffz9jxgwbLxxIh1j3/PPP/+tf/2K2XLp0KSwsjNq2/sh2ZKXRaKiNgfxFwAi0efNmakS2paVl/fr1zk6nb6brFAIAAADAyITBNnAmNzc3lUrV2dmp1WqdnQsAAAAA2GPXrl3vvfdeaWmpwWB48OBBTU1NXl7eqlWrbLk2KCjob3/7W2dnp1KpLCgoWLFihe333bZt26ZNm27evKnT6SoqKr766ivm0dTU1Nzc3B07dvzwww86nU6pVH755ZfR0dGD/USUO3funDlzRqPR1NfXS6XS999/38YLB9Ih1qWnp2/durWioqKnp6enp6eioiI5OTk9PZ06av2RbcnKw8NDJpMRQpqamnJycubNm0e1D+QvAsBG48aNY1kwbtw4Z2cHAAAAACMCBtvAmVgslpeXFyEEM8kAAAAADFOzZs2SyWTp6el8Pt/f33/lypXd3d30TINGc6wZ7R46dKikpMTPz2/q1KnXrl07fvy4lZONdufMmZOcnBwVFTV69OicnBx63IgSEBDw9ddf19bWhoSEcLncefPmlZWVHThwYOBPROVAMdqmrV279sSJEz4+Ps8///zatWvpkac+We+QPm9t5ehTTz11+PDhtLQ0Pp/P5/PT09OPHDkyadIkWx65z6wIIYWFhbGxsW5ubrNnz66trT116hTVPpC/CAAb1dXVGSyoq6tzdnYAAAAAMCKwMN0BONdPP/3U0tLi6ekZEBDg7FwAAAAAwCZpaWlNTU3Z2dnOTuQ/FArFxIkT29vbnZ0IYbHwS5atEhISxGJxYmKisxNxNRwOp66uzsfHx9mJwLBx9epViURSW1vr7EQAAAAAhit3ZycAIx2HwyGEPHjwQK/Xjxo1ytnpAAAAAMDw09jYmJKSIpVKnZ0IwJDQ09MTGhqKX6/AdhqNpq2tzdlZwIh25MiRjo4OZ2cBrm/VqlXu7ngfDgCDAl9cwMnc3d0feeQRjUbT1dXF4/GcnQ4AAAAADBu7d++miqJ8fX2Tk5PXr1/v7Iz+M9clitvAidzc3F555RXqc40Atmhubj569Kizs4ARbcuWLSEhIXw+39mJgCv729/+9rvf/Q6DbQAwSPDFBZyPw+FoNJrOzk4MtgEAAACA7TZv3rx582ZnZ/ELGGODocDNzS0hIQHTSILtrl69WlRU5OwsYKTbtm3blClTnJ0FuLLc3FxnpwAArszN2QkA/P9Mkp2dnXg3AQAAAACDbdy4cSwLxo0b56q3BgAAAAAAgMGDyjZwvkcffXTUqFF6vb67u9vT09PZ6QAAAACAK6urqxuBtwYAAAAAAIDBg8o2GBLo4jZnJwIAAAAAAAAAAAAAANAPqGyDIYHD4bS3t3d2dmJdAQAAAIChr6en56effrp7966zE4Hh7aeffhIKhc7OYkRjsViWJvNnsVhkwMsQWokPAAAAAOBKMNgGQ4KXlxeLxdJqtVqtls1mOzsdAAAAALDm4sWLpaWlR48edXYiMLxptdqIiAhnZzEiiESipqYm03YrI2EGg4EabxsI20faeDxeR0fHAG8HACOBQz4KMKJ8//33zz77LEGnAQAMMgy2wZDg5ubm6enZ1dXV1dWFwTYAAACAIW7BggWTJk3Kzs52diIwvCUkJIjFYmdnMSI0NzcbtZw+fTo6Opr88t1rZ2fnunXrjh8/HhQUdOjQIaNLZs2aRQi5fPmyLXc0G596Rb5379709PSWlpbCwkKJREIIEQgEarWaHtvD62AAsMIhHwVwCn9//8bGxod/36lTp9rdaYOXs7N6AwBg8GDNNhgquFwuIUStVjs7EQAAAAAAABcXFRVlOqaVmJgoEomUSuXZs2eLioqMjhoMBtuHwczGp1oaGxurq6sLCwtjY2OpdqVSScfHSBsADHEajca+C81WGDsk8uAZvJz7jDwQQ7AnAWAkwGAbDBUcDocQ8uDBA71e7+xcAAAAAAAAhj2xWMxisahqBmrDeinh4cOHpVIpm8328fFZs2aN0dHKysrKysqBZ5Wamurt7S2RSHQ63cCjAYBLqqmpefnll/l8vqenZ2ho6Llz54KDg5kn1NXVPffcc+7u7mw2WyaTMQ/t3r07JCTE29s7MDDwzTffbG1tpQ9RXwnVavVLL73EZrNNr/3ss8+CgoK4XO6KFSu6urroL6GUwsJCsVj86KOPcrncRYsWXblyxcbHefLJJ5lfio3CWolMnfnXv/6Vx+NVVFTs2rWLw+Ewc6af6OWXX+ZwOE899dTx48dtzMp6X9md80B6w+y9qN2goCBbntfurAAABg6DbTBUuLu7P/roowTFbQAAAAAAAI4gl8vpWjFqQy6X23itVqsdzNSG6K0BYCi4fv364sWLFy9efO3atfb29iNHjty6dYsqgaX98Y9/3LNnj06nY5bJUp599tnKysr29vbvvvuOy+VS09VSqK+HUqn07bff1mg0Rtf+61//eu+9944dO9ba2rp+/fpt27YRxsS2ZWVlBw8ePHXqVFdXV3Nz85YtW9atW/fNN9/Y8kS1tbXML8VGVbxWIlOn3bp168CBA7/97W/v379/8OBBZs7UCZmZma+//npra+uXX36Zk5Nz7tw5mzraal/ZnfNAesNgMJw8efKll15i3qurq2vChAmXLl3q83kHkhUAgAMYAIYMpVJ58+ZN+hdCAAAAABiaUlNTExISbDzZyi8ddv9KYsuF/Y2MX44evg0bNqSlpTk7Cxfk5eWlUCiYLZb+eRu1v/HGG1u2bNFqtXK5fOPGjUZHQ0JCQkJC+pWJ6X3JL6eLpLc9PDw+++wzrVZ7+vTp0NDQft0FBu7777+fOHGis7OAEe2JJ564du0atb106dKCggIrJxNCvv32W+aupTN7enpYLJbRtUePHjV77aJFi7744gt698SJE8yj//Vf/3X37l1mqO+//37hwoVW8jRN22y79ciEkJ9++onaaG9vN41DCPnHP/5B716+fDksLMz2u9NM+8runG1hJZ958+b97//+L72blZW1adMm5oWWnrfPrKiqONuTBADoF/eHMJ4HYCMul3v//v2urq7e3l43N5RdAgAAAAwnIpHI7PIbBssrMBkMBqMpiWxky4VW7jvA83k8XkdHR7+CAziXn5+fUQtzzi7y87//jIyMtWvX8vn8iRMnHjp0KDs7m3rxSp2p1+tt/zXNbHx63jD6vzAdn6ovYbPZixYtys/PH9DTAsAwV1ZWlpeXZ/2cZ5991my7RqP58MMPDx48+OOPP3p5ef361782/f7+yiuvmL32m2++mT17Nr373HPPMY9evnx5/PjxRpd4eXlZz9MWfUb29vamNng8ntkIoaGh9PbUqVMvX75sy31t6Su7cx6InTt3btmypbS0lEryL3/5y9dff808wdLzDmpWAAB9wngGDCEeHh5sNttgMHR1dTk7FwAAAADon+bmZqOW06dPm67w0dnZGR8fz+Vyp02bVlVVZXTJrFmzZs2aZeMdf/zxxzlz5vD5/FWrVnV2dlq/b1dX1+uvv87n86dPn15TU8M8wez5VEtOTk5AQABzTReBQKBWq80uXgIwZN27d8+oxehzuFQjh8MpKChQq9Xffffd1KlTmYcIIVeuXLF9zTaz8Zm7RockEolWq1Wr1SdOnKAW5gGAEUuv19v9HfbPf/5zd3f3xYsX29vb6+vr//KXvzgqK09PT6OqKYPBwPzxY+hEZrPZtpw2kL4avN4ghCxYsGDUqFHU5JD5+fnR0dFCodDK+fTzDmpWAAB9wmAbDC0cDodg2TYAAAAAlxAVFWX6EenExESRSKRUKs+ePVtUVGR01OjlvnUHDhw4fvz47du3uVzu5s2b+7yvQCBobm4uLy//4osvCKOUzez5VEtjY2N1dTVzTRdqzRijcQIAAABwlLlz5548edK+az/99NO33nrLx8fH3d3d09NzzJgxtl87c+ZM5kcKqMoqWnR09CeffGJfVmZpNBpHRa6oqKC3v//++xkzZthylR195cCcLUWm7Ny5891339VqtR999FFiYqLRyZae1+FZAQD0CwbbYGjx9vYeO3as6SQnAAAAADA0icViusaL2hCLxVbOP3z4sFQqZbPZPj4+a9asMTpaWVlpe+nM6tWrAwICBALBtm3bjh07Zv3kwsLCxMTERx55hMPh/Pd//7eNt0hNTfX29pZIJDqdzsZLAAAAYCB27dr13nvvlZaWGgyGBw8e1NTU5OXlrVq1ypZrg4KC/va3v3V2diqVyoKCghUrVth+323btm3atOnmzZs6na6iouKrr75iHk1NTc3Nzd2xY8cPP/yg0+mUSuWXX34ZHR1te3wPDw+qUL6pqSknJ2fevHmOinznzp0zZ85oNJr6+nqpVPr+++/bcpUtfTV4OVuKTJk5c2ZAQMDy5csXLlzo7+9v4/MOPCsAgIHAYBsMLWw2m8fjYcE2AAAAgOFCLpcbzQsnl8ttvFar1TokB1tW/GVOSOXAijRHPQIAAABQZs2aJZPJ0tPT+Xy+v7//ypUru7u76UkO6c/3mN09dOhQSUmJn5/f1KlTr127dvz4cSsnG+3OmTMnOTk5Kipq9OjROTk56enpzKwCAgK+/vrr2trakJAQLpc7b968srKyAwcO2P5cVKG8m5vb7Nmza2trT5061WdkswmTX/5UQwhZu3btiRMnfHx8nn/++bVr1zIHrpgTXxtNgm29r+zOeYC9QXv//fdPnz6dlJRkeq2l5x14VgAAA8HCzCcAAAAAANAvaWlpTU1N2dnZzEYWy/wvF0bta9eu5fP527ZtUygUu3fvzs7OZh6lFmyjF7q3gsVivf/++3/4wx84HM727dv1ev3evXut3DchIeGxxx5LSUnp6urau3fvu+++a5Staf7MFuY2m80uLCx88cUXS0tLU1NTL1y40Ge2YFZCQoJYLDadHgoGiMPh1NXV+fj4ODsRGDauXr0qkUhqa2udnQiMXOPHjy8uLp4yZYqzE/kPhUIxceLE9vZ2ZyfSB0s/gA13//M//3Pp0qXc3Fyj9oE8r5ubW0dHB7WEDQCAw6F+CAAAAAAAHMB0JnCjT1JTjRkZGQ0NDXw+PzIykpoSivkZar1eb8sLFOqS+Pj4mJiYCRMmqNXqtLQ06/dNS0trbm728fGZP3/+kiVL+syT+Vlyo8+VU5/F5vP5eXl5+fn5tnUPAAAADBuNjY1bt26VSqXOTmSE0uv1mZmZ77zzjrMTAQDoB3dnJwAAAAAAAK7g3r17Ri1mh804HE5BQUFBQYHZc65cuWLLveirzNbAmb2vl5dXbm5ubm6uTqc7deoU87PzZs9nNhqdIJFIMHskAACA69m9ezdVb+3r65ucnLx+/XpnZ9QH+vNALlPcxvwM1sSJE01nHSCu9bwA4EpQ2QYAAAAAACPCu+++y2KxuFzuwYMHz58/7+x0AAAAYGjZvHkztQBtS0vL0B9pIz8vl+tKI0+GX7J01Cm5AQBYh8E2AAAAAAAYEXbu3GkwGDQajUwmEwqFzk4HAB4S5gyxjrJ161Z6+8iRI6NGjWKxWGw2WyaTmd6axWKNHj26urqaarxw4cKKFSskEonpJcywADBcjBs3jmXBuHHjnJ3dw4beAIARC9NIAgAAAAAAALgykUjU1NQ0SMG7urq8vLwGKbhDGAwGxw623bp1q62tjd5dt27dqVOnIiMjZTJZbGys0TSzphUYa9asuXTpEp/PJ4RUVFRERESo1WrqUFtb2507dyZMmODAbAFgsNXV1Tk7hSEEvQEAIxYq22BIQ2E4AAAAAADAADU3NzN3qQqDnJycgIAAo8qqDRs2TJo0icPhhIeHl5WV0SdnZWXxeLyKior8/Hwej0ddolAoQkJCOByOUChcv359V1cX8y6zZs2aNWtWn7nRFQ9md03zoc9RqVSrV6/m8XhSqZRq7+7u3rhxo1AoFIlEBw4cCA4OZt7o/Pnztjyvlfi03NzciIgIelepVEZGRhJCoqOjp02b1ucjazQaaqSNEDJv3rzOzk76UFhY2L59+/qMAAAAAABDDSrbYIjSaDQtLS0sFisgIMDZuQAAAAAAALgOqtKrsbGxurr63LlzzGKs1NTUnJwcnU534cKFpUuXdnR0UCfr9fr9+/dHR0fHx8fv37+fukQqlWZmZs6bN0+j0Zw9e1YqlX788cfMu9iYzNy5c/fs2UPtVlRUvP322xUVFZbyofOPiYmJi4vLysqqrKykTt6yZYtWq62qquJyuadOnVIqlcwblZSU1NTUnDlzxvrzWolPO3PmzB/+8AfTZzl37lxxcTGzxdPTkxo49PDwKCwslEgkhJD6+npLvTF58uQPPvggPT3dlq4DcCUdHR1/+tOfuFyusxMBF6fT6ZydAgC4LBYqh2Bo6unpuXv3LiFkwoQJo0aNcnY6AAAAAPAfaWlpTU1N2dnZzk4EhreEhASxWJyYmOjsRFwNh8Opq6vz8fERi8WNjY3MQ/7+/nK5nBDCYv3nbQC9fevWrbfeequiokKj0UyfPr28vJxqp08w2hgzZgxzQMvX17elpcWOhM+cOZORkXH27FlCSHh4+ObNm8PDw63kQyXQ0dFh9F5eJBJdu3ZNIBCY3oLFYul0Ond3d1ue11J82mOPPSaXy42OlpaW/upXvxo7dqzZS3788ccnn3ySGuRjdr7Rbnt7++OPP65SqfrqMwe7evWqRCKpra19yPcFoPn5+f3mN78ZPXq0sxMBV3bgwIHW1laz3yYAAAYOlW0wRLm7u4tEokcffRQjbQAAAAAAAHagxtWIyeiOJcuXL3/11Vfz8/MFAsH9+/dFIpH182fMmHHmzJmB5xkREbF9+/by8nJCSHd3NzXS1mc+piNhPT09Vu5CjbQx9Tc+zbQzDx48OHfuXEsjbYSQxx9/3Eo5hV6vp3/zxUeiYWTicDg7d+6cMmWKsxMBV1ZQUPDII484OwsAcFlYsw2GLi6Xa/rrEAAAAAAAAAwGuVw+c+ZMb2/v6urqvXv39nl+ZGRkXl5eQ0NDb2+v6VEb12yjpKSkJCcnJycnp6Sk2J3PsmXLMjMzCSEKhUImk61YscL6+f2NTxs3bhyzZPDYsWPPPPNMUFAQIYRebY4QEhoampycfPv2bUKITCbz8PCg2j09Pel5MisrK729vekObGhomDBhgu2ZAAAAAMAQgcE2AAAAAACAfmO+Ujc9ZOXowOMD9Jefnx9zl/rXZfrnvn37Vq9eLRAIkpKS4uLiCOMfM/0PkvkvMyEhQaFQhIaGCgSCRYsWpaWlMe+i1+ttL9IKCwvr7e01GAwvvPAC3Wg2H+afRv/XMjMzVSqVn5/f008//fnnn2dkZNjxvFbi0yIiIm7cuEHvxsfHT58+3fRkmUxWV1c3Y8YMFosVGxtbWFhItX/yyScLFixgsVi+vr4vvfRSUVERPQ5348aNRYsW2dhpAAAAADB0YM02AAAAAADoH7NrtolEoqampoGE5fF4HR0dZg91dXV5eXkNJPhDZuOsfQ5hpd+GOKzZNkjoNducnYjLunnzZnZ29scff+zwyOvWrXv77bcffnEb1mwDpxs/fnxxcTGmkYRB5ebm1tHRweFwnJ0IALgmVLYBAAAAAIADNDc3M3e7u7s3btwoFApFItGBAweCg4PpQxs2bJg0aRKHwwkPDy8rK6MaBQKBWq02LSVRKBQhISEcDkcoFK5fv76rq4tq7+rqev311/l8/vTp02tqauirdDpdUlLSpEmTgoODN2/erNVqqfOpE1Qq1erVq3k8nlQqZbafPn2aEHL69GkWixUYGGj9SanTjEpYOjs74+PjuVzutGnTqqqqjC7p13x6ZuNTLTk5OQEBAWw2WyaTWe83ABg8wcHBo0ePHozIAoEA00gCWIfKcgAAGJow2AYAAAAAAI63ZcsWrVZbVVV1584dDoejVCrpQ6mpqTU1NSqVKikpaenSpVQjdYLhZ/TJUqk0MzNTq9Xevn07LCyMHiRLTEwUCATNzc3l5eVffPEFdS0hZOvWrWKxuKam5ubNm2KxeOvWrdT51NGYmJjQ0FC5XL548WKq/dKlS3PmzImKiiKEREZGzpw5s7i42PqjRUVFmVatJSYmikQipVJ59uzZoqIio6NGD2VHfKqlsbGxurq6sLAwNjaWarfUbwAwqHbu3DkYYT/44IPBCAswHIlEIrPtVr7ZOeT7oO1BeDzewG8HAAAuA9NIAgAAAABA/zCnkRSLxY2Njcyj/v7+crlcJBJdu3ZNIBAYXXvr1q233nqroqJCo9FMnz69vLyc/pXE7NSLY8aMYQ7U+fr6trS0EEL8/Pxu3LhBxVcoFH5+ftS1Y8eOvXHjBlV00tbWNmXKFHpySxaL1dHRweVyjW4RExOzYsWKmJiY48ePnzhx4siRI7Z0glG2AoGgtraWyqe1tdXHx2eAv2qZ9gazxdL28IJpJAcJppGE/sI0kuB0ptNImn53O336dHR0NPnleFhnZ+e6deuOHz8eFBR06NChZ555hnmUKiu/fPmyLTmYjU8Vuu3duzc9Pb2lpaWwsFAikRBCBAJBW1sbfdow/UY80mAaSQAYVKhsAwAAAAAA+8nlcrqmitqQy+WEkJ6eHrPnL1++fP78+devX1epVEePHrUUlp7+ccaMGQYGaqSN/HKWJ6M3XFZeeJmOtBFCdu3alZycrNFotm/fvn37dkvX2o5O/uFz4q0BAAAGFSrLAQBgKMNgGwwPvb29+NkFAAAAYBhZtmxZZmYmIUShUMhkshUrVlDtcrl85syZ3t7e1dXVe/fuZV7i4eEhk8l0Ol1JScnChQupxsjIyLy8vIaGht7eXubJsbGxWVlZvb29arU6Ly+Pbo+Li8vNzaXefO3bt2/lypV9pjp58uS5c+cuWbJk9uzZQUFB9j3vq6+++uGHH+p0usbG/nDE+QAAIABJREFUxvT0dKOj/Vqzrb/M9hsAAMBwJBaL6aXXqA2xWGzl/MOHD0ulUjab7ePjs2bNGqOjlZWVlZWVA88qNTXV29tbIpHodLqBRwMAAJeEwTYYBu7fv3/nzp2Ojg5nJwIAAAAAFvn5+TF3MzMzVSqVn5/f008//fnnn2dkZFDt+/btW716tUAgSEpKiouLI4waNeoD43w+Py8vLz8/n2pMSEhQKBShoaECgWDRokVpaWlUe1paWnNzs4+Pz/z585csWULfd8eOHQqFIjAwMDAwsLW1dceOHVQ787UdsyqO8s4771y4cCE5OdmWJzV6CUg1ZmRkNDQ08Pn8yMjIVatWkV/W3un1ets/OmY2Pt1i9Cex0G8AAADDkaWKeVugshwAAJxouE7uDyOKUqlsbW318vKy/mkmAAAAAHg4mGu2OZ1Opzt16tTWrVuvXbtmd5CcnJw7d+5kZWU5MDHoE9ZsGyRYsw36C2u2gdPZsmab2fa1a9fy+fxt27YpFIrdu3dnZ2fbvWabpftaWieVzWYXFha++OKLpaWlqampFy5csP0u4BRYsw0ABhUq22AY4PF4hJAHDx7o9Xpn5wIAAAAAQ8W7777LYrG4XO7BgwfPnz9vdxwWi5WQkPDRRx85MDcAAAAYCKOKeYLKcgAAGNow2AbDgIeHxyOPPGIwGDo7O52dCwAAAAAMFTt37jQYDBqNRiaTCYVCu+MYfubA3ABg5DA7Oe0Abd26ld4+cuTIqFGjWCwWm82WyWSmt2axWKNHj66urqYaL1y4sGLFColEYnoJMyzAEHfv3j2jFsMvUY0cDqegoECtVn/33XdTp041+oZ+5coV29dsMxufuWt0SCKRaLVatVp94sQJu9d8BQAAl4HBNhgeuFwuIUStVjs7EQAAAABwfUKhkGViION5AM4lEoke/k27urpsP5mazmSYcvhQ/a1bt9ra2ujddevWnTp1ymAwUGU0pnc3GAwqlYqef2/NmjU5OTkymcxgMPzzn/9cuXIlfXJbW9udO3ccmy0AAAAAEAy2wXBBDbZ1dXVhJkkAAAAAGGz37t0zmDD9iD3AcNHc3Mzc7e7u3rhxo1AoFIlEBw4cCA4Optp1Ol1SUtKkSZOCg4M3b96s1WrJz7VTWVlZPB6voqIiPz+fx+PJZDJL7YQQhUIREhLC4XCEQuH69evpUTfqkpycnICAAGbFlUAgUKvV9MA2nadMJmOz2SwWy9vbe/78+XSelFmzZlGrMVlnFNZod8OGDZMmTeJwOOHh4WVlZcxzVCrV6tWreTyeVCq13m+U8+fPGz1Xf+PTcnNzIyIi6F2lUhkZGUkIiY6OnjZtWp+PrNFo+Hw+tT1v3jzmDDFhYWH79u3rMwIAAAAA9BcG22B4YLPZmEkSAAAAAABg4LZs2aLVaquqqu7cucPhcJRKJdW+detWsVhcU1Nz8+ZNsVhMTTlIlW3p9fr9+/dHR0dXVVXt378/NjbWUjshRCqVZmZmarXa27dvh4WF0YNJ1CWNjY3V1dXMIi0qAdMJXePi4l588UWdTtfc3Lxp0yaVSsV8ChtnfzUYDHPmzKmoqKB2Kyoq5s6dS1+YmppaU1OjUqmSkpKWLl3KzDMmJiY0NFQuly9evNh6v1FKSkpqamqMis/6FZ925syZp556yvRZzp07V1xczGzx9PSkhu6Yg3z19fWWemPy5Mlnzpyx3FsAAAAAYCcWViaA4UKpVLa2tnI4HH9/f2fnAgAAADCipaWlNTU1ZWdnOzsRGN4SEhLEYnFiYqKzE3E1HA6nrq7Ox8dHLBY3NjYyD/n7+8vlcpFIdO3aNYFAYHTh2LFjb9y4MXr0aEJIW1vblClTmpqaCCEs1v+/OjDasNQ+ZswY5kCUr69vS0sLtU2faWWbVlRU9PLLL+t0Oh8fH19f34KCgpCQEDs65MyZMxkZGWfPniWEhIeHb968OTw8nBBy69att956q6KiQqPRTJ8+vby8nJlPR0cHNcMKzVK/UefrdDp3d3fms/Q3Pu2xxx6Ty+VGR0tLS3/1q1+NHTvW7CU//vjjk08+SRcjMjuTudve3v74448bDVsSQq5evSqRSGpra80GB3gIxo8fX1xcTM+GCjAY3NzcOjo6OByOsxMBANeEyjYYNuiZJHt7e52dCwAAAAAAwFAnl8vp8i9qQy6XE0J6enosXeKQz+POmDGDOQUrPdJmI2rEiBCyZMkSrVarVqv//e9/r1y5kjmzYr9EREQ8ePCgvLy8vLy8u7ubGmkjhCxfvnz+/PnXr19XqVRHjx41usp0JMxKvxFCqJE2pv7Gp5n+LRw8eHDcuHGWRtoIIY8//rhOp7N0lLkcAz5yDQAAADAYMNgGwwabzWaz2ZhJEgAAAGB4Ya7ANJRZydNoHSmHxwd4yJYtW5aZmUkIUSgUMplsxYoVVHtcXFxubi41QrZv376VK1faFz8yMjIvL6+hocH2D0p6eHjIZDKdTldSUrJw4UKq0dfX9/Lly25uboGBgZMnTzb6TdDGNdsoKSkpycnJycnJKSkpdKNcLp85c6a3t3d1dfXevXv7DGKp3yzpb3zauHHjmCWJx44de+aZZ4KCgsgvv5KEhoYmJyffvn2bECKTyTw8PKh2T09PetrMyspKb29v+i+ioaFhwoQJtmcCAAAAADbCYBsMJzwejxDS0dHh7EQAAAAAwJhIJDLb/vCrKKgfGvvLSp4OeQTbg9iXP4AVfn5+zN3MzEyVSuXn5/f0009//vnnGRkZVPuOHTsUCkVgYGBgYGBra+uOHTvIz6M79BiP0YZpOyEkISFBoVCEhoYKBIJFixalpaWZXmJ0ObXUGZ/Pz8vLy8/PpxrHjx//7bffBgcHs1is2NjYwsJC5lPo9Xrb/1uFhYX19vYaDIYXXniBbty3b9/q1asFAkFSUlJcXJxpbkYD7Zb6zdJz9Tc+LSIi4saNG/RufHz89OnTTU+WyWR1dXUzZsww6p9PPvlkwYIFLBbL19f3pZdeKioqosfhbty4sWjRIhs7DQAAAAD6wQAwfGi12ps3b966daunp8fZuQAAAACMXKmpqQkJCUaNpr9cFBcXG/3SQe3u2bOHy+V+/fXXeXl5XC73s88+ow+Vlpb6+vrOmDHjhx9+oK9av359cHCwl5fXwoULz58/TzU+ePAgISHBz89v7Nix+/fvDwoKotr5fH5/f98xzdNgMKjV6t///vccDufXv/711atXjY6GhISEhITYEtxSfKpl7969YrHYw8OD6gT78h++NmzYkJaW5uwsXJCXl5dCoXB2FmC/mpqatWvXDkbktWvX3r5927T9+++/nzhx4mDcEcBGTzzxxLVr15ydxRAyGD8GvPvuu/T24cOH3dzcCCHMH0KYtyaEPPbYY/RfyldfffW73/3upZdeMr2EGXaIY7FYarXa2VkAgMtCZRsMJx4eHo8++qjBYFCr1c7OBQAAAAD6EBUVZfhl3Qm1q9fr9+/fHx0dXVVVtX///tjYWPpQa2trfX19YmLim2++SV+VmppaU1OjUqmSkpKWLl1KNW7ZskWr1VZVVd25c4fD4SiVSqqd2qB/4bEvT0JIYmKiSCRSKpVnz54tKioyOmp7cEvxqZbGxsbq6mqqpsfu/AHAxQQHB48ePXowIgsEAkwjCcOFpYp5h+jq6hq84A7h8J8Bbt261dbWRu+uW7fu1KlTBoOB+UMI8+4Gg0GlUk2ZMoVqWbNmTU5OjkwmMxgM//znP5nzDLe1td25c8ex2QIADEcYbINhhlpEGjNJAgAAAAwRYrGYntyM2hCLxdYv2bRp07Jly1QqVVZW1rJly3Q6HX0oIiLikUceiYyMLC0tpVpu3br12muvjRkzhs/np6Sk0B+6OnLkyM6dO319fT09PV955ZX79+879rkOHz4slUrZbLaPj8+aNWuMjlZWVlZWVg78Lqmpqd7e3hKJhNkJAAA7d+4cjLAffPDBYIQFGAzNzc3MXepnjJycnICAADabLZPJ6EMbNmyYNGkSh8MJDw8vKyujT87KyuLxeBUVFfn5+Twej7pEoVCEhIRwOByhULh+/XqjUTcbF4M0mgbWaNc0H/oclUq1evVqHo8nlUqp9u7u7o0bNwqFQpFIdODAgeDgYOaNzp8/b8vzWolPy83NjYiIoHeVSmVkZCQhJDo6etq0aX0+skajoYvv582bx1xEMywsbN++fX1GAABweRhsg2GGWsHiwYMHPT09zs4FAAAAAIhcLqdrsKgNuVw+8LDu7u7UxvLly+fPn3/9+nWVSnX06FH6BBt/GtRqtQNPxiFBht2tAQAAhg5LFeHEXAW8lUp6qVSamZmp1Wpv374dFhZmNChlY1m5wWCYM2dORUUFtVtRUTF37lz6QrMV+dTRmJiY0NBQuVy+ePFiqt1SpT6lpKSkpqamz+e1Ep925syZp556yvRZzp07R893TfH09KSG7piDfPX19ZZ6Y/LkyWfOnLHcWwAAIwUG22CYcXd39/T0JChuAwAAAHBFFy9e1Gq1JSUl4eHhVItcLp85c6a3t3d1dfXevXvpM5ctW5aZmUkIUSgUMplsxYoV9CEPDw+ZTKbT6UpKShYuXGhfJq+++uqHH36o0+kaGxvT09ONjtr4yXf7OCR/AACA4ch6xbxpRbilCnhioZK+qKhowYIFbDabx+PFxMQcO3aMeXfbK9dTUlKSk5Op7eTk5JSUlD7zIYScPHkyPj7e29s7LCyMarFeqZ+amsrhcGx8XrPxaXfv3vX39zdqLC0tnTZtmo+PD7Oxq6uLGnSsra2lB/n0er2lrggICLh7966lowAAIwcG22D4oYrbsGwbAAAAwJDi5+dn1GL0sozaoP9kbtD8/f0nTpyYlZW1Z88eqmXfvn2rV68WCARJSUlxcXH0VZmZmSqVys/P7+mnn/78888zMjLoINQHwPl8fl5eXn5+fp+Zm+ZJCMnIyGhoaODz+ZGRkatWrTLKVq/X276Yitn4ph1CH+pv/gAAAC6jvxXzlirgLZkxY4aBoaWlxb48IyIiHjx4UF5eXl5e3t3dTX9IyHo+1NooTNYr9elCf1p/49NMf245ePDguHHjxo4da+mSxx9/3Mo018zhN6wyCwBACDH+kg0w9HG5XIVC0d3drdPpPDw8nJ0OAAAAABBCyL1794xaTN+8MFvobWbj9OnTjeYpkkgkEonE9CoOh/PXv/71r3/9q2kmEomkX7Mvmn1DxOFwCgoKCgoKzJ5z5cqVAcY32xWU/uYPAAAwYjEr4D/99NM+z4+MjMzLy1u8eLG/v7+bm3ERAlW2fvnyZVtuTRe30WVtduRDVerv2rVLoVBcvHjxxIkTf//7362c39/4tHHjxjU2NtJrwh07duyZZ54JCgoihLBYLPpHkdDQ0Oeff/73v//9xIkTZTIZ/drN09OzoqJi3rx5hJDKykpvb+/e3t5Ro0YRQhoaGiZMmGB7JgAArgqVbTD8jBo1CjNJAgAAALgYo+ouAAAAGMmMKuYtVYSbrYC3UkmfkJCgUChCQ0MFAsGiRYvS0tKYd+lX5XpYWFhvb6/BYHjhhRfoRksV+cwad2Y+lir1+/W8VuLTIiIibty4Qe/Gx8dPnz7d9GSZTFZXVzdjxgwWixUbG1tYWEi1f/LJJwsWLGCxWL6+vi+99FJRURE9Dnfjxo1FixbZ2GkAAC6MhTpfGI7a29uVSuXo0aNHjx7t7FwAAAAARpy0tLSmpqbs7GxnJwLDW0JCglgsTkxMdHYirobD4dTV1RmtwQNgxdWrVyUSSW1trbMTgZFr/PjxxcXFU6ZMcXYiLuvmzZvZ2dkff/yxwyOvW7fu7bffHhbFbW5ubh0dHRwOx9mJAIBrQmUbDEve3t5PPPEERtoAAAAAwBZCoZBlQigUOjsvAHA8S1Udgx3WxvsOUnoAANYFBwcP0ms0gUAwLEbaAAAGGwbbAAAAAADAxd27d89gwnSROQBXJRKJBikyj8ezdKirq8shcfprkObv6TOsjffF9EIA4Cw7d+4cjLAffPDBYIQFABh2MNgGAAAAAAAA4Mqam5uZu93d3Rs3bhQKhSKR6MCBA8HBwVS7TqdLSkqaNGlScHDw5s2btVot1U4VY+Xk5AQEBLDZbJlMRrULBAK1Wm26RJBCoQgJCeFwOEKhcP369fSoW3/jUGbNmjVr1qyBPH5/n6urq+v111/n8/nTp0+vqalhZvXjjz/OmTOHz+evWrWqs7PTvvv2Nw4AAAAADH0YbAMAAAAAAAAYQbZs2aLVaquqqu7cucPhcJRKJdW+detWsVhcU1Nz8+ZNsVi8detWqp0qxmpsbKyuri4sLIyNjaXaqQvpalE6vlQqzczM1Gq1t2/fDgsLk0ql9sWhrxpgNVh/nysxMVEgEDQ3N5eXl3/xxReEUY524MCB48eP3759m8vlbt682b779jcOAAAAAAx9LMxgAAAAAAAA/ZKWltbU1JSdne3sRGB4S0hIEIvFiYmJzk7E1XA4nLq6Oh8fH7FY3NjYyDzk7+8vl8tFItG1a9cEAoHRhWPHjr1x4wa1qE9bW9uUKVOampqoQyzWf94eWNqmjRkzhh7AI4T4+vq2tLTYEcduRtH6+1x+fn43btyg+kehUPj5+VHtLBaroaFBLBYTQpRK5eTJk+nn6td9+4zz8F29elUikdTW1jo3DRjJxo8fX1xcPGXKFGcnAq7Mzc2to6ODw+E4OxEAcE2obAMAAAAAAABwQXK5nC4LozbkcjkhpKenx9IlAxnxoqdJnDFjBnN9xP6OJDGnW3SUfj0XcypLSxf29va6ufX9RqXP+9oYBwAAAACGOPxIBwAAAAAAQ4jpik3OjWNHfLPrTjkwPsAALVu2LDMzkxCiUChkMtmKFSuo9ri4uNzcXGqEbN++fStXruwzlIeHh0wm0+l0JSUlCxcupBojIyPz8vIaGhp6e3ttTMlsHMrA12zr73PFxsZmZWX19vaq1eq8vDzmodzc3IaGhra2tp07dy5fvtzu+/YrDgAAAAAMfRhsAwAAAAAABxCJRA6J46ip5Ezj8Hg8h0S2FN+WQw6Jb8SxzwUuyc/Pj7mbmZmpUqn8/Pyefvrpzz//PCMjg2rfsWOHQqEIDAwMDAxsbW3dsWMH1U4N/Zr+SQihljrj8/l5eXn5+flUY0JCgkKhCA0NFQgEixYtSktLsy8ORa/X2/7fgR7qZo559/e50tLSmpubfXx85s+fv2TJEubJ8fHxMTExEyZMUKvV9HP1677W4wAAAADAMIU122DYe/DgQWdn55gxY/DhXwAAAICHw+yabUaLFVE/m5WWlr722muPP/74iRMnxo0bR7e3tbW9/fbbR48e/dOf/kS/6D99+nR0dDT55TiTTqd77733ZDKZwWB46aWXduzYwWaz7YgjEAja2troXeYqTYSQ4uLiqKgo6sKAgID6+norj282fmdn57p1644fPx4UFHTo0KFnnnmGeZSqy7l8+XIfPWs5PpXn3r1709PTW1paCgsLJRKJlecaFrBm2yCh12xzdiLDnk6nO3Xq1NatW69du+bsXAYX1mwDpxukNduo755mvzlaWSrSylWDF2dQWcrEvv4ZvrBmGwAMKlS2wbB37969tra2zs5OZycCAAAAAP9BvaBpbW2tr69PTEx88803me0xMTGhoaFyuXzx4sX0JVFRUaavdbZu3SoWi2tqam7evCkWi7du3WpfHKVSSX5etop59NKlS3PmzImKiiKEREZGzpw5s7i42PqjmY2fmJgoEomUSuXZs2eLiopMe8P2N1Zm41MtjY2N1dXVVA2Q9ecCgIF49913WSwWl8s9ePDg+fPnnZ0OwEjkkIp5+8rQ+/X9dLAr3R3CUiYOSR4V9gAAFAy2wbDH4/F4PJ6Hh4ezEwEAAAAYicRisdH8aWKxmD4aERHxyCOPREZGlpaWMq86efJkfHy8t7d3WFiY9fgFBQX0QkdxcXGHDh2yL44lc+bMEYlEn332GSHkxIkTTz755NSpU+2Ic/jwYalUymazfXx81qxZY3S0srKysrLSvgyZUlNTvb29JRKJTqcbeDQAsGTnzp0Gg0Gj0chkMqFQ6Ox0AEai5uZmepv1M7O7GzZsmDRpEofDCQ8PLysr6zPy6dOnTVdX7ezsjI+P53K506ZNq6qqsiVDO+LYvgilTCZjs9ksFsvb23v+/PnBwcHk5wfPysri8XgVFRX5+fk8Hk8mk1GX9Lcf+vVcVEtOTk5AQACbzaZvKhAI1Gq10d8IAMDIhME2GPbGjBkzduzYRx55xNmJAAAAAIxEcrmcrqmiNuRyuelp7u7uzF0ul2v7Lax8trpfcZi0Wi29vWvXruTkZI1Gs3379u3bt9sX0FLwh8yJtwYAABgkBoNhzpw5FRUV1G5FRcXcuXPpHw9SU1NrampUKlVSUtLSpUv7jGZHhbqj4thehh4XF/fiiy/qdLrm5uZNmzapVCry809Eer1+//790dHRVVVV+/fvp4vd+9sP/XouVNgDAPQJg20AAAAAADBYLl68qNVqS0pKwsPD7YsQFxeXm5tLvcHZt28fXeVmBw8PD5lMptPpSkpKFi5cSLdPnjx57ty5S5YsmT17dlBQkH3BX3311Q8//FCn0zU2Nqanpxsdtf2T7Haw9FwAAADDjqWK+ZSUlOTkZOqc5OTklJQUavvWrVuvvfbamDFj+Hx+SkqKWq22777WK9QdFcf2SvfDhw+fOnXKw8Nj3LhxW7ZsYc5xvWnTpmXLlqlUqqysrGXLllHF7o7qB+tQYQ8AYAUG2wAAAAAAwAH8/PxMG/39/SdOnJiVlbVnzx6qhfn6zOwMRcwNQsiOHTsUCkVgYGBgYGBra+uOHTvsi0MIoT6Izefz8/Ly8vPzmZe88847Fy5coN/iWWc2fkZGRkNDA5/Pj4yMXLVqFZ0hRa/X2/5xb7Px6RajP60/FwAAwPBiqWI+IiLiwYMH5eXl5eXl3d3d9Id4li9fPn/+/OvXr6tUqqNHjzokB0eViQ8kzpIlS7RarVqt/ve//71y5cqIiAjr5w9GP9gBFfYAMJK5930KAAAAAABAX+7du2faOH369Pr6emaLlTEns4fYbHZGRkZGRoYtJ1s/JJFILL0DKi4ufuONNwIDAy3F7DM+h8MpKCgoKCgwe86VK1dsiWwlPrPR6AQrzwUAAOAy6OI2uqyNECKXy2fOnOnt7V1dXf3pp5/aHZyqUN+2bZtCodi9e/cgxaHK3C9fvtxnHF9f3+Li4meeeSYwMHDy5MmdnZ3Wz3dUP9iBqrB/8cUXS0tLU1NTL1y48DDvDgAwdKCyDQAAAAAAHM+o+mooY7FYCQkJH330kbMTAQAAgP9nWjEfFhbW29trMBheeOEFunHfvn2rV68WCARJSUlxcXGE8bOHpUp3OyrUzRrUSvfx48d/++23wcHBLBYrNja2sLCQmPxwxYzsqH6w1I4KewCAPrGwdiUAAAAAAPRLWlpaU1NTdna2sxOB4S0hIUEsFicmJjo7EVfD4XDq6up8fHycnYhFLJbFdxHU29sBvqmwEh/Munr1qkQiqa2tdXYiMHKNHz++uLh4ypQpzk4EXJmbm1tHRweHw3F2IgDgmlDZBgAAAAAA8AtCoZBlQigUOjsvADuJRCKjFh6P56jgXV1d/b3EjmlgHRXfiAP7AQAAAABGMqzZBgAAAAAA8Atm158DGL6am5uZuwKBQK1W0zOA0UNTVEtxcXFUVNTp06ejo6MDAgLq6+up9tLS0tdee+3xxx8/ceLEuHHjCCEKhSIqKuqbb77x8/N75ZVXdu/e7eXlZT0TKiz55XhYZ2fnunXrjh8/HhQUdOjQIaNLbF/iyFJ8Kv+9e/emp6e3tLQUFhZKJBIr/TAy9fT0hIeHOzsLsB+fz+fz+c7Own69vb3OTgEAAGBAMNgGrqO3t1elUnV2dtq4sj0AAAAAAMAIpFQqzU60eOnSpTfffDMqKooQEhkZOXPmTGr1HYPBwGKxWltb6+vrT548+eabb3722WeEEKlUmpmZOW/ePI1Gc/bsWalU+vHHH1u/dVRUFBWN2ZiYmCgSiZRKZXt7e25urtEl/RoDMxufamlsbKyurj537lxsbKxWq7XSDyPTqFGjMKfr8NXQ0ICPiQwGoVDY0tJi1Ojn54feBgAAU/ixElyHwWC4e/euXq/39/fH/MsAAAAAgwdrtoFDYM22QUKv2SYWixsbG5mH/P395XI5sbyqWUxMzIoVK2JiYo4fP37ixIkjR45Q7SwWq62tbfTo0Wq12t/fv729nRAyZswYpVJJX+vr62v6Vtoso7sLBILa2lqBQEAIaW1t9fHxcfiabcwWS9sjGdZsA6fDmm3wEGDNNgAYVFizDVwHi8WiJtzv6Ohwdi4AAAAAAABOJpfLDQYDNZhEbVAjbUaoMi/Krl27kpOTNRrN9u3bt2/fbjasu/v/z5EzY8YMA4ONI23WMZN5yJx4awAAAAAY7jDYBi6FGmxTq9WY7BsAAAAAAMASDw8PmUym0+lKSkoWLlxIt0+ePHnu3LlLliyZPXt2UFAQ85KLFy9qtdqSkhJ6Za/IyMi8vLyGhoYB/v716quvfvjhhzqdrrGxMT093ejorFmzqGXbBoOlfgAAAAAA6BcMtoFLefTRRz08PAwGQ2dnp7NzAQAAAABXYLT400O+tRPvDq7Ez8/PqKWwsDA2NpbP5+fl5VELs9HeeeedCxcuJCcnG13i7+8/ceLErKysPXv2UC0JCQkKhSI0NFQgECxatCgtLa3PTOh/1cx/3hkZGQ0NDXw+PzIyctWqVeSX/+/0er3tMz2ajU+3GP1pvR8AAAAAAGzn7uwEABzM29u7tbW1vb2dqnIDAAAAgIdDJBI1NTUNMEhXV5eXl5eNJ/N4PEvzhzsqDiGkX+s59eu+fTIYDLYMtjmqH8CF3bt3z6hFIpFYmjWxuLj4jTfeCAyRqvKBAAAgAElEQVQMNGqfPn16fX09s2XUqFHvvPPOO++8Y3smZv9DcTicgoKCgoICs+dcuXJlgPGZjUYnWOkHAAAAAADbobINXI23tzchpKurS6fTOTsXAAAAgBGkubmZudvd3b1x40ahUCgSiQ4cOBAcHEy1U+UmKpVq9erVPB5PKpVS7QqFIiQkhMPhCIXC9evXd3V10aE2bNgwadIkDocTHh5eVlZGNQoEArVazfoZfbKVOGZZikMIOX36tFEjtZuVlcXj8SoqKvLz83k8nkwm6/O+ts+D19nZGR8fz+Vyp02bVlVVxTw0qP0AQGGxWAkJCR999JFRI3FqlScAgMtAxTwAgKvCYBu4Gnd3d+rTu1Y+ngwAAAAAg23Lli1arbaqqurOnTscDkepVFLtVFlJTExMaGioXC5fvHgx1S6VSjMzM7Va7e3bt8PCwuhBOEJIampqTU2NSqVKSkpaunQp1UgFNPyMPtlKHLMsxSGEREVFGbVQu3q9fv/+/dHR0VVVVfv374+Nje3zvqbBLUlMTBSJREql8uzZs0VFRcxDg9oPABSz/xfMNgIADCqRSDTwIP36rImVGZIcFYf0v2Le9pP7ZOOtHdUPAAAjDQbbwAVRxW3t7e3OTgQAAADA9YnFYqNFksRiMSHkyJEjO3fu9PX19fT0fOWVV+7fv8+86uTJk/Hx8d7e3mFhYVRLUVHRggUL2Gw2j8eLiYk5duwY1X7r1q3XXnttzJgxfD4/JSVFrVZbz8dSHAfatGnTsmXLVCpVVlbWsmXLqAkVrN+3srKysrLSluCHDx+WSqVsNtvHx2fNmjV0+xDsBwCzhEIhy4RQKHR2XgAwzKBiHhXzAADDCwbbwAVxuVw3NzedTvfgwQNn5wIAAADg4uRyOV3yQm3I5XJCSE9Pj5WruFyuUcuMGTMMDC0tLVT78uXL58+ff/36dZVKdfToUUsB6VWXLMWxkd2rNw3wvn0m85D7AcBu9+7dM5gwXTQOAKBfUDFvdCEq5gEAhhoMtoELYrFYVM07itsAAAAAnGXZsmWZmZmEEIVCIZPJVqxYYf38yMjIvLy8hoaG3t5eZrtcLp85c6a3t3d1dfXevXuZhzw8PGQymU6nKykpWbhwofU4VpiN01/W72v7J9BfffXVDz/8UKfTNTY2pqen0+0PoR8AAACcDhXzqJgHABimMNgGromaSVKtVuPlAgAAAMDD4efnx9zNzMxUqVR+fn5PP/30559/npGRQbUzX58xpydKSEhQKBShoaECgWDRokVpaWlU+759+1avXi0QCJKSkuLi4ugIhJDCwsLY2Fg+n5+Xl5efn289jhVm49BJGm0wE7Alf4per7fxE+gZGRkNDQ18Pj8yMnLVqlX0XR5CPwAAADgdKuYdct8+k0HFPACAw7Fs/JUPYNj58ccfNRqNUCikBt4AAAAAwFHS0tKampqys7OdnQgMbwkJCWKxODEx0dmJuBoOh1NXV+fj4+PsRGDYuHr1qkQiqa2tdXYiMHKNHz++uLh4ypQpdAuL9YuXlm+88Qafz9+1a5dCobh48eKJEyf+/ve/mz2TQi2EtnjxYn9/fze3/xQb+Pn5HTly5De/+c3Nmzc//fTT1NRU+lo2m11YWPjiiy+WlpampqZeuHDBShwrzMax9Fz0rtGG9ftS5fKXL1/uM5m1a9fy+fxt27YpFIrdu3dnZ2dTd3kI/TAEubm5dXR0cDgcZycCAK5puH5xBOgTZpIEAAAAAAAAABiOUDGPinkAgOEFlW3gsvR6/d27dw0Gw7hx49hstrPTAQAAAHAdqGwDh0Bl2yAZpMo26j2s2XcIZstK+rxq8OIMKkuZ2Nc/QwQq28DpTCvbABwOlW0AMKhQ2QYua9SoUV5eXoSQjo4OZ+cCAAAAAM4kFApZJoRCobPzAnhIRCLRwINYGS6y79DgxRlUljJxSPLUBC0AAAAAMOxgsA1cGbVaG2aSBAAAABjh7t27ZzBx7949Z+cF8JA0NzfT20aTrRntbtiwYdKkSRwOJzw8vKysrM/Ip0+fNpq6jRDS2dkZHx/P5XKnTZtWVVVlS4Z2xJk1axa1alGfZDIZm81msVje3t7z588PDg4mPz84tQpRRUVFfn4+j8eTyWTUJf3th349F9WSk5MTEBDAZrPpmwoEArVabTobHgAAAAAMfRhsA1fG4XBGjRrV09PT1dXl7FwAAAAAAACcz2AwzJkzp6KigtqtqKiYO3cuXXqVmppaU1OjUqmSkpKWLl3aZ7SoqCjTsq3ExESRSKRUKs+ePVtUVGRLVnbEoUbNbQkeFxf34osv6nS65ubmTZs2qVQq8nO1mV6v379/f3R0dFVV1f79+2NjY6lL+tsP/XouqqWxsbG6uppaG4lqVyqV9HMNnUo+ADCFinkAADA11OcNBxgghUKhUql4PN7YsWOdnQsAAACAi8CabeAQWLNtkNBrtonF4sbGRuYhf39/uVx+5syZjIyMs2fPEkLCw8M3b94cHh5OCLl169Zbb71VUVGh0WimT59eXl5u9MbA0tpjRu0CgaC2tlYgEBBCWltbfXx87Fuzze44RoqKil5++WWdTufj4+Pr61tQUBASEsK8ndGGo/rBSjuzxdL2w4Q128DpsGYbPARYsw0ABhUq28DF8Xg8zL8BAAAAAAAjkFwup2ukqA25XE4IiYiIePDgQXl5eXl5eXd3NzXSRghZvnz5/Pnzr1+/rlKpjh496pActFqt0+MsWbJEq9Wq1ep///vfK1eujIiIsH7+YPSDHRzVdQAAAADwEGCwDVzco48+On78eJS1AQAAAICph7kwEj4BBkNKSkpKcnJycnJySkoK3SiXy2fOnOnt7V1dXb137167g7/66qsffvihTqdrbGxMT08fpDi2r9nm6+t7+fJlNze3wMDAyZMnd3Z2Wj/fUf1gBw8PD5lMptPpSkpKFi5c+DBvDQAAAAADgcE2cH2jRo1ydgoAAAAArk8kEg08SL+W2uXxeAOM8zCna7P9XlaeC8A+fn5+Ri1hYWG9vb0Gg+GFF16gG/ft27d69WqBQJCUlBQXF0cYg8T0yLTRELXZ9oyMjIaGBj6fHxkZuWrVKmLDYLMdcfR6vY3/rcaPH//tt98GBwezWKzY2NjCwkI6FPMBHd4PltqZtzZKg1rCjc/n5+Xl5efn2/J0AAAAADAUYLANAAAAAAAcoLm5mbnb3d29ceNGoVAoEokOHDgQHBxMtVNvnFUq1erVq3k8nlQqpdoVCkVISAiHwxEKhevXr2eOlm3YsGHSpEkcDic8PLysrIxqFAgEarWa9TP6ZCtxLPnxxx/nzJnD5/NXrVpFl7xQYU+fPk0IOX36NIvFCgwMpC+xvaSGvtxosIFqycnJCQgIYLPZMpnM+nMBDMS9e/dMG7/66qt//vOfzBaJRPLDDz90dXWdPn168uTJ9BSU5OdZKGn0JWbbORxOQUGBWq3+7rvvpk6danSJWXbEuXLlSmVlpS2Pf/ny5TVr1tTX1xsMBq1WK5FImHekt8nPg+KO6gdL7aa3pg9JJBJqxssTJ04EBQXZ8nQAMHSgYh4AYCTDYBsAAAAAADjeli1btFptVVXVnTt3OByOUqmk2ql3yjExMaGhoXK5fPHixVS7VCrNzMzUarW3b98OCwujB+EIIampqTU1NSqVKikpaenSpVQjFdD01baVOJYcOHDg+PHjt2/f5nK5mzdvphovXbo0Z86cqKgoQkhkZOTMmTOLi4vpS2wZPKBFRUWZnky1NDY2VldXU7Us1p8LAABgREHFvKPuhYp5AICHA4NtAAAAAABgP7FYbDRPmlgsJoQcOXJk586dvr6+np6er7zyyv3795lXnTx5Mj4+3tvbOywsjGopKipasGABm83m8XgxMTHHjh2j2m/duvXaa6+NGTOGz+enpKSo1Wrr+ViKY8Xq1asDAgIEAsG2bdvo8+fMmSMSiT777DNCyIkTJ5588smpU6fSl1RWVtpYUmNdamqqt7e3RCLR6XQDjwYAAOAyUDFvCSrmAQCGJgy2AQAAAACA/eRyudF8aHK5nBDS09Nj5Soul2vUMmPGDOZkay0tLVT78uXL58+ff/36dZVKdfToUUsBtVqt9Ti26O3tdXP7z69Iu3btSk5O1mg027dv3759u+1xHIh+LoDhTigUskwIhUJn5wUAwwMq5mmomAcAGJow2AYAAAAAAI63bNmyzMxMQohCoZDJZCtWrLB+fmRkZF5eXkNDQ29vL7NdLpfPnDnT29u7urp67969zEMeHh4ymUyn05WUlCxcuNB6HCtyc3MbGv6PvXsPi+q69z++NjeBAWEGmMmAaaKNl8aetOIl5hfJyYlao0ZPtVZzscaKtkmq+ByfqkTzUDWPQiOtiZymsWK1SU/SWC1JEzFNDLaSaGNiLhVQ4iVqGASGyyADzn1+f+x2OhlgGEZgw/B+/cEzs/baa332TmJwvrP2qmpqatq6devChQs97WPGjLnrrrvmzJlz5513+mye1K1voHdXh9cFDHS1tbXudjrcTA7AYMaK+RvBinkAUBDFNgAAAAA9QKvVer/Nz883mUxarXbs2LGvv/769u3b5Xbvj8+8H2eUlZVlNBozMjI0Gs2MGTPy8vLk9l27dmVmZmo0muzs7CVLlnhGEELIX9xWq9WFhYV79uzxP06H5KGWLl06f/78ESNGmM1mn/5PPvnksWPHcnJyfE50Op2Bfz3c50NDn/vg87Oz6wIAYDBgxXyvYsU8APQeiRXEGDycTmdLS4skSQkJCUpnAQAAGMDy8vKuXr363HPPKR2k1xUUFFy8eHHHjh1KBwlNWVlZaWlp69evVzpIqFGpVJcvX05OTlY6CAaM06dPz5s37/z580oHweA1fPjwQ4cO3X777Z4WSfrKh5aPP/64Wq3etm2b0Wh87733Dh48+Pvf/77DnrIdO3bEx8fff//9qamp3hUvrVb7yiuv3H333Z9//vkf/vCH3Nxcz7lRUVGvvvrqAw88cOTIkdzc3GPHjvkZpzOSJP3sZz9bvny5SqXasmWL0+n0Xpe/YsWKy5cv33LLLbt37/Y+S14uf/LkycDuVsdX7d3i/brD6xqcwsLCWlpaVCqV0kEAhCZWtmEQsVgsRqOxoaGBGjMAAAC6JElSVlbWs88+q3QQAAAGHVbM+5mFFfMA0A+xsg2DiNvtrq6uVqlUCQkJ3r+BAQAAoFsGz8o29CpWtvWSwbOyrcPlLH02tRAiZD5RYWUbFNd+ZVtIYsW8sljZBqBXsbINg4i8rW5iYiKVNgAAgEFFp9NJ7eh0OqVzAX1Er9ff+CBtbW2Bd46Pj+/tcUQ3a13dmrdLAU7dU/cBQAhgxTwAhDaKbQAAAABCXG1trbud2tpapXMBfaSmpsb7rcViWb16tU6n0+v1+/btGzVqlNwu16FNJlNmZmZ8fPzatWvldqPROHHiRJVKpdPpVq5c6V0lWrVq1ejRo1Uq1fTp048ePSo3ajQas9nc/qlufsbpUGfjCCGKi4t9GuW38u5Kx48f37NnT3x8fFFRUZfzTpo0Sd4tqUutra1Lly6Ni4sbN25cWVmZ96FevQ8AQoPnNxClgwAAegXFNgAAAAAABpENGzbYbLaysrKLFy+qVKrGxka5Xf4IeP78+RkZGQaD4f7775fb165dm5+fb7PZLly4MHXqVE8RTgiRm5tbWVlpMpmys7Pnzp0rN8oDtv9Y2c84HepsHCHErFmzfFrkt06nc+/evbNnzy4rK9u7d++iRYu6nDfwz77Xr1+v1+sbGxvfeeedN954w/tQr94HAP0NK+YBAO2xZxsAAACA7mHPNvQI9mzrJZ4929LS0qqrq70PpaamGgwGvV5fXl6u0WjanytJUktLS1xcnHdjUlKSpyAnhEhJSamrqxNCnDt3bs2aNcePH7darenp6aWlpZ5PGDrcTa2zcfzwvyubz1HPW58XQczbIY1Gc/78efm+NTQ0JCcny7P0wX3obezZBsUNkj3boCz2bAPQq1jZBgAAAABACDIYDJ41VfILg8EghHA4HH7O8qm0CSHGjx/v/QhWT2Vo4cKFU6ZMOXPmjMlk2r9/f2cD2mw2/+MEyDNOd93gvF2G6eP7AAAAgH6IYhsAAAAAAIPIggUL8vPzhRBGo7GoqGjx4sX++8+cObOwsLCqqsrlcnm3GwyGCRMmDB06tKKiYufOnd6HIiMji4qK7Hb74cOHp02b5n8cPzocp7v8zxv4nm0PPvjgL37xC7vdXl1d/fOf/9zT3gf3AQAAAP0cxTYAAAAAfUfe10TpFN2gYNoBd6/Qb2m1Wu+3+fn5JpNJq9WOHTv29ddf3759u9wu//vm2X/I0z8rK8toNGZkZGg0mhkzZuTl5cntu3btyszM1Gg02dnZS5YsEV7/vbz66quLFi1Sq9WFhYV79uzxP44fHY4jvP7r8H7hHSCQ/DKn0xng/hrbt2+vqqpSq9UzZ85ctmyZZ5Y+uA8AAADo59izDYOa2+3m8wsAAIDu6nDPNr1ef/Xq1UBO978JU49oa2uLjY0NsHN8fHxLS0vfzxuIQO6Vn/w9nqdnsWdbL/Hs2aZ0EAwY7NkGxbFnG/oAe7YB6FWsbMMg5XA4qqurL1++rHQQAACAEFFTU+P91mKxrF69WqfT6fX6ffv2jRo1yvtoSUnJsGHDoqKiioqKPI2rVq0aPXq0SqWaPn360aNH5UZ52UpBQYFP/7a2thUrVqjV6vT09MrKSs/qFqPROHHiRJVKpdPpVq5c2dbW5j+2RqMxm83tl/IIIYqLi30a5bc7duyIj48/fvz4nj174uPj5Uj+5w38OXWtra1Lly6Ni4sbN25cWVmZ96EO709n+bt7HwAAGIgG3CpwVswDQKii2IZBKjw83GKx2O321tZWpbMAAACEoA0bNthstrKysosXL6pUqsbGRu+jhw8frqyslB+w5mnMzc2trKw0mUzZ2dlz586VG+V1XdXV1RUVFd79169fr9FoampqSktL33rrLU/PtWvX5ufn22y2CxcuTJ06de3atf5zysHc/+J9aNasWT4t8lun07l3797Zs2eXlZXt3btXjuR/3vaDd2b9+vV6vb6xsfGdd9554403vA91eH86y9/d+wAAQL+i1+sD6dY3j+zq1ndW4uPj/RztVuCe/a5MgFP7yc93dwDAHzcwWBmNxs8//9xgMCgdBAAAYIDJzc3NysqSX6empvr8FSM1NdXtdt90000NDQ0dni6EsNvtntfyi88///yBBx7QaDQqlSojI0N8tYDU/nVKSopn/Lq6Ok+7RqPxDpOSktLl5fj/a5HPUeFVOfN+EcS8HVKr1Z7rqq+v7+798eipPL1q1apVeXl5SqcIQbGxsUajUekUgfLZT06m1WqVzjW4/OMf//j617+udAoMarfeemt5ebl3i8//3a5fv56VlaXVam+66aa9e/eOHDnSu+e7776blpYWGRn5pz/9ydO+cuXKUaNGxcbGTps2raSkxNNZCLFz506f/q2trcuXL09MTBw3btzZs2c9n5rW1dVNmDBB/nPpJz/5SWtrq/8LUavVnX3ueujQIZ9G+e0vf/nLuLi4999/v7CwMC4uTo7kf96JEydOnDixi3vqdrvdbrPZ/Oijj6pUqm9/+9unT5/2nr3D+9NZ/u7eh/5JkiSz2ax0CgAhi5VtGLwSEhKEEK2trXa7XeksAAAAA5Xnq0viX5/IGAwGIYTD4fBzVkREhE/LwoULp0yZcubMGZPJtH///i7n9X4Oktvrm9rjx4/3/guPXIcLnM1m61b/npq3yzAB3h/PKb2RB+gNtbW17T+qqK2tVToXgP6FFfM+J7pZMQ8A/Uyv70wO9GcGg6GtrU2j0SQlJSmdBQAAYMDIy8u7evXqc889590oSV/5y8Xjjz+uVqu3bdtmNBrfe++9gwcP/v73v2/f0/Naq9W+8sord9999+eff/6HP/whNze3fR/v11lZWQkJCZs3b25ra9u5c+fGjRvldnlDtfvvvz81NTUsLKAvF0ZFRb366qsPPPDAkSNHcnNzjx075ue6PG99XvifV96w7eTJk12GeeKJJ9Rq9aZNm4xG4zPPPPPcc891eX86zB/Efeh7WVlZaWlp69evVzpIqFGpVJcvX05OTlY6CAaM06dPz5s37/z580oHweA1fPjwQ4cO3X777WlpadXV1d6HUlNTDQaDXq8vLy/3WbctkyTJbrfL3+Px/N/53Llza9asOX78uNVqTU9PLy0t9f97hVarPXv2rDy+0WiU19cKIZKSkrwLeykpKV1+f8XnNwf/Rzv7vSKIeTuk0WjOnz8vX1dDQ0NycnK37o9HT+VRVlhYWEtLi0qlUjoIgNDUT//SBfQNeXFbc3MzVWcAAIAb5PMsuPz8fJPJpNVqx44d+/rrr2/fvl1ul1ektf+5a9euzMxMjUaTnZ29ZMkSPz3ln3l5eTU1NcnJyVOmTJkzZ45n3qysLKPRmJGRodFoZsyYkZeX12Vy+YvtarW6sLBwz549nnZJkjwztg/g/aLLeZ1OZ4C/cG7fvr2qqkqtVs+cOXPZsmVd3p/O8gdxHwAAUBwr5ntk3i7DsGIeAHocK9swqLnd7kuXLjkcDr1eHxcXp3QcAACAgaHDlW1Ksdvtb7755lNPPVVeXq50FnQPK9t6CSvb0F2sbIPiPCvbPC2smGfFfI9jZRuAXjVQ/3AEeoQkSUOHDhVCmEwmpbMAAACgezZu3ChJUlxc3IsvvlhSUqJ0HAAA0GNYMc+KeQAYWFjZhsHO4XB88cUXQohbbrklKipK6TgAAAADQL9a2YaBi5VtvSQ0VrbJH/v2zUcW/jdYGgxY2QbFtV/ZphRWzIcwVrYB6FWsbMNgFxERIf9ftrm5WeksAAAA6BU6nU5qR6fTKZ0L6CN6vf7GB2lrawu8c3x8/A2O05fVr8Dn8nNdAAY6VswDAG4ExTZAJCQkCCGuXbs2yL/MCAAAEKpqa2vd7dTW1iqdC+gjNTU13m8tFsvq1at1Op1er9+3b9+oUaPkdrkObTKZMjMz4+Pj165dK7cbjcaJEyeqVCqdTrdy5UrvatmqVatGjx6tUqmmT59+9OhRuVGj0ZjNZk9h29PZzziduXLlyuTJk9Vq9bJly1pbW71zFhcXCyGKi4slSbr55ps9p0yaNEnezSgQ8uneIT3jFxQUDBs2LCoqqqioyP91AQgNW7dudbvdVqu1qKiIb+QAALqLYhsgVCpVZGSky+VqaWlROgsAAAAA9K4NGzbYbLaysrKLFy+qVKrGxka5Xf724fz58zMyMgwGw/333y+3r127Nj8/32azXbhwYerUqZ4inBAiNze3srLSZDJlZ2fPnTtXbpQH9BS2PZ39jNOZffv2HThw4MKFC3FxcevWrZMbT5w4MXny5FmzZgkhZs6cOWHChEOHDnlO8ZnUv1mzZrXvLLdUV1dXVFTIexf5vy4Agw0r5gEA7Q3255IDsqampvr6+ujoaO9vRAIAAKBD7NmGHsGebb3Es2dbWlpadXW196HU1FSDwaDX68vLyzUaTftzJUlqaWmJi4vzbkxKSvIU5IQQKSkpdXV1Qohz586tWbPm+PHjVqs1PT29tLTU8wlDh7ugdTZOZyRJqqqqSktLE0I0NjaOGTPG03/+/PmLFy+eP3/+gQMHDh48+Morr3R1V/xpn9a7pbPXoYQ926C4/rNnG0IYe7YB6FWsbAOEEGLo0KGSJFksFqvVqnQWAAAAAOgBBoPBswZLfmEwGIQQDofDz1k+lTYhxPjx470fweqpeC1cuHDKlClnzpwxmUz79+/vbECbzeZ/nEC4XK6wsH9/grFt27acnByr1bply5YtW7YEPk4P8lwXAAAAQLENEEKI8PBw+Ystzc3NSmcBAAAAgF60YMGC/Px8IYTRaCwqKlq8eLH//jNnziwsLKyqqnK5XN7tBoNhwoQJQ4cOraio2Llzp/ehyMjIoqIiu91++PDhadOm+R/Hj927d1dVVTU1NW3dunXhwoWe9jFjxtx1111z5sy58847R44c6X1Kt/Zs664OrwsAAACg2Ab8k1qtFkJcu3bN6XQqnQUAACBkyfuaKJ3in/oyTP+5agxCWq3W+21+fr7JZNJqtWPHjn399de3b98ut8v/lnr2H/L0z8rKMhqNGRkZGo1mxowZeXl5cvuuXbsyMzM1Gk12dvaSJUuE17/n8lZnarW6sLBwz549/sfpkDzU0qVL58+fP2LECLPZ7NP/ySefPHbsWE5Ojs+JTqcz8Cc9eq7U+5I9LT4/O7suAAAAIDSfNg4E58qVK1arNTk5WS68AQAAoEMd7tmm1+uvXr0ayOl9sOlRW1tbbGxsPwnTXfHx8S0tLUqn6Avs2dZLPHu2KR2kdxUUFFy8eHHHjh1KBwkF7NkGxbFnG/oAe7YB6FWsbAP+LTExUQhhMpmUDgIAADDw1NTUeL+1WCyrV6/W6XR6vX7fvn2jRo3yPlpSUjJs2LCoqKiioiJP46pVq0aPHq1SqaZPn3706FG5UV5uUlBQ4NO/ra1txYoVarU6PT29srLSsyrFaDROnDhRpVLpdLqVK1e2tbV1mfzKlSuTJ09Wq9XLli1rbW31nre4uFgIUVxcLEnSzTff7DmlW8+pk0/3WdnW2XVpNBqz2dx+aREAb5IkZWVlPfvss0oHAaCwfvW/S1bMA8BgRrEN+Lf4+Pjw8HCHw+H5kAUAAADB2bBhg81mKysru3jxokqlamxs9D56+PDhyspK+YFsnsbc3NzKykqTyZSdnT137ly5UV52Vl1dXVFR4d1//fr1Go2mpqamtLT0rbfe8vRcu3Ztfn6+zWa7cOHC1KlT165d22XUffv2HThw4MKFC3FxcevWrZMbT5w4MXny5FmzZgkhZs6cOWHChEOHDnlOcbvdga+HmzVrVvvOnV2XfKPc/xLgFMBgw38jQMjT60iaeV0AACAASURBVPWBdOubPwcC+e6O6Ksw3Z0rPj6+V5MAAGQU24B/kyQpMTExKSkpOjpa6SwAAAADQ1pams+mR2lpaUKIV155ZevWrSkpKTExMd///vfr6+u9z8rNzVWpVPPmzbPb7XLLuXPnHnrooaSkJLVavXnzZrPZ7NN/6NCh3v1fffXV9evXDxkyRKVSPfzww56eb7zxxr333hsVFRUfHz9//vw//vGPXV5CZmbmsGHDNBrNpk2bPP0nT56s1+v/9Kc/CSEOHjx422233XHHHZ5TPvzwww8//LD7d8tX++sCBhudTie1o9PplM4FQGGsmO8MK+YBoH+i2AZ8hUaj0Wg04eHhSgcBAAAYGAwGg2d9ifzCYDAIIRwOh5+zIiIifFoWLlw4ZcqUM2fOmEym/fv3dzmv9wdG3l/uHj9+vNtLXV1d4NficrnCwv79V6Rt27bl5ORYrdYtW7Zs2bIl8HF6kM1mU2ReoM/U1ta626mtrVU6F4D+hRXzHqyYB4D+iWIbAAAAgJ63YMGC/Px8IYTRaCwqKlq8eLH//gaDYcKECUOHDq2oqNi5c2eX4y9atGjHjh0ul8tsNhcWFnraZ86cWVhYWFVV5XK5Aoy6e/fuqqqqpqamrVu3Lly40NM+ZsyYu+66a86cOXfeeefIkSO9T+nWN9C7KzIysqioyG63Hz58eNq0ab00CwAA/RAr5m8EK+YBQEEU2wAAAAD0AK1W6/02Pz/fZDJptdqxY8e+/vrr27dvl9s9H5/5/Ny1a1dmZqZGo8nOzl6yZImfnvLPvLy8mpqa5OTkKVOmzJkzxzNvVlaW0WjMyMjQaDQzZszIy8vzk1keaunSpfPnzx8xYoTZbPbp/+STTx47diwnJ8fnRKfTGfjXw30+NPR/H4QQ8hfS1Wp1YWHhnj17ApwFAIAQwIr5XsWKeQDoPRTbAAAAAPQAn8e+qVSq559/vq6urq6ubt++fXq9Xm73fpCR9+t58+ZdunSpra2tuLh4zJgxHfbxfh0bG7t79+7GxsYPP/zw/Pnzt99+uzx+eHj4k08++cUXX5hMpr/85S/Z2dl+Msuj3XrrrSdPnmxqatq9e3dsbKx3h0OHDj3++OPeu6rITp06Ffg30H2ej+f/Psi3wmazmc3mgwcP+qyoAwBgcGLFfNBYMQ8AfYNiGwAAAIABaePGjZIkxcXFvfjiiyUlJT0+viRJWVlZzz77bI+PDAAA/GPFvJ9ZWDEPAP2QxN6YAAAAALolLy/v6tWrzz33nNJBMLBlZWWlpaWtX79e6SChRqVSXb58OTk5ubsnyp/MDqBPCSRJsc80Bty98u/06dPz5s07f/680kEweA0fPvzQoUOedeoKstvtb7755lNPPVVeXt7jgxcUFFy8eHHHjh09PjICERYW1tLSolKplA4CIDSxsg0AAABAiNPpdFI7Op1O6VxAH/E8x9W/vikdtbW1Bd45Pj7ez9FuBe7WvF0KcGo/+Xs2D4Abx4p5AMCNoNgG+ONyuQJ/KjcAAAD6p9raWnc7PpvMASGspqbG+63FYlm9erVOp9Pr9fv27Rs1apT30ZKSkmHDhkVFRRUVFXkaV61aNXr0aJVKNX369KNHj8qNct26oKDAp39bW9uKFSvUanV6enplZaXnQWdGo3HixIkqlUqn061cubLLapNGozGbzZ4Cufeh4uJin0b57Y4dO+Lj448fP75nz574+Hg5kv95A98qqbW1denSpXFxcePGjSsrK/M+1OH96Sx/d+8DgL6xdetWt9tttVqLiop64xs5Plu0AgBCTITSAYD+y2QyNTQ0JCYmJiUlKZ0FAACgH/nggw+OHDmyb98+pYNgYHO5XNOnT1c6xWC0YcMGm81WVlYWFxf35ptvNjY2eh89fPhwZWXl22+/vWjRIpvNJjfm5uYWFBTY7fZjx47NnTu3paVFCOF2uyVJqq6urqioePfddz39169fr9FoampqHA5HYWGh+Nc6sLVr1+bn5/+///f/rFbrO++8s3bt2l/96ld+cjY2Nnb2oMhZs2bJs3ta5LdOp3Pv3r2zZ89eunTp3r175Uj+5w38g+/169fr9frGxsZr167t3r3b+1CH96ez/N29DwD6G51OV1dX59Oo1Wr5Hg8ADGbs2QZ0ymw2X716VaVSpaamKp0FAACgH9m0adMXX3zxs5/9TOkgGNg2bdo0YsSITZs2KR0k1Hj2bEtLS6uurvY+lJqaajAY9Hp9eXm5RqNpf64kSXa7PSIiQnjtiHbu3Lk1a9YcP37carWmp6eXlpZ6PknwLiZ5Xmu12rNnz8rjG41GrVYrtyclJXkX9lJSUtp/Wt0+j59PLXyOet76vAhi3g5pNJrz58/L19XQ0JCcnNyt++PRU3l6EHu2QXH9Z882hDD2bAPQq1jZBnQqLi5u2LBhMTExSgcBAADoX6KjoxMTE0eMGKF0EAxsiYmJ/LLdqwwGg/zCp+TjcDj8nCVX2rwtXLjwwQcf3LNnj0ajqa+v73IHOJ8FZ57X48ePf/vttwMM357NZouKigrixBuct7MwntcB3h9P/t7IAwx0jY2Nd911l88DY4GeFRkZef36dYptAHoJxTbAH/7yDwAAACDELFiwID8/f9u2bUaj8b333jt48ODvf/97P/0NBsOECROGDh1aUVHxhz/8ocvxFy1atGPHjs2bN7e1tcmPkZTNnDmzsLDw/vvvT01NDQsLaAv5yMjIoqKiBx544MiRI7m5uceOHQvkLB/+55U3bDt58mSX4zz44IO/+MUvNm3aZDQan3nmGU+7n/vTYf4g7gMQ8hITE3fv3n3bbbcpHQSh7LbbbouOjlY6BYCQRbENAAAAQLcVFRVVVFQonQIDW2Vl5U9+8hOlUwwKWq3W+21+fv7atWvlxlmzZm3fvl1ul9eUyMvgvF/v2rUrMzOzrq7u3nvv/eUvf5mbm9u+j/frvLy81atXJycnf+1rX3vppZc2btwoj5+VlfXMM89kZGQ0NTXdeeed//Vf/5Wdne0/+auvvrpo0aKoqKgZM2bs2bPH0+5Z/iK/8AkgvrqYz/+8TqczwIrX9u3bn3jiCbVa/fWvf/2ll1567rnn/N+fzvIHcR+AkBcWFjZs2DAWzaO3sXoSQO9hzzYAAAAA3XP27NnTp08rnQKh4D/+4z/GjBmjdIpQ49mzTekgwm63v/nmm0899VR5ebnSWeAPe7ZBcezZhj7Anm0AehUr2wAAAAB0z5gxYyiQAPBj48aN27Zti4qKmjVrVklJidJxAAwAy5cvpwqCXsWaEwC9ipVtAAAAAACEjv6zsg0DBSvboLji4uLW1lalUyD0zZs3LyKCxScAegV/uAAAAAAAAGXodLq6ujqfRq1WW1tbq0geAIqYNWuW0hEAALghFNsAAAAAAIAyKKoBAAAgBIQpHQAYMFpbW2tqanjyKgAAAAAAAAAA8KDYBgTE7XbX1dW1tLSYzWalswAAAAAAAAAAgP6CYhsQEEmSEhMThRBNTU1KZwEAAAAAAAAAAP0FxTYgUAkJCWFhYVar9fr160pnAQAAAIAeJkmSJElKp/invgzTf64aAAAAAxTFNiBQYWFhQ4cOFUKYTCalswAAAABAoPR6fSDd+maD6ra2tkC69eVu2YHPFR8f36tJAAAAMEBRbAO6ISEhQQjR2tpqt9uVzgIAAAAAAampqfF+a7FYVq9erdPp9Hr9vn37Ro0a5X20pKRk2LBhUVFRRUVFnsZVq1aNHj1apVJNnz796NGjcqO8+KygoMCnf1tb24oVK9RqdXp6emVlpWeNmtFonDhxokql0ul0K1euDKTqduXKlcmTJ6vV6mXLlrW2tnrPW1xcLIQoLi6WJOnmm2/2nDJp0qRJkyYFeGfk031WtnV2XRqNxmw2S/8S4BQAAAAYDCi2Ad0QFRWlUqncbjeL2wAAAAAMUBs2bLDZbGVlZRcvXlSpVI2Njd5HDx8+XFlZ+eqrry5atMjTmJubW1lZaTKZsrOz586dKzfKC8Kqq6srKiq8+69fv16j0dTU1JSWlr711luenmvXrs3Pz7fZbBcuXJg6deratWu7jLpv374DBw5cuHAhLi5u3bp1cuOJEycmT548a9YsIcTMmTMnTJhw6NAhzylutzvwlWqzZs1q37mz65JvlPtfApwCAAAAg4HEL4hAt1y/fr2qqkqSpOHDh4eHhysdBwAAAAC+QqVSXb58OTk5OS0trbq62vtQamqqwWDQ6/Xl5eUajab9uZIk2e32iIgI+bX8icG5c+fWrFlz/Phxq9Wanp5eWlrq+STB08f7tVarPXv2rDy+0WjUarVye1JSkndhLyUlpa6uzs+FSJJUVVWVlpYmhGhsbBwzZoyn//z58xcvXjx//vwDBw4cPHjwlVdeCe5etb8KP9fVYc/QcPr06Xnz5p0/f17pIAAAAAMVK9uA7omJiYmOjmZxGwAAAIB+zmAweNZgyS8MBoMQwuFw+DlLrrR5W7hw4ZQpU86cOWMymfbv39/lvN6PWPQuTY0fP97txX+lzYfL5QoL+/cnGNu2bcvJybFarVu2bNmyZUvg4/Qgm82myLwAAADohyi2Ad2mVquFEM3NzS6XS+ksAAAAANA9CxYsyM/PF0IYjcaioqLFixf7728wGCZMmDB06NCKioqdO3d2Of6iRYt27NjhcrnMZnNhYaGnfebMmYWFhVVVVYH/TWr37t1VVVVNTU1bt25duHChp33MmDF33XXXnDlz7rzzzpEjR3qf0q0927orMjKyqKjIbrcfPnx42rRpvTQLAAAABhyKbUC3xcXFRUZGOp3OlpYWpbMAAAAAQBe0Wq332/z8fJPJpNVqx44d+/rrr2/fvl1ul1ektf+5a9euzMxMjUaTnZ29ZMkSPz3ln3l5eTU1NcnJyVOmTJkzZ45n3qysLKPRmJGRodFoZsyYkZeX5yezPNTSpUvnz58/YsQIs9ns0//JJ588duxYTk6Oz4lOpzPwJz1KkuRJ7lmQ19l1CSHkLdzUanVhYeGePXsCnAUAAAAhLzSfNg70NpPJZDQaIyMjb731VqWzAAAAAMC/efZsUzqIsNvtb7755lNPPVVeXt7jgxcUFFy8eHHHjh09PvIgxJ5tAAAAN4iVbUAwEhISwsPD7Xa72WxWOgsAAAAA9C8bN26UJCkuLu7FF18sKSnp8fElScrKynr22Wd7fGQAAAAgCBTbgGBIkpSQkCCEaGpqUjoLAAAAAPQvW7dudbvdVqu1qKhIp9P1+Pjuf+nxkQEAAIAgUGwDgpSYmChJksViuX79utJZAAAAAGBA0ul0Uju9UZ8DAAAAek+E0gGAgSo8PHzo0KHNzc1NTU0xMTFKxwEAAACAgae2tlbpCAAAAMCNotgGBE+tVjc3N7e2ttpstqioKKXjAAAAAIBwu93Hjx+Xn3sPBOLixYsOh0PpFAAAAAOYxCPOgRtx9epVs9mckJCg1WqVzgIAAAAAIiIiIioqSpIkpYNgwHC5XBERES0tLUoHAQAAGKhY2QbcELVabTabr127lpSUFB4ernQcAAAAAIPdkCFDLl++nJycrHQQDBinT5+eN2+e0ikAAAAGMIptwA2Jjo5WqVTR0dF8bxQAAAAAAAAAgEGIYhtwo1JTU5WOAAAAAAAAAAAAlEGxDQAAAACAkDJy5EievYHAOZ3OlJQUpVMAAAAMYBTbAAAAAAAIHQaDwe12K50CA0xYWJjSEQAAAAYwiV/BAQAAAAAAAAAAgODwxSUAAAAAAAAAAAAgSBTbAAAAAAAAAAAAgCBRbAMAAAAAAAAAAACCRLEN6GFOp9NmsymdAgAAAAAAAAAA9AWKbUBPMpvNX3zxRV1dndJBAAAAAAAAAABAX6DYBvSk6Oho+YXL5VI2CQAAAAAAAAAA6AOS2+1WOgMQUhwOR0REhNIpAAAAAAAAAABAX6DYBgAAAAAAAAAAAASJx0gCAAAAAAAAAAAAQaLYBgAAAAAAAAAAAASJYhsAAAAAAAAAAAAQJIptAAAAAAAAAAAAQJAotgEAAAAAAAAAAABBotgG9Dq32610BAAAAAAAAAAA0CsotgG9yGKxfPnll0ajUekgAAAAAAAAAACgV1BsA3qXxWK5du2a3W5XOggAAAAAAAAAAOh5FNuAXhQdHR0bG+t2u5uampTOAgAAAAAAAAAAeh7FNqB3aTQaIcS1a9ccDofSWQAAAAAAAAAAQA+j2Ab0rpiYmJiYGBa3AQAAAAAAAAAQkii2Ab1OXtzW3NzM4jYAAAAAAAAAAEIMxTag18XGxsqL20wmk9JZAAAAAAAAAABAT6LYBvQFtVothGhubnY6nUpnAQAAAAAAAAAAPYZiG9AXVCrVkCFDXC4Xi9sAAAAAAAAAAAglFNuAPpKcnCyEMJlMLG4DAAAAAAAAACBkUGwD+oi8c5vL5WpqalI6CwAAAAAAAAAA6BkU24C+o9FohBAmk8nhcCidBQAAAAAAAAAA9ACKbUDfkRe3ud1uFrcBAAAAAAAAABAaKLYBfSopKUkI0dzczOI2AAAAAAAAAABCAMU2oE/FxMTExsayuA0AAAAAAAAAgNBAsQ3oa57FbXa7XeksAAAAAAAAAADghlBsA/padHQ0i9sAAAAAAAAAAAgNFNsABciL265du8biNgAAAAAAAAAABjSKbYAC5MVtYWFhFNsAAAAAAAAAABjQJLfbrXQGYDByOBxhYWFhYRS8AQAAAAAAAAAYwCi2AQAAAAAAAAAAAEFiVQ0AAAAAAAAAAAAQJIptAAAAAAAAAAAAQJAotgEAAAAAAAAAAABBotgGAAAAAAAAAAAABIliGwAAAAAAAAAAABAkim1Af+FwOJSOAAAAAAAAAAAAuodiG9AvNDQ0XLp0qbW1VekgAAAAAAAAAACgGyi2Af2F2+2m2AYAAAAAAAAAwMAiud1upTMAEC6Xy2q1xsTEKB0EAAAAAAAAAAB0A8U2AAAAAAAAAAAAIEg8RhIAAAAAAAAAAAAIEsU2AAAAAAAAAAAAIEgU2wAAAAAAAAAAAIAgUWwDAAAAAAAAAAAAgkSxDQAAAAAAAAAAAAgSxTag/3K5XEpHAAAAAAAAAAAA/kQoHQBAB6xWa11dXXh4eGpqqtJZAAAAAAAAAABAp1jZBvRHYWFhVqu1tbW1ra1N6SwAAAAAAAAAAKBTFNuA/igyMjIhIUEIUV9fr3QWAAAAAAAAAADQKYptQD+l0Wjk9W0tLS1KZwEAAAAAAAAAAB2j2Ab0U+Hh4Wq1WgjR0NDgdruVjgMAAAAAAAAAADpAsQ3ovxITEyMiIux2e3Nzs9JZAAAAAAAAAABAByi2Af1XWFhYUlKSEKKhocHpdCodBwAAAAAAAAAA+KLYBvRrQ4cOjY6OdrlcjY2NSmcBAAAAAAAAAAC+KLYB/V1ycrIQorm52WazKZ0FAAAAAAAAAAB8BcU2oL+LiYmJi4tzu9319fVKZwEAAAAAAAAAAF9BsQ0YAJKTkyVJam1tbWtrUzoLAAAAAAAAAAD4N4ptwAAQGRmZkJAghDAajW63W+k4AAAAAAAAAADgnyi2AQNDUlJSeHi4zWa7du2a0lkAAAAAAAAAAMA/UWwDBoawsDCNRiOEaGhocLlcSscBAAAAAAAAAABCUGwDBpCEhITIyEin09nU1KR0FgAAAAAAAAAAIATFNmAAkSQpOTlZCNHU1ORwOJSOAwAAAAAAAAAAKLYBA0pcXFxsbKzb7TYajUpnAQAAAAAAAAAAFNuAgSY5OVmSJLPZbLFYlM4CAAAAAAAAAMBgF6F0AADdM2TIELVaHR4ePmTIEKWzAAAAAAAAAAAw2Elut1vpDAAAAAAAAAAAAMCAxGMkAQAAAAAAAAAAgCBRbAMAAAAAAAAAAACCRLENAAAAAAAAAAAACBLFNgAAAAAAAAAAACBIFNsAAAAAAAAAAACAIFFsAwAAAAAAAAAAAIJEsQ0Y8JxOZ01NjdFoVDoIAAAAAAAAAACDDsU2YMCzWq0tLS3Nzc0Oh0PpLAAAAAAAAAAADC6S2+1WOgOAG9XY2KhSqYYMGaJ0EAAAAAAAAAAABheKbQAAAAAAAAAAAECQeIwkAAAAAAAAAAAAECSKbQAAAAAAAAAAAECQKLYBAAAAAAAAAAAAQaLYBgAAAAAAAAAAAASJYhsAAAAAAAAAAAAQJIptQGhyuVwOh0PpFAAAAAAAAAAAhDiKbUAIslgsV65cqa2tVToIAAAAAAAAAAAhjmIbEIIiIiKcTmdbW9u1a9eUzgIAAAAAAAAAQCij2AaEoIiIiKSkJCFEfX290+lUOg4AAAAAAAAAACGLYhsQmhITE6Ojo51Op9FoVDoLAAAAAAAAAAAhi2IbELK0Wq0kSS0tLW1tbUpnAQAAAAAAAAAgNFFsA0LWkCFDEhIShBB1dXUul0vpOAAAAAAAAAAAhCCKbUAoS0pKioiIsNvtDQ0NSmcBAAAAAAAAACAEUWwDQllYWJhOpxNCmEwmHiYJAAAAAAAAAECPo9gGhLjY2FgeJgkAAAAAAAAAQC+h2AaEvuTkZB4mCQAAAAAAAABAb6DYBoQ+74dJXr9+Xek4AAAAAAAAAACEDoptwKAQGxs7dOhQIURdXZ3b7VY6DgAAAAAAAAAAIYJiGzBYyA+TtNlsjY2NSmcBAAAAAAAAACBEUGwDBovw8HCtViuEaGpqslgsSscBAAAAAAAAACAUUGwDBhGVSpWQkOB2u2tqalwul9JxAAAAAAAAAAAY8Ci2AYNLcnJyZGSk3W43Go1KZwEAAAAAAAAAYMCj2AYMLmFhYTqdTghx7dq11tZWpeMAAAAAAAAAADCwRSgdAEBfi4mJUavVNpstOjpa6SwAAAAAAAAAAAxsktvtVjoDgL7mdrslSVI6BQAAAAAAAAAAAx7FNgAAAAAAAAAAACBI7NkGAAAAAAAAAAAABIliGwAAAAAAAAAAABAkim0AAAAAAAAAAABAkCi2AQAAAAAAAAAAAEGi2AbgnxwOh9PpVDoFAAAAAAAAAAADCcU2AEII0dbWduXKlZqaGrfbrXQWAAAAAAAAAAAGDIptAIQQIjIy0u12u1wul8uldBYAAAAAAAAAAAYMiVUsAGQWi2XIkCGSJCkdBAAAAAAAAACAAYNiGwAAAAAAAAAAABAkHiMJAAAAAAAAAAAABIliGwAAAAAAAAAAQAfOnDnzxBNPjBkzJi4uTqVSjR49+vHHHz9z5oxPNykAnXVWqVRjx45ds2ZNTU1N+wDXr1/Pz8+/6667EhMTIyIikpKS7r777o0bN3722WfBXZF3mG7FDjCJ58RHHnmk/eyPPPJI+5EDYTabb7nlliBO7Bs8RhIAAAAAAAAAAMDXz3/+840bNzqdTp/28PDwbdu2rVu3ztMSSAXIU47prLNOpztx4sTw4cM9LXV1dffdd195ebn/AbtFnl0+N/DYgSeRx5QkaciQIVevXk1MTPQcMplMer3earXK/buVf9WqVb/5zW9sNlt3T+wbrGwDAAAAAAAAAAD4iueeey47O9vlcmVmZn7wwQctLS2tra0nT55cvny5y+Vav379zp07PZ3dX+Wnsf0pdXV1r7322ogRI2pra5966invPuvWrSsvL09LS9u7d++XX35ptVpNJtOJEye2bdt2xx133Pg1Bh67u0nuu+8+i8Xy8ssvezf+3//9n8VimTp1andznjhx4vnnn/eubvY3rGwD4I/D4XC5XFFRUUoHAQAAAAAAAIA+8uWXX9522202m+23v/3tD3/4Q5+je/fuXbZsWVRU1IULF4YNG9b+dO/VYwEeff/996dMmaLVamtraz2NSUlJjY2NJ06cmDx58g1eUSDZ/BwKPIk8yMsvv/zwww+np6efOnXKcyg9Pf2TTz555ZVXHnrooc4mas9ms40bN85ut//jH/+IiYkJ/MS+xMo2AJ2yWq1ffvlldXV1+4XSAAAAAAAAABCqXnjhBZvNtmDBgvaVNiHED3/4w+9973s2m+2FF17oqRm/9a1vCSGam5u9G1tbW4UQI0eO7PL0Djcz68EdzgJPIps/f75Go/n4448//fRTueWTTz755JNPNBrNvHnzujX1tm3bKioqfv3rX0dHR3frxL5EsQ1ApyIiIsLCwux2e3V1dT/8sgAAAAAAAAAA9IZ33nlHCLFixYrOOsiHjhw50lMzfvzxx0IIn3Vy48aNE0JkZmaeP3++pyYKTneTDBky5JFHHhFC7NmzR26RXyxevHjIkCGBz1tRUZGbm7t48eIgHj7Zl3iMJAB/bDZbVVWV0+lUqVR6vb6nvgcBAAAAAAAAAP2WRqNpampqaGjQaDQddqivr09JSUlKSqqvr29/tFuPkayvry8tLV2zZs2lS5dycnI2b97s6VlaWvqd73zHYrEIIUaMGPHtb3/7m9/85j333HPvvfeGh4d3OWPgjV0eCiLJZ5999u1vf1utVldXVwsh9Hq9yWT67LPP7rjjDv/3x8Plck2ZMqWysvLs2bMpKSn+EyqLYhuALlit1qqqKpfLFRcXp9frlY4DAAAAAAAAAL0rMjLS4XDY7faIiIgOO9jt9qioqIiICLvd3v5oIMW29h566KHf/e53kZGR3o1nz57dtm3ba6+91tLS4mkcNmzYs88++73vfS/Aywkwm//YASbxHmTixIkfffTRyy+/7Ha7H3nkkYkTJ548ebLLiTwKCgqysrIKCwszMzMDSaggim0AutbW1iY/SVKtVicnJysdBwAAAAAAAAB6UR+sbPMxbNiwP//5z/LTGttzOp1lZWXl5eUnT54sLi4+d+6cJElFRUX//d//HeglBZAtkFJWl0m8B3nhhRcef/zxqVOnut3ukpKSF1544cc//nGAE125cmXs2LHjxo3729/+5rljFNsADGwtLS01NTVCCOptAAAAAAAAAELbpEmTPvzww7fffnv69Okddnj77bdnzJgxadKkDz74BtHWxgAADYNJREFUoP3RwB8jabfbv/jii61bt7744ospKSmnT5/W6XT+s7lcro0bN+bl5aWnp586dapb1+U/W3dLWR0m8R6kubk5NTX1+vXrQoiYmJirV68OHTo0wIlmz5595MiRTz/99Bvf+EbQCftMmNIBAAwM8fHxWq1WCNHU1GQ0GpWOAwAAAAAAAAC9Zdq0aUKI3bt3d9ZBPiR3uxGRkZGjRo3at2/fjBkzjEbjxo0buzwlLCxs/fr1Qojy8vIbnP0GdZkkISFhwYIFbrfb7XZ///vflyttASouLrbZbLfffrvkRT7k/bqfoNgGIFAJCQlyvc1kMtXV1fXDrw8AAAAAAAAAwI177LHHIiMj//jHP7700kvtj7744osHDhyIiop67LHHemQ6SZJ27twZERHxu9/97vPPP++y//nz54UQcXFxPTL7jegyiWe7Nc+LkESxDUA3eOptzc3N1dXVTqdT6UQAAAAAAAAA0MO+9rWv5ebmCiEeffTRH/3oRx9++GFbW9v169c/+uijH//4x0uXLhVC5OXl3XzzzT0146hRo5YtW+ZwOLwXt40dO3bjxo1/+ctfvvzyS6vVarFYvvjii+eff17eIG3mzJmenh0u9urBFWCBJ/Fxzz33yCvbMjIyujWjuyPeh27kcnoce7YB6LbW1taamhqXyxUZGZmamhoVFaV0IgAAAAAAAADoYVu3bs3JyXG5XD7tYWFhTz/99IYNGzo7MfA927xVV1ffdtttFovl5MmTEyZM8PTs0De+8Y2SkpKbbrrJz5iBNwZ4KOgkgU/kX7/ds41iG4Bg2Gy26upqu90uSZJardZoNP3tIbkAAAAAAAAAcIPKy8v/93//99133zUYDG63e9iwYffdd9+qVavGjh3r56zgim1CiOzs7J///OfTpk175513hBAVFRWvvfbasWPHysvL5Z19kpKSxo4d+93vfnf58uXR0dH+x+zBYtsNJgl8Iv8otgEINU6ns6ampq2tTQgRERERFxcXHh6u0WiUzgUAAAAAAAAAQN+h2AbghrS0tNTX1zscDvltWlpabGysspEAAAAAAAAAAOgzFNsA3Ci32202my0Wi9vtjouLo9gGAAAAAAAAABg8KLYBAAAAAAAAAAAAQQpTOgAAAAAAAAAAAAAwUFFsAwAAAAAAAAAAAIJEsQ0AAAAAAAAAAAAIEsU2AAAAAAAAAAAAIEgU2wAAAAAAAAAAAIAgUWwDAAAAAAAAAAD4CkmS5J+dEUK4XK7f/va3GRkZOp0uKirq1ltvXbp06fvvv+8ZYfbs2R0OPnv2bHkEj7/85S8PPPBASkpKZGTkTTfd9L3vfe/IkSOeGIrr1rUMQhTbAAAAAAAAAAAAOuD20v7tqlWrDhw4sH379nPnzpnN5rfffnvSpEn/8z//4zn9s88++/TTT33G/PTTTz/77DPvlpycnA0bNjz22GOff/75tWvXioqKnE7n9OnTe//6uiHAaxkkfOqLkvwvBAAAAAAAAAAAAGSS5FtAad8SFxd3+fLlpKSkzkb41a9+9de//nX//v3e7d///vfvu+++J554Qh7t7bffXrdu3YkTJ2JiYry7bdmyJScnp/2kigjwWgYPn38urGwDAAAAAAAAAADottTU1OPHj/vpsHz58lOnTlVWVnpazp49+/HHHy9fvtzTUlBQkJOT41NpE0Lk5OTIL15++eX09PTo6GidTveDH/ygoaHB08dgMKxcuTI+Pn748OHr1q2zWCxyuyRJfs76zW9+M3z48KioqJEjR+7atct7kdaf//zncePGDRky5NZbb92zZ093ryXoSJ2dFVxaea6JEyfGxsbGxcVNnz69rKzs8OHDd999t0qlSk5Ofvjhh71n9z9O+8w+jxgVFNsAAAAAAAAAAACC8Otf/3rFihVTpkzZsGHDSy+9dPnyZZ8OUVFRGzduzM3N9bTk5uY+9dRTkZGRnpa///3vGRkZfmbZunVrfn5+fX39J5984nK5Vq1a5Tl09913jx8//urVq0ePHr18+fLmzZu7POvNN9/Mzc3dt29fY2NjYWGhd7b333//0UcfXbdundFo3L9//7Zt2w4fPtytawkukp+zgk779NNP5+Xl1dXVnT9/Pi0t7T//8z9/+tOfbt68uba2tqysLCoqKisrK5BxOszs80xRwWMkAQAAAAAAAAAAfATyGEkhRFtb21//+tcPPvigvLz86NGjEyZM+N3vfnfTTTd5+judzjvuuOPQoUO33nrrpUuXZs+e/Y9//CM8PNwzWmRk5PXr1yMiIjqL8fHHH48bN05+W1dXd/vtt9fX17fv2dTUNGHChAsXLvg/65577lm3bt0DDzwgH3rjjTfmzp0rJ5k+ffqPf/zjBQsWyIc++OCDlStXfvjhh4FfS3CR/JwVdNqPPvpo/Pjx8iGj0ajVak+dOpWenu5p+cY3viHP7n+czjL7XDLFNgAAAAAAAAAAgK8IsNjmzWKxrF69ura29rXXXvPu//LLL7/33nvPP//8448/fs899zz00EPeR1NSUs6cOZOcnNxZDKfTGRYW5t0in9jY2Pizn/3s0KFD1dXVVqtVCBEeHu5wOPyfpdFoLl68mJiYKLc3NTVpNBpPEp/ql/eAgVxLcJH8nBV02vZzdTZ7d8f551I29mwDAAAAAAAAAADoWdHR0Xl5eSUlJT7tDz744MmTJ0+dOvXRRx8tWrTI5+idd9557NgxP8N6F3u8LVmyxOFwvPXWWyaTye12m81mp9PZ5Vl+mM3mlpYWtxe55hT4tQQXyf9ZwaVtP1dns3d3nA5RbAMAAAAAAAAAAOi2rKwsn7JQdXV1fHy8T7ewsLANGzZ85zvf2bBhQ/vizcqVK59++unr16/7tD/99NP+Zz927FheXt6oUaOio6OFEO+++24gmb/5zW++9957nrfvv/++5/X48eNPnTrl/3T/1xJcJD9n3WDaQAQ3TkRExFfqiDeeAwAAAAAAAAAAYLApKCiYOHHia6+91tzcfO3atZKSkocffnjVqlXte86fP7+hoWHevHntD91///2zZs3KyMg4dOhQc3OzxWL5+9///t3vfjcnJ8f/7N/61reeeeaZxsZGk8n0xz/+8Uc/+lEgmdetW5eVlVVaWtra2lpaWpqVleU5tHnz5p/+9KfHjh0zm82tra3vvvvu7Nmzu3UtwUXyc9aNp+1ScON87WtfO3LkiMvlkt+yZxsAAAAAAAAAAMBXBLJn2/HjxwsLC0tKSgwGQ0xMzDe/+c0VK1b88Ic/7Ky/n9EOHz5cUFBw8uTJ5ubmpKSku++++4knnpg6daqfGJcuXVq1alVpaanFYhkzZsyaNWseffTRDncU82nZtWtXbm5udXX1LbfcsnLlynXr1sk7pQkh/va3v23evPnkyZMul2vy5MkbN26cOnVq4NcSXCQ/Z/VUWv8tQYzzpz/96ac//emVK1ecTqfb7abYBgAAAAAAAAAAMBidOHFi2bJlZ86cUTpIQPptWh4jCQAAAAAAAAAAMFj84Ac/KCsra2tr++CDDx577LFly5YpncifAZE2QukAAAAAAAAAAAAA6CPTpk176KGHLl68eMstt6xYsWL16tVKJ/JnQKTlMZIAAAAAAAAAAABAkHiMJAAAAAAAAAAAABAkim0AAAAAAAAAAABAkCi2AQAAAAAAAAAAAEGi2AYAAAAAAAAAANCpy5cvf/nll/Jrs9l86dIl+bXVam1oaPB0a25uvn79uveJ3p0bGhquXLniM7JnBKvVWlVVVVVV1dLS0ivXgN4UvmnTJqUzAAAAAAAAAAAA9Ed//vOf3/n/7d2/S6pRHMfxY12hcghEidRaRI1SCoIgIkmIoEkRBRFcJKSaHFKC4HHsHwiEcAyiJZpckhRskqZGi2iQIyYI6qDbcwfhQbg/iG5kF96v+XO+fL884+F8n9vbYrFYrVbn5+cPDw+bzWalUjGbzScnJ5eXl5FIRAjR7XZ9Pt/MzMzi4uLgYL1e18JCiNPT01qt9vj4uLa2Ngg8PT1pFe7v7zOZzNvbm8FgmJubG9Ww+Bidqqqj7gEAAAAAAAAAAOD76nQ6BwcH6+vrS0tLPp8vGAxeX18LIQKBwM3NjRBCURSj0Wiz2UKh0ODI2dmZFl5YWIhGo263e3t7u1AoDFceVCiVSldXV36/f2dnZ2yMrYT/GT4YAAAAAAAAAADAH6mqmk6nU6lUs9k0m82/BkqlksvlMplMQoiXl5eHh4derzcc3tzczGazuVzu+flZCwxXcDqd4XBYSplMJr9gInyuH6NuAAAAAAAAAAAA4Ps6OjoKh8MrKyuVSkVK6Xa7dTrdcODu7q7ValWr1fHx8enp6UajYbfbrVarFt7d3XU6nf1+f3V1VUr5+vpqt9snJye1ChaLxWKxCCH8fv9Xj4d/xhpJAAAAAAAAAACA3zs/P89msxsbGw6HIxaL7e/vz87OLi8vBwIBRVHy+XwikTg+PhZCXFxcTExMaGskW62WFvZ6vblcTkq5t7fn9Xq1gFbB4/GUy2Up5dbWVjweH9m0+BAu2wAAAAAAAAAAAN5FVdV+vz/8KO2d4W63azAY/vI/tna7PTU1pdfrP61XfBUu2wAAAAAAAAAAAIAP+gk0sgeQB2xQnwAAAABJRU5ErkJggg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5JVFNNQ2hhbmdlQ0lQQWxsb2NhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+YWRtaW48L0dyb3VwPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWRtaW4gb2YgdGhlIENJUCBtYXRyaXguPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPkNhdGVnb3J5ICZsdDstJmd0OyBJbXBhY3QgJmx0Oy0mZ3Q7IFByaW9yaXR5PC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkFkbWluPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPE5hdkJhck1vZHVsZT4KICAgICAgICAgICAgICAgICAgICA8TW9kdWxlPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpOYXZCYXI6Ok1vZHVsZUFkbWluPC9Nb2R1bGU+CiAgICAgICAgICAgICAgICAgICAgPE5hbWUgVHJhbnNsYXRhYmxlPSIxIj5DYXRlZ29yeSAmbHQ7LSZndDsgSW1wYWN0ICZsdDstJmd0OyBQcmlvcml0eTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+U3lzdGVtPC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8UHJpbz40MzE8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhck1vZHVsZT4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5JVFNNLlRhYmxlLmNzczwvQ1NTPgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5hZG1pbjwvR3JvdXA+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5DcmVhdGUgYW5kIG1hbmFnZSBJVFNNIENoYW5nZSBNYW5hZ2VtZW50IG5vdGlmaWNhdGlvbnMuPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPklUU00gQ2hhbmdlIG5vdGlmaWNhdGlvbiBydWxlczwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5BZG1pbjwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJNb2R1bGU+CiAgICAgICAgICAgICAgICAgICAgPE1vZHVsZT5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyOjpNb2R1bGVBZG1pbjwvTW9kdWxlPgogICAgICAgICAgICAgICAgICAgIDxOYW1lIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBOb3RpZmljYXRpb25zPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz5TeXN0ZW08L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjQwNjwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyTW9kdWxlPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkNvcmUuQWdlbnQuQWRtaW4uTm90aWZpY2F0aW9uRXZlbnQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPEphdmFTY3JpcHQ+SVRTTS5BZ2VudC5DaGFuZ2VNYW5hZ2VtZW50Lk5vdGlmaWNhdGlvbkV2ZW50LmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FkbWluSVRTTVN0YXRlTWFjaGluZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5hZG1pbjwvR3JvdXA+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BZG1pbiBvZiB0aGUgc3RhdGUgbWFjaGluZS48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+U3RhdGUgTWFjaGluZTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5BZG1pbjwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJNb2R1bGU+CiAgICAgICAgICAgICAgICAgICAgPE1vZHVsZT5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyOjpNb2R1bGVBZG1pbjwvTW9kdWxlPgogICAgICAgICAgICAgICAgICAgIDxOYW1lIFRyYW5zbGF0YWJsZT0iMSI+U3RhdGUgTWFjaGluZTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+U3lzdGVtPC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8UHJpbz40MzM8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhck1vZHVsZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ0FCTWVtYmVyU2VhcmNoIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2U8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb29rdXAgb2YgQ0FCIG1lbWJlcnMgZm9yIGF1dG9jb21wbGV0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5DQUIgTWVtYmVyIFNlYXJjaDwvVGl0bGU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTUNoYW5nZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tY2hhbmdlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+T3ZlcnZpZXcgb3ZlciBhbGwgQ2hhbmdlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5JVFNNIENoYW5nZXM8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5DaGFuZ2UgYXJlYS48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBDaGFuZ2VzPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPk1lbnU8L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPkl0ZW1BcmVhPC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRJVFNNQ2hhbmdlPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+SVRTTSBDaGFuZ2U8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjM0MDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q2hhbmdlIE92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWUgVHJhbnNsYXRhYmxlPSIxIj5PdmVydmlldzwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRJVFNNQ2hhbmdlPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPklUU00gQ2hhbmdlPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4xMDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5JVFNNLkFnZW50LkRlZmF1bHQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ2hhbmdlQWRkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2UtbWFuYWdlcjwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkFkZCBhIGNoYW5nZS48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+QWRkPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPklUU00gQ2hhbmdlPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5OZXc8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lIFRyYW5zbGF0YWJsZT0iMSI+TmV3PC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudElUU01DaGFuZ2VBZGQ8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+SVRTTSBDaGFuZ2U8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjIwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZS1idWlsZGVyPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2UtbWFuYWdlcjwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkFkZCBhIGNoYW5nZSBmcm9tIHRlbXBsYXRlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5BZGQgZnJvbSB0ZW1wbGF0ZTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5JVFNNIENoYW5nZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TmV3IChmcm9tIHRlbXBsYXRlKTwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWUgVHJhbnNsYXRhYmxlPSIxIj5OZXcgKGZyb20gdGVtcGxhdGUpPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGU8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+SVRTTSBDaGFuZ2U8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjI1MDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01DaGFuZ2VDQUJUZW1wbGF0ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tY2hhbmdlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBDaGFuZ2UgQ0FCIFRlbXBsYXRlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+Q2hhbmdlIENBQiBUZW1wbGF0ZXM8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTUNoYW5nZUNvbmRpdGlvbiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tY2hhbmdlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBDaGFuZ2UgQ29uZGl0aW9uIE92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5Db25kaXRpb24gT3ZlcnZpZXc8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPklUU00gQ2hhbmdlIENvbmRpdGlvbiBFZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5Db25kaXRpb24gRWRpdDwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5JVFNNIENoYW5nZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5JVFNNLlRhYmxlLmNzczwvQ1NTPgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTUNoYW5nZUVkaXQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkVkaXQgYSBjaGFuZ2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPkVkaXQ8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTUNoYW5nZURlbGV0ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tY2hhbmdlLW1hbmFnZXI8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWxldGUgYSBjaGFuZ2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPkRlbGV0ZTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5JVFNNIENoYW5nZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tY2hhbmdlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q2hhbmdlIEhpc3RvcnkuPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPkhpc3Rvcnk8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2U8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZXRhaWxzIG9mIGEgY2hhbmdlIGhpc3RvcnkgZW50cnkuPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPkhpc3RvcnkgWm9vbTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5JVFNNIENoYW5nZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2U8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5DaGFuZ2UgSW52b2x2ZWQgUGVyc29ucy48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+SW52b2x2ZWQgUGVyc29uczwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5JVFNNIENoYW5nZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ2hhbmdlTWFuYWdlciIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tY2hhbmdlLW1hbmFnZXI8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5JVFNNIENoYW5nZSBNYW5hZ2VyIE92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5JVFNNIENoYW5nZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPklUU00gQ2hhbmdlPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5JVFNNLkFnZW50LkRlZmF1bHQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ2hhbmdlTXlDQUIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPklUU00gTXlDQUIgT3ZlcnZpZXcuPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPklUU00gQ2hhbmdlPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBDaGFuZ2U8L1RpdGxlPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPklUU00uQWdlbnQuRGVmYXVsdC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01DaGFuZ2VNeUNoYW5nZXMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZS1idWlsZGVyPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2UtbWFuYWdlcjwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPklUU00gTXlDaGFuZ2VzIE92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5JVFNNIENoYW5nZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPklUU00gQ2hhbmdlPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5JVFNNLkFnZW50LkRlZmF1bHQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ2hhbmdlTXlXb3JrT3JkZXJzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2U8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5JVFNNIE15V29ya29yZGVycyBPdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5JVFNNIENoYW5nZTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+SVRTTS5BZ2VudC5EZWZhdWx0LmNzczwvQ1NTPgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTUNoYW5nZVBJUiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tY2hhbmdlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBDaGFuZ2UgUElSIE92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5JVFNNIENoYW5nZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPklUU00gQ2hhbmdlPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldyk8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lIFRyYW5zbGF0YWJsZT0iMSI+UElSPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudElUU01DaGFuZ2VQSVI8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+SVRTTSBDaGFuZ2U8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjQwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPklUU00uQWdlbnQuRGVmYXVsdC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01DaGFuZ2VQcmludCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tY2hhbmdlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q2hhbmdlIFByaW50LjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5QcmludDwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5JVFNNIENoYW5nZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ2hhbmdlUFNBIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2U8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Qcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHkgKFBTQSkgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb2YgYXBwcm92ZWQgY2hhbmdlcyBhbmQgdGhlaXIgc2VydmljZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPklUU00gQ2hhbmdlPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+UFNBPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZSBUcmFuc2xhdGFibGU9IjEiPlByb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRJVFNNQ2hhbmdlUFNBPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPklUU00gQ2hhbmdlPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4zNTA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5JVFNNLkFnZW50LkRlZmF1bHQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ2hhbmdlUmVzZXQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZS1idWlsZGVyPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVzZXQgYSBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5SZXNldDwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5JVFNNIENoYW5nZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ2hhbmdlU2NoZWR1bGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZvcndhcmQgc2NoZWR1bGUgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb3ZlciBhcHByb3ZlZCBjaGFuZ2VzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5JVFNNIENoYW5nZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPkNoYW5nZSBTY2hlZHVsZTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNoYW5nZSBTY2hlZHVsZTwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWUgVHJhbnNsYXRhYmxlPSIxIj5TY2hlZHVsZTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRJVFNNQ2hhbmdlU2NoZWR1bGU8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+SVRTTSBDaGFuZ2U8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjMwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01DaGFuZ2VTZWFyY2giIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNlYXJjaCBDaGFuZ2VzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5TZWFyY2g8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNlYXJjaCBDaGFuZ2VzPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZSBUcmFuc2xhdGFibGU9IjEiPlNlYXJjaDwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRJVFNNQ2hhbmdlU2VhcmNoPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxMaW5rT3B0aW9uPm9uY2xpY2s9IklUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5TZWFyY2guT3BlblNlYXJjaERpYWxvZygnQWdlbnRJVFNNQ2hhbmdlU2VhcmNoJyk7IGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IH0gZWxzZSB7IHdpbmRvdy5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOyB9IHJldHVybiBmYWxzZTsiPC9MaW5rT3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+SVRTTSBDaGFuZ2U8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz42MDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRlbXBsYXRlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5UZW1wbGF0ZTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5JVFNNIENoYW5nZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vdmUgVGltZSBTbG90LjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5UaW1lIFNsb3Q8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTUNoYW5nZVpvb20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNoYW5nZSBab29tLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5ab29tPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPklUU00gQ2hhbmdlPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPklUU00uQWdlbnQuRGVmYXVsdC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTPkNvcmUuQWxsb2NhdGlvbkxpc3QuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTUz5JVFNNLkNoYW5nZU1hbmFnZW1lbnQuRGVmYXVsdC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTPklUU00uQ2hhbmdlTWFuYWdlbWVudC5SZXNwb25zaXZlLmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxDU1M+SVRTTS5DaGFuZ2VNYW5hZ2VtZW50LldvcmtvcmRlckdyYXBoLmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxDU1M+SVRTTS5DaGFuZ2VNYW5hZ2VtZW50LlJURUNvbnRlbnQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPEphdmFTY3JpcHQ+dGhpcmRwYXJ0eS9qcXVlcnktdGFibGVzb3J0ZXItMi4wLjUvanF1ZXJ5LnRhYmxlc29ydGVyLmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PklUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5Xb3Jrb3JkZXJHcmFwaC5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5JVFNNLkFnZW50LkNoYW5nZU1hbmFnZW1lbnQuWm9vbS5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5Db3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PkNvcmUuVUkuVGFibGUuU29ydC5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5Db3JlLkFnZW50LlRhYmxlRmlsdGVycy5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5Db3JlLkFnZW50LkxpbmtPYmplY3QuanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICAgICAgPEphdmFTY3JpcHQ+SVRTTS5BZ2VudC5Db25maXJtRGlhbG9nLmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVRlbXBsYXRlRGVsZXRlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2UtYnVpbGRlcjwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tY2hhbmdlLW1hbmFnZXI8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5JVFNNIFRlbXBsYXRlIERlbGV0ZS48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBDaGFuZ2U8L1RpdGxlPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01UZW1wbGF0ZUVkaXQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZS1idWlsZGVyPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2UtbWFuYWdlcjwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPklUU00gVGVtcGxhdGUgRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBDaGFuZ2U8L1RpdGxlPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZS1idWlsZGVyPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2UtbWFuYWdlcjwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPklUU00gVGVtcGxhdGUgRWRpdCBDQUIuPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPklUU00gQ2hhbmdlPC9UaXRsZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tY2hhbmdlLWJ1aWxkZXI8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZS1tYW5hZ2VyPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBUZW1wbGF0ZSBFZGl0IENvbnRlbnQuPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPklUU00gQ2hhbmdlPC9UaXRsZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNVGVtcGxhdGVPdmVydmlldyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tY2hhbmdlLWJ1aWxkZXI8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZS1tYW5hZ2VyPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBUZW1wbGF0ZSBPdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5JVFNNIENoYW5nZTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRlbXBsYXRlIE92ZXJ2aWV3PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZSBUcmFuc2xhdGFibGU9IjEiPlRlbXBsYXRlczwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRJVFNNVGVtcGxhdGVPdmVydmlldzwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5JVFNNIENoYW5nZTwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+PC9BY2Nlc3NLZXk+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+NTAwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+SVRTTS5DaGFuZ2VNYW5hZ2VtZW50LkRlZmF1bHQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPEphdmFTY3JpcHQ+SVRTTS5BZ2VudC5Db25maXJtRGlhbG9nLmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVVzZXJTZWFyY2giIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvb2t1cCBvZiBhZ2VudHMsIHVzZWQgZm9yIGF1dG9jb21wbGV0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5Vc2VyIFNlYXJjaDwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5JVFNNIENoYW5nZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNV29ya09yZGVyQWRkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2U8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Xb3Jrb3JkZXIgQWRkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5BZGQ8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tY2hhbmdlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+V29ya29yZGVyIEFkZCAoZnJvbSB0ZW1wbGF0ZSkuPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPkFkZDwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5JVFNNIENoYW5nZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNV29ya09yZGVyQWdlbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPldvcmtvcmRlciBBZ2VudC48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+QWdlbnQ8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVdvcmtPcmRlckRlbGV0ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tY2hhbmdlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+V29ya29yZGVyIERlbGV0ZS48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+RGVsZXRlPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPklUU00gQ2hhbmdlPC9OYXZCYXJOYW1lPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01Xb3JrT3JkZXJFZGl0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2U8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Xb3Jrb3JkZXIgRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+RWRpdDwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5JVFNNIENoYW5nZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tY2hhbmdlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+V29ya29yZGVyIEhpc3RvcnkuPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZSBUcmFuc2xhdGFibGU9IjEiPkhpc3Rvcnk8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVdvcmtPcmRlckhpc3Rvcnlab29tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2U8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Xb3Jrb3JkZXIgSGlzdG9yeSBab29tLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5IaXN0b3J5IFpvb208L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVdvcmtPcmRlclJlcG9ydCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tY2hhbmdlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+V29ya29yZGVyIFJlcG9ydC48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+UmVwb3J0PC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPklUU00gQ2hhbmdlPC9OYXZCYXJOYW1lPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01Xb3JrT3JkZXJUYWtlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2U8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UYWtlIFdvcmtvcmRlci48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+VGFrZSBXb3Jrb3JkZXI8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1jaGFuZ2U8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UZW1wbGF0ZS48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlIFRyYW5zbGF0YWJsZT0iMSI+VGVtcGxhdGU8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVdvcmtPcmRlclpvb20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLWNoYW5nZTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPldvcmtvcmRlciBab29tLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5ab29tPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPklUU00gQ2hhbmdlPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPklUU00uQWdlbnQuRGVmYXVsdC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTPklUU00uQ2hhbmdlTWFuYWdlbWVudC5EZWZhdWx0LmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxDU1M+SVRTTS5DaGFuZ2VNYW5hZ2VtZW50LlJURUNvbnRlbnQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTUz5Db3JlLkFsbG9jYXRpb25MaXN0LmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PkNvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICAgICAgPEphdmFTY3JpcHQ+Q29yZS5VSS5UYWJsZS5Tb3J0LmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PkNvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PkNvcmUuQWdlbnQuTGlua09iamVjdC5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5JVFNNLkFnZW50LkNoYW5nZU1hbmFnZW1lbnQuWm9vbS5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5JVFNNLkFnZW50LkNvbmZpcm1EaWFsb2cuanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJDdXN0b21lckZyb250ZW5kOjpNb2R1bGUjIyNDdXN0b21lcklUU01DaGFuZ2VTY2hlZHVsZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNoYW5nZSBTY2hlZHVsZS48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+SVRTTSBDaGFuZ2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8VGl0bGUgVHJhbnNsYXRhYmxlPSIxIj5DaGFuZ2UgU2NoZWR1bGU8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5DaGFuZ2UgU2NoZWR1bGU8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lIFRyYW5zbGF0YWJsZT0iMSI+Q2hhbmdlIFNjaGVkdWxlPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPjwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1DdXN0b21lcklUU01DaGFuZ2VTY2hlZHVsZTwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjQ1MDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPklUU00uQ2hhbmdlTWFuYWdlbWVudC5EZWZhdWx0LmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxDU1M+SVRTTS5DaGFuZ2VNYW5hZ2VtZW50LlRhYmxlLmNzczwvQ1NTPgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6OlRvb2xCYXJNb2R1bGUjIyMxMDEtSVRTTUNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZU1hbmFnZXIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlcyBtYW5hZ2VkIGJ5IHRoZSB1c2VyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlRvb2xCYXJNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6VG9vbEJhcjo6Q2hhbmdlTWFuYWdlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3NzQ2xhc3MiPkNoYW5nZU1hbmFnZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb24iPmZhIGZhLW1hbGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5Ij4xMDAwNjEwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6OlRvb2xCYXJNb2R1bGUjIyMxMDItSVRTTUNoYW5nZU1hbmFnZW1lbnQ6Ok15Q2hhbmdlcyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlRvb2xCYXJNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6VG9vbEJhcjo6TXlDaGFuZ2VzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDc3NDbGFzcyI+TXlDaGFuZ2VzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uIj5mYSBmYS1yZXR3ZWV0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSI+MTAwMDYzMDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpUb29sQmFyTW9kdWxlIyMjMTAzLUlUU01DaGFuZ2VNYW5hZ2VtZW50OjpNeVdvcmtPcmRlcnMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2Ygd29ya29yZGVycy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpUb29sQmFyTW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRvb2xCYXI6Ok15V29ya09yZGVyczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3NzQ2xhc3MiPk15V29ya09yZGVyczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbiI+ZmEgZmEtdGFza3M8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5Ij4xMDAwNjQwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6OlRvb2xCYXJNb2R1bGUjIyMxMDQtSVRTTUNoYW5nZU1hbmFnZW1lbnQ6Ok15Q0FCIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkFnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZSBhZHZpc29yeSBib2FyZHMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6VG9vbEJhck1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpUb29sQmFyOjpNeUNBQjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3NzQ2xhc3MiPk15Q0FCczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbiI+ZmEgZmEtZ3JvdXA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5Ij4xMDAwNjIwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3IyMjU21hbGwiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNoYW5nZSBsaXN0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01DaGFuZ2VPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ2hhbmdlOjpPdmVydmlld1NtYWxsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPlNtYWxsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lU2hvcnQiPlM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBhZ2VTaG93biI+MjU8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6VGVtcGxhdGVPdmVydmlldyMjI1NtYWxsIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSB0ZW1wbGF0ZSBsaXN0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01UZW1wbGF0ZU92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01UZW1wbGF0ZTo6T3ZlcnZpZXdTbWFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5TbWFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZVNob3J0Ij5TPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQYWdlU2hvd24iPjI1PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzMxNy1JVFNNQ2hhbmdlQWRkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IGEgbGluayB0byBjcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4gVGhlIHRpY2tldCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgbGlua2VkIHdpdGggdGhlIG5ldyBjaGFuZ2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGlja2V0PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpUaWNrZXQ6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0TWVudTo6SVRTTUNoYW5nZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5DcmVhdGUgQ2hhbmdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5DcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNQ2hhbmdlQWRkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNQ2hhbmdlQWRkO1RpY2tldElEPVslIERhdGEuVGlja2V0SUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzMxOC1JVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IGEgbGluayB0byBjcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4gVGhlIHRpY2tldCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgbGlua2VkIHdpdGggdGhlIG5ldyBjaGFuZ2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGlja2V0PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpUaWNrZXQ6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0TWVudTo6SVRTTUNoYW5nZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5DcmVhdGUgQ2hhbmdlIChmcm9tIFRlbXBsYXRlKTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+Q3JlYXRlIGEgY2hhbmdlIChmcm9tIHRlbXBsYXRlKSBmcm9tIHRoaXMgdGlja2V0LjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGU7VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzAwMC1CYWNrIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNoYW5nZTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ2hhbmdlOjpNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+WyUgRW52KCJMYXN0U2NyZWVuQ2hhbmdlcyIpICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPkJhY2s8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzAxMC1IaXN0b3J5IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNQ2hhbmdlOjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01DaGFuZ2U6Ok1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPkhpc3Rvcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkhpc3Rvcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNQ2hhbmdlSGlzdG9yeTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTUNoYW5nZUhpc3Rvcnk7Q2hhbmdlSUQ9WyUgRGF0YS5DaGFuZ2VJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+UG9wVXA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzAyMC1QcmludCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNQ2hhbmdlOjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01DaGFuZ2U6Ok1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPlByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5QcmludCB0aGUgY2hhbmdlLjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01DaGFuZ2VQcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTUNoYW5nZVByaW50O0NoYW5nZUlEPVslIERhdGEuQ2hhbmdlSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rUGFyYW0iPnRhcmdldD0icHJpbnRfY2hhbmdlIjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Qb3BVcDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDMwLUVkaXQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNQ2hhbmdlOjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01DaGFuZ2U6Ok1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPkVkaXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkVkaXQgdGhlIGNoYW5nZS48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNQ2hhbmdlRWRpdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTUNoYW5nZUVkaXQ7Q2hhbmdlSUQ9WyUgRGF0YS5DaGFuZ2VJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+UG9wVXA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzA0MC1JbnZvbHZlZFBlcnNvbnMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UHJlc2VudHMgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNob3cgdGhlIGludm9sdmVkIHBlcnNvbnMgaW4gYSBjaGFuZ2UsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBjaGFuZ2UgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNQ2hhbmdlOjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01DaGFuZ2U6Ok1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPkludm9sdmVkIFBlcnNvbnM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkNoYW5nZSBpbnZvbHZlZCBwZXJzb25zIG9mIHRoZSBjaGFuZ2UuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29uczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29ucztDaGFuZ2VJRD1bJSBEYXRhLkNoYW5nZUlEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Qb3BVcDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDUwLVdvcmtPcmRlckFkZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWRkIGEgd29ya29yZGVyIGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNoYW5nZTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ2hhbmdlOjpNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5BZGQgV29ya29yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5BZGQgYSB3b3Jrb3JkZXIgdG8gdGhlIGNoYW5nZS48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNV29ya09yZGVyQWRkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNV29ya09yZGVyQWRkO0NoYW5nZUlEPVslIERhdGEuQ2hhbmdlSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPlBvcFVwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMwNTUtV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSB3b3Jrb3JkZXIgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNQ2hhbmdlOjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01DaGFuZ2U6Ok1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPkFkZCBXb3Jrb3JkZXIgKGZyb20gVGVtcGxhdGUpPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5BZGQgYSB3b3Jrb3JkZXIgKGZyb20gdGVtcGxhdGUpIHRvIHRoZSBjaGFuZ2UuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50SVRTTVdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZTtDaGFuZ2VJRD1bJSBEYXRhLkNoYW5nZUlEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Qb3BVcDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDYwLUNvbmRpdGlvbnMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgY29uZGl0aW9ucyBvZiBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01DaGFuZ2U6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNoYW5nZTo6TWVudUdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+Q29uZGl0aW9uczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+RWRpdCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY2hhbmdlLjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01DaGFuZ2VDb25kaXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01DaGFuZ2VDb25kaXRpb247Q2hhbmdlSUQ9WyUgRGF0YS5DaGFuZ2VJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+UG9wVXA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzA3MC1MaW5rIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY2hhbmdlIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNQ2hhbmdlOjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01DaGFuZ2U6Ok1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPkxpbms8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkxpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIGNoYW5nZS48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRMaW5rT2JqZWN0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRMaW5rT2JqZWN0O1NvdXJjZU9iamVjdD1JVFNNQ2hhbmdlO1NvdXJjZUtleT1bJSBEYXRhLkNoYW5nZUlEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Qb3BVcDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDgwLU1vdmVUaW1lU2xvdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbW92aW5nIHRoZSB0aW1lIHNsb3Qgb2YgYSBjaGFuZ2UgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01DaGFuZ2U6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNoYW5nZTo6TWVudVRpbWVTbG90PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPk1vdmUgVGltZSBTbG90PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5Nb3ZlIGFsbCB3b3Jrb3JkZXJzIGluIHRpbWUuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50SVRTTUNoYW5nZVRpbWVTbG90PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNQ2hhbmdlVGltZVNsb3Q7Q2hhbmdlSUQ9WyUgRGF0YS5DaGFuZ2VJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+UG9wVXA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzA5MC1UZW1wbGF0ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZSBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSBjaGFuZ2UsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTUNoYW5nZTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNQ2hhbmdlOjpNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5UZW1wbGF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+U2F2ZSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZS48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01DaGFuZ2VUZW1wbGF0ZTtDaGFuZ2VJRD1bJSBEYXRhLkNoYW5nZUlEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Qb3BVcDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMTAwLUNoYW5nZURlbGV0ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNQ2hhbmdlOjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01DaGFuZ2U6Ok1lbnVDaGFuZ2VEZWxldGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+RGVsZXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5EZWxldGUgdGhlIGNoYW5nZS48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNQ2hhbmdlRGVsZXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNQ2hhbmdlRGVsZXRlO0NoYW5nZUlEPVslIERhdGEuQ2hhbmdlSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPkNvbmZpcm1EaWFsb2c8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkVsZW1lbnRTZWxlY3RvciI+I01lbnVbJSBEYXRhLk1lbnVJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZyI+QWN0aW9uPUFnZW50SVRTTUNoYW5nZURlbGV0ZTtDaGFuZ2VJRD1bJSBEYXRhLkNoYW5nZUlEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlybWVkQWN0aW9uUXVlcnlTdHJpbmciPkFjdGlvbj1BZ2VudElUU01DaGFuZ2VEZWxldGU7U3ViYWN0aW9uPUNoYW5nZURlbGV0ZTtDaGFuZ2VJRD1bJSBEYXRhLkNoYW5nZUlEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGlhbG9nVGl0bGUiPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdIFslIENvbmZpZygiSVRTTUNoYW5nZTo6SG9vayIpICVdIFslIERhdGEuQ2hhbmdlTnVtYmVyIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMTEwLUNoYW5nZVJlc2V0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byByZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01DaGFuZ2U6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTUNoYW5nZTo6TWVudUdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+UmVzZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPlJlc2V0IGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50SVRTTUNoYW5nZVJlc2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNQ2hhbmdlUmVzZXQ7Q2hhbmdlSUQ9WyUgRGF0YS5DaGFuZ2VJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+Q29uZmlybURpYWxvZzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRWxlbWVudFNlbGVjdG9yIj4jTWVudVslIERhdGEuTWVudUlEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGlhbG9nQ29udGVudFF1ZXJ5U3RyaW5nIj5BY3Rpb249QWdlbnRJVFNNQ2hhbmdlUmVzZXQ7Q2hhbmdlSUQ9WyUgRGF0YS5DaGFuZ2VJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpcm1lZEFjdGlvblF1ZXJ5U3RyaW5nIj5BY3Rpb249QWdlbnRJVFNNQ2hhbmdlUmVzZXQ7U3ViYWN0aW9uPVJlc2V0O0NoYW5nZUlEPVslIERhdGEuQ2hhbmdlSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEaWFsb2dUaXRsZSI+WyUgVHJhbnNsYXRlKCJSZXNldCIpIHwgaHRtbCAlXSBbJSBDb25maWcoIklUU01DaGFuZ2U6Okhvb2siKSAlXSBbJSBEYXRhLkNoYW5nZU51bWJlciB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzAwMC1CYWNrIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSB3b3Jrb3JkZXIgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTVdvcmtPcmRlcjo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNV29ya09yZGVyOjpNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+WyUgRW52KCJMYXN0U2NyZWVuV29ya09yZGVycyIpICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPkJhY2s8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzAxMC1IaXN0b3J5IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNV29ya09yZGVyOjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Xb3JrT3JkZXI6Ok1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPkhpc3Rvcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkhpc3Rvcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNV29ya09yZGVySGlzdG9yeTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlckhpc3Rvcnk7V29ya09yZGVySUQ9WyUgRGF0YS5Xb3JrT3JkZXJJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+UG9wVXA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzAyMC1QcmludCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNV29ya09yZGVyOjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Xb3JrT3JkZXI6Ok1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPlByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5QcmludCB0aGUgd29ya29yZGVyLjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01DaGFuZ2VQcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTUNoYW5nZVByaW50O1dvcmtPcmRlcklEPVslIERhdGEuV29ya09yZGVySUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPlBvcFVwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMwMzAtRWRpdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01Xb3JrT3JkZXI6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVdvcmtPcmRlcjo6TWVudVdpdGhQZXJtaXNzaW9uRnJvbUNoYW5nZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5FZGl0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5FZGl0IHRoZSB3b3Jrb3JkZXIuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50SVRTTVdvcmtPcmRlckVkaXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJFZGl0O1dvcmtPcmRlcklEPVslIERhdGEuV29ya09yZGVySUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPlBvcFVwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMwMzUtVGFrZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdGFraW5nIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTVdvcmtPcmRlcjo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNV29ya09yZGVyOjpNZW51V2l0aFRha2VQZXJtaXNzaW9uPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPlRha2UgV29ya29yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5UYWtlIHRoZSB3b3Jrb3JkZXIuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50SVRTTVdvcmtPcmRlclRha2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJUYWtlO1dvcmtPcmRlcklEPVslIERhdGEuV29ya09yZGVySUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPkNvbmZpcm1EaWFsb2c8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkVsZW1lbnRTZWxlY3RvciI+I01lbnVbJSBEYXRhLk1lbnVJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZyI+QWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlclRha2U7V29ya09yZGVySUQ9WyUgRGF0YS5Xb3JrT3JkZXJJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpcm1lZEFjdGlvblF1ZXJ5U3RyaW5nIj5BY3Rpb249QWdlbnRJVFNNV29ya09yZGVyVGFrZTtTdWJhY3Rpb249V29ya09yZGVyVGFrZTtXb3JrT3JkZXJJRD1bJSBEYXRhLldvcmtPcmRlcklEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGlhbG9nVGl0bGUiPlslIFRyYW5zbGF0ZSgiVGFrZSBXb3Jrb3JkZXIiKSB8IGh0bWwgJV06IFslIENvbmZpZygiSVRTTVdvcmtPcmRlcjo6SG9vayIpICVdIFslIERhdGEuQ2hhbmdlTnVtYmVyIHwgaHRtbCAlXSAtIFslIERhdGEuV29ya09yZGVyTnVtYmVyIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDQwLVdvcmtPcmRlckFnZW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBjaGFuZ2luZyB0aGUgd29ya29yZGVyIGFnZW50LCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTVdvcmtPcmRlcjo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNV29ya09yZGVyOjpNZW51V2l0aFBlcm1pc3Npb25Gcm9tQ2hhbmdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIiBUcmFuc2xhdGFibGU9IjEiPldvcmtvcmRlciBBZ2VudDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+U2V0IHRoZSBhZ2VudCBmb3IgdGhlIHdvcmtvcmRlci48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNV29ya09yZGVyQWdlbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJBZ2VudDtXb3JrT3JkZXJJRD1bJSBEYXRhLldvcmtPcmRlcklEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Qb3BVcDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDUwLVJlcG9ydCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZWRpdGluZyB0aGUgcmVwb3J0IG9mIGEgd29ya29yZGVyLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTVdvcmtPcmRlcjo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNV29ya09yZGVyOjpNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5SZXBvcnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPlJlcG9ydDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01Xb3JrT3JkZXJSZXBvcnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJSZXBvcnQ7V29ya09yZGVySUQ9WyUgRGF0YS5Xb3JrT3JkZXJJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+UG9wVXA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzA2MC1MaW5rIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgd29ya29yZGVyIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01Xb3JrT3JkZXI6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVdvcmtPcmRlcjo6TWVudUdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+TGluazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+TGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgd29ya29yZGVyLjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudExpbmtPYmplY3Q8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudExpbmtPYmplY3Q7U291cmNlT2JqZWN0PUlUU01Xb3JrT3JkZXI7U291cmNlS2V5PVslIERhdGEuV29ya09yZGVySUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPlBvcFVwPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMwODAtVGVtcGxhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgd29ya29yZGVyIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgd29ya29yZGVyLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01Xb3JrT3JkZXI6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVdvcmtPcmRlcjo6TWVudVdpdGhQZXJtaXNzaW9uRnJvbUNoYW5nZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5UZW1wbGF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+U2F2ZSB3b3Jrb3JkZXIgYXMgYSB0ZW1wbGF0ZS48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJUZW1wbGF0ZTtXb3JrT3JkZXJJRD1bJSBEYXRhLldvcmtPcmRlcklEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5Qb3BVcDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMDkwLVdvcmtPcmRlckRlbGV0ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgd29ya29yZGVyIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNV29ya09yZGVyOjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Xb3JrT3JkZXI6Ok1lbnVXaXRoUGVybWlzc2lvbkZyb21DaGFuZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+RGVsZXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5EZWxldGUgdGhlIHdvcmtvcmRlci48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRJVFNNV29ya09yZGVyRGVsZXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRJVFNNV29ya09yZGVyRGVsZXRlO1dvcmtPcmRlcklEPVslIERhdGEuV29ya09yZGVySUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPkNvbmZpcm1EaWFsb2c8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkVsZW1lbnRTZWxlY3RvciI+I01lbnVbJSBEYXRhLk1lbnVJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZyI+QWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlckRlbGV0ZTtXb3JrT3JkZXJJRD1bJSBEYXRhLldvcmtPcmRlcklEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29uZmlybWVkQWN0aW9uUXVlcnlTdHJpbmciPkFjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJEZWxldGU7U3ViYWN0aW9uPVdvcmtPcmRlckRlbGV0ZTtXb3JrT3JkZXJJRD1bJSBEYXRhLldvcmtPcmRlcklEIHwgaHRtbCAlXTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGlhbG9nVGl0bGUiPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdIFslIENvbmZpZygiSVRTTVdvcmtPcmRlcjo6SG9vayIpICVdIFslIERhdGEuQ2hhbmdlTnVtYmVyIHwgaHRtbCAlXS1bJSBEYXRhLldvcmtPcmRlck51bWJlciB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpDb21wbGV4VGFibGU6OlNldHRpbmdzVmlzaWJpbGl0eSMjI0lUU01DaGFuZ2VNYW5hZ2VtZW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPkFnZW50SVRTTUNoYW5nZVpvb208L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5BZ2VudElUU01Xb3JrT3JkZXJab29tPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OkNvbXBsZXhUYWJsZSMjI0lUU01DaGFuZ2UiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgQ2hhbmdlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBDaGFuZ2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpMaW5rT2JqZWN0OjpJVFNNQ2hhbmdlLnBtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZWZhdWx0Q29sdW1ucyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGl0bGUiPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlU3RhdGUiPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnkiPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSW1wYWN0Ij4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5Ij4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRTdGFydFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZEVuZFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsU3RhcnRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbEVuZFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZEVmZm9ydCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY2NvdW50ZWRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJlcXVlc3RlZFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3JlYXRlVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaW1lIj4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpb3JpdHkiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVRpdGxlIj4xMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlU3RhdGUiPjExMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeSI+MTIwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltcGFjdCI+MTMwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5Ij4xNDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZFN0YXJ0VGltZSI+MTUwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRFbmRUaW1lIj4xNjA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsU3RhcnRUaW1lIj4xNzA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsRW5kVGltZSI+MTgwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRFZmZvcnQiPjE5MDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY2NvdW50ZWRUaW1lIj4yMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVxdWVzdGVkVGltZSI+MjEwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyZWF0ZVRpbWUiPjIyMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaW1lIj4yMzA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6Q29tcGxleFRhYmxlIyMjSVRTTVdvcmtPcmRlciIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBXb3Jrb3JkZXIgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgV29ya29yZGVyIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGlua09iamVjdDo6SVRTTVdvcmtPcmRlci5wbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVmYXVsdENvbHVtbnMiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlclRpdGxlIj4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlclN0YXRlIj4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlclR5cGUiPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZFN0YXJ0VGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRW5kVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxTdGFydFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsRW5kVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRWZmb3J0Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjY291bnRlZFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3JlYXRlVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaW1lIj4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpb3JpdHkiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlclRpdGxlIj4xMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyU3RhdGUiPjExMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJXb3JrT3JkZXJUeXBlIj4xMjA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZFN0YXJ0VGltZSI+MTMwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRFbmRUaW1lIj4xNDA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsU3RhcnRUaW1lIj4xNTA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsRW5kVGltZSI+MTYwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRFZmZvcnQiPjE3MDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY2NvdW50ZWRUaW1lIj4xODA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3JlYXRlVGltZSI+MTkwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVRpbWUiPjIwMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRHluYW1pY0ZpZWxkOjpFdmVudE1vZHVsZVBvc3QjIyMxMDAtVXBkYXRlSVRTTUNoYW5nZUNvbmRpdGlvbnMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pY0ZpZWxkIGV2ZW50IG1vZHVsZSB0byBoYW5kbGUgdGhlIHVwZGF0ZSBvZiBjb25kaXRpb25zIGlmIGR5bmFtaWMgZmllbGRzIGFyZSBhZGRlZCwgdXBkYXRlZCBvciBkZWxldGVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpEeW5hbWljRmllbGQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpFdmVudDo6VXBkYXRlSVRTTUNoYW5nZUNvbmRpdGlvbnM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkV2ZW50Ij4oRHluYW1pY0ZpZWxkQWRkfER5bmFtaWNGaWVsZFVwZGF0ZXxEeW5hbWljRmllbGREZWxldGUpPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUcmFuc2FjdGlvbiI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkV2ZW50TW9kdWxlIyMjMDEtSGlzdG9yeUFkZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5JVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNoYW5nZTo6RXZlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6RXZlbnQ6Okhpc3RvcnlBZGQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkV2ZW50Ij4oQ2hhbmdlQWRkUG9zdHxDaGFuZ2VVcGRhdGVQb3N0fENoYW5nZUNBQlVwZGF0ZVBvc3R8Q2hhbmdlQ0FCRGVsZXRlUG9zdHxDaGFuZ2VMaW5rQWRkUG9zdHxDaGFuZ2VMaW5rRGVsZXRlUG9zdHxDaGFuZ2VBdHRhY2htZW50QWRkUG9zdHxDaGFuZ2VBdHRhY2htZW50RGVsZXRlUG9zdCk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RXZlbnRNb2R1bGUjIyMwMi1Ob3RpZmljYXRpb24iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBldmVudCBtb2R1bGUgdGhhdCBzZW5kcyBub3RpZmljYXRpb25zLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ2hhbmdlOjpFdmVudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpFdmVudDo6Tm90aWZpY2F0aW9uPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+KENoYW5nZUFkZFBvc3R8Q2hhbmdlVXBkYXRlUG9zdHxDaGFuZ2VDQUJVcGRhdGVQb3N0fENoYW5nZUNBQkRlbGV0ZVBvc3R8Q2hhbmdlRGVsZXRlUG9zdHxDaGFuZ2VMaW5rQWRkUG9zdHxDaGFuZ2VMaW5rRGVsZXRlUG9zdHxDaGFuZ2VBdHRhY2htZW50QWRkUG9zdHxDaGFuZ2VBdHRhY2htZW50RGVsZXRlUG9zdCk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RXZlbnRNb2R1bGUjIyMwMy1Db25kaXRpb24iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBldmVudCBtb2R1bGUgdGhhdCBtYXRjaGVzIGNvbmRpdGlvbnMgYW5kIGV4ZWN1dGVzIGFjdGlvbnMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01DaGFuZ2U6OkV2ZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OkV2ZW50OjpDb25kaXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkV2ZW50Ij4oQ2hhbmdlQWRkUG9zdHxDaGFuZ2VVcGRhdGVQb3N0KTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHJhbnNhY3Rpb24iPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpFdmVudE1vZHVsZSMjIzgwLVRvb2xCYXJDaGFuZ2VNYW5hZ2VyQ2FjaGVEZWxldGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBjYWNoZSBmb3IgYSB0b29sYmFyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ2hhbmdlOjpFdmVudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpFdmVudDo6VG9vbEJhckNoYW5nZU1hbmFnZXJDYWNoZURlbGV0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXZlbnQiPihDaGFuZ2VBZGRQb3N0fENoYW5nZVVwZGF0ZVBvc3R8Q2hhbmdlRGVsZXRlUG9zdCk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RXZlbnRNb2R1bGUjIyM4MS1Ub29sQmFyTXlDaGFuZ2VzQ2FjaGVEZWxldGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBjYWNoZSBmb3IgYSB0b29sYmFyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ2hhbmdlOjpFdmVudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpFdmVudDo6VG9vbEJhck15Q2hhbmdlc0NhY2hlRGVsZXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+KENoYW5nZUFkZFBvc3R8Q2hhbmdlVXBkYXRlUG9zdHxDaGFuZ2VEZWxldGVQb3N0KTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHJhbnNhY3Rpb24iPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpFdmVudE1vZHVsZSMjIzgyLVRvb2xCYXJNeUNBQkNhY2hlRGVsZXRlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPklUU00gZXZlbnQgbW9kdWxlIHRoYXQgZGVsZXRlcyB0aGUgY2FjaGUgZm9yIGEgdG9vbGJhci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNoYW5nZTo6RXZlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6RXZlbnQ6OlRvb2xCYXJNeUNBQkNhY2hlRGVsZXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+KENoYW5nZUNBQlVwZGF0ZVBvc3R8Q2hhbmdlQ0FCRGVsZXRlUG9zdCk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RXZlbnRNb2R1bGUjIyM5MC1Db25kaXRpb25EZWxldGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBldmVudCBtb2R1bGUgdGhhdCBjbGVhbnMgdXAgY29uZGl0aW9ucy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNoYW5nZTo6RXZlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6RXZlbnQ6OkNvbmRpdGlvbkRlbGV0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXZlbnQiPihDaGFuZ2VEZWxldGVQb3N0KTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHJhbnNhY3Rpb24iPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpFdmVudE1vZHVsZSMjIzkxLUhpc3RvcnlEZWxldGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01DaGFuZ2U6OkV2ZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OkV2ZW50OjpIaXN0b3J5RGVsZXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+KENoYW5nZURlbGV0ZVBvc3QpPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUcmFuc2FjdGlvbiI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6OkV2ZW50TW9kdWxlIyMjMDEtV29ya09yZGVyTnVtYmVyQ2FsYyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5JVFNNIGV2ZW50IG1vZHVsZSB0byByZWNhbGN1bGF0ZSB0aGUgd29ya29yZGVyIG51bWJlcnMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Xb3JrT3JkZXI6OkV2ZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXI6OkV2ZW50OjpXb3JrT3JkZXJOdW1iZXJDYWxjPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+KFdvcmtPcmRlclVwZGF0ZVBvc3R8V29ya09yZGVyRGVsZXRlUG9zdCk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6RXZlbnRNb2R1bGUjIyMwMi1Xb3JrT3JkZXJBY3R1YWxUaW1lc1NldCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5JVFNNIGV2ZW50IG1vZHVsZSB0byBzZXQgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzIG9mIHdvcmtvcmRlcnMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Xb3JrT3JkZXI6OkV2ZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXI6OkV2ZW50OjpXb3JrT3JkZXJBY3R1YWxUaW1lc1NldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXZlbnQiPldvcmtPcmRlclVwZGF0ZVBvc3Q8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6RXZlbnRNb2R1bGUjIyMwMy1IaXN0b3J5QWRkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPklUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiB3b3Jrb3JkZXJzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNV29ya09yZGVyOjpFdmVudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpFdmVudDo6SGlzdG9yeUFkZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXZlbnQiPihXb3JrT3JkZXJBZGRQb3N0fFdvcmtPcmRlclVwZGF0ZVBvc3R8V29ya09yZGVyRGVsZXRlUG9zdHxXb3JrT3JkZXJMaW5rQWRkUG9zdHxXb3JrT3JkZXJMaW5rRGVsZXRlUG9zdHxXb3JrT3JkZXJBdHRhY2htZW50QWRkUG9zdHxXb3JrT3JkZXJBdHRhY2htZW50RGVsZXRlUG9zdHxXb3JrT3JkZXJSZXBvcnRBdHRhY2htZW50QWRkUG9zdHxXb3JrT3JkZXJSZXBvcnRBdHRhY2htZW50RGVsZXRlUG9zdCk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6RXZlbnRNb2R1bGUjIyMwNC1Ob3RpZmljYXRpb24iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBldmVudCBtb2R1bGUgdGhhdCBzZW5kcyBub3RpZmljYXRpb25zLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNV29ya09yZGVyOjpFdmVudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpFdmVudDo6Tm90aWZpY2F0aW9uPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+KFdvcmtPcmRlckFkZFBvc3R8V29ya09yZGVyVXBkYXRlUG9zdHxXb3JrT3JkZXJEZWxldGVQb3N0fFdvcmtPcmRlckxpbmtBZGRQb3N0fFdvcmtPcmRlckxpbmtEZWxldGVQb3N0fFdvcmtPcmRlckF0dGFjaG1lbnRBZGRQb3N0fFdvcmtPcmRlckF0dGFjaG1lbnREZWxldGVQb3N0fFdvcmtPcmRlclJlcG9ydEF0dGFjaG1lbnRBZGRQb3N0fFdvcmtPcmRlclJlcG9ydEF0dGFjaG1lbnREZWxldGVQb3N0KTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHJhbnNhY3Rpb24iPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpFdmVudE1vZHVsZSMjIzA1LUNvbmRpdGlvbiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5JVFNNIGV2ZW50IG1vZHVsZSB0aGF0IG1hdGNoZXMgY29uZGl0aW9ucyBhbmQgZXhlY3V0ZXMgYWN0aW9ucy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTVdvcmtPcmRlcjo6RXZlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6RXZlbnQ6OkNvbmRpdGlvbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXZlbnQiPihXb3JrT3JkZXJBZGRQb3N0fFdvcmtPcmRlclVwZGF0ZVBvc3QpPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUcmFuc2FjdGlvbiI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6OkV2ZW50TW9kdWxlIyMjODAtVG9vbEJhck15V29ya09yZGVyc0NhY2hlRGVsZXRlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPklUU00gZXZlbnQgbW9kdWxlIHRoYXQgZGVsZXRlcyB0aGUgY2FjaGUgZm9yIGEgdG9vbGJhci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTVdvcmtPcmRlcjo6RXZlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcjo6RXZlbnQ6OlRvb2xCYXJNeVdvcmtPcmRlcnNDYWNoZURlbGV0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXZlbnQiPihXb3JrT3JkZXJBZGRQb3N0fFdvcmtPcmRlclVwZGF0ZVBvc3R8V29ya09yZGVyRGVsZXRlUG9zdCk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRGFlbW9uOjpTY2hlZHVsZXJDcm9uVGFza01hbmFnZXI6OlRhc2sjIyNJVFNNQ2hhbmdlc0NoZWNrIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJ1biB0YXNrIHRvIGNoZWNrIGlmIHNwZWNpZmljIHRpbWVzIGhhdmUgYmVlbiByZWFjaGVkIGluIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RGFlbW9uPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RGFlbW9uOjpTY2hlZHVsZXJDcm9uVGFza01hbmFnZXI6OlRhc2s8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFza05hbWUiPklUU01DaGFuZ2VzQ2hlY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNjaGVkdWxlIj4qLzEwICogKiAqICo8L0l0ZW0+IDwhLS0gRGVmYXVsdCBldmVyeSAxMCBtaW5zIC0tPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpDb21tYW5kOjpBZG1pbjo6SVRTTTo6Q2hhbmdlOjpDaGVjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRnVuY3Rpb24iPkV4ZWN1dGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBhcmFtcyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1heGltdW1QYXJhbGxlbEluc3RhbmNlcyI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KCiAgICA8IS0tIFRPRE86IENoZWNrIGlmIHRoaXMgbmVlZHMgdG8gYmUgdXBkYXRlZCBhbmQgLyBvciByZW5hbWVkIChubyBjcm9uam9icyBhbnltb3JlKSAtLT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2VDcm9uam9iOjpFdmVudE1vZHVsZSMjIzAxLUhpc3RvcnlBZGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01DaGFuZ2VDcm9uam9iOjpFdmVudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpFdmVudDo6SGlzdG9yeUFkZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXZlbnQiPihDaGFuZ2VQbGFubmVkU3RhcnRUaW1lUmVhY2hlZFBvc3R8Q2hhbmdlUGxhbm5lZEVuZFRpbWVSZWFjaGVkUG9zdHxDaGFuZ2VBY3R1YWxTdGFydFRpbWVSZWFjaGVkUG9zdHxDaGFuZ2VBY3R1YWxFbmRUaW1lUmVhY2hlZFBvc3R8Q2hhbmdlUmVxdWVzdGVkVGltZVJlYWNoZWRQb3N0fFdvcmtPcmRlclBsYW5uZWRTdGFydFRpbWVSZWFjaGVkUG9zdHxXb3JrT3JkZXJQbGFubmVkRW5kVGltZVJlYWNoZWRQb3N0fFdvcmtPcmRlckFjdHVhbFN0YXJ0VGltZVJlYWNoZWRQb3N0fFdvcmtPcmRlckFjdHVhbEVuZFRpbWVSZWFjaGVkUG9zdCk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZUNyb25qb2I6OkV2ZW50TW9kdWxlIyMjMDItTm90aWZpY2F0aW9uIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPklUU00gZXZlbnQgbW9kdWxlIHRoYXQgc2VuZHMgbm90aWZpY2F0aW9ucy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNoYW5nZUNyb25qb2I6OkV2ZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OkV2ZW50OjpOb3RpZmljYXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkV2ZW50Ij4oQ2hhbmdlUGxhbm5lZFN0YXJ0VGltZVJlYWNoZWRQb3N0fENoYW5nZVBsYW5uZWRFbmRUaW1lUmVhY2hlZFBvc3R8Q2hhbmdlQWN0dWFsU3RhcnRUaW1lUmVhY2hlZFBvc3R8Q2hhbmdlQWN0dWFsRW5kVGltZVJlYWNoZWRQb3N0fENoYW5nZVJlcXVlc3RlZFRpbWVSZWFjaGVkUG9zdHxXb3JrT3JkZXJQbGFubmVkU3RhcnRUaW1lUmVhY2hlZFBvc3R8V29ya09yZGVyUGxhbm5lZEVuZFRpbWVSZWFjaGVkUG9zdHxXb3JrT3JkZXJBY3R1YWxTdGFydFRpbWVSZWFjaGVkUG9zdHxXb3JrT3JkZXJBY3R1YWxFbmRUaW1lUmVhY2hlZFBvc3QpPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUcmFuc2FjdGlvbiI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2VDcm9uam9iOjpFdmVudE1vZHVsZSMjIzAzLUNvbmRpdGlvbiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5JVFNNIGV2ZW50IG1vZHVsZSB0aGF0IG1hdGNoZXMgY29uZGl0aW9ucyBhbmQgZXhlY3V0ZXMgYWN0aW9ucy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNoYW5nZUNyb25qb2I6OkV2ZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OkV2ZW50OjpDb25kaXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkV2ZW50Ij4oQ2hhbmdlUGxhbm5lZFN0YXJ0VGltZVJlYWNoZWRQb3N0fENoYW5nZVBsYW5uZWRFbmRUaW1lUmVhY2hlZFBvc3R8Q2hhbmdlQWN0dWFsU3RhcnRUaW1lUmVhY2hlZFBvc3R8Q2hhbmdlQWN0dWFsRW5kVGltZVJlYWNoZWRQb3N0fENoYW5nZVJlcXVlc3RlZFRpbWVSZWFjaGVkUG9zdHxXb3JrT3JkZXJQbGFubmVkU3RhcnRUaW1lUmVhY2hlZFBvc3R8V29ya09yZGVyUGxhbm5lZEVuZFRpbWVSZWFjaGVkUG9zdHxXb3JrT3JkZXJBY3R1YWxTdGFydFRpbWVSZWFjaGVkUG9zdHxXb3JrT3JkZXJBY3R1YWxFbmRUaW1lUmVhY2hlZFBvc3QpPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUcmFuc2FjdGlvbiI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2VNYW5hZ2VtZW50Tm90aWZpY2F0aW9uOjpFdmVudE1vZHVsZSMjIzAxLUhpc3RvcnlBZGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01DaGFuZ2U6OkV2ZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OkV2ZW50OjpIaXN0b3J5QWRkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+KENoYW5nZU5vdGlmaWNhdGlvblNlbnRQb3N0fFdvcmtPcmRlck5vdGlmaWNhdGlvblNlbnRQb3N0KTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHJhbnNhY3Rpb24iPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ29uZGl0aW9uOjpFdmVudE1vZHVsZSMjIzAxLUhpc3RvcnlBZGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNvbmRpdGlvbnMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkV2ZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OkV2ZW50OjpIaXN0b3J5QWRkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+KENvbmRpdGlvbkFkZFBvc3R8Q29uZGl0aW9uVXBkYXRlUG9zdHxDb25kaXRpb25EZWxldGVQb3N0fENvbmRpdGlvbkRlbGV0ZUFsbFBvc3R8RXhwcmVzc2lvbkFkZFBvc3R8RXhwcmVzc2lvblVwZGF0ZVBvc3R8RXhwcmVzc2lvbkRlbGV0ZVBvc3R8RXhwcmVzc2lvbkRlbGV0ZUFsbFBvc3R8QWN0aW9uQWRkUG9zdHxBY3Rpb25VcGRhdGVQb3N0fEFjdGlvbkRlbGV0ZVBvc3R8QWN0aW9uRGVsZXRlQWxsUG9zdHxBY3Rpb25FeGVjdXRlUG9zdCk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRyYW5zYWN0aW9uIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNvbmRpdGlvbjo6RXZlbnRNb2R1bGUjIyMwMi1Ob3RpZmljYXRpb24iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SVRTTSBldmVudCBtb2R1bGUgdGhhdCBzZW5kcyBub3RpZmljYXRpb25zLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpFdmVudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpFdmVudDo6Tm90aWZpY2F0aW9uPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+KEFjdGlvbkV4ZWN1dGVQb3N0KTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHJhbnNhY3Rpb24iPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpDaGFuZ2VTZWFyY2g6Ok1pcnJvckRCIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgaWYgdGhlIGNoYW5nZSBzZWFyY2ggYW5kIHRoZSB3b3Jrb3JkZXIgc2VhcmNoIGZ1bmN0aW9ucyBjb3VsZCB1c2UgdGhlIG1pcnJvciBEQi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TWlycm9yREI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjAiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIiBUcmFuc2xhdGFibGU9IjEiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIiBUcmFuc2xhdGFibGU9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRHluYW1pY0ZpZWxkczo6T2JqZWN0VHlwZSMjI0lUU01DaGFuZ2UiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pY0ZpZWxkIG9iamVjdCByZWdpc3RyYXRpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkR5bmFtaWNGaWVsZHM6Ok9iamVjdFR5cGU6OlJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEaXNwbGF5TmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5JVFNNQ2hhbmdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6Ok9iamVjdFR5cGU6OklUU01DaGFuZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjQ1MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkR5bmFtaWNGaWVsZHM6Ok9iamVjdFR5cGUjIyNJVFNNV29ya09yZGVyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkR5bmFtaWNGaWVsZCBvYmplY3QgcmVnaXN0cmF0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5EeW5hbWljRmllbGRzOjpPYmplY3RUeXBlOjpSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGlzcGxheU5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+SVRTTVdvcmtPcmRlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpPYmplY3RUeXBlOjpJVFNNV29ya09yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj40NjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpDYWNoZVRUTCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5DYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudC4gRGVmYXVsdDogNSBkYXlzICg3MjAwIG1pbnV0ZXMpLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpDYWNoZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+NzIwMDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OlRvb2xCYXI6OkNhY2hlVFRMIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50IHRvb2xiYXJzLiBEZWZhdWx0OiAzIGhvdXJzICgxODAgbWludXRlcykuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkNhY2hlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj4xODA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VHlwZXMgb2YgdGlja2V0cywgd2hlcmUgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgYSBsaW5rIHRvIGFkZCBhIGNoYW5nZSB3aWxsIGJlIGRpc3BsYXllZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPlJmQzwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpSZXN0cmljdFRpY2tldFR5cGVzOjpHcm91cHMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+T25seSB1c2VycyBvZiB0aGVzZSBncm91cHMgaGF2ZSB0aGUgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRpY2tldCB0eXBlcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiIGlmIHRoZSBmZWF0dXJlICJUaWNrZXQ6OkFjbDo6TW9kdWxlIyMjMjAwLVRpY2tldDo6QWNsOjpNb2R1bGUiIGlzIGVuYWJsZWQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01DaGFuZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5pdHNtLWNoYW5nZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPml0c20tY2hhbmdlLWJ1aWxkZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5pdHNtLWNoYW5nZS1tYW5hZ2VyPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkNvdW50ZXJMb2ciIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TG9nZmlsZSBmb3IgdGhlIElUU00gY2hhbmdlIGNvdW50ZXIuIFRoaXMgZmlsZSBpcyB1c2VkIGZvciBjcmVhdGluZyB0aGUgY2hhbmdlIG51bWJlcnMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01DaGFuZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPiZsdDtPVFJTX0NPTkZJR19Ib21lJmd0Oy92YXIvbG9nL0lUU01DaGFuZ2VDb3VudGVyLmxvZzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Okhvb2siIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhlIGlkZW50aWZpZXIgZm9yIGEgY2hhbmdlLCBlLmcuIENoYW5nZSMsIE15Q2hhbmdlIy4gVGhlIGRlZmF1bHQgaXMgQ2hhbmdlIy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+Q2hhbmdlIzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OlN0YXRlTG9jazo6QWxsb3dFbmRTdGF0ZXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBpZiByZWFjaGFibGUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUpIGNoYW5nZSBlbmQgc3RhdGVzIHNob3VsZCBiZSBhbGxvd2VkIGlmIGEgY2hhbmdlIGlzIGluIGEgbG9ja2VkIHN0YXRlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCIgVHJhbnNsYXRhYmxlPSIxIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSIgVHJhbnNsYXRhYmxlPSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OlN0YXRlOjpTaWduYWwiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2lnbmFscyBmb3IgZWFjaCBJVFNNQ2hhbmdlIHN0YXRlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InJlcXVlc3RlZCI+Z3JheWxlZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0icGVuZGluZyBhcHByb3ZhbCI+eWVsbG93bGVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJyZWplY3RlZCI+cmVkbGVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJhcHByb3ZlZCI+Z3JlZW5sZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImluIHByb2dyZXNzIj55ZWxsb3dsZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InBlbmRpbmcgcGlyIj55ZWxsb3dsZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InN1Y2Nlc3NmdWwiPmdyZWVubGVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJmYWlsZWQiPnJlZGxlZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iY2FuY2VsZWQiPnJlZGxlZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0icmV0cmFjdGVkIj5ncmF5bGVkPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6Q2F0ZWdvcnk6OkRlZmF1bHQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNhdGVnb3J5IG9mIGEgY2hhbmdlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj4zIG5vcm1hbDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkltcGFjdDo6RGVmYXVsdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW1wYWN0IG9mIGEgY2hhbmdlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj4zIG5vcm1hbDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkF0dHJpYnV0ZTo6Q29tcGFyZVZhbHVlOjpGaWVsZFR5cGUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciBjaGFuZ2UgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VTdGF0ZUlEIj5TZWxlY3Rpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVRpdGxlIj5UZXh0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeUlEIj5TZWxlY3Rpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltcGFjdElEIj5TZWxlY3Rpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5SUQiPlNlbGVjdGlvbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlTWFuYWdlcklEIj5TZWxlY3Rpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZUJ1aWxkZXJJRCI+U2VsZWN0aW9uPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXF1ZXN0ZWRUaW1lIj5EYXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkU3RhcnRUaW1lIj5EYXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRW5kVGltZSI+RGF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsU3RhcnRUaW1lIj5EYXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxFbmRUaW1lIj5EYXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRWZmb3J0Ij5UZXh0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY2NvdW50ZWRUaW1lIj5UZXh0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEeW5hbWljRmllbGQiPlRleHQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpNYXBwaW5nOjpFeHByZXNzaW9uOjpPYmplY3Q6OkF0dHJpYnV0ZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvYmplY3QgYXR0cmlidXRlcyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciBjaGFuZ2Ugb2JqZWN0cyBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpFeHByZXNzaW9uOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVN0YXRlSUQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVRpdGxlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeUlEIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJbXBhY3RJRCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpb3JpdHlJRCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlTWFuYWdlcklEIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VCdWlsZGVySUQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJlcXVlc3RlZFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRTdGFydFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRFbmRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxTdGFydFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbEVuZFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRFZmZvcnQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjY291bnRlZFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkR5bmFtaWNGaWVsZCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Ok1hcHBpbmc6OkV4cHJlc3Npb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNDaGFuZ2VTdGF0ZUlEIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZVN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6RXhwcmVzc2lvbjo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBlbXB0eSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90IGVtcHR5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBncmVhdGVyIHRoYW4iPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGxlc3MgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgYmVmb3JlIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBhZnRlciI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iY29udGFpbnMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Im5vdCBjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iYmVnaW5zIHdpdGgiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImVuZHMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Ok1hcHBpbmc6OkV4cHJlc3Npb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNDaGFuZ2VUaXRsZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpFeHByZXNzaW9uOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QgZW1wdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGdyZWF0ZXIgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbGVzcyB0aGFuIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBiZWZvcmUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGFmdGVyIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJjb250YWlucyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ibm90IGNvbnRhaW5zIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJiZWdpbnMgd2l0aCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZW5kcyB3aXRoIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6TWFwcGluZzo6RXhwcmVzc2lvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI0NhdGVnb3J5SUQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2F0ZWdvcnlJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpFeHByZXNzaW9uOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGVtcHR5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QgZW1wdHkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGdyZWF0ZXIgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbGVzcyB0aGFuIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBiZWZvcmUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGFmdGVyIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ibm90IGNvbnRhaW5zIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJiZWdpbnMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZW5kcyB3aXRoIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6TWFwcGluZzo6RXhwcmVzc2lvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI0ltcGFjdElEIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEltcGFjdElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkV4cHJlc3Npb246OklUU01DaGFuZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIG5vdCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgZW1wdHkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIG5vdCBlbXB0eSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgZ3JlYXRlciB0aGFuIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBsZXNzIHRoYW4iPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGJlZm9yZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgYWZ0ZXIiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImNvbnRhaW5zIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJub3QgY29udGFpbnMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImJlZ2lucyB3aXRoIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJlbmRzIHdpdGgiPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpNYXBwaW5nOjpFeHByZXNzaW9uOjpBdHRyaWJ1dGU6Ok9wZXJhdG9yIyMjUHJpb3JpdHlJRCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQcmlvcml0eUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkV4cHJlc3Npb246OklUU01DaGFuZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIG5vdCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgZW1wdHkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIG5vdCBlbXB0eSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgZ3JlYXRlciB0aGFuIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBsZXNzIHRoYW4iPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGJlZm9yZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgYWZ0ZXIiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImNvbnRhaW5zIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJub3QgY29udGFpbnMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImJlZ2lucyB3aXRoIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJlbmRzIHdpdGgiPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpNYXBwaW5nOjpFeHByZXNzaW9uOjpBdHRyaWJ1dGU6Ok9wZXJhdG9yIyMjQ2hhbmdlTWFuYWdlcklEIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZU1hbmFnZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpFeHByZXNzaW9uOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QgZW1wdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGdyZWF0ZXIgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbGVzcyB0aGFuIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBiZWZvcmUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGFmdGVyIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ibm90IGNvbnRhaW5zIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJiZWdpbnMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZW5kcyB3aXRoIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6TWFwcGluZzo6RXhwcmVzc2lvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI0NoYW5nZUJ1aWxkZXJJRCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VCdWlsZGVySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6RXhwcmVzc2lvbjo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBlbXB0eSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90IGVtcHR5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBncmVhdGVyIHRoYW4iPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGxlc3MgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgYmVmb3JlIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBhZnRlciI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iY29udGFpbnMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Im5vdCBjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iYmVnaW5zIHdpdGgiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImVuZHMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Ok1hcHBpbmc6OkV4cHJlc3Npb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNSZXF1ZXN0ZWRUaW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFJlcXVlc3RlZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6RXhwcmVzc2lvbjo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBlbXB0eSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90IGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBncmVhdGVyIHRoYW4iPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGxlc3MgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgYmVmb3JlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBhZnRlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iY29udGFpbnMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Im5vdCBjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iYmVnaW5zIHdpdGgiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImVuZHMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Ok1hcHBpbmc6OkV4cHJlc3Npb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNQbGFubmVkU3RhcnRUaW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6RXhwcmVzc2lvbjo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBlbXB0eSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90IGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBncmVhdGVyIHRoYW4iPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGxlc3MgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgYmVmb3JlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBhZnRlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iY29udGFpbnMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Im5vdCBjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iYmVnaW5zIHdpdGgiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImVuZHMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Ok1hcHBpbmc6OkV4cHJlc3Npb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNQbGFubmVkRW5kVGltZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpFeHByZXNzaW9uOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QgZW1wdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGdyZWF0ZXIgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbGVzcyB0aGFuIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBiZWZvcmUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGFmdGVyIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ibm90IGNvbnRhaW5zIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJiZWdpbnMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZW5kcyB3aXRoIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6TWFwcGluZzo6RXhwcmVzc2lvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI0FjdHVhbFN0YXJ0VGltZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6RXhwcmVzc2lvbjo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBlbXB0eSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90IGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBncmVhdGVyIHRoYW4iPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGxlc3MgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgYmVmb3JlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBhZnRlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iY29udGFpbnMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Im5vdCBjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iYmVnaW5zIHdpdGgiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImVuZHMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Ok1hcHBpbmc6OkV4cHJlc3Npb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNBY3R1YWxFbmRUaW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbEVuZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6RXhwcmVzc2lvbjo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBlbXB0eSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90IGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBncmVhdGVyIHRoYW4iPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGxlc3MgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgYmVmb3JlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBhZnRlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iY29udGFpbnMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Im5vdCBjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iYmVnaW5zIHdpdGgiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImVuZHMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Ok1hcHBpbmc6OkV4cHJlc3Npb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNQbGFubmVkRWZmb3J0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFZmZvcnQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6RXhwcmVzc2lvbjo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBlbXB0eSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90IGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBncmVhdGVyIHRoYW4iPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGxlc3MgdGhhbiI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgYmVmb3JlIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBhZnRlciI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iY29udGFpbnMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Im5vdCBjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iYmVnaW5zIHdpdGgiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImVuZHMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Ok1hcHBpbmc6OkV4cHJlc3Npb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNBY2NvdW50ZWRUaW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjY291bnRlZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6RXhwcmVzc2lvbjo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBlbXB0eSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90IGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBncmVhdGVyIHRoYW4iPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGxlc3MgdGhhbiI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgYmVmb3JlIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBhZnRlciI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iY29udGFpbnMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Im5vdCBjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iYmVnaW5zIHdpdGgiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImVuZHMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Ok1hcHBpbmc6OkV4cHJlc3Npb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgRHluYW1pY0ZpZWxkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkV4cHJlc3Npb246OklUU01DaGFuZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIG5vdCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgZW1wdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIG5vdCBlbXB0eSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgZ3JlYXRlciB0aGFuIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBsZXNzIHRoYW4iPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGJlZm9yZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgYWZ0ZXIiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImNvbnRhaW5zIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJub3QgY29udGFpbnMiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImJlZ2lucyB3aXRoIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJlbmRzIHdpdGgiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6TWFwcGluZzo6QWN0aW9uOjpPYmplY3Q6OkF0dHJpYnV0ZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvYmplY3QgYXR0cmlidXRlcyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciBjaGFuZ2Ugb2JqZWN0cyBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpBY3Rpb246OklUU01DaGFuZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlU3RhdGVJRCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGl0bGUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhdGVnb3J5SUQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltcGFjdElEIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eUlEIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VNYW5hZ2VySUQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZUJ1aWxkZXJJRCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVxdWVzdGVkVGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZFN0YXJ0VGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZEVuZFRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbFN0YXJ0VGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsRW5kVGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZEVmZm9ydCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWNjb3VudGVkVGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRHluYW1pY0ZpZWxkIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6TWFwcGluZzo6QWN0aW9uOjpBdHRyaWJ1dGU6Ok9wZXJhdG9yIyMjQ2hhbmdlU3RhdGVJRCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkFjdGlvbjo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJzZXQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImxvY2siPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpNYXBwaW5nOjpBY3Rpb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNDaGFuZ2VUaXRsZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpBY3Rpb246OklUU01DaGFuZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ic2V0Ij4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6TWFwcGluZzo6QWN0aW9uOjpBdHRyaWJ1dGU6Ok9wZXJhdG9yIyMjQ2F0ZWdvcnlJRCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDYXRlZ29yeUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkFjdGlvbjo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJzZXQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpNYXBwaW5nOjpBY3Rpb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNJbXBhY3RJRCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBJbXBhY3RJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpBY3Rpb246OklUU01DaGFuZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ic2V0Ij4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6TWFwcGluZzo6QWN0aW9uOjpBdHRyaWJ1dGU6Ok9wZXJhdG9yIyMjUHJpb3JpdHlJRCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQcmlvcml0eUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkFjdGlvbjo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJzZXQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpNYXBwaW5nOjpBY3Rpb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNDaGFuZ2VNYW5hZ2VySUQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlTWFuYWdlcklEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkFjdGlvbjo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJzZXQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpNYXBwaW5nOjpBY3Rpb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNDaGFuZ2VCdWlsZGVySUQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlQnVpbGRlcklEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkFjdGlvbjo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJzZXQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpNYXBwaW5nOjpBY3Rpb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNSZXF1ZXN0ZWRUaW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFJlcXVlc3RlZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6QWN0aW9uOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InNldCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Ok1hcHBpbmc6OkFjdGlvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI1BsYW5uZWRTdGFydFRpbWUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpBY3Rpb246OklUU01DaGFuZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ic2V0Ij4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6TWFwcGluZzo6QWN0aW9uOjpBdHRyaWJ1dGU6Ok9wZXJhdG9yIyMjUGxhbm5lZEVuZFRpbWUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZEVuZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6QWN0aW9uOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InNldCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Ok1hcHBpbmc6OkFjdGlvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI0FjdHVhbFN0YXJ0VGltZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6QWN0aW9uOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InNldCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Ok1hcHBpbmc6OkFjdGlvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI0FjdHVhbEVuZFRpbWUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpBY3Rpb246OklUU01DaGFuZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ic2V0Ij4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6TWFwcGluZzo6QWN0aW9uOjpBdHRyaWJ1dGU6Ok9wZXJhdG9yIyMjUGxhbm5lZEVmZm9ydCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRWZmb3J0IGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkFjdGlvbjo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJzZXQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpNYXBwaW5nOjpBY3Rpb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNBY2NvdW50ZWRUaW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjY291bnRlZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6QWN0aW9uOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InNldCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Ok1hcHBpbmc6OkFjdGlvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI0R5bmFtaWNGaWVsZCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBEeW5hbWljRmllbGQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6QWN0aW9uOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InNldCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6OkF0dHJpYnV0ZTo6Q29tcGFyZVZhbHVlOjpGaWVsZFR5cGUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciB3b3Jrb3JkZXIgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6SVRTTVdvcmtPcmRlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJXb3JrT3JkZXJOdW1iZXIiPlRleHQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlclN0YXRlSUQiPlNlbGVjdGlvbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyVHlwZUlEIj5TZWxlY3Rpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlclRpdGxlIj5UZXh0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJXb3JrT3JkZXJBZ2VudElEIj5TZWxlY3Rpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRTdGFydFRpbWUiPkRhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRFbmRUaW1lIj5EYXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxTdGFydFRpbWUiPkRhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbEVuZFRpbWUiPkRhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRFZmZvcnQiPlRleHQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjY291bnRlZFRpbWUiPlRleHQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkR5bmFtaWNGaWVsZCI+VGV4dDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6Ok1hcHBpbmc6OkV4cHJlc3Npb246Ok9iamVjdDo6QXR0cmlidXRlIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9iamVjdCBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHdvcmtvcmRlciBvYmplY3RzIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkV4cHJlc3Npb246OklUU01Xb3JrT3JkZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyTnVtYmVyIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJXb3JrT3JkZXJTdGF0ZUlEIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJXb3JrT3JkZXJUeXBlSUQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlclRpdGxlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJXb3JrT3JkZXJBZ2VudElEIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkU3RhcnRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRW5kVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsU3RhcnRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxFbmRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRWZmb3J0Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY2NvdW50ZWRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEeW5hbWljRmllbGQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpNYXBwaW5nOjpFeHByZXNzaW9uOjpBdHRyaWJ1dGU6Ok9wZXJhdG9yIyMjV29ya09yZGVyTnVtYmVyIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlck51bWJlciBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpFeHByZXNzaW9uOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGVtcHR5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QgZW1wdHkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGdyZWF0ZXIgdGhhbiI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbGVzcyB0aGFuIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBiZWZvcmUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGFmdGVyIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ibm90IGNvbnRhaW5zIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJiZWdpbnMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZW5kcyB3aXRoIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6TWFwcGluZzo6RXhwcmVzc2lvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI1dvcmtPcmRlclN0YXRlSUQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyU3RhdGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpFeHByZXNzaW9uOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGVtcHR5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QgZW1wdHkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGdyZWF0ZXIgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbGVzcyB0aGFuIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBiZWZvcmUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGFmdGVyIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ibm90IGNvbnRhaW5zIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJiZWdpbnMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZW5kcyB3aXRoIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6TWFwcGluZzo6RXhwcmVzc2lvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI1dvcmtPcmRlclR5cGVJRCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUeXBlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6RXhwcmVzc2lvbjo6SVRTTVdvcmtPcmRlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBlbXB0eSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90IGVtcHR5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBncmVhdGVyIHRoYW4iPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGxlc3MgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgYmVmb3JlIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBhZnRlciI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iY29udGFpbnMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Im5vdCBjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iYmVnaW5zIHdpdGgiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImVuZHMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6Ok1hcHBpbmc6OkV4cHJlc3Npb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNXb3JrT3JkZXJUaXRsZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpFeHByZXNzaW9uOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QgZW1wdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGdyZWF0ZXIgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbGVzcyB0aGFuIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBiZWZvcmUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGFmdGVyIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJjb250YWlucyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ibm90IGNvbnRhaW5zIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJiZWdpbnMgd2l0aCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZW5kcyB3aXRoIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6TWFwcGluZzo6RXhwcmVzc2lvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI1dvcmtPcmRlckFnZW50SUQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyQWdlbnRJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpFeHByZXNzaW9uOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGVtcHR5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QgZW1wdHkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGdyZWF0ZXIgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbGVzcyB0aGFuIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBiZWZvcmUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGFmdGVyIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ibm90IGNvbnRhaW5zIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJiZWdpbnMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZW5kcyB3aXRoIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6TWFwcGluZzo6RXhwcmVzc2lvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI1BsYW5uZWRTdGFydFRpbWUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpFeHByZXNzaW9uOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QgZW1wdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGdyZWF0ZXIgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbGVzcyB0aGFuIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBiZWZvcmUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGFmdGVyIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ibm90IGNvbnRhaW5zIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJiZWdpbnMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZW5kcyB3aXRoIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6TWFwcGluZzo6RXhwcmVzc2lvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI1BsYW5uZWRFbmRUaW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkV4cHJlc3Npb246OklUU01Xb3JrT3JkZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIG5vdCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgZW1wdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIG5vdCBlbXB0eSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgZ3JlYXRlciB0aGFuIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBsZXNzIHRoYW4iPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGJlZm9yZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgYWZ0ZXIiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImNvbnRhaW5zIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJub3QgY29udGFpbnMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImJlZ2lucyB3aXRoIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJlbmRzIHdpdGgiPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpNYXBwaW5nOjpFeHByZXNzaW9uOjpBdHRyaWJ1dGU6Ok9wZXJhdG9yIyMjQWN0dWFsU3RhcnRUaW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpFeHByZXNzaW9uOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QgZW1wdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGdyZWF0ZXIgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbGVzcyB0aGFuIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBiZWZvcmUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGFmdGVyIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ibm90IGNvbnRhaW5zIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJiZWdpbnMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZW5kcyB3aXRoIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6TWFwcGluZzo6RXhwcmVzc2lvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI0FjdHVhbEVuZFRpbWUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpFeHByZXNzaW9uOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QgZW1wdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGdyZWF0ZXIgdGhhbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbGVzcyB0aGFuIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBiZWZvcmUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGFmdGVyIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ibm90IGNvbnRhaW5zIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJiZWdpbnMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZW5kcyB3aXRoIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6TWFwcGluZzo6RXhwcmVzc2lvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI1BsYW5uZWRFZmZvcnQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZEVmZm9ydCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpFeHByZXNzaW9uOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QgZW1wdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGdyZWF0ZXIgdGhhbiI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbGVzcyB0aGFuIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBiZWZvcmUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGFmdGVyIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ibm90IGNvbnRhaW5zIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJiZWdpbnMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZW5kcyB3aXRoIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6TWFwcGluZzo6RXhwcmVzc2lvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI0FjY291bnRlZFRpbWUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWNjb3VudGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpFeHByZXNzaW9uOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBub3QgZW1wdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGdyZWF0ZXIgdGhhbiI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbGVzcyB0aGFuIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBiZWZvcmUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGFmdGVyIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJjb250YWlucyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ibm90IGNvbnRhaW5zIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJiZWdpbnMgd2l0aCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZW5kcyB3aXRoIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6TWFwcGluZzo6RXhwcmVzc2lvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI0R5bmFtaWNGaWVsZCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBEeW5hbWljRmllbGQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6RXhwcmVzc2lvbjo6SVRTTVdvcmtPcmRlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBlbXB0eSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgbm90IGVtcHR5Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBncmVhdGVyIHRoYW4iPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImlzIGxlc3MgdGhhbiI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaXMgYmVmb3JlIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJpcyBhZnRlciI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iY29udGFpbnMiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Im5vdCBjb250YWlucyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iYmVnaW5zIHdpdGgiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImVuZHMgd2l0aCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6Ok1hcHBpbmc6OkFjdGlvbjo6T2JqZWN0OjpBdHRyaWJ1dGUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6QWN0aW9uOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlck51bWJlciI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyU3RhdGVJRCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyVHlwZUlEIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJXb3JrT3JkZXJUaXRsZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyQWdlbnRJRCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZFN0YXJ0VGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZEVuZFRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbFN0YXJ0VGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsRW5kVGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZEVmZm9ydCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWNjb3VudGVkVGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRHluYW1pY0ZpZWxkIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6TWFwcGluZzo6QWN0aW9uOjpBdHRyaWJ1dGU6Ok9wZXJhdG9yIyMjV29ya09yZGVyTnVtYmVyIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlck51bWJlciBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpBY3Rpb246OklUU01Xb3JrT3JkZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ic2V0Ij4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6TWFwcGluZzo6QWN0aW9uOjpBdHRyaWJ1dGU6Ok9wZXJhdG9yIyMjV29ya09yZGVyU3RhdGVJRCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkFjdGlvbjo6SVRTTVdvcmtPcmRlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJzZXQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImxvY2siPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpNYXBwaW5nOjpBY3Rpb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNXb3JrT3JkZXJUeXBlSUQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVHlwZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkFjdGlvbjo6SVRTTVdvcmtPcmRlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJzZXQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpNYXBwaW5nOjpBY3Rpb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNXb3JrT3JkZXJUaXRsZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpBY3Rpb246OklUU01Xb3JrT3JkZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ic2V0Ij4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6TWFwcGluZzo6QWN0aW9uOjpBdHRyaWJ1dGU6Ok9wZXJhdG9yIyMjV29ya09yZGVyQWdlbnRJRCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJBZ2VudElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkFjdGlvbjo6SVRTTVdvcmtPcmRlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJzZXQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpNYXBwaW5nOjpBY3Rpb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNQbGFubmVkU3RhcnRUaW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6QWN0aW9uOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InNldCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6Ok1hcHBpbmc6OkFjdGlvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI1BsYW5uZWRFbmRUaW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkFjdGlvbjo6SVRTTVdvcmtPcmRlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJzZXQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpNYXBwaW5nOjpBY3Rpb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNBY3R1YWxTdGFydFRpbWUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsU3RhcnRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkFjdGlvbjo6SVRTTVdvcmtPcmRlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJzZXQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpNYXBwaW5nOjpBY3Rpb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNBY3R1YWxFbmRUaW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbEVuZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNvbmRpdGlvbjo6QWN0aW9uOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InNldCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6Ok1hcHBpbmc6OkFjdGlvbjo6QXR0cmlidXRlOjpPcGVyYXRvciMjI1BsYW5uZWRFZmZvcnQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZEVmZm9ydCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29uZGl0aW9uOjpBY3Rpb246OklUU01Xb3JrT3JkZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ic2V0Ij4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6TWFwcGluZzo6QWN0aW9uOjpBdHRyaWJ1dGU6Ok9wZXJhdG9yIyMjQWNjb3VudGVkVGltZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY2NvdW50ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkFjdGlvbjo6SVRTTVdvcmtPcmRlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJzZXQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpNYXBwaW5nOjpBY3Rpb246OkF0dHJpYnV0ZTo6T3BlcmF0b3IjIyNEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgRHluYW1pY0ZpZWxkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db25kaXRpb246OkFjdGlvbjo6SVRTTVdvcmtPcmRlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJzZXQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpIb29rIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoZSBpZGVudGlmaWVyIGZvciBhIHdvcmtvcmRlciwgZS5nLiBXb3Jrb3JkZXIjLCBNeVdvcmtvcmRlciMuIFRoZSBkZWZhdWx0IGlzIFdvcmtvcmRlciMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Xb3JrT3JkZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPldvcmtvcmRlciM8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpTdGF0ZUxvY2s6OkFsbG93RW5kU3RhdGVzIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgaWYgcmVhY2hhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lKSB3b3Jrb3JkZXIgZW5kIHN0YXRlcyBzaG91bGQgYmUgYWxsb3dlZCBpZiBhIHdvcmtvcmRlciBpcyBpbiBhIGxvY2tlZCBzdGF0ZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTVdvcmtPcmRlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiIFRyYW5zbGF0YWJsZT0iMSI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiIFRyYW5zbGF0YWJsZT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpTdGF0ZTo6U2lnbmFsIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZSB0aGUgc2lnbmFscyBmb3IgZWFjaCB3b3Jrb3JkZXIgc3RhdGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Xb3JrT3JkZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iY3JlYXRlZCI+Z3JheWxlZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iYWNjZXB0ZWQiPmdyYXlsZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InJlYWR5Ij55ZWxsb3dsZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImluIHByb2dyZXNzIj55ZWxsb3dsZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImNsb3NlZCI+Z3JlZW5sZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImNhbmNlbGVkIj5yZWRsZWQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpUeXBlOjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgdHlwZSBmb3IgYSB3b3Jrb3JkZXIuIFRoaXMgZW50cnkgbXVzdCBleGlzdCBpbiBnZW5lcmFsIGNhdGFsb2cgY2xhc3MgJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6VHlwZScuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Xb3JrT3JkZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPndvcmtvcmRlcjwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6OkFjdHVhbFN0YXJ0VGltZVNldDo6U3RhdGVzIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkEgbGlzdCBvZiB3b3Jrb3JkZXIgc3RhdGVzLCBhdCB3aGljaCB0aGUgQWN0dWFsU3RhcnRUaW1lIG9mIGEgd29ya29yZGVyIHdpbGwgYmUgc2V0IGlmIGl0IHdhcyBlbXB0eSBhdCB0aGlzIHBvaW50LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+aW4gcHJvZ3Jlc3M8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6VGFrZVBlcm1pc3Npb246Okxpc3QiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QSBsaXN0IG9mIHRoZSBhZ2VudHMgd2hvIGhhdmUgcGVybWlzc2lvbiB0byB0YWtlIHdvcmtvcmRlcnMuIEtleSBpcyBhIGxvZ2luIG5hbWUuIENvbnRlbnQgaXMgMCBvciAxLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IiI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6OlRpbWVQZXJpb2QiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgcGVyaW9kIChpbiB5ZWFycyksIGluIHdoaWNoIHN0YXJ0IGFuZCBlbmQgdGltZXMgY2FuIGJlIHNlbGVjdGVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlllYXJQZXJpb2RQYXN0Ij41PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJZZWFyUGVyaW9kRnV0dXJlIj41PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6Okhpc3RvcnlPcmRlciIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyB0aGUgY2hhbmdlIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3SGlzdG9yeTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0ibm9ybWFsIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0icmV2ZXJzZSIgVHJhbnNsYXRhYmxlPSIxIj5yZXZlcnNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJub3JtYWwiIFRyYW5zbGF0YWJsZT0iMSI+bm9ybWFsPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlIyMjRmlsdGVyOjpDaGFuZ2VTdGF0ZXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZU92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+cmVxdWVzdGVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+cGVuZGluZyBhcHByb3ZhbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPnJlamVjdGVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+YXBwcm92ZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5pbiBwcm9ncmVzczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPnBlbmRpbmcgcGlyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+c3VjY2Vzc2Z1bDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPmZhaWxlZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPmNhbmNlbGVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+cmV0cmFjdGVkPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2UjIyNPcmRlcjo6RGVmYXVsdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBvdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q2hhbmdlT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IlVwIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRG93biIgVHJhbnNsYXRhYmxlPSIxIj5Eb3duPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJVcCIgVHJhbnNsYXRhYmxlPSIxIj5VcDwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZSMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhY2Nlc3MgdGhlIG92ZXJ2aWV3IG9mIGFsbCBjaGFuZ2VzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il4ocnd8cm8pJCI+cm88L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlIyMjU2hvd0NvbHVtbnMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VTdGF0ZVNpZ25hbCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlTnVtYmVyIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaXRsZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlQnVpbGRlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlTWFuYWdlciI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyQ291bnQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVN0YXRlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSW1wYWN0Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2VydmljZXMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJlcXVlc3RlZFRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRTdGFydFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRFbmRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxTdGFydFRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbEVuZFRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyZWF0ZVRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkR5bmFtaWNGaWVsZF9DaGFuZ2VGaWVsZE5hbWUxIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEeW5hbWljRmllbGRfQ2hhbmdlRmllbGROYW1lMiI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2UjIyNTb3J0Qnk6OkRlZmF1bHQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZU92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJDaGFuZ2VOdW1iZXIiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VOdW1iZXIiPkNoYW5nZU51bWJlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGl0bGUiPkNoYW5nZVRpdGxlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VTdGF0ZUlEIj5DaGFuZ2VTdGF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnlJRCI+Q2F0ZWdvcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltcGFjdElEIj5JbXBhY3Q8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5SUQiPlByaW9yaXR5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXF1ZXN0ZWRUaW1lIj5SZXF1ZXN0ZWRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkU3RhcnRUaW1lIj5QbGFubmVkU3RhcnRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRW5kVGltZSI+UGxhbm5lZEVuZFRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbFN0YXJ0VGltZSI+QWN0dWFsU3RhcnRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxFbmRUaW1lIj5BY3R1YWxFbmRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSI+UHJpb3JpdHk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyZWF0ZVRpbWUiPkNyZWF0ZVRpbWU8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VBZGQjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZUFkZDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il4ocnd8cm8pJCI+cnc8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlQWRkIyMjUmVxdWVzdGVkVGltZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2V0IGJ5IGN1c3RvbWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VBZGQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIiBUcmFuc2xhdGFibGU9IjEiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIiBUcmFuc2xhdGFibGU9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZUFkZCMjI0R5bmFtaWNGaWVsZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q2hhbmdlQWRkPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzIGZyb20gdGVtcGxhdGVzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VBZGRGcm9tVGVtcGxhdGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeKHJ3fHJvKSQiPnJ3PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSBjaGFuZ2VzJyBDQUIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZUNBQlRlbXBsYXRlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXihyd3xybykkIj5ydzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VDb25kaXRpb24jIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VDb25kaXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeKHJ3fHJvKSQiPnJ3PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VDb25kaXRpb25FZGl0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXihyd3xybykkIj5ydzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VFZGl0IyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgY2hhbmdlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q2hhbmdlRWRpdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il4ocnd8cm8pJCI+cnc8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlRGVsZXRlIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjaGFuZ2VzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VEZWxldGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeKHJ3fHJvKSQiPnJ3PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZURlbGV0ZSMjI0NoYW5nZVN0YXRlcyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSBhbGxvd2VkIHRvIGRlbGV0ZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q2hhbmdlRGVsZXRlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+cmVxdWVzdGVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+cGVuZGluZyBhcHByb3ZhbDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlRWRpdCMjI1JlcXVlc3RlZFRpbWUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNldCBieSBjdXN0b21lci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q2hhbmdlRWRpdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiIFRyYW5zbGF0YWJsZT0iMSI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiIFRyYW5zbGF0YWJsZT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlRWRpdCMjI0NoYW5nZVN0YXRlIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgaWYgdGhlIGNoYW5nZSBzdGF0ZSBjYW4gYmUgc2V0IGluIEFnZW50SVRTTUNoYW5nZUVkaXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZUVkaXQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjAiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIiBUcmFuc2xhdGFibGU9IjEiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIiBUcmFuc2xhdGFibGU9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZUVkaXQjIyNEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VFZGl0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlUFNBIyMjRmlsdGVyOjpDaGFuZ2VTdGF0ZXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VQU0FPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPmFwcHJvdmVkPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VQU0EjIyNPcmRlcjo6RGVmYXVsdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZVBTQU92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJVcCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRvd24iIFRyYW5zbGF0YWJsZT0iMSI+RG93bjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVXAiIFRyYW5zbGF0YWJsZT0iMSI+VXA8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VQU0EjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2UgUFNBLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VQU0FPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il4ocnd8cm8pJCI+cm88L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlUFNBIyMjU2hvd0NvbHVtbnMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgQ2hhbmdlIFBTQSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q2hhbmdlUFNBT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlU3RhdGVTaWduYWwiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZU51bWJlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGl0bGUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZUJ1aWxkZXIiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZU1hbmFnZXIiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlckNvdW50Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VTdGF0ZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltcGFjdCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpb3JpdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNlcnZpY2VzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXF1ZXN0ZWRUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkU3RhcnRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRW5kVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsU3RhcnRUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxFbmRUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDcmVhdGVUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEeW5hbWljRmllbGRfQ2hhbmdlRmllbGROYW1lMSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRHluYW1pY0ZpZWxkX0NoYW5nZUZpZWxkTmFtZTIiPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlUFNBIyMjU29ydEJ5OjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q2hhbmdlUFNBT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IlBsYW5uZWRTdGFydFRpbWUiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VOdW1iZXIiPkNoYW5nZU51bWJlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGl0bGUiPkNoYW5nZVRpdGxlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VTdGF0ZUlEIj5DaGFuZ2VTdGF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnlJRCI+Q2F0ZWdvcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltcGFjdElEIj5JbXBhY3Q8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5SUQiPlByaW9yaXR5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXF1ZXN0ZWRUaW1lIj5SZXF1ZXN0ZWRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkU3RhcnRUaW1lIj5QbGFubmVkU3RhcnRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRW5kVGltZSI+UGxhbm5lZEVuZFRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbFN0YXJ0VGltZSI+QWN0dWFsU3RhcnRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxFbmRUaW1lIj5BY3R1YWxFbmRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSI+UHJpb3JpdHk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyZWF0ZVRpbWUiPkNyZWF0ZVRpbWU8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VSZXNldCMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcHJpdmlsZWdlcyB0byByZXNldCBjaGFuZ2VzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VSZXNldDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il4ocnd8cm8pJCI+cnc8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlU2NoZWR1bGUjIyNGaWx0ZXI6OkNoYW5nZVN0YXRlcyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q2hhbmdlU2NoZWR1bGVPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPmFwcHJvdmVkPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VTY2hlZHVsZSMjI09yZGVyOjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VTY2hlZHVsZU92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJVcCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRvd24iIFRyYW5zbGF0YWJsZT0iMSI+RG93bjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVXAiIFRyYW5zbGF0YWJsZT0iMSI+VXA8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VTY2hlZHVsZSMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIENoYW5nZSBTY2hlZHVsZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q2hhbmdlU2NoZWR1bGVPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il4ocnd8cm8pJCI+cm88L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlU2NoZWR1bGUjIyNTaG93Q29sdW1ucyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgU2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZVNjaGVkdWxlT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlU3RhdGVTaWduYWwiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZU51bWJlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGl0bGUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZUJ1aWxkZXIiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZU1hbmFnZXIiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlckNvdW50Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VTdGF0ZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltcGFjdCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpb3JpdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNlcnZpY2VzIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXF1ZXN0ZWRUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkU3RhcnRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRW5kVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsU3RhcnRUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxFbmRUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDcmVhdGVUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEeW5hbWljRmllbGRfQ2hhbmdlRmllbGROYW1lMSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRHluYW1pY0ZpZWxkX0NoYW5nZUZpZWxkTmFtZTIiPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlU2NoZWR1bGUjIyNTb3J0Qnk6OkRlZmF1bHQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZVNjaGVkdWxlT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IlBsYW5uZWRTdGFydFRpbWUiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VOdW1iZXIiPkNoYW5nZU51bWJlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGl0bGUiPkNoYW5nZVRpdGxlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VTdGF0ZUlEIj5DaGFuZ2VTdGF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnlJRCI+Q2F0ZWdvcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltcGFjdElEIj5JbXBhY3Q8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5SUQiPlByaW9yaXR5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXF1ZXN0ZWRUaW1lIj5SZXF1ZXN0ZWRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkU3RhcnRUaW1lIj5QbGFubmVkU3RhcnRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRW5kVGltZSI+UGxhbm5lZEVuZFRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbFN0YXJ0VGltZSI+QWN0dWFsU3RhcnRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxFbmRUaW1lIj5BY3R1YWxFbmRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSI+UHJpb3JpdHk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyZWF0ZVRpbWUiPkNyZWF0ZVRpbWU8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VIaXN0b3J5IyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZUhpc3Rvcnk8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeKHJ3fHJvKSQiPnJvPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgem9vbSBvZiBhIGNoYW5nZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q2hhbmdlSGlzdG9yeVpvb208L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeKHJ3fHJvKSQiPnJvPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29ucyMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBpbnZvbHZlZCBwZXJzb25zIG9mIGEgY2hhbmdlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VJbnZvbHZlZFBlcnNvbnM8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeKHJ3fHJvKSQiPnJ3PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZU1hbmFnZXIjIyNGaWx0ZXI6OkNoYW5nZVN0YXRlcyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VNYW5hZ2VyT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5yZXF1ZXN0ZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5wZW5kaW5nIGFwcHJvdmFsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+YXBwcm92ZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5pbiBwcm9ncmVzczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPnBlbmRpbmcgcGlyPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VNYW5hZ2VyIyMjT3JkZXI6OkRlZmF1bHQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q2hhbmdlTWFuYWdlck92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJVcCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRvd24iIFRyYW5zbGF0YWJsZT0iMSI+RG93bjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVXAiIFRyYW5zbGF0YWJsZT0iMSI+VXA8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VNYW5hZ2VyIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIHRoZSBjaGFuZ2UgbWFuYWdlci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q2hhbmdlTWFuYWdlck92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXihyd3xybykkIj5ybzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VNYW5hZ2VyIyMjU2hvd0NvbHVtbnMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZU1hbmFnZXJPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VTdGF0ZVNpZ25hbCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlTnVtYmVyIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaXRsZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlQnVpbGRlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlTWFuYWdlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyQ291bnQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVN0YXRlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSW1wYWN0Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2VydmljZXMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJlcXVlc3RlZFRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRTdGFydFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRFbmRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxTdGFydFRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbEVuZFRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyZWF0ZVRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkR5bmFtaWNGaWVsZF9DaGFuZ2VGaWVsZE5hbWUxIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEeW5hbWljRmllbGRfQ2hhbmdlRmllbGROYW1lMiI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VNYW5hZ2VyIyMjU29ydEJ5OjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZU1hbmFnZXJPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iQ2hhbmdlTnVtYmVyIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlTnVtYmVyIj5DaGFuZ2VOdW1iZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVRpdGxlIj5DaGFuZ2VUaXRsZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlU3RhdGVJRCI+Q2hhbmdlU3RhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhdGVnb3J5SUQiPkNhdGVnb3J5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJbXBhY3RJRCI+SW1wYWN0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eUlEIj5Qcmlvcml0eTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVxdWVzdGVkVGltZSI+UmVxdWVzdGVkVGltZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZFN0YXJ0VGltZSI+UGxhbm5lZFN0YXJ0VGltZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZEVuZFRpbWUiPlBsYW5uZWRFbmRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxTdGFydFRpbWUiPkFjdHVhbFN0YXJ0VGltZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsRW5kVGltZSI+QWN0dWFsRW5kVGltZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpb3JpdHkiPlByaW9yaXR5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDcmVhdGVUaW1lIj5DcmVhdGVUaW1lPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlTXlDQUIjIyNGaWx0ZXI6OkNoYW5nZVN0YXRlcyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdNeUNBQk92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+cmVxdWVzdGVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+cGVuZGluZyBhcHByb3ZhbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPmFwcHJvdmVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+aW4gcHJvZ3Jlc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5wZW5kaW5nIHBpcjwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlTXlDQUIjIyNPcmRlcjo6RGVmYXVsdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdNeUNBQk92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJVcCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRvd24iIFRyYW5zbGF0YWJsZT0iMSI+RG93bjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVXAiIFRyYW5zbGF0YWJsZT0iMSI+VXA8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VNeUNBQiMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyBhIENBQiBtZW1iZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld015Q0FCT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeKHJ3fHJvKSQiPnJvPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZU15Q0FCIyMjU2hvd0NvbHVtbnMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld015Q0FCT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlU3RhdGVTaWduYWwiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZU51bWJlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGl0bGUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZUJ1aWxkZXIiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZU1hbmFnZXIiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlckNvdW50Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VTdGF0ZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltcGFjdCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpb3JpdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNlcnZpY2VzIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXF1ZXN0ZWRUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkU3RhcnRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRW5kVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsU3RhcnRUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxFbmRUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDcmVhdGVUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEeW5hbWljRmllbGRfQ2hhbmdlRmllbGROYW1lMSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRHluYW1pY0ZpZWxkX0NoYW5nZUZpZWxkTmFtZTIiPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlTXlDQUIjIyNTb3J0Qnk6OkRlZmF1bHQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNBQiBvdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3TXlDQUJPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iQ2hhbmdlTnVtYmVyIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlTnVtYmVyIj5DaGFuZ2VOdW1iZXI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVRpdGxlIj5DaGFuZ2VUaXRsZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlU3RhdGVJRCI+Q2hhbmdlU3RhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhdGVnb3J5SUQiPkNhdGVnb3J5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJbXBhY3RJRCI+SW1wYWN0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eUlEIj5Qcmlvcml0eTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVxdWVzdGVkVGltZSI+UmVxdWVzdGVkVGltZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZFN0YXJ0VGltZSI+UGxhbm5lZFN0YXJ0VGltZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZEVuZFRpbWUiPlBsYW5uZWRFbmRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxTdGFydFRpbWUiPkFjdHVhbFN0YXJ0VGltZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsRW5kVGltZSI+QWN0dWFsRW5kVGltZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpb3JpdHkiPlByaW9yaXR5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDcmVhdGVUaW1lIj5DcmVhdGVUaW1lPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlTXlDaGFuZ2VzIyMjRmlsdGVyOjpDaGFuZ2VTdGF0ZXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld015Q2hhbmdlc092ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+cmVxdWVzdGVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+cGVuZGluZyBhcHByb3ZhbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPmFwcHJvdmVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+aW4gcHJvZ3Jlc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5wZW5kaW5nIHBpcjwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlTXlXb3JrT3JkZXJzIyMjRmlsdGVyOjpXb3JrT3JkZXJTdGF0ZXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgd29ya29yZGVyIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld015V29ya09yZGVyc092ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+Y3JlYXRlZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPmFjY2VwdGVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+cmVhZHk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5pbiBwcm9ncmVzczwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlTXlDaGFuZ2VzIyMjT3JkZXI6OkRlZmF1bHQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld015Q2hhbmdlc092ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJVcCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRvd24iIFRyYW5zbGF0YWJsZT0iMSI+RG93bjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVXAiIFRyYW5zbGF0YWJsZT0iMSI+VXA8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VNeUNoYW5nZXMjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBvd24gY2hhbmdlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3TXlDaGFuZ2VzT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeKHJ3fHJvKSQiPnJvPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZU15Q2hhbmdlcyMjI1Nob3dDb2x1bW5zIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3TXlDaGFuZ2VzT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlU3RhdGVTaWduYWwiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZU51bWJlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGl0bGUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZUJ1aWxkZXIiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZU1hbmFnZXIiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlckNvdW50Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VTdGF0ZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltcGFjdCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpb3JpdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNlcnZpY2VzIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXF1ZXN0ZWRUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkU3RhcnRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRW5kVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsU3RhcnRUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxFbmRUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDcmVhdGVUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEeW5hbWljRmllbGRfQ2hhbmdlRmllbGROYW1lMSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRHluYW1pY0ZpZWxkX0NoYW5nZUZpZWxkTmFtZTIiPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlTXlDaGFuZ2VzIyMjU29ydEJ5OjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdNeUNoYW5nZXNPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iUGxhbm5lZFN0YXJ0VGltZSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZU51bWJlciI+Q2hhbmdlTnVtYmVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaXRsZSI+Q2hhbmdlVGl0bGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVN0YXRlSUQiPkNoYW5nZVN0YXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeUlEIj5DYXRlZ29yeTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSW1wYWN0SUQiPkltcGFjdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpb3JpdHlJRCI+UHJpb3JpdHk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJlcXVlc3RlZFRpbWUiPlJlcXVlc3RlZFRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRTdGFydFRpbWUiPlBsYW5uZWRTdGFydFRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRFbmRUaW1lIj5QbGFubmVkRW5kVGltZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsU3RhcnRUaW1lIj5BY3R1YWxTdGFydFRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbEVuZFRpbWUiPkFjdHVhbEVuZFRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5Ij5Qcmlvcml0eTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3JlYXRlVGltZSI+Q3JlYXRlVGltZTwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZU15V29ya09yZGVycyMjI09yZGVyOjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdNeVdvcmtPcmRlcnNPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iVXAiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEb3duIiBUcmFuc2xhdGFibGU9IjEiPkRvd248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlVwIiBUcmFuc2xhdGFibGU9IjEiPlVwPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlTXlXb3JrT3JkZXJzIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIHdvcmtvcmRlcnMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld015V29ya09yZGVyc092ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXihyd3xybykkIj5ybzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VNeVdvcmtPcmRlcnMjIyNTaG93Q29sdW1ucyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld015V29ya09yZGVyc092ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVN0YXRlU2lnbmFsIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VOdW1iZXIiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVRpdGxlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VCdWlsZGVyIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VNYW5hZ2VyIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJXb3JrT3JkZXJDb3VudCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlU3RhdGUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhdGVnb3J5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJbXBhY3QiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTZXJ2aWNlcyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVxdWVzdGVkVGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZFN0YXJ0VGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZEVuZFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbFN0YXJ0VGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsRW5kVGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3JlYXRlVGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyU3RhdGVTaWduYWwiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlck51bWJlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyVGl0bGUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlckFnZW50Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJXb3JrT3JkZXJTdGF0ZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyVHlwZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTEiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkR5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUyIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZU15V29ya09yZGVycyMjI1NvcnRCeTo6RGVmYXVsdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3TXlXb3JrT3JkZXJzT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IlBsYW5uZWRTdGFydFRpbWUiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VOdW1iZXIiPkNoYW5nZU51bWJlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGl0bGUiPkNoYW5nZVRpdGxlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VTdGF0ZUlEIj5DaGFuZ2VTdGF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnlJRCI+Q2F0ZWdvcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltcGFjdElEIj5JbXBhY3Q8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5SUQiPlByaW9yaXR5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXF1ZXN0ZWRUaW1lIj5SZXF1ZXN0ZWRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkU3RhcnRUaW1lIj5QbGFubmVkU3RhcnRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRW5kVGltZSI+UGxhbm5lZEVuZFRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbFN0YXJ0VGltZSI+QWN0dWFsU3RhcnRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxFbmRUaW1lIj5BY3R1YWxFbmRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSI+UHJpb3JpdHk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyZWF0ZVRpbWUiPkNyZWF0ZVRpbWU8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VQSVIjIyNGaWx0ZXI6OldvcmtPcmRlclN0YXRlcyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIFBJUiBvdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3UElST3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5hY2NlcHRlZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPnJlYWR5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+aW4gcHJvZ3Jlc3M8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5jbG9zZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5jYW5jZWxlZDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlUElSIyMjT3JkZXI6OkRlZmF1bHQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBQSVIgb3ZlcnZpZXcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1BJUk92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJVcCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRvd24iIFRyYW5zbGF0YWJsZT0iMSI+RG93bjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVXAiIFRyYW5zbGF0YWJsZT0iMSI+VXA8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VQSVIjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2VzIHdpdGggYW4gdXBjb21pbmcgUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldykuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1BJUk92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXihyd3xybykkIj5ybzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VQSVIjIyNTaG93Q29sdW1ucyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBQSVIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1BJUk92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVN0YXRlU2lnbmFsIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VOdW1iZXIiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVRpdGxlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VCdWlsZGVyIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VNYW5hZ2VyIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJXb3JrT3JkZXJDb3VudCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlU3RhdGUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhdGVnb3J5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJbXBhY3QiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTZXJ2aWNlcyI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVxdWVzdGVkVGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZFN0YXJ0VGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGxhbm5lZEVuZFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbFN0YXJ0VGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsRW5kVGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3JlYXRlVGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyU3RhdGVTaWduYWwiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlck51bWJlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyVGl0bGUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlckFnZW50Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJXb3JrT3JkZXJTdGF0ZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyVHlwZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTEiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkR5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUyIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZVBJUiMjI1NvcnRCeTo6RGVmYXVsdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIFBJUiBvdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3UElST3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IlBsYW5uZWRTdGFydFRpbWUiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VOdW1iZXIiPkNoYW5nZU51bWJlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGl0bGUiPkNoYW5nZVRpdGxlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VTdGF0ZUlEIj5DaGFuZ2VTdGF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnlJRCI+Q2F0ZWdvcnk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltcGFjdElEIj5JbXBhY3Q8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5SUQiPlByaW9yaXR5PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXF1ZXN0ZWRUaW1lIj5SZXF1ZXN0ZWRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkU3RhcnRUaW1lIj5QbGFubmVkU3RhcnRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRW5kVGltZSI+UGxhbm5lZEVuZFRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbFN0YXJ0VGltZSI+QWN0dWFsU3RhcnRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxFbmRUaW1lIj5BY3R1YWxFbmRUaW1lPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSI+UHJpb3JpdHk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyZWF0ZVRpbWUiPkNyZWF0ZVRpbWU8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VQSVIjIyNXb3JrT3JkZXJUeXBlcyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSB3b3Jrb3JkZXIgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc2hvdyB0aGUgUElSIG92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdQSVJPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPnBpcjwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbiMjI1JpY2hUZXh0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlVzZXMgcmljaHRleHQgZm9yIHZpZXdpbmcgYW5kIGVkaXRpbmcgdGlja2V0IG5vdGlmaWNhdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3QWRtaW5JVFNNQ2hhbmdlTm90aWZpY2F0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCIgVHJhbnNsYXRhYmxlPSIxIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSIgVHJhbnNsYXRhYmxlPSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24jIyNSaWNoVGV4dFdpZHRoIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHdpZHRoIGZvciB0aGUgcmljaCB0ZXh0IGVkaXRvciBjb21wb25lbnQgZm9yIHRoaXMgc2NyZWVuLiBFbnRlciBudW1iZXIgKHBpeGVscykgb3IgcGVyY2VudCB2YWx1ZSAocmVsYXRpdmUpLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdBZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeXGQrJT8kIj42MjA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWRtaW5JVFNNQ2hhbmdlTm90aWZpY2F0aW9uIyMjUmljaFRleHRIZWlnaHQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgaGVpZ2h0IGZvciB0aGUgcmljaCB0ZXh0IGVkaXRvciBjb21wb25lbnQgZm9yIHRoaXMgc2NyZWVuLiBFbnRlciBudW1iZXIgKHBpeGVscykgb3IgcGVyY2VudCB2YWx1ZSAocmVsYXRpdmUpLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdBZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeXGQrJT8kIj4zMjA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZVByaW50IyMjQWNjb3VudGVkVGltZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGlmIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcHJpbnQgdGhlIGFjY291bnRlZCB0aW1lLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VQcmludDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiIFRyYW5zbGF0YWJsZT0iMSI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiIFRyYW5zbGF0YWJsZT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlUHJpbnQjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHByaXZpbGVnZXMgdG8gcHJpbnQgYSBjaGFuZ2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZVByaW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXihyd3xybykkIj5ybzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VQcmludCMjI1BsYW5uZWRFZmZvcnQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBwbGFubmVkIGVmZm9ydC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q2hhbmdlUHJpbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIiBUcmFuc2xhdGFibGU9IjEiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIiBUcmFuc2xhdGFibGU9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZVByaW50IyMjUmVxdWVzdGVkVGltZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgcHJpbnQgYnkgY3VzdG9tZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZVByaW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCIgVHJhbnNsYXRhYmxlPSIxIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSIgVHJhbnNsYXRhYmxlPSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VQcmludCMjI0R5bmFtaWNGaWVsZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EeW5hbWljIGZpZWxkcyAoZm9yIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMpIHNob3duIGluIHRoZSBjaGFuZ2UgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VQcmludDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZVNlYXJjaCMjI1JlcXVlc3RlZFRpbWUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNlYXJjaGVkIGJ5IGN1c3RvbWVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VTZWFyY2g8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIiBUcmFuc2xhdGFibGU9IjEiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIiBUcmFuc2xhdGFibGU9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZVNlYXJjaCMjI0R5bmFtaWNGaWVsZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZVNlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZVNlYXJjaCMjI1Nob3dDb2x1bW5zIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZVNlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VTdGF0ZVNpZ25hbCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlTnVtYmVyIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaXRsZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlQnVpbGRlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlTWFuYWdlciI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyQ291bnQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVN0YXRlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSW1wYWN0Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2VydmljZXMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJlcXVlc3RlZFRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRTdGFydFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRFbmRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxTdGFydFRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbEVuZFRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyZWF0ZVRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkR5bmFtaWNGaWVsZF9DaGFuZ2VGaWVsZE5hbWUxIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEeW5hbWljRmllbGRfQ2hhbmdlRmllbGROYW1lMiI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VUZW1wbGF0ZSMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2VUZW1wbGF0ZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il4ocnd8cm8pJCI+cnc8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHByaXZpbGVnZXMgdG8gbW92ZSBjaGFuZ2VzIGluIHRpbWUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZVRpbWVTbG90PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXihyd3xybykkIj5ydzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2Vab29tIyMjQWNjb3VudGVkVGltZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGlmIHRoZSBhY2NvdW50ZWQgdGltZSBzaG91bGQgYmUgc2hvd24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZVpvb208L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIiBUcmFuc2xhdGFibGU9IjEiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIiBUcmFuc2xhdGFibGU9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZVpvb20jIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBjaGFuZ2VzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2Vab29tPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXihyd3xybykkIj5ybzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2Vab29tIyMjUGxhbm5lZEVmZm9ydCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGlmIHRoZSBwbGFubmVkIGVmZm9ydCBzaG91bGQgYmUgc2hvd24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZVpvb208L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIiBUcmFuc2xhdGFibGU9IjEiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIiBUcmFuc2xhdGFibGU9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZVpvb20jIyNSZXF1ZXN0ZWRUaW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzaG93biBieSBjdXN0b21lci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3Q2hhbmdlWm9vbTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiIFRyYW5zbGF0YWJsZT0iMSI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiIFRyYW5zbGF0YWJsZT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlWm9vbSMjI1dvcmtPcmRlclN0YXRlIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgaWYgdGhlIHdvcmtvcmRlciBzdGF0ZSBzaG91bGQgYmUgc2hvd24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZVpvb208L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjAiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIiBUcmFuc2xhdGFibGU9IjEiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIiBUcmFuc2xhdGFibGU9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZVpvb20jIyNXb3JrT3JkZXJUaXRsZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGlmIHRoZSB3b3Jrb3JkZXIgdGl0bGUgc2hvdWxkIGJlIHNob3duLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2Vab29tPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIwIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCIgVHJhbnNsYXRhYmxlPSIxIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSIgVHJhbnNsYXRhYmxlPSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2Vab29tIyMjV29ya09yZGVyR3JhcGgiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBzaG93biBncmFwaCBhdHRyaWJ1dGVzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2Vab29tPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpbWVMaW5lQ29sb3IiPiNEQzE0M0M8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpbWVMaW5lV2lkdGgiPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InVuZGVmaW5lZF9wbGFubmVkX2NvbG9yIj4jQjIyMjIyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJ1bmRlZmluZWRfYWN0dWFsX2NvbG9yIj4jRjA4MDgwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJhcHByb3ZhbF9wbGFubmVkX2NvbG9yIj4jRkY0NTAwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJhcHByb3ZhbF9hY3R1YWxfY29sb3IiPiNGRjdGNTA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImJhY2tvdXRfcGxhbm5lZF9jb2xvciI+IzY5Njk2OTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iYmFja291dF9hY3R1YWxfY29sb3IiPiNDMEMwQzA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InBpcl9wbGFubmVkX2NvbG9yIj4jNDY4MkI0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJwaXJfYWN0dWFsX2NvbG9yIj4jODdDRUVCPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJ3b3Jrb3JkZXJfcGxhbm5lZF9jb2xvciI+IzAwNjQwMDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0id29ya29yZGVyX2FjdHVhbF9jb2xvciI+IzNDQjM3MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2Vab29tIyMjVG9vbHRpcDo6V29ya09yZGVyQXR0cmlidXRlcyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBzaG93biBhdHRyaWJ1dGVzIG9mIGEgd29ya29yZGVyIGluIHRoZSB0b29sdGlwIG9mIHRoZSB3b3Jrb3JkZXIgZ3JhcGggaW4gdGhlIGNoYW5nZSB6b29tLiBUbyBzaG93IHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcyBpbiB0aGUgdG9vbHRpcCwgdGhleSBtdXN0IGJlIHNwZWNpZmllZCBsaWtlIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUxLCBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMiwgZXRjLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdDaGFuZ2Vab29tPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlclRpdGxlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJXb3JrT3JkZXJTdGF0ZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyVHlwZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iV29ya09yZGVyQWdlbnQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRTdGFydFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRFbmRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxTdGFydFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbEVuZFRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikluc3RydWN0aW9uIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXBvcnQiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjY291bnRlZFRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRFZmZvcnQiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkR5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUxIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMiI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2Vab29tIyMjRHluYW1pY0ZpZWxkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkR5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2Ugem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZVpvb208L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01UZW1wbGF0ZURlbGV0ZSMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgYSB0ZW1wbGF0ZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3VGVtcGxhdGVEZWxldGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeKHJ3fHJvKSQiPnJ3PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTVRlbXBsYXRlRWRpdCMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgdGVtcGxhdGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1RlbXBsYXRlRWRpdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il4ocnd8cm8pJCI+cnc8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudCMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb250ZW50IG9mIGEgdGVtcGxhdGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1RlbXBsYXRlRWRpdENvbnRlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeKHJ3fHJvKSQiPnJ3PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQjIyNEZWZhdWx0Q2hhbmdlVGl0bGUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBjaGFuZ2UgdGl0bGUgZm9yIGEgZHVtbXkgY2hhbmdlIHdoaWNoIGlzIG5lZWRlZCB0byBlZGl0IGEgd29ya29yZGVyIHRlbXBsYXRlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdUZW1wbGF0ZUVkaXRDb250ZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj5IZWxwZXIgZHVtbXkgY2hhbmdlIG5lZWRlZCBmb3IgZWRpdGluZyBhIHdvcmtvcmRlciB0ZW1wbGF0ZTwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29udGVudCBvZiBhIHRlbXBsYXRlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdUZW1wbGF0ZUVkaXRDQUI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeKHJ3fHJvKSQiPnJ3PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcjIyNGaWx0ZXI6OlRlbXBsYXRlVHlwZXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgdGVtcGxhdGUgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1RlbXBsYXRlT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5JVFNNQ2hhbmdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+SVRTTVdvcmtPcmRlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNBQjwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNVGVtcGxhdGVPdmVydmlldyMjI09yZGVyOjpEZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1RlbXBsYXRlT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IlVwIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRG93biIgVHJhbnNsYXRhYmxlPSIxIj5Eb3duPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJVcCIgVHJhbnNsYXRhYmxlPSIxIj5VcDwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBvdmVydmlldyBvdmVyIGFsbCB0ZW1wbGF0ZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1RlbXBsYXRlT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeKHJ3fHJvKSQiPnJvPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcjIyNTaG93Q29sdW1ucyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3VGVtcGxhdGVPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb21tZW50Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJWYWxpZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRWRpdENvbnRlbnQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlbGV0ZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3JlYXRlQnkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyZWF0ZVRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZUJ5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcjIyNTb3J0Qnk6OkRlZmF1bHQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3VGVtcGxhdGVPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iVGVtcGxhdGVJRCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPk5hbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRlbXBsYXRlVHlwZUlEIj5UZW1wbGF0ZVR5cGVJRDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVmFsaWRJRCI+VmFsaWRJRDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3JlYXRlVGltZSI+Q3JlYXRlVGltZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGltZSI+Q2hhbmdlVGltZTwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01Xb3JrT3JkZXJBZGQjIyNEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1dvcmtPcmRlckFkZDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTVdvcmtPcmRlckFkZCMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhZGQgYSB3b3Jrb3JkZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1dvcmtPcmRlckFkZDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il4ocnd8cm8pJCI+cnc8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNV29ya09yZGVyQWRkIyMjUGxhbm5lZEVmZm9ydCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGlmIHRoZSBwbGFubmVkIGVmZm9ydCBzaG91bGQgYmUgc2hvd24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1dvcmtPcmRlckFkZDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiIFRyYW5zbGF0YWJsZT0iMSI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiIFRyYW5zbGF0YWJsZT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGFkZCBhIHdvcmtvcmRlci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3V29ya09yZGVyQWRkRnJvbVRlbXBsYXRlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXihyd3xybykkIj5ydzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjpBZ2VudElUU01Xb3JrT3JkZXJBZ2VudCMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjaGFuZ2UgdGhlIHdvcmtvcmRlciBhZ2VudC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3V29ya09yZGVyQWdlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeKHJ3fHJvKSQiPnJ3PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6RnJvbnRlbmQ6OkFnZW50SVRTTVdvcmtPcmRlckRlbGV0ZSMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgYSB3b3Jrb3JkZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1dvcmtPcmRlckRlbGV0ZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il4ocnd8cm8pJCI+cnc8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6RnJvbnRlbmQ6OkFnZW50SVRTTVdvcmtPcmRlckVkaXQjIyNEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdXb3JrT3JkZXJFZGl0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpGcm9udGVuZDo6QWdlbnRJVFNNV29ya09yZGVyRWRpdCMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgd29ya29yZGVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdXb3JrT3JkZXJFZGl0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXihyd3xybykkIj5ydzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjpBZ2VudElUU01Xb3JrT3JkZXJFZGl0IyMjUGxhbm5lZEVmZm9ydCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGlmIHRoZSBwbGFubmVkIGVmZm9ydCBzaG91bGQgYmUgc2hvd24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1dvcmtPcmRlckVkaXQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIiBUcmFuc2xhdGFibGU9IjEiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIiBUcmFuc2xhdGFibGU9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6RnJvbnRlbmQ6OkFnZW50SVRTTVdvcmtPcmRlckVkaXQjIyNNb3ZlRm9sbG93aW5nV29ya09yZGVycyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGNoZWNrYm94IGluIHRoZSBBZ2VudElUU01Xb3JrT3JkZXJFZGl0IHNjcmVlbiB0aGF0IGRlZmluZXMgaWYgdGhlIHRoZSBmb2xsb3dpbmcgd29ya29yZGVycyBzaG91bGQgYWxzbyBiZSBtb3ZlZCBpZiBhIHdvcmtvcmRlciBpcyBtb2RpZmllZCBhbmQgdGhlIHBsYW5uZWQgZW5kIHRpbWUgaGFzIGNoYW5nZWQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1dvcmtPcmRlckVkaXQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIiBUcmFuc2xhdGFibGU9IjEiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIiBUcmFuc2xhdGFibGU9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6RnJvbnRlbmQ6OkFnZW50SVRTTVdvcmtPcmRlckhpc3RvcnkjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3V29ya09yZGVySGlzdG9yeTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il4ocnd8cm8pJCI+cm88L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpGcm9udGVuZDo6QWdlbnRJVFNNV29ya09yZGVySGlzdG9yeVpvb20jIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgd29ya29yZGVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdXb3JrT3JkZXJIaXN0b3J5Wm9vbTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il4ocnd8cm8pJCI+cm88L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpGcm9udGVuZDo6QWdlbnRJVFNNV29ya09yZGVyUmVwb3J0IyMjQWNjb3VudGVkVGltZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGlmIHRoZSBhY2NvdW50ZWQgdGltZSBzaG91bGQgYmUgc2hvd24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1dvcmtPcmRlclJlcG9ydDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiIFRyYW5zbGF0YWJsZT0iMSI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiIFRyYW5zbGF0YWJsZT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpGcm9udGVuZDo6QWdlbnRJVFNNV29ya09yZGVyUmVwb3J0IyMjQWN0dWFsVGltZVNwYW4iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBpZiB0aGUgYWN0dWFsIHN0YXJ0IGFuZCBlbmQgdGltZXMgc2hvdWxkIGJlIHNldC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3V29ya09yZGVyUmVwb3J0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIwIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCIgVHJhbnNsYXRhYmxlPSIxIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSIgVHJhbnNsYXRhYmxlPSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjpBZ2VudElUU01Xb3JrT3JkZXJSZXBvcnQjIyNEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciByZXBvcnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1dvcmtPcmRlclJlcG9ydDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6RnJvbnRlbmQ6OkFnZW50SVRTTVdvcmtPcmRlclJlcG9ydCMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcHJpdmlsZWdlcyB0byB3cml0ZSBhIHJlcG9ydCBmb3IgdGhlIHdvcmtvcmRlci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3V29ya09yZGVyUmVwb3J0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXihyd3xybykkIj5ydzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjpBZ2VudElUU01Xb3JrT3JkZXJUYWtlIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwcml2aWxlZ2VzIGluIG9yZGVyIGZvciBhbiBhZ2VudCB0byB0YWtlIGEgd29ya29yZGVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdXb3JrT3JkZXJBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il4ocnd8cm8pJCI+cnc8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpGcm9udGVuZDo6QWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUjIyNQZXJtaXNzaW9uIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIHdvcmtvcmRlci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3V29ya09yZGVyVGVtcGxhdGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeKHJ3fHJvKSQiPnJ3PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6RnJvbnRlbmQ6OkFnZW50SVRTTVdvcmtPcmRlclpvb20jIyNBY2NvdW50ZWRUaW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgaWYgdGhlIGFjY291bnRlZCB0aW1lIHNob3VsZCBiZSBzaG93bi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3V29ya09yZGVyWm9vbTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiIFRyYW5zbGF0YWJsZT0iMSI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiIFRyYW5zbGF0YWJsZT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpGcm9udGVuZDo6QWdlbnRJVFNNV29ya09yZGVyWm9vbSMjI1Blcm1pc3Npb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGEgd29ya29yZGVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdXb3JrT3JkZXJab29tPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXihyd3xybykkIj5ybzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjpBZ2VudElUU01Xb3JrT3JkZXJab29tIyMjUGxhbm5lZEVmZm9ydCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGlmIHRoZSBwbGFubmVkIGVmZm9ydCBzaG91bGQgYmUgc2hvd24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1dvcmtPcmRlclpvb208L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIiBUcmFuc2xhdGFibGU9IjEiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIiBUcmFuc2xhdGFibGU9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6RnJvbnRlbmQ6OkFnZW50SVRTTVdvcmtPcmRlclpvb20jIyNEeW5hbWljRmllbGQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3V29ya09yZGVyWm9vbTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgoKICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpDdXN0b21lcklUU01DaGFuZ2VTY2hlZHVsZSMjI0ZpbHRlcjo6Q2hhbmdlU3RhdGVzIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6OlZpZXdDaGFuZ2VTY2hlZHVsZU92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+YXBwcm92ZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5pbiBwcm9ncmVzczwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6Q3VzdG9tZXJJVFNNQ2hhbmdlU2NoZWR1bGUjIyNPcmRlcjo6RGVmYXVsdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpWaWV3Q2hhbmdlU2NoZWR1bGVPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iVXAiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEb3duIiBUcmFuc2xhdGFibGU9IjEiPkRvd248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlVwIiBUcmFuc2xhdGFibGU9IjEiPlVwPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6Q3VzdG9tZXJJVFNNQ2hhbmdlU2NoZWR1bGUjIyNTaG93Q29sdW1ucyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpDdXN0b21lcjo6Vmlld0NoYW5nZVNjaGVkdWxlT3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlU3RhdGVTaWduYWwiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZU51bWJlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGl0bGUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZUJ1aWxkZXIiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZU1hbmFnZXIiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IldvcmtPcmRlckNvdW50Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VTdGF0ZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2F0ZWdvcnkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltcGFjdCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpb3JpdHkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNlcnZpY2VzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXF1ZXN0ZWRUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkU3RhcnRUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQbGFubmVkRW5kVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsU3RhcnRUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3R1YWxFbmRUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDcmVhdGVUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEeW5hbWljRmllbGRfQ2hhbmdlRmllbGROYW1lMSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRHluYW1pY0ZpZWxkX0NoYW5nZUZpZWxkTmFtZTIiPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6Q3VzdG9tZXJJVFNNQ2hhbmdlU2NoZWR1bGUjIyNTaG93T25seUNoYW5nZXNXaXRoQWxsb3dlZFNlcnZpY2VzIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhhdCBvbmx5IGNoYW5nZXMgY29udGFpbmluZyBXb3Jrb3JkZXJzIGxpbmtlZCB3aXRoIHNlcnZpY2VzLCB3aGljaCB0aGUgY3VzdG9tZXIgdXNlciBoYXMgcGVybWlzc2lvbiB0byB1c2Ugd2lsbCBiZSBzaG93bi4gQW55IG90aGVyIGNoYW5nZXMgd2lsbCBub3QgYmUgZGlzcGxheWVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6Q3VzdG9tZXI6OlZpZXdDaGFuZ2VTY2hlZHVsZU92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCIgVHJhbnNsYXRhYmxlPSIxIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSIgVHJhbnNsYXRhYmxlPSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpDdXN0b21lcklUU01DaGFuZ2VTY2hlZHVsZSMjI1NvcnRCeTo6RGVmYXVsdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkN1c3RvbWVyOjpWaWV3Q2hhbmdlU2NoZWR1bGVPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iUGxhbm5lZFN0YXJ0VGltZSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZU51bWJlciI+Q2hhbmdlTnVtYmVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaXRsZSI+Q2hhbmdlVGl0bGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVN0YXRlSUQiPkNoYW5nZVN0YXRlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYXRlZ29yeUlEIj5DYXRlZ29yeTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSW1wYWN0SUQiPkltcGFjdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpb3JpdHlJRCI+UHJpb3JpdHk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJlcXVlc3RlZFRpbWUiPlJlcXVlc3RlZFRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRTdGFydFRpbWUiPlBsYW5uZWRTdGFydFRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBsYW5uZWRFbmRUaW1lIj5QbGFubmVkRW5kVGltZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0dWFsU3RhcnRUaW1lIj5BY3R1YWxTdGFydFRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdHVhbEVuZFRpbWUiPkFjdHVhbEVuZFRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW9yaXR5Ij5Qcmlvcml0eTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3JlYXRlVGltZSI+Q3JlYXRlVGltZTwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6UGVybWlzc2lvbiMjIzA2LUFkZFdvcmtPcmRlckNoZWNrIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBjaGVjayBpZiBXb3JrT3JkZXJBZGQgb3IgV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlIHNob3VsZCBiZSBwZXJtaXR0ZWQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01DaGFuZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6UGVybWlzc2lvbjo6QWRkV29ya09yZGVyQ2hlY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJlcXVpcmVkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcmFudGVkIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNoYW5nZTo6UGVybWlzc2lvbiMjIzEwLUNoYW5nZU1hbmFnZXJDaGVjayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gY2hlY2sgdGhlIGNoYW5nZSBtYW5hZ2VyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlBlcm1pc3Npb246OkNoYW5nZU1hbmFnZXJDaGVjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVxdWlyZWQiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkdyYW50ZWQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpQZXJtaXNzaW9uIyMjMjAtQ2hhbmdlQnVpbGRlckNoZWNrIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIGJ1aWxkZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01DaGFuZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6UGVybWlzc2lvbjo6Q2hhbmdlQnVpbGRlckNoZWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXF1aXJlZCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JhbnRlZCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OlBlcm1pc3Npb24jIyMzMC1DaGFuZ2VBZ2VudENoZWNrIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBjaGVjayB0aGUgYWdlbnQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01DaGFuZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6UGVybWlzc2lvbjo6Q2hhbmdlQWdlbnRDaGVjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVxdWlyZWQiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkdyYW50ZWQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpQZXJtaXNzaW9uIyMjNDAtQ0FCQ2hlY2siIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TW9kdWxlIHRvIGNoZWNrIHRoZSBDQUIgbWVtYmVycy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpQZXJtaXNzaW9uOjpDQUJDaGVjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVxdWlyZWQiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkdyYW50ZWQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpQZXJtaXNzaW9uIyMjMTAtQ2hhbmdlTWFuYWdlckNoZWNrIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIG1hbmFnZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Xb3JrT3JkZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcjo6UGVybWlzc2lvbjo6Q2hhbmdlTWFuYWdlckNoZWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXF1aXJlZCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JhbnRlZCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01Xb3JrT3JkZXI6OlBlcm1pc3Npb24jIyMyMC1DaGFuZ2VCdWlsZGVyQ2hlY2siIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgYnVpbGRlci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTVdvcmtPcmRlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyOjpQZXJtaXNzaW9uOjpDaGFuZ2VCdWlsZGVyQ2hlY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJlcXVpcmVkIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcmFudGVkIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6UGVybWlzc2lvbiMjIzMwLVdvcmtPcmRlckFnZW50Q2hlY2siIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TW9kdWxlIHRvIGNoZWNrIHRoZSB3b3Jrb3JkZXIgYWdlbnQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Xb3JrT3JkZXI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcjo6UGVybWlzc2lvbjo6V29ya09yZGVyQWdlbnRDaGVjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVxdWlyZWQiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkdyYW50ZWQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpQZXJtaXNzaW9uIyMjNDAtQ0FCQ2hlY2siIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TW9kdWxlIHRvIGNoZWNrIHRoZSBDQUIgbWVtYmVycy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTVdvcmtPcmRlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyOjpQZXJtaXNzaW9uOjpDQUJDaGVjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVxdWlyZWQiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkdyYW50ZWQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNV29ya09yZGVyOjpUYWtlUGVybWlzc2lvbiMjIzEwLUVtcHR5QWdlbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgbm8gd29ya29yZGVyIGFnZW50IGlzIHNldC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTVdvcmtPcmRlcjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyOjpQZXJtaXNzaW9uOjpFbXB0eUFnZW50Q2hlY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJlcXVpcmVkIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcmFudGVkIj4xPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6VGFrZVBlcm1pc3Npb24jIyMyMC1MaXN0QWdlbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGFnZW50IGlzIGNvbnRhaW5lZCBpbiB0aGUgY29uZmlndXJlZCBsaXN0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNV29ya09yZGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXI6OlBlcm1pc3Npb246Okxpc3RBZ2VudENoZWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXF1aXJlZCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JhbnRlZCI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlRpY2tldDo6QWNsOjpNb2R1bGUjIyMyMDAtVGlja2V0OjpBY2w6Ok1vZHVsZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIEFDTCBtb2R1bGUgcmVzdHJpY3RzIHRoZSB1c3VhZ2Ugb2YgdGhlIHRpY2tldCB0eXBlcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9uICdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMnLCB0byB1c2VycyBvZiB0aGUgZ3JvdXBzIGFzIGRlZmluZWQgaW4gIklUU01DaGFuZ2U6OlJlc3RyaWN0VGlja2V0VHlwZXM6Okdyb3VwcyIuIEFzIHRoaXMgQUNMIGNvdWxkIGNvbGxpZGUgd2l0aCBvdGhlciBBQ0xzIHdoaWNoIGFyZSBhbHNvIHJlbGF0ZWQgdG8gdGhlIHRpY2tldCB0eXBlLCB0aGlzIHN5c2NvbmZpZyBvcHRpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgc2hvdWxkIG9ubHkgYmUgYWN0aXZhdGVkIGlmIG5lZWRlZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaWNrZXQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpUaWNrZXRBQ0w8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBY2w6OlJlc3RyaWN0VGlja2V0VHlwZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNU3RhdGVNYWNoaW5lOjpPYmplY3QjIyNDaGFuZ2UiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3IgY2hhbmdlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTVN0YXRlTWFjaGluZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5DaGFuZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj5JVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVN0YXRlTWFjaGluZTo6T2JqZWN0IyMjV29ya09yZGVyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNldHMgdXAgdGhlIHN0YXRlIG1hY2hpbmUgZm9yIHdvcmtvcmRlcnMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01TdGF0ZU1hY2hpbmU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+V29ya09yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDbGFzcyI+SVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpTdGF0ZTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OlNlbmROb3RpZmljYXRpb25zIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgd2hldGhlciBub3RpZmljYXRpb25zIHNob3VsZCBiZSBzZW50LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpOb3RpZmljYXRpb25zPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCIgVHJhbnNsYXRhYmxlPSIxIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSIgVHJhbnNsYXRhYmxlPSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OlRpbWVSZWFjaGVkTm90aWZpY2F0aW9ucyMjI0ZyZXF1ZW5jeSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Db25maWd1cmVzIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCB3aGVuIHBsYW5uZWQgdGhlIHN0YXJ0IHRpbWUgb3Igb3RoZXIgdGltZSB2YWx1ZXMgaGF2ZSBiZWVuIHJlYWNoZWQvcGFzc2VkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpOb3RpZmljYXRpb25zPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJvbmNlIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0ib25jZSIgVHJhbnNsYXRhYmxlPSIxIj5vbmNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJyZWd1bGFybHkiIFRyYW5zbGF0YWJsZT0iMSI+cmVndWxhcmx5PC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpUaW1lUmVhY2hlZE5vdGlmaWNhdGlvbnMjIyNIb3VycyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5JZiBmcmVxdWVuY3kgaXMgJ3JlZ3VsYXJseScsIHlvdSBjYW4gY29uZmlndXJlIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCAoZXZlcnkgWCBob3VycykuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6Ok5vdGlmaWNhdGlvbnM8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeXGQrJCI+MTwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN0YXRzOjpFeGNoYW5nZUF4aXMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGV0ZXJtaW5lcyBpZiBhbiBhZ2VudCBjYW4gZXhjaGFuZ2UgdGhlIFgtYXhpcyBvZiBhIHN0YXQgaWYgaGUgZ2VuZXJhdGVzIG9uZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlN0YXRzPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCIgVHJhbnNsYXRhYmxlPSIxIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSIgVHJhbnNsYXRhYmxlPSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN0YXRzOjpEeW5hbWljT2JqZWN0UmVnaXN0cmF0aW9uIyMjSVRTTUNoYW5nZU1hbmFnZW1lbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpTdGF0czwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpTdGF0czo6RHluYW1pYzo6SVRTTUNoYW5nZU1hbmFnZW1lbnQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJTdGF0czo6RHluYW1pY09iamVjdFJlZ2lzdHJhdGlvbiMjI0lUU01DaGFuZ2VNYW5hZ2VtZW50SGlzdG9yeSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyBjaGFuZ2Ugc3RhdGUgdXBkYXRlcyB3aXRoaW4gYSB0aW1lcGVyaW9kLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OlN0YXRzPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpJVFNNQ2hhbmdlTWFuYWdlbWVudEhpc3Rvcnk8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJTdGF0czo6RHluYW1pY09iamVjdFJlZ2lzdHJhdGlvbiMjI0lUU01DaGFuZ2VNYW5hZ2VtZW50Q2hhbmdlc0luY2lkZW50cyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyB0aGUgcmVsYXRpb24gYmV0d2VlbiBjaGFuZ2VzIGFuZCBpbmNpZGVudCB0aWNrZXRzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OlN0YXRzPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpJVFNNQ2hhbmdlTWFuYWdlbWVudENoYW5nZXNJbmNpZGVudHM8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJTdGF0czo6RHluYW1pY09iamVjdFJlZ2lzdHJhdGlvbiMjI0lUU01DaGFuZ2VNYW5hZ2VtZW50UmZjUmVxdWVzdGVyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IHRoZSBudW1iZXIgb2YgUmZjIHRpY2tldHMgYSByZXF1ZXN0ZXIgY3JlYXRlZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpTdGF0czwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpTdGF0czo6RHluYW1pYzo6SVRTTUNoYW5nZU1hbmFnZW1lbnRSZmNSZXF1ZXN0ZXI8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJTdGF0czo6RHluYW1pY09iamVjdFJlZ2lzdHJhdGlvbiMjI0lUU01DaGFuZ2VNYW5hZ2VtZW50Q2hhbmdlc1BlckNJQ2xhc3NlcyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIGRvbmUgZm9yIGNvbmZpZyBpdGVtIGNsYXNzZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6U3RhdHM8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6U3RhdHM6OkR5bmFtaWM6OklUU01DaGFuZ2VNYW5hZ2VtZW50Q2hhbmdlc1BlckNJQ2xhc3NlczwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Ok51bWJlckdlbmVyYXRvciIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TZWxlY3RzIHRoZSBjaGFuZ2UgbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjaGFuZ2UgbnVtYmVyLCB0aGUgU3lzdGVtSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkIHdpdGggU3lzdGVtSUQuY291bnRlciBmb3JtYXQgKGUuZy4gMTAwMTE4LCAxMDAxMTkpLiBXaXRoICJEYXRlIiwgdGhlIGNoYW5nZSBudW1iZXJzIHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHRoZSBjdXJyZW50IGRhdGUgYW5kIGEgY291bnRlcjsgdGhpcyBmb3JtYXQgbG9va3MgbGlrZSBZZWFyLk1vbnRoLkRheS5jb3VudGVyLCBlLmcuIDIwMTAwNjI0MDAwMDEsIDIwMTAwNjI0MDAwMDIuIFdpdGggIkRhdGVDaGVja3N1bSIsIHRoZSBjb3VudGVyIHdpbGwgYmUgYXBwZW5kZWQgYXMgY2hlY2tzdW0gdG8gdGhlIHN0cmluZyBvZiBkYXRlIHBsdXMgdGhlIFN5c3RlbUlELiBUaGUgY2hlY2tzdW0gd2lsbCBiZSByb3RhdGVkIG9uIGEgZGFpbHkgYmFzaXMuIFRoaXMgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuU3lzdGVtSUQuQ291bnRlci5DaGVja1N1bSwgZS5nLiAyMDEwMDYyNDEwMDAwMDE3LCAyMDEwMDYyNDEwMDAwMDI2LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ2hhbmdlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBMb2NhdGlvbj0iS2VybmVsL1N5c3RlbS9JVFNNQ2hhbmdlL051bWJlci8qLnBtIiBTZWxlY3RlZElEPSJLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6TnVtYmVyOjpEYXRlQ2hlY2tzdW0iPjwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6Ok51bWJlckdlbmVyYXRvcjo6QXV0b0luY3JlbWVudDo6TWluQ291bnRlclNpemUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2V0cyB0aGUgbWluaW1hbCBjaGFuZ2UgY291bnRlciBzaXplIChpZiAiQXV0b0luY3JlbWVudCIgd2FzIHNlbGVjdGVkIGFzIElUU01DaGFuZ2U6Ok51bWJlckdlbmVyYXRvcikuIERlZmF1bHQgaXMgNSwgdGhpcyBtZWFucyB0aGUgY291bnRlciBzdGFydHMgZnJvbSAxMDAwMC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNoYW5nZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5bMC05XSQiPjU8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQcmVmZXJlbmNlc0dyb3VwcyMjI1VzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFzayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5QYXJhbWV0ZXJzIGZvciB0aGUgVXNlckNyZWF0ZVdvcmtPcmRlck5leHRNYXNrIG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6UHJlZmVyZW5jZXM8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6UHJlZmVyZW5jZXM6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbHVtbiIgVHJhbnNsYXRhYmxlPSIxIj5PdGhlciBTZXR0aW5nczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFiZWwiIFRyYW5zbGF0YWJsZT0iMSI+U2NyZWVuIGFmdGVyIGNyZWF0aW5nIGEgd29ya29yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjIiBUcmFuc2xhdGFibGU9IjEiPkNvbmZpZ3VyZSB3aGljaCBzY3JlZW4gc2hvdWxkIGJlIHNob3duIGFmdGVyIGEgbmV3IHdvcmtvcmRlciBoYXMgYmVlbiBjcmVhdGVkLjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5IiBUcmFuc2xhdGFibGU9IjEiPlNjcmVlbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGF0YSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWdlbnRJVFNNV29ya09yZGVyWm9vbSIgVHJhbnNsYXRhYmxlPSIxIj5Xb3Jrb3JkZXIgWm9vbTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2VudElUU01DaGFuZ2Vab29tIiBUcmFuc2xhdGFibGU9IjEiPkNoYW5nZSBab29tPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGF0YVNlbGVjdGVkIj5BZ2VudElUU01Xb3JrT3JkZXJab29tPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmVmS2V5Ij5Vc2VyQ3JlYXRlV29ya09yZGVyTmV4dE1hc2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjQwMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGl2ZSI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlByZWZlcmVuY2VzR3JvdXBzIyMjQ2hhbmdlT3ZlcnZpZXdTbWFsbFBhZ2VTaG93biIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5QYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjaGFuZ2VzIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIGNoYW5nZSBvdmVydmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpQcmVmZXJlbmNlczwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpQcmVmZXJlbmNlczo6R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ29sdW1uIiBUcmFuc2xhdGFibGU9IjEiPk90aGVyIFNldHRpbmdzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCIgVHJhbnNsYXRhYmxlPSIxIj5DaGFuZ2UgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzYyIgVHJhbnNsYXRhYmxlPSIxIj5DaGFuZ2UgbGltaXQgcGVyIHBhZ2UgZm9yIENoYW5nZSBPdmVydmlldyAiU21hbGwiLjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5IiBUcmFuc2xhdGFibGU9IjEiPkxpbWl0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEYXRhIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxMCI+MTA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMTUiPjE1PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjIwIj4yMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIyNSI+MjU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMzAiPjMwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjM1Ij4zNTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRhdGFTZWxlY3RlZCI+MjU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByZWZLZXkiPlVzZXJDaGFuZ2VPdmVydmlld1NtYWxsUGFnZVNob3duPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvIj44MDAwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3RpdmUiPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQcmVmZXJlbmNlc0dyb3VwcyMjI1VzZXJJVFNNQ2hhbmdlTWFuYWdlbWVudFRlbXBsYXRlRWRpdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TdG9yZXMgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgaWRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHRlbXBsYXRlIGlkLCB3aGlsZSBhIHVzZXIgaXMgZWRpdGluZyBhIHRlbXBsYXRlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlByZWZlcmVuY2VzPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OlByZWZlcmVuY2VzOjpHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb2x1bW4iIFRyYW5zbGF0YWJsZT0iMSI+T3RoZXIgU2V0dGluZ3M8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIiBUcmFuc2xhdGFibGU9IjEiPkNoYW5nZSBhbmQgV29ya29yZGVyIFRlbXBsYXRlczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzYyIgVHJhbnNsYXRhYmxlPSIxIj5DaGFuZ2UgYW5kIHdvcmtvcmRlciB0ZW1wbGF0ZXMgZWRpdGVkIGJ5IHRoaXMgdXNlci48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSIgVHJhbnNsYXRhYmxlPSIxIj5UZW1wbGF0ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPklucHV0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEYXRhIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByZWZLZXkiPlVzZXJJVFNNQ2hhbmdlTWFuYWdlbWVudFRlbXBsYXRlRWRpdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+OTAwMDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aXZlIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6OlNlYXJjaCMjI0NoYW5nZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5DaGFuZ2Ugc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6U2VhcmNoUm91dGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Il4oPzpBZ2VudHxBZG1pbilJVFNNKENoYW5nZXxXb3JrT3JkZXJ8VGVtcGxhdGVPdmVydmlldykiPkFjdGlvbj1BZ2VudElUU01DaGFuZ2VTZWFyY2g7U3ViYWN0aW9uPUFKQVg8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6U2VhcmNoOjpKYXZhU2NyaXB0IyMjQ2hhbmdlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkphdmFTY3JpcHQgZnVuY3Rpb24gZm9yIHRoZSBzZWFyY2ggZnJvbnRlbmQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6U2VhcmNoUm91dGVyPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Il4oPzpBZ2VudHxBZG1pbilJVFNNKENoYW5nZXxXb3JrT3JkZXJ8VGVtcGxhdGVPdmVydmlldykiPklUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5TZWFyY2guT3BlblNlYXJjaERpYWxvZygnQWdlbnRJVFNNQ2hhbmdlU2VhcmNoJyk8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlU2VhcmNoIyMjU2VhcmNoQ1NWRGF0YSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EYXRhIHVzZWQgdG8gZXhwb3J0IHRoZSBzZWFyY2ggcmVzdWx0IGluIENTViBmb3JtYXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld0NoYW5nZVNlYXJjaDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPkNoYW5nZU51bWJlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNoYW5nZVRpdGxlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q2hhbmdlQnVpbGRlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPldvcmtPcmRlckNvdW50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q2hhbmdlU3RhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Qcmlvcml0eTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPlBsYW5uZWRTdGFydFRpbWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5QbGFubmVkRW5kVGltZTwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHREZWZhdWx0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50SVRTTUNoYW5nZVpvb20gYW5kIEFnZW50SVRTTVdvcmtPcmRlclpvb20uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1pvb208L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSw0fSQiPjEwMDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudEhUTUxGaWVsZEhlaWdodE1heCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdab29tPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsNX0kIj4yNTAwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTG9hZGVyOjpBZ2VudDo6Q29tbW9uSlMjIyMxMDAtSVRTTUNoYW5nZU1hbmFnZW1lbnQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TGlzdCBvZiBKUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OldlYjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxJdGVtPklUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5TZWFyY2guanM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LlVzZXJTZWFyY2guanM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkNBQk1lbWJlclNlYXJjaC5qczwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJFdmVudHMjIyNJVFNNQ2hhbmdlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxpc3Qgb2YgYWxsIHRpY2tldCBldmVudHMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBHVUkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZG1pbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5DaGFuZ2VBZGRQcmU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5DaGFuZ2VBZGRQb3N0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q2hhbmdlVXBkYXRlUHJlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q2hhbmdlVXBkYXRlUG9zdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNoYW5nZUNBQlVwZGF0ZVByZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNoYW5nZUNBQlVwZGF0ZVBvc3Q8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5DaGFuZ2VDQUJEZWxldGVQcmU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5DaGFuZ2VDQUJEZWxldGVQb3N0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q2hhbmdlRGVsZXRlUHJlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q2hhbmdlRGVsZXRlUG9zdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNoYW5nZUF0dGFjaG1lbnRBZGRQb3N0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q2hhbmdlQXR0YWNobWVudERlbGV0ZVBvc3Q8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRXZlbnRzIyMjSVRTTVdvcmtPcmRlciIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5MaXN0IG9mIGFsbCB0aWNrZXQgZXZlbnRzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgR1VJLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ2hhbmdlIE1hbmFnZW1lbnQ8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWRtaW48L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5Xb3JrT3JkZXJBZGRQcmU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Xb3JrT3JkZXJBZGRQb3N0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+V29ya09yZGVyVXBkYXRlUHJlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+V29ya09yZGVyVXBkYXRlUG9zdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPldvcmtPcmRlckRlbGV0ZVByZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPldvcmtPcmRlckRlbGV0ZVBvc3Q8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Xb3JrT3JkZXJBdHRhY2htZW50QWRkUG9zdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPldvcmtPcmRlckF0dGFjaG1lbnREZWxldGVQb3N0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+V29ya09yZGVyUmVwb3J0QXR0YWNobWVudEFkZFBvc3Q8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Xb3JrT3JkZXJSZXBvcnRBdHRhY2htZW50RGVsZXRlUG9zdDwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNQ2hhbmdlOjpFdmVudE1vZHVsZSMjIzEwMDAtR2VuZXJpY0ludGVyZmFjZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5QZXJmb3JtcyB0aGUgY29uZmlndXJlZCBhY3Rpb24gZm9yIGVhY2ggZXZlbnQgKGFzIGFuIEludm9rZXIpIGZvciBlYWNoIGNvbmZpZ3VyZWQgV2Vic2VydmljZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENoYW5nZSBNYW5hZ2VtZW50PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6SVRTTUNoYW5nZTo6RXZlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OkdlbmVyaWNJbnRlcmZhY2U6OkV2ZW50OjpIYW5kbGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUcmFuc2FjdGlvbiI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXZlbnQiPjwvSXRlbT48IS0tIHJ1biBvbiBhbGwgZXZlbnRzIC0tPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVdvcmtPcmRlcjo6RXZlbnRNb2R1bGUjIyMxMDAwLUdlbmVyaWNJbnRlcmZhY2UiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGVyZm9ybXMgdGhlIGNvbmZpZ3VyZWQgYWN0aW9uIGZvciBlYWNoIGV2ZW50IChhcyBhbiBJbnZva2VyKSBmb3IgZWFjaCBjb25maWd1cmVkIFdlYnNlcnZpY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDaGFuZ2UgTWFuYWdlbWVudDwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Xb3JrT3JkZXI6OkV2ZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpHZW5lcmljSW50ZXJmYWNlOjpFdmVudDo6SGFuZGxlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHJhbnNhY3Rpb24iPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkV2ZW50Ij48L0l0ZW0+PCEtLSBydW4gb24gYWxsIGV2ZW50cyAtLT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KPC9vdHJzX2NvbmZpZz4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGVfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLYXRlZ29yaWUgPC0+IEF1c3dpcmt1bmcgPC0+IFByaW9yaXTDpHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ2F0ZWdvcnkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ1ZlcndhbHR1bmcgZGVyIFByaW9yaXTDpHQgYXVzIGRlciBLb21iaW5hdGlvbiB2b24gS2F0ZWdvcmllIDwtPiBJbXBhY3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdQcmlvcml0w6R0IHp1b3JkbmVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlTWFuYWdlbWVudCBOb3RpZmljYXRpb24gTWFuYWdlbWVudCd9ID0gJ0lUU00gQ2hhbmdlTWFuYWdlbWVudCBCZW5hY2hyaWNodGlndW5ncy1WZXJ3YWx0dW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOb3RpZmljYXRpb24gUnVsZSd9ID0gJ0JlbmFjaHJpY2h0aWd1bmdzLVJlZ2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1bGUnfSA9ICdSZWdlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG5vdGlmaWNhdGlvbiBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnRWluZSBCZW5hY2hyaWNodGlndW5nIGJlbsO2dGlndCBlaW5lbiBOYW1lbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZC4nfSA9ICdOYW1lIGlzdCBlcmZvcmRlcmxpY2guJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01TdGF0ZU1hY2hpbmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFN0YXRlIE1hY2hpbmUnfSA9ICdBZG1pbiBTdGF0ZSBNYWNoaW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIGNhdGFsb2cgY2xhc3MhJ30gPSAnV8OkaGxlbiBTaWUgZWluZSBLYXRhbG9nLUtsYXNzZSBhdXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0YWxvZyBjbGFzcyBpcyByZXF1aXJlZCEnfSA9ICdFaW5lIEthdGFsb2ctS2xhc3NlIGlzdCBlcmZvcmRlcmxpY2ghJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHN0YXRlIHRyYW5zaXRpb24nfSA9ICdIaW56dWbDvGdlbiBlaW5lcyBTdGF0dXMtw5xiZXJnYW5ncyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2F0YWxvZy1LbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IE5hbWUnfSA9ICdPYmpla3QtTmFtZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIHN0YXRlIHRyYW5zaXRpb25zIGZvcid9ID0gJ8OcYmVyc2ljaHQgw7xiZXIgU3RhdHVzw7xiZXJnw6RuZ2UgZsO8cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnTMO2c2NoZW4gZGllc2VzIFN0YXR1cy3DnGJlcmdhbmdzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ0hpbnp1ZsO8Z2VuIGVpbmVzIG5ldWVuIFN0YXR1cy3DnGJlcmdhbmdzIGbDvHInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhIHN0YXRlISd9ID0gJ0JpdHRlIHfDpGhsZW4gU2llIGVpbmVuIFN0YXR1cyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhIG5leHQgc3RhdGUhJ30gPSAnQml0dGUgd8OkaGxlbiBzaWUgZGVuIEZvbGdlLVN0YXR1cyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBhIHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAnQmVhcmJlaXRlbiBlaW5lcyBTdGF0dXMtw5xiZXJnYW5ncyBmw7xyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIHN0YXRlIHRyYW5zaXRpb24nfSA9ICdXb2xsZW4gU2llIGRpZXNlbiBTdGF0dXMtw5xiZXJnYW5nIHdpcmtsaWNoIGzDtnNjaGVuPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2hhbmdlJ30gPSAnQ2hhbmdlIGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlJ30gPSAnQ2hhbmdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1c3RpZmljYXRpb24nfSA9ICdCZWdyw7xuZHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnB1dCBpbnZhbGlkLid9ID0gJ1VuZ8O8bHRpZ2UgRWluZ2FiZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnQXVzd2lya3VuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0ZWQgRGF0ZSd9ID0gJ1d1bnNjaHRlcm1pbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgQ2hhbmdlIFRlbXBsYXRlJ30gPSAnQ2hhbmdlLVZvcmxhZ2UgYXVzd8OkaGxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIHR5cGUnfSA9ICdaZWl0LVR5cCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHRpbWUgdHlwZS4nfSA9ICdVbmfDvGx0aWdlciBaZWl0LVR5cC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpbWUnfSA9ICdOZXVlIFplaXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBDQUIgYXMgdGVtcGxhdGUnfSA9ICdEaWVzZW4gQ2hhbmdlIGFscyBWb3JsYWdlIHNwZWljaGVybic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyB0byBpbnZvbHZlZCBwZXJzb25zIHNjcmVlbid9ID0gJ2dlaGUgenVtIFNjcmVlbiAiQmV0ZWlsaWd0ZSBQZXJzb25lbiInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBOYW1lJ30gPSAnVW5nw7xsdGlnZXIgTmFtZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25zIGFuZCBBY3Rpb25zJ30gPSAnQmVkaW5ndW5nZW4gdW5kIEFrdGlvbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25kaXRpb24nfSA9ICdCZWRpbmd1bmcgbMO2c2NoZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBjb25kaXRpb24nfSA9ICdCZWRpbmd1bmcgaGluenVmw7xnZW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29uZGl0aW9uJ30gPSAnQmVkaW5ndW5nIGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBhIHZhbGlkIG5hbWUuJ30gPSAnRWluIGfDvGx0aWdlciBOYW1lIGlzdCBlcmZvcmRlcmxpY2guJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdmFsaWQgbmFtZSBpcyBuZWVkZWQuJ30gPSAnRWluIGfDvGx0aWdlciBOYW1lIGlzdCBlcmZvcmRlcmxpY2guJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lOid9ID0gJ0RvcHBlbHRlciBOYW1lOic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkIGJ5IGFub3RoZXIgY29uZGl0aW9uLid9ID0gJ0RpZXNlciBOYW1lIHdpcmQgYmVyZWl0cyB2b24gZWluZXIgYW5kZXJlbiBCZWRpbmd1bmcgdmVyd2VuZGV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXRjaGluZyd9ID0gJ8OcYmVyZWluc3RpbW11bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW55IGV4cHJlc3Npb24gKE9SKSd9ID0gJ0JlbGllYmlnZXIgbG9naXNjaGVyIEF1c2RydWNrIChPREVSKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgZXhwcmVzc2lvbnMgKEFORCknfSA9ICdBbGxlIGxvZ2lzY2hlbiBBdXNkcsO8Y2tlIChVTkQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cHJlc3Npb25zJ30gPSAnTG9naXNjaGUgQXVzZHLDvGNrZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3Rvcid9ID0gJ1NlbGVrdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdG9yJ30gPSAnT3BlcmF0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEV4cHJlc3Npb24nfSA9ICdBdXNkcnVjayBsw7ZzY2hlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBFeHByZXNzaW9ucyBmb3VuZC4nfSA9ICdLZWluZW4gbG9naXNjaGVuIEF1c2RydWNrIGdlZnVuZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGV4cHJlc3Npb24nfSA9ICdGw7xnZSBlaW5lbiBuZXVlbiBsb2dpc2NoZW4gQXVzZHJ1Y2sgaGluenUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEFjdGlvbid9ID0gJ0FrdGlvbiBsw7ZzY2hlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBBY3Rpb25zIGZvdW5kLid9ID0gJ0tlaW5lIEFrdGlvbmVuIGdlZnVuZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGFjdGlvbid9ID0gJ0bDvGdlIGVpbmUgbmV1ZSBBa3Rpb24gaGluenUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNoYW5nZT8nfSA9ICdNw7ZjaHRlbiBTaWUgZGllc2VuIENoYW5nZSB3aXJrbGljaCBsw7ZzY2hlbj8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgJXMlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiAlcyVzJ30gPSAnVmVybGF1ZiB2b24gJXMlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXInfSA9ICdBcmJlaXRzYXVmdHJhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGRldGFpbHMnfSA9ICdEZXRhaWxzIGFuemVpZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgd29ya29yZGVyJ30gPSAnQXJiZWl0c2F1ZnRyYWcgYW56ZWlnZW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxlZCBoaXN0b3J5IGluZm9ybWF0aW9uIG9mICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGlmaWVkJ30gPSAnTW9kaWZpemllcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2xkIFZhbHVlJ30gPSAnQWx0ZXIgV2VydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgVmFsdWUnfSA9ICdOZXVlciBXZXJ0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSW52b2x2ZWQgUGVyc29ucyBvZiAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludm9sdmVkIFBlcnNvbnMnfSA9ICdCZXRlaWxpZ3RlIFBlcnNvbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZU1hbmFnZXInfSA9ICdDaGFuZ2UtTWFuYWdlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIGludmFsaWQuJ30gPSAnVW5nw7xsdGlnZXIgQmVudXR6ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlQnVpbGRlcid9ID0gJ0NoYW5nZS1CdWlsZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBBZHZpc29yeSBCb2FyZCd9ID0gJ0NoYW5nZS1BZHZpc29yeS1Cb2FyZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgVGVtcGxhdGUnfSA9ICdDQUItVm9ybGFnZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHBseSBUZW1wbGF0ZSd9ID0gJ1ZvcmxhZ2UgYW53ZW5kZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3VGVtcGxhdGUnfSA9ICdOZXVlIFZvcmxhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSB0aGlzIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJ0RpZXNlcyBDQUIgYWxzIFZvcmxhZ2Ugc3BlaWNoZXJuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0byBDQUInfSA9ICdadW0gQ0FCIGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgVXNlcid9ID0gJ1VuZ8O8bHRpZ2VyIEJlbnV0emVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgQ0FCJ30gPSAnQWt0dWVsbGVzIENBQic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdLb250ZXh0LUVpbnN0ZWxsdW5nZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlcyBwZXIgcGFnZSd9ID0gJ0NoYW5nZXMgcHJvIFNlaXRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgVGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFRpdGxlJ30gPSAnVGl0ZWwgw6RuZGVybic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEJ1aWxkZXInfSA9ICdDaGFuZ2UtQnVpbGRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgTWFuYWdlcid9ID0gJ0NoYW5nZS1NYW5hZ2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlcnMnfSA9ICdBcmJlaXRzYXVmdHLDpGdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTdGF0ZSd9ID0gJ8OEbmRlcnVuZ3NzdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBUaW1lJ30gPSAnV3Vuc2NodGVybWluJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgU3RhcnQgVGltZSd9ID0gJ0dlcGxhbnRlIFN0YXJ0emVpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVuZCBUaW1lJ30gPSAnR2VwbGFudGUgRW5kemVpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWwgU3RhcnQgVGltZSd9ID0gJ1RhdHPDpGNobGljaGUgU3RhcnR6ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBFbmQgVGltZSd9ID0gJ1RhdHPDpGNobGljaGUgRW5kemVpdCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlUmVzZXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byByZXNldCB0aGlzIGNoYW5nZT8nfSA9ICdNw7ZjaHRlbiBTaWUgZGllc2VuIENoYW5nZSB3aXJrbGljaCB6dXLDvGNrc2V0emVuPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoZS5nLiAxMCo1MTU1IG9yIDEwNTY1OCopJ30gPSAnKHouIEIuIDEwKjUxNTUgb3IgMTA1NjU4KiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIEFnZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuZy4nfSA9ICd6LiBCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQ3VzdG9tZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgUmVwb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIEltcGFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQ2F0ZWdvcnknfSA9ICdDaGFuZ2UtS2F0ZWdvcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhiZWZvcmUvYWZ0ZXIpJ30gPSAnKHZvci9uYWNoKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoYmV0d2VlbiknfSA9ICcoendpc2NoZW4pJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VUZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBDaGFuZ2UgYXMgVGVtcGxhdGUnfSA9ICdTcGVpY2hlcmUgQ2hhbmdlIGFscyBWb3JsYWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdGVtcGxhdGUgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ0VpbmUgVm9ybGFnZSBiZW7DtnRpZ3QgZWluZW4gTmFtZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLid9ID0gJ0RlciBWb3JsYWdlbi1OYW1lIGlzdCBlcmZvcmRlcmxpY2guJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IFN0YXRlcyd9ID0gJ1NldHplIFN0YXR1cyB6dXLDvGNrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ3cml0ZSBvcmlnaW5hbCB0ZW1wbGF0ZSd9ID0gJ09yaWdpbmFsLVRlbXBsYXRlIMO8YmVyc2NocmVpYmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCBjaGFuZ2UnfSA9ICdPcmlnaW5hbC1DaGFuZ2UgbMO2c2NoZW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRpbWVTbG90CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIFRpbWUgU2xvdCd9ID0gJ1ZlcnNjaGllYmUgWmVpdGZlbnN0ZXInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbmZvcm1hdGlvbid9ID0gJ0NoYW5nZS1JbmZvcm1hdGlvbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRWZmb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjY291bnRlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbml0aWF0b3IocyknfSA9ICdDaGFuZ2UgSW5pdGlhdG9yKHMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQid9ID0gJ0NBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdadWxldHp0IGdlw6RuZGVydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdadWxldHp0IGdlw6RuZGVydCB2b24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gYmxvY2tzLCB5b3UgbWlnaHQgbmVlZCB0byBwcmVzcyBDdHJsIG9yIENtZCBvciBTaGlmdCBrZXkgd2hpbGUgY2xpY2tpbmcgdGhlIGxpbmsgKGRlcGVuZGluZyBvbiB5b3VyIGJyb3dzZXIgYW5kIE9TKS4nfSA9CiAgICAgICAgJ1VtIGRpZSBMaW5rcyBpbSBmb2xnZW5kZW4gQmVpdHJhZyB6dSDDtmZmbmVuLCBrYW5uIGVzIG5vdHdlbmRpZyBzZWluIFN0cmcgb2RlciBTaGlmdCB6dSBkcsO8Y2tlbiwgd8OkaHJlbmQgYXVmIGRlbiBMaW5rIGdla2xpY2t0IHdpcmQgKGFiaMOkbmdpZyB2b20gdmVyd2VuZGV0ZW4gQnJvd3NlciB1bmQgQmV0cmllYnNzeXN0ZW0pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnQW5oYW5nIGhlcnVudGVybGFkZW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlRWRpdENBQgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDQUIgVGVtcGxhdGUnfSA9ICdDQUItVGVtcGxhdGUgYmVhcmJlaXRlbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBjaGFuZ2UgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICdEaWVzZXMgd2lyZCBlaW5lbiBuZXVlbiBDaGFuZ2UgYXVzIGRpZXNlbSBUZW1wbGF0ZSBlcnN0ZWxsZW4sIFNpZSBrw7ZubmVuIGRpZXNlbiBlZGl0aWVyZW4gdW5kIHNwZWljaGVybi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5ldyBjaGFuZ2Ugd2lsbCBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgaXQgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICdEZXIgbmV1ZSBDaGFuZ2Ugd2lyZCBhdXRvbWF0aXNjaCBnZWzDtnNjaHQsIG5hY2hkZW0gZGllc2VyIGFscyBUZW1wbGF0ZSBnZXNwZWljaGVydCB3dXJkZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyB3b3Jrb3JkZXIgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICdEaWVzZXMgd2lyZCBlaW5lbiBuZXVlbiBBcmJlaXRzYXVmdHJhZyBhdXMgZGllc2VyIFZvcmxhZ2UgZXJzdGVsbGVuLCBTaWUga8O2bm5lbiBkaWVzZSBlZGl0aWVyZW4gdW5kIHNwZWljaGVybi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB0ZW1wb3JhcnkgY2hhbmdlIHdpbGwgYmUgY3JlYXRlZCB3aGljaCBjb250YWlucyB0aGUgd29ya29yZGVyLid9ID0KICAgICAgICAnRWluZSB0ZW1wb3LDpHJlIMOEbmRlcnVuZyB3aXJkIGVyc3RlbGx0LCBkZXIgZGVuIEFyYmVpdHNhdWZ0cmFnIGVudGjDpGx0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcG9yYXJ5IGNoYW5nZSBhbmQgbmV3IHdvcmtvcmRlciB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciB0aGUgd29ya29yZGVyIGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAnRGllIHRlbXBvcsOkcmUgw4RuZGVydW5nIHVuZCBkZXIgbmV1ZSBBcmJlaXRzYXVmdHJhZyB3aXJkIGF1dG9tYXRpc2NoIGdlbMO2c2NodCwgbmFjaGRlbSBkZXIgQXJiZWl0c2F1ZnRyYWcgYWxzIFZvcmxhZ2UgZ2VzcGVpY2hlcnQgd3VyZGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSB3YW50IHRvIHByb2NlZWQ/J30gPSAnTcO2Y2h0ZW4gU2llIGZvcnRmYWhyZW4/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIElEJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29udGVudCd9ID0gJ0luaGFsdCBiZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFRpbWUnfSA9ICdaZWl0IMOkbmRlcm4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUZW1wbGF0ZSBDb250ZW50J30gPSAnVm9ybGFnZW5pbmhhbHQgYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgVGVtcGxhdGUnfSA9ICdWb3JsYWdlIEzDtnNjaGVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgdG8gJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0cnVjdGlvbid9ID0gJ0Fud2Vpc3VuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHdvcmtvcmRlciB0eXBlLid9ID0gJ1VuZ8O8bHRpZ2VyIEFyYmVpdHNhdWZ0cmFnc3R5cCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgcGxhbm5lZCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBwbGFubmVkIGVuZCB0aW1lISd9ID0gJ0RlciBnZXBsYW50ZSBTdGFydCBtdXNzIHZvciBkZW0gZ2VwbGFudGVuIEVuZGUgbGllZ2VuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGZvcm1hdC4nfSA9ICdVbmfDvGx0aWdlcyBGb3JtYXQuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBXb3Jrb3JkZXIgVGVtcGxhdGUnfSA9ICdBcmJlaXRzYXVmdHJhZ3N2b3JsYWdlIGF1c3fDpGhsZW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFnZW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFdvcmtvcmRlciBBZ2VudCBvZiAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyB3b3Jrb3JkZXI/J30gPSAnTcO2Y2h0ZW4gU2llIGRpZXNlbiBBcmJlaXRzYXVmdHJhZyB3aXJrbGljaCBsw7ZzY2hlbj8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgV29ya29yZGVyLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBDb25kaXRpb24hJ30gPQogICAgICAgICdTaWUga8O2bm5lbiBkaWVzZW4gQXJiZWl0c2F1ZnRyYWcgbmljaHQgbMO2c2NoZW4uIFNpZSB3aXJkIGluIG1pbmRlc3RlbnMgZWluZXIgQmVkaW5ndW5nIHZlcndlbmRldCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBXb3Jrb3JkZXIgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIENvbmRpdGlvbihzKSd9ID0gJ0RpZXNlciBBcmJlaXRzYXVmdHJhZyBmaW5kZXQgVmVyd2VuZHVuZyBpbiBkZW4gZm9sZ2VuZGVuIEJlZGluZ3VuZyhlbiknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgJXMlcy0lcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIGZvbGxvd2luZyB3b3Jrb3JkZXJzIGFjY29yZGluZ2x5J30gPSAnTmFjaGZvbGdlbmRlIEFyYmVpdHNhdWZ0csOkZ2UgZW50c3ByZWNoZW5kIHZlcnNjaGllYmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHRoZSBwbGFubmVkIGVuZCB0aW1lIG9mIHRoaXMgd29ya29yZGVyIGlzIGNoYW5nZWQsIHRoZSBwbGFubmVkIHN0YXJ0IHRpbWVzIG9mIGFsbCBmb2xsb3dpbmcgd29ya29yZGVycyB3aWxsIGJlIGNoYW5nZWQgYWNjb3JkaW5nbHknfSA9CiAgICAgICAgJ1dlbm4gZGllIGdlcHBsYW50ZSBFbmR6ZWl0IGVpbmVzIEFyYmVpdHNhdWZ0cmFncyBnZcOkbmRlcnQgd2lyZCwgZGFubiB3ZXJkZW4gZGllIG5hY2hmb2xnZW5kZW4gQXJiZWl0c2F1ZnRyw6RnZSBlbnRzcHJlY2hlbmQgdmVyc2Nob2Jlbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiAlcyVzLSVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJSZXBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUmVwb3J0IG9mICVzJXMtJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0J30gPSAnQmVyaWNodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWN0dWFsIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgdGltZSEnfSA9ICdEaWUgdGF0c8OkY2hsaWNoZSBTdGFydHplaXQgbXVzcyB2b3IgZGVyIHRhdHPDpGNobGljaGVuIEVuZHplaXQgbGllZ2VuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWN0dWFsIHN0YXJ0IHRpbWUgbXVzdCBiZSBzZXQsIHdoZW4gdGhlIGFjdHVhbCBlbmQgdGltZSBpcyBzZXQhJ30gPQogICAgICAgICdEaWUgdGF0c8OkY2hsaWNoZSBTdGFydHplaXQgbXVzcyBhbmdlZ2ViZW4gd3JlZGVuLCB3ZW5uIGVpbmUgdGF0c8OkY2hsaWNoZSBFbmR6ZWl0IGFuZ2VnZWJlbiB3dXJkZSEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRha2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgQWdlbnQnfSA9ICdBa3R1ZWxsZXIgQWdlbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIHRha2UgdGhpcyB3b3Jrb3JkZXI/J30gPSAnV29sbGVuIHNpZSBkaWVzZW4gQXJiZWl0c2F1ZnRyYWcgd2lya2xpY2ggw7xiZXJuZWhtZW4/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJUZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBXb3Jrb3JkZXIgYXMgVGVtcGxhdGUnfSA9ICdBcmJlaXRzYXVmdHJhZyBhbHMgVm9ybGFnZSBzcGVpY2hlcm4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIG9yaWdpbmFsIHdvcmtvcmRlciAoYW5kIHN1cnJvdW5kaW5nIGNoYW5nZSknfSA9ICdPcmlnaW5hbC1BcmJlaXRzYXVmdHJhZyAodW5kIGRlciB1bWdlYmVuZGVuIMOEbmRlcnVuZykgbMO2c2NoZW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBJbmZvcm1hdGlvbid9ID0gJ0FyYmVpdHNhdWZ0cmFnc2luZm9ybWF0aW9uZW4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biBub3RpZmljYXRpb24gJXMhJ30gPSAnVW5iZWthbm50ZSBCZW5hY2hyaWNodGlndW5nICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSB3YXMgYW4gZXJyb3IgY3JlYXRpbmcgdGhlIG5vdGlmaWNhdGlvbi4nfSA9ICdCZWltIEVyc3RlbGxlbiBkZXIgQmVuYWNocmljaHRpZ3VuZyBpc3QgZWluIEZlaGxlciBhdWZnZXRyZXRlbi4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ2hhbmdlcyd9ID0gJ0NoYW5nZXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUFkZC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHdpdGggVGlja2V0SUQgJXMgZG9lcyBub3QgZXhpc3QhJ30gPSAnVGlja2V0IG1pdCBUaWNrZXQtS2VubnVuZyAlcyBpc3QgbmljaHQgdm9yaGFuZGVuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaXNzaW5nIHN5c2NvbmZpZyBvcHRpb24gIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGFkZCBjaGFuZ2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlIGZyb20gdGVtcGxhdGUhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDQUJUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnS2VpbmUgw4RuZGVydW5nc2tlbm51bmcgw7xiZXJtaXR0ZWx0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjaGFuZ2UgZm91bmQgZm9yIGNoYW5nZUlEICVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgQ0FCIG9mIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIHRoZSB0ZW1wbGF0ZS4nfSA9ICdWb3JsYWdlIGtvbm50ZSBuaWNodCBoaW56dWdlZsO8Z3Qgd2VyZGVuLic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnw4RuZGVydW5nICIlcyIgaW4gZGVyIERhdGVuYmFuayBuaWNodCBnZWZ1bmRlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBDb25kaXRpb25JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vICVzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgY3JlYXRlIG5ldyBjb25kaXRpb24hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgQ29uZGl0aW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgRXhwcmVzc2lvbklEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIG5ldyBFeHByZXNzaW9uISd9ID0gJ05ldWVyIEF1c2RydWNrIGtvbm50ZSBuaWNodCBoaW56dWdlZsO8Z3Qgd2VyZGVuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIEFjdGlvbklEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIG5ldyBBY3Rpb24hJ30gPSAnTmV1ZSBBa3Rpb24ga29ubnRlIG5pY2h0IGhpbnp1Z2Vmw7xndCB3ZXJkZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgRXhwcmVzc2lvbklEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIEFjdGlvbklEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcjogVW5rbm93biBmaWVsZCB0eXBlICIlcyIhJ30gPSAnRmVobGVyOiBVbmJla2FubnRlciBGZWxkdHlwICIlcyIhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbklEICVzIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgZ2l2ZW4gQ2hhbmdlSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSAiJXMiIGRvZXMgbm90IGhhdmUgYW4gYWxsb3dlZCBjaGFuZ2Ugc3RhdGUgdG8gYmUgZGVsZXRlZCEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjaGFuZ2VJRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnw4RuZGVydW5nICIlcyIgaW4gZGVyIERhdGVuYmFuayBuaWNodCBnZWZ1bmRlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biB0eXBlICIlcyIgZW5jb3VudGVyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5J30gPSAnw4RuZGVydW5nc2Nocm9uaWsnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5IHpvb20sIG5vIEhpc3RvcnlFbnRyeUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5RW50cnkgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlIENBQiBmb3IgQ2hhbmdlICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU1hbmFnZXIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2VNYW5hZ2VyJ30gPSAnw5xiZXJzaWNodDogw4RuZGVydW5nc1ZlcndhbHRlcic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBDQUInfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU15Q2hhbmdlcy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IENoYW5nZXMnfSA9ICfDnGJlcnNpY2h0OiBNZWluZSDDhG5kZXJ1bmdlbic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgV29ya29yZGVycyd9ID0gJ8OcYmVyc2ljaHQ6IE1laW5lIEFyYmVpdHNhdWZ0csOkZ2UnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVBJUi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFBJUid9ID0gJ8OcYmVyc2ljaHQ6IFBJUic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUFNBLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUFNBJ30gPSAnT3ZlcnZpZXc6IFBTQSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdBcmJlaXRzYXVmdHJhZyAiJXMiIGluIERhdGVuYmFuayBuaWNodCBnZWZ1bmRlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGNyZWF0ZSBvdXRwdXQsIGFzIHRoZSB3b3Jrb3JkZXIgaXMgbm90IGF0dGFjaGVkIHRvIGEgY2hhbmdlISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBjcmVhdGUgb3V0cHV0LCBhcyBubyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93biBjaGFuZ2UgdGl0bGUnfSA9ICd1bmJla2FubnRlciDDhG5kZXJ1bmdzdGl0ZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXInfSA9ICdJVFNNIEFyYmVpdHNhdWZ0cmFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gd29ya29yZGVyIHRpdGxlJ30gPSAndW5iZWthbm50ZXIgQXJiZWl0c2F1ZnRyYWdzdGl0ZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgT3ZlcnZpZXcgKCVzKSd9ID0gJ0lUU00tQXJiZWl0c2F1ZnRyYWfDvGJlcnNpY2h0ICglcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZFN0YXJ0VGltZSd9ID0gJ0dlcGxhbnRlciBTdGFydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkRW5kVGltZSd9ID0gJ0dlcGxhbnRlcyBFbmRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbFN0YXJ0VGltZSd9ID0gJ1RhdHPDpGNobGljaGVyIFN0YXJ0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbEVuZFRpbWUnfSA9ICdUYXRzw6RjaGxpY2hlcyBFbmRlJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VSZXNldC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHJlc2V0IFdvcmtPcmRlciAlcyBvZiBDaGFuZ2UgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byByZXNldCBDaGFuZ2UgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VTY2hlZHVsZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IENoYW5nZSBTY2hlZHVsZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2VhcmNoJ30gPSAnU3VjaGUgw6RuZGVybic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VUaXRsZSd9ID0gJ0NoYW5nZS1UaXRlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJzJ30gPSAnQXJiZWl0c2F1ZnRyYWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlU3RhdGUnfSA9ICdDaGFuZ2UtU3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTZWFyY2ggUmVzdWx0J30gPSAnU3VjaGVyZ2VibmlzIMOkbmRlcm4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE51bWJlcid9ID0gJ051bW1lciDDpG5kZXJuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmsgT3JkZXIgVGl0bGUnfSA9ICdBcmJlaXRzYXVmdHJhZ3RpdGVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBEZXNjcmlwdGlvbid9ID0gJ8OEbmRlcnVuZ3NiZXNjaHJlaWJ1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEp1c3RpZmljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEluc3RydWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBSZXBvcnQnfSA9ICdBcmJlaXRzYXVmdHJhZ3NiZXJpY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBQcmlvcml0eSd9ID0gJ8OEbmRlcnVuZ3Nwcmlvcml0w6R0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbXBhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBCeSd9ID0gJ0Vyc3RlbGx0IHZvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgU3RhdGUnfSA9ICdBcmJlaXRzYXVmdHJhZ3NzdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFR5cGUnfSA9ICdBcmJlaXRzYXVmdHJhZ3R5cCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgQWdlbnQnfSA9ICdBcmJlaXRzYXVmdHJhZ3NhZ2VudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiZWZvcmUnfSA9ICd2b3InOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgdGhlIHRlbXBsYXRlICIlcyIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgY2hhbmdlICIlcyIuJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VUaW1lU2xvdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGNoYW5nZSBjYW5cJ3QgYmUgbW92ZWQsIGFzIGl0IGhhcyBubyB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgZmlyc3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBtb3ZlIGEgY2hhbmdlIHdoaWNoIGFscmVhZHkgaGFzIHN0YXJ0ZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBtb3ZlIHRoZSBpbmRpdmlkdWFsIHdvcmtvcmRlcnMgaW5zdGVhZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGN1cnJlbnQgJXMgY291bGQgbm90IGJlIGRldGVybWluZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSAlcyBvZiBhbGwgd29ya29yZGVycyBoYXMgdG8gYmUgZGVmaW5lZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIG1vdmUgdGltZSBzbG90IGZvciB3b3Jrb3JkZXIgIyVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkICVzIHBlcm1pc3Npb24hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFRlbXBsYXRlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSB0ZW1wbGF0ZSAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBUZW1wbGF0ZSAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdENBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBUZW1wbGF0ZSAiJXMiISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSBjaGFuZ2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgd29ya29yZGVyIGZyb20gdGVtcGxhdGUhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogVGVtcGxhdGUnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFkZC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMgb24gdGhlIGNoYW5nZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGFkZCB3b3Jrb3JkZXIhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJBZ2VudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBzZXQgdGhlIHdvcmtvcmRlciBhZ2VudCBvZiB0aGUgd29ya29yZGVyICIlcyIgdG8gZW1wdHkhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSB0aGUgd29ya29yZGVyICIlcyIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBmaW5kIENoYW5nZSBmb3IgV29ya09yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSB3b3Jrb3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFdvcmtPcmRlciAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIGFzIG5vIFdvcmtPcmRlcklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJIaXN0b3J5OjonfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEhpc3RvcnknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IGVudHJ5ICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEhpc3RvcnkgWm9vbSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyVGFrZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHRha2UgdGhlIHdvcmtvcmRlciAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgd29ya29yZGVyICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGF5b3V0L0lUU01DaGFuZ2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWQgY29uZmlnIG9wdGlvbiAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIG9wdGlvbiAlcyBuZWVkcyB0byBiZSBhIEhBU0ggcmVmISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjb25maWcgb3B0aW9uIGZvdW5kIGZvciB0aGUgdmlldyAiJXMiISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaXRsZTogJXMgfCBUeXBlOiAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IENBQnMnfSA9ICdNZWluZSBDQUJzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNoYW5nZXMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IENoYW5nZXMnfSA9ICdNZWluZSBDaGFuZ2VzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeVdvcmtPcmRlcnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IFdvcmsgT3JkZXJzJ30gPSAnTWVpbmUgQXJiZWl0c2F1ZnRyw6RnZSc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNoYW5nZU1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVxdWVzdGVkJ30gPSAnUmVxdWVzdGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3BlbmRpbmcgYXBwcm92YWwnfSA9ICdQZW5kaW5nIEFwcHJvdmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlamVjdGVkJ30gPSAnUmVqZWN0ZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYXBwcm92ZWQnfSA9ICdBcHByb3ZlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbiBwcm9ncmVzcyd9ID0gJ0luIFByb2dyZXNzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3BlbmRpbmcgcGlyJ30gPSAnUGVuZGluZyBQSVInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc3VjY2Vzc2Z1bCd9ID0gJ1N1Y2Nlc3NmdWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZmFpbGVkJ30gPSAnRmFpbGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NhbmNlbGVkJ30gPSAnQ2FuY2VsZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmV0cmFjdGVkJ30gPSAnUmV0cmFjdGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NyZWF0ZWQnfSA9ICdDcmVhdGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FjY2VwdGVkJ30gPSAnQWNjZXB0ZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVhZHknfSA9ICdSZWFkeSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZhbCd9ID0gJ0dlbmVobWlndW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dvcmtvcmRlcid9ID0gJ0FyYmVpdHNhdWZ0cmFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JhY2tvdXQnfSA9ICdCYWNrb3V0IFBsYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZGVjaXNpb24nfSA9ICdFbnRzY2hlaWR1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGlyJ30gPSAnUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMnfSA9ICdpc3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbm90J30gPSAnaXN0IG5pY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGVtcHR5J30gPSAnaXN0IGxlZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbm90IGVtcHR5J30gPSAnaXN0IG5pY2h0IGxlZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZ3JlYXRlciB0aGFuJ30gPSAnaXN0IGdyw7Zzc2VyIGFscyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBsZXNzIHRoYW4nfSA9ICdpc3Qga2xlaW5lciBhbHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgYmVmb3JlJ30gPSAnaXN0IHZvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBhZnRlcid9ID0gJ2lzdCBuYWNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NvbnRhaW5zJ30gPSAnZW50aMOkbHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGNvbnRhaW5zJ30gPSAnZW50aMOkbHQgbmljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmVnaW5zIHdpdGgnfSA9ICdiZWdpbm50IG1pdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlbmRzIHdpdGgnfSA9ICdlbmRldCBtaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc2V0J30gPSAnc2V0emUnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2YgdGhlIGFnZW50cyB3aG8gaGF2ZSBwZXJtaXNzaW9uIHRvIHRha2Ugd29ya29yZGVycy4gS2V5IGlzIGEgbG9naW4gbmFtZS4gQ29udGVudCBpcyAwIG9yIDEuJ30gPQogICAgICAgICdFaW5lIExpc3RlIGRlciBBZ2VudGVuLCBkaWUgWnVncmlmZiBhdWYgQXJiZWl0c2F1ZnRyw6RnZSBoYWJlbi4gU2NobMO8c3NlbCBpc3QgZGVyIEFubWVsZGVuYW1lLiBJbmhhbHQgaXN0IDAgb2RlciAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbGlzdCBvZiB3b3Jrb3JkZXIgc3RhdGVzLCBhdCB3aGljaCB0aGUgQWN0dWFsU3RhcnRUaW1lIG9mIGEgd29ya29yZGVyIHdpbGwgYmUgc2V0IGlmIGl0IHdhcyBlbXB0eSBhdCB0aGlzIHBvaW50Lid9ID0KICAgICAgICAnRWluZSBMaXN0ZSB2b24gQXJiZWl0c2F1ZnRyYWdzc3RhdGVuLCBiZWkgZGVuZW4gZGllIEFjdHVhbFN0YXJ0VGltZSBlaW5lcyBBcmJlaXRzYXVmdHJhZ3MgZmVzdGdlbGVndCB3aXJkLCB3ZW5uIGRpZXNlIHZvcmhlciBuaWNodCBmZXN0Z2VsZWd0IHdhci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlcid9ID0gJ0FyYmVpdHNhdWZ0cmFnIGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgKGZyb20gVGVtcGxhdGUpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIGNoYW5nZSBmcm9tIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciAoZnJvbSB0ZW1wbGF0ZSkgdG8gdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBmcm9tIHRlbXBsYXRlJ30gPSAnVm9uIFRlbXBsYXRlIGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIHRoZSBDSVAgbWF0cml4Lid9ID0gJ0FkbWluIGRlciBDSVAtTWF0cml4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgc3RhdGUgbWFjaGluZS4nfSA9ICdBZG1pbiBkZXIgU3RhdGUgTWFjaGluZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2UgYWR2aXNvcnkgYm9hcmRzLid9ID0KICAgICAgICAnQWdlbnRlbi1BbnNpY2h0IEJlbmFjaHJpY2h0aWd1bmctTW9kdWwgdW0gZGllIFphaGwgZGVyIENoYW5nZS1BZHZpc29yeS1Cb2FyZHMgYW56dXplaWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlcyBtYW5hZ2VkIGJ5IHRoZSB1c2VyLid9ID0KICAgICAgICAnQWdlbnRlbi1BbnNpY2h0IEJlbmFjaHJpY2h0aWd1bmctTW9kdWwgdW0gZGllIFphaGwgZGVyIENoYW5nZXMgYW56dXplaWdlbiBkaWUgdm9tIEJlbnV0emVyIHZlcndhbHRldCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMuJ30gPQogICAgICAgICdBZ2VudGVuLUFuc2ljaHQgQmVuYWNocmljaHRpZ3VuZy1Nb2R1bCB1bSBkaWUgWmFobCBkZXIgQ2hhbmdlcyBhbnp1emVpZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBNZW1iZXIgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50IHRvb2xiYXJzLiBEZWZhdWx0OiAzIGhvdXJzICgxODAgbWludXRlcykuJ30gPQogICAgICAgICdDYWNoZS1aZWl0IGluIE1pbnV0ZW4gZsO8ciBkaWUgQ2hhbmdlIE1hbmFnZW1lbnQgV2Vya3pldWdsZWlzdGUuIFN0YW5kYXJkOiAzIFN0dW5kZW4gKDE4MCBNaW51dGVuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudC4gRGVmYXVsdDogNSBkYXlzICg3MjAwIG1pbnV0ZXMpLid9ID0KICAgICAgICAnQ2FjaGUtWmVpdCBpbiBNaW51dGVuIGbDvHIgZGllIENoYW5nZSBNYW5hZ2VtZW50LiBTdGFuZGFyZDogNSBUYWdlICg3MjAwIE1pbnV0ZW4pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQ0FCIFRlbXBsYXRlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEludm9sdmVkIFBlcnNvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnQ2hhbmdlIMOcYmVyc2ljaHQgQW56ZWlnZSBMaW1pdCBmw7xyICJTbWFsbCInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZSd9ID0gJ0NoYW5nZSBTY2hlZHVsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2NoZWR1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIFdvcmtvcmRlciBUZW1wbGF0ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFuZCB3b3Jrb3JkZXIgdGVtcGxhdGVzIGVkaXRlZCBieSB0aGlzIHVzZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhcmVhLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgaW52b2x2ZWQgcGVyc29ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgbGltaXQgcGVyIHBhZ2UgZm9yIENoYW5nZSBPdmVydmlldyAiU21hbGwiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2Ugc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnU3VjaC1CYWNrZW5kLVJvdXRlciBmw7xyIGRpZSBDaGFuZ2UtU3VjaGUgaW4gZGVyIEFnZW50ZW4tQW5zaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIEVkaXQnfSA9ICdCZWRpbmd1bmcgYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb24gT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlIHdoaWNoIHNjcmVlbiBzaG91bGQgYmUgc2hvd24gYWZ0ZXIgYSBuZXcgd29ya29yZGVyIGhhcyBiZWVuIGNyZWF0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlcyBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgd2hlbiBwbGFubmVkIHRoZSBzdGFydCB0aW1lIG9yIG90aGVyIHRpbWUgdmFsdWVzIGhhdmUgYmVlbiByZWFjaGVkL3Bhc3NlZC4nfSA9CiAgICAgICAgJ0tvbmZpZ3VyYXRpb24gd2llIGjDpHVmaWcgQmVuYWNocmljaHR1bmdlbiB2ZXJzY2hpY2t0IHdlcmRlbiB3ZW5uIGRpZSBnZXBsYW50ZSBTdGFydHplaXQgb2RlciBhbmRlcmUgWmVpdGVuIGVycmVpY2h0IHd1cmRlbiBiencuIHNjaG9uIHZvcmJlaSBzaW5kLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgQ2hhbmdlJ30gPSAnQ2hhbmdlIGVyc3RlbGxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgQ2hhbmdlIChmcm9tIFRlbXBsYXRlKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgKGZyb20gdGVtcGxhdGUpIGZyb20gdGhpcyB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIGNoYW5nZSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBJVFNNIENoYW5nZSBNYW5hZ2VtZW50IG5vdGlmaWNhdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdHlwZSBmb3IgYSB3b3Jrb3JkZXIuIFRoaXMgZW50cnkgbXVzdCBleGlzdCBpbiBnZW5lcmFsIGNhdGFsb2cgY2xhc3MgXCdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpXb3JrT3JkZXI6OlR5cGVcJy4nfSA9CiAgICAgICAgJ1N0YW5kYXJkdHlwIGbDvHIgZWluZW4gQXJiZWl0c2F1ZnRyYWcuIERpZXNlciBFaW50cmFnIG11c3MgaW4gZGVyIEdlbmVyYWwgQ2F0YWxvZyBLbGFzc2UgXCdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpXb3JrT3JkZXI6OlR5cGVcJyBleGlzdGllcmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgc2lnbmFscyBmb3IgZWFjaCB3b3Jrb3JkZXIgc3RhdGUuJ30gPSAnRGVmaW5pZXJlbiBlaW5lcyBTaWduYWxzIGbDvHIgZWluZW4gQXJiZWl0c2F1ZnRyYWdzc3RhdHVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBDaGFuZ2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IENoYW5nZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBXb3Jrb3JkZXIgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgV29ya29yZGVyIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjaGFuZ2UgbGlzdC4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkYXMgw5xiZXJzaWNodHNtb2R1bCB1bSBkaWUgU21hbGwtQW5zaWNodCBlaW5lciBDaGFuZ2UtTGlzdGUgYW56dXplaWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHRlbXBsYXRlIGxpc3QuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGFzIMOcYmVyc2ljaHRzbW9kdWwgdW0gZGllIFNtYWxsLUFuc2ljaHQgZWluZXIgVGVtcGxhdGUtTGlzdGUgYW56dXplaWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBhY2NvdW50ZWQgdGltZS4nfSA9ICdEZWZpbmllcnQgb2IgZGllIGVyZmFzc3RlIFplaXQgYXVzZ2VkcnVja3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgcGxhbm5lZCBlZmZvcnQuJ30gPSAnRGVmaW5pZXJ0IG9iIGRlciBnZXBsYW50ZSBBdWZ3YW5kIGF1c2dlZHJ1Y2t0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgY2hhbmdlIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSBjaGFuZ2UgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICdEZWZpbmllcnQgb2IgbmFjaGZvbGdlbmRlIEVuZHp1c3TDpG5kZSBmw7xyIENoYW5nZXMgKHdpZSBpbiBkZXIgU3RhdGUgTWFjaGluZSBkZWZpbmllcnQpIGF1Y2ggZGFubiBlcmxhdWJ0IHNpbmQsIHdlbm4gc2ljaCBkZXIgQ2hhbmdlIGltIGdlc3BlcnJ0ZW4gWnVzdGFuZCBiZWZpbmRldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiByZWFjaGFibGUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUpIHdvcmtvcmRlciBlbmQgc3RhdGVzIHNob3VsZCBiZSBhbGxvd2VkIGlmIGEgd29ya29yZGVyIGlzIGluIGEgbG9ja2VkIHN0YXRlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBvYiBuYWNoZm9sZ2VuZGUgRW5kenVzdMOkbmRlIGbDvHIgZWluZW4gQXJiZWl0c2F1ZnRyYWcgKHdpZSBpbiBkZXIgU3RhdGUgTWFjaGluZSBkZWZpbmllcnQpIGF1Y2ggZGFubiBlcmxhdWJ0IHNpbmQsIHdlbm4gc2ljaCBJaHJlIEFyYmVpdHNhdWZ0csOkZ2UgaW0gZ2VzcGVycnRlbiBadXN0YW5kIGJlZmluZGV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBhY2NvdW50ZWQgdGltZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnU29sbCBkaWUgZ2VidWNodGUgWmVpdCBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBzaG91bGQgYmUgc2V0Lid9ID0gJ1dlbm4gZGVyIHRhdHPDpGNobGljaGUgU3RhcnQtIHVuZCBFbmR6ZWl0cHVua3QgZ2VzZXR6dCB3ZXJkZW4gc29sbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHNlYXJjaCBhbmQgdGhlIHdvcmtvcmRlciBzZWFyY2ggZnVuY3Rpb25zIGNvdWxkIHVzZSB0aGUgbWlycm9yIERCLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBvYiBkaWUgw4RuZGVydW5nc3N1Y2hlIHVuZCBBcmJlaXRzYXVmdHJhZ3NzdWNoZSBkaWUgU3BpZWdlbGRhdGVuYmFuayBiZW51dHplbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBjaGFuZ2Ugc3RhdGUgY2FuIGJlIHNldCBpbiBBZ2VudElUU01DaGFuZ2VFZGl0Lid9ID0KICAgICAgICAnRGVmaW5pZXJ0IG9iIGRlciBDaGFuZ2UtU3RhdHVzIGluIEFnZW50SVRTTUNoYW5nZUVkaXQgZ2VzZXR6dCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcGxhbm5lZCBlZmZvcnQgc2hvdWxkIGJlIHNob3duLid9ID0gJ1NvbGwgZGVyIGdlcGxhbnRlIEF1ZndhbmQgYW5nZXplaWd0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHByaW50IGJ5IGN1c3RvbWVyLid9ID0gJ0RlZmluaWVydCBvYiBkYXMgQW5mcmFnZWRhdHVtIGbDvHIgZGVuIEt1bmRlbiBnZWRydWNrdCB3ZXJkZW4gc29sbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNlYXJjaGVkIGJ5IGN1c3RvbWVyLid9ID0KICAgICAgICAnU29sbCBkZXIgV3Vuc2NodGVybWluIGRlcyBLdW5kZW4gZ2VzdWNodCB3ZXJkZW4ga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNldCBieSBjdXN0b21lci4nfSA9ICdEZWZpbmllcnQgb2IgZGFzIEFuZnJhZ2VkYXR1bSB2b20gS3VuZGVuIGF1c2dlZsO8bGx0IHdlcmRlbiBzb2xsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2hvd24gYnkgY3VzdG9tZXIuJ30gPSAnU29sbCBkZXIgV3Vuc2NodGVybWluIGRlcyBLdW5kZW4gYW5nZXplaWd0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHN0YXRlIHNob3VsZCBiZSBzaG93bi4nfSA9ICdTb2xsIGRlciBTdGF0dXMgZGVzIEFyYmVpdHNhdWZ0cmFncyBhbmdlemVpZ3Qgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSB3b3Jrb3JkZXIgdGl0bGUgc2hvdWxkIGJlIHNob3duLid9ID0gJ1NvbGwgZGVyIFRpdGVsIGRlcyBBcmJlaXRzYXVmdHJhZ3MgYW5nZXplaWd0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBzaG93biBncmFwaCBhdHRyaWJ1dGVzLid9ID0gJ0RlZmluaWVydCBBdHRyaWJ1dGUgZsO8ciBkaWUgQW56ZWlnZSBkZXMgR3JhcGhlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGF0IG9ubHkgY2hhbmdlcyBjb250YWluaW5nIFdvcmtvcmRlcnMgbGlua2VkIHdpdGggc2VydmljZXMsIHdoaWNoIHRoZSBjdXN0b21lciB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIHVzZSB3aWxsIGJlIHNob3duLiBBbnkgb3RoZXIgY2hhbmdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgbnVyIMOEbmRlcnVuZ2VuIGFuZ2V6ZWlndCB3ZXJkZW4sIGRpZSBBcmJlaXRzYXVmdHLDpGdlIGVudGhhbHRlbiwgZGllIG1pdCBEaWVuc3RlbiB2ZXJsaW5rdCBzaW5kLCBmw7xyIGRpZSBkZXIgS3VuZGVuLUJlbnV0emVyIGVpbmUgQmVyZWNodGlndW5nIGhhdC4gQW5kZXJlIMOEbmRlcnVuZ2VuIHdlcmRlbiBuaWNodCBhbmdlemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIGFsbG93ZWQgdG8gZGVsZXRlLid9ID0gJ0RlZmluaWVydCBkZW4gw4RuZGVydW5nc3N0YXR1cyB3ZWxjaGVyIGRhcyBsw7ZzY2hlbiBlcm3DtmdsaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBDaGFuZ2UtU3RhdGVzIGRpZSBhbHMgRmlsdGVyIGluIGRlciBDaGFuZ2UgUFNBLcOcYmVyc2ljaHQgdmVyd2VuZGV0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgU2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIENoYW5nZS1TdGF0ZXMgZGllIGFscyBGaWx0ZXIgaW4gZGVyIENoYW5nZSBTY2hlZHVsZS3DnGJlcnNpY2h0IHZlcndlbmRldCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIENoYW5nZS1TdGF0ZXMgZGllIGFscyBGaWx0ZXIgaW4gZGVyIE15Q0FCLcOcYmVyc2ljaHQgdmVyd2VuZGV0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIENoYW5nZS1TdGF0ZXMgZGllIGFscyBGaWx0ZXIgaW4gZGVyIE15Q2hhbmdlcy3DnGJlcnNpY2h0IHZlcndlbmRldCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIENoYW5nZS1TdGF0ZXMgZGllIGFscyBGaWx0ZXIgaW4gZGVyIENoYW5nZS1NYW5hZ2VyLcOcYmVyc2ljaHQgdmVyd2VuZGV0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIENoYW5nZS1TdGF0ZXMgZGllIGFscyBGaWx0ZXIgaW4gZGVyIENoYW5nZS3DnGJlcnNpY2h0IHZlcndlbmRldCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBDaGFuZ2UtU3RhdGVzIGRpZSBhbHMgRmlsdGVyIGluIGRlciBLdW5kZW4tQW5zaWNodCAiQ2hhbmdlIFNjaGVkdWxlIiB2ZXJ3ZW5kZXQgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGNoYW5nZSB0aXRsZSBmb3IgYSBkdW1teSBjaGFuZ2Ugd2hpY2ggaXMgbmVlZGVkIHRvIGVkaXQgYSB3b3Jrb3JkZXIgdGVtcGxhdGUuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGVuIFN0YW5kYXJkdGl0ZWwgZsO8ciBlaW5lIFNjaGVpbsOkbmRlcnVuZywgd2VsY2hlIGJlbsO2dGlndCB3aXJkLCB1bSBlaW5lIEFyYmVpdHNhdWZ0cmFnc3ZvcmxhZ2UgenUgZWRpdGllcmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPQogICAgICAgICdTdGFuZGFyZCBTb3J0aWVydW5nIGRlciBDaGFuZ2VzIGluIGRlciBDaGFuZ2UgUFNBLcOcYmVyc2ljaHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdTdGFuZGFyZCBTb3J0aWVydW5nIGRlciBDaGFuZ2VzIGluIGRlciBDaGFuZ2UtTWFuYWdlci3DnGJlcnNpY2h0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9ICdTdGFuZGFyZCBTb3J0aWVydW5nIGRlciBDaGFuZ2VzIGluIGRlciBDaGFuZ2Utw5xiZXJzaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdTdGFuZGFyZCBTb3J0aWVydW5nIGRlciBDaGFuZ2VzIGluIGRlciBDaGFuZ2UgU2NoZWR1bGUtw5xiZXJzaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9CiAgICAgICAgJ1N0YW5kYXJkIFNvcnRpZXJ1bmcgZGVyIENoYW5nZXMgaW4gZGVyIE15Q0FCLcOcYmVyc2ljaHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnU3RhbmRhcmQgU29ydGllcnVuZyBkZXIgQ2hhbmdlcyBpbiBkZXIgTXlDaGFuZ2VzLcOcYmVyc2ljaHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnU3RhbmRhcmRzb3J0aWVydW5nIGRlciDDhG5kZXJ1bmdlbiBpbiBkZXIgTWVpbmVBcmJlaXRzYXVmdHLDpGdlLcOcYmVyc2ljaHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnU3RhbmRhcmQgU29ydGllcnVuZyBkZXIgQ2hhbmdlcyBpbiBkZXIgUElSLcOcYmVyc2ljaHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnU3RhbmRhcmQgU29ydGllcnVuZyBkZXIgQ2hhbmdlcyBpbiBkZXIgS3VuZGVuLUFuc2ljaHQgIkNoYW5nZSBTY2hlZHVsZSIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdTdGFuZGFyZCBTb3J0aWVydW5nIGRlciBUZW1wbGF0ZXMgaW4gZGVyIFRlbXBsYXRlLcOcYmVyc2ljaHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPSAnU3RhbmRhcmQgUmVpaGVuZm9sZ2UgZGVyIENoYW5nZXMgaW4gZGVyIE15Q0FCLcOcYmVyc2ljaHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0gJ1N0YW5kYXJkIFJlaWhlbmZvbGdlIGRlciBDaGFuZ2VzIGluIGRlciBNeUNoYW5nZXMtw5xiZXJzaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICdTdGFuZGFyZHJlaWhlbmZvbGdlIGRlciBBcmJlaXRzYXVmdHLDpGdlIGluIGRlciBNZWluZUFyYmVpdHNhdWZ0csOkZ2Utw5xiZXJzaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPSAnU3RhbmRhcmQgUmVpaGVuZm9sZ2UgZGVyIENoYW5nZXMgaW4gZGVyIFBJUi3DnGJlcnNpY2h0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPSAnU3RhbmRhcmQgUmVpaGVuZm9sZ2UgZGVyIENoYW5nZXMgaW4gZGVyIENoYW5nZSBQU0Etw5xiZXJzaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ1N0YW5kYXJkIFJlaWhlbmZvbGdlIGRlciBDaGFuZ2VzIGluIGRlciBDaGFuZ2UtTWFuYWdlci3DnGJlcnNpY2h0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9ICdEZWZpbmllcnQgZGllIFN0YW5kYXJkIFNvcnRpZXJ1bmcgaW4gZGVyIMOEbmRlcnVuZ3PDvGJlcnNpY2h0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ1N0YW5kYXJkIFJlaWhlbmZvbGdlIGRlciBDaGFuZ2VzIGluIGRlciBDaGFuZ2UgU2NoZWR1bGUtw5xiZXJzaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdTdGFuZGFyZCBSZWloZW5mb2xnZSBkZXIgQ2hhbmdlcyBpbiBkZXIgS3VuZGVuLUFuc2ljaHQgIkNoYW5nZSBTY2hlZHVsZSIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPSAnU3RhbmRhcmQgUmVpaGVuZm9sZ2UgZGVyIFRlbXBsYXRlcyBpbiBkZXIgVGVtcGxhdGUtw5xiZXJzaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNhdGVnb3J5IG9mIGEgY2hhbmdlLid9ID0gJ0RlciBTdGFuZGFyZC1XZXJ0IGbDvHIgZGllIEthdGVnb3JpZSBlaW5lcyBDaGFuZ2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW1wYWN0IG9mIGEgY2hhbmdlLid9ID0gJ0RlciBTdGFuZGFyZC1XZXJ0IGbDvHIgZGllIEF1c3dpcmt1bmcgZWluZXMgQ2hhbmdlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciBjaGFuZ2UgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkZW4gRmVsZC1UeXAgZsO8ciBDb21wYXJlVmFsdWUgRmVsZGVyIGbDvHIgQ2hhbmdlLUF0dHJpYnV0ZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBHw7xsdGlnZSBXZXJ0ZSBzaW5kIFNlbGVjdGlvbiwgVGV4dCB1bmQgRGF0ZS4gV2VubiBrZWluIFR5cCBkZWZpbmllcnQgaXN0LCBkYW5uIHdpcmQgZGFzIGZlbGQgbmljaHQgYW5nZXplaWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmaWVsZCB0eXBlIG9mIENvbXBhcmVWYWx1ZSBmaWVsZHMgZm9yIHdvcmtvcmRlciBhdHRyaWJ1dGVzIHVzZWQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gVmFsaWQgdmFsdWVzIGFyZSBTZWxlY3Rpb24sIFRleHQgYW5kIERhdGUuIElmIGEgdHlwZSBpcyBub3QgZGVmaW5lZCwgdGhlIGZpZWxkIHdpbGwgbm90IGJlIHNob3duLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRlbiBGZWxkLVR5cCBmw7xyIENvbXBhcmVWYWx1ZSBGZWxkZXIgZsO8ciBXb3Jrb3JkZXItQXR0cmlidXRlIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIEfDvGx0aWdlIFdlcnRlIHNpbmQgU2VsZWN0aW9uLCBUZXh0IHVuZCBEYXRlLiBXZW5uIGtlaW4gVHlwIGRlZmluaWVydCBpc3QsIGRhbm4gd2lyZCBkYXMgZmVsZCBuaWNodCBhbmdlemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9iamVjdCBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIGNoYW5nZSBvYmplY3RzIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIE9iamVrdC1BdHRyaWJ1dGUgZGllIGbDvHIgQ2hhbmdlLU9iamVrdGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCBhdXNnZXfDpGhsdCB3ZXJkZW4ga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgT2JqZWt0LUF0dHJpYnV0ZSBkaWUgZsO8ciBXb3Jrb3JkZXItT2JqZWt0ZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IGF1c2dld8OkaGx0IHdlcmRlbiBrw7ZubmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY2NvdW50ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIE9wZXJhdG9yZW4gZGllIGbDvHIgZGFzIEF0dHJpYnV0IEFjY291bnRlZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCBhdXNnZXfDpGhsdCB3ZXJkZW4ga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBPcGVyYXRvcmVuIGRpZSBmw7xyIGRhcyBBdHRyaWJ1dCBBY3R1YWxFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgYXVzZ2V3w6RobHQgd2VyZGVuIGvDtm5uZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBPcGVyYXRvcmVuIGRpZSBmw7xyIGRhcyBBdHRyaWJ1dCBBY3R1YWxTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCBhdXNnZXfDpGhsdCB3ZXJkZW4ga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2F0ZWdvcnlJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBPcGVyYXRvcmVuIGRpZSBmw7xyIGRhcyBBdHRyaWJ1dCBDYXRlZ29yeUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgYXVzZ2V3w6RobHQgd2VyZGVuIGvDtm5uZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZUJ1aWxkZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBPcGVyYXRvcmVuIGRpZSBmw7xyIGRhcyBBdHRyaWJ1dCBDaGFuZ2VCdWlsZGVySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCBhdXNnZXfDpGhsdCB3ZXJkZW4ga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlTWFuYWdlcklEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIE9wZXJhdG9yZW4gZGllIGbDvHIgZGFzIEF0dHJpYnV0IENoYW5nZU1hbmFnZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IGF1c2dld8OkaGx0IHdlcmRlbiBrw7ZubmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIE9wZXJhdG9yZW4gZGllIGbDvHIgZGFzIEF0dHJpYnV0IENoYW5nZVN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCBhdXNnZXfDpGhsdCB3ZXJkZW4ga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgT3BlcmF0b3JlbiBkaWUgZsO8ciBkYXMgQXR0cmlidXQgQ2hhbmdlVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCBhdXNnZXfDpGhsdCB3ZXJkZW4ga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgRHluYW1pY0ZpZWxkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIE9wZXJhdG9yZW4gZGllIGbDvHIgRHluYW1pc2NoZSBGZWxkZXIgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCBhdXNnZXfDpGhsdCB3ZXJkZW4ga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgSW1wYWN0SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgT3BlcmF0b3JlbiBkaWUgZsO8ciBkYXMgQXR0cmlidXQgSW1wYWN0SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCBhdXNnZXfDpGhsdCB3ZXJkZW4ga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZEVmZm9ydCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBPcGVyYXRvcmVuIGRpZSBmw7xyIGRhcyBBdHRyaWJ1dCBQbGFubmVkRWZmb3J0IGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgYXVzZ2V3w6RobHQgd2VyZGVuIGvDtm5uZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIE9wZXJhdG9yZW4gZGllIGbDvHIgZGFzIEF0dHJpYnV0IFBsYW5uZWRFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgYXVzZ2V3w6RobHQgd2VyZGVuIGvDtm5uZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgT3BlcmF0b3JlbiBkaWUgZsO8ciBkYXMgQXR0cmlidXQgUGxhbm5lZFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IGF1c2dld8OkaGx0IHdlcmRlbiBrw7ZubmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQcmlvcml0eUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIE9wZXJhdG9yZW4gZGllIGbDvHIgZGFzIEF0dHJpYnV0IFByaW9yaXR5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCBhdXNnZXfDpGhsdCB3ZXJkZW4ga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUmVxdWVzdGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBPcGVyYXRvcmVuIGRpZSBmw7xyIGRhcyBBdHRyaWJ1dCBSZXF1ZXN0ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgYXVzZ2V3w6RobHQgd2VyZGVuIGvDtm5uZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlckFnZW50SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgT3BlcmF0b3JlbiBkaWUgZsO8ciBkYXMgQXR0cmlidXQgV29ya09yZGVyQWdlbnRJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IGF1c2dld8OkaGx0IHdlcmRlbiBrw7ZubmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJOdW1iZXIgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgT3BlcmF0b3JlbiBkaWUgZsO8ciBkYXMgQXR0cmlidXQgV29ya09yZGVyTnVtYmVyIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgYXVzZ2V3w6RobHQgd2VyZGVuIGvDtm5uZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgT3BlcmF0b3JlbiBkaWUgZsO8ciBkYXMgQXR0cmlidXQgV29ya09yZGVyU3RhdGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IGF1c2dld8OkaGx0IHdlcmRlbiBrw7ZubmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBPcGVyYXRvcmVuIGRpZSBmw7xyIGRhcyBBdHRyaWJ1dCBXb3JrT3JkZXJUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IGF1c2dld8OkaGx0IHdlcmRlbiBrw7ZubmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUeXBlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgT3BlcmF0b3JlbiBkaWUgZsO8ciBkYXMgQXR0cmlidXQgV29ya09yZGVyVHlwZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgYXVzZ2V3w6RobHQgd2VyZGVuIGvDtm5uZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBlcmlvZCAoaW4geWVhcnMpLCBpbiB3aGljaCBzdGFydCBhbmQgZW5kIHRpbWVzIGNhbiBiZSBzZWxlY3RlZC4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkZW4gWmVpdHJhdW0gKGluIEphaHJlbikgaW4gd2VsY2hlciBTdGFydC0gdW5kIEVuZHplaXRlbiBnZXfDpGhsdCB3ZXJkZW4ga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gYXR0cmlidXRlcyBvZiBhIHdvcmtvcmRlciBpbiB0aGUgdG9vbHRpcCBvZiB0aGUgd29ya29yZGVyIGdyYXBoIGluIHRoZSBjaGFuZ2Ugem9vbS4gVG8gc2hvdyB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMgaW4gdGhlIHRvb2x0aXAsIHRoZXkgbXVzdCBiZSBzcGVjaWZpZWQgbGlrZSBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMSwgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTIsIGV0Yy4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgQXR0cmlidXRlIGVpbmVyIFdvcmtvcmRlciBkaWUgaW4gZGVyICJDaGFuZ2UgWm9vbSIgQW5zaWNodCBhbHMgS3VyemluZm8genVtIFdvcmtvcmRlciBCYWxrZW4gYW5nZXplaWd0IHdlcmRlbi4gVW0gRHluYW1pc2NoZSBmZWxkZXIgZGVyIFdvcmtvcmRlciBhbnp1emVpZ2VuLCBtw7xzc2VuIGRpZXMgYWxzIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUxLCBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMiwgZXRjLiBhbmdlZ2ViZW4gd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBhbmdlemVpZ3RlbiBUYWJlbGxlbnNwYWx0ZW4gaW4gZGVyIENoYW5nZSBQU0Etw5xiZXJzaWNodC4gRGllc2UgT3B0aW9uIGhhdCBrZWluZW4gRWZmZWt0IGF1ZiBkaWUgUG9zaXRpb24gZGVyIFNwYWx0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgYW5nZXplaWd0ZW4gVGFiZWxsZW5zcGFsdGVuIGluIGRlciBDaGFuZ2UgU2NoZWR1bGUtw5xiZXJzaWNodC4gRGllc2UgT3B0aW9uIGhhdCBrZWluZW4gRWZmZWt0IGF1ZiBkaWUgUG9zaXRpb24gZGVyIFNwYWx0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBhbmdlemVpZ3RlbiBUYWJlbGxlbnNwYWx0ZW4gaW4gZGVyIE15Q0FCLcOcYmVyc2ljaHQuIERpZXNlIE9wdGlvbiBoYXQga2VpbmVuIEVmZmVrdCBhdWYgZGllIFBvc2l0aW9uIGRlciBTcGFsdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIGFuZ2V6ZWlndGVuIFRhYmVsbGVuc3BhbHRlbiBpbiBkZXIgTXlDaGFuZ2VzLcOcYmVyc2ljaHQuIERpZXNlIE9wdGlvbiBoYXQga2VpbmVuIEVmZmVrdCBhdWYgZGllIFBvc2l0aW9uIGRlciBTcGFsdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIGFuZ2V6ZWlndGVuIFRhYmVsbGVuc3BhbHRlbiBpbiBkZXIgTXlXb3Jrb3JkZXJzLcOcYmVyc2ljaHQuIERpZXNlIE9wdGlvbiBoYXQga2VpbmVuIEVmZmVrdCBhdWYgZGllIFBvc2l0aW9uIGRlciBTcGFsdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBQSVIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIGFuZ2V6ZWlndGVuIFRhYmVsbGVuc3BhbHRlbiBpbiBkZXIgUElSLcOcYmVyc2ljaHQuIERpZXNlIE9wdGlvbiBoYXQga2VpbmVuIEVmZmVrdCBhdWYgZGllIFBvc2l0aW9uIGRlciBTcGFsdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgYW5nZXplaWd0ZW4gVGFiZWxsZW5zcGFsdGVuIGluIGRlciBDaGFuZ2UtTWFuYWdlci3DnGJlcnNpY2h0LiBEaWVzZSBPcHRpb24gaGF0IGtlaW5lbiBFZmZla3QgYXVmIGRpZSBQb3NpdGlvbiBkZXIgU3BhbHRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBhbmdlemVpZ3RlbiBUYWJlbGxlbnNwYWx0ZW4gaW4gZGVyIENoYW5nZS3DnGJlcnNpY2h0LiBEaWVzZSBPcHRpb24gaGF0IGtlaW5lbiBFZmZla3QgYXVmIGRpZSBQb3NpdGlvbiBkZXIgU3BhbHRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgYW5nZXplaWd0ZW4gVGFiZWxsZW5zcGFsdGVuIGltIFN1Y2hlcmdlYm5pc3MuIERpZXNlIE9wdGlvbiBoYXQga2VpbmVuIEVmZmVrdCBhdWYgZGllIFBvc2l0aW9uIGRlciBTcGFsdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIGFuZ2V6ZWlndGVuIFRhYmVsbGVuc3BhbHRlbiBpbiBkZXIgS3VuZGVuLUFuc2ljaHQgIkNoYW5nZSBTY2hlZHVsZSIuIERpZXNlIE9wdGlvbiBoYXQga2VpbmVuIEVmZmVrdCBhdWYgZGllIFBvc2l0aW9uIGRlciBTcGFsdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgYW5nZXplaWd0ZW4gVGFiZWxsZW5zcGFsdGVuIGluIGRlciBUZW1wbGF0ZS3DnGJlcnNpY2h0LiBEaWVzZSBPcHRpb24gaGF0IGtlaW5lbiBFZmZla3QgYXVmIGRpZSBQb3NpdGlvbiBkZXIgU3BhbHRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2lnbmFscyBmb3IgZWFjaCBJVFNNQ2hhbmdlIHN0YXRlLid9ID0gJ0RlZmluaWVyZW4gZWluZXMgU2lnbmFscyBmw7xyIGVpbmVuIElUU01DaGFuZ2UtU3RhdHVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0ZW1wbGF0ZSB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgVGVtcGxhdGVUeXBlbiBkaWUgYWxzIEZpbHRlciBpbiBkZXIgVGVtcGxhdGUtw5xiZXJzaWNodCB2ZXJ3ZW5kZXQgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkaWUgV29ya29yZGVyLVN0YXRlcyBkaWUgYWxzIEZpbHRlciBpbiBkZXIgTXlXb3Jrb3JkZXJzLcOcYmVyc2ljaHQgdmVyd2VuZGV0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIFdvcmtvcmRlci1TdGF0ZXMgZGllIGFscyBGaWx0ZXIgaW4gZGVyIFBJUi3DnGJlcnNpY2h0IHZlcndlbmRldCB3ZXJkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBzaG93IHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGllIFdvcmtvcmRlci1UeXBlbiBkaWUgZsO8ciBkaWUgUElSLcOcYmVyc2ljaHQgdmVyd2VuZGV0IHdlcmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGV0aGVyIG5vdGlmaWNhdGlvbnMgc2hvdWxkIGJlIHNlbnQuJ30gPSAnV2VubiBCZW5hY2hyaWNodGlndW5nZW4gdmVyc2VuZGV0IHdlcmRlbiBzb2xsZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzIG9mIGEgY2hhbmdlIGhpc3RvcnkgZW50cnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgYW4gYWdlbnQgY2FuIGV4Y2hhbmdlIHRoZSBYLWF4aXMgb2YgYSBzdGF0IGlmIGhlIGdlbmVyYXRlcyBvbmUuJ30gPQogICAgICAgICdXZW5uIGRpZXNlIE9wdGlvbiBha3RpdmllcnQgd2lyZCwgaGF0IGRlciBBZ2VudCBkaWUgTcO2Z2xpY2hrZWl0IGJlaW0gR2VuZXJpZXJlbiBlaW5lciBTdGF0aXN0aWsgZGllIGJlaWRlbiBBY2hzZW4genUgdmVydGF1c2NoZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgZG9uZSBmb3IgY29uZmlnIGl0ZW0gY2xhc3Nlcy4nfSA9CiAgICAgICAgJ0hpZXIga8O2bm5lbiBTaWUgZmVzdGxlZ2VuLCBvYiBkYXMgU3RhdGlzdGlrLU1vZHVsIGF1Y2ggYWxsZ2VtZWluZSBTdGF0aXN0aWtlbiDDvGJlciBkaWUgQW56YWhsIGRlciBkdXJjaGdlZsO8aHJ0ZW4gQ2hhbmdlcyBuYWNoIENJLUtsYXNzZSBnZW5lcmllcmVuIGRhcmYuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIGNoYW5nZSBzdGF0ZSB1cGRhdGVzIHdpdGhpbiBhIHRpbWVwZXJpb2QuJ30gPQogICAgICAgICdIaWVyIGvDtm5uZW4gU2llIGZlc3RsZWdlbiwgb2IgZGFzIFN0YXRpc3Rpay1Nb2R1bCBhdWNoIGFsbGdlbWVpbmUgU3RhdGlzdGlrZW4gw7xiZXIgQ2hhbmdlcyBiemdsLiBTdGF0dXMtVXBkYXRlcyBpbm5lcmhhbGIgZWluZXIgWmVpdHBlcmlvZGUgZ2VuZXJpZXJlbiBkYXJmLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyB0aGUgcmVsYXRpb24gYmV0d2VlbiBjaGFuZ2VzIGFuZCBpbmNpZGVudCB0aWNrZXRzLid9ID0KICAgICAgICAnSGllciBrw7ZubmVuIFNpZSBmZXN0bGVnZW4sIG9iIGRhcyBTdGF0aXN0aWstTW9kdWwgYXVjaCBhbGxnZW1laW5lIFN0YXRpc3Rpa2VuIMO8YmVyIENoYW5nZXMgYnpnbC4gZGVtIFp1c2FtbWVuaGFuZyB6d2lzY2hlbiBDaGFuZ2VzIHVuZCBWb3JmYWxscy1UaWNrZXRzIGdlbmVyaWVyZW4gZGFyZi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcy4nfSA9CiAgICAgICAgJ0hpZXIga8O2bm5lbiBTaWUgZmVzdGxlZ2VuLCBvYiBkYXMgU3RhdGlzdGlrLU1vZHVsIGF1Y2ggYWxsZ2VtZWluZSBTdGF0aXN0aWtlbiDDvGJlciBDaGFuZ2VzIGdlbmVyaWVyZW4gZGFyZi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgdGhlIG51bWJlciBvZiBSZmMgdGlja2V0cyBhIHJlcXVlc3RlciBjcmVhdGVkLid9ID0KICAgICAgICAnSGllciBrw7ZubmVuIFNpZSBmZXN0bGVnZW4sIG9iIGRhcyBTdGF0aXN0aWstTW9kdWwgYXVjaCBhbGxnZW1laW5lIFN0YXRpc3Rpa2VuIMO8YmVyIGRpZSBBbnphaGwgdm9uIFJmQy1UaWNrZXRzLCBkaWUgdm9uIEJlbnV0emVybiBlcnpldWd0IHd1cmRlbiwgZ2VuZXJpZXJlbiBkYXJmLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyAoZm9yIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMpIHNob3duIGluIHRoZSBjaGFuZ2UgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnRHluYW1pc2NoZSBGZWxkZXIgKGbDvHIgQ2hhbmdlcyB1bmQgV29ya29yZGVyKSBkaWUgaW4gZGVyIE9iZXJmbMOkY2hlICJDaGFuZ2UgZHJ1Y2tlbiIgaW4gZGVyIEFnZW50ZW4tT2JlcmZsw6RjaGUgYW5nZXplaWd0IHdlcmRlbi4gTcO2Z2xpY2hlIEVpbnN0ZWxsdW5nZW46IDAgPSBkZWFrdGl2aWVydCwgMSA9IGFrdGl2aWVydC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdEeW5hbWlzY2hlIEZlbGRlciBkaWUgaW4gZGVyIE9iZXJmbMOkY2hlICJDaGFuZ2UgaGluenVmw7xnZW4iIGluIGRlciBBZ2VudGVuLU9iZXJmbMOkY2hlIGFuZ2V6ZWlndCB3ZXJkZW4uIE3DtmdsaWNoZSBFaW5zdGVsbHVuZ2VuOiAwID0gZGVha3RpdmllcnQsIDEgPSBha3RpdmllcnQsIDIgPSBha3RpdmllcnQgdW5kIGJlbsO2dGlndC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnRHluYW1pc2NoZSBGZWxkZXIgZGllIGluIGRlciBPYmVyZmzDpGNoZSAiQ2hhbmdlIGJlYXJiZWl0ZW4iIGluIGRlciBBZ2VudGVuLU9iZXJmbMOkY2hlIGFuZ2V6ZWlndCB3ZXJkZW4uIE3DtmdsaWNoZSBFaW5zdGVsbHVuZ2VuOiAwID0gZGVha3RpdmllcnQsIDEgPSBha3RpdmllcnQsIDIgPSBha3RpdmllcnQgdW5kIGJlbsO2dGlndC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnRHluYW1pc2NoZSBGZWxkZXIgZGllIGluIGRlciBPYmVyZmzDpGNoZSAiQ2hhbmdlIHN1Y2hlbiIgaW4gZGVyIEFnZW50ZW4tT2JlcmZsw6RjaGUgYW5nZXplaWd0IHdlcmRlbi4gTcO2Z2xpY2hlIEVpbnN0ZWxsdW5nZW46IDAgPSBkZWFrdGl2aWVydCwgMSA9IGFrdGl2aWVydC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ0R5bmFtaXNjaGUgRmVsZGVyIGRpZSBpbiBkZXIgT2JlcmZsw6RjaGUgIkNoYW5nZSBab29tIiBpbiBkZXIgQWdlbnRlbi1PYmVyZmzDpGNoZSBhbmdlemVpZ3Qgd2VyZGVuLiBNw7ZnbGljaGUgRWluc3RlbGx1bmdlbjogMCA9IGRlYWt0aXZpZXJ0LCAxID0gYWt0aXZpZXJ0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ0R5bmFtaXNjaGUgRmVsZGVyIGRpZSBpbiBkZXIgT2JlcmZsw6RjaGUgIldvcmtvcmRlciBoaW56dWbDvGdlbiIgaW4gZGVyIEFnZW50ZW4tT2JlcmZsw6RjaGUgYW5nZXplaWd0IHdlcmRlbi4gTcO2Z2xpY2hlIEVpbnN0ZWxsdW5nZW46IDAgPSBkZWFrdGl2aWVydCwgMSA9IGFrdGl2aWVydCwgIDIgPSBha3RpdmllcnQgdW5kIGJlbsO2dGlndC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnRHluYW1pc2NoZSBGZWxkZXIgZGllIGluIGRlciBPYmVyZmzDpGNoZSAiV29ya29yZGVyIGJlYXJiZWl0ZW4iIGluIGRlciBBZ2VudGVuLU9iZXJmbMOkY2hlIGFuZ2V6ZWlndCB3ZXJkZW4uIE3DtmdsaWNoZSBFaW5zdGVsbHVuZ2VuOiAwID0gZGVha3RpdmllcnQsIDEgPSBha3RpdmllcnQsICAyID0gYWt0aXZpZXJ0IHVuZCBiZW7DtnRpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgcmVwb3J0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnRHluYW1pc2NoZSBGZWxkZXIgZGllIGluIGRlciBPYmVyZmzDpGNoZSAiV29ya29yZGVyIEJlcmljaHQiIGluIGRlciBBZ2VudGVuLU9iZXJmbMOkY2hlIGFuZ2V6ZWlndCB3ZXJkZW4uIE3DtmdsaWNoZSBFaW5zdGVsbHVuZ2VuOiAwID0gZGVha3RpdmllcnQsIDEgPSBha3RpdmllcnQsICAyID0gYWt0aXZpZXJ0IHVuZCBiZW7DtnRpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICdEeW5hbWlzY2hlIEZlbGRlciBkaWUgaW4gZGVyIE9iZXJmbMOkY2hlICJXb3Jrb3JkZXIgWm9vbSIgaW4gZGVyIEFnZW50ZW4tT2JlcmZsw6RjaGUgYW5nZXplaWd0IHdlcmRlbi4gTcO2Z2xpY2hlIEVpbnN0ZWxsdW5nZW46IDAgPSBkZWFrdGl2aWVydCwgMSA9IGFrdGl2aWVydC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pY0ZpZWxkIGV2ZW50IG1vZHVsZSB0byBoYW5kbGUgdGhlIHVwZGF0ZSBvZiBjb25kaXRpb25zIGlmIGR5bmFtaWMgZmllbGRzIGFyZSBhZGRlZCwgdXBkYXRlZCBvciBkZWxldGVkLid9ID0KICAgICAgICAnRHluYW1pc2NoZSBGZWxkZXIgRXZlbnQtTW9kdWwgenVyIEJlaGFuZGx1bmcgZGVyIEJlZGluZ3VuZ2VuIHdlbm4gRHluYW1pc2NoZSBGZWxkZXIgaGluenVnZWbDvGd0LCBnZcOkbmRlcnQgb2RlciBnZWzDtnNjaHQgd2VyZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIGNvbmRpdGlvbnMgb2YgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3J3YXJkIHNjaGVkdWxlIG9mIGNoYW5nZXMuIE92ZXJ2aWV3IG92ZXIgYXBwcm92ZWQgY2hhbmdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ0FCIFRlbXBsYXRlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ29uZGl0aW9uIEVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIENvbmRpdGlvbiBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBOb3RpZmljYXRpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIE1hbmFnZXIgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIFBJUiBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2Ugbm90aWZpY2F0aW9uIHJ1bGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlcyd9ID0gJ0NoYW5nZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeUNBQiBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeUNoYW5nZXMgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlXb3Jrb3JkZXJzIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIERlbGV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0IENBQi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0IENvbnRlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBjbGVhbnMgdXAgY29uZGl0aW9ucy4nfSA9ICdJVFNNIEV2ZW50IE1vZHVsIHp1bSBBdWZyw6R1bWVuIHZvbiBDb25kaXRpb25zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGNhY2hlIGZvciBhIHRvb2xiYXIuJ30gPSAnSVRTTS1FcmVpZ25pc21vZHVsLCBkYXMgZGVuIENhY2hlIGbDvHIgZWluZSBXZXJremV1Z2xlaXN0ZSBsw7ZzY2h0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBtYXRjaGVzIGNvbmRpdGlvbnMgYW5kIGV4ZWN1dGVzIGFjdGlvbnMuJ30gPQogICAgICAgICdJVFNNIEV2ZW50IE1vZHVsIHp1bSDDnGJlcnByw7xmZW4gdm9uIENvbmRpdGlvbnMgdW5kIHp1bSBBdXNmw7xocmVuIHZvbiBBY3Rpb25zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHNlbmRzIG5vdGlmaWNhdGlvbnMuJ30gPSAnSVRTTSBFdmVudCBNb2R1bCB6dW0gU2VuZGVuIHZvbiBCZW5hY2hyaWNodGlndW5nZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiBjaGFuZ2VzLid9ID0gJ0lUU00gRXZlbnQgTW9kdWwgYWt0dWFsaXNpZXJ0IGRpZSBIaXN0b3JpZSB2b24gQ2hhbmdlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNvbmRpdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byByZWNhbGN1bGF0ZSB0aGUgd29ya29yZGVyIG51bWJlcnMuJ30gPSAnSVRTTSBFdmVudCBNb2R1bCwgZGFzIGRpZSBXb3Jrb3JkZXIgTnVtbWVybiBuZXUgYmVyZWNobmV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byBzZXQgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzIG9mIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICdJVFNNIEV2ZW50IE1vZHVsLCBkYXMgZGllIEFjdHVhbFN0YXJ0IHVuZCBBY3R1YWxFbmQgWmVpdGVuIHZvbiBXb3Jrb3JkZXJzIHNldHp0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNQ2hhbmdlJ30gPSAnQ2hhbmdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01Xb3JrT3JkZXInfSA9ICdBcmJlaXRzYXVmdHJhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBmcmVxdWVuY3kgaXMgXCdyZWd1bGFybHlcJywgeW91IGNhbiBjb25maWd1cmUgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IChldmVyeSBYIGhvdXJzKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9nZmlsZSBmb3IgdGhlIElUU00gY2hhbmdlIGNvdW50ZXIuIFRoaXMgZmlsZSBpcyB1c2VkIGZvciBjcmVhdGluZyB0aGUgY2hhbmdlIG51bWJlcnMuJ30gPQogICAgICAgICdQZmFkIHVuZCBWZXJ6ZWljaG5pcyB6dXIgTG9nZGF0ZWkgZsO8ciBkZW4gSVRTTSBDaGFuZ2UtQ291bnRlci4gRGllc2UgRGF0ZWkgaGlsZnQgYmVpIGRlciBFcnpldWd1bmcgdm9uIENoYW5nZS1OdW1tZXJuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rdXAgb2YgQ0FCIG1lbWJlcnMgZm9yIGF1dG9jb21wbGV0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rdXAgb2YgYWdlbnRzLCB1c2VkIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIGlmIFdvcmtPcmRlckFkZCBvciBXb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUgc2hvdWxkIGJlIHBlcm1pdHRlZC4nfSA9CiAgICAgICAgJ01vZHVsIHp1ciBQcsO8ZnVuZyBvYiBXb3JrT3JkZXJBZGQgb2RlciBXb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUgZXJsYXVidCBpc3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgQ0FCIG1lbWJlcnMuJ30gPSAnTW9kdWwgenVtIMOcYmVycHLDvGZlbiBkZXMgQWdlbnRlbiBpbSBDQUIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgYWdlbnQuJ30gPSAnTW9kdWwgenVtIMOcYmVycHLDvGZlbiBkZXMgQWdlbnRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgYnVpbGRlci4nfSA9ICdNb2R1bCB6dW0gw5xiZXJwcsO8ZmVuIGRlcyBDaGFuZ2UgQnVpbGRlcnMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPSAnTW9kdWwgenVtIMOcYmVycHLDvGZlbiBkZXMgQ2hhbmdlIE1hbmFnZXJzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIHdvcmtvcmRlciBhZ2VudC4nfSA9ICdNb2R1bCB6dW0gw5xiZXJwcsO8ZmVuIGRlcyBXb3Jrb3JkZXItQWdlbnRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgbm8gd29ya29yZGVyIGFnZW50IGlzIHNldC4nfSA9ICdNb2R1bCB6dW0gw5xiZXJwcsO8ZmVuIG9iIGVzIGtlaW5lbiBBZ2VudGVuIGbDvHIgZGllIFdvcmtvcmRlciBnaWJ0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgd2hldGhlciB0aGUgYWdlbnQgaXMgY29udGFpbmVkIGluIHRoZSBjb25maWd1cmVkIGxpc3QuJ30gPQogICAgICAgICdNb2R1bCB6dW0gw5xiZXJwcsO8ZmVuIG9iIGRlciBBZ2VudCBpbiBkZXIga29uZmlndXJpZXJ0ZW4gTGlzdGUgZW50aGFsdGVuIGlzdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYSBsaW5rIHRvIGNyZWF0ZSBhIGNoYW5nZSBmcm9tIHRoaXMgdGlja2V0LiBUaGUgdGlja2V0IHdpbGwgYmUgYXV0b21hdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgbmV3IGNoYW5nZS4nfSA9CiAgICAgICAgJ01pdCBkaWVzZW0gTW9kdWwgd2lyZCBlaW4gTGluayBpbSBNZW7DvCBkZXIgVGlja2V0YW5zaWNodCBhbmdlemVpZ3QsIG1pdCBkZW0gZWluIENoYW5nZSBlcnN0ZWxsdCB3ZXJkZW4ga2Fubi4gRGFzIFRpY2tldCB3aXJkIGF1dG9tYXRpc2NoIG1pdCBkZW0gbmV1IGVyc3RlbGx0ZW4gQ2hhbmdlIHZlcmxpbmt0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIFRpbWUgU2xvdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBhbGwgd29ya29yZGVycyBpbiB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgKGZyb20gdGVtcGxhdGUpJ30gPSAnTmV1ICh2b24gVGVtcGxhdGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgdXNlcnMgb2YgdGhlc2UgZ3JvdXBzIGhhdmUgdGhlIHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0aWNrZXQgdHlwZXMgYXMgZGVmaW5lZCBpbiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiBpZiB0aGUgZmVhdHVyZSAiVGlja2V0OjpBY2w6Ok1vZHVsZSMjIzIwMC1UaWNrZXQ6OkFjbDo6TW9kdWxlIiBpcyBlbmFibGVkLid9ID0KICAgICAgICAnTnVyIGRpZSBNaXRnbGllZGVyIGRpZXNlciBHcnVwcGVuIGhhYmVuIGRpZSBFcmxhdWJuaXMgZGllIFRpY2tldC1UeXBlbiB6dSB2ZXJ3ZW5kZW4sIGRpZSBpbiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiBkZWZpbmllcnQgc2luZCwgd2VubiBkYXMgRmVhdHVyZSAiVGlja2V0OjpBY2w6Ok1vZHVsZSMjIzIwMC1UaWNrZXQ6OkFjbDo6TW9kdWxlIiBha3RpdmllcnQgaXN0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIGFsbCBDaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQSVInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldyknfSA9ICdQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQU0EnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIFVzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFzayBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGFyYW1ldGVyIGbDvHIgZGFzIFVzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFzayBPYmpla3QgaW4gZGVuIEJlbnV0emVyZWluc3RlbGx1bmdlbiBkZXIgQWdlbnRlbi1PYmVyZmzDpGNoZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY2hhbmdlcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgZsO8ciBkaWUgQ2hhbmdlIMOcYmVyc2ljaHRzLUFuemVpZ2UgaW4gZGVyIEFuemVpZ2UtVmFyaWFudGUgIlMiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmVzZW50cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gc2hvdyB0aGUgaW52b2x2ZWQgcGVyc29ucyBpbiBhIGNoYW5nZSwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIGNoYW5nZSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnWmVpZ3QgaW4gZGVyICJDaGFuZ2UgWm9vbSIgQW5zaWNodCBkZXIgQWdlbnRlbi1PYmVyZmzDpGNoZSBlaW5lbiAgTWVudSBMaW5rIGRlciBlcyBlcmxhdWJ0IGRpZSBlaW5nZWJ1bmRlbmVuIEFnZW50ZW4gYW56dXplaWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSAoUFNBKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHkgKFBTQSkgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb2YgYXBwcm92ZWQgY2hhbmdlcyBhbmQgdGhlaXIgc2VydmljZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyBpbiBvcmRlciBmb3IgYW4gYWdlbnQgdG8gdGFrZSBhIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJ0JlbsO2dGlndGVzIFJlY2h0IHp1bSDDnGJlcm5laG1lbiBlaW5lciBXb3Jrb3JkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWNjZXNzIHRoZSBvdmVydmlldyBvZiBhbGwgY2hhbmdlcy4nfSA9ICdFcmZvcmRlcmxpY2hlIEJlcmVjaHRpZ3VuZ2VuLCB1bSBhdWYgZGllIMOcYmVyc2ljaHQgYWxsZXIgw4RuZGVydW5nZW4genV6dWdyZWlmZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWRkIGEgd29ya29yZGVyLid9ID0gJ0JlbsO2dGlndGVzIFJlY2h0IHp1bSBMw7ZzY2hlbiBlaW5lciBXb3Jrb3JkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY2hhbmdlIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnQmVuw7Z0aWd0ZXMgUmVjaHQgenVtIMOEbmRlcm4gZGVzIEFnZW50ZW4gZWluZXIgV29ya29yZGVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSBjaGFuZ2UuJ30gPSAnQmVuw7Z0aWd0ZXMgUmVjaHQgdW0gZWluZSBWb3JsYWdlIGF1cyBlaW5lbSBDaGFuZ2UgenUgZXJzdGVsbGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSBjaGFuZ2VzXCcgQ0FCLid9ID0KICAgICAgICAnQmVuw7Z0aWd0ZXMgUmVjaHQgdW0gZWluZSBWb3JsYWdlIGF1cyBlaW5lbSBDQUIgZWluZXMgQ2hhbmdlIHp1IGVyc3RlbGxlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgd29ya29yZGVyLid9ID0gJ0JlbsO2dGlndGVzIFJlY2h0IHVtIGVpbmUgVm9ybGFnZSBhdXMgZWluZXIgV29ya29yZGVyIHp1IGVyc3RlbGxlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgY2hhbmdlcyBmcm9tIHRlbXBsYXRlcy4nfSA9ICdFcmZvcmRlcmxpY2hlIEJlcmVjaHRpZ3VuZ2VuLCB1bSDDhG5kZXJ1bmdlbiBhdXMgVm9ybGFnZW4genUgZXJzdGVsbGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzLid9ID0gJ0JlbsO2dGlndGVzIFJlY2h0IHp1bSBFcnN0ZWxsZW4gdm9uIENoYW5nZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgdGVtcGxhdGUuJ30gPSAnQmVuw7Z0aWd0ZXMgUmVjaHQgenVtIEzDtnNjaGVuIGVpbmVyIFZvcmxhZ2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgd29ya29yZGVyLid9ID0gJ0JlbsO2dGlndGVzIFJlY2h0IHp1bSBMw7ZzY2hlbiBlaW5lciBXb3Jrb3JkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNoYW5nZXMuJ30gPSAnQmVuw7Z0aWd0ZXMgUmVjaHQgenVtIEzDtnNjaGVuIHZvbiBDaGFuZ2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgYSB0ZW1wbGF0ZS4nfSA9ICdCZW7DtnRpZ3RlcyBSZWNodCB6dW0gw4RuZGVybiBlaW5lciBWb3JsYWdlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgYSB3b3Jrb3JkZXIuJ30gPSAnQmVuw7Z0aWd0ZXMgUmVjaHQgenVtIMOEbmRlcm4gZWluZXIgV29ya29yZGVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgY2hhbmdlcy4nfSA9ICdCZW7DtnRpZ3RlcyBSZWNodCB6dW0gQmVhcmJlaXRlbiB2b24gQ2hhbmdlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnQmVuw7Z0aWd0ZXMgUmVjaHQgenVtIEJlYXJiZWl0ZW4gZGVyIENvbmRpdGlvbiB2b24gQ2hhbmdlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb250ZW50IG9mIGEgdGVtcGxhdGUuJ30gPSAnQmVuw7Z0aWd0ZXMgUmVjaHQgenVtIMOEbmRlcm4gZGVzIEluaGFsdHMgZWluZXIgVm9ybGFnZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBpbnZvbHZlZCBwZXJzb25zIG9mIGEgY2hhbmdlLid9ID0KICAgICAgICAnQmVuw7Z0aWd0ZXMgUmVjaHQgenVtIMOEbmRlcm4gZGVyIGJldGVpbGlndGVuIFBlcnNvbmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIG1vdmUgY2hhbmdlcyBpbiB0aW1lLid9ID0gJ0JlbsO2dGlndGVzIFJlY2h0IHp1bSB6ZWl0bGljaGVuIFZlcnNjaGllYmVuIHZvbiBDaGFuZ2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHByaW50IGEgY2hhbmdlLid9ID0gJ0JlbsO2dGlndGVzIFJlY2h0IHp1bSBEcnVja2VuIHZvbiBDaGFuZ2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHJlc2V0IGNoYW5nZXMuJ30gPSAnQmVuw7Z0aWd0ZXMgUmVjaHQgenVtIFp1csO8Y2tzZXR6ZW4gdm9uIENoYW5nZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBhIHdvcmtvcmRlci4nfSA9ICdCZW7DtnRpZ3RlcyBSZWNodCB6dW0gQmV0cmFjaHRlbiBlaW5lciBXb3Jrb3JkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBjaGFuZ2VzLid9ID0gJ0JlbsO2dGlndGVzIFJlY2h0IHp1bSBBbnNlaGVuIHZvbiBDaGFuZ2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIGEgQ0FCIG1lbWJlci4nfSA9CiAgICAgICAgJ0JlbsO2dGlndGVzIFJlY2h0IHp1bSBFaW5zZWhlbiBkZXIgTGlzdGUgZGVyIENoYW5nZXMgYmVpIGRlbmVuIGRlciBCZW51dHplciBNaXRnbGllZCBkZXMgQ0FCcyBpc3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBsaXN0IG9mIGNoYW5nZXMgd2hlcmUgdGhlIHVzZXIgaXMgdGhlIGNoYW5nZSBtYW5hZ2VyLid9ID0KICAgICAgICAnQmVuw7Z0aWd0ZXMgUmVjaHQgenVtIEVpbnNlaGVuIGRlciBMaXN0ZSBkZXIgQ2hhbmdlcyBiZWkgZGVuZW4gZGVyIEJlbnV0emVyIGNoYW5nZSBtYW5hZ2VyIGlzdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IG92ZXJ2aWV3IG92ZXIgYWxsIHRlbXBsYXRlcy4nfSA9ICdCZW7DtnRpZ3RlcyBSZWNodCB6dW0gRWluc2VoZW4gZGVyIExpc3RlIHZvbiBWb3JsYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnQmVuw7Z0aWd0ZXMgUmVjaHQgenVtIEJldHJhY2h0ZW4gZGVyIENvbmRpdGlvbnMgdm9uIENoYW5nZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZS4nfSA9ICdCZW7DtnRpZ3RlcyBSZWNodCB6dW0gRWluc2VoZW4gZGVyIEhpc3RvcmllIGVpbmVzIENoYW5nZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyLid9ID0gJ0JlbsO2dGlndGVzIFJlY2h0IHp1bSBCZXRyYWNodGVuIGRlciBIaXN0b3JpZSBlaW5lciBXb3Jrb3JkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgY2hhbmdlLid9ID0gJ0JlbsO2dGlndGVzIFJlY2h0IHp1bSBFaW5zZWhlbiBkZXIgSGlzdG9yaWVuZGV0YWlscyBlaW5lcyBDaGFuZ2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgem9vbSBvZiBhIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJ0JlbsO2dGlndGVzIFJlY2h0IHp1bSBCZXRyYWNodGVuIGRlciBIaXN0b3JpZW5kZXRhaWxzIGVpbmVyIFdvcmtvcmRlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIENoYW5nZSBTY2hlZHVsZS4nfSA9ICdCZW7DtnRpZ3RlcyBSZWNodCB6dW0gRWluc2VoZW4gZGVyIENoYW5nZSBTY2hlZHVsZS3DnGJlcnNpY2h0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlIFBTQS4nfSA9ICdCZW7DtnRpZ3RlcyBSZWNodCB6dW0gRWluc2VoZW4gZGVyIENoYW5nZSBQU0Etw5xiZXJzaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIGNoYW5nZXMgd2l0aCBhbiB1cGNvbWluZyBQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KS4nfSA9CiAgICAgICAgJ0JlbsO2dGlndGVzIFJlY2h0IHp1bSBFaW5zZWhlbiBkZXIgTGlzdGUgdm9uIENoYW5nZXMgbWl0IGVpbmVtIGFuc3RlaGVuZGVuIFBJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIGNoYW5nZXMuJ30gPSAnQmVuw7Z0aWd0ZXMgUmVjaHQgenVtIEVpbnNlaGVuIGRlciBMaXN0ZSBkZXIgZWlnZW5lbiBDaGFuZ2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIHdvcmtvcmRlcnMuJ30gPSAnQmVuw7Z0aWd0ZXMgUmVjaHQgenVtIEVpbnNlaGVuIGRlciBMaXN0ZSB2b24gZWlnZW5lbiBXb3Jrb3JkZXJzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHdyaXRlIGEgcmVwb3J0IGZvciB0aGUgd29ya29yZGVyLid9ID0gJ0JlbsO2dGlndGVzIFJlY2h0IHp1bSBWZXJmYXNzZW4gZWluZXMgQmVyaWNodGVzIGbDvHIgZWluZSBXb3Jrb3JkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIHRhc2sgdG8gY2hlY2sgaWYgc3BlY2lmaWMgdGltZXMgaGF2ZSBiZWVuIHJlYWNoZWQgaW4gY2hhbmdlcyBhbmQgd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIGNoYW5nZSBhcyBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2hlZHVsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY3JlZW4gYWZ0ZXIgY3JlYXRpbmcgYSB3b3Jrb3JkZXInfSA9ICdBbnNpY2h0IG5hY2ggV29ya29yZGVyLUVyc3RlbGx1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMnfSA9ICdTdWNoZSBDaGFuZ2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjaGFuZ2UgbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjaGFuZ2UgbnVtYmVyLCB0aGUgU3lzdGVtSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkIHdpdGggU3lzdGVtSUQuY291bnRlciBmb3JtYXQgKGUuZy4gMTAwMTE4LCAxMDAxMTkpLiBXaXRoICJEYXRlIiwgdGhlIGNoYW5nZSBudW1iZXJzIHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHRoZSBjdXJyZW50IGRhdGUgYW5kIGEgY291bnRlcjsgdGhpcyBmb3JtYXQgbG9va3MgbGlrZSBZZWFyLk1vbnRoLkRheS5jb3VudGVyLCBlLmcuIDIwMTAwNjI0MDAwMDEsIDIwMTAwNjI0MDAwMDIuIFdpdGggIkRhdGVDaGVja3N1bSIsIHRoZSBjb3VudGVyIHdpbGwgYmUgYXBwZW5kZWQgYXMgY2hlY2tzdW0gdG8gdGhlIHN0cmluZyBvZiBkYXRlIHBsdXMgdGhlIFN5c3RlbUlELiBUaGUgY2hlY2tzdW0gd2lsbCBiZSByb3RhdGVkIG9uIGEgZGFpbHkgYmFzaXMuIFRoaXMgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuU3lzdGVtSUQuQ291bnRlci5DaGVja1N1bSwgZS5nLiAyMDEwMDYyNDEwMDAwMDE3LCAyMDEwMDYyNDEwMDAwMDI2Lid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRhcyBDaGFuZ2UgTnVtbWVyIEdlbmVyaWVydW5nIE1vZHVsLiAiQXV0b0luY3JlbWVudCIgZXJow7ZodCBkaWUgQ2hhbmdlIE51bW1lciBmb3J0bGF1ZmVuZCwgZGllc2VzIEZvcm1hdCBzdGVsbHQgc2ljaCBhbHMgU3lzdGVtSUQuWsOkaGxlciBkYXIgKHouQi4gMTAwMTE4LCAxMDAxMTkpLiBNaXQgIkRhdHVtIiB3ZXJkZW4gZGllIENoYW5nZSBOdW1tZXJuIGF1cyBkZW0gYWt0dWVsbGVuIERhdHVtIHVuZCBlaW5lbSBaw6RobGVyIGdlbmVyaWVydCwgZGllc2VzIEZvcm1hdCBzdGVsbHQgc2ljaCBhbHMgSmFoci5Nb25hdC5UYWcuWsOkaGxlciBkYXIsIHouQi4gMjAxMDA2MjQwMDAwMSwgMjAxMDA2MjQwMDAwMi4gTWl0ICJEYXRhQ2hlY2tzdW0iIGjDpG5ndCBkZXIgWsOkaGxlciBlaW5lIFByw7xmemlmZmVyIGFuIGRlbiBXZXJ0IGFuIHp1esO8Z2xpY2ggZGVyIFN5c3RlbUlELiBEaWUgUHLDvGZ6aWZmZXIgw6RuZGVydCBzaWNoIHTDpGdsaWNoLCBkaWVzZXMgRm9ybWF0IHN0ZWxsdCBzaWNoIGFscyBKYWhyLk1vbmF0LlRhZy5TeXN0ZW1JRC5aw6RobGVyLlByw7xmemlmZmVyIGRhciwgei5CLiAyMDEwMDYyNDEwMDAwMDE3LCAyMDEwMDYyNDEwMDAwMDI2Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGFnZW50IGZvciB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBtYXhpbWFsZSBIw7ZoZSAoaW4gUGl4ZWwpIGbDvHIgSW5saW5lLUhUTUwtRmVsZGVyIGluICBBZ2VudElUU01DaGFuZ2Vab29tIHVuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBtYXhpbWFsZSBIw7ZoZSAoaW4gUGl4ZWwpIGbDvHIgSW5saW5lLUhUTUwtRmVsZGVyIGluICBBZ2VudElUU01DaGFuZ2Vab29tIHVuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBtaW5pbWFsIGNoYW5nZSBjb3VudGVyIHNpemUgKGlmICJBdXRvSW5jcmVtZW50IiB3YXMgc2VsZWN0ZWQgYXMgSVRTTUNoYW5nZTo6TnVtYmVyR2VuZXJhdG9yKS4gRGVmYXVsdCBpcyA1LCB0aGlzIG1lYW5zIHRoZSBjb3VudGVyIHN0YXJ0cyBmcm9tIDEwMDAwLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRpZSBtaW5pbWFsZSBaw6RobGVyZ3LDtsOfZSBmw7xyIENoYW5nZXMgKHdlbm4gIkF1dG9JbmNyZW1lbnQiIHVudGVyIElUU01DaGFuZ2U6Ok51bWJlckdlbmVyYXRvciBhdXNnZXfDpGhsdCB3dXJkZSkuIFN0YW5kYXJkIGlzdCA1LCBkLmguIGRlciBaw6RobGVyIHN0YXJ0ZXQgbWl0IDEwMDAwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHVwIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciBjaGFuZ2VzLid9ID0gJ0tvbmZpZ3VyYXRpb24gZsO8ciBkaWUgU3RhdGUgTWFjaGluZSBmw7xyIENoYW5nZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdXAgdGhlIHN0YXRlIG1hY2hpbmUgZm9yIHdvcmtvcmRlcnMuJ30gPSAnS29uZmlndXJhdGlvbiBmw7xyIGRpZSBTdGF0ZSBNYWNoaW5lIGbDvHIgV29ya29yZGVycy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBjaGVja2JveCBpbiB0aGUgQWdlbnRJVFNNV29ya09yZGVyRWRpdCBzY3JlZW4gdGhhdCBkZWZpbmVzIGlmIHRoZSB0aGUgZm9sbG93aW5nIHdvcmtvcmRlcnMgc2hvdWxkIGFsc28gYmUgbW92ZWQgaWYgYSB3b3Jrb3JkZXIgaXMgbW9kaWZpZWQgYW5kIHRoZSBwbGFubmVkIGVuZCB0aW1lIGhhcyBjaGFuZ2VkLid9ID0KICAgICAgICAnWmVpZ3QgaW4gZGVyICJXb3Jrb3JkZXIgYmVhcmJlaXRlbiIgQW5zaWNodCBkZXIgQWdlbnRlbi1PYmVyZmzDpGNoZSBlaW5lbiAgQ2hlY2tib3ggZGllIGVzIGVybGF1YnQgZGllIG5hY2hmb2xnZW5kZW4gV29ya29yZGVyIHp1IHZlcnNjaGllYmVuIGZhbGxzIGRpZSBiZWFyYmVpdGV0ZSBXb3Jrb3JkZXIgdmVyw6RuZGVydCB3dXJkZSB1bmQgZGVyIGdlcGxhbnRlIEZlcnRpZ3N0ZWxsdW5nc3Rlcm1pbiBzaWNoIGdlw6RuZGVydCBoYXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBjaGFuZ2luZyB0aGUgd29ya29yZGVyIGFnZW50LCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgY2hhbmdlIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgY2hhbmdlLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnWmVpZ3QgaW4gZGVyICJDaGFuZ2UgWm9vbSIgQW5zaWNodCBkZXIgQWdlbnRlbi1PYmVyZmzDpGNoZSBlaW5lbiAgTWVudSBMaW5rIGRlciBlcyBlcmxhdWJ0IGRlbiBDaGFuZ2UgYWxzIFZvcmxhZ2UgenUgc3BlaWNoZXJuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSB3b3Jrb3JkZXIgYXMgYSB0ZW1wbGF0ZSBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSB3b3Jrb3JkZXIsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGVkaXRpbmcgdGhlIHJlcG9ydCBvZiBhIHdvcmtvcmRlciwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY2hhbmdlIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1plaWd0IGluIGRlciAiQ2hhbmdlIFpvb20iIEFuc2ljaHQgZGVyIEFnZW50ZW4tT2JlcmZsw6RjaGUgZWluZW4gIE1lbnUgTGluayBkZXIgZXMgZXJsYXVidCBkZW4gQ2hhbmdlIG1pdCBlaW5lbSBhbmRlcmVuIE9iamVrdCB6dSB2ZXJrbsO8cGZlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSB3b3Jrb3JkZXIgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIG1vdmluZyB0aGUgdGltZSBzbG90IG9mIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1plaWd0IGluIGRlciBDaGFuZ2UgWm9vbSBBbnNpY2h0IGRlcyBBZ2VudGVuLUludGVyZmFjZXMgZWluZW4gTWVudSBMaW5rIHp1bSDDhG5kZXJuIGRlcyBaZWl0ZmVuc3RlcnMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0YWtpbmcgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBjb25kaXRpb25zIG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdaZWlndCBpbiBkZXIgQ2hhbmdlIFpvb20gQW5zaWNodCBkZXMgQWdlbnRlbi1JbnRlcmZhY2VzIGVpbmVuIE1lbnUgTGluayB6dW0gWnVncmlmZiBhdWYgZGllIEJlZGluZ3VuZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdaZWlndCBpbiBkZXIgQ2hhbmdlIFpvb20gQW5zaWNodCBkZXMgQWdlbnRlbi1JbnRlcmZhY2VzIGVpbmVuIE1lbnUgTGluayB6dW0gWnVncmlmZiBhdWYgZGllIEhpc3RvcmllLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFkZCBhIHdvcmtvcmRlciBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjaGFuZ2UgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnWmVpZ3QgaW4gZGVyIENoYW5nZSBab29tIEFuc2ljaHQgZGVzIEFnZW50ZW4tSW50ZXJmYWNlcyBlaW5lbiBNZW51IExpbmsgenVtIEzDtnNjaGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgd29ya29yZGVyIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnWmVpZ3QgaW4gZGVyIENoYW5nZSBab29tIEFuc2ljaHQgZGVzIEFnZW50ZW4tSW50ZXJmYWNlcyBlaW5lbiBNZW51IExpbmsgenVtIEJlYXJiZWl0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1plaWd0IGluIGRlciBDaGFuZ2UgWm9vbSBBbnNpY2h0IGRlcyBBZ2VudGVuLUludGVyZmFjZXMgZWluZW4gTWVudSBMaW5rIHp1bSBadXLDvGNrZ2VoZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSB3b3Jrb3JkZXIgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdaZWlndCBpbiBkZXIgIkNoYW5nZSBab29tIiBBbnNpY2h0IGRlciBBZ2VudGVuLU9iZXJmbMOkY2hlIGVpbmVuICBNZW51IExpbmsgZGVyIGVzIGVybGF1YnQgZGVuIENoYW5nZSBhdXN6dWRydWNrZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byByZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnWmVpZ3QgaW4gZGVyICJDaGFuZ2UgWm9vbSIgQW5zaWNodCBkZXIgQWdlbnRlbi1PYmVyZmzDpGNoZSBlaW5lbiAgTWVudSBMaW5rIGRlciBlcyBlcmxhdWJ0IGRlbiBDaGFuZ2UgdW5kIHNlaW5lIFdvcmtvcmRlcnMgenVyw7xja3p1c2V0emVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY2hhbmdlIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1plaWd0IGluIMOEbmRlcnVuZ3NjaHJvbmlrICh1bWdla2VocnRlIFJlaWhlbmZvbGdlKSBpbiBkZXIgQWdlbnRlbm9iZXJmbMOkY2hlIGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0ZSBNYWNoaW5lJ30gPSAnU3RhdGUgTWFjaGluZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdG9yZXMgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgaWRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHRlbXBsYXRlIGlkLCB3aGlsZSBhIHVzZXIgaXMgZWRpdGluZyBhIHRlbXBsYXRlLid9ID0KICAgICAgICAnU3BlaWNoZXJ0IENoYW5nZSB1bmQgV29ya29yZGVyIElEIHVuZCBkaWUgenVnZWjDtnJpZ2UgVm9ybGFnZW4gSUQgd8OkaHJlbmQgZWluIEJlbnV0emVyIGRhcyBUZW1wbGF0ZSBiZWFyYmVpdGV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIFdvcmtvcmRlcid9ID0gJ0FyYmVpdHNhdWZ0cmFnIMO8YmVybmVobWVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgV29ya29yZGVyLid9ID0gJ0FyYmVpdHNhdWZ0cmFnIMO8YmVybmVobWVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIE92ZXJ2aWV3J30gPSAnVm9ybGFnZW7DvGJlcnNpY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjaGFuZ2UsIGUuZy4gQ2hhbmdlIywgTXlDaGFuZ2UjLiBUaGUgZGVmYXVsdCBpcyBDaGFuZ2UjLid9ID0KICAgICAgICAnQ2hhbmdlLUlkZW50aWZpa2F0b3IsIHouIEIuIENoYW5nZSMsIE1laW5DaGFuZ2UjLiBBbHMgU3RhbmRhcmQgd2lyZCBDaGFuZ2UjIHZlcndlbmRldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgd29ya29yZGVyLCBlLmcuIFdvcmtvcmRlciMsIE15V29ya29yZGVyIy4gVGhlIGRlZmF1bHQgaXMgV29ya29yZGVyIy4nfSA9CiAgICAgICAgJ1dvcmtvcmRlci1JZGVudGlmaWthdG9yLCB6LiBCLiBXb3Jrb3JkZXIjLCBNZWluZVdvcmtvcmRlciMuIEFscyBTdGFuZGFyZCB3aXJkIFdvcmtvcmRlciMgdmVyd2VuZGV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIEFDTCBtb2R1bGUgcmVzdHJpY3RzIHRoZSB1c3VhZ2Ugb2YgdGhlIHRpY2tldCB0eXBlcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9uIFwnSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzXCcsIHRvIHVzZXJzIG9mIHRoZSBncm91cHMgYXMgZGVmaW5lZCBpbiAiSVRTTUNoYW5nZTo6UmVzdHJpY3RUaWNrZXRUeXBlczo6R3JvdXBzIi4gQXMgdGhpcyBBQ0wgY291bGQgY29sbGlkZSB3aXRoIG90aGVyIEFDTHMgd2hpY2ggYXJlIGFsc28gcmVsYXRlZCB0byB0aGUgdGlja2V0IHR5cGUsIHRoaXMgc3lzY29uZmlnIG9wdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBzaG91bGQgb25seSBiZSBhY3RpdmF0ZWQgaWYgbmVlZGVkLid9ID0KICAgICAgICAnRGllc2VzIEFDTCBNb2R1bCBiZXNjaHLDpG5rdCBkaWUgTnV0enVuZyB2b24gVGlja2V0dHlwZW4gd2VsY2hlIGluIGRlciBTeXN0ZW1rb25maWd1cmF0aW9uIHVudGVyICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiIGRlZmluaWVydCBzaW5kLCB6dSBkZW4gTnV0emVybiBkZXIgR3J1cHBlbiBhdXMgIklUU01DaGFuZ2U6OlJlc3RyaWN0VGlja2V0VHlwZXM6Okdyb3VwcyIuIFdlaWwgZGllc2UgQUNMIG1pdCBhbmRlcmVuIEFDTFwncywgd2VsY2hlIGdlYnVuZGVuIGFuIGRlbiBUaWNrZXR0eXBlbiBzaW5kLCBrb2xsaWRpZXJlbiBrw7ZubnRlLCBpc3QgZGllc2UgT3B0aW9uIHN0YW5kYXJkbcOkw59pZyBkZWFrdGl2aWVydCB1bmQgc29sbHRlIG51ciBuYWNoIEJlZGFyZiBha3RpdmllcnQgd2VyZGVuLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBTbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R5cGVzIG9mIHRpY2tldHMsIHdoZXJlIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IGEgbGluayB0byBhZGQgYSBjaGFuZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICdUeXBlbiBkZXIgVGlja2V0cywgaW4gZGVuZW4gaW0gVGlja2V0LVpvb20gZWluIExpbmsgYW5nZXplaWd0IHdpcmQsIHVtIGVpbmVuIENoYW5nZSB6dSBlcnN0ZWxsZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQgKGZyb20gdGVtcGxhdGUpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWRkLid9ID0gJ0FyYmVpdHNhdWZ0cmFnIGhpbnp1ZsO8Z2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBEZWxldGUuJ30gPSAnQXJiZWl0c2F1ZnRyYWcgbMO2c2NoZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBFZGl0Lid9ID0gJ0FyYmVpdHNhdWZ0cmFnIGJlYXJiZWl0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBIaXN0b3J5IFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBIaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgUmVwb3J0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb25jZSd9ID0gJ2Vpbm1hbGlnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlZ3VsYXJseSd9ID0gJ3JlZ2VsbcOkw59pZyc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZW5fQ0FfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ2F0ZWdvcnkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlTWFuYWdlbWVudCBOb3RpZmljYXRpb24gTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTm90aWZpY2F0aW9uIFJ1bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG5vdGlmaWNhdGlvbiBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01TdGF0ZU1hY2hpbmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFN0YXRlIE1hY2hpbmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgY2F0YWxvZyBjbGFzcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRhbG9nIGNsYXNzIGlzIHJlcXVpcmVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IE5hbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb3ZlciBzdGF0ZSB0cmFuc2l0aW9ucyBmb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgc3RhdGUgdHJhbnNpdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBuZXcgc3RhdGUgdHJhbnNpdGlvbiBmb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhIHN0YXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGEgbmV4dCBzdGF0ZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBhIHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIHN0YXRlIHRyYW5zaXRpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENoYW5nZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSd9ID0gJ0NoYW5nZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdXN0aWZpY2F0aW9uJ30gPSAnSnVzdGlmaWNhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnB1dCBpbnZhbGlkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdGVkIERhdGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IENoYW5nZSBUZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIHR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCB0aW1lIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB0aW1lJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VDQUJUZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBDaGFuZ2UgQ0FCIGFzIHRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIHRvIGludm9sdmVkIHBlcnNvbnMgc2NyZWVuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgTmFtZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25zIGFuZCBBY3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25kaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBjb25kaXRpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29uZGl0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWQgYSB2YWxpZCBuYW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIG5hbWUgaXMgbmVlZGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZTonfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBuYW1lIGlzIGFscmVhZHkgdXNlZCBieSBhbm90aGVyIGNvbmRpdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF0Y2hpbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW55IGV4cHJlc3Npb24gKE9SKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgZXhwcmVzc2lvbnMgKEFORCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwcmVzc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0b3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0b3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEV4cHJlc3Npb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRXhwcmVzc2lvbnMgZm91bmQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgZXhwcmVzc2lvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEFjdGlvbnMgZm91bmQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgYWN0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjaGFuZ2U/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0ICVzJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBkZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgd29ya29yZGVyJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VIaXN0b3J5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlsZWQgaGlzdG9yeSBpbmZvcm1hdGlvbiBvZiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RpZmllZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbGQgVmFsdWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFZhbHVlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSW52b2x2ZWQgUGVyc29ucyBvZiAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludm9sdmVkIFBlcnNvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlTWFuYWdlcid9ID0gJ0NoYW5nZSBNYW5hZ2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgaW52YWxpZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlQnVpbGRlcid9ID0gJ0NoYW5nZSBCdWlsZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBBZHZpc29yeSBCb2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgVGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwbHkgVGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3VGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSB0aGlzIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdG8gQ0FCJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgVXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IENBQid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlcyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEJ1aWxkZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE1hbmFnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVycyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgU3RhcnQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVuZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBTdGFydCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBFbmQgVGltZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlUmVzZXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byByZXNldCB0aGlzIGNoYW5nZT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGUuZy4gMTAqNTE1NSBvciAxMDU2NTgqKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS5nLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQ3VzdG9tZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgUmVwb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIEltcGFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQ2F0ZWdvcnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJlZm9yZS9hZnRlciknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJldHdlZW4pJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VUZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBDaGFuZ2UgYXMgVGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB0ZW1wbGF0ZSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBTdGF0ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcndyaXRlIG9yaWdpbmFsIHRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCBjaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRpbWVTbG90CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIFRpbWUgU2xvdCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRWZmb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjY291bnRlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbml0aWF0b3IocyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG8gb3BlbiBsaW5rcyBpbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIGJsb2NrcywgeW91IG1pZ2h0IG5lZWQgdG8gcHJlc3MgQ3RybCBvciBDbWQgb3IgU2hpZnQga2V5IHdoaWxlIGNsaWNraW5nIHRoZSBsaW5rIChkZXBlbmRpbmcgb24geW91ciBicm93c2VyIGFuZCBPUykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG93bmxvYWQgQXR0YWNobWVudCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENBQiBUZW1wbGF0ZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBjaGFuZ2UgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5ldyBjaGFuZ2Ugd2lsbCBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgaXQgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyB3b3Jrb3JkZXIgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB0ZW1wb3JhcnkgY2hhbmdlIHdpbGwgYmUgY3JlYXRlZCB3aGljaCBjb250YWlucyB0aGUgd29ya29yZGVyLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wb3JhcnkgY2hhbmdlIGFuZCBuZXcgd29ya29yZGVyIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSB3b3Jrb3JkZXIgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgSUQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb250ZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUZW1wbGF0ZSBDb250ZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUZW1wbGF0ZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyIHRvICVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdHJ1Y3Rpb24nfSA9ICdJbnN0cnVjdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHdvcmtvcmRlciB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgcGxhbm5lZCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBwbGFubmVkIGVuZCB0aW1lISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGZvcm1hdC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IFdvcmtvcmRlciBUZW1wbGF0ZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyQWdlbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgV29ya29yZGVyIEFnZW50IG9mICVzJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckRlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHdvcmtvcmRlcj8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgV29ya29yZGVyLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBDb25kaXRpb24hJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBXb3Jrb3JkZXIgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIENvbmRpdGlvbihzKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzLSVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgZm9sbG93aW5nIHdvcmtvcmRlcnMgYWNjb3JkaW5nbHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhlIHBsYW5uZWQgZW5kIHRpbWUgb2YgdGhpcyB3b3Jrb3JkZXIgaXMgY2hhbmdlZCwgdGhlIHBsYW5uZWQgc3RhcnQgdGltZXMgb2YgYWxsIGZvbGxvd2luZyB3b3Jrb3JkZXJzIHdpbGwgYmUgY2hhbmdlZCBhY2NvcmRpbmdseSd9ID0KICAgICAgICAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMtJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclJlcG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBSZXBvcnQgb2YgJXMlcy0lcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnQnfSA9ICdSZXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIHRpbWUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBhY3R1YWwgc3RhcnQgdGltZSBtdXN0IGJlIHNldCwgd2hlbiB0aGUgYWN0dWFsIGVuZCB0aW1lIGlzIHNldCEnfSA9CiAgICAgICAgJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGFrZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBBZ2VudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gdGFrZSB0aGlzIHdvcmtvcmRlcj8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIFdvcmtvcmRlciBhcyBUZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgd29ya29yZGVyIChhbmQgc3Vycm91bmRpbmcgY2hhbmdlKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEluZm9ybWF0aW9uJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vua25vd24gbm90aWZpY2F0aW9uICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSB3YXMgYW4gZXJyb3IgY3JlYXRpbmcgdGhlIG5vdGlmaWNhdGlvbi4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ2hhbmdlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgd2l0aCBUaWNrZXRJRCAlcyBkb2VzIG5vdCBleGlzdCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlzc2luZyBzeXNjb25maWcgb3B0aW9uICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBhZGQgY2hhbmdlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSBmcm9tIHRlbXBsYXRlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ0FCVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjaGFuZ2UgZm91bmQgZm9yIGNoYW5nZUlEICVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgQ0FCIG9mIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIHRoZSB0ZW1wbGF0ZS4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNvbmRpdGlvbi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIENvbmRpdGlvbklEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gJXMgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBjcmVhdGUgbmV3IGNvbmRpdGlvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBDb25kaXRpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBFeHByZXNzaW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgbmV3IEV4cHJlc3Npb24hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgQWN0aW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgbmV3IEFjdGlvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBFeHByZXNzaW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQWN0aW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yOiBVbmtub3duIGZpZWxkIHR5cGUgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uSUQgJXMgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBnaXZlbiBDaGFuZ2VJRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgZG9lcyBub3QgaGF2ZSBhbiBhbGxvd2VkIGNoYW5nZSBzdGF0ZSB0byBiZSBkZWxldGVkISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNoYW5nZUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VIaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBhcyBubyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biB0eXBlICIlcyIgZW5jb3VudGVyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VIaXN0b3J5Wm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSB6b29tLCBubyBIaXN0b3J5RW50cnlJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeUVudHJ5ICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSBDQUIgZm9yIENoYW5nZSAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNYW5hZ2VyLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogQ2hhbmdlTWFuYWdlcid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBDQUInfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU15Q2hhbmdlcy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IENoYW5nZXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU15V29ya09yZGVycy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IFdvcmtvcmRlcnMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVBJUi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFBJUid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUFNBLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUFNBJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgdGhlIHdvcmtvcmRlciBpcyBub3QgYXR0YWNoZWQgdG8gYSBjaGFuZ2UhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGNyZWF0ZSBvdXRwdXQsIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duIGNoYW5nZSB0aXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlcid9ID0gJ1dvcmtvcmRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duIHdvcmtvcmRlciB0aXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBPdmVydmlldyAoJXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWRTdGFydFRpbWUnfSA9ICdQbGFubmVkIFN0YXJ0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWRFbmRUaW1lJ30gPSAnUGxhbm5lZCBFbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsU3RhcnRUaW1lJ30gPSAnQWN0dWFsIFN0YXJ0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbEVuZFRpbWUnfSA9ICdBY3R1YWwgRW5kJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VSZXNldC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHJlc2V0IFdvcmtPcmRlciAlcyBvZiBDaGFuZ2UgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byByZXNldCBDaGFuZ2UgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VTY2hlZHVsZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IENoYW5nZSBTY2hlZHVsZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZVRpdGxlJ30gPSAnQ2hhbmdlIFRpdGxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlcnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlU3RhdGUnfSA9ICdDaGFuZ2UgU3RhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCBSZXN1bHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrIE9yZGVyIFRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSnVzdGlmaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFJlcG9ydCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpb3JpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEltcGFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmVmb3JlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIHRoZSB0ZW1wbGF0ZSAiJXMiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIGNoYW5nZSAiJXMiLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjaGFuZ2UgY2FuXCd0IGJlIG1vdmVkLCBhcyBpdCBoYXMgbm8gd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIGZpcnN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgbW92ZSBhIGNoYW5nZSB3aGljaCBhbHJlYWR5IGhhcyBzdGFydGVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgbW92ZSB0aGUgaW5kaXZpZHVhbCB3b3Jrb3JkZXJzIGluc3RlYWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjdXJyZW50ICVzIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgJXMgb2YgYWxsIHdvcmtvcmRlcnMgaGFzIHRvIGJlIGRlZmluZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBtb3ZlIHRpbWUgc2xvdCBmb3Igd29ya29yZGVyICMlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBUZW1wbGF0ZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgdGVtcGxhdGUgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgIiVzIiEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIHdvcmtvcmRlciBmcm9tIHRlbXBsYXRlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVPdmVydmlldy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFRlbXBsYXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJBZGQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIG9uIHRoZSBjaGFuZ2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBhZGQgd29ya29yZGVyISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWdlbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFdvcmtPcmRlcklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gc2V0IHRoZSB3b3Jrb3JkZXIgYWdlbnQgb2YgdGhlIHdvcmtvcmRlciAiJXMiIHRvIGVtcHR5ISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgdGhlIHdvcmtvcmRlciAiJXMiISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZmluZCBDaGFuZ2UgZm9yIFdvcmtPcmRlciAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckRlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgd29ya29yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBXb3JrT3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBhcyBubyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5Wm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBlbnRyeSAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5IFpvb20nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlclRha2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB0YWtlIHRoZSB3b3Jrb3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHdvcmtvcmRlciAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9JVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIGNvbmZpZyBvcHRpb24gJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBvcHRpb24gJXMgbmVlZHMgdG8gYmUgYSBIQVNIIHJlZiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY29uZmlnIG9wdGlvbiBmb3VuZCBmb3IgdGhlIHZpZXcgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGl0bGU6ICVzIHwgVHlwZTogJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBDQUJzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNoYW5nZXMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IENoYW5nZXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015V29ya09yZGVycy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgV29yayBPcmRlcnMnfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01DaGFuZ2VNYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlcXVlc3RlZCd9ID0gJ1JlcXVlc3RlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIGFwcHJvdmFsJ30gPSAnUGVuZGluZyBBcHByb3ZhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWplY3RlZCd9ID0gJ1JlamVjdGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FwcHJvdmVkJ30gPSAnQXBwcm92ZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW4gcHJvZ3Jlc3MnfSA9ICdJbiBQcm9ncmVzcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIHBpcid9ID0gJ1BlbmRpbmcgUElSJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3N1Y2Nlc3NmdWwnfSA9ICdTdWNjZXNzZnVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ZhaWxlZCd9ID0gJ0ZhaWxlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjYW5jZWxlZCd9ID0gJ0NhbmNlbGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JldHJhY3RlZCd9ID0gJ1JldHJhY3RlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjcmVhdGVkJ30gPSAnQ3JlYXRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhY2NlcHRlZCd9ID0gJ0FjY2VwdGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlYWR5J30gPSAnUmVhZHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYXBwcm92YWwnfSA9ICdBcHByb3ZhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3b3Jrb3JkZXInfSA9ICdXb3Jrb3JkZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmFja291dCd9ID0gJ0JhY2tvdXQgUGxhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydkZWNpc2lvbid9ID0gJ0RlY2lzaW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bpcid9ID0gJ1BJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBlbXB0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBub3QgZW1wdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZ3JlYXRlciB0aGFuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGxlc3MgdGhhbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBiZWZvcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgYWZ0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY29udGFpbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGNvbnRhaW5zJ30gPSAnZG9lcyBub3QgY29udGFpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiZWdpbnMgd2l0aCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlbmRzIHdpdGgnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc2V0J30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBsaXN0IG9mIHRoZSBhZ2VudHMgd2hvIGhhdmUgcGVybWlzc2lvbiB0byB0YWtlIHdvcmtvcmRlcnMuIEtleSBpcyBhIGxvZ2luIG5hbWUuIENvbnRlbnQgaXMgMCBvciAxLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbGlzdCBvZiB3b3Jrb3JkZXIgc3RhdGVzLCBhdCB3aGljaCB0aGUgQWN0dWFsU3RhcnRUaW1lIG9mIGEgd29ya29yZGVyIHdpbGwgYmUgc2V0IGlmIGl0IHdhcyBlbXB0eSBhdCB0aGlzIHBvaW50Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlciAoZnJvbSBUZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgY2hhbmdlIGZyb20gdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIChmcm9tIHRlbXBsYXRlKSB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgdG8gdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGZyb20gdGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gb2YgdGhlIENJUCBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIHRoZSBzdGF0ZSBtYWNoaW5lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2UgYWR2aXNvcnkgYm9hcmRzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgbWFuYWdlZCBieSB0aGUgdXNlci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIE1lbWJlciBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgY2hhbmdlIG1hbmFnZW1lbnQgdG9vbGJhcnMuIERlZmF1bHQ6IDMgaG91cnMgKDE4MCBtaW51dGVzKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudC4gRGVmYXVsdDogNSBkYXlzICg3MjAwIG1pbnV0ZXMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBDQUIgVGVtcGxhdGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW52b2x2ZWQgUGVyc29ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2NoZWR1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIFdvcmtvcmRlciBUZW1wbGF0ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFuZCB3b3Jrb3JkZXIgdGVtcGxhdGVzIGVkaXRlZCBieSB0aGlzIHVzZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhcmVhLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgaW52b2x2ZWQgcGVyc29ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgbGltaXQgcGVyIHBhZ2UgZm9yIENoYW5nZSBPdmVydmlldyAiU21hbGwiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2Ugc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbiBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbiBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmUgd2hpY2ggc2NyZWVuIHNob3VsZCBiZSBzaG93biBhZnRlciBhIG5ldyB3b3Jrb3JkZXIgaGFzIGJlZW4gY3JlYXRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmVzIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCB3aGVuIHBsYW5uZWQgdGhlIHN0YXJ0IHRpbWUgb3Igb3RoZXIgdGltZSB2YWx1ZXMgaGF2ZSBiZWVuIHJlYWNoZWQvcGFzc2VkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBDaGFuZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSAoZnJvbSBUZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgY2hhbmdlIChmcm9tIHRlbXBsYXRlKSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgSVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBub3RpZmljYXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgZm9yIGEgd29ya29yZGVyLiBUaGlzIGVudHJ5IG11c3QgZXhpc3QgaW4gZ2VuZXJhbCBjYXRhbG9nIGNsYXNzIFwnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpUeXBlXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIHNpZ25hbHMgZm9yIGVhY2ggd29ya29yZGVyIHN0YXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBDaGFuZ2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IENoYW5nZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBXb3Jrb3JkZXIgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgV29ya29yZGVyIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjaGFuZ2UgbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgdGVtcGxhdGUgbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcHJpbnQgdGhlIGFjY291bnRlZCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcHJpbnQgdGhlIHBsYW5uZWQgZWZmb3J0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgY2hhbmdlIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSBjaGFuZ2UgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiByZWFjaGFibGUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUpIHdvcmtvcmRlciBlbmQgc3RhdGVzIHNob3VsZCBiZSBhbGxvd2VkIGlmIGEgd29ya29yZGVyIGlzIGluIGEgbG9ja2VkIHN0YXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGFjY291bnRlZCB0aW1lIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWN0dWFsIHN0YXJ0IGFuZCBlbmQgdGltZXMgc2hvdWxkIGJlIHNldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHNlYXJjaCBhbmQgdGhlIHdvcmtvcmRlciBzZWFyY2ggZnVuY3Rpb25zIGNvdWxkIHVzZSB0aGUgbWlycm9yIERCLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGNoYW5nZSBzdGF0ZSBjYW4gYmUgc2V0IGluIEFnZW50SVRTTUNoYW5nZUVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcGxhbm5lZCBlZmZvcnQgc2hvdWxkIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgcHJpbnQgYnkgY3VzdG9tZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzZWFyY2hlZCBieSBjdXN0b21lci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2V0IGJ5IGN1c3RvbWVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2hvd24gYnkgY3VzdG9tZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciBzdGF0ZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciB0aXRsZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgc2hvd24gZ3JhcGggYXR0cmlidXRlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGF0IG9ubHkgY2hhbmdlcyBjb250YWluaW5nIFdvcmtvcmRlcnMgbGlua2VkIHdpdGggc2VydmljZXMsIHdoaWNoIHRoZSBjdXN0b21lciB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIHVzZSB3aWxsIGJlIHNob3duLiBBbnkgb3RoZXIgY2hhbmdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgYWxsb3dlZCB0byBkZWxldGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFBTQSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBjaGFuZ2UgdGl0bGUgZm9yIGEgZHVtbXkgY2hhbmdlIHdoaWNoIGlzIG5lZWRlZCB0byBlZGl0IGEgd29ya29yZGVyIHRlbXBsYXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjYXRlZ29yeSBvZiBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGltcGFjdCBvZiBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciBjaGFuZ2UgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmaWVsZCB0eXBlIG9mIENvbXBhcmVWYWx1ZSBmaWVsZHMgZm9yIHdvcmtvcmRlciBhdHRyaWJ1dGVzIHVzZWQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gVmFsaWQgdmFsdWVzIGFyZSBTZWxlY3Rpb24sIFRleHQgYW5kIERhdGUuIElmIGEgdHlwZSBpcyBub3QgZGVmaW5lZCwgdGhlIGZpZWxkIHdpbGwgbm90IGJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9iamVjdCBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIGNoYW5nZSBvYmplY3RzIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY2NvdW50ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENhdGVnb3J5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VCdWlsZGVySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VNYW5hZ2VySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBEeW5hbWljRmllbGQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBJbXBhY3RJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFZmZvcnQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQcmlvcml0eUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUmVxdWVzdGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlckFnZW50SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJOdW1iZXIgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUeXBlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwZXJpb2QgKGluIHllYXJzKSwgaW4gd2hpY2ggc3RhcnQgYW5kIGVuZCB0aW1lcyBjYW4gYmUgc2VsZWN0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gYXR0cmlidXRlcyBvZiBhIHdvcmtvcmRlciBpbiB0aGUgdG9vbHRpcCBvZiB0aGUgd29ya29yZGVyIGdyYXBoIGluIHRoZSBjaGFuZ2Ugem9vbS4gVG8gc2hvdyB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMgaW4gdGhlIHRvb2x0aXAsIHRoZXkgbXVzdCBiZSBzcGVjaWZpZWQgbGlrZSBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMSwgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTIsIGV0Yy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNBQiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIFBJUiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2lnbmFscyBmb3IgZWFjaCBJVFNNQ2hhbmdlIHN0YXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0ZW1wbGF0ZSB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc2hvdyB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciBub3RpZmljYXRpb25zIHNob3VsZCBiZSBzZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyBvZiBhIGNoYW5nZSBoaXN0b3J5IGVudHJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIGFuIGFnZW50IGNhbiBleGNoYW5nZSB0aGUgWC1heGlzIG9mIGEgc3RhdCBpZiBoZSBnZW5lcmF0ZXMgb25lLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgZG9uZSBmb3IgY29uZmlnIGl0ZW0gY2xhc3Nlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyBjaGFuZ2Ugc3RhdGUgdXBkYXRlcyB3aXRoaW4gYSB0aW1lcGVyaW9kLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIHRoZSByZWxhdGlvbiBiZXR3ZWVuIGNoYW5nZXMgYW5kIGluY2lkZW50IHRpY2tldHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCB0aGUgbnVtYmVyIG9mIFJmYyB0aWNrZXRzIGEgcmVxdWVzdGVyIGNyZWF0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgKGZvciBjaGFuZ2VzIGFuZCB3b3Jrb3JkZXJzKSBzaG93biBpbiB0aGUgY2hhbmdlIHByaW50IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2Ugem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgcmVwb3J0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pY0ZpZWxkIGV2ZW50IG1vZHVsZSB0byBoYW5kbGUgdGhlIHVwZGF0ZSBvZiBjb25kaXRpb25zIGlmIGR5bmFtaWMgZmllbGRzIGFyZSBhZGRlZCwgdXBkYXRlZCBvciBkZWxldGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcndhcmQgc2NoZWR1bGUgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb3ZlciBhcHByb3ZlZCBjaGFuZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDQUIgVGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ29uZGl0aW9uIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlciBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgUElSIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBub3RpZmljYXRpb24gcnVsZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VzJ30gPSAnQ2hhbmdlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q0FCIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q2hhbmdlcyBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeVdvcmtvcmRlcnMgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRGVsZXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQgQ0FCLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQgQ29udGVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGNsZWFucyB1cCBjb25kaXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGNhY2hlIGZvciBhIHRvb2xiYXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgZGVsZXRlcyB0aGUgaGlzdG9yeSBvZiBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IG1hdGNoZXMgY29uZGl0aW9ucyBhbmQgZXhlY3V0ZXMgYWN0aW9ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHNlbmRzIG5vdGlmaWNhdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY29uZGl0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRvIHJlY2FsY3VsYXRlIHRoZSB3b3Jrb3JkZXIgbnVtYmVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gc2V0IHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBvZiB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01DaGFuZ2UnfSA9ICdDaGFuZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTVdvcmtPcmRlcid9ID0gJ1dvcmtvcmRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBmcmVxdWVuY3kgaXMgXCdyZWd1bGFybHlcJywgeW91IGNhbiBjb25maWd1cmUgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IChldmVyeSBYIGhvdXJzKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9nZmlsZSBmb3IgdGhlIElUU00gY2hhbmdlIGNvdW50ZXIuIFRoaXMgZmlsZSBpcyB1c2VkIGZvciBjcmVhdGluZyB0aGUgY2hhbmdlIG51bWJlcnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIENBQiBtZW1iZXJzIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIGFnZW50cywgdXNlZCBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayBpZiBXb3JrT3JkZXJBZGQgb3IgV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlIHNob3VsZCBiZSBwZXJtaXR0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBDQUIgbWVtYmVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBhZ2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgYnVpbGRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgbWFuYWdlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIG5vIHdvcmtvcmRlciBhZ2VudCBpcyBzZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIHRoZSBhZ2VudCBpcyBjb250YWluZWQgaW4gdGhlIGNvbmZpZ3VyZWQgbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBhIGxpbmsgdG8gY3JlYXRlIGEgY2hhbmdlIGZyb20gdGhpcyB0aWNrZXQuIFRoZSB0aWNrZXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGxpbmtlZCB3aXRoIHRoZSBuZXcgY2hhbmdlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIGFsbCB3b3Jrb3JkZXJzIGluIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyAoZnJvbSB0ZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSB1c2VycyBvZiB0aGVzZSBncm91cHMgaGF2ZSB0aGUgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRpY2tldCB0eXBlcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiIGlmIHRoZSBmZWF0dXJlICJUaWNrZXQ6OkFjbDo6TW9kdWxlIyMjMjAwLVRpY2tldDo6QWNsOjpNb2R1bGUiIGlzIGVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb3ZlciBhbGwgQ2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BTQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgVXNlckNyZWF0ZVdvcmtPcmRlck5leHRNYXNrIG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY2hhbmdlcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJlc2VudHMgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNob3cgdGhlIGludm9sdmVkIHBlcnNvbnMgaW4gYSBjaGFuZ2UsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBjaGFuZ2UgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSAoUFNBKSBvZiBjaGFuZ2VzLiBPdmVydmlldyBvZiBhcHByb3ZlZCBjaGFuZ2VzIGFuZCB0aGVpciBzZXJ2aWNlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIGluIG9yZGVyIGZvciBhbiBhZ2VudCB0byB0YWtlIGEgd29ya29yZGVyLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWNjZXNzIHRoZSBvdmVydmlldyBvZiBhbGwgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhZGQgYSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY2hhbmdlIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlc1wnIENBQi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMgZnJvbSB0ZW1wbGF0ZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgYSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29udGVudCBvZiBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGludm9sdmVkIHBlcnNvbnMgb2YgYSBjaGFuZ2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBtb3ZlIGNoYW5nZXMgaW4gdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBwcmludCBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byByZXNldCBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgYSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIGEgQ0FCIG1lbWJlci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIHRoZSBjaGFuZ2UgbWFuYWdlci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgb3ZlcnZpZXcgb3ZlciBhbGwgdGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGNvbmRpdGlvbnMgb2YgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IG9mIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgem9vbSBvZiBhIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgQ2hhbmdlIFNjaGVkdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlIFBTQS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIGNoYW5nZXMgd2l0aCBhbiB1cGNvbWluZyBQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBvd24gd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB3cml0ZSBhIHJlcG9ydCBmb3IgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgYSBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gdGFzayB0byBjaGVjayBpZiBzcGVjaWZpYyB0aW1lcyBoYXZlIGJlZW4gcmVhY2hlZCBpbiBjaGFuZ2VzIGFuZCB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgY2hhbmdlIGFzIGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgd29ya29yZGVyIGFzIGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjaGVkdWxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjcmVlbiBhZnRlciBjcmVhdGluZyBhIHdvcmtvcmRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ2hhbmdlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY2hhbmdlIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY2hhbmdlIG51bWJlciwgdGhlIFN5c3RlbUlEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZCB3aXRoIFN5c3RlbUlELmNvdW50ZXIgZm9ybWF0IChlLmcuIDEwMDExOCwgMTAwMTE5KS4gV2l0aCAiRGF0ZSIsIHRoZSBjaGFuZ2UgbnVtYmVycyB3aWxsIGJlIGdlbmVyYXRlZCBieSB0aGUgY3VycmVudCBkYXRlIGFuZCBhIGNvdW50ZXI7IHRoaXMgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuY291bnRlciwgZS5nLiAyMDEwMDYyNDAwMDAxLCAyMDEwMDYyNDAwMDAyLiBXaXRoICJEYXRlQ2hlY2tzdW0iLCB0aGUgY291bnRlciB3aWxsIGJlIGFwcGVuZGVkIGFzIGNoZWNrc3VtIHRvIHRoZSBzdHJpbmcgb2YgZGF0ZSBwbHVzIHRoZSBTeXN0ZW1JRC4gVGhlIGNoZWNrc3VtIHdpbGwgYmUgcm90YXRlZCBvbiBhIGRhaWx5IGJhc2lzLiBUaGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LlN5c3RlbUlELkNvdW50ZXIuQ2hlY2tTdW0sIGUuZy4gMjAxMDA2MjQxMDAwMDAxNywgMjAxMDA2MjQxMDAwMDAyNi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGFnZW50IGZvciB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50SVRTTUNoYW5nZVpvb20gYW5kIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgbWluaW1hbCBjaGFuZ2UgY291bnRlciBzaXplIChpZiAiQXV0b0luY3JlbWVudCIgd2FzIHNlbGVjdGVkIGFzIElUU01DaGFuZ2U6Ok51bWJlckdlbmVyYXRvcikuIERlZmF1bHQgaXMgNSwgdGhpcyBtZWFucyB0aGUgY291bnRlciBzdGFydHMgZnJvbSAxMDAwMC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHVwIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHVwIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGNoZWNrYm94IGluIHRoZSBBZ2VudElUU01Xb3JrT3JkZXJFZGl0IHNjcmVlbiB0aGF0IGRlZmluZXMgaWYgdGhlIHRoZSBmb2xsb3dpbmcgd29ya29yZGVycyBzaG91bGQgYWxzbyBiZSBtb3ZlZCBpZiBhIHdvcmtvcmRlciBpcyBtb2RpZmllZCBhbmQgdGhlIHBsYW5uZWQgZW5kIHRpbWUgaGFzIGNoYW5nZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGNoYW5naW5nIHRoZSB3b3Jrb3JkZXIgYWdlbnQsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZSBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSBjaGFuZ2UsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgd29ya29yZGVyIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgd29ya29yZGVyLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBlZGl0aW5nIHRoZSByZXBvcnQgb2YgYSB3b3Jrb3JkZXIsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNoYW5nZSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSB3b3Jrb3JkZXIgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIG1vdmluZyB0aGUgdGltZSBzbG90IG9mIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdGFraW5nIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgY29uZGl0aW9ucyBvZiBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFkZCBhIHdvcmtvcmRlciBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjaGFuZ2UgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSB3b3Jrb3JkZXIgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSB3b3Jrb3JkZXIgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHJlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycyBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNoYW5nZSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdGUgTWFjaGluZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdG9yZXMgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgaWRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHRlbXBsYXRlIGlkLCB3aGlsZSBhIHVzZXIgaXMgZWRpdGluZyBhIHRlbXBsYXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgV29ya29yZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgV29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIE92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjaGFuZ2UsIGUuZy4gQ2hhbmdlIywgTXlDaGFuZ2UjLiBUaGUgZGVmYXVsdCBpcyBDaGFuZ2UjLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIHdvcmtvcmRlciwgZS5nLiBXb3Jrb3JkZXIjLCBNeVdvcmtvcmRlciMuIFRoZSBkZWZhdWx0IGlzIFdvcmtvcmRlciMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBBQ0wgbW9kdWxlIHJlc3RyaWN0cyB0aGUgdXN1YWdlIG9mIHRoZSB0aWNrZXQgdHlwZXMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbiBcJ0lUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlc1wnLCB0byB1c2VycyBvZiB0aGUgZ3JvdXBzIGFzIGRlZmluZWQgaW4gIklUU01DaGFuZ2U6OlJlc3RyaWN0VGlja2V0VHlwZXM6Okdyb3VwcyIuIEFzIHRoaXMgQUNMIGNvdWxkIGNvbGxpZGUgd2l0aCBvdGhlciBBQ0xzIHdoaWNoIGFyZSBhbHNvIHJlbGF0ZWQgdG8gdGhlIHRpY2tldCB0eXBlLCB0aGlzIHN5c2NvbmZpZyBvcHRpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgc2hvdWxkIG9ubHkgYmUgYWN0aXZhdGVkIGlmIG5lZWRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFNsb3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHlwZXMgb2YgdGlja2V0cywgd2hlcmUgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgYSBsaW5rIHRvIGFkZCBhIGNoYW5nZSB3aWxsIGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWRkIChmcm9tIHRlbXBsYXRlKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFnZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgRGVsZXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEhpc3RvcnkgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBSZXBvcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlZ3VsYXJseSd9ID0gJyc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZW5fR0JfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdDYXRlZ29yeSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDYXRlZ29yeSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ2F0ZWdvcnkgPC0+IEltcGFjdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ1ByaW9yaXR5IGFsbG9jYXRpb24nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbiBNYW5hZ2VtZW50J30gPSAnSVRTTSBDaGFuZ2VNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbiBNYW5hZ2VtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOb3RpZmljYXRpb24gUnVsZSd9ID0gJ0FkZCBOb3RpZmljYXRpb24gUnVsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdWxlJ30gPSAnUnVsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG5vdGlmaWNhdGlvbiBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnQSBub3RpZmljYXRpb24gc2hvdWxkIGhhdmUgYSBuYW1lISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkLid9ID0gJ05hbWUgaXMgcmVxdWlyZWQuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01TdGF0ZU1hY2hpbmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFN0YXRlIE1hY2hpbmUnfSA9ICdBZG1pbiBTdGF0ZSBNYWNoaW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIGNhdGFsb2cgY2xhc3MhJ30gPSAnU2VsZWN0IGEgY2F0YWxvZ3VlIGNsYXNzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGFsb2cgY2xhc3MgaXMgcmVxdWlyZWQhJ30gPSAnQSBjYXRhbG9ndWUgY2xhc3MgaXMgcmVxdWlyZWQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHN0YXRlIHRyYW5zaXRpb24nfSA9ICdBZGQgYSBzdGF0ZSB0cmFuc2l0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdDYXRhbG9ndWUgQ2xhc3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IE5hbWUnfSA9ICdPYmplY3QgTmFtZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIHN0YXRlIHRyYW5zaXRpb25zIGZvcid9ID0gJ092ZXJ2aWV3IG92ZXIgc3RhdGUgdHJhbnNpdGlvbnMgZm9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIHN0YXRlIHRyYW5zaXRpb24nfSA9ICdEZWxldGUgdGhpcyBzdGF0ZSB0cmFuc2l0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ0FkZCBhIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGZvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGEgc3RhdGUhJ30gPSAnUGxlYXNlIHNlbGVjdCBhIHN0YXRlISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGEgbmV4dCBzdGF0ZSEnfSA9ICdQbGVhc2Ugc2VsZWN0IGEgbmV4dCBzdGF0ZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBhIHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAnRWRpdCBhIHN0YXRlIHRyYW5zaXRpb24gZm9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIHN0YXRlIHRyYW5zaXRpb24nfSA9ICdEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoZSBzdGF0ZSB0cmFuc2l0aW9uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDaGFuZ2UnfSA9ICdBZGQgQ2hhbmdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlJ30gPSAnQ2hhbmdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1c3RpZmljYXRpb24nfSA9ICdKdXN0aWZpY2F0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lucHV0IGludmFsaWQuJ30gPSAnSW5wdXQgaW52YWxpZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnSW1wYWN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBEYXRlJ30gPSAnUmVxdWVzdGVkIERhdGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IENoYW5nZSBUZW1wbGF0ZSd9ID0gJ1NlbGVjdCBDaGFuZ2UgVGVtcGxhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSB0eXBlJ30gPSAnVGltZSB0eXBlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgdGltZSB0eXBlLid9ID0gJ0ludmFsaWQgdGltZSB0eXBlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdGltZSd9ID0gJ05ldyB0aW1lJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VDQUJUZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBDaGFuZ2UgQ0FCIGFzIHRlbXBsYXRlJ30gPSAnU2F2ZSBDaGFuZ2UgQ0FCIGFzIHRlbXBsYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIHRvIGludm9sdmVkIHBlcnNvbnMgc2NyZWVuJ30gPSAnZ28gdG8gaW52b2x2ZWQgcGVyc29ucyBzY3JlZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBOYW1lJ30gPSAnSW52YWxpZCBOYW1lJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbnMgYW5kIEFjdGlvbnMnfSA9ICdDb25kaXRpb25zIGFuZCBBY3Rpb25zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25kaXRpb24nfSA9ICdEZWxldGUgQ29uZGl0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgY29uZGl0aW9uJ30gPSAnQWRkIG5ldyBjb25kaXRpb24nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29uZGl0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWQgYSB2YWxpZCBuYW1lLid9ID0gJ05lZWQgYSB2YWxpZCBuYW1lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIG5hbWUgaXMgbmVlZGVkLid9ID0gJ0EgdmFsaWQgbmFtZSBpcyBuZWVkZWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lOid9ID0gJ0R1cGxpY2F0ZSBuYW1lOic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkIGJ5IGFub3RoZXIgY29uZGl0aW9uLid9ID0gJ1RoaXMgbmFtZSBpcyBhbHJlYWR5IHVzZWQgYnkgYW5vdGhlciBjb25kaXRpb24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hdGNoaW5nJ30gPSAnTWF0Y2hpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW55IGV4cHJlc3Npb24gKE9SKSd9ID0gJ0FueSBleHByZXNzaW9uIChPUiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIGV4cHJlc3Npb25zIChBTkQpJ30gPSAnQWxsIGV4cHJlc3Npb25zIChBTkQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cHJlc3Npb25zJ30gPSAnRXhwcmVzc2lvbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0b3InfSA9ICdTZWxlY3Rvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRvcid9ID0gJ09wZXJhdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBFeHByZXNzaW9uJ30gPSAnRGVsZXRlIEV4cHJlc3Npb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRXhwcmVzc2lvbnMgZm91bmQuJ30gPSAnTm8gRXhwcmVzc2lvbnMgZm91bmQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgZXhwcmVzc2lvbid9ID0gJ0FkZCBuZXcgZXhwcmVzc2lvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQWN0aW9uJ30gPSAnRGVsZXRlIEFjdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBBY3Rpb25zIGZvdW5kLid9ID0gJ05vIEFjdGlvbnMgZm91bmQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgYWN0aW9uJ30gPSAnQWRkIG5ldyBhY3Rpb24nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNoYW5nZT8nfSA9ICdEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2hhbmdlPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyJ30gPSAnV29ya29yZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgZGV0YWlscyd9ID0gJ1Nob3cgZGV0YWlscyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHdvcmtvcmRlcid9ID0gJ1Nob3cgd29ya29yZGVyJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VIaXN0b3J5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlsZWQgaGlzdG9yeSBpbmZvcm1hdGlvbiBvZiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RpZmllZCd9ID0gJ01vZGlmaWVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09sZCBWYWx1ZSd9ID0gJ09sZCBWYWx1ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgVmFsdWUnfSA9ICdOZXcgVmFsdWUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJbnZvbHZlZCBQZXJzb25zIG9mICVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52b2x2ZWQgUGVyc29ucyd9ID0gJ0ludm9sdmVkIFBlcnNvbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlTWFuYWdlcid9ID0gJ0NoYW5nZSBNYW5hZ2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgaW52YWxpZC4nfSA9ICdVc2VyIGludmFsaWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZUJ1aWxkZXInfSA9ICdDaGFuZ2UgQnVpbGRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQWR2aXNvcnkgQm9hcmQnfSA9ICdDaGFuZ2UgQWR2aXNvcnkgQm9hcmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIFRlbXBsYXRlJ30gPSAnQ0FCIFRlbXBsYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcGx5IFRlbXBsYXRlJ30gPSAnQXBwbHkgVGVtcGxhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3VGVtcGxhdGUnfSA9ICdOZXdUZW1wbGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHRoaXMgQ0FCIGFzIHRlbXBsYXRlJ30gPSAnU2F2ZSB0aGlzIENBQiBhcyB0ZW1wbGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdG8gQ0FCJ30gPSAnQWRkIHRvIENBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIFVzZXInfSA9ICdJbnZhbGlkIFVzZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBDQUInfSA9ICdDdXJyZW50IENBQic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdDb250ZXh0IFNldHRpbmdzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZXMgcGVyIHBhZ2UnfSA9ICdDaGFuZ2VzIHBlciBwYWdlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgVGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFRpdGxlJ30gPSAnQ2hhbmdlIFRpdGxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZ2VudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQnVpbGRlcid9ID0gJ0NoYW5nZSBCdWlsZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBNYW5hZ2VyJ30gPSAnQ2hhbmdlIE1hbmFnZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVycyd9ID0gJ1dvcmtvcmRlcnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFN0YXRlJ30gPSAnQ2hhbmdlIFN0YXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0ZWQgVGltZSd9ID0gJ1JlcXVlc3RlZCBUaW1lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgU3RhcnQgVGltZSd9ID0gJ1BsYW5uZWQgU3RhcnQgVGltZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVuZCBUaW1lJ30gPSAnUGxhbm5lZCBFbmQgVGltZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWwgU3RhcnQgVGltZSd9ID0gJ0FjdHVhbCBTdGFydCBUaW1lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBFbmQgVGltZSd9ID0gJ0FjdHVhbCBFbmQgVGltZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlUmVzZXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byByZXNldCB0aGlzIGNoYW5nZT8nfSA9ICdEbyB5b3UgcmVhbGx5IHdhbnQgdG8gcmVzZXQgdGhpcyBjaGFuZ2U/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhlLmcuIDEwKjUxNTUgb3IgMTA1NjU4KiknfSA9ICcoZS5nLiAxMCo1MTU1IG9yIDEwNTY1OCopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBBZ2VudCd9ID0gJ0NBQiBBZ2VudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLmcuJ30gPSAnZS5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQ3VzdG9tZXInfSA9ICdDQUIgQ3VzdG9tZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgUmVwb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIEltcGFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQ2F0ZWdvcnknfSA9ICdDaGFuZ2UgQ2F0ZWdvcnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJlZm9yZS9hZnRlciknfSA9ICcoYmVmb3JlL2FmdGVyKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoYmV0d2VlbiknfSA9ICcoYmV0d2VlbiknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBhcyBUZW1wbGF0ZSd9ID0gJ1NhdmUgQ2hhbmdlIGFzIFRlbXBsYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdGVtcGxhdGUgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ0EgdGVtcGxhdGUgc2hvdWxkIGhhdmUgYSBuYW1lISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcGxhdGUgbmFtZSBpcyByZXF1aXJlZC4nfSA9ICdUaGUgdGVtcGxhdGUgbmFtZSBpcyByZXF1aXJlZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgU3RhdGVzJ30gPSAnUmVzZXQgU3RhdGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ3cml0ZSBvcmlnaW5hbCB0ZW1wbGF0ZSd9ID0gJ092ZXJ3cml0ZSBvcmlnaW5hbCB0ZW1wbGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgY2hhbmdlJ30gPSAnRGVsZXRlIG9yaWdpbmFsIGNoYW5nZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90J30gPSAnTW92ZSBUaW1lIFNsb3QnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbmZvcm1hdGlvbid9ID0gJ0NoYW5nZSBJbmZvcm1hdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVmZm9ydCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY2NvdW50ZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW5pdGlhdG9yKHMpJ30gPSAnQ2hhbmdlIEluaXRpYXRvcihzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUInfSA9ICdDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnTGFzdCBjaGFuZ2VkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ0xhc3QgY2hhbmdlZCBieSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAnVG8gb3BlbiBsaW5rcyBpbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIGJsb2NrcywgeW91IG1pZ2h0IG5lZWQgdG8gcHJlc3MgQ3RybCBvciBDbWQgb3IgU2hpZnQga2V5IHdoaWxlIGNsaWNraW5nIHRoZSBsaW5rIChkZXBlbmRpbmcgb24geW91ciBicm93c2VyIGFuZCBPUykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdEb3dubG9hZCBBdHRhY2htZW50JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ0FCIFRlbXBsYXRlJ30gPSAnRWRpdCBDQUIgVGVtcGxhdGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgY2hhbmdlIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBjaGFuZ2UgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuZXcgY2hhbmdlIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIGl0IGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAnVGhlIG5ldyBjaGFuZ2Ugd2lsbCBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgaXQgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgd29ya29yZGVyIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyB3b3Jrb3JkZXIgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdGVtcG9yYXJ5IGNoYW5nZSB3aWxsIGJlIGNyZWF0ZWQgd2hpY2ggY29udGFpbnMgdGhlIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJ0EgdGVtcG9yYXJ5IGNoYW5nZSB3aWxsIGJlIGNyZWF0ZWQgd2hpY2ggY29udGFpbnMgdGhlIHdvcmtvcmRlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHRlbXBvcmFyeSBjaGFuZ2UgYW5kIG5ldyB3b3Jrb3JkZXIgd2lsbCBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIHdvcmtvcmRlciBoYXMgYmVlbiBzYXZlZCBhcyB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJ1RoZSB0ZW1wb3JhcnkgY2hhbmdlIGFuZCBuZXcgd29ya29yZGVyIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSB3b3Jrb3JkZXIgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSB3YW50IHRvIHByb2NlZWQ/J30gPSAnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgSUQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb250ZW50J30gPSAnRWRpdCBDb250ZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFRpbWUnfSA9ICdDaGFuZ2UgVGltZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRlbXBsYXRlIENvbnRlbnQnfSA9ICdFZGl0IFRlbXBsYXRlIENvbnRlbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIFRlbXBsYXRlJ30gPSAnRGVsZXRlIFRlbXBsYXRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgdG8gJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0cnVjdGlvbid9ID0gJ0luc3RydWN0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgd29ya29yZGVyIHR5cGUuJ30gPSAnSW52YWxpZCB3b3Jrb3JkZXIgdHlwZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHBsYW5uZWQgc3RhcnQgdGltZSBtdXN0IGJlIGJlZm9yZSB0aGUgcGxhbm5lZCBlbmQgdGltZSEnfSA9ICdUaGUgcGxhbm5lZCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBwbGFubmVkIGVuZCB0aW1lISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGZvcm1hdC4nfSA9ICdJbnZhbGlkIGZvcm1hdC4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IFdvcmtvcmRlciBUZW1wbGF0ZSd9ID0gJ1NlbGVjdCBXb3Jrb3JkZXIgVGVtcGxhdGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFnZW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFdvcmtvcmRlciBBZ2VudCBvZiAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyB3b3Jrb3JkZXI/J30gPSAnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHdvcmtvcmRlcj8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgV29ya29yZGVyLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBDb25kaXRpb24hJ30gPQogICAgICAgICdZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBXb3Jrb3JkZXIuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIENvbmRpdGlvbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBXb3Jrb3JkZXIgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIENvbmRpdGlvbihzKSd9ID0gJ1RoaXMgV29ya29yZGVyIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBDb25kaXRpb24ocyknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgJXMlcy0lcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIGZvbGxvd2luZyB3b3Jrb3JkZXJzIGFjY29yZGluZ2x5J30gPSAnTW92ZSBmb2xsb3dpbmcgd29ya29yZGVycyBhY2NvcmRpbmdseSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGUgcGxhbm5lZCBlbmQgdGltZSBvZiB0aGlzIHdvcmtvcmRlciBpcyBjaGFuZ2VkLCB0aGUgcGxhbm5lZCBzdGFydCB0aW1lcyBvZiBhbGwgZm9sbG93aW5nIHdvcmtvcmRlcnMgd2lsbCBiZSBjaGFuZ2VkIGFjY29yZGluZ2x5J30gPQogICAgICAgICdJZiB0aGUgcGxhbm5lZCBlbmQgdGltZSBvZiB0aGlzIHdvcmtvcmRlciBpcyBjaGFuZ2VkLCB0aGUgcGxhbm5lZCBzdGFydCB0aW1lcyBvZiBhbGwgZm9sbG93aW5nIHdvcmtvcmRlcnMgd2lsbCBiZSBjaGFuZ2VkIGFjY29yZGluZ2x5JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMtJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclJlcG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBSZXBvcnQgb2YgJXMlcy0lcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnQnfSA9ICdSZXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIHRpbWUhJ30gPSAnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIHRpbWUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBhY3R1YWwgc3RhcnQgdGltZSBtdXN0IGJlIHNldCwgd2hlbiB0aGUgYWN0dWFsIGVuZCB0aW1lIGlzIHNldCEnfSA9CiAgICAgICAgJ1RoZSBhY3R1YWwgc3RhcnQgdGltZSBtdXN0IGJlIHNldCwgd2hlbiB0aGUgYWN0dWFsIGVuZCB0aW1lIGlzIHNldCEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRha2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgQWdlbnQnfSA9ICdDdXJyZW50IEFnZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byB0YWtlIHRoaXMgd29ya29yZGVyPyd9ID0gJ0RvIHlvdSByZWFsbHkgd2FudCB0byB0YWtlIHRoaXMgd29ya29yZGVyPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgV29ya29yZGVyIGFzIFRlbXBsYXRlJ30gPSAnU2F2ZSBXb3Jrb3JkZXIgYXMgVGVtcGxhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIG9yaWdpbmFsIHdvcmtvcmRlciAoYW5kIHN1cnJvdW5kaW5nIGNoYW5nZSknfSA9ICdEZWxldGUgb3JpZ2luYWwgd29ya29yZGVyIChhbmQgc3Vycm91bmRpbmcgY2hhbmdlKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEluZm9ybWF0aW9uJ30gPSAnV29ya29yZGVyIEluZm9ybWF0aW9uJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vua25vd24gbm90aWZpY2F0aW9uICVzISd9ID0gJ1Vua25vd24gbm90aWZpY2F0aW9uICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSB3YXMgYW4gZXJyb3IgY3JlYXRpbmcgdGhlIG5vdGlmaWNhdGlvbi4nfSA9ICdUaGVyZSB3YXMgYW4gZXJyb3IgY3JlYXRpbmcgdGhlIG5vdGlmaWNhdGlvbi4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ2hhbmdlcyd9ID0gJ092ZXJ2aWV3OiBJVFNNIENoYW5nZXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUFkZC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHdpdGggVGlja2V0SUQgJXMgZG9lcyBub3QgZXhpc3QhJ30gPSAnVGlja2V0IHdpdGggVGlja2V0SUQgJXMgZG9lcyBub3QgZXhpc3QhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pc3Npbmcgc3lzY29uZmlnIG9wdGlvbiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiEnfSA9CiAgICAgICAgJ01pc3Npbmcgc3lzY29uZmlnIG9wdGlvbiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGFkZCBjaGFuZ2UhJ30gPSAnV2FzIG5vdCBhYmxlIHRvIGFkZCBjaGFuZ2UhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlIGZyb20gdGVtcGxhdGUhJ30gPSAnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSBjaGFuZ2UgZnJvbSB0ZW1wbGF0ZSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICdObyBDaGFuZ2VJRCBpcyBnaXZlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY2hhbmdlIGZvdW5kIGZvciBjaGFuZ2VJRCAlcy4nfSA9ICdObyBjaGFuZ2UgZm91bmQgZm9yIGNoYW5nZUlEICVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgQ0FCIG9mIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJ1RoZSBDQUIgb2YgY2hhbmdlICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGlzZWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgdGhlIHRlbXBsYXRlLid9ID0gJ0NvdWxkIG5vdCBhZGQgdGhlIHRlbXBsYXRlLic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIENvbmRpdGlvbklEICVzISd9ID0gJ0NvdWxkIG5vdCBkZWxldGUgQ29uZGl0aW9uSUQgJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyAlcyBpcyBnaXZlbiEnfSA9ICdObyAlcyBpcyBnaXZlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGNyZWF0ZSBuZXcgY29uZGl0aW9uISd9ID0gJ0NvdWxkIG5vdCBjcmVhdGUgbmV3IGNvbmRpdGlvbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBDb25kaXRpb25JRCAlcyEnfSA9ICdDb3VsZCBub3QgdXBkYXRlIENvbmRpdGlvbklEICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICdDb3VsZCBub3QgdXBkYXRlIEV4cHJlc3Npb25JRCAlcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgRXhwcmVzc2lvbiEnfSA9ICdDb3VsZCBub3QgYWRkIG5ldyBFeHByZXNzaW9uISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIEFjdGlvbklEICVzISd9ID0gJ0NvdWxkIG5vdCB1cGRhdGUgQWN0aW9uSUQgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgbmV3IEFjdGlvbiEnfSA9ICdDb3VsZCBub3QgYWRkIG5ldyBBY3Rpb24hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgRXhwcmVzc2lvbklEICVzISd9ID0gJ0NvdWxkIG5vdCBkZWxldGUgRXhwcmVzc2lvbklEICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIEFjdGlvbklEICVzISd9ID0gJ0NvdWxkIG5vdCBkZWxldGUgQWN0aW9uSUQgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yOiBVbmtub3duIGZpZWxkIHR5cGUgIiVzIiEnfSA9ICdFcnJvcjogVW5rbm93biBmaWVsZCB0eXBlICIlcyIhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbklEICVzIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgZ2l2ZW4gQ2hhbmdlSUQgJXMhJ30gPSAnQ29uZGl0aW9uSUQgJXMgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBnaXZlbiBDaGFuZ2VJRCAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgZG9lcyBub3QgaGF2ZSBhbiBhbGxvd2VkIGNoYW5nZSBzdGF0ZSB0byBiZSBkZWxldGVkISd9ID0KICAgICAgICAnQ2hhbmdlICIlcyIgZG9lcyBub3QgaGF2ZSBhbiBhbGxvd2VkIGNoYW5nZSBzdGF0ZSB0byBiZSBkZWxldGVkISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjaGFuZ2VJRCAlcyEnfSA9ICdXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjaGFuZ2VJRCAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlISd9ID0gJ1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biB0eXBlICIlcyIgZW5jb3VudGVyZWQhJ30gPSAnVW5rbm93biB0eXBlICIlcyIgZW5jb3VudGVyZWQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5J30gPSAnQ2hhbmdlIEhpc3RvcnknOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5IHpvb20sIG5vIEhpc3RvcnlFbnRyeUlEIGlzIGdpdmVuISd9ID0gJ0NhblwndCBzaG93IGhpc3Rvcnkgem9vbSwgbm8gSGlzdG9yeUVudHJ5SUQgaXMgZ2l2ZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnlFbnRyeSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdIaXN0b3J5RW50cnkgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlIENBQiBmb3IgQ2hhbmdlICVzISd9ID0gJ1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlIENBQiBmb3IgQ2hhbmdlICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSAlcyEnfSA9ICdXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU1hbmFnZXIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2VNYW5hZ2VyJ30gPSAnT3ZlcnZpZXc6IENoYW5nZU1hbmFnZXInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU15Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgQ0FCJ30gPSAnT3ZlcnZpZXc6IE15IENBQic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgQ2hhbmdlcyd9ID0gJ092ZXJ2aWV3OiBNeSBDaGFuZ2VzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeVdvcmtPcmRlcnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBXb3Jrb3JkZXJzJ30gPSAnT3ZlcnZpZXc6IE15IFdvcmtvcmRlcnMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVBJUi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFBJUid9ID0gJ092ZXJ2aWV3OiBQSVInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVBTQS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFBTQSd9ID0gJ092ZXJ2aWV3OiBQU0EnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgdGhlIHdvcmtvcmRlciBpcyBub3QgYXR0YWNoZWQgdG8gYSBjaGFuZ2UhJ30gPQogICAgICAgICdDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgdGhlIHdvcmtvcmRlciBpcyBub3QgYXR0YWNoZWQgdG8gYSBjaGFuZ2UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBjcmVhdGUgb3V0cHV0LCBhcyBubyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICdDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgbm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gY2hhbmdlIHRpdGxlJ30gPSAndW5rbm93biBjaGFuZ2UgdGl0bGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXInfSA9ICdXb3Jrb3JkZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93biB3b3Jrb3JkZXIgdGl0bGUnfSA9ICd1bmtub3duIHdvcmtvcmRlciB0aXRsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBPdmVydmlldyAoJXMpJ30gPSAnSVRTTSBXb3Jrb3JkZXIgT3ZlcnZpZXcgKCVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkU3RhcnRUaW1lJ30gPSAnUGxhbm5lZCBTdGFydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkRW5kVGltZSd9ID0gJ1BsYW5uZWQgRW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbFN0YXJ0VGltZSd9ID0gJ0FjdHVhbCBTdGFydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxFbmRUaW1lJ30gPSAnQWN0dWFsIEVuZCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUmVzZXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byByZXNldCBXb3JrT3JkZXIgJXMgb2YgQ2hhbmdlICVzISd9ID0gJ1dhcyBub3QgYWJsZSB0byByZXNldCBXb3JrT3JkZXIgJXMgb2YgQ2hhbmdlICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gcmVzZXQgQ2hhbmdlICVzISd9ID0gJ1dhcyBub3QgYWJsZSB0byByZXNldCBDaGFuZ2UgJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VTY2hlZHVsZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IENoYW5nZSBTY2hlZHVsZSd9ID0gJ092ZXJ2aWV3OiBDaGFuZ2UgU2NoZWR1bGUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCd9ID0gJ0NoYW5nZSBTZWFyY2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlVGl0bGUnfSA9ICdDaGFuZ2UgVGl0bGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVycyd9ID0gJ1dvcmtPcmRlcnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlU3RhdGUnfSA9ICdDaGFuZ2UgU3RhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCBSZXN1bHQnfSA9ICdDaGFuZ2UgU2VhcmNoIFJlc3VsdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgTnVtYmVyJ30gPSAnQ2hhbmdlIE51bWJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrIE9yZGVyIFRpdGxlJ30gPSAnV29yayBPcmRlciBUaXRsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVzY3JpcHRpb24nfSA9ICdDaGFuZ2UgRGVzY3JpcHRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEp1c3RpZmljYXRpb24nfSA9ICdDaGFuZ2UgSnVzdGlmaWNhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICdXb3JrT3JkZXIgSW5zdHJ1Y3Rpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFJlcG9ydCd9ID0gJ1dvcmtPcmRlciBSZXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFByaW9yaXR5J30gPSAnQ2hhbmdlIFByaW9yaXR5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbXBhY3QnfSA9ICdDaGFuZ2UgSW1wYWN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgQnknfSA9ICdDcmVhdGVkIEJ5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBTdGF0ZSd9ID0gJ1dvcmtPcmRlciBTdGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgVHlwZSd9ID0gJ1dvcmtPcmRlciBUeXBlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBBZ2VudCd9ID0gJ1dvcmtPcmRlciBBZ2VudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiZWZvcmUnfSA9ICdiZWZvcmUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAnVGhlIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpc2VkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIHRoZSB0ZW1wbGF0ZSAiJXMiLid9ID0gJ0NvdWxkIG5vdCB1cGRhdGUgdGhlIHRlbXBsYXRlICIlcyIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgY2hhbmdlICIlcyIuJ30gPSAnQ291bGQgbm90IGRlbGV0ZSBjaGFuZ2UgIiVzIi4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRpbWVTbG90LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlIGNhblwndCBiZSBtb3ZlZCwgYXMgaXQgaGFzIG5vIHdvcmtvcmRlcnMuJ30gPSAnVGhlIGNoYW5nZSBjYW5cJ3QgYmUgbW92ZWQsIGFzIGl0IGhhcyBubyB3b3Jrb3JkZXJzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgZmlyc3QuJ30gPSAnQWRkIGEgd29ya29yZGVyIGZpcnN0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgbW92ZSBhIGNoYW5nZSB3aGljaCBhbHJlYWR5IGhhcyBzdGFydGVkISd9ID0gJ0NhblwndCBtb3ZlIGEgY2hhbmdlIHdoaWNoIGFscmVhZHkgaGFzIHN0YXJ0ZWQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBtb3ZlIHRoZSBpbmRpdmlkdWFsIHdvcmtvcmRlcnMgaW5zdGVhZC4nfSA9ICdQbGVhc2UgbW92ZSB0aGUgaW5kaXZpZHVhbCB3b3Jrb3JkZXJzIGluc3RlYWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjdXJyZW50ICVzIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLid9ID0gJ1RoZSBjdXJyZW50ICVzIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgJXMgb2YgYWxsIHdvcmtvcmRlcnMgaGFzIHRvIGJlIGRlZmluZWQuJ30gPSAnVGhlICVzIG9mIGFsbCB3b3Jrb3JkZXJzIGhhcyB0byBiZSBkZWZpbmVkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gbW92ZSB0aW1lIHNsb3QgZm9yIHdvcmtvcmRlciAjJXMhJ30gPSAnV2FzIG5vdCBhYmxlIHRvIG1vdmUgdGltZSBzbG90IGZvciB3b3Jrb3JkZXIgIyVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkICVzIHBlcm1pc3Npb24hJ30gPSAnWW91IG5lZWQgJXMgcGVybWlzc2lvbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gVGVtcGxhdGVJRCBpcyBnaXZlbiEnfSA9ICdObyBUZW1wbGF0ZUlEIGlzIGdpdmVuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdUZW1wbGF0ZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgdGVtcGxhdGUgJXMhJ30gPSAnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgdGVtcGxhdGUgJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgJXMhJ30gPSAnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBUZW1wbGF0ZSAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdENBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBUZW1wbGF0ZSAiJXMiISd9ID0gJ1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgIiVzIiEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlISd9ID0gJ1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIHdvcmtvcmRlciBmcm9tIHRlbXBsYXRlISd9ID0gJ1dhcyBub3QgYWJsZSB0byBjcmVhdGUgd29ya29yZGVyIGZyb20gdGVtcGxhdGUhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogVGVtcGxhdGUnfSA9ICdPdmVydmlldzogVGVtcGxhdGUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFkZC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMgb24gdGhlIGNoYW5nZSEnfSA9ICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyBvbiB0aGUgY2hhbmdlISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIHdvcmtvcmRlciEnfSA9ICdXYXMgbm90IGFibGUgdG8gYWRkIHdvcmtvcmRlciEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFnZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICdObyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHNldCB0aGUgd29ya29yZGVyIGFnZW50IG9mIHRoZSB3b3Jrb3JkZXIgIiVzIiB0byBlbXB0eSEnfSA9CiAgICAgICAgJ1dhcyBub3QgYWJsZSB0byBzZXQgdGhlIHdvcmtvcmRlciBhZ2VudCBvZiB0aGUgd29ya29yZGVyICIlcyIgdG8gZW1wdHkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgdGhlIHdvcmtvcmRlciAiJXMiISd9ID0gJ1dhcyBub3QgYWJsZSB0byB1cGRhdGUgdGhlIHdvcmtvcmRlciAiJXMiISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZmluZCBDaGFuZ2UgZm9yIFdvcmtPcmRlciAlcyEnfSA9ICdDb3VsZCBub3QgZmluZCBDaGFuZ2UgZm9yIFdvcmtPcmRlciAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckRlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgd29ya29yZGVyICVzISd9ID0gJ1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHdvcmtvcmRlciAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgV29ya09yZGVyICVzISd9ID0gJ1dhcyBub3QgYWJsZSB0byB1cGRhdGUgV29ya09yZGVyICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJ30gPSAnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6J30gPSAnV29ya09yZGVySGlzdG9yeTo6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5J30gPSAnV29ya09yZGVyIEhpc3RvcnknOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IGVudHJ5ICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICdIaXN0b3J5IGVudHJ5ICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEhpc3RvcnkgWm9vbSd9ID0gJ1dvcmtPcmRlciBIaXN0b3J5IFpvb20nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlclRha2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB0YWtlIHRoZSB3b3Jrb3JkZXIgJXMhJ30gPSAnV2FzIG5vdCBhYmxlIHRvIHRha2UgdGhlIHdvcmtvcmRlciAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgd29ya29yZGVyICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAnVGhlIHdvcmtvcmRlciAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9JVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIGNvbmZpZyBvcHRpb24gJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBvcHRpb24gJXMgbmVlZHMgdG8gYmUgYSBIQVNIIHJlZiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY29uZmlnIG9wdGlvbiBmb3VuZCBmb3IgdGhlIHZpZXcgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGl0bGU6ICVzIHwgVHlwZTogJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBDQUJzJ30gPSAnTXkgQ0FCcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBDaGFuZ2VzJ30gPSAnTXkgQ2hhbmdlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBXb3JrIE9yZGVycyd9ID0gJ015IFdvcmsgT3JkZXJzJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ2hhbmdlTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZXF1ZXN0ZWQnfSA9ICdSZXF1ZXN0ZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGVuZGluZyBhcHByb3ZhbCd9ID0gJ1BlbmRpbmcgQXBwcm92YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVqZWN0ZWQnfSA9ICdSZWplY3RlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZlZCd9ID0gJ0FwcHJvdmVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luIHByb2dyZXNzJ30gPSAnSW4gUHJvZ3Jlc3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGVuZGluZyBwaXInfSA9ICdQZW5kaW5nIFBJUic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzdWNjZXNzZnVsJ30gPSAnU3VjY2Vzc2Z1bCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydmYWlsZWQnfSA9ICdGYWlsZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2FuY2VsZWQnfSA9ICdDYW5jZWxlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZXRyYWN0ZWQnfSA9ICdSZXRyYWN0ZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY3JlYXRlZCd9ID0gJ0NyZWF0ZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWNjZXB0ZWQnfSA9ICdBY2NlcHRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWFkeSd9ID0gJ1JlYWR5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FwcHJvdmFsJ30gPSAnQXBwcm92YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd29ya29yZGVyJ30gPSAnV29ya29yZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JhY2tvdXQnfSA9ICdCYWNrb3V0IFBsYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZGVjaXNpb24nfSA9ICdEZWNpc2lvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwaXInfSA9ICdQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyd9ID0gJ2lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCd9ID0gJ2lzIG5vdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBlbXB0eSd9ID0gJ2lzIGVtcHR5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCBlbXB0eSd9ID0gJ2lzIG5vdCBlbXB0eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBncmVhdGVyIHRoYW4nfSA9ICdpcyBncmVhdGVyIHRoYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbGVzcyB0aGFuJ30gPSAnaXMgbGVzcyB0aGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGJlZm9yZSd9ID0gJ2lzIGJlZm9yZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBhZnRlcid9ID0gJ2lzIGFmdGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NvbnRhaW5zJ30gPSAnY29udGFpbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGNvbnRhaW5zJ30gPSAnZG9lcyBub3QgY29udGFpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiZWdpbnMgd2l0aCd9ID0gJ2JlZ2lucyB3aXRoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2VuZHMgd2l0aCd9ID0gJ2VuZHMgd2l0aCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzZXQnfSA9ICdzZXQnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2YgdGhlIGFnZW50cyB3aG8gaGF2ZSBwZXJtaXNzaW9uIHRvIHRha2Ugd29ya29yZGVycy4gS2V5IGlzIGEgbG9naW4gbmFtZS4gQ29udGVudCBpcyAwIG9yIDEuJ30gPQogICAgICAgICdBIGxpc3Qgb2YgdGhlIGFnZW50cyB3aG8gaGF2ZSBwZXJtaXNzaW9uIHRvIHRha2Ugd29ya29yZGVycy4gS2V5IGlzIGEgbG9naW4gbmFtZS4gQ29udGVudCBpcyAwIG9yIDEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbGlzdCBvZiB3b3Jrb3JkZXIgc3RhdGVzLCBhdCB3aGljaCB0aGUgQWN0dWFsU3RhcnRUaW1lIG9mIGEgd29ya29yZGVyIHdpbGwgYmUgc2V0IGlmIGl0IHdhcyBlbXB0eSBhdCB0aGlzIHBvaW50Lid9ID0KICAgICAgICAnQSBsaXN0IG9mIHdvcmtvcmRlciBzdGF0ZXMsIGF0IHdoaWNoIHRoZSBBY3R1YWxTdGFydFRpbWUgb2YgYSB3b3Jrb3JkZXIgd2lsbCBiZSBzZXQgaWYgaXQgd2FzIGVtcHR5IGF0IHRoaXMgcG9pbnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXInfSA9ICdBZGQgV29ya29yZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgKGZyb20gVGVtcGxhdGUpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIGNoYW5nZSBmcm9tIHRlbXBsYXRlLid9ID0gJ0FkZCBhIGNoYW5nZSBmcm9tIHRlbXBsYXRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBjaGFuZ2UuJ30gPSAnQWRkIGEgY2hhbmdlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgKGZyb20gdGVtcGxhdGUpIHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgZnJvbSB0ZW1wbGF0ZSd9ID0gJ0FkZCBmcm9tIHRlbXBsYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIHRoZSBDSVAgbWF0cml4Lid9ID0gJ0FkbWluIG9mIHRoZSBDSVAgbWF0cml4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgc3RhdGUgbWFjaGluZS4nfSA9ICdBZG1pbiBvZiB0aGUgc3RhdGUgbWFjaGluZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlIGFkdmlzb3J5IGJvYXJkcy4nfSA9CiAgICAgICAgJ0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZSBhZHZpc29yeSBib2FyZHMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgbWFuYWdlZCBieSB0aGUgdXNlci4nfSA9CiAgICAgICAgJ0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgbWFuYWdlZCBieSB0aGUgdXNlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlcy4nfSA9CiAgICAgICAgJ0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICdBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiB3b3Jrb3JkZXJzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgTWVtYmVyIFNlYXJjaCd9ID0gJ0NBQiBNZW1iZXIgU2VhcmNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50IHRvb2xiYXJzLiBEZWZhdWx0OiAzIGhvdXJzICgxODAgbWludXRlcykuJ30gPQogICAgICAgICdDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudCB0b29sYmFycy4gRGVmYXVsdDogMyBob3VycyAoMTgwIG1pbnV0ZXMpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudC4gRGVmYXVsdDogNSBkYXlzICg3MjAwIG1pbnV0ZXMpLid9ID0KICAgICAgICAnQ2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgY2hhbmdlIG1hbmFnZW1lbnQuIERlZmF1bHQ6IDUgZGF5cyAoNzIwMCBtaW51dGVzKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIENBQiBUZW1wbGF0ZXMnfSA9ICdDaGFuZ2UgQ0FCIFRlbXBsYXRlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSGlzdG9yeS4nfSA9ICdDaGFuZ2UgSGlzdG9yeS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEludm9sdmVkIFBlcnNvbnMuJ30gPSAnQ2hhbmdlIEludm9sdmVkIFBlcnNvbnMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3Lid9ID0gJ0NoYW5nZSBPdmVydmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFByaW50Lid9ID0gJ0NoYW5nZSBQcmludC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNjaGVkdWxlJ30gPSAnQ2hhbmdlIFNjaGVkdWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZS4nfSA9ICdDaGFuZ2UgU2NoZWR1bGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tLid9ID0gJ0NoYW5nZSBab29tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIFdvcmtvcmRlciBUZW1wbGF0ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFuZCB3b3Jrb3JkZXIgdGVtcGxhdGVzIGVkaXRlZCBieSB0aGlzIHVzZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhcmVhLid9ID0gJ0NoYW5nZSBhcmVhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgaW52b2x2ZWQgcGVyc29ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgbGltaXQgcGVyIHBhZ2UgZm9yIENoYW5nZSBPdmVydmlldyAiU21hbGwiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2Ugc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnQ2hhbmdlIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb24gRWRpdCd9ID0gJ0NvbmRpdGlvbiBFZGl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbiBPdmVydmlldyd9ID0gJ0NvbmRpdGlvbiBPdmVydmlldyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmUgd2hpY2ggc2NyZWVuIHNob3VsZCBiZSBzaG93biBhZnRlciBhIG5ldyB3b3Jrb3JkZXIgaGFzIGJlZW4gY3JlYXRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmVzIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCB3aGVuIHBsYW5uZWQgdGhlIHN0YXJ0IHRpbWUgb3Igb3RoZXIgdGltZSB2YWx1ZXMgaGF2ZSBiZWVuIHJlYWNoZWQvcGFzc2VkLid9ID0KICAgICAgICAnQ29uZmlndXJlcyBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgd2hlbiBwbGFubmVkIHRoZSBzdGFydCB0aW1lIG9yIG90aGVyIHRpbWUgdmFsdWVzIGhhdmUgYmVlbiByZWFjaGVkL3Bhc3NlZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSd9ID0gJ0NyZWF0ZSBDaGFuZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSAoZnJvbSBUZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgY2hhbmdlIChmcm9tIHRlbXBsYXRlKSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgSVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBub3RpZmljYXRpb25zLid9ID0gJ0NyZWF0ZSBhbmQgbWFuYWdlIElUU00gQ2hhbmdlIE1hbmFnZW1lbnQgbm90aWZpY2F0aW9ucy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB0eXBlIGZvciBhIHdvcmtvcmRlci4gVGhpcyBlbnRyeSBtdXN0IGV4aXN0IGluIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBcJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6VHlwZVwnLid9ID0KICAgICAgICAnRGVmYXVsdCB0eXBlIGZvciBhIHdvcmtvcmRlci4gVGhpcyBlbnRyeSBtdXN0IGV4aXN0IGluIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBcJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6VHlwZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgc2lnbmFscyBmb3IgZWFjaCB3b3Jrb3JkZXIgc3RhdGUuJ30gPSAnRGVmaW5lIHRoZSBzaWduYWxzIGZvciBlYWNoIHdvcmtvcmRlciBzdGF0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgQ2hhbmdlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBDaGFuZ2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgV29ya29yZGVyIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFdvcmtvcmRlciBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY2hhbmdlIGxpc3QuJ30gPQogICAgICAgICdEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY2hhbmdlIGxpc3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSB0ZW1wbGF0ZSBsaXN0Lid9ID0KICAgICAgICAnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHRlbXBsYXRlIGxpc3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgYWNjb3VudGVkIHRpbWUuJ30gPSAnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBhY2NvdW50ZWQgdGltZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBwbGFubmVkIGVmZm9ydC4nfSA9ICdEZWZpbmVzIGlmIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcHJpbnQgdGhlIHBsYW5uZWQgZWZmb3J0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgY2hhbmdlIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSBjaGFuZ2UgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICdEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgY2hhbmdlIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSBjaGFuZ2UgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgcmVhY2hhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lKSB3b3Jrb3JkZXIgZW5kIHN0YXRlcyBzaG91bGQgYmUgYWxsb3dlZCBpZiBhIHdvcmtvcmRlciBpcyBpbiBhIGxvY2tlZCBzdGF0ZS4nfSA9CiAgICAgICAgJ0RlZmluZXMgaWYgcmVhY2hhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lKSB3b3Jrb3JkZXIgZW5kIHN0YXRlcyBzaG91bGQgYmUgYWxsb3dlZCBpZiBhIHdvcmtvcmRlciBpcyBpbiBhIGxvY2tlZCBzdGF0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWNjb3VudGVkIHRpbWUgc2hvdWxkIGJlIHNob3duLid9ID0gJ0RlZmluZXMgaWYgdGhlIGFjY291bnRlZCB0aW1lIHNob3VsZCBiZSBzaG93bi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWN0dWFsIHN0YXJ0IGFuZCBlbmQgdGltZXMgc2hvdWxkIGJlIHNldC4nfSA9ICdEZWZpbmVzIGlmIHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBzaG91bGQgYmUgc2V0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBjaGFuZ2Ugc2VhcmNoIGFuZCB0aGUgd29ya29yZGVyIHNlYXJjaCBmdW5jdGlvbnMgY291bGQgdXNlIHRoZSBtaXJyb3IgREIuJ30gPQogICAgICAgICdEZWZpbmVzIGlmIHRoZSBjaGFuZ2Ugc2VhcmNoIGFuZCB0aGUgd29ya29yZGVyIHNlYXJjaCBmdW5jdGlvbnMgY291bGQgdXNlIHRoZSBtaXJyb3IgREIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGNoYW5nZSBzdGF0ZSBjYW4gYmUgc2V0IGluIEFnZW50SVRTTUNoYW5nZUVkaXQuJ30gPQogICAgICAgICdEZWZpbmVzIGlmIHRoZSBjaGFuZ2Ugc3RhdGUgY2FuIGJlIHNldCBpbiBBZ2VudElUU01DaGFuZ2VFZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBwbGFubmVkIGVmZm9ydCBzaG91bGQgYmUgc2hvd24uJ30gPSAnRGVmaW5lcyBpZiB0aGUgcGxhbm5lZCBlZmZvcnQgc2hvdWxkIGJlIHNob3duLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgcHJpbnQgYnkgY3VzdG9tZXIuJ30gPSAnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHByaW50IGJ5IGN1c3RvbWVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2VhcmNoZWQgYnkgY3VzdG9tZXIuJ30gPQogICAgICAgICdEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2VhcmNoZWQgYnkgY3VzdG9tZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzZXQgYnkgY3VzdG9tZXIuJ30gPSAnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNldCBieSBjdXN0b21lci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNob3duIGJ5IGN1c3RvbWVyLid9ID0gJ0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzaG93biBieSBjdXN0b21lci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHN0YXRlIHNob3VsZCBiZSBzaG93bi4nfSA9ICdEZWZpbmVzIGlmIHRoZSB3b3Jrb3JkZXIgc3RhdGUgc2hvdWxkIGJlIHNob3duLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSB3b3Jrb3JkZXIgdGl0bGUgc2hvdWxkIGJlIHNob3duLid9ID0gJ0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciB0aXRsZSBzaG91bGQgYmUgc2hvd24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgc2hvd24gZ3JhcGggYXR0cmlidXRlcy4nfSA9ICdEZWZpbmVzIHNob3duIGdyYXBoIGF0dHJpYnV0ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhhdCBvbmx5IGNoYW5nZXMgY29udGFpbmluZyBXb3Jrb3JkZXJzIGxpbmtlZCB3aXRoIHNlcnZpY2VzLCB3aGljaCB0aGUgY3VzdG9tZXIgdXNlciBoYXMgcGVybWlzc2lvbiB0byB1c2Ugd2lsbCBiZSBzaG93bi4gQW55IG90aGVyIGNoYW5nZXMgd2lsbCBub3QgYmUgZGlzcGxheWVkLid9ID0KICAgICAgICAnRGVmaW5lcyB0aGF0IG9ubHkgY2hhbmdlcyBjb250YWluaW5nIFdvcmtvcmRlcnMgbGlua2VkIHdpdGggc2VydmljZXMsIHdoaWNoIHRoZSBjdXN0b21lciB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIHVzZSB3aWxsIGJlIHNob3duLiBBbnkgb3RoZXIgY2hhbmdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIGFsbG93ZWQgdG8gZGVsZXRlLid9ID0gJ0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIGFsbG93ZWQgdG8gZGVsZXRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIENoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIENoYW5nZSBQU0Egb3ZlcnZpZXcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgU2NoZWR1bGUgb3ZlcnZpZXcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBjaGFuZ2UgdGl0bGUgZm9yIGEgZHVtbXkgY2hhbmdlIHdoaWNoIGlzIG5lZWRlZCB0byBlZGl0IGEgd29ya29yZGVyIHRlbXBsYXRlLid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgZGVmYXVsdCBjaGFuZ2UgdGl0bGUgZm9yIGEgZHVtbXkgY2hhbmdlIHdoaWNoIGlzIG5lZWRlZCB0byBlZGl0IGEgd29ya29yZGVyIHRlbXBsYXRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9ICdEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBQSVIgb3ZlcnZpZXcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0gJ0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0gJ0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9ICdEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIFBJUiBvdmVydmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0gJ0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0gJ0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3Lid9ID0gJ0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjYXRlZ29yeSBvZiBhIGNoYW5nZS4nfSA9ICdEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY2F0ZWdvcnkgb2YgYSBjaGFuZ2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBpbXBhY3Qgb2YgYSBjaGFuZ2UuJ30gPSAnRGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGltcGFjdCBvZiBhIGNoYW5nZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciBjaGFuZ2UgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3IgY2hhbmdlIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3Igd29ya29yZGVyIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBmaWVsZCB0eXBlIG9mIENvbXBhcmVWYWx1ZSBmaWVsZHMgZm9yIHdvcmtvcmRlciBhdHRyaWJ1dGVzIHVzZWQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gVmFsaWQgdmFsdWVzIGFyZSBTZWxlY3Rpb24sIFRleHQgYW5kIERhdGUuIElmIGEgdHlwZSBpcyBub3QgZGVmaW5lZCwgdGhlIGZpZWxkIHdpbGwgbm90IGJlIHNob3duLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvYmplY3QgYXR0cmlidXRlcyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciBjaGFuZ2Ugb2JqZWN0cyBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgY2hhbmdlIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIG9iamVjdCBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHdvcmtvcmRlciBvYmplY3RzIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjY291bnRlZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjY291bnRlZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDYXRlZ29yeUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDYXRlZ29yeUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZUJ1aWxkZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlQnVpbGRlcklEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZU1hbmFnZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlTWFuYWdlcklEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZVN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZVN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZVRpdGxlIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIER5bmFtaWNGaWVsZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgRHluYW1pY0ZpZWxkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEltcGFjdElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBJbXBhY3RJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRWZmb3J0IGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRWZmb3J0IGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkU3RhcnRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkU3RhcnRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFByaW9yaXR5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFByaW9yaXR5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUmVxdWVzdGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUmVxdWVzdGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJBZ2VudElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJBZ2VudElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlck51bWJlciBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyTnVtYmVyIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclRpdGxlIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclR5cGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVHlwZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBlcmlvZCAoaW4geWVhcnMpLCBpbiB3aGljaCBzdGFydCBhbmQgZW5kIHRpbWVzIGNhbiBiZSBzZWxlY3RlZC4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIHBlcmlvZCAoaW4geWVhcnMpLCBpbiB3aGljaCBzdGFydCBhbmQgZW5kIHRpbWVzIGNhbiBiZSBzZWxlY3RlZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gYXR0cmlidXRlcyBvZiBhIHdvcmtvcmRlciBpbiB0aGUgdG9vbHRpcCBvZiB0aGUgd29ya29yZGVyIGdyYXBoIGluIHRoZSBjaGFuZ2Ugem9vbS4gVG8gc2hvdyB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMgaW4gdGhlIHRvb2x0aXAsIHRoZXkgbXVzdCBiZSBzcGVjaWZpZWQgbGlrZSBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMSwgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTIsIGV0Yy4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIHNob3duIGF0dHJpYnV0ZXMgb2YgYSB3b3Jrb3JkZXIgaW4gdGhlIHRvb2x0aXAgb2YgdGhlIHdvcmtvcmRlciBncmFwaCBpbiB0aGUgY2hhbmdlIHpvb20uIFRvIHNob3cgd29ya29yZGVyIGR5bmFtaWMgZmllbGRzIGluIHRoZSB0b29sdGlwLCB0aGV5IG11c3QgYmUgc3BlY2lmaWVkIGxpa2UgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTEsIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUyLCBldGMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBQU0Egb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgU2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgU2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBQSVIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBQSVIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2lnbmFscyBmb3IgZWFjaCBJVFNNQ2hhbmdlIHN0YXRlLid9ID0gJ0RlZmluZXMgdGhlIHNpZ25hbHMgZm9yIGVhY2ggSVRTTUNoYW5nZSBzdGF0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGVtcGxhdGUgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSB0ZW1wbGF0ZSB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIFBJUiBvdmVydmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHR5cGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNob3cgdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIHdvcmtvcmRlciB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBzaG93IHRoZSBQSVIgb3ZlcnZpZXcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciBub3RpZmljYXRpb25zIHNob3VsZCBiZSBzZW50Lid9ID0gJ0RlZmluZXMgd2hldGhlciBub3RpZmljYXRpb25zIHNob3VsZCBiZSBzZW50Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgYSBjaGFuZ2UuJ30gPSAnRGVsZXRlIGEgY2hhbmdlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMgb2YgYSBjaGFuZ2UgaGlzdG9yeSBlbnRyeS4nfSA9ICdEZXRhaWxzIG9mIGEgY2hhbmdlIGhpc3RvcnkgZW50cnkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgYW4gYWdlbnQgY2FuIGV4Y2hhbmdlIHRoZSBYLWF4aXMgb2YgYSBzdGF0IGlmIGhlIGdlbmVyYXRlcyBvbmUuJ30gPQogICAgICAgICdEZXRlcm1pbmVzIGlmIGFuIGFnZW50IGNhbiBleGNoYW5nZSB0aGUgWC1heGlzIG9mIGEgc3RhdCBpZiBoZSBnZW5lcmF0ZXMgb25lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIGRvbmUgZm9yIGNvbmZpZyBpdGVtIGNsYXNzZXMuJ30gPQogICAgICAgICdEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIGRvbmUgZm9yIGNvbmZpZyBpdGVtIGNsYXNzZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIGNoYW5nZSBzdGF0ZSB1cGRhdGVzIHdpdGhpbiBhIHRpbWVwZXJpb2QuJ30gPQogICAgICAgICdEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyBjaGFuZ2Ugc3RhdGUgdXBkYXRlcyB3aXRoaW4gYSB0aW1lcGVyaW9kLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyB0aGUgcmVsYXRpb24gYmV0d2VlbiBjaGFuZ2VzIGFuZCBpbmNpZGVudCB0aWNrZXRzLid9ID0KICAgICAgICAnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyByZWdhcmRpbmcgdGhlIHJlbGF0aW9uIGJldHdlZW4gY2hhbmdlcyBhbmQgaW5jaWRlbnQgdGlja2V0cy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcy4nfSA9CiAgICAgICAgJ0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IHRoZSBudW1iZXIgb2YgUmZjIHRpY2tldHMgYSByZXF1ZXN0ZXIgY3JlYXRlZC4nfSA9CiAgICAgICAgJ0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IHRoZSBudW1iZXIgb2YgUmZjIHRpY2tldHMgYSByZXF1ZXN0ZXIgY3JlYXRlZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgKGZvciBjaGFuZ2VzIGFuZCB3b3Jrb3JkZXJzKSBzaG93biBpbiB0aGUgY2hhbmdlIHByaW50IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ0R5bmFtaWMgZmllbGRzIChmb3IgY2hhbmdlcyBhbmQgd29ya29yZGVycykgc2hvd24gaW4gdGhlIGNoYW5nZSBwcmludCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIHJlcG9ydCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgcmVwb3J0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pY0ZpZWxkIGV2ZW50IG1vZHVsZSB0byBoYW5kbGUgdGhlIHVwZGF0ZSBvZiBjb25kaXRpb25zIGlmIGR5bmFtaWMgZmllbGRzIGFyZSBhZGRlZCwgdXBkYXRlZCBvciBkZWxldGVkLid9ID0KICAgICAgICAnRHluYW1pY0ZpZWxkIGV2ZW50IG1vZHVsZSB0byBoYW5kbGUgdGhlIHVwZGF0ZSBvZiBjb25kaXRpb25zIGlmIGR5bmFtaWMgZmllbGRzIGFyZSBhZGRlZCwgdXBkYXRlZCBvciBkZWxldGVkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IGEgY2hhbmdlLid9ID0gJ0VkaXQgYSBjaGFuZ2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcndhcmQgc2NoZWR1bGUgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb3ZlciBhcHByb3ZlZCBjaGFuZ2VzLid9ID0KICAgICAgICAnRm9yd2FyZCBzY2hlZHVsZSBvZiBjaGFuZ2VzLiBPdmVydmlldyBvdmVyIGFwcHJvdmVkIGNoYW5nZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgWm9vbSd9ID0gJ0hpc3RvcnkgWm9vbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDQUIgVGVtcGxhdGVzLid9ID0gJ0lUU00gQ2hhbmdlIENBQiBUZW1wbGF0ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIENvbmRpdGlvbiBFZGl0Lid9ID0gJ0lUU00gQ2hhbmdlIENvbmRpdGlvbiBFZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gT3ZlcnZpZXcuJ30gPSAnSVRTTSBDaGFuZ2UgQ29uZGl0aW9uIE92ZXJ2aWV3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbnMnfSA9ICdJVFNNIENoYW5nZSBNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlciBPdmVydmlldy4nfSA9ICdJVFNNIENoYW5nZSBNYW5hZ2VyIE92ZXJ2aWV3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBQSVIgT3ZlcnZpZXcuJ30gPSAnSVRTTSBDaGFuZ2UgUElSIE92ZXJ2aWV3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBub3RpZmljYXRpb24gcnVsZXMnfSA9ICdJVFNNIENoYW5nZSBub3RpZmljYXRpb24gcnVsZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VzJ30gPSAnQ2hhbmdlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q0FCIE92ZXJ2aWV3Lid9ID0gJ0lUU00gTXlDQUIgT3ZlcnZpZXcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlDaGFuZ2VzIE92ZXJ2aWV3Lid9ID0gJ0lUU00gTXlDaGFuZ2VzIE92ZXJ2aWV3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15V29ya29yZGVycyBPdmVydmlldy4nfSA9ICdJVFNNIE15V29ya29yZGVycyBPdmVydmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBEZWxldGUuJ30gPSAnSVRTTSBUZW1wbGF0ZSBEZWxldGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDQUIuJ30gPSAnSVRTTSBUZW1wbGF0ZSBFZGl0IENBQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0IENvbnRlbnQuJ30gPSAnSVRTTSBUZW1wbGF0ZSBFZGl0IENvbnRlbnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdC4nfSA9ICdJVFNNIFRlbXBsYXRlIEVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgT3ZlcnZpZXcuJ30gPSAnSVRTTSBUZW1wbGF0ZSBPdmVydmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBjbGVhbnMgdXAgY29uZGl0aW9ucy4nfSA9ICdJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGNsZWFucyB1cCBjb25kaXRpb25zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGNhY2hlIGZvciBhIHRvb2xiYXIuJ30gPSAnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBjYWNoZSBmb3IgYSB0b29sYmFyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICdJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBtYXRjaGVzIGNvbmRpdGlvbnMgYW5kIGV4ZWN1dGVzIGFjdGlvbnMuJ30gPQogICAgICAgICdJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IG1hdGNoZXMgY29uZGl0aW9ucyBhbmQgZXhlY3V0ZXMgYWN0aW9ucy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBzZW5kcyBub3RpZmljYXRpb25zLid9ID0gJ0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgc2VuZHMgbm90aWZpY2F0aW9ucy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJ30gPSAnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiBjb25kaXRpb25zLid9ID0gJ0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiBjb25kaXRpb25zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2Ygd29ya29yZGVycy4nfSA9ICdJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2Ygd29ya29yZGVycy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gcmVjYWxjdWxhdGUgdGhlIHdvcmtvcmRlciBudW1iZXJzLid9ID0gJ0lUU00gZXZlbnQgbW9kdWxlIHRvIHJlY2FsY3VsYXRlIHRoZSB3b3Jrb3JkZXIgbnVtYmVycy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gc2V0IHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBvZiB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAnSVRTTSBldmVudCBtb2R1bGUgdG8gc2V0IHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBvZiB3b3Jrb3JkZXJzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNQ2hhbmdlJ30gPSAnQ2hhbmdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01Xb3JrT3JkZXInfSA9ICdXb3Jrb3JkZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZnJlcXVlbmN5IGlzIFwncmVndWxhcmx5XCcsIHlvdSBjYW4gY29uZmlndXJlIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCAoZXZlcnkgWCBob3VycykuJ30gPQogICAgICAgICdJZiBmcmVxdWVuY3kgaXMgXCdyZWd1bGFybHlcJywgeW91IGNhbiBjb25maWd1cmUgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IChldmVyeSBYIGhvdXJzKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvZ2ZpbGUgZm9yIHRoZSBJVFNNIGNoYW5nZSBjb3VudGVyLiBUaGlzIGZpbGUgaXMgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIGNoYW5nZSBudW1iZXJzLid9ID0KICAgICAgICAnTG9nZmlsZSBmb3IgdGhlIElUU00gY2hhbmdlIGNvdW50ZXIuIFRoaXMgZmlsZSBpcyB1c2VkIGZvciBjcmVhdGluZyB0aGUgY2hhbmdlIG51bWJlcnMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvb2t1cCBvZiBDQUIgbWVtYmVycyBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAnTG9va3VwIG9mIENBQiBtZW1iZXJzIGZvciBhdXRvY29tcGxldGlvbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIGFnZW50cywgdXNlZCBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAnTG9va3VwIG9mIGFnZW50cywgdXNlZCBmb3IgYXV0b2NvbXBsZXRpb24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayBpZiBXb3JrT3JkZXJBZGQgb3IgV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlIHNob3VsZCBiZSBwZXJtaXR0ZWQuJ30gPQogICAgICAgICdNb2R1bGUgdG8gY2hlY2sgaWYgV29ya09yZGVyQWRkIG9yIFdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZSBzaG91bGQgYmUgcGVybWl0dGVkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIENBQiBtZW1iZXJzLid9ID0gJ01vZHVsZSB0byBjaGVjayB0aGUgQ0FCIG1lbWJlcnMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgYWdlbnQuJ30gPSAnTW9kdWxlIHRvIGNoZWNrIHRoZSBhZ2VudC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgYnVpbGRlci4nfSA9ICdNb2R1bGUgdG8gY2hlY2sgdGhlIGNoYW5nZSBidWlsZGVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGNoYW5nZSBtYW5hZ2VyLid9ID0gJ01vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIG1hbmFnZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgd29ya29yZGVyIGFnZW50Lid9ID0gJ01vZHVsZSB0byBjaGVjayB0aGUgd29ya29yZGVyIGFnZW50Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgd2hldGhlciBubyB3b3Jrb3JkZXIgYWdlbnQgaXMgc2V0Lid9ID0gJ01vZHVsZSB0byBjaGVjayB3aGV0aGVyIG5vIHdvcmtvcmRlciBhZ2VudCBpcyBzZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIHRoZSBhZ2VudCBpcyBjb250YWluZWQgaW4gdGhlIGNvbmZpZ3VyZWQgbGlzdC4nfSA9CiAgICAgICAgJ01vZHVsZSB0byBjaGVjayB3aGV0aGVyIHRoZSBhZ2VudCBpcyBjb250YWluZWQgaW4gdGhlIGNvbmZpZ3VyZWQgbGlzdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYSBsaW5rIHRvIGNyZWF0ZSBhIGNoYW5nZSBmcm9tIHRoaXMgdGlja2V0LiBUaGUgdGlja2V0IHdpbGwgYmUgYXV0b21hdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgbmV3IGNoYW5nZS4nfSA9CiAgICAgICAgJ01vZHVsZSB0byBzaG93IGEgbGluayB0byBjcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4gVGhlIHRpY2tldCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgbGlua2VkIHdpdGggdGhlIG5ldyBjaGFuZ2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90Lid9ID0gJ01vdmUgVGltZSBTbG90Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIGFsbCB3b3Jrb3JkZXJzIGluIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyAoZnJvbSB0ZW1wbGF0ZSknfSA9ICdOZXcgKGZyb20gdGVtcGxhdGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgdXNlcnMgb2YgdGhlc2UgZ3JvdXBzIGhhdmUgdGhlIHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0aWNrZXQgdHlwZXMgYXMgZGVmaW5lZCBpbiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiBpZiB0aGUgZmVhdHVyZSAiVGlja2V0OjpBY2w6Ok1vZHVsZSMjIzIwMC1UaWNrZXQ6OkFjbDo6TW9kdWxlIiBpcyBlbmFibGVkLid9ID0KICAgICAgICAnT25seSB1c2VycyBvZiB0aGVzZSBncm91cHMgaGF2ZSB0aGUgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRpY2tldCB0eXBlcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiIGlmIHRoZSBmZWF0dXJlICJUaWNrZXQ6OkFjbDo6TW9kdWxlIyMjMjAwLVRpY2tldDo6QWNsOjpNb2R1bGUiIGlzIGVuYWJsZWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG92ZXIgYWxsIENoYW5nZXMuJ30gPSAnT3ZlcnZpZXcgb3ZlciBhbGwgQ2hhbmdlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpJ30gPSAnUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUFNBJ30gPSAnUFNBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBVc2VyQ3JlYXRlV29ya09yZGVyTmV4dE1hc2sgb2JqZWN0IGluIHRoZSBwcmVmZXJlbmNlIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1BhcmFtZXRlcnMgZm9yIHRoZSBVc2VyQ3JlYXRlV29ya09yZGVyTmV4dE1hc2sgb2JqZWN0IGluIHRoZSBwcmVmZXJlbmNlIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY2hhbmdlcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICdQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjaGFuZ2VzIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIGNoYW5nZSBvdmVydmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJlc2VudHMgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNob3cgdGhlIGludm9sdmVkIHBlcnNvbnMgaW4gYSBjaGFuZ2UsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBjaGFuZ2UgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1ByZXNlbnRzIGEgbGluayBpbiB0aGUgbWVudSB0byBzaG93IHRoZSBpbnZvbHZlZCBwZXJzb25zIGluIGEgY2hhbmdlLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggY2hhbmdlIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHkgKFBTQSknfSA9ICdQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHkgKFBTQSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpIG9mIGNoYW5nZXMuIE92ZXJ2aWV3IG9mIGFwcHJvdmVkIGNoYW5nZXMgYW5kIHRoZWlyIHNlcnZpY2VzLid9ID0KICAgICAgICAnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpIG9mIGNoYW5nZXMuIE92ZXJ2aWV3IG9mIGFwcHJvdmVkIGNoYW5nZXMgYW5kIHRoZWlyIHNlcnZpY2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIGluIG9yZGVyIGZvciBhbiBhZ2VudCB0byB0YWtlIGEgd29ya29yZGVyLid9ID0KICAgICAgICAnUmVxdWlyZWQgcHJpdmlsZWdlcyBpbiBvcmRlciBmb3IgYW4gYWdlbnQgdG8gdGFrZSBhIHdvcmtvcmRlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhY2Nlc3MgdGhlIG92ZXJ2aWV3IG9mIGFsbCBjaGFuZ2VzLid9ID0gJ1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWNjZXNzIHRoZSBvdmVydmlldyBvZiBhbGwgY2hhbmdlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhZGQgYSB3b3Jrb3JkZXIuJ30gPSAnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhZGQgYSB3b3Jrb3JkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY2hhbmdlIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjaGFuZ2UgdGhlIHdvcmtvcmRlciBhZ2VudC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlLid9ID0gJ1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlc1wnIENBQi4nfSA9CiAgICAgICAgJ1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZXNcJyBDQUIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIHdvcmtvcmRlci4nfSA9ICdSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSB3b3Jrb3JkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMgZnJvbSB0ZW1wbGF0ZXMuJ30gPSAnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgY2hhbmdlcyBmcm9tIHRlbXBsYXRlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgY2hhbmdlcy4nfSA9ICdSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHRlbXBsYXRlLid9ID0gJ1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgdGVtcGxhdGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgd29ya29yZGVyLid9ID0gJ1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgd29ya29yZGVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjaGFuZ2VzLid9ID0gJ1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNoYW5nZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHRlbXBsYXRlLid9ID0gJ1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHRlbXBsYXRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgYSB3b3Jrb3JkZXIuJ30gPSAnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgd29ya29yZGVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgY2hhbmdlcy4nfSA9ICdSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgY2hhbmdlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29udGVudCBvZiBhIHRlbXBsYXRlLid9ID0gJ1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29udGVudCBvZiBhIHRlbXBsYXRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGludm9sdmVkIHBlcnNvbnMgb2YgYSBjaGFuZ2UuJ30gPQogICAgICAgICdSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGludm9sdmVkIHBlcnNvbnMgb2YgYSBjaGFuZ2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gbW92ZSBjaGFuZ2VzIGluIHRpbWUuJ30gPSAnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBtb3ZlIGNoYW5nZXMgaW4gdGltZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBwcmludCBhIGNoYW5nZS4nfSA9ICdSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHByaW50IGEgY2hhbmdlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHJlc2V0IGNoYW5nZXMuJ30gPSAnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byByZXNldCBjaGFuZ2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgYSB3b3Jrb3JkZXIuJ30gPSAnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGEgd29ya29yZGVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgY2hhbmdlcy4nfSA9ICdSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgY2hhbmdlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyBhIENBQiBtZW1iZXIuJ30gPQogICAgICAgICdSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIGEgQ0FCIG1lbWJlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPQogICAgICAgICdSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIHRoZSBjaGFuZ2UgbWFuYWdlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IG92ZXJ2aWV3IG92ZXIgYWxsIHRlbXBsYXRlcy4nfSA9ICdSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgb3ZlcnZpZXcgb3ZlciBhbGwgdGVtcGxhdGVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGNvbmRpdGlvbnMgb2YgY2hhbmdlcy4nfSA9ICdSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGNvbmRpdGlvbnMgb2YgY2hhbmdlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IG9mIGEgY2hhbmdlLid9ID0gJ1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyLid9ID0gJ1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSBjaGFuZ2UuJ30gPSAnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSBjaGFuZ2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgd29ya29yZGVyLid9ID0KICAgICAgICAnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSB3b3Jrb3JkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBDaGFuZ2UgU2NoZWR1bGUuJ30gPSAnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIENoYW5nZSBTY2hlZHVsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIGNoYW5nZSBQU0EuJ30gPSAnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIGNoYW5nZSBQU0EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2VzIHdpdGggYW4gdXBjb21pbmcgUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldykuJ30gPQogICAgICAgICdSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlcyB3aXRoIGFuIHVwY29taW5nIFBJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIGNoYW5nZXMuJ30gPSAnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biBjaGFuZ2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIHdvcmtvcmRlcnMuJ30gPSAnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biB3b3Jrb3JkZXJzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHdyaXRlIGEgcmVwb3J0IGZvciB0aGUgd29ya29yZGVyLid9ID0gJ1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gd3JpdGUgYSByZXBvcnQgZm9yIHRoZSB3b3Jrb3JkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICdSZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biB0YXNrIHRvIGNoZWNrIGlmIHNwZWNpZmljIHRpbWVzIGhhdmUgYmVlbiByZWFjaGVkIGluIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICdSdW4gdGFzayB0byBjaGVjayBpZiBzcGVjaWZpYyB0aW1lcyBoYXZlIGJlZW4gcmVhY2hlZCBpbiBjaGFuZ2VzIGFuZCB3b3Jrb3JkZXJzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIGNoYW5nZSBhcyBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2hlZHVsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY3JlZW4gYWZ0ZXIgY3JlYXRpbmcgYSB3b3Jrb3JkZXInfSA9ICdTY3JlZW4gYWZ0ZXIgY3JlYXRpbmcgYSB3b3Jrb3JkZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMnfSA9ICdTZWFyY2ggQ2hhbmdlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ2hhbmdlcy4nfSA9ICdTZWFyY2ggQ2hhbmdlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY2hhbmdlIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY2hhbmdlIG51bWJlciwgdGhlIFN5c3RlbUlEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZCB3aXRoIFN5c3RlbUlELmNvdW50ZXIgZm9ybWF0IChlLmcuIDEwMDExOCwgMTAwMTE5KS4gV2l0aCAiRGF0ZSIsIHRoZSBjaGFuZ2UgbnVtYmVycyB3aWxsIGJlIGdlbmVyYXRlZCBieSB0aGUgY3VycmVudCBkYXRlIGFuZCBhIGNvdW50ZXI7IHRoaXMgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuY291bnRlciwgZS5nLiAyMDEwMDYyNDAwMDAxLCAyMDEwMDYyNDAwMDAyLiBXaXRoICJEYXRlQ2hlY2tzdW0iLCB0aGUgY291bnRlciB3aWxsIGJlIGFwcGVuZGVkIGFzIGNoZWNrc3VtIHRvIHRoZSBzdHJpbmcgb2YgZGF0ZSBwbHVzIHRoZSBTeXN0ZW1JRC4gVGhlIGNoZWNrc3VtIHdpbGwgYmUgcm90YXRlZCBvbiBhIGRhaWx5IGJhc2lzLiBUaGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LlN5c3RlbUlELkNvdW50ZXIuQ2hlY2tTdW0sIGUuZy4gMjAxMDA2MjQxMDAwMDAxNywgMjAxMDA2MjQxMDAwMDAyNi4nfSA9CiAgICAgICAgJ1NlbGVjdHMgdGhlIGNoYW5nZSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNoYW5nZSBudW1iZXIsIHRoZSBTeXN0ZW1JRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQgd2l0aCBTeXN0ZW1JRC5jb3VudGVyIGZvcm1hdCAoZS5nLiAxMDAxMTgsIDEwMDExOSkuIFdpdGggIkRhdGUiLCB0aGUgY2hhbmdlIG51bWJlcnMgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgYSBjb3VudGVyOyB0aGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LmNvdW50ZXIsIGUuZy4gMjAxMDA2MjQwMDAwMSwgMjAxMDA2MjQwMDAwMi4gV2l0aCAiRGF0ZUNoZWNrc3VtIiwgdGhlIGNvdW50ZXIgd2lsbCBiZSBhcHBlbmRlZCBhcyBjaGVja3N1bSB0byB0aGUgc3RyaW5nIG9mIGRhdGUgcGx1cyB0aGUgU3lzdGVtSUQuIFRoZSBjaGVja3N1bSB3aWxsIGJlIHJvdGF0ZWQgb24gYSBkYWlseSBiYXNpcy4gVGhpcyBmb3JtYXQgbG9va3MgbGlrZSBZZWFyLk1vbnRoLkRheS5TeXN0ZW1JRC5Db3VudGVyLkNoZWNrU3VtLCBlLmcuIDIwMTAwNjI0MTAwMDAwMTcsIDIwMTAwNjI0MTAwMDAwMjYuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgYWdlbnQgZm9yIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50SVRTTUNoYW5nZVpvb20gYW5kIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJ30gPQogICAgICAgICdTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRJVFNNQ2hhbmdlWm9vbSBhbmQgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgbWluaW1hbCBjaGFuZ2UgY291bnRlciBzaXplIChpZiAiQXV0b0luY3JlbWVudCIgd2FzIHNlbGVjdGVkIGFzIElUU01DaGFuZ2U6Ok51bWJlckdlbmVyYXRvcikuIERlZmF1bHQgaXMgNSwgdGhpcyBtZWFucyB0aGUgY291bnRlciBzdGFydHMgZnJvbSAxMDAwMC4nfSA9CiAgICAgICAgJ1NldHMgdGhlIG1pbmltYWwgY2hhbmdlIGNvdW50ZXIgc2l6ZSAoaWYgIkF1dG9JbmNyZW1lbnQiIHdhcyBzZWxlY3RlZCBhcyBJVFNNQ2hhbmdlOjpOdW1iZXJHZW5lcmF0b3IpLiBEZWZhdWx0IGlzIDUsIHRoaXMgbWVhbnMgdGhlIGNvdW50ZXIgc3RhcnRzIGZyb20gMTAwMDAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdXAgdGhlIHN0YXRlIG1hY2hpbmUgZm9yIGNoYW5nZXMuJ30gPSAnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3IgY2hhbmdlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3Igd29ya29yZGVycy4nfSA9ICdTZXRzIHVwIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciB3b3Jrb3JkZXJzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGNoZWNrYm94IGluIHRoZSBBZ2VudElUU01Xb3JrT3JkZXJFZGl0IHNjcmVlbiB0aGF0IGRlZmluZXMgaWYgdGhlIHRoZSBmb2xsb3dpbmcgd29ya29yZGVycyBzaG91bGQgYWxzbyBiZSBtb3ZlZCBpZiBhIHdvcmtvcmRlciBpcyBtb2RpZmllZCBhbmQgdGhlIHBsYW5uZWQgZW5kIHRpbWUgaGFzIGNoYW5nZWQuJ30gPQogICAgICAgICdTaG93cyBhIGNoZWNrYm94IGluIHRoZSBBZ2VudElUU01Xb3JrT3JkZXJFZGl0IHNjcmVlbiB0aGF0IGRlZmluZXMgaWYgdGhlIHRoZSBmb2xsb3dpbmcgd29ya29yZGVycyBzaG91bGQgYWxzbyBiZSBtb3ZlZCBpZiBhIHdvcmtvcmRlciBpcyBtb2RpZmllZCBhbmQgdGhlIHBsYW5uZWQgZW5kIHRpbWUgaGFzIGNoYW5nZWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBjaGFuZ2luZyB0aGUgd29ya29yZGVyIGFnZW50LCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgY2hhbmdpbmcgdGhlIHdvcmtvcmRlciBhZ2VudCwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZSBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSBjaGFuZ2UsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZSBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSBjaGFuZ2UsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIHdvcmtvcmRlciwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIHdvcmtvcmRlciwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGVkaXRpbmcgdGhlIHJlcG9ydCBvZiBhIHdvcmtvcmRlciwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGVkaXRpbmcgdGhlIHJlcG9ydCBvZiBhIHdvcmtvcmRlciwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNoYW5nZSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNoYW5nZSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgd29ya29yZGVyIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSB3b3Jrb3JkZXIgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBtb3ZpbmcgdGhlIHRpbWUgc2xvdCBvZiBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbW92aW5nIHRoZSB0aW1lIHNsb3Qgb2YgYSBjaGFuZ2UgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdGFraW5nIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdGFraW5nIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGNvbmRpdGlvbnMgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGNvbmRpdGlvbnMgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSB3b3Jrb3JkZXIgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSB3b3Jrb3JkZXIgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIHdvcmtvcmRlciBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgd29ya29yZGVyIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIHdvcmtvcmRlciB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSB3b3Jrb3JkZXIgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byByZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHJlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycyBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjaGFuZ2UgaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2hvd3MgdGhlIGNoYW5nZSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRlIE1hY2hpbmUnfSA9ICdTdGF0ZSBNYWNoaW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0b3JlcyBjaGFuZ2UgYW5kIHdvcmtvcmRlciBpZHMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgdGVtcGxhdGUgaWQsIHdoaWxlIGEgdXNlciBpcyBlZGl0aW5nIGEgdGVtcGxhdGUuJ30gPQogICAgICAgICdTdG9yZXMgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgaWRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHRlbXBsYXRlIGlkLCB3aGlsZSBhIHVzZXIgaXMgZWRpdGluZyBhIHRlbXBsYXRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIFdvcmtvcmRlcid9ID0gJ1Rha2UgV29ya29yZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgV29ya29yZGVyLid9ID0gJ1Rha2UgV29ya29yZGVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIE92ZXJ2aWV3J30gPSAnVGVtcGxhdGUgT3ZlcnZpZXcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUuJ30gPSAnVGVtcGxhdGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNoYW5nZSwgZS5nLiBDaGFuZ2UjLCBNeUNoYW5nZSMuIFRoZSBkZWZhdWx0IGlzIENoYW5nZSMuJ30gPQogICAgICAgICdUaGUgaWRlbnRpZmllciBmb3IgYSBjaGFuZ2UsIGUuZy4gQ2hhbmdlIywgTXlDaGFuZ2UjLiBUaGUgZGVmYXVsdCBpcyBDaGFuZ2UjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSB3b3Jrb3JkZXIsIGUuZy4gV29ya29yZGVyIywgTXlXb3Jrb3JkZXIjLiBUaGUgZGVmYXVsdCBpcyBXb3Jrb3JkZXIjLid9ID0KICAgICAgICAnVGhlIGlkZW50aWZpZXIgZm9yIGEgd29ya29yZGVyLCBlLmcuIFdvcmtvcmRlciMsIE15V29ya29yZGVyIy4gVGhlIGRlZmF1bHQgaXMgV29ya29yZGVyIy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBBQ0wgbW9kdWxlIHJlc3RyaWN0cyB0aGUgdXN1YWdlIG9mIHRoZSB0aWNrZXQgdHlwZXMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbiBcJ0lUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlc1wnLCB0byB1c2VycyBvZiB0aGUgZ3JvdXBzIGFzIGRlZmluZWQgaW4gIklUU01DaGFuZ2U6OlJlc3RyaWN0VGlja2V0VHlwZXM6Okdyb3VwcyIuIEFzIHRoaXMgQUNMIGNvdWxkIGNvbGxpZGUgd2l0aCBvdGhlciBBQ0xzIHdoaWNoIGFyZSBhbHNvIHJlbGF0ZWQgdG8gdGhlIHRpY2tldCB0eXBlLCB0aGlzIHN5c2NvbmZpZyBvcHRpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgc2hvdWxkIG9ubHkgYmUgYWN0aXZhdGVkIGlmIG5lZWRlZC4nfSA9CiAgICAgICAgJ1RoaXMgQUNMIG1vZHVsZSByZXN0cmljdHMgdGhlIHVzdWFnZSBvZiB0aGUgdGlja2V0IHR5cGVzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb24gXCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXNcJywgdG8gdXNlcnMgb2YgdGhlIGdyb3VwcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpSZXN0cmljdFRpY2tldFR5cGVzOjpHcm91cHMiLiBBcyB0aGlzIEFDTCBjb3VsZCBjb2xsaWRlIHdpdGggb3RoZXIgQUNMcyB3aGljaCBhcmUgYWxzbyByZWxhdGVkIHRvIHRoZSB0aWNrZXQgdHlwZSwgdGhpcyBzeXNjb25maWcgb3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIHNob3VsZCBvbmx5IGJlIGFjdGl2YXRlZCBpZiBuZWVkZWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgU2xvdCd9ID0gJ1RpbWUgU2xvdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlcyBvZiB0aWNrZXRzLCB3aGVyZSBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBhIGxpbmsgdG8gYWRkIGEgY2hhbmdlIHdpbGwgYmUgZGlzcGxheWVkLid9ID0KICAgICAgICAnVHlwZXMgb2YgdGlja2V0cywgd2hlcmUgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgYSBsaW5rIHRvIGFkZCBhIGNoYW5nZSB3aWxsIGJlIGRpc3BsYXllZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBTZWFyY2gnfSA9ICdVc2VyIFNlYXJjaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWRkIChmcm9tIHRlbXBsYXRlKS4nfSA9ICdXb3Jrb3JkZXIgQWRkIChmcm9tIHRlbXBsYXRlKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFkZC4nfSA9ICdXb3Jrb3JkZXIgQWRkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQuJ30gPSAnV29ya29yZGVyIEFnZW50Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgRGVsZXRlLid9ID0gJ1dvcmtvcmRlciBEZWxldGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBFZGl0Lid9ID0gJ1dvcmtvcmRlciBFZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSGlzdG9yeSBab29tLid9ID0gJ1dvcmtvcmRlciBIaXN0b3J5IFpvb20uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBIaXN0b3J5Lid9ID0gJ1dvcmtvcmRlciBIaXN0b3J5Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgUmVwb3J0Lid9ID0gJ1dvcmtvcmRlciBSZXBvcnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tLid9ID0gJ1dvcmtvcmRlciBab29tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvbmNlJ30gPSAnb25jZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWd1bGFybHknfSA9ICdyZWd1bGFybHknOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZW5fSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFJVFNNQ2hhbmdlTWFuYWdlbWVudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTUNoYW5nZSd9ID0gJ0NoYW5nZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNQ2hhbmdlcyd9ID0gJ0NoYW5nZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VzJ30gPSAnQ2hhbmdlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3b3Jrb3JkZXInfSA9ICdXb3Jrb3JkZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjaGFuZ2UgbXVzdCBoYXZlIGEgdGl0bGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY29uZGl0aW9uIG11c3QgaGF2ZSBhIG5hbWUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdGVtcGxhdGUgbXVzdCBoYXZlIGEgbmFtZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB3b3Jrb3JkZXIgbXVzdCBoYXZlIGEgdGl0bGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDQUIgVGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgdG8gdGhlIGNoYW5nZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGNvbmRpdGlvbiBhbmQgYWN0aW9uIHBhaXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG1vZHVsZSB0byBzaG93IHRoZSBDaGFuZ2VNYW5hZ2VyIG92ZXJ2aWV3IGljb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBtb2R1bGUgdG8gc2hvdyB0aGUgTXlDQUIgb3ZlcnZpZXcgaWNvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG1vZHVsZSB0byBzaG93IHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcgaWNvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG1vZHVsZSB0byBzaG93IHRoZSBNeVdvcmtPcmRlcnMgb3ZlcnZpZXcgaWNvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCQWdlbnRzJ30gPSAnQ0FCIEFnZW50cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUJDdXN0b21lcnMnfSA9ICdDQUIgQ3VzdG9tZXJzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2NoZWR1bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGludm9sdmVkIHBlcnNvbnMgb2YgdGhlIGNoYW5nZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VIaXN0b3J5OjpBY3Rpb25BZGQnfSA9ICclczogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlSGlzdG9yeTo6QWN0aW9uQWRkSUQnfSA9ICdOZXcgQWN0aW9uIChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlSGlzdG9yeTo6QWN0aW9uRGVsZXRlJ30gPSAnQWN0aW9uIChJRD0lcykgZGVsZXRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VIaXN0b3J5OjpBY3Rpb25EZWxldGVBbGwnfSA9ICdBbGwgQWN0aW9ucyBvZiBDb25kaXRpb24gKElEPSVzKSBkZWxldGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZUhpc3Rvcnk6OkFjdGlvbkV4ZWN1dGUnfSA9ICdBY3Rpb24gKElEPSVzKSBleGVjdXRlZDogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlSGlzdG9yeTo6QWN0aW9uVXBkYXRlJ30gPSAnJXMgKEFjdGlvbiBJRD0lcyk6IE5ldzogJXMgPC0gT2xkOiAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VIaXN0b3J5OjpDaGFuZ2VBY3R1YWxFbmRUaW1lUmVhY2hlZCd9ID0gJ0NoYW5nZSAoSUQ9JXMpIHJlYWNoZWQgYWN0dWFsIGVuZCB0aW1lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VIaXN0b3J5OjpDaGFuZ2VBY3R1YWxTdGFydFRpbWVSZWFjaGVkJ30gPSAnQ2hhbmdlIChJRD0lcykgcmVhY2hlZCBhY3R1YWwgc3RhcnQgdGltZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlSGlzdG9yeTo6Q2hhbmdlQWRkJ30gPSAnTmV3IENoYW5nZSAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZUhpc3Rvcnk6OkNoYW5nZUF0dGFjaG1lbnRBZGQnfSA9ICdOZXcgQXR0YWNobWVudDogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlSGlzdG9yeTo6Q2hhbmdlQXR0YWNobWVudERlbGV0ZSd9ID0gJ0RlbGV0ZWQgQXR0YWNobWVudCAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VIaXN0b3J5OjpDaGFuZ2VDQUJEZWxldGUnfSA9ICdDQUIgRGVsZXRlZCAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VIaXN0b3J5OjpDaGFuZ2VDQUJVcGRhdGUnfSA9ICclczogTmV3OiAlcyA8LSBPbGQ6ICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZUhpc3Rvcnk6OkNoYW5nZUxpbmtBZGQnfSA9ICdMaW5rIHRvICVzIChJRD0lcykgYWRkZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlSGlzdG9yeTo6Q2hhbmdlTGlua0RlbGV0ZSd9ID0gJ0xpbmsgdG8gJXMgKElEPSVzKSBkZWxldGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZUhpc3Rvcnk6OkNoYW5nZU5vdGlmaWNhdGlvblNlbnQnfSA9ICdOb3RpZmljYXRpb24gc2VudCB0byAlcyAoRXZlbnQ6ICVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VIaXN0b3J5OjpDaGFuZ2VQbGFubmVkRW5kVGltZVJlYWNoZWQnfSA9ICdDaGFuZ2UgKElEPSVzKSByZWFjaGVkIHBsYW5uZWQgZW5kIHRpbWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZUhpc3Rvcnk6OkNoYW5nZVBsYW5uZWRTdGFydFRpbWVSZWFjaGVkJ30gPSAnQ2hhbmdlIChJRD0lcykgcmVhY2hlZCBwbGFubmVkIHN0YXJ0IHRpbWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZUhpc3Rvcnk6OkNoYW5nZVJlcXVlc3RlZFRpbWVSZWFjaGVkJ30gPSAnQ2hhbmdlIChJRD0lcykgcmVhY2hlZCByZXF1ZXN0ZWQgdGltZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlSGlzdG9yeTo6Q2hhbmdlVXBkYXRlJ30gPSAnJXM6IE5ldzogJXMgPC0gT2xkOiAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VIaXN0b3J5OjpDb25kaXRpb25BZGQnfSA9ICclczogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlSGlzdG9yeTo6Q29uZGl0aW9uQWRkSUQnfSA9ICdOZXcgQ29uZGl0aW9uIChJRD0lcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlSGlzdG9yeTo6Q29uZGl0aW9uRGVsZXRlJ30gPSAnQ29uZGl0aW9uIChJRD0lcykgZGVsZXRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VIaXN0b3J5OjpDb25kaXRpb25EZWxldGVBbGwnfSA9ICdBbGwgQ29uZGl0aW9ucyBvZiBDaGFuZ2UgKElEPSVzKSBkZWxldGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZUhpc3Rvcnk6OkNvbmRpdGlvblVwZGF0ZSd9ID0gJyVzIChDb25kaXRpb24gSUQ9JXMpOiBOZXc6ICVzIDwtIE9sZDogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlSGlzdG9yeTo6RXhwcmVzc2lvbkFkZCd9ID0gJyVzOiAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VIaXN0b3J5OjpFeHByZXNzaW9uQWRkSUQnfSA9ICdOZXcgRXhwcmVzc2lvbiAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZUhpc3Rvcnk6OkV4cHJlc3Npb25EZWxldGUnfSA9ICdFeHByZXNzaW9uIChJRD0lcykgZGVsZXRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VIaXN0b3J5OjpFeHByZXNzaW9uRGVsZXRlQWxsJ30gPSAnQWxsIEV4cHJlc3Npb25zIG9mIENvbmRpdGlvbiAoSUQ9JXMpIGRlbGV0ZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlSGlzdG9yeTo6RXhwcmVzc2lvblVwZGF0ZSd9ID0gJyVzIChFeHByZXNzaW9uIElEPSVzKTogTmV3OiAlcyA8LSBPbGQ6ICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZU51bWJlcid9ID0gJ0NoYW5nZSBOdW1iZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2xlYXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIEVkaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgQ2hhbmdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIGNoYW5nZSBmcm9tIHRoaXMgdGlja2V0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgV29ya29yZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIGNoYW5nZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSBjb25kaXRpb25zIG9mIHRoZSBjaGFuZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgd29ya29yZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cHJlc3Npb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVsbC1UZXh0IFNlYXJjaCBpbiBDaGFuZ2UgYW5kIFdvcmtvcmRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNQ29uZGl0aW9uJ30gPSAnQ29uZGl0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01Xb3JrT3JkZXInfSA9ICdXb3Jrb3JkZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgY2hhbmdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIHdvcmtvcmRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIGFsbCB3b3Jrb3JkZXJzIGluIHRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgQ0FCcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBDaGFuZ2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IFdvcmtvcmRlcnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gWFhYIHNldHRpbmdzJ30gPSAnTm8gXCclc1wnIHNldHRpbmdzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BTQSAoUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5KSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGZpcnN0IGEgY2F0YWxvZyBjbGFzcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIGNoYW5nZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGUgd29ya29yZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZFRpbWUnfSA9ICdSZXF1ZXN0ZWQgVGltZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBDQUIgYXMgVGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDaGFuZ2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgYWdlbnQgZm9yIHRoZSB3b3Jrb3JkZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSB0aGUgd29ya29yZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIE92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgcGxhbm5lZCBlbmQgdGltZSBpcyBpbnZhbGlkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgcGxhbm5lZCBzdGFydCB0aW1lIGlzIGludmFsaWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBwbGFubmVkIHRpbWUgaXMgaW52YWxpZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHJlcXVlc3RlZCB0aW1lIGlzIGludmFsaWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6OldvcmtPcmRlckFjdHVhbEVuZFRpbWVSZWFjaGVkJ30gPSAnV29ya29yZGVyIChJRD0lcykgcmVhY2hlZCBhY3R1YWwgZW5kIHRpbWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6OldvcmtPcmRlckFjdHVhbEVuZFRpbWVSZWFjaGVkV2l0aFdvcmtPcmRlcklEJ30gPSAnV29ya29yZGVyIChJRD0lcykgcmVhY2hlZCBhY3R1YWwgZW5kIHRpbWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6OldvcmtPcmRlckFjdHVhbFN0YXJ0VGltZVJlYWNoZWQnfSA9ICdXb3Jrb3JkZXIgKElEPSVzKSByZWFjaGVkIGFjdHVhbCBzdGFydCB0aW1lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJIaXN0b3J5OjpXb3JrT3JkZXJBY3R1YWxTdGFydFRpbWVSZWFjaGVkV2l0aFdvcmtPcmRlcklEJ30gPSAnV29ya29yZGVyIChJRD0lcykgcmVhY2hlZCBhY3R1YWwgc3RhcnQgdGltZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6V29ya09yZGVyQWRkJ30gPSAnTmV3IFdvcmtvcmRlciAoSUQ9JXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6OldvcmtPcmRlckFkZFdpdGhXb3JrT3JkZXJJRCd9ID0gJ05ldyBXb3Jrb3JkZXIgKElEPSVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJIaXN0b3J5OjpXb3JrT3JkZXJBdHRhY2htZW50QWRkJ30gPSAnTmV3IEF0dGFjaG1lbnQgZm9yIFdvcmtPcmRlcjogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6V29ya09yZGVyQXR0YWNobWVudEFkZFdpdGhXb3JrT3JkZXJJRCd9ID0gJyhJRD0lcykgTmV3IEF0dGFjaG1lbnQgZm9yIFdvcmtPcmRlcjogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6V29ya09yZGVyQXR0YWNobWVudERlbGV0ZSd9ID0gJ0RlbGV0ZWQgQXR0YWNobWVudCBmcm9tIFdvcmtPcmRlcjogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6V29ya09yZGVyQXR0YWNobWVudERlbGV0ZVdpdGhXb3JrT3JkZXJJRCd9ID0gJyhJRD0lcykgRGVsZXRlZCBBdHRhY2htZW50IGZyb20gV29ya09yZGVyOiAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJIaXN0b3J5OjpXb3JrT3JkZXJSZXBvcnRBdHRhY2htZW50QWRkJ30gPSAnTmV3IFJlcG9ydCBBdHRhY2htZW50IGZvciBXb3JrT3JkZXI6ICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6OldvcmtPcmRlclJlcG9ydEF0dGFjaG1lbnRBZGRXaXRoV29ya09yZGVySUQnfSA9ICcoSUQ9JXMpIE5ldyBSZXBvcnQgQXR0YWNobWVudCBmb3IgV29ya09yZGVyOiAlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJIaXN0b3J5OjpXb3JrT3JkZXJSZXBvcnRBdHRhY2htZW50RGVsZXRlJ30gPSAnRGVsZXRlZCBSZXBvcnQgQXR0YWNobWVudCBmcm9tIFdvcmtPcmRlcjogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6V29ya09yZGVyUmVwb3J0QXR0YWNobWVudERlbGV0ZVdpdGhXb3JrT3JkZXJJRCd9ID0gJyhJRD0lcykgRGVsZXRlZCBSZXBvcnQgQXR0YWNobWVudCBmcm9tIFdvcmtPcmRlcjogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6V29ya09yZGVyRGVsZXRlJ30gPSAnV29ya29yZGVyIChJRD0lcykgZGVsZXRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJIaXN0b3J5OjpXb3JrT3JkZXJEZWxldGVXaXRoV29ya09yZGVySUQnfSA9ICdXb3Jrb3JkZXIgKElEPSVzKSBkZWxldGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6OldvcmtPcmRlckxpbmtBZGQnfSA9ICdMaW5rIHRvICVzIChJRD0lcykgYWRkZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6V29ya09yZGVyTGlua0FkZFdpdGhXb3JrT3JkZXJJRCd9ID0gJyhJRD0lcykgTGluayB0byAlcyAoSUQ9JXMpIGFkZGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6OldvcmtPcmRlckxpbmtEZWxldGUnfSA9ICdMaW5rIHRvICVzIChJRD0lcykgZGVsZXRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJIaXN0b3J5OjpXb3JrT3JkZXJMaW5rRGVsZXRlV2l0aFdvcmtPcmRlcklEJ30gPSAnKElEPSVzKSBMaW5rIHRvICVzIChJRD0lcykgZGVsZXRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJIaXN0b3J5OjpXb3JrT3JkZXJOb3RpZmljYXRpb25TZW50J30gPSAnTm90aWZpY2F0aW9uIHNlbnQgdG8gJXMgKEV2ZW50OiAlcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6V29ya09yZGVyTm90aWZpY2F0aW9uU2VudFdpdGhXb3JrT3JkZXJJRCd9ID0gJyhJRD0lcykgTm90aWZpY2F0aW9uIHNlbnQgdG8gJXMgKEV2ZW50OiAlcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6V29ya09yZGVyUGxhbm5lZEVuZFRpbWVSZWFjaGVkJ30gPSAnV29ya29yZGVyIChJRD0lcykgcmVhY2hlZCBwbGFubmVkIGVuZCB0aW1lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJIaXN0b3J5OjpXb3JrT3JkZXJQbGFubmVkRW5kVGltZVJlYWNoZWRXaXRoV29ya09yZGVySUQnfSA9ICdXb3Jrb3JkZXIgKElEPSVzKSByZWFjaGVkIHBsYW5uZWQgZW5kIHRpbWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6OldvcmtPcmRlclBsYW5uZWRTdGFydFRpbWVSZWFjaGVkJ30gPSAnV29ya29yZGVyIChJRD0lcykgcmVhY2hlZCBwbGFubmVkIHN0YXJ0IHRpbWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6OldvcmtPcmRlclBsYW5uZWRTdGFydFRpbWVSZWFjaGVkV2l0aFdvcmtPcmRlcklEJ30gPSAnV29ya29yZGVyIChJRD0lcykgcmVhY2hlZCBwbGFubmVkIHN0YXJ0IHRpbWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6OldvcmtPcmRlclVwZGF0ZSd9ID0gJyVzOiBOZXc6ICVzIDwtIE9sZDogJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6V29ya09yZGVyVXBkYXRlV2l0aFdvcmtPcmRlcklEJ30gPSAnKElEPSVzKSAlczogTmV3OiAlcyA8LSBPbGQ6ICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlck51bWJlcid9ID0gJ1dvcmtvcmRlciBOdW1iZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWNjZXB0ZWQnfSA9ICdBY2NlcHRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYXBwcm92YWwnfSA9ICdBcHByb3ZhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZlZCd9ID0gJ0FwcHJvdmVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JhY2tvdXQnfSA9ICdCYWNrb3V0IFBsYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmVnaW5zIHdpdGgnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2FuY2VsZWQnfSA9ICdDYW5jZWxlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjb250YWlucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjcmVhdGVkJ30gPSAnQ3JlYXRlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydkZWNpc2lvbid9ID0gJ0RlY2lzaW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2VuZHMgd2l0aCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydmYWlsZWQnfSA9ICdGYWlsZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW4gcHJvZ3Jlc3MnfSA9ICdJbiBQcm9ncmVzcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBhZnRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBiZWZvcmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZW1wdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZ3JlYXRlciB0aGFuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGxlc3MgdGhhbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBub3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbm90IGVtcHR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBjb250YWlucyd9ID0gJ2RvZXMgbm90IGNvbnRhaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGVuZGluZyBhcHByb3ZhbCd9ID0gJ1BlbmRpbmcgQXBwcm92YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGVuZGluZyBwaXInfSA9ICdQZW5kaW5nIFBJUic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwaXInfSA9ICdQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWFkeSd9ID0gJ1JlYWR5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlamVjdGVkJ30gPSAnUmVqZWN0ZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVxdWVzdGVkJ30gPSAnUmVxdWVzdGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JldHJhY3RlZCd9ID0gJ1JldHJhY3RlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc3VjY2Vzc2Z1bCd9ID0gJ1N1Y2Nlc3NmdWwnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNoYW5nZUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yeSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENhdGVnb3J5IDwtPiBJbXBhY3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VibWl0J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlTWFuYWdlbWVudCBOb3RpZmljYXRpb24gTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIHRvIG92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOb3RpZmljYXRpb24gUnVsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXZlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXR0cmlidXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjaXBpZW50cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2YWxpZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbnZhbGlkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Egbm90aWZpY2F0aW9uIHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFsaWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5jZWwnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTVN0YXRlTWFjaGluZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gU3RhdGUgTWFjaGluZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBjYXRhbG9nIGNsYXNzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGFsb2cgY2xhc3MgaXMgcmVxdWlyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IE5hbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb3ZlciBzdGF0ZSB0cmFuc2l0aW9ucyBmb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV4dCBzdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgYXR0YWNobWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBuZXcgc3RhdGUgdHJhbnNpdGlvbiBmb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhIHN0YXRlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGEgbmV4dCBzdGF0ZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBhIHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGUgc3RhdGUgdHJhbnNpdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydmcm9tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3RvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1llcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ0FCTWVtYmVyU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQWdlbnQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENoYW5nZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgQ2hhbmdlIFRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgZmllbGQgaXMgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgdHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHRpbWUgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlJ30gPSAnQ2hhbmdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rlc2NyaXB0aW9uJ30gPSAnRGVzY3JpcHRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVzdGlmaWNhdGlvbid9ID0gJ0p1c3RpZmljYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnknfSA9ICdDYXRlZ29yeSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnB1dCBpbnZhbGlkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHknfSA9ICdQcmlvcml0eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0ZWQgRGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGRhdGUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dGFjaG1lbnQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBDQUIgYXMgdGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuY2VsICYgY2xvc2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gdG8gaW52b2x2ZWQgcGVyc29ucyBzY3JlZW4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgTmFtZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgTmFtZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25zIGFuZCBBY3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmRpdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGNvbmRpdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBhIHZhbGlkIG5hbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgYSB2YWxpZCBuYW1lIGlzIG5lZWRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF0Y2hpbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW55IGV4cHJlc3Npb24gKE9SKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgZXhwcmVzc2lvbnMgKEFORCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwcmVzc2lvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdG9yJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhbHVlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEV4cHJlc3Npb25zIGZvdW5kLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGV4cHJlc3Npb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQWN0aW9ucyBmb3VuZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBhY3Rpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUVkaXQKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgQ29udGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGV0aW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgZGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHdvcmtvcmRlcid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbGVkIGhpc3RvcnkgaW5mb3JtYXRpb24gb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kaWZpZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2xkIFZhbHVlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBWYWx1ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VkIGJ5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludm9sdmVkIFBlcnNvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlTWFuYWdlcid9ID0gJ0NoYW5nZSBNYW5hZ2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgaW52YWxpZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlQnVpbGRlcid9ID0gJ0NoYW5nZSBCdWlsZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBBZHZpc29yeSBCb2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgVGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwbHkgVGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3VGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSB0aGlzIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdG8gQ0FCJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgVXNlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IENBQid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvZ2luJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHNlYXJjaCBvcHRpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlcyBwZXIgcGFnZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXR0aW5ncyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyVGl0bGUnfSA9ICdXb3Jrb3JkZXIgVGl0bGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlVGl0bGUnfSA9ICdDaGFuZ2UgVGl0bGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyQWdlbnQnfSA9ICdXb3Jrb3JkZXIgQWdlbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVycyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VTdGF0ZSd9ID0gJ0NoYW5nZSBTdGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJTdGF0ZSd9ID0gJ1dvcmtvcmRlciBTdGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJUeXBlJ30gPSAnV29ya29yZGVyIFR5cGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdGVkIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZFN0YXJ0VGltZSd9ID0gJ1BsYW5uZWQgU3RhcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZEVuZFRpbWUnfSA9ICdQbGFubmVkIEVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxTdGFydFRpbWUnfSA9ICdBY3R1YWwgU3RhcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsRW5kVGltZSd9ID0gJ0FjdHVhbCBFbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkYXRhIGZvdW5kLid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmtlZCBPYmplY3RzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyJ30gPSAnV29ya29yZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmtlZC1PYmplY3QnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIHRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBOZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIFRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgY2hhbmdlcyBpbiB0ZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYW5vdGhlciBhdHRyaWJ1dGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3V0cHV0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bGx0ZXh0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbW92ZSB0aGlzIGVudHJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbW92ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoZS5nLiAxMCo1MTU1IG9yIDEwNTY1OCopJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQkFnZW50J30gPSAnQ0FCIEFnZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuZy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCQ3VzdG9tZXInfSA9ICdDQUIgQ3VzdG9tZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdHJ1Y3Rpb24nfSA9ICdJbnN0cnVjdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnQnfSA9ICdSZXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIENhdGVnb3J5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJlZm9yZS9hZnRlciknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJldHdlZW4pJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FuZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gU2VhcmNoJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VTZWFyY2hSZXN1bHRQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlcnMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBhcyBUZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHRlbXBsYXRlIHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHRlbXBsYXRlIG5hbWUgaXMgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IFN0YXRlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgaW52YWxpZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWRFZmZvcnQnfSA9ICdQbGFubmVkIEVmZm9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY2NvdW50ZWRUaW1lJ30gPSAnQWNjb3VudGVkIFRpbWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEluaXRpYXRvcihzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgTWFuYWdlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQnVpbGRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgdGVtcGxhdGU/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZUVkaXQKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXInfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGVJRCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVCeSd9ID0gJ0NyZWF0ZWQgYnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlVGltZSd9ID0gJ0NyZWF0ZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlQnknfSA9ICdDaGFuZ2VkIGJ5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZVRpbWUnfSA9ICdDaGFuZ2VkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZTogJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUZW1wbGF0ZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVXNlclNlYXJjaAoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlciB0byd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgV29ya29yZGVyIFRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgd29ya29yZGVyIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBwbGFubmVkIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIHBsYW5uZWQgZW5kIHRpbWUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZm9ybWF0Lid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyQWdlbnQKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyB3b3Jrb3JkZXI/J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIFdvcmtvcmRlci4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgQ29uZGl0aW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIFdvcmtvcmRlciBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgQ29uZGl0aW9uKHMpJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJFZGl0CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckhpc3Rvcnlab29tCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyUmVwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWN0dWFsIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgdGltZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgc2V0LCB3aGVuIHRoZSBhY3R1YWwgZW5kIHRpbWUgaXMgc2V0ISd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGFrZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBBZ2VudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gdGFrZSB0aGlzIHdvcmtvcmRlcj8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIFdvcmtvcmRlciBhcyBUZW1wbGF0ZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBDdXN0b21lcklUU01DaGFuZ2VPdmVydmlldwoKICAgICMgVGVtcGxhdGU6IElUU01DaGFuZ2UKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBsaXN0IG9mIHRoZSBhZ2VudHMgd2hvIGhhdmUgcGVybWlzc2lvbiB0byB0YWtlIHdvcmtvcmRlcnMuIEtleSBpcyBhIGxvZ2luIG5hbWUuIENvbnRlbnQgaXMgMCBvciAxLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2Ygd29ya29yZGVyIHN0YXRlcywgYXQgd2hpY2ggdGhlIEFjdHVhbFN0YXJ0VGltZSBvZiBhIHdvcmtvcmRlciB3aWxsIGJlIHNldCBpZiBpdCB3YXMgZW1wdHkgYXQgdGhpcyBwb2ludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQUNMIG1vZHVsZSB0aGF0IGFsbG93cyBjbG9zaW5nIHBhcmVudCB0aWNrZXRzIG9ubHkgaWYgYWxsIGl0cyBjaGlsZHJlbiBhcmUgYWxyZWFkeSBjbG9zZWQgKCJTdGF0ZSIgc2hvd3Mgd2hpY2ggc3RhdGVzIGFyZSBub3QgYXZhaWxhYmxlIGZvciB0aGUgcGFyZW50IHRpY2tldCB1bnRpbCBhbGwgY2hpbGQgdGlja2V0cyBhcmUgY2xvc2VkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aXZhdGVzIFR5cGVBaGVhZCBmb3IgdGhlIGF1dG9jb21wbGV0ZSBmZWF0dXJlLCB0aGF0IGVuYWJsZXMgdXNlcnMgdG8gdHlwZSBpbiB3aGF0ZXZlciBzcGVlZCB0aGV5IGRlc2lyZSwgd2l0aG91dCBsb3NpbmcgYW55IGluZm9ybWF0aW9uLiBPZnRlbiB0aGlzIG1lYW5zIHRoYXQga2V5c3Ryb2tlcyBlbnRlcmVkIHdpbGwgbm90IGJlIGRpc3BsYXllZCBvbiB0aGUgc2NyZWVuIGltbWVkaWF0ZWx5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3RpdmF0ZXMgYSBibGlua2luZyBtZWNoYW5pc20gb2YgdGhlIHF1ZXVlIHRoYXQgY29udGFpbnMgdGhlIG9sZGVzdCB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGl2YXRlcyBsb3N0IHBhc3N3b3JkIGZlYXR1cmUgZm9yIGFnZW50cywgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aXZhdGVzIGxvc3QgcGFzc3dvcmQgZmVhdHVyZSBmb3IgY3VzdG9tZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3RpdmF0ZXMgc3VwcG9ydCBmb3IgY3VzdG9tZXIgZ3JvdXBzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3RpdmF0ZXMgdGhlIGFydGljbGUgZmlsdGVyIGluIHRoZSB6b29tIHZpZXcgdG8gc3BlY2lmeSB3aGljaCBhcnRpY2xlcyBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGl2YXRlcyB0aGUgYXZhaWxhYmxlIHRoZW1lcyBvbiB0aGUgc3lzdGVtLiBWYWx1ZSAxIG1lYW5zIGFjdGl2ZSwgMCBtZWFucyBpbmFjdGl2ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aXZhdGVzIHRoZSB0aWNrZXQgYXJjaGl2ZSBzeXN0ZW0gdG8gaGF2ZSBhIGZhc3RlciBzeXN0ZW0gYnkgbW92aW5nIHNvbWUgdGlja2V0cyBvdXQgb2YgdGhlIGRhaWx5IHNjb3BlLiBUbyBzZWFyY2ggZm9yIHRoZXNlIHRpY2tldHMsIHRoZSBhcmNoaXZlIGZsYWcgaGFzIHRvIGJlIGVuYWJsZWQgaW4gdGhlIHRpY2tldCBzZWFyY2guJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGl2YXRlcyB0aW1lIGFjY291bnRpbmcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkYXB0cyB0aGUgd2lkdGggb2YgdGhlIGF1dG9jb21wbGV0ZSBkcm9wIGRvd24gdG8gdGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBvcHRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIG5vdGUgdG8gdGhpcyB0aWNrZXQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHMgYSBzdWZmaXggd2l0aCB0aGUgYWN0dWFsIHllYXIgYW5kIG1vbnRoIHRvIHRoZSBPVFJTIGxvZyBmaWxlLiBBIGxvZ2ZpbGUgZm9yIGV2ZXJ5IG1vbnRoIHdpbGwgYmUgY3JlYXRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyBjdXN0b21lcnMgZW1haWwgYWRkcmVzc2VzIHRvIHJlY2lwaWVudHMgaW4gdGhlIHRpY2tldCBjb21wb3NlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBvbmUgdGltZSB2YWNhdGlvbiBkYXlzIGZvciB0aGUgY2FsZW5kYXIgbnVtYmVyIDEuIFBsZWFzZSB1c2Ugc2luZ2xlIGRpZ2l0IHBhdHRlcm4gZm9yIG51bWJlcnMgZnJvbSAxIHRvIDkgKGluc3RlYWQgb2YgMDEgLSAwOSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHMgdGhlIG9uZSB0aW1lIHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgMi4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgb25lIHRpbWUgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciAzLiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBvbmUgdGltZSB2YWNhdGlvbiBkYXlzIGZvciB0aGUgY2FsZW5kYXIgbnVtYmVyIDQuIFBsZWFzZSB1c2Ugc2luZ2xlIGRpZ2l0IHBhdHRlcm4gZm9yIG51bWJlcnMgZnJvbSAxIHRvIDkgKGluc3RlYWQgb2YgMDEgLSAwOSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHMgdGhlIG9uZSB0aW1lIHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgNS4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgb25lIHRpbWUgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciA2LiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBvbmUgdGltZSB2YWNhdGlvbiBkYXlzIGZvciB0aGUgY2FsZW5kYXIgbnVtYmVyIDcuIFBsZWFzZSB1c2Ugc2luZ2xlIGRpZ2l0IHBhdHRlcm4gZm9yIG51bWJlcnMgZnJvbSAxIHRvIDkgKGluc3RlYWQgb2YgMDEgLSAwOSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZHMgdGhlIG9uZSB0aW1lIHZhY2F0aW9uIGRheXMgZm9yIHRoZSBjYWxlbmRhciBudW1iZXIgOC4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkcyB0aGUgb25lIHRpbWUgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciA5LiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBvbmUgdGltZSB2YWNhdGlvbiBkYXlzLiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBwZXJtYW5lbnQgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciAxLiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBwZXJtYW5lbnQgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciAyLiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBwZXJtYW5lbnQgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciAzLiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBwZXJtYW5lbnQgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciA0LiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBwZXJtYW5lbnQgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciA1LiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBwZXJtYW5lbnQgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciA2LiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBwZXJtYW5lbnQgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciA3LiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBwZXJtYW5lbnQgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciA4LiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBwZXJtYW5lbnQgdmFjYXRpb24gZGF5cyBmb3IgdGhlIGNhbGVuZGFyIG51bWJlciA5LiBQbGVhc2UgdXNlIHNpbmdsZSBkaWdpdCBwYXR0ZXJuIGZvciBudW1iZXJzIGZyb20gMSB0byA5IChpbnN0ZWFkIG9mIDAxIC0gMDkpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGRzIHRoZSBwZXJtYW5lbnQgdmFjYXRpb24gZGF5cy4gUGxlYXNlIHVzZSBzaW5nbGUgZGlnaXQgcGF0dGVybiBmb3IgbnVtYmVycyBmcm9tIDEgdG8gOSAoaW5zdGVhZCBvZiAwMSAtIDA5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gTm90aWZpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIG5vdGlmaWNhdGlvbiBydWxlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gb2YgdGhlIENJUCBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIHRoZSBzdGF0ZSBtYWNoaW5lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBOb3RpZmljYXRpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBhcnRpY2xlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gY2hlY2sgUEdQLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2UgYXJ0aWNsZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIGNoZWNrIFMvTUlNRS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG1vZHVsZSB0byBhY2Nlc3MgZnVsbHRleHQgc2VhcmNoIHZpYSBuYXYgYmFyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2UgbW9kdWxlIHRvIGFjY2VzcyBzZWFyY2ggcHJvZmlsZXMgdmlhIG5hdiBiYXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBtb2R1bGUgdG8gY2hlY2sgaW5jb21pbmcgZW1haWxzIGluIHRoZSBUaWNrZXQtWm9vbS1WaWV3IGlmIHRoZSBTL01JTUUta2V5IGlzIGF2YWlsYWJsZSBhbmQgdHJ1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gY2hlY2sgdGhlIHVzZWQgY2hhcnNldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlIGFkdmlzb3J5IGJvYXJkcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlcyBtYW5hZ2VkIGJ5IHRoZSB1c2VyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiB0aWNrZXRzIGFuIGFnZW50IGlzIHJlc3BvbnNpYmxlIGZvci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2Ygd2F0Y2hlZCB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiB3b3JrIG9yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50cyA8LT4gR3JvdXBzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50cyA8LT4gUm9sZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWRkaW5nIG5vdGVzIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWRkaW5nIG5vdGVzIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWRkaW5nIG5vdGVzIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWRkaW5nIG5vdGVzIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBhZ2VudHMgdG8gZ2VuZXJhdGUgaW5kaXZpZHVhbC1yZWxhdGVkIHN0YXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgY2hvb3NpbmcgYmV0d2VlbiBzaG93aW5nIHRoZSBhdHRhY2htZW50cyBvZiBhIHRpY2tldCBpbiB0aGUgYnJvd3NlciAoaW5saW5lKSBvciBqdXN0IG1ha2UgdGhlbSBkb3dubG9hZGFibGUgKGF0dGFjaG1lbnQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgY2hvb3NpbmcgdGhlIG5leHQgY29tcG9zZSBzdGF0ZSBmb3IgY3VzdG9tZXIgdGlja2V0cyBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgY3VzdG9tZXJzIHRvIGNoYW5nZSB0aGUgdGlja2V0IHByaW9yaXR5IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBjdXN0b21lcnMgdG8gc2V0IHRoZSB0aWNrZXQgU0xBIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBjdXN0b21lcnMgdG8gc2V0IHRoZSB0aWNrZXQgcHJpb3JpdHkgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGN1c3RvbWVycyB0byBzZXQgdGhlIHRpY2tldCBxdWV1ZSBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBJZiB0aGlzIGlzIHNldCB0byBcJ05vXCcsIFF1ZXVlRGVmYXVsdCBzaG91bGQgYmUgY29uZmlndXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGN1c3RvbWVycyB0byBzZXQgdGhlIHRpY2tldCBzZXJ2aWNlIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBkZWZpbmluZyBuZXcgdHlwZXMgZm9yIHRpY2tldCAoaWYgdGlja2V0IHR5cGUgZmVhdHVyZSBpcyBlbmFibGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGRlZmluaW5nIHNlcnZpY2VzIGFuZCBTTEFzIGZvciB0aWNrZXRzIChlLiBnLiBlbWFpbCwgZGVza3RvcCwgbmV0d29yaywgLi4uKSwgYW5kIGVzY2FsYXRpb24gYXR0cmlidXRlcyBmb3IgU0xBcyAoaWYgdGlja2V0IHNlcnZpY2UvU0xBIGZlYXR1cmUgaXMgZW5hYmxlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBleHRlbmRlZCBzZWFyY2ggY29uZGl0aW9ucyBpbiB0aWNrZXQgc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFdpdGggdGhpcyBmZWF0dXJlIHlvdSBjYW4gc2VhcmNoIHcuIGcuIHdpdGggdGhpcyBraW5kIG9mIGNvbmRpdGlvbnMgbGlrZSAiKGtleTEmJmtleTIpIiBvciAiKGtleTF8fGtleTIpIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGV4dGVuZGVkIHNlYXJjaCBjb25kaXRpb25zIGluIHRpY2tldCBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gV2l0aCB0aGlzIGZlYXR1cmUgeW91IGNhbiBzZWFyY2ggdy4gZy4gd2l0aCB0aGlzIGtpbmQgb2YgY29uZGl0aW9ucyBsaWtlICIoa2V5MSYma2V5MikiIG9yICIoa2V5MXx8a2V5MikiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgaGF2aW5nIGEgbWVkaXVtIGZvcm1hdCB0aWNrZXQgb3ZlcnZpZXcgKEN1c3RvbWVySW5mbyA9PiAxIC0gc2hvd3MgYWxzbyB0aGUgY3VzdG9tZXIgaW5mb3JtYXRpb24pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgaGF2aW5nIGEgc21hbGwgZm9ybWF0IHRpY2tldCBvdmVydmlldyAoQ3VzdG9tZXJJbmZvID0+IDEgLSBzaG93cyBhbHNvIHRoZSBjdXN0b21lciBpbmZvcm1hdGlvbikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyB0aGUgYWRtaW5pc3RyYXRvcnMgdG8gbG9naW4gYXMgb3RoZXIgdXNlcnMsIHZpYSB0aGUgdXNlcnMgYWRtaW5pc3RyYXRpb24gcGFuZWwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyB0byBzZXQgYSBuZXcgdGlja2V0IHN0YXRlIGluIHRoZSBtb3ZlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSBlbWFpbCB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHBob25lIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IGNvbXBvc2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBtZXNzYWdlIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLiBOT1RFLiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IHRoZXNlIGZpZWxkcyBhbHNvIGluIHRoZSB0aWNrZXQgem9vbSBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLCB5b3UgaGF2ZSB0byBlbmFibGUgdGhlbSBpbiBDdXN0b21lclRpY2tldFpvb20jIyNBdHRyaWJ1dGVzVmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJ0aWNsZSBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHBob25lIG91dGJvdW5kIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcnRpY2xlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dGFjaG1lbnRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F0dGFjaG1lbnRzIDwtPiBSZXNwb25zZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXV0byBSZXNwb25zZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXV0byBSZXNwb25zZXMgPC0+IFF1ZXVlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdXRvbWF0ZWQgbGluZSBicmVhayBpbiB0ZXh0IG1lc3NhZ2VzIGFmdGVyIHggbnVtYmVyIG9mIGNoYXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdXRvbWF0aWNhbGx5IGxvY2sgYW5kIHNldCBvd25lciB0byBjdXJyZW50IEFnZW50IGFmdGVyIHNlbGVjdGluZyBmb3IgYW4gQnVsayBBY3Rpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1dG9tYXRpY2FsbHkgc2V0cyB0aGUgb3duZXIgb2YgYSB0aWNrZXQgYXMgdGhlIHJlc3BvbnNpYmxlIGZvciBpdCAoaWYgdGlja2V0IHJlc3BvbnNpYmxlIGZlYXR1cmUgaXMgZW5hYmxlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1dG9tYXRpY2FsbHkgc2V0cyB0aGUgcmVzcG9uc2libGUgb2YgYSB0aWNrZXQgKGlmIGl0IGlzIG5vdCBzZXQgeWV0KSBhZnRlciB0aGUgZmlyc3Qgb3duZXIgdXBkYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhbGFuY2VkIHdoaXRlIHNraW4gYnkgRmVsaXggTmlrbGFzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCbG9ja3MgYWxsIHRoZSBpbmNvbWluZyBlbWFpbHMgdGhhdCBkbyBub3QgaGF2ZSBhIHZhbGlkIHRpY2tldCBudW1iZXIgaW4gc3ViamVjdCB3aXRoIEZyb206IEBleGFtcGxlLmNvbSBhZGRyZXNzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCdWlsZHMgYW4gYXJ0aWNsZSBpbmRleCByaWdodCBhZnRlciB0aGUgYXJ0aWNsZVwncyBjcmVhdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ01EIGV4YW1wbGUgc2V0dXAuIElnbm9yZXMgZW1haWxzIHdoZXJlIGV4dGVybmFsIENNRCByZXR1cm5zIHNvbWUgb3V0cHV0IG9uIFNURE9VVCAoZW1haWwgd2lsbCBiZSBwaXBlZCBpbnRvIFNURElOIG9mIHNvbWUuYmluKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ1NWIFNlcGFyYXRvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSBjaGFuZ2UgYWRkIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgY2hhbmdlIGVkaXQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSBjaGFuZ2Ugc2VhcmNoIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgbGltaXQgcGVyIHBhZ2UgZm9yIENoYW5nZSBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBwYXNzd29yZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgcXVldWUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHRoZSB0aWNrZXQgY3VzdG9tZXIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSB0aGUgdGlja2V0IGZyZWUgZmllbGRzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgdGhlIHRpY2tldCBvd25lciEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHRoZSB0aWNrZXQgcHJpb3JpdHkhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSB0aGUgdGlja2V0IHJlc3BvbnNpYmxlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VzIHRoZSBvd25lciBvZiB0aWNrZXRzIHRvIGV2ZXJ5b25lICh1c2VmdWwgZm9yIEFTUCkuIE5vcm1hbGx5IG9ubHkgYWdlbnQgd2l0aCBydyBwZXJtaXNzaW9ucyBpbiB0aGUgcXVldWUgb2YgdGhlIHRpY2tldCB3aWxsIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVja3MgdGhlIFN5c3RlbUlEIGluIHRpY2tldCBudW1iZXIgZGV0ZWN0aW9uIGZvciBmb2xsb3ctdXBzICh1c2UgIk5vIiBpZiBTeXN0ZW1JRCBoYXMgYmVlbiBjaGFuZ2VkIGFmdGVyIHVzaW5nIHRoZSBzeXN0ZW0pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDbG9zZSB0aGlzIHRpY2tldCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCBmb3IgbmV3IGhpc3RvcnkgZW50cmllcyBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wYW5pZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcGFueSBUaWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyZSB5b3VyIG93biBsb2cgdGV4dCBmb3IgUEdQLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmVzIGEgZGVmYXVsdCBUaWNrZXRGcmVlRmllbGQgc2V0dGluZy4gIkNvdW50ZXIiIGRlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCB3aGljaCBzaG91bGQgYmUgdXNlZCwgIktleSIgaXMgdGhlIFRpY2tldEZyZWVLZXksICJWYWx1ZSIgaXMgdGhlIFRpY2tldEZyZWVUZXh0IGFuZCAiRXZlbnQiIGRlZmluZXMgdGhlIHRyaWdnZXIgZXZlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyZXMgYSBkZWZhdWx0IFRpY2tldEZyZWVGaWVsZCBzZXR0aW5nLiAiQ291bnRlciIgZGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIHdoaWNoIHNob3VsZCBiZSB1c2VkLCAiS2V5IiBpcyB0aGUgVGlja2V0RnJlZUtleSwgIlZhbHVlIiBpcyB0aGUgVGlja2V0RnJlZVRleHQgYW5kICJFdmVudCIgZGVmaW5lcyB0aGUgdHJpZ2dlciBldmVudC4gUGxlYXNlIGNoZWNrIHRoZSBkZXZlbG9wZXIgbWFudWFsIChodHRwOi8vZG9jLm90cnMub3JnLyksIGNoYXB0ZXIgIlRpY2tldCBFdmVudCBNb2R1bGUiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmVzIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCB3aGVuIHBsYW5uZWQgdGhlIHN0YXJ0IHRpbWUgb3Igb3RoZXIgdGltZSB2YWx1ZXMgaGF2ZSBiZWVuIHJlYWNoZWQvcGFzc2VkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmVzIHRoZSBmdWxsLXRleHQgaW5kZXguIEV4ZWN1dGUgImJpbi9vdHJzLlJlYnVpbGRGdWxsdGV4dEluZGV4LnBsIiBpbiBvcmRlciB0byBnZW5lcmF0ZSBhIG5ldyBpbmRleC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udHJvbHMgaWYgY3VzdG9tZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gc29ydCB0aGVpciB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb252ZXJ0cyBIVE1MIG1haWxzIGludG8gdGV4dCBtZXNzYWdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgU2VydmljZSBMZXZlbCBBZ3JlZW1lbnRzIChTTEFzKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgYWdlbnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBhdHRhY2htZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgY29tcGFuaWVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBjdXN0b21lcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIGV2ZW50IGJhc2VkIG5vdGlmaWNhdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIGdyb3Vwcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2Ugbm90aWZpY2F0aW9ucyB0aGF0IGFyZSBzZW50IHRvIGFnZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgcXVldWVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSByZXNwb25zZSB0ZW1wbGF0ZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHJlc3BvbnNlcyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IHNlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHJvbGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBzYWx1dGF0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2Ugc2VydmljZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHNpZ25hdHVyZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRpY2tldCBwcmlvcml0aWVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aWNrZXQgc3RhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aWNrZXQgdHlwZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBuZXcgVGlja2V0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBuZXcgZW1haWwgdGlja2V0IGFuZCBzZW5kIHRoaXMgb3V0IChvdXRib3VuZCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIG5ldyBwaG9uZSB0aWNrZXQgKGluYm91bmQpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbSB0ZXh0IGZvciB0aGUgcGFnZSBzaG93biB0byBjdXN0b21lcnMgdGhhdCBoYXZlIG5vIHRpY2tldHMgeWV0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lciBDb21wYW5pZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tZXIgaXRlbSAoaWNvbikgd2hpY2ggc2hvd3MgdGhlIG9wZW4gdGlja2V0cyBvZiB0aGlzIGN1c3RvbWVyIGFzIGluZm8gYmxvY2suJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbWVycyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lcnMgPC0+IEdyb3Vwcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXN0b21lcnMgPC0+IFNlcnZpY2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rhc2hib2FyZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRhIHVzZWQgdG8gZXhwb3J0IHRoZSBzZWFyY2ggcmVzdWx0IGluIENTViBmb3JtYXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlYnVncyB0aGUgdHJhbnNsYXRpb24gc2V0LiBJZiB0aGlzIGlzIHNldCB0byAiWWVzIiBhbGwgc3RyaW5ncyAodGV4dCkgd2l0aG91dCB0cmFuc2xhdGlvbnMgYXJlIHdyaXR0ZW4gdG8gU1RERVJSLiBUaGlzIGNhbiBiZSBoZWxwZnVsIHdoZW4geW91IGFyZSBjcmVhdGluZyBhIG5ldyB0cmFuc2xhdGlvbiBmaWxlLiBPdGhlcndpc2UsIHRoaXMgb3B0aW9uIHNob3VsZCByZW1haW4gc2V0IHRvICJObyIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgQUNMIHZhbHVlcyBmb3IgdGlja2V0IGFjdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgZGF0YSB0byB1c2Ugb24gYXR0cmlidXRlIGZvciB0aWNrZXQgc2VhcmNoIHNjcmVlbi4gRXhhbXBsZTogIlRpY2tldENyZWF0ZVRpbWVQb2ludEZvcm1hdD15ZWFyO1RpY2tldENyZWF0ZVRpbWVQb2ludFN0YXJ0PUxhc3Q7VGlja2V0Q3JlYXRlVGltZVBvaW50PTI7Ii4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBkYXRhIHRvIHVzZSBvbiBhdHRyaWJ1dGUgZm9yIHRpY2tldCBzZWFyY2ggc2NyZWVuLiBFeGFtcGxlOiAiVGlja2V0Q3JlYXRlVGltZVN0YXJ0WWVhcj0yMDEwO1RpY2tldENyZWF0ZVRpbWVTdGFydE1vbnRoPTEwO1RpY2tldENyZWF0ZVRpbWVTdGFydERheT00O1RpY2tldENyZWF0ZVRpbWVTdG9wWWVhcj0yMDEwO1RpY2tldENyZWF0ZVRpbWVTdG9wTW9udGg9MTE7VGlja2V0Q3JlYXRlVGltZVN0b3BEYXk9MzsiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGxvb3AgcHJvdGVjdGlvbiBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgcXVldWUgSUQgdXNlZCBieSB0aGUgc3lzdGVtIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2tpbiBmb3IgT1RSUyAzLjAgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNraW4gZm9yIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzcGVsbGluZyBkaWN0aW9uYXJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdGlja2V0IElEIHVzZWQgYnkgdGhlIHN5c3RlbSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHRpY2tldCBJRCB1c2VkIGJ5IHRoZSBzeXN0ZW0gaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB0eXBlIGZvciBhIHdvcmtvcmRlci4gVGhpcyBlbnRyeSBtdXN0IGV4aXN0IGluIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBcJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6VHlwZVwnLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgYSBmaWx0ZXIgZm9yIGh0bWwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYSBkZWZpbmVkIHN0cmluZy4gVGhlIGVsZW1lbnQgSW1hZ2UgYWxsb3dzIHR3byBpbnB1dCBraW5kcy4gQXQgb25jZSB0aGUgbmFtZSBvZiBhbiBpbWFnZSAoZS5nLiBmYXEucG5nKS4gSW4gdGhpcyBjYXNlIHRoZSBPVFJTIGltYWdlIHBhdGggd2lsbCBiZSB1c2VkLiBUaGUgc2Vjb25kIHBvc3NpYmxpdHkgaXMgdG8gaW5zZXJ0IHRoZSBsaW5rIHRvIHRoZSBpbWFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBzaWduYWxzIGZvciBlYWNoIHdvcmtvcmRlciBzdGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBzdGFydCBkYXkgb2YgdGhlIHdlZWsgZm9yIHRoZSBkYXRlIHBpY2tlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhIGN1c3RvbWVyIGl0ZW0sIHdoaWNoIGdlbmVyYXRlcyBhIExpbmtlZEluIGljb24gYXQgdGhlIGVuZCBvZiBhIGN1c3RvbWVyIGluZm8gYmxvY2suJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYSBjdXN0b21lciBpdGVtLCB3aGljaCBnZW5lcmF0ZXMgYSBYSU5HIGljb24gYXQgdGhlIGVuZCBvZiBhIGN1c3RvbWVyIGluZm8gYmxvY2suJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYSBjdXN0b21lciBpdGVtLCB3aGljaCBnZW5lcmF0ZXMgYSBnb29nbGUgaWNvbiBhdCB0aGUgZW5kIG9mIGEgY3VzdG9tZXIgaW5mbyBibG9jay4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhIGN1c3RvbWVyIGl0ZW0sIHdoaWNoIGdlbmVyYXRlcyBhIGdvb2dsZSBtYXBzIGljb24gYXQgdGhlIGVuZCBvZiBhIGN1c3RvbWVyIGluZm8gYmxvY2suJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYSBkZWZhdWx0IGxpc3Qgb2Ygd29yZHMsIHRoYXQgYXJlIGlnbm9yZWQgYnkgdGhlIHNwZWxsIGNoZWNrZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYSBmaWx0ZXIgZm9yIGh0bWwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgQ1ZFIG51bWJlcnMuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEF0IG9uY2UgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJsaXR5IGlzIHRvIGluc2VydCB0aGUgbGluayB0byB0aGUgaW1hZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYSBmaWx0ZXIgZm9yIGh0bWwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgTVNCdWxsZXRpbiBudW1iZXJzLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBBdCBvbmNlIHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2libGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGEgZmlsdGVyIGZvciBodG1sIG91dHB1dCB0byBhZGQgbGlua3MgYmVoaW5kIGEgZGVmaW5lZCBzdHJpbmcuIFRoZSBlbGVtZW50IEltYWdlIGFsbG93cyB0d28gaW5wdXQga2luZHMuIEF0IG9uY2UgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgKGUuZy4gZmFxLnBuZykuIEluIHRoaXMgY2FzZSB0aGUgT1RSUyBpbWFnZSBwYXRoIHdpbGwgYmUgdXNlZC4gVGhlIHNlY29uZCBwb3NzaWJsaXR5IGlzIHRvIGluc2VydCB0aGUgbGluayB0byB0aGUgaW1hZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYSBmaWx0ZXIgZm9yIGh0bWwgb3V0cHV0IHRvIGFkZCBsaW5rcyBiZWhpbmQgYnVndHJhcSBudW1iZXJzLiBUaGUgZWxlbWVudCBJbWFnZSBhbGxvd3MgdHdvIGlucHV0IGtpbmRzLiBBdCBvbmNlIHRoZSBuYW1lIG9mIGFuIGltYWdlIChlLmcuIGZhcS5wbmcpLiBJbiB0aGlzIGNhc2UgdGhlIE9UUlMgaW1hZ2UgcGF0aCB3aWxsIGJlIHVzZWQuIFRoZSBzZWNvbmQgcG9zc2libGl0eSBpcyB0byBpbnNlcnQgdGhlIGxpbmsgdG8gdGhlIGltYWdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGEgZmlsdGVyIHRvIHByb2Nlc3MgdGhlIHRleHQgaW4gdGhlIGFydGljbGVzLCBpbiBvcmRlciB0byBoaWdobGlnaHQgcHJlZGVmaW5lZCBrZXl3b3Jkcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGV4Y2x1ZGVzIHNvbWUgYWRkcmVzc2VzIGZyb20gdGhlIHN5bnRheCBjaGVjayAoaWYgIkNoZWNrRW1haWxBZGRyZXNzZXMiIGlzIHNldCB0byAiWWVzIikuIFBsZWFzZSBlbnRlciBhIHJlZ2V4IGluIHRoaXMgZmllbGQgZm9yIGVtYWlsIGFkZHJlc3NlcywgdGhhdCBhcmVuXCd0IHN5bnRhY3RpY2FsbHkgdmFsaWQsIGJ1dCBhcmUgbmVjZXNzYXJ5IGZvciB0aGUgc3lzdGVtIChpLmUuICJyb290QGxvY2FsaG9zdCIpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgZmlsdGVycyBhbGwgZW1haWwgYWRkcmVzc2VzIHRoYXQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhIHVzZWZ1bCBtb2R1bGUgdG8gbG9hZCBzcGVjaWZpYyB1c2VyIG9wdGlvbnMgb3IgdG8gZGlzcGxheSBuZXdzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFsbCB0aGUgWC1oZWFkZXJzIHRoYXQgc2hvdWxkIGJlIHNjYW5uZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYWxsIHRoZSBsYW5ndWFnZXMgdGhhdCBhcmUgYXZhaWxhYmxlIHRvIHRoZSBhcHBsaWNhdGlvbi4gVGhlIEtleS9Db250ZW50IHBhaXIgbGlua3MgdGhlIGZyb250LWVuZCBkaXNwbGF5IG5hbWUgdG8gdGhlIGFwcHJvcHJpYXRlIGxhbmd1YWdlIFBNIGZpbGUuIFRoZSAiS2V5IiB2YWx1ZSBzaG91bGQgYmUgdGhlIGJhc2UtbmFtZSBvZiB0aGUgUE0gZmlsZSAoaS5lLiBkZS5wbSBpcyB0aGUgZmlsZSwgdGhlbiBkZSBpcyB0aGUgIktleSIgdmFsdWUpLiBUaGUgIkNvbnRlbnQiIHZhbHVlIHNob3VsZCBiZSB0aGUgZGlzcGxheSBuYW1lIGZvciB0aGUgZnJvbnQtZW5kLiBTcGVjaWZ5IGFueSBvd24tZGVmaW5lZCBsYW5ndWFnZSBoZXJlIChzZWUgdGhlIGRldmVsb3BlciBkb2N1bWVudGF0aW9uIGh0dHA6Ly9kb2Mub3Rycy5vcmcvIGZvciBtb3JlIGluZm9tYXRpb24pLiBQbGVhc2UgcmVtZW1iZXIgdG8gdXNlIHRoZSBIVE1MIGVxdWl2YWxlbnRzIGZvciBub24tQVNDSUkgY2hhcmFjdGVycyAoaS5lLiBmb3IgdGhlIEdlcm1hbiBvZSA9IG8gdW1sYXV0LCBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlIHRoZSAmb3VtbDsgc3ltYm9sKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbGwgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBSZWZyZXNoVGltZSBvYmplY3QgaW4gdGhlIGN1c3RvbWVyIHByZWZlcmVuY2VzIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYWxsIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgU2hvd25UaWNrZXRzIG9iamVjdCBpbiB0aGUgY3VzdG9tZXIgcHJlZmVyZW5jZXMgb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbGwgdGhlIHBhcmFtZXRlcnMgZm9yIHRoaXMgaXRlbSBpbiB0aGUgY3VzdG9tZXIgcHJlZmVyZW5jZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYWxsIHRoZSBwb3NzaWJsZSBzdGF0cyBvdXRwdXQgZm9ybWF0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBhbHRlcm5hdGUgVVJMLCB3aGVyZSB0aGUgbG9naW4gbGluayByZWZlcnMgdG8uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gYWx0ZXJuYXRlIFVSTCwgd2hlcmUgdGhlIGxvZ291dCBsaW5rIHJlZmVycyB0by4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBhbHRlcm5hdGUgbG9naW4gVVJMIGZvciB0aGUgY3VzdG9tZXIgcGFuZWwuLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIGFsdGVybmF0ZSBsb2dvdXQgVVJMIGZvciB0aGUgY3VzdG9tZXIgcGFuZWwuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gZXh0ZXJuYWwgbGluayB0byB0aGUgZGF0YWJhc2Ugb2YgdGhlIGN1c3RvbWVyIChlLmcuIFwnaHR0cDovL3lvdXJob3N0L2N1c3RvbWVyLnBocD9DSUQ9JERhdGF7IkN1c3RvbWVySUQifVwnIG9yIFwnXCcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY2hhbmdlIGxpc3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSB0ZW1wbGF0ZSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGhvdyB0aGUgRnJvbSBmaWVsZCBmcm9tIHRoZSBlbWFpbHMgKHNlbnQgZnJvbSBhbnN3ZXJzIGFuZCBlbWFpbCB0aWNrZXRzKSBzaG91bGQgbG9vayBsaWtlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBib3VuY2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgY29tcG9zZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBmb3J3YXJkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBtZXJnZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCB0byBjaGFuZ2UgdGhlIGN1c3RvbWVyIG9mIGEgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBjb21wb3NlZCBtZXNzYWdlcyBoYXZlIHRvIGJlIHNwZWxsIGNoZWNrZWQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBhY2NvdW50ZWQgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBwbGFubmVkIGVmZm9ydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWNjb3VudGVkIHRpbWUgc2hvdWxkIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBzaG91bGQgYmUgc2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBjaGFuZ2Ugc3RhdGUgY2FuIGJlIHNldCBpbiBBZ2VudElUU01DaGFuZ2VFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBwbGFubmVkIGVmZm9ydCBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBwcmludCBieSBjdXN0b21lci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNlYXJjaGVkIGJ5IGN1c3RvbWVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2V0IGJ5IGN1c3RvbWVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2hvd24gYnkgY3VzdG9tZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciBzdGF0ZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciB0aXRsZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGltZSBhY2NvdW50aW5nIGlzIG1hbmRhdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRpbWUgYWNjb3VudGluZyBtdXN0IGJlIHNldCB0byBhbGwgdGlja2V0cyBpbiBidWxrIGFjdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBzaG93biBncmFwaCBhdHRyaWJ1dGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoYXQgb25seSBjaGFuZ2VzIGNvbnRhaW5pbmcgV29ya29yZGVycyBsaW5rZWQgd2l0aCBzZXJ2aWNlcywgd2hpY2ggdGhlIGN1c3RvbWVyIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gdXNlIHdpbGwgYmUgc2hvd24uIEFueSBvdGhlciBjaGFuZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgPWhIZWlnaHQgZm9yIHRoZSByaWNoIHRleHQgZWRpdG9yIGNvbXBvbmVudC4gRW50ZXIgbnVtYmVyIChwaXhlbHMpIG9yIHBlcmNlbnQgdmFsdWUgKHJlbGF0aXZlKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgSVAgcmVndWxhciBleHByZXNzaW9uIGZvciBhY2Nlc3NpbmcgdGhlIGxvY2FsIHJlcG9zaXRvcnkuIFlvdSBuZWVkIHRvIGVuYWJsZSB0aGlzIHRvIGhhdmUgYWNjZXNzIHRvIHlvdXIgbG9jYWwgcmVwb3NpdG9yeSBhbmQgdGhlIHBhY2thZ2U6OlJlcG9zaXRvcnlMaXN0IGlzIHJlcXVpcmVkIG9uIHRoZSByZW1vdGUgaG9zdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIENTUyBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgYmFzZSBwYXRoIG9mIGljb25zLCBDU1MgYW5kIEphdmEgU2NyaXB0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgaW1hZ2UgcGF0aCBvZiBpY29ucyBmb3IgbmF2aWdhdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIGphdmEgc2NyaXB0IHBhdGguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCByaWNoIHRleHQgZWRpdG9yIHBhdGguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGFkZHJlc3Mgb2YgYSBkZWRpY2F0ZWQgRE5TIHNlcnZlciwgaWYgbmVjZXNzYXJ5LCBmb3IgdGhlICJDaGVja01YUmVjb3JkIiBsb29rLXVwcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgYm9keSB0ZXh0IGZvciBub3RpZmljYXRpb24gbWFpbHMgc2VudCB0byBhZ2VudHMsIGFib3V0IG5ldyBwYXNzd29yZCAoYWZ0ZXIgdXNpbmcgdGhpcyBsaW5rIHRoZSBuZXcgcGFzc3dvcmQgd2lsbCBiZSBzZW50KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgYm9keSB0ZXh0IGZvciBub3RpZmljYXRpb24gbWFpbHMgc2VudCB0byBhZ2VudHMsIHdpdGggdG9rZW4gYWJvdXQgbmV3IHJlcXVlc3RlZCBwYXNzd29yZCAoYWZ0ZXIgdXNpbmcgdGhpcyBsaW5rIHRoZSBuZXcgcGFzc3dvcmQgd2lsbCBiZSBzZW50KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgYm9keSB0ZXh0IGZvciBub3RpZmljYXRpb24gbWFpbHMgc2VudCB0byBjdXN0b21lcnMsIGFib3V0IG5ldyBhY2NvdW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBib2R5IHRleHQgZm9yIG5vdGlmaWNhdGlvbiBtYWlscyBzZW50IHRvIGN1c3RvbWVycywgYWJvdXQgbmV3IHBhc3N3b3JkIChhZnRlciB1c2luZyB0aGlzIGxpbmsgdGhlIG5ldyBwYXNzd29yZCB3aWxsIGJlIHNlbnQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBib2R5IHRleHQgZm9yIG5vdGlmaWNhdGlvbiBtYWlscyBzZW50IHRvIGN1c3RvbWVycywgd2l0aCB0b2tlbiBhYm91dCBuZXcgcmVxdWVzdGVkIHBhc3N3b3JkIChhZnRlciB1c2luZyB0aGlzIGxpbmsgdGhlIG5ldyBwYXNzd29yZCB3aWxsIGJlIHNlbnQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBib2R5IHRleHQgZm9yIHJlamVjdGVkIGVtYWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgYm9sZG5lc3Mgb2YgdGhlIGxpbmUgZHJhd2VkIGJ5IHRoZSBncmFwaC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY29sb3JzIGZvciB0aGUgZ3JhcGhzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjb2x1bW4gdG8gc3RvcmUgdGhlIGtleXMgZm9yIHRoZSBwcmVmZXJlbmNlcyB0YWJsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY29uZmlnIHBhcmFtZXRlcnMgb2YgdGhpcyBpdGVtLCB0byBiZSBzaG93biBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY29uZmlnIHBhcmFtZXRlcnMgb2YgdGhpcyBpdGVtLCB0byBiZSBzaG93biBpbiB0aGUgcHJlZmVyZW5jZXMgdmlldy4gVGFrZSBjYXJlIHRvIG1haW50YWluIHRoZSBkaWN0aW9uYXJpZXMgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0gaW4gdGhlIGRhdGEgc2VjdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY29ubmVjdGlvbnMgZm9yIGh0dHAvZnRwLCB2aWEgYSBwcm94eS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGF0ZSBpbnB1dCBmb3JtYXQgdXNlZCBpbiBmb3JtcyAob3B0aW9uIG9yIGlucHV0IGZpZWxkcykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgQ1NTIHVzZWQgaW4gcmljaCB0ZXh0IGVkaXRvcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgYm9keSBvZiBhIG5vdGUgaW4gdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgZnJvbnQtZW5kIChIVE1MKSB0aGVtZSB0byBiZSB1c2VkIGJ5IHRoZSBhZ2VudHMgYW5kIGN1c3RvbWVycy4gVGhlIGRlZmF1bHQgdGhlbWVzIGFyZSBTdGFuZGFyZCBhbmQgTGl0ZS4gSWYgeW91IGxpa2UsIHlvdSBjYW4gYWRkIHlvdXIgb3duIHRoZW1lLiBQbGVhc2UgcmVmZXIgdGhlIGFkbWluaXN0cmF0b3IgbWFudWFsIGxvY2F0ZWQgYXQgaHR0cDovL2RvYy5vdHJzLm9yZy8uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgZnJvbnQtZW5kIGxhbmd1YWdlLiBBbGwgdGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgYXZhaWxhYmxlIGxhbmd1YWdlIGZpbGVzIG9uIHRoZSBzeXN0ZW0gKHNlZSB0aGUgbmV4dCBzZXR0aW5nKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBoaXN0b3J5IHR5cGUgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBYLWF4aXMgYXR0cmlidXRlcyBmb3IgdGhlIHRpbWUgc2NhbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbWF4aW11bSBudW1iZXIgb2Ygc2VhcmNoIHJlc3VsdHMgc2hvd24gb24gdGhlIG92ZXJ2aWV3IHBhZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBmb3IgYSB0aWNrZXQgYWZ0ZXIgY3VzdG9tZXIgZm9sbG93IHVwIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBiZWluZyBib3VuY2VkLCBpbiB0aGUgdGlja2V0IGJvdW5jZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGJlaW5nIGZvcndhcmRlZCwgaW4gdGhlIHRpY2tldCBmb3J3YXJkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgaWYgaXQgaXMgY29tcG9zZWQgLyBhbnN3ZXJlZCBpbiB0aGUgdGlja2V0IGNvbXBvc2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbm90ZSBib2R5IHRleHQgZm9yIHBob25lIHRpY2tldHMgaW4gdGhlIHRpY2tldCBwaG9uZSBvdXRib3VuZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBwcmlvcml0eSBvZiBmb2xsb3cgdXAgY3VzdG9tZXIgdGlja2V0cyBpbiB0aGUgdGlja2V0IHpvb20gc2NyZWVuIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgcHJpb3JpdHkgb2YgbmV3IGN1c3RvbWVyIHRpY2tldHMgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBwcmlvcml0eSBvZiBuZXcgdGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBxdWV1ZSBmb3IgbmV3IGN1c3RvbWVyIHRpY2tldHMgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gYXQgdGhlIGRyb3AgZG93biBtZW51IGZvciBkeW5hbWljIG9iamVjdHMgKEZvcm06IENvbW1vbiBTcGVjaWZpY2F0aW9uKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gYXQgdGhlIGRyb3AgZG93biBtZW51IGZvciBwZXJtaXNzaW9ucyAoRm9ybTogQ29tbW9uIFNwZWNpZmljYXRpb24pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBhdCB0aGUgZHJvcCBkb3duIG1lbnUgZm9yIHN0YXRzIGZvcm1hdCAoRm9ybTogQ29tbW9uIFNwZWNpZmljYXRpb24pLiBQbGVhc2UgaW5zZXJ0IHRoZSBmb3JtYXQga2V5IChzZWUgU3RhdHM6OkZvcm1hdCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMSBmb3IgYXJ0aWNsZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxIGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMSBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEwIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTAgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDExIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTEgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMiBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEyIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTIgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMyBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEzIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTMgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxNCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE0IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTQgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxNSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE1IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTUgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxNiBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE2IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTYgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxNyBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE3IGZvciB3b3Jrb3JkZXJzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTggZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxOCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE5IGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTkgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyIGZvciBhcnRpY2xlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDIgZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMiBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDIwIGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMjAgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyMSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDIxIGZvciB3b3Jrb3JkZXJzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMjIgZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyMiBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDIzIGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMjMgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyNCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDI0IGZvciB3b3Jrb3JkZXJzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMjUgZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyNSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDI2IGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMjYgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyNyBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDI3IGZvciB3b3Jrb3JkZXJzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMjggZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyOCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDI5IGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMjkgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzIGZvciBhcnRpY2xlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDMgZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzIGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMyBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDMwIGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMzAgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzMSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDMxIGZvciB3b3Jrb3JkZXJzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMzIgZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzMiBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDMzIGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMzMgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzNCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDM0IGZvciB3b3Jrb3JkZXJzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMzUgZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzNSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDM2IGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMzYgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzNyBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDM3IGZvciB3b3Jrb3JkZXJzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMzggZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzOCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDM5IGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMzkgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0IGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNCBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0MCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQwIGZvciB3b3Jrb3JkZXJzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNDEgZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0MSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQyIGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNDIgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0MyBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQzIGZvciB3b3Jrb3JkZXJzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNDQgZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0NCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQ1IGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNDUgZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0NiBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQ2IGZvciB3b3Jrb3JkZXJzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNDcgZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0NyBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQ4IGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNDggZm9yIHdvcmtvcmRlcnMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0OSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQ5IGZvciB3b3Jrb3JkZXJzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDUgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA1IGZvciB3b3Jrb3JkZXJzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNTAgZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA1MCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDYgZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA2IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNiBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDcgZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA3IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNyBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDggZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA4IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgOCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDkgZm9yIGNoYW5nZXMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA5IGZvciB0aWNrZXRzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgOSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxIGZvciBhcnRpY2xlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxIGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDEgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMCBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMSBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMiBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMiBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMiBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMyBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMyBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMyBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNCBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNSBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNiBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNiBmb3IgdGlja2V0cyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNiBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNyBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNyBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxOCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxOCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxOSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxOSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyIGZvciBhcnRpY2xlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyIGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDIgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMiBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyMCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyMCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyMSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyMSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyMiBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyMiBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyMyBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyMyBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyNCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyNCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyNSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyNSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyNiBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyNiBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyNyBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyNyBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyOCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyOCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyOSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyOSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzIGZvciBhcnRpY2xlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzIGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDMgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMyBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzMCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzMCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzMSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzMSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzMiBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzMiBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzMyBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzMyBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzNCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzNCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzNSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzNSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzNiBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzNiBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzNyBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzNyBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzOCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzOCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzOSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzOSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0IGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDQgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0MCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0MCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0MSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0MSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0MiBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0MiBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0MyBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0MyBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0NCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0NCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0NSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0NSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0NiBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0NiBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0NyBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0NyBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0OCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0OCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0OSBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0OSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA1IGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDUgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA1MCBmb3IgY2hhbmdlcyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA1MCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA2IGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDYgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNiBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA3IGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDcgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNyBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA4IGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDggZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgOCBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA5IGZvciBjaGFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIG9wdGlvbiBpcyBwcm92aWRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9mIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDkgZm9yIHRpY2tldHMgKGlmIG1vcmUgdGhhbiBvbmUgb3B0aW9uIGlzIHByb3ZpZGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgOSBmb3Igd29ya29yZGVycyAoaWYgbW9yZSB0aGFuIG9uZSBvcHRpb24gaXMgcHJvdmlkZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNlbmRlciB0eXBlIGZvciBwaG9uZSB0aWNrZXRzIGluIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc2VuZGVyIHR5cGUgZm9yIHRpY2tldHMgaW4gdGhlIHRpY2tldCB6b29tIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNob3duIHRpY2tldCBzZWFyY2ggYXR0cmlidXRlIGZvciB0aWNrZXQgc2VhcmNoIHNjcmVlbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGZvciBhbGwgcXVldWVzIGRpc3BsYXllZCBpbiB0aGUgcXVldWUgdmlldywgYWZ0ZXIgc29ydCBieSBwcmlvcml0eSBpcyBkb25lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBmb3IgYWxsIHF1ZXVlcyBpbiB0aGUgcXVldWUgdmlldywgYWZ0ZXIgcHJpb3JpdHkgc29ydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNwZWxsIGNoZWNrZXIgZGljdGlvbmFyeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdGF0ZSBvZiBuZXcgY3VzdG9tZXIgdGlja2V0cyBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN0YXRlIG9mIG5ldyB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIHBob25lIHRpY2tldHMgaW4gdGhlIHRpY2tldCBwaG9uZSBvdXRib3VuZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzdWJqZWN0IG9mIGEgbm90ZSBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgYXR0cmlidXRlIGZvciB0aWNrZXQgc29ydGluZyBpbiBhIHRpY2tldCBzZWFyY2ggb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgYXR0cmlidXRlIGZvciB0aWNrZXQgc29ydGluZyBpbiB0aGUgZXNjYWxhdGlvbiB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IGF0dHJpYnV0ZSBmb3IgdGlja2V0IHNvcnRpbmcgaW4gdGhlIGxvY2tlZCB0aWNrZXQgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBhdHRyaWJ1dGUgZm9yIHRpY2tldCBzb3J0aW5nIGluIHRoZSByZXNwb25zaWJsZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IGF0dHJpYnV0ZSBmb3IgdGlja2V0IHNvcnRpbmcgaW4gdGhlIHN0YXR1cyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IGF0dHJpYnV0ZSBmb3IgdGlja2V0IHNvcnRpbmcgaW4gdGhlIHdhdGNoIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgYXR0cmlidXRlIGZvciB0aWNrZXQgc29ydGluZyBvZiB0aGUgdGlja2V0IHNlYXJjaCByZXN1bHQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgYm91bmNlZCBub3RpZmljYXRpb24gZm9yIGN1c3RvbWVyL3NlbmRlciBpbiB0aGUgdGlja2V0IGJvdW5jZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgbmV4dCBzdGF0ZSBhZnRlciBhZGRpbmcgYSBwaG9uZSBub3RlIGluIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IG9yZGVyIChhZnRlciBwcmlvcml0eSBzb3J0KSBpbiB0aGUgZXNjYWxhdGlvbiB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBvcmRlciAoYWZ0ZXIgcHJpb3JpdHkgc29ydCkgaW4gdGhlIHN0YXR1cyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBvcmRlciBpbiB0aGUgcmVzcG9uc2libGUgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgb3JkZXIgaW4gdGhlIHRpY2tldCBsb2NrZWQgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgb3JkZXIgaW4gdGhlIHRpY2tldCBzZWFyY2ggcmVzdWx0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBvcmRlciBpbiB0aGUgd2F0Y2ggdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBVcDogb2xkZXN0IG9uIHRvcC4gRG93bjogbGF0ZXN0IG9uIHRvcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgb3JkZXIgb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFVwOiBvbGRlc3Qgb24gdG9wLiBEb3duOiBsYXRlc3Qgb24gdG9wLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgcHJpb3JpdHkgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0eXBlIGZvciBhcnRpY2xlIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdHlwZSBvZiBmb3J3YXJkZWQgbWVzc2FnZSBpbiB0aGUgdGlja2V0IGZvcndhcmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdHlwZSBvZiB0aGUgbm90ZSBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHR5cGUgb2YgdGhlIG5vdGUgaW4gdGhlIHRpY2tldCBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHR5cGUgb2YgdGhlIG5vdGUgaW4gdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdHlwZSBvZiB0aGUgbm90ZSBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdHlwZSBvZiB0aGUgbm90ZSBpbiB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0eXBlIG9mIHRoZSBub3RlIGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdHlwZSBvZiB0aGUgbm90ZSBpbiB0aGUgdGlja2V0IHBob25lIG91dGJvdW5kIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHR5cGUgb2YgdGhlIG5vdGUgaW4gdGhlIHRpY2tldCBwcmlvcml0eSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdHlwZSBvZiB0aGUgbm90ZSBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHR5cGUgb2YgdGhlIG5vdGUgaW4gdGhlIHRpY2tldCB6b29tIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHVzZWQgRnJvbnRlbmQtTW9kdWxlIGlmIG5vIEFjdGlvbiBwYXJhbWV0ZXIgZ2l2ZW4gaW4gdGhlIHVybCBvbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHVzZWQgRnJvbnRlbmQtTW9kdWxlIGlmIG5vIEFjdGlvbiBwYXJhbWV0ZXIgZ2l2ZW4gaW4gdGhlIHVybCBvbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYWN0aW9uIHBhcmFtZXRlciBmb3IgdGhlIHB1YmxpYyBmcm9udGVuZC4gVGhlIGFjdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCBpbiB0aGUgc2NyaXB0cyBvZiB0aGUgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY2F0ZWdvcnkgb2YgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBpbXBhY3Qgb2YgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmlld2FibGUgc2VuZGVyIHR5cGVzIG9mIGEgdGlja2V0IChkZWZhdWx0OiBjdXN0b21lcikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRpZmZlcmVuY2UgZnJvbSBub3cgKGluIHNlY29uZHMpIG9mIHRoZSBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDFcJ3MgZGVmYXVsdCB2YWx1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGlmZmVyZW5jZSBmcm9tIG5vdyAoaW4gc2Vjb25kcykgb2YgdGhlIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgMlwncyBkZWZhdWx0IHZhbHVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkaWZmZXJlbmNlIGZyb20gbm93IChpbiBzZWNvbmRzKSBvZiB0aGUgZnJlZSB0aW1lIGZpZWxkIG51bWJlciAzXCdzIGRlZmF1bHQgdmFsdWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRpZmZlcmVuY2UgZnJvbSBub3cgKGluIHNlY29uZHMpIG9mIHRoZSBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDRcJ3MgZGVmYXVsdCB2YWx1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGlmZmVyZW5jZSBmcm9tIG5vdyAoaW4gc2Vjb25kcykgb2YgdGhlIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgNVwncyBkZWZhdWx0IHZhbHVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkaWZmZXJlbmNlIGZyb20gbm93IChpbiBzZWNvbmRzKSBvZiB0aGUgZnJlZSB0aW1lIGZpZWxkIG51bWJlciA2XCdzIGRlZmF1bHQgdmFsdWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3IgY2hhbmdlIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3Igd29ya29yZGVyIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpbHRlciB0aGF0IHByb2Nlc3NlcyB0aGUgdGV4dCBpbiB0aGUgYXJ0aWNsZXMsIGluIG9yZGVyIHRvIGhpZ2hsaWdodCBVUkxzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmb3JtYXQgb2YgcmVzcG9uc2VzIGluIHRoZSB0aWNrZXQgY29tcG9zZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoJFFEYXRheyJPcmlnRnJvbSJ9IGlzIEZyb20gMToxLCAkUURhdGF7Ik9yaWdGcm9tTmFtZSJ9IGlzIG9ubHkgcmVhbG5hbWUgb2YgRnJvbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxIGZvciBhcnRpY2xlcyB0byBhZGQgYSBuZXcgYXJ0aWNsZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxIGZvciBjaGFuZ2VzIHRvIGFkZCBhIG5ldyBjaGFuZ2UgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMCBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEwIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTAgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMSBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDExIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTEgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMiBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEyIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTIgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMyBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEzIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTMgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxNCBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE0IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTQgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxNSBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE1IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTUgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxNiBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE2IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTYgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxNyBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE3IGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTggZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxOCBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE5IGZvciBjaGFuZ2VzIHRvIGFkZCBhIG5ldyBjaGFuZ2UgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTkgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyIGZvciBhcnRpY2xlcyB0byBhZGQgYSBuZXcgYXJ0aWNsZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyIGZvciBjaGFuZ2VzIHRvIGFkZCBhIG5ldyBjaGFuZ2UgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMiBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDIgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyMCBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDIwIGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMjEgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyMSBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDIyIGZvciBjaGFuZ2VzIHRvIGFkZCBhIG5ldyBjaGFuZ2UgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMjIgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyMyBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDIzIGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMjQgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyNCBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDI1IGZvciBjaGFuZ2VzIHRvIGFkZCBhIG5ldyBjaGFuZ2UgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMjUgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyNiBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDI2IGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMjcgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyNyBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDI4IGZvciBjaGFuZ2VzIHRvIGFkZCBhIG5ldyBjaGFuZ2UgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMjggZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyOSBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDI5IGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMyBmb3IgYXJ0aWNsZXMgdG8gYWRkIGEgbmV3IGFydGljbGUgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMyBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDMgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzIGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMzAgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzMCBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDMxIGZvciBjaGFuZ2VzIHRvIGFkZCBhIG5ldyBjaGFuZ2UgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMzEgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzMiBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDMyIGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMzMgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzMyBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDM0IGZvciBjaGFuZ2VzIHRvIGFkZCBhIG5ldyBjaGFuZ2UgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMzQgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzNSBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDM1IGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMzYgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzNiBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDM3IGZvciBjaGFuZ2VzIHRvIGFkZCBhIG5ldyBjaGFuZ2UgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMzcgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzOCBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDM4IGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMzkgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAzOSBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNCBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQwIGZvciBjaGFuZ2VzIHRvIGFkZCBhIG5ldyBjaGFuZ2UgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNDAgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0MSBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQxIGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNDIgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0MiBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQzIGZvciBjaGFuZ2VzIHRvIGFkZCBhIG5ldyBjaGFuZ2UgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNDMgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0NCBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQ0IGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNDUgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0NSBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQ2IGZvciBjaGFuZ2VzIHRvIGFkZCBhIG5ldyBjaGFuZ2UgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNDYgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0NyBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQ3IGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNDggZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA0OCBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQ5IGZvciBjaGFuZ2VzIHRvIGFkZCBhIG5ldyBjaGFuZ2UgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNDkgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA1IGZvciBjaGFuZ2VzIHRvIGFkZCBhIG5ldyBjaGFuZ2UgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDUgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA1MCBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDUwIGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNiBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDYgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA2IGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNyBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDcgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA3IGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgOCBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDggZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA4IGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgOSBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDkgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA5IGZvciB3b3Jrb3JkZXJzIHRvIGFkZCBhIG5ldyB3b3Jrb3JkZXIgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDEgZm9yIGFydGljbGVzIHRvIGFkZCBhIG5ldyBhcnRpY2xlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxIGZvciBjaGFuZ2VzIHRvIGFkZCBhIG5ldyBjaGFuZ2UgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDEgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMSBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMCBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMCBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMCBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMSBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMSBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMiBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMiBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMyBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMyBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxMyBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNCBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNCBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNCBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNSBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNSBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNiBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNiBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNiBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNyBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxNyBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxOCBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxOCBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxOSBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxOSBmb3Igd29ya29yZGVycyB0byBhZGQgYSBuZXcgd29ya29yZGVyIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyIGZvciBhcnRpY2xlcyB0byBhZGQgYSBuZXcgYXJ0aWNsZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMiBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDIgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjAgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjAgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjEgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjEgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjIgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjIgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjMgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjMgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjQgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjQgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjUgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjUgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjYgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjYgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjcgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjcgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjggZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjggZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjkgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjkgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMyBmb3IgYXJ0aWNsZXMgdG8gYWRkIGEgbmV3IGFydGljbGUgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDMgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMyBmb3IgdGlja2V0IHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDMgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzAgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzAgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzEgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzEgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzIgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzIgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzMgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzMgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzQgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzQgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzUgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzUgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzYgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzYgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzcgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzcgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzggZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzggZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzkgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzkgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNCBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDQgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDAgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDAgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDEgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDEgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDIgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDIgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDMgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDMgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDQgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDQgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDUgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDUgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDYgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDYgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDcgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDcgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDggZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDggZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDkgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDkgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNSBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA1IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDUgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNTAgZm9yIGNoYW5nZXMgdG8gYWRkIGEgbmV3IGNoYW5nZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNTAgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNiBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA2IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDYgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNyBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA3IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDcgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgOCBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA4IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDggZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgOSBmb3IgY2hhbmdlcyB0byBhZGQgYSBuZXcgY2hhbmdlIGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA5IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDkgZm9yIHdvcmtvcmRlcnMgdG8gYWRkIGEgbmV3IHdvcmtvcmRlciBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGltZSBrZXkgZmllbGQgbnVtYmVyIDEgZm9yIHRpY2tldHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGltZSBrZXkgZmllbGQgbnVtYmVyIDIgZm9yIHRpY2tldHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGltZSBrZXkgZmllbGQgbnVtYmVyIDMgZm9yIHRpY2tldHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGltZSBrZXkgZmllbGQgbnVtYmVyIDQgZm9yIHRpY2tldHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGltZSBrZXkgZmllbGQgbnVtYmVyIDUgZm9yIHRpY2tldHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUgdGltZSBrZXkgZmllbGQgbnVtYmVyIDYgZm9yIHRpY2tldHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSBvZiB0aGUgc3lzdGVtLiBUaGlzIHNldHRpbmcgaXMgdXNlZCBhcyBhIHZhcmlhYmxlLCBPVFJTX0NPTkZJR19GUUROIHdoaWNoIGlzIGZvdW5kIGluIGFsbCBmb3JtcyBvZiBtZXNzYWdpbmcgdXNlZCBieSB0aGUgYXBwbGljYXRpb24sIHRvIGJ1aWxkIGxpbmtzIHRvIHRoZSB0aWNrZXRzIHdpdGhpbiB5b3VyIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZ3JvdXBzIGV2ZXJ5IGN1c3RvbWVyIHVzZXIgd2lsbCBiZSBpbiAoaWYgQ3VzdG9tZXJHcm91cFN1cHBvcnQgaXMgZW5hYmxlZCBhbmQgeW91IGRvblwndCB3YW50IHRvIG1hbmFnZSBldmVyeSB1c2VyIGZvciB0aGVzZSBncm91cHMpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoZWlnaHQgb2YgdGhlIGxlZ2VuZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSBjb21tZW50IGZvciB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSBjb21tZW50IGZvciB0aGUgZW1haWwgdGlja2V0IHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSBjb21tZW50IGZvciB0aGUgcGhvbmUgdGlja2V0IHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSBjb21tZW50IGZvciB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IGNvbW1lbnQgZm9yIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBvd25lciBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSBjb21tZW50IGZvciB0aGUgdGlja2V0IHBob25lIG91dGJvdW5kIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSBjb21tZW50IGZvciB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSBjb21tZW50IGZvciB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSBjb21tZW50IGZvciB0aGUgdGlja2V0IHpvb20gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgdHlwZSBmb3IgdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgdHlwZSBmb3IgdGhlIGVtYWlsIHRpY2tldCBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgdHlwZSBmb3IgdGhlIHBob25lIHRpY2tldCBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgdHlwZSBmb3IgdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgdHlwZSBmb3IgdGhlIHRpY2tldCBwaG9uZSBvdXRib3VuZCBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgdHlwZSBmb3IgdGhlIHRpY2tldCBwcmlvcml0eSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgdHlwZSBmb3IgdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgdHlwZSBmb3IgdGhlIHRpY2tldCB6b29tIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBob3VycyBhbmQgd2VlayBkYXlzIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgMSwgdG8gY291bnQgdGhlIHdvcmtpbmcgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaG91cnMgYW5kIHdlZWsgZGF5cyBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDIsIHRvIGNvdW50IHRoZSB3b3JraW5nIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhvdXJzIGFuZCB3ZWVrIGRheXMgb2YgdGhlIGNhbGVuZGFyIG51bWJlciAzLCB0byBjb3VudCB0aGUgd29ya2luZyB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBob3VycyBhbmQgd2VlayBkYXlzIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgNCwgdG8gY291bnQgdGhlIHdvcmtpbmcgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaG91cnMgYW5kIHdlZWsgZGF5cyBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDUsIHRvIGNvdW50IHRoZSB3b3JraW5nIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhvdXJzIGFuZCB3ZWVrIGRheXMgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA2LCB0byBjb3VudCB0aGUgd29ya2luZyB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBob3VycyBhbmQgd2VlayBkYXlzIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgNywgdG8gY291bnQgdGhlIHdvcmtpbmcgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaG91cnMgYW5kIHdlZWsgZGF5cyBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDgsIHRvIGNvdW50IHRoZSB3b3JraW5nIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhvdXJzIGFuZCB3ZWVrIGRheXMgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA5LCB0byBjb3VudCB0aGUgd29ya2luZyB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBob3VycyBhbmQgd2VlayBkYXlzIHRvIGNvdW50IHRoZSB3b3JraW5nIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMSBmb3IgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaHR0cCBsaW5rIGZvciB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAxIGZvciB0aWNrZXRzIChpdCB3aWxsIGJlIHVzZWQgaW4gZXZlcnkgdGlja2V0IHZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBodHRwIGxpbmsgZm9yIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDEgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTAgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTAgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTAgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTEgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTEgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTEgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTIgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTIgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTIgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTMgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTMgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTMgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTQgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTQgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTQgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTUgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTUgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTUgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTYgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTYgZm9yIHRpY2tldHMgKGl0IHdpbGwgYmUgdXNlZCBpbiBldmVyeSB0aWNrZXQgdmlldykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTYgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTcgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTcgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTggZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTggZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTkgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMTkgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMiBmb3IgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaHR0cCBsaW5rIGZvciB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAyIGZvciB0aWNrZXRzIChpdCB3aWxsIGJlIHVzZWQgaW4gZXZlcnkgdGlja2V0IHZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBodHRwIGxpbmsgZm9yIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDIgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjAgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjAgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjEgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjEgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjIgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjIgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjMgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjMgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjQgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjQgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjUgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjUgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjYgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjYgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjcgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjcgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjggZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjggZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjkgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMjkgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMyBmb3IgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaHR0cCBsaW5rIGZvciB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciAzIGZvciB0aWNrZXRzIChpdCB3aWxsIGJlIHVzZWQgaW4gZXZlcnkgdGlja2V0IHZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBodHRwIGxpbmsgZm9yIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDMgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzAgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzAgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzEgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzEgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzIgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzIgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzMgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzMgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzQgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzQgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzUgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzUgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzYgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzYgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzcgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzcgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzggZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzggZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzkgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgMzkgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNCBmb3IgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaHR0cCBsaW5rIGZvciB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA0IGZvciB0aWNrZXRzIChpdCB3aWxsIGJlIHVzZWQgaW4gZXZlcnkgdGlja2V0IHZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBodHRwIGxpbmsgZm9yIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDQgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDAgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDAgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDEgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDEgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDIgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDIgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDMgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDMgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDQgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDQgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDUgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDUgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDYgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDYgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDcgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDcgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDggZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDggZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDkgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNDkgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNSBmb3IgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaHR0cCBsaW5rIGZvciB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA1IGZvciB0aWNrZXRzIChpdCB3aWxsIGJlIHVzZWQgaW4gZXZlcnkgdGlja2V0IHZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBodHRwIGxpbmsgZm9yIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDUgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNTAgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNTAgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNiBmb3IgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaHR0cCBsaW5rIGZvciB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA2IGZvciB0aWNrZXRzIChpdCB3aWxsIGJlIHVzZWQgaW4gZXZlcnkgdGlja2V0IHZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBodHRwIGxpbmsgZm9yIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDYgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgNyBmb3IgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaHR0cCBsaW5rIGZvciB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA3IGZvciB0aWNrZXRzIChpdCB3aWxsIGJlIHVzZWQgaW4gZXZlcnkgdGlja2V0IHZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBodHRwIGxpbmsgZm9yIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDcgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgOCBmb3IgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaHR0cCBsaW5rIGZvciB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA4IGZvciB0aWNrZXRzIChpdCB3aWxsIGJlIHVzZWQgaW4gZXZlcnkgdGlja2V0IHZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBodHRwIGxpbmsgZm9yIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDggZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGh0dHAgbGluayBmb3IgdGhlIGZyZWUgdGV4dCBmaWVsZCBudW1iZXIgOSBmb3IgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaHR0cCBsaW5rIGZvciB0aGUgZnJlZSB0ZXh0IGZpZWxkIG51bWJlciA5IGZvciB0aWNrZXRzIChpdCB3aWxsIGJlIHVzZWQgaW4gZXZlcnkgdGlja2V0IHZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBodHRwIGxpbmsgZm9yIHRoZSBmcmVlIHRleHQgZmllbGQgbnVtYmVyIDkgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGtleSB0byBiZSBjaGVja2VkIHdpdGggS2VybmVsOjpNb2R1bGVzOjpBZ2VudEluZm8gbW9kdWxlLiBJZiB0aGlzIHVzZXIgcHJlZmVyZW5jZXMga2V5IGlzIHRydWUsIHRoZSBtZXNzYWdlIGlzIGFjY2VwdGVkIGJ5IHRoZSBzeXN0ZW0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGtleSB0byBjaGVjayB3aXRoIEN1c3RvbWVyQWNjZXB0LiBJZiB0aGlzIHVzZXIgcHJlZmVyZW5jZXMga2V5IGlzIHRydWUsIHRoZW4gdGhlIG1lc3NhZ2UgaXMgYWNjZXB0ZWQgYnkgdGhlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbGluayB0eXBlIFwnTm9ybWFsXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmU7IG90aGVyd2lzZSwgdGhlIHJlc3VsdCBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1BhcmVudENoaWxkXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmU7IG90aGVyd2lzZSwgdGhlIHJlc3VsdCBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGxpbmsgdHlwZSBncm91cHMuIFRoZSBsaW5rIHR5cGVzIG9mIHRoZSBzYW1lIGdyb3VwIGNhbmNlbCBvbmUgYW5vdGhlci4gRXhhbXBsZTogSWYgdGlja2V0IEEgaXMgbGlua2VkIHBlciBhIFwnTm9ybWFsXCcgbGluayB3aXRoIHRpY2tldCBCLCB0aGVuIHRoZXNlIHRpY2tldHMgY291bGQgbm90IGJlIGFkZGl0aW9uYWxseSBsaW5rZWQgd2l0aCBsaW5rIG9mIGEgXCdQYXJlbnRDaGlsZFwnIHJlbGF0aW9uc2hpcC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbGlzdCBvZiBvbmxpbmUgcmVwb3NpdG9yaWVzLiBBbm90aGVyIGluc3RhbGxhdGlvbnMgY2FuIGJlIHVzZWQgYXMgcmVwb3NpdG9yeSwgZm9yIGV4YW1wbGU6IEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290cnMvcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5O0ZpbGU9IiBhbmQgQ29udGVudD0iU29tZSBOYW1lIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbG9jYXRpb24gdG8gZ2V0IG9ubGluZSByZXBvc2l0b3J5IGxpc3QgZm9yIGFkZGl0aW9uYWwgcGFja2FnZXMuIFRoZSBmaXJzdCBhdmFpbGFibGUgcmVzdWx0IHdpbGwgYmUgdXNlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbG9nIG1vZHVsZSBmb3IgdGhlIHN5c3RlbS4gIkZpbGUiIHdyaXRlcyBhbGwgbWVzc2FnZXMgaW4gYSBnaXZlbiBsb2dmaWxlLCAiU3lzTG9nIiB1c2VzIHRoZSBzeXNsb2cgZGFlbW9uIG9mIHRoZSBzeXN0ZW0sIGUuZy4gc3lzbG9nZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbWF4aW1hbCBzaXplIChpbiBieXRlcykgZm9yIGZpbGUgdXBsb2FkcyB2aWEgdGhlIGJyb3dzZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG1heGltYWwgdmFsaWQgdGltZSAoaW4gc2Vjb25kcykgZm9yIGEgc2Vzc2lvbiBpZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhbmdlIGZyZWV0ZXh0IGZpZWxkcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMgcGVyIFBERiBmaWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3Jrb3JkZXIgZnJlZXRleHQgZmllbGRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtYXhpbXVtIHNpemUgKGluIE1CKSBvZiB0aGUgbG9nIGZpbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG1vZHVsZSB0aGF0IHNob3dzIGFsbCB0aGUgY3VycmVudGx5IGxvZ2VkIGluIGN1c3RvbWVycyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtb2R1bGUgdGhhdCBzaG93cyBhbGwgdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gYWdlbnRzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG1vZHVsZSB0aGF0IHNob3dzIHRoZSBjdXJyZW50bHkgbG9nZWQgaW4gYWdlbnRzIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG1vZHVsZSB0aGF0IHNob3dzIHRoZSBjdXJyZW50bHkgbG9nZWQgaW4gY3VzdG9tZXJzIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG1vZHVsZSB0byBhdXRoZW50aWNhdGUgY3VzdG9tZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtb2R1bGUgdG8gZGlzcGxheSBhIG5vdGlmaWNhdGlvbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLCBpZiB0aGUgc3lzdGVtIGlzIHVzZWQgYnkgdGhlIGFkbWluIHVzZXIgKG5vcm1hbGx5IHlvdSBzaG91bGRuXCd0IHdvcmsgYXMgYWRtaW4pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtb2R1bGUgdG8gZ2VuZXJhdGUgaHRtbCByZWZyZXNoIGhlYWRlcnMgb2YgaHRtbCBzaXRlcywgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgcmVmcmVzaCBoZWFkZXJzIG9mIGh0bWwgc2l0ZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG1vZHVsZSB0byBzZW5kIGVtYWlscy4gIlNlbmRtYWlsIiBkaXJlY3RseSB1c2VzIHRoZSBzZW5kbWFpbCBiaW5hcnkgb2YgeW91ciBvcGVyYXRpbmcgc3lzdGVtLiBBbnkgb2YgdGhlICJTTVRQIiBtZWNoYW5pc21zIHVzZSBhIHNwZWNpZmllZCAoZXh0ZXJuYWwpIG1haWxzZXJ2ZXIuICJEb05vdFNlbmRFbWFpbCIgZG9lc25cJ3Qgc2VuZCBlbWFpbHMgYW5kIGl0IGlzIHVzZWZ1bCBmb3IgdGVzdCBzeXN0ZW1zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBtb2R1bGUgdXNlZCB0byBzdG9yZSB0aGUgc2Vzc2lvbiBkYXRhLiBXaXRoICJEQiIgdGhlIGZyb250ZW5kIHNlcnZlciBjYW4gYmUgc3BsaXR0ZWQgZnJvbSB0aGUgZGIgc2VydmVyLiAiRlMiIGlzIGZhc3Rlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24sIHNob3duIGluIHRoZSB3ZWIgaW50ZXJmYWNlLCB0YWJzIGFuZCB0aXRsZSBiYXIgb2YgdGhlIHdlYiBicm93c2VyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgMS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciAzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgNC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA2Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgNy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjb2x1bW4gdG8gc3RvcmUgdGhlIGRhdGEgaW4gdGhlIHByZWZlcmVuY2VzIHRhYmxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBjb2x1bW4gdG8gc3RvcmUgdGhlIHVzZXIgaWRlbnRpZmllciBpbiB0aGUgcHJlZmVyZW5jZXMgdGFibGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5hbWUgb2YgdGhlIGtleSBmb3IgY3VzdG9tZXIgc2Vzc2lvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5hbWUgb2YgdGhlIHNlc3Npb24ga2V5LiBFLmcuIFNlc3Npb24sIFNlc3Npb25JRCBvciBPVFJTLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSB0YWJsZSwgd2hlcmUgdGhlIGN1c3RvbWVyIHByZWZlcmVuY2VzIGFyZSBzdG9yZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5leHQgcG9zc2libGUgc3RhdGVzIGFmdGVyIGNvbXBvc2luZyAvIGFuc3dlcmluZyBhIHRpY2tldCBpbiB0aGUgdGlja2V0IGNvbXBvc2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5leHQgcG9zc2libGUgc3RhdGVzIGFmdGVyIGZvcndhcmRpbmcgYSB0aWNrZXQgaW4gdGhlIHRpY2tldCBmb3J3YXJkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHBvc3NpYmxlIHN0YXRlcyBmb3IgY3VzdG9tZXIgdGlja2V0cyBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYmVpbmcgYm91bmNlZCwgaW4gdGhlIHRpY2tldCBib3VuY2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYmVpbmcgbW92ZWQgdG8gYW5vdGhlciBxdWV1ZSwgaW4gdGhlIG1vdmUgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvYmplY3QgYXR0cmlidXRlcyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciBjaGFuZ2Ugb2JqZWN0cyBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvYmplY3QgYXR0cmlidXRlcyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB3b3Jrb3JkZXIgb2JqZWN0cyBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY2NvdW50ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbEVuZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsU3RhcnRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENhdGVnb3J5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlQnVpbGRlcklEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZUZyZWVLZXkgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlRnJlZVRleHQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlTWFuYWdlcklEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZVN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgSW1wYWN0SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZEVmZm9ydCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkU3RhcnRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFByaW9yaXR5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUmVxdWVzdGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJBZ2VudElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlckZyZWVLZXkgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyRnJlZVRleHQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyTnVtYmVyIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVHlwZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjdXN0b21lciBwcmVmZXJlbmNlcyB0YWJsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kLiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBpbmRpY2F0ZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVEwiIGluZGljYXRlcyB0aGUgY2FjaGUgZXhwaXJhdGlvbiBwZXJpb2QgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kLiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBpbmRpY2F0ZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgZGVmaW5lcyB0aGUgY2FjaGUgZXhwaXJhdGlvbiBwZXJpb2QgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kLiAiTGltaXQiIGRlZmluZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGRpc3BsYXllZCBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBpbmRpY2F0ZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVEwiIGluZGljYXRlcyB0aGUgY2FjaGUgZXhwaXJhdGlvbiBwZXJpb2QgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kLiAiTGltaXQiIGRlZmluZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGRpc3BsYXllZCBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBpbmRpY2F0ZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgZGVmaW5lcyB0aGUgY2FjaGUgZXhwaXJhdGlvbiBwZXJpb2QgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGFzc3dvcmQgdG8gYWNjZXNzIHRoZSBTT0FQIGhhbmRsZSAoYmluL2NnaS1iaW4vcnBjLnBsKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGF0aCBhbmQgVFRGLUZpbGUgdG8gaGFuZGxlIGJvbGQgaXRhbGljIG1vbm9zcGFjZWQgZm9udCBpbiBQREYgZG9jdW1lbnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXRoIGFuZCBUVEYtRmlsZSB0byBoYW5kbGUgYm9sZCBpdGFsaWMgcHJvcG9ydGlvbmFsIGZvbnQgaW4gUERGIGRvY3VtZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGF0aCBhbmQgVFRGLUZpbGUgdG8gaGFuZGxlIGJvbGQgbW9ub3NwYWNlZCBmb250IGluIFBERiBkb2N1bWVudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhdGggYW5kIFRURi1GaWxlIHRvIGhhbmRsZSBib2xkIHByb3BvcnRpb25hbCBmb250IGluIFBERiBkb2N1bWVudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhdGggYW5kIFRURi1GaWxlIHRvIGhhbmRsZSBpdGFsaWMgbW9ub3NwYWNlZCBmb250IGluIFBERiBkb2N1bWVudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBhdGggYW5kIFRURi1GaWxlIHRvIGhhbmRsZSBpdGFsaWMgcHJvcG9ydGlvbmFsIGZvbnQgaW4gUERGIGRvY3VtZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGF0aCBhbmQgVFRGLUZpbGUgdG8gaGFuZGxlIG1vbm9zcGFjZWQgZm9udCBpbiBQREYgZG9jdW1lbnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXRoIGFuZCBUVEYtRmlsZSB0byBoYW5kbGUgcHJvcG9ydGlvbmFsIGZvbnQgaW4gUERGIGRvY3VtZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGF0aCBvZiB0aGUgc2hvd24gaW5mbyBmaWxlLCB0aGF0IGlzIGxvY2F0ZWQgdW5kZXIgS2VybmVsL091dHB1dC9IVE1ML1N0YW5kYXJkL0N1c3RvbWVyQWNjZXB0LmR0bC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGF0aCB0byBQR1AgYmluYXJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwYXRoIHRvIG9wZW4gc3NsIGJpbmFyeS4gSXQgbWF5IG5lZWQgYSBIT01FIGVudiAoJEVOVntIT01FfSA9IFwnL3Zhci9saWIvd3d3cnVuXCc7KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGVyaW9kIChpbiB5ZWFycyksIGluIHdoaWNoIHN0YXJ0IGFuZCBlbmQgdGltZXMgY2FuIGJlIHNlbGVjdGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGxlZ2VuZC4gVGhpcyBzaG91bGQgYmUgYSB0d28gbGV0dGVyIGtleSBvZiB0aGUgZm9ybTogXCdCW0xDUl18UltUQ0JdXCcuIFRoZSBmaXJzdCBsZXR0ZXIgaW5kaWNhdGVzIHRoZSBwbGFjZW1lbnQgKEJvdHRvbSBvciBSaWdodCksIGFuZCB0aGUgc2Vjb25kIGxldHRlciB0aGUgYWxpZ25tZW50IChMZWZ0LCBSaWdodCwgQ2VudGVyLCBUb3AsIG9yIEJvdHRvbSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBvc3RtYXN0ZXIgZGVmYXVsdCBxdWV1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcmVjZWlwZW50IHRhcmdldCBvZiB0aGUgcGhvbmUgdGlja2V0IGFuZCB0aGUgc2VuZGVyIG9mIHRoZSBlbWFpbCB0aWNrZXQgKCJRdWV1ZSIgc2hvd3MgYWxsIHF1ZXVlcywgIlN5c3RlbUFkZHJlc3MiIGRpc3BsYXlzIGFsbCBzeXN0ZW0gYWRkcmVzc2VzKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSByZWNlaXBlbnQgdGFyZ2V0IG9mIHRoZSB0aWNrZXRzICgiUXVldWUiIHNob3dzIGFsbCBxdWV1ZXMsICJTeXN0ZW1BZGRyZXNzIiBkaXNwbGF5cyBhbGwgc3lzdGVtIGFkZHJlc3NlcykgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2VhcmNoIGxpbWl0IGZvciB0aGUgc3RhdHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBhZ2VudHMgcmVhbCBuYW1lIGFuZCB0aGUgZ2l2ZW4gcXVldWUgZW1haWwgYWRkcmVzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgQ2hhbmdlIFBTQSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNBQiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIFBJUiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2lnbmFscyBmb3IgZWFjaCBJVFNNQ2hhbmdlIHN0YXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzcGFjaW5nIG9mIHRoZSBsZWdlbmRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzdGFuZGFyZCBwZXJtaXNzaW9ucyBhdmFpbGFibGUgZm9yIGN1c3RvbWVycyB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uLiBJZiBtb3JlIHBlcm1pc3Npb25zIGFyZSBuZWVkZWQsIHlvdSBjYW4gZW50ZXIgdGhlbSBoZXJlLiBQZXJtaXNzaW9ucyBtdXN0IGJlIGhhcmQgY29kZWQgdG8gYmUgZWZmZWN0aXZlLiBQbGVhc2UgZW5zdXJlLCB3aGVuIGFkZGluZyBhbnkgb2YgdGhlIGFmb3JlIG1lbnRpb25lZCBwZXJtaXNzaW9ucywgdGhhdCB0aGUgInJ3IiBwZXJtaXNzaW9uIHJlbWFpbnMgdGhlIGxhc3QgZW50cnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHN0YW5kYXJkIHNpemUgb2YgUERGIHBhZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzdGF0ZSBvZiBhIHRpY2tldCBpZiBpdCBnZXRzIGEgZm9sbG93LXVwIGFuZCB0aGUgdGlja2V0IHdhcyBhbHJlYWR5IGNsb3NlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3RhdGUgb2YgYSB0aWNrZXQgaWYgaXQgZ2V0cyBhIGZvbGxvdy11cC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3RhdGUgdHlwZSBvZiB0aGUgcmVtaW5kZXIgZm9yIHBlbmRpbmcgdGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3ViamVjdCBmb3Igbm90aWZpY2F0aW9uIG1haWxzIHNlbnQgdG8gYWdlbnRzLCBhYm91dCBuZXcgcGFzc3dvcmQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHN1YmplY3QgZm9yIG5vdGlmaWNhdGlvbiBtYWlscyBzZW50IHRvIGFnZW50cywgd2l0aCB0b2tlbiBhYm91dCBuZXcgcmVxdWVzdGVkIHBhc3N3b3JkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzdWJqZWN0IGZvciBub3RpZmljYXRpb24gbWFpbHMgc2VudCB0byBjdXN0b21lcnMsIGFib3V0IG5ldyBhY2NvdW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzdWJqZWN0IGZvciBub3RpZmljYXRpb24gbWFpbHMgc2VudCB0byBjdXN0b21lcnMsIGFib3V0IG5ldyBwYXNzd29yZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3ViamVjdCBmb3Igbm90aWZpY2F0aW9uIG1haWxzIHNlbnQgdG8gY3VzdG9tZXJzLCB3aXRoIHRva2VuIGFib3V0IG5ldyByZXF1ZXN0ZWQgcGFzc3dvcmQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHN1YmplY3QgZm9yIHJlamVjdGVkIGVtYWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3JcJ3MgZW1haWwgYWRkcmVzcy4gSXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGVycm9yIHNjcmVlbnMgb2YgdGhlIGFwcGxpY2F0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzeXN0ZW0gaWRlbnRpZmllci4gRXZlcnkgdGlja2V0IG51bWJlciBhbmQgaHR0cCBzZXNzaW9uIHN0cmluZyBjb250YWluIHRoaXMgSUQuIFRoaXMgZW5zdXJlcyB0aGF0IG9ubHkgdGlja2V0cyB3aGljaCBiZWxvbmcgdG8geW91ciBzeXN0ZW0gd2lsbCBiZSBwcm9jZXNzZWQgYXMgZm9sbG93LXVwcyAodXNlZnVsIHdoZW4gY29tbXVuaWNhdGluZyBiZXR3ZWVuIHR3byBpbnN0YW5jZXMgb2YgT1RSUykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHRhcmdldCBhdHRyaWJ1dGUgaW4gdGhlIGxpbmsgdG8gZXh0ZXJuYWwgY3VzdG9tZXIgZGF0YWJhc2UuIEUuZy4gXCd0YXJnZXQ9ImNkYiJcJy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGVtcGxhdGUgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHRpbWUgem9uZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDEsIHdoaWNoIGNhbiBiZSBhc3NpZ25lZCBsYXRlciB0byBhIHNwZWNpZmljIHF1ZXVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0aW1lIHpvbmUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciAyLCB3aGljaCBjYW4gYmUgYXNzaWduZWQgbGF0ZXIgdG8gYSBzcGVjaWZpYyBxdWV1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGltZSB6b25lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgMywgd2hpY2ggY2FuIGJlIGFzc2lnbmVkIGxhdGVyIHRvIGEgc3BlY2lmaWMgcXVldWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHRpbWUgem9uZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDQsIHdoaWNoIGNhbiBiZSBhc3NpZ25lZCBsYXRlciB0byBhIHNwZWNpZmljIHF1ZXVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0aW1lIHpvbmUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA1LCB3aGljaCBjYW4gYmUgYXNzaWduZWQgbGF0ZXIgdG8gYSBzcGVjaWZpYyBxdWV1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGltZSB6b25lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgNiwgd2hpY2ggY2FuIGJlIGFzc2lnbmVkIGxhdGVyIHRvIGEgc3BlY2lmaWMgcXVldWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHRpbWUgem9uZSBvZiB0aGUgY2FsZW5kYXIgbnVtYmVyIDcsIHdoaWNoIGNhbiBiZSBhc3NpZ25lZCBsYXRlciB0byBhIHNwZWNpZmljIHF1ZXVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0aW1lIHpvbmUgb2YgdGhlIGNhbGVuZGFyIG51bWJlciA4LCB3aGljaCBjYW4gYmUgYXNzaWduZWQgbGF0ZXIgdG8gYSBzcGVjaWZpYyBxdWV1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGltZSB6b25lIG9mIHRoZSBjYWxlbmRhciBudW1iZXIgOSwgd2hpY2ggY2FuIGJlIGFzc2lnbmVkIGxhdGVyIHRvIGEgc3BlY2lmaWMgcXVldWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHR5cGUgb2YgcHJvdG9jb2wsIHVzZWQgYnkgdGhlciB3ZWIgc2VydmVyLCB0byBzZXJ2ZSB0aGUgYXBwbGljYXRpb24uIElmIGh0dHBzIHByb3RvY29sIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHBsYWluIGh0dHAsIGl0IG11c3QgYmUgc3BlY2lmaWVkIGl0IGhlcmUuIFNpbmNlIHRoaXMgaGFzIG5vIGFmZmVjdCBvbiB0aGUgd2ViIHNlcnZlclwncyBzZXR0aW5ncyBvciBiZWhhdmlvciwgaXQgd2lsbCBub3QgY2hhbmdlIHRoZSBtZXRob2Qgb2YgYWNjZXNzIHRvIHRoZSBhcHBsaWNhdGlvbiBhbmQsIGlmIGl0IGlzIHdyb25nLCBpdCB3aWxsIG5vdCBwcmV2ZW50IHlvdSBmcm9tIGxvZ2dpbmcgaW50byB0aGUgYXBwbGljYXRpb24uIFRoaXMgc2V0dGluZyBpcyB1c2VkIGFzIGEgdmFyaWFibGUsIE9UUlNfQ09ORklHX0h0dHBUeXBlIHdoaWNoIGlzIGZvdW5kIGluIGFsbCBmb3JtcyBvZiBtZXNzYWdpbmcgdXNlZCBieSB0aGUgYXBwbGljYXRpb24sIHRvIGJ1aWxkIGxpbmtzIHRvIHRoZSB0aWNrZXRzIHdpdGhpbiB5b3VyIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdXNlZCBjaGFyYWN0ZXIgZm9yIGVtYWlsIHF1b3RlcyBpbiB0aGUgdGlja2V0IGNvbXBvc2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHVzZXIgaWRlbnRpZmllciBmb3IgdGhlIGN1c3RvbWVyIHBhbmVsLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB1c2VybmFtZSB0byBhY2Nlc3MgdGhlIFNPQVAgaGFuZGxlIChiaW4vY2dpLWJpbi9ycGMucGwpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB2YWxpZCBzdGF0ZSB0eXBlcyBmb3IgYSB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHZhbGlkIHN0YXRlcyBmb3IgdW5sb2NrZWQgdGlja2V0cy4gVG8gdW5sb2NrIHRpY2tldHMgdGhlIHNjcmlwdCAiYmluL290cnMuVW5sb2NrVGlja2V0cy5wbCIgY2FuIGJlIHVzZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHZpZXdhYmxlIGxvY2tzIG9mIGEgdGlja2V0LiBEZWZhdWx0OiB1bmxvY2ssIHRtcF9sb2NrLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3aWR0aCBmb3IgdGhlIHJpY2ggdGV4dCBlZGl0b3IgY29tcG9uZW50LiBFbnRlciBudW1iZXIgKHBpeGVscykgb3IgcGVyY2VudCB2YWx1ZSAocmVsYXRpdmUpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgbGVnZW5kLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBzaG93IHRoZSBQSVIgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHllYXJzIChpbiBmdXR1cmUgYW5kIGluIHBhc3QpIHdoaWNoIGNhbiBnZXQgc2VsZWN0ZWQgaW4gZnJlZSB0aW1lIGZpZWxkIG51bWJlciAxLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB5ZWFycyAoaW4gZnV0dXJlIGFuZCBpbiBwYXN0KSB3aGljaCBjYW4gZ2V0IHNlbGVjdGVkIGluIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgeWVhcnMgKGluIGZ1dHVyZSBhbmQgaW4gcGFzdCkgd2hpY2ggY2FuIGdldCBzZWxlY3RlZCBpbiBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHllYXJzIChpbiBmdXR1cmUgYW5kIGluIHBhc3QpIHdoaWNoIGNhbiBnZXQgc2VsZWN0ZWQgaW4gZnJlZSB0aW1lIGZpZWxkIG51bWJlciA0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB5ZWFycyAoaW4gZnV0dXJlIGFuZCBpbiBwYXN0KSB3aGljaCBjYW4gZ2V0IHNlbGVjdGVkIGluIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgNS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgeWVhcnMgKGluIGZ1dHVyZSBhbmQgaW4gcGFzdCkgd2hpY2ggY2FuIGdldCBzZWxlY3RlZCBpbiBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDYuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciBub3RpZmljYXRpb25zIHNob3VsZCBiZSBzZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXRoZXIgdGhlIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgMSBpcyBvcHRpb25hbCBvciBub3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciB0aGUgZnJlZSB0aW1lIGZpZWxkIG51bWJlciAyIGlzIG9wdGlvbmFsIG9yIG5vdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGV0aGVyIHRoZSBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDMgaXMgb3B0aW9uYWwgb3Igbm90Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXRoZXIgdGhlIGZyZWUgdGltZSBmaWVsZCBudW1iZXIgNCBpcyBvcHRpb25hbCBvciBub3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciB0aGUgZnJlZSB0aW1lIGZpZWxkIG51bWJlciA1IGlzIG9wdGlvbmFsIG9yIG5vdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGV0aGVyIHRoZSBmcmVlIHRpbWUgZmllbGQgbnVtYmVyIDYgaXMgb3B0aW9uYWwgb3Igbm90Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoaWNoIHN0YXRlcyBzaG91bGQgYmUgc2V0IGF1dG9tYXRpY2FsbHkgKENvbnRlbnQpLCBhZnRlciB0aGUgcGVuZGluZyB0aW1lIG9mIHN0YXRlIChLZXkpIGhhcyBiZWVuIHJlYWNoZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGF5IHRpbWUgYmV0d2VlbiBhdXRvY29tcGxldGUgcXVlcmllcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgdGlja2V0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGVzIGEgc2Vzc2lvbiBpZiB0aGUgc2Vzc2lvbiBpZCBpcyB1c2VkIHdpdGggYW4gaW52YWxpZCByZW1vdGUgSVAgYWRkcmVzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlcyByZXF1ZXN0ZWQgc2Vzc2lvbnMgaWYgdGhleSBoYXZlIHRpbWVkIG91dC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiBhbiBhZ2VudCBjYW4gZXhjaGFuZ2UgdGhlIFgtYXhpcyBvZiBhIHN0YXQgaWYgaGUgZ2VuZXJhdGVzIG9uZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyBkb25lIGZvciBjb25maWcgaXRlbSBjbGFzc2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyBjaGFuZ2Ugc3RhdGUgdXBkYXRlcyB3aXRoaW4gYSB0aW1lcGVyaW9kLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyB0aGUgcmVsYXRpb24gYmV0d2VlbiBjaGFuZ2VzIGFuZCBpbmNpZGVudCB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCB0aGUgbnVtYmVyIG9mIFJmYyB0aWNrZXRzIGEgcmVxdWVzdGVyIGNyZWF0ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGxpc3Qgb2YgcG9zc2libGUgcXVldWVzIHRvIG1vdmUgdG8gdGlja2V0IGludG8gc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIGRyb3Bkb3duIGxpc3Qgb3IgaW4gYSBuZXcgd2luZG93IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIElmICJOZXcgV2luZG93IiBpcyBzZXQgeW91IGNhbiBhZGQgYSBtb3ZlIG5vdGUgdG8gdGhlIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgc2VhcmNoIHJlc3VsdHMgY29udGFpbmVyIGZvciB0aGUgYXV0b2NvbXBsZXRlIGZlYXR1cmUgc2hvdWxkIGFkanVzdCBpdHMgd2lkdGggZHluYW1pY2FsbHkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIHN0YXRhdGlzdGljcyBtb2R1bGUgbWF5IGdlbmVyYXRlIHRpY2tldCBsaXN0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyB0aGUgbmV4dCBwb3NzaWJsZSB0aWNrZXQgc3RhdGVzLCBhZnRlciB0aGUgY3JlYXRpb24gb2YgYSBuZXcgZW1haWwgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgdGhlIG5leHQgcG9zc2libGUgdGlja2V0IHN0YXRlcywgYWZ0ZXIgdGhlIGNyZWF0aW9uIG9mIGEgbmV3IHBob25lIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIHRoZSBuZXh0IHNjcmVlbiBhZnRlciBuZXcgY3VzdG9tZXIgdGlja2V0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgdGhlIG5leHQgc2NyZWVuIGFmdGVyIHRoZSBmb2xsb3cgdXAgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIHRoZSBwb3NzaWJsZSBzdGF0ZXMgZm9yIHBlbmRpbmcgdGlja2V0cyB0aGF0IGNoYW5nZWQgc3RhdGUgYWZ0ZXIgcmVhY2hpbmcgdGltZSBsaW1pdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyB0aGUgc3RyaW5ncyB0aGF0IHdpbGwgYmUgc2hvd24gYXMgcmVjZWlwZW50IChUbzopIG9mIHRoZSBwaG9uZSB0aWNrZXQgYW5kIGFzIHNlbmRlciAoRnJvbTopIG9mIHRoZSBlbWFpbCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gRm9yIFF1ZXVlIGFzIE5ld1F1ZXVlU2VsZWN0aW9uVHlwZSAiPFF1ZXVlPiIgc2hvd3MgdGhlIG5hbWVzIG9mIHRoZSBxdWV1ZXMgYW5kIGZvciBTeXN0ZW1BZGRyZXNzICI8UmVhbG5hbWU+IDw8RW1haWw+PiIgc2hvd3MgdGhlIG5hbWUgYW5kIGVtYWlsIG9mIHRoZSByZWNlaXBlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgdGhlIHN0cmluZ3MgdGhhdCB3aWxsIGJlIHNob3duIGFzIHJlY2VpcGVudCAoVG86KSBvZiB0aGUgdGlja2V0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIEZvciBRdWV1ZSBhcyBDdXN0b21lclBhbmVsU2VsZWN0aW9uVHlwZSwgIjxRdWV1ZT4iIHNob3dzIHRoZSBuYW1lcyBvZiB0aGUgcXVldWVzLCBhbmQgZm9yIFN5c3RlbUFkZHJlc3MsICI8UmVhbG5hbWU+IDw8RW1haWw+PiIgc2hvd3MgdGhlIG5hbWUgYW5kIGVtYWlsIG9mIHRoZSByZWNlaXBlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgdGhlIHdheSB0aGUgbGlua2VkIG9iamVjdHMgYXJlIGRpc3BsYXllZCBpbiBlYWNoIHpvb20gbWFzay4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyB3aGljaCBvcHRpb25zIHdpbGwgYmUgdmFsaWQgb2YgdGhlIHJlY2VwaWVudCAocGhvbmUgdGlja2V0KSBhbmQgdGhlIHNlbmRlciAoZW1haWwgdGlja2V0KSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIHdoaWNoIHF1ZXVlcyB3aWxsIGJlIHZhbGlkIGZvciB0aWNrZXRcJ3MgcmVjZXBpZW50cyBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEaXNhYmxlcyBzZW5kaW5nIHJlbWluZGVyIG5vdGlmaWNhdGlvbnMgdG8gdGhlIHJlc3BvbnNpYmxlIGFnZW50IG9mIGEgdGlja2V0IChUaWNrZXQ6OlJlc3BvbnNpYmxlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rpc2FibGVzIHRoZSB3ZWIgaW5zdGFsbGVyIChodHRwOi8veW91cmhvc3QuZXhhbXBsZS5jb20vb3Rycy9pbnN0YWxsZXIucGwpLCB0byBwcmV2ZW50IHRoZSBzeXN0ZW0gZnJvbSBiZWluZyBoaWphY2tlZC4gSWYgc2V0IHRvICJObyIsIHRoZSBzeXN0ZW0gY2FuIGJlIHJlaW5zdGFsbGVkIGFuZCB0aGUgY3VycmVudCBiYXNpYyBjb25maWd1cmF0aW9uIHdpbGwgYmUgdXNlZCB0byBwcmUtcG9wdWxhdGUgdGhlIHF1ZXN0aW9ucyB3aXRoaW4gdGhlIGluc3RhbGxlciBzY3JpcHQuIElmIG5vdCBhY3RpdmUsIGl0IGFsc28gZGlzYWJsZXMgdGhlIEdlbmVyaWNBZ2VudCwgUGFja2FnZU1hbmFnZXIgYW5kIFNRTCBCb3ggKHRvIGF2b2lkIHRoZSB1c2Ugb2YgZGVzdHJ1Y3RpdmUgcXVlcmllcywgc3VjaCBhcyBEUk9QIERBVEFCQVNFLCBhbmQgYWxzbyB0byBzdGVhbCB1c2VyIHBhc3N3b3JkcykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rpc3BsYXlzIHRoZSBhY2NvdW50ZWQgdGltZSBmb3IgYW4gYXJ0aWNsZSBpbiB0aGUgdGlja2V0IHpvb20gdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW1haWwgQWRkcmVzc2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgUERGIG91dHB1dC4gVGhlIENQQU4gbW9kdWxlIFBERjo6QVBJMiBpcyByZXF1aXJlZCwgaWYgbm90IGluc3RhbGxlZCwgUERGIG91dHB1dCB3aWxsIGJlIGRpc2FibGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIFBHUCBzdXBwb3J0LiBXaGVuIFBHUCBzdXBwb3J0IGlzIGVuYWJsZWQgZm9yIHNpZ25pbmcgYW5kIHNlY3VyaW5nIG1haWwsIGl0IGlzIEhJR0hMWSByZWNvbW1lbmRlZCB0aGF0IHRoZSB3ZWIgc2VydmVyIGJlIHJ1biBhcyB0aGUgT1RSUyB1c2VyLiBPdGhlcndpc2UsIHRoZXJlIHdpbGwgYmUgcHJvYmxlbXMgd2l0aCB0aGUgcHJpdmlsZWdlcyB3aGVuIGFjY2Vzc2luZyAuZ251cGcgZm9sZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIFMvTUlNRSBzdXBwb3J0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGN1c3RvbWVycyB0byBjcmVhdGUgdGhlaXIgb3duIGFjY291bnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIGZpbGUgdXBsb2FkIGluIHRoZSBwYWNrYWdlIG1hbmFnZXIgZnJvbnRlbmQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgb3IgZGlzYWJsZSB0aGUgZGVidWcgbW9kZSBvdmVyIGZyb250ZW5kIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBvciBkaXNhYmxlcyBUeXBlQWhlYWQgZm9yIHRoZSBhdXRvY29tcGxldGUgZmVhdHVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYXV0b2NvbXBsZXRlIGZlYXR1cmUgZm9yIHRoZSBDQUIgbWVtYmVyIHNlYXJjaCBpbiB0aGUgSVRTTSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGF1dG9jb21wbGV0ZSBmZWF0dXJlIGZvciB0aGUgY3VzdG9tZXIgc2VhcmNoIGluIHRoZSBJVFNNIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYXV0b2NvbXBsZXRlIGZlYXR1cmUgZm9yIHRoZSBjdXN0b21lciBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYXV0b2NvbXBsZXRlIGZlYXR1cmUgZm9yIHRoZSB1c2VyIHNlYXJjaCBpbiB0aGUgSVRTTSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIHRpY2tldCB3YXRjaGVyIGZlYXR1cmUsIHRvIGtlZXAgdHJhY2sgb2YgdGlja2V0cyB3aXRob3V0IGJlaW5nIHRoZSBvd25lciBub3IgdGhlIHJlc3BvbnNpYmxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHBlcmZvcm1hbmNlIGxvZyAodG8gbG9nIHRoZSBwYWdlIHJlc3BvbnNlIHRpbWUpLiBJdCB3aWxsIGFmZmVjdCB0aGUgc3lzdGVtIHBlcmZvcm1hbmNlLiBGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5QZXJmb3JtYW5jZUxvZyBtdXN0IGJlIGVuYWJsZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgc3BlbGwgY2hlY2tlciBzdXBwb3J0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRpY2tldCBidWxrIGFjdGlvbiBmZWF0dXJlIGZvciB0aGUgYWdlbnQgZnJvbnRlbmQgdG8gd29yayBvbiBtb3JlIHRoYW4gb25lIHRpY2tldCBhdCBhIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGlja2V0IGJ1bGsgYWN0aW9uIGZlYXR1cmUgb25seSBmb3IgdGhlIGxpc3RlZCBncm91cHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGlja2V0IHJlc3BvbnNpYmxlIGZlYXR1cmUsIHRvIGtlZXAgdHJhY2sgb2YgYSBzcGVjaWZpYyB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGlja2V0IHdhdGNoZXIgZmVhdHVyZSBvbmx5IGZvciB0aGUgbGlzdGVkIGdyb3Vwcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXNjYWxhdGlvbiB2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V2ZW50IG1vZHVsZSByZWdpc3RyYXRpb24uIEZvciBtb3JlIHBlcmZvcm1hbmNlIHlvdSBjYW4gZGVmaW5lIGEgdHJpZ2dlciBldmVudCAoZS4gZy4gRXZlbnQgPT4gVGlja2V0Q3JlYXRlKS4gVGhpcyBpcyBvbmx5IHBvc3NpYmxlIGlmIGFsbCBUaWNrZXRGcmVlRmllbGQgZWxlbWVudHMgbmVlZCB0aGUgc2FtZSBldmVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhhbXBsZSBmb3IgZnJlZSB0ZXh0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4ZWN1dGUgU1FMIHN0YXRlbWVudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4ZWN1dGVzIGZvbGxvdyB1cCBjaGVja3Mgb24gSW4tUmVwbHktVG8gb3IgUmVmZXJlbmNlcyBoZWFkZXJzIGZvciBtYWlscyB0aGF0IGRvblwndCBoYXZlIGEgdGlja2V0IG51bWJlciBpbiB0aGUgc3ViamVjdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhlY3V0ZXMgZm9sbG93IHVwIG1haWwgYXR0YWNobWVudHMgY2hlY2tzIGluICBtYWlscyB0aGF0IGRvblwndCBoYXZlIGEgdGlja2V0IG51bWJlciBpbiB0aGUgc3ViamVjdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhlY3V0ZXMgZm9sbG93IHVwIG1haWwgYm9keSBjaGVja3MgaW4gbWFpbHMgdGhhdCBkb25cJ3QgaGF2ZSBhIHRpY2tldCBudW1iZXIgaW4gdGhlIHN1YmplY3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4ZWN1dGVzIGZvbGxvdyB1cCBwbGFpbi9yYXcgbWFpbCBjaGVja3MgaW4gbWFpbHMgdGhhdCBkb25cJ3QgaGF2ZSBhIHRpY2tldCBudW1iZXIgaW4gdGhlIHN1YmplY3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cGVyaW1lbnRhbCAiU2xpbSIgc2tpbiB3aGljaCB0cmllcyB0byBzYXZlIHNjcmVlbiBzcGFjZSBmb3IgcG93ZXIgdXNlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cG9ydHMgdGhlIHdob2xlIGFydGljbGUgdHJlZSBpbiBzZWFyY2ggcmVzdWx0IChpdCBjYW4gYWZmZWN0IHRoZSBzeXN0ZW0gcGVyZm9ybWFuY2UpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGZXRjaGVzIHBhY2thZ2VzIHZpYSBwcm94eS4gT3ZlcndyaXRlcyAiV2ViVXNlckFnZW50OjpQcm94eSIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbGUgdGhhdCBpcyBkaXNwbGF5ZWQgaW4gdGhlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJbmZvIG1vZHVsZSwgaWYgbG9jYXRlZCB1bmRlciBLZXJuZWwvT3V0cHV0L0hUTUwvU3RhbmRhcmQvQWdlbnRJbmZvLmR0bC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGluY29taW5nIGVtYWlscy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9yY2VzIGVuY29kaW5nIG9mIG91dGdvaW5nIGVtYWlscyAoN2JpdHw4Yml0fHF1b3RlZC1wcmludGFibGV8YmFzZTY0KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9yY2VzIHRvIGNob29zZSBhIGRpZmZlcmVudCB0aWNrZXQgc3RhdGUgKGZyb20gY3VycmVudCkgYWZ0ZXIgbG9jayBhY3Rpb24uIERlZmluZSB0aGUgY3VycmVudCBzdGF0ZSBhcyBrZXksIGFuZCB0aGUgbmV4dCBzdGF0ZSBhZnRlciBsb2NrIGFjdGlvbiBhcyBjb250ZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3JjZXMgdG8gdW5sb2NrIHRpY2tldHMgYWZ0ZXIgYmVpbmcgbW92ZWQgdG8gYW5vdGhlciBxdWV1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbGFuZ3VhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiAoZGlzYWJsZSBjb21wYW55IGxpbmsgaWYgbm8gY29tcGFueSBmZWF0dXJlIGlzIHVzZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCB0aGVtZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmljQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2l2ZXMgZW5kIHVzZXJzIHRoZSBwb3NzaWJpbGl0eSB0byBvdmVycmlkZSB0aGUgc2VwYXJhdG9yIGNoYXJhY3RlciBmb3IgQ1NWIGZpbGVzLCBkZWZpbmVkIGluIHRoZSB0cmFuc2xhdGlvbiBmaWxlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhbnRzIGFjY2VzcywgaWYgdGhlIGN1c3RvbWVyIElEIG9mIHRoZSB0aWNrZXQgbWF0Y2hlcyB0aGUgY3VzdG9tZXIgdXNlclwncyBJRCBhbmQgdGhlIGN1c3RvbWVyIHVzZXIgaGFzIGdyb3VwIHBlcm1pc3Npb25zIG9uIHRoZSBxdWV1ZSB0aGUgdGlja2V0IGlzIGluLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcm91cHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGVscHMgdG8gZXh0ZW5kIHlvdXIgYXJ0aWNsZXMgZnVsbC10ZXh0IHNlYXJjaCAoRnJvbSwgVG8sIENjLCBTdWJqZWN0IGFuZCBCb2R5IHNlYXJjaCkuIFJ1bnRpbWUgd2lsbCBkbyBmdWxsLXRleHQgc2VhcmNoZXMgb24gbGl2ZSBkYXRhIChpdCB3b3JrcyBmaW5lIGZvciB1cCB0byA1MC4wMDAgdGlja2V0cykuIFN0YXRpY0RCIHdpbGwgc3RyaXAgYWxsIGFydGljbGVzIGFuZCB3aWxsIGJ1aWxkIGFuIGluZGV4IGFmdGVyIGFydGljbGUgY3JlYXRpb24sIGluY3JlYXNpbmcgZnVsbHRleHQgc2VhcmNoZXMgYWJvdXQgNTAlLiBUbyBjcmVhdGUgYW4gaW5pdGlhbCBpbmRleCB1c2UgImJpbi9vdHJzLlJlYnVpbGRGdWxsdGV4dEluZGV4LnBsIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgZGVsZXRlcyB0aGUgaGlzdG9yeSBvZiBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGNsZWFucyB1cCBjb25kaXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IG1hdGNoZXMgY29uZGl0aW9ucyBhbmQgZXhlY3V0ZXMgYWN0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBzZW5kcyBub3RpZmljYXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gcmVjYWxjdWxhdGUgdGhlIHdvcmtvcmRlciBudW1iZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byBzZXQgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzIG9mIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiBjb25kaXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgYSBkYXRhYmFzZSBkcml2ZXIgKG5vcm1hbGx5IGF1dG9kZXRlY3Rpb24gaXMgdXNlZCkgY2FuIGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkRCIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCBhIHBhc3N3b3JkIHRvIGNvbm5lY3QgdG8gdGhlIGN1c3RvbWVyIHRhYmxlIGNhbiBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgYSB1c2VybmFtZSB0byBjb25uZWN0IHRvIHRoZSBjdXN0b21lciB0YWJsZSBjYW4gYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiREIiIHdhcyBzZWxlY3RlZCBmb3IgQ3VzdG9tZXI6OkF1dGhNb2R1bGUsIHRoZSBEU04gZm9yIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBjdXN0b21lciB0YWJsZSBtdXN0IGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkRCIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCB0aGUgY29sdW1uIG5hbWUgZm9yIHRoZSBDdXN0b21lclBhc3N3b3JkIGluIHRoZSBjdXN0b21lciB0YWJsZSBtdXN0IGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkRCIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCB0aGUgY3J5cHQgdHlwZSBvZiBwYXNzd29yZHMgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgdGhlIG5hbWUgb2YgdGhlIGNvbHVtbiBmb3IgdGhlIEN1c3RvbWVyS2V5IGluIHRoZSBjdXN0b21lciB0YWJsZSBtdXN0IGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkRCIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCB0aGUgbmFtZSBvZiB0aGUgdGFibGUgd2hlcmUgeW91ciBjdXN0b21lciBkYXRhIHNob3VsZCBiZSBzdG9yZWQgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBTZXNzaW9uTW9kdWxlLCBhIGNvbHVtbiBmb3IgdGhlIGlkZW50aWZpZXJzIGluIHNlc3Npb24gdGFibGUgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBTZXNzaW9uTW9kdWxlLCBhIGNvbHVtbiBmb3IgdGhlIHZhbHVlcyBpbiBzZXNzaW9uIHRhYmxlIG11c3QgYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiREIiIHdhcyBzZWxlY3RlZCBmb3IgU2Vzc2lvbk1vZHVsZSwgYSB0YWJsZSBpbiBkYXRhYmFzZSB3aGVyZSBzZXNzaW9uIGRhdGEgd2lsbCBiZSBzdG9yZWQgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJGUyIgd2FzIHNlbGVjdGVkIGZvciBTZXNzaW9uTW9kdWxlLCBhIGRpcmVjdG9yeSB3aGVyZSB0aGUgc2Vzc2lvbiBkYXRhIHdpbGwgYmUgc3RvcmVkIG11c3QgYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiSFRUUEJhc2ljQXV0aCIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgeW91IGNhbiBzcGVjaWZ5IChieSB1c2luZyBhIFJlZ0V4cCkgdG8gc3RyaXAgcGFydHMgb2YgUkVNT1RFX1VTRVIgKGUuIGcuIGZvciB0byByZW1vdmUgdHJhaWxpbmcgZG9tYWlucykuIFJlZ0V4cC1Ob3RlLCAkMSB3aWxsIGJlIHRoZSBuZXcgTG9naW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJIVFRQQmFzaWNBdXRoIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCB5b3UgY2FuIHNwZWNpZnkgdG8gc3RyaXAgbGVhZGluZyBwYXJ0cyBvZiB1c2VyIG5hbWVzIChlLiBnLiBmb3IgZG9tYWlucyBsaWtlIGV4YW1wbGVfZG9tYWluXHVzZXIgdG8gdXNlcikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlIGFuZCBpZiB5b3Ugd2FudCB0byBhZGQgYSBzdWZmaXggdG8gZXZlcnkgY3VzdG9tZXIgbG9naW4gbmFtZSwgc3BlY2lmaXkgaXQgaGVyZSwgZS4gZy4geW91IGp1c3Qgd2FudCB0byB3cml0ZSB0aGUgdXNlcm5hbWUgdXNlciBidXQgaW4geW91ciBMREFQIGRpcmVjdG9yeSBleGlzdHMgdXNlckBkb21haW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlIGFuZCBzcGVjaWFsIHBhcmFtYXRlcnMgYXJlIG5lZWRlZCBmb3IgdGhlIE5ldDo6TERBUCBwZXJsIG1vZHVsZSwgeW91IGNhbiBzcGVjaWZ5IHRoZW0gaGVyZS4gU2VlICJwZXJsZG9jIE5ldDo6TERBUCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcmFtZXRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlIGFuZCB5b3VyIHVzZXJzIGhhdmUgb25seSBhbm9ueW1vdXMgYWNjZXNzIHRvIHRoZSBMREFQIHRyZWUsIGJ1dCB5b3Ugd2FudCB0byBzZWFyY2ggdGhyb3VnaCB0aGUgZGF0YSwgeW91IGNhbiBkbyB0aGlzIHdpdGggYSB1c2VyIHdobyBoYXMgYWNjZXNzIHRvIHRoZSBMREFQIGRpcmVjdG9yeS4gU3BlY2lmeSB0aGUgcGFzc3dvcmQgZm9yIHRoaXMgc3BlY2lhbCB1c2VyIGhlcmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlIGFuZCB5b3VyIHVzZXJzIGhhdmUgb25seSBhbm9ueW1vdXMgYWNjZXNzIHRvIHRoZSBMREFQIHRyZWUsIGJ1dCB5b3Ugd2FudCB0byBzZWFyY2ggdGhyb3VnaCB0aGUgZGF0YSwgeW91IGNhbiBkbyB0aGlzIHdpdGggYSB1c2VyIHdobyBoYXMgYWNjZXNzIHRvIHRoZSBMREFQIGRpcmVjdG9yeS4gU3BlY2lmeSB0aGUgdXNlcm5hbWUgZm9yIHRoaXMgc3BlY2lhbCB1c2VyIGhlcmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRoTW9kdWxlLCB0aGUgQmFzZUROIG11c3QgYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiTERBUCIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgdGhlIExEQVAgaG9zdCBjYW4gYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiTERBUCIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgdGhlIHVzZXIgaWRlbnRpZmllciBtdXN0IGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkxEQVAiIHdhcyBzZWxlY3RlZCBmb3IgQ3VzdG9tZXI6OkF1dGhNb2R1bGUsIHVzZXIgYXR0cmlidXRlcyBjYW4gYmUgc3BlY2lmaWVkLiBGb3IgTERBUCBwb3NpeEdyb3VwcyB1c2UgVUlELCBmb3Igbm9uIExEQVAgcG9zaXhHcm91cHMgdXNlIGZ1bGwgdXNlciBETi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIkxEQVAiIHdhcyBzZWxlY3RlZCBmb3IgQ3VzdG9tZXI6OkF1dGhNb2R1bGUsIHlvdSBjYW4gc3BlY2lmeSBhY2Nlc3MgYXR0cmlidXRlcyBoZXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiTERBUCIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgeW91IGNhbiBzcGVjaWZ5IGlmIHRoZSBhcHBsaWNhdGlvbnMgd2lsbCBzdG9wIGlmIGUuIGcuIGEgY29ubmVjdGlvbiB0byBhIHNlcnZlciBjYW5cJ3QgYmUgZXN0YWJsaXNoZWQgZHVlIHRvIG5ldHdvcmsgcHJvYmxlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJMREFQIiB3YXMgc2VsZWN0ZWQgZm9yIEN1c3RvbWVyOjpBdXRobW9kdWxlLCB5b3UgY2FuIGNoZWNrIGlmIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gYXV0aGVudGljYXRlIGJlY2F1c2UgaGUgaXMgaW4gYSBwb3NpeEdyb3VwLCBlLmcuIHVzZXIgbmVlZHMgdG8gYmUgaW4gYSBncm91cCB4eXogdG8gdXNlIE9UUlMuIFNwZWNpZnkgdGhlIGdyb3VwLCB3aG8gbWF5IGFjY2VzcyB0aGUgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiTERBUCIgd2FzIHNlbGVjdGVkLCB5b3UgY2FuIGFkZCBhIGZpbHRlciB0byBlYWNoIExEQVAgcXVlcnksIGUuZy4gKG1haWw9KiksIChvYmplY3RjbGFzcz11c2VyKSBvciAoIW9iamVjdGNsYXNzPWNvbXB1dGVyKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIlJhZGl1cyIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgdGhlIHBhc3N3b3JkIHRvIGF1dGhlbnRpY2F0ZSB0byB0aGUgcmFkaXVzIGhvc3QgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJSYWRpdXMiIHdhcyBzZWxlY3RlZCBmb3IgQ3VzdG9tZXI6OkF1dGhNb2R1bGUsIHRoZSByYWRpdXMgaG9zdCBtdXN0IGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIlJhZGl1cyIgd2FzIHNlbGVjdGVkIGZvciBDdXN0b21lcjo6QXV0aE1vZHVsZSwgeW91IGNhbiBzcGVjaWZ5IGlmIHRoZSBhcHBsaWNhdGlvbnMgd2lsbCBzdG9wIGlmIGUuIGcuIGEgY29ubmVjdGlvbiB0byBhIHNlcnZlciBjYW5cJ3QgYmUgZXN0YWJsaXNoZWQgZHVlIHRvIG5ldHdvcmsgcHJvYmxlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmICJTZW5kbWFpbCIgd2FzIHNlbGVjdGVkIGFzIFNlbmRtYWlsTW9kdWxlLCB0aGUgbG9jYXRpb24gb2YgdGhlIHNlbmRtYWlsIGJpbmFyeSBhbmQgdGhlIG5lZWRlZCBvcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiU3lzTG9nIiB3YXMgc2VsZWN0ZWQgZm9yIExvZ01vZHVsZSwgYSBzcGVjaWFsIGxvZyBmYWNpbGl0eSBjYW4gYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiAiU3lzTG9nIiB3YXMgc2VsZWN0ZWQgZm9yIExvZ01vZHVsZSwgYSBzcGVjaWFsIGxvZyBzb2NrIGNhbiBiZSBzcGVjaWZpZWQgKG9uIHNvbGFyaXMgeW91IG1heSBuZWVkIHRvIHVzZSBcJ3N0cmVhbVwnKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgIlN5c0xvZyIgd2FzIHNlbGVjdGVkIGZvciBMb2dNb2R1bGUsIHRoZSBjaGFyc2V0IHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGxvZ2dpbmcgY2FuIGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgImZpbGUiIHdhcyBzZWxlY3RlZCBmb3IgTG9nTW9kdWxlLCBhIGxvZ2ZpbGUgbXVzdCBiZSBzcGVjaWZpZWQuIElmIHRoZSBmaWxlIGRvZXNuXCd0IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQgYnkgdGhlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhIG5vdGUgaXMgYWRkZWQgYnkgYW4gYWdlbnQsIHNldHMgdGhlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGEgbm90ZSBpcyBhZGRlZCBieSBhbiBhZ2VudCwgc2V0cyB0aGUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhIG5vdGUgaXMgYWRkZWQgYnkgYW4gYWdlbnQsIHNldHMgdGhlIHN0YXRlIG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhbnkgb2YgdGhlICJTTVRQIiBtZWNoYW5pc21zIHdhcyBzZWxlY3RlZCBhcyBTZW5kbWFpbE1vZHVsZSwgYW5kIGF1dGhlbnRpY2F0aW9uIHRvIHRoZSBtYWlsIHNlcnZlciBpcyBuZWVkZWQsIGEgcGFzc3dvcmQgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGFueSBvZiB0aGUgIlNNVFAiIG1lY2hhbmlzbXMgd2FzIHNlbGVjdGVkIGFzIFNlbmRtYWlsTW9kdWxlLCBhbmQgYXV0aGVudGljYXRpb24gdG8gdGhlIG1haWwgc2VydmVyIGlzIG5lZWRlZCwgYW4gdXNlcm5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGFueSBvZiB0aGUgIlNNVFAiIG1lY2hhbmlzbXMgd2FzIHNlbGVjdGVkIGFzIFNlbmRtYWlsTW9kdWxlLCB0aGUgbWFpbGhvc3QgdGhhdCBzZW5kcyBvdXQgdGhlIG1haWxzIG11c3QgYmUgc3BlY2lmaWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhbnkgb2YgdGhlICJTTVRQIiBtZWNoYW5pc21zIHdhcyBzZWxlY3RlZCBhcyBTZW5kbWFpbE1vZHVsZSwgdGhlIHBvcnQgd2hlcmUgeW91ciBtYWlsc2VydmVyIGlzIGxpc3RlbmluZyBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMgbXVzdCBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGNvbmZpZ3VyZWQsIGFsbCBlbWFpbHMgc2VudCBieSB0aGUgYXBwbGljYXRpb24gd2lsbCBjb250YWluIGFuIFgtSGVhZGVyIHdpdGggdGhpcyBvcmdhbml6YXRpb24gb3IgY29tcGFueSBuYW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBlbmFibGVkLCBPVFJTIHdpbGwgZGVsaXZlciBhbGwgQ1NTIGZpbGVzIGluIG1pbmlmaWVkIGZvcm0uIFdBUk5JTkc6IElmIHlvdSB0dXJuIHRoaXMgb2ZmLCB0aGVyZSB3aWxsIGxpa2VseSBiZSBwcm9ibGVtcyBpbiBJRSA3LCBiZWNhdXNlIGl0IGNhbm5vdCBsb2FkIG1vcmUgdGhhbiAzMiBDU1MgZmlsZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIE9UUlMgd2lsbCBkZWxpdmVyIGFsbCBKYXZhU2NyaXB0IGZpbGVzIGluIG1pbmlmaWVkIGZvcm0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIFRpY2tldFBob25lIGFuZCBUaWNrZXRFbWFpbCB3aWxsIGJlIG9wZW4gaW4gbmV3IHdpbmRvd3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIHRoZSBPVFJTIHZlcnNpb24gdGFnIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBIVFRQIGhlYWRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIHRoZSBRdWV1ZVZpZXcgd2lsbCBhdXRvbWF0aWNhbGx5IHJlZnJlc2ggYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBlbmFibGVkLCB0aGUgZmlyc3QgbGV2ZWwgb2YgdGhlIG1haW4gbWVudSBvcGVucyBvbiBtb3VzZSBob3ZlciAoaW5zdGVhZCBvZiBjbGljayBvbmx5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZnJlcXVlbmN5IGlzIFwncmVndWxhcmx5XCcsIHlvdSBjYW4gY29uZmlndXJlIGhvdyBvZnRlbiB0aGUgbm90aWNhdGlvbnMgYXJlIHNlbnQgKGV2ZXJ5IFggaG91cnMpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBzZXQsIHRoaXMgYWRkcmVzcyBpcyB1c2VkIGFzIGVudmVsb3BlIGZyb20gaGVhZGVyIGluIG91dGdvaW5nIG5vdGlmaWNhdGlvbnMuIElmIG5vIGFkZHJlc3MgaXMgc3BlY2lmaWVkLCB0aGUgZW52ZWxvcGUgZnJvbSBoZWFkZXIgaXMgZW1wdHkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHRoaXMgcmVnZXggbWF0Y2hlcywgbm8gbWVzc2FnZSB3aWxsIGJlIHNlbmQgYnkgdGhlIGF1dG9yZXNwb25kZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHlvdSB3YW50IHRvIHVzZSBhIG1pcnJvciBkYXRhYmFzZSBmb3IgYWdlbnQgdGlja2V0IGZ1bGx0ZXh0IHNlYXJjaCBvciB0byBnZW5lcmF0ZSBzdGF0cywgc3BlY2lmeSB0aGUgRFNOIHRvIHRoaXMgZGF0YWJhc2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHlvdSB3YW50IHRvIHVzZSBhIG1pcnJvciBkYXRhYmFzZSBmb3IgYWdlbnQgdGlja2V0IGZ1bGx0ZXh0IHNlYXJjaCBvciB0byBnZW5lcmF0ZSBzdGF0cywgdGhlIHBhc3N3b3JkIHRvIGF1dGhlbnRpY2F0ZSB0byB0aGlzIGRhdGFiYXNlIGNhbiBiZSBzcGVjaWZpZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHlvdSB3YW50IHRvIHVzZSBhIG1pcnJvciBkYXRhYmFzZSBmb3IgYWdlbnQgdGlja2V0IGZ1bGx0ZXh0IHNlYXJjaCBvciB0byBnZW5lcmF0ZSBzdGF0cywgdGhlIHVzZXIgdG8gYXV0aGVudGljYXRlIHRvIHRoaXMgZGF0YWJhc2UgY2FuIGJlIHNwZWNpZmllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWdub3JlIGFydGljbGUgd2l0aCBzeXN0ZW0gc2VuZGVyIHR5cGUgZm9yIG5ldyBhcnRpY2xlIGZlYXR1cmUgKGUuIGcuIGF1dG8gcmVzcG9uc2VzIG9yIGVtYWlsIG5vdGlmaWNhdGlvbnMpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBvcnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMgYXJ0aWNsZSBjcmVhdGUgdGltZXMgaW4gdGhlIHRpY2tldCBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5kZXhBY2NlbGVyYXRvcjogdG8gY2hvb3NlIHlvdXIgYmFja2VuZCBUaWNrZXRWaWV3QWNjZWxlcmF0b3IgbW9kdWxlLiAiUnVudGltZURCIiBnZW5lcmF0ZXMgZWFjaCBxdWV1ZSB2aWV3IG9uIHRoZSBmbHkgZnJvbSB0aWNrZXQgdGFibGUgKG5vIHBlcmZvcm1hbmNlIHByb2JsZW1zIHVwIHRvIGFwcHJveC4gNjAuMDAwIHRpY2tldHMgaW4gdG90YWwgYW5kIDYuMDAwIG9wZW4gdGlja2V0cyBpbiB0aGUgc3lzdGVtKS4gIlN0YXRpY0RCIiBpcyB0aGUgbW9zdCBwb3dlcmZ1bCBtb2R1bGUsIGl0IHVzZXMgYW4gZXh0cmEgdGlja2V0LWluZGV4IHRhYmxlIHRoYXQgd29ya3MgbGlrZSBhIHZpZXcgKHJlY29tbWVuZGVkIGlmIG1vcmUgdGhhbiA4MC4wMDAgYW5kIDYuMDAwIG9wZW4gdGlja2V0cyBhcmUgc3RvcmVkIGluIHRoZSBzeXN0ZW0pLiBVc2UgdGhlIHNjcmlwdCAiYmluL290cnMuUmVidWlsZFRpY2tldEluZGV4LnBsIiBmb3IgaW5pdGlhbCBpbmRleCB1cGRhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RhbGwgaXNwZWxsIG9yIGFzcGVsbCBvbiB0aGUgc3lzdGVtLCBpZiB5b3Ugd2FudCB0byB1c2UgYSBzcGVsbCBjaGVja2VyLiBQbGVhc2Ugc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgYXNwZWxsIG9yIGlzcGVsbCBiaW5hcnkgb24geW91ciBvcGVyYXRpbmcgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcmZhY2UgbGFuZ3VhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlIGRpZmZlcmVudCBza2lucywgZm9yIGV4YW1wbGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBkaWZlcmVudCBhZ2VudHMsIHRvIGJlIHVzZWQgb24gYSBwZXItZG9tYWluIGJhc2lzIHdpdGhpbiB0aGUgYXBwbGljYXRpb24uIFVzaW5nIGEgcmVndWxhciBleHByZXNzaW9uIChyZWdleCksIHlvdSBjYW4gY29uZmlndXJlIGEgS2V5L0NvbnRlbnQgcGFpciB0byBtYXRjaCBhIGRvbWFpbi4gVGhlIHZhbHVlIGluICJLZXkiIHNob3VsZCBtYXRjaCB0aGUgZG9tYWluLCBhbmQgdGhlIHZhbHVlIGluICJDb250ZW50IiBzaG91bGQgYmUgYSB2YWxpZCBza2luIG9uIHlvdXIgc3lzdGVtLiBQbGVhc2Ugc2VlIHRoZSBleGFtcGxlIGVudHJpZXMgZm9yIHRoZSBwcm9wZXIgZm9ybSBvZiB0aGUgcmVnZXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSBkaWZmZXJlbnQgc2tpbnMsIGZvciBleGFtcGxlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZXJlbnQgY3VzdG9tZXJzLCB0byBiZSB1c2VkIG9uIGEgcGVyLWRvbWFpbiBiYXNpcyB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uLiBVc2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiAocmVnZXgpLCB5b3UgY2FuIGNvbmZpZ3VyZSBhIEtleS9Db250ZW50IHBhaXIgdG8gbWF0Y2ggYSBkb21haW4uIFRoZSB2YWx1ZSBpbiAiS2V5IiBzaG91bGQgbWF0Y2ggdGhlIGRvbWFpbiwgYW5kIHRoZSB2YWx1ZSBpbiAiQ29udGVudCIgc2hvdWxkIGJlIGEgdmFsaWQgc2tpbiBvbiB5b3VyIHN5c3RlbS4gUGxlYXNlIHNlZSB0aGUgZXhhbXBsZSBlbnRyaWVzIGZvciB0aGUgcHJvcGVyIGZvcm0gb2YgdGhlIHJlZ2V4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdCBpcyBwb3NzaWJsZSB0byBjb25maWd1cmUgZGlmZmVyZW50IHRoZW1lcywgZm9yIGV4YW1wbGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhZ2VudHMgYW5kIGN1c3RvbWVycywgdG8gYmUgdXNlZCBvbiBhIHBlci1kb21haW4gYmFzaXMgd2l0aGluIHRoZSBhcHBsaWNhdGlvbi4gVXNpbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gKHJlZ2V4KSwgeW91IGNhbiBjb25maWd1cmUgYSBLZXkvQ29udGVudCBwYWlyIHRvIG1hdGNoIGEgZG9tYWluLiBUaGUgdmFsdWUgaW4gIktleSIgc2hvdWxkIG1hdGNoIHRoZSBkb21haW4sIGFuZCB0aGUgdmFsdWUgaW4gIkNvbnRlbnQiIHNob3VsZCBiZSBhIHZhbGlkIHRoZW1lIG9uIHlvdXIgc3lzdGVtLiBQbGVhc2Ugc2VlIHRoZSBleGFtcGxlIGVudHJpZXMgZm9yIHRoZSBwcm9wZXIgZm9ybSBvZiB0aGUgcmVnZXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhbmd1YWdlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYWdlbnRzIHRvIGdyb3Vwcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhZ2VudHMgdG8gcm9sZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYXR0YWNobWVudHMgdG8gcmVzcG9uc2VzIHRlbXBsYXRlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBjdXN0b21lcnMgdG8gZ3JvdXBzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGN1c3RvbWVycyB0byBzZXJ2aWNlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBxdWV1ZXMgdG8gYXV0byByZXNwb25zZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgcmVzcG9uc2VzIHRvIHF1ZXVlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayByb2xlcyB0byBncm91cHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgdGhpcyB0aWNrZXQgdG8gb3RoZXIgb2JqZWN0cyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlua3MgMiB0aWNrZXRzIHdpdGggYSAiTm9ybWFsIiB0eXBlIGxpbmsuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmtzIDIgdGlja2V0cyB3aXRoIGEgIlBhcmVudENoaWxkIiB0eXBlIGxpbmsuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2YgQ1NTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2YgQ1NTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2YgSUU2LXNwZWNpZmljIENTUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIElFNy1zcGVjaWZpYyBDU1MgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBJRTctc3BlY2lmaWMgQ1NTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3Qgb2YgSUU4LXNwZWNpZmljIENTUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIElFOC1zcGVjaWZpYyBDU1MgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCBvZiBKUyBmaWxlcyB0byBhbHdheXMgYmUgbG9hZGVkIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0IG9mIEpTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvZyBmaWxlIGZvciB0aGUgdGlja2V0IGNvdW50ZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvZ2ZpbGUgZm9yIHRoZSBJVFNNIGNoYW5nZSBjb3VudGVyLiBUaGlzIGZpbGUgaXMgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIGNoYW5nZSBudW1iZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rIGludG8gYSB0aWNrZXQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01ha2VzIHRoZSBhcHBsaWNhdGlvbiBjaGVjayB0aGUgTVggcmVjb3JkIG9mIGVtYWlsIGFkZHJlc3NlcyBiZWZvcmUgc2VuZGluZyBhbiBlbWFpbCBvciBzdWJtaXR0aW5nIGEgdGVsZXBob25lIG9yIGVtYWlsIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFrZXMgdGhlIGFwcGxpY2F0aW9uIGNoZWNrIHRoZSBzeW50YXggb2YgZW1haWwgYWRkcmVzc2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYWtlcyB0aGUgcGljdHVyZSB0cmFuc3BhcmVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFrZXMgdGhlIHNlc3Npb24gbWFuYWdlbWVudCB1c2UgaHRtbCBjb29raWVzLiBJZiBodG1sIGNvb2tpZXMgYXJlIGRpc2FibGVkIG9yIGlmIHRoZSBjbGllbnQgYnJvd3NlciBkaXNhYmxlZCBodG1sIGNvb2tpZXMsIHRoZW4gdGhlIHN5c3RlbSB3aWxsIHdvcmsgYXMgdXN1YWwgYW5kIGFwcGVuZCB0aGUgc2Vzc2lvbiBpZCB0byB0aGUgbGlua3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBQR1Aga2V5cyBmb3IgZW1haWwgZW5jcnlwdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIFBPUDMgb3IgSU1BUCBhY2NvdW50cyB0byBmZXRjaCBlbWFpbCBmcm9tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgUy9NSU1FIGNlcnRpZmljYXRlcyBmb3IgZW1haWwgZW5jcnlwdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIGV4aXN0aW5nIHNlc3Npb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcGVyaW9kaWMgdGFza3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hcmsgYXMgU3BhbSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4IHNpemUgKGluIGNoYXJhY3RlcnMpIG9mIHRoZSBjdXN0b21lciBpbmZvcm1hdGlvbiB0YWJsZSAocGhvbmUgYW5kIGVtYWlsKSBpbiB0aGUgY29tcG9zZSBzY3JlZW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heCBzaXplIG9mIHRoZSBzdWJqZWN0cyBpbiBhbiBlbWFpbCByZXBseS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4LiBkaXNwbGF5ZWQgdGlja2V0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbWFsIGF1dG8gZW1haWwgcmVzcG9uc2VzIHRvIG93biBlbWFpbC1hZGRyZXNzIGEgZGF5IChMb29wLVByb3RlY3Rpb24pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbWFsIHNpemUgaW4gS0J5dGVzIGZvciBtYWlscyB0aGF0IGNhbiBiZSBmZXRjaGVkIHZpYSBQT1AzL1BPUDNTL0lNQVAvSU1BUFMgKEtCeXRlcykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIHRpY2tldHMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2YgdGlja2V0cyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJlc3VsdCBvZiBhIHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgKGluIGNoYXJhY3RlcnMpIG9mIHRoZSBjdXN0b21lciBpbmZvIHRhYmxlIGluIHRoZSBxdWV1ZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIHNpemUgKGluIGNoYXJhY3RlcnMpIG9mIHRoZSBjdXN0b21lciBpbmZvcm1hdGlvbiB0YWJsZSBpbiB0aGUgdGlja2V0IHpvb20gdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWVyZ2UgdGhpcyB0aWNrZXQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSBmb3IgVG8tc2VsZWN0aW9uIGluIG5ldyB0aWNrZXQgc2NyZWVuIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayBjdXN0b21lciBwZXJtaXNzaW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIGlmIGEgdXNlciBpcyBpbiBhIHNwZWNpYWwgZ3JvdXAuIEFjY2VzcyBpcyBncmFudGVkLCBpZiB0aGUgdXNlciBpcyBpbiB0aGUgc3BlY2lmaWVkIGdyb3VwIGFuZCBoYXMgcm8gYW5kIHJ3IHBlcm1pc3Npb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgaWYgYXJyaXZlZCBlbWFpbHMgc2hvdWxkIGJlIG1hcmtlZCBhcyBlbWFpbC1pbnRlcm5hbCAoYmVjYXVzZSBvZiBvcmlnaW5hbCBmb3J3YXJlZCBpbnRlcm5hbCBlbWFpbCBpdCBjb2xsZWdlKS4gQXJ0aWNsZVR5cGUgYW5kIFNlbmRlclR5cGUgZGVmaW5lIHRoZSB2YWx1ZXMgZm9yIHRoZSBhcnJpdmVkIGVtYWlsL2FydGljbGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgQ0FCIG1lbWJlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgYWdlbnQgcmVzcG9uc2libGUgb2YgYSB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIGJ1aWxkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgZ3JvdXAgcGVybWlzc2lvbnMgZm9yIHRoZSBhY2Nlc3MgdG8gY3VzdG9tZXIgdGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBvd25lciBvZiBhIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSB3YXRjaGVyIGFnZW50cyBvZiBhIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIG5vIHdvcmtvcmRlciBhZ2VudCBpcyBzZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIHRoZSBhZ2VudCBpcyBjb250YWluZWQgaW4gdGhlIGNvbmZpZ3VyZWQgbGlzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNvbXBvc2Ugc2lnbmVkIG1lc3NhZ2VzIChQR1Agb3IgUy9NSU1FKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNyeXB0IGNvbXBvc2VkIG1lc3NhZ2VzIChQR1Agb3IgUy9NSU1FKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGZpbHRlciBhbmQgbWFuaXB1bGF0ZSBpbmNvbWluZyBtZXNzYWdlcy4gQmxvY2svaWdub3JlIGFsbCBzcGFtIGVtYWlsIHdpdGggRnJvbTogbm9yZXBseUAgYWRkcmVzcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGZpbHRlciBhbmQgbWFuaXB1bGF0ZSBpbmNvbWluZyBtZXNzYWdlcy4gR2V0IGEgNCBkaWdpdCBudW1iZXIgdG8gdGlja2V0IGZyZWUgdGV4dCwgdXNlIHJlZ2V4IGluIE1hdGNoIGUuIGcuIEZyb20gPT4gXCcoLis/KUAuKz9cJywgYW5kIHVzZSAoKSBhcyBbKioqXSBpbiBTZXQgPT4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBhY2NvdW50ZWQgdGltZSB0aWNrZXQgc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGdlbmVyYXRlIGh0bWwgT3BlblNlYXJjaCBwcm9maWxlIGZvciBzaG9ydCB0aWNrZXQgc2VhcmNoIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSBodG1sIE9wZW5TZWFyY2ggcHJvZmlsZSBmb3Igc2hvcnQgdGlja2V0IHNlYXJjaCBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gZ2VuZXJhdGUgdGlja2V0IHNvbHV0aW9uIGFuZCByZXNwb25zZSB0aW1lIHN0YXRpc3RpY3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBnZW5lcmF0ZSB0aWNrZXQgc3RhdGlzdGljcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGluZm9ybSBhZ2VudHMsIHZpYSB0aGUgYWdlbnQgaW50ZXJmYWNlLCBhYm91dCB0aGUgdXNlZCBjaGFyc2V0LiBBIG5vdGlmaWNhdGlvbiBpcyBkaXNwbGF5ZWQsIGlmIHRoZSBkZWZhdWx0IGNoYXJzZXQgaXMgbm90IHVzZWQsIGUuZy4gaW4gdGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYSBsaW5rIHRvIGNyZWF0ZSBhIGNoYW5nZSBmcm9tIHRoaXMgdGlja2V0LiBUaGUgdGlja2V0IHdpbGwgYmUgYXV0b21hdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgbmV3IGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgbm90aWZpY2F0aW9ucyBhbmQgZXNjYWxhdGlvbnMgKFNob3duTWF4OiBtYXguIHNob3duIGVzY2FsYXRpb25zLCBFc2NhbGF0aW9uSW5NaW51dGVzOiBTaG93IHRpY2tldCB3aGljaCB3aWxsIGVzY2FsYXRpb24gaW4sIENhY2hlVGltZTogQ2FjaGUgb2YgY2FsY3VsYXRlZCBlc2NhbGF0aW9ucyBpbiBzZWNvbmRzKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHVzZSBkYXRhYmFzZSBmaWx0ZXIgc3RvcmFnZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgUXVldWVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IFRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBvZiBjdXN0b20gcXVldWUuIFRoZSBjdXN0b20gcXVldWUgaXMgYSBxdWV1ZSBzZWxlY3Rpb24gb2YgeW91ciBwcmVmZXJyZWQgcXVldWVzIGFuZCBjYW4gYmUgc2VsZWN0ZWQgaW4gdGhlIHByZWZlcmVuY2VzIHNldHRpbmdzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFRpY2tldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgZW1haWwgdGlja2V0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBwaG9uZSB0aWNrZXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpY2tldCBub3RpZmljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV4dCBwb3NzaWJsZSB0aWNrZXQgc3RhdGVzIGFmdGVyIGFkZGluZyBhIHBob25lIG5vdGUgaW4gdGhlIHRpY2tldCBwaG9uZSBvdXRib3VuZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIChJVFNNIENoYW5nZSBNYW5hZ2VtZW50KSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb25zIChFdmVudCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTnVtYmVyIG9mIGRpc3BsYXllZCB0aWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiBsaW5lcyAocGVyIHRpY2tldCkgdGhhdCBhcmUgc2hvd24gYnkgdGhlIHNlYXJjaCB1dGlsaXR5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiB0aWNrZXRzIHRvIGJlIGRpc3BsYXllZCBpbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J051bWJlciBvZiB0aWNrZXRzIHRvIGJlIGRpc3BsYXllZCBpbiBlYWNoIHBhZ2Ugb2YgYSBzZWFyY2ggcmVzdWx0IGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgdXNlcnMgb2YgdGhlc2UgZ3JvdXBzIGhhdmUgdGhlIHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0aWNrZXQgdHlwZXMgYXMgZGVmaW5lZCBpbiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiBpZiB0aGUgZmVhdHVyZSAiVGlja2V0OjpBY2w6Ok1vZHVsZSMjIzIwMC1UaWNrZXQ6OkFjbDo6TW9kdWxlIiBpcyBlbmFibGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdXQgT2YgT2ZmaWNlIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcmxvYWRzIChyZWRlZmluZXMpIGV4aXN0aW5nIGZ1bmN0aW9ucyBpbiBLZXJuZWw6OlN5c3RlbTo6VGlja2V0LiBVc2VkIHRvIGVhc2lseSBhZGQgY3VzdG9taXphdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IEVzY2FsYXRlZCBUaWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG9mIGFsbCBvcGVuIFRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb2YgYWxsIG9wZW4gVGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUEdQIEtleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQR1AgS2V5IFVwbG9hZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQR1AgS2V5cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYWNrYWdlIE1hbmFnZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIENyZWF0ZU5leHRNYXNrIG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBDdXN0b21RdWV1ZSBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgRm9sbG93VXBOb3RpZnkgb2JqZWN0IGluIHRoZSBwcmVmZXJlbmNlIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIExvY2tUaW1lb3V0Tm90aWZ5IG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBNb3ZlTm90aWZ5IG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBOZXdUaWNrZXROb3RpZnkgb2JqZWN0IGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBSZWZyZXNoVGltZSBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgV2F0Y2hlck5vdGlmeSBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIG5ldyB0aWNrZXRzIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgdGlja2V0IGNhbGVuZGFyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgdGlja2V0IGVzY2FsYXRpb24gb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgdGlja2V0IHBlbmRpbmcgcmVtaW5kZXIgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZSAuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgdGlja2V0IHBlbmRpbmcgcmVtaW5kZXIgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSB0aWNrZXQgc3RhdHMgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY2hhbmdlcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIHRpY2tldHMgYXJlIHNob3duKSBvZiB0aGUgbWVkaXVtIHRpY2tldCBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgdGlja2V0cyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCB0aWNrZXQgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIHRpY2tldHMgYXJlIHNob3duKSBvZiB0aGUgdGlja2V0IHByZXZpZXcgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgb2YgdGhlIGV4YW1wbGUgU0xBIGF0dHJpYnV0ZSBDb21tZW50Mi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBvZiB0aGUgZXhhbXBsZSBxdWV1ZSBhdHRyaWJ1dGUgQ29tbWVudDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgb2YgdGhlIGV4YW1wbGUgc2VydmljZSBhdHRyaWJ1dGUgQ29tbWVudDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhdGggZm9yIHRoZSBsb2cgZmlsZSAoaXQgb25seSBhcHBsaWVzIGlmICJGUyIgd2FzIHNlbGVjdGVkIGZvciBMb29wUHJvdGVjdGlvbk1vZHVsZSBhbmQgaXQgaXMgbWFuZGF0b3J5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGF0aCBvZiB0aGUgZmlsZSB0aGF0IHN0b3JlcyBhbGwgdGhlIHNldHRpbmdzIGZvciB0aGUgUXVldWVPYmplY3Qgb2JqZWN0IGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXRoIG9mIHRoZSBmaWxlIHRoYXQgc3RvcmVzIGFsbCB0aGUgc2V0dGluZ3MgZm9yIHRoZSBRdWV1ZU9iamVjdCBvYmplY3QgZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhdGggb2YgdGhlIGZpbGUgdGhhdCBzdG9yZXMgYWxsIHRoZSBzZXR0aW5ncyBmb3IgdGhlIFRpY2tldE9iamVjdCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGF0aCBvZiB0aGUgZmlsZSB0aGF0IHN0b3JlcyBhbGwgdGhlIHNldHRpbmdzIGZvciB0aGUgVGlja2V0T2JqZWN0IGZvciB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJmb3JtYW5jZSBMb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWl0dGVkIHdpZHRoIGZvciBjb21wb3NlIGVtYWlsIHdpbmRvd3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pdHRlZCB3aWR0aCBmb3IgY29tcG9zZSBub3RlIHdpbmRvd3MuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bvc3RNYXN0ZXIgRmlsdGVycyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQb3N0TWFzdGVyIE1haWwgQWNjb3VudHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJlc2VudHMgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNob3cgdGhlIGludm9sdmVkIHBlcnNvbnMgaW4gYSBjaGFuZ2UsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBjaGFuZ2UgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhpcyB0aWNrZXQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXRpZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvdGVjdGlvbiBhZ2FpbnN0IENTUkYgKENyb3NzIFNpdGUgUmVxdWVzdCBGb3JnZXJ5KSBleHBsb2l0cyAoZm9yIG1vcmUgaW5mbyBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Dcm9zcy1zaXRlX3JlcXVlc3RfZm9yZ2VyeSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXVlIHZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVldWVWaWV3IFJlZnJlc2ggVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWV1ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVmcmVzaCBRdWV1ZVZpZXcgYWZ0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVmcmVzaCBpbnRlcnZhbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBsYWNlcyB0aGUgb3JpZ2luYWwgc2VuZGVyIHdpdGggY3VycmVudCBjdXN0b21lclwncyBlbWFpbCBhZGRyZXNzIG9uIGNvbXBvc2UgYW5zd2VyIGluIHRoZSB0aWNrZXQgY29tcG9zZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gY2hhbmdlIHRoZSBjdXN0b21lciBvZiBhIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgYm91bmNlIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBjb21wb3NlIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBmb3J3YXJkIHNjcmVlbiBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgdGlja2V0IG1lcmdlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgaW4gb3JkZXIgZm9yIGFuIGFnZW50IHRvIHRha2UgYSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWNjZXNzIHRoZSBvdmVydmlldyBvZiBhbGwgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhZGQgYSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY2hhbmdlIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlc1wnIENBQi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGludm9sdmVkIHBlcnNvbnMgb2YgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gbW92ZSBjaGFuZ2VzIGluIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcHJpbnQgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBhIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBsaXN0IG9mIGNoYW5nZXMgd2hlcmUgdGhlIHVzZXIgaXMgYSBDQUIgbWVtYmVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIHRoZSBjaGFuZ2UgbWFuYWdlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IG92ZXJ2aWV3IG92ZXIgYWxsIHRlbXBsYXRlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgem9vbSBvZiBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBDaGFuZ2UgU2NoZWR1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2UgUFNBLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlcyB3aXRoIGFuIHVwY29taW5nIFBJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBvd24gd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB3cml0ZSBhIHJlcG9ydCBmb3IgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXRzIGFuZCB1bmxvY2tzIHRoZSBvd25lciBvZiBhIHRpY2tldCBpZiBpdCB3YXMgbW92ZWQgdG8gYW5vdGhlciBxdWV1ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2VzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlcyA8LT4gUXVldWVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3RvcmVzIGEgdGlja2V0IGZyb20gdGhlIGFyY2hpdmUgKG9ubHkgaWYgdGhlIGV2ZW50IGlzIGEgc3RhdGUgY2hhbmdlLCBmcm9tIGNsb3NlZCB0byBhbnkgb3BlbiBhdmFpbGFibGUgc3RhdGUpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb2xlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSb2xlcyA8LT4gR3JvdXBzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1bnMgYW4gaW5pdGlhbCB3aWxkY2FyZCBzZWFyY2ggb2YgdGhlIGV4aXN0aW5nIGN1c3RvbWVyIHVzZXJzIHdoZW4gYWNjZXNzaW5nIHRoZSBBZG1pbkN1c3RvbWVyVXNlciBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1bnMgdGhlIHN5c3RlbSBpbiAiRGVtbyIgbW9kZS4gSWYgc2V0IHRvICJZZXMiLCBhZ2VudHMgY2FuIGNoYW5nZSBwcmVmZXJlbmNlcywgc3VjaCBhcyBzZWxlY3Rpb24gb2YgbGFuZ3VhZ2UgYW5kIHRoZW1lIHZpYSB0aGUgYWdlbnQgd2ViIGludGVyZmFjZS4gVGhlc2UgY2hhbmdlcyBhcmUgb25seSB2YWxpZCBmb3IgdGhlIGN1cnJlbnQgc2Vzc2lvbi4gSXQgd2lsbCBub3QgYmUgcG9zc2libGUgZm9yIGFnZW50cyB0byBjaGFuZ2UgdGhlaXIgcGFzc3dvcmRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTL01JTUUgQ2VydGlmaWNhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUy9NSU1FIENlcnRpZmljYXRlIFVwbG9hZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTL01JTUUgQ2VydGlmaWNhdGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NRTCBCb3gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2FsdXRhdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZXMgdGhlIGF0dGFjaG1lbnRzIG9mIGFydGljbGVzLiAiREIiIHN0b3JlcyBhbGwgZGF0YSBpbiB0aGUgZGF0YWJhc2UgKG5vdCByZWNvbW1lbmRlZCBmb3Igc3RvcmluZyBiaWcgYXR0YWNobWVudHMpLiAiRlMiIHN0b3JlcyB0aGUgZGF0YSBvbiB0aGUgZmlsZXN5c3RlbTsgdGhpcyBpcyBmYXN0ZXIgYnV0IHRoZSB3ZWJzZXJ2ZXIgc2hvdWxkIHJ1biB1bmRlciB0aGUgT1RSUyB1c2VyLiBZb3UgY2FuIHN3aXRjaCBiZXR3ZWVuIHRoZSBtb2R1bGVzIGV2ZW4gb24gYSBzeXN0ZW0gdGhhdCBpcyBhbHJlYWR5IGluIHByb2R1Y3Rpb24gd2l0aG91dCBhbnkgbG9zcyBvZiBkYXRhLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlcyB0aGUgbG9naW4gYW5kIHBhc3N3b3JkIG9uIHRoZSBzZXNzaW9uIHRhYmxlIGluIHRoZSBkYXRhYmFzZSwgaWYgIkRCIiB3YXMgc2VsZWN0ZWQgZm9yIFNlc3Npb25Nb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjcmVlbiBhZnRlciBuZXcgdGlja2V0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBUaWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBiYWNrZW5kIGRlZmF1bHQgcm91dGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggYmFja2VuZCByb3V0ZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCB0aGUgc2VwYXJhdG9yIGNoYXJhY3RlciB1c2VkIGluIENTViBmaWxlcyAoc3RhdHMgYW5kIHNlYXJjaGVzKS4gSWYgeW91IGRvblwndCBzZWxlY3QgYSBzZXBhcmF0b3IgaGVyZSwgdGhlIGRlZmF1bHQgc2VwYXJhdG9yIGZvciB5b3VyIGxhbmd1YWdlIHdpbGwgYmUgdXNlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IHlvdXIgZnJvbnRlbmQgVGhlbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNoYW5nZSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gV2l0aCAiRGF0ZSIsIHRoZSBjaGFuZ2UgbnVtYmVycyB3aWxsIGJlIGdlbmVyYXRlZCBieSB0aGUgY3VycmVudCBkYXRlIGFuZCBhIGNvdW50ZXI7IHRoaXMgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuY291bnRlciwgZS5nLiAyMDEwMDYyNDAwMDAxLCAyMDEwMDYyNDAwMDAyLiBXaXRoICJEYXRlQ2hlY2tzdW0iLCB0aGUgY291bnRlciB3aWxsIGJlIGFwcGVuZGVkIGFzIGNoZWNrc3VtIHRvIHRoZSBzdHJpbmcgb2YgZGF0ZSBwbHVzIHRoZSBTeXN0ZW1JRC4gVGhlIGNoZWNrc3VtIHdpbGwgYmUgcm90YXRlZCBvbiBhIGRhaWx5IGJhc2lzLiBUaGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LlN5c3RlbUlELkNvdW50ZXIuQ2hlY2tTdW0sIGUuZy4gMjAxMDA2MjQxMDAwMDAxNywgMjAxMDA2MjQxMDAwMDAyNi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgbW9kdWxlIHRvIGhhbmRsZSB1cGxvYWRzIHZpYSB0aGUgd2ViIGludGVyZmFjZS4gIkRCIiBzdG9yZXMgYWxsIHVwbG9hZHMgaW4gdGhlIGRhdGFiYXNlLCAiRlMiIHVzZXMgdGhlIGZpbGUgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSB0aWNrZXQgbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSB0aWNrZXQgbnVtYmVyLCB0aGUgU3lzdGVtSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkIHdpdGggU3lzdGVtSUQuY291bnRlciBmb3JtYXQgKGUuZy4gMTAxMDEzOCwgMTAxMDEzOSkuIFdpdGggIkRhdGUiIHRoZSB0aWNrZXQgbnVtYmVycyB3aWxsIGJlIGdlbmVyYXRlZCBieSB0aGUgY3VycmVudCBkYXRlLCB0aGUgU3lzdGVtSUQgYW5kIHRoZSBjb3VudGVyLiBUaGUgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuU3lzdGVtSUQuY291bnRlciAoZS5nLiAyMDAyMDYyMzEwMTAxMzgsIDIwMDIwNjIzMTAxMDEzOSkuIFdpdGggIkRhdGVDaGVja3N1bSIgIHRoZSBjb3VudGVyIHdpbGwgYmUgYXBwZW5kZWQgYXMgY2hlY2tzdW0gdG8gdGhlIHN0cmluZyBvZiBkYXRlIGFuZCBTeXN0ZW1JRC4gVGhlIGNoZWNrc3VtIHdpbGwgYmUgcm90YXRlZCBvbiBhIGRhaWx5IGJhc2lzLiBUaGUgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuU3lzdGVtSUQuQ291bnRlci5DaGVja1N1bSAoZS5nLiAyMDAyMDcwMTEwMTAxNTIwLCAyMDAyMDcwMTEwMTAxNTM1KS4gIlJhbmRvbSIgZ2VuZXJhdGVzIHJhbmRvbWl6ZWQgdGlja2V0IG51bWJlcnMgaW4gdGhlIGZvcm1hdCAiU3lzdGVtSUQuUmFuZG9tIiAoZS5nLiAxMDAwNTc4NjYzNTIsIDEwMzc0NTM5NDU5NikuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgbWUgYSBub3RpZmljYXRpb24gaWYgYSBjdXN0b21lciBzZW5kcyBhIGZvbGxvdyB1cCBhbmQgSVwnbSB0aGUgb3duZXIgb2YgdGhlIHRpY2tldCBvciB0aGUgdGlja2V0IGlzIHVubG9ja2VkIGFuZCBpcyBpbiBvbmUgb2YgbXkgc3Vic2NyaWJlZCBxdWV1ZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgbWUgYSBub3RpZmljYXRpb24gaWYgYSB0aWNrZXQgaXMgbW92ZWQgaW50byBvbmUgb2YgIk15IFF1ZXVlcyIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgbWUgYSBub3RpZmljYXRpb24gaWYgYSB0aWNrZXQgaXMgdW5sb2NrZWQgYnkgdGhlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZCBtZSBhIG5vdGlmaWNhdGlvbiBpZiB0aGVyZSBpcyBhIG5ldyB0aWNrZXQgaW4gIk15IFF1ZXVlcyIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgbWUgdGhlIHNhbWUgbm90aWZpY2F0aW9ucyBmb3IgbXkgd2F0Y2hlZCB0aWNrZXRzIHRoYXQgdGhlIHRpY2tldCBvd25lcnMgd2lsbCBnZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgbmV3IHRpY2tldCBub3RpZmljYXRpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgbm90aWZpY2F0aW9ucyB0byB1c2Vycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZCB0aWNrZXQgZm9sbG93IHVwIG5vdGlmaWNhdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZCB0aWNrZXQgbG9jayB0aW1lb3V0IG5vdGlmaWNhdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZCB0aWNrZXQgbW92ZSBub3RpZmljYXRpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgdGlja2V0IHdhdGNoIG5vdGlmaWNhdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZGVyIHR5cGUgZm9yIG5ldyB0aWNrZXRzIGZyb20gdGhlIGN1c3RvbWVyIGludGVmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kcyBhZ2VudCBmb2xsb3ctdXAgbm90aWZpY2F0aW9uIG9ubHkgdG8gdGhlIG93bmVyLCBpZiBhIHRpY2tldCBpcyB1bmxvY2tlZCAodGhlIGRlZmF1bHQgaXMgdG8gc2VuZCB0aGUgbm90aWZpY2F0aW9uIHRvIGFsbCBhZ2VudHMpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kcyBhbGwgb3V0Z29pbmcgZW1haWwgdmlhIGJjYyB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuIFBsZWFzZSB1c2UgdGhpcyBvbmx5IGZvciBiYWNrdXAgcmVhc29ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZHMgY3VzdG9tZXIgbm90aWZpY2F0aW9ucyBqdXN0IHRvIHRoZSBtYXBwZWQgY3VzdG9tZXIuIE5vcm1hbGx5LCBpZiBubyBjdXN0b21lciBpcyBtYXBwZWQsIHRoZSBsYXRlc3QgY3VzdG9tZXIgc2VuZGVyIGdldHMgdGhlIG5vdGlmaWNhdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZHMgcmVtaW5kZXIgbm90aWZpY2F0aW9ucyBvZiB1bmxvY2tlZCB0aWNrZXQgYWZ0ZXIgcmVhY2hpbmcgdGhlIHJlbWluZGVyIGRhdGUgKG9ubHkgc2VudCB0byB0aWNrZXQgb3duZXIpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kcyB0aGUgbm90aWZpY2F0aW9ucyB3aGljaCBhcmUgY29uZmlndXJlZCBpbiB0aGUgYWRtaW4gaW50ZXJmYWNlIHVuZGVyICJOb3RmaWNhdGlvbiAoRXZlbnQpIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBMZXZlbCBBZ3JlZW1lbnRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nlc3Npb24gTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgc2VuZGVyIGVtYWlsIGFkZHJlc3NlcyBmb3IgdGhpcyBzeXN0ZW0uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgYXJ0aWNsZXMgaW4gQWdlbnRUaWNrZXRab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGFydGljbGVzIGluIEFnZW50VGlja2V0Wm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoaXMgdGlja2V0IHRvIHBlbmRpbmchJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGlzIHRvIHllcyBpZiB5b3UgdHJ1c3QgaW4gYWxsIHlvdXIgcHVibGljIGFuZCBwcml2YXRlIHBncCBrZXlzLCBldmVuIGlmIHRoZXkgYXJlIG5vdCBjZXJ0aWZpZWQgd2l0aCBhIHRydXN0ZWQgc2lnbmF0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIGlmIHRpY2tldCBvd25lciBtdXN0IGJlIHNlbGVjdGVkIGJ5IHRoZSBhZ2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgUGVuZGluZ1RpbWUgb2YgYSB0aWNrZXQgdG8gMCBpZiB0aGUgc3RhdGUgaXMgY2hhbmdlZCB0byBhIG5vbi1wZW5kaW5nIHN0YXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBhZ2UgaW4gbWludXRlcyAoZmlyc3QgbGV2ZWwpIGZvciBoaWdobGlnaHRpbmcgcXVldWVzIHRoYXQgY29udGFpbiB1bnRvdWNoZWQgdGlja2V0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgYWdlIGluIG1pbnV0ZXMgKHNlY29uZCBsZXZlbCkgZm9yIGhpZ2hsaWdodGluZyBxdWV1ZXMgdGhhdCBjb250YWluIHVudG91Y2hlZCB0aWNrZXRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBjb25maWd1cmF0aW9uIGxldmVsIG9mIHRoZSBhZG1pbmlzdHJhdG9yLiBEZXBlbmRpbmcgb24gdGhlIGNvbmZpZyBsZXZlbCwgc29tZSBzeXNjb25maWcgb3B0aW9ucyB3aWxsIGJlIG5vdCBzaG93bi4gVGhlIGNvbmZpZyBsZXZlbHMgYXJlIGluIGluIGFzY2VuZGluZyBvcmRlcjogRXhwZXJ0LCBBZHZhbmNlZCwgQmVnaW5uZXIuIFRoZSBoaWdoZXIgdGhlIGNvbmZpZyBsZXZlbCBpcyAoZS5nLiBCZWdpbm5lciBpcyB0aGUgaGlnaGVzdCksIHRoZSBsZXNzIGxpa2VseSBpcyBpdCB0aGF0IHRoZSB1c2VyIGNhbiBhY2NpZGVudGFsbHkgY29uZmlndXJlIHRoZSBzeXN0ZW0gaW4gYSB3YXkgdGhhdCBpdCBpcyBub3QgdXNhYmxlIGFueSBtb3JlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGFydGljbGUgdHlwZSBmb3IgbmV3IGVtYWlsIHRpY2tldHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBhcnRpY2xlIHR5cGUgZm9yIG5ldyBwaG9uZSB0aWNrZXRzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgYm9keSB0ZXh0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBtb3ZlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBub3RlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgYm9keSB0ZXh0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBwcmlvcml0eSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgYm9keSB0ZXh0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGNoYXJzZXQgZm9yIHRoZSB3ZWIgaW50ZXJmYWNlIHRvIHVzZSAoc2hvdWxkIHJlcHJlc2VudCB0aGUgY2hhcnNldCB1c2VkIHRvIGNyZWF0ZSB0aGUgZGF0YWJhc2Ugb3IsIGluIHNvbWUgY2FzZXMsIHRoZSBkYXRhYmFzZSBtYW5hZ2VtZW50IHN5c3RlbSBiZWluZyB1c2VkKS4gInV0Zi04IiBpcyBhIGdvb2QgY2hvaWNlIGZvciBlbnZpcm9ubWVudHMgZXhwZWN0aW5nIG1hbnkgY2hhcnNldHMuIFlvdSBjYW4gc3BlY2lmeSBhbm90aGVyIGNoYXJzZXQgaGVyZSAoaS5lLiAiaXNvLTg4NTktMSIpLiBQbGVhc2UgYmUgc3VyZSB0aGF0IHlvdSB3aWxsIG5vdCBiZSByZWNlaXZpbmcgZm9yZWlnbiBlbWFpbHMsIG9yIHRleHQsIG90aGVyd2lzZSB0aGlzIGNvdWxkIGxlYWQgdG8gcHJvYmxlbXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgbGluayB0eXBlIG9mIHNwbGl0dGVkIHRpY2tldHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIGZvciBuZXcgcGhvbmUgdGlja2V0cyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IG5leHQgdGlja2V0IHN0YXRlLCBhZnRlciB0aGUgY3JlYXRpb24gb2YgYW4gZW1haWwgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgbm90ZSB0ZXh0IGZvciBuZXcgdGVsZXBob25lIHRpY2tldHMuIEUuZyBcJ05ldyB0aWNrZXQgdmlhIGNhbGxcJyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHByaW9yaXR5IGZvciBuZXcgZW1haWwgdGlja2V0cyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHByaW9yaXR5IGZvciBuZXcgcGhvbmUgdGlja2V0cyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHNlbmRlciB0eXBlIGZvciBuZXcgZW1haWwgdGlja2V0cyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHNlbmRlciB0eXBlIGZvciBuZXcgcGhvbmUgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgc3ViamVjdCBmb3IgbmV3IGVtYWlsIHRpY2tldHMgKGUuZy4gXCdlbWFpbCBPdXRib3VuZFwnKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5ldyBwaG9uZSB0aWNrZXRzIChlLmcuIFwnUGhvbmUgY2FsbFwnKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgc3ViamVjdCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBtb3ZlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgdGV4dCBmb3IgbmV3IGVtYWlsIHRpY2tldHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGlzcGxheSBvcmRlciBvZiB0aGUgZGlmZmVyZW50IGl0ZW1zIGluIHRoZSBwcmVmZXJlbmNlcyB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBpbmFjdGl2aXR5IHRpbWUgKGluIHNlY29uZHMpIHRvIHBhc3MgYmVmb3JlIGEgc2Vzc2lvbiBpcyBraWxsZWQgYW5kIGEgdXNlciBpcyBsb2dlZCBvdXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIG1heGltYWwgbnVtYmVyIG9mIHNlYXJjaCByZXN1bHRzIGZvciB0aGUgYXV0b2NvbXBsZXRlIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIG1pbmltYWwgdGlja2V0IGNvdW50ZXIgc2l6ZSAoaWYgIkF1dG9JbmNyZW1lbnQiIHdhcyBzZWxlY3RlZCBhcyBUaWNrZXROdW1iZXJHZW5lcmF0b3IpLiBEZWZhdWx0IGlzIDUsIHRoaXMgbWVhbnMgdGhlIGNvdW50ZXIgc3RhcnRzIGZyb20gMTAwMDAuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYmVmb3JlIGF1dG9jb21wbGV0ZSBxdWVyeSBpcyBzZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBudW1iZXIgb2YgbGluZXMgdGhhdCBhcmUgZGlzcGxheWVkIGluIHRleHQgbWVzc2FnZXMgKGUuZy4gdGlja2V0IGxpbmVzIGluIHRoZSBRdWV1ZVpvb20pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBudW1iZXIgb2YgbGluZXMgdGhhdCBhcmUgZGlzcGxheWVkIGluIHRoZSBwcmV2aWV3IG9mIG1lc3NhZ2VzIChlLmcuIGZvciB0aWNrZXRzIGluIHRoZSBRdWV1ZVZpZXcpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBudW1iZXIgb2Ygc2VhcmNoIHJlc3VsdHMgdG8gYmUgZGlzcGxheWVkIGZvciB0aGUgYXV0b2NvbXBsZXRlIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIG9wdGlvbnMgZm9yIFBHUCBiaW5hcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIG9yZGVyIG9mIHRoZSBkaWZmZXJlbnQgaXRlbXMgaW4gdGhlIGN1c3RvbWVyIHByZWZlcmVuY2VzIHZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHBhc3N3b3JkIGZvciBwcml2YXRlIFBHUCBrZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHByZWZlcmVkIHRpbWUgdW5pdHMgKGUuZy4gd29yayB1bml0cywgaG91cnMsIG1pbnV0ZXMpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBwcmVmaXggdG8gdGhlIHNjcmlwdHMgZm9sZGVyIG9uIHRoZSBzZXJ2ZXIsIGFzIGNvbmZpZ3VyZWQgb24gdGhlIHdlYiBzZXJ2ZXIuIFRoaXMgc2V0dGluZyBpcyB1c2VkIGFzIGEgdmFyaWFibGUsIE9UUlNfQ09ORklHX1NjcmlwdEFsaWFzIHdoaWNoIGlzIGZvdW5kIGluIGFsbCBmb3JtcyBvZiBtZXNzYWdpbmcgdXNlZCBieSB0aGUgYXBwbGljYXRpb24sIHRvIGJ1aWxkIGxpbmtzIHRvIHRoZSB0aWNrZXRzIHdpdGhpbiB0aGUgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHJlc3BvbnNpYmxlIGFnZW50IG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBidWxrIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHNlcnZpY2UgaW4gdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpTZXJ2aWNlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHNlcnZpY2UgaW4gdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6U2VydmljZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpTZXJ2aWNlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHNlcnZpY2UgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6U2VydmljZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6U2VydmljZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc2VydmljZSBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc2l6ZSBvZiB0aGUgc3RhdGlzdGljIGdyYXBoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzdGF0cyBob29rLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzeXN0ZW0gdGltZSB6b25lIChyZXF1aXJlZCBhIHN5c3RlbSB3aXRoIFVUQyBhcyBzeXN0ZW0gdGltZSkuIE90aGVyd2lzZSB0aGlzIGlzIGEgZGlmZiB0aW1lIHRvIHRoZSBsb2NhbCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgb3duZXIgaW4gdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSB0aWNrZXQgYnVsayBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgb3duZXIgaW4gdGhlIHRpY2tldCBub3RlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgb3duZXIgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgb3duZXIgaW4gdGhlIHRpY2tldCBwcmlvcml0eSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlR5cGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIHRpY2tldCBmcmVlIHRleHQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpUeXBlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCB0eXBlIGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpUeXBlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCB0eXBlIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aW1lIHR5cGUgd2hpY2ggc2hvdWxkIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aW1lb3V0IChpbiBzZWNvbmRzKSBmb3IgaHR0cC9mdHAgZG93bmxvYWRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aW1lb3V0IChpbiBzZWNvbmRzKSBmb3IgcGFja2FnZSBkb3dubG9hZHMuIE92ZXJ3cml0ZXMgIldlYlVzZXJBZ2VudDo6VGltZW91dCIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHVzZXIgdGltZSB6b25lIHBlciB1c2VyIChyZXF1aXJlZCBhIHN5c3RlbSB3aXRoIFVUQyBhcyBzeXN0ZW0gdGltZSBhbmQgVVRDIHVuZGVyIFRpbWVab25lKS4gT3RoZXJ3aXNlIHRoaXMgaXMgYSBkaWZmIHRpbWUgdG8gdGhlIGxvY2FsIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHVzZXIgdGltZSB6b25lIHBlciB1c2VyIGJhc2VkIG9uIGphdmEgc2NyaXB0IC8gYnJvd3NlciB0aW1lIHpvbmUgb2Zmc2V0IGZlYXR1cmUgYXQgbG9naW4gdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3IgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3Igd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhIHJlc3BvbnNpYmxlIHNlbGVjdGlvbiBpbiBwaG9uZSBhbmQgZW1haWwgdGlja2V0cyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFydGljbGUgYXMgcmljaCB0ZXh0IGV2ZW4gaWYgcmljaCB0ZXh0IHdyaXRpbmcgaXMgZGlzYWJsZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdGhpcyBzY3JlZW4gYWZ0ZXIgSSBjcmVhdGVkIGEgbmV3IHRpY2tldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGNvdW50IG9mIGljb25zIGluIHRoZSB0aWNrZXQgem9vbSwgaWYgdGhlIGFydGljbGUgaGFzIGF0dGFjaG1lbnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgZm9yIHN1YnNjcmliaW5nIC8gdW5zdWJzY3JpYmluZyBmcm9tIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBjaGFuZ2luZyB0aGUgd29yayBvcmRlciBhZ2VudCwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmsgb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgY2hhbmdlIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgY2hhbmdlLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSB3b3JrIG9yZGVyIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgd29yayBvcmRlciwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGVkaXRpbmcgdGhlIHJlcG9ydCBvZiBhIHdvcmtkIG9yZGVyLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29yayBvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNoYW5nZSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgdGlja2V0IHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSB3b3JrIG9yZGVyIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmsgb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIG1lcmdpbmcgdGlja2V0cyBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbW92aW5nIHRoZSB0aW1lIHNsb3Qgb2YgYSBjaGFuZ2UgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdGFraW5nIGEgd29yayBvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBjb25kaXRpb25zIG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgd29yayBvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWRkIGEgZnJlZSB0ZXh0IGZpZWxkIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSBub3RlIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSBub3RlIHRvIGEgdGlja2V0IGluIGV2ZXJ5IHRpY2tldCBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWRkIGEgd29yayBvcmRlciBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gY2xvc2UgYSB0aWNrZXQgaW4gZXZlcnkgdGlja2V0IG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBjbG9zZSBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgdGlja2V0IGluIGV2ZXJ5IHRpY2tldCBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBBZGRpdGlvbmFsIGFjY2VzcyBjb250cm9sIHRvIHNob3cgb3Igbm90IHNob3cgdGhpcyBsaW5rIGNhbiBiZSBkb25lIGJ5IHVzaW5nIEtleSAiR3JvdXAiIGFuZCBDb250ZW50IGxpa2UgInJ3Omdyb3VwMTttb3ZlX2ludG86Z3JvdXAyIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBBZGRpdGlvbmFsIGFjY2VzcyBjb250cm9sIHRvIHNob3cgb3Igbm90IHNob3cgdGhpcyBsaW5rIGNhbiBiZSBkb25lIGJ5IHVzaW5nIEtleSAiR3JvdXAiIGFuZCBDb250ZW50IGxpa2UgInJ3Omdyb3VwMTttb3ZlX2ludG86Z3JvdXAyIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIHdvcmsgb3JkZXIgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIHdvcmsgb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIHdvcmsgb3JkZXIgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBsb2NrIC8gdW5sb2NrIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgb3ZlcnZpZXdzIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBsb2NrL3VubG9jayB0aWNrZXRzIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBtb3ZlIGEgdGlja2V0IGluIGV2ZXJ5IHRpY2tldCBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgdGlja2V0IG9yIGFuIGFydGljbGUgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgd29yayBvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gc2VlIHRoZSBjdXN0b21lciB3aG8gcmVxdWVzdGVkIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNlZSB0aGUgaGlzdG9yeSBvZiBhIHRpY2tldCBpbiBldmVyeSB0aWNrZXQgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNlZSB0aGUgb3duZXIgb2YgYSB0aWNrZXQgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNlZSB0aGUgcHJpb3JpdHkgb2YgYSB0aWNrZXQgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNlZSB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgYSB0aWNrZXQgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNldCBhIHRpY2tldCBhcyBwZW5kaW5nIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBzZXQgYSB0aWNrZXQgYXMgc3BhbSBpbiBldmVyeSB0aWNrZXQgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gQWRkaXRpb25hbCBhY2Nlc3MgY29udHJvbCB0byBzaG93IG9yIG5vdCBzaG93IHRoaXMgbGluayBjYW4gYmUgZG9uZSBieSB1c2luZyBLZXkgIkdyb3VwIiBhbmQgQ29udGVudCBsaWtlICJydzpncm91cDE7bW92ZV9pbnRvOmdyb3VwMiIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBzZXQgdGhlIHByaW9yaXR5IG9mIGEgdGlja2V0IGluIGV2ZXJ5IHRpY2tldCBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gem9vbSBhIHRpY2tldCBpbiB0aGUgdGlja2V0IG92ZXJ2aWV3cyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgdG8gYWNjZXNzIGFydGljbGUgYXR0YWNobWVudHMgdmlhIGEgaHRtbCBvbmxpbmUgdmlld2VyIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIGFydGljbGUgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIHRvIGRvd25sb2FkIGFydGljbGUgYXR0YWNobWVudHMgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgYXJ0aWNsZSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgdG8gc2VlIGEgem9vbWVkIGVtYWlsIHRpY2tldCBpbiBwbGFpbiB0ZXh0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgdG8gc2V0IGEgdGlja2V0IGFzIHNwYW0gaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gQWRkaXRpb25hbCBhY2Nlc3MgY29udHJvbCB0byBzaG93IG9yIG5vdCBzaG93IHRoaXMgbGluayBjYW4gYmUgZG9uZSBieSB1c2luZyBLZXkgIkdyb3VwIiBhbmQgQ29udGVudCBsaWtlICJydzpncm91cDE7bW92ZV9pbnRvOmdyb3VwMiIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgaW52b2x2ZWQgYWdlbnRzIG9uIHRoaXMgdGlja2V0LCBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgaW52b2x2ZWQgYWdlbnRzIG9uIHRoaXMgdGlja2V0LCBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgaW52b2x2ZWQgYWdlbnRzIG9uIHRoaXMgdGlja2V0LCBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgaW52b2x2ZWQgYWdlbnRzIG9uIHRoaXMgdGlja2V0LCBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBwb3NzaWJsZSBhZ2VudHMgKGFsbCBhZ2VudHMgd2l0aCBub3RlIHBlcm1pc3Npb25zIG9uIHRoZSBxdWV1ZS90aWNrZXQpIHRvIGRldGVybWluZSB3aG8gc2hvdWxkIGJlIGluZm9ybWVkIGFib3V0IHRoaXMgbm90ZSwgaW4gdGhlIGNsb3NlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBwb3NzaWJsZSBhZ2VudHMgKGFsbCBhZ2VudHMgd2l0aCBub3RlIHBlcm1pc3Npb25zIG9uIHRoZSBxdWV1ZS90aWNrZXQpIHRvIGRldGVybWluZSB3aG8gc2hvdWxkIGJlIGluZm9ybWVkIGFib3V0IHRoaXMgbm90ZSwgaW4gdGhlIHRpY2tldCBub3RlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBwb3NzaWJsZSBhZ2VudHMgKGFsbCBhZ2VudHMgd2l0aCBub3RlIHBlcm1pc3Npb25zIG9uIHRoZSBxdWV1ZS90aWNrZXQpIHRvIGRldGVybWluZSB3aG8gc2hvdWxkIGJlIGluZm9ybWVkIGFib3V0IHRoaXMgbm90ZSwgaW4gdGhlIHRpY2tldCBvd25lciBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIHBvc3NpYmxlIGFnZW50cyAoYWxsIGFnZW50cyB3aXRoIG5vdGUgcGVybWlzc2lvbnMgb24gdGhlIHF1ZXVlL3RpY2tldCkgdG8gZGV0ZXJtaW5lIHdobyBzaG91bGQgYmUgaW5mb3JtZWQgYWJvdXQgdGhpcyBub3RlLCBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBwb3NzaWJsZSBhZ2VudHMgKGFsbCBhZ2VudHMgd2l0aCBub3RlIHBlcm1pc3Npb25zIG9uIHRoZSBxdWV1ZS90aWNrZXQpIHRvIGRldGVybWluZSB3aG8gc2hvdWxkIGJlIGluZm9ybWVkIGFib3V0IHRoaXMgbm90ZSwgaW4gdGhlIHRpY2tldCBwcmlvcml0eSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIHBvc3NpYmxlIGFnZW50cyAoYWxsIGFnZW50cyB3aXRoIG5vdGUgcGVybWlzc2lvbnMgb24gdGhlIHF1ZXVlL3RpY2tldCkgdG8gZGV0ZXJtaW5lIHdobyBzaG91bGQgYmUgaW5mb3JtZWQgYWJvdXQgdGhpcyBub3RlLCBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIHByZXZpZXcgb2YgdGhlIHRpY2tldCBvdmVydmlldyAoQ3VzdG9tZXJJbmZvID0+IDEgLSBzaG93cyBhbHNvIEN1c3RvbWVyLUluZm8sIEN1c3RvbWVySW5mb01heFNpemUgbWF4LiBzaXplIGluIGNoYXJhY3RlcnMgb2YgQ3VzdG9tZXItSW5mbykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGFsbCBib3RoIHJvIGFuZCBydyBxdWV1ZXMgaW4gdGhlIHF1ZXVlIHZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGFsbCBvcGVuIHRpY2tldHMgKGV2ZW4gaWYgdGhleSBhcmUgbG9ja2VkKSBpbiB0aGUgZXNjYWxhdGlvbiB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGFsbCBvcGVuIHRpY2tldHMgKGV2ZW4gaWYgdGhleSBhcmUgbG9ja2VkKSBpbiB0aGUgc3RhdHVzIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYWxsIHRoZSBhcnRpY2xlcyBvZiB0aGUgdGlja2V0IChleHBhbmRlZCkgaW4gdGhlIHpvb20gdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYWxsIHRoZSBjdXN0b21lciBpZGVudGlmaWVycyBpbiBhIG11bHRpLXNlbGVjdCBmaWVsZCAobm90IHVzZWZ1bCBpZiB5b3UgaGF2ZSBhIGxvdCBvZiBjdXN0b21lciBpZGVudGlmaWVycykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGFuIG93bmVyIHNlbGVjdGlvbiBpbiBwaG9uZSBhbmQgZW1haWwgdGlja2V0cyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBjdXN0b21lciBoaXN0b3J5IHRpY2tldHMgaW4gQWdlbnRUaWNrZXRQaG9uZSwgQWdlbnRUaWNrZXRFbWFpbCBhbmQgQWdlbnRUaWNrZXRDdXN0b21lci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgZWl0aGVyIHRoZSBsYXN0IGN1c3RvbWVyIGFydGljbGVcJ3Mgc3ViamVjdCBvciB0aGUgdGlja2V0IHRpdGxlIGluIHRoZSBzbWFsbCBmb3JtYXQgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGV4aXN0aW5nIHBhcmVudC9jaGlsZCBxdWV1ZSBsaXN0cyBpbiB0aGUgc3lzdGVtIGluIHRoZSBmb3JtIG9mIGEgdHJlZSBvciBhIGxpc3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBhY3RpdmF0ZWQgdGlja2V0IGF0dHJpYnV0ZXMgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZSAoMCA9IERpc2FibGVkIGFuZCAxID0gRW5hYmxlZCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBhcnRpY2xlcyBzb3J0ZWQgbm9ybWFsbHkgb3IgaW4gcmV2ZXJzZSwgdW5kZXIgdGlja2V0IHpvb20gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNoYW5nZSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjdXN0b21lciB1c2VyIGluZm9ybWF0aW9uIChwaG9uZSBhbmQgZW1haWwpIGluIHRoZSBjb21wb3NlIHNjcmVlbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGN1c3RvbWVyIHVzZXJcJ3MgaW5mbyBpbiB0aGUgdGlja2V0IHpvb20gdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIG1lc3NhZ2Ugb2YgdGhlIGRheSAoTU9URCkgaW4gdGhlIGFnZW50IGRhc2hib2FyZC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgaW5kaWNhdGVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIG1lc3NhZ2Ugb2YgdGhlIGRheSBvbiBsb2dpbiBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgaGlzdG9yeSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgbW92ZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgdGlja2V0IGJ1bGsgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGlja2V0IHByaW9yaXR5IG9wdGlvbnMgaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGlja2V0IHByaW9yaXR5IG9wdGlvbnMgaW4gdGhlIHRpY2tldCByZXNwb25zaWJsZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkcyBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGRzIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGRzIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkcyBpbiB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkcyBpbiB0aGUgdGlja2V0IHBlbmRpbmcgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGRzIGluIHRoZSB0aWNrZXQgcHJpb3JpdHkgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGRzIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRpbWUgaW4gbG9uZyBmb3JtYXQgKGRheXMsIGhvdXJzLCBtaW51dGVzKSwgaWYgc2V0IHRvICJZZXMiOyBvciBpbiBzaG9ydCBmb3JtYXQgKGRheXMsIGhvdXJzKSwgaWYgc2V0IHRvICJObyIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRpbWUgdXNlIGNvbXBsZXRlIGRlc2NyaXB0aW9uIChkYXlzLCBob3VycywgbWludXRlcyksIGlmIHNldCB0byAiWWVzIjsgb3IganVzdCBmaXJzdCBsZXR0ZXIgKGQsIGgsIG0pLCBpZiBzZXQgdG8gIk5vIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2lnbmF0dXJlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTa2luJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NvcnRzIHRoZSB0aWNrZXRzIChhc2NlbmRpbmdseSBvciBkZXNjZW5kaW5nbHkpIHdoZW4gYSBzaW5nbGUgcXVldWUgaXMgc2VsZWN0ZWQgaW4gdGhlIHF1ZXVlIHZpZXcgYW5kIGFmdGVyIHRoZSB0aWNrZXRzIGFyZSBzb3J0ZWQgYnkgcHJpb3JpdHkuIFZhbHVlczogMCA9IGFzY2VuZGluZyAob2xkZXN0IG9uIHRvcCwgZGVmYXVsdCksIDEgPSBkZXNjZW5kaW5nICh5b3VuZ2VzdCBvbiB0b3ApLiBVc2UgdGhlIFF1ZXVlSUQgZm9yIHRoZSBrZXkgYW5kIDAgb3IgMSBmb3IgdmFsdWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwYW0gQXNzYXNzaW4gZXhhbXBsZSBzZXR1cC4gSWdub3JlcyBlbWFpbHMgdGhhdCBhcmUgbWFya2VkIHdpdGggU3BhbUFzc2Fzc2luLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGFtIEFzc2Fzc2luIGV4YW1wbGUgc2V0dXAuIE1vdmVzIG1hcmtlZCBtYWlscyB0byBzcGFtIHF1ZXVlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgaWYgYW4gYWdlbnQgc2hvdWxkIHJlY2VpdmUgZW1haWwgbm90aWZpY2F0aW9uIG9mIGhpcyBvd24gYWN0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBjaGFydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBwaWN0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIGJvcmRlciBjb2xvciBvZiB0aGUgY2hhcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgYm9yZGVyIGNvbG9yIG9mIHRoZSBsZWdlbmQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgYm90dG9tIG1hcmdpbiBvZiB0aGUgY2hhcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZGlmZmVyZW50IGFydGljbGUgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgaW4gdGhlIHN5c3RlbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBkaWZmZXJlbnQgbm90ZSB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgc3lzdGVtLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgZGF0YSBpbiwgaWYgIkZTIiB3YXMgc2VsZWN0ZWQgZm9yIFRpY2tldFN0b3JhZ2VNb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHdoZXJlIFNTTCBjZXJ0aWZpY2F0ZXMgYXJlIHN0b3JlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgcHJpdmF0ZSBTU0wgY2VydGlmaWNhdGVzIGFyZSBzdG9yZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZW1haWwgYWRkcmVzcyB0aGF0IHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiB3aGVuIHNlbmRpbmcgbm90aWZpY2F0aW9ucy4gVGhlIGVtYWlsIGFkZHJlc3MgaXMgdXNlZCB0byBidWlsZCB0aGUgY29tcGxldGUgZGlzcGxheSBuYW1lIGZvciB0aGUgbm90aWZpY2F0aW9uIG1hc3RlciAoaS5lLiAiT1RSUyBOb3RpZmljYXRpb24gTWFzdGVyIiBvdHJzQHlvdXIuZXhhbXBsZS5jb20pLiBZb3UgY2FuIHVzZSB0aGUgT1RSU19DT05GSUdfRlFETiB2YXJpYWJsZSBhcyBzZXQgaW4geW91ciBjb25maWd1YXRpb24sIG9yIGNob29zZSBhbm90aGVyIGVtYWlsIGFkZHJlc3MuIE5vdGlmaWNhdGlvbnMgYXJlIG1lc3NhZ2VzIHN1Y2ggYXMgZW46OkN1c3RvbWVyOjpRdWV1ZVVwZGF0ZSBvciBlbjo6QWdlbnQ6Ok1vdmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgbGVmdCBtYXJnaW4gb2YgdGhlIGNoYXJ0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIG5hbWUgdGhhdCBzaG91bGQgYmUgdXNlZCBieSB0aGUgYXBwbGljYXRpb24gd2hlbiBzZW5kaW5nIG5vdGlmaWNhdGlvbnMuIFRoZSBzZW5kZXIgbmFtZSBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBjb21wbGV0ZSBkaXNwbGF5IG5hbWUgZm9yIHRoZSBub3RpZmljYXRpb24gbWFzdGVyIChpLmUuICJPVFJTIE5vdGlmaWNhdGlvbiBNYXN0ZXIiIG90cnNAeW91ci5leGFtcGxlLmNvbSkuIE5vdGlmaWNhdGlvbnMgYXJlIG1lc3NhZ2VzIHN1Y2ggYXMgZW46OkN1c3RvbWVyOjpRdWV1ZVVwZGF0ZSBvciBlbjo6QWdlbnQ6Ok1vdmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgcGF0aCBvZiB0aGUgZmlsZSBmb3IgdGhlIGxvZ28gaW4gdGhlIHBhZ2UgaGVhZGVyIChnaWZ8anBnfHBuZywgNzAwIHggMTAwIHBpeGVsKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBwYXRoIG9mIHRoZSBmaWxlIGZvciB0aGUgcGVyZm9ybWFuY2UgbG9nLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGNvbnZlcnRlciB0aGF0IGFsbG93cyB0aGUgdmlldyBvZiBNaWNyb3NvZnQgRXhjZWwgZmlsZXMsIGluIHRoZSB3ZWIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGNvbnZlcnRlciB0aGF0IGFsbG93cyB0aGUgdmlldyBvZiBNaWNyb3NvZnQgV29yZCBmaWxlcywgaW4gdGhlIHdlYiBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgY29udmVydGVyIHRoYXQgYWxsb3dzIHRoZSB2aWV3IG9mIFBERiBkb2N1bWVudHMsIGluIHRoZSB3ZWIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGNvbnZlcnRlciB0aGF0IGFsbG93cyB0aGUgdmlldyBvZiBYTUwgZmlsZXMsIGluIHRoZSB3ZWIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIHJpZ2h0IG1hcmdpbiBvZiB0aGUgY2hhcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgdGV4dCBjb2xvciBvZiB0aGUgY2hhcnQgKGUuIGcuIGNhcHRpb24pLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIHRleHQgY29sb3Igb2YgdGhlIGxlZ2VuZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSB0ZXh0IHRoYXQgc2hvdWxkIGFwcGVhciBpbiB0aGUgbG9nIGZpbGUgdG8gZGVub3RlIGEgQ0dJIHNjcmlwdCBlbnRyeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSB0b3AgbWFyZ2luIG9mIHRoZSBjaGFydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHVzZXIgaWQgb2YgdGhlIHBvc3RtYXN0ZXIgZGF0YSBiYXNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVsbGluZyBEaWN0aW9uYXJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YW5kYXJkIGF2YWlsYWJsZSBwZXJtaXNzaW9ucyBmb3IgYWdlbnRzIHdpdGhpbiB0aGUgYXBwbGljYXRpb24uIElmIG1vcmUgcGVybWlzc2lvbnMgYXJlIG5lZWRlZCwgdGhleSBjYW4gYmUgZW50ZXJlZCBoZXJlLiBQZXJtaXNzaW9ucyBtdXN0IGJlIGRlZmluZWQgdG8gYmUgZWZmZWN0aXZlLiBTb21lIG90aGVyIGdvb2QgcGVybWlzc2lvbnMgaGF2ZSBhbHNvIGJlZW4gcHJvdmlkZWQgYnVpbHQtaW46IG5vdGUsIGNsb3NlLCBwZW5kaW5nLCBjdXN0b21lciwgZnJlZXRleHQsIG1vdmUsIGNvbXBvc2UsIHJlc3BvbnNpYmxlLCBmb3J3YXJkLCBhbmQgYm91bmNlLiBNYWtlIHN1cmUgdGhhdCAicnciIGlzIGFsd2F5cyB0aGUgbGFzdCByZWdpc3RlcmVkIHBlcm1pc3Npb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXJ0IG51bWJlciBmb3Igc3RhdGlzdGljcyBjb3VudGluZy4gRXZlcnkgbmV3IHN0YXQgaW5jcmVtZW50cyB0aGlzIG51bWJlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdGUgTWFjaGluZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdGlzdGljcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0dXMgdmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdG9yZXMgY29va2llcyBhZnRlciB0aGUgYnJvd3NlciBoYXMgYmVlbiBjbG9zZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0cmlwcyBlbXB0eSBsaW5lcyBvbiB0aGUgdGlja2V0IHByZXZpZXcgaW4gdGhlIHF1ZXVlIHZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N5c3RlbSBMb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlICJiaW4vUG9zdE1hc3Rlck1haWxBY2NvdW50LnBsIiB3aWxsIHJlY29ubmVjdCB0byBQT1AzL1BPUDNTL0lNQVAvSU1BUFMgaG9zdCBhZnRlciB0aGUgc3BlY2lmaWVkIGNvdW50IG9mIG1lc3NhZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWdlbnQgc2tpblwncyBJbnRlcm5hbE5hbWUgd2hpY2ggc2hvdWxkIGJlIHVzZWQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFibGUgc2tpbnMgaW4gRnJvbnRlbmQ6OkFnZW50OjpTa2lucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGN1c3RvbWVyIHNraW5cJ3MgSW50ZXJuYWxOYW1lIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmxlIHNraW5zIGluIEZyb250ZW5kOjpDdXN0b21lcjo6U2tpbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBkaXZpZGVyIGJldHdlZW4gVGlja2V0SG9vayBhbmQgdGlja2V0IG51bWJlci4gRS5nIFwnOiBcJy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGZvcm1hdCBvZiB0aGUgc3ViamVjdC4gXCdMZWZ0XCcgbWVhbnMgXCdbVGlja2V0SG9vayM6MTIzNDVdIFNvbWUgU3ViamVjdFwnLCBcJ1JpZ2h0XCcgbWVhbnMgXCdTb21lIFN1YmplY3QgW1RpY2tldEhvb2sjOjEyMzQ1XVwnLCBcJ05vbmVcJyBtZWFucyBcJ1NvbWUgU3ViamVjdFwnIGFuZCBubyB0aWNrZXQgbnVtYmVyLiBJbiB0aGUgbGFzdCBjYXNlIHlvdSBzaG91bGQgZW5hYmxlIFBvc3RtYXN0ZXJGb2xsb3d1cFNlYXJjaEluUmF3IG9yIFBvc3RtYXN0ZXJGb2xsb3dVcFNlYXJjaEluUmVmZXJlbmNlcyB0byByZWNvZ25pemUgZm9sbG93dXBzIGJhc2VkIG9uIGVtYWlsIGhlYWRlcnMgYW5kL29yIGJvZHkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBoZWFkbGluZSBzaG93biBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjaGFuZ2UsIGUuZy4gQ2hhbmdlIywgTXlDaGFuZ2UjLiBUaGUgZGVmYXVsdCBpcyBDaGFuZ2UjLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSB0aWNrZXQsIGUuZy4gVGlja2V0IywgQ2FsbCMsIE15VGlja2V0Iy4gVGhlIGRlZmF1bHQgaXMgVGlja2V0Iy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgd29ya29yZGVyLCBlLmcuIFdvcmtvcmRlciMsIE15V29ya29yZGVyIy4gVGhlIGRlZmF1bHQgaXMgV29ya29yZGVyIy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGxvZ28gc2hvd24gaW4gdGhlIGhlYWRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBUaGUgVVJMIHRvIHRoZSBpbWFnZSBtdXN0IGJlIGEgcmVsYXRpdmUgVVJMIHRvIHRoZSBza2luIGltYWdlIGRpcmVjdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGxvZ28gc2hvd24gaW4gdGhlIGhlYWRlciBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBUaGUgVVJMIHRvIHRoZSBpbWFnZSBtdXN0IGJlIGEgcmVsYXRpdmUgVVJMIHRvIHRoZSBza2luIGltYWdlIGRpcmVjdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGxvZ28gc2hvd24gb24gdG9wIG9mIHRoZSBsb2dpbiBib3ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4gVGhlIFVSTCB0byB0aGUgaW1hZ2UgbXVzdCBiZSByZWxhdGl2ZSBVUkwgdG8gdGhlIHNraW4gaW1hZ2UgZGlyZWN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGV4dCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdWJqZWN0IGluIGFuIGVtYWlsIHJlcGx5LCBlLmcuIFJFLCBBVywgb3IgQVMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZXh0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN1YmplY3Qgd2hlbiBhbiBlbWFpbCBpcyBmb3J3YXJkZWQsIGUuZy4gRlcsIEZ3ZCwgb3IgV0cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgQUNMIG1vZHVsZSByZXN0cmljdHMgdGhlIHVzdWFnZSBvZiB0aGUgdGlja2V0IHR5cGVzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb24gXCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXNcJywgdG8gdXNlcnMgb2YgdGhlIGdyb3VwcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpSZXN0cmljdFRpY2tldFR5cGVzOjpHcm91cHMiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBhbmQgaXRzIFByZVJ1bigpIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQsIGlmIGRlZmluZWQsIGZvciBldmVyeSByZXF1ZXN0LiBUaGlzIG1vZHVsZSBpcyB1c2VmdWwgdG8gY2hlY2sgc29tZSB1c2VyIG9wdGlvbnMgb3IgdG8gZGlzcGxheSBuZXdzIGFib3V0IG5ldyBhcHBsaWNhdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBPdmVydmlldyAiTWVkaXVtIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgT3ZlcnZpZXcgIlByZXZpZXciIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmb2xsb3cgdXAgbm90aWZpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgY2xvc2UgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIGVtYWlsIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSBtb3ZlIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSBwaG9uZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IGNvbXBvc2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IGZvcndhcmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IGZyZWUgdGV4dCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgbWVzc2FnZSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4gTk9URS4gSWYgeW91IHdhbnQgdG8gZGlzcGxheSB0aGVzZSBmaWVsZHMgYWxzbyBpbiB0aGUgdGlja2V0IHpvb20gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZSwgeW91IGhhdmUgdG8gZW5hYmxlIHRoZW0gaW4gQ3VzdG9tZXJUaWNrZXRab29tIyMjQXR0cmlidXRlc1ZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IG5vdGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IG93bmVyIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgcGVuZGluZyBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHBob25lIG91dGJvdW5kIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBwcmlvcml0eSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHJlc3BvbnNpYmxlIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBzZWFyY2ggb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgc2VhcmNoIHNjcmVlbiBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkIGFuZCAxID0gRW5hYmxlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSBjbG9zZSB0aWNrZXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRpbWUgb3B0aW9ucyBzaG93biBpbiB0aGUgZW1haWwgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0aW1lIG9wdGlvbnMgc2hvd24gaW4gdGhlIG1vdmUgdGlja2V0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0aW1lIG9wdGlvbnMgc2hvd24gaW4gdGhlIHBob25lIHRpY2tldCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgY29tcG9zZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgZm9yd2FyZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgZnJlZSB0ZXh0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0aW1lIG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBtZXNzYWdlIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLiBOT1RFLiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IHRoZXNlIGZpZWxkcyBhbHNvIGluIHRoZSB0aWNrZXQgem9vbSBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLCB5b3UgaGF2ZSB0byBlbmFibGUgdGhlbSBpbiBDdXN0b21lclRpY2tldFpvb20jIyNBdHRyaWJ1dGVzVmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgbm90ZSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgb3duZXIgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0aW1lIG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBwZW5kaW5nIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgcGhvbmUgb3V0Ym91bmQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRpbWUgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHByaW9yaXR5IHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgcmVzcG9uc2libGUgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRpbWUgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgc2VhcmNoIHNjcmVlbiBpbiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkIGFuZCAxID0gRW5hYmxlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGxpbWl0IHBlciBwYWdlIGZvciBUaWNrZXQgT3ZlcnZpZXcgIk1lZGl1bSInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGxpbWl0IHBlciBwYWdlIGZvciBUaWNrZXQgT3ZlcnZpZXcgIlByZXZpZXciJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBsaW1pdCBwZXIgcGFnZSBmb3IgVGlja2V0IE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGxvY2sgdGltZW91dCBub3RpZmljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IG1vdmUgbm90aWZpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBvdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgd2F0Y2ggbm90aWZpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBab25lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgaW4gc2Vjb25kcyB0aGF0IGdldHMgYWRkZWQgdG8gdGhlIGFjdHVhbCB0aW1lIGlmIHNldHRpbmcgYSBwZW5kaW5nLXN0YXRlIChkZWZhdWx0OiA4NjQwMCA9IDEgZGF5KS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9vbGJhciBJdGVtIGZvciBhIHNob3J0Y3V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUdXJucyBvbiB0aGUgYW5pbWF0aW9ucyB1c2VkIGluIHRoZSBHVUkuIElmIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggdGhlc2UgYW5pbWF0aW9ucyAoZS5nLiBwZXJmb3JtYW5jZSBpc3N1ZXMpLCB5b3UgY2FuIHR1cm4gdGhlbSBvZmYgaGVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHVybnMgb24gdGhlIHJlbW90ZSBpcCBhZGRyZXNzIGNoZWNrLiBJdCBzaG91bGQgYmUgc2V0IHRvICJObyIgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIHVzZWQsIGZvciBleGFtcGxlLCB2aWEgYSBwcm94eSBmYXJtIG9yIGEgZGlhbHVwIGNvbm5lY3Rpb24sIGJlY2F1c2UgdGhlIHJlbW90ZSBpcCBhZGRyZXNzIGlzIG1vc3RseSBkaWZmZXJlbnQgZm9yIHRoZSByZXF1ZXN0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHlwZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHlwZXMgb2YgdGlja2V0cywgd2hlcmUgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgYSBsaW5rIHRvIGFkZCBhIGNoYW5nZSB3aWxsIGJlIGRpc3BsYXllZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXBkYXRlIFRpY2tldCAiU2VlbiIgZmxhZyBpZiBldmVyeSBhcnRpY2xlIGdvdCBzZWVuIG9yIGEgbmV3IEFydGljbGUgZ290IGNyZWF0ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VwZGF0ZSBhbmQgZXh0ZW5kIHlvdXIgc3lzdGVtIHdpdGggc29mdHdhcmUgcGFja2FnZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VwZGF0ZXMgdGhlIHRpY2tldCBlc2NhbGF0aW9uIGluZGV4IGFmdGVyIGEgdGlja2V0IGF0dHJpYnV0ZSBnb3QgdXBkYXRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXBkYXRlcyB0aGUgdGlja2V0IGluZGV4IGFjY2VsZXJhdG9yLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VzIENjIHJlY2lwaWVudHMgaW4gcmVwbHkgQ2MgbGlzdCBvbiBjb21wb3NlIGFuIGVtYWlsIGFuc3dlciBpbiB0aGUgdGlja2V0IGNvbXBvc2Ugc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXMgcmljaHRleHQgZm9yIHZpZXdpbmcgYW5kIGVkaXRpbmc6IGFydGljbGVzLCBzYWx1dGF0aW9ucywgc2lnbmF0dXJlcywgc3RhbmRhcmQgcmVzcG9uc2VzLCBhdXRvIHJlc3BvbnNlcyBhbmQgbm90aWZpY2F0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyBwZXJmb3JtYW5jZSBiZW5jaG1hcmsgcmVzdWx0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyBzeXN0ZW0gbG9nIG1lc3NhZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXZWFyIHRoaXMgZnJvbnRlbmQgc2tpbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaGVuIHRpY2tldHMgYXJlIG1lcmdlZCwgYSBub3RlIHdpbGwgYmUgYWRkZWQgYXV0b21hdGljYWxseSB0byB0aGUgdGlja2V0IHdoaWNoIGlzIG5vIGxvbmdlciBhY3RpdmUuIEluIHRoaXMgdGV4dCBhcmVhIHlvdSBjYW4gZGVmaW5lIHRoaXMgdGV4dCAoVGhpcyB0ZXh0IGNhbm5vdCBiZSBjaGFuZ2VkIGJ5IHRoZSBhZ2VudCkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1doZW4gdGlja2V0cyBhcmUgbWVyZ2VkLCB0aGUgY3VzdG9tZXIgY2FuIGJlIGluZm9ybWVkIHBlciBlbWFpbCBieSBzZXR0aW5nIHRoZSBjaGVjayBib3ggIkluZm9ybSBTZW5kZXIiLiBJbiB0aGlzIHRleHQgYXJlYSwgeW91IGNhbiBkZWZpbmUgYSBwcmUtZm9ybWF0dGVkIHRleHQgd2hpY2ggY2FuIGxhdGVyIGJlIG1vZGlmaWVkIGJ5IHRoZSBhZ2VudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgY2hhbmdlIHNlYXJjaCBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgYWRkIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBmcmVlIHRleHQgb3B0aW9ucyBzaG93biBpbiB0aGUgd29ya29yZGVyIGVkaXQgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgcmVwb3J0IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdXIgbGFuZ3VhZ2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91ciBxdWV1ZSBzZWxlY3Rpb24gb2YgeW91ciBmYXZvdXJpdGUgcXVldWVzLiBZb3UgYWxzbyBnZXQgbm90aWZpZWQgYWJvdXQgdGhvc2UgcXVldWVzIHZpYSBlbWFpbCBpZiBlbmFibGVkLid9ID0gJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZXNfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdDYXRlZ29yw61hIDwtPiBJbXBhY3RvIDwtPiBQcmlvcmlkYWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ2F0ZWdvcnkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ0FkbWluaXN0cmFyIGxhIHByaW9yaWRhZCByZXN1bHRhbnRlIGFsIGNvbWJpbmFyIENhdGVnb3LDrWEgPC0+IEltcGFjdG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBc2lnbmFyIHByaW9yaWRhZCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ2hhbmdlTm90aWZpY2F0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZU1hbmFnZW1lbnQgTm90aWZpY2F0aW9uIE1hbmFnZW1lbnQnfSA9ICdHZXN0acOzbiBkZSBOb3RpZmljYWNpb25lcyBkZSBDYW1iaW9zIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE5vdGlmaWNhdGlvbiBSdWxlJ30gPSAnQWdyZWdhciBSZWdsYSBkZSBOb3RpZmljYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1bGUnfSA9ICdSZWdsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG5vdGlmaWNhdGlvbiBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnwqFMYXMgTm90aWZpY2FjaW9uZXMgZGViZW4gdGVuZXIgdW4gbm9tYnJlISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkLid9ID0gJ0VsIG5vbWJyZSBlcyByZXF1ZXJpZG8nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTVN0YXRlTWFjaGluZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gU3RhdGUgTWFjaGluZSd9ID0gJ0FkbWluaXN0cmFjacOzbiBkZSBNYXF1aW5hIGRlIEVzdGFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgY2F0YWxvZyBjbGFzcyEnfSA9ICfCoVNlbGVjY2lvbmUgdW5hIGNsYXNlIGRlbCBjYXRhbG9nbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRhbG9nIGNsYXNzIGlzIHJlcXVpcmVkISd9ID0gJ8KhU2UgcmVxdWllcmUgdW5hIGNsYXNlIGRlbCBDYXTDoWxvZ28hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHN0YXRlIHRyYW5zaXRpb24nfSA9ICdBZGljaW9uYXIgdW4gZXN0YWRvIGRlIHRyYW5zaWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdDbGFzZSBkZSBDYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IE5hbWUnfSA9ICdOb21icmUgZGVsIE9iamV0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIHN0YXRlIHRyYW5zaXRpb25zIGZvcid9ID0gJ1Jlc3VtZW4gZGUgbGFzIHRyYW5zaWNpb25lcyBkZSBlc3RhZG8gcGFyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnRWxpbWluYXIgZXN0ZSBlc3RhZG8gZGUgdHJhbnNpY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgbmV3IHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAnQWRpY2lvbmFyIHVuIGVzdGFkbyBkZSB0cmFuc2ljacOzbiBudWV2byBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBzdGF0ZSEnfSA9ICfCoVBvciBmYXZvciBzZWxlY2Npb25lIHVuIGVzdGFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhIG5leHQgc3RhdGUhJ30gPSAnIVBvciBmYXZvciBzZWxlY2Npb25lIGVsIHNpZ3VpZW50ZSBlc3RhZG/CoSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IGEgc3RhdGUgdHJhbnNpdGlvbiBmb3InfSA9ICdFZGl0YXIgdW4gZXN0YWRvIGRlIHRyYW5zaWNpw7NuIHBhcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGUgc3RhdGUgdHJhbnNpdGlvbid9ID0gJ8K/UmVhbG1lbnRlIGRlc2VhIGVsaW1pbmFyIGVzdGEgdHJhbnNpY2nDs24gZGUgZXN0YWRvPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2hhbmdlJ30gPSAnQWdyZWdhciBDYW1iaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UnfSA9ICdDYW1iaW8gSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdXN0aWZpY2F0aW9uJ30gPSAnSnVzdGlmaWNhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5wdXQgaW52YWxpZC4nfSA9ICdFbnRyYWRhIGludsOhbGlkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBEYXRlJ30gPSAnRmVjaGEgc29saWNpdGFkYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgQ2hhbmdlIFRlbXBsYXRlJ30gPSAnU2VsZWNjaW9uYXIgUGxhbnRpbGxhIGRlIENhbWJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIHR5cGUnfSA9ICdUaXBvIGRlIGZlY2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgdGltZSB0eXBlLid9ID0gJ1RpcG8gZGUgaG9yYSBpbnbDoWxpZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB0aW1lJ30gPSAnTnVldm8gaW50ZXJ2YWxvIGRlIHRpZW1wbyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ0FCVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgQ2hhbmdlIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJ0d1YXJkYXIgQ29taXTDqSBkZSBDYW1iaW8gY29tbyBwbGFudGlsbGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gdG8gaW52b2x2ZWQgcGVyc29ucyBzY3JlZW4nfSA9ICd2b2x2ZXIgYSBwYW50YWxsYSBkZSBwZXJzb25hcyBpbnZvbHVjcmFkYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBOYW1lJ30gPSAnTm9tYnJlIG5vIHbDoWxpZG8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9ucyBhbmQgQWN0aW9ucyd9ID0gJ0NvbmRpY2lvbmVzIHkgQWNjaW9uZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmRpdGlvbid9ID0gJ0VsaW1pbmFyIGNvbmRpY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBjb25kaXRpb24nfSA9ICdBZ3JlZ2FyIG51ZXZhIGNvbmRpY2nDs24nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29uZGl0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWQgYSB2YWxpZCBuYW1lLid9ID0gJ1NlIHJlcXVpZXJlIHVuIG5vbWJyZSB2w6FsaWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdmFsaWQgbmFtZSBpcyBuZWVkZWQuJ30gPSAnU2UgcmVxdWllcmUgdW4gbm9tYnJlIHZhbGlkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWU6J30gPSAnTm9tYnJlIGR1cGxpY2FkbzonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBuYW1lIGlzIGFscmVhZHkgdXNlZCBieSBhbm90aGVyIGNvbmRpdGlvbi4nfSA9ICdFc3RlIG5vbWJyZSBlc3RhIHNpZW5kbyB1c2FkbyBwb3Igb3RyYSBDb25kaWNpw7NuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXRjaGluZyd9ID0gJ0NvaW5jaWRlbnRlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbnkgZXhwcmVzc2lvbiAoT1IpJ30gPSAnQ3VhbHF1aWVyIGV4cHJlc2nDs24gKE8pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBleHByZXNzaW9ucyAoQU5EKSd9ID0gJ1RvZGFzIGxhcyBleHByZXNpb25lcyAoWSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwcmVzc2lvbnMnfSA9ICdFeHByZXNpb25lcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3Rvcid9ID0gJ1NlbGVjdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdG9yJ30gPSAnT3BlcmFkb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEV4cHJlc3Npb24nfSA9ICdFbGltaW5hciBleHByZXNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEV4cHJlc3Npb25zIGZvdW5kLid9ID0gJ05vIHNlIGVuY3VlbnRyYW4gRXhwcmVzaW9uZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgZXhwcmVzc2lvbid9ID0gJ0FncmVnYXIgZXhwcmVzacOzbiBudWV2YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQWN0aW9uJ30gPSAnRWxpbWluYXIgQWNjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBBY3Rpb25zIGZvdW5kLid9ID0gJ05vIHNlIGVuY3VlbnRyYW4gQWNjaW9uZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgYWN0aW9uJ30gPSAnQWdyZWdhciBhY2Npw7NuIG51ZXZhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjaGFuZ2U/J30gPSAnwr9SZWFsbWVudGUgZGVzZWEgZWxpbWluYXIgZXN0ZSBDYW1iaW8/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0ICVzJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgJXMlcyd9ID0gJ0hpc3TDs3JpY28gZGUgJXMlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXInfSA9ICdPcmRlbiBkZSBUcmFiYWpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgZGV0YWlscyd9ID0gJ01vc3RyYXIgZGV0YWxsZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB3b3Jrb3JkZXInfSA9ICdNb3N0cmFyIE9yZGVuIGRlIFRyYWJham8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxlZCBoaXN0b3J5IGluZm9ybWF0aW9uIG9mICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGlmaWVkJ30gPSAnTW9kaWZpY2Fkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbGQgVmFsdWUnfSA9ICdWYWxvciBBbnRpZ3VvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBWYWx1ZSd9ID0gJ051ZXZvIFZhbG9yJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSW52b2x2ZWQgUGVyc29ucyBvZiAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludm9sdmVkIFBlcnNvbnMnfSA9ICdQZXJzb25hcyBJbnZvbHVjcmFkYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlTWFuYWdlcid9ID0gJ0FkbWluaXN0cmFkb3IgZGUgQ2FtYmlvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIGludmFsaWQuJ30gPSAnRWwgdXN1YXJpbyBubyBlcyB2w6FsaWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VCdWlsZGVyJ30gPSAnQ29uc3RydWN0b3IgZGUgQ2FtYmlvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQWR2aXNvcnkgQm9hcmQnfSA9ICdDb21pdMOpcyBkZSBDYW1iaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIFRlbXBsYXRlJ30gPSAnUGxhbnRpbGxhIGRlIENvbWl0w6kgZGUgQ2FtYmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcGx5IFRlbXBsYXRlJ30gPSAnQXBsaWNhciBQbGFudGlsbGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3VGVtcGxhdGUnfSA9ICdOdWV2YSBQbGFudGlsbGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSB0aGlzIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJ1NhbHZhciBDb21pdMOpIGRlIENhbWJpbyBjb21vIHBsYW50aWxsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdG8gQ0FCJ30gPSAnQWdyZWdhciBhbCBDb21pdMOpIGRlIENhbWJpb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBVc2VyJ30gPSAnVXN1YXJpbyBpbnbDoWxpZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBDQUInfSA9ICdDb21pdMOpIGRlIENhbWJpb3MgQWN0dWFsJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0FqdXN0ZXMgZGUgQ29udGV4dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlcyBwZXIgcGFnZSd9ID0gJ0NhbWJpb3MgcG9yIHDDoWdpbmEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgVGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFnZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBCdWlsZGVyJ30gPSAnQ29uc3RydWN0b3IgZGVsIENhbWJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgTWFuYWdlcid9ID0gJ0FkbWluaXN0cmFkb3IgZGVsIENhbWJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXJzJ30gPSAnT3JkZW4gZGUgVHJhYmFqbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBUaW1lJ30gPSAnRmVjaGEgZGUgU29saWNpdHVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgU3RhcnQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVuZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBTdGFydCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBFbmQgVGltZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlUmVzZXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byByZXNldCB0aGlzIGNoYW5nZT8nfSA9ICfCv1JlYWxtZW50ZSBkZXNlYSByZXNldGVhciBlc3RlIENhbWJpbz8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGUuZy4gMTAqNTE1NSBvciAxMDU2NTgqKSd9ID0gJyhlai4gMTAqNTE1NSBvIDEwNTY1OCopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBBZ2VudCd9ID0gJ0FnZW50ZSBkZWwgQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuZy4nfSA9ICdlai4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIEN1c3RvbWVyJ30gPSAnQ2xpZW50ZSBkZWwgQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIEluc3RydWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIFJlcG9ydCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBQcmlvcml0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBJbXBhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIENhdGVnb3J5J30gPSAnQ2F0ZWdvcsOtYSBkZSBDYW1iaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJlZm9yZS9hZnRlciknfSA9ICcoYW50ZXMvZGVzcHXDqXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhiZXR3ZWVuKSd9ID0gJyhlbnRyZSknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBhcyBUZW1wbGF0ZSd9ID0gJ0d1YXJkYXIgQ2FtYmlvIGNvbW8gUGxhbnRpbGxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdGVtcGxhdGUgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ8KhVW5hIHBsYW50aWxsYSBkZWJlIHRlbmVyIHVuIG5vbWJyZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHRlbXBsYXRlIG5hbWUgaXMgcmVxdWlyZWQuJ30gPSAnRWwgbm9tYnJlIGRlIGxhIHBsYW50aWxsYSBlcyBpbXByZXNjaW5kaWJsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgU3RhdGVzJ30gPSAnUmVlc3RhYmxlY2VyIEVzdGFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcndyaXRlIG9yaWdpbmFsIHRlbXBsYXRlJ30gPSAnU29icmVlc2NyaWJpciBwbGF0aWxsYSBvcmlnaW5hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgY2hhbmdlJ30gPSAnRWxpbWluYXIgY2FtYmlvIG9yaWdpbmFsJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VUaW1lU2xvdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBUaW1lIFNsb3QnfSA9ICdNb3ZlciBQZXJpb2RvIGRlIFRpZW1wbyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNpw7NuIGRlbCBDYW1iaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBFZmZvcnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWNjb3VudGVkIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEluaXRpYXRvcihzKSd9ID0gJ0luaWNpYWRvcihlcykgZGUgQ2FtYmlvKHMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQid9ID0gJ0NBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfDmmx0aW1vIGNhbWJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfDmmx0aW1vIGNhbWJpbyBwb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gYmxvY2tzLCB5b3UgbWlnaHQgbmVlZCB0byBwcmVzcyBDdHJsIG9yIENtZCBvciBTaGlmdCBrZXkgd2hpbGUgY2xpY2tpbmcgdGhlIGxpbmsgKGRlcGVuZGluZyBvbiB5b3VyIGJyb3dzZXIgYW5kIE9TKS4nfSA9CiAgICAgICAgJ1BhcmEgYWJyaXIgbGlua3MgZW4gbG9zIHNpZ3VpZW50ZXMgYmxvcXVlcyBkZSBkZXNjcmlwY2nDs24sIHBvZHJpYSBuZWNlc2l0YXIgcHJlc2lvbmFyIGxhIHRlY2xhcyBDdHJsLCBDbWQgbyBTaGlmdCBtaWVudHJhcyBwcmVzaW9uYSBlbCBsaW5rIChkZXBlbmRlIGRlbCBicm93c2VyIHkgZWwgU08pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdEZXNjYXJnYXIgQWRqdW50byc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENBQiBUZW1wbGF0ZSd9ID0gJ0VkaXRhciBQbGFudGlsbGEgZGUgQ29taXTDqSBkZSBDYW1iaW9zJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGNoYW5nZSBmcm9tIHRoaXMgdGVtcGxhdGUsIHNvIHlvdSBjYW4gZWRpdCBhbmQgc2F2ZSBpdC4nfSA9CiAgICAgICAgJ0VzdG8gY3JlYXLDoSB1biBudWV2byBjYW1iaW8gYSBwYXJ0aXIgZGUgZXN0YSBwbGFudGlsbGEsIHBhcmEgcXVlIGxvIHB1ZWRhIGVkaXRhciB5IGd1YXJkYXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuZXcgY2hhbmdlIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIGl0IGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAnRWwgbnVldm8gY2FtYmlvIHNlcsOhIGVsaW1pbmFkbyBhdXRvbcOhdGljYW1lbnRlIGx1ZWdvIGRlIHF1ZSBzZWEgZ3VhcmRhZG8gY29tbyBwbGFudGlsbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgd29ya29yZGVyIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAnRXN0byBjcmVhcsOhIHVuYSBudWV2YSBvcmRlbiBkZSB0cmFiYWpvIGEgcGFydGlyIGRlIGVzdGEgcGxhbnRpbGxhLCBwYXJhIHF1ZSBsYSBwdWVkYSBlZGl0YXIgeSBndWFyZGFyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHRlbXBvcmFyeSBjaGFuZ2Ugd2lsbCBiZSBjcmVhdGVkIHdoaWNoIGNvbnRhaW5zIHRoZSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICcgU2UgY3JlYXLDoSB1biBjYW1iaW8gdGVtcG9yYWxtZW50ZSwgZWwgY3VhbCBjb250ZW5kcsOhIGxhIG9yZGVuIGRlIHRyYWJham8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wb3JhcnkgY2hhbmdlIGFuZCBuZXcgd29ya29yZGVyIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSB3b3Jrb3JkZXIgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICdFbCBjYW1iaW8gdGVtcG9yYWwgeSBsYSBudWV2YSBvcmRlbiBkZSB0cmFiYWpvIHNlIGVsaW1pbmFyw6FuIGRlIGZvcm1hIGF1dG9tw6F0aWNhIGRlc3B1w6lzIGRlIHF1ZSBsYSBvcmRlbiBkZSB0cmFiYWpvIHNlIGhheWEgZ3VhcmRhZG8gY29tbyBwbGFudGlsbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSB3YW50IHRvIHByb2NlZWQ/J30gPSAnwr9EZXNlYSBwcm9jZWRlcj8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgSUQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb250ZW50J30gPSAnRWRpdGFyIENvbnRlbmlkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGVtcGxhdGUgQ29udGVudCd9ID0gJ0VkaXRhciBDb250ZW5pZG8gZGUgbGEgUGxhbnRpbGxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUZW1wbGF0ZSd9ID0gJ0VsaW1pbmFyIFBsYW50aWxsYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyIHRvICVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdHJ1Y3Rpb24nfSA9ICdJbnN0cnVjY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCB3b3Jrb3JkZXIgdHlwZS4nfSA9ICdUaXBvIGRlIG9yZGVuIGRlIHRyYWJham8gaW52w6FsaWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgcGxhbm5lZCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBwbGFubmVkIGVuZCB0aW1lISd9ID0gJ8KhTGEgZmVjaGEgcGxhbmVhZGEgZGUgaW5pY2lvIGRlYmUgc2VyIGFudGVyaW9yIGEgbGEgZGUgZmluYWxpemFjacOzbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBmb3JtYXQuJ30gPSAnRm9ybWF0byBubyB2w6FsaWRvLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgV29ya29yZGVyIFRlbXBsYXRlJ30gPSAnU2VsZWNjaW9uYXIgUGxhbnRpbGxhIGRlIE9yZGVuIGRlIFRyYWJham8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFnZW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFdvcmtvcmRlciBBZ2VudCBvZiAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyB3b3Jrb3JkZXI/J30gPSAnwr9SZWFsbWVudGUgZGVzZWEgZWxpbWluYXIgZXN0YSBvcmRlbiBkZSB0cmFiYWpvPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBXb3Jrb3JkZXIuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIENvbmRpdGlvbiEnfSA9CiAgICAgICAgJ8KhTm8gZXMgcG9zaWJsZSBlbGltaW5hciBlc3RhIG9yZGVuIGRlIHRyYWJham8sIHB1ZXMgZXN0w6Egc2llbmRvIHVzYWRhIGVuIGFsIG1lbm9zIHVuYSBDb25kaWNpw7NuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIFdvcmtvcmRlciBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgQ29uZGl0aW9uKHMpJ30gPSAnRXN0YSBvcmRlbiBkZSB0cmFiYWpvIHNlIHVzYSBlbiBsYShzKSBzaWd1aWVudGUocykgY29uZGljaW9uKGVzKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzLSVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgZm9sbG93aW5nIHdvcmtvcmRlcnMgYWNjb3JkaW5nbHknfSA9ICdNb3ZlciBsYXMgc2lndWllbnRlcyBvcmRlbmVzIGRlIHRyYWJham8gY29ycmVzcG9uZGllbnRlbWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhlIHBsYW5uZWQgZW5kIHRpbWUgb2YgdGhpcyB3b3Jrb3JkZXIgaXMgY2hhbmdlZCwgdGhlIHBsYW5uZWQgc3RhcnQgdGltZXMgb2YgYWxsIGZvbGxvd2luZyB3b3Jrb3JkZXJzIHdpbGwgYmUgY2hhbmdlZCBhY2NvcmRpbmdseSd9ID0KICAgICAgICAnU2kgc2UgY2FtYmlhIGxhIGhvcmEgZGUgZmluYWxpemFjacOzbiBwcmV2aXN0YSBkZSBlc3RhIG9yZGVuIGRlIHRyYWJham8gLCBsYXMgaG9yYXMgZGUgaW5pY2lvIHBsYW5pZmljYWRhcyBkZSB0b2RhcyBsYXMgc2lndWllbnRlcyDDs3JkZW5lcyBkZSB0cmFiYWpvIHNlIGNhbWJpYXLDoW4gZW4gY29uc2VjdWVuY2lhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMtJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclJlcG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBSZXBvcnQgb2YgJXMlcy0lcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnQnfSA9ICdSZXBvcnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBhY3R1YWwgc3RhcnQgdGltZSBtdXN0IGJlIGJlZm9yZSB0aGUgYWN0dWFsIGVuZCB0aW1lISd9ID0gJ8KhTGEgaG9yYSBkZSBpbmljaW8gYWN0dWFsIGRlYmUgc2VyIGFudGVyaW9yIGEgbGEgZGUgZmluYWxpemFjacOzbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgc2V0LCB3aGVuIHRoZSBhY3R1YWwgZW5kIHRpbWUgaXMgc2V0ISd9ID0KICAgICAgICAnwqFEZWJlIGVzdGFibGVjZXIgbGEgaG9yYSBkZSBpbmljaW8gYWN0dWFsIGN1YW5kbyBsYSBob3JhIGRlIHTDqXJtaW5vIGVzdMOhIGVzdGFibGVjaWRhISc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGFrZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBBZ2VudCd9ID0gJ0FnZW50ZSBBY3R1YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIHRha2UgdGhpcyB3b3Jrb3JkZXI/J30gPSAnwr9SZWFsbWVudGUgZGVzZWEgdG9tYXIgZXN0YSBvcmRlbiBkZSB0cmFiYWpvPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgV29ya29yZGVyIGFzIFRlbXBsYXRlJ30gPSAnR3VhcmRhciBPcmRlbiBkZSBUcmFiYWpvIGNvbW8gUGxhbnRpbGxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCB3b3Jrb3JkZXIgKGFuZCBzdXJyb3VuZGluZyBjaGFuZ2UpJ30gPSAnRWxpbWluYXIgb3JkZW4gZGUgdHJhYmFqbyBvcmlnaW5hbCAoeSBlbCBjYW1iaW8gcXVlIGxhIHJvZGVhKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNpw7NuIGRlIGxhIE9yZGVuIGRlIFRyYWJham8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biBub3RpZmljYXRpb24gJXMhJ30gPSAnwqFOb3RpZmljYWNpw7NuIGRlc2Nvbm9jaWRhICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSB3YXMgYW4gZXJyb3IgY3JlYXRpbmcgdGhlIG5vdGlmaWNhdGlvbi4nfSA9ICdTZSBwcm9kdWpvIHVuIGVycm9yIGFsIGNyZWFyIGxhIG5vdGlmaWNhY2nDs24uJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENoYW5nZXMnfSA9ICdSZXN1bWVuOiBDYW1iaW9zIElUU00nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUFkZC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHdpdGggVGlja2V0SUQgJXMgZG9lcyBub3QgZXhpc3QhJ30gPSAnwqFFbCBUaWNrZXQgY29uIGxhIElEICVzIG5vIGV4aXN0ZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlzc2luZyBzeXNjb25maWcgb3B0aW9uICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBhZGQgY2hhbmdlISd9ID0gJ05vIHNlIHB1ZG8gYWdyZWdhciBlbCBjYW1iaW8hJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlIGZyb20gdGVtcGxhdGUhJ30gPSAnTm8gc2UgcHVkbyBjcmVhciBlbCBjYW1iaW8gZGVzZGUgbGEgcGxhbnRpbGxhISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ0FCVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjaGFuZ2UgZm91bmQgZm9yIGNoYW5nZUlEICVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgQ0FCIG9mIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIHRoZSB0ZW1wbGF0ZS4nfSA9ICdObyBzZSBwdWRvIGFncmVnYXIgbGEgcGxhbnRpbGxhLic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQ29uZGl0aW9uSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyAlcyBpcyBnaXZlbiEnfSA9ICfCoU5vIHNlIGluZGljYSBlbCAlcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGNyZWF0ZSBuZXcgY29uZGl0aW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIENvbmRpdGlvbklEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgRXhwcmVzc2lvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBBY3Rpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgQWN0aW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBBY3Rpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3I6IFVua25vd24gZmllbGQgdHlwZSAiJXMiISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25JRCAlcyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIGdpdmVuIENoYW5nZUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBkb2VzIG5vdCBoYXZlIGFuIGFsbG93ZWQgY2hhbmdlIHN0YXRlIHRvIGJlIGRlbGV0ZWQhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY2hhbmdlSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSEnfSA9ICdObyBzZSBwdWRvIGFjdHVhbGl6YXIgZWwgQ2FtYmlvISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vua25vd24gdHlwZSAiJXMiIGVuY291bnRlcmVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSGlzdG9yeSd9ID0gJ0hpc3RvcmlhbCBkZSBjYW1iaW8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5IHpvb20sIG5vIEhpc3RvcnlFbnRyeUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5RW50cnkgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlIENBQiBmb3IgQ2hhbmdlICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU1hbmFnZXIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2VNYW5hZ2VyJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IENBQid9ID0gJ1Jlc3VtZW46IE1pIENBQic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgQ2hhbmdlcyd9ID0gJ1Jlc3VtZW46IE1pcyBDYW1iaW9zJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeVdvcmtPcmRlcnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBXb3Jrb3JkZXJzJ30gPSAnUmVzdW1lbjogTWlzIG9yZGVuZXMgZGUgdHJhYmFqbyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUElSLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUElSJ30gPSAnUmVzdW1lbjogUElSJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQU0EucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBQU0EnfSA9ICdSZXN1bWVuOiBQU0EnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBjcmVhdGUgb3V0cHV0LCBhcyB0aGUgd29ya29yZGVyIGlzIG5vdCBhdHRhY2hlZCB0byBhIGNoYW5nZSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgbm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gY2hhbmdlIHRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyJ30gPSAnT3JkZW4gZGUgVHJhYmFqbyBJVFNNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gd29ya29yZGVyIHRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIE92ZXJ2aWV3ICglcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZFN0YXJ0VGltZSd9ID0gJ0ZlY2hhIGRlIEluaWNpbyBQbGFuZWFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkRW5kVGltZSd9ID0gJ0ZlY2hhIGRlIEZpbmFsaXphY2nDs24gUGxhbmVhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsU3RhcnRUaW1lJ30gPSAnRmVjaGEgZGUgSW5pY2lvIFJlYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsRW5kVGltZSd9ID0gJ0ZlY2hhIGRlIEZpbmFsaXphY2nDs24gUmVhbCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUmVzZXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byByZXNldCBXb3JrT3JkZXIgJXMgb2YgQ2hhbmdlICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gcmVzZXQgQ2hhbmdlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlU2NoZWR1bGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2UgU2NoZWR1bGUnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VUaXRsZSd9ID0gJ1TDrXR1bG8gZGVsIENhbWJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJzJ30gPSAnT3JkZW4gZGUgVHJhYmFqbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VTdGF0ZSd9ID0gJ0VzdGFkbyBkZWwgQ2FtYmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTZWFyY2ggUmVzdWx0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29yayBPcmRlciBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVzY3JpcHRpb24nfSA9ICdDYW1iaWFyIGRlc2NyaXBjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSnVzdGlmaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFJlcG9ydCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpb3JpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEltcGFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnQ3JlYWRvciBwb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBBZ2VudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiZWZvcmUnfSA9ICdhbnRlcyAnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgdGhlIHRlbXBsYXRlICIlcyIuJ30gPSAnTm8gc2UgcHVkbyBhY3R1YWxpemFyIGxhIHBsYW50aWxsYS4gIiVzIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBjaGFuZ2UgIiVzIi4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRpbWVTbG90LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlIGNhblwndCBiZSBtb3ZlZCwgYXMgaXQgaGFzIG5vIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciBmaXJzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IG1vdmUgYSBjaGFuZ2Ugd2hpY2ggYWxyZWFkeSBoYXMgc3RhcnRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIG1vdmUgdGhlIGluZGl2aWR1YWwgd29ya29yZGVycyBpbnN0ZWFkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY3VycmVudCAlcyBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlICVzIG9mIGFsbCB3b3Jrb3JkZXJzIGhhcyB0byBiZSBkZWZpbmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gbW92ZSB0aW1lIHNsb3QgZm9yIHdvcmtvcmRlciAjJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgJXMgcGVybWlzc2lvbiEnfSA9ICfCoU5lY2VzaXRhIHBlcm1pc28gJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFRlbXBsYXRlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSB0ZW1wbGF0ZSAlcyEnfSA9ICfCoU5vIHNlIHB1ZG8gZWxpbWluYXIgbGEgcGxhbnRpbGxhICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICVzISd9ID0gJ05vIHNlIHB1ZG8gYWN0dWFsaXphciBsYSBQbGFudGlsbGEgJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgIiVzIiEnfSA9ICdObyBzZSBwdWRvIGFjdHVhbGl6YXIgbGEgUGxhbnRpbGxhICIlcyIhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSB3b3Jrb3JkZXIgZnJvbSB0ZW1wbGF0ZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBUZW1wbGF0ZSd9ID0gJ1Jlc3VtZW46IFBsYW50aWxsYSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyBvbiB0aGUgY2hhbmdlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIHdvcmtvcmRlciEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFnZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHNldCB0aGUgd29ya29yZGVyIGFnZW50IG9mIHRoZSB3b3Jrb3JkZXIgIiVzIiB0byBlbXB0eSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIHRoZSB3b3Jrb3JkZXIgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGZpbmQgQ2hhbmdlIGZvciBXb3JrT3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHdvcmtvcmRlciAlcyEnfSA9ICfCoU5vIHNlIHB1ZG8gZWxpbWluYXIgbGEgb3JkZW4gZGUgdHJhYmFqbyAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgV29ya09yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6Oid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgZW50cnkgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSBab29tJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUYWtlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdGFrZSB0aGUgd29ya29yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB3b3Jrb3JkZXIgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXQvSVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBjb25maWcgb3B0aW9uICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgb3B0aW9uICVzIG5lZWRzIHRvIGJlIGEgSEFTSCByZWYhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNvbmZpZyBvcHRpb24gZm91bmQgZm9yIHRoZSB2aWV3ICIlcyIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpdGxlOiAlcyB8IFR5cGU6ICVzJ30gPSAnVMOtdHVsbzogJXMgfCBUaXBvOiAlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IENBQnMnfSA9ICdNaXMgQ29taXTDqXMgZGUgQ2FtYmlvIChDQUJzKSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBDaGFuZ2VzJ30gPSAnTWlzIENhbWJpb3MnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015V29ya09yZGVycy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgV29yayBPcmRlcnMnfSA9ICdNaXMgw5NyZGVuZXMgZGUgVHJhYmFqbyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNoYW5nZU1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVxdWVzdGVkJ30gPSAnc29saWNpdGFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIGFwcHJvdmFsJ30gPSAnYXByb2JhY2nDs24gcGVuZGllbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlamVjdGVkJ30gPSAncmVjaGF6YWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FwcHJvdmVkJ30gPSAnYXByb2JhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW4gcHJvZ3Jlc3MnfSA9ICdlbiBwcm9ncmVzbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIHBpcid9ID0gJ3JldmlzacOzbiBwb3N0LWltcGxlbWVudGFjacOzbiBwZW5kaWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc3VjY2Vzc2Z1bCd9ID0gJ2V4aXRvc28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZmFpbGVkJ30gPSAnZmFsbGlkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjYW5jZWxlZCd9ID0gJ2NhbmNlbGFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZXRyYWN0ZWQnfSA9ICdkZXZ1ZWx0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjcmVhdGVkJ30gPSAnY3JlYWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FjY2VwdGVkJ30gPSAnYWNlcHRhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVhZHknfSA9ICdsaXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZhbCd9ID0gJ2Fwcm9iYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dvcmtvcmRlcid9ID0gJ29yZGVuIGRlIHRyYWJham8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmFja291dCd9ID0gJ3BsYW4gZGUgdnVlbHRhIGF0csOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydkZWNpc2lvbid9ID0gJ2RlY2lzacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwaXInfSA9ICdyZXZpc2nDs24gcG9zdC1pbXBsZW1lbnRhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMnfSA9ICdlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBub3QnfSA9ICdubyBlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBlbXB0eSd9ID0gJ2VzdMOhIHZhY8OtbyhhKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBub3QgZW1wdHknfSA9ICdubyBlc3TDoSB2YWPDrW8oYSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZ3JlYXRlciB0aGFuJ30gPSAnZXMgbWF5b3IgcXVlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGxlc3MgdGhhbid9ID0gJ2VzIG1lbm9yIHF1ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBiZWZvcmUnfSA9ICdlc3TDoSBhbnRlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBhZnRlcid9ID0gJ2VzdMOhIGRlc3B1w6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NvbnRhaW5zJ30gPSAnY29udGllbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGNvbnRhaW5zJ30gPSAnbm8gY29udGllbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmVnaW5zIHdpdGgnfSA9ICdjb21pZW56YSBjb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZW5kcyB3aXRoJ30gPSAndGVybWluYSBjb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc2V0J30gPSAnY29uZmlndXJhZGEnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2YgdGhlIGFnZW50cyB3aG8gaGF2ZSBwZXJtaXNzaW9uIHRvIHRha2Ugd29ya29yZGVycy4gS2V5IGlzIGEgbG9naW4gbmFtZS4gQ29udGVudCBpcyAwIG9yIDEuJ30gPQogICAgICAgICdVbmEgbGlzdGEgZGUgbG9zIGFnZW50ZXMgcXVlIHRpZW5lbiBwZXJtaXNvIHBhcmEgdG9tYXIgw7NyZGVuZXMgZGUgdHJhYmFqby4gS2V5IGVzIHVuIG5vbWJyZSBkZSBpbmljaW8gZGUgc2VzacOzbi4gQ29udGVudCBwdWVkZSBzZXIgMCDDsyAxLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2Ygd29ya29yZGVyIHN0YXRlcywgYXQgd2hpY2ggdGhlIEFjdHVhbFN0YXJ0VGltZSBvZiBhIHdvcmtvcmRlciB3aWxsIGJlIHNldCBpZiBpdCB3YXMgZW1wdHkgYXQgdGhpcyBwb2ludC4nfSA9CiAgICAgICAgJ1VuYSBsaXN0YSBkZSBlc3RhZG9zIHBhcmEgbGFzIMOzcmRlbmVzIGRlIHRyYWJham8sIG1pc21hIHF1ZSBzZXLDoSBhc2lnbmFkYSBhIEFjdHVhbFN0YXJ0VGltZSwgc2kgcGFyYSBlc3RlIHB1bnRvIHNlZ3XDrWEgdmFjw61vLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyJ30gPSAnQWdyZWdhciBPcmRlbiBkZSBUcmFiYWpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgKGZyb20gVGVtcGxhdGUpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIGNoYW5nZSBmcm9tIHRlbXBsYXRlLid9ID0gJ0FncmVnYXIgdW4gY2FtYmlvIGRlc2RlIHVuYSBwbGFudGlsbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIGNoYW5nZS4nfSA9ICdBw7FhZGlyIHVuIGNhbWJpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIChmcm9tIHRlbXBsYXRlKSB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgdG8gdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGZyb20gdGVtcGxhdGUnfSA9ICdBZ3JlZ2FyIGRlc2RlIHBsYW50aWxsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgQ0lQIG1hdHJpeC4nfSA9ICdBZG1pbmlzdHJhciBsYSBtYXRyaXogQ0lQLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgc3RhdGUgbWFjaGluZS4nfSA9ICdBZG1pbmlzdHJhciBsYSBtw6FxdWluYSBkZSBlc3RhZG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2UgYWR2aXNvcnkgYm9hcmRzLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBub3RpZmljYWNpw7NuIGRlIGxhIGludGVyZmFjZSBkZWwgQWdlbnRlIHBhcmEgbW9zdHJhciBlbCBuw7ptZXJvIGRlIGNoYW5nZSBhZHZpc29yeSBib2FyZHMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgbWFuYWdlZCBieSB0aGUgdXNlci4nfSA9CiAgICAgICAgJ03Ds2R1bG8gZGUgbm90aWZpY2FjacOzbiBkZSBsYSBpbnRlcmZhY2UgZGVsIEFnZW50ZSBwYXJhIG1vc3RyYXIgZWwgbsO6bWVybyBkZSAgY2FtYmlvcyBhZG1pbmlzdHJhZG9zIHBvciBlbCB1c3VhcmlvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBub3RpZmljYWNpw7NuIGRlIGxhIGludGVyZmFjZSBkZWwgQWdlbnRlIHBhcmEgbW9zdHJhciBlbCBuw7ptZXJvIGRlIGNhbWJpb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIE1lbWJlciBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgY2hhbmdlIG1hbmFnZW1lbnQgdG9vbGJhcnMuIERlZmF1bHQ6IDMgaG91cnMgKDE4MCBtaW51dGVzKS4nfSA9CiAgICAgICAgJ1RpZW1wbyBjYWNow6kgZW4gbWludXRvcyBwYXJhIGxhcyBiYXJyYXMgZGUgdGFyZWFzIGRlIGdlc3Rpw7NuIGRlbCBjYW1iaW8uIFBvciBkZWZlY3RvOiAgMyBob3JhcyAoMTgwIG1pbnV0b3MpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudC4gRGVmYXVsdDogNSBkYXlzICg3MjAwIG1pbnV0ZXMpLid9ID0KICAgICAgICAnVGllbXBvIGNhY2jDqSBlbiBtaW51dG9zIHBhcmEgbGEgZ2VzdGnDs24gZGVsIGNhbWJpby4gUG9yIGRlZmVjdG86IDUgZMOtYXMgKDcyMDAgbWludXRvcykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBDQUIgVGVtcGxhdGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW52b2x2ZWQgUGVyc29ucy4nfSA9ICdDYW1iaWFyIHBlcnNvbmFzIGludm9sdWNyYWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdDYW1iaWUgTMOtbWl0ZSBWaXN0YSBHZW5lcmFsICJQZXF1ZcOxYSInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZSd9ID0gJ0NhbWJpYXIgUHJvZ3JhbWFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2NoZWR1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tLid9ID0gJ0FtcGxpYWNpw7NuIGRlbCBDYW1iaW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhbmQgV29ya29yZGVyIFRlbXBsYXRlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIHdvcmtvcmRlciB0ZW1wbGF0ZXMgZWRpdGVkIGJ5IHRoaXMgdXNlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFyZWEuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBpbnZvbHZlZCBwZXJzb25zIG9mIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBsaW1pdCBwZXIgcGFnZSBmb3IgQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIEVkaXQnfSA9ICdFZGl0YXIgQ29uZGljacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb24gT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlIHdoaWNoIHNjcmVlbiBzaG91bGQgYmUgc2hvd24gYWZ0ZXIgYSBuZXcgd29ya29yZGVyIGhhcyBiZWVuIGNyZWF0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlcyBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgd2hlbiBwbGFubmVkIHRoZSBzdGFydCB0aW1lIG9yIG90aGVyIHRpbWUgdmFsdWVzIGhhdmUgYmVlbiByZWFjaGVkL3Bhc3NlZC4nfSA9CiAgICAgICAgJ0NvbmZpZ3VyYSBlbCBpbnRlcnZhbG8gZGUgZW52w61vIGRlIG5vdGlmaWNhY2lvbmVzIGN1YW5kbyBhbGd1bm8gZGUgbG9zIHZhbG9yZXMgZGVsIHRpZW1wbywgY29tbyBsYSBmZWNoYSBkZSBpbmljaW8gcGxhbmVhZGEsIHNlIGFsY2FuemFuL3NvYnJlcGFzYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBDaGFuZ2UnfSA9ICdDcmVhciB1biBDYW1iaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSAoZnJvbSBUZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgY2hhbmdlIChmcm9tIHRlbXBsYXRlKSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgSVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBub3RpZmljYXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgZm9yIGEgd29ya29yZGVyLiBUaGlzIGVudHJ5IG11c3QgZXhpc3QgaW4gZ2VuZXJhbCBjYXRhbG9nIGNsYXNzIFwnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpUeXBlXCcuJ30gPQogICAgICAgICdUaXBvIGRlZmF1bHQgcGFyYSBsYXMgw7NyZGVuZXMgZGUgdHJhYmFqby4gRXN0ZSByZWdpc3RybyBkZWJlIGV4aXN0aXIgZW4gbGEgY2xhc2UgXCdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpXb3JrT3JkZXI6OlR5cGVcJyBkZWwgY2F0w6Fsb2dvIGdlbmVyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICdEZWZpbmlyIGFjY2lvbmVzIGRvbmRlIGVzdMOhIGRpc3BvbmlibGUgdW4gYm90w7NuIGRlIGNvbmZpZ3VyYWNpw7NuIGVuIGVsIHdpZGdldCBkZSBvYmpldG9zIHZpbmN1bGFkb3MgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gVGVuZ2EgZW4gY3VlbnRhIHF1ZSBlc3RhcyBhY2Npb25lcyBkZWJlbiBoYWJlciByZWdpc3RyYWRvIGxvcyBzaWd1aWVudGVzIGFyY2hpdm9zIEpTIHkgQ1NTOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyB5IENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBzaWduYWxzIGZvciBlYWNoIHdvcmtvcmRlciBzdGF0ZS4nfSA9ICdEZWZpbmUgbGFzIHNlw7FhbGVzIHBhcmEgY2FkYSBlc3RhZG8gZGUgbGFzIMOzcmRlbmVzIGRlIHRyYWJham8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIENoYW5nZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgQ2hhbmdlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFdvcmtvcmRlciB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBXb3Jrb3JkZXIgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNoYW5nZSBsaXN0Lid9ID0KICAgICAgICAnRGVmaW5lIHVuIG3Ds2R1bG8gZGUgcmVzdW1lbiBwYXJhIG1vc3RyYXIgbGEgdmlzdGEgcGVxdWXDsWEgZGUgdW5hIGxpc3RhIGRlIGNhbWJpb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSB0ZW1wbGF0ZSBsaXN0Lid9ID0KICAgICAgICAnRGVmaW5lIHVuIG3Ds2R1bG8gZGUgcmVzdW1lbiBwYXJhIG1vc3RyYXIgbGEgdmlzdGEgcGVxdWXDsWEgZGUgdW5hIGxpc3RhIGRlIHBsYW50aWxsYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgYWNjb3VudGVkIHRpbWUuJ30gPSAnRGVmaW5lIHNpIHNlcsOhIHBvc2libGUgaW1wcmltaXIgZWwgdGllbXBvIGNvbnRhYmlsaXphZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgcGxhbm5lZCBlZmZvcnQuJ30gPSAnRGVmaW5lIHNpIHNlcsOhIHBvc2libGUgaW1wcmltaXIgZWwgZXNmdWVyem8gcGxhbmVhZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgcmVhY2hhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lKSBjaGFuZ2UgZW5kIHN0YXRlcyBzaG91bGQgYmUgYWxsb3dlZCBpZiBhIGNoYW5nZSBpcyBpbiBhIGxvY2tlZCBzdGF0ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgd29ya29yZGVyIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSB3b3Jrb3JkZXIgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWNjb3VudGVkIHRpbWUgc2hvdWxkIGJlIHNob3duLid9ID0gJ0RldGVybWluYSBzaSBlbCB0aWVtcG8gY29udGFiaWxpemFkbyBkZWJlIG1vc3RyYXJzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWN0dWFsIHN0YXJ0IGFuZCBlbmQgdGltZXMgc2hvdWxkIGJlIHNldC4nfSA9ICdEZXRlcm1pbmEgc2kgbGFzIGZlY2hhcyBkZSBpbmljaW8geSBmaW5hbGl6YWNpw7NuIHJlYWxlcyBkZWJlbiBmaWphcnNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBjaGFuZ2Ugc2VhcmNoIGFuZCB0aGUgd29ya29yZGVyIHNlYXJjaCBmdW5jdGlvbnMgY291bGQgdXNlIHRoZSBtaXJyb3IgREIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHN0YXRlIGNhbiBiZSBzZXQgaW4gQWdlbnRJVFNNQ2hhbmdlRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBzaSBlbCBlc3RhZG8gZGUgdW4gY2FtYmlvIHB1ZWRlIGRldGVybWluYXJzZSBlbiBBZ2VudElUU01DaGFuZ2VFZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBwbGFubmVkIGVmZm9ydCBzaG91bGQgYmUgc2hvd24uJ30gPSAnRGV0ZXJtaW5hIHNpIGVsIGVzZnVlcnpvIHBsYW5lYWRvIGRlYmUgbW9zdHJhcnNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgcHJpbnQgYnkgY3VzdG9tZXIuJ30gPSAnRGVmaW5lIHNpIGxhIGZlY2hhIHNvbGljaXRhZGEgZGViZSBzZXIgaW1wcmVzYSBwb3IgZWwgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNlYXJjaGVkIGJ5IGN1c3RvbWVyLid9ID0KICAgICAgICAnRGVmaW5lIHNpIGxhIGZlY2hhIHNvbGljaXRhZGEgZGViZSBzZXIgYnVzY2FkYSBwb3IgZWwgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNldCBieSBjdXN0b21lci4nfSA9ICdEZWZpbmUgc2kgbGEgZmVjaGEgc29saWNpdGFkYSBkZWJlIHNlciBlc3RhYmxlY2lkYSBwb3IgZWwgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNob3duIGJ5IGN1c3RvbWVyLid9ID0gJ0RlZmluZSBzaSBsYSBmZWNoYSBzb2xpY2l0YWRhIGRlYmUgc2VyIG1vc3RyYWRhIHBvciBlbCBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSB3b3Jrb3JkZXIgc3RhdGUgc2hvdWxkIGJlIHNob3duLid9ID0gJ0RldGVybWluYSBzaSBlbCBlc3RhZG8gZGUgbGEgb3JkZW4gZGUgdHJhYmFqbyBkZWJlIG1vc3RyYXJzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHRpdGxlIHNob3VsZCBiZSBzaG93bi4nfSA9ICdEZXRlcm1pbmEgc2kgZWwgdMOtdHVsbyBkZSBsYSBvcmRlbiBkZSB0cmFiYWpvIGRlYmUgbW9zdHJhcnNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHNob3duIGdyYXBoIGF0dHJpYnV0ZXMuJ30gPSAnRGVmaW5lIGxvcyBhdHJpYnV0b3MgbW9zdHJhZG9zIGVuIGxhcyBncsOhZmljYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhhdCBvbmx5IGNoYW5nZXMgY29udGFpbmluZyBXb3Jrb3JkZXJzIGxpbmtlZCB3aXRoIHNlcnZpY2VzLCB3aGljaCB0aGUgY3VzdG9tZXIgdXNlciBoYXMgcGVybWlzc2lvbiB0byB1c2Ugd2lsbCBiZSBzaG93bi4gQW55IG90aGVyIGNoYW5nZXMgd2lsbCBub3QgYmUgZGlzcGxheWVkLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSDDum5pY2FtZW50ZSBzZSBtb3N0cmFyw6FuIGxvcyBjYW1iaW9zIHF1ZSBjb250aWVuZW4gw7NyZGVuZXMgZGUgdHJhYmFqbywgdmluY3VsYWRhcyBjb24gc2VydmljaW9zLCBxdWUgZWwgY2xpZW50ZSB0aWVuZSBwZXJtaXNvIGRlIHVzYXIuIEVsIHJlc3RvIGRlIGxvcyBjYW1iaW9zIG5vIHNlIGRlc3BsZWdhcsOhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSBhbGxvd2VkIHRvIGRlbGV0ZS4nfSA9ICdEZWZpbmUgbG9zIGVzdGFkb3MgZGUgY2FtYmlvIHF1ZSBzZSBwZXJtaXRpcsOhbiBlbGltaW5hci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIGxvcyBlc3RhZG9zIGRlIGxvcyBjYW1iaW9zIHF1ZSBzZXLDoW4gdXRpbGl6YWRvcyBjb21vIGZpbHRyb3MgZW4gbGEgdmlzdGEgZGUgcmVzdW1lbiBkZSBsYSBQU0EgZGUgbG9zIGNhbWJpb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIGxvcyBlc3RhZG9zIGRlIGxvcyBjYW1iaW9zIHF1ZSBzZXLDoW4gdXRpbGl6YWRvcyBjb21vIGZpbHRyb3MgZW4gbGEgdmlzdGEgZGUgcmVzdW1lbiBkZSBsYSBhZ2VuZGEgZGUgbG9zIGNhbWJpb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgbG9zIGVzdGFkb3MgZGUgbG9zIGNhbWJpb3MgcXVlIHNlcsOhbiB1dGlsaXphZG9zIGNvbW8gZmlsdHJvcyBlbiBsYSB2aXN0YSBkZSByZXN1bWVuIGRlIE15Q0FCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBsb3MgZXN0YWRvcyBkZSBsb3MgY2FtYmlvcyBxdWUgc2Vyw6FuIHV0aWxpemFkb3MgY29tbyBmaWx0cm9zIGVuIGxhIHZpc3RhIGRlIHJlc3VtZW4gZGUgTXlDaGFuZ2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIGxvcyBlc3RhZG9zIGRlIGxvcyBjYW1iaW9zIHF1ZSBzZXLDoW4gdXRpbGl6YWRvcyBjb21vIGZpbHRyb3MgZW4gbGEgdmlzdGEgZGUgcmVzdW1lbiBkZSBsYSBnZXN0acOzbiBkZSBjYW1iaW9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBsb3MgZXN0YWRvcyBkZSBsb3MgY2FtYmlvcyBxdWUgc2Vyw6FuIHVzYWRvcyBjb21vIGZpbHRyb3MgZW4gbG9zIHJlc8O6bWVuZXMgZGUgZGljaG9zIGNhbWJpb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIGxvcyBlc3RhZG9zIGRlIGxvcyBjYW1iaW9zIHF1ZSBzZXLDoW4gdXRpbGl6YWRvcyBjb21vIGZpbHRyb3MgZW4gbGEgdmlzdGEgZGUgcmVzdW1lbiBkZSBlZGljacOzbiBkZSBsYSBhZ2VuZGEsIGVuIGxhIGludGVyZmF6IGRlbCBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGNoYW5nZSB0aXRsZSBmb3IgYSBkdW1teSBjaGFuZ2Ugd2hpY2ggaXMgbmVlZGVkIHRvIGVkaXQgYSB3b3Jrb3JkZXIgdGVtcGxhdGUuJ30gPQogICAgICAgICdEZWZpbmUgZWwgdMOtdHVsbyBwb3IgZGVmZWN0byBkZSB1biBjYW1iaW8gcXVlIHNlcsOhIHV0aWxpemFkbyBwYXJhIHVuIGNhbWJpbyB0ZW1wb3JhbCwgZWwgY3VhbCBzZSBuZWNlc2l0YSBwYXJhIGVkaXRhciB1bmEgcGxhbnRpbGxhIGRlIG9yZGVuIGRlIHRyYWJham8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCBjcml0ZXJpbyBkZSBvcmRlbmFtaWVudG8gcG9yIGRlZmF1bHQgcGFyYSBsYSB2aXN0YSBkZSByZXN1bWVtIGRlIGxhIFBTQSBkZSBsb3MgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCBjcml0ZXJpbyBkZSBvcmRlbmFtaWVudG8gcG9yIGRlZmF1bHQgcGFyYSBsYSB2aXN0YSBkZSByZXN1bWVtIGRlbCBhZG1pbmlzdHJhZG9yIGRlIGxvcyBjYW1iaW9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9ICdEZWZpbmUgZWwgY3JpdGVyaW8gZGUgb3JkZW5hbWllbnRvIHBvciBkZWZhdWx0IHBhcmEgbGEgdmlzdGEgZGUgcmVzdW1lbSBkZSBsb3MgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgZWwgY3JpdGVyaW8gZGUgb3JkZW5hbWllbnRvIHBvciBkZWZhdWx0IHBhcmEgbGEgdmlzdGEgZGUgcmVzdW1lbSBkZSBsYSBhZ2VuZGEgZGUgbG9zIGNhbWJpb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgZWwgY3JpdGVyaW8gZGUgb3JkZW5hbWllbnRvIHBvciBkZWZhdWx0IGRlIGxvcyBjYW1iaW9zIHBhcmEgbGEgdmlzdGEgZGUgcmVzdW1lbSBkZSBNeUNBQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgZWwgY3JpdGVyaW8gZGUgb3JkZW5hbWllbnRvIHBvciBkZWZhdWx0IGRlIGxvcyBjYW1iaW9zIHBhcmEgbGEgdmlzdGEgZGUgcmVzdW1lbSBkZSBNeUNoYW5nZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIGVsIGNyaXRlcmlvIGRlIG9yZGVuYW1pZW50byBwb3IgZGVmYXVsdCBkZSBsb3MgY2FtYmlvcyBwYXJhIGxhIHZpc3RhIGRlIHJlc3VtZW0gZGUgTXlXb3Jrb3JkZXJzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCBjcml0ZXJpbyBkZSBvcmRlbmFtaWVudG8gcG9yIGRlZmF1bHQgZGUgbG9zIGNhbWJpb3MgcGFyYSBsYSB2aXN0YSBkZSByZXN1bWVtIGRlIGxhcyBQSVIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIGVsIGNyaXRlcmlvIGRlIG9yZGVuYW1pZW50byBwb3IgZGVmYXVsdCBkZSBsb3MgY2FtYmlvcyBwYXJhIGxhIHZpc3RhIGRlIHJlc3VtZW0gZGUgZWRpY2nDs24gZGUgbGEgYWdlbmRhLCBlbiBsYSBpbnRlcmZheiBkZWwgY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCBjcml0ZXJpbyBkZSBvcmRlbmFtaWVudG8gcG9yIGRlZmF1bHQgZGUgbG9zIGNhbWJpb3MgcGFyYSBsYSB2aXN0YSBkZSByZXN1bWVtIGRlIGxhcyBwbGFudGlsbGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0gJ0RlZmluZSBlbCBwYXLDoW1ldHJvIGRlIG9yZGVuYW1pZW50byBwb3IgZGVmYXVsdCBwYXJhIGxhIHZpc3RhIGRlIHJlc3VtZW0gZGUgTXlDQUIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0gJ0RlZmluZSBlbCBwYXLDoW1ldHJvIGRlIG9yZGVuYW1pZW50byBwb3IgZGVmYXVsdCBwYXJhIGxhIHZpc3RhIGRlIHJlc3VtZW0gZGUgTXlDaGFuZ2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCBwYXLDoW1ldHJvIGRlIG9yZGVuYW1pZW50byBwb3IgZGVmYXVsdCBwYXJhIGxhIHZpc3RhIGRlIHJlc3VtZW0gZGUgTXlXb3Jrb3JkZXJzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9ICdEZWZpbmUgZWwgcGFyw6FtZXRybyBkZSBvcmRlbmFtaWVudG8gcG9yIGRlZmF1bHQgcGFyYSBsYSB2aXN0YSBkZSByZXN1bWVtIGRlIGxhcyBQSVIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9ICdEZWZpbmUgZWwgcGFyw6FtZXRybyBkZSBvcmRlbmFtaWVudG8gcG9yIGRlZmF1bHQgcGFyYSBsYSB2aXN0YSBkZSByZXN1bWVtIGRlIGxhIFBTQSBkZSBsb3MgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCBwYXLDoW1ldHJvIGRlIG9yZGVuYW1pZW50byBwb3IgZGVmYXVsdCBwYXJhIGxhIHZpc3RhIGRlIHJlc3VtZW0gZGUgbGEgYWdlbmRhIGRlIGxvcyBjYW1iaW9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9ICdEZWZpbmUgZWwgcGFyw6FtZXRybyBkZSBvcmRlbmFtaWVudG8gcG9yIGRlZmF1bHQgZW4gbGEgdmlzdGEgZGUgcmVzdW1lbiBkZSBsb3MgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgZWwgcGFyw6FtZXRybyBkZSBvcmRlbmFtaWVudG8gcG9yIGRlZmF1bHQgcGFyYSBsYSB2aXN0YSBkZSByZXN1bWVtIGRlIGxhIGFnZW5kYSBkZSBsb3MgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgZWwgcGFyw6FtZXRybyBkZSBvcmRlbmFtaWVudG8gcG9yIGRlZmF1bHQgcGFyYSBsYSB2aXN0YSBkZSByZXN1bWVtIGRlIGVkaWNpw7NuIGRlIGxhIGFuZ2VuZGEsIGVuIGxhIGludGVyZmF6IGRlbCBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3Lid9ID0gJ0RlZmluZSBlbCBwYXLDoW1ldHJvIGRlIG9yZGVuYW1pZW50byBwb3IgZGVmYXVsdCBwYXJhIGxhIHZpc3RhIGRlIHJlc3VtZW0gZGUgbGFzIHBsYW50aWxsYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjYXRlZ29yeSBvZiBhIGNoYW5nZS4nfSA9ICdEZWZpbmUgZWwgdmFsb3IgcG9yIGRlZmF1bHQgZGUgbGEgY2F0ZWdvcsOtYSBkZSBsb3MgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGltcGFjdCBvZiBhIGNoYW5nZS4nfSA9ICdEZWZpbmUgZWwgdmFsb3IgcG9yIGRlZmF1bHQgZGVsIGltcGFjdG8gZGUgbG9zIGNhbWJpb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3IgY2hhbmdlIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJ30gPQogICAgICAgICdEZWZpbmUgZWwgdGlwbyBkZSBjYW1wbyBwYXJhIGxvcyBDb21wYXJlVmFsdWUgZGUgbG9zIGF0cmlidXRvcyBkZSB1biBjYW1iaW8gZW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gTG9zIHZhbG9yZXMgcG9zaWJsZXMgc29uOiBTZWxlY2Npw7NuLCBUZXh0byB5IEZlY2hhLiBTaSBlbCB0aXBvIG5vIGVzdMOhIGRlZmluaWRvLCBlbCBjYW1wbyBubyBzZSBtb3N0cmFyw6EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3Igd29ya29yZGVyIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJ30gPQogICAgICAgICdEZWZpbmUgZWwgdGlwbyBkZSBjYW1wbyBwYXJhIGxvcyBDb21wYXJlVmFsdWUgZGUgbG9zIGF0cmlidXRvcyBkZSB1bmEgb3JkZW4gZGUgdHJhYmFqbyBlbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBMb3MgdmFsb3JlcyBwb3NpYmxlcyBzb246IFNlbGVjY2nDs24sIFRleHRvIHkgRmVjaGEuIFNpIGVsIHRpcG8gbm8gZXN0w6EgZGVmaW5pZG8sIGVsIGNhbXBvIG5vIHNlIG1vc3RyYXLDoS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgY2hhbmdlIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBsb3MgYXRyaWJ1dG9zIGVsZWdpYmxlcyBwYXJhIGxvcyBjYW1iaW9zIGVuIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9iamVjdCBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHdvcmtvcmRlciBvYmplY3RzIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgbG9zIGF0cmlidXRvcyBlbGVnaWJsZXMgcGFyYSBsYXMgw7NyZGVuZXMgZGUgdHJhYmFqbyBlbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY2NvdW50ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgbG9zIG9wZXJhZG9yZXMgZWxlZ2libGVzIHBhcmEgZWwgYXRyaWJ1dG8gQWNjb3VudGVkVGltZSBlbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgbG9zIG9wZXJhZG9yZXMgZWxlZ2libGVzIHBhcmEgZWwgYXRyaWJ1dG8gQWN0dWFsRW5kVGltZSBlbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBsb3Mgb3BlcmFkb3JlcyBlbGVnaWJsZXMgcGFyYSBlbCBhdHJpYnV0byBBY3R1YWxTdGFydFRpbWUgZW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2F0ZWdvcnlJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIGxvcyBvcGVyYWRvcmVzIGVsZWdpYmxlcyBwYXJhIGVsIGF0cmlidXRvIENhdGVnb3J5SUQgZW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlQnVpbGRlcklEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgbG9zIG9wZXJhZG9yZXMgZWxlZ2libGVzIHBhcmEgZWwgYXRyaWJ1dG8gQ2hhbmdlQnVpbGRlcklEIGVuIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZU1hbmFnZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIGxvcyBvcGVyYWRvcmVzIGVsZWdpYmxlcyBwYXJhIGVsIGF0cmlidXRvIENoYW5nZU1hbmFnZXJJRCBlbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgbG9zIG9wZXJhZG9yZXMgZWxlZ2libGVzIHBhcmEgZWwgYXRyaWJ1dG8gQ2hhbmdlU3RhdGVJRCBlbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIGxvcyBvcGVyYWRvcmVzIGVsZWdpYmxlcyBwYXJhIGVsIGF0cmlidXRvIENoYW5nZVRpdGxlIGVuIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIER5bmFtaWNGaWVsZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEltcGFjdElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgbG9zIG9wZXJhZG9yZXMgZWxlZ2libGVzIHBhcmEgZWwgYXRyaWJ1dG8gSW1wYWN0SUQgZW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZEVmZm9ydCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIGxvcyBvcGVyYWRvcmVzIGVsZWdpYmxlcyBwYXJhIGVsIGF0cmlidXRvIFBsYW5uZWRFZmZvcnQgZW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZEVuZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBsb3Mgb3BlcmFkb3JlcyBlbGVnaWJsZXMgcGFyYSBlbCBhdHJpYnV0byBQbGFubmVkRW5kVGltZSBlbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkU3RhcnRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgbG9zIG9wZXJhZG9yZXMgZWxlZ2libGVzIHBhcmEgZWwgYXRyaWJ1dG8gUGxhbm5lZFN0YXJ0VGltZSBlbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQcmlvcml0eUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgbG9zIG9wZXJhZG9yZXMgZWxlZ2libGVzIHBhcmEgZWwgYXRyaWJ1dG8gUHJpb3JpdHlJRCBlbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBSZXF1ZXN0ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgbG9zIG9wZXJhZG9yZXMgZWxlZ2libGVzIHBhcmEgZWwgYXRyaWJ1dG8gUmVxdWVzdGVkVGltZSBlbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJBZ2VudElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgbG9zIG9wZXJhZG9yZXMgZWxlZ2libGVzIHBhcmEgZWwgYXRyaWJ1dG8gV29ya09yZGVyQWdlbnRJRCBlbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJOdW1iZXIgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBsb3Mgb3BlcmFkb3JlcyBlbGVnaWJsZXMgcGFyYSBlbCBhdHJpYnV0byBXb3JrT3JkZXJOdW1iZXIgZW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyU3RhdGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIGxvcyBvcGVyYWRvcmVzIGVsZWdpYmxlcyBwYXJhIGVsIGF0cmlidXRvIFdvcmtPcmRlclN0YXRlSUQgZW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBsb3Mgb3BlcmFkb3JlcyBlbGVnaWJsZXMgcGFyYSBlbCBhdHJpYnV0byBXb3JrT3JkZXJUaXRsZSBlbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUeXBlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBsb3Mgb3BlcmFkb3JlcyBlbGVnaWJsZXMgcGFyYSBlbCBhdHJpYnV0byBXb3JrT3JkZXJUeXBlSUQgZW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGVyaW9kIChpbiB5ZWFycyksIGluIHdoaWNoIHN0YXJ0IGFuZCBlbmQgdGltZXMgY2FuIGJlIHNlbGVjdGVkLid9ID0KICAgICAgICAnRGVmaW5lIGVsIHBlcmlvZG8gKGVuIGHDsW9zKSBlbiBlbCBxdWUgbGFzIGZlY2hhcyBkZSBpbmljaW8geSBmaW5hbGl6YWNpw7NuIHB1ZWRlbiBzZWxlY2Npb25hcnNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBhdHRyaWJ1dGVzIG9mIGEgd29ya29yZGVyIGluIHRoZSB0b29sdGlwIG9mIHRoZSB3b3Jrb3JkZXIgZ3JhcGggaW4gdGhlIGNoYW5nZSB6b29tLiBUbyBzaG93IHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcyBpbiB0aGUgdG9vbHRpcCwgdGhleSBtdXN0IGJlIHNwZWNpZmllZCBsaWtlIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUxLCBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMiwgZXRjLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBQU0Egb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmUgbGFzIGNvbHVtbmFzIG1vc3RyYWRhcyBlbiBsYSB2aXN0YSBkZSByZXN1bWVuIGRlIGxhIFBTQSBkZSBsb3MgY2FtYmlvcywgc2luIHF1ZSBlc3RvIHRlbmdhIGVmZWN0byBlbiBsYSBwb3NpY2nDs24gZGUgbGFzIG1pc21hcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lIGxhcyBjb2x1bW5hcyBtb3N0cmFkYXMgZW4gbGEgdmlzdGEgZGUgcmVzdW1lbiBkZSBsYSBhZ2VuZGEgZGUgbG9zIGNhbWJpb3MsIHNpbiBxdWUgZXN0byB0ZW5nYSBlZmVjdG8gZW4gbGEgcG9zaWNpw7NuIGRlIGxhcyBtaXNtYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lIGxhcyBjb2x1bW5hcyBtb3N0cmFkYXMgZW4gbGEgdmlzdGEgZGUgcmVzdW1lbiBkZSBNeUNBQiwgc2luIHF1ZSBlc3RvIHRlbmdhIGVmZWN0byBlbiBsYSBwb3NpY2nDs24gZGUgbGFzIG1pc21hcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lIGxhcyBjb2x1bW5hcyBtb3N0cmFkYXMgZW4gbGEgdmlzdGEgZGUgcmVzdW1lbiBkZSBNeUNoYW5nZXMsIHNpbiBxdWUgZXN0byB0ZW5nYSBlZmVjdG8gZW4gbGEgcG9zaWNpw7NuIGRlIGxhcyBtaXNtYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBsYXMgY29sdW1uYXMgbW9zdHJhZGFzIGVuIGxhIHZpc3RhIGRlIHJlc3VtZW4gZGUgTXlXb3Jrb3JkZXJzLCBzaW4gcXVlIGVzdG8gdGVuZ2EgZWZlY3RvIGVuIGxhIHBvc2ljacOzbiBkZSBsYXMgbWlzbWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBQSVIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmUgbGFzIGNvbHVtbmFzIG1vc3RyYWRhcyBlbiBsYSB2aXN0YSBkZSByZXN1bWVuIGRlIGxhcyBQSVIsIHNpbiBxdWUgZXN0byB0ZW5nYSBlZmVjdG8gZW4gbGEgcG9zaWNpw7NuIGRlIGxhcyBtaXNtYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lIGxhcyBjb2x1bW5hcyBtb3N0cmFkYXMgZW4gbGEgdmlzdGEgZGUgcmVzdW1lbiBkZWwgYWRtaW5pc3RyYWRvciBkZSBsb3MgY2FtYmlvcywgc2luIHF1ZSBlc3RvIHRlbmdhIGVmZWN0byBlbiBsYSBwb3NpY2nDs24gZGUgbGFzIG1pc21hcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lIGxhcyBjb2x1bW5hcyBtb3N0cmFkYXMgZW4gbGEgdmlzdGEgZGUgcmVzdW1lbiBkZSBsb3MgY2FtYmlvcywgc2luIHF1ZSBlc3RvIHRlbmdhIGVmZWN0byBlbiBsYSBwb3NpY2nDs24gZGUgbGFzIG1pc21hcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBsYXMgY29sdW1uYXMgbW9zdHJhZGFzIGVuIGxhIGLDunNxdWVkYSBkZSBjYW1iaW9zLCBzaW4gcXVlIGVzdG8gdGVuZ2EgZWZlY3RvIGVuIGxhIHBvc2ljacOzbiBkZSBsYXMgbWlzbWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmUgbGFzIGNvbHVtbmFzIG1vc3RyYWRhcyBlbiBsYSB2aXN0YSBkZSByZXN1bWVuIGRlIGVkaWNpw7NuIGRlIGxhIGFuZ2VuZGEgZGUgbGEgaW50ZXJmYXogZGVsIGNsaWVudGUsIHNpbiBxdWUgZXN0byB0ZW5nYSBlZmVjdG8gZW4gbGEgcG9zaWNpw7NuIGRlIGxhcyBtaXNtYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lIGxhcyBjb2x1bW5hcyBtb3N0cmFkYXMgZW4gbGEgdmlzdGEgZGUgcmVzdW1lbiBkZSBsYXMgcGxhbnRpbGxhcywgc2luIHF1ZSBlc3RvIHRlbmdhIGVmZWN0byBlbiBsYSBwb3NpY2nDs24gZGUgbGFzIG1pc21hcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2lnbmFscyBmb3IgZWFjaCBJVFNNQ2hhbmdlIHN0YXRlLid9ID0gJ0RlZmluZSBsYXMgc2XDsWFsZXMgcGFyYSBjYWRhIHVubyBkZSBsb3MgZXN0YWRvIGRlIGxvcyBjYW1iaW9zIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHRlbXBsYXRlIHR5cGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIGxvcyB0aXBvcyBkZSBwbGFudGlsbGEgcXVlIHNlcsOhbiB1dGlsaXphZG9zIGNvbW8gZmlsdHJvcyBlbiBsYSB2aXN0YSBkZSByZXN1bWVuIGRlIGxhcyBwbGFudGlsbGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBsb3MgZXN0YWRvcyBkZSBsYXMgw7NyZGVuZXMgZGUgdHJhYmFqbyBxdWUgc2Vyw6FuIHV0aWxpemFkb3MgY29tbyBmaWx0cm9zIGVuIGxhIHZpc3RhIGRlIHJlc3VtZW4gZGUgTXlXb3Jrb3JkZXJzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBsb3MgZXN0YWRvcyBkZSBsYXMgw7NyZGVuZXMgZGUgdHJhYmFqbyBxdWUgc2Vyw6FuIHV0aWxpemFkb3MgY29tbyBmaWx0cm9zIGVuIGxhIHZpc3RhIGRlIHJlc3VtZW4gZGUgbGFzIFBJUi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHR5cGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNob3cgdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBsb3MgdGlwb3MgZGUgw7NyZGVuZXMgZGUgdHJhYmFqbyBxdWUgc2UgdXNhcsOhbiBlbiBsYSB2aXN0YSBkZSByZXN1bWVuIGRlIGxhcyBQSVIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciBub3RpZmljYXRpb25zIHNob3VsZCBiZSBzZW50Lid9ID0gJ0RldGVybWluYSBzaSBkZWJlbiBlbnZpYXJzZSBub3RpZmljYWNpb25lcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIGEgY2hhbmdlLid9ID0gJ0VsaW1pbmFyIHVuIGNhbWJpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzIG9mIGEgY2hhbmdlIGhpc3RvcnkgZW50cnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgYW4gYWdlbnQgY2FuIGV4Y2hhbmdlIHRoZSBYLWF4aXMgb2YgYSBzdGF0IGlmIGhlIGdlbmVyYXRlcyBvbmUuJ30gPQogICAgICAgICdEZXRlcm1pbmEgc2ksIGFsIGNyZWFyIHVuYSBlc3RhZMOtc3RpY2EsIGVzIHBvc2libGUgcXVlIGxvcyBhZ2VudGVzIGludGVyY2FtYmllbiBsYXMgWC1heGlzIGRlIGxhcyBtaXNtYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgZG9uZSBmb3IgY29uZmlnIGl0ZW0gY2xhc3Nlcy4nfSA9CiAgICAgICAgJ0RldGVybWluYSBzaSBlbCBtw7NkdWxvIGNvbXVuIGRlIGVzdGFkw61zdGljYXMgZGViZSBnZW5lcmFyIGVzdGFkw61zdGljYXMgc29icmUgY2FtYmlvcyBoZWNob3MgYSBjbGFzZXMgZGUgZWxlbWVudG9zIGRlIGNvbmZpZ3VyYWNpw7NuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyBjaGFuZ2Ugc3RhdGUgdXBkYXRlcyB3aXRoaW4gYSB0aW1lcGVyaW9kLid9ID0KICAgICAgICAnRGV0ZXJtaW5hIHNpIGVsIG3Ds2R1bG8gY29tdW4gZGUgZXN0YWTDrXN0aWNhcyBkZWJlIGdlbmVyYXIgZXN0YWTDrXN0aWNhcyBzb2JyZSBsb3MgY2FtYmlvcywgcmVzcGVjdG8gYSBsYXMgYWN0dWFsaXphY2lvbmVzIGRlIGVzdGFkbyBkZSBsb3MgY2FtYmlvcyBlbiB1biBwZXJpb2RvIGRldGVybWluYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyB0aGUgcmVsYXRpb24gYmV0d2VlbiBjaGFuZ2VzIGFuZCBpbmNpZGVudCB0aWNrZXRzLid9ID0KICAgICAgICAnRGV0ZXJtaW5hIHNpIGVsIG3Ds2R1bG8gY29tdW4gZGUgZXN0YWTDrXN0aWNhcyBkZWJlIGdlbmVyYXIgZXN0YWTDrXN0aWNhcyBzb2JyZSBsb3MgY2FtYmlvcywgcmVzcGVjdG8gYSBsYSByZWxhY2nDs24gZW50cmUgbG9zIGNhbWJpb3MgeSBsb3MgdGlja2V0cyBkZSB0aXBvIGluY2lkZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcy4nfSA9CiAgICAgICAgJ0RldGVybWluYSBzaSBlbCBtw7NkdWxvIGNvbXVuIGRlIGVzdGFkw61zdGljYXMgZGViZSBnZW5lcmFyIGVzdGFkw61zdGljYXMgc29icmUgbG9zIGNhbWJpb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IHRoZSBudW1iZXIgb2YgUmZjIHRpY2tldHMgYSByZXF1ZXN0ZXIgY3JlYXRlZC4nfSA9CiAgICAgICAgJ0RldGVybWluYSBzaSBlbCBtw7NkdWxvIGNvbXVuIGRlIGVzdGFkw61zdGljYXMgZGViZSBnZW5lcmFyIGVzdGFkw61zdGljYXMgc29icmUgZWwgbsO6bWVybyBkZSB0aWNrZXRzIFJmYyBxdWUgdW5hIHBlcnNvbmEgY3Jlw7MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIChmb3IgY2hhbmdlcyBhbmQgd29ya29yZGVycykgc2hvd24gaW4gdGhlIGNoYW5nZSBwcmludCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2Ugc2VhcmNoIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIHJlcG9ydCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWNGaWVsZCBldmVudCBtb2R1bGUgdG8gaGFuZGxlIHRoZSB1cGRhdGUgb2YgY29uZGl0aW9ucyBpZiBkeW5hbWljIGZpZWxkcyBhcmUgYWRkZWQsIHVwZGF0ZWQgb3IgZGVsZXRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IGEgY2hhbmdlLid9ID0gJ0VkaXRhciB1biBjYW1iaW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcndhcmQgc2NoZWR1bGUgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb3ZlciBhcHByb3ZlZCBjaGFuZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDQUIgVGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ29uZGl0aW9uIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlciBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgUElSIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBub3RpZmljYXRpb24gcnVsZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VzJ30gPSAnQ2FtYmlvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q0FCIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q2hhbmdlcyBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeVdvcmtvcmRlcnMgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRGVsZXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQgQ0FCLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQgQ29udGVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGNsZWFucyB1cCBjb25kaXRpb25zLid9ID0gJ03Ds2R1bG8gZGUgZXZlbnRvcyBwYXJhIElUU00gcXVlIGVsaW1pbmEgY29uZGljaW9uZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgZGVsZXRlcyB0aGUgY2FjaGUgZm9yIGEgdG9vbGJhci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgbWF0Y2hlcyBjb25kaXRpb25zIGFuZCBleGVjdXRlcyBhY3Rpb25zLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBldmVudG9zIHBhcmEgSVRTTSBxdWUgdmVyaWZpY2EgY29uZGljaW9uZXMgeSBlamVjdXRhIGFjY2lvbmVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHNlbmRzIG5vdGlmaWNhdGlvbnMuJ30gPSAnTcOzZHVsbyBkZSBldmVudG9zIHBhcmEgSVRTTSBwYXJhIGVudmlhciBub3RpZmljYWNpb25lcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJ30gPSAnTcOzZHVsbyBkZSBldmVudG9zIHBhcmEgSVRTTSBxdWUgYWN0dWFsaXphIGxhIGhpc3RvcmlhIGRlIGxvcyBjYW1iaW9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY29uZGl0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRvIHJlY2FsY3VsYXRlIHRoZSB3b3Jrb3JkZXIgbnVtYmVycy4nfSA9ICdNw7NkdWxvIGRlIGV2ZW50b3MgcGFyYSBJVFNNIHF1ZSByZWNhbGN1bGEgbG9zIG7Dum1lcm9zIGRlIGxhcyDDs3JkZW5lcyBkZSB0cmFiYWpvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byBzZXQgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzIG9mIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIGV2ZW50b3MgcGFyYSBJVFNNIHBhcmEgZGVmaW5pciBsYXMgZmVjaGFzIGRlIGluaWNpbyB5IGZpbmFsaXphY2nDs24gcmVhbGVzIGRlIGxhcyDDs3JkZW5lcyBkZSB0cmFiYWpvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNQ2hhbmdlJ30gPSAnQ2FtYmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01Xb3JrT3JkZXInfSA9ICdPcmRlbiBkZSBUcmFiYWpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGZyZXF1ZW5jeSBpcyBcJ3JlZ3VsYXJseVwnLCB5b3UgY2FuIGNvbmZpZ3VyZSBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgKGV2ZXJ5IFggaG91cnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2dmaWxlIGZvciB0aGUgSVRTTSBjaGFuZ2UgY291bnRlci4gVGhpcyBmaWxlIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjaGFuZ2UgbnVtYmVycy4nfSA9CiAgICAgICAgJ0xvZyBwYXJhIGVsIGNvbnRhZG9yIGRlIGxvcyBjYW1iaW9zIElUU00uIEVzdGUgYXJjaGl2byBzZSB1c2EgcGFyYSBjcmVhciBsb3MgbsO6bWVyb3MgZGUgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIENBQiBtZW1iZXJzIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIGFnZW50cywgdXNlZCBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayBpZiBXb3JrT3JkZXJBZGQgb3IgV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlIHNob3VsZCBiZSBwZXJtaXR0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBDQUIgbWVtYmVycy4nfSA9ICdNw7NkdWxvIHBhcmEgdmVyaWZpY2FyIGxvcyBtaWVtYnJvcyBkZWwgQ0FCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGFnZW50Lid9ID0gJ03Ds2R1bG8gcGFyYSB2ZXJpZmljYXIgZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGNoYW5nZSBidWlsZGVyLid9ID0gJ03Ds2R1bG8gcGFyYSB2ZXJpZmljYXIgZWwgY3JlYWRvciBkZSBsb3MgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgbWFuYWdlci4nfSA9ICdNw7NkdWxvIHBhcmEgdmVyaWZpY2FyIGVsIGFkbWluaXN0cmFkb3IgZGUgbG9zIGNhbWJpb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgd29ya29yZGVyIGFnZW50Lid9ID0gJ03Ds2R1bG8gcGFyYSB2ZXJpZmljYXIgZWwgYWdlbnRlIGRlIGxhIG9yZGVuIGRlIHRyYWJham8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIG5vIHdvcmtvcmRlciBhZ2VudCBpcyBzZXQuJ30gPSAnTcOzZHVsbyBwYXJhIHZlcmlmaWNhciBzaSBlbCBhZ2VudGUgZGUgdW5hIG9yZGVuIGRlIHRyYWJham8gc2UgaGEgZXN0YWJsZWNpZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIHRoZSBhZ2VudCBpcyBjb250YWluZWQgaW4gdGhlIGNvbmZpZ3VyZWQgbGlzdC4nfSA9CiAgICAgICAgJ03Ds2R1bG8gcGFyYSB2ZXJpZmljYXIgc2kgZWwgYWdlbnRlIGVzdMOhIGluY2x1aWRvIGVuIGxhIGxpc3RhIGRlIGNvbmZpZ3VyYWNpw7NuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBhIGxpbmsgdG8gY3JlYXRlIGEgY2hhbmdlIGZyb20gdGhpcyB0aWNrZXQuIFRoZSB0aWNrZXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGxpbmtlZCB3aXRoIHRoZSBuZXcgY2hhbmdlLid9ID0KICAgICAgICAnTcOzZHVsbyBxdWUgbXVlc3RyYSB1biB2w61uY3VsbyBwYXJhIGNyZWFyIHVuIGNhbWJpbyBkZSBlc3RlIHRpY2tldC4gRWwgdGlja2V0IHNlIHZpbmN1bGFyw6EgYXV0b21hdGljYW1lbnRlIGNvbiBlbCBjYW1iaW8gbnVldm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIGFsbCB3b3Jrb3JkZXJzIGluIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyAoZnJvbSB0ZW1wbGF0ZSknfSA9ICdOdWV2byAoZGVzZGUgcGxhbnRpbGxhKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IHVzZXJzIG9mIHRoZXNlIGdyb3VwcyBoYXZlIHRoZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdGlja2V0IHR5cGVzIGFzIGRlZmluZWQgaW4gIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIgaWYgdGhlIGZlYXR1cmUgIlRpY2tldDo6QWNsOjpNb2R1bGUjIyMyMDAtVGlja2V0OjpBY2w6Ok1vZHVsZSIgaXMgZW5hYmxlZC4nfSA9CiAgICAgICAgJ1PDs2xvIGxvcyB1c3VhcmlvcyBxdWUgcGVydGVuZXpjYW4gYSBlc3RvcyBncnVwb3MgdGVuZHLDoW4gcGVybWlzbyBkZSB1c2FyIGxvcyB0aXBvcyBkZSB0aWNrZXRzLCB0YWwgeSBjb21vIHNlIGRlZmluZSBlbiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiBzaSBsYSBmdW5jaW9uYWxpZGFkICJUaWNrZXQ6OkFjbDo6TW9kdWxlIyMjMjAwLVRpY2tldDo6QWNsOjpNb2R1bGUiIGVzdMOhIGhhYmlsaXRhZGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG92ZXIgYWxsIENoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BJUid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KSd9ID0gJ1JldmlzacOzbiBQb3N0IEltcGxlbWVudGFjacOzbiAoUElSKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQU0EnfSA9ICdQU0EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIFVzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFzayBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNoYW5nZXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgY2hhbmdlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXNlbnRzIGEgbGluayBpbiB0aGUgbWVudSB0byBzaG93IHRoZSBpbnZvbHZlZCBwZXJzb25zIGluIGEgY2hhbmdlLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggY2hhbmdlIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQcmVzZW50YSB1biB2w61uY3VsbyBlbiBlbCBtZW7DuiBwYXJhIG1vc3RyYXIgYSBsYXMgcGVyc29uYXMgaW52b2x1Y3JhZGFzIGVuIHVuIGNhbWJpbywgZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIGNhbWJpbyBkZSBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpJ30gPSAnRGlzcG9uaWJpbGlkYWQgUHJveWVjdGFkYSBkZWwgU2VydmljaW8gKFBTQSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpIG9mIGNoYW5nZXMuIE92ZXJ2aWV3IG9mIGFwcHJvdmVkIGNoYW5nZXMgYW5kIHRoZWlyIHNlcnZpY2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgaW4gb3JkZXIgZm9yIGFuIGFnZW50IHRvIHRha2UgYSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICdQcml2aWxlZ2lvcyBuZWNlc2FyaW9zIHBhcmEgcXVlIHVuIGFnZW50ZSB0b21lIHVuYSBvcmRlbiBkZSB0cmFiYWpvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGFjY2VzcyB0aGUgb3ZlcnZpZXcgb2YgYWxsIGNoYW5nZXMuJ30gPSAnUGVybWlzb3MgbmVjZXNhcmlvcyBwYXJhIGFjY2VkZXIgYSBsYSB2aXN0YSBkZSByZXN1bWVuIGRlIHRvZG9zIGxvcyBjYW1iaW9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGFkZCBhIHdvcmtvcmRlci4nfSA9ICdQcml2aWxlZ2lvcyBuZWNlc2FyaW9zIHBhcmEgYWdyZWdhciB1bmEgb3JkZW4gZGUgdHJhYmFqby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjaGFuZ2UgdGhlIHdvcmtvcmRlciBhZ2VudC4nfSA9ICdQcml2aWxlZ2lvcyBuZWNlc2FyaW9zIHBhcmEgbW9kaWZpY2FyIGVsIGFnZW50ZSBkZSB1bmEgb3JkZW4gZGUgdHJhYmFqby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlLid9ID0gJ1ByaXZpbGVnaW9zIG5lY2VzYXJpb3MgcGFyYSBjcmVhciB1bmEgcGxhbnRpbGxhIGEgcGFydGlyIGRlIHVuIGNhbWJpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlc1wnIENBQi4nfSA9CiAgICAgICAgJ1ByaXZpbGVnaW9zIG5lY2VzYXJpb3MgcGFyYSBjcmVhciB1bmEgcGxhdGlsbGEgYSBwYXJ0aXIgZGUgdW4gQ0FCIGRlIGNhbWJpb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIHdvcmtvcmRlci4nfSA9ICdQcml2aWxlZ2lvcyBuZWNlc2FyaW9zIHBhcmEgY3JlYXIgdW5hIHBsYW50aWxsYSBhIHBhcnRpciBkZSB1bmEgb3JkZW4gZGUgdHJhYmFqby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgY2hhbmdlcyBmcm9tIHRlbXBsYXRlcy4nfSA9ICdQcml2aWxlZ2lvcyByZXF1ZXJpZG9zIHBhcmEgY3JlYXIgY2FtYmlvcyBiYXNhZG9zIGVuIHBsYW50aWxsYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMuJ30gPSAnUHJpdmlsZWdpb3MgbmVjZXNhcmlvcyBwYXJhIGNyZWFyIGNhbWJpb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgdGVtcGxhdGUuJ30gPSAnUHJpdmlsZWdpb3MgbmVjZXNhcmlvcyBwYXJhIGVsaW1pbmFyIHVuYSBwbGFudGlsbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgd29ya29yZGVyLid9ID0gJ1ByaXZpbGVnaW9zIG5lY2VzYXJpb3MgcGFyYSBlbGltaW5hciB1bmEgb3JkZW4gZGUgdHJhYmFqby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY2hhbmdlcy4nfSA9ICdQcml2aWxlZ2lvcyByZXF1ZXJpZG9zIHBhcmEgZWxpbWluYXIgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgdGVtcGxhdGUuJ30gPSAnUHJpdmlsZWdpb3MgbmVjZXNhcmlvcyBwYXJhIG1vZGlmaWNhciB1bmEgcGxhbnRpbGxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgYSB3b3Jrb3JkZXIuJ30gPSAnUHJpdmlsZWdpb3MgbmVjZXNhcmlvcyBwYXJhIG1vZGlmaWNhciB1bmEgb3JkZW4gZGUgdHJhYmFqby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGNoYW5nZXMuJ30gPSAnUHJpdmlsZWdpb3MgbmVjZXNhcmlvcyBwYXJhIG1vZGlmaWNhciBjYW1iaW9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGNvbmRpdGlvbnMgb2YgY2hhbmdlcy4nfSA9ICdQcml2aWxlZ2lvcyBuZWNlc2FyaW9zIHBhcmEgbW9kaWZpY2FyIGxhcyBjb25kaWNpb25lcyBkZSBsb3MgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb250ZW50IG9mIGEgdGVtcGxhdGUuJ30gPSAnUHJpdmlsZWdpb3MgcmVxdWVyaWRvcyBwYXJhIGVkaXRhciBlbCBjb250ZW5pZG8gZGUgdW5hIHBsYW50aWxsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBpbnZvbHZlZCBwZXJzb25zIG9mIGEgY2hhbmdlLid9ID0KICAgICAgICAnUHJpdmlsZWdpb3MgbmVjZXNhcmlvcyBwYXJhIG1vZGlmaWNhciBsYSBsaXN0YSBkZSBwZXJzb25hcyBpbnZvbHVjcmFkYXMgZW4gdW4gY2FtYmlvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIG1vdmUgY2hhbmdlcyBpbiB0aW1lLid9ID0gJ1ByaXZpbGVnaW9zIG5lY2VzYXJpb3MgcGFyYSBtb3ZlciBjYW1iaW9zIGVuIGVsIHRpZW1wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBwcmludCBhIGNoYW5nZS4nfSA9ICdQcml2aWxlZ2lvcyBuZWNlc2FyaW9zIHBhcmEgaW1wcmltaXIgdW4gY2FtYmlvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHJlc2V0IGNoYW5nZXMuJ30gPSAnUHJpdmlsZWdpb3MgcmVxdWVyaWRvcyBwYXJhIHJlYWp1c3RhciBjYW1iaW9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgYSB3b3Jrb3JkZXIuJ30gPSAnUHJpdmlsZWdpb3MgbmVjZXNhcmlvcyBwYXJhIHZlciB1bmEgb3JkZW4gZGUgdHJhYmFqby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGNoYW5nZXMuJ30gPSAnUHJpdmlsZWdpb3MgbmVjZXNhcmlvcyBwYXJhIHZlciBsb3MgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyBhIENBQiBtZW1iZXIuJ30gPQogICAgICAgICdQcml2aWxlZ2lvcyBuZWNlc2FyaW9zIHBhcmEgdmVyIGxhIGxpc3RhIGRlIGxvcyBjYW1iaW9zLCBkb25kZSBlbCB1c3VhcmlvIGVzIHVuIG1pZW1icm8gZGVsIENBQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPQogICAgICAgICdQcml2aWxlZ2lvcyBuZWNlc2FyaW9zIHBhcmEgdmVyIGxhIGxpc3RhIGRlIGxvcyBjYW1iaW9zLCBkb25kZSBlbCB1c3VhcmlvIGVzIGVsIGFkbWluaXN0cmFkb3IgZGUgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IG92ZXJ2aWV3IG92ZXIgYWxsIHRlbXBsYXRlcy4nfSA9ICdQZXJtaXNvcyBuZWNlc2FyaW9zIHBhcmEgYWNjZWRlciBhIGxhIHZpc3RhIGRlIHJlc3VtZW4gZGUgdG9kYXMgbGFzIHBsYW50aWxsYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJ1ByaXZpbGVnaW9zIG5lY2VzYXJpb3MgcGFyYSB2ZXIgbGFzIGNvbmRpY2lvbmVzIGRlIGxvcyBjYW1iaW9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UuJ30gPSAnUHJpdmlsZWdpb3MgbmVjZXNhcmlvcyBwYXJhIHZlciBsYSBoaXN0b3JpYSBkZSBsb3MgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyLid9ID0gJ1ByaXZpbGVnaW9zIG5lY2VzYXJpb3MgcGFyYSB2ZXIgbGEgaGlzdG9yaWEgZGUgdW5hIG9yZGVuIGRlIHRyYWJham8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgY2hhbmdlLid9ID0gJ1ByaXZpbGVnaW9zIG5lY2VzYXJpb3MgcGFyYSBhY2NlZGVyIGEgbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGxhIGhpc3RvcmlhIGRlIGxvcyBjYW1iaW9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgem9vbSBvZiBhIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJ1ByaXZpbGVnaW9zIG5lY2VzYXJpb3MgcGFyYSB2ZXIgbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGxhIGhpc3RvcmlhIGRlIHVuYSBvcmRlbiBkZSB0cmFiYWpvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgQ2hhbmdlIFNjaGVkdWxlLid9ID0gJ1ByaXZpbGVnaW9zIG5lY2VzYXJpb3MgcGFyYSB2ZXIgbGEgbGlzdGEgZGUgbGEgYWdlbmRhIGRlIGxvcyBjYW1iaW9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlIFBTQS4nfSA9ICdQcml2aWxlZ2lvcyBuZWNlc2FyaW9zIHBhcmEgdmVyIGxhIGxpc3RhIGRlIGxhIFBTQSBkZSBsb3MgY2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIGNoYW5nZXMgd2l0aCBhbiB1cGNvbWluZyBQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KS4nfSA9CiAgICAgICAgJ1ByaXZpbGVnaW9zIG5lY2VzYXJpb3MgcGFyYSB2ZXIgbGEgbGlzdGEgZGUgY2FtYmlvcyBjb24gdW4gUElSIChSZXZpc2nDs24gUG9zdCBJbXBsZW1lbnRhY2nDs24pIHByw7N4aW1vLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIGNoYW5nZXMuJ30gPSAnUHJpdmlsZWdpb3MgbmVjZXNhcmlvcyBwYXJhIHZlciB1bmEgbGlzdGEgZGUgbWlzIGNhbWJpb3MgcHJvcGlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biB3b3Jrb3JkZXJzLid9ID0gJ1ByaXZpbGVnaW9zIG5lY2VzYXJpb3MgcGFyYSB2ZXIgdW5hIGxpc3RhIGRlIG1pcyDDs3JkZW5lcyBkZSB0cmFiYWpvIHByb3BpYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gd3JpdGUgYSByZXBvcnQgZm9yIHRoZSB3b3Jrb3JkZXIuJ30gPSAnUHJpdmlsZWdpb3MgbmVjZXNhcmlvcyBwYXJhIGhhY2VyIHVuIHJlcG9ydGUgZGUgdW5hIG9yZGVuIGRlIHRyYWJham8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIHRhc2sgdG8gY2hlY2sgaWYgc3BlY2lmaWMgdGltZXMgaGF2ZSBiZWVuIHJlYWNoZWQgaW4gY2hhbmdlcyBhbmQgd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIGNoYW5nZSBhcyBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2hlZHVsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY3JlZW4gYWZ0ZXIgY3JlYXRpbmcgYSB3b3Jrb3JkZXInfSA9ICdQYW50YWxsYSBwb3N0ZXJpb3IgYSBsYSBjcmVhY2nDs24gZGUgdW5hIG9yZGVuIGRlIHRyYWJham8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMnfSA9ICdCdXNjYXIgQ2FtYmlvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ2hhbmdlcy4nfSA9ICdCdXNjYXIgQ2FtYmlvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY2hhbmdlIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY2hhbmdlIG51bWJlciwgdGhlIFN5c3RlbUlEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZCB3aXRoIFN5c3RlbUlELmNvdW50ZXIgZm9ybWF0IChlLmcuIDEwMDExOCwgMTAwMTE5KS4gV2l0aCAiRGF0ZSIsIHRoZSBjaGFuZ2UgbnVtYmVycyB3aWxsIGJlIGdlbmVyYXRlZCBieSB0aGUgY3VycmVudCBkYXRlIGFuZCBhIGNvdW50ZXI7IHRoaXMgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuY291bnRlciwgZS5nLiAyMDEwMDYyNDAwMDAxLCAyMDEwMDYyNDAwMDAyLiBXaXRoICJEYXRlQ2hlY2tzdW0iLCB0aGUgY291bnRlciB3aWxsIGJlIGFwcGVuZGVkIGFzIGNoZWNrc3VtIHRvIHRoZSBzdHJpbmcgb2YgZGF0ZSBwbHVzIHRoZSBTeXN0ZW1JRC4gVGhlIGNoZWNrc3VtIHdpbGwgYmUgcm90YXRlZCBvbiBhIGRhaWx5IGJhc2lzLiBUaGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LlN5c3RlbUlELkNvdW50ZXIuQ2hlY2tTdW0sIGUuZy4gMjAxMDA2MjQxMDAwMDAxNywgMjAxMDA2MjQxMDAwMDAyNi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGFnZW50IGZvciB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAnRXN0YWJsZWNlciBsYSBhbHR1cmEgcHJlZGV0ZXJtaW5hZGEgKGVuIHDDrXhlbGVzKSBkZSBsb3MgY2FtcG9zIEhUTUwgwqtpbmxpbmXCuyBkZSBBZ2VudElUU01DaGFuZ2Vab29tIHkgIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50SVRTTUNoYW5nZVpvb20gYW5kIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJ30gPQogICAgICAgICdFc3RhYmxlY2VyIGxhIGFsdHVyYSBwcmVkZXRlcm1pbmFkYSAoZW4gcMOteGVsZXMpIGRlIGxvcyBjYW1wb3MgSFRNTCDCq2lubGluZcK7IGRlIEFnZW50SVRTTUNoYW5nZVpvb20geSAgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgbWluaW1hbCBjaGFuZ2UgY291bnRlciBzaXplIChpZiAiQXV0b0luY3JlbWVudCIgd2FzIHNlbGVjdGVkIGFzIElUU01DaGFuZ2U6Ok51bWJlckdlbmVyYXRvcikuIERlZmF1bHQgaXMgNSwgdGhpcyBtZWFucyB0aGUgY291bnRlciBzdGFydHMgZnJvbSAxMDAwMC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHVwIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciBjaGFuZ2VzLid9ID0gJ0NvbmZpZ3VyYSBsYSBtw6FxdWluYSBkZSBlc3RhZG9zIHBhcmEgbG9zIGNhbWJpb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdXAgdGhlIHN0YXRlIG1hY2hpbmUgZm9yIHdvcmtvcmRlcnMuJ30gPSAnQ29uZmlndXJhIGxhIG3DoXF1aW5hIGRlIGVzdGFkb3MgcGFyYSBsYXMgw7NyZGVuZXMgZGUgdHJhYmFqbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGNoZWNrYm94IGluIHRoZSBBZ2VudElUU01Xb3JrT3JkZXJFZGl0IHNjcmVlbiB0aGF0IGRlZmluZXMgaWYgdGhlIHRoZSBmb2xsb3dpbmcgd29ya29yZGVycyBzaG91bGQgYWxzbyBiZSBtb3ZlZCBpZiBhIHdvcmtvcmRlciBpcyBtb2RpZmllZCBhbmQgdGhlIHBsYW5uZWQgZW5kIHRpbWUgaGFzIGNoYW5nZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGNoYW5naW5nIHRoZSB3b3Jrb3JkZXIgYWdlbnQsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZSBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSBjaGFuZ2UsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIHbDrW5jdWxvIGVuIGVsIG1lbsO6IHF1ZSBwZXJtaXRlIGRlZmluaXIgdW4gY2FtYmlvIGNvbW8gdW5hIHBsYW50aWxsYSwgZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIGNhbWJpbywgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgd29ya29yZGVyIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgd29ya29yZGVyLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBlZGl0aW5nIHRoZSByZXBvcnQgb2YgYSB3b3Jrb3JkZXIsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNoYW5nZSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIGxpbmsgZW4gZWwgbWVuw7ogcGFyYSB2aW5jdWxhciB1biBjYW1iaW8gY29uIG90cm8gb2JqZXRvLCBlbiBsYSB2aXN0YSBkZXRhbGxhZGEgZGUgZGljaG8gY2FtYmlvIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgd29ya29yZGVyIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBtb3ZpbmcgdGhlIHRpbWUgc2xvdCBvZiBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIHbDrW5jdWxvIGVuIGVsIG1lbsO6IHF1ZSBwZXJtaXRlIG1vdmVyIGVsIHBlcmlvZG8gZGUgdGllbXBvIGRlIHVuIGNhbWJpbywgZW4gc3UgdmlzdGEgZGV0YWxsYWRhIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0YWtpbmcgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBjb25kaXRpb25zIG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIHbDrW5jdWxvIGVuIGVsIG1lbsO6IHBhcmEgYWNjZWRlciBhIGxhcyBjb25kaWNpb25lcyBkZSB1biBjYW1iaW8gZW4gc3UgdmlzdGEgZGV0YWxsYWRhIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgdW4gbGluayBlbiBlbCBtZW7DuiBwYXJhIGFjY2VkZXIgYSBsYSBoaXN0b3JpYSBkZSB1biBjYW1iaW8gZW4gc3UgdmlzdGEgZGV0YWxsYWRhLCBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFkZCBhIHdvcmtvcmRlciBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjaGFuZ2UgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTXVlc3RyYSB1biB2w61uY3VsbyBlbiBlbCBtZW7DuiBwYXJhIGVsaW1pbmFyIHVuIGNhbWJpbyBlbiBsYSB2aXN0YSBkZSB6b29tIG8gZW4gbGEgaW50ZXJmYXogZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgd29ya29yZGVyIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTXVlc3RyYSB1biBsaW5rIGVuIGVsIG1lbsO6IHBhcmEgZWRpdGFyIHVuIGNhbWJpbyBlbiBzdSB2aXN0YSBkZXRhbGxhZGEsIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgdW4gbGluayBlbiBlbCBtZW7DuiBwYXJhIHJlZ3Jlc2FyIGVuIGxhIHZpc3RhIGRldGFsbGFkYSBkZSB1biBjYW1iaW8gZGUgbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIHdvcmtvcmRlciB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgdW4gbGluayBlbiBlbCBtZW7DuiBwYXJhIGltcHJpbWlyIHVuIGNhbWJpbyBlbiBzdSB2aXN0YSBkZXRhbGxhZGEsIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byByZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTXVlc3RyYSB1biB2w61uY3VsbyBlbiBlbCBtZW7DuiBwYXJhIHJlYWp1c3RhciB1biBjYW1iaW8geSBzdXMgb3JkZW5lcyBkZSB0cmFiYWpvIGVuIGxhIHZpc3RhIGRlIHpvb20gbyBlbiBsYSBpbnRlcmZheiBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjaGFuZ2UgaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTXVlc3RyYSBsYSBoaXN0b3JpYSBkZWwgY2FtYmlvIChvcmRlbmFkbyBpbnZlcnNhbWVudGUpIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRlIE1hY2hpbmUnfSA9ICdNw6FxdWluYSBkZSBFc3RhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0b3JlcyBjaGFuZ2UgYW5kIHdvcmtvcmRlciBpZHMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgdGVtcGxhdGUgaWQsIHdoaWxlIGEgdXNlciBpcyBlZGl0aW5nIGEgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXInfSA9ICdUb21hciBPcmRlbiBkZSBUcmFiYWpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgV29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIE92ZXJ2aWV3J30gPSAnUmVzdW1lbiBkZSBQbGFudGlsbGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlLid9ID0gJ1BsYW50aWxsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY2hhbmdlLCBlLmcuIENoYW5nZSMsIE15Q2hhbmdlIy4gVGhlIGRlZmF1bHQgaXMgQ2hhbmdlIy4nfSA9CiAgICAgICAgJ0lkZW50aWZpY2Fkb3IgZGUgdW4gY2FtYmlvLCBwb3IgZWplbXBsbzogQ2FtYmlvIywgTWlDYW1iaW8jLiBFbCBkZWZhdWx0IGVzIENoYW5nZSMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIHdvcmtvcmRlciwgZS5nLiBXb3Jrb3JkZXIjLCBNeVdvcmtvcmRlciMuIFRoZSBkZWZhdWx0IGlzIFdvcmtvcmRlciMuJ30gPQogICAgICAgICdJZGVudGlmaWNhZG9yIGRlIHVuYSBvcmRlbiBkZSB0cmFiYWpvLCBwb3IgZWplbXBsbzogT3JkZW5EZVRyYWJham8jLCBNaU9yZGVuRGVUcmFiYWpvIy4gRWwgZGVmYXVsdCBlcyBXb3Jrb3JkZXIjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIEFDTCBtb2R1bGUgcmVzdHJpY3RzIHRoZSB1c3VhZ2Ugb2YgdGhlIHRpY2tldCB0eXBlcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9uIFwnSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzXCcsIHRvIHVzZXJzIG9mIHRoZSBncm91cHMgYXMgZGVmaW5lZCBpbiAiSVRTTUNoYW5nZTo6UmVzdHJpY3RUaWNrZXRUeXBlczo6R3JvdXBzIi4gQXMgdGhpcyBBQ0wgY291bGQgY29sbGlkZSB3aXRoIG90aGVyIEFDTHMgd2hpY2ggYXJlIGFsc28gcmVsYXRlZCB0byB0aGUgdGlja2V0IHR5cGUsIHRoaXMgc3lzY29uZmlnIG9wdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBzaG91bGQgb25seSBiZSBhY3RpdmF0ZWQgaWYgbmVlZGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgU2xvdCd9ID0gJ1BlcmlvZG8gZGUgdGllbXBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R5cGVzIG9mIHRpY2tldHMsIHdoZXJlIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IGEgbGluayB0byBhZGQgYSBjaGFuZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICdUaXBvcyBkZSB0aWNrZXRzIGVuIGN1eWEgdmlzdGEgZGV0YWxsYWRhIGFwYXJlY2Vyw6EgdW4gdsOtbmN1bG8gcGFyYSBhZ3JlZ2FyIHVuIGNhbWJpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBTZWFyY2gnfSA9ICdCw7pzcXVlZGEgZGUgVXN1YXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWRkIChmcm9tIHRlbXBsYXRlKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFnZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgRGVsZXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEhpc3RvcnkgWm9vbS4nfSA9ICdWaXN0YSBkZXRhbGxhZGEgZGVsIEhpc3RvcmlhbCBkZSBsYSBPcmRlbiBkZSB0cmFiYWpvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFJlcG9ydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20uJ30gPSAnVmlzdGEgZGV0YWxsYWRhIGRlIGxhIE9yZGVuIGRlIHRyYWJham8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29uY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVndWxhcmx5J30gPSAnJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZmFfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICfYt9io2YLZhyA8LT4g2KfYq9ixIDwtPiDYp9mE2YjbjNiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENhdGVnb3J5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICfZhdiv24zYsduM2Kog2KfZhNmI24zYqiDZhtin2LTbjCDYp9iyINiq2LHaqduM2Kgg2LfYqNmC2YcgPC0+INin2KvYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAn2KrYrti124zYtSDYp9mE2YjbjNiqJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlTWFuYWdlbWVudCBOb3RpZmljYXRpb24gTWFuYWdlbWVudCd9ID0gJ9mF2K/bjNix24zYqiDYp9i52YTYp9mGINmF2LHYqNmI2Lcg2KjZhyDZhdiv24zYsduM2Kog2KrYutuM24zYsdin2Kog2K/YsSBJVFNNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOb3RpZmljYXRpb24gUnVsZSd9ID0gJ9in2YHYstmI2K/ZhiDZgtin2LnYr9mHINin2LnZhNin2YYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVsZSd9ID0gJ9mC2KfYudiv2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBub3RpZmljYXRpb24gc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ9in2LnZhNin2YYg2KjYp9uM2K8g2K/Yp9ix2KfbjCDZhtin2YUg2KjYp9i02K8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQuJ30gPSAn2YbYp9mFINmF2YjYsdivINmG24zYp9iyINin2LPYqi4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTVN0YXRlTWFjaGluZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gU3RhdGUgTWFjaGluZSd9ID0gJ9mF2KfYtNuM2YYg2K3Yp9mE2Kog2YXYr9uM2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgY2F0YWxvZyBjbGFzcyEnfSA9ICfbjNqpINqp2YTYp9izINin2YbYqtiu2KfYqCDaqdmG24zYryEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRhbG9nIGNsYXNzIGlzIHJlcXVpcmVkISd9ID0gJ9qp2YTYp9izINmB2YfYsdiz2Kog2YXZiNix2K8g2YbbjNin2LIg2KfYs9iqISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAn2KfZgdiy2YjYr9mGINuM2qkg2KfZhtiq2YLYp9mEINmI2LbYuduM2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ9qp2YTYp9izINmB2YfYsdiz2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IE5hbWUnfSA9ICfZhtin2YUg2LTbjNihJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG92ZXIgc3RhdGUgdHJhbnNpdGlvbnMgZm9yJ30gPSAn2YbZhdin24wg2qnZhNuMINix2YjbjCDYp9mG2KrZgtin2YTigIzZh9in24wg2YjYtti524zYqiDYqNix2KfbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ9in2YHYstmI2K/ZhiDbjNqpINin2YbYqtmC2KfZhCDZiNi22LnbjNiqINio2LHYp9uMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBzdGF0ZSEnfSA9ICfZhNi32YHYpyDbjNqpINmI2LbYuduM2Kog2LHYpyDYp9mG2KrYrtin24wg2YbZhdin24zbjNivISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGEgbmV4dCBzdGF0ZSEnfSA9ICfZhNi32YHYpyDbjNqpINmI2LbYuduM2Kog2KjYudiv24wg2KfZhtiu2KfYqCDZhtmF2KfbjNuM2K8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ9mI24zYsdin24zYtCDbjNqpINin2YbYqtmC2KfZhCDZiNi22LnbjNiqINio2LHYp9uMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIHN0YXRlIHRyYW5zaXRpb24nfSA9ICfYotuM2Kcg2KfYsiDYrdiw2YEg2KfZhtiq2YLYp9mEINmI2LbYuduM2Kog2YXYt9mF2KbZhiDZh9iz2KrbjNiv2J8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENoYW5nZSd9ID0gJ9in2YHYstmI2K/ZhiDYqti624zbjNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlJ30gPSAn2KrYutuM24zYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdXN0aWZpY2F0aW9uJ30gPSAn2K/ZhNuM2YQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5wdXQgaW52YWxpZC4nfSA9ICfZiNix2YjYr9uMINmG2KfZhdi52KrYqNixINin2LPYqi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAn2KfYq9ixINmF2K7YsdioJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBEYXRlJ30gPSAn2KrYp9ix24zYriDYr9ix2K7ZiNin2LPYqiDYtNiv2YcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IENoYW5nZSBUZW1wbGF0ZSd9ID0gJ9in2YbYqtiu2KfYqCDZgtin2YTYqCDYqti624zbjNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgdHlwZSd9ID0gJ9mG2YjYuSDYstmF2KfZhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHRpbWUgdHlwZS4nfSA9ICfZhtmI2Lkg2LLZhdin2YYg2YbYp9mF2LnYqtio2LHYp9iz2KouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB0aW1lJ30gPSAn2LLZhdin2YYg2KzYr9uM2K8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBDQUIgYXMgdGVtcGxhdGUnfSA9ICfYsNiu24zYsdmHINqp2LHYr9mGINmH24zYptiqINmF2LTYp9mI2LHYp9mGINiq2LrbjNuM2LEg2KjZhyDYudmG2YjYp9mGINmC2KfZhNioJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIHRvIGludm9sdmVkIHBlcnNvbnMgc2NyZWVuJ30gPSAn2KjZhyDYtdmB2K3ZhyDYp9mB2LHYp9ivINiv2LHar9uM2LEg2qnYp9ixINio2LHZiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIE5hbWUnfSA9ICfZhtin2YUg2YXYudiq2KjYsSDZhtuM2LPYqic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25zIGFuZCBBY3Rpb25zJ30gPSAn2LTYsdmI2Lcg2Ygg2LnZhdmE24zYp9iq4oCM2YfYpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZGl0aW9uJ30gPSAn2K3YsNmBINi02LHYtyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGNvbmRpdGlvbid9ID0gJ9in2YHYstmI2K/ZhiDYtNix2Lcg2KzYr9uM2K8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29uZGl0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWQgYSB2YWxpZCBuYW1lLid9ID0gJ9uM2qkg2YbYp9mFINmF2LnYqtio2LEg2YXZiNix2K8g2YbbjNin2LIg2KfYs9iqLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIG5hbWUgaXMgbmVlZGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZTonfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBuYW1lIGlzIGFscmVhZHkgdXNlZCBieSBhbm90aGVyIGNvbmRpdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF0Y2hpbmcnfSA9ICfYqti32KfYqNmCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FueSBleHByZXNzaW9uIChPUiknfSA9ICfZh9ixINi52KjYp9ix2KrbjCAoT1IpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBleHByZXNzaW9ucyAoQU5EKSd9ID0gJ9mH2YXZhyDYudio2KfYsdin2KogKEFORCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwcmVzc2lvbnMnfSA9ICfYudio2KfYsdin2Kog2YXZhti32YLbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3Rvcid9ID0gJ9in2YbYqtiu2KfYqCDaqdmG2YbYr9mHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdG9yJ30gPSAn2KfZvtix2KfYqtmI2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEV4cHJlc3Npb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRXhwcmVzc2lvbnMgZm91bmQuJ30gPSAn2YfbjNqGINi52KjYp9ix2KrbjCDbjNin2YHYqiDZhti02K8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgZXhwcmVzc2lvbid9ID0gJ9in2YHYstmI2K/ZhiDbjNqpINi52KjYp9ix2Kog2YXZhti32YLbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEFjdGlvbnMgZm91bmQuJ30gPSAn2YfbjNqGINi52YXZhNuM2KfYqtuMINuM2KfZgdiqINmG2LTYry4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBhY3Rpb24nfSA9ICfYp9mB2LLZiNiv2YYg2LnZhdmE24zYp9iqINis2K/bjNivJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjaGFuZ2U/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0ICVzJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXInfSA9ICfYr9iz2KrZiNixINqp2KfYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGRldGFpbHMnfSA9ICfZhtmF2KfbjNi0INis2LLYptuM2KfYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHdvcmtvcmRlcid9ID0gJ9mG2YXYp9uM2LQg2K/Ys9iq2YjYsSDaqdin2LHZh9inJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VIaXN0b3J5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlsZWQgaGlzdG9yeSBpbmZvcm1hdGlvbiBvZiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RpZmllZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbGQgVmFsdWUnfSA9ICfZhdmC2K/Yp9ixINmC2K/bjNmF24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFZhbHVlJ30gPSAn2YXZgtiv2KfYsSDYrNiv24zYryc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEludm9sdmVkIFBlcnNvbnMgb2YgJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZvbHZlZCBQZXJzb25zJ30gPSAn2KfZgdix2KfYryDYr9ix2q/bjNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZU1hbmFnZXInfSA9ICfZhdiv24zYsSDYqti624zbjNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgaW52YWxpZC4nfSA9ICfaqdin2LHYqNixINmG2KfZhdi52KrYqNixINin2LPYqi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlQnVpbGRlcid9ID0gJ9iz2KfYstmG2K/ZhyDYqti624zbjNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBBZHZpc29yeSBCb2FyZCd9ID0gJ9mH24zYptiqINmF2LTYp9mI2LHYp9mGINiq2LrbjNuM2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIFRlbXBsYXRlJ30gPSAn2YLYp9mE2Kgg2YfbjNim2Kog2YXYtNin2YjYsdin2YYg2KrYutuM24zYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHBseSBUZW1wbGF0ZSd9ID0gJ9in2LnZhdin2YQg2YLYp9mE2KgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3VGVtcGxhdGUnfSA9ICfZgtin2YTYqCDYrNiv24zYryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHRoaXMgQ0FCIGFzIHRlbXBsYXRlJ30gPSAn2KfbjNmGINix2Kcg2KjZhyDYudmG2YjYp9mGINuM2qkg2YLYp9mE2Kgg2LDYrtuM2LHZhyDaqdmGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0byBDQUInfSA9ICfYp9mB2LLZiNiv2YYg2KjZhyDZh9uM2KbYqiDZhdi02KfZiNix2KfZhiDYqti624zbjNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgVXNlcid9ID0gJ9qp2KfYsdio2LEg2YbYp9mF2LnYqtio2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBDQUInfSA9ICfZh9uM2KbYqiDZhdi02KfZiNixINqp2YbZiNmG24wnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAn2KrZhti424zZhdin2Kog2YXZgdin2K8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlcyBwZXIgcGFnZSd9ID0gJ9iq2LrbjNuM2LEg2K/YsSDYtdmB2K3Zhyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEJ1aWxkZXInfSA9ICfYs9in2LLZhtiv2Ycg2KrYutuM24zYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgTWFuYWdlcid9ID0gJ9mF2K/bjNixINiq2LrbjNuM2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVycyd9ID0gJ9iv2LPYqtmI2LEg2qnYp9ix2YfYpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBUaW1lJ30gPSAn2LLZhdin2YYg2K/Ysdiu2YjYp9iz2Kog2LTYr9mHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgU3RhcnQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVuZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBTdGFydCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBFbmQgVGltZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlUmVzZXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byByZXNldCB0aGlzIGNoYW5nZT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGUuZy4gMTAqNTE1NSBvciAxMDU2NTgqKSd9ID0gJ9mF2KvYp9mEOiAxMCo1MTU1INuM2KcgMTA1NjU4Kic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS5nLid9ID0gJ9io2Ycg2LnZhtmI2KfZhiDZhdir2KfZhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQ3VzdG9tZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgUmVwb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIEltcGFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQ2F0ZWdvcnknfSA9ICfYqti624zbjNixINi32KjZgtmH4oCM2KjZhtiv24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJlZm9yZS9hZnRlciknfSA9ICfZgtio2YQg2KfYsi/YqNi52K8g2KfYsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoYmV0d2VlbiknfSA9ICfYqNuM2YYnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBhcyBUZW1wbGF0ZSd9ID0gJ9iw2K7bjNix2Ycg2KrYutuM24zYsSDYqNmHINi52YbZiNin2YYg2YLYp9mE2KgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB0ZW1wbGF0ZSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAn2YLYp9mE2Kgg2KjYp9uM2K8g2K/Yp9ix2KfbjCDZhtin2YUg2KjYp9i02K8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLid9ID0gJ9mG2KfZhSDZgtin2YTYqCDZhdmI2LHYryDZhtuM2KfYsiDYp9iz2KouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IFN0YXRlcyd9ID0gJ9iq2YbYuNuM2YUg2YXYrNiv2K8g2YjYtti524zYquKAjNmH2KcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcndyaXRlIG9yaWdpbmFsIHRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCBjaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRpbWVTbG90CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIFRpbWUgU2xvdCd9ID0gJ9is2KfYqNis2KfbjNuMINi024zYp9ixINiy2YXYp9mGJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW5mb3JtYXRpb24nfSA9ICfYp9i32YTYp9i52KfYqiDYqti624zbjNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRWZmb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjY291bnRlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbml0aWF0b3IocyknfSA9ICfYoti62KfYstqv2LEg2KrYutuM24zYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUInfSA9ICfZh9uM2KbYqiDZhdi02KfZiNixINiq2LrbjNuM2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn2KLYrtix24zZhiDYqti624zbjNixICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfYotiu2LHbjNmGINiq2LrbjNuM2LEg2KrZiNiz2LcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICfYqtin24zbjNivJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICfYr9ix24zYp9mB2Kog2b7bjNmI2LPYqic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENBQiBUZW1wbGF0ZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBjaGFuZ2UgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5ldyBjaGFuZ2Ugd2lsbCBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgaXQgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyB3b3Jrb3JkZXIgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB0ZW1wb3JhcnkgY2hhbmdlIHdpbGwgYmUgY3JlYXRlZCB3aGljaCBjb250YWlucyB0aGUgd29ya29yZGVyLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wb3JhcnkgY2hhbmdlIGFuZCBuZXcgd29ya29yZGVyIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSB3b3Jrb3JkZXIgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgSUQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb250ZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUZW1wbGF0ZSBDb250ZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUZW1wbGF0ZSd9ID0gJ9it2LDZgSDZgtin2YTYqCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyIHRvICVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdHJ1Y3Rpb24nfSA9ICfYr9iz2KrZiNix2KfZhNi52YXZhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHdvcmtvcmRlciB0eXBlLid9ID0gJ9mG2YjYuSDYr9iz2KrZiNixINqp2KfYsSDZhtin2YXYudiq2KjYsSDYp9iz2KouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBwbGFubmVkIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIHBsYW5uZWQgZW5kIHRpbWUhJ30gPSAn2LLZhdin2YYg2KLYutin2LIg2KjYp9uM2K8g2YLYqNmEINin2LIg2LLZhdin2YYg2b7Yp9uM2KfZhiDYqNin2LTYryEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBmb3JtYXQuJ30gPSAn2YLYp9mE2Kgg2YbYp9mF2LnYqtio2LEg2KfYs9iqLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgV29ya29yZGVyIFRlbXBsYXRlJ30gPSAn2KfZhtiq2K7Yp9ioINmC2KfZhNioINiv2LPYqtmI2LEg2qnYp9ixJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZ2VudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBXb3Jrb3JkZXIgQWdlbnQgb2YgJXMlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgd29ya29yZGVyPyd9ID0gJ9ii24zYpyDZhdin24zZhCDYqNmHINit2LDZgSDYp9uM2YYg2K/Ys9iq2YjYsSDaqdin2LEg2YfYs9iq24zYr9ifJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIFdvcmtvcmRlci4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgQ29uZGl0aW9uISd9ID0KICAgICAgICAn2LTZhdinINmG2YXbjOKAjNiq2YjYp9mG24zYryDYp9uM2YYg2K/Ys9iq2YjYsSDaqdin2LEg2LHYpyDYrdiw2YEg2YbZhdin24zbjNivINiy24zYsdinINit2K/Yp9mC2YQg2K/YsSDbjNqpINi02LHYtyDYp9iz2KrZgdin2K/ZhyDYtNiv2Ycg2KfYs9iqLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIFdvcmtvcmRlciBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgQ29uZGl0aW9uKHMpJ30gPSAn2KfbjNmGINiv2LPYqtmI2LEg2qnYp9ixINiv2LEg2LTYsdmI2Lcg2LLbjNixINin2LPYqtmB2KfYr9mHINi02K/ZhyDYp9iz2KonOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgJXMlcy0lcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIGZvbGxvd2luZyB3b3Jrb3JkZXJzIGFjY29yZGluZ2x5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHRoZSBwbGFubmVkIGVuZCB0aW1lIG9mIHRoaXMgd29ya29yZGVyIGlzIGNoYW5nZWQsIHRoZSBwbGFubmVkIHN0YXJ0IHRpbWVzIG9mIGFsbCBmb2xsb3dpbmcgd29ya29yZGVycyB3aWxsIGJlIGNoYW5nZWQgYWNjb3JkaW5nbHknfSA9CiAgICAgICAgJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiAlcyVzLSVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJSZXBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUmVwb3J0IG9mICVzJXMtJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0J30gPSAn2q/Ystin2LHYtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWN0dWFsIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgdGltZSEnfSA9ICfYstmF2KfZhiDZiNin2YLYuduMINii2LrYp9iyINio2KfbjNivINmC2KjZhCDYp9iyINiy2YXYp9mGINmI2KfZgti524wg2K7Yp9iq2YXZhyDYqNin2LTYryEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgc2V0LCB3aGVuIHRoZSBhY3R1YWwgZW5kIHRpbWUgaXMgc2V0ISd9ID0KICAgICAgICAn2LLZhdin2YbbjCDaqdmHINiy2YXYp9mGINmI2KfZgti524wg2K7Yp9iq2YXZhyDZhdi02K7YtSDYtNiv2Ycg2KfYs9iq2Iwg2YXbjOKAjNio2KfbjNiz2Kog2LLZhdin2YYg2YjYp9mC2LnbjCDYoti62KfYsiDZhtuM2LIg2YXYtNiu2LUg2LTYr9mHINio2KfYtNivISc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGFrZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBBZ2VudCd9ID0gJ9qp2KfYsdi02YbYp9izINqp2YbZiNmG24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIHRha2UgdGhpcyB3b3Jrb3JkZXI/J30gPSAn2KLbjNinINmI2KfZgti52Kcg2YXbjOKAjNiu2YjYp9mH24zYryDYp9uM2YYg2K/Ys9iq2YjYsSDaqdin2LEg2LHYpyDYqNqv24zYsduM2K/Ynyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgV29ya29yZGVyIGFzIFRlbXBsYXRlJ30gPSAn2LDYrtuM2LHZhyDYr9iz2KrZiNixINqp2KfYsSDYqNmHINi52YbZiNin2YYg2YLYp9mE2KgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIG9yaWdpbmFsIHdvcmtvcmRlciAoYW5kIHN1cnJvdW5kaW5nIGNoYW5nZSknfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBJbmZvcm1hdGlvbid9ID0gJ9in2LfZhNin2LnYp9iqINmC2KfZhNioINqp2KfYsSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ2hhbmdlTm90aWZpY2F0aW9uLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmtub3duIG5vdGlmaWNhdGlvbiAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgd2FzIGFuIGVycm9yIGNyZWF0aW5nIHRoZSBub3RpZmljYXRpb24uJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENoYW5nZXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUFkZC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHdpdGggVGlja2V0SUQgJXMgZG9lcyBub3QgZXhpc3QhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pc3Npbmcgc3lzY29uZmlnIG9wdGlvbiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIGNoYW5nZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUFkZEZyb21UZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSBjaGFuZ2UgZnJvbSB0ZW1wbGF0ZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY2hhbmdlIGZvdW5kIGZvciBjaGFuZ2VJRCAlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIENBQiBvZiBjaGFuZ2UgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCB0aGUgdGVtcGxhdGUuJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDb25kaXRpb24ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBDb25kaXRpb25JRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vICVzIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgY3JlYXRlIG5ldyBjb25kaXRpb24hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgQ29uZGl0aW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgRXhwcmVzc2lvbklEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIG5ldyBFeHByZXNzaW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIEFjdGlvbklEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIG5ldyBBY3Rpb24hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgRXhwcmVzc2lvbklEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIEFjdGlvbklEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcjogVW5rbm93biBmaWVsZCB0eXBlICIlcyIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbklEICVzIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgZ2l2ZW4gQ2hhbmdlSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSAiJXMiIGRvZXMgbm90IGhhdmUgYW4gYWxsb3dlZCBjaGFuZ2Ugc3RhdGUgdG8gYmUgZGVsZXRlZCEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjaGFuZ2VJRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vua25vd24gdHlwZSAiJXMiIGVuY291bnRlcmVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSGlzdG9yeSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3Rvcnkgem9vbSwgbm8gSGlzdG9yeUVudHJ5SUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnlFbnRyeSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29ucy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UgQ0FCIGZvciBDaGFuZ2UgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTWFuYWdlci5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IENoYW5nZU1hbmFnZXInfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU15Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgQ0FCJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeUNoYW5nZXMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBDaGFuZ2VzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeVdvcmtPcmRlcnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBXb3Jrb3JkZXJzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQSVIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBQSVInfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVBTQS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFBTQSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGNyZWF0ZSBvdXRwdXQsIGFzIHRoZSB3b3Jrb3JkZXIgaXMgbm90IGF0dGFjaGVkIHRvIGEgY2hhbmdlISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBjcmVhdGUgb3V0cHV0LCBhcyBubyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93biBjaGFuZ2UgdGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXInfSA9ICfYr9iz2KrZiNixINqp2KfYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duIHdvcmtvcmRlciB0aXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBPdmVydmlldyAoJXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWRTdGFydFRpbWUnfSA9ICfYstmF2KfZhiDYoti62KfYsiDYqNix2YbYp9mF2YfigIzYsduM2LLbjCDYtNiv2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZEVuZFRpbWUnfSA9ICfYstmF2KfZhiDYrtin2KrZhdmHINio2LHZhtin2YXZh+KAjNix24zYstuMINi02K/Zhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxTdGFydFRpbWUnfSA9ICfYstmF2KfZhiDYoti62KfYsiDYr9ixINi52YXZhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxFbmRUaW1lJ30gPSAn2LLZhdin2YYg2K7Yp9iq2YXZhyDYr9ixINi52YXZhCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUmVzZXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byByZXNldCBXb3JrT3JkZXIgJXMgb2YgQ2hhbmdlICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gcmVzZXQgQ2hhbmdlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlU2NoZWR1bGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2UgU2NoZWR1bGUnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VUaXRsZSd9ID0gJ9i52YbZiNin2YYg2KrYutuM24zYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJzJ30gPSAn2K/Ys9iq2YjYsSDaqdin2LHZh9inJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZVN0YXRlJ30gPSAn2YjYtti524zYqiDYqti624zbjNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTZWFyY2ggUmVzdWx0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29yayBPcmRlciBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEp1c3RpZmljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEluc3RydWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBSZXBvcnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbXBhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBCeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEFnZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZm9yZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjaGFuZ2UgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSB0aGUgdGVtcGxhdGUgIiVzIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBjaGFuZ2UgIiVzIi4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRpbWVTbG90LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlIGNhblwndCBiZSBtb3ZlZCwgYXMgaXQgaGFzIG5vIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciBmaXJzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IG1vdmUgYSBjaGFuZ2Ugd2hpY2ggYWxyZWFkeSBoYXMgc3RhcnRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIG1vdmUgdGhlIGluZGl2aWR1YWwgd29ya29yZGVycyBpbnN0ZWFkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY3VycmVudCAlcyBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlICVzIG9mIGFsbCB3b3Jrb3JkZXJzIGhhcyB0byBiZSBkZWZpbmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gbW92ZSB0aW1lIHNsb3QgZm9yIHdvcmtvcmRlciAjJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgJXMgcGVybWlzc2lvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gVGVtcGxhdGVJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHRlbXBsYXRlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICIlcyIhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSB3b3Jrb3JkZXIgZnJvbSB0ZW1wbGF0ZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBUZW1wbGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyBvbiB0aGUgY2hhbmdlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIHdvcmtvcmRlciEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFnZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHNldCB0aGUgd29ya29yZGVyIGFnZW50IG9mIHRoZSB3b3Jrb3JkZXIgIiVzIiB0byBlbXB0eSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIHRoZSB3b3Jrb3JkZXIgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGZpbmQgQ2hhbmdlIGZvciBXb3JrT3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHdvcmtvcmRlciAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgV29ya09yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6Oid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgZW50cnkgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSBab29tJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUYWtlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdGFrZSB0aGUgd29ya29yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB3b3Jrb3JkZXIgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXQvSVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBjb25maWcgb3B0aW9uICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgb3B0aW9uICVzIG5lZWRzIHRvIGJlIGEgSEFTSCByZWYhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNvbmZpZyBvcHRpb24gZm91bmQgZm9yIHRoZSB2aWV3ICIlcyIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpdGxlOiAlcyB8IFR5cGU6ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgQ0FCcyd9ID0gJ9mH24zYptiqINmF2LTYp9mI2LHYp9mGINmF2YYnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015Q2hhbmdlcy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgQ2hhbmdlcyd9ID0gJ9iq2LrbjNuM2LHYp9iqINmF2YYnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015V29ya09yZGVycy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgV29yayBPcmRlcnMnfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01DaGFuZ2VNYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlcXVlc3RlZCd9ID0gJ9iv2LHYrtmI2KfYs9iqINi02K/Zhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIGFwcHJvdmFsJ30gPSAn2K/YsSDYp9mG2KrYuNin2LEg2KrYp9uM24zYryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWplY3RlZCd9ID0gJ9ix2K8g2LTYr9mHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FwcHJvdmVkJ30gPSAn2KrYp9uM24zYryDYtNiv2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW4gcHJvZ3Jlc3MnfSA9ICfYr9ixINit2KfZhCDYp9is2LHYpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIHBpcid9ID0gJ9iv2LEg2KfZhtiq2LjYp9ixINio2LHYsdiz24wg2b7YsyDYp9iyINm+24zYp9iv2YfigIzYs9in2LLbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzdWNjZXNzZnVsJ30gPSAn2YXZiNmB2YLbjNiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ZhaWxlZCd9ID0gJ9i02qnYs9iqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NhbmNlbGVkJ30gPSAn2YTYutmIINi02K/Zhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZXRyYWN0ZWQnfSA9ICfYrNmF2Lkg2LTYr9mHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NyZWF0ZWQnfSA9ICfYs9in2K7YqtmHINi02K/Zhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhY2NlcHRlZCd9ID0gJ9m+2LDbjNix2YHYqtmHINi02K/Zhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWFkeSd9ID0gJ9ii2YXYp9iv2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYXBwcm92YWwnfSA9ICfYqti12YjbjNioJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dvcmtvcmRlcid9ID0gJ9iv2LPYqtmI2LEg2qnYp9ixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JhY2tvdXQnfSA9ICfYt9ix2K0g2KjYp9iy2q/YtNiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2RlY2lzaW9uJ30gPSAn2KrYtdmF24zZhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwaXInfSA9ICfYqNix2LHYs9uMINm+2LMg2KfYsiDZvtuM2KfYr9mH4oCM2LPYp9iy24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMnfSA9ICfZh9iz2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbm90J30gPSAn2YbbjNiz2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZW1wdHknfSA9ICfYrtin2YTbjCDYp9iz2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbm90IGVtcHR5J30gPSAn2K7Yp9mE24wg2YbbjNiz2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZ3JlYXRlciB0aGFuJ30gPSAn2KjYstix2q/YqtixINin2LPYqiDYp9iyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGxlc3MgdGhhbid9ID0gJ9qp2Yjahtqp2KrYsSDYp9iz2Kog2KfYsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBiZWZvcmUnfSA9ICfZgtio2YQg2KfYsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBhZnRlcid9ID0gJ9m+2LMg2KfYsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjb250YWlucyd9ID0gJ9i02KfZhdmEINin2LPYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgY29udGFpbnMnfSA9ICfYtNin2YXZhCDZhtuM2LPYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiZWdpbnMgd2l0aCd9ID0gJ9i02LHZiNi5INmF24zigIzYtNmI2K8g2KjYpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlbmRzIHdpdGgnfSA9ICfZvtin24zYp9mGINmF24zigIzbjNin2KjYryDYqNinJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3NldCd9ID0gJ9iq2YbYuNuM2YUg2LTYr9mHJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBsaXN0IG9mIHRoZSBhZ2VudHMgd2hvIGhhdmUgcGVybWlzc2lvbiB0byB0YWtlIHdvcmtvcmRlcnMuIEtleSBpcyBhIGxvZ2luIG5hbWUuIENvbnRlbnQgaXMgMCBvciAxLid9ID0KICAgICAgICAn2YHZh9ix2LPYqiDaqdin2LHYtNmG2KfYs9in2YbbjCDaqdmHINin2KzYp9iy2Ycg2K/Ys9iq2LHYs9uMINio2LHYp9uMINqv2LHZgdiq2YYg2K/Ys9iq2YjYsSDaqdin2LEg2LHYpyDYr9in2LHYpyDZh9iz2KrZhtivLiDaqdmE24zYryDbjNqpINmG2KfZhSDYqNix2KfbjCDZiNix2YjYryDYp9iz2KouINmF2K3YqtmI2KcgMCDbjNinIDEg2KfYs9iqLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2Ygd29ya29yZGVyIHN0YXRlcywgYXQgd2hpY2ggdGhlIEFjdHVhbFN0YXJ0VGltZSBvZiBhIHdvcmtvcmRlciB3aWxsIGJlIHNldCBpZiBpdCB3YXMgZW1wdHkgYXQgdGhpcyBwb2ludC4nfSA9CiAgICAgICAgJ9mB2YfYsdiz2KrbjCDYp9iyINmI2LbYuduM2KrigIzZh9in24wg2K/Ys9iq2YjYsSDaqdin2LEg2qnZhyDYr9ixINi12YjYsdiq24wg2K/YsSDYp9uM2YbYrNinINmI2KfYsdivINmG2LTZiNiv2Iwg2KjZhyDYudmG2YjYp9mGINiy2YXYp9mGINmI2KfZgti524wg2KLYutin2LIg2YXYtNiu2LUg2K7ZiNin2YfYryDYtNivLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyJ30gPSAn2KfZgdiy2YjYr9mGINiv2LPYqtmI2LEg2qnYp9ixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgKGZyb20gVGVtcGxhdGUpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIGNoYW5nZSBmcm9tIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciAoZnJvbSB0ZW1wbGF0ZSkgdG8gdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBmcm9tIHRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIHRoZSBDSVAgbWF0cml4Lid9ID0gJ9mF2K/bjNixINmF2KfYqtix24zYsyDYp9mH2YXbjNiqIDwtPiDYp9ir2LEgPC0+INin2YTZiNuM2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gb2YgdGhlIHN0YXRlIG1hY2hpbmUuJ30gPSAn2YXYr9uM2LEg2YXYp9i024zZhiDZiNi22LnbjNiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZSBhZHZpc29yeSBib2FyZHMuJ30gPQogICAgICAgICfZhdin2pjZiNmEINin2LnZhNin2YYg2YjYp9iz2Lcg2qnYp9ix2LTZhtin2LMg2KjYsdin24wg2YbZhdin24zYtCDYqti52K/Yp9ivINmH24zYptiq4oCM2YfYp9uMINmF2LTYp9mI2LEg2KrYutuM24zYsdin2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlcyBtYW5hZ2VkIGJ5IHRoZSB1c2VyLid9ID0KICAgICAgICAn2YXYp9qY2YjZhCDYp9i52YTYp9mGINmI2KfYs9i3INqp2KfYsdi02YbYp9izINio2LHYp9uMINmG2YXYp9uM2LQg2KrYudiv2KfYryDYqti624zbjNix2KfYqiDZhdiv24zYsduM2Kog2LTYr9mHINiq2YjYs9i3INqp2KfYsdio2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlcy4nfSA9CiAgICAgICAgJ9mF2KfamNmI2YQg2KfYudmE2KfZhiDZiNin2LPYtyDaqdin2LHYtNmG2KfYsyDYqNix2KfbjCDZhtmF2KfbjNi0INiq2LnYr9in2K8g2KrYutuM24zYsdin2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2Ygd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgTWVtYmVyIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudCB0b29sYmFycy4gRGVmYXVsdDogMyBob3VycyAoMTgwIG1pbnV0ZXMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50LiBEZWZhdWx0OiA1IGRheXMgKDcyMDAgbWludXRlcykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIENBQiBUZW1wbGF0ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbnZvbHZlZCBQZXJzb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ9mG2YXYp9uMINqp2YTbjCDYqti624zbjNixINio2Ycg2LXZiNix2Kog2qnZiNqG2qknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZSd9ID0gJ9iy2YXYp9mG4oCM2KjZhtiv24wg2KrYutuM24zYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2NoZWR1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIFdvcmtvcmRlciBUZW1wbGF0ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFuZCB3b3Jrb3JkZXIgdGVtcGxhdGVzIGVkaXRlZCBieSB0aGlzIHVzZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhcmVhLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgaW52b2x2ZWQgcGVyc29ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgbGltaXQgcGVyIHBhZ2UgZm9yIENoYW5nZSBPdmVydmlldyAiU21hbGwiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2Ugc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAn2KrYutuM24zYsSDZhdiz24zYsduM2KfYqCDYrNiz2KrYrNmIINiv2LEg2LHYp9io2Lcg2qnYp9ix2KjYsduMINqp2KfYsdi02YbYp9izJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbiBFZGl0J30gPSAn2YjbjNix2KfbjNi0INi02LHYtyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb24gT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlIHdoaWNoIHNjcmVlbiBzaG91bGQgYmUgc2hvd24gYWZ0ZXIgYSBuZXcgd29ya29yZGVyIGhhcyBiZWVuIGNyZWF0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlcyBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgd2hlbiBwbGFubmVkIHRoZSBzdGFydCB0aW1lIG9yIG90aGVyIHRpbWUgdmFsdWVzIGhhdmUgYmVlbiByZWFjaGVkL3Bhc3NlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgQ2hhbmdlJ30gPSAn2LPYp9iu2KrZhiDYqti624zbjNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBDaGFuZ2UgKGZyb20gVGVtcGxhdGUpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIGNoYW5nZSAoZnJvbSB0ZW1wbGF0ZSkgZnJvbSB0aGlzIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgY2hhbmdlIGZyb20gdGhpcyB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIElUU00gQ2hhbmdlIE1hbmFnZW1lbnQgbm90aWZpY2F0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB0eXBlIGZvciBhIHdvcmtvcmRlci4gVGhpcyBlbnRyeSBtdXN0IGV4aXN0IGluIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBcJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6VHlwZVwnLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBzaWduYWxzIGZvciBlYWNoIHdvcmtvcmRlciBzdGF0ZS4nfSA9ICfYqti52LHbjNmBINi52YTYp9im2YUg2KjYsdin24wg2YfYsSDZiNi22LnbjNiqINiv2LPYqtmI2LEg2qnYp9ixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIENoYW5nZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgQ2hhbmdlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFdvcmtvcmRlciB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBXb3Jrb3JkZXIgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNoYW5nZSBsaXN0Lid9ID0KICAgICAgICAn2KrYudix24zZgSDZhdin2pjZiNmEINmG2YXYp9uMINqp2YTbjCDYqNix2KfbjCDZhtmF2KfbjNi0INmG2YXYp9uMINqp2YjahtqpINin2LIg2YHZh9ix2LPYqiDYqti624zbjNix2KfYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgdGVtcGxhdGUgbGlzdC4nfSA9CiAgICAgICAgJ9iq2LnYsduM2YEg2YXYp9qY2YjZhCDZhtmF2KfbjCDaqdmE24wg2KjYsdin24wg2YbZhdin24zYtCDZhtmF2KfbjCDaqdmI2obaqSDYp9iyINmB2YfYsdiz2Kog2YLYp9mE2KjigIzZh9inJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgYWNjb3VudGVkIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgcGxhbm5lZCBlZmZvcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgcmVhY2hhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lKSBjaGFuZ2UgZW5kIHN0YXRlcyBzaG91bGQgYmUgYWxsb3dlZCBpZiBhIGNoYW5nZSBpcyBpbiBhIGxvY2tlZCBzdGF0ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgd29ya29yZGVyIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSB3b3Jrb3JkZXIgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWNjb3VudGVkIHRpbWUgc2hvdWxkIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBzaG91bGQgYmUgc2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBjaGFuZ2Ugc2VhcmNoIGFuZCB0aGUgd29ya29yZGVyIHNlYXJjaCBmdW5jdGlvbnMgY291bGQgdXNlIHRoZSBtaXJyb3IgREIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHN0YXRlIGNhbiBiZSBzZXQgaW4gQWdlbnRJVFNNQ2hhbmdlRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBwbGFubmVkIGVmZm9ydCBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBwcmludCBieSBjdXN0b21lci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNlYXJjaGVkIGJ5IGN1c3RvbWVyLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzZXQgYnkgY3VzdG9tZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzaG93biBieSBjdXN0b21lci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHN0YXRlIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHRpdGxlIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBzaG93biBncmFwaCBhdHRyaWJ1dGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoYXQgb25seSBjaGFuZ2VzIGNvbnRhaW5pbmcgV29ya29yZGVycyBsaW5rZWQgd2l0aCBzZXJ2aWNlcywgd2hpY2ggdGhlIGN1c3RvbWVyIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gdXNlIHdpbGwgYmUgc2hvd24uIEFueSBvdGhlciBjaGFuZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSBhbGxvd2VkIHRvIGRlbGV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGNoYW5nZSB0aXRsZSBmb3IgYSBkdW1teSBjaGFuZ2Ugd2hpY2ggaXMgbmVlZGVkIHRvIGVkaXQgYSB3b3Jrb3JkZXIgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNhdGVnb3J5IG9mIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW1wYWN0IG9mIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmaWVsZCB0eXBlIG9mIENvbXBhcmVWYWx1ZSBmaWVsZHMgZm9yIGNoYW5nZSBhdHRyaWJ1dGVzIHVzZWQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gVmFsaWQgdmFsdWVzIGFyZSBTZWxlY3Rpb24sIFRleHQgYW5kIERhdGUuIElmIGEgdHlwZSBpcyBub3QgZGVmaW5lZCwgdGhlIGZpZWxkIHdpbGwgbm90IGJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3Igd29ya29yZGVyIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgY2hhbmdlIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvYmplY3QgYXR0cmlidXRlcyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB3b3Jrb3JkZXIgb2JqZWN0cyBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjY291bnRlZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsU3RhcnRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2F0ZWdvcnlJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZUJ1aWxkZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZU1hbmFnZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZVN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIER5bmFtaWNGaWVsZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEltcGFjdElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZEVmZm9ydCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFByaW9yaXR5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBSZXF1ZXN0ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyQWdlbnRJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlck51bWJlciBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclR5cGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBlcmlvZCAoaW4geWVhcnMpLCBpbiB3aGljaCBzdGFydCBhbmQgZW5kIHRpbWVzIGNhbiBiZSBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBhdHRyaWJ1dGVzIG9mIGEgd29ya29yZGVyIGluIHRoZSB0b29sdGlwIG9mIHRoZSB3b3Jrb3JkZXIgZ3JhcGggaW4gdGhlIGNoYW5nZSB6b29tLiBUbyBzaG93IHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcyBpbiB0aGUgdG9vbHRpcCwgdGhleSBtdXN0IGJlIHNwZWNpZmllZCBsaWtlIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUxLCBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMiwgZXRjLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBQU0Egb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgUElSIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaWduYWxzIGZvciBlYWNoIElUU01DaGFuZ2Ugc3RhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHRlbXBsYXRlIHR5cGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBzaG93IHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGV0aGVyIG5vdGlmaWNhdGlvbnMgc2hvdWxkIGJlIHNlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzIG9mIGEgY2hhbmdlIGhpc3RvcnkgZW50cnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgYW4gYWdlbnQgY2FuIGV4Y2hhbmdlIHRoZSBYLWF4aXMgb2YgYSBzdGF0IGlmIGhlIGdlbmVyYXRlcyBvbmUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyBkb25lIGZvciBjb25maWcgaXRlbSBjbGFzc2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIGNoYW5nZSBzdGF0ZSB1cGRhdGVzIHdpdGhpbiBhIHRpbWVwZXJpb2QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyByZWdhcmRpbmcgdGhlIHJlbGF0aW9uIGJldHdlZW4gY2hhbmdlcyBhbmQgaW5jaWRlbnQgdGlja2V0cy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IHRoZSBudW1iZXIgb2YgUmZjIHRpY2tldHMgYSByZXF1ZXN0ZXIgY3JlYXRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyAoZm9yIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMpIHNob3duIGluIHRoZSBjaGFuZ2UgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciByZXBvcnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljRmllbGQgZXZlbnQgbW9kdWxlIHRvIGhhbmRsZSB0aGUgdXBkYXRlIG9mIGNvbmRpdGlvbnMgaWYgZHluYW1pYyBmaWVsZHMgYXJlIGFkZGVkLCB1cGRhdGVkIG9yIGRlbGV0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSBjb25kaXRpb25zIG9mIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9yd2FyZCBzY2hlZHVsZSBvZiBjaGFuZ2VzLiBPdmVydmlldyBvdmVyIGFwcHJvdmVkIGNoYW5nZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIENBQiBUZW1wbGF0ZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIENvbmRpdGlvbiBFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIE1hbmFnZW1lbnQgTm90aWZpY2F0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VyIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBQSVIgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIG5vdGlmaWNhdGlvbiBydWxlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZXMnfSA9ICfYqti624zbjNix2KfYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q0FCIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q2hhbmdlcyBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeVdvcmtvcmRlcnMgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRGVsZXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQgQ0FCLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQgQ29udGVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGNsZWFucyB1cCBjb25kaXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGNhY2hlIGZvciBhIHRvb2xiYXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgZGVsZXRlcyB0aGUgaGlzdG9yeSBvZiBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IG1hdGNoZXMgY29uZGl0aW9ucyBhbmQgZXhlY3V0ZXMgYWN0aW9ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHNlbmRzIG5vdGlmaWNhdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY29uZGl0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRvIHJlY2FsY3VsYXRlIHRoZSB3b3Jrb3JkZXIgbnVtYmVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gc2V0IHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBvZiB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01DaGFuZ2UnfSA9ICfYqti624zbjNixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01Xb3JrT3JkZXInfSA9ICfYr9iz2KrZiNixINqp2KfYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBmcmVxdWVuY3kgaXMgXCdyZWd1bGFybHlcJywgeW91IGNhbiBjb25maWd1cmUgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IChldmVyeSBYIGhvdXJzKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9nZmlsZSBmb3IgdGhlIElUU00gY2hhbmdlIGNvdW50ZXIuIFRoaXMgZmlsZSBpcyB1c2VkIGZvciBjcmVhdGluZyB0aGUgY2hhbmdlIG51bWJlcnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIENBQiBtZW1iZXJzIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIGFnZW50cywgdXNlZCBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayBpZiBXb3JrT3JkZXJBZGQgb3IgV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlIHNob3VsZCBiZSBwZXJtaXR0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBDQUIgbWVtYmVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBhZ2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgYnVpbGRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgbWFuYWdlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIG5vIHdvcmtvcmRlciBhZ2VudCBpcyBzZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIHRoZSBhZ2VudCBpcyBjb250YWluZWQgaW4gdGhlIGNvbmZpZ3VyZWQgbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBhIGxpbmsgdG8gY3JlYXRlIGEgY2hhbmdlIGZyb20gdGhpcyB0aWNrZXQuIFRoZSB0aWNrZXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGxpbmtlZCB3aXRoIHRoZSBuZXcgY2hhbmdlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIGFsbCB3b3Jrb3JkZXJzIGluIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyAoZnJvbSB0ZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSB1c2VycyBvZiB0aGVzZSBncm91cHMgaGF2ZSB0aGUgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRpY2tldCB0eXBlcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiIGlmIHRoZSBmZWF0dXJlICJUaWNrZXQ6OkFjbDo6TW9kdWxlIyMjMjAwLVRpY2tldDo6QWNsOjpNb2R1bGUiIGlzIGVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb3ZlciBhbGwgQ2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpJ30gPSAn2KjYsdix2LPbjCDZvtizINin2LIg2b7bjNin2K/Zh+KAjNiz2KfYstuMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BTQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgVXNlckNyZWF0ZVdvcmtPcmRlck5leHRNYXNrIG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY2hhbmdlcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJlc2VudHMgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNob3cgdGhlIGludm9sdmVkIHBlcnNvbnMgaW4gYSBjaGFuZ2UsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBjaGFuZ2UgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSAoUFNBKSBvZiBjaGFuZ2VzLiBPdmVydmlldyBvZiBhcHByb3ZlZCBjaGFuZ2VzIGFuZCB0aGVpciBzZXJ2aWNlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIGluIG9yZGVyIGZvciBhbiBhZ2VudCB0byB0YWtlIGEgd29ya29yZGVyLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWNjZXNzIHRoZSBvdmVydmlldyBvZiBhbGwgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhZGQgYSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY2hhbmdlIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlc1wnIENBQi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMgZnJvbSB0ZW1wbGF0ZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgYSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29udGVudCBvZiBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGludm9sdmVkIHBlcnNvbnMgb2YgYSBjaGFuZ2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBtb3ZlIGNoYW5nZXMgaW4gdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBwcmludCBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byByZXNldCBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgYSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIGEgQ0FCIG1lbWJlci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIHRoZSBjaGFuZ2UgbWFuYWdlci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgb3ZlcnZpZXcgb3ZlciBhbGwgdGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGNvbmRpdGlvbnMgb2YgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IG9mIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgem9vbSBvZiBhIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgQ2hhbmdlIFNjaGVkdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlIFBTQS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIGNoYW5nZXMgd2l0aCBhbiB1cGNvbWluZyBQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBvd24gd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB3cml0ZSBhIHJlcG9ydCBmb3IgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgYSBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gdGFzayB0byBjaGVjayBpZiBzcGVjaWZpYyB0aW1lcyBoYXZlIGJlZW4gcmVhY2hlZCBpbiBjaGFuZ2VzIGFuZCB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgY2hhbmdlIGFzIGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgd29ya29yZGVyIGFzIGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjaGVkdWxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjcmVlbiBhZnRlciBjcmVhdGluZyBhIHdvcmtvcmRlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ2hhbmdlcyd9ID0gJ9is2LPYqtis2YjbjCDYqti624zbjNix2KfYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY2hhbmdlIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY2hhbmdlIG51bWJlciwgdGhlIFN5c3RlbUlEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZCB3aXRoIFN5c3RlbUlELmNvdW50ZXIgZm9ybWF0IChlLmcuIDEwMDExOCwgMTAwMTE5KS4gV2l0aCAiRGF0ZSIsIHRoZSBjaGFuZ2UgbnVtYmVycyB3aWxsIGJlIGdlbmVyYXRlZCBieSB0aGUgY3VycmVudCBkYXRlIGFuZCBhIGNvdW50ZXI7IHRoaXMgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuY291bnRlciwgZS5nLiAyMDEwMDYyNDAwMDAxLCAyMDEwMDYyNDAwMDAyLiBXaXRoICJEYXRlQ2hlY2tzdW0iLCB0aGUgY291bnRlciB3aWxsIGJlIGFwcGVuZGVkIGFzIGNoZWNrc3VtIHRvIHRoZSBzdHJpbmcgb2YgZGF0ZSBwbHVzIHRoZSBTeXN0ZW1JRC4gVGhlIGNoZWNrc3VtIHdpbGwgYmUgcm90YXRlZCBvbiBhIGRhaWx5IGJhc2lzLiBUaGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LlN5c3RlbUlELkNvdW50ZXIuQ2hlY2tTdW0sIGUuZy4gMjAxMDA2MjQxMDAwMDAxNywgMjAxMDA2MjQxMDAwMDAyNi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGFnZW50IGZvciB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50SVRTTUNoYW5nZVpvb20gYW5kIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgbWluaW1hbCBjaGFuZ2UgY291bnRlciBzaXplIChpZiAiQXV0b0luY3JlbWVudCIgd2FzIHNlbGVjdGVkIGFzIElUU01DaGFuZ2U6Ok51bWJlckdlbmVyYXRvcikuIERlZmF1bHQgaXMgNSwgdGhpcyBtZWFucyB0aGUgY291bnRlciBzdGFydHMgZnJvbSAxMDAwMC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHVwIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHVwIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGNoZWNrYm94IGluIHRoZSBBZ2VudElUU01Xb3JrT3JkZXJFZGl0IHNjcmVlbiB0aGF0IGRlZmluZXMgaWYgdGhlIHRoZSBmb2xsb3dpbmcgd29ya29yZGVycyBzaG91bGQgYWxzbyBiZSBtb3ZlZCBpZiBhIHdvcmtvcmRlciBpcyBtb2RpZmllZCBhbmQgdGhlIHBsYW5uZWQgZW5kIHRpbWUgaGFzIGNoYW5nZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGNoYW5naW5nIHRoZSB3b3Jrb3JkZXIgYWdlbnQsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZSBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSBjaGFuZ2UsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgd29ya29yZGVyIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgd29ya29yZGVyLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBlZGl0aW5nIHRoZSByZXBvcnQgb2YgYSB3b3Jrb3JkZXIsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNoYW5nZSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSB3b3Jrb3JkZXIgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIG1vdmluZyB0aGUgdGltZSBzbG90IG9mIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdGFraW5nIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgY29uZGl0aW9ucyBvZiBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFkZCBhIHdvcmtvcmRlciBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjaGFuZ2UgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSB3b3Jrb3JkZXIgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSB3b3Jrb3JkZXIgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHJlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycyBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNoYW5nZSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdGUgTWFjaGluZSd9ID0gJ9mF2KfYtNuM2YYg2YjYtti524zYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdG9yZXMgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgaWRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHRlbXBsYXRlIGlkLCB3aGlsZSBhIHVzZXIgaXMgZWRpdGluZyBhIHRlbXBsYXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgV29ya29yZGVyJ30gPSAn2q/YsdmB2KrZhiDYr9iz2KrZiNixINqp2KfYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIFdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBPdmVydmlldyd9ID0gJ9mG2YXYp9uMINqp2YTbjCDZgtin2YTYqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY2hhbmdlLCBlLmcuIENoYW5nZSMsIE15Q2hhbmdlIy4gVGhlIGRlZmF1bHQgaXMgQ2hhbmdlIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSB3b3Jrb3JkZXIsIGUuZy4gV29ya29yZGVyIywgTXlXb3Jrb3JkZXIjLiBUaGUgZGVmYXVsdCBpcyBXb3Jrb3JkZXIjLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgQUNMIG1vZHVsZSByZXN0cmljdHMgdGhlIHVzdWFnZSBvZiB0aGUgdGlja2V0IHR5cGVzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb24gXCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXNcJywgdG8gdXNlcnMgb2YgdGhlIGdyb3VwcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpSZXN0cmljdFRpY2tldFR5cGVzOjpHcm91cHMiLiBBcyB0aGlzIEFDTCBjb3VsZCBjb2xsaWRlIHdpdGggb3RoZXIgQUNMcyB3aGljaCBhcmUgYWxzbyByZWxhdGVkIHRvIHRoZSB0aWNrZXQgdHlwZSwgdGhpcyBzeXNjb25maWcgb3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIHNob3VsZCBvbmx5IGJlIGFjdGl2YXRlZCBpZiBuZWVkZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBTbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R5cGVzIG9mIHRpY2tldHMsIHdoZXJlIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IGEgbGluayB0byBhZGQgYSBjaGFuZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFkZCAoZnJvbSB0ZW1wbGF0ZSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZ2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIERlbGV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBIaXN0b3J5IFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBIaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgUmVwb3J0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb25jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWd1bGFybHknfSA9ICcnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6aHVfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLYXRlZ8OzcmlhIDwtPiBIYXTDoXMgPC0+IFByaW9yaXTDoXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ2F0ZWdvcnkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ0EgS2F0ZWfDs3JpYSA8LT4gSGF0w6FzIMO2c3N6ZXTDqXRlbCBwcmlvcml0w6FzIGVyZWRtw6luecOpbmVrIGtlemVsw6lzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ1ByaW9yaXTDoXMgbGVmb2dsYWzDoXMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbiBNYW5hZ2VtZW50J30gPSAnSVRTTSB2w6FsdG96w6FzbWVuZWR6c21lbnQgw6lydGVzw610w6lzIGtlemVsw6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOb3RpZmljYXRpb24gUnVsZSd9ID0gJ8OJcnRlc8OtdMOpc2kgc3phYsOhbHkgaG96esOhYWTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1bGUnfSA9ICdTemFiw6FseSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG5vdGlmaWNhdGlvbiBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnQXogw6lydGVzw610w6lzbmVrIHJlbmRlbGtlem5pZSBrZWxsIGVneSBuw6l2dmVsISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkLid9ID0gJ0EgbsOpdiBrw7Z0ZWxlesWRLic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNU3RhdGVNYWNoaW5lCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBTdGF0ZSBNYWNoaW5lJ30gPSAnQWRtaW5pc3p0csOhdG9yaSDDoWxsYXBvdGfDqXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgY2F0YWxvZyBjbGFzcyEnfSA9ICdWw6FsYXNzem9uIGVneSBrYXRhbMOzZ3Vzb3N6dMOhbHl0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGFsb2cgY2xhc3MgaXMgcmVxdWlyZWQhJ30gPSAnQSBrYXRhbMOzZ3Vzb3N6dMOhbHkga8O2dGVsZXrFkSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgc3RhdGUgdHJhbnNpdGlvbid9ID0gJ0VneSDDoWxsYXBvdMOhdG1lbmV0IGhvenrDoWFkw6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2F0YWzDs2d1c29zenTDoWx5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBOYW1lJ30gPSAnT2JqZWt0dW1uw6l2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG92ZXIgc3RhdGUgdHJhbnNpdGlvbnMgZm9yJ30gPSAnw4FsbGFwb3TDoXRtZW5ldGVrIMOhdHRla2ludMOpc2UgZW5uw6lsOic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnQXogw6FsbGFwb3TDoXRtZW5ldCB0w7ZybMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgbmV3IHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAnRWd5IMO6aiDDoWxsYXBvdMOhdG1lbmV0IGhvenrDoWFkw6FzYSBlaGhlejonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhIHN0YXRlISd9ID0gJ1bDoWxhc3N6b24gZWd5IMOhbGxhcG90b3QhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBuZXh0IHN0YXRlISd9ID0gJ1bDoWxhc3N6b24gZWd5IGvDtnZldGtlesWRIMOhbGxhcG90b3QhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ0VneSDDoWxsYXBvdMOhdG1lbmV0IHN6ZXJrZXN6dMOpc2UgZW5uw6lsOic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoZSBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnVmFsw7NiYW4gdMO2csO2bG5pIHN6ZXJldG7DqSBheiDDoWxsYXBvdMOhdG1lbmV0ZXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENoYW5nZSd9ID0gJ1bDoWx0b3rDoXMgaG96esOhYWTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlJ30gPSAnSVRTTSB2w6FsdG96w6FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1c3RpZmljYXRpb24nfSA9ICdJbmRva2zDoXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5wdXQgaW52YWxpZC4nfSA9ICfDiXJ2w6lueXRlbGVuIGJlbWVuZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0hhdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0ZWQgRGF0ZSd9ID0gJ0vDqXJ0IGTDoXR1bSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgQ2hhbmdlIFRlbXBsYXRlJ30gPSAnVsOhbHRvesOhc3NhYmxvbiBraXbDoWxhc3p0w6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIHR5cGUnfSA9ICdJZMWRdMOtcHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgdGltZSB0eXBlLid9ID0gJ8OJcnbDqW55dGVsZW4gaWTFkXTDrXB1cy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpbWUnfSA9ICfDmmogaWTFkSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ0FCVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgQ2hhbmdlIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJ1bDoWx0b3rDoXMgQ0FCIG1lbnTDqXNlIHNhYmxvbmvDqW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIHRvIGludm9sdmVkIHBlcnNvbnMgc2NyZWVuJ30gPSAndWdyw6FzIGEgcsOpc3p0dmV2xZEgc3plbcOpbHllayBrw6lwZXJuecWRasOpaGV6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgTmFtZSd9ID0gJ8OJcnbDqW55dGVsZW4gbsOpdic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25zIGFuZCBBY3Rpb25zJ30gPSAnRmVsdMOpdGVsZWsgw6lzIG3FsXZlbGV0ZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmRpdGlvbid9ID0gJ0ZlbHTDqXRlbCB0w7ZybMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBjb25kaXRpb24nfSA9ICfDmmogZmVsdMOpdGVsIGhvenrDoWFkw6FzYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb25kaXRpb24nfSA9ICdGZWx0w6l0ZWwgc3plcmtlc3p0w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIGEgdmFsaWQgbmFtZS4nfSA9ICdFZ3kgw6lydsOpbnllcyBuw6l2IHN6w7xrc8OpZ2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIG5hbWUgaXMgbmVlZGVkLid9ID0gJ0VneSDDqXJ2w6lueWVzIG7DqXYgc3rDvGtzw6lnZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lOid9ID0gJ07DqXYga2V0dMWResOpc2U6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbmFtZSBpcyBhbHJlYWR5IHVzZWQgYnkgYW5vdGhlciBjb25kaXRpb24uJ30gPSAnRXp0IGEgbmV2ZXQgbcOhciBlZ3kgbcOhc2lrIGZlbHTDqXRlbCBoYXN6bsOhbGphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXRjaGluZyd9ID0gJ0lsbGVzemtlZMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbnkgZXhwcmVzc2lvbiAoT1IpJ30gPSAnQsOhcm1lbHkga2lmZWplesOpcyAoVkFHWSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIGV4cHJlc3Npb25zIChBTkQpJ30gPSAnTWluZGVuIGtpZmVqZXrDqXMgKMOJUyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwcmVzc2lvbnMnfSA9ICdLaWZlamV6w6lzZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0b3InfSA9ICdLaXbDoWxhc3p0w7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0b3InfSA9ICdNxbF2ZWxldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgRXhwcmVzc2lvbid9ID0gJ0tpZmVqZXrDqXMgdMO2cmzDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEV4cHJlc3Npb25zIGZvdW5kLid9ID0gJ05lbSB0YWzDoWxoYXTDs2sga2lmZWplesOpc2VrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGV4cHJlc3Npb24nfSA9ICfDmmoga2lmZWplesOpcyBob3p6w6FhZMOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEFjdGlvbid9ID0gJ03FsXZlbGV0IHTDtnJsw6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBBY3Rpb25zIGZvdW5kLid9ID0gJ05lbSB0YWzDoWxoYXTDs2sgbcWxdmVsZXRlay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBhY3Rpb24nfSA9ICfDmmogbcWxdmVsZXQgaG96esOhYWTDoXNhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjaGFuZ2U/J30gPSAnVmFsw7NiYW4gdMO2csO2bG5pIHN6ZXJldG7DqSBlenQgYSB2w6FsdG96w6FzdD8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgJXMlcyd9ID0gJyVzJXMgc3plcmtlc3p0w6lzZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiAlcyVzJ30gPSAnJXMlcyBlbMWRem3DqW55ZWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyJ30gPSAnTXVua2FtZWdyZW5kZWzDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBkZXRhaWxzJ30gPSAnUsOpc3psZXRlayBtZWdqZWxlbsOtdMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB3b3Jrb3JkZXInfSA9ICdNdW5rYW1lZ3JlbmRlbMOpcyBtZWdqZWxlbsOtdMOpc2UnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxlZCBoaXN0b3J5IGluZm9ybWF0aW9uIG9mICVzJ30gPSAnJXMgcsOpc3psZXRlcyBlbMWRem3DqW55aW5mb3Jtw6FjacOzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RpZmllZCd9ID0gJ03Ds2Rvc8OtdHZhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09sZCBWYWx1ZSd9ID0gJ1LDqWdpIMOpcnTDqWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFZhbHVlJ30gPSAnw5pqIMOpcnTDqWsnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJbnZvbHZlZCBQZXJzb25zIG9mICVzJXMnfSA9ICclcyVzIHLDqXN6dHZldsWRIHN6ZW3DqWx5ZWluZWsgc3plcmtlc3p0w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZvbHZlZCBQZXJzb25zJ30gPSAnUsOpc3p0dmV2xZEgc3plbcOpbHllayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VNYW5hZ2VyJ30gPSAnVsOhbHRvesOhc21lbmVkenNlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIGludmFsaWQuJ30gPSAnw4lydsOpbnl0ZWxlbiBmZWxoYXN6bsOhbMOzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VCdWlsZGVyJ30gPSAnVsOhbHRvesOhcy3DtnNzemXDoWxsw610w7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEFkdmlzb3J5IEJvYXJkJ30gPSAnVsOhbHRvesOhc21lbmVkenNtZW50LXRhbsOhY3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIFRlbXBsYXRlJ30gPSAnQ0FCIHNhYmxvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHBseSBUZW1wbGF0ZSd9ID0gJ1NhYmxvbiBhbGthbG1hesOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3VGVtcGxhdGUnfSA9ICfDmmogc2FibG9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgdGhpcyBDQUIgYXMgdGVtcGxhdGUnfSA9ICdBIENBQiBtZW50w6lzZSBzYWJsb25rw6ludCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdG8gQ0FCJ30gPSAnSG96esOhYWTDoXMgQ0FCLWhveic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIFVzZXInfSA9ICfDiXJ2w6lueXRlbGVuIGZlbGhhc3puw6Fsw7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBDQUInfSA9ICdKZWxlbmxlZ2kgQ0FCJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0vDtnJueWV6ZXQgYmXDoWxsw610w6Fzb2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlcyBwZXIgcGFnZSd9ID0gJ09sZGFsYW5rw6ludGkgdsOhbHRvesOhc29rJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgVGl0bGUnfSA9ICdNdW5rYW1lZ3JlbmRlbMOpcy1jw61tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBUaXRsZSd9ID0gJ1bDoWx0b3rDoXNjw61tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZ2VudCd9ID0gJ011bmthbWVncmVuZGVsw6lzIMO8Z3lpbnTDqXrFkWplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBCdWlsZGVyJ30gPSAnVsOhbHRvesOhcy3DtnNzemXDoWxsw610w7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE1hbmFnZXInfSA9ICdWw6FsdG96w6FzbWVuZWR6c2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlcnMnfSA9ICdNdW5rYW1lZ3JlbmRlbMOpc2VrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTdGF0ZSd9ID0gJ1bDoWx0b3rDoXPDoWxsYXBvdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgU3RhdGUnfSA9ICdNdW5rYW1lZ3JlbmRlbMOpcy3DoWxsYXBvdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgVHlwZSd9ID0gJ011bmthbWVncmVuZGVsw6lzLXTDrXB1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0ZWQgVGltZSd9ID0gJ0vDqXJ0IGlkxZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBTdGFydCBUaW1lJ30gPSAnVGVydmV6ZXR0IGtlemTDqXNpIGlkxZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBFbmQgVGltZSd9ID0gJ1RlcnZlemV0dCBiZWZlamV6w6lzaSBpZMWRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBTdGFydCBUaW1lJ30gPSAnVMOpbnlsZWdlcyBrZXpkw6lzaSBpZMWRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBFbmQgVGltZSd9ID0gJ1TDqW55bGVnZXMgYmVmZWplesOpc2kgaWTFkSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlUmVzZXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byByZXNldCB0aGlzIGNoYW5nZT8nfSA9ICdWYWzDs2JhbiB2aXNzemEgc3plcmV0bsOpIMOhbGzDrXRhbmkgZXp0IGEgdsOhbHRvesOhc3Q/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhlLmcuIDEwKjUxNTUgb3IgMTA1NjU4KiknfSA9ICcocMOpbGTDoXVsIDEwKjUxNTUgdmFneSAxMDU2NTgqKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQWdlbnQnfSA9ICdDQUItw7xneWludMOpesWRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuZy4nfSA9ICdww6lsZMOhdWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIEN1c3RvbWVyJ30gPSAnQ0FCLcO8Z3lmw6lsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIEluc3RydWN0aW9uJ30gPSAnSVRTTSBtdW5rYW1lZ3JlbmRlbMOpcyB1dGFzw610w6FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIFJlcG9ydCd9ID0gJ0lUU00gbXVua2FtZWdyZW5kZWzDqXMgamVsZW50w6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIFByaW9yaXR5J30gPSAnSVRTTSB2w6FsdG96w6FzIHByaW9yaXTDoXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgSW1wYWN0J30gPSAnSVRTTSB2w6FsdG96w6FzIGhhdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQ2F0ZWdvcnknfSA9ICdLYXRlZ8OzcmlhIG3Ds2Rvc8OtdMOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJlZm9yZS9hZnRlciknfSA9ICcoZWzFkXR0L3V0w6FuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoYmV0d2VlbiknfSA9ICcoa8O2esO2dHQpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VUZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBDaGFuZ2UgYXMgVGVtcGxhdGUnfSA9ICdWw6FsdG96w6FzIG1lbnTDqXNlIHNhYmxvbmvDqW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdGVtcGxhdGUgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ0Egc2FibG9ubmFrIHJlbmRlbGtlem5pZSBrZWxsIGVneSBuw6l2dmVsISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcGxhdGUgbmFtZSBpcyByZXF1aXJlZC4nfSA9ICdBIHNhYmxvbm7DqXYga8O2dGVsZXrFkS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgU3RhdGVzJ30gPSAnw4FsbGFwb3RvayB2aXNzemHDoWxsw610w6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVyd3JpdGUgb3JpZ2luYWwgdGVtcGxhdGUnfSA9ICdFcmVkZXRpIHNhYmxvbiBmZWzDvGzDrXLDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCBjaGFuZ2UnfSA9ICdFcmVkZXRpIHbDoWx0b3rDoXMgdMO2cmzDqXNlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VUaW1lU2xvdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBUaW1lIFNsb3QnfSA9ICdJZMWRcsOpcyDDoXRoZWx5ZXrDqXNlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW5mb3JtYXRpb24nfSA9ICdWw6FsdG96w6FzIGluZm9ybcOhY2nDs2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBFZmZvcnQnfSA9ICdUZXJ2ZXpldHQgcsOhZm9yZMOtdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY2NvdW50ZWQgVGltZSd9ID0gJ0Vsc3rDoW1vbHQgaWTFkSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW5pdGlhdG9yKHMpJ30gPSAnVsOhbHRvesOhc2tlemRlbcOpbnllesWRayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUInfSA9ICdDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnVXRvbGrDoXJhIG3Ds2Rvc8OtdHZhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ1V0b2xqw6FyYSBtw7Nkb3PDrXRvdHRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT0snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG8gb3BlbiBsaW5rcyBpbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIGJsb2NrcywgeW91IG1pZ2h0IG5lZWQgdG8gcHJlc3MgQ3RybCBvciBDbWQgb3IgU2hpZnQga2V5IHdoaWxlIGNsaWNraW5nIHRoZSBsaW5rIChkZXBlbmRpbmcgb24geW91ciBicm93c2VyIGFuZCBPUykuJ30gPQogICAgICAgICdBIGvDtnZldGtlesWRIGxlw61yw6FzYmxva2tva2JhbiBsw6l2xZEgaGl2YXRrb3rDoXNvayBtZWdueWl0w6Fzw6Fob3ogbGVoZXQsIGhvZ3kgbWVnIGtlbGwgbnlvbW5pYSBhIEN0cmwgdmFneSBhIENtZCB2YWd5IGEgU2hpZnQgYmlsbGVudHnFsXQsIG1pa8O2emJlbiBhIGhpdmF0a296w6FzcmEga2F0dGludCAoYSBiw7ZuZ8Opc3rFkWrDqXTFkWwgw6lzIGF6IG9wZXLDoWNpw7NzIHJlbmRzemVyw6l0xZFsIGbDvGdnxZFlbikuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdNZWxsw6lrbGV0IGxldMO2bHTDqXNlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ0FCIFRlbXBsYXRlJ30gPSAnQ0FCIHNhYmxvbiBzemVya2VzenTDqXNlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGNoYW5nZSBmcm9tIHRoaXMgdGVtcGxhdGUsIHNvIHlvdSBjYW4gZWRpdCBhbmQgc2F2ZSBpdC4nfSA9CiAgICAgICAgJ0V6IGzDqXRyZSBmb2cgaG96bmkgZWd5IMO6aiB2w6FsdG96w6FzdCBlYmLFkWwgYSBzYWJsb25iw7NsLCDDrWd5IHN6ZXJrZXN6dGhldGkgw6lzIGVsbWVudGhldGkgYXp0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmV3IGNoYW5nZSB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciBpdCBoYXMgYmVlbiBzYXZlZCBhcyB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJ0F6IMO6aiB2w6FsdG96w6FzIGF1dG9tYXRpa3VzYW4gdMO2csO2bHZlIGxlc3osIG1pdXTDoW4gbWVudMOpc3JlIGtlcsO8bHQgc2FibG9ua8OpbnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgd29ya29yZGVyIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAnRXogbMOpdHJlIGZvZyBob3puaSBlZ3kgw7pqIG11bmthbWVncmVuZGVsw6lzdCBlYmLFkWwgYSBzYWJsb25iw7NsLCDDrWd5IHN6ZXJrZXN6dGhldGkgw6lzIGVsbWVudGhldGkgYXp0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHRlbXBvcmFyeSBjaGFuZ2Ugd2lsbCBiZSBjcmVhdGVkIHdoaWNoIGNvbnRhaW5zIHRoZSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICdFZ3kgaWRlaWdsZW5lcyB2w6FsdG96w6FzIGxlc3ogbMOpdHJlaG96dmEsIGFtZWx5IHRhcnRhbG1henphIGEgbXVua2FtZWdyZW5kZWzDqXN0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcG9yYXJ5IGNoYW5nZSBhbmQgbmV3IHdvcmtvcmRlciB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciB0aGUgd29ya29yZGVyIGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAnQXogaWRlaWdsZW5lcyB2w6FsdG96w6FzIMOpcyBheiDDumogbXVua2FtZWdyZW5kZWzDqXMgYXV0b21hdGlrdXNhbiB0w7Zyw7ZsdmUgbGVzeiwgbWl1dMOhbiBhIG11bmthbWVncmVuZGVsw6lzIG1lbnTDqXNyZSBrZXLDvGx0IHNhYmxvbmvDqW50Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3Ugd2FudCB0byBwcm9jZWVkPyd9ID0gJ1N6ZXJldG7DqSBmb2x5dGF0bmk/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIElEJ30gPSAnU2FibG9uLWF6b25vc8OtdMOzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29udGVudCd9ID0gJ1RhcnRhbG9tIHN6ZXJrZXN6dMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGJ5J30gPSAnTMOpdHJlaG96dGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGJ5J30gPSAnTcOzZG9zw610b3R0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgVGltZSd9ID0gJ0lkxZEgbWVndsOhbHRvenRhdMOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUZW1wbGF0ZSBDb250ZW50J30gPSAnU2FibG9udGFydGFsb20gc3plcmtlc3p0w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgVGVtcGxhdGUnfSA9ICdTYWJsb24gdMO2cmzDqXNlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgdG8gJXMlcyd9ID0gJ011bmthbWVncmVuZGVsw6lzIGhvenrDoWFkw6FzYSBlaGhlejogJXMlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0cnVjdGlvbid9ID0gJ1V0YXPDrXTDoXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCB3b3Jrb3JkZXIgdHlwZS4nfSA9ICfDiXJ2w6lueXRlbGVuIG11bmthbWVncmVuZGVsw6lzLXTDrXB1cy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHBsYW5uZWQgc3RhcnQgdGltZSBtdXN0IGJlIGJlZm9yZSB0aGUgcGxhbm5lZCBlbmQgdGltZSEnfSA9ICdBIHRlcnZlemV0dCBrZXpkw6lzaSBpZMWRbmVrIGEgdGVydmV6ZXR0IGJlZmVqZXrDqXNpIGlkxZEgZWzFkXR0IGtlbGwgbGVubmllISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGZvcm1hdC4nfSA9ICfDiXJ2w6lueXRlbGVuIGZvcm3DoXR1bS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IFdvcmtvcmRlciBUZW1wbGF0ZSd9ID0gJ011bmthbWVncmVuZGVsw6lzLXNhYmxvbiBraXbDoWxhc3p0w6FzYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyQWdlbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgV29ya29yZGVyIEFnZW50IG9mICVzJXMnfSA9ICclcyVzIG11bmthbWVncmVuZGVsw6lzLcO8Z3lpbnTDqXrFkWrDqW5layBzemVya2VzenTDqXNlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyB3b3Jrb3JkZXI/J30gPSAnVmFsw7NiYW4gdMO2csO2bG5pIHN6ZXJldG7DqSBlenQgYSBtdW5rYW1lZ3JlbmRlbMOpc3Q/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIFdvcmtvcmRlci4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgQ29uZGl0aW9uISd9ID0KICAgICAgICAnTmVtIHTDtnLDtmxoZXRpIGV6dCBhIG11bmthbWVncmVuZGVsw6lzdC4gTGVnYWzDoWJiIGVneSBmZWx0w6l0ZWxiZW4gaGFzem7DoWxqw6FrISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIFdvcmtvcmRlciBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgQ29uZGl0aW9uKHMpJ30gPSAnRXp0IGEgbXVua2FtZWdyZW5kZWzDqXN0IGEga8O2dmV0a2V6xZEgZmVsdMOpdGVsZWtiZW4gaGFzem7DoWxqw6FrJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0ICVzJXMtJXMnfSA9ICclcyVzLSVzIHN6ZXJrZXN6dMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBmb2xsb3dpbmcgd29ya29yZGVycyBhY2NvcmRpbmdseSd9ID0gJ0Ega8O2dmV0xZEgbXVua2FtZWdyZW5kZWzDqXNlayDDoXRoZWx5ZXrDqXNlIGVzemVyaW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHRoZSBwbGFubmVkIGVuZCB0aW1lIG9mIHRoaXMgd29ya29yZGVyIGlzIGNoYW5nZWQsIHRoZSBwbGFubmVkIHN0YXJ0IHRpbWVzIG9mIGFsbCBmb2xsb3dpbmcgd29ya29yZGVycyB3aWxsIGJlIGNoYW5nZWQgYWNjb3JkaW5nbHknfSA9CiAgICAgICAgJ0hhIGVubmVrIGEgbXVua2FtZWdyZW5kZWzDqXNuZWsgbWVndsOhbHRvemlrIGEgdGVydmV6ZXR0IGJlZmVqZXrDqXNpIGlkZWplLCBha2tvciBheiDDtnNzemVzIGF6dCBrw7Z2ZXTFkSBtdW5rYW1lZ3JlbmRlbMOpcyB0ZXJ2ZXpldHQga2V6ZMOpc2kgaWRlamUgaXMgbWVnIGZvZyB2w6FsdG96bmkgZXN6ZXJpbnQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgJXMlcy0lcyd9ID0gJyVzJXMtJXMgZWzFkXptw6lueWVpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJSZXBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUmVwb3J0IG9mICVzJXMtJXMnfSA9ICclcyVzLSVzIGplbGVudMOpc8OpbmVrIHN6ZXJrZXN6dMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0J30gPSAnSmVsZW50w6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBhY3R1YWwgc3RhcnQgdGltZSBtdXN0IGJlIGJlZm9yZSB0aGUgYWN0dWFsIGVuZCB0aW1lISd9ID0gJ0EgdMOpbnlsZWdlcyBrZXpkw6lzaSBpZMWRbmVrIGEgdMOpbnlsZWdlcyBiZWZlamV6w6lzaSBpZMWRIGVsxZF0dCBrZWxsIGxlbm5pZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgc2V0LCB3aGVuIHRoZSBhY3R1YWwgZW5kIHRpbWUgaXMgc2V0ISd9ID0KICAgICAgICAnQSB0w6lueWxlZ2VzIGtlemTDqXNpIGlkxZFuZWsgYmXDoWxsw610dmEga2VsbCBsZW5uaWUsIGFtaWtvciBhIHTDqW55bGVnZXMgYmVmZWplesOpc2kgaWTFkSBiZSB2YW4gw6FsbMOtdHZhISc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGFrZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBBZ2VudCd9ID0gJ0plbGVubGVnaSDDvGd5aW50w6l6xZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIHRha2UgdGhpcyB3b3Jrb3JkZXI/J30gPSAnVmFsw7NiYW4gZmVsIHN6ZXJldG7DqSB2ZW5uaWUgZXp0IGEgbXVua2FtZWdyZW5kZWzDqXN0Pyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgV29ya29yZGVyIGFzIFRlbXBsYXRlJ30gPSAnTXVua2FtZWdyZW5kZWzDqXMgbWVudMOpc2Ugc2FibG9ua8OpbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIG9yaWdpbmFsIHdvcmtvcmRlciAoYW5kIHN1cnJvdW5kaW5nIGNoYW5nZSknfSA9ICdFcmVkZXRpIG11bmthbWVncmVuZGVsw6lzICjDqXMgYSBrw7ZybnllesWRIHbDoWx0b3rDoXMpIHTDtnJsw6lzZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEluZm9ybWF0aW9uJ30gPSAnTXVua2FtZWdyZW5kZWzDqXMtaW5mb3Jtw6FjacOzayc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ2hhbmdlTm90aWZpY2F0aW9uLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmtub3duIG5vdGlmaWNhdGlvbiAlcyEnfSA9ICdJc21lcmV0bGVuIMOpcnRlc8OtdMOpczogJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZXJlIHdhcyBhbiBlcnJvciBjcmVhdGluZyB0aGUgbm90aWZpY2F0aW9uLid9ID0gJ0hpYmEgdMO2cnTDqW50IGF6IMOpcnRlc8OtdMOpcyBsw6l0cmVob3rDoXNha29yLic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDaGFuZ2VzJ30gPSAnw4F0dGVraW50xZE6IElUU00gdsOhbHRvesOhc29rJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCB3aXRoIFRpY2tldElEICVzIGRvZXMgbm90IGV4aXN0ISd9ID0gJ0EoeikgJXMgamVneWF6b25vc8OtdMOzdmFsIHJlbmRlbGtlesWRIGplZ3kgbmVtIGzDqXRlemlrISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaXNzaW5nIHN5c2NvbmZpZyBvcHRpb24gIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIhJ30gPQogICAgICAgICdIacOhbnl6w7Mg4oCeSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVz4oCdIHJlbmRzemVyYmXDoWxsw610w6FzaSBsZWhldMWRc8OpZyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGFkZCBjaGFuZ2UhJ30gPSAnTmVtIHNpa2Vyw7xsdCBhIHbDoWx0b3rDoXMgaG96esOhYWTDoXNhISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSBmcm9tIHRlbXBsYXRlISd9ID0gJ05lbSBzaWtlcsO8bHQgYSB2w6FsdG96w6FzIGzDqXRyZWhvesOhc2Egc2FibG9uYsOzbCEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICdOaW5jcyB2w6FsdG96w6FzYXpvbm9zw610w7MgbWVnYWR2YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY2hhbmdlIGZvdW5kIGZvciBjaGFuZ2VJRCAlcy4nfSA9ICdOZW0gdGFsw6FsaGF0w7MgdsOhbHRvesOhcyBhKHopICVzIHbDoWx0b3rDoXNhem9ub3PDrXTDs2hvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIENBQiBvZiBjaGFuZ2UgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICdBKHopIOKAniVz4oCdIHbDoWx0b3rDoXMgQ0FCLWrDoXQgbmVtIHNpa2Vyw7xsdCBzb3Jvc8OtdGFuaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCB0aGUgdGVtcGxhdGUuJ30gPSAnTmVtIHNpa2Vyw7xsdCBob3p6w6FhZG5pIGEgc2FibG9udC4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNvbmRpdGlvbi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ0Eoeikg4oCeJXPigJ0gdsOhbHRvesOhcyBuZW0gdGFsw6FsaGF0w7MgYXogYWRhdGLDoXppc2JhbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBDb25kaXRpb25JRCAlcyEnfSA9ICdOZW0gc2lrZXLDvGx0IHTDtnLDtmxuaSBhKHopICVzIGZlbHTDqXRlbGF6b25vc8OtdMOzdCEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vICVzIGlzIGdpdmVuISd9ID0gJ05pbmNzICVzIG1lZ2FkdmEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBjcmVhdGUgbmV3IGNvbmRpdGlvbiEnfSA9ICdOZW0gc2lrZXLDvGx0IGzDqXRyZWhvem5pIMO6aiBmZWx0w6l0ZWx0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIENvbmRpdGlvbklEICVzISd9ID0gJ05lbSBzaWtlcsO8bHQgZnJpc3PDrXRlbmkgYSh6KSAlcyBmZWx0w6l0ZWxhem9ub3PDrXTDs3QhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgRXhwcmVzc2lvbklEICVzISd9ID0gJ05lbSBzaWtlcsO8bHQgZnJpc3PDrXRlbmkgYSh6KSAlcyBraWZlamV6w6lzLWF6b25vc8OtdMOzdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgRXhwcmVzc2lvbiEnfSA9ICdOZW0gc2lrZXLDvGx0IGhvenrDoWFkbmkgw7pqIGtpZmVqZXrDqXN0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIEFjdGlvbklEICVzISd9ID0gJ05lbSBzaWtlcsO8bHQgZnJpc3PDrXRlbmkgYSh6KSAlcyBtxbF2ZWxldGF6b25vc8OtdMOzdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgQWN0aW9uISd9ID0gJ05lbSBzaWtlcsO8bHQgaG96esOhYWRuaSDDumogbcWxdmVsZXRldCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBFeHByZXNzaW9uSUQgJXMhJ30gPSAnTmVtIHNpa2Vyw7xsdCB0w7Zyw7ZsbmkgYSh6KSAlcyBraWZlamV6w6lzLWF6b25vc8OtdMOzdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBBY3Rpb25JRCAlcyEnfSA9ICdOZW0gc2lrZXLDvGx0IHTDtnLDtmxuaSBhKHopICVzIG3FsXZlbGV0YXpvbm9zw610w7N0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcjogVW5rbm93biBmaWVsZCB0eXBlICIlcyIhJ30gPSAnSGliYTogaXNtZXJldGxlbiDigJ4lc+KAnSBtZXrFkXTDrXB1cyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uSUQgJXMgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBnaXZlbiBDaGFuZ2VJRCAlcyEnfSA9ICdBKHopICVzIGZlbHTDqXRlbGF6b25vc8OtdMOzIG5lbSB0YXJ0b3ppayBhIG1lZ2Fkb3R0ICVzIHbDoWx0b3rDoXNhem9ub3PDrXTDs2hveiEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgZG9lcyBub3QgaGF2ZSBhbiBhbGxvd2VkIGNoYW5nZSBzdGF0ZSB0byBiZSBkZWxldGVkISd9ID0KICAgICAgICAnQSh6KSDigJ4lc+KAnSB2w6FsdG96w6FzbmFrIG5pbmNzIG9seWFuIG1lZ2VuZ2VkZXR0IHbDoWx0b3rDoXPDoWxsYXBvdGEsIGFtZWx5ZXQgdMO2csO2bG5pIGxlaGV0bmUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNoYW5nZUlEICVzISd9ID0gJ05lbSBzaWtlcsO8bHQgYSh6KSAlcyB2w6FsdG96w6FzYXpvbm9zw610w7MgdMO2cmzDqXNlISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UhJ30gPSAnTmVtIHNpa2Vyw7xsdCBhIHbDoWx0b3rDoXMgZnJpc3PDrXTDqXNlISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnTmVtIGxlaGV0IG1lZ2plbGVuw610ZW5pIGF6IGVsxZF6bcOpbnlla2V0LCBtaXZlbCBuaW5jcyB2w6FsdG96w6FzYXpvbm9zw610w7MgbWVnYWR2YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICdBKHopIOKAniVz4oCdIHbDoWx0b3rDoXMgbmVtIHRhbMOhbGhhdMOzIGF6IGFkYXRiw6F6aXNiYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vua25vd24gdHlwZSAiJXMiIGVuY291bnRlcmVkISd9ID0gJ0lzbWVyZXRsZW4gdMOtcHVzIGZvcmR1bHQgZWzFkTogJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5J30gPSAnVsOhbHRvesOhc3TDtnJ0w6luZXQnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5IHpvb20sIG5vIEhpc3RvcnlFbnRyeUlEIGlzIGdpdmVuISd9ID0gJ05lbSBsZWhldCBtZWdqZWxlbsOtdGVuaSBheiBlbMWRem3DqW55bmFnecOtdMOhc3QsIG5pbmNzIGVsxZF6bcOpbnliZWplZ3l6w6lzLWF6b25vc8OtdMOzIG1lZ2FkdmEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnlFbnRyeSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdBKHopIOKAniVz4oCdIGVsxZF6bcOpbnliZWplZ3l6w6lzIG5lbSB0YWzDoWxoYXTDsyBheiBhZGF0YsOhemlzYmFuISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSBDQUIgZm9yIENoYW5nZSAlcyEnfSA9ICdOZW0gc2lrZXLDvGx0IGEgdsOhbHRvesOhcyBDQUIgZnJpc3PDrXTDqXNlIGEoeikgJXMgdsOhbHRvesOhc27DoWwhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlICVzISd9ID0gJ05lbSBzaWtlcsO8bHQgYSh6KSAlcyB2w6FsdG96w6FzIGZyaXNzw610w6lzZSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU1hbmFnZXIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2VNYW5hZ2VyJ30gPSAnw4F0dGVraW50w6lzOiB2w6FsdG96w6FzbWVuZWR6c2VyJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IENBQid9ID0gJ8OBdHRla2ludMOpczogc2Fqw6F0IENBQic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgQ2hhbmdlcyd9ID0gJ8OBdHRla2ludMOpczogc2Fqw6F0IHbDoWx0b3rDoXNvayc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgV29ya29yZGVycyd9ID0gJ8OBdHRla2ludMOpczogc2Fqw6F0IG11bmthbWVncmVuZGVsw6lzZWsnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVBJUi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFBJUid9ID0gJ8OBdHRla2ludMOpczogUElSJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQU0EucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBQU0EnfSA9ICfDgXR0ZWtpbnTDqXM6IFBTQSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdBKHopIOKAniVz4oCdIG11bmthbWVncmVuZGVsw6lzIG5lbSB0YWzDoWxoYXTDsyBheiBhZGF0YsOhemlzYmFuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgdGhlIHdvcmtvcmRlciBpcyBub3QgYXR0YWNoZWQgdG8gYSBjaGFuZ2UhJ30gPQogICAgICAgICdOZW0gbGVoZXQgbMOpdHJlaG96bmkgYSBraW1lbmV0ZXQsIG1pdmVsIGEgbXVua2FtZWdyZW5kZWzDqXMgbmluY3MgY3NhdG9sdmEgZWd5IHbDoWx0b3rDoXNob3ohJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBjcmVhdGUgb3V0cHV0LCBhcyBubyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICdOZW0gbGVoZXQgbMOpdHJlaG96bmkgYSBraW1lbmV0ZXQsIG1pdmVsIG5pbmNzIHbDoWx0b3rDoXNhem9ub3PDrXTDsyBtZWdhZHZhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duIGNoYW5nZSB0aXRsZSd9ID0gJ2lzbWVyZXRsZW4gdsOhbHRvesOhc2PDrW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXInfSA9ICdJVFNNIG11bmthbWVncmVuZGVsw6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gd29ya29yZGVyIHRpdGxlJ30gPSAnaXNtZXJldGxlbiBtdW5rYW1lZ3JlbmRlbMOpcy1jw61tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIE92ZXJ2aWV3ICglcyknfSA9ICdJVFNNIG11bmthbWVncmVuZGVsw6lzIMOhdHRla2ludMOpcyAoJXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWRTdGFydFRpbWUnfSA9ICdUZXJ2ZXpldHQga2V6ZMOpc2kgaWTFkSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkRW5kVGltZSd9ID0gJ1RlcnZlemV0dCBiZWZlamV6w6lzaSBpZMWRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbFN0YXJ0VGltZSd9ID0gJ1TDqW55bGVnZXMga2V6ZMOpc2kgaWTFkSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxFbmRUaW1lJ30gPSAnVMOpbnlsZWdlcyBiZWZlamV6w6lzaSBpZMWRJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VSZXNldC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHJlc2V0IFdvcmtPcmRlciAlcyBvZiBDaGFuZ2UgJXMhJ30gPSAnTmVtIHNpa2Vyw7xsdCBhKHopICVzIG11bmthbWVncmVuZGVsw6lzIHZpc3N6YcOhbGzDrXTDoXNhIGEoeikgJXMgdsOhbHRvesOhc27DoWwhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byByZXNldCBDaGFuZ2UgJXMhJ30gPSAnTmVtIHNpa2Vyw7xsdCBhKHopICVzIHbDoWx0b3rDoXMgdmlzc3phw6FsbMOtdMOhc2EhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VTY2hlZHVsZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IENoYW5nZSBTY2hlZHVsZSd9ID0gJ8OBdHRla2ludMOpczogdsOhbHRvenRhdMOhc2kgw7x0ZW10ZXJ2JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VTZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTZWFyY2gnfSA9ICdWw6FsdG96w6Fza2VyZXPDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlVGl0bGUnfSA9ICdWw6FsdG96w6FzY8OtbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJzJ30gPSAnTXVua2FtZWdyZW5kZWzDqXNlayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VTdGF0ZSd9ID0gJ1bDoWx0b3rDoXPDoWxsYXBvdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2VhcmNoIFJlc3VsdCd9ID0gJ1bDoWx0b3rDoXNrZXJlc8Opc2kgZXJlZG3DqW55ZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE51bWJlcid9ID0gJ1bDoWx0b3rDoXNzesOhbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrIE9yZGVyIFRpdGxlJ30gPSAnTXVua2FtZWdyZW5kZWzDqXMtY8OtbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVzY3JpcHRpb24nfSA9ICdWw6FsdG96w6FzbGXDrXLDoXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEp1c3RpZmljYXRpb24nfSA9ICdWw6FsdG96w6FzaW5kb2tsw6FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBJbnN0cnVjdGlvbid9ID0gJ011bmthbWVncmVuZGVsw6lzLXV0YXPDrXTDoXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFJlcG9ydCd9ID0gJ011bmthbWVncmVuZGVsw6lzLWplbGVudMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpb3JpdHknfSA9ICdWw6FsdG96w6FzcHJpb3JpdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW1wYWN0J30gPSAnVsOhbHRvesOhc2hhdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnTMOpdHJlaG96dGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFN0YXRlJ30gPSAnTXVua2FtZWdyZW5kZWzDqXMtw6FsbGFwb3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFR5cGUnfSA9ICdNdW5rYW1lZ3JlbmRlbMOpcy10w61wdXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEFnZW50J30gPSAnTXVua2FtZWdyZW5kZWzDqXMtw7xneWludMOpesWRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZm9yZSd9ID0gJ2VsxZF0dCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjaGFuZ2UgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICdBKHopIOKAniVz4oCdIHbDoWx0b3rDoXN0IG5lbSBzaWtlcsO8bHQgc29yb3PDrXRhbmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgdGhlIHRlbXBsYXRlICIlcyIuJ30gPSAnTmVtIHNpa2Vyw7xsdCBmcmlzc8OtdGVuaSBhKHopIOKAniVz4oCdIHNhYmxvbnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgY2hhbmdlICIlcyIuJ30gPSAnTmVtIHNpa2Vyw7xsdCB0w7Zyw7ZsbmkgYSh6KSDigJ4lc+KAnSB2w6FsdG96w6FzdC4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRpbWVTbG90LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlIGNhblwndCBiZSBtb3ZlZCwgYXMgaXQgaGFzIG5vIHdvcmtvcmRlcnMuJ30gPSAnQSB2w6FsdG96w6FzdCBuZW0gbGVoZXQgw6F0aGVseWV6bmksIG1pdmVsIG5pbmNzZW5layBtdW5rYW1lZ3JlbmRlbMOpc2VpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgZmlyc3QuJ30gPSAnRWzFkXN6w7ZyIGFkam9uIGhvenrDoSBlZ3kgbXVua2FtZWdyZW5kZWzDqXN0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgbW92ZSBhIGNoYW5nZSB3aGljaCBhbHJlYWR5IGhhcyBzdGFydGVkISd9ID0gJ05lbSBsZWhldCDDoXRoZWx5ZXpuaSBlZ3kgb2x5YW4gdsOhbHRvesOhc3QsIGFtZWx5IG3DoXIgZWxrZXpkxZFkw7Z0dCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIG1vdmUgdGhlIGluZGl2aWR1YWwgd29ya29yZGVycyBpbnN0ZWFkLid9ID0gJ0hlbHlldHRlIGhlbHllenplIMOhdCBheiBlZ3llcyBtdW5rYW1lZ3JlbmRlbMOpc2VrZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjdXJyZW50ICVzIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLid9ID0gJ0EgamVsZW5sZWdpICVzIG1lZ2hhdMOhcm96w6FzYSBuZW0gc2lrZXLDvGx0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgJXMgb2YgYWxsIHdvcmtvcmRlcnMgaGFzIHRvIGJlIGRlZmluZWQuJ30gPSAnQXogw7Zzc3plcyBtdW5rYW1lZ3JlbmRlbMOpcyAlcyB0w61wdXPDoXQgbWVnIGtlbGwgaGF0w6Fyb3puaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIG1vdmUgdGltZSBzbG90IGZvciB3b3Jrb3JkZXIgIyVzISd9ID0gJ05lbSBzaWtlcsO8bHQgYXogaWTFkXLDqXMgw6F0aGVseWV6w6lzZSBhKHopICMlcyBtdW5rYW1lZ3JlbmRlbMOpc27DqWwhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgJXMgcGVybWlzc2lvbiEnfSA9ICclcyBqb2dvc3VsdHPDoWdyYSB2YW4gc3rDvGtzw6lnZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gVGVtcGxhdGVJRCBpcyBnaXZlbiEnfSA9ICdOaW5jcyBzYWJsb25hem9ub3PDrXTDsyBtZWdhZHZhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdBKHopIOKAniVz4oCdIHNhYmxvbiBuZW0gdGFsw6FsaGF0w7MgYXogYWRhdGLDoXppc2JhbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgdGVtcGxhdGUgJXMhJ30gPSAnTmVtIHNpa2Vyw7xsdCBhKHopICVzIHNhYmxvbiB0w7ZybMOpc2UhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgJXMhJ30gPSAnTmVtIHNpa2Vyw7xsdCBhKHopICVzIHNhYmxvbiBmcmlzc8OtdMOpc2UhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgIiVzIiEnfSA9ICdOZW0gc2lrZXLDvGx0IGEoeikg4oCeJXPigJ0gc2FibG9uIGZyaXNzw610w6lzZSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlISd9ID0gJ05lbSBzaWtlcsO8bHQgYSB2w6FsdG96w6FzIGzDqXRyZWhvesOhc2EhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgd29ya29yZGVyIGZyb20gdGVtcGxhdGUhJ30gPSAnTmVtIHNpa2Vyw7xsdCBhIG11bmthbWVncmVuZGVsw6lzIGzDqXRyZWhvesOhc2Egc2FibG9uYsOzbCEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBUZW1wbGF0ZSd9ID0gJ8OBdHRla2ludMOpczogc2FibG9uJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJBZGQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIG9uIHRoZSBjaGFuZ2UhJ30gPSAnJXMgam9nb3N1bHRzw6Fnb2tyYSB2YW4gc3rDvGtzw6lnZSBhIHbDoWx0b3rDoXNvbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGFkZCB3b3Jrb3JkZXIhJ30gPSAnTmVtIHNpa2Vyw7xsdCBhIG11bmthbWVncmVuZGVsw6lzIGhvenrDoWFkw6FzYSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFnZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICdOaW5jcyBtdW5rYW1lZ3JlbmRlbMOpcy1hem9ub3PDrXTDsyBtZWdhZHZhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gc2V0IHRoZSB3b3Jrb3JkZXIgYWdlbnQgb2YgdGhlIHdvcmtvcmRlciAiJXMiIHRvIGVtcHR5ISd9ID0KICAgICAgICAnTmVtIHNpa2Vyw7xsdCBhKHopIOKAniVz4oCdIG11bmthbWVncmVuZGVsw6lzIMO8Z3lpbnTDqXrFkWrDqW5layBiZcOhbGzDrXTDoXNhIMO8cmVzcmUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgdGhlIHdvcmtvcmRlciAiJXMiISd9ID0gJ05lbSBzaWtlcsO8bHQgYSh6KSDigJ4lc+KAnSBtdW5rYW1lZ3JlbmRlbMOpcyBmcmlzc8OtdMOpc2UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBmaW5kIENoYW5nZSBmb3IgV29ya09yZGVyICVzISd9ID0gJ05lbSB0YWzDoWxoYXTDsyB2w6FsdG96w6FzIGEoeikgJXMgbXVua2FtZWdyZW5kZWzDqXNoZXohJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHdvcmtvcmRlciAlcyEnfSA9ICdOZW0gc2lrZXLDvGx0IGEoeikgJXMgbXVua2FtZWdyZW5kZWzDqXMgdMO2cmzDqXNlISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBXb3JrT3JkZXIgJXMhJ30gPSAnTmVtIHNpa2Vyw7xsdCBhKHopICVzIG11bmthbWVncmVuZGVsw6lzIGZyaXNzw610w6lzZSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIGFzIG5vIFdvcmtPcmRlcklEIGlzIGdpdmVuISd9ID0gJ05lbSBsZWhldCBtZWdqZWxlbsOtdGVuaSBheiBlbMWRem3DqW55ZWtldCwgbWl2ZWwgbmluY3MgbXVua2FtZWdyZW5kZWzDqXMtYXpvbm9zw610w7MgbWVnYWR2YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICdBKHopIOKAniVz4oCdIG11bmthbWVncmVuZGVsw6lzIG5lbSB0YWzDoWxoYXTDsyBheiBhZGF0YsOhemlzYmFuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJIaXN0b3J5OjonfSA9ICdXb3JrT3JkZXJIaXN0b3J5OjonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEhpc3RvcnknfSA9ICdNdW5rYW1lZ3JlbmRlbMOpcy1lbMWRem3DqW55ZWsnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IGVudHJ5ICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICdBKHopIOKAniVz4oCdIGVsxZF6bcOpbnliZWplZ3l6w6lzIG5lbSB0YWzDoWxoYXTDsyBheiBhZGF0YsOhemlzYmFuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSBab29tJ30gPSAnTXVua2FtZWdyZW5kZWzDqXMgZWzFkXptw6lueWVpbmVrIG5hZ3nDrXTDoXNhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUYWtlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdGFrZSB0aGUgd29ya29yZGVyICVzISd9ID0gJ05lbSBzaWtlcsO8bHQgYSh6KSAlcyBtdW5rYW1lZ3JlbmRlbMOpcyBmZWx2w6l0ZWxlISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB3b3Jrb3JkZXIgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICdBKHopIOKAniVz4oCdIG11bmthbWVncmVuZGVsw6lzdCBuZW0gc2lrZXLDvGx0IHNvcm9zw610YW5pLic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9JVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIGNvbmZpZyBvcHRpb24gJXMhJ30gPSAnQSh6KSAlcyBrb25maWd1csOhY2nDs3MgYmXDoWxsw610w6FzIHN6w7xrc8OpZ2VzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgb3B0aW9uICVzIG5lZWRzIHRvIGJlIGEgSEFTSCByZWYhJ30gPSAnQSh6KSAlcyBrb25maWd1csOhY2nDs3MgYmXDoWxsw610w6FzbmFrIGtpdm9uYXQtaGl2YXRrb3rDoXNuYWsga2VsbCBsZW5uaWUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNvbmZpZyBvcHRpb24gZm91bmQgZm9yIHRoZSB2aWV3ICIlcyIhJ30gPSAnTmVtIHRhbMOhbGhhdMOzIGtvbmZpZ3Vyw6FjacOzcyBiZcOhbGzDrXTDoXMgYSh6KSDigJ4lc+KAnSBuw6l6ZXRoZXohJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpdGxlOiAlcyB8IFR5cGU6ICVzJ30gPSAnQ8OtbTogJXMgfCBUw61wdXM6ICVzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgQ0FCcyd9ID0gJ1NhasOhdCBDQUItb2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015Q2hhbmdlcy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgQ2hhbmdlcyd9ID0gJ1NhasOhdCB2w6FsdG96w6Fzb2snOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015V29ya09yZGVycy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgV29yayBPcmRlcnMnfSA9ICdTYWrDoXQgbXVua2FtZWdyZW5kZWzDqXNlayc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNoYW5nZU1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVxdWVzdGVkJ30gPSAna8OpcnZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3BlbmRpbmcgYXBwcm92YWwnfSA9ICdqw7N2w6FoYWd5w6FzcmEgdsOhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWplY3RlZCd9ID0gJ3Zpc3N6YXV0YXPDrXR2YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZlZCd9ID0gJ2rDs3bDoWhhZ3l2YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbiBwcm9ncmVzcyd9ID0gJ2ZvbHlhbWF0YmFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3BlbmRpbmcgcGlyJ30gPSAnZsO8Z2fFkWJlbiBsw6l2xZEgUElSJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3N1Y2Nlc3NmdWwnfSA9ICdzaWtlcmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ZhaWxlZCd9ID0gJ3Npa2VydGVsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2FuY2VsZWQnfSA9ICdtZWdzemFrw610dmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmV0cmFjdGVkJ30gPSAndmlzc3phdm9udmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY3JlYXRlZCd9ID0gJ2zDqXRyZWhvenZhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FjY2VwdGVkJ30gPSAnZWxmb2dhZHZhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlYWR5J30gPSAna8Opc3plbiDDoWxsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FwcHJvdmFsJ30gPSAnasOzdsOhaGFnecOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3b3Jrb3JkZXInfSA9ICdtdW5rYW1lZ3JlbmRlbMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiYWNrb3V0J30gPSAndmlzc3phw6FsbMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydkZWNpc2lvbid9ID0gJ2TDtm50w6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bpcid9ID0gJ1BJUic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyd9ID0gJ2VneWVubMWRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCd9ID0gJ25lbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBlbXB0eSd9ID0gJ8O8cmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCBlbXB0eSd9ID0gJ25lbSDDvHJlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBncmVhdGVyIHRoYW4nfSA9ICduYWd5b2JiIG1pbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbGVzcyB0aGFuJ30gPSAna2lzZWJiIG1pbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgYmVmb3JlJ30gPSAnZXogZWzFkXR0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGFmdGVyJ30gPSAnZXogdXTDoW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY29udGFpbnMnfSA9ICd0YXJ0YWxtYXp6YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgY29udGFpbnMnfSA9ICduZW0gdGFydGFsbWF6emEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmVnaW5zIHdpdGgnfSA9ICdlenplbCBrZXpkxZFkaWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZW5kcyB3aXRoJ30gPSAnZXp6ZWwgdsOpZ3rFkWRpayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzZXQnfSA9ICdiZcOhbGzDrXR2YSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbGlzdCBvZiB0aGUgYWdlbnRzIHdobyBoYXZlIHBlcm1pc3Npb24gdG8gdGFrZSB3b3Jrb3JkZXJzLiBLZXkgaXMgYSBsb2dpbiBuYW1lLiBDb250ZW50IGlzIDAgb3IgMS4nfSA9CiAgICAgICAgJ0F6b24gw7xneWludMOpesWRayBsaXN0w6FqYSwgYWtpayBqb2dvc3VsdHPDoWdnYWwgcmVuZGVsa2V6bmVrIGEgbXVua2FtZWdyZW5kZWzDqXNlayBmZWx2w6l0ZWzDqWhlei4gQSBrdWxjcyBhIGJlamVsZW50a2V6w6lzaSBuw6l2LiBBIHRhcnRhbG9tIDAgdmFneSAxLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2Ygd29ya29yZGVyIHN0YXRlcywgYXQgd2hpY2ggdGhlIEFjdHVhbFN0YXJ0VGltZSBvZiBhIHdvcmtvcmRlciB3aWxsIGJlIHNldCBpZiBpdCB3YXMgZW1wdHkgYXQgdGhpcyBwb2ludC4nfSA9CiAgICAgICAgJ0F6b24gbXVua2FtZWdyZW5kZWzDqXMtw6FsbGFwb3RvayBsaXN0w6FqYSwgYW1lbHlla27DqWwgZWd5IG11bmthbWVncmVuZGVsw6lzIHTDqW55bGVnZXMga2V6ZMOpc2kgaWRlamUgYmUgbGVzeiDDoWxsw610dmEsIGhhIGF6IMO8cmVzIGVubsOpbCBhIHBvbnRuw6FsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyJ30gPSAnTXVua2FtZWdyZW5kZWzDqXMgaG96esOhYWTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgKGZyb20gVGVtcGxhdGUpJ30gPSAnTXVua2FtZWdyZW5kZWzDqXMgaG96esOhYWTDoXNhIChzYWJsb25iw7NsKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBjaGFuZ2UgZnJvbSB0ZW1wbGF0ZS4nfSA9ICdFZ3kgdsOhbHRvesOhcyBob3p6w6FhZMOhc2Egc2FibG9uYsOzbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgY2hhbmdlLid9ID0gJ0VneSB2w6FsdG96w6FzIGhvenrDoWFkw6FzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIChmcm9tIHRlbXBsYXRlKSB0byB0aGUgY2hhbmdlLid9ID0gJ0VneSBtdW5rYW1lZ3JlbmRlbMOpcyBob3p6w6FhZMOhc2EgKHNhYmxvbmLDs2wpIGEgdsOhbHRvesOhc2hvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIHRvIHRoZSBjaGFuZ2UuJ30gPSAnRWd5IG11bmthbWVncmVuZGVsw6lzIGhvenrDoWFkw6FzYSBhIHbDoWx0b3rDoXNob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBmcm9tIHRlbXBsYXRlJ30gPSAnSG96esOhYWTDoXMgc2FibG9uYsOzbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgQ0lQIG1hdHJpeC4nfSA9ICdBIENJUCBtw6F0cml4IGFkbWluaXN6dHLDoXRvcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIHRoZSBzdGF0ZSBtYWNoaW5lLid9ID0gJ0F6IMOhbGxhcG90Z8OpcCBhZG1pbmlzenRyw6F0b3JhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2UgYWR2aXNvcnkgYm9hcmRzLid9ID0KICAgICAgICAnw5xneWludMOpesWRaSBmZWzDvGxldCDDqXJ0ZXPDrXTDqXNpIG1vZHVsIGEgdsOhbHRvesOhc21lbmVkenNtZW50LXRhbsOhY3NvayBzesOhbcOhbmFrIG1lZ3Rla2ludMOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzIG1hbmFnZWQgYnkgdGhlIHVzZXIuJ30gPQogICAgICAgICfDnGd5aW50w6l6xZFpIGZlbMO8bGV0IMOpcnRlc8OtdMOpc2kgbW9kdWwgYSBmZWxoYXN6bsOhbMOzIMOhbHRhbCBrZXplbHQgdsOhbHRvesOhc29rIHN6w6Ftw6FuYWsgbWVndGVraW50w6lzw6loZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMuJ30gPQogICAgICAgICfDnGd5aW50w6l6xZFpIGZlbMO8bGV0IMOpcnRlc8OtdMOpc2kgbW9kdWwgYSB2w6FsdG96w6Fzb2sgc3rDoW3DoW5hayBtZWd0ZWtpbnTDqXPDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2Ygd29ya29yZGVycy4nfSA9CiAgICAgICAgJ8OcZ3lpbnTDqXrFkWkgZmVsw7xsZXQgw6lydGVzw610w6lzaSBtb2R1bCBhIG11bmthbWVncmVuZGVsw6lzZWsgc3rDoW3DoW5hayBtZWd0ZWtpbnTDqXPDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIE1lbWJlciBTZWFyY2gnfSA9ICdDQUItdGFnIGtlcmVzw6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50IHRvb2xiYXJzLiBEZWZhdWx0OiAzIGhvdXJzICgxODAgbWludXRlcykuJ30gPQogICAgICAgICdHeW9yc8OtdMOzdMOhciBpZMWRIHBlcmNiZW4gYSB2w6FsdG96w6FzbWVuZWR6c21lbnQgZXN6a8O2enTDoXJuw6FsLiBBbGFww6lydGVsbWV6ZXR0OiAzIMOzcmEgKDE4MCBwZXJjKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgY2hhbmdlIG1hbmFnZW1lbnQuIERlZmF1bHQ6IDUgZGF5cyAoNzIwMCBtaW51dGVzKS4nfSA9CiAgICAgICAgJ0d5b3Jzw610w7N0w6FyIGlkxZEgcGVyY2JlbiBhIHbDoWx0b3rDoXNtZW5lZHpzbWVudG7DqWwuIEFsYXDDqXJ0ZWxtZXpldHQ6IDUgbmFwICg3MjAwIHBlcmMpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQ0FCIFRlbXBsYXRlcyd9ID0gJ1bDoWx0b3rDoXMgQ0FCLXNhYmxvbm9rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5Lid9ID0gJ1bDoWx0b3rDoXN0w7ZydMOpbmV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW52b2x2ZWQgUGVyc29ucy4nfSA9ICdBIHbDoWx0b3rDoXNiYW4gcsOpc3p0dmV2xZEgc3plbcOpbHllay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdWw6FsdG96w6FzIMOhdHRla2ludMWRIOKAnmtpc+KAnSBrb3Jsw6F0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBPdmVydmlldy4nfSA9ICdWw6FsdG96w6FzIMOhdHRla2ludMOpcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFByaW50Lid9ID0gJ1bDoWx0b3rDoXNueW9tdGF0w6FzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2NoZWR1bGUnfSA9ICdWw6FsdG96dGF0w6FzaSDDvHRlbXRlcnYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNjaGVkdWxlLid9ID0gJ1bDoWx0b3p0YXTDoXNpIMO8dGVtdGVydi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20uJ30gPSAnVsOhbHRvesOhc25hZ3nDrXTDoXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhbmQgV29ya29yZGVyIFRlbXBsYXRlcyd9ID0gJ1bDoWx0b3rDoXMgw6lzIG11bmthbWVncmVuZGVsw6lzIHNhYmxvbm9rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhbmQgd29ya29yZGVyIHRlbXBsYXRlcyBlZGl0ZWQgYnkgdGhpcyB1c2VyLid9ID0gJ0EgZmVsaGFzem7DoWzDsyDDoWx0YWwgc3plcmtlc3p0ZXR0IHbDoWx0b3rDoXMgw6lzIG11bmthbWVncmVuZGVsw6lzIHNhYmxvbm9rLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYXJlYS4nfSA9ICdWw6FsdG96w6FzdGVyw7xsZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBpbnZvbHZlZCBwZXJzb25zIG9mIHRoZSBjaGFuZ2UuJ30gPSAnQSB2w6FsdG96w6FzIHLDqXN6dHZldsWRIHN6ZW3DqWx5ZWluZWsgbcOzZG9zw610w6FzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGxpbWl0IHBlciBwYWdlIGZvciBDaGFuZ2UgT3ZlcnZpZXcgIlNtYWxsIi4nfSA9ICdPbGRhbGFua8OpbnRpIHbDoWx0b3rDoXMga29ybMOhdCBhIOKAnmtpc+KAnSB2w6FsdG96w6FzIMOhdHRla2ludMWRbsOpbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ0F6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQgdsOhbHRvesOhcyBrZXJlc8Opc2kgaMOhdHTDqXJwcm9ncmFtIMO6dHbDoWxhc3p0w7NqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIEVkaXQnfSA9ICdGZWx0w6l0ZWwgc3plcmtlc3p0w6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbiBPdmVydmlldyd9ID0gJ0ZlbHTDqXRlbCDDoXR0ZWtpbnTDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlIHdoaWNoIHNjcmVlbiBzaG91bGQgYmUgc2hvd24gYWZ0ZXIgYSBuZXcgd29ya29yZGVyIGhhcyBiZWVuIGNyZWF0ZWQuJ30gPQogICAgICAgICdBbm5hayBiZcOhbGzDrXTDoXNhLCBob2d5IG1lbHkga8OpcGVybnnFkSBsZWd5ZW4gbWVnamVsZW7DrXR2ZSwgbWl1dMOhbiBlZ3kgw7pqIG11bmthbWVncmVuZGVsw6lzdCBsw6l0cmVob3p0YWsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyZXMgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IHdoZW4gcGxhbm5lZCB0aGUgc3RhcnQgdGltZSBvciBvdGhlciB0aW1lIHZhbHVlcyBoYXZlIGJlZW4gcmVhY2hlZC9wYXNzZWQuJ30gPQogICAgICAgICdCZcOhbGzDrXRqYSwgaG9neSBtaWx5ZW4gZ3lha3JhbiBsZWd5ZW5layBlbGvDvGxkdmUgYXogw6lydGVzw610w6lzZWssIGFtaWtvciBlbMOpcmlrL8OhdGFkasOhayBhIHRlcnZlemV0dCBrZXpkw6lzaSBpZMWRdCB2YWd5IG3DoXMgaWTFkcOpcnTDqWtla2V0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgQ2hhbmdlJ30gPSAnVsOhbHRvesOhcyBsw6l0cmVob3rDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBDaGFuZ2UgKGZyb20gVGVtcGxhdGUpJ30gPSAnVsOhbHRvesOhcyBsw6l0cmVob3rDoXNhIChzYWJsb25iw7NsKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgKGZyb20gdGVtcGxhdGUpIGZyb20gdGhpcyB0aWNrZXQuJ30gPSAnVsOhbHRvesOhcyBsw6l0cmVob3rDoXNhIChzYWJsb25iw7NsKSBlYmLFkWwgYSBqZWd5YsWRbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgY2hhbmdlIGZyb20gdGhpcyB0aWNrZXQuJ30gPSAnVsOhbHRvesOhcyBsw6l0cmVob3rDoXNhIGViYsWRbCBhIGplZ3lixZFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBJVFNNIENoYW5nZSBNYW5hZ2VtZW50IG5vdGlmaWNhdGlvbnMuJ30gPSAnSVRTTSB2w6FsdG96w6FzbWVuZWR6c21lbnQgw6lydGVzw610w6lzZWsgbMOpdHJlaG96w6FzYSDDqXMga2V6ZWzDqXNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgZm9yIGEgd29ya29yZGVyLiBUaGlzIGVudHJ5IG11c3QgZXhpc3QgaW4gZ2VuZXJhbCBjYXRhbG9nIGNsYXNzIFwnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpUeXBlXCcuJ30gPQogICAgICAgICdFZ3kgbXVua2FtZWdyZW5kZWzDqXMgYWxhcMOpcnRlbG1lemV0dCB0w61wdXNhLiBFbm5layBhIGJlamVneXrDqXNuZWsgbMOpdGV6bmllIGtlbGwgYXog4oCeSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpUeXBl4oCdIMOhbHRhbMOhbm9zIGthdGFsw7NndXMgb3N6dMOhbHliYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICdNxbF2ZWxldGVrIG1lZ2hhdMOhcm96w6FzYSwgYWhvbCBlZ3kgYmXDoWxsw610w6Fzb2sgZ29tYiDDqXJoZXTFkSBlbCBhIGthcGNzb2x0IG9iamVrdHVtb2sgZmVsw7xsZXRpIGVsZW1lbiAoTGlua09iamVjdDo6Vmlld01vZGUgPSDigJ7DtnNzemV0ZXR04oCdKS4gTmUgZmVsZWRqZSwgaG9neSBlemVrbmVrIGEgbcWxdmVsZXRla25layByZW5kZWxrZXpuacO8ayBrZWxsIGEga8O2dmV0a2V6xZEgSlMgw6lzIENTUyBmw6FqbG9rIHJlZ2lzenRyw6Fsw6Fzw6F2YWw6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIMOpcyBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgc2lnbmFscyBmb3IgZWFjaCB3b3Jrb3JkZXIgc3RhdGUuJ30gPSAnQSBzemlnbsOhbG9rIG1lZ2hhdMOhcm96w6FzYSBtaW5kZW4gbXVua2FtZWdyZW5kZWzDqXMtw6FsbGFwb3Ruw6FsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBDaGFuZ2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IENoYW5nZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJ0FubmFrIG1lZ2hhdMOhcm96w6FzYSwgaG9neSBtZWx5IG9zemxvcG9rIGxlZ3llbmVrIGzDoXRoYXTDs2sgYSBrYXBjc29sdCB2w6FsdG96w6Fzb2sgZmVsw7xsZXRpIGVsZW1lbiAoTGlua09iamVjdDo6Vmlld01vZGUgPSDigJ7DtnNzemV0ZXR04oCdKS4gTWVnamVneXrDqXM6IGNzYWsgdsOhbHRvesOhcyBhdHRyaWLDunR1bW9rIGVuZ2Vkw6lseWV6ZXR0ZWsgYXogYWxhcMOpcnRlbG1lemV0dCBvc3psb3Bva27DoWwuIExlaGV0c8OpZ2VzIGJlw6FsbMOtdMOhc29rOiAwID0gbGV0aWx0dmEsIDEgPSBlbMOpcmhldMWRLCAyID0gYWxhcMOpcnRlbG1lemV0dGVuIGVuZ2Vkw6lseWV6ZXR0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBXb3Jrb3JkZXIgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgV29ya29yZGVyIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnQW5uYWsgbWVnaGF0w6Fyb3rDoXNhLCBob2d5IG1lbHkgb3N6bG9wb2sgbGVneWVuZWsgbMOhdGhhdMOzayBhIGthcGNzb2x0IG11bmthbWVncmVuZGVsw6lzIGZlbMO8bGV0aSBlbGVtZW4gKExpbmtPYmplY3Q6OlZpZXdNb2RlID0g4oCew7Zzc3pldGV0dOKAnSkuIE1lZ2plZ3l6w6lzOiBjc2FrIG11bmthbWVncmVuZGVsw6lzIGF0dHJpYsO6dHVtb2sgZW5nZWTDqWx5ZXpldHRlayBheiBhbGFww6lydGVsbWV6ZXR0IG9zemxvcG9rbsOhbC4gTGVoZXRzw6lnZXMgYmXDoWxsw610w6Fzb2s6IDAgPSBsZXRpbHR2YSwgMSA9IGVsw6lyaGV0xZEsIDIgPSBhbGFww6lydGVsbWV6ZXR0ZW4gZW5nZWTDqWx5ZXpldHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjaGFuZ2UgbGlzdC4nfSA9CiAgICAgICAgJ0VneSDDoXR0ZWtpbnTFkSBtb2R1bHQgaGF0w6Fyb3ogbWVnIGVneSB2w6FsdG96w6FzbGlzdGEga2lzIG7DqXpldMOpbmVrIG1lZ2plbGVuw610w6lzw6loZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSB0ZW1wbGF0ZSBsaXN0Lid9ID0KICAgICAgICAnRWd5IMOhdHRla2ludMWRIG1vZHVsdCBoYXTDoXJveiBtZWcgZWd5IHNhYmxvbmxpc3RhIGtpcyBuw6l6ZXTDqW5layBtZWdqZWxlbsOtdMOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcHJpbnQgdGhlIGFjY291bnRlZCB0aW1lLid9ID0gJ01lZ2hhdMOhcm96emEsIGhvZ3kgbGVoZXRzw6lnZXMgbGVzei1lIGtpbnlvbXRhdG5pIGF6IGVsc3rDoW1vbHQgaWTFkXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgcGxhbm5lZCBlZmZvcnQuJ30gPSAnTWVnaGF0w6Fyb3p6YSwgaG9neSBsZWhldHPDqWdlcyBsZXN6LWUga2lueW9tdGF0bmkgYSB0ZXJ2ZXpldHQgcsOhZm9yZMOtdMOhc3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgcmVhY2hhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lKSBjaGFuZ2UgZW5kIHN0YXRlcyBzaG91bGQgYmUgYWxsb3dlZCBpZiBhIGNoYW5nZSBpcyBpbiBhIGxvY2tlZCBzdGF0ZS4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEsIGhvZ3kgYXogZWzDqXJoZXTFkSAoYWhvZ3kgYXogw6FsbGFwb3Rnw6lwIG1lZ2hhdMOhcm96dGEpIHbDoWx0b3rDoXMgYmVmZWplesOpc2kgw6FsbGFwb3RhaXQgZWwga2VsbC1lIGZvZ2FkbmksIGhhIGVneSB2w6FsdG96w6FzIHrDoXJvbHQgw6FsbGFwb3RiYW4gdmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgd29ya29yZGVyIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSB3b3Jrb3JkZXIgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphLCBob2d5IGF6IGVsw6lyaGV0xZEgKGFob2d5IGF6IMOhbGxhcG90Z8OpcCBtZWdoYXTDoXJvenRhKSBtdW5rYW1lZ3JlbmRlbMOpcyBiZWZlamV6w6lzaSDDoWxsYXBvdGFpdCBlbCBrZWxsLWUgZm9nYWRuaSwgaGEgZWd5IG11bmthbWVncmVuZGVsw6lzIHrDoXJvbHQgw6FsbGFwb3RiYW4gdmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBhY2NvdW50ZWQgdGltZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnTWVnaGF0w6Fyb3p6YSwgaG9neSBheiBlbHN6w6Ftb2x0IGlkxZF0IG1lZyBrZWxsLWUgamVsZW7DrXRlbmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzIHNob3VsZCBiZSBzZXQuJ30gPSAnTWVnaGF0w6Fyb3p6YSwgaG9neSBhIHTDqW55bGVnZXMga2V6ZMOpc2kgw6lzIGJlZmVqZXrDqXNpIGlkxZFrZXQgYmUga2VsbC1lIMOhbGzDrXRhbmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGNoYW5nZSBzZWFyY2ggYW5kIHRoZSB3b3Jrb3JkZXIgc2VhcmNoIGZ1bmN0aW9ucyBjb3VsZCB1c2UgdGhlIG1pcnJvciBEQi4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEsIGhvZ3kgYSB2w6FsdG96w6Fza2VyZXPDqXMgw6lzIGEgbXVua2FtZWdyZW5kZWzDqXMta2VyZXPDqXMgZnVua2Npw7NrIGhhc3puw6FsaGF0asOhay1lIGEgdMO8a8O2ciBhZGF0YsOhemlzdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHN0YXRlIGNhbiBiZSBzZXQgaW4gQWdlbnRJVFNNQ2hhbmdlRWRpdC4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEsIGhvZ3kgYSB2w6FsdG96w6FzIMOhbGxhcG90YSBiZcOhbGzDrXRoYXTDsy1lIGF6IEFnZW50SVRTTUNoYW5nZUVkaXQgYmXDoWxsw610w6FzYmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBwbGFubmVkIGVmZm9ydCBzaG91bGQgYmUgc2hvd24uJ30gPSAnTWVnaGF0w6Fyb3p6YSwgaG9neSBhIHRlcnZlemV0dCByw6Fmb3Jkw610w6FzdCBtZWcga2VsbC1lIGplbGVuw610ZW5pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgcHJpbnQgYnkgY3VzdG9tZXIuJ30gPSAnTWVnaGF0w6Fyb3p6YSwgaG9neSBhIGvDqXJ0IGTDoXR1bW90IMO8Z3lmw6lsIHN6ZXJpbnQga2VsbC1lIGtpbnlvbXRhdG5pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2VhcmNoZWQgYnkgY3VzdG9tZXIuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphLCBob2d5IGEga8OpcnQgZMOhdHVtb3Qgw7xneWbDqWwgc3plcmludCBrZWxsLWUga2VyZXNuaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNldCBieSBjdXN0b21lci4nfSA9ICdNZWdoYXTDoXJvenphLCBob2d5IGEga8OpcnQgZMOhdHVtb3Qgw7xneWbDqWwgc3plcmludCBrZWxsLWUgYmXDoWxsw610YW5pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2hvd24gYnkgY3VzdG9tZXIuJ30gPSAnTWVnaGF0w6Fyb3p6YSwgaG9neSBhIGvDqXJ0IGTDoXR1bW90IMO8Z3lmw6lsIHN6ZXJpbnQga2VsbC1lIG1lZ2plbGVuw610ZW5pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSB3b3Jrb3JkZXIgc3RhdGUgc2hvdWxkIGJlIHNob3duLid9ID0gJ01lZ2hhdMOhcm96emEsIGhvZ3kgYSBtdW5rYW1lZ3JlbmRlbMOpcyDDoWxsYXBvdMOhdCBtZWcga2VsbC1lIGplbGVuw610ZW5pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSB3b3Jrb3JkZXIgdGl0bGUgc2hvdWxkIGJlIHNob3duLid9ID0gJ01lZ2hhdMOhcm96emEsIGhvZ3kgYSBtdW5rYW1lZ3JlbmRlbMOpcyBjw61tw6l0IG1lZyBrZWxsLWUgamVsZW7DrXRlbmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgc2hvd24gZ3JhcGggYXR0cmlidXRlcy4nfSA9ICdNZWdoYXTDoXJvenphIGEgbWVnamVsZW7DrXRldHQgZ3JhZmlrb25hdHRyaWLDunR1bW9rYXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhhdCBvbmx5IGNoYW5nZXMgY29udGFpbmluZyBXb3Jrb3JkZXJzIGxpbmtlZCB3aXRoIHNlcnZpY2VzLCB3aGljaCB0aGUgY3VzdG9tZXIgdXNlciBoYXMgcGVybWlzc2lvbiB0byB1c2Ugd2lsbCBiZSBzaG93bi4gQW55IG90aGVyIGNoYW5nZXMgd2lsbCBub3QgYmUgZGlzcGxheWVkLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSwgaG9neSBjc2FrIGF6b2sgYSBzem9sZ8OhbHRhdMOhc29ra2FsIMO2c3N6ZWthcGNzb2x0IG11bmthbWVncmVuZGVsw6lzZWtldCB0YXJ0YWxtYXrDsyB2w6FsdG96w6Fzb2sgbGVzem5layBtZWdqZWxlbsOtdHZlLCBhbWVseWVrcmUgYXogw7xneWbDqWxmZWxoYXN6bsOhbMOzbmFrIGhhc3puw6FsYXRpIGpvZ29zdWx0c8OhZ2EgdmFuLiBNaW5kZW4gZWd5w6liIHbDoWx0b3rDoXMgbmVtIGtlcsO8bCBtZWdqZWxlbsOtdMOpc3JlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSBhbGxvd2VkIHRvIGRlbGV0ZS4nfSA9ICdNZWdoYXTDoXJvenphIGF6b2thdCBhIHbDoWx0b3rDoXPDoWxsYXBvdG9rYXQsIGFtZWx5ZWsgZW5nZWTDqWx5ZXpldHRlayBsZXN6bmVrIHTDtnJsw6lzcmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFBTQSBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXpva2F0IGEgdsOhbHRvesOhc8OhbGxhcG90b2thdCwgYW1lbHllayBzesWxcsWRa2vDqW50IGxlc3puZWsgaGFzem7DoWx2YSBhIHbDoWx0b3rDoXMgUFNBIMOhdHRla2ludMWRasOpYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXpva2F0IGEgdsOhbHRvesOhc8OhbGxhcG90b2thdCwgYW1lbHllayBzesWxcsWRa2vDqW50IGxlc3puZWsgaGFzem7DoWx2YSBhIHbDoWx0b3p0YXTDoXNpIMO8dGVtdGVydiDDoXR0ZWtpbnTFkWrDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXpva2F0IGEgdsOhbHRvesOhc8OhbGxhcG90b2thdCwgYW1lbHllayBzesWxcsWRa2vDqW50IGxlc3puZWsgaGFzem7DoWx2YSBhIHNhasOhdCBDQUIgw6F0dGVraW50xZFqw6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhem9rYXQgYSB2w6FsdG96w6Fzw6FsbGFwb3Rva2F0LCBhbWVseWVrIHN6xbFyxZFra8OpbnQgbGVzem5layBoYXN6bsOhbHZhIGEgc2Fqw6F0IHbDoWx0b3rDoXNvayDDoXR0ZWtpbnTFkWrDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXpva2F0IGEgdsOhbHRvesOhc8OhbGxhcG90b2thdCwgYW1lbHllayBzesWxcsWRa2vDqW50IGxlc3puZWsgaGFzem7DoWx2YSBhIHbDoWx0b3rDoXNrZXplbMWRIMOhdHRla2ludMWRasOpYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXpva2F0IGEgdsOhbHRvesOhc8OhbGxhcG90b2thdCwgYW1lbHllayBzesWxcsWRa2vDqW50IGxlc3puZWsgaGFzem7DoWx2YSBhIHbDoWx0b3rDoXMgw6F0dGVraW50xZFqw6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhem9rYXQgYSB2w6FsdG96w6Fzw6FsbGFwb3Rva2F0LCBhbWVseWVrIHN6xbFyxZFra8OpbnQgbGVzem5layBoYXN6bsOhbHZhIGF6IMO8Z3lmw6lsIHbDoWx0b3p0YXTDoXNpIMO8dGVtdGVydiDDoXR0ZWtpbnTFkWrDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBjaGFuZ2UgdGl0bGUgZm9yIGEgZHVtbXkgY2hhbmdlIHdoaWNoIGlzIG5lZWRlZCB0byBlZGl0IGEgd29ya29yZGVyIHRlbXBsYXRlLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBlZ3kgw7xyZXMgdsOhbHRvesOhcyBhbGFww6lydGVsbWV6ZXR0IHbDoWx0b3rDoXNjw61tw6l0LCBhbWVseSBlZ3kgbXVua2FtZWdyZW5kZWzDqXMtc2FibG9uIHN6ZXJrZXN6dMOpc8OpaGV6IHN6w7xrc8OpZ2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6IGFsYXDDqXJ0ZWxtZXpldHQgcmVuZGV6w6lzaSBmZWx0w6l0ZWx0IGEgdsOhbHRvesOhcyBQU0Egw6F0dGVraW50xZFqw6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6IGFsYXDDqXJ0ZWxtZXpldHQgcmVuZGV6w6lzaSBmZWx0w6l0ZWx0IGEgdsOhbHRvesOhc21lbmVkenNlciDDoXR0ZWtpbnTFkWrDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAnTWVnaGF0w6Fyb3p6YSBheiBhbGFww6lydGVsbWV6ZXR0IHJlbmRlesOpc2kgZmVsdMOpdGVsdCBhIHbDoWx0b3rDoXMgw6F0dGVraW50xZFqw6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBheiBhbGFww6lydGVsbWV6ZXR0IHJlbmRlesOpc2kgZmVsdMOpdGVsdCBhIHbDoWx0b3p0YXTDoXNpIMO8dGVtdGVydiDDoXR0ZWtpbnTFkWrDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYSB2w6FsdG96w6Fzb2sgYWxhcMOpcnRlbG1lemV0dCByZW5kZXrDqXNpIGZlbHTDqXRlbMOpdCBhIHNhasOhdCBDQUIgw6F0dGVraW50xZFqw6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhIHbDoWx0b3rDoXNvayBhbGFww6lydGVsbWV6ZXR0IHJlbmRlesOpc2kgZmVsdMOpdGVsw6l0IGEgc2Fqw6F0IHbDoWx0b3rDoXNvayDDoXR0ZWtpbnTFkWrDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGEgdsOhbHRvesOhc29rIGFsYXDDqXJ0ZWxtZXpldHQgcmVuZGV6w6lzaSBmZWx0w6l0ZWzDqXQgYSBzYWrDoXQgbXVua2FtZWdyZW5kZWzDqXNlayDDoXR0ZWtpbnTFkWrDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGEgdsOhbHRvesOhc29rIGFsYXDDqXJ0ZWxtZXpldHQgcmVuZGV6w6lzaSBmZWx0w6l0ZWzDqXQgYSBQSVIgw6F0dGVraW50xZFqw6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhIHbDoWx0b3rDoXNvayBhbGFww6lydGVsbWV6ZXR0IHJlbmRlesOpc2kgZmVsdMOpdGVsw6l0IGF6IMO8Z3lmw6lsIHbDoWx0b3p0YXTDoXNpIMO8dGVtdGVydiDDoXR0ZWtpbnTFkWrDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYSB2w6FsdG96w6Fzb2sgYWxhcMOpcnRlbG1lemV0dCByZW5kZXrDqXNpIGZlbHTDqXRlbMOpdCBhIHNhYmxvbiDDoXR0ZWtpbnTFkWrDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9ICdNZWdoYXTDoXJvenphIGF6IGFsYXDDqXJ0ZWxtZXpldHQgcmVuZGV6w6lzaSBzb3JyZW5kZXQgYSBzYWrDoXQgQ0FCIMOhdHRla2ludMWRasOpYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9ICdNZWdoYXTDoXJvenphIGF6IGFsYXDDqXJ0ZWxtZXpldHQgcmVuZGV6w6lzaSBzb3JyZW5kZXQgYSBzYWrDoXQgdsOhbHRvesOhc29rIMOhdHRla2ludMWRasOpYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXogYWxhcMOpcnRlbG1lemV0dCByZW5kZXrDqXNpIHNvcnJlbmRldCBhIHNhasOhdCBtdW5rYW1lZ3JlbmRlbMOpc2VrIMOhdHRla2ludMWRasOpYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9ICdNZWdoYXTDoXJvenphIGF6IGFsYXDDqXJ0ZWxtZXpldHQgcmVuZGV6w6lzaSBzb3JyZW5kZXQgYSBQSVIgw6F0dGVraW50xZFqw6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9ICdNZWdoYXTDoXJvenphIGF6IGFsYXDDqXJ0ZWxtZXpldHQgcmVuZGV6w6lzaSBzb3JyZW5kZXQgYSB2w6FsdG96w6FzIFBTQSDDoXR0ZWtpbnTFkWrDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXogYWxhcMOpcnRlbG1lemV0dCByZW5kZXrDqXNpIHNvcnJlbmRldCBhIHbDoWx0b3rDoXNtZW5lZHpzZXIgw6F0dGVraW50xZFqw6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0gJ01lZ2hhdMOhcm96emEgYXogYWxhcMOpcnRlbG1lemV0dCByZW5kZXrDqXNpIHNvcnJlbmRldCBhIHbDoWx0b3rDoXMgw6F0dGVraW50xZFqw6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBheiBhbGFww6lydGVsbWV6ZXR0IHJlbmRlesOpc2kgc29ycmVuZGV0IGEgdsOhbHRvenRhdMOhc2kgw7x0ZW10ZXJ2IMOhdHRla2ludMWRasOpYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXogYWxhcMOpcnRlbG1lemV0dCByZW5kZXrDqXNpIHNvcnJlbmRldCBheiDDvGd5ZsOpbCB2w6FsdG96dGF0w6FzaSDDvHRlbXRlcnYgw6F0dGVraW50xZFqw6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPSAnTWVnaGF0w6Fyb3p6YSBheiBhbGFww6lydGVsbWV6ZXR0IHJlbmRlesOpc2kgc29ycmVuZGV0IGEgc2FibG9uIMOhdHRla2ludMWRasOpYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY2F0ZWdvcnkgb2YgYSBjaGFuZ2UuJ30gPSAnTWVnaGF0w6Fyb3p6YSBlZ3kgdsOhbHRvesOhcyBrYXRlZ8OzcmnDoWrDoW5hayBhbGFww6lydGVsbWV6ZXR0IMOpcnTDqWvDqXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBpbXBhY3Qgb2YgYSBjaGFuZ2UuJ30gPSAnTWVnaGF0w6Fyb3p6YSBlZ3kgdsOhbHRvesOhcyBoYXTDoXPDoW5hayBhbGFww6lydGVsbWV6ZXR0IMOpcnTDqWvDqXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3IgY2hhbmdlIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6IOKAnsOWc3N6ZWhhc29ubMOtdMOhcyDDqXJ0w6lr4oCdIG1lesWRayBtZXrFkXTDrXB1c8OhdCBheiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IG9zenTDoWx5YmFuIGhhc3puw6FsdCB2w6FsdG96w6FzIGF0dHJpYsO6dHVtYWluw6FsLiBBeiDDqXJ2w6lueWVzIMOpcnTDqWtlazogU2VsZWN0aW9uLCBUZXh0IMOpcyBEYXRlLiBIYSBhIHTDrXB1cyBuaW5jcyBtZWdoYXTDoXJvenZhLCBha2tvciBhIG1lesWRIG5lbSBsZXN6IGzDoXRoYXTDsy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciB3b3Jrb3JkZXIgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXog4oCew5Zzc3plaGFzb25sw610w6FzIMOpcnTDqWvigJ0gbWV6xZFrIG1lesWRdMOtcHVzw6F0IGF6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgb3N6dMOhbHliYW4gaGFzem7DoWx0IG11bmthbWVncmVuZGVsw6lzIGF0dHJpYsO6dHVtYWluw6FsLiBBeiDDqXJ2w6lueWVzIMOpcnTDqWtlazogU2VsZWN0aW9uLCBUZXh0IMOpcyBEYXRlLiBIYSBhIHTDrXB1cyBuaW5jcyBtZWdoYXTDoXJvenZhLCBha2tvciBhIG1lesWRIG5lbSBsZXN6IGzDoXRoYXTDsy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgY2hhbmdlIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXpva2F0IGF6IG9iamVrdHVtYXR0cmliw7p0dW1va2F0LCBhbWVseWVrIGtpdsOhbGFzenRoYXTDs2sgYSB2w6FsdG96w6Fzb2JqZWt0dW1va27DoWwgYXogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCBvc3p0w6FseWJhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXpva2F0IGF6IG9iamVrdHVtYXR0cmliw7p0dW1va2F0LCBhbWVseWVrIGtpdsOhbGFzenRoYXTDs2sgYSBtdW5rYW1lZ3JlbmRlbMOpcyBvYmpla3R1bW9rbsOhbCBheiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IG9zenTDoWx5YmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY2NvdW50ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6b2thdCBheiBvcGVyw6F0b3Jva2F0LCBhbWVseWVrIGtpdsOhbGFzenRoYXTDs2sgYXog4oCeRWxzesOhbW9sdCBpZMWR4oCdIGF0dHJpYsO6dHVtbsOhbCBheiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IG9zenTDoWx5YmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6b2thdCBheiBvcGVyw6F0b3Jva2F0LCBhbWVseWVrIGtpdsOhbGFzenRoYXTDs2sgYSDigJ5Uw6lueWxlZ2VzIGJlZmVqZXTDqXNpIGlkxZHigJ0gYXR0cmliw7p0dW1uw6FsIGF6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgb3N6dMOhbHliYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhem9rYXQgYXogb3BlcsOhdG9yb2thdCwgYW1lbHllayBraXbDoWxhc3p0aGF0w7NrIGEg4oCeVMOpbnlsZWdlcyBrZXpkw6lzaSBpZMWR4oCdIGF0dHJpYsO6dHVtbsOhbCBheiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IG9zenTDoWx5YmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDYXRlZ29yeUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6b2thdCBheiBvcGVyw6F0b3Jva2F0LCBhbWVseWVrIGtpdsOhbGFzenRoYXTDs2sgYSDigJ5LYXRlZ8OzcmlhLWF6b25vc8OtdMOz4oCdIGF0dHJpYsO6dHVtbsOhbCBheiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IG9zenTDoWx5YmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VCdWlsZGVySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXpva2F0IGF6IG9wZXLDoXRvcm9rYXQsIGFtZWx5ZWsga2l2w6FsYXN6dGhhdMOzayBhIOKAnlbDoWx0b3rDoXPDtnNzemXDoWxsw610w7MtYXpvbm9zw610w7PigJ0gYXR0cmliw7p0dW1uw6FsIGF6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgb3N6dMOhbHliYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZU1hbmFnZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhem9rYXQgYXogb3BlcsOhdG9yb2thdCwgYW1lbHllayBraXbDoWxhc3p0aGF0w7NrIGEg4oCeVsOhbHRvesOhc21lbmVkenNlci1hem9ub3PDrXTDs+KAnSBhdHRyaWLDunR1bW7DoWwgYXogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCBvc3p0w6FseWJhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlU3RhdGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhem9rYXQgYXogb3BlcsOhdG9yb2thdCwgYW1lbHllayBraXbDoWxhc3p0aGF0w7NrIGEg4oCeVsOhbHRvesOhc8OhbGxhcG90LWF6b25vc8OtdMOz4oCdIGF0dHJpYsO6dHVtbsOhbCBheiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IG9zenTDoWx5YmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhem9rYXQgYXogb3BlcsOhdG9yb2thdCwgYW1lbHllayBraXbDoWxhc3p0aGF0w7NrIGEg4oCeVsOhbHRvesOhc2PDrW3igJ0gYXR0cmliw7p0dW1uw6FsIGF6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgb3N6dMOhbHliYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIER5bmFtaWNGaWVsZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhem9rYXQgYXogb3BlcsOhdG9yb2thdCwgYW1lbHllayBraXbDoWxhc3p0aGF0w7NrIGEg4oCeRGluYW1pa3VzIG1lesWR4oCdIGF0dHJpYsO6dHVtbsOhbCBheiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IG9zenTDoWx5YmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBJbXBhY3RJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhem9rYXQgYXogb3BlcsOhdG9yb2thdCwgYW1lbHllayBraXbDoWxhc3p0aGF0w7NrIGEg4oCeSGF0w6FzYXpvbm9zw610w7PigJ0gYXR0cmliw7p0dW1uw6FsIGF6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgb3N6dMOhbHliYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFZmZvcnQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXpva2F0IGF6IG9wZXLDoXRvcm9rYXQsIGFtZWx5ZWsga2l2w6FsYXN6dGhhdMOzayBhIOKAnlRlcnZlemV0dCByw6Fmb3Jkw610w6Fz4oCdIGF0dHJpYsO6dHVtbsOhbCBheiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IG9zenTDoWx5YmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhem9rYXQgYXogb3BlcsOhdG9yb2thdCwgYW1lbHllayBraXbDoWxhc3p0aGF0w7NrIGEg4oCeVGVydmV6ZXR0IGJlZmVqZXrDqXNpIGlkxZHigJ0gYXR0cmliw7p0dW1uw6FsIGF6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgb3N6dMOhbHliYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXpva2F0IGF6IG9wZXLDoXRvcm9rYXQsIGFtZWx5ZWsga2l2w6FsYXN6dGhhdMOzayBhIOKAnlRlcnZlemV0dCBrZXpkw6lzaSBpZMWR4oCdIGF0dHJpYsO6dHVtbsOhbCBheiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IG9zenTDoWx5YmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQcmlvcml0eUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6b2thdCBheiBvcGVyw6F0b3Jva2F0LCBhbWVseWVrIGtpdsOhbGFzenRoYXTDs2sgYSDigJ5Qcmlvcml0w6FzLWF6b25vc8OtdMOz4oCdIGF0dHJpYsO6dHVtbsOhbCBheiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IG9zenTDoWx5YmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBSZXF1ZXN0ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6b2thdCBheiBvcGVyw6F0b3Jva2F0LCBhbWVseWVrIGtpdsOhbGFzenRoYXTDs2sgYSDigJ5Lw6lydCBpZMWR4oCdIGF0dHJpYsO6dHVtbsOhbCBheiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IG9zenTDoWx5YmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJBZ2VudElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6b2thdCBheiBvcGVyw6F0b3Jva2F0LCBhbWVseWVrIGtpdsOhbGFzenRoYXTDs2sgYSDigJ5NdW5rYW1lZ3JlbmRlbMOpcyDDvGd5aW50w6l6xZEtYXpvbm9zw610w7PigJ0gYXR0cmliw7p0dW1uw6FsIGF6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgb3N6dMOhbHliYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlck51bWJlciBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhem9rYXQgYXogb3BlcsOhdG9yb2thdCwgYW1lbHllayBraXbDoWxhc3p0aGF0w7NrIGEg4oCeTXVua2FtZWdyZW5kZWzDqXMtc3rDoW3igJ0gYXR0cmliw7p0dW1uw6FsIGF6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgb3N6dMOhbHliYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXpva2F0IGF6IG9wZXLDoXRvcm9rYXQsIGFtZWx5ZWsga2l2w6FsYXN6dGhhdMOzayBhIOKAnk11bmthbWVncmVuZGVsw6lzw6FsbGFwb3QtYXpvbm9zw610w7PigJ0gYXR0cmliw7p0dW1uw6FsIGF6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQgb3N6dMOhbHliYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclRpdGxlIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6b2thdCBheiBvcGVyw6F0b3Jva2F0LCBhbWVseWVrIGtpdsOhbGFzenRoYXTDs2sgYSDigJ5NdW5rYW1lZ3JlbmRlbMOpcy1jw61t4oCdIGF0dHJpYsO6dHVtbsOhbCBheiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IG9zenTDoWx5YmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUeXBlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXpva2F0IGF6IG9wZXLDoXRvcm9rYXQsIGFtZWx5ZWsga2l2w6FsYXN6dGhhdMOzayBhIOKAnk11bmthbWVncmVuZGVsw6lzdMOtcHVzLWF6b25vc8OtdMOz4oCdIGF0dHJpYsO6dHVtbsOhbCBheiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IG9zenTDoWx5YmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwZXJpb2QgKGluIHllYXJzKSwgaW4gd2hpY2ggc3RhcnQgYW5kIGVuZCB0aW1lcyBjYW4gYmUgc2VsZWN0ZWQuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphICjDqXZla2JlbikgYXp0IGF6IGlkxZFzemFrb3QsIGFtZWx5YmVuIGEga2V6ZMOpc2kgw6lzIGJlZmVqZXrDqXNpIGlkxZFrIGtpdsOhbGFzenRoYXTDs2suJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGF0dHJpYnV0ZXMgb2YgYSB3b3Jrb3JkZXIgaW4gdGhlIHRvb2x0aXAgb2YgdGhlIHdvcmtvcmRlciBncmFwaCBpbiB0aGUgY2hhbmdlIHpvb20uIFRvIHNob3cgd29ya29yZGVyIGR5bmFtaWMgZmllbGRzIGluIHRoZSB0b29sdGlwLCB0aGV5IG11c3QgYmUgc3BlY2lmaWVkIGxpa2UgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTEsIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUyLCBldGMuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGVneSBtdW5rYW1lZ3JlbmRlbMOpcyBtZWdqZWxlbsOtdGV0dCBhdHRyaWLDunR1bWFpdCBhIHbDoWx0b3rDoXNuYWd5w610w6FzYmFuIGzDqXbFkSBtdW5rYW1lZ3JlbmRlbMOpcy1ncmFmaWtvbiBidWJvcsOpa3PDumfDs2rDoWJhbi4gQWhob3osIGhvZ3kgYSBtdW5rYW1lZ3JlbmRlbMOpcyBkaW5hbWlrdXMgbWV6xZFpIG1lZ2plbGVuamVuZWsgYSBidWJvcsOpa3PDumfDs2JhbiwgbWVnIGtlbGwgYWRuaSBhem9rYXQgYSBrw7Z2ZXRrZXrFkWvDqXBwZW46IER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUxLCBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMiwgc3RiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhIG1lZ2plbGVuw610ZXR0IG9zemxvcG9rYXQgYSB2w6FsdG96w6FzIFBTQSDDoXR0ZWtpbnTFkWrDqWJlbi4gRW5uZWsgYSBiZcOhbGzDrXTDoXNuYWsgbmluY3MgaGF0w6FzYSBheiBvc3psb3AgaGVseXpldMOpcmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYSBtZWdqZWxlbsOtdGV0dCBvc3psb3Bva2F0IGEgdsOhbHRvenRhdMOhc2kgw7x0ZW10ZXJ2IMOhdHRla2ludMWRasOpYmVuLiBFbm5layBhIGJlw6FsbMOtdMOhc25hayBuaW5jcyBoYXTDoXNhIGF6IG9zemxvcCBoZWx5emV0w6lyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGEgbWVnamVsZW7DrXRldHQgb3N6bG9wb2thdCBhIHNhasOhdCBDQUIgw6F0dGVraW50xZFqw6liZW4uIEVubmVrIGEgYmXDoWxsw610w6FzbmFrIG5pbmNzIGhhdMOhc2EgYXogb3N6bG9wIGhlbHl6ZXTDqXJlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGEgbWVnamVsZW7DrXRldHQgb3N6bG9wb2thdCBhIHNhasOhdCB2w6FsdG96w6Fzb2sgw6F0dGVraW50xZFqw6liZW4uIEVubmVrIGEgYmXDoWxsw610w6FzbmFrIG5pbmNzIGhhdMOhc2EgYXogb3N6bG9wIGhlbHl6ZXTDqXJlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGEgbWVnamVsZW7DrXRldHQgb3N6bG9wb2thdCBhIHNhasOhdCBtdW5rYW1lZ3JlbmRlbMOpc2VrIMOhdHRla2ludMWRasOpYmVuLiBFbm5layBhIGJlw6FsbMOtdMOhc25hayBuaW5jcyBoYXTDoXNhIGF6IG9zemxvcCBoZWx5emV0w6lyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgUElSIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhIG1lZ2plbGVuw610ZXR0IG9zemxvcG9rYXQgYSBQSVIgw6F0dGVraW50xZFqw6liZW4uIEVubmVrIGEgYmXDoWxsw610w6FzbmFrIG5pbmNzIGhhdMOhc2EgYXogb3N6bG9wIGhlbHl6ZXTDqXJlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYSBtZWdqZWxlbsOtdGV0dCBvc3psb3Bva2F0IGEgdsOhbHRvesOhc21lbmVkenNlciDDoXR0ZWtpbnTFkWrDqWJlbi4gRW5uZWsgYSBiZcOhbGzDrXTDoXNuYWsgbmluY3MgaGF0w6FzYSBheiBvc3psb3AgaGVseXpldMOpcmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYSBtZWdqZWxlbsOtdGV0dCBvc3psb3Bva2F0IGEgdsOhbHRvesOhcyDDoXR0ZWtpbnTFkWrDqWJlbi4gRW5uZWsgYSBiZcOhbGzDrXTDoXNuYWsgbmluY3MgaGF0w6FzYSBheiBvc3psb3AgaGVseXpldMOpcmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGEgbWVnamVsZW7DrXRldHQgb3N6bG9wb2thdCBhIHbDoWx0b3rDoXNrZXJlc8WRYmVuLiBFbm5layBhIGJlw6FsbMOtdMOhc25hayBuaW5jcyBoYXTDoXNhIGF6IG9zemxvcCBoZWx5emV0w6lyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhIG1lZ2plbGVuw610ZXR0IG9zemxvcG9rYXQgYXogw7xneWbDqWwgdsOhbHRvenRhdMOhc2kgw7x0ZW10ZXJ2IMOhdHRla2ludMWRasOpYmVuLiBFbm5layBhIGJlw6FsbMOtdMOhc25hayBuaW5jcyBoYXTDoXNhIGF6IG9zemxvcCBoZWx5emV0w6lyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGEgbWVnamVsZW7DrXRldHQgb3N6bG9wb2thdCBhIHNhYmxvbiDDoXR0ZWtpbnTFkWrDqWJlbi4gRW5uZWsgYSBiZcOhbGzDrXTDoXNuYWsgbmluY3MgaGF0w6FzYSBheiBvc3psb3AgaGVseXpldMOpcmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNpZ25hbHMgZm9yIGVhY2ggSVRTTUNoYW5nZSBzdGF0ZS4nfSA9ICdNZWdoYXTDoXJvenphIGEgc3ppZ27DoWxva2F0IG1pbmRlbiBlZ3llcyBJVFNNQ2hhbmdlIMOhbGxhcG90aG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0ZW1wbGF0ZSB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXpva2F0IGEgc2FibG9udMOtcHVzb2thdCwgYW1lbHllayBzesWxcsWRa2vDqW50IGxlc3puZWsgaGFzem7DoWx2YSBhIHNhYmxvbiDDoXR0ZWtpbnTFkWrDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGF6b2thdCBhIG11bmthbWVncmVuZGVsw6lzLcOhbGxhcG90b2thdCwgYW1lbHllayBzesWxcsWRa2vDqW50IGxlc3puZWsgaGFzem7DoWx2YSBhIHNhasOhdCBtdW5rYW1lZ3JlbmRlbMOpc2VrIMOhdHRla2ludMWRasOpYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXpva2F0IGEgbXVua2FtZWdyZW5kZWzDqXMtw6FsbGFwb3Rva2F0LCBhbWVseWVrIHN6xbFyxZFra8OpbnQgbGVzem5layBoYXN6bsOhbHZhIGEgUElSIMOhdHRla2ludMWRasOpYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc2hvdyB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBhem9rYXQgYSBtdW5rYW1lZ3JlbmRlbMOpcy10w61wdXNva2F0LCBhbWVseWVrIGEgUElSIMOhdHRla2ludMWRIG1lZ2plbGVuw610w6lzaGV6IGxlc3puZWsgaGFzem7DoWx2YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGV0aGVyIG5vdGlmaWNhdGlvbnMgc2hvdWxkIGJlIHNlbnQuJ30gPSAnTWVnaGF0w6Fyb3p6YSwgaG9neSBheiDDqXJ0ZXPDrXTDqXNla2V0IGVsIGtlbGwtZSBrw7xsZGVuaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIGEgY2hhbmdlLid9ID0gJ0VneSB2w6FsdG96w6FzIHTDtnJsw6lzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoZSBjaGFuZ2UuJ30gPSAnQSB2w6FsdG96w6FzIHTDtnJsw6lzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnQSBtdW5rYW1lZ3JlbmRlbMOpcyB0w7ZybMOpc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMgb2YgYSBjaGFuZ2UgaGlzdG9yeSBlbnRyeS4nfSA9ICdFZ3kgdsOhbHRvesOhc3TDtnJ0w6luZXQtYmVqZWd5esOpcyByw6lzemxldGVpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIGFuIGFnZW50IGNhbiBleGNoYW5nZSB0aGUgWC1heGlzIG9mIGEgc3RhdCBpZiBoZSBnZW5lcmF0ZXMgb25lLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSwgaG9neSBlZ3kgw7xneWludMOpesWRIGtpY3NlcsOpbGhldGktZSBlZ3kgc3RhdGlzenRpa2EgWC10ZW5nZWx5w6l0LCBoYSBsw6l0cmVob3pvdHQgZWd5ZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgZG9uZSBmb3IgY29uZmlnIGl0ZW0gY2xhc3Nlcy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEsIGhvZ3kgYSBrw7Z6w7ZzIHN0YXRpc3p0aWvDoWsgbW9kdWwgZWzFkcOhbGzDrXRoYXQtZSBzdGF0aXN6dGlrw6FrYXQgYXogZWx2w6lnemV0dCB2w6FsdG96w6Fzb2tyw7NsIGEga29uZmlndXLDoWNpw7NlbGVtIG9zenTDoWx5b2tuw6FsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyBjaGFuZ2Ugc3RhdGUgdXBkYXRlcyB3aXRoaW4gYSB0aW1lcGVyaW9kLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSwgaG9neSBhIGvDtnrDtnMgc3RhdGlzenRpa8OhayBtb2R1bCBlbMWRw6FsbMOtdGhhdC1lIHN0YXRpc3p0aWvDoWthdCBlZ3kgaWTFkXN6YWtvbiBiZWzDvGxpIHbDoWx0b3rDoXPDoWxsYXBvdCBmcmlzc8OtdMOpc2VrcmUgdm9uYXRrb3rDsyB2w6FsdG96w6Fzb2tyw7NsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyB0aGUgcmVsYXRpb24gYmV0d2VlbiBjaGFuZ2VzIGFuZCBpbmNpZGVudCB0aWNrZXRzLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSwgaG9neSBhIGvDtnrDtnMgc3RhdGlzenRpa8OhayBtb2R1bCBlbMWRw6FsbMOtdGhhdC1lIHN0YXRpc3p0aWvDoWthdCBhIHbDoWx0b3rDoXNvayDDqXMgaW5jaWRlbnNqZWd5ZWsga8O2esO2dHRpIGthcGNzb2xhdHJhIHZvbmF0a296w7MgdsOhbHRvesOhc29rcsOzbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcy4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEsIGhvZ3kgYSBrw7Z6w7ZzIHN0YXRpc3p0aWvDoWsgbW9kdWwgZWzFkcOhbGzDrXRoYXQtZSBzdGF0aXN6dGlrw6FrYXQgYSB2w6FsdG96w6Fzb2tyw7NsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCB0aGUgbnVtYmVyIG9mIFJmYyB0aWNrZXRzIGEgcmVxdWVzdGVyIGNyZWF0ZWQuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphLCBob2d5IGEga8O2esO2cyBzdGF0aXN6dGlrw6FrIG1vZHVsIGVsxZHDoWxsw610aGF0LWUgc3RhdGlzenRpa8Oha2F0IGVneSBrw6lyxZEgw6FsdGFsIGzDqXRyZWhvem90dCB2w6FsdG96w6Fza8OpcmVsZW0gamVneWVrIHN6w6Ftw6Fyw7NsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyAoZm9yIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMpIHNob3duIGluIHRoZSBjaGFuZ2UgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnQXogw7xneWludMOpesWRaSBmZWzDvGxldCB2w6FsdG96w6FzIG55b210YXTDoXMga8OpcGVybnnFkWrDqW4gbWVnamVsZW7DrXRldHQgZGluYW1pa3VzIG1lesWRayAodsOhbHRvesOhc29raG96IMOpcyBtdW5rYW1lZ3JlbmRlbMOpc2VraGV6KS4gTGVoZXRzw6lnZXMgYmXDoWxsw610w6Fzb2s6IDAgPSBMZXRpbHR2YSwgMSA9IEVuZ2Vkw6lseWV6dmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnQXogw7xneWludMOpesWRaSBmZWzDvGxldCB2w6FsdG96w6FzIGhvenrDoWFkw6FzIGvDqXBlcm55xZFqw6luIG1lZ2plbGVuw610ZXR0IGRpbmFtaWt1cyBtZXrFkWsuIExlaGV0c8OpZ2VzIGJlw6FsbMOtdMOhc29rOiAwID0gTGV0aWx0dmEsIDEgPSBFbmdlZMOpbHllenZlLCAyID0gRW5nZWTDqWx5ZXp2ZSDDqXMga8O2dGVsZXrFkS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnQXogw7xneWludMOpesWRaSBmZWzDvGxldCB2w6FsdG96w6FzIHN6ZXJrZXN6dMOpcyBrw6lwZXJuecWRasOpbiBtZWdqZWxlbsOtdGV0dCBkaW5hbWlrdXMgbWV6xZFrLiBMZWhldHPDqWdlcyBiZcOhbGzDrXTDoXNvazogMCA9IExldGlsdHZhLCAxID0gRW5nZWTDqWx5ZXp2ZSwgMiA9IEVuZ2Vkw6lseWV6dmUgw6lzIGvDtnRlbGV6xZEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2Ugc2VhcmNoIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ0F6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQgdsOhbHRvesOhcyBrZXJlc8OpcyBrw6lwZXJuecWRasOpbiBtZWdqZWxlbsOtdGV0dCBkaW5hbWlrdXMgbWV6xZFrLiBMZWhldHPDqWdlcyBiZcOhbGzDrXTDoXNvazogMCA9IExldGlsdHZhLCAxID0gRW5nZWTDqWx5ZXp2ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ0F6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQgdsOhbHRvesOhcyBuYWd5w610w6FzIGvDqXBlcm55xZFqw6luIG1lZ2plbGVuw610ZXR0IGRpbmFtaWt1cyBtZXrFkWsuIExlaGV0c8OpZ2VzIGJlw6FsbMOtdMOhc29rOiAwID0gTGV0aWx0dmEsIDEgPSBFbmdlZMOpbHllenZlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ0F6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQgbXVua2FtZWdyZW5kZWzDqXMgaG96esOhYWTDoXMga8OpcGVybnnFkWrDqW4gbWVnamVsZW7DrXRldHQgZGluYW1pa3VzIG1lesWRay4gTGVoZXRzw6lnZXMgYmXDoWxsw610w6Fzb2s6IDAgPSBMZXRpbHR2YSwgMSA9IEVuZ2Vkw6lseWV6dmUsIDIgPSBFbmdlZMOpbHllenZlIMOpcyBrw7Z0ZWxlesWRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdBeiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0IG11bmthbWVncmVuZGVsw6lzIHN6ZXJrZXN6dMOpcyBrw6lwZXJuecWRasOpbiBtZWdqZWxlbsOtdGV0dCBkaW5hbWlrdXMgbWV6xZFrLiBMZWhldHPDqWdlcyBiZcOhbGzDrXTDoXNvazogMCA9IExldGlsdHZhLCAxID0gRW5nZWTDqWx5ZXp2ZSwgMiA9IEVuZ2Vkw6lseWV6dmUgw6lzIGvDtnRlbGV6xZEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgcmVwb3J0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnQXogw7xneWludMOpesWRaSBmZWzDvGxldCBtdW5rYW1lZ3JlbmRlbMOpcyBqZWxlbnTDqXMga8OpcGVybnnFkWrDqW4gbWVnamVsZW7DrXRldHQgZGluYW1pa3VzIG1lesWRay4gTGVoZXRzw6lnZXMgYmXDoWxsw610w6Fzb2s6IDAgPSBMZXRpbHR2YSwgMSA9IEVuZ2Vkw6lseWV6dmUsIDIgPSBFbmdlZMOpbHllenZlIMOpcyBrw7Z0ZWxlesWRLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnQXogw7xneWludMOpesWRaSBmZWzDvGxldCBtdW5rYW1lZ3JlbmRlbMOpcyBuYWd5w610w6FzIGvDqXBlcm55xZFqw6luIG1lZ2plbGVuw610ZXR0IGRpbmFtaWt1cyBtZXrFkWsuIExlaGV0c8OpZ2VzIGJlw6FsbMOtdMOhc29rOiAwID0gTGV0aWx0dmEsIDEgPSBFbmdlZMOpbHllenZlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljRmllbGQgZXZlbnQgbW9kdWxlIHRvIGhhbmRsZSB0aGUgdXBkYXRlIG9mIGNvbmRpdGlvbnMgaWYgZHluYW1pYyBmaWVsZHMgYXJlIGFkZGVkLCB1cGRhdGVkIG9yIGRlbGV0ZWQuJ30gPQogICAgICAgICdEaW5hbWlrdXMgbWV6xZEgZXNlbcOpbnltb2R1bCBhIGZlbHTDqXRlbGVrIGZyaXNzw610w6lzw6luZWsga2V6ZWzDqXPDqWhleiwgaGEgZGluYW1pa3VzIG1lesWRayBrZXLDvGxuZWsgaG96esOhYWTDoXNyYSwgZnJpc3PDrXTDqXNyZSB2YWd5IHTDtnJsw6lzcmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBjaGFuZ2UuJ30gPSAnRWd5IHbDoWx0b3rDoXMgc3plcmtlc3p0w6lzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY2hhbmdlLid9ID0gJ0EgdsOhbHRvesOhcyBzemVya2VzenTDqXNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSBjb25kaXRpb25zIG9mIHRoZSBjaGFuZ2UuJ30gPSAnQSB2w6FsdG96w6FzIGZlbHTDqXRlbGVpbmVrIHN6ZXJrZXN6dMOpc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIHdvcmtvcmRlci4nfSA9ICdBIG11bmthbWVncmVuZGVsw6lzIHN6ZXJrZXN6dMOpc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcndhcmQgc2NoZWR1bGUgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb3ZlciBhcHByb3ZlZCBjaGFuZ2VzLid9ID0KICAgICAgICAnVsOhbHRvesOhc29rIGVsxZFqZWd5esOpc2kgdGVydmUuIEEgasOzdsOhaGFneW90dCB2w6FsdG96w6Fzb2sgw6F0dGVraW50w6lzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBab29tJ30gPSAnRWzFkXptw6lueW5hZ3nDrXTDoXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ0FCIFRlbXBsYXRlcy4nfSA9ICdJVFNNIHbDoWx0b3rDoXMgQ0FCIHNhYmxvbm9rLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gRWRpdC4nfSA9ICdJVFNNIHbDoWx0b3rDoXNmZWx0w6l0ZWwgc3plcmtlc3p0w6lzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gT3ZlcnZpZXcuJ30gPSAnSVRTTSB2w6FsdG96w6FzZmVsdMOpdGVsIMOhdHRla2ludMOpcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBOb3RpZmljYXRpb25zJ30gPSAnSVRTTSB2w6FsdG96w6FzbWVuZWR6c21lbnQgw6lydGVzw610w6lzZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlciBPdmVydmlldy4nfSA9ICdJVFNNIHbDoWx0b3rDoXNtZW5lZHpzZXIgw6F0dGVraW50w6lzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBQSVIgT3ZlcnZpZXcuJ30gPSAnSVRTTSB2w6FsdG96w6FzIFBJUiDDoXR0ZWtpbnTDqXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIG5vdGlmaWNhdGlvbiBydWxlcyd9ID0gJ0lUU00gdsOhbHRvesOhcyDDqXJ0ZXPDrXTDqXNpIHN6YWLDoWx5b2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VzJ30gPSAnSVRTTSB2w6FsdG96w6Fzb2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeUNBQiBPdmVydmlldy4nfSA9ICdJVFNNIHNhasOhdCBDQUIgw6F0dGVraW50w6lzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q2hhbmdlcyBPdmVydmlldy4nfSA9ICdJVFNNIHNhasOhdCB2w6FsdG96w6Fzb2sgw6F0dGVraW50w6lzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15V29ya29yZGVycyBPdmVydmlldy4nfSA9ICdJVFNNIHNhasOhdCBtdW5rYW1lZ3JlbmRlbMOpc2VrIMOhdHRla2ludMOpcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBEZWxldGUuJ30gPSAnSVRTTSBzYWJsb24gdMO2cmzDqXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDQUIuJ30gPSAnSVRTTSBzYWJsb24gc3plcmtlc3p0w6lzIENBQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0IENvbnRlbnQuJ30gPSAnSVRTTSBzYWJsb24gc3plcmtlc3p0w6lzIHRhcnRhbG9tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQuJ30gPSAnSVRTTSBzYWJsb24gc3plcmtlc3p0w6lzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIE92ZXJ2aWV3Lid9ID0gJ0lUU00gc2FibG9uIMOhdHRla2ludMOpcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBjbGVhbnMgdXAgY29uZGl0aW9ucy4nfSA9ICdJVFNNIGVzZW3DqW55bW9kdWwsIGFtZWx5IHTDtnJsaSBhIGZlbHTDqXRlbGVrZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgZGVsZXRlcyB0aGUgY2FjaGUgZm9yIGEgdG9vbGJhci4nfSA9ICdJVFNNIGVzZW3DqW55bW9kdWwsIGFtZWx5IHTDtnJsaSBhIGd5b3Jzw610w7N0w6FyYXQgZWd5IGVzemvDtnp0w6FybsOhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJ30gPSAnSVRTTSBlc2Vtw6lueW1vZHVsLCBhbWVseSB0w7ZybGkgYSB2w6FsdG96w6Fzb2sgZWzFkXptw6lueWVpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBtYXRjaGVzIGNvbmRpdGlvbnMgYW5kIGV4ZWN1dGVzIGFjdGlvbnMuJ30gPQogICAgICAgICdJVFNNIGVzZW3DqW55bW9kdWwsIGFtZWx5IGZlbHTDqXRlbGVrZXQgaWxsZXN6dCDDqXMgbcWxdmVsZXRla2V0IGhhanQgdsOpZ3JlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHNlbmRzIG5vdGlmaWNhdGlvbnMuJ30gPSAnSVRTTSBlc2Vtw6lueW1vZHVsLCBhbWVseSDDqXJ0ZXPDrXTDqXNla2V0IGvDvGxkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICdJVFNNIGVzZW3DqW55bW9kdWwsIGFtZWx5IGZyaXNzw610aSBhIHbDoWx0b3rDoXNvayBlbMWRem3DqW55ZWl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY29uZGl0aW9ucy4nfSA9ICdJVFNNIGVzZW3DqW55bW9kdWwsIGFtZWx5IGZyaXNzw610aSBhIGZlbHTDqXRlbGVrIGVsxZF6bcOpbnllaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiB3b3Jrb3JkZXJzLid9ID0gJ0lUU00gZXNlbcOpbnltb2R1bCwgYW1lbHkgZnJpc3PDrXRpIGEgbXVua2FtZWdyZW5kZWzDqXNlayBlbMWRem3DqW55ZWl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byByZWNhbGN1bGF0ZSB0aGUgd29ya29yZGVyIG51bWJlcnMuJ30gPSAnSVRTTSBlc2Vtw6lueW1vZHVsIGEgbXVua2FtZWdyZW5kZWzDqXMgc3rDoW1haW5hayDDumpyYXN6w6Ftb2zDoXPDoWhvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gc2V0IHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBvZiB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAnSVRTTSBlc2Vtw6lueW1vZHVsIGEgbXVua2FtZWdyZW5kZWzDqXNlayB0w6lueWxlZ2VzIGtlemTDqXNpIMOpcyBiZWZlamV6w6lzaSBpZGVqw6luZWsgYmXDoWxsw610w6Fzw6Fob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01DaGFuZ2UnfSA9ICdJVFNNIHbDoWx0b3rDoXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTVdvcmtPcmRlcid9ID0gJ0lUU00gbXVua2FtZWdyZW5kZWzDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZnJlcXVlbmN5IGlzIFwncmVndWxhcmx5XCcsIHlvdSBjYW4gY29uZmlndXJlIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCAoZXZlcnkgWCBob3VycykuJ30gPQogICAgICAgICdIYSBhIGd5YWtvcmlzw6FnIOKAnnJlbmRzemVyZXNlbuKAnSwgYWtrb3IgYmXDoWxsw610aGF0amEsIGhvZ3kgYXogw6lydGVzw610w6lzZWsgbWlseWVuIGd5YWtyYW4gbGVneWVuZWsgZWxrw7xsZHZlIChtaW5kZW4gWC4gw7Nyw6FiYW4pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoZSBjaGFuZ2UuJ30gPSAnTcOhc2lrIG9iamVrdHVtIMO2c3N6ZWthcGNzb2zDoXNhIGEgdsOhbHRvesOhc3NhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgd29ya29yZGVyLid9ID0gJ03DoXNpayBvYmpla3R1bSDDtnNzemVrYXBjc29sw6FzYSBhIG11bmthbWVncmVuZGVsw6lzc2VsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2dmaWxlIGZvciB0aGUgSVRTTSBjaGFuZ2UgY291bnRlci4gVGhpcyBmaWxlIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjaGFuZ2UgbnVtYmVycy4nfSA9CiAgICAgICAgJ05hcGzDs2bDoWpsIGF6IElUU00gdsOhbHRvesOhc3N6w6FtbMOhbMOzaG96LiBFenQgYSBmw6FqbHQgYSB2w6FsdG96w6Fzc3rDoW1vayBsw6l0cmVob3rDoXPDoWhveiBoYXN6bsOhbGrDoWsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvb2t1cCBvZiBDQUIgbWVtYmVycyBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAnQ0FCLXRhZ29rIGtpa2VyZXPDqXNlIGF6IGF1dG9tYXRpa3VzIGtpZWfDqXN6w610w6lzaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rdXAgb2YgYWdlbnRzLCB1c2VkIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICfDnGd5aW50w6l6xZFrIGtpa2VyZXPDqXNlIGF6IGF1dG9tYXRpa3VzIGtpZWfDqXN6w610w6lzIGhhc3puw6FsYXTDoWhvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIGlmIFdvcmtPcmRlckFkZCBvciBXb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUgc2hvdWxkIGJlIHBlcm1pdHRlZC4nfSA9CiAgICAgICAgJ0VneSBtb2R1bCBhbm5hayBlbGxlbsWRcnrDqXPDqWhleiwgaG9neSBhIOKAnk11bmthbWVncmVuZGVsw6lzIGhvenrDoWFkw6FzYeKAnSB2YWd5IGEg4oCeTXVua2FtZWdyZW5kZWzDqXMgaG96esOhYWTDoXNhIHNhYmxvbmLDs2zigJ0gb3N6dMOhbHlva2F0IGVuZ2Vkw6lseWV6bmkga2VsbC1lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIENBQiBtZW1iZXJzLid9ID0gJ0VneSBtb2R1bCBhIENBQi10YWdvayBlbGxlbsWRcnrDqXPDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBhZ2VudC4nfSA9ICdFZ3kgbW9kdWwgYXogw7xneWludMOpesWRIGVsbGVuxZFyesOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGNoYW5nZSBidWlsZGVyLid9ID0gJ0VneSBtb2R1bCBhIHbDoWx0b3rDoXMtw7Zzc3plw6FsbMOtdMOzIGVsbGVuxZFyesOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGNoYW5nZSBtYW5hZ2VyLid9ID0gJ0VneSBtb2R1bCBhIHbDoWx0b3rDoXNtZW5lZHpzZXIgZWxsZW7FkXJ6w6lzw6loZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgd29ya29yZGVyIGFnZW50Lid9ID0gJ0VneSBtb2R1bCBhIG11bmthbWVncmVuZGVsw6lzIMO8Z3lpbnTDqXrFkWrDqW5layBlbGxlbsWRcnrDqXPDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgbm8gd29ya29yZGVyIGFnZW50IGlzIHNldC4nfSA9ICdFZ3kgbW9kdWwgYW5uYWsgZWxsZW7FkXJ6w6lzw6loZXosIGhvZ3kgdmFuLWUgbXVua2FtZWdyZW5kZWzDqXMtw7xneWludMOpesWRIGJlw6FsbMOtdHZhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgd2hldGhlciB0aGUgYWdlbnQgaXMgY29udGFpbmVkIGluIHRoZSBjb25maWd1cmVkIGxpc3QuJ30gPQogICAgICAgICdFZ3kgbW9kdWwgYW5uYWsgZWxsZW7FkXJ6w6lzw6loZXosIGhvZ3kgYXogw7xneWludMOpesWRdCB0YXJ0YWxtYXp6YS1lIGEgYmXDoWxsw610w6FzaSBsaXN0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYSBsaW5rIHRvIGNyZWF0ZSBhIGNoYW5nZSBmcm9tIHRoaXMgdGlja2V0LiBUaGUgdGlja2V0IHdpbGwgYmUgYXV0b21hdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgbmV3IGNoYW5nZS4nfSA9CiAgICAgICAgJ0VneSBtb2R1bCBlZ3kgaGl2YXRrb3rDoXMgbWVnamVsZW7DrXTDqXPDqWhleiwgYW1lbHkgZWd5IHbDoWx0b3rDoXMgbMOpdHJlaG96w6Fzw6FyYSBtdXRhdCBlYmLFkWwgYSBqZWd5YsWRbC4gQSBqZWd5IGF1dG9tYXRpa3VzYW4gw7Zzc3plIGxlc3oga2FwY3NvbHZhIGF6IMO6aiB2w6FsdG96w6Fzc2FsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIFRpbWUgU2xvdC4nfSA9ICdJZMWRcsOpcyDDoXRoZWx5ZXrDqXNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIGFsbCB3b3Jrb3JkZXJzIGluIHRpbWUuJ30gPSAnTWluZGVuIG11bmthbWVncmVuZGVsw6lzIMOhdGhlbHllesOpc2UgYXogaWTFkWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IChmcm9tIHRlbXBsYXRlKSd9ID0gJ8OaaiAoc2FibG9uYsOzbCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSB1c2VycyBvZiB0aGVzZSBncm91cHMgaGF2ZSB0aGUgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRpY2tldCB0eXBlcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiIGlmIHRoZSBmZWF0dXJlICJUaWNrZXQ6OkFjbDo6TW9kdWxlIyMjMjAwLVRpY2tldDo6QWNsOjpNb2R1bGUiIGlzIGVuYWJsZWQuJ30gPQogICAgICAgICdDc2FrIGV6ZW4gY3NvcG9ydG9rIGZlbGhhc3puw6Fsw7NpbmFrIHZhbiBqb2dvc3VsdHPDoWdhIGF6IOKAnklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlc+KAnSBiZcOhbGzDrXTDoXNiYW4gbWVnaGF0w6Fyb3pvdHQgamVneXTDrXB1c29rIGhhc3puw6FsYXTDoXJhLCBoYSBhIOKAnlRpY2tldDo6QWNsOjpNb2R1bGUjIyMyMDAtVGlja2V0OjpBY2w6Ok1vZHVsZeKAnSBzem9sZ8OhbHRhdMOhcyBlbmdlZMOpbHllenZlIHZhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb3ZlciBhbGwgQ2hhbmdlcy4nfSA9ICdBeiDDtnNzemVzIHbDoWx0b3rDoXMgw6F0dGVraW50w6lzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSJ30gPSAnUElSJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpJ30gPSAnUElSIChtZWd2YWzDs3PDrXTDoXMgdXTDoW5pIHZpenNnw6FsYXQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BTQSd9ID0gJ1BTQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgVXNlckNyZWF0ZVdvcmtPcmRlck5leHRNYXNrIG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdBIFVzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFzayBvYmpla3R1bSBwYXJhbcOpdGVyZWkgYXogw7xneWludMOpesWRaSBmZWzDvGxldCBiZcOhbGzDrXTDoXMgbsOpemV0w6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNoYW5nZXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgY2hhbmdlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnUGFyYW3DqXRlcmVrIGEga2lzIHbDoWx0b3rDoXMgw6F0dGVraW50xZEgb2xkYWxhaWhveiAoYW1lbHlla2JlbiBhIHbDoWx0b3rDoXNvayBtZWdqZWxlbm5laykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXNlbnRzIGEgbGluayBpbiB0aGUgbWVudSB0byBzaG93IHRoZSBpbnZvbHZlZCBwZXJzb25zIGluIGEgY2hhbmdlLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggY2hhbmdlIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuIGVneSB2w6FsdG96w6FzYmFuIMOpcmludGV0dCBzemVtw6lseWVrIG1lZ2plbGVuw610w6lzw6loZXogYXogaWx5ZW4gdsOhbHRvesOhcyBuYWd5w610w6FzIG7DqXpldMOpYmVuIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIGNoYW5nZS4nfSA9ICdBIHbDoWx0b3rDoXMgbnlvbXRhdMOhc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoZSB3b3Jrb3JkZXIuJ30gPSAnQSBtdW5rYW1lZ3JlbmRlbMOpcyBueW9tdGF0w6FzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5J30gPSAnVGVydmV6ZXR0IHN6b2xnw6FsdGF0w6FzZWzDqXJoZXTFkXPDqWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpJ30gPSAnVGVydmV6ZXR0IHN6b2xnw6FsdGF0w6FzZWzDqXJoZXTFkXPDqWcgKFBTQSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpIG9mIGNoYW5nZXMuIE92ZXJ2aWV3IG9mIGFwcHJvdmVkIGNoYW5nZXMgYW5kIHRoZWlyIHNlcnZpY2VzLid9ID0KICAgICAgICAnQSB2w6FsdG96w6FzIHRlcnZlemV0dCBzem9sZ8OhbHRhdMOhc2Vsw6lyaGV0xZFzw6lnZSAoUFNBKS4gQSBqw7N2w6FoYWd5b3R0IHbDoWx0b3rDoXNvayDDqXMgYXpvayBzem9sZ8OhbHRhdMOhc2FpbmFrIMOhdHRla2ludMOpc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgaW4gb3JkZXIgZm9yIGFuIGFnZW50IHRvIHRha2UgYSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGFubmFrIMOpcmRla8OpYmVuLCBob2d5IGVneSDDvGd5aW50w6l6xZEgZmVsdmVoZXNzZW4gZWd5IG11bmthbWVncmVuZGVsw6lzdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhY2Nlc3MgdGhlIG92ZXJ2aWV3IG9mIGFsbCBjaGFuZ2VzLid9ID0gJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgYXogw7Zzc3plcyB2w6FsdG96w6FzIMOhdHRla2ludMWRasOpbmVrIGhvenrDoWbDqXLDqXPDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhZGQgYSB3b3Jrb3JkZXIuJ30gPSAnQSBzesO8a3PDqWdlcyBqb2dvc3VsdHPDoWdvayBlZ3kgbXVua2FtZWdyZW5kZWzDqXMgaG96esOhYWTDoXPDoWhvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjaGFuZ2UgdGhlIHdvcmtvcmRlciBhZ2VudC4nfSA9ICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGVneSBtdW5rYW1lZ3JlbmRlbMOpcyDDvGd5aW50w6l6xZFqw6luZWsgbWVndsOhbHRvenRhdMOhc8OhaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSBjaGFuZ2UuJ30gPSAnQSBzesO8a3PDqWdlcyBqb2dvc3VsdHPDoWdvayBlZ3kgc2FibG9uIGzDqXRyZWhvesOhc8OhaG96IGVneSB2w6FsdG96w6FzYsOzbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlc1wnIENBQi4nfSA9CiAgICAgICAgJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgZWd5IHNhYmxvbiBsw6l0cmVob3rDoXPDoWhveiBhIHbDoWx0b3rDoXNvayBDQUItasOhYsOzbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgd29ya29yZGVyLid9ID0gJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgZWd5IHNhYmxvbiBsw6l0cmVob3rDoXPDoWhveiBlZ3kgbXVua2FtZWdyZW5kZWzDqXNixZFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzIGZyb20gdGVtcGxhdGVzLid9ID0gJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgdsOhbHRvesOhc29rIGzDqXRyZWhvesOhc8OhaG96IHNhYmxvbm9rYsOzbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgY2hhbmdlcy4nfSA9ICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIHbDoWx0b3rDoXNvayBsw6l0cmVob3rDoXPDoWhvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgYSB0ZW1wbGF0ZS4nfSA9ICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGVneSBzYWJsb24gdMO2cmzDqXPDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgYSB3b3Jrb3JkZXIuJ30gPSAnQSBzesO8a3PDqWdlcyBqb2dvc3VsdHPDoWdvayBlZ3kgbXVua2FtZWdyZW5kZWzDqXMgdMO2cmzDqXPDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY2hhbmdlcy4nfSA9ICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIHbDoWx0b3rDoXNvayB0w7ZybMOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgYSB0ZW1wbGF0ZS4nfSA9ICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGVneSBzYWJsb24gc3plcmtlc3p0w6lzw6loZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHdvcmtvcmRlci4nfSA9ICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGVneSBtdW5rYW1lZ3JlbmRlbMOpcyBzemVya2VzenTDqXPDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGNoYW5nZXMuJ30gPSAnQSBzesO8a3PDqWdlcyBqb2dvc3VsdHPDoWdvayB2w6FsdG96w6Fzb2sgc3plcmtlc3p0w6lzw6loZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgdsOhbHRvesOhc29rIGZlbHTDqXRlbGVpbmVrIHN6ZXJrZXN6dMOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgYSB0ZW1wbGF0ZS4nfSA9ICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGVneSBzYWJsb24gdGFydGFsbcOhbmFrIHN6ZXJrZXN6dMOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGludm9sdmVkIHBlcnNvbnMgb2YgYSBjaGFuZ2UuJ30gPQogICAgICAgICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGVneSB2w6FsdG96w6FzYmFuIMOpcmludGV0dCBzemVtw6lseWVrIHN6ZXJrZXN6dMOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIG1vdmUgY2hhbmdlcyBpbiB0aW1lLid9ID0gJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgYSB2w6FsdG96w6Fzb2sgw6F0aGVseWV6w6lzw6loZXogYXogaWTFkWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBwcmludCBhIGNoYW5nZS4nfSA9ICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGVneSB2w6FsdG96w6FzIGtpbnlvbXRhdMOhc8OhaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHJlc2V0IGNoYW5nZXMuJ30gPSAnQSBzesO8a3PDqWdlcyBqb2dvc3VsdHPDoWdvayB2w6FsdG96w6Fzb2sgdmlzc3phw6FsbMOtdMOhc8OhaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgYSB3b3Jrb3JkZXIuJ30gPSAnQSBzesO8a3PDqWdlcyBqb2dvc3VsdHPDoWdvayBlZ3kgbXVua2FtZWdyZW5kZWzDqXMgbWVndGVraW50w6lzw6loZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBjaGFuZ2VzLid9ID0gJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgdsOhbHRvesOhc29rIG1lZ3Rla2ludMOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIGEgQ0FCIG1lbWJlci4nfSA9CiAgICAgICAgJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgYXpvbiB2w6FsdG96w6Fzb2sgbGlzdMOhasOhbmFrIG1lZ3Rla2ludMOpc8OpaGV6LCBhaG9sIGEgZmVsaGFzem7DoWzDsyBlZ3kgQ0FCLXRhZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPQogICAgICAgICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGF6b24gdsOhbHRvesOhc29rIGxpc3TDoWrDoW5hayBtZWd0ZWtpbnTDqXPDqWhleiwgYWhvbCBhIGZlbGhhc3puw6Fsw7MgYSB2w6FsdG96w6FzbWVuZWR6c2VyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgb3ZlcnZpZXcgb3ZlciBhbGwgdGVtcGxhdGVzLid9ID0gJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgYXogw7Zzc3plcyBzYWJsb24gw6F0dGVraW50xZFqw6luZWsgbWVndGVraW50w6lzw6loZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgdsOhbHRvesOhc29rIGZlbHTDqXRlbGVpbmVrIG1lZ3Rla2ludMOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UuJ30gPSAnQSBzesO8a3PDqWdlcyBqb2dvc3VsdHPDoWdvayBlZ3kgdsOhbHRvesOhcyBlbMWRem3DqW55ZWluZWsgbWVndGVraW50w6lzw6loZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlci4nfSA9ICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGVneSBtdW5rYW1lZ3JlbmRlbMOpcyBlbMWRem3DqW55ZWluZWsgbWVndGVraW50w6lzw6loZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgY2hhbmdlLid9ID0gJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgZWd5IHbDoWx0b3rDoXMgZWzFkXptw6lueWVpIG5hZ3nDrXTDoXPDoW5hayBtZWd0ZWtpbnTDqXPDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGVneSBtdW5rYW1lZ3JlbmRlbMOpcyBlbMWRem3DqW55ZWkgbmFnecOtdMOhc8OhbmFrIG1lZ3Rla2ludMOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgQ2hhbmdlIFNjaGVkdWxlLid9ID0gJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgYSB2w6FsdG96dGF0w6FzaSDDvHRlbXRlcnYgbGlzdMOhasOhbmFrIG1lZ3Rla2ludMOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlIFBTQS4nfSA9ICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGEgdsOhbHRvesOhcyBQU0EgbGlzdMOhasOhbmFrIG1lZ3Rla2ludMOpc8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlcyB3aXRoIGFuIHVwY29taW5nIFBJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpLid9ID0KICAgICAgICAnQSBzesO8a3PDqWdlcyBqb2dvc3VsdHPDoWdvayBlZ3kga8O2emVsZ8WRIFBJUi1yZWwgKG1lZ3ZhbMOzc8OtdMOhcyB1dMOhbmkgdml6c2fDoWxhdHRhbCkgcmVuZGVsa2V6xZEgdsOhbHRvesOhc29rIGxpc3TDoWrDoW5hayBtZWd0ZWtpbnTDqXPDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biBjaGFuZ2VzLid9ID0gJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgYSBzYWrDoXQgdsOhbHRvesOhc29rIGxpc3TDoWrDoW5hayBtZWd0ZWtpbnTDqXPDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biB3b3Jrb3JkZXJzLid9ID0gJ0Egc3rDvGtzw6lnZXMgam9nb3N1bHRzw6Fnb2sgYSBzYWrDoXQgbXVua2FtZWdyZW5kZWzDqXNlayBsaXN0w6Fqw6FuYWsgbWVndGVraW50w6lzw6loZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gd3JpdGUgYSByZXBvcnQgZm9yIHRoZSB3b3Jrb3JkZXIuJ30gPSAnQSBzesO8a3PDqWdlcyBqb2dvc3VsdHPDoWdvayBlZ3kgamVsZW50w6lzIMOtcsOhc8OhaG96IGEgbXVua2FtZWdyZW5kZWzDqXNuw6lsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuJ30gPSAnRWd5IHbDoWx0b3rDoXMgw6lzIGEgbXVua2FtZWdyZW5kZWzDqXNlaW5layB2aXNzemHDoWxsw610w6FzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICdBIHbDoWx0b3rDoXMgw6lzIG11bmthbWVncmVuZGVsw6lzZWluZWsgdmlzc3phw6FsbMOtdMOhc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biB0YXNrIHRvIGNoZWNrIGlmIHNwZWNpZmljIHRpbWVzIGhhdmUgYmVlbiByZWFjaGVkIGluIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICdGZWxhZGF0IGZ1dHRhdMOhc2EgYW5uYWsgZWxsZW7FkXJ6w6lzw6loZXosIGhvZ3kgYSBtZWdoYXTDoXJvem90dCBpZMWRcG9udG9rYXQgZWzDqXJ0w6lrLWUgYSB2w6FsdG96w6Fzb2tiYW4gw6lzIGEgbXVua2FtZWdyZW5kZWzDqXNla2Jlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZS4nfSA9ICdWw6FsdG96w6FzIG1lbnTDqXNlIHNhYmxvbmvDqW50Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlLid9ID0gJ011bmthbWVncmVuZGVsw6lzIG1lbnTDqXNlIHNhYmxvbmvDqW50Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2hlZHVsZSd9ID0gJ8OcdGVtdGVydic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY3JlZW4gYWZ0ZXIgY3JlYXRpbmcgYSB3b3Jrb3JkZXInfSA9ICdFZ3kgbXVua2FtZWdyZW5kZWzDqXMgbMOpdHJlaG96w6FzYSB1dMOhbmkga8OpcGVybnnFkSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ2hhbmdlcyd9ID0gJ1bDoWx0b3rDoXNvayBrZXJlc8Opc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMuJ30gPSAnVsOhbHRvesOhc29rIGtlcmVzw6lzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY2hhbmdlIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY2hhbmdlIG51bWJlciwgdGhlIFN5c3RlbUlEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZCB3aXRoIFN5c3RlbUlELmNvdW50ZXIgZm9ybWF0IChlLmcuIDEwMDExOCwgMTAwMTE5KS4gV2l0aCAiRGF0ZSIsIHRoZSBjaGFuZ2UgbnVtYmVycyB3aWxsIGJlIGdlbmVyYXRlZCBieSB0aGUgY3VycmVudCBkYXRlIGFuZCBhIGNvdW50ZXI7IHRoaXMgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuY291bnRlciwgZS5nLiAyMDEwMDYyNDAwMDAxLCAyMDEwMDYyNDAwMDAyLiBXaXRoICJEYXRlQ2hlY2tzdW0iLCB0aGUgY291bnRlciB3aWxsIGJlIGFwcGVuZGVkIGFzIGNoZWNrc3VtIHRvIHRoZSBzdHJpbmcgb2YgZGF0ZSBwbHVzIHRoZSBTeXN0ZW1JRC4gVGhlIGNoZWNrc3VtIHdpbGwgYmUgcm90YXRlZCBvbiBhIGRhaWx5IGJhc2lzLiBUaGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LlN5c3RlbUlELkNvdW50ZXIuQ2hlY2tTdW0sIGUuZy4gMjAxMDA2MjQxMDAwMDAxNywgMjAxMDA2MjQxMDAwMDAyNi4nfSA9CiAgICAgICAgJ0tpdsOhbGFzenRqYSBhIHbDoWx0b3rDoXNzesOhbSBlbMWRw6FsbMOtdMOzIG1vZHVsdC4gQXog4oCeQXV0b0luY3JlbWVudOKAnSBuw7Z2ZWxpIGEgdsOhbHRvesOhc3N6w6Ftb3QsIGFob2wgYSByZW5kc3plci1hem9ub3PDrXTDs3Qgw6lzIGEgc3rDoW1sw6Fsw7N0IGEgUmVuZHN6ZXJJRC5zesOhbWzDoWzDsyBmb3Jtw6F0dW1tYWwgaGFzem7DoWxqYSAocMOpbGTDoXVsIDEwMDExOCwgMTAwMTE5KS4gQSDigJ5EYXRl4oCdIMOpcnTDqWtrZWwgYSB2w6FsdG96w6Fzc3rDoW1va2F0IGF6IGFrdHXDoWxpcyBkw6F0dW0gw6lzIGEgc3rDoW1sw6Fsw7MgZm9namEgZWzFkcOhbGzDrXRhbmkuIEEgZm9ybcOhdHVtIMOtZ3kgbsOpeiBraTogw4l2LkjDs25hcC5OYXAuc3rDoW1sw6Fsw7MgKHDDqWxkw6F1bCAyMDEwMDYyNDAwMDAxLCAyMDEwMDYyNDAwMDAyKS4gQSDigJ5EYXRlQ2hlY2tzdW3igJ0gaGFzem7DoWxhdMOhdmFsIGEgc3rDoW1sw6Fsw7MgZWxsZW7FkXJ6xZHDtnNzemVna8OpbnQgbGVzeiBob3p6w6FmxbF6dmUgYSBkw6F0dW0gw6lzIGEgcmVuZHN6ZXItYXpvbm9zw610w7Mgc3rDtnZlZ8OpaGV6LiBBeiBlbGxlbsWRcnrFkcO2c3N6ZWcgbmFwb250YSBmb2cgw6F0Zm9yZHVsbmkuIEEgZm9ybcOhdHVtIMOtZ3kgbsOpeiBraTogw4l2LkjDs25hcC5OYXAuUmVuZHN6ZXJJRC5TesOhbWzDoWzDsy5FbGzDlnNzemVnIChww6lsZMOhdWwgMjAxMDA2MjQxMDAwMDAxNywgMjAxMDA2MjQxMDAwMDAyNikuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgYWdlbnQgZm9yIHRoZSB3b3Jrb3JkZXIuJ30gPSAnQXogw7xneWludMOpesWRIGJlw6FsbMOtdMOhc2EgYSBtdW5rYW1lZ3JlbmRlbMOpc2hlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRJVFNNQ2hhbmdlWm9vbSBhbmQgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nfSA9CiAgICAgICAgJ0EgYmXDoWd5YXpvdHQgSFRNTCBtZXrFkWsgYWxhcMOpcnRlbG1lemV0dCBtYWdhc3PDoWfDoW5hayBiZcOhbGzDrXTDoXNhIChrw6lwcG9udGJhbikgYXogQWdlbnRJVFNNQ2hhbmdlWm9vbSDDqXMgYXogQWdlbnRJVFNNV29ya09yZGVyWm9vbSBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAnQSBiZcOhZ3lhem90dCBIVE1MIG1lesWRayBsZWduYWd5b2JiIG1hZ2Fzc8OhZ8OhbmFrIGJlw6FsbMOtdMOhc2EgKGvDqXBwb250YmFuKSBheiBBZ2VudElUU01DaGFuZ2Vab29tIMOpcyBheiBBZ2VudElUU01Xb3JrT3JkZXJab29tIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIG1pbmltYWwgY2hhbmdlIGNvdW50ZXIgc2l6ZSAoaWYgIkF1dG9JbmNyZW1lbnQiIHdhcyBzZWxlY3RlZCBhcyBJVFNNQ2hhbmdlOjpOdW1iZXJHZW5lcmF0b3IpLiBEZWZhdWx0IGlzIDUsIHRoaXMgbWVhbnMgdGhlIGNvdW50ZXIgc3RhcnRzIGZyb20gMTAwMDAuJ30gPQogICAgICAgICdCZcOhbGzDrXRqYSBhIGxlZ2tpc2ViYiB2w6FsdG96w6Fzc3rDoW1sw6Fsw7MgbcOpcmV0ZXQgKGhhIOKAnkF1dG9JbmNyZW1lbnTigJ0gbGV0dCBraXbDoWxhc3p0dmEgSVRTTSB2w6FsdG96w6FzOjpTesOhbWVsxZHDoWxsw610w7Nrw6ludCkgQXogYWxhcMOpcnRlbG1lemV0dCA1LCBhbWVseSBhenQgamVsZW50aSwgaG9neSBhIHN6w6FtbMOhbMOzIDEwMDAwLXTFkWwgZm9nIGluZHVsbmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdXAgdGhlIHN0YXRlIG1hY2hpbmUgZm9yIGNoYW5nZXMuJ30gPSAnQmXDoWxsw610amEgYXogw6FsbGFwb3Rnw6lwZXQgYSB2w6FsdG96w6Fzb2tuw6FsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHVwIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciB3b3Jrb3JkZXJzLid9ID0gJ0Jlw6FsbMOtdGphIGF6IMOhbGxhcG90Z8OpcGV0IGEgbXVua2FtZWdyZW5kZWzDqXNla27DqWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgY2hlY2tib3ggaW4gdGhlIEFnZW50SVRTTVdvcmtPcmRlckVkaXQgc2NyZWVuIHRoYXQgZGVmaW5lcyBpZiB0aGUgdGhlIGZvbGxvd2luZyB3b3Jrb3JkZXJzIHNob3VsZCBhbHNvIGJlIG1vdmVkIGlmIGEgd29ya29yZGVyIGlzIG1vZGlmaWVkIGFuZCB0aGUgcGxhbm5lZCBlbmQgdGltZSBoYXMgY2hhbmdlZC4nfSA9CiAgICAgICAgJ0VneSBqZWzDtmzFkW7DqWd5emV0ZXQgamVsZW7DrXQgbWVnIGF6IEFnZW50SVRTTVdvcmtPcmRlckVkaXQga8OpcGVybnnFkW4sIGFtZWx5IGF6dCBoYXTDoXJvenphIG1lZywgaG9neSBhIGvDtnZldGtlesWRIG11bmthbWVncmVuZGVsw6lzZWtldCBpcyDDoXQga2VsbC1lIGhlbHllem5pLCBoYSBlZ3kgbXVua2FtZWdyZW5kZWzDqXMgbcOzZG9zdWx0IMOpcyBhIHRlcnZlemV0dCBiZWZlamV6w6lzaSBpZMWRIG1lZ3bDoWx0b3pvdHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBjaGFuZ2luZyB0aGUgd29ya29yZGVyIGFnZW50LCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuLCBhbWVseSBsZWhldMWRdsOpIHRlc3ppIGEgbXVua2FtZWdyZW5kZWzDqXMgw7xneWludMOpesWRasOpbmVrIG1lZ3bDoWx0b3p0YXTDoXPDoXQgYXogw7xneWludMOpesWRaSBmZWzDvGxldCBpbHllbiBtdW5rYW1lZ3JlbmRlbMOpc8OpbmVrIG5hZ3nDrXTDoXNpIG7DqXpldMOpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgY2hhbmdlIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgY2hhbmdlLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWd5IGhpdmF0a296w6FzdCBqZWxlbsOtdCBtZWcgYSBtZW7DvGJlbiwgYW1lbHkgbGVoZXTFkXbDqSB0ZXN6aSBlZ3kgdsOhbHRvesOhcyBzYWJsb25rw6ludCB2YWzDsyBtZWdoYXTDoXJvesOhc8OhdCBhIHbDoWx0b3rDoXMgbmFnecOtdMOhcyBuw6l6ZXTDqWJlbiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIHdvcmtvcmRlciwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VneSBoaXZhdGtvesOhc3QgamVsZW7DrXQgbWVnIGEgbWVuw7xiZW4sIGFtZWx5IGxlaGV0xZF2w6kgdGVzemkgZWd5IG11bmthbWVncmVuZGVsw6lzIHNhYmxvbmvDqW50IHZhbMOzIG1lZ2hhdMOhcm96w6Fzw6F0IGEgbXVua2FtZWdyZW5kZWzDqXMgbmFnecOtdG90dCBuw6l6ZXTDqWJlbiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBlZGl0aW5nIHRoZSByZXBvcnQgb2YgYSB3b3Jrb3JkZXIsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VneSBoaXZhdGtvesOhc3QgamVsZW7DrXQgbWVnIGEgbWVuw7xiZW4sIGFtZWx5IGxlaGV0xZF2w6kgdGVzemkgZWd5IG11bmthbWVncmVuZGVsw6lzIGplbGVudMOpc8OpbmVrIHN6ZXJrZXN6dMOpc8OpdCBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0IGlseWVuIG11bmthbWVncmVuZGVsw6lzw6luZWsgbmFnecOtdMOhc2kgbsOpemV0w6luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNoYW5nZSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuLCBhbWVseSBsZWhldMWRdsOpIHRlc3ppIGVneSB2w6FsdG96w6FzIMO2c3N6ZWthcGNzb2zDoXPDoXQgZWd5IG3DoXNpayBvYmpla3R1bW1hbCBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0IHbDoWx0b3rDoXMgbmFnecOtdMOhcyBuw6l6ZXTDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSB3b3Jrb3JkZXIgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuLCBhbWVseSBsZWhldMWRdsOpIHRlc3ppIGVneSBtdW5rYW1lZ3JlbmRlbMOpcyDDtnNzemVrYXBjc29sw6Fzw6F0IGVneSBtw6FzaWsgb2JqZWt0dW1tYWwgYXogw7xneWludMOpesWRaSBmZWzDvGxldCBpbHllbiBtdW5rYW1lZ3JlbmRlbMOpc8OpbmVrIG5hZ3nDrXTDoXNpIG7DqXpldMOpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIG1vdmluZyB0aGUgdGltZSBzbG90IG9mIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VneSBoaXZhdGtvesOhc3QgamVsZW7DrXQgbWVnIGEgbWVuw7xiZW4sIGFtZWx5IGxlaGV0xZF2w6kgdGVzemkgZWd5IHbDoWx0b3rDoXMgaWTFkXLDqXPDqW5layDDoXRoZWx5ZXrDqXPDqXQgYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuIGF6IGVsZW0gbmFnecOtdMOhc2kgbsOpemV0w6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0YWtpbmcgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VneSBoaXZhdGtvesOhc3QgamVsZW7DrXQgbWVnIGEgbWVuw7xiZW4sIGFtZWx5IGxlaGV0xZF2w6kgdGVzemkgZWd5IG11bmthbWVncmVuZGVsw6lzIGZlbHbDqXRlbMOpdCBhbm5hayBuYWd5w610w6FzaSBuw6l6ZXTDqW4gYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBjb25kaXRpb25zIG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuIGVneSB2w6FsdG96w6FzIGZlbHTDqXRlbGVpbmVrIGVsw6lyw6lzw6loZXogYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuIGF6IGVsZW0gbmFnecOtdMOhc2kgbsOpemV0w6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VneSBoaXZhdGtvesOhc3QgamVsZW7DrXQgbWVnIGEgbWVuw7xiZW4gZWd5IHbDoWx0b3rDoXMgZWzFkXptw6lueWVpbmVrIGVsw6lyw6lzw6loZXogYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuIGF6IGVsZW0gbmFnecOtdMOhc2kgbsOpemV0w6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VneSBoaXZhdGtvesOhc3QgamVsZW7DrXQgbWVnIGEgbWVuw7xiZW4gZWd5IG11bmthbWVncmVuZGVsw6lzIGVsxZF6bcOpbnllaW5layBob3p6w6Fmw6lyw6lzw6loZXogYW5uYWsgbmFnecOtdMOhc2kgbsOpemV0w6luIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFkZCBhIHdvcmtvcmRlciBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWd5IGhpdmF0a296w6FzdCBqZWxlbsOtdCBtZWcgYSBtZW7DvGJlbiBlZ3kgbXVua2FtZWdyZW5kZWzDqXMgaG96esOhYWTDoXPDoWhveiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0IHbDoWx0b3rDoXNuYWd5w610w6FzIG7DqXpldMOpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuIGVneSB2w6FsdG96w6FzIHTDtnJsw6lzw6loZXogYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuIGF6IGVsZW0gbmFnecOtdMOhc2kgbsOpemV0w6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSB3b3Jrb3JkZXIgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWd5IGhpdmF0a296w6FzdCBqZWxlbsOtdCBtZWcgYSBtZW7DvGJlbiBlZ3kgbXVua2FtZWdyZW5kZWzDqXMgdMO2cmzDqXPDqWhleiBhbm5hayBuYWd5w610w6FzaSBuw6l6ZXTDqW4gYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWd5IGhpdmF0a296w6FzdCBqZWxlbsOtdCBtZWcgYSBtZW7DvGJlbiBlZ3kgdsOhbHRvesOhcyBzemVya2VzenTDqXPDqWhleiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4gYXogZWxlbSBuYWd5w610w6FzaSBuw6l6ZXTDqWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VneSBoaXZhdGtvesOhc3QgamVsZW7DrXQgbWVnIGEgbWVuw7xiZW4gZWd5IG11bmthbWVncmVuZGVsw6lzIHN6ZXJrZXN6dMOpc8OpaGV6IGFubmFrIG5hZ3nDrXTDoXNpIG7DqXpldMOpbiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQgdsOhbHRvesOhcyBuYWd5w610w6FzaSBuw6l6ZXTDqWJlIHZhbMOzIHZpc3N6YXTDqXLDqXNoZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSB3b3Jrb3JkZXIgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdFZ3kgaGl2YXRrb3rDoXN0IGplbGVuw610IG1lZyBhIG1lbsO8YmVuIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQgbXVua2FtZWdyZW5kZWzDqXMgbmFnecOtdMOhc2kgbsOpemV0aGV6IHZhbMOzIHZpc3N6YXTDqXLDqXNoZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWd5IGhpdmF0a296w6FzdCBqZWxlbsOtdCBtZWcgYSBtZW7DvGJlbiBlZ3kgdsOhbHRvesOhcyBueW9tdGF0w6Fzw6Fob3ogYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuIGF6IGVsZW0gbmFnecOtdMOhc2kgbsOpemV0w6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWd5IGhpdmF0a296w6FzdCBqZWxlbsOtdCBtZWcgYSBtZW7DvGJlbiBlZ3kgbXVua2FtZWdyZW5kZWzDqXMgbnlvbXRhdMOhc8OhaG96IGFubmFrIG5hZ3nDrXTDoXNpIG7DqXpldMOpbiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byByZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRWd5IGhpdmF0a296w6FzdCBqZWxlbsOtdCBtZWcgYSBtZW7DvGJlbiBlZ3kgdsOhbHRvesOhcyDDqXMgYW5uYWsgbXVua2FtZWdyZW5kZWzDqXNlaSB2aXNzemHDoWxsw610w6Fzw6Fob3ogYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuIGF6IGVsZW0gbmFnecOtdMOhc2kgbsOpemV0w6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjaGFuZ2UgaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVnamVsZW7DrXRpIGEgdsOhbHRvesOhcyBlbMWRem3DqW55ZWl0IChmb3Jkw610b3R0IHNvcnJlbmRiZW4pIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdGUgTWFjaGluZSd9ID0gJ8OBbGxhcG90Z8OpcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdG9yZXMgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgaWRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHRlbXBsYXRlIGlkLCB3aGlsZSBhIHVzZXIgaXMgZWRpdGluZyBhIHRlbXBsYXRlLid9ID0KICAgICAgICAnVsOhbHRvesOhcy0gw6lzIG11bmthbWVncmVuZGVsw6lzLWF6b25vc8OtdMOza2F0LCB2YWxhbWludCBhIG5la2lrIG1lZ2ZlbGVsxZEgc2FibG9uYXpvbm9zw610w7N0IHTDoXJvbGphLCBtaWvDtnpiZW4gZWd5IGZlbGhhc3puw6Fsw7Mgc3plcmtlc3p0IGVneSBzYWJsb250Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIFdvcmtvcmRlcid9ID0gJ011bmthbWVncmVuZGVsw6lzIGZlbHbDqXRlbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXIuJ30gPSAnTXVua2FtZWdyZW5kZWzDqXMgZmVsdsOpdGVsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSB0aGUgd29ya29yZGVyLid9ID0gJ0EgbXVua2FtZWdyZW5kZWzDqXMgZmVsdsOpdGVsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgT3ZlcnZpZXcnfSA9ICdTYWJsb24gw6F0dGVraW50xZEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUuJ30gPSAnU2FibG9uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjaGFuZ2UsIGUuZy4gQ2hhbmdlIywgTXlDaGFuZ2UjLiBUaGUgZGVmYXVsdCBpcyBDaGFuZ2UjLid9ID0KICAgICAgICAnRWd5IHbDoWx0b3rDoXMgYXpvbm9zw610w7NqYSwgcMOpbGTDoXVsIENoYW5nZSMsIE15Q2hhbmdlIy4gQXogYWxhcMOpcnRlbG1lemV0dDogQ2hhbmdlIy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgd29ya29yZGVyLCBlLmcuIFdvcmtvcmRlciMsIE15V29ya29yZGVyIy4gVGhlIGRlZmF1bHQgaXMgV29ya29yZGVyIy4nfSA9CiAgICAgICAgJ0VneSBtdW5rYW1lZ3JlbmRlbMOpcyBhem9ub3PDrXTDs2phLCBww6lsZMOhdWwgV29ya29yZGVyIywgTXlXb3Jrb3JkZXIjLiBBeiBhbGFww6lydGVsbWV6ZXR0OiBXb3Jrb3JkZXIjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIEFDTCBtb2R1bGUgcmVzdHJpY3RzIHRoZSB1c3VhZ2Ugb2YgdGhlIHRpY2tldCB0eXBlcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9uIFwnSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzXCcsIHRvIHVzZXJzIG9mIHRoZSBncm91cHMgYXMgZGVmaW5lZCBpbiAiSVRTTUNoYW5nZTo6UmVzdHJpY3RUaWNrZXRUeXBlczo6R3JvdXBzIi4gQXMgdGhpcyBBQ0wgY291bGQgY29sbGlkZSB3aXRoIG90aGVyIEFDTHMgd2hpY2ggYXJlIGFsc28gcmVsYXRlZCB0byB0aGUgdGlja2V0IHR5cGUsIHRoaXMgc3lzY29uZmlnIG9wdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBzaG91bGQgb25seSBiZSBhY3RpdmF0ZWQgaWYgbmVlZGVkLid9ID0KICAgICAgICAnRXogYXogQUNMIG1vZHVsIGtvcmzDoXRvenphIGF6IOKAnklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlc+KAnSByZW5kc3plcmJlw6FsbMOtdMOhc2kgbGVoZXTFkXPDqWdiZW4gbWVnaGF0w6Fyb3pvdHQgamVneXTDrXB1c29rIGhhc3puw6FsYXTDoXQgYXog4oCeSVRTTUNoYW5nZTo6UmVzdHJpY3RUaWNrZXRUeXBlczo6R3JvdXBz4oCdIGNzb3BvcnRiYW4gbWVnaGF0w6Fyb3pvdHQgZmVsaGFzem7DoWzDs2tyYS4gTWl2ZWwgZXogYXogQUNMIMO8dGvDtnpoZXQgbcOhcyBvbHlhbiBBQ0wtZWtrZWwsIGFtZWx5ZWsgc3ppbnTDqW4gYSBqZWd5dMOtcHVzc2FsIHZhbm5hayDDtnNzemVmw7xnZ8Opc2JlbiwgZXrDqXJ0IGV6IGEgcmVuZHN6ZXJiZcOhbGzDrXTDoXNpIGxlaGV0xZFzw6lnIGFsYXDDqXJ0ZWxtZXpldHRlbiBsZSB2YW4gdGlsdHZhLCDDqXMgY3NhayBha2tvciBrZWxsIGFrdGl2w6FsbmksIGhhIHN6w7xrc8OpZ2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFNsb3QnfSA9ICdJZMWRcsOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlcyBvZiB0aWNrZXRzLCB3aGVyZSBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBhIGxpbmsgdG8gYWRkIGEgY2hhbmdlIHdpbGwgYmUgZGlzcGxheWVkLid9ID0KICAgICAgICAnSmVneWVrIHTDrXB1c2FpLCBhaG9sIGEgamVneSBuYWd5w610w6FzIG7DqXpldGJlbiBlZ3kgdsOhbHRvesOhcyBob3p6w6FhZMOhc8OhcmEgbXV0YXTDsyBoaXZhdGtvesOhcyBsZXN6IG1lZ2plbGVuw610dmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgU2VhcmNoJ30gPSAnRmVsaGFzem7DoWzDs2tlcmVzw6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQgKGZyb20gdGVtcGxhdGUpLid9ID0gJ011bmthbWVncmVuZGVsw6lzIGhvenrDoWFkw6FzYSAoc2FibG9uYsOzbCkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQuJ30gPSAnTXVua2FtZWdyZW5kZWzDqXMgaG96esOhYWTDoXNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQuJ30gPSAnTXVua2FtZWdyZW5kZWzDqXMgw7xneWludMOpesWRamUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBEZWxldGUuJ30gPSAnTXVua2FtZWdyZW5kZWzDqXMgdMO2cmzDqXNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgRWRpdC4nfSA9ICdNdW5rYW1lZ3JlbmRlbMOpcyBzemVya2VzenTDqXNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSGlzdG9yeSBab29tLid9ID0gJ011bmthbWVncmVuZGVsw6lzIGVsxZF6bcOpbnllaW5layBuYWd5w610w6FzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEhpc3RvcnkuJ30gPSAnTXVua2FtZWdyZW5kZWzDqXMgZWzFkXptw6lueWVpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgUmVwb3J0Lid9ID0gJ011bmthbWVncmVuZGVsw6lzIGplbGVudMOpc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tLid9ID0gJ011bmthbWVncmVuZGVsw6lzIG5hZ3nDrXTDoXNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvbmNlJ30gPSAnZWd5c3plcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWd1bGFybHknfSA9ICdyZW5kc3plcmVzZW4nOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6aWRfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLYXRlZ29yaSA8LT4gRGFtcGFrIDwtPiBQcmlvcml0YXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ2F0ZWdvcnkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ01lbmdlbG9sYSBoYXNpbCBwcmlvcml0YXMga29tYmluYXNpIEthdGVnb3JpIDwtPiBEYW1wYWsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBbG9rYXNpIFByaW9yaXRhcyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ2hhbmdlTm90aWZpY2F0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZU1hbmFnZW1lbnQgTm90aWZpY2F0aW9uIE1hbmFnZW1lbnQnfSA9ICdNYW5hamVtZW4gUGVtYmVyaXRhaHVhbiBJVFNNIE1hbmFqZW1lbiBQZXJ1YmFoYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE5vdGlmaWNhdGlvbiBSdWxlJ30gPSAnVGFtYmFoIHBlcmF0dXJhbiBub3RpZmlrYXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1bGUnfSA9ICdQZXJhdHVyYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBub3RpZmljYXRpb24gc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ1BlbWJlcml0YWh1YW4gaGFydXMgbWVtaWxpa2kgbmFtYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZC4nfSA9ICdOYW1hIGRpcGVybHVrYW4uJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01TdGF0ZU1hY2hpbmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFN0YXRlIE1hY2hpbmUnfSA9ICdBZG1pbiBTdGF0ZSBNYWNoaW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIGNhdGFsb2cgY2xhc3MhJ30gPSAnUGlsaWgga2VsYXMga2F0YWxvZyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRhbG9nIGNsYXNzIGlzIHJlcXVpcmVkISd9ID0gJ1NlYnVhaCBrZWxhcyBLYXRhbG9nIGRpcGVybHVrYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHN0YXRlIHRyYW5zaXRpb24nfSA9ICdNZW5hbWJhaGthbiB0cmFuc2lzaSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0tlbGFzIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IE5hbWUnfSA9ICdOYW1hIG9ieWVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG92ZXIgc3RhdGUgdHJhbnNpdGlvbnMgZm9yJ30gPSAnS2VzZWx1cnVoYW4gc3RhdGUgdHJhbnNpc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgc3RhdGUgdHJhbnNpdGlvbid9ID0gJ0hhcHVzIHRyYW5zaXNpIHN0YXRlIGJlcmlrdXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgbmV3IHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAnVGFtYmFoIHN0YXRlIHRyYW5zaXNpIGJhcnUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhIHN0YXRlISd9ID0gJ1BpbGloIHN0YXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBuZXh0IHN0YXRlISd9ID0gJ1BpbGloIHN0YXRlIGJlcmlrdXRueWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBhIHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAnRWRpdCB0cmFuc2lzaSBzdGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoZSBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnQXBha2FoIEFuZGEgYmVuYXItYmVuYXIgaW5naW4gbWVuZ2hhcHVzIHRyYW5zaXNpPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2hhbmdlJ30gPSAnVGFtYmFoIHBlcnViYWhhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSd9ID0gJ1ViYWggSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdXN0aWZpY2F0aW9uJ30gPSAnSnVzdGlmaWthc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5wdXQgaW52YWxpZC4nfSA9ICdQZW1hc3VrYW4gdGlkYWsgc2FoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0RhbXBhayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0ZWQgRGF0ZSd9ID0gJ1RhbmdnYWwgZGltaW50YSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgQ2hhbmdlIFRlbXBsYXRlJ30gPSAnUGlsaWggcGVydWJhaGFuIHRlbXBsYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgdHlwZSd9ID0gJ0plbmlzIHdha3R1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgdGltZSB0eXBlLid9ID0gJ0plbmlzIHdha3R1IHRpZGFrIHNhaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdGltZSd9ID0gJ1dha3R1IGJhcnUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBDQUIgYXMgdGVtcGxhdGUnfSA9ICdTaW1wYW4gcGVydWJhaGFuIENBQiBzZWJhZ2FpIFRlbXBsYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIHRvIGludm9sdmVkIHBlcnNvbnMgc2NyZWVuJ30gPSAncGVyZ2kga2UgbGF5YXIgb3JhbmcgeWFuZyB0ZXJsaWJhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIE5hbWUnfSA9ICdOYW1hIHRpZGFrIHNhaCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25zIGFuZCBBY3Rpb25zJ30gPSAnS29uZGlzaSBkYW4gVGluZGFrYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmRpdGlvbid9ID0gJ0hhcHVzIGtvbmRpc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBjb25kaXRpb24nfSA9ICdUYW1iYWgga29uZGlzaSBiYXJ1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENvbmRpdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIGEgdmFsaWQgbmFtZS4nfSA9ICdQZXJsdSBuYW1hIHlhbmcgc2FoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdmFsaWQgbmFtZSBpcyBuZWVkZWQuJ30gPSAnTmFtYSB5YW5nIHNhaCBkaXBlcmx1a2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lOid9ID0gJ0R1cGxpa2FzaSBuYW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbmFtZSBpcyBhbHJlYWR5IHVzZWQgYnkgYW5vdGhlciBjb25kaXRpb24uJ30gPSAnTmFtYSB0ZXJzZWJ1dCB0ZWxhaCBkaWd1bmFrYW4gb2xlaCBrb25kaXNpIGxhaW5ueWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF0Y2hpbmcnfSA9ICdTZXN1YWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW55IGV4cHJlc3Npb24gKE9SKSd9ID0gJ0Vrc3ByZXNpIGxhaW5ueWEgKE9SKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgZXhwcmVzc2lvbnMgKEFORCknfSA9ICdTZW11YSBla3NwcmVzaSAoQU5EKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHByZXNzaW9ucyd9ID0gJ0Vrc3ByZXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdG9yJ30gPSAnUGVtaWxpaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRvcid9ID0gJ1Blbmd1cnVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBFeHByZXNzaW9uJ30gPSAnSGFwdXMgZWtzcHJlc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRXhwcmVzc2lvbnMgZm91bmQuJ30gPSAnRWtzcHJlc2kgdGlkYWsgZGl0ZW11a2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgZXhwcmVzc2lvbid9ID0gJ1RhbWJhaCBla3NwcmVzaSBiYXJ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBBY3Rpb24nfSA9ICdIYXB1cyBha3NpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEFjdGlvbnMgZm91bmQuJ30gPSAnVGlkYWsgYWRhIGFrc2kgZGl0ZW11a2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgYWN0aW9uJ30gPSAnVGFtYmFoIGFrc2kgYmFydSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2hhbmdlPyd9ID0gJ0FwYWthaCBhbmRhIGluZ2luIG1lbmdoYXB1cyBwZXJ1YmFoYW4gaW5pPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMnfSA9ICdTZWphcmFoIGRhcmkgJXMlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXInfSA9ICdUYXRhIGtlcmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgZGV0YWlscyd9ID0gJ1RhbXBpbGthbiBkZXRhaWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB3b3Jrb3JkZXInfSA9ICdUYW1waWxrYW4gdGF0YSBrZXJqYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbGVkIGhpc3RvcnkgaW5mb3JtYXRpb24gb2YgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kaWZpZWQnfSA9ICdEaXViYWgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2xkIFZhbHVlJ30gPSAnTmlsYWkgbGFtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgVmFsdWUnfSA9ICdOaWxhaSBiYXJ1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSW52b2x2ZWQgUGVyc29ucyBvZiAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludm9sdmVkIFBlcnNvbnMnfSA9ICdPcmFuZyB5YW5nIHRlcmxpYmF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZU1hbmFnZXInfSA9ICdVYmFoIG1hbmFnZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBpbnZhbGlkLid9ID0gJ1BlbmdndW5hIHRpZGFrIHNhaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VCdWlsZGVyJ30gPSAnVWJhaCBwZW1iYW5ndW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEFkdmlzb3J5IEJvYXJkJ30gPSAnRGV3YW4gUGVuYXNlaGF0IHBlcnViYWhhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgVGVtcGxhdGUnfSA9ICdUZW1wbGF0ZSBDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwbHkgVGVtcGxhdGUnfSA9ICdUZXJhcGthbiBUZW1wbGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXdUZW1wbGF0ZSd9ID0gJ1RlbXBsYXRlIGJhcnUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSB0aGlzIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJ1NpbXBhbiBDQUIgc2ViYWdhaSB0ZW1wbGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdG8gQ0FCJ30gPSAnVGFtYmFoIENBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIFVzZXInfSA9ICdQZW5nZ3VuYSB0aWRhayBzYWgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBDQUInfSA9ICdDQUIgc2FhdCBpbmknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnUGVuZ2F0dXJhbiBLb250ZWtzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZXMgcGVyIHBhZ2UnfSA9ICdVYmFoIHNldGlhcCBoYWxhbWFuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgVGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFRpdGxlJ30gPSAnVWJhaCBqdWR1bCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEJ1aWxkZXInfSA9ICdVYmFoIHBlbWJhbmd1bic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgTWFuYWdlcid9ID0gJ1ViYWggbWFuYWdlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXJzJ30gPSAnVGF0YSBrZXJqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU3RhdGUnfSA9ICdVYmFoIHN0YXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0ZWQgVGltZSd9ID0gJ1dha3R1IHlhbmcgZGltaW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIFN0YXJ0IFRpbWUnfSA9ICdQZXJlbmNhbmFhbiB3YWt0dSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVuZCBUaW1lJ30gPSAnUGVyZW5jYW5hYW4gd2FrdHUgYmVyYWtoaXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsIFN0YXJ0IFRpbWUnfSA9ICdXYWt0dSBkaW11bGFpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBFbmQgVGltZSd9ID0gJ1dha3R1IGJlcmFraGlyJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VSZXNldAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIHJlc2V0IHRoaXMgY2hhbmdlPyd9ID0gJ0FwYWthaCBhbmRhIGluZ2luIG1lbmdlc2V0IHVsYW5nIHBlcnViYWhhbiBpbmk/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhlLmcuIDEwKjUxNTUgb3IgMTA1NjU4KiknfSA9ICcoQ29udG9oIDEwKjUxNTUgb3IgMTA1NjU4KiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIEFnZW50J30gPSAnQWdlbiBDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS5nLid9ID0gJ0NvbnRvaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQ3VzdG9tZXInfSA9ICdQZWxhbmdnYW4gQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIEluc3RydWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIFJlcG9ydCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBQcmlvcml0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBJbXBhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIENhdGVnb3J5J30gPSAnVWJhaCBrYXRlZ29yaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoYmVmb3JlL2FmdGVyKSd9ID0gJyhTZWJlbHVtL1NldGVsYWgpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhiZXR3ZWVuKSd9ID0gJyhkaWFudGFyYSknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBhcyBUZW1wbGF0ZSd9ID0gJ1NpbXBhbiBzZWJhZ2FpIHRlbXBsYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdGVtcGxhdGUgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ1NlYnVhaCB0ZW1wbGF0ZSBoYXJ1cyBtZW1pbGlraSBuYW1hISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcGxhdGUgbmFtZSBpcyByZXF1aXJlZC4nfSA9ICdOYW1hIFRlbXBsYXRlIGRpcGVybHVrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IFN0YXRlcyd9ID0gJ0F0dXIgdWxhbmcgc3RhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcndyaXRlIG9yaWdpbmFsIHRlbXBsYXRlJ30gPSAnVGVtcGxhdGUgYXNsaSBkaXRpbXBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCBjaGFuZ2UnfSA9ICdIYXB1cyBwZXJ1YmFoYW4gYXNsaSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90J30gPSAnUGluZGFoa2FuIFdha3R1IFNsb3QnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbmZvcm1hdGlvbid9ID0gJ1ViYWggaW5mb3JtYXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRWZmb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjY291bnRlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbml0aWF0b3IocyknfSA9ICdQZXJ1YmFoYW4gUGVtcmFrYXJzYSAocyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCJ30gPSAnQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1RlcmFraGlyIGRpdWJhaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdUZXJha2hpciBkaXJ1YmFoIG9sZWgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gYmxvY2tzLCB5b3UgbWlnaHQgbmVlZCB0byBwcmVzcyBDdHJsIG9yIENtZCBvciBTaGlmdCBrZXkgd2hpbGUgY2xpY2tpbmcgdGhlIGxpbmsgKGRlcGVuZGluZyBvbiB5b3VyIGJyb3dzZXIgYW5kIE9TKS4nfSA9CiAgICAgICAgJ1VudHVrIG1lbWJ1a2EgdGF1dGFuIHBhZGEgYmFnaWFuIGRlc2tyaXBzaSBiZXJpa3V0LCBBbmRhIGhhcnVzIG1lbmVrYW4gdG9tYm9sIEN0cmwgYXRhdSBDbXMgYXRhdSBTaGlmdCBzYW1iaWwgbWVuZWthbiB0YXV0YW5ueWEgKHRlcmdhbnR1bmcgcGFkYSBTaXN0ZW0gT3BlcmFzaSBkYW4gUGVyYW1iYW4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdVbmR1aCBMYW1waXJhbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENBQiBUZW1wbGF0ZSd9ID0gJ01lbmdlZGl0IENBQiBUZW1wbGF0ZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBjaGFuZ2UgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICdJbmkgYWthbiBtZW1idWF0IHBlcnViYWhhbiBiYXJ1IGRhcmkgdGVtcGxhdGUgaW5pLCBzZWhpbmdnYSBBbmRhIGRhcGF0IG1lbmdlZGl0IGRhbiBtZW55aW1wYW5ueWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuZXcgY2hhbmdlIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIGl0IGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAnUGVydWJhaGFuIGJhcnUgYWthbiBkaWhhcHVzIHNlY2FyYSBvdG9tYXRpcyBzZXRlbGFoIHRlbGFoIGRpc2ltcGFuIHNlYmFnYWkgdGVtcGxhdGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgd29ya29yZGVyIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAnSW5pIGFrYW4gbWVtYnVhdCBwZXJpbnRhaCBrZXJqYSBiYXJ1IGRhcmkgdGVtcGxhdGUgaW5pLCBzZWhpbmdnYSBBbmRhIGRhcGF0IG1lbmdlZGl0IGRhbiBtZW55aW1wYW5ueWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdGVtcG9yYXJ5IGNoYW5nZSB3aWxsIGJlIGNyZWF0ZWQgd2hpY2ggY29udGFpbnMgdGhlIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJ1NlYnVhaCBwZXJ1YmFoYW4gc2VtZW50YXJhIGFrYW4gZGlidWF0IHlhbmcgYmVyaXNpIHBlcmludGFoIGtlcmphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcG9yYXJ5IGNoYW5nZSBhbmQgbmV3IHdvcmtvcmRlciB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciB0aGUgd29ya29yZGVyIGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAnUGVydWJhaGFuIHNlbWVudGFyYSBkYW4gcGVyaW50YWgga2VyamEgYmFydSBha2FuIGRpaGFwdXMgc2VjYXJhIG90b21hdGlzIHNldGVsYWggcGVyaW50YWgga2VyamEgdGVsYWggZGlzaW1wYW4gc2ViYWdhaSB0ZW1wbGF0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nfSA9ICdBcGFrYWggQW5kYSBpbmdpbiBtZWxhbmp1dGthbj8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgSUQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb250ZW50J30gPSAnVWJhaCBpc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgVGltZSd9ID0gJ01lbmd1YmFoIHdha3R1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGVtcGxhdGUgQ29udGVudCd9ID0gJ1ViYWggaXNpIHRlbXBsYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUZW1wbGF0ZSd9ID0gJ0hhcHVzIHRlbXBsYXRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgdG8gJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0cnVjdGlvbid9ID0gJ0luc3RydWtzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHdvcmtvcmRlciB0eXBlLid9ID0gJ0plbmlzIHBlcmludGFoIGtlcmphIHRpZGFrIHZhbGlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBwbGFubmVkIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIHBsYW5uZWQgZW5kIHRpbWUhJ30gPSAnd2FrdHUgbXVsYWkgZGlyZW5jYW5ha2FuIGhhcnVzIHNlYmVsdW0gd2FrdHUgYWtoaXIgeWFuZyBkaXJlbmNhbmFrYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZm9ybWF0Lid9ID0gJ0Zvcm1hdCB0aWRhayBzYWgnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IFdvcmtvcmRlciBUZW1wbGF0ZSd9ID0gJ1BpbGloIFdvcmsgT3JkZXIgVGVtcGxhdGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFnZW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFdvcmtvcmRlciBBZ2VudCBvZiAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyB3b3Jrb3JkZXI/J30gPSAnQXBha2FoIEFuZGEgYmVuYXItYmVuYXIgaW5naW4gbWVuZ2hhcHVzIHBlcmludGFoIGtlcmphIGluaT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgV29ya29yZGVyLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBDb25kaXRpb24hJ30gPQogICAgICAgICdBbmRhIHRpZGFrIGRhcGF0IG1lbmdoYXB1cyBQZXJpbnRhaCBLZXJqYSBpbmkuIEhhbCBpbmkgZGlndW5ha2FuIGRhbGFtIHNldGlkYWtueWEgc2F0dSBLb25kaXNpISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIFdvcmtvcmRlciBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgQ29uZGl0aW9uKHMpJ30gPSAnUGVyaW50YWggS2VyamEgaW5pIGRpZ3VuYWthbiBkYWxhbSBLb25kaXNpIGJlcmlrdXQgKHMpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0ICVzJXMtJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBmb2xsb3dpbmcgd29ya29yZGVycyBhY2NvcmRpbmdseSd9ID0gJ0JlcmdlcmFrIG1lbmdpa3V0aSBwZXJpbnRhaCBrZXJqYSB5YW5nIHNlc3VhaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGUgcGxhbm5lZCBlbmQgdGltZSBvZiB0aGlzIHdvcmtvcmRlciBpcyBjaGFuZ2VkLCB0aGUgcGxhbm5lZCBzdGFydCB0aW1lcyBvZiBhbGwgZm9sbG93aW5nIHdvcmtvcmRlcnMgd2lsbCBiZSBjaGFuZ2VkIGFjY29yZGluZ2x5J30gPQogICAgICAgICdKaWthIHdha3R1IGFraGlyIHlhbmcgZGlyZW5jYW5ha2FuIGRhcmkgcGVyaW50YWgga2VyamEgaW5pIGJlcnViYWgsIGthbGkgbXVsYWkgZGlyZW5jYW5ha2FuIHNlbXVhIHBlcmludGFoIGtlcmphIGJlcmlrdXQgYWthbiBiZXJ1YmFoIGRlbmdhbiBzZXN1YWknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgJXMlcy0lcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyUmVwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFJlcG9ydCBvZiAlcyVzLSVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydCd9ID0gJ0xhcG9yYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIHRpbWUhJ30gPSAnV2FrdHUgbXVsYWkgeWFuZyBzZWJlbmFybnlhIGhhcnVzIHNlYmVsdW0gd2FrdHUgYWtoaXIgeWFuZyBzZWJlbmFybnlhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWN0dWFsIHN0YXJ0IHRpbWUgbXVzdCBiZSBzZXQsIHdoZW4gdGhlIGFjdHVhbCBlbmQgdGltZSBpcyBzZXQhJ30gPQogICAgICAgICdXYWt0dSBtdWxhaSB5YW5nIHNlYmVuYXJueWEgaGFydXMgZGlhdHVyLCBrZXRpa2Egd2FrdHUgYWtoaXIgeWFuZyBzZWJlbmFybnlhIGRpYXR1ciEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRha2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgQWdlbnQnfSA9ICdBZ2VuIHNhYXQgaW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byB0YWtlIHRoaXMgd29ya29yZGVyPyd9ID0gJ0FwYWthaCBBbmRhIGJlbmFyLWJlbmFyIGluZ2luIG1lbmdhbWJpbCBwZXNhbmFuIHBla2VyamFhbiBpbmk/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJUZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBXb3Jrb3JkZXIgYXMgVGVtcGxhdGUnfSA9ICdIZW1hdCBXb3JrIE9yZGVyIHNlYmFnYWkgVGVtcGxhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIG9yaWdpbmFsIHdvcmtvcmRlciAoYW5kIHN1cnJvdW5kaW5nIGNoYW5nZSknfSA9ICdIYXB1cyBwZXJpbnRhaCBrZXJqYSBhc2xpIChkYW4gcGVydWJhaGFuIHNla2l0YXJueWEpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSW5mb3JtYXRpb24nfSA9ICdQZXJpbnRhaCBrZXJqYSBpbmZvcm1hc2knOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biBub3RpZmljYXRpb24gJXMhJ30gPSAncGVtYmVyaXRhaHVhbiB0aWRhayBkaWtldGFodWkgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZXJlIHdhcyBhbiBlcnJvciBjcmVhdGluZyB0aGUgbm90aWZpY2F0aW9uLid9ID0gJ0FkYSBrZXNhbGFoYW4gc2FhdCBtZW1idWF0IHBlbWJlcml0YWh1YW4uJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENoYW5nZXMnfSA9ICdJa2h0aXNhcjogSVRTTSBQZXJ1YmFoYW4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUFkZC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHdpdGggVGlja2V0SUQgJXMgZG9lcyBub3QgZXhpc3QhJ30gPSAnVGlrZXQgZGVuZ2FuIElEIHRpa2V0ICVzIHRpZGFrIGFkYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlzc2luZyBzeXNjb25maWcgb3B0aW9uICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiISd9ID0KICAgICAgICAnT3BzaSBzeXNjb25maWcgaGxsYW5nICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIGNoYW5nZSEnfSA9ICdUaWRhayBkYXBhdCBtZW5hbWJhaGthbiBwZXJ1YmFoYW4hJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlIGZyb20gdGVtcGxhdGUhJ30gPSAnVGlkYWsgbWFtcHUgbWVtYnVhdCBwZXJ1YmFoYW4gZGFyaSB0ZW1wbGF0ZSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICdUaWRhayBhZGEgR2FudGkgSUQgZGliZXJpa2FuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjaGFuZ2UgZm91bmQgZm9yIGNoYW5nZUlEICVzLid9ID0gJ1RpZGFrIGFkYSBwZXJ1YmFoYW4geWFuZyBkaXRlbXVrYW4gdW50dWsgSUQgcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgQ0FCIG9mIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJ0NBQiBwZXJ1YmFoYW4gIiVzIiB0aWRhayBkYXBhdCBzZXJpYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgdGhlIHRlbXBsYXRlLid9ID0gJ1RpZGFrIGRhcGF0IG1lbmFtYmFoa2FuIHRlbXBsYXRlLic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnR2FudGkgIiVzIiB0aWRhayBkaXRlbXVrYW4gZGFsYW0gZGF0YWJhc2UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQ29uZGl0aW9uSUQgJXMhJ30gPSAnVGlkYWsgZGFwYXQgbWVuZ2hhcHVzIENvbmRpdGlvbklEICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gJXMgaXMgZ2l2ZW4hJ30gPSAnVGlkYWsgYWRhICVzIGRpYmVyaWthbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGNyZWF0ZSBuZXcgY29uZGl0aW9uISd9ID0gJ1RpZGFrIGRhcGF0IG1lbWJ1YXQga29uZGlzaSBiYXJ1ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIENvbmRpdGlvbklEICVzISd9ID0gJ3RpZGFrIGJpc2EgdXBkYXRlIENvbmRpdGlvbklEICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICd0aWRhayBiaXNhIHVwZGF0ZSBFeHByZXNzaW9uICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIG5ldyBFeHByZXNzaW9uISd9ID0gJ2FrIGRhcGF0IG1lbmFtYmFoa2FuIEV4cHJlc2kgYmFydSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBBY3Rpb25JRCAlcyEnfSA9ICd0aWRhayBiaXNhIHVwZGF0ZSBBY3Rpb25JRCAlcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgQWN0aW9uISd9ID0gJ3RpZGFrIGJpc2EgbWVuYW1iYWggQWN0aW9uIGJhcnUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgRXhwcmVzc2lvbklEICVzISd9ID0gJ1RpZGFrIGRhcGF0IG1lbmdoYXB1cyBFa3NwcmVzaSAlcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBBY3Rpb25JRCAlcyEnfSA9ICdUaWRhayBkYXBhdCBtZW5naGFwdXMgQWN0aW9uSUQgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yOiBVbmtub3duIGZpZWxkIHR5cGUgIiVzIiEnfSA9ICdLZXNhbGFoYW46IHRpZGFrIGRpa2V0YWh1aSBqZW5pcyBmaWVsZCAiJXMiISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25JRCAlcyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIGdpdmVuIENoYW5nZUlEICVzISd9ID0gJ0tvbmRpc2kgSUQgJXMgdGlkYWsgbWVtaWxpa2kgcGVydWJhaGFuIElEICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBkb2VzIG5vdCBoYXZlIGFuIGFsbG93ZWQgY2hhbmdlIHN0YXRlIHRvIGJlIGRlbGV0ZWQhJ30gPQogICAgICAgICdQZXJ1YmFoYW4gIiVzIiB0aWRhayBtZW1pbGlraSAgcGVydWJhaGFuIHN0YXRlIHlhbmcgYm9sZWggZGloYXB1cyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY2hhbmdlSUQgJXMhJ30gPSAnVGlkYWsgYmlzYSBtZW5naGFwdXMgcGVydWJhaGFuIElEJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSEnfSA9ICdUaWRhayBkYXBhdCBtZW1wZXJiYXJ1aSBwZXJ1YmFoYW4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJ3RpZGFrIGJpc2EgbWVudW5qdWtrYW4gc2VqYXJhaCwga2FyZW5hIHRpZGFrIGFkYSBwZXJ1YmFoYW4gSUQgeWFuZyBkaWJlcmlrYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnUGVydWJhaGFuICIlcyIgdGlkYWsgZGl0ZW11a2FuIGRpIGRhbGFtIGRhdGFiYXNlISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmtub3duIHR5cGUgIiVzIiBlbmNvdW50ZXJlZCEnfSA9ICdKZW5pcyB0aWRhayBkaWtldGFodWkgIiVzIiBkaXRlbXVpISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSGlzdG9yeSd9ID0gJ1ViYWggc2VqYXJhaCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3Rvcnkgem9vbSwgbm8gSGlzdG9yeUVudHJ5SUQgaXMgZ2l2ZW4hJ30gPSAndGlkYWsgYmlzYSBtZW51bmp1a2thbiBzZWphcmFoIHpvb20sIHRpZGFrIGFkYSBTZWphcmFoIEVudHJ5SUQgZGliZXJpa2FuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5RW50cnkgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnU2VqYXJhaCBFbnRyeSAiJXMiIHRpZGFrIGRpdGVtdWthbiBkYWxhbSBkYXRhYmFzZSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29ucy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UgQ0FCIGZvciBDaGFuZ2UgJXMhJ30gPSAnVGlkYWsgZGFwYXQgbWVtcGVyYmFydWkgR2FudGkgQ0FCIHVudHVrIFBlcnViYWhhbiAlcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UgJXMhJ30gPSAnVGlkYWsgZGFwYXQgbWVtcGVyYmFydWkgcGVydWJhaGFuICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTWFuYWdlci5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IENoYW5nZU1hbmFnZXInfSA9ICdJa2h0aXNhcjogUGVydWJhaGFuIG1hbmFqZXInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU15Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgQ0FCJ30gPSAnSWtodGlzYXI6IENBQiBzYXlhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeUNoYW5nZXMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBDaGFuZ2VzJ30gPSAnSWtodGlzYXI6IFBlcnViYWhhbiBTYXlhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeVdvcmtPcmRlcnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBXb3Jrb3JkZXJzJ30gPSAnSWtodGlzYXI6IFBlcmludGFoIEtlcmphIFNheWEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVBJUi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFBJUid9ID0gJ0lraHRpc2FyOiBQSVInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVBTQS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFBTQSd9ID0gJ0lraHRpc2FyOiBQU0EnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnVGF0YWtlcmphICIlcyIgdGlkYWsgZGl0ZW11a2FuIGRpZGFsYW0gZGF0YWJhc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGNyZWF0ZSBvdXRwdXQsIGFzIHRoZSB3b3Jrb3JkZXIgaXMgbm90IGF0dGFjaGVkIHRvIGEgY2hhbmdlISd9ID0KICAgICAgICAnVGlkYWsgZGFwYXQgbWVtYnVhdCBvdXRwdXQsIHNlYmFnYWkgcGVyaW50YWgga2VyamEgdGlkYWsgdGVyaWthdCBwYWRhIHBlcnViYWhhbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGNyZWF0ZSBvdXRwdXQsIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJ1RpZGFrIGRhcGF0IG1lbWJ1YXQgb3V0cHV0LCBrYXJlbmEgdGlkYWsgYWRhIHBlcnViYWhhbiBJRCB5YW5nIGRpYmVyaWthbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93biBjaGFuZ2UgdGl0bGUnfSA9ICdUaWRhayBkaWtldGFodWkgcGVydWJhaGFuIGp1ZHVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyJ30gPSAnVGF0YWtlcmphIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93biB3b3Jrb3JkZXIgdGl0bGUnfSA9ICdUaWRhayBkaWtldGFodWkganVkdWwgcGVyaW50YWgga2VyamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgT3ZlcnZpZXcgKCVzKSd9ID0gJ0lUU00gS2VzZWx1cnVoYW4gcGVyaW50YWgga2VyamEgKCVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkU3RhcnRUaW1lJ30gPSAnV2FrdHUgbXVsYWkgZGlyZW5jYW5ha2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWRFbmRUaW1lJ30gPSAnV2FrdHUgYWtoaXIgZGlyZW5jYW5ha2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbFN0YXJ0VGltZSd9ID0gJ011bGFpIHdha3R1ICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxFbmRUaW1lJ30gPSAnV2FrdHUgYmVyYWtoaXInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVJlc2V0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gcmVzZXQgV29ya09yZGVyICVzIG9mIENoYW5nZSAlcyEnfSA9ICdUaWRhayBiaXNhIG1lLXJlc2V0IFBlcmludGFoIEtlcmphICVzIGRhcmkgcGVydWJhaGFuICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gcmVzZXQgQ2hhbmdlICVzISd9ID0gJ1RpZGFrIGJpc2EgbWUtcmVzZXQgUGVydWJhaGFuICAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVNjaGVkdWxlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogQ2hhbmdlIFNjaGVkdWxlJ30gPSAnSWtodGlzYXI6IFBlcnViYWhhbiBKYWR3YWwnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCd9ID0gJ01lbmd1YmFoIHBlbmNhcmlhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VUaXRsZSd9ID0gJ1ViYWgganVkdWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVycyd9ID0gJ1BlcmludGFoIGtlcmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZVN0YXRlJ30gPSAnVWJhaCBzdGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2VhcmNoIFJlc3VsdCd9ID0gJ01lbmd1YmFoIGhhc2lsIHBlbmNhcmlhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgTnVtYmVyJ30gPSAnVWJhaCBub21vcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrIE9yZGVyIFRpdGxlJ30gPSAnSnVkdWwgcGVyaW50YWgga2VyamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIERlc2NyaXB0aW9uJ30gPSAnTWVuZ3ViYWggZGVza3JpcHNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBKdXN0aWZpY2F0aW9uJ30gPSAnTWVuZ3ViYWgganVzdGlmaWthc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEluc3RydWN0aW9uJ30gPSAnSW5zdHJ1a3NpIHBlcmludGFoIGtlcmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBSZXBvcnQnfSA9ICdMYXBvcmFuIHBlcmludGFoIGtlcmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBQcmlvcml0eSd9ID0gJ1ViYWggcHJpb3JpdGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbXBhY3QnfSA9ICdVYmFoIGRhbXBhayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnRGljaXB0YWthbiBvbGVoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBTdGF0ZSd9ID0gJ1N0YXRlIHBlcmludGFoIGtlcmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBUeXBlJ30gPSAnSmVuaXMgcGVyaW50YWgga2VyamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEFnZW50J30gPSAnUGVyaW50YWgga2VyamEgYWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiZWZvcmUnfSA9ICdTZWJlbHVtJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJ1BlcnViYWhhbiAiJXMidGlkYWsgZGFwYXQgc2VyaWFsLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSB0aGUgdGVtcGxhdGUgIiVzIi4nfSA9ICd0aWRhayBiaXNhIHVwZGF0ZSB0ZW1wbGF0ZSAiJXMiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgY2hhbmdlICIlcyIuJ30gPSAndGlkYWsgYmlzYSBtZW5naGFwdXMgcGVydWJhaGFuICIlcyInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRpbWVTbG90LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlIGNhblwndCBiZSBtb3ZlZCwgYXMgaXQgaGFzIG5vIHdvcmtvcmRlcnMuJ30gPSAncGVydWJhaGFuIHRpZGFrIGRhcGF0IGRpcGluZGFoa2FuLCBrYXJlbmEgdGlkYWsgbWVtaWxpa2kgcGVyaW50YWgga2VyamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciBmaXJzdC4nfSA9ICdwZXJ0YW1hIHRhbWJhaGthbiBwZXJpbnRhaCBrZXJqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgbW92ZSBhIGNoYW5nZSB3aGljaCBhbHJlYWR5IGhhcyBzdGFydGVkISd9ID0gJ1RpZGFrIGRhcGF0IG1lbWluZGFoa2FuIHBlcnViYWhhbiB5YW5nIHN1ZGFoIHRlbGFoIGRpbXVsYWkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBtb3ZlIHRoZSBpbmRpdmlkdWFsIHdvcmtvcmRlcnMgaW5zdGVhZC4nfSA9ICdTaWxha2FuIG1lbWluZGFoa2FuIHBlcmludGFoIGtlcmphIGluZGl2aWR1IHNlYmFnYWkgZ2FudGlueWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjdXJyZW50ICVzIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLid9ID0gJ1NhYXQgaW5pICVzIHRpZGFrIGRhcGF0IGRpdGVudHVrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSAlcyBvZiBhbGwgd29ya29yZGVycyBoYXMgdG8gYmUgZGVmaW5lZC4nfSA9ICclcyBkYXJpIHNlbXVhIHBlcmludGFoIGtlcmphIGhhcnVzIGRpZGVmaW5pc2lrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBtb3ZlIHRpbWUgc2xvdCBmb3Igd29ya29yZGVyICMlcyEnfSA9ICdUaWRhayBiaXNhIGJlcmdlcmFrIHNsb3Qgd2FrdHUgdW50dWsgcGVyaW50YWgga2VyamEgIyVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkICVzIHBlcm1pc3Npb24hJ30gPSAnQW5kYSBwZXJsdSAlcyBpemluISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBUZW1wbGF0ZUlEIGlzIGdpdmVuISd9ID0gJ1RpZGFrIGFkYSBJRCBUZW1wbGF0ZSBkaWJlcmlrYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ1RlbXBsYXRlICIlcyIgdGlkYWsgZGl0ZW11a2FuIGRhbGFtIGRhdGFiYXNlISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSB0ZW1wbGF0ZSAlcyEnfSA9ICdUaWRhayBiaXNhIG1lbmdoYXB1cyB0ZW1wbGF0ZSAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBUZW1wbGF0ZSAlcyEnfSA9ICdUaWRhayBkYXBhdCBtZW1wZXJiYXJ1aSBUZW1wbGF0ZSAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdENBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBUZW1wbGF0ZSAiJXMiISd9ID0gJ1RpZGFrIGRhcGF0IG1lbXBlcmJhcnVpIFRlbXBsYXRlICIlcyIhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSEnfSA9ICdUaWRhayBtYW1wdSBtZW1idWF0IHBlcnViYWhhbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSB3b3Jrb3JkZXIgZnJvbSB0ZW1wbGF0ZSEnfSA9ICdUaWRhayBtYW1wdSBtZW5jaXB0YWthbiBwZXJpbnRhaCBrZXJqYSBkYXJpIFRlbXBsYXRlISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVPdmVydmlldy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFRlbXBsYXRlJ30gPSAnSWtodGlzYXI6IFRlbXBsYXRlJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJBZGQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIG9uIHRoZSBjaGFuZ2UhJ30gPSAnQW5kYSBwZXJsdSAlcyBpemluIHBhZGEgcGVydWJhaGFuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIHdvcmtvcmRlciEnfSA9ICdUaWRhayBkYXBhdCBtZW5hbWJhaGthbiBwZXJpbnRhaCBrZXJqYSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFnZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICdUaWRhayBhZGEgSUQgcGVyaW50YWgga2VyamEgZGliZXJpa2FuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gc2V0IHRoZSB3b3Jrb3JkZXIgYWdlbnQgb2YgdGhlIHdvcmtvcmRlciAiJXMiIHRvIGVtcHR5ISd9ID0KICAgICAgICAnVGlkYWsgbWFtcHUgbWVuZ2F0dXIgYWdlbiBwZXJpbnRhaCBrZXJqYSBkYXJpIHBlcmludGFoIGtlcmphICIlcyIgdW50dWsgbWVuZ29zb25na2FuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIHRoZSB3b3Jrb3JkZXIgIiVzIiEnfSA9ICdUaWRhayBkYXBhdCBtZW1wZXJiYXJ1aSBwZXJpbnRhaCBrZXJqYSAiJXMiISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZmluZCBDaGFuZ2UgZm9yIFdvcmtPcmRlciAlcyEnfSA9ICdUaWRhayBkYXBhdCBtZW1wZXJiYXJ1aSBwZXJpbnRhaCBrZXJqYSAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckRlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgd29ya29yZGVyICVzISd9ID0gJ1RpZGFrIGRhcGF0IG1lbmdoYXB1cyBwZXJpbnRhaCBrZXJqYSAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgV29ya09yZGVyICVzISd9ID0gJ1RpZGFrIGRhcGF0IG1lbXBlcmJhcnVpIFBlcmludGFoIEtlcmphICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJ30gPSAndGlkYWsgYmlzYSBtZW51bmp1a2thbiBzZWphcmFoLCBrYXJlbmEgdGlkYWsgYWRhIElEIFRhdGEgS2VyamEgZGliZXJpa2FuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJ1dvcmsgT3JkZXIgIiVzIiB0aWRhayBkaXRlbXVrYW4gZGFsYW0gZGF0YWJhc2UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6Oid9ID0gJ1Jpd2F5YXQgYmVrZXJqYTo6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5J30gPSAnUml3YXlhdCBwZXJpbnRhaCBrZXJqYSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgZW50cnkgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJ2VudHJpIHNlamFyYWggIiVzIiB0aWRhayBkaXRlbXVrYW4gZGFsYW0gZGF0YWJhc2UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5IFpvb20nfSA9ICdSaXdheWF0IFpvb20gQmVrZXJqYSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyVGFrZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHRha2UgdGhlIHdvcmtvcmRlciAlcyEnfSA9ICdUaWRhayBiaXNhIG1lbmdhbWJpbCBwZXJpbnRhaCBrZXJqYSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgd29ya29yZGVyICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAnUGVyaW50YWgga2VyamEgIiVzIiB0aWRhayBkYXBhdCBzZXJpYWwuJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGF5b3V0L0lUU01DaGFuZ2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWQgY29uZmlnIG9wdGlvbiAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIG9wdGlvbiAlcyBuZWVkcyB0byBiZSBhIEhBU0ggcmVmISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjb25maWcgb3B0aW9uIGZvdW5kIGZvciB0aGUgdmlldyAiJXMiISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaXRsZTogJXMgfCBUeXBlOiAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IENBQnMnfSA9ICdDQUJzIHNheWEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015Q2hhbmdlcy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgQ2hhbmdlcyd9ID0gJ1BlcnViYWhhbiBzYXlhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeVdvcmtPcmRlcnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IFdvcmsgT3JkZXJzJ30gPSAnUGVyaW50YWgga2VyamEgc2F5YSc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNoYW5nZU1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVxdWVzdGVkJ30gPSAnRGltaW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIGFwcHJvdmFsJ30gPSAnYXBwcm92YWwgdGVydHVuZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVqZWN0ZWQnfSA9ICdEaXRvbGFrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FwcHJvdmVkJ30gPSAnRGlzZXR1anVpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luIHByb2dyZXNzJ30gPSAnRGFsYW0gcHJvc2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3BlbmRpbmcgcGlyJ30gPSAnUElSIFRlcnR1bmRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3N1Y2Nlc3NmdWwnfSA9ICdCZXJoYXNpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydmYWlsZWQnfSA9ICdHYWdhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjYW5jZWxlZCd9ID0gJ0RpYmF0YWxrYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmV0cmFjdGVkJ30gPSAnRGljYWJ1dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjcmVhdGVkJ30gPSAnRGljaXB0YWthbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhY2NlcHRlZCd9ID0gJ0RpdGVyaW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlYWR5J30gPSAnU2VkaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYXBwcm92YWwnfSA9ICdQZXJzZXR1anVhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3b3Jrb3JkZXInfSA9ICdwZXJpbnRhaCBrZXJqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiYWNrb3V0J30gPSAnTXVuZ2tpcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydkZWNpc2lvbid9ID0gJ0tlcHV0dXNhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwaXInfSA9ICdQSVInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMnfSA9ICdhZGFsYWgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbm90J30gPSAnYnVrYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZW1wdHknfSA9ICdrb3NvbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbm90IGVtcHR5J30gPSAnYnVrYW4ga29zb25nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGdyZWF0ZXIgdGhhbid9ID0gJ2xlYmloIGJlc2FyIGRhcmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbGVzcyB0aGFuJ30gPSAna3VyYW5nIGRhcmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgYmVmb3JlJ30gPSAnc2ViZWx1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBhZnRlcid9ID0gJ3NldGVsYWgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY29udGFpbnMnfSA9ICdJc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGNvbnRhaW5zJ30gPSAnYnVrYW4gaXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZ2lucyB3aXRoJ30gPSAnRGltdWxhaSBkZW5nYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZW5kcyB3aXRoJ30gPSAnQmVyYWtoaXIgZGVuZ2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3NldCd9ID0gJ0F0dXJhbic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbGlzdCBvZiB0aGUgYWdlbnRzIHdobyBoYXZlIHBlcm1pc3Npb24gdG8gdGFrZSB3b3Jrb3JkZXJzLiBLZXkgaXMgYSBsb2dpbiBuYW1lLiBDb250ZW50IGlzIDAgb3IgMS4nfSA9CiAgICAgICAgJ1NlYnVhaCBkYWZ0YXIgYWdlbiB5YW5nIG1lbWlsaWtpIGl6aW4gdW50dWsgbWVuZXJpbWEgcGVyaW50YWgga2VyamEuIEtleSBhZGFsYWggbmFtYSBsb2dpbi4gS29udGVuIGFkYWxhaCAwIGF0YXUgMS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBsaXN0IG9mIHdvcmtvcmRlciBzdGF0ZXMsIGF0IHdoaWNoIHRoZSBBY3R1YWxTdGFydFRpbWUgb2YgYSB3b3Jrb3JkZXIgd2lsbCBiZSBzZXQgaWYgaXQgd2FzIGVtcHR5IGF0IHRoaXMgcG9pbnQuJ30gPQogICAgICAgICdEYWZ0YXIgc3RhdHVzIHBlcmludGFoIGtlcmphIGRpIG1hbmEgc2ViZW5hcm55YSBTdGFydCBUaW1lIGRhcmkgd29ya29yZGVyIGFrYW4gZGl0ZXRhcGthbiBhcGFrYWggaXR1IGtvc29uZyBwYWRhIHNhYXQgaW5pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyJ30gPSAnVGFtYmFoa2FuIFdvcmsgT3JkZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlciAoZnJvbSBUZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgY2hhbmdlIGZyb20gdGVtcGxhdGUuJ30gPSAnVGFtYmFoIHBlcnViYWhhbiBkYXJpIHRlbXBsYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIGNoYW5nZS4nfSA9ICdUYW1iYWggcGVydWJhaGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciAoZnJvbSB0ZW1wbGF0ZSkgdG8gdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBmcm9tIHRlbXBsYXRlJ30gPSAnVGFtYmFoa2FuIGRhcmkgdGVtcGxhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gb2YgdGhlIENJUCBtYXRyaXguJ30gPSAnTWF0cmlrcyBDSVAgYWRtaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gb2YgdGhlIHN0YXRlIG1hY2hpbmUuJ30gPSAnTWVzaW4gc3RhdGUgYWRtaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlIGFkdmlzb3J5IGJvYXJkcy4nfSA9CiAgICAgICAgJ21vZHVsZSBub3RpZmlrYXNpIGFnZW4gYW50YXIgbXVrYSB1bnR1ayBtZWxpaGF0IG5vbW9yIGRhcmkgcGVydWJhaGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgbWFuYWdlZCBieSB0aGUgdXNlci4nfSA9CiAgICAgICAgJ0FnZW4gbW9kdWwgcGVtYmVyaXRhaHVhbiBhbnRhcm11a2EgdW50dWsgbWVsaWhhdCBqdW1sYWggcGVydWJhaGFuIGRpa2Vsb2xhIG9sZWggcGVuZ2d1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMuJ30gPQogICAgICAgICdBZ2VuIG1vZHVsIHBlbWJlcml0YWh1YW4gYW50YXJtdWthIHVudHVrIG1lbGloYXQganVtbGFoIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2Ygd29ya29yZGVycy4nfSA9CiAgICAgICAgJ01vZHVsIHBlbWJlcml0YXVhbiBkaSBhbnRhcm11a2EgYWdlbiB1bnR1ayBtZWxpaGF0IGp1bWxhaCBwZXJpbnRhaCBrZXJqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgTWVtYmVyIFNlYXJjaCd9ID0gJ0NhcmkgYW5nZ290YSBDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgY2hhbmdlIG1hbmFnZW1lbnQgdG9vbGJhcnMuIERlZmF1bHQ6IDMgaG91cnMgKDE4MCBtaW51dGVzKS4nfSA9CiAgICAgICAgJ3dha3R1IGNhY2hlIGRpIG1lbml0IHVudHVrIHRvb2xiYXIgcGVydWJhaGFuIG1hbmFqZW1lbi4gRGVmYXVsdDogMyBqYW0gKDE4MCBtZW5pdCkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50LiBEZWZhdWx0OiA1IGRheXMgKDcyMDAgbWludXRlcykuJ30gPQogICAgICAgICd3YWt0dSBjYWNoZSBkaSBtZW5pdCB1bnR1ayBtYW5hamVtZW4gcGVydWJhaGFuLiBEZWZhdWx0OiA1IGhhcmkgKDcyMDAgbWVuaXQpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQ0FCIFRlbXBsYXRlcyd9ID0gJ01lbmd1YmFoIHRlbXBsYXRlIENBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSGlzdG9yeS4nfSA9ICdNZW5ndWJhaCBzZWphcmFoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbnZvbHZlZCBQZXJzb25zLid9ID0gJ01lbmd1YmFoIG9yYW5nIHlhbmcgdGVybGliYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdCYXRhcyBtZW5ndWJhaCBrZXNlbHVydWhhbiAiS2VjaWwiICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgT3ZlcnZpZXcuJ30gPSAnTWVuZ3ViYWgga2VzZWx1cnVoYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFByaW50Lid9ID0gJ01lbmd1YmFoIHByaW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZSd9ID0gJ1ViYWggamFkd2FsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZS4nfSA9ICdNZW5ndWJhaCBqYWR3YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20uJ30gPSAnTWVuZ3ViYWggem9vbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIFdvcmtvcmRlciBUZW1wbGF0ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFuZCB3b3Jrb3JkZXIgdGVtcGxhdGVzIGVkaXRlZCBieSB0aGlzIHVzZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhcmVhLid9ID0gJ01lbmd1YmFoIGFyZWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGludm9sdmVkIHBlcnNvbnMgb2YgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGxpbWl0IHBlciBwYWdlIGZvciBDaGFuZ2UgT3ZlcnZpZXcgIlNtYWxsIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ1ViYWggcGVuY2FyaWFuIGJhY2tlbmQgcm91dGVyIGRhcmkgaW50ZXJmYWNlIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbiBFZGl0J30gPSAnRWRpdCBrb25kaXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbiBPdmVydmlldyd9ID0gJ0tvbmRpc2kga2VzZWx1cnVoYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlIHdoaWNoIHNjcmVlbiBzaG91bGQgYmUgc2hvd24gYWZ0ZXIgYSBuZXcgd29ya29yZGVyIGhhcyBiZWVuIGNyZWF0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlcyBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgd2hlbiBwbGFubmVkIHRoZSBzdGFydCB0aW1lIG9yIG90aGVyIHRpbWUgdmFsdWVzIGhhdmUgYmVlbiByZWFjaGVkL3Bhc3NlZC4nfSA9CiAgICAgICAgJ01lbmdrb25maWd1cmFzaSBzZWJlcmFwYSBzZXJpbmcgcGVtYmVyaXRhaHVhbiBkaWtpcmltIGtldGlrYSBkaXJlbmNhbmFrYW4gd2FrdHUgbXVsYWkgYXRhdSB3YWt0dSBsYWlubnlhIHlhbmcgdGVsYWggdGVyY2FwYWkgLyBiZXJsYWx1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgQ2hhbmdlJ30gPSAnTWVtYnVhdCBwZXJ1YmFoYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSAoZnJvbSBUZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgY2hhbmdlIChmcm9tIHRlbXBsYXRlKSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgSVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBub3RpZmljYXRpb25zLid9ID0gJ21lbWJ1YXQgZGFuIG1lbmdlbG9sYSBwZW1iZXJpdGFodWFuIElUU00gTWFuYWplbWVuIFBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB0eXBlIGZvciBhIHdvcmtvcmRlci4gVGhpcyBlbnRyeSBtdXN0IGV4aXN0IGluIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBcJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6VHlwZVwnLid9ID0KICAgICAgICAnSmVuaXMgZGVmYXVsdCB1bnR1ayBwZXJpbnRhaCBrZXJqYS4gQ2F0YXRhbiBpbmkgaGFydXMgYWRhIGRhbGFtIGtlbGFzIGthdGFsb2cgdW11bSBcJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6VHlwZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgc2lnbmFscyBmb3IgZWFjaCB3b3Jrb3JkZXIgc3RhdGUuJ30gPSAnTWVuZGVmaW5pc2lrYW4gc2lueWFsIHVudHVrIHNldGlhcCBuZWdhcmEgcGVyaW50YWgga2VyamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIENoYW5nZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgQ2hhbmdlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFdvcmtvcmRlciB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBXb3Jrb3JkZXIgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNoYW5nZSBsaXN0Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gc2VidWFoIG1vZHVsIGdhbWJhcmFuIHVudHVrIG1lbnVuanVra2FuIHBhbmRhbmdhbiBrZWNpbCBkYXJpIGRhZnRhciBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSB0ZW1wbGF0ZSBsaXN0Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gc2VidWFoIG1vZHVsIGdhbWJhcmFuIHVudHVrIG1lbnVuanVra2FuIHBhbmRhbmdhbiBrZWNpbCBkYXJpIGRhZnRhciB0ZW1wbGF0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBhY2NvdW50ZWQgdGltZS4nfSA9ICdNZW5kZWZpbmlzaWthbiBqaWthIGl0dSBha2FuIG11bmdraW4gdW50dWsgbWVuY2V0YWsgd2FrdHUgZGlwZXJ0YW5nZ3VuZ2phd2Fia2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcHJpbnQgdGhlIHBsYW5uZWQgZWZmb3J0Lid9ID0gJ01lbmRlZmluaXNpa2FuIGppa2EgaXR1IGFrYW4gbXVuZ2tpbiB1bnR1ayBtZW5jZXRhayB1cGF5YSB5YW5nIGRpcmVuY2FuYWthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiByZWFjaGFibGUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUpIGNoYW5nZSBlbmQgc3RhdGVzIHNob3VsZCBiZSBhbGxvd2VkIGlmIGEgY2hhbmdlIGlzIGluIGEgbG9ja2VkIHN0YXRlLid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gamlrYSBkaWNhcGFpIChzZXBlcnRpIHlhbmcgZGlkZWZpbmlzaWthbiBvbGVoIG1lc2luKSBzdGF0ZSBwZXJ1YmFoYW4gYWtoaXIgaGFydXMgZGlpemlua2FuIGppa2EgcGVydWJhaGFuIGRhbGFtIGtlYWRhYW4gdGVya3VuY2kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgcmVhY2hhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lKSB3b3Jrb3JkZXIgZW5kIHN0YXRlcyBzaG91bGQgYmUgYWxsb3dlZCBpZiBhIHdvcmtvcmRlciBpcyBpbiBhIGxvY2tlZCBzdGF0ZS4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGppa2EgZGljYXBhaSAoc2VwZXJ0aSB5YW5nIGRpZGVmaW5pc2lrYW4gb2xlaCBtZXNpbikgcGVyaW50YWgga2VyamEgYWtoaXIgaGFydXMgZGlpemlua2FuIGppa2EgcGVyaW50YWgga2VyamEgZGFsYW0ga2VhZGFhbiB0ZXJrdW5jaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWNjb3VudGVkIHRpbWUgc2hvdWxkIGJlIHNob3duLid9ID0gJ01lbmRpZmluaXNpa2FuIHdha3R1IHVudHVrIGRpdHVuanVra2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzIHNob3VsZCBiZSBzZXQuJ30gPSAnTWVuZGlmaW5pc2lrYW4gd2FrdHUgbXVsYWkgZGFuIHdha3R1IGJlcmFraGlyIGhhcnVzIGJpc2EgZGlhdHVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGNoYW5nZSBzZWFyY2ggYW5kIHRoZSB3b3Jrb3JkZXIgc2VhcmNoIGZ1bmN0aW9ucyBjb3VsZCB1c2UgdGhlIG1pcnJvciBEQi4nfSA9CiAgICAgICAgJ01lbmRpZmluaXNpa2FuIGppa2EgcGVydWJhaGFuIHBlbmNhcmlhbiBkYW4gZnVuZ3NpIHBlbmNhcmlhbiBwZXJpbnRhaCBrZXJqYSBiaXNhIG1lbmdndW5ha2FuIERCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGNoYW5nZSBzdGF0ZSBjYW4gYmUgc2V0IGluIEFnZW50SVRTTUNoYW5nZUVkaXQuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBqaWthIHBlcnViYWhhbiBkYXBhdCBkaWF0dXIgZGFsYW0gQWdlbnRJVFNNQ2hhbmdlRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcGxhbm5lZCBlZmZvcnQgc2hvdWxkIGJlIHNob3duLid9ID0gJ01lbmRlZmluaXNpa2FuIGppa2EgdXBheWEgeWFuZyBkaXJlbmNhbmFrYW4gaGFydXMgZGl0YW1waWxrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBwcmludCBieSBjdXN0b21lci4nfSA9ICdNZW5kZWZpbmlzaWthbiBqaWthIHRhbmdnYWwgeWFuZyBkaW1pbnRhIGhhcnVzIGRpY2V0YWsgb2xlaCBwZWxhbmdnYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzZWFyY2hlZCBieSBjdXN0b21lci4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGppa2EgdGFuZ2dhbCB5YW5nIGRpbWludGEgaGFydXMgZGljYXJpIG9sZWggcGVsYW5nZ2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2V0IGJ5IGN1c3RvbWVyLid9ID0gJ01lbmRlZmluaXNpa2FuIGppa2EgdGFuZ2dhbCB5YW5nIGRpbWludGEgaGFydXMgZGl0ZXRhcGthbiBvbGVoIHBlbGFuZ2dhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNob3duIGJ5IGN1c3RvbWVyLid9ID0gJ01lbmRlZmluaXNpa2FuIGppa2EgdGFuZ2dhbCB5YW5nIGRpbWludGEgaGFydXMgZGl0YW1waWxrYW4gb2xlaCBwZWxhbmdnYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciBzdGF0ZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnTWVuZGVmaW5pc2lrYW4gamlrYSBwZXJpbnRhaCBrZXJqYSBoYXJ1cyBkaXRhbXBpbGthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHRpdGxlIHNob3VsZCBiZSBzaG93bi4nfSA9ICdNZW5kZWZpbmlzaWthbiBqaWthIGp1ZHVsIHBlcmludGFoIGtlcmphIGhhcnVzIGRpdGFtcGlsa2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHNob3duIGdyYXBoIGF0dHJpYnV0ZXMuJ30gPSAnTWVuZGVmaW5pc2lrYW4gYXRyaWJ1dCBncmFmaWsgZGl0YW1waWxrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhhdCBvbmx5IGNoYW5nZXMgY29udGFpbmluZyBXb3Jrb3JkZXJzIGxpbmtlZCB3aXRoIHNlcnZpY2VzLCB3aGljaCB0aGUgY3VzdG9tZXIgdXNlciBoYXMgcGVybWlzc2lvbiB0byB1c2Ugd2lsbCBiZSBzaG93bi4gQW55IG90aGVyIGNoYW5nZXMgd2lsbCBub3QgYmUgZGlzcGxheWVkLid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gYmFod2EgaGFueWEgcGVydWJhaGFuIHlhbmcgbWVuZ2FuZHVuZyBQZXNhbmFuIEtlcmphIHRlcmthaXQgZGVuZ2FuIGxheWFuYW4geWFuZyBwZW5nZ3VuYSBwZWxhbmdnYW4gbWVtaWxpa2kgaXppbiB1bnR1ayBtZW5nZ3VuYWthbiBha2FuIGRpdGFtcGlsa2FuLiBQZXJ1YmFoYW4gbGFpbiB0aWRhayBha2FuIGRpdGFtcGlsa2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSBhbGxvd2VkIHRvIGRlbGV0ZS4nfSA9ICdNZW5kaWZpbmlzaWthbiBwZXJ1YmFoYW4geWFuZyBha2FuIGRpaWppbmthbiB1bnR1ayBkaWhhcHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFBTQSBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIHBlcnViYWhhbiBha2FuIGRpZ3VuYWthbiBzZWJhZ2FpIGZpbHRlciBkYWxhbSBwZXJ1YmFoYW4gUFNBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gcGVydWJhaGFuIGFrYW4gZGlndW5ha2FuIHNlYmFnYWkgZmlsdGVyIGRhbGFtIHBlcnViYWhhbiBqYWR3YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIHBlcnViYWhhbiB5YW5nIGFrYW4gZGlndW5ha2FuIHNlYmFnYWkgZmlsdGVyIGRhbGFtIE15Q0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gcGVydWJhaGFuIHlhbmcgYWthbiBkaWd1bmFrYW4gc2ViYWdhaSBmaWx0ZXIgZGFsYW0gTXlDaGFnZXMgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBwZXJ1YmFoYW4geWFuZyBha2FuIGRpZ3VuYWthbiBzZWJhZ2FpIGZpbHRlciBkYWxhbSBwZXJ1YmFoYW4gbWFuYWplcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIHBlcnViYWhhbiB5YW5nIGFrYW4gZGlndW5ha2FuIHNlYmFnYWkgZmlsdGVyIGRhbGFtIHBlcnViYWhhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIHBlcnViYWhhbiB5YW5nIGFrYW4gZGlndW5ha2FuIHNlYmFnYWkgZmlsdGVyIGRhbGFtIHBlcnViYWhhbiBqYWR3YWwgcGVsYW5nZ2FuICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGNoYW5nZSB0aXRsZSBmb3IgYSBkdW1teSBjaGFuZ2Ugd2hpY2ggaXMgbmVlZGVkIHRvIGVkaXQgYSB3b3Jrb3JkZXIgdGVtcGxhdGUuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBqdWR1bCBwZXJ1YmFoYW4gZGVmYXVsdCB1bnR1ayBwZXJ1YmFoYW4gYm9uZWthIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZW5nZWRpdCBwZXJpbnRhaCBrZXJqYSBUZW1wbGF0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4ga3JpdGVyaWEgc3RhbmRhciBzZW1hY2FtIGRhbGFtIHBlcnViYWhhbiBQU0EgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBrcml0ZXJpYSBzdGFuZGFyIHNlbWFjYW0gZGFsYW0gcGVydWJhaGFuIG1hbmFqZXIgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0gJ01lbmRlZmluaXNpa2FuIGtyaXRlcmlhIHN0YW5kYXIgc2VtYWNhbSBkYWxhbSBwZXJ1YmFoYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBrcml0ZXJpYSBzdGFuZGFyIHNlbWFjYW0gZGkgamFkd2FsIHBlcnViYWhhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4ga3JpdGVyaWEgc3RhbmRhciBzZW1hY2FtIHBlcnViYWhhbiBkYWxhbSBNeSBDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBrcml0ZXJpYSBzdGFuZGFyIHNlbWFjYW0gcGVydWJhaGFuIGRhbGFtIE15Q2hhbmdlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGtyaXRlcmlhIHN0YW5kYXIgc2VtYWNhbSBwZXJ1YmFoYW4gZGFsYW0gcGVzYW5hbiBLZXJqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGtyaXRlcmlhIHN0YW5kYXIgc2VtYWNhbSBwZXJ1YmFoYW4gZGFsYW0gUElSJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4ga3JpdGVyaWEgc3RhbmRhciBzZW1hY2FtIHBlcnViYWhhbiBqYWR3YWwgcGVydWJhaGFuIHBlbGFuZ2dhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4ga3JpdGVyaWEgc3RhbmRhciBzZW1hY2FtIHBlcnViYWhhbiBkYWxhbSB0ZW1wbGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0gJ01lbmRlZmluaXNpa2FuIHVydXRhbiBzdGFuZGFyIHNlbWFjYW0gZGkgTXkgQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0gJ01lbmRlZmluaXNpa2FuIHVydXRhbiBzdGFuZGFyIHNlbWFjYW0gZGkgTXlDaGFuZ2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gdXJ1dGFuIHN0YW5kYXIgc2VtYWNhbSBkaSBwZXNhbmFuIEtlcmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0gJ01lbmRlZmluaXNpa2FuIHVydXRhbiBzdGFuZGFyIHNlbWFjYW0gZGkgUElSJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9ICdNZW5kZWZpbmlzaWthbiB1cnV0YW4gZGVmYXVsdCBkaSBQU0EgcGVydWJhaGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiB1cnV0YW4gc3RhbmRhciBzZW1hY2FtIGRpIHBlcnViYWhhbiBtYW5hamVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0gJ01lbmRlZmluaXNpa2FuIHVydXRhbiBkZWZhdWx0IGRhbGFtIHBlcnViYWhhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIHVydXRhbiBkZWZhdWx0IGRhbGFtIGphZHdhbCBwZXJ1YmFoYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiB1cnV0YW4gZGVmYXVsdCBkYWxhbSBqYWR3YWwgcGVydWJhaGFuIHBlbGFuZ2dhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3Lid9ID0gJ01lbmRlZmluaXNpa2FuIHVydXRhbiBzdGFuZGFyIHNlbWFjYW0gZGkgdGVtcGxhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNhdGVnb3J5IG9mIGEgY2hhbmdlLid9ID0gJ01lbmRlZmluaXNpa2FuIG5pbGFpIGRlZmF1bHQgdW50dWsga2F0ZWdvcmkgcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW1wYWN0IG9mIGEgY2hhbmdlLid9ID0gJ01lbmRlZmluaXNpa2FuIG5pbGFpIGRlZmF1bHQgdW50dWsgZGFtcGFrIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciBjaGFuZ2UgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGplbmlzIGJpZGFuZyBiaWRhbmcgTmlsYWkgQmFuZGluZ2thbiB1bnR1ayBhdHJpYnV0IHBlcnViYWhhbiBkaWd1bmFrYW4gZGFsYW0gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gTmlsYWkgeWFuZyB2YWxpZCBkaXBpbGloLCBUZWtzIGRhbiBUYW5nZ2FsLiBKaWthIHRpcGUgdGlkYWsgZGlkZWZpbmlzaWthbiwgbGFwYW5nYW4gdGlkYWsgYWthbiBkaXRhbXBpbGthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciB3b3Jrb3JkZXIgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGplbmlzIGJpZGFuZyBiaWRhbmcgTmlsYWkgQmFuZGluZ2thbiB1bnR1ayBhdHJpYnV0IHBlcmludGFoIGtlcmphIHlhbmcgZGlndW5ha2FuIGRhbGFtIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIE5pbGFpIHlhbmcgdmFsaWQgeWFuZyBEaXBpbGloLCBUZWtzIGRhbiBUYW5nZ2FsLiBKaWthIHRpcGUgdGlkYWsgZGlkZWZpbmlzaWthbiwgbGFwYW5nYW4gdGlkYWsgYWthbiBkaXRhbXBpbGthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgY2hhbmdlIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGF0cmlidXQgb2JqZWsgeWFuZyBkaXBpbGloIHVudHVrIHBlcnViYWhhbiBvYmp5ZWsgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGF0cmlidXQgb2JqZWsgeWFuZyBkaXBpbGloIHVudHVrIHBlcmludGFoIGtlcmphIGJlbmRhIGRpIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjY291bnRlZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIG9wZXJhdG9yIHlhbmcgZGlwaWxpaCB1bnR1ayBBY2NvdW50ZWRUaW1lIGF0cmlidXQgZGkgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gb3BlcmF0b3IgeWFuZyBkaXBpbGloIHVudHVrIEFjdHVhbEVuZFRpbWUgYXRyaWJ1dCBkaSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDYXRlZ29yeUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBvcGVyYXRvciB5YW5nIGRpcGlsaWggdW50dWsgYXRyaWJ1dCBLYXRlZ29yaSBJRCBkaSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VCdWlsZGVySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIG9wZXJhdG9yIHlhbmcgZGlwaWxpaCB1bnR1ayBhdHJpYnV0IENoYW5nZUJ1aWxkZXJJRCBkaSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VNYW5hZ2VySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIG9wZXJhdG9yIHlhbmcgZGlwaWxpaCB1bnR1ayBhdHJpYnV0IFBlcnViYWhhbiBNYW5hZ2VySWQgZGkgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlU3RhdGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gb3BlcmF0b3IgeWFuZyBkaXBpbGloIHVudHVrIENoYW5nZVN0YXRlSUQgYXRyaWJ1dCBkaSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gb3BlcmF0b3IgeWFuZyBkaXBpbGloIHVudHVrIGF0cmlidXQgUGVydWJhaGFuIEp1ZHVsIGRpIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIER5bmFtaWNGaWVsZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gb3BlcmF0b3IgeWFuZyBkaXBpbGloIHVudHVrIGF0cmlidXQgQmlkYW5nIERpbmFtaXMgZGkgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgSW1wYWN0SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIG9wZXJhdG9yIHlhbmcgZGlwaWxpaCB1bnR1ayBhdHJpYnV0IGJlcmRhbXBhayBkaSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRWZmb3J0IGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBvcGVyYXRvciB5YW5nIGRpcGlsaWggdW50dWsgYXRyaWJ1dCBEaXJlbmNhbmFrYW4gVXBheWEgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZEVuZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIG9wZXJhdG9yIHlhbmcgZGlwaWxpaCB1bnR1ayBQbGFubmVkRW5kVGltZSBhdHJpYnV0IGRpIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIG9wZXJhdG9yIHlhbmcgZGlwaWxpaCB1bnR1ayBhdHJpYnV0IERpcmVuY2FuYWthbiBTdGFydCBUaW1lIGRpIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFByaW9yaXR5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIG9wZXJhdG9yIHlhbmcgZGlwaWxpaCB1bnR1ayBJRCBhdHJpYnV0IFByaW9yaXRhcyBkaSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBSZXF1ZXN0ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBvcGVyYXRvciB5YW5nIGRpcGlsaWggdW50dWsgUmVxdWVzdGVkVGltZSBhdHJpYnV0IGRpIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlckFnZW50SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIG9wZXJhdG9yIHlhbmcgZGlwaWxpaCB1bnR1ayBhdHJpYnV0IFdvcmtPcmRlckFnZW50SUQgZGkgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyTnVtYmVyIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBvcGVyYXRvciB5YW5nIGRpcGlsaWggdW50dWsgYXRyaWJ1dCBXb3JrT3JkZXJOdW1iZXIgZGkgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyU3RhdGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gb3BlcmF0b3IgeWFuZyBkaXBpbGloIHVudHVrIGF0cmlidXQgV29ya09yZGVyU3RhdGVJRCBkaSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gb3BlcmF0b3IgeWFuZyBkaXBpbGloIHVudHVrIGF0cmlidXQgV29ya09yZGVyVGl0bGUgZGkgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVHlwZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBvcGVyYXRvciB5YW5nIGRpcGlsaWggdW50dWsgYXRyaWJ1dCBXb3JrIE9yZGVyIFR5cGVJRCBkaSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwZXJpb2QgKGluIHllYXJzKSwgaW4gd2hpY2ggc3RhcnQgYW5kIGVuZCB0aW1lcyBjYW4gYmUgc2VsZWN0ZWQuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBwZXJpb2RlICh0YWh1biksIGRpIG1hbmEgd2FrdHUgbXVsYWkgZGFuIGJpc2EgZGlwaWxpaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gYXR0cmlidXRlcyBvZiBhIHdvcmtvcmRlciBpbiB0aGUgdG9vbHRpcCBvZiB0aGUgd29ya29yZGVyIGdyYXBoIGluIHRoZSBjaGFuZ2Ugem9vbS4gVG8gc2hvdyB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMgaW4gdGhlIHRvb2x0aXAsIHRoZXkgbXVzdCBiZSBzcGVjaWZpZWQgbGlrZSBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMSwgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTIsIGV0Yy4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGF0cmlidXQgZGl0YW1waWxrYW4gZGFyaSBwZXJpbnRhaCBrZXJqYSBkaSB0b29sdGlwIGRhcmkgZ3JhZmlrIHBlcmludGFoIGtlcmphIGRpIHpvb20gcGVydWJhaGFuLiBVbnR1ayBtZW5hbXBpbGthbiBmaWVsZCB3b3Jrb3JkZXIgZGluYW1pcyBkYWxhbSB0b29sdGlwLCBtZXJla2EgaGFydXMgZGl0ZW50dWthbiBzZXBlcnRpIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUxLCBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMiwgZXRjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gYWNhcmEga29sb20gZGkgR2FudGkgUFNBIGdhbWJhcmFuLiBQaWxpaGFuIGluaSB0aWRhayBiZXJwZW5nYXJ1aCBwYWRhIHBvc2lzaSBrb2xvbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gYWNhcmEga29sb20gZGkgVWJhaCBKYWR3YWwuIFBpbGloYW4gaW5pIHRpZGFrIGJlcnBlbmdhcnVoIHBhZGEgcG9zaXNpIGtvbG9tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNBQiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGFjYXJhIGtvbG9tIGRpIE15IENBQi4gUGlsaWhhbiBpbmkgdGlkYWsgYmVycGVuZ2FydWggcGFkYSBwb3Npc2kga29sb20uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGFjYXJhIGtvbG9tIGRpIFBlcnViYWhhbiBnYW1iYXJhbi4gUGlsaWhhbiBpbmkgdGlkYWsgYmVycGVuZ2FydWggcGFkYSBwb3Npc2kga29sb20uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGFjYXJhIGtvbG9tIGRpIHBlcmludGFoIGtlcmphLiBQaWxpaGFuIGluaSB0aWRhayBiZXJwZW5nYXJ1aCBwYWRhIHBvc2lzaSBrb2xvbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgUElSIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gYWNhcmEga29sb20gZGkgUElSLiBQaWxpaGFuIGluaSB0aWRhayBiZXJwZW5nYXJ1aCBwYWRhIHBvc2lzaSBrb2xvbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBhY2FyYSBrb2xvbSBkYWxhbSBwZXJ1YmFoYW4gbWFuYWplci4gUGlsaWhhbiBpbmkgdGlkYWsgYmVycGVuZ2FydWggcGFkYSBwb3Npc2kga29sb20uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGFjYXJhIGtvbG9tIGRhbGFtIHBlcnViYWhhbi4gUGlsaWhhbiBpbmkgdGlkYWsgYmVycGVuZ2FydWggcGFkYSBwb3Npc2kga29sb20uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBzZWFyY2guIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBhY2FyYSBrb2xvbSBkYWxhbSBwZW5jYXJpYW4gcGVydWJhaGFuLiBQaWxpaGFuIGluaSB0aWRhayBiZXJwZW5nYXJ1aCBwYWRhIHBvc2lzaSBrb2xvbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gYWNhcmEga29sb20gZGkgcGVsYW5nZ2FuIGphZHdhbCBwZXJ1YmFoYW4uIFBpbGloYW4gaW5pIHRpZGFrIGJlcnBlbmdhcnVoIHBhZGEgcG9zaXNpIGtvbG9tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGFjYXJhIGtvbG9tIGRpIHRlbXBsYXRlLiBQaWxpaGFuIGluaSB0aWRhayBiZXJwZW5nYXJ1aCBwYWRhIHBvc2lzaSBrb2xvbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2lnbmFscyBmb3IgZWFjaCBJVFNNQ2hhbmdlIHN0YXRlLid9ID0gJ01lbmRlZmluaXNpa2FuIHNpbnlhbCB1bnR1ayBzZXRpYXAgSVRTTUNoYW5nZSBzdGF0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGVtcGxhdGUgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBqZW5pcyB0ZW1wbGF0ZSB5YW5nIGFrYW4gZGlndW5ha2FuIHNlYmFnYWkgZmlsdGVyIGRhbGFtIHRlbXBsYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gc3RhdGUgcGVyaW50YWgga2VyamEgeWFuZyBha2FuIGRpZ3VuYWthbiBzZWJhZ2FpIGZpbHRlciBkYWxhbSBNeVdvcmtvcmRlcnMgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gcGVyaW50YWgga2VyamEgeWFuZyBha2FuIGRpZ3VuYWthbiBzZWJhZ2FpIGZpbHRlciBkYWxhbSBQSVInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHR5cGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNob3cgdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGplbmlzIHBlcmludGFoIGtlcmphIHlhbmcgYWthbiBkaWd1bmFrYW4gdW50dWsgbWVudW5qdWtrYW4gUElSJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciBub3RpZmljYXRpb25zIHNob3VsZCBiZSBzZW50Lid9ID0gJ01lbmRlZmluaXNpa2FuIGFwYWthaCBwZW1iZXJpdGFodWFuIGhhcnVzIGRpa2lyaW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBhIGNoYW5nZS4nfSA9ICdNZW5naGFwdXMgcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMgb2YgYSBjaGFuZ2UgaGlzdG9yeSBlbnRyeS4nfSA9ICdSaW5jaWFuIGRhcmkgZW50cmkgcGVydWJhaGFuIHNlamFyYWguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgYW4gYWdlbnQgY2FuIGV4Y2hhbmdlIHRoZSBYLWF4aXMgb2YgYSBzdGF0IGlmIGhlIGdlbmVyYXRlcyBvbmUuJ30gPQogICAgICAgICdNZW5lbnR1a2FuIGFwYWthaCBhZ2VuIGRhcGF0IGJlcnR1a2FyIFggamlrYSBpYSBtZW5naGFzaWxrYW4gc2F0dS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyBkb25lIGZvciBjb25maWcgaXRlbSBjbGFzc2VzLid9ID0KICAgICAgICAnTWVuZW50dWthbiBhcGFrYWggbW9kdWwgc3RhdGlzdGlrIHVtdW0gZGFwYXQgbWVuZ2hhc2lsa2FuIHN0YXRpc3RpayB0ZW50YW5nIHBlcnViYWhhbiBkaWxha3VrYW4gdW50dWsga2VsYXMgY29uZmlnIGJhcmFuZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyByZWdhcmRpbmcgY2hhbmdlIHN0YXRlIHVwZGF0ZXMgd2l0aGluIGEgdGltZXBlcmlvZC4nfSA9CiAgICAgICAgJ01lbmVudHVrYW4gYXBha2FoIG1vZHVsIHN0YXRpc3RpayB1bXVtIGRhcGF0IG1lbmdoYXNpbGthbiBzdGF0aXN0aWsgdGVudGFuZyBwZXJ1YmFoYW4gbWVuZ2VuYWkgdXBkYXRlIHBlcnViYWhhbiBkYWxhbSBwZXJpb2RlIHdha3R1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyB0aGUgcmVsYXRpb24gYmV0d2VlbiBjaGFuZ2VzIGFuZCBpbmNpZGVudCB0aWNrZXRzLid9ID0KICAgICAgICAnTWVuZW50dWthbiBhcGFrYWggbW9kdWwgc3RhdGlzdGlrIHVtdW0gZGFwYXQgbWVuZ2hhc2lsa2FuIHN0YXRpc3RpayB0ZW50YW5nIHBlcnViYWhhbiBtZW5nZW5haSBodWJ1bmdhbiBhbnRhcmEgcGVydWJhaGFuIGRhbiB0aWtldCBpbnNpZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzLid9ID0KICAgICAgICAnTWVuZW50dWthbiBhcGFrYWggbW9kdWwgc3RhdGlzdGlrIHVtdW0gZGFwYXQgbWVuZ2hhc2lsa2FuIHN0YXRpc3RpayB0ZW50YW5nIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgdGhlIG51bWJlciBvZiBSZmMgdGlja2V0cyBhIHJlcXVlc3RlciBjcmVhdGVkLid9ID0KICAgICAgICAnTWVuZW50dWthbiBhcGFrYWggbW9kdWwgc3RhdGlzdGlrIHVtdW0gZGFwYXQgbWVuZ2hhc2lsa2FuIHN0YXRpc3RpayB0ZW50YW5nIGp1bWxhaCB0aWtldCBwZW1vaG9uIFJGQyAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgKGZvciBjaGFuZ2VzIGFuZCB3b3Jrb3JkZXJzKSBzaG93biBpbiB0aGUgY2hhbmdlIHByaW50IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ2JpZGFuZyBkaW5hbWlzICh1bnR1ayBwZXJ1YmFoYW4gZGFuIHBlcmludGFoIGtlcmphKSB5YW5nIGRpdGFtcGlsa2FuIGRpIGxheWFyIHBlcnViYWhhbiBjZXRhayBkYXJpIGFudGFybXVrYSBhZ2VuLiBwZW5nYXR1cmFuIG11bmdraW46IDAgPSBOb24tYWt0aWYsIDEgPSBEaWFrdGlma2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ2JpZGFuZyBkaW5hbWlzIGRpdGFtcGlsa2FuIGRhbGFtIHBlcnViYWhhbiBtZW5hbWJhaGthbiBsYXlhciBhbnRhcm11a2EgYWdlbi4gcGVuZ2F0dXJhbiBtdW5na2luOiAwID0gTm9uIGFrdGlmLCAxID0gQWt0aWZrYW4sIDIgPSBBa3RpZmthbiBkYW4gZGlwZXJsdWthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnYmlkYW5nIGRpbmFtaXMgZGl0YW1waWxrYW4gZGkgbGF5YXIgcGVydWJhaGFuIG1lbmdlZGl0IGFudGFybXVrYSBhZ2VuLiBwZW5nYXR1cmFuIG11bmdraW46IDAgPSBOb24gYWt0aWYsIDEgPSBBa3RpZiwgMiA9IEFrdGlma2FuIGRhbiBkaXBlcmx1a2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICdiaWRhbmcgZGluYW1pcyBkaXRhbXBpbGthbiBkaSBsYXlhciBwZXJ1YmFoYW4gcGVuY2FyaWFuIGRhcmkgYW50YXJtdWthIGFnZW4uIHBlbmdhdHVyYW4gbXVuZ2tpbjogMCA9IE5vbiBha3RpZiwgMSA9IERpYWt0aWZrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2Ugem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICdiaWRhbmcgZGluYW1pcyBkaXRhbXBpbGthbiBkaSBsYXlhciBwZXJ1YmFoYW4gem9vbSBkYXJpIGFudGFybXVrYSBhZ2VuLiBwZW5nYXR1cmFuIG11bmdraW46IDAgPSBOb24gYWt0aWYsIDEgPSBEaWFrdGlma2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ2JpZGFuZyBkaW5hbWlzIGRpdGFtcGlsa2FuIGRhbGFtIHVydXRhbiBrZXJqYSBtZW5hbWJhaGthbiBsYXlhciBhbnRhcm11a2EgYWdlbi4gcGVuZ2F0dXJhbiBtdW5na2luOiAwID0gTm9uIGFrdGlmLCAxID0gQWt0aWZrYW4sIDIgPSBBa3RpZmthbiBkYW4gZGlwZXJsdWthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnYmlkYW5nIGRpbmFtaXMgZGl0YW1waWxrYW4gZGFsYW0gdXJ1dGFuIGtlcmphIG1lbmdlZGl0IGxheWFyIGFudGFybXVrYSBhZ2VuLiBwZW5nYXR1cmFuIG11bmdraW46IDAgPU5vbiBha3RpZiwgMSA9IEFrdGlma2FuLCAyID0gQWt0aWZrYW4gZGFuIGRpcGVybHVrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgcmVwb3J0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnYmlkYW5nIGRpbmFtaXMgZGl0YW1waWxrYW4gZGFsYW0gdXJ1dGFuIGtlcmphIGxheWFyIGxhcG9yYW4gZGFyaSBhbnRhcm11a2EgYWdlbi4gcGVuZ2F0dXJhbiBtdW5na2luOiAwID0gTm9uIGFrdGlmLCAxID0gQWt0aWZrYW4sIDIgPSBBa3RpZmthbiBkYW4gZGlwZXJsdWthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ2JpZGFuZyBkaW5hbWlzIGRpdGFtcGlsa2FuIGRpIGxheWFyIHpvb20gcGVyaW50YWgga2VyamEgZGFyaSBpbnRlcmZhY2UgYWdlbi4gcGVuZ2F0dXJhbiBtdW5na2luOiAwID0gVGlkYWsgZGlha3RpZmthbiwgMSA9IERpYWt0aWZrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWNGaWVsZCBldmVudCBtb2R1bGUgdG8gaGFuZGxlIHRoZSB1cGRhdGUgb2YgY29uZGl0aW9ucyBpZiBkeW5hbWljIGZpZWxkcyBhcmUgYWRkZWQsIHVwZGF0ZWQgb3IgZGVsZXRlZC4nfSA9CiAgICAgICAgJ0RpbmFtaXMgbW9kdWwgYWNhcmEgTGFwYW5nYW4gdW50dWsgbWVuYW5nYW5pIHVwZGF0ZSBrb25kaXNpIGppa2EgYmlkYW5nIHlhbmcgZGluYW1pcyBkaXRhbWJhaGthbiwgZGlwZXJiYXJ1aSBhdGF1IGRpaGFwdXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBjaGFuZ2UuJ30gPSAnTWVuZ2VkaXQgcGVydWJhaGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcndhcmQgc2NoZWR1bGUgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb3ZlciBhcHByb3ZlZCBjaGFuZ2VzLid9ID0KICAgICAgICAnUGVydWJhaGFuIGJhaHdhIGphZHdhbCBkaW1hanVrYW4gLiBJa2h0aXNhciBsZWJpaCBwZXJ1YmFoYW4gZGlzZXR1anVpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IFpvb20nfSA9ICdzZWphcmFoIFpvb20vRGVrYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ0FCIFRlbXBsYXRlcy4nfSA9ICdJVFNNIG1lbmd1YmFoIHRlbXBsYXRlIENBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gRWRpdC4nfSA9ICdJVFNNIG1lbmd1YmFoIGtvbmRpc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ29uZGl0aW9uIE92ZXJ2aWV3Lid9ID0gJ1BlcnViYWhhbiBLb25kaXNpIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBOb3RpZmljYXRpb25zJ30gPSAnUGVydWJhaGFuIFBlbWJlcml0YWh1YW4gTWFuYWplbWVuIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlciBPdmVydmlldy4nfSA9ICdNZW5ndWJhaCBtYW5hamVyIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgUElSIE92ZXJ2aWV3Lid9ID0gJ01lbmd1YmFoIFBJUiBJVFNNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIG5vdGlmaWNhdGlvbiBydWxlcyd9ID0gJ01lbmd1YmFoIHBlcmF0dXJhbiBub3RpZmlrYXNpIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VzJ30gPSAnUGVydWJhaGFuIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeUNBQiBPdmVydmlldy4nfSA9ICdJa2h0aXNhciBNeUNBQiBJVFNNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlDaGFuZ2VzIE92ZXJ2aWV3Lid9ID0gJ0lraHRpc2FyIE15Q2hhbmdlcyBJVFNNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlXb3Jrb3JkZXJzIE92ZXJ2aWV3Lid9ID0gJ0lraHRpc2FyIE15V29ya29yZGVycyBJVFNNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRGVsZXRlLid9ID0gJ01lbmdoYXB1cyB0ZW1wbGF0ZSBJVFNNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDQUIuJ30gPSAnSVRTTSBtZW5nZWRpdCB0ZW1wbGF0ZSBDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0IENvbnRlbnQuJ30gPSAnTWVuZ2VkaXQgaXNpIHRlbXBsYXRlIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0Lid9ID0gJ01lbmdlZGl0IHRlbXBsYXRlIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBPdmVydmlldy4nfSA9ICdUZW1wbGF0ZSBJVFNNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgY2xlYW5zIHVwIGNvbmRpdGlvbnMuJ30gPSAnSVRTTSBhY2FyYSBtb2R1bCB5YW5nIG1lbWJlcnNpaGthbiBrb25kaXNpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGNhY2hlIGZvciBhIHRvb2xiYXIuJ30gPSAnSVRTTSBhY2FyYSBtb2R1bCB5YW5nIG1lbmdoYXB1cyBjYWNoZSB1bnR1ayB0b29sYmFyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICdJVFNNIGFjYXJhIG1vZHVsIHlhbmcgbWVuZ2hhcHVzIHNlamFyYWggcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IG1hdGNoZXMgY29uZGl0aW9ucyBhbmQgZXhlY3V0ZXMgYWN0aW9ucy4nfSA9CiAgICAgICAgJ0lUU00gYWNhcmEgbW9kdWwgeWFuZyBjb2NvayBrb25kaXNpIGRhbiBtZW5nZWtzZWt1c2kgdGluZGFrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgc2VuZHMgbm90aWZpY2F0aW9ucy4nfSA9ICdJVFNNIGFjYXJhIG1vZHVsIHlhbmcgbWVuZ2lyaW1rYW4gcGVtYmVyaXRhaHVhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJ30gPSAnSVRTTSBhY2FyYSBtb2R1bCB5YW5nIHVwZGF0ZSBzZWphcmFoIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNvbmRpdGlvbnMuJ30gPSAnSVRTTSBhY2FyYSBtb2R1bCB5YW5nIHVwZGF0ZSBzZWphcmFoIGtvbmRpc2kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiB3b3Jrb3JkZXJzLid9ID0gJ0lUU00gYWNhcmEgbW9kdWwgeWFuZyB1cGRhdGUgc2VqYXJhaCBwZXJpbnRhaCBrZXJqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gcmVjYWxjdWxhdGUgdGhlIHdvcmtvcmRlciBudW1iZXJzLid9ID0gJ0lUU00gYWNhcmEgbW9kdWwgdW50dWsgbWVuZ2hpdHVuZyBhbmdrYSBwZXJpbnRhaCBrZXJqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gc2V0IHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBvZiB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAnSVRTTSBhY2FyYSBtb2R1bCB1bnR1ayBtZW5nYXR1ciBzZWJlbmFybnlhIG11bGFpIGRhbiBha2hpciBkYXJpIHBlcmludGFoIGtlcmphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNQ2hhbmdlJ30gPSAnUGVydWJhaGFuIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTVdvcmtPcmRlcid9ID0gJ1RhdGEgS2VyamEgSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBmcmVxdWVuY3kgaXMgXCdyZWd1bGFybHlcJywgeW91IGNhbiBjb25maWd1cmUgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IChldmVyeSBYIGhvdXJzKS4nfSA9CiAgICAgICAgJ0ppa2EgZnJla3VlbnNpIFwndGVyYXR1clwnLCBBbmRhIGRhcGF0IG1lbmdrb25maWd1cmFzaSBzZWJlcmFwYSBzZXJpbmcgcGVtYmVyaXRhaHVhbiBkaWtpcmltIChzZXRpYXAgWCBqYW0pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9nZmlsZSBmb3IgdGhlIElUU00gY2hhbmdlIGNvdW50ZXIuIFRoaXMgZmlsZSBpcyB1c2VkIGZvciBjcmVhdGluZyB0aGUgY2hhbmdlIG51bWJlcnMuJ30gPQogICAgICAgICdMb2cgZmlsZSB1bnR1ayBjb3VudGVyIHBlcnViYWhhbiBJVFNNLiBGaWxlIGluaSBkaWd1bmFrYW4gdW50dWsgbWVtYnVhdCBhbmdrYSBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvb2t1cCBvZiBDQUIgbWVtYmVycyBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAnTG9va3VwIGFuZ2dvdGEgQ0FCIHVudHVrIHBlbGVuZ2thcGFuIG90b21hdGlzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rdXAgb2YgYWdlbnRzLCB1c2VkIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICdMb29rdXAgYWdlbiwgeWFuZyBkaWd1bmFrYW4gdW50dWsgbWVsZW5na2FwaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIGlmIFdvcmtPcmRlckFkZCBvciBXb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUgc2hvdWxkIGJlIHBlcm1pdHRlZC4nfSA9CiAgICAgICAgJ01vZHVsIHVudHVrIG1lbWVyaWtzYSBhcGFrYWggV29ya09yZGVyQWRkIGF0YXUgV29yayBPcmRlciBBZGRGcm9tVGVtcGxhdGUgaGFydXMgZGlpamlua2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIENBQiBtZW1iZXJzLid9ID0gJ01vZHVsIHVudHVrIG1lbWVyaWtzYSBhbmdnb3RhIENBQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBhZ2VudC4nfSA9ICdNb2R1bCB1bnR1ayBtZW1lcmlrc2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgYnVpbGRlci4nfSA9ICdNb2R1bCB1bnR1ayBtZW1lcmlrc2EgcGVydWJhaGFuIHBlbWJhbmd1bic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGNoYW5nZSBtYW5hZ2VyLid9ID0gJ01vZHVsIHVudHVrIG1lbWVyaWtzYSBwZXJ1YmFoYW4gbWFuYWplcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIHdvcmtvcmRlciBhZ2VudC4nfSA9ICdNb2R1bCB1bnR1ayBtZW1lcmlrc2EgYWdlbiBwZXJpbnRhaCBrZXJqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgbm8gd29ya29yZGVyIGFnZW50IGlzIHNldC4nfSA9ICdNb2R1bCB1bnR1ayBtZW1lcmlrc2EgYXBha2FoIGFkYSBhZ2VuIHBlcmludGFoIGtlcmphIGRpYXR1ci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGFnZW50IGlzIGNvbnRhaW5lZCBpbiB0aGUgY29uZmlndXJlZCBsaXN0Lid9ID0KICAgICAgICAnTW9kdWwgdW50dWsgbWVtZXJpa3NhIGFwYWthaCBhZ2VuIHlhbmcgdGVya2FuZHVuZyBkYWxhbSBkYWZ0YXIgZGlrb25maWd1cmFzaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYSBsaW5rIHRvIGNyZWF0ZSBhIGNoYW5nZSBmcm9tIHRoaXMgdGlja2V0LiBUaGUgdGlja2V0IHdpbGwgYmUgYXV0b21hdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgbmV3IGNoYW5nZS4nfSA9CiAgICAgICAgJ01vZHVsIHVudHVrIG1lbnVuanVra2FuIGxpbmsgdW50dWsgbWVtYnVhdCBwZXJ1YmFoYW4gZGFyaSB0aWtldCBpbmkuIHRpa2V0IGFrYW4gb3RvbWF0aXMgdGVyaHVidW5nIGRlbmdhbiBwZXJ1YmFoYW4gYmFydS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBUaW1lIFNsb3QuJ30gPSAnUGluZGFoIFdha3R1IFNsb3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgYWxsIHdvcmtvcmRlcnMgaW4gdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IChmcm9tIHRlbXBsYXRlKSd9ID0gJ0JhcnUgKGRhcmkgdGVtcGxhdGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgdXNlcnMgb2YgdGhlc2UgZ3JvdXBzIGhhdmUgdGhlIHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0aWNrZXQgdHlwZXMgYXMgZGVmaW5lZCBpbiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiBpZiB0aGUgZmVhdHVyZSAiVGlja2V0OjpBY2w6Ok1vZHVsZSMjIzIwMC1UaWNrZXQ6OkFjbDo6TW9kdWxlIiBpcyBlbmFibGVkLid9ID0KICAgICAgICAnSGFueWEgcGVuZ2d1bmEgZGFyaSBrZWxvbXBvay1rZWxvbXBvayBpbmkgbWVtaWxpa2kgaXppbiB1bnR1ayBtZW5nZ3VuYWthbiBqZW5pcyB0aWtldCBzZWJhZ2FpbWFuYSBkaWRlZmluaXNpa2FuIGRhbGFtICJJVFNNIFBlcnViYWhhbiA6OiBBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiIGppa2EgZml0dXIgIlRpY2tldCA6OiBBY2wgOjogTW9kdWwgIyMjIDIwMC1UaWNrZXQgOjogQWNsIDo6IE1vZHVsIiBkaWFrdGlma2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIGFsbCBDaGFuZ2VzLid9ID0gJ0dhbWJhcmFuIGF0YXMgc2VtdWEgUGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQSVInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldyknfSA9ICdQSVIgKFBvc3QgSW1wbGVtZW50YXNpIFJldmlldyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUFNBJ30gPSAnUFNBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBVc2VyQ3JlYXRlV29ya09yZGVyTmV4dE1hc2sgb2JqZWN0IGluIHRoZSBwcmVmZXJlbmNlIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1BhcmFtZXRlciB1bnR1ayBQZW5nZ3VuYSBCdWF0IFdvcmtPcmRlck5leHRNYXNrIG9iamVrIGRhbGFtIHBhbmRhbmdhbiBwcmVmZXJlbnNpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjaGFuZ2VzIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIGNoYW5nZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlciB1bnR1ayBoYWxhbWFuIChkaSBtYW5hIHBlcnViYWhhbiBha2FuIGRpdGFtcGlsa2FuKSBkYXJpIGdhbWJhcmFuIHBlcnViYWhhbiBrZWNpbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJlc2VudHMgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNob3cgdGhlIGludm9sdmVkIHBlcnNvbnMgaW4gYSBjaGFuZ2UsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBjaGFuZ2UgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnlhamlrYW4gbGluayBkYWxhbSBtZW51IHVudHVrIG1lbnVuanVra2FuIG9yYW5nLW9yYW5nIHlhbmcgdGVybGliYXQgZGFsYW0gcGVydWJhaGFuLCBkYWxhbSB0YW1waWxhbiB6b29tIHBlcnViYWhhbiB0ZXJzZWJ1dCBkYWxhbSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSAoUFNBKSd9ID0gJ1Byb3lla3NpIExheWFuYW4gS2V0ZXJzZWRpYWFuIChQU0EpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSAoUFNBKSBvZiBjaGFuZ2VzLiBPdmVydmlldyBvZiBhcHByb3ZlZCBjaGFuZ2VzIGFuZCB0aGVpciBzZXJ2aWNlcy4nfSA9CiAgICAgICAgJ1Byb3lla3NpIExheWFuYW4gS2V0ZXJzZWRpYWFuIChQU0EpIHBlcnViYWhhbi4gSWtodGlzYXIgcGVydWJhaGFuIGRpc2V0dWp1aSBkYW4gbGF5YW5hbiBtZXJla2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgaW4gb3JkZXIgZm9yIGFuIGFnZW50IHRvIHRha2UgYSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICdoYWsgZGlwZXJsdWthbiBhZ2FyIGFnZW4gdW50dWsgbWVuZ2FtYmlsIHBlcmludGFoIGtlcmphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGFjY2VzcyB0aGUgb3ZlcnZpZXcgb2YgYWxsIGNoYW5nZXMuJ30gPSAnaGFrIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZW5nYWtzZXMgZ2FtYmFyYW4gZGFyaSBzZW11YSBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWRkIGEgd29ya29yZGVyLid9ID0gJ2hhayBkaXBlcmx1a2FuIHVudHVrIG1lbmFtYmFoa2FuIHBlcmludGFoIGtlcmphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNoYW5nZSB0aGUgd29ya29yZGVyIGFnZW50Lid9ID0gJ2hhayBkaXBlcmx1a2FuIHVudHVrIG1lbmd1YmFoIGFnZW4gcGVyaW50YWgga2VyamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZS4nfSA9ICdoYWsgeWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbWJ1YXQgdGVtcGxhdGUgZGFyaSBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZXNcJyBDQUIuJ30gPQogICAgICAgICdoYWsgeWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbWJ1YXQgdGVtcGxhdGUgZGFyaSBwZXJ1YmFoYW4gQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIHdvcmtvcmRlci4nfSA9ICdoYWsgeWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbWJ1YXQgdGVtcGxhdGUgZGFyaSBwZXJpbnRhaCBrZXJqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgY2hhbmdlcyBmcm9tIHRlbXBsYXRlcy4nfSA9ICdoYWsgeWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbWJ1YXQgcGVydWJhaGFuIGRhcmkgdGVtcGxhdGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMuJ30gPSAnaGFrIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZW1idWF0IHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgYSB0ZW1wbGF0ZS4nfSA9ICdoYWsgZGlwZXJsdWthbiB1bnR1ayBtZW5naGFwdXMgdGVtcGxhdGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgd29ya29yZGVyLid9ID0gJ2hhayBkaXBlcmx1a2FuIHVudHVrIG1lbmdoYXB1cyBwZXJpbnRhaCBrZXJqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY2hhbmdlcy4nfSA9ICdoYWsgZGlwZXJsdWthbiB1bnR1ayBtZW5naGFwdXMgcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgYSB0ZW1wbGF0ZS4nfSA9ICdoYWsgZGlwZXJsdWthbiB1bnR1ayBtZW5nZWRpdCB0ZW1wbGF0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgd29ya29yZGVyLid9ID0gJ2hhayBkaXBlcmx1a2FuIHVudHVrIG1lbmdlZGl0IHBlcmludGFoIGtlcmphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgY2hhbmdlcy4nfSA9ICdoYWsgZGlwZXJsdWthbiB1bnR1ayBtZW5nZWRpdCBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJ2hhayBkaXBlcmx1a2FuIHVudHVrIG1lbmdlZGl0IGtvbmRpc2kgcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgYSB0ZW1wbGF0ZS4nfSA9ICdoYWsgZGlwZXJsdWthbiB1bnR1ayBtZW5nZWRpdCBpc2kgZGFyaSB0ZW1wbGF0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBpbnZvbHZlZCBwZXJzb25zIG9mIGEgY2hhbmdlLid9ID0KICAgICAgICAnaGFrIGRpcGVybHVrYW4gdW50dWsgbWVuZ2VkaXQgb3JhbmcgeWFuZyB0ZXJsaWJhdCBkYXJpIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBtb3ZlIGNoYW5nZXMgaW4gdGltZS4nfSA9ICdoYWsgeWFuZyBkaWJ1dHVoa2FuIHVudHVrIG1lbWluZGFoa2FuIHBlcnViYWhhbiB3YWt0dS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBwcmludCBhIGNoYW5nZS4nfSA9ICdoYWsgeWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmNldGFrIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byByZXNldCBjaGFuZ2VzLid9ID0gJ2hhayBkaXBlcmx1a2FuIHVudHVrIG1lLXJlc2V0IHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGEgd29ya29yZGVyLid9ID0gJ2hhayBkaXBlcmx1a2FuIHVudHVrIG1lbGloYXQgcGVyaW50YWgga2VyamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBjaGFuZ2VzLid9ID0gJ2hhayBkaXBlcmx1a2FuIHVudHVrIG1lLXJldmlldyBNZWxpaGF0IGhhbCBQZXJpbnRhaCBrZXJqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyBhIENBQiBtZW1iZXIuJ30gPQogICAgICAgICdoYWsgZGlwZXJsdWthbiB1bnR1ayBtZWxpaGF0IGRhZnRhciBwZXJ1YmFoYW4gZGkgbWFuYSBwZW5nZ3VuYSBhZGFsYWggYW5nZ290YSBDQUIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBsaXN0IG9mIGNoYW5nZXMgd2hlcmUgdGhlIHVzZXIgaXMgdGhlIGNoYW5nZSBtYW5hZ2VyLid9ID0KICAgICAgICAnaGFrIGRpcGVybHVrYW4gdW50dWsgbWVsaWhhdCBkYWZ0YXIgcGVydWJhaGFuIGRpIG1hbmEgcGVuZ2d1bmEgYWRhbGFoIHBlcnViYWhhbiBtYW5hamVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBvdmVydmlldyBvdmVyIGFsbCB0ZW1wbGF0ZXMuJ30gPSAnaGFrIGRpcGVybHVrYW4gdW50dWsgbWVsaWhhdCBnYW1iYXJhbiBhdGFzIHNlbXVhIHRlbXBsYXRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGNvbmRpdGlvbnMgb2YgY2hhbmdlcy4nfSA9ICdoYWsgZGlwZXJsdWthbiB1bnR1ayBtZWxpaGF0IGtvbmRpc2kgcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UuJ30gPSAnaGFrIGRpcGVybHVrYW4gdW50dWsgbWVsaWhhdCBzZWphcmFoIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyLid9ID0gJ2hhayBkaXBlcmx1a2FuIHVudHVrIG1lbGloYXQgc2VqYXJhaCBwZXJpbnRhaCBrZXJqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSBjaGFuZ2UuJ30gPSAnaGFrIGRpcGVybHVrYW4gdW50dWsgbWVsaWhhdCB6b29tIHNlamFyYWggcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgem9vbSBvZiBhIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJ2hhayBkaXBlcmx1a2FuIHVudHVrIG1lbGloYXQgem9vbSBzZWphcmFoIHBlcmludGFoIGtlcmphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgQ2hhbmdlIFNjaGVkdWxlLid9ID0gJ2hhayBkaXBlcmx1a2FuIHVudHVrIG1lbGloYXQgZGFmdGFyIFBlcnViYWhhbiBKYWR3YWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2UgUFNBLid9ID0gJ2hhayBkaXBlcmx1a2FuIHVudHVrIG1lbGloYXQgZGFmdGFyIHBlcnViYWhhbiBQU0EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2VzIHdpdGggYW4gdXBjb21pbmcgUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldykuJ30gPQogICAgICAgICdoYWsgZGlwZXJsdWthbiB1bnR1ayBtZWxpaGF0IGRhZnRhciBwZXJ1YmFoYW4gZGVuZ2FuIFBJUiBtZW5kYXRhbmcgKFBvc3QgUGVsYWtzYW5hYW4gUmV2aWV3KS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biBjaGFuZ2VzLid9ID0gJ2hhayBkaXBlcmx1a2FuIHVudHVrIG1lbGloYXQgZGFmdGFyIHBlcnViYWhhbiBzZW5kaXJpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIHdvcmtvcmRlcnMuJ30gPSAnaGFrIGRpcGVybHVrYW4gdW50dWsgbWVsaWhhdCBkYWZ0YXIgcGVyaW50YWgga2VyamEgc2VuZGlyaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB3cml0ZSBhIHJlcG9ydCBmb3IgdGhlIHdvcmtvcmRlci4nfSA9ICdoYWsgZGlwZXJsdWthbiB1bnR1ayBtZW51bGlzIGxhcG9yYW4gdW50dWsgcGVyaW50YWgga2VyamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICdVbGFuZyBwZXJ1YmFoYW4gZGFuIHBlcmludGFoIGtlcmphIG55YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIHRhc2sgdG8gY2hlY2sgaWYgc3BlY2lmaWMgdGltZXMgaGF2ZSBiZWVuIHJlYWNoZWQgaW4gY2hhbmdlcyBhbmQgd29ya29yZGVycy4nfSA9CiAgICAgICAgJ3R1Z2FzIGRpamFsYW5rYW4gdW50dWsgbWVtZXJpa3NhIGFwYWthaCB3YWt0dSB0ZXJ0ZW50dSB0ZWxhaCBkaWNhcGFpIGRhbGFtIHBlcnViYWhhbiBkYW4gcGVyaW50YWgga2VyamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgY2hhbmdlIGFzIGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgd29ya29yZGVyIGFzIGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjaGVkdWxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjcmVlbiBhZnRlciBjcmVhdGluZyBhIHdvcmtvcmRlcid9ID0gJ0xheWFyIHNldGVsYWggbWVtYnVhdCBwZXJpbnRhaCBrZXJqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ2hhbmdlcyd9ID0gJ0NhcmkgcGVydWJhaGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDaGFuZ2VzLid9ID0gJ0NhcmkgUGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjaGFuZ2UgbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjaGFuZ2UgbnVtYmVyLCB0aGUgU3lzdGVtSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkIHdpdGggU3lzdGVtSUQuY291bnRlciBmb3JtYXQgKGUuZy4gMTAwMTE4LCAxMDAxMTkpLiBXaXRoICJEYXRlIiwgdGhlIGNoYW5nZSBudW1iZXJzIHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHRoZSBjdXJyZW50IGRhdGUgYW5kIGEgY291bnRlcjsgdGhpcyBmb3JtYXQgbG9va3MgbGlrZSBZZWFyLk1vbnRoLkRheS5jb3VudGVyLCBlLmcuIDIwMTAwNjI0MDAwMDEsIDIwMTAwNjI0MDAwMDIuIFdpdGggIkRhdGVDaGVja3N1bSIsIHRoZSBjb3VudGVyIHdpbGwgYmUgYXBwZW5kZWQgYXMgY2hlY2tzdW0gdG8gdGhlIHN0cmluZyBvZiBkYXRlIHBsdXMgdGhlIFN5c3RlbUlELiBUaGUgY2hlY2tzdW0gd2lsbCBiZSByb3RhdGVkIG9uIGEgZGFpbHkgYmFzaXMuIFRoaXMgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuU3lzdGVtSUQuQ291bnRlci5DaGVja1N1bSwgZS5nLiAyMDEwMDYyNDEwMDAwMDE3LCAyMDEwMDYyNDEwMDAwMDI2Lid9ID0KICAgICAgICAnTWVtaWxpaCBtb2R1bCBqdW1sYWggcGVydWJhaGFuIHBlbWJhbmdraXQuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnQganVtbGFoIHBlcnViYWhhbiwgU3lzdGVtSUQgZGFuIG1lamEgeWFuZyBkaWd1bmFrYW4gZGVuZ2FuIGZvcm1hdCB5YW5nIFN5c3RlbUlELmNvdW50ZXIgKE1pc2FsbnlhIDEwMC4xMTgsIDEwMC4xMTkpLiBEZW5nYW4gIlRhbmdnYWwiLCBhbmdrYSBwZXJ1YmFoYW4gYWthbiBkaWhhc2lsa2FuIG9sZWggdGFuZ2dhbCBkYW4gY291bnRlcjsgZm9ybWF0IGluaSB0YW1wYWsgc2VwZXJ0aSBZZWFyLk1vbnRoLkRheS5jb3VudGVyLCBtaXNhbG55YSAyMDEwMDYyNDAwMDAxLCAyMDEwMDYyNDAwMDAyLiBEZW5nYW4gIkRhdGVDaGVja3N1bSIsIGNvdW50ZXIgYWthbiBkaXRhbWJhaGthbiBzZWJhZ2FpIGNoZWNrc3VtIHVudHVrIHN0cmluZyBkYXJpIHRhbmdnYWwgZGl0YW1iYWggU3lzdGVtSUQuIGNoZWNrc3VtIGFrYW4gZGlwdXRhciBzZXRpYXAgaGFyaS4gRm9ybWF0IGluaSB0ZXJsaWhhdCBzZXBlcnRpIFllYXIuTW9udGguRGF5LlN5c3RlbUlELkNvdW50ZXIuQ2hlY2tTdW0sIG1pc2FsbnlhIDIwMTAwNjI0MTAwMDAwMTcsIDIwMTAwNjI0MTAwMDAwMjYuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgYWdlbnQgZm9yIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50SVRTTUNoYW5nZVpvb20gYW5kIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJ30gPQogICAgICAgICdNZW5nYXR1ciB0aW5nZ2kgZGVmYXVsdCAoZGFsYW0gcGlrc2VsKSBiaWRhbmcgSFRNTCBpbmxpbmUgZGkgQWdlbnRJVFNNQ2hhbmdlWm9vbSBkYW4gQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRJVFNNQ2hhbmdlWm9vbSBhbmQgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nfSA9CiAgICAgICAgJ01lbmdhdHVyIGtldGluZ2dpYW4gbWFrc2ltdW0gKGRhbGFtIHBpa3NlbCkgYmlkYW5nIEhUTUwgaW5saW5lIGRpIEFnZW50SVRTTUNoYW5nZVpvb20gZGFuIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIG1pbmltYWwgY2hhbmdlIGNvdW50ZXIgc2l6ZSAoaWYgIkF1dG9JbmNyZW1lbnQiIHdhcyBzZWxlY3RlZCBhcyBJVFNNQ2hhbmdlOjpOdW1iZXJHZW5lcmF0b3IpLiBEZWZhdWx0IGlzIDUsIHRoaXMgbWVhbnMgdGhlIGNvdW50ZXIgc3RhcnRzIGZyb20gMTAwMDAuJ30gPQogICAgICAgICdNZW5ldGFwa2FuIG1pbmltYWwgdWt1cmFuIHBlcnViYWhhbiBjb3VudGVyIChqaWthICJhdXRvX2luY3JlbWVudCIgdGVycGlsaWggc2ViYWdhaSBQZXJ1YmFoYW4gSVRTTSA6OiBOdW1iZXIgR2VuZXJhdG9yKS4gRGVmYXVsdCBhZGFsYWggNSwgaW5pIGJlcmFydGkga29udGVyIGRpbXVsYWkgZGFyaSAxMDAwMC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3IgY2hhbmdlcy4nfSA9ICdTZXQgdXAgbWVzaW4gdW50dWsgcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHVwIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciB3b3Jrb3JkZXJzLid9ID0gJ1NldCB1cCBtZXNpbiB1bnR1ayBwZXJpbnRhaCBrZXJqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBjaGVja2JveCBpbiB0aGUgQWdlbnRJVFNNV29ya09yZGVyRWRpdCBzY3JlZW4gdGhhdCBkZWZpbmVzIGlmIHRoZSB0aGUgZm9sbG93aW5nIHdvcmtvcmRlcnMgc2hvdWxkIGFsc28gYmUgbW92ZWQgaWYgYSB3b3Jrb3JkZXIgaXMgbW9kaWZpZWQgYW5kIHRoZSBwbGFubmVkIGVuZCB0aW1lIGhhcyBjaGFuZ2VkLid9ID0KICAgICAgICAnTWVudW5qdWtrYW4ga290YWsgY2VudGFuZyBkaSBsYXlhciBBZ2VudElUU01Xb3JrT3JkZXJFZGl0IHlhbmcgbWVuZGVmaW5pc2lrYW4gamlrYSBwZXJpbnRhaCBrZXJqYSBiZXJpa3V0IGp1Z2EgaGFydXMgcGluZGFoIGppa2Egd29ya29yZGVyIGluaSBkaW1vZGlmaWthc2kgZGFuIHdha3R1IGFraGlyIHlhbmcgZGlyZW5jYW5ha2FuIHRlbGFoIGJlcnViYWguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBjaGFuZ2luZyB0aGUgd29ya29yZGVyIGFnZW50LCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBsaW5rIGRhbGFtIG1lbnUgeWFuZyBtZW11bmdraW5rYW4gbWVuZ3ViYWggYWdlbiBwZXJpbnRhaCBrZXJqYSwgZGFsYW0gdGFtcGlsYW4gem9vbSBkYXJpIHBlcmludGFoIGtlcmphIHNlcGVydGkgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIGNoYW5nZSBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIGNoYW5nZSwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIGxpbmsgZGFsYW0gbWVudSB5YW5nIG1lbXVuZ2tpbmthbiBtZW5kZWZpbmlzaWthbiBwZXJ1YmFoYW4gc2ViYWdhaSB0ZW1wbGF0ZSBkYWxhbSB0YW1waWxhbiB6b29tIHBlcnViYWhhbiwgZGFsYW0gYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIHdvcmtvcmRlciwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIGxpbmsgZGFsYW0gbWVudSB5YW5nIG1lbXVuZ2tpbmthbiBtZW5kZWZpbmlzaWthbiBwZXJpbnRhaCBrZXJqYSBzZWJhZ2FpIHRlbXBsYXRlIGRhbGFtIHRhbXBpbGFuIHpvb20gZGFyaSBwZXJpbnRhaCBrZXJqYSwgZGkgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBlZGl0aW5nIHRoZSByZXBvcnQgb2YgYSB3b3Jrb3JkZXIsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIGxpbmsgZGFsYW0gbWVudSB5YW5nIG1lbXVuZ2tpbmthbiBtZW5nZWRpdCBsYXBvcmFuIGRhcmkgcGVyaW50YWgga2VyamEsIGRhbGFtIHRhbXBpbGFuIHpvb20gZGFyaSBwZXJpbnRhaCBrZXJqYSBzZXBlcnRpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNoYW5nZSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBsaW5rIGRhbGFtIG1lbnUgeWFuZyBtZW11bmdraW5rYW4gbWVuZ2h1YnVuZ2thbiBwZXJ1YmFoYW4gZGVuZ2FuIG9iamVrIGxhaW4gcGFkYSB0YW1waWxhbiBwZXJ1YmFoYW4gem9vbSBkYXJpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIHdvcmtvcmRlciB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIGxpbmsgZGFsYW0gbWVudSB5YW5nIG1lbXVuZ2tpbmthbiBtZW5naHVidW5na2FuIHBlcmludGFoIGtlcmphIGRlbmdhbiBvYmplayBsYWluIGRhbGFtIHRhbXBpbGFuIHpvb20gZGFyaSBwZXJpbnRhaCBrZXJqYSBzZXBlcnRpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbW92aW5nIHRoZSB0aW1lIHNsb3Qgb2YgYSBjaGFuZ2UgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVudW5qdWtrYW4gbGluayBkYWxhbSBtZW51IHlhbmcgbWVtdW5na2lua2FuIGJlcmdlcmFrIHNsb3Qgd2FrdHUgcGVydWJhaGFuIGRhbGFtIHRhbXBpbGFuIHpvb20tbnlhIGRhcmkgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0YWtpbmcgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIGxpbmsgZGFsYW0gbWVudSB5YW5nIG1lbXVuZ2tpbmthbiBtZW5nYW1iaWwgcGVyaW50YWgga2VyamEgZGFsYW0gdGFtcGlsYW4gem9vbS1ueWEgZGFyaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgY29uZGl0aW9ucyBvZiBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVudW5qdWtrYW4gbGluayBkYWxhbSBtZW51IHVudHVrIG1lbmdha3NlcyBrb25kaXNpIHBlcnViYWhhbiB5YW5nIHpvb20gcGFuZGFuZ2FuIGFnZW4gYW50YXJtdWthLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBsaW5rIGRhbGFtIG1lbnUgdW50dWsgbWVuZ2Frc2VzIHNlamFyYWggZGFyaSBwZXJ1YmFoYW4gZGFsYW0gdGFtcGlsYW4gem9vbS1ueWEgZGFyaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVudW5qdWtrYW4gbGluayBkYWxhbSBtZW51IHVudHVrIG1lbmdha3NlcyBzZWphcmFoIHBlcmludGFoIGtlcmphIGRhbGFtIHRhbXBpbGFuIHpvb20tbnlhIGRhcmkgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSB3b3Jrb3JkZXIgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIGxpbmsgZGFsYW0gbWVudSB1bnR1ayBtZW5hbWJhaGthbiBwZXJpbnRhaCBrZXJqYSBkYWxhbSB0YW1waWxhbiBwZXJ1YmFoYW4gem9vbSBkYXJpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIGxpbmsgZGFsYW0gbWVudSB1bnR1ayBtZW5naGFwdXMgcGVydWJhaGFuIGRhbGFtIHBhbmRhbmdhbiB6b29tLW55YSBkYXJpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgd29ya29yZGVyIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIGxpbmsgZGFsYW0gbWVudSB1bnR1ayBtZW5naGFwdXMgcGVyaW50YWgga2VyamEgZGFsYW0gcGFuZGFuZ2FuIHpvb20tbnlhIGRhcmkgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBsaW5rIGRhbGFtIG1lbnUgdW50dWsgbWVuZ2VkaXQgcGVydWJhaGFuIGRhbGFtIHRhbXBpbGFuIHpvb20tbnlhIGRhcmkgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBsaW5rIGRhbGFtIG1lbnUgdW50dWsgbWVuZ2VkaXQgcGVyaW50YWgga2VyamEgZGFsYW0gdGFtcGlsYW4gem9vbS1ueWEgZGFyaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIGxpbmsgZGFsYW0gbWVudSB1bnR1ayBrZW1iYWxpIGRhbGFtIHRhbXBpbGFuIHBlcnViYWhhbiB6b29tIGRhcmkgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSB3b3Jrb3JkZXIgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBsaW5rIGRhbGFtIG1lbnUgdW50dWsga2VtYmFsaSBkYWxhbSB1cnV0YW4ga2VyamEgdGFtcGlsYW4gem9vbSBkYXJpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIGxpbmsgZGFsYW0gbWVudSB1bnR1ayBtZW5jZXRhayBwZXJ1YmFoYW4gZGFsYW0gdGFtcGlsYW4gem9vbS1ueWEgZGFyaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBsaW5rIGRhbGFtIG1lbnUgdW50dWsgbWVuY2V0YWsgcGVyaW50YWgga2VyamEgZGFsYW0gdGFtcGlsYW4gem9vbS1ueWEgZGFyaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHJlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycyBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBsaW5rIGRhbGFtIG1lbnUgdW50dWsgbWVuZ2F0dXIgdWxhbmcgcGVydWJhaGFuIGRhbiBwZXJpbnRhaCBrZXJqYSBkYWxhbSB0YW1waWxhbiB6b29tLW55YSBkYXJpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY2hhbmdlIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIHNlamFyYWggcGVydWJhaGFuICh1cnV0YW4gdGVyYmFsaWspIGRpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0ZSBNYWNoaW5lJ30gPSAnU3RhdGUgbWVzaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RvcmVzIGNoYW5nZSBhbmQgd29ya29yZGVyIGlkcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB0ZW1wbGF0ZSBpZCwgd2hpbGUgYSB1c2VyIGlzIGVkaXRpbmcgYSB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJ1NpbXBhbiBwZXJ1YmFoYW4gZGFuIHBlcmludGFoIGtlcmphIGlkIGRhbiBUZW1wbGF0ZSBpZCB5YW5nIHNlc3VhaSBtZXJla2EsIHNlbWVudGFyYSBwZW5nZ3VuYSBtZW5nZWRpdCB0ZW1wbGF0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXInfSA9ICdBbWJpbCBXb3JrIE9yZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgV29ya29yZGVyLid9ID0gJ01lbmdhbWJpbCBwZXJpbnRhaCBrZXJqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIE92ZXJ2aWV3J30gPSAnSWtodGlzYXIgVGVtcGxhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUuJ30gPSAnVGVtcGxhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY2hhbmdlLCBlLmcuIENoYW5nZSMsIE15Q2hhbmdlIy4gVGhlIGRlZmF1bHQgaXMgQ2hhbmdlIy4nfSA9CiAgICAgICAgJ1BlbmdlbmFsIHVudHVrIHBlcnViYWhhbiwgbWlzYWxueWEuIEdhbnRpICMsICBwZXJ1YmFoYW4gc2F5YSMuIGRlZmF1bHQgQmVydWJhaCAjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSB3b3Jrb3JkZXIsIGUuZy4gV29ya29yZGVyIywgTXlXb3Jrb3JkZXIjLiBUaGUgZGVmYXVsdCBpcyBXb3Jrb3JkZXIjLid9ID0KICAgICAgICAnUGVuZ2VuYWwgdW50dWsgcGVyaW50YWgga2VyamEsIG1pc2FsbnlhIFdvcmtvcmRlciAjLCBXb3Jrb3JkZXIgIy4gU3RhbmRhcm55YSBhZGFsYWggV29yayBPcmRlciAjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIEFDTCBtb2R1bGUgcmVzdHJpY3RzIHRoZSB1c3VhZ2Ugb2YgdGhlIHRpY2tldCB0eXBlcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9uIFwnSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzXCcsIHRvIHVzZXJzIG9mIHRoZSBncm91cHMgYXMgZGVmaW5lZCBpbiAiSVRTTUNoYW5nZTo6UmVzdHJpY3RUaWNrZXRUeXBlczo6R3JvdXBzIi4gQXMgdGhpcyBBQ0wgY291bGQgY29sbGlkZSB3aXRoIG90aGVyIEFDTHMgd2hpY2ggYXJlIGFsc28gcmVsYXRlZCB0byB0aGUgdGlja2V0IHR5cGUsIHRoaXMgc3lzY29uZmlnIG9wdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBzaG91bGQgb25seSBiZSBhY3RpdmF0ZWQgaWYgbmVlZGVkLid9ID0KICAgICAgICAnTW9kdWwgQUNMIGluaSBtZW1iYXRhc2kgcGVuZ2d1bmFhbiBqZW5pcyB0aWtldCB5YW5nIGRpZGVmaW5pc2lrYW4gZGFsYW0gcGlsaWhhbiBzeXNjb25maWcgXCdJVFNNQ2hhbmdlIDo6IEFkZENoYW5nZUxpbmtUaWNrZXRUeXBlc1wnLCB1bnR1ayBwZW5nZ3VuYSBrZWxvbXBvayBzZWJhZ2FpbWFuYSBkaWRlZmluaXNpa2FuIGRhbGFtICJJVFNNQ2hhbmdlIDo6IFJlc3RyaWN0VGlja2V0VHlwZXMgOjogR3J1cCIuIFNlYmFnYWkgQUNMIGluaSBiaXNhIGJlcmJlbnR1cmFuIGRlbmdhbiBBQ0wgbGFpbiB5YW5nIGp1Z2EgdGVya2FpdCBkZW5nYW4gamVuaXMgdGlrZXQsIG9wc2kgc3lzY29uZmlnIGluaSBkaW5vbmFrdGlma2FuIHNlY2FyYSBkZWZhdWx0IGRhbiBoYW55YSBoYXJ1cyBkaWFrdGlma2FuIGppa2EgZGlwZXJsdWthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBTbG90J30gPSAnd2FrdHUgU2xvdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlcyBvZiB0aWNrZXRzLCB3aGVyZSBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBhIGxpbmsgdG8gYWRkIGEgY2hhbmdlIHdpbGwgYmUgZGlzcGxheWVkLid9ID0KICAgICAgICAnSmVuaXMgdGlrZXQsIGRpIG1hbmEgZGFsYW0gem9vbSB0aWtldCBtZWxpaGF0IGxpbmsgdW50dWsgbWVuYW1iYWhrYW4gcGVydWJhaGFuIGFrYW4gZGl0YW1waWxrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgU2VhcmNoJ30gPSAnQ2FyaSBwZW5nZ3VuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWRkIChmcm9tIHRlbXBsYXRlKS4nfSA9ICdUYW1iYWhhbiBQZXJpbnRhaCBLZXJqYSAoZGFyaSB0ZW1wbGF0ZSkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQuJ30gPSAnUGVyaW50YWgga2VyamEgZGl0YW1iYWgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFnZW50Lid9ID0gJ0FnZW4gcGVyaW50YWgga2VyamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIERlbGV0ZS4nfSA9ICdQZXJpbnRhaCBrZXJqYSBkaWhhcHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBFZGl0Lid9ID0gJ1BlcmludGFoIGtlcmphIGRpIGVkaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEhpc3RvcnkgWm9vbS4nfSA9ICdTZWphcmFoIHBlcmludGFoIGtlcmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBIaXN0b3J5Lid9ID0gJ1NlamFyYWggcGVyaW50YWgga2VyamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFJlcG9ydC4nfSA9ICdMYXBvcmFuIHBlcmludGFoIGtlcmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tLid9ID0gJ1BlcmludGFoIGtlcmphIHpvb20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb25jZSd9ID0gJ1Nla2FsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWd1bGFybHknfSA9ICdzZWNhcmEgdGVyYXR1cic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6amFfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICfjgqvjg4bjgrTjg6ogIDwtPiDlvbHpn7/luqYgPC0+IOWEquWFiOW6pic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDYXRlZ29yeSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAn44Kr44OG44K044Oq44Go5b2x6Z+/5bqm44Gu57WE44G/5ZCI44KP44Gb44Gr44KI44Gj44Gm5YSq5YWI5bqm44KS566h55CG44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICflhKrlhYjluqbjga7libLjgorlvZPjgaYnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbiBNYW5hZ2VtZW50J30gPSAnSVRTTSDlpInmm7TnrqHnkIbjga7pgJrnn6XnrqHnkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE5vdGlmaWNhdGlvbiBSdWxlJ30gPSAn6YCa55+l44Or44O844Or44KS6L+95YqgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1bGUnfSA9ICfjg6vjg7zjg6snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBub3RpZmljYXRpb24gc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ+mAmuefpeOBq+OBr+WQjeensOOBjOW/hemgiOOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkLid9ID0gJ+WQjeensOOBr+WFpeWKm+W/hemgiOOBp+OBmeOAgic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNU3RhdGVNYWNoaW5lCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBTdGF0ZSBNYWNoaW5lJ30gPSAn44Oe44K344Oz44Gu566h55CG54q25rOBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIGNhdGFsb2cgY2xhc3MhJ30gPSAn44Kr44K/44Ot44Kw44Kv44Op44K544Gu6YG45oqe44Gv5b+F6aCI44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0YWxvZyBjbGFzcyBpcyByZXF1aXJlZCEnfSA9ICfjgqvjgr/jg63jgrDjgq/jg6njgrnjga7pgbjmip7jga/lv4XpoIjjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgc3RhdGUgdHJhbnNpdGlvbid9ID0gJ+eKtuaFi+mBt+enu+OCkui/veWKoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAn44Kr44K/44Ot44Kw44O744Kv44Op44K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBOYW1lJ30gPSAn44Kq44OW44K444Kn44Kv44OI5ZCNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG92ZXIgc3RhdGUgdHJhbnNpdGlvbnMgZm9yJ30gPSAn44K544OG44O844K/44K544Gu5qaC6KaB77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIHN0YXRlIHRyYW5zaXRpb24nfSA9ICfjgZPjga7nirbmhYvpgbfnp7vjgpLliYrpmaTjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgbmV3IHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAn5paw44GX44GE44K544OG44O844K/44K544KS6L+95Yqg77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBzdGF0ZSEnfSA9ICfnirbmhYvjgpLpgbjmip7jgZfjgabjgY/jgaDjgZXjgYTjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhIG5leHQgc3RhdGUhJ30gPSAn5paw44GX44GE54q25oWL44KS6YG45oqe44GX44Gm44GP44Gg44GV44GE44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ+OCueODhuODvOOCv+OCueOBrue3qOmbhu+8mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoZSBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAn5pys5b2T44Gr54q25oWL6YG356e744KS5YmK6Zmk44GX44G+44GZ44GL77yfJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDaGFuZ2UnfSA9ICflpInmm7TnrqHnkIbpoIXnm67jgpLov73liqAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UnfSA9ICdJVFNNIENoYW5nZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdXN0aWZpY2F0aW9uJ30gPSAn5q2j5b2T5YyWJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lucHV0IGludmFsaWQuJ30gPSAn5YWl5Yqb44Gv54Sh5Yq544Gn44GZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ+OCpOODs+ODkeOCr+ODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0ZWQgRGF0ZSd9ID0gJ+imgeaxguaXpSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgQ2hhbmdlIFRlbXBsYXRlJ30gPSAn5aSJ5pu0566h55CG6aCF55uu44OG44Oz44OX44Os44O844OI44KS6YG45oqeJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgdHlwZSd9ID0gJ+aZgumWk+OCv+OCpOODlyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHRpbWUgdHlwZS4nfSA9ICfkuI3mraPjgarmmYLplpPjgr/jgqTjg5cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpbWUnfSA9ICfmlrDopo/jga7mmYLplpMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBDQUIgYXMgdGVtcGxhdGUnfSA9ICflpInmm7Toq67llY/lp5Tlk6HkvJrvvIhDQULvvInjga7lpInmm7TjgpLjg4bjg7Pjg5fjg6zjg7zjg4jjgajjgZfjgabkv53lrZjjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gdG8gaW52b2x2ZWQgcGVyc29ucyBzY3JlZW4nfSA9ICfplqLkv4LogIXnlLvpnaLjgavpgbfnp7vjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBOYW1lJ30gPSAn5LiN5q2j44Gq5ZCN56ew44Gn44GZJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbnMgYW5kIEFjdGlvbnMnfSA9ICfmnaHku7bjgajjgqLjgq/jgrfjg6fjg7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmRpdGlvbid9ID0gJ+adoeS7tuOCkuWJiumZpOOBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGNvbmRpdGlvbid9ID0gJ+aWsOOBl+OBhOadoeS7tuOCkui/veWKoOOBmeOCiyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb25kaXRpb24nfSA9ICfmnaHku7bjgpLnt6jpm4bjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBhIHZhbGlkIG5hbWUuJ30gPSAn5pyJ5Yq544Gq5ZCN56ew44GM5b+F6KaB44Gn44GZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdmFsaWQgbmFtZSBpcyBuZWVkZWQuJ30gPSAn5pyJ5Yq544Gq5ZCN5YmN44GM5b+F6KaB44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lOid9ID0gJ+WQjeWJjeOCkuikh+ijvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkIGJ5IGFub3RoZXIgY29uZGl0aW9uLid9ID0gJ+OBk+OBruWQjeWJjeOBr+OBmeOBp+OBq+S7luOBruadoeS7tuOBp+S9v+OCj+OCjOOBpuOBhOOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXRjaGluZyd9ID0gJ+S4gOiHtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbnkgZXhwcmVzc2lvbiAoT1IpJ30gPSAn44GE44Ga44KM44GL44Gu5pyf6ZaT44Gr6Kmy5b2T44GZ44KLKE9SKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgZXhwcmVzc2lvbnMgKEFORCknfSA9ICfjgZnjgbnjgabjga7mnJ/plpPjgYzoqbLlvZPjgZnjgosoQU5EKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHByZXNzaW9ucyd9ID0gJ+acn+mZkCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3Rvcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRvcid9ID0gJ+mBi+eUqOiAhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgRXhwcmVzc2lvbid9ID0gJ+acn+mZkOOCkuWJiumZpOOBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBFeHByZXNzaW9ucyBmb3VuZC4nfSA9ICfmnJ/pmZDjgYzmnKroqK3lrprjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBleHByZXNzaW9uJ30gPSAn5paw44GX44GE5pyf6ZmQ44Gu6L+95YqgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBBY3Rpb24nfSA9ICfjgqLjgq/jgrfjg6fjg7Pjga7liYrpmaQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQWN0aW9ucyBmb3VuZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBhY3Rpb24nfSA9ICfmlrDjgZfjgYTjgqLjgq/jgrfjg6fjg7Pjga7ov73liqAnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNoYW5nZT8nfSA9ICfmnKzlvZPjgavjgZPjga7lpInmm7TnrqHnkIbpoIXnm67jgpLliYrpmaTjgZfjgb7jgZnjgYvjgIInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgJXMlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlcid9ID0gJ+S9nOalreOCquODvOODgOODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGRldGFpbHMnfSA9ICfoqbPntLDjgpLooajnpLonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB3b3Jrb3JkZXInfSA9ICfkvZzmpa3jgqrjg7zjg4Djg7zjgpLooajnpLonOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxlZCBoaXN0b3J5IGluZm9ybWF0aW9uIG9mICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGlmaWVkJ30gPSAn5pu05pawJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09sZCBWYWx1ZSd9ID0gJ+WPpOOBhOWApCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgVmFsdWUnfSA9ICfmlrDjgZfjgYTlgKQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJbnZvbHZlZCBQZXJzb25zIG9mICVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52b2x2ZWQgUGVyc29ucyd9ID0gJ+mWouS/guiAhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VNYW5hZ2VyJ30gPSAn5aSJ5pu0566h55CG44Oe44ON44O844K444OjJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgaW52YWxpZC4nfSA9ICfkuI3mraPjgarjg6bjg7zjgrYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlQnVpbGRlcid9ID0gJ+WkieabtOWun+aWveiAhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQWR2aXNvcnkgQm9hcmQnfSA9ICflpInmm7Toq67llY/lp5Tlk6HkvJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIFRlbXBsYXRlJ30gPSAnQ0FC44OG44Oz44OX44Os44O844OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcGx5IFRlbXBsYXRlJ30gPSAn44OG44Oz44OX44Os44O844OI44KS6YGp55SoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ld1RlbXBsYXRlJ30gPSAn5paw44OG44Oz44OX44Os44O844OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgdGhpcyBDQUIgYXMgdGVtcGxhdGUnfSA9ICfjgZPjga5DQULjgpLjg4bjg7Pjg5fjg6zjg7zjg4jjgajjgZfjgabkv53lrZjjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRvIENBQid9ID0gJ0NBQuOBq+i/veWKoOOBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIFVzZXInfSA9ICfkuI3mraPjgarjg6bjg7zjgrYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBDQUInfSA9ICfnj77lnKjjga5DQUInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAn6Kit5a6aJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZXMgcGVyIHBhZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgVGl0bGUnfSA9ICflpInmm7TnrqHnkIbpoIXnm67lkI0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFnZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBCdWlsZGVyJ30gPSAn44OT44Or44OA44O844KS5aSJ5pu0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBNYW5hZ2VyJ30gPSAn44Oe44ON44O844K444Oj44O844KS5aSJ5pu0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlcnMnfSA9ICfmpa3li5nmjIfnpLonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFN0YXRlJ30gPSAn5aSJ5pu0566h55CG6aCF55uu44Gu54q25oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0ZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIFN0YXJ0IFRpbWUnfSA9ICfoqIjnlLvkuIrjga7jgrnjgr/jg7zjg4jmmYLplpMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBFbmQgVGltZSd9ID0gJ+ioiOeUu+S4iuOBrue1guS6huaZgumWkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWwgU3RhcnQgVGltZSd9ID0gJ+Wun+mam+OBruOCueOCv+ODvOODiOaZgumWkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWwgRW5kIFRpbWUnfSA9ICflrp/pmpvjga7ntYLkuobmmYLplpMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVJlc2V0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gcmVzZXQgdGhpcyBjaGFuZ2U/J30gPSAn5pys5b2T44Gr54++5Zyo44Gu5aSJ5pu05YaF5a6544KS44Oq44K744OD44OI44GX44Gm44KC44KI44KN44GX44GE44Gn44GZ44GL77yfJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhlLmcuIDEwKjUxNTUgb3IgMTA1NjU4KiknfSA9ICfkvos6IDEwKjUxNTUg44G+44Gf44GvIDEwNTY1OConOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIEFnZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuZy4nfSA9ICfkvos6ICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQ3VzdG9tZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgUmVwb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIEltcGFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQ2F0ZWdvcnknfSA9ICfjgqvjg4bjgrTjg6rjgpLlpInmm7QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJlZm9yZS9hZnRlciknfSA9ICco5Lul5YmNL+S7peW+jCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJldHdlZW4pJ30gPSAnKOacn+mWk+aMh+WumiknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBhcyBUZW1wbGF0ZSd9ID0gJ+WkieabtOOCkuODhuODs+ODl+ODrOODvOODiOOBqOOBl+OBpuS/neWtmOOBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHRlbXBsYXRlIHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICfjgIzjg4bjg7Pjg5fjg6zjg7zjg4jlkI3jgI3jga/lv4XpoIjpoIXnm67jgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHRlbXBsYXRlIG5hbWUgaXMgcmVxdWlyZWQuJ30gPSAn44OG44Oz44OX44Os44O844OI5ZCN44Gv5YWl5Yqb5b+F6aCI44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IFN0YXRlcyd9ID0gJ+eKtuaFi+OCkuODquOCu+ODg+ODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVyd3JpdGUgb3JpZ2luYWwgdGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIG9yaWdpbmFsIGNoYW5nZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW5mb3JtYXRpb24nfSA9ICflpInmm7Tmg4XloLEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBFZmZvcnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWNjb3VudGVkIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEluaXRpYXRvcihzKSd9ID0gJ+OCpOODi+OCt+OCqOODvOOCv+OCkuWkieabtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUInfSA9ICflpInmm7Tmib/oqo3ogIUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn5pyA57WC5aSJ5pu05pmC5Yi7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ+acgOe1guWkieabtOiAhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAnKOS4gOmDqOOBrk9T44Gr44GK44GE44Gm44GvKeS4i+iomOOBruODquODs+OCr+OCkuOCquODvOODl+ODs+OBmeOCi+OBn+OCgeOBq+OCr+ODquODg+OCr+aZguOBq+OAgUN0cmwg44GC44KL44GE44GvIENtZCDjgb7jgZ/jga8gU2hpZnTjgq3jg7zjgpLmirzkuIvjgZnjgovlv4XopoHjgYzjgovloLTlkIjjgYzjgYLjgorjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG93bmxvYWQgQXR0YWNobWVudCd9ID0gJ+a3u+S7mOODleOCoeOCpOODq+OBruODgOOCpuODs+ODreODvOODiSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENBQiBUZW1wbGF0ZSd9ID0gJ0NBQuODhuODs+ODl+ODrOODvOODiOOCkue3qOmbhic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBjaGFuZ2UgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICfjgZPjga7mk43kvZzjga/pgbjmip7kuK3jga7jg4bjg7Pjg5fjg6zjg7zjg4jjgYvjgonnt6jpm4bjg7vkv53lrZjjgYzlj6/og73jgarlpInmm7TnrqHnkIbpoIXnm67jgpLmlrDopo/jgavkvZzmiJDjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5ldyBjaGFuZ2Ugd2lsbCBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgaXQgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyB3b3Jrb3JkZXIgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICfjgZPjga7mk43kvZzjga/pgbjmip7kuK3jga7jg4bjg7Pjg5fjg6zjg7zjg4jjgYvjgonnt6jpm4bjg7vkv53lrZjjgYzlj6/og73jgarkvZzmpa3jgqrjg7zjg4Djg7zjgpLmlrDopo/jgavkvZzmiJDjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB0ZW1wb3JhcnkgY2hhbmdlIHdpbGwgYmUgY3JlYXRlZCB3aGljaCBjb250YWlucyB0aGUgd29ya29yZGVyLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wb3JhcnkgY2hhbmdlIGFuZCBuZXcgd29ya29yZGVyIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSB3b3Jrb3JkZXIgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgSUQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb250ZW50J30gPSAn5YaF5a6544KS57eo6ZuGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFRpbWUnfSA9ICflpInmm7Tml6XmmYInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUZW1wbGF0ZSBDb250ZW50J30gPSAn44OG44Oz44OX44Os44O844OI44Gu5YaF5a6544KS57eo6ZuGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUZW1wbGF0ZSd9ID0gJ+ODhuODs+ODl+ODrOODvOODiOOCkuWJiumZpCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyIHRvICVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdHJ1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCB3b3Jrb3JkZXIgdHlwZS4nfSA9ICfkuI3mraPjgarkvZzmpa3jgqrjg7zjg4Djg7zjgr/jgqTjg5cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHBsYW5uZWQgc3RhcnQgdGltZSBtdXN0IGJlIGJlZm9yZSB0aGUgcGxhbm5lZCBlbmQgdGltZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBmb3JtYXQuJ30gPSAn5LiN5q2j44Gq44OV44Kp44O844Oe44OD44OI44Gn44GZJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBXb3Jrb3JkZXIgVGVtcGxhdGUnfSA9ICfkvZzmpa3jgqrjg7zjg4Djg7zjga7jg4bjg7Pjg5fjg6zjg7zjg4jjgpLpgbjmip7jgZfjgabjgY/jgaDjgZXjgYQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFnZW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFdvcmtvcmRlciBBZ2VudCBvZiAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyB3b3Jrb3JkZXI/J30gPSAn5pys5b2T44Gr44GT44Gu5L2c5qWt44Kq44O844OA44O844KS5YmK6Zmk44GX44G+44GZ44GL44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIFdvcmtvcmRlci4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgQ29uZGl0aW9uISd9ID0KICAgICAgICAn44GT44Gu5L2c5qWt44Kq44O844OA44O844KS5YmK6Zmk44GZ44KL44GT44Go44Gv44Gn44GN44G+44Gb44KT44CC5LiA44Gk5Lul5LiK44Gu5p2h5Lu244Gn5L2/55So44GV44KM44Gm44GE44G+44GZ77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgV29ya29yZGVyIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBDb25kaXRpb24ocyknfSA9ICfjgZPjga7kvZzmpa3jgqrjg7zjg4Djg7zjga/ku6XkuIvjga7oqJjkuoso576kKeOBp+S9v+eUqOOBleOCjOOBpuOBhOOBvuOBmeOAgic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzLSVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgZm9sbG93aW5nIHdvcmtvcmRlcnMgYWNjb3JkaW5nbHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhlIHBsYW5uZWQgZW5kIHRpbWUgb2YgdGhpcyB3b3Jrb3JkZXIgaXMgY2hhbmdlZCwgdGhlIHBsYW5uZWQgc3RhcnQgdGltZXMgb2YgYWxsIGZvbGxvd2luZyB3b3Jrb3JkZXJzIHdpbGwgYmUgY2hhbmdlZCBhY2NvcmRpbmdseSd9ID0KICAgICAgICAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMtJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclJlcG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBSZXBvcnQgb2YgJXMlcy0lcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnQnfSA9ICfjg6zjg53jg7zjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIHRpbWUhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBhY3R1YWwgc3RhcnQgdGltZSBtdXN0IGJlIHNldCwgd2hlbiB0aGUgYWN0dWFsIGVuZCB0aW1lIGlzIHNldCEnfSA9CiAgICAgICAgJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGFrZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBBZ2VudCd9ID0gJ+ePvuWcqOOBruaLheW9k+iAhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gdGFrZSB0aGlzIHdvcmtvcmRlcj8nfSA9ICfmnKzlvZPjgavjgZPjga7kvZzmpa3jgqrjg7zjg4Djg7zjgpLpgannlKjjgZfjgb7jgZnjgYvjgIInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIFdvcmtvcmRlciBhcyBUZW1wbGF0ZSd9ID0gJ+ODr+ODvOOCr+OCquODvOODgOODvOOCkuODhuODs+ODl+ODrOODvOODiOOBqOOBl+OBpuS/neWtmOOBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgd29ya29yZGVyIChhbmQgc3Vycm91bmRpbmcgY2hhbmdlKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEluZm9ybWF0aW9uJ30gPSAn5L2c5qWt44Kq44O844OA44O85oOF5aCxJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vua25vd24gbm90aWZpY2F0aW9uICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSB3YXMgYW4gZXJyb3IgY3JlYXRpbmcgdGhlIG5vdGlmaWNhdGlvbi4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ2hhbmdlcyd9ID0gJ0lUU03lpInmm7TnrqHnkIbvvJrmpoLopoEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUFkZC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHdpdGggVGlja2V0SUQgJXMgZG9lcyBub3QgZXhpc3QhJ30gPSAn44OB44Kx44OD44OISUQgJXMg44Gu44OB44Kx44OD44OI44Gv5a2Y5Zyo44GX44G+44Gb44KT77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pc3Npbmcgc3lzY29uZmlnIG9wdGlvbiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIGNoYW5nZSEnfSA9ICflpInmm7TnrqHnkIbpoIXnm67jgpLov73liqDjgafjgY3jgb7jgZvjgpPvvIEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUFkZEZyb21UZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSBjaGFuZ2UgZnJvbSB0ZW1wbGF0ZSEnfSA9ICfjg4bjg7Pjg5fjg6zjg7zjg4jjgYvjgonlpInmm7TnrqHnkIbpoIXnm67jgpLkvZzmiJDjgafjgY3jgb7jgZvjgpPvvIEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICdDaGFuZ2VJRCDjgYzmjIflrprjgZXjgozjgabjgYTjgb7jgZvjgpPvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY2hhbmdlIGZvdW5kIGZvciBjaGFuZ2VJRCAlcy4nfSA9ICdJRCAlcyDjgavoqbLlvZPjgZnjgovlpInmm7TnrqHnkIbpoIXnm67jgYzopovjgaTjgYvjgorjgb7jgZvjgpPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIENBQiBvZiBjaGFuZ2UgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCB0aGUgdGVtcGxhdGUuJ30gPSAn44OG44Oz44OX44Os44O844OI44KS6L+95Yqg44Gn44GN44G+44Gb44KT44Gn44GX44Gf44CCJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDb25kaXRpb24ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICciJXMiIOOBq+ipsuW9k+OBmeOCi+WkieabtOeuoeeQhumgheebruOBjOODh+ODvOOCv+ODmeODvOOCueS4iuOBq+imi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBn++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIENvbmRpdGlvbklEICVzISd9ID0gJ+adoeS7tklEICVzIOOCkuWJiumZpOOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn++8gSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gJXMgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBjcmVhdGUgbmV3IGNvbmRpdGlvbiEnfSA9ICfmlrDjgZfjgYTmnaHku7bjgpLkvZzmiJDjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ/vvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBDb25kaXRpb25JRCAlcyEnfSA9ICfmnaHku7ZJRCAlcyDjgpLmm7TmlrDjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ/vvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBFeHByZXNzaW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgbmV3IEV4cHJlc3Npb24hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgQWN0aW9uSUQgJXMhJ30gPSAn44Ki44Kv44K344On44OzSUQgJXMg44KS5pu05paw44Gn44GN44G+44Gb44KT44Gn44GX44Gf77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgbmV3IEFjdGlvbiEnfSA9ICfmlrDjgZfjgYTjgqLjgq/jgrfjg6fjg7PjgpLov73liqDjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ/vvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBFeHByZXNzaW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQWN0aW9uSUQgJXMhJ30gPSAn44Ki44Kv44K344On44OzSUQgJXMg44KS5YmK6Zmk44Gn44GN44G+44Gb44KT44Gn44GX44Gf77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yOiBVbmtub3duIGZpZWxkIHR5cGUgIiVzIiEnfSA9ICfjgqjjg6njg7zvvJogIiVzIiDjga/kuI3mmI7jgarjg5XjgqPjg7zjg6vjg4njgr/jgqTjg5fjgafjgZnvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uSUQgJXMgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBnaXZlbiBDaGFuZ2VJRCAlcyEnfSA9ICfmnaHku7ZJRCAlcyDjga/mjIflrprjgZXjgozjgZ/lpInmm7RJRCAlcyDjgavlsZ7jgZfjgabjgYTjgb7jgZvjgpPvvIEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgZG9lcyBub3QgaGF2ZSBhbiBhbGxvd2VkIGNoYW5nZSBzdGF0ZSB0byBiZSBkZWxldGVkISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNoYW5nZUlEICVzISd9ID0gJ+WkieabtOeuoeeQhklEICVzIOOBruWkieabtOeuoeeQhumgheebruOCkuWJiumZpOOBp+OBjeOBvuOBm+OCk++8gSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UhJ30gPSAn5aSJ5pu0566h55CG6aCF55uu44KS5pu05paw44Gn44GN44G+44Gb44KT77yBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VIaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBhcyBubyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICciJXMiIOOBq+ipsuW9k+OBmeOCi+WkieabtOeuoeeQhumgheebruOBjOODh+ODvOOCv+ODmeODvOOCueS4iuOBq+imi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBn++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmtub3duIHR5cGUgIiVzIiBlbmNvdW50ZXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5IHpvb20sIG5vIEhpc3RvcnlFbnRyeUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5RW50cnkgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlIENBQiBmb3IgQ2hhbmdlICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU1hbmFnZXIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2VNYW5hZ2VyJ30gPSAn5aSJ5pu0566h55CG44Oe44ON44O844K444Oj77ya5qaC6KaBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IENBQid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgQ2hhbmdlcyd9ID0gJ+aLheW9k+S4reWkieabtOeuoeeQhu+8muamguimgSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgV29ya29yZGVycyd9ID0gJ+aLheW9k+S4reS9nOalreOCquODvOODgOODvO+8muamguimgSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUElSLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUElSJ30gPSAnUElS77yI5bCO5YWl5b6M44Os44OT44Ol44O877yJ77ya5qaC6KaBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQU0EucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBQU0EnfSA9ICdQU0HvvIjkuojmg7Plj6/nlKjmgKfvvInvvJrmpoLopoEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnIiVzIiDjgavoqbLlvZPjgZnjgovkvZzmpa3jgqrjg7zjg4Djg7zjgYzjg4fjg7zjgr/jg5njg7zjgrnkuIrjgavopovjgaTjgYvjgorjgb7jgZvjgpPjgafjgZfjgZ/vvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGNyZWF0ZSBvdXRwdXQsIGFzIHRoZSB3b3Jrb3JkZXIgaXMgbm90IGF0dGFjaGVkIHRvIGEgY2hhbmdlISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBjcmVhdGUgb3V0cHV0LCBhcyBubyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93biBjaGFuZ2UgdGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXInfSA9ICfkvZzmpa3jgqrjg7zjg4Djg7wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93biB3b3Jrb3JkZXIgdGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgT3ZlcnZpZXcgKCVzKSd9ID0gJ0lUU03kvZzmpa3jgqrjg7zjg4Djg7zjga7mpoLopoEoJXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWRTdGFydFRpbWUnfSA9ICfkuojlrprplovlp4vmmYLliLsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZEVuZFRpbWUnfSA9ICfkuojlrprntYLkuobml6XmmYInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsU3RhcnRUaW1lJ30gPSAn5a6f57i+6ZaL5aeL5pmC5Yi7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbEVuZFRpbWUnfSA9ICflrp/nuL7ntYLkuobml6XmmYInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVJlc2V0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gcmVzZXQgV29ya09yZGVyICVzIG9mIENoYW5nZSAlcyEnfSA9ICflpInmm7TnrqHnkIbpoIXnm64gJXMg5YaF44Gu5L2c5qWt44Kq44O844OA44O8ICVzIOOBr+ODquOCu+ODg+ODiOOBp+OBjeOBvuOBm+OCk++8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gcmVzZXQgQ2hhbmdlICVzISd9ID0gJ+WkieabtOeuoeeQhumgheebriAlcyDjga/jg6rjgrvjg4Pjg4jjgafjgY3jgb7jgZvjgpPvvIEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVNjaGVkdWxlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogQ2hhbmdlIFNjaGVkdWxlJ30gPSAn5aSJ5pu0566h55CG44K544Kx44K444Ol44O844Or77ya5qaC6KaBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VTZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTZWFyY2gnfSA9ICflpInmm7TnrqHnkIbpoIXnm67jga7mpJzntKInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlVGl0bGUnfSA9ICflpInmm7TnrqHnkIbpoIXnm67lkI0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVycyd9ID0gJ+S9nOalreOCquODvOODgOODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VTdGF0ZSd9ID0gJ+WkieabtOeuoeeQhumgheebruOBrueKtuazgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2VhcmNoIFJlc3VsdCd9ID0gJ+WkieabtOeuoeeQhumgheebruOBruaknOe0oue1kOaenCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgTnVtYmVyJ30gPSAn5aSJ5pu0566h55CG6aCF55uu55Wq5Y+3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmsgT3JkZXIgVGl0bGUnfSA9ICfkvZzmpa3jgqrjg7zjg4Djg7zlkI0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIERlc2NyaXB0aW9uJ30gPSAn5aSJ5pu0566h55CG6aCF55uu44Gu6Kqs5piOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBKdXN0aWZpY2F0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBJbnN0cnVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgUmVwb3J0J30gPSAn5L2c5qWt44Kq44O844OA44O844Os44Od44O844OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBQcmlvcml0eSd9ID0gJ+WkieabtOeuoeeQhumgheebruOBruWEquWFiOW6pic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW1wYWN0J30gPSAn5aSJ5pu0566h55CG6aCF55uu44Gu5b2x6Z+/5bqmJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgQnknfSA9ICfkvZzmiJDogIUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFN0YXRlJ30gPSAn5L2c5qWt44Kq44O844OA44O844Gu54q25oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBUeXBlJ30gPSAn5L2c5qWt44Kq44O844OA44O844K/44Kk44OXJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBBZ2VudCd9ID0gJ+S9nOalreOCquODvOODgOODvOOBruaLheW9k+iAhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiZWZvcmUnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgdGhlIHRlbXBsYXRlICIlcyIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgY2hhbmdlICIlcyIuJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VUaW1lU2xvdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGNoYW5nZSBjYW5cJ3QgYmUgbW92ZWQsIGFzIGl0IGhhcyBubyB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgZmlyc3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBtb3ZlIGEgY2hhbmdlIHdoaWNoIGFscmVhZHkgaGFzIHN0YXJ0ZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBtb3ZlIHRoZSBpbmRpdmlkdWFsIHdvcmtvcmRlcnMgaW5zdGVhZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGN1cnJlbnQgJXMgY291bGQgbm90IGJlIGRldGVybWluZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSAlcyBvZiBhbGwgd29ya29yZGVycyBoYXMgdG8gYmUgZGVmaW5lZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIG1vdmUgdGltZSBzbG90IGZvciB3b3Jrb3JkZXIgIyVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkICVzIHBlcm1pc3Npb24hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFRlbXBsYXRlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyIlcyIg44Gr6Kmy5b2T44GZ44KL44OG44Oz44OX44Os44O844OI44GM44OH44O844K/44OZ44O844K55LiK44Gr6KaL44Gk44GL44KK44G+44Gb44KT44Gn44GX44Gf77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHRlbXBsYXRlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICIlcyIhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSB3b3Jrb3JkZXIgZnJvbSB0ZW1wbGF0ZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBUZW1wbGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyBvbiB0aGUgY2hhbmdlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIHdvcmtvcmRlciEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFnZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHNldCB0aGUgd29ya29yZGVyIGFnZW50IG9mIHRoZSB3b3Jrb3JkZXIgIiVzIiB0byBlbXB0eSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIHRoZSB3b3Jrb3JkZXIgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGZpbmQgQ2hhbmdlIGZvciBXb3JrT3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHdvcmtvcmRlciAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgV29ya09yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnIiVzIiDjgavoqbLlvZPjgZnjgovkvZzmpa3jgqrjg7zjg4Djg7zjgYzjg4fjg7zjgr/jg5njg7zjgrnkuIrjgavopovjgaTjgYvjgorjgb7jgZvjgpPjgafjgZfjgZ/vvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5Wm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBlbnRyeSAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5IFpvb20nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlclRha2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB0YWtlIHRoZSB3b3Jrb3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHdvcmtvcmRlciAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9JVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIGNvbmZpZyBvcHRpb24gJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBvcHRpb24gJXMgbmVlZHMgdG8gYmUgYSBIQVNIIHJlZiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY29uZmlnIG9wdGlvbiBmb3VuZCBmb3IgdGhlIHZpZXcgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGl0bGU6ICVzIHwgVHlwZTogJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBDQUJzJ30gPSAn5L2c5oiQ5riI44G/44CAQ0FCJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNoYW5nZXMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IENoYW5nZXMnfSA9ICfmi4XlvZPjgZnjgovlpInmm7TnrqHnkIbpoIXnm64nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015V29ya09yZGVycy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgV29yayBPcmRlcnMnfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01DaGFuZ2VNYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlcXVlc3RlZCd9ID0gJ+imgeaxguOBleOCjOOBpuOBhOOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIGFwcHJvdmFsJ30gPSAn5om/6KqN5b6F44GhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlamVjdGVkJ30gPSAn5Y205LiLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FwcHJvdmVkJ30gPSAn5om/6KqN5riI44G/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luIHByb2dyZXNzJ30gPSAn6YCy6KGM5LitJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3BlbmRpbmcgcGlyJ30gPSAn5L+d55WZ5Lit44GuUElSJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3N1Y2Nlc3NmdWwnfSA9ICfmiJDlip8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZmFpbGVkJ30gPSAn5aSx5pWXJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NhbmNlbGVkJ30gPSAn44Kt44Oj44Oz44K744OrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JldHJhY3RlZCd9ID0gJ+WPlua2iOa4iOOBvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjcmVhdGVkJ30gPSAn5L2c5oiQ5riI44G/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FjY2VwdGVkJ30gPSAn5om/6KqN5riI44G/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlYWR5J30gPSAn5rqW5YKZ5a6M5LqGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FwcHJvdmFsJ30gPSAn6KqN6Ki8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dvcmtvcmRlcid9ID0gJ+S9nOalreOCquODvOODgOODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiYWNrb3V0J30gPSAn44OQ44OD44Kv44Ki44Km44OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2RlY2lzaW9uJ30gPSAn5rG65a6aJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bpcid9ID0gJ1BJUic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyd9ID0gJ+OBp+OBguOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBub3QnfSA9ICfjgafjga/jgarjgYQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZW1wdHknfSA9ICfjga/nqbrjgafjgYLjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbm90IGVtcHR5J30gPSAn44Gv56m644Gn44Gv44Gq44GEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGdyZWF0ZXIgdGhhbid9ID0gJ+OCiOOCiuWkp+OBjeOBhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBsZXNzIHRoYW4nfSA9ICfjgojjgorlsI/jgZXjgYQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgYmVmb3JlJ30gPSAn44Gu5YmN44Gn44GC44KLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGFmdGVyJ30gPSAn44Gu5b6M44Gn44GC44KLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NvbnRhaW5zJ30gPSAn5ZCr44KT44Gn44GE44KLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBjb250YWlucyd9ID0gJ+OCkuWQq+OBvuOBquOBhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiZWdpbnMgd2l0aCd9ID0gJ+OBp+Wni+OBvuOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlbmRzIHdpdGgnfSA9ICfjgafntYLkuoYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc2V0J30gPSAn44K744OD44OIJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBsaXN0IG9mIHRoZSBhZ2VudHMgd2hvIGhhdmUgcGVybWlzc2lvbiB0byB0YWtlIHdvcmtvcmRlcnMuIEtleSBpcyBhIGxvZ2luIG5hbWUuIENvbnRlbnQgaXMgMCBvciAxLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbGlzdCBvZiB3b3Jrb3JkZXIgc3RhdGVzLCBhdCB3aGljaCB0aGUgQWN0dWFsU3RhcnRUaW1lIG9mIGEgd29ya29yZGVyIHdpbGwgYmUgc2V0IGlmIGl0IHdhcyBlbXB0eSBhdCB0aGlzIHBvaW50Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXInfSA9ICfkvZzmpa3jgqrjg7zjg4Djg7zjgpLov73liqAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlciAoZnJvbSBUZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgY2hhbmdlIGZyb20gdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIChmcm9tIHRlbXBsYXRlKSB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgdG8gdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGZyb20gdGVtcGxhdGUnfSA9ICfjg4bjg7Pjg5fjg6zjg7zjg4jjgYvjgonov73liqDjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gb2YgdGhlIENJUCBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIHRoZSBzdGF0ZSBtYWNoaW5lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2UgYWR2aXNvcnkgYm9hcmRzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgbWFuYWdlZCBieSB0aGUgdXNlci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIE1lbWJlciBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgY2hhbmdlIG1hbmFnZW1lbnQgdG9vbGJhcnMuIERlZmF1bHQ6IDMgaG91cnMgKDE4MCBtaW51dGVzKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudC4gRGVmYXVsdDogNSBkYXlzICg3MjAwIG1pbnV0ZXMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBDQUIgVGVtcGxhdGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW52b2x2ZWQgUGVyc29ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZSd9ID0gJ+WkieabtOeuoeeQhuOCueOCseOCuOODpeODvOODqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2NoZWR1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIFdvcmtvcmRlciBUZW1wbGF0ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFuZCB3b3Jrb3JkZXIgdGVtcGxhdGVzIGVkaXRlZCBieSB0aGlzIHVzZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhcmVhLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgaW52b2x2ZWQgcGVyc29ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgbGltaXQgcGVyIHBhZ2UgZm9yIENoYW5nZSBPdmVydmlldyAiU21hbGwiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2Ugc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbiBFZGl0J30gPSAn5p2h5Lu244Gu57eo6ZuGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbiBPdmVydmlldyd9ID0gJ+adoeS7tuOBruamguimgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmUgd2hpY2ggc2NyZWVuIHNob3VsZCBiZSBzaG93biBhZnRlciBhIG5ldyB3b3Jrb3JkZXIgaGFzIGJlZW4gY3JlYXRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmVzIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCB3aGVuIHBsYW5uZWQgdGhlIHN0YXJ0IHRpbWUgb3Igb3RoZXIgdGltZSB2YWx1ZXMgaGF2ZSBiZWVuIHJlYWNoZWQvcGFzc2VkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBDaGFuZ2UnfSA9ICflpInmm7TnrqHnkIbpoIXnm67jgpLkvZzmiJAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSAoZnJvbSBUZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgY2hhbmdlIChmcm9tIHRlbXBsYXRlKSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgSVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBub3RpZmljYXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgZm9yIGEgd29ya29yZGVyLiBUaGlzIGVudHJ5IG11c3QgZXhpc3QgaW4gZ2VuZXJhbCBjYXRhbG9nIGNsYXNzIFwnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpUeXBlXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIHNpZ25hbHMgZm9yIGVhY2ggd29ya29yZGVyIHN0YXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBDaGFuZ2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IENoYW5nZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBXb3Jrb3JkZXIgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgV29ya29yZGVyIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjaGFuZ2UgbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgdGVtcGxhdGUgbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcHJpbnQgdGhlIGFjY291bnRlZCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcHJpbnQgdGhlIHBsYW5uZWQgZWZmb3J0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgY2hhbmdlIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSBjaGFuZ2UgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiByZWFjaGFibGUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUpIHdvcmtvcmRlciBlbmQgc3RhdGVzIHNob3VsZCBiZSBhbGxvd2VkIGlmIGEgd29ya29yZGVyIGlzIGluIGEgbG9ja2VkIHN0YXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGFjY291bnRlZCB0aW1lIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWN0dWFsIHN0YXJ0IGFuZCBlbmQgdGltZXMgc2hvdWxkIGJlIHNldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHNlYXJjaCBhbmQgdGhlIHdvcmtvcmRlciBzZWFyY2ggZnVuY3Rpb25zIGNvdWxkIHVzZSB0aGUgbWlycm9yIERCLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGNoYW5nZSBzdGF0ZSBjYW4gYmUgc2V0IGluIEFnZW50SVRTTUNoYW5nZUVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcGxhbm5lZCBlZmZvcnQgc2hvdWxkIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgcHJpbnQgYnkgY3VzdG9tZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzZWFyY2hlZCBieSBjdXN0b21lci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2V0IGJ5IGN1c3RvbWVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2hvd24gYnkgY3VzdG9tZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciBzdGF0ZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciB0aXRsZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgc2hvd24gZ3JhcGggYXR0cmlidXRlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGF0IG9ubHkgY2hhbmdlcyBjb250YWluaW5nIFdvcmtvcmRlcnMgbGlua2VkIHdpdGggc2VydmljZXMsIHdoaWNoIHRoZSBjdXN0b21lciB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIHVzZSB3aWxsIGJlIHNob3duLiBBbnkgb3RoZXIgY2hhbmdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgYWxsb3dlZCB0byBkZWxldGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFBTQSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBjaGFuZ2UgdGl0bGUgZm9yIGEgZHVtbXkgY2hhbmdlIHdoaWNoIGlzIG5lZWRlZCB0byBlZGl0IGEgd29ya29yZGVyIHRlbXBsYXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjYXRlZ29yeSBvZiBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGltcGFjdCBvZiBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciBjaGFuZ2UgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmaWVsZCB0eXBlIG9mIENvbXBhcmVWYWx1ZSBmaWVsZHMgZm9yIHdvcmtvcmRlciBhdHRyaWJ1dGVzIHVzZWQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gVmFsaWQgdmFsdWVzIGFyZSBTZWxlY3Rpb24sIFRleHQgYW5kIERhdGUuIElmIGEgdHlwZSBpcyBub3QgZGVmaW5lZCwgdGhlIGZpZWxkIHdpbGwgbm90IGJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9iamVjdCBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIGNoYW5nZSBvYmplY3RzIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY2NvdW50ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENhdGVnb3J5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VCdWlsZGVySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VNYW5hZ2VySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBEeW5hbWljRmllbGQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBJbXBhY3RJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFZmZvcnQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQcmlvcml0eUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUmVxdWVzdGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlckFnZW50SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJOdW1iZXIgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUeXBlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwZXJpb2QgKGluIHllYXJzKSwgaW4gd2hpY2ggc3RhcnQgYW5kIGVuZCB0aW1lcyBjYW4gYmUgc2VsZWN0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gYXR0cmlidXRlcyBvZiBhIHdvcmtvcmRlciBpbiB0aGUgdG9vbHRpcCBvZiB0aGUgd29ya29yZGVyIGdyYXBoIGluIHRoZSBjaGFuZ2Ugem9vbS4gVG8gc2hvdyB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMgaW4gdGhlIHRvb2x0aXAsIHRoZXkgbXVzdCBiZSBzcGVjaWZpZWQgbGlrZSBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMSwgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTIsIGV0Yy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNBQiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIFBJUiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2lnbmFscyBmb3IgZWFjaCBJVFNNQ2hhbmdlIHN0YXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0ZW1wbGF0ZSB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc2hvdyB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciBub3RpZmljYXRpb25zIHNob3VsZCBiZSBzZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyBvZiBhIGNoYW5nZSBoaXN0b3J5IGVudHJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIGFuIGFnZW50IGNhbiBleGNoYW5nZSB0aGUgWC1heGlzIG9mIGEgc3RhdCBpZiBoZSBnZW5lcmF0ZXMgb25lLid9ID0KICAgICAgICAn57Wx6KiI6Lu444KS44CB5ouF5b2T6ICF44GM5paw44Gf44Gr5L2c5oiQ44GX44Gf5aC05ZCI44Gv44CB5ouF5b2T6ICF44GM5Lqk5o+b44Gn44GN44KL44KI44GG44Gr44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgZG9uZSBmb3IgY29uZmlnIGl0ZW0gY2xhc3Nlcy4nfSA9CiAgICAgICAgJ+WFsemAmue1seioiOODouOCuOODpeODvOODq+OBjOOAgeani+aIkOOCouOCpOODhuODoOODu+OCr+ODqeOCueOBq+mWouOBl+OBpuihjOOCj+OCjOOBn+WkieabtOOBrue1seioiOOCkueUn+aIkOOBl+OBpuOCiOOBhOOBi+OBqeOBhuOBi+OCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyBjaGFuZ2Ugc3RhdGUgdXBkYXRlcyB3aXRoaW4gYSB0aW1lcGVyaW9kLid9ID0KICAgICAgICAn5YWx6YCa57Wx6KiI44Oi44K444Ol44O844Or44GM44CB5LiA5a6a5pyf6ZaT5YaF44Gr44GK44GR44KL5aSJ5pu054q25oWL44Ki44OD44OX44OH44O844OI44Gr6Zai44GZ44KL44CB5aSJ5pu044Gu57Wx6KiI44KS55Sf5oiQ44GX44Gm44KI44GE44GL44Gp44GG44GL44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIHRoZSByZWxhdGlvbiBiZXR3ZWVuIGNoYW5nZXMgYW5kIGluY2lkZW50IHRpY2tldHMuJ30gPQogICAgICAgICflhbHpgJrntbHoqIjjg6Ljgrjjg6Xjg7zjg6vjgYzjgIHlpInmm7TjgajjgqTjg7Pjgrfjg4fjg7Pjg4jjg7vjg4HjgrHjg4Pjg4jplpPjga7plqLkv4LjgavplqLjgZnjgovjgIHlpInmm7Tjga7ntbHoqIjjgpLnlJ/miJDjgZfjgabjgojjgYTjgYvjganjgYbjgYvjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcy4nfSA9CiAgICAgICAgJ+WFsemAmue1seioiOODouOCuOODpeODvOODq+OBjOOAgeWkieabtOOBrue1seioiOOCkueUn+aIkOOBl+OBpuOCiOOBhOOBi+OBqeOBhuOBi+OCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCB0aGUgbnVtYmVyIG9mIFJmYyB0aWNrZXRzIGEgcmVxdWVzdGVyIGNyZWF0ZWQuJ30gPQogICAgICAgICflhbHpgJrntbHoqIjjg6Ljgrjjg6Xjg7zjg6vjgYzjgIHjg6rjgq/jgqjjgrnjgr/jg7zvvIjopoHmsYLogIXvvInjgYzkvZzmiJDjgZfjgZ9SZmPjg4HjgrHjg4Pjg4jjga7mlbDjga7ntbHoqIjjgpLnlJ/miJDjgZfjgabjgojjgYTjgYvjganjgYbjgYvjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgKGZvciBjaGFuZ2VzIGFuZCB3b3Jrb3JkZXJzKSBzaG93biBpbiB0aGUgY2hhbmdlIHByaW50IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2Ugem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgcmVwb3J0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pY0ZpZWxkIGV2ZW50IG1vZHVsZSB0byBoYW5kbGUgdGhlIHVwZGF0ZSBvZiBjb25kaXRpb25zIGlmIGR5bmFtaWMgZmllbGRzIGFyZSBhZGRlZCwgdXBkYXRlZCBvciBkZWxldGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcndhcmQgc2NoZWR1bGUgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb3ZlciBhcHByb3ZlZCBjaGFuZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDQUIgVGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ29uZGl0aW9uIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlciBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgUElSIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBub3RpZmljYXRpb24gcnVsZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VzJ30gPSAnSVRTTeWkieabtOeuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q0FCIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q2hhbmdlcyBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeVdvcmtvcmRlcnMgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRGVsZXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQgQ0FCLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQgQ29udGVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGNsZWFucyB1cCBjb25kaXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGNhY2hlIGZvciBhIHRvb2xiYXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgZGVsZXRlcyB0aGUgaGlzdG9yeSBvZiBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IG1hdGNoZXMgY29uZGl0aW9ucyBhbmQgZXhlY3V0ZXMgYWN0aW9ucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHNlbmRzIG5vdGlmaWNhdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY29uZGl0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRvIHJlY2FsY3VsYXRlIHRoZSB3b3Jrb3JkZXIgbnVtYmVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gc2V0IHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBvZiB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01DaGFuZ2UnfSA9ICdJVFNN5aSJ5pu0566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01Xb3JrT3JkZXInfSA9ICdJVFNN5qWt5YuZ5oyH56S6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGZyZXF1ZW5jeSBpcyBcJ3JlZ3VsYXJseVwnLCB5b3UgY2FuIGNvbmZpZ3VyZSBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgKGV2ZXJ5IFggaG91cnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2dmaWxlIGZvciB0aGUgSVRTTSBjaGFuZ2UgY291bnRlci4gVGhpcyBmaWxlIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjaGFuZ2UgbnVtYmVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rdXAgb2YgQ0FCIG1lbWJlcnMgZm9yIGF1dG9jb21wbGV0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rdXAgb2YgYWdlbnRzLCB1c2VkIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIGlmIFdvcmtPcmRlckFkZCBvciBXb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUgc2hvdWxkIGJlIHBlcm1pdHRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIENBQiBtZW1iZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGFnZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGNoYW5nZSBidWlsZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGNoYW5nZSBtYW5hZ2VyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIHdvcmtvcmRlciBhZ2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgbm8gd29ya29yZGVyIGFnZW50IGlzIHNldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGFnZW50IGlzIGNvbnRhaW5lZCBpbiB0aGUgY29uZmlndXJlZCBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGEgbGluayB0byBjcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4gVGhlIHRpY2tldCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgbGlua2VkIHdpdGggdGhlIG5ldyBjaGFuZ2UuJ30gPQogICAgICAgICfjgZPjga7jg4HjgrHjg4Pjg4jjgYvjgonlpInmm7TjgpLkvZzmiJDjgZnjgovjgZ/jgoHjga7jg6rjg7Pjgq/jgpLooajnpLrjgZXjgZvjgovjg6Ljgrjjg6Xjg7zjg6vjgafjgZnjgILjg4HjgrHjg4Pjg4jjga/jgIHoh6rli5XnmoTjgavmlrDjgZfjgYTlpInmm7Tjgajjg6rjg7Pjgq/jgZXjgozjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBUaW1lIFNsb3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgYWxsIHdvcmtvcmRlcnMgaW4gdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IChmcm9tIHRlbXBsYXRlKSd9ID0gJ+aWsOimjyjjg4bjg7Pjg5fjg6zjg7zjg4jjgYvjgokpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgdXNlcnMgb2YgdGhlc2UgZ3JvdXBzIGhhdmUgdGhlIHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0aWNrZXQgdHlwZXMgYXMgZGVmaW5lZCBpbiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiBpZiB0aGUgZmVhdHVyZSAiVGlja2V0OjpBY2w6Ok1vZHVsZSMjIzIwMC1UaWNrZXQ6OkFjbDo6TW9kdWxlIiBpcyBlbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG92ZXIgYWxsIENoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BJUid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KSd9ID0gJ+S6i+W+jOODrOODk+ODpeODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQU0EnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIFVzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFzayBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNoYW5nZXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgY2hhbmdlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXNlbnRzIGEgbGluayBpbiB0aGUgbWVudSB0byBzaG93IHRoZSBpbnZvbHZlZCBwZXJzb25zIGluIGEgY2hhbmdlLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggY2hhbmdlIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSAoUFNBKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHkgKFBTQSkgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb2YgYXBwcm92ZWQgY2hhbmdlcyBhbmQgdGhlaXIgc2VydmljZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyBpbiBvcmRlciBmb3IgYW4gYWdlbnQgdG8gdGFrZSBhIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGFjY2VzcyB0aGUgb3ZlcnZpZXcgb2YgYWxsIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWRkIGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNoYW5nZSB0aGUgd29ya29yZGVyIGFnZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZXNcJyBDQUIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzIGZyb20gdGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgYSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBpbnZvbHZlZCBwZXJzb25zIG9mIGEgY2hhbmdlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gbW92ZSBjaGFuZ2VzIGluIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcHJpbnQgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcmVzZXQgY2hhbmdlcy4nfSA9ICflpInmm7TnrqHnkIbpoIXnm67jgpLjg6rjgrvjg4Pjg4jjgZnjgovjgavjga/mqKnpmZDjgYzlv4XopoHjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyBhIENBQiBtZW1iZXIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IG92ZXJ2aWV3IG92ZXIgYWxsIHRlbXBsYXRlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgem9vbSBvZiBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIENoYW5nZSBTY2hlZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIGNoYW5nZSBQU0EuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2VzIHdpdGggYW4gdXBjb21pbmcgUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gd3JpdGUgYSByZXBvcnQgZm9yIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICflpInmm7TnrqHnkIbpoIXnm67jgajphY3kuIvjga7kvZzmpa3jgqrjg7zjg4Djg7zjgpLjg6rjgrvjg4Pjg4jjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIHRhc2sgdG8gY2hlY2sgaWYgc3BlY2lmaWMgdGltZXMgaGF2ZSBiZWVuIHJlYWNoZWQgaW4gY2hhbmdlcyBhbmQgd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIGNoYW5nZSBhcyBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2hlZHVsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY3JlZW4gYWZ0ZXIgY3JlYXRpbmcgYSB3b3Jrb3JkZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMnfSA9ICflpInmm7TnrqHnkIbpoIXnm67jgpLmpJzntKInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMuJ30gPSAn5aSJ5pu0566h55CG6aCF55uu44KS5qSc57Si44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNoYW5nZSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNoYW5nZSBudW1iZXIsIHRoZSBTeXN0ZW1JRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQgd2l0aCBTeXN0ZW1JRC5jb3VudGVyIGZvcm1hdCAoZS5nLiAxMDAxMTgsIDEwMDExOSkuIFdpdGggIkRhdGUiLCB0aGUgY2hhbmdlIG51bWJlcnMgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgYSBjb3VudGVyOyB0aGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LmNvdW50ZXIsIGUuZy4gMjAxMDA2MjQwMDAwMSwgMjAxMDA2MjQwMDAwMi4gV2l0aCAiRGF0ZUNoZWNrc3VtIiwgdGhlIGNvdW50ZXIgd2lsbCBiZSBhcHBlbmRlZCBhcyBjaGVja3N1bSB0byB0aGUgc3RyaW5nIG9mIGRhdGUgcGx1cyB0aGUgU3lzdGVtSUQuIFRoZSBjaGVja3N1bSB3aWxsIGJlIHJvdGF0ZWQgb24gYSBkYWlseSBiYXNpcy4gVGhpcyBmb3JtYXQgbG9va3MgbGlrZSBZZWFyLk1vbnRoLkRheS5TeXN0ZW1JRC5Db3VudGVyLkNoZWNrU3VtLCBlLmcuIDIwMTAwNjI0MTAwMDAwMTcsIDIwMTAwNjI0MTAwMDAwMjYuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBhZ2VudCBmb3IgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRJVFNNQ2hhbmdlWm9vbSBhbmQgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIG1pbmltYWwgY2hhbmdlIGNvdW50ZXIgc2l6ZSAoaWYgIkF1dG9JbmNyZW1lbnQiIHdhcyBzZWxlY3RlZCBhcyBJVFNNQ2hhbmdlOjpOdW1iZXJHZW5lcmF0b3IpLiBEZWZhdWx0IGlzIDUsIHRoaXMgbWVhbnMgdGhlIGNvdW50ZXIgc3RhcnRzIGZyb20gMTAwMDAuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3IgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3Igd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBjaGVja2JveCBpbiB0aGUgQWdlbnRJVFNNV29ya09yZGVyRWRpdCBzY3JlZW4gdGhhdCBkZWZpbmVzIGlmIHRoZSB0aGUgZm9sbG93aW5nIHdvcmtvcmRlcnMgc2hvdWxkIGFsc28gYmUgbW92ZWQgaWYgYSB3b3Jrb3JkZXIgaXMgbW9kaWZpZWQgYW5kIHRoZSBwbGFubmVkIGVuZCB0aW1lIGhhcyBjaGFuZ2VkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBjaGFuZ2luZyB0aGUgd29ya29yZGVyIGFnZW50LCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgY2hhbmdlIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgY2hhbmdlLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIHdvcmtvcmRlciwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZWRpdGluZyB0aGUgcmVwb3J0IG9mIGEgd29ya29yZGVyLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjaGFuZ2Ugd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgd29ya29yZGVyIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBtb3ZpbmcgdGhlIHRpbWUgc2xvdCBvZiBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRha2luZyBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGNvbmRpdGlvbnMgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSB3b3Jrb3JkZXIgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgd29ya29yZGVyIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgd29ya29yZGVyIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byByZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44OV44Kn44O844K544Gu5aSJ5pu0566h55CG44K644O844Og44O744OT44Ol44O844Gn44CB5aSJ5pu05YaF5a6544KS44Oq44K744OD44OI44GZ44KL44Gf44KB44Gu44Oq44Oz44Kv44KS44Oh44OL44Ol44O844Gr6KGo56S644GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjaGFuZ2UgaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRlIE1hY2hpbmUnfSA9ICfnirbmhYvnrqHnkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RvcmVzIGNoYW5nZSBhbmQgd29ya29yZGVyIGlkcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB0ZW1wbGF0ZSBpZCwgd2hpbGUgYSB1c2VyIGlzIGVkaXRpbmcgYSB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIFdvcmtvcmRlcid9ID0gJ+ODr+ODvOOCr+OCquODvOODgOODvOOCkuWPl+OBkeWPluOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIFdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBPdmVydmlldyd9ID0gJ+ODhuODs+ODl+ODrOODvOODiOamguimgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZS4nfSA9ICfjg4bjg7Pjg5fjg6zjg7zjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY2hhbmdlLCBlLmcuIENoYW5nZSMsIE15Q2hhbmdlIy4gVGhlIGRlZmF1bHQgaXMgQ2hhbmdlIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSB3b3Jrb3JkZXIsIGUuZy4gV29ya29yZGVyIywgTXlXb3Jrb3JkZXIjLiBUaGUgZGVmYXVsdCBpcyBXb3Jrb3JkZXIjLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgQUNMIG1vZHVsZSByZXN0cmljdHMgdGhlIHVzdWFnZSBvZiB0aGUgdGlja2V0IHR5cGVzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb24gXCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXNcJywgdG8gdXNlcnMgb2YgdGhlIGdyb3VwcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpSZXN0cmljdFRpY2tldFR5cGVzOjpHcm91cHMiLiBBcyB0aGlzIEFDTCBjb3VsZCBjb2xsaWRlIHdpdGggb3RoZXIgQUNMcyB3aGljaCBhcmUgYWxzbyByZWxhdGVkIHRvIHRoZSB0aWNrZXQgdHlwZSwgdGhpcyBzeXNjb25maWcgb3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIHNob3VsZCBvbmx5IGJlIGFjdGl2YXRlZCBpZiBuZWVkZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBTbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R5cGVzIG9mIHRpY2tldHMsIHdoZXJlIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IGEgbGluayB0byBhZGQgYSBjaGFuZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFkZCAoZnJvbSB0ZW1wbGF0ZSkuJ30gPSAnKOODhuODs+ODl+ODrOODvOODiOOBi+OCiSnkvZzmpa3jgqrjg7zjg4Djg7zjgpLov73liqDjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFkZC4nfSA9ICfkvZzmpa3jgqrjg7zjg4Djg7zjgpLov73liqDjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFnZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgRGVsZXRlLid9ID0gJ+S9nOalreOCquODvOODgOODvOOCkuWJiumZpOOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgRWRpdC4nfSA9ICfkvZzmpa3jgqrjg7zjg4Djg7zjgpLnt6jpm4bjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEhpc3RvcnkgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEhpc3RvcnkuJ30gPSAn5L2c5qWt44Kq44O844OA44O85bGl5q20JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBSZXBvcnQuJ30gPSAn5L2c5qWt44Kq44O844OA44O844Os44Od44O844OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlZ3VsYXJseSd9ID0gJyc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bXNfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLYXRlZ29yaSA8LT4gS2VzYW4gPC0+IGtldXRhbWFhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDYXRlZ29yeSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnUGVudGFkYmlyYW4gZ2FidW5nYW4ga2F0ZWdvcmkga2V1dGFtYWFuIDwtPiBJbXBhay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ0JlcmlrYW4ga2V1dGFtYWFuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlTWFuYWdlbWVudCBOb3RpZmljYXRpb24gTWFuYWdlbWVudCd9ID0gJ0lUU00gUGVuZ3VydXNhbiBQZXJ1YmFoYW4gcGVuZ3VydXNhbiBwZW1iZXJpdGFodWFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOb3RpZmljYXRpb24gUnVsZSd9ID0gJ1BlcmF0dXJhbiBQZW1iZXJpdGFodWFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1bGUnfSA9ICdQZXJhdHVyYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBub3RpZmljYXRpb24gc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ1BlbWJlcml0YWh1YW4gbWVtZXJsdWthbiBuYW1hISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkLid9ID0gJ05hbWFueWEgZGlrZWhlbmRha2kuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01TdGF0ZU1hY2hpbmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFN0YXRlIE1hY2hpbmUnfSA9ICdLZWFkYWFuIE1lc2luIEFkbWluJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIGNhdGFsb2cgY2xhc3MhJ30gPSAnUGlsaWgga2VsYXMga2F0YWxvZyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRhbG9nIGNsYXNzIGlzIHJlcXVpcmVkISd9ID0gJ1NhdHUga2VsYXMga2F0YWxvZyBkaXBlcmx1a2FuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnVGFtYmFoIHBlcmFsaWhhbiBzdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0tlbGFzIGthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IE5hbWUnfSA9ICdOYW1hIE9iamVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG92ZXIgc3RhdGUgdHJhbnNpdGlvbnMgZm9yJ30gPSAnVGluamF1YW4gYmFnaSBrZWFkYWFuIHBlcmFsaWhhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnTWVtYWRhbSBwZXJhbGloYW4ga2VhZGFhbiBpbmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgbmV3IHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAnTWVuYW1iYWggcGVyYWxpaGFuIGtlYWRhYW4geWFuZyBiYXJ1IHVudHVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBzdGF0ZSEnfSA9ICdTaWxhIHBpbGloIGtlYWRhYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBuZXh0IHN0YXRlISd9ID0gJ1NpbGEgcGlsaWggc3RhdHVzIGJlcmlrdXQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ1Blbnl1bnRpbmdhbiBwZXJhbGloYW4ga2VhZGFhbiB1bnR1ayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoZSBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnQWRha2FoIGFuZGEgbWFodSBtZW1hZGFtIHN0YXR1cyBwZXJhbGloYW4gaW5pIGJlbmFyLWJlbmFyPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2hhbmdlJ30gPSAnVHVrYXIgVGFtYmFoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlJ30gPSAnVWJhaCBJVFNNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1c3RpZmljYXRpb24nfSA9ICdqdXN0aWZpa2FzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnB1dCBpbnZhbGlkLid9ID0gJ2lucHV0IHRpZGFrIHNhaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnS2VzYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdGVkIERhdGUnfSA9ICdUYXJpa2ggeWFuZyBkaW1pbnRhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBDaGFuZ2UgVGVtcGxhdGUnfSA9ICdUdWthciBQaWxpaCBUZW1wbGF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgdHlwZSd9ID0gJ01hc2EtamVuaXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCB0aW1lIHR5cGUuJ30gPSAnTWFzYSBUYWlwIHRpZGFrIHNhaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpbWUnfSA9ICdNYXNhIGJhcnUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBDQUIgYXMgdGVtcGxhdGUnfSA9ICdJbmkgcGVydWJhaGFuIHNlYmFnYWkgdGVtcGxhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyB0byBpbnZvbHZlZCBwZXJzb25zIHNjcmVlbid9ID0gJ3BlcmdpIGtlcGFkYSBvcmFuZy1vcmFuZyBza3JpbiB0ZXJsaWJhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIE5hbWUnfSA9ICduYW1hIHRpZGFrIHNhaCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25zIGFuZCBBY3Rpb25zJ30gPSAnU3lhcmF0LXN5YXJhdCBkYW4gVGluZGFrYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmRpdGlvbid9ID0gJ1BhZGFtIGtlYWRhYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBjb25kaXRpb24nfSA9ICdUYW1iYWgga2VhZGFhbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb25kaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBhIHZhbGlkIG5hbWUuJ30gPSAnUGVybHUgbmFtYSB5YW5nIHNhaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB2YWxpZCBuYW1lIGlzIG5lZWRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWU6J30gPSAnTWVueWFsaW4gbmFtYTonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBuYW1lIGlzIGFscmVhZHkgdXNlZCBieSBhbm90aGVyIGNvbmRpdGlvbi4nfSA9ICdOYW1hIGpuaSBzdWRhaCBkaWd1bmFrYW4gb2xlaCBrZWFkYWFuIGxhaW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hdGNoaW5nJ30gPSAnU2VwYWRhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbnkgZXhwcmVzc2lvbiAoT1IpJ30gPSAnU2ViYXJhbmcgZWtzcHJlc2kgKEFUQVUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBleHByZXNzaW9ucyAoQU5EKSd9ID0gJ1NlbXVhIHVuZ2thcGFuIGxvZ2lrIChEQU4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cHJlc3Npb25zJ30gPSAnVW5na2FwYW4gbG9naWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0b3InfSA9ICdwZW1pbGloJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdG9yJ30gPSAnT3BlcmF0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEV4cHJlc3Npb24nfSA9ICdNZW1hZGFtIHVuZ2thcGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEV4cHJlc3Npb25zIGZvdW5kLid9ID0gJ1RpYWRhIHVuZ2thcGFuIGxvZ2lrIGRpdGVtdWkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgZXhwcmVzc2lvbid9ID0gJ1RhbWJhaCB1bmdrYXBhbiBiYXJ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBBY3Rpb24nfSA9ICdNZW1hZGFtIHRpbmRha2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEFjdGlvbnMgZm91bmQuJ30gPSAnVGlhZGEgVGluZGFrYW4gZGlqdW1wYWkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgYWN0aW9uJ30gPSAnVGFtYmFoIHRpbmRha2FuIGJhcnUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNoYW5nZT8nfSA9ICdBZGFrYWggYW5kYSBiZW5hci1iZW5hciBtYWh1IHVudHVrIG1lbWFkYW0gcGVydWJhaGFuIGluaT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgJXMlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiAlcyVzJ30gPSAnU2VqYXJhaCAlcyVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlcid9ID0gJ1BlcmludGFoIEtlcmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgZGV0YWlscyd9ID0gJ0tlcGVyaW5jaGlhbiBtZW51bmp1a2thbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHdvcmtvcmRlcid9ID0gJ1BlcmludGFoIGtlcmphIG1lbnVuanVra2FuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VIaXN0b3J5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlsZWQgaGlzdG9yeSBpbmZvcm1hdGlvbiBvZiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RpZmllZCd9ID0gJ0RpdWJhaHN1YWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2xkIFZhbHVlJ30gPSAnTmlsYWkgTGFtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgVmFsdWUnfSA9ICdOaWxhaSBCYXJ1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSW52b2x2ZWQgUGVyc29ucyBvZiAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludm9sdmVkIFBlcnNvbnMnfSA9ICdPcmFuZyB0ZXJsaWJhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VNYW5hZ2VyJ30gPSAnUGVydWJhaGFuIFBlbmd1cnVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgaW52YWxpZC4nfSA9ICdQZW5nZ3VuYSB0aWRhayBzYWgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlQnVpbGRlcid9ID0gJ1BlcnViYWhhbiBNZW1iaW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBBZHZpc29yeSBCb2FyZCd9ID0gJ1BlcnViYWhhbi1QZW5hc2loYXQtTGVtYmFnYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgVGVtcGxhdGUnfSA9ICdDQUItVGVtcGxhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHBseSBUZW1wbGF0ZSd9ID0gJ21lbW9ob24gdGVtcGxhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXdUZW1wbGF0ZSd9ID0gJ1RlbXBsYXQgYmFydSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHRoaXMgQ0FCIGFzIHRlbXBsYXRlJ30gPSAnU2ltcGFuIENBQiBpbmkgc2ViYWdhaSB0ZW1wbGF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0byBDQUInfSA9ICdUYW1iYWgga2VwYWRhIENBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIFVzZXInfSA9ICdQZW5nZ3VuYSBUaWRhayBTYWgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBDQUInfSA9ICdDQUIgc2VtYXNhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ1RldGFwYW4ga29udGVrcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VzIHBlciBwYWdlJ30gPSAnUGVydWJhaGFuIHNldGlhcCBoYWxhbWFuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgVGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZ2VudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQnVpbGRlcid9ID0gJ1BlcnViYWhhbiBwZW1iaW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBNYW5hZ2VyJ30gPSAnUGVydWJhaGFuIFBlbmd1cnVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlcnMnfSA9ICdQZXJpbnRhaCBLZXJqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBUaW1lJ30gPSAnTWFzYSB5YW5nIERpbWludGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBTdGFydCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRW5kIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsIFN0YXJ0IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsIEVuZCBUaW1lJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VSZXNldAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIHJlc2V0IHRoaXMgY2hhbmdlPyd9ID0gJ0FkYWthaCBhbmRhIGJlbmFyLWJlbmFyIG1haHUgdW50dWsgbWVuZXRhcGthbiBzZW11bGEgcGVydWJhaGFuIGluaT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGUuZy4gMTAqNTE1NSBvciAxMDU2NTgqKSd9ID0gJyh6LiBCLiAxMCo1MTU1IG9yIDEwNTY1OCopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBBZ2VudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLmcuJ30gPSAnY3RoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQ3VzdG9tZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgUmVwb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIEltcGFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQ2F0ZWdvcnknfSA9ICdVYmFoIEthdGVnb3JpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhiZWZvcmUvYWZ0ZXIpJ30gPSAnKHNlYmVsdW0vc2VsZXBhcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJldHdlZW4pJ30gPSAnKGRpYW50YXJhKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgQ2hhbmdlIGFzIFRlbXBsYXRlJ30gPSAnU2ltcGFuIFBlcnViYWhhbiBzZWJhZ2FpIFRlbXBsYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB0ZW1wbGF0ZSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnVGVtcGxhdGUgaGFydXMgbWVtcHVueWFpIG5hbWEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLid9ID0gJ05hbWEgdGVtcGxhdGUgZGlwZXJsdWthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgU3RhdGVzJ30gPSAnU2V0IFNlbXVsYSBLZWFkYWFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ3cml0ZSBvcmlnaW5hbCB0ZW1wbGF0ZSd9ID0gJ01lbnVsaXMgZ2FudGkgdGVtcGxhdCBhc2FsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCBjaGFuZ2UnfSA9ICdNZW1hZGFtIHBlcnViYWhhbiBhc2FsJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VUaW1lU2xvdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBUaW1lIFNsb3QnfSA9ICdHZXJha2thbiBTbG90IE1hc2EnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbmZvcm1hdGlvbid9ID0gJ21lbmd1YmFoIE1ha2x1bWF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRWZmb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjY291bnRlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbml0aWF0b3IocyknfSA9ICdQZW5nZ2VyYWsgUGVydWJhaGFuKHMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQid9ID0gJ0NBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdUZXJraW5pIGJlcnViYWgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnVGVyYWtoaXIgZGl1YmFoIG9sZWgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gYmxvY2tzLCB5b3UgbWlnaHQgbmVlZCB0byBwcmVzcyBDdHJsIG9yIENtZCBvciBTaGlmdCBrZXkgd2hpbGUgY2xpY2tpbmcgdGhlIGxpbmsgKGRlcGVuZGluZyBvbiB5b3VyIGJyb3dzZXIgYW5kIE9TKS4nfSA9CiAgICAgICAgJ1VudHVrIG1lbWJ1a2EgcGF1dGFuIGRhbGFtIGtldGVyYW5nYW4gYmxvayBiZXJpa3V0LCBhbmRhIG11bmdraW4gcGVybHUgbWVuZWthbiBrZWt1bmNpIEN0cmwgYXRhdSBDbWQgYXRhdSBTaGlmdCBzZW1hc2EgbWVuZWthbiBwYXV0YW4gKGJlcmdhbnR1bmcga2VwYWRhIHBlbGF5YXIgZGFuIHNpc3RlbSBvcGVyYXNpIGFuZGEpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnbWVtdWF0IHR1cnVuIGxhbXBpcmFuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ0FCIFRlbXBsYXRlJ30gPSAnTWVueXVudGluZyB0ZW1wbGF0IENBQic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBjaGFuZ2UgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICdJbmkgYWthbiBtZW5naGFzaWxrYW4gcGVydWJhaGFuIGJhcnUgcGFkYSB0ZW1wbGF0LCBqYWRpIGFuZGEgYm9sZWggbWVuZ3ViYWggZGFuIG1lbnlpbXBhbm55YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5ldyBjaGFuZ2Ugd2lsbCBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgaXQgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICdQZXJ1YmFoYW4gYmFydSBha2FuIGRpcGFkYW0gc2VjYXJhIGF1dG9tYXRpayBzZWxlcGFzIGlhIHRlbGFoIGRpc2ltcGFuIHNlYmFnYWkgdGVtcGxhdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyB3b3Jrb3JkZXIgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICdJbmkgYWthbiBtZW5jaXB0YSBhdHVyYW4ga2VyamEgYmFydSBkYXJpIHRlbXBsYXQsIGphZGkgYW5kYSBib2xlaCBtZW5ndWJhaCBkYW4gbWVueWltcGFubnlhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHRlbXBvcmFyeSBjaGFuZ2Ugd2lsbCBiZSBjcmVhdGVkIHdoaWNoIGNvbnRhaW5zIHRoZSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICdQZXJ1YmFoYW4gc2VtZW50YXJhIGFrYW4gZGl3dWp1ZGthbiB5YW5nIG1lbmdhbmR1bmdpIGF0dXJhbiBrZXJqYSBpdHUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wb3JhcnkgY2hhbmdlIGFuZCBuZXcgd29ya29yZGVyIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSB3b3Jrb3JkZXIgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICdQZXJ1YmFoYW4gc2VtZW50YXJhIGRhbiBhdHVyYW4ga2VyamEgYmFoYXJ1IGFrYW4gZGlwYWRhbSBzZWNhcmEgYXV0b21hdGlrIHNlbGVwYXMgYXR1cmFuIGtlcmphIHRlbGFoIGRpc2ltcGFuIHNlYmFnYWkgdGVtcGxhdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nfSA9ICdBZGFrYWggYW5kYSBpbmdpbiBtZW5lcnVza2FuPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBJRCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENvbnRlbnQnfSA9ICdNZW5ndWJhaCBrYW5kdW5nYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRlbXBsYXRlIENvbnRlbnQnfSA9ICdVYmFoIGthbmR1bmdhbiB0ZW1wbGF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUZW1wbGF0ZSd9ID0gJ1BhZGFtIFRlbXBsYXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlciB0byAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RydWN0aW9uJ30gPSAnQXJhaGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgd29ya29yZGVyIHR5cGUuJ30gPSAnS2VyamEgdGlkYWsgc2FoIG1lbmdpa3V0IHBlc2FuYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHBsYW5uZWQgc3RhcnQgdGltZSBtdXN0IGJlIGJlZm9yZSB0aGUgcGxhbm5lZCBlbmQgdGltZSEnfSA9ICdNYXNhIG11bGEgZGlyYW5jYW5nIG1lc3RpbGFoIHNlYmVsdW0gbWFzYSBha2hpciBkaXJhbmNhbmchJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZm9ybWF0Lid9ID0gJ2Zvcm1hdCB0aWRhayBzYWguJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBXb3Jrb3JkZXIgVGVtcGxhdGUnfSA9ICdQaWxpaCBUZW1wbGF0IFBlcmludGFoIEtlcmphJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZ2VudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBXb3Jrb3JkZXIgQWdlbnQgb2YgJXMlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgd29ya29yZGVyPyd9ID0gJ0FkYWthaCBhbmRhIGJlbmFyLWJlbmFyIGluZ2luIG1lbWFkYW0gaW5pIHBlcmludGFoIGtlcmphPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBXb3Jrb3JkZXIuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIENvbmRpdGlvbiEnfSA9CiAgICAgICAgJ0FuZGEgdGlkYWsgYm9sZWggbWVtYWRhbSBpbmkgVGF0YSBLZXJqYS4gSWEgZGlndW5ha2FuIGRhbGFtIHNla3VyYW5nLWt1cmFuZ255YSBzYXR1IEtlYWRhYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgV29ya29yZGVyIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBDb25kaXRpb24ocyknfSA9ICdQZXJpbnRhaCBLZXJqYSBkaWd1bmFrYW4gZGFsYW0gU3lhcmF0LXN5YXJhdCBiZXJpa3V0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0ICVzJXMtJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBmb2xsb3dpbmcgd29ya29yZGVycyBhY2NvcmRpbmdseSd9ID0gJ0dlcmFra2FuIGF0dXJhbi1hdHVyYW4ga2VyamEgc2V3YWphcm55YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGUgcGxhbm5lZCBlbmQgdGltZSBvZiB0aGlzIHdvcmtvcmRlciBpcyBjaGFuZ2VkLCB0aGUgcGxhbm5lZCBzdGFydCB0aW1lcyBvZiBhbGwgZm9sbG93aW5nIHdvcmtvcmRlcnMgd2lsbCBiZSBjaGFuZ2VkIGFjY29yZGluZ2x5J30gPQogICAgICAgICdKaWthIG1hc2EgYWtoaXIgeWFuZyBkaXJhbmNhbmcgdW50dWsgYXR1cmFuIGtlcmphIGluaSBiZXJ1YmFoLCB6YW1hbiBwZXJtdWxhYW4geWFuZyBkaXJhbmNhbmcgc2VtdWEgYXR1cmFuIGtlcmphIGJlcmlrdXRueWEgYWthbiBiZXJ1YmFoIHNld2FqYXJueWEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgJXMlcy0lcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyUmVwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFJlcG9ydCBvZiAlcyVzLSVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydCd9ID0gJ0xhcG9yYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIHRpbWUhJ30gPSAnTWFzYSBtdWxhIHNlYmVuYXIgbWVzdGkgc2ViZWx1bSBtYXNhIGFraGlyIHNlYmVuYXIhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBhY3R1YWwgc3RhcnQgdGltZSBtdXN0IGJlIHNldCwgd2hlbiB0aGUgYWN0dWFsIGVuZCB0aW1lIGlzIHNldCEnfSA9CiAgICAgICAgJ01hc2EgbXVsYSBzZWJlbmFyIG1lc3RpIGRpdGV0YXBrYW4sIGFwYWJpbGEgYWtoaXIgemFtYW4gc2ViZW5hciBkaXRldGFwa2FuISc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGFrZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBBZ2VudCd9ID0gJ0FnZW4gc2VtYXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byB0YWtlIHRoaXMgd29ya29yZGVyPyd9ID0gJ0FkYWthaCBhbmRhIGJlbmFyLWJlbmFyIG1haHUgbWVuZ2FtYmlsIHBlcmludGFoIGtlcmphPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgV29ya29yZGVyIGFzIFRlbXBsYXRlJ30gPSAnU2ltcGFuIFBlcmludGFoIEtlcmphIHNlYmFnYWkgVGVtcGxhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgd29ya29yZGVyIChhbmQgc3Vycm91bmRpbmcgY2hhbmdlKSd9ID0gJ1BhZGFtIGF0dXJhbiBrZXJqYSBhc2FsIChkYW4gcGVydWJhaGFuIHNla2VsaWxpbmcpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hc2kgUGVyaW50YWggS2VyamEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biBub3RpZmljYXRpb24gJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZXJlIHdhcyBhbiBlcnJvciBjcmVhdGluZyB0aGUgbm90aWZpY2F0aW9uLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDaGFuZ2VzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCB3aXRoIFRpY2tldElEICVzIGRvZXMgbm90IGV4aXN0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaXNzaW5nIHN5c2NvbmZpZyBvcHRpb24gIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGFkZCBjaGFuZ2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlIGZyb20gdGVtcGxhdGUhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDQUJUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNoYW5nZSBmb3VuZCBmb3IgY2hhbmdlSUQgJXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBDQUIgb2YgY2hhbmdlICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgdGhlIHRlbXBsYXRlLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQ29uZGl0aW9uSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyAlcyBpcyBnaXZlbiEnfSA9ICdUaWFkYSAlcyBkaWJlcmlrYW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBjcmVhdGUgbmV3IGNvbmRpdGlvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBDb25kaXRpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBFeHByZXNzaW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgbmV3IEV4cHJlc3Npb24hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgQWN0aW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgbmV3IEFjdGlvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBFeHByZXNzaW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQWN0aW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yOiBVbmtub3duIGZpZWxkIHR5cGUgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uSUQgJXMgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBnaXZlbiBDaGFuZ2VJRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgZG9lcyBub3QgaGF2ZSBhbiBhbGxvd2VkIGNoYW5nZSBzdGF0ZSB0byBiZSBkZWxldGVkISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNoYW5nZUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VIaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBhcyBubyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biB0eXBlICIlcyIgZW5jb3VudGVyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VIaXN0b3J5Wm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSB6b29tLCBubyBIaXN0b3J5RW50cnlJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeUVudHJ5ICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSBDQUIgZm9yIENoYW5nZSAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNYW5hZ2VyLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogQ2hhbmdlTWFuYWdlcid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBDQUInfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU15Q2hhbmdlcy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IENoYW5nZXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU15V29ya09yZGVycy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IFdvcmtvcmRlcnMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVBJUi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFBJUid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUFNBLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUFNBJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgdGhlIHdvcmtvcmRlciBpcyBub3QgYXR0YWNoZWQgdG8gYSBjaGFuZ2UhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGNyZWF0ZSBvdXRwdXQsIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duIGNoYW5nZSB0aXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlcid9ID0gJ1BlcmludGFoIEtlcmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gd29ya29yZGVyIHRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIE92ZXJ2aWV3ICglcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZFN0YXJ0VGltZSd9ID0gJ1JhbmNhbmcgTWFzYSBNdWxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWRFbmRUaW1lJ30gPSAnUmFuY2FuZyBNYXNhIFRhbWF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbFN0YXJ0VGltZSd9ID0gJ01hc2EgTXVsYSBTZWJlbmFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbEVuZFRpbWUnfSA9ICdNYXNhIFRhbWF0IFNlYmVuYXInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVJlc2V0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gcmVzZXQgV29ya09yZGVyICVzIG9mIENoYW5nZSAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHJlc2V0IENoYW5nZSAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVNjaGVkdWxlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogQ2hhbmdlIFNjaGVkdWxlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VTZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlVGl0bGUnfSA9ICdVYmFoIHRhanVrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlcnMnfSA9ICdQZXJpbnRhaCBLZXJqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VTdGF0ZSd9ID0gJ1ViYWggU3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTZWFyY2ggUmVzdWx0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29yayBPcmRlciBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEp1c3RpZmljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEluc3RydWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBSZXBvcnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbXBhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBCeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEFnZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZm9yZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjaGFuZ2UgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSB0aGUgdGVtcGxhdGUgIiVzIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBjaGFuZ2UgIiVzIi4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRpbWVTbG90LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlIGNhblwndCBiZSBtb3ZlZCwgYXMgaXQgaGFzIG5vIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciBmaXJzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IG1vdmUgYSBjaGFuZ2Ugd2hpY2ggYWxyZWFkeSBoYXMgc3RhcnRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIG1vdmUgdGhlIGluZGl2aWR1YWwgd29ya29yZGVycyBpbnN0ZWFkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY3VycmVudCAlcyBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlICVzIG9mIGFsbCB3b3Jrb3JkZXJzIGhhcyB0byBiZSBkZWZpbmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gbW92ZSB0aW1lIHNsb3QgZm9yIHdvcmtvcmRlciAjJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgJXMgcGVybWlzc2lvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gVGVtcGxhdGVJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHRlbXBsYXRlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICIlcyIhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSB3b3Jrb3JkZXIgZnJvbSB0ZW1wbGF0ZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBUZW1wbGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyBvbiB0aGUgY2hhbmdlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIHdvcmtvcmRlciEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFnZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHNldCB0aGUgd29ya29yZGVyIGFnZW50IG9mIHRoZSB3b3Jrb3JkZXIgIiVzIiB0byBlbXB0eSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIHRoZSB3b3Jrb3JkZXIgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGZpbmQgQ2hhbmdlIGZvciBXb3JrT3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHdvcmtvcmRlciAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgV29ya09yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6Oid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgZW50cnkgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSBab29tJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUYWtlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdGFrZSB0aGUgd29ya29yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB3b3Jrb3JkZXIgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXQvSVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBjb25maWcgb3B0aW9uICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgb3B0aW9uICVzIG5lZWRzIHRvIGJlIGEgSEFTSCByZWYhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNvbmZpZyBvcHRpb24gZm91bmQgZm9yIHRoZSB2aWV3ICIlcyIhJ30gPSAnVGlhZGEgcGlsaWhhbiBjb25maWcgZGlqdW1wYWkgdW50dWsgcGFuZGFuZ2FuICIlcyIhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpdGxlOiAlcyB8IFR5cGU6ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgQ0FCcyd9ID0gJ0NBQiBTYXlhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNoYW5nZXMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IENoYW5nZXMnfSA9ICdQZXJ1YmFoYW4gU2F5YSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBXb3JrIE9yZGVycyd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNoYW5nZU1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVxdWVzdGVkJ30gPSAnZGltaW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIGFwcHJvdmFsJ30gPSAncGVuZ2VzYWhhbiB0ZXJnYW50dW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlamVjdGVkJ30gPSAnZGl0b2xhayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZlZCd9ID0gJ0Rpc2Foa2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luIHByb2dyZXNzJ30gPSAnZGFsYW0gcHJvc2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3BlbmRpbmcgcGlyJ30gPSAnUElSIHRlcmdhbnR1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc3VjY2Vzc2Z1bCd9ID0gJ2JlcmpheWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZmFpbGVkJ30gPSAnZGlnYWdhbGthbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjYW5jZWxlZCd9ID0gJ2RpYmF0YWxrYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmV0cmFjdGVkJ30gPSAnZGl0YXJpayBiYWxpayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjcmVhdGVkJ30gPSAnZGljaXB0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhY2NlcHRlZCd9ID0gJ0RpdGVyaW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlYWR5J30gPSAnc2VkaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYXBwcm92YWwnfSA9ICdQZW5nZXNhaGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dvcmtvcmRlcid9ID0gJ3VydXRhbmtlcmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JhY2tvdXQnfSA9ICdtZW5hcmlrZGlyaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydkZWNpc2lvbid9ID0gJ2tlcHV0dXNhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwaXInfSA9ICdQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyd9ID0gJ2lhbGFoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCd9ID0gJ2lhbGFoIHRpZGFrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGVtcHR5J30gPSAnaWFsYWgga29zb25nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCBlbXB0eSd9ID0gJ2lhbGFoIHRpZGFrIGtvc29uZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBncmVhdGVyIHRoYW4nfSA9ICdpYWxhaCBsZWJpaCBiZXNhciBkYXJpcGFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBsZXNzIHRoYW4nfSA9ICdpYWxhaCBrdXJhbmcgZGFyaXBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgYmVmb3JlJ30gPSAnaWFsYWggc2ViZWx1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBhZnRlcid9ID0gJ2lhbGFoIHNlbGVwYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY29udGFpbnMnfSA9ICdtZW5nYW5kdW5naSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgY29udGFpbnMnfSA9ICd0aWRhayBtZW5nYW5kdW5naSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiZWdpbnMgd2l0aCd9ID0gJ2Jlcm11bGEgZGVuZ2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2VuZHMgd2l0aCd9ID0gJ3RhbWF0IGRlbmdhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzZXQnfSA9ICdzZXQnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2YgdGhlIGFnZW50cyB3aG8gaGF2ZSBwZXJtaXNzaW9uIHRvIHRha2Ugd29ya29yZGVycy4gS2V5IGlzIGEgbG9naW4gbmFtZS4gQ29udGVudCBpcyAwIG9yIDEuJ30gPQogICAgICAgICdTYXR1IHNlbmFyYWkgYWdlbiB5YW5nIG1lbXB1bnlhaSBrZWJlbmFyYW4gdW50dWsgbWVuZ2FtYmlsIHBlc2FuYW4ga2VyamEuIFV0YW1hIGFkYWxhaCBuYW1hIGxvZyBtYXN1ay4gS2FuZHVuZ2FuIGFkYWxhaCAwIGF0YXUgMSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2Ygd29ya29yZGVyIHN0YXRlcywgYXQgd2hpY2ggdGhlIEFjdHVhbFN0YXJ0VGltZSBvZiBhIHdvcmtvcmRlciB3aWxsIGJlIHNldCBpZiBpdCB3YXMgZW1wdHkgYXQgdGhpcyBwb2ludC4nfSA9CiAgICAgICAgJ1NhdHUgc2VuYXJhaSBzdGF0dXMgcGVzYW5hbiBrZXJqYSwgZGkgbWFuYSBNYXNhIE11bGEgc2ViZW5hciBwZXJpbnRhaCBrZXJqYSBha2FuIGRpdGV0YXBrYW4gamlrYSBpYSBhZGFsYWgga29zb25nIHBhZGEga2V0aWthIGluaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlcid9ID0gJ1RhbWJhaCBVcnV0YW5rZXJqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyIChmcm9tIFRlbXBsYXRlKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBjaGFuZ2UgZnJvbSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgKGZyb20gdGVtcGxhdGUpIHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgZnJvbSB0ZW1wbGF0ZSd9ID0gJ1RhbWJhaCBkYXJpcGFkYSB0ZW1wbGF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIHRoZSBDSVAgbWF0cml4Lid9ID0gJ0FkbWluIG1hdHJpa3MgQ0lQLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgc3RhdGUgbWFjaGluZS4nfSA9ICdBZG1pbiBqZW50ZXJhIGtlcmFqYWFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2UgYWR2aXNvcnkgYm9hcmRzLid9ID0KICAgICAgICAnQWdlbiBhbnRhcmEgbXVrYSBtb2R1bCBwZW1iZXJpdGFodWFuIHVudHVrIG1lbGloYXQgYmlsYW5nYW4gbWVudWthciBsZW1iYWdhIHBlbmFzaWhhdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlcyBtYW5hZ2VkIGJ5IHRoZSB1c2VyLid9ID0KICAgICAgICAnQWdlbiBhbnRhcmEgbXVrYSBtb2R1bCBwZW1iZXJpdGFodWFuIHVudHVrIG1lbGloYXQgYmViZXJhcGEgcGVydWJhaGFuIHlhbmcgZGl1cnVza2FuIG9sZWggcGVuZ2d1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMuJ30gPQogICAgICAgICdBZ2VuIGFudGFyYSBtdWthIG1vZHVsIHBlbWJlcml0YWh1YW4gdW50dWsgbWVsaWhhdCBiZWJlcmFwYSBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIE1lbWJlciBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgY2hhbmdlIG1hbmFnZW1lbnQgdG9vbGJhcnMuIERlZmF1bHQ6IDMgaG91cnMgKDE4MCBtaW51dGVzKS4nfSA9CiAgICAgICAgJ1dha3R1IGNhY2hlIGRhbGFtIG1pbml0IHVudHVrIGJhciBhbGF0IHBlbmd1cnVzYW4gY2hhbmdlLiBMYWxhaTogMyBqYW0gKDE4MCBtaW5pdCkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50LiBEZWZhdWx0OiA1IGRheXMgKDcyMDAgbWludXRlcykuJ30gPQogICAgICAgICdXYWt0dSBjYWNoZSBkYWxhbSBtaW5pdCB1bnR1ayBwZW5ndXJ1c2FuIGNoYW5nZS4gTGFsYWk6IDUgaGFyaSAoNzIwMCBtaW5pdCkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBDQUIgVGVtcGxhdGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW52b2x2ZWQgUGVyc29ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdUaW5qYXVhbiBDaGFuZ2UgSGFkICJLZWNpbCInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZSd9ID0gJ1ViYWggSmFkdWFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhbmQgV29ya29yZGVyIFRlbXBsYXRlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIHdvcmtvcmRlciB0ZW1wbGF0ZXMgZWRpdGVkIGJ5IHRoaXMgdXNlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFyZWEuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBpbnZvbHZlZCBwZXJzb25zIG9mIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBsaW1pdCBwZXIgcGFnZSBmb3IgQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdUdWthciByb3V0ZXIgY2FyaWFuIGJhY2tlbmQgYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIEVkaXQnfSA9ICdBdWRpdCBTeWFyYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIE92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyZSB3aGljaCBzY3JlZW4gc2hvdWxkIGJlIHNob3duIGFmdGVyIGEgbmV3IHdvcmtvcmRlciBoYXMgYmVlbiBjcmVhdGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyZXMgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IHdoZW4gcGxhbm5lZCB0aGUgc3RhcnQgdGltZSBvciBvdGhlciB0aW1lIHZhbHVlcyBoYXZlIGJlZW4gcmVhY2hlZC9wYXNzZWQuJ30gPQogICAgICAgICdEaWtvbmZpZ3VyYXNpIGJlcmFwYSBrZXJhcCBwZW1iZXJpdGFodWFuIGFrYW4gZGloYW50YXIgYXBhYmlsYSBtZXJhbmNhbmcgbWFzYSBtdWxhIGF0YXUgbmlsYWkgbWFzYSBsYWluIHRlbGFoIG1lbmNhcGFpIC8gZGlsdWx1c2thbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSd9ID0gJ0NpcHRhIFViYWgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSAoZnJvbSBUZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgY2hhbmdlIChmcm9tIHRlbXBsYXRlKSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgSVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBub3RpZmljYXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgZm9yIGEgd29ya29yZGVyLiBUaGlzIGVudHJ5IG11c3QgZXhpc3QgaW4gZ2VuZXJhbCBjYXRhbG9nIGNsYXNzIFwnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpUeXBlXCcuJ30gPQogICAgICAgICdKZW5pcyBsYWxhaSB1bnR1ayBwZXJpbnRhaCBrZXJqYS4gRW50cmkgaW5pIG1lc3RpIHd1anVkIGRpIGRhbGFtIGtlbGFzIGthdGFsb2cgYW0gXCdJVFNNOjpQZW5ndXJ1c2FuIFBlcnViYWhhbjo6UGVyaW50YWggS2VyamE6OkplbmlzXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICdUYWtyaWZrYW4gVGluZGFrYW4gZGltYW5hIGJ1dGFuZyB0ZXRhcGFuIGl0dSBhZGEgZGFsYW0gd2lkZ2V0IG9iamVrIGJlcnNhbWJ1bmcgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gU2lsYSBwYXN0aWthbiB5YW5nIFRpbmRha2FuIGluaSBwZXJsdSBkaWRhZnRhcmthbiB5YW5nIGJlcmlrdXQgZmFpbC1mYWlsIEpTIGRhbiBDU1M6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgc2lnbmFscyBmb3IgZWFjaCB3b3Jrb3JkZXIgc3RhdGUuJ30gPSAnVGVudHVrYW4gaXN5YXJhdCB1bnR1ayBzZXRpYXAga2VhZGFhbiBwZXJpbnRhaCBrZXJqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgQ2hhbmdlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBDaGFuZ2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgV29ya29yZGVyIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFdvcmtvcmRlciBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY2hhbmdlIGxpc3QuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gbW9kdWwgZ2FtYmFyYW4gdW50dWsgbWVudW5qdWtrYW4gcGFuZGFuZ2FuIHlhbmcga2VjaWwgc2VuYXJhaSBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSB0ZW1wbGF0ZSBsaXN0Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIG1vZHVsIGdhbWJhcmFuIHVudHVrIG1lbnVuanVra2FuIHBhbmRhbmdhbiB5YW5nIGtlY2lsIHNlbmFyYWkgdGVtcGxhdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBhY2NvdW50ZWQgdGltZS4nfSA9ICdNZW50YWtyaWZrYW4gamlrYSBpYSBha2FuIG1lbmphZGkgbXVzdGFoaWwgdW50dWsgbWVuY2V0YWsgbWFzYSB5YW5nIGRpYW1iaWxraXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgcGxhbm5lZCBlZmZvcnQuJ30gPSAnTWVudGFrcmlma2FuIGppa2EgaWEgYWthbiBtZW5qYWRpIG11c3RhaGlsIHVudHVrIG1lbmNldGFrIHVzYWhhIHlhbmcgZGlyYW5jYW5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgY2hhbmdlIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSBjaGFuZ2UgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gamlrYSBkYXBhdCBkaWh1YnVuZ2kgKHNlcGVydGkgeWFuZyBkaXRha3JpZmthbiBvbGVoIGtlYWRhYW4gbWVzaW4pIGtlYWRhYW4gY2hhbmdlIGFraGlyIGhhcnVzIGRpYmVuYXJrYW4gamlrYSBjaGFuZ2UgYmVyYWRhIGRhbGFtIGtlYWRhYW4geWFuZyBiZXJrdW5jaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiByZWFjaGFibGUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUpIHdvcmtvcmRlciBlbmQgc3RhdGVzIHNob3VsZCBiZSBhbGxvd2VkIGlmIGEgd29ya29yZGVyIGlzIGluIGEgbG9ja2VkIHN0YXRlLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGppa2EgZGFwYXQgZGlodWJ1bmdpIChzZXBlcnRpIHlhbmcgZGl0YWtyaWZrYW4gb2xlaCBrZWFkYWFuIG1lc2luKSB1cnV0YW5rZXJqYSBrZWFkYWFuIGNoYW5nZSBha2hpciBoYXJ1cyBkaWJlbmFya2FuIGppa2EgdXJ1dGFua2VyamEgYmVyYWRhIGRhbGFtIGtlYWRhYW4geWFuZyBiZXJrdW5jaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWNjb3VudGVkIHRpbWUgc2hvdWxkIGJlIHNob3duLid9ID0gJ01lbnRha3JpZmthbiBqaWthIG1hc2EgeWFuZyBkaWFtYmlsIGtpcmEgaGVuZGFrbGFoIGRpdHVuanVra2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBzaG91bGQgYmUgc2V0Lid9ID0gJ01lbnRha3JpZmthbiBqaWthIHBlcm11bGFhbiBzZWJlbmFyIGRhbiBha2hpciB6YW1hbiBoYXJ1cyBkaXRldGFwa2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBjaGFuZ2Ugc2VhcmNoIGFuZCB0aGUgd29ya29yZGVyIHNlYXJjaCBmdW5jdGlvbnMgY291bGQgdXNlIHRoZSBtaXJyb3IgREIuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gamlrYSBjYXJpYW4gY2hhbmdlIGRhbiB1cnV0YW5rZXJqYSBjYXJpYW4gZnVuZ3NpIGJvbGVoIG1lbmdndW5ha2FuIGNlcm1pbiBEQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHN0YXRlIGNhbiBiZSBzZXQgaW4gQWdlbnRJVFNNQ2hhbmdlRWRpdC4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBqaWthIGtlYWRhYW4gcGVydWJhaGFuIGJvbGVoIGRpdGV0YXBrYW4gZGFsYW0gQWdlbnRJVFNNQ2hhbmdlRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcGxhbm5lZCBlZmZvcnQgc2hvdWxkIGJlIHNob3duLid9ID0gJ01lbnRha3JpZmthbiBqaWthIHVzYWhhIHlhbmcgZGlyYW5jYW5nIGhlbmRha2xhaCBkaXR1bmp1a2thbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHByaW50IGJ5IGN1c3RvbWVyLid9ID0gJ01lbnRha3JpZmthbiBqaWthIHRhcmlraCB5YW5nIGRpbWludGEgaGFydXMgY2V0YWsgb2xlaCBwZWxhbmdnYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNlYXJjaGVkIGJ5IGN1c3RvbWVyLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGppa2EgdGFyaWtoIHlhbmcgZGltaW50YSBwZXJsdSBkaWNhcmkgb2xlaCBwZWxhbmdnYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzZXQgYnkgY3VzdG9tZXIuJ30gPSAnTWVudGFrcmlma2FuIGppa2EgdGFyaWtoIHlhbmcgZGltaW50YSBoZW5kYWtsYWggZGl0ZXRhcGthbiBvbGVoIHBlbGFuZ2dhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2hvd24gYnkgY3VzdG9tZXIuJ30gPSAnTWVudGFrcmlma2FuIGppa2EgdGFyaWtoIHlhbmcgZGltaW50YSBoZW5kYWtsYWggZGl0dW5qdWtrYW4gb2xlaCBwZWxhbmdnYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciBzdGF0ZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnTWVudGFrcmlma2FuIGppa2Ega2VhZGFhbiBwZXJpbnRhaCBrZXJqYSBoZW5kYWtsYWggZGl0dW5qdWtrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciB0aXRsZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnTWVudGFrcmlma2FuIGppa2EgdGFqdWsgcGVyaW50YWgga2VyamEgaGVuZGFrbGFoIGRpdHVuanVra2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHNob3duIGdyYXBoIGF0dHJpYnV0ZXMuJ30gPSAnTWVudGFrcmlma2FuIGNpcmktY2lyaSBncmFmIGRpdHVuanVra2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoYXQgb25seSBjaGFuZ2VzIGNvbnRhaW5pbmcgV29ya29yZGVycyBsaW5rZWQgd2l0aCBzZXJ2aWNlcywgd2hpY2ggdGhlIGN1c3RvbWVyIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gdXNlIHdpbGwgYmUgc2hvd24uIEFueSBvdGhlciBjaGFuZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBiYWhhd2EgcGVydWJhaGFuIGhhbnlhIG1lbmdhbmR1bmdpIFdvcmtvcmRlcnMgZGlrYWl0a2FuIGRlbmdhbiBwZXJraGlkbWF0YW4sIHBlbmdndW5hIHBlbGFuZ2dhbiB5YW5nIG1lbXB1bnlhaSBrZWJlbmFyYW4gdW50dWsgbWVuZ2d1bmFrYW4gYWthbiBkaXR1bmp1a2thbi4gU2ViYXJhbmcgcGVydWJhaGFuIGxhaW4gdGlkYWsgYWthbiBkaXBhcGFya2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSBhbGxvd2VkIHRvIGRlbGV0ZS4nfSA9ICdNZW50YWtyaWZrYW4ga2VhZGFhbiBjaGFuZ2UgeWFuZyBha2FuIGRpYmVuYXJrYW4gdW50dWsgbWVtYWRhbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGtlYWRhYW4gcGVydWJhaGFuIHlhbmcgYWthbiBkaWd1bmFrYW4gc2ViYWdhaSBwZW5hcGlzIGRhbGFtIGdhbWJhcmFuIFBTQSBQZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGtlYWRhYW4gcGVydWJhaGFuIHlhbmcgYWthbiBkaWd1bmFrYW4gc2ViYWdhaSBwZW5hcGlzIGRhbGFtIGdhbWJhcmFuIEphZHVhbCBQZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4ga2VhZGFhbiBwZXJ1YmFoYW4geWFuZyBha2FuIGRpZ3VuYWthbiBzZWJhZ2FpIHBlbmFwaXMgZGFsYW0gZ2FtYmFyYW4gTXlDQUIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGtlYWRhYW4gcGVydWJhaGFuIHlhbmcgYWthbiBkaWd1bmFrYW4gc2ViYWdhaSBwZW5hcGlzIGRhbGFtIGdhbWJhcmFuIE15Q2hhbmdlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBrZWFkYWFuIHBlcnViYWhhbiB5YW5nIGFrYW4gZGlndW5ha2FuIHNlYmFnYWkgcGVuYXBpcyBkYWxhbSBnYW1iYXJhbiBwZW5ndXJ1cyBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGtlYWRhYW4gcGVydWJhaGFuIHlhbmcgYWthbiBkaWd1bmFrYW4gc2ViYWdhaSBwZW5hcGlzIGRhbGFtIGdhbWJhcmFuIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gbmVnZXJpIHBlcnViYWhhbiB5YW5nIGFrYW4gZGlndW5ha2FuIHNlYmFnYWkgcGVuYXBpcyBkYWxhbSBwZXJ1YmFoYW4gamFkdWFsIGdhbWJhcmFuIGtlc2VsdXJ1aGFuIHBlbGFuZ2dhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBjaGFuZ2UgdGl0bGUgZm9yIGEgZHVtbXkgY2hhbmdlIHdoaWNoIGlzIG5lZWRlZCB0byBlZGl0IGEgd29ya29yZGVyIHRlbXBsYXRlLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHRhanVrIHBlcnViYWhhbiBsYWxhaSB1bnR1ayBwZXJ1YmFoYW4gZHVtbXkgeWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmdlZGl0IHRlbXBsYXQgVXJ1dGFuS2VyamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBrcml0ZXJpYSBqZW5pcyBsYWxhaSBkYWxhbSBnYW1iYXJhbiBrZXNlbHVydWhhbiBQU0EgcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGtyaXRlcmlhIGplbmlzIGxhbGFpIGRhbGFtIGdhbWJhcmFuIHBlbmd1cnVzIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAnTWVudGFrcmlma2FuIGtyaXRlcmlhIGFwYXB1biBsYWxhaSBkYWxhbSBnYW1iYXJhbiBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnU01lbnRha3JpZmthbiBrcml0ZXJpYSBqZW5pcyBsYWxhaSBkYWxhbSBnYW1iYXJhbiBrZXNlbHVydWhhbiBqYWR1YWwgcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGtyaXRlcmlhIGplbmlzIGxhbGFpIHBlcnViYWhhbiBkYWxhbSBnYW1iYXJhbiBNeUNBQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4ga3JpdGVyaWEgamVuaXMgbGFsYWkgcGVydWJhaGFuIGRhbGFtIGdhbWJhcmFuIE15Q2hhbmdlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4ga3JpdGVyaWEgamVuaXMgbGFsYWkgcGVydWJhaGFuIGRhbGFtIGdhbWJhcmFuIGtlc2VsdXJ1aGFuIHBlc2FuYW4gS2VyamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGtyaXRlcmlhIGplbmlzIGxhbGFpIHBlcnViYWhhbiBkYWxhbSBnYW1iYXJhbiBQSVIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGtyaXRlcmlhIGFwYXB1biBsYWxhaSBwZXJ1YmFoYW4gZGFsYW0gcGVydWJhaGFuIGphZHVhbCBnYW1iYXJhbiBrZXNlbHVydWhhbiBwZWxhbmdnYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4ga3JpdGVyaWEgamVuaXMgbGFsYWkgcGVydWJhaGFuIGRhbGFtIGdhbWJhcmFuIHRlbXBsYXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPSAnTWVudGFrcmlma2FuIHBlcmludGFoIGxhbGFpIGFwYXB1biBkYWxhbSBnYW1iYXJhbiBNeUNBQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPSAnTWVudGFrcmlma2FuIHBlcmludGFoIGxhbGFpIGFwYXB1biBkYWxhbSBnYW1iYXJhbiBNeUNoYW5nZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHBlcmludGFoIGxhbGFpIGFwYXB1biBkYWxhbSBnYW1iYXJhbiBrZXNlbHVydWhhbiBwZXNhbmFuIEtlcmphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9ICdNZW50YWtyaWZrYW4gcGVyaW50YWggbGFsYWkgYXBhcHVuIGRhbGFtIGdhbWJhcmFuIFBJUi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0gJ01lbnRha3JpZmthbiBwZXJpbnRhaCBsYWxhaSBqZW5pcyBnYW1iYXJhbiBwZXJ1YmFoYW4gUFNBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHBlcmludGFoIGxhbGFpIGplbmlzIGRhbGFtIGdhbWJhcmFuIHBlbmd1cnVzIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAnTWVudGFrcmlma2FuIHBlcmludGFoIGxhbGFpIGFwYXB1biBkYWxhbSBnYW1iYXJhbiBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHBlcmludGFoIGxhbGFpIGplbmlzIGRhbGFtIGdhbWJhcmFuIGtlc2VsdXJ1aGFuIGphZHVhbCBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHBlcmludGFoIGxhbGFpIGFwYXB1biBkYWxhbSBwZXJ1YmFoYW4gamFkdWFsIGdhbWJhcmFuIGtlc2VsdXJ1aGFuIHBlbGFuZ2dhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9ICdNZW50YWtyaWZrYW4gcGVyaW50YWggbGFsYWkgYXBhcHVuIGRhbGFtIGdhbWJhcmFuIHRlbXBsYXRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY2F0ZWdvcnkgb2YgYSBjaGFuZ2UuJ30gPSAnTWVudGFrcmlma2FuIG5pbGFpIGxhbGFpIGJhZ2kga2F0ZWdvcmkgcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW1wYWN0IG9mIGEgY2hhbmdlLid9ID0gJ01lbnRha3JpZmthbiBuaWxhaSBsYWxhaSBiYWdpIGtlc2FuIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciBjaGFuZ2UgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBqZW5pcyBiaWRhbmcgYmlkYW5nIEJhbmRpbmcgTmlsYWkgdW50dWsgc2lmYXQtc2lmYXQgcGVydWJhaGFuIHlhbmcgZGlndW5ha2FuIGRhbGFtIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIE5pbGFpIHlhbmcgc2FoIFBlbWlsaWhhbiwgVGVrcyBkYW4gVGFyaWtoLiBKaWthIGplbmlzIHRpZGFrIGRpdGFrcmlma2FuLCBwYWRhbmcgdGlkYWsgYWthbiBkaXR1bmp1a2thbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciB3b3Jrb3JkZXIgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBqZW5pcyBiaWRhbmcgYmlkYW5nIEJhbmRpbmcgTmlsYWkgdW50dWsgc2lmYXQtc2lmYXQgcGVyaW50YWgga2VyamEgeWFuZyBkaWd1bmFrYW4gZGFsYW0gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gTmlsYWkgeWFuZyBzYWggUGVtaWxpaGFuLCBUZWtzIGRhbiBUYXJpa2guIEppa2EgamVuaXMgdGlkYWsgZGl0YWtyaWZrYW4sIHBhZGFuZyB0aWRhayBha2FuIGRpdHVuanVra2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvYmplY3QgYXR0cmlidXRlcyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciBjaGFuZ2Ugb2JqZWN0cyBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHNpZmF0LXNpZmF0IG9iamVrIHlhbmcgZGlwaWxpaCB1bnR1ayBvYmplayBwZXJ1YmFoYW4gZGFsYW0gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBzaWZhdC1zaWZhdCBvYmplayB5YW5nIGRpcGlsaWggdW50dWsgb2JqZWsgcGVyaW50YWgga2VyamEgZGFsYW0gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWNjb3VudGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHBlbmdlbmRhbGkgeWFuZyBkaXBpbGloIHVudHVrIEFjY291bnRlZFRpbWUgYXRyaWJ1dCBkYWxhbSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gcGVuZ2VuZGFsaSB5YW5nIGRpcGlsaWggdW50dWsgQWN0dWFsRW5kVGltZSBhdHJpYnV0IGRhbGFtIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHBlbmdlbmRhbGkgeWFuZyBkaXBpbGloIHVudHVrIEFjdHVhbFN0YXJ0VGltZSBhdHJpYnV0IGRhbGFtIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENhdGVnb3J5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBwZW5nZW5kYWxpIHlhbmcgYm9sZWggZGlwaWxpaCB1bnR1ayBJRCBLYXRlZ29yaSBhdHJpYnV0IGRhbGFtIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZUJ1aWxkZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHBlbmdlbmRhbGkgeWFuZyBib2xlaCBkaXBpbGloIHVudHVrIGF0cmlidXQgQ2hhbmdlQnVpbGRlcklEIGRhbGFtIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZU1hbmFnZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHBlbmdlbmRhbGkgeWFuZyBib2xlaCBkaXBpbGloIHVudHVrIGF0cmlidXQgQ2hhbmdlTWFuYWdlcklEIGRhbGFtIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZVN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBwZW5nZW5kYWxpIHlhbmcgYm9sZWggZGlwaWxpaCB1bnR1ayBhdHJpYnV0IENoYW5nZVN0YXRlSUQgZGFsYW0gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBwZW5nZW5kYWxpIHlhbmcgYm9sZWggZGlwaWxpaCB1bnR1ayBQZXJ1YmFoYW4gVGFqdWsgYXRyaWJ1dCBkYWxhbSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBEeW5hbWljRmllbGQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBwZW5nZW5kYWxpIHlhbmcgYm9sZWggZGlwaWxpaCB1bnR1ayBzaWZhdCBNZWRhbkRpbmFtaWsgZGFsYW0gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgSW1wYWN0SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBwZW5nZW5kYWxpIHlhbmcgYm9sZWggZGlwaWxpaCB1bnR1ayBhdHJpYnV0IEltcGFjdElEIGRhbGFtIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFZmZvcnQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBwZW5nZW5kYWxpIHlhbmcgYm9sZWggZGlwaWxpaCB1bnR1ayBVc2FoYSBzaWZhdCB5YW5nIGRpcmFuY2FuZyBkYWxhbSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHBlbmdlbmRhbGkgeWFuZyBkaXBpbGloIHVudHVrIGF0cmlidXQgRGlyYW5jYW5nIE1hc2EgVGFtYXQgZGFsYW0gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHBlbmdlbmRhbGkgeWFuZyBkaXBpbGloIHVudHVrIGF0cmlidXQgRGlyYW5jYW5nIE11bGEgTWFzYSBkYWxhbSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQcmlvcml0eUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gcGVuZ2VuZGFsaSB5YW5nIGJvbGVoIGRpcGlsaWggdW50dWsgSUQgS2V1dGFtYWFuIGF0cmlidXQgZGFsYW0gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUmVxdWVzdGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHBlbmdlbmRhbGkgeWFuZyBkaXBpbGloIHVudHVrIGF0cmlidXQgRGltaW50YSBNYXNhIGRhbGFtIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlckFnZW50SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBwZW5nZW5kYWxpIHlhbmcgYm9sZWggZGlwaWxpaCB1bnR1ayBhdHJpYnV0IFdvcmtPcmRlckFnZW50SUQgZGFsYW0gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyTnVtYmVyIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gcGVuZ2VuZGFsaSB5YW5nIGJvbGVoIGRpcGlsaWggdW50dWsgTm9tYm9yIGF0cmlidXQgUGVyaW50YWggS2VyamEgZGFsYW0gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyU3RhdGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHBlbmdlbmRhbGkgeWFuZyBib2xlaCBkaXBpbGloIHVudHVrIEtlcmphIGF0cmlidXQgSUQgUGVzYW5hbiBLZWFkYWFuIGRhbGFtIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclRpdGxlIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gcGVuZ2VuZGFsaSB5YW5nIGJvbGVoIGRpcGlsaWggdW50dWsgVGFqdWsgYXRyaWJ1dCBQZXJpbnRhaCBLZXJqYSBkYWxhbSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUeXBlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBwZW5nZW5kYWxpIHlhbmcgYm9sZWggZGlwaWxpaCB1bnR1ayBLZXJqYSBhdHJpYnV0IEplbmlzIElEIFBlcmludGFoIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBlcmlvZCAoaW4geWVhcnMpLCBpbiB3aGljaCBzdGFydCBhbmQgZW5kIHRpbWVzIGNhbiBiZSBzZWxlY3RlZC4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiB0ZW1wb2ggKGRhbGFtIHRhaHVuKSwgZGkgbWFuYSBtdWxhIGRhbiBha2hpciBrYWxpIGJvbGVoIGRpcGlsaWguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGF0dHJpYnV0ZXMgb2YgYSB3b3Jrb3JkZXIgaW4gdGhlIHRvb2x0aXAgb2YgdGhlIHdvcmtvcmRlciBncmFwaCBpbiB0aGUgY2hhbmdlIHpvb20uIFRvIHNob3cgd29ya29yZGVyIGR5bmFtaWMgZmllbGRzIGluIHRoZSB0b29sdGlwLCB0aGV5IG11c3QgYmUgc3BlY2lmaWVkIGxpa2UgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTEsIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUyLCBldGMuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gc2lmYXQtc2lmYXQgeWFuZyBkaXR1bmp1a2thbiBkYXJpcGFkYSBVcnV0YW5LZXJqYSBkYWxhbSB0b29sdGlwIGdyYWYgVXJ1dGFuS2VyamEgZGkgenVtIHBlcnViYWhhbi4gVW50dWsgbWVudW5qdWtrYW4gbWVkYW4gZGluYW1payBVcnV0YW5LZXJqYSBkYWxhbSB0b29sdGlwICwgbWVyZWthIG1lc3RpIGRpbnlhdGFrYW4gc2VwZXJ0aSBNZWRhbkRpbmFtaWtfVXJ1dGFuS2VyamFOYW1hMSwgTWVkYW5EaW5hbWlrX1VydXRhbktlcmphTmFtYTIsIGRhbiBsYWluLWxhaW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBQU0Egb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gbGFqdXIgbWVudW5qdWtrYW4gZ2FtYmFyYW4gUFNBIFBlcnViYWhhbi4gUGlsaWhhbiBpbmkgdGlkYWsgbWVtcHVueWFpIGtlc2FuIGtlIGF0YXMga2VkdWR1a2FuIHRpYW5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgU2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gbGFqdXIgbWVudW5qdWtrYW4gZGFsYW0gZ2FtYmFyYW4gSmFkdWFsIFBlcnViYWhhbi4gUGlsaWhhbiBpbmkgdGlkYWsgbWVtcHVueWFpIGtlc2FuIGtlIGF0YXMga2VkdWR1a2FuIHRpYW5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNBQiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBydWFuZ2FuIG1lbnVuanVra2FuIGRhbGFtIGdhbWJhcmFuIE15Q0FCLiBQaWxpaGFuIGluaSB0aWRhayBtZW1wdW55YWkga2VzYW4ga2UgYXRhcyBrZWR1ZHVrYW4gdGlhbmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBydWFuZ2FuIHlhbmcgZGl0dW5qdWtrYW4gZGFsYW0gZ2FtYmFyYW4gTXlDaGFuZ2VzLiBQaWxpaGFuIGluaSB0aWRhayBtZW1wdW55YWkga2VzYW4ga2UgYXRhcyBrZWR1ZHVrYW4gdGlhbmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBsYWp1ciBtZW51bmp1a2thbiBnYW1iYXJhbiBrZXNlbHVydWhhbiBQZXNhbmFuIEtlcmphIFNheWEuIFBpbGloYW4gaW5pIHRpZGFrIG1lbXB1bnlhaSBrZXNhbiBrZSBhdGFzIGtlZHVkdWthbiB0aWFuZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgUElSIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHJ1YW5nYW4geWFuZyBkaXR1bmp1a2thbiBkYWxhbSBnYW1iYXJhbiBQSVIuIFBpbGloYW4gaW5pIHRpZGFrIG1lbXB1bnlhaSBrZXNhbiBrZSBhdGFzIGtlZHVkdWthbiB0aWFuZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gcnVhbmdhbiB5YW5nIGRpdHVuanVra2FuIGRhbGFtIGdhbWJhcmFuIGtlc2VsdXJ1aGFuIHBlbmd1cnVzIHBlcnViYWhhbi4gUGlsaWhhbiBpbmkgdGlkYWsgbWVtcHVueWFpIGtlc2FuIGtlIGF0YXMga2VkdWR1a2FuIHRpYW5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gcnVhbmdhbiB5YW5nIGRpdHVuanVra2FuIGRhbGFtIGdhbWJhcmFuIHBlcnViYWhhbi4gUGlsaWhhbiBpbmkgdGlkYWsgbWVtcHVueWFpIGtlc2FuIGtlIGF0YXMga2VkdWR1a2FuIHRpYW5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHJ1YW5nYW4geWFuZyBkaXR1bmp1a2thbiBkYWxhbSBjYXJpYW4gcGVydWJhaGFuLiBQaWxpaGFuIGluaSB0aWRhayBtZW1wdW55YWkga2VzYW4ga2UgYXRhcyBrZWR1ZHVrYW4gdGlhbmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBydWFuZ2FuIHlhbmcgZGl0dW5qdWtrYW4gZGFsYW0gcGVydWJhaGFuIGphZHVhbCBnYW1iYXJhbiBrZXNlbHVydWhhbiBwZWxhbmdnYW4uIFBpbGloYW4gaW5pIHRpZGFrIG1lbXB1bnlhaSBrZXNhbiBrZSBhdGFzIGtlZHVkdWthbiB0aWFuZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gcnVhbmdhbiB5YW5nIGRpdHVuanVra2FuIGRhbGFtIGdhbWJhcmFuIHRlbXBsYXRlLiBQaWxpaGFuIGluaSB0aWRhayBtZW1wdW55YWkga2VzYW4ga2UgYXRhcyBrZWR1ZHVrYW4gdGlhbmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNpZ25hbHMgZm9yIGVhY2ggSVRTTUNoYW5nZSBzdGF0ZS4nfSA9ICdNZW50YWtyaWZrYW4gaXN5YXJhdCB1bnR1ayBzZXRpYXAga2VhZGFhbiBQZXJ1YmFoYW4gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGVtcGxhdGUgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gamVuaXMgdGVtcGxhdGUgeWFuZyBha2FuIGRpZ3VuYWthbiBzZWJhZ2FpIHBlbmFwaXMgZGFsYW0gZ2FtYmFyYW4gdGVtcGxhdGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHN0YXR1cyBrZXJqYSBwZXJpbnRhaCB5YW5nIGFrYW4gZGlndW5ha2FuIHNlYmFnYWkgcGVuYXBpcyBkYWxhbSBnYW1iYXJhbiBrZXNlbHVydWhhbiBLZXJqYSBwZXNhbmFuIHNheWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIHN0YXR1cyBrZXJqYSBwZXJpbnRhaCB5YW5nIGFrYW4gZGlndW5ha2FuIHNlYmFnYWkgcGVuYXBpcyBkYWxhbSBnYW1iYXJhbiBQSVIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBzaG93IHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4gamVuaXMgcGVyaW50YWgga2VyamEgeWFuZyBha2FuIGRpZ3VuYWthbiB1bnR1ayBtZW51bmp1a2thbiBnYW1iYXJhbiBQSVIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciBub3RpZmljYXRpb25zIHNob3VsZCBiZSBzZW50Lid9ID0gJ01lbnRha3JpZmthbiBzYW1hIGFkYSBwZW1iZXJpdGFodWFuIGhlbmRha2xhaCBkaWhhbnRhci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMgb2YgYSBjaGFuZ2UgaGlzdG9yeSBlbnRyeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiBhbiBhZ2VudCBjYW4gZXhjaGFuZ2UgdGhlIFgtYXhpcyBvZiBhIHN0YXQgaWYgaGUgZ2VuZXJhdGVzIG9uZS4nfSA9CiAgICAgICAgJ01lbmVudHVrYW4gamlrYSBlamVuIGJvbGVoIGJlcnR1a2FyLXR1a2FyIFgtcGFrc2kgYmludGFuZyBqaWthIGRpYSBtZW5qYW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIGRvbmUgZm9yIGNvbmZpZyBpdGVtIGNsYXNzZXMuJ30gPQogICAgICAgICdNZW5lbnR1a2FuIGppa2EgbW9kdWwgc3RhdGlzdGlrIGJpYXNhIGJvbGVoIG1lbmphbmEgc3RhdGlzdGlrIHRlbnRhbmcgcGVydWJhaGFuIHlhbmcgZGlsYWt1a2FuIGJhZ2kga2VsYXMgaXRlbSBjb25maWcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIGNoYW5nZSBzdGF0ZSB1cGRhdGVzIHdpdGhpbiBhIHRpbWVwZXJpb2QuJ30gPQogICAgICAgICdNZW5lbnR1a2FuIGppa2EgbW9kdWwgc3RhdGlzdGlrIGJpYXNhIGJvbGVoIG1lbmphbmEgc3RhdGlzdGlrIHRlbnRhbmcgcGVydWJhaGFuIG1lbmdlbmFpIGtlbWFza2luaSBuZWdlcmkgcGVydWJhaGFuIGRhbGFtIHRlbXBvaCBtYXNhIHlhbmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIHRoZSByZWxhdGlvbiBiZXR3ZWVuIGNoYW5nZXMgYW5kIGluY2lkZW50IHRpY2tldHMuJ30gPQogICAgICAgICdNZW5lbnR1a2FuIGppa2EgbW9kdWwgc3RhdGlzdGlrIGJpYXNhIGJvbGVoIG1lbmphbmEgc3RhdGlzdGlrIG1lbmdlbmFpIHBlcnViYWhhbiBtZW5nZW5haSBodWJ1bmdhbiBhbnRhcmEgcGVydWJhaGFuIGRhbiB0aWtldCBrZWphZGlhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcy4nfSA9CiAgICAgICAgJ01lbmVudHVrYW4gamlrYSBtb2R1bCBzdGF0aXN0aWsgYmlhc2EgYm9sZWggbWVuamFuYSBzdGF0aXN0aWsgbWVuZ2VuYWkgcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCB0aGUgbnVtYmVyIG9mIFJmYyB0aWNrZXRzIGEgcmVxdWVzdGVyIGNyZWF0ZWQuJ30gPQogICAgICAgICdNZW5lbnR1a2FuIGppa2EgbW9kdWwgc3RhdGlzdGlrIGJpYXNhIGJvbGVoIG1lbmphbmEgc3RhdGlzdGlrIG1lbmdlbmFpIGJpbGFuZ2FuIHRpa2V0IFJGQyBwZW1pbnRhIGRpY2lwdGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIChmb3IgY2hhbmdlcyBhbmQgd29ya29yZGVycykgc2hvd24gaW4gdGhlIGNoYW5nZSBwcmludCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICdNZWRhbiBkaW5hbWlrICh1dHVrIGNoYW5nZSBkYW4gdXJ1dGFua2VyamEpIGRpdHVuanVra2FuIGRhbGFtIGNldGFrIHNrcmluIGNoYW5nZSBkaSBhbnRhcmEgbXVrYSBlamVuLiBUZXRhcGFuIHlhbmcgbXVuZ2tpbjogMCA9IERpbHVtcHVoa2FuLCAxID0gRGlha3RpZmthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdNZWRhbiBkaW5hbWlrIGRpdHVuanVra2FuIGRhbGFtIHNrcmluIHRhbWJhaCBjaGFuZ2UgZGFyaSBwYXBhcmFuIGFudGFyYSBtdWthIGVqZW4uIFRldGFwYW4geWFuZyBtdW5na2luOiAwID0gRGlsdW1wdWhrYW4sIDEgPSBEaWFrdGlma2FuLCAyID0gRGlha3RpZmthbiBkYW4gZGlwZXJsdWthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnTWVkYW4gZGluYW1payBkaXR1bmp1a2thbiBkYWxhbSBza3JpbiBlZGl0IGNoYW5nZSBwYWRhIGFudGFyYSBtdWthIGVqZW4uIFRldGFwYW4geWFuZyBtdW5na2luOiAwID0gRGlsdW1wdWhrYW4sIDEgPSBEaWFrdGlma2FuLCAyID0gRGlha3RpZmthbiBkYW4gZGlwZXJsdWthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnTWVkYW4gRGluYW1payBkaXR1bmp1a2thbiBkYWxhbSBza3JpbiBjYXJpYW4gc2VhcmNoIGRhcmkgcGFwYXJhbiBlamVuLiBUZXRhcGFuIEtlbXVuZ2tpbmFuOiAwID0gRGlsdW1wdWhrYW4sIDEgPSBEaWFrdGlma2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnTWVkYW4gRGluYW1payBkaXR1bmp1a2thbiBkYWxhbSBza3JpbiB6dW0gY2hhbmdlIGRhcmkgcGFwYXJhbiBlamVuLiBUZXRhcGFuIEtlbXVuZ2tpbmFuOiAwID0gRGlsdW1wdWhrYW4sIDEgPSBEaWFrdGlma2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ01lZGFuIERpbmFtaWsgZGl0dW5qdWtrYW4gZGFsYW0gc2tyaW4gdGFtYmFoIHVydXRhbmtlcmphIGRhcmkgcGFwYXJhbiBlamVuLiBUZXRhcGFuIEtlbXVuZ2tpbmFuOiAwID0gRGlsdW1wdWhrYW4sIDEgPSBEaWFrdGlma2FuLCAyID0gRGlha3RpZmthbiBkYW4gRGlwZXJsdWthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnTWVkYW4gZGluYW1payBkaXR1bmp1a2thbiBkYWxhbSBza3JpbiBlZGl0IHVydXRhbmtlcmphIGRhcmkgcGFwYXJhbiBlamVuLiBUZXRhcGFuIEtlbXVuZ2tpbmFuOiAwID0gRGlsdW1wdWhrYW4sIDEgPSBEaWFrdGlma2FuLCAyID0gRGlha3RpZmthbiBkYW4gRGlwZXJsdWthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciByZXBvcnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdNZWRhbiBkaW5hbWlrIGRpdHVuanVra2FuIGRhbGFtIHNrcmluIGxhcG9yYW4gdXJ1dGFua2VyamEgZGFyaSBwYXBhcmFuIGVqZW4uIFRldGFwYW4gS2VtdW5na2luYW46IDAgPSBEaWx1bXB1aGthbiwgMSA9IERpYWt0aWZrYW4sIDIgPSBEaWFrdGlma2FuIGRhbiBEaXBlcmx1a2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnTWVkYW4gRGluYW1payBkaXR1bmp1a2thbiBkYWxhbSBza3JpbiB6dW0gdXJ1dGFua2VyamEgZGFyaSBwYXBhcmFuIGVqZW4uIFRldGFwYW4gS2VtdW5na2luYW46IDAgPSBEaWx1bXB1aGthbiwgMSA9IERpYWt0aWZrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWNGaWVsZCBldmVudCBtb2R1bGUgdG8gaGFuZGxlIHRoZSB1cGRhdGUgb2YgY29uZGl0aW9ucyBpZiBkeW5hbWljIGZpZWxkcyBhcmUgYWRkZWQsIHVwZGF0ZWQgb3IgZGVsZXRlZC4nfSA9CiAgICAgICAgJ01vZHVsIGFjYXJhIE1lZGFuRGluYW1payB1bnR1ayBtZW5nZW5kYWxpa2FuIG1ha2x1bWF0IGtlYWRhYW4gamlrYSBtZWRhbiBkaW5hbWlrIGRpdGFtYmFoLCBkaWtlbWFza2luaSBhdGF1IGRpaGFwdXNrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcndhcmQgc2NoZWR1bGUgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb3ZlciBhcHByb3ZlZCBjaGFuZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDQUIgVGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ29uZGl0aW9uIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlciBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgUElSIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBub3RpZmljYXRpb24gcnVsZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VzJ30gPSAnSVRTTSBDaGFuZ2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlDQUIgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlDaGFuZ2VzIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15V29ya29yZGVycyBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBEZWxldGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDQUIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDb250ZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgY2xlYW5zIHVwIGNvbmRpdGlvbnMuJ30gPSAnSVRTTSBtb2R1bCBwZXJpc3Rpd2EgeWFuZyBtZW1iZXJzaWhrYW4gc2VoaW5nZ2Ega2VhZGFhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBjYWNoZSBmb3IgYSB0b29sYmFyLid9ID0gJ0lUU00gbW9kdWwgcGVyaXN0aXdhIHlhbmcgbWVtYWRhbSBjYWNoZSB1bnR1ayB0b29sYmFyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBtYXRjaGVzIGNvbmRpdGlvbnMgYW5kIGV4ZWN1dGVzIGFjdGlvbnMuJ30gPQogICAgICAgICdJVFNNIG1vZHVsIGFjYXJhIHlhbmcgc2VwYWRhbiBkZW5nYW4ga2VhZGFhbiBkYW4gbWVsYWtzYW5ha2FuIHRpbmRha2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHNlbmRzIG5vdGlmaWNhdGlvbnMuJ30gPSAnSVRTTSBtb2R1bCBhY2FyYSB5YW5nIG1lbmdoYW50YXIgcGVtYmVyaXRhaHVhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJ30gPSAnSVRTTSBtb2R1bCBwZXJpc3Rpd2EgeWFuZyBtZW5nZW1hc2tpbmkgc2VqYXJhaCBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiBjb25kaXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2Ygd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gcmVjYWxjdWxhdGUgdGhlIHdvcmtvcmRlciBudW1iZXJzLid9ID0gJ0lUU00gbW9kdWwgYWNhcmEgdW50dWsgbWVuZ2lyYSBub21ib3IgcGVzYW5hbiBrZXJqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gc2V0IHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBvZiB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAnSVRTTSBtb2R1bCBhY2FyYSB1bnR1ayBtZW5ldGFwa2FuIHBlcm11bGFhbiBzZWJlbmFyIGRhbiBtYXNhIGFraGlyIHBlc2FuYW4ga2VyamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01DaGFuZ2UnfSA9ICdJVFNNVUNoYW5nZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNV29ya09yZGVyJ30gPSAnSVRTTVVydXRhbktlcmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGZyZXF1ZW5jeSBpcyBcJ3JlZ3VsYXJseVwnLCB5b3UgY2FuIGNvbmZpZ3VyZSBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgKGV2ZXJ5IFggaG91cnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2dmaWxlIGZvciB0aGUgSVRTTSBjaGFuZ2UgY291bnRlci4gVGhpcyBmaWxlIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjaGFuZ2UgbnVtYmVycy4nfSA9CiAgICAgICAgJ0ZhaWwgTG9nIHVudHVrIGthdW50ZXIgcGVydWJhaGFuIElUU00uIEZhaWwgaW5pIGRpZ3VuYWthbiB1bnR1ayBtZXd1anVka2FuIG5vbWJvciBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvb2t1cCBvZiBDQUIgbWVtYmVycyBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvb2t1cCBvZiBhZ2VudHMsIHVzZWQgZm9yIGF1dG9jb21wbGV0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgaWYgV29ya09yZGVyQWRkIG9yIFdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZSBzaG91bGQgYmUgcGVybWl0dGVkLid9ID0KICAgICAgICAnTW9kdWwgdW50dWsgbWVtZXJpa3NhIGppa2EgV29ya09yZGVyQWRkIGF0YXUgV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlIGhhcnVzIGRpYmVuYXJrYW4gLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIENBQiBtZW1iZXJzLid9ID0gJ01vZHVsIHVudHVrIG1lbWVyaWtzYSBhaGxpIENBQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBhZ2VudC4nfSA9ICdNb2R1bCB1bnR1ayBtZW1lcmlrc2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgYnVpbGRlci4nfSA9ICdNb2R1bCB1bnR1ayBtZW1lcmlrc2EgcGVtYmluYSBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPSAnTW9kdWwgdW50dWsgbWVtZXJpa3NhIHBlbmd1cnVzIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnTW9kdWwgdW50dWsgbWVtZXJpa3NhIHBlc2FuYW4ga2VyamEgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgbm8gd29ya29yZGVyIGFnZW50IGlzIHNldC4nfSA9ICdNb2R1bCB1bnR1ayBtZW1lcmlrc2Egc2FtYSBhZGEgdGlhZGEgZWplbiBrZXJqYSBwZXJpbnRhaCBkaXRldGFwa2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgd2hldGhlciB0aGUgYWdlbnQgaXMgY29udGFpbmVkIGluIHRoZSBjb25maWd1cmVkIGxpc3QuJ30gPQogICAgICAgICdNb2R1bCB1bnR1ayBtZW1lcmlrc2Egc2FtYSBhZGEgZWplbiBpdHUgdGVya2FuZHVuZyBkYWxhbSBzZW5hcmFpIGRpa29uZmlndXJhc2lrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGEgbGluayB0byBjcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4gVGhlIHRpY2tldCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgbGlua2VkIHdpdGggdGhlIG5ldyBjaGFuZ2UuJ30gPQogICAgICAgICdNb2R1bCB1bnR1ayBtZW51bmp1a2thbiBwYXV0YW4gdW50dWsgbWVtYnVhdCBwZXJ1YmFoYW4gZGFyaSB0aWtldCBpbmkuIFRpa2V0IGFrYW4gc2VjYXJhIGF1dG9tYXRpayBkaWthaXRrYW4gZGVuZ2FuIHBlcnViYWhhbiBiYXJ1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIFRpbWUgU2xvdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBhbGwgd29ya29yZGVycyBpbiB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgKGZyb20gdGVtcGxhdGUpJ30gPSAnQmFydSAoZGFyaXBhZGEgdGVtcGxhdCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSB1c2VycyBvZiB0aGVzZSBncm91cHMgaGF2ZSB0aGUgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRpY2tldCB0eXBlcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiIGlmIHRoZSBmZWF0dXJlICJUaWNrZXQ6OkFjbDo6TW9kdWxlIyMjMjAwLVRpY2tldDo6QWNsOjpNb2R1bGUiIGlzIGVuYWJsZWQuJ30gPQogICAgICAgICdIYW55YSBwZW5nZ3VuYSBrdW1wdWxhbi1rdW1wdWxhbiBpbmkgbWVtcHVueWFpIGtlYmVuYXJhbiB1bnR1ayBtZW5nZ3VuYWthbiBqZW5pcyB0aWtldCBzZXBlcnRpIHlhbmcgZGl0YWtyaWZrYW4gZGFsYW0gIklUU01DaGFuZ2UgOjogQWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiBqaWthIGNpcmkgIlRpa2V0IDo6IEFDTCA6OiBNb2R1bCAjICMgIyAyMDAtVGlrZXQgOjogQUNMIDo6IE1vZHVsIiBkaWFrdGlma2FuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIGFsbCBDaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQSVInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldyknfSA9ICdQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQU0EnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIFVzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFzayBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGFyYW1ldGVyIHVudHVrIG9iamVrIFVzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFzayBkYWxhbSBwYW5kYW5nYW4ga2V1dGFtYWFuIGJhZ2kgYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY2hhbmdlcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgdW50dWsgaGFsYW1hbiAoZGkgbWFuYSBwZXJ1YmFoYW4gZGl0dW5qdWtrYW4pIGdhbWJhcmFuIHBlcnViYWhhbiBrZWNpbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJlc2VudHMgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNob3cgdGhlIGludm9sdmVkIHBlcnNvbnMgaW4gYSBjaGFuZ2UsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBjaGFuZ2UgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0hhZGlyIHBhdXRhbiBkYWxhbSBtZW51IHVudHVrIG1lbnVuanVra2FuIG9yYW5nLW9yYW5nIHlhbmcgdGVybGliYXQgZGFsYW0gcGVydWJhaGFuLCBkYWxhbSBwYW5kYW5nYW4gem9vbSBwZXJ1YmFoYW4gZGFsYW0gYW50YXJhIG11a2EgZWplbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSAoUFNBKSBvZiBjaGFuZ2VzLiBPdmVydmlldyBvZiBhcHByb3ZlZCBjaGFuZ2VzIGFuZCB0aGVpciBzZXJ2aWNlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIGluIG9yZGVyIGZvciBhbiBhZ2VudCB0byB0YWtlIGEgd29ya29yZGVyLid9ID0KICAgICAgICAnS2Vpc3RpbWV3YWFuIERpcGVybHVrYW4gZGFsYW0gdXNhaGEgdW50dWsgZWplbiB1bnR1ayBtZW5nYW1iaWwgcGVyaW50YWgga2VyamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWNjZXNzIHRoZSBvdmVydmlldyBvZiBhbGwgY2hhbmdlcy4nfSA9ICdLZWlzdGltZXdhYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmdha3NlcyBnYW1iYXJhbiBrZXNlbHVydWhhbiBzZW11YSBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWRkIGEgd29ya29yZGVyLid9ID0gJ0tlaXN0aW1ld2FhbiB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVuYW1iYWggcGVyaW50YWgga2VyamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY2hhbmdlIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnS2Vpc3RpbWV3YWFuIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZW51a2FyIHBlc2FuYW4ga2VyamEgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlLid9ID0gJ0tlaXN0aW1ld2FhbiB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWV3dWp1ZGthbiB0ZW1wbGF0ZSBkYXJpIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlc1wnIENBQi4nfSA9CiAgICAgICAgJ0tlaXN0aW1ld2FhbiB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVtYnVhdCB0ZW1wbGF0ZSBkYXJpIHBlcnViYWhhbiBDQUIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIHdvcmtvcmRlci4nfSA9ICdLZWlzdGltZXdhYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbWJ1YXQgdGVtcGxhdGUgZGFyaSBwZXJpbnRhaCBrZXJqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgY2hhbmdlcyBmcm9tIHRlbXBsYXRlcy4nfSA9ICdLZWlzdGltZXdhYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbWJ1YXQgcGVydWJhaGFuIGRhcmkgdGVtcGxhdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgY2hhbmdlcy4nfSA9ICdLZWlzdGltZXdhYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmNpcHRhIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgYSB0ZW1wbGF0ZS4nfSA9ICdLZWlzdGltZXdhYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbWFkYW0gdGVtcGxhdGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgd29ya29yZGVyLid9ID0gJ0tlaXN0aW1ld2FhbiB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVtYWRhbSBwZXJpbnRhaCBrZXJqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjaGFuZ2VzLid9ID0gJ0tlaXN0aW1ld2FhbiB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVtYWRhbSBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHRlbXBsYXRlLid9ID0gJ0tlaXN0aW1ld2FhbiB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVuZ2VkaXQgdGVtcGxhdGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHdvcmtvcmRlci4nfSA9ICdLZWlzdGltZXdhYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmdlZGl0IHBlcmludGFoIGtlcmphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgY2hhbmdlcy4nfSA9ICdLZWlzdGltZXdhYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmdlZGl0IHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnS2Vpc3RpbWV3YWFuIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZW5nZWRpdCBzeWFyYXQgcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgYSB0ZW1wbGF0ZS4nfSA9ICdLZWlzdGltZXdhYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmdlZGl0IGthbmR1bmdhbiB0ZW1wbGF0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGludm9sdmVkIHBlcnNvbnMgb2YgYSBjaGFuZ2UuJ30gPQogICAgICAgICdLZWlzdGltZXdhYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmdlZGl0IG9yYW5nIHlhbmcgdGVybGliYXQgcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIG1vdmUgY2hhbmdlcyBpbiB0aW1lLid9ID0gJ0tlaXN0aW1ld2FhbiB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVuZ2dlcmFra2FuIHBlcnViYWhhbiBkYWxhbSBtYXNhLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBwcmludCBhIGNoYW5nZS4nfSA9ICdLZWlzdGltZXdhYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmNldGFrIHBlcnViYWhhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHJlc2V0IGNoYW5nZXMuJ30gPSAnS2Vpc3RpbWV3YWFuIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZW5ldGFwa2FuIHNlbXVsYSBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBhIHdvcmtvcmRlci4nfSA9ICdLZWlzdGltZXdhYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbGloYXQgcGVyaW50YWgga2VyamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBjaGFuZ2VzLid9ID0gJ0tlaXN0aW1ld2FhbiB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVsaWhhdCBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBsaXN0IG9mIGNoYW5nZXMgd2hlcmUgdGhlIHVzZXIgaXMgYSBDQUIgbWVtYmVyLid9ID0KICAgICAgICAnS2Vpc3RpbWV3YWFuIERpcGVybHVrYW4gdW50dWsgbWVsaWhhdCBzZW5hcmFpIHBlcnViYWhhbiBkaSBtYW5hIHBlbmdndW5hIGFkYWxhaCBhaGxpIENBQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPQogICAgICAgICdLZWlzdGltZXdhYW4gRGlwZXJsdWthbiB1bnR1ayBtZWxpaGF0IHNlbmFyYWkgcGVydWJhaGFuIGRpIG1hbmEgcGVuZ2d1bmEgYWRhbGFoIHBlbmd1cnVzIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IG92ZXJ2aWV3IG92ZXIgYWxsIHRlbXBsYXRlcy4nfSA9ICdLZWlzdGltZXdhYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbGloYXQgZ2FtYmFyYW4gYXRhcyBzZW11YSB0ZW1wbGF0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnS2Vpc3RpbWV3YWFuIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZWxpaGF0IGtlYWRhYW4gcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UuJ30gPSAnS2Vpc3RpbWV3YWFuIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZWxpaGF0IHNlamFyYWggcGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSB3b3Jrb3JkZXIuJ30gPSAnS2Vpc3RpbWV3YWFuIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZWxpaGF0IHNlamFyYWggcGVyaW50YWgga2VyamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgY2hhbmdlLid9ID0gJ0tlaXN0aW1ld2FhbiB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVsaWhhdCB6dW0gc2VqYXJhaCBwZXJ1YmFoYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgd29ya29yZGVyLid9ID0KICAgICAgICAnS2Vpc3RpbWV3YWFuIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZWxpaGF0IHNlamFyYWggem9vbSBwZXJpbnRhaCBrZXJqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIENoYW5nZSBTY2hlZHVsZS4nfSA9ICdLZWlzdGltZXdhYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbGloYXQgc2VuYXJhaSBKYWR1YWwgUGVydWJhaGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlIFBTQS4nfSA9ICdLZWlzdGltZXdhYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbGloYXQgc2VuYXJhaSBwZXJ1YmFoYW4gUFNBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlcyB3aXRoIGFuIHVwY29taW5nIFBJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpLid9ID0KICAgICAgICAnS2Vpc3RpbWV3YWFuIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZWxpaGF0IHNlbmFyYWkgcGVydWJhaGFuIGRlbmdhbiBQSVIgYWthbiBkYXRhbmcgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biBjaGFuZ2VzLid9ID0gJ0tlaXN0aW1ld2FhbiB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVsaWhhdCBzZW5hcmFpIHBlcnViYWhhbiBzZW5kaXJpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIHdvcmtvcmRlcnMuJ30gPSAnS2Vpc3RpbWV3YWFuIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZWxpaGF0IHNlbmFyYWkgcGVzYW5hbiBrZXJqYSBzZW5kaXJpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHdyaXRlIGEgcmVwb3J0IGZvciB0aGUgd29ya29yZGVyLid9ID0gJ0tlaXN0aW1ld2FhbiB5YW5nIGRpcGVybHVrYW4gdW50dWsgbWVudWxpcyBsYXBvcmFuIHVudHVrIG1lbmRhcGF0a2FuIHBlcmludGFoIGtlcmphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biB0YXNrIHRvIGNoZWNrIGlmIHNwZWNpZmljIHRpbWVzIGhhdmUgYmVlbiByZWFjaGVkIGluIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSB3b3Jrb3JkZXIgYXMgYSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2NoZWR1bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2NyZWVuIGFmdGVyIGNyZWF0aW5nIGEgd29ya29yZGVyJ30gPSAnU2tyaW4gc2VsZXBhcyBtZW5jaXB0YSB1cnV0YW5rZXJqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMnfSA9ICdDYXJpIFBlcnViYWhhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY2hhbmdlIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY2hhbmdlIG51bWJlciwgdGhlIFN5c3RlbUlEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZCB3aXRoIFN5c3RlbUlELmNvdW50ZXIgZm9ybWF0IChlLmcuIDEwMDExOCwgMTAwMTE5KS4gV2l0aCAiRGF0ZSIsIHRoZSBjaGFuZ2UgbnVtYmVycyB3aWxsIGJlIGdlbmVyYXRlZCBieSB0aGUgY3VycmVudCBkYXRlIGFuZCBhIGNvdW50ZXI7IHRoaXMgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuY291bnRlciwgZS5nLiAyMDEwMDYyNDAwMDAxLCAyMDEwMDYyNDAwMDAyLiBXaXRoICJEYXRlQ2hlY2tzdW0iLCB0aGUgY291bnRlciB3aWxsIGJlIGFwcGVuZGVkIGFzIGNoZWNrc3VtIHRvIHRoZSBzdHJpbmcgb2YgZGF0ZSBwbHVzIHRoZSBTeXN0ZW1JRC4gVGhlIGNoZWNrc3VtIHdpbGwgYmUgcm90YXRlZCBvbiBhIGRhaWx5IGJhc2lzLiBUaGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LlN5c3RlbUlELkNvdW50ZXIuQ2hlY2tTdW0sIGUuZy4gMjAxMDA2MjQxMDAwMDAxNywgMjAxMDA2MjQxMDAwMDAyNi4nfSA9CiAgICAgICAgJ01lbWlsaWggbW9kdWwgYmViZXJhcGEgcGVydWJhaGFuIHBlbmphbmEuICJBdXRvSW5jcmVtZW50IiBtZW5hbWJhaCBub21ib3IgcGVydWJhaGFuLCBTaXN0ZW1JRCBkYW4ga2F1bnRlciBkaWd1bmFrYW4gZGVuZ2FuIGZvcm1hdCBTeXN0ZW1JRC5jb3VudGVyIChjb250b2g6IDEwMDExOCAsIDEwMDExOSApLiBEZW5nYW4gIlRhcmlraCIsIG5vbWJvciBwZXJ1YmFoYW4gYWthbiBkaWphbmEgb2xlaCB0YXJpa2ggZGFuIGthdW50ZXI7IGZvcm1hdCBpbmkga2VsaWhhdGFuIHNlcGVydGkgWWVhci5Nb250aC5EYXkuY291bnRlcjsgY29udG9obnlhIDIwMTAwNjI0MDAwMDEgLCAyMDEwMDYyNDAwMDAyLiBEZW5nYW4gIkRhdGVDaGVja3N1bSIsIGthdW50ZXIgaXR1IGFrYW4gZGl0YW1iYWggc2ViYWdhaSBjaGVja3N1bSBrZXBhZGEgcmVudGV0YW4gVGFyaWtoIGRpdGFtYmFoIElEIFNpc3RlbS4gQ2hlY2tzdW0gaW5pIGFrYW4gYmVycHV0YXIgc2V0aWFwIGhhcmkuIEZvcm1hdCBpbmkga2VsaWhhdGFuIHNlcGVydGkgWWVhci5Nb250aC5EYXkuU3lzdGVtSUQuQ291bnRlci5DaGVja1N1bSwgY29udG9obnlhIDIwMTAwNjI0MTAwMDAwMTcgLCAyMDEwMDYyNDEwMDAwMDI2IC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBhZ2VudCBmb3IgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRJVFNNQ2hhbmdlWm9vbSBhbmQgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nfSA9CiAgICAgICAgJ01lbmV0YXBrYW4ga2V0aW5nZ2lhbiBsYWxhaSAoZGFsYW0gcGlrc2VsKSBiaWRhbmcgSFRNTCBzZWJhcmlzIGRhbGFtIEFnZW50SVRTTUNoYW5nZVpvb20gZGFuIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50SVRTTUNoYW5nZVpvb20gYW5kIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJ30gPQogICAgICAgICdNZW5ldGFwa2FuIGtldGluZ2dpYW4gbWFrc2ltdW0gKCBkYWxhbSBwaWtzZWwpIGJpZGFuZyBIVE1MIHNlYmFyaXMgZGFsYW0gQWdlbnRJVFNNQ2hhbmdlWm9vbSBkYW4gQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgbWluaW1hbCBjaGFuZ2UgY291bnRlciBzaXplIChpZiAiQXV0b0luY3JlbWVudCIgd2FzIHNlbGVjdGVkIGFzIElUU01DaGFuZ2U6Ok51bWJlckdlbmVyYXRvcikuIERlZmF1bHQgaXMgNSwgdGhpcyBtZWFucyB0aGUgY291bnRlciBzdGFydHMgZnJvbSAxMDAwMC4nfSA9CiAgICAgICAgJ1NldCBtaW5pbXVtIHNhaXoga2F1bnRlciBwZXJ1YmFoYW4gKGppa2EgIkF1dG9JbmNyZW1lbnQiIHRlbGFoIGRpcGlsaWggc2ViYWdhaSBJVFNNQ2hhbmdlOjpOdW1iZXJHZW5lcmF0b3IpLiBMYWxhaSBhZGFsYWggNSwgaW5pIGJlcm1ha25hIGthdW50ZXIgYmVybXVsYSBkYXJpIDEwMDAwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHVwIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciBjaGFuZ2VzLid9ID0gJ1NldCB1cCBqZW50ZXJhIGtlcmFqYWFuIHVudHVrIHBlcnViYWhhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3Igd29ya29yZGVycy4nfSA9ICdTZXQgdXAgamVudGVyYSBrZXJhamFhbiB1bnR1ayBwZXNhbmFuIGtlcmphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGNoZWNrYm94IGluIHRoZSBBZ2VudElUU01Xb3JrT3JkZXJFZGl0IHNjcmVlbiB0aGF0IGRlZmluZXMgaWYgdGhlIHRoZSBmb2xsb3dpbmcgd29ya29yZGVycyBzaG91bGQgYWxzbyBiZSBtb3ZlZCBpZiBhIHdvcmtvcmRlciBpcyBtb2RpZmllZCBhbmQgdGhlIHBsYW5uZWQgZW5kIHRpbWUgaGFzIGNoYW5nZWQuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBrb3RhayBzZW1hayBkYWxhbSBza3JpbiBBZ2VudElUU01Xb3JrT3JkZXJFZGl0IHlhbmcgbWVudGFrcmlma2FuIGppa2EgdXJ1dGFua2VyamEgYmVyaWt1dCBqdWdhIHBlcmx1IGRpcGluZGFoa2FuIGppa2EgdXJ1dGFua2VyamEgeWFuZyBkaXViYWggc3VhaSBkYW4gbWFzYSBha2hpciB5YW5nIGRpcmFuY2FuZyB0ZWxhaCBiZXJ1YmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgY2hhbmdpbmcgdGhlIHdvcmtvcmRlciBhZ2VudCwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIGNoYW5nZSBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIGNoYW5nZSwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIHBhdXRhbiBkYWxhbSBtZW51IHlhbmcgbWVtYm9sZWhrYW4gbWVuZW50dWthbiBwZXJ1YmFoYW4gc2ViYWdhaSB0ZW1wbGF0IGRhbGFtIHBhcGFyYW4genVtIGNoYW5nZSwgZGFsYW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgd29ya29yZGVyIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgd29ya29yZGVyLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBlZGl0aW5nIHRoZSByZXBvcnQgb2YgYSB3b3Jrb3JkZXIsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNoYW5nZSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBwYXV0YW4gZGFsYW0gbWVudSB5YW5nIG1lbWJvbGVoa2FuIG1lbmdodWJ1bmdrYW4gcGVydWJhaGFuIGRlbmdhbiBvYmplayBsYWluIGRhbGFtIHBhbmRhbmdhbiBwZXJ1YmFoYW4genVtIGJhZ2kgYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSB3b3Jrb3JkZXIgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIG1vdmluZyB0aGUgdGltZSBzbG90IG9mIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIHBhdXRhbiBkYWxhbSBtZW51IHlhbmcgbWVtYm9sZWhrYW4gcGVyZ2VyYWthbiBzbG90IG1hc2EgY2hhbmdlIGRhbGFtIHBhcGFyYW4genVtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0YWtpbmcgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBjb25kaXRpb25zIG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBwYXV0YW4gZGFsYW0gbWVudSB1bnR1ayBtYXN1ayBrZSBzeWFyYXQtc3lhcmF0IHBlcnViYWhhbiBkYWxhbSBwYW5kYW5nYW4genVtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIHBhdXRhbiBkYWxhbSBtZW51IHVudHVrIG1hc3VrIGtlIHNlamFyYWggcGVydWJhaGFuIGRhbGFtIHBhbmRhbmdhbiB6dW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSB3b3Jrb3JkZXIgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIHBhdXRhbiBkYWxhbSBtZW51IHVudHVrIG1lbWFkYW0gcGVydWJhaGFuIGRhbGFtIHBhbmRhbmdhbiB6dW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIHdvcmtvcmRlciBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIHBhdXRhbiBkYWxhbSBtZW51IHVudHVrIG1lbmdlZGl0IHBlcnViYWhhbiBkYWxhbSBwYW5kYW5nYW4genVtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIHBhdXRhbiBkYWxhbSBtZW51IHVudHVrIGtlbWJhbGkgZGFsYW0gcGFuZGFuZ2FuIHp1bSBjaGFuZ2UgYmFnaSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgd29ya29yZGVyIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVudW5qdWtrYW4gcGF1dGFuIGRhbGFtIG1lbnUgdW50dWsgbWVuY2V0YWsgcGVydWJhaGFuIGRhbGFtIHBhbmRhbmdhbiB6dW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHJlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycyBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBwYXV0YW4gZGFsYW0gbWVudSB1bnR1ayBtZW5ldGFwa2FuIHNlbXVsYSBwZXJ1YmFoYW4gZGFuIHVydXRhbmtlcmphIGRhbGFtIHBhbmRhbmdhbiB6dW0gYW50YXJhIG11a2EgZWplbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY2hhbmdlIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1R1bmp1a2thbiBzZWphcmFoIGNoYW5nZSAocGVyaW50YWggYmVyYmFsaWspIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRlIE1hY2hpbmUnfSA9ICdLZWFkYWFuIE1lc2luJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0b3JlcyBjaGFuZ2UgYW5kIHdvcmtvcmRlciBpZHMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgdGVtcGxhdGUgaWQsIHdoaWxlIGEgdXNlciBpcyBlZGl0aW5nIGEgdGVtcGxhdGUuJ30gPQogICAgICAgICdTaW1wYW4gY2hhbmdlIGRhbiB1cnV0YW5rZXJqYSBpZHMgZGFuIGlkIHRlbXBsYXQgc2VwYWRhbiwgc2VtZW50YXJhIHBlbmdndW5hIG1lbmdlZGl0IHRlbXBsYXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgV29ya29yZGVyJ30gPSAnQW1iaWwgVXJ1dGFuS2VyamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgT3ZlcnZpZXcnfSA9ICdMaWhhdCBTZW11bGEgVGVtcGxhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY2hhbmdlLCBlLmcuIENoYW5nZSMsIE15Q2hhbmdlIy4gVGhlIGRlZmF1bHQgaXMgQ2hhbmdlIy4nfSA9CiAgICAgICAgJ1BlbmdlY2FtIHVudHVrIHBlcnViYWhhbiwgaS4gUGVydWJhaGFuIyBQZXJ1YmFoYW4gU2F5YSMuIExhbGFpIGFkYWxhaCBQZXJ1YmFoYW4jLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSB3b3Jrb3JkZXIsIGUuZy4gV29ya29yZGVyIywgTXlXb3Jrb3JkZXIjLiBUaGUgZGVmYXVsdCBpcyBXb3Jrb3JkZXIjLid9ID0KICAgICAgICAnUGVuZ2VjYW0gdW50dWsgbWVuZGFwYXRrYW4gcGVyaW50YWgga2VyamEsIG1pc2FsbnlhIFdvcmtvcmRlciMgV29ya29yZGVyIy4gTGFsYWkgYWRhbGFoIFBlcmludGFoIEtlcmphIy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBBQ0wgbW9kdWxlIHJlc3RyaWN0cyB0aGUgdXN1YWdlIG9mIHRoZSB0aWNrZXQgdHlwZXMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbiBcJ0lUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlc1wnLCB0byB1c2VycyBvZiB0aGUgZ3JvdXBzIGFzIGRlZmluZWQgaW4gIklUU01DaGFuZ2U6OlJlc3RyaWN0VGlja2V0VHlwZXM6Okdyb3VwcyIuIEFzIHRoaXMgQUNMIGNvdWxkIGNvbGxpZGUgd2l0aCBvdGhlciBBQ0xzIHdoaWNoIGFyZSBhbHNvIHJlbGF0ZWQgdG8gdGhlIHRpY2tldCB0eXBlLCB0aGlzIHN5c2NvbmZpZyBvcHRpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgc2hvdWxkIG9ubHkgYmUgYWN0aXZhdGVkIGlmIG5lZWRlZC4nfSA9CiAgICAgICAgJ01vZHVsIEFDTCBtZW5naGFka2FuIHBlbmdndW5hYW4gamVuaXMgdGlrZXQgeWFuZyBkaXRha3JpZmthbiBkYWxhbSBwaWxpaGFuIHN5c2NvbmZpZyBcJ0lUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlc1wnLCBrZXBhZGEgcGVuZ2d1bmEgZGFyaXBhZGEga3VtcHVsYW4gc2VwZXJ0aSB5YW5nIGRpdGFrcmlma2FuIGRhbGFtICJJVFNNQ2hhbmdlOjpSZXN0cmljdFRpY2tldFR5cGVzOjpLdW1wdWxhbiIuIEFDTCBpbmkgYm9sZWggYmVydGVtYnVuZyBkZW5nYW4gQWNscyBsYWluIHlhbmcganVnYSBiZXJrYWl0YW4gZGVuZ2FuIGplbmlzIHRpa2V0LCBwaWxpaGFuIHN5c2NvbmZpZyBpbmkgZGlsdW1wdWhrYW4gc2VjYXJhIGxhbGFpIGRhbiBoYW55YSBib2xlaCBkaWFrdGlma2FuIGppa2EgZGlwZXJsdWthbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBTbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R5cGVzIG9mIHRpY2tldHMsIHdoZXJlIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IGEgbGluayB0byBhZGQgYSBjaGFuZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICdKZW5pcy1qZW5pcyB0aWtldCwgZGkgbWFuYSBkYWxhbSB6b29tIHRpa2V0IG1lbGloYXQgcGF1dGFuIHVudHVrIG1lbmFtYmFoIHBlcnViYWhhbiBha2FuIGRpcGFwYXJrYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQgKGZyb20gdGVtcGxhdGUpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBEZWxldGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSGlzdG9yeSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFJlcG9ydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29uY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVndWxhcmx5J30gPSAnJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bmJfTk9fSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLYXRlZ29yaSA8LT4gT21mYW5nIDwtPiBQcmlvcml0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ2F0ZWdvcnkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ1NldHQgb3BwIHZhbGcgYXYgcHJpb3JpdGV0IGJhc2VydCBww6UgS2F0ZWdvcmkgPC0+IE9tZmFuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnVGlsZGVsaW5nIGF2IHByaW9yaXRldCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ2hhbmdlTm90aWZpY2F0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZU1hbmFnZW1lbnQgTm90aWZpY2F0aW9uIE1hbmFnZW1lbnQnfSA9ICdJVFNNIEVuZHJpbmdlciAtIE1lbGRpbmdzb3Bwc2V0dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTm90aWZpY2F0aW9uIFJ1bGUnfSA9ICdMZWdnIHRpbCBNZWxkaW5nc3JlZ2VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1bGUnfSA9ICdSZWdlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG5vdGlmaWNhdGlvbiBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnRW4gbWVsZGluZyBtw6UgaGEgZXQgbmF2biEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZC4nfSA9ICdOYXZuIGVyIHDDpWtyZXZkJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01TdGF0ZU1hY2hpbmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFN0YXRlIE1hY2hpbmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgY2F0YWxvZyBjbGFzcyEnfSA9ICdWZWxnIGVuIGthdGFsb2drbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRhbG9nIGNsYXNzIGlzIHJlcXVpcmVkISd9ID0gJ0VuIGthdGFsb2drbGFzc2UgZXIgcMOla3JldmQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHN0YXRlIHRyYW5zaXRpb24nfSA9ICdMZWdnIHRpbCBlbiB0aWxzdGFuZHNlbmRyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLYXRhbG9na2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBOYW1lJ30gPSAnT2JqZWt0ZXRzIG5hdm4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb3ZlciBzdGF0ZSB0cmFuc2l0aW9ucyBmb3InfSA9ICdPdmVyc2lrdCBvdmVyIHRpbHN0YW5kc2VuZHJpbmdlciBmb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgc3RhdGUgdHJhbnNpdGlvbid9ID0gJ1NsZXR0IGRlbm5lIHRpbHN0YW5kc2VuZHJpbmdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBuZXcgc3RhdGUgdHJhbnNpdGlvbiBmb3InfSA9ICdOeSB0aWxzdGFuZHNlbmRyaW5nIGZvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGEgc3RhdGUhJ30gPSAnVmVubmxpZ3N0IHZlbGcgZW4gdGlsc3RhbmQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBuZXh0IHN0YXRlISd9ID0gJ1Zlbm5saWdzdCB2ZWxnIG5lc3RlIHRpbHN0YW5kISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IGEgc3RhdGUgdHJhbnNpdGlvbiBmb3InfSA9ICdSZWRpZ8OpciBlbiB0aWxzdGFuZHNlbmRyaW5nIGZvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoZSBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnVmlsIGR1IHZpcmtlbGlnIHNsZXR0ZSB0aWxzdGFuZHNlbmRyaW5nZW4/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDaGFuZ2UnfSA9ICdMZWdnIHRpbCBFbmRyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlJ30gPSAnRW5kcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdXN0aWZpY2F0aW9uJ30gPSAnQmVyZXR0aWdlbHNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lucHV0IGludmFsaWQuJ30gPSAnVWd5bGRpZyB2ZXJkaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnT21mYW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBEYXRlJ30gPSAnRm9yZXNwdXJ0IGRhdG8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IENoYW5nZSBUZW1wbGF0ZSd9ID0gJ1ZlbGcgbWFsIGZvciBFbmRyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgdHlwZSd9ID0gJ1RpZHN0eXBlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgdGltZSB0eXBlLid9ID0gJ1VneWxkaWcgdGlkc3R5cGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpbWUnfSA9ICdOeSB0aWQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBDQUIgYXMgdGVtcGxhdGUnfSA9ICdMYWdyZSBFbmRyaW5ncyBDQUIgc29tIG1hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyB0byBpbnZvbHZlZCBwZXJzb25zIHNjcmVlbid9ID0gJ0fDpSB0aWwgaW52b2x2ZXJ0ZSBwZXJzb25lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIE5hbWUnfSA9ICdVZ3lsZGlnIG5hdm4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9ucyBhbmQgQWN0aW9ucyd9ID0gJ0ZvcnV0c2V0bmluZ2VyIG9nIEdqw7hyZW3DpWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmRpdGlvbid9ID0gJ1NsZXR0IGZvcnV0c2V0bmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGNvbmRpdGlvbid9ID0gJ0xlZ2cgdGlsIG55IGZvcnV0c2V0bmluZyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb25kaXRpb24nfSA9ICdFbmRyZSBmb3J1dHNldG5pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBhIHZhbGlkIG5hbWUuJ30gPSAnVHJlbmdlciBldCBneWxkaWcgbmF2bic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIG5hbWUgaXMgbmVlZGVkLid9ID0gJ0V0IGd5bGRpZyBuYXZuIGtyZXZlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWU6J30gPSAnRHVwbGlrYXQgbmF2bic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkIGJ5IGFub3RoZXIgY29uZGl0aW9uLid9ID0gJ0RldHRlIG5hdm5ldCBlciBhbGxlcmVkZSBicnVrdCBww6UgZW4gYW5uZW4gZm9ydXRzZXRuaW5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXRjaGluZyd9ID0gJ1NvbSBwYXNzZXIgdGlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FueSBleHByZXNzaW9uIChPUiknfSA9ICdIdmlsa2V0IHV0cnlrayBzb20gaGVsc3QgKE9SKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgZXhwcmVzc2lvbnMgKEFORCknfSA9ICdBbGxlIHV0dHJ5a2sgKEFORCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwcmVzc2lvbnMnfSA9ICdVdHRyeWtrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdG9yJ30gPSAnVmVsZ2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdG9yJ30gPSAnT3BlcmF0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEV4cHJlc3Npb24nfSA9ICdTbGV0dCB1dHRyeWtrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEV4cHJlc3Npb25zIGZvdW5kLid9ID0gJ0luZ2VuIHV0dHJ5a2sgZnVubmV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGV4cHJlc3Npb24nfSA9ICdMZWdnIHRpbCBueXR0IHV0dHJ5a2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEFjdGlvbid9ID0gJ1NsZXR0IGdqw7hyZW3DpWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQWN0aW9ucyBmb3VuZC4nfSA9ICdJbmdlbiBnasO4cmVtw6VsIGZ1bm5ldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGFjdGlvbid9ID0gJ0xlZ2cgdGlsIGdqw7hyZW3DpWwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNoYW5nZT8nfSA9ICdWaWwgZHUgdmlya2VsaWcgc2xldHRlIGRlbm5lIGVuZHJpbmdlbj8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgJXMlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiAlcyVzJ30gPSAnSGlzdG9yaWtrZW4gcMOlICVzJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyJ30gPSAnQXJiZWlkc29yZHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgZGV0YWlscyd9ID0gJ1ZpcyBkZXRhbGplcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHdvcmtvcmRlcid9ID0gJ1ZpcyBhcmJlaWRzb3JkcmUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxlZCBoaXN0b3J5IGluZm9ybWF0aW9uIG9mICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGlmaWVkJ30gPSAnTW9kaWZpc2VydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbGQgVmFsdWUnfSA9ICdHYW1tZWwgdmVyZGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFZhbHVlJ30gPSAnTnkgdmVyZGknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJbnZvbHZlZCBQZXJzb25zIG9mICVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52b2x2ZWQgUGVyc29ucyd9ID0gJ0ludm9sdmVydGUgcGVyc29uZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlTWFuYWdlcid9ID0gJ0VuZHJpbmdzYW5zdmFybGlnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgaW52YWxpZC4nfSA9ICdVZ3lsZGlnIGJydWtlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VCdWlsZGVyJ30gPSAnT3BwcmV0dGV0IGF2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBBZHZpc29yeSBCb2FyZCd9ID0gJ0VuZHJpbmdzcsOlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgVGVtcGxhdGUnfSA9ICdDQUItbWFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcGx5IFRlbXBsYXRlJ30gPSAnQnJ1ayBtYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3VGVtcGxhdGUnfSA9ICdOeSBtYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSB0aGlzIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJ0xhZ3JlIGRldHRlIEVuZHJpbmdzcsOlZCBzb20gbWFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0byBDQUInfSA9ICdMZWdnIHRpbCBDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBVc2VyJ30gPSAnVWd5bGRpZyBicnVrZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBDQUInfSA9ICdOw6V2w6ZyZW5kZSBDQUInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnS29udGVrc3R2YWxnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZXMgcGVyIHBhZ2UnfSA9ICdFbmRyaW5nZXIgcGVyIHNpZGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgVGl0bGUnfSA9ICdFbmRyaW5nc3RpdHRlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEJ1aWxkZXInfSA9ICdEZW4gc29tIG9wcHJldHRldCBFbmRyaW5nZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE1hbmFnZXInfSA9ICdFbmRyaW5nc2Fuc3ZhcmxpZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXJzJ30gPSAnQXJiZWlkc29yZHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTdGF0ZSd9ID0gJ0VuZHJpbmdzdGlsc3RhbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBUaW1lJ30gPSAnRm9yZXNwdXJ0IHRpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIFN0YXJ0IFRpbWUnfSA9ICdQbGFubGFndCBzdGFydHRpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVuZCBUaW1lJ30gPSAnUGxhbmxhZ3Qgc2x1dHRpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWwgU3RhcnQgVGltZSd9ID0gJ0Zha3Rpc2sgc3RhcnR0aWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsIEVuZCBUaW1lJ30gPSAnRmFrdGlzayBzbHV0dGlkJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VSZXNldAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIHJlc2V0IHRoaXMgY2hhbmdlPyd9ID0gJ1ZpbCBkdSB2aXJrZWxpZyByZXNldHRlIGRlbm5lIGVuZHJpbmdlbj8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGUuZy4gMTAqNTE1NSBvciAxMDU2NTgqKSd9ID0gJyhmLmVrcy4gMTAqNTE1NSBlbGxlciA4ODgqKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQWdlbnQnfSA9ICdDQUItc2Frc2JlaGFuZGxlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLmcuJ30gPSAnZi5la3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBDdXN0b21lcid9ID0gJ0NBQi1rdW5kZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBJbnN0cnVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBSZXBvcnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgUHJpb3JpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgSW1wYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBDYXRlZ29yeSd9ID0gJ0VuZHJpbmdza2F0ZWdvcmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJlZm9yZS9hZnRlciknfSA9ICcoZsO4ci9ldHRlciknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJldHdlZW4pJ30gPSAnKG1lbGxvbSknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBhcyBUZW1wbGF0ZSd9ID0gJ0xhZ3JlIEVuZHJpbmcgc29tIE1hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHRlbXBsYXRlIHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICdFbiBtYWwgbcOlIGhhIGV0IG5hdm4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLid9ID0gJ01hbG5hdm5ldCBlciBww6VrcmV2ZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgU3RhdGVzJ30gPSAnTnVsbHN0aWxsIHRpbHN0YW5kZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcndyaXRlIG9yaWdpbmFsIHRlbXBsYXRlJ30gPSAnT3ZlcnNrcml2IGVrc2lzdGVyZW5kZSBtYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIG9yaWdpbmFsIGNoYW5nZSd9ID0gJ1NsZXR0IGRlbiBvcHByaW5uZWxpZ2UgZW5kcmluZ2VuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VUaW1lU2xvdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBUaW1lIFNsb3QnfSA9ICdGbHl0dCB0aWRzcm9tbWV0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW5mb3JtYXRpb24nfSA9ICdFbmRyaW5nc2luZm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBFZmZvcnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWNjb3VudGVkIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEluaXRpYXRvcihzKSd9ID0gJ0luaXRpYXRpdnRha2VyKGUpIHRpbCBFbmRyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQid9ID0gJ0NBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdTaXN0IGVuZHJldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdTaXN0IGVuZHJldCBhdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICdMYXN0IG5lZCB2ZWRsZWdnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ0FCIFRlbXBsYXRlJ30gPSAnRW5kcmUgQ0FCLW1hbCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBjaGFuZ2UgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5ldyBjaGFuZ2Ugd2lsbCBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgaXQgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyB3b3Jrb3JkZXIgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB0ZW1wb3JhcnkgY2hhbmdlIHdpbGwgYmUgY3JlYXRlZCB3aGljaCBjb250YWlucyB0aGUgd29ya29yZGVyLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wb3JhcnkgY2hhbmdlIGFuZCBuZXcgd29ya29yZGVyIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSB3b3Jrb3JkZXIgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgSUQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb250ZW50J30gPSAnRW5kcmUgaW5uaG9sZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBUaW1lJ30gPSAnRW5kcmluZ3N0aWRzcHVua3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUZW1wbGF0ZSBDb250ZW50J30gPSAnRW5kcmUgbWFsaW5uaG9sZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgVGVtcGxhdGUnfSA9ICdTbGV0dCBNYWwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlciB0byAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RydWN0aW9uJ30gPSAnSW5zdHJ1a3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCB3b3Jrb3JkZXIgdHlwZS4nfSA9ICdVZ3lsZGlnIHR5cGUgYXJiZWlkc29yZHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBwbGFubmVkIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIHBsYW5uZWQgZW5kIHRpbWUhJ30gPSAnUGxhbmxhZ3Qgc3RhcnR0aWQgbcOlIHbDpnJlIGbDuHIgcGxhbmxhZ3Qgc2x1dHRpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGZvcm1hdC4nfSA9ICdVZ3lsZGlnIGZvcm1hdC4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IFdvcmtvcmRlciBUZW1wbGF0ZSd9ID0gJ1ZlbGcgbWFsIGZvciBBcmJlaWRzb3JkcmVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZ2VudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBXb3Jrb3JkZXIgQWdlbnQgb2YgJXMlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgd29ya29yZGVyPyd9ID0gJ1ZpcmtlbGlnIHNsZXR0ZSBkZW5uZSBhcmJlaWRzb3JkcmVuPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBXb3Jrb3JkZXIuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIENvbmRpdGlvbiEnfSA9CiAgICAgICAgJ0R1IGthbiBpa2tlIHNsZXR0ZSBhcmJlaWRzb3JkcmVuLiBEZW4gZXIgaSBicnVrIGF2IG1pbnN0IMOpbiBmb3J1dHNldG5pbmchJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgV29ya29yZGVyIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBDb25kaXRpb24ocyknfSA9ICdEZW5uZSBhcmJlaWRzb3JkcmVuIGJydWtlcyBhdiBmw7hsZ2VuZGUgRm9ydXRzZXRuaW5nKGVyKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzLSVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgZm9sbG93aW5nIHdvcmtvcmRlcnMgYWNjb3JkaW5nbHknfSA9ICdGbHl0dCBldHRlcmbDuGxnZW5kZSBhcmJlaWRzb3JkcmUgdGlsc3ZhcmVuZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhlIHBsYW5uZWQgZW5kIHRpbWUgb2YgdGhpcyB3b3Jrb3JkZXIgaXMgY2hhbmdlZCwgdGhlIHBsYW5uZWQgc3RhcnQgdGltZXMgb2YgYWxsIGZvbGxvd2luZyB3b3Jrb3JkZXJzIHdpbGwgYmUgY2hhbmdlZCBhY2NvcmRpbmdseSd9ID0KICAgICAgICAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMtJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclJlcG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBSZXBvcnQgb2YgJXMlcy0lcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnQnfSA9ICdSYXBwb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBhY3R1YWwgc3RhcnQgdGltZSBtdXN0IGJlIGJlZm9yZSB0aGUgYWN0dWFsIGVuZCB0aW1lISd9ID0gJ0Zha3Rpc2sgc3RhcnR0aWQgbcOlIHbDpnJlIGbDuHIgZmFrdGlzayBzbHV0dGlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBhY3R1YWwgc3RhcnQgdGltZSBtdXN0IGJlIHNldCwgd2hlbiB0aGUgYWN0dWFsIGVuZCB0aW1lIGlzIHNldCEnfSA9CiAgICAgICAgJ0h2aXMgc2x1dHRpZGVuIHNldHRlcyBtw6Ugb2dzw6Ugc3RhcnR0aWQgc2V0dGVzISc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGFrZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBBZ2VudCd9ID0gJ07DpXbDpnJlbmRlIHNha3NiZWhhbmRsZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIHRha2UgdGhpcyB3b3Jrb3JkZXI/J30gPSAnVmlsIGR1IHZpcmtlbGlnIHRhIGRlbm5lIGFyYmVpZHNvcmRyZW4/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJUZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBXb3Jrb3JkZXIgYXMgVGVtcGxhdGUnfSA9ICdMYWdyZSBBcmJlaWRzb3JkcmUgc29tIE1hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgd29ya29yZGVyIChhbmQgc3Vycm91bmRpbmcgY2hhbmdlKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEluZm9ybWF0aW9uJ30gPSAnQXJiZWlkc29yZHJlLWluZm8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biBub3RpZmljYXRpb24gJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZXJlIHdhcyBhbiBlcnJvciBjcmVhdGluZyB0aGUgbm90aWZpY2F0aW9uLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDaGFuZ2VzJ30gPSAnT3ZlcnNpa3Q6IEVuZHJpbmdlcic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgd2l0aCBUaWNrZXRJRCAlcyBkb2VzIG5vdCBleGlzdCEnfSA9ICdTYWsgbWVkIFRpY2tldElEICVzIGZpbm5lcyBpa2tlISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaXNzaW5nIHN5c2NvbmZpZyBvcHRpb24gIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGFkZCBjaGFuZ2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlIGZyb20gdGVtcGxhdGUhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDQUJUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNoYW5nZSBmb3VuZCBmb3IgY2hhbmdlSUQgJXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBDQUIgb2YgY2hhbmdlICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgdGhlIHRlbXBsYXRlLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQ29uZGl0aW9uSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyAlcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGNyZWF0ZSBuZXcgY29uZGl0aW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIENvbmRpdGlvbklEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgRXhwcmVzc2lvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBBY3Rpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgQWN0aW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBBY3Rpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3I6IFVua25vd24gZmllbGQgdHlwZSAiJXMiISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25JRCAlcyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIGdpdmVuIENoYW5nZUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBkb2VzIG5vdCBoYXZlIGFuIGFsbG93ZWQgY2hhbmdlIHN0YXRlIHRvIGJlIGRlbGV0ZWQhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY2hhbmdlSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmtub3duIHR5cGUgIiVzIiBlbmNvdW50ZXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5IHpvb20sIG5vIEhpc3RvcnlFbnRyeUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5RW50cnkgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlIENBQiBmb3IgQ2hhbmdlICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU1hbmFnZXIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2VNYW5hZ2VyJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IENBQid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgQ2hhbmdlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgV29ya29yZGVycyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUElSLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUElSJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQU0EucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBQU0EnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBjcmVhdGUgb3V0cHV0LCBhcyB0aGUgd29ya29yZGVyIGlzIG5vdCBhdHRhY2hlZCB0byBhIGNoYW5nZSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgbm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gY2hhbmdlIHRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyJ30gPSAnQXJiZWlkc29yZHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gd29ya29yZGVyIHRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIE92ZXJ2aWV3ICglcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZFN0YXJ0VGltZSd9ID0gJ1BsYW5sYWd0IHN0YXJ0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWRFbmRUaW1lJ30gPSAnUGxhbmxhZ3Qgc2x1dHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsU3RhcnRUaW1lJ30gPSAnRmFrdGlzayBzdGFydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxFbmRUaW1lJ30gPSAnRmFrdGlzayBzbHV0dCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUmVzZXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byByZXNldCBXb3JrT3JkZXIgJXMgb2YgQ2hhbmdlICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gcmVzZXQgQ2hhbmdlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlU2NoZWR1bGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2UgU2NoZWR1bGUnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VUaXRsZSd9ID0gJ0VuZHJpbmdzdGl0dGVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlcnMnfSA9ICdBcmJlaWRzb3JkcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlU3RhdGUnfSA9ICdFbmRyaW5nc3RpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTZWFyY2ggUmVzdWx0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBOdW1iZXInfSA9ICdFbmRyaW5nc251bW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrIE9yZGVyIFRpdGxlJ30gPSAnQXJiZWlkc29yZHJldGl0dGVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBEZXNjcmlwdGlvbid9ID0gJ0VuZHJpbmdzYmVza3JpdmVsc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEp1c3RpZmljYXRpb24nfSA9ICdFbmRyaW5nc2JlcmV0dGlnZWxzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICdBcmJlaWRzb3JkcmVpbm5zdHJ1a3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFJlcG9ydCd9ID0gJ0FyYmVpZHNvcmRyZXJhcHBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFByaW9yaXR5J30gPSAnRW5kcmluZ3Nwcmlvcml0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEltcGFjdCd9ID0gJ0VuZHJpbmdzb21mYW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgQnknfSA9ICdFbmRyaW5nIG9wcHJldHRldCBhdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgU3RhdGUnfSA9ICdBcmJlaWRzb3JkcmV0aWxzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgVHlwZSd9ID0gJ0FyYmVpZHNvcmRyZXR5cGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEFnZW50J30gPSAnQXJiZWlkc29yZHJlIHNha3NiZWhhbmRsZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmVmb3JlJ30gPSAnZsO4cic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjaGFuZ2UgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSB0aGUgdGVtcGxhdGUgIiVzIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBjaGFuZ2UgIiVzIi4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRpbWVTbG90LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlIGNhblwndCBiZSBtb3ZlZCwgYXMgaXQgaGFzIG5vIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciBmaXJzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IG1vdmUgYSBjaGFuZ2Ugd2hpY2ggYWxyZWFkeSBoYXMgc3RhcnRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIG1vdmUgdGhlIGluZGl2aWR1YWwgd29ya29yZGVycyBpbnN0ZWFkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY3VycmVudCAlcyBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlICVzIG9mIGFsbCB3b3Jrb3JkZXJzIGhhcyB0byBiZSBkZWZpbmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gbW92ZSB0aW1lIHNsb3QgZm9yIHdvcmtvcmRlciAjJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgJXMgcGVybWlzc2lvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gVGVtcGxhdGVJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHRlbXBsYXRlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICIlcyIhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSB3b3Jrb3JkZXIgZnJvbSB0ZW1wbGF0ZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBUZW1wbGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyBvbiB0aGUgY2hhbmdlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIHdvcmtvcmRlciEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFnZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHNldCB0aGUgd29ya29yZGVyIGFnZW50IG9mIHRoZSB3b3Jrb3JkZXIgIiVzIiB0byBlbXB0eSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIHRoZSB3b3Jrb3JkZXIgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGZpbmQgQ2hhbmdlIGZvciBXb3JrT3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHdvcmtvcmRlciAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgV29ya09yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6Oid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgZW50cnkgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSBab29tJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUYWtlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdGFrZSB0aGUgd29ya29yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB3b3Jrb3JkZXIgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXQvSVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBjb25maWcgb3B0aW9uICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgb3B0aW9uICVzIG5lZWRzIHRvIGJlIGEgSEFTSCByZWYhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNvbmZpZyBvcHRpb24gZm91bmQgZm9yIHRoZSB2aWV3ICIlcyIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpdGxlOiAlcyB8IFR5cGU6ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgQ0FCcyd9ID0gJ01pbmUgRW5kcmluZ3Nyw6VkJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNoYW5nZXMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IENoYW5nZXMnfSA9ICdNaW5lIEVuZHJpbmdlcic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBXb3JrIE9yZGVycyd9ID0gJ01pbmUgQXJiZWlkc29yZHJlJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ2hhbmdlTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZXF1ZXN0ZWQnfSA9ICdGb3Jlc3B1cnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGVuZGluZyBhcHByb3ZhbCd9ID0gJ0F2dmVudGVyIGdvZGtqZW5uaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlamVjdGVkJ30gPSAnQXZ2aXN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FwcHJvdmVkJ30gPSAnR29ka2plbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW4gcHJvZ3Jlc3MnfSA9ICdVbmRlciBhcmJlaWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGVuZGluZyBwaXInfSA9ICdBdnZlbnRlciBTbHV0dGV2YWx1ZXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc3VjY2Vzc2Z1bCd9ID0gJ1ZlbGx5a2tldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydmYWlsZWQnfSA9ICdmZWlsZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2FuY2VsZWQnfSA9ICdBdmJydXR0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JldHJhY3RlZCd9ID0gJ1RydWtrZXQgdGlsYmFrZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjcmVhdGVkJ30gPSAnT3BwcmV0dGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FjY2VwdGVkJ30gPSAnQWtzZXB0ZXJ0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlYWR5J30gPSAnS2xhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZhbCd9ID0gJ0dvZGtqZW5uaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dvcmtvcmRlcid9ID0gJ0FyYmVpZHNvcmRyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiYWNrb3V0J30gPSAnUGxhbiBmb3IgZ2plbm9wcHJldHRpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZGVjaXNpb24nfSA9ICdCZXNsdXRuaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bpcid9ID0gJ1BJUiAoU2x1dHRldmFsdWVyaW5nKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyd9ID0gJ2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCd9ID0gJ2VyIGlra2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZW1wdHknfSA9ICdlciB0b20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbm90IGVtcHR5J30gPSAnZXIgaWtrZSB0b20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZ3JlYXRlciB0aGFuJ30gPSAnZXIgc3TDuHJyZSBlbm4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbGVzcyB0aGFuJ30gPSAnZXIgbWluZHJlIGVubic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBiZWZvcmUnfSA9ICdlciBmw7hyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGFmdGVyJ30gPSAnZXIgZXR0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY29udGFpbnMnfSA9ICdpbm5laG9sZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBjb250YWlucyd9ID0gJ2lubmVob2xkZXIgaWtrZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiZWdpbnMgd2l0aCd9ID0gJ3N0YXJ0ZXIgbWVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2VuZHMgd2l0aCd9ID0gJ3NsdXR0ZXIgbWVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3NldCd9ID0gJ3NhdHQnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2YgdGhlIGFnZW50cyB3aG8gaGF2ZSBwZXJtaXNzaW9uIHRvIHRha2Ugd29ya29yZGVycy4gS2V5IGlzIGEgbG9naW4gbmFtZS4gQ29udGVudCBpcyAwIG9yIDEuJ30gPQogICAgICAgICdMaXN0ZSBvdmVyIHNha3NiZWhhbmRsZXJlIHNvbSBoYXIgdGlsZ2FuZyB0aWwgw6UgdGEgYXJiZWlkc29yZHJlLiBJbm5ob2xkZXQgZXIgMCBlbGxlciAxLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2Ygd29ya29yZGVyIHN0YXRlcywgYXQgd2hpY2ggdGhlIEFjdHVhbFN0YXJ0VGltZSBvZiBhIHdvcmtvcmRlciB3aWxsIGJlIHNldCBpZiBpdCB3YXMgZW1wdHkgYXQgdGhpcyBwb2ludC4nfSA9CiAgICAgICAgJ0xpc3RlIG92ZXIgYXJiZWlkc29yZHJldGlsc3RhbmRlciBzb20gdmlsIHV0bMO4c2UgYXQgZmFrdGlzayBzdGFydHRpZCBibGlyIHNhdHQgKGh2aXMgdG9tIGZyYSBmw7hyKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlcid9ID0gJ0xlZ2cgdGlsIEFyYmVpZG9yZHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgKGZyb20gVGVtcGxhdGUpJ30gPSAnTGVnZyB0aWwgYXJiZWlkb3JkcmUgKGZyYSBtYWwpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIGNoYW5nZSBmcm9tIHRlbXBsYXRlLid9ID0gJ0xlZ2cgdGlsIGVuIGVuZHJpbmcgZnJhIG1hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgY2hhbmdlLid9ID0gJ0xlZ2cgdGlsIGVuIGVuZHJpbmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciAoZnJvbSB0ZW1wbGF0ZSkgdG8gdGhlIGNoYW5nZS4nfSA9ICdMZWdnIGVuIGFyYmVpZHNvcmRyZSAoZnJhIG1hbCkgdGlsIGVuZHJpbmdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIHRvIHRoZSBjaGFuZ2UuJ30gPSAnTGVnZyBlbiBhcmJlaWRzb3JkcmUgdGlsIGVuZHJpbmdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGZyb20gdGVtcGxhdGUnfSA9ICdMZWdnIHRpbCBmcmEgbWFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIHRoZSBDSVAgbWF0cml4Lid9ID0gJ0FkbWluaXN0cmFzam9uIGF2IENJUC1tYXRyaXNlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gb2YgdGhlIHN0YXRlIG1hY2hpbmUuJ30gPSAnQWRtaW5pc3RyYXNqb24gYXYgdGlsc3RhbmRzZW5kcmluZ2VyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2UgYWR2aXNvcnkgYm9hcmRzLid9ID0KICAgICAgICAnU2Frc2JlaGFuZGxlcm1vZHVsIHNvbSB2aXNlciBhbnRhbGxldCBlbmRyaW5nc3LDpWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgbWFuYWdlZCBieSB0aGUgdXNlci4nfSA9CiAgICAgICAgJ1Nha3NiZWhhbmRsZXJtb2R1bCBzb20gdmlzZXIgYW50YWxsZXQgZW5kcmluZ2VyIHN0eXJ0IGF2IGJydWtlcmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzLid9ID0KICAgICAgICAnU2Frc2JlaGFuZGxlcm1vZHVsIHNvbSB2aXNlciBhbnRhbGxldCBlbmRyaW5nZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIE1lbWJlciBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgY2hhbmdlIG1hbmFnZW1lbnQgdG9vbGJhcnMuIERlZmF1bHQ6IDMgaG91cnMgKDE4MCBtaW51dGVzKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudC4gRGVmYXVsdDogNSBkYXlzICg3MjAwIG1pbnV0ZXMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBDQUIgVGVtcGxhdGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW52b2x2ZWQgUGVyc29ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZSd9ID0gJ0VuZHJlIHRpZHNwbGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhbmQgV29ya29yZGVyIFRlbXBsYXRlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIHdvcmtvcmRlciB0ZW1wbGF0ZXMgZWRpdGVkIGJ5IHRoaXMgdXNlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFyZWEuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBpbnZvbHZlZCBwZXJzb25zIG9mIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBsaW1pdCBwZXIgcGFnZSBmb3IgQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIEVkaXQnfSA9ICdFbmRyZSBGb3J1dHNldG5pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIE92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyZSB3aGljaCBzY3JlZW4gc2hvdWxkIGJlIHNob3duIGFmdGVyIGEgbmV3IHdvcmtvcmRlciBoYXMgYmVlbiBjcmVhdGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyZXMgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IHdoZW4gcGxhbm5lZCB0aGUgc3RhcnQgdGltZSBvciBvdGhlciB0aW1lIHZhbHVlcyBoYXZlIGJlZW4gcmVhY2hlZC9wYXNzZWQuJ30gPQogICAgICAgICdTZXR0ZXIgb3BwIGh2b3Igb2Z0ZSBtZWxkaW5nZXIgYmxpciBzZW5kdCB1dCBuw6VyIHBsYW5sYWd0IHN0YXJ0dGlkIGVsbGVyIGFuZHJlIHRpZHNwdW5rdGVyIG7DpXMgZWxsZXIgcGFzc2VyZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSd9ID0gJ09wcHJldHQgRW5kcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgQ2hhbmdlIChmcm9tIFRlbXBsYXRlKSd9ID0gJ09wcHJldHQgZW4gZW5kcmluZyAoZnJhIG1hbCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgY2hhbmdlIChmcm9tIHRlbXBsYXRlKSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJ09wcHJldHQgZW4gZW5kcmluZyAoZnJhIG1hbCkgZnJhIGRlbm5lIHNha2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4nfSA9ICdPcHByZXR0IGVuIEVuZHJpbmcgZnJhIGRlbm5lIHNha2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBJVFNNIENoYW5nZSBNYW5hZ2VtZW50IG5vdGlmaWNhdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdHlwZSBmb3IgYSB3b3Jrb3JkZXIuIFRoaXMgZW50cnkgbXVzdCBleGlzdCBpbiBnZW5lcmFsIGNhdGFsb2cgY2xhc3MgXCdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpXb3JrT3JkZXI6OlR5cGVcJy4nfSA9CiAgICAgICAgJ0ZvcnZhbGd0IHR5cGUgZm9yIGVuIGFyYmVpZHNvcmRyZS4gRGVubmUgdmVyZGllbiBtw6UgZmlubmVzIGkgZ2VuZXJlbGwga2F0YWxvZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIHNpZ25hbHMgZm9yIGVhY2ggd29ya29yZGVyIHN0YXRlLid9ID0gJ1NldHQgb3BwIHNpZ25hbGVyIGZvciBodmVyIGFyYmVpZHNvcmRyZXRpbHN0YW5kLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBDaGFuZ2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IENoYW5nZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBXb3Jrb3JkZXIgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgV29ya29yZGVyIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjaGFuZ2UgbGlzdC4nfSA9CiAgICAgICAgJ1NldHRlciBvcHAgZW4gb3ZlcnNpa3RzbW9kdWwgdGlsIMOlIHZpc2UgIkxpdGVuIiB2aXNuaW5nIGF2IGVuZHJpbmdzbGlzdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgdGVtcGxhdGUgbGlzdC4nfSA9CiAgICAgICAgJ1NldHRlciBvcHAgZW4gb3ZlcnNpa3RzbW9kdWwgdGlsIMOlIHZpc2UgIkxpdGVuIiB2aXNuaW5nIGF2IG1hbC1saXN0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBhY2NvdW50ZWQgdGltZS4nfSA9ICdTcGVzaWZpc2VyZXIgb20gZGV0IGVyIG11bGlnIMOlIHNrcml2ZSB1dCBrb250ZXJ0IHRpZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBwbGFubmVkIGVmZm9ydC4nfSA9ICdTcGVzaWZpc2VyZXIgb20gZGV0IGVyIG11bGlnIMOlIHNrcml2ZSB1dCBwbGFubGFndCBpbm5zYXRzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgY2hhbmdlIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSBjaGFuZ2UgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiByZWFjaGFibGUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUpIHdvcmtvcmRlciBlbmQgc3RhdGVzIHNob3VsZCBiZSBhbGxvd2VkIGlmIGEgd29ya29yZGVyIGlzIGluIGEgbG9ja2VkIHN0YXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGFjY291bnRlZCB0aW1lIHNob3VsZCBiZSBzaG93bi4nfSA9ICdTcGVzaWZpc2VyZXIgb20gdGlkc2tvbnRlcmluZyBza2FsIHZpc2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBzaG91bGQgYmUgc2V0Lid9ID0gJ1NwZXNpZmlzZXJlciBvbSBmYWt0aXNrIHN0YXJ0LSBvZyBzbHV0dGlkIGLDuHIgc2V0dGVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBjaGFuZ2Ugc2VhcmNoIGFuZCB0aGUgd29ya29yZGVyIHNlYXJjaCBmdW5jdGlvbnMgY291bGQgdXNlIHRoZSBtaXJyb3IgREIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHN0YXRlIGNhbiBiZSBzZXQgaW4gQWdlbnRJVFNNQ2hhbmdlRWRpdC4nfSA9CiAgICAgICAgJ1NwZXNpZmlzZXJlciBvbSBFbmRyaW5nc3RpbHN0YW5kIGthbiBzZXR0ZXMgaSAiRW5kcmUgRW5kcmluZyInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcGxhbm5lZCBlZmZvcnQgc2hvdWxkIGJlIHNob3duLid9ID0gJ1NwZXNpZmlzZXJlciBvbSBwbGFubGFndCBpbm5zYXRzIHNrYWwgdmlzZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBwcmludCBieSBjdXN0b21lci4nfSA9ICdTcGVzaWZpc2VyZXIgb20gZm9yZXNwdXJ0IGRhdG8gc2thbCBrdW5uZSBza3JpdmVzIHV0IGF2IGt1bmRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2VhcmNoZWQgYnkgY3VzdG9tZXIuJ30gPQogICAgICAgICdTcGVzaWZpc2VyZXIgb20gZm9yZXNwdXJ0IGRhdG8gc2thbCB2w6ZyZSBzw7hrYmFyIGF2IGt1bmRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2V0IGJ5IGN1c3RvbWVyLid9ID0gJ1NwZXNpZmlzZXJlciBvbSBmb3Jlc3B1cnQgZGF0byBza2FsIGt1bm5lIHNldHRlcyBhdiBrdW5kZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzaG93biBieSBjdXN0b21lci4nfSA9ICdTcGVzaWZpc2VyZXIgb20gZm9yZXNwdXJ0IGRhdG8gc2thbCB2aXNlcyB0aWwga3VuZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSB3b3Jrb3JkZXIgc3RhdGUgc2hvdWxkIGJlIHNob3duLid9ID0gJ1NwZXNpZmlzZXJlciBvbSBhcmJlaWRzb3JkcmVucyB0aWxzdGFuZCBza2FsIHZpc2VzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSB3b3Jrb3JkZXIgdGl0bGUgc2hvdWxkIGJlIHNob3duLid9ID0gJ1NwZXNpZmlzZXJlciBvbSBhcmJlaWRzb3JkcmVucyB0aXR0ZWwgc2thbCB2aXNlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBzaG93biBncmFwaCBhdHRyaWJ1dGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoYXQgb25seSBjaGFuZ2VzIGNvbnRhaW5pbmcgV29ya29yZGVycyBsaW5rZWQgd2l0aCBzZXJ2aWNlcywgd2hpY2ggdGhlIGN1c3RvbWVyIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gdXNlIHdpbGwgYmUgc2hvd24uIEFueSBvdGhlciBjaGFuZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJ1NwZXNpZmlzZXJlciBhdCBrdW4gRW5kcmluZ2VyIHNvbSBpbm5laG9sZGVyIEFyYmVpZHNvcmRyZSBzb20gZXIga29ibGV0IHRpbCBUamVuZXN0ZXIgc29tIGt1bmRlbiBoYXIgdGlsZ2FuZyB0aWwgw6UgYnJ1a2Ugc2thbCB2aXNlcy4gQWxsZSBhbmRyZSBlbmRyaW5nZXIgdmlsIGlra2UgYmxpIHZpc3RlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSBhbGxvd2VkIHRvIGRlbGV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnU3Blc2lmaXNlcmVyIEVuZHJpbmdzdGlsc3RhbmRlciBzb20ga2FuIGJydWtlcyBzb20gZmlsdHJlIGkgb3ZlcnNpa3RlbiBvdmVyIEZvcnZlbnRldCBUaWxnamVuZ2VsaWdoZXQgKFBTQSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgU2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdTcGVzaWZpc2VyZXIgRW5kcmluZ3N0aWxzdGFuZGVyIHNvbSBrYW4gYnJ1a2VzIHNvbSBmaWx0cmUgaSBFbmRyaW5nc3BsYW4tb3ZlcnNpa3Rlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnU3Blc2lmaXNlcmVyIEVuZHJpbmdzdGlsc3RhbmRlciBzb20ga2FuIGJydWtlcyBzb20gZmlsdHJlIGkgIk1pbmUgRW5kcmluZ3Nyw6VkIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9CiAgICAgICAgJ1NwZXNpZmlzZXJlciBFbmRyaW5nc3RpbHN0YW5kZXIgc29tIGthbiBicnVrZXMgc29tIGZpbHRyZSBpICJNaW5lIEVuZHJpbmdlciInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ1NwZXNpZmlzZXJlciBFbmRyaW5nc3RpbHN0YW5kZXIgc29tIGthbiBicnVrZXMgc29tIGZpbHRyZSBpIEVuZHJpbmdzYW5zdmFybGlnLW92ZXJzaWt0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICdTcGVzaWZpc2VyZXIgRW5kcmluZ3N0aWxzdGFuZGVyIHNvbSBrYW4gYnJ1a2VzIHNvbSBmaWx0cmUgaSBFbmRyaW5nc292ZXJzaWt0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdTcGVzaWZpc2VyZXIgRW5kcmluZ3N0aWxzdGFuZGVyIHNvbSBrYW4gYnJ1a2VzIHNvbSBmaWx0cmUgaSBrdW5kZW5zIEVuZHJpbmdzcGxhbi1vdmVyc2lrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGNoYW5nZSB0aXRsZSBmb3IgYSBkdW1teSBjaGFuZ2Ugd2hpY2ggaXMgbmVlZGVkIHRvIGVkaXQgYSB3b3Jrb3JkZXIgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lcmVyIHN0YW5kYXJkIHNvcnRlcmluZ3Nrcml0ZXJpZXIgZm9yIEZvcnZlbnRldCBUaWxnamVuZ2VsaWdoZXQgKFBTQSktb3ZlcnNpa3Rlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZXJlciBzdGFuZGFyZCBzb3J0ZXJpbmdza3JpdGVyaWVyIGZvciBlbmRyaW5nc2Fuc3ZhcmxpZy1vdmVyc2lrdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0gJ0RlZmluZXJlciBzdGFuZGFyZCBzb3J0ZXJpbmdza3JpdGVyaWVyIGZvciBFbmRyaW5nc292ZXJzaWt0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVyZXIgc3RhbmRhcmQgc29ydGVyaW5nc2tyaXRlcmllciBmb3IgRW5kcmluZ3NwbGFuLW92ZXJzaWt0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZXJlciBzdGFuZGFyZCBzb3J0ZXJpbmdza3JpdGVyaWVyIGZvciAiTWluZSBFbmRyaW5nc3LDpWQiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lcmVyIHN0YW5kYXJkIHNvcnRlcmluZ3Nrcml0ZXJpZXIgZm9yICJNaW5lIEVuZHJpbmdlciInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVyZXIgc3RhbmRhcmQgc29ydGVyaW5nc2tyaXRlcmllciBmb3IgIk1pbmUgQXJiZWlkc29yZHJlIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZXJlciBzdGFuZGFyZCBzb3J0ZXJpbmdza3JpdGVyaWVyIGZvciBTbHV0dGV2YWx1ZXJpbmdzb3ZlcnNpa3Rlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZXJlciBzdGFuZGFyZCBzb3J0ZXJpbmdza3JpdGVyaWVyIGZvciBFbmRyaW5nc3BsYW4tb3ZlcnNpa3RlbiBmb3Iga3VuZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVyZXIgc3RhbmRhcmQgc29ydGVyaW5nc2tyaXRlcmllciBmb3IgbWFsLW92ZXJzaWt0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9ICdEZWZpbmVyZXIgc3RhbmRhcmQgc29ydGVyaW5nc3Jla2tlZsO4bGdlIGZvciAiTWluZSBFbmRyaW5nc3LDpWQiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0gJ0RlZmluZXJlciBzdGFuZGFyZCBzb3J0ZXJpbmdzcmVra2Vmw7hsZ2UgZm9yICJNaW5lIEVuZHJpbmdlciInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVyZXIgc3RhbmRhcmQgc29ydGVyaW5nc3Jla2tlZsO4bGdlIGZvciAiTWluZSBBcmJlaWRzb3JkcmUiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0gJ0RlZmluZXJlciBzdGFuZGFyZCBzb3J0ZXJpbmdzcmVra2Vmw7hsZ2UgZm9yIFNsdXR0ZXZhbHVlcmluZy1vdmVyc2lrdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9ICdEZWZpbmVyZXIgc3RhbmRhcmQgc29ydGVyaW5nc3Jla2tlZsO4bGdlIGZvciBGb3J2ZW50ZXQgVGlsZ2plbmdlbGlnaGV0IChQU0EpLW92ZXJzaWt0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZXJlciBzdGFuZGFyZCBzb3J0ZXJpbmdzcmVra2Vmw7hsZ2UgZm9yIEVuZHJpbmdzYW5zdmFybGlnLW92ZXJzaWt0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAnRGVmaW5lcmVyIHN0YW5kYXJkIHNvcnRlcmluZ3NyZWtrZWbDuGxnZSBmb3IgRW5kcmluZ3NvdmVyc2lrdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lcmVyIHN0YW5kYXJkIHNvcnRlcmluZ3NyZWtrZWbDuGxnZSBmb3IgRW5kcmluZ3NwbGFuLW92ZXJzaWt0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmVyZXIgc3RhbmRhcmQgc29ydGVyaW5nc3Jla2tlZsO4bGdlIGZvciBFbmRyaW5nc3BsYW4tb3ZlcnNpa3RlbiBmb3Iga3VuZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPSAnRGVmaW5lcmVyIHN0YW5kYXJkIHNvcnRlcmluZ3NyZWtrZWbDuGxnZSBmb3IgbWFsLW92ZXJzaWt0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNhdGVnb3J5IG9mIGEgY2hhbmdlLid9ID0gJ0RlZmluZXJlciBmb3J2YWxndCBrYXRlZ29yaSBmb3IgZW4gRW5kcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW1wYWN0IG9mIGEgY2hhbmdlLid9ID0gJ0RlZmluZXJlciBlbiBmb3J2YWxndCB2ZXJkaSBmb3Igb21mYW5nZXQgdGlsIGVuIEVuZHJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciBjaGFuZ2UgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmaWVsZCB0eXBlIG9mIENvbXBhcmVWYWx1ZSBmaWVsZHMgZm9yIHdvcmtvcmRlciBhdHRyaWJ1dGVzIHVzZWQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gVmFsaWQgdmFsdWVzIGFyZSBTZWxlY3Rpb24sIFRleHQgYW5kIERhdGUuIElmIGEgdHlwZSBpcyBub3QgZGVmaW5lZCwgdGhlIGZpZWxkIHdpbGwgbm90IGJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9iamVjdCBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIGNoYW5nZSBvYmplY3RzIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY2NvdW50ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENhdGVnb3J5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VCdWlsZGVySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VNYW5hZ2VySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBEeW5hbWljRmllbGQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBJbXBhY3RJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFZmZvcnQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQcmlvcml0eUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUmVxdWVzdGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlckFnZW50SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJOdW1iZXIgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUeXBlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwZXJpb2QgKGluIHllYXJzKSwgaW4gd2hpY2ggc3RhcnQgYW5kIGVuZCB0aW1lcyBjYW4gYmUgc2VsZWN0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gYXR0cmlidXRlcyBvZiBhIHdvcmtvcmRlciBpbiB0aGUgdG9vbHRpcCBvZiB0aGUgd29ya29yZGVyIGdyYXBoIGluIHRoZSBjaGFuZ2Ugem9vbS4gVG8gc2hvdyB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMgaW4gdGhlIHRvb2x0aXAsIHRoZXkgbXVzdCBiZSBzcGVjaWZpZWQgbGlrZSBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMSwgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTIsIGV0Yy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNBQiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIFBJUiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2lnbmFscyBmb3IgZWFjaCBJVFNNQ2hhbmdlIHN0YXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0ZW1wbGF0ZSB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc2hvdyB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciBub3RpZmljYXRpb25zIHNob3VsZCBiZSBzZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgYSBjaGFuZ2UuJ30gPSAnU2xldHQgZW4gZW5kcmluZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoZSBjaGFuZ2UuJ30gPSAnU2xldHQgZW5kcmluZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhlIHdvcmtvcmRlci4nfSA9ICdTbGV0dCBhcmJlaWRzb3JkcmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzIG9mIGEgY2hhbmdlIGhpc3RvcnkgZW50cnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgYW4gYWdlbnQgY2FuIGV4Y2hhbmdlIHRoZSBYLWF4aXMgb2YgYSBzdGF0IGlmIGhlIGdlbmVyYXRlcyBvbmUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyBkb25lIGZvciBjb25maWcgaXRlbSBjbGFzc2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIGNoYW5nZSBzdGF0ZSB1cGRhdGVzIHdpdGhpbiBhIHRpbWVwZXJpb2QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyByZWdhcmRpbmcgdGhlIHJlbGF0aW9uIGJldHdlZW4gY2hhbmdlcyBhbmQgaW5jaWRlbnQgdGlja2V0cy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IHRoZSBudW1iZXIgb2YgUmZjIHRpY2tldHMgYSByZXF1ZXN0ZXIgY3JlYXRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyAoZm9yIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMpIHNob3duIGluIHRoZSBjaGFuZ2UgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciByZXBvcnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljRmllbGQgZXZlbnQgbW9kdWxlIHRvIGhhbmRsZSB0aGUgdXBkYXRlIG9mIGNvbmRpdGlvbnMgaWYgZHluYW1pYyBmaWVsZHMgYXJlIGFkZGVkLCB1cGRhdGVkIG9yIGRlbGV0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBhIGNoYW5nZS4nfSA9ICdSZWRpZ2VyIGVuIGVuZHJpbmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIGNoYW5nZS4nfSA9ICdSZWRpZ2VyIGVuZHJpbmdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY2hhbmdlLid9ID0gJ0VuZHJlIGZvcnV0c2V0bmluZ2VuZSBmb3IgZGVubmUgZW5kcmluZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSB3b3Jrb3JkZXIuJ30gPSAnRW5kcmUgYXJiZWlkc29yZHJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9yd2FyZCBzY2hlZHVsZSBvZiBjaGFuZ2VzLiBPdmVydmlldyBvdmVyIGFwcHJvdmVkIGNoYW5nZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIENBQiBUZW1wbGF0ZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIENvbmRpdGlvbiBFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIE1hbmFnZW1lbnQgTm90aWZpY2F0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VyIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBQSVIgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIG5vdGlmaWNhdGlvbiBydWxlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZXMnfSA9ICdFbmRyaW5nZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeUNBQiBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeUNoYW5nZXMgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlXb3Jrb3JkZXJzIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIERlbGV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0IENBQi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0IENvbnRlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBjbGVhbnMgdXAgY29uZGl0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBjYWNoZSBmb3IgYSB0b29sYmFyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBtYXRjaGVzIGNvbmRpdGlvbnMgYW5kIGV4ZWN1dGVzIGFjdGlvbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBzZW5kcyBub3RpZmljYXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNvbmRpdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byByZWNhbGN1bGF0ZSB0aGUgd29ya29yZGVyIG51bWJlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRvIHNldCB0aGUgYWN0dWFsIHN0YXJ0IGFuZCBlbmQgdGltZXMgb2Ygd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNQ2hhbmdlJ30gPSAnRW5kcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNV29ya09yZGVyJ30gPSAnQXJiZWlkc29yZHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGZyZXF1ZW5jeSBpcyBcJ3JlZ3VsYXJseVwnLCB5b3UgY2FuIGNvbmZpZ3VyZSBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgKGV2ZXJ5IFggaG91cnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2dmaWxlIGZvciB0aGUgSVRTTSBjaGFuZ2UgY291bnRlci4gVGhpcyBmaWxlIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjaGFuZ2UgbnVtYmVycy4nfSA9CiAgICAgICAgJ0xvZ2dmaWwgZm9yIElUU00gRW5kcmluZ3N0ZWxsZXIuIERlbm5lIGZpbGVuIGJydWtlcyBmb3Igw6Ugb3BwcmV0dCBlbmRyaW5nc251bXJlbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIENBQiBtZW1iZXJzIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIGFnZW50cywgdXNlZCBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayBpZiBXb3JrT3JkZXJBZGQgb3IgV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlIHNob3VsZCBiZSBwZXJtaXR0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBDQUIgbWVtYmVycy4nfSA9ICdNb2R1bCBmb3Igw6Ugc2pla2tlIENBQi1tZWRsZW1tZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgYWdlbnQuJ30gPSAnTW9kdWwgZm9yIMOlIHNqZWtrZSBzYWtzYmVoYW5kbGVyZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIGJ1aWxkZXIuJ30gPSAnTW9kdWwgZm9yIMOlIHNqZWtrZSBkZW4gc29tIG9wcHJldHRldCBFbmRyaW5nZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPSAnTW9kdWwgZm9yIMOlIHNqZWtrZSBFbmRyaW5nc2Fuc3ZhcmxpZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnTW9kdWwgZm9yIMOlIHNqZWtrZSBzYWtzYmVoYW5kbGVyIGZvciBlbiBhcmJlaWRzb3JkcmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIG5vIHdvcmtvcmRlciBhZ2VudCBpcyBzZXQuJ30gPSAnTW9kdWwgZm9yIMOlIHNqZWtrIG9tIGluZ2VuIHNha3NiZWhhbmRsZXIgZXIgc2F0dCBmb3IgYXJiZWlkc29yZHJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGFnZW50IGlzIGNvbnRhaW5lZCBpbiB0aGUgY29uZmlndXJlZCBsaXN0Lid9ID0KICAgICAgICAnTW9kdWwgc29tIHNqZWtrZXIgb20gc2Frc2JlaGFuZGxlcmVuIGJlZmlubmVyIHNlZyBpIGRlbiBrb25maWd1cmVydGUgbGlzdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBhIGxpbmsgdG8gY3JlYXRlIGEgY2hhbmdlIGZyb20gdGhpcyB0aWNrZXQuIFRoZSB0aWNrZXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGxpbmtlZCB3aXRoIHRoZSBuZXcgY2hhbmdlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90Lid9ID0gJ0ZseXR0IHRpZHNyb21tZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgYWxsIHdvcmtvcmRlcnMgaW4gdGltZS4nfSA9ICdGbHl0dCBhbGxlIGFyYmVpZHNvcmRyZSBpIHRpZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IChmcm9tIHRlbXBsYXRlKSd9ID0gJ055IChmcmEgbWFsKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IHVzZXJzIG9mIHRoZXNlIGdyb3VwcyBoYXZlIHRoZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdGlja2V0IHR5cGVzIGFzIGRlZmluZWQgaW4gIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIgaWYgdGhlIGZlYXR1cmUgIlRpY2tldDo6QWNsOjpNb2R1bGUjIyMyMDAtVGlja2V0OjpBY2w6Ok1vZHVsZSIgaXMgZW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIGFsbCBDaGFuZ2VzLid9ID0gJ092ZXJzaWt0IG92ZXIgYWxsZSBlbmRyaW5nZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BJUid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KSd9ID0gJ1BJUiAoU2x1dHRldmFsdWVyaW5nKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQU0EnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIFVzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFzayBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNoYW5nZXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgY2hhbmdlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXNlbnRzIGEgbGluayBpbiB0aGUgbWVudSB0byBzaG93IHRoZSBpbnZvbHZlZCBwZXJzb25zIGluIGEgY2hhbmdlLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggY2hhbmdlIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIGNoYW5nZS4nfSA9ICdTa3JpdiB1dCBlbmRyaW5nZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoZSB3b3Jrb3JkZXIuJ30gPSAnU2tyaXYgdXQgYXJiZWlkc29yZHJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5J30gPSAnRm9ydmVudGV0IHRqZW5lc3RldGlsZ2plbmdlbGlnaGV0IChQU0EpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSAoUFNBKSd9ID0gJ0ZvcnZlbnRldCB0amVuZXN0ZXRpbGdqZW5nZWxpZ2hldCAoUFNBKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHkgKFBTQSkgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb2YgYXBwcm92ZWQgY2hhbmdlcyBhbmQgdGhlaXIgc2VydmljZXMuJ30gPQogICAgICAgICdGb3J2ZW50ZXQgdGplbmVzdGV0aWxnamVuZ2VsaWdoZXQgKFBTQSkgYXYgZW5kcmluZ2VyLiBPdmVyc2lrdCBvdmVyIGdvZGtqZW50ZSBlbmRyaW5nZXIgbWVkIHRpbGjDuHJlbmRlIHRqZW5lc3Rlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyBpbiBvcmRlciBmb3IgYW4gYWdlbnQgdG8gdGFrZSBhIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJ1JldHRpZ2hldGVyIHNvbSBrcmV2ZXMgZm9yIGF0IGVuIHNha3NiZWhhbmRsZXIgc2thbCBrdW5uZSB0YSBlbiBhcmJlaWRzb3JkcmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWNjZXNzIHRoZSBvdmVydmlldyBvZiBhbGwgY2hhbmdlcy4nfSA9ICdSZXR0aWdoZXRlciBzb20ga3JldmVzIGZvciDDpSBzZSBvdmVyc2lrdCBvdmVyIGFsbGUgZW5kcmluZ2VyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGFkZCBhIHdvcmtvcmRlci4nfSA9ICdSZXR0aWdoZXRlciBzb20ga3JldmVzIGZvciDDpSBvcHByZXR0ZSBlbiBhcmJlaWRzb3JkcmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY2hhbmdlIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6UgZW5kcmUgc2Frc2JlaGFuZGxlciBww6UgZW4gYXJiZWlkc29yZHJlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSBjaGFuZ2UuJ30gPSAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6Ugb3BwcmV0dCBlbiBtYWwgZnJhIGVuIGVuZHJpbmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZXNcJyBDQUIuJ30gPQogICAgICAgICdSZXR0aWdoZXRlciBzb20ga3JldmVzIGZvciDDpSBvcHByZXR0ZSBlbiBtYWwgZnJhIGVuIGVuZHJpbmdzIGVuZHJpbmdzcsOlZCAoQ0FCKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgd29ya29yZGVyLid9ID0gJ1JldHRpZ2hldGVyIHNvbSBrcmV2ZXMgZm9yIMOlIG9wcHJldHQgZW4gbWFsIGZyYSBlbiBhcmJlaWRzb3JkcmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMgZnJvbSB0ZW1wbGF0ZXMuJ30gPSAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6Ugb3BwcmV0dGUgZW5kcmluZ2VyIGZyYSBtYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMuJ30gPSAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6Ugb3BwcmV0dGUgZW5kcmluZ2VyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHRlbXBsYXRlLid9ID0gJ1JldHRpZ2h0ZXIgc29tIGtyZXZlcyBmb3Igw6Ugc2xldHRlIGVuIG1hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgYSB3b3Jrb3JkZXIuJ30gPSAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6Ugc2xldHRlIGVuIGFyYmVpZHNvcmRyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY2hhbmdlcy4nfSA9ICdSZXR0aWdoZXRlciBzb20ga3JldmVzIGZvciDDpSBzbGV0dGUgZW5kcmluZ2VyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgYSB0ZW1wbGF0ZS4nfSA9ICdSZXR0aWdoZXRlciBzb20ga3JldmVzIGZvciDDpSByZWRpZ2VyZSBlbiBtYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHdvcmtvcmRlci4nfSA9ICdSZXR0aWdoZXRlciBzb20ga3JldmVzIGZvciDDpSByZWRpZ2VyZSBlbiBhcmJlaWRzb3JkcmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBjaGFuZ2VzLid9ID0gJ1JldHRpZ2hldGVyIHNvbSBrcmV2ZXMgZm9yIMOlIHJlZGlnZXJlIGVuZHJpbmdlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6UgZW5kcmUgZm9ydXRzZXRuaW5nZXIgZm9yIGVuIGVuZHJpbmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29udGVudCBvZiBhIHRlbXBsYXRlLid9ID0gJ1JldHRpZ2hldGVyIHNvbSBrcmV2ZXMgZm9yIMOlIHJlZGlnZXJlIGlubmhvbGRldCBpIGVuIG1hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBpbnZvbHZlZCBwZXJzb25zIG9mIGEgY2hhbmdlLid9ID0KICAgICAgICAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6UgZW5kcmUgaW52b2x2ZXJ0ZSBwZXJzb25lciBpIGVuIGVuZHJpbmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gbW92ZSBjaGFuZ2VzIGluIHRpbWUuJ30gPSAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6UgZmx5dHRlIGVuZHJpbmdlciBpIHRpZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBwcmludCBhIGNoYW5nZS4nfSA9ICdSZXR0aWdoZXRlciBzb20ga3JldmVzIGZvciDDpSBza3JpdmUgdXQgZW4gZW5kcmluZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byByZXNldCBjaGFuZ2VzLid9ID0gJ1JldHRpZ2hldGVyIHNvbSBrcmV2ZXMgZm9yIMOlIHRpbGJha2VzdGlsbGUgZW5kcmluZ2VyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgYSB3b3Jrb3JkZXIuJ30gPSAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6Ugc2UgZW4gYXJiZWlkc29yZHJlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgY2hhbmdlcy4nfSA9ICdSZXR0aWdoZXRlciBzb20ga3JldmVzIGZvciDDpSBzZSBlbmRyaW5nZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBsaXN0IG9mIGNoYW5nZXMgd2hlcmUgdGhlIHVzZXIgaXMgYSBDQUIgbWVtYmVyLid9ID0KICAgICAgICAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6Ugc2UgbGlzdGVuIG92ZXIgZW5kcmluZ2VyIGRlciBicnVrZXJlbiBlciBtZWRsZW0gYXYgQ0FCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIHRoZSBjaGFuZ2UgbWFuYWdlci4nfSA9CiAgICAgICAgJ1JldHRpZ2hldGVyIHNvbSBrcmV2ZXMgZm9yIMOlIHNlIGxpc3RlbiBvdmVyIGVuZHJpbmdlciBkZXIgYnJ1a2VyZW4gZXIgZW5kcmluZ3NhbnN2YXJsaWcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBvdmVydmlldyBvdmVyIGFsbCB0ZW1wbGF0ZXMuJ30gPSAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6Ugc2Ugb3ZlcnNpa3RlbiBvdmVyIGFsbGUgbWFsZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJ1JldHRpZ2hldGVyIHNvbSBrcmV2ZXMgZm9yIMOlIHNlIGZvcnV0c2V0bmluZ2VuZSB0aWwgZW5kcmluZ2VyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UuJ30gPSAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6Ugc2UgaGlzdG9yaWtrZW4gdGlsIGVuIGVuZHJpbmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlci4nfSA9ICdSZXR0aWdoZXRlciBzb20ga3JldmVzIGZvciDDpSBzZSBoaXN0b3Jpa2tlbiB0aWwgZW4gYXJiZWlkc29yZHJlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgem9vbSBvZiBhIGNoYW5nZS4nfSA9ICdSZXR0aWdoZXRlciBzb20ga3JldmVzIGZvciDDpSBzZSBkZXRhbGplcnQgaGlzdG9yaWtrIGZvciBlbiBlbmRyaW5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgem9vbSBvZiBhIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJ1JldHRpZ2hldGVyIHNvbSBrcmV2ZXMgZm9yIMOlIHNlIGRldGFsamVydCBoaXN0b3Jpa2sgZm9yIGVuIGFyYmVpZHNvcmRyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIENoYW5nZSBTY2hlZHVsZS4nfSA9ICdSZXR0aWdoZXRlciBzb20ga3JldmVzIGZvciDDpSBzZSBsaXN0ZW4gb3ZlciBlbmRyaW5nc3BsYW5lci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIGNoYW5nZSBQU0EuJ30gPSAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6Ugc2UgbGlzdGVuIG92ZXIgZW5kcmluZ2VycyBmb3J2ZW50ZWRlIHRqZW5lc3RldGlsZ2plbmdlbGlnaGV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlcyB3aXRoIGFuIHVwY29taW5nIFBJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpLid9ID0KICAgICAgICAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6Ugc2UgbGlzdGVuIG92ZXIgZW5kcmluZ2VyIG1lZCBrb21tZW5kZSBzbHV0dGV2YWx1ZXJpbmdlciAoUElSKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biBjaGFuZ2VzLid9ID0gJ1JldHRpZ2hldGVyIHNvbSBrcmV2ZXMgZm9yIMOlIHNlIGxpc3RlbiBvdmVyIGVnbmUgZW5kcmluZ2VyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIHdvcmtvcmRlcnMuJ30gPSAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6Ugc2UgbGlzdGVuIG92ZXIgZWduZSBhcmJlaWRzb3JkcmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gd3JpdGUgYSByZXBvcnQgZm9yIHRoZSB3b3Jrb3JkZXIuJ30gPSAnUmV0dGlnaGV0ZXIgc29tIGtyZXZlcyBmb3Igw6Ugc2tyaXZlIGVuIHJhcHBvcnQgZm9yIGFyYmVpZHNvcmRyZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICdUaWxiYWtlc3RpbGwgZW4gZW5kcmluZyBtZWQgdGlsaMO4cmVuZGUgYXJiZWlkc29yZHJlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzLid9ID0gJ1RpbGJha2VzdGlsbCBlbmRyaW5nZW4gbWVkIHRpbGjDuHJlbmRlIGFyYmVpZHNvcmRyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIHRhc2sgdG8gY2hlY2sgaWYgc3BlY2lmaWMgdGltZXMgaGF2ZSBiZWVuIHJlYWNoZWQgaW4gY2hhbmdlcyBhbmQgd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIGNoYW5nZSBhcyBhIHRlbXBsYXRlLid9ID0gJ0xhZ3JlIEVuZHJpbmcgc29tIG1hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSB3b3Jrb3JkZXIgYXMgYSB0ZW1wbGF0ZS4nfSA9ICdMYWdyZSBBcmJlaWRzb3JkcmUgc29tIG1hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2NoZWR1bGUnfSA9ICdUaWRzcGxhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY3JlZW4gYWZ0ZXIgY3JlYXRpbmcgYSB3b3Jrb3JkZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMnfSA9ICdTw7hrIGkgRW5kcmluZ2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDaGFuZ2VzLid9ID0gJ1PDuGsgaSBFbmRyaW5nZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNoYW5nZSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNoYW5nZSBudW1iZXIsIHRoZSBTeXN0ZW1JRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQgd2l0aCBTeXN0ZW1JRC5jb3VudGVyIGZvcm1hdCAoZS5nLiAxMDAxMTgsIDEwMDExOSkuIFdpdGggIkRhdGUiLCB0aGUgY2hhbmdlIG51bWJlcnMgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgYSBjb3VudGVyOyB0aGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LmNvdW50ZXIsIGUuZy4gMjAxMDA2MjQwMDAwMSwgMjAxMDA2MjQwMDAwMi4gV2l0aCAiRGF0ZUNoZWNrc3VtIiwgdGhlIGNvdW50ZXIgd2lsbCBiZSBhcHBlbmRlZCBhcyBjaGVja3N1bSB0byB0aGUgc3RyaW5nIG9mIGRhdGUgcGx1cyB0aGUgU3lzdGVtSUQuIFRoZSBjaGVja3N1bSB3aWxsIGJlIHJvdGF0ZWQgb24gYSBkYWlseSBiYXNpcy4gVGhpcyBmb3JtYXQgbG9va3MgbGlrZSBZZWFyLk1vbnRoLkRheS5TeXN0ZW1JRC5Db3VudGVyLkNoZWNrU3VtLCBlLmcuIDIwMTAwNjI0MTAwMDAwMTcsIDIwMTAwNjI0MTAwMDAwMjYuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBhZ2VudCBmb3IgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRJVFNNQ2hhbmdlWm9vbSBhbmQgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIG1pbmltYWwgY2hhbmdlIGNvdW50ZXIgc2l6ZSAoaWYgIkF1dG9JbmNyZW1lbnQiIHdhcyBzZWxlY3RlZCBhcyBJVFNNQ2hhbmdlOjpOdW1iZXJHZW5lcmF0b3IpLiBEZWZhdWx0IGlzIDUsIHRoaXMgbWVhbnMgdGhlIGNvdW50ZXIgc3RhcnRzIGZyb20gMTAwMDAuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3IgY2hhbmdlcy4nfSA9ICdTZXR0ZXIgb3BwIHRpbHN0YW5kc2VuZHJpbmdlciBmb3IgRW5kcmluZ2VyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHVwIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciB3b3Jrb3JkZXJzLid9ID0gJ1NldHRlciBvcHAgdGlsc3RhbmRzZW5kcmluZ2VyIGZvciBBcmJlaWRzb3JkcmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgY2hlY2tib3ggaW4gdGhlIEFnZW50SVRTTVdvcmtPcmRlckVkaXQgc2NyZWVuIHRoYXQgZGVmaW5lcyBpZiB0aGUgdGhlIGZvbGxvd2luZyB3b3Jrb3JkZXJzIHNob3VsZCBhbHNvIGJlIG1vdmVkIGlmIGEgd29ya29yZGVyIGlzIG1vZGlmaWVkIGFuZCB0aGUgcGxhbm5lZCBlbmQgdGltZSBoYXMgY2hhbmdlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgY2hhbmdpbmcgdGhlIHdvcmtvcmRlciBhZ2VudCwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIGNoYW5nZSBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIGNoYW5nZSwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSB3b3Jrb3JkZXIgYXMgYSB0ZW1wbGF0ZSBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSB3b3Jrb3JkZXIsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGVkaXRpbmcgdGhlIHJlcG9ydCBvZiBhIHdvcmtvcmRlciwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY2hhbmdlIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIHdvcmtvcmRlciB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbW92aW5nIHRoZSB0aW1lIHNsb3Qgb2YgYSBjaGFuZ2UgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0YWtpbmcgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBjb25kaXRpb25zIG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWRkIGEgd29ya29yZGVyIGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIHdvcmtvcmRlciBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIHdvcmtvcmRlciB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcmVzZXQgYSBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY2hhbmdlIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0ZSBNYWNoaW5lJ30gPSAnVGlsc3RhbmRzZW5kcmluZ2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0b3JlcyBjaGFuZ2UgYW5kIHdvcmtvcmRlciBpZHMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgdGVtcGxhdGUgaWQsIHdoaWxlIGEgdXNlciBpcyBlZGl0aW5nIGEgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXInfSA9ICdUYSBhcmJlaWRzb3JkcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXIuJ30gPSAnVGEgYXJiZWlkc29yZHJlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnVGEgYXJiZWlkc29yZHJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgT3ZlcnZpZXcnfSA9ICdNYWxvdmVyc2lrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZS4nfSA9ICdNYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNoYW5nZSwgZS5nLiBDaGFuZ2UjLCBNeUNoYW5nZSMuIFRoZSBkZWZhdWx0IGlzIENoYW5nZSMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgd29ya29yZGVyLCBlLmcuIFdvcmtvcmRlciMsIE15V29ya29yZGVyIy4gVGhlIGRlZmF1bHQgaXMgV29ya29yZGVyIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIEFDTCBtb2R1bGUgcmVzdHJpY3RzIHRoZSB1c3VhZ2Ugb2YgdGhlIHRpY2tldCB0eXBlcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9uIFwnSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzXCcsIHRvIHVzZXJzIG9mIHRoZSBncm91cHMgYXMgZGVmaW5lZCBpbiAiSVRTTUNoYW5nZTo6UmVzdHJpY3RUaWNrZXRUeXBlczo6R3JvdXBzIi4gQXMgdGhpcyBBQ0wgY291bGQgY29sbGlkZSB3aXRoIG90aGVyIEFDTHMgd2hpY2ggYXJlIGFsc28gcmVsYXRlZCB0byB0aGUgdGlja2V0IHR5cGUsIHRoaXMgc3lzY29uZmlnIG9wdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBzaG91bGQgb25seSBiZSBhY3RpdmF0ZWQgaWYgbmVlZGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgU2xvdCd9ID0gJ1RpZHNyb20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHlwZXMgb2YgdGlja2V0cywgd2hlcmUgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgYSBsaW5rIHRvIGFkZCBhIGNoYW5nZSB3aWxsIGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWRkIChmcm9tIHRlbXBsYXRlKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFnZW50Lid9ID0gJ0FyYmVpZHNvcmRyZSBzYWtzYmVoYW5kbGVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgRGVsZXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEhpc3RvcnkgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBSZXBvcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvbmNlJ30gPSAnZW4gZ2FuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWd1bGFybHknfSA9ICdqZXZubGlnJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bmxfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdDYXRlZ29yaWUgPC0+IEltcGFjdCA8LT4gUHJpb3JpdGVpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDYXRlZ29yeSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnQmVoZWVyIGRlIHByaW9yaXRlaXQgb3AgYmFzaXMgdmFuIGRlIENhdGVnb3JpZSA8LT4gSW1wYWN0IGNvbWJpbmF0aWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdQcmlvcml0ZWl0LXRvZXdpanppbmcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbiBNYW5hZ2VtZW50J30gPSAnSVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBub3RpZmljaWF0aWUgYmVoZWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOb3RpZmljYXRpb24gUnVsZSd9ID0gJ05vdGlmaWNhdGllIHJlZ2VsIHRvZXZvZWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdWxlJ30gPSAnUmVnZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBub3RpZmljYXRpb24gc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ0dlZWYgZWVuIG5hYW0gdm9vciBkZSBub3RpZmljYXRpZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZC4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTVN0YXRlTWFjaGluZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gU3RhdGUgTWFjaGluZSd9ID0gJ0JlaGVlciBzdGF0dXMtbWFjaGluZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgY2F0YWxvZyBjbGFzcyEnfSA9ICdTZWxlY3RlZXIgZWVuIGNhdGFsb2d1cy1rbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRhbG9nIGNsYXNzIGlzIHJlcXVpcmVkISd9ID0gJ0VlbiBjYXRhbG9ndXMta2xhc3NlIGlzIHZlcnBsaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgc3RhdGUgdHJhbnNpdGlvbid9ID0gJ05pZXV3ZSBzdGF0dXNvdmVyZ2FuZyB0b2V2b2VnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0NhdGFsb2d1cy1rbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IE5hbWUnfSA9ICdPYmplY3QtbmFhbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIHN0YXRlIHRyYW5zaXRpb25zIGZvcid9ID0gJ092ZXJ6aWNodCB2YW4gc3RhdHVzb3ZlcmdhbmdlbiB2b29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIHN0YXRlIHRyYW5zaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgbmV3IHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAnVm9lZyBlZW4gbmlldXdlIHN0YXR1c292ZXJnYW5nIHRvZSB2b29yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBzdGF0ZSEnfSA9ICdTZWxlY3RlZXIgZWVuIHN0YXR1cy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhIG5leHQgc3RhdGUhJ30gPSAnU2VsZWN0ZWVyIGVlbiB2b2xnZW5kZSBzdGF0dXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ0Jld2Vya2VuIHZhbiBzdGF0dXNvdmVyZ2FuZ2VuIHZvb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGUgc3RhdGUgdHJhbnNpdGlvbid9ID0gJ1dpbHQgdSBkZXplIHN0YXR1c292ZXJnYW5nIHZlcndpamRlcmVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDaGFuZ2UnfSA9ICdDaGFuZ2UgdG9ldm9lZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlJ30gPSAnQ2hhbmdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1c3RpZmljYXRpb24nfSA9ICdSZWNodHZhYXJkaWdpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5wdXQgaW52YWxpZC4nfSA9ICdPbmdlbGRpZ2UgaW52b2VyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdGVkIERhdGUnfSA9ICdHZXZyYWFnZGUgaW1wbGVtZW50YXRpZXRpamQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IENoYW5nZSBUZW1wbGF0ZSd9ID0gJ0NoYW5nZSB0ZW1wbGF0ZSBraWV6ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSB0eXBlJ30gPSAnVGlqZC10eXBlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgdGltZSB0eXBlLid9ID0gJ09uZ2VsZGlnZSB0aWpkc29vcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpbWUnfSA9ICdOaWV1dyB0aWpkc3RpcCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ0FCVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgQ2hhbmdlIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJ0Jld2FhciBDaGFuZ2UgQ0FCIGFscyBzamFibG9vbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyB0byBpbnZvbHZlZCBwZXJzb25zIHNjcmVlbid9ID0gJ2dhIG5hYXIgYmV0cm9ra2VuIHBlcnNvbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgTmFtZSd9ID0gJ09uZ2VsZGlnZSBuYWFtJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbnMgYW5kIEFjdGlvbnMnfSA9ICdDb25kaXRpZXMgZW4gYWN0aWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25kaXRpb24nfSA9ICdWZXJ3aWpkZXIgY29uZGl0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBjb25kaXRpb24nfSA9ICdDb25kaXRpZSB0b2V2b2VnZW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29uZGl0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWQgYSB2YWxpZCBuYW1lLid9ID0gJ0dlZW4gZ2VsZGlnZSBuYWFtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIG5hbWUgaXMgbmVlZGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZTonfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBuYW1lIGlzIGFscmVhZHkgdXNlZCBieSBhbm90aGVyIGNvbmRpdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF0Y2hpbmcnfSA9ICdNYXRjaGluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbnkgZXhwcmVzc2lvbiAoT1IpJ30gPSAnRWVuIHZvb3J3YWFyZGUgKE9SKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgZXhwcmVzc2lvbnMgKEFORCknfSA9ICdBbGxlIHZvb3J3YWFyZGVuIChBTkQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cHJlc3Npb25zJ30gPSAnVm9vcndhYXJkZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0b3InfSA9ICdTZWxlY3RpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRvcid9ID0gJ09wZXJhdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBFeHByZXNzaW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEV4cHJlc3Npb25zIGZvdW5kLid9ID0gJ0dlZW4gZXhwcmVzc2llcyBnZXZvbmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBleHByZXNzaW9uJ30gPSAnTmlldXdlIHZvb3J3YWFyZGUgdG9ldm9lZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBBY3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQWN0aW9ucyBmb3VuZC4nfSA9ICdHZWVuIGFjdGllcyBnZXZvbmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBhY3Rpb24nfSA9ICdOaWV1d2UgYWN0aWUgdG9ldm9lZ2VuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjaGFuZ2U/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0ICVzJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXInfSA9ICdXb3JrIE9yZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgZGV0YWlscyd9ID0gJ1Rvb24gZGV0YWlscyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHdvcmtvcmRlcid9ID0gJ1Rvb24gV29yayBPcmRlcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbGVkIGhpc3RvcnkgaW5mb3JtYXRpb24gb2YgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kaWZpZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2xkIFZhbHVlJ30gPSAnT3VkZSB3YWFyZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFZhbHVlJ30gPSAnTmlldXdlIHdhYXJkZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEludm9sdmVkIFBlcnNvbnMgb2YgJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZvbHZlZCBQZXJzb25zJ30gPSAnQmV0cm9ra2VuIHBlcnNvbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZU1hbmFnZXInfSA9ICdDaGFuZ2UgTWFuYWdlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIGludmFsaWQuJ30gPSAnR2VicnVpa2VyIG9uZ2VsZGlnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VCdWlsZGVyJ30gPSAnQ2hhbmdlLXNhbWVuc3RlbGxlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQWR2aXNvcnkgQm9hcmQnfSA9ICdDaGFuZ2UgQWR2aXNvcnkgQm9hcmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIFRlbXBsYXRlJ30gPSAnQ0FCIHNqYWJsb29uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcGx5IFRlbXBsYXRlJ30gPSAnS2llcyBzamFibG9vbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXdUZW1wbGF0ZSd9ID0gJ05pZXV3IHNqYWJsb29uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgdGhpcyBDQUIgYXMgdGVtcGxhdGUnfSA9ICdCZXdhYXIgZGl0IENBQiBhbHMgc2phYmxvb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRvIENBQid9ID0gJ1RvZXZvZWdlbiBhYW4gQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgVXNlcid9ID0gJ09uZ2VsZGlnZSBnZWJydWlrZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBDQUInfSA9ICdBY3R1ZWVsIENBQic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdDb250ZXh0IEluc3RlbGxpbmdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VzIHBlciBwYWdlJ30gPSAnQ2hhbmdlcyBwZXIgcGFnaW5hJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgVGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZ2VudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQnVpbGRlcid9ID0gJ09wZXJhdGlvbmVlbCBDaGFuZ2UgTWFuYWdlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgTWFuYWdlcid9ID0gJ0NoYW5nZSBNYW5hZ2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlcnMnfSA9ICdXb3Jrb3JkZXJzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdGVkIFRpbWUnfSA9ICdBYW5nZXZyYWFnZCB0aWpkc3RpcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIFN0YXJ0IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBFbmQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWwgU3RhcnQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWwgRW5kIFRpbWUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVJlc2V0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gcmVzZXQgdGhpcyBjaGFuZ2U/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VTZWFyY2gKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhlLmcuIDEwKjUxNTUgb3IgMTA1NjU4KiknfSA9ICdiaWp2b29yYmVlbGQgMTAqNTE1NSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS5nLid9ID0gJ2JpanZvb3JiZWVsZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQ3VzdG9tZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgUmVwb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIEltcGFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQ2F0ZWdvcnknfSA9ICdDaGFuZ2UgY2F0ZWdvcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhiZWZvcmUvYWZ0ZXIpJ30gPSAnKHZvb3IvbmEpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhiZXR3ZWVuKSd9ID0gJyh0dXNzZW4pJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VUZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBDaGFuZ2UgYXMgVGVtcGxhdGUnfSA9ICdCZXdhYXIgQ2hhbmdlIGFscyBzamFibG9vbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHRlbXBsYXRlIHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICdHZWVmIGVlbiBuYWFtIG9wIHZvb3IgZGl0IHNqYWJsb29uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcGxhdGUgbmFtZSBpcyByZXF1aXJlZC4nfSA9ICdEZSBuYWFtIGlzIGVlbiB2ZXJwbGljaHQgdmVsZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgU3RhdGVzJ30gPSAnU3RhdHVzc2VuIHJlc2V0dGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ3cml0ZSBvcmlnaW5hbCB0ZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgY2hhbmdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VUaW1lU2xvdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBUaW1lIFNsb3QnfSA9ICdWZXJwbGFhdHMgdGltZXNsb3QnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbmZvcm1hdGlvbid9ID0gJ0NoYW5nZS1pbmZvcm1hdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRWZmb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjY291bnRlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbml0aWF0b3IocyknfSA9ICdDaGFuZ2UgaW5pdGlhdG9yKHMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQid9ID0gJ0NBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdMYWF0c3QgYWFuZ2VwYXN0IG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ0xhYXRzdCBhYW5nZXBhc3QgZG9vcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09LJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAnT20gZGUgbGlua3MgaW4gZGUgb21zY2hyaWp2aW5nZW4gdGUgb3BlbmVuLCBpcyBoZXQgbW9nZWxpamsgZGF0IHUgQ3RybCBvZiBDbWQgb2YgU2hpZnQgbW9ldCBpbmRydWtrZW4gdGVyd2lqbCB1IG9wIGRlIGxpbmsga2xpa3QgKGFmaGFua2VsaWprIHZhbiB1dyBicm93c2VyIGVuIGJlc3R1cmluZ3NzeXN0ZWVtKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG93bmxvYWQgQXR0YWNobWVudCd9ID0gJ0Rvd25sb2FkIGJpamxhZ2UnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlRWRpdENBQgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDQUIgVGVtcGxhdGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgY2hhbmdlIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuZXcgY2hhbmdlIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIGl0IGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgd29ya29yZGVyIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdGVtcG9yYXJ5IGNoYW5nZSB3aWxsIGJlIGNyZWF0ZWQgd2hpY2ggY29udGFpbnMgdGhlIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcG9yYXJ5IGNoYW5nZSBhbmQgbmV3IHdvcmtvcmRlciB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciB0aGUgd29ya29yZGVyIGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSB3YW50IHRvIHByb2NlZWQ/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIElEJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29udGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGVtcGxhdGUgQ29udGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgVGVtcGxhdGUnfSA9ICdWZXJ3aWpkZXIgVGVtcGxhdGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlciB0byAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RydWN0aW9uJ30gPSAnSW5zdHJ1Y3RpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHdvcmtvcmRlciB0eXBlLid9ID0gJ09uZ2VsZGlnIHdvcmtvcmRlci10eXBlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBwbGFubmVkIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIHBsYW5uZWQgZW5kIHRpbWUhJ30gPSAnRGUgZ2VwYW5kZSBzdGFydHRpamQgbW9ldCBlZXJkZXIgemlqbiBkYW4gZGUgZWluZGRhdHVtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGZvcm1hdC4nfSA9ICdPbmdlbGRpZyBmb3JtYWF0Lic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgV29ya29yZGVyIFRlbXBsYXRlJ30gPSAnV29ya29yZGVyIHRlbXBsYXRlIGtpZXplbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyQWdlbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgV29ya29yZGVyIEFnZW50IG9mICVzJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckRlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHdvcmtvcmRlcj8nfSA9ICdXaWx0IHUgZGV6ZSBXb3JrIE9yZGVyIHZlcndpamRlcmVuPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBXb3Jrb3JkZXIuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIENvbmRpdGlvbiEnfSA9CiAgICAgICAgJ0RlemUgV29yayBPcmRlciBrYW4gbmlldCB2ZXJ3aWpkZXJkIHdvcmRlbi4gSGlqIGlzIGluIHRlbm1pbnN0ZSDDqcOpbiBjb25kaXRpZSBnZWJydWlrdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBXb3Jrb3JkZXIgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIENvbmRpdGlvbihzKSd9ID0gJ0RlemUgV29yayBPcmRlciBpcyBnZWJydWlrdCBpbiBkZSB2b2xnZW5kZSBjb25kaXRpZShzKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzLSVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgZm9sbG93aW5nIHdvcmtvcmRlcnMgYWNjb3JkaW5nbHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhlIHBsYW5uZWQgZW5kIHRpbWUgb2YgdGhpcyB3b3Jrb3JkZXIgaXMgY2hhbmdlZCwgdGhlIHBsYW5uZWQgc3RhcnQgdGltZXMgb2YgYWxsIGZvbGxvd2luZyB3b3Jrb3JkZXJzIHdpbGwgYmUgY2hhbmdlZCBhY2NvcmRpbmdseSd9ID0KICAgICAgICAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMtJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclJlcG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBSZXBvcnQgb2YgJXMlcy0lcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnQnfSA9ICdCZXJpY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBhY3R1YWwgc3RhcnQgdGltZSBtdXN0IGJlIGJlZm9yZSB0aGUgYWN0dWFsIGVuZCB0aW1lISd9ID0gJ0RlIHdlcmtlbGlqa2Ugc3RhcnR0aWpkIG1vZXQgZWVyZGVyIHppam4gZGFuIGRlIHdlcmtlbGlqa2UgZWluZHRpamQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBhY3R1YWwgc3RhcnQgdGltZSBtdXN0IGJlIHNldCwgd2hlbiB0aGUgYWN0dWFsIGVuZCB0aW1lIGlzIHNldCEnfSA9CiAgICAgICAgJ0RlIHdlcmtlbGlqa2Ugc3RhcnR0aWpkIG1vZXQgZ2V2dWxkIHppam4gYWxzIGRlIHdlcmtlbGlqa2UgZWluZHRpamQgZ2V2dWxkIGlzLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGFrZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBBZ2VudCd9ID0gJ0FjdHVlbGUgZ2VicnVpa2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byB0YWtlIHRoaXMgd29ya29yZGVyPyd9ID0gJ0RlemUgV29yayBPcmRlciBvdmVybmVtZW4/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJUZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBXb3Jrb3JkZXIgYXMgVGVtcGxhdGUnfSA9ICdXb3JrIE9yZGVyIG9wc2xhYW4gYWxzIHRlbXBsYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCB3b3Jrb3JkZXIgKGFuZCBzdXJyb3VuZGluZyBjaGFuZ2UpJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSW5mb3JtYXRpb24nfSA9ICdXb3JrIE9yZGVyLWluZm9ybWF0aWUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biBub3RpZmljYXRpb24gJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZXJlIHdhcyBhbiBlcnJvciBjcmVhdGluZyB0aGUgbm90aWZpY2F0aW9uLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDaGFuZ2VzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCB3aXRoIFRpY2tldElEICVzIGRvZXMgbm90IGV4aXN0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaXNzaW5nIHN5c2NvbmZpZyBvcHRpb24gIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGFkZCBjaGFuZ2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlIGZyb20gdGVtcGxhdGUhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDQUJUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNoYW5nZSBmb3VuZCBmb3IgY2hhbmdlSUQgJXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBDQUIgb2YgY2hhbmdlICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgdGhlIHRlbXBsYXRlLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQ29uZGl0aW9uSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyAlcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGNyZWF0ZSBuZXcgY29uZGl0aW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIENvbmRpdGlvbklEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgRXhwcmVzc2lvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBBY3Rpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgQWN0aW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBBY3Rpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3I6IFVua25vd24gZmllbGQgdHlwZSAiJXMiISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25JRCAlcyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIGdpdmVuIENoYW5nZUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBkb2VzIG5vdCBoYXZlIGFuIGFsbG93ZWQgY2hhbmdlIHN0YXRlIHRvIGJlIGRlbGV0ZWQhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY2hhbmdlSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmtub3duIHR5cGUgIiVzIiBlbmNvdW50ZXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5IHpvb20sIG5vIEhpc3RvcnlFbnRyeUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5RW50cnkgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlIENBQiBmb3IgQ2hhbmdlICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU1hbmFnZXIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2VNYW5hZ2VyJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IENBQid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgQ2hhbmdlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgV29ya29yZGVycyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUElSLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUElSJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQU0EucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBQU0EnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBjcmVhdGUgb3V0cHV0LCBhcyB0aGUgd29ya29yZGVyIGlzIG5vdCBhdHRhY2hlZCB0byBhIGNoYW5nZSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgbm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gY2hhbmdlIHRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyJ30gPSAnV29ya29yZGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gd29ya29yZGVyIHRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIE92ZXJ2aWV3ICglcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZFN0YXJ0VGltZSd9ID0gJ0dlcGxhbmRlIHN0YXJ0dGlqZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkRW5kVGltZSd9ID0gJ0dlcGxhbmRlIGVpbmR0aWpkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbFN0YXJ0VGltZSd9ID0gJ1dlcmtlbGlqa2Ugc3RhcnR0aWpkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbEVuZFRpbWUnfSA9ICdXZXJrZWxpamtlIGVpbmR0aWpkJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VSZXNldC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHJlc2V0IFdvcmtPcmRlciAlcyBvZiBDaGFuZ2UgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byByZXNldCBDaGFuZ2UgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VTY2hlZHVsZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IENoYW5nZSBTY2hlZHVsZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZVRpdGxlJ30gPSAnQ2hhbmdlLXRpdGVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlcnMnfSA9ICdXb3JrIE9yZGVycyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VTdGF0ZSd9ID0gJ0NoYW5nZS1zdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCBSZXN1bHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrIE9yZGVyIFRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSnVzdGlmaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFJlcG9ydCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpb3JpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEltcGFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmVmb3JlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIHRoZSB0ZW1wbGF0ZSAiJXMiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIGNoYW5nZSAiJXMiLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjaGFuZ2UgY2FuXCd0IGJlIG1vdmVkLCBhcyBpdCBoYXMgbm8gd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIGZpcnN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgbW92ZSBhIGNoYW5nZSB3aGljaCBhbHJlYWR5IGhhcyBzdGFydGVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgbW92ZSB0aGUgaW5kaXZpZHVhbCB3b3Jrb3JkZXJzIGluc3RlYWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjdXJyZW50ICVzIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgJXMgb2YgYWxsIHdvcmtvcmRlcnMgaGFzIHRvIGJlIGRlZmluZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBtb3ZlIHRpbWUgc2xvdCBmb3Igd29ya29yZGVyICMlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBUZW1wbGF0ZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgdGVtcGxhdGUgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgIiVzIiEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIHdvcmtvcmRlciBmcm9tIHRlbXBsYXRlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVPdmVydmlldy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFRlbXBsYXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJBZGQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIG9uIHRoZSBjaGFuZ2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBhZGQgd29ya29yZGVyISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWdlbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFdvcmtPcmRlcklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gc2V0IHRoZSB3b3Jrb3JkZXIgYWdlbnQgb2YgdGhlIHdvcmtvcmRlciAiJXMiIHRvIGVtcHR5ISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgdGhlIHdvcmtvcmRlciAiJXMiISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZmluZCBDaGFuZ2UgZm9yIFdvcmtPcmRlciAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckRlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgd29ya29yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBXb3JrT3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBhcyBubyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5Wm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBlbnRyeSAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5IFpvb20nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlclRha2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB0YWtlIHRoZSB3b3Jrb3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHdvcmtvcmRlciAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9JVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIGNvbmZpZyBvcHRpb24gJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBvcHRpb24gJXMgbmVlZHMgdG8gYmUgYSBIQVNIIHJlZiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY29uZmlnIG9wdGlvbiBmb3VuZCBmb3IgdGhlIHZpZXcgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGl0bGU6ICVzIHwgVHlwZTogJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBDQUJzJ30gPSAnTWlqbiBDQUJzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNoYW5nZXMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IENoYW5nZXMnfSA9ICdNaWpuIGNoYW5nZXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015V29ya09yZGVycy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgV29yayBPcmRlcnMnfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01DaGFuZ2VNYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlcXVlc3RlZCd9ID0gJ0FhbmdldnJhYWdkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3BlbmRpbmcgYXBwcm92YWwnfSA9ICdXYWNodCBvcCBnb2Vka2V1cmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWplY3RlZCd9ID0gJ0FmZ2V3ZXplbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZlZCd9ID0gJ0dvZWRnZWtldXJkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luIHByb2dyZXNzJ30gPSAnSW4gdWl0dm9lcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIHBpcid9ID0gJ1dhY2h0IG9wIFBJUic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzdWNjZXNzZnVsJ30gPSAnU3VjY2Vzdm9sJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ZhaWxlZCd9ID0gJ01pc2x1a3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2FuY2VsZWQnfSA9ICdHZWNhbmNlbGQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmV0cmFjdGVkJ30gPSAnSW5nZXRyb2trZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY3JlYXRlZCd9ID0gJ0FhbmdlbWFha3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWNjZXB0ZWQnfSA9ICdHZWFjY2VwdGVlcmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVhZHknfSA9ICdLbGFhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZhbCd9ID0gJ0dvZWRrZXVyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dvcmtvcmRlcid9ID0gJ1dvcmtvcmRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiYWNrb3V0J30gPSAnQmFja291dCBQbGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2RlY2lzaW9uJ30gPSAnQmVzbGlzc2luZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwaXInfSA9ICdQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyd9ID0gJ2lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCd9ID0gJ2lzIG5pZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZW1wdHknfSA9ICdpcyBsZWVnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCBlbXB0eSd9ID0gJ2lzIG5pZXQgbGVlZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBncmVhdGVyIHRoYW4nfSA9ICdpcyBncm90ZXIgZGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGxlc3MgdGhhbid9ID0gJ2lzIGtsZWluZXIgZGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGJlZm9yZSd9ID0gJ2lzIGVlcmRlciBkYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgYWZ0ZXInfSA9ICdpcyBsYXRlciBkYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY29udGFpbnMnfSA9ICdiZXZhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgY29udGFpbnMnfSA9ICdiZXZhdCBuaWV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZ2lucyB3aXRoJ30gPSAnYmVnaW50IG1ldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlbmRzIHdpdGgnfSA9ICdlaW5kaWd0IG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3NldCd9ID0gJ3BsYWF0cyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbGlzdCBvZiB0aGUgYWdlbnRzIHdobyBoYXZlIHBlcm1pc3Npb24gdG8gdGFrZSB3b3Jrb3JkZXJzLiBLZXkgaXMgYSBsb2dpbiBuYW1lLiBDb250ZW50IGlzIDAgb3IgMS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2Ygd29ya29yZGVyIHN0YXRlcywgYXQgd2hpY2ggdGhlIEFjdHVhbFN0YXJ0VGltZSBvZiBhIHdvcmtvcmRlciB3aWxsIGJlIHNldCBpZiBpdCB3YXMgZW1wdHkgYXQgdGhpcyBwb2ludC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyJ30gPSAnV29ya29yZGVyIHRvZXZvZWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyIChmcm9tIFRlbXBsYXRlKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBjaGFuZ2UgZnJvbSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgKGZyb20gdGVtcGxhdGUpIHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgZnJvbSB0ZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgQ0lQIG1hdHJpeC4nfSA9ICdCZWhlZXIgdmFuIENJUC1tYXRyaXgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gb2YgdGhlIHN0YXRlIG1hY2hpbmUuJ30gPSAnQmVoZWVyIHZhbiBzdGF0dXNvdmVyZ2FuZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZSBhZHZpc29yeSBib2FyZHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlcyBtYW5hZ2VkIGJ5IHRoZSB1c2VyLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2Ygd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgTWVtYmVyIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudCB0b29sYmFycy4gRGVmYXVsdDogMyBob3VycyAoMTgwIG1pbnV0ZXMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50LiBEZWZhdWx0OiA1IGRheXMgKDcyMDAgbWludXRlcykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIENBQiBUZW1wbGF0ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbnZvbHZlZCBQZXJzb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNjaGVkdWxlJ30gPSAnQ2hhbmdlIFNjaGVkdWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhbmQgV29ya29yZGVyIFRlbXBsYXRlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIHdvcmtvcmRlciB0ZW1wbGF0ZXMgZWRpdGVkIGJ5IHRoaXMgdXNlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFyZWEuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBpbnZvbHZlZCBwZXJzb25zIG9mIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBsaW1pdCBwZXIgcGFnZSBmb3IgQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIEVkaXQnfSA9ICdDb250aXRpZXMgYmV3ZXJrZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIE92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyZSB3aGljaCBzY3JlZW4gc2hvdWxkIGJlIHNob3duIGFmdGVyIGEgbmV3IHdvcmtvcmRlciBoYXMgYmVlbiBjcmVhdGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyZXMgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IHdoZW4gcGxhbm5lZCB0aGUgc3RhcnQgdGltZSBvciBvdGhlciB0aW1lIHZhbHVlcyBoYXZlIGJlZW4gcmVhY2hlZC9wYXNzZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSd9ID0gJ0NoYW5nZSBhYW5tYWtlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgQ2hhbmdlIChmcm9tIFRlbXBsYXRlKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgKGZyb20gdGVtcGxhdGUpIGZyb20gdGhpcyB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIGNoYW5nZSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBJVFNNIENoYW5nZSBNYW5hZ2VtZW50IG5vdGlmaWNhdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdHlwZSBmb3IgYSB3b3Jrb3JkZXIuIFRoaXMgZW50cnkgbXVzdCBleGlzdCBpbiBnZW5lcmFsIGNhdGFsb2cgY2xhc3MgXCdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpXb3JrT3JkZXI6OlR5cGVcJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgc2lnbmFscyBmb3IgZWFjaCB3b3Jrb3JkZXIgc3RhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIENoYW5nZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgQ2hhbmdlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFdvcmtvcmRlciB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBXb3Jrb3JkZXIgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNoYW5nZSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSB0ZW1wbGF0ZSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgYWNjb3VudGVkIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgcGxhbm5lZCBlZmZvcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgcmVhY2hhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lKSBjaGFuZ2UgZW5kIHN0YXRlcyBzaG91bGQgYmUgYWxsb3dlZCBpZiBhIGNoYW5nZSBpcyBpbiBhIGxvY2tlZCBzdGF0ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgd29ya29yZGVyIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSB3b3Jrb3JkZXIgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWNjb3VudGVkIHRpbWUgc2hvdWxkIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBzaG91bGQgYmUgc2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBjaGFuZ2Ugc2VhcmNoIGFuZCB0aGUgd29ya29yZGVyIHNlYXJjaCBmdW5jdGlvbnMgY291bGQgdXNlIHRoZSBtaXJyb3IgREIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHN0YXRlIGNhbiBiZSBzZXQgaW4gQWdlbnRJVFNNQ2hhbmdlRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBwbGFubmVkIGVmZm9ydCBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBwcmludCBieSBjdXN0b21lci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNlYXJjaGVkIGJ5IGN1c3RvbWVyLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzZXQgYnkgY3VzdG9tZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzaG93biBieSBjdXN0b21lci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHN0YXRlIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHRpdGxlIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBzaG93biBncmFwaCBhdHRyaWJ1dGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoYXQgb25seSBjaGFuZ2VzIGNvbnRhaW5pbmcgV29ya29yZGVycyBsaW5rZWQgd2l0aCBzZXJ2aWNlcywgd2hpY2ggdGhlIGN1c3RvbWVyIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gdXNlIHdpbGwgYmUgc2hvd24uIEFueSBvdGhlciBjaGFuZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSBhbGxvd2VkIHRvIGRlbGV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGNoYW5nZSB0aXRsZSBmb3IgYSBkdW1teSBjaGFuZ2Ugd2hpY2ggaXMgbmVlZGVkIHRvIGVkaXQgYSB3b3Jrb3JkZXIgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNhdGVnb3J5IG9mIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW1wYWN0IG9mIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmaWVsZCB0eXBlIG9mIENvbXBhcmVWYWx1ZSBmaWVsZHMgZm9yIGNoYW5nZSBhdHRyaWJ1dGVzIHVzZWQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gVmFsaWQgdmFsdWVzIGFyZSBTZWxlY3Rpb24sIFRleHQgYW5kIERhdGUuIElmIGEgdHlwZSBpcyBub3QgZGVmaW5lZCwgdGhlIGZpZWxkIHdpbGwgbm90IGJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3Igd29ya29yZGVyIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgY2hhbmdlIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvYmplY3QgYXR0cmlidXRlcyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB3b3Jrb3JkZXIgb2JqZWN0cyBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjY291bnRlZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsU3RhcnRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2F0ZWdvcnlJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZUJ1aWxkZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZU1hbmFnZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZVN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIER5bmFtaWNGaWVsZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEltcGFjdElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZEVmZm9ydCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFByaW9yaXR5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBSZXF1ZXN0ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyQWdlbnRJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlck51bWJlciBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclR5cGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBlcmlvZCAoaW4geWVhcnMpLCBpbiB3aGljaCBzdGFydCBhbmQgZW5kIHRpbWVzIGNhbiBiZSBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBhdHRyaWJ1dGVzIG9mIGEgd29ya29yZGVyIGluIHRoZSB0b29sdGlwIG9mIHRoZSB3b3Jrb3JkZXIgZ3JhcGggaW4gdGhlIGNoYW5nZSB6b29tLiBUbyBzaG93IHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcyBpbiB0aGUgdG9vbHRpcCwgdGhleSBtdXN0IGJlIHNwZWNpZmllZCBsaWtlIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUxLCBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMiwgZXRjLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBQU0Egb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgUElSIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaWduYWxzIGZvciBlYWNoIElUU01DaGFuZ2Ugc3RhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHRlbXBsYXRlIHR5cGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBzaG93IHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGV0aGVyIG5vdGlmaWNhdGlvbnMgc2hvdWxkIGJlIHNlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzIG9mIGEgY2hhbmdlIGhpc3RvcnkgZW50cnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgYW4gYWdlbnQgY2FuIGV4Y2hhbmdlIHRoZSBYLWF4aXMgb2YgYSBzdGF0IGlmIGhlIGdlbmVyYXRlcyBvbmUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyBkb25lIGZvciBjb25maWcgaXRlbSBjbGFzc2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIGNoYW5nZSBzdGF0ZSB1cGRhdGVzIHdpdGhpbiBhIHRpbWVwZXJpb2QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyByZWdhcmRpbmcgdGhlIHJlbGF0aW9uIGJldHdlZW4gY2hhbmdlcyBhbmQgaW5jaWRlbnQgdGlja2V0cy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IHRoZSBudW1iZXIgb2YgUmZjIHRpY2tldHMgYSByZXF1ZXN0ZXIgY3JlYXRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyAoZm9yIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMpIHNob3duIGluIHRoZSBjaGFuZ2UgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciByZXBvcnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljRmllbGQgZXZlbnQgbW9kdWxlIHRvIGhhbmRsZSB0aGUgdXBkYXRlIG9mIGNvbmRpdGlvbnMgaWYgZHluYW1pYyBmaWVsZHMgYXJlIGFkZGVkLCB1cGRhdGVkIG9yIGRlbGV0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSBjb25kaXRpb25zIG9mIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9yd2FyZCBzY2hlZHVsZSBvZiBjaGFuZ2VzLiBPdmVydmlldyBvdmVyIGFwcHJvdmVkIGNoYW5nZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIENBQiBUZW1wbGF0ZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIENvbmRpdGlvbiBFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIE1hbmFnZW1lbnQgTm90aWZpY2F0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VyIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBQSVIgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIG5vdGlmaWNhdGlvbiBydWxlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZXMnfSA9ICdDaGFuZ2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlDQUIgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlDaGFuZ2VzIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15V29ya29yZGVycyBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBEZWxldGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDQUIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDb250ZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgY2xlYW5zIHVwIGNvbmRpdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgZGVsZXRlcyB0aGUgY2FjaGUgZm9yIGEgdG9vbGJhci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgbWF0Y2hlcyBjb25kaXRpb25zIGFuZCBleGVjdXRlcyBhY3Rpb25zLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgc2VuZHMgbm90aWZpY2F0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiBjb25kaXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2Ygd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gcmVjYWxjdWxhdGUgdGhlIHdvcmtvcmRlciBudW1iZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byBzZXQgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzIG9mIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTUNoYW5nZSd9ID0gJ0NoYW5nZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNV29ya09yZGVyJ30gPSAnV29yayBPcmRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBmcmVxdWVuY3kgaXMgXCdyZWd1bGFybHlcJywgeW91IGNhbiBjb25maWd1cmUgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IChldmVyeSBYIGhvdXJzKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9nZmlsZSBmb3IgdGhlIElUU00gY2hhbmdlIGNvdW50ZXIuIFRoaXMgZmlsZSBpcyB1c2VkIGZvciBjcmVhdGluZyB0aGUgY2hhbmdlIG51bWJlcnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIENBQiBtZW1iZXJzIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIGFnZW50cywgdXNlZCBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayBpZiBXb3JrT3JkZXJBZGQgb3IgV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlIHNob3VsZCBiZSBwZXJtaXR0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBDQUIgbWVtYmVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBhZ2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgYnVpbGRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgbWFuYWdlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIG5vIHdvcmtvcmRlciBhZ2VudCBpcyBzZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIHRoZSBhZ2VudCBpcyBjb250YWluZWQgaW4gdGhlIGNvbmZpZ3VyZWQgbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBhIGxpbmsgdG8gY3JlYXRlIGEgY2hhbmdlIGZyb20gdGhpcyB0aWNrZXQuIFRoZSB0aWNrZXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGxpbmtlZCB3aXRoIHRoZSBuZXcgY2hhbmdlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIGFsbCB3b3Jrb3JkZXJzIGluIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyAoZnJvbSB0ZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSB1c2VycyBvZiB0aGVzZSBncm91cHMgaGF2ZSB0aGUgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRpY2tldCB0eXBlcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiIGlmIHRoZSBmZWF0dXJlICJUaWNrZXQ6OkFjbDo6TW9kdWxlIyMjMjAwLVRpY2tldDo6QWNsOjpNb2R1bGUiIGlzIGVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb3ZlciBhbGwgQ2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpJ30gPSAnUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUFNBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBVc2VyQ3JlYXRlV29ya09yZGVyTmV4dE1hc2sgb2JqZWN0IGluIHRoZSBwcmVmZXJlbmNlIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjaGFuZ2VzIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIGNoYW5nZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmVzZW50cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gc2hvdyB0aGUgaW52b2x2ZWQgcGVyc29ucyBpbiBhIGNoYW5nZSwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIGNoYW5nZSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHkgKFBTQSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpIG9mIGNoYW5nZXMuIE92ZXJ2aWV3IG9mIGFwcHJvdmVkIGNoYW5nZXMgYW5kIHRoZWlyIHNlcnZpY2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgaW4gb3JkZXIgZm9yIGFuIGFnZW50IHRvIHRha2UgYSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhY2Nlc3MgdGhlIG92ZXJ2aWV3IG9mIGFsbCBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGFkZCBhIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjaGFuZ2UgdGhlIHdvcmtvcmRlciBhZ2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSBjaGFuZ2VzXCcgQ0FCLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgY2hhbmdlcyBmcm9tIHRlbXBsYXRlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgYSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgYSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgYSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGNvbmRpdGlvbnMgb2YgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb250ZW50IG9mIGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgaW52b2x2ZWQgcGVyc29ucyBvZiBhIGNoYW5nZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIG1vdmUgY2hhbmdlcyBpbiB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHByaW50IGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHJlc2V0IGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBhIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBsaXN0IG9mIGNoYW5nZXMgd2hlcmUgdGhlIHVzZXIgaXMgYSBDQUIgbWVtYmVyLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBsaXN0IG9mIGNoYW5nZXMgd2hlcmUgdGhlIHVzZXIgaXMgdGhlIGNoYW5nZSBtYW5hZ2VyLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBvdmVydmlldyBvdmVyIGFsbCB0ZW1wbGF0ZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgd29ya29yZGVyLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBDaGFuZ2UgU2NoZWR1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2UgUFNBLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlcyB3aXRoIGFuIHVwY29taW5nIFBJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBvd24gY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHdyaXRlIGEgcmVwb3J0IGZvciB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biB0YXNrIHRvIGNoZWNrIGlmIHNwZWNpZmljIHRpbWVzIGhhdmUgYmVlbiByZWFjaGVkIGluIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSB3b3Jrb3JkZXIgYXMgYSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2NoZWR1bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2NyZWVuIGFmdGVyIGNyZWF0aW5nIGEgd29ya29yZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDaGFuZ2VzJ30gPSAnWm9layBDaGFuZ2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjaGFuZ2UgbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjaGFuZ2UgbnVtYmVyLCB0aGUgU3lzdGVtSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkIHdpdGggU3lzdGVtSUQuY291bnRlciBmb3JtYXQgKGUuZy4gMTAwMTE4LCAxMDAxMTkpLiBXaXRoICJEYXRlIiwgdGhlIGNoYW5nZSBudW1iZXJzIHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHRoZSBjdXJyZW50IGRhdGUgYW5kIGEgY291bnRlcjsgdGhpcyBmb3JtYXQgbG9va3MgbGlrZSBZZWFyLk1vbnRoLkRheS5jb3VudGVyLCBlLmcuIDIwMTAwNjI0MDAwMDEsIDIwMTAwNjI0MDAwMDIuIFdpdGggIkRhdGVDaGVja3N1bSIsIHRoZSBjb3VudGVyIHdpbGwgYmUgYXBwZW5kZWQgYXMgY2hlY2tzdW0gdG8gdGhlIHN0cmluZyBvZiBkYXRlIHBsdXMgdGhlIFN5c3RlbUlELiBUaGUgY2hlY2tzdW0gd2lsbCBiZSByb3RhdGVkIG9uIGEgZGFpbHkgYmFzaXMuIFRoaXMgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuU3lzdGVtSUQuQ291bnRlci5DaGVja1N1bSwgZS5nLiAyMDEwMDYyNDEwMDAwMDE3LCAyMDEwMDYyNDEwMDAwMDI2Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgYWdlbnQgZm9yIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50SVRTTUNoYW5nZVpvb20gYW5kIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRJVFNNQ2hhbmdlWm9vbSBhbmQgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBtaW5pbWFsIGNoYW5nZSBjb3VudGVyIHNpemUgKGlmICJBdXRvSW5jcmVtZW50IiB3YXMgc2VsZWN0ZWQgYXMgSVRTTUNoYW5nZTo6TnVtYmVyR2VuZXJhdG9yKS4gRGVmYXVsdCBpcyA1LCB0aGlzIG1lYW5zIHRoZSBjb3VudGVyIHN0YXJ0cyBmcm9tIDEwMDAwLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdXAgdGhlIHN0YXRlIG1hY2hpbmUgZm9yIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdXAgdGhlIHN0YXRlIG1hY2hpbmUgZm9yIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgY2hlY2tib3ggaW4gdGhlIEFnZW50SVRTTVdvcmtPcmRlckVkaXQgc2NyZWVuIHRoYXQgZGVmaW5lcyBpZiB0aGUgdGhlIGZvbGxvd2luZyB3b3Jrb3JkZXJzIHNob3VsZCBhbHNvIGJlIG1vdmVkIGlmIGEgd29ya29yZGVyIGlzIG1vZGlmaWVkIGFuZCB0aGUgcGxhbm5lZCBlbmQgdGltZSBoYXMgY2hhbmdlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgY2hhbmdpbmcgdGhlIHdvcmtvcmRlciBhZ2VudCwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIGNoYW5nZSBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIGNoYW5nZSwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSB3b3Jrb3JkZXIgYXMgYSB0ZW1wbGF0ZSBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSB3b3Jrb3JkZXIsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGVkaXRpbmcgdGhlIHJlcG9ydCBvZiBhIHdvcmtvcmRlciwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY2hhbmdlIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIHdvcmtvcmRlciB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbW92aW5nIHRoZSB0aW1lIHNsb3Qgb2YgYSBjaGFuZ2UgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0YWtpbmcgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBjb25kaXRpb25zIG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWRkIGEgd29ya29yZGVyIGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIHdvcmtvcmRlciBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIHdvcmtvcmRlciB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcmVzZXQgYSBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY2hhbmdlIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0ZSBNYWNoaW5lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0b3JlcyBjaGFuZ2UgYW5kIHdvcmtvcmRlciBpZHMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgdGVtcGxhdGUgaWQsIHdoaWxlIGEgdXNlciBpcyBlZGl0aW5nIGEgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXInfSA9ICdXb3JrIE9yZGVyIG92ZXJuZW1lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIFdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBPdmVydmlldyd9ID0gJ1RlbXBsYXRlb3ZlcnppY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjaGFuZ2UsIGUuZy4gQ2hhbmdlIywgTXlDaGFuZ2UjLiBUaGUgZGVmYXVsdCBpcyBDaGFuZ2UjLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIHdvcmtvcmRlciwgZS5nLiBXb3Jrb3JkZXIjLCBNeVdvcmtvcmRlciMuIFRoZSBkZWZhdWx0IGlzIFdvcmtvcmRlciMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBBQ0wgbW9kdWxlIHJlc3RyaWN0cyB0aGUgdXN1YWdlIG9mIHRoZSB0aWNrZXQgdHlwZXMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbiBcJ0lUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlc1wnLCB0byB1c2VycyBvZiB0aGUgZ3JvdXBzIGFzIGRlZmluZWQgaW4gIklUU01DaGFuZ2U6OlJlc3RyaWN0VGlja2V0VHlwZXM6Okdyb3VwcyIuIEFzIHRoaXMgQUNMIGNvdWxkIGNvbGxpZGUgd2l0aCBvdGhlciBBQ0xzIHdoaWNoIGFyZSBhbHNvIHJlbGF0ZWQgdG8gdGhlIHRpY2tldCB0eXBlLCB0aGlzIHN5c2NvbmZpZyBvcHRpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgc2hvdWxkIG9ubHkgYmUgYWN0aXZhdGVkIGlmIG5lZWRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFNsb3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHlwZXMgb2YgdGlja2V0cywgd2hlcmUgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgYSBsaW5rIHRvIGFkZCBhIGNoYW5nZSB3aWxsIGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWRkIChmcm9tIHRlbXBsYXRlKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFkZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFnZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgRGVsZXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEhpc3RvcnkgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBSZXBvcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvbmNlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlZ3VsYXJseSd9ID0gJyc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cGxfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLYXRlZ29yaWEgPC0+IFdwxYJ5dyA8LT4gUHJpb3J5dGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENhdGVnb3J5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICdaYXJ6xIVkemFuaWUgcHJpb3J5dGV0ZW0gZGxhIGtvbWJpbmFjamkgS2F0ZWdvcmlhIDwtPiBXcMWCeXcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBbG9rYWNqYSBwcmlvcnl0ZXR1JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlTWFuYWdlbWVudCBOb3RpZmljYXRpb24gTWFuYWdlbWVudCd9ID0gJ1phcnrEhWR6YW5pZSBwb3dpYWRvbWllbmlhbWkgem1pYW4gSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTm90aWZpY2F0aW9uIFJ1bGUnfSA9ICdEb2RhaiByZWd1xYLEmSBwb3dpYWRhbWlhbmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1bGUnfSA9ICdSZWd1xYJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Egbm90aWZpY2F0aW9uIHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICdQb3dpYWRvbWllbmUgcG93aW5ubyBtaWXEhyBuYXp3xJkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQuJ30gPSAnSW1pxJkgaSBuYXp3aXNrbyBzxIUgd3ltYWdhbmUuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01TdGF0ZU1hY2hpbmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFN0YXRlIE1hY2hpbmUnfSA9ICdaYXJ6xIVkYWogbWFzenluxIUgc3RhbsOzdyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBjYXRhbG9nIGNsYXNzISd9ID0gJ1phem5hY3oga2xhc8SZIGthdGFsb2d1ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGFsb2cgY2xhc3MgaXMgcmVxdWlyZWQhJ30gPSAnS2xhc2Ega2F0YWxvZ3UgamVzdCB3eW1hZ2FuYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgc3RhdGUgdHJhbnNpdGlvbid9ID0gJ0RvZGFqIHByemVqxZtjaWUgbWnEmWR6eSBzdGFuYW1pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLbGFzYSBrYXRhbG9ndSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgTmFtZSd9ID0gJ05hendhIG9iaWVrdHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb3ZlciBzdGF0ZSB0cmFuc2l0aW9ucyBmb3InfSA9ICdQcnplZ2zEhWQgcHJ6ZWrFm8SHIHN0YW7Ds3cgZGxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIHN0YXRlIHRyYW5zaXRpb24nfSA9ICdVc3XFhCB0byBwcnplasWbY2llIG1pxJlkenkgc3RhbmFtaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBuZXcgc3RhdGUgdHJhbnNpdGlvbiBmb3InfSA9ICdEb2RhaiBub3dlIHByemVqxZtjaWUgc3RhbnUgZGxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBzdGF0ZSEnfSA9ICdaYXpuYWN6IHN0YW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBuZXh0IHN0YXRlISd9ID0gJ1phem5hY3ogbmFzdMSZcG55IHN0YW4hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ0VkeXR1aiBwcnplasWbY2llIHN0YW51IGRsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoZSBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnQ3p5IG5hIHBld25vIGNoY2VzeiB1c3VuxIXEhyBwcnplasWbY2llIHN0YW51JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDaGFuZ2UnfSA9ICdEb2RhaiB6bWlhbsSZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlJ30gPSAnWm1pYW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1c3RpZmljYXRpb24nfSA9ICdVemFzYWRuaWVuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5wdXQgaW52YWxpZC4nfSA9ICdOaWVwb3ByYXduZSBkYW5lIHdlasWbY2lvd2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ1dwxYJ5dyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0ZWQgRGF0ZSd9ID0gJ8W7xIVkYW5hIGRhdGEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IENoYW5nZSBUZW1wbGF0ZSd9ID0gJ1d5Ymllcnogc3phYmxvbiB6bWlhbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSB0eXBlJ30gPSAnVHlwIGN6YXN1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgdGltZSB0eXBlLid9ID0gJ05pZXBvcHJhd255IHR5cCBjemFzdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpbWUnfSA9ICdOb3d5IGN6YXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBDQUIgYXMgdGVtcGxhdGUnfSA9ICdaYXBpc3ogQ0FCIHptaWFueSBqYWtvIHN6YWJsb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gdG8gaW52b2x2ZWQgcGVyc29ucyBzY3JlZW4nfSA9ICdpZMW6IGRvIGVrcmFudSB6IG9zb2JhbWkgemFhbmdhxbxvd2FueW1pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgTmFtZSd9ID0gJ05pZXBvcHJhd25hIG5hendhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbnMgYW5kIEFjdGlvbnMnfSA9ICdXYXJ1bmtpIGkgYWtjamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmRpdGlvbid9ID0gJ1VzdcWEIHdhcnVuZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBjb25kaXRpb24nfSA9ICdEb2RhaiBub3d5IHdhcnVuZWsnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29uZGl0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWQgYSB2YWxpZCBuYW1lLid9ID0gJ1BvdHJ6ZWJhIHBvcHJhd25hIG5hendhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIG5hbWUgaXMgbmVlZGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZTonfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBuYW1lIGlzIGFscmVhZHkgdXNlZCBieSBhbm90aGVyIGNvbmRpdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF0Y2hpbmcnfSA9ICdQYXN1amUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW55IGV4cHJlc3Npb24gKE9SKSd9ID0gJ0Rvd29sbmUgd3lyYcW8ZW5pZSAoT1IpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBleHByZXNzaW9ucyAoQU5EKSd9ID0gJ1dzenlzdGtpZSB3eXJhxbxlbmlhIChBTkQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cHJlc3Npb25zJ30gPSAnV3lyYcW8ZW5pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3Rvcid9ID0gJ1NlbGVrdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdG9yJ30gPSAnT3BlcmF0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEV4cHJlc3Npb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRXhwcmVzc2lvbnMgZm91bmQuJ30gPSAnTmllIHpuYWxlemlvbm8gd3lyYcW8ZcWELic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGV4cHJlc3Npb24nfSA9ICdEb2RhaiBub3dlIHd5cmHFvGVuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEFjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBBY3Rpb25zIGZvdW5kLid9ID0gJ05pZSB6bmFsZXppb25vIGFrY2ppLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGFjdGlvbid9ID0gJ0RvZGFqIG5vd8SFIGFrY2rEmSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2hhbmdlPyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyJ30gPSAnWmFkYW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGRldGFpbHMnfSA9ICdQb2thxbwgc3pjemVnw7PFgnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB3b3Jrb3JkZXInfSA9ICdQb2thxbwgemFkYW5pZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbGVkIGhpc3RvcnkgaW5mb3JtYXRpb24gb2YgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kaWZpZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2xkIFZhbHVlJ30gPSAnU3RhcmEgd2FydG/Fm8SHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBWYWx1ZSd9ID0gJ05vd2Egd2FydG/Fm8SHJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSW52b2x2ZWQgUGVyc29ucyBvZiAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludm9sdmVkIFBlcnNvbnMnfSA9ICdaYWFuZ2HFvG93YW5lIG9zb2J5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZU1hbmFnZXInfSA9ICdNYW5hZ2VyIHptaWFueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIGludmFsaWQuJ30gPSAnTmllcG9wcmF3bnkgdcW8eXRrb3duaWsuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZUJ1aWxkZXInfSA9ICdLb25zdHJ1a3RvciB6bWlhbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEFkdmlzb3J5IEJvYXJkJ30gPSAnQ2hhbmdlIEFkdmlzb3J5IEJvYXJkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBUZW1wbGF0ZSd9ID0gJ1N6YWJsb24gQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcGx5IFRlbXBsYXRlJ30gPSAnRG9kYWogc3phYmxvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXdUZW1wbGF0ZSd9ID0gJ05vd3kgc3phYmxvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHRoaXMgQ0FCIGFzIHRlbXBsYXRlJ30gPSAnWmFwaXN6IHRlbiBDQUIgamFrbyBzemFibG9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0byBDQUInfSA9ICdEb2RhaiBkbyBDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBVc2VyJ30gPSAnTmllcG9wcmF3bnkgdcW8eXRrb3duaWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBDQUInfSA9ICdBa3R1YWxueSBDQUInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnVXN0YXdpZW5pYSBrb250ZWtzdHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlcyBwZXIgcGFnZSd9ID0gJ1ptaWFueSBuYSBzdHJvbsSZJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgVGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZ2VudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQnVpbGRlcid9ID0gJ0tvbnN0cnVrdG9yIHptaWFueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgTWFuYWdlcid9ID0gJ01hbmFnZXIgem1pYW55JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlcnMnfSA9ICdaYWRhbmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdGVkIFRpbWUnfSA9ICfFu8SFZGFueSBjemFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgU3RhcnQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVuZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBTdGFydCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBFbmQgVGltZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlUmVzZXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byByZXNldCB0aGlzIGNoYW5nZT8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGUuZy4gMTAqNTE1NSBvciAxMDU2NTgqKSd9ID0gJyhucC4gMTAqNTE1NSBvciAxMDU2NTgqKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS5nLid9ID0gJ25wLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQ3VzdG9tZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgUmVwb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIEltcGFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQ2F0ZWdvcnknfSA9ICdLYXRlZ29yaWEgem1pYW55JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhiZWZvcmUvYWZ0ZXIpJ30gPSAnKHByemVkL3BvKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoYmV0d2VlbiknfSA9ICcocG9tacSZZHp5KSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgQ2hhbmdlIGFzIFRlbXBsYXRlJ30gPSAnWmFwaXN6IHptaWFuxJkgamFrbyBzemFibG9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdGVtcGxhdGUgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ1N6YWJsb24gcG93aW5pZW4gbWllxIcgbmF6d8SZISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcGxhdGUgbmFtZSBpcyByZXF1aXJlZC4nfSA9ICdOYXp3YSBzemFibG9udSBqZXN0IHd5bWFnYW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBTdGF0ZXMnfSA9ICdSZXNldHVqIHN0YW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcndyaXRlIG9yaWdpbmFsIHRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCBjaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRpbWVTbG90CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIFRpbWUgU2xvdCd9ID0gJ1ByemVzdcWEIHByemVkemlhxYIgY3phc3UnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjamUgbyB6bWlhbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRWZmb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjY291bnRlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbml0aWF0b3IocyknfSA9ICdJbmljamF0b3J6eSB6bWlhbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCJ30gPSAnQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ09zdGF0bmlhIHptaWFuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdPc3RhdG5pbyB6bWllbmlvbmUgcHJ6ZXonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICdPayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gYmxvY2tzLCB5b3UgbWlnaHQgbmVlZCB0byBwcmVzcyBDdHJsIG9yIENtZCBvciBTaGlmdCBrZXkgd2hpbGUgY2xpY2tpbmcgdGhlIGxpbmsgKGRlcGVuZGluZyBvbiB5b3VyIGJyb3dzZXIgYW5kIE9TKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnUG9iaWVyeiB6YcWCxIVjem5payc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENBQiBUZW1wbGF0ZSd9ID0gJ0VkeXR1aiBzemFibG9uIENBQic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBjaGFuZ2UgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5ldyBjaGFuZ2Ugd2lsbCBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgaXQgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyB3b3Jrb3JkZXIgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB0ZW1wb3JhcnkgY2hhbmdlIHdpbGwgYmUgY3JlYXRlZCB3aGljaCBjb250YWlucyB0aGUgd29ya29yZGVyLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wb3JhcnkgY2hhbmdlIGFuZCBuZXcgd29ya29yZGVyIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSB3b3Jrb3JkZXIgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgSUQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb250ZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUZW1wbGF0ZSBDb250ZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUZW1wbGF0ZSd9ID0gJ1VzdcWEIHN6YWJsb24nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlciB0byAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RydWN0aW9uJ30gPSAnSW5zdHJ1a2NqYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHdvcmtvcmRlciB0eXBlLid9ID0gJ05pZXByYXdpZMWCb3d5IHR5cCB6YWRhbmlhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgcGxhbm5lZCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBwbGFubmVkIGVuZCB0aW1lISd9ID0gJ1BsYW5vd2FueSBjemFzIHN0YXJ0dSBtdXNpIGJ5xIcgcHJ6ZWQgcGxhbm93YW55bSBjemFzZW0ga2/FhGNhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGZvcm1hdC4nfSA9ICdOaWVwcmF3aWTFgm93eSBmb3JtYXQuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBXb3Jrb3JkZXIgVGVtcGxhdGUnfSA9ICdXc2thxbwgc3phYmxvbiB6YWRhbmlhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZ2VudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBXb3Jrb3JkZXIgQWdlbnQgb2YgJXMlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgd29ya29yZGVyPyd9ID0gJ0N6eSBuYSBwZXdubyBjaGNlc3ogdXN1bsSFxIcgdG8gemFkYW5pZT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBub3QgZGVsZXRlIHRoaXMgV29ya29yZGVyLiBJdCBpcyB1c2VkIGluIGF0IGxlYXN0IG9uZSBDb25kaXRpb24hJ30gPQogICAgICAgICdOaWUgbW/FvGVzeiB1c3VuxIXEhyB0ZWdvIHphZGFuaWEuIEplc3Qgb25vIHXFvHl3YW5lIHcgcHJ6eW5ham1uaWVqIGplZG55bSB3YXJ1bmt1ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIFdvcmtvcmRlciBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgQ29uZGl0aW9uKHMpJ30gPSAnVG8gemFkYW5pZSBqZXN0IHXFvHl3YW5lIHcgbmFzdMSZcHVqxIVjeWNoIHdhcnVua2FjaCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzLSVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgZm9sbG93aW5nIHdvcmtvcmRlcnMgYWNjb3JkaW5nbHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhlIHBsYW5uZWQgZW5kIHRpbWUgb2YgdGhpcyB3b3Jrb3JkZXIgaXMgY2hhbmdlZCwgdGhlIHBsYW5uZWQgc3RhcnQgdGltZXMgb2YgYWxsIGZvbGxvd2luZyB3b3Jrb3JkZXJzIHdpbGwgYmUgY2hhbmdlZCBhY2NvcmRpbmdseSd9ID0KICAgICAgICAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMtJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclJlcG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBSZXBvcnQgb2YgJXMlcy0lcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnQnfSA9ICdSYXBvcnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIHRpbWUhJ30gPSAnUnplY3p5d2lzdHkgY3phcyBzdGFydHUgbXVzaSBiecSHIHByemVkIHJ6ZWN6dHdpc3R5bSBjemFzZW0ga2/FhGNhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWN0dWFsIHN0YXJ0IHRpbWUgbXVzdCBiZSBzZXQsIHdoZW4gdGhlIGFjdHVhbCBlbmQgdGltZSBpcyBzZXQhJ30gPQogICAgICAgICdSemVjenl3aXN0eSBjemFzIHN0YXJ0dSBtdXNpIGJ5xIcgdXN0YXdpb255IGdkeSB1c3Rhd2lvbnkgamVzdCByemVjenl3aXN0eSBjemFzIGtvxYRjYSEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRha2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgQWdlbnQnfSA9ICdBa3R1YWxueSBhZ2VudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gdGFrZSB0aGlzIHdvcmtvcmRlcj8nfSA9ICdDenkgbmEgcGV3bm8gY2hjZXN6IHd6acSFxIcgdG8gemFkYW5pZT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIFdvcmtvcmRlciBhcyBUZW1wbGF0ZSd9ID0gJ1phcGlzeiB6YWRhbmllIGpha28gc3phYmxvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgd29ya29yZGVyIChhbmQgc3Vycm91bmRpbmcgY2hhbmdlKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEluZm9ybWF0aW9uJ30gPSAnWmFkYW5pZS1pbmZvcm1hY2plJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vua25vd24gbm90aWZpY2F0aW9uICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSB3YXMgYW4gZXJyb3IgY3JlYXRpbmcgdGhlIG5vdGlmaWNhdGlvbi4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ2hhbmdlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgd2l0aCBUaWNrZXRJRCAlcyBkb2VzIG5vdCBleGlzdCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlzc2luZyBzeXNjb25maWcgb3B0aW9uICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBhZGQgY2hhbmdlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSBmcm9tIHRlbXBsYXRlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ0FCVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjaGFuZ2UgZm91bmQgZm9yIGNoYW5nZUlEICVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgQ0FCIG9mIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIHRoZSB0ZW1wbGF0ZS4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNvbmRpdGlvbi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIENvbmRpdGlvbklEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gJXMgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBjcmVhdGUgbmV3IGNvbmRpdGlvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBDb25kaXRpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBFeHByZXNzaW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgbmV3IEV4cHJlc3Npb24hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgQWN0aW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgbmV3IEFjdGlvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBFeHByZXNzaW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQWN0aW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yOiBVbmtub3duIGZpZWxkIHR5cGUgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uSUQgJXMgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBnaXZlbiBDaGFuZ2VJRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgZG9lcyBub3QgaGF2ZSBhbiBhbGxvd2VkIGNoYW5nZSBzdGF0ZSB0byBiZSBkZWxldGVkISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNoYW5nZUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VIaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBhcyBubyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biB0eXBlICIlcyIgZW5jb3VudGVyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VIaXN0b3J5Wm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSB6b29tLCBubyBIaXN0b3J5RW50cnlJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeUVudHJ5ICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSBDQUIgZm9yIENoYW5nZSAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNYW5hZ2VyLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogQ2hhbmdlTWFuYWdlcid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBDQUInfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU15Q2hhbmdlcy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IENoYW5nZXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU15V29ya09yZGVycy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IFdvcmtvcmRlcnMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVBJUi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFBJUid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUFNBLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUFNBJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgdGhlIHdvcmtvcmRlciBpcyBub3QgYXR0YWNoZWQgdG8gYSBjaGFuZ2UhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGNyZWF0ZSBvdXRwdXQsIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duIGNoYW5nZSB0aXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlcid9ID0gJ1phZGFuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93biB3b3Jrb3JkZXIgdGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgT3ZlcnZpZXcgKCVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkU3RhcnRUaW1lJ30gPSAnUGxhbm93YW55IHN0YXJ0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWRFbmRUaW1lJ30gPSAnUGxhbm93YW55IGtvbmllYyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxTdGFydFRpbWUnfSA9ICdSemVjenl3aXN0eSBzdGFydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxFbmRUaW1lJ30gPSAnUnplY3p5d2lzdHkga29uaWVjJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VSZXNldC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHJlc2V0IFdvcmtPcmRlciAlcyBvZiBDaGFuZ2UgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byByZXNldCBDaGFuZ2UgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VTY2hlZHVsZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IENoYW5nZSBTY2hlZHVsZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZVRpdGxlJ30gPSAnVHl0dcWCIHptaWFueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJzJ30gPSAnWmFkYW5pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VTdGF0ZSd9ID0gJ1N0YW4gem1pYW55JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTZWFyY2ggUmVzdWx0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29yayBPcmRlciBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEp1c3RpZmljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEluc3RydWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBSZXBvcnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbXBhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBCeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEFnZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZm9yZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjaGFuZ2UgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSB0aGUgdGVtcGxhdGUgIiVzIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBjaGFuZ2UgIiVzIi4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRpbWVTbG90LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlIGNhblwndCBiZSBtb3ZlZCwgYXMgaXQgaGFzIG5vIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciBmaXJzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IG1vdmUgYSBjaGFuZ2Ugd2hpY2ggYWxyZWFkeSBoYXMgc3RhcnRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIG1vdmUgdGhlIGluZGl2aWR1YWwgd29ya29yZGVycyBpbnN0ZWFkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY3VycmVudCAlcyBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlICVzIG9mIGFsbCB3b3Jrb3JkZXJzIGhhcyB0byBiZSBkZWZpbmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gbW92ZSB0aW1lIHNsb3QgZm9yIHdvcmtvcmRlciAjJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgJXMgcGVybWlzc2lvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gVGVtcGxhdGVJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHRlbXBsYXRlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICIlcyIhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSB3b3Jrb3JkZXIgZnJvbSB0ZW1wbGF0ZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBUZW1wbGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyBvbiB0aGUgY2hhbmdlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIHdvcmtvcmRlciEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFnZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHNldCB0aGUgd29ya29yZGVyIGFnZW50IG9mIHRoZSB3b3Jrb3JkZXIgIiVzIiB0byBlbXB0eSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIHRoZSB3b3Jrb3JkZXIgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGZpbmQgQ2hhbmdlIGZvciBXb3JrT3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHdvcmtvcmRlciAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgV29ya09yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6Oid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgZW50cnkgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSBab29tJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUYWtlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdGFrZSB0aGUgd29ya29yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB3b3Jrb3JkZXIgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXQvSVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBjb25maWcgb3B0aW9uICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgb3B0aW9uICVzIG5lZWRzIHRvIGJlIGEgSEFTSCByZWYhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNvbmZpZyBvcHRpb24gZm91bmQgZm9yIHRoZSB2aWV3ICIlcyIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpdGxlOiAlcyB8IFR5cGU6ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgQ0FCcyd9ID0gJ01vamUgQ0FCeSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBDaGFuZ2VzJ30gPSAnTW9qZSB6bWlhbnknOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015V29ya09yZGVycy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgV29yayBPcmRlcnMnfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01DaGFuZ2VNYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlcXVlc3RlZCd9ID0gJ8W8xIVkYW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIGFwcHJvdmFsJ30gPSAnY3pla2EgbmEgemdvZMSZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlamVjdGVkJ30gPSAnb2RyenVjb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FwcHJvdmVkJ30gPSAnemF0d2llcmR6b25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luIHByb2dyZXNzJ30gPSAndyB0b2t1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3BlbmRpbmcgcGlyJ30gPSAnY3pla2EgbmEgcmVjZW56asSZIChQSVIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3N1Y2Nlc3NmdWwnfSA9ICd6YWtvxYRjem9uZSBwb215xZtsbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ZhaWxlZCd9ID0gJ3pha2/FhGN6b25lIG5pZXBvbXnFm2xuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2FuY2VsZWQnfSA9ICdhbnVsb3dhbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmV0cmFjdGVkJ30gPSAnd3ljb2ZhbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY3JlYXRlZCd9ID0gJ3V0d29yem9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhY2NlcHRlZCd9ID0gJ3phYWtjZXB0b3dhbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVhZHknfSA9ICdnb3Rvd2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYXBwcm92YWwnfSA9ICd6YXR3aWVyZHphbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dvcmtvcmRlcid9ID0gJ3phZGFuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmFja291dCd9ID0gJ3d5Y29mYW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydkZWNpc2lvbid9ID0gJ2RlY3l6amEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGlyJ30gPSAncmVjZW56amEgKFBJUiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMnfSA9ICdqZXN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCd9ID0gJ25pZSBqZXN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGVtcHR5J30gPSAncHVzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbm90IGVtcHR5J30gPSAnbmllcHVzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZ3JlYXRlciB0aGFuJ30gPSAnamVzdCB3acSZa3N6ZSBvZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBsZXNzIHRoYW4nfSA9ICdqZXN0IG1uaWVqc3plIG9kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGJlZm9yZSd9ID0gJ3ByemVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGFmdGVyJ30gPSAncG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY29udGFpbnMnfSA9ICd6YXdpZXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBjb250YWlucyd9ID0gJ25pZSB6YXdpZXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZ2lucyB3aXRoJ30gPSAnemFjenluYSBzacSZIG9kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2VuZHMgd2l0aCd9ID0gJ2tvxYRjenkgc2nEmSBuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzZXQnfSA9ICd1c3Rhdyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbGlzdCBvZiB0aGUgYWdlbnRzIHdobyBoYXZlIHBlcm1pc3Npb24gdG8gdGFrZSB3b3Jrb3JkZXJzLiBLZXkgaXMgYSBsb2dpbiBuYW1lLiBDb250ZW50IGlzIDAgb3IgMS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2Ygd29ya29yZGVyIHN0YXRlcywgYXQgd2hpY2ggdGhlIEFjdHVhbFN0YXJ0VGltZSBvZiBhIHdvcmtvcmRlciB3aWxsIGJlIHNldCBpZiBpdCB3YXMgZW1wdHkgYXQgdGhpcyBwb2ludC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyJ30gPSAnRG9kYWogemFkYW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyIChmcm9tIFRlbXBsYXRlKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBjaGFuZ2UgZnJvbSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgKGZyb20gdGVtcGxhdGUpIHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgZnJvbSB0ZW1wbGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgQ0lQIG1hdHJpeC4nfSA9ICdaYXJ6xIVkemFuaWUgbWFjaWVyesSFIEtXUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgc3RhdGUgbWFjaGluZS4nfSA9ICdaYXJ6xIVkemFuaWUgbWFzenluxIUgc3RhbsOzdyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2UgYWR2aXNvcnkgYm9hcmRzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgbWFuYWdlZCBieSB0aGUgdXNlci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIE1lbWJlciBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgY2hhbmdlIG1hbmFnZW1lbnQgdG9vbGJhcnMuIERlZmF1bHQ6IDMgaG91cnMgKDE4MCBtaW51dGVzKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudC4gRGVmYXVsdDogNSBkYXlzICg3MjAwIG1pbnV0ZXMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBDQUIgVGVtcGxhdGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW52b2x2ZWQgUGVyc29ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdMaW1pdCBwcnplZ2zEhWR1IHptaWFuICJNYcWCZSInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZSd9ID0gJ0hhcm1vbm9ncmFtIHptaWFueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2NoZWR1bGUuJ30gPSAnSGFybW9ub2dyYW0gem1pYW55Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFuZCBXb3Jrb3JkZXIgVGVtcGxhdGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhbmQgd29ya29yZGVyIHRlbXBsYXRlcyBlZGl0ZWQgYnkgdGhpcyB1c2VyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYXJlYS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGludm9sdmVkIHBlcnNvbnMgb2YgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGxpbWl0IHBlciBwYWdlIGZvciBDaGFuZ2UgT3ZlcnZpZXcgIlNtYWxsIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb24gRWRpdCd9ID0gJ0VkeWNqYSB3YXJ1bmt1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbiBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmUgd2hpY2ggc2NyZWVuIHNob3VsZCBiZSBzaG93biBhZnRlciBhIG5ldyB3b3Jrb3JkZXIgaGFzIGJlZW4gY3JlYXRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmVzIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCB3aGVuIHBsYW5uZWQgdGhlIHN0YXJ0IHRpbWUgb3Igb3RoZXIgdGltZSB2YWx1ZXMgaGF2ZSBiZWVuIHJlYWNoZWQvcGFzc2VkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBDaGFuZ2UnfSA9ICdVdHfDs3J6IHptaWFuxJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSAoZnJvbSBUZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgY2hhbmdlIChmcm9tIHRlbXBsYXRlKSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgSVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBub3RpZmljYXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgZm9yIGEgd29ya29yZGVyLiBUaGlzIGVudHJ5IG11c3QgZXhpc3QgaW4gZ2VuZXJhbCBjYXRhbG9nIGNsYXNzIFwnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpUeXBlXCcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIHNpZ25hbHMgZm9yIGVhY2ggd29ya29yZGVyIHN0YXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBDaGFuZ2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IENoYW5nZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBXb3Jrb3JkZXIgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgV29ya29yZGVyIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjaGFuZ2UgbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgdGVtcGxhdGUgbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcHJpbnQgdGhlIGFjY291bnRlZCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcHJpbnQgdGhlIHBsYW5uZWQgZWZmb3J0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgY2hhbmdlIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSBjaGFuZ2UgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiByZWFjaGFibGUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUpIHdvcmtvcmRlciBlbmQgc3RhdGVzIHNob3VsZCBiZSBhbGxvd2VkIGlmIGEgd29ya29yZGVyIGlzIGluIGEgbG9ja2VkIHN0YXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGFjY291bnRlZCB0aW1lIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWN0dWFsIHN0YXJ0IGFuZCBlbmQgdGltZXMgc2hvdWxkIGJlIHNldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHNlYXJjaCBhbmQgdGhlIHdvcmtvcmRlciBzZWFyY2ggZnVuY3Rpb25zIGNvdWxkIHVzZSB0aGUgbWlycm9yIERCLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGNoYW5nZSBzdGF0ZSBjYW4gYmUgc2V0IGluIEFnZW50SVRTTUNoYW5nZUVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcGxhbm5lZCBlZmZvcnQgc2hvdWxkIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgcHJpbnQgYnkgY3VzdG9tZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzZWFyY2hlZCBieSBjdXN0b21lci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2V0IGJ5IGN1c3RvbWVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2hvd24gYnkgY3VzdG9tZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciBzdGF0ZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciB0aXRsZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgc2hvd24gZ3JhcGggYXR0cmlidXRlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGF0IG9ubHkgY2hhbmdlcyBjb250YWluaW5nIFdvcmtvcmRlcnMgbGlua2VkIHdpdGggc2VydmljZXMsIHdoaWNoIHRoZSBjdXN0b21lciB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIHVzZSB3aWxsIGJlIHNob3duLiBBbnkgb3RoZXIgY2hhbmdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgYWxsb3dlZCB0byBkZWxldGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFBTQSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBjaGFuZ2UgdGl0bGUgZm9yIGEgZHVtbXkgY2hhbmdlIHdoaWNoIGlzIG5lZWRlZCB0byBlZGl0IGEgd29ya29yZGVyIHRlbXBsYXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjYXRlZ29yeSBvZiBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGltcGFjdCBvZiBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciBjaGFuZ2UgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmaWVsZCB0eXBlIG9mIENvbXBhcmVWYWx1ZSBmaWVsZHMgZm9yIHdvcmtvcmRlciBhdHRyaWJ1dGVzIHVzZWQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gVmFsaWQgdmFsdWVzIGFyZSBTZWxlY3Rpb24sIFRleHQgYW5kIERhdGUuIElmIGEgdHlwZSBpcyBub3QgZGVmaW5lZCwgdGhlIGZpZWxkIHdpbGwgbm90IGJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9iamVjdCBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIGNoYW5nZSBvYmplY3RzIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY2NvdW50ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENhdGVnb3J5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VCdWlsZGVySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VNYW5hZ2VySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBEeW5hbWljRmllbGQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBJbXBhY3RJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFZmZvcnQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQcmlvcml0eUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUmVxdWVzdGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlckFnZW50SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJOdW1iZXIgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUeXBlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwZXJpb2QgKGluIHllYXJzKSwgaW4gd2hpY2ggc3RhcnQgYW5kIGVuZCB0aW1lcyBjYW4gYmUgc2VsZWN0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gYXR0cmlidXRlcyBvZiBhIHdvcmtvcmRlciBpbiB0aGUgdG9vbHRpcCBvZiB0aGUgd29ya29yZGVyIGdyYXBoIGluIHRoZSBjaGFuZ2Ugem9vbS4gVG8gc2hvdyB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMgaW4gdGhlIHRvb2x0aXAsIHRoZXkgbXVzdCBiZSBzcGVjaWZpZWQgbGlrZSBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMSwgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTIsIGV0Yy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNBQiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIFBJUiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2lnbmFscyBmb3IgZWFjaCBJVFNNQ2hhbmdlIHN0YXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0ZW1wbGF0ZSB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc2hvdyB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciBub3RpZmljYXRpb25zIHNob3VsZCBiZSBzZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyBvZiBhIGNoYW5nZSBoaXN0b3J5IGVudHJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIGFuIGFnZW50IGNhbiBleGNoYW5nZSB0aGUgWC1heGlzIG9mIGEgc3RhdCBpZiBoZSBnZW5lcmF0ZXMgb25lLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgZG9uZSBmb3IgY29uZmlnIGl0ZW0gY2xhc3Nlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyBjaGFuZ2Ugc3RhdGUgdXBkYXRlcyB3aXRoaW4gYSB0aW1lcGVyaW9kLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIHRoZSByZWxhdGlvbiBiZXR3ZWVuIGNoYW5nZXMgYW5kIGluY2lkZW50IHRpY2tldHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCB0aGUgbnVtYmVyIG9mIFJmYyB0aWNrZXRzIGEgcmVxdWVzdGVyIGNyZWF0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgKGZvciBjaGFuZ2VzIGFuZCB3b3Jrb3JkZXJzKSBzaG93biBpbiB0aGUgY2hhbmdlIHByaW50IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2Ugem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgcmVwb3J0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pY0ZpZWxkIGV2ZW50IG1vZHVsZSB0byBoYW5kbGUgdGhlIHVwZGF0ZSBvZiBjb25kaXRpb25zIGlmIGR5bmFtaWMgZmllbGRzIGFyZSBhZGRlZCwgdXBkYXRlZCBvciBkZWxldGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcndhcmQgc2NoZWR1bGUgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb3ZlciBhcHByb3ZlZCBjaGFuZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDQUIgVGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ29uZGl0aW9uIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlciBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgUElSIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBub3RpZmljYXRpb24gcnVsZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VzJ30gPSAnWm1pYW55IElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeUNBQiBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeUNoYW5nZXMgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlXb3Jrb3JkZXJzIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIERlbGV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0IENBQi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0IENvbnRlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBjbGVhbnMgdXAgY29uZGl0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBjYWNoZSBmb3IgYSB0b29sYmFyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBtYXRjaGVzIGNvbmRpdGlvbnMgYW5kIGV4ZWN1dGVzIGFjdGlvbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBzZW5kcyBub3RpZmljYXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNvbmRpdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byByZWNhbGN1bGF0ZSB0aGUgd29ya29yZGVyIG51bWJlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRvIHNldCB0aGUgYWN0dWFsIHN0YXJ0IGFuZCBlbmQgdGltZXMgb2Ygd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNQ2hhbmdlJ30gPSAnWm1pYW5hSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNV29ya09yZGVyJ30gPSAnWmFkYW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBmcmVxdWVuY3kgaXMgXCdyZWd1bGFybHlcJywgeW91IGNhbiBjb25maWd1cmUgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IChldmVyeSBYIGhvdXJzKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9nZmlsZSBmb3IgdGhlIElUU00gY2hhbmdlIGNvdW50ZXIuIFRoaXMgZmlsZSBpcyB1c2VkIGZvciBjcmVhdGluZyB0aGUgY2hhbmdlIG51bWJlcnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIENBQiBtZW1iZXJzIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIGFnZW50cywgdXNlZCBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayBpZiBXb3JrT3JkZXJBZGQgb3IgV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlIHNob3VsZCBiZSBwZXJtaXR0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBDQUIgbWVtYmVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBhZ2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgYnVpbGRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgbWFuYWdlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIG5vIHdvcmtvcmRlciBhZ2VudCBpcyBzZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIHRoZSBhZ2VudCBpcyBjb250YWluZWQgaW4gdGhlIGNvbmZpZ3VyZWQgbGlzdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBhIGxpbmsgdG8gY3JlYXRlIGEgY2hhbmdlIGZyb20gdGhpcyB0aWNrZXQuIFRoZSB0aWNrZXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGxpbmtlZCB3aXRoIHRoZSBuZXcgY2hhbmdlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIGFsbCB3b3Jrb3JkZXJzIGluIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyAoZnJvbSB0ZW1wbGF0ZSknfSA9ICdOb3d5ICh6IHN6YWJsb251KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IHVzZXJzIG9mIHRoZXNlIGdyb3VwcyBoYXZlIHRoZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdGlja2V0IHR5cGVzIGFzIGRlZmluZWQgaW4gIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIgaWYgdGhlIGZlYXR1cmUgIlRpY2tldDo6QWNsOjpNb2R1bGUjIyMyMDAtVGlja2V0OjpBY2w6Ok1vZHVsZSIgaXMgZW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIGFsbCBDaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQSVInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldyknfSA9ICdQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQU0EnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIFVzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFzayBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNoYW5nZXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgY2hhbmdlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXNlbnRzIGEgbGluayBpbiB0aGUgbWVudSB0byBzaG93IHRoZSBpbnZvbHZlZCBwZXJzb25zIGluIGEgY2hhbmdlLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggY2hhbmdlIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSAoUFNBKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHkgKFBTQSkgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb2YgYXBwcm92ZWQgY2hhbmdlcyBhbmQgdGhlaXIgc2VydmljZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyBpbiBvcmRlciBmb3IgYW4gYWdlbnQgdG8gdGFrZSBhIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGFjY2VzcyB0aGUgb3ZlcnZpZXcgb2YgYWxsIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWRkIGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNoYW5nZSB0aGUgd29ya29yZGVyIGFnZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZXNcJyBDQUIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzIGZyb20gdGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgYSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBpbnZvbHZlZCBwZXJzb25zIG9mIGEgY2hhbmdlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gbW92ZSBjaGFuZ2VzIGluIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcHJpbnQgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcmVzZXQgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyBhIENBQiBtZW1iZXIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IG92ZXJ2aWV3IG92ZXIgYWxsIHRlbXBsYXRlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgem9vbSBvZiBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIENoYW5nZSBTY2hlZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIGNoYW5nZSBQU0EuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2VzIHdpdGggYW4gdXBjb21pbmcgUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gd3JpdGUgYSByZXBvcnQgZm9yIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIHRhc2sgdG8gY2hlY2sgaWYgc3BlY2lmaWMgdGltZXMgaGF2ZSBiZWVuIHJlYWNoZWQgaW4gY2hhbmdlcyBhbmQgd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIGNoYW5nZSBhcyBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2hlZHVsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY3JlZW4gYWZ0ZXIgY3JlYXRpbmcgYSB3b3Jrb3JkZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMnfSA9ICdXeXN6dWtpd2FuaWUgem1pYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNoYW5nZSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNoYW5nZSBudW1iZXIsIHRoZSBTeXN0ZW1JRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQgd2l0aCBTeXN0ZW1JRC5jb3VudGVyIGZvcm1hdCAoZS5nLiAxMDAxMTgsIDEwMDExOSkuIFdpdGggIkRhdGUiLCB0aGUgY2hhbmdlIG51bWJlcnMgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgYSBjb3VudGVyOyB0aGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LmNvdW50ZXIsIGUuZy4gMjAxMDA2MjQwMDAwMSwgMjAxMDA2MjQwMDAwMi4gV2l0aCAiRGF0ZUNoZWNrc3VtIiwgdGhlIGNvdW50ZXIgd2lsbCBiZSBhcHBlbmRlZCBhcyBjaGVja3N1bSB0byB0aGUgc3RyaW5nIG9mIGRhdGUgcGx1cyB0aGUgU3lzdGVtSUQuIFRoZSBjaGVja3N1bSB3aWxsIGJlIHJvdGF0ZWQgb24gYSBkYWlseSBiYXNpcy4gVGhpcyBmb3JtYXQgbG9va3MgbGlrZSBZZWFyLk1vbnRoLkRheS5TeXN0ZW1JRC5Db3VudGVyLkNoZWNrU3VtLCBlLmcuIDIwMTAwNjI0MTAwMDAwMTcsIDIwMTAwNjI0MTAwMDAwMjYuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBhZ2VudCBmb3IgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRJVFNNQ2hhbmdlWm9vbSBhbmQgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIG1pbmltYWwgY2hhbmdlIGNvdW50ZXIgc2l6ZSAoaWYgIkF1dG9JbmNyZW1lbnQiIHdhcyBzZWxlY3RlZCBhcyBJVFNNQ2hhbmdlOjpOdW1iZXJHZW5lcmF0b3IpLiBEZWZhdWx0IGlzIDUsIHRoaXMgbWVhbnMgdGhlIGNvdW50ZXIgc3RhcnRzIGZyb20gMTAwMDAuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3IgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3Igd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBjaGVja2JveCBpbiB0aGUgQWdlbnRJVFNNV29ya09yZGVyRWRpdCBzY3JlZW4gdGhhdCBkZWZpbmVzIGlmIHRoZSB0aGUgZm9sbG93aW5nIHdvcmtvcmRlcnMgc2hvdWxkIGFsc28gYmUgbW92ZWQgaWYgYSB3b3Jrb3JkZXIgaXMgbW9kaWZpZWQgYW5kIHRoZSBwbGFubmVkIGVuZCB0aW1lIGhhcyBjaGFuZ2VkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBjaGFuZ2luZyB0aGUgd29ya29yZGVyIGFnZW50LCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgY2hhbmdlIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgY2hhbmdlLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIHdvcmtvcmRlciwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZWRpdGluZyB0aGUgcmVwb3J0IG9mIGEgd29ya29yZGVyLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjaGFuZ2Ugd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgd29ya29yZGVyIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBtb3ZpbmcgdGhlIHRpbWUgc2xvdCBvZiBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRha2luZyBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGNvbmRpdGlvbnMgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSB3b3Jrb3JkZXIgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgd29ya29yZGVyIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgd29ya29yZGVyIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byByZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjaGFuZ2UgaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRlIE1hY2hpbmUnfSA9ICdNYXN6eW5hIHN0YW7Ds3cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RvcmVzIGNoYW5nZSBhbmQgd29ya29yZGVyIGlkcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB0ZW1wbGF0ZSBpZCwgd2hpbGUgYSB1c2VyIGlzIGVkaXRpbmcgYSB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIFdvcmtvcmRlcid9ID0gJ1dlxbogemFkYW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIFdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBPdmVydmlldyd9ID0gJ1ByemVnbMSFZCBzemFibG9udSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY2hhbmdlLCBlLmcuIENoYW5nZSMsIE15Q2hhbmdlIy4gVGhlIGRlZmF1bHQgaXMgQ2hhbmdlIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSB3b3Jrb3JkZXIsIGUuZy4gV29ya29yZGVyIywgTXlXb3Jrb3JkZXIjLiBUaGUgZGVmYXVsdCBpcyBXb3Jrb3JkZXIjLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgQUNMIG1vZHVsZSByZXN0cmljdHMgdGhlIHVzdWFnZSBvZiB0aGUgdGlja2V0IHR5cGVzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb24gXCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXNcJywgdG8gdXNlcnMgb2YgdGhlIGdyb3VwcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpSZXN0cmljdFRpY2tldFR5cGVzOjpHcm91cHMiLiBBcyB0aGlzIEFDTCBjb3VsZCBjb2xsaWRlIHdpdGggb3RoZXIgQUNMcyB3aGljaCBhcmUgYWxzbyByZWxhdGVkIHRvIHRoZSB0aWNrZXQgdHlwZSwgdGhpcyBzeXNjb25maWcgb3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIHNob3VsZCBvbmx5IGJlIGFjdGl2YXRlZCBpZiBuZWVkZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBTbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R5cGVzIG9mIHRpY2tldHMsIHdoZXJlIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IGEgbGluayB0byBhZGQgYSBjaGFuZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICdUeXB5IHpnxYJvc3plxYQgZGxhIGt0w7NyeWNoIG5hIGVrcmFuaWUgc3pjemVnw7PFgsOzdyB6Z8WCb3N6ZW5pYSB3ecWbd2lldGxvbnkgYsSZZHppZSBsaW5rIHR3b3J6xIVjeSB6bWlhbsSZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQgKGZyb20gdGVtcGxhdGUpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBEZWxldGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSGlzdG9yeSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFJlcG9ydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29uY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVndWxhcmx5J30gPSAnJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cHRfQlJfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdDYXRlZ29yaWEgPC0+IEltcGFjdG8gPC0+IFByaW9yaWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ2F0ZWdvcnkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ0dlc3TDo28gZGUgcHJpb3JpZGFkZSBhIHBhcnRpciBkYSBjb21iaW5hw6fDo28gZGEgY2F0ZWdvcmlhIDwtPiBJbXBhY3RvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQXRyaWJ1aXIgcHJpb3JpZGFkZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ2hhbmdlTm90aWZpY2F0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZU1hbmFnZW1lbnQgTm90aWZpY2F0aW9uIE1hbmFnZW1lbnQnfSA9ICdHZXJlbmNpYW1lbnRvIGRlIE5vdGlmaWNhw6fDtWVzIGRlIEdlcsOqbmNpYSBkZSBNdWRhbsOnYSBJVFNNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOb3RpZmljYXRpb24gUnVsZSd9ID0gJ0FkaWNpb25hciBSZWdyYSBkZSBOb3RpZmljYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1bGUnfSA9ICdSZWdyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG5vdGlmaWNhdGlvbiBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnQSBub3RpZmljYcOnw6NvIHByZWNpc2EgZGUgdW0gbm9tZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZC4nfSA9ICdOb21lIMOpIG9icmlnYXTDs3Jpby4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTVN0YXRlTWFjaGluZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gU3RhdGUgTWFjaGluZSd9ID0gJ0dlcmVuY2lhciBNw6FxdWluYSBkZSBFc3RhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgY2F0YWxvZyBjbGFzcyEnfSA9ICdTZWxlY2lvbmUgdW1hIGNsYXNzZSBkZSBjYXTDoWxvZ28hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0YWxvZyBjbGFzcyBpcyByZXF1aXJlZCEnfSA9ICdVbWEgY2xhc3NlIGRlIGNhdMOhbG9nbyDDqSBuZWNlc3PDoXJpYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgc3RhdGUgdHJhbnNpdGlvbid9ID0gJ0FkaWNpb25hciB1bWEgdHJhbnNpw6fDo28gZGUgZXN0YWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdDbGFzc2UgZGUgQ2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBOYW1lJ30gPSAnTm9tZSBkbyBPYmpldG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb3ZlciBzdGF0ZSB0cmFuc2l0aW9ucyBmb3InfSA9ICdSZXZpc8OjbyBkZSB1bWEgdHJhbnNpw6fDo28gZGUgZXN0YWRvIHBhcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgc3RhdGUgdHJhbnNpdGlvbid9ID0gJ0V4Y2x1aXIgZXN0YSB0cmFuc2nDp8OjbyBkZSBlc3RhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgbmV3IHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAnQWRpY2lvbmFyIHVtYSBub3ZhIHRyYW5zacOnw6NvIGRlIGVzdGFkbyBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBzdGF0ZSEnfSA9ICdQb3IgZmF2b3Igc2VsZWNpb25lIHVtIGVzdGFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhIG5leHQgc3RhdGUhJ30gPSAnUG9yIGZhdm9yLCBlc2NvbGhhIG8gcHLDs3hpbW8gZXN0YWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IGEgc3RhdGUgdHJhbnNpdGlvbiBmb3InfSA9ICdFZGl0YXIgdW1hIHRyYW5zacOnw6NvIGRlIGVzdGFkbyBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIHN0YXRlIHRyYW5zaXRpb24nfSA9ICdWb2PDqiBxdWVyIG1lc21vIGV4Y2x1aXIgZXN0YSB0cmFuc2nDp8OjbyBkZSBlc3RhZG8/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDaGFuZ2UnfSA9ICdBZGljaW9uYXIgTXVkYW7Dp2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UnfSA9ICdNdWRhbsOnYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdXN0aWZpY2F0aW9uJ30gPSAnSnVzdGlmaWNhdGl2YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnB1dCBpbnZhbGlkLid9ID0gJ0VudHJhZGEgaW52w6FsaWRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBEYXRlJ30gPSAnRGF0YSBTb2xpY2l0YWRhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBDaGFuZ2UgVGVtcGxhdGUnfSA9ICdTZWxlY2lvbmUgbW9kZWxvIGRlIG11ZGFuw6dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgdHlwZSd9ID0gJ1RpcG8gZGUgSG9yw6FyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCB0aW1lIHR5cGUuJ30gPSAnVGlwbyBkZSBob3LDoXJpbyBpbnbDoWxpZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB0aW1lJ30gPSAnTm92byBob3LDoXJpbyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ0FCVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgQ2hhbmdlIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJ1NhbHZhciBDQ00gZGEgTXVkYW7Dp2EgY29tbyBtb2RlbG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gdG8gaW52b2x2ZWQgcGVyc29ucyBzY3JlZW4nfSA9ICdpciBwYXJhIGEgdGVsYSAiUGVzc29hcyBFbnZvbHZpZGFzIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIE5hbWUnfSA9ICdOb21lIGludsOhbGlkbyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25zIGFuZCBBY3Rpb25zJ30gPSAnQ29uZGnDp8O1ZXMgZSBBw6fDtWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25kaXRpb24nfSA9ICdFeGNsdWlyIENvbmRpw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBjb25kaXRpb24nfSA9ICdBZGljaW9uYXIgbm92YSBjb25kacOnw6NvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENvbmRpdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIGEgdmFsaWQgbmFtZS4nfSA9ICdVbSBub21lIHbDoWxpZG8gw6kgbmVjZXNzw6FyaW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdmFsaWQgbmFtZSBpcyBuZWVkZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lOid9ID0gJ05vbWUgZHVwbGljYWRvOic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkIGJ5IGFub3RoZXIgY29uZGl0aW9uLid9ID0gJ0VzdGUgbm9tZSBqw6Egw6kgdXNhZG8gcG9yIG91dHJhIGNvbmRpw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hdGNoaW5nJ30gPSAnQ29tYmluYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FueSBleHByZXNzaW9uIChPUiknfSA9ICdRdWFscXVlciBleHByZXNzw6NvIGzDs2dpY2EgKE9VKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgZXhwcmVzc2lvbnMgKEFORCknfSA9ICdUb2RhcyBhcyBleHByZXNzw7VlcyBsw7NnaWNhcyAoRSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwcmVzc2lvbnMnfSA9ICdFeHByZXNzw7Vlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3Rvcid9ID0gJ1NlbGV0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0b3InfSA9ICdPcGVyYWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgRXhwcmVzc2lvbid9ID0gJ0V4Y2x1aXIgRXhwcmVzc8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBFeHByZXNzaW9ucyBmb3VuZC4nfSA9ICdOZW5odW1hIGV4cHJlc3PDo28gbMOzZ2ljYSBlbmNvbnRyYWRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGV4cHJlc3Npb24nfSA9ICdBZGljaW9uYXIgbm92YSBleHByZXNzw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBBY3Rpb24nfSA9ICdFeGNsdWlyIEHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBBY3Rpb25zIGZvdW5kLid9ID0gJ05lbmh1bWEgYcOnw6NvIGVuY29udHJhZGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgYWN0aW9uJ30gPSAnQWRpY2lvbmFyIG5vdmEgYcOnw6NvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjaGFuZ2U/J30gPSAnVm9jw6ogcXVlciByZWFsbWVudGUgZXhjbHVpciBlc3RhIG11ZGFuw6dhPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMnfSA9ICdIaXN0w7NyaWNvIGRlICVzJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyJ30gPSAnT3JkZW0gZGUgU2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBkZXRhaWxzJ30gPSAnTW9zdHJhciBkZXRhbGhlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHdvcmtvcmRlcid9ID0gJ01vc3RyYXIgT3JkZW0gZGUgU2VydmnDp28nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxlZCBoaXN0b3J5IGluZm9ybWF0aW9uIG9mICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGlmaWVkJ30gPSAnTW9kaWZpY2Fkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbGQgVmFsdWUnfSA9ICdBbnRpZ28gVmFsb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFZhbHVlJ30gPSAnTm92byB2YWxvcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEludm9sdmVkIFBlcnNvbnMgb2YgJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZvbHZlZCBQZXJzb25zJ30gPSAnUGVzc29hcyBFbnZvbHZpZGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZU1hbmFnZXInfSA9ICdHZXJlbnRlIGRhIE11ZGFuw6dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgaW52YWxpZC4nfSA9ICdVc3XDoXJpbyBpbnbDoWxpZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlQnVpbGRlcid9ID0gJ0NvbnN0cnV0b3IgZGEgTXVkYW7Dp2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEFkdmlzb3J5IEJvYXJkJ30gPSAnQ29uc2VsaG8gQ29uc3VsdGl2byBkZSBNdWRhbsOnYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgVGVtcGxhdGUnfSA9ICdNb2RlbG8gZGUgQ0NNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcGx5IFRlbXBsYXRlJ30gPSAnQXBsaWNhciBNb2RlbG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3VGVtcGxhdGUnfSA9ICdOb3ZvIG1vZGVsbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHRoaXMgQ0FCIGFzIHRlbXBsYXRlJ30gPSAnU2FsdmFyIGVzdGUgQ0NNIGNvbW8gbW9kZWxvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0byBDQUInfSA9ICdBZGljaW9uYXIgYW8gQ0NNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgVXNlcid9ID0gJ1VzdcOhcmlvIGludsOhbGlkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IENBQid9ID0gJ0NDTSBBdHVhbCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdDb25maWd1cmHDp8O1ZXMgZGUgQ29udGV4dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlcyBwZXIgcGFnZSd9ID0gJ011ZGFuw6dhcyBwb3IgcMOhZ2luYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEJ1aWxkZXInfSA9ICdDb25zdHJ1dG9yIGRhIE11ZGFuw6dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBNYW5hZ2VyJ30gPSAnR2VyZW50ZSBkYSBNdWRhbsOnYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXJzJ30gPSAnT3JkZW0gZGUgU2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0ZWQgVGltZSd9ID0gJ0hvcsOhcmlvIHNvbGljaXRhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBTdGFydCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRW5kIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsIFN0YXJ0IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsIEVuZCBUaW1lJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VSZXNldAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIHJlc2V0IHRoaXMgY2hhbmdlPyd9ID0gJ1ZvY8OqIHF1ZXIgcmVhbG1lbnRlIHJlZGVmaW5pciBlc3RhIG11ZGFuw6dhPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoZS5nLiAxMCo1MTU1IG9yIDEwNTY1OCopJ30gPSAnKGV4LiAxMCo1MTU1IG91IDEwNTY1OCopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBBZ2VudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLmcuJ30gPSAnZXguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBDdXN0b21lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBJbnN0cnVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBSZXBvcnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgUHJpb3JpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgSW1wYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBDYXRlZ29yeSd9ID0gJ0NhdGVnb3JpYSBkYSBNdWRhbsOnYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoYmVmb3JlL2FmdGVyKSd9ID0gJyhhbnRlcy9kZXBvaXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhiZXR3ZWVuKSd9ID0gJyhlbnRyZSknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBhcyBUZW1wbGF0ZSd9ID0gJ1NhbHZhciBBbHRlcmHDp8OjbyBjb21vIE1vZGVsbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHRlbXBsYXRlIHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICdVbSBtb2RlbG8gcHJlY2lzYSBkZSB1bSBub21lISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcGxhdGUgbmFtZSBpcyByZXF1aXJlZC4nfSA9ICdPIG5vbWUgZG8gbW9kZWxvIMOpIG5lY2Vzc8OhcmlvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBTdGF0ZXMnfSA9ICdSZXN0YWJlbGVjZXIgRXN0YWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVyd3JpdGUgb3JpZ2luYWwgdGVtcGxhdGUnfSA9ICdTb2JyZXNjcmV2ZXIgbW9kZWxvIG9yaWdpbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCBjaGFuZ2UnfSA9ICdFeGNsdWlyIG11ZGFuw6dhIG9yaWdpbmFsJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VUaW1lU2xvdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBUaW1lIFNsb3QnfSA9ICdEZXNsb2NhciBIb3LDoXJpb3MnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWHDp8OjbyBkYSBNdWRhbsOnYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVmZm9ydCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY2NvdW50ZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW5pdGlhdG9yKHMpJ30gPSAnSW5pY2lhZG9yKGVzKSBkYSBNdWRhbsOnYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUInfSA9ICdDQ00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnw5psdGltYSBhbHRlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfDmmx0aW1hIGFsdGVyYcOnw6NvIHBvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAnUGFyYSBhYnJpciBsaW5rcyBub3MgYmxvY29zIGRlIGRlc2NyacOnw6NvIHNlZ3VpbnRlcywgdGFsdmV6IHZvY8OqIHByZWNpc2UgcHJlc3Npb25hciBDdHJsLCBDbWQgb3UgU2hpZnQgZW5xdWFudG8gY2xpY2Egbm8gbGluayAoZGVwZW5kZW5kbyBkbyBzZXUgbmF2ZWdhZG9yIG91IHNpc3RlbWEgb3BlcmFjaW9uYWwpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnQmFpeGFyIEFuZXhvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ0FCIFRlbXBsYXRlJ30gPSAnRWRpdGFyIE1vZGVsbyBkZSBDQUInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgY2hhbmdlIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAnSXN0byBpcsOhIGNyaWFyIHVtYSBub3ZhIG11ZGFuw6dhIGEgcGFydGlyIGRlc3RlIG1vZGVsbywgYXNzaW0sIHZvY8OqIHBvZGVyw6EgZWRpdMOhLWxhIGUgc2FsdsOhLWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmV3IGNoYW5nZSB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciBpdCBoYXMgYmVlbiBzYXZlZCBhcyB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJ0Egbm92YSBtdWRhbsOnYSBzZXLDoSBleGNsdcOtZGEgYXV0b21hdGljYW1lbnRlIGFww7NzIHNlciBzYWx2YSBjb21vIG1vZGVsby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyB3b3Jrb3JkZXIgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICdJc3RvIGlyw6EgY3JpYXIgdW1hIG5vdmEgb3JkZW0gZGUgc2VydmnDp28gYSBwYXJ0aXIgZGVzdGUgbW9kZWxvLCBhc3NpbSwgdm9jw6ogcG9kZXLDoSBlZGl0w6EtbGEgZSBzYWx2w6EtbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdGVtcG9yYXJ5IGNoYW5nZSB3aWxsIGJlIGNyZWF0ZWQgd2hpY2ggY29udGFpbnMgdGhlIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJ1VtYSBtdWRhbsOnYSB0ZW1wb3LDoXJpYSBzZXLDoSBjcmlhZGEgZSBjb250ZXLDoSBhIG9yZGVtIGRlIHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcG9yYXJ5IGNoYW5nZSBhbmQgbmV3IHdvcmtvcmRlciB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciB0aGUgd29ya29yZGVyIGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAnQSBtdWRhbsOnYSB0ZW1wb3LDoXJpYSBlIGEgbm92YSBvcmRlbSBkZSBzZXJ2acOnbyBzZXLDo28gZXhjbHXDrWRhcyBhdXRvbWF0aWNhbWVudGUgYXDDs3MgYSBvcmRlbSBzZXIgc2FsdmEgY29tbyBtb2RlbG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSB3YW50IHRvIHByb2NlZWQ/J30gPSAnVm9jw6ogcXVlciBwcm9zc2VndWlyPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBJRCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENvbnRlbnQnfSA9ICdFZGl0YXIgQ29udGXDumRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUZW1wbGF0ZSBDb250ZW50J30gPSAnRWRpdGFyIENvbnRlw7pkbyBkbyBNb2RlbG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIFRlbXBsYXRlJ30gPSAnRXhjbHVpciBtb2RlbG8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlciB0byAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RydWN0aW9uJ30gPSAnSW5zdHJ1w6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCB3b3Jrb3JkZXIgdHlwZS4nfSA9ICdUaXBvIGRlIG9yZGVtIGRlIHNlcnZpw6dvIGludsOhbGlkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgcGxhbm5lZCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBwbGFubmVkIGVuZCB0aW1lISd9ID0gJ08gaG9yw6FyaW8gZGUgaW7DrWNpbyBwbGFuZWphZG8gZGV2ZSBzZXIgYW50ZXJpb3IgYW8gaG9yw6FyaW8gZGUgdMOpcm1pbm8gcGxhbmVqYWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGZvcm1hdC4nfSA9ICdGb3JtYXRvIGludsOhbGlkby4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IFdvcmtvcmRlciBUZW1wbGF0ZSd9ID0gJ1NlbGVjaW9uZSBtb2RlbG8gZGUgb3JkZW0gZGUgc2VydmnDp28nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFnZW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFdvcmtvcmRlciBBZ2VudCBvZiAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyB3b3Jrb3JkZXI/J30gPSAnVm9jw6ogcXVlciByZWFsbWVudGUgZXhjbHVpciBlc3RhIG9yZGVtIGRlIHNlcnZpw6dvPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBXb3Jrb3JkZXIuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIENvbmRpdGlvbiEnfSA9CiAgICAgICAgJ1ZvY8OqIG7Do28gcG9kZSBleGNsdWlyIGVzdGEgb3JkZW0gZGUgc2VydmnDp28uIEVsYSBlc3TDoSBzZW5kbyB1c2FkYSBwb3IgcGVsbyBtZW5vcyB1bWEgY29uZGnDp8OjbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBXb3Jrb3JkZXIgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIENvbmRpdGlvbihzKSd9ID0gJ0VzdGEgb3JkZW0gZGUgc2VydmnDp28gZXN0w6Egc2VuZG8gdXNhZGEgcGVsYShzKSBjb25kacOnw6NvKMO1ZXMpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0ICVzJXMtJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBmb2xsb3dpbmcgd29ya29yZGVycyBhY2NvcmRpbmdseSd9ID0gJ01vdmVyIGFzIHNlZ3VpbnRlcyBvcmRlbnMgZGUgYWNvcmRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHRoZSBwbGFubmVkIGVuZCB0aW1lIG9mIHRoaXMgd29ya29yZGVyIGlzIGNoYW5nZWQsIHRoZSBwbGFubmVkIHN0YXJ0IHRpbWVzIG9mIGFsbCBmb2xsb3dpbmcgd29ya29yZGVycyB3aWxsIGJlIGNoYW5nZWQgYWNjb3JkaW5nbHknfSA9CiAgICAgICAgJ1NlIG8gdMOpcm1pbm8gcGxhbmVqYWRvIGRlc3RhIG9yZGVtIGRlIHNlcnZpw6dvIGZvciBhbHRlcmFkbywgbyBob3LDoXJpbyBwbGFuZWphZG8gZGUgaW7DrWNpbyBkZSB0b2RhcyBhcyBzZWd1aW50ZXMgb3JkZW5zIHRhbWLDqW0gc2Vyw6NvIGFsdGVyYWRvcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiAlcyVzLSVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJSZXBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUmVwb3J0IG9mICVzJXMtJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0J30gPSAnUmVsYXTDs3Jpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWN0dWFsIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgdGltZSEnfSA9ICdPIGhvcsOhcmlvIGRlIGluw61jaW8gcmVhbCBkZXZlIHNlciBhbnRlcyBkbyB0ZW1wbyBmaW5hbCByZWFsICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgc2V0LCB3aGVuIHRoZSBhY3R1YWwgZW5kIHRpbWUgaXMgc2V0ISd9ID0KICAgICAgICAnTyBob3LDoXJpbyBkZSBpbsOtY2lvIHJlYWwgZGV2ZSBzZXIgZGVmaW5pZG8sIHF1YW5kbyBvIHRlbXBvIGRlIHTDqXJtaW5vIHJlYWwgw6kgY29uZmlndXJhZG8hJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJUYWtlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEFnZW50J30gPSAnQXRlbmRlbnRlIGF0dWFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byB0YWtlIHRoaXMgd29ya29yZGVyPyd9ID0gJ1ZvY8OqIHF1ZXIgcmVhbG1lbnRlIGFzc3VtaXIgZXN0YSBvcmRlbSBkZSBzZXJ2acOnbz8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIFdvcmtvcmRlciBhcyBUZW1wbGF0ZSd9ID0gJ1NhbHZhciBPcmRlbSBkZSBTZXJ2acOnbyBjb21vIE1vZGVsbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgd29ya29yZGVyIChhbmQgc3Vycm91bmRpbmcgY2hhbmdlKSd9ID0gJ0V4Y2x1aXIgYSBvcmRlbSBkZSBzZXJ2acOnbyBvcmlnaW5hbCAoZSBhIG11ZGFuw6dhIGNvcnJlc3BvbmRlbnRlKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYcOnw6NvIGRhIE9yZGVtIGRlIFNlcnZpw6dvJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vua25vd24gbm90aWZpY2F0aW9uICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSB3YXMgYW4gZXJyb3IgY3JlYXRpbmcgdGhlIG5vdGlmaWNhdGlvbi4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ2hhbmdlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgd2l0aCBUaWNrZXRJRCAlcyBkb2VzIG5vdCBleGlzdCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlzc2luZyBzeXNjb25maWcgb3B0aW9uICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBhZGQgY2hhbmdlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSBmcm9tIHRlbXBsYXRlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ0FCVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjaGFuZ2UgZm91bmQgZm9yIGNoYW5nZUlEICVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgQ0FCIG9mIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIHRoZSB0ZW1wbGF0ZS4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNvbmRpdGlvbi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIENvbmRpdGlvbklEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gJXMgaXMgZ2l2ZW4hJ30gPSAnTmVuaHVtICVzIGluZm9ybWFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGNyZWF0ZSBuZXcgY29uZGl0aW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIENvbmRpdGlvbklEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgRXhwcmVzc2lvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBBY3Rpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgQWN0aW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBBY3Rpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3I6IFVua25vd24gZmllbGQgdHlwZSAiJXMiISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25JRCAlcyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIGdpdmVuIENoYW5nZUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBkb2VzIG5vdCBoYXZlIGFuIGFsbG93ZWQgY2hhbmdlIHN0YXRlIHRvIGJlIGRlbGV0ZWQhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY2hhbmdlSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmtub3duIHR5cGUgIiVzIiBlbmNvdW50ZXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5IHpvb20sIG5vIEhpc3RvcnlFbnRyeUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5RW50cnkgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlIENBQiBmb3IgQ2hhbmdlICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU1hbmFnZXIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2VNYW5hZ2VyJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IENBQid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgQ2hhbmdlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgV29ya29yZGVycyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUElSLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUElSJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQU0EucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBQU0EnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBjcmVhdGUgb3V0cHV0LCBhcyB0aGUgd29ya29yZGVyIGlzIG5vdCBhdHRhY2hlZCB0byBhIGNoYW5nZSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgbm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gY2hhbmdlIHRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyJ30gPSAnT3JkZW0gZGUgU2VydmnDp28gSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duIHdvcmtvcmRlciB0aXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBPdmVydmlldyAoJXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWRTdGFydFRpbWUnfSA9ICdJbsOtY2lvIFBsYW5lamFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkRW5kVGltZSd9ID0gJ1TDqXJtaW5vIFBsYW5lamFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxTdGFydFRpbWUnfSA9ICdJbsOtY2lvIFJlYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsRW5kVGltZSd9ID0gJ1TDqXJtaW5vIFJlYWwnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVJlc2V0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gcmVzZXQgV29ya09yZGVyICVzIG9mIENoYW5nZSAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHJlc2V0IENoYW5nZSAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVNjaGVkdWxlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogQ2hhbmdlIFNjaGVkdWxlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VTZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlVGl0bGUnfSA9ICdUw610dWxvIGRhIE11ZGFuw6dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlcnMnfSA9ICdPcmRlbnMgZGUgU2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlU3RhdGUnfSA9ICdFc3RhZG8gZGEgTXVkYW7Dp2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCBSZXN1bHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrIE9yZGVyIFRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSnVzdGlmaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFJlcG9ydCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpb3JpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEltcGFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmVmb3JlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIHRoZSB0ZW1wbGF0ZSAiJXMiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIGNoYW5nZSAiJXMiLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjaGFuZ2UgY2FuXCd0IGJlIG1vdmVkLCBhcyBpdCBoYXMgbm8gd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIGZpcnN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgbW92ZSBhIGNoYW5nZSB3aGljaCBhbHJlYWR5IGhhcyBzdGFydGVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgbW92ZSB0aGUgaW5kaXZpZHVhbCB3b3Jrb3JkZXJzIGluc3RlYWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjdXJyZW50ICVzIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgJXMgb2YgYWxsIHdvcmtvcmRlcnMgaGFzIHRvIGJlIGRlZmluZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBtb3ZlIHRpbWUgc2xvdCBmb3Igd29ya29yZGVyICMlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBUZW1wbGF0ZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgdGVtcGxhdGUgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgIiVzIiEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIHdvcmtvcmRlciBmcm9tIHRlbXBsYXRlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVPdmVydmlldy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFRlbXBsYXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJBZGQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIG9uIHRoZSBjaGFuZ2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBhZGQgd29ya29yZGVyISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWdlbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFdvcmtPcmRlcklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gc2V0IHRoZSB3b3Jrb3JkZXIgYWdlbnQgb2YgdGhlIHdvcmtvcmRlciAiJXMiIHRvIGVtcHR5ISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgdGhlIHdvcmtvcmRlciAiJXMiISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZmluZCBDaGFuZ2UgZm9yIFdvcmtPcmRlciAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckRlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgd29ya29yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBXb3JrT3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBhcyBubyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5Wm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBlbnRyeSAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5IFpvb20nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlclRha2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB0YWtlIHRoZSB3b3Jrb3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHdvcmtvcmRlciAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9JVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIGNvbmZpZyBvcHRpb24gJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBvcHRpb24gJXMgbmVlZHMgdG8gYmUgYSBIQVNIIHJlZiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY29uZmlnIG9wdGlvbiBmb3VuZCBmb3IgdGhlIHZpZXcgIiVzIiEnfSA9ICdOw6NvIGZvcmFtIGVuY29udHJhZGFzIG9ww6fDtWVzIGRlIGNvbmZpZ3VyYcOnw6NvIHBhcmEgYSB2aXN1YWxpemHDp8OjbyAiJXMiISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaXRsZTogJXMgfCBUeXBlOiAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IENBQnMnfSA9ICdNZXVzIENDTXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015Q2hhbmdlcy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgQ2hhbmdlcyd9ID0gJ01pbmhhcyBNdWRhbsOnYXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015V29ya09yZGVycy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgV29yayBPcmRlcnMnfSA9ICcnOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01DaGFuZ2VNYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlcXVlc3RlZCd9ID0gJ1JlcXVlcmlkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIGFwcHJvdmFsJ30gPSAnQXByb3Zhw6fDo28gUGVuZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVqZWN0ZWQnfSA9ICdSZWplaXRhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYXBwcm92ZWQnfSA9ICdBcHJvdmFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbiBwcm9ncmVzcyd9ID0gJ0VtIEFuZGFtZW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIHBpcid9ID0gJ1JQSSBQZW5kZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzdWNjZXNzZnVsJ30gPSAnU3VjZXNzbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydmYWlsZWQnfSA9ICdGYWxoYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjYW5jZWxlZCd9ID0gJ0NhbmNlbGFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZXRyYWN0ZWQnfSA9ICdSZXRyYXRhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY3JlYXRlZCd9ID0gJ0NyaWFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhY2NlcHRlZCd9ID0gJ0FjZWl0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWFkeSd9ID0gJ1Byb250YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZhbCd9ID0gJ0Fwcm92YcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3dvcmtvcmRlcid9ID0gJ09yZGVtIGRlIFNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JhY2tvdXQnfSA9ICdQbGFubyBkZSBSZXRvcm5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2RlY2lzaW9uJ30gPSAnRGVjaXPDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGlyJ30gPSAnUlBJIChSZXZpc8OjbyBQw7NzLUltcGxlbWVudGHDp8OjbyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMnfSA9ICfDqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBub3QnfSA9ICduw6NvIMOpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGVtcHR5J30gPSAnw6kgdmF6aW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbm90IGVtcHR5J30gPSAnbsOjbyBlc3TDoSB2YXppbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBncmVhdGVyIHRoYW4nfSA9ICfDqSBtYWlvciBxdWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbGVzcyB0aGFuJ30gPSAnw6kgbWVub3IgcXVlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGJlZm9yZSd9ID0gJ8OpIGFudGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGFmdGVyJ30gPSAnw6kgZGVwb2lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NvbnRhaW5zJ30gPSAnY29udMOpbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgY29udGFpbnMnfSA9ICduw6NvIGNvbnTDqW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmVnaW5zIHdpdGgnfSA9ICdpbmljaWEgY29tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2VuZHMgd2l0aCd9ID0gJ3Rlcm1pbmEgY29tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3NldCd9ID0gJ2NvbmZpZ3VyYXInOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2YgdGhlIGFnZW50cyB3aG8gaGF2ZSBwZXJtaXNzaW9uIHRvIHRha2Ugd29ya29yZGVycy4gS2V5IGlzIGEgbG9naW4gbmFtZS4gQ29udGVudCBpcyAwIG9yIDEuJ30gPQogICAgICAgICdVbWEgbGlzdGEgZG9zIGFnZW50ZXMgcXVlIHTDqm0gcGVybWlzc8OjbyBwYXJhIHRlciBPcmRlbnMgZGUgU2VydmnDp28uQ2hhdmUgw6kgdW0gbm9tZSBkZSBsb2dpbi5PIGNvbnRlw7pkbyDDqSAwIG91IDEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBsaXN0IG9mIHdvcmtvcmRlciBzdGF0ZXMsIGF0IHdoaWNoIHRoZSBBY3R1YWxTdGFydFRpbWUgb2YgYSB3b3Jrb3JkZXIgd2lsbCBiZSBzZXQgaWYgaXQgd2FzIGVtcHR5IGF0IHRoaXMgcG9pbnQuJ30gPQogICAgICAgICdVbWEgbGlzdGEgZGUgZXN0YWRvcyBkZSBPcmRlbSBkZSBTZXJ2acOnbywgZW0gcXVlIGEgaG9yYSBkZSBpbsOtY2lvIHJlYWwgZGUgdW1hIE9yZGVtIGRlIFNlcnZpw6dvIHNlcsOhIGRlZmluaWRvIHNlIGVsZSBlc3RhdmEgdmF6aW8gbmVzdGUgbW9tZW50by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlcid9ID0gJ0FkaWNpb25hciBPcmRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyIChmcm9tIFRlbXBsYXRlKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBjaGFuZ2UgZnJvbSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgKGZyb20gdGVtcGxhdGUpIHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgZnJvbSB0ZW1wbGF0ZSd9ID0gJ0FkaWNpb25hciB1dGlsaXphbmRvIG1vZGVsbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgQ0lQIG1hdHJpeC4nfSA9ICdHZXJlbmNpYXIgbWF0cml6IENJUC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gb2YgdGhlIHN0YXRlIG1hY2hpbmUuJ30gPSAnR2VyZW5jaWFyIG3DoXF1aW5hIGRlIGVzdGFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlIGFkdmlzb3J5IGJvYXJkcy4nfSA9CiAgICAgICAgJ03Ds2R1bG8gZGUgbm90aWZpY2HDp8OjbyBkYSBpbnRlcmZhY2UgZG8gQXRlbmRlbnRlIHBhcmEgdmVyIG8gbsO6bWVybyBkZSBjb25zZWxob3MgY29uc3VsdGl2b3MgZGUgbXVkYW7Dp2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgbWFuYWdlZCBieSB0aGUgdXNlci4nfSA9CiAgICAgICAgJ03Ds2R1bG8gZGUgbm90aWZpY2HDp8OjbyBkYSBpbnRlcmZhY2UgZG8gQXRlbmRlbnRlIHBhcmEgdmVyIG8gbsO6bWVybyBkZSBtdWRhbsOnYXMgZ2VyZW5jaWFkbyBwZWxvIHVzdcOhcmlvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBub3RpZmljYcOnw6NvIGRhIGludGVyZmFjZSBkbyBBdGVuZGVudGUgcGFyYSB2ZXIgbyBuw7ptZXJvIGRlIGFsdGVyYcOnw7Vlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2Ygd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgTWVtYmVyIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudCB0b29sYmFycy4gRGVmYXVsdDogMyBob3VycyAoMTgwIG1pbnV0ZXMpLid9ID0KICAgICAgICAnVGVtcG8gZGUgY2FjaGUsIGVtIG1pbnV0b3MsIHBhcmEgYXMgYmFycmFzIGRlIGZlcnJhbWVudGFzIGRlIGdlcmVuY2lhbWVudG8gZGUgbXVkYW7Dp2FzLiBQYWRyw6NvOiAzIGhvcmFzICgxODAgbWludXRvcykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50LiBEZWZhdWx0OiA1IGRheXMgKDcyMDAgbWludXRlcykuJ30gPQogICAgICAgICdUZW1wbyBkZSBjYWNoZSwgZW0gbWludXRvcywgcGFyYSBvIGdlcmVuY2lhbWVudG8gZGUgbXVkYW7Dp2FzLiBQYWRyw6NvOiA1IGRpYXMgKDcyMDAgbWludXRvcykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBDQUIgVGVtcGxhdGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW52b2x2ZWQgUGVyc29ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdMaW1pdGUgcGFyYSBhIHZpc8OjbyBkZSBtdWRhbsOnYXMgInBlcXVlbm8iJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2NoZWR1bGUnfSA9ICdQcm9ncmFtYcOnw6NvIGRhcyBGdXR1cmFzIE11ZGFuw6dhcyAoUEZNKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2NoZWR1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIFdvcmtvcmRlciBUZW1wbGF0ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFuZCB3b3Jrb3JkZXIgdGVtcGxhdGVzIGVkaXRlZCBieSB0aGlzIHVzZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhcmVhLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgaW52b2x2ZWQgcGVyc29ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgbGltaXQgcGVyIHBhZ2UgZm9yIENoYW5nZSBPdmVydmlldyAiU21hbGwiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2Ugc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnQWx0ZXJhciBidXNjYSBhcG9pYWRhcyBkbyByb3RlYWRvciBkbyBhZ2VudGUgZGUgaW50ZXJmYWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbiBFZGl0J30gPSAnRWRpdGFyIENvbmRpw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIE92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyZSB3aGljaCBzY3JlZW4gc2hvdWxkIGJlIHNob3duIGFmdGVyIGEgbmV3IHdvcmtvcmRlciBoYXMgYmVlbiBjcmVhdGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyZXMgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IHdoZW4gcGxhbm5lZCB0aGUgc3RhcnQgdGltZSBvciBvdGhlciB0aW1lIHZhbHVlcyBoYXZlIGJlZW4gcmVhY2hlZC9wYXNzZWQuJ30gPQogICAgICAgICdDb25maWd1cmEgYSBmcmVxw7zDqm5jaWEgY29tIHF1ZSBhcyBub3RpZmljYcOnw7VlcyBzw6NvIGVudmlhZGFzIHF1YW5kbyBvIHRlbXBvIHByZXZpc3RvIGRlIGluw61jaW8gb3Ugb3V0cm9zIHZhbG9yZXMgZGUgdGVtcG8gdGVyIHNpZG8gYXRpbmdpZG8vcGFzc291Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgQ2hhbmdlJ30gPSAnQ3JpYXIgTXVkYW7Dp2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSAoZnJvbSBUZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgY2hhbmdlIChmcm9tIHRlbXBsYXRlKSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgSVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBub3RpZmljYXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgZm9yIGEgd29ya29yZGVyLiBUaGlzIGVudHJ5IG11c3QgZXhpc3QgaW4gZ2VuZXJhbCBjYXRhbG9nIGNsYXNzIFwnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpUeXBlXCcuJ30gPQogICAgICAgICdUaXBvIHBhZHLDo28gZGUgT3JkZW0gZGUgU2VydmnDp28uRXN0YSBlbnRyYWRhIGRldmUgZXhpc3RpciBuYSBjbGFzc2UgY2F0w6Fsb2dvIGdlcmFsIFwnSVRTTTo6R2VzdMOjbyBkYSBNdWRhbsOnYTo6T3JkZW0gZGUgU2VydmnDp286OlRpcG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJ0RlZmluYSBBw6fDtWVzIG9uZGUgdW0gYm90w6NvIGRlIGNvbmZpZ3VyYcOnw7VlcyBlc3TDoSBkaXNwb27DrXZlbCBubyB3aWRnZXQgZGUgb2JqZXRvcyB2aW5jdWxhZG9zIChMaW5rT2JqZWN0OjpWaWV3TW9kZT0iY29tcGxleCIpLiBPYnNlcnZlIHF1ZSBlc3NhcyBhw6fDtWVzIGRldmVtIHRlciByZWdpc3RyYWRvIG9zIHNlZ3VpbnRlcyBhcnF1aXZvcyBKUyBlIENTUzogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgZSBDb3JlLkFnZW50IC5MaW5rT2JqZWN0LmpzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIHNpZ25hbHMgZm9yIGVhY2ggd29ya29yZGVyIHN0YXRlLid9ID0gJ0RlZmluacOnw6NvIGRvcyBhdmlzb3MgcGFyYSBjYWRhIGVzdGFkbyBkZSBPcmRlbSBkZSBTZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgQ2hhbmdlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBDaGFuZ2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgV29ya29yZGVyIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IFdvcmtvcmRlciBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY2hhbmdlIGxpc3QuJ30gPQogICAgICAgICdEZWZpbmUgdW1hIHZpc8OjbyBnbG9iYWwgZG8gbcOzZHVsbyBwYXJhIG1vc3RyYXIgdW1hIHBlcXVlbmEgdmlzw6NvIGRhIGxpc3RhIGRlIG11ZGFuw6dhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHRlbXBsYXRlIGxpc3QuJ30gPQogICAgICAgICdEZWZpbmUgdW1hIHZpc8OjbyBnbG9iYWwgZG8gbcOzZHVsbyBwYXJhIG1vc3RyYXIgdW1hIHBlcXVlbmEgdmlzdMOjbyBkYSBsaXN0YSBkZSBtb2RlbG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcHJpbnQgdGhlIGFjY291bnRlZCB0aW1lLid9ID0gJ0RlZmluZSBzZSBzZXLDoSBwb3Nzw612ZWwgaW1wcmltaXIgbyB0ZW1wbyBjb250YWJpbGl6YWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcHJpbnQgdGhlIHBsYW5uZWQgZWZmb3J0Lid9ID0gJ0RlZmluZSBzZSBzZXLDoSBwb3Nzw612ZWwgaW1wcmltaXIgbyBlc2ZvcsOnbyBwbGFuZWphZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgcmVhY2hhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lKSBjaGFuZ2UgZW5kIHN0YXRlcyBzaG91bGQgYmUgYWxsb3dlZCBpZiBhIGNoYW5nZSBpcyBpbiBhIGxvY2tlZCBzdGF0ZS4nfSA9CiAgICAgICAgJ0RlZmluZSBzZSBhY2Vzc8OtdmVsIChjb21vIGRlZmluaWRvIHBlbGEgbcOhcXVpbmEgZGUgZXN0YWRvcykgZXN0YWRvcyBmaW5haXMgZGUgbXVkYW7Dp2FzIGRldmUgc2VyIHBlcm1pdGlkbyBzZSBhIG11ZGFuw6dhIGVzdGl2ZXIgZW0gdW0gZXN0YWRvIGJsb3F1ZWFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiByZWFjaGFibGUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUpIHdvcmtvcmRlciBlbmQgc3RhdGVzIHNob3VsZCBiZSBhbGxvd2VkIGlmIGEgd29ya29yZGVyIGlzIGluIGEgbG9ja2VkIHN0YXRlLid9ID0KICAgICAgICAnRGVmaW5lIHNlIGFjZXNzw612ZWwgKGNvbW8gZGVmaW5pZG8gcGVsYSBtw6FxdWluYSBkZSBlc3RhZG9zKSBlc3RhZG9zIGZpbmFpcyBkZSBvcmRlbnMgZGUgc2VydmnDp28gZGV2ZSBzZXIgcGVybWl0aWRvIHNlIGEgb3JkZW0gZXN0aXZlciBlbSB1bSBlc3RhZG8gYmxvcXVlYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBhY2NvdW50ZWQgdGltZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnRGVmaW5lIHNlIG8gdGVtcG8gY29udGFiaWxpemFkbyBkZXZlIHNlciBtb3N0cmFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWN0dWFsIHN0YXJ0IGFuZCBlbmQgdGltZXMgc2hvdWxkIGJlIHNldC4nfSA9ICdEZWZpbmUgc2UgbyByZWFsIGluw61jaW8gZSBkZSB0w6lybWlubyBkZXZlIHNlciBkZWZpbmlkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHNlYXJjaCBhbmQgdGhlIHdvcmtvcmRlciBzZWFyY2ggZnVuY3Rpb25zIGNvdWxkIHVzZSB0aGUgbWlycm9yIERCLid9ID0KICAgICAgICAnRGVmaW5lIHNlIGFzIGZ1bsOnw7VlcyBkZSBidXNjYSBkZSBtdWRhbsOnYSBlIGRlIG9yZGVtIGRlIHNlcnZpw6dvIHBvZGVtIHVzYXIgbyBCRCBlc3BlbGhvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBjaGFuZ2Ugc3RhdGUgY2FuIGJlIHNldCBpbiBBZ2VudElUU01DaGFuZ2VFZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIHNlIG8gZXN0YWRvIGRlIG11ZGFuw6dhIHBvZGUgc2VyIGRlZmluaWRhIGVtIEF0ZW5kZW50ZUlUU01FZGl0YXJNdWRhbsOnYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcGxhbm5lZCBlZmZvcnQgc2hvdWxkIGJlIHNob3duLid9ID0gJ0RlZmluZSBzZSBvIGVzZm9yw6dvIHBsYW5lamFkbyBkZXZlIHNlciBtb3N0cmFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHByaW50IGJ5IGN1c3RvbWVyLid9ID0gJ0RlZmluZSBzZSBhIGRhdGEgc29saWNpdGFkYSBkZXZlcsOhIHNlciBpbXByZXNzYSBwb3IgY2xpZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2VhcmNoZWQgYnkgY3VzdG9tZXIuJ30gPQogICAgICAgICdEZWZpbmUgc2UgYSBkYXRhIHNvbGljaXRhZGEgZGV2ZXLDoSBzZXIgcGVzcXVpc2FkbyBwZWxvIGNsaWVudGUuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2V0IGJ5IGN1c3RvbWVyLid9ID0gJ0RlZmluZSBzZSBhIGRhdGEgc29saWNpdGFkYSBkZXZlcsOhIHNlciBkZWZpbmlkbyBwZWxvIGNsaWVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzaG93biBieSBjdXN0b21lci4nfSA9ICdEZWZpbmUgc2UgYSBkYXRhIHNvbGljaXRhZGEgZGV2ZSBzZXIgaW5kaWNhZGEgcGVsbyBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSB3b3Jrb3JkZXIgc3RhdGUgc2hvdWxkIGJlIHNob3duLid9ID0gJ0RlZmluZSBzZSBvIGVzdGFkbyBkYSBPcmRlbSBkZSBTZXJ2acOnbyBkZXZlIHNlciBtb3N0cmFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHRpdGxlIHNob3VsZCBiZSBzaG93bi4nfSA9ICdEZWZpbmUgc2UgbyB0w610dWxvIGRhIE9yZGVtIGRlIFNlcnZpw6dvIGRldmUgc2VyIG1vc3RyYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHNob3duIGdyYXBoIGF0dHJpYnV0ZXMuJ30gPSAnRGVmaW5lIG1vc3RyYWRvIGF0cmlidXRvcyBncsOhZmljby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGF0IG9ubHkgY2hhbmdlcyBjb250YWluaW5nIFdvcmtvcmRlcnMgbGlua2VkIHdpdGggc2VydmljZXMsIHdoaWNoIHRoZSBjdXN0b21lciB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIHVzZSB3aWxsIGJlIHNob3duLiBBbnkgb3RoZXIgY2hhbmdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHNvbWVudGUgbXVkYW7Dp2FzIGNvbnRlbmRvIE9yZGVucyBkZSBTZXJ2acOnbyByZWxhY2lvbmFkYXMgY29tIG9zIHNlcnZpw6dvcywgcXVlIG8gdXN1w6FyaW8gY2xpZW50ZSB0ZW0gcGVybWlzc8OjbyBwYXJhIHV0aWxpemFyIHNlcsOhIG1vc3RyYWRvLiBRdWFpc3F1ZXIgb3V0cmFzIGFsdGVyYcOnw7VlcyBuw6NvIHNlcsOjbyBleGliaWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgYWxsb3dlZCB0byBkZWxldGUuJ30gPSAnRGVmaW5lIG9zIGVzdGFkb3MgZGUgbXVkYW7Dp2EgcXVlIHBvZGVyw6NvIHNlciBleGNsdcOtZG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIENoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgb3MgZXN0YWRvcyBkZSBtdWRhbsOnYSBxdWUgc2Vyw6NvIHV0aWxpemFkb3MgY29tbyBmaWx0cm9zIG5hIHZpc8OjbyBnbG9iYWwgZGEgRFBTIGVtIE11ZGFuw6dhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgU2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgb3MgZXN0YWRvcyBkZSBtdWRhbsOnYSBxdWUgc2Vyw6EgdXRpbGl6YWRhIGNvbW8gZmlsdHJvcyBuYSBtdWRhbsOnYSB2aXPDo28gZ2xvYmFsIGRlIGFnZW5kYW1lbnRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGVzdGFkb3MgZGUgbXVkYW7Dp2EgcXVlIHNlcsOhIHV0aWxpemFkYSBjb21vIGZpbHRyb3MgbmEgbWluaGEgdmlzw6NvIGdsb2JhbCBDQ00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGVzdGFkb3MgZGUgbXVkYW7Dp2EgcXVlIHNlcsOhIHV0aWxpemFkYSBjb21vIGZpbHRyb3MgbmEgbWluaGEgdmlzw6NvIGdsb2JhbCBkZSBtdWRhbsOnYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBlc3RhZG9zIGRlIG11ZGFuw6dhIHF1ZSBzZXLDoSB1dGlsaXphZGEgY29tbyBmaWx0cm9zIG5hIHZpc8OjbyBnbG9iYWwgZG8gZ2VyZW50ZSBkZSBtdWRhbsOnYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgb3MgZXN0YWRvcyBtdWRhbsOnYSBxdWUgc2Vyw6EgdXRpbGl6YWRhIGNvbW8gZmlsdHJvcyBuYSB2aXPDo28gZ2xvYmFsIGRlIG11ZGFuw6dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBlc3RhZG9zIGRlIG11ZGFuw6dhIHF1ZSBzZXLDoSB1dGlsaXphZGEgY29tbyBmaWx0cm9zIG5hIHZpc8OjbyBnbG9iYWwgZG8gY2xpZW50ZSBhZ2VuZGFyIGEgbXVkYW7Dp2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgY2hhbmdlIHRpdGxlIGZvciBhIGR1bW15IGNoYW5nZSB3aGljaCBpcyBuZWVkZWQgdG8gZWRpdCBhIHdvcmtvcmRlciB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJ0RlZmluZSBvIHTDrXR1bG8gcGFkcsOjbyBkZSBtdWRhbsOnYSBwYXJhIHVtYSBtdWRhbsOnYSBmaWN0w61jaWEgcXVlIMOpIG5lY2Vzc8OhcmlhIHBhcmEgZWRpdGFyIHVtIG1vZGVsbyBkZSBvcmRlbSBkZSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGNyaXTDqXJpb3MgZGUgY2xhc3NpZmljYcOnw6NvIHBhZHLDo28gbmEgdmlzw6NvIGdsb2JhbCBkYSBEUFMgZW0gbXVkYW7Dp2FzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGNyaXTDqXJpb3MgZGUgY2xhc3NpZmljYcOnw6NvIHBhZHLDo28gbmEgdmlzw6NvIGdsb2JhbCBkYSBnZXN0w6NvIGRlIG11ZGFuw6dhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAnRGVmaW5lIG9zIGNyaXTDqXJpb3MgZGUgY2xhc3NpZmljYcOnw6NvIHBhZHLDo28gbmEgdmlzw6NvIGdsb2JhbCBkZSBtdWRhbsOnYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgb3MgY3JpdMOpcmlvcyBkZSBjbGFzc2lmaWNhw6fDo28gcGFkcsOjbyBuYSB2aXPDo28gZ2xvYmFsIGRlIHByb2dyYW1hciBtdWRhbsOnYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgb3MgY3JpdMOpcmlvcyBkZSBjbGFzc2lmaWNhw6fDo28gcGFkcsOjbyBkZSBtdWRhbsOnYXMgbmEgdmlzw6NvIGdsb2JhbCBNZXUgQ0NNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBjcml0w6lyaW9zIGRlIGNsYXNzaWZpY2HDp8OjbyBwYWRyw6NvIGRlIG11ZGFuw6dhcyBuYSB2aXPDo28gZ2xvYmFsIE1pbmhhUyBNdWRhbsOnYVMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGNyaXTDqXJpb3MgZGUgY2xhc3NpZmljYcOnw6NvIHBhZHLDo28gZGUgbXVkYW7Dp2FzIG5hIHZpc8OjbyBnbG9iYWwgTWluaGEgT3JkZW0gZGUgU2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGNyaXTDqXJpb3MgZGUgY2xhc3NpZmljYcOnw6NvIHBhZHLDo28gZGUgbXVkYW7Dp2FzIG5hIHZpc8OjbyBnbG9iYWwgUlBJLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBjcml0w6lyaW9zIGRlIGNsYXNzaWZpY2HDp8OjbyBwYWRyw6NvIGRlIG11ZGFuw6dhcyBuYSB2aXPDo28gZ2xvYmFsIENhbGVuZMOhcmlvIGRlIE11ZGFuw6dhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBjcml0w6lyaW9zIGRlIGNsYXNzaWZpY2HDp8OjbyBwYWRyw6NvIGRlIG11ZGFuw6dhcyBuYSB2aXPDo28gZ2xvYmFsIE1vZGVsb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPSAnRGVmaW5lIGEgb3JkZW0gZGUgY2xhc3NpZmljYcOnw6NvIHBhZHLDo28gbmEgdmlzw6NvIGdsb2JhbCBkZSBNZXUgQ0NNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9ICdEZWZpbmUgYSBvcmRlbSBkZSBjbGFzc2lmaWNhw6fDo28gcGFkcsOjbyBuYSB2aXPDo28gZ2xvYmFsIGRlIE1pbmhhIE11ZGFuw6dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBhIG9yZGVtIGRlIGNsYXNzaWZpY2HDp8OjbyBwYWRyw6NvIG5hIHZpc8OjbyBnbG9iYWwgZGUgTWluaGEgT3JkZW0gZGUgU2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0gJ0RlZmluZSBhIG9yZGVtIGRlIGNsYXNzaWZpY2HDp8OjbyBwYWRyw6NvIG5hIHZpc8OjbyBnbG9iYWwgZGUgUlBJLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPSAnRGVmaW5lIGEgb3JkZW0gZGUgY2xhc3NpZmljYcOnw6NvIHBhZHLDo28gbmEgdmlzw6NvIGdsb2JhbCBkYSBEUFMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgYSBvcmRlbSBkZSBjbGFzc2lmaWNhw6fDo28gcGFkcsOjbyBuYSB2aXPDo28gZ2xvYmFsIGRhIGdlc3TDo28gZGUgbXVkYW7Dp2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0gJ0RlZmluZSBhIG9yZGVtIGRlIGNsYXNzaWZpY2HDp8OjbyBwYWRyw6NvIG5hIHZpc8OjbyBnbG9iYWwgZGUgbXVkYW7Dp2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIGEgb3JkZW0gZGUgY2xhc3NpZmljYcOnw6NvIHBhZHLDo28gbmEgdmlzw6NvIGdsb2JhbCBkZSBwcm9ncmFtYXIgYSBtdWRhbsOnYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgYSBvcmRlbSBkZSBjbGFzc2lmaWNhw6fDo28gcGFkcsOjbyBuYSB2aXPDo28gZ2xvYmFsIGRvIGNsaWVudGUgcHJvZ3JhbWFyIGEgbXVkYW7Dp2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPSAnRGVmaW5lIGEgb3JkZW0gZGUgY2xhc3NpZmljYcOnw6NvIHBhZHLDo28gbmEgdmlzw6NvIGdsb2JhbCBkZSBtb2RlbG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjYXRlZ29yeSBvZiBhIGNoYW5nZS4nfSA9ICdEZWZpbmUgbyB2YWxvciBwYWRyw6NvIHBhcmEgYSBjYXRlZ29yaWEgZGUgdW1hIG11ZGFuw6dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW1wYWN0IG9mIGEgY2hhbmdlLid9ID0gJ0RlZmluZSBvIHZhbG9yIHBhZHLDo28gcGFyYSBvIGltcGFjdG8gZGUgdW1hIG11ZGFuw6dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmaWVsZCB0eXBlIG9mIENvbXBhcmVWYWx1ZSBmaWVsZHMgZm9yIGNoYW5nZSBhdHRyaWJ1dGVzIHVzZWQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gVmFsaWQgdmFsdWVzIGFyZSBTZWxlY3Rpb24sIFRleHQgYW5kIERhdGUuIElmIGEgdHlwZSBpcyBub3QgZGVmaW5lZCwgdGhlIGZpZWxkIHdpbGwgbm90IGJlIHNob3duLid9ID0KICAgICAgICAnRGVmaW5lIG8gdGlwbyBkZSBjYW1wbyBwYXJhIGNvbXBhcmFyIG9zIGNhbXBvcyBkZSB2YWxvciBwYXJhIG8gYXRlbmRlbnRlIGRlIG11ZGFuw6dhLCBhdHJpYnV0b3MgZW0gSVRTTSBFZGl0YXIgQ29uZGnDp8OjbyBkZSBNdWRhbsOnYS4gT3MgdmFsb3JlcyB2w6FsaWRvcyBzw6NvIGRlIFNlbGXDp8OjbywgdGV4dG8gZSBkYXRhLiBTZSBuZW5odW0gdGlwbyDDqSBkZWZpbmlkbywgbyBjYW1wbyBuw6NvIMOpIGV4aWJpZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3Igd29ya29yZGVyIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJ30gPQogICAgICAgICdEZWZpbmUgbyB0aXBvIGRlIGNhbXBvIHBhcmEgY29tcGFyYXIgb3MgY2FtcG9zIGRlIHZhbG9yIHBhcmEgYSBPcmRlbSBkZSBTZXJ2acOnbywgYXRyaWJ1dG9zIGVtIElUU00gRWRpdGFyIENvbmRpw6fDo28gZGUgTXVkYW7Dp2EuIE9zIHZhbG9yZXMgdsOhbGlkb3Mgc8OjbyBkZSBTZWxlw6fDo28sIHRleHRvIGUgZGF0YS4gU2UgbmVuaHVtIHRpcG8gw6kgZGVmaW5pZG8sIG8gY2FtcG8gbsOjbyDDqSBleGliaWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvYmplY3QgYXR0cmlidXRlcyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciBjaGFuZ2Ugb2JqZWN0cyBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGF0cmlidXRvcyBkZSBvYmpldG8gcXVlIHPDo28gc2VsZWNpb27DoXZlaXMgcGFyYSBvYmpldG9zIGRlIG11ZGFuw6dhIGVtIG8gQXRlbnRlbnRlIEVkaXRhciBhIENvbmRpw6fDo28gZGUgTXVkYW7Dp2EgZG8gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBhdHJpYnV0b3MgZGUgb2JqZXRvIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgb2JqZXRvcyBkZSBvcmRlbSBkZSBzZXJ2acOnbyBlbSBvIEF0ZW50ZW50ZSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIE11ZGFuw6dhIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjY291bnRlZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBvcGVyYWRvcmVzIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgbyBhdHJpYnV0byBUZW1wbyBDb250YWJpbGl6YWRvcyBlbSBvIEF0ZW50ZW50ZSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIE11ZGFuw6dhIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbEVuZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBvcGVyYWRvcmVzIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgbyBhdHJpYnV0byBIb3JhIGRlIHTDqXJtaW5vIHJlYWwgZW0gbyBBdGVudGVudGUgRWRpdGFyIGEgQ29uZGnDp8OjbyBkZSBNdWRhbsOnYSBkbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBvcGVyYWRvcmVzIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgbyBhdHJpYnV0byBIb3JhIGRlIGluw61jaW8gcmVhbCBlbSBvIEF0ZW50ZW50ZSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIE11ZGFuw6dhIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENhdGVnb3J5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBvcGVyYWRvcmVzIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgbyBhdHJpYnV0byBDYXRlZ29yaWEgSUQgZW0gbyBBdGVudGVudGUgRWRpdGFyIGEgQ29uZGnDp8OjbyBkZSBNdWRhbsOnYSBkbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VCdWlsZGVySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBvcGVyYWRvcmVzIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgbyBhdHJpYnV0byBBbHRlcmFyIENvbnN0cnV0b3IgSUQgZW0gbyBBdGVudGVudGUgRWRpdGFyIGEgQ29uZGnDp8OjbyBkZSBNdWRhbsOnYSBkbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VNYW5hZ2VySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBvcGVyYWRvcmVzIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgbyBhdHJpYnV0byBBbHRlcmFyIEdlcmVudGUgSUQgZW0gbyBBdGVudGVudGUgRWRpdGFyIGEgQ29uZGnDp8OjbyBkZSBNdWRhbsOnYSBkbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgb3Mgb3BlcmFkb3JlcyBxdWUgc8OjbyBzZWxlY2lvbsOhdmVpcyBwYXJhIG8gYXRyaWJ1dG8gQWx0ZXJhciBFc3RhZG8gSUQgZW0gbyBBdGVudGVudGUgRWRpdGFyIGEgQ29uZGnDp8OjbyBkZSBNdWRhbsOnYSBkbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIG9wZXJhZG9yZXMgcXVlIHPDo28gc2VsZWNpb27DoXZlaXMgcGFyYSBvIGF0cmlidXRvIEFsdGVyYXIgVMOtdHVsbyBJRCBlbSBvIEF0ZW50ZW50ZSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIE11ZGFuw6dhIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIER5bmFtaWNGaWVsZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIG9wZXJhZG9yZXMgcXVlIHPDo28gc2VsZWNpb27DoXZlaXMgcGFyYSBvIGF0cmlidXRvIENhbXBvIERpbsOibWljbyBlbSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBJbXBhY3RJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIG9wZXJhZG9yZXMgcXVlIHPDo28gc2VsZWNpb27DoXZlaXMgcGFyYSBvIGF0cmlidXRvIEltcGFjdG8gSUQgZW0gbyBBdGVudGVudGUgRWRpdGFyIGEgQ29uZGnDp8OjbyBkZSBNdWRhbsOnYSBkbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRWZmb3J0IGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgb3Mgb3BlcmFkb3JlcyBxdWUgc8OjbyBzZWxlY2lvbsOhdmVpcyBwYXJhIG8gYXRyaWJ1dG8gRXNmb3LDp28gUGxhbmVqYWRvIGVtIG8gQXRlbnRlbnRlIEVkaXRhciBhIENvbmRpw6fDo28gZGUgTXVkYW7Dp2EgZG8gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZEVuZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBvcGVyYWRvcmVzIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgbyBhdHJpYnV0byBIb3JhIEZpbmFsIFBsYW5lamFkYSBlbSBvIEF0ZW50ZW50ZSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIE11ZGFuw6dhIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBvcGVyYWRvcmVzIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgbyBhdHJpYnV0byBIb3JhIMONbmljaW8gUGxhbmVqYWRhIGVtIG8gQXRlbnRlbnRlIEVkaXRhciBhIENvbmRpw6fDo28gZGUgTXVkYW7Dp2EgZG8gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUHJpb3JpdHlJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIG9wZXJhZG9yZXMgcXVlIHPDo28gc2VsZWNpb27DoXZlaXMgcGFyYSBvIGF0cmlidXRvIFByaW9yaWRhZGUgSUQgZW0gbyBBdGVudGVudGUgRWRpdGFyIGEgQ29uZGnDp8OjbyBkZSBNdWRhbsOnYSBkbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBSZXF1ZXN0ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgb3Mgb3BlcmFkb3JlcyBxdWUgc8OjbyBzZWxlY2lvbsOhdmVpcyBwYXJhIG8gYXRyaWJ1dG8gVGVtcG8gUmVxdWVyaWRvIGVtIG8gQXRlbnRlbnRlIEVkaXRhciBhIENvbmRpw6fDo28gZGUgTXVkYW7Dp2EgZG8gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyQWdlbnRJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIG9wZXJhZG9yZXMgcXVlIHPDo28gc2VsZWNpb27DoXZlaXMgcGFyYSBvIGF0cmlidXRvIE9yZGVtIGRlIFNlcnZpw6dvIEF0ZW5kZW50ZSBJRCBlbSBvIEF0ZW50ZW50ZSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIE11ZGFuw6dhIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlck51bWJlciBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIG9wZXJhZG9yZXMgcXVlIHPDo28gc2VsZWNpb27DoXZlaXMgcGFyYSBvIGF0cmlidXRvIE7Dum1lcm8gT3JkZW0gZGUgU2VydmnDp28gZW0gbyBBdGVudGVudGUgRWRpdGFyIGEgQ29uZGnDp8OjbyBkZSBNdWRhbsOnYSBkbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgb3Mgb3BlcmFkb3JlcyBxdWUgc8OjbyBzZWxlY2lvbsOhdmVpcyBwYXJhIG8gYXRyaWJ1dG8gRXN0YWRvIElEIE9yZGVtIGRlIFNlcnZpw6dvIGVtIG8gQXRlbnRlbnRlIEVkaXRhciBhIENvbmRpw6fDo28gZGUgTXVkYW7Dp2EgZG8gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBvcGVyYWRvcmVzIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgbyBhdHJpYnV0byBUw610dWxvIE9yZGVtIGRlIFNlcnZpw6dvIGVtIG8gQXRlbnRlbnRlIEVkaXRhciBhIENvbmRpw6fDo28gZGUgTXVkYW7Dp2EgZG8gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVHlwZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgb3Mgb3BlcmFkb3JlcyBxdWUgc8OjbyBzZWxlY2lvbsOhdmVpcyBwYXJhIG8gYXRyaWJ1dG8gVGlwbyBJRCBPcmRlbSBkZSBTZXJ2acOnbyBlbSBvIEF0ZW50ZW50ZSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIE11ZGFuw6dhIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBlcmlvZCAoaW4geWVhcnMpLCBpbiB3aGljaCBzdGFydCBhbmQgZW5kIHRpbWVzIGNhbiBiZSBzZWxlY3RlZC4nfSA9CiAgICAgICAgJ0RlZmluZSBvIHBlcsOtb2RvIChlbSBhbm9zKSwgZW0gcXVlIG9zIGhvcsOhcmlvcyBkZSBpbsOtY2lvIGUgZmltIHBvZGVtIHNlciBzZWxlY2lvbmFkb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGF0dHJpYnV0ZXMgb2YgYSB3b3Jrb3JkZXIgaW4gdGhlIHRvb2x0aXAgb2YgdGhlIHdvcmtvcmRlciBncmFwaCBpbiB0aGUgY2hhbmdlIHpvb20uIFRvIHNob3cgd29ya29yZGVyIGR5bmFtaWMgZmllbGRzIGluIHRoZSB0b29sdGlwLCB0aGV5IG11c3QgYmUgc3BlY2lmaWVkIGxpa2UgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTEsIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUyLCBldGMuJ30gPQogICAgICAgICdEZWZpbmUgb3MgYXRyaWJ1dG9zIGV4aWJpZG9zIGRlIHVtYSBvcmRlbSBkZSBzZXJ2acOnbyBuYSBkaWNhIGRvIGdyw6FmaWNvIGRlIHRhcmVmYXMgbmEgdGVsYSBkZSBkZXRhbGhlIGRhIG11ZGFuw6dhLiBQYXJhIGV4aWJpciBjYW1wb3MgZGluw6JtaWNvcyBkZSBvcmRlbSBkZSBzZXJ2acOnbyBuYSBkaWNhLCBlbGVzIGRldmVtIHNlciBlc3BlY2lmaWNhZG9zIGNvbW8gRHluYW1pY0ZpZWxkX05vbWVDYW1wb09yZGVtMSwgRHluYW1pY0ZpZWxkX05vbWVDYW1wb09yZGVtMiBldGMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBQU0Egb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmUgYXMgY29sdW5hcyBtb3N0cmFuZG8gbmEgTXVkYW7Dp2Egdmlzw6NvIGdlcmFsIGRhIERQUy4gRXN0YSBvcMOnw6NvIG7Do28gdGVtIGVmZWl0byBzb2JyZSBhIHBvc2nDp8OjbyBkYSBjb2x1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBjb2x1bmFzIG1vc3RyYW5kbyBuYSBNdWRhbsOnYSB2aXPDo28gZ2VyYWwgZGEgQWdlbmRhLiBFc3RhIG9ww6fDo28gbsOjbyB0ZW0gZWZlaXRvIHNvYnJlIGEgcG9zacOnw6NvIGRhIGNvbHVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmUgYXMgY29sdW5hcyBtb3N0cmFuZG8gYSB2aXPDo28gZ2VyYWwgZGEgTWV1IENDTS4gRXN0YSBvcMOnw6NvIG7Do28gdGVtIGVmZWl0byBzb2JyZSBhIHBvc2nDp8OjbyBkYSBjb2x1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBjb2x1bmFzIG1vc3RyYW5kbyBhIHZpc8OjbyBnZXJhbCBkYXMgTWluaGFzIE11ZGFuw6dhcy4gRXN0YSBvcMOnw6NvIG7Do28gdGVtIGVmZWl0byBzb2JyZSBhIHBvc2nDp8OjbyBkYSBjb2x1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBjb2x1bmFzIG1vc3RyYW5kbyBhIHZpc8OjbyBnZXJhbCBkYXMgTWluaGFzIE9yZGVucyBkZSBTZXJ2acOnby4gRXN0YSBvcMOnw6NvIG7Do28gdGVtIGVmZWl0byBzb2JyZSBhIHBvc2nDp8OjbyBkYSBjb2x1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIFBJUiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBjb2x1bmFzIG1vc3RyYW5kbyBhIHZpc8OjbyBnZXJhbCBkYSBSUEkuIEVzdGEgb3DDp8OjbyBuw6NvIHRlbSBlZmVpdG8gc29icmUgYSBwb3Npw6fDo28gZGEgY29sdW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBjb2x1bmFzIG1vc3RyYW5kbyBhIHZpc8OjbyBnZXJhbCBkbyBnZXJlbnRlIGRlIG11ZGFuw6dhLiBFc3RhIG9ww6fDo28gbsOjbyB0ZW0gZWZlaXRvIHNvYnJlIGEgcG9zacOnw6NvIGRhIGNvbHVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lIGFzIGNvbHVuYXMgbW9zdHJhbmRvIGEgdmlzw6NvIGdlcmFsIGRhIG11ZGFuw6dhLiBFc3RhIG9ww6fDo28gbsOjbyB0ZW0gZWZlaXRvIHNvYnJlIGEgcG9zacOnw6NvIGRhIGNvbHVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBjb2x1bmFzIG1vc3RyYW5kbyBhIHBlc3F1aXNhIGRhIG11ZGFuw6dhLiBFc3RhIG9ww6fDo28gbsOjbyB0ZW0gZWZlaXRvIHNvYnJlIGEgcG9zacOnw6NvIGRhIGNvbHVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lIGFzIGNvbHVuYXMgbW9zdHJhbmRvIGEgdmlzw6NvIGdlcmFsIGRvIGNsaWVudGUgYWdlbmRhciBhIG11ZGFuw6dhLiBFc3RhIG9ww6fDo28gbsOjbyB0ZW0gZWZlaXRvIHNvYnJlIGEgcG9zacOnw6NvIGRhIGNvbHVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmUgYXMgY29sdW5hcyBtb3N0cmFuZG8gYSB2aXPDo28gZ2VyYWwgZG8gbW9kZWxvLiBFc3RhIG9ww6fDo28gbsOjbyB0ZW0gZWZlaXRvIHNvYnJlIGEgcG9zacOnw6NvIGRhIGNvbHVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2lnbmFscyBmb3IgZWFjaCBJVFNNQ2hhbmdlIHN0YXRlLid9ID0gJ0RlZmluZSBvcyBzaW5haXMgcGFyYSBjYWRhIGVzdGFkbyBNdWRhbsOnYSBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0ZW1wbGF0ZSB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyB0aXBvcyBkZSBtb2RlbG8gcXVlIHNlcsOhIHVzYWRvIGNvbW8gZmlsdHJvcyBuYSB2aXPDo28gZ2xvYmFsIGRlIG1vZGVsby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgb3MgZXN0YWRvcyBkZSBvcmRlbSBkZSBzZXJ2acOnbyBxdWUgc2Vyw6EgdXNhZG8gY29tbyBmaWx0cm9zIG5hIHZpc8OjbyBnbG9iYWwgZGFzIE1pbmhhcyBPcmRlbnMgZGUgU2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGVzdGFkb3MgZGUgb3JkZW0gZGUgc2VydmnDp28gcXVlIHNlcsOhIHVzYWRvIGNvbW8gZmlsdHJvcyBuYSB2aXPDo28gZ2xvYmFsIGRhIFJQSS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHR5cGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNob3cgdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyB0aXBvcyBkZSBvcmRlbSBkZSBzZXJ2acOnbyBxdWUgc2Vyw6EgdXNhZG8gY29tbyBmaWx0cm9zIHBhcmEgbW9zdHJhciBuYSB2aXPDo28gZ2xvYmFsIGRhIFJQSS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGV0aGVyIG5vdGlmaWNhdGlvbnMgc2hvdWxkIGJlIHNlbnQuJ30gPSAnRGVmaW5lIHNlIGFzIG5vdGlmaWNhw6fDtWVzIGRldmVtIHNlciBlbnZpYWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMgb2YgYSBjaGFuZ2UgaGlzdG9yeSBlbnRyeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiBhbiBhZ2VudCBjYW4gZXhjaGFuZ2UgdGhlIFgtYXhpcyBvZiBhIHN0YXQgaWYgaGUgZ2VuZXJhdGVzIG9uZS4nfSA9CiAgICAgICAgJ0RldGVybWluYSBzZSB1bSBhdGVuZGVudGUgcG9kZSB0cm9jYXIgbyBlaXhvIFggZGUgdW1hIGVzdGF0w61zdGljYSBzZSBlbGUgZ2VyZSB1bS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyBkb25lIGZvciBjb25maWcgaXRlbSBjbGFzc2VzLid9ID0KICAgICAgICAnRGV0ZXJtaW5hIHNlIG8gbcOzZHVsbyBkZSBlc3RhdMOtc3RpY2FzIGNvbXVucyBwb2RlbSBnZXJhciBlc3RhdMOtc3RpY2FzIHNvYnJlIGFzIG11ZGFuw6dhcyBmZWl0YXMgcGFyYSBhcyBjbGFzc2VzIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIGNoYW5nZSBzdGF0ZSB1cGRhdGVzIHdpdGhpbiBhIHRpbWVwZXJpb2QuJ30gPQogICAgICAgICdEZXRlcm1pbmEgc2UgbyBtw7NkdWxvIGRlIGVzdGF0w61zdGljYXMgY29tdW5zIHBvZGVtIGdlcmFyIGVzdGF0w61zdGljYXMgc29icmUgYXMgbXVkYW7Dp2FzIHJlZmVyZW50ZXMgw6BzIGF0dWFsaXphw6fDtWVzIG11ZGFuw6dhIGRlIGVzdGFkbyBkZW50cm8gZGUgdW0gcGVyw61vZG8gZGUgdGVtcG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIHRoZSByZWxhdGlvbiBiZXR3ZWVuIGNoYW5nZXMgYW5kIGluY2lkZW50IHRpY2tldHMuJ30gPQogICAgICAgICdEZXRlcm1pbmEgc2UgbyBtw7NkdWxvIGRlIGVzdGF0w61zdGljYXMgY29tdW5zIHBvZGVtIGdlcmFyIGVzdGF0w61zdGljYXMgc29icmUgYXMgbXVkYW7Dp2FzIGEgcmVzcGVpdG8gZGEgcmVsYcOnw6NvIGVudHJlIGFzIG11ZGFuw6dhcyBlIG9zIGNoYW1hZG9zIGRlIGluY2lkZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcy4nfSA9CiAgICAgICAgJ0RldGVybWluYSBzZSBvIG3Ds2R1bG8gZGUgZXN0YXTDrXN0aWNhcyBjb211bnMgcG9kZW0gZ2VyYXIgZXN0YXTDrXN0aWNhcyBzb2JyZSBhcyBtdWRhbsOnYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IHRoZSBudW1iZXIgb2YgUmZjIHRpY2tldHMgYSByZXF1ZXN0ZXIgY3JlYXRlZC4nfSA9CiAgICAgICAgJ0RldGVybWluYSBzZSBvIG3Ds2R1bG8gZGUgZXN0YXTDrXN0aWNhcyBjb211bnMgcG9kZW0gZ2VyYXIgZXN0YXTDrXN0aWNhcyBzb2JyZSBvIG7Dum1lcm8gZGUgY2hhbWFkb3MgUkZDIGEgdW0gc29saWNpdGFudGUgY3JpYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyAoZm9yIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMpIHNob3duIGluIHRoZSBjaGFuZ2UgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnQ2FtcG9zIGRpbsOibWljb3MgKHBhcmEgbXVkYW7Dp2FzIGUgb3JkZW5zIGRlIHNlcnZpw6dvKSBleGliaWRvcyBuYSB0ZWxhIGRlIGltcHJlc3PDo28gZGUgbXVkYW7Dp2EgZGEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4gQ29uZmlndXJhw6fDtWVzIHBvc3PDrXZlaXM6IDAgPSBEZXNhYmlsaXRhZG8sIDEgPSBIYWJpbGl0YWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ0NhbXBvcyBkaW7Dom1pY29zIGV4aWJpZG9zIG5hIHRlbGEgZGUgY3JpYcOnw6NvIGRlIG11ZGFuw6dhIGRhIGludGVyZmFjZSBkZSBhdGVuZGVudGUuIENvbmZpZ3VyYcOnw7VlcyBwb3Nzw612ZWlzOiAwID0gRGVzYWJpbGl0YWRvLCAxID0gSGFiaWxpdGFkbywgMiA9IEhhYmlsaXRhZG8gZSByZXF1ZXJpZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ0NhbXBvcyBkaW7Dom1pY29zIGV4aWJpZG9zIG5hIHRlbGEgZGUgZWRpw6fDo28gZGUgbXVkYW7Dp2EgZGEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4gQ29uZmlndXJhw6fDtWVzIHBvc3PDrXZlaXM6IDAgPSBEZXNhYmlsaXRhZG8sIDEgPSBIYWJpbGl0YWRvLCAyID0gSGFiaWxpdGFkbyBlIHJlcXVlcmlkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnQ2FtcG9zIGRpbsOibWljb3MgZXhpYmlkb3MgbmEgdGVsYSBkZSBidXNjYSBkZSBtdWRhbsOnYSBkYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLiBDb25maWd1cmHDp8O1ZXMgcG9zc8OtdmVpczogMCA9IERlc2FiaWxpdGFkbywgMSA9IEhhYmlsaXRhZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2Ugem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICdDYW1wb3MgZGluw6JtaWNvcyBleGliaWRvcyBuYSB0ZWxhIGRlIGRldGFsaGVzIGRhIG11ZGFuw6dhIGRhIGludGVyZmFjZSBkZSBhdGVuZGVudGUuIENvbmZpZ3VyYcOnw7VlcyBwb3Nzw612ZWlzOiAwID0gRGVzYWJpbGl0YWRvLCAxID0gSGFiaWxpdGFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdDYW1wb3MgZGluw6JtaWNvcyBleGliaWRvcyBuYSB0ZWxhIGRlIGNyaWHDp8OjbyBkZSBvcmRlbSBkZSBzZXJ2acOnbyBkYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLiBDb25maWd1cmHDp8O1ZXMgcG9zc8OtdmVpczogMCA9IERlc2FiaWxpdGFkbywgMSA9IEhhYmlsaXRhZG8sIDIgPSBIYWJpbGl0YWRvIGUgcmVxdWVyaWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdDYW1wb3MgZGluw6JtaWNvcyBleGliaWRvcyBuYSB0ZWxhIGRlIGVkacOnw6NvIGRlIG9yZGVtIGRlIHNlcnZpw6dvIGRhIGludGVyZmFjZSBkZSBhdGVuZGVudGUuIENvbmZpZ3VyYcOnw7VlcyBwb3Nzw612ZWlzOiAwID0gRGVzYWJpbGl0YWRvLCAxID0gSGFiaWxpdGFkbywgMiA9IEhhYmlsaXRhZG8gZSByZXF1ZXJpZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgcmVwb3J0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnQ2FtcG9zIGRpbsOibWljb3MgZXhpYmlkb3MgbmEgdGVsYSBkZSByZWxhdMOzcmlvIGRlIG9yZGVtIGRlIHNlcnZpw6dvIGRhIGludGVyZmFjZSBkZSBhdGVuZGVudGUuIENvbmZpZ3VyYcOnw7VlcyBwb3Nzw612ZWlzOiAwID0gRGVzYWJpbGl0YWRvLCAxID0gSGFiaWxpdGFkbywgMiA9IEhhYmlsaXRhZG8gZSByZXF1ZXJpZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICdDYW1wb3MgZGluw6JtaWNvcyBleGliaWRvcyBuYSB0ZWxhIGRlIGRldGFsaGVzIGRhIG9yZGVtIGRlIHNlcnZpw6dvIGRhIGludGVyZmFjZSBkZSBhdGVuZGVudGUuIENvbmZpZ3VyYcOnw7VlcyBwb3Nzw612ZWlzOiAwID0gRGVzYWJpbGl0YWRvLCAxID0gSGFiaWxpdGFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pY0ZpZWxkIGV2ZW50IG1vZHVsZSB0byBoYW5kbGUgdGhlIHVwZGF0ZSBvZiBjb25kaXRpb25zIGlmIGR5bmFtaWMgZmllbGRzIGFyZSBhZGRlZCwgdXBkYXRlZCBvciBkZWxldGVkLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBldmVudG8gRHluYW1pY0ZpZWxkIHBhcmEgbGlkYXIgY29tIGF0dWFsaXphw6fDo28gZGUgY29uZGnDp8O1ZXMgc2UgY2FtcG9zIGRpbsOibWljb3MgZm9yZW0gYWRpY2lvbmFkb3MsIGF0dWFsaXphZG9zIG91IGV4Y2x1w61kb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcndhcmQgc2NoZWR1bGUgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb3ZlciBhcHByb3ZlZCBjaGFuZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDQUIgVGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ29uZGl0aW9uIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlciBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgUElSIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBub3RpZmljYXRpb24gcnVsZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VzJ30gPSAnTXVkYW7Dp2FzIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeUNBQiBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeUNoYW5nZXMgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlXb3Jrb3JkZXJzIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIERlbGV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0IENBQi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0IENvbnRlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBjbGVhbnMgdXAgY29uZGl0aW9ucy4nfSA9ICdNw7NkdWxvIGRlIGV2ZW50byBJVFNNIHF1ZSBsaW1wYSBjb25kacOnw7Vlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBjYWNoZSBmb3IgYSB0b29sYmFyLid9ID0gJ03Ds2R1bG8gZGUgZXZlbnRvIElUU00gcGFyYSBleGNsdWlyIG8gY2FjaGUgZGUgdW1hIGJhcnJhIGRlIHRhcmVmYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgbWF0Y2hlcyBjb25kaXRpb25zIGFuZCBleGVjdXRlcyBhY3Rpb25zLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBldmVudG8gSVRTTSBxdWUgY29pbmNpZGUgY29tIGFzIGNvbmRpw6fDtWVzIGUgZXhlY3V0YSBhcyBhw6fDtWVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHNlbmRzIG5vdGlmaWNhdGlvbnMuJ30gPSAnTcOzZHVsbyBkZSBldmVudG9zIElUU00gcXVlIGVudmlhIG5vdGlmaWNhw6fDtWVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICdNw7NkdWxvIGRlIGV2ZW50byBJVFNNIHF1ZSBhdHVhbGl6YSBvIGhpc3TDs3JpY28gZGUgbXVkYW7Dp2FzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY29uZGl0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRvIHJlY2FsY3VsYXRlIHRoZSB3b3Jrb3JkZXIgbnVtYmVycy4nfSA9ICdNw7NkdWxvIGRlIGV2ZW50byBJVFNNIHBhcmEgcmVjYWxjdWxhciBvcyBuw7ptZXJvcyBkZSBvcmRlbSBkZSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gc2V0IHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBvZiB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBldmVudG8gSVRTTSBwYXJhIGRlZmluaXIgbyB0ZW1wbyBpbsOtY2lvIGUgZGUgdMOpcm1pbm8gZGUgb3JkZW5zIGRlIHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNQ2hhbmdlJ30gPSAnTXVkYW7Dp2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTVdvcmtPcmRlcid9ID0gJ09yZGVtIGRlIFNlcnZpw6dvIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZnJlcXVlbmN5IGlzIFwncmVndWxhcmx5XCcsIHlvdSBjYW4gY29uZmlndXJlIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCAoZXZlcnkgWCBob3VycykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvZ2ZpbGUgZm9yIHRoZSBJVFNNIGNoYW5nZSBjb3VudGVyLiBUaGlzIGZpbGUgaXMgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIGNoYW5nZSBudW1iZXJzLid9ID0KICAgICAgICAnQXJxdWl2byBkZSBsb2cgcGFyYSBvIGNvbnRhZG9yIGRlIG11ZGFuw6dhIElUU00uIEVzdGUgYXJxdWl2byDDqSB1c2FkbyBwYXJhIGNyaWFyIG9zIG7Dum1lcm9zIGRlIG11ZGFuw6dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rdXAgb2YgQ0FCIG1lbWJlcnMgZm9yIGF1dG9jb21wbGV0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rdXAgb2YgYWdlbnRzLCB1c2VkIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIGlmIFdvcmtPcmRlckFkZCBvciBXb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUgc2hvdWxkIGJlIHBlcm1pdHRlZC4nfSA9CiAgICAgICAgJ03Ds2R1bG8gcGFyYSB2ZXJpZmljYXIgc2UgV29ya09yZGVyQWRkIG91IFdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZSBkZXZlbSBzZXIgcGVybWl0aWRvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBDQUIgbWVtYmVycy4nfSA9ICdNw7NkdWxvIHBhcmEgdmVyaWZpY2FyIG9zIG1lbWJyb3MgZG8gQ0NNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGFnZW50Lid9ID0gJ03Ds2R1bG8gcGFyYSB2ZXJpZmljYXIgbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIGJ1aWxkZXIuJ30gPSAnTcOzZHVsbyBwYXJhIHZlcmlmaWNhciBvIGNvbnN0cnV0b3IgZGEgbXVkYW7Dp2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPSAnTcOzZHVsbyBwYXJhIHZlcmlmaWNhciBvIGdlcmVudGUgZGUgbXVkYW7Dp2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgd29ya29yZGVyIGFnZW50Lid9ID0gJ03Ds2R1bG8gcGFyYSB2ZXJpZmljYXIgbyBhdGVuZGVudGUgZGEgb3JkZW0gZGUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIG5vIHdvcmtvcmRlciBhZ2VudCBpcyBzZXQuJ30gPSAnTcOzZHVsbyBwYXJhIHZlcmlmaWNhciBzZSBuw6NvIGV4aXN0ZSBhdGVuZGVudGUgZGUgb3JkZW0gZGUgc2VydmnDp28gZGVmaW5pZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIHRoZSBhZ2VudCBpcyBjb250YWluZWQgaW4gdGhlIGNvbmZpZ3VyZWQgbGlzdC4nfSA9CiAgICAgICAgJ03Ds2R1bG8gcGFyYSB2ZXJpZmljYXIgc2UgbyBhdGVuZGVudGUgZXN0w6EgY29udGlkbyBuYSBsaXN0YSBjb25maWd1cmFkYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYSBsaW5rIHRvIGNyZWF0ZSBhIGNoYW5nZSBmcm9tIHRoaXMgdGlja2V0LiBUaGUgdGlja2V0IHdpbGwgYmUgYXV0b21hdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgbmV3IGNoYW5nZS4nfSA9CiAgICAgICAgJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIHVtIGxpbmsgcGFyYSBjcmlhciB1bWEgbXVkYW7Dp2EgYSBwYXJ0aXIgZGVzdGUgY2hhbWFkby4gTyBjaGFtYWRvIHNlcsOhIGF1dG9tYXRpY2FtZW50ZSBsaWdhZG8gY29tIGEgbm92YSBtdWRhbsOnYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBUaW1lIFNsb3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgYWxsIHdvcmtvcmRlcnMgaW4gdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IChmcm9tIHRlbXBsYXRlKSd9ID0gJ05vdmEgKHV0aWxpemFuZG8gbW9kZWxvKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IHVzZXJzIG9mIHRoZXNlIGdyb3VwcyBoYXZlIHRoZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdGlja2V0IHR5cGVzIGFzIGRlZmluZWQgaW4gIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIgaWYgdGhlIGZlYXR1cmUgIlRpY2tldDo6QWNsOjpNb2R1bGUjIyMyMDAtVGlja2V0OjpBY2w6Ok1vZHVsZSIgaXMgZW5hYmxlZC4nfSA9CiAgICAgICAgJ1NvbWVudGUgdXN1w6FyaW9zIGRlc3NlcyBncnVwb3MgdMOqbSBwZXJtaXNzw6NvIHBhcmEgdXNhciBvcyB0aXBvcyBkZSBjaGFtYWRvcywgdGFsIGNvbW8gZGVmaW5pZG8gZW0gIk11ZGFuw6dhSVRTTTpUaXBvc0NoYW1hZG9zQWRpY2lvbmFyTGlua011ZGFuw6dhIiBzZSBvIHJlY3Vyc28gIkNoYW1hZG86OkFDTDo6IE3Ds2R1bG8jIyMyMDAtQ2hhbWFkbzo6QUNMOjpNw7NkdWxvIiDDqSBoYWJpbGl0YWRvLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb3ZlciBhbGwgQ2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpJ30gPSAnUlBJIChSZXZpc8OjbyBQw7NzLUltcGxlbWVudGHDp8OjbyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUFNBJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBVc2VyQ3JlYXRlV29ya09yZGVyTmV4dE1hc2sgb2JqZWN0IGluIHRoZSBwcmVmZXJlbmNlIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIHBhcmEgbyBvYmpldG8gVXNlckNyZWF0ZVdvcmtPcmRlck5leHRNYXNrIG5hIHRlbGEgZGUgcHJlZmVyw6puY2lhcyBkYSBpbnRlcmZhY2UgZGUgYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjaGFuZ2VzIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIGNoYW5nZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIHBhcmEgYXMgcMOhZ2luYXMgKGVtIHF1ZSBhcyBtdWRhbsOnYXMgc8OjbyBtb3N0cmFkYXMpIGRhIHBlcXVlbmEgdmlzw6NvIGdsb2JhbCBkZSBtdWRhbsOnYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJlc2VudHMgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNob3cgdGhlIGludm9sdmVkIHBlcnNvbnMgaW4gYSBjaGFuZ2UsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBjaGFuZ2UgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0FwcmVzZW50YSB1bSBsaW5rIG5vIG1lbnUgcGFyYSBtb3N0cmFyIGFzIHBlc3NvYXMgZW52b2x2aWRhcyBlbSB1bWEgbXVkYW7Dp2EsIGVtIHZpc3RhIGEgYW1wbGlhciBlc3NhIG11ZGFuw6dhIG5hIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHkgKFBTQSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpIG9mIGNoYW5nZXMuIE92ZXJ2aWV3IG9mIGFwcHJvdmVkIGNoYW5nZXMgYW5kIHRoZWlyIHNlcnZpY2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgaW4gb3JkZXIgZm9yIGFuIGFnZW50IHRvIHRha2UgYSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIGEgZmltIGRlIHVtIGFnZW50ZSB0ZXIgdW1hIG9yZGVtIGRlIHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGFjY2VzcyB0aGUgb3ZlcnZpZXcgb2YgYWxsIGNoYW5nZXMuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIGFjZXNzYXIgYSB2aXPDo28gZ2xvYmFsIGRlIHRvZGFzIGFzIGFsdGVyYcOnw7Vlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhZGQgYSB3b3Jrb3JkZXIuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIGFkaWNpb25hciB1bWEgb3JkZW0gZGUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY2hhbmdlIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIGFsdGVyYXIgbyBhdGVuZGVudGUgZGUgb3JkZW0gZGUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZS4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgY3JpYXIgdW0gbW9kZWxvIGRlIHVtYSBhbHRlcmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlc1wnIENBQi4nfSA9CiAgICAgICAgJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSBjcmlhciB1bSBtb2RlbG8gZGUgdW1hIG11ZGFuw6dhXCcgQ0NNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSB3b3Jrb3JkZXIuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIGNyaWFyIHVtIG1vZGVsbyBkZSB1bWEgb3JkZW0gZGUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMgZnJvbSB0ZW1wbGF0ZXMuJ30gPSAnUHJpdmlsw6lnaW9zIHJlcXVlcmlkb3MgcGFyYSBjcmlhciBtdWRhbsOnYXMgYSBwYXJ0aXIgZGUgbW9kZWxvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgY2hhbmdlcy4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgY3JpYXIgbXVkYW7Dp2FzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHRlbXBsYXRlLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSBjcmlhciB1bSBtb2RlbG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgd29ya29yZGVyLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSBjcmlhciB1bWEgb3JkZW0gZGUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNoYW5nZXMuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIGV4Y2x1aXIgbXVkYW7Dp2FzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgYSB0ZW1wbGF0ZS4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgZWRpdGFyIHVtIG1vZGVsby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgd29ya29yZGVyLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSBlZGl0YXIgdW1hIG9yZGVtIGRlIHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgY2hhbmdlcy4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgZWRpdGFyIHVtYSBtdWRhbsOnYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIGVkaXRhciB1bWEgY29uZGnDp8OjbyBkZSBtdWRhbsOnYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb250ZW50IG9mIGEgdGVtcGxhdGUuJ30gPSAnUHJpdmlsw6lnaW9zIHJlcXVlcmlkb3MgcGFyYSBlZGl0YXIgbyBjb250ZcO6ZG8gZGUgdW0gbW9kZWxvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGludm9sdmVkIHBlcnNvbnMgb2YgYSBjaGFuZ2UuJ30gPQogICAgICAgICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgZWRpdGFyIHBlc3NvYXMgZW52b2x2aWRhcyBuYSBtdWRhbsOnYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBtb3ZlIGNoYW5nZXMgaW4gdGltZS4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgbW92ZXIgYXMgbXVkYW7Dp2FzIG5vIHRlbXBvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHByaW50IGEgY2hhbmdlLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSBpbXByaW1pciB1bWEgbXVkYW7Dp2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcmVzZXQgY2hhbmdlcy4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgcmVkZWZpbmlyIG11ZGFuw6dhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGEgd29ya29yZGVyLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSB2aXN1YWxpemFyIHVtYSBvcmRlbSBkZSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGNoYW5nZXMuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIHZpc3VhbGl6YXIgbXVkYW7Dp2FzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIGEgQ0FCIG1lbWJlci4nfSA9CiAgICAgICAgJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSB2aXN1YWxpemFyIGEgbGlzdGEgZGUgbXVkYW7Dp2FzLCBvbmRlIG8gdXN1w6FyaW8gw6kgbWVtYnJvIGRvIENDTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPQogICAgICAgICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgdmlzdWFsaXphciBhIGxpc3RhIGRlIG11ZGFuw6dhcywgb25kZSBvIHVzdcOhcmlvIMOpIG8gZ2VyZW50ZSBkYSBtdWRhbsOnYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IG92ZXJ2aWV3IG92ZXIgYWxsIHRlbXBsYXRlcy4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgdmlzdWFsaXphciBhIHZpc8OjbyBnbG9iYWwgc29icmUgdG9kb3Mgb3MgbW9kZWxvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIHZpc3VhbGl6YXIgYXMgY29uZGnDp8O1ZXMgZGUgbXVkYW7Dp2FzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIHZpc3VhbGl6YXIgbyBoaXN0w7NyaWNvIGRlIHVtYSBtdWRhbsOnYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSB2aXN1YWxpemFyIG8gaGlzdMOzcmljbyBkZSB1bWEgb3JkZW0gZGUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgY2hhbmdlLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSB2aXN1YWxpemFyIG8gaGlzdMOzcmljbyBhbXBsaWFkbyBkZSB1bWEgbXVkYW7Dp2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgd29ya29yZGVyLid9ID0KICAgICAgICAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIHZpc3VhbGl6YXIgbyBoaXN0w7NyaWNvIGFtcGxpYWRvIGRlIHVtYSBvcmRlbSBkZSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIENoYW5nZSBTY2hlZHVsZS4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgdmlzdWFsaXphciBhIGxpc3RhIGRhIEFnZW5kYSBNdWRhbsOnYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIGNoYW5nZSBQU0EuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIHZpc3VhbGl6YXIgYSBsaXN0YSBkYSBEUFMgZW0gbXVkYW7Dp2FzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlcyB3aXRoIGFuIHVwY29taW5nIFBJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpLid9ID0KICAgICAgICAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIHZpc3VhbGl6YXIgYSBsaXN0YSBkZSBtdWRhbsOnYXMgY29tIHVtIHByw7N4aW1vIFJQSSAoUG9zdGFyIFJldmlzw6NvIGRhIEltcGxlbWVudGHDp8OjbykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBvd24gY2hhbmdlcy4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgdmlzdWFsaXphciBhIGxpc3RhIGRlIG11ZGFuw6dhcyBwcsOzcHJpYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBvd24gd29ya29yZGVycy4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgdmlzdWFsaXphciBhIGxpc3RhIGRlIG9yZGVtIGRlIHNlcnZpw6dvIHByw7NwcmlhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHdyaXRlIGEgcmVwb3J0IGZvciB0aGUgd29ya29yZGVyLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSBlc2NyZXZlciB1bSByZWxhdMOzcmlvIHBhcmEgYSBvcmRlbSBkZSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgYSBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gdGFzayB0byBjaGVjayBpZiBzcGVjaWZpYyB0aW1lcyBoYXZlIGJlZW4gcmVhY2hlZCBpbiBjaGFuZ2VzIGFuZCB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgY2hhbmdlIGFzIGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgd29ya29yZGVyIGFzIGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjaGVkdWxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjcmVlbiBhZnRlciBjcmVhdGluZyBhIHdvcmtvcmRlcid9ID0gJ1RlbGEgQXDDs3MgQ3JpYXIgT3JkZW0gZGUgU2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMnfSA9ICdQcm9jdXJhciBNdWRhbsOnYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNoYW5nZSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNoYW5nZSBudW1iZXIsIHRoZSBTeXN0ZW1JRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQgd2l0aCBTeXN0ZW1JRC5jb3VudGVyIGZvcm1hdCAoZS5nLiAxMDAxMTgsIDEwMDExOSkuIFdpdGggIkRhdGUiLCB0aGUgY2hhbmdlIG51bWJlcnMgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgYSBjb3VudGVyOyB0aGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LmNvdW50ZXIsIGUuZy4gMjAxMDA2MjQwMDAwMSwgMjAxMDA2MjQwMDAwMi4gV2l0aCAiRGF0ZUNoZWNrc3VtIiwgdGhlIGNvdW50ZXIgd2lsbCBiZSBhcHBlbmRlZCBhcyBjaGVja3N1bSB0byB0aGUgc3RyaW5nIG9mIGRhdGUgcGx1cyB0aGUgU3lzdGVtSUQuIFRoZSBjaGVja3N1bSB3aWxsIGJlIHJvdGF0ZWQgb24gYSBkYWlseSBiYXNpcy4gVGhpcyBmb3JtYXQgbG9va3MgbGlrZSBZZWFyLk1vbnRoLkRheS5TeXN0ZW1JRC5Db3VudGVyLkNoZWNrU3VtLCBlLmcuIDIwMTAwNjI0MTAwMDAwMTcsIDIwMTAwNjI0MTAwMDAwMjYuJ30gPQogICAgICAgICdTZWxlY2lvbmEgbyBtw7NkdWxvIGdlcmFkb3IgZG8gbsO6bWVybyBkYSBtdWRhbsOnYS4gIkF1dG9JbmNyZW1lbnRvIiBpbmNyZW1lbnRhIG8gbsO6bWVybyBkYSBtdWRhbsOnYTogU3lzdGVtSUQgZSBjb250YWRvciBzw6NvIHVzYWRvcyBubyBmb3JtYXRvIFN5c3RlbUlELkNvbnRhZG9yIChleC4gMTAwMTE4LCAxMDAxMTkpLiBBbyBlc2NvbGhlciAiRGF0YSIsIG9zIG7Dum1lcm9zIGRhcyBtdWRhbsOnYXMgc2Vyw6NvIGdlcmFkb3MgcGVsYSBqdW7Dp8OjbyBkYSBkYXRhIGF0dWFsIGNvbSBvIENvbnRhZG9yOiBvIGZvcm1hdG8gw6kgQW5vLk3DqnMuRGlhLkNvbnRhZG9yIChleC4gMjAxMDA2MjQwMDAwMSwgMjAxMDA2MjQwMDAwMikuIENvbSAiRGF0ZUNoZWNrc3VtIiwgbyBjb250YWRvciBzZXLDoSBhbmV4YWRvIGNvbW8gc29tYSBkZSB2ZXJpZmljYcOnw6NvIHBhcmEgYSBzZXF1w6puY2lhIGRlIGRhdGEgbWFpcyBTeXN0ZW1JRC4gQSBzb21hIGRlIHZlcmlmaWNhw6fDo28gdmFpIHNlciByb2RhZGEgbnVtYSBiYXNlIGRpw6FyaWEuIE8gZm9ybWF0byDDqSBBbm8uTcOqcy5EaWEuU3lzdGVtSUQuQ29udGFkb3IuQ2hlY2tTdW0gKGV4LiAyMDEwMDYyNDEwMDAwMDE3LCAyMDEwMDYyNDEwMDAwMDI2KS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBhZ2VudCBmb3IgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRJVFNNQ2hhbmdlWm9vbSBhbmQgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nfSA9CiAgICAgICAgJ0NvbmZpZ3VyYSBhIGFsdHVyYSBwYWRyw6NvIChlbSBwaXhlbHMpIGRlIGNhbXBvcyBIVE1MIGVtYnV0aWRvcyBuYXMgdGVsYXMgQWdlbnRJVFNNQ2hhbmdlWm9vbSBlIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50SVRTTUNoYW5nZVpvb20gYW5kIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJ30gPQogICAgICAgICdDb25maWd1cmEgYSBhbHR1cmEgbcOheGltYSAoZW0gcGl4ZWxzKSBkZSBjYW1wb3MgSFRNTCBlbWJ1dGlkb3MgbmFzIHRlbGFzIEFnZW50SVRTTUNoYW5nZVpvb20gZSBBZ2VudElUU01Xb3JrT3JkZXJab29tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBtaW5pbWFsIGNoYW5nZSBjb3VudGVyIHNpemUgKGlmICJBdXRvSW5jcmVtZW50IiB3YXMgc2VsZWN0ZWQgYXMgSVRTTUNoYW5nZTo6TnVtYmVyR2VuZXJhdG9yKS4gRGVmYXVsdCBpcyA1LCB0aGlzIG1lYW5zIHRoZSBjb3VudGVyIHN0YXJ0cyBmcm9tIDEwMDAwLid9ID0KICAgICAgICAnQ29uZmlndXJhIG8gdGFtYW5obyBtw61uaW1vIGRvIGNvbnRhZG9yIGRlIG11ZGFuw6dhIChzZSAiQXV0b0luY3JlbWVudG8iIGZvaSBzZWxlY2lvbmFkbyBjb21vIElUU01DaGFuZ2U6Ok51bWJlckdlbmVyYXRvcikuIE8gcGFkcsOjbyDDqSA1LCBvIHF1ZSBzaWduaWZpY2EgcXVlIG8gY29udGFkb3IgaW5pY2lhIGVtIDEwMDAwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHVwIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciBjaGFuZ2VzLid9ID0gJ0NvbmZpZ3VyYSBhIG3DoXF1aW5hIGRvIGVzdGFkbyBwYXJhIGFzIG11ZGFuw6dhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3Igd29ya29yZGVycy4nfSA9ICdDb25maWd1cmEgYSBtw6FxdWluYSBkbyBlc3RhZG8gcGFyYSBhcyBvcmRlbnMgZGUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgY2hlY2tib3ggaW4gdGhlIEFnZW50SVRTTVdvcmtPcmRlckVkaXQgc2NyZWVuIHRoYXQgZGVmaW5lcyBpZiB0aGUgdGhlIGZvbGxvd2luZyB3b3Jrb3JkZXJzIHNob3VsZCBhbHNvIGJlIG1vdmVkIGlmIGEgd29ya29yZGVyIGlzIG1vZGlmaWVkIGFuZCB0aGUgcGxhbm5lZCBlbmQgdGltZSBoYXMgY2hhbmdlZC4nfSA9CiAgICAgICAgJ0V4aWJlIHVtYSBjYWl4YSBkZSBtYXJjYcOnw6NvIG5hIHRlbGEgQWdlbnRJVFNNV29ya09yZGVyRWRpdCBxdWUgZGVmaW5lIHNlIGFzIG9yZGVucyBkZSBzZXJ2acOnbyBzdWJzZXF1ZW50ZXMgZGV2ZW0gdGFtYsOpbSBzZXIgbW92aWRhcyBzZSB1bWEgb3JkZW0gw6kgbW9kaWZpY2FkYSBlIG8gaG9yw6FyaW8gZGUgdMOpcm1pbm8gcGxhbmVqYWRvIGZvciBhbHRlcmFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGNoYW5naW5nIHRoZSB3b3Jrb3JkZXIgYWdlbnQsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZSBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSBjaGFuZ2UsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHF1ZSBwZXJtaXRlIGRlZmluaXIgdW1hIG11ZGFuw6dhIGNvbW8gdW0gbW9kZWxvIG5vIGFtcGxpYXIgdmlzdWFsaXphw6fDo28gZGUgbXVkYW7Dp2EsIG5hIGludGVyZmFjZSBkbyBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIHdvcmtvcmRlciwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZWRpdGluZyB0aGUgcmVwb3J0IG9mIGEgd29ya29yZGVyLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjaGFuZ2Ugd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBxdWUgcGVybWl0ZSBsaWdhciB1bWEgbXVkYW7Dp2EgY29tIG91dHJvIG9iamV0byBuYSBtdWRhbsOnYSBhbXBsaWFyIHZpc3VhbGl6YcOnw6NvIGRvIGF0ZW5kZW50ZSBkZSBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgd29ya29yZGVyIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBtb3ZpbmcgdGhlIHRpbWUgc2xvdCBvZiBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHF1ZSBwZXJtaXRlIG1vdmVyIG8gaW50ZXJ2YWxvIGRlIHRlbXBvIGRlIHVtYSBtdWRhbsOnYSBlbSBzdWEgb3BpbmnDo28sIGFtcGxpYXIgdmlzdWFsaXphw6fDo28gZGEgaW50ZXJmYWNlIGRvIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRha2luZyBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGNvbmRpdGlvbnMgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSBhY2Vzc2FyIGFzIGNvbmRpw6fDtWVzIGRlIHVtYSBtdWRhbsOnYSBhbXBsaWFyIHN1YSB2aXN1YWxpemHDp8OjbyBkbyBhdGVuZGVudGUgZGUgaW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHBhcmEgYWNlc3NhciBvIGhpc3TDs3JpY28gZGUgdW1hIG11ZGFuw6dhIGFtcGxpYXIgc3VhIHZpc3VhbGl6YcOnw6NvIGRvIGF0ZW5kZW50ZSBkZSBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWRkIGEgd29ya29yZGVyIGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHBhcmEgZXhjbHVpciBhIG11ZGFuw6dhIGVtIHN1YSB2aXPDo28gZGUgZGV0YWxoZXMgbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIHdvcmtvcmRlciBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSBlZGl0YXIgdW1hIG11ZGFuw6dhIGFtcGxpYXIgc3VhIHZpc3VhbGl6YcOnw6NvIGRvIGF0ZW5kZW50ZSBkZSBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcGFyYSB2b2x0YXIgYSBtdWRhbsOnYSBlIGFtcGxpYXIgc3VhIHZpc3VhbGl6YcOnw6NvIGRvIGF0ZW5kZW50ZSBkZSBpbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSB3b3Jrb3JkZXIgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHBhcmEgaW1wcmltaXIgdW1hIG11ZGFuw6dhIGUgYW1wbGlhciBzdWEgdmlzdWFsaXphw6fDo28gZG8gYXRlbmRlbnRlIGRlIGludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHJlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycyBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHBhcmEgcmVkZWZpbmlyIGEgbXVkYW7Dp2EgZSBzdWFzIG9yZGVucyBkZSBzZXJ2acOnbyBlbSBzdWEgdmlzw6NvIGRlIGRldGFsaGVzIG5hIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjaGFuZ2UgaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIG8gaGlzdMOzcmljbyBkZSBhbHRlcmHDp8O1ZXMgKG9yZGVuYWRvcyByZXZlcnNvKSBuYSBpbnRlcmZhY2UgZG8gYXRlbmRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0ZSBNYWNoaW5lJ30gPSAnTcOhcXVpbmEgZGUgRXN0YWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0b3JlcyBjaGFuZ2UgYW5kIHdvcmtvcmRlciBpZHMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgdGVtcGxhdGUgaWQsIHdoaWxlIGEgdXNlciBpcyBlZGl0aW5nIGEgdGVtcGxhdGUuJ30gPQogICAgICAgICdBcm1hemVuYSBJRHMgZGUgbXVkYW7Dp2EgZSBvcmRlbnMgZGUgc2VydmnDp28gZSBzdWFzIGNvcnJlc3BvbmRlbnRlcyBJRHMgZGUgbW9kZWxvLCBlbnF1YW50byB1bSB1c3XDoXJpbyBlc3TDoSBlZGl0YW5kbyBvIG1vZGVsby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXInfSA9ICdBc3N1bWlyIE9yZGVtIGRlIFNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgV29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIE92ZXJ2aWV3J30gPSAnVmlzw6NvIEdlcmFsIGRlIE1vZGVsb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNoYW5nZSwgZS5nLiBDaGFuZ2UjLCBNeUNoYW5nZSMuIFRoZSBkZWZhdWx0IGlzIENoYW5nZSMuJ30gPQogICAgICAgICdPIGlkZW50aWZpY2Fkb3IgZGUgdW1hIE11ZGFuw6dhLCBwb3IgZXhlbXBsbywgTXVkYW7Dp2EjLE1pbmhhIG11ZGFuw6dhIy4gTyBwYWRyw6NvIMOpIE11ZGFuw6dhIy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgd29ya29yZGVyLCBlLmcuIFdvcmtvcmRlciMsIE15V29ya29yZGVyIy4gVGhlIGRlZmF1bHQgaXMgV29ya29yZGVyIy4nfSA9CiAgICAgICAgJ08gaWRlbnRpZmljYWRvciBkZSB1bWEgT3JkZW0gZGUgU2VydmnDp28sIHBvciBleGVtcGxvLCBPcmRlbSBkZSBTZXJ2acOnbyMsTWluaGEgT3JkZW0gZGUgU2VydmnDp28jLiBPIHBhZHLDo28gw6kgYSBPcmRlbSBkZSBTZXJ2acOnbyMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgQUNMIG1vZHVsZSByZXN0cmljdHMgdGhlIHVzdWFnZSBvZiB0aGUgdGlja2V0IHR5cGVzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb24gXCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXNcJywgdG8gdXNlcnMgb2YgdGhlIGdyb3VwcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpSZXN0cmljdFRpY2tldFR5cGVzOjpHcm91cHMiLiBBcyB0aGlzIEFDTCBjb3VsZCBjb2xsaWRlIHdpdGggb3RoZXIgQUNMcyB3aGljaCBhcmUgYWxzbyByZWxhdGVkIHRvIHRoZSB0aWNrZXQgdHlwZSwgdGhpcyBzeXNjb25maWcgb3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIHNob3VsZCBvbmx5IGJlIGFjdGl2YXRlZCBpZiBuZWVkZWQuJ30gPQogICAgICAgICdFc3RlIG3Ds2R1bG8gQUNMIHJlc3RyaW5nZSBvIHVzbyBkb3MgdGlwb3MgZGUgY2hhbWFkbyBkZWZpbmlkb3MgbmEgb3DDp8OjbyBzeXNjb25maWcgXCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXNcJyBwYXJhIHVzdcOhcmlvcyBkb3MgZ3J1cG9zIGRlZmluaWRvcyBlbSAiSVRTTUNoYW5nZTo6UmVzdHJpY3RUaWNrZXRUeXBlczo6R3JvdXBzIi4gQ29tbyBlc3RhIEFDTCBwb2RlIGNob2NhciBjb20gb3V0cmFzIEFDTHMgdGFtYsOpbSByZWxhY2lvbmFkYXMgY29tIG8gdGlwbyBkbyBjaGFtYWRvLCBlc3RlIHBhcsOibWV0cm8gZGUgY29uZmlndXJhw6fDo28gZXN0w6EgZGVzYWJpbGl0YWRvIHBvciBwYWRyw6NvIGUgZGV2ZSBzZXIgYXRpdmFkbyBhcGVuYXMgc2UgbmVjZXNzw6FyaW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgU2xvdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlcyBvZiB0aWNrZXRzLCB3aGVyZSBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBhIGxpbmsgdG8gYWRkIGEgY2hhbmdlIHdpbGwgYmUgZGlzcGxheWVkLid9ID0KICAgICAgICAnVGlwb3MgZGUgY2hhbWFkb3MsIG9uZGUgbm8gY2hhbWFkbyBhbXBsaWEgc3VhIHZpc3VhbGl6YcOnw6NvIGRlIHVtIGxpbmsgcGFyYSBhZGljaW9uYXIgdW1hIG11ZGFuw6dhIHNlcsOhIGV4aWJpZGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQgKGZyb20gdGVtcGxhdGUpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBEZWxldGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSGlzdG9yeSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFJlcG9ydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29uY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVndWxhcmx5J30gPSAnJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cHRfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdDYXRlZ29yaWEgPC0+IEltcGFjdG8gPC0+IFByaW9yaWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ2F0ZWdvcnkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ0dlc3TDo28gZGUgUHJpb3JpZGFkZSBhIHBhcnRpciBkYSBjb21iaW5hw6fDo28gZGEgY2F0ZWdvcmlhIDwtPiBJbXBhY3RvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQXRyaWJ1aXIgUHJpb3JpZGFkZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ2hhbmdlTm90aWZpY2F0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZU1hbmFnZW1lbnQgTm90aWZpY2F0aW9uIE1hbmFnZW1lbnQnfSA9ICdHZXN0w6NvIGRlIE5vdGlmaWNhw6fDtWVzIGRlIGdlc3TDo28gZGUgQWx0ZXJhw6fDo28gSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTm90aWZpY2F0aW9uIFJ1bGUnfSA9ICdBZGljaW9uYXIgUmVncmEgZGUgTm90aWZpY2HDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdWxlJ30gPSAnUmVncmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBub3RpZmljYXRpb24gc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ0Egbm90aWZpY2HDp8OjbyBwcmVjaXNhIGRlIHVtIG5vbWUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQuJ30gPSAnTm9tZSDDqSBvYnJpZ2F0w7NyaW8uJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01TdGF0ZU1hY2hpbmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIFN0YXRlIE1hY2hpbmUnfSA9ICdHZXJpciBNw6FxdWluYSBkZSBFc3RhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgY2F0YWxvZyBjbGFzcyEnfSA9ICdTZWxlY2lvbmUgdW1hIGNsYXNzZSBkZSBjYXTDoWxvZ28hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0YWxvZyBjbGFzcyBpcyByZXF1aXJlZCEnfSA9ICdBIGNsYXNzZSBkZSBjYXTDoWxvZ28gw6kgbmVjZXNzw6FyaWEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHN0YXRlIHRyYW5zaXRpb24nfSA9ICdBZGljaW9uYXIgdW1hIHRyYW5zacOnw6NvIGRlIGVzdGFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnQ2xhc3NlIGRlIENhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgTmFtZSd9ID0gJ05vbWUgZG8gT2JqZXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG92ZXIgc3RhdGUgdHJhbnNpdGlvbnMgZm9yJ30gPSAnUmV2aXPDo28gZGEgdHJhbnNpw6fDo28gZGUgZXN0YWRvIHBhcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoaXMgc3RhdGUgdHJhbnNpdGlvbid9ID0gJ0V4Y2x1aXIgZXN0YSB0cmFuc2nDp8OjbyBkZSBlc3RhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgbmV3IHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAnQWRpY2lvbmFyIHVtYSBub3ZhIHRyYW5zacOnw6NvIGRlIGVzdGFkbyBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBzdGF0ZSEnfSA9ICdQb3IgZmF2b3Igc2VsZWNpb25lIHVtIGVzdGFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhIG5leHQgc3RhdGUhJ30gPSAnUG9yIGZhdm9yLCBlc2NvbGhhIG8gcHLDs3hpbW8gZXN0YWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IGEgc3RhdGUgdHJhbnNpdGlvbiBmb3InfSA9ICdFZGl0YXIgdW1hIHRyYW5zacOnw6NvIGRlIGVzdGFkbyBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIHN0YXRlIHRyYW5zaXRpb24nfSA9ICdWb2PDqiBxdWVyIG1lc21vIEFwYWdhciBlc3RhIHRyYW5zacOnw6NvIGRlIGVzdGFkbz8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENoYW5nZSd9ID0gJ0FkaWNpb25hciBBbHRlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSd9ID0gJ0FsdGVyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1c3RpZmljYXRpb24nfSA9ICdKdXN0aWZpY2HDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnB1dCBpbnZhbGlkLid9ID0gJ0VudHJhZGEgaW52w6FsaWRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBEYXRlJ30gPSAnRGF0YSBTb2xpY2l0YWRhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBDaGFuZ2UgVGVtcGxhdGUnfSA9ICdTZWxlY2lvbmUgbW9kZWxvIGRlIEFsdGVyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgdHlwZSd9ID0gJ1RpcG8gZGUgSG9yw6FyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCB0aW1lIHR5cGUuJ30gPSAnVGlwbyBkZSBob3LDoXJpbyBpbnbDoWxpZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB0aW1lJ30gPSAnTm92byBob3LDoXJpbyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ0FCVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgQ2hhbmdlIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJ0d1YXJkYXIgQ0FCIGRhIEFsdGVyYcOnw6NvIGNvbW8gbW9kZWxvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIHRvIGludm9sdmVkIHBlcnNvbnMgc2NyZWVuJ30gPSAnaXIgcGFyYSBvIGVjcsOjbiAiUGVzc29hcyBFbnZvbHZpZGFzIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIE5hbWUnfSA9ICdOb21lIGludsOhbGlkbyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25zIGFuZCBBY3Rpb25zJ30gPSAnQ29uZGnDp8O1ZXMgZSBBw6fDtWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25kaXRpb24nfSA9ICdBcGFnYXIgQ29uZGnDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGNvbmRpdGlvbid9ID0gJ0FkaWNpb25hciBub3ZhIGNvbmRpw6fDo28nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29uZGl0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWQgYSB2YWxpZCBuYW1lLid9ID0gJ1VtIG5vbWUgdsOhbGlkbyDDqSBuZWNlc3PDoXJpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB2YWxpZCBuYW1lIGlzIG5lZWRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWU6J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbmFtZSBpcyBhbHJlYWR5IHVzZWQgYnkgYW5vdGhlciBjb25kaXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hdGNoaW5nJ30gPSAnQ29tYmluYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FueSBleHByZXNzaW9uIChPUiknfSA9ICdRdWFscXVlciBleHByZXNzw6NvIGzDs2dpY2EgKE9VKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgZXhwcmVzc2lvbnMgKEFORCknfSA9ICdUb2RhcyBhcyBleHByZXNzw7VlcyBsw7NnaWNhcyAoRSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwcmVzc2lvbnMnfSA9ICdFeHByZXNzw7Vlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3Rvcid9ID0gJ1NlbGV0b3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0b3InfSA9ICdPcGVyYWRvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgRXhwcmVzc2lvbid9ID0gJ0V4Y2x1aXIgRXhwcmVzc8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBFeHByZXNzaW9ucyBmb3VuZC4nfSA9ICdOZW5odW1hIGV4cHJlc3PDo28gbMOzZ2ljYSBlbmNvbnRyYWRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGV4cHJlc3Npb24nfSA9ICdBZGljaW9uYXIgbm92YSBleHByZXNzw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBBY3Rpb24nfSA9ICdFeGNsdWlyIEHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBBY3Rpb25zIGZvdW5kLid9ID0gJ05lbmh1bWEgYcOnw6NvIGVuY29udHJhZGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgYWN0aW9uJ30gPSAnQWRpY2lvbmFyIG5vdmEgYcOnw6NvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjaGFuZ2U/J30gPSAnVm9jw6ogcXVlciByZWFsbWVudGUgZXhjbHVpciBlc3RhIG11ZGFuw6dhPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyJ30gPSAnT3JkZW0gZGUgU2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBkZXRhaWxzJ30gPSAnTW9zdHJhciBkZXRhbGhlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHdvcmtvcmRlcid9ID0gJ01vc3RyYXIgT3JkZW0gZGUgU2VydmnDp28nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxlZCBoaXN0b3J5IGluZm9ybWF0aW9uIG9mICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGlmaWVkJ30gPSAnTW9kaWZpY2Fkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbGQgVmFsdWUnfSA9ICdBbnRpZ28gdmFsb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFZhbHVlJ30gPSAnTm92byB2YWxvcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEludm9sdmVkIFBlcnNvbnMgb2YgJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZvbHZlZCBQZXJzb25zJ30gPSAnUGVzc29hcyBFbnZvbHZpZGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZU1hbmFnZXInfSA9ICdnZXN0b3IgZGEgQWx0ZXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBpbnZhbGlkLid9ID0gJ1V0aWxpemFkb3IgaW52w6FsaWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZUJ1aWxkZXInfSA9ICdDb25zdHJ1dG9yIGRhIEFsdGVyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBBZHZpc29yeSBCb2FyZCd9ID0gJ0NvbnNlbGhvIENvbnN1bHRpdm8gZGUgQWx0ZXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIFRlbXBsYXRlJ30gPSAnTW9kZWxvIGRlIENBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHBseSBUZW1wbGF0ZSd9ID0gJ0FwbGljYXIgTW9kZWxvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ld1RlbXBsYXRlJ30gPSAnTm92byBtb2RlbG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSB0aGlzIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJ0d1YXJkYXIgZXN0ZSBDQUIgY29tbyBtb2RlbG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRvIENBQid9ID0gJ0FkaWNpb25hciBhbyBDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBVc2VyJ30gPSAnVXRpbGl6YWRvciBpbnbDoWxpZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBDQUInfSA9ICdDQUIgQXR1YWwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnQ29uZmlndXJhw6fDtWVzIGRlIENvbnRleHRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZXMgcGVyIHBhZ2UnfSA9ICdBbHRlcmHDp8O1ZXMgcG9yIHDDoWdpbmEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgVGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFnZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBCdWlsZGVyJ30gPSAnQ29uc3RydXRvciBkYSBBbHRlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgTWFuYWdlcid9ID0gJ0dlc3RvciBkZSBBbHRlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXJzJ30gPSAnT3JkZW0gZGUgU2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0ZWQgVGltZSd9ID0gJ0hvcsOhcmlvIHNvbGljaXRhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBTdGFydCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRW5kIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsIFN0YXJ0IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsIEVuZCBUaW1lJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VSZXNldAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIHJlc2V0IHRoaXMgY2hhbmdlPyd9ID0gJ1ZvY8OqIHF1ZXIgcmVhbG1lbnRlIHJlZGVmaW5pciBlc3RhIG11ZGFuw6dhPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoZS5nLiAxMCo1MTU1IG9yIDEwNTY1OCopJ30gPSAnKGV4LiAxMCo1MTU1IG91IDEwNTY1OCopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBBZ2VudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLmcuJ30gPSAnZXguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBDdXN0b21lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBJbnN0cnVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBSZXBvcnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgUHJpb3JpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgSW1wYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBDYXRlZ29yeSd9ID0gJ0NhdGVnb3JpYSBkYSBBbHRlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoYmVmb3JlL2FmdGVyKSd9ID0gJyhhbnRlcy9kZXBvaXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhiZXR3ZWVuKSd9ID0gJyhlbnRyZSknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBhcyBUZW1wbGF0ZSd9ID0gJ0d1YXJkYXIgQWx0ZXJhw6fDo28gY29tbyBNb2RlbG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB0ZW1wbGF0ZSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnVW0gbW9kZWxvIHByZWNpc2EgZGUgdW0gbm9tZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHRlbXBsYXRlIG5hbWUgaXMgcmVxdWlyZWQuJ30gPSAnTyBub21lIGRvIG1vZGVsbyDDqSBuZWNlc3PDoXJpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgU3RhdGVzJ30gPSAnUmVzdGFiZWxlY2VyIEVzdGFkb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcndyaXRlIG9yaWdpbmFsIHRlbXBsYXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCBjaGFuZ2UnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRpbWVTbG90CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIFRpbWUgU2xvdCd9ID0gJ0Rlc2xvY2FyIEhvcsOhcmlvcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYcOnw6NvIGRhIEFsdGVyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRWZmb3J0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjY291bnRlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbml0aWF0b3IocyknfSA9ICdJbmljaWFkb3IoZXMpIGRhIEFsdGVyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQid9ID0gJ0NBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfDmmx0aW1hIGFsdGVyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ8OabHRpbWEgYWx0ZXJhw6fDo28gcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnT2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG8gb3BlbiBsaW5rcyBpbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIGJsb2NrcywgeW91IG1pZ2h0IG5lZWQgdG8gcHJlc3MgQ3RybCBvciBDbWQgb3IgU2hpZnQga2V5IHdoaWxlIGNsaWNraW5nIHRoZSBsaW5rIChkZXBlbmRpbmcgb24geW91ciBicm93c2VyIGFuZCBPUykuJ30gPQogICAgICAgICdQYXJhIGFicmlyIGFzIGxpZ2HDp8O1ZXMgYWJhaXhvIHBvZGVyw6EgbmVjZXNzaXRhciBkZSBwcmVtaXIgYSB0ZWNsYSBDVFJMIChvdSBDTUQpIG91IFNoaWZ0IChkZXBlbmRlbmRvIGRvIGJyb3dzZXIgZSBkbyBzaXN0ZW1hIG9wZXJhdGl2bykgcXVhbmRvIGNsaWNhciBzb2JyZSBhIGxpZ2HDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnRGVzY2FycmVnYXIgQW5leG8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlRWRpdENBQgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDQUIgVGVtcGxhdGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgY2hhbmdlIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuZXcgY2hhbmdlIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIGl0IGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgd29ya29yZGVyIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdGVtcG9yYXJ5IGNoYW5nZSB3aWxsIGJlIGNyZWF0ZWQgd2hpY2ggY29udGFpbnMgdGhlIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcG9yYXJ5IGNoYW5nZSBhbmQgbmV3IHdvcmtvcmRlciB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciB0aGUgd29ya29yZGVyIGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSB3YW50IHRvIHByb2NlZWQ/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIElEJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29udGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGVtcGxhdGUgQ29udGVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgVGVtcGxhdGUnfSA9ICdBcGFnYXIgbW9kZWxvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgdG8gJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0cnVjdGlvbid9ID0gJ0luc3RydcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgd29ya29yZGVyIHR5cGUuJ30gPSAnVGlwbyBkZSBvcmRlbSBkZSBzZXJ2acOnbyBpbnbDoWxpZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHBsYW5uZWQgc3RhcnQgdGltZSBtdXN0IGJlIGJlZm9yZSB0aGUgcGxhbm5lZCBlbmQgdGltZSEnfSA9ICdPIHRlbXBvIGRlIGluw61jaW8gcGxhbmVhZG8gZGV2ZSBzZXIgYW50ZXJpb3IgYW8gaG9yw6FyaW8gZGUgZmltIHBsYW5lYWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGZvcm1hdC4nfSA9ICdGb3JtYXRvIEludsOhbGlkby4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IFdvcmtvcmRlciBUZW1wbGF0ZSd9ID0gJ1NlbGVjaW9uZSBtb2RlbG8gZGUgb3JkZW0gZGUgc2VydmnDp28nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFnZW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFdvcmtvcmRlciBBZ2VudCBvZiAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyB3b3Jrb3JkZXI/J30gPSAnRGVzZWphIGFwYWdhciBlc3RhIG9yZGVtIGRlIHNlcnZpw6dvPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBXb3Jrb3JkZXIuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIENvbmRpdGlvbiEnfSA9CiAgICAgICAgJ07Do28gw6kgcG9zc8OtdmVsIGFwYWdhciBlc3RhIG9yZGVtIGRlIHNlcnZpw6dvLiDDiSB1dGlsaXphZGEgcGVsbyBtZW5vcyBudW1hIGNvbmRpw6fDo28hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgV29ya29yZGVyIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBDb25kaXRpb24ocyknfSA9ICdFc3RhIG9yZGVtIGRlIHNlcnZpw6dvIGVzdMOhIGVtIHV0aWxpemHDp8OjbyBuYShzKSBjb25kacOnw6NvKMO1ZXMpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0ICVzJXMtJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBmb2xsb3dpbmcgd29ya29yZGVycyBhY2NvcmRpbmdseSd9ID0gJ01vdmVyIGFzIHNlZ3VpbnRlcyBvcmRlbnMgZGUgYWNvcmRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHRoZSBwbGFubmVkIGVuZCB0aW1lIG9mIHRoaXMgd29ya29yZGVyIGlzIGNoYW5nZWQsIHRoZSBwbGFubmVkIHN0YXJ0IHRpbWVzIG9mIGFsbCBmb2xsb3dpbmcgd29ya29yZGVycyB3aWxsIGJlIGNoYW5nZWQgYWNjb3JkaW5nbHknfSA9CiAgICAgICAgJ1NlIG8gdMOpcm1pbm8gcGxhbmVqYWRvIGRlc3RhIG9yZGVtIGRlIHNlcnZpw6dvIGZvciBhbHRlcmFkbywgbyBob3LDoXJpbyBwbGFuZWphZG8gZGUgaW7DrWNpbyBkZSB0b2RhcyBhcyBzZWd1aW50ZXMgb3JkZW5zIHRhbWLDqW0gc2Vyw6NvIGFsdGVyYWRvcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiAlcyVzLSVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJSZXBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUmVwb3J0IG9mICVzJXMtJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0J30gPSAnUmVsYXTDs3Jpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWN0dWFsIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgdGltZSEnfSA9ICdPIHRlbXBvIGRlIGluw61jaW8gcmVhbCBkZXZlIHNlciBhbnRlcmlvciBhbyB0ZW1wbyBmaW5hbCByZWFsICEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgc2V0LCB3aGVuIHRoZSBhY3R1YWwgZW5kIHRpbWUgaXMgc2V0ISd9ID0KICAgICAgICAnTyB0ZW1wbyBkZSBpbsOtY2lvIHJlYWwgZGV2ZSBzZXIgZGVmaW5pZG8sIHF1YW5kbyBvIHRlbXBvIGRlIGZpbSByZWFsIMOpIGNvbmZpZ3VyYWRvISc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGFrZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBBZ2VudCd9ID0gJ2FnZW50ZSBhdHVhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gdGFrZSB0aGlzIHdvcmtvcmRlcj8nfSA9ICdEZXNlamEgYXNzdW1pciBlc3RhIG9yZGVtIGRlIHNlcnZpw6dvPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgV29ya29yZGVyIGFzIFRlbXBsYXRlJ30gPSAnR3VhcmRhciBPcmRlbSBkZSBTZXJ2acOnbyBjb21vIE1vZGVsbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgd29ya29yZGVyIChhbmQgc3Vycm91bmRpbmcgY2hhbmdlKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYcOnw6NvIGRhIE9yZGVtIGRlIFNlcnZpw6dvJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vua25vd24gbm90aWZpY2F0aW9uICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSB3YXMgYW4gZXJyb3IgY3JlYXRpbmcgdGhlIG5vdGlmaWNhdGlvbi4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ2hhbmdlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgd2l0aCBUaWNrZXRJRCAlcyBkb2VzIG5vdCBleGlzdCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlzc2luZyBzeXNjb25maWcgb3B0aW9uICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBhZGQgY2hhbmdlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSBmcm9tIHRlbXBsYXRlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ0FCVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjaGFuZ2UgZm91bmQgZm9yIGNoYW5nZUlEICVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgQ0FCIG9mIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIHRoZSB0ZW1wbGF0ZS4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNvbmRpdGlvbi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIENvbmRpdGlvbklEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gJXMgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBjcmVhdGUgbmV3IGNvbmRpdGlvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBDb25kaXRpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBFeHByZXNzaW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgbmV3IEV4cHJlc3Npb24hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgQWN0aW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgbmV3IEFjdGlvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBFeHByZXNzaW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQWN0aW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yOiBVbmtub3duIGZpZWxkIHR5cGUgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uSUQgJXMgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBnaXZlbiBDaGFuZ2VJRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgZG9lcyBub3QgaGF2ZSBhbiBhbGxvd2VkIGNoYW5nZSBzdGF0ZSB0byBiZSBkZWxldGVkISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNoYW5nZUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VIaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBhcyBubyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biB0eXBlICIlcyIgZW5jb3VudGVyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VIaXN0b3J5Wm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSB6b29tLCBubyBIaXN0b3J5RW50cnlJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeUVudHJ5ICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSBDQUIgZm9yIENoYW5nZSAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNYW5hZ2VyLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogQ2hhbmdlTWFuYWdlcid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBDQUInfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU15Q2hhbmdlcy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IENoYW5nZXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU15V29ya09yZGVycy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IFdvcmtvcmRlcnMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVBJUi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFBJUid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUFNBLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUFNBJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgdGhlIHdvcmtvcmRlciBpcyBub3QgYXR0YWNoZWQgdG8gYSBjaGFuZ2UhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGNyZWF0ZSBvdXRwdXQsIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duIGNoYW5nZSB0aXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlcid9ID0gJ09yZGVtIGRlIFNlcnZpw6dvIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93biB3b3Jrb3JkZXIgdGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgT3ZlcnZpZXcgKCVzKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkU3RhcnRUaW1lJ30gPSAnSW7DrWNpbyBwbGFuZWFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkRW5kVGltZSd9ID0gJ2ZpbSBwbGFuZWFkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxTdGFydFRpbWUnfSA9ICdJbsOtY2lvIFJlYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsRW5kVGltZSd9ID0gJ2ZpbSBSZWFsJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VSZXNldC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHJlc2V0IFdvcmtPcmRlciAlcyBvZiBDaGFuZ2UgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byByZXNldCBDaGFuZ2UgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VTY2hlZHVsZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IENoYW5nZSBTY2hlZHVsZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZVRpdGxlJ30gPSAnVMOtdHVsbyBkYSBBbHRlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJzJ30gPSAnT3JkZW5zIGRlIFNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZVN0YXRlJ30gPSAnRXN0YWRvIGRhIEFsdGVyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTZWFyY2ggUmVzdWx0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29yayBPcmRlciBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEp1c3RpZmljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEluc3RydWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBSZXBvcnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbXBhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBCeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEFnZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZm9yZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjaGFuZ2UgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSB0aGUgdGVtcGxhdGUgIiVzIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBjaGFuZ2UgIiVzIi4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRpbWVTbG90LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlIGNhblwndCBiZSBtb3ZlZCwgYXMgaXQgaGFzIG5vIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciBmaXJzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IG1vdmUgYSBjaGFuZ2Ugd2hpY2ggYWxyZWFkeSBoYXMgc3RhcnRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIG1vdmUgdGhlIGluZGl2aWR1YWwgd29ya29yZGVycyBpbnN0ZWFkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY3VycmVudCAlcyBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlICVzIG9mIGFsbCB3b3Jrb3JkZXJzIGhhcyB0byBiZSBkZWZpbmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gbW92ZSB0aW1lIHNsb3QgZm9yIHdvcmtvcmRlciAjJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgJXMgcGVybWlzc2lvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gVGVtcGxhdGVJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHRlbXBsYXRlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICIlcyIhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSB3b3Jrb3JkZXIgZnJvbSB0ZW1wbGF0ZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBUZW1wbGF0ZSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyBvbiB0aGUgY2hhbmdlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIHdvcmtvcmRlciEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFnZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHNldCB0aGUgd29ya29yZGVyIGFnZW50IG9mIHRoZSB3b3Jrb3JkZXIgIiVzIiB0byBlbXB0eSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIHRoZSB3b3Jrb3JkZXIgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGZpbmQgQ2hhbmdlIGZvciBXb3JrT3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHdvcmtvcmRlciAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgV29ya09yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6Oid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgZW50cnkgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSBab29tJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUYWtlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdGFrZSB0aGUgd29ya29yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB3b3Jrb3JkZXIgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXQvSVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBjb25maWcgb3B0aW9uICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgb3B0aW9uICVzIG5lZWRzIHRvIGJlIGEgSEFTSCByZWYhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNvbmZpZyBvcHRpb24gZm91bmQgZm9yIHRoZSB2aWV3ICIlcyIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpdGxlOiAlcyB8IFR5cGU6ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgQ0FCcyd9ID0gJ09zIG1ldXMgQ0FCcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBDaGFuZ2VzJ30gPSAnQXMgbWluaGFzIGFsdGVyYcOnw7Vlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBXb3JrIE9yZGVycyd9ID0gJyc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNoYW5nZU1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVxdWVzdGVkJ30gPSAnUmVxdWVyaWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3BlbmRpbmcgYXBwcm92YWwnfSA9ICdBcHJvdmHDp8OjbyBQZW5kZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWplY3RlZCd9ID0gJ1JlamVpdGFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZlZCd9ID0gJ0Fwcm92YWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luIHByb2dyZXNzJ30gPSAnRW0gY3Vyc28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGVuZGluZyBwaXInfSA9ICdSUEkgUGVuZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc3VjY2Vzc2Z1bCd9ID0gJ1N1Y2Vzc28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZmFpbGVkJ30gPSAnRmFsaG91JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NhbmNlbGVkJ30gPSAnQ2FuY2VsYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JldHJhY3RlZCd9ID0gJ1JldHJhdGFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjcmVhdGVkJ30gPSAnQ3JpYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FjY2VwdGVkJ30gPSAnQWNlaXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlYWR5J30gPSAnUHJvbnRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FwcHJvdmFsJ30gPSAnQXByb3Zhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd29ya29yZGVyJ30gPSAnT3JkZW0gZGUgU2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmFja291dCd9ID0gJ1BsYW5vIGRlIFJldG9ybm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZGVjaXNpb24nfSA9ICdEZWNpc8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwaXInfSA9ICdSUEkgKFJldmlzdGEgUMOzcy1JbXBsZW1lbnRhw6fDo28pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzJ30gPSAnw6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbm90J30gPSAnbsOjbyDDqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBlbXB0eSd9ID0gJ8OpIHZhemlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCBlbXB0eSd9ID0gJ27Do28gZXN0w6EgdmF6aW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZ3JlYXRlciB0aGFuJ30gPSAnw6kgbWFpb3IgcXVlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGxlc3MgdGhhbid9ID0gJ8OpIG1lbm9yIHF1ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBiZWZvcmUnfSA9ICdhbnRlcyBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBhZnRlcid9ID0gJ2RlcG9pcyBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjb250YWlucyd9ID0gJ2NvbnTDqW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGNvbnRhaW5zJ30gPSAnbsOjbyBjb250w6ltJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZ2lucyB3aXRoJ30gPSAnaW5pY2lhIGNvbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlbmRzIHdpdGgnfSA9ICd0ZXJtaW5hIGNvbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzZXQnfSA9ICdjb25maWd1cmFyJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBsaXN0IG9mIHRoZSBhZ2VudHMgd2hvIGhhdmUgcGVybWlzc2lvbiB0byB0YWtlIHdvcmtvcmRlcnMuIEtleSBpcyBhIGxvZ2luIG5hbWUuIENvbnRlbnQgaXMgMCBvciAxLid9ID0KICAgICAgICAnTGlzdGEgZG9zIGFnZW50ZXMgcXVlIHTDqm0gcGVybWlzc8OjbyBwYXJhIHRlciBPcmRlbnMgZGUgU2VydmnDp28uQ2hhdmUgw6kgdW0gbm9tZSBkZSBsb2dpbi5PIGNvbnRlw7pkbyDDqSAwIG91IDEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBsaXN0IG9mIHdvcmtvcmRlciBzdGF0ZXMsIGF0IHdoaWNoIHRoZSBBY3R1YWxTdGFydFRpbWUgb2YgYSB3b3Jrb3JkZXIgd2lsbCBiZSBzZXQgaWYgaXQgd2FzIGVtcHR5IGF0IHRoaXMgcG9pbnQuJ30gPQogICAgICAgICdMaXN0YSBkZSBlc3RhZG9zIGRlIE9yZGVtIGRlIFNlcnZpw6dvLCBlbSBxdWUgYSBob3JhIGRlIGluw61jaW8gcmVhbCBkZSB1bWEgT3JkZW0gZGUgU2VydmnDp28gc2Vyw6EgZGVmaW5pZGEgc2UgZXN0aXZlciB2YXppYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlcid9ID0gJ0FkaWNpb25hciBPcmRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyIChmcm9tIFRlbXBsYXRlKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBjaGFuZ2UgZnJvbSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgKGZyb20gdGVtcGxhdGUpIHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgZnJvbSB0ZW1wbGF0ZSd9ID0gJ0FkaWNpb25hciB1dGlsaXphbmRvIG1vZGVsbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgQ0lQIG1hdHJpeC4nfSA9ICdHZXJpciBtYXRyaXogQ0lQLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgc3RhdGUgbWFjaGluZS4nfSA9ICdHZXJpciBtw6FxdWluYSBkZSBlc3RhZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZSBhZHZpc29yeSBib2FyZHMuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIG5vdGlmaWNhw6fDo28gZGEgaW50ZXJmYWNlIGRvIGFnZW50ZSBwYXJhIHZlciBvIG7Dum1lcm8gZGUgQ0FCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzIG1hbmFnZWQgYnkgdGhlIHVzZXIuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIG5vdGlmaWNhw6fDo28gZGEgaW50ZXJmYWNlIGRvIGFnZW50ZSBwYXJhIHZlciBvIG7Dum1lcm8gZGUgYWx0ZXJhw6fDtWVzIGdlcmlkYXMgcGVsbyB1dGlsaXphZG9yLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSBub3RpZmljYcOnw6NvIGRhIGludGVyZmFjZSBkbyBhZ2VudGUgcGFyYSB2ZXIgbyBuw7ptZXJvIGRlIGFsdGVyYcOnw7Vlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2Ygd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgTWVtYmVyIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudCB0b29sYmFycy4gRGVmYXVsdDogMyBob3VycyAoMTgwIG1pbnV0ZXMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50LiBEZWZhdWx0OiA1IGRheXMgKDcyMDAgbWludXRlcykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIENBQiBUZW1wbGF0ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbnZvbHZlZCBQZXJzb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ0xpbWl0ZSBwYXJhIGEgdmlzdGEgZGUgQWx0ZXJhw6fDtWVzICJwZXF1ZW5vIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNjaGVkdWxlJ30gPSAnQWdlbmRhIGRhIGFsdGVyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhbmQgV29ya29yZGVyIFRlbXBsYXRlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIHdvcmtvcmRlciB0ZW1wbGF0ZXMgZWRpdGVkIGJ5IHRoaXMgdXNlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFyZWEuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBpbnZvbHZlZCBwZXJzb25zIG9mIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBsaW1pdCBwZXIgcGFnZSBmb3IgQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdBbHRlcmFyIHBlc3F1aXNhIGFwb2lhZGEgZG8gcm91dGVyIGRvIGFnZW50ZSBkZSBpbnRlcmZhY2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIEVkaXQnfSA9ICdFZGl0YXIgQ29uZGnDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb24gT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlIHdoaWNoIHNjcmVlbiBzaG91bGQgYmUgc2hvd24gYWZ0ZXIgYSBuZXcgd29ya29yZGVyIGhhcyBiZWVuIGNyZWF0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlcyBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgd2hlbiBwbGFubmVkIHRoZSBzdGFydCB0aW1lIG9yIG90aGVyIHRpbWUgdmFsdWVzIGhhdmUgYmVlbiByZWFjaGVkL3Bhc3NlZC4nfSA9CiAgICAgICAgJ0NvbmZpZ3VyYSBhIGZyZXHDvMOqbmNpYSBjb20gcXVlIGFzIG5vdGlmaWNhw6fDtWVzIHPDo28gZW52aWFkYXMgcXVhbmRvIG8gdGVtcG8gcHJldmlzdG8gZGUgaW7DrWNpbyBvdSBvdXRyb3MgdmFsb3JlcyBkZSB0ZW1wbyBmb3IgYXRpbmdpZG8vdWx0cnBhc3NhZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBDaGFuZ2UnfSA9ICdDcmlhciBBbHRlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgQ2hhbmdlIChmcm9tIFRlbXBsYXRlKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgKGZyb20gdGVtcGxhdGUpIGZyb20gdGhpcyB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIGNoYW5nZSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBJVFNNIENoYW5nZSBNYW5hZ2VtZW50IG5vdGlmaWNhdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdHlwZSBmb3IgYSB3b3Jrb3JkZXIuIFRoaXMgZW50cnkgbXVzdCBleGlzdCBpbiBnZW5lcmFsIGNhdGFsb2cgY2xhc3MgXCdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpXb3JrT3JkZXI6OlR5cGVcJy4nfSA9CiAgICAgICAgJ1RpcG8gcG9yIG9taXNzw6NvIGRlIE9yZGVtIGRlIFNlcnZpw6dvLkVzdGEgZW50cmFkYSBkZXZlIGV4aXN0aXIgbmEgY2xhc3NlIGNhdMOhbG9nbyBnZXJhbCBcJ0lUU006Okdlc3TDo28gZGEgQWx0ZXJhw6fDo286Ok9yZGVtIGRlIFNlcnZpw6dvOjpUaXBvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICdEZWZpbmlyIEFjw6fDtWVzIG9uZGUgdW0gYm90w6NvIGRlIGNvbmZpZ3VyYcOnw7VlcyBlc3TDoSBkaXNwb27DrXZlbCBuYSB3aWRnZXQgdGhlIG9iamVjdG9zIGxpZ2Fkb3MgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gIEVzdGFzIEFjw6fDtWVzIGRldmVtIGVzdGFyIHJlZ2lzdGFkYXMgbm9zIHNlZ3VpbnRlcyBmaWNoZWlyb3MgSlMgZSBDU1M6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgc2lnbmFscyBmb3IgZWFjaCB3b3Jrb3JkZXIgc3RhdGUuJ30gPSAnRGVmaW5pw6fDo28gZG9zIGF2aXNvcyBwYXJhIGNhZGEgZXN0YWRvIGRlIE9yZGVtIGRlIFNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBDaGFuZ2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IENoYW5nZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBXb3Jrb3JkZXIgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgV29ya29yZGVyIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjaGFuZ2UgbGlzdC4nfSA9CiAgICAgICAgJ0RlZmluZSB1bWEgdmlzdGEgZ2xvYmFsIGRvIG3Ds2R1bG8gcGFyYSBtb3N0cmFyIHVtYSBwZXF1ZW5hIHZpc3RhIGRhIGxpc3RhIGRlIEFsdGVyYcOnw7Vlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHRlbXBsYXRlIGxpc3QuJ30gPQogICAgICAgICdEZWZpbmUgdW1hIHZpc3RhIGdsb2JhbCBkbyBtw7NkdWxvIHBhcmEgbW9zdHJhciB1bWEgcGVxdWVuYSB2aXN0w6NvIGRhIGxpc3RhIGRlIG1vZGVsb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgYWNjb3VudGVkIHRpbWUuJ30gPSAnRGVmaW5lIHNlIHNlcsOhIHBvc3PDrXZlbCBpbXByaW1pciBvIHRlbXBvIGNvbnRhYmlsaXphZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgcGxhbm5lZCBlZmZvcnQuJ30gPSAnRGVmaW5lIHNlIHNlcsOhIHBvc3PDrXZlbCBpbXByaW1pciBvIGVzZm9yw6dvIHBsYW5lYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgY2hhbmdlIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSBjaGFuZ2UgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiByZWFjaGFibGUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUpIHdvcmtvcmRlciBlbmQgc3RhdGVzIHNob3VsZCBiZSBhbGxvd2VkIGlmIGEgd29ya29yZGVyIGlzIGluIGEgbG9ja2VkIHN0YXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGFjY291bnRlZCB0aW1lIHNob3VsZCBiZSBzaG93bi4nfSA9ICdEZWZpbmUgc2UgbyB0ZW1wbyBjb250YWJpbGl6YWRvIGRldmUgc2VyIG1vc3RyYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBzaG91bGQgYmUgc2V0Lid9ID0gJ0RlZmluZSBzZSBvIHJlYWwgaW7DrWNpbyBlIGRlIGZpbSBkZXZlIHNlciBkZWZpbmlkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHNlYXJjaCBhbmQgdGhlIHdvcmtvcmRlciBzZWFyY2ggZnVuY3Rpb25zIGNvdWxkIHVzZSB0aGUgbWlycm9yIERCLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGNoYW5nZSBzdGF0ZSBjYW4gYmUgc2V0IGluIEFnZW50SVRTTUNoYW5nZUVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgc2UgbyBlc3RhZG8gZGUgQWx0ZXJhw6fDo28gcG9kZSBzZXIgZGVmaW5pZGEgZW0gYWdlbnRlSVRTTUVkaXRhckFsdGVyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBwbGFubmVkIGVmZm9ydCBzaG91bGQgYmUgc2hvd24uJ30gPSAnRGVmaW5lIHNlIG8gZXNmb3LDp28gcGxhbmVhZG8gZGV2ZSBzZXIgbW9zdHJhZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBwcmludCBieSBjdXN0b21lci4nfSA9ICdEZWZpbmUgc2UgYSBkYXRhIHNvbGljaXRhZGEgZGV2ZXLDoSBzZXIgaW1wcmVzc2EgcG9yIGNsaWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNlYXJjaGVkIGJ5IGN1c3RvbWVyLid9ID0KICAgICAgICAnRGVmaW5lIHNlIGEgZGF0YSBzb2xpY2l0YWRhIGRldmVyw6Egc2VyIHBlc3F1aXNhZG8gcGVsbyBjbGllbnRlLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNldCBieSBjdXN0b21lci4nfSA9ICdEZWZpbmUgc2UgYSBkYXRhIHNvbGljaXRhZGEgZGV2ZXLDoSBzZXIgZGVmaW5pZG8gcGVsbyBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2hvd24gYnkgY3VzdG9tZXIuJ30gPSAnRGVmaW5lIHNlIGEgZGF0YSBzb2xpY2l0YWRhIGRldmUgc2VyIGluZGljYWRhIHBlbG8gY2xpZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHN0YXRlIHNob3VsZCBiZSBzaG93bi4nfSA9ICdEZWZpbmUgc2UgbyBlc3RhZG8gZGEgT3JkZW0gZGUgU2VydmnDp28gZGV2ZSBzZXIgbW9zdHJhZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciB0aXRsZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnRGVmaW5lIHNlIG8gdMOtdHVsbyBkYSBPcmRlbSBkZSBTZXJ2acOnbyBkZXZlIHNlciBtb3N0cmFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBzaG93biBncmFwaCBhdHRyaWJ1dGVzLid9ID0gJ0RlZmluZSBtb3N0cmFkbyBhdHJpYnV0b3MgZ3LDoWZpY28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhhdCBvbmx5IGNoYW5nZXMgY29udGFpbmluZyBXb3Jrb3JkZXJzIGxpbmtlZCB3aXRoIHNlcnZpY2VzLCB3aGljaCB0aGUgY3VzdG9tZXIgdXNlciBoYXMgcGVybWlzc2lvbiB0byB1c2Ugd2lsbCBiZSBzaG93bi4gQW55IG90aGVyIGNoYW5nZXMgd2lsbCBub3QgYmUgZGlzcGxheWVkLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSBzb21lbnRlIGFzIGFsdGVyYcOnw7VlcyBjb250ZW5kbyBPcmRlbnMgZGUgU2VydmnDp28gcmVsYWNpb25hZGFzIGNvbSBvcyBzZXJ2acOnb3MsIHF1ZSBvIHV0aWxpemFkb3IgY2xpZW50ZSB0ZW0gcGVybWlzc8OjbyBwYXJhIHV0aWxpemFyIHNlcsOjbyBtb3N0cmFkYXMuIFF1YWlzcXVlciBvdXRyYXMgYWx0ZXJhw6fDtWVzIG7Do28gc2Vyw6NvIGV4aWJpZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSBhbGxvd2VkIHRvIGRlbGV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGVzdGFkb3MgZGUgYWx0ZXJhw6fDo28gcXVlIHNlcsOjbyB1dGlsaXphZG8gY29tbyBmaWx0cm9zIG5hIHZpc3RhIGdsb2JhbCBkZSBhbHRlcmHDp8OjbyBQU0EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGVzdGFkb3MgZGUgYWx0ZXJhw6fDo28gcXVlIHNlcsOjbyB1dGlsaXphZG9zIGNvbW8gZmlsdHJvcyBuYSB2aXN0YSBnbG9iYWwgZGUgYWdlbmRhbWVudG8gZGUgYWx0ZXJhw6fDo28gLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGVzdGFkb3MgZGUgYWx0ZXJhw6fDo28gcXVlIHNlcsOjbyB1dGlsaXphZG9zIGNvbW8gZmlsdHJvcyBuYSBtaW5oYSB2aXN0YSBnbG9iYWwgQ0FCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBlc3RhZG9zIGRlIGFsdGVyYcOnw6NvIHF1ZSBzZXLDo28gdXRpbGl6YWRvcyBjb21vIGZpbHRyb3MgbmEgbWluaGEgdmlzdGEgZ2xvYmFsIGRlIEFsdGVyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGVzdGFkb3MgZGUgYWx0ZXJhw6fDo28gcXVlIHNlcsOjbyB1dGlsaXphZG9zIGNvbW8gZmlsdHJvcyBuYSB2aXN0YSBnbG9iYWwgZG8gZ2VzdG9yIGRlIGFsdGVyYcOnw7Vlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgb3MgZXN0YWRvcyBhbHRlcmHDp8OjbyBxdWUgc2Vyw6NvIHV0aWxpemFkb3MgY29tbyBmaWx0cm9zIG5hIHZpc3RhIGdsb2JhbCBkZSBhbHRlcmHDp8O1ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGVzdGFkb3MgZGUgYWx0ZXJhw6fDo28gcXVlIHNlcsOjbyB1dGlsaXphZG9zIGNvbW8gZmlsdHJvcyBuYSB2aXN0YSBnbG9iYWwgZG8gY2xpZW50ZSBkZSBhZ2VuZGFtZW50byBkZSBhbHRlcmHDp8O1ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgY2hhbmdlIHRpdGxlIGZvciBhIGR1bW15IGNoYW5nZSB3aGljaCBpcyBuZWVkZWQgdG8gZWRpdCBhIHdvcmtvcmRlciB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgb3MgY3JpdMOpcmlvcyBkZSBjbGFzc2lmaWNhw6fDo28gcG9yIG9taXNzw6NvIG5hIGFsdGVyYcOnw6NvIGRlIHZpc3RhIGdsb2JhbCBkYSBQU0EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgb3MgY3JpdMOpcmlvcyBkZSBjbGFzc2lmaWNhw6fDo28gcG9yIG9taXNzw6NvIG5hIHZpc3RhIGdsb2JhbCBkYSBnZXN0w6NvIGRlIGFsdGVyYcOnw7Vlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAnRGVmaW5lIG9zIGNyaXTDqXJpb3MgZGUgY2xhc3NpZmljYcOnw6NvIHBvciBvbWlzc8OjbyBuYSB2aXN0YSBnbG9iYWwgZGUgYWx0ZXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGNyaXTDqXJpb3MgZGUgY2xhc3NpZmljYcOnw6NvIHBvciBvbWlzc8OjbyBuYSB2aXN0YSBnbG9iYWwgZGUgcHJvZ3JhbWHDp8OjbyBkZSBhbHRlcmHDp8O1ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgb3MgY3JpdMOpcmlvcyBkZSBjbGFzc2lmaWNhw6fDo28gcG9yIG9taXNzw6NvIG5hIHZpc3RhIGdsb2JhbCBkZSBBbHRlcmHDp8O1ZXMgZG8gIk1ldSBDQUIiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBjcml0w6lyaW9zIGRlIGNsYXNzaWZpY2HDp8OjbyBwb3Igb21pc3PDo28gbmEgdmlzdGEgZ2xvYmFsIGRlIEFsdGVyYcOnw7VlcyBkYSAiTWluaGEgQWx0ZXJhw6fDo28iLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBjcml0w6lyaW9zIGRlIGNsYXNzaWZpY2HDp8OjbyBwb3Igb21pc3PDo28gbmEgdmlzdGEgZ2xvYmFsIGRlIGFsdGVyYcOnw7VlcyBkYSAiTWluaGEgT3JkZW0gZGUgU2VydmnDp28iLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBjcml0w6lyaW9zIGRlIGNsYXNzaWZpY2HDp8OjbyBwb3Igb21pc3PDo28gbmEgdmlzdGEgZ2xvYmFsIGRlIEFsdGVyYcOnw7VlcyBQSVIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGNyaXTDqXJpb3MgZGUgY2xhc3NpZmljYcOnw6NvIHBvciBvbWlzc8OjbyBuYSB2aXN0YSBnbG9iYWwgcGFyYSBvcyBjbGllbnRlcyBwcm9ncmFtYXJlbSBhIEFsdGVyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGNyaXTDqXJpb3MgZGUgY2xhc3NpZmljYcOnw6NvIHBvciBvbWlzc8OjbyBuYSB2aXN0YSBnbG9iYWwgZG8gbW9kZWxvIGRlIEFsdGVyYcOnw7Vlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9ICdEZWZpbmUgYSBvcmRlbSBkZSBjbGFzc2lmaWNhw6fDo28gcG9yIG9taXNzw6NvIG5hIHZpc3RhIGdsb2JhbCBkZSAiTWV1IENBQiIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0gJ0RlZmluZSBhIG9yZGVtIGRlIGNsYXNzaWZpY2HDp8OjbyBwb3Igb21pc3PDo28gbmEgdmlzdGEgZ2xvYmFsIGRlICJNaW5oYSBBbHRlcmHDp8OjbyIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIGEgb3JkZW0gZGUgY2xhc3NpZmljYcOnw6NvIHBvciBvbWlzc8OjbyBuYSB2aXN0YSBnbG9iYWwgZGUgIk1pbmhhIE9yZGVtIGRlIFNlcnZpw6dvIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPSAnRGVmaW5lIGEgb3JkZW0gZGUgY2xhc3NpZmljYcOnw6NvIHBvciBvbWlzc8OjbyBuYSB2aXN0YSBnbG9iYWwgZGUgUElSLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPSAnRGVmaW5lIGEgb3JkZW0gZGUgY2xhc3NpZmljYcOnw6NvIHBvciBvbWlzc8OjbyBuYSB2aXN0YSBnbG9iYWwgZGUgQWx0ZXJhw6fDo28gUFNBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIGEgb3JkZW0gZGUgY2xhc3NpZmljYcOnw6NvIHBvciBvbWlzc8OjbyBuYSB2aXN0YSBnbG9iYWwgZGEgZ2VzdMOjbyBkZSBBbHRlcmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAnRGVmaW5lIGEgb3JkZW0gZGUgY2xhc3NpZmljYcOnw6NvIHBvciBvbWlzc8OjbyBuYSB2aXN0YSBnbG9iYWwgZGUgQWx0ZXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIGEgb3JkZW0gZGUgY2xhc3NpZmljYcOnw6NvIHBvciBvbWlzc8OjbyBuYSB2aXN0YSBnbG9iYWwgZGUgcHJvZ3JhbWFyIGEgQWx0ZXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIGEgb3JkZW0gZGUgY2xhc3NpZmljYcOnw6NvIHBvciBvbWlzc8OjbyBuYSB2aXN0YSBnbG9iYWwgZG8gY2xpZW50ZSBwcm9ncmFtYXIgYSBBbHRlcmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9ICdEZWZpbmUgYSBvcmRlbSBkZSBjbGFzc2lmaWNhw6fDo28gcG9yIG9taXNzw6NvIG5hIHZpc3RhIGdsb2JhbCBkZSBtb2RlbG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjYXRlZ29yeSBvZiBhIGNoYW5nZS4nfSA9ICdEZWZpbmUgbyB2YWxvciBwb3Igb21pc3PDo28gcGFyYSBhIGNhdGVnb3JpYSBkZSB1bWEgYWx0ZXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBpbXBhY3Qgb2YgYSBjaGFuZ2UuJ30gPSAnRGVmaW5lIG8gdmFsb3IgcG9yIG9taXNzw6NvIHBhcmEgbyBJbXBhY3RvIGRlIHVtYSBhbHRlcmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciBjaGFuZ2UgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJ0RlZmluZSBvIHRpcG8gZGUgY2FtcG8gcGFyYSBjb21wYXJhciBvcyBjYW1wb3MgZGUgdmFsb3IgcGFyYSBvIGFnZW50ZSBkZSBBbHRlcmHDp8OjbywgYXRyaWJ1dG9zIGVtIElUU00gRWRpdGFyIENvbmRpw6fDo28gZGUgQWx0ZXJhw6fDo28uIE9zIHZhbG9yZXMgdsOhbGlkb3Mgc8OjbyBkZSBTZWxlw6fDo28sIHRleHRvIGUgZGF0YS4gU2UgbmVuaHVtIHRpcG8gZm9yIGRlZmluaWRvLCBvIGNhbXBvIG7Do28gw6kgZXhpYmlkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciB3b3Jrb3JkZXIgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJ0RlZmluZSBvIHRpcG8gZGUgY2FtcG8gcGFyYSBjb21wYXJhciBvcyBjYW1wb3MgZGUgdmFsb3IgcGFyYSBhIE9yZGVtIGRlIFNlcnZpw6dvLCBhdHJpYnV0b3MgZW0gSVRTTSBFZGl0YXIgQ29uZGnDp8OjbyBkZSBBbHRlcmHDp8Ojby4gT3MgdmFsb3JlcyB2w6FsaWRvcyBzw6NvIGRlIFNlbGXDp8OjbywgdGV4dG8gZSBkYXRhLiBTZSBuZW5odW0gdGlwbyBmb3IgZGVmaW5pZG8sIG8gY2FtcG8gbsOjbyDDqSBleGliaWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvYmplY3QgYXR0cmlidXRlcyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciBjaGFuZ2Ugb2JqZWN0cyBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGF0cmlidXRvcyBkZSBvYmpldG8gcXVlIHPDo28gc2VsZWNpb27DoXZlaXMgcGFyYSBvYmpldG9zIGRlIEFsdGVyYcOnw6NvIGVtIEVkaXRhciBhIENvbmRpw6fDo28gZGUgQWx0ZXJhw6fDo28gZG8gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBhdHJpYnV0b3MgZGUgb2JqZXRvIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgb2JqZXRvcyBkZSBvcmRlbSBkZSBzZXJ2acOnbyBlbSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIEFsdGVyYcOnw6NvIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjY291bnRlZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBvcGVyYWRvcmVzIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgbyBhdHJpYnV0byBUZW1wbyBDb250YWJpbGl6YWRvcyBlbSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIEFsdGVyYcOnw6NvIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbEVuZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBvcGVyYWRvcmVzIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgbyBhdHJpYnV0byBIb3JhIGRlIGZpbSByZWFsIGVtIEVkaXRhciBhIENvbmRpw6fDo28gZGUgQWx0ZXJhw6fDo28gZG8gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsU3RhcnRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgb3Mgb3BlcmFkb3JlcyBxdWUgc8OjbyBzZWxlY2lvbsOhdmVpcyBwYXJhIG8gYXRyaWJ1dG8gSG9yYSBkZSBpbsOtY2lvIHJlYWwgZW0gRWRpdGFyIGEgQ29uZGnDp8OjbyBkZSBBbHRlcmHDp8OjbyBkbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDYXRlZ29yeUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgb3Mgb3BlcmFkb3JlcyBxdWUgc8OjbyBzZWxlY2lvbsOhdmVpcyBwYXJhIG8gYXRyaWJ1dG8gQ2F0ZWdvcmlhIElEIGVtIEVkaXRhciBhIENvbmRpw6fDo28gZGUgQWx0ZXJhw6fDo28gZG8gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlQnVpbGRlcklEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgb3Mgb3BlcmFkb3JlcyBxdWUgc8OjbyBzZWxlY2lvbsOhdmVpcyBwYXJhIG8gYXRyaWJ1dG8gQWx0ZXJhciBDb25zdHJ1dG9yIElEIGVtIEVkaXRhciBhIENvbmRpw6fDo28gZGUgQWx0ZXJhw6fDo28gZG8gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlTWFuYWdlcklEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgb3Mgb3BlcmFkb3JlcyBxdWUgc8OjbyBzZWxlY2lvbsOhdmVpcyBwYXJhIG8gYXRyaWJ1dG8gQWx0ZXJhciBnZXN0b3IgSUQgZW0gRWRpdGFyIGEgQ29uZGnDp8OjbyBkZSBBbHRlcmHDp8OjbyBkbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgb3Mgb3BlcmFkb3JlcyBxdWUgc8OjbyBzZWxlY2lvbsOhdmVpcyBwYXJhIG8gYXRyaWJ1dG8gQWx0ZXJhciBFc3RhZG8gSUQgZW0gRWRpdGFyIGEgQ29uZGnDp8OjbyBkZSBBbHRlcmHDp8OjbyBkbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIG9wZXJhZG9yZXMgcXVlIHPDo28gc2VsZWNpb27DoXZlaXMgcGFyYSBvIGF0cmlidXRvIEFsdGVyYXIgVMOtdHVsbyBJRCBlbSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIEFsdGVyYcOnw6NvIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIER5bmFtaWNGaWVsZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEltcGFjdElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgb3Mgb3BlcmFkb3JlcyBxdWUgc8OjbyBzZWxlY2lvbsOhdmVpcyBwYXJhIG8gYXRyaWJ1dG8gSW1wYWN0byBJRCBlbSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIEFsdGVyYcOnw6NvIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFZmZvcnQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBvcGVyYWRvcmVzIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgbyBhdHJpYnV0byBFc2ZvcsOnbyBwbGFuZWFkbyBlbSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIEFsdGVyYcOnw6NvIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgb3Mgb3BlcmFkb3JlcyBxdWUgc8OjbyBzZWxlY2lvbsOhdmVpcyBwYXJhIG8gYXRyaWJ1dG8gSG9yYSBGaW5hbCBQbGFuZWphZGEgZW0gRWRpdGFyIGEgQ29uZGnDp8OjbyBkZSBBbHRlcmHDp8OjbyBkbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkU3RhcnRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgb3Mgb3BlcmFkb3JlcyBxdWUgc8OjbyBzZWxlY2lvbsOhdmVpcyBwYXJhIG8gYXRyaWJ1dG8gSG9yYSDDjW5pY2lvIFBsYW5lamFkYSBlbSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIEFsdGVyYcOnw6NvIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFByaW9yaXR5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBvcGVyYWRvcmVzIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgbyBhdHJpYnV0byBQcmlvcmlkYWRlIElEIGVtIEVkaXRhciBhIENvbmRpw6fDo28gZGUgQWx0ZXJhw6fDo28gZG8gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUmVxdWVzdGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIG9wZXJhZG9yZXMgcXVlIHPDo28gc2VsZWNpb27DoXZlaXMgcGFyYSBvIGF0cmlidXRvIFRlbXBvIFJlcXVlcmlkbyBlbSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIEFsdGVyYcOnw6NvIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlckFnZW50SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBvcGVyYWRvcmVzIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgbyBhdHJpYnV0byBPcmRlbSBkZSBTZXJ2acOnbyBhZ2VudGUgSUQgZW0gRWRpdGFyIGEgQ29uZGnDp8OjbyBkZSBBbHRlcmHDp8OjbyBkbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJOdW1iZXIgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBvcGVyYWRvcmVzIHF1ZSBzw6NvIHNlbGVjaW9uw6F2ZWlzIHBhcmEgbyBhdHJpYnV0byBOw7ptZXJvIE9yZGVtIGRlIFNlcnZpw6dvIGVtIEVkaXRhciBhIENvbmRpw6fDo28gZGUgQWx0ZXJhw6fDo28gZG8gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyU3RhdGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIG9wZXJhZG9yZXMgcXVlIHPDo28gc2VsZWNpb27DoXZlaXMgcGFyYSBvIGF0cmlidXRvIEVzdGFkbyBJRCBPcmRlbSBkZSBTZXJ2acOnbyBlbSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIEFsdGVyYcOnw6NvIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclRpdGxlIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdEZWZpbmUgb3Mgb3BlcmFkb3JlcyBxdWUgc8OjbyBzZWxlY2lvbsOhdmVpcyBwYXJhIG8gYXRyaWJ1dG8gVMOtdHVsbyBPcmRlbSBkZSBTZXJ2acOnbyBlbSBFZGl0YXIgYSBDb25kacOnw6NvIGRlIEFsdGVyYcOnw6NvIGRvIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclR5cGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIG9wZXJhZG9yZXMgcXVlIHPDo28gc2VsZWNpb27DoXZlaXMgcGFyYSBvIGF0cmlidXRvIFRpcG8gSUQgT3JkZW0gZGUgU2VydmnDp28gZW0gRWRpdGFyIGEgQ29uZGnDp8OjbyBkZSBBbHRlcmHDp8OjbyBkbyBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwZXJpb2QgKGluIHllYXJzKSwgaW4gd2hpY2ggc3RhcnQgYW5kIGVuZCB0aW1lcyBjYW4gYmUgc2VsZWN0ZWQuJ30gPQogICAgICAgICdEZWZpbmUgbyBwZXLDrW9kbyAoZW0gYW5vcyksIGVtIHF1ZSBvcyB0ZW1wb3MgZGUgaW7DrWNpbyBlIGZpbSBwb2RlbSBzZXIgc2VsZWNpb25hZG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBhdHRyaWJ1dGVzIG9mIGEgd29ya29yZGVyIGluIHRoZSB0b29sdGlwIG9mIHRoZSB3b3Jrb3JkZXIgZ3JhcGggaW4gdGhlIGNoYW5nZSB6b29tLiBUbyBzaG93IHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcyBpbiB0aGUgdG9vbHRpcCwgdGhleSBtdXN0IGJlIHNwZWNpZmllZCBsaWtlIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUxLCBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMiwgZXRjLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBQU0Egb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmUgYXMgY29sdW5hcyB2aXN1YWxpemFkYXMgbmEgdmlzdGEgZ2VyYWwgZGEgUFNBLiBFc3RhIG9ww6fDo28gbsOjbyB0ZW0gZWZlaXRvIHNvYnJlIGEgcG9zacOnw6NvIGRhIGNvbHVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lIGFzIGNvbHVuYXMgdmlzdWFsaXphZGFzIG5hIHZpc3RhIGdlcmFsIGRhIEFnZW5kYS4gRXN0YSBvcMOnw6NvIG7Do28gdGVtIGVmZWl0byBzb2JyZSBhIHBvc2nDp8OjbyBkYSBjb2x1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lIGFzIGNvbHVuYXMgdmlzdWFsaXphZGFzIG5hIHZpc3RhIGdlcmFsIGRvICJNZXUgQ0FCIi4gRXN0YSBvcMOnw6NvIG7Do28gdGVtIGVmZWl0byBzb2JyZSBhIHBvc2nDp8OjbyBkYSBjb2x1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBjb2x1bmFzIHZpc3VhbGl6YWRhcyBuYSB2aXN0YSBnZXJhbCBkYXMgTWluaGFzIEFsdGVyYcOnw7Vlcy4gRXN0YSBvcMOnw6NvIG7Do28gdGVtIGVmZWl0byBzb2JyZSBhIHBvc2nDp8OjbyBkYSBjb2x1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBjb2x1bmFzIHZpc3VhbGl6YWRhcyBuYSB2aXN0YSBnZXJhbCBkYXMgTWluaGFzIE9yZGVucyBkZSBTZXJ2acOnby4gRXN0YSBvcMOnw6NvIG7Do28gdGVtIGVmZWl0byBzb2JyZSBhIHBvc2nDp8OjbyBkYSBjb2x1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIFBJUiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBjb2x1bmFzIHZpc3VhbGl6YWRhcyBuYSB2aXN0YSBnZXJhbCBkYSBQSVIuIEVzdGEgb3DDp8OjbyBuw6NvIHRlbSBlZmVpdG8gc29icmUgYSBwb3Npw6fDo28gZGEgY29sdW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBhcyBjb2x1bmFzIHZpc3VhbGl6YWRhcyBuYSB2aXN0YSBnZXJhbCBkbyBnZXN0b3IgZGUgQWx0ZXJhw6fDo28uIEVzdGEgb3DDp8OjbyBuw6NvIHRlbSBlZmVpdG8gc29icmUgYSBwb3Npw6fDo28gZGEgY29sdW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmUgYXMgY29sdW5hcyB2aXN1YWxpemFkYXMgbmEgdmlzdGEgZ2VyYWwgZGEgQWx0ZXJhw6fDo28uIEVzdGEgb3DDp8OjbyBuw6NvIHRlbSBlZmVpdG8gc29icmUgYSBwb3Npw6fDo28gZGEgY29sdW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lIGFzIGNvbHVuYXMgdmlzdWFsaXphZGFzIG5hIHBlc3F1aXNhIGRhIEFsdGVyYcOnw6NvLiBFc3RhIG9ww6fDo28gbsOjbyB0ZW0gZWZlaXRvIHNvYnJlIGEgcG9zacOnw6NvIGRhIGNvbHVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lIGFzIGNvbHVuYXMgdmlzdWFsaXphZGFzIG5hIHZpc3RhIGdlcmFsIGRlIEFnZW5kYXIgYSBBbHRlcmHDp8Ojby4gRXN0YSBvcMOnw6NvIG7Do28gdGVtIGVmZWl0byBzb2JyZSBhIHBvc2nDp8OjbyBkYSBjb2x1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lIGFzIGNvbHVuYXMgdmlzdWFsaXphZGFzIG5hIHZpc3RhIGdlcmFsIGRvIG1vZGVsby4gRXN0YSBvcMOnw6NvIG7Do28gdGVtIGVmZWl0byBzb2JyZSBhIHBvc2nDp8OjbyBkYSBjb2x1bmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNpZ25hbHMgZm9yIGVhY2ggSVRTTUNoYW5nZSBzdGF0ZS4nfSA9ICdEZWZpbmUgb3Mgc2luYWlzIHBhcmEgY2FkYSBlc3RhZG8gQWx0ZXJhw6fDo28gSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGVtcGxhdGUgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgb3MgdGlwb3MgZGUgbW9kZWxvIHF1ZSBzZXLDo28gdXNhZG9zIGNvbW8gZmlsdHJvcyBuYSB2aXN0YSBnbG9iYWwgZGUgbW9kZWxvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluZSBvcyBlc3RhZG9zIGRlIG9yZGVtIGRlIHNlcnZpw6dvIHF1ZSBzZXLDo28gdXNhZG9zIGNvbW8gZmlsdHJvcyBuYSB2aXN0YSBnbG9iYWwgZGFzIE1pbmhhcyBPcmRlbnMgZGUgU2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5lIG9zIGVzdGFkb3MgZGUgb3JkZW0gZGUgc2VydmnDp28gcXVlIHNlcsOjbyB1c2Fkb3MgY29tbyBmaWx0cm9zIG5hIHZpc3RhIGdsb2JhbCBkYSBQSVIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBzaG93IHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmUgb3MgdGlwb3MgZGUgb3JkZW0gZGUgc2VydmnDp28gcXVlIHNlcsOjbyB1c2Fkb3MgY29tbyBmaWx0cm9zIHBhcmEgbW9zdHJhciBuYSB2aXN0YSBnbG9iYWwgZGEgUElSLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXRoZXIgbm90aWZpY2F0aW9ucyBzaG91bGQgYmUgc2VudC4nfSA9ICdEZWZpbmUgc2UgYXMgbm90aWZpY2HDp8O1ZXMgZGV2ZW0gc2VyIGVudmlhZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyBvZiBhIGNoYW5nZSBoaXN0b3J5IGVudHJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIGFuIGFnZW50IGNhbiBleGNoYW5nZSB0aGUgWC1heGlzIG9mIGEgc3RhdCBpZiBoZSBnZW5lcmF0ZXMgb25lLid9ID0KICAgICAgICAnRGVmaW5lIHNlIHVtIGFnZW50ZSBwb2RlIHRyb2NhciBvIGVpeG8gWCBkZSB1bWEgZXN0YXTDrXN0aWNhIGdlcmlkYSBwb3Igc2kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgZG9uZSBmb3IgY29uZmlnIGl0ZW0gY2xhc3Nlcy4nfSA9CiAgICAgICAgJ0RlZmluZSBzZSBvIG3Ds2R1bG8gZGUgZXN0YXTDrXN0aWNhcyBjb211bnMgcG9kZSBnZXJhciBlc3RhdMOtc3RpY2FzIHNvYnJlIGFzIEFsdGVyYcOnw7VlcyBmZWl0YXMgcGFyYSBhcyBjbGFzc2VzIGRlIGl0ZW0gZGUgY29uZmlndXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIGNoYW5nZSBzdGF0ZSB1cGRhdGVzIHdpdGhpbiBhIHRpbWVwZXJpb2QuJ30gPQogICAgICAgICdEZWZpbmUgc2UgbyBtw7NkdWxvIGRlIGVzdGF0w61zdGljYXMgY29tdW5zIHBvZGUgZ2VyYXIgZXN0YXTDrXN0aWNhcyBzb2JyZSBhcyBBbHRlcmHDp8O1ZXMgcmVmZXJlbnRlcyDDoHMgYXR1YWxpemHDp8O1ZXMgQWx0ZXJhw6fDo28gZGUgZXN0YWRvIGRlbnRybyBkZSB1bSBwZXLDrW9kbyBkZSB0ZW1wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyByZWdhcmRpbmcgdGhlIHJlbGF0aW9uIGJldHdlZW4gY2hhbmdlcyBhbmQgaW5jaWRlbnQgdGlja2V0cy4nfSA9CiAgICAgICAgJ0RlZmluZSBzZSBvIG3Ds2R1bG8gZGUgZXN0YXTDrXN0aWNhcyBjb211bnMgcG9kZSBnZXJhciBlc3RhdMOtc3RpY2FzIHNvYnJlIGFzIEFsdGVyYcOnw7VlcyBhIHJlc3BlaXRvIGRhIHJlbGHDp8OjbyBlbnRyZSBhcyBBbHRlcmHDp8O1ZXMgZSBvcyB0aWNrZXRzIGRlIGluY2lkZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcy4nfSA9CiAgICAgICAgJ0RlZmluZSBzZSBvIG3Ds2R1bG8gZGUgZXN0YXTDrXN0aWNhcyBjb211bnMgcG9kZSBnZXJhciBlc3RhdMOtc3RpY2FzIHNvYnJlIGFzIEFsdGVyYcOnw7Vlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgdGhlIG51bWJlciBvZiBSZmMgdGlja2V0cyBhIHJlcXVlc3RlciBjcmVhdGVkLid9ID0KICAgICAgICAnRGVmaW5lIHNlIG8gbcOzZHVsbyBkZSBlc3RhdMOtc3RpY2FzIGNvbXVucyBwb2RlIGdlcmFyIGVzdGF0w61zdGljYXMgc29icmUgbyBuw7ptZXJvIGRlIHRpY2tldHMgUkZDIGEgdW0gc29saWNpdGFudGUgY3JpYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyAoZm9yIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMpIHNob3duIGluIHRoZSBjaGFuZ2UgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciByZXBvcnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljRmllbGQgZXZlbnQgbW9kdWxlIHRvIGhhbmRsZSB0aGUgdXBkYXRlIG9mIGNvbmRpdGlvbnMgaWYgZHluYW1pYyBmaWVsZHMgYXJlIGFkZGVkLCB1cGRhdGVkIG9yIGRlbGV0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSBjb25kaXRpb25zIG9mIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9yd2FyZCBzY2hlZHVsZSBvZiBjaGFuZ2VzLiBPdmVydmlldyBvdmVyIGFwcHJvdmVkIGNoYW5nZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIENBQiBUZW1wbGF0ZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIENvbmRpdGlvbiBFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIE1hbmFnZW1lbnQgTm90aWZpY2F0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VyIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBQSVIgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIG5vdGlmaWNhdGlvbiBydWxlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZXMnfSA9ICdBbHRlcmHDp8O1ZXMgSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q0FCIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q2hhbmdlcyBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeVdvcmtvcmRlcnMgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRGVsZXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQgQ0FCLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQgQ29udGVudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGNsZWFucyB1cCBjb25kaXRpb25zLid9ID0gJ03Ds2R1bG8gZGUgZXZlbnRvIElUU00gcXVlIGxpbXBhIGNvbmRpw6fDtWVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGNhY2hlIGZvciBhIHRvb2xiYXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgZGVsZXRlcyB0aGUgaGlzdG9yeSBvZiBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IG1hdGNoZXMgY29uZGl0aW9ucyBhbmQgZXhlY3V0ZXMgYWN0aW9ucy4nfSA9CiAgICAgICAgJ03Ds2R1bG8gZGUgZXZlbnRvIElUU00gcXVlIGNvaW5jaWRlIGNvbSBhcyBjb25kacOnw7VlcyBlIGV4ZWN1dGEgYXMgYcOnw7Vlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBzZW5kcyBub3RpZmljYXRpb25zLid9ID0gJ03Ds2R1bG8gZGUgZXZlbnRvcyBJVFNNIHF1ZSBlbnZpYSBub3RpZmljYcOnw7Vlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJ30gPSAnTcOzZHVsbyBkZSBldmVudG8gSVRTTSBxdWUgYXR1YWxpemEgbyBoaXN0w7NyaWNvIGRlIEFsdGVyYcOnw7Vlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNvbmRpdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byByZWNhbGN1bGF0ZSB0aGUgd29ya29yZGVyIG51bWJlcnMuJ30gPSAnTcOzZHVsbyBkZSBldmVudG8gSVRTTSBwYXJhIHJlY2FsY3VsYXIgb3MgbsO6bWVyb3MgZGUgb3JkZW0gZGUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRvIHNldCB0aGUgYWN0dWFsIHN0YXJ0IGFuZCBlbmQgdGltZXMgb2Ygd29ya29yZGVycy4nfSA9CiAgICAgICAgJ03Ds2R1bG8gZGUgZXZlbnRvIElUU00gcGFyYSBkZWZpbmlyIG8gdGVtcG8gaW7DrWNpbyBlIGRlIGZpbSBkZSBvcmRlbnMgZGUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01DaGFuZ2UnfSA9ICdBbHRlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNV29ya09yZGVyJ30gPSAnT3JkZW0gZGUgU2VydmnDp28gSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBmcmVxdWVuY3kgaXMgXCdyZWd1bGFybHlcJywgeW91IGNhbiBjb25maWd1cmUgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IChldmVyeSBYIGhvdXJzKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9nZmlsZSBmb3IgdGhlIElUU00gY2hhbmdlIGNvdW50ZXIuIFRoaXMgZmlsZSBpcyB1c2VkIGZvciBjcmVhdGluZyB0aGUgY2hhbmdlIG51bWJlcnMuJ30gPQogICAgICAgICdGaWNoZWlybyBkZSBsb2cgcGFyYSBvIGNvbnRhZG9yIGRlIEFsdGVyYcOnw6NvIElUU00uIEVzdGUgZmljaGVpcm8gw6kgdXNhZG8gcGFyYSBjcmlhciBvcyBuw7ptZXJvcyBkZSBBbHRlcmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIENBQiBtZW1iZXJzIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIGFnZW50cywgdXNlZCBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayBpZiBXb3JrT3JkZXJBZGQgb3IgV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlIHNob3VsZCBiZSBwZXJtaXR0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBDQUIgbWVtYmVycy4nfSA9ICdNw7NkdWxvIHBhcmEgdmVyaWZpY2FyIG9zIG1lbWJyb3MgZG8gQ0FCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGFnZW50Lid9ID0gJ03Ds2R1bG8gcGFyYSB2ZXJpZmljYXIgbyBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIGJ1aWxkZXIuJ30gPSAnTcOzZHVsbyBwYXJhIHZlcmlmaWNhciBvIGNvbnN0cnV0b3IgZGEgQWx0ZXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPSAnTcOzZHVsbyBwYXJhIHZlcmlmaWNhciBvIGdlc3RvciBkZSBBbHRlcmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnTcOzZHVsbyBwYXJhIHZlcmlmaWNhciBvIGFnZW50ZSBkYSBvcmRlbSBkZSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgbm8gd29ya29yZGVyIGFnZW50IGlzIHNldC4nfSA9ICdNw7NkdWxvIHBhcmEgdmVyaWZpY2FyIHNlIG7Do28gZXhpc3RlIGFnZW50ZSBkZSBvcmRlbSBkZSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGFnZW50IGlzIGNvbnRhaW5lZCBpbiB0aGUgY29uZmlndXJlZCBsaXN0Lid9ID0KICAgICAgICAnTcOzZHVsbyBwYXJhIHZlcmlmaWNhciBzZSBvIGFnZW50ZSBwZXJ0ZW5jZSDDoCBsaXN0YSBjb25maWd1cmFkYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYSBsaW5rIHRvIGNyZWF0ZSBhIGNoYW5nZSBmcm9tIHRoaXMgdGlja2V0LiBUaGUgdGlja2V0IHdpbGwgYmUgYXV0b21hdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgbmV3IGNoYW5nZS4nfSA9CiAgICAgICAgJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIHVtIGxpbmsgcGFyYSBjcmlhciB1bWEgQWx0ZXJhw6fDo28gYSBwYXJ0aXIgZGVzdGUgdGlja2V0LiBPIHRpY2tldCBzZXLDoSBhdXRvbWF0aWNhbWVudGUgbGlnYWRvIGNvbSBhIG5vdmEgQWx0ZXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIGFsbCB3b3Jrb3JkZXJzIGluIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyAoZnJvbSB0ZW1wbGF0ZSknfSA9ICdOb3ZhICh1dGlsaXphbmRvIG1vZGVsbyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSB1c2VycyBvZiB0aGVzZSBncm91cHMgaGF2ZSB0aGUgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRpY2tldCB0eXBlcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiIGlmIHRoZSBmZWF0dXJlICJUaWNrZXQ6OkFjbDo6TW9kdWxlIyMjMjAwLVRpY2tldDo6QWNsOjpNb2R1bGUiIGlzIGVuYWJsZWQuJ30gPQogICAgICAgICdTb21lbnRlIFV0aWxpemFkb3JzIGRvcyBncnVwb3MgdMOqbSBwZXJtaXNzw6NvIHBhcmEgdXRpbGl6YXIgb3MgdGlwb3MgZGUgdGlja2V0cywgdGFsIGNvbW8gZGVmaW5pZG8gZW0gIkFsdGVyYcOnw6NvSVRTTTpUaXBvc3RpY2tldHNBZGljaW9uYXJMaW5rQWx0ZXJhw6fDo28iIHNlIG8gcmVjdXJzbyAidGlja2V0OjpBQ0w6OiBNw7NkdWxvIyMjMjAwLXRpY2tldDo6QUNMOjpNw7NkdWxvIiBlc3RpdmVyIGF0aXZvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIGFsbCBDaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQSVInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldyknfSA9ICdSUEkgKFJldmlzdGEgUMOzcy1JbXBsZW1lbnRhw6fDo28pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BTQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgVXNlckNyZWF0ZVdvcmtPcmRlck5leHRNYXNrIG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY2hhbmdlcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICdQYXLDom1ldHJvcyBwYXJhIGFzIHDDoWdpbmFzIChlbSBxdWUgYXMgQWx0ZXJhw6fDtWVzIHPDo28gbW9zdHJhZGFzKSBkYSB2aXN0YSBwZXF1ZW5hIGdsb2JhbCBkZSBBbHRlcmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJlc2VudHMgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNob3cgdGhlIGludm9sdmVkIHBlcnNvbnMgaW4gYSBjaGFuZ2UsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBjaGFuZ2UgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0FwcmVzZW50YSB1bSBsaW5rIG5vIG1lbnUgcGFyYSBtb3N0cmFyIGFzIHBlc3NvYXMgZW52b2x2aWRhcyBudW1hIEFsdGVyYcOnw6NvLCBuYSB2aXN0YSBhIGFtcGxpYXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHkgKFBTQSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpIG9mIGNoYW5nZXMuIE92ZXJ2aWV3IG9mIGFwcHJvdmVkIGNoYW5nZXMgYW5kIHRoZWlyIHNlcnZpY2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgaW4gb3JkZXIgZm9yIGFuIGFnZW50IHRvIHRha2UgYSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgdW0gYWdlbnRlIHRlciB1bWEgb3JkZW0gZGUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWNjZXNzIHRoZSBvdmVydmlldyBvZiBhbGwgY2hhbmdlcy4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgYWNlZGVyIMOgIHZpc3RhIGdsb2JhbCBkZSB0b2RhcyBhcyBhbHRlcmHDp8O1ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWRkIGEgd29ya29yZGVyLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSBhZGljaW9uYXIgdW1hIG9yZGVtIGRlIHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNoYW5nZSB0aGUgd29ya29yZGVyIGFnZW50Lid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSBhbHRlcmFyIG8gYWdlbnRlIGRlIG9yZGVtIGRlIHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSBjaGFuZ2UuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIGNyaWFyIHVtIG1vZGVsbyBkZSB1bWEgYWx0ZXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZXNcJyBDQUIuJ30gPQogICAgICAgICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgY3JpYXIgdW0gbW9kZWxvIGRlIHVtYSBBbHRlcmHDp8Ojb1wnIENBQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgd29ya29yZGVyLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSBjcmlhciB1bSBtb2RlbG8gZGUgdW1hIG9yZGVtIGRlIHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzIGZyb20gdGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSBjcmlhciBBbHRlcmHDp8O1ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgdGVtcGxhdGUuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIGNyaWFyIHVtIG1vZGVsby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgYSB3b3Jrb3JkZXIuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIGNyaWFyIHVtYSBvcmRlbSBkZSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY2hhbmdlcy4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgZXhjbHVpciBtdWRhbsOnYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHRlbXBsYXRlLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSBlZGl0YXIgdW0gbW9kZWxvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgYSB3b3Jrb3JkZXIuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIGVkaXRhciB1bWEgb3JkZW0gZGUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBjaGFuZ2VzLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSBlZGl0YXIgdW1hIEFsdGVyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGNvbmRpdGlvbnMgb2YgY2hhbmdlcy4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgZWRpdGFyIHVtYSBjb25kacOnw6NvIGRlIGFsdGVyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgYSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBpbnZvbHZlZCBwZXJzb25zIG9mIGEgY2hhbmdlLid9ID0KICAgICAgICAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIGVkaXRhciBwZXNzb2FzIGVudm9sdmlkYXMgbmEgYWx0ZXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gbW92ZSBjaGFuZ2VzIGluIHRpbWUuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIG1vdmVyIGFzIGFsdGVyYcOnw7VlcyBubyB0ZW1wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBwcmludCBhIGNoYW5nZS4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgaW1wcmltaXIgdW1hIGFsdGVyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcmVzZXQgY2hhbmdlcy4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgcmVkZWZpbmlyIG11ZGFuw6dhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGEgd29ya29yZGVyLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSB2aXN1YWxpemFyIHVtYSBvcmRlbSBkZSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGNoYW5nZXMuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIHZpc3VhbGl6YXIgYWx0ZXJhw6fDtWVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIGEgQ0FCIG1lbWJlci4nfSA9CiAgICAgICAgJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSB2aXN1YWxpemFyIGEgbGlzdGEgZGUgYWx0ZXJhw6fDtWVzLCBvbmRlIG8gVXRpbGl6YWRvciDDqSBtZW1icm8gZG8gQ0FCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIHRoZSBjaGFuZ2UgbWFuYWdlci4nfSA9CiAgICAgICAgJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSB2aXN1YWxpemFyIGEgbGlzdGEgZGUgYWx0ZXJhw6fDtWVzLCBvbmRlIG8gdXRpbGl6YWRvciDDqSBvIGdlc3RvciBkYSBhbHRlcmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IG92ZXJ2aWV3IG92ZXIgYWxsIHRlbXBsYXRlcy4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgdmlzdWFsaXphciBhIHZpc3RhIGdsb2JhbCBkZSB0b2RvcyBvcyBtb2RlbG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGNvbmRpdGlvbnMgb2YgY2hhbmdlcy4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgdmlzdWFsaXphciBhcyBjb25kacOnw7VlcyBkZSBhbHRlcmHDp8O1ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZS4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgdmlzdWFsaXphciBvIGhpc3TDs3JpY28gZGUgdW1hIGFsdGVyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSB3b3Jrb3JkZXIuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIHZpc3VhbGl6YXIgbyBoaXN0w7NyaWNvIGRlIHVtYSBvcmRlbSBkZSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSBjaGFuZ2UuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIHZpc3VhbGl6YXIgbyBoaXN0w7NyaWNvIGFtcGxpYWRvIGRlIHVtYSBhbHRlcmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgdmlzdWFsaXphciBvIGhpc3TDs3JpY28gYW1wbGlhZG8gZGUgdW1hIG9yZGVtIGRlIHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgQ2hhbmdlIFNjaGVkdWxlLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSB2aXN1YWxpemFyIGEgbGlzdGEgZGEgYWdlbmRhIGRlIGFsdGVyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlIFBTQS4nfSA9ICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgdmlzdWFsaXphciBhIGxpc3RhIGRlIEFsdGVyYcOnw7VlcyBQU0EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2VzIHdpdGggYW4gdXBjb21pbmcgUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldykuJ30gPQogICAgICAgICdQcml2aWzDqWdpb3MgbmVjZXNzw6FyaW9zIHBhcmEgdmlzdWFsaXphciBhIGxpc3RhIGRlIEFsdGVyYcOnw7VlcyBjb20gdW0gUElSLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIGNoYW5nZXMuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIHZpc3VhbGl6YXIgYSBsaXN0YSBkZSBhbHRlcmHDp8O1ZXMgcHLDs3ByaWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIHdvcmtvcmRlcnMuJ30gPSAnUHJpdmlsw6lnaW9zIG5lY2Vzc8OhcmlvcyBwYXJhIHZpc3VhbGl6YXIgYSBsaXN0YSBkZSBvcmRlbnMgZGUgc2VydmnDp28gcHLDs3ByaWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHdyaXRlIGEgcmVwb3J0IGZvciB0aGUgd29ya29yZGVyLid9ID0gJ1ByaXZpbMOpZ2lvcyBuZWNlc3PDoXJpb3MgcGFyYSBlc2NyZXZlciB1bSByZWxhdMOzcmlvIHBhcmEgYSBvcmRlbSBkZSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgYSBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW4gdGFzayB0byBjaGVjayBpZiBzcGVjaWZpYyB0aW1lcyBoYXZlIGJlZW4gcmVhY2hlZCBpbiBjaGFuZ2VzIGFuZCB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgY2hhbmdlIGFzIGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgd29ya29yZGVyIGFzIGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjaGVkdWxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjcmVlbiBhZnRlciBjcmVhdGluZyBhIHdvcmtvcmRlcid9ID0gJ1RlbGEgQXDDs3MgQ3JpYXIgT3JkZW0gZGUgU2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMnfSA9ICdQcm9jdXJhciBhbHRlcmHDp8O1ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNoYW5nZSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNoYW5nZSBudW1iZXIsIHRoZSBTeXN0ZW1JRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQgd2l0aCBTeXN0ZW1JRC5jb3VudGVyIGZvcm1hdCAoZS5nLiAxMDAxMTgsIDEwMDExOSkuIFdpdGggIkRhdGUiLCB0aGUgY2hhbmdlIG51bWJlcnMgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgYSBjb3VudGVyOyB0aGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LmNvdW50ZXIsIGUuZy4gMjAxMDA2MjQwMDAwMSwgMjAxMDA2MjQwMDAwMi4gV2l0aCAiRGF0ZUNoZWNrc3VtIiwgdGhlIGNvdW50ZXIgd2lsbCBiZSBhcHBlbmRlZCBhcyBjaGVja3N1bSB0byB0aGUgc3RyaW5nIG9mIGRhdGUgcGx1cyB0aGUgU3lzdGVtSUQuIFRoZSBjaGVja3N1bSB3aWxsIGJlIHJvdGF0ZWQgb24gYSBkYWlseSBiYXNpcy4gVGhpcyBmb3JtYXQgbG9va3MgbGlrZSBZZWFyLk1vbnRoLkRheS5TeXN0ZW1JRC5Db3VudGVyLkNoZWNrU3VtLCBlLmcuIDIwMTAwNjI0MTAwMDAwMTcsIDIwMTAwNjI0MTAwMDAwMjYuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBhZ2VudCBmb3IgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRJVFNNQ2hhbmdlWm9vbSBhbmQgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIG1pbmltYWwgY2hhbmdlIGNvdW50ZXIgc2l6ZSAoaWYgIkF1dG9JbmNyZW1lbnQiIHdhcyBzZWxlY3RlZCBhcyBJVFNNQ2hhbmdlOjpOdW1iZXJHZW5lcmF0b3IpLiBEZWZhdWx0IGlzIDUsIHRoaXMgbWVhbnMgdGhlIGNvdW50ZXIgc3RhcnRzIGZyb20gMTAwMDAuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3IgY2hhbmdlcy4nfSA9ICdDb25maWd1cmEgYSBtw6FxdWluYSBkZSBlc3RhZG8gcGFyYSBhcyBBbHRlcmHDp8O1ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdXAgdGhlIHN0YXRlIG1hY2hpbmUgZm9yIHdvcmtvcmRlcnMuJ30gPSAnQ29uZmlndXJhIGEgbcOhcXVpbmEgZGUgZXN0YWRvIHBhcmEgYXMgb3JkZW5zIGRlIHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGNoZWNrYm94IGluIHRoZSBBZ2VudElUU01Xb3JrT3JkZXJFZGl0IHNjcmVlbiB0aGF0IGRlZmluZXMgaWYgdGhlIHRoZSBmb2xsb3dpbmcgd29ya29yZGVycyBzaG91bGQgYWxzbyBiZSBtb3ZlZCBpZiBhIHdvcmtvcmRlciBpcyBtb2RpZmllZCBhbmQgdGhlIHBsYW5uZWQgZW5kIHRpbWUgaGFzIGNoYW5nZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGNoYW5naW5nIHRoZSB3b3Jrb3JkZXIgYWdlbnQsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZSBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSBjaGFuZ2UsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHF1ZSBwZXJtaXRlIGRlZmluaXIgdW1hIEFsdGVyYcOnw6NvIGNvbW8gdW0gbW9kZWxvIG5hIHZpc3RhIGRlIGFsdGVyYcOnw6NvLCBuYSBpbnRlcmZhY2UgZG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSB3b3Jrb3JkZXIgYXMgYSB0ZW1wbGF0ZSBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSB3b3Jrb3JkZXIsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGVkaXRpbmcgdGhlIHJlcG9ydCBvZiBhIHdvcmtvcmRlciwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY2hhbmdlIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSB1bSBsaW5rIG5vIG1lbnUgcXVlIHBlcm1pdGUgbGlnYXIgdW1hIEFsdGVyYcOnw6NvIGNvbSBvdXRybyBvYmpldG8gbmEgQWx0ZXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgd29ya29yZGVyIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBtb3ZpbmcgdGhlIHRpbWUgc2xvdCBvZiBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHF1ZSBwZXJtaXRlIG1vdmVyIG8gaW50ZXJ2YWxvIGRlIHRlbXBvIGRlIHVtYSBBbHRlcmHDp8OjbyBuYSBzdWEgb3BpbmnDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0YWtpbmcgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBjb25kaXRpb25zIG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHBhcmEgYWNlZGVyIGFzIGNvbmRpw6fDtWVzIGRlIHVtYSBBbHRlcmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGFjZWRlciBvIGhpc3TDs3JpY28gZGUgdW1hIEFsdGVyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFkZCBhIHdvcmtvcmRlciBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjaGFuZ2UgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSB3b3Jrb3JkZXIgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgdW0gbGluayBubyBtZW51IHBhcmEgZWRpdGFyIHVtYSBBbHRlcmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIHZvbHRhciBhIEFsdGVyYcOnw6NvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgd29ya29yZGVyIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVtIGxpbmsgbm8gbWVudSBwYXJhIGltcHJpbWlyIHVtYSBBbHRlcmHDp8Ojby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHJlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycyBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNoYW5nZSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNb3N0cmEgbyBoaXN0w7NyaWNvIGRlIGFsdGVyYcOnw7VlcyAob3JkZW0gaW52ZXJzYSkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRlIE1hY2hpbmUnfSA9ICdNw6FxdWluYSBkZSBFc3RhZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RvcmVzIGNoYW5nZSBhbmQgd29ya29yZGVyIGlkcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB0ZW1wbGF0ZSBpZCwgd2hpbGUgYSB1c2VyIGlzIGVkaXRpbmcgYSB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIFdvcmtvcmRlcid9ID0gJ0Fzc3VtaXIgb3JkZW0gZGUgc2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgT3ZlcnZpZXcnfSA9ICdDaXN0YSBkZSBNb2RlbG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjaGFuZ2UsIGUuZy4gQ2hhbmdlIywgTXlDaGFuZ2UjLiBUaGUgZGVmYXVsdCBpcyBDaGFuZ2UjLid9ID0KICAgICAgICAnTyBpZGVudGlmaWNhZG9yIGRlIHVtYSBBbHRlcmHDp8OjbywgcG9yIGV4ZW1wbG8sIEFsdGVyYcOnw6NvIyxNaW5oYSBBbHRlcmHDp8OjbyMuIFBvciBvbWlzc8OjbyDDqSBBbHRlcmHDp8OjbyMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIHdvcmtvcmRlciwgZS5nLiBXb3Jrb3JkZXIjLCBNeVdvcmtvcmRlciMuIFRoZSBkZWZhdWx0IGlzIFdvcmtvcmRlciMuJ30gPQogICAgICAgICdPIGlkZW50aWZpY2Fkb3IgZGUgdW1hIE9yZGVtIGRlIFNlcnZpw6dvLCBwb3IgZXhlbXBsbywgT3JkZW0gZGUgU2VydmnDp28jLE1pbmhhIE9yZGVtIGRlIFNlcnZpw6dvIy4gUG9yIG9taXNzw6NvIMOpIE9yZGVtIGRlIFNlcnZpw6dvIy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBBQ0wgbW9kdWxlIHJlc3RyaWN0cyB0aGUgdXN1YWdlIG9mIHRoZSB0aWNrZXQgdHlwZXMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbiBcJ0lUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlc1wnLCB0byB1c2VycyBvZiB0aGUgZ3JvdXBzIGFzIGRlZmluZWQgaW4gIklUU01DaGFuZ2U6OlJlc3RyaWN0VGlja2V0VHlwZXM6Okdyb3VwcyIuIEFzIHRoaXMgQUNMIGNvdWxkIGNvbGxpZGUgd2l0aCBvdGhlciBBQ0xzIHdoaWNoIGFyZSBhbHNvIHJlbGF0ZWQgdG8gdGhlIHRpY2tldCB0eXBlLCB0aGlzIHN5c2NvbmZpZyBvcHRpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgc2hvdWxkIG9ubHkgYmUgYWN0aXZhdGVkIGlmIG5lZWRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFNsb3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHlwZXMgb2YgdGlja2V0cywgd2hlcmUgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgYSBsaW5rIHRvIGFkZCBhIGNoYW5nZSB3aWxsIGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJ1RpcG9zIGRlIHRpY2tldHMsIG9uZGUgbm8gZGV0YWxoZSBkZSB2aXN1YWxpemHDp8OjbyBkbyB0aWNrZXQgw6kgbW9zdHJhZG8gdW0gbGluayBwYXJhIGFkaWNpb25hciB1bWEgQWx0ZXJhw6fDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQgKGZyb20gdGVtcGxhdGUpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBEZWxldGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSGlzdG9yeSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFJlcG9ydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29uY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVndWxhcmx5J30gPSAnJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cnVfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICfQmtCw0YLQtdCz0L7RgNC40Y8gPC0+INCS0LvQuNGP0L3QuNC1IDwtPiDQn9GA0LjQvtGA0LjRgtC10YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ2F0ZWdvcnkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INC/0YDQuNC+0YDQuNGC0LXRgtC+0Lwg0L3QsCDQvtGB0L3QvtCy0LUg0LrQvtC80LHQuNC90LDRhtC40Lgg0JrQsNGC0LXQs9C+0YDQuNGPIDwtPiDQktC70LjRj9C90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAn0J3QsNC30L3QsNGH0LXQvdC40LUg0L/RgNC40L7RgNC40YLQtdGC0LAnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbiBNYW5hZ2VtZW50J30gPSAn0KPQv9GA0LDQstC70LXQvdC40LUg0YPQstC10LTQvtC80LvQtdC90LjRj9C80Lgg0LIgSVRTTSBDaGFuZ2VNYW5hZ2VtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOb3RpZmljYXRpb24gUnVsZSd9ID0gJ9CU0L7QsdCw0LLQuNGC0Ywg0L/RgNCw0LLQuNC70L4g0YPQstC10LTQvtC80LvQtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdWxlJ30gPSAn0J/RgNCw0LLQuNC70L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBub3RpZmljYXRpb24gc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ9Cj0LLQtdC00L7QvNC70LXQvdC40LUg0LTQvtC70LbQvdC+INC40LzQtdGC0Ywg0LjQvNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQuJ30gPSAn0KLRgNC10LHRg9C10YLRgdGPINC40LzRjyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNU3RhdGVNYWNoaW5lCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBTdGF0ZSBNYWNoaW5lJ30gPSAn0KPQv9GA0LDQstC70LXQvdC40LUg0JzQsNGI0LjQvdC+0Lkg0YHQvtGB0YLQvtGP0L3QuNC5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIGNhdGFsb2cgY2xhc3MhJ30gPSAn0JLRi9Cx0LXRgNC40YLQtSDQutC70LDRgdGBINC60LDRgtCw0LvQvtCz0LAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0YWxvZyBjbGFzcyBpcyByZXF1aXJlZCEnfSA9ICfQmtC70LDRgdGBINC60LDRgtCw0LvQvtCz0LAg0L7QsdGP0LfQsNGC0LXQu9C10L0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHN0YXRlIHRyYW5zaXRpb24nfSA9ICfQlNC+0LHQsNCy0LjRgtGMINGB0L7RgdGC0L7Rj9C90LjQtSDQv9C10YDQtdGF0L7QtNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICfQmtC70LDRgdGBINC60LDRgtCw0LvQvtCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2JqZWN0IE5hbWUnfSA9ICfQmNC80Y8g0L7QsdGK0LXQutGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb3ZlciBzdGF0ZSB0cmFuc2l0aW9ucyBmb3InfSA9ICfQntCx0LfQvtGAINGB0L7RgdGC0L7Rj9C90LjQuSDQv9C10YDQtdGF0L7QtNCwINC00LvRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAn0KPQtNCw0LvQuNGC0Ywg0Y3RgtC+INGB0L7RgdGC0L7Rj9C90LjQtSDQv9C10YDQtdGF0L7QtNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ9CU0L7QsdCw0LLQuNGC0Ywg0L3QvtCy0L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUg0L/QtdGA0LXRhdC+0LTQsCDQtNC70Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhIHN0YXRlISd9ID0gJ9CS0YvQsdC10YDQuNGC0LUg0YHQvtGB0YLQvtGP0L3QuNC1ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGEgbmV4dCBzdGF0ZSEnfSA9ICfQktGL0LHQtdGA0LjRgtC1INGB0LvQtdC00YPRjtGJ0LXQtSDRgdC+0YHRgtC+0Y/QvdC40LUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ9Cg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGB0L7RgdGC0L7Rj9C90LjQtSDQv9C10YDQtdGF0L7QtNCwINC00LvRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoZSBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAn0JLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQvtGC0LUg0YPQtNCw0LvQuNGC0Ywg0YHQvtGB0YLQvtGP0L3QuNC1INC/0LXRgNC10YXQvtC00LAnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENoYW5nZSd9ID0gJ9CU0L7QsdCw0LLQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlJ30gPSAn0JjQt9C80LXQvdC10L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1c3RpZmljYXRpb24nfSA9ICfQntCx0L7RgdC90L7QstCw0L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lucHV0IGludmFsaWQuJ30gPSAn0J3QtdCy0LXRgNC90YvQtSDQtNCw0L3QvdGL0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAn0JLQu9C40Y/QvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdGVkIERhdGUnfSA9ICfQl9Cw0L/RgNC+0YjQtdC90L3QvtC1INCy0YDQtdC80Y8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IENoYW5nZSBUZW1wbGF0ZSd9ID0gJ9CS0YvQsdGA0LDRgtGMINGI0LDQsdC70L7QvSDQtNC70Y8g0LjQt9C80LXQvdC10L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgdHlwZSd9ID0gJ9Ci0LjQvyDQstGA0LXQvNC10L3QuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHRpbWUgdHlwZS4nfSA9ICfQvdC10LLQtdGA0L3Ri9C5INGC0LjQvyDQstGA0LXQvNC10L3QuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpbWUnfSA9ICfQvdC+0LLQvtC1INCy0YDQtdC80Y8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBDQUIgYXMgdGVtcGxhdGUnfSA9ICfQodC+0YXRgNCw0YLQuNGMINGB0L7RgdGC0LDQsiBDQUIg0LrQsNC6INGI0LDQsdC70L7QvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyB0byBpbnZvbHZlZCBwZXJzb25zIHNjcmVlbid9ID0gJ9C/0LXRgNC10LnRgtC4INC6INGN0LrRgNCw0L3RgyDQstC+0LLQu9C10YfQtdC90L3Ri9GFINGB0L/QtdGG0LjQsNC70LjRgdGC0L7Qsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIE5hbWUnfSA9ICfQndC10LLQtdGA0L3QvtC1INC40LzRjyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25zIGFuZCBBY3Rpb25zJ30gPSAn0KPRgdC70L7QstC40Y8g0Lgg0JTQtdC50YHRgtCy0LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQ29uZGl0aW9uJ30gPSAn0KPQtNCw0LvQuNGC0Ywg0YPRgdC70L7QstC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBjb25kaXRpb24nfSA9ICfQlNC+0LHQsNCy0LjRgtGMINC90L7QstC+0LUg0YPRgdC70L7QstC40LUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29uZGl0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWQgYSB2YWxpZCBuYW1lLid9ID0gJ9Ci0YDQtdCx0YPQtdGC0YHRjyDQv9GA0LDQstC40LvRjNC90L7QtSDQuNC80Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB2YWxpZCBuYW1lIGlzIG5lZWRlZC4nfSA9ICfQotGA0LXQsdGD0LXRgtGB0Y8g0L/RgNCw0LLQuNC70YzQvdC+0LUg0LjQvNGPLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZTonfSA9ICfQo9C20LUg0LjRgdC/0L7Qu9GM0LfRg9C10LzQvtC1INC40LzRjzonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBuYW1lIGlzIGFscmVhZHkgdXNlZCBieSBhbm90aGVyIGNvbmRpdGlvbi4nfSA9ICfQrdGC0L4g0LjQvNGPINGD0LbQtSDRgdC40L/QvtC70YzQt9GD0LXRgtGB0Y8g0LIg0LTRgNGD0LPQvtC8INGD0YHQu9C+0LLQuNC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXRjaGluZyd9ID0gJ9Ch0L7Qv9C+0YHRgtCw0LLQu9C10L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FueSBleHByZXNzaW9uIChPUiknfSA9ICfQm9GO0LHQvtC1INCy0YvRgNCw0LbQtdC90LjQtSAoT1IpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBleHByZXNzaW9ucyAoQU5EKSd9ID0gJ9CS0YHQtSDQstGL0YDQsNC20LXQvdC40Y8gKEFORCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwcmVzc2lvbnMnfSA9ICfQktGL0YDQsNC20LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0b3InfSA9ICfQn9C10YDQtdC60LvRjtGH0LDRgtC10LvRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRvcid9ID0gJ9Ce0L/QtdGA0LDRgtC+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEV4cHJlc3Npb24nfSA9ICfQo9C00LDQu9C40YLRjCDQstGL0YDQsNC20LXQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRXhwcmVzc2lvbnMgZm91bmQuJ30gPSAn0JLRi9GA0LDQttC10L3QuNC1INC90LUg0LfQsNC00LDQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGV4cHJlc3Npb24nfSA9ICfQlNC+0LHQsNCy0LjRgtGM0L3QvtCy0L7QtSDQstGL0YDQsNC20LXQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEFjdGlvbid9ID0gJ9Cj0LTQsNC70LjRgtGMINC00LXQudGB0YLQstC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQWN0aW9ucyBmb3VuZC4nfSA9ICfQlNC10LnRgdGC0LLQuNC5INC90LUg0LfQsNC00LDQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGFjdGlvbid9ID0gJ9CU0L7QsdCw0LLQuNGC0Ywg0L3QvtCy0L7QtSDQtNC10LnRgdGC0LLQuNC1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjaGFuZ2U/J30gPSAn0JLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDQttC10LvQsNC10YLQtSDRg9C00LDQu9C40YLRjCDRjdGC0L4g0LjQt9C80LXQvdC10L3QuNC1Pyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMnfSA9ICfQmNGB0YLQvtGA0LjRjyDQtNC70Y8gJXMlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXInfSA9ICfQl9Cw0LTQsNGH0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBkZXRhaWxzJ30gPSAn0J/QvtC60LDQt9Cw0YLRjCDQv9C+0LTRgNC+0LHQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgd29ya29yZGVyJ30gPSAn0J/QvtC60LDQt9Cw0YLRjCDQt9Cw0LTQsNGH0YMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxlZCBoaXN0b3J5IGluZm9ybWF0aW9uIG9mICVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGlmaWVkJ30gPSAn0JjQt9C80LXQvdC10L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbGQgVmFsdWUnfSA9ICfQodGC0LDRgNC+0LUg0LfQvdCw0YfQtdC90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgVmFsdWUnfSA9ICfQndC+0LLQvtC1INC30L3QsNGH0LXQvdC40LUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJbnZvbHZlZCBQZXJzb25zIG9mICVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52b2x2ZWQgUGVyc29ucyd9ID0gJ9CS0L7QstC70LXRh9C10L3QvdGL0LUg0YHQvtGC0YDRg9C00L3QuNC60LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlTWFuYWdlcid9ID0gJ9Cc0LXQvdC10LTQttC10YAg0LjQt9C80LXQvdC10L3QuNC5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgaW52YWxpZC4nfSA9ICfQndC10LLQtdGA0L3Ri9C5INC40YHQv9C+0LvQvdC40YLQtdC70YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlQnVpbGRlcid9ID0gJ9Ch0L7RgdGC0LDQstC40YLQtdC70Ywg0LjQt9C80LXQvdC10L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBBZHZpc29yeSBCb2FyZCd9ID0gJ0NBQiAtINCa0L7QvNC40YLQtdGCINC/0L4g0LjQt9C80LXQvdC10L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBUZW1wbGF0ZSd9ID0gJ9Co0LDQsdC70L7QvSDQtNC70Y8gQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcGx5IFRlbXBsYXRlJ30gPSAn0J/RgNC40LzQtdC90LjRgtGMINGI0LDQsdC70L7QvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXdUZW1wbGF0ZSd9ID0gJ9Cd0L7QstGL0Lkg0YjQsNCx0LvQvtC9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgdGhpcyBDQUIgYXMgdGVtcGxhdGUnfSA9ICfQodC+0YXRgNCw0L3QuNGC0Ywg0YHQvtGB0YLQsNCyIENBQiDQutCw0Log0YjQsNCx0LvQvtC9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0byBDQUInfSA9ICfQlNC+0LHQsNCy0LjRgtGMINC6IENBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIFVzZXInfSA9ICfQndC10LLQtdGA0L3Ri9C5INGB0L7RgtGA0YPQtNC90LjQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IENBQid9ID0gJ9Ci0LXQutGD0YnQuNC5IENBQic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICfQn9Cw0YDQsNC80LXRgtGA0Ysg0LrQvtC90YLQtdC60YHRgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZXMgcGVyIHBhZ2UnfSA9ICfQmNC30LzQtdC90LXQvdC40Lkg0L3QsCDRgdGC0YDQsNC90LjRhtGDJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgVGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFRpdGxlJ30gPSAn0JfQsNCz0L7Qu9C+0LLQvtC6INCY0LfQvNC10L3QtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEJ1aWxkZXInfSA9ICfQodC+0YHRgtCw0LLQuNGC0LXQu9GMINC40LfQvNC10L3QtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgTWFuYWdlcid9ID0gJ9Cc0LXQvdC10LTQttC10YAg0LjQt9C80LXQvdC10L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlcnMnfSA9ICfQl9Cw0LTQsNGH0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFN0YXRlJ30gPSAn0KHQvtGB0YLQvtGP0L3QuNC1INCY0LfQvNC10L3QtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdGVkIFRpbWUnfSA9ICfQl9Cw0L/RgNC+0YjQtdC90L3QvtC1INCy0YDQtdC80Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBTdGFydCBUaW1lJ30gPSAn0JfQsNC/0LvQsNC90LjRgNC+0LLQsNC90L3QvtC1INCy0YDQtdC80Y8g0L3QsNGH0LDQu9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRW5kIFRpbWUnfSA9ICfQn9C70LDQvdC40YDRg9C10LzQvtC1INCy0YDQtdC80Y8g0L7QutC+0L3Rh9Cw0L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBTdGFydCBUaW1lJ30gPSAn0KTQsNC60YLQuNGH0LXRgdC60L7QtSDQstGA0LXQvNGPINC90LDRh9Cw0LvQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWwgRW5kIFRpbWUnfSA9ICfQpNCw0LrRgtC40YfQtdGB0LrQvtC1INCy0YDQtdC80Y8g0L7QutC+0L3Rh9Cw0L3QuNGPJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VSZXNldAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIHJlc2V0IHRoaXMgY2hhbmdlPyd9ID0gJ9CS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0LbQtdC70LDQtdGC0LUg0L7Rh9C40YHRgtC40YLRjCDRjdGC0L4g0LjQt9C80LXQvdC10L3QuNC1Pyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoZS5nLiAxMCo1MTU1IG9yIDEwNTY1OCopJ30gPSAnKNGCLtC1LiAxMCo1MTU1INC40LvQuCAxMDU2NTgqKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQWdlbnQnfSA9ICfQkNCz0LXQvdGCLCDRh9C70LXQvSBDQUIgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuZy4nfSA9ICfRgi7QtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIEN1c3RvbWVyJ30gPSAn0JrQu9C40LXQvdGCLCDRh9C70LXQvSBDQUIgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIEluc3RydWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIFJlcG9ydCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBQcmlvcml0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBJbXBhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIENhdGVnb3J5J30gPSAn0JjQt9C80LXQvdC40YLRjCDQutCw0YLQtdCz0L7RgNC40Y4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJlZm9yZS9hZnRlciknfSA9ICfQtNC+L9C/0L7RgdC70LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJldHdlZW4pJ30gPSAn0LzQtdC20LTRgyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgQ2hhbmdlIGFzIFRlbXBsYXRlJ30gPSAn0KHQvtGF0YDQsNC90LjRgtGMINC40LfQvNC10L3QtdC90LjQtSDQutCw0Log0YjQsNCx0LvQvtC9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdGVtcGxhdGUgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ9Cd0LDQtNC+INC/0YDQuNGB0LLQvtC40YLRjCDQuNC80Y8g0YjQsNCx0LvQvtC90YMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLid9ID0gJ9Ci0YDQtdCx0YPQtdGC0YHRjyDQuNC80Y8g0YjQsNCx0LvQvtC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IFN0YXRlcyd9ID0gJ9Ce0YfQuNGB0YLQuNGC0Ywg0YHQvtGB0YLQvtGP0L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ3cml0ZSBvcmlnaW5hbCB0ZW1wbGF0ZSd9ID0gJ9Cf0LXRgNC10LfQsNC/0LjRgdCw0YLRjCDQuNGB0YXQvtC00L3Ri9C5INGI0LDQsdC70L7QvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgY2hhbmdlJ30gPSAn0KPQtNCw0LvQuNGC0Ywg0LjRgdGF0L7QtNC90L7QtSDQuNC30LzQtdC90LXQvdC40LUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRpbWVTbG90CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIFRpbWUgU2xvdCd9ID0gJ9Ch0LzQtdGB0YLQuNGC0Ywg0LTQuNCw0L/QsNC30L7QvSDQstGA0LXQvNC10L3QuCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEluZm9ybWF0aW9uJ30gPSAn0JjQvdGE0L7RgNC80LDRhtC40Y8g0L7QsSDQuNC30LzQtdC90LXQvdC40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBFZmZvcnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWNjb3VudGVkIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEluaXRpYXRvcihzKSd9ID0gJ9CY0L3QuNGG0LjQsNGC0L7RgCDQuNC30LzQtdC90LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCJ30gPSAnQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ9CU0LDRgtCwINC/0L7RgdC70LXQtNC90LXQs9C+INC40LfQvNC10L3QtdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn0J/QvtGB0LvQtdC00L3QuNC5INC40LfQvNC10L3QuNC7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAn0J4u0JouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAn0JTQu9GPINC+0YLQutGA0YvRgtC40Y8g0YHRgdGL0LvQutC4INCyINGB0LvQtdC00YPRjtGJ0LXQvCDRgdC+0L7QsdGJ0LXQvdC40Lgv0LfQsNC80LXRgtC60LUg0L3QtdC+0LHRhdC+0LTQuNC80L4g0L3QsNC20LDRgtGMINC4INGD0LTQtdGA0LbQuNCy0LDRgtGMINC60LvQsNCy0LjRiNGDIEN0cmwg0LjQu9C4IENtZCDQuNC70LggU2hpZnQg0Lgg0LrQu9C40LrQvdGD0YLRjCDQv9C+INGB0YHRi9C70LrQtSAo0LfQsNCy0LjRgdC40YIg0L7RgiDQstCw0YjQtdCz0L4g0LHRgNCw0YPQt9C10YDQsCDQuCDQntChKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG93bmxvYWQgQXR0YWNobWVudCd9ID0gJ9CX0LDQs9GA0YPQt9C40YLRjCDQstC70L7QttC10L3QuNC1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ0FCIFRlbXBsYXRlJ30gPSAn0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9IENBQic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBjaGFuZ2UgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICfQkdGD0LTQtdGCINGB0L7Qt9C00LDQvdC+INC90L7QstC+0LUg0LjQt9C80LXQvdC10L3QuNC1INC40Lcg0Y3RgtC+0LPQviDRiNCw0LHQu9C+0L3QsCDQuCDQstGLINGB0LzQvtC20LXRgtC1INC10LPQviDRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDQuCDRgdC+0YXRgNCw0L3QuNGC0YwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuZXcgY2hhbmdlIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIGl0IGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAn0J3QvtCy0L7QtSDQuNC30LzQtdC90LXQvdC40LUg0LHRg9C00LXRgiDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDRg9C00LDQu9C10L3QviDQv9C+0YHQu9C1INC10LPQviDRgdC+0YXRgNCw0L3QtdC90LjRjyDQsiDQutCw0YfQtdGB0YLQstC1INGI0LDQsdC70L7QvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IHdvcmtvcmRlciBmcm9tIHRoaXMgdGVtcGxhdGUsIHNvIHlvdSBjYW4gZWRpdCBhbmQgc2F2ZSBpdC4nfSA9CiAgICAgICAgJ9CR0YPQtNC10YIg0YHQvtC30LTQsNC90LAg0L3QvtCy0LDRjyDQt9Cw0LTQsNGH0LAg0LjQtyDRjdGC0L7Qs9C+INGI0LDQsdC70L7QvdCwINC4INCy0Ysg0YHQvNC+0LbQtdGC0LUg0LXQs9C+INGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINC4INGB0L7RhdGA0LDQvdC40YLRjC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB0ZW1wb3JhcnkgY2hhbmdlIHdpbGwgYmUgY3JlYXRlZCB3aGljaCBjb250YWlucyB0aGUgd29ya29yZGVyLid9ID0KICAgICAgICAn0JHRg9C00LXRgiDRgdC+0LfQtNCw0L3QviDQstGA0LXQvNC10L3QvdC+0LUg0LjQt9C80LXQvdC10L3QuNC1LCDRgdC+0LTQtdGA0LbQsNGJ0LXQtSDQt9Cw0LTQsNGH0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wb3JhcnkgY2hhbmdlIGFuZCBuZXcgd29ya29yZGVyIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSB3b3Jrb3JkZXIgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICfQktGA0LXQvNC10L3QvdC+0LUg0LjQt9C80LXQvdC10L3QuNC1INC4INC90L7QstCw0Y8g0LfQsNC00LDRh9CwINCx0YPQtNC10YIg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60Lgg0YPQtNCw0LvQtdC90Ysg0L/QvtGB0LvQtSDRgdC+0YXRgNCw0L3QtdC90LjRjyDQt9Cw0LTQsNGH0Lgg0LIg0LrQsNGH0LXRgdGC0LLQtSDRiNCw0LHQu9C+0L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nfSA9ICfQltC10LvQsNC10YLQtSDQv9GA0L7QtNC+0LvQttC40YLRjD8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgSUQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb250ZW50J30gPSAn0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0YHQvtC00LXRgNC20LDQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgVGltZSd9ID0gJ9CS0YDQtdC80Y8g0LzQvtC00LjRhNC40LrQsNGG0LjQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRlbXBsYXRlIENvbnRlbnQnfSA9ICfQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRgdC+0LTQtdGA0LbQsNC90LjQtSDRiNCw0LHQu9C+0L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgVGVtcGxhdGUnfSA9ICfQo9C00LDQu9C40YLRjCDRiNCw0LHQu9C+0L0nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlciB0byAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RydWN0aW9uJ30gPSAn0JjQvdGB0YLRgNGD0LrRhtC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCB3b3Jrb3JkZXIgdHlwZS4nfSA9ICfQndC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0YLQuNC/INC30LDQtNCw0YfQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHBsYW5uZWQgc3RhcnQgdGltZSBtdXN0IGJlIGJlZm9yZSB0aGUgcGxhbm5lZCBlbmQgdGltZSEnfSA9ICfQktGA0LXQvNGPINC90LDRh9Cw0LvQsCDQtNC+0LvQttC90L4g0L/RgNC10LTRiNC10YHRgtCy0L7QstCw0YLRjCDQstGA0LXQvNC10L3QuCDQvtC60L7QvdGH0LDQvdC40Y8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZm9ybWF0Lid9ID0gJ9Cd0LXQstC10YDQvdGL0Lkg0YTQvtGA0LzQsNGCJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBXb3Jrb3JkZXIgVGVtcGxhdGUnfSA9ICfQktGL0LHRgNCw0YLRjCDRiNCw0LHQu9C+0L0g0LTQu9GPINC30LDQtNCw0YfQuCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyQWdlbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgV29ya29yZGVyIEFnZW50IG9mICVzJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckRlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHdvcmtvcmRlcj8nfSA9ICfQktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INC20LXQu9Cw0LXRgtC1INGD0LTQsNC70LjRgtGMINGN0YLRgyDQt9Cw0LTQsNGH0YM/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIFdvcmtvcmRlci4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgQ29uZGl0aW9uISd9ID0KICAgICAgICAn0JLRiyDQvdC1INC80L7QttC10YLQtSDRg9C00LDQu9C40YLRjCDRjdGC0YMg0LfQsNC00LDRh9GDLiDQntC90LAg0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC60LDQuiDQvNC40L3QuNC80YPQvCDQsiDQvtC00L3QvtC8INGD0YHQu9C+0LLQuNC4ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIFdvcmtvcmRlciBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgQ29uZGl0aW9uKHMpJ30gPSAn0K3RgtCwINC30LDQtNCw0YfQsCDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LIg0YHQu9C10LTRg9GO0YnQuNGFINGD0YHQu9C+0LLQuNGP0YUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgJXMlcy0lcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIGZvbGxvd2luZyB3b3Jrb3JkZXJzIGFjY29yZGluZ2x5J30gPSAn0J/QtdGA0LXQvNC10YHRgtC40YLRjC/RgdC00LLQuNC90YPRgtGMINGB0LvQtdC00YPRjtGJ0LjQtSDQt9Cw0LTQsNGH0Lgg0YHQvtC+0YLQstC10YLRgdGC0LLQtdC90L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGUgcGxhbm5lZCBlbmQgdGltZSBvZiB0aGlzIHdvcmtvcmRlciBpcyBjaGFuZ2VkLCB0aGUgcGxhbm5lZCBzdGFydCB0aW1lcyBvZiBhbGwgZm9sbG93aW5nIHdvcmtvcmRlcnMgd2lsbCBiZSBjaGFuZ2VkIGFjY29yZGluZ2x5J30gPQogICAgICAgICfQldGB0LvQuCDQt9Cw0L/Qu9Cw0L3QuNGA0L7QstCw0L3QvdC+0LUg0LLRgNC10LzRjyDQvtC60L7QvdGH0LDQvdC40Y8g0LfQsNC00LDRh9C4INCx0YPQtNC10YIg0LjQt9C80LXQvdC10L3Qviwg0LfQsNC/0LvQsNC90LjRgNC+0LLQsNC90L3QvtC1INCy0YDQtdC80Y8g0L3QsNGH0LDQu9CwINCy0YHQtdGFINC/0L7RgdC70LXQtNGD0Y7RidC40YUg0LfQsNC00LDRhyDQsdGD0LTQtdGCINGB0L7QvtGC0LLQtdGC0YHRgtCy0LXQvdC90L4g0LjQt9C80LXQvdC10L3Qvic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiAlcyVzLSVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJSZXBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUmVwb3J0IG9mICVzJXMtJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0J30gPSAn0J7RgtGH0LXRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWN0dWFsIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgdGltZSEnfSA9ICfQktGA0LXQvNGPINC90LDRh9Cw0LvQsCDQtNC+0LvQttC90L4g0L/RgNC10LTRiNC10YHRgtCy0L7QstCw0YLRjCDQstGA0LXQvNC10L3QuCDQvtC60L7QvdGH0LDQvdC40Y8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBhY3R1YWwgc3RhcnQgdGltZSBtdXN0IGJlIHNldCwgd2hlbiB0aGUgYWN0dWFsIGVuZCB0aW1lIGlzIHNldCEnfSA9CiAgICAgICAgJ9Ck0LDQutGC0LjRh9C10YHQutC+0LUg0LLRgNC10LzRjyDQvdCw0YfQsNC70LAg0LTQvtC70LbQvdC+INCx0YvRgtGMINC30LDQtNCw0L3Qviwg0LXRgdC70Lgg0LfQsNC00LDQvdC+INCy0YDQtdC80Y8g0YTQsNC60YLQuNGH0LXRgdC60L7Qs9C+INC+0LrQvtC90YfQsNC90LjRjyEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRha2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgQWdlbnQnfSA9ICfQotC10LrRg9GJ0LjQuSDQsNCz0LXQvdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byB0YWtlIHRoaXMgd29ya29yZGVyPyd9ID0gJ9CS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INCy0LfRj9GC0Ywg0Y3RgtGDINC30LDQtNCw0YfRgz8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIFdvcmtvcmRlciBhcyBUZW1wbGF0ZSd9ID0gJ9Ch0L7RhdGA0LDQvdC40YLRjCDQt9Cw0LTQsNGH0YMg0LrQsNC6INGI0LDQsdC70L7QvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgd29ya29yZGVyIChhbmQgc3Vycm91bmRpbmcgY2hhbmdlKSd9ID0gJ9Cj0LTQsNC70LjRgtGMINC40YHRhdC+0LTQvdGD0Y4g0LfQsNC00LDRh9GDICAo0Lgg0L7QutGA0YPQttCw0Y7RidC10LUg0LjQt9C80LXQvdC10L3QuNC1KSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEluZm9ybWF0aW9uJ30gPSAn0JjQvdGE0L7RgNC80LDRhtC40Y8g0L4g0LfQsNC00LDRh9C1JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vua25vd24gbm90aWZpY2F0aW9uICVzISd9ID0gJ9Cd0LXQuNC30LLQtdGB0YLQvdC+0LUg0YPQstC10LTQvtC80LvQtdC90LjQtSAlcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgd2FzIGFuIGVycm9yIGNyZWF0aW5nIHRoZSBub3RpZmljYXRpb24uJ30gPSAn0J/RgNC+0LjQt9C+0YjQu9CwINC+0YjQuNCx0LrQsCDQv9GA0Lgg0YHQvtC30LTQsNC90LjQuCDRg9Cy0LXQtNC+0LzQu9C10L3QuNGPLic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDaGFuZ2VzJ30gPSAn0J7QsdC30L7RgDogSVRTTSDQmNC30LzQtdC90LXQvdC40Y8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUFkZC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHdpdGggVGlja2V0SUQgJXMgZG9lcyBub3QgZXhpc3QhJ30gPSAn0JfQsNGP0LLQutCwINGBINGC0LDQutC40LwgVGlja2V0SUQgJXMg0L3QtSDRgdGD0YnQtdGB0YLQstGD0LXRgiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlzc2luZyBzeXNjb25maWcgb3B0aW9uICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiISd9ID0KICAgICAgICAn0J/RgNC+0L/Rg9GJ0LXQvSDQv9Cw0YDQsNC80LXRgtGAINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGFkZCBjaGFuZ2UhJ30gPSAn0J3QtSDRg9C00LDQu9C+0YHRjCDQtNC+0LHQsNCy0LjRgtGMINC40LfQvNC10L3QtdC90LjQtSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUFkZEZyb21UZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSBjaGFuZ2UgZnJvbSB0ZW1wbGF0ZSEnfSA9ICfQndC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINC40LfQvNC10L3QtdC90LjQtSDQuNC3INGI0LDQsdC70L7QvdCwISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ0FCVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJ0NoYW5nZUlEINC90LUg0LfQsNC00LDQvSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY2hhbmdlIGZvdW5kIGZvciBjaGFuZ2VJRCAlcy4nfSA9ICfQndC1INC90LDQudC00LXQvdC+INC40LfQvNC10L3QtdC90LjQuSDQtNC70Y8gQ2hhbmdlSUQgJXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBDQUIgb2YgY2hhbmdlICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAnQ0FCINCY0LfQvNC10L3QtdC90LjRjyAiJXMiINC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDRgNCw0LfQvNC90L7QttC10L3Qvi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCB0aGUgdGVtcGxhdGUuJ30gPSAn0J3QtSDRg9C00LDQu9C+0YHRjCDQtNC+0LHQsNCy0LjRgtGMINGI0LDQsdC70L7QvS4gJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDb25kaXRpb24ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICfQmNC30LzQtdC90LXQvdC40LUgIiVzIiDQvdC1INC90LDQudC00LXQvdC+INCyINCR0JQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQ29uZGl0aW9uSUQgJXMhJ30gPSAn0J3QtdCy0L7Qt9C80L7QttC90L4g0YPQtNCw0LvQuNGC0YwgQ29uZGl0aW9uSUQgJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyAlcyBpcyBnaXZlbiEnfSA9ICclcyDQvdC1INC30LDQtNCw0L0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBjcmVhdGUgbmV3IGNvbmRpdGlvbiEnfSA9ICfQndC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINC90L7QstC+0LUg0YPRgdC70L7QstC40LUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgQ29uZGl0aW9uSUQgJXMhJ30gPSAn0J3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMIENvbmRpdGlvbklEICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICfQndC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0YwgRXhwcmVzc2lvbklEICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIG5ldyBFeHByZXNzaW9uISd9ID0gJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0L3QvtCy0L7QtSDQktGL0YDQsNC20LXQvdC40LUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgQWN0aW9uSUQgJXMhJ30gPSAn0J3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMIEFjdGlvbklEICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIG5ldyBBY3Rpb24hJ30gPSAn0J3QtSDRg9C00LDQu9C+0YHRjCDQtNC+0LHQsNCy0LjRgtGMINC90L7QstC+0LUg0JTQtdC50YHRgtCy0LjQtSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBFeHByZXNzaW9uSUQgJXMhJ30gPSAn0J3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCBFeHByZXNzaW9uSUQgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQWN0aW9uSUQgJXMhJ30gPSAn0J3QtdCy0L7Qt9C80L7QttC90L4g0YPQtNCw0LvQuNGC0YwgQWN0aW9uSUQgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yOiBVbmtub3duIGZpZWxkIHR5cGUgIiVzIiEnfSA9ICfQntGI0LjQsdC60LA6INCd0LXQuNC30LLQtdGB0YLQvdGL0Lkg0YLQuNC/INC/0L7Qu9GPICIlcyIhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbklEICVzIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgZ2l2ZW4gQ2hhbmdlSUQgJXMhJ30gPSAnQ29uZGl0aW9uSUQgJXMg0L3QtSDQv9GA0LjQvdCw0LTQu9C10LbQuNGCINC30LDQtNCw0L3QvdC+0LzRgyBDaGFuZ2VJRCAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgZG9lcyBub3QgaGF2ZSBhbiBhbGxvd2VkIGNoYW5nZSBzdGF0ZSB0byBiZSBkZWxldGVkISd9ID0KICAgICAgICAn0JjQt9C80LXQvdC10L3QuNC1ICIlcyIg0L3QtSDRgdC+0LTQtdGA0LbQuNGCINGA0LDQt9GA0LXRiNC10L3QvdGL0YUg0LTQu9GPINGD0LTQsNC70LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNC5ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjaGFuZ2VJRCAlcyEnfSA9ICfQndC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMIENoYW5nZUlEICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UhJ30gPSAn0J3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMINCY0LfQvNC10L3QtdC90LjQtSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJ9Cd0LXQstC+0LfQvNC+0LbQvdC+INC+0YLQvtCx0YDQsNC30LjRgtGMINC40YHRgtC+0YDQuNGOLCDRgtCw0Log0LrQsNC6INC90LUg0LfQsNC00LDQvSBDaGFuZ2VJRCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICfQmNC30LzQtdC90LXQvdC40LUgIiVzIiDQvdC1INC90LDQudC00LXQvdC+INCyINCR0JQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vua25vd24gdHlwZSAiJXMiIGVuY291bnRlcmVkISd9ID0gJ9Ce0LHQvdCw0YDRg9C20LXQvSDQvdC10LjQt9Cy0LXRgdGC0L3Ri9C5INGC0LjQvyAiJSBzIiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnknfSA9ICfQmNGB0YLQvtGA0LjRjyDQmNC30LzQtdC90LXQvdC40LknOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5IHpvb20sIG5vIEhpc3RvcnlFbnRyeUlEIGlzIGdpdmVuISd9ID0gJ9Cd0LXQstC+0LfQvNC+0LbQvdC+INC+0YLQvtCx0YDQsNC30LjRgtGMINC40YHRgtC+0YDQuNGOLCDQvdC1INC30LDQtNCw0L0gSGlzdG9yeUVudHJ5SUQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnlFbnRyeSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdIaXN0b3J5RW50cnkgIiVzIiDQvdC1INC90LDQudC00LXQvdC+INCyINCR0JQhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlIENBQiBmb3IgQ2hhbmdlICVzISd9ID0gJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCAgQ0FCINCY0LfQvNC10L3QtdC90LjRjyDQtNC70Y8g0JjQt9C80LXQvdC10L3QuNGPICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSAlcyEnfSA9ICfQndC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0Ywg0JjQt9C80LXQvdC10L3QuNC1ICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTWFuYWdlci5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IENoYW5nZU1hbmFnZXInfSA9ICfQntCx0LfQvtGAOiDQnNC10L3QtdC00LbQtdGAINC40LfQvNC10L3QtdC90LjQuSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBDQUInfSA9ICfQntCx0LfQvtGAOiDQnNC+0LggQ0FCJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeUNoYW5nZXMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBDaGFuZ2VzJ30gPSAn0J7QsdC30L7RgDog0JzQvtC4INCY0LfQvNC10L3QtdC90LjRjyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgV29ya29yZGVycyd9ID0gJ9Ce0LHQt9C+0YA6INCc0L7QuCDQl9Cw0LTQsNGH0LgnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVBJUi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFBJUid9ID0gJ9Ce0LHQt9C+0YA6IFBJUic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUFNBLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUFNBJ30gPSAn0J7QsdC30L7RgDogUFNBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ9CX0LDQtNCw0YfQsCAiJXMiINC90LUg0L3QsNC50LTQtdC90LAg0LIg0JHQlCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGNyZWF0ZSBvdXRwdXQsIGFzIHRoZSB3b3Jrb3JkZXIgaXMgbm90IGF0dGFjaGVkIHRvIGEgY2hhbmdlISd9ID0KICAgICAgICAn0J3QtdCy0L7Qt9C80L7QttC90L4g0YHQvtC30LTQsNGC0Ywg0YDQtdC30YPQu9GM0YLQsNGCLCDRgtCw0Log0LrQsNC6INCX0LDQtNCw0YfQsCDQvdC1INC/0YDQuNC60YDQtdC/0LvQtdC90LAg0Log0JjQt9C80LXQvdC10L3QuNGOISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgbm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAn0J3QtdCy0L7Qt9C80L7QttC90L4g0YHQvtC30LTQsNGC0Ywg0YDQtdC30YPQu9GM0YLQsNGCLCDRgtCw0Log0LrQsNC6INC90LUg0LfQsNC00LDQvSBDaGFuZ2VJRCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93biBjaGFuZ2UgdGl0bGUnfSA9ICfQndC10LjQt9Cy0LXRgdGC0L3Ri9C5INC30LDQs9C+0LvQvtCy0L7QuiDQmNC30LzQtdC90LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXInfSA9ICfQl9Cw0LTQsNGH0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93biB3b3Jrb3JkZXIgdGl0bGUnfSA9ICfQndC10LjQt9Cy0LXRgdGC0L3Ri9C5INC30LDQs9C+0LvQvtCy0L7QuiDQl9Cw0LTQsNGH0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgT3ZlcnZpZXcgKCVzKSd9ID0gJ9Ce0LHQt9C+0YAg0JfQsNC00LDRhyBJVFNNICglcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZFN0YXJ0VGltZSd9ID0gJ9CX0LDQv9C70LDQvdC40YDQvtCy0LDQvdC90L7QtSDQstGA0LXQvNGPINC90LDRh9Cw0LvQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkRW5kVGltZSd9ID0gJ9CX0LDQv9C70LDQvdC40YDQvtCy0LDQvdC90L7QtSDQstGA0LXQvNGPINC+0LrQvtC90YfQsNC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxTdGFydFRpbWUnfSA9ICfQpNCw0LrRgtC40YfQtdGB0LrQvtC1INCy0YDQtdC80Y8g0L3QsNGH0LDQu9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbEVuZFRpbWUnfSA9ICfQpNCw0LrRgtC40YfQtdGB0LrQvtC1INCy0YDQtdC80Y8g0L7QutC+0L3Rh9Cw0L3QuNGPJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VSZXNldC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHJlc2V0IFdvcmtPcmRlciAlcyBvZiBDaGFuZ2UgJXMhJ30gPSAn0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGH0LjRgdGC0LjRgtGMINCX0LDQtNCw0YfRgyAlcyDQmNC30LzQtdC90LXQvdC40Y8gJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byByZXNldCBDaGFuZ2UgJXMhJ30gPSAn0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGH0LjRgdGC0LjRgtGMINCY0LfQvNC10L3QtdC90LjQtSAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVNjaGVkdWxlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogQ2hhbmdlIFNjaGVkdWxlJ30gPSAn0J7QsdC30L7RgDog0J/Qu9Cw0L3QuNGA0L7QstGJ0LjQuiDQuNC30LzQtdC90LXQvdC40LknOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCd9ID0gJ9Cf0L7QuNGB0Log0JjQt9C80LXQvdC10L3QuNC5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZVRpdGxlJ30gPSAn0JfQsNCz0L7Qu9C+0LLQvtC6INC40LfQvNC10L3QtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJzJ30gPSAn0JfQsNC00LDRh9C4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZVN0YXRlJ30gPSAn0KHQvtGB0YLQvtGP0L3QuNC1INC40LfQvNC10L3QtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2VhcmNoIFJlc3VsdCd9ID0gJ9Cg0LXQt9GD0LvRjNGC0LDRgiDQv9C+0LjRgdC60LAg0JjQt9C80LXQvdC10L3QuNC5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBOdW1iZXInfSA9ICfQndC+0LzQtdGAINCY0LfQvNC10L3QtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrIE9yZGVyIFRpdGxlJ30gPSAn0JfQsNCz0L7Qu9C+0LLQvtC6INCX0LDQtNCw0YfQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVzY3JpcHRpb24nfSA9ICfQntC/0LjRgdCw0L3QuNC1INCY0LfQvNC10L3QtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSnVzdGlmaWNhdGlvbid9ID0gJ9Ce0LHQvtGB0L3QvtCy0LDQvdC40LUg0JjQt9C80LXQvdC10L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBJbnN0cnVjdGlvbid9ID0gJ9CY0L3RgdGC0YDRg9C60YbQuNC4INC/0L4g0JfQsNC00LDRh9C1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBSZXBvcnQnfSA9ICfQntGC0YfQtdGCINC/0L4g0JfQsNC00LDRh9C1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBQcmlvcml0eSd9ID0gJ9Cf0YDQuNC+0YDQuNGC0LXRgiDQmNC30LzQtdC90LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEltcGFjdCd9ID0gJ9CS0LvQuNGP0L3QuNC1INCY0LfQvNC10L3QtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAn0KHQvtC30LTQsNC7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBTdGF0ZSd9ID0gJ9Ch0L7RgdGC0L7Rj9C90LjQtSDQl9Cw0LTQsNGH0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFR5cGUnfSA9ICfQotC40L8g0JfQsNC00LDRh9C4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBBZ2VudCd9ID0gJ9CQ0LPQtdC90YIg0JfQsNC00LDRh9C4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZm9yZSd9ID0gJ9C00L4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAn0JjQt9C80LXQvdC10L3QuNC1ICIlcyIg0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINGA0LDQt9C80L3QvtC20LXQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIHRoZSB0ZW1wbGF0ZSAiJXMiLid9ID0gJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCDRiNCw0LHQu9C+0L0gIiVzIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBjaGFuZ2UgIiVzIi4nfSA9ICfQndC10LLQvtC30LzQvtC20L3QviDRg9C00LDQu9C40YLRjCDQmNC30LzQtdC90LXQvdC40LUgIiVzIi4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRpbWVTbG90LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlIGNhblwndCBiZSBtb3ZlZCwgYXMgaXQgaGFzIG5vIHdvcmtvcmRlcnMuJ30gPSAn0JjQt9C80LXQvdC10L3QuNC1INC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDQv9C10YDQtdC80LXRidC10L3QviDRgtCw0Log0LrQsNC6INC90LUg0LjQvNC10LXRgiDQl9Cw0LTQsNGHLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgZmlyc3QuJ30gPSAn0KHQvdCw0YfQsNC70LAg0LTQvtCx0LDQstGM0YLQtSDQl9Cw0LTQsNGH0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBtb3ZlIGEgY2hhbmdlIHdoaWNoIGFscmVhZHkgaGFzIHN0YXJ0ZWQhJ30gPSAn0J3QtdCy0L7Qt9C80L7QttC90L4g0L/QtdGA0LXQvNC10YHRgtC40YLRjCDQmNC30LzQtdC90LXQvdC40LUsINGA0LDQsdC+0YLQsCDQv9C+INC60L7RgtC+0YDQvtC80YMg0YPQttC1INC90LDRh9Cw0YLQsCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIG1vdmUgdGhlIGluZGl2aWR1YWwgd29ya29yZGVycyBpbnN0ZWFkLid9ID0gJ9CS0LzQtdGB0YLQviDRjdGC0L7Qs9C+INC/0LXRgNC10LzQtdGB0YLQuNGC0LUg0L7RgtC00LXQu9GM0L3Ri9C1INC30LDQtNCw0YfQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGN1cnJlbnQgJXMgY291bGQgbm90IGJlIGRldGVybWluZWQuJ30gPSAn0KLQtdC60YPRidC40LkgJXMg0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINC+0L/RgNC10LTQtdC70LXQvS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlICVzIG9mIGFsbCB3b3Jrb3JkZXJzIGhhcyB0byBiZSBkZWZpbmVkLid9ID0gJyVzINCy0YHQtdGFINCX0LDQtNCw0Ycg0LTQvtC70LbQvdGLINCx0YvRgtGMINC30LDQtNCw0L3Riy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIG1vdmUgdGltZSBzbG90IGZvciB3b3Jrb3JkZXIgIyVzISd9ID0gJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQvNC10YHRgtC40YLRjCDQstGA0LXQvNC10L3QndC+0Lkg0YHQu9C+0YIg0LTQu9GPINCX0LDQtNCw0YfQuCAjJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgJXMgcGVybWlzc2lvbiEnfSA9ICfQktCw0Lwg0L3QtdC+0LHRhdC+0LTQuNC80L4g0LjQvNC10YLRjCAg0L/RgNCw0LLQviAlcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gVGVtcGxhdGVJRCBpcyBnaXZlbiEnfSA9ICfQndC1INC30LDQtNCw0L0gVGVtcGxhdGVJRCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAn0KjQsNCx0LvQvtC9ICIlcyIg0L3QtSDQvdCw0LnQtNC10L0g0LIg0JHQlCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgdGVtcGxhdGUgJXMhJ30gPSAn0J3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCDRiNCw0LHQu9C+0L0gJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgJXMhJ30gPSAn0J3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMINGI0LDQsdC70L7QvSAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdENBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBUZW1wbGF0ZSAiJXMiISd9ID0gJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCDRiNCw0LHQu9C+0L0gIiVzIiEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlISd9ID0gJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNC1ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIHdvcmtvcmRlciBmcm9tIHRlbXBsYXRlISd9ID0gJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0JfQsNC00LDRh9GDINC40Lcg0YjQsNCx0LvQvtC90LAhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogVGVtcGxhdGUnfSA9ICfQntCx0LfQvtGAOiDQqNCw0LHQu9C+0L3Riyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyBvbiB0aGUgY2hhbmdlISd9ID0gJ9CS0LDQvCDQvdC10L7QsdGF0L7QtNC40LzRiyDQv9GA0LDQstCwICVzINC90LAg0JjQt9C80LXQvdC10L3QuNC1ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIHdvcmtvcmRlciEnfSA9ICfQndC1INGD0LTQsNC70L7RgdGMINC00L7QsdCw0LLQuNGC0Ywg0JfQsNC00LDRh9GDISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWdlbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFdvcmtPcmRlcklEIGlzIGdpdmVuISd9ID0gJ1dvcmtPcmRlcklEINC90LUg0LfQsNC00LDQvSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHNldCB0aGUgd29ya29yZGVyIGFnZW50IG9mIHRoZSB3b3Jrb3JkZXIgIiVzIiB0byBlbXB0eSEnfSA9CiAgICAgICAgJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQsdGA0L7RgdC40YLRjCDQsNCz0LXQvdGC0LAg0LTQu9GPINCX0LDQtNCw0YfQuCAiJXMiISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIHRoZSB3b3Jrb3JkZXIgIiVzIiEnfSA9ICfQndC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0Ywg0JfQsNC00LDRh9GDICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZmluZCBDaGFuZ2UgZm9yIFdvcmtPcmRlciAlcyEnfSA9ICfQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0JjQt9C80LXQvdC10L3QuNC1INC00LvRjyDQl9Cw0LTQsNGH0LggJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHdvcmtvcmRlciAlcyEnfSA9ICfQndC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMINCX0LDQtNCw0YfRgyAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgV29ya09yZGVyICVzISd9ID0gJ9Cd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCDQl9Cw0LTQsNGH0YMgJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBhcyBubyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICfQndC10LLQvtC30LzQvtC20L3QviDQvtGC0L7QsdGA0LDQt9C40YLRjCDQuNGB0YLQvtGA0LjRjiwg0YLQsNC6INC60LDQuiDQvdC1INC30LDQtNCw0L0gV29ya09yZGVySUQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAn0JfQsNC00LDRh9CwICIlcyIg0L3QtSDQvdCw0LnQtNC10L3QsCDQsiDQkdCUISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJIaXN0b3J5OjonfSA9ICfQmNGB0YLQvtGA0LjRj9CX0LDQtNCw0YfQuDo6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5J30gPSAn0JjRgdGC0L7RgNC40Y8g0JfQsNC00LDRh9C4JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5Wm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBlbnRyeSAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAn0JfQsNC/0LjRgdGMINCY0YHRgtC+0YDQuNC4ICIlcyIg0L3QtSDQvdCw0LnQtNC10L3QsCDQsiDQkdCUISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSBab29tJ30gPSAn0JjRgdGC0L7RgNC40Y8g0JfQsNC00LDRh9C4INC/0L7QtNGA0L7QsdC90L4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlclRha2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB0YWtlIHRoZSB3b3Jrb3JkZXIgJXMhJ30gPSAn0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINCX0LDQtNCw0YfRgyAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgd29ya29yZGVyICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAn0JfQsNC00LDRh9CwICIlcyIg0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINGA0LDQt9C80L3QvtC20LXQvdCwLic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9JVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIGNvbmZpZyBvcHRpb24gJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBvcHRpb24gJXMgbmVlZHMgdG8gYmUgYSBIQVNIIHJlZiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY29uZmlnIG9wdGlvbiBmb3VuZCBmb3IgdGhlIHZpZXcgIiVzIiEnfSA9ICfQndC1INC90LDRgdGC0YDQvtC10L0g0L7QsdC30L7RgCAiJXMiISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaXRsZTogJXMgfCBUeXBlOiAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IENBQnMnfSA9ICfQnNC+0LggQ0FCJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNoYW5nZXMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IENoYW5nZXMnfSA9ICfQnNC+0Lgg0LjQt9C80LXQvdC10L3QuNGPJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeVdvcmtPcmRlcnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IFdvcmsgT3JkZXJzJ30gPSAn0JzQvtC4INCX0LDQtNCw0YfQuCc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNoYW5nZU1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVxdWVzdGVkJ30gPSAn0LfQsNC/0YDQvtGI0LXQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3BlbmRpbmcgYXBwcm92YWwnfSA9ICfQvtGC0LvQvtC20LXQvdC90L7QtSDRg9GC0LLQtdGA0LbQtNC10L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlamVjdGVkJ30gPSAn0L7RgtCy0LXRgNCz0L3Rg9GC0L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYXBwcm92ZWQnfSA9ICfQo9GC0LLQtdGA0LbQtNC10L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbiBwcm9ncmVzcyd9ID0gJ9CyINGA0LDQsdC+0YLQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIHBpcid9ID0gJ9C+0LbQuNC00LDQtdGCINC+0LTQvtCx0YDQtdC90LjRjyBQSVInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc3VjY2Vzc2Z1bCd9ID0gJ9GD0YHQv9C10YjQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ZhaWxlZCd9ID0gJ9C90LUg0YPQtNCw0LvQvtGB0YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2FuY2VsZWQnfSA9ICfQvtGC0LzQtdC90LXQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JldHJhY3RlZCd9ID0gJ9C+0YLQutCw0LfQsNC90L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY3JlYXRlZCd9ID0gJ9GB0L7Qt9C00LDQvdC+KNCwKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhY2NlcHRlZCd9ID0gJ9Cf0YDQuNC90Y/RgtC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlYWR5J30gPSAn0LPQvtGC0L7QstC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FwcHJvdmFsJ30gPSAn0KPRgtCy0LXRgNC20LTQtdC90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3b3Jrb3JkZXInfSA9ICfQl9Cw0LTQsNGH0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmFja291dCd9ID0gJ9Cf0LvQsNC9INC+0YLQutCw0YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydkZWNpc2lvbid9ID0gJ9GA0LXRiNC10L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bpcid9ID0gJ1BJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcv0LDQvdCw0LvQuNC3INC/0L4g0L7QutC+0L3Rh9Cw0L3QuNC4KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyd9ID0gJ9Cv0LLQu9GP0LXRgtGB0Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbm90J30gPSAn0L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBlbXB0eSd9ID0gJ9C/0YPRgdGC0L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbm90IGVtcHR5J30gPSAn0L3QtSDQv9GD0YHRgtC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGdyZWF0ZXIgdGhhbid9ID0gJ9Cx0L7Qu9GM0YjQtSDRh9C10LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbGVzcyB0aGFuJ30gPSAn0LzQtdC90YzRiNC1INGH0LXQvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBiZWZvcmUnfSA9ICfQtNC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGFmdGVyJ30gPSAn0L/QvtGB0LvQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjb250YWlucyd9ID0gJ9GB0L7QtNC10YDQttC40YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGNvbnRhaW5zJ30gPSAn0L3QtSDRgdC+0LTQtdGA0LbQuNGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZ2lucyB3aXRoJ30gPSAn0L3QsNGH0LDRgtGMINGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2VuZHMgd2l0aCd9ID0gJ9C+0LrQvtC90YfQuNGC0Ywg0YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc2V0J30gPSAn0YPRgdGC0LDQvdC+0LLQu9C10L3Qvic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbGlzdCBvZiB0aGUgYWdlbnRzIHdobyBoYXZlIHBlcm1pc3Npb24gdG8gdGFrZSB3b3Jrb3JkZXJzLiBLZXkgaXMgYSBsb2dpbiBuYW1lLiBDb250ZW50IGlzIDAgb3IgMS4nfSA9CiAgICAgICAgJ9Ch0L/QuNGB0L7QuiDQsNCz0LXQvdGC0L7Qsiwg0LjQvNC10Y7RidC40YUg0L/RgNCw0LLQsCDQstC30Y/RgtGMINC30LDQtNCw0YfRgyDQsiDRgNCw0LHQvtGC0YMuINCa0LvRjtGHIC0g0LvQvtCz0LjQvSwg0KHQvtC00LXRgNC20LDQvdC40LUgLSAwINC40LvQuCAxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbGlzdCBvZiB3b3Jrb3JkZXIgc3RhdGVzLCBhdCB3aGljaCB0aGUgQWN0dWFsU3RhcnRUaW1lIG9mIGEgd29ya29yZGVyIHdpbGwgYmUgc2V0IGlmIGl0IHdhcyBlbXB0eSBhdCB0aGlzIHBvaW50Lid9ID0KICAgICAgICAn0KHQv9C40YHQvtC6INGB0L7RgdGC0L7Rj9C90LjQuSDQt9Cw0LTQsNGH0Lgg0LIg0LrQvtGC0L7RgNGL0YUg0YTQsNC60YLQuNGH0LXRgdC60L7QtSDQstGA0LXQvNGPINC90LDRh9Cw0LvQsCDQt9Cw0LTQsNGH0Lgg0LzQvtC20LXRgiDQsdGL0YLRjCDQt9Cw0LTQsNC90L4sINC10YHQu9C4INC10YnQtSDQv9GD0YHRgtC+INC6INGN0YLQvtC80YMg0LzQvtC80LXQvdGC0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXInfSA9ICfQlNC+0LHQsNCy0LjRgtGMINC30LDQtNCw0YfRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyIChmcm9tIFRlbXBsYXRlKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBjaGFuZ2UgZnJvbSB0ZW1wbGF0ZS4nfSA9ICfQlNC+0LHQsNCy0LjRgtGMINCY0LfQvNC10L3QtdC90LjQtSDQuNC3INGI0LDQsdC70L7QvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBjaGFuZ2UuJ30gPSAn0JTQvtCx0LDQstC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIChmcm9tIHRlbXBsYXRlKSB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgdG8gdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGZyb20gdGVtcGxhdGUnfSA9ICfQlNC+0LHQsNCy0LjRgtGMLCDQuNGB0L/QvtC70YzQt9GD0Y8g0YjQsNCx0LvQvtC9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIHRoZSBDSVAgbWF0cml4Lid9ID0gJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INC80LDRgtGA0LjRhtC10LkgQ0lQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIHRoZSBzdGF0ZSBtYWNoaW5lLid9ID0gJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INC80LDRiNC40L3QvtC5INGB0L7RgdGC0L7Rj9C90LjQuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2UgYWR2aXNvcnkgYm9hcmRzLid9ID0KICAgICAgICAn0JzQvtC00YPQu9GMINC+0YLQvtCx0YDQsNC20LDRjtGJ0LjQuSDQutC+0LvQuNGH0LXRgdGC0LLQviBDQUIg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzIG1hbmFnZWQgYnkgdGhlIHVzZXIuJ30gPQogICAgICAgICfQnNC+0LTRg9C70Ywg0L7RgtC+0LHRgNCw0LbQsNGO0YnQuNC5INC60L7Qu9C40YfQtdGB0YLQstC+INC40LfQvNC10L3QtdC90LjQuSDRgSDQutC+0YLQvtGA0YvQvNC4INGA0LDQsdC+0YLQsNC10YIg0LDQs9C10L3Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzLid9ID0KICAgICAgICAn0JzQvtC00YPQu9GMINC+0YLQvtCx0YDQsNC20LDRjtGJ0LjQuSDQutC+0LvQuNGH0LXRgdGC0LLQviDQuNC30LzQtdC90LXQvdC40LknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2Ygd29ya29yZGVycy4nfSA9CiAgICAgICAgJ9Cc0L7QtNGD0LvRjCDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5INC00LvRjyDQuNC90YLQtdGA0YTQtdC50YHQsCDQsNCz0LXQvdGC0LAg0LTQu9GPINC/0L7Qu9GD0YfQtdC90LjRjyDQutC+0LvQuNGH0LXRgdGC0LLQsCDQl9Cw0LTQsNGHLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgTWVtYmVyIFNlYXJjaCd9ID0gJ9Cf0L7QuNGB0Log0YfQu9C10L3QvtCyIENBQiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgY2hhbmdlIG1hbmFnZW1lbnQgdG9vbGJhcnMuIERlZmF1bHQ6IDMgaG91cnMgKDE4MCBtaW51dGVzKS4nfSA9CiAgICAgICAgJ9CS0YDQtdC80Y8g0LrRjdGI0LjRgNC+0LLQsNC90LjRjyDQsiDQvNC40L3Rg9GC0LDRhSDQtNC70Y8g0L/QsNC90LXQu9C4INGD0L/RgNCw0LLQu9C10L3QuNGPINC40LfQvNC10L3QtdC90LjRj9C80LguINCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiAzINGH0LDRgdCwICgxODAg0LzQuNC90YPRgikuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50LiBEZWZhdWx0OiA1IGRheXMgKDcyMDAgbWludXRlcykuJ30gPQogICAgICAgICfQktGA0LXQvNGPINC60Y3RiNC40YDQvtCy0LDQvdC40Y8g0LIg0LzQuNC90YPRgtCw0YUg0LTQu9GPINGD0L/RgNCw0LLQu9C10L3QuCDQuNC30LzQtdC90LXQvdC40Y/QvNC4LiDQn9C+INGD0LzQvtC70YfQsNC90LjRjjogNSDQtNC90LXQuSAoNzIwMCDQvNC40L3Rg9GCKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIENBQiBUZW1wbGF0ZXMnfSA9ICfQqNCw0LHQu9C+0L0g0LTQu9GPIENBQiDQmNC30LzQtdC90LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnkuJ30gPSAn0JjRgdGC0L7RgNC40Y8g0LjQt9C80LXQvdC10L3QuNC5Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW52b2x2ZWQgUGVyc29ucy4nfSA9ICfQodC/0LjRgdC+0Log0LLQvtCy0LvQtdGH0LXQvdC90YvRhSDRg9GH0LDRgdGC0L3QuNC60L7QsiDQmNC30LzQtdC90LXQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAn0JjQt9C80LXQvdC40YLRjCDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0YDQvtC6L9C30LDQv9C40YHQtdC5INC/0YDQuCDQv9GA0L7RgdC80L7RgtGA0LUg0LjQt9C80LXQvdC10L3QuNC5INCyINGE0L7RgNC80LDRgtC1IFNtYWxsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgT3ZlcnZpZXcuJ30gPSAn0J7QsdC30L7RgCDQmNC30LzQtdC90LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFByaW50Lid9ID0gJ9Cf0LXRh9Cw0YLRjCDQmNC30LzQtdC90LXQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZSd9ID0gJ9Cf0LvQsNC90LjRgNC+0LLRidC40Log0LjQt9C80LXQvdC10L3QuNC5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZS4nfSA9ICfQmNC30LzQtdC90LXQvdC40LUg0YDQsNGB0L/QuNGB0LDQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tLid9ID0gJ9Cf0L7QtNGA0L7QsdC90YvQuSDQv9GA0L7RgdC80L7RgtGAINCY0LfQvNC10L3QtdC90LjRjy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFuZCBXb3Jrb3JkZXIgVGVtcGxhdGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhbmQgd29ya29yZGVyIHRlbXBsYXRlcyBlZGl0ZWQgYnkgdGhpcyB1c2VyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYXJlYS4nfSA9ICfQntCx0LvQsNGB0YLRjCDQmNC30LzQtdC90LXQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBpbnZvbHZlZCBwZXJzb25zIG9mIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBsaW1pdCBwZXIgcGFnZSBmb3IgQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICfQmNC30LzQtdC90LjRgtGMINC40YHRgtC+0YfQvdC40Log0L/QvtC40YHQutCwIChiYWNrZW5kKSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbiBFZGl0J30gPSAn0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0YPRgdC70L7QstC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIE92ZXJ2aWV3J30gPSAn0J7QsdC30L7RgCDQo9GB0LvQvtCy0LjQuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmUgd2hpY2ggc2NyZWVuIHNob3VsZCBiZSBzaG93biBhZnRlciBhIG5ldyB3b3Jrb3JkZXIgaGFzIGJlZW4gY3JlYXRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmVzIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCB3aGVuIHBsYW5uZWQgdGhlIHN0YXJ0IHRpbWUgb3Igb3RoZXIgdGltZSB2YWx1ZXMgaGF2ZSBiZWVuIHJlYWNoZWQvcGFzc2VkLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGH0LDRgdGC0L7RgtGDINC+0YLQv9GA0LDQstC60Lgg0YPQstC10LTQvtC80LvQtdC90LjQuSwg0LrQvtCz0LTQsCDQt9Cw0L/Qu9Cw0L3QuNGA0L7QstCw0L3QvdC+0LUg0LLRgNC10LzRjyDQvdCw0YfQsNC70LAg0LjQu9C4INC00YDRg9Cz0LjQtSDQstGA0LXQvNC10J3QvdGL0LUg0LfQvdCw0YfQtdC90LjRjyDQtNC+0YHRgtC40LPQvdGD0YLRiy/Qv9GA0L7RiNC70LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBDaGFuZ2UnfSA9ICfQodC+0LfQtNCw0YLRjCDQuNC30LzQtdC90LXQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSAoZnJvbSBUZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgY2hhbmdlIChmcm9tIHRlbXBsYXRlKSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgSVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBub3RpZmljYXRpb25zLid9ID0gJ9Ch0L7Qt9C00LDQvdC40LUg0Lgg0YPQv9GA0LDQstC70LXQvdC40LUg0YPQstC10LTQvtC80LvQtdC90LjRj9C80Lgg0LIgSVRTTSDQo9C/0YDQsNCy0LvQtdC90LjQtSDQmNC30LzQtdC90LXQvdC40Y/QvNC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgZm9yIGEgd29ya29yZGVyLiBUaGlzIGVudHJ5IG11c3QgZXhpc3QgaW4gZ2VuZXJhbCBjYXRhbG9nIGNsYXNzIFwnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpUeXBlXCcuJ30gPQogICAgICAgICfQotC40L8g0LfQsNC00LDRh9C4INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLiDQntC9INC00L7Qu9C20LXQvSDQsdGL0YLRjCDQvtC/0LjRgdCw0L0g0LIg0LrQsNGH0LXRgdGC0LLQtSDQutC70LDRgdGB0LAg0LIg0J7QsdGJ0LXQvCDQutCw0YLQsNC70L7Qs9C1INCyIElUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6VHlwZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINCU0LXQudGB0YLQstC40Y8vQWN0aW9ucyDQutC+0LPQtNCwINC60L3QvtC/0LrQsCDQvdCw0YHRgtGA0L7QudC60Lgg0LTQvtGB0YLRg9C/0L3QsCDQsiDRgdCy0Y/Qt9Cw0L3QvdC+0Lwg0LLQuNC00LbQtdGC0LUgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4g0J7QsdGA0LDRgtC40YLQtSDQstC90LjQvNCw0L3QuNC1LCDRh9GC0L4g0Y3RgtC4INCU0LXQudGB0YLQstC40Y8vQWN0aW9ucyDQtNC+0LvQttC90Ysg0LjQvNC10YLRjCDQt9Cw0YDQtdCz0LjRgdGC0YDQuNGA0L7QstCw0L3QvdGL0LUgSlMg0LjQu9C4IENTUyDRhNCw0LnQu9GLOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyDQuCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgc2lnbmFscyBmb3IgZWFjaCB3b3Jrb3JkZXIgc3RhdGUuJ30gPSAn0JfQsNC00LDQtdGCINC40L3QtNC40LrQsNGC0L7RgNGLINC00LvRjyDQutCw0LbQtNC+0LPQviDRgdC+0YHRgtC+0Y/QvdC40Y8g0LfQsNC00LDRh9C4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBDaGFuZ2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IENoYW5nZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBXb3Jrb3JkZXIgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgV29ya29yZGVyIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjaGFuZ2UgbGlzdC4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDQvNC+0LTRg9C70Ywg0L/RgNC+0YHQvNC+0YLRgNCwINC00LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPINGB0L/QuNGB0LrQsCDQuNC30LzQtdC90LXQvdC40Lkg0LIgc21hbGwg0YTQvtGA0LzQsNGC0LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSB0ZW1wbGF0ZSBsaXN0Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC80L7QtNGD0LvRjCDQv9GA0L7RgdC80L7RgtGA0LAg0LTQu9GPINC+0YLQvtCx0YDQsNC20LXQvdC40Y8g0YHQv9C40YHQutCwINC30LDQtNCw0Ycg0LIgc21hbGwg0YTQvtGA0LzQsNGC0LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgYWNjb3VudGVkIHRpbWUuJ30gPSAn0JfQsNC00LDQtdGCINCy0L7Qt9C80L7QttC90L7RgdGC0Ywg0L/QtdGH0LDRgtC4INC30LDRgtGA0LDRh9C10L3QvdC+0LPQviDQstGA0LXQvNC10L3QuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBwbGFubmVkIGVmZm9ydC4nfSA9ICfQl9Cw0LTQsNC10YIg0LLQvtC30LzQvtC20L3QvtGB0YLRjCDQv9C10YfQsNGC0Lgg0L/Qu9Cw0L3QuNGA0YPQtdC80YvRhSDQt9Cw0YLRgNCw0YIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgcmVhY2hhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lKSBjaGFuZ2UgZW5kIHN0YXRlcyBzaG91bGQgYmUgYWxsb3dlZCBpZiBhIGNoYW5nZSBpcyBpbiBhIGxvY2tlZCBzdGF0ZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDQsdGD0LTRg9GCINC70LggKNC60LDQuiDQt9Cw0LTQsNC90L4g0LzQsNGI0LjQvdC+0Lkg0YHQvtGB0YLQvtGP0L3QuNC5KSDQutC+0L3QtdGH0L3Ri9C1INGB0L7RgdGC0L7Rj9C90LjRjyDQuNC30LzQtdC90LXQvdC40Y8g0YDQsNC30YDQtdGI0LXQvdGLICwg0LXRgdC70Lgg0LjQt9C80LXQvdC10L3QuNC1INCyINGB0L7RgdGC0L7Rj9C90LjQuCDQsdC70L7QutC40YDQvtCy0LrQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiByZWFjaGFibGUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUpIHdvcmtvcmRlciBlbmQgc3RhdGVzIHNob3VsZCBiZSBhbGxvd2VkIGlmIGEgd29ya29yZGVyIGlzIGluIGEgbG9ja2VkIHN0YXRlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINCx0YPQtNGD0YIg0LvQuCAo0LrQsNC6INC30LDQtNCw0L3QviDQvNCw0YjQuNC90L7QuSDRgdC+0YHRgtC+0Y/QvdC40LkpINC60L7QvdC10YfQvdGL0LUg0YHQvtGB0YLQvtGP0L3QuNGPINC30LDQtNCw0YfQuCDRgNCw0LfRgNC10YjQtdC90YssINC10YHQu9C4INC30LDQtNCw0YfQsCDQsiDRgdC+0YHRgtC+0Y/QvdC40Lgg0LHQu9C+0LrQuNGA0L7QstC60LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGFjY291bnRlZCB0aW1lIHNob3VsZCBiZSBzaG93bi4nfSA9ICfQl9Cw0LTQsNC10YIg0LLQvtC30LzQvtC20L3QvtGB0YLRjCDQvtGC0L7QsdGA0LDQttC10L3QuNGPINC30LDRgtGA0LDRh9C10L3QvdC+0LPQviDQstGA0LXQvNC10L3QuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWN0dWFsIHN0YXJ0IGFuZCBlbmQgdGltZXMgc2hvdWxkIGJlIHNldC4nfSA9ICfQl9Cw0LTQsNC10YIg0L3QtdC+0LHRhdC+0LTQuNC80L7RgdGC0Ywg0YPQutCw0LfQsNC90LjRjyDRhNCw0LrRgtC40YfQtdGB0LrQvtCz0L4g0LLRgNC10LzQtdC90Lgg0L3QsNGH0LDQu9CwINC4INC+0LrQvtC90YfQsNC90LjRjy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHNlYXJjaCBhbmQgdGhlIHdvcmtvcmRlciBzZWFyY2ggZnVuY3Rpb25zIGNvdWxkIHVzZSB0aGUgbWlycm9yIERCLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINCx0YPQtNC10YIg0LvQuCDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YzRgdGPINC30LXRgNC60LDQu9GM0L3QsNGPINCR0JQg0LTQu9GPINC/0L7QuNGB0LrQsCDQuNC30LzQtdC90LXQvdC40Lkg0Lgg0LfQsNC00LDRhy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHN0YXRlIGNhbiBiZSBzZXQgaW4gQWdlbnRJVFNNQ2hhbmdlRWRpdC4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDQstC+0LfQvNC+0LbQvdC+0YHRgtGMINGD0YHRgtCw0L3QvtCy0LrQuCDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjQt9C80LXQvdC10L3QuNGPINCyIEFnZW50SVRTTUNoYW5nZUVkaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcGxhbm5lZCBlZmZvcnQgc2hvdWxkIGJlIHNob3duLid9ID0gJ9CX0LDQtNCw0LXRgiDQvdC10L7QsdGF0L7QtNC40LzQvtGB0YLRjCDQvtGC0L7QsdGA0LDQttC10L3QuNGPINC/0LvQsNC90LjRgNGD0LXQvNGL0YUg0LfQsNGC0YDQsNGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgcHJpbnQgYnkgY3VzdG9tZXIuJ30gPSAn0JfQsNC00LDQtdGCINCy0L7Qt9C80L7QttC90L7RgdGC0Ywg0L/QtdGH0LDRgtC4INC60LvQuNC10L3RgtC+0Lwg0LfQsNC/0YDQvtGI0LXQvdC90L7QuSDQtNCw0YLRiy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNlYXJjaGVkIGJ5IGN1c3RvbWVyLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINCy0L7Qt9C80L7QttC90L7RgdGC0Ywg0L/QvtC40YHQutCwINC60LvQuNC10L3RgtC+0Lwg0LfQsNC/0YDQvtGI0LXQvdC90L7QuSDQtNCw0YLRiy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNldCBieSBjdXN0b21lci4nfSA9ICfQl9Cw0LTQsNC10YIg0LLQvtC30LzQvtC20L3QvtGB0YLRjCDRg9GB0YLQsNC90L7QstC60Lgg0LrQu9C40LXQvdGC0L7QvCDQt9Cw0L/RgNC+0YjQtdC90L3QvtC5INC00LDRgtGLLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2hvd24gYnkgY3VzdG9tZXIuJ30gPSAn0JfQsNC00LDQtdGCINCy0L7Qt9C80L7QttC90L7RgdGC0Ywg0L7RgtCx0YDQsNC20LXQvdC40Y8g0YMg0LrQu9C40LXQvdGC0LAg0LfQsNC/0YDQvtGI0LXQvdC90L7QuSDQtNCw0YLRiy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHN0YXRlIHNob3VsZCBiZSBzaG93bi4nfSA9ICfQl9Cw0LTQsNC10YIg0LLQvtC30LzQvtC20L3QvtGB0YLRjCDQvtGC0L7QsdGA0LDQttC10L3QuNGPINGB0L7RgdGC0L7Rj9C90LjRjyDQt9Cw0LTQsNGH0LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciB0aXRsZSBzaG91bGQgYmUgc2hvd24uJ30gPSAn0JfQsNC00LDQtdGCINCy0L7Qt9C80L7QttC90L7RgdGC0Ywg0L7RgtC+0LHRgNCw0LbQtdC90LjRjyDQt9Cw0LPQvtC70L7QstC60LAg0LfQsNC00LDRh9C4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHNob3duIGdyYXBoIGF0dHJpYnV0ZXMuJ30gPSAn0JfQsNC00LDQtdGCINC+0YLQvtCx0YDQsNC20LDQtdC80YvQtSDQsNGC0YDQuNCx0YPRgtGLINC00LjQsNCz0YDQsNC80LzRiy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGF0IG9ubHkgY2hhbmdlcyBjb250YWluaW5nIFdvcmtvcmRlcnMgbGlua2VkIHdpdGggc2VydmljZXMsIHdoaWNoIHRoZSBjdXN0b21lciB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIHVzZSB3aWxsIGJlIHNob3duLiBBbnkgb3RoZXIgY2hhbmdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICfQl9Cw0LTQtdGCLCDRh9GC0L4g0YLQvtC70YzQutC+INC40LfQvNC10L3QtdC90LjRjyDRgdC+0LTQtdGA0LbQsNGJ0LjQtSDQt9Cw0LTQsNGH0Lgg0YHQstGP0LfQsNC90L3Ri9C1INGBINGB0LXRgNCy0LjRgdCw0LzQuCDQvdCwINC60L7RgtC+0YDRi9C1INGDINC60LvQuNC10L3RgtCwINC10YHRgtGMINC/0YDQsNCy0LAg0LHRg9C00YPRgiDQvtGC0L7QsdGA0LDQttCw0YLRjNGB0Y8uINCb0Y7QsdGL0LUg0LTRgNGD0LPQuNC1INC40LfQvNC10L3QtdC90LjRjyDQvdC1INC+0YLQvtCx0YDQsNC20LDRjtGC0YHRjy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgYWxsb3dlZCB0byBkZWxldGUuJ30gPSAn0JfQsNC00LDQtdGCINGB0L7RgdGC0L7Rj9C90LjRjyDQuNC30LzQtdC90LXQvdC40Y8g0LrQvtGC0L7RgNGL0LUg0LHRg9C00LXRgiDRgNCw0LfRgNC10YjQtdC90L4g0YPQtNCw0LvQuNGC0YwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFBTQSBvdmVydmlldy4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjQt9C80LXQvdC10L3QuNC5INC40YHQv9C+0LvRjNC30YPQtdC80YvQtSDQsiDRhNC40LvRjNGC0YDQsNGFINCyINC+0LHQt9C+0YDQtSDQuNC30LzQtdC90LXQvdC40LkgUFNBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjQt9C80LXQvdC10L3QuNC5INC40YHQv9C+0LvRjNC30YPQtdC80YvQtSDQsiDRhNC40LvRjNGC0YDQsNGFINCyINC+0LHQt9C+0YDQtSDQn9C70LDQvdC40YDQvtCy0YnQuNC60LAg0LjQt9C80LXQvdC10L3QuNC5Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0L7RgdGC0L7Rj9C90LjRjyDQuNC30LzQtdC90LXQvdC40Lkg0LjRgdC/0L7Qu9GM0LfRg9C10LzRi9C1INCyINGE0LjQu9GM0YLRgNCw0YUg0LIg0L7QsdC30L7RgNC1INCc0L7QuCBDQUIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0L7RgdGC0L7Rj9C90LjRjyDQuNC30LzQtdC90LXQvdC40Lkg0LjRgdC/0L7Qu9GM0LfRg9C10LzRi9C1INCyINGE0LjQu9GM0YLRgNCw0YUg0LIg0L7QsdC30L7RgNC1INCc0L7QuCDQuNC30LzQtdC90LXQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHQvtGB0YLQvtGP0L3QuNGPINC40LfQvNC10L3QtdC90LjQuSDQuNGB0L/QvtC70YzQt9GD0LXQvNGL0LUg0LIg0YTQuNC70YzRgtGA0LDRhSDQsiDQvtCx0LfQvtGA0LUg0LzQtdC90LXQtNC20LXRgNC+0LIg0LjQt9C80LXQvdC10L3QuNC5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0L7RgdGC0L7Rj9C90LjRjyDQuNC30LzQtdC90LXQvdC40Lkg0LjRgdC/0L7Qu9GM0LfRg9C10LzRi9C1INCyINGE0LjQu9GM0YLRgNCw0YUg0LIg0L7QsdC30L7RgNC1INC40LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHQvtGB0YLQvtGP0L3QuNGPINC40LfQvNC10L3QtdC90LjQuSDQuNGB0L/QvtC70YzQt9GD0LXQvNGL0LUg0LIg0YTQuNC70YzRgtGA0LDRhSDQsiDQvtCx0LfQvtGA0LUg0LjQt9C80LXQvdC10L3QuNC5INGD0L/RgNCw0LLQu9GP0LXQvNGL0YUg0LrQu9C40LXQvdGC0L7QvC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBjaGFuZ2UgdGl0bGUgZm9yIGEgZHVtbXkgY2hhbmdlIHdoaWNoIGlzIG5lZWRlZCB0byBlZGl0IGEgd29ya29yZGVyIHRlbXBsYXRlLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC40LzRjyDQv9C+INGD0LzQvtC70YfQsNC90LjRjiDQtNC70Y8g0YTQuNC60YLQuNCy0L3QvtCz0L4g0LjQt9C80LXQvdC10L3QuNGPLCDQvdC10L7QsdGF0L7QtNC40LzQvtC1INC00LvRjyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINGI0LDQsdC70L7QvdCwINC30LDQtNCw0YfQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0YLQsNC90LTQsNGA0YLQvdGL0LUg0LrRgNC40YLQtdGA0LjQuCDRgdC+0YDRgtC40YDQvtCy0LrQuCDQv9GA0Lgg0L/RgNC+0YHQvNC+0YLRgNC1INC40LfQvNC10L3QtdC90LjQuSBQU0EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHRgtCw0L3QtNCw0YDRgtC90YvQtSDQutGA0LjRgtC10YDQuNC4INGB0L7RgNGC0LjRgNC+0LLQutC4INC/0YDQuCDQv9GA0L7RgdC80L7RgtGA0LUg0LjQt9C80LXQvdC10L3QuNC5INC80LXQvdC10LTQttC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAn0JfQsNC00LDQtdGCINGB0YLQsNC90LTQsNGA0YLQvdGL0LUg0LrRgNC40YLQtdGA0LjQuCDRgdC+0YDRgtC40YDQvtCy0LrQuCDQv9GA0Lgg0L/RgNC+0YHQvNC+0YLRgNC1INC40LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHRgtCw0L3QtNCw0YDRgtC90YvQtSDQutGA0LjRgtC10YDQuNC4INGB0L7RgNGC0LjRgNC+0LLQutC4INC/0YDQuCDQv9GA0L7RgdC80L7RgtGA0LUg0LjQt9C80LXQvdC10L3QuNC5INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgdGC0LDQvdC00LDRgNGC0L3Ri9C1INC60YDQuNGC0LXRgNC40Lgg0YHQvtGA0YLQuNGA0L7QstC60Lgg0L/RgNC4INC/0YDQvtGB0LzQvtGC0YDQtSDQnNC+0LjRhSBDQUIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0YLQsNC90LTQsNGA0YLQvdGL0LUg0LrRgNC40YLQtdGA0LjQuCDRgdC+0YDRgtC40YDQvtCy0LrQuCDQv9GA0Lgg0L/RgNC+0YHQvNC+0YLRgNC1INCc0L7QuNGFINC40LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHRgtCw0L3QtNCw0YDRgtC90YvQtSDQutGA0LjRgtC10YDQuNC4INGB0L7RgNGC0LjRgNC+0LLQutC4INC/0YDQuCDQv9GA0L7RgdC80L7RgtGA0LUg0JzQvtC40YUg0LfQsNC00LDRhy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHRgtCw0L3QtNCw0YDRgtC90YvQtSDQutGA0LjRgtC10YDQuNC4INGB0L7RgNGC0LjRgNC+0LLQutC4INC/0YDQuCDQv9GA0L7RgdC80L7RgtGA0LUg0LjQt9C80LXQvdC10L3QuNC5INCyINGB0L7RgdGC0L7Rj9C90LjQuCBQSVIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0YLQsNC90LTQsNGA0YLQvdGL0LUg0LrRgNC40YLQtdGA0LjQuCDRgdC+0YDRgtC40YDQvtCy0LrQuCDQv9GA0Lgg0L/RgNC+0YHQvNC+0YLRgNC1INC40LfQvNC10L3QtdC90LjQuSDQv9C70LDQvdC40YDRg9C10LzRi9GFINC60LvQuNC10L3RgtC+0LwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHRgtCw0L3QtNCw0YDRgtC90YvQtSDQutGA0LjRgtC10YDQuNC4INGB0L7RgNGC0LjRgNC+0LLQutC4INC/0YDQuCDQv9GA0L7RgdC80L7RgtGA0LUg0YjQsNCx0LvQvtC90L7QsiDQuNC30LzQtdC90LXQvdC40LkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPSAn0JfQsNC00LDQtdGCINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0L/QvtGA0Y/QtNC+0Log0YHQvtGA0YLQuNGA0L7QstC60Lgg0LTQu9GPINC/0YDQvtGB0LzQvtGC0YDQsCDQnNC+0LggQ0FCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9ICfQl9Cw0LTQsNC10YIg0YHRgtCw0L3QtNCw0YDRgtC90YvQuSDQv9C+0YDRj9C00L7QuiDRgdC+0YDRgtC40YDQvtCy0LrQuCDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINCc0L7QuNGFINC40LfQvNC10L3QtdC90LjQuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INC/0L7RgNGP0LTQvtC6INGB0L7RgNGC0LjRgNC+0LLQutC4INC00LvRjyDQv9GA0L7RgdC80L7RgtGA0LAg0JzQvtC40YUg0LfQsNC00LDRhy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPSAn0JfQsNC00LDQtdGCINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0L/QvtGA0Y/QtNC+0Log0YHQvtGA0YLQuNGA0L7QstC60Lgg0LTQu9GPINC/0YDQvtGB0LzQvtGC0YDQsCDQuNC30LzQtdC90LXQvdC40Lkg0LIg0YHQvtGB0YLQvtGP0L3QuNC4IFBJUi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0gJ9CX0LDQtNCw0LXRgiDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INC/0L7RgNGP0LTQvtC6INGB0L7RgNGC0LjRgNC+0LLQutC4INC00LvRjyDQv9GA0L7RgdC80L7RgtGA0LAgUFNBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0L/QvtGA0Y/QtNC+0Log0YHQvtGA0YLQuNGA0L7QstC60Lgg0LTQu9GPINC/0YDQvtGB0LzQvtGC0YDQsCDQuNC30LzQtdC90LXQvdC40Lkg0LzQtdC90LXQtNC20LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9ICfQl9Cw0LTQsNC10YIg0YHRgtCw0L3QtNCw0YDRgtC90YvQuSDQv9C+0YDRj9C00L7QuiDRgdC+0YDRgtC40YDQvtCy0LrQuCDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINC40LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHRgtCw0L3QtNCw0YDRgtC90YvQuSDQv9C+0YDRj9C00L7QuiDRgdC+0YDRgtC40YDQvtCy0LrQuCDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINC40LfQvNC10L3QtdC90LjQuSDQstGL0L/QvtC70L3Rj9C10LzRi9GFINCw0LPQtdC90YLQvtC8Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INC/0L7RgNGP0LTQvtC6INGB0L7RgNGC0LjRgNC+0LLQutC4INC00LvRjyDQv9GA0L7RgdC80L7RgtGA0LAg0LLRi9C/0L7Qu9C90Y/QtdC80YvRhSDQutC70LjQtdC90YLQvtC8INC40LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9ICfQl9Cw0LTQsNC10YIg0YHRgtCw0L3QtNCw0YDRgtC90YvQuSDQv9C+0YDRj9C00L7QuiDRgdC+0YDRgtC40YDQvtCy0LrQuCDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINGI0LDQsdC70L7QvdC+0LIg0LjQt9C80LXQvdC10L3QuNC5Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY2F0ZWdvcnkgb2YgYSBjaGFuZ2UuJ30gPSAn0JfQsNC00LDQtdGCINGB0YLQsNC90LTQsNGA0YLQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDQtNC70Y8g0LrQsNGC0LXQs9C+0YDQuNC4INC40LfQvNC10L3QtdC90LjRjy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGltcGFjdCBvZiBhIGNoYW5nZS4nfSA9ICfQl9Cw0LTQsNC10YIg0YHRgtCw0L3QtNCw0YDRgtC90L7QtSDQt9C90LDRh9C10L3QuNC1INC00LvRjyDQstC70LjRj9C90LjRjyAoaW1wYWN0KSDQuNC30LzQtdC90LXQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3IgY2hhbmdlIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YLQuNC/INC00LvRjyBDb21wYXJlVmFsdWUg0L/QvtC70Y8g0LTQu9GPINCw0YLRgNC40LHRg9GC0L7QsiDQuNC30LzQtdC90LXQvdC40Y8g0LIgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4g0JTQvtC/0YPRgdGC0LjQvNGL0LzQuCDRj9Cy0LvRj9GO0YLRgdGPINC30L3QsNGH0LXQvdC40Y8gU2VsZWN0aW9uLCBUZXh0INC4IERhdGUuINCV0YHQu9C4INGC0LjQvyDQvdC1INC30LDQtNCw0L0sINC/0L7Qu9C1INC+0YLQvtCx0YDQsNC20LDRgtGM0YHRjyDQvdC1INCx0YPQtNC10YIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3Igd29ya29yZGVyIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YLQuNC/INC00LvRjyBDb21wYXJlVmFsdWUg0L/QvtC70Y8g0LTQu9GPINCw0YLRgNC40LHRg9GC0L7QsiDQt9Cw0LTQsNGH0Lgg0LIgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4g0JTQvtC/0YPRgdGC0LjQvNGL0LzQuCDRj9Cy0LvRj9GO0YLRgdGPINC30L3QsNGH0LXQvdC40Y8gU2VsZWN0aW9uLCBUZXh0INC4IERhdGUuINCV0YHQu9C4INGC0LjQvyDQvdC1INC30LDQtNCw0L0sINC/0L7Qu9C1INC+0YLQvtCx0YDQsNC20LDRgtGM0YHRjyDQvdC1INCx0YPQtNC10YIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9iamVjdCBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIGNoYW5nZSBvYmplY3RzIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0LDRgtGA0LjQsdGD0YLRiyDQvtCx0YrQtdC60YLQsCwg0LTQvtGB0YLRg9C/0L3Ri9C1INC/0YDQuCDQstGL0LHQvtGA0LUg0L7QsdGK0LXQutGC0L7QsiDQuNC30LzQtdC90LXQvdC40Y8g0LIgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDQsNGC0YDQuNCx0YPRgtGLINC+0LHRitC10LrRgtCwLCDQtNC+0YHRgtGD0L/QvdGL0LUg0L/RgNC4INCy0YvQsdC+0YDQtSDQvtCx0YrQtdC60YLQvtCyINC30LDQtNCw0YfQuCDQsiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY2NvdW50ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0L7Qv9C10YDQsNGC0L7RgNGLLCDQtNC+0YHRgtGD0L/QvdGL0LUg0L/RgNC4INCy0YvQsdC+0YDQtSDQsNGC0YDQuNCx0YPRgtCwIEFjY291bnRlZFRpbWUg0LIgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC+0L/QtdGA0LDRgtC+0YDRiywg0LTQvtGB0YLRg9C/0L3Ri9C1INC/0YDQuCDQstGL0LHQvtGA0LUg0LDRgtGA0LjQsdGD0YLQsCBBY3R1YWxFbmRUaW1lINCyIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC+0L/QtdGA0LDRgtC+0YDRiywg0LTQvtGB0YLRg9C/0L3Ri9C1INC/0YDQuCDQstGL0LHQvtGA0LUg0LDRgtGA0LjQsdGD0YLQsCBBY3R1YWxTdGFydFRpbWUg0LIgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2F0ZWdvcnlJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC+0L/QtdGA0LDRgtC+0YDRiywg0LTQvtGB0YLRg9C/0L3Ri9C1INC/0YDQuCDQstGL0LHQvtGA0LUg0LDRgtGA0LjQsdGD0YLQsCBDYXRlZ29yeUlEINCyIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZUJ1aWxkZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC+0L/QtdGA0LDRgtC+0YDRiywg0LTQvtGB0YLRg9C/0L3Ri9C1INC/0YDQuCDQstGL0LHQvtGA0LUg0LDRgtGA0LjQsdGD0YLQsCBDaGFuZ2VCdWlsZGVySUQg0LIgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlTWFuYWdlcklEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0L7Qv9C10YDQsNGC0L7RgNGLLCDQtNC+0YHRgtGD0L/QvdGL0LUg0L/RgNC4INCy0YvQsdC+0YDQtSDQsNGC0YDQuNCx0YPRgtCwIENoYW5nZU1hbmFnZXJJRCDQsiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0L7Qv9C10YDQsNGC0L7RgNGLLCDQtNC+0YHRgtGD0L/QvdGL0LUg0L/RgNC4INCy0YvQsdC+0YDQtSDQsNGC0YDQuNCx0YPRgtCwIENoYW5nZVN0YXRlSUQg0LIgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDQvtC/0LXRgNCw0YLQvtGA0YssINC00L7RgdGC0YPQv9C90YvQtSDQv9GA0Lgg0LLRi9Cx0L7RgNC1INCw0YLRgNC40LHRg9GC0LAgQ2hhbmdlVGl0bGUg0LIgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgRHluYW1pY0ZpZWxkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0L7Qv9C10YDQsNGC0L7RgNGLLCDQtNC+0YHRgtGD0L/QvdGL0LUg0L/RgNC4INCy0YvQsdC+0YDQtSDQsNGC0YDQuNCx0YPRgtCwIER5bmFtaWNGaWVsZCDQsiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBJbXBhY3RJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC+0L/QtdGA0LDRgtC+0YDRiywg0LTQvtGB0YLRg9C/0L3Ri9C1INC/0YDQuCDQstGL0LHQvtGA0LUg0LDRgtGA0LjQsdGD0YLQsCBJbXBhY3RJRCDQsiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRWZmb3J0IGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0L7Qv9C10YDQsNGC0L7RgNGLLCDQtNC+0YHRgtGD0L/QvdGL0LUg0L/RgNC4INCy0YvQsdC+0YDQtSDQsNGC0YDQuNCx0YPRgtCwIFBsYW5uZWRFZmZvcnQg0LIgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZEVuZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDQvtC/0LXRgNCw0YLQvtGA0YssINC00L7RgdGC0YPQv9C90YvQtSDQv9GA0Lgg0LLRi9Cx0L7RgNC1INCw0YLRgNC40LHRg9GC0LAgUGxhbm5lZEVuZFRpbWUg0LIgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC+0L/QtdGA0LDRgtC+0YDRiywg0LTQvtGB0YLRg9C/0L3Ri9C1INC/0YDQuCDQstGL0LHQvtGA0LUg0LDRgtGA0LjQsdGD0YLQsCBQbGFubmVkU3RhcnRUaW1lINCyIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFByaW9yaXR5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDQvtC/0LXRgNCw0YLQvtGA0YssINC00L7RgdGC0YPQv9C90YvQtSDQv9GA0Lgg0LLRi9Cx0L7RgNC1INCw0YLRgNC40LHRg9GC0LAgUHJpb3JpdHlJRCDQsiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBSZXF1ZXN0ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0L7Qv9C10YDQsNGC0L7RgNGLLCDQtNC+0YHRgtGD0L/QvdGL0LUg0L/RgNC4INCy0YvQsdC+0YDQtSDQsNGC0YDQuNCx0YPRgtCwIFJlcXVlc3RlZFRpbWUg0LIgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyQWdlbnRJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC+0L/QtdGA0LDRgtC+0YDRiywg0LTQvtGB0YLRg9C/0L3Ri9C1INC/0YDQuCDQstGL0LHQvtGA0LUg0LDRgtGA0LjQsdGD0YLQsCBXb3JrT3JkZXJBZ2VudElEINCyIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlck51bWJlciBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC+0L/QtdGA0LDRgtC+0YDRiywg0LTQvtGB0YLRg9C/0L3Ri9C1INC/0YDQuCDQstGL0LHQvtGA0LUg0LDRgtGA0LjQsdGD0YLQsCBXb3JrT3JkZXJOdW1iZXIg0LIgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyU3RhdGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC+0L/QtdGA0LDRgtC+0YDRiywg0LTQvtGB0YLRg9C/0L3Ri9C1INC/0YDQuCDQstGL0LHQvtGA0LUg0LDRgtGA0LjQsdGD0YLQsCBXb3JrT3JkZXJTdGF0ZUlEINCyIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclRpdGxlIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0L7Qv9C10YDQsNGC0L7RgNGLLCDQtNC+0YHRgtGD0L/QvdGL0LUg0L/RgNC4INCy0YvQsdC+0YDQtSDQsNGC0YDQuNCx0YPRgtCwIFdvcmtPcmRlclRpdGxlINCyIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclR5cGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC+0L/QtdGA0LDRgtC+0YDRiywg0LTQvtGB0YLRg9C/0L3Ri9C1INC/0YDQuCDQstGL0LHQvtGA0LUg0LDRgtGA0LjQsdGD0YLQsCBXb3JrT3JkZXJUeXBlSUQg0LIgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGVyaW9kIChpbiB5ZWFycyksIGluIHdoaWNoIHN0YXJ0IGFuZCBlbmQgdGltZXMgY2FuIGJlIHNlbGVjdGVkLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC/0LXRgNC40L7QtCAo0LIg0LPQvtC00LDRhSksINCyINC60L7RgtC+0YDQvtC8INCy0YDQtdC80Y8g0L3QsNGH0LDQu9CwINC4INC+0LrQvtC90YfQsNC90LjRjyDQvNC+0LPRg9GCINCx0YvRgtGMINCy0YvQsdGA0LDQvdGLLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBhdHRyaWJ1dGVzIG9mIGEgd29ya29yZGVyIGluIHRoZSB0b29sdGlwIG9mIHRoZSB3b3Jrb3JkZXIgZ3JhcGggaW4gdGhlIGNoYW5nZSB6b29tLiBUbyBzaG93IHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcyBpbiB0aGUgdG9vbHRpcCwgdGhleSBtdXN0IGJlIHNwZWNpZmllZCBsaWtlIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUxLCBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMiwgZXRjLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC+0YLQvtCx0YDQsNC20LDQtdC80YvQtSDQsNGC0YDQuNCx0YPRgtGLINC30LDQtNCw0YfQuCDQsiDQv9C+0LTRgdC60LDQt9C60LUg0LTQu9GPINC30LDQtNCw0YfQuCDQvdCwINCz0YDQsNGE0LjQutC1INC/0YDQuCDQv9GA0L7RgdC80L7RgtGA0LUg0LjQt9C80LXQvdC10L3QuNGPLiDQlNC70Y8g0L7RgtC+0LHRgNCw0LbQtdC90LjRjyDQtNC40L3QsNC80LjRh9C10YHQutC40YUg0L/QvtC70LXQuSDQsiDQv9C+0LTRgdC60LDQt9C60LUsINC+0L3QuCDQtNC+0LvQttC90Ysg0LHRi9GC0Ywg0YPQutCw0LfQsNC90Ysg0LrQsNC6IER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUxLCBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMiwg0Lgg0YIu0LQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBQU0Egb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHQv9C40YHQvtC6INC60L7Qu9C+0L3QvtC6INC/0YDQuCDQv9GA0L7RgdC80L7RgtGA0LUg0LjQt9C80LXQvdC10L3QuNC5IFBTQS4g0J3QtSDQstC70LjRj9C10YIg0L3QsCDQv9C+0YDRj9C00L7QuiDQutC+0LvQvtC90L7Qui4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0L/QuNGB0L7QuiDQutC+0LvQvtC90L7QuiDQv9GA0Lgg0L/RgNC+0YHQvNC+0YLRgNC1IENoYW5nZSBTY2hlZHVsZS4g0J3QtSDQstC70LjRj9C10YIg0L3QsCDQv9C+0YDRj9C00L7QuiDQutC+0LvQvtC90L7Qui4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHQv9C40YHQvtC6INC60L7Qu9C+0L3QvtC6INC/0YDQuCDQv9GA0L7RgdC80L7RgtGA0LUgTXlDQUIuINCd0LUg0LLQu9C40Y/QtdGCINC90LAg0L/QvtGA0Y/QtNC+0Log0LrQvtC70L7QvdC+0LouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgdC/0LjRgdC+0Log0LrQvtC70L7QvdC+0Log0L/RgNC4INC/0YDQvtGB0LzQvtGC0YDQtSBNeUNoYW5nZXMuINCd0LUg0LLQu9C40Y/QtdGCINC90LAg0L/QvtGA0Y/QtNC+0Log0LrQvtC70L7QvdC+0LouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgdC/0LjRgdC+0Log0LrQvtC70L7QvdC+0Log0L/RgNC4INC/0YDQvtGB0LzQvtGC0YDQtSBNeVdvcmtvcmRlcnMuINCd0LUg0LLQu9C40Y/QtdGCINC90LAg0L/QvtGA0Y/QtNC+0Log0LrQvtC70L7QvdC+0LouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIFBJUiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgdC/0LjRgdC+0Log0LrQvtC70L7QvdC+0Log0L/RgNC4INC/0YDQvtGB0LzQvtGC0YDQtSBQSVIg0J3QtSDQstC70LjRj9C10YIg0L3QsCDQv9C+0YDRj9C00L7QuiDQutC+0LvQvtC90L7Qui4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHQv9C40YHQvtC6INC60L7Qu9C+0L3QvtC6INC/0YDQuCDQv9GA0L7RgdC80L7RgtGA0LUg0LjQt9C80LXQvdC10L3QuNC5INC80LXQvdC10LTQttC10YDQsC4g0J3QtSDQstC70LjRj9C10YIg0L3QsCDQv9C+0YDRj9C00L7QuiDQutC+0LvQvtC90L7Qui4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0L/QuNGB0L7QuiDQutC+0LvQvtC90L7QuiDQv9GA0Lgg0L/RgNC+0YHQvNC+0YLRgNC1INC40LfQvNC10L3QtdC90LjQuS4g0J3QtSDQstC70LjRj9C10YIg0L3QsCDQv9C+0YDRj9C00L7QuiDQutC+0LvQvtC90L7Qui4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgdC/0LjRgdC+0Log0LrQvtC70L7QvdC+0Log0L/RgNC4INC/0L7QuNGB0LrQtSDQuNC30LzQtdC90LXQvdC40LkuINCd0LUg0LLQu9C40Y/QtdGCINC90LAg0L/QvtGA0Y/QtNC+0Log0LrQvtC70L7QvdC+0LouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgdC/0LjRgdC+0Log0LrQvtC70L7QvdC+0Log0L/RgNC4INC/0YDQvtGB0LzQvtGC0YDQtSDQuNC30LzQtdC90LXQvdC40Lkg0LrQu9C40LXQvdGC0LAuINCd0LUg0LLQu9C40Y/QtdGCINC90LAg0L/QvtGA0Y/QtNC+0Log0LrQvtC70L7QvdC+0LouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0L/QuNGB0L7QuiDQutC+0LvQvtC90L7QuiDQv9GA0Lgg0L/RgNC+0YHQvNC+0YLRgNC1INGI0LDQsdC70L7QvdC+0LIg0LjQt9C80LXQvdC10L3QuNC5LiDQndC1INCy0LvQuNGP0LXRgiDQvdCwINC/0L7RgNGP0LTQvtC6INC60L7Qu9C+0L3QvtC6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaWduYWxzIGZvciBlYWNoIElUU01DaGFuZ2Ugc3RhdGUuJ30gPSAn0JfQsNC00LDQtdGCINC40L3QtNC40LrQsNGC0L7RgNGLINC00LvRjyDQutCw0LbQtNC+0LPQviDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjQt9C80LXQvdC10L3QuNGPLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0ZW1wbGF0ZSB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgtC40L/RiyDRiNCw0LHQu9C+0L3QvtCyLCDQutC+0YLQvtGA0YvQtSDQsdGD0LTRg9GCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0LrQsCDRhNC40LvRjNGC0YDRiyDQv9GA0Lgg0L/RgNC+0YHQvNC+0YLRgNC1INGI0LDQsdC70L7QvdC+0LIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0L7RgdGC0L7Rj9C90LjRjyDQt9Cw0LTQsNGHLCDQutC+0YLQvtGA0YvQtSDQsdGD0LTRg9GCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0LIg0LrQsNGH0LXRgdGC0LLQtSDRhNC40LvRjNGC0YDQsCDQv9GA0Lgg0L/RgNC+0YHQvNC+0YLRgNC1INCc0L7QuNGFINC30LDQtNCw0YcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0L7RgdGC0L7Rj9C90LjRjyDQt9Cw0LTQsNGHLCDQutC+0YLQvtGA0YvQtSDQsdGD0LTRg9GCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0LIg0LrQsNGH0LXRgdGC0LLQtSDRhNC40LvRjNGC0YDQsCDQv9GA0Lgg0L/RgNC+0YHQvNC+0YLRgNC1IFBJUi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHR5cGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNob3cgdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgtC40L/RiyDQt9Cw0LTQsNGHLCDQutC+0YLQvtGA0YvQtSDQsdGD0LTRg9GCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0L/RgNC4INC/0YDQvtGB0LzQvtGC0YDQtSBQSVIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciBub3RpZmljYXRpb25zIHNob3VsZCBiZSBzZW50Lid9ID0gJ9CX0LDQtNCw0LXRgiwg0YHQu9C10LTRg9C10YIg0LvQuCDQvtGC0L/RgNCw0LLQu9GP0YLRjCDRg9Cy0LXQtNC+0LzQu9C10L3QuNGPLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgYSBjaGFuZ2UuJ30gPSAn0KPQtNCw0LvQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMgb2YgYSBjaGFuZ2UgaGlzdG9yeSBlbnRyeS4nfSA9ICfQlNC10YLQsNC70Lgg0LfQsNC/0LjRgdC4INCY0YHRgtC+0YDQuNC4INCY0LfQvNC10L3QtdC90LjRjy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiBhbiBhZ2VudCBjYW4gZXhjaGFuZ2UgdGhlIFgtYXhpcyBvZiBhIHN0YXQgaWYgaGUgZ2VuZXJhdGVzIG9uZS4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDQstC+0LfQvNC+0LbQvdC+0YHRgtGMINCw0LPQtdC90YLRgyDQv9C+0LzQtdC90Y/RgtGMINC+0YHRjCDQpSDQvdCwINCz0YDQsNGE0LjQutC1INC/0YDQuCDQtdCz0L4g0YHQvtC30LTQsNC90LjQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyBkb25lIGZvciBjb25maWcgaXRlbSBjbGFzc2VzLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINC80L7QttC10YIg0LvQuCDQsdCw0LfQvtCy0YvQuSDQvNC+0LTRg9C70Ywg0L7RgtGH0LXRgtC+0LIg0YHRgtGA0L7QuNGC0Ywg0L7RgtGH0LXRgtGLINC+0LEg0LjQt9C80LXQvdC10L3QuNGP0YUg0LLRi9C/0L7Qu9C90LXQvdC90YvRhSDQtNC70Y8g0LrQu9Cw0YHRgdC+0LIg0YPRh9C10YLQvdGL0YUg0Y3Qu9C10LzQtdC90YLQvtCyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyBjaGFuZ2Ugc3RhdGUgdXBkYXRlcyB3aXRoaW4gYSB0aW1lcGVyaW9kLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINC80L7QttC10YIg0LvQuCDQsdCw0LfQvtCy0YvQuSDQvNC+0LTRg9C70Ywg0L7RgtGH0LXRgtC+0LIg0YHRgtGA0L7QuNGC0Ywg0L7RgtGH0LXRgtGLINC+0LEg0LjQt9C80LXQvdC10L3QuNGP0YUsINCyINC30LDQstC40YHQuNGB0LzQvtGB0YLQuCDQvtGCINGC0L7Qs9C+LCDQuNC30LzQtdC90Y/Qu9C+0YHRjCDQu9C4INGB0L7RgdGC0L7Rj9C90LjQtSDQuNC30LzQtdC90LXQvdC40Y8g0LfQsCDQv9C10YDQuNC+0LQg0LLRgNC10LzQtdC90LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIHRoZSByZWxhdGlvbiBiZXR3ZWVuIGNoYW5nZXMgYW5kIGluY2lkZW50IHRpY2tldHMuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0LzQvtC20LXRgiDQu9C4INCx0LDQt9C+0LLRi9C5INC80L7QtNGD0LvRjCDQvtGC0YfQtdGC0L7QsiDRgdGC0YDQvtC40YLRjCDQvtGC0YfQtdGC0Ysg0L7QsSDQuNC30LzQtdC90LXQvdC40Y/RhSwg0LIg0LfQsNCy0LjRgdC40LzQvtGB0YLQuCDQvtGCINC+0YLQvdC+0YjQtdC90LjQuSDQvNC10LbQtNGDINC40LfQvNC10L3QtdC90LjQtdC8INC4INC30LDRj9Cy0LrQvtC5INC+0LEg0LjQvdGG0LjQtNC10L3RgtC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINC80L7QttC10YIg0LvQuCDQsdCw0LfQvtCy0YvQuSDQvNC+0LTRg9C70Ywg0L7RgtGH0LXRgtC+0LIg0YHRgtGA0L7QuNGC0Ywg0L7RgtGH0LXRgtGLINC+0LEg0LjQt9C80LXQvdC10L3QuNGP0YUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IHRoZSBudW1iZXIgb2YgUmZjIHRpY2tldHMgYSByZXF1ZXN0ZXIgY3JlYXRlZC4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDQvNC+0LbQtdGCINC70Lgg0LHQsNC30L7QstGL0Lkg0LzQvtC00YPQu9GMINC+0YLRh9C10YLQvtCyINGB0YLRgNC+0LjRgtGMINC+0YLRh9C10YLRiyDQviDQutC+0LvQuNGH0LXRgdGC0LLQtSDRgdC+0LfQtNCw0L3QvdGL0YUg0LfQsNGP0LLQuNGC0LXQu9C10Lwg0LfQsNGP0LLQvtC6INGBINC30LDQv9GA0L7RgdCw0LzQuCDQvdCwINC40LfQvNC10L3QtdC90LjQtSAoUmZjKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgKGZvciBjaGFuZ2VzIGFuZCB3b3Jrb3JkZXJzKSBzaG93biBpbiB0aGUgY2hhbmdlIHByaW50IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ9CU0LjQvdCw0LzQuNGH0LXRgdC60LjQtSDQv9C+0LvRjyAo0LTQu9GPINC40LfQvNC10L3QtdC90LjQuSDQuCDQt9Cw0LTQsNGHKSDQvtGC0L7QsdGA0LDQttCw0LXQvNGL0LUg0L3QsCDRjdC60YDQsNC90LUg0L/QtdGH0LDRgtC4INC40LfQvNC10L3QtdC90LjRjyDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuINCS0L7Qt9C80L7QttC90YvQtSDQt9C90LDRh9C10L3QuNGPOiAwID0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCwgMSAtINC/0L7QutCw0LfRi9Cy0LDRgtGMLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ9CU0LjQvdCw0LzQuNGH0LXRgdC60LjQtSDQv9C+0LvRjyDQvtGC0L7QsdGA0LDQttCw0LXQvNGL0LUg0L3QsCDRjdC60YDQsNC90LUg0LTQvtCx0LDQstC70LXQvdC40Y8g0LjQt9C80LXQvdC10L3QuNGPINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4g0JLQvtC30LzQvtC20L3Ri9C1INC30L3QsNGH0LXQvdC40Y86IDAgPSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMLCAxID0g0L/QvtC60LDQt9GL0LLQsNGC0YwsIDIgPSDQv9C+0LrQsNC30YvQstCw0YLRjCDQuCDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0LfQsNC/0L7Qu9C90LXQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICfQlNC40L3QsNC80LjRh9C10YHQutC40LUg0L/QvtC70Y8g0L7RgtC+0LHRgNCw0LbQsNC10LzRi9C1INC90LAg0Y3QutGA0LDQvdC1INGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0LjQt9C80LXQvdC10L3QuNGPINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4g0JLQvtC30LzQvtC20L3Ri9C1INC30L3QsNGH0LXQvdC40Y86IDAgPSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMLCAxID0g0L/QvtC60LDQt9GL0LLQsNGC0YwsIDIgPSDQv9C+0LrQsNC30YvQstCw0YLRjCDQuCDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0LfQsNC/0L7Qu9C90LXQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICfQlNC40L3QsNC80LjRh9C10YHQutC40LUg0L/QvtC70Y8g0L7RgtC+0LHRgNCw0LbQsNC10LzRi9C1INC90LAg0Y3QutGA0LDQvdC1INC/0L7QuNGB0LrQsCDQuNC30LzQtdC90LXQvdC40Y8g0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLiDQktC+0LfQvNC+0LbQvdGL0LUg0LfQvdCw0YfQtdC90LjRjzogMCA9INC90LUg0L/QvtC60LDQt9GL0LLQsNGC0YwsIDEgPSDQv9C+0LrQsNC30YvQstCw0YLRjC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ9CU0LjQvdCw0LzQuNGH0LXRgdC60LjQtSDQv9C+0LvRjyDQvtGC0L7QsdGA0LDQttCw0LXQvNGL0LUg0L3QsCDRjdC60YDQsNC90LUg0L/RgNC+0YHQvNC+0YLRgNCwINC40LfQvNC10L3QtdC90LjRjyDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuINCS0L7Qt9C80L7QttC90YvQtSDQt9C90LDRh9C10L3QuNGPOiAwID0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCwgMSA9INC/0L7QutCw0LfRi9Cy0LDRgtGMLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ9CU0LjQvdCw0LzQuNGH0LXRgdC60LjQtSDQv9C+0LvRjyDQvtGC0L7QsdGA0LDQttCw0LXQvNGL0LUg0L3QsCDRjdC60YDQsNC90LUg0LTQvtCx0LDQstC70LXQvdC40Y8g0LfQsNC00LDRh9C4INCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4g0JLQvtC30LzQvtC20L3Ri9C1INC30L3QsNGH0LXQvdC40Y86IDAgPSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMLCAxID0g0L/QvtC60LDQt9GL0LLQsNGC0YwsIDIgPSDQv9C+0LrQsNC30YvQstCw0YLRjCDQuCDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0LfQsNC/0L7Qu9C90LXQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICfQlNC40L3QsNC80LjRh9C10YHQutC40LUg0L/QvtC70Y8g0L7RgtC+0LHRgNCw0LbQsNC10LzRi9C1INC90LAg0Y3QutGA0LDQvdC1INGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0LfQsNC00LDRh9C4INCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4g0JLQvtC30LzQvtC20L3Ri9C1INC30L3QsNGH0LXQvdC40Y86IDAgPSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMLCAxID0g0L/QvtC60LDQt9GL0LLQsNGC0YwsIDIgPSDQv9C+0LrQsNC30YvQstCw0YLRjCDQuCDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0LfQsNC/0L7Qu9C90LXQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIHJlcG9ydCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ9CU0LjQvdCw0LzQuNGH0LXRgdC60LjQtSDQv9C+0LvRjyDQvtGC0L7QsdGA0LDQttCw0LXQvNGL0LUg0L3QsCDRjdC60YDQsNC90LUg0YHQvtC30LTQsNC90LjRjyDQvtGC0YfQtdGC0LAg0L/QviDQt9Cw0LTQsNGH0LUg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLiDQktC+0LfQvNC+0LbQvdGL0LUg0LfQvdCw0YfQtdC90LjRjzogMCA9INC90LUg0L/QvtC60LDQt9GL0LLQsNGC0YwsIDEgPSDQv9C+0LrQsNC30YvQstCw0YLRjCwgMiA9INC/0L7QutCw0LfRi9Cy0LDRgtGMINC4INC00L7Qu9C20L3QviDQsdGL0YLRjCDQt9Cw0L/QvtC70L3QtdC90L4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICfQlNC40L3QsNC80LjRh9C10YHQutC40LUg0L/QvtC70Y8g0L7RgtC+0LHRgNCw0LbQsNC10LzRi9C1INC90LAg0Y3QutGA0LDQvdC1INC/0YDQvtGB0LzQvtGC0YDQsCDQt9Cw0LTQsNGH0Lgg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLiDQktC+0LfQvNC+0LbQvdGL0LUg0LfQvdCw0YfQtdC90LjRjzogMCA9INC90LUg0L/QvtC60LDQt9GL0LLQsNGC0YwsIDEgPSDQv9C+0LrQsNC30YvQstCw0YLRjC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pY0ZpZWxkIGV2ZW50IG1vZHVsZSB0byBoYW5kbGUgdGhlIHVwZGF0ZSBvZiBjb25kaXRpb25zIGlmIGR5bmFtaWMgZmllbGRzIGFyZSBhZGRlZCwgdXBkYXRlZCBvciBkZWxldGVkLid9ID0KICAgICAgICAn0JzQvtC00YPQu9GMINGD0L/RgNCw0LLQu9C10L3QuNGPINGB0L7QsdGL0YLQuNGP0LzQuCDQtNC70Y8g0LTQuNC90LDQvNC40YfQtdGB0LrQuNGFINC/0L7Qu9C10Lkg0L/RgNC4INC40LfQvNC10L3QtdC90LjQuCDQo9GB0LvQvtCy0LjQuSwg0LXRgdC70Lgg0LTQuNC90LDQvNC40YfQtdGB0LrQuNC1INC/0L7Qu9GPINC00L7QsdCw0LLQu9GP0Y7RgtGB0Y8sINC40LfQvNC10L3Rj9GO0YLRgdGPINC40LvQuCDRg9C00LDQu9GP0Y7RgtGB0Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBjaGFuZ2UuJ30gPSAn0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIGNvbmRpdGlvbnMgb2YgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3J3YXJkIHNjaGVkdWxlIG9mIGNoYW5nZXMuIE92ZXJ2aWV3IG92ZXIgYXBwcm92ZWQgY2hhbmdlcy4nfSA9CiAgICAgICAgJ9Cf0LvQsNC90LjRgNC+0LLQsNC90LjQtSDQv9C10YDQtdC80LXRidC10L3QuNGPINCY0LfQvNC10L3QtdC90LjQuS4g0J7QsdC30L7RgCDQv9C+0YDRj9C00LrQsCDRg9GC0LLQtdGA0LbQtNC10L3QuNGPINCY0LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBab29tJ30gPSAn0JjRgdGC0L7RgNC40Y8g0L/QvtC00YDQvtCx0L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDQUIgVGVtcGxhdGVzLid9ID0gJ9Co0LDQsdC70L7QvdGLINC00LvRjyBJVFNNIENBQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ29uZGl0aW9uIEVkaXQuJ30gPSAn0KDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjQtSDQo9GB0LvQvtCy0LjQuSDQtNC70Y8g0JjQt9C80LXQvdC10L3QuNC5IElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIENvbmRpdGlvbiBPdmVydmlldy4nfSA9ICfQntCx0LfQvtGAINCj0YHQu9C+0LLQuNC5INC00LvRjyDQmNC30LzQtdC90LXQvdC40LkgSVRTTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBOb3RpZmljYXRpb25zJ30gPSAn0KPQstC10LTQvtC80LvQtdC90LjRjyDQsiBJVFNNINCj0L/RgNCw0LLQu9C10L3QuNC1INCY0LfQvNC10L3QtdC90LjRj9C80LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlciBPdmVydmlldy4nfSA9ICfQntCx0LfQvtGAINCj0L/RgNCw0LLQu9GP0Y7RidC40YUg0JjQt9C80LXQvdC10L3QuNGP0LzQuCDQsiBJVFNNICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBQSVIgT3ZlcnZpZXcuJ30gPSAn0J7QsdC30L7RgCBJVFNNIENoYW5nZSBQSVInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2Ugbm90aWZpY2F0aW9uIHJ1bGVzJ30gPSAn0J/RgNCw0LLQuNC70LAg0KPQstC10LTQvtC80LvQtdC90LjRjyDQsiDQo9C/0YDQsNCy0LvQtdC90LjQuCDQmNC30LzQtdC90LXQvdC40Y/QvNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlcyd9ID0gJ9CY0LfQvNC10L3QtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q0FCIE92ZXJ2aWV3Lid9ID0gJ9Ce0LHQt9C+0YAg0JzQvtC4Q0FCICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q2hhbmdlcyBPdmVydmlldy4nfSA9ICfQntCx0LfQvtGAINCc0L7QuNCY0LfQvNC10L3QtdC90LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15V29ya29yZGVycyBPdmVydmlldy4nfSA9ICfQntCx0LfQvtGAINCc0L7QuNCX0LDQtNCw0YfQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBEZWxldGUuJ30gPSAn0KPQtNCw0LvQtdC90LjQtSDRiNCw0LHQu9C+0L3QvtCyIElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDQUIuJ30gPSAn0KDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjQtSDRiNCw0LHQu9C+0L3QvtCyIENBQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0IENvbnRlbnQuJ30gPSAn0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0YHQvtC00LXRgNC20LjQvNC+0LUg0YjQsNCx0LvQvtC90L7QsiBJVFNNLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQuJ30gPSAn0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9IElUU00uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgT3ZlcnZpZXcuJ30gPSAn0J7QsdC30L7RgCDRiNCw0LHQu9C+0L3QvtCyINCyIElUU00gLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGNsZWFucyB1cCBjb25kaXRpb25zLid9ID0gJ0lUU00g0LzQvtC00YPQu9GMINC+0LHRgNCw0LHQvtGC0LrQuCDRgdC+0LHRi9GC0LjQuSwg0L7Rh9C40YnQsNGO0YnQuNC5INGD0YHQu9C+0LLQuNGPLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGNhY2hlIGZvciBhIHRvb2xiYXIuJ30gPSAnSVRTTSDQvNC+0LTRg9C70Ywg0YPQv9GA0LDQstC70LXQvdC40Y8g0YHQvtCx0YvRgtC40Y/QvNC4LCDQutC+0YLQvtGA0YvQuSDQvtGH0LjRidCw0LXRgiDQutGN0Ygg0LTQu9GPINC/0LDQvdC10LvQuCDQuNC90YHRgtGA0YPQvNC10L3RgtC+0LIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgZGVsZXRlcyB0aGUgaGlzdG9yeSBvZiBjaGFuZ2VzLid9ID0gJ0lUU00g0LzQvtC00YPQu9GMINC+0LHRgNCw0LHQvtGC0LrQuCDRgdC+0LHRi9GC0LjQuSwg0YPQtNCw0LvRj9GO0YnQuNC5INC40YHRgtC+0YDQuNGOINCY0LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBtYXRjaGVzIGNvbmRpdGlvbnMgYW5kIGV4ZWN1dGVzIGFjdGlvbnMuJ30gPQogICAgICAgICdJVFNNINC80L7QtNGD0LvRjCDQvtCx0YDQsNCx0L7RgtC60Lgg0YHQvtCx0YvRgtC40LksINC/0YDQvtCy0LXRgNGP0Y7RidC40Lkg0YHQvtC+0YLQstC10YLRgdGC0LLQuNC1INGD0YHQu9C+0LLQuNGP0Lwg0Lgg0LLRi9C/0L7Qu9C90Y/RjtGJ0LjQuSDQtNC10LnRgdGC0LLQuNGPLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHNlbmRzIG5vdGlmaWNhdGlvbnMuJ30gPSAnSVRTTSDQvNC+0LTRg9C70Ywg0L7QsdGA0LDQsdC+0YLQutC4INGB0L7QsdGL0YLQuNC5LCDQvtGC0L/RgNCw0LLQu9GP0Y7RidC40Lkg0YPQstC10LTQvtC80LvQtdC90LjRjy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJ30gPSAnSVRTTSDQvNC+0LTRg9C70Ywg0L7QsdGA0LDQsdC+0YLQutC4INGB0L7QsdGL0YLQuNC5LCDQvtCx0L3QvtCy0LvRj9GO0YnQuNC5INC40YHRgtC+0YDQuNGOINC40LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNvbmRpdGlvbnMuJ30gPSAnSVRTTSDQvNC+0LTRg9C70Ywg0L7QsdGA0LDQsdC+0YLQutC4INGB0L7QsdGL0YLQuNC5LCDQvtCx0L3QvtCy0LvRj9GO0YnQuNC5INC40YHRgtC+0YDQuNGOINCj0YHQu9C+0LLQuNC5Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2Ygd29ya29yZGVycy4nfSA9ICdJVFNNINC80L7QtNGD0LvRjCDQvtCx0YDQsNCx0L7RgtC60Lgg0YHQvtCx0YvRgtC40LksINC+0LHQvdC+0LLQu9GP0Y7RidC40Lkg0LjRgdGC0L7RgNC40Y4g0JfQsNC00LDRhy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gcmVjYWxjdWxhdGUgdGhlIHdvcmtvcmRlciBudW1iZXJzLid9ID0gJ0lUU00g0LzQvtC00YPQu9GMINC+0LHRgNCw0LHQvtGC0LrQuCDRgdC+0LHRi9GC0LjQuSwg0L/QtdGA0LXQstGL0YfQuNGB0LvRj9GO0YnQuNC5INC90L7QvNC10YDQsCDQt9Cw0LTQsNGHLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byBzZXQgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzIG9mIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICdJVFNNINC80L7QtNGD0LvRjCDQvtCx0YDQsNCx0L7RgtC60Lgg0YHQvtCx0YvRgtC40LksINGD0YHRgtCw0L3QsNCy0LvQuNCy0LDRjtGJ0LjQuSDRhNCw0LrRgtC40YfQtdGB0LrQvtC1INCy0YDQtdC80Y8g0L3QsNGH0LDQu9CwINC4INC+0LrQvtC90YfQsNC90LjRjyDQt9Cw0LTQsNGHLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNQ2hhbmdlJ30gPSAn0JjQt9C80LXQvdC10L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01Xb3JrT3JkZXInfSA9ICfQl9Cw0LTQsNGH0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZnJlcXVlbmN5IGlzIFwncmVndWxhcmx5XCcsIHlvdSBjYW4gY29uZmlndXJlIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCAoZXZlcnkgWCBob3VycykuJ30gPQogICAgICAgICfQldGB0LvQuCDRh9Cw0YHRgtC+0YLQsCDRg9C60LDQt9Cw0L3QsCDQutCw0LogInJlZ3VsYXJseSIg0LLRiyDQvNC+0LbQtdGC0LUg0LfQsNC00LDRgtGMINC60LDQuiDRh9Cw0YHRgtC+INCx0YPQtNGD0YIg0L7RgtC/0YDQsNCy0LvRj9GC0YzRgdGPINGD0LLQtdC00L7QvNC70LXQvdC40Y8gKNC60LDQttC00YvQtSDQpSDRh9Cw0YHQvtCyKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvZ2ZpbGUgZm9yIHRoZSBJVFNNIGNoYW5nZSBjb3VudGVyLiBUaGlzIGZpbGUgaXMgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIGNoYW5nZSBudW1iZXJzLid9ID0KICAgICAgICAn0JvQvtCzINGE0LDQudC7INC00LvRjyDRgdGH0LXRgtGH0LjQutCwIElUU00g0LjQt9C80LXQvdC10L3QuNC5LiDQntC9INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDRgdC+0LfQtNCw0L3QuNGPINC90L7QvNC10YDQvtCyINC40LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIENBQiBtZW1iZXJzIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICfQodC/0LjRgdC+0Log0YfQu9C10L3QvtCyIENBQiDQtNC70Y8g0LDQstGC0L7Qt9Cw0LLQtdGA0YjQtdC90LjRjy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIGFnZW50cywgdXNlZCBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAn0KHQv9C40YHQvtC6INCw0LPQtdC90YLQvtCyINC00LvRjyDQsNCy0YLQvtC30LDQstC10YDRiNC10L3QuNGPLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgaWYgV29ya09yZGVyQWRkIG9yIFdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZSBzaG91bGQgYmUgcGVybWl0dGVkLid9ID0KICAgICAgICAn0JzQvtC00YPQu9GMLCDQv9GA0L7QstC10YDRj9GO0YnQuNC5LCDRh9GC0L4gV29ya09yZGVyQWRkINC40LvQuCBXb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUg0LTQvtC70LbQvdGLINCx0YvRgtGMINGA0LDQt9GA0LXRiNC10L3Riy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBDQUIgbWVtYmVycy4nfSA9ICfQnNC+0LTRg9C70Ywg0L/RgNC+0LLQtdGA0LrQuCDRh9C70LXQvdC+IENBQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBhZ2VudC4nfSA9ICfQnNC+0LTRg9C70Ywg0L/RgNC+0LLQtdGA0LrQuCDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIGJ1aWxkZXIuJ30gPSAn0JzQvtC00YPQu9GMINC/0YDQvtCy0LXRgNC60Lgg0YHQvtGB0YLQsNCy0LjRgtC10LvRjyDQuNC30LzQtdC90LXQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPSAn0JzQvtC00YPQu9GMINC/0YDQvtCy0LXRgNC60Lgg0LzQtdC90LXQtNC20LXRgNCwINC40LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAn0JzQvtC00YPQu9GMINC/0YDQvtCy0LXRgNC60Lgg0LfQsNC00LDRhyDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIG5vIHdvcmtvcmRlciBhZ2VudCBpcyBzZXQuJ30gPSAn0JzQvtC00YPQu9GMINC/0YDQvtCy0LXRgNC60Lgg0L7RgtGB0YPRgtGB0YLQstC40Y8g0LfQsNC00LDRhyDRgyDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIHRoZSBhZ2VudCBpcyBjb250YWluZWQgaW4gdGhlIGNvbmZpZ3VyZWQgbGlzdC4nfSA9CiAgICAgICAgJ9Cc0L7QtNGD0LvRjCDQv9GA0L7QstC10YDQutC4INGB0L7QtNC10YDQttC40YLRgdGPINC70Lgg0LDQs9C10L3RgiDQsiDRgdC/0LjRgdC60LUg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBhIGxpbmsgdG8gY3JlYXRlIGEgY2hhbmdlIGZyb20gdGhpcyB0aWNrZXQuIFRoZSB0aWNrZXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGxpbmtlZCB3aXRoIHRoZSBuZXcgY2hhbmdlLid9ID0KICAgICAgICAn0JzQvtC00YPQu9GMINC00LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNC4INGB0YHRi9C70LrQuCDQvdCwINGB0L7Qt9C00LDQvdC40LUg0LjQt9C80LXQvdC10L3QuNGPINC40Lcg0Y3RgtC+0Lkg0LfQsNGP0LLQutC4LiDQl9Cw0Y/QstC60LAg0LHRg9C00LXRgiDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDRgdCy0Y/Qt9Cw0L3QsCDRgSDQvdC+0LLRi9C8INC40LfQvNC10L3QtdC90LjQtdC8Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIFRpbWUgU2xvdC4nfSA9ICfQodC80LXRgdGC0LjRgtGMINC00LjQsNC/0LDQt9C+0L0g0LLRgNC10LzQtdC90LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgYWxsIHdvcmtvcmRlcnMgaW4gdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IChmcm9tIHRlbXBsYXRlKSd9ID0gJ9Cd0L7QstC+0LUo0LDRjykg0LjQtyDRiNCw0LHQu9C+0L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbmx5IHVzZXJzIG9mIHRoZXNlIGdyb3VwcyBoYXZlIHRoZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdGlja2V0IHR5cGVzIGFzIGRlZmluZWQgaW4gIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIgaWYgdGhlIGZlYXR1cmUgIlRpY2tldDo6QWNsOjpNb2R1bGUjIyMyMDAtVGlja2V0OjpBY2w6Ok1vZHVsZSIgaXMgZW5hYmxlZC4nfSA9CiAgICAgICAgJ9Cf0L7Qu9GM0LfQvtCy0LDRgtC10LvQuCDRgtC+0LvRjNC60L4g0YPQutCw0LfQsNC90L3Ri9GFINCz0YDRg9C/0L8g0LjQvNC10Y7RgiDQv9GA0LDQstCwINC90LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LUg0YLQuNC/0L7QsiDQt9Cw0Y/QstC+0Log0LfQsNC00LDQvdC90YvRhSDQsiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiwg0LXRgdC70Lgg0L/QsNGA0LDQvNC10YLRgCAiVGlja2V0OjpBY2w6Ok1vZHVsZSMjIzIwMC1UaWNrZXQ6OkFjbDo6TW9kdWxlIiDQstC60LvRjtGH0LXQvS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb3ZlciBhbGwgQ2hhbmdlcy4nfSA9ICfQntCx0LfQvtGAINCy0YHQtdGFINCY0LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSJ30gPSAnUElSJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpJ30gPSAnUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldy/QkNC90LDQu9C40Lcg0L/QvtGB0LvQtSDQstGL0L/QvtC70L3QtdC90LjRjyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUFNBJ30gPSAnUFNBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBVc2VyQ3JlYXRlV29ya09yZGVyTmV4dE1hc2sgb2JqZWN0IGluIHRoZSBwcmVmZXJlbmNlIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDRiyDQtNC70Y8g0L7QsdGK0LXQutGC0LAgVXNlckNyZWF0ZVdvcmtPcmRlck5leHRNYXNrICDQsiDQv9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdC+0Lwg0L/RgNC+0YHQvNC+0YLRgNC1INCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjaGFuZ2VzIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIGNoYW5nZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDRiyDQtNC70Y8g0YHRgtGA0LDQvdC40YYgKNC90LAg0LrQvtGC0L7RgNGL0YUg0L7RgtC+0LHRgNCw0LbQsNGO0YLRgdGPINC40LfQvNC10L3QtdC90LjRjykg0LIg0LrRgNCw0YLQutC+0LwgKHNtYWxsKSDQvtCx0LfQvtGA0LUg0LjQt9C80LXQvdC10L3QuNC5Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmVzZW50cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gc2hvdyB0aGUgaW52b2x2ZWQgcGVyc29ucyBpbiBhIGNoYW5nZSwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIGNoYW5nZSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/QvtC60LDQt9GL0LLQsNC10YIg0YHRgdGL0LvQutGDL9GN0LvQtdC80LXQvdGCINCyINC80LXQvdGOINC00LvRjyDQv9C+0LrQsNC30LAg0LLQvtCy0LvQtdGH0LXQvdC90YvRhSDRgdC+0YLRgNGD0LTQvdC40LrQvtCyINC00LvRjyDQuNC30LzQtdC90LXQvdC40Y8g0L/RgNC4INC/0L7QtNGA0L7QsdC90L7QvCDQv9GA0L7RgdC80L7RgtGA0LUg0LjQt9C80LXQvdC10L3QuNGPINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSAoUFNBKSd9ID0gJ9Cf0YDQvtC10LrRgtC40YDRg9C10LzQsNGPINC00L7RgdGC0YPQv9C90L7RgdGC0Ywg0YHQtdGA0LLQuNGB0LAgKFBTQSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpIG9mIGNoYW5nZXMuIE92ZXJ2aWV3IG9mIGFwcHJvdmVkIGNoYW5nZXMgYW5kIHRoZWlyIHNlcnZpY2VzLid9ID0KICAgICAgICAn0J/RgNC+0LXQutGC0LjRgNGD0LXQvNCw0Y8g0LTQvtGB0YLRg9C/0L3QvtGB0YLRjCDRgdC10YDQstC40YHQsCAoUFNBKSDQtNC70Y8g0JjQt9C80LXQvdC10L3QuNC5LiDQntCx0LfQvtGAINGD0YLQstC10YDQttC00LXQvdC90YvRhSDQmNC30LzQtdC90LXQvdC40Lkg0Lgg0LjRhSDQodC10YDQstC40YHQvtCyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIGluIG9yZGVyIGZvciBhbiBhZ2VudCB0byB0YWtlIGEgd29ya29yZGVyLid9ID0KICAgICAgICAn0J/RgNC40LLQuNC70LXQs9C40LgsINGC0YDQtdCx0YPQtdC80YvQtSDQsNCz0LXQvdGC0YMg0LTQu9GPINC/0YDQuNC90Y/RgtC40Y8g0LfQsNC00LDRh9C4INCyINGA0LDQsdC+0YLRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhY2Nlc3MgdGhlIG92ZXJ2aWV3IG9mIGFsbCBjaGFuZ2VzLid9ID0gJ9Cf0YDQuNCy0LjQu9C10LPQuNC4LCDRgtGA0LXQsdGD0LXQvNGL0LUg0LDQs9C10L3RgtGDINC00LvRjyDQv9GA0L7RgdC80L7RgtGA0LAg0LLRgdC10YUg0LjQt9C80LXQvdC10L3QuNC5Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGFkZCBhIHdvcmtvcmRlci4nfSA9ICfQn9GA0LjQstC40LvQtdCz0LjQuCwg0YLRgNC10LHRg9C10LzRi9C1INCw0LPQtdC90YLRgyDQtNC70Y8g0LTQvtCx0LDQstC70LXQvdC40Y8g0L3QvtCy0L7QuSDQt9Cw0LTQsNGH0LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY2hhbmdlIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAn0J/RgNC40LLQuNC70LXQs9C40LgsINGC0YDQtdCx0YPQtdC80YvQtSDQsNCz0LXQvdGC0YMg0LTQu9GPINC40LfQvNC10L3QtdC90LjRjyDQsNCz0LXQvdGC0LAg0LfQsNC00LDRh9C4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSBjaGFuZ2UuJ30gPSAn0J/RgNC40LLQuNC70LXQs9C40LgsINGC0YDQtdCx0YPQtdC80YvQtSDQsNCz0LXQvdGC0YMg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8g0YjQsNCx0LvQvtC90LAg0LjQtyDQuNC30LzQtdC90LXQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZXNcJyBDQUIuJ30gPQogICAgICAgICfQn9GA0LjQstC40LvQtdCz0LjQuCwg0YLRgNC10LHRg9C10LzRi9C1INCw0LPQtdC90YLRgyDQtNC70Y8g0YHQvtC30LTQsNC90LjRjyDRiNCw0LHQu9C+0L3QsCDQuNC3INC40LfQvNC10L3QtdC90LjRjyDQuNC70LggQ0FCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSB3b3Jrb3JkZXIuJ30gPSAn0J/RgNC40LLQuNC70LXQs9C40LgsINGC0YDQtdCx0YPQtdC80YvQtSDQsNCz0LXQvdGC0YMg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8g0YjQsNCx0LvQvtC90LAg0LjQtyDQt9Cw0LTQsNGH0LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMgZnJvbSB0ZW1wbGF0ZXMuJ30gPSAn0J/RgNCw0LLQsCwg0YLRgNC10LHRg9C10LzRi9C1INC00LvRjyDRgdC+0LfQtNCw0L3QuNGPINC40LfQvNC10L3QtdC90LjQuSDRgSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC8INGI0LDQsdC70L7QvdC+0LIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMuJ30gPSAn0J/RgNC40LLQuNC70LXQs9C40LgsINGC0YDQtdCx0YPQtdC80YvQtSDQsNCz0LXQvdGC0YMg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8g0LjQt9C80LXQvdC10L3QuNGPLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHRlbXBsYXRlLid9ID0gJ9Cf0YDQuNCy0LjQu9C10LPQuNC4LCDRgtGA0LXQsdGD0LXQvNGL0LUg0LDQs9C10L3RgtGDINC00LvRjyDRg9C00LDQu9C10L3QuNGPINGI0LDQsdC70L7QvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHdvcmtvcmRlci4nfSA9ICfQn9GA0LjQstC40LvQtdCz0LjQuCwg0YLRgNC10LHRg9C10LzRi9C1INCw0LPQtdC90YLRgyDQtNC70Y8g0YPQtNCw0LvQtdC90LjRjyDQt9Cw0LTQsNGH0LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGNoYW5nZXMuJ30gPSAn0J/RgNCw0LLQsCwg0YLRgNC10LHRg9C10LzRi9C1INC00LvRjyDRg9C00LDQu9C10L3QuNGPINC40LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgdGVtcGxhdGUuJ30gPSAn0J/RgNC40LLQuNC70LXQs9C40LgsINGC0YDQtdCx0YPQtdC80YvQtSDQsNCz0LXQvdGC0YMg0LTQu9GPINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0YjQsNCx0LvQvtC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHdvcmtvcmRlci4nfSA9ICfQn9GA0LjQstC40LvQtdCz0LjQuCwg0YLRgNC10LHRg9C10LzRi9C1INCw0LPQtdC90YLRgyDQtNC70Y8g0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDQt9Cw0LTQsNGH0LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBjaGFuZ2VzLid9ID0gJ9Cf0YDQuNCy0LjQu9C10LPQuNC4LCDRgtGA0LXQsdGD0LXQvNGL0LUg0LDQs9C10L3RgtGDINC00LvRjyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINC40LfQvNC10L3QtdC90LjRjy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAn0J/RgNC40LLQuNC70LXQs9C40LgsINGC0YDQtdCx0YPQtdC80YvQtSDQsNCz0LXQvdGC0YMg0LTQu9GPINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0YPRgdC70L7QstC40Lkg0LjQt9C80LXQvdC10L3QuNGPLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgYSB0ZW1wbGF0ZS4nfSA9ICfQn9GA0LDQstCwLCDQvdC10L7QsdGF0L7QtNC40LzRi9C1INC00LvRjyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINGB0L7QtNC10YDQttC40LzQvtCz0L4g0YjQsNCx0LvQvtC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgaW52b2x2ZWQgcGVyc29ucyBvZiBhIGNoYW5nZS4nfSA9CiAgICAgICAgJ9Cf0YDQuNCy0LjQu9C10LPQuNC4LCDRgtGA0LXQsdGD0LXQvNGL0LUg0LDQs9C10L3RgtGDINC00LvRjyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINGB0L/QuNGB0LrQsCDQstC+0LLQu9C10YfQtdC90L3Ri9GFINGB0L7RgtGA0YPQtNC90LjQutC+0LIg0LIg0LjQt9C80LXQvdC10L3QuNC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIG1vdmUgY2hhbmdlcyBpbiB0aW1lLid9ID0gJ9Cf0YDQuNCy0LjQu9C10LPQuNC4LCDRgtGA0LXQsdGD0LXQvNGL0LUg0LDQs9C10L3RgtGDINC00LvRjyDRgdC00LLQuNCz0LAg0LLRgNC10LzQtdC90J3Ri9GFINCz0YDQsNC90LjRhiDQuNC30LzQtdC90LXQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcHJpbnQgYSBjaGFuZ2UuJ30gPSAn0J/RgNC40LLQuNC70LXQs9C40LgsINGC0YDQtdCx0YPQtdC80YvQtSDQsNCz0LXQvdGC0YMg0LTQu9GPINC/0LXRh9Cw0YLQuCDQuNC30LzQtdC90LXQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcmVzZXQgY2hhbmdlcy4nfSA9ICfQn9GA0LDQstCwLCDRgtGA0LXQsdGD0LXQvNGL0LUg0LTQu9GPINC+0YfQuNGB0YLQutC4INC40LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGEgd29ya29yZGVyLid9ID0gJ9Cf0YDQuNCy0LjQu9C10LPQuNC4LCDRgtGA0LXQsdGD0LXQvNGL0LUg0LDQs9C10L3RgtGDINC00LvRjyDQv9GA0L7RgdC80L7RgtGA0LAg0LfQsNC00LDRh9C4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgY2hhbmdlcy4nfSA9ICfQn9GA0LjQstC40LvQtdCz0LjQuCwg0YLRgNC10LHRg9C10LzRi9C1INCw0LPQtdC90YLRgyDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINC40LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyBhIENBQiBtZW1iZXIuJ30gPQogICAgICAgICfQn9GA0LjQstC40LvQtdCz0LjQuCwg0YLRgNC10LHRg9C10LzRi9C1INCw0LPQtdC90YLRgyDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINGB0L/QuNGB0LrQsCDQuNC30LzQtdC90LXQvdC40LksINCyINC60L7RgtC+0YDRi9GFINCw0LPQtdC90YIg0Y/QstC70Y/QtdGC0YHRjyDRh9C70LXQvdC+0LwgQ0FCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIHRoZSBjaGFuZ2UgbWFuYWdlci4nfSA9CiAgICAgICAgJ9Cf0YDQuNCy0LjQu9C10LPQuNC4LCDRgtGA0LXQsdGD0LXQvNGL0LUg0LDQs9C10L3RgtGDINC00LvRjyDQv9GA0L7RgdC80L7RgtGA0LAg0YHQv9C40YHQutCwINC40LfQvNC10L3QtdC90LjQuSwg0LIg0LrQvtGC0L7RgNGL0YUg0LDQs9C10L3RgiDRj9Cy0LvRj9C10YLRgdGPINC80LXQvdC10LTQttC10YDQvtC8INC40LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IG92ZXJ2aWV3IG92ZXIgYWxsIHRlbXBsYXRlcy4nfSA9ICfQn9GA0LjQstC40LvQtdCz0LjQuCwg0YLRgNC10LHRg9C10LzRi9C1INCw0LPQtdC90YLRgyDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINCy0YHQtdGFINGI0LDQsdC70L7QvdC+0LIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJ9Cf0YDQuNCy0LjQu9C10LPQuNC4LCDRgtGA0LXQsdGD0LXQvNGL0LUg0LDQs9C10L3RgtGDINC00LvRjyDQv9GA0L7RgdC80L7RgtGA0LAg0YPRgdC70L7QstC40Lkg0LjQt9C80LXQvdC10L3QuNC5Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UuJ30gPSAn0J/RgNC40LLQuNC70LXQs9C40LgsINGC0YDQtdCx0YPQtdC80YvQtSDQsNCz0LXQvdGC0YMg0LTQu9GPINC/0YDQvtGB0LzRgtC+0YDQsCDQuNGB0YLQvtGA0LjQuCDQuNC30LzQtdC90LXQvdC40Y8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlci4nfSA9ICfQn9GA0LjQstC40LvQtdCz0LjQuCwg0YLRgNC10LHRg9C10LzRi9C1INCw0LPQtdC90YLRgyDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINC40YHRgtC+0YDQuNC4INC30LDQtNCw0YfQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSBjaGFuZ2UuJ30gPSAn0J/RgNC40LLQuNC70LXQs9C40LgsINGC0YDQtdCx0YPQtdC80YvQtSDQsNCz0LXQvdGC0YMg0LTQu9GPINC/0YDQvtGB0LzQvtGC0YDQsCDQv9C+0LTRgNC+0LHQvdC+0Lkg0LjRgdGC0L7RgNC40Lgg0LjQt9C80LXQvdC10L3QuNGPLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgem9vbSBvZiBhIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJ9Cf0YDQuNCy0LjQu9C10LPQuNC4LCDRgtGA0LXQsdGD0LXQvNGL0LUg0LDQs9C10L3RgtGDINC00LvRjyDQv9GA0L7RgdC80L7RgtGA0LAg0L/QvtC00YDQvtCx0L3QvtC5INC40YHRgtC+0YDQuNC4INC30LDQtNCw0YfQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIENoYW5nZSBTY2hlZHVsZS4nfSA9ICfQn9GA0LjQstC40LvQtdCz0LjQuCwg0YLRgNC10LHRg9C10LzRi9C1INCw0LPQtdC90YLRgyDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINGB0L/QuNGB0LrQsCDQn9C70LDQvdC40YDQvtCy0YnQuNC60LAg0LjQt9C80LXQvdC10L3QuNC5Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlIFBTQS4nfSA9ICfQn9GA0LjQstC40LvQtdCz0LjQuCwg0YLRgNC10LHRg9C10LzRi9C1INCw0LPQtdC90YLRgyDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINGB0L/QuNGB0LrQsCBQU0EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2VzIHdpdGggYW4gdXBjb21pbmcgUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldykuJ30gPQogICAgICAgICfQn9GA0LjQstC40LvQtdCz0LjQuCwg0YLRgNC10LHRg9C10LzRi9C1INCw0LPQtdC90YLRgyDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINGB0L/QuNGB0LrQsCDQuNC30LzQtdC90LXQvdC40Lkg0YEg0L/RgNC10LTRgdGC0L7Rj9GJ0LjQvCBQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biBjaGFuZ2VzLid9ID0gJ9Cf0YDQuNCy0LjQu9C10LPQuNC4LCDRgtGA0LXQsdGD0LXQvNGL0LUg0LDQs9C10L3RgtGDINC00LvRjyDQv9GA0L7RgdC80L7RgtGA0LAg0YHQvtCx0YHRgtCy0LXQvdC90YvRhSDQuNC30LzQtdC90LXQvdC40LkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBvd24gd29ya29yZGVycy4nfSA9ICfQn9GA0LjQstC40LvQtdCz0LjQuCwg0YLRgNC10LHRg9C10LzRi9C1INCw0LPQtdC90YLRgyDQtNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINGB0L/QuNGB0LrQsCDRgdC+0LHRgdGC0LLQtdC90L3Ri9GFINC30LDQtNCw0YcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gd3JpdGUgYSByZXBvcnQgZm9yIHRoZSB3b3Jrb3JkZXIuJ30gPSAn0J/RgNC40LLQuNC70LXQs9C40LgsINGC0YDQtdCx0YPQtdC80YvQtSDQsNCz0LXQvdGC0YMg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8g0L7RgtGH0LXRgtCwINC/0L4g0LfQsNC00LDRh9Cw0LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgYSBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzLid9ID0gJ9Ce0YfQuNGB0YLQuNGC0Ywg0JjQt9C80LXQvdC10L3QuNC1INC4INC10LPQviDQl9Cw0LTQsNGH0LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biB0YXNrIHRvIGNoZWNrIGlmIHNwZWNpZmljIHRpbWVzIGhhdmUgYmVlbiByZWFjaGVkIGluIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICfQl9Cw0L/Rg9GB0YLQuNGC0Ywg0LfQsNC00LDQvdC40LUg0LTQu9GPINC/0YDQvtCy0LXRgNC60Lgg0LTQvtGB0YLQuNC20LjQvNC+0YHRgtC4INC30L3QsNGH0LXQvdC40Lkg0LLRgNC10LzQtdC90Lgg0LIg0JjQt9C80LXQvdC10L3QuNGP0YUg0Lgg0JfQsNC00LDRh9Cw0YUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgY2hhbmdlIGFzIGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgd29ya29yZGVyIGFzIGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjaGVkdWxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjcmVlbiBhZnRlciBjcmVhdGluZyBhIHdvcmtvcmRlcid9ID0gJ9Cf0L7QutCw0LfQsNGC0Ywg0Y3RgtC+0YIg0Y3QutGA0LDQvSDQv9C+0YHQu9C1INGB0L7Qt9C00LDQvdC40Y8g0L3QvtCy0L7QuSDQt9Cw0LTQsNGH0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMnfSA9ICfQn9C+0LjRgdC6INC40LfQvNC10L3QtdC90LjQuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ2hhbmdlcy4nfSA9ICfQn9C+0LjRgdC6INC40LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY2hhbmdlIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY2hhbmdlIG51bWJlciwgdGhlIFN5c3RlbUlEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZCB3aXRoIFN5c3RlbUlELmNvdW50ZXIgZm9ybWF0IChlLmcuIDEwMDExOCwgMTAwMTE5KS4gV2l0aCAiRGF0ZSIsIHRoZSBjaGFuZ2UgbnVtYmVycyB3aWxsIGJlIGdlbmVyYXRlZCBieSB0aGUgY3VycmVudCBkYXRlIGFuZCBhIGNvdW50ZXI7IHRoaXMgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuY291bnRlciwgZS5nLiAyMDEwMDYyNDAwMDAxLCAyMDEwMDYyNDAwMDAyLiBXaXRoICJEYXRlQ2hlY2tzdW0iLCB0aGUgY291bnRlciB3aWxsIGJlIGFwcGVuZGVkIGFzIGNoZWNrc3VtIHRvIHRoZSBzdHJpbmcgb2YgZGF0ZSBwbHVzIHRoZSBTeXN0ZW1JRC4gVGhlIGNoZWNrc3VtIHdpbGwgYmUgcm90YXRlZCBvbiBhIGRhaWx5IGJhc2lzLiBUaGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LlN5c3RlbUlELkNvdW50ZXIuQ2hlY2tTdW0sIGUuZy4gMjAxMDA2MjQxMDAwMDAxNywgMjAxMDA2MjQxMDAwMDAyNi4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgdC/0L7RgdC+0LEg0LPQtdC90LXRgNCw0YbQuNC4INC90L7QvNC10YDQvtCyINC40LfQvNC10L3QtdC90LjQuS4gICJBdXRvSW5jcmVtZW50IiAtINGD0LLQtdC70LjRh9C40LLQsNC10YIg0L3QvtC80LXRgCDQvdCwIDEsINGE0L7RgNC80LDRgiAtIFN5c3RlbUlELmNvdW50ZXIgKNC90LDQv9GA0LjQvNC10YAsIDEwMDExOCwgMTAwMTE5KS4gICJEYXRlIiAtINC40YHQv9C+0LvRjNC30YPQtdGCINGC0LXQutGD0YnRg9GOINC00LDRgtGDLCBTeXN0ZW1JRCDQuCDRgdGH0LXRgtGH0LjQuiwg0LLQuNC0OiBZZWFyLk1vbnRoLkRheS5TeXN0ZW1JRC5jb3VudGVyIC0gMjAxMDA2MjQwMDAwMSwgMjAxMDA2MjQwMDAwMi4gIkRhdGVDaGVja3N1bSIgLSDRgdGH0LXRgtGH0LjQuiDQtNC+0L/QvtC70L3Rj9C10YLRgdGPINC60L7QvdGC0YDQvtC70YzQvdC+0Lkg0YHRg9C80LzQvtC5INC6INGB0YLRgNC+0LrQtSDQuNC3INC00LDRgtGLINC4IFN5c3RlbUlELiDQpNC+0YDQvNCw0YIg0YHRgtGA0L7QuNGC0YHRjyDQutCw0LogWWVhci5Nb250aC5EYXkuU3lzdGVtSUQuQ291bnRlci5DaGVja1N1bS4g0JrQvtC90YLRgNC+0LvRjNC90LDRjyDRgdGD0LzQvNCwINC+0LHQvdC+0LLQu9GP0LXRgtGB0Y8g0LXQttC10LTQvdC10LLQvdC+LCDQstC40LQ6IDIwMTAwNjI0MTAwMDAwMTcsIDIwMTAwNjI0MTAwMDAwMjYuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgYWdlbnQgZm9yIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50SVRTTUNoYW5nZVpvb20gYW5kIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0LLRi9GB0L7RgtGDICjQsiDQv9C40LrRgdC10LvQsNGFKSDQv9C+INGD0LzQvtC70YfQsNC90LjRjiDQtNC70Y8gaW5saW5lIEhUTUwg0L/QvtC70LXQuSDQsiAgQWdlbnRJVFNNQ2hhbmdlWm9vbSDQuCBBZ2VudElUU01Xb3JrT3JkZXJab29tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINC80LDQutGB0LjQvNCw0LvRjNC90YPRjiDQstGL0YHQvtGC0YMgKNCyINC/0LjQutGB0LXQu9Cw0YUpINC00LvRjyBpbmxpbmUgSFRNTCDQv9C+0LvQtdC5INCyIEFnZW50SVRTTUNoYW5nZVpvb20g0LggQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgbWluaW1hbCBjaGFuZ2UgY291bnRlciBzaXplIChpZiAiQXV0b0luY3JlbWVudCIgd2FzIHNlbGVjdGVkIGFzIElUU01DaGFuZ2U6Ok51bWJlckdlbmVyYXRvcikuIERlZmF1bHQgaXMgNSwgdGhpcyBtZWFucyB0aGUgY291bnRlciBzdGFydHMgZnJvbSAxMDAwMC4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDQvNC40L3QuNC80LDQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INGA0LDQt9GA0Y/QtNC+0LIg0LTQu9GPINGB0YfQtdGC0YfQuNC60LAg0LjQt9C80LXQvdC10L3QuNC5ICjQtdGB0LvQuCDQstGL0LHRgNCw0L0g0YLQuNC/ICAiQXV0b0luY3JlbWVudCIg0LTQu9GPIElUU01DaGFuZ2U6Ok51bWJlckdlbmVyYXRvcikuINCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIC0gNSwg0YfRgtC+INC+0LfQvdCw0YfQsNC10YIsINGH0YLQviDQvdCw0YfQsNC70YzQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDRgdGH0LXRgtGH0LjQutCwINCx0YPQtNC10YIgMTAwMDAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdXAgdGhlIHN0YXRlIG1hY2hpbmUgZm9yIGNoYW5nZXMuJ30gPSAn0JfQsNC00LDQtdGCIHN0YXRlIG1hY2hpbmUg0LTQu9GPINC40LfQvNC10L3QtdC90LjQuS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3Igd29ya29yZGVycy4nfSA9ICfQl9Cw0LTQsNC10YIgc3RhdGUgbWFjaGluZSDQtNC70Y8g0LfQsNC00LDQvdC40LkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgY2hlY2tib3ggaW4gdGhlIEFnZW50SVRTTVdvcmtPcmRlckVkaXQgc2NyZWVuIHRoYXQgZGVmaW5lcyBpZiB0aGUgdGhlIGZvbGxvd2luZyB3b3Jrb3JkZXJzIHNob3VsZCBhbHNvIGJlIG1vdmVkIGlmIGEgd29ya29yZGVyIGlzIG1vZGlmaWVkIGFuZCB0aGUgcGxhbm5lZCBlbmQgdGltZSBoYXMgY2hhbmdlZC4nfSA9CiAgICAgICAgJ9Ce0YLQvtCx0YDQsNC20LDQtdGCINC/0L7Qu9C1INCy0YvQsdC+0YDQsC9jaGVja2JveCDQvdCwINGN0LrRgNCw0L3QtSBBZ2VudElUU01Xb3JrT3JkZXJFZGl0INC60L7RgtC+0YDQvtC1INC30LDQtNCw0LXRgiDQsdGD0LTRg9GCINC70Lgg0YHQtNCy0LjQs9Cw0YLRjNGB0Y8g0L/QvtGB0LvQtdC00YPRjtGJ0LjQtSDQt9Cw0LTQsNGH0LgsINC10YHQu9C4INC30LDQtNCw0YfQsCDQuNC30LzQtdC90Y/QtdGC0YHRjyDQuCDQt9Cw0L/Qu9Cw0L3QuNGA0L7QstCw0L3QvdC+0LUg0LLRgNC10LzRjyDQvtC60L7QvdGH0LDQvdC40Y8g0LjQt9C80LXQvdC10L3Qvi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGNoYW5naW5nIHRoZSB3b3Jrb3JkZXIgYWdlbnQsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ce0YLQvtCx0YDQsNC20LDQtdGCINGB0YHRi9C70LrRgyDQsiDQvNC10L3Rjiwg0LrQvtGC0L7RgNCw0Y8g0L/QvtC30LLQvtC70Y/QtdGCINC40LfQvNC10L3QuNGC0Ywg0LDQs9C10L3RgtCwINC00LvRjyDQl9Cw0LTQsNGH0LgsINCyINC00LXRgtCw0LvRjNC90L7QvCDQv9GA0L7RgdC80L7RgtGA0LUg0Y3RgtC+0Lkg0JfQsNC00LDRh9C4INCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgY2hhbmdlIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgY2hhbmdlLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J7RgtC+0LHRgNCw0LbQsNC10YIg0YHRgdGL0LvQutGDINCyINC80LXQvdGOLCDQutC+0YLQvtGA0LDRjyDQv9C+0LfQstC+0LvRj9C10YIg0L7Qv9GA0LXQtNC10LvQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINC60LDQuiDRiNCw0LHQu9C+0L0g0LIg0LTQtdGC0LDQu9GM0L3QvtC8INC/0YDQvtGB0LzQvtGC0YDQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSB3b3Jrb3JkZXIgYXMgYSB0ZW1wbGF0ZSBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSB3b3Jrb3JkZXIsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQntGC0L7QsdGA0LDQttCw0LXRgiDRgdGB0YvQu9C60YMg0LIg0LzQtdC90Y4sINC60L7RgtC+0YDQsNGPINC/0L7Qt9Cy0L7Qu9GP0LXRgiDQvtC/0YDQtdC00LXQu9C40YLRjCDQl9Cw0LTQsNGH0YMg0LrQsNC6INGI0LDQsdC70L7QvSDQsiDQtNC10YLQsNC70YzQvdC+0Lwg0L/RgNC+0YHQvNC+0YLRgNC1INCX0LDQtNCw0YfQuCDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBlZGl0aW5nIHRoZSByZXBvcnQgb2YgYSB3b3Jrb3JkZXIsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ce0YLQvtCx0YDQsNC20LDQtdGCINGB0YHRi9C70LrRgyDQsiDQvNC10L3Rjiwg0LrQvtGC0L7RgNCw0Y8g0L/QvtC30LLQvtC70Y/QtdGCINGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINC+0YLRh9C10YIg0L4g0JfQsNC00LDRh9C1LCDQsiDQtNC10YLQsNC70YzQvdC+0Lwg0L/RgNC+0YHQvNC+0YLRgNC1INGN0YLQvtC5INC30LDQtNCw0YfQuCDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgY2hhbmdlIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ce0YLQvtCx0YDQsNC20LDQtdGCINGB0YHRi9C70LrRgyDQsiDQvNC10L3Rjiwg0LrQvtGC0L7RgNCw0Y8g0L/QvtC30LLQvtC70Y/QtdGCINGD0YHRgtCw0L3QvtCy0LjRgtGMINGB0LLRj9C30Ywg0LjQt9C80LXQvdC10L3QuNGPINGBINC00YDRg9Cz0LjQvCDQvtCx0YrQtdC60YLQvtGA0Lwg0LIg0LTQtdGC0LDQu9GM0L3QvtC8INC/0YDQvtGB0LzQvtGC0YDQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIHdvcmtvcmRlciB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ce0YLQvtCx0YDQsNC20LDQtdGCINGB0YHRi9C70LrRgyDQsiDQvNC10L3Rjiwg0LrQvtGC0L7RgNCw0Y8g0L/QvtC30LLQvtC70Y/QtdGCINGD0YHRgtCw0L3QvtCy0LjRgtGMINGB0LLRj9C30Ywg0JfQsNC00LDRh9C4INGBINC00YDRg9Cz0LjQvCDQvtCx0YrQtdC60YLQvtC8INCyINC00LXRgtCw0LvRjNC90L7QvCDQv9GA0L7RgdC80L7RgtGA0LUg0LfQsNC00LDQvdC40Y8g0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbW92aW5nIHRoZSB0aW1lIHNsb3Qgb2YgYSBjaGFuZ2UgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J7RgtC+0LHRgNCw0LbQsNC10YIg0YHRgdGL0LvQutGDINCyINC80LXQvdGOINC60L7RgtC+0YDQsNGPINC/0L7Qt9Cy0L7Qu9GP0LXRgiDQv9C10YDQtdC80LXRidCw0YLRjCDQstGA0LXQvNC10L3QvdC+0Lkg0LjQvdGC0LXRgNCy0LDQuyDQuNC30LzQtdC90LXQvdC40Y8g0LIg0LXQs9C+INC00LXRgtCw0LvRjNC90L7QvCDQv9GA0L7RgdC80L7RgtGA0LUg0LIg0LDQs9C10L3RgtGB0LrQvtC8INC40L3RgtC10YDRhNC10LnRgdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdGFraW5nIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQntGC0L7QsdGA0LDQttCw0LXRgiDRgdGB0YvQu9C60YMg0LrQvtGC0L7RgNCw0Y8g0L/QvtC30LLQvtC70Y/QtdGCINC/0YDQuNC90Y/RgtGMINC30LDQtNCw0YfRgyDQsiDRgNCw0LHQvtGC0YMg0L/RgNC4INC10ZEg0LTQtdGC0LDQu9GM0L3QvtC8INC/0YDQvtGB0LzQvtGC0YDQtSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGNvbmRpdGlvbnMgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ce0YLQvtCx0YDQsNC20LDQtdGCINGB0YHRi9C70LrRgyDQsiDQvNC10L3RjiDQtNC70Y8g0LTQvtGB0YLRg9C/0LAg0Log0YPRgdC70L7QstC40Y/QvCDQuNC30LzQtdC90LXQvdC40Y8g0LIg0LXQs9C+INC00LXRgtCw0LvRjNC90L7QvCDQv9GA0L7RgdC80L7RgtGA0LUg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQntGC0L7QsdGA0LDQttCw0LXRgiDRgdGB0YvQu9C60YMg0LIg0LzQtdC90Y8g0LTQu9GPINC00L7RgdGC0YPQv9CwINC6INC40YHRgtC+0YDQuNC4INC40LfQvNC10L3QtdC90LjRjyDQsiDQtdCz0L4g0LTQtdGC0LDQu9GM0L3QvtC8INC/0YDQvtGB0LzQvtGC0YDQtSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J7RgtC+0LHRgNCw0LbQsNC10YIg0YHRgdGL0LvQutGDINCyINC80LXQvdGOINC00LvRjyDQtNC+0YHRgtGD0L/QsCDQuiDQuNGB0YLQvtGA0LjQuCDQl9Cw0LTQsNGH0Lgg0L/RgNC4INC10ZEg0LTQtdGC0LDQu9GM0L3QvtC8INC/0YDQvtGB0LzQvtGC0YDQtSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSB3b3Jrb3JkZXIgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ce0YLQvtCx0YDQsNC20LDQtdGCINGB0YHRi9C70LrRgyDQsiDQvNC10L3RjiDQtNC70Y8g0LTQvtCx0LDQstC70LXQvdC40Y8g0JfQsNC00LDRh9C4INCyINC00LXRgtCw0LvRjNC90L7QvCDQv9GA0L7RgdC80L7RgtGA0LUg0JjQt9C80LXQvdC10L3QuNGPINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQn9C+0LrQsNC30YvQstCw0LXRgiDQv9GD0L3QutGCINC80LXQvdGOINC00LvRjyDRg9C00LDQu9C10L3QuNGPINC40LfQvNC10L3QtdC90LjRjyDQv9GA0Lgg0LXQs9C+INC/0L7QtNGA0L7QsdC90L7QvCDQv9GA0L7RgdC80L7RgtGA0LUg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgd29ya29yZGVyIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0L7QutCw0LfRi9Cy0LDQtdGCINC/0YPQvdC60YIg0LzQtdC90Y4g0LTQu9GPINGD0LTQsNC70LXQvdC40Y8g0LfQsNC00LDRh9C4INC/0YDQuCDQtdGRINC/0L7QtNGA0L7QsdC90L7QvCDQv9GA0L7RgdC80L7RgtGA0LUg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J7RgtC+0LHRgNCw0LbQsNC10YIg0YHRgdGL0LvQutGDINCyINC80LXQvdGOINC00LvRjyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINC40LfQvNC10L3QtdC90Y8g0LIg0LXQs9C+INC00LXRgtCw0LvRjNC90L7QvCDQv9GA0L7RgdC80L7RgtGA0LUg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J7RgtC+0LHRgNCw0LbQsNC10YIg0YHRgdGL0LvQutGDINCyINC80LXQvdGOINC00LvRjyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINCX0LDQtNCw0YfQuCDQsiDQtdGRINC00LXRgtCw0LvRjNC90L7QvCDQv9GA0L7RgdC80L7RgtGA0LUg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J7RgtC+0LHRgNCw0LbQsNC10YIg0YHRgdGL0LvQutGDINCyINC80LXQvdGOINC00LvRjyDQstC+0LfQstGA0LDRgtCwINCyINC00LXRgtCw0LvRjNC90YvQuSDQv9GA0L7RgdC80L7RgtGAINC40LfQvNC10L3QtdC90LjRjyDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSB3b3Jrb3JkZXIgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQntGC0L7QsdGA0LDQttCw0LXRgiDRgdGB0YvQu9C60YMg0LIg0LzQtdC90Y4g0LTQu9GPINCy0L7Qt9Cy0YDQsNGC0LAg0L3QsNC30LDQtCDQsiDQtNC10YLQsNC70YzQvdC+0Lwg0L/RgNC+0YHQvNC+0YLRgNC1INCX0LDQtNCw0YfQuCDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J7RgtC+0LHRgNCw0LbQsNC10YIg0YHRgdGL0LvQutGDINCyINC80LXQvdGOINC00LvRjyDQv9C10YfQsNGC0Lgg0LjQt9C80LXQvdC10L3QuNGPINC/0YDQuCDQtdCz0L4g0LTQtdGC0LDQu9GM0L3QvtC8INC/0YDQvtGB0LzQvtGC0YDQtSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J7RgtC+0LHRgNCw0LbQsNC10YIg0YHRgdGL0LvQutGDINCyINC80LXQvdGOINC00LvRjyDQv9C10YfQsNGC0Lgg0JfQsNC00LDRh9C4INC/0YDQuCDQtdC1INC00LXRgtCw0LvRjNC90L7QvCDQv9GA0L7RgdC80L7RgtGA0LUg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcmVzZXQgYSBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0L7QutCw0LfRi9Cy0LDQtdGCINC/0YPQvdC60YIg0LzQtdC90Y4g0LTQu9GPINC+0YfQuNGB0YLQutC4INC40LfQvNC10L3QtdC90LjRjyDQuCDQtdCz0L4g0LfQsNC00LDRhyDQv9GA0Lgg0LXQs9C+INC/0L7QtNGA0L7QsdC90L7QvCDQv9GA0L7RgdC80L7RgtGA0LUg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgY2hhbmdlIGhpc3RvcnkgKHJldmVyc2Ugb3JkZXJlZCkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0L7QutCw0LfRi9Cy0LDQtdGCINC40YHRgtC+0YDQuNGOINC40LfQvNC10L3QtdC90LjQuSAo0LIg0L7QsdGA0LDRgtC90L7QvCDQv9C+0YDRj9C00LrQtSkg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0ZSBNYWNoaW5lJ30gPSAn0KHQvtGB0YLQvtGP0L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0b3JlcyBjaGFuZ2UgYW5kIHdvcmtvcmRlciBpZHMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgdGVtcGxhdGUgaWQsIHdoaWxlIGEgdXNlciBpcyBlZGl0aW5nIGEgdGVtcGxhdGUuJ30gPQogICAgICAgICfQodC+0YXRgNCw0L3Rj9C10YIg0LjQtNC10L3RgtGE0LjQutCw0YLQvtGA0YsgLSBpZFwncyDQuNC30LzQtdC90LXQvdC40LjRjyDQuCDQt9Cw0LTQsNGH0Lgg0Lgg0LjRhSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC40LUg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRiyDRiNCw0LHQu9C+0L3QvtCyINCy0L4g0LLRgNC10LzRjyDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINC40YUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10LwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgV29ya29yZGVyJ30gPSAn0JLQt9GP0YLRjCDQt9Cw0LTQsNGH0YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXIuJ30gPSAn0JLQt9GP0YLRjCDQl9Cw0LTQsNGH0YMg0LIg0YDQsNCx0L7RgtGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIE92ZXJ2aWV3J30gPSAn0J7QsdC30L7RgCDRiNCw0LHQu9C+0L3QvtCyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlLid9ID0gJ9Co0LDQsdC70L7QvS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY2hhbmdlLCBlLmcuIENoYW5nZSMsIE15Q2hhbmdlIy4gVGhlIGRlZmF1bHQgaXMgQ2hhbmdlIy4nfSA9CiAgICAgICAgJ9CY0L3QtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LTQu9GPINC40LfQvNC10L3QtdC90LjRjywg0L3QsNC/0YDQuNC80LXRgCBDaGFuZ2UjLCBNeUNoYW5nZSMuIFRoZSBkZWZhdWx0IGlzIENoYW5nZSMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIHdvcmtvcmRlciwgZS5nLiBXb3Jrb3JkZXIjLCBNeVdvcmtvcmRlciMuIFRoZSBkZWZhdWx0IGlzIFdvcmtvcmRlciMuJ30gPQogICAgICAgICfQmNC90LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC00LvRjyDQt9Cw0LTQsNC90LjRjywg0L3QsNC/0YDQuNC80LXRgCBXb3Jrb3JkZXIjLCBNeVdvcmtvcmRlciMuIFRoZSBkZWZhdWx0IGlzIFdvcmtvcmRlciMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgQUNMIG1vZHVsZSByZXN0cmljdHMgdGhlIHVzdWFnZSBvZiB0aGUgdGlja2V0IHR5cGVzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb24gXCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXNcJywgdG8gdXNlcnMgb2YgdGhlIGdyb3VwcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpSZXN0cmljdFRpY2tldFR5cGVzOjpHcm91cHMiLiBBcyB0aGlzIEFDTCBjb3VsZCBjb2xsaWRlIHdpdGggb3RoZXIgQUNMcyB3aGljaCBhcmUgYWxzbyByZWxhdGVkIHRvIHRoZSB0aWNrZXQgdHlwZSwgdGhpcyBzeXNjb25maWcgb3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIHNob3VsZCBvbmx5IGJlIGFjdGl2YXRlZCBpZiBuZWVkZWQuJ30gPQogICAgICAgICfQrdGC0L7RgiBBQ0wg0LzQvtC00YPQu9GMINC+0LPRgNCw0L3QuNGH0LjQstCw0LXRgiDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtSDRgtC40L/QvtCyINC30LDRj9Cy0L7QuiDQt9Cw0LTQsNC90L3Ri9GFINCyINC/0LDRgNCw0LzQtdGC0YDQtSAgXCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXNcJywg0LTQu9GPINCw0LPQtdC90YLQvtCyINCz0YDRg9C/0L8sINGD0LrQsNC30LDQvdC90YvRhSDQsiAiSVRTTUNoYW5nZTo6UmVzdHJpY3RUaWNrZXRUeXBlczo6R3JvdXBzIi4g0KLQsNC6INC60LDQuiDRjdGC0L7RgiBBQ0wg0LzQvtC20LXRgiDQutC+0L3RhNC70LjQutGC0L7QstCw0YLRjCDRgSDQtNGA0YPQs9C40LzQuCBBQ0wsINGC0LDQutC20LUg0YHQstGP0LfQsNC90L3Ri9C80Lgg0YEg0YLQuNC/0LDQvNC4INC30LDRj9Cy0L7Quiwg0Y3RgtC+0YIg0L/QsNGA0LDQvNC10YLRgCDQvtGC0LrQu9GO0YfQtdC9INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOINC4INC80L7QttC10YIg0LHRi9GC0YwsINC/0YDQuCDQvdC10L7QsdGF0L7QtNC40LzQvtGB0YLQuCwg0LDQutGC0LjQstC40YDQvtCy0LDQvSDQstGA0YPRh9C90YPRji4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBTbG90J30gPSAn0JTQuNCw0L/QsNC30L7QvSDQtNCw0YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHlwZXMgb2YgdGlja2V0cywgd2hlcmUgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgYSBsaW5rIHRvIGFkZCBhIGNoYW5nZSB3aWxsIGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJ9Ci0LjQv9GLINC30LDRj9Cy0L7Quiwg0LIg0LrQvtGC0L7RgNGL0YUg0L/QvtC00YDQvtCx0L3QvtC8INC/0YDQvtGB0LzQvtGC0YDQtSDRgdGB0YvQu9C60LAg0LTQu9GPINC00L7QsdCw0LLQu9C10L3QuNGPINC40LfQvNC10L3QtdC90LjRjyDQsdGD0LTQtdGCINC/0L7QutCw0LfQsNC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgU2VhcmNoJ30gPSAn0J/QvtC40YHQuiDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFkZCAoZnJvbSB0ZW1wbGF0ZSkuJ30gPSAn0JTQvtCx0LDQstC40YLRjCDQl9Cw0LTQsNGH0YMgKNC40YHQv9C+0LvRjNC30YPRjyDRiNCw0LHQu9C+0L0pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQuJ30gPSAn0JTQvtCx0LDQstC70LXQvdC40LUg0JfQsNC00LDRh9C4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQuJ30gPSAn0JDQs9C10L3RgiDQl9Cw0LTQsNGH0LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBEZWxldGUuJ30gPSAn0KPQtNCw0LvQtdC90LjQtSAg0JfQsNC00LDRh9C4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgRWRpdC4nfSA9ICfQoNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INCX0LDQtNCw0YfQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEhpc3RvcnkgWm9vbS4nfSA9ICfQmNGB0YLQvtGA0LjRjyDQl9Cw0LTQsNGH0Lgg0L/QvtC00YDQvtCx0L3Qvi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEhpc3RvcnkuJ30gPSAn0JjRgdGC0L7RgNC40Y8g0JfQsNC00LDRh9C4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgUmVwb3J0Lid9ID0gJ9Ce0YLRh9C10YIg0L/QviDQl9Cw0LTQsNGH0LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBab29tLid9ID0gJ9Cf0YDQvtGB0LzQvtGC0YAg0JfQsNC00LDRh9C4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvbmNlJ30gPSAn0L7QtNC40L0g0YDQsNC3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlZ3VsYXJseSd9ID0gJ9GA0LXQs9GD0LvRj9GA0L3Qvic7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6c3JfQ3lybF9JVFNNQ2hhbmdlTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNoYW5nZUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yeSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ9Ca0LDRgtC10LPQvtGA0LjRmNCwIDwtPiDQo9GC0LjRhtCw0ZggPC0+INCf0YDQuNC+0YDQuNGC0LXRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDYXRlZ29yeSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAn0KPQv9GA0LDQstGZ0LDRmtC1INGA0LXQt9GD0LvRgtCw0YLQvtC8INC/0YDQuNC+0YDQuNGC0LXRgtCwINC60L7QvNCx0LjQvdCw0YbQuNGY0L7QvCDQmtCw0YLQtdCz0L7RgNC40ZjQsCA8LT4g0KPRgtC40YbQsNGYLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAn0KDQsNGB0L/QvtC00LXQu9CwINC/0YDQuNC+0YDQuNGC0LXRgtCwJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlTWFuYWdlbWVudCBOb3RpZmljYXRpb24gTWFuYWdlbWVudCd9ID0gJ9Cj0L/RgNCw0LLRmdCw0ZrQtSDQvtCx0LDQstC10YjRgtC10ZrQuNC80LAg0YMg4oCeSVRTTeKAnSDQo9C/0YDQsNCy0ZnQsNGa0YMg0L/RgNC+0LzQtdC90LDQvNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOb3RpZmljYXRpb24gUnVsZSd9ID0gJ9CU0L7QtNCw0Zgg0L/RgNCw0LLQuNC70L4g0L7QsdCw0LLQtdGI0YLQsNCy0LDRmtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1bGUnfSA9ICfQn9GA0LDQstC40LvQvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG5vdGlmaWNhdGlvbiBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAn0J7QsdCw0LLQtdGI0YLQtdGa0LUg0YLRgNC10LHQsCDQtNCwINC40LzQsCDQuNC80LUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQuJ30gPSAn0JjQvNC1INGY0LUg0L7QsdCw0LLQtdC30L3Qvi4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTVN0YXRlTWFjaGluZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gU3RhdGUgTWFjaGluZSd9ID0gJ9CQ0LTQvNC40L3QuNGB0YLQsNGA0YbQuNGY0LAg0LzQsNGI0LjQvdC1INGB0YLQsNGa0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgY2F0YWxvZyBjbGFzcyEnfSA9ICfQmNC30LHQvtGAINC60LvQsNGB0LUg0LrQsNGC0LDQu9C+0LPQsCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRhbG9nIGNsYXNzIGlzIHJlcXVpcmVkISd9ID0gJ9Ca0LvQsNGB0LAg0LrQsNGC0LDQu9C+0LPQsCDRmNC1INC+0LHQsNCy0LXQt9C90LAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHN0YXRlIHRyYW5zaXRpb24nfSA9ICfQlNC+0LTQsNGYINGC0YDQsNC90LfQuNGG0LjRmNGDINGB0YLQsNGC0YPRgdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICfQmtC70LDRgdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBOYW1lJ30gPSAn0J3QsNC30LjQsiDQvtCx0ZjQtdC60YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIHN0YXRlIHRyYW5zaXRpb25zIGZvcid9ID0gJ9Cf0YDQtdCz0LvQtdC0INC/0YDQtdC60L4g0YLRgNCw0L3Qt9C40YbQuNGY0LUg0YHRgtCw0YLRg9GB0LAg0LfQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAn0J7QsdGA0LjRiNC4INC+0LLRgyDRgtGA0LDQvdC30LjRhtC40ZjRgyDRgdGC0LDRgtGD0YHQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBuZXcgc3RhdGUgdHJhbnNpdGlvbiBmb3InfSA9ICfQlNC+0LTQsNGYINC90L7QstGDINGC0YDQsNC90LfQuNGG0LjRmNGDINGB0YLQsNGC0YPRgdCwINC30LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhIHN0YXRlISd9ID0gJ9Cc0L7Qu9C40LzQviDQtNCwINC+0LTQsNCx0LXRgNC10YLQtSDRgdGC0LDRmtC1ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGEgbmV4dCBzdGF0ZSEnfSA9ICfQnNC+0LvQuNC80L4g0LTQsCDQvtC00LDQsdC10YDQtdGC0LUg0YHQu9C10LTQtdGb0LUg0YHRgtCw0ZrQtSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBhIHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAn0KPRgNC10LTQuCDRgtGA0LDQvdC30LjRhtC40ZjRgyDRgdGC0LDRgtGD0YHQsCDQt9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIHN0YXRlIHRyYW5zaXRpb24nfSA9ICfQlNCwINC70Lgg0LfQsNC40YHRgtCwINC20LXQu9C40YLQtSDQtNCwINC+0LHRgNC40YjQtdGC0LUg0L7QstGDINGC0YDQsNC90LfQuNGG0LjRmNGDINGB0YLQsNGC0YPRgdCwPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2hhbmdlJ30gPSAn0JTQvtC00LDRmCDQv9GA0L7QvNC10L3Rgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSd9ID0gJ+KAnklUU03igJ0g0L/RgNC+0LzQtdC90LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVzdGlmaWNhdGlvbid9ID0gJ9Ce0L/RgNCw0LLQtNCw0ZrQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnB1dCBpbnZhbGlkLid9ID0gJ9Cd0LXQuNGB0L/RgNCw0LLQsNC9INGD0L3QvtGBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICfQo9GC0LjRhtCw0ZgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdGVkIERhdGUnfSA9ICfQotGA0LDQttC10L3QuCDQtNCw0YLRg9C8JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBDaGFuZ2UgVGVtcGxhdGUnfSA9ICfQmNC30LDQsdC10YDQuCDRiNCw0LHQu9C+0L0g0L/RgNC+0LzQtdC90LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSB0eXBlJ30gPSAn0KLQuNC/INCy0YDQtdC80LXQvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgdGltZSB0eXBlLid9ID0gJ9Cd0LXQuNGB0L/RgNCw0LLQsNC9INGC0LjQvyDQstGA0LXQvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpbWUnfSA9ICfQndC+0LLQviDQstGA0LXQvNC1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VDQUJUZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBDaGFuZ2UgQ0FCIGFzIHRlbXBsYXRlJ30gPSAn0KHQsNGH0YPQstCw0Zgg0L/RgNC+0LzQtdC90YMg0KHQntCfINC60LDQviDRiNCw0LHQu9C+0L0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gdG8gaW52b2x2ZWQgcGVyc29ucyBzY3JlZW4nfSA9ICfQuNC00Lgg0L3QsCDQtdC60YDQsNC9INGD0LrRmdGD0YfQtdC90LjRhSDQvtGB0L7QsdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgTmFtZSd9ID0gJ9Cf0L7Qs9GA0LXRiNC90L4g0LjQvNC1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbnMgYW5kIEFjdGlvbnMnfSA9ICfQo9GB0LvQvtCy0Lgg0Lgg0JDQutGG0LjRmNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25kaXRpb24nfSA9ICfQo9GB0LvQvtCyINCx0YDQuNGB0LDRmtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgY29uZGl0aW9uJ30gPSAn0JTQvtC00LDRmCDQvdC+0LLQuCDRg9GB0LvQvtCyJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENvbmRpdGlvbid9ID0gJ9Cj0YDQtdC00Lgg0YPRgdC70L7Qsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIGEgdmFsaWQgbmFtZS4nfSA9ICfQn9C+0YLRgNC10LHQvdC+INGY0LUg0LjRgdC/0YDQsNCy0L3QviDQuNC80LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdmFsaWQgbmFtZSBpcyBuZWVkZWQuJ30gPSAn0J3QtdC+0L/RhdC+0LTQvdC+INGY0LUg0LLQsNC20LXRm9C1INC40LzQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHVwbGljYXRlIG5hbWU6J30gPSAn0JTRg9C/0LvQuNC60LDRgiDQuNC80LXQvdCwOic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkIGJ5IGFub3RoZXIgY29uZGl0aW9uLid9ID0gJ9C+0LLQviDQuNC80LUg0ZjQtSDQstC10Zsg0YPQv9C+0YLRgNC10LHRmdC10L3QviDQt9CwINC00YDRg9Cz0Lgg0YPRgdC70L7Qsi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF0Y2hpbmcnfSA9ICfQn9C+0LTRg9C00LDRgNCw0ZrQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbnkgZXhwcmVzc2lvbiAoT1IpJ30gPSAn0KHQstCw0LrQuCDQuNC30YDQsNC3IChPUiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIGV4cHJlc3Npb25zIChBTkQpJ30gPSAn0KHQstC4INC40LfRgNCw0LfQuCAoQU5EKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHByZXNzaW9ucyd9ID0gJ9CY0LfRgNCw0LfQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3Rvcid9ID0gJ9CR0LjRgNCw0YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0b3InfSA9ICfQntC/0LXRgNCw0YLQvtGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBFeHByZXNzaW9uJ30gPSAn0J7QsdGA0LjRiNC4INC40LfRgNCw0LcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRXhwcmVzc2lvbnMgZm91bmQuJ30gPSAn0J3QuNGY0LUg0L/RgNC+0L3QsNGS0LXQvSDQvdC40ZjQtdC00LDQvSDQuNC30YDQsNC3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGV4cHJlc3Npb24nfSA9ICfQlNC+0LTQsNGYINC90L7QsiDQuNC30YDQsNC3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBBY3Rpb24nfSA9ICfQntCx0YDQuNGI0Lgg0LDQutGG0LjRmNGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEFjdGlvbnMgZm91bmQuJ30gPSAn0J3QuNGY0LUg0L/RgNC+0L3QsNGS0LXQvdCwINC90LjRmNC10LTQvdCwINCw0LrRhtC40ZjQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBhY3Rpb24nfSA9ICfQlNC+0LTQsNGYINC90L7QstGDINCw0LrRhtC40ZjRgyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2hhbmdlPyd9ID0gJ9CU0LAg0LvQuCDQt9Cw0LjRgdGC0LAg0LbQtdC70LjRgtC1INC00LAg0LjQt9Cx0YDQuNGI0LXRgtC1INC+0LLRgyDQv9GA0L7QvNC10L3Rgz8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgJXMlcyd9ID0gJ9Cj0YDQtdC00LggJXMlcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiAlcyVzJ30gPSAn0JjRgdGC0L7RgNC40ZjQsNGCINC+0LQgJXMlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXInfSA9ICfQoNCw0LTQvdC4INC90LDQu9C+0LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBkZXRhaWxzJ30gPSAn0J/RgNC40LrQsNC20Lgg0LTQtdGC0LDRmdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgd29ya29yZGVyJ30gPSAn0J/RgNC40LrQsNC20Lgg0YDQsNC00L3QuCDQvdCw0LvQvtCzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VIaXN0b3J5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlsZWQgaGlzdG9yeSBpbmZvcm1hdGlvbiBvZiAlcyd9ID0gJ9CU0LXRgtCw0ZnQvdC4INC40YHRgtC+0YDQuNGY0LDRgiDQt9CwICVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZGlmaWVkJ30gPSAn0J/RgNC+0LzQtdGa0LXQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09sZCBWYWx1ZSd9ID0gJ9Ch0YLQsNGA0LAg0LLRgNC10LTQvdC+0YHRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgVmFsdWUnfSA9ICfQndC+0LLQsCDQstGA0LXQtNC90L7RgdGCJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSW52b2x2ZWQgUGVyc29ucyBvZiAlcyVzJ30gPSAn0KPRgNC10LTQuCDRg9C60ZnRg9GH0LXQvdC1INC+0YHQvtCx0LUg0LfQsCAlcyVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludm9sdmVkIFBlcnNvbnMnfSA9ICfQo9C60ZnRg9GH0LXQvdC1INC+0YHQvtCx0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlTWFuYWdlcid9ID0gJ9Cj0L/RgNCw0LLRmdCw0Ycg0L/RgNC+0LzQtdC90LDQvNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgaW52YWxpZC4nfSA9ICfQndC10LjRgdC/0YDQsNCy0LDQvSDQutC+0YDQuNGB0L3QuNC6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VCdWlsZGVyJ30gPSAn0JPRgNCw0LTQuNGC0LXRmSDQv9GA0L7QvNC10L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQWR2aXNvcnkgQm9hcmQnfSA9ICfQodCw0LLQtdGC0L7QtNCw0LLQvdC4INC+0LTQsdC+0YAg0LfQsCDQv9GA0L7QvNC10L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgVGVtcGxhdGUnfSA9ICfQodCe0J8g0YjQsNCx0LvQvtC9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcGx5IFRlbXBsYXRlJ30gPSAn0J/RgNC40LzQtdC90Lgg0YjQsNCx0LvQvtC9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ld1RlbXBsYXRlJ30gPSAn0J3QvtCy0Lgg0YjQsNCx0LvQvtC9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgdGhpcyBDQUIgYXMgdGVtcGxhdGUnfSA9ICfQodCw0YfRg9Cy0LDRmCDQvtCy0L4g0LrQsNC+INCh0J7QnyDRiNCw0LHQu9C+0L0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRvIENBQid9ID0gJ9CU0L7QtNCw0Zgg0YMg0KHQntCfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgVXNlcid9ID0gJ9Cf0L7Qs9GA0LXRiNCw0L0g0LrQvtGA0LjRgdC90LjQuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IENBQid9ID0gJ9CQ0LrRgtGD0LXQu9C90Lgg0KHQntCfJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ9Cf0L7QtNC10YjQsNCy0LDRmtC1INC60L7QvdGC0LXQutGB0YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VzIHBlciBwYWdlJ30gPSAn0J/RgNC+0LzQtdC90LAg0L/QviDRgdGC0YDQsNC90LgnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUaXRsZSd9ID0gJ9Cd0LDRgdC70L7QsiDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBUaXRsZSd9ID0gJ9Cd0LDRgdC70L7QsiDQv9GA0L7QvNC10L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQnfSA9ICfQntC/0LXRgNCw0YLQtdGAINC30LAg0YDQsNC00L3QuCDQvdCw0LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBCdWlsZGVyJ30gPSAn0JPRgNCw0LTQuNGC0LXRmSDQv9GA0L7QvNC10L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgTWFuYWdlcid9ID0gJ9Cj0L/RgNCw0LLRmdCw0ZrQtSDQv9GA0L7QvNC10L3QsNC80LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVycyd9ID0gJ9Cg0LDQtNC90Lgg0L3QsNC70L7Qt9C4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTdGF0ZSd9ID0gJ9Ch0YLQsNGa0LUg0L/RgNC+0LzQtdC90LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFN0YXRlJ30gPSAn0KHRgtCw0ZrQtSDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUeXBlJ30gPSAn0KLQuNC/INGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdGVkIFRpbWUnfSA9ICfQotGA0LDQttC10L3QviDQstGA0LXQvNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgU3RhcnQgVGltZSd9ID0gJ9Cf0LvQsNC90LjRgNCw0L3QviDQstGA0LXQvNC1INC/0L7Rh9C10YLQutCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRW5kIFRpbWUnfSA9ICfQn9C70LDQvdC40YDQsNC90L4g0LLRgNC10LzQtSDQt9Cw0LLRgNGI0LXRgtC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsIFN0YXJ0IFRpbWUnfSA9ICfQodGC0LLQsNGA0L3QviDQstGA0LXQvNC1INC/0L7Rh9C10YLQutCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBFbmQgVGltZSd9ID0gJ9Ch0YLQstCw0YDQvdC+INCy0YDQtdC80LUg0LfQsNCy0YDRiNC10YLQutCwJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VSZXNldAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIHJlc2V0IHRoaXMgY2hhbmdlPyd9ID0gJ9CU0LAg0LvQuCDQt9Cw0LjRgdGC0LAg0LbQtdC70LjRgtC1INC00LAg0L/QvtC90LjRiNGC0LjRgtC1INC+0LLRgyDQv9GA0L7QvNC10L3Rgz8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGUuZy4gMTAqNTE1NSBvciAxMDU2NTgqKSd9ID0gJyjQvdC/0YAgMTAqNTE1NSDQuNC70LggMTA1NjU4KiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIEFnZW50J30gPSAn0J7Qv9C10YDQsNGC0LXRgCDQodCe0J8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS5nLid9ID0gJ9C90L/RgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQ3VzdG9tZXInfSA9ICfQmtC70LjRmNC10L3RgiDQodCe0J8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICfQo9C/0YPRgtGB0YLQstC+IElUU00g0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBSZXBvcnQnfSA9ICfQmNC30LLQtdGI0YLQsNGYIElUU00g0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBQcmlvcml0eSd9ID0gJ9Cf0YDQuNC+0YDQuNGC0LXRgiBJVFNNINC/0YDQvtC80LXQvdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIEltcGFjdCd9ID0gJ9Cj0YLQuNGG0LDRmCBJVFNNINC/0YDQvtC80LXQvdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBDYXRlZ29yeSd9ID0gJ9Ca0LDRgtC10LPQvtGA0LjRmNCwINC/0YDQvtC80LXQvdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhiZWZvcmUvYWZ0ZXIpJ30gPSAnKNC/0YDQtS/Qv9C+0YHQu9C1KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoYmV0d2VlbiknfSA9ICco0LjQt9C80LXRktGDKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgQ2hhbmdlIGFzIFRlbXBsYXRlJ30gPSAn0KHQsNGH0YPQstCw0Zgg0L/RgNC+0LzQtdC90YMg0LrQsNC+INGI0LDQsdC70L7QvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHRlbXBsYXRlIHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICfQqNCw0LHQu9C+0L0g0YLRgNC10LHQsCDQtNCwINC40LzQsCDQuNC80LUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLid9ID0gJ9CY0LzQtSDRiNCw0LHQu9C+0L3QsCDRmNC1INC+0LHQsNCy0LXQt9C90L4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IFN0YXRlcyd9ID0gJ9Cf0L7QvdC40YjRgtC4INGB0YLQsNGa0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcndyaXRlIG9yaWdpbmFsIHRlbXBsYXRlJ30gPSAn0J/RgNC10L/QuNGI0Lgg0L/RgNC10LrQviDQvtGA0LjQs9C40L3QsNC70L3QvtCzINGI0LDQsdC70L7QvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCBjaGFuZ2UnfSA9ICfQntCx0YDQuNGI0Lgg0L7RgNC40LPQuNC90LDQu9C90YMg0L/RgNC+0LzQtdC90YMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRpbWVTbG90CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIFRpbWUgU2xvdCd9ID0gJ9Cf0L7QvNC10YDQuCDQstGA0LXQvNC10L3RgdC60Lgg0YLQtdGA0LzQuNC9JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW5mb3JtYXRpb24nfSA9ICfQmNC90YTQvtGA0LzQsNGG0LjRmNCwINC+INC/0YDQvtC80LXQvdC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRWZmb3J0J30gPSAn0J/Qu9Cw0L3QuNGA0LDQvdC4INC90LDQv9C+0YAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWNjb3VudGVkIFRpbWUnfSA9ICfQntCx0YDQsNGH0YPQvdCw0YLQviDQstGA0LXQvNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbml0aWF0b3IocyknfSA9ICfQmNC90LjRhtC40ZjQsNGC0L7RgCjQuCkg0L/RgNC+0LzQtdC90LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCJ30gPSAn0KHQntCfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ9CX0LDQtNGa0Lgg0L/Rg9GCINC/0YDQvtC80LXRmtC10L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfQn9GA0L7QvNC10L3QuNC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAn0KMg0YDQtdC00YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG8gb3BlbiBsaW5rcyBpbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIGJsb2NrcywgeW91IG1pZ2h0IG5lZWQgdG8gcHJlc3MgQ3RybCBvciBDbWQgb3IgU2hpZnQga2V5IHdoaWxlIGNsaWNraW5nIHRoZSBsaW5rIChkZXBlbmRpbmcgb24geW91ciBicm93c2VyIGFuZCBPUykuJ30gPQogICAgICAgICfQlNCwINCx0LjRgdGC0LUg0L7RgtCy0L7RgNC40LvQuCDQstC10LfQtSDRgyDRgdC70LXQtNC10ZvQuNC8INCx0LvQvtC60L7QstC40LzQsCDQvtC/0LjRgdCwLCDQvNC+0LbQtNCwINGb0LXRgtC1INGC0YDQtdCx0LDRgtC4INC00LAg0L/RgNC40YLQuNGB0L3QtdGC0LUg4oCeQ3RybOKAnSDQuNC70Lgg4oCeQ21k4oCdINC40LvQuCDigJ5TaGlmdOKAnSDRgtCw0YHRgtC10YAg0LTQvtC6INC40YHRgtC+0LLRgNC10LzQtdC90L4g0LrQu9C40LrQvdC10YLQtSDQvdCwINCy0LXQt9GDICjQt9Cw0LLQuNGB0Lgg0L7QtCDQstCw0YjQtdCzINCe0KEg0Lgg0L/RgNC10LPQu9C10LTQsNGH0LApLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAn0J/RgNC10YPQt9C80Lgg0L/RgNC40LvQvtCzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ0FCIFRlbXBsYXRlJ30gPSAn0KPRgNC10LTQuCDQodCe0J8g0YjQsNCx0LvQvtC9JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGNoYW5nZSBmcm9tIHRoaXMgdGVtcGxhdGUsIHNvIHlvdSBjYW4gZWRpdCBhbmQgc2F2ZSBpdC4nfSA9CiAgICAgICAgJ9Ce0LLQviDRm9C1INC60YDQtdC40YDQsNGC0Lgg0L3QvtCy0YMg0L/RgNC+0LzQtdC90YMg0L7QtCDQvtCy0L7QsyDRiNCw0LHQu9C+0L3QsCwg0L/QsCDRmNC1INC80L7QttC10YLQtSDQuNC30LzQtdC90LjRgtC4INC4INGB0LDRh9GD0LLQsNGC0LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuZXcgY2hhbmdlIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIGl0IGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAn0J3QvtCy0LAg0L/RgNC+0LzQtdC90LAg0ZvQtSDQsNGD0YLQvtC80LDRgtGB0LrQuCDQsdC40YLQuCDQvtCx0YDQuNGB0LDQvdCwLCDQutCw0LQg0LHRg9C00LUg0YHQsNGH0YPQstCw0L3QsCDQutCw0L4g0YjQsNCx0LvQvtC9Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IHdvcmtvcmRlciBmcm9tIHRoaXMgdGVtcGxhdGUsIHNvIHlvdSBjYW4gZWRpdCBhbmQgc2F2ZSBpdC4nfSA9CiAgICAgICAgJ9Ce0LLQviDRm9C1INC60YDQtdC40YDQsNGC0Lgg0L3QvtCyINGA0LDQtNC90Lgg0L3QsNC70L7QsyDQvtC0INC+0LLQvtCzINGI0LDQsdC70L7QvdCwLCDQv9CwINCz0LAg0LzQvtC20LXRgtC1INC40LfQvNC10L3QuNGC0Lgg0Lgg0YHQsNGH0YPQstCw0YLQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB0ZW1wb3JhcnkgY2hhbmdlIHdpbGwgYmUgY3JlYXRlZCB3aGljaCBjb250YWlucyB0aGUgd29ya29yZGVyLid9ID0KICAgICAgICAn0JHQuNGb0LUg0LrRgNC10LjRgNCw0L3QsCDQv9GA0LjQstGA0LXQvNC10L3QsCDQv9GA0L7QvNC10L3QsCDQutC+0ZjQsCDRgdCw0LTRgNC20Lgg0YDQsNC00L3QuCDQvdCw0LvQvtCzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcG9yYXJ5IGNoYW5nZSBhbmQgbmV3IHdvcmtvcmRlciB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciB0aGUgd29ya29yZGVyIGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAn0J/RgNC40LLRgNC10LzQsNC90LAg0L/RgNC+0LzQtdC90LAg0Lgg0L3QvtCy0Lgg0YDQsNC00L3QuCDQvdCw0LvQvtCzINGb0LUg0LDRg9GC0L7QvNCw0YLRgdC60Lgg0LHQuNGC0Lgg0L7QsdGA0LjRgdCw0L3QuCwg0LrQsNC0INGA0LDQtNC90Lgg0L3QsNC70L7QsyDQsdGD0LTQtSDRgdCw0YfRg9Cy0LDQvSDQutCw0L4g0YjQsNCx0LvQvtC9Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3Ugd2FudCB0byBwcm9jZWVkPyd9ID0gJ9CU0LAg0LvQuCDQttC10LvQuNGC0LUg0LTQsCDQvdCw0YHRgtCw0LLQuNGC0LU/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIElEJ30gPSAnSUQg0YjQsNCx0LvQvtC90LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb250ZW50J30gPSAn0KPRgNC10LTQuCDRgdCw0LTRgNC20LDRmCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYnknfSA9ICfQmtGA0LXQuNGA0LDQvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYnknfSA9ICfQmNC30LzQtdC90LjQvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgVGltZSd9ID0gJ9CS0YDQtdC80LUg0L/RgNC+0LzQtdC90LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUZW1wbGF0ZSBDb250ZW50J30gPSAn0KPRgNC10LTQuCDRgdCw0LTRgNC20LDRmCDRiNCw0LHQu9C+0L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgVGVtcGxhdGUnfSA9ICfQntCx0YDQuNGI0Lgg0YjQsNCx0LvQvtC9JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgdG8gJXMlcyd9ID0gJ9CU0L7QtNCw0Zgg0YDQsNC00L3QuCDQvdCw0LvQvtCzINGDICVzJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdHJ1Y3Rpb24nfSA9ICfQmNC90YHRgtGA0YPQutGG0LjRmNCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgd29ya29yZGVyIHR5cGUuJ30gPSAn0J3QtdC40YHQv9GA0LDQstCw0L0g0YLQuNC/INGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBwbGFubmVkIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIHBsYW5uZWQgZW5kIHRpbWUhJ30gPSAn0J/Qu9Cw0L3QuNGA0LDQvdC+INCy0YDQtdC80LUg0L/QvtGH0LXRgtC60LAg0LzQvtGA0LAg0LHQuNGC0Lgg0L/RgNC1INC/0LvQsNC90LjRgNCw0L3QvtCzINCy0YDQtdC80LXQvdCwINC30LDQstGA0YjQtdGC0LrQsCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBmb3JtYXQuJ30gPSAn0J3QtdC40YHQv9GA0LDQstCw0L0g0YTQvtGA0LzQsNGCLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgV29ya29yZGVyIFRlbXBsYXRlJ30gPSAn0JjQt9Cw0LHQtdGA0Lgg0YjQsNCx0LvQvtC9INGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFnZW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFdvcmtvcmRlciBBZ2VudCBvZiAlcyVzJ30gPSAn0KPRgNC10LTQuCDQutC+0YDQuNGB0L3QuNC60LAg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCDQt9CwICVzJXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckRlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHdvcmtvcmRlcj8nfSA9ICfQlNCwINC70Lgg0LfQsNC40YHRgtCwINC20LXQu9C40YLQtSDQtNCwINC40LfQsdGA0LjRiNC10YLQtSDQvtCy0LDRmCDRgNCw0LTQvdC4INC90LDQu9C+0LM/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIFdvcmtvcmRlci4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgQ29uZGl0aW9uISd9ID0KICAgICAgICAn0J3QtSDQvNC+0LbQtdGC0LUg0L7QsdGA0LjRgdCw0YLQuCDQvtCy0LDRmCDRgNCw0LTQvdC4INC90LDQu9C+0LMuINCj0L/QvtGC0YDQtdCx0ZnQtdC9INGY0LUg0YMg0LHQsNGAINGY0LXQtNC90L7QvCDRg9GB0LvQvtCy0YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBXb3Jrb3JkZXIgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIENvbmRpdGlvbihzKSd9ID0gJ9Ce0LLQsNGYINGA0LDQtNC90Lgg0L3QsNC70L7QsyDRmNC1INGD0L/QvtGC0YDQtdCx0ZnQtdC9INGDINGB0LvQtdC00LXRm9C40Lwg0YPRgdC70L7QstC40LzQsCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzLSVzJ30gPSAn0KPRgNC10LTQuCAlcyVzLSVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgZm9sbG93aW5nIHdvcmtvcmRlcnMgYWNjb3JkaW5nbHknfSA9ICfQn9C+0LzQtdGA0LjRgtC1INCw0LTQtdC60LLQsNGC0L3QviDRgdC70LXQtNC10ZvQtSDRgNCw0LTQvdC1INC90LDQu9C+0LPQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGUgcGxhbm5lZCBlbmQgdGltZSBvZiB0aGlzIHdvcmtvcmRlciBpcyBjaGFuZ2VkLCB0aGUgcGxhbm5lZCBzdGFydCB0aW1lcyBvZiBhbGwgZm9sbG93aW5nIHdvcmtvcmRlcnMgd2lsbCBiZSBjaGFuZ2VkIGFjY29yZGluZ2x5J30gPQogICAgICAgICfQn9C70LDQvdC40YDQsNC90L4g0LLRgNC10LzQtSDQt9Cw0LLRgNGI0LXRgtC60LAg0L7QstC+0LMg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCDRmNC1INC/0YDQvtC80LXRmtC10L3Qviwg0L/Qu9Cw0L3QuNGA0LDQvdCwINCy0YDQtdC80LXQvdCwINC/0L7Rh9C10YLQutCwINGB0LLQuNGFINC90LDRgNC10LTQvdC40YUg0YDQsNC00L3QuNGFINC90LDQu9C+0LPQsCDRm9C1INCx0LjRgtC4INCw0LTQtdC60LLQsNGC0L3QviDRg9GB0LrQu9Cw0ZLQtdC90LAnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgJXMlcy0lcyd9ID0gJ9CY0YHRgtC+0YDQuNGY0LDRgiDQt9CwICVzJXMtJXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclJlcG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBSZXBvcnQgb2YgJXMlcy0lcyd9ID0gJ9Cj0YDQtdC00Lgg0LjQt9Cy0LXRiNGC0LDRmCDQt9CwICVzJXMtJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0J30gPSAn0JjQt9Cy0LXRiNGC0LDRmCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWN0dWFsIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgdGltZSEnfSA9ICfQkNC60YLRg9C10LvQvdC+INCy0YDQtdC80LUg0L/QvtGH0LXRgtC60LAg0LzQvtGA0LAg0LHQuNGC0Lgg0L/RgNC1INCw0LrRgtGD0LXQu9C90L7QsyDQstGA0LXQvNC10L3QsCDQt9Cw0LLRgNGI0LXRgtC60LAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBhY3R1YWwgc3RhcnQgdGltZSBtdXN0IGJlIHNldCwgd2hlbiB0aGUgYWN0dWFsIGVuZCB0aW1lIGlzIHNldCEnfSA9CiAgICAgICAgJ9CQ0LrRgtGD0LXQu9C90L4g0LLRgNC10LzQtSDQv9C+0YfQtdGC0LrQsCDQvNC+0YDQsCDQsdC40YLQuCDQv9C+0LTQtdGI0LXQvdC+INC60LDQtNCwINGY0LUg0L/QvtC00LXRiNC10L3QviDQuCDQsNC60YLRg9C10LvQvdC+INCy0YDQtdC80LUg0LfQsNCy0YDRiNC10YLQutCwISc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGFrZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBBZ2VudCd9ID0gJ9CQ0LrRgtGD0LXQu9C90Lgg0L7Qv9C10YDQsNGC0LXRgCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gdGFrZSB0aGlzIHdvcmtvcmRlcj8nfSA9ICfQlNCwINC70Lgg0LfQsNC40YHRgtCwINC20LXQu9C40YLQtSDQtNCwINC/0YDQtdGD0LfQvNC10YLQtSDQvtCy0LDRmCDRgNCw0LTQvdC4INC90LDQu9C+0LM/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJUZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBXb3Jrb3JkZXIgYXMgVGVtcGxhdGUnfSA9ICfQodCw0YfRg9Cy0LDRmCDRgNCw0LTQvdC4INC90LDQu9C+0LMg0LrQsNC+INGI0LDQsdC70L7QvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgd29ya29yZGVyIChhbmQgc3Vycm91bmRpbmcgY2hhbmdlKSd9ID0gJ9Ce0LHRgNC40YjQuCDQvtGA0LjQs9C40L3QsNC70L3QuCDRgNCw0LTQvdC4INC90LDQu9C+0LMgKNC4INC/0YDQvtC80LXQvdGDINGDINC60L7RmNC+0Zgg0ZjQtSknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBJbmZvcm1hdGlvbid9ID0gJ9CY0L3RhNC+0YDQvNCw0YbQuNGY0LAg0L4g0YDQsNC00L3QvtC8INC90LDQu9C+0LPRgyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ2hhbmdlTm90aWZpY2F0aW9uLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmtub3duIG5vdGlmaWNhdGlvbiAlcyEnfSA9ICfQndC10L/QvtC30L3QsNGC0L4g0L7QsdCw0LLQtdGI0YLQtdGa0LUgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZXJlIHdhcyBhbiBlcnJvciBjcmVhdGluZyB0aGUgbm90aWZpY2F0aW9uLid9ID0gJ9CU0L7RiNC70L4g0ZjQtSDQtNC+INCz0YDQtdGI0LrQtSDQv9GA0LjQu9C40LrQvtC8INC60YDQtdC40YDQsNGa0LAg0L7QsdCw0LLQtdGI0YLQtdGa0LAuJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENoYW5nZXMnfSA9ICfQn9GA0LXQs9C70LXQtDog4oCeSVRTTeKAnSDQv9GA0L7QvNC10L3QtSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgd2l0aCBUaWNrZXRJRCAlcyBkb2VzIG5vdCBleGlzdCEnfSA9ICfQotC40LrQtdGCINGB0LAg0JjQlCDRgtC40LrQtdGC0LAgJXMg0L3QtSDQv9C+0YHRgtC+0ZjQuCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlzc2luZyBzeXNjb25maWcgb3B0aW9uICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiISd9ID0KICAgICAgICAn0J3QtdC00L7RgdGC0LDRmNC1INC+0L/RhtC40ZjQsCDRgdC40YHRgtC10LzRgdC60LUg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGY0LUg4oCeSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVz4oCdISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIGNoYW5nZSEnfSA9ICfQndC40ZjQtSDQsdC40LvQviDQvNC+0LPRg9Gb0LUg0LTQvtC00LDRgtC4INC/0YDQvtC80LXQvdGDISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSBmcm9tIHRlbXBsYXRlISd9ID0gJ9Cd0LjRmNC1INCx0LjQu9C+INC80L7Qs9GD0ZvQtSDQutGA0LXQuNGA0LDRgtC4INC/0YDQvtC80LXQvdGDINC40Lcg0YjQsNCx0LvQvtC90LAhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDQUJUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAn0J3QuNGY0LUg0LTQsNGCINCY0JQg0J/RgNC+0LzQtdC90LUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNoYW5nZSBmb3VuZCBmb3IgY2hhbmdlSUQgJXMuJ30gPSAn0J3QuNGY0LUg0L/RgNC+0L3QsNGS0LXQvdCwINC/0YDQvtC80LXQvdCwINC30LAg0JjQlCDQv9GA0L7QvNC10L3QtSAlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIENBQiBvZiBjaGFuZ2UgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICfQodCe0J8g0L/RgNC+0LzQtdC90LUgJXMg0YHQtSDQvdC1INC80L7QttC1INGB0LXRgNC40ZjQsNC70LjQt9C+0LLQsNGC0LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgdGhlIHRlbXBsYXRlLid9ID0gJ9Cd0LjRmNC1INC80L7Qs9GD0ZvQtSDQtNC+0LTQsNGC0Lgg0YjQsNCx0LvQvtC9Lic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAn0J/RgNC+0LzQtdC90LAg4oCeJXPigJ0g0L3QuNGY0LUg0L3QsNGS0LXQvdCwINGDINCx0LDQt9C4INC/0L7QtNCw0YLQsNC60LAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQ29uZGl0aW9uSUQgJXMhJ30gPSAn0J3QuNGY0LUg0LzQvtCz0YPRm9C1INC+0LHRgNC40YHQsNGC0Lgg0JjQlCDRg9GB0LvQvtCy0LAgJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyAlcyBpcyBnaXZlbiEnfSA9ICfQndC40ZjQtSDQtNCw0YIgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBjcmVhdGUgbmV3IGNvbmRpdGlvbiEnfSA9ICfQndC40ZjQtSDQvNC+0LPRg9Gb0LUg0LrRgNC10LjRgNCw0YLQuCDQvdC+0LLQuCDRg9GB0LvQvtCyISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIENvbmRpdGlvbklEICVzISd9ID0gJ9Cd0LjRmNC1INC80L7Qs9GD0ZvQtSDQsNC20YPRgNC40YDQsNGC0Lgg0YPRgdC70L7QsiDQmNCUICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICfQndC40ZjQtSDQvNC+0LPRg9Gb0LUg0LDQttGD0YDQuNGA0LDRgtC4INCY0JQg0LjQt9GA0LDQt9CwICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIG5ldyBFeHByZXNzaW9uISd9ID0gJ9Cd0LjRmNC1INC80L7Qs9GD0ZvQtSDQtNC+0LTQsNGC0Lgg0L3QvtCy0Lgg0JjQt9GA0LDQtyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBBY3Rpb25JRCAlcyEnfSA9ICfQndC40ZjQtSDQvNC+0LPRg9Gb0LUg0LDQttGD0YDQuNGA0LDRgtC4INCY0JQg0LDQutGG0LjRmNC1ICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIG5ldyBBY3Rpb24hJ30gPSAn0J3QuNGY0LUg0LzQvtCz0YPRm9C1INC00L7QtNCw0YLQuCDQvdC+0LLRgyDQkNC60YbQuNGY0YMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgRXhwcmVzc2lvbklEICVzISd9ID0gJ9Cd0LjRmNC1INC80L7Qs9GD0ZvQtSDQvtCx0YDQuNGB0LDRgtC4INCY0JQg0LjQt9GA0LDQt9CwICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIEFjdGlvbklEICVzISd9ID0gJ9Cd0LjRmNC1INC80L7Qs9GD0ZvQtSDQvtCx0YDQuNGB0LDRgtC4INCY0JQg0LDQutGG0LjRmNC1ICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcjogVW5rbm93biBmaWVsZCB0eXBlICIlcyIhJ30gPSAn0JPRgNC10YjQutCwOiDQndC10L/QvtC30L3QsNGCINGC0LjQvyDQv9C+0ZnQsCAiJXMiISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25JRCAlcyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIGdpdmVuIENoYW5nZUlEICVzISd9ID0gJ9CY0JQg0YPRgdC70L7QstCwICVzINC90LUg0L/RgNC40L/QsNC00LAg0LTQsNGC0L7QvCDQmNCUINC/0YDQvtC80LXQvdC1ICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBkb2VzIG5vdCBoYXZlIGFuIGFsbG93ZWQgY2hhbmdlIHN0YXRlIHRvIGJlIGRlbGV0ZWQhJ30gPQogICAgICAgICfQn9GA0L7QvNC10L3QsCDigJ4lc+KAnSDQvdC40ZjQtSDRgyDQtNC+0LfQstC+0ZnQtdC90L7QvCDRgdGC0LDRmtGDINC00LAg0LHQuCDQsdC40LvQsCDQvtCx0YDQuNGB0LDQvdCwISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjaGFuZ2VJRCAlcyEnfSA9ICfQndC40ZjQtSDQsdC40LvQviDQvNC+0LPRg9Gb0LUg0L7QsdGA0LjRgdCw0YLQuCDQmNCUINC/0YDQvtC80LXQvdC1ICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UhJ30gPSAn0J3QuNGY0LUg0LHQuNC70L4g0LzQvtCz0YPRm9C1INCw0LbRg9GA0LjRgNCw0YLQuCDQv9GA0L7QvNC10L3RgyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJ9Cd0LUg0LzQvtC20LUg0YHQtSDQv9GA0LjQutCw0LfQsNGC0Lgg0LjRgdGC0L7RgNC40ZjQsNGCLCDRmNC10YAg0L3QuNGY0LUg0LTQsNGCINCY0JQg0J/RgNC+0LzQtdC90LUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAn0J/RgNC+0LzQtdC90LAgIiVzIiDQvdC40ZjQtSDQvdCw0ZLQtdC90LAg0YMg0LHQsNC30Lgg0L/QvtC00LDRgtCw0LrQsCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biB0eXBlICIlcyIgZW5jb3VudGVyZWQhJ30gPSAn0J3QtdC/0L7Qt9C90LDRgiDRgtC40L8gIiVzIiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnknfSA9ICfQmNGB0YLQvtGA0LjRmNCw0YIg0L/RgNC+0LzQtdC90LUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5IHpvb20sIG5vIEhpc3RvcnlFbnRyeUlEIGlzIGdpdmVuISd9ID0gJ9Cd0LUg0LzQvtCz0YMg0YHQtSDQv9GA0LjQutCw0LfQsNGC0Lgg0LTQtdGC0LDRmdC4INC40YHRgtC+0YDQuNGY0LDRgtCwINGY0LXRgCDQvdC40ZjQtSDQtNCw0YIg0JjQlCDQmNGB0YLQvtGA0LjRmNCw0YLQsCDQv9GA0L7QvNC10L3QtSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeUVudHJ5ICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ9Ch0YLQsNCy0LrQsCDQuNGB0YLQvtGA0LjRmNCw0YLQsCDigJ4lc+KAnSDQvdC40ZjQtSDQvdCw0ZLQtdC90LAg0YMg0LHQsNC30Lgg0L/QvtC00LDRgtCw0LrQsCEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29ucy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UgQ0FCIGZvciBDaGFuZ2UgJXMhJ30gPSAn0J3QuNGY0LUg0LHQuNC70L4g0LzQvtCz0YPRm9C1INCw0LbRg9GA0LjRgNCw0YLQuCDQodCe0J8g0L/RgNC+0LzQtdC9INC30LAg0L/RgNC+0LzQtdC90YMgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlICVzISd9ID0gJ9Cd0LjRmNC1INCx0LjQu9C+INC80L7Qs9GD0ZvQtSDQsNC20YPRgNC40YDQsNGC0Lgg0L/RgNC+0LzQtdC90YMgJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNYW5hZ2VyLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogQ2hhbmdlTWFuYWdlcid9ID0gJ9Cf0YDQtdCz0LvQtdC0OiDQo9C/0YDQsNCy0ZnQsNGHINC/0YDQvtC80LXQvdCw0LzQsCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBDQUInfSA9ICfQn9GA0LXQs9C70LXQtDog0JzQvtGYINCh0J7Qnyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgQ2hhbmdlcyd9ID0gJ9Cf0YDQtdCz0LvQtdC0OiDQnNC+0ZjQtSDQv9GA0L7QvNC10L3QtSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgV29ya29yZGVycyd9ID0gJ9Cf0YDQtdCz0LvQtdC0OiDQnNC+0ZjQuCDRgNCw0LTQvdC4INC90LDQu9C+0LfQuCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUElSLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUElSJ30gPSAn0J/RgNC10LPQu9C10LQ6INCg0J/QoSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUFNBLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUFNBJ30gPSAn0J/RgNC10LPQu9C10LQ6INCf0JTQoSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUHJpbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICfQoNCw0LTQvdC4INC90LDQu9C+0LMgIiVzIiDQvdC40ZjQtSDQvdCw0ZLQtdC9INGDINCx0LDQt9C4INC/0L7QtNCw0YLQsNC60LAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBjcmVhdGUgb3V0cHV0LCBhcyB0aGUgd29ya29yZGVyIGlzIG5vdCBhdHRhY2hlZCB0byBhIGNoYW5nZSEnfSA9CiAgICAgICAgJ9Cd0LUg0LzQvtC20LUg0YHQtSDQutGA0LjRgNCw0YLQuCDQuNC30LvQsNC3INGY0LXRgCDRgNCw0LTQvdC4INC90LDQu9C+0LMg0L3QuNGY0LUg0L/RgNC40LTQvtC00LDRgiDQv9GA0L7QvNC10L3QuCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGNyZWF0ZSBvdXRwdXQsIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJ9Cd0LUg0LzQvtC20LUg0YHQtSDQutGA0LjRgNCw0YLQuCDQuNC30LvQsNC3INGY0LXRgCDQvdC40ZjQtSDQtNCw0YIg0JjQlCDQn9GA0L7QvNC10L3QtSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndW5rbm93biBjaGFuZ2UgdGl0bGUnfSA9ICfQvdC10L/QvtC30L3QsNGCINC90LDRgdC70L7QsiDQv9GA0L7QvNC10L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlcid9ID0gJ+KAnklUU03igJ0g0YDQsNC00L3QuCDQvdCw0LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gd29ya29yZGVyIHRpdGxlJ30gPSAn0L3QtdC/0L7Qt9C90LDRgiDQvdCw0YHQu9C+0LIg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBPdmVydmlldyAoJXMpJ30gPSAn0J/RgNC10LPQu9C10LQg4oCeSVRTTeKAnSDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwICglcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZFN0YXJ0VGltZSd9ID0gJ9Cf0LvQsNC90LjRgNCw0L3QviDQstGA0LXQvNC1INC/0L7Rh9C10YLQutCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWRFbmRUaW1lJ30gPSAn0J/Qu9Cw0L3QuNGA0LDQvdC+INCy0YDQtdC80LUg0LfQsNCy0YDRiNC10YLQutCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbFN0YXJ0VGltZSd9ID0gJ9Ch0YLQstCw0YDQvdC+INCy0YDQtdC80LUg0L/QvtGH0LXRgtC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsRW5kVGltZSd9ID0gJ9Ch0YLQstCw0YDQvdC+INCy0YDQtdC80LUg0LfQsNCy0YDRiNC10YLQutCwJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VSZXNldC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHJlc2V0IFdvcmtPcmRlciAlcyBvZiBDaGFuZ2UgJXMhJ30gPSAn0J3QuNGY0LUg0LHQuNC70L4g0LzQvtCz0YPRm9C1INC/0L7QvdC40YjRgtC40YLQuCDRgNCw0LTQvdC4INC90LDQu9C+0LMgJXMg0LfQsCDQv9GA0L7QvNC10L3RgyAlcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHJlc2V0IENoYW5nZSAlcyEnfSA9ICfQndC40ZjQtSDQsdC40LvQviDQvNC+0LPRg9Gb0LUg0L/QvtC90LjRiNGC0LjRgtC4INC/0YDQvtC80LXQvdGDICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlU2NoZWR1bGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2UgU2NoZWR1bGUnfSA9ICfQn9GA0LXQs9C70LXQtDog0J/Qu9Cw0L3QtdGAINC/0YDQvtC80LXQvdCwJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VTZWFyY2gucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTZWFyY2gnfSA9ICfQn9GA0LXRgtGA0LDQs9CwINC/0YDQvtC80LXQvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZVRpdGxlJ30gPSAn0J/RgNC+0LzQtdC90LAgLSDQvdCw0YHQu9C+0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVycyd9ID0gJ9Cg0LDQtNC90Lgg0L3QsNC70L7Qt9C4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZVN0YXRlJ30gPSAn0J/RgNC+0LzQtdC90LAgLSDRgdGC0LDRgtGD0YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCBSZXN1bHQnfSA9ICfQoNC10LfRg9C70YLQsNGCINC/0YDQtdGC0YDQsNCz0LUg0L/RgNC+0LzQtdC90LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE51bWJlcid9ID0gJ9CR0YDQvtGYINC/0YDQvtC80LXQvdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmsgT3JkZXIgVGl0bGUnfSA9ICfQndCw0YHQu9C+0LIg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVzY3JpcHRpb24nfSA9ICfQntC/0LjRgSDQv9GA0L7QvNC10L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSnVzdGlmaWNhdGlvbid9ID0gJ9Ce0L/RgNCw0LLQtNCw0L3QvtGB0YIg0L/RgNC+0LzQtdC90LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEluc3RydWN0aW9uJ30gPSAn0KPQv9GD0YLRgdCy0L4g0LfQsCDRgNCw0LTQvdC4INC90LDQu9C+0LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFJlcG9ydCd9ID0gJ9CY0LfQstC10YjRgtCw0Zgg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpb3JpdHknfSA9ICfQn9GA0LjQvtGA0LjRgtC10YIg0L/RgNC+0LzQtdC90LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEltcGFjdCd9ID0gJ9Cj0YLQuNGG0LDRmCDQv9GA0L7QvNC10L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAn0JrRgNC10LjRgNCw0L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFN0YXRlJ30gPSAn0KHRgtCw0ZrQtSDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBUeXBlJ30gPSAn0KLQuNC/INGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEFnZW50J30gPSAn0J7Qv9C10YDQsNGC0LXRgCDQt9CwINGA0LDQtNC90Lgg0L3QsNC70L7Qsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiZWZvcmUnfSA9ICfQv9GA0LUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAn0J/RgNC+0LzQtdC90LAgJXMg0YHQtSDQvdC1INC80L7QttC1INGB0LXRgNC40ZjQsNC70LjQt9C+0LLQsNGC0LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgdGhlIHRlbXBsYXRlICIlcyIuJ30gPSAn0J3QuNGY0LUg0LzQvtCz0YPRm9C1INCw0LbRg9GA0LjRgNCw0YLQuCDRiNCw0LHQu9C+0L0gIiVzIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBjaGFuZ2UgIiVzIi4nfSA9ICfQndC40ZjQtSDQvNC+0LPRg9Gb0LUg0L7QsdGA0LjRgdCw0YLQuCDQv9GA0L7QvNC10L3RgyAiJXMiLic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjaGFuZ2UgY2FuXCd0IGJlIG1vdmVkLCBhcyBpdCBoYXMgbm8gd29ya29yZGVycy4nfSA9ICfQn9GA0L7QvNC10L3QsCDRgdC1INC90LUg0LzQvtC20LUg0L/QvtC80LXRgNC40YLQuCDRmNC10YAg0L3QtdC80LAg0YDQsNC00L3QtSDQvdCw0LvQvtCz0LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciBmaXJzdC4nfSA9ICfQn9GA0LLQviDQtNC+0LTQsNGYINGA0LDQtNC90Lgg0L3QsNC70L7Qsy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IG1vdmUgYSBjaGFuZ2Ugd2hpY2ggYWxyZWFkeSBoYXMgc3RhcnRlZCEnfSA9ICfQn9GA0L7QvNC10L3QsCDQutC+0ZjQsCDRmNC1INCy0LXRmyDQv9C+0LrRgNC10L3Rg9GC0LAg0YHQtSDQvdC1INC80L7QttC1INC/0L7QvNC10YDQsNGC0LghJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBtb3ZlIHRoZSBpbmRpdmlkdWFsIHdvcmtvcmRlcnMgaW5zdGVhZC4nfSA9ICfQnNC+0LvQuNC80L4g0LTQsCDRg9C80LXRgdGC0L4g0YLQvtCz0LAg0L/QvtC80LXRgNC40YLQtSDQv9C+0ZjQtdC00LjQvdC1INGA0LDQtNC90LUg0L3QsNC70L7Qs9C1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY3VycmVudCAlcyBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4nfSA9ICfQkNC60YLRg9C10LvQvdCwICVzINGB0LUg0L3QtSDQvNC+0LbQtSDQvtC00YDQtdC00LjRgtC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgJXMgb2YgYWxsIHdvcmtvcmRlcnMgaGFzIHRvIGJlIGRlZmluZWQuJ30gPSAnJXMg0YHQstC40YUg0YDQsNC00L3QuNGFINC90LDQu9C+0LPQsCDRgtGA0LXQsdCwINC00LAg0LHRg9C00LUg0LTQtdGE0LjQvdC40YHQsNC9Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gbW92ZSB0aW1lIHNsb3QgZm9yIHdvcmtvcmRlciAjJXMhJ30gPSAn0J3QuNGY0LUg0LHQuNC70L4g0LzQvtCz0YPRm9C1INC/0YDQtdC80LXRgdGC0LjRgtC4INGC0LXRgNC80LjQvSDQt9CwINGA0LDQtNC90Lgg0L3QsNC70L7QsyAjJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgJXMgcGVybWlzc2lvbiEnfSA9ICfQn9C+0YLRgNC10LHQvdCwINCy0LDQvCDRmNC1ICVzINC00L7Qt9Cy0L7Qu9CwISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBUZW1wbGF0ZUlEIGlzIGdpdmVuISd9ID0gJ9Cd0LjRmNC1INC00LDRgiDQmNCUINCo0LDQsdC70L7QvdCwISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICfQqNCw0LHQu9C+0L0gIiVzIiDQvdC40ZjQtSDQvdCw0ZLQtdC9INGDINCx0LDQt9C4INC/0L7QtNCw0YLQsNC60LAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHRlbXBsYXRlICVzISd9ID0gJ9Cd0LjRmNC1INCx0LjQu9C+INC80L7Qs9GD0ZvQtSDQvtCx0YDQuNGB0LDRgtC4INGI0LDQsdC70L7QvSAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBUZW1wbGF0ZSAlcyEnfSA9ICfQndC40ZjQtSDQsdC40LvQviDQvNC+0LPRg9Gb0LUg0LDQttGD0YDQuNGA0LDRgtC4INGI0LDQsdC70L7QvSAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdENBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBUZW1wbGF0ZSAiJXMiISd9ID0gJ9Cd0LjRmNC1INCx0LjQu9C+INC80L7Qs9GD0ZvQtSDQsNC20YPRgNC40YDQsNGC0Lgg0YjQsNCx0LvQvtC9ICIlcyIhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSEnfSA9ICfQndC40ZjQtSDQsdC40LvQviDQvNC+0LPRg9Gb0LUg0LrRgNC10LjRgNCw0YLQuCDQv9GA0L7QvNC10L3RgyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSB3b3Jrb3JkZXIgZnJvbSB0ZW1wbGF0ZSEnfSA9ICfQndC40ZjQtSDQsdC40LvQviDQvNC+0LPRg9Gb0LUg0LrRgNC10LjRgNCw0YLQuCDRgNCw0LTQvdC4INC90LDQu9C+0LMg0LjQtyDQv9GA0L7QvNC10L3QtSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBUZW1wbGF0ZSd9ID0gJ9Cf0YDQtdCz0LvQtdC0OiDQqNCw0LHQu9C+0L0nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFkZC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMgb24gdGhlIGNoYW5nZSEnfSA9ICfQn9C+0YLRgNC10LHQvdC1INGB0YMg0LLQsNC8ICVzINC00L7Qt9Cy0L7Qu9C1INC30LAg0L/RgNC+0LzQtdC90YMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBhZGQgd29ya29yZGVyISd9ID0gJ9Cd0LjRmNC1INCx0LjQu9C+INC80L7Qs9GD0ZvQtSDQtNC+0LTQsNGC0Lgg0YDQsNC00L3QuCDQvdCw0LvQvtCzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWdlbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFdvcmtPcmRlcklEIGlzIGdpdmVuISd9ID0gJ9Cd0LjRmNC1INC00LDRgiDQmNCUINCg0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBzZXQgdGhlIHdvcmtvcmRlciBhZ2VudCBvZiB0aGUgd29ya29yZGVyICIlcyIgdG8gZW1wdHkhJ30gPQogICAgICAgICfQndC40ZjQtSDQsdC40LvQviDQvNC+0LPRg9Gb0LUg0L/QvtC00LXRgdC40YLQuCDRgNCw0LTQvdC4INC90LDQu9C+0LMgIiVzIiDQsdC10Lcg0L7Qv9C10YDQsNGC0LXRgNCwISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIHRoZSB3b3Jrb3JkZXIgIiVzIiEnfSA9ICfQndC40ZjQtSDQsdC40LvQviDQvNC+0LPRg9Gb0LUg0LDQttGD0YDQuNGA0LDRgtC4INGA0LDQtNC90Lgg0L3QsNC70L7QsyAiJXMiISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZmluZCBDaGFuZ2UgZm9yIFdvcmtPcmRlciAlcyEnfSA9ICfQndC40ZjQtSDQvNC+0LPRg9Gb0LUg0L/RgNC+0L3QsNGb0Lgg0L/RgNC+0LzQtdC90YMg0LfQsCDRgNCw0LTQvdC4INC90LDQu9C+0LMgJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHdvcmtvcmRlciAlcyEnfSA9ICfQndC40ZjQtSDQsdC40LvQviDQvNC+0LPRg9Gb0LUg0L7QsdGA0LjRgdCw0YLQuCDRgNCw0LTQvdC4INC90LDQu9C+0LMgJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFdvcmtPcmRlciAlcyEnfSA9ICfQndC40ZjQtSDQsdC40LvQviDQvNC+0LPRg9Gb0LUg0LDQttGD0YDQuNGA0LDRgtC4INGA0LDQtNC90Lgg0L3QsNC70L7QsyAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIGFzIG5vIFdvcmtPcmRlcklEIGlzIGdpdmVuISd9ID0gJ9Cd0LUg0LzQvtC20LUg0YHQtSDQv9GA0LjQutCw0LfQsNGC0Lgg0LjRgdGC0L7RgNC40ZjQsNGCINGY0LXRgCDQvdC40ZjQtSDQtNCw0YIg0JjQlCDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJ9Cg0LDQtNC90Lgg0L3QsNC70L7QsyAiJXMiINC90LjRmNC1INC90LDRktC10L0g0YMg0LHQsNC30Lgg0L/QvtC00LDRgtCw0LrQsCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6J30gPSAnV29ya09yZGVySGlzdG9yeTo6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5J30gPSAn0JjRgdGC0L7RgNC40ZjQsNGCINGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IGVudHJ5ICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICfQodGC0LDQstC60LAg0LjRgdGC0L7RgNC40ZjQsNGC0LAgIiVzIiDQvdC40ZjQtSDQvdCw0ZLQtdC90LAg0YMg0LHQsNC30Lgg0L/QvtC00LDRgtCw0LrQsCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEhpc3RvcnkgWm9vbSd9ID0gJ9CU0LXRgtCw0ZnQuCDQuNGB0YLQvtGA0LjRmNCw0YLQsCDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUYWtlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdGFrZSB0aGUgd29ya29yZGVyICVzISd9ID0gJ9Cd0LjRmNC1INCx0LjQu9C+INC80L7Qs9GD0ZvQtSDQv9GA0LXRg9C30LXRgtC4INGA0LDQtNC90Lgg0L3QsNC70L7QsyAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgd29ya29yZGVyICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAn0KDQsNC00L3QuCDQvdCw0LvQvtCzIOKAniVz4oCdINGB0LUg0L3QtSDQvNC+0LbQtSDRgdC10YDQuNGY0LDQu9C40LfQvtCy0LDRgtC4Lic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9JVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIGNvbmZpZyBvcHRpb24gJXMhJ30gPSAn0J/QvtGC0YDQtdCx0L3QsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdCwINC+0L/RhtC40ZjQsCAlcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlnIG9wdGlvbiAlcyBuZWVkcyB0byBiZSBhIEhBU0ggcmVmISd9ID0gJ9Ca0L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LAg0L7Qv9GG0LjRmNCwICVzINC80L7RgNCwINCx0LjRgtC4IOKAnUhBU0giINGA0LXRhNC10YDQtdC90YbQsCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY29uZmlnIG9wdGlvbiBmb3VuZCBmb3IgdGhlIHZpZXcgIiVzIiEnfSA9ICfQndC40ZjQtSDQv9GA0L7QvdCw0ZLQtdC90LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QsCDRgdGC0LDQstC60LAg0LfQsCDQv9GA0LXQs9C70LXQtCAiJXMiISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaXRsZTogJXMgfCBUeXBlOiAlcyd9ID0gJ9Cd0LDRgdC70L7QsjogJXMgfCDQotC40L86ICVzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgQ0FCcyd9ID0gJ9Cc0L7RmNC4INCh0J7Qnyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBDaGFuZ2VzJ30gPSAn0JzQvtGY0LUg0L/RgNC+0LzQtdC90LUnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015V29ya09yZGVycy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgV29yayBPcmRlcnMnfSA9ICfQnNC+0ZjQuCDRgNCw0LTQvdC4INC90LDQu9C+0LfQuCc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNoYW5nZU1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVxdWVzdGVkJ30gPSAn0LfQsNGF0YLQtdCy0LDQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3BlbmRpbmcgYXBwcm92YWwnfSA9ICfQvtC00L7QsdGA0LXRmtC1INC90LAg0YfQtdC60LDRmtGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlamVjdGVkJ30gPSAn0L7QtNCx0LjRmNC10L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZlZCd9ID0gJ9C+0LTQvtCx0YDQtdC90L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW4gcHJvZ3Jlc3MnfSA9ICfRgyDRgtC+0LrRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIHBpcid9ID0gJ9GA0L/RgSDQvdCwINGH0LXQutCw0ZrRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzdWNjZXNzZnVsJ30gPSAn0YPRgdC/0LXRiNC90L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZmFpbGVkJ30gPSAn0L3QtdGD0YHQv9C10YjQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NhbmNlbGVkJ30gPSAn0L7RgtC60LDQt9Cw0L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZXRyYWN0ZWQnfSA9ICfQv9C+0LLRg9GH0LXQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NyZWF0ZWQnfSA9ICfQutGA0LXQuNGA0LDQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FjY2VwdGVkJ30gPSAn0L/RgNC40YXQstCw0ZvQtdC90L4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVhZHknfSA9ICfRgdC/0YDQtdC80L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZhbCd9ID0gJ9C+0LTQvtCx0YDQtdGa0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd29ya29yZGVyJ30gPSAn0YDQsNC00L3QuCDQvdCw0LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JhY2tvdXQnfSA9ICfQvtC00YPRgdGC0LDQvdCw0LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZGVjaXNpb24nfSA9ICfQvtC00LvRg9C60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGlyJ30gPSAn0YDQv9GBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzJ30gPSAn0ZjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBub3QnfSA9ICfQvdC40ZjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBlbXB0eSd9ID0gJ9GY0LUg0L/RgNCw0LfQvdC+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCBlbXB0eSd9ID0gJ9C90LjRmNC1INC/0YDQsNC30L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBncmVhdGVyIHRoYW4nfSA9ICfRmNC1INCy0LXRm9C1INC+0LQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbGVzcyB0aGFuJ30gPSAn0ZjQtSDQvNCw0ZrQtSDQvtC0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGJlZm9yZSd9ID0gJ9GY0LUg0L/RgNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGFmdGVyJ30gPSAn0ZjQtSDQv9C+0YHQu9C1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NvbnRhaW5zJ30gPSAn0YHQsNC00YDQttC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBjb250YWlucyd9ID0gJ9C90LUg0YHQsNC00YDQttC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZ2lucyB3aXRoJ30gPSAn0L/QvtGH0LjRmtC1INGB0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZW5kcyB3aXRoJ30gPSAn0LfQsNCy0YDRiNCw0LLQsCDRgdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3NldCd9ID0gJ9C/0L7QtNC10YHQuCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbGlzdCBvZiB0aGUgYWdlbnRzIHdobyBoYXZlIHBlcm1pc3Npb24gdG8gdGFrZSB3b3Jrb3JkZXJzLiBLZXkgaXMgYSBsb2dpbiBuYW1lLiBDb250ZW50IGlzIDAgb3IgMS4nfSA9CiAgICAgICAgJ9Cb0LjRgdGC0LAg0L7Qv9C10YDQsNGC0LXRgNCwINC60L7RmNC4INC40LzQsNGY0YMg0LTQvtC30LLQvtC70YMg0L/RgNC10YPQt9C40LzQsNGa0LAg0YDQsNC00L3QuNGFINC90LDQu9C+0LPQsC4g0JrRmdGD0Ycg0ZjQtSDQutC+0YDQuNGB0L3QuNGH0LrQviDQuNC80LUuINCh0LDQtNGA0LbQsNGYINGY0LUgMCDQuNC70LggMS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBsaXN0IG9mIHdvcmtvcmRlciBzdGF0ZXMsIGF0IHdoaWNoIHRoZSBBY3R1YWxTdGFydFRpbWUgb2YgYSB3b3Jrb3JkZXIgd2lsbCBiZSBzZXQgaWYgaXQgd2FzIGVtcHR5IGF0IHRoaXMgcG9pbnQuJ30gPQogICAgICAgICfQm9C40YHRgtCwINGB0YLQsNGC0YPRgdCwINGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAsINC/0YDQuCDQutC+0ZjQuNC80LAg0ZvQtSDQsNC60YLRg9C10LvQvdC+INCy0YDQtdC80LUg0L/QvtGH0LXRgtC60LAg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCwg0LHQuNGC0Lgg0L/QvtGB0YLQsNCy0ZnQtdC90L4g0LDQutC+INGY0LUg0L/RgNCw0LfQvdC+INGDINC+0LLQvtC8INC80L7QvNC10L3RgtGDLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlcid9ID0gJ9CU0L7QtNCw0Zgg0YDQsNC00L3QuCDQvdCw0LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgKGZyb20gVGVtcGxhdGUpJ30gPSAn0JTQvtC00LDRmCDRgNCw0LTQvdC4INC90LDQu9C+0LMgKNC+0LQg0YjQsNCx0LvQvtC90LApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIGNoYW5nZSBmcm9tIHRlbXBsYXRlLid9ID0gJ9CU0L7QtNCw0Zgg0L/RgNC+0LzQtdC90YMg0LjQtyDRiNCw0LHQu9C+0L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgY2hhbmdlLid9ID0gJ9CU0L7QtNCw0Zgg0L/RgNC+0LzQtdC90YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciAoZnJvbSB0ZW1wbGF0ZSkgdG8gdGhlIGNoYW5nZS4nfSA9ICfQlNC+0LTQsNGYINGA0LDQtNC90Lgg0L3QsNC70L7QsyDQv9GA0L7QvNC10L3QuCAo0L7QtCDRiNCw0LHQu9C+0L3QsCkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciB0byB0aGUgY2hhbmdlLid9ID0gJ9CU0L7QtNCw0Zgg0YDQsNC00L3QuCDQvdCw0LvQvtCzINC/0YDQvtC80LXQvdC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgZnJvbSB0ZW1wbGF0ZSd9ID0gJ9CU0L7QtNCw0Zgg0LjQtyDRiNCw0LHQu9C+0L3QsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgQ0lQIG1hdHJpeC4nfSA9ICfQkNC00LzQuNC90LjRgdGC0YDQsNGG0LjRmNCwIENJUCDQvNCw0YLRgNC40YbQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gb2YgdGhlIHN0YXRlIG1hY2hpbmUuJ30gPSAn0JDQtNC80LjQvdC40YHRgtGA0LDRhtC40ZjQsCDQvNCw0YjQuNC90LUg0YHRgtCw0ZrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2UgYWR2aXNvcnkgYm9hcmRzLid9ID0KICAgICAgICAn0JzQvtC00YPQuyDQuNC90YLQtdGA0YTQtdGY0YHQsCDQvtC/0LXRgNCw0YLQtdGA0LAg0LfQsCDQvtCx0LDQstC10YjRgtCw0LLQsNGa0LUsINC/0YDQtdCz0LvQtdC0INCx0YDQvtGY0LAg0KHQsNCy0LXRgtC+0LTQsNCy0L3QuNGFINCe0LTQsdC+0YDQsCDQt9CwINCf0YDQvtC80LXQvdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzIG1hbmFnZWQgYnkgdGhlIHVzZXIuJ30gPQogICAgICAgICfQnNC+0LTRg9C7INC40L3RgtC10YDRhNC10ZjRgdCwINC+0L/QtdGA0LDRgtC10YDQsCDQt9CwINC+0LHQsNCy0LXRiNGC0LDQstCw0ZrQtSwg0L/RgNC10LPQu9C10LQg0LHRgNC+0ZjQsCDQv9GA0L7QvNC10L3QsCDQutC+0ZjQuNC80LAg0YPQv9GA0LDQstGZ0LAg0LrQvtGA0LjRgdC90LjQui4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlcy4nfSA9CiAgICAgICAgJ9Cc0L7QtNGD0Lsg0LjQvdGC0LXRgNGE0LXRmNGB0LAg0L7Qv9C10YDQsNGC0LXRgNCwINC30LAg0L7QsdCw0LLQtdGI0YLQsNCy0LDRmtC1LCDQv9GA0LXQs9C70LXQtCDQsdGA0L7RmNCwINC/0YDQvtC80LXQvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAn0JzQvtC00YPQuyDQvtCx0LDQstC10YjRgtCw0LLQsNGa0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwINC30LAg0L/RgNC40LrQsNC3INCx0YDQvtGY0LAg0YDQsNC00L3QuNGFINC90LDQu9C+0LPQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIE1lbWJlciBTZWFyY2gnfSA9ICfQn9GA0LXRgtGA0LDQs9CwINGH0LvQsNC90L7QstCwINCh0J7Qnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudCB0b29sYmFycy4gRGVmYXVsdDogMyBob3VycyAoMTgwIG1pbnV0ZXMpLid9ID0KICAgICAgICAn0JLRgNC10LzQtSDQutC10YjQuNGA0LDRmtCwINGDINC80LjQvdGD0YLQsNC80LAg0LfQsCDQsNC70LDRgtC90LUg0YLRgNCw0LrQtSDRg9C/0YDQsNCy0ZnQsNGH0LAg0L/RgNC+0LzQtdC90LDQvNCwLiDQn9C+0LTRgNCw0LfRg9C80LXQstCw0L3QviAzINGB0LDRgtCwICgxODAg0LzQuNC90YPRgtCwKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgY2hhbmdlIG1hbmFnZW1lbnQuIERlZmF1bHQ6IDUgZGF5cyAoNzIwMCBtaW51dGVzKS4nfSA9CiAgICAgICAgJ9CS0YDQtdC80LUg0LrQtdGI0LjRgNCw0ZrQsCDRgyDQvNC40L3Rg9GC0LjQvNCwINC30LAg0YPQv9GA0LDQstGZ0LDRmtC1INC/0YDQvtC80LXQvdCw0LzQsC4g0J/QvtC00YDQsNC30YPQvNC10LLQsNC90L46IDUg0LTQsNC90LAgKDcyMDAg0LzQuNC90YPRgtCwKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIENBQiBUZW1wbGF0ZXMnfSA9ICfQqNCw0LHQu9C+0L3QuCDQv9GA0L7QvNC10L3QsCDQodCe0J8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnkuJ30gPSAn0JjRgdGC0L7RgNC40ZjQsNGCINC/0YDQvtC80LXQvdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW52b2x2ZWQgUGVyc29ucy4nfSA9ICfQntGB0L7QsdC1INGD0LrRmdGD0YfQtdC90LUg0YMg0L/RgNC+0LzQtdC90YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAn0J7Qs9GA0LDQvdC40YfQtdGa0LUg0L/RgNC10LPQu9C10LTQsCDQv9GA0L7QvNC10L3QsCAtICLQvNCw0LvQviInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE92ZXJ2aWV3Lid9ID0gJ9Cf0YDQtdCz0LvQtdC0INC/0YDQvtC80LXQvdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpbnQuJ30gPSAn0KjRgtCw0LzQv9CwINC/0YDQvtC80LXQvdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2NoZWR1bGUnfSA9ICfQn9C70LDQvdC10YAg0L/RgNC+0LzQtdC90LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNjaGVkdWxlLid9ID0gJ9Cf0LvQsNC90LXRgCDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20uJ30gPSAn0JTQtdGC0LDRmdC4INC/0YDQvtC80LXQvdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIFdvcmtvcmRlciBUZW1wbGF0ZXMnfSA9ICfQmNC30LzQtdC90Lgg0YjQsNCx0LvQvtC90LUg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIHdvcmtvcmRlciB0ZW1wbGF0ZXMgZWRpdGVkIGJ5IHRoaXMgdXNlci4nfSA9ICfQqNCw0LHQu9C+0L3QuCDQv9GA0L7QvNC10L3QsCDQuCDRgNCw0LTQvdC40YUg0L3QsNC70L7Qs9CwINC60L7RmNC1INGY0LUg0LzQtdGa0LDQviDQvtCy0LDRmCDQutC+0YDQuNGB0L3QuNC6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYXJlYS4nfSA9ICfQn9GA0L7RgdGC0L7RgCDQv9GA0L7QvNC10L3QtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGludm9sdmVkIHBlcnNvbnMgb2YgdGhlIGNoYW5nZS4nfSA9ICfQmNC30LzQtdC90Lgg0L7RgdC+0LHQtSDRg9C60ZnRg9GH0LXQvdC1INGDINC+0LLRgyDQv9GA0L7QvNC10L3Rgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGxpbWl0IHBlciBwYWdlIGZvciBDaGFuZ2UgT3ZlcnZpZXcgIlNtYWxsIi4nfSA9ICfQntCz0YDQsNC90LjRh9C10ZrQtSDQsdGA0L7RmNCwINC/0YDQvtC80LXQvdCwINC/0L4g0YHRgtGA0LDQvdC40YbQuCDQt9CwINC/0YDQtdCz0LvQtdC0IC0gItC80LDQu9C+Ii4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ9Cf0L7Qt9Cw0LTQuNC90YHQutC4INC80L7QtNGD0Lsg0L/RgNC10YLRgNCw0LPQtSDQt9CwINC/0YDQvtC80LXQvdC1INGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb24gRWRpdCd9ID0gJ9Cj0YDQtdC00Lgg0YPRgdC70L7Qsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb24gT3ZlcnZpZXcnfSA9ICfQn9GA0LXQs9C70LXQtCDRg9GB0LvQvtCy0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlIHdoaWNoIHNjcmVlbiBzaG91bGQgYmUgc2hvd24gYWZ0ZXIgYSBuZXcgd29ya29yZGVyIGhhcyBiZWVuIGNyZWF0ZWQuJ30gPQogICAgICAgICfQmtC+0L3RhNC40LPRg9GA0LjRiNC1INC60L7RmNC4INC10LrRgNCw0L0g0LHQuCDRgtGA0LXQsdCw0LvQviDQv9GA0LjQutCw0LfQsNGC0Lgg0L3QsNC60L7QvSDQutGA0LXQuNGA0LDRmtCwINC90L7QstC+0LMg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlcyBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgd2hlbiBwbGFubmVkIHRoZSBzdGFydCB0aW1lIG9yIG90aGVyIHRpbWUgdmFsdWVzIGhhdmUgYmVlbiByZWFjaGVkL3Bhc3NlZC4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0LrQvtC70LjQutC+INGH0LXRgdGC0L4g0YHQtSDRiNCw0ZnRgyDQvtCx0LDQstC10YjRgtC10ZrQsCDQutCw0LTQsCDRgdGDINC/0LvQsNC90LjRgNCw0L3QsCDQstGA0LXQvNC10L3QsCDQv9C+0YfQtdGC0LrQsCDQuNC70Lgg0LTRgNGD0LPQtSDQstGA0LXQvNC10L3RgdC60LUg0LLRgNC10LTQvdC+0YHRgtC4INC00L7RgdGC0LjQs9C90YPRgtCwL9C/0YDQvtGI0LvQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSd9ID0gJ9Cd0LDQv9GA0LDQstC4INC/0YDQvtC80LXQvdGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBDaGFuZ2UgKGZyb20gVGVtcGxhdGUpJ30gPSAn0J3QsNC/0YDQsNCy0Lgg0L/RgNC+0LzQtdC90YMgKNC+0LQg0YjQsNCx0LvQvtC90LApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIGNoYW5nZSAoZnJvbSB0ZW1wbGF0ZSkgZnJvbSB0aGlzIHRpY2tldC4nfSA9ICfQndCw0L/RgNCw0LLQuCDQv9GA0L7QvNC10L3RgyAo0L7QtCDRiNCw0LHQu9C+0L3QsCkg0LjQtyDQvtCy0L7QsyDRgtC40LrQtdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIGNoYW5nZSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJ9Cd0LDQv9GA0LDQstC4INC/0YDQvtC80LXQvdGDINC40Lcg0L7QstC+0LMg0YLQuNC60LXRgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBJVFNNIENoYW5nZSBNYW5hZ2VtZW50IG5vdGlmaWNhdGlvbnMuJ30gPSAn0JrRgNC10LjRgNCw0ZrQtSDQuCDRg9C/0YDQsNCy0ZnQsNGa0LUg0L7QsdCw0LLQtdGI0YLQtdGa0LjQvNCwIOKAnklUU03igJ0g0KPQv9GA0LDQstGZ0LDRh9CwINC/0YDQvtC80LXQvdCw0LzQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB0eXBlIGZvciBhIHdvcmtvcmRlci4gVGhpcyBlbnRyeSBtdXN0IGV4aXN0IGluIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBcJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6VHlwZVwnLid9ID0KICAgICAgICAn0J/QvtC00YDQsNC30YPQvNC10LLQtdC90Lgg0YLQuNC/INGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAuINCe0LLQsNGYINGD0L3QvtGBINC80L7RgNCwINC00LAg0L/QvtGB0YLQvtGY0Lgg0YMg0LrQu9Cw0YHQuCDQvtC/0YjRgtC10LMg0LrQsNGC0LDQu9C+0LPQsCDigJ5JVFNNOjrQo9C/0YDQsNCy0ZnQsNGa0LUg0L/RgNC+0LzQtdC90LDQvNCwOjrRgNCw0LTQvdC4INC90LDQu9C+0LM6OtCi0LjQv+KAnS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0JDQutGG0LjRmNC1INCz0LTQtSDRmNC1INC00YPQs9C80LUg0L/QvtGB0YLQsNCy0LrQuCDQtNC+0YHRgtGD0L/QvdC+INGDINC/0L7QstC10LfQsNC90L7QvCDQs9GA0LDRhNC40YfQutC+0Lwg0LXQu9C10LzQtdC90YLRgyDQvtCx0ZjQtdC60YLQsCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiDQnNC+0LvQuNC80L4g0LTQsCDQuNC80LDRgtC1INC90LAg0YPQvNGDINC00LAg0L7QstC1INCQ0LrRhtC40ZjQtSDQvNC+0YDQsNGY0YMg0LTQsCDQsdGD0LTRgyDRgNC10LPQuNGB0YLRgNC+0LLQsNC90LUg0YMg0YHQu9C10LTQtdGb0LjQvCBKUyDQuCBDU1Mg0LTQsNGC0L7RgtC10LrQsNC80LA6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzINC4IENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBzaWduYWxzIGZvciBlYWNoIHdvcmtvcmRlciBzdGF0ZS4nfSA9ICfQlNC10YTQuNC90LjRiNC1INGB0LjQs9C90LDQu9C1INC30LAg0YHQstCw0LrQuCDRgdGC0LDRgtGD0YEg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHdoaWNoIGNvbHVtbnMgYXJlIHNob3duIGluIHRoZSBsaW5rZWQgQ2hhbmdlcyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBDaGFuZ2UgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRiNC1INC60L7RmNC1INC60L7Qu9C+0L3QtSDRgdGDINC/0YDQuNC60LDQt9Cw0L3QtSDRgyDQv9C+0LLQtdC30LDQvdC+0Lwg0LPRgNCw0YTQuNGH0LrQvtC8INC10LvQtdC80LXQvdGC0YMg0L/RgNC+0LzQtdC90LAgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4g0J3QsNC/0L7QvNC10L3QsDog0KHQsNC80L4g0LDRgtGA0LjQsdGD0YLQuCDQv9GA0L7QvNC10L3QtSDRgdGDINC00L7Qt9Cy0L7RmdC10L3QuCDQt9CwINC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC1INC60L7Qu9C+0L3QtS4g0JzQvtCz0YPRm9C1INC/0L7RgdGC0LDQstC60LU6IDAgPSDQvtC90LXQvNC+0LPRg9Gb0LXQvdC+LCAxID0g0LTQvtGB0YLRg9C/0L3QviwgMiA9INC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC+INCw0LrRgtC40LLQuNGA0LDQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBXb3Jrb3JkZXIgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgV29ya29yZGVyIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQutC+0ZjQtSDQutC+0LvQvtC90LUg0YHRgyDQv9GA0LjQutCw0LfQsNC90LUg0YMg0L/QvtCy0LXQt9Cw0L3QvtC8INCz0YDQsNGE0LjRh9C60L7QvCDQtdC70LXQvNC10L3RgtGDINCg0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4g0J3QsNC/0L7QvNC10L3QsDog0KHQsNC80L4g0LDRgtGA0LjQsdGD0YLQuCDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwINGB0YMg0LTQvtC30LLQvtGZ0LXQvdC4INC30LAg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90LUg0LrQvtC70L7QvdC1LiDQnNC+0LPRg9Gb0LUg0L/QvtGB0YLQsNCy0LrQtTogMCA9INC+0L3QtdC80L7Qs9GD0ZvQtdC90L4sIDEgPSDQtNC+0YHRgtGD0L/QvdC+LCAyID0g0L/QvtC00YDQsNC30YPQvNC10LLQsNC90L4g0LDQutGC0LjQstC40YDQsNC90L4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjaGFuZ2UgbGlzdC4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0LzQvtC00YPQuyDQv9GA0LXQs9C70LXQtNCwINC30LAg0LzQsNC70Lgg0L/RgNC40LrQsNC3INC70LjRgdGC0LUg0L/RgNC+0LzQtdC90LAuICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgdGVtcGxhdGUgbGlzdC4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0LzQvtC00YPQuyDQv9GA0LXQs9C70LXQtNCwINC30LAg0LzQsNC70Lgg0L/RgNC40LrQsNC3INC70LjRgdGC0LUg0YjQsNCx0LvQvtC90LAuICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcHJpbnQgdGhlIGFjY291bnRlZCB0aW1lLid9ID0gJ9CU0LXRhNC40L3QuNGI0LUg0LTQsCDQu9C4INGY0LXQvNC+0LPRg9Gb0LUg0YjRgtCw0LzQv9Cw0ZrQtSDQvtCx0YDQsNGH0YPQvdCw0YLQvtCzINCy0YDQtdC80LXQvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcHJpbnQgdGhlIHBsYW5uZWQgZWZmb3J0Lid9ID0gJ9Ce0LTRgNC10ZLRg9GY0LUg0LTQsCDQu9C4INGb0LUg0LHQuNGC0Lgg0LzQvtCz0YPRm9C1INGI0YLQsNC80L/QsNGa0LUg0L/Qu9Cw0L3QuNGA0LDQvdC40YUg0L3QsNC/0L7RgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgY2hhbmdlIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSBjaGFuZ2UgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDQtNC+0YHRgtGD0L/QvdC1ICjQutCw0L4g0YjRgtC+INGY0LUg0L7QtNGA0LXRktC10L3QviDRgyDQvNCw0YjQuNC90Lgg0YHRgtCw0ZrQsCkg0L/RgNC+0LzQtdC90LUg0Lgg0YHRgtCw0YLRg9GB0Lgg0YLRgNC10LHQsCDQtNCwINCx0YPQtNGDINC00L7Qt9Cy0L7RmdC10L3QuCDQsNC60L4g0ZjQtSDQv9GA0L7QvNC10L3QsCDRgyDQt9Cw0LrRmdGD0YfQsNC90L7QvCDRgdGC0LDRgtGD0YHRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiByZWFjaGFibGUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUpIHdvcmtvcmRlciBlbmQgc3RhdGVzIHNob3VsZCBiZSBhbGxvd2VkIGlmIGEgd29ya29yZGVyIGlzIGluIGEgbG9ja2VkIHN0YXRlLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0LTQvtGB0YLRg9C/0L3QuCAo0LrQsNC+INGI0YLQviDRmNC1INC+0LTRgNC10ZLQtdC90L4g0YMg0LzQsNGI0LjQvdC4INGB0YLQsNGa0LApINGA0LDQtNC90Lgg0L3QsNC70L7Qt9C4INC4INGB0YLQsNGC0YPRgdC4INGC0YDQtdCx0LAg0LTQsCDQsdGD0LTRgyDQtNC+0LfQstC+0ZnQtdC90Lgg0LDQutC+INGY0LUg0YDQsNC00L3QuCDQvdCw0LvQvtCzINGDINC30LDQutGZ0YPRh9Cw0L3QvtC8INGB0YLQsNGC0YPRgdGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBhY2NvdW50ZWQgdGltZSBzaG91bGQgYmUgc2hvd24uJ30gPSAn0JTQtdGE0LjQvdC40YjQtSDQtNCwINC70Lgg0L7QsdGA0LDRh9GD0L3QsNGC0L4g0LLRgNC10LzQtSDRgtGA0LXQsdCwINC00LAg0LHRg9C00LUg0L/RgNC40LrQsNC30LDQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBzaG91bGQgYmUgc2V0Lid9ID0gJ9CU0LXRhNC40L3QuNGI0LUg0LTQsCDQu9C4INCw0LrRgtGD0LXQu9C90LAg0LLRgNC10LzQtdC90LAg0L/QvtGH0LXRgtC60LAg0Lgg0LfQsNCy0YDRiNC10YLQutCwINGC0YDQtdCx0LAg0LTQsCDRgdC1INC/0L7QtNC10YHQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHNlYXJjaCBhbmQgdGhlIHdvcmtvcmRlciBzZWFyY2ggZnVuY3Rpb25zIGNvdWxkIHVzZSB0aGUgbWlycm9yIERCLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0YTRg9C90LrRhtC40ZjQtSDQv9GA0LXRgtGA0LDQs9C1INC/0YDQvtC80LXQvdCwINC4INC/0YDQtdGC0YDQsNCz0LUg0YDQsNC00L3QuNGFINC90LDQu9C+0LPQsCDQvNC+0LPRgyDQtNCwINC60L7RgNC40YHRgtC1INC/0YDQtdGB0LvQuNC60LDQvdGDINCx0LDQt9GDINC/0L7QtNCw0YLQsNC60LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGNoYW5nZSBzdGF0ZSBjYW4gYmUgc2V0IGluIEFnZW50SVRTTUNoYW5nZUVkaXQuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC00LAg0LvQuCDRgdGC0LDRgtGD0YEg0L/RgNC+0LzQtdC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7QtNC10YHQuCDRgyDigJ5BZ2VudElUU01DaGFuZ2VFZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBwbGFubmVkIGVmZm9ydCBzaG91bGQgYmUgc2hvd24uJ30gPSAn0J7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0L/Qu9Cw0L3QuNGA0LDQvdC4INC90LDQv9C+0YAg0YLRgNC10LHQsCDQtNCwINCx0YPQtNC1INC/0YDQuNC60LDQt9Cw0L0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBwcmludCBieSBjdXN0b21lci4nfSA9ICfQlNC10YTQuNC90LjRiNC1INC00LAg0LvQuCDQutC70LjRmNC10L3RgiDRgtGA0LXQsdCwINC00LAg0YjRgtCw0LzQv9CwINGC0YDQsNC20LXQvdC4INC00LDRgtGD0LwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzZWFyY2hlZCBieSBjdXN0b21lci4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0LTQsCDQu9C4INC60LvQuNGY0LXQvdGCINC80L7QttC1INC00LAg0L/RgNC10YLRgNCw0LbRg9GY0LUg0YLRgNCw0LbQtdC90Lgg0LTQsNGC0YPQvC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNldCBieSBjdXN0b21lci4nfSA9ICfQlNC10YTQuNC90LjRiNC1INC00LAg0LvQuCDQutC70LjRmNC10L3RgiDQvNC+0LbQtSDQtNCwINC/0L7QtNC10YHQuCDRgtGA0LDQttC10L3QuCDQtNCw0YLRg9C8Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2hvd24gYnkgY3VzdG9tZXIuJ30gPSAn0JTQtdGE0LjQvdC40YjQtSDQtNCwINC70Lgg0LrQu9C40ZjQtdC90YIg0LzQvtC20LUg0LTQsCDQv9GA0LjQutCw0LbQtSDRgtGA0LDQttC10L3QuCDQtNCw0YLRg9C8Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSB3b3Jrb3JkZXIgc3RhdGUgc2hvdWxkIGJlIHNob3duLid9ID0gJ9CU0LXRhNC40L3QuNGI0LUg0LTQsCDQu9C4INGb0LUg0YHRgtCw0YLRg9GBINGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAg0LHQuNGC0Lgg0L/RgNC40LrQsNC30LDQvS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHRpdGxlIHNob3VsZCBiZSBzaG93bi4nfSA9ICfQlNC10YTQuNC90LjRiNC1INC00LAg0LvQuCDRm9C1INC90LDRgdC70L7QsiDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwINCx0LjRgtC4INC/0YDQuNC60LDQt9Cw0L0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgc2hvd24gZ3JhcGggYXR0cmlidXRlcy4nfSA9ICfQlNC10YTQuNC90LjRiNC1INCw0YLRgNC40LHRg9GC0LUg0L/RgNC40LrQsNC30LDQvdC+0LMg0LPRgNCw0YTQuNC60L7QvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoYXQgb25seSBjaGFuZ2VzIGNvbnRhaW5pbmcgV29ya29yZGVycyBsaW5rZWQgd2l0aCBzZXJ2aWNlcywgd2hpY2ggdGhlIGN1c3RvbWVyIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gdXNlIHdpbGwgYmUgc2hvd24uIEFueSBvdGhlciBjaGFuZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0LTQsCDRm9C1INCx0LjRgtC4INC/0YDQuNC60LDQt9Cw0L3QtSDRgdCw0LzQviDQv9GA0L7QvNC10L3QtSDQutC+0ZjQtSDRgdCw0LTRgNC20LUg0YDQsNC00L3QtSDQvdCw0LvQvtCz0LUg0L/QvtCy0LXQt9Cw0L3QtSDRgdCwINGB0LXRgNCy0LjRgdC40LzQsCwg0LfQsCDQutC+0ZjQtSDQutC70LjRmNC10L3RgiDQutC+0YDQuNGB0L3QuNC6INC40LzQsCDQtNC+0LfQstC+0LvRgyDRg9C/0L7RgtGA0LXQsdC1LiDQodCy0LUg0LTRgNGD0LPQtSDQv9GA0L7QvNC10L3QtSDQvdC10ZvQtSDQsdC40YLQuCDQv9GA0LjQutCw0LfQsNC90LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIGFsbG93ZWQgdG8gZGVsZXRlLid9ID0gJ9CU0LXRhNC40L3QuNGI0LUg0YHRgtCw0ZrQsCDQv9GA0L7QvNC10L3QsCDQutC+0ZjQsCDRmNC1INC00L7Qt9Cy0L7RmdC10L3QviDQtNCwINGB0LUg0L7QsdGA0LjRiNGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIENoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRiNC1INGB0YLQsNGC0YPRgdC1INC/0YDQvtC80LXQvdCwINC60L7RmNC4INGb0LUg0LHQuNGC0Lgg0LrQvtGA0LjRiNGC0LXQvdC4INC60LDQviDRhNC40LvRgtC10YDQuCDRgyDQn9CU0KEg0L/RgNC10LPQu9C10LTRgyDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgU2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INGB0YLQsNGC0YPRgdC1INC/0YDQvtC80LXQvdCwINC60L7RmNC1INGb0LUg0LHQuNGC0Lgg0LrQvtGA0LjRiNGC0LXQvdC1INC60LDQviDRhNC40LvRgtC10YDQuCDRgyDQv9GA0LXQs9C70LXQtNGDINC/0LvQsNC90LXRgNCwINC/0YDQvtC80LXQvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDRgdGC0LDRgtGD0YHQtSDQv9GA0L7QvNC10L3QsCDQutC+0ZjQuCDRm9C1INCx0LjRgtC4INC60L7RgNC40YjRgtC10L3QuCDQutCw0L4g0YTQuNC70YLQtdGA0Lgg0YMg0L/RgNC10LPQu9C10LTRgyDQvNC+0ZjQuNGFINC/0YDQvtC80LXQvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0YHRgtCw0YLRg9GB0LUg0L/RgNC+0LzQtdC90LAg0LrQvtGY0LUg0ZvQtSDQsdC40YLQuCDQutC+0YDQuNGI0YLQtdC90LUg0LrQsNC+INGE0LjQu9GC0LXRgNC4INGDINC/0YDQtdCz0LvQtdC00YMg0LzQvtGY0LjRhSDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0YHRgtCw0YLRg9GB0LUg0L/RgNC+0LzQtdC90LAg0LrQvtGY0LUg0ZvQtSDQsdC40YLQuCDQutC+0YDQuNGI0YLQtdC90LUg0LrQsNC+INGE0LjQu9GC0LXRgNC4INGDINC/0YDQtdCz0LvQtdC00YMg0YPQv9GA0LDQstGZ0LDRh9CwINC/0YDQvtC80LXQvdCw0LzQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INGB0YLQsNGC0YPRgdC1INC/0YDQvtC80LXQvdCwINC60L7RmNC1INGb0LUg0LHQuNGC0Lgg0LrQvtGA0LjRiNGC0LXQvdC1INC60LDQviDRhNC40LvRgtC10YDQuCDRgyDQv9GA0LXQs9C70LXQtNGDINC/0YDQvtC80LXQvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0YHRgtCw0YLRg9GB0LUg0L/RgNC+0LzQtdC90LAg0LrQvtGY0LUg0ZvQtSDQsdC40YLQuCDQutC+0YDQuNGI0YLQtdC90LUg0LrQsNC+INGE0LjQu9GC0LXRgNC4INGDINC/0YDQtdCz0LvQtdC00YMg0LrQu9C40ZjQtdC90YLRgdC60L7QsyDQv9C70LDQvdC10YDQsCDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBjaGFuZ2UgdGl0bGUgZm9yIGEgZHVtbXkgY2hhbmdlIHdoaWNoIGlzIG5lZWRlZCB0byBlZGl0IGEgd29ya29yZGVyIHRlbXBsYXRlLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDQvdCw0YHQu9C+0LIg0L/RgNCw0LfQvdC1INC/0YDQvtC80LXQvdC1INC60L7RmNCwINGY0LUg0L/QvtGC0YDQtdCx0L3QsCDQt9CwINC40LfQvNC10L3RgyDRiNCw0LHQu9C+0L3QsCDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRiNC1INC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC4INC60YDQuNGC0LXRgNC40ZjRg9C8INGB0L7RgNGC0LjRgNCw0ZrQsCDRgyDQn9CU0KEg0L/RgNC10LPQu9C10LTRgyDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90LUg0YPRgdC70L7QstC1INGB0L7RgNGC0LjRgNCw0ZrQsCDRgyDQv9GA0LXQs9C70LXQtNGDINGD0L/RgNCw0LLRmdCw0YfQsCDQv9GA0L7QvNC10L3QsNC80LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0gJ9CU0LXRhNC40L3QuNGI0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90Lgg0LrRgNC40YLQtdGA0LjRmNGD0Lwg0YHQvtGA0YLQuNGA0LDRmtCwINGDINC/0YDQtdCz0LvQtdC00YMg0L/RgNC+0LzQtdC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDQutGA0LjRgtC10YDQuNGY0YPQvCDRgdC+0YDRgtC40YDQsNGa0LAg0YMg0L/RgNC10LPQu9C10LTRgyDQv9C70LDQvdC10YDQsCDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90Lgg0LrRgNC40YLQtdGA0LjRmNGD0Lwg0YHQvtGA0YLQuNGA0LDRmtCwINGDINC/0YDQtdCz0LvQtdC00YMg0L/RgNC+0LzQtdC90LAg0LzQvtGY0LjRhSDQodCe0J8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QtSDRg9GB0LvQvtCy0LUg0YHQvtGA0YLQuNGA0LDRmtCwINC/0YDQvtC80LXQvdCwINGDINC/0YDQtdCz0LvQtdC00YMg0LzQvtGY0LjRhSDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC1INGD0YHQu9C+0LLQtSDRgdC+0YDRgtC40YDQsNGa0LAg0L/RgNC+0LzQtdC90LAg0YMg0L/RgNC10LPQu9C10LTRgyDQvNC+0ZjQuNGFINGA0LDQtNC90LjRhSDQvdCw0LvQvtCz0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDQutGA0LjRgtC10YDQuNGY0YPQvCDRgdC+0YDRgtC40YDQsNGa0LAg0YMg0L/RgNC10LPQu9C10LTRgyDQoNCf0KEg0L/RgNC+0LzQtdC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QtSDRg9GB0LvQvtCy0LUg0YHQvtGA0YLQuNGA0LDRmtCwINC/0YDQvtC80LXQvdCwINGDINC/0YDQtdCz0LvQtdC00YMg0LrQu9C40ZjQtdC90YLRgdC60L7QsyDQv9C70LDQvdC10YDQsCDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90Lgg0LrRgNC40YLQtdGA0LjRmNGD0Lwg0YHQvtGA0YLQuNGA0LDRmtCwINC/0YDQvtC80LXQvdCwINGDINC/0YDQtdCz0LvQtdC00YMg0YjQsNCx0LvQvtC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPSAn0JTQtdGE0LjQvdC40YjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDQutGA0LjRgtC10YDQuNGY0YPQvCDRgdC+0YDRgtC40YDQsNGa0LAg0YMg0L/RgNC10LPQu9C10LTRgyDQvNC+0ZjQuNGFINCh0J7Qny4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPSAn0J7QtNGA0LXRktGD0ZjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QtSDRg9GB0LvQvtCy0LUg0YHQvtGA0YLQuNGA0LDRmtCwINGDINC/0YDQtdCz0LvQtdC00YMg0LzQvtGY0LjRhSDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC1INGD0YHQu9C+0LLQtSDRgdC+0YDRgtC40YDQsNGa0LAg0YMg0L/RgNC10LPQu9C10LTRgyDQvNC+0ZjQuNGFINGA0LDQtNC90LjRhSDQvdCw0LvQvtCz0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0gJ9CU0LXRhNC40L3QuNGI0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90Lgg0LrRgNC40YLQtdGA0LjRmNGD0Lwg0YHQvtGA0YLQuNGA0LDRmtCwINGDINC/0YDQtdCz0LvQtdC00YMg0KDQn9ChLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPSAn0JTQtdGE0LjQvdC40YjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDQutGA0LjRgtC10YDQuNGY0YPQvCDRgdC+0YDRgtC40YDQsNGa0LAg0YMg0L/RgNC10LPQu9C10LTRgyAg0J/QlNChINC/0YDQvtC80LXQvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QtSDRg9GB0LvQvtCy0LUg0YHQvtGA0YLQuNGA0LDRmtCwINGDINC/0YDQtdCz0LvQtdC00YMg0YPQv9GA0LDQstGZ0LDRh9CwINC/0YDQvtC80LXQvdCw0LzQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAn0JTQtdGE0LjQvdC40YjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDRgNC10LTQvtGB0LvQtdC0INGDINC/0YDQtdCz0LvQtdC00YMg0L/RgNC+0LzQtdC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDRgNC10LTQvtGB0LvQtdC0INGDINC/0YDQtdCz0LvQtdC00YMg0L/Qu9Cw0L3QtdGA0LAg0L/RgNC+0LzQtdC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QtSDRg9GB0LvQvtCy0LUg0YHQvtGA0YLQuNGA0LDRmtCwINGDINC/0YDQtdCz0LvQtdC00YMg0LrQu9C40ZjQtdC90YLRgdC60L7QsyDQv9C70LDQvdC10YDQsCDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9ICfQlNC10YTQuNC90LjRiNC1INC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC4INGA0LXQtNC+0YHQu9C10LQg0YMg0L/RgNC10LPQu9C10LTRgyDRiNCw0LHQu9C+0L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNhdGVnb3J5IG9mIGEgY2hhbmdlLid9ID0gJ9CU0LXRhNC40L3QuNGI0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90YMg0LLRgNC10LTQvdC+0YHRgiDQt9CwINC60LDRgtC10LPQvtGA0LjRmNGDINC/0YDQvtC80LXQvdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW1wYWN0IG9mIGEgY2hhbmdlLid9ID0gJ9CU0LXRhNC40L3QuNGI0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90YMg0LLRgNC10LTQvdC+0YHRgiDQt9CwINGD0YLQuNGG0LDRmCDQv9GA0L7QvNC10L3QtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciBjaGFuZ2UgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0YLQuNC/INC/0L7RmdCwINC30LAgQ29tcGFyZVZhbHVlINCw0YLRgNC40LHRg9GC0LUg0L/RgNC+0LzQtdC90LAg0YMgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4g0JjRgdC/0YDQsNCy0L3QtSDQstGA0LXQtNC90L7RgdGC0Lgg0YHRgyBTZWxlY3Rpb24sIFRleHQg0LggRGF0ZS4g0KPQutC+0LvQuNC60L4g0YLQuNC/INC90LjRmNC1INC00LXRhNC40L3QuNGB0LDQvSwg0L/QvtGZ0LUg0L3QtdGb0LUg0LHQuNGC0Lgg0L/RgNC40LrQsNC30LDQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmaWVsZCB0eXBlIG9mIENvbXBhcmVWYWx1ZSBmaWVsZHMgZm9yIHdvcmtvcmRlciBhdHRyaWJ1dGVzIHVzZWQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gVmFsaWQgdmFsdWVzIGFyZSBTZWxlY3Rpb24sIFRleHQgYW5kIERhdGUuIElmIGEgdHlwZSBpcyBub3QgZGVmaW5lZCwgdGhlIGZpZWxkIHdpbGwgbm90IGJlIHNob3duLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDRgtC40L8g0L/QvtGZ0LAg0LfQsCBDb21wYXJlVmFsdWUg0LDRgtGA0LjQsdGD0YLQtSDRgNCw0LTQvdC40YUg0L3QsNC70L7Qs9CwINGDIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuINCY0YHQv9GA0LDQstC90LUg0LLRgNC10LTQvdC+0YHRgtC4INGB0YMgU2VsZWN0aW9uLCBUZXh0INC4IERhdGUuINCj0LrQvtC70LjQutC+INGC0LjQvyDQvdC40ZjQtSDQtNC10YTQuNC90LjRgdCw0L0sINC/0L7RmdC1INC90LXRm9C1INCx0LjRgtC4INC/0YDQuNC60LDQt9Cw0L3Qvi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgY2hhbmdlIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0LrQvtGY0LUg0LDRgtGA0LjQsdGD0YLQtSDQvtCx0ZjQtdC60YLQsCDRmNC1INC80L7Qs9GD0ZvQtSDQuNC30LDQsdGA0LDRgtC4INC30LAg0L7QsdGY0LXQutCw0YIg0L/RgNC+0LzQtdC90LUg0YMg4oCeQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdOKAnS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0LrQvtGY0LUg0LDRgtGA0LjQsdGD0YLQtSDQvtCx0ZjQtdC60YLQsCDRmNC1INC80L7Qs9GD0ZvQtSDQuNC30LDQsdGA0LDRgtC4INC30LAg0L7QsdGY0LXQutCw0YIg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCDRgyDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY2NvdW50ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC60L7RmNC1INC+0L/QtdGA0LDRgtC+0YDQtSDRmNC1INC80L7Qs9GD0ZvQtSDQuNC30LDQsdGA0LDRgtC4INC30LAg0LDRgtGA0LjQsdGD0YIg4oCe0J7QsdGA0LDRh9GD0L3QsNGC0L4g0LLRgNC10LzQteKAnSDRgyDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC60L7RmNC1INC+0L/QtdGA0LDRgtC+0YDQtSDRmNC1INC80L7Qs9GD0ZvQtSDQuNC30LDQsdGA0LDRgtC4INC30LAg0LDRgtGA0LjQsdGD0YIg4oCe0KHRgtCy0LDRgNC90L4g0LLRgNC10LzQtSDQt9Cw0LLRgNGI0LXRgtC60LDigJ0g0YMg4oCeQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdOKAnS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsU3RhcnRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC60L7RmNC1INC+0L/QtdGA0LDRgtC+0YDQtSDRmNC1INC80L7Qs9GD0ZvQtSDQuNC30LDQsdGA0LDRgtC4INC30LAg0LDRgtGA0LjQsdGD0YIg4oCe0KHRgtCy0LDRgNC90L4g0LLRgNC10LzQtSDQv9C+0YfQtdGC0LrQsOKAnSDRgyDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDYXRlZ29yeUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC60L7RmNC1INC+0L/QtdGA0LDRgtC+0YDQtSDRmNC1INC80L7Qs9GD0ZvQtSDQuNC30LDQsdGA0LDRgtC4INC30LAg0LDRgtGA0LjQsdGD0YIg4oCe0JjQlCDQutCw0YLQtdCz0L7RgNC40ZjQteKAnSDRgyDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VCdWlsZGVySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0LrQvtGY0LUg0L7Qv9C10YDQsNGC0L7RgNC1INGY0LUg0LzQvtCz0YPRm9C1INC40LfQsNCx0YDQsNGC0Lgg0LfQsCDQsNGC0YDQuNCx0YPRgiDigJ7QmNCUINCz0YDQsNC00LjRgtC10ZnQsCDQv9GA0L7QvNC10L3QteKAnSDRgyDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VNYW5hZ2VySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0LrQvtGY0LUg0L7Qv9C10YDQsNGC0L7RgNC1INGY0LUg0LzQvtCz0YPRm9C1INC40LfQsNCx0YDQsNGC0Lgg0LfQsCDQsNGC0YDQuNCx0YPRgiDigJ7QmNCUINGD0L/RgNCw0LLRmdCw0YfQsCDQv9GA0L7QvNC10L3QvtC84oCdINGDIOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZVN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0LrQvtGY0LUg0L7Qv9C10YDQsNGC0L7RgNC1INGY0LUg0LzQvtCz0YPRm9C1INC40LfQsNCx0YDQsNGC0Lgg0LfQsCDQsNGC0YDQuNCx0YPRgiDigJ7QmNCUINGB0YLQsNGC0YPRgdCwINC/0YDQvtC80LXQvdC14oCdINGDIOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZVRpdGxlIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC60L7RmNC1INC+0L/QtdGA0LDRgtC+0YDQtSDRmNC1INC80L7Qs9GD0ZvQtSDQuNC30LDQsdGA0LDRgtC4INC30LAg0LDRgtGA0LjQsdGD0YIg4oCe0J3QsNGB0LvQvtCyINC/0YDQvtC80LXQvdC14oCdINGDIOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIER5bmFtaWNGaWVsZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQutC+0ZjQtSDQvtC/0LXRgNCw0YLQvtGA0LUg0ZjQtSDQvNC+0LPRg9Gb0LUg0LjQt9Cw0LHRgNCw0YLQuCDQt9CwINCw0YLRgNC40LHRg9GCIOKAntCU0LjQvdCw0LzQuNGH0LrQviDQv9C+0ZnQteKAnSDRgyDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBJbXBhY3RJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQutC+0ZjQtSDQvtC/0LXRgNCw0YLQvtGA0LUg0ZjQtSDQvNC+0LPRg9Gb0LUg0LjQt9Cw0LHRgNCw0YLQuCDQt9CwINCw0YLRgNC40LHRg9GCIOKAntCY0JQg0YPRgtC40YbQsNGY0LDigJ0g0YMg4oCeQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdOKAnS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZEVmZm9ydCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQutC+0ZjQtSDQvtC/0LXRgNCw0YLQvtGA0LUg0ZjQtSDQvNC+0LPRg9Gb0LUg0LjQt9Cw0LHRgNCw0YLQuCDQt9CwINCw0YLRgNC40LHRg9GCIOKAntCf0LvQsNC90LjRgNCw0L3QuCDQvdCw0L/QvtGA4oCdINGDIOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC60L7RmNC1INC+0L/QtdGA0LDRgtC+0YDQtSDRmNC1INC80L7Qs9GD0ZvQtSDQuNC30LDQsdGA0LDRgtC4INC30LAg0LDRgtGA0LjQsdGD0YIg4oCe0J/Qu9Cw0L3QuNGA0LDQvdC+INCy0YDQtdC80LUg0LfQsNCy0YDRiNC10YLQutCw4oCdINGDIOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0LrQvtGY0LUg0L7Qv9C10YDQsNGC0L7RgNC1INGY0LUg0LzQvtCz0YPRm9C1INC40LfQsNCx0YDQsNGC0Lgg0LfQsCDQsNGC0YDQuNCx0YPRgiDigJ7Qn9C70LDQvdC40YDQsNC90L4g0LLRgNC10LzQtSDQv9C+0YfQtdGC0LrQsOKAnSDRgyDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQcmlvcml0eUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC60L7RmNC1INC+0L/QtdGA0LDRgtC+0YDQtSDRmNC1INC80L7Qs9GD0ZvQtSDQuNC30LDQsdGA0LDRgtC4INC30LAg0LDRgtGA0LjQsdGD0YIg4oCe0JjQlCDQv9GA0LjQvtGA0LjRgtC10YLQsOKAnSDRgyDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBSZXF1ZXN0ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC60L7RmNC1INC+0L/QtdGA0LDRgtC+0YDQtSDRmNC1INC80L7Qs9GD0ZvQtSDQuNC30LDQsdGA0LDRgtC4INC30LAg0LDRgtGA0LjQsdGD0YIg4oCe0KLRgNCw0LbQtdC90L4g0LLRgNC10LzQteKAnSDRgyDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJBZ2VudElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC60L7RmNC1INC+0L/QtdGA0LDRgtC+0YDQtSDRmNC1INC80L7Qs9GD0ZvQtSDQuNC30LDQsdGA0LDRgtC4INC30LAg0LDRgtGA0LjQsdGD0YIg4oCeV29ya09yZGVyQWdlbnRJROKAnSDRgyDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJOdW1iZXIgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0LrQvtGY0LUg0L7Qv9C10YDQsNGC0L7RgNC1INGY0LUg0LzQvtCz0YPRm9C1INC40LfQsNCx0YDQsNGC0Lgg0LfQsCDQsNGC0YDQuNCx0YPRgiDigJ7QkdGA0L7RmCDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9Cw4oCdINGDIOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0LrQvtGY0LUg0L7Qv9C10YDQsNGC0L7RgNC1INGY0LUg0LzQvtCz0YPRm9C1INC40LfQsNCx0YDQsNGC0Lgg0LfQsCDQsNGC0YDQuNCx0YPRgiDigJ5Xb3JrT3JkZXJTdGF0ZUlE4oCdINGDIOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclRpdGxlIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC60L7RmNC1INC+0L/QtdGA0LDRgtC+0YDQtSDRmNC1INC80L7Qs9GD0ZvQtSDQuNC30LDQsdGA0LDRgtC4INC30LAg0LDRgtGA0LjQsdGD0YIg4oCe0J3QsNGB0LvQvtCyINGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LDigJ0g0YMg4oCeQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdOKAnS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVHlwZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC60L7RmNC1INC+0L/QtdGA0LDRgtC+0YDQtSDRmNC1INC80L7Qs9GD0ZvQtSDQuNC30LDQsdGA0LDRgtC4INC30LAg0LDRgtGA0LjQsdGD0YIg4oCeV29ya09yZGVyVHlwZUlE4oCdINGDIOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBlcmlvZCAoaW4geWVhcnMpLCBpbiB3aGljaCBzdGFydCBhbmQgZW5kIHRpbWVzIGNhbiBiZSBzZWxlY3RlZC4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0L/QtdGA0LjQvtC0ICjRgyDQs9C+0LTQuNC90LDQvNCwKSwg0YPQvdGD0YLQsNGAINC60L7QsyDRmNC1INC80L7Qs9GD0ZvQtSDQuNC30LDQsdGA0LDRgtC4INCy0YDQtdC80LXQvdCwINC/0L7Rh9C10YLQutCwINC4INC30LDQstGA0YjQtdGC0LrQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gYXR0cmlidXRlcyBvZiBhIHdvcmtvcmRlciBpbiB0aGUgdG9vbHRpcCBvZiB0aGUgd29ya29yZGVyIGdyYXBoIGluIHRoZSBjaGFuZ2Ugem9vbS4gVG8gc2hvdyB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMgaW4gdGhlIHRvb2x0aXAsIHRoZXkgbXVzdCBiZSBzcGVjaWZpZWQgbGlrZSBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMSwgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTIsIGV0Yy4nfSA9CiAgICAgICAgJ9CU0LXRhNC40L3QuNGI0LUg0L/RgNC40LrQsNC30LDQvdC1INCw0YLRgNC40LHRg9GC0LUg0YMg0L/QvtGA0YPQutCw0LzQsCDQvdCwINCz0YDQsNGE0LjQutGDINGA0LDQtNC90LjRhSDQvdCw0LvQvtCz0LAg0YMg0LTQtdGC0LDRmdC90L7QvCDQtdC60YDQsNC90YMg0L/RgNC+0LzQtdC90LAuINCX0LAg0L/RgNC40LrQsNC3INC00LjQvdCw0LzQuNGH0LrQuNGFINC/0L7RmdCwINGA0LDQtNC90LjRhSDQvdCw0LvQvtCz0LAg0YMg0L/QvtGA0YPQutCw0LzQsCwg0LzQvtGA0LDRmNGDINCx0LjRgtC4INC00LXRhNC40L3QuNGB0LDQvdC4INC60LDQviBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMSwgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTIsINC40YLQtC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgQ2hhbmdlIFBTQSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0LrQvtC70L7QvdC1INC/0YDQuNC60LDQt9Cw0L3QtSDRgyDQv9GA0LXQs9C70LXQtNGDINCf0JTQoSDQv9GA0L7QvNC10L3QsC4g0J7QstCwINC+0L/RhtC40ZjQsCDQvdC10LzQsCDRg9GC0LjRhtCw0Zgg0L3QsCDQv9C+0LfQuNGG0LjRmNC1INC60L7Qu9C+0L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQutC+0LvQvtC90LUg0L/RgNC40LrQsNC30LDQvdC1INGDINC/0YDQtdCz0LvQtdC00YMg0J/Qu9Cw0L3QtdGA0LAg0L/RgNC+0LzQtdC90LAuINCe0LLQsCDQvtC/0YbQuNGY0LAg0L3QtdC80LAg0YPRgtC40YbQsNGYINC90LAg0L/QvtC30LjRhtC40ZjQtSDQutC+0LvQvtC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQutC+0LvQvtC90LUg0L/RgNC40LrQsNC30LDQvdC1INGDINC/0YDQtdCz0LvQtdC00YMg0LzQvtGY0LjRhSDQodCe0J8uINCe0LLQsCDQvtC/0YbQuNGY0LAg0L3QtdC80LAg0YPRgtC40YbQsNGYINC90LAg0L/QvtC30LjRhtC40ZjQtSDQutC+0LvQvtC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0LrQvtC70L7QvdC1INC/0YDQuNC60LDQt9Cw0L3QtSDRgyDQv9GA0LXQs9C70LXQtNGDINC80L7RmNC40YUg0L/RgNC+0LzQtdC90LAuINCe0LLQsCDQvtC/0YbQuNGY0LAg0L3QtdC80LAg0YPRgtC40YbQsNGYINC90LAg0L/QvtC30LjRhtC40ZjQtSDQutC+0LvQvtC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0LrQvtC70L7QvdC1INC/0YDQuNC60LDQt9Cw0L3QtSDRgyDQv9GA0LXQs9C70LXQtNGDINC80L7RmNC40YUg0YDQsNC00L3QuNGFINC90LDQu9C+0LPQsC4g0J7QstCwINC+0L/RhtC40ZjQsCDQvdC10LzQsCDRg9GC0LjRhtCw0Zgg0L3QsCDQv9C+0LfQuNGG0LjRmNC1INC60L7Qu9C+0L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgUElSIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQv9GA0LjQutCw0LfQsNC90LUg0LrQvtC70L7QvdC1INGDINC/0YDQtdCz0LvQtdC00YMg0KDQn9ChLiDQntCy0LAg0L7Qv9GG0LjRmNC1INC90LXQvNCwINGD0YLQuNGG0LDRmCDQvdCwINC/0L7Qt9C40YbQuNGY0LUg0LrQvtC70L7QvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0L/RgNC40LrQsNC30LDQvdC1INC60L7Qu9C+0L3QtSDRgyDQv9GA0LXQs9C70LXQtNGDINGD0L/RgNCw0LLRmdCw0YfQsCDQv9GA0L7QvNC10L3QsNC80LAuINCe0LLQsCDQvtC/0YbQuNGY0LUg0L3QtdC80LAg0YPRgtC40YbQsNGYINC90LAg0L/QvtC30LjRhtC40ZjQtSDQutC+0LvQvtC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0L/RgNC40LrQsNC30LDQvdC1INC60L7Qu9C+0L3QtSDRgyDQv9GA0LXQs9C70LXQtNGDINC/0YDQvtC80LXQvdCwLiDQntCy0LAg0L7Qv9GG0LjRmNC1INC90LXQvNCwINGD0YLQuNGG0LDRmCDQvdCwINC/0L7Qt9C40YbQuNGY0LUg0LrQvtC70L7QvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQv9GA0LjQutCw0LfQsNC90LUg0LrQvtC70L7QvdC1INGDINC/0YDQtdGC0YDQsNC30Lgg0L/RgNC+0LzQtdC90LAuINCe0LLQsCDQvtC/0YbQuNGY0LUg0L3QtdC80LAg0YPRgtC40YbQsNGYINC90LAg0L/QvtC30LjRhtC40ZjQtSDQutC+0LvQvtC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0L/RgNC40LrQsNC30LDQvdC1INC60L7Qu9C+0L3QtSDRgyDQv9GA0LXQs9C70LXQtNGDINC60LvQuNGY0LXQvdGC0YHQutC+0LMg0L/Qu9Cw0L3QtdGA0LAg0L/RgNC+0LzQtdC90LAuINCe0LLQsCDQvtC/0YbQuNGY0LUg0L3QtdC80LAg0YPRgtC40YbQsNGYINC90LAg0L/QvtC30LjRhtC40ZjQtSDQutC+0LvQvtC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQv9GA0LjQutCw0LfQsNC90LUg0LrQvtC70L7QvdC1INGDINC/0YDQtdCz0LvQtdC00YMg0YjQsNCx0LvQvtC90LAuINCe0LLQsCDQvtC/0YbQuNGY0LUg0L3QtdC80LAg0YPRgtC40YbQsNGYINC90LAg0L/QvtC30LjRhtC40ZjQtSDQutC+0LvQvtC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNpZ25hbHMgZm9yIGVhY2ggSVRTTUNoYW5nZSBzdGF0ZS4nfSA9ICfQntC00YDQtdGS0YPRmNC1INGB0LjQs9C90LDQu9C1INC30LAg0YHQstCw0LrQuCDRgdGC0LDRgtGD0YEg4oCeSVRTTeKAnSDQv9GA0L7QvNC10L3QtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGVtcGxhdGUgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INGC0LjQv9C+0LLQtSDRiNCw0LHQu9C+0L3QsCDQutC+0ZjQuCDRm9C1INCx0LjRgtC4INC60L7RgNC40YjRgtC10L3QuCDQutCw0L4g0YTQuNC70YLQtdGA0Lgg0YMg0L/RgNC10LPQu9C10LTRgyDRiNCw0LHQu9C+0L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INGB0YLQsNGC0YPRgdC1INGA0LDQtNC90LjRhSDQvdCw0LvQvtCz0LAg0LrQvtGY0Lgg0ZvQtSDQsdC40YLQuCDQutC+0YDQuNGI0YLQtdC90Lgg0LrQsNC+INGE0LjQu9GC0LXRgNC4INGDINC/0YDQtdCz0LvQtdC00YMg0LzQvtGY0LjRhSDRgNCw0LTQvdC40YUg0L3QsNC70L7Qs9CwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0YHRgtCw0YLRg9GB0LUg0YDQsNC00L3QuNGFINC90LDQu9C+0LPQsCDQutC+0ZjQuCDRm9C1INGB0LUg0LrQvtGA0LjRgdGC0LjRgtC4INC60LDQviDRhNC40LvRgtC10YDQuCDRgyDQv9GA0LXQs9C70LXQtNGDINCg0J/QoS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHR5cGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNob3cgdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0YLQuNC/0L7QstC1INGA0LDQtNC90LjRhSDQvdCw0LvQvtCz0LAg0LrQvtGY0Lgg0ZvQtSDRgdC1INC60L7RgNC40YHRgtC40YLQuCDQt9CwINC/0YDQuNC60LDQtyDQoNCf0KEg0L/RgNC10LPQu9C10LTQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGV0aGVyIG5vdGlmaWNhdGlvbnMgc2hvdWxkIGJlIHNlbnQuJ30gPSAn0J7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0ZvQtSDQvtCx0LDQstC10YjRgtC10ZrQsCDQsdC40YLQuCDQv9C+0YHQu9Cw0YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIGEgY2hhbmdlLid9ID0gJ9Ce0LHRgNC40YjQuCDQv9GA0L7QvNC10L3Rgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoZSBjaGFuZ2UuJ30gPSAn0J7QsdGA0LjRiNC4INC/0YDQvtC80LXQvdGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhlIHdvcmtvcmRlci4nfSA9ICfQntCx0YDQuNGI0Lgg0YDQsNC00L3QuCDQvdCw0LvQvtCzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzIG9mIGEgY2hhbmdlIGhpc3RvcnkgZW50cnkuJ30gPSAn0JTQtdGC0LDRmdC4INGB0YLQsNCy0LrQtSDQuNGB0YLQvtGA0LjRmNCw0YLQsCDQv9GA0L7QvNC10L3QtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiBhbiBhZ2VudCBjYW4gZXhjaGFuZ2UgdGhlIFgtYXhpcyBvZiBhIHN0YXQgaWYgaGUgZ2VuZXJhdGVzIG9uZS4nfSA9CiAgICAgICAgJ9Cj0YLQstGA0ZLRg9GY0LUg0LTQsCDQu9C4INC+0L/QtdGA0LDRgtC10YAg0LzQvtC20LUg0LTQsCDQt9Cw0LzQtdC90LggWCDQvtGB0YMg0YHRgtCw0YLQuNGB0YLQuNC60LUg0LDQutC+INGY0LUg0LPQtdC90LXRgNC40YjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIGRvbmUgZm9yIGNvbmZpZyBpdGVtIGNsYXNzZXMuJ30gPQogICAgICAgICfQo9GC0LLRgNGS0YPRmNC1INC00LAg0LvQuCDQt9Cw0ZjQtdC00L3QuNGH0LrQuCDQvNC+0LTRg9C7INGB0YLQsNGC0LjRgdGC0LjQutC1INC80L7QttC1INC00LAg0LPQtdC90LXRgNC40YjQtSDRgdGC0LDRgtC40YHRgtC40LrRgyDQv9GA0L7QvNC10L3QsCDRg9GA0LDRktC10L3QuNGFINC30LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QtSDRgdGC0LDQstC60LUg0LrQu9Cw0YHQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyByZWdhcmRpbmcgY2hhbmdlIHN0YXRlIHVwZGF0ZXMgd2l0aGluIGEgdGltZXBlcmlvZC4nfSA9CiAgICAgICAgJ9Cj0YLQstGA0ZLRg9GY0LUg0LTQsCDQu9C4INC30LDRmNC10LTQvdC40YfQutC4INC80L7QtNGD0Lsg0YHRgtCw0YLQuNGB0YLQuNC60LUg0LzQvtC20LUg0LTQsCDQs9C10L3QtdGA0LjRiNC1INGB0YLQsNGC0LjRgdGC0LjQutGDINC/0YDQvtC80LXQvdCwINC/0YDQtdC80LAg0LDQttGD0YDQuNGA0LDRmtGDINC/0YDQvtC80LXQvdCwINGB0YLQsNGa0LAg0YMg0LLRgNC10LzQtdC90YHQutC+0Lwg0L/QtdGA0LjQvtC00YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIHRoZSByZWxhdGlvbiBiZXR3ZWVuIGNoYW5nZXMgYW5kIGluY2lkZW50IHRpY2tldHMuJ30gPQogICAgICAgICfQo9GC0LLRgNGS0YPRmNC1INC00LAg0LvQuCDQt9Cw0ZjQtdC00L3QuNGH0LrQuCDQvNC+0LTRg9C7INGB0YLQsNGC0LjRgdGC0LjQutC1INC80L7QttC1INC00LAg0LPQtdC90LXRgNC40YjQtSDRgdGC0LDRgtC40YHRgtC40LrRgyDQv9GA0L7QvNC10L3QsCDQv9GA0LXQvNCwINCy0LXQt9C4INC40LfQvNC10ZLRgyDQv9GA0L7QvNC10L3QsCDQuCDRgtC40LrQtdGC0LAg0LjQvdGG0LjQtNC10L3QsNGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMuJ30gPQogICAgICAgICfQo9GC0LLRgNGS0YPRmNC1INC00LAg0LvQuCDQt9Cw0ZjQtdC00L3QuNGH0LrQuCDQvNC+0LTRg9C7INGB0YLQsNGC0LjRgdGC0LjQutC1INC80L7QttC1INC00LAg0LPQtdC90LXRgNC40YjQtSDRgdGC0LDRgtC40YHRgtC40LrRgyDQviDQv9GA0L7QvNC10L3QsNC80LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IHRoZSBudW1iZXIgb2YgUmZjIHRpY2tldHMgYSByZXF1ZXN0ZXIgY3JlYXRlZC4nfSA9CiAgICAgICAgJ9Cj0YLQstGA0ZLRg9GY0LUg0LTQsCDQu9C4INC30LDRmNC10LTQvdC40YfQutC4INC80L7QtNGD0Lsg0YHRgtCw0YLQuNGB0YLQuNC60LUg0LzQvtC20LUg0LTQsCDQs9C10L3QtdGA0LjRiNC1INGB0YLQsNGC0LjRgdGC0LjQutGDINC+INCx0YDQvtGY0YMg4oCeUmZj4oCdINGC0LjQutC10YLQsCDQutC+0ZjQtSDRmNC1INC60YDQtdC40YDQsNC+INGC0YDQsNC20LjQu9Cw0YYuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIChmb3IgY2hhbmdlcyBhbmQgd29ya29yZGVycykgc2hvd24gaW4gdGhlIGNoYW5nZSBwcmludCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICfQlNC40L3QsNC80LjRh9C60LAg0L/QvtGZ0LAgKNC30LAg0L/RgNC+0LzQtdC90LUg0Lgg0YDQsNC00L3QtSDQvdCw0LvQvtCz0LUpINC/0YDQuNC60LDQt9Cw0L3QsCDQvdCwINC10LrRgNCw0L3RgyDRiNGC0LDQvNC/0LUg0L/RgNC+0LzQtdC90LUg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLiDQnNC+0LPRg9Gb0LAg0L/QvtC00LXRiNCw0LLQsNGa0LA6IDAgPSDQntC90LXQvNC+0LPRg9Gb0LXQvdC+LCAxID0g0J7QvNC+0LPRg9Gb0LXQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ9CU0LjQvdCw0LzQuNGH0LrQsCDQv9C+0ZnQsCDQv9GA0LjQutCw0LfQsNC90LAg0L3QsCDQtdC60YDQsNC90YMg0LTQvtC00LDQstCw0ZrQsCDQv9GA0L7QvNC10L3QtSDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuINCc0L7Qs9GD0ZvQsCDQv9C+0LTQtdGI0LDQstCw0ZrQsDogMCA9INCe0L3QtdC80L7Qs9GD0ZvQtdC90L4sIDEgPSDQntC80L7Qs9GD0ZvQtdC90L4sIDIgPSDQntC80L7Qs9GD0ZvQtdC90L4g0Lgg0L3QtdC+0L/RhdC+0LTQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICfQlNC40L3QsNC80LjRh9C60LAg0L/QvtGZ0LAg0L/RgNC40LrQsNC30LDQvdCwINC90LAg0LXQutGA0LDQvdGDINC40LfQvNC10L3QtSDQv9GA0L7QvNC10L3QtSDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuINCc0L7Qs9GD0ZvQsCDQv9C+0LTQtdGI0LDQstCw0ZrQsDogMCA9INCe0L3QtdC80L7Qs9GD0ZvQtdC90L4sIDEgPSDQntC80L7Qs9GD0ZvQtdC90L4sIDIgPSDQntC80L7Qs9GD0ZvQtdC90L4g0Lgg0L3QtdC+0L/RhdC+0LTQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICfQlNC40L3QsNC80LjRh9C60LAg0L/QvtGZ0LAg0L/RgNC40LrQsNC30LDQvdCwINC90LAg0LXQutGA0LDQvdGDINC/0YDQtdGC0YDQsNCz0LUg0L/RgNC+0LzQtdC90LUg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLiDQnNC+0LPRg9Gb0LAg0L/QvtC00LXRiNCw0LLQsNGa0LA6IDAgPSDQntC90LXQvNC+0LPRg9Gb0LXQvdC+LCAxID0g0J7QvNC+0LPRg9Gb0LXQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAn0JTQuNC90LDQvNC40YfQutCwINC/0L7RmdCwINC/0YDQuNC60LDQt9Cw0L3QsCDQvdCwINC10LrRgNCw0L3RgyDQtNC10YLQsNGZ0L3QvtCzINC/0YDQuNC60LDQt9CwINC/0YDQvtC80LXQvdC1INGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4g0JzQvtCz0YPRm9CwINC/0L7QtNC10YjQsNCy0LDRmtCwOiAwID0g0J7QvdC10LzQvtCz0YPRm9C10L3QviwgMSA9INCe0LzQvtCz0YPRm9C10L3Qvi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICfQlNC40L3QsNC80LjRh9C60LAg0L/QvtGZ0LAg0L/RgNC40LrQsNC30LDQvdCwINC90LAg0LXQutGA0LDQvdGDINC00L7QtNCw0LLQsNGa0LAg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuINCc0L7Qs9GD0ZvQsCDQv9C+0LTQtdGI0LDQstCw0ZrQsDogMCA9INCe0L3QtdC80L7Qs9GD0ZvQtdC90L4sIDEgPSDQntC80L7Qs9GD0ZvQtdC90L4sIDIgPSDQntC80L7Qs9GD0ZvQtdC90L4g0Lgg0L3QtdC+0L/RhdC+0LTQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICfQlNC40L3QsNC80LjRh9C60LAg0L/QvtGZ0LAg0L/RgNC40LrQsNC30LDQvdCwINC90LAg0LXQutGA0LDQvdGDINC40LfQvNC10L3QtSDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4g0JzQvtCz0YPRm9CwINC/0L7QtNC10YjQsNCy0LDRmtCwOiAwID0g0J7QvdC10LzQvtCz0YPRm9C10L3QviwgMSA9INCe0LzQvtCz0YPRm9C10L3QviwgMiA9INCe0LzQvtCz0YPRm9C10L3QviDQuCDQvdC10L7Qv9GF0L7QtNC90L4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgcmVwb3J0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAn0JTQuNC90LDQvNC40YfQutCwINC/0L7RmdCwINC/0YDQuNC60LDQt9Cw0L3QsCDQvdCwINC10LrRgNCw0L3RgyDQuNC30LLQtdGI0YLQsNGY0LAg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuINCc0L7Qs9GD0ZvQsCDQv9C+0LTQtdGI0LDQstCw0ZrQsDogMCA9INCe0L3QtdC80L7Qs9GD0ZvQtdC90L4sIDEgPSDQntC80L7Qs9GD0ZvQtdC90L4sIDIgPSDQntC80L7Qs9GD0ZvQtdC90L4g0Lgg0L3QtdC+0L/RhdC+0LTQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAn0JTQuNC90LDQvNC40YfQutCwINC/0L7RmdCwINC/0YDQuNC60LDQt9Cw0L3QsCDQvdCwINC10LrRgNCw0L3RgyDQtNC10YLQsNGZ0L3QvtCzINC/0YDQuNC60LDQt9CwINGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLiDQnNC+0LPRg9Gb0LAg0L/QvtC00LXRiNCw0LLQsNGa0LA6IDAgPSDQntC90LXQvNC+0LPRg9Gb0LXQvdC+LCAxID0g0J7QvNC+0LPRg9Gb0LXQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljRmllbGQgZXZlbnQgbW9kdWxlIHRvIGhhbmRsZSB0aGUgdXBkYXRlIG9mIGNvbmRpdGlvbnMgaWYgZHluYW1pYyBmaWVsZHMgYXJlIGFkZGVkLCB1cGRhdGVkIG9yIGRlbGV0ZWQuJ30gPQogICAgICAgICfQnNC+0LTRg9C7INC00L7Qs9Cw0ZLQsNGY0LAg0LTQuNC90LDQvNC40YfQutC40YUg0L/QvtGZ0LAg0LfQsCDQsdCw0YDQsNGC0LDRmtC1INGB0LAg0LDQttGD0YDQuNGA0LDRmtC10Lwg0YPRgdC70L7QstCwINCw0LrQviDRgdC1INC00LjQvdCw0LzQuNGH0LrQsCDQv9C+0ZnQsCDQtNC+0LTQsNGY0YMsINCw0LbRg9GA0LjRgNCw0ZjRgyDQuNC70Lgg0LHRgNC40YjRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBhIGNoYW5nZS4nfSA9ICfQo9GA0LXQtNC4INC/0YDQvtC80LXQvdGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSBjaGFuZ2UuJ30gPSAn0KPRgNC10LTQuCDQv9GA0L7QvNC10L3Rgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY2hhbmdlLid9ID0gJ9Cj0YDQtdC00Lgg0YPRgdC70L7QstC1INC30LAg0L/RgNC+0LzQtdC90YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIHdvcmtvcmRlci4nfSA9ICfQo9GA0LXQtNC4INGA0LDQtNC90Lgg0L3QsNC70L7Qsy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9yd2FyZCBzY2hlZHVsZSBvZiBjaGFuZ2VzLiBPdmVydmlldyBvdmVyIGFwcHJvdmVkIGNoYW5nZXMuJ30gPQogICAgICAgICfQn9GA0L7RgdC70LXQtNC4INGA0LDRgdC/0L7RgNC10LQg0L/RgNC+0LzQtdC90LAuINCf0YDQtdCz0LvQtdC0INC+0LTQvtCx0YDQtdC90LjRhSDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBab29tJ30gPSAn0JTQtdGC0LDRmdC4INC40YHRgtC+0YDQuNGY0LDRgtCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIENBQiBUZW1wbGF0ZXMuJ30gPSAn4oCeSVRTTeKAnSDRiNCw0LHQu9C+0L3QuCDQv9GA0L7QvNC10L3QsCDQodCe0J8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ29uZGl0aW9uIEVkaXQuJ30gPSAn4oCeSVRTTeKAnSDRg9GA0LXRktC40LLQsNGa0LUg0YPRgdC70L7QstCwINC/0YDQvtC80LXQvdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gT3ZlcnZpZXcuJ30gPSAn4oCeSVRTTeKAnSDQv9GA0LXQs9C70LXQtCDRg9GB0LvQvtCy0LAg0L/RgNC+0LzQtdC90LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIE1hbmFnZW1lbnQgTm90aWZpY2F0aW9ucyd9ID0gJ9Ce0LHQsNCy0LXRiNGC0LXRmtCwINGDIOKAnklUU03igJ0g0KPQv9GA0LDQstGZ0LDRmtGDINC/0YDQvtC80LXQvdCw0LzQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VyIE92ZXJ2aWV3Lid9ID0gJ+KAnklUU03igJ0g0L/RgNC10LPQu9C10LQg0L/RgNC+0LzQtdC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIFBJUiBPdmVydmlldy4nfSA9ICfigJ5JVFNN4oCdINC/0YDQtdCz0LvQtdC0INCg0J/QoSDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2Ugbm90aWZpY2F0aW9uIHJ1bGVzJ30gPSAn4oCeSVRTTeKAnSDQv9GA0LDQstC40LvQsCDQvtCx0LDQstC10YjRgtCw0LLQsNGa0LAg0L4g0L/RgNC+0LzQtdC90LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlcyd9ID0gJ+KAnklUU03igJ0g0L/RgNC+0LzQtdC90LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeUNBQiBPdmVydmlldy4nfSA9ICfigJ5JVFNN4oCdINC/0YDQtdCz0LvQtdC0INC80L7RmNC40YUg0KHQntCfLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q2hhbmdlcyBPdmVydmlldy4nfSA9ICfigJ5JVFNN4oCdINC/0YDQtdCz0LvQtdC0INC80L7RmNC40YUg0L/RgNC+0LzQtdC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlXb3Jrb3JkZXJzIE92ZXJ2aWV3Lid9ID0gJ+KAnklUU03igJ0g0L/RgNC10LPQu9C10LQg0LzQvtGY0LjRhSDRgNCw0LTQvdC40YUg0L3QsNC70L7Qs9CwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIERlbGV0ZS4nfSA9ICfigJ5JVFNN4oCdINCx0YDQuNGB0LDRmtC1INGI0LDQsdC70L7QvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQgQ0FCLid9ID0gJ+KAnklUU03igJ0g0YPRgNC10ZLQuNCy0LDRmtC1INCh0J7QnyDRiNCw0LHQu9C+0L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0IENvbnRlbnQuJ30gPSAn4oCeSVRTTeKAnSDRgdCw0LTRgNC20LDRmCDRg9GA0LXRktC40LLQsNGa0LAg0YjQsNCx0LvQvtC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdC4nfSA9ICfigJ5JVFNN4oCdINGD0YDQtdGS0LjQstCw0ZrQtSDRiNCw0LHQu9C+0L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBPdmVydmlldy4nfSA9ICfQn9GA0LXQs9C70LXQtCDigJ5JVFNN4oCdINGI0LDQsdC70L7QvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGNsZWFucyB1cCBjb25kaXRpb25zLid9ID0gJ+KAnklUU03igJ0g0LzQvtC00YPQuyDQtNC+0LPQsNGS0LDRmNCwINC60L7RmNC4INGH0LjRgdGC0Lgg0YPRgdC70L7QstC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGNhY2hlIGZvciBhIHRvb2xiYXIuJ30gPSAn4oCeSVRTTeKAnSDQvNC+0LTRg9C7INC00L7Qs9Cw0ZLQsNGY0LAg0LrQvtGY0Lgg0LHRgNC40YjQtSDQutC10Ygg0LDQu9Cw0YLQvdC1INGC0YDQsNC60LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgZGVsZXRlcyB0aGUgaGlzdG9yeSBvZiBjaGFuZ2VzLid9ID0gJ+KAnklUU03igJ0g0LzQvtC00YPQuyDQtNC+0LPQsNGS0LDRmNCwINC60L7RmNC4INCx0YDQuNGI0LUg0LjRgdGC0L7RgNC40ZjQsNGCINC/0YDQvtC80LXQvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IG1hdGNoZXMgY29uZGl0aW9ucyBhbmQgZXhlY3V0ZXMgYWN0aW9ucy4nfSA9CiAgICAgICAgJ+KAnklUU03igJ0g0LzQvtC00YPQuyDQtNC+0LPQsNGS0LDRmNCwINC60L7RmNC4INGD0L/QsNGA0YPRmNC1INGD0YHQu9C+0LLQtSDQuCDQuNC30LLRgNGI0LDQstCwINCw0LrRhtC40ZjQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBzZW5kcyBub3RpZmljYXRpb25zLid9ID0gJ+KAnklUU03igJ0g0LzQvtC00YPQuyDQtNC+0LPQsNGS0LDRmNCwINC60L7RmNC4INGI0LDRmdC1INC+0LHQsNCy0LXRiNGC0LXRmtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICfigJ5JVFNN4oCdINC80L7QtNGD0Lsg0LTQvtCz0LDRktCw0ZjQsCDQutC+0ZjQuCDQsNC20YPRgNC40YDQsCDQuNGB0YLQvtGA0LjRmNCw0YIg0L/RgNC+0LzQtdC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiBjb25kaXRpb25zLid9ID0gJ+KAnklUU03igJ0g0LzQvtC00YPQuyDQtNC+0LPQsNGS0LDRmNCwINCw0LbRg9GA0LjRgNCwINC40YHRgtC+0YDQuNGY0LDRgiDRg9GB0LvQvtCy0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiB3b3Jrb3JkZXJzLid9ID0gJ+KAnklUU03igJ0g0LzQvtC00YPQuyDQtNC+0LPQsNGS0LDRmNCwINCw0LbRg9GA0LjRgNCwINC40YHRgtC+0YDQuNGY0LDRgiDRgNCw0LTQvdC40YUg0L3QsNC70L7Qs9CwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byByZWNhbGN1bGF0ZSB0aGUgd29ya29yZGVyIG51bWJlcnMuJ30gPSAn4oCeSVRTTeKAnSDQvNC+0LTRg9C7INC00L7Qs9Cw0ZLQsNGY0LAg0LrQvtGY0Lgg0L/RgNC10YDQsNGH0YPQvdCw0LLQsCDQsdGA0L7RmNC10LLQtSDRgNCw0LTQvdC40YUg0L3QsNC70L7Qs9CwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byBzZXQgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzIG9mIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICfigJ5JVFNN4oCdINC80L7QtNGD0Lsg0LTQvtCz0LDRktCw0ZjQsCDQutC+0ZjQuCDQv9C+0LTQtdGI0LDQstCwINCw0LrRgtGD0LXQu9C90LAg0LLRgNC10LzQtdC90LAg0L/QvtGH0LXRgtC60LAg0Lgg0LfQsNCy0YDRiNC10YLQutCwINGA0LDQtNC90LjRhSDQvdCw0LvQvtCz0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01DaGFuZ2UnfSA9ICfigJ5JVFNN4oCdINC/0YDQvtC80LXQvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01Xb3JrT3JkZXInfSA9ICfigJ5JVFNN4oCdINGA0LDQtNC90Lgg0L3QsNC70L7Qsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBmcmVxdWVuY3kgaXMgXCdyZWd1bGFybHlcJywgeW91IGNhbiBjb25maWd1cmUgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IChldmVyeSBYIGhvdXJzKS4nfSA9CiAgICAgICAgJ9CQ0LrQviDRmNC1INGD0YfQtdGB0YLQsNC70L7RgdGCIOKAntGA0LXQtNC+0LLQvdC+4oCdLCDQvNC+0LbQtdGC0LUg0L/QvtC00LXRgdC40YLQuCDQutC+0LvQuNC60L4g0YfQtdGB0YLQviDRgdC1INGI0LDRmdGDINC+0LHQsNCy0LXRiNGC0LXRmtCwICjQvdCwINGB0LLQsNC60LjRhSBYINGB0LDRgtC4KS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgY2hhbmdlLid9ID0gJ9Cf0L7QstC10LbQuCDQtNGA0YPQs9C4INC+0LHRmNC10LrQsNGCINGB0LAg0L/RgNC+0LzQtdC90L7QvC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgd29ya29yZGVyLid9ID0gJ9Cf0L7QstC10LbQuCDQtNGA0YPQs9C4INC+0LHRmNC10LrQsNGCINGB0LAg0YDQsNC00L3QuNC8INC90LDQu9C+0LPQvtC8Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2dmaWxlIGZvciB0aGUgSVRTTSBjaGFuZ2UgY291bnRlci4gVGhpcyBmaWxlIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjaGFuZ2UgbnVtYmVycy4nfSA9CiAgICAgICAgJ9CU0LDRgtC+0YLQtdC60LAg0LTQvdC10LLQvdC40LrQsCDQt9CwIOKAnklUU03igJ0g0LHRgNC+0ZjQsNGHINC/0YDQvtC80LXQvdCwLiDQntCy0LAg0LTQsNC00YLQvtGC0LXQutCwINGB0LUg0LrQvtGA0LjRgdGC0Lgg0LfQsCDQs9C10L3QtdGA0LjRgdCw0ZrQtSDQsdGA0L7RmNCwINC/0YDQvtC80LXQvdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rdXAgb2YgQ0FCIG1lbWJlcnMgZm9yIGF1dG9jb21wbGV0aW9uLid9ID0gJ9Cf0L7RgtGA0LDQttC4INGH0LvQsNC90L7QstC1INCh0J7QnyDRgNCw0LTQuCDQsNGD0YLQvtC80LDRgtGB0LrQvtCzINC00L7QstGA0YjQsNCy0LDRmtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rdXAgb2YgYWdlbnRzLCB1c2VkIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICfQn9C+0YLRgNCw0LbQuCDQvtC/0LXRgNCw0YLQtdGA0LUsINGD0L/QvtGC0YDQtdCx0ZnQtdC90LUg0LfQsCDQsNGD0YLQvtC80LDRgtGB0LrQviDQtNC+0LLRgNGI0LDQstCw0ZrQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIGlmIFdvcmtPcmRlckFkZCBvciBXb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUgc2hvdWxkIGJlIHBlcm1pdHRlZC4nfSA9CiAgICAgICAgJ9Cc0L7QtNGD0Lsg0LfQsCDQv9GA0L7QstC10YDRgyDQtNCwINC70Lgg0LTQvtC00LDQstCw0ZrQtSDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwINC40LvQuCDQtNC+0LTQsNCy0LDRmtC1INGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAg0LjQtyDRiNCw0LHQu9C+0L3QsCDRgtGA0LXQsdCwINC00LAg0LHRg9C00LUg0LTQvtC30LLQvtGZ0LXQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIENBQiBtZW1iZXJzLid9ID0gJ9Cc0L7QtNGD0Lsg0LfQsCDQv9GA0L7QstC10YDRgyDRh9C70LDQvdC+0LLQsCDQodCe0J8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgYWdlbnQuJ30gPSAn0JzQvtC00YPQuyDQt9CwINC/0YDQvtCy0LXRgNGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgYnVpbGRlci4nfSA9ICfQnNC+0LTRg9C7INC30LAg0L/RgNC+0LLQtdGA0YMg0LPRgNCw0LTQuNGC0LXRmdCwINC/0YDQvtC80LXQvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGNoYW5nZSBtYW5hZ2VyLid9ID0gJ9Cc0L7QtNGD0Lsg0LfQsCDQv9GA0L7QstC10YDRgyDRg9C/0YDQsNCy0ZnQsNGH0LAg0L/RgNC+0LzQtdC90LDQvNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIHdvcmtvcmRlciBhZ2VudC4nfSA9ICfQnNC+0LTRg9C7INC30LAg0L/RgNC+0LLQtdGA0YMg0L7Qv9C10YDQsNGC0LXRgNCwINGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIG5vIHdvcmtvcmRlciBhZ2VudCBpcyBzZXQuJ30gPSAn0JzQvtC00YPQuyDQt9CwINC/0YDQvtCy0LXRgNGDINC00LAg0LvQuCDRmNC1INC+0LTRgNC10ZLQtdC9INC+0L/QtdGA0LDRgtC10YAg0LfQsCDRgNCw0LTQvdC4INC90LDQu9C+0LMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIHRoZSBhZ2VudCBpcyBjb250YWluZWQgaW4gdGhlIGNvbmZpZ3VyZWQgbGlzdC4nfSA9CiAgICAgICAgJ9Cc0L7QtNGD0Lsg0LfQsCDQv9GA0L7QstC10YDRgyDQtNCwINC70Lgg0YHQtSDQvtC/0LXRgNCw0YLQtdGAINC90LDQu9Cw0LfQuCDRgyDQutC+0L3RhNC40LPRg9GA0LjRgdCw0L3QvtGYINC70LjRgdGC0LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGEgbGluayB0byBjcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4gVGhlIHRpY2tldCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgbGlua2VkIHdpdGggdGhlIG5ldyBjaGFuZ2UuJ30gPQogICAgICAgICfQnNC+0LTRg9C7INC30LAg0L/RgNC40LrQsNC3INCy0LXQt9C1INC30LAg0LrRgNC10LjRgNCw0ZrQtSDQv9GA0L7QvNC10L3QtSDQuNC3INC+0LLQvtCzINGC0LjQutC10YLQsC4g0KLQuNC60LXRgiDRm9C1INCw0YPRgtC+0LzQsNGC0YHQutC4INCx0LjRgtC4INC/0L7QstC10LfQsNC9INGB0LAg0L3QvtCy0L7QvCDQv9GA0L7QvNC10L3QvtC8Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIFRpbWUgU2xvdC4nfSA9ICfQn9C+0LzQtdGA0Lgg0LLRgNC10LzQtdC90YHQutC4INGC0LXRgNC80LjQvS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBhbGwgd29ya29yZGVycyBpbiB0aW1lLid9ID0gJ9Cf0L7QvNC10YDQuCDRgdCy0LUg0YDQsNC00L3QtSDQvdCw0LvQvtCz0LUg0YMg0LLRgNC10LzQtdC90YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyAoZnJvbSB0ZW1wbGF0ZSknfSA9ICfQndC+0LLQviAo0L7QtCDRiNCw0LHQu9C+0L3QsCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSB1c2VycyBvZiB0aGVzZSBncm91cHMgaGF2ZSB0aGUgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRpY2tldCB0eXBlcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiIGlmIHRoZSBmZWF0dXJlICJUaWNrZXQ6OkFjbDo6TW9kdWxlIyMjMjAwLVRpY2tldDo6QWNsOjpNb2R1bGUiIGlzIGVuYWJsZWQuJ30gPQogICAgICAgICfQodCw0LzQviDQutC+0YDQuNGB0L3QuNGG0Lgg0L7QstC40YUg0LPRgNGD0L/QsCDQuNC80LDRm9C1INC00L7Qt9Cy0L7Qu9GDINC30LAg0LrQvtGA0LjRiNGb0LXRmtC1INGC0LjQv9C+0LLQsCDRgtC40LrQtdGC0LAg0LTQtdGE0LjQvdC40YHQsNC90LjRhSDRgyAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiDRg9C60L7Qu9C40LrQviDRmNC1INGE0YPQvdC60YbQuNGY0LAgIlRpY2tldDo6QWNsOjpNb2R1bGUjIyMyMDAtVGlja2V0OjpBY2w6Ok1vZHVsZSIg0L7QvNC+0LPRg9Gb0LXQvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIGFsbCBDaGFuZ2VzLid9ID0gJ9Cf0YDQtdCz0LvQtdC0INGB0LLQuNGFINC/0YDQvtC80LXQvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQSVInfSA9ICfQoNCf0KEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldyknfSA9ICfQoNCf0KEgKNGA0LXRhtC10L3Qt9C40ZjQsCDQv9C+0YHQu9C1INGB0L/RgNC+0LLQvtGS0LXRmtCwKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQU0EnfSA9ICfQn9CU0KEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIFVzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFzayBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNC4INC30LAgVXNlckNyZWF0ZVdvcmtPcmRlck5leHRNYXNrINC+0LHRmNC10LrQsNGCINGDINC/0YDQuNC60LDQt9GDINC/0L7QtNC10YjQsNCy0LDRmtCwINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY2hhbmdlcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0YHRgtGA0LDQvdC40YbQsCAo0L3QsCDQutC+0ZjQuNC80LAg0YHRgyDQv9GA0L7QvNC10L3QtSDQstC40LTRmdC40LLQtSkg0YHQvNCw0ZrQtdC90L7QsyDQv9GA0LXQs9C70LXQtNCwINGC0LjQutC10YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJlc2VudHMgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNob3cgdGhlIGludm9sdmVkIHBlcnNvbnMgaW4gYSBjaGFuZ2UsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBjaGFuZ2UgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CjINC80LXQvdC40ZjRgyDQv9GA0LjQutCw0LfRg9GY0LUg0LLQtdC30YMg0LrQvtGY0LAg0L7QvNC+0LPRg9Gb0LDQstCwINC/0YDQuNC60LDQtyDQvtGB0L7QsdCwINGD0LrRmdGD0YfQtdC90LjRhSDRgyDQv9GA0L7QvNC10L3RgyAg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIGNoYW5nZS4nfSA9ICfQntC00YjRgtCw0LzQv9Cw0Zgg0L/RgNC+0LzQtdC90YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoZSB3b3Jrb3JkZXIuJ30gPSAn0J7QtNGI0YLQsNC80L/QsNGYINGA0LDQtNC90Lgg0L3QsNC70L7Qsy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5J30gPSAn0J/RgNC+0ZjQtdC60YLQvtCy0LDQvdCwINC00L7RgdGC0YPQv9C90L7RgdGCINGB0LXRgNCy0LjRgdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSAoUFNBKSd9ID0gJ9Cf0YDQvtGY0LXQutGC0L7QstCw0L3QsCDQtNC+0YHRgtGD0L/QvdC+0YHRgiDRgdC10YDQstC40YHQsCAo0J/QlNChKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHkgKFBTQSkgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb2YgYXBwcm92ZWQgY2hhbmdlcyBhbmQgdGhlaXIgc2VydmljZXMuJ30gPQogICAgICAgICfQn9GA0L7RmNC10LrRgtC+0LLQsNC90LAg0LTQvtGB0YLRg9C/0L3QvtGB0YIg0YHQtdGA0LLQuNGB0LAgKNCf0JTQoSkg0L/RgNC+0LzQtdC90LAuINCf0YDQtdCz0LvQtdC0INC+0LTQvtCx0YDQtdC90LjRhSDQv9GA0L7QvNC10L3QsCDQuCDRmdC40YXQvtCy0LjRhSDRgdC10YDQstC40YHQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyBpbiBvcmRlciBmb3IgYW4gYWdlbnQgdG8gdGFrZSBhIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJ9Cf0L7RgtGA0LXQsdC90LAg0L/RgNCw0LLQsCDQt9CwINC00L7QtNCw0LLQsNGa0LUg0YDQtdC00L7RgdC70LXQtNCwINGA0LDQtNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGFjY2VzcyB0aGUgb3ZlcnZpZXcgb2YgYWxsIGNoYW5nZXMuJ30gPSAn0J/QvtGC0YDQtdCx0L3QsCDQv9GA0LDQstCwINC30LAg0L/RgNC40YHRgtGD0L8g0L/RgNC10LPQu9C10LTRgyDRgdCy0LjRhSDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhZGQgYSB3b3Jrb3JkZXIuJ30gPSAn0J/QvtGC0YDQtdCx0L3QsCDQv9GA0LDQstCwINC30LAg0LTQvtC00LDQstCw0ZrQtSDRgNCw0LTQvdC40YUg0L3QsNC70L7Qs9CwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNoYW5nZSB0aGUgd29ya29yZGVyIGFnZW50Lid9ID0gJ9Cf0L7RgtGA0LXQsdC90LAg0L/RgNCw0LLQsCDQt9CwINC40LfQvNC10L3RgyDQvtC/0LXRgNCw0YLQtdGA0LAg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlLid9ID0gJ9Cf0L7RgtGA0LXQsdC90LAg0L/RgNCw0LLQsCDQt9CwINC60YDQtdC40YDQsNGa0LUg0YjQsNCx0LvQvtC90LAg0L7QtCDQv9GA0L7QvNC10L3QtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlc1wnIENBQi4nfSA9CiAgICAgICAgJ9Cf0L7RgtGA0LXQsdC90LAg0L/RgNCw0LLQsCDQt9CwINC60YDQtdC40YDQsNGa0LUg0YjQsNCx0LvQvtC90LAg0L7QtCDQv9GA0L7QvNC10L3QtSDQodCe0J8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIHdvcmtvcmRlci4nfSA9ICfQn9C+0YLRgNC10LHQvdCwINC/0YDQsNCy0LAg0LfQsCDQutGA0LXQuNGA0LDRmtC1INGI0LDQsdC70L7QvdCwINC+0LQg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgY2hhbmdlcyBmcm9tIHRlbXBsYXRlcy4nfSA9ICfQn9C+0YLRgNC10LHQvdCwINC/0YDQsNCy0LAg0LfQsCDQutGA0LXQuNGA0LDRmtC1INC/0YDQvtC80LXQvdCwINC+0LQg0YjQsNCx0LvQvtC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMuJ30gPSAn0J/QvtGC0YDQtdCx0L3QsCDQv9GA0LDQstCwINC30LAg0LrRgNC10LjRgNCw0ZrQtSDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgYSB0ZW1wbGF0ZS4nfSA9ICfQn9C+0YLRgNC10LHQvdCwINC/0YDQsNCy0LAg0LfQsCDQsdGA0LjRgdCw0ZrQtSDRiNCw0LHQu9C+0L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgYSB3b3Jrb3JkZXIuJ30gPSAn0J/QvtGC0YDQtdCx0L3QsCDQv9GA0LDQstCwINC30LAg0LHRgNC40YHQsNGa0LUg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY2hhbmdlcy4nfSA9ICfQn9C+0YLRgNC10LHQvdCwINC/0YDQsNCy0LAg0LfQsCDQsdGA0LjRgdCw0ZrQtSDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgdGVtcGxhdGUuJ30gPSAn0J/QvtGC0YDQtdCx0L3QsCDQv9GA0LDQstCwINC30LAg0YPRgNC10ZLQtdGa0LUg0YjQsNCx0LvQvtC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHdvcmtvcmRlci4nfSA9ICfQn9C+0YLRgNC10LHQvdCwINC/0YDQsNCy0LAg0LfQsCDRg9GA0LXRktC10ZrQtSDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgY2hhbmdlcy4nfSA9ICfQn9C+0YLRgNC10LHQvdCwINC/0YDQsNCy0LAg0LfQsCDRg9GA0LXRktC10ZrQtSDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAn0J/QvtGC0YDQtdCx0L3QsCDQv9GA0LDQstCwINC30LAg0YPRgNC10ZLQtdGa0LUg0YPRgdC70L7QstCwINC30LAg0L/RgNC+0LzQtdC90LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29udGVudCBvZiBhIHRlbXBsYXRlLid9ID0gJ9Cf0L7RgtGA0LXQsdC90LAg0L/RgNCw0LLQsCDQt9CwINGD0YDQtdGS0LXRmtC1INGB0LDQtNGA0LbQsNGY0LAg0YjQsNCx0LvQvtC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgaW52b2x2ZWQgcGVyc29ucyBvZiBhIGNoYW5nZS4nfSA9CiAgICAgICAgJ9Cf0L7RgtGA0LXQsdC90LAg0L/RgNCw0LLQsCDQt9CwINGD0YDQtdGS0LXRmtC1INC+0YHQvtCx0LAg0YPQutGZ0YPRh9C10L3QuNGFINGDINC/0YDQvtC80LXQvdGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIG1vdmUgY2hhbmdlcyBpbiB0aW1lLid9ID0gJ9Cf0L7RgtGA0LXQsdC90LAg0L/RgNCw0LLQsCDQt9CwINC/0L7QvNC10YDQsNGa0LUg0L/RgNC+0LzQtdC90LAg0YMg0LLRgNC10LzQtdC90YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcHJpbnQgYSBjaGFuZ2UuJ30gPSAn0J/QvtGC0YDQtdCx0L3QsCDQv9GA0LDQstCwINC30LAg0YjRgtCw0LzQv9GDINC/0YDQvtC80LXQvdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHJlc2V0IGNoYW5nZXMuJ30gPSAn0J/QvtGC0YDQtdCx0L3QsCDQv9GA0LDQstCwINC30LAg0L/QvtC90LjRiNGC0LXRmtC1INC/0YDQvtC80LXQvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgYSB3b3Jrb3JkZXIuJ30gPSAn0J/QvtGC0YDQtdCx0L3QsCDQv9GA0LDQstCwINC30LAg0L/RgNC40LrQsNC3INGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBjaGFuZ2VzLid9ID0gJ9Cf0L7RgtGA0LXQsdC90LAg0L/RgNCw0LLQsCDQt9CwINC/0YDQuNC60LDQtyDQv9GA0L7QvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyBhIENBQiBtZW1iZXIuJ30gPQogICAgICAgICfQn9C+0YLRgNC10LHQvdCwINC/0YDQsNCy0LAg0LfQsCDQv9GA0LjQutCw0Lcg0LvQuNGB0YLQtSDQv9GA0L7QvNC10L3QsCDQs9C00LUg0ZjQtSDQutC+0YDQuNGB0L3QuNC6INGH0LvQsNC9INCh0J7Qny4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPQogICAgICAgICfQn9C+0YLRgNC10LHQvdCwINC/0YDQsNCy0LAg0LfQsCDQv9GA0LjQutCw0Lcg0LvQuNGB0YLQtSDQv9GA0L7QvNC10L3QsCDQs9C00LUg0LrQvtGA0LjRgdC90LjQuiDRg9C/0YDQsNCy0ZnQsCDQv9GA0L7QvNC10L3QvtC8Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgb3ZlcnZpZXcgb3ZlciBhbGwgdGVtcGxhdGVzLid9ID0gJ9Cf0L7RgtGA0LXQsdC90LAg0L/RgNCw0LLQsCDQt9CwINC/0YDQuNC60LDQtyDQv9GA0LXQs9C70LXQtNCwINGB0LLQuNGFINGI0LDQsdC70L7QvdCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGNvbmRpdGlvbnMgb2YgY2hhbmdlcy4nfSA9ICfQn9C+0YLRgNC10LHQvdCwINC/0YDQsNCy0LAg0LfQsCDQv9GA0LjQutCw0Lcg0YPRgdC70L7QstCwINC30LAg0L/RgNC+0LzQtdC90LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZS4nfSA9ICfQn9C+0YLRgNC10LHQvdCwINC/0YDQsNCy0LAg0LfQsCDQv9GA0LjQutCw0Lcg0LjRgdGC0L7RgNC40ZjQsNGC0LAg0L/RgNC+0LzQtdC90LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlci4nfSA9ICfQn9C+0YLRgNC10LHQvdCwINC/0YDQsNCy0LAg0LfQsCDQv9GA0LjQutCw0Lcg0LjRgdGC0L7RgNC40ZjQsNGC0LAg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSBjaGFuZ2UuJ30gPSAn0J/QvtGC0YDQtdCx0L3QsCDQv9GA0LDQstCwINC30LAg0LTQtdGC0LDRmdCw0L0g0L/RgNC40LrQsNC3INC40YHRgtC+0YDQuNGY0LDRgtCwINC/0YDQvtC80LXQvdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgem9vbSBvZiBhIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJ9Cf0L7RgtGA0LXQsdC90LAg0L/RgNCw0LLQsCDQt9CwINC00LXRgtCw0ZnQsNC9INC/0YDQuNC60LDQtyDQuNGB0YLQvtGA0LjRmNCw0YLQsCDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBDaGFuZ2UgU2NoZWR1bGUuJ30gPSAn0J/QvtGC0YDQtdCx0L3QsCDQv9GA0LDQstCwINC30LAg0L/RgNC40LrQsNC3INC70LjRgdGC0LUg0J/Qu9Cw0L3QtdGA0LAg0L/RgNC+0LzQtdC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2UgUFNBLid9ID0gJ9Cf0L7RgtGA0LXQsdC90LAg0L/RgNCw0LLQsCDQt9CwINC/0YDQuNC60LDQtyDQu9C40YHRgtC1INC/0YDQvtC80LXQvdCwINCf0JTQoS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIGNoYW5nZXMgd2l0aCBhbiB1cGNvbWluZyBQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KS4nfSA9CiAgICAgICAgJ9Cf0L7RgtGA0LXQsdC90LAg0L/RgNCw0LLQsCDQt9CwINC/0YDQuNC60LDQtyDQu9C40YHRgtC1INC/0YDQvtC80LXQvdCwINGB0LAg0L/RgNC10LTRgdGC0L7RmNC10ZvQuNC8INCg0J/QoSAo0KDQtdGG0LXQvdC30LjRmNCwINCf0L7RgdC70LUg0KHQv9GA0L7QstC+0ZLQtdGa0LApLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIGNoYW5nZXMuJ30gPSAn0J/QvtGC0YDQtdCx0L3QsCDQv9GA0LDQstCwINC30LAg0L/RgNC40LrQsNC3INC70LjRgdGC0LUg0YHQvtC/0YHRgtCy0LXQvdC40YUg0L/RgNC+0LzQtdC90LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBvd24gd29ya29yZGVycy4nfSA9ICfQn9C+0YLRgNC10LHQvdCwINC/0YDQsNCy0LAg0LfQsCDQv9GA0LjQutCw0Lcg0LvQuNGB0YLQtSDRgdC+0L/RgdGC0LLQtdC90LjRhSDRgNCw0LTQvdC40YUg0L3QsNC70L7Qs9CwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHdyaXRlIGEgcmVwb3J0IGZvciB0aGUgd29ya29yZGVyLid9ID0gJ9Cf0L7RgtGA0LXQsdC90LAg0L/RgNCw0LLQsCDQt9CwINC/0LjRgdGa0LUg0LjQt9Cy0LXRiNGC0LDRmNCwINC30LAg0YDQsNC00L3QuCDQvdCw0LvQvtCzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuJ30gPSAn0KDQtdGB0LXRgiDQv9GA0L7QvNC10L3QtSDQuCDRmtC10L3QuNGFINGA0LDQtNC90LjRhSDQvdCw0LvQvtCz0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuJ30gPSAn0KDQtdGB0LXRgiDQv9GA0L7QvNC10L3QtSDQuCDRmtC10L3QuNGFINGA0LDQtNC90LjRhSDQvdCw0LvQvtCz0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biB0YXNrIHRvIGNoZWNrIGlmIHNwZWNpZmljIHRpbWVzIGhhdmUgYmVlbiByZWFjaGVkIGluIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICfQn9C+0LrRgNC10L3QuCDQt9Cw0LTQsNGC0LDQuiDRgNCw0LTQuCDQv9GA0L7QstC10YDQtSDQtNCwINC70Lgg0YHRgyDRgyDQv9GA0L7QvNC10L3QsNC80LAg0Lgg0YDQsNC00L3QuNC8INC90LDQu9C+0LfQuNC80LAg0LTQvtGB0YLQuNCz0L3Rg9GC0LAg0L7QtNGA0LXRktC10L3QsCDQstGA0LXQvNC10L3QsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZS4nfSA9ICfQodCw0YfRg9Cy0LDRmCDQv9GA0L7QvNC10L3RgyDQutCw0L4g0YjQsNCx0LvQvtC9Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlLid9ID0gJ9Ch0LDRh9GD0LLQsNGYINGA0LDQtNC90Lgg0L3QsNC70L7QsyDQutCw0L4g0YjQsNCx0LvQvtC9Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2hlZHVsZSd9ID0gJ9Cg0LDRgdC/0L7RgNC10LQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2NyZWVuIGFmdGVyIGNyZWF0aW5nIGEgd29ya29yZGVyJ30gPSAn0JXQutGA0LDQvSDQv9C+0YHQu9C1INC60YDQtdC40YDQsNGa0LAg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ2hhbmdlcyd9ID0gJ9Cf0YDQtdGC0YDQsNC20Lgg0L/RgNC+0LzQtdC90LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMuJ30gPSAn0J/RgNC10YLRgNCw0LbQuCDQv9GA0L7QvNC10L3QtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY2hhbmdlIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY2hhbmdlIG51bWJlciwgdGhlIFN5c3RlbUlEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZCB3aXRoIFN5c3RlbUlELmNvdW50ZXIgZm9ybWF0IChlLmcuIDEwMDExOCwgMTAwMTE5KS4gV2l0aCAiRGF0ZSIsIHRoZSBjaGFuZ2UgbnVtYmVycyB3aWxsIGJlIGdlbmVyYXRlZCBieSB0aGUgY3VycmVudCBkYXRlIGFuZCBhIGNvdW50ZXI7IHRoaXMgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuY291bnRlciwgZS5nLiAyMDEwMDYyNDAwMDAxLCAyMDEwMDYyNDAwMDAyLiBXaXRoICJEYXRlQ2hlY2tzdW0iLCB0aGUgY291bnRlciB3aWxsIGJlIGFwcGVuZGVkIGFzIGNoZWNrc3VtIHRvIHRoZSBzdHJpbmcgb2YgZGF0ZSBwbHVzIHRoZSBTeXN0ZW1JRC4gVGhlIGNoZWNrc3VtIHdpbGwgYmUgcm90YXRlZCBvbiBhIGRhaWx5IGJhc2lzLiBUaGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LlN5c3RlbUlELkNvdW50ZXIuQ2hlY2tTdW0sIGUuZy4gMjAxMDA2MjQxMDAwMDAxNywgMjAxMDA2MjQxMDAwMDAyNi4nfSA9CiAgICAgICAgJ9CR0LjRgNCwINC80L7QtNGD0Lsg0LfQsCDQs9C10L3QtdGA0LjRgdCw0ZrQtSDQsdGA0L7RmNCwINC/0YDQvtC80LXQvdCwLiAiQXV0b0luY3JlbWVudCIg0YPQstC10ZvQsNCy0LAg0LHRgNC+0Zgg0L/RgNC+0LzQtdC90LAsIFN5c3RlbUlEINC4INCx0YDQvtGY0LDRhyDRgdC1INC60L7RgNC40YHRgtC1INGDIFN5c3RlbUlELtCx0YDQvtGY0LDRhyDRhNC+0YDQvNCw0YLRgyAo0L3Qv9GALiAxMDAxMTgsIDEwMDExOSkuINCh0LAgIkRhdGUiINCx0YDQvtGY0LXQstC4INC/0YDQvtC80LXQvdCwINGb0LUg0LHQuNGC0Lgg0LPQtdC90LXRgNC40YHQsNC90Lgg0L/RgNC10LrQviDRgtGA0LXQvdGD0YLQvdC+0LMg0LTQsNGC0YPQvNCwINC4INCx0YDQvtGY0LDRh9CwLiDQpNC+0YDQvNCw0YIg0ZvQtSDQuNC30LPQu9C10LTQsNGC0Lgg0LrQsNC+INCz0L7QtNC40L3QsC7QvNC10YHQtdGGLtC00LDQvS7QsdGA0L7RmNCw0YcgKNC90L/RgC4gMjAxMDA2MjQwMDAwMSwgMjAxMDA2MjQwMDAwMikuINCh0LAgIkRhdGVDaGVja3N1bSIg0LHRgNC+0ZjQsNGHINGb0LUg0LHQuNGC0Lgg0LTQvtC00LDRgiDQutCw0L4g0LrQvtC90YLRgNC+0LvQvdC4INC30LHQuNGAINC90LjQt9GDINGB0LDRh9C40ZrQtdC90L7QvCDQvtC0INC00LDRgtGD0LzQsCDQuCBTeXN0ZW1JRC4g0JrQvtC90YLRgNC+0LvQvdC4INC30LHQuNGAINGb0LUg0YHQtSDRgdC80LXRmtC40LLQsNGC0Lgg0L3QsCDQtNC90LXQstC90L7QvCDQvdC40LLQvtGDLiDQpNC+0YDQvNCw0YIg0LjQt9Cz0LvQtdC00LAg0L7QstCw0LrQvjog0LPQvtC00LjQvdCwLtC80LXRgdC10YYu0LTQsNC9LlN5c3RlbUlELtCx0YDQvtGY0LDRhy7QutC+0L3RgtGA0L7Qu9C90Lhf0LfQsdC40YAsINC90L/RgC4gMjAxMDA2MjQxMDAwMDAxNywgMjAwMjA3MDExMDEwMTUzNS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBhZ2VudCBmb3IgdGhlIHdvcmtvcmRlci4nfSA9ICfQntC00YDQtdC00Lgg0L7Qv9C10YDQsNGC0LXRgNCwINC30LAg0YDQsNC00L3QuCDQvdCw0LvQvtCzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3RgyDQstC40YHQuNC90YMg0YDQtdC00LAgKNGDINC/0LjQutGB0LXQu9C40LzQsCkgSFRNTCDQv9C+0ZnQsCDRgyBBZ2VudElUU01DaGFuZ2Vab29tINC4IEFnZW50SVRTTVdvcmtPcmRlclpvb20uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50SVRTTUNoYW5nZVpvb20gYW5kIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJ30gPQogICAgICAgICfQlNC10YTQuNC90LjRiNC1INC80LDQutGB0LjQvNCw0LvQvdGDINCy0LjRgdC40L3RgyDRgNC10LTQsCAo0YMg0L/QuNC60YHQtdC70LjQvNCwKSBIVE1MINC/0L7RmdCwINGDIEFnZW50SVRTTUNoYW5nZVpvb20g0LggQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgbWluaW1hbCBjaGFuZ2UgY291bnRlciBzaXplIChpZiAiQXV0b0luY3JlbWVudCIgd2FzIHNlbGVjdGVkIGFzIElUU01DaGFuZ2U6Ok51bWJlckdlbmVyYXRvcikuIERlZmF1bHQgaXMgNSwgdGhpcyBtZWFucyB0aGUgY291bnRlciBzdGFydHMgZnJvbSAxMDAwMC4nfSA9CiAgICAgICAgJ9Cf0L7QtNC10YjQsNCy0LAg0LzQuNC90LjQvNCw0LvQvdGDINCy0LXQu9C40YfQuNC90YMg0LHRgNC+0ZjQsNGH0LAg0L/RgNC+0LzQtdC90LAgKCDQsNC60L4g0ZjQtSDQuNC30LDQsdGA0LDQvSDigJ7QvtC/0LXRgNCw0YLQvtGAINGD0LLQtdGb0LDRmtCw4oCdINC60LDQviDigJ5JVFNNINCf0YDQvtC80LXQvdCwOjrQk9C10L3QtdGA0LDRgtC+0YAg0LHRgNC+0ZjQtdCy0LDigJ0pLiDQn9C+0LTRgNCw0LfRg9C80LXQstCw0L3QviDRmNC1IDUsINGI0YLQviDQt9C90LDRh9C4INC00LAg0LHRgNC+0ZjQsNGHINC/0L7Rh9C40ZrQtSDQvtC0IDEwMDAwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHVwIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciBjaGFuZ2VzLid9ID0gJ9Cf0L7QtNC10YHQuCDQvNCw0YjQuNC90YMg0YHRgtCw0ZrQsCDQt9CwINC/0YDQvtC80LXQvdC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHVwIHRoZSBzdGF0ZSBtYWNoaW5lIGZvciB3b3Jrb3JkZXJzLid9ID0gJ9Cf0L7QtNC10YHQuCDQvNCw0YjQuNC90YMg0YHRgtCw0ZrQsCDQt9CwINGA0LDQtNC90LUg0L3QsNC70L7Qs9C1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGNoZWNrYm94IGluIHRoZSBBZ2VudElUU01Xb3JrT3JkZXJFZGl0IHNjcmVlbiB0aGF0IGRlZmluZXMgaWYgdGhlIHRoZSBmb2xsb3dpbmcgd29ya29yZGVycyBzaG91bGQgYWxzbyBiZSBtb3ZlZCBpZiBhIHdvcmtvcmRlciBpcyBtb2RpZmllZCBhbmQgdGhlIHBsYW5uZWQgZW5kIHRpbWUgaGFzIGNoYW5nZWQuJ30gPQogICAgICAgICfQn9GA0LjQutCw0LfRg9GY0LUg0L/QvtGZ0LUg0LfQsCDQv9C+0YLQstGA0LTRgyDRgyDQtdC60YDQsNC90YMgQWdlbnRJVFNNV29ya09yZGVyRWRpdCDQutC+0ZjQtSDQtNC10YTQuNC90LjRiNC1INC00LAg0LvQuCDRm9C1INGB0LvQtdC00LXRm9C4INGA0LDQtNC90Lgg0L3QsNC70L7Qt9C4INGC0LDQutC+0ZLQtSDQsdC40YLQuCDQv9GA0LXQvNC10YjRgtC10L3QuCDRg9C60L7Qu9C40LrQviDRmNC1INGA0LDQtNC90Lgg0L3QsNC70L7QsyDQuNC30LzQtdGa0LXQvSDQuCDQv9C70LDQvdC40YDQsNC90L4g0LLRgNC10LzQtSDQt9Cw0LLRgNGI0LXRgtC60LAg0L/RgNC+0LzQtdGa0LXQvdC+Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgY2hhbmdpbmcgdGhlIHdvcmtvcmRlciBhZ2VudCwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KMg0LzQtdC90LjRmNGDINC/0YDQuNC60LDQt9GD0ZjQtSDQstC10LfRgyDQutC+0ZjQsCDQvtC80L7Qs9GD0ZvQsNCy0LAg0LjQt9C80LXQvdGDINC+0L/QtdGA0LDRgtC10YDQsCDQt9CwINGA0LDQtNC90Lgg0L3QsNC70L7Qsywg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGC0L7QsyDQvdCw0LvQvtCz0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZGVmaW5pbmcgYSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZSBpbiB0aGUgem9vbSB2aWV3IG9mIHRoZSBjaGFuZ2UsIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoyDQvNC10L3QuNGY0YMg0L/RgNC40LrQsNC30YPRmNC1INCy0LXQt9GDINC60L7RmNCwINC+0LzQvtCz0YPRm9Cw0LLQsCDQtNC10YTQuNC90LjRgdCw0ZrQtSDQv9GA0L7QvNC10L3QtSDQutCw0L4g0YjQsNCx0LvQvtC90LAg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgd29ya29yZGVyIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgd29ya29yZGVyLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KMg0LzQtdC90LjRmNGDINC/0YDQuNC60LDQt9GD0ZjQtSDQstC10LfRgyDQutC+0ZjQsCDQvtC80L7Qs9GD0ZvQsNCy0LAg0LTQtdGE0LjQvdC40YHQsNGa0LUg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCDQutCw0L4g0YjQsNCx0LvQvtC90LAg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGVkaXRpbmcgdGhlIHJlcG9ydCBvZiBhIHdvcmtvcmRlciwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KMg0LzQtdC90LjRmNGDINC/0YDQuNC60LDQt9GD0ZjQtSDQstC10LfRgyDQutC+0ZjQsCDQvtC80L7Qs9GD0ZvQsNCy0LAg0LjQt9C80LXQvdGDINC40LfQstC10YjRgtCw0ZjQsCDQt9CwINGA0LDQtNC90Lgg0L3QsNC70L7Qsywg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGC0L7QsyDQvdCw0LvQvtCz0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNoYW5nZSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoyDQvNC10L3QuNGY0YMg0L/RgNC40LrQsNC30YPRmNC1INCy0LXQt9GDINC60L7RmNCwINC+0LzQvtCz0YPRm9Cw0LLQsNC/0L7QstC10LfQuNCy0LDRmtC1INC/0YDQvtC80LXQvdC1INGB0LAg0LTRgNGD0LPQuNC8INC+0LHRmNC10LrRgtC+0Lwg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINC/0YDQvtC80LXQvdC1INGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSB3b3Jrb3JkZXIgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoyDQvNC10L3QuNGY0YMg0L/RgNC40LrQsNC30YPRmNC1INCy0LXQt9GDINC60L7RmNCwINC+0LzQvtCz0YPRm9Cw0LLQsCDQv9C+0LLQtdC30LjQstCw0ZrQtSDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwINGB0LAg0LTRgNGD0LPQuNC8INC+0LHRmNC10LrRgtC+0Lwg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGC0L7QsyDQvdCw0LvQvtCz0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbW92aW5nIHRoZSB0aW1lIHNsb3Qgb2YgYSBjaGFuZ2UgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KMg0LzQtdC90LjRmNGDINC/0YDQuNC60LDQt9GD0ZjQtSDQstC10LfRgyDQutC+0ZjQsCDQvtC80L7Qs9GD0ZvQsNCy0LAg0L/QvtC80LXRgNCw0ZrQtSDQstGA0LXQvNC10L3RgdC60L7QsyDRgtC10YDQvNC40L3QsCDQv9GA0L7QvNC10L3QtSDQvdCwINC00LXRgtCw0ZnQvdC+0Lwg0L/RgNC40LrQsNC30YMg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdGFraW5nIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoyDQvNC10L3QuNGY0YMg0L/RgNC40LrQsNC30YPRmNC1INCy0LXQt9GDINC60L7RmNCwINC+0LzQvtCz0YPRm9Cw0LLQsCDQv9GA0LXRg9C30LjQvNCw0ZrQtSDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwINC90LAg0LTQtdGC0LDRmdC90L7QvCDQv9GA0LjQutCw0LfRgyDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGNvbmRpdGlvbnMgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CjINC80LXQvdC40ZjRgyDQv9GA0LjQutCw0LfRg9GY0LUg0LLQtdC30YMg0LrQvtGY0LAg0L7QvNC+0LPRg9Gb0LDQstCwINC/0YDQuNGB0YLRg9C/INGD0YHQu9C+0LLQuNC80LAg0L/RgNC+0LzQtdC90LUg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KMg0LzQtdC90LjRmNGDINC/0YDQuNC60LDQt9GD0ZjQtSDQstC10LfRgyDQutC+0ZjQsCDQvtC80L7Qs9GD0ZvQsNCy0LAg0L/RgNC40YHRgtGD0L8g0LjRgdGC0L7RgNC40ZjQsNGC0YMg0L/RgNC+0LzQtdC90LUg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KMg0LzQtdC90LjRmNGDINC/0YDQuNC60LDQt9GD0ZjQtSDQstC10LfRgyDQt9CwINC/0YDQuNGB0YLRg9C/INC40YHRgtC+0YDQuNGY0LDRgtGDINGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFkZCBhIHdvcmtvcmRlciBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KMg0LzQtdC90LjRmNGDINC/0YDQuNC60LDQt9GD0ZjQtSDQstC10LfRgyDQt9CwINC00L7QtNCw0LLQsNGa0LUg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCDQvdCwINC00LXRgtCw0ZnQvdC+0Lwg0L/RgNC40LrQsNC30YMg0L/RgNC+0LzQtdC90LUg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CjINC80LXQvdC40ZjRgyDQv9GA0LjQutCw0LfRg9GY0LUg0LLQtdC30YMg0LfQsCDQsdGA0LjRgdCw0ZrQtSDQv9GA0L7QvNC10L3QtSDQvdCwINC00LXRgtCw0ZnQvdC+0Lwg0L/RgNC40LrQsNC30YMg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgd29ya29yZGVyIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CjINC80LXQvdC40ZjRgyDQv9GA0LjQutCw0LfRg9GY0LUg0LLQtdC30YMg0LfQsCDQsdGA0LjRgdCw0ZrQtSDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwINC90LAg0LTQtdGC0LDRmdC90L7QvCDQv9GA0LjQutCw0LfRgyDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoyDQvNC10L3QuNGY0YMg0L/RgNC40LrQsNC30YPRmNC1INCy0LXQt9GDINC30LAg0LjQt9C80LXQvdGDINC/0YDQvtC80LXQvdC1INC90LAg0LTQtdGC0LDRmdC90L7QvCDQv9GA0LjQutCw0LfRgyDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQoyDQvNC10L3QuNGY0YMg0L/RgNC40LrQsNC30YPRmNC1INCy0LXQt9GDINC30LAg0LjQt9C80LXQvdGDINGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CjINC80LXQvdC40ZjRgyDQv9GA0LjQutCw0LfRg9GY0LUg0LLQtdC30YMg0LfQsCDQv9C+0LLRgNCw0YLQsNC6INC90LAg0LTQtdGC0LDRmdC90Lgg0L/RgNC40LrQsNC3INC/0YDQvtC80LXQvdC1INGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIHdvcmtvcmRlciB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CjINC80LXQvdC40ZjRgyDQv9GA0LjQutCw0LfRg9GY0LUg0LLQtdC30YMg0LfQsCDQv9C+0LLRgNCw0YLQsNC6INC90LAg0LTQtdGC0LDRmdC90Lgg0L/RgNC40LrQsNC3INGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcHJpbnQgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CjINC80LXQvdC40ZjRgyDQv9GA0LjQutCw0LfRg9GY0LUg0LLQtdC30YMg0LfQsCDRiNGC0LDQvNC/0LDRmtC1INC/0YDQvtC80LXQvdC1INC90LAg0LTQtdGC0LDRmdC90L7QvCDQv9GA0LjQutCw0LfRgyDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KMg0LzQtdC90LjRmNGDINC/0YDQuNC60LDQt9GD0ZjQtSDQstC10LfRgyDQt9CwINGI0YLQsNC80L/QsNGa0LUg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsCDQvdCwINC00LXRgtCw0ZnQvdC+0Lwg0L/RgNC40LrQsNC30YMg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gcmVzZXQgYSBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CjINC80LXQvdC40ZjRgyDQv9GA0LjQutCw0LfRg9GY0LUg0LLQtdC30YMg0LfQsCDQv9C+0L3QuNGI0YLQsNCy0LDRmtC1INC/0YDQvtC80LXQvdC1INC4INC/0YDQuNC/0LDQtNCw0ZjRg9Gb0LjRhSDRgNCw0LTQvdC40YUg0L3QsNC70L7Qs9CwINC90LAg0LTQtdGC0LDRmdC90L7QvCDQv9GA0LjQutCw0LfRgyDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjaGFuZ2UgaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/RgNC40LrQsNC30YPRmNC1INC40YHRgtC+0YDQuNGY0LDRgiDRgtC40LrQtdGC0LAgKNC+0LHRgNC90YPRgiDRgNC10LTQvtGB0LvQtdC0KSDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRlIE1hY2hpbmUnfSA9ICfQnNCw0YjQuNC90LAg0YHRgtCw0ZrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdG9yZXMgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgaWRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHRlbXBsYXRlIGlkLCB3aGlsZSBhIHVzZXIgaXMgZWRpdGluZyBhIHRlbXBsYXRlLid9ID0KICAgICAgICAn0KfRg9Cy0LAg0LjQtNC10L3RgtC40YTQuNC60LDRhtC40ZjQtSDQv9GA0L7QvNC10L3QsCDQuCDRgNCw0LTQvdC40YUg0L3QsNC70L7Qs9CwINC4INC/0YDQuNC/0LDQtNCw0ZjRg9Gb0LUg0LjQtNC10L3RgtC40YTQuNC60LDRhtC40ZjQtSDRiNCw0LHQu9C+0L3QsCwg0LfQsCDQstGA0LXQvNC1INC00L7QuiDQutC+0YDQuNGB0L3QuNC6INGD0YDQtdGS0YPRmNC1INGI0LDQsdC70L7QvS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXInfSA9ICfQn9GA0LXRg9C30LzQuCDRgNCw0LTQvdC4INC90LDQu9C+0LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXIuJ30gPSAn0J/RgNC10YPQt9C80Lgg0YDQsNC00L3QuCDQvdCw0LvQvtCzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIHRoZSB3b3Jrb3JkZXIuJ30gPSAn0J/RgNC10YPQt9C80Lgg0YDQsNC00L3QuCDQvdCw0LvQvtCzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBPdmVydmlldyd9ID0gJ9Cf0YDQtdCz0LvQtdC0INGI0LDQsdC70L7QvdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlLid9ID0gJ9Co0LDQsdC70L7QvS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY2hhbmdlLCBlLmcuIENoYW5nZSMsIE15Q2hhbmdlIy4gVGhlIGRlZmF1bHQgaXMgQ2hhbmdlIy4nfSA9CiAgICAgICAgJ9CY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC30LAg0L/RgNC+0LzQtdC90YMsINC90L/RgCDQn9GA0L7QvNC10L3QsCMsINCc0L7RmNCw0J/RgNC+0LzQtdC90LAjLiDQn9C+0LTRgNCw0LfRg9C80LXQstCw0L3QviDRmNC1INCf0YDQvtC80LXQvdCwIy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgd29ya29yZGVyLCBlLmcuIFdvcmtvcmRlciMsIE15V29ya29yZGVyIy4gVGhlIGRlZmF1bHQgaXMgV29ya29yZGVyIy4nfSA9CiAgICAgICAgJ9CY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC30LAg0YDQsNC00L3QuCDQvdCw0LvQvtCzLCDQvdC/0YAg0KDQsNC00L3QuNCd0LDQu9C+0LMjLCDQnNC+0ZjQoNCw0LTQvdC40J3QsNC70L7QsyMuINCf0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC+INGY0LUg0KDQsNC00L3QuNCd0LDQu9C+0LMjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIEFDTCBtb2R1bGUgcmVzdHJpY3RzIHRoZSB1c3VhZ2Ugb2YgdGhlIHRpY2tldCB0eXBlcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9uIFwnSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzXCcsIHRvIHVzZXJzIG9mIHRoZSBncm91cHMgYXMgZGVmaW5lZCBpbiAiSVRTTUNoYW5nZTo6UmVzdHJpY3RUaWNrZXRUeXBlczo6R3JvdXBzIi4gQXMgdGhpcyBBQ0wgY291bGQgY29sbGlkZSB3aXRoIG90aGVyIEFDTHMgd2hpY2ggYXJlIGFsc28gcmVsYXRlZCB0byB0aGUgdGlja2V0IHR5cGUsIHRoaXMgc3lzY29uZmlnIG9wdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBzaG91bGQgb25seSBiZSBhY3RpdmF0ZWQgaWYgbmVlZGVkLid9ID0KICAgICAgICAn0J7QstCw0ZggQUNMINC80L7QtNGD0Lsg0L7Qs9GA0LDQvdC40YfQsNCy0LAg0LzQvtCz0YPRm9C90L7RgdGCINC60L7RgNC40YjRm9C10ZrQsCDRgtC40L/QvtCy0LAg0YLQuNC60LXRgtCwINC60L7RmNC4INGB0YMg0LTQtdGE0LjQvdC40YHQsNC90Lgg0YMg0L/QvtC00LXRiNCw0LLQsNGa0YMgXCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXNcJywg0Lgg0YLQviDQutC+0YDQuNGB0L3QuNGG0LjQvNCwINCz0YDRg9C/0LAg0LTQtdGE0LjQvdC40YHQsNC90LjQvCDRgyAiSVRTTUNoYW5nZTo6UmVzdHJpY3RUaWNrZXRUeXBlczo6R3JvdXBzIi4g0JrQsNC60L4g0L7QstCw0ZggQUNMINC80L7QttC1INC00LAg0YHQtSDRgdGD0LrQvtCx0Lgg0YHQsCDQtNGA0YPQs9C40LwgQUNMLdC+0LLQuNC80LAg0LrQvtGY0Lgg0YHQtSDQuNGB0YLQviDQvtC00L3QvtGB0LUg0L3QsCDRgtC40L8g0YLQuNC60LXRgtCwLCDQv9C+0LTQtdGI0LDQstCw0ZrQtSDRmNC1INC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC+INC40YHQutGZ0YPRh9C10L3QviDQuCDRgtGA0LXQsdCwINCz0LAg0LDQutGC0LjQstC40YDQsNGC0Lgg0YHQsNC80L4g0YPQutC+0LvQuNC60L4g0ZjQtSDQvdC10L7Qv9GF0L7QtNC90L4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgU2xvdCd9ID0gJ9CS0YDQtdC80LXQvdGB0LrQuCDRgtC10YDQvNC40L0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHlwZXMgb2YgdGlja2V0cywgd2hlcmUgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgYSBsaW5rIHRvIGFkZCBhIGNoYW5nZSB3aWxsIGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJ9Ci0LjQv9C+0LLQuCDRgtC40LrQtdGC0LAsINC60L7QtCDQutC+0ZjQuNGFINGb0LUg0YMg0LTQtdGC0LDRmdC90L7QvCDQv9GA0LjQutCw0LfRgyDQsdC40YLQuCDQstC40LTRmdC40LLQsCDQstC10LfQsCDQt9CwINC00L7QtNCw0LLQsNGa0LUg0L/RgNC+0LzQtdC90LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgU2VhcmNoJ30gPSAn0J/RgNC10YLRgNCw0LPQsCDQutC+0YDQuNGB0L3QuNC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFkZCAoZnJvbSB0ZW1wbGF0ZSkuJ30gPSAn0JTQvtC00LDRmCDRgNCw0LTQvdC4INC90LDQu9C+0LMgKNC40Lcg0YjQsNCx0LvQvtC90LApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQuJ30gPSAn0JTQvtC00LDRmCDRgNCw0LTQvdC4INC90LDQu9C+0LMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZ2VudC4nfSA9ICfQntC/0LXRgNCw0YLQtdGAINC30LAg0YDQsNC00L3QuCDQvdCw0LvQvtCzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgRGVsZXRlLid9ID0gJ9CR0YDQuNGB0LDRmtC1INGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBFZGl0Lid9ID0gJ9Cj0YDQtdGS0LXRmtC1INGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBIaXN0b3J5IFpvb20uJ30gPSAn0JTQtdGC0LDRmdC4INC40YHRgtC+0YDQuNGY0LDRgtCwINGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBIaXN0b3J5Lid9ID0gJ9CY0YHRgtC+0YDQuNGY0LDRgiDRgNCw0LTQvdC+0LMg0L3QsNC70L7Qs9CwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgUmVwb3J0Lid9ID0gJ9CY0LfQstC10YjRgtCw0Zgg0YDQsNC00L3QvtCzINC90LDQu9C+0LPQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20uJ30gPSAn0JTQtdGC0LDRmdC4INGA0LDQtNC90L7QsyDQvdCw0LvQvtCz0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29uY2UnfSA9ICfRmNC10LTQvdC+0LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVndWxhcmx5J30gPSAn0YDQtdC00L7QstC90L4nOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6c3JfTGF0bl9JVFNNQ2hhbmdlTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNoYW5nZUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRlZ29yeSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ0thdGVnb3JpamEgPC0+IFV0aWNhaiA8LT4gUHJpb3JpdGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENhdGVnb3J5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICdVcHJhdmxqYW5qZSByZXp1bHRhdG9tIHByaW9yaXRldGEga29tYmluYWNpam9tIEthdGVnb3JpamEgPC0+IFV0aWNhai4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ1Jhc3BvZGVsYSBwcmlvcml0ZXRhJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlTWFuYWdlbWVudCBOb3RpZmljYXRpb24gTWFuYWdlbWVudCd9ID0gJ1VwcmF2bGphbmplIG9iYXZlxaF0ZW5qaW1hIHUg4oCeSVRTTeKAnSBVcHJhdmxqYW5qdSBwcm9tZW5hbWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE5vdGlmaWNhdGlvbiBSdWxlJ30gPSAnRG9kYWogcHJhdmlsbyBvYmF2ZcWhdGF2YW5qYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdWxlJ30gPSAnUHJhdmlsbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG5vdGlmaWNhdGlvbiBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnT2JhdmXFoXRlbmplIHRyZWJhIGRhIGltYSBpbWUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQuJ30gPSAnSW1lIGplIG9iYXZlem5vLic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNU3RhdGVNYWNoaW5lCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBTdGF0ZSBNYWNoaW5lJ30gPSAnQWRtaW5pc3RhcmNpamEgbWHFoWluZSBzdGFuamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgY2F0YWxvZyBjbGFzcyEnfSA9ICdJemJvciBrbGFzZSBrYXRhbG9nYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBjYXRhbG9nIGNsYXNzIGlzIHJlcXVpcmVkISd9ID0gJ0tsYXNhIGthdGFsb2dhIGplIG9iYXZlem5hISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnRG9kYWogdHJhbnppY2lqdSBzdGF0dXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLbGFzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgTmFtZSd9ID0gJ05heml2IG9iamVrdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb3ZlciBzdGF0ZSB0cmFuc2l0aW9ucyBmb3InfSA9ICdQcmVnbGVkIHByZWtvIHRyYW56aWNpamUgc3RhdHVzYSB6YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnT2JyacWhaSBvdnUgdHJhbnppY2lqdSBzdGF0dXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ0RvZGFqIG5vdnUgdHJhbnppY2lqdSBzdGF0dXNhIHphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBzdGF0ZSEnfSA9ICdNb2xpbW8gZGEgb2RhYmVyZXRlIHN0YW5qZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhIG5leHQgc3RhdGUhJ30gPSAnTW9saW1vIGRhIG9kYWJlcmV0ZSBzbGVkZcSHZSBzdGFuamUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ1VyZWRpIHRyYW56aWNpanUgc3RhdHVzYSB6YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoZSBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnRGEgbGkgemFpc3RhIMW+ZWxpdGUgZGEgb2JyacWhZXRlIG92dSB0cmFuemljaWp1IHN0YXR1c2E/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDaGFuZ2UnfSA9ICdEb2RhaiBwcm9tZW51JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlJ30gPSAn4oCeSVRTTeKAnSBwcm9tZW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1c3RpZmljYXRpb24nfSA9ICdPcHJhdmRhbmplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lucHV0IGludmFsaWQuJ30gPSAnTmVpc3ByYXZhbiB1bm9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdVdGljYWonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdGVkIERhdGUnfSA9ICdUcmHFvmVuaSBkYXR1bSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgQ2hhbmdlIFRlbXBsYXRlJ30gPSAnSXphYmVyaSDFoWFibG9uIHByb21lbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSB0eXBlJ30gPSAnVGlwIHZyZW1lbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCB0aW1lIHR5cGUuJ30gPSAnTmVpc3ByYXZhbiB0aXAgdnJlbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpbWUnfSA9ICdOb3ZvIHZyZW1lJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VDQUJUZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBDaGFuZ2UgQ0FCIGFzIHRlbXBsYXRlJ30gPSAnU2HEjXV2YWogcHJvbWVudSBTT1Aga2FvIMWhYWJsb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gdG8gaW52b2x2ZWQgcGVyc29ucyBzY3JlZW4nfSA9ICdpZGkgbmEgZWtyYW4gdWtsanXEjWVuaWggb3NvYmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBOYW1lJ30gPSAnUG9ncmXFoW5vIGltZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25zIGFuZCBBY3Rpb25zJ30gPSAnVXNsb3ZpIGkgQWtjaWplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25kaXRpb24nfSA9ICdVc2xvdiBicmlzYW5qYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGNvbmRpdGlvbid9ID0gJ0RvZGFqIG5vdmkgdXNsb3YnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29uZGl0aW9uJ30gPSAnVXJlZGkgdXNsb3YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBhIHZhbGlkIG5hbWUuJ30gPSAnUG90cmVibm8gamUgaXNwcmF2bm8gaW1lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIG5hbWUgaXMgbmVlZGVkLid9ID0gJ05lb3Bob2RubyBqZSB2YcW+ZcSHZSBpbWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lOid9ID0gJ0R1cGxpa2F0IGltZW5hOic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkIGJ5IGFub3RoZXIgY29uZGl0aW9uLid9ID0gJ292byBpbWUgamUgdmXEhyB1cG90cmVibGplbm8gemEgZHJ1Z2kgdXNsb3YuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hdGNoaW5nJ30gPSAnUG9kdWRhcmFuamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW55IGV4cHJlc3Npb24gKE9SKSd9ID0gJ1N2YWtpIGl6cmF6IChPUiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIGV4cHJlc3Npb25zIChBTkQpJ30gPSAnU3ZpIGl6cmF6aSAoQU5EKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHByZXNzaW9ucyd9ID0gJ0l6cmF6aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3Rvcid9ID0gJ0JpcmHEjSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRvcid9ID0gJ09wZXJhdG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBFeHByZXNzaW9uJ30gPSAnT2JyacWhaSBpenJheic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBFeHByZXNzaW9ucyBmb3VuZC4nfSA9ICdOaWplIHByb25hxJFlbiBuaWplZGFuIGl6cmF6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGV4cHJlc3Npb24nfSA9ICdEb2RhaiBub3YgaXpyYXonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEFjdGlvbid9ID0gJ09icmnFoWkgYWtjaWp1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEFjdGlvbnMgZm91bmQuJ30gPSAnTmlqZSBwcm9uYcSRZW5hIG5pamVkbmEgYWtjaWphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGFjdGlvbid9ID0gJ0RvZGFqIG5vdnUgYWtjaWp1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjaGFuZ2U/J30gPSAnRGEgbGkgemFpc3RhIMW+ZWxpdGUgZGEgaXpicmnFoWV0ZSBvdnUgcHJvbWVudT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgJXMlcyd9ID0gJ1VyZWRpICVzJXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgJXMlcyd9ID0gJ0lzdG9yaWphdCBvZCAlcyVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlcid9ID0gJ1JhZG5pIG5hbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgZGV0YWlscyd9ID0gJ1ByaWthxb5pIGRldGFsamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB3b3Jrb3JkZXInfSA9ICdQcmlrYcW+aSByYWRuaSBuYWxvZyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbGVkIGhpc3RvcnkgaW5mb3JtYXRpb24gb2YgJXMnfSA9ICdEZXRhbGpuaSBpc3RvcmlqYXQgemEgJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kaWZpZWQnfSA9ICdQcm9tZW5qZW5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09sZCBWYWx1ZSd9ID0gJ1N0YXJhIHZyZWRub3N0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBWYWx1ZSd9ID0gJ05vdmEgdnJlZG5vc3QnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJbnZvbHZlZCBQZXJzb25zIG9mICVzJXMnfSA9ICdVcmVkaSB1a2xqdcSNZW5lIG9zb2JlIHphICVzJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52b2x2ZWQgUGVyc29ucyd9ID0gJ1VrbGp1xI1lbmUgb3NvYmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlTWFuYWdlcid9ID0gJ1VwcmF2bGphxI0gcHJvbWVuYW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgaW52YWxpZC4nfSA9ICdOZWlzcHJhdmFuIGtvcmlzbmlrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VCdWlsZGVyJ30gPSAnR3JhZGl0ZWxqIHByb21lbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEFkdmlzb3J5IEJvYXJkJ30gPSAnU2F2ZXRvZGF2bmkgb2Rib3IgemEgcHJvbWVuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgVGVtcGxhdGUnfSA9ICdTT1AgxaFhYmxvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHBseSBUZW1wbGF0ZSd9ID0gJ1ByaW1lbmkgxaFhYmxvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXdUZW1wbGF0ZSd9ID0gJ05vdmkgxaFhYmxvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHRoaXMgQ0FCIGFzIHRlbXBsYXRlJ30gPSAnU2HEjXV2YWogb3ZvIGthbyBTT1AgxaFhYmxvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdG8gQ0FCJ30gPSAnRG9kYWogdSBTT1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBVc2VyJ30gPSAnUG9ncmXFoWFuIGtvcmlzbmlrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgQ0FCJ30gPSAnQWt0dWVsbmkgU09QJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ1BvZGXFoWF2YW5qZSBrb250ZWtzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlcyBwZXIgcGFnZSd9ID0gJ1Byb21lbmEgcG8gc3RyYW5pJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgVGl0bGUnfSA9ICdOYXNsb3YgcmFkbm9nIG5hbG9nYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgVGl0bGUnfSA9ICdOYXNsb3YgcHJvbWVuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQnfSA9ICdPcGVyYXRlciB6YSByYWRuaSBuYWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQnVpbGRlcid9ID0gJ0dyYWRpdGVsaiBwcm9tZW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBNYW5hZ2VyJ30gPSAnVXByYXZsamFuamUgcHJvbWVuYW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlcnMnfSA9ICdSYWRuaSBuYWxvemknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFN0YXRlJ30gPSAnU3RhbmplIHByb21lbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFN0YXRlJ30gPSAnU3RhbmplIHJhZG5vZyBuYWxvZ2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFR5cGUnfSA9ICdUaXAgcmFkbm9nIG5hbG9nYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0ZWQgVGltZSd9ID0gJ1RyYcW+ZW5vIHZyZW1lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgU3RhcnQgVGltZSd9ID0gJ1BsYW5pcmFubyB2cmVtZSBwb8SNZXRrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVuZCBUaW1lJ30gPSAnUGxhbmlyYW5vIHZyZW1lIHphdnLFoWV0a2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsIFN0YXJ0IFRpbWUnfSA9ICdTdHZhcm5vIHZyZW1lIHBvxI1ldGthJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBFbmQgVGltZSd9ID0gJ1N0dmFybm8gdnJlbWUgemF2csWhZXRrYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlUmVzZXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byByZXNldCB0aGlzIGNoYW5nZT8nfSA9ICdEYSBsaSB6YWlzdGEgxb5lbGl0ZSBkYSBwb25pxaF0aXRlIG92dSBwcm9tZW51Pyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoZS5nLiAxMCo1MTU1IG9yIDEwNTY1OCopJ30gPSAnKG5wciAxMCo1MTU1IGlsaSAxMDU2NTgqKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQWdlbnQnfSA9ICdPcGVyYXRlciBTT1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS5nLid9ID0gJ25wcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQ3VzdG9tZXInfSA9ICdLbGlqZW50IFNPUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBJbnN0cnVjdGlvbid9ID0gJ1VwdXRzdHZvIElUU00gcmFkbm9nIG5hbG9nYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBSZXBvcnQnfSA9ICdJenZlxaF0YWogSVRTTSByYWRub2cgbmFsb2dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIFByaW9yaXR5J30gPSAnUHJpb3JpdGV0IElUU00gcHJvbWVuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBJbXBhY3QnfSA9ICdVdGljYWogSVRTTSBwcm9tZW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBDYXRlZ29yeSd9ID0gJ0thdGVnb3JpamEgcHJvbWVuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoYmVmb3JlL2FmdGVyKSd9ID0gJyhwcmUvcG9zbGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhiZXR3ZWVuKSd9ID0gJyhpem1lxJF1KSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgQ2hhbmdlIGFzIFRlbXBsYXRlJ30gPSAnU2HEjXV2YWogcHJvbWVudSBrYW8gxaFhYmxvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHRlbXBsYXRlIHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICfFoGFibG9uIHRyZWJhIGRhIGltYSBpbWUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLid9ID0gJ0ltZSDFoWFibG9uYSBqZSBvYmF2ZXpuby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgU3RhdGVzJ30gPSAnUG9uacWhdGkgc3RhbmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ3cml0ZSBvcmlnaW5hbCB0ZW1wbGF0ZSd9ID0gJ1ByZXBpxaFpIHByZWtvIG9yaWdpbmFsbm9nIMWhYWJsb25hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCBjaGFuZ2UnfSA9ICdPYnJpxaFpIG9yaWdpbmFsbnUgcHJvbWVudSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90J30gPSAnUG9tZXJpIHZyZW1lbnNraSB0ZXJtaW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjaWphIG8gcHJvbWVuaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVmZm9ydCd9ID0gJ1BsYW5pcmFuaSBuYXBvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY2NvdW50ZWQgVGltZSd9ID0gJ09icmHEjXVuYXRvIHZyZW1lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbml0aWF0b3IocyknfSA9ICdJbmljaWphdG9yKGkpIHByb21lbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCJ30gPSAnU09QJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1phZG5qaSBwdXQgcHJvbWVuamVubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdQcm9tZW5pbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ1UgcmVkdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gYmxvY2tzLCB5b3UgbWlnaHQgbmVlZCB0byBwcmVzcyBDdHJsIG9yIENtZCBvciBTaGlmdCBrZXkgd2hpbGUgY2xpY2tpbmcgdGhlIGxpbmsgKGRlcGVuZGluZyBvbiB5b3VyIGJyb3dzZXIgYW5kIE9TKS4nfSA9CiAgICAgICAgJ0RhIGJpc3RlIG90dm9yaWxpIHZlemUgdSBzbGVkZcSHaW0gYmxva292aW1hIG9waXNhLCBtb8W+ZGEgxIdldGUgdHJlYmF0aSBkYSBwcml0aXNuZXRlIOKAnkN0cmzigJ0gaWxpIOKAnkNtZOKAnSBpbGkg4oCeU2hpZnTigJ0gdGFzdGVyIGRvayBpc3RvdnJlbWVubyBrbGlrbmV0ZSBuYSB2ZXp1ICh6YXZpc2kgb2QgdmHFoWVnIE9TIGkgcHJlZ2xlZGHEjWEpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnUHJldXptaSBwcmlsb2cnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlRWRpdENBQgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDQUIgVGVtcGxhdGUnfSA9ICdVcmVkaSBTT1AgxaFhYmxvbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBjaGFuZ2UgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICdPdm8gxIdlIGtyZWlyYXRpIG5vdnUgcHJvbWVudSBvZCBvdm9nIMWhYWJsb25hLCBwYSBqZSBtb8W+ZXRlIGl6bWVuaXRpIGkgc2HEjXV2YXRpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmV3IGNoYW5nZSB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciBpdCBoYXMgYmVlbiBzYXZlZCBhcyB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJ05vdmEgcHJvbWVuYSDEh2UgYXV0b21hdHNraSBiaXRpIG9icmlzYW5hLCBrYWQgYnVkZSBzYcSNdXZhbmEga2FvIMWhYWJsb24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgd29ya29yZGVyIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAnT3ZvIMSHZSBrcmVpcmF0aSBub3YgcmFkbmkgbmFsb2cgb2Qgb3ZvZyDFoWFibG9uYSwgcGEgZ2EgbW/FvmV0ZSBpem1lbml0aSBpIHNhxI11dmF0aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB0ZW1wb3JhcnkgY2hhbmdlIHdpbGwgYmUgY3JlYXRlZCB3aGljaCBjb250YWlucyB0aGUgd29ya29yZGVyLid9ID0KICAgICAgICAnQmnEh2Uga3JlaXJhbmEgcHJpdnJlbWVuYSBwcm9tZW5hIGtvamEgc2FkcsW+aSByYWRuaSBuYWxvZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHRlbXBvcmFyeSBjaGFuZ2UgYW5kIG5ldyB3b3Jrb3JkZXIgd2lsbCBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIHdvcmtvcmRlciBoYXMgYmVlbiBzYXZlZCBhcyB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJ1ByaXZyZW1hbmEgcHJvbWVuYSBpIG5vdmkgcmFkbmkgbmFsb2cgxIdlIGF1dG9tYXRza2kgYml0aSBvYnJpc2FuaSwga2FkIHJhZG5pIG5hbG9nIGJ1ZGUgc2HEjXV2YW4ga2FvIMWhYWJsb24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSB3YW50IHRvIHByb2NlZWQ/J30gPSAnRGEgbGkgxb5lbGl0ZSBkYSBuYXN0YXZpdGU/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIElEJ30gPSAnSUQgxaFhYmxvbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb250ZW50J30gPSAnVXJlZGkgc2FkcsW+YWonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGJ5J30gPSAnS3JlaXJhbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYnknfSA9ICdJem1lbmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBUaW1lJ30gPSAnVnJlbWUgcHJvbWVuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRlbXBsYXRlIENvbnRlbnQnfSA9ICdVcmVkaSBzYWRyxb5haiDFoWFibG9uYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgVGVtcGxhdGUnfSA9ICdPYnJpxaFpIMWhYWJsb24nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlciB0byAlcyVzJ30gPSAnRG9kYWogcmFkbmkgbmFsb2cgdSAlcyVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RydWN0aW9uJ30gPSAnSW5zdHJ1a2NpamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCB3b3Jrb3JkZXIgdHlwZS4nfSA9ICdOZWlzcHJhdmFuIHRpcCByYWRub2cgbmFsb2dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgcGxhbm5lZCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBwbGFubmVkIGVuZCB0aW1lISd9ID0gJ1BsYW5pcmFubyB2cmVtZSBwb8SNZXRrYSBtb3JhIGJpdGkgcHJlIHBsYW5pcmFub2cgdnJlbWVuYSB6YXZyxaFldGthISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGZvcm1hdC4nfSA9ICdOZWlzcHJhdmFuIGZvcm1hdC4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IFdvcmtvcmRlciBUZW1wbGF0ZSd9ID0gJ0l6YWJlcmkgxaFhYmxvbiByYWRub2cgbmFsb2dhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZ2VudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBXb3Jrb3JkZXIgQWdlbnQgb2YgJXMlcyd9ID0gJ1VyZWRpIGtvcmlzbmlrYSByYWRub2cgbmFsb2dhIHphICVzJXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckRlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHdvcmtvcmRlcj8nfSA9ICdEYSBsaSB6YWlzdGEgxb5lbGl0ZSBkYSBpemJyacWhZXRlIG92YWogcmFkbmkgbmFsb2c/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIFdvcmtvcmRlci4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgQ29uZGl0aW9uISd9ID0KICAgICAgICAnTmUgbW/FvmV0ZSBvYnJpc2F0aSBvdmFqIHJhZG5pIG5hbG9nLiBVcG90cmVibGplbiBqZSB1IGJhciBqZWRub20gdXNsb3Z1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgV29ya29yZGVyIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBDb25kaXRpb24ocyknfSA9ICdPdmFqIHJhZG5pIG5hbG9nIGplIHVwb3RyZWJsamVuIHUgc2xlZGXEh2ltIHVzbG92aW1hJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0ICVzJXMtJXMnfSA9ICdVcmVkaSAlcyVzLSVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgZm9sbG93aW5nIHdvcmtvcmRlcnMgYWNjb3JkaW5nbHknfSA9ICdQb21lcml0ZSBhZGVrdmF0bm8gc2xlZGXEh2UgcmFkbmUgbmFsb2dlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHRoZSBwbGFubmVkIGVuZCB0aW1lIG9mIHRoaXMgd29ya29yZGVyIGlzIGNoYW5nZWQsIHRoZSBwbGFubmVkIHN0YXJ0IHRpbWVzIG9mIGFsbCBmb2xsb3dpbmcgd29ya29yZGVycyB3aWxsIGJlIGNoYW5nZWQgYWNjb3JkaW5nbHknfSA9CiAgICAgICAgJ1BsYW5pcmFubyB2cmVtZSB6YXZyxaFldGthIG92b2cgcmFkbm9nIG5hbG9nYSBqZSBwcm9tZW5qZW5vLCBwbGFuaXJhbmEgdnJlbWVuYSBwb8SNZXRrYSBzdmloIG5hcmVkbmloIHJhZG5paCBuYWxvZ2EgxIdlIGJpdGkgYWRla3ZhdG5vIHVza2xhxJFlbmEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgJXMlcy0lcyd9ID0gJ0lzdG9yaWphdCB6YSAlcyVzLSVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJSZXBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUmVwb3J0IG9mICVzJXMtJXMnfSA9ICdVcmVkaSBpenZlxaF0YWogemEgJXMlcy0lcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnQnfSA9ICdJenZlxaF0YWonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIHRpbWUhJ30gPSAnQWt0dWVsbm8gdnJlbWUgcG/EjWV0a2EgbW9yYSBiaXRpIHByZSBha3R1ZWxub2cgdnJlbWVuYSB6YXZyxaFldGthISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWN0dWFsIHN0YXJ0IHRpbWUgbXVzdCBiZSBzZXQsIHdoZW4gdGhlIGFjdHVhbCBlbmQgdGltZSBpcyBzZXQhJ30gPQogICAgICAgICdBa3R1ZWxubyB2cmVtZSBwb8SNZXRrYSBtb3JhIGJpdGkgcG9kZcWhZW5vIGthZGEgamUgcG9kZcWhZW5vIGkgYWt0dWVsbm8gdnJlbWUgemF2csWhZXRrYSEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRha2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgQWdlbnQnfSA9ICdBa3R1ZWxuaSBvcGVyYXRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gdGFrZSB0aGlzIHdvcmtvcmRlcj8nfSA9ICdEYSBsaSB6YWlzdGEgxb5lbGl0ZSBkYSBwcmV1em1ldGUgb3ZhaiByYWRuaSBuYWxvZz8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIFdvcmtvcmRlciBhcyBUZW1wbGF0ZSd9ID0gJ1NhxI11dmFqIHJhZG5pIG5hbG9nIGthbyDFoWFibG9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCB3b3Jrb3JkZXIgKGFuZCBzdXJyb3VuZGluZyBjaGFuZ2UpJ30gPSAnT2JyacWhaSBvcmlnaW5hbG5pIHJhZG5pIG5hbG9nIChpIHByb21lbnUgdSBrb2pvaiBqZSknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjaWphIG8gcmFkbm9tIG5hbG9ndSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWRtaW5JVFNNQ2hhbmdlTm90aWZpY2F0aW9uLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmtub3duIG5vdGlmaWNhdGlvbiAlcyEnfSA9ICdOZXBvem5hdG8gb2JhdmXFoXRlbmplICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSB3YXMgYW4gZXJyb3IgY3JlYXRpbmcgdGhlIG5vdGlmaWNhdGlvbi4nfSA9ICdEb8WhbG8gamUgZG8gZ3JlxaFrZSBwcmlsaWtvbSBrcmVpcmFuamEgb2JhdmXFoXRlbmphLic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDaGFuZ2VzJ30gPSAnUHJlZ2xlZDog4oCeSVRTTeKAnSBwcm9tZW5lJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCB3aXRoIFRpY2tldElEICVzIGRvZXMgbm90IGV4aXN0ISd9ID0gJ1Rpa2V0IHNhIElEIHRpa2V0YSAlcyBuZSBwb3N0b2ppISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaXNzaW5nIHN5c2NvbmZpZyBvcHRpb24gIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIhJ30gPQogICAgICAgICdOZWRvc3RhamUgb3BjaWphIHNpc3RlbXNrZSBrb25maWd1cmFjaWplIOKAnklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlc+KAnSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGFkZCBjaGFuZ2UhJ30gPSAnTmlqZSBiaWxvIG1vZ3XEh2UgZG9kYXRpIHByb21lbnUhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlIGZyb20gdGVtcGxhdGUhJ30gPSAnTmlqZSBiaWxvIG1vZ3XEh2Uga3JlaXJhdGkgcHJvbWVudSBpeiDFoWFibG9uYSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICdOaWplIGRhdCBJRCBQcm9tZW5lISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjaGFuZ2UgZm91bmQgZm9yIGNoYW5nZUlEICVzLid9ID0gJ05pamUgcHJvbmHEkWVuYSBwcm9tZW5hIHphIElEIHByb21lbmUgJXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBDQUIgb2YgY2hhbmdlICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAnU09QIHByb21lbmUgJXMgc2UgbmUgbW/FvmUgc2VyaWphbGl6b3ZhdGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgdGhlIHRlbXBsYXRlLid9ID0gJ05pamUgbW9ndcSHZSBkb2RhdGkgxaFhYmxvbi4nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNvbmRpdGlvbi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ1Byb21lbmEg4oCeJXPigJ0gbmlqZSBuYcSRZW5hIHUgYmF6aSBwb2RhdGFrYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBDb25kaXRpb25JRCAlcyEnfSA9ICdOaWplIG1vZ3XEh2Ugb2JyaXNhdGkgSUQgdXNsb3ZhICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gJXMgaXMgZ2l2ZW4hJ30gPSAnTmlqZSBkYXQgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBjcmVhdGUgbmV3IGNvbmRpdGlvbiEnfSA9ICdOaWplIG1vZ3XEh2Uga3JlaXJhdGkgbm92aSB1c2xvdiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBDb25kaXRpb25JRCAlcyEnfSA9ICdOaWplIG1vZ3XEh2UgYcW+dXJpcmF0aSB1c2xvdiBJRCAlcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBFeHByZXNzaW9uSUQgJXMhJ30gPSAnTmlqZSBtb2d1xIdlIGHFvnVyaXJhdGkgSUQgaXpyYXphICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIG5ldyBFeHByZXNzaW9uISd9ID0gJ05pamUgbW9ndcSHZSBkb2RhdGkgbm92aSBJenJheiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBBY3Rpb25JRCAlcyEnfSA9ICdOaWplIG1vZ3XEh2UgYcW+dXJpcmF0aSBJRCBha2NpamUgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgbmV3IEFjdGlvbiEnfSA9ICdOaWplIG1vZ3XEh2UgZG9kYXRpIG5vdnUgQWtjaWp1ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICdOaWplIG1vZ3XEh2Ugb2JyaXNhdGkgSUQgaXpyYXphICVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIEFjdGlvbklEICVzISd9ID0gJ05pamUgbW9ndcSHZSBvYnJpc2F0aSBJRCBha2NpamUgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yOiBVbmtub3duIGZpZWxkIHR5cGUgIiVzIiEnfSA9ICdHcmXFoWthOiBOZXBvem5hdCB0aXAgcG9samEgIiVzIiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uSUQgJXMgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBnaXZlbiBDaGFuZ2VJRCAlcyEnfSA9ICdJRCB1c2xvdmEgJXMgbmUgcHJpcGFkYSBkYXRvbSBJRCBwcm9tZW5lICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBkb2VzIG5vdCBoYXZlIGFuIGFsbG93ZWQgY2hhbmdlIHN0YXRlIHRvIGJlIGRlbGV0ZWQhJ30gPQogICAgICAgICdQcm9tZW5hIOKAniVz4oCdIG5pamUgdSBkb3p2b2xqZW5vbSBzdGFuanUgZGEgYmkgYmlsYSBvYnJpc2FuYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY2hhbmdlSUQgJXMhJ30gPSAnTmlqZSBiaWxvIG1vZ3XEh2Ugb2JyaXNhdGkgSUQgcHJvbWVuZSAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlISd9ID0gJ05pamUgYmlsbyBtb2d1xIdlIGHFvnVyaXJhdGkgcHJvbWVudSEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJ05lIG1vxb5lIHNlIHByaWthemF0aSBpc3RvcmlqYXQsIGplciBuaWplIGRhdCBJRCBQcm9tZW5lISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJ1Byb21lbmEgIiVzIiBuaWplIG5hxJFlbmEgdSBiYXppIHBvZGF0YWthISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmtub3duIHR5cGUgIiVzIiBlbmNvdW50ZXJlZCEnfSA9ICdOZXBvem5hdCB0aXAgIiVzIiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnknfSA9ICdJc3RvcmlqYXQgcHJvbWVuZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3Rvcnkgem9vbSwgbm8gSGlzdG9yeUVudHJ5SUQgaXMgZ2l2ZW4hJ30gPSAnTmUgbW9ndSBzZSBwcmlrYXphdGkgZGV0YWxqaSBpc3RvcmlqYXRhIGplciBuaWplIGRhdCBJRCBJc3RvcmlqYXRhIHByb21lbmUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnlFbnRyeSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICdTdGF2a2EgaXN0b3JpamF0YSDigJ4lc+KAnSBuaWplIG5hxJFlbmEgdSBiYXppIHBvZGF0YWthISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSBDQUIgZm9yIENoYW5nZSAlcyEnfSA9ICdOaWplIGJpbG8gbW9ndcSHZSBhxb51cmlyYXRpIFNPUCBwcm9tZW4gemEgcHJvbWVudSAlcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UgJXMhJ30gPSAnTmlqZSBiaWxvIG1vZ3XEh2UgYcW+dXJpcmF0aSBwcm9tZW51ICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTWFuYWdlci5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IENoYW5nZU1hbmFnZXInfSA9ICdQcmVnbGVkOiBVcHJhdmxqYcSNIHByb21lbmFtYSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBDQUInfSA9ICdQcmVnbGVkOiBNb2ogU09QJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeUNoYW5nZXMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBDaGFuZ2VzJ30gPSAnUHJlZ2xlZDogTW9qZSBwcm9tZW5lJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeVdvcmtPcmRlcnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBXb3Jrb3JkZXJzJ30gPSAnUHJlZ2xlZDogTW9qaSByYWRuaSBuYWxvemknOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVBJUi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFBJUid9ID0gJ1ByZWdsZWQ6IFJQUyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUFNBLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUFNBJ30gPSAnUHJlZ2xlZDogUERTJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ1JhZG5pIG5hbG9nICIlcyIgbmlqZSBuYcSRZW4gdSBiYXppIHBvZGF0YWthISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgdGhlIHdvcmtvcmRlciBpcyBub3QgYXR0YWNoZWQgdG8gYSBjaGFuZ2UhJ30gPQogICAgICAgICdOZSBtb8W+ZSBzZSBrcmlyYXRpIGl6bGF6IGplciByYWRuaSBuYWxvZyBuaWplIHByaWRvZGF0IHByb21lbmkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBjcmVhdGUgb3V0cHV0LCBhcyBubyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICdOZSBtb8W+ZSBzZSBrcmlyYXRpIGl6bGF6IGplciBuaWplIGRhdCBJRCBQcm9tZW5lISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duIGNoYW5nZSB0aXRsZSd9ID0gJ25lcG96bmF0IG5hc2xvdiBwcm9tZW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyJ30gPSAn4oCeSVRTTeKAnSByYWRuaSBuYWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duIHdvcmtvcmRlciB0aXRsZSd9ID0gJ25lcG96bmF0IG5hc2xvdiByYWRub2cgbmFsb2dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIE92ZXJ2aWV3ICglcyknfSA9ICdQcmVnbGVkIOKAnklUU03igJ0gcmFkbm9nIG5hbG9nYSAoJXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWRTdGFydFRpbWUnfSA9ICdQbGFuaXJhbm8gdnJlbWUgcG/EjWV0a2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZEVuZFRpbWUnfSA9ICdQbGFuaXJhbm8gdnJlbWUgemF2csWhZXRrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxTdGFydFRpbWUnfSA9ICdTdHZhcm5vIHZyZW1lIHBvxI1ldGthJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbEVuZFRpbWUnfSA9ICdTdHZhcm5vIHZyZW1lIHphdnLFoWV0a2EnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVJlc2V0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gcmVzZXQgV29ya09yZGVyICVzIG9mIENoYW5nZSAlcyEnfSA9ICdOaWplIGJpbG8gbW9ndcSHZSBwb25pxaF0aXRpIHJhZG5pIG5hbG9nICVzIHphIHByb21lbnUgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byByZXNldCBDaGFuZ2UgJXMhJ30gPSAnTmlqZSBiaWxvIG1vZ3XEh2UgcG9uacWhdGl0aSBwcm9tZW51ICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlU2NoZWR1bGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2UgU2NoZWR1bGUnfSA9ICdQcmVnbGVkOiBQbGFuZXIgcHJvbWVuYSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2VhcmNoJ30gPSAnUHJldHJhZ2EgcHJvbWVuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VUaXRsZSd9ID0gJ1Byb21lbmEgLSBuYXNsb3YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVycyd9ID0gJ1JhZG5pIG5hbG96aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VTdGF0ZSd9ID0gJ1Byb21lbmEgLSBzdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCBSZXN1bHQnfSA9ICdSZXp1bHRhdCBwcmV0cmFnZSBwcm9tZW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBOdW1iZXInfSA9ICdCcm9qIHByb21lbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29yayBPcmRlciBUaXRsZSd9ID0gJ05hc2xvdiByYWRub2cgbmFsb2dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBEZXNjcmlwdGlvbid9ID0gJ09waXMgcHJvbWVuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSnVzdGlmaWNhdGlvbid9ID0gJ09wcmF2ZGFub3N0IHByb21lbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEluc3RydWN0aW9uJ30gPSAnVXB1dHN2byB6YSByYWRuaSBuYWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgUmVwb3J0J30gPSAnSXp2ZcWhdGFqIHJhZG5vZyBuYWxvZ2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFByaW9yaXR5J30gPSAnUHJpb3JpdGV0IHByb21lbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEltcGFjdCd9ID0gJ1V0aWNhaiBwcm9tZW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgQnknfSA9ICdLcmVpcmFvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBTdGF0ZSd9ID0gJ1N0YW5qZSByYWRub2cgbmFsb2dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBUeXBlJ30gPSAnVGlwIHJhZG5vZyBuYWxvZ2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEFnZW50J30gPSAnT3BlcmF0ZXIgemEgcmFkbmkgbmFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmVmb3JlJ30gPSAncHJlJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJ1Byb21lbmEgJXMgc2UgbmUgbW/FvmUgc2VyaWphbGl6b3ZhdGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgdGhlIHRlbXBsYXRlICIlcyIuJ30gPSAnTmlqZSBtb2d1xIdlIGHFvnVyaXJhdGkgxaFhYmxvbiAiJXMiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIGNoYW5nZSAiJXMiLid9ID0gJ05pamUgbW9ndcSHZSBvYnJpc2F0aSBwcm9tZW51ICIlcyIuJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VUaW1lU2xvdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGNoYW5nZSBjYW5cJ3QgYmUgbW92ZWQsIGFzIGl0IGhhcyBubyB3b3Jrb3JkZXJzLid9ID0gJ1Byb21lbmEgc2UgbmUgbW/FvmUgcG9tZXJpdGkgamVyIG5lbWEgcmFkbmUgbmFsb2dlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgZmlyc3QuJ30gPSAnUHJ2byBkb2RhaiByYWRuaSBuYWxvZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IG1vdmUgYSBjaGFuZ2Ugd2hpY2ggYWxyZWFkeSBoYXMgc3RhcnRlZCEnfSA9ICdQcm9tZW5hIGtvamEgamUgdmXEhyBwb2tyZW51dGEgc2UgbmUgbW/FvmUgcG9tZXJhdGkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBtb3ZlIHRoZSBpbmRpdmlkdWFsIHdvcmtvcmRlcnMgaW5zdGVhZC4nfSA9ICdNb2xpbW8gZGEgdW1lc3RvIHRvZ2EgcG9tZXJpdGUgcG9qZWRpbmUgcmFkbmUgbmFsb2dlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY3VycmVudCAlcyBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4nfSA9ICdBa3R1ZWxuYSAlcyBzZSBuZSBtb8W+ZSBvZHJlZGl0aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlICVzIG9mIGFsbCB3b3Jrb3JkZXJzIGhhcyB0byBiZSBkZWZpbmVkLid9ID0gJyVzIHN2aWggcmFkbmloIG5hbG9nYSB0cmViYSBkYSBidWRlIGRlZmluaXNhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIG1vdmUgdGltZSBzbG90IGZvciB3b3Jrb3JkZXIgIyVzISd9ID0gJ05pamUgYmlsbyBtb2d1xIdlIHByZW1lc3RpdGkgdGVybWluIHphIHJhZG5pIG5hbG9nICMlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9uISd9ID0gJ1BvdHJlYm5hIHZhbSBqZSAlcyBkb3p2b2xhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBUZW1wbGF0ZUlEIGlzIGdpdmVuISd9ID0gJ05pamUgZGF0IElEIMWgYWJsb25hISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICfFoGFibG9uICIlcyIgbmlqZSBuYcSRZW4gdSBiYXppIHBvZGF0YWthISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSB0ZW1wbGF0ZSAlcyEnfSA9ICdOaWplIGJpbG8gbW9ndcSHZSBvYnJpc2F0aSDFoWFibG9uICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICVzISd9ID0gJ05pamUgYmlsbyBtb2d1xIdlIGHFvnVyaXJhdGkgxaFhYmxvbiAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdENBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBUZW1wbGF0ZSAiJXMiISd9ID0gJ05pamUgYmlsbyBtb2d1xIdlIGHFvnVyaXJhdGkgxaFhYmxvbiAiJXMiISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSBjaGFuZ2UhJ30gPSAnTmlqZSBiaWxvIG1vZ3XEh2Uga3JlaXJhdGkgcHJvbWVudSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSB3b3Jrb3JkZXIgZnJvbSB0ZW1wbGF0ZSEnfSA9ICdOaWplIGJpbG8gbW9ndcSHZSBrcmVpcmF0aSByYWRuaSBuYWxvZyBpeiBwcm9tZW5lISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVPdmVydmlldy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFRlbXBsYXRlJ30gPSAnUHJlZ2xlZDogxaBhYmxvbic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyBvbiB0aGUgY2hhbmdlISd9ID0gJ1BvdHJlYm5lIHN1IHZhbSAlcyBkb3p2b2xlIHphIHByb21lbnUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBhZGQgd29ya29yZGVyISd9ID0gJ05pamUgYmlsbyBtb2d1xIdlIGRvZGF0aSByYWRuaSBuYWxvZyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFnZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICdOaWplIGRhdCBJRCBSYWRub2cgbmFsb2dhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gc2V0IHRoZSB3b3Jrb3JkZXIgYWdlbnQgb2YgdGhlIHdvcmtvcmRlciAiJXMiIHRvIGVtcHR5ISd9ID0KICAgICAgICAnTmlqZSBiaWxvIG1vZ3XEh2UgcG9kZXNpdGkgcmFkbmkgbmFsb2cgIiVzIiBiZXogb3BlcmF0ZXJhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIHRoZSB3b3Jrb3JkZXIgIiVzIiEnfSA9ICdOaWplIGJpbG8gbW9ndcSHZSBhxb51cmlyYXRpIHJhZG5pIG5hbG9nICIlcyIhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBmaW5kIENoYW5nZSBmb3IgV29ya09yZGVyICVzISd9ID0gJ05pamUgbW9ndcSHZSBwcm9uYcSHaSBwcm9tZW51IHphIHJhZG5pIG5hbG9nICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSB3b3Jrb3JkZXIgJXMhJ30gPSAnTmlqZSBiaWxvIG1vZ3XEh2Ugb2JyaXNhdGkgcmFkbmkgbmFsb2cgJXMhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFdvcmtPcmRlciAlcyEnfSA9ICdOaWplIGJpbG8gbW9ndcSHZSBhxb51cmlyYXRpIHJhZG5pIG5hbG9nICVzISc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJ30gPSAnTmUgbW/FvmUgc2UgcHJpa2F6YXRpIGlzdG9yaWphdCBqZXIgbmlqZSBkYXQgSUQgcmFkbm9nIG5hbG9nYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICdSYWRuaSBuYWxvZyAiJXMiIG5pamUgbmHEkWVuIHUgYmF6aSBwb2RhdGFrYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6J30gPSAnV29ya09yZGVySGlzdG9yeTo6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5J30gPSAnSXN0b3JpamF0IHJhZG5vZyBuYWxvZ2EnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IGVudHJ5ICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICdTdGF2a2EgaXN0b3JpamF0YSAiJXMiIG5pamUgbmHEkWVuYSB1IGJhemkgcG9kYXRha2EhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5IFpvb20nfSA9ICdEZXRhbGppIGlzdG9yaWphdGEgcmFkbm9nIG5hbG9nYSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyVGFrZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHRha2UgdGhlIHdvcmtvcmRlciAlcyEnfSA9ICdOaWplIGJpbG8gbW9ndcSHZSBwcmV1emV0aSByYWRuaSBuYWxvZyAlcyEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgd29ya29yZGVyICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAnUmFkbmkgbmFsb2cg4oCeJXPigJ0gc2UgbmUgbW/FvmUgc2VyaWphbGl6b3ZhdGkuJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvTGF5b3V0L0lUU01DaGFuZ2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWQgY29uZmlnIG9wdGlvbiAlcyEnfSA9ICdQb3RyZWJuYSBrb25maWd1cmFjaW9uYSBvcGNpamEgJXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBvcHRpb24gJXMgbmVlZHMgdG8gYmUgYSBIQVNIIHJlZiEnfSA9ICdLb25maWd1cmFjaW9uYSBvcGNpamEgJXMgbW9yYSBiaXRpIOKAnUhBU0giIHJlZmVyZW5jYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY29uZmlnIG9wdGlvbiBmb3VuZCBmb3IgdGhlIHZpZXcgIiVzIiEnfSA9ICdOaWplIHByb25hxJFlbmEga29uZmlndXJhY2lvbmEgc3RhdmthIHphIHByZWdsZWQgIiVzIiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGl0bGU6ICVzIHwgVHlwZTogJXMnfSA9ICdOYXNsb3Y6ICVzIHwgVGlwOiAlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IENBQnMnfSA9ICdNb2ppIFNPUCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBDaGFuZ2VzJ30gPSAnTW9qZSBwcm9tZW5lJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeVdvcmtPcmRlcnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IFdvcmsgT3JkZXJzJ30gPSAnTW9qaSByYWRuaSBuYWxvemknOwoKICAgICMgRGF0YWJhc2UgWE1MIERlZmluaXRpb246IElUU01DaGFuZ2VNYW5hZ2VtZW50LnNvcG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlcXVlc3RlZCd9ID0gJ3phaHRldmFubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIGFwcHJvdmFsJ30gPSAnb2RvYnJlbmplIG5hIMSNZWthbmp1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlamVjdGVkJ30gPSAnb2RiaWplbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYXBwcm92ZWQnfSA9ICdvZG9icmVubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbiBwcm9ncmVzcyd9ID0gJ3UgdG9rdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIHBpcid9ID0gJ3JwcyBuYSDEjWVrYW5qdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzdWNjZXNzZnVsJ30gPSAndXNwZcWhbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZmFpbGVkJ30gPSAnbmV1c3BlxaFubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjYW5jZWxlZCd9ID0gJ290a2F6YW5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JldHJhY3RlZCd9ID0gJ3BvdnXEjWVubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjcmVhdGVkJ30gPSAna3JlaXJhbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWNjZXB0ZWQnfSA9ICdwcmlodmHEh2Vubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWFkeSd9ID0gJ3NwcmVtbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYXBwcm92YWwnfSA9ICdvZG9icmVuamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd29ya29yZGVyJ30gPSAncmFkbmkgbmFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmFja291dCd9ID0gJ29kdXN0YW5hayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydkZWNpc2lvbid9ID0gJ29kbHVrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwaXInfSA9ICdycHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMnfSA9ICdqZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBub3QnfSA9ICduaWplJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGVtcHR5J30gPSAnamUgcHJhem5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCBlbXB0eSd9ID0gJ25pamUgcHJhem5vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGdyZWF0ZXIgdGhhbid9ID0gJ2plIHZlxIdlIG9kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGxlc3MgdGhhbid9ID0gJ2plIG1hbmplIG9kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGJlZm9yZSd9ID0gJ2plIHByZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBhZnRlcid9ID0gJ2plIHBvc2xlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NvbnRhaW5zJ30gPSAnc2FkcsW+aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgY29udGFpbnMnfSA9ICduZSBzYWRyxb5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZ2lucyB3aXRoJ30gPSAncG/EjWluamUgc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZW5kcyB3aXRoJ30gPSAnemF2csWhYXZhIHNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3NldCd9ID0gJ3BvZGVzaSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbGlzdCBvZiB0aGUgYWdlbnRzIHdobyBoYXZlIHBlcm1pc3Npb24gdG8gdGFrZSB3b3Jrb3JkZXJzLiBLZXkgaXMgYSBsb2dpbiBuYW1lLiBDb250ZW50IGlzIDAgb3IgMS4nfSA9CiAgICAgICAgJ0xpc3RhIG9wZXJhdGVyYSBrb2ppIGltYWp1IGRvenZvbHUgcHJldXppbWFuamEgcmFkbmloIG5hbG9nYS4gS2xqdcSNIGplIGtvcmlzbmnEjWtvIGltZS4gU2FkcsW+YWogamUgMCBpbGkgMS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBsaXN0IG9mIHdvcmtvcmRlciBzdGF0ZXMsIGF0IHdoaWNoIHRoZSBBY3R1YWxTdGFydFRpbWUgb2YgYSB3b3Jrb3JkZXIgd2lsbCBiZSBzZXQgaWYgaXQgd2FzIGVtcHR5IGF0IHRoaXMgcG9pbnQuJ30gPQogICAgICAgICdMaXN0YSBzdGF0dXNhIHJhZG5vZyBuYWxvZ2EsIHByaSBrb2ppbWEgxIdlIGFrdHVlbG5vIHZyZW1lIHBvxI1ldGthIHJhZG5vZyBuYWxvZ2EsIGJpdGkgcG9zdGF2bGplbm8gYWtvIGplIHByYXpubyB1IG92b20gbW9tZW50dS4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXInfSA9ICdEb2RhaiByYWRuaSBuYWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyIChmcm9tIFRlbXBsYXRlKSd9ID0gJ0RvZGFqIHJhZG5pIG5hbG9nIChvZCDFoWFibG9uYSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgY2hhbmdlIGZyb20gdGVtcGxhdGUuJ30gPSAnRG9kYWogcHJvbWVudSBpeiDFoWFibG9uYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgY2hhbmdlLid9ID0gJ0RvZGFqIHByb21lbnUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciAoZnJvbSB0ZW1wbGF0ZSkgdG8gdGhlIGNoYW5nZS4nfSA9ICdEb2RhaiByYWRuaSBuYWxvZyBwcm9tZW5pIChvZCDFoWFibG9uYSkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciB0byB0aGUgY2hhbmdlLid9ID0gJ0RvZGFqIHJhZG5pIG5hbG9nIHByb21lbmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBmcm9tIHRlbXBsYXRlJ30gPSAnRG9kYWogaXogxaFhYmxvbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gb2YgdGhlIENJUCBtYXRyaXguJ30gPSAnQWRtaW5pc3RyYWNpamEgQ0lQIG1hdHJpY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIHRoZSBzdGF0ZSBtYWNoaW5lLid9ID0gJ0FkbWluaXN0cmFjaWphIG1hxaFpbmUgc3RhbmphJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZSBhZHZpc29yeSBib2FyZHMuJ30gPQogICAgICAgICdNb2R1bCBpbnRlcmZlanNhIG9wZXJhdGVyYSB6YSBvYmF2ZcWhdGF2YW5qZSwgcHJlZ2xlZCBicm9qYSBTYXZldG9kYXZuaWggT2Rib3JhIHphIFByb21lbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgbWFuYWdlZCBieSB0aGUgdXNlci4nfSA9CiAgICAgICAgJ01vZHVsIGludGVyZmVqc2Egb3BlcmF0ZXJhIHphIG9iYXZlxaF0YXZhbmplLCBwcmVnbGVkIGJyb2phIHByb21lbmEga29qaW1hIHVwcmF2bGphIGtvcmlzbmlrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzLid9ID0KICAgICAgICAnTW9kdWwgaW50ZXJmZWpzYSBvcGVyYXRlcmEgemEgb2JhdmXFoXRhdmFuamUsIHByZWdsZWQgYnJvamEgcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2Ygd29ya29yZGVycy4nfSA9CiAgICAgICAgJ01vZHVsIG9iYXZlxaF0YXZhbmphIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEgemEgcHJpa2F6IGJyb2phIHJhZG5paCBuYWxvZ2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBNZW1iZXIgU2VhcmNoJ30gPSAnUHJldHJhZ2EgxI1sYW5vdmEgU09QJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50IHRvb2xiYXJzLiBEZWZhdWx0OiAzIGhvdXJzICgxODAgbWludXRlcykuJ30gPQogICAgICAgICdWcmVtZSBrZcWhaXJhbmphIHUgbWludXRhbWEgemEgYWxhdG5lIHRyYWtlIHVwcmF2bGphxI1hIHByb21lbmFtYS4gUG9kcmF6dW1ldmFubyAzIHNhdGEgKDE4MCBtaW51dGEpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudC4gRGVmYXVsdDogNSBkYXlzICg3MjAwIG1pbnV0ZXMpLid9ID0KICAgICAgICAnVnJlbWUga2XFoWlyYW5qYSB1IG1pbnV0aW1hIHphIHVwcmF2bGphbmplIHByb21lbmFtYS4gUG9kcmF6dW1ldmFubzogNSBkYW5hICg3MjAwIG1pbnV0YSkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBDQUIgVGVtcGxhdGVzJ30gPSAnxaBhYmxvbmkgcHJvbWVuYSBTT1AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnkuJ30gPSAnSXN0b3JpamF0IHByb21lbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbnZvbHZlZCBQZXJzb25zLid9ID0gJ09zb2JlIHVrbGp1xI1lbmUgdSBwcm9tZW51Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ09ncmFuacSNZW5qZSBwcmVnbGVkYSBwcm9tZW5hIC0gIm1hbG8iJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBPdmVydmlldy4nfSA9ICdQcmVnbGVkIHByb21lbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBQcmludC4nfSA9ICfFoHRhbXBhIHByb21lbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZSd9ID0gJ1BsYW5lciBwcm9tZW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZS4nfSA9ICdQbGFuZXIgcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20uJ30gPSAnRGV0YWxqaSBwcm9tZW5lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIFdvcmtvcmRlciBUZW1wbGF0ZXMnfSA9ICdJem1lbmkgxaFhYmxvbmUgcmFkbm9nIG5hbG9nYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIHdvcmtvcmRlciB0ZW1wbGF0ZXMgZWRpdGVkIGJ5IHRoaXMgdXNlci4nfSA9ICfFoGFibG9uaSBwcm9tZW5hIGkgcmFkbmloIG5hbG9nYSBrb2plIGplIG1lbmphbyBvdmFqIGtvcmlzbmlrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYXJlYS4nfSA9ICdQcm9zdG9yIHByb21lbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBpbnZvbHZlZCBwZXJzb25zIG9mIHRoZSBjaGFuZ2UuJ30gPSAnSXptZW5pIG9zb2JlIHVrbGp1xI1lbmUgdSBvdnUgcHJvbWVudS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGxpbWl0IHBlciBwYWdlIGZvciBDaGFuZ2UgT3ZlcnZpZXcgIlNtYWxsIi4nfSA9ICdPZ3JhbmnEjWVuamUgYnJvamEgcHJvbWVuYSBwbyBzdHJhbmljaSB6YSBwcmVnbGVkIC0gIm1hbG8iLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2Ugc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnUG96YWRpbnNraSBtb2R1bCBwcmV0cmFnZSB6YSBwcm9tZW5lIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIEVkaXQnfSA9ICdVcmVkaSB1c2xvdic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb24gT3ZlcnZpZXcnfSA9ICdQcmVnbGVkIHVzbG92YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmUgd2hpY2ggc2NyZWVuIHNob3VsZCBiZSBzaG93biBhZnRlciBhIG5ldyB3b3Jrb3JkZXIgaGFzIGJlZW4gY3JlYXRlZC4nfSA9CiAgICAgICAgJ0tvbmZpZ3VyacWhZSBrb2ppIGVrcmFuIGJpIHRyZWJhbG8gcHJpa2F6YXRpIG5ha29uIGtyZWlyYW5qYSBub3ZvZyByYWRub2cgbmFsb2dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmVzIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCB3aGVuIHBsYW5uZWQgdGhlIHN0YXJ0IHRpbWUgb3Igb3RoZXIgdGltZSB2YWx1ZXMgaGF2ZSBiZWVuIHJlYWNoZWQvcGFzc2VkLid9ID0KICAgICAgICAnRGVmaW5pxaFlIGtvbGlrbyDEjWVzdG8gc2UgxaFhbGp1IG9iYXZlxaF0ZW5qYSBrYWRhIHN1IHBsYW5pcmFuYSB2cmVtZW5hIHBvxI1ldGthIGlsaSBkcnVnZSB2cmVtZW5za2UgdnJlZG5vc3RpIGRvc3RpZ251dGEvcHJvxaFsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSd9ID0gJ05hcHJhdmkgcHJvbWVudSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgQ2hhbmdlIChmcm9tIFRlbXBsYXRlKSd9ID0gJ05hcHJhdmkgcHJvbWVudSAob2QgxaFhYmxvbmEpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIGNoYW5nZSAoZnJvbSB0ZW1wbGF0ZSkgZnJvbSB0aGlzIHRpY2tldC4nfSA9ICdOYXByYXZpIHByb21lbnUgKG9kIMWhYWJsb25hKSBpeiBvdm9nIHRpa2V0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgY2hhbmdlIGZyb20gdGhpcyB0aWNrZXQuJ30gPSAnTmFwcmF2aSBwcm9tZW51IGl6IG92b2cgdGlrZXRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBJVFNNIENoYW5nZSBNYW5hZ2VtZW50IG5vdGlmaWNhdGlvbnMuJ30gPSAnS3JlaXJhbmplIGkgdXByYXZsamFuamUgb2JhdmXFoXRlbmppbWEg4oCeSVRTTeKAnSBVcHJhdmxqYcSNYSBwcm9tZW5hbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdHlwZSBmb3IgYSB3b3Jrb3JkZXIuIFRoaXMgZW50cnkgbXVzdCBleGlzdCBpbiBnZW5lcmFsIGNhdGFsb2cgY2xhc3MgXCdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpXb3JrT3JkZXI6OlR5cGVcJy4nfSA9CiAgICAgICAgJ1BvZHJhenVtZXZlbmkgdGlwIHJhZG5vZyBuYWxvZ2EuIE92YWogdW5vcyBtb3JhIGRhIHBvc3RvamkgdSBrbGFzaSBvcMWhdGVnIGthdGFsb2dhIOKAnklUU006OlVwcmF2bGphbmplIHByb21lbmFtYTo6cmFkbmkgbmFsb2c6OlRpcOKAnS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJ0RlZmluacWhZSBBa2NpamUgZ2RlIGplIGR1Z21lIHBvc3RhdmtpIGRvc3R1cG5vIHUgcG92ZXphbm9tIGdyYWZpxI1rb20gZWxlbWVudHUgb2JqZWt0YSAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBNb2xpbW8gZGEgaW1hdGUgbmEgdW11IGRhIG92ZSBBa2NpamUgbW9yYWp1IGRhIGJ1ZHUgcmVnaXN0cm92YW5lIHUgc2xlZGXEh2ltIEpTIGkgQ1NTIGRhdG90ZWthbWE6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGkgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIHNpZ25hbHMgZm9yIGVhY2ggd29ya29yZGVyIHN0YXRlLid9ID0gJ0RlZmluacWhZSBzaWduYWxlIHphIHN2YWtpIHN0YXR1cyByYWRub2cgbmFsb2dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBDaGFuZ2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IENoYW5nZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJ0RlZmluacWhZSBrb2plIGtvbG9uZSBzdSBwcmlrYXphbmUgdSBwb3ZlemFub20gZ3JhZmnEjWtvbSBlbGVtZW50dSBwcm9tZW5hIChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5hcG9tZW5hOiBTYW1vIGF0cmlidXRpIHByb21lbmUgc3UgZG96dm9samVuaSB6YSBwb2RyYXp1bWV2YW5lIGtvbG9uZS4gTW9ndcSHZSBwb3N0YXZrZTogMCA9IG9uZW1vZ3XEh2VubywgMSA9IGRvc3R1cG5vLCAyID0gcG9kcmF6dW1ldmFubyBha3RpdmlyYW5vLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBXb3Jrb3JkZXIgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgV29ya29yZGVyIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnRGVmaW5pxaFlIGtvamUga29sb25lIHN1IHByaWthemFuZSB1IHBvdmV6YW5vbSBncmFmacSNa29tIGVsZW1lbnR1IFJhZG5vZyBuYWxvZ2EgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTmFwb21lbmE6IFNhbW8gYXRyaWJ1dGkgcmFkbm9nIG5hbG9nYSBzdSBkb3p2b2xqZW5pIHphIHBvZHJhenVtZXZhbmUga29sb25lLiBNb2d1xIdlIHBvc3RhdmtlOiAwID0gb25lbW9ndcSHZW5vLCAxID0gZG9zdHVwbm8sIDIgPSBwb2RyYXp1bWV2YW5vIGFrdGl2aXJhbm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBjaGFuZ2UgbGlzdC4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBtb2R1bCBwcmVnbGVkYSB6YSBtYWxpIHByaWtheiBsaXN0ZSBwcm9tZW5hLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHRlbXBsYXRlIGxpc3QuJ30gPQogICAgICAgICdPZHJlxJF1amUgbW9kdWwgcHJlZ2xlZGEgemEgbWFsaSBwcmlrYXogbGlzdGUgxaFhYmxvbmEuICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGl0IHdpbGwgYmUgcG9zc2libGUgdG8gcHJpbnQgdGhlIGFjY291bnRlZCB0aW1lLid9ID0gJ0RlZmluacWhZSBkYSBsaSBqZW1vZ3XEh2UgxaF0YW1wYW5qZSBvYnJhxI11bmF0b2cgdnJlbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBwbGFubmVkIGVmZm9ydC4nfSA9ICdPZHJlxJF1amUgZGEgbGkgxIdlIGJpdGkgbW9ndcSHZSDFoXRhbXBhbmplIHBsYW5pcmFuaWggbmFwb3JhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgY2hhbmdlIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSBjaGFuZ2UgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICdPZHJlxJF1amUgZGEgbGkgZG9zdHVwbmUgKGthbyDFoXRvIGplIG9kcmXEkWVubyB1IG1hxaFpbmkgc3RhbmphKSBwcm9tZW5lIGkgc3RhdHVzaSB0cmViYSBkYSBidWR1IGRvenZvbGplbmkgYWtvIGplIHByb21lbmEgdSB6YWtsanXEjWFub20gc3RhdHVzdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiByZWFjaGFibGUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUpIHdvcmtvcmRlciBlbmQgc3RhdGVzIHNob3VsZCBiZSBhbGxvd2VkIGlmIGEgd29ya29yZGVyIGlzIGluIGEgbG9ja2VkIHN0YXRlLid9ID0KICAgICAgICAnT2RyZcSRdWplIGRhIGxpIGRvc3R1cG5pIChrYW8gxaF0byBqZSBvZHJlxJFlbm8gdSBtYcWhaW5pIHN0YW5qYSkgcmFkbmkgbmFsb3ppIGkgc3RhdHVzaSB0cmViYSBkYSBidWR1IGRvenZvbGplbmkgYWtvIGplIHJhZG5pIG5hbG9nIHUgemFrbGp1xI1hbm9tIHN0YXR1c3UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGFjY291bnRlZCB0aW1lIHNob3VsZCBiZSBzaG93bi4nfSA9ICdEZWZpbmnFoWUgZGEgbGkgb2JyYcSNdW5hdG8gdnJlbWUgdHJlYmEgZGEgYnVkZSBwcmlrYXphbm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzIHNob3VsZCBiZSBzZXQuJ30gPSAnRGVmaW5pxaFlIGRhIGxpIGFrdHVlbG5hIHZyZW1lbmEgcG/EjWV0a2EgaSB6YXZyxaFldGthIHRyZWJhIGRhIHNlIHBvZGVzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHNlYXJjaCBhbmQgdGhlIHdvcmtvcmRlciBzZWFyY2ggZnVuY3Rpb25zIGNvdWxkIHVzZSB0aGUgbWlycm9yIERCLid9ID0KICAgICAgICAnT2RyZcSRdWplIGRhIGxpIGZ1bmtjaWplIHByZXRyYWdlIHByb21lbmEgaSBwcmV0cmFnZSByYWRuaWggbmFsb2dhIG1vZ3UgZGEga29yaXN0ZSBwcmVzbGlrYW51IGJhenUgcG9kYXRha2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGNoYW5nZSBzdGF0ZSBjYW4gYmUgc2V0IGluIEFnZW50SVRTTUNoYW5nZUVkaXQuJ30gPQogICAgICAgICdPZHJlxJF1amUgZGEgbGkgc3RhdHVzIHByb21lbmUgbW/FvmUgZGEgc2UgcG9kZXNpIHUg4oCeQWdlbnRJVFNNQ2hhbmdlRWRpdOKAnS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcGxhbm5lZCBlZmZvcnQgc2hvdWxkIGJlIHNob3duLid9ID0gJ09kcmXEkXVqZSBkYSBsaSBwbGFuaXJhbmkgbmFwb3IgdHJlYmEgZGEgYnVkZSBwcmlrYXphbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHByaW50IGJ5IGN1c3RvbWVyLid9ID0gJ0RlZmluacWhZSBkYSBsaSBrbGlqZW50IHRyZWJhIGRhIMWhdGFtcGEgdHJhxb5lbmkgZGF0dW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzZWFyY2hlZCBieSBjdXN0b21lci4nfSA9CiAgICAgICAgJ0RlZmluacWhZSBkYSBsaSBrbGlqZW50IG1vxb5lIGRhIHByZXRyYcW+dWplIHRyYcW+ZW5pIGRhdHVtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2V0IGJ5IGN1c3RvbWVyLid9ID0gJ0RlZmluacWhZSBkYSBsaSBrbGlqZW50IG1vxb5lIGRhIHBvZGVzaSB0cmHFvmVuaSBkYXR1bS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNob3duIGJ5IGN1c3RvbWVyLid9ID0gJ0RlZmluacWhZSBkYSBsaSBrbGlqZW50IG1vxb5lIGRhIHByaWthxb5lIHRyYcW+ZW5pIGRhdHVtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSB3b3Jrb3JkZXIgc3RhdGUgc2hvdWxkIGJlIHNob3duLid9ID0gJ0RlZmluacWhZSBkYSBsaSDEh2Ugc3RhdHVzIHJhZG5vZyBuYWxvZ2EgYml0aSBwcmlrYXphbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHRpdGxlIHNob3VsZCBiZSBzaG93bi4nfSA9ICdEZWZpbmnFoWUgZGEgbGkgxIdlIG5hc2xvdiByYWRub2cgbmFsb2dhIGJpdGkgcHJpa2F6YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgc2hvd24gZ3JhcGggYXR0cmlidXRlcy4nfSA9ICdEZWZpbmnFoWUgYXRyaWJ1dGUgcHJpa2F6YW5vZyBncmFmaWtvbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhhdCBvbmx5IGNoYW5nZXMgY29udGFpbmluZyBXb3Jrb3JkZXJzIGxpbmtlZCB3aXRoIHNlcnZpY2VzLCB3aGljaCB0aGUgY3VzdG9tZXIgdXNlciBoYXMgcGVybWlzc2lvbiB0byB1c2Ugd2lsbCBiZSBzaG93bi4gQW55IG90aGVyIGNoYW5nZXMgd2lsbCBub3QgYmUgZGlzcGxheWVkLid9ID0KICAgICAgICAnRGVmaW5pxaFlIGRhIMSHZSBiaXRpIHByaWthemFuZSBzYW1vIHByb21lbmUga29qZSBzYWRyxb5lIHJhZG5lIG5hbG9nZSBwb3ZlemFuZSBzYSBzZXJ2aXNpbWEsIHphIGtvamUga2xpamVudCBrb3Jpc25payBpbWEgZG96dm9sdSB1cG90cmViZS4gU3ZlIGRydWdlIHByb21lbmUgbmXEh2UgYml0aSBwcmlrYXphbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIGFsbG93ZWQgdG8gZGVsZXRlLid9ID0gJ0RlZmluacWhZSBzdGFuamEgcHJvbWVuYSBrb2phIGplIGRvenZvbGplbm8gZGEgc2Ugb2JyacWhdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnRGVmaW5pxaFlIHN0YXR1c2UgcHJvbWVuYSBrb2ppIMSHZSBiaXRpIGtvcmnFoXRlbmkga2FvIGZpbHRlcmkgdSBQRFMgcHJlZ2xlZHUgcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgU2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdPZHJlxJF1amUgc3RhdHVzZSBwcm9tZW5hIGtvamUgxIdlIGJpdGkga29yacWhdGVuZSBrYW8gZmlsdGVyaSB1IHByZWdsZWR1IHBsYW5lcmEgcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluacWhZSBzdGF0dXNlIHByb21lbmEga29qaSDEh2UgYml0aSBrb3JpxaF0ZW5pIGthbyBmaWx0ZXJpIHUgcHJlZ2xlZHUgbW9qaWggcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPQogICAgICAgICdPZHJlxJF1amUgc3RhdHVzZSBwcm9tZW5hIGtvamUgxIdlIGJpdGkga29yacWhdGVuZSBrYW8gZmlsdGVyaSB1IHByZWdsZWR1IG1vamloIHByb21lbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdPZHJlxJF1amUgc3RhdHVzZSBwcm9tZW5hIGtvamUgxIdlIGJpdGkga29yacWhdGVuZSBrYW8gZmlsdGVyaSB1IHByZWdsZWR1IHVwcmF2bGphxI1hIHByb21lbmFtYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICdPZHJlxJF1amUgc3RhdHVzZSBwcm9tZW5hIGtvamUgxIdlIGJpdGkga29yacWhdGVuZSBrYW8gZmlsdGVyaSB1IHByZWdsZWR1IHByb21lbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnT2RyZcSRdWplIHN0YXR1c2UgcHJvbWVuYSBrb2plIMSHZSBiaXRpIGtvcmnFoXRlbmUga2FvIGZpbHRlcmkgdSBwcmVnbGVkdSBrbGlqZW50c2tvZyBwbGFuZXJhIHByb21lbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgY2hhbmdlIHRpdGxlIGZvciBhIGR1bW15IGNoYW5nZSB3aGljaCBpcyBuZWVkZWQgdG8gZWRpdCBhIHdvcmtvcmRlciB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBwb2RyYXp1bWV2YW5pIG5hc2xvdiBwcmF6bmUgcHJvbWVuZSBrb2phIGplIHBvdHJlYm5hIHphIGl6bWVudSDFoWFibG9uYSByYWRub2cgbmFsb2dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmnFoWUgcG9kcmF6dW1ldmFuaSBrcml0ZXJpanVtIHNvcnRpcmFuamEgdSBQRFMgcHJlZ2xlZHUgcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBwb2RyYXp1bWV2YW5lIHVzbG92ZSBzb3J0aXJhbmphIHUgcHJlZ2xlZHUgdXByYXZsamHEjWEgcHJvbWVuYW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9ICdEZWZpbmnFoWUgcG9kcmF6dW1ldmFuaSBrcml0ZXJpanVtIHNvcnRpcmFuamEgdSBwcmVnbGVkdSBwcm9tZW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluacWhZSBwb2RyYXp1bWV2YW5pIGtyaXRlcmlqdW0gc29ydGlyYW5qYSB1IHByZWdsZWR1IHBsYW5lcmEgcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluacWhZSBwb2RyYXp1bWV2YW5pIGtyaXRlcmlqdW0gc29ydGlyYW5qYSB1IHByZWdsZWR1IHByb21lbmEgbW9qaWggU09QLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBwb2RyYXp1bWV2YW5lIHVzbG92ZSBzb3J0aXJhbmphIHByb21lbmEgdSBwcmVnbGVkdSBtb2ppaCBwcm9tZW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBwb2RyYXp1bWV2YW5lIHVzbG92ZSBzb3J0aXJhbmphIHByb21lbmEgdSBwcmVnbGVkdSBtb2ppaCByYWRuaWggbmFsb2dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ0RlZmluacWhZSBwb2RyYXp1bWV2YW5pIGtyaXRlcmlqdW0gc29ydGlyYW5qYSB1IHByZWdsZWR1IFJQUyBwcm9tZW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBwb2RyYXp1bWV2YW5lIHVzbG92ZSBzb3J0aXJhbmphIHByb21lbmEgdSBwcmVnbGVkdSBrbGlqZW50c2tvZyBwbGFuZXJhIHByb21lbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmnFoWUgcG9kcmF6dW1ldmFuaSBrcml0ZXJpanVtIHNvcnRpcmFuamEgcHJvbWVuYSB1IHByZWdsZWR1IMWhYWJsb25hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0gJ0RlZmluacWhZSBwb2RyYXp1bWV2YW5pIGtyaXRlcmlqdW0gc29ydGlyYW5qYSB1IHByZWdsZWR1IG1vamloIFNPUC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPSAnT2RyZcSRdWplIHBvZHJhenVtZXZhbmUgdXNsb3ZlIHNvcnRpcmFuamEgdSBwcmVnbGVkdSBtb2ppaCBwcm9tZW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBwb2RyYXp1bWV2YW5lIHVzbG92ZSBzb3J0aXJhbmphIHUgcHJlZ2xlZHUgbW9qaWggcmFkbmloIG5hbG9nYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPSAnRGVmaW5pxaFlIHBvZHJhenVtZXZhbmkga3JpdGVyaWp1bSBzb3J0aXJhbmphIHUgcHJlZ2xlZHUgUlBTLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPSAnRGVmaW5pxaFlIHBvZHJhenVtZXZhbmkga3JpdGVyaWp1bSBzb3J0aXJhbmphIHUgcHJlZ2xlZHUgIFBEUyBwcm9tZW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnT2RyZcSRdWplIHBvZHJhenVtZXZhbmUgdXNsb3ZlIHNvcnRpcmFuamEgdSBwcmVnbGVkdSB1cHJhdmxqYcSNYSBwcm9tZW5hbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0gJ0RlZmluacWhZSBwb2RyYXp1bWV2YW5pIHJlZG9zbGVkIHUgcHJlZ2xlZHUgcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdEZWZpbmnFoWUgcG9kcmF6dW1ldmFuaSByZWRvc2xlZCB1IHByZWdsZWR1IHBsYW5lcmEgcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdPZHJlxJF1amUgcG9kcmF6dW1ldmFuZSB1c2xvdmUgc29ydGlyYW5qYSB1IHByZWdsZWR1IGtsaWplbnRza29nIHBsYW5lcmEgcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9ICdEZWZpbmnFoWUgcG9kcmF6dW1ldmFuaSByZWRvc2xlZCB1IHByZWdsZWR1IMWhYWJsb25hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY2F0ZWdvcnkgb2YgYSBjaGFuZ2UuJ30gPSAnRGVmaW5pxaFlIHBvZHJhenVtZXZhbnUgdnJlZG5vc3QgemEga2F0ZWdvcmlqdSBwcm9tZW5lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW1wYWN0IG9mIGEgY2hhbmdlLid9ID0gJ0RlZmluacWhZSBwb2RyYXp1bWV2YW51IHZyZWRub3N0IHphIHV0aWNhaiBwcm9tZW5lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmaWVsZCB0eXBlIG9mIENvbXBhcmVWYWx1ZSBmaWVsZHMgZm9yIGNoYW5nZSBhdHRyaWJ1dGVzIHVzZWQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gVmFsaWQgdmFsdWVzIGFyZSBTZWxlY3Rpb24sIFRleHQgYW5kIERhdGUuIElmIGEgdHlwZSBpcyBub3QgZGVmaW5lZCwgdGhlIGZpZWxkIHdpbGwgbm90IGJlIHNob3duLid9ID0KICAgICAgICAnRGVmaW5pxaFlIHRpcCBwb2xqYSB6YSBDb21wYXJlVmFsdWUgYXRyaWJ1dGUgcHJvbWVuYSB1IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIElzcHJhdm5lIHZyZWRub3N0aSBzdSBTZWxlY3Rpb24sIFRleHQgaSBEYXRlLiBVa29saWtvIHRpcCBuaWplIGRlZmluaXNhbiwgcG9samUgbmXEh2UgYml0aSBwcmlrYXphbm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3Igd29ya29yZGVyIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJ30gPQogICAgICAgICdEZWZpbmnFoWUgdGlwIHBvbGphIHphIENvbXBhcmVWYWx1ZSBhdHJpYnV0ZSByYWRuaWggbmFsb2dhIHUgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gSXNwcmF2bmUgdnJlZG5vc3RpIHN1IFNlbGVjdGlvbiwgVGV4dCBpIERhdGUuIFVrb2xpa28gdGlwIG5pamUgZGVmaW5pc2FuLCBwb2xqZSBuZcSHZSBiaXRpIHByaWthemFuby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgY2hhbmdlIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBrb2plIGF0cmlidXRlIG9iamVrdGEgamUgbW9ndcSHZSBpemFicmF0aSB6YSBvYmpla2F0IHByb21lbmUgdSDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvYmplY3QgYXR0cmlidXRlcyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB3b3Jrb3JkZXIgb2JqZWN0cyBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnT2RyZcSRdWplIGtvamUgYXRyaWJ1dGUgb2JqZWt0YSBqZSBtb2d1xIdlIGl6YWJyYXRpIHphIG9iamVrYXQgcmFkbm9nIG5hbG9nYSB1IOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjY291bnRlZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBrb2plIG9wZXJhdG9yZSBqZSBtb2d1xIdlIGl6YWJyYXRpIHphIGF0cmlidXQg4oCeT2JyYcSNdW5hdG8gdnJlbWXigJ0gdSDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdPZHJlxJF1amUga29qZSBvcGVyYXRvcmUgamUgbW9ndcSHZSBpemFicmF0aSB6YSBhdHJpYnV0IOKAnlN0dmFybm8gdnJlbWUgemF2csWhZXRrYeKAnSB1IOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnT2RyZcSRdWplIGtvamUgb3BlcmF0b3JlIGplIG1vZ3XEh2UgaXphYnJhdGkgemEgYXRyaWJ1dCDigJ5TdHZhcm5vIHZyZW1lIHBvxI1ldGth4oCdIHUg4oCeQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdOKAnS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2F0ZWdvcnlJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnT2RyZcSRdWplIGtvamUgb3BlcmF0b3JlIGplIG1vZ3XEh2UgaXphYnJhdGkgemEgYXRyaWJ1dCDigJ5JRCBrYXRlZ29yaWpl4oCdIHUg4oCeQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdOKAnS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlQnVpbGRlcklEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdPZHJlxJF1amUga29qZSBvcGVyYXRvcmUgamUgbW9ndcSHZSBpemFicmF0aSB6YSBhdHJpYnV0IOKAnklEIGdyYWRpdGVsamEgcHJvbWVuZeKAnSB1IOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZU1hbmFnZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnT2RyZcSRdWplIGtvamUgb3BlcmF0b3JlIGplIG1vZ3XEh2UgaXphYnJhdGkgemEgYXRyaWJ1dCDigJ5JRCB1cHJhdmxqYcSNYSBwcm9tZW5vbeKAnSB1IOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZVN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBrb2plIG9wZXJhdG9yZSBqZSBtb2d1xIdlIGl6YWJyYXRpIHphIGF0cmlidXQg4oCeSUQgc3RhdHVzYSBwcm9tZW5l4oCdIHUg4oCeQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdOKAnS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBrb2plIG9wZXJhdG9yZSBqZSBtb2d1xIdlIGl6YWJyYXRpIHphIGF0cmlidXQg4oCeTmFzbG92IHByb21lbmXigJ0gdSDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBEeW5hbWljRmllbGQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBrb2plIG9wZXJhdG9yZSBqZSBtb2d1xIdlIGl6YWJyYXRpIHphIGF0cmlidXQg4oCeRGluYW1pxI1rbyBwb2xqZeKAnSB1IOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEltcGFjdElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdPZHJlxJF1amUga29qZSBvcGVyYXRvcmUgamUgbW9ndcSHZSBpemFicmF0aSB6YSBhdHJpYnV0IOKAnklEIHV0aWNhamHigJ0gdSDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRWZmb3J0IGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdPZHJlxJF1amUga29qZSBvcGVyYXRvcmUgamUgbW9ndcSHZSBpemFicmF0aSB6YSBhdHJpYnV0IOKAnlBsYW5pcmFuaSBuYXBvcuKAnSB1IOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdPZHJlxJF1amUga29qZSBvcGVyYXRvcmUgamUgbW9ndcSHZSBpemFicmF0aSB6YSBhdHJpYnV0IOKAnlBsYW5pcmFubyB2cmVtZSB6YXZyxaFldGth4oCdIHUg4oCeQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdOKAnS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnT2RyZcSRdWplIGtvamUgb3BlcmF0b3JlIGplIG1vZ3XEh2UgaXphYnJhdGkgemEgYXRyaWJ1dCDigJ5QbGFuaXJhbm8gdnJlbWUgcG/EjWV0a2HigJ0gdSDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQcmlvcml0eUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdPZHJlxJF1amUga29qZSBvcGVyYXRvcmUgamUgbW9ndcSHZSBpemFicmF0aSB6YSBhdHJpYnV0IOKAnklEIHByaW9yaXRldGHigJ0gdSDigJ5BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl04oCdLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBSZXF1ZXN0ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdPZHJlxJF1amUga29qZSBvcGVyYXRvcmUgamUgbW9ndcSHZSBpemFicmF0aSB6YSBhdHJpYnV0IOKAnlRyYcW+ZW5vIHZyZW1l4oCdIHUg4oCeQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdOKAnS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyQWdlbnRJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnT2RyZcSRdWplIGtvamUgb3BlcmF0b3JlIGplIG1vZ3XEh2UgaXphYnJhdGkgemEgYXRyaWJ1dCDigJ5Xb3JrT3JkZXJBZ2VudElE4oCdIHUg4oCeQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdOKAnS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyTnVtYmVyIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdPZHJlxJF1amUga29qZSBvcGVyYXRvcmUgamUgbW9ndcSHZSBpemFicmF0aSB6YSBhdHJpYnV0IOKAnkJyb2ogcmFkbm9nIG5hbG9nYeKAnSB1IOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBrb2plIG9wZXJhdG9yZSBqZSBtb2d1xIdlIGl6YWJyYXRpIHphIGF0cmlidXQg4oCeV29ya09yZGVyU3RhdGVJROKAnSB1IOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclRpdGxlIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdPZHJlxJF1amUga29qZSBvcGVyYXRvcmUgamUgbW9ndcSHZSBpemFicmF0aSB6YSBhdHJpYnV0IOKAnk5hc2xvdiByYWRub2cgbmFsb2dh4oCdIHUg4oCeQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdOKAnS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVHlwZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdPZHJlxJF1amUga29qZSBvcGVyYXRvcmUgamUgbW9ndcSHZSBpemFicmF0aSB6YSBhdHJpYnV0IOKAnldvcmtPcmRlclR5cGVJROKAnSB1IOKAnkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTigJ0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBlcmlvZCAoaW4geWVhcnMpLCBpbiB3aGljaCBzdGFydCBhbmQgZW5kIHRpbWVzIGNhbiBiZSBzZWxlY3RlZC4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBwZXJpb2QgKHUgZ29kaW5hbWEpLCB1bnV0YXIga29nIGplIG1vZ3XEh2UgaXphYnJhdGkgdnJlbWVuYSBwb8SNZXRrYSBpIHphdnLFoWV0a2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGF0dHJpYnV0ZXMgb2YgYSB3b3Jrb3JkZXIgaW4gdGhlIHRvb2x0aXAgb2YgdGhlIHdvcmtvcmRlciBncmFwaCBpbiB0aGUgY2hhbmdlIHpvb20uIFRvIHNob3cgd29ya29yZGVyIGR5bmFtaWMgZmllbGRzIGluIHRoZSB0b29sdGlwLCB0aGV5IG11c3QgYmUgc3BlY2lmaWVkIGxpa2UgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTEsIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUyLCBldGMuJ30gPQogICAgICAgICdEZWZpbmnFoWUgcHJpa2F6YW5lIGF0cmlidXRlIHUgcG9ydWthbWEgbmEgZ3JhZmlrdSByYWRuaWggbmFsb2dhIHUgZGV0YWxqbm9tIGVrcmFudSBwcm9tZW5hLiBaYSBwcmlrYXogZGluYW1pxI1raWggcG9samEgcmFkbmloIG5hbG9nYSB1IHBvcnVrYW1hLCBtb3JhanUgYml0aSBkZWZpbmlzYW5pIGthbyBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMSwgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTIsIGl0ZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgQ2hhbmdlIFBTQSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBrb2xvbmUgcHJpa2F6YW5lIHUgcHJlZ2xlZHUgUERTIHByb21lbmEuIE92YSBvcGNpamEgbmVtYSB1dGljYWogbmEgcG96aWNpamUga29sb25hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgU2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdPZHJlxJF1amUga29sb25lIHByaWthemFuZSB1IHByZWdsZWR1IFBsYW5lcmEgcHJvbWVuYS4gT3ZhIG9wY2lqYSBuZW1hIHV0aWNhaiBuYSBwb3ppY2lqZSBrb2xvbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnT2RyZcSRdWplIGtvbG9uZSBwcmlrYXphbmUgdSBwcmVnbGVkdSBtb2ppaCBTT1AuIE92YSBvcGNpamEgbmVtYSB1dGljYWogbmEgcG96aWNpamUga29sb25hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdPZHJlxJF1amUga29sb25lIHByaWthemFuZSB1IHByZWdsZWR1IG1vamloIHByb21lbmEuIE92YSBvcGNpamEgbmVtYSB1dGljYWogbmEgcG96aWNpamUga29sb25hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdPZHJlxJF1amUga29sb25lIHByaWthemFuZSB1IHByZWdsZWR1IG1vamloIHJhZG5paCBuYWxvZ2EuIE92YSBvcGNpamEgbmVtYSB1dGljYWogbmEgcG96aWNpamUga29sb25hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBQSVIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdEZWZpbmnFoWUgcHJpa2F6YW5lIGtvbG9uZSB1IHByZWdsZWR1IFJQUy4gT3ZhIG9wY2lqZSBuZW1hIHV0aWNhaiBuYSBwb3ppY2lqZSBrb2xvbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnT2RyZcSRdWplIHByaWthemFuZSBrb2xvbmUgdSBwcmVnbGVkdSB1cHJhdmxqYcSNYSBwcm9tZW5hbWEuIE92YSBvcGNpamUgbmVtYSB1dGljYWogbmEgcG96aWNpamUga29sb25hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdPZHJlxJF1amUgcHJpa2F6YW5lIGtvbG9uZSB1IHByZWdsZWR1IHByb21lbmEuIE92YSBvcGNpamUgbmVtYSB1dGljYWogbmEgcG96aWNpamUga29sb25hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnT2RyZcSRdWplIHByaWthemFuZSBrb2xvbmUgdSBwcmV0cmF6aSBwcm9tZW5hLiBPdmEgb3BjaWplIG5lbWEgdXRpY2FqIG5hIHBvemljaWplIGtvbG9uYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY3VzdG9tZXIgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnT2RyZcSRdWplIHByaWthemFuZSBrb2xvbmUgdSBwcmVnbGVkdSBrbGlqZW50c2tvZyBwbGFuZXJhIHByb21lbmEuIE92YSBvcGNpamUgbmVtYSB1dGljYWogbmEgcG96aWNpamUga29sb25hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBwcmlrYXphbmUga29sb25lIHUgcHJlZ2xlZHUgxaFhYmxvbmEuIE92YSBvcGNpamUgbmVtYSB1dGljYWogbmEgcG96aWNpamUga29sb25hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaWduYWxzIGZvciBlYWNoIElUU01DaGFuZ2Ugc3RhdGUuJ30gPSAnT2RyZcSRdWplIHNpZ25hbGUgemEgc3Zha2kgc3RhdHVzIOKAnklUU03igJ0gcHJvbWVuZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgdGVtcGxhdGUgdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdPZHJlxJF1amUgdGlwb3ZlIMWhYWJsb25hIGtvamkgxIdlIGJpdGkga29yacWhdGVuaSBrYW8gZmlsdGVyaSB1IHByZWdsZWR1IMWhYWJsb25hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBzdGF0dXNlIHJhZG5paCBuYWxvZ2Ega29qaSDEh2UgYml0aSBrb3JpxaF0ZW5pIGthbyBmaWx0ZXJpIHUgcHJlZ2xlZHUgbW9qaWggcmFkbmloIG5hbG9nYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdPZHJlxJF1amUgc3RhdHVzZSByYWRuaWggbmFsb2dhIGtvamkgxIdlIHNlIGtvcmlzdGl0aSBrYW8gZmlsdGVyaSB1IHByZWdsZWR1IFJQUy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHR5cGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNob3cgdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSB0aXBvdmUgcmFkbmloIG5hbG9nYSBrb2ppIMSHZSBzZSBrb3Jpc3RpdGkgemEgcHJpa2F6IFJQUyBwcmVnbGVkYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGV0aGVyIG5vdGlmaWNhdGlvbnMgc2hvdWxkIGJlIHNlbnQuJ30gPSAnT2RyZcSRdWplIGRhIGxpIMSHZSBvYmF2ZcWhdGVuamEgYml0aSBwb3NsYXRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgYSBjaGFuZ2UuJ30gPSAnT2JyacWhaSBwcm9tZW51Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhlIGNoYW5nZS4nfSA9ICdPYnJpxaFpIHByb21lbnUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGUgd29ya29yZGVyLid9ID0gJ09icmnFoWkgcmFkbmkgbmFsb2cuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMgb2YgYSBjaGFuZ2UgaGlzdG9yeSBlbnRyeS4nfSA9ICdEZXRhbGppIHN0YXZrZSBpc3RvcmlqYXRhIHByb21lbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgYW4gYWdlbnQgY2FuIGV4Y2hhbmdlIHRoZSBYLWF4aXMgb2YgYSBzdGF0IGlmIGhlIGdlbmVyYXRlcyBvbmUuJ30gPQogICAgICAgICdVdHZyxJF1amUgZGEgbGkgb3BlcmF0ZXIgbW/FvmUgZGEgemFtZW5pIFggb3N1IHN0YXRpc3Rpa2UgYWtvIGplIGdlbmVyacWhZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIGRvbmUgZm9yIGNvbmZpZyBpdGVtIGNsYXNzZXMuJ30gPQogICAgICAgICdVdHZyxJF1amUgZGEgbGkgemFqZWRuacSNa2kgbW9kdWwgc3RhdGlzdGlrZSBtb8W+ZSBkYSBnZW5lcmnFoWUgc3RhdGlzdGlrdSBwcm9tZW5hIHVyYcSRZW5paCB6YSBrb25maWd1cmFjaW9uZSBzdGF2a2Uga2xhc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIGNoYW5nZSBzdGF0ZSB1cGRhdGVzIHdpdGhpbiBhIHRpbWVwZXJpb2QuJ30gPQogICAgICAgICdVdHZyxJF1amUgZGEgbGkgemFqZWRuacSNa2kgbW9kdWwgc3RhdGlzdGlrZSBtb8W+ZSBkYSBnZW5lcmnFoWUgc3RhdGlzdGlrdSBwcm9tZW5hIHByZW1hIGHFvnVyaXJhbmp1IHByb21lbmEgc3RhbmphIHUgdnJlbWVuc2tvbSBwZXJpb2R1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyB0aGUgcmVsYXRpb24gYmV0d2VlbiBjaGFuZ2VzIGFuZCBpbmNpZGVudCB0aWNrZXRzLid9ID0KICAgICAgICAnVXR2csSRdWplIGRhIGxpIHphamVkbmnEjWtpIG1vZHVsIHN0YXRpc3Rpa2UgbW/FvmUgZGEgZ2VuZXJpxaFlIHN0YXRpc3Rpa3UgcHJvbWVuYSBwcmVtYSB2ZXppIGl6bWXEkXUgcHJvbWVuYSBpIHRpa2V0YSBpbmNpZGVuYXRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzLid9ID0KICAgICAgICAnVXR2csSRdWplIGRhIGxpIHphamVkbmnEjWtpIG1vZHVsIHN0YXRpc3Rpa2UgbW/FvmUgZGEgZ2VuZXJpxaFlIHN0YXRpc3Rpa3UgbyBwcm9tZW5hbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IHRoZSBudW1iZXIgb2YgUmZjIHRpY2tldHMgYSByZXF1ZXN0ZXIgY3JlYXRlZC4nfSA9CiAgICAgICAgJ1V0dnLEkXVqZSBkYSBsaSB6YWplZG5pxI1raSBtb2R1bCBzdGF0aXN0aWtlIG1vxb5lIGRhIGdlbmVyacWhZSBzdGF0aXN0aWt1IG8gYnJvanUg4oCeUmZj4oCdIHRpa2V0YSBrb2plIGplIGtyZWlyYW8gdHJhxb5pbGFjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyAoZm9yIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMpIHNob3duIGluIHRoZSBjaGFuZ2UgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnRGluYW1pxI1rYSBwb2xqYSAoemEgcHJvbWVuZSBpIHJhZG5lIG5hbG9nZSkgcHJpa2F6YW5hIG5hIGVrcmFudSDFoXRhbXBlIHByb21lbmUgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4gTW9ndcSHYSBwb2RlxaFhdmFuamE6IDAgPSBPbmVtb2d1xIdlbm8sIDEgPSBPbW9ndcSHZW5vLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ0RpbmFtacSNa2EgcG9samEgcHJpa2F6YW5hIG5hIGVrcmFudSBkb2RhdmFuamEgcHJvbWVuZSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLiBNb2d1xIdhIHBvZGXFoWF2YW5qYTogMCA9IE9uZW1vZ3XEh2VubywgMSA9IE9tb2d1xIdlbm8sIDIgPSBPbW9ndcSHZW5vIGkgbmVvcGhvZG5vLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdEaW5hbWnEjWthIHBvbGphIHByaWthemFuYSBuYSBla3JhbnUgaXptZW5lIHByb21lbmUgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4gTW9ndcSHYSBwb2RlxaFhdmFuamE6IDAgPSBPbmVtb2d1xIdlbm8sIDEgPSBPbW9ndcSHZW5vLCAyID0gT21vZ3XEh2VubyBpIG5lb3Bob2Ruby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnRGluYW1pxI1rYSBwb2xqYSBwcmlrYXphbmEgbmEgZWtyYW51IHByZXRyYWdlIHByb21lbmUgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4gTW9ndcSHYSBwb2RlxaFhdmFuamE6IDAgPSBPbmVtb2d1xIdlbm8sIDEgPSBPbW9ndcSHZW5vLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnRGluYW1pxI1rYSBwb2xqYSBwcmlrYXphbmEgbmEgZWtyYW51IGRldGFsam5vZyBwcmlrYXphIHByb21lbmUgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4gTW9ndcSHYSBwb2RlxaFhdmFuamE6IDAgPSBPbmVtb2d1xIdlbm8sIDEgPSBPbW9ndcSHZW5vLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ0RpbmFtacSNa2EgcG9samEgcHJpa2F6YW5hIG5hIGVrcmFudSBkb2RhdmFuamEgcmFkbm9nIG5hbG9nYSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLiBNb2d1xIdhIHBvZGXFoWF2YW5qYTogMCA9IE9uZW1vZ3XEh2VubywgMSA9IE9tb2d1xIdlbm8sIDIgPSBPbW9ndcSHZW5vIGkgbmVvcGhvZG5vLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdEaW5hbWnEjWthIHBvbGphIHByaWthemFuYSBuYSBla3JhbnUgaXptZW5lIHJhZG5vZyBuYWxvZ2EgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4gTW9ndcSHYSBwb2RlxaFhdmFuamE6IDAgPSBPbmVtb2d1xIdlbm8sIDEgPSBPbW9ndcSHZW5vLCAyID0gT21vZ3XEh2VubyBpIG5lb3Bob2Ruby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciByZXBvcnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdEaW5hbWnEjWthIHBvbGphIHByaWthemFuYSBuYSBla3JhbnUgaXp2ZcWhdGFqYSByYWRub2cgbmFsb2dhIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuIE1vZ3XEh2EgcG9kZcWhYXZhbmphOiAwID0gT25lbW9ndcSHZW5vLCAxID0gT21vZ3XEh2VubywgMiA9IE9tb2d1xIdlbm8gaSBuZW9waG9kbm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICdEaW5hbWnEjWthIHBvbGphIHByaWthemFuYSBuYSBla3JhbnUgZGV0YWxqbm9nIHByaWthemEgcmFkbm9nIG5hbG9nYSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLiBNb2d1xIdhIHBvZGXFoWF2YW5qYTogMCA9IE9uZW1vZ3XEh2VubywgMSA9IE9tb2d1xIdlbm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWNGaWVsZCBldmVudCBtb2R1bGUgdG8gaGFuZGxlIHRoZSB1cGRhdGUgb2YgY29uZGl0aW9ucyBpZiBkeW5hbWljIGZpZWxkcyBhcmUgYWRkZWQsIHVwZGF0ZWQgb3IgZGVsZXRlZC4nfSA9CiAgICAgICAgJ01vZHVsIGRvZ2HEkWFqYSBkaW5hbWnEjWtpaCBwb2xqYSB6YSBiYXJhdGFuamUgc2EgYcW+dXJpcmFuamVtIHVzbG92YSBha28gc2UgZGluYW1pxI1rYSBwb2xqYSBkb2RhanUsIGHFvnVyaXJhanUgaWxpIGJyacWhdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBhIGNoYW5nZS4nfSA9ICdVcmVkaSBwcm9tZW51Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSBjaGFuZ2UuJ30gPSAnVXJlZGkgcHJvbWVudS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY2hhbmdlLid9ID0gJ1VyZWRpIHVzbG92ZSB6YSBwcm9tZW51Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSB3b3Jrb3JkZXIuJ30gPSAnVXJlZGkgcmFkbmkgbmFsb2cuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcndhcmQgc2NoZWR1bGUgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb3ZlciBhcHByb3ZlZCBjaGFuZ2VzLid9ID0KICAgICAgICAnUHJvc2xlZGkgcmFzcG9yZWQgcHJvbWVuYS4gUHJlZ2xlZCBvZG9icmVuaWggcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBab29tJ30gPSAnRGV0YWxqaSBpc3RvcmlqYXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIENBQiBUZW1wbGF0ZXMuJ30gPSAn4oCeSVRTTeKAnSDFoWFibG9uaSBwcm9tZW5hIFNPUCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gRWRpdC4nfSA9ICfigJ5JVFNN4oCdIHVyZcSRaXZhbmplIHVzbG92YSBwcm9tZW5lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gT3ZlcnZpZXcuJ30gPSAn4oCeSVRTTeKAnSBwcmVnbGVkIHVzbG92YSBwcm9tZW5lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbnMnfSA9ICdPYmF2ZcWhdGVuamEgdSDigJ5JVFNN4oCdIFVwcmF2bGphbmp1IHByb21lbmFtYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VyIE92ZXJ2aWV3Lid9ID0gJ+KAnklUU03igJ0gcHJlZ2xlZCBwcm9tZW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBQSVIgT3ZlcnZpZXcuJ30gPSAn4oCeSVRTTeKAnSBwcmVnbGVkIFJQUyBwcm9tZW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBub3RpZmljYXRpb24gcnVsZXMnfSA9ICfigJ5JVFNN4oCdIHByYXZpbGEgb2JhdmXFoXRhdmFuamEgbyBwcm9tZW5pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZXMnfSA9ICfigJ5JVFNN4oCdIHByb21lbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeUNBQiBPdmVydmlldy4nfSA9ICfigJ5JVFNN4oCdIHByZWdsZWQgbW9qaWggU09QLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15Q2hhbmdlcyBPdmVydmlldy4nfSA9ICfigJ5JVFNN4oCdIHByZWdsZWQgbW9qaWggcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeVdvcmtvcmRlcnMgT3ZlcnZpZXcuJ30gPSAn4oCeSVRTTeKAnSBwcmVnbGVkIG1vamloIHJhZG5paCBuYWxvZ2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRGVsZXRlLid9ID0gJ+KAnklUU03igJ0gYnJpc2FuamUgxaFhYmxvbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDQUIuJ30gPSAn4oCeSVRTTeKAnSB1cmXEkWl2YW5qZSBTT1AgxaFhYmxvbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDb250ZW50Lid9ID0gJ+KAnklUU03igJ0gc2FkcsW+YWogdXJlxJFpdmFuamEgxaFhYmxvbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdC4nfSA9ICfigJ5JVFNN4oCdIHVyZcSRaXZhbmplIMWhYWJsb25hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIE92ZXJ2aWV3Lid9ID0gJ1ByZWdsZWQg4oCeSVRTTeKAnSDFoWFibG9uYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBjbGVhbnMgdXAgY29uZGl0aW9ucy4nfSA9ICfigJ5JVFNN4oCdIG1vZHVsIGRvZ2HEkWFqYSBrb2ppIMSNaXN0aSB1c2xvdmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgZGVsZXRlcyB0aGUgY2FjaGUgZm9yIGEgdG9vbGJhci4nfSA9ICfigJ5JVFNN4oCdIG1vZHVsIGRvZ2HEkWFqYSBrb2ppIGJyacWhZSBrZcWhIGFsYXRuZSB0cmFrZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJ30gPSAn4oCeSVRTTeKAnSBtb2R1bCBkb2dhxJFhamEga29qaSBicmnFoWUgaXN0b3JpamF0IHByb21lbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgbWF0Y2hlcyBjb25kaXRpb25zIGFuZCBleGVjdXRlcyBhY3Rpb25zLid9ID0KICAgICAgICAn4oCeSVRTTeKAnSBtb2R1bCBkb2dhxJFhamEga29qaSB1cGFydWplIHVzbG92ZSBpIGl6dnLFoWF2YSBha2NpamUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgc2VuZHMgbm90aWZpY2F0aW9ucy4nfSA9ICfigJ5JVFNN4oCdIG1vZHVsIGRvZ2HEkWFqYSBrb2ppIMWhYWxqZSBvYmF2ZcWhdGVuamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiBjaGFuZ2VzLid9ID0gJ+KAnklUU03igJ0gbW9kdWwgZG9nYcSRYWphIGtvamkgYcW+dXJpcmEgaXN0b3JpamF0IHByb21lbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiBjb25kaXRpb25zLid9ID0gJ+KAnklUU03igJ0gbW9kdWwgZG9nYcSRYWphIGHFvnVyaXJhIGlzdG9yaWphdCB1c2xvdmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiB3b3Jrb3JkZXJzLid9ID0gJ+KAnklUU03igJ0gbW9kdWwgZG9nYcSRYWphIGHFvnVyaXJhIGlzdG9yaWphdCByYWRuaWggbmFsb2dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byByZWNhbGN1bGF0ZSB0aGUgd29ya29yZGVyIG51bWJlcnMuJ30gPSAn4oCeSVRTTeKAnSBtb2R1bCBkb2dhxJFhamEga29qaSBwcmVyYcSNdW5hdmEgYnJvamV2ZSByYWRuaWggbmFsb2dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byBzZXQgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzIG9mIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICfigJ5JVFNN4oCdIG1vZHVsIGRvZ2HEkWFqYSBrb2ppIHBvZGXFoWF2YSBha3R1ZWxuYSB2cmVtZW5hIHBvxI1ldGthIGkgemF2csWhZXRrYSByYWRuaWggbmFsb2dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNQ2hhbmdlJ30gPSAn4oCeSVRTTeKAnSBwcm9tZW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01Xb3JrT3JkZXInfSA9ICfigJ5JVFNN4oCdIHJhZG5pIG5hbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGZyZXF1ZW5jeSBpcyBcJ3JlZ3VsYXJseVwnLCB5b3UgY2FuIGNvbmZpZ3VyZSBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgKGV2ZXJ5IFggaG91cnMpLid9ID0KICAgICAgICAnQWtvIGplIHXEjWVzdGFsb3N0IOKAnnJlZG92bm/igJ0sIG1vxb5ldGUgcG9kZXNpdGkga29saWtvIMSNZXN0byBzZSDFoWFsanUgb2JhdmXFoXRlbmphIChuYSBzdmFraWggWCBzYXRpKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgY2hhbmdlLid9ID0gJ1BvdmXFvmkgZHJ1Z2kgb2JqZWthdCBzYSBwcm9tZW5vbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgd29ya29yZGVyLid9ID0gJ1BvdmXFvmkgZHJ1Z2kgb2JqZWthdCBzYSByYWRuaW0gbmFsb2dvbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9nZmlsZSBmb3IgdGhlIElUU00gY2hhbmdlIGNvdW50ZXIuIFRoaXMgZmlsZSBpcyB1c2VkIGZvciBjcmVhdGluZyB0aGUgY2hhbmdlIG51bWJlcnMuJ30gPQogICAgICAgICdEYXRvdGVrYSBkbmV2bmlrYSB6YSDigJ5JVFNN4oCdIGJyb2phxI0gcHJvbWVuYS4gT3ZhIGRhZHRvdGVrYSBzZSBrb3Jpc3RpIHphIGdlbmVyaXNhbmplIGJyb2phIHByb21lbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvb2t1cCBvZiBDQUIgbWVtYmVycyBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAnUG90cmHFvmkgxI1sYW5vdmUgU09QIHJhZGkgYXV0b21hdHNrb2cgZG92csWhYXZhbmphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rdXAgb2YgYWdlbnRzLCB1c2VkIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICdQb3RyYcW+aSBvcGVyYXRlcmUsIHVwb3RyZWJsamVuZSB6YSBhdXRvbWF0c2tvIGRvdnLFoWF2YW5qZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIGlmIFdvcmtPcmRlckFkZCBvciBXb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUgc2hvdWxkIGJlIHBlcm1pdHRlZC4nfSA9CiAgICAgICAgJ01vZHVsIHphIHByb3ZlcnUgZGEgbGkgZG9kYXZhbmplIHJhZG5vZyBuYWxvZ2EgaWxpIGRvZGF2YW5qZSByYWRub2cgbmFsb2dhIGl6IMWhYWJsb25hIHRyZWJhIGRhIGJ1ZGUgZG96dm9samVuby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBDQUIgbWVtYmVycy4nfSA9ICdNb2R1bCB6YSBwcm92ZXJ1IMSNbGFub3ZhIFNPUC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBhZ2VudC4nfSA9ICdNb2R1bCB6YSBwcm92ZXJ1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgYnVpbGRlci4nfSA9ICdNb2R1bCB6YSBwcm92ZXJ1IGdyYWRpdGVsamEgcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgbWFuYWdlci4nfSA9ICdNb2R1bCB6YSBwcm92ZXJ1IHVwcmF2bGphxI1hIHByb21lbmFtYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnTW9kdWwgemEgcHJvdmVydSBvcGVyYXRlcmEgcmFkbm9nIG5hbG9nYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgbm8gd29ya29yZGVyIGFnZW50IGlzIHNldC4nfSA9ICdNb2R1bCB6YSBwcm92ZXJ1IGRhIGxpIGplIG9kcmXEkWVuIG9wZXJhdGVyIHphIHJhZG5pIG5hbG9nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgd2hldGhlciB0aGUgYWdlbnQgaXMgY29udGFpbmVkIGluIHRoZSBjb25maWd1cmVkIGxpc3QuJ30gPQogICAgICAgICdNb2R1bCB6YSBwcm92ZXJ1IGRhIGxpIHNlIG9wZXJhdGVyIG5hbGF6aSB1IGtvbmZpZ3VyaXNhbm9qIGxpc3RpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBhIGxpbmsgdG8gY3JlYXRlIGEgY2hhbmdlIGZyb20gdGhpcyB0aWNrZXQuIFRoZSB0aWNrZXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGxpbmtlZCB3aXRoIHRoZSBuZXcgY2hhbmdlLid9ID0KICAgICAgICAnTW9kdWwgemEgcHJpa2F6IHZlemUgemEga3JlaXJhbmplIHByb21lbmUgaXogb3ZvZyB0aWtldGEuIFRpa2V0IMSHZSBhdXRvbWF0c2tpIGJpdGkgcG92ZXphbiBzYSBub3ZvbSBwcm9tZW5vbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBUaW1lIFNsb3QuJ30gPSAnUG9tZXJpIHZyZW1lbnNraSB0ZXJtaW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgYWxsIHdvcmtvcmRlcnMgaW4gdGltZS4nfSA9ICdQb21lcmkgc3ZlIHJhZG5lIG5hbG9nZSB1IHZyZW1lbnUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyAoZnJvbSB0ZW1wbGF0ZSknfSA9ICdOb3ZvIChvZCDFoWFibG9uYSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSB1c2VycyBvZiB0aGVzZSBncm91cHMgaGF2ZSB0aGUgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRpY2tldCB0eXBlcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiIGlmIHRoZSBmZWF0dXJlICJUaWNrZXQ6OkFjbDo6TW9kdWxlIyMjMjAwLVRpY2tldDo6QWNsOjpNb2R1bGUiIGlzIGVuYWJsZWQuJ30gPQogICAgICAgICdTYW1vIGtvcmlzbmljaSBvdmloIGdydXBhIGltYcSHZSBkb3p2b2x1IHphIGtvcmnFocSHZW5qZSB0aXBvdmEgdGlrZXRhIGRlZmluaXNhbmloIHUgIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIgdWtvbGlrbyBqZSBmdW5rY2lqYSAiVGlja2V0OjpBY2w6Ok1vZHVsZSMjIzIwMC1UaWNrZXQ6OkFjbDo6TW9kdWxlIiBvbW9ndcSHZW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIGFsbCBDaGFuZ2VzLid9ID0gJ1ByZWdsZWQgc3ZpaCBwcm9tZW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQSVInfSA9ICdSUFMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldyknfSA9ICdSUFMgKHJlY2VuemlqYSBwb3NsZSBzcHJvdm/EkWVuamEpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BTQSd9ID0gJ1BEUyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgVXNlckNyZWF0ZVdvcmtPcmRlck5leHRNYXNrIG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQYXJhbWV0cmkgemEgVXNlckNyZWF0ZVdvcmtPcmRlck5leHRNYXNrIG9iamVrYXQgdSBwcmlrYXp1IHBvZGXFoWF2YW5qYSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBjaGFuZ2VzIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIGNoYW5nZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyaSBzdHJhbmljYSAobmEga29qaW1hIHN1IHByb21lbmUgdmlkbGppdmUpIHNtYW5qZW5vZyBwcmVnbGVkYSB0aWtldGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXNlbnRzIGEgbGluayBpbiB0aGUgbWVudSB0byBzaG93IHRoZSBpbnZvbHZlZCBwZXJzb25zIGluIGEgY2hhbmdlLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggY2hhbmdlIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVIG1lbmlqdSBwcmlrYXp1amUgdmV6dSBrb2phIG9tb2d1xIdhdmEgcHJpa2F6IG9zb2JhIHVrbGp1xI1lbmloIHUgcHJvbWVudSAgbmEgZGV0YWxqbm9tIHByaWthenUgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIGNoYW5nZS4nfSA9ICdPZMWhdGFtcGFqIHByb21lbnUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoZSB3b3Jrb3JkZXIuJ30gPSAnT2TFoXRhbXBhaiByYWRuaSBuYWxvZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5J30gPSAnUHJvamVrdG92YW5hIGRvc3R1cG5vc3Qgc2VydmlzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHkgKFBTQSknfSA9ICdQcm9qZWt0b3ZhbmEgZG9zdHVwbm9zdCBzZXJ2aXNhIChQRFMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSAoUFNBKSBvZiBjaGFuZ2VzLiBPdmVydmlldyBvZiBhcHByb3ZlZCBjaGFuZ2VzIGFuZCB0aGVpciBzZXJ2aWNlcy4nfSA9CiAgICAgICAgJ1Byb2pla3RvdmFuYSBkb3N0dXBub3N0IHNlcnZpc2EgKFBEUykgcHJvbWVuYS4gUHJlZ2xlZCBvZG9icmVuaWggcHJvbWVuYSBpIGxqaWhvdmloIHNlcnZpc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgaW4gb3JkZXIgZm9yIGFuIGFnZW50IHRvIHRha2UgYSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICdQb3RyZWJuYSBwcmF2YSB6YSBkb2RhdmFuamUgcmVkb3NsZWRhIHJhZGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWNjZXNzIHRoZSBvdmVydmlldyBvZiBhbGwgY2hhbmdlcy4nfSA9ICdQb3RyZWJuYSBwcmF2YSB6YSBwcmlzdHVwIHByZWdsZWR1IHN2aWggcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhZGQgYSB3b3Jrb3JkZXIuJ30gPSAnUG90cmVibmEgcHJhdmEgemEgZG9kYXZhbmplIHJhZG5paCBuYWxvZ2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY2hhbmdlIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAnUG90cmVibmEgcHJhdmEgemEgaXptZW51IG9wZXJhdGVyYSByYWRub2cgbmFsb2dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSBjaGFuZ2UuJ30gPSAnUG90cmVibmEgcHJhdmEgemEga3JlaXJhbmplIMWhYWJsb25hIG9kIHByb21lbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZXNcJyBDQUIuJ30gPQogICAgICAgICdQb3RyZWJuYSBwcmF2YSB6YSBrcmVpcmFuamUgxaFhYmxvbmEgb2QgcHJvbWVuZSBTT1AuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIHdvcmtvcmRlci4nfSA9ICdQb3RyZWJuYSBwcmF2YSB6YSBrcmVpcmFuamUgxaFhYmxvbmEgb2QgcmFkbm9nIG5hbG9nYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgY2hhbmdlcyBmcm9tIHRlbXBsYXRlcy4nfSA9ICdQb3RyZWJuYSBwcmF2YSB6YSBrcmVpcmFuamUgcHJvbWVuYSBvZCDFoWFibG9uYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgY2hhbmdlcy4nfSA9ICdQb3RyZWJuYSBwcmF2YSB6YSBrcmVpcmFuamUgcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgYSB0ZW1wbGF0ZS4nfSA9ICdQb3RyZWJuYSBwcmF2YSB6YSBicmlzYW5qZSDFoWFibG9uYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgYSB3b3Jrb3JkZXIuJ30gPSAnUG90cmVibmEgcHJhdmEgemEgYnJpc2FuamUgcmFkbm9nIG5hbG9nYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY2hhbmdlcy4nfSA9ICdQb3RyZWJuYSBwcmF2YSB6YSBicmlzYW5qZSBwcm9tZW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgYSB0ZW1wbGF0ZS4nfSA9ICdQb3RyZWJuYSBwcmF2YSB6YSB1cmXEkWVuamUgxaFhYmxvbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHdvcmtvcmRlci4nfSA9ICdQb3RyZWJuYSBwcmF2YSB6YSB1cmXEkWVuamUgcmFkbm9nIG5hbG9nYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGNoYW5nZXMuJ30gPSAnUG90cmVibmEgcHJhdmEgemEgdXJlxJFlbmplIHByb21lbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJ1BvdHJlYm5hIHByYXZhIHphIHVyZcSRZW5qZSB1c2xvdmEgemEgcHJvbWVuZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb250ZW50IG9mIGEgdGVtcGxhdGUuJ30gPSAnUG90cmVibmEgcHJhdmEgemEgdXJlxJFlbmplIHNhZHLFvmFqYSDFoWFibG9uYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBpbnZvbHZlZCBwZXJzb25zIG9mIGEgY2hhbmdlLid9ID0KICAgICAgICAnUG90cmVibmEgcHJhdmEgemEgdXJlxJFlbmplIG9zb2JhIHVrbGp1xI1lbmloIHUgcHJvbWVudS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBtb3ZlIGNoYW5nZXMgaW4gdGltZS4nfSA9ICdQb3RyZWJuYSBwcmF2YSB6YSBwb21lcmFuamUgcHJvbWVuYSB1IHZyZW1lbnUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcHJpbnQgYSBjaGFuZ2UuJ30gPSAnUG90cmVibmEgcHJhdmEgemEgxaF0YW1wdSBwcm9tZW5lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHJlc2V0IGNoYW5nZXMuJ30gPSAnUG90cmVibmEgcHJhdmEgemEgcG9uacWhdGVuamUgcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGEgd29ya29yZGVyLid9ID0gJ1BvdHJlYm5hIHByYXZhIHphIHByaWtheiByYWRub2cgbmFsb2dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgY2hhbmdlcy4nfSA9ICdQb3RyZWJuYSBwcmF2YSB6YSBwcmlrYXogcHJvbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyBhIENBQiBtZW1iZXIuJ30gPQogICAgICAgICdQb3RyZWJuYSBwcmF2YSB6YSBwcmlrYXogbGlzdGUgcHJvbWVuYSBnZGUgamUga29yaXNuaWsgxI1sYW4gU09QLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIHRoZSBjaGFuZ2UgbWFuYWdlci4nfSA9CiAgICAgICAgJ1BvdHJlYm5hIHByYXZhIHphIHByaWtheiBsaXN0ZSBwcm9tZW5hIGdkZSBrb3Jpc25payB1cHJhdmxqYSBwcm9tZW5vbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IG92ZXJ2aWV3IG92ZXIgYWxsIHRlbXBsYXRlcy4nfSA9ICdQb3RyZWJuYSBwcmF2YSB6YSBwcmlrYXogcHJlZ2xlZGEgc3ZpaCDFoWFibG9uYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnUG90cmVibmEgcHJhdmEgemEgcHJpa2F6IHVzbG92YSB6YSBwcm9tZW5lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UuJ30gPSAnUG90cmVibmEgcHJhdmEgemEgcHJpa2F6IGlzdG9yaWphdGEgcHJvbWVuZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyLid9ID0gJ1BvdHJlYm5hIHByYXZhIHphIHByaWtheiBpc3RvcmlqYXRhIHJhZG5vZyBuYWxvZ2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgY2hhbmdlLid9ID0gJ1BvdHJlYm5hIHByYXZhIHphIGRldGFsamFuIHByaWtheiBpc3RvcmlqYXRhIHByb21lbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgd29ya29yZGVyLid9ID0KICAgICAgICAnUG90cmVibmEgcHJhdmEgemEgZGV0YWxqYW4gcHJpa2F6IGlzdG9yaWphdGEgcmFkbm9nIG5hbG9nYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgQ2hhbmdlIFNjaGVkdWxlLid9ID0gJ1BvdHJlYm5hIHByYXZhIHphIHByaWtheiBsaXN0ZSBQbGFuZXJhIHByb21lbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2UgUFNBLid9ID0gJ1BvdHJlYm5hIHByYXZhIHphIHByaWtheiBsaXN0ZSBwcm9tZW5hIFBEUy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIGNoYW5nZXMgd2l0aCBhbiB1cGNvbWluZyBQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KS4nfSA9CiAgICAgICAgJ1BvdHJlYm5hIHByYXZhIHphIHByaWtheiBsaXN0ZSBwcm9tZW5hIHNhIHByZWRzdG9qZcSHaW0gUlBTIChSZWNlbnppamEgUG9zbGUgU3Byb3ZvxJFlbmphKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biBjaGFuZ2VzLid9ID0gJ1BvdHJlYm5hIHByYXZhIHphIHByaWtheiBsaXN0ZSBzb3BzdHZlbmloIHByb21lbmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBvd24gd29ya29yZGVycy4nfSA9ICdQb3RyZWJuYSBwcmF2YSB6YSBwcmlrYXogbGlzdGUgc29wc3R2ZW5paCByYWRuaWggbmFsb2dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHdyaXRlIGEgcmVwb3J0IGZvciB0aGUgd29ya29yZGVyLid9ID0gJ1BvdHJlYm5hIHByYXZhIHphIHBpc25qZSBpenZlxaF0YWphIHphIHJhZG5pIG5hbG9nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuJ30gPSAnUmVzZXQgcHJvbWVuZSBpIG5qZW5paCByYWRuaWggbmFsb2dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBjaGFuZ2UgYW5kIGl0cyB3b3Jrb3JkZXJzLid9ID0gJ1Jlc2V0IHByb21lbmUgaSBuamVuaWggcmFkbmloIG5hbG9nYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIHRhc2sgdG8gY2hlY2sgaWYgc3BlY2lmaWMgdGltZXMgaGF2ZSBiZWVuIHJlYWNoZWQgaW4gY2hhbmdlcyBhbmQgd29ya29yZGVycy4nfSA9CiAgICAgICAgJ1Bva3JlbmkgemFkYXRhayByYWRpIHByb3ZlcmUgZGEgbGkgc3UgdSBwcm9tZW5hbWEgaSByYWRuaW0gbmFsb3ppbWEgZG9zdGlnbnV0YSBvZHJlxJFlbmEgdnJlbWVuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZS4nfSA9ICdTYcSNdXZhaiBwcm9tZW51IGthbyDFoWFibG9uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlLid9ID0gJ1NhxI11dmFqIHJhZG5pIG5hbG9nIGthbyDFoWFibG9uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2hlZHVsZSd9ID0gJ1Jhc3BvcmVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NjcmVlbiBhZnRlciBjcmVhdGluZyBhIHdvcmtvcmRlcid9ID0gJ0VrcmFuIHBvc2xlIGtyZWlyYW5qYSByYWRub2cgbmFsb2dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDaGFuZ2VzJ30gPSAnUHJldHJhxb5pIHByb21lbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMuJ30gPSAnUHJldHJhxb5pIHByb21lbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNoYW5nZSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNoYW5nZSBudW1iZXIsIHRoZSBTeXN0ZW1JRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQgd2l0aCBTeXN0ZW1JRC5jb3VudGVyIGZvcm1hdCAoZS5nLiAxMDAxMTgsIDEwMDExOSkuIFdpdGggIkRhdGUiLCB0aGUgY2hhbmdlIG51bWJlcnMgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgYSBjb3VudGVyOyB0aGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LmNvdW50ZXIsIGUuZy4gMjAxMDA2MjQwMDAwMSwgMjAxMDA2MjQwMDAwMi4gV2l0aCAiRGF0ZUNoZWNrc3VtIiwgdGhlIGNvdW50ZXIgd2lsbCBiZSBhcHBlbmRlZCBhcyBjaGVja3N1bSB0byB0aGUgc3RyaW5nIG9mIGRhdGUgcGx1cyB0aGUgU3lzdGVtSUQuIFRoZSBjaGVja3N1bSB3aWxsIGJlIHJvdGF0ZWQgb24gYSBkYWlseSBiYXNpcy4gVGhpcyBmb3JtYXQgbG9va3MgbGlrZSBZZWFyLk1vbnRoLkRheS5TeXN0ZW1JRC5Db3VudGVyLkNoZWNrU3VtLCBlLmcuIDIwMTAwNjI0MTAwMDAwMTcsIDIwMTAwNjI0MTAwMDAwMjYuJ30gPQogICAgICAgICdCaXJhIG1vZHVsIHphIGdlbmVyaXNhbmplIGJyb2phIHByb21lbmEuICJBdXRvSW5jcmVtZW50IiB1dmXEh2F2YSBicm9qIHByb21lbmEsIFN5c3RlbUlEIGkgYnJvamHEjSBzZSBrb3Jpc3RlIHUgU3lzdGVtSUQuYnJvamHEjSBmb3JtYXR1IChucHIuIDEwMDExOCwgMTAwMTE5KS4gU2EgIkRhdGUiIGJyb2pldmkgcHJvbWVuYSDEh2UgYml0aSBnZW5lcmlzYW5pIHByZWtvIHRyZW51dG5vZyBkYXR1bWEgaSBicm9qYcSNYS4gRm9ybWF0IMSHZSBpemdsZWRhdGkga2FvIGdvZGluYS5tZXNlYy5kYW4uYnJvamHEjSAobnByLiAyMDEwMDYyNDAwMDAxLCAyMDEwMDYyNDAwMDAyKS4gU2EgIkRhdGVDaGVja3N1bSIgYnJvamHEjSDEh2UgYml0aSBkb2RhdCBrYW8ga29udHJvbG5pIHpiaXIgbml6dSBzYcSNaW5qZW5vbSBvZCBkYXR1bWEgaSBTeXN0ZW1JRC4gS29udHJvbG5pIHpiaXIgxIdlIHNlIHNtZW5qaXZhdGkgbmEgZG5ldm5vbSBuaXZvdS4gRm9ybWF0IGl6Z2xlZGEgb3Zha286IGdvZGluYS5tZXNlYy5kYW4uU3lzdGVtSUQuYnJvamHEjS5rb250cm9sbmlfemJpciwgbnByLiAyMDEwMDYyNDEwMDAwMDE3LCAyMDAyMDcwMTEwMTAxNTM1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGFnZW50IGZvciB0aGUgd29ya29yZGVyLid9ID0gJ09kcmVkaSBvcGVyYXRlcmEgemEgcmFkbmkgbmFsb2cuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgZGVmYXVsdCBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50SVRTTUNoYW5nZVpvb20gYW5kIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJ30gPQogICAgICAgICdEZWZpbmnFoWUgcG9kcmF6dW1ldmFudSB2aXNpbnUgcmVkYSAodSBwaWtzZWxpbWEpIEhUTUwgcG9samEgdSBBZ2VudElUU01DaGFuZ2Vab29tIGkgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBtYXhpbXVtIGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRJVFNNQ2hhbmdlWm9vbSBhbmQgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nfSA9CiAgICAgICAgJ0RlZmluacWhZSBtYWtzaW1hbG51IHZpc2ludSByZWRhICh1IHBpa3NlbGltYSkgSFRNTCBwb2xqYSB1IEFnZW50SVRTTUNoYW5nZVpvb20gaSBBZ2VudElUU01Xb3JrT3JkZXJab29tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBtaW5pbWFsIGNoYW5nZSBjb3VudGVyIHNpemUgKGlmICJBdXRvSW5jcmVtZW50IiB3YXMgc2VsZWN0ZWQgYXMgSVRTTUNoYW5nZTo6TnVtYmVyR2VuZXJhdG9yKS4gRGVmYXVsdCBpcyA1LCB0aGlzIG1lYW5zIHRoZSBjb3VudGVyIHN0YXJ0cyBmcm9tIDEwMDAwLid9ID0KICAgICAgICAnUG9kZcWhYXZhIG1pbmltYWxudSB2ZWxpxI1pbnUgYnJvamHEjWEgcHJvbWVuYSAoIGFrbyBqZSBpemFicmFuIOKAnm9wZXJhdG9yIHV2ZcSHYW5qYeKAnSBrYW8g4oCeSVRTTSBQcm9tZW5hOjpHZW5lcmF0b3IgYnJvamV2YeKAnSkuIFBvZHJhenVtZXZhbm8gamUgNSwgxaF0byB6bmHEjWkgZGEgYnJvamHEjSBwb8SNaW5qZSBvZCAxMDAwMC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3IgY2hhbmdlcy4nfSA9ICdQb2Rlc2kgbWHFoWludSBzdGFuamEgemEgcHJvbWVuZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3Igd29ya29yZGVycy4nfSA9ICdQb2Rlc2kgbWHFoWludSBzdGFuamEgemEgcmFkbmUgbmFsb2dlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGNoZWNrYm94IGluIHRoZSBBZ2VudElUU01Xb3JrT3JkZXJFZGl0IHNjcmVlbiB0aGF0IGRlZmluZXMgaWYgdGhlIHRoZSBmb2xsb3dpbmcgd29ya29yZGVycyBzaG91bGQgYWxzbyBiZSBtb3ZlZCBpZiBhIHdvcmtvcmRlciBpcyBtb2RpZmllZCBhbmQgdGhlIHBsYW5uZWQgZW5kIHRpbWUgaGFzIGNoYW5nZWQuJ30gPQogICAgICAgICdQcmlrYXp1amUgcG9samUgemEgcG90dnJkdSB1IGVrcmFudSBBZ2VudElUU01Xb3JrT3JkZXJFZGl0IGtvamUgZGVmaW5pxaFlIGRhIGxpIMSHZSBzbGVkZcSHaSByYWRuaSBuYWxvemkgdGFrb8SRZSBiaXRpIHByZW1lxaF0ZW5pIHVrb2xpa28gamUgcmFkbmkgbmFsb2cgaXptZW5qZW4gaSBwbGFuaXJhbm8gdnJlbWUgemF2csWhZXRrYSBwcm9tZW5qZW5vLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgY2hhbmdpbmcgdGhlIHdvcmtvcmRlciBhZ2VudCwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVSBtZW5panUgcHJpa2F6dWplIHZlenUga29qYSBvbW9ndcSHYXZhIGl6bWVudSBvcGVyYXRlcmEgemEgcmFkbmkgbmFsb2csIG5hIGRldGFsam5vbSBwcmlrYXp1IHRvZyBuYWxvZ2EgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgY2hhbmdlIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgY2hhbmdlLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVSBtZW5panUgcHJpa2F6dWplIHZlenUga29qYSBvbW9ndcSHYXZhIGRlZmluaXNhbmplIHByb21lbmUga2FvIMWhYWJsb25hIG5hIGRldGFsam5vbSBwcmlrYXp1IHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIHdvcmtvcmRlciwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1UgbWVuaWp1IHByaWthenVqZSB2ZXp1IGtvamEgb21vZ3XEh2F2YSBkZWZpbmlzYW5qZSByYWRub2cgbmFsb2dhIGthbyDFoWFibG9uYSBuYSBkZXRhbGpub20gcHJpa2F6dSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZWRpdGluZyB0aGUgcmVwb3J0IG9mIGEgd29ya29yZGVyLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVIG1lbmlqdSBwcmlrYXp1amUgdmV6dSBrb2phIG9tb2d1xIdhdmEgaXptZW51IGl6dmXFoXRhamEgemEgcmFkbmkgbmFsb2csIG5hIGRldGFsam5vbSBwcmlrYXp1IHRvZyBuYWxvZ2EgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjaGFuZ2Ugd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVSBtZW5panUgcHJpa2F6dWplIHZlenUga29qYSBvbW9ndcSHYXZhcG92ZXppdmFuamUgcHJvbWVuZSBzYSBkcnVnaW0gb2JqZWt0b20gbmEgZGV0YWxqbm9tIHByaWthenUgcHJvbWVuZSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIHdvcmtvcmRlciB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1UgbWVuaWp1IHByaWthenVqZSB2ZXp1IGtvamEgb21vZ3XEh2F2YSBwb3Zleml2YW5qZSByYWRub2cgbmFsb2dhIHNhIGRydWdpbSBvYmpla3RvbSBuYSBkZXRhbGpub20gcHJpa2F6dSB0b2cgbmFsb2dhIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBtb3ZpbmcgdGhlIHRpbWUgc2xvdCBvZiBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVIG1lbmlqdSBwcmlrYXp1amUgdmV6dSBrb2phIG9tb2d1xIdhdmEgcG9tZXJhbmplIHZyZW1lbnNrb2cgdGVybWluYSBwcm9tZW5lIG5hIGRldGFsam5vbSBwcmlrYXp1IHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyB0YWtpbmcgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1UgbWVuaWp1IHByaWthenVqZSB2ZXp1IGtvamEgb21vZ3XEh2F2YSBwcmV1emltYW5qZSByYWRub2cgbmFsb2dhIG5hIGRldGFsam5vbSBwcmlrYXp1IHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGNvbmRpdGlvbnMgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1UgbWVuaWp1IHByaWthenVqZSB2ZXp1IGtvamEgb21vZ3XEh2F2YSBwcmlzdHVwIHVzbG92aW1hIHByb21lbmUgbmEgZGV0YWxqbm9tIHByaWthenUgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVSBtZW5panUgcHJpa2F6dWplIHZlenUga29qYSBvbW9ndcSHYXZhIHByaXN0dXAgaXN0b3JpamF0dSBwcm9tZW5lIG5hIGRldGFsam5vbSBwcmlrYXp1IHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1UgbWVuaWp1IHByaWthenVqZSB2ZXp1IHphIHByaXN0dXAgaXN0b3JpamF0dSByYWRub2cgbmFsb2dhIG5hIGRldGFsam5vbSBwcmlrYXp1IHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSB3b3Jrb3JkZXIgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1UgbWVuaWp1IHByaWthenVqZSB2ZXp1IHphIGRvZGF2YW5qZSByYWRub2cgbmFsb2dhIG5hIGRldGFsam5vbSBwcmlrYXp1IHByb21lbmUgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGRlbGV0ZSBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVIG1lbmlqdSBwcmlrYXp1amUgdmV6dSB6YSBicmlzYW5qZSBwcm9tZW5lIG5hIGRldGFsam5vbSBwcmlrYXp1IHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSB3b3Jrb3JkZXIgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVSBtZW5panUgcHJpa2F6dWplIHZlenUgemEgYnJpc2FuamUgcmFkbm9nIG5hbG9nYSBuYSBkZXRhbGpub20gcHJpa2F6dSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVSBtZW5panUgcHJpa2F6dWplIHZlenUgemEgaXptZW51IHByb21lbmUgbmEgZGV0YWxqbm9tIHByaWthenUgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1UgbWVuaWp1IHByaWthenVqZSB2ZXp1IHphIGl6bWVudSByYWRub2cgbmFsb2dhIG5hIGRldGFsam5vbSBwcmlrYXp1IHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVIG1lbmlqdSBwcmlrYXp1amUgdmV6dSB6YSBwb3ZyYXRhayBuYSBkZXRhbGpuaSBwcmlrYXogcHJvbWVuZSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgd29ya29yZGVyIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVSBtZW5panUgcHJpa2F6dWplIHZlenUgemEgcG92cmF0YWsgbmEgZGV0YWxqbmkgcHJpa2F6IHJhZG5vZyBuYWxvZ2EgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVIG1lbmlqdSBwcmlrYXp1amUgdmV6dSB6YSDFoXRhbXBhbmplIHByb21lbmUgbmEgZGV0YWxqbm9tIHByaWthenUgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVIG1lbmlqdSBwcmlrYXp1amUgdmV6dSB6YSDFoXRhbXBhbmplIHJhZG5vZyBuYWxvZ2EgbmEgZGV0YWxqbm9tIHByaWthenUgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHJlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycyBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVIG1lbmlqdSBwcmlrYXp1amUgdmV6dSB6YSBwb25pxaF0YXZhbmplIHByb21lbmUgaSBwcmlwYWRhanXEh2loIHJhZG5paCBuYWxvZ2EgbmEgZGV0YWxqbm9tIHByaWthenUgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNoYW5nZSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQcmlrYXp1amUgaXN0b3JpamF0IHRpa2V0YSAob2JybnV0IHJlZG9zbGVkKSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0ZSBNYWNoaW5lJ30gPSAnTWHFoWluYSBzdGFuamEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RvcmVzIGNoYW5nZSBhbmQgd29ya29yZGVyIGlkcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB0ZW1wbGF0ZSBpZCwgd2hpbGUgYSB1c2VyIGlzIGVkaXRpbmcgYSB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJ8SMdXZhIGlkZW50aWZpa2FjaWplIHByb21lbmEgaSByYWRuaWggbmFsb2dhIGkgcHJpcGFkYWp1xIdlIGlkZW50aWZpa2FjaWplIMWhYWJsb25hLCB6YSB2cmVtZSBkb2sga29yaXNuaWsgdXJlxJF1amUgxaFhYmxvbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXInfSA9ICdQcmV1em1pIHJhZG5pIG5hbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgV29ya29yZGVyLid9ID0gJ1ByZXV6bWkgcmFkbmkgbmFsb2cuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgdGhlIHdvcmtvcmRlci4nfSA9ICdQcmV1em1pIHJhZG5pIG5hbG9nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBPdmVydmlldyd9ID0gJ1ByZWdsZWQgxaFhYmxvbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUuJ30gPSAnxaBhYmxvbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY2hhbmdlLCBlLmcuIENoYW5nZSMsIE15Q2hhbmdlIy4gVGhlIGRlZmF1bHQgaXMgQ2hhbmdlIy4nfSA9CiAgICAgICAgJ0lkZW50aWZpa2F0b3IgemEgcHJvbWVudSwgbnByIFByb21lbmEjLCBNb2phUHJvbWVuYSMuIFBvZHJhenVtZXZhbm8gamUgUHJvbWVuYSMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIHdvcmtvcmRlciwgZS5nLiBXb3Jrb3JkZXIjLCBNeVdvcmtvcmRlciMuIFRoZSBkZWZhdWx0IGlzIFdvcmtvcmRlciMuJ30gPQogICAgICAgICdJZGVudGlmaWthdG9yIHphIHJhZG5pIG5hbG9nLCBucHIgUmFkbmlOYWxvZyMsIE1valJhZG5pTmFsb2cjLiBQb2RyYXp1bWV2YW5vIGplIFJhZG5pTmFsb2cjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIEFDTCBtb2R1bGUgcmVzdHJpY3RzIHRoZSB1c3VhZ2Ugb2YgdGhlIHRpY2tldCB0eXBlcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9uIFwnSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzXCcsIHRvIHVzZXJzIG9mIHRoZSBncm91cHMgYXMgZGVmaW5lZCBpbiAiSVRTTUNoYW5nZTo6UmVzdHJpY3RUaWNrZXRUeXBlczo6R3JvdXBzIi4gQXMgdGhpcyBBQ0wgY291bGQgY29sbGlkZSB3aXRoIG90aGVyIEFDTHMgd2hpY2ggYXJlIGFsc28gcmVsYXRlZCB0byB0aGUgdGlja2V0IHR5cGUsIHRoaXMgc3lzY29uZmlnIG9wdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBzaG91bGQgb25seSBiZSBhY3RpdmF0ZWQgaWYgbmVlZGVkLid9ID0KICAgICAgICAnT3ZhaiBBQ0wgbW9kdWwgb2dyYW5pxI1hdmEgbW9ndcSHbm9zdCBrb3JpxaHEh2VuamEgdGlwb3ZhIHRpa2V0YSBrb2ppIHN1IGRlZmluaXNhbmkgdSBwb2RlxaFhdmFuanUgXCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXNcJywgaSB0byBrb3Jpc25pY2ltYSBncnVwYSBkZWZpbmlzYW5pbSB1ICJJVFNNQ2hhbmdlOjpSZXN0cmljdFRpY2tldFR5cGVzOjpHcm91cHMiLiBLYWtvIG92YWogQUNMIG1vxb5lIGRhIHNlIHN1a29iaSBzYSBkcnVnaW0gQUNMLW92aW1hIGtvamkgc2UgaXN0byBvZG5vc2UgbmEgdGlwIHRpa2V0YSwgcG9kZcWhYXZhbmplIGplIHBvZHJhenVtZXZhbm8gaXNrbGp1xI1lbm8gaSB0cmViYSBnYSBha3RpdmlyYXRpIHNhbW8gdWtvbGlrbyBqZSBuZW9waG9kbm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgU2xvdCd9ID0gJ1ZyZW1lbnNraSB0ZXJtaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHlwZXMgb2YgdGlja2V0cywgd2hlcmUgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgYSBsaW5rIHRvIGFkZCBhIGNoYW5nZSB3aWxsIGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJ1RpcG92aSB0aWtldGEsIGtvZCBrb2ppaCDEh2UgdSBkZXRhbGpub20gcHJpa2F6dSBiaXRpIHZpZGxqaXZhIHZlemEgemEgZG9kYXZhbmplIHByb21lbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgU2VhcmNoJ30gPSAnUHJldHJhZ2Ega29yaXNuaWthJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQgKGZyb20gdGVtcGxhdGUpLid9ID0gJ0RvZGFqIHJhZG5pIG5hbG9nIChpeiDFoWFibG9uYSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFkZC4nfSA9ICdEb2RhaiByYWRuaSBuYWxvZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFnZW50Lid9ID0gJ09wZXJhdGVyIHphIHJhZG5pIG5hbG9nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgRGVsZXRlLid9ID0gJ0JyaXNhbmplIHJhZG5vZyBuYWxvZ2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBFZGl0Lid9ID0gJ1VyZcSRZW5qZSByYWRub2cgbmFsb2dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSGlzdG9yeSBab29tLid9ID0gJ0RldGFsamkgaXN0b3JpamF0YSByYWRub2cgbmFsb2dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSGlzdG9yeS4nfSA9ICdJc3RvcmlqYXQgcmFkbm9nIG5hbG9nYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFJlcG9ydC4nfSA9ICdJenZlxaF0YWogcmFkbm9nIG5hbG9nYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20uJ30gPSAnRGV0YWxqaSByYWRub2cgbmFsb2dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydvbmNlJ30gPSAnamVkbm9tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3JlZ3VsYXJseSd9ID0gJ3JlZG92bm8nOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6c3dfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLYXRlZ29yaWE8LT4gQXRoYXJpPC0+IEtpcGF1bWJlbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ2F0ZWdvcnkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ1NpbWFtaWEgbWF0b2tlbyB5YSBraXBhdW1iZWxlIGNoYSBLYXRlZ29yaWEgemluYXpvY2hhbmdhbnl3YSA8LT4gQXRoYXJpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnVXRlbmdhamkgd2Ega2lwYXVtYmVsZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ2hhbmdlTm90aWZpY2F0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZU1hbmFnZW1lbnQgTm90aWZpY2F0aW9uIE1hbmFnZW1lbnQnfSA9ICdVc2ltYW1pemkgd2EgVGFhcmlmYSB6YSBJVFNNIFVzaW1hbWl6aU1hYmFkaWxpa28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIE5vdGlmaWNhdGlvbiBSdWxlJ30gPSAnT25nZXphIFNoZXJpYSB5YSBUYWFyaWZhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1bGUnfSA9ICdTaGVyaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBub3RpZmljYXRpb24gc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ1RhYXJpZmEgbGF6aW1hIGl3ZSBuYSBqaW5hISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOYW1lIGlzIHJlcXVpcmVkLid9ID0gJ0ppbmEgbGluYXRha2l3YS4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTVN0YXRlTWFjaGluZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gU3RhdGUgTWFjaGluZSd9ID0gJ01hc2hpbmUgeWEgSGFsaSB5YSBNc2ltYW1pemknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGEgY2F0YWxvZyBjbGFzcyEnfSA9ICdDaGFndWEgdGFiYWthIGxhIGthdGFsb2dpISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGFsb2cgY2xhc3MgaXMgcmVxdWlyZWQhJ30gPSAnVGFiYWthIGxhIGthdGFsb2dpIGxpbmF0YWtpd2EhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHN0YXRlIHRyYW5zaXRpb24nfSA9ICdPbmdlemEgbXBpdG8gd2EgaGFsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnVGFiYWthIEthdGFsb2dpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBOYW1lJ30gPSAnSmluYSBsYSBLaXR1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG92ZXIgc3RhdGUgdHJhbnNpdGlvbnMgZm9yJ30gPSAnTWFwaXRpbyB5YSBtYXBpdG8geWEgaGFsaSB5YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnRnV0YSBoYWxpIGhpaSB5YSBtcGl0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBuZXcgc3RhdGUgdHJhbnNpdGlvbiBmb3InfSA9ICdPbmdlemEgaGFsaSBtcHlhIHlhIG1waXRvIHlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBzdGF0ZSEnfSA9ICdUYWZhZGhhbGkgY2hhZ3VhIGhhbGkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBuZXh0IHN0YXRlISd9ID0gJ1RhZmFkaGFsaSBjaGFndWEgaGFsaSBpbmF5b2Z1YXRhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IGEgc3RhdGUgdHJhbnNpdGlvbiBmb3InfSA9ICdIYXJpcmkgaGFsaSB5YSBtcGl0byB5YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoZSBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAnS3dlbGkgdW5hdGFrYSBrdWZ1dGEgaGFsaSB5YSBtcGl0byc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2hhbmdlJ30gPSAnT25nZXphIE1hYmFkaWxpa28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UnfSA9ICdNYWJhZGlsaWtvIHlhIElUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVzdGlmaWNhdGlvbid9ID0gJ1VoYWxhbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5wdXQgaW52YWxpZC4nfSA9ICdJbmdpem8gYmF0aWxpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdBdGhhcmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdGVkIERhdGUnfSA9ICdUYXJlaGUgSWxpeW9vbWJ3YSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgQ2hhbmdlIFRlbXBsYXRlJ30gPSAnQ2hhZ3VhIEJhZGlsaSBLaW9sZXpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgdHlwZSd9ID0gJ0FpbmEgeWEgbXVkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHRpbWUgdHlwZS4nfSA9ICdBaW5hIGJhdGlsaSB5YSBtdWRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdGltZSd9ID0gJ01kYSBtcHlhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VDQUJUZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBDaGFuZ2UgQ0FCIGFzIHRlbXBsYXRlJ30gPSAnSGlmYWRoaSBNYWJhZGlsaWtvIHlhIENBQiBrYW1hIGtpb2xlem8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gdG8gaW52b2x2ZWQgcGVyc29ucyBzY3JlZW4nfSA9ICduZW5kYSBrd2VueWUgc2tyaW5pIHlhIHdhdHUgd2FuYW9odXNpa2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBOYW1lJ30gPSAnSmluYSBCYXRpbGknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9ucyBhbmQgQWN0aW9ucyd9ID0gJ01hc2hhcnRpIG5hIFZpdGVuZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmRpdGlvbid9ID0gJ0Z1dGEgU2hhcnRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgY29uZGl0aW9uJ30gPSAnT25nZXphIHNoYXJ0aSBqaXB5YSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb25kaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBhIHZhbGlkIG5hbWUuJ30gPSAnSW5haGl0YWppIGppbmEgaGFsYWxpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIG5hbWUgaXMgbmVlZGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZTonfSA9ICdKaW5hIGxpbWVqaXJ1ZGlhOic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkIGJ5IGFub3RoZXIgY29uZGl0aW9uLid9ID0gJ0hpbGkgamluYSB0YXlhcmkgbGltZXR1bWlrYSBuYSBzaGFydGkgamluZ2luZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF0Y2hpbmcnfSA9ICdMaW5nYW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FueSBleHByZXNzaW9uIChPUiknfSA9ICdVc2VtaSB3b3dvdGUgKEFVKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgZXhwcmVzc2lvbnMgKEFORCknfSA9ICdTbWkgem90ZSAoTkEpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cHJlc3Npb25zJ30gPSAnU2VtaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3Rvcid9ID0gJ0tpdGV1emknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0b3InfSA9ICdPcGVyZXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBFeHByZXNzaW9uJ30gPSAnRnV0YSBVc2VtaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBFeHByZXNzaW9ucyBmb3VuZC4nfSA9ICdIYWt1bmEgU2VtaSB6aWxpem9wYXRpa2FuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBleHByZXNzaW9uJ30gPSAnT25nZXphIHVzZW1pIG1weWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEFjdGlvbid9ID0gJ0Z1dGEgS2l0ZW5kbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBBY3Rpb25zIGZvdW5kLid9ID0gJ0hha3VuYSB2aXRlbmRvIHZpbGl2eW9wYXRpa2FuYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBhY3Rpb24nfSA9ICdPbmdlemEga2l0ZW5kbyBraXB5YSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2hhbmdlPyd9ID0gJ0t3ZWxpIHVuYXRha2Ega3VmdXRhIG1hYmFkaWxpa28gaGF5YT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgJXMlcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBvZiAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlcid9ID0gJ09kYSB5YSBrYXppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgZGV0YWlscyd9ID0gJ09ueWVzaGEgdW5kYW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgd29ya29yZGVyJ30gPSAnT255ZXNoYSBvZGEgeWEga2F6aSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbGVkIGhpc3RvcnkgaW5mb3JtYXRpb24gb2YgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kaWZpZWQnfSA9ICdSZWtlYmlzaHdhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09sZCBWYWx1ZSd9ID0gJ1RoYW1hbmkgeWEgWmFtYW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBWYWx1ZSd9ID0gJ1RoYW1hbmkgTXB5YSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEludm9sdmVkIFBlcnNvbnMgb2YgJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZvbHZlZCBQZXJzb25zJ30gPSAnV2F0dSB3YWxpb2h1c2lrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VNYW5hZ2VyJ30gPSAnTWVuZWphTWFiYWRpbGlrbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIGludmFsaWQuJ30gPSAnTXR1bWlhamkgYmF0aWxpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VCdWlsZGVyJ30gPSAnTWplbnppTWFiYWRpbGlrbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQWR2aXNvcnkgQm9hcmQnfSA9ICdCb2RpIHlhIFVzaGF1cmkgeWEgTWFiYWRpbGlrbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgVGVtcGxhdGUnfSA9ICdLaW9sZXpvIGNoYSBDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwbHkgVGVtcGxhdGUnfSA9ICdPbWJhIEtpb2xlem8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3VGVtcGxhdGUnfSA9ICdLaW9sZXpvIEtpcHlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgdGhpcyBDQUIgYXMgdGVtcGxhdGUnfSA9ICdIaWZhZGhpIGhpaSBDQUIga2FtYSBraW9sZXpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0byBDQUInfSA9ICdPbmdlemEga3dhIENBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIFVzZXInfSA9ICdNdHVtaWFqaSBCYXRpbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBDQUInfSA9ICdDQUIgeWEgc2FzYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdNaXBhbmdpbGlvIHlhIE11a3RhZGhhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZXMgcGVyIHBhZ2UnfSA9ICdNYWJhZGlsaWtvIGt3YSBrdXJhc2EnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgVGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFnZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBCdWlsZGVyJ30gPSAnTWVuZWphIE1qZW56aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgTWFuYWdlcid9ID0gJ01lbmVqYSBNYWJhZGlsaWtvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlcnMnfSA9ICdPZGEgemEga2F6aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBUaW1lJ30gPSAnTXVkYSBVbGlvb21id2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBTdGFydCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRW5kIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsIFN0YXJ0IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsIEVuZCBUaW1lJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VSZXNldAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIHJlc2V0IHRoaXMgY2hhbmdlPyd9ID0gJ0t3ZWxpIHVuYXRha2Ega3V3ZWthIHVweWEgbWFiYWRpbGlrbyBoYXlhPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlU2VhcmNoCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoZS5nLiAxMCo1MTU1IG9yIDEwNTY1OCopJ30gPSAnKG1mLiAxMCo1MTU1IGF1IDEwNTY1OCopJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBBZ2VudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydlLmcuJ30gPSAnbWYuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBDdXN0b21lcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBJbnN0cnVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBSZXBvcnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgUHJpb3JpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgSW1wYWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBDYXRlZ29yeSd9ID0gJ0JhZGlsaSBLYXRlZ29yaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGJlZm9yZS9hZnRlciknfSA9ICcoa2FibGEvYmFhZGEpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhiZXR3ZWVuKSd9ID0gJyhrYXRpa2F0aSknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBhcyBUZW1wbGF0ZSd9ID0gJ0hpZmFkaGkgTWFiYWRpbGlrbyBrYW1hIEtpb2xlem8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB0ZW1wbGF0ZSBzaG91bGQgaGF2ZSBhIG5hbWUhJ30gPSAnS2lvbGV6byBsYXppbWEga2l3ZSBuYSBqaW5hISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcGxhdGUgbmFtZSBpcyByZXF1aXJlZC4nfSA9ICdKaW5hIGxhIGtpb2xlem8gbGluYWhpdGFqaWthLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBTdGF0ZXMnfSA9ICdTZXRpIFVweWEgSGFsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVyd3JpdGUgb3JpZ2luYWwgdGVtcGxhdGUnfSA9ICdBbmRpa2EganV1IHlhIGtpb2xlem8gaGFsaXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCBjaGFuZ2UnfSA9ICdGdXRhIG1hYmFkaWxpa28gaGFsaXNpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VUaW1lU2xvdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBUaW1lIFNsb3QnfSA9ICdTb2dlemEgS2lwZW5nZWxlIGNoYSBNdWRhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW5mb3JtYXRpb24nfSA9ICdCYWRpbGkgVGFhcmlmYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVmZm9ydCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY2NvdW50ZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW5pdGlhdG9yKHMpJ30gPSAnQmFkaWxpIFZpYW56aXNoaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUInfSA9ICdDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnTWFyYSB5YSBtd2lzaG8gaW1lYmFkaWxpc2h3YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdNYXJhIHlhIG13aXNobyBpbWViYWRpbGlzaHdhIG5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09rJ30gPSAnU2F3YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gYmxvY2tzLCB5b3UgbWlnaHQgbmVlZCB0byBwcmVzcyBDdHJsIG9yIENtZCBvciBTaGlmdCBrZXkgd2hpbGUgY2xpY2tpbmcgdGhlIGxpbmsgKGRlcGVuZGluZyBvbiB5b3VyIGJyb3dzZXIgYW5kIE9TKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAnUGFrdWEgS2lhbWJhdGFuaXNobyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENBQiBUZW1wbGF0ZSd9ID0gJ0hhcmlyaSBraW9sZXpvIGNoYSBDQUInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgY2hhbmdlIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAnSGlpIGl0YXRlbmdlbmV6YSBtYWJhZGlsaWtvIG1hcHlhIGt1dG9rYSBrd2VueWUgaGlraSBraW9sZXpvLCBpbGkgdXdlemUga3VoYXJpcmkgbmEga3VoaWZhZGhpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmV3IGNoYW5nZSB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciBpdCBoYXMgYmVlbiBzYXZlZCBhcyB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJ01hYmFkaWxpa28gbWFweWEgeWF0YWZ1dHdhIGtpb3RvbWF0aWtpIGJhYWRhIHlhIGt1aGlmYWRoaXdhIGthbWEga2lvbGV6by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyB3b3Jrb3JkZXIgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuJ30gPQogICAgICAgICdIaWkgaXRhdGVuZ2VuZXphIG9kYSBtcHlhIHlhIGthemkga3V0b2thIGt3ZW55ZSBraW9sZXpvIGhpa2ksIGlsaSB1d2V6ZSBrdWloYXJpcmkgbmEga3VpaGlmYWRoaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB0ZW1wb3JhcnkgY2hhbmdlIHdpbGwgYmUgY3JlYXRlZCB3aGljaCBjb250YWlucyB0aGUgd29ya29yZGVyLid9ID0KICAgICAgICAnTWFiYWRpbGlrbyB5YSBtdWRhIHlhdGF0ZW5nZW5lendhIHllbnllIG9kYSB5YSBrYXppLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcG9yYXJ5IGNoYW5nZSBhbmQgbmV3IHdvcmtvcmRlciB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciB0aGUgd29ya29yZGVyIGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAnTWFiYWRpbGlrbyB5YSBtdWRhIG5hIG9kYSB5YSBrYXppIG1weWEgeWF0YWZ1dHdhIGtpb3RvbWF0aWtpIGJhYWRhIHlhIG9kYSB5YSBrYXppIGt1aGlmYWRoaXdhIGthbWEga2lvbGV6by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nfSA9ICdVbmF0YWthIGt1ZW5kZWxlYT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgSUQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb250ZW50J30gPSAnSGFyaXJpIE1hdWRodWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRlbXBsYXRlIENvbnRlbnQnfSA9ICdIYXJpcmkgTWF1ZGh1aSB5YSBLaW9sZXpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUZW1wbGF0ZSd9ID0gJ0Z1dGEgS2lvbGV6byc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyQWRkCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyIHRvICVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5zdHJ1Y3Rpb24nfSA9ICdNZWxla2V6byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHdvcmtvcmRlciB0eXBlLid9ID0gJ0FpbmEgYmF0aWxpIHlhIG9kYSB5YSBrYXppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBwbGFubmVkIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIHBsYW5uZWQgZW5kIHRpbWUhJ30gPSAnTXVkYSB1bGlvcGFuZ3dhIHdhIGt1YW56YSB1bmF0YWtpd2Ega3V3YSBrYWJsYSB5YSBtdWRhIHVsaW9wYW5nd2Egd2Ega3VtYWxpemEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZm9ybWF0Lid9ID0gJ1VtYml6byBiYXRpbGkuJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBXb3Jrb3JkZXIgVGVtcGxhdGUnfSA9ICdDaGFndWEgS2lvbGV6byBjaGEgT2RhIHlhIGthemknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFnZW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFdvcmtvcmRlciBBZ2VudCBvZiAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyB3b3Jrb3JkZXI/J30gPSAnS3dlbGkgdW5hdGFrYSBrdWZ1dGEgb2RhIGhpaSB5YSBrYXppPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBXb3Jrb3JkZXIuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIENvbmRpdGlvbiEnfSA9CiAgICAgICAgJ0h1d2V6aSBrdWZ1dGEgb2RhIGhpaSB5YSBrYXppLiBJbmF0dW1pa2EgamFwbyBrd2VueWUgc2hhcnRpIG1vamEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgV29ya29yZGVyIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBDb25kaXRpb24ocyknfSA9ICdIaWkgb2RhIHlhIGthemkgaW5hdHVtaWthIGt3ZW55ZSBNYXNoYXJ0aSB5YWZ1YXRheW8uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0ICVzJXMtJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBmb2xsb3dpbmcgd29ya29yZGVycyBhY2NvcmRpbmdseSd9ID0gJ0hhbWlzaGEgb2RhIHphIGthemkgemlmdWF0YXpvIGlwYXNhdnlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHRoZSBwbGFubmVkIGVuZCB0aW1lIG9mIHRoaXMgd29ya29yZGVyIGlzIGNoYW5nZWQsIHRoZSBwbGFubmVkIHN0YXJ0IHRpbWVzIG9mIGFsbCBmb2xsb3dpbmcgd29ya29yZGVycyB3aWxsIGJlIGNoYW5nZWQgYWNjb3JkaW5nbHknfSA9CiAgICAgICAgJ0thbWEgbXVkYSB3YSBrdW1hbGl6YSB3YSBvZGEgeWEga2F6aSBoaWkgdW1lYmFkaWxpc2h3YSwgbXVkYSB3YSBrdWFuemEgd2Egb2RhIHphIGthemkgem90ZSB6aW5hem9mdWF0YSB6aXRhYmFkaWxpa2EnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgJXMlcy0lcyd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyUmVwb3J0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFJlcG9ydCBvZiAlcyVzLSVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydCd9ID0gJ1JpcG90aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWN0dWFsIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgdGltZSEnfSA9ICdNdWRhIGhhbGlzaSB3YSBrdWFuemEgbGF6aW1hIHV3ZSBrYWJsYSB5YSBtdWRhIGhhbGlzaSB3YSBrdW1hbGl6YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgc2V0LCB3aGVuIHRoZSBhY3R1YWwgZW5kIHRpbWUgaXMgc2V0ISd9ID0KICAgICAgICAnTXVkYSBoYWxpc2kgd2Ega3VhbnphIGxhemltYSB1c2V0aXdlLCBwYWxlIG11ZGEgd2Ega3VtYWxpemEgdW1lc2V0aXdhISc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGFrZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBBZ2VudCd9ID0gJ1dha2FsYSB3YSBzYXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byB0YWtlIHRoaXMgd29ya29yZGVyPyd9ID0gJ0t3ZWxpIHVuYXRha2Ega3VjaHVrdWEgb2RhIGhpaSB5YSBrYXppPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgV29ya29yZGVyIGFzIFRlbXBsYXRlJ30gPSAnSGlmYWRoaSBPZGEgeWEga2F6aSBrYW1hIEtpb2xlem8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIG9yaWdpbmFsIHdvcmtvcmRlciAoYW5kIHN1cnJvdW5kaW5nIGNoYW5nZSknfSA9ICdGdXRhIG9kYSBoYWxpc2kgeWEga2F6aSAobmEgbWFiYWRpbGlrbyB5YW5heW9penVuZ3VrYSknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBJbmZvcm1hdGlvbid9ID0gJ1RhYXJpZmEgeWEgT2RhIHlhIGthemknOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biBub3RpZmljYXRpb24gJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZXJlIHdhcyBhbiBlcnJvciBjcmVhdGluZyB0aGUgbm90aWZpY2F0aW9uLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogSVRTTSBDaGFuZ2VzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCB3aXRoIFRpY2tldElEICVzIGRvZXMgbm90IGV4aXN0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaXNzaW5nIHN5c2NvbmZpZyBvcHRpb24gIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGFkZCBjaGFuZ2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlIGZyb20gdGVtcGxhdGUhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDQUJUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNoYW5nZSBmb3VuZCBmb3IgY2hhbmdlSUQgJXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBDQUIgb2YgY2hhbmdlICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgdGhlIHRlbXBsYXRlLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQ29uZGl0aW9uSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyAlcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGNyZWF0ZSBuZXcgY29uZGl0aW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIENvbmRpdGlvbklEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgRXhwcmVzc2lvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBBY3Rpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgQWN0aW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBBY3Rpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3I6IFVua25vd24gZmllbGQgdHlwZSAiJXMiISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25JRCAlcyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIGdpdmVuIENoYW5nZUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBkb2VzIG5vdCBoYXZlIGFuIGFsbG93ZWQgY2hhbmdlIHN0YXRlIHRvIGJlIGRlbGV0ZWQhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY2hhbmdlSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmtub3duIHR5cGUgIiVzIiBlbmNvdW50ZXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5IHpvb20sIG5vIEhpc3RvcnlFbnRyeUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5RW50cnkgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlIENBQiBmb3IgQ2hhbmdlICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU1hbmFnZXIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2VNYW5hZ2VyJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IENBQid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgQ2hhbmdlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgV29ya29yZGVycyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUElSLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUElSJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQU0EucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBQU0EnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBjcmVhdGUgb3V0cHV0LCBhcyB0aGUgd29ya29yZGVyIGlzIG5vdCBhdHRhY2hlZCB0byBhIGNoYW5nZSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgbm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gY2hhbmdlIHRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyJ30gPSAnT2RhIHlhIGthemkgeWEgSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duIHdvcmtvcmRlciB0aXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlciBPdmVydmlldyAoJXMpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWRTdGFydFRpbWUnfSA9ICdNdWRhS3VhbnphVWxpb3Bhbmd3YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkRW5kVGltZSd9ID0gJ011ZGFLdWlzaGFVbGlvcGFuZ3dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbFN0YXJ0VGltZSd9ID0gJ011ZGFIYWxpc2lLdWFuemEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsRW5kVGltZSd9ID0gJ011ZGFIYWxpc2lLdW1hbGl6YSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUmVzZXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byByZXNldCBXb3JrT3JkZXIgJXMgb2YgQ2hhbmdlICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gcmVzZXQgQ2hhbmdlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlU2NoZWR1bGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2UgU2NoZWR1bGUnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VUaXRsZSd9ID0gJ0JhZGlsaSBLaWNoYSBjaGEgSGFiYXJpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlcnMnfSA9ICdPZGEgemEga2F6aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VTdGF0ZSd9ID0gJ0JhZGlsaUhhbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCBSZXN1bHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrIE9yZGVyIFRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSnVzdGlmaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFJlcG9ydCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpb3JpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEltcGFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmVmb3JlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIHRoZSB0ZW1wbGF0ZSAiJXMiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIGNoYW5nZSAiJXMiLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjaGFuZ2UgY2FuXCd0IGJlIG1vdmVkLCBhcyBpdCBoYXMgbm8gd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIGZpcnN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgbW92ZSBhIGNoYW5nZSB3aGljaCBhbHJlYWR5IGhhcyBzdGFydGVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgbW92ZSB0aGUgaW5kaXZpZHVhbCB3b3Jrb3JkZXJzIGluc3RlYWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjdXJyZW50ICVzIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgJXMgb2YgYWxsIHdvcmtvcmRlcnMgaGFzIHRvIGJlIGRlZmluZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBtb3ZlIHRpbWUgc2xvdCBmb3Igd29ya29yZGVyICMlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBUZW1wbGF0ZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgdGVtcGxhdGUgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgIiVzIiEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIHdvcmtvcmRlciBmcm9tIHRlbXBsYXRlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVPdmVydmlldy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFRlbXBsYXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJBZGQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIG9uIHRoZSBjaGFuZ2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBhZGQgd29ya29yZGVyISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWdlbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFdvcmtPcmRlcklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gc2V0IHRoZSB3b3Jrb3JkZXIgYWdlbnQgb2YgdGhlIHdvcmtvcmRlciAiJXMiIHRvIGVtcHR5ISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgdGhlIHdvcmtvcmRlciAiJXMiISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZmluZCBDaGFuZ2UgZm9yIFdvcmtPcmRlciAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckRlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgd29ya29yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBXb3JrT3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBhcyBubyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5Wm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBlbnRyeSAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5IFpvb20nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlclRha2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB0YWtlIHRoZSB3b3Jrb3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHdvcmtvcmRlciAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9JVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIGNvbmZpZyBvcHRpb24gJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBvcHRpb24gJXMgbmVlZHMgdG8gYmUgYSBIQVNIIHJlZiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY29uZmlnIG9wdGlvbiBmb3VuZCBmb3IgdGhlIHZpZXcgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGl0bGU6ICVzIHwgVHlwZTogJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBDQUJzJ30gPSAnQ0FCIHphbmd1JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNoYW5nZXMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IENoYW5nZXMnfSA9ICdNYWJhZGlsaWtvIFlhbmd1JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeVdvcmtPcmRlcnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IFdvcmsgT3JkZXJzJ30gPSAnJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ2hhbmdlTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZXF1ZXN0ZWQnfSA9ICdvbWJ3YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIGFwcHJvdmFsJ30gPSAna2liYWxpIGtpbmFzdWJpcmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVqZWN0ZWQnfSA9ICdrYXRhbGl3YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZlZCd9ID0gJ2t1YmFsaXdhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2luIHByb2dyZXNzJ30gPSAna3dlbnllIG1hZW5kZWxlbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIHBpcid9ID0gJ3BpciBpbmFzdWJpcmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc3VjY2Vzc2Z1bCd9ID0gJ21hZmFuaWtpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydmYWlsZWQnfSA9ICdTaGluZHdhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NhbmNlbGVkJ30gPSAnc2l0aXNod2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmV0cmFjdGVkJ30gPSAnb25kb2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY3JlYXRlZCd9ID0gJ3RlbmdlbmV6d2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWNjZXB0ZWQnfSA9ICdrdWJhbGl3YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWFkeSd9ID0gJ3RheWFyaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZhbCd9ID0gJ2tpYmFsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3b3Jrb3JkZXInfSA9ICdvZGEgeWEga2F6aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydiYWNrb3V0J30gPSAna3VqaXRvYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydkZWNpc2lvbid9ID0gJ21hYW11emknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGlyJ30gPSAnYmFhZGEgeWEgdXRla2VsZXphamkgd2EgbWFwaXRpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyd9ID0gJ25pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCd9ID0gJ3NpeW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZW1wdHknfSA9ICduaSB0dXB1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCBlbXB0eSd9ID0gJ3NpeW8gdHVwdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBncmVhdGVyIHRoYW4nfSA9ICduaSBrdWJ3YSB6YWlkaSB5YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBsZXNzIHRoYW4nfSA9ICduaSBuZG9nbyB6YWlkaSB5YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBiZWZvcmUnfSA9ICduaSBrYWJsYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBhZnRlcid9ID0gJ25pIGJhYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NvbnRhaW5zJ30gPSAndnllbnllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBjb250YWlucyd9ID0gJ2hhaW5hIGtpdHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmVnaW5zIHdpdGgnfSA9ICdpbmFhbnphIG5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2VuZHMgd2l0aCd9ID0gJ2luYWlzaGlhIG5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3NldCd9ID0gJ3NldGknOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2YgdGhlIGFnZW50cyB3aG8gaGF2ZSBwZXJtaXNzaW9uIHRvIHRha2Ugd29ya29yZGVycy4gS2V5IGlzIGEgbG9naW4gbmFtZS4gQ29udGVudCBpcyAwIG9yIDEuJ30gPQogICAgICAgICdPcm9kaGEgeWEgbWF3YWthbGEgd2VueWUgcnVodXNhIHlhIGt1Y2h1a3VhIG9kYSB6YSBrYXppLiBNdWhpbXUgbmkgamluYSBsYSBrdWluZ2lhLiBJbGl5b21vIG5pIDAgYXUgMS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBsaXN0IG9mIHdvcmtvcmRlciBzdGF0ZXMsIGF0IHdoaWNoIHRoZSBBY3R1YWxTdGFydFRpbWUgb2YgYSB3b3Jrb3JkZXIgd2lsbCBiZSBzZXQgaWYgaXQgd2FzIGVtcHR5IGF0IHRoaXMgcG9pbnQuJ30gPQogICAgICAgICdPcm9kaGEgeWEgaGFsaSB6YSBvZGEgeWEga2F6aSwgYW1iYXBvIE11ZGFIYWxpc2lLdWFuemEgd2Egb2RhIHlhIGthemkgdXRhc2V0aXdhIGthbWEgdWxpa3V3YSB3YXppIGthdGlrYSBwb2ludGkgaGlpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyJ30gPSAnT25nZXphIE9kYSB5YSBrYXppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgKGZyb20gVGVtcGxhdGUpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIGNoYW5nZSBmcm9tIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciAoZnJvbSB0ZW1wbGF0ZSkgdG8gdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBmcm9tIHRlbXBsYXRlJ30gPSAnT25nZXphIGt1dG9rYSBrd2VueWUga2lvbGV6byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgQ0lQIG1hdHJpeC4nfSA9ICdNc2ltYW1pemkgd2EgbWF0cmlraSB5YSBDSVAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIHRoZSBzdGF0ZSBtYWNoaW5lLid9ID0gJ01zaW1hbWl6aSB3YSBtYXNoaW5lIHlhIGhhbGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZSBhZHZpc29yeSBib2FyZHMuJ30gPQogICAgICAgICdNb2R1bGkgdGFhcmlmYSB5YSBraW9sZXN1cmEgY2hhIHdha2FsYSBrdW9ueWVzaGEgaWRhZGkgeWEgYm9kaSB6YSB1c2hhdXJpIHdhIG1hYmFkaWxpa28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgbWFuYWdlZCBieSB0aGUgdXNlci4nfSA9CiAgICAgICAgJ01vZHVsaSB0YWFyaWZhIHlhIGtpb2xlc3VyYSBjaGEgd2FrYWxhIGt1b25hIGlkYWRpIHlhIG1hYmFkaWxpa28geWFuYXlvc2ltYW1pd2EgbmEgbXR1bWlhamkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMuJ30gPQogICAgICAgICdNb2R1bGkgdGFhcmlmYSB5YSBraW9sZXN1cmEgY2hhIHdha2FsYSBrdW9uYSBpZGFkaSB5YSBtYWJhZGlsaWtvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBNZW1iZXIgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50IHRvb2xiYXJzLiBEZWZhdWx0OiAzIGhvdXJzICgxODAgbWludXRlcykuJ30gPQogICAgICAgICdNdWRhIHdhIGhpZmFkaGkgbXVkYSBrd2EgZGFraWthIGt3YSBhamlsaSB5YSBtd2FtYmFhIHphbmEgemEgdXNpbWFtaXppIHdhIG1hYmFkaWxpa28uIENoYWd1by1tc2luZ2k6IE1hc2FhIDMgKERha2lrYSAxODApLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudC4gRGVmYXVsdDogNSBkYXlzICg3MjAwIG1pbnV0ZXMpLid9ID0KICAgICAgICAnTXVkYSB3YSBoaWZhZGhpIG11ZGEga3dhIGRha2lrYSBrd2EgYWppbGkgeWEgdXNpbWFtaXppIHdhIG1hYmFkaWxpa28uIENoYWd1by1tc2luZ2k6IFNpa3UgNSAoRGFraWthIDcyMDApLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQ0FCIFRlbXBsYXRlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEludm9sdmVkIFBlcnNvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnTWFwaXRpbyB5YSBNYWJhZGlsaWtvIEtpa29tbyAiY2hhIGNoaW5pIic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNjaGVkdWxlJ30gPSAnQmFkaWxpIFJhdGliYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2NoZWR1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIFdvcmtvcmRlciBUZW1wbGF0ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFuZCB3b3Jrb3JkZXIgdGVtcGxhdGVzIGVkaXRlZCBieSB0aGlzIHVzZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhcmVhLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgaW52b2x2ZWQgcGVyc29ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgbGltaXQgcGVyIHBhZ2UgZm9yIENoYW5nZSBPdmVydmlldyAiU21hbGwiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2Ugc2VhcmNoIGJhY2tlbmQgcm91dGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnS2lwYW5nYSBuamlhIGNoYSBtYXppbmdpcmEgeWEgbnl1bWEgeWEga2lvbGVzdXJhIGNoYSB3YWthbGEgY2hhIGt1dGFmdXRhIG1hYmFkaWxpa28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbiBFZGl0J30gPSAnU2hhcnRpIEhhcmlyaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb24gT3ZlcnZpZXcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlIHdoaWNoIHNjcmVlbiBzaG91bGQgYmUgc2hvd24gYWZ0ZXIgYSBuZXcgd29ya29yZGVyIGhhcyBiZWVuIGNyZWF0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlcyBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgd2hlbiBwbGFubmVkIHRoZSBzdGFydCB0aW1lIG9yIG90aGVyIHRpbWUgdmFsdWVzIGhhdmUgYmVlbiByZWFjaGVkL3Bhc3NlZC4nfSA9CiAgICAgICAgJ0luYSBzYW5pZGkgbmkga3dhIG1hcmEgbmdhcGkgdGFhcmlmYSB6aW5hdHVtd2EgcGFsZSBtdWRhIHVsaW9wYW5nd2Egd2Ega3VhbnphIGF1IG1pZGEgbWluZ2luZSBpbmFwb2Zpa2l3YS9rdXBpdHdhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgQ2hhbmdlJ30gPSAnVGVuZ2VuZXphIE1hYmFkaWxpa28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSAoZnJvbSBUZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgY2hhbmdlIChmcm9tIHRlbXBsYXRlKSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgSVRTTSBDaGFuZ2UgTWFuYWdlbWVudCBub3RpZmljYXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgZm9yIGEgd29ya29yZGVyLiBUaGlzIGVudHJ5IG11c3QgZXhpc3QgaW4gZ2VuZXJhbCBjYXRhbG9nIGNsYXNzIFwnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpUeXBlXCcuJ30gPQogICAgICAgICdDaGFndW8tbXNpbmdpIGxhIGFpbmEgeWEgb2RhIHlhIGthemkuIEhpbGkgaW5naXpvIGxhemltYSBsaXdlcG8ga2F0aWthIHRhYmFrYSBsYSBrYXRhbG9naSBsYSB1anVtbGEgXCdJVFNNOjpVc2ltYW1pemlNYWJhZGlsaWtvOjpPZGEgeWEgS2F6aTo6QWluYVwnIC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIEFjdGlvbnMgd2hlcmUgYSBzZXR0aW5ncyBidXR0b24gaXMgYXZhaWxhYmxlIGluIHRoZSBsaW5rZWQgb2JqZWN0cyB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGVzZSBBY3Rpb25zIG11c3QgaGF2ZSByZWdpc3RlcmVkIHRoZSBmb2xsb3dpbmcgSlMgYW5kIENTUyBmaWxlczogQ29yZS5BbGxvY2F0aW9uTGlzdC5jc3MsIENvcmUuVUkuQWxsb2NhdGlvbkxpc3QuanMsIENvcmUuVUkuVGFibGUuU29ydC5qcywgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuanMgYW5kIENvcmUuQWdlbnQuTGlua09iamVjdC5qcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIHNpZ25hbHMgZm9yIGVhY2ggd29ya29yZGVyIHN0YXRlLid9ID0gJ0ZhZmFudWEgaXNoYXJhIGt3YSBraWxhIGhhbGkgeWEgb2RhIHlhIGthemkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIENoYW5nZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgQ2hhbmdlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFdvcmtvcmRlciB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBXb3Jrb3JkZXIgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNoYW5nZSBsaXN0Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBtb2R1bGkgeWEgbWFwaXRpbyBrdW9ueWVzaGEgbXVvbmVrYW5vIG1kb2dvIHdhIG9yb2RoYSB5YSBtYWJhZGlsaWtvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgdGVtcGxhdGUgbGlzdC4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgbW9kdWxpIHlhIG1hcGl0aW8ga3Vvbnllc2hhIG11b25la2FubyBtZG9nbyB3YSBvcm9kaGEgeWEga2lvbGV6by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBhY2NvdW50ZWQgdGltZS4nfSA9ICdJbmFmYWZhbnVhIGthbWEgaXRhd2V6ZWthbmEga3VmYWZhbnVhIG11ZGEgd2EgdWhhc2lidS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBwbGFubmVkIGVmZm9ydC4nfSA9ICdJbmFmYWZhbnVhIGthbWEgaXRhd2V6ZWthbmEga3VjaGFwaXNoYSBqdWh1ZGkgemlsaXpvcGFuZ3dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgY2hhbmdlIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSBjaGFuZ2UgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGthbWEgaGFsaSB6YSBtd2lzaG8gemEgbWFiYWRpbGlrbyB6aW5hem9wYXRpa2FuYSAoa2FtYSBpbGl2eW9mYWZhbnVsaXdhIG5hIG1hc2hpbmUgeWEgaGFsaSkgemlydWh1c2l3ZSBrYW1hIG1hYmFkaWxpa28geWFrbyBrd2VueWUgaGFsaSBpbGl5b2Z1bmd3YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiByZWFjaGFibGUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUpIHdvcmtvcmRlciBlbmQgc3RhdGVzIHNob3VsZCBiZSBhbGxvd2VkIGlmIGEgd29ya29yZGVyIGlzIGluIGEgbG9ja2VkIHN0YXRlLid9ID0KICAgICAgICAnSW5hZmFmYW51YSBrYW1hIGhhbGkgemEgbXdpc2hvIHphIG9kYSB6YSBrYXppIHppbmF6b3BhdGlrYW5hIChrYW1hIGlsaXZ5b2ZhZmFudWxpd2EgbmEgbWFzaGluZSB5YSBoYWxpKSB6aXJ1aHVzaXdlIGthbWEgb2RhIHlhIGthemkgaWtvIGt3ZW55ZSBoYWxpIGlsaXlvZnVuZ3dhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBhY2NvdW50ZWQgdGltZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnSW5hZmFmYW51YSBrYW1hIG11ZGEgdWxpb2hlc2FiaXdhIHVvbnllc2h3ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWN0dWFsIHN0YXJ0IGFuZCBlbmQgdGltZXMgc2hvdWxkIGJlIHNldC4nfSA9ICdJbmFmYWZhbnVhIGthbWEgbXVkYSBoYWxpc2kgd2Ega3VhbnphIG5hIGt1bWFsaXphIHVzZXRpd2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGNoYW5nZSBzZWFyY2ggYW5kIHRoZSB3b3Jrb3JkZXIgc2VhcmNoIGZ1bmN0aW9ucyBjb3VsZCB1c2UgdGhlIG1pcnJvciBEQi4nfSA9CiAgICAgICAgJ0FtZWZhZmFudWEga2FtYSBDaGFuZ2UgdXRhZnV0YWppIG5hIFdvcmtvcmRlciB0YWZ1dGEga2F6aSBpbmF3ZXphIGt1dHVtaWEga2lvbyBEQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHN0YXRlIGNhbiBiZSBzZXQgaW4gQWdlbnRJVFNNQ2hhbmdlRWRpdC4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEga2FtYSBoYWxpIHlhIG1hYmFkaWxpa28gaW5hd2V6YSBrdXNldGl3YSBrYXRpa2EgV2FrYWxhSVRTTUhhcmlyaU1hYmFkaWxpa28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHBsYW5uZWQgZWZmb3J0IHNob3VsZCBiZSBzaG93bi4nfSA9ICdJbmFmYWZhbnVhIGthbWEganVodWRpIHppbGl6b3Bhbmd3YSB6aW9ueWVzaHdlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgcHJpbnQgYnkgY3VzdG9tZXIuJ30gPSAnSW5hZmFmYW51YSBrYW1hIHRhcmVoZSBpbGl5b29tYndhIGljaGFwaXNod2UgbmEgbXRlamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzZWFyY2hlZCBieSBjdXN0b21lci4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEga2FtYSB0YXJlaGUgaWxpeW9vbWJ3YSBpdGFmdXR3ZSBuYSBtdGVqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNldCBieSBjdXN0b21lci4nfSA9ICdJbmFmYWZhbnVhIGthbWEgdGFyZWhlIGlsaXlvb21id2EgaXNldGl3ZSBuYSBtdGVqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNob3duIGJ5IGN1c3RvbWVyLid9ID0gJ0luYWZhZmFudWEga2FtYSB0YXJlaGUgaWxpeW9vbWJ3YSBpb255ZXNod2UgbmEgbXRlamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciBzdGF0ZSBzaG91bGQgYmUgc2hvd24uJ30gPSAnSW5hZmFmYW51YSBrYW1hIGhhbGkgeWEgb2RhIHlhIGthemkgaW9ueWVzaHdlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSB3b3Jrb3JkZXIgdGl0bGUgc2hvdWxkIGJlIHNob3duLid9ID0gJ0luYWZhZmFudWEga2FtYSBraWNod2EgY2hhIGhhYmFyaSBjaGEgb2RhIHlhIGthemkga2lvbnllc2h3ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBzaG93biBncmFwaCBhdHRyaWJ1dGVzLid9ID0gJ0luYWZhZmFudWEgc2lmYSB6YSBqZWR3YWxpIGxpbGlsb29ueWVzaHdhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoYXQgb25seSBjaGFuZ2VzIGNvbnRhaW5pbmcgV29ya29yZGVycyBsaW5rZWQgd2l0aCBzZXJ2aWNlcywgd2hpY2ggdGhlIGN1c3RvbWVyIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gdXNlIHdpbGwgYmUgc2hvd24uIEFueSBvdGhlciBjaGFuZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEga3dhbWJhIG1hYmFkaWxpa28geWVueWUgb2RhIHphIGthemkgemlsaXpvdW5nYW5pc2h3YSBuYSBodWR1bWEsIGFtYmF6byBtdGVqYSBhbmEgcnVodXNhIHlhIGt1dHVtaWEgeml0YW9ueWVzaHdhLiBNYWJhZGlsaWtvIG1lbmdpbmUgeW95b3RlIGhheWF0YW9ueWVzaHdhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSBhbGxvd2VkIHRvIGRlbGV0ZS4nfSA9ICdJbmFmYWZhbnVhIGhhbGkgemEgbWFiYWRpbGlrbyB6aW5hem9ydWh1c2l3YSBrdWZ1dGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFBTQSBvdmVydmlldy4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgaGFsaSB6YSBtYWJhZGlsaWtvIGFtYmF6byB6aXRhdHVtaWthIGthbWEgdmljaHVqaW8ga2F0aWthIE1hcGl0aW8geWEgTWFiYWRpbGlrbyB5YSBQU0EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBoYWxpIHphIG1hYmFkaWxpa28gYW1iYXpvIHppdGF0dW1pa2Ega2FtYSB2aWNodWppbyBrYXRpa2EgbWFwaXRpbyB5YSBSYXRpYmEgemEgTWFiYWRpbGlrby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgaGFsaSB6YSBtYWJhZGlsaWtvIGFtYmF6byB6aXRhdHVtaWthIGthbWEgdmljaHVqaW8ga2F0aWthIG1hcGl0aW8geWEgTXlDQUIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBoYWxpIHphIG1hYmFkaWxpa28gYW1iYXpvIHppdGF0dW1pa2Ega2FtYSB2aWNodWppbyBrYXRpa2EgbWFwaXRpbyB5YSBNYWJhZGlsaWtvWWFuZ3UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGhhbGkgemEgbWFiYWRpbGlrbyBhbWJhem8geml0YXR1bWlrYSBrYW1hIHZpY2h1amlvIGthdGlrYSBtYXBpdGlvIHlhIG1lbmVqYSBtYWJhZGlsaWtvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgaGFsaSB6YSBtYWJhZGlsaWtvIGFtYmF6byB6aXRhdHVtaWthIGthbWEgdmljaHVqaW8ga2F0aWthIG1hcGl0aW8geWEgbWFiYWRpbGlrby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGhhbGkgemEgbWFiYWRpbGlrbyBhbWJhem8geml0YXR1bWlrYSBrYW1hIHZpY2h1amlvIGthdGlrYSBtYXBpdGlvIHlhIHJhdGliYSB6YSBtYWJhZGlsaWtvIHlhIG10ZWphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGNoYW5nZSB0aXRsZSBmb3IgYSBkdW1teSBjaGFuZ2Ugd2hpY2ggaXMgbmVlZGVkIHRvIGVkaXQgYSB3b3Jrb3JkZXIgdGVtcGxhdGUuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGNoYWd1by1tc2luZ2kgbGEga2ljaHdhIGNoYSBoYWJhcmkgY2hhIG1hYmFkaWxpa28ga3dhIGFqaWxpIHlhIG1hYmFkaWxpa28geWEgbWZhbm8gYW1iYXlvIHlhbmFoaXRhamlrYSBrdWhhcmlyaSBraW9sZXpvIGNoYSBvZGEgeWEga2F6aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBjaGFndW8tbXNpbmdpIGxhIHZpZ2V6byB2eWEga3VwYW5nYSBrYXRpa2EgbWFwaXRpbyB5YSBtYWJhZGlsaWtvIHlhIFBTQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgY2hhZ3VvLW1zaW5naSBsYSB2aWdlem8gdnlhIGt1cGFuZ2Ega2F0aWthIG1hcGl0aW8geWEgbWVuZWphIG1hYmFkaWxpa28uICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9ICdJbmFmYWZhbnVhIGNoYWd1by1tc2luZ2kgbGEgdmlnZXpvIHZ5YSBrdXBhbmdhIGthdGlrYSBtYXBpdGlvIHlhIG1hYmFkaWxpa28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBjaGFndW8tbXNpbmdpIGxhIHZpZ2V6byB2eWEga3VwYW5nYSBrYXRpa2EgbWFwaXRpbyB5YSBtYWJhZGlsaWtvIHlhIHJhdGliYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgY2hhZ3VvLW1zaW5naSBsYSB2aWdlem8gdnlhIGt1cGFuZ2Ega2F0aWthIG1hcGl0aW8geWEgbWFiYWRpbGlrbyB5YSBDQUJZYW5ndS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGNoYWd1by1tc2luZ2kgbGEgdmlnZXpvIHZ5YSBrdXBhbmdhIGthdGlrYSBtYXBpdGlvIHlhIG1hYmFkaWxpa28geWEgTWFiYWRpbGlrb1lhbmd1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgY2hhZ3VvLW1zaW5naSBsYSB2aWdlem8gdnlhIGt1cGFuZ2Ega2F0aWthIG1hcGl0aW8geWEgbWFiYWRpbGlrbyB5YSBPZGFaYW5ndXp6YUthemkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBjaGFndW8tbXNpbmdpIGxhIHZpZ2V6byB2eWEga3VwYW5nYSBrYXRpa2EgbWFwaXRpbyB5YSBtYWJhZGlsaWtvIHlhIFBJUi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGNoYWd1by1tc2luZ2kgbGEgdmlnZXpvIHZ5YSBrdXBhbmdhIGthdGlrYSBtYXBpdGlvIHlhIG1hYmFkaWxpa28geWEgcmF0aWJhIHlhIG1hYmFkaWxpa28geWEgbXRlamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGNoYWd1by1tc2luZ2kgbGEgdmlnZXpvIHZ5YSBrdXBhbmdhIGthdGlrYSBtYXBpdGlvIHlhIG1hYmFkaWxpa28geWEga2lvbGV6by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9ICdJbmFmYWZhbnVhIGNoYWd1by1tc2luZ2kgbGEgdXRhcmF0aWJ1IHdhIGt1cGFuZ2Ega2F0aWthIG1hcGl0aW8geWEgQ0FCWWFuZ3UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3Lid9ID0gJ0luYWZhZmFudWEgY2hhZ3VvLW1zaW5naSBsYSB1dGFyYXRpYnUgd2Ega3VwYW5nYSBrYXRpa2EgbWFwaXRpbyB5YSBNYWJhZGlsaWtvWWFuZ3UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBjaGFndW8tbXNpbmdpIGxhIHV0YXJhdGlidSB3YSBrdXBhbmdhIGthdGlrYSBtYXBpdGlvIHlhIE9kYVphbmd1emFLYXppLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9ICdJbmFmYWZhbnVhIGNoYWd1by1tc2luZ2kgbGEgdXRhcmF0aWJ1IHdhIGt1cGFuZ2Ega2F0aWthIG1hcGl0aW8geWEgUElSLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBQU0Egb3ZlcnZpZXcuJ30gPSAnSW5hZmFmYW51YSBjaGFndW8tbXNpbmdpIGxhIHV0YXJhdGlidSB3YSBrdXBhbmdhIGthdGlrYSBtYXBpdGlvIHlhIG1hYmFkaWxpa28geWEgUFNBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBjaGFndW8tbXNpbmdpIGxhIHV0YXJhdGlidSB3YSBrdXBhbmdhIGthdGlrYSBtYXBpdGlvIHlhIG1hYmFkaWxpa28geWEgbWVuZWphLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAnSW5hZmFmYW51YSBjaGFndW8tbXNpbmdpIGxhIHV0YXJhdGlidSB3YSBrdXBhbmdhIGthdGlrYSBtYXBpdGlvIHlhIG1hYmFkaWxpa28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBjaGFndW8tbXNpbmdpIGxhIHV0YXJhdGlidSB3YSBrdXBhbmdhIGthdGlrYSBtYXBpdGlvIHlhIG1hYmFkaWxpa28geWEgcmF0aWJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgY2hhZ3VvLW1zaW5naSBsYSB1dGFyYXRpYnUgd2Ega3VwYW5nYSBrYXRpa2EgbWFwaXRpbyB5YSBtYWJhZGlsaWtvIHlhIHJhdGliYSB5YSBtdGVqYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9ICdJbmFmYWZhbnVhIGNoYWd1by1tc2luZ2kgbGEgdXRhcmF0aWJ1IHdhIGt1cGFuZ2Ega2F0aWthIG1hcGl0aW8geWEga2lvbGV6by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNhdGVnb3J5IG9mIGEgY2hhbmdlLid9ID0gJ0luYWZhZmFudWEgdGhhbWFuaSB5YSBjaGFndW8tbXNpbmdpIGxhIGthdGVnb3JpYSB5YSBtYWJhZGlsaWtvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW1wYWN0IG9mIGEgY2hhbmdlLid9ID0gJ0luYWZhZmFudWEgdGhhbWFuaSB5YSBjaGFndW8tbXNpbmdpIGxhIGF0aGFyaSB5YSBtYWJhZGlsaWtvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmaWVsZCB0eXBlIG9mIENvbXBhcmVWYWx1ZSBmaWVsZHMgZm9yIGNoYW5nZSBhdHRyaWJ1dGVzIHVzZWQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gVmFsaWQgdmFsdWVzIGFyZSBTZWxlY3Rpb24sIFRleHQgYW5kIERhdGUuIElmIGEgdHlwZSBpcyBub3QgZGVmaW5lZCwgdGhlIGZpZWxkIHdpbGwgbm90IGJlIHNob3duLid9ID0KICAgICAgICAnSW5hZmFmYW51YSBhaW5hIHlhIHNlaGVtdSB5YSBMaW5nYW5pc2hhVGhhbWFuaSBrd2EgYWppbGkgeWEgc2lmYSB6YSBtYWJhZGlsaWtvIHppbmF6b3R1bWlrYSBrd2VueWUgV2FrYWxhSVRTTU1hYmFkaWxpa29TaGFydGlIYXJpcmkuIFRoYW1hbmkgaGFsYWxpIG5pIENoYWd1bywgTmFrYWxhIG5hIFRhcmVoZS4gS2FtYSBhaW5hIGhhaWphZmFmYW51bGl3YSwgc2VoZW11IGhhaXRhb255ZXNod2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3Igd29ya29yZGVyIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGFpbmEgeWEgc2VoZW11IHlhIExpbmdhbmlzaGFUaGFtYW5pIGt3YSBhamlsaSB5YSBzaWZhIHphIG9kYSB6YSBrYXppIHppbmF6b3R1bWlrYSBrd2VueWUgV2FrYWxhSVRTTU1hYmFkaWxpa29TaGFydGlIYXJpcmkuIFRoYW1hbmkgaGFsYWxpIG5pIENoYWd1bywgTmFrYWxhIG5hIFRhcmVoZS4gS2FtYSBhaW5hIGhhaWphZmFmYW51bGl3YSwgc2VoZW11IGhhaXRhb255ZXNod2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9iamVjdCBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIGNoYW5nZSBvYmplY3RzIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIHNpZmEgemEga2l0dSBhbWJhY2hvIGtpbmF3ZXphIGt1Y2hhZ3VsaXdhIGt3YSBhamlsaSB5YSB2aXR1IHZ5YSBtYWJhZGlsaWtvIGthdGlrYSBXYWthbGFJVFNNTWFiYWRpbGlrb1NoYXJ0aUhhcmlyaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgc2lmYSB6YSBraXR1IGFtYmFjaG8ga2luYXdlemEga3VjaGFndWxpd2Ega3dhIGFqaWxpIHlhIHZpdHUgdnlhIG9kYSB6YSBrYXppIGthdGlrYSBXYWthbGFJVFNNTWFiYWRpbGlrb1NoYXJ0aUhhcmlyaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWNjb3VudGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBvcGVyZXRhIGFtYmF6byB6aW5hd2V6YSBrdWNoYWd1bGl3YSBrd2EgYWppbGkgeWEgc2lmYSBNdWRhVWxpb2hlc2FiaXdhIGthdGlrYSAgV2FrYWxhSVRTTU1hYmFkaWxpa29TaGFydGlIYXJpcmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbEVuZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgb3BlcmV0YSBhbWJhem8gemluYXdlemEga3VjaGFndWxpd2Ega3dhIGFqaWxpIHlhIHNpZmEgTXVkYUhhbGlzaUt1bWFsaXphIGthdGlrYSAgV2FrYWxhSVRTTU1hYmFkaWxpa29TaGFydGlIYXJpcmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBvcGVyZXRhIGFtYmF6byB6aW5hd2V6YSBrdWNoYWd1bGl3YSBrd2EgYWppbGkgeWEgc2lmYSBNdWRhSGFsaXNpS3VhbnphIGthdGlrYSAgV2FrYWxhSVRTTU1hYmFkaWxpa29TaGFydGlIYXJpcmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENhdGVnb3J5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgb3BlcmV0YSBhbWJhem8gemluYXdlemEga3VjaGFndWxpd2Ega3dhIGFqaWxpIHlhIHNpZmEgS2l0YW1idWxpc2hvQ2hhS2F0ZWdvcmlhIGthdGlrYSAgV2FrYWxhSVRTTU1hYmFkaWxpa29TaGFydGlIYXJpcmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZUJ1aWxkZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBvcGVyZXRhIGFtYmF6byB6aW5hd2V6YSBrdWNoYWd1bGl3YSBrd2EgYWppbGkgeWEgc2lmYSBLaXRhbWJ1bGlzaG9DaGFNamVuemlNYWJhZGlsaWtvIGthdGlrYSAgV2FrYWxhSVRTTU1hYmFkaWxpa29TaGFydGlIYXJpcmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZU1hbmFnZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBvcGVyZXRhIGFtYmF6byB6aW5hd2V6YSBrdWNoYWd1bGl3YSBrd2EgYWppbGkgeWEgc2lmYSBLaXRhbWJ1bGlzaG9DaGFNZW5lamFNYWJhZGlsaWtvIGthdGlrYSAgV2FrYWxhSVRTTU1hYmFkaWxpa29TaGFydGlIYXJpcmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZVN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgb3BlcmV0YSBhbWJhem8gemluYXdlemEga3VjaGFndWxpd2Ega3dhIGFqaWxpIHlhIHNpZmEgS2l0YW1idWxpc2hvQ2hhTWFiYWRpbGlrb0hhbGkga2F0aWthICBXYWthbGFJVFNNTWFiYWRpbGlrb1NoYXJ0aUhhcmlyaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgb3BlcmV0YSBhbWJhem8gemluYXdlemEga3VjaGFndWxpd2Ega3dhIGFqaWxpIHlhIHNpZmEgQmFkaWxpS2ljaHdhQ2hhSGFiYXJpIGthdGlrYSAgV2FrYWxhSVRTTU1hYmFkaWxpa29TaGFydGlIYXJpcmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIER5bmFtaWNGaWVsZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBvcGVyZXRhIGFtYmF6byB6aW5hd2V6YSBrdWNoYWd1bGl3YSBrd2EgYWppbGkgeWEgc2lmYSBTZWhlbXVJbmF5b2JhZGlsaWthIGthdGlrYSAgV2FrYWxhSVRTTU1hYmFkaWxpa29TaGFydGlIYXJpcmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEltcGFjdElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIG9wZXJldGEgYW1iYXpvIHppbmF3ZXphIGt1Y2hhZ3VsaXdhIGt3YSBhamlsaSB5YSBzaWZhIEtpdGFtYnVsaXNob0NoYUF0aGFyaSBrYXRpa2EgIFdha2FsYUlUU01NYWJhZGlsaWtvU2hhcnRpSGFyaXJpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRWZmb3J0IGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIG9wZXJldGEgYW1iYXpvIHppbmF3ZXphIGt1Y2hhZ3VsaXdhIGt3YSBhamlsaSB5YSBzaWZhIEp1aHVkaVppbGl6b3Bhbmd3YSBrYXRpa2EgIFdha2FsYUlUU01NYWJhZGlsaWtvU2hhcnRpSGFyaXJpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBvcGVyZXRhIGFtYmF6byB6aW5hd2V6YSBrdWNoYWd1bGl3YSBrd2EgYWppbGkgeWEgc2lmYSBNdWRhS3VtYWxpemFVbGlvcGFuZ3dhIGthdGlrYSAgV2FrYWxhSVRTTU1hYmFkaWxpa29TaGFydGlIYXJpcmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgb3BlcmV0YSBhbWJhem8gemluYXdlemEga3VjaGFndWxpd2Ega3dhIGFqaWxpIHlhIHNpZmEgTXVkYUt1YW56YVVsaW9wYW5nd2Ega2F0aWthICBXYWthbGFJVFNNTWFiYWRpbGlrb1NoYXJ0aUhhcmlyaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUHJpb3JpdHlJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBvcGVyZXRhIGFtYmF6byB6aW5hd2V6YSBrdWNoYWd1bGl3YSBrd2EgYWppbGkgeWEgc2lmYSBLaXRhbWJ1bGlzaG9DaGFLaXBhdW1iZWxlIGthdGlrYSAgV2FrYWxhSVRTTU1hYmFkaWxpa29TaGFydGlIYXJpcmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFJlcXVlc3RlZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgb3BlcmV0YSBhbWJhem8gemluYXdlemEga3VjaGFndWxpd2Ega3dhIGFqaWxpIHlhIHNpZmEgTXVkYVVsaW9vbWJ3YSBrYXRpa2EgIFdha2FsYUlUU01NYWJhZGlsaWtvU2hhcnRpSGFyaXJpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJBZ2VudElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIG9wZXJldGEgYW1iYXpvIHppbmF3ZXphIGt1Y2hhZ3VsaXdhIGt3YSBhamlsaSB5YSBzaWZhIEtpdGFtYnVsaXNob0NoYVdha2FsYU9kYVphS2F6aSBrYXRpa2EgIFdha2FsYUlUU01NYWJhZGlsaWtvU2hhcnRpSGFyaXJpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJOdW1iZXIgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgb3BlcmV0YSBhbWJhem8gemluYXdlemEga3VjaGFndWxpd2Ega3dhIGFqaWxpIHlhIHNpZmEgTmFtYmFyaU9kYVlhS2F6aSBrYXRpa2EgIFdha2FsYUlUU01NYWJhZGlsaWtvU2hhcnRpSGFyaXJpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIG9wZXJldGEgYW1iYXpvIHppbmF3ZXphIGt1Y2hhZ3VsaXdhIGt3YSBhamlsaSB5YSBzaWZhIEtpdGFtYnVsaXNob0NoYUhhbGlPZGFZYUthemkga2F0aWthICBXYWthbGFJVFNNTWFiYWRpbGlrb1NoYXJ0aUhhcmlyaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgb3BlcmV0YSBhbWJhem8gemluYXdlemEga3VjaGFndWxpd2Ega3dhIGFqaWxpIHlhIHNpZmEgS2ljaHdhQ2hhSGFoYXJpQ2hhT2RhWWFLYXppIGthdGlrYSAgV2FrYWxhSVRTTU1hYmFkaWxpa29TaGFydGlIYXJpcmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclR5cGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBvcGVyZXRhIGFtYmF6byB6aW5hd2V6YSBrdWNoYWd1bGl3YSBrd2EgYWppbGkgeWEgc2lmYSBLaXRhbWJ1bGlzaG9DaGFBaW5hT2RhWWFLYXppIGthdGlrYSAgV2FrYWxhSVRTTU1hYmFkaWxpa29TaGFydGlIYXJpcmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBlcmlvZCAoaW4geWVhcnMpLCBpbiB3aGljaCBzdGFydCBhbmQgZW5kIHRpbWVzIGNhbiBiZSBzZWxlY3RlZC4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEga2lwaW5kaSAoa3dhIG1pYWthKSwgYW1iYXBvIG11ZGEgd2Ega3VhbnphIG5hIGt1bWFsaXphIGluYXdlemEga3VjaGFndWxpd2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGF0dHJpYnV0ZXMgb2YgYSB3b3Jrb3JkZXIgaW4gdGhlIHRvb2x0aXAgb2YgdGhlIHdvcmtvcmRlciBncmFwaCBpbiB0aGUgY2hhbmdlIHpvb20uIFRvIHNob3cgd29ya29yZGVyIGR5bmFtaWMgZmllbGRzIGluIHRoZSB0b29sdGlwLCB0aGV5IG11c3QgYmUgc3BlY2lmaWVkIGxpa2UgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTEsIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUyLCBldGMuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIHNpZmEgemlsaXpvb255ZXNod2EgemEgb2RhIHlhIGthemkga2F0aWthIGtpZG9rZXpvemFuYSBjaGEgamVkd2FsaSBsYSBvZGEgemEga2F6aSBrYXRpa2Ega3V6YSBtYWJhZGlsaWtvLiBLdW9ueWVzaGEgc2VoZW11IHppbmF6b2JhZGlsaWthIHphIG9kYSB5YSBrYXppIGt3ZW55ZSBraWRva2V6b3phbmEsIGxhemltYSB6aXdla3dlIGJheWFuYSBtZmFubyBTZWhlbXVJbmF5b2JhZGlsaWthX09kYVlhS2F6aUppbmFTZWhlbXUxLCBTZWhlbXVJbmF5b2JhZGlsaWthX09kYVlhS2F6aUppbmFTZWhlbXUyLCBuYSBrYWRoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnSW5hZmFmYW51YSBzYWZ1d2ltYSB6aWxpem9vbnllc2h3YSBrYXRpa2EgbWFwaXRpbyB5YSBNYWJhZGlsaWtvIHlhIFBTQS4gSGlsaSBjaGFndW8gaGFsaW5hIGF0aGFyaSBrd2EgbmFmYXNpIHlhIHNhZnV3aW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgU2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdJbmFmYWZhbnVhIHNhZnV3aW1hIHppbGl6b29ueWVzaHdhIGthdGlrYSBtYXBpdGlvIHlhIE1hYmFkaWxpa28geWEgUmF0aWJhLiBIaWxpIGNoYWd1byBoYWxpbmEgYXRoYXJpIGt3YSBuYWZhc2kgeWEgc2FmdXdpbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnSW5hZmFmYW51YSBzYWZ1d2ltYSB6aWxpem9vbnllc2h3YSBrYXRpa2EgbWFwaXRpbyB5YSBDQUJaYW5ndS4gSGlsaSBjaGFndW8gaGFsaW5hIGF0aGFyaSBrd2EgbmFmYXNpIHlhIHNhZnV3aW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdJbmFmYWZhbnVhIHNhZnV3aW1hIHppbGl6b29ueWVzaHdhIGthdGlrYSBtYXBpdGlvIHlhIE1hYmFkaWxpa29ZYW5ndS4gSGlsaSBjaGFndW8gaGFsaW5hIGF0aGFyaSBrd2EgbmFmYXNpIHlhIHNhZnV3aW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdJbmFmYWZhbnVhIHNhZnV3aW1hIHppbGl6b29ueWVzaHdhIGthdGlrYSBtYXBpdGlvIHlhIE9kYVphbmd1WmFLYXppLiBIaWxpIGNoYWd1byBoYWxpbmEgYXRoYXJpIGt3YSBuYWZhc2kgeWEgc2FmdXdpbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIFBJUiBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgc2FmdXdpbWEgemlsaXpvb255ZXNod2Ega2F0aWthIG1hcGl0aW8geWEgUElSLiBIaWxpIGNoYWd1byBoYWxpbmEgYXRoYXJpIGt3YSBuYWZhc2kgeWEgc2FmdXdpbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnSW5hZmFmYW51YSBzYWZ1d2ltYSB6aWxpem9vbnllc2h3YSBrYXRpa2EgbWFwaXRpbyB5YSBtZW5lamEgbWFiYWRpbGlrby4gSGlsaSBjaGFndW8gaGFsaW5hIGF0aGFyaSBrd2EgbmFmYXNpIHlhIHNhZnV3aW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdJbmFmYWZhbnVhIHNhZnV3aW1hIHppbGl6b29ueWVzaHdhIGthdGlrYSBtYXBpdGlvIHlhIG1hYmFkaWxpa28uIEhpbGkgY2hhZ3VvIGhhbGluYSBhdGhhcmkga3dhIG5hZmFzaSB5YSBzYWZ1d2ltYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIHNlYXJjaC4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgc2FmdXdpbWEgemlsaXpvb255ZXNod2Ega2F0aWthIG1hYmFkaWxpa28geWEgdXRhZnV0YWppLiBIaWxpIGNoYWd1byBoYWxpbmEgYXRoYXJpIGt3ZW55ZSBuYWZhc2kgeWEgc2FmdXdpbWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEgc2FmdXdpbWEgemlsaXpvb255ZXNod2Ega2F0aWthIG1hcGl0aW8geWEgcmF0aWJhIHlhIG1hYmFkaWxpa28geWEgbXRlamEuIEhpbGkgY2hhZ3VvIGhhbGluYSBhdGhhcmkga3dlbnllIG5hZmFzaSB5YSBzYWZ1d2ltYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICdJbmFmYWZhbnVhIHNhZnV3aW1hIHppbGl6b29ueWVzaHdhIGthdGlrYSBtYXBpdGlvIHlhIGtpb2xlem8uIEhpbGkgY2hhZ3VvIGhhbGluYSBhdGhhcmkga3dlbnllIG5hZmFzaSB5YSBzYWZ1d2ltYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2lnbmFscyBmb3IgZWFjaCBJVFNNQ2hhbmdlIHN0YXRlLid9ID0gJ0luYWZhZmFudWEgaXNoYXJhIGt3YSBraWxhIE1hYmFkaWxpa29JVFNNIHlhIGhhbGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHRlbXBsYXRlIHR5cGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnSW5hZmFmYW51YSBhaW5hIHlhIHZpb2xlem8gYW1iYXZ5byB2aXRhdHVtaWthIGthbWEgdmljaHVqaW8ga2F0aWthIG1hcGl0aW8geWEga2lvbGV6by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGhhbGkgemEgb2RhIHlhIGthemkgYW1iYXpvIHppdGF0dW1pa2Ega2FtYSB2aWNodWppbyBrYXRpa2EgbWFwaXRpbyB5YSBPZGEgemFuZ3UgemEga2F6aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGhhbGkgeWEgb2RhIHphIGthemkgYW1iYXpvIHppdGF0dW1pa2Ega2FtYSB2aWNodWppbyBrYXRpa2EgbWFwaXRpbyB5YSBQSVIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBzaG93IHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGFpbmEgemEgb2RhIHphIGthemkgYW1iYXpvIHppdGF0dW1pa2Ega3Vvbnllc2hhIG1hcGl0aW8geWEgUElSLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXRoZXIgbm90aWZpY2F0aW9ucyBzaG91bGQgYmUgc2VudC4nfSA9ICdJbmFmYWZhbnVhIGthbWEgdGFhcmlmYSB6aXR1bXdlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyBvZiBhIGNoYW5nZSBoaXN0b3J5IGVudHJ5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIGFuIGFnZW50IGNhbiBleGNoYW5nZSB0aGUgWC1heGlzIG9mIGEgc3RhdCBpZiBoZSBnZW5lcmF0ZXMgb25lLid9ID0KICAgICAgICAnSW5hYW11YSBrYW1hIHdha2FsYSBhbmF3ZXphIGt1YmFkaWxpc2hhIGppcmEtWCBsYSB0YWt3aW11IGthbWEgYWtpdGVuZ2VuZXphLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIGRvbmUgZm9yIGNvbmZpZyBpdGVtIGNsYXNzZXMuJ30gPQogICAgICAgICdJbmFhbXVhIGthbWEgbW9kdWxpIHlhIGthd2FpZGEgeWEgdGFrd2ltdSBpbmF3ZXphIGt1dGVuZ2VuZXphIHRha3dpbXUga3VodXN1IG1hYmFkaWxpa28geWFsaXlvZmFueXdhIGt3ZW55ZSBtYXRhYmFrYSB5YSB2aXBlbmdlbmVsZSB2eWEgdXNhbmlkaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyByZWdhcmRpbmcgY2hhbmdlIHN0YXRlIHVwZGF0ZXMgd2l0aGluIGEgdGltZXBlcmlvZC4nfSA9CiAgICAgICAgJ0luYWFtdWEga2FtYSBtb2R1bGkgeWEgdGFrd2ltdSB5YSBrYXdhaWRhIGluYXdlemEga3V6YWxpc2hhIHRha3dpbXUga3VodXN1IG1hYmFkaWxpa28ga3dhIGt1YW5nYWxpYSBraXNhc2lzaG8gY2hhIG1hYmFkaWxpa28geWEgaGFsaSBrd2Ega2lwaW5kaSBjaGEgbXVkYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyByZWdhcmRpbmcgdGhlIHJlbGF0aW9uIGJldHdlZW4gY2hhbmdlcyBhbmQgaW5jaWRlbnQgdGlja2V0cy4nfSA9CiAgICAgICAgJ0luYWFtdWEga2FtYSBtb2R1bGkgeWEgdGFrd2ltdSB5YSBrYXdhaWRhIGluYXdlemEga3V6YWxpc2hhIHRha3dpbXUga3VodXN1IG1hYmFkaWxpa28ga3dhIGt1YW5nYWxpYSB1aHVzaWFubyBrYXRpIHlhIG1hYmFkaWxpa28gbmEgdGlrZXRpIHphIG1hdHVraW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMuJ30gPQogICAgICAgICdJbmFhbXVhIGthbWEgbW9kdWxpIHlhIHRha3dpbXUgemEga2F3YWlkYSBpbmF3ZXphIGt1dGVuZ2VuZXphIHRha3dpbXUga3VodXN1IG1hYmFkaWxpa28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IHRoZSBudW1iZXIgb2YgUmZjIHRpY2tldHMgYSByZXF1ZXN0ZXIgY3JlYXRlZC4nfSA9CiAgICAgICAgJ0luYWFtdWEga2FtYSBtb2R1bGkgeWEgdGFrd2ltdSB6YSBrYXdhaWRhIGluYXdlemEga3V0ZW5nZW5lemEgdGFrd2ltdSBrdWh1c3UgaWRhZGkgeWEgdGlrZXRpIHphIFJmYyB6aWxpem90ZW5nZW5lendhIG5hIG11b21iYWppLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyAoZm9yIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMpIHNob3duIGluIHRoZSBjaGFuZ2UgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnU2VoZW11IHppbmF6b2JhZGlsaWthIChrd2EgbWFiYWRpbGlrbyBuYSBvZGEgemEga2F6aSkgemlsaXpvb255ZXNod2Ega3dlbnllIHNrcmluaSBpbGl5b2NoYXBpc2h3YSB5YSBraW9sZXN1cmEgY2hhIHdha2FsYS4gTWlwYW5nbyBpd2V6ZWtheW86IDAgPSBMZW1hendhLCAxID0gV2V6ZXNod2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnU2VoZW11IHppbmF6b2JhZGlsaWthIHppbGl6b29ueWVzaHdhIGt3ZW55ZSBza3JpbmkgeWEgb25nZXphIG1hYmFkaWxpa28geWEga2lvbGVzdXJhIGNoYSB3YWthbGEuIE1pcGFuZ28gaXdlemVrYXlvOiAwID0gTGVtYXp3YSwgMSA9IFdlemVzaHdhLCAyID0gV2V6ZXNod2EgbmEgSW5hdGFraXdhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdTZWhlbXUgemluYXpvYmFkaWxpa2EgemlsaXpvb255ZXNod2Ega3dlbnllIHNrcmluaSB5YSBoYXJpcmkgbWFiYWRpbGlrbyB5YSBraW9sZXN1cmEgY2hhIHdha2FsYS4gTWlwYW5nbyBpd2V6ZWtheW86IDAgPSBMZW1hendhLCAxID0gV2V6ZXNod2EsIDIgPSBXZXplc2h3YSBuYSBJbmF0YWtpd2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2Ugc2VhcmNoIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ1NlaGVtdSB6aW5hem9iYWRpbGlrYSB6aWxpem9vbnllc2h3YSBrd2VueWUgc2tyaW5pIHlhIHRhZnV0YSBtYWJhZGlsaWtvIHlhIGtpb2xlc3VyYSBjaGEgd2FrYWxhLiBNaXBhbmdvIGl3ZXpla2F5bzogMCA9IExlbWF6d2EsIDEgPSBXZXplc2h3YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ1NlaGVtdSB6aW5hem9iYWRpbGlrYSB6aWxpem9vbnllc2h3YSBrd2VueWUgc2tyaW5pIHlhIGt1emEgbWFiYWRpbGlrbyB5YSBraW9sZXN1cmEgY2hhIHdha2FsYS4gTWlwYW5nbyBpd2V6ZWtheW86IDAgPSBMZW1hendhLCAxID0gV2V6ZXNod2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnU2VoZW11IHppbmF6b2JhZGlsaWthIHppbGl6b29ueWVzaHdhIGt3ZW55ZSBza3JpbmkgeWEgb25nZXphIG9kYSB5YSBrYXppIHlhIGtpb2xlc3VyYSBjaGEgd2FrYWxhLiBNaXBhbmdvIGl3ZXpla2F5bzogMCA9IExlbWF6d2EsIDEgPSBXZXplc2h3YSwgMiA9IFdlemVzaHdhIG5hIEluYXRha2l3YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnU2VoZW11IHppbmF6b2JhZGlsaWthIHppbGl6b29ueWVzaHdhIGt3ZW55ZSBza3JpbmkgeWEgaGFyaXJpIG9kYSB5YSBrYXppIHlhIGtpb2xlc3VyYSBjaGEgd2FrYWxhLiBNaXBhbmdvIGl3ZXpla2F5bzogMCA9IExlbWF6d2EsIDEgPSBXZXplc2h3YSwgMiA9IFdlemVzaHdhIG5hIEluYXRha2l3YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciByZXBvcnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICdTZWhlbXUgemluYXpvYmFkaWxpa2EgemlsaXpvb255ZXNod2Ega3dlbnllIHNrcmluaSB5YSByaXBvdGkgeWEgb2RhIHlhIGthemkgeWEga2lvbGVzdXJhIGNoYSB3YWthbGEuIE1pcGFuZ28gaXdlemVrYXlvOiAwID0gTGVtYXp3YSwgMSA9IFdlemVzaHdhLCAyID0gV2V6ZXNod2EgbmEgSW5hdGFraXdhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnU2VoZW11IHppbmF6b2JhZGlsaWthIHppbGl6b29ueWVzaHdhIGt3ZW55ZSBza3JpbmkgeWEga3V6YSBvZGEgemEga2F6aSB5YSBraW9sZXN1cmEgY2hhIHdha2FsYS4gTWlwYW5nbyBpd2V6ZWtheW86IDAgPSBMZW1hendhLCAxID0gV2V6ZXNod2EsIDIgPSBXZXplc2h3YSBuYSBJbmF0YWtpd2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWNGaWVsZCBldmVudCBtb2R1bGUgdG8gaGFuZGxlIHRoZSB1cGRhdGUgb2YgY29uZGl0aW9ucyBpZiBkeW5hbWljIGZpZWxkcyBhcmUgYWRkZWQsIHVwZGF0ZWQgb3IgZGVsZXRlZC4nfSA9CiAgICAgICAgJ01vZHVsaSB5YSBtYXR1a2lvIHlhIFNlaGVtdVppbmF6b2JhZGlsaWthIGt1c2h1Z2h1bGlraWEgdXNhc2lzaGFqaSB3YSBtYXNoYXJ0aSBrYW1hIHNlaGVtdSB6aW5hem9iYWRpbGlrYSB6aW1lb25nZXp3YSwgemltZXNhc2lzaHdhIGF1IGt1ZnV0d2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcndhcmQgc2NoZWR1bGUgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb3ZlciBhcHByb3ZlZCBjaGFuZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDQUIgVGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ29uZGl0aW9uIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlciBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgUElSIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBub3RpZmljYXRpb24gcnVsZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VzJ30gPSAnTWFiYWRpbGlrbyB5YSBJVFNNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlDQUIgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlDaGFuZ2VzIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15V29ya29yZGVycyBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBEZWxldGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDQUIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDb250ZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgY2xlYW5zIHVwIGNvbmRpdGlvbnMuJ30gPSAnTW9kdWxpIHlhIG1hdHVraW8geWEgSVRTTSBpbmFvbmRvYSBtYXNoYXJ0aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBjYWNoZSBmb3IgYSB0b29sYmFyLid9ID0gJ01vZHVsaSB5YSBtYXR1a2lvIHlhIElUU00gaW5hZnV0YSBoaWZhZGhpIG11ZGEgeWEgbXdhbWJhYSB6YW5hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBtYXRjaGVzIGNvbmRpdGlvbnMgYW5kIGV4ZWN1dGVzIGFjdGlvbnMuJ30gPQogICAgICAgICdNb2R1bGkgeWEgbWF0dWtpbyB5YSBJVFNNIGluYXlvbGFuZGFuaXNoYSBtYXNoYXJ0aSBuYSBrdXRla2VsZXphIHZpdGVuZG8uICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHNlbmRzIG5vdGlmaWNhdGlvbnMuJ30gPSAnTW9kdWxpIHlhIG1hdHVraW8geWEgSVRTTSBpbmF5b3R1bWEgdGFhcmlmYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJ30gPSAnTW9kdWxpIHlhIG1hdHVraW8geWEgSVRTTSBpbmF5b3Nhc2lzaGEgaGlzdG9yaWEgeWEgbWFiYWRpbGlrby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNvbmRpdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byByZWNhbGN1bGF0ZSB0aGUgd29ya29yZGVyIG51bWJlcnMuJ30gPSAnTW9kdWxpIHlhIG1hdHVraW8geWEgSVRTTSBpbmF5b3BpZ2EgdXB5YSBoZXNhYnUgeWEgbmFtYmFyaSB5YSBvZGEgemEga2F6aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gc2V0IHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBvZiB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAnTW9kdWxpIHlhIG1hdHVraW8geWEgSVRTTSBpbmF5b3NldGkgbXVkYSBoYWxpc2kgd2Ega3VhbnphIG5hIGt1bWFsaXphIG9kYSB6YSBrYXppLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNQ2hhbmdlJ30gPSAnQmFkaWxpSVRTTSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNV29ya09yZGVyJ30gPSAnSVRTTU9kYVlhS2F6aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBmcmVxdWVuY3kgaXMgXCdyZWd1bGFybHlcJywgeW91IGNhbiBjb25maWd1cmUgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IChldmVyeSBYIGhvdXJzKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9nZmlsZSBmb3IgdGhlIElUU00gY2hhbmdlIGNvdW50ZXIuIFRoaXMgZmlsZSBpcyB1c2VkIGZvciBjcmVhdGluZyB0aGUgY2hhbmdlIG51bWJlcnMuJ30gPQogICAgICAgICdGYWlsaWJhdGxpIGxhIGhlc2FidSB5YSBtYWJhZGlsaWtvIHlhIElUU00uIEhpbGkgZmFpbGkgbGluYXR1bWlrYSBrdXRlbmdlbmV6YSBuYW1iYXJpIHphIG1hYmFkaWxpa28uICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rdXAgb2YgQ0FCIG1lbWJlcnMgZm9yIGF1dG9jb21wbGV0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rdXAgb2YgYWdlbnRzLCB1c2VkIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIGlmIFdvcmtPcmRlckFkZCBvciBXb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUgc2hvdWxkIGJlIHBlcm1pdHRlZC4nfSA9CiAgICAgICAgJ01vZHVsaSB5YSBrdWthZ3VhIGthbWEgT25nZXphT2RhWWFLYXppIGF1IE9uZ2V6YU9kYVlhS2F6aUt1dG9rYUt3ZW55ZUtpb2xlem8gaXJ1aHVzaXdlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIENBQiBtZW1iZXJzLid9ID0gJ01vZHVsaSB5YSBrdWthZ3VhIHdhc2hpcmlraSB3YSBDQUIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgYWdlbnQuJ30gPSAnTW9kdWxpIHlhIGt1a2FndWEgd2FrYWxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIGJ1aWxkZXIuJ30gPSAnTW9kdWxpIHlhIGt1a2FndWEgbWplbnppIHdhIG1hYmFkaWxpa28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPSAnTW9kdWxpIHlhIGt1a2FndWEgbWVuZWphIG1hYmFkaWxpa28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgd29ya29yZGVyIGFnZW50Lid9ID0gJ01vZHVsaSB5YSBrdWthZ3VhIHdha2FsYSB3YSBvZGEgemEga2F6aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgbm8gd29ya29yZGVyIGFnZW50IGlzIHNldC4nfSA9ICdNb2R1bGkgeWEga3VrYWd1YSBrYW1hIGhha3VuYSB3YWthbGEgd2Egb2RhIHlhIGt6aSBhbGl5ZXNldGl3YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGFnZW50IGlzIGNvbnRhaW5lZCBpbiB0aGUgY29uZmlndXJlZCBsaXN0Lid9ID0KICAgICAgICAnTW9kdWxpIHlhIGt1a2FndWEga2FtYSB3YWthbGEgeXVtbyBrd2VueWUgb3JvZGhhIHlhIHVzYW5pZGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGEgbGluayB0byBjcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4gVGhlIHRpY2tldCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgbGlua2VkIHdpdGggdGhlIG5ldyBjaGFuZ2UuJ30gPQogICAgICAgICdNb2R1bGkgeWEga3Vvbnllc2hhIGtpdW5nbyBjaGEga3V0ZW5nZW5lemEgbWFiYWRpbGlrbyBrdXRva2Ega3dlbnllIGhpaSB0aWtldGkuIFRpa2V0aSBpdGF1bmdhbmlzaHdhIGtpb3RvbWF0aWtpIG5hIG1hYmFkaWxpa28gbWFweWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIGFsbCB3b3Jrb3JkZXJzIGluIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyAoZnJvbSB0ZW1wbGF0ZSknfSA9ICdNcHlhIChrdXRva2Ega3dlbnllIGtpb2xlem8pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgdXNlcnMgb2YgdGhlc2UgZ3JvdXBzIGhhdmUgdGhlIHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0aWNrZXQgdHlwZXMgYXMgZGVmaW5lZCBpbiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiBpZiB0aGUgZmVhdHVyZSAiVGlja2V0OjpBY2w6Ok1vZHVsZSMjIzIwMC1UaWNrZXQ6OkFjbDo6TW9kdWxlIiBpcyBlbmFibGVkLid9ID0KICAgICAgICAnV2F0dW1pYWppIHdhIG1ha3VuZGkgaGF5YSB0dSB3YW5hIHJ1aHVzYSB5YSBrdXR1bWlhIGFpbmEgaGlpIHlhIHRpa2V0aSBrYW1hIGlsaXZ5b2ZhZmFudWxpd2Ega2F0aWthICJCYWRpbGlrbyBsYSBJVFNNOjpPbmdlemEgYWluYSB6YSB0aWtldGkgemEga2l1bmdvIGNoYSBiYWRpbGlrbyIga2FtYSBraXBlbmdlbGUgIlRpa2V0aTo6QWNsOjpNb2R1bGkjIyMyMDAtVGlrZXRpOjpBY2w6Ok1vZHVsaSIga2ltZXdlemVzaHdhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIGFsbCBDaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQSVInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldyknfSA9ICdCYWFkYSB5YSB1dGVrZWxlemFqaSB3YSBtYXBpdGlvIChQSVIpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BTQSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgVXNlckNyZWF0ZVdvcmtPcmRlck5leHRNYXNrIG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdWaWdlem8ga3dhIGFqaWxpIHlhIGtpcGVuZ2VsZSBCYXJha29hIGlqYXlvIHlhIG1wYW5naWxpbyBrYXppIHdhIGt1dGVuZ2VuZXp3YSBuYSBtdHVtaWFqaSBrYXRpa2EgbWFuZGhhcmkgeWEgbWFwZW5kZWxlbyB5YSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY2hhbmdlcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICdWaWdlem8ga3dhIGFqaWxpIHZ5YSBrdXJhc2EoYW1iYXBvIHRpa2V0aSB6aW5hb255ZXNod2EpIHphIG1hcGl0aW8geWEgbWFiYWRpbGlrbyBtYWRvZ28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXNlbnRzIGEgbGluayBpbiB0aGUgbWVudSB0byBzaG93IHRoZSBpbnZvbHZlZCBwZXJzb25zIGluIGEgY2hhbmdlLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggY2hhbmdlIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmF3YXNpbGlzaGEga2l1bmdhbmlzaGkga2F0aWthIG1lbnl1IGt1b255ZXNoYSB3YXR1IHdhbmFvaHVzaWthIGthdGlrYSBiYWRpbGlrbywga2F0aWthIG1hbmRoYXJpIGlsaXlva3V6d2EgeWEgYmFkaWxpa28gaGlsbyBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW50IHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHkgKFBTQSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpIG9mIGNoYW5nZXMuIE92ZXJ2aWV3IG9mIGFwcHJvdmVkIGNoYW5nZXMgYW5kIHRoZWlyIHNlcnZpY2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgaW4gb3JkZXIgZm9yIGFuIGFnZW50IHRvIHRha2UgYSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICdVcGVuZGVsZW8gdW5hb3Rha2l3YSBpbGkgd2FrYWxhIGFjaHVrdWUgb2RhIHlhIGthemkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWNjZXNzIHRoZSBvdmVydmlldyBvZiBhbGwgY2hhbmdlcy4nfSA9ICdVcGVuZGVsZW8gdW5hb3Rha2l3YSBpbGkga3VmaWtpYSBtYXBpdGlvIHlhIG1hYmFkaWxpa28geW90ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhZGQgYSB3b3Jrb3JkZXIuJ30gPSAnVXBlbmRlbGVvIHVuYW90YWtpd2EgaWxpIGt1b25nZXphIG9kYSB5YSBrYXppLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNoYW5nZSB0aGUgd29ya29yZGVyIGFnZW50Lid9ID0gJ1VwZW5kZWxlbyB1bmFvdGFraXdhIGlsaSBrdWJhZGlsaSB3YWthbGEgd2Egb2RhIHlhIGthemkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZS4nfSA9ICdVcGVuZGVsZW8gdW5hb3Rha2l3YSBpbGkga3V0ZW5nZW5lemEga2lvbGV6byBrdXRva2Ega3dlbnllIG1hYmFkaWxpa28uICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSBjaGFuZ2VzXCcgQ0FCLid9ID0KICAgICAgICAnVXBlbmRlbGVvIHVuYW90YWtpd2EgaWxpIGt1dGVuZ2VuZXphIGtpb2xlem8ga3V0b2thIGt3ZW55ZSBDQUIgeWEgbWFiYWRpbGlrby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgd29ya29yZGVyLid9ID0gJ1VwZW5kZWxlbyB1bmFvdGFraXdhIGlsaSBrdXRlbmdlbmV6YSBraW9sZXpvIGt1dG9rYSBrd2VueWUgb2RhIHlhIGthemkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMgZnJvbSB0ZW1wbGF0ZXMuJ30gPSAnVXBlbmRlbGVvIHVuYW90YWtpd2EgaWxpIGt1dGVuZ2VuZXphIG1hYmFkaWxpa28ga3V0b2thIGt3ZW55ZSB2aW9sZXpvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzLid9ID0gJ1VwZW5kZWxlbyB1bmFvdGFraXdhIGlsaSBrdXRlbmdlbmV6YSBtYWJhZGlsaWtvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHRlbXBsYXRlLid9ID0gJ1VwZW5kZWxlbyB1bmFvdGFraXdhIGlsaSBrdWZ1dGEga2lvbGV6by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgYSB3b3Jrb3JkZXIuJ30gPSAnVXBlbmRlbGVvIHVuYW90YWtpd2EgaWxpIGt1ZnV0YSBvZGEgeWEga2F6aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY2hhbmdlcy4nfSA9ICdVcGVuZGVsZW8gdW5hb3Rha2l3YSBpbGkga3VmdXRhIG1hYmFkaWxpa28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHRlbXBsYXRlLid9ID0gJ1VwZW5kZWxlbyB1bmFvdGFraXdhIGlsaSBrdWhhcmlyaSBraW9sZXpvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgYSB3b3Jrb3JkZXIuJ30gPSAnVXBlbmRlbGVvIHVuYW90YWtpd2EgaWxpIGt1aGFyaXJpIG9kYSB5YSBrYXppLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgY2hhbmdlcy4nfSA9ICdVcGVuZGVsZW8gdW5hb3Rha2l3YSBpbGkga3VoYXJpcmkgbWFiYWRpbGlrby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnVXBlbmRlbGVvIHVuYW90YWtpd2EgaWxpIGt1aGFyaXJpIG1hc2hhcnRpIHlhIG1hYmFkaWxpa28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29udGVudCBvZiBhIHRlbXBsYXRlLid9ID0gJ1VwZW5kZWxlbyB1bmFvdGFraXdhIGlsaSBrdWhhcmlyaSBtYXVkaHVpIHlhIGtpb2xlem8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgaW52b2x2ZWQgcGVyc29ucyBvZiBhIGNoYW5nZS4nfSA9CiAgICAgICAgJ1VwZW5kZWxlbyB1bmFvdGFraXdhIGlsaSBrdWhhcmlyaXJpIHdhdHUgd2FuYW9odXNpa2EgbmEgbWFiYWRpbGlrby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBtb3ZlIGNoYW5nZXMgaW4gdGltZS4nfSA9ICdVcGVuZGVsZW8gdW5hb3Rha2l3YSBpbGkga3VoYW1pc2hhIG1hYmFkaWxpa28ga3dhIG11ZGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcHJpbnQgYSBjaGFuZ2UuJ30gPSAnVXBlbmRlbGVvIHVuYW90YWtpd2EgaWxpIGt1Y2hhcGlzaGEgbWFiYWRpbGlrby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byByZXNldCBjaGFuZ2VzLid9ID0gJ1VwZW5kZWxlbyB1bmFvdGFraXdhIGlsaSBrdXdla2EgdXB5YSBtYWJhZGlsaWtvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgYSB3b3Jrb3JkZXIuJ30gPSAnVXBlbmRlbGVvIHVuYW90YWtpd2EgaWxpIGt1b25hIG9kYSB5YSBrYXppLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgY2hhbmdlcy4nfSA9ICdVcGVuZGVsZW8gdW5hb3Rha2l3YSBpbGkga3VvbmEgbWFiYWRpbGlrby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyBhIENBQiBtZW1iZXIuJ30gPQogICAgICAgICdVcGVuZGVsZW8gdW5hb3Rha2l3YSBpbGkga3VvbmEgb3JvZGhhIHlhIG1hYmFkaWxpa28gYW1iYXBvIG10dW1pYWppIG5pIG1zaGlyaWthIHdhIENBQi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPQogICAgICAgICdVcGVuZGVsZW8gdW5hb3Rha2l3YSBpbGkga3VvbmEgb3JvZGhhIHlhIG1hYmFkaWxpa28gYW1iYXBvIG10dW1pYWppIG5pIG1lbmVqYSBtYWJhZGlsaWtvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgb3ZlcnZpZXcgb3ZlciBhbGwgdGVtcGxhdGVzLid9ID0gJ1VwZW5kZWxlbyB1bmFvdGFraXdhIGlsaSBrdW9uYSBtYXBpdGlvIHlhIHZpb2xlem8gdnlvdGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJ1VwZW5kZWxlbyB1bmFvdGFraXdhIGlsaSBrdW9uYSBtYXNoYXJ0aSB5YSBtYWJhZGlsaWtvIHlvdGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZS4nfSA9ICdVcGVuZGVsZW8gdW5hb3Rha2l3YSBpbGkga3VvbmEgaGlzdG9yaWEgeWEgbWFiYWRpbGlrby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyLid9ID0gJ1VwZW5kZWxlbyB1bmFvdGFraXdhIGlsaSBrdW9uYSBoaXN0b3JpYSB5YSBvZGEgeWEga2F6aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSBjaGFuZ2UuJ30gPSAnVXBlbmRlbGVvIHVuYW90YWtpd2EgaWxpIGt1b25hIGhpc3RvcmlhIGlsaXlva3V6d2EgIHlhIG1hYmFkaWxpa28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgd29ya29yZGVyLid9ID0KICAgICAgICAnVXBlbmRlbGVvIHVuYW90YWtpd2EgaWxpIGt1b25hIGhpc3RvcmlhIGlsaXlva3V6d2EgeWEgb2RhIHlhIGthemkuICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgQ2hhbmdlIFNjaGVkdWxlLid9ID0gJ1VwZW5kZWxlbyB1bmFvdGFraXdhIGlsaSBrdW9uYSBvcm9kaGEgeWEgUmF0aWJhIHlhIE1hYmFkaWxpa28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2UgUFNBLid9ID0gJ1VwZW5kZWxlbyB1bmFvdGFraXdhIGlsaSBrdW9uYSBvcm9kaGEgeWEgbWFiYWRpbGlrbyB5YSBQU0EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2VzIHdpdGggYW4gdXBjb21pbmcgUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldykuJ30gPQogICAgICAgICdVcGVuZGVsZW8gdW5hb3Rha2l3YSBpbGkga3VvbmEgb3JvZGhhIHlhIG1hYmFkaWxpa28gdmlvbGV6byB2eW90ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biBjaGFuZ2VzLid9ID0gJ1VwZW5kZWxlbyB1bmFvdGFraXdhIGlsaSBrdW9uYSBvcm9kaGEgeWEgbWFiYWRpbGlrbyB5YWtvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIHdvcmtvcmRlcnMuJ30gPSAnVXBlbmRlbGVvIHVuYW90YWtpd2EgaWxpIGt1b25hIG9yb2RoYSB5YSBvZGEgemFrbyB6YSBrYXppLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHdyaXRlIGEgcmVwb3J0IGZvciB0aGUgd29ya29yZGVyLid9ID0gJ1VwZW5kZWxlbyB1bmFvdGFraXdhIGlsaSBrdWFuZGlrYSByaXBvdGkgeWEgb2RhIHlhIGthemkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIHRhc2sgdG8gY2hlY2sgaWYgc3BlY2lmaWMgdGltZXMgaGF2ZSBiZWVuIHJlYWNoZWQgaW4gY2hhbmdlcyBhbmQgd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIGNoYW5nZSBhcyBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2hlZHVsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY3JlZW4gYWZ0ZXIgY3JlYXRpbmcgYSB3b3Jrb3JkZXInfSA9ICdTa3JpbmkgYmFhZGEgeWEga3V0ZW5nZW5lemEgb2RhIHlhIGthemkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDaGFuZ2VzJ30gPSAnVGFmdXRhIE1hYmFkaWxpa28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNoYW5nZSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNoYW5nZSBudW1iZXIsIHRoZSBTeXN0ZW1JRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQgd2l0aCBTeXN0ZW1JRC5jb3VudGVyIGZvcm1hdCAoZS5nLiAxMDAxMTgsIDEwMDExOSkuIFdpdGggIkRhdGUiLCB0aGUgY2hhbmdlIG51bWJlcnMgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgYSBjb3VudGVyOyB0aGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LmNvdW50ZXIsIGUuZy4gMjAxMDA2MjQwMDAwMSwgMjAxMDA2MjQwMDAwMi4gV2l0aCAiRGF0ZUNoZWNrc3VtIiwgdGhlIGNvdW50ZXIgd2lsbCBiZSBhcHBlbmRlZCBhcyBjaGVja3N1bSB0byB0aGUgc3RyaW5nIG9mIGRhdGUgcGx1cyB0aGUgU3lzdGVtSUQuIFRoZSBjaGVja3N1bSB3aWxsIGJlIHJvdGF0ZWQgb24gYSBkYWlseSBiYXNpcy4gVGhpcyBmb3JtYXQgbG9va3MgbGlrZSBZZWFyLk1vbnRoLkRheS5TeXN0ZW1JRC5Db3VudGVyLkNoZWNrU3VtLCBlLmcuIDIwMTAwNjI0MTAwMDAwMTcsIDIwMTAwNjI0MTAwMDAwMjYuJ30gPQogICAgICAgICdDaGFndWEgbW9kdWxlIHlhIGt1dGVuZ2VuZXphIG5hbWJhIHlhIGJhZGlsaWtvLiAiS3VvbmdlemVrYSBrd2Egb3RvbWF0aWtpIiBpbmFvbmdlemEgbmFtYmEgeWEgYmFkaWxpa28sIGtpdGFtYnVsaXNobyBjaGEgbWZ1bW8gbmEga2loZXNhYnVqaSB6aW5hdHVtaWthIG5hIGtpdGFtYnVsaXNobyBjaGEgbWZ1bW8udW1iaXpvIGxhIGtpaGVzYWJ1amkgKG1mYW5vIDEwMDExOCwgMTAwMTE5KS4gTmEgIlRhcmVoZSIgbmFtYmEgemEgbWFiYWRpbGlrbyB6aXRhdGVuZ2VuZXp3YSBuYSB0YXJlaGUgeWEgc2FzYSBuYSBraWhlc2FidWppOyBVbWJpem8gbGluYWZhbmFuYSBrYW1hIGhpdmkgTXdha2EuTXdlemkuU2lrdS5LaXRhbWJ1bGlzaG8gY2hhIG1mdW1vLktpaGVzYWJ1amkgbWZhbm8gMjAxMDA2MjQwMDAwMSwgMjAxMDA2MjQwMDAwMi4gTmEgIkt1YW5nYWxpYSBqdW1sYSBrd2EgdGFyZWhlIiAga2loZXNhYnVqaSBraXRhYW1iYXRhbmlzaHdhIGthbWEga2lhbmdhbGlhamkganVtbGEga3dlbnllIHR1bmdvIHlhIHRhcmVoZSBuYSBraXRhbWJ1bGlzaG8uIEtpYW5nYWxpYSBqdW1sYSBraXRhenVuZ3VzaHdhIGt3YSBtaXNoaW5naSB5YSBraWxhIHNpa3UuIFVtYml6byBsaXRhZmFuYW5hIGthbWEgaGl2aSBNd2FrYS5Nd2V6aS5TaWt1LktpdGFtYnVsaXNobyBjaGEgbWZ1bW8uS2loZXNhYnVqaSBtZmFubyAyMDEwMDYyNDEwMDAwMDE3LCAyMDEwMDYyNDEwMDAwMDI2Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGFnZW50IGZvciB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIGRlZmF1bHQgaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgbWF4aW11bSBoZWlnaHQgKGluIHBpeGVscykgb2YgaW5saW5lIEhUTUwgZmllbGRzIGluIEFnZW50SVRTTUNoYW5nZVpvb20gYW5kIEFnZW50SVRTTVdvcmtPcmRlclpvb20uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgbWluaW1hbCBjaGFuZ2UgY291bnRlciBzaXplIChpZiAiQXV0b0luY3JlbWVudCIgd2FzIHNlbGVjdGVkIGFzIElUU01DaGFuZ2U6Ok51bWJlckdlbmVyYXRvcikuIERlZmF1bHQgaXMgNSwgdGhpcyBtZWFucyB0aGUgY291bnRlciBzdGFydHMgZnJvbSAxMDAwMC4nfSA9CiAgICAgICAgJ0luYXdla2EgdXBlbyB3YSBjaGluaSB3YSB1a3Vid2Egd2Ega2loZXNhYnVqaSB0aWtldGkgKEthbWEgIkluYW9uZ2V6ZWthIG90b21hdGlraSIgaW1lY2hhZ3VsaXdhIGthbWEgQmFkaWxpa28gbGEgSVRTTTo6S2l0ZW5nZW5lemEgbmFtYWJhIHphIHRpa2V0aSkuIENoYWd1by1tc2luZ2kgbmkgNSwgaGlpIGluYW1hYW5pc2hhIGtpaGVzYWJ1amkga2luYWFuemlhIDEwMDAwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdXAgdGhlIHN0YXRlIG1hY2hpbmUgZm9yIGNoYW5nZXMuJ30gPSAnSW5hc2V0aSBoYWxpIHlhIG1hc2hpbmUga3dhIG1hYmFkaWxpa28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdXAgdGhlIHN0YXRlIG1hY2hpbmUgZm9yIHdvcmtvcmRlcnMuJ30gPSAnSW5hc2V0aSBoYWxpIHlhIG1hc2hpbmUga3dhIG9kYSB6YSBrYXppLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGNoZWNrYm94IGluIHRoZSBBZ2VudElUU01Xb3JrT3JkZXJFZGl0IHNjcmVlbiB0aGF0IGRlZmluZXMgaWYgdGhlIHRoZSBmb2xsb3dpbmcgd29ya29yZGVycyBzaG91bGQgYWxzbyBiZSBtb3ZlZCBpZiBhIHdvcmtvcmRlciBpcyBtb2RpZmllZCBhbmQgdGhlIHBsYW5uZWQgZW5kIHRpbWUgaGFzIGNoYW5nZWQuJ30gPQogICAgICAgICdJbmFvbnllc2hhIGtpc2FuZHVrdSB0aWtpIGthdGlrYSBza3JpbmkgeWEga3VoYXJpcmkgbXBhbmdpbGlvIHdhIGthemkgd2EgT1RSUyB3YSBJVFNNIHlhIHdha2FsYSBhbWJheW8gaW5hZmFmYW51YSBrYW1hIG1pcGFuZ2lsaW8gaWZ1YXRheW8geWEga2F6aSBwaWEgaXRhb25kb2xld2Ega2FtYSBtcGFuZ2lsaW8ga2F6aSB1a2lyZWtlYmlzaHdhIG5hIG11ZGEgd2Ega3Vpc2hhIHVsaW9wYW5nd2EgdW1lYmFkaWxpa2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBjaGFuZ2luZyB0aGUgd29ya29yZGVyIGFnZW50LCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgY2hhbmdlIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgY2hhbmdlLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5hb255ZXNoYSBraXVuZ28ga3dlbnllIG1lbnl1IGtpbmFjaG9ydWh1c3Uga3VmYWZhbnVhIG1hYmFkaWxpa28ga2FtYSBraW9sZXpvIGthdGlrYSBtdW9uZWthbm8gdWxpb2t1endhIHdhIG1hYmFkaWxpa28sIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYS4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIHdvcmtvcmRlciwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZWRpdGluZyB0aGUgcmVwb3J0IG9mIGEgd29ya29yZGVyLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjaGFuZ2Ugd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5hb255ZXNoYSBraXVuZ28ga3dlbnllIG1lbnl1ICBraW5hY2hvcnVodXN1IGt1dW5nYW5pc2hhIG1hYmFkaWxpa28gbmEga2l0dSBraW5naW5lIGthdGlrYSBtdW9uZWthbm8gdWxpb2t1endhIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIHdvcmtvcmRlciB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbW92aW5nIHRoZSB0aW1lIHNsb3Qgb2YgYSBjaGFuZ2UgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5hb255ZXNoYSBraXVuZ28ga3dlbnllIG1lbnl1ICBraW5hY2hvcnVodXN1IGt1aGFtaXNoYSBraXBlbmdlbGUgY2hhIG11ZGEgd2EgbWFiYWRpbGlrbyBrYXRpa2EgbXVvbmVrYW5vIHVsaW9rdXp3YSB3YSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRha2luZyBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGNvbmRpdGlvbnMgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYW9ueWVzaGEga2l1bmdvIGt3ZW55ZSBtZW55dSBpbGkga3VmaWtpYSBtYXNoYXJ0aSB5YSBtYWJhZGlsaWtvIGthdGlrYSBtdW9uZWthbm8gd2FrZSB1bGlva3V6d2Egd2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmFvbnllc2hhIGtpdW5nbyBrd2VueWUgbWVueXUgaWxpIGt1ZmlraWEgbWFzaGFydGkgeWEgaGlzdG9yaWEgeWEgbWFiYWRpbGlrbyBrYXRpa2EgbXVvbmVrYW5vIHdha2UgdWxpb2t1endhIHdhIGtpb2xlc3VyYSBjaGEgd2FrYWxhLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSB3b3Jrb3JkZXIgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYW9ueWVzaGEga2l1bmdvIGt3ZW55ZSBtZW55dSBpbGkga3VmdXRhIG1hYmFkaWxpa28ga2F0aWthIG11b25la2FubyB3YWtlIHVsaW9rdXp3YSB3YSBraW9sZXN1cmEgY2hhIHdha2FsYS4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSB3b3Jrb3JkZXIgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmFvbnllc2hhIGtpdW5nbyBrd2VueWUgbWVueXUgaWxpIGt1aGFyaXJpIG1hYmFkaWxpa28ga2F0aWthIG11b25la2FubyB3YWtlIHVsaW9rdXp3YSB3YSBraW9sZXN1cmEgY2hhIHdha2FsYS4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYW9ueWVzaGEga2l1bmdvIGt3ZW55ZSBtZW55dSBpbGkga3VydWRpIG55dW1hIGt3ZW55ZSBtdW9uZWthbm8gd2EgbWFiYWRpbGlrbyB1bGlva3V6d2Egd2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgd29ya29yZGVyIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5hb255ZXNoYSBraXVuZ28ga3dlbnllIG1lbnl1IGlsaSBrdWNoYXBpc2hhIG1hYmFkaWxpa28ga3dlbnllIG11b25la2FubyB3YWtlIHVsaW9rdXp3YSB3YSBraW9sZXN1cmEgY2hhIHdha2FsYS4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byByZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5hb255ZXNoYSBraXVuZ28ga3dlbnllIG1lbnl1IGlsaSBrd2VrYSB1cHlhIG1hYmFkaWxpa28gbmEgb2RhIHpha2UgemEga2F6aSBrYXRpa2EgbXVvbmVrYW5vIHdha2UgdWxpb2t1endhIHdhIGtpb2xlc3VyYSBjaGEgd2FrYWxhLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNoYW5nZSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmFvbnllc2hhIGJhZGlsaSBoaXN0b3JpYSAodXRhcmF0aWJ1IHVsaW9nZXV6d2EpIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdGUgTWFjaGluZSd9ID0gJ01hc2hpbmUgeWEgSGFsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdG9yZXMgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgaWRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHRlbXBsYXRlIGlkLCB3aGlsZSBhIHVzZXIgaXMgZWRpdGluZyBhIHRlbXBsYXRlLid9ID0KICAgICAgICAnSW5haGlmYWRoaSB2aXRhbWJ1bGlzaG8gdnlhIG1hYmFkaWxpa28gbmEgb2RhIHphIGthemkgc2FtYmFtYmEgbmEga2l0YW1idWxpc2hvIGNoYSBraW9sZXpvLCB3YWthdGkgbXR1bWlhamkgYW5haGFyaXJpIGtpb2xlem8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgV29ya29yZGVyJ30gPSAnQ2h1a3VhIE9kYSB5YSBrYXppJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgV29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIE92ZXJ2aWV3J30gPSAnTWFwaXRpbyB5YSBLaW9sZXpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBjaGFuZ2UsIGUuZy4gQ2hhbmdlIywgTXlDaGFuZ2UjLiBUaGUgZGVmYXVsdCBpcyBDaGFuZ2UjLid9ID0KICAgICAgICAnS2l0YW1idWxpc2hvIGNoYSBtYWJhZGlsaWtvLCBtZi4gTWFiYWRpbGlrbyMsIE1hYmFkaWxpa29ZYW5ndSMuIENoYWd1by1tc2luZ2kgbmkgTWFiYWRpbGlrbyMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIHdvcmtvcmRlciwgZS5nLiBXb3Jrb3JkZXIjLCBNeVdvcmtvcmRlciMuIFRoZSBkZWZhdWx0IGlzIFdvcmtvcmRlciMuJ30gPQogICAgICAgICdLaXRhbWJ1bGlzaG8gY2hhIG9kYSB5YSBrYXppLCBtZi4gT2RhWWFrYXppIywgT2RhWWFuZ3VZYUthemkjLiBDaGFndW8tbXNpbmdpIG5pIE9kYVlha2F6aSMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgQUNMIG1vZHVsZSByZXN0cmljdHMgdGhlIHVzdWFnZSBvZiB0aGUgdGlja2V0IHR5cGVzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb24gXCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXNcJywgdG8gdXNlcnMgb2YgdGhlIGdyb3VwcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpSZXN0cmljdFRpY2tldFR5cGVzOjpHcm91cHMiLiBBcyB0aGlzIEFDTCBjb3VsZCBjb2xsaWRlIHdpdGggb3RoZXIgQUNMcyB3aGljaCBhcmUgYWxzbyByZWxhdGVkIHRvIHRoZSB0aWNrZXQgdHlwZSwgdGhpcyBzeXNjb25maWcgb3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIHNob3VsZCBvbmx5IGJlIGFjdGl2YXRlZCBpZiBuZWVkZWQuJ30gPQogICAgICAgICdBaW5hIGhpaSB5YSBBQ0wgaW5henVpYSBtYXR1bWl6aSB5YSBhaW5hIHphIHRpa2V0aSBhbWJhem8gemltZWZhZmFudWxpd2Ega2F0aWthIGNoYWd1byBsYSBzeXNjb25maWcgXCdNYWJhZGlsaWtvSVRTTTo6T25nZXphS2l1bmdvTWFiYWRpbGlrb0FpbmFUaWtldGlcJywga3dhIHdhdHVtaWFqaSB3YSBtYWt1bmRpIGthbWEgaWxpdnlvZmFmYW51bGl3YSBrd2VueWUgIk1hYmFkaWxpa29JVFNNOjpadWlhQWluYVRpa2V0aTo6TWFrdW5kaSIuIEhpaSBBQ0wgaW5hd2V6YSBrdWluZ2lsaWFuYSBuYSAgQUNMIG55aW5naW5lIGFtYmF6byBwaWEgemluYSB1aHVzaWFubyBuYSBhaW5hIHlhIHRpa2V0aSwgaGlsaSBjaGFndW8gbGEgc3lzY29uZmlnIGxpbWUgbGVtYXp3YSBrd2Ega2F3YWlkYSBuYSBsaW5hd2V6YSBrdWFtaWxpc2h3YSBrYW1hIGl0YWhpdGFqaWthLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIFNsb3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHlwZXMgb2YgdGlja2V0cywgd2hlcmUgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgYSBsaW5rIHRvIGFkZCBhIGNoYW5nZSB3aWxsIGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJ0FpbmEgemEgdGlrZXRpLCBhbWJhem8ga3dlbnllIG11b25la2FubyB1bGlva3V6d2Egd2EgdGlrZXRpIGtpdW5nbyBjaGEga3VvbmdlemEgbWFiYWRpbGlrbyBraXRhb255ZXNod2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgU2VhcmNoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQgKGZyb20gdGVtcGxhdGUpLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWRkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBEZWxldGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSGlzdG9yeSBab29tLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFJlcG9ydC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J29uY2UnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVndWxhcmx5J30gPSAnJzsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6dGhfVEhfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICfguKvguKHguKfguJTguKvguKHguLnguYg8LT4g4Lic4Lil4LiB4Lij4Liw4LiX4LiaIDwtPiDguKXguLPguJTguLHguJrguITguKfguLLguKHguKrguLPguITguLHguI0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ2F0ZWdvcnkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4iOC4seC4lOC4geC4suC4o+C4peC4s+C4lOC4seC4muC4hOC4p+C4suC4oeC4quC4s+C4hOC4seC4jeC4guC4reC4h+C4nOC4peC4geC4suC4o+C4nOC4quC4oeC4nOC4quC4suC4meC4p+C4tOC4geC4pOC4lTwtPiDguJzguKXguIHguKPguLDguJfguJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ+C4geC4suC4o+C4iOC4seC4lOC4quC4o+C4o+C4peC4s+C4lOC4seC4muC4hOC4p+C4suC4oeC4quC4s+C4hOC4seC4jSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ2hhbmdlTm90aWZpY2F0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZU1hbmFnZW1lbnQgTm90aWZpY2F0aW9uIE1hbmFnZW1lbnQnfSA9ICfguIHguLLguKPguIjguLHguJTguIHguLLguKPguIHguLLguKPguYHguIjguYnguIfguYDguJXguLfguK3guJkgSVRTTSBDaGFuZ2VNYW5hZ2VtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOb3RpZmljYXRpb24gUnVsZSd9ID0gJ+C5gOC4nuC4tOC5iOC4oeC4geC4suC4o+C5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4meC4muC4l+C4muC4suC4l+C4q+C4meC5ieC4suC4l+C4teC5iCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdWxlJ30gPSAn4Lia4LiX4Lia4Liy4LiX4Lir4LiZ4LmJ4Liy4LiX4Li14LmIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Egbm90aWZpY2F0aW9uIHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICfguIHguLLguKPguYHguIjguYnguIfguYDguJXguLfguK3guJnguJXguYnguK3guIfguKHguLXguIrguLfguYjguK0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05hbWUgaXMgcmVxdWlyZWQuJ30gPSAn4LiV4LmJ4Lit4LiH4Lij4Liw4Lia4Li44LiK4Li34LmI4LitISc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNU3RhdGVNYWNoaW5lCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBTdGF0ZSBNYWNoaW5lJ30gPSAn4Lic4Li54LmJ4LiU4Li54LmB4Lil4Liq4LiW4Liy4LiZ4Liw4LiB4Lil4LmE4LiBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhIGNhdGFsb2cgY2xhc3MhJ30gPSAn4LmA4Lil4Li34Lit4LiB4LiE4Lil4Liy4Liq4LmB4LiE4LiV4LiV4Liy4Lil4LmH4Lit4LiBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgY2F0YWxvZyBjbGFzcyBpcyByZXF1aXJlZCEnfSA9ICfguJXguYnguK3guIfguKPguLDguJrguLjguITguKXguLLguKrguKvguKHguKfguJTguKvguKHguLnguYgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgc3RhdGUgdHJhbnNpdGlvbid9ID0gJ+C5gOC4nuC4tOC5iOC4oeC4quC4luC4suC4meC4oOC4suC4nuC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAn4Lir4LmJ4Lit4LiH4LmB4LiE4LmH4LiV4LiV4Liy4Lil4LmH4Lit4LiBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09iamVjdCBOYW1lJ30gPSAn4LiK4Li34LmI4Lit4Lit4Lit4Lia4LmA4LiI4LiB4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG92ZXIgc3RhdGUgdHJhbnNpdGlvbnMgZm9yJ30gPSAn4Lig4Liy4Lie4Lij4Lin4Lih4LiC4Lit4LiH4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4Liq4Liz4Lir4Lij4Lix4LiaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGlzIHN0YXRlIHRyYW5zaXRpb24nfSA9ICfguKXguJrguKrguJbguLLguJnguKDguLLguJ7guIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguJnguLXguYknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgbmV3IHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAn4LmA4Lie4Li04LmI4Lih4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4Liq4Liz4Lir4Lij4Lix4LiaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBzdGF0ZSEnfSA9ICfguIHguKPguLjguJPguLLguYDguKXguLfguK3guIHguKrguJbguLLguJnguKDguLLguJ4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIHNlbGVjdCBhIG5leHQgc3RhdGUhJ30gPSAn4LiB4Lij4Li44LiT4Liy4LmA4Lil4Li34Lit4LiB4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiW4Lix4LiU4LmE4LibJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ+C5geC4geC5ieC5hOC4guC4quC4luC4suC4meC4oOC4suC4nuC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4quC4s+C4q+C4o+C4seC4mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoZSBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAn4LiE4Li44LiT4LmB4LiZ4LmI4LmD4LiI4Lir4Lij4Li34Lit4LmE4Lih4LmI4Lin4LmI4Liy4LiV4LmJ4Lit4LiH4LiB4Liy4Lij4Lil4Lia4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiZ4Li14LmJJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDaGFuZ2UnfSA9ICfguYDguJ7guLTguYjguKFDaGFuZ2UgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlJ30gPSAnSVRTTSBDaGFuZ2UgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1c3RpZmljYXRpb24nfSA9ICfguYHguKrguJTguIfguYDguKvguJXguLjguJzguKUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5wdXQgaW52YWxpZC4nfSA9ICdpbnB1dCDguYTguKHguYjguJbguLnguIHguJXguYnguK3guIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAn4Lic4Lil4LiB4Lij4Liw4LiX4LiaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBEYXRlJ30gPSAn4LmA4Lin4Lil4Liy4LiX4Li14LmI4Lij4LmJ4Lit4LiH4LiC4LitJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBDaGFuZ2UgVGVtcGxhdGUnfSA9ICfguYDguKXguLfguK3guIHguYHguKHguYjguYHguJrguJrguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSB0eXBlJ30gPSAn4Lib4Lij4Liw4LmA4Lig4LiX4LmA4Lin4Lil4LiyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgdGltZSB0eXBlLid9ID0gJ+C4m+C4o+C4sOC5gOC4oOC4l+C5gOC4p+C4peC4suC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdGltZSd9ID0gJ+C5gOC4p+C4peC4suC5g+C4q+C4oeC5iCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ0FCVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgQ2hhbmdlIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJ+C4muC4seC4meC4l+C4tuC4gUNoYW5nZSBDQUIg4LmA4Lib4LmH4LiZ4LmB4Lih4LmI4LmB4Lia4LiaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIHRvIGludm9sdmVkIHBlcnNvbnMgc2NyZWVuJ30gPSAn4LmE4Lib4LiX4Li14LmI4Liq4LiB4Lij4Li14LiZ4LiC4Lit4LiH4Lia4Li44LiE4LiE4Lil4LiX4Li14LmI4LmA4LiB4Li14LmI4Lii4Lin4LiC4LmJ4Lit4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgTmFtZSd9ID0gJ+C4iuC4t+C5iOC4reC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25zIGFuZCBBY3Rpb25zJ30gPSAn4LmA4LiH4Li34LmI4Lit4LiZ4LmE4LiC4LmB4Lil4Liw4LiB4Liy4Lij4LiX4Liz4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25kaXRpb24nfSA9ICfguKXguJrguYDguIfguLfguYjguK3guJnguYTguIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBjb25kaXRpb24nfSA9ICfguYDguJ7guLTguYjguKHguYDguIfguLfguYjguK3guJnguYTguILguYPguKvguKHguYgnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29uZGl0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWQgYSB2YWxpZCBuYW1lLid9ID0gJ+C4leC5ieC4reC4h+C4geC4suC4o+C4iuC4t+C5iOC4reC4l+C4teC5iOC4luC4ueC4geC4leC5ieC4reC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIG5hbWUgaXMgbmVlZGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZTonfSA9ICfguIrguLfguYjguK3guIvguYnguLMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBuYW1lIGlzIGFscmVhZHkgdXNlZCBieSBhbm90aGVyIGNvbmRpdGlvbi4nfSA9ICfguIrguLfguYjguK3guJnguLXguYnguYTguJTguYnguJbguLnguIHguYPguIrguYnguIfguLLguJnguYLguJTguKLguYDguIfguLfguYjguK3guJnguYTguILguK3guLfguYjguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF0Y2hpbmcnfSA9ICfguJXguKPguIfguIHguLHguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW55IGV4cHJlc3Npb24gKE9SKSd9ID0gJ+C4geC4suC4o+C5geC4quC4lOC4h+C4nOC4peC5g+C4lOC5hiAoT1IpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBleHByZXNzaW9ucyAoQU5EKSd9ID0gJ+C4geC4suC4o+C5geC4quC4lOC4h+C4nOC4peC4l+C4seC5ieC4h+C4q+C4oeC4lCAoQU5EKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFeHByZXNzaW9ucyd9ID0gJ+C4geC4suC4o+C5geC4quC4lOC4h+C4nOC4pSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3Rvcid9ID0gJ+C4nOC4ueC5ieC5gOC4peC4t+C4reC4gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPcGVyYXRvcid9ID0gJ+C4nOC4ueC5ieC4lOC4s+C5gOC4meC4tOC4meC4geC4suC4oyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgRXhwcmVzc2lvbid9ID0gJ+C4peC4muC4geC4suC4o+C5geC4quC4lOC4h+C4nOC4pSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBFeHByZXNzaW9ucyBmb3VuZC4nfSA9ICfguYTguKHguYjguJ7guJrguIHguLLguKPguYHguKrguJTguIfguJzguKUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBleHByZXNzaW9uJ30gPSAn4LmA4Lie4Li04LmI4Lih4LiB4Liy4Lij4LmB4Liq4LiU4LiH4Lic4LilJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBBY3Rpb24nfSA9ICfguKXguJrguIHguLLguKPguJfguLPguIfguLLguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQWN0aW9ucyBmb3VuZC4nfSA9ICfguYTguKHguYjguJ7guJrguIHguLLguKPguJfguLPguIfguLLguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBhY3Rpb24nfSA9ICfguYDguJ7guLTguYjguKHguIHguLLguKPguJfguLPguIfguLLguJnguYPguKvguKHguYgnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZURlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNoYW5nZT8nfSA9ICfguITguLjguJPguJXguYnguK3guIfguIHguLLguKPguKXguJpDaGFuZ2Ug4LiZ4Li14LmJ4Lir4Lij4Li34Lit4LmE4Lih4LmIPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMnfSA9ICfguJvguKPguLDguKfguLHguJXguLTguILguK3guIcgJXMlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXInfSA9ICfguYPguJrguKrguLHguYjguIfguIfguLLguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBkZXRhaWxzJ30gPSAn4LmB4Liq4LiU4LiH4LmA4LiZ4Li34LmJ4Lit4Lir4LiyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgd29ya29yZGVyJ30gPSAn4LmB4Liq4LiU4LiH4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VIaXN0b3J5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlsZWQgaGlzdG9yeSBpbmZvcm1hdGlvbiBvZiAlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RpZmllZCd9ID0gJ+C4geC4suC4o+C4m+C4o+C4seC4muC5gOC4m+C4peC4teC5iOC4ouC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbGQgVmFsdWUnfSA9ICfguITguYjguLLguYDguJTguLTguKEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFZhbHVlJ30gPSAn4LiE4LmI4Liy4LmD4Lir4Lih4LmIJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSW52b2x2ZWQgUGVyc29ucyBvZiAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludm9sdmVkIFBlcnNvbnMnfSA9ICfguJrguLjguITguITguKXguJfguLXguYjguYDguIHguLXguYjguKLguKfguILguYnguK3guIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlTWFuYWdlcid9ID0gJ+C4nOC4ueC5ieC4iOC4seC4lOC4geC4suC4o+C4guC4reC4h0NoYW5nZSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBpbnZhbGlkLid9ID0gJ+C4nOC4ueC5ieC5g+C4iuC5ieC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VCdWlsZGVyJ30gPSAn4Lic4Li54LmJ4Liq4Lij4LmJ4Liy4LiHQ2hhbmdlICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQWR2aXNvcnkgQm9hcmQnfSA9ICfguITguJPguLDguIHguKPguKPguKHguIHguLLguKPguJfguLXguYjguJvguKPguLbguIHguKnguLIgQ2hhbmdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBUZW1wbGF0ZSd9ID0gJ+C5geC4oeC5iOC5geC4muC4miBDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwbHkgVGVtcGxhdGUnfSA9ICfguYPguIrguYnguYHguKHguYjguYHguJrguJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3VGVtcGxhdGUnfSA9ICfguYHguKHguYjguYHguJrguJrguYPguKvguKHguYgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSB0aGlzIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJ+C4muC4seC4meC4l+C4tuC4gSBDQUIg4LiZ4Li14LmJ4LmA4Lib4LmH4LiZ4LmB4Lih4LmI4LmB4Lia4LiaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0byBDQUInfSA9ICfguYDguJ7guLTguYjguKHguYTguJvguKLguLHguIcgQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgVXNlcid9ID0gJ+C4nOC4ueC5ieC5g+C4iuC5ieC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IENBQid9ID0gJ0NBQiDguJvguLHguIjguIjguLjguJrguLHguJknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAn4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiC4LmJ4Lit4LiE4Lin4Liy4LihJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZXMgcGVyIHBhZ2UnfSA9ICdDaGFuZ2VzIOC5g+C4meC5geC4leC5iOC4peC4sOC4q+C4meC5ieC4sic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEJ1aWxkZXInfSA9ICfguJzguLnguYnguKrguKPguYnguLLguIcgQ2hhbmdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBNYW5hZ2VyJ30gPSAn4Lic4Li54LmJ4LiI4Lix4LiU4LiB4Liy4LijICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXJzJ30gPSAn4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdGVkIFRpbWUnfSA9ICfguYDguKfguKXguLLguJfguLXguYjguKPguYnguK3guIfguILguK0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBTdGFydCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRW5kIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsIFN0YXJ0IFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsIEVuZCBUaW1lJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VSZXNldAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIHJlc2V0IHRoaXMgY2hhbmdlPyd9ID0gJ+C4hOC4uOC4k+C4leC5ieC4reC4h+C4geC4suC4o+C4o+C4teC5gOC4i+C4leC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4meC4teC5ieC4q+C4o+C4t+C4reC5hOC4oeC5iD8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGUuZy4gMTAqNTE1NSBvciAxMDU2NTgqKSd9ID0gJyjguYDguIrguYjguJkgMTAqNTE1NSDguKvguKPguLfguK0gMTA1NjU4KiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIEFnZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2UuZy4nfSA9ICfguYDguIrguYjguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIEN1c3RvbWVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIEluc3RydWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIFJlcG9ydCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBQcmlvcml0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBJbXBhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIENhdGVnb3J5J30gPSAn4Lir4Lih4Lin4LiU4Lir4Lih4Li54LmI4LiC4Lit4LiHQ2hhbmdlICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoYmVmb3JlL2FmdGVyKSd9ID0gJyjguIHguYjguK3guJkv4Lir4Lil4Lix4LiHKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoYmV0d2VlbiknfSA9ICco4Lij4Liw4Lir4Lin4LmI4Liy4LiHKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgQ2hhbmdlIGFzIFRlbXBsYXRlJ30gPSAn4Lia4Lix4LiZ4LiX4Li24LiBQ2hhbmdlIOC5gOC4m+C5h+C4meC5geC4oeC5iOC5geC4muC4mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHRlbXBsYXRlIHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICfguITguKfguKPguKPguLDguJrguLjguIrguLfguYjguK3guYHguKHguYjguYHguJrguJohJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLid9ID0gJ+C4leC5ieC4reC4h+C4o+C4sOC4muC4uOC4iuC4t+C5iOC4reC4guC4reC4h+C5geC4oeC5iOC5geC4muC4miEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgU3RhdGVzJ30gPSAn4Lij4Li14LmA4LiL4LiV4Liq4LiW4Liy4LiZ4Lig4Liy4LieJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ3cml0ZSBvcmlnaW5hbCB0ZW1wbGF0ZSd9ID0gJ+C5gOC4guC4teC4ouC4meC4l+C4seC4muC5geC4oeC5iOC5geC4muC4muC5gOC4lOC4tOC4oSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgY2hhbmdlJ30gPSAn4Lil4LiaQ2hhbmdlIOC5gOC4lOC4tOC4oSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90J30gPSAn4Lii4LmJ4Liy4LiiIFRpbWUgU2xvdCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEluZm9ybWF0aW9uJ30gPSAn4LiC4LmJ4Lit4Lih4Li54Lil4LiC4Lit4LiHQ2hhbmdlICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVmZm9ydCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY2NvdW50ZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW5pdGlhdG9yKHMpJ30gPSAn4Lic4Li54LmJ4Lij4Li04LmA4Lij4Li04LmI4LihKHMpIENoYW5nZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUInfSA9ICdDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4Lil4LmI4Liy4Liq4Li44LiUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4peC5iOC4suC4quC4uOC4lOC5guC4lOC4oic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ+C5guC4reC5gOC4hCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyBvcGVuIGxpbmtzIGluIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24gYmxvY2tzLCB5b3UgbWlnaHQgbmVlZCB0byBwcmVzcyBDdHJsIG9yIENtZCBvciBTaGlmdCBrZXkgd2hpbGUgY2xpY2tpbmcgdGhlIGxpbmsgKGRlcGVuZGluZyBvbiB5b3VyIGJyb3dzZXIgYW5kIE9TKS4nfSA9CiAgICAgICAgJ+C5g+C4meC4geC4suC4o+C5gOC4m+C4tOC4lOC4geC4suC4o+C4peC4tOC5ieC4h+C5g+C4meC4muC4peC5h+C4reC4geC4hOC4s+C4reC4mOC4tOC4muC4suC4ouC4leC5iOC4reC5hOC4m+C4meC4teC5iSDguITguLjguJPguK3guLLguIjguIjguLDguJXguYnguK3guIfguIHguJTguJvguLjguYjguKEgQ3RybCDguKvguKPguLfguK0gQ21kIOC4q+C4o+C4t+C4rSBTaGlmdCDguYPguJnguILguJPguLDguJfguLXguYjguIHguJTguKXguLTguYnguIcgKOC4guC4tuC5ieC4meC4reC4ouC4uOC5iOC4geC4seC4muC5gOC4muC4o+C4suC5gOC4i+C4reC4o+C5jOC5geC4peC4sOC4o+C4sOC4muC4muC4m+C4juC4tOC4muC4seC4leC4tOC4geC4suC4o+C4guC4reC4h+C4hOC4uOC4kyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG93bmxvYWQgQXR0YWNobWVudCd9ID0gJ+C4lOC4suC4p+C4meC5jOC5guC4q+C4peC4lOC4quC4tOC5iOC4h+C4l+C4teC5iOC5geC4meC4muC4oeC4sic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENBQiBUZW1wbGF0ZSd9ID0gJ+C5geC4geC5ieC5hOC4guC5geC4oeC5iOC5geC4muC4miBDQUInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgY2hhbmdlIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAn4LiZ4Li14LmI4LiI4Liw4Liq4Lij4LmJ4Liy4LiHQ2hhbmdlIOC5g+C4q+C4oeC5iOC4iOC4suC4geC5geC4oeC5iOC5geC4muC4muC4meC4teC5iSDguJTguLHguIfguJnguLHguYnguJnguITguLjguJPguIjguLbguIfguKrguLLguKHguLLguKPguJbguYHguIHguYnguYTguILguYHguKXguLDguJrguLHguJnguJfguLbguIHguYTguKfguYknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIG5ldyBjaGFuZ2Ugd2lsbCBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgaXQgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICdDaGFuZ2Ug4LmD4Lir4Lih4LmI4LiI4Liw4LiW4Li54LiB4Lil4Lia4LmC4LiU4Lii4Lit4Lix4LiV4LmC4LiZ4Lih4Lix4LiV4Li04Lir4Lil4Lix4LiH4LiI4Liy4LiB4LiX4Li14LmI4Lih4Lix4LiZ4LmE4LiU4LmJ4Lij4Lix4Lia4LiB4Liy4Lij4Lia4Lix4LiZ4LiX4Li24LiB4LmA4Lib4LmH4LiZ4LmB4Lih4LmI4LmB4Lia4LiaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgd29ya29yZGVyIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAn4LiZ4Li14LmI4LiI4Liw4Liq4Lij4LmJ4Liy4LiH4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZ4LmD4Lir4Lih4LmI4LiI4Liy4LiB4LmB4Lih4LmI4LmB4Lia4Lia4LiZ4Li14LmJIOC4lOC4seC4h+C4meC4seC5ieC4meC4hOC4uOC4k+C4iOC4tuC4h+C4quC4suC4oeC4suC4o+C4luC5geC4geC5ieC5hOC4guC5geC4peC4sOC4muC4seC4meC4l+C4tuC4geC5hOC4p+C5iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHRlbXBvcmFyeSBjaGFuZ2Ugd2lsbCBiZSBjcmVhdGVkIHdoaWNoIGNvbnRhaW5zIHRoZSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICdDaGFuZ2Ug4LiK4Lix4LmI4Lin4LiE4Lij4Liy4Lin4LiI4Liw4LiW4Li54LiB4Liq4Lij4LmJ4Liy4LiH4LiC4Li24LmJ4LiZ4LiL4Li24LmI4LiH4Lib4Lij4Liw4LiB4Lit4Lia4LiU4LmJ4Lin4Lii4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wb3JhcnkgY2hhbmdlIGFuZCBuZXcgd29ya29yZGVyIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSB3b3Jrb3JkZXIgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuJ30gPQogICAgICAgICdDaGFuZ2Ug4LiK4Lix4LmI4Lin4LiE4Lij4Liy4Lin4LmB4Lil4Liw4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZ4LmD4Lir4Lih4LmI4LiI4Liw4LiW4Li54LiB4Lil4Lia4LmC4LiU4Lii4Lit4Lix4LiV4LmC4LiZ4Lih4Lix4LiV4Li04Lir4Lil4Lix4LiH4LiI4Liy4LiB4LiX4Li14LmI4Lih4Lix4LiZ4LmE4LiU4LmJ4Lij4Lix4Lia4LiB4Liy4Lij4Lia4Lix4LiZ4LiX4Li24LiB4LmA4Lib4LmH4LiZ4LmB4Lih4LmI4LmB4Lia4LiaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSB3YW50IHRvIHByb2NlZWQ/J30gPSAn4LiE4Li44LiT4LiV4LmJ4Lit4LiH4LiB4Liy4Lij4LiU4Liz4LmA4LiZ4Li04LiZ4LiB4Liy4Lij4LiV4LmI4Lit4LmE4Lib4Lir4Lij4Li34Lit4LmE4Lih4LmIPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBJRCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENvbnRlbnQnfSA9ICfguYHguIHguYnguYTguILguYnguYDguJnguLfguYnguK3guKvguLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBieSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRlbXBsYXRlIENvbnRlbnQnfSA9ICfguYHguIHguYnguYTguILguYHguKHguYjguYHguJrguJrguILguK3guIfguYDguJnguLfguYnguK3guKvguLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIFRlbXBsYXRlJ30gPSAn4Lil4Lia4LmB4Lih4LmI4LmB4Lia4LiaJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgdG8gJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0cnVjdGlvbid9ID0gJ+C4geC4suC4o+C4quC4o+C5ieC4suC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHdvcmtvcmRlciB0eXBlLid9ID0gJ+C4m+C4o+C4sOC5gOC4oOC4l+C5g+C4muC4quC4seC5iOC4h+C4h+C4suC4meC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgcGxhbm5lZCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBwbGFubmVkIGVuZCB0aW1lISd9ID0gJ+C5gOC4p+C4peC4suC5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC4l+C4teC5iOC4p+C4suC4h+C5geC4nOC4meC4iOC4sOC4leC5ieC4reC4h+C5gOC4o+C4tOC5iOC4oeC4geC5iOC4reC4meC5gOC4p+C4peC4suC4quC4tOC5ieC4meC4quC4uOC4lOC4l+C4teC5iOC4p+C4suC4h+C5geC4nOC4meC5hOC4p+C5iSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBmb3JtYXQuJ30gPSAn4Lij4Li54Lib4LmB4Lia4Lia4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBXb3Jrb3JkZXIgVGVtcGxhdGUnfSA9ICfguYDguKXguLfguK3guIHguYHguKHguYjguYHguJrguJrguYPguJrguKrguLHguYjguIfguIfguLLguJknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFnZW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFdvcmtvcmRlciBBZ2VudCBvZiAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyB3b3Jrb3JkZXI/J30gPSAn4LiE4Li44LiT4LmB4LiZ4LmI4LmD4LiI4Lir4Lij4Li34Lit4LmE4Lih4LmI4LiX4Li14LmI4LiI4Liw4Lil4Lia4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZ4LiZ4Li14LmJPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBXb3Jrb3JkZXIuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIENvbmRpdGlvbiEnfSA9CiAgICAgICAgJ+C4hOC4uOC4k+C5hOC4oeC5iOC4quC4suC4oeC4o+C4luC4peC4muC5g+C4muC4quC4seC5iOC4h+C4h+C4suC4meC4meC4teC5iSDguYDguJnguLfguYjguK3guIfguIjguLLguIHguYTguJTguYnguYPguIrguYnguIfguLLguJnguK3guKLguYjguLLguIfguJnguYnguK3guKLguKvguJnguLbguYjguIfguYDguIfguLfguYjguK3guJnguYTguIIhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgV29ya29yZGVyIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBDb25kaXRpb24ocyknfSA9ICfguYPguJrguKrguLHguYjguIfguIfguLLguJnguJnguLXguYnguIjguLDguYPguIrguYnguYPguJnguYDguIfguLfguYjguK3guJnguYTguILguJTguLHguIfguJXguYjguK3guYTguJvguJnguLXguYkgKHMpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0ICVzJXMtJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBmb2xsb3dpbmcgd29ya29yZGVycyBhY2NvcmRpbmdseSd9ID0gJ+C4ouC5ieC4suC4oiB3b3Jrb3JkZXJzIOC4leC5iOC4reC5hOC4m+C4meC4teC5ieC4leC4suC4oeC4peC4s+C4lOC4seC4mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGUgcGxhbm5lZCBlbmQgdGltZSBvZiB0aGlzIHdvcmtvcmRlciBpcyBjaGFuZ2VkLCB0aGUgcGxhbm5lZCBzdGFydCB0aW1lcyBvZiBhbGwgZm9sbG93aW5nIHdvcmtvcmRlcnMgd2lsbCBiZSBjaGFuZ2VkIGFjY29yZGluZ2x5J30gPQogICAgICAgICfguKvguLLguIHguYDguKfguKXguLLguKrguLTguYnguJnguKrguLjguJTguJfguLXguYjguKfguLLguIfguYHguJzguJnguYTguKfguYnguILguK3guIcgd29ya29yZGVyIOC4meC4teC5ieC4oeC4teC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyDguJTguLHguIfguJnguLHguYnguJnguYDguKfguKXguLLguYDguKPguLTguYjguKHguJXguYnguJnguJfguLXguYjguKfguLLguIfguYHguJzguJnguYTguKfguYkg4LiC4Lit4LiHIHdvcmtvcmRlcnMg4LiV4LmI4Lit4LmE4Lib4LiZ4Li14LmJ4LiI4Liw4Lih4Li14LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LiV4Liy4Lih4LiE4Lin4Liy4Lih4LmA4Lir4Lih4Liy4Liw4Liq4LihJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMtJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclJlcG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBSZXBvcnQgb2YgJXMlcy0lcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnQnfSA9ICfguKPguLLguKLguIfguLLguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIHRpbWUhJ30gPSAn4LmA4Lin4Lil4Liy4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4LiX4Li14LmI4LmA4LiB4Li04LiU4LiC4Li24LmJ4LiZ4LiI4Lij4Li04LiH4LiI4Liw4LiV4LmJ4Lit4LiH4LmA4Lij4Li04LmI4Lih4LiB4LmI4Lit4LiZ4LmA4Lin4Lil4Liy4Liq4Li04LmJ4LiZ4Liq4Li44LiU4LiX4Li14LmI4LmA4LiB4Li04LiU4LiC4Li24LmJ4LiZ4LiI4Lij4Li04LiHISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWN0dWFsIHN0YXJ0IHRpbWUgbXVzdCBiZSBzZXQsIHdoZW4gdGhlIGFjdHVhbCBlbmQgdGltZSBpcyBzZXQhJ30gPQogICAgICAgICfguYDguKfguKXguLLguYDguKPguLTguYjguKHguJXguYnguJnguJfguLXguYjguYDguIHguLTguJTguILguLbguYnguJnguIjguKPguLTguIfguIjguLDguJXguYnguK3guIfguJXguLHguYnguIfguITguYjguLLguYDguKHguLfguYjguK3guYDguKfguKXguLLguKrguLTguYnguJnguKrguLjguJTguJfguLXguYjguYDguIHguLTguJTguILguLbguYnguJnguIjguKPguLTguIfguKHguLXguIHguLLguKPguJXguLHguYnguIfguITguYjguLIhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJUYWtlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEFnZW50J30gPSAn4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmM4Lib4Lix4LiI4LiI4Li44Lia4Lix4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byB0YWtlIHRoaXMgd29ya29yZGVyPyd9ID0gJ+C4hOC4uOC4k+C5geC4meC5iOC5g+C4iOC4q+C4o+C4t+C4reC5hOC4oeC5iOC4l+C4teC5iOC4iOC4sOC4peC4muC5g+C4muC4quC4seC5iOC4h+C4h+C4suC4meC4meC4teC5iT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIFdvcmtvcmRlciBhcyBUZW1wbGF0ZSd9ID0gJ+C4muC4seC4meC4l+C4tuC4geC5g+C4muC4quC4seC5iOC4h+C4h+C4suC4meC5gOC4m+C5h+C4meC5geC4oeC5iOC5geC4muC4mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgd29ya29yZGVyIChhbmQgc3Vycm91bmRpbmcgY2hhbmdlKSd9ID0gJ+C4peC4mndvcmtvcmRlciDguYDguJTguLTguKEo4LmB4Lil4Liw4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LmD4LiB4Lil4LmJ4LmA4LiE4Li14Lii4LiHKSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEluZm9ybWF0aW9uJ30gPSAn4LiC4LmJ4Lit4Lih4Li54Lil4LiC4Lit4LiH4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vua25vd24gbm90aWZpY2F0aW9uICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSB3YXMgYW4gZXJyb3IgY3JlYXRpbmcgdGhlIG5vdGlmaWNhdGlvbi4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ2hhbmdlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgd2l0aCBUaWNrZXRJRCAlcyBkb2VzIG5vdCBleGlzdCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWlzc2luZyBzeXNjb25maWcgb3B0aW9uICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBhZGQgY2hhbmdlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSBmcm9tIHRlbXBsYXRlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ0FCVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjaGFuZ2UgZm91bmQgZm9yIGNoYW5nZUlEICVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgQ0FCIG9mIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIHRoZSB0ZW1wbGF0ZS4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNvbmRpdGlvbi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIENvbmRpdGlvbklEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gJXMgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBjcmVhdGUgbmV3IGNvbmRpdGlvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBDb25kaXRpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBFeHByZXNzaW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgbmV3IEV4cHJlc3Npb24hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgQWN0aW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgbmV3IEFjdGlvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBFeHByZXNzaW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQWN0aW9uSUQgJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9yOiBVbmtub3duIGZpZWxkIHR5cGUgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uSUQgJXMgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBnaXZlbiBDaGFuZ2VJRCAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgZG9lcyBub3QgaGF2ZSBhbiBhbGxvd2VkIGNoYW5nZSBzdGF0ZSB0byBiZSBkZWxldGVkISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIGNoYW5nZUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VIaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBhcyBubyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biB0eXBlICIlcyIgZW5jb3VudGVyZWQhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VIaXN0b3J5Wm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSB6b29tLCBubyBIaXN0b3J5RW50cnlJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeUVudHJ5ICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSBDQUIgZm9yIENoYW5nZSAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNYW5hZ2VyLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogQ2hhbmdlTWFuYWdlcid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBNeSBDQUInfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU15Q2hhbmdlcy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IENoYW5nZXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU15V29ya09yZGVycy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IFdvcmtvcmRlcnMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVBJUi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFBJUid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUFNBLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUFNBJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQcmludC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgdGhlIHdvcmtvcmRlciBpcyBub3QgYXR0YWNoZWQgdG8gYSBjaGFuZ2UhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGNyZWF0ZSBvdXRwdXQsIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd1bmtub3duIGNoYW5nZSB0aXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFdvcmtvcmRlcid9ID0gJ+C5g+C4muC4quC4seC5iOC4h+C4h+C4suC4mSBJVFNNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gd29ya29yZGVyIHRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIE92ZXJ2aWV3ICglcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZFN0YXJ0VGltZSd9ID0gJ+C5gOC4p+C4peC4suC5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC4l+C4teC5iOC4p+C4suC4h+C5geC4nOC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkRW5kVGltZSd9ID0gJ+C5gOC4p+C4peC4suC4quC4tOC5ieC4meC4quC4uOC4lOC4l+C4teC5iOC4p+C4suC4h+C5geC4nOC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxTdGFydFRpbWUnfSA9ICfguYDguKfguKXguLLguYDguKPguLTguYjguKHguJXguYnguJnguJfguLXguYjguYDguIHguLTguJTguILguLbguYnguJnguIjguKPguLTguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsRW5kVGltZSd9ID0gJ+C5gOC4p+C4peC4suC4quC4tOC5ieC4meC4quC4uOC4lOC4l+C4teC5iOC5gOC4geC4tOC4lOC4guC4tuC5ieC4meC4iOC4o+C4tOC4hyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUmVzZXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byByZXNldCBXb3JrT3JkZXIgJXMgb2YgQ2hhbmdlICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gcmVzZXQgQ2hhbmdlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlU2NoZWR1bGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2UgU2NoZWR1bGUnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VUaXRsZSd9ID0gJ+C4q+C4seC4p+C4guC5ieC4rUNoYW5nZSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVycyd9ID0gJ+C5g+C4muC4quC4seC5iOC4h+C4h+C4suC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VTdGF0ZSd9ID0gJ+C4quC4luC4suC4meC4oOC4suC4nuC4guC4reC4h0NoYW5nZSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCBSZXN1bHQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE51bWJlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrIE9yZGVyIFRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSnVzdGlmaWNhdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFJlcG9ydCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpb3JpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEltcGFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgVHlwZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmVmb3JlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIHRoZSB0ZW1wbGF0ZSAiJXMiLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIGNoYW5nZSAiJXMiLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjaGFuZ2UgY2FuXCd0IGJlIG1vdmVkLCBhcyBpdCBoYXMgbm8gd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIGZpcnN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgbW92ZSBhIGNoYW5nZSB3aGljaCBhbHJlYWR5IGhhcyBzdGFydGVkISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgbW92ZSB0aGUgaW5kaXZpZHVhbCB3b3Jrb3JkZXJzIGluc3RlYWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjdXJyZW50ICVzIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgJXMgb2YgYWxsIHdvcmtvcmRlcnMgaGFzIHRvIGJlIGRlZmluZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBtb3ZlIHRpbWUgc2xvdCBmb3Igd29ya29yZGVyICMlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBUZW1wbGF0ZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgdGVtcGxhdGUgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgIiVzIiEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIHdvcmtvcmRlciBmcm9tIHRlbXBsYXRlISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVPdmVydmlldy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IFRlbXBsYXRlJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJBZGQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIG9uIHRoZSBjaGFuZ2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBhZGQgd29ya29yZGVyISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWdlbnQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIFdvcmtPcmRlcklEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gc2V0IHRoZSB3b3Jrb3JkZXIgYWdlbnQgb2YgdGhlIHdvcmtvcmRlciAiJXMiIHRvIGVtcHR5ISd9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgdGhlIHdvcmtvcmRlciAiJXMiISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZmluZCBDaGFuZ2UgZm9yIFdvcmtPcmRlciAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckRlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgd29ya29yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBXb3JrT3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBhcyBubyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5J30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5Wm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBlbnRyeSAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5IFpvb20nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlclRha2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB0YWtlIHRoZSB3b3Jrb3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHdvcmtvcmRlciAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML0xheW91dC9JVFNNQ2hhbmdlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIGNvbmZpZyBvcHRpb24gJXMhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBvcHRpb24gJXMgbmVlZHMgdG8gYmUgYSBIQVNIIHJlZiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gY29uZmlnIG9wdGlvbiBmb3VuZCBmb3IgdGhlIHZpZXcgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGl0bGU6ICVzIHwgVHlwZTogJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBDQUJzJ30gPSAnQ0FCIOC4guC4reC4h+C4ieC4seC4mSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBDaGFuZ2VzJ30gPSAnY2hhbmdl4LiC4Lit4LiH4LiJ4Lix4LiZJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeVdvcmtPcmRlcnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IFdvcmsgT3JkZXJzJ30gPSAnJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ2hhbmdlTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZXF1ZXN0ZWQnfSA9ICfguKPguYnguK3guIfguILguK0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGVuZGluZyBhcHByb3ZhbCd9ID0gJ+C4geC4suC4o+C4reC4meC4uOC4oeC4seC4leC4tOC4l+C4teC5iOC4hOC5ieC4suC4h+C4reC4ouC4ueC5iCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWplY3RlZCd9ID0gJ+C4luC4ueC4geC4m+C4j+C4tOC5gOC4quC4mCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZlZCd9ID0gJ+C4reC4meC4uOC4oeC4seC4leC4tOC5geC4peC5ieC4pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbiBwcm9ncmVzcyd9ID0gJ+C4reC4ouC4ueC5iOC5g+C4meC4guC5iOC4p+C4h+C4lOC4s+C5gOC4meC4tOC4meC4geC4suC4oyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIHBpcid9ID0gJ1BJUiDguJfguLXguYjguITguYnguLLguIfguK3guKLguLnguYgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc3VjY2Vzc2Z1bCd9ID0gJ+C4quC4s+C5gOC4o+C5h+C4iCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydmYWlsZWQnfSA9ICfguKXguYnguKHguYDguKvguKXguKcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2FuY2VsZWQnfSA9ICfguKLguIHguYDguKXguLTguIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmV0cmFjdGVkJ30gPSAn4LiW4Lit4Lii4LiB4Lil4Lix4LiaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NyZWF0ZWQnfSA9ICfguKrguKPguYnguLLguIfguYHguKXguYnguKcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWNjZXB0ZWQnfSA9ICfguKLguK3guKHguKPguLHguJrguYHguKXguYnguKcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVhZHknfSA9ICfguYDguKPguLXguKLguJrguKPguYnguK3guKInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYXBwcm92YWwnfSA9ICfguIHguLLguKPguK3guJnguLjguKHguLHguJXguLQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd29ya29yZGVyJ30gPSAn4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JhY2tvdXQnfSA9ICdiYWNrb3V0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2RlY2lzaW9uJ30gPSAn4LiB4Liy4Lij4LiV4Lix4LiU4Liq4Li04LiZ4LmD4LiIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Bpcid9ID0gJ3Bpcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyd9ID0gJ+C4hOC4t+C4rSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBub3QnfSA9ICfguITguLfguK0g4LmE4Lih4LmIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGVtcHR5J30gPSAn4LiE4Li34LitIOC4p+C5iOC4suC4h+C5gOC4m+C4peC5iOC4sic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBub3QgZW1wdHknfSA9ICfguITguLfguK0g4LmE4Lih4LmI4Lin4LmI4Liy4LiH4LmA4Lib4Lil4LmI4LiyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGdyZWF0ZXIgdGhhbid9ID0gJ+C4hOC4t+C4rSDguKHguLLguIHguIHguKfguYjguLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbGVzcyB0aGFuJ30gPSAn4LiE4Li34LitIOC4meC5ieC4reC4ouC4geC4p+C5iOC4sic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBiZWZvcmUnfSA9ICfguITguLfguK0g4LiB4LmI4Lit4LiZ4Lir4LiZ4LmJ4LiyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGFmdGVyJ30gPSAn4LiE4Li34LitIOC4q+C4peC4seC4h+C4iOC4suC4gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjb250YWlucyd9ID0gJ+C4muC4o+C4o+C4iOC4uCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgY29udGFpbnMnfSA9ICfguYTguKHguYjguJrguKPguKPguIjguLgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmVnaW5zIHdpdGgnfSA9ICfguYDguKPguLTguYjguKHguJXguYnguJnguJTguYnguKfguKInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZW5kcyB3aXRoJ30gPSAn4Lil4LiH4LiX4LmJ4Liy4Lii4LiU4LmJ4Lin4LiiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3NldCd9ID0gJ+C4leC4seC5ieC4h+C4hOC5iOC4sic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbGlzdCBvZiB0aGUgYWdlbnRzIHdobyBoYXZlIHBlcm1pc3Npb24gdG8gdGFrZSB3b3Jrb3JkZXJzLiBLZXkgaXMgYSBsb2dpbiBuYW1lLiBDb250ZW50IGlzIDAgb3IgMS4nfSA9CiAgICAgICAgJ+C4o+C4suC4ouC4iuC4t+C5iOC4reC4guC4reC4h+C5gOC4reC5gOC4ouC5iOC4meC4leC5jOC4l+C4teC5iOC5hOC4lOC5ieC4o+C4seC4muC4reC4meC4uOC4jeC4suC4leC5g+C4q+C5ieC5g+C4iuC5ieC5g+C4muC4quC4seC5iOC4h+C4h+C4suC4mSDguITguLXguKLguYzguKrguLPguITguLHguI3guITguLfguK3guIrguLfguYjguK3guKXguYrguK3guIHguK3guLTguJkg4LmA4LiZ4Li34LmJ4Lit4Lir4Liy4LmA4Lib4LmH4LiZIDAg4Lir4Lij4Li34LitIDEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBsaXN0IG9mIHdvcmtvcmRlciBzdGF0ZXMsIGF0IHdoaWNoIHRoZSBBY3R1YWxTdGFydFRpbWUgb2YgYSB3b3Jrb3JkZXIgd2lsbCBiZSBzZXQgaWYgaXQgd2FzIGVtcHR5IGF0IHRoaXMgcG9pbnQuJ30gPQogICAgICAgICfguKPguLLguKLguIHguLLguKPguKrguJbguLLguJnguKDguLLguJ7guILguK3guIfguYPguJrguKrguLHguYjguIfguIfguLLguJnguJfguLXguYggQWN0dWFsU3RhcnRUaW1lIOC4guC4reC4hyB3b3Jrb3JkZXIg4LiI4Liw4LiW4Li54LiB4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiW4LmJ4Liy4Lir4Liy4LiB4LiI4Li44LiU4LiZ4Li14LmJ4LmA4Lib4LmH4LiZ4LiX4Li14LmI4Lin4LmI4Liy4LiH4LmA4Lib4Lil4LmI4LiyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXInfSA9ICfguYDguJ7guLTguYjguKHguYPguJrguKrguLHguYjguIfguIfguLLguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlciAoZnJvbSBUZW1wbGF0ZSknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgY2hhbmdlIGZyb20gdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIChmcm9tIHRlbXBsYXRlKSB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgdG8gdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGZyb20gdGVtcGxhdGUnfSA9ICfguYDguJ7guLTguYjguKHguIjguLLguIHguYHguKHguYjguYHguJrguJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gb2YgdGhlIENJUCBtYXRyaXguJ30gPSAn4Lic4Li54LmJ4LiU4Li54LmB4Lil4Lij4Liw4Lia4Lia4LiC4Lit4LiHIENJUCBtYXRyaXguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIHRoZSBzdGF0ZSBtYWNoaW5lLid9ID0gJ+C4nOC4ueC5ieC4lOC4ueC5geC4peC4guC4reC4h+C4quC4luC4suC4meC4sOC4geC4peC5hOC4gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2UgYWR2aXNvcnkgYm9hcmRzLid9ID0KICAgICAgICAn4LmC4Lih4LiU4Li54Lil4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LiB4Liy4Lij4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZ4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmM4LmD4LiZ4LiB4Liy4Lij4LiU4Li54LiI4Liz4LiZ4Lin4LiZ4LiC4Lit4LiH4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LiC4Lit4LiHIGFkdmlzb3J5IGJvYXJkcyAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlcyBtYW5hZ2VkIGJ5IHRoZSB1c2VyLid9ID0KICAgICAgICAn4LmC4Lih4LiU4Li54Lil4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LiB4Liy4Lij4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZ4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmM4LmD4LiZ4LiB4Liy4Lij4LiU4Li54LiI4Liz4LiZ4Lin4LiZ4LiC4Lit4LiH4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LiB4Liy4Lij4LiE4Lin4Lia4LiE4Li44Lih4LmC4LiU4Lii4Lil4Li54LiB4LiE4LmJ4LiyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMuJ30gPQogICAgICAgICfguYLguKHguJTguLnguKXguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguIHguLLguKPguYHguIjguYnguIfguYDguJXguLfguK3guJnguJXguLHguKfguILguK3guIfguYDguK3guYDguKLguYjguJnguJXguYzguYPguJnguIHguLLguKPguJTguLnguIjguLPguJnguKfguJnguILguK3guIfguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2Ygd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgTWVtYmVyIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudCB0b29sYmFycy4gRGVmYXVsdDogMyBob3VycyAoMTgwIG1pbnV0ZXMpLid9ID0KICAgICAgICAn4LmA4Lin4Lil4LiyIENhY2hlIOC4leC5iOC4reC4meC4suC4l+C4teC4quC4s+C4q+C4o+C4seC4muC4geC4suC4o+C4iOC4seC4lOC4geC4suC4o+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudC4gRGVmYXVsdDogNSBkYXlzICg3MjAwIG1pbnV0ZXMpLid9ID0KICAgICAgICAn4LmB4LiE4LiK4LmA4Lin4Lil4Liy4LmA4Lib4LmH4LiZ4LiZ4Liy4LiX4Li14Liq4Liz4Lir4Lij4Lix4Lia4LiB4Liy4Lij4LiI4Lix4LiU4LiB4Liy4Lij4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHIOC5gOC4o+C4tOC5iOC4oeC4leC5ieC4mTogNSDguKfguLHguJkgKDcyMDAg4LiZ4Liy4LiX4Li1KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQ0FCIFRlbXBsYXRlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSGlzdG9yeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEludm9sdmVkIFBlcnNvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAn4Lig4Liy4Lie4Lij4Lin4Lih4LiC4Lit4LiHQ2hhbmdlICLguILguJnguLLguJTguYDguKXguYfguIEiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFByaW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2NoZWR1bGUnfSA9ICfguJXguLLguKPguLLguIdjaGFuZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNjaGVkdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFuZCBXb3Jrb3JkZXIgVGVtcGxhdGVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhbmQgd29ya29yZGVyIHRlbXBsYXRlcyBlZGl0ZWQgYnkgdGhpcyB1c2VyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYXJlYS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGludm9sdmVkIHBlcnNvbnMgb2YgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGxpbWl0IHBlciBwYWdlIGZvciBDaGFuZ2UgT3ZlcnZpZXcgIlNtYWxsIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ+C5gOC4m+C4peC4teC5iOC4ouC4meC4geC4suC4o+C4hOC5ieC4meC4q+C4siAgYmFja2VuZCByb3V0ZXIg4LiC4Lit4LiH4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbiBFZGl0J30gPSAn4LmB4LiB4LmJ4LmE4LiC4LmA4LiH4Li34LmI4Lit4LiZ4LmE4LiCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbiBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmUgd2hpY2ggc2NyZWVuIHNob3VsZCBiZSBzaG93biBhZnRlciBhIG5ldyB3b3Jrb3JkZXIgaGFzIGJlZW4gY3JlYXRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmVzIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCB3aGVuIHBsYW5uZWQgdGhlIHN0YXJ0IHRpbWUgb3Igb3RoZXIgdGltZSB2YWx1ZXMgaGF2ZSBiZWVuIHJlYWNoZWQvcGFzc2VkLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiE4LmI4Liy4LiB4Liy4Lij4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZ4LiI4Liw4LiW4Li54LiB4Liq4LmI4LiH4Lia4LmI4Lit4Lii4LmB4LiE4LmI4LmD4Lir4LiZ4LmA4Lih4Li34LmI4Lit4Lih4Li14LiB4Liy4Lij4Lin4Liy4LiH4LmB4Lic4LiZ4LmA4Lin4Lil4Liy4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4Lir4Lij4Li34Lit4LiE4LmI4Liy4LmA4Lin4Lil4Liy4Lit4Li34LmI4LiZIOC5hiDguYTguJTguYnguKHguLLguJbguLbguIcgL+C4nOC5iOC4suC4meC5hOC4myc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgQ2hhbmdlJ30gPSAn4Liq4Lij4LmJ4Liy4LiHQ2hhbmdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBDaGFuZ2UgKGZyb20gVGVtcGxhdGUpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIGNoYW5nZSAoZnJvbSB0ZW1wbGF0ZSkgZnJvbSB0aGlzIHRpY2tldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGEgY2hhbmdlIGZyb20gdGhpcyB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIElUU00gQ2hhbmdlIE1hbmFnZW1lbnQgbm90aWZpY2F0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB0eXBlIGZvciBhIHdvcmtvcmRlci4gVGhpcyBlbnRyeSBtdXN0IGV4aXN0IGluIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBcJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6VHlwZVwnLid9ID0KICAgICAgICAn4Lib4Lij4Liw4LmA4Lig4LiX4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4Liq4Liz4Lir4Lij4Lix4Lia4LiB4Liy4Lij4Liq4Lix4LmI4LiH4LiH4Liy4LiZIOC4o+C4suC4ouC4geC4suC4o+C4m+C5ieC4reC4meC4meC4teC5ieC4leC5ieC4reC4h+C4oeC4teC4reC4ouC4ueC5iOC5g+C4meC4hOC4peC4suC4quC5geC4hOC4leC4leC4suC4peC5h+C4reC4geC4l+C4seC5iOC4p+C5hOC4myBcJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6VHlwZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgc2lnbmFscyBmb3IgZWFjaCB3b3Jrb3JkZXIgc3RhdGUuJ30gPSAn4LiB4Liz4Lir4LiZ4LiU4Liq4Lix4LiN4LiN4Liy4LiT4Liq4Liz4Lir4Lij4Lix4Lia4LmB4LiV4LmI4Lil4Liw4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiC4Lit4LiH4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIENoYW5nZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgQ2hhbmdlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFdvcmtvcmRlciB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBXb3Jrb3JkZXIgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNoYW5nZSBsaXN0Lid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LmC4Lih4LiU4Li54Lil4Lig4Liy4Lie4Lij4Lin4Lih4LiX4Li14LmI4LiI4Liw4LmB4Liq4LiU4LiH4Lih4Li44Lih4Lih4Lit4LiH4LmA4Lil4LmH4LiB4LmG4LiC4Lit4LiH4Lij4Liy4Lii4LiB4Liy4Lij4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSB0ZW1wbGF0ZSBsaXN0Lid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LmC4Lih4LiU4Li54Lil4Lig4Liy4Lie4Lij4Lin4Lih4LiX4Li14LmI4LiI4Liw4LmB4Liq4LiU4LiH4Lih4Li44Lih4Lih4Lit4LiH4LmA4Lil4LmH4LiBIOC5hiDguILguK3guIfguKPguLLguKLguIHguLLguKPguYHguKHguYjguYHguJrguJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBhY2NvdW50ZWQgdGltZS4nfSA9ICfguIHguLPguKvguJnguJTguITguYjguLLguJbguYnguLLguKvguLLguIHguYDguJvguYfguJnguYTguJvguYTguJTguYnguYPguJnguIHguLLguKPguJfguLXguYjguIjguLDguJ7guLTguKHguJ7guYwgdGhlIGFjY291bnRlZCB0aW1lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgcGxhbm5lZCBlZmZvcnQuJ30gPSAn4LiB4Liz4Lir4LiZ4LiU4LiE4LmI4Liy4LiW4LmJ4Liy4Lir4Liy4LiB4LmA4Lib4LmH4LiZ4LmE4Lib4LmE4Lih4LmE4LiU4LmJ4LmD4LiZ4LiB4Liy4Lij4LiX4Li14LmI4LiI4Liw4Lie4Li04Lih4Lie4LmMIHRoZSBwbGFubmVkIGVmZm9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgY2hhbmdlIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSBjaGFuZ2UgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguKvguLLguIHguKrguLLguKHguLLguKPguJbguYDguILguYnguLLguJbguLbguIcgKOC4leC4suC4oeC4l+C4teC5iOC4geC4s+C4q+C4meC4lOC5guC4lOC4ouC5gOC4hOC4o+C4t+C5iOC4reC4h+C4quC4luC4suC4meC4sCkg4Liq4LiW4Liy4LiZ4Liw4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LiX4Li14LmI4Liq4Li04LmJ4LiZ4Liq4Li44LiU4LiE4Lin4Lij4LmE4LiU4LmJ4Lij4Lix4Lia4Lit4LiZ4Li44LiN4Liy4LiV4Lir4Liy4LiB4Lih4Li14LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LiX4Li14LmI4Lit4Lii4Li54LmI4LmD4LiZ4Liq4LiW4Liy4LiZ4Liw4LiX4Li14LmI4LiW4Li54LiB4Lil4LmH4Lit4LiBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgcmVhY2hhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lKSB3b3Jrb3JkZXIgZW5kIHN0YXRlcyBzaG91bGQgYmUgYWxsb3dlZCBpZiBhIHdvcmtvcmRlciBpcyBpbiBhIGxvY2tlZCBzdGF0ZS4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4q+C4suC4geC4quC4suC4oeC4suC4o+C4luC5gOC4guC5ieC4suC4luC4tuC4hyAo4LiV4Liy4Lih4LiX4Li14LmI4LiB4Liz4Lir4LiZ4LiU4LmC4LiU4Lii4LmA4LiE4Lij4Li34LmI4Lit4LiH4Liq4LiW4Liy4LiZ4LiwKSDguKrguJbguLLguJnguLDguYPguJrguKrguLHguYjguIfguIfguLLguJnguJfguLXguYjguKrguLTguYnguJnguKrguLjguJTguITguKfguKPguYTguJTguYnguKPguLHguJrguK3guJnguLjguI3guLLguJXguKvguLLguIHguKHguLXguYPguJrguKrguLHguYjguIfguIfguLLguJnguK3guKLguLnguYjguYPguJnguKrguJbguLLguJnguLDguJfguLXguYjguJbguLnguIHguKXguYfguK3guIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWNjb3VudGVkIHRpbWUgc2hvdWxkIGJlIHNob3duLid9ID0gJ+C4geC4s+C4q+C4meC4lOC4luC5ieC4suC4q+C4suC4gSB0aGUgYWNjb3VudGVkIHRpbWUg4LiI4Liw4LiV4LmJ4Lit4LiH4LmB4Liq4LiU4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzIHNob3VsZCBiZSBzZXQuJ30gPSAn4LiB4Liz4Lir4LiZ4LiU4LiW4LmJ4Liy4Lir4Liy4LiBIHRoZSBhY3R1YWwgc3RhcnQgdGltZSDguYHguKXguLAgdGhlIGVuZCB0aW1lIOC4iOC4sOC4leC5ieC4reC4h+C4muC4seC4meC4l+C4tuC4gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBjaGFuZ2Ugc2VhcmNoIGFuZCB0aGUgd29ya29yZGVyIHNlYXJjaCBmdW5jdGlvbnMgY291bGQgdXNlIHRoZSBtaXJyb3IgREIuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguKvguLLguIHguIHguLLguKPguITguYnguJnguKvguLLguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguYHguKXguLDguJ/guLHguIfguIHguYzguIrguLHguYjguJnguIHguLLguKPguITguYnguJnguKvguLIgd29ya29yZGVyIOC4quC4suC4oeC4suC4o+C4luC5g+C4iuC5ieC4kOC4suC4meC4guC5ieC4reC4oeC4ueC4peC4quC4sOC4l+C5ieC4reC4meC4geC4peC4seC4mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBjaGFuZ2Ugc3RhdGUgY2FuIGJlIHNldCBpbiBBZ2VudElUU01DaGFuZ2VFZGl0Lid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiW4LmJ4Liy4Lir4Liy4LiBIHRoZSBjaGFuZ2Ugc3RhdGUg4Liq4Liy4Lih4Liy4Lij4LiW4Lia4Lix4LiZ4LiX4Li24LiB4LmD4LiZIEFnZW50SVRTTUNoYW5nZUVkaXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHBsYW5uZWQgZWZmb3J0IHNob3VsZCBiZSBzaG93bi4nfSA9ICfguIHguLPguKvguJnguJTguITguYjguLLguJbguYnguLLguKvguLLguIEgdGhlIHBsYW5uZWQgZWZmb3J0IOC4iOC4sOC4leC5ieC4reC4h+C5geC4quC4lOC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgcHJpbnQgYnkgY3VzdG9tZXIuJ30gPSAn4LiB4Liz4Lir4LiZ4LiU4LiE4LmI4Liy4LiW4LmJ4Liy4Lir4Liy4LiB4Lil4Li54LiB4LiE4LmJ4Liy4LiV4LmJ4Lit4LiH4LiB4Liy4Lij4Lie4Li04Lih4Lie4LmMIHRoZSByZXF1ZXN0ZWQgZGF0ZSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNlYXJjaGVkIGJ5IGN1c3RvbWVyLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiE4LmI4Liy4LiW4LmJ4Liy4Lir4Liy4LiB4Lil4Li54LiB4LiE4LmJ4Liy4LiI4Liw4LiV4LmJ4Lit4LiH4LiE4LmJ4LiZ4Lir4LiyIHRoZSByZXF1ZXN0ZWQgZGF0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2V0IGJ5IGN1c3RvbWVyLid9ID0gJ+C4geC4s+C4q+C4meC4lOC4hOC5iOC4suC4luC5ieC4suC4q+C4suC4geC4peC4ueC4geC4hOC5ieC4suC4leC5ieC4reC4h+C4geC4suC4o+C5gOC4i+C4leC4p+C4seC4meC4l+C4teC5iOC4l+C4teC5iOC5gOC4o+C4teC4ouC4geC4o+C5ieC4reC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSByZXF1ZXN0ZWQgZGF0ZSBzaG91bGQgYmUgc2hvd24gYnkgY3VzdG9tZXIuJ30gPSAn4LiB4Liz4Lir4LiZ4LiU4LiE4LmI4Liy4LiW4LmJ4Liy4Lir4Liy4LiB4Lil4Li54LiB4LiE4LmJ4Liy4LiV4LmJ4Lit4LiH4LiB4Liy4Lij4LmB4Liq4LiU4LiH4Lin4Lix4LiZ4LiX4Li14LmI4LiX4Li14LmI4LmA4Lij4Li14Lii4LiB4Lij4LmJ4Lit4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciBzdGF0ZSBzaG91bGQgYmUgc2hvd24uJ30gPSAn4LiB4Liz4Lir4LiZ4LiU4LiE4LmI4Liy4LiW4LmJ4Liy4Lir4Liy4LiB4LiI4Liw4LiV4LmJ4Lit4LiH4LmB4Liq4LiU4LiH4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiC4Lit4LiH4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHdvcmtvcmRlciB0aXRsZSBzaG91bGQgYmUgc2hvd24uJ30gPSAn4LiB4Liz4Lir4LiZ4LiU4LiE4LmI4Liy4LiW4LmJ4Liy4Lir4Liy4LiB4LiV4LmJ4Lit4LiH4LmB4Liq4LiU4LiH4Lir4Lix4Lin4LiC4LmJ4Lit4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgc2hvd24gZ3JhcGggYXR0cmlidXRlcy4nfSA9ICfguIHguLPguKvguJnguJTguITguYjguLLguIHguKPguLLguJ/guYHguK3guJXguJfguKPguLTguJrguLTguKfguJXguYzguJfguLXguYjguIjguLDguYHguKrguJTguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGF0IG9ubHkgY2hhbmdlcyBjb250YWluaW5nIFdvcmtvcmRlcnMgbGlua2VkIHdpdGggc2VydmljZXMsIHdoaWNoIHRoZSBjdXN0b21lciB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIHVzZSB3aWxsIGJlIHNob3duLiBBbnkgb3RoZXIgY2hhbmdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguKfguYjguLLguKHguLXguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguYDguJfguYjguLLguJnguLHguYnguJnguJfguLXguYjguJvguKPguLDguIHguK3guJrguJTguYnguKfguKLguIHguLLguKPguYDguIrguLfguYjguK3guKHguYLguKLguIfguYPguJrguKrguLHguYjguIfguIfguLLguJnguJTguYnguKfguKLguIHguLLguKPguJrguKPguLTguIHguLLguKPguJfguLXguYjguIjguLDguYHguKrguJTguIfguKXguLnguIHguITguYnguLLguJzguLnguYnguYPguIrguYnguKHguLXguKrguLTguJfguJjguLTguYzguYPguJnguIHguLLguKPguYPguIrguYkg4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4Lit4Li34LmI4LiZIOC5hiDguIjguLDguYTguKHguYjguKrguLLguKHguLLguKPguJbguYHguKrguJTguIfguYTguJTguYknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgYWxsb3dlZCB0byBkZWxldGUuJ30gPSAn4LiB4Liz4Lir4LiZ4LiU4Liq4LiW4Liy4LiZ4Liw4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LiX4Li14LmI4LiI4Liw4LmE4LiU4LmJ4Lij4Lix4Lia4Lit4LiZ4Li44LiN4Liy4LiV4LmD4Lir4LmJ4Lil4LiaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFBTQSBvdmVydmlldy4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4quC4luC4suC4meC4sOC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4l+C4teC5iOC4iOC4sOC5g+C4iuC5ieC5gOC4m+C5h+C4meC4leC4seC4p+C4geC4o+C4reC4h+C5g+C4meC4oOC4suC4nuC4o+C4p+C4oSBDaGFuZ2UgUFNBICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4quC4luC4suC4meC4sOC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4l+C4teC5iOC4iOC4sOC5g+C4iuC5ieC5gOC4m+C5h+C4meC4leC4seC4p+C4geC4o+C4reC4h+C5g+C4meC4oOC4suC4nuC4o+C4p+C4oSBDaGFuZ2UgU2NoZWR1bGUgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguKrguJbguLLguJnguLDguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguJfguLXguYjguIjguLDguYPguIrguYnguYDguJvguYfguJnguJXguLHguKfguIHguKPguK3guIfguYPguJnguKDguLLguJ7guKPguKfguKEgTXlDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguKrguJbguLLguJnguLDguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguJfguLXguYjguIjguLDguYPguIrguYnguYDguJvguYfguJnguJXguLHguKfguIHguKPguK3guIfguYPguJnguKDguLLguJ7guKPguKfguKEgTXlDaGFuZ2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguKrguJbguLLguJnguLDguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguJfguLXguYjguIjguLDguYPguIrguYnguYDguJvguYfguJnguJXguLHguKfguIHguKPguK3guIfguYPguJnguKDguLLguJ7guKPguKfguKHguJXguLHguKfguIjguLHguJTguIHguLLguKPguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguKrguJbguLLguJnguLDguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguJfguLXguYjguIjguLDguYPguIrguYnguYDguJvguYfguJnguJXguLHguKfguIHguKPguK3guIfguYPguJnguKDguLLguJ7guKPguKfguKHguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguKrguJbguLLguJnguLDguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguJfguLXguYjguIjguLDguYPguIrguYnguYDguJvguYfguJnguJXguLHguKfguIHguKPguK3guIfguYPguJnguKDguLLguJ7guKPguKfguKHguJXguLLguKPguLLguIfguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguKXguLnguIHguITguYnguLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBjaGFuZ2UgdGl0bGUgZm9yIGEgZHVtbXkgY2hhbmdlIHdoaWNoIGlzIG5lZWRlZCB0byBlZGl0IGEgd29ya29yZGVyIHRlbXBsYXRlLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiK4Li34LmI4Lit4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4Liq4Liz4Lir4Lij4Lix4Lia4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LiI4Liz4Lil4Lit4LiH4LiL4Li24LmI4LiH4LiI4Liz4LmA4Lib4LmH4LiZ4LmA4Lie4Li34LmI4Lit4LmB4LiB4LmJ4LmE4LiC4LmB4Lih4LmI4LmB4Lia4Lia4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC5gOC4geC4k+C4keC5jOC4geC4suC4o+C4iOC4seC4lOC5gOC4o+C4teC4ouC4h+C5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC5g+C4meC4oOC4suC4nuC4o+C4p+C4oeC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyBQU0EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC5gOC4geC4k+C4keC5jOC4geC4suC4o+C4iOC4seC4lOC5gOC4o+C4teC4ouC4h+C5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC5g+C4meC4oOC4suC4nuC4o+C4p+C4oeC4leC4seC5i+C4p+C4iOC4seC4lOC4geC4suC4o+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9ICfguIHguLPguKvguJnguJTguYDguIHguJPguJHguYzguIHguLLguKPguIjguLHguJTguYDguKPguLXguKLguIfguYDguKPguLTguYjguKHguJXguYnguJnguYPguJnguKDguLLguJ7guKPguKfguKHguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguYDguIHguJPguJHguYzguIHguLLguKPguIjguLHguJTguYDguKPguLXguKLguIfguYDguKPguLTguYjguKHguJXguYnguJnguYPguJnguKDguLLguJ7guKPguKfguKHguJXguLLguKPguLLguIfguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC5gOC4geC4k+C4keC5jOC4geC4suC4o+C4iOC4seC4lOC5gOC4o+C4teC4ouC4h+C5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC4guC4reC4h+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C5g+C4meC4oOC4suC4nuC4o+C4p+C4oSBNeUNBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC5gOC4geC4k+C4keC5jOC4geC4suC4o+C4iOC4seC4lOC5gOC4o+C4teC4ouC4h+C5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC4guC4reC4h+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C5g+C4meC4oOC4suC4nuC4o+C4p+C4oSBNeUNoYW5nZXMgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LmA4LiB4LiT4LiR4LmM4LiB4Liy4Lij4LiI4Lix4LiU4LmA4Lij4Li14Lii4LiH4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4LiC4Lit4LiH4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LmD4LiZ4Lig4Liy4Lie4Lij4Lin4LihIE15V29ya29yZGVycyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC5gOC4geC4k+C4keC5jOC4geC4suC4o+C4iOC4seC4lOC5gOC4o+C4teC4ouC4h+C5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC4guC4reC4h+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C5g+C4meC4oOC4suC4nuC4o+C4p+C4oSBQSVInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguYDguIHguJPguJHguYzguIHguLLguKPguIjguLHguJTguYDguKPguLXguKLguIfguYDguKPguLTguYjguKHguJXguYnguJnguILguK3guIfguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguYPguJnguKDguLLguJ7guKPguKfguKHguJXguLLguKPguLLguIfguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguKXguLnguIHguITguYnguLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC5gOC4geC4k+C4keC5jOC4geC4suC4o+C4iOC4seC4lOC5gOC4o+C4teC4ouC4h+C5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC4guC4reC4h+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C5g+C4meC4oOC4suC4nuC4o+C4p+C4oeC4o+C4ueC4m+C5geC4muC4mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0gJ+C4geC4s+C4q+C4meC4lOC5gOC4geC4k+C4keC5jOC4geC4suC4o+C4iOC4seC4lOC5gOC4o+C4teC4ouC4h+C5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC5g+C4meC4oOC4suC4nuC4o+C4p+C4oSBNeUNBQiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPSAn4LiB4Liz4Lir4LiZ4LiU4LmA4LiB4LiT4LiR4LmM4LiB4Liy4Lij4LiI4Lix4LiU4LmA4Lij4Li14Lii4LiH4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4LmD4LiZ4Lig4Liy4Lie4Lij4Lin4LihIE15Q2hhbmdlcyAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguYDguIHguJPguJHguYzguIHguLLguKPguIjguLHguJTguYDguKPguLXguKLguIfguYDguKPguLTguYjguKHguJXguYnguJnguYPguJnguKDguLLguJ7guKPguKfguKEgTXlXb3Jrb3JkZXJzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0gJ+C4geC4s+C4q+C4meC4lOC5gOC4geC4k+C4keC5jOC4geC4suC4o+C4iOC4seC4lOC5gOC4o+C4teC4ouC4h+C5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC5g+C4meC4oOC4suC4nuC4o+C4p+C4oSBQSVIgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9ICfguIHguLPguKvguJnguJTguYDguIHguJPguJHguYzguIHguLLguKPguIjguLHguJTguYDguKPguLXguKLguIfguYDguKPguLTguYjguKHguJXguYnguJnguYPguJnguKDguLLguJ7guKPguKfguKHguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcgUFNBICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LmA4LiB4LiT4LiR4LmM4LiB4Liy4Lij4LiI4Lix4LiU4LmA4Lij4Li14Lii4LiH4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4LmD4LiZ4Lig4Liy4Lie4Lij4Lin4Lih4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LiV4Lix4Lin4LiB4Liy4Lij4LiI4Lix4LiU4LiB4Liy4LijJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0gJ+C4geC4s+C4q+C4meC4lOC5gOC4geC4k+C4keC5jOC4geC4suC4o+C4iOC4seC4lOC5gOC4o+C4teC4ouC4h+C5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC5g+C4meC4oOC4suC4nuC4o+C4p+C4oeC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC5gOC4geC4k+C4keC5jOC4geC4suC4o+C4iOC4seC4lOC5gOC4o+C4teC4ouC4h+C5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC5g+C4meC4oOC4suC4nuC4o+C4p+C4oeC4leC4suC4o+C4suC4h+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC5gOC4geC4k+C4keC5jOC4geC4suC4o+C4iOC4seC4lOC5gOC4o+C4teC4ouC4h+C5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC5g+C4meC4oOC4suC4nuC4o+C4p+C4oeC4leC4suC4o+C4suC4h+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4peC4ueC4geC4hOC5ieC4sic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3Lid9ID0gJ+C4geC4s+C4q+C4meC4lOC5gOC4geC4k+C4keC5jOC4geC4suC4o+C4iOC4seC4lOC5gOC4o+C4teC4ouC4h+C5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC5g+C4meC4oOC4suC4nuC4o+C4p+C4oeC4o+C4ueC4m+C5geC4muC4mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY2F0ZWdvcnkgb2YgYSBjaGFuZ2UuJ30gPSAn4LiB4Liz4Lir4LiZ4LiU4Lib4Lij4Liw4LmA4Lig4LiX4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4Liq4Liz4Lir4Lij4Lix4Lia4Lib4Lij4Liw4LmA4Lig4LiX4LiC4Lit4LiH4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBpbXBhY3Qgb2YgYSBjaGFuZ2UuJ30gPSAn4LiB4Liz4Lir4LiZ4LiU4Lib4Lij4Liw4LmA4Lig4LiX4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4Liq4Liz4Lir4Lij4Lix4Lia4Lic4Lil4LiB4Lij4Liw4LiX4Lia4LiC4Lit4LiH4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3IgY2hhbmdlIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguIrguJnguLTguJTguILguK3guIfguJ/guLTguKXguJTguYzguILguK3guIfguIrguYjguK3guIfguILguYnguK3guKHguLnguKUgQ29tcGFyZVZhbHVlIOC4quC4s+C4q+C4o+C4seC4muC5geC4reC4leC4l+C4o+C4tOC4muC4tOC4p+C4leC5jOC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4l+C4teC5iOC4iOC4sOC5g+C4iuC5ieC5g+C4mSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0IOC4hOC5iOC4suC4l+C4teC5iOC4luC4ueC4geC4leC5ieC4reC4h+C4hOC4t+C4reC4geC4suC4o+C5gOC4peC4t+C4reC4gSDguILguYnguK3guITguKfguLLguKHguYHguKXguLDguKfguLHguJnguJfguLXguYgg4LiW4LmJ4Liy4LmE4Lih4LmI4LmE4LiU4LmJ4LiB4Liz4Lir4LiZ4LiU4LiK4LiZ4Li04LiUIOC4n+C4tOC4peC4lOC5jOC4iOC4sOC5hOC4oeC5iOC4luC4ueC4geC5geC4quC4lOC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmaWVsZCB0eXBlIG9mIENvbXBhcmVWYWx1ZSBmaWVsZHMgZm9yIHdvcmtvcmRlciBhdHRyaWJ1dGVzIHVzZWQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gVmFsaWQgdmFsdWVzIGFyZSBTZWxlY3Rpb24sIFRleHQgYW5kIERhdGUuIElmIGEgdHlwZSBpcyBub3QgZGVmaW5lZCwgdGhlIGZpZWxkIHdpbGwgbm90IGJlIHNob3duLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiK4LiZ4Li04LiU4LiC4Lit4LiH4Lif4Li04Lil4LiU4LmM4LiC4Lit4LiH4LiK4LmI4Lit4LiH4LiC4LmJ4Lit4Lih4Li54LilIENvbXBhcmVWYWx1ZSDguKrguLPguKvguKPguLHguJrguYHguK3guJXguJfguKPguLTguJrguLTguKfguJXguYzguYPguJrguKrguLHguYjguIfguIfguLLguJnguJfguLXguYjguIjguLDguYPguIrguYnguYPguJkgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCDguITguYjguLLguJfguLXguYjguJbguLnguIHguJXguYnguK3guIfguITguLfguK3guIHguLLguKPguYDguKXguLfguK3guIEg4LiC4LmJ4Lit4LiE4Lin4Liy4Lih4LmB4Lil4Liw4Lin4Lix4LiZ4LiX4Li14LmIIOC4luC5ieC4suC5hOC4oeC5iOC5hOC4lOC5ieC4geC4s+C4q+C4meC4lOC4iuC4meC4tOC4lCDguJ/guLTguKXguJTguYzguIjguLDguYTguKHguYjguJbguLnguIHguYHguKrguJTguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgY2hhbmdlIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4hOC4uOC4k+C4peC4seC4geC4qeC4k+C4sOC4guC4reC4h+C4reC4reC4muC5gOC4iOC4hOC4l+C4teC5iOC4quC4suC4oeC4suC4o+C4luC5gOC4peC4t+C4reC4geC5hOC4lOC5ieC4quC4s+C4q+C4o+C4seC4muC4reC4reC4muC5gOC4iOC4hOC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C5g+C4mSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9iamVjdCBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHdvcmtvcmRlciBvYmplY3RzIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguITguLjguJPguKXguLHguIHguKnguJPguLDguILguK3guIfguK3guK3guJrguYDguIjguITguJfguLXguYjguKrguLLguKHguLLguKPguJbguYDguKXguLfguK3guIHguYTguJTguYnguKrguLPguKvguKPguLHguJrguK3guK3guJrguYDguIjguITguYPguJrguKrguLHguYjguIfguIfguLLguJnguYPguJkgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY2NvdW50ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguJXguLHguKfguJTguLPguYDguJnguLTguJnguIHguLLguKPguJfguLXguYjguKrguLLguKHguLLguKPguJbguYDguKXguLfguK3guIHguYTguJTguYnguKrguLPguKvguKPguLHguJrguYHguK3guJXguJfguKPguLTguJrguLTguKfguJXguYwgQWNjb3VudGVkVGltZSDguYPguJkgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguJXguLHguKfguJTguLPguYDguJnguLTguJnguIHguLLguKPguJfguLXguYjguKrguLLguKHguLLguKPguJbguYDguKXguLfguK3guIHguYTguJTguYnguKrguLPguKvguKPguLHguJrguYHguK3guJXguJfguKPguLTguJrguLTguKfguJXguYxBY3R1YWxFbmRUaW1lIOC5g+C4mSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiV4Lix4Lin4LiU4Liz4LmA4LiZ4Li04LiZ4LiB4Liy4Lij4LiX4Li14LmI4Liq4Liy4Lih4Liy4Lij4LiW4LmA4Lil4Li34Lit4LiB4LmE4LiU4LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmMIEFjdHVhbFN0YXJ0VGltZSDguYPguJkgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDYXRlZ29yeUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguJXguLHguKfguJTguLPguYDguJnguLTguJnguIHguLLguKPguJfguLXguYjguKrguLLguKHguLLguKPguJbguYDguKXguLfguK3guIHguYTguJTguYnguKrguLPguKvguKPguLHguJrguYHguK3guJXguJfguKPguLTguJrguLTguKfguJXguYwgQ2F0ZWdvcnlJRCAg4LmD4LiZIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlQnVpbGRlcklEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguJXguLHguKfguJTguLPguYDguJnguLTguJnguIHguLLguKPguJfguLXguYjguKrguLLguKHguLLguKPguJbguYDguKXguLfguK3guIHguYTguJTguYnguKrguLPguKvguKPguLHguJrguYHguK3guJXguJfguKPguLTguJrguLTguKfguJXguYwgQ2hhbmdlQnVpbGRlcklEIOC5g+C4mSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZU1hbmFnZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiV4Lix4Lin4LiU4Liz4LmA4LiZ4Li04LiZ4LiB4Liy4Lij4LiX4Li14LmI4Liq4Liy4Lih4Liy4Lij4LiW4LmA4Lil4Li34Lit4LiB4LmE4LiU4LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmMIENoYW5nZU1hbmFnZXJJRCDguYPguJkgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VTdGF0ZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguJXguLHguKfguJTguLPguYDguJnguLTguJnguIHguLLguKPguJfguLXguYjguKrguLLguKHguLLguKPguJbguYDguKXguLfguK3guIHguYTguJTguYnguKrguLPguKvguKPguLHguJrguYHguK3guJXguJfguKPguLTguJrguLTguKfguJXguYwgQ2hhbmdlU3RhdGVJRCDguYPguJkgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiV4Lix4Lin4LiU4Liz4LmA4LiZ4Li04LiZ4LiB4Liy4Lij4LiX4Li14LmI4Liq4Liy4Lih4Liy4Lij4LiW4LmA4Lil4Li34Lit4LiB4LmE4LiU4LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmMIENoYW5nZVRpdGxlIOC5g+C4mSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIER5bmFtaWNGaWVsZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiV4Lix4Lin4LiU4Liz4LmA4LiZ4Li04LiZ4LiB4Liy4Lij4LiX4Li14LmI4Liq4Liy4Lih4Liy4Lij4LiW4LmA4Lil4Li34Lit4LiB4LmE4LiU4LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmMIER5bmFtaWNGaWVsZCDguYPguJkgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBJbXBhY3RJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiV4Lix4Lin4LiU4Liz4LmA4LiZ4Li04LiZ4LiB4Liy4Lij4LiX4Li14LmI4Liq4Liy4Lih4Liy4Lij4LiW4LmA4Lil4Li34Lit4LiB4LmE4LiU4LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmMIEltcGFjdElEIOC5g+C4mSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFZmZvcnQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4leC4seC4p+C4lOC4s+C5gOC4meC4tOC4meC4geC4suC4o+C4l+C4teC5iOC4quC4suC4oeC4suC4o+C4luC5gOC4peC4t+C4reC4geC5hOC4lOC5ieC4quC4s+C4q+C4o+C4seC4muC5geC4reC4leC4l+C4o+C4tOC4muC4tOC4p+C4leC5jCBQbGFubmVkRWZmb3J0IOC5g+C4mSBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguJXguLHguKfguJTguLPguYDguJnguLTguJnguIHguLLguKPguJfguLXguYjguKrguLLguKHguLLguKPguJbguYDguKXguLfguK3guIHguYTguJTguYnguKrguLPguKvguKPguLHguJrguYHguK3guJXguJfguKPguLTguJrguLTguKfguJXguYwgUGxhbm5lZEVuZFRpbWUg4LmD4LiZIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiV4Lix4Lin4LiU4Liz4LmA4LiZ4Li04LiZ4LiB4Liy4Lij4LiX4Li14LmI4Liq4Liy4Lih4Liy4Lij4LiW4LmA4Lil4Li34Lit4LiB4LmE4LiU4LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmMIFBsYW5uZWRTdGFydFRpbWUg4LmD4LiZIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUHJpb3JpdHlJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiV4Lix4Lin4LiU4Liz4LmA4LiZ4Li04LiZ4LiB4Liy4Lij4LiX4Li14LmI4Liq4Liy4Lih4Liy4Lij4LiW4LmA4Lil4Li34Lit4LiB4LmE4LiU4LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmMIFByaW9yaXR5SUQg4LmD4LiZIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUmVxdWVzdGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiV4Lix4Lin4LiU4Liz4LmA4LiZ4Li04LiZ4LiB4Liy4Lij4LiX4Li14LmI4Liq4Liy4Lih4Liy4Lij4LiW4LmA4Lil4Li34Lit4LiB4LmE4LiU4LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmMIFJlcXVlc3RlZFRpbWUg4LmD4LiZIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyQWdlbnRJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiV4Lix4Lin4LiU4Liz4LmA4LiZ4Li04LiZ4LiB4Liy4Lij4LiX4Li14LmI4Liq4Liy4Lih4Liy4Lij4LiW4LmA4Lil4Li34Lit4LiB4LmE4LiU4LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmMIFdvcmtPcmRlckFnZW50SUQg4LmD4LiZIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyTnVtYmVyIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguJXguLHguKfguJTguLPguYDguJnguLTguJnguIHguLLguKPguJfguLXguYjguKrguLLguKHguLLguKPguJbguYDguKXguLfguK3guIHguYTguJTguYnguKrguLPguKvguKPguLHguJrguYHguK3guJXguJfguKPguLTguJrguLTguKfguJXguYwgV29ya09yZGVyTnVtYmVy4LmD4LiZIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyU3RhdGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiV4Lix4Lin4LiU4Liz4LmA4LiZ4Li04LiZ4LiB4Liy4Lij4LiX4Li14LmI4Liq4Liy4Lih4Liy4Lij4LiW4LmA4Lil4Li34Lit4LiB4LmE4LiU4LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmMIFdvcmtPcmRlclN0YXRlSUQg4LmD4LiZIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4leC4seC4p+C4lOC4s+C5gOC4meC4tOC4meC4geC4suC4o+C4l+C4teC5iOC4quC4suC4oeC4suC4o+C4luC5gOC4peC4t+C4reC4geC5hOC4lOC5ieC4quC4s+C4q+C4o+C4seC4muC5geC4reC4leC4l+C4o+C4tOC4muC4tOC4p+C4leC5jCBXb3JrT3JkZXJUaXRsZSDguYPguJkgQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUeXBlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4leC4seC4p+C4lOC4s+C5gOC4meC4tOC4meC4geC4suC4o+C4l+C4teC5iOC4quC4suC4oeC4suC4o+C4luC5gOC4peC4t+C4reC4geC5hOC4lOC5ieC4quC4s+C4q+C4o+C4seC4muC5geC4reC4leC4l+C4o+C4tOC4muC4tOC4p+C4leC5jCBXb3JrT3JkZXJUeXBlSUQg4LmD4LiZIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcGVyaW9kIChpbiB5ZWFycyksIGluIHdoaWNoIHN0YXJ0IGFuZCBlbmQgdGltZXMgY2FuIGJlIHNlbGVjdGVkLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4Lij4Liw4Lii4Liw4LmA4Lin4Lil4LiyICjguYPguJnguJvguLXguJfguLXguYjguJzguYjguLLguJnguKHguLIpIOC4i+C4tuC5iOC4h+C4p+C4seC4meC5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC5geC4peC4sOC4p+C4seC4meC4quC4tOC5ieC4meC4quC4uOC4lOC4quC4suC4oeC4suC4o+C4luC5gOC4peC4t+C4reC4geC5hOC4lOC5iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBhdHRyaWJ1dGVzIG9mIGEgd29ya29yZGVyIGluIHRoZSB0b29sdGlwIG9mIHRoZSB3b3Jrb3JkZXIgZ3JhcGggaW4gdGhlIGNoYW5nZSB6b29tLiBUbyBzaG93IHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcyBpbiB0aGUgdG9vbHRpcCwgdGhleSBtdXN0IGJlIHNwZWNpZmllZCBsaWtlIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUxLCBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMiwgZXRjLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiE4Li44LiT4Lil4Lix4LiB4Lip4LiT4Liw4LiC4Lit4LiH4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZ4LiX4Li14LmI4LiI4Liw4LmB4Liq4LiU4LiH4LmD4LiZ4LiE4Liz4LmB4LiZ4Liw4LiZ4Liz4LiC4Lit4LiH4LiB4Lij4Liy4Lif4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZ4LmD4LiZ4LiB4Liy4Lij4LiL4Li54Lih4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHIOC5gOC4nuC4t+C5iOC4reC5geC4quC4lOC4h+C4n+C4tOC4peC4lOC5jOC5geC4muC4muC5hOC4lOC4meC4suC4oeC4tOC4geC4guC4reC4h+C5g+C4muC4quC4seC5iOC4h+C4h+C4suC4meC5g+C4meC4hOC4s+C5geC4meC4sOC4meC4s+C4l+C4teC5iOC4nuC4p+C4geC5gOC4guC4suC4iOC4sOC4leC5ieC4reC4h+C4o+C4sOC4muC4uOC5gOC4iuC5iOC4mSBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMSwgRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTIg4Liv4Lil4LivJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBQU0Egb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguITguK3guKXguLHguKHguJnguYzguJfguLXguYjguIjguLDguYHguKrguJTguIfguYPguJnguKDguLLguJ7guKPguKfguKHguILguK3guIfguKDguLLguJ7guKPguKfguKHguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcgUFNBIOC4leC4seC4p+C5gOC4peC4t+C4reC4geC4meC4teC5ieC4iOC4sOC5hOC4oeC5iOC4oeC4teC4nOC4peC4leC5iOC4reC4leC4s+C5geC4q+C4meC5iOC4h+C4guC4reC4h+C4hOC4reC4peC4seC4oeC4meC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgU2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguITguK3guKXguLHguKHguJnguYzguJfguLXguYjguIjguLDguYHguKrguJTguIfguYPguJnguKDguLLguJ7guKPguKfguKHguJXguLLguKPguLLguIfguYDguKfguKXguLLguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcg4LiV4Lix4Lin4LmA4Lil4Li34Lit4LiB4LiZ4Li14LmJ4LiI4Liw4LmE4Lih4LmI4Lih4Li14Lic4Lil4LiV4LmI4Lit4LiV4Liz4LmB4Lir4LiZ4LmI4LiH4LiC4Lit4LiH4LiE4Lit4Lil4Lix4Lih4LiZ4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiE4Lit4Lil4Lix4Lih4LiZ4LmM4LiX4Li14LmI4LiI4Liw4LmB4Liq4LiU4LiH4LmD4LiZ4Lig4Liy4Lie4Lij4Lin4LihIE15Q0FCICDguJXguLHguKfguYDguKXguLfguK3guIHguJnguLXguYnguIjguLDguYTguKHguYjguKHguLXguJzguKXguJXguYjguK3guJXguLPguYHguKvguJnguYjguIfguILguK3guIfguITguK3guKXguLHguKHguJnguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgTXlDaGFuZ2VzIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiE4Lit4Lil4Lix4Lih4LiZ4LmM4LiX4Li14LmI4LiI4Liw4LmB4Liq4LiU4LiH4LmD4LiZ4Lig4Liy4Lie4Lij4Lin4LihIE15Q2hhbmdlcyAg4LiV4Lix4Lin4LmA4Lil4Li34Lit4LiB4LiZ4Li14LmJ4LiI4Liw4LmE4Lih4LmI4Lih4Li14Lic4Lil4LiV4LmI4Lit4LiV4Liz4LmB4Lir4LiZ4LmI4LiH4LiC4Lit4LiH4LiE4Lit4Lil4Lix4Lih4LiZ4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4hOC4reC4peC4seC4oeC4meC5jOC4l+C4teC5iOC4iOC4sOC5geC4quC4lOC4h+C5g+C4meC4oOC4suC4nuC4o+C4p+C4oSBNeVdvcmtvcmRlcnMgIOC4leC4seC4p+C5gOC4peC4t+C4reC4geC4meC4teC5ieC4iOC4sOC5hOC4oeC5iOC4oeC4teC4nOC4peC4leC5iOC4reC4leC4s+C5geC4q+C4meC5iOC4h+C4guC4reC4h+C4hOC4reC4peC4seC4oeC4meC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBQSVIgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguITguK3guKXguLHguKHguJnguYzguJfguLXguYjguIjguLDguYHguKrguJTguIfguYPguJnguKDguLLguJ7guKPguKfguKEgUElSIOC4leC4seC4p+C5gOC4peC4t+C4reC4geC4meC4teC5ieC4iOC4sOC5hOC4oeC5iOC4oeC4teC4nOC4peC4leC5iOC4reC4leC4s+C5geC4q+C4meC5iOC4h+C4guC4reC4h+C4hOC4reC4peC4seC4oeC4meC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4hOC4reC4peC4seC4oeC4meC5jOC4l+C4teC5iOC4iOC4sOC5geC4quC4lOC4h+C5g+C4meC4oOC4suC4nuC4o+C4p+C4oeC4leC4seC4p+C4iOC4seC4lOC4geC4suC4o+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyDguJXguLHguKfguYDguKXguLfguK3guIHguJnguLXguYnguIjguLDguYTguKHguYjguKHguLXguJzguKXguJXguYjguK3guJXguLPguYHguKvguJnguYjguIfguILguK3guIfguITguK3guKXguLHguKHguJnguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiE4Lit4Lil4Lix4Lih4LiZ4LmM4LiX4Li14LmI4LiI4Liw4LmB4Liq4LiU4LiH4LmD4LiZ4Lig4Liy4Lie4Lij4Lin4Lih4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHIOC4leC4seC4p+C5gOC4peC4t+C4reC4geC4meC4teC5ieC4iOC4sOC5hOC4oeC5iOC4oeC4teC4nOC4peC4leC5iOC4reC4leC4s+C5geC4q+C4meC5iOC4h+C4guC4reC4h+C4hOC4reC4peC4seC4oeC4meC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiE4Lit4Lil4Lix4Lih4LiZ4LmM4LiX4Li14LmI4LiI4Liw4LmB4Liq4LiU4LiH4LmD4LiZ4LiE4LmJ4LiZ4Lir4Liy4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHIOC4leC4seC4p+C5gOC4peC4t+C4reC4geC4meC4teC5ieC4iOC4sOC5hOC4oeC5iOC4oeC4teC4nOC4peC4leC5iOC4reC4leC4s+C5geC4q+C4meC5iOC4h+C4guC4reC4h+C4hOC4reC4peC4seC4oeC4meC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguITguK3guKXguLHguKHguJnguYzguJfguLXguYjguIjguLDguYHguKrguJTguIfguYPguJnguKDguLLguJ7guKPguKfguKHguJXguLLguKPguLLguIfguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguKXguLnguIHguITguYnguLIg4LiV4Lix4Lin4LmA4Lil4Li34Lit4LiB4LiZ4Li14LmJ4LiI4Liw4LmE4Lih4LmI4Lih4Li14Lic4Lil4LiV4LmI4Lit4LiV4Liz4LmB4Lir4LiZ4LmI4LiH4LiC4Lit4LiH4LiE4Lit4Lil4Lix4Lih4LiZ4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiE4Lit4Lil4Lix4Lih4LiZ4LmM4LiX4Li14LmI4LiI4Liw4LmB4Liq4LiU4LiH4LmD4LiZ4Lig4Liy4Lie4Lij4Lin4Lih4Lij4Li54LmB4Lib4Lia4LiaIOC4leC4seC4p+C5gOC4peC4t+C4reC4geC4meC4teC5ieC4iOC4sOC5hOC4oeC5iOC4oeC4teC4nOC4peC4leC5iOC4reC4leC4s+C5geC4q+C4meC5iOC4h+C4guC4reC4h+C4hOC4reC4peC4seC4oeC4meC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaWduYWxzIGZvciBlYWNoIElUU01DaGFuZ2Ugc3RhdGUuJ30gPSAn4LiB4Liz4Lir4LiZ4LiU4Liq4Lix4LiN4LiN4Liy4LiT4Liq4Liz4Lir4Lij4Lix4Lia4LmB4LiV4LmI4Lil4Liw4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiC4Lit4LiHSVRTTUNoYW5nZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0ZW1wbGF0ZSB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4m+C4o+C4sOC5gOC4oOC4l+C5geC4oeC5iOC5geC4muC4muC4l+C4teC5iOC4iOC4sOC4meC4s+C4oeC4suC5g+C4iuC5ieC5gOC4m+C5h+C4meC4leC4seC4p+C4geC4o+C4reC4h+C5g+C4meC4oOC4suC4nuC4o+C4p+C4oeC5geC4oeC5iOC5geC4muC4mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4quC4luC4suC4meC4sOC4guC4reC4h+C5g+C4muC4quC4seC5iOC4h+C4h+C4suC4meC4l+C4teC5iOC4iOC4sOC4meC4s+C4oeC4suC5g+C4iuC5ieC5gOC4m+C5h+C4meC4leC4seC4p+C4geC4o+C4reC4h+C5g+C4meC4oOC4suC4nuC4o+C4p+C4oSBNeVdvcmtvcmRlcnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguKrguJbguLLguJnguLDguILguK3guIfguYPguJrguKrguLHguYjguIfguIfguLLguJnguJfguLXguYjguIjguLDguJnguLPguKHguLLguYPguIrguYnguYDguJvguYfguJnguJXguLHguKfguIHguKPguK3guIfguYPguJnguKDguLLguJ7guKPguKfguKFQSVInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHR5cGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNob3cgdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4m+C4o+C4sOC5gOC4oOC4l+C4guC4reC4h+C5g+C4muC4quC4seC5iOC4h+C4h+C4suC4meC4l+C4teC5iOC4iOC4sOC4meC4s+C4oeC4suC5geC4quC4lOC4h+C5g+C4meC4oOC4suC4nuC4o+C4p+C4oVBJUic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHdoZXRoZXIgbm90aWZpY2F0aW9ucyBzaG91bGQgYmUgc2VudC4nfSA9ICfguIHguLPguKvguJnguJTguKfguYjguLLguIHguLLguKPguYHguIjguYnguIfguYDguJXguLfguK3guJnguITguKfguKPguJbguLnguIHguKrguYjguIfguK3guK3guIHguYTguJvguKvguKPguLfguK3guYTguKHguYgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMgb2YgYSBjaGFuZ2UgaGlzdG9yeSBlbnRyeS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiBhbiBhZ2VudCBjYW4gZXhjaGFuZ2UgdGhlIFgtYXhpcyBvZiBhIHN0YXQgaWYgaGUgZ2VuZXJhdGVzIG9uZS4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4luC5ieC4suC4q+C4suC4geC5gOC4reC5gOC4ouC5iOC4meC4leC5jOC4quC4suC4oeC4suC4o+C4luC5geC4peC4geC5gOC4m+C4peC4teC5iOC4ouC4meC5geC4geC4mSBYIOC4guC4reC4h+C4quC4luC4tOC4leC4tOC4luC5ieC4suC5gOC4guC4suC4quC4o+C5ieC4suC4h+C5geC4hOC5iOC4q+C4meC4tuC5iOC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIGRvbmUgZm9yIGNvbmZpZyBpdGVtIGNsYXNzZXMuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguKvguLLguIHguYLguKHguJTguLnguKXguKrguJbguLTguJXguLTguJfguLXguYjguJ7guJrguJrguYjguK3guKLguK3guLLguIjguKrguKPguYnguLLguIfguKrguJbguLTguJXguLTguYDguIHguLXguYjguKLguKfguIHguLHguJrguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguKrguLPguKvguKPguLHguJrguITguKXguLLguKrguKPguLLguKLguIHguLLguKPguIHguLLguKPguJXguLHguYnguIfguITguYjguLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyByZWdhcmRpbmcgY2hhbmdlIHN0YXRlIHVwZGF0ZXMgd2l0aGluIGEgdGltZXBlcmlvZC4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4luC5ieC4suC4q+C4suC4geC5guC4oeC4lOC4ueC4peC4quC4luC4tOC4leC4tOC4l+C4teC5iOC4nuC4muC4muC5iOC4reC4ouC4reC4suC4iOC4quC4o+C5ieC4suC4h+C4quC4luC4tOC4leC4tOC5gOC4geC4teC5iOC4ouC4p+C4geC4seC4muC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C5g+C4meC4geC4suC4o+C4reC4seC4nuC5gOC4lOC4leC4quC4luC4suC4meC4sOC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4oOC4suC4ouC5g+C4meC4o+C4sOC4ouC4sOC5gOC4p+C4peC4suC4l+C4teC5iOC4geC4s+C4q+C4meC4lCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyB0aGUgcmVsYXRpb24gYmV0d2VlbiBjaGFuZ2VzIGFuZCBpbmNpZGVudCB0aWNrZXRzLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiW4LmJ4Liy4Lir4Liy4LiB4LmC4Lih4LiU4Li54Lil4Liq4LiW4Li04LiV4Li04LiX4Li14LmI4Lie4Lia4Lia4LmI4Lit4Lii4Lit4Liy4LiI4Liq4Lij4LmJ4Liy4LiH4Liq4LiW4Li04LiV4Li04LmA4LiB4Li14LmI4Lii4Lin4LiB4Lix4Lia4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LmD4LiZ4LiE4Lin4Liy4Lih4Liq4Lix4Lih4Lie4Lix4LiZ4LiY4LmM4Lij4Liw4Lir4Lin4LmI4Liy4LiH4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LmB4Lil4Liw4LiV4Lix4LmL4Lin4LiX4Li14LmI4LmA4LiB4Li04LiU4LiC4Li24LmJ4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguKvguLLguIHguYLguKHguJTguLnguKXguKrguJbguLTguJXguLTguJfguLXguYjguJ7guJrguJrguYjguK3guKLguK3guLLguIjguKrguKPguYnguLLguIfguKrguJbguLTguJXguLTguYDguIHguLXguYjguKLguKfguIHguLHguJrguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgdGhlIG51bWJlciBvZiBSZmMgdGlja2V0cyBhIHJlcXVlc3RlciBjcmVhdGVkLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4Lir4Liy4LiB4LmC4Lih4LiU4Li54Lil4Liq4LiW4Li04LiV4Li04LiX4Li14LmI4Lie4Lia4Lia4LmI4Lit4Lii4Lit4Liy4LiI4Liq4Lij4LmJ4Liy4LiH4Liq4LiW4Li04LiV4Li04LmA4LiB4Li14LmI4Lii4Lin4LiB4Lix4Lia4LiI4Liz4LiZ4Lin4LiZ4LiC4Lit4LiH4LiV4Lix4LmL4LinIFJGQyDguJzguLnguYnguKPguYnguK3guIfguILguK3guJfguLXguYjguKrguKPguYnguLLguIfguILguLbguYnguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgKGZvciBjaGFuZ2VzIGFuZCB3b3Jrb3JkZXJzKSBzaG93biBpbiB0aGUgY2hhbmdlIHByaW50IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJ+C4n+C4tOC4peC4lOC5jOC5geC4muC4muC5hOC4lOC4meC4suC4oeC4tOC4gSAo4Liq4Liz4Lir4Lij4Lix4Lia4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LmB4Lil4Liw4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZKSDguJfguLXguYjguYHguKrguJTguIfguYPguJnguKvguJnguYnguLLguIjguK3guIHguLLguKPguJ7guLTguKHguJ7guYzguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguILguK3guIfguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwg4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiX4Li14LmI4LmA4Lib4LmH4LiZ4LmE4Lib4LmE4LiU4LmJOiAwID3guJvguLTguJTguYPguIrguYnguIfguLLguJkgMSA9IOC5gOC4m+C4tOC4lOC5g+C4iuC5ieC4h+C4suC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ+C4n+C4tOC4peC4lOC5jOC5geC4muC4muC5hOC4lOC4meC4suC4oeC4tOC4geC4l+C4teC5iOC5geC4quC4lOC4h+C5g+C4meC4q+C4meC5ieC4suC4iOC4reC4geC4suC4o+C5gOC4nuC4tOC5iOC4oeC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4guC4reC4h+C4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCDguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguJfguLXguYjguYDguJvguYfguJnguYTguJvguYTguJTguYk6IDAgPeC4m+C4tOC4lOC5g+C4iuC5ieC4h+C4suC4mSAxID0g4LmA4Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZIDIgPSDguYDguJvguLTguJTguYPguIrguYnguIfguLLguJnguYHguKXguLDguIjguLPguYDguJvguYfguJnguJXguYnguK3guIfguYPguIrguYknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAn4Lif4Li04Lil4LiU4LmM4LmB4Lia4Lia4LmE4LiU4LiZ4Liy4Lih4Li04LiB4LiX4Li14LmI4LmB4Liq4LiU4LiH4LmD4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4LiB4Liy4Lij4LmB4LiB4LmJ4LmE4LiC4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LiC4Lit4LiH4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMIOC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4l+C4teC5iOC5gOC4m+C5h+C4meC5hOC4m+C5hOC4lOC5iTogMCA94Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZIDEgPSDguYDguJvguLTguJTguYPguIrguYnguIfguLLguJkgMiA9IOC5gOC4m+C4tOC4lOC5g+C4iuC5ieC4h+C4suC4meC5geC4peC4sOC4iOC4s+C5gOC4m+C5h+C4meC4leC5ieC4reC4h+C5g+C4iuC5iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICfguJ/guLTguKXguJTguYzguYHguJrguJrguYTguJTguJnguLLguKHguLTguIHguJfguLXguYjguYHguKrguJTguIfguYPguJnguKvguJnguYnguLLguIjguK3guIHguLLguKPguITguYnguJnguKvguLLguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguILguK3guIfguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwg4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiX4Li14LmI4LmA4Lib4LmH4LiZ4LmE4Lib4LmE4LiU4LmJOiAwID3guJvguLTguJTguYPguIrguYnguIfguLLguJkgMSA9IOC5gOC4m+C4tOC4lOC5g+C4iuC5ieC4h+C4suC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHpvb20gc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAn4Lif4Li04Lil4LiU4LmM4LmB4Lia4Lia4LmE4LiU4LiZ4Liy4Lih4Li04LiB4LiX4Li14LmI4LmB4Liq4LiU4LiH4LmD4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4LiB4Liy4Lij4LiL4Li54Lih4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LiC4Lit4LiH4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMIOC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4l+C4teC5iOC5gOC4m+C5h+C4meC5hOC4m+C5hOC4lOC5iTogMCA94Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZIDEgPSDguYDguJvguLTguJTguYPguIrguYnguIfguLLguJkgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAn4Lif4Li04Lil4LiU4LmM4LmB4Lia4Lia4LmE4LiU4LiZ4Liy4Lih4Li04LiB4LiX4Li14LmI4LmB4Liq4LiU4LiH4LmD4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4LiB4Liy4Lij4LmA4Lie4Li04LmI4Lih4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZ4LiC4Lit4LiH4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMIOC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4l+C4teC5iOC5gOC4m+C5h+C4meC5hOC4m+C5hOC4lOC5iTogMCA94Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZIDEgPSDguYDguJvguLTguJTguYPguIrguYnguIfguLLguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBlZGl0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAn4Lif4Li04Lil4LiU4LmM4LmB4Lia4Lia4LmE4LiU4LiZ4Liy4Lih4Li04LiB4LiX4Li14LmI4LmB4Liq4LiU4LiH4LmD4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4LiB4Liy4Lij4LmB4LiB4LmJ4LmE4LiC4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZ4LiC4Lit4LiH4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMIOC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4l+C4teC5iOC5gOC4m+C5h+C4meC5hOC4m+C5hOC4lOC5iTogMCA94Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZIDEgPSDguYDguJvguLTguJTguYPguIrguYnguIfguLLguJkgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgcmVwb3J0IHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAn4Lif4Li04Lil4LiU4LmM4LmB4Lia4Lia4LmE4LiU4LiZ4Liy4Lih4Li04LiB4LiX4Li14LmI4LmB4Liq4LiU4LiH4LmD4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4Lij4Liy4Lii4LiH4Liy4LiZ4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZ4LiC4Lit4LiH4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMIOC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4l+C4teC5iOC5gOC4m+C5h+C4meC5hOC4m+C5hOC4lOC5iTogMCA94Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZIDEgPSDguYDguJvguLTguJTguYPguIrguYnguIfguLLguJkgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICfguJ/guLTguKXguJTguYzguYHguJrguJrguYTguJTguJnguLLguKHguLTguIHguJfguLXguYjguYHguKrguJTguIfguYPguJnguKvguJnguYnguLLguIjguK3guIHguLLguKPguIvguLnguKHguYPguJrguKrguLHguYjguIfguIfguLLguJnguILguK3guIfguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwg4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiX4Li14LmI4LmA4Lib4LmH4LiZ4LmE4Lib4LmE4LiU4LmJOiAwID3guJvguLTguJTguYPguIrguYnguIfguLLguJkgMSA9IOC5gOC4m+C4tOC4lOC5g+C4iuC5ieC4h+C4suC4mSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pY0ZpZWxkIGV2ZW50IG1vZHVsZSB0byBoYW5kbGUgdGhlIHVwZGF0ZSBvZiBjb25kaXRpb25zIGlmIGR5bmFtaWMgZmllbGRzIGFyZSBhZGRlZCwgdXBkYXRlZCBvciBkZWxldGVkLid9ID0KICAgICAgICAn4LmC4Lih4LiU4Li54Lil4LiI4Lix4LiU4LiB4Li04LiI4LiB4Lij4Lij4LihIER5bmFtaWNGaWVsZCDguYDguJ7guLfguYjguK3guIjguLHguJTguIHguLLguKPguIHguLHguJrguIHguLLguKPguK3guLHguJ7guYDguJTguJXguYDguIfguLfguYjguK3guJnguYTguILguJbguYnguLLguJ/guLTguKXguJTguYzguYHguJrguJrguYTguJTguJnguLLguKHguLTguIHguJfguLXguYjguKHguLXguIHguLLguKPguYDguJ7guLTguYjguKEg4LiB4Liy4Lij4Lib4Lij4Lix4Lia4Lib4Lij4Li44LiH4Lir4Lij4Li34Lit4Lil4LiaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcndhcmQgc2NoZWR1bGUgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb3ZlciBhcHByb3ZlZCBjaGFuZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDQUIgVGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ29uZGl0aW9uIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlciBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgUElSIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBub3RpZmljYXRpb24gcnVsZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VzJ30gPSAnSVRTTSBDaGFuZ2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlDQUIgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlDaGFuZ2VzIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15V29ya29yZGVycyBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBEZWxldGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDQUIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDb250ZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgY2xlYW5zIHVwIGNvbmRpdGlvbnMuJ30gPSAn4LmC4Lih4LiU4Li54Lil4LmA4Lir4LiV4Li44LiB4Liy4Lij4LiT4LmMIElUU00g4LiX4Li14LmI4LiI4Liw4Lil4Lia4LmA4LiH4Li34LmI4Lit4LiZ4LmE4LiCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgZGVsZXRlcyB0aGUgY2FjaGUgZm9yIGEgdG9vbGJhci4nfSA9ICfguYLguKHguJTguLnguKXguYDguKvguJXguLjguIHguLLguKPguJPguYwgSVRTTSDguJfguLXguYjguIjguLDguKXguJrguIHguLLguKPguYHguITguIrguKrguLPguKvguKPguLHguJrguYHguJbguJrguYDguITguKPguLfguYjguK3guIfguKHguLfguK0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgbWF0Y2hlcyBjb25kaXRpb25zIGFuZCBleGVjdXRlcyBhY3Rpb25zLid9ID0KICAgICAgICAn4LmC4Lih4LiU4Li54Lil4LmA4Lir4LiV4Li44LiB4Liy4Lij4LiT4LmMIElUU00g4LiX4Li14LmI4LiI4Lix4Lia4LiE4Li54LmI4LmA4LiH4Li34LmI4Lit4LiZ4LmE4LiC4LmB4Lil4Liw4LiU4Liz4LmA4LiZ4Li04LiZ4LiB4Liy4Lij4LiB4Liy4Lij4LiB4Lij4Liw4LiX4LizJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgc2VuZHMgbm90aWZpY2F0aW9ucy4nfSA9ICfguYLguKHguJTguLnguKXguYDguKvguJXguLjguIHguLLguKPguJPguYwgSVRTTSDguJfguLXguYjguKrguYjguIfguIHguLLguKPguYHguIjguYnguIfguYDguJXguLfguK3guJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNoYW5nZXMuJ30gPSAn4LmC4Lih4LiU4Li54Lil4LmA4Lir4LiV4Li44LiB4Liy4Lij4LiT4LmMIElUU00g4LiX4Li14LmI4Lit4Lix4Lib4LmA4LiU4LiV4Lib4Lij4Liw4Lin4Lix4LiV4Li04LiC4Lit4LiH4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiBjb25kaXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2Ygd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdG8gcmVjYWxjdWxhdGUgdGhlIHdvcmtvcmRlciBudW1iZXJzLid9ID0gJ+C5guC4oeC4lOC4ueC4peC5gOC4q+C4leC4uOC4geC4suC4o+C4k+C5jCBJVFNNIOC4l+C4teC5iOC4hOC4s+C4meC4p+C4k+C4iOC4s+C4meC4p+C4meC5g+C4muC4quC4seC5iOC4h+C4h+C4suC4meC5g+C4q+C4oeC5iCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byBzZXQgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzIG9mIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICfguYLguKHguJTguLnguKXguYDguKvguJXguLjguIHguLLguKPguJPguYwgSVRTTSDguYDguJ7guLfguYjguK3guJXguLHguYnguIfguITguYjguLLguYDguKfguKXguLLguYDguKPguLTguYjguKHguJXguYnguJnguYHguKXguLDguYDguKfguKXguLLguKrguLTguYnguJnguKrguLjguJTguJfguLXguYjguYDguIHguLTguJTguILguLbguYnguJnguIjguKPguLTguIfguILguK3guIfguYPguJrguKrguLHguYjguIfguIfguLLguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTUNoYW5nZSd9ID0gJ0lUU01DaGFuZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTVdvcmtPcmRlcid9ID0gJ+C5g+C4muC4quC4seC5iOC4h+C4h+C4suC4meC4guC4reC4h0lUU00nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZnJlcXVlbmN5IGlzIFwncmVndWxhcmx5XCcsIHlvdSBjYW4gY29uZmlndXJlIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCAoZXZlcnkgWCBob3VycykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaW5rIGFub3RoZXIgb2JqZWN0IHRvIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xvZ2ZpbGUgZm9yIHRoZSBJVFNNIGNoYW5nZSBjb3VudGVyLiBUaGlzIGZpbGUgaXMgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIGNoYW5nZSBudW1iZXJzLid9ID0KICAgICAgICAnbG9nZmlsZSDguKrguLPguKvguKPguLHguJrguJXguLHguKfguJnguLHguJrguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcgSVRTTSDguYTguJ/guKXguYzguJnguLXguYnguIjguLDguYPguIrguYnguYPguJnguIHguLLguKPguKrguKPguYnguLLguIfguKvguKHguLLguKLguYDguKXguILguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIENBQiBtZW1iZXJzIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIGFnZW50cywgdXNlZCBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayBpZiBXb3JrT3JkZXJBZGQgb3IgV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlIHNob3VsZCBiZSBwZXJtaXR0ZWQuJ30gPQogICAgICAgICfguYLguKHguJTguLnguKXguYDguJ7guLfguYjguK3guJXguKPguKfguIjguKrguK3guJrguKfguYjguLIgV29ya09yZGVyQWRkIOC4q+C4o+C4t+C4rSBXb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUg4LiE4Lin4Lij4LmE4LiU4LmJ4Lij4Lix4Lia4LiB4Liy4Lij4Lit4LiZ4Li44LiN4Liy4LiVJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgQ0FCIG1lbWJlcnMuJ30gPSAn4LmC4Lih4LiU4Li54Lil4LmD4LiZ4LiB4Liy4Lij4LiV4Lij4Lin4LiI4Liq4Lit4Lia4Liq4Lih4Liy4LiK4Li04LiBIENBQic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGFnZW50Lid9ID0gJ+C5guC4oeC4lOC4ueC4peC5g+C4meC4geC4suC4o+C4leC4o+C4p+C4iOC4quC4reC4muC5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGNoYW5nZSBidWlsZGVyLid9ID0gJ+C5guC4oeC4lOC4ueC4peC5g+C4meC4geC4suC4o+C4leC4o+C4p+C4iOC4quC4reC4muC4nOC4ueC5ieC4quC4o+C5ieC4suC4h0NoYW5nZSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgbWFuYWdlci4nfSA9ICfguYLguKHguJTguLnguKXguIHguLLguKPguJXguKPguKfguIjguKrguK3guJrguJzguLnguYnguIjguLHguJTguIHguLLguKNDaGFuZ2UgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB0aGUgd29ya29yZGVyIGFnZW50Lid9ID0gJ+C5guC4oeC4lOC4ueC4peC5g+C4meC4geC4suC4o+C4leC4o+C4p+C4iOC4quC4reC4muC5gOC4reC5gOC4ouC5iOC4meC4leC5jOC5g+C4muC4quC4seC5iOC4h+C4h+C4suC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgd2hldGhlciBubyB3b3Jrb3JkZXIgYWdlbnQgaXMgc2V0Lid9ID0gJ+C5guC4oeC4lOC4ueC4peC5g+C4meC4geC4suC4o+C4leC4o+C4p+C4iOC4quC4reC4muC4p+C5iOC4suC5gOC4i+C4leC5g+C4muC4quC4seC5iOC4h+C4h+C4suC4meC4q+C4o+C4t+C4reC5hOC4oeC5iCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgd2hldGhlciB0aGUgYWdlbnQgaXMgY29udGFpbmVkIGluIHRoZSBjb25maWd1cmVkIGxpc3QuJ30gPQogICAgICAgICfguYLguKHguJTguLnguKXguYPguJnguIHguLLguKPguJXguKPguKfguIjguKrguK3guJrguKfguYjguLLguYDguK3guYDguKLguYjguJnguJXguYzguJrguKPguKPguIjguLjguK3guKLguLnguYjguYPguJnguKPguLLguKLguIHguLLguKPguILguK3guIfguIHguLLguKPguIHguLPguKvguJnguJTguITguYjguLLguKvguKPguLfguK3guYTguKHguYgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYSBsaW5rIHRvIGNyZWF0ZSBhIGNoYW5nZSBmcm9tIHRoaXMgdGlja2V0LiBUaGUgdGlja2V0IHdpbGwgYmUgYXV0b21hdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgbmV3IGNoYW5nZS4nfSA9CiAgICAgICAgJ+C5guC4oeC4lOC4ueC4peC5g+C4meC4geC4suC4o+C5geC4quC4lOC4h+C4peC4tOC4h+C4hOC5jOC5gOC4nuC4t+C5iOC4reC4quC4o+C5ieC4suC4h+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4iOC4suC4geC4leC4seC5i+C4p+C4meC4teC5iSDguJXguLHguYvguKfguJnguLXguYnguIjguLDguKXguLTguIfguITguYzguIHguLHguJrguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguYPguKvguKHguYjguYLguJTguKLguK3guLHguJXguYLguJnguKHguLHguJXguLQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBUaW1lIFNsb3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgYWxsIHdvcmtvcmRlcnMgaW4gdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IChmcm9tIHRlbXBsYXRlKSd9ID0gJ+C5g+C4q+C4oeC5iCAo4LiI4Liy4LiBIOC5geC4oeC5iOC5geC4muC4miknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSB1c2VycyBvZiB0aGVzZSBncm91cHMgaGF2ZSB0aGUgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRpY2tldCB0eXBlcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiIGlmIHRoZSBmZWF0dXJlICJUaWNrZXQ6OkFjbDo6TW9kdWxlIyMjMjAwLVRpY2tldDo6QWNsOjpNb2R1bGUiIGlzIGVuYWJsZWQuJ30gPQogICAgICAgICfguYDguInguJ7guLLguLDguJzguLnguYnguYPguIrguYnguILguK3guIfguIHguKXguLjguYjguKHguYDguKvguKXguYjguLLguJnguLXguYnguYDguJfguYjguLLguJnguLHguYnguJnguJfguLXguYjguYTguJTguYnguKPguLHguJrguK3guJnguLjguI3guLLguJXguYPguKvguYnguYPguIrguYnguKPguLnguJvguYHguJrguJrguJXguLHguYvguKfguJXguLLguKHguJfguLXguYjguIHguLPguKvguJnguJTguYPguJkgIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIg4LiW4LmJ4Liy4LiE4Li44LiT4Lil4Lix4LiB4Lip4LiT4Liw4LmB4Lia4Lia4LiU4Lix4LiH4LiB4Lil4LmI4Liy4LinICJUaWtldDo6QWNsOjpNb2R1bCMjIzIwMC1UaWtldDo6QWNsOjpNb2R1bCIg4LmA4Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG92ZXIgYWxsIENoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BJUid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KSd9ID0gJ1BJUiAo4LiE4Lin4Liy4Lih4LiE4Li04LiU4LmA4Lir4LmH4LiZ4Lir4Lil4Lix4LiH4LiB4Liy4Lij4LiU4Liz4LmA4LiZ4Li04LiZ4LiB4Liy4LijKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQU0EnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIFVzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFzayBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4Lie4Liy4Lij4Liy4Lih4Li04LmA4LiV4Lit4Lij4LmM4Liq4Liz4Lir4Lij4Lix4Lia4Lit4Lit4Lia4LmA4LiI4LiEIFVzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFzayDguYPguJnguKHguLjguKHguKHguK3guIfguILguK3guIfguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguILguK3guIfguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY2hhbmdlcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICfguJ7guLLguKPguLLguKHguLTguYDguJXguK3guKPguYzguKrguLPguKvguKPguLHguJrguYHguJXguYjguKXguLDguKvguJnguYnguLIo4LiL4Li24LmI4LiH4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LiI4Liw4LmB4Liq4LiU4LiHKSDguILguK3guIfguKDguLLguJ7guKPguKfguKHguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguILguJnguLLguJTguYDguKXguYfguIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJlc2VudHMgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNob3cgdGhlIGludm9sdmVkIHBlcnNvbnMgaW4gYSBjaGFuZ2UsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBjaGFuZ2UgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C5geC4quC4lOC4h+C4geC4suC4o+C5gOC4iuC4t+C5iOC4reC4oeC5guC4ouC4h+C5g+C4meC5gOC4oeC4meC4ueC4l+C4teC5iOC4iOC4sOC5geC4quC4lOC4h+C5g+C4q+C5ieC4hOC4meC4l+C4teC5iOC5gOC4geC4teC5iOC4ouC4p+C4guC5ieC4reC4h+C5g+C4meC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C5g+C4meC4oeC4uOC4oeC4oeC4reC4h+C4geC4suC4o+C4i+C4ueC4oeC4guC4reC4h+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4lOC4seC4h+C4geC4peC5iOC4suC4p+C4guC4reC4h+C4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4quC5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSAoUFNBKSBvZiBjaGFuZ2VzLiBPdmVydmlldyBvZiBhcHByb3ZlZCBjaGFuZ2VzIGFuZCB0aGVpciBzZXJ2aWNlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIGluIG9yZGVyIGZvciBhbiBhZ2VudCB0byB0YWtlIGEgd29ya29yZGVyLid9ID0KICAgICAgICAn4Liq4Li04LiX4LiY4Li04Lie4Li04LmA4Lio4Lip4LiX4Li14LmI4LiI4Liz4LmA4Lib4LmH4LiZ4LiV4LmJ4Lit4LiH4LmD4LiK4LmJ4LmA4Lie4Li34LmI4Lit4LmD4Lir4LmJ4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmM4LiX4Li14LmI4LiI4Liw4Lij4Lix4Lia4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWNjZXNzIHRoZSBvdmVydmlldyBvZiBhbGwgY2hhbmdlcy4nfSA9ICfguKrguLTguJfguJjguLTguJ7guLTguYDguKjguKnguJfguLXguYjguIjguLPguYDguJvguYfguJnguYPguJnguIHguLLguKPguYDguILguYnguLLguJbguLbguIfguKDguLLguJ7guKPguKfguKHguILguK3guIfguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguJfguLHguYnguIfguKvguKHguJQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhZGQgYSB3b3Jrb3JkZXIuJ30gPSAn4Liq4Li04LiX4LiY4Li04Lie4Li04LmA4Lio4Lip4LiX4Li14LmI4LiI4Liz4LmA4Lib4LmH4LiZ4LmD4LiZ4LiB4Liy4Lij4LmA4Lie4Li04LmI4Lih4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY2hhbmdlIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAn4Liq4Li04LiX4LiY4Li04Lie4Li04LmA4Lio4Lip4LiX4Li14LmI4LiI4Liz4LmA4Lib4LmH4LiZ4LmD4LiZ4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmM4LiC4Lit4LiH4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZS4nfSA9ICfguKrguLTguJfguJjguLTguJ7guLTguYDguKjguKnguJfguLXguYjguIjguLPguYDguJvguYfguJnguYPguJnguIHguLLguKPguKrguKPguYnguLLguIfguYHguKHguYjguYHguJrguJrguIjguLLguIHguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlc1wnIENBQi4nfSA9CiAgICAgICAgJ+C4quC4tOC4l+C4mOC4tOC4nuC4tOC5gOC4qOC4qeC4l+C4teC5iOC4iOC4s+C5gOC4m+C5h+C4meC5g+C4meC4geC4suC4o+C4quC4o+C5ieC4suC4h+C5geC4oeC5iOC5geC4muC4muC4iOC4suC4geC5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyBDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgd29ya29yZGVyLid9ID0gJ+C4quC4tOC4l+C4mOC4tOC4nuC4tOC5gOC4qOC4qeC4l+C4teC5iOC4iOC4s+C5gOC4m+C5h+C4meC5g+C4meC4geC4suC4o+C4quC4o+C5ieC4suC4h+C5geC4oeC5iOC5geC4muC4muC4iOC4suC4geC5g+C4muC4quC4seC5iOC4h+C4h+C4suC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzIGZyb20gdGVtcGxhdGVzLid9ID0gJ+C4quC4tOC4l+C4mOC4tOC4nuC4tOC5gOC4qOC4qeC4l+C4teC5iOC4iOC4s+C5gOC4m+C5h+C4meC5g+C4meC4geC4suC4o+C4quC4o+C5ieC4suC4h+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4iOC4suC4geC5geC4oeC5iOC5geC4muC4mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzLid9ID0gJ+C4quC4tOC4l+C4mOC4tOC4nuC4tOC5gOC4qOC4qeC4l+C4teC5iOC4iOC4s+C5gOC4m+C5h+C4meC5g+C4meC4geC4suC4o+C4quC4o+C5ieC4suC4h+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHRlbXBsYXRlLid9ID0gJ+C4quC4tOC4l+C4mOC4tOC4nuC4tOC5gOC4qOC4qeC4l+C4teC5iOC4iOC4s+C5gOC4m+C5h+C4meC5g+C4meC4geC4suC4o+C4peC4muC5geC4oeC5iOC5geC4muC4mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHdvcmtvcmRlci4nfSA9ICfguKrguLTguJfguJjguLTguJ7guLTguYDguKjguKnguJfguLXguYjguIjguLPguYDguJvguYfguJnguYPguJnguIHguLLguKPguKXguJrguYPguJrguKrguLHguYjguIfguIfguLLguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY2hhbmdlcy4nfSA9ICfguKrguLTguJfguJjguLTguJ7guLTguYDguKjguKnguJfguLXguYjguIjguLPguYDguJvguYfguJnguYPguJnguIHguLLguKPguKXguJrguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgdGVtcGxhdGUuJ30gPSAn4Liq4Li04LiX4LiY4Li04Lie4Li04LmA4Lio4Lip4LiX4Li14LmI4LiI4Liz4LmA4Lib4LmH4LiZ4LmD4LiZ4LiB4Liy4Lij4LmB4LiB4LmJ4LmE4LiC4LmB4Lih4LmI4LmB4Lia4LiaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHdvcmtvcmRlci4nfSA9ICfguKrguLTguJfguJjguLTguJ7guLTguYDguKjguKnguJfguLXguYjguIjguLPguYDguJvguYfguJnguYPguJnguIHguLLguKPguYHguIHguYnguYTguILguYPguJrguKrguLHguYjguIfguIfguLLguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGNoYW5nZXMuJ30gPSAn4Liq4Li04LiX4LiY4Li04Lie4Li04LmA4Lio4Lip4LiX4Li14LmI4LiI4Liz4LmA4Lib4LmH4LiZ4LmD4LiZ4LiB4Liy4Lij4LmB4LiB4LmJ4LmE4LiC4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJ+C4quC4tOC4l+C4mOC4tOC4nuC4tOC5gOC4qOC4qeC4l+C4teC5iOC4iOC4s+C5gOC4m+C5h+C4meC5g+C4meC4geC4suC4o+C5geC4geC5ieC5hOC4guC5gOC4h+C4t+C5iOC4reC4meC5hOC4guC4guC4reC4h+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgYSB0ZW1wbGF0ZS4nfSA9ICfguKrguLTguJfguJjguLTguJ7guLTguYDguKjguKnguJfguLXguYjguIjguLPguYDguJvguYfguJnguYPguJnguIHguLLguKPguYHguIHguYnguYTguILguYDguJnguLfguYnguK3guKvguLLguILguK3guIfguYHguKHguYjguYHguJrguJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBpbnZvbHZlZCBwZXJzb25zIG9mIGEgY2hhbmdlLid9ID0KICAgICAgICAn4Liq4Li04LiX4LiY4Li04Lie4Li04LmA4Lio4Lip4LiX4Li14LmI4LiI4Liz4LmA4Lib4LmH4LiZ4LmD4LiZ4LiB4Liy4Lij4LmB4LiB4LmJ4LmE4LiC4Lic4Li54LmJ4LiX4Li14LmI4LmA4LiB4Li14LmI4Lii4Lin4LiC4LmJ4Lit4LiH4LiC4Lit4LiH4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gbW92ZSBjaGFuZ2VzIGluIHRpbWUuJ30gPSAn4Liq4Li04LiX4LiY4Li04Lie4Li04LmA4Lio4Lip4LiX4Li14LmI4LiI4Liz4LmA4Lib4LmH4LiZ4LmD4LiZ4LiB4Liy4Lij4Lii4LmJ4Liy4Lii4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LiV4Liy4Lih4LmA4Lin4Lil4LiyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcHJpbnQgYSBjaGFuZ2UuJ30gPSAn4Liq4Li04LiX4LiY4Li04Lie4Li04LmA4Lio4Lip4LiX4Li14LmI4LiI4Liz4LmA4Lib4LmH4LiZ4LmD4LiZ4LiB4Liy4Lij4Lie4Li04Lih4Lie4LmM4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcmVzZXQgY2hhbmdlcy4nfSA9ICfguKrguLTguJfguJjguLTguJ7guLTguYDguKjguKnguJfguLXguYjguIjguLPguYDguJvguYfguJnguYPguJnguIHguLLguKPguIHguLLguKPguKPguLXguYDguIvguYfguJXguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGEgd29ya29yZGVyLid9ID0gJ+C4quC4tOC4l+C4mOC4tOC4nuC4tOC5gOC4qOC4qeC4l+C4teC5iOC4iOC4s+C5gOC4m+C5h+C4meC5g+C4meC4geC4suC4o+C4lOC4ueC5g+C4muC4quC4seC5iOC4h+C4h+C4suC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgY2hhbmdlcy4nfSA9ICfguKrguLTguJfguJjguLTguJ7guLTguYDguKjguKnguJfguLXguYjguIjguLPguYDguJvguYfguJnguYPguJnguIHguLLguKPguJTguLnguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyBhIENBQiBtZW1iZXIuJ30gPQogICAgICAgICfguKrguLTguJfguJjguLTguJ7guLTguYDguKjguKnguJfguLXguYjguIjguLPguYDguJvguYfguJnguYPguJnguIHguLLguKPguJTguLnguKPguLLguKLguIHguLLguKPguILguK3guIfguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguJfguLXguYjguJzguLnguYnguYPguIrguYnguJfguLXguYjguYDguJvguYfguJnguKrguKHguLLguIrguLTguIEgQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBsaXN0IG9mIGNoYW5nZXMgd2hlcmUgdGhlIHVzZXIgaXMgdGhlIGNoYW5nZSBtYW5hZ2VyLid9ID0KICAgICAgICAn4Liq4Li04LiX4LiY4Li04Lie4Li04LmA4Lio4Lip4LiX4Li14LmI4LiI4Liz4LmA4Lib4LmH4LiZ4LmD4LiZ4LiB4Liy4Lij4LiU4Li54Lij4Liy4Lii4LiB4Liy4Lij4LiC4Lit4LiH4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LiX4Li14LmI4Lic4Li54LmJ4LmD4LiK4LmJ4LmA4Lib4LmH4LiZ4Lic4Li54LmJ4LiI4Lix4LiU4LiB4Liy4Lij4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBvdmVydmlldyBvdmVyIGFsbCB0ZW1wbGF0ZXMuJ30gPSAn4Liq4Li04LiX4LiY4Li04Lie4Li04LmA4Lio4Lip4LiX4Li14LmI4LiI4Liz4LmA4Lib4LmH4LiZ4LmD4LiZ4LiB4Liy4Lij4LiU4Li54Lig4Liy4Lie4Lij4Lin4Lih4LmB4Lih4LmI4LmB4Lia4Lia4LiX4Lix4LmJ4LiH4Lir4Lih4LiUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJ+C4quC4tOC4l+C4mOC4tOC4nuC4tOC5gOC4qOC4qeC4l+C4teC5iOC4iOC4s+C5gOC4m+C5h+C4meC5g+C4meC4geC4suC4o+C4lOC4ueC5gOC4h+C4t+C5iOC4reC4meC5hOC4guC4guC4reC4h+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UuJ30gPSAn4Liq4Li04LiX4LiY4Li04Lie4Li04LmA4Lio4Lip4LiX4Li14LmI4LiI4Liz4LmA4Lib4LmH4LiZ4LmD4LiZ4LiB4Liy4Lij4LiU4Li54Lib4Lij4Liw4Lin4Lix4LiV4Li04LiB4Liy4Lij4LiC4Lit4LiH4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlci4nfSA9ICfguKrguLTguJfguJjguLTguJ7guLTguYDguKjguKnguJfguLXguYjguIjguLPguYDguJvguYfguJnguYPguJnguIHguLLguKPguJTguLnguJvguKPguLDguKfguLHguJXguLTguILguK3guIfguYPguJrguKrguLHguYjguIfguIfguLLguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSBjaGFuZ2UuJ30gPSAn4Liq4Li04LiX4LiY4Li04Lie4Li04LmA4Lio4Lip4LiX4Li14LmI4LiI4Liz4LmA4Lib4LmH4LiZ4LmD4LiZ4LiB4Liy4Lij4LiL4Li54Lih4LiU4Li54Lib4Lij4Liw4Lin4Lix4LiV4Li04LiC4Lit4LiH4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgd29ya29yZGVyLid9ID0KICAgICAgICAn4Liq4Li04LiX4LiY4Li04Lie4Li04LmA4Lio4Lip4LiX4Li14LmI4LiI4Liz4LmA4Lib4LmH4LiZ4LmD4LiZ4LiB4Liy4Lij4LiL4Li54Lih4LiU4Li54Lib4Lij4Liw4Lin4Lix4LiV4Li04LiC4Lit4LiH4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBDaGFuZ2UgU2NoZWR1bGUuJ30gPSAn4Liq4Li04LiX4LiY4Li04Lie4Li04LmA4Lio4Lip4LiX4Li14LmI4LiI4Liz4LmA4Lib4LmH4LiZ4LmD4LiZ4LiB4Liy4Lij4LiU4Li54Lij4Liy4Lii4LiB4Liy4Lij4LiC4Lit4LiH4LiB4Liy4Lij4LiB4Liz4Lir4LiZ4LiU4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2UgUFNBLid9ID0gJ+C4quC4tOC4l+C4mOC4tOC4nuC4tOC5gOC4qOC4qeC4l+C4teC5iOC4iOC4s+C5gOC4m+C5h+C4meC5g+C4meC4geC4suC4o+C4lOC4ueC4o+C4suC4ouC4geC4suC4o+C4guC4reC4h+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyBQU0EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIGNoYW5nZXMgd2l0aCBhbiB1cGNvbWluZyBQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KS4nfSA9CiAgICAgICAgJ+C4quC4tOC4l+C4mOC4tOC4nuC4tOC5gOC4qOC4qeC4l+C4teC5iOC4iOC4s+C5gOC4m+C5h+C4meC5g+C4meC4geC4suC4o+C4lOC4ueC4o+C4suC4ouC4geC4suC4o+C4guC4reC4h+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4lOC5ieC4p+C4oiBQSVIg4LiX4Li14LmI4LiI4Liw4Lih4Liy4LiW4Li24LiHICjguKPguLXguKfguLTguKfguKvguKXguLHguIfguIHguLLguKPguJTguLPguYDguJnguLTguJnguIfguLLguJkpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBvd24gY2hhbmdlcy4nfSA9ICfguKrguLTguJfguJjguLTguJ7guLTguYDguKjguKnguJfguLXguYjguIjguLPguYDguJvguYfguJnguYPguJnguIHguLLguKPguJTguLnguKPguLLguKLguIHguLLguKPguILguK3guIfguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguILguK3guIfguJXguLHguKfguYDguK3guIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biB3b3Jrb3JkZXJzLid9ID0gJ+C4quC4tOC4l+C4mOC4tOC4nuC4tOC5gOC4qOC4qeC4l+C4teC5iOC4iOC4s+C5gOC4m+C5h+C4meC5g+C4meC4geC4suC4o+C4lOC4ueC4o+C4suC4ouC4geC4suC4o+C4guC4reC4h+C5g+C4muC4quC4seC5iOC4h+C4h+C4suC4meC4guC4reC4h+C4leC4seC4p+C5gOC4reC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHdyaXRlIGEgcmVwb3J0IGZvciB0aGUgd29ya29yZGVyLid9ID0gJ+C4quC4tOC4l+C4mOC4tOC4nuC4tOC5gOC4qOC4qeC4l+C4teC5iOC4iOC4s+C5gOC4m+C5h+C4meC5g+C4meC4geC4suC4o+C5gOC4guC4teC4ouC4meC4o+C4suC4ouC4h+C4suC4meC4quC4s+C4q+C4o+C4seC4muC5g+C4muC4quC4seC5iOC4h+C4h+C4suC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biB0YXNrIHRvIGNoZWNrIGlmIHNwZWNpZmljIHRpbWVzIGhhdmUgYmVlbiByZWFjaGVkIGluIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSB3b3Jrb3JkZXIgYXMgYSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2NoZWR1bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2NyZWVuIGFmdGVyIGNyZWF0aW5nIGEgd29ya29yZGVyJ30gPSAn4Lir4LiZ4LmJ4Liy4LiI4Lit4Lir4Lil4Lix4LiH4LiI4Liy4LiB4LiX4Li14LmI4Liq4Lij4LmJ4Liy4LiH4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDaGFuZ2VzJ30gPSAn4LiE4LmJ4LiZ4Lir4LiyQ2hhbmdlICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWFyY2ggQ2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0cyB0aGUgY2hhbmdlIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlLiAiQXV0b0luY3JlbWVudCIgaW5jcmVtZW50cyB0aGUgY2hhbmdlIG51bWJlciwgdGhlIFN5c3RlbUlEIGFuZCB0aGUgY291bnRlciBhcmUgdXNlZCB3aXRoIFN5c3RlbUlELmNvdW50ZXIgZm9ybWF0IChlLmcuIDEwMDExOCwgMTAwMTE5KS4gV2l0aCAiRGF0ZSIsIHRoZSBjaGFuZ2UgbnVtYmVycyB3aWxsIGJlIGdlbmVyYXRlZCBieSB0aGUgY3VycmVudCBkYXRlIGFuZCBhIGNvdW50ZXI7IHRoaXMgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuY291bnRlciwgZS5nLiAyMDEwMDYyNDAwMDAxLCAyMDEwMDYyNDAwMDAyLiBXaXRoICJEYXRlQ2hlY2tzdW0iLCB0aGUgY291bnRlciB3aWxsIGJlIGFwcGVuZGVkIGFzIGNoZWNrc3VtIHRvIHRoZSBzdHJpbmcgb2YgZGF0ZSBwbHVzIHRoZSBTeXN0ZW1JRC4gVGhlIGNoZWNrc3VtIHdpbGwgYmUgcm90YXRlZCBvbiBhIGRhaWx5IGJhc2lzLiBUaGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LlN5c3RlbUlELkNvdW50ZXIuQ2hlY2tTdW0sIGUuZy4gMjAxMDA2MjQxMDAwMDAxNywgMjAxMDA2MjQxMDAwMDAyNi4nfSA9CiAgICAgICAgJ+C5gOC4peC4t+C4reC4geC5guC4oeC4lOC4ueC4peC4leC4seC4p+C4quC4o+C5ieC4suC4h+C4q+C4oeC4suC4ouC5gOC4peC4guC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyAiQXV0b0luY3JlbWVudCIg4LmA4Lie4Li04LmI4Lih4LiI4Liz4LiZ4Lin4LiZ4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHIFN5c3RlbUlEIOC5geC4peC4sOC4leC4seC4p+C4meC4seC4muC4iOC4sOC5g+C4iuC5ieC4geC4seC4miBTeXN0ZW1JRCDguKPguLnguJvguYHguJrguJrguJXguLHguKfguJnguLHguJogKOC5gOC4iuC5iOC4mSAxMDAxMTgsIDEwMDExOSkg4LiB4Lix4LiaICLguKfguLHguJnguJfguLXguYgiIOC4i+C4tuC5iOC4h+C4q+C4oeC4suC4ouC5gOC4peC4guC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C4iOC4sOC4luC4ueC4geC4quC4o+C5ieC4suC4h+C4guC4tuC5ieC4meC5guC4lOC4ouC4p+C4seC4meC4l+C4teC5iOC4m+C4seC4iOC4iOC4uOC4muC4seC4meC5geC4peC4sOC4leC4seC4p+C4meC4seC4mjsg4Lij4Li54Lib4LmB4Lia4Lia4LiZ4Li14LmJ4Lih4Li14Lil4Lix4LiB4Lip4LiT4Liw4LmA4LiK4LmI4LiZIFllYXIuTW9udGguRGF5LmNvdW50ZXIg4LmA4LiK4LmI4LiZIDIwMTAwNjI0MDAwMDEsIDIwMTAwNjI0MDAwMDIuIOC4geC4seC4miAiRGF0ZUNoZWNrc3VtIiDguJXguLHguKfguJnguLHguJrguIjguLDguJbguLnguIHguJzguJnguKfguIHguYDguJvguYfguJnguIHguLLguKPguJXguKPguKfguIjguKrguK3guJrguYTguJvguKLguLHguIfguKrguJXguKPguLTguIfguKfguLHguJnguJrguKfguIHguJTguYnguKfguKIgU3lzdGVtSUQg4LiX4Li14LmI4LiB4Liy4Lij4LiV4Lij4Lin4LiI4Liq4Lit4Lia4LiI4Liw4Lih4Li14LiB4Liy4Lij4Lir4Lih4Li44LiZ4LmD4LiZ4LmB4LiV4LmI4Lil4Liw4Lin4Lix4LiZIOC4o+C4ueC4m+C5geC4muC4muC4meC4teC5ieC4oeC4teC4peC4seC4geC4qeC4k+C4sOC5gOC4iuC5iOC4mVllYXIuTW9udGguRGF5LlN5c3RlbUlELkNvdW50ZXIuQ2hlY2tTdW0g4LmA4LiK4LmI4LiZIDIwMTAwNjI0MTAwMDAwMTcsIDIwMTAwNjI0MTAwMDAwMjYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBhZ2VudCBmb3IgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRJVFNNQ2hhbmdlWm9vbSBhbmQgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nfSA9CiAgICAgICAgJ+C4leC4seC5ieC4h+C4hOC5iOC4suC4hOC4p+C4suC4oeC4quC4ueC4h+C5gOC4o+C4tOC5iOC4oeC4leC5ieC4mSAo4Lie4Li04LiB4LmA4LiL4LilKSDguILguK3guIfguJ/guLTguKXguJTguYwgSFRNTCDguK3guLTguJnguYTguKXguJnguYzguYPguJkgQWdlbnRJVFNNQ2hhbmdlWm9vbSDguYHguKXguLAgQWdlbnRJVFNNV29ya09yZGVyWm9vbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAn4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiE4Lin4Liy4Lih4Liq4Li54LiH4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZICjguJ7guLTguIHguYDguIvguKUpIOC4guC4reC4h+C4n+C4tOC4peC4lOC5jCBIVE1MIOC4reC4tOC4meC5hOC4peC4meC5jOC5g+C4mSBBZ2VudElUU01DaGFuZ2Vab29tIOC5geC4peC4sCBBZ2VudElUU01Xb3JrT3JkZXJab29tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIG1pbmltYWwgY2hhbmdlIGNvdW50ZXIgc2l6ZSAoaWYgIkF1dG9JbmNyZW1lbnQiIHdhcyBzZWxlY3RlZCBhcyBJVFNNQ2hhbmdlOjpOdW1iZXJHZW5lcmF0b3IpLiBEZWZhdWx0IGlzIDUsIHRoaXMgbWVhbnMgdGhlIGNvdW50ZXIgc3RhcnRzIGZyb20gMTAwMDAuJ30gPQogICAgICAgICfguJXguLHguYnguIfguITguYjguLLguILguJnguLLguJTguJXguLHguKfguJnguLHguJrguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguJnguYnguK3guKLguJfguLXguYjguKrguLjguJQgKOC4luC5ieC4siAiQXV0b0luY3JlbWVudCIg4LmE4LiU4LmJ4Lij4Lix4Lia4LmA4Lil4Li34Lit4LiB4LmA4Lib4LmH4LiZIElUU01DaGFuZ2UgOjogTnVtYmVyR2VuZXJhdG9yKSDguITguYjguLLguYDguKPguLTguYjguKHguJXguYnguJnguITguLfguK0gNSDguIvguLbguYjguIfguKvguKHguLLguKLguITguKfguLLguKHguKfguYjguLLguJXguLHguKfguJnguLHguJrguYDguKPguLTguYjguKHguJXguYnguJnguIjguLLguIEgMTAwMDAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3IgY2hhbmdlcy4nfSA9ICfguJXguLHguYnguIfguITguYjguLLguYDguITguKPguLfguYjguK3guIfguILguK3guIfguKrguJbguLLguJnguLDguKrguLPguKvguKPguLHguJrguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3Igd29ya29yZGVycy4nfSA9ICfguJXguLHguYnguIfguITguYjguLLguYDguITguKPguLfguYjguK3guIfguILguK3guIfguKrguJbguLLguJnguLDguKrguLPguKvguKPguLHguJrguYPguJrguKrguLHguYjguIfguIfguLLguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBjaGVja2JveCBpbiB0aGUgQWdlbnRJVFNNV29ya09yZGVyRWRpdCBzY3JlZW4gdGhhdCBkZWZpbmVzIGlmIHRoZSB0aGUgZm9sbG93aW5nIHdvcmtvcmRlcnMgc2hvdWxkIGFsc28gYmUgbW92ZWQgaWYgYSB3b3Jrb3JkZXIgaXMgbW9kaWZpZWQgYW5kIHRoZSBwbGFubmVkIGVuZCB0aW1lIGhhcyBjaGFuZ2VkLid9ID0KICAgICAgICAn4LmB4Liq4LiU4LiH4LiK4LmI4Lit4LiH4LiX4Liz4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lir4Lih4Liy4Lii4LmD4LiZ4Lir4LiZ4LmJ4Liy4LiI4LitIEFnZW50SVRTTVdvcmtPcmRlckVkaXQg4LiX4Li14LmI4LiB4Liz4Lir4LiZ4LiU4LiW4LmJ4Liy4Lir4Liy4LiB4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZ4LiV4LmI4Lit4LmE4Lib4LiZ4Li14LmJ4LiE4Lin4Lij4LiI4Liw4LiW4Li54LiB4Lii4LmJ4Liy4LiiIOC4luC5ieC4suC5g+C4muC4quC4seC5iOC4h+C4h+C4suC4meC4oeC4teC4geC4suC4o+C5geC4geC5ieC5hOC4guC5geC4peC4sOC5gOC4p+C4peC4suC4quC4tOC5ieC4meC4quC4uOC4lOC4l+C4teC5iOC4p+C4suC4h+C5geC4nOC4meC5hOC4p+C5ieC4oeC4teC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgY2hhbmdpbmcgdGhlIHdvcmtvcmRlciBhZ2VudCwgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIGNoYW5nZSBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIGNoYW5nZSwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C5geC4quC4lOC4h+C4geC4suC4o+C5gOC4iuC4t+C5iOC4reC4oeC5guC4ouC4h+C5g+C4meC5gOC4oeC4meC4ueC4l+C4teC5iOC4reC4meC4uOC4jeC4suC4leC4tOC5g+C4q+C5ieC4geC4s+C4q+C4meC4lArguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguYDguJvguYfguJnguYHguKHguYjguYHguJrguJrguYPguJnguKHguLjguKHguKHguK3guIfguIHguLLguKPguIvguLnguKHguILguK3guIfguYPguJrguKrguLHguYjguIfguIfguLLguJnguJTguLHguIfguIHguKXguYjguLLguKfguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgd29ya29yZGVyIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgd29ya29yZGVyLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBlZGl0aW5nIHRoZSByZXBvcnQgb2YgYSB3b3Jrb3JkZXIsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCB3b3Jrb3JkZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgbGlua2luZyBhIGNoYW5nZSB3aXRoIGFub3RoZXIgb2JqZWN0IGluIHRoZSBjaGFuZ2Ugem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfguYHguKrguJTguIfguIHguLLguKPguYDguIrguLfguYjguK3guKHguYLguKLguIfguYPguJnguYDguKHguJnguLnguJfguLXguYjguK3guJnguLjguI3guLLguJXguLTguYPguKvguYnguYDguIrguLfguYjguK3guKHguYLguKLguIfguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguIHguLHguJrguK3guK3guJrguYDguIjguITguK3guLfguYjguJnguYPguJnguKHguLjguKHguKHguK3guIfguIHguLLguKPguIvguLnguKHguILguK3guIfguYPguJrguKrguLHguYjguIfguIfguLLguJnguJTguLHguIfguIHguKXguYjguLLguKfguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSB3b3Jrb3JkZXIgd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIG1vdmluZyB0aGUgdGltZSBzbG90IG9mIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C5geC4quC4lOC4h+C4geC4suC4o+C5gOC4iuC4t+C5iOC4reC4oeC5guC4ouC4h+C5g+C4meC5gOC4oeC4meC4ueC4l+C4teC5iOC4reC4meC4uOC4jeC4suC4leC4tOC5g+C4q+C5ieC4ouC5ieC4suC4ouC4iuC5iOC4p+C4h+C5gOC4p+C4peC4suC4guC4reC4h+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C5g+C4meC4oeC4uOC4oeC4oeC4reC4h+C4geC4suC4o+C4i+C4ueC4oeC4guC4reC4h+C4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgdGFraW5nIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgY29uZGl0aW9ucyBvZiBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LmB4Liq4LiU4LiH4Lil4Li04LiH4LiE4LmM4LmD4LiZ4LmA4Lih4LiZ4Li54LmA4Lie4Li34LmI4Lit4LiX4Li14LmI4LmA4LiC4LmJ4Liy4LiU4Li54LmA4LiH4Li34LmI4Lit4LiZ4LmE4LiC4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LmD4LiZ4Lih4Li44Lih4Lih4Lit4LiH4LiB4Liy4Lij4LiL4Li54Lih4LiC4Lit4LiH4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C5geC4quC4lOC4h+C4peC4tOC4h+C4hOC5jOC5g+C4meC5gOC4oeC4meC4ueC5gOC4nuC4t+C5iOC4reC4l+C4teC5iOC5gOC4guC5ieC4suC4iuC4oeC4m+C4o+C4sOC4p+C4seC4leC4tOC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C5g+C4meC4oeC4uOC4oeC4oeC4reC4h+C4geC4suC4o+C4i+C4ueC4oeC4guC4reC4h+C4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFkZCBhIHdvcmtvcmRlciBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSBjaGFuZ2UgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LmB4Liq4LiU4LiH4Lil4Li04LiH4LiE4LmM4LmD4LiZ4LmA4Lih4LiZ4Li54LmA4Lie4Li34LmI4Lit4LiX4Li14LmI4LiI4Liw4Lil4Lia4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LmD4LiZ4Lih4Li44Lih4Lih4Lit4LiH4LiB4Liy4Lij4LiL4Li54Lih4LiC4Lit4LiH4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBkZWxldGUgYSB3b3Jrb3JkZXIgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfguYHguKrguJTguIfguKXguLTguIfguITguYzguYPguJnguYDguKHguJnguLnguYDguJ7guLfguYjguK3guYHguIHguYnguYTguILguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguYPguJnguKHguLjguKHguKHguK3guIfguIHguLLguKPguIvguLnguKHguILguK3guIfguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGVkaXQgYSB3b3Jrb3JkZXIgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LmB4Liq4LiU4LiH4Lil4Li04LiH4LiE4LmM4LmD4LiZ4LmA4Lih4LiZ4Li54LmA4Lie4Li34LmI4Lit4LiB4Lil4Lix4Lia4LmE4Lib4Lii4Lix4LiH4Lih4Li44Lih4Lih4Lit4LiH4LiB4Liy4Lij4LiL4Li54Lih4LiC4Lit4LiH4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LiC4Lit4LiH4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBnbyBiYWNrIGluIHRoZSB3b3Jrb3JkZXIgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfguYHguKrguJTguIfguKXguLTguIfguITguYzguYPguJnguYDguKHguJnguLnguYDguJ7guLfguYjguK3guJ7guLTguKHguJ7guYzguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguYPguJnguKHguLjguKHguKHguK3guIfguIHguLLguKPguIvguLnguKHguILguK3guIfguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHByaW50IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIHJlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycyBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfguYHguKrguJTguIfguIHguLLguKPguYDguIrguLfguYjguK3guKHguYLguKLguIfguYPguJnguYDguKHguJnguLnguYDguJ7guLfguYjguK3guKPguLXguYDguIvguYfguJXguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguYHguKXguLDguYPguJrguKrguLHguYjguIfguIfguLLguJnguYPguJnguKHguLjguKHguKHguK3guIfguIHguLLguKPguIvguLnguKHguILguK3guIfguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIGNoYW5nZSBoaXN0b3J5IChyZXZlcnNlIG9yZGVyZWQpIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfguYHguKrguJTguIfguJvguKPguLDguKfguLHguJXguLTguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcgKOC4peC4s+C4lOC4seC4muC4ouC5ieC4reC4meC4geC4peC4seC4mikg4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRlIE1hY2hpbmUnfSA9ICfguKrguJbguLLguJnguLDguIHguKXguYTguIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RvcmVzIGNoYW5nZSBhbmQgd29ya29yZGVyIGlkcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB0ZW1wbGF0ZSBpZCwgd2hpbGUgYSB1c2VyIGlzIGVkaXRpbmcgYSB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJ+C4iOC4seC4lOC5gOC4geC5h+C4muC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4h+C5geC4peC4sOC5hOC4reC4lOC4teC5g+C4muC4quC4seC5iOC4h+C4h+C4suC4meC5geC4peC4sOC5hOC4reC4lOC4teC5geC4oeC5iOC5geC4muC4muC4l+C4teC5iOC4quC4reC4lOC4hOC4peC5ieC4reC4h+C4geC4seC4meC4guC4reC4h+C4nuC4p+C4geC5gOC4guC4suC5g+C4meC4guC4k+C4sOC4l+C4teC5iOC4nOC4ueC5ieC5g+C4iuC5ieC5geC4geC5ieC5hOC4guC5geC4oeC5iOC5geC4muC4mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIFdvcmtvcmRlcid9ID0gJ+C4o+C4seC4muC5g+C4muC4quC4seC5iOC4h+C4h+C4suC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIFdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBPdmVydmlldyd9ID0gJ+C4oeC4uOC4oeC4oeC4reC4h+C5geC4oeC5iOC5geC4muC4mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY2hhbmdlLCBlLmcuIENoYW5nZSMsIE15Q2hhbmdlIy4gVGhlIGRlZmF1bHQgaXMgQ2hhbmdlIy4nfSA9CiAgICAgICAgJ+C4leC4seC4p+C4muC5iOC4h+C4iuC4teC5ieC4quC4s+C4q+C4o+C4seC4muC4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC5geC4m+C4peC4hyDguYDguIrguYjguJkg4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHIyAg4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiH4LiC4Lit4LiH4LiJ4Lix4LiZIyDguITguYjguLLguYDguKPguLTguYjguKHguJXguYnguJnguITguLfguK0g4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHIyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSB3b3Jrb3JkZXIsIGUuZy4gV29ya29yZGVyIywgTXlXb3Jrb3JkZXIjLiBUaGUgZGVmYXVsdCBpcyBXb3Jrb3JkZXIjLid9ID0KICAgICAgICAn4LiV4Lix4Lin4Lia4LmI4LiH4LiK4Li14LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmD4Lia4Liq4Lix4LmI4LiH4LiH4Liy4LiZIOC5gOC4iuC5iOC4mSDguYPguJrguKrguLHguYjguIfguIfguLLguJkjICDguYPguJrguKrguLHguYjguIfguIfguLLguJnguILguK3guIfguInguLHguJkjIOC4hOC5iOC4suC5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC4hOC4t+C4rSDguYPguJrguKrguLHguYjguIfguIfguLLguJkjLlwnOyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIEFDTCBtb2R1bGUgcmVzdHJpY3RzIHRoZSB1c3VhZ2Ugb2YgdGhlIHRpY2tldCB0eXBlcyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBzeXNjb25maWcgb3B0aW9uIFwnSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzXCcsIHRvIHVzZXJzIG9mIHRoZSBncm91cHMgYXMgZGVmaW5lZCBpbiAiSVRTTUNoYW5nZTo6UmVzdHJpY3RUaWNrZXRUeXBlczo6R3JvdXBzIi4gQXMgdGhpcyBBQ0wgY291bGQgY29sbGlkZSB3aXRoIG90aGVyIEFDTHMgd2hpY2ggYXJlIGFsc28gcmVsYXRlZCB0byB0aGUgdGlja2V0IHR5cGUsIHRoaXMgc3lzY29uZmlnIG9wdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBzaG91bGQgb25seSBiZSBhY3RpdmF0ZWQgaWYgbmVlZGVkLid9ID0KICAgICAgICAn4LmC4Lih4LiU4Li54LilIEFDTCDguJnguLXguYnguIjguLPguIHguLHguJTguIHguLLguKPguYPguIrguYnguIfguLLguJnguILguK3guIfguJvguKPguLDguYDguKDguJfguJXguLHguYvguKfguJfguLXguYjguIHguLPguKvguJnguJTguYTguKfguYnguYPguJnguJXguLHguKfguYDguKXguLfguK3guIHguJfguLXguYggc3lzY29uZmlnIFwnSVRTTUNoYW5nZSA6OiBBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXNcJyDguYPguKvguYnguIHguLHguJrguJzguLnguYnguYPguIrguYnguILguK3guIfguIHguKXguLjguYjguKHguJnguLHguYnguJnguYbguJXguLLguKHguJfguLXguYjguIHguLPguKvguJnguJTguYPguJkgIklUU01DaGFuZ2UgOjogUmVzdHJpY3RUaWNrZXRUeXBlcyA6OiBHcm91cHMiCuC5g+C4meC4kOC4suC4meC4sOC4l+C4teC5iOC5gOC4m+C5h+C4mSBBQ0wg4LiZ4Li14LmJ4Lit4Liy4LiI4LiC4Lix4LiU4LmB4Lii4LmJ4LiH4LiB4Lix4LiaIEFDTHMg4Lit4Li34LmI4LiZIOC5hiDguJfguLXguYjguKLguLHguIfguYDguIHguLXguYjguKLguKfguILguYnguK3guIfguIHguLHguJrguJvguKPguLDguYDguKDguJfguJXguLHguYvguKcg4LiV4Lix4Lin4LmA4Lil4Li34Lit4LiBIHN5c2NvbmZpZyDguJnguLXguYnguJbguLnguIHguJvguLTguJTguYPguIrguYnguIfguLLguJnguYLguJTguKLguITguYjguLLguYDguKPguLTguYjguKHguJXguYnguJnguYHguKXguLDguITguKfguKPguIjguLDguYDguJvguLTguJTguYPguIrguYnguIfguLLguJnguYPguJnguIHguKPguJPguLXguJfguLXguYjguIjguLPguYDguJvguYfguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBTbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R5cGVzIG9mIHRpY2tldHMsIHdoZXJlIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IGEgbGluayB0byBhZGQgYSBjaGFuZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICfguJvguKPguLDguYDguKDguJfguILguK3guIfguJXguLHguYvguKfguJfguLXguYjguIvguLnguKHguJXguLHguYvguKfguJTguLnguIHguLLguKPguKXguLTguIfguITguYzguJfguLXguYjguIjguLDguYDguJ7guLTguYjguKHguIHguLLguKPguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIfguIjguLDguJvguKPguLLguIHguI8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFkZCAoZnJvbSB0ZW1wbGF0ZSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZ2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIERlbGV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBIaXN0b3J5IFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBIaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgUmVwb3J0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb25jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWd1bGFybHknfSA9ICcnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6emhfQ05fSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICfpo47pmannsbvliKsgPC0+IOW9seWTjSA8LT4g5LyY5YWI57qnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENhdGVnb3J5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICci6aOO6Zmp57G75YirIDwtPiDlvbHlk40i5LmL6Ze055qE57uE5ZCI5Yaz5a6a5LyY5YWI57qn44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICfkvJjlhYjnuqfliIbphY0nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbiBNYW5hZ2VtZW50J30gPSAn566h55CG5Y+Y5pu06YCa55+lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOb3RpZmljYXRpb24gUnVsZSd9ID0gJ+a3u+WKoOmAmuefpeinhOWImSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdWxlJ30gPSAn6KeE5YiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Egbm90aWZpY2F0aW9uIHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICfpgJrnn6Xlv4XpobvmnInlkI3np7DvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZC4nfSA9ICflkI3np7DmmK/lv4XpnIDnmoTjgIInOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTVN0YXRlTWFjaGluZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gU3RhdGUgTWFjaGluZSd9ID0gJ+euoeeQhueKtuaAgeaooeW8j+i9rOaNoic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBjYXRhbG9nIGNsYXNzISd9ID0gJ+mAieaLqeebruW9leexuyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGFsb2cgY2xhc3MgaXMgcmVxdWlyZWQhJ30gPSAn55uu5b2V57G75piv5b+F6ZyA55qE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHN0YXRlIHRyYW5zaXRpb24nfSA9ICfmt7vliqDkuIDkuKrnirbmgIHovazmjaInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ+ebruW9leexuyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgTmFtZSd9ID0gJ+WvueixoeWQjeensCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIHN0YXRlIHRyYW5zaXRpb25zIGZvcid9ID0gJ+eKtuaAgei9rOaNouamguWGtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAn5Yig6Zmk6L+Z5Liq54q25oCB6L2s5o2iJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ+a3u+WKoOS4gOS4quaWsOeahOeKtuaAgei9rOaNoic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGEgc3RhdGUhJ30gPSAn6K+36YCJ5oup5LiA5Liq54q25oCB77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBuZXh0IHN0YXRlISd9ID0gJ+ivt+mAieaLqeS4gOS4qlwn5LiL5LiA54q25oCBXCfvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBhIHN0YXRlIHRyYW5zaXRpb24gZm9yJ30gPSAn57yW6L6R54q25oCB6L2s5o2iJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIHN0YXRlIHRyYW5zaXRpb24nfSA9ICfmgqjnnJ/nmoTmg7PopoHliKDpmaTov5nkuKrnirbmgIHovazmjaLlkJc/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VBZGQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDaGFuZ2UnfSA9ICfliJvlu7rlj5jmm7QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UnfSA9ICflj5jmm7QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVzdGlmaWNhdGlvbid9ID0gJ+eQhueUsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnB1dCBpbnZhbGlkLid9ID0gJ+i+k+WFpeaXoOaViOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICflvbHlk40nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdGVkIERhdGUnfSA9ICfor7fmsYLml6XmnJ8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUFkZEZyb21UZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IENoYW5nZSBUZW1wbGF0ZSd9ID0gJ+mAieaLqeWPmOabtOaooeadvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIHR5cGUnfSA9ICfml7bpl7TnsbvlnosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCB0aW1lIHR5cGUuJ30gPSAn5peg5pWI55qE5pe26Ze057G75Z6L44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB0aW1lJ30gPSAn5paw55qE5pe26Ze0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VDQUJUZW1wbGF0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBDaGFuZ2UgQ0FCIGFzIHRlbXBsYXRlJ30gPSAn5L+d5a2Y5Y+Y5pu0Q0FC5Li65qih5p2/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIHRvIGludm9sdmVkIHBlcnNvbnMgc2NyZWVuJ30gPSAn6L2s5ZCR55u45YWz5Lq65ZGY56qX5Y+jJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgTmFtZSd9ID0gJ+aXoOaViOeahOWQjeensCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25zIGFuZCBBY3Rpb25zJ30gPSAn5p2h5Lu25ZKM5pON5L2cJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBDb25kaXRpb24nfSA9ICfliKDpmaTmnaHku7YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG5ldyBjb25kaXRpb24nfSA9ICfmt7vliqDmlrDnmoTmnaHku7YnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29uZGl0aW9uJ30gPSAn57yW6L6R5p2h5Lu2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZWQgYSB2YWxpZCBuYW1lLid9ID0gJ+mcgOimgeS4gOS4quacieaViOeahOWQjeensOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIG5hbWUgaXMgbmVlZGVkLid9ID0gJ+mcgOimgeS4gOS4quacieaViOeahOWQjeensOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEdXBsaWNhdGUgbmFtZTonfSA9ICfph43lpI3nmoTlkI3np7DvvJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBuYW1lIGlzIGFscmVhZHkgdXNlZCBieSBhbm90aGVyIGNvbmRpdGlvbi4nfSA9ICflj6bkuIDkuKrmnaHku7blt7Looqvkvb/nlKjov4for6XlkI3np7DjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF0Y2hpbmcnfSA9ICfljLnphY0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW55IGV4cHJlc3Npb24gKE9SKSd9ID0gJ+S7u+aEj+ihqOi+vuW8jyjmiJYpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBleHByZXNzaW9ucyAoQU5EKSd9ID0gJ+aJgOacieihqOi+vuW8jyjkuI4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0V4cHJlc3Npb25zJ30gPSAn6KGo6L6+5byPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdG9yJ30gPSAn6YCJ5oup5ZmoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09wZXJhdG9yJ30gPSAn5pON5L2c56ymJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBFeHByZXNzaW9uJ30gPSAn5Yig6Zmk6KGo6L6+5byPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEV4cHJlc3Npb25zIGZvdW5kLid9ID0gJ+ayoeacieaJvuWIsOihqOi+vuW8j+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGV4cHJlc3Npb24nfSA9ICfmt7vliqDmlrDnmoTooajovr7lvI8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEFjdGlvbid9ID0gJ+WIoOmZpOaTjeS9nCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBBY3Rpb25zIGZvdW5kLid9ID0gJ+ayoeacieaJvuWIsOaTjeS9nCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGFjdGlvbid9ID0gJ+a3u+WKoOaWsOeahOaTjeS9nCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2hhbmdlPyd9ID0gJ+aCqOecn+eahOaDs+imgeWIoOmZpOi/meS4quWPmOabtOWQlz8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUVkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgJXMlcyd9ID0gJ+e8lui+kSVzJXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUhpc3RvcnkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3Rvcnkgb2YgJXMlcyd9ID0gJ+W3peWNlSVzJXPnmoTljoblj7Lkv6Hmga8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyJ30gPSAn5bel5L2c5oyH5LukJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgZGV0YWlscyd9ID0gJ+aYvuekuuivpuaDhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHdvcmtvcmRlcid9ID0gJ+aYvuekuuW3peS9nOaMh+S7pCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbGVkIGhpc3RvcnkgaW5mb3JtYXRpb24gb2YgJXMnfSA9ICclc+eahOivpue7huWOhuWPsuS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2RpZmllZCd9ID0gJ+W3suS/ruaUuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbGQgVmFsdWUnfSA9ICfml6flgLwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFZhbHVlJ30gPSAn5paw5YC8JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSW52b2x2ZWQgUGVyc29ucyBvZiAlcyVzJ30gPSAn57yW6L6RJXMlc+eahOebuOWFs+S6uuWRmCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZvbHZlZCBQZXJzb25zJ30gPSAn55u45YWz5Lq65ZGYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZU1hbmFnZXInfSA9ICflj5jmm7Tnu4/nkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBpbnZhbGlkLid9ID0gJ+eUqOaIt+aXoOaViOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VCdWlsZGVyJ30gPSAn5Y+Y5pu05Yib5bu65Lq6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBBZHZpc29yeSBCb2FyZCd9ID0gJ+WPmOabtOWSqOivouWnlOWRmOS8mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgVGVtcGxhdGUnfSA9ICdDQULmqKHmnb8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwbHkgVGVtcGxhdGUnfSA9ICflupTnlKjmqKHmnb8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3VGVtcGxhdGUnfSA9ICfmlrDlu7rmqKHmnb8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSB0aGlzIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJ+S/neWtmOi/meS4qkNBQuS4uuaooeadvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdG8gQ0FCJ30gPSAn5re75Yqg5YiwQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgVXNlcid9ID0gJ+aXoOaViOeahOeUqOaItyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IENBQid9ID0gJ+W9k+WJjUNBQic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICfkuIrkuIvmloforr7nva4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlcyBwZXIgcGFnZSd9ID0gJ+avj+mhteaYvuekuueahOWPmOabtOS4quaVsCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFRpdGxlJ30gPSAn5bel5L2c5oyH5Luk5qCH6aKYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBUaXRsZSd9ID0gJ+WPmOabtOagh+mimCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQnfSA9ICflt6XkvZzmjIfku6TmnI3liqHkurrlkZgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEJ1aWxkZXInfSA9ICflj5jmm7TliJvlu7rkuronOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE1hbmFnZXInfSA9ICflj5jmm7Tnu4/nkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVycyd9ID0gJ+W3peS9nOaMh+S7pCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU3RhdGUnfSA9ICflj5jmm7TnirbmgIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFN0YXRlJ30gPSAn5bel5L2c5oyH5Luk54q25oCBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUeXBlJ30gPSAn5bel5L2c5oyH5Luk57G75Z6LJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBUaW1lJ30gPSAn6K+35rGC5pe26Ze0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgU3RhcnQgVGltZSd9ID0gJ+iuoeWIkueahOW8gOWni+aXtumXtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVuZCBUaW1lJ30gPSAn6K6h5YiS57uT5p2f5pe26Ze0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBTdGFydCBUaW1lJ30gPSAn5a6e6ZmF5byA5aeL5pe26Ze0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBFbmQgVGltZSd9ID0gJ+WunumZhee7k+adn+aXtumXtCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlUmVzZXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byByZXNldCB0aGlzIGNoYW5nZT8nfSA9ICfmgqjnnJ/nmoTmg7PopoHph43nva7ov5nkuKrlj5jmm7TlkJfvvJ8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGUuZy4gMTAqNTE1NSBvciAxMDU2NTgqKSd9ID0gJ+S+i+Wmgu+8mjEwKjUxNTUgb3IgMTA1NjU4Kic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQWdlbnQnfSA9ICdDQULmnI3liqHkurrlkZjmiJDlkZgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS5nLid9ID0gJ+S+i+Wmgu+8mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQ3VzdG9tZXInfSA9ICdDQULlrqLmiLfmiJDlkZgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBXb3Jrb3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICdJVFNN5bel5L2c5oyH5Luk6K+05piOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIFJlcG9ydCd9ID0gJ0lUU03lt6XkvZzmjIfku6TmiqXlkYonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgUHJpb3JpdHknfSA9ICdJVFNN5Y+Y5pu05LyY5YWI57qnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIEltcGFjdCd9ID0gJ0lUU03lj5jmm7TlvbHlk40nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIENhdGVnb3J5J30gPSAn5Y+Y5pu06aOO6Zmp57G75YirJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhiZWZvcmUvYWZ0ZXIpJ30gPSAn77yI5LmL5YmNL+S5i+WQju+8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycoYmV0d2VlbiknfSA9ICfvvIjlnKguLi7kuYvpl7TvvIknOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBhcyBUZW1wbGF0ZSd9ID0gJ+S/neWtmOWPmOabtOS4uuaooeadvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHRlbXBsYXRlIHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICfmqKHmnb/lupTor6XmnInkuIDkuKrlkI3np7AhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB0ZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLid9ID0gJ+aooeadv+WQjeensOaYr+W/hemcgOeahOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBTdGF0ZXMnfSA9ICfph43nva7nirbmgIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcndyaXRlIG9yaWdpbmFsIHRlbXBsYXRlJ30gPSAn6KaG55uW5Y6f5aeL5qih5p2/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCBjaGFuZ2UnfSA9ICfliKDpmaTljp/lp4vlj5jmm7QnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVRpbWVTbG90CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIFRpbWUgU2xvdCd9ID0gJ+enu+WKqOaXtumXtOi9tCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEluZm9ybWF0aW9uJ30gPSAn5Y+Y5pu05L+h5oGvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgRWZmb3J0J30gPSAn6aKE6K6h6ICX5pe2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjY291bnRlZCBUaW1lJ30gPSAn5omA55So5bel5pe2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbml0aWF0b3IocyknfSA9ICflj5jmm7Tlj5HotbfkuronOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCJ30gPSAnQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ+S4iuasoeS/ruaUueS6jic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfkuIrmrKHkv67mlLnkuronOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2snfSA9ICfnoa7lrponOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG8gb3BlbiBsaW5rcyBpbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIGJsb2NrcywgeW91IG1pZ2h0IG5lZWQgdG8gcHJlc3MgQ3RybCBvciBDbWQgb3IgU2hpZnQga2V5IHdoaWxlIGNsaWNraW5nIHRoZSBsaW5rIChkZXBlbmRpbmcgb24geW91ciBicm93c2VyIGFuZCBPUykuJ30gPQogICAgICAgICfopoHmiZPlvIDkuIvpnaLmj4/ov7DkuK3nmoTpk77mjqXvvIzkvaDlj6/og73pnIDopoHlnKjljZXlh7vpk77mjqXnmoTlkIzml7bmjInkvY8gQ3RybCDmiJYgQ21kIOaIliBTaGlmdCDplK4g77yI5Y+W5Yaz5LqO5oKo55qE5rWP6KeI5Zmo5ZKM5pON5L2c57O757ufIO+8ieOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEb3dubG9hZCBBdHRhY2htZW50J30gPSAn5LiL6L296ZmE5Lu2JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZUVkaXRDQUIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ0FCIFRlbXBsYXRlJ30gPSAn57yW6L6RQ0FC5qih5p2/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGNoYW5nZSBmcm9tIHRoaXMgdGVtcGxhdGUsIHNvIHlvdSBjYW4gZWRpdCBhbmQgc2F2ZSBpdC4nfSA9CiAgICAgICAgJ+i/meWwhuS7jui/meS4quaooeadv+WIm+W7uuS4gOS4quaWsOeahOWPmOabtO+8jOi/meagt+aCqOiDveWkn+e8lui+keWSjOS/neWtmOWug+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgbmV3IGNoYW5nZSB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciBpdCBoYXMgYmVlbiBzYXZlZCBhcyB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJ+aWsOWPmOabtOS/neWtmOS4uuaooeadv+WQju+8jOWwhuiiq+iHquWKqOWIoOmZpOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IHdvcmtvcmRlciBmcm9tIHRoaXMgdGVtcGxhdGUsIHNvIHlvdSBjYW4gZWRpdCBhbmQgc2F2ZSBpdC4nfSA9CiAgICAgICAgJ+i/meWwhuS7jui/meS4quaooeadv+WIm+W7uuS4gOS4quaWsOeahOW3peS9nOaMh+S7pO+8jOi/meagt+aCqOiDveWkn+e8lui+keWSjOS/neWtmOWug+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHRlbXBvcmFyeSBjaGFuZ2Ugd2lsbCBiZSBjcmVhdGVkIHdoaWNoIGNvbnRhaW5zIHRoZSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICflsIbliJvlu7rkuIDkuKrljIXlkKvov5nkuKrlt6XkvZzmjIfku6TnmoTkuLTml7blj5jmm7TjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHRlbXBvcmFyeSBjaGFuZ2UgYW5kIG5ldyB3b3Jrb3JkZXIgd2lsbCBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIHdvcmtvcmRlciBoYXMgYmVlbiBzYXZlZCBhcyB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJ+aWsOeahOW3peS9nOaMh+S7pOS/neWtmOS4uuaooeadv+WQju+8jOS4tOaXtuWPmOabtOWSjOaWsOeahOW3peS9nOaMh+S7pOmDveWwhuiiq+iHquWKqOWIoOmZpOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3Ugd2FudCB0byBwcm9jZWVkPyd9ID0gJ+aCqOimgee7p+e7rei/m+ihjOWQl++8nyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNVGVtcGxhdGVPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBJRCd9ID0gJ+aooeadv0lEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29udGVudCd9ID0gJ+e8lui+keWGheWuuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYnknfSA9ICfliJvlu7rkuronOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGJ5J30gPSAn5L+u5pS55Lq6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBUaW1lJ30gPSAn5L+u5pS55pe26Ze0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGVtcGxhdGUgQ29udGVudCd9ID0gJ+e8lui+keaooeadv+WGheWuuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgVGVtcGxhdGUnfSA9ICfliKDpmaTmqKHmnb8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlciB0byAlcyVzJ30gPSAn5bCG5bel5L2c5oyH5Luk5re75Yqg5YiwJXMlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnN0cnVjdGlvbid9ID0gJ+aMh+S7pCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHdvcmtvcmRlciB0eXBlLid9ID0gJ+aXoOaViOeahOW3peS9nOaMh+S7pOexu+Wei+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgcGxhbm5lZCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBwbGFubmVkIGVuZCB0aW1lISd9ID0gJ+iuoeWIkuW8gOWni+aXtumXtOW/hemhu+WcqOiuoeWIkue7k+adn+aXtumXtOS5i+WJjSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBmb3JtYXQuJ30gPSAn5peg5pWI55qE5qC85byPLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgV29ya29yZGVyIFRlbXBsYXRlJ30gPSAn6YCJ5oup5bel5L2c5oyH5Luk5qih5p2/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZ2VudAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBXb3Jrb3JkZXIgQWdlbnQgb2YgJXMlcyd9ID0gJ+e8lui+keW3peS9nOaMh+S7pCVzJXPnmoTmnI3liqHkurrlkZgnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckRlbGV0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHdvcmtvcmRlcj8nfSA9ICfmgqjnnJ/nmoTmg7PopoHliKDpmaTov5nkuKrlt6XkvZzmjIfku6TlkJc/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gbm90IGRlbGV0ZSB0aGlzIFdvcmtvcmRlci4gSXQgaXMgdXNlZCBpbiBhdCBsZWFzdCBvbmUgQ29uZGl0aW9uISd9ID0KICAgICAgICAn5L2g5peg5rOV5Yig6Zmk6L+Z5Liq5bel5L2c5Y2V44CC6Iez5bCR5pyJ5LiA5Liq5p2h5Lu255So5Yiw5LqG5a6DISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIFdvcmtvcmRlciBpcyB1c2VkIGluIHRoZSBmb2xsb3dpbmcgQ29uZGl0aW9uKHMpJ30gPSAn5q2k5bel5L2c5oyH5Luk5Ye6546w5Zyo5LiL5YiX5p2h5Lu25LitJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0ICVzJXMtJXMnfSA9ICfnvJbovpElcyVzLSVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgZm9sbG93aW5nIHdvcmtvcmRlcnMgYWNjb3JkaW5nbHknfSA9ICfnm7jlupTnmoTnp7vliqjlt6XkvZzmjIfku6QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhlIHBsYW5uZWQgZW5kIHRpbWUgb2YgdGhpcyB3b3Jrb3JkZXIgaXMgY2hhbmdlZCwgdGhlIHBsYW5uZWQgc3RhcnQgdGltZXMgb2YgYWxsIGZvbGxvd2luZyB3b3Jrb3JkZXJzIHdpbGwgYmUgY2hhbmdlZCBhY2NvcmRpbmdseSd9ID0KICAgICAgICAn5aaC5p6c6K+l5bel5L2c5oyH5Luk55qE6K6h5YiS57uT5p2f5pe26Ze05pS55Y+Y5LqG77yM5omA5pyJ5ZCO57ut5bel5L2c5oyH5Luk55qE6K6h5YiS5byA5aeL5pe26Ze05bCG55u45bqU55qE5pS55Y+YJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMtJXMnfSA9ICclcyVzLSVz5Y6G5Y+yJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJSZXBvcnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUmVwb3J0IG9mICVzJXMtJXMnfSA9ICfnvJbovpElcyVzLSVz55qE5oql5ZGKJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydCd9ID0gJ+aKpeWRiic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWN0dWFsIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgdGltZSEnfSA9ICflrp7pmYXlvIDlp4vml7bpl7Tlv4XpobvlnKjlrp7pmYXnu5PmnZ/ml7bpl7TkuYvliY0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBhY3R1YWwgc3RhcnQgdGltZSBtdXN0IGJlIHNldCwgd2hlbiB0aGUgYWN0dWFsIGVuZCB0aW1lIGlzIHNldCEnfSA9CiAgICAgICAgJ+iuvue9ruWunumZhee7k+adn+aXtumXtOWQjuW/hemhu+iuvue9ruWunumZheW8gOWni+aXtumXtCEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRha2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgQWdlbnQnfSA9ICflvZPliY3nmoTmnI3liqHkurrlkZgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIHRha2UgdGhpcyB3b3Jrb3JkZXI/J30gPSAn5oKo55yf55qE5oOz6KaB5Yig6Zmk6L+Z5Liq5bel5L2c5oyH5Luk5ZCXPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgV29ya29yZGVyIGFzIFRlbXBsYXRlJ30gPSAn5L+d5a2Y5bel5L2c5oyH5Luk5Li65qih5p2/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBvcmlnaW5hbCB3b3Jrb3JkZXIgKGFuZCBzdXJyb3VuZGluZyBjaGFuZ2UpJ30gPSAn5Yig6Zmk5Y6f5aeL5bel5L2c5oyH5Luk77yI5ZKM55u45YWz55qE5Y+Y5pu077yJJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgSW5mb3JtYXRpb24nfSA9ICflt6XkvZzmjIfku6Tkv6Hmga8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5rbm93biBub3RpZmljYXRpb24gJXMhJ30gPSAn5pyq55+l55qE6YCa55+lJXPvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgd2FzIGFuIGVycm9yIGNyZWF0aW5nIHRoZSBub3RpZmljYXRpb24uJ30gPSAn5Yib5bu66YCa55+l5pe25Ye6546w5LiA5Liq6ZSZ6K+v44CCJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBJVFNNIENoYW5nZXMnfSA9ICfmpoLop4jvvJrlj5jmm7QnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUFkZC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IHdpdGggVGlja2V0SUQgJXMgZG9lcyBub3QgZXhpc3QhJ30gPSAnVGlja2V0SUTkuLolc+eahOW3peWNleS4jeWtmOWcqO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaXNzaW5nIHN5c2NvbmZpZyBvcHRpb24gIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIhJ30gPQogICAgICAgICfns7vnu5/phY3nva7pgInpobkiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIue8uuWkse+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIGNoYW5nZSEnfSA9ICfkuI3og73mt7vliqDlj5jmm7TvvIEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUFkZEZyb21UZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSBjaGFuZ2UgZnJvbSB0ZW1wbGF0ZSEnfSA9ICfkuI3og73ku47mqKHmnb/liJvlu7rlj5jmm7TvvIEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBDaGFuZ2VJRCBpcyBnaXZlbiEnfSA9ICfmsqHmnInmjIflrppDaGFuZ2VJRO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjaGFuZ2UgZm91bmQgZm9yIGNoYW5nZUlEICVzLid9ID0gJ+ayoeacieaJvuWIsENoYW5nZUlE5Li6JXPnmoTlj5jmm7TjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIENBQiBvZiBjaGFuZ2UgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICfkuI3og73luo/liJfljJblj5jmm7TnmoRDQUIiJXMi44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgdGhlIHRlbXBsYXRlLid9ID0gJ+S4jeiDvea3u+WKoOaooeadv+OAgic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAn5pWw5o2u5bqT5Lit5rKh5pyJ5om+5Yiw5Y+Y5pu0IiVzIu+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIENvbmRpdGlvbklEICVzISd9ID0gJ+S4jeiDveWIoOmZpENvbmRpdGlvbklE5Li6JXPnmoTmnaHku7bvvIEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vICVzIGlzIGdpdmVuISd9ID0gJ+ayoeacieaMh+WumiVz77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBjcmVhdGUgbmV3IGNvbmRpdGlvbiEnfSA9ICfkuI3og73liJvlu7rmlrDnmoTmnaHku7bvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBDb25kaXRpb25JRCAlcyEnfSA9ICfkuI3og73mm7TmlrBDb25kaXRpb25JROS4uiVz55qE5p2h5Lu277yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgRXhwcmVzc2lvbklEICVzISd9ID0gJ+S4jeiDveabtOaWsEV4cHJlc3Npb25JROS4uiVz55qE6KGo6L6+5byP77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgbmV3IEV4cHJlc3Npb24hJ30gPSAn5LiN6IO95re75Yqg5paw55qE6KGo6L6+5byP77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCB1cGRhdGUgQWN0aW9uSUQgJXMhJ30gPSAn5LiN6IO95pu05pawQWN0aW9uSUTkuLolc+eahOaTjeS9nO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgYWRkIG5ldyBBY3Rpb24hJ30gPSAn5LiN6IO95re75Yqg5paw55qE5pON5L2c77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgRXhwcmVzc2lvbklEICVzISd9ID0gJ+S4jeiDveWIoOmZpEV4cHJlc3Npb25JROS4uiVz55qE6KGo6L6+5byP77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQWN0aW9uSUQgJXMhJ30gPSAn5LiN6IO95Yig6ZmkQWN0aW9uSUTkuLolc+eahOaTjeS9nO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcjogVW5rbm93biBmaWVsZCB0eXBlICIlcyIhJ30gPSAn6ZSZ6K+v77ya5pyq55+l55qE5a2X5q6157G75Z6LIiVzIu+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25JRCAlcyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIGdpdmVuIENoYW5nZUlEICVzISd9ID0gJ0V4cHJlc3Npb25JROS4uiVz55qE6KGo6L6+5byP5LiN5bGe5LqO5oyH5a6a55qE5Y+Y5pu0SUQgJXPvvIEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlICIlcyIgZG9lcyBub3QgaGF2ZSBhbiBhbGxvd2VkIGNoYW5nZSBzdGF0ZSB0byBiZSBkZWxldGVkISd9ID0KICAgICAgICAn5Y+Y5pu0IiVzIuayoeacieWcqOS4gOS4quWFgeiuuOWIoOmZpOeahOWPmOabtOeKtuaAge+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSBjaGFuZ2VJRCAlcyEnfSA9ICfkuI3og73liKDpmaTlj5jmm7RJROS4uiVz55qE5Y+Y5pu077yBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSEnfSA9ICfkuI3og73mm7TmlrDlj5jmm7TvvIEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJ+S4jeiDveaYvuekuuWOhuWPsu+8jOWboOS4uuayoeacieaMh+WumuWPmOabtElE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAn5pWw5o2u5bqT5Lit5rKh5pyJ5om+5Yiw5Y+Y5pu0IiVzIu+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmtub3duIHR5cGUgIiVzIiBlbmNvdW50ZXJlZCEnfSA9ICfpgYfliLDkuobmnKrnn6XnmoTnsbvlnosiJXMi77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBIaXN0b3J5J30gPSAn5Y+Y5pu05Y6G5Y+yJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VIaXN0b3J5Wm9vbS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSB6b29tLCBubyBIaXN0b3J5RW50cnlJRCBpcyBnaXZlbiEnfSA9ICfkuI3og73mmL7npLrljoblj7Lor6bmg4XvvIzlm6DkuLrmsqHmnInmjIflrppIaXN0b3J5RW50cnlJRO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5RW50cnkgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAn5pWw5o2u5bqT5Lit5rKh5pyJ5om+5Yiw5Y6G5Y+y5p2h55uuICIlcyLvvIEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29ucy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UgQ0FCIGZvciBDaGFuZ2UgJXMhJ30gPSAn5LiN6IO95pu05paw5Y+Y5pu0JXPnmoTlj5jmm7RDQULvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UgJXMhJ30gPSAn5LiN6IO95pu05paw5Y+Y5pu0JXPvvIEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU1hbmFnZXIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2VNYW5hZ2VyJ30gPSAn5qaC6KeI77ya5Y+Y5pu057uP55CGJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IENBQid9ID0gJ+amguiniO+8muaIkeeahENBQic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgQ2hhbmdlcyd9ID0gJ+amguiniO+8muaIkeeahOWPmOabtCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgV29ya29yZGVycyd9ID0gJ+amguiniO+8muaIkeeahOW3peS9nOaMh+Wumic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUElSLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUElSJ30gPSAn5qaC6KeI77yaUElS77yI5a6e5pa95ZCO5a6h5p+l77yJJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQU0EucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBQU0EnfSA9ICfmpoLop4jvvJpQU0HvvIjorqHliJLmnI3liqHlj6/nlKjmgKfvvIknOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAn5pWw5o2u5bqT5Lit5rKh5pyJ5om+5Yiw5bel5L2c5oyH5LukIiVzIu+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgdGhlIHdvcmtvcmRlciBpcyBub3QgYXR0YWNoZWQgdG8gYSBjaGFuZ2UhJ30gPQogICAgICAgICfkuI3og73liJvlu7rovpPlh7rvvIzlm6DkuLrov5nkuKrlt6XkvZzmjIfku6TmsqHmnInpmYTliqDliLDkuIDkuKrlj5jmm7TkuIrvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGNyZWF0ZSBvdXRwdXQsIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJ+S4jeiDveWIm+W7uui+k+WHuu+8jOWboOS4uuayoeacieaMh+WumuWPmOabtElE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gY2hhbmdlIHRpdGxlJ30gPSAn5pyq55+l55qE5Y+Y5pu05qCH6aKYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyJ30gPSAn5bel5L2c5oyH5LukJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gd29ya29yZGVyIHRpdGxlJ30gPSAn5pyq55+l55qE5bel5L2c5oyH5Luk5qCH6aKYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIE92ZXJ2aWV3ICglcyknfSA9ICflt6XkvZzmjIfku6TmpoLop4jvvIglc++8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkU3RhcnRUaW1lJ30gPSAn6K6h5YiS5byA5aeL5pe26Ze0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWRFbmRUaW1lJ30gPSAn6K6h5YiS57uT5p2f5pe26Ze0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbFN0YXJ0VGltZSd9ID0gJ+WunumZheW8gOWni+aXtumXtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxFbmRUaW1lJ30gPSAn5a6e6ZmF57uT5p2f5pe26Ze0JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VSZXNldC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHJlc2V0IFdvcmtPcmRlciAlcyBvZiBDaGFuZ2UgJXMhJ30gPSAn5LiN6IO96YeN572u5bel5L2c5oyH5LukJXPvvIjlsZ7kuo7lj5jmm7Qlc++8ie+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gcmVzZXQgQ2hhbmdlICVzISd9ID0gJ+S4jeiDvemHjee9ruWPmOabtCVz77yBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VTY2hlZHVsZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IENoYW5nZSBTY2hlZHVsZSd9ID0gJ+amguiniO+8muWPmOabtOiuoeWIkic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlU2VhcmNoLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2VhcmNoJ30gPSAn5Y+Y5pu05pCc57SiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZVRpdGxlJ30gPSAn5Y+Y5pu05qCH6aKYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlcnMnfSA9ICflt6XkvZzmjIfku6QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlU3RhdGUnfSA9ICflj5jmm7TnirbmgIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCBSZXN1bHQnfSA9ICflj5jmm7TmkJzntKLnu5PmnpwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE51bWJlcid9ID0gJ+WPmOabtOe8luWPtyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrIE9yZGVyIFRpdGxlJ30gPSAn5bel5L2c5oyH5Luk5qCH6aKYJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBEZXNjcmlwdGlvbid9ID0gJ+WPmOabtOaPj+i/sCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSnVzdGlmaWNhdGlvbid9ID0gJ+WPmOabtOeQhueUsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSW5zdHJ1Y3Rpb24nfSA9ICflt6XkvZzmjIfku6Tor7TmmI4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFJlcG9ydCd9ID0gJ+W3peS9nOaMh+S7pOaKpeWRiic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgUHJpb3JpdHknfSA9ICflj5jmm7TkvJjlhYjnuqcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEltcGFjdCd9ID0gJ+WPmOabtOW9seWTjSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAn5Yib5bu65Lq6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBTdGF0ZSd9ID0gJ+W3peS9nOaMh+S7pOeKtuaAgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgVHlwZSd9ID0gJ+W3peS9nOaMh+S7pOexu+Weiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgQWdlbnQnfSA9ICflt6XkvZzmjIfku6TmnI3liqHkurrlkZgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmVmb3JlJ30gPSAn5ZyoLi4u5LmL5YmNJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJ+S4jeiDveW6j+WIl+WMluWPmOabtCIlcyLjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSB0aGUgdGVtcGxhdGUgIiVzIi4nfSA9ICfkuI3og73mm7TmlrDmqKHmnb8iJXMi44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgY2hhbmdlICIlcyIuJ30gPSAn5LiN6IO95Yig6Zmk5Y+Y5pu0IiVzIuOAgic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjaGFuZ2UgY2FuXCd0IGJlIG1vdmVkLCBhcyBpdCBoYXMgbm8gd29ya29yZGVycy4nfSA9ICfkuI3og73np7vliqjlj5jmm7TvvIzlm6DkuLrlroPmsqHmnInlt6XkvZzmjIfku6TjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIGZpcnN0Lid9ID0gJ+mmluWFiOa3u+WKoOS4gOadoeW3peS9nOaMh+S7pOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgbW92ZSBhIGNoYW5nZSB3aGljaCBhbHJlYWR5IGhhcyBzdGFydGVkISd9ID0gJ+S4jeiDveenu+WKqOS4gOS4quW3sue7j+W8gOWni+eahOWPmOabtO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgbW92ZSB0aGUgaW5kaXZpZHVhbCB3b3Jrb3JkZXJzIGluc3RlYWQuJ30gPSAn6K+355So56e75Yqo5Y2V54us55qE5bel5L2c5oyH5Luk5p2l5Luj5pu/44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjdXJyZW50ICVzIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLid9ID0gJ+S4jeiDveehruWumuW9k+WJjeeahCVz44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSAlcyBvZiBhbGwgd29ya29yZGVycyBoYXMgdG8gYmUgZGVmaW5lZC4nfSA9ICclc+eahOaJgOacieW3peS9nOaMh+S7pOW/hemhu+iiq+WumuS5ieWlveOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gbW92ZSB0aW1lIHNsb3QgZm9yIHdvcmtvcmRlciAjJXMhJ30gPSAn5LiN6IO956e75Yqo5bel5L2c5oyH5LukIyVz55qE5pe26Ze06L2077yBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgJXMgcGVybWlzc2lvbiEnfSA9ICfkvaDpnIDopoElc+adg+mZkO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBUZW1wbGF0ZUlEIGlzIGdpdmVuISd9ID0gJ+ayoeacieaMh+Wumuaooeadv0lE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlISd9ID0gJ+aVsOaNruW6k+S4reayoeacieaJvuWIsOaooeadvyIlcyLvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgdGVtcGxhdGUgJXMhJ30gPSAn5LiN6IO95Yig6Zmk5qih5p2/JXPvvIEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlRWRpdC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBUZW1wbGF0ZSAlcyEnfSA9ICfkuI3og73mm7TmlrDmqKHmnb8lc++8gSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICIlcyIhJ30gPSAn5LiN6IO95pu05paw5qih5p2/IiVzIu+8gSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSBjaGFuZ2UhJ30gPSAn5LiN6IO95Yib5bu65Y+Y5pu077yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgd29ya29yZGVyIGZyb20gdGVtcGxhdGUhJ30gPSAn5LiN6IO95LuO5qih5p2/5Yib5bu65bel5L2c5oyH5Luk77yBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogVGVtcGxhdGUnfSA9ICfmpoLop4jvvJrmqKHmnb8nOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFkZC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMgb24gdGhlIGNoYW5nZSEnfSA9ICfkvaDpnIDopoHmnInlj5jmm7TnmoQlc+adg+mZkO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIHdvcmtvcmRlciEnfSA9ICfkuI3og73mt7vliqDlt6XkvZzmjIfku6TvvIEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFnZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICfmsqHmnInmjIflrprlt6XkvZzmjIfku6RJRO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gc2V0IHRoZSB3b3Jrb3JkZXIgYWdlbnQgb2YgdGhlIHdvcmtvcmRlciAiJXMiIHRvIGVtcHR5ISd9ID0KICAgICAgICAn5LiN6IO96K6+572u5bel5L2c5oyH5LukIiVzIueahOacjeWKoeS6uuWRmOS4uuepuu+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIHRoZSB3b3Jrb3JkZXIgIiVzIiEnfSA9ICfkuI3og73mm7TmlrDlt6XkvZzmjIfku6QiJXMi77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBmaW5kIENoYW5nZSBmb3IgV29ya09yZGVyICVzISd9ID0gJ+aJvuS4jeWIsOW3peS9nOaMh+S7pCAlc+eahOWPmOabtO+8gSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSB3b3Jrb3JkZXIgJXMhJ30gPSAn5LiN6IO95Yig6Zmk5bel5L2c5oyH5LukJXPvvIEnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgV29ya09yZGVyICVzISd9ID0gJ+S4jeiDveabtOaWsOW3peS9nOaMh+S7pCVz77yBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5LCBhcyBubyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICfkuI3og73mmL7npLrljoblj7LvvIzlm6DkuLrmsqHmnInmjIflrprlt6XkvZzmjIfku6RJRO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJ+aVsOaNruW6k+S4reayoeacieaJvuWIsOW3peS9nOaMh+S7pCIlcyLvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVySGlzdG9yeTo6J30gPSAn5bel5L2c5oyH5Luk5Y6G5Y+yOjonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEhpc3RvcnknfSA9ICflt6XkvZzmjIfku6Tljoblj7InOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IGVudHJ5ICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnfSA9ICfmlbDmja7lupPkuK3msqHmnInmib7liLDljoblj7LmnaHnm64iJXMi77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBIaXN0b3J5IFpvb20nfSA9ICflt6XkvZzmjIfku6Tljoblj7Lor6bmg4UnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlclRha2UucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB0YWtlIHRoZSB3b3Jrb3JkZXIgJXMhJ30gPSAn5LiN6IO95omn6KGM5bel5L2c5oyH5LukICVz77yBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHdvcmtvcmRlciAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLid9ID0gJ+S4jeiDveW6j+WIl+WMluW3peS9nOaMh+S7pCIlcyLjgIInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXQvSVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBjb25maWcgb3B0aW9uICVzISd9ID0gJ+mcgOimgemFjee9riVz6YCJ6aG577yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZyBvcHRpb24gJXMgbmVlZHMgdG8gYmUgYSBIQVNIIHJlZiEnfSA9ICfphY3nva7pgInpobklc+mcgOimgeaYr+S4gOS4quWTiOW4jOW8leeUqO+8gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBjb25maWcgb3B0aW9uIGZvdW5kIGZvciB0aGUgdmlldyAiJXMiISd9ID0gJ+ayoeacieaJvuWIsOinhuWbvuKAnCVz4oCd55qE6YWN572u6YCJ6aG577yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpdGxlOiAlcyB8IFR5cGU6ICVzJ30gPSAn5qCH6aKY77yaJXMgfCDnsbvlnovvvJolcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlDQUIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IENBQnMnfSA9ICfmiJHnmoRDQUInOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFyL015Q2hhbmdlcy5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgQ2hhbmdlcyd9ID0gJ+aIkeeahOWPmOabtCc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBXb3JrIE9yZGVycyd9ID0gJ+aIkeeahOW3peS9nOaMh+S7pCc7CgogICAgIyBEYXRhYmFzZSBYTUwgRGVmaW5pdGlvbjogSVRTTUNoYW5nZU1hbmFnZW1lbnQuc29wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVxdWVzdGVkJ30gPSAn6K+35rGC55qEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3BlbmRpbmcgYXBwcm92YWwnfSA9ICflvoXlrqHmibknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVqZWN0ZWQnfSA9ICfooqvmi5Lnu50nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYXBwcm92ZWQnfSA9ICfpgJrov4flrqHmibknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaW4gcHJvZ3Jlc3MnfSA9ICflpITnkIbkuK0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGVuZGluZyBwaXInfSA9ICfnrYnlvoXlrp7mlr3lkI7lrqHmn6UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnc3VjY2Vzc2Z1bCd9ID0gJ+aIkOWKnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydmYWlsZWQnfSA9ICflpLHotKUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY2FuY2VsZWQnfSA9ICflj5bmtognOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmV0cmFjdGVkJ30gPSAn5pKk5ZueJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2NyZWF0ZWQnfSA9ICfliJvlu7rkuo4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWNjZXB0ZWQnfSA9ICfmjqXlj5cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncmVhZHknfSA9ICflsLHnu6onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYXBwcm92YWwnfSA9ICflrqHmibknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnd29ya29yZGVyJ30gPSAn5bel5L2c5oyH5LukJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JhY2tvdXQnfSA9ICflm57pgIAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZGVjaXNpb24nfSA9ICflhrPlrponOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGlyJ30gPSAnUElSICjlrp7mlr3lkI7lrqHmn6UpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzJ30gPSAn5pivJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCd9ID0gJ+S4jeaYryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBlbXB0eSd9ID0gJ+S4uuepuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBub3QgZW1wdHknfSA9ICfkuI3kuLrnqbonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgZ3JlYXRlciB0aGFuJ30gPSAn5aSn5LqOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGxlc3MgdGhhbid9ID0gJ+Wwj+S6jic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBiZWZvcmUnfSA9ICfmmK/lnKguLi7kuYvliY0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgYWZ0ZXInfSA9ICfmmK/lnKguLi7kuYvlkI4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY29udGFpbnMnfSA9ICfljIXlkKsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGNvbnRhaW5zJ30gPSAn5LiN5YyF5ZCrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZ2lucyB3aXRoJ30gPSAn5LulLi4u5byA5aeLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2VuZHMgd2l0aCd9ID0gJ+S7pS4uLue7k+adnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzZXQnfSA9ICforr7nva4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2YgdGhlIGFnZW50cyB3aG8gaGF2ZSBwZXJtaXNzaW9uIHRvIHRha2Ugd29ya29yZGVycy4gS2V5IGlzIGEgbG9naW4gbmFtZS4gQ29udGVudCBpcyAwIG9yIDEuJ30gPQogICAgICAgICfmnInmnYPpmZDmjqXmiYvlt6XkvZzmjIfku6TnmoTmnI3liqHkurrlkZjliJfooajjgILigJzplK7igJ3mmK/nmbvlvZXlkI3vvIzigJzlgLzigJ3mmK8w5oiWMeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2Ygd29ya29yZGVyIHN0YXRlcywgYXQgd2hpY2ggdGhlIEFjdHVhbFN0YXJ0VGltZSBvZiBhIHdvcmtvcmRlciB3aWxsIGJlIHNldCBpZiBpdCB3YXMgZW1wdHkgYXQgdGhpcyBwb2ludC4nfSA9CiAgICAgICAgJ+W3peS9nOaMh+S7pOeKtuaAgeWIl+ihqO+8jOW3peS9nOaMh+S7pOeahEFjdHVhbFN0YXJ0VGltZe+8iOWunumZheW8gOWni+aXtumXtO+8ieWwhuiiq+iuvue9ru+8iOWmguaenOi/meaXtuWAmei/mOayoeacieiuvue9rueahOivne+8ieOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyJ30gPSAn5re75Yqg5bel5L2c5oyH5LukJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBXb3Jrb3JkZXIgKGZyb20gVGVtcGxhdGUpJ30gPSAn5LuO5qih5p2/5re75Yqg5bel5L2c5oyH5LukJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIGNoYW5nZSBmcm9tIHRlbXBsYXRlLid9ID0gJ+S7juaooeadv+a3u+WKoOS4gOS4quWPmOabtOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBjaGFuZ2UuJ30gPSAn5re75Yqg5LiA5Liq5Y+Y5pu044CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciAoZnJvbSB0ZW1wbGF0ZSkgdG8gdGhlIGNoYW5nZS4nfSA9ICfku47mqKHmnb/mt7vliqDlj5jmm7TnmoTlt6XkvZzmjIfku6TjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgd29ya29yZGVyIHRvIHRoZSBjaGFuZ2UuJ30gPSAn5re75Yqg5Y+Y5pu055qE5bel5L2c5oyH5LukJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBmcm9tIHRlbXBsYXRlJ30gPSAn5LuO5qih5p2/5re75YqgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkbWluIG9mIHRoZSBDSVAgbWF0cml4Lid9ID0gJ+euoeeQhkNJUOefqemYteOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgc3RhdGUgbWFjaGluZS4nfSA9ICfnrqHnkIbnirbmgIHmqKHlvI/ovazmjaLjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlIGFkdmlzb3J5IGJvYXJkcy4nfSA9CiAgICAgICAgJ+afpeeci0NBQuaVsOmHj+eahOacjeWKoeS6uuWRmOeVjOmdoumAmuefpeaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBjaGFuZ2VzIG1hbmFnZWQgYnkgdGhlIHVzZXIuJ30gPQogICAgICAgICfmn6XnnIvlj5jmm7Tnu4/nkIbnrqHnkIbnmoTlj5jmm7TmlbDnmoTmnI3liqHkurrlkZjnlYzpnaLpgJrnn6XmqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlcy4nfSA9CiAgICAgICAgJ+afpeeci+WPmOabtOaVsOmHj+eahOacjeWKoeS6uuWRmOeVjOmdoumAmuefpeaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiB3b3Jrb3JkZXJzLid9ID0KICAgICAgICAn5p+l55yL5bel5L2c5oyH5Luk5pWw6YeP55qE5pyN5Yqh5Lq65ZGY55WM6Z2i6YCa55+l5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NBQiBNZW1iZXIgU2VhcmNoJ30gPSAnQ0FC5oiQ5ZGY5pCc57SiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50IHRvb2xiYXJzLiBEZWZhdWx0OiAzIGhvdXJzICgxODAgbWludXRlcykuJ30gPQogICAgICAgICflj5jmm7TnrqHnkIblt6XlhbfmoI/nmoTnvJPlrZjml7bpl7TvvIjljZXkvY3vvJrliIbpkp/vvInjgILpu5jorqTvvJoz5bCP5pe277yIMTgw5YiG6ZKf77yJ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50LiBEZWZhdWx0OiA1IGRheXMgKDcyMDAgbWludXRlcykuJ30gPQogICAgICAgICflj5jmm7TnrqHnkIbnmoTnvJPlrZjml7bpl7TvvIjljZXkvY3vvJrliIbpkp/vvInjgILpu5jorqTvvJo15aSp77yINzIwMOWIhumSn++8ieOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgQ0FCIFRlbXBsYXRlcyd9ID0gJ+WPmOabtENBQuaooeadvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSGlzdG9yeS4nfSA9ICflj5jmm7Tljoblj7InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEludm9sdmVkIFBlcnNvbnMuJ30gPSAn5Y+Y5pu05raJ5Y+K55qE5Lq65ZGY44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAn5Y+Y5pu05qaC6KeI566A5rSB5qih5byP6ZmQ5Yi2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBPdmVydmlldy4nfSA9ICflj5jmm7TmpoLop4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFByaW50Lid9ID0gJ+aJk+WNsOWPmOabtOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU2NoZWR1bGUnfSA9ICflj5jmm7TorqHliJInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNjaGVkdWxlLid9ID0gJ+WPmOabtOiuoeWIkuihqOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgWm9vbS4nfSA9ICflj5jmm7Tor6bmg4XjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFuZCBXb3Jrb3JkZXIgVGVtcGxhdGVzJ30gPSAn5Y+Y5pu05ZKM5bel5L2c5oyH5Luk5qih5p2/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhbmQgd29ya29yZGVyIHRlbXBsYXRlcyBlZGl0ZWQgYnkgdGhpcyB1c2VyLid9ID0gJ+acrOeUqOaIt+e8lui+keeahOWPmOabtOaooeadv+WSjOW3peS9nOaMh+S7pOaooeadv+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYXJlYS4nfSA9ICflj5jmm7TljLrln5/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGludm9sdmVkIHBlcnNvbnMgb2YgdGhlIGNoYW5nZS4nfSA9ICfmm7TmjaLlj5jmm7Tmtonlj4rnmoTnm7jlhbPkurrlkZjjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGxpbWl0IHBlciBwYWdlIGZvciBDaGFuZ2UgT3ZlcnZpZXcgIlNtYWxsIi4nfSA9ICflj5jmm7TmpoLop4jnroDmtIHmqKHlvI/mr4/pobXlj5jmm7TmlbDpmZDliLbjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHNlYXJjaCBiYWNrZW5kIHJvdXRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ+acjeWKoeS6uuWRmOeVjOmdouWPmOabtOaQnOe0ouWQjuerr+i3r+eUsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb24gRWRpdCd9ID0gJ+adoeS7tue8lui+kSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb24gT3ZlcnZpZXcnfSA9ICfmnaHku7bmpoLop4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlIHdoaWNoIHNjcmVlbiBzaG91bGQgYmUgc2hvd24gYWZ0ZXIgYSBuZXcgd29ya29yZGVyIGhhcyBiZWVuIGNyZWF0ZWQuJ30gPQogICAgICAgICfphY3nva7liJvlu7rmlrDlt6XkvZzmjIfku6TlkI7mmL7npLrnmoTnlYzpnaLjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlcyBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgd2hlbiBwbGFubmVkIHRoZSBzdGFydCB0aW1lIG9yIG90aGVyIHRpbWUgdmFsdWVzIGhhdmUgYmVlbiByZWFjaGVkL3Bhc3NlZC4nfSA9CiAgICAgICAgJ+mFjee9ruiuoeWIkuW8gOWni+aXtumXtOaIluWFtuWug+aXtumXtOWIsOi+vi/ov4fljrvml7blj5HpgIHpgJrnn6XnmoTpopHnjofjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSd9ID0gJ+WIm+W7uuWPmOabtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgQ2hhbmdlIChmcm9tIFRlbXBsYXRlKSd9ID0gJ+S7juaooeadv+WIm+W7uuWPmOabtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgKGZyb20gdGVtcGxhdGUpIGZyb20gdGhpcyB0aWNrZXQuJ30gPSAn5LuO6L+Z5Liq5bel5Y2V5Yib5bu65LiA5Liq5Y+Y5pu077yI5Y2z5LuO5qih5p2/55qE5pa55byP77yJ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIGNoYW5nZSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJ+S7jui/meS4quW3peWNleWIm+W7uuWPmOabtOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBJVFNNIENoYW5nZSBNYW5hZ2VtZW50IG5vdGlmaWNhdGlvbnMuJ30gPSAn5Yib5bu65ZKM566h55CGSVRTTeWPmOabtOeuoeeQhumAmuefpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHR5cGUgZm9yIGEgd29ya29yZGVyLiBUaGlzIGVudHJ5IG11c3QgZXhpc3QgaW4gZ2VuZXJhbCBjYXRhbG9nIGNsYXNzIFwnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpUeXBlXCcuJ30gPQogICAgICAgICflt6XkvZzmjIfku6TnmoTpu5jorqTnsbvlnovjgILov5nkuKrmnaHnm67lv4XpobvlnKjnm67lvZXnsbtcJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6VHlwZVwn5Lit5a2Y5Zyo44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSBBY3Rpb25zIHdoZXJlIGEgc2V0dGluZ3MgYnV0dG9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgbGlua2VkIG9iamVjdHMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgQWN0aW9ucyBtdXN0IGhhdmUgcmVnaXN0ZXJlZCB0aGUgZm9sbG93aW5nIEpTIGFuZCBDU1MgZmlsZXM6IENvcmUuQWxsb2NhdGlvbkxpc3QuY3NzLCBDb3JlLlVJLkFsbG9jYXRpb25MaXN0LmpzLCBDb3JlLlVJLlRhYmxlLlNvcnQuanMsIENvcmUuQWdlbnQuVGFibGVGaWx0ZXJzLmpzIGFuZCBDb3JlLkFnZW50LkxpbmtPYmplY3QuanMuJ30gPQogICAgICAgICflrprkuYnpk77mjqXlr7nosaHlsI/pg6jku7YoTGlua09iamVjdDo6Vmlld01vZGUgPSBcImNvbXBsZXhcIinorr7nva7mjInpkq7kuK3nmoTmk43kvZzjgILor7fms6jmhI/vvIzov5nkupvmk43kvZzlv4Xpobvlt7Lnu4/lnKjku6XkuItKU+WSjENTU+aWh+S7tuS4reazqOWGjO+8mkNvcmUuQWxsb2NhdGlvbkxpc3QuY3Nz44CBQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qc+OAgSBDb3JlLlVJLlRhYmxlLlNvcnQuanPjgIFDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qc+WSjENvcmUuQWdlbnQuTGlua09iamVjdC5qc+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIHNpZ25hbHMgZm9yIGVhY2ggd29ya29yZGVyIHN0YXRlLid9ID0gJ+WumuS5ieavj+S4quW3peS9nOaMh+S7pOeKtuaAgeeahOagh+W/l+S/oeWPt+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgd2hpY2ggY29sdW1ucyBhcmUgc2hvd24gaW4gdGhlIGxpbmtlZCBDaGFuZ2VzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBOb3RlOiBPbmx5IENoYW5nZSBhdHRyaWJ1dGVzIGFyZSBhbGxvd2VkIGZvciBEZWZhdWx0Q29sdW1ucy4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEF2YWlsYWJsZSwgMiA9IEVuYWJsZWQgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJ+WumuS5iemTvuaOpeeahOWPmOabtOWwj+mDqOS7tihMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IinopoHmmL7npLrnmoTliJfjgILms6jmhI/vvJrlj6rmnInlj5jmm7TlsZ7mgKfmiY3og73kvZzkuLrpu5jorqTliJfvvIzlj6/nlKjnmoTorr7nva7lgLzkuLrvvJowID0g56aB55So77yMMSA9IOWPr+eUqO+8jCAyID0g6buY6K6k5ZCv55So44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFdvcmtvcmRlciB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBXb3Jrb3JkZXIgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICflrprkuYnpk77mjqXnmoTlt6XkvZzmjIfku6TlsI/pg6jku7YoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIp6KaB5pi+56S655qE5YiX44CC5rOo5oSP77ya5Y+q5pyJ5bel5L2c5oyH5Luk5bGe5oCn5omN6IO95L2c5Li66buY6K6k5YiX77yM5Y+v55So55qE6K6+572u5YC85Li677yaMCA9IOemgeeUqO+8jDEgPSDlj6/nlKjvvIwgMiA9IOm7mOiupOWQr+eUqOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgY2hhbmdlIGxpc3QuJ30gPQogICAgICAgICflrprkuYnkuIDkuKrmpoLop4jmqKHlnZfvvIzku6XmmL7npLrlj5jmm7TliJfooajnmoTnroDmtIHop4blm77jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHRlbXBsYXRlIGxpc3QuJ30gPQogICAgICAgICflrprkuYnkuIDkuKrmpoLop4jmqKHlnZfvvIzku6XmmL7npLrmqKHmnb/liJfooajnmoTnroDmtIHop4blm77jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBhY2NvdW50ZWQgdGltZS4nfSA9ICflrprkuYnmmK/lkKblj6/ku6XmiZPljbDorrDluJDml7bpl7TjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHByaW50IHRoZSBwbGFubmVkIGVmZm9ydC4nfSA9ICflrprkuYnmmK/lkKblj6/ku6XmiZPljbDorqHliJLlt6XkvZzph4/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiByZWFjaGFibGUgKGFzIGRlZmluZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUpIGNoYW5nZSBlbmQgc3RhdGVzIHNob3VsZCBiZSBhbGxvd2VkIGlmIGEgY2hhbmdlIGlzIGluIGEgbG9ja2VkIHN0YXRlLid9ID0KICAgICAgICAn5a6a5LmJ5piv5ZCm5YWB6K645LiA5Liq6ZSB5a6a54q25oCB55qE5Y+Y5pu05Y+v6L6+5Yiw57uT5p2f54q25oCB77yI5Zyo54q25oCB5qih5byP6L2s5o2i5Lit5a6a5LmJ77yJ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgcmVhY2hhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lKSB3b3Jrb3JkZXIgZW5kIHN0YXRlcyBzaG91bGQgYmUgYWxsb3dlZCBpZiBhIHdvcmtvcmRlciBpcyBpbiBhIGxvY2tlZCBzdGF0ZS4nfSA9CiAgICAgICAgJ+WumuS5ieaYr+WQpuWFgeiuuOS4gOS4qumUgeWumueKtuaAgeeahOW3peS9nOaMh+S7pOWPr+i+vuWIsOe7k+adn+eKtuaAge+8iOWcqOeKtuaAgeaooeW8j+i9rOaNouS4reWumuS5ie+8ieOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBhY2NvdW50ZWQgdGltZSBzaG91bGQgYmUgc2hvd24uJ30gPSAn5a6a5LmJ5piv5ZCm5pi+56S66K6w5biQ5pe26Ze044CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzIHNob3VsZCBiZSBzZXQuJ30gPSAn5a6a5LmJ77yI5bel5L2c5oyH5Luk5oql5ZGK5Lit77yJ5piv5ZCm6KaB6K6+572u5a6e6ZmF5byA5aeLL+e7k+adn+aXtumXtOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBjaGFuZ2Ugc2VhcmNoIGFuZCB0aGUgd29ya29yZGVyIHNlYXJjaCBmdW5jdGlvbnMgY291bGQgdXNlIHRoZSBtaXJyb3IgREIuJ30gPQogICAgICAgICflrprkuYnlj5jmm7TmkJzntKLlkozlt6XkvZzmjIfku6TmkJzntKLlip/og73mmK/lkKbog73lpJ/kvb/nlKjplZzlg4/mlbDmja7lupPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHN0YXRlIGNhbiBiZSBzZXQgaW4gQWdlbnRJVFNNQ2hhbmdlRWRpdC4nfSA9CiAgICAgICAgJ+WumuS5ieWcqOe8lui+keWPmOabtOaXtuaYr+WQpuiDveWkn+iuvue9ruWPmOabtOeKtuaAgeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBwbGFubmVkIGVmZm9ydCBzaG91bGQgYmUgc2hvd24uJ30gPSAn5a6a5LmJ5piv5ZCm5pi+56S66K6h5YiS5bel5L2c6YeP44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBwcmludCBieSBjdXN0b21lci4nfSA9ICflrprkuYnlrqLmiLfmmK/lkKblj6/ku6XmiZPljbDor7fmsYLml6XmnJ/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNlYXJjaGVkIGJ5IGN1c3RvbWVyLid9ID0KICAgICAgICAn5a6a5LmJ5a6i5oi35piv5ZCm5Y+v5Lul5pCc57Si6K+35rGC5pel5pyf44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzZXQgYnkgY3VzdG9tZXIuJ30gPSAn5a6a5LmJ5a6i5oi35piv5ZCm5Y+v5Lul6K6+572u6K+35rGC5pel5pyf44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzaG93biBieSBjdXN0b21lci4nfSA9ICflrprkuYnlrqLmiLfmmK/lkKblj6/ku6XmmL7npLror7fmsYLml6XmnJ/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHN0YXRlIHNob3VsZCBiZSBzaG93bi4nfSA9ICflrprkuYnmmK/lkKbmmL7npLrlt6XkvZzmjIfku6TnirbmgIHjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHRpdGxlIHNob3VsZCBiZSBzaG93bi4nfSA9ICflrprkuYnmmK/lkKbmmL7npLrlt6XkvZzmjIfku6TmoIfpopjjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBzaG93biBncmFwaCBhdHRyaWJ1dGVzLid9ID0gJ+WumuS5ie+8iOWPmOabtOivpuaDheeql+WPo+W3peS9nOaMh+S7pOWbvu+8ieaYvuekuueahOWbvuW9oueahOWxnuaAp+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoYXQgb25seSBjaGFuZ2VzIGNvbnRhaW5pbmcgV29ya29yZGVycyBsaW5rZWQgd2l0aCBzZXJ2aWNlcywgd2hpY2ggdGhlIGN1c3RvbWVyIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gdXNlIHdpbGwgYmUgc2hvd24uIEFueSBvdGhlciBjaGFuZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJ+WumuS5ieS7heaYvuekuuWPmOabtOS4reWMheWQq+eahOW3peS9nOaMh+S7pOS4reaciSDliLDlrqLmiLfogZTns7vkurrmnInmnYPpmZDkvb/nlKjnmoTmnI3liqEg55qE6ZO+5o6lIOeahOWPmOabtO+8jOS7u+S9leWFtuWug+WPmOabtOmDveS4jeS8muaYvuekuuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSBhbGxvd2VkIHRvIGRlbGV0ZS4nfSA9ICflrprkuYnlhYHorrjliKDpmaTlj5jmm7TnmoTlj5jmm7TnirbmgIHjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn5a6a5LmJXCflj5jmm7RQU0FcJ+amguiniOS4reiDveeUqOS6jui/h+a7pOWZqOeahOWPmOabtOeKtuaAgeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIENoYW5nZSBTY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ+WumuS5iVwn5Y+Y5pu06K6h5YiSXCfmpoLop4jkuK3og73nlKjkuo7ov4fmu6TlmajnmoTlj5jmm7TnirbmgIHjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9CiAgICAgICAgJ+WumuS5iVwn5oiR55qEQ0FCXCfmpoLop4jkuK3og73nlKjkuo7ov4fmu6TlmajnmoTlj5jmm7TnirbmgIHjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPQogICAgICAgICflrprkuYlcJ+aIkeeahOWPmOabtFwn5qaC6KeI5Lit6IO955So5LqO6L+H5ruk5Zmo55qE5Y+Y5pu054q25oCB44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICflrprkuYlcJ+WPmOabtOe7j+eQhlwn5qaC6KeI5Lit6IO955So5LqO6L+H5ruk5Zmo55qE5Y+Y5pu054q25oCB44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn5a6a5LmJXCflj5jmm7RcJ+amguiniOS4reiDveeUqOS6jui/h+a7pOWZqOeahOWPmOabtOeKtuaAgeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ+WumuS5ieWuouaIt1wn5Y+Y5pu06K6h5YiSXCfmpoLop4jkuK3og73nlKjkuo7ov4fmu6TlmajnmoTlj5jmm7TnirbmgIHjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBjaGFuZ2UgdGl0bGUgZm9yIGEgZHVtbXkgY2hhbmdlIHdoaWNoIGlzIG5lZWRlZCB0byBlZGl0IGEgd29ya29yZGVyIHRlbXBsYXRlLid9ID0KICAgICAgICAn5a6a5LmJ57yW6L6R5bel5L2c5oyH5Luk5pe25Yib5bu655qE5Li05pe25Y+Y5pu055qE6buY6K6k5qCH6aKY44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9CiAgICAgICAgJ+WumuS5iVwn5Y+Y5pu0UFNBXCfmpoLop4jkuK3pu5jorqTnmoTmjpLluo/mnaHku7bjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJ+WumuS5iVwn5Y+Y5pu057uP55CGXCfmpoLop4jkuK3pu5jorqTnmoTmjpLluo/mnaHku7bjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAn5a6a5LmJXCflj5jmm7RcJ+amguiniOS4rem7mOiupOeahOaOkuW6j+adoeS7tuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgaW4gdGhlIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ+WumuS5iVwn5Y+Y5pu06K6h5YiSXCfmpoLop4jkuK3pu5jorqTnmoTmjpLluo/mnaHku7bjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNBQiBvdmVydmlldy4nfSA9CiAgICAgICAgJ+WumuS5iVwn5oiR55qEQ0FCXCfmpoLop4jkuK3pu5jorqTnmoTlj5jmm7TmjpLluo/mnaHku7bjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPQogICAgICAgICflrprkuYlcJ+aIkeeahOWPmOabtFwn5qaC6KeI5Lit6buY6K6k55qE5Y+Y5pu05o6S5bqP5p2h5Lu244CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn5a6a5LmJXCfmiJHnmoTlt6XkvZzmjIfku6RcJ+amguiniOS4rem7mOiupOeahOWPmOabtOaOkuW6j+adoeS7tuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgY3JpdGVyaWEgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9CiAgICAgICAgJ+WumuS5iVwnUElS77yI5a6e5pa95ZCO5a6h5p+l77yJXCfmpoLop4jkuK3pu5jorqTnmoTlj5jmm7TmjpLluo/mnaHku7bjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICflrprkuYnlrqLmiLdcJ+WPmOabtOiuoeWIklwn5qaC6KeI5Lit6buY6K6k55qE5Y+Y5pu05o6S5bqP5p2h5Lu244CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICflrprkuYlcJ+aooeadv1wn5qaC6KeI5Lit6buY6K6k55qE5Y+Y5pu05o6S5bqP5p2h5Lu244CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPSAn5a6a5LmJXCfmiJHnmoRDQUJcJ+amguiniOS4rem7mOiupOeahOaOkuW6j+mhuuW6j+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9ICflrprkuYlcJ+aIkeeahOWPmOabtFwn5qaC6KeI5Lit6buY6K6k55qE5o6S5bqP6aG65bqP44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAn5a6a5LmJXCfmiJHnmoTlt6XkvZzmjIfku6RcJ+amguiniOS4rem7mOiupOeahOaOkuW6j+mhuuW6j+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIFBJUiBvdmVydmlldy4nfSA9ICflrprkuYlcJ1BJUu+8iOWunuaWveWQjuWuoeafpe+8iVwn5qaC6KeI5Lit6buY6K6k55qE5o6S5bqP6aG65bqP44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9ICflrprkuYlcJ+WPmOabtFBTQVwn5qaC6KeI5Lit6buY6K6k55qE5o6S5bqP6aG65bqP44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICflrprkuYlcJ+WPmOabtOe7j+eQhlwn5qaC6KeI5Lit6buY6K6k55qE5o6S5bqP6aG65bqP44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3Lid9ID0gJ+WumuS5ieWPmOabtOamguiniOS4rem7mOiupOeahOaOkuW6j+mhuuW6j+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ+WumuS5iVwn5Y+Y5pu06K6h5YiSXCfmpoLop4jkuK3pu5jorqTnmoTmjpLluo/pobrluo/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICflrprkuYnlrqLmiLfnlYzpnaJcJ+WPmOabtOiuoeWIklwn5qaC6KeI5Lit6buY6K6k55qE5o6S5bqP6aG65bqP44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuJ30gPSAn5a6a5LmJ5qih5p2/5qaC6KeI5Lit6buY6K6k55qE5o6S5bqP6aG65bqP44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjYXRlZ29yeSBvZiBhIGNoYW5nZS4nfSA9ICflrprkuYnkuIDkuKrlj5jmm7Tpo47pmannsbvliKvnmoTpu5jorqTlgLzjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGltcGFjdCBvZiBhIGNoYW5nZS4nfSA9ICflrprkuYnkuIDkuKrlj5jmm7TlvbHlk43nmoTpu5jorqTlgLzjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciBjaGFuZ2UgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJ+WumuS5ieWPmOabtOWxnuaAp+avlOi+g+WAvOWtl+aute+8iOeUqOS6jkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTmnaHku7bnvJbovpHvvInnmoTnsbvlnovvvIzmnInmlYjlgLzmmK/vvJpTZWxlY3Rpb27vvIjpgInmi6nvvInjgIFUZXh077yI5paH5pys77yJ5ZKMRGF0Ze+8iOaXpeacn++8ieOAgiDlpoLmnpzmsqHmnInlrprkuYnnsbvlnovvvIzlrZfmrrXkuI3kvJrooqvmmL7npLrlh7rmnaXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZmllbGQgdHlwZSBvZiBDb21wYXJlVmFsdWUgZmllbGRzIGZvciB3b3Jrb3JkZXIgYXR0cmlidXRlcyB1c2VkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuIFZhbGlkIHZhbHVlcyBhcmUgU2VsZWN0aW9uLCBUZXh0IGFuZCBEYXRlLiBJZiBhIHR5cGUgaXMgbm90IGRlZmluZWQsIHRoZSBmaWVsZCB3aWxsIG5vdCBiZSBzaG93bi4nfSA9CiAgICAgICAgJ+WumuS5ieW3peS9nOaMh+S7pOWxnuaAp+avlOi+g+WAvOWtl+aute+8iOeUqOS6jkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTlj5jmm7TmnaHku7bnvJbovpHvvInnmoTnsbvlnovvvIzmnInmlYjlgLzmmK/vvJpTZWxlY3Rpb27vvIjpgInmi6nvvInjgIFUZXh077yI5paH5pys77yJ5ZKMRGF0Ze+8iOaXpeacn++8ieOAgiDlpoLmnpzmsqHmnInlrprkuYnnsbvlnovvvIzlrZfmrrXkuI3kvJrooqvmmL7npLrlh7rmnaXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgY2hhbmdlIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ+WumuS5ieWcqEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTvvIjlj5jmm7TmnaHku7bnvJbovpHvvInml7blj6/pgInmi6nnmoTlj5jmm7Tlr7nosaHnmoTlsZ7mgKfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3Igd29ya29yZGVyIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ+WumuS5ieWcqEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTvvIjlj5jmm7TmnaHku7bnvJbovpHvvInml7blj6/pgInmi6nnmoTlt6XkvZzmjIfku6Tlr7nosaHnmoTlsZ7mgKfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWNjb3VudGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn5a6a5LmJ5ZyoQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdO+8iOWPmOabtOadoeS7tue8lui+ke+8ieaXtuWPr+mAieaLqeeahCBBY2NvdW50ZWRUaW1l77yI6K6w5biQ5pe26Ze077yJ6L+Q566X56ym44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjdHVhbEVuZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ+WumuS5ieWcqEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTvvIjlj5jmm7TmnaHku7bnvJbovpHvvInml7blj6/pgInmi6nnmoQgQWN0dWFsRW5kVGltZe+8iOWunumZhee7k+adn+aXtumXtO+8iei/kOeul+espuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxTdGFydFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ+WumuS5ieWcqEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTvvIjlj5jmm7TmnaHku7bnvJbovpHvvInml7blj6/pgInmi6nnmoQgQWN0dWFsU3RhcnRUaW1l77yI5a6e6ZmF5byA5aeL5pe26Ze077yJ6L+Q566X56ym44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENhdGVnb3J5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ+WumuS5ieWcqEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTvvIjlj5jmm7TmnaHku7bnvJbovpHvvInml7blj6/pgInmi6nnmoQgQ2F0ZWdvcnlJRO+8iOmjjumZqeexu+WIq0lE77yJ6L+Q566X56ym44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZUJ1aWxkZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn5a6a5LmJ5ZyoQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdO+8iOWPmOabtOadoeS7tue8lui+ke+8ieaXtuWPr+mAieaLqeeahCBDaGFuZ2VCdWlsZGVySUTvvIjlj5jmm7TliJvlu7rkurpJRO+8iei/kOeul+espuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VNYW5hZ2VySUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ+WumuS5ieWcqEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTvvIjlj5jmm7TmnaHku7bnvJbovpHvvInml7blj6/pgInmi6nnmoQgQ2hhbmdlTWFuYWdlcklE77yI5Y+Y5pu057uP55CGSUTvvInov5DnrpfnrKbjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlU3RhdGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn5a6a5LmJ5ZyoQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdO+8iOWPmOabtOadoeS7tue8lui+ke+8ieaXtuWPr+mAieaLqeeahCBDaGFuZ2VTdGF0ZUlE77yI5Y+Y5pu054q25oCBSUTvvInov5DnrpfnrKbjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2hhbmdlVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ+WumuS5ieWcqEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTvvIjlj5jmm7TmnaHku7bnvJbovpHvvInml7blj6/pgInmi6nnmoQgQ2hhbmdlVGl0bGXvvIjlj5jmm7TmoIfpopjvvInov5DnrpfnrKbjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgRHluYW1pY0ZpZWxkIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICflrprkuYnlnKhBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl077yI5Y+Y5pu05p2h5Lu257yW6L6R77yJ5pe25Y+v6YCJ5oup55qEIER5bmFtaWNGaWVsZO+8iOWKqOaAgeWtl+aute+8iei/kOeul+espuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBJbXBhY3RJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn5a6a5LmJ5ZyoQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdO+8iOWPmOabtOadoeS7tue8lui+ke+8ieaXtuWPr+mAieaLqeeahCBJbXBhY3RJRO+8iOW9seWTjUlE77yJ6L+Q566X56ym44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFZmZvcnQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ+WumuS5ieWcqEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTvvIjlj5jmm7TmnaHku7bnvJbovpHvvInml7blj6/pgInmi6nnmoQgUGxhbm5lZEVmZm9ydO+8iOiuoeWIkuW3peS9nOmHj++8iei/kOeul+espuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkRW5kVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn5a6a5LmJ5ZyoQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdO+8iOWPmOabtOadoeS7tue8lui+ke+8ieaXtuWPr+mAieaLqeeahCBQbGFubmVkRW5kVGltZe+8iOiuoeWIkue7k+adn+aXtumXtO+8iei/kOeul+espuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBQbGFubmVkU3RhcnRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICflrprkuYnlnKhBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl077yI5Y+Y5pu05p2h5Lu257yW6L6R77yJ5pe25Y+v6YCJ5oup55qEIFBsYW5uZWRTdGFydFRpbWXvvIjorqHliJLlvIDlp4vml7bpl7TvvInov5DnrpfnrKbjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUHJpb3JpdHlJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn5a6a5LmJ5ZyoQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdO+8iOWPmOabtOadoeS7tue8lui+ke+8ieaXtuWPr+mAieaLqeeahCBQcmlvcml0eUlE77yI5LyY5YWI57qnSUTvvInov5DnrpfnrKbjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUmVxdWVzdGVkVGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn5a6a5LmJ5ZyoQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdO+8iOWPmOabtOadoeS7tue8lui+ke+8ieaXtuWPr+mAieaLqeeahCBSZXF1ZXN0ZWRUaW1l77yI6K+35rGC5pe26Ze077yJ6L+Q566X56ym44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlckFnZW50SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ+WumuS5ieWcqEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTvvIjlj5jmm7TmnaHku7bnvJbovpHvvInml7blj6/pgInmi6nnmoQgV29ya09yZGVyQWdlbnRJRO+8iOW3peS9nOaMh+S7pOacjeWKoeS6uuWRmElE77yJ6L+Q566X56ym44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlck51bWJlciBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn5a6a5LmJ5ZyoQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdO+8iOWPmOabtOadoeS7tue8lui+ke+8ieaXtuWPr+mAieaLqeeahCBXb3JrT3JkZXJOdW1iZXLvvIjlt6XkvZzmjIfku6TnvJblj7fvvInov5DnrpfnrKbjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyU3RhdGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAn5a6a5LmJ5ZyoQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdO+8iOWPmOabtOadoeS7tue8lui+ke+8ieaXtuWPr+mAieaLqeeahCBXb3JrT3JkZXJTdGF0ZUlE77yI5bel5L2c5oyH5Luk54q25oCBSUTvvInov5DnrpfnrKbjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVGl0bGUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJ+WumuS5ieWcqEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXTvvIjlj5jmm7TmnaHku7bnvJbovpHvvInml7blj6/pgInmi6nnmoQgV29ya09yZGVyVGl0bGXvvIjlt6XkvZzmjIfku6TmoIfpopjvvInov5DnrpfnrKbjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyVHlwZUlEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICflrprkuYnlnKhBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl077yI5Y+Y5pu05p2h5Lu257yW6L6R77yJ5pe25Y+v6YCJ5oup55qEIFdvcmtPcmRlclR5cGVJRO+8iOW3peS9nOaMh+S7pOexu+Wei0lE77yJ6L+Q566X56ym44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBlcmlvZCAoaW4geWVhcnMpLCBpbiB3aGljaCBzdGFydCBhbmQgZW5kIHRpbWVzIGNhbiBiZSBzZWxlY3RlZC4nfSA9CiAgICAgICAgJ+WumuS5ieiDveWkn+mAieaLqeW8gOWni+aXtumXtOWSjOe7k+adn+aXtumXtOeahOaXtumXtOaute+8iOWNleS9je+8muW5tO+8ieOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBhdHRyaWJ1dGVzIG9mIGEgd29ya29yZGVyIGluIHRoZSB0b29sdGlwIG9mIHRoZSB3b3Jrb3JkZXIgZ3JhcGggaW4gdGhlIGNoYW5nZSB6b29tLiBUbyBzaG93IHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcyBpbiB0aGUgdG9vbHRpcCwgdGhleSBtdXN0IGJlIHNwZWNpZmllZCBsaWtlIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUxLCBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMiwgZXRjLid9ID0KICAgICAgICAn5Zyo5Y+Y5pu06K+m5oOF56qX5Y+j5pi+56S65Zyo5bel5L2c5oyH5Luk5Zu+5o+Q56S65paH5pys55qE5bGe5oCn44CC6KaB5Zyo5o+Q56S65paH5pys5Lit5pi+56S65bel5L2c5oyH5Luk5Yqo5oCB5a2X5q6177yM5LuW5Lus5b+F6aG75oyJ5aaC5LiL5qC85byP5oyH5a6a77yM5aaCRHluYW1pY0ZpZWxkX1dvcmtPcmRlckZpZWxkTmFtZTHjgIFEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMuetieetieOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn5a6a5LmJ5ZyoXCflj5jmm7RQU0FcJ+amguiniOS4reaYvuekuueahOWtl+aute+8jOi/meS4qumAiemhueS4jeS8muW9seWTjeWtl+auteeahOaYvuekuuS9jee9ruOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBDaGFuZ2UgU2NoZWR1bGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICflrprkuYnlnKhcJ+WPmOabtOiuoeWIklwn5qaC6KeI5Lit5pi+56S655qE5a2X5q6177yM6L+Z5Liq6YCJ6aG55LiN5Lya5b2x5ZON5a2X5q6155qE5pi+56S65L2N572u44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn5a6a5LmJ5ZyoXCfmiJHnmoRDQUJcJ+amguiniOS4reaYvuekuueahOWtl+aute+8jOi/meS4qumAiemhueS4jeS8muW9seWTjeWtl+auteeahOaYvuekuuS9jee9ruOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICflrprkuYnlnKhcJ+aIkeeahOWPmOabtFwn5qaC6KeI5Lit5pi+56S655qE5a2X5q6177yM6L+Z5Liq6YCJ6aG55LiN5Lya5b2x5ZON5a2X5q6155qE5pi+56S65L2N572u44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ+WumuS5ieWcqFwn5oiR55qE5bel5L2c5oyH5LukXCfmpoLop4jkuK3mmL7npLrnmoTlrZfmrrXvvIzov5nkuKrpgInpobnkuI3kvJrlvbHlk43lrZfmrrXnmoTmmL7npLrkvY3nva7jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgUElSIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn5a6a5LmJ5ZyoXCdQSVLvvIjlrp7mlr3lkI7lrqHmn6XvvIlcJ+amguiniOS4reaYvuekuueahOWtl+aute+8jOi/meS4qumAiemhueS4jeS8muW9seWTjeWtl+auteeahOaYvuekuuS9jee9ruOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ+WumuS5ieWcqFwn5Y+Y5pu057uP55CGXCfmpoLop4jkuK3mmL7npLrnmoTlrZfmrrXvvIzov5nkuKrpgInpobnkuI3kvJrlvbHlk43lrZfmrrXnmoTmmL7npLrkvY3nva7jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgY2hhbmdlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn5a6a5LmJ5ZyoXCflj5jmm7RcJ+amguiniOS4reaYvuekuueahOWtl+aute+8jOi/meS4qumAiemhueS4jeS8muW9seWTjeWtl+auteeahOaYvuekuuS9jee9ruOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAn5a6a5LmJ5Zyo5Y+Y5pu05pCc57Si57uT5p6c5Lit5pi+56S655qE5a2X5q6177yM6L+Z5Liq6YCJ6aG55LiN5Lya5b2x5ZON5a2X5q6155qE5pi+56S65L2N572u44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ+WumuS5ieWcqOWuouaIt1wn5Y+Y5pu06K6h5YiSXCfmpoLop4jkuK3mmL7npLrnmoTlrZfmrrXvvIzov5nkuKrpgInpobnkuI3kvJrlvbHlk43lrZfmrrXnmoTmmL7npLrkvY3nva7jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgdGVtcGxhdGUgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICflrprkuYnlnKjmqKHmnb/mpoLop4jkuK3mmL7npLrnmoTlrZfmrrXvvIzov5nkuKrpgInpobnkuI3kvJrlvbHlk43lrZfmrrXnmoTmmL7npLrkvY3nva7jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2lnbmFscyBmb3IgZWFjaCBJVFNNQ2hhbmdlIHN0YXRlLid9ID0gJ+WumuS5ieWPmOabtOeKtuaAgeeahOagh+W/l+S/oeWPt+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB0ZW1wbGF0ZSB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJ+WumuS5ieWcqOaooeadv+amguiniOS4reeUqOS9nOi/h+a7pOWZqOeahOaooeadv+exu+Wei+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIE15V29ya29yZGVycyBvdmVydmlldy4nfSA9CiAgICAgICAgJ+WumuS5ieWcqFwn5oiR55qE5bel5L2c5oyH5LukXCfmpoLop4jkuK3nlKjkvZzov4fmu6TlmajnmoTlt6XkvZzmjIfku6TnirbmgIHjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgd29ya29yZGVyIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICflrprkuYnlnKhcJ1BJUu+8iOWunuaWveWQjuWuoeafpe+8iVwn5qaC6KeI5Lit55So5L2c6L+H5ruk5Zmo55qE5bel5L2c5oyH5Luk54q25oCB44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBzaG93IHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICflrprkuYnlnKhcJ1BJUu+8iOWunuaWveWQjuWuoeafpe+8iVwn5qaC6KeI5Lit55So5L2c6L+H5ruk5Zmo55qE5bel5L2c5oyH5Luk57G75Z6L44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgd2hldGhlciBub3RpZmljYXRpb25zIHNob3VsZCBiZSBzZW50Lid9ID0gJ+WumuS5ieaYr+WQpuWPkemAgemAmuefpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgYSBjaGFuZ2UuJ30gPSAn5Yig6Zmk5LiA5Liq5Y+Y5pu044CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGUgY2hhbmdlLid9ID0gJ+WIoOmZpOatpOWPmOabtOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhlIHdvcmtvcmRlci4nfSA9ICfliKDpmaTmraTlt6XkvZzmjIfku6TjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyBvZiBhIGNoYW5nZSBoaXN0b3J5IGVudHJ5Lid9ID0gJ+S4gOS4quWPmOabtOWOhuWPsuadoeebrueahOivpue7huS/oeaBr+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIGFuIGFnZW50IGNhbiBleGNoYW5nZSB0aGUgWC1heGlzIG9mIGEgc3RhdCBpZiBoZSBnZW5lcmF0ZXMgb25lLid9ID0KICAgICAgICAn56Gu5a6a5pyN5Yqh5Lq65ZGY6IO95ZCm5Lqk5o2i5LuW55Sf5oiQ55qE57uf6K6h55qEWOi9tOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIGRvbmUgZm9yIGNvbmZpZyBpdGVtIGNsYXNzZXMuJ30gPQogICAgICAgICfnoa7lrprpgJrnlKjnu5/orqHmqKHlnZfog73lkKbnlJ/miJDphY3nva7pobnnsbvmiYDlgZrnmoTlj5jmm7Tnu5/orqHjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyByZWdhcmRpbmcgY2hhbmdlIHN0YXRlIHVwZGF0ZXMgd2l0aGluIGEgdGltZXBlcmlvZC4nfSA9CiAgICAgICAgJ+ehruWumumAmueUqOe7n+iuoeaooeWdl+iDveWQpueUn+aIkOS4gOauteaXtumXtOWGheWPmOabtOWFs+S6juWPmOabtOeKtuaAgeabtOaWsOeahOe7n+iuoeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzIHJlZ2FyZGluZyB0aGUgcmVsYXRpb24gYmV0d2VlbiBjaGFuZ2VzIGFuZCBpbmNpZGVudCB0aWNrZXRzLid9ID0KICAgICAgICAn56Gu5a6a6YCa55So57uf6K6h5qih5Z2X6IO95ZCm55Sf5oiQ5Y+Y5pu05YWz5LqO5Y+Y5pu05ZKM5pWF6Zqc5bel5Y2V5LmL6Ze055qE5YWz57O755qE57uf6K6h44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMuJ30gPQogICAgICAgICfnoa7lrprpgJrnlKjnu5/orqHmqKHlnZfog73lkKbnlJ/miJDlhbPkuo7lj5jmm7TnmoTnu5/orqHjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgdGhlIG51bWJlciBvZiBSZmMgdGlja2V0cyBhIHJlcXVlc3RlciBjcmVhdGVkLid9ID0KICAgICAgICAn56Gu5a6a6YCa55So57uf6K6h5qih5Z2X6IO95ZCm55Sf5oiQ5LiA5Liq6K+35rGC6ICF5Yib5bu655qEUkZD77yI5Y+Y5pu06K+35rGC77yJ55qE5pWw6YeP55qE57uf6K6h44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIChmb3IgY2hhbmdlcyBhbmQgd29ya29yZGVycykgc2hvd24gaW4gdGhlIGNoYW5nZSBwcmludCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLlj5jmm7TmiZPljbDnqpflj6PmmK/lkKbmmL7npLrliqjmgIHlrZfmrrXjgILlj6/og73nmoTorr7nva7vvJowIC0g56aB55So77yMIDEgPSDlkK/nlKjjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLmt7vliqDlj5jmm7Tnqpflj6PmmK/lkKbmmL7npLrliqjmgIHlrZfmrrXjgILlj6/og73nmoTorr7nva7vvJowIC0g56aB55So77yMIDEgPSDlkK/nlKjvvIwyID0g5ZCv55So5LiU5b+F6ZyA44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ+WcqOacjeWKoeS6uuWRmOeVjOmdoue8lui+keWPmOabtOeql+WPo+aYr+WQpuaYvuekuuWKqOaAgeWtl+auteOAguWPr+iDveeahOiuvue9ru+8mjAgLSDnpoHnlKjvvIwgMSA9IOWQr+eUqO+8jDIgPSDlkK/nlKjkuJTlv4XpnIDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSBzZWFyY2ggc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i5pCc57Si5Y+Y5pu056qX5Y+j5piv5ZCm5pi+56S65Yqo5oCB5a2X5q6144CC5Y+v6IO955qE6K6+572u77yaMCAtIOemgeeUqO+8jCAxID0g5ZCv55So44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2Ugem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLlj5jmm7Tor6bmg4Xnqpflj6PmmK/lkKbmmL7npLrliqjmgIHlrZfmrrXjgILlj6/og73nmoTorr7nva7vvJowIC0g56aB55So77yMIDEgPSDlkK/nlKjjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciBhZGQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLmt7vliqDlt6XkvZzmjIfku6Tnqpflj6PmmK/lkKbmmL7npLrliqjmgIHlrZfmrrXjgILlj6/og73nmoTorr7nva7vvJowIC0g56aB55So77yMIDEgPSDlkK/nlKjvvIwyID0g5ZCv55So5LiU5b+F6ZyA44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJ+WcqOacjeWKoeS6uuWRmOeVjOmdoue8lui+keW3peS9nOaMh+S7pOeql+WPo+aYr+WQpuaYvuekuuWKqOaAgeWtl+auteOAguWPr+iDveeahOiuvue9ru+8mjAgLSDnpoHnlKjvvIwgMSA9IOWQr+eUqO+8jDIgPSDlkK/nlKjkuJTlv4XpnIDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciByZXBvcnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLlt6XkvZzmjIfku6TmiqXlkYrnqpflj6PmmK/lkKbmmL7npLrliqjmgIHlrZfmrrXjgILlj6/og73nmoTorr7nva7vvJowIC0g56aB55So77yMIDEgPSDlkK/nlKjvvIwyID0g5ZCv55So5LiU5b+F6ZyA44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSB3b3Jrb3JkZXIgem9vbSBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLlt6XkvZzmjIfku6Tor6bmg4Xnqpflj6PmmK/lkKbmmL7npLrliqjmgIHlrZfmrrXjgILlj6/og73nmoTorr7nva7vvJowIC0g56aB55So77yMIDEgPSDlkK/nlKjjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pY0ZpZWxkIGV2ZW50IG1vZHVsZSB0byBoYW5kbGUgdGhlIHVwZGF0ZSBvZiBjb25kaXRpb25zIGlmIGR5bmFtaWMgZmllbGRzIGFyZSBhZGRlZCwgdXBkYXRlZCBvciBkZWxldGVkLid9ID0KICAgICAgICAn5aSE55CG5Yqo5oCB5a2X5q615pu05paw5p2h5Lu277yI5re75Yqg44CB5pu05paw5oiW5Yig6Zmk77yJ55qE5Yqo5oCB5a2X5q615LqL5Lu25qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgYSBjaGFuZ2UuJ30gPSAn57yW6L6R5LiA5Liq5Y+Y5pu044CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIGNoYW5nZS4nfSA9ICfnvJbovpHlj5jmm7TjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY2hhbmdlLid9ID0gJ+e8lui+keWPmOabtOadoeS7tuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSB3b3Jrb3JkZXIuJ30gPSAn57yW6L6R5bel5L2c5oyH5Luk44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvcndhcmQgc2NoZWR1bGUgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb3ZlciBhcHByb3ZlZCBjaGFuZ2VzLid9ID0KICAgICAgICAn6L2s5Y+R5Y+Y5pu055qE6K6h5YiS6KGo44CC5bey5om55YeG5Y+Y5pu055qE5qaC6KeI44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgWm9vbSd9ID0gJ+WOhuWPsuivpuaDhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDQUIgVGVtcGxhdGVzLid9ID0gJ+WPmOabtENBQuaooeadv+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gRWRpdC4nfSA9ICflj5jmm7TmnaHku7bnvJbovpHjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgQ29uZGl0aW9uIE92ZXJ2aWV3Lid9ID0gJ+WPmOabtOadoeS7tuamguiniOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbnMnfSA9ICflj5jmm7TnrqHnkIbpgJrnn6UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgTWFuYWdlciBPdmVydmlldy4nfSA9ICflj5jmm7Tnu4/nkIbmpoLop4jjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2UgUElSIE92ZXJ2aWV3Lid9ID0gJ+WPmOabtFBJUu+8iOWunuaWveWQjuWuoeafpe+8ieamguiniOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBub3RpZmljYXRpb24gcnVsZXMnfSA9ICflj5jmm7TpgJrnn6Xop4TliJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VzJ30gPSAn5Y+Y5pu0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlDQUIgT3ZlcnZpZXcuJ30gPSAn5oiR55qEQ0FC5qaC6KeIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlDaGFuZ2VzIE92ZXJ2aWV3Lid9ID0gJ+aIkeeahOWPmOabtOamguiniOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIE15V29ya29yZGVycyBPdmVydmlldy4nfSA9ICfmiJHnmoTlt6XkvZzmjIfku6TmpoLop4jjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBEZWxldGUuJ30gPSAn5Yig6Zmk5qih5p2/44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDQUIuJ30gPSAn57yW6L6R5qih5p2/Q0FC44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdCBDb250ZW50Lid9ID0gJ+e8lui+keaooeadv+WGheWuueOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIEVkaXQuJ30gPSAn57yW6L6R5qih5p2/44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgT3ZlcnZpZXcuJ30gPSAn5qih5p2/5qaC6KeI44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgY2xlYW5zIHVwIGNvbmRpdGlvbnMuJ30gPSAn5riF55CG5Y+Y5pu05p2h5Lu255qESVRTTeS6i+S7tuaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGNhY2hlIGZvciBhIHRvb2xiYXIuJ30gPSAn5Yig6Zmk5Y+Y5pu05bel5YW35qCP57yT5a2Y55qESVRTTeS6i+S7tuaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICfliKDpmaTlj5jmm7Tljoblj7LnmoRJVFNN5LqL5Lu25qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgbWF0Y2hlcyBjb25kaXRpb25zIGFuZCBleGVjdXRlcyBhY3Rpb25zLid9ID0KICAgICAgICAn5Yy56YWN5p2h5Lu25bm25omn6KGM5pON5L2c55qESVRTTeS6i+S7tuaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHNlbmRzIG5vdGlmaWNhdGlvbnMuJ30gPSAn5Y+R6YCB6YCa55+l55qESVRTTeS6i+S7tuaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICfmm7TmlrDlj5jmm7Tljoblj7LnmoRJVFNN5LqL5Lu25qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiBjb25kaXRpb25zLid9ID0gJ+abtOaWsOadoeS7tuWOhuWPsueahElUU03kuovku7bmqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIHdvcmtvcmRlcnMuJ30gPSAn5pu05paw5bel5L2c5oyH5Luk5Y6G5Y+y55qESVRTTeS6i+S7tuaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byByZWNhbGN1bGF0ZSB0aGUgd29ya29yZGVyIG51bWJlcnMuJ30gPSAn6YeN5paw6K6h566X5bel5L2c5oyH5Luk57yW5Y+355qESVRTTeS6i+S7tuaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byBzZXQgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzIG9mIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICforr7nva7lt6XkvZzmjIfku6Tlrp7pmYXlvIDlp4sv57uT5p2f5pe26Ze055qESVRTTeS6i+S7tuaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNQ2hhbmdlJ30gPSAn5Y+Y5pu0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01Xb3JrT3JkZXInfSA9ICflt6XkvZzmjIfku6QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZnJlcXVlbmN5IGlzIFwncmVndWxhcmx5XCcsIHlvdSBjYW4gY29uZmlndXJlIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9ucyBhcmUgc2VudCAoZXZlcnkgWCBob3VycykuJ30gPQogICAgICAgICflpoLmnpzpopHnjoforr7nva7kuLrigJzlrprmnJ/igJ3vvIzkvaDlj6/ku6Xorr7nva7lj5HpgIHpgJrnn6XnmoTpopHnjofpl7TpmpTvvIjmr49Y5bCP5pe277yJ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIGNoYW5nZS4nfSA9ICfpk77mjqXlj6bkuIDlr7nosaHliLDlj5jmm7TjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgd29ya29yZGVyLid9ID0gJ+mTvuaOpeWPpuS4gOWvueixoeWIsOW3peS9nOaMh+S7pOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2dmaWxlIGZvciB0aGUgSVRTTSBjaGFuZ2UgY291bnRlci4gVGhpcyBmaWxlIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjaGFuZ2UgbnVtYmVycy4nfSA9CiAgICAgICAgJ0lUU03lj5jmm7TorqHmlbDlmajnmoTml6Xlv5fmlofku7bvvIzov5nkuKrmlofku7blnKjliJvlu7rlj5jmm7TnvJblj7fml7bkvJrnlKjliLDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIENBQiBtZW1iZXJzIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICfmn6Xmib5DQULmiJDlkZjvvIznlKjkuo7oh6rliqjooaXpvZDlip/og73jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTG9va3VwIG9mIGFnZW50cywgdXNlZCBmb3IgYXV0b2NvbXBsZXRpb24uJ30gPSAn5p+l5om+5pyN5Yqh5Lq65ZGY77yM55So5LqO6Ieq5Yqo6KGl6b2Q5Yqf6IO944CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayBpZiBXb3JrT3JkZXJBZGQgb3IgV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlIHNob3VsZCBiZSBwZXJtaXR0ZWQuJ30gPQogICAgICAgICfmo4Dmn6XmmK/lkKblhYHorrhXb3JrT3JkZXJBZGTvvIjmt7vliqDlt6XkvZzmjIfku6TvvInmiJZXb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGXvvIjku47mqKHmnb/mt7vliqDlt6XkvZzmjIfku6TvvInnmoTmqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBDQUIgbWVtYmVycy4nfSA9ICfmo4Dmn6VDQULmiJDlkZjnmoTmqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBhZ2VudC4nfSA9ICfmo4Dmn6Xlj5jmm7TmnI3liqHkurrlkZjnmoTmqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgYnVpbGRlci4nfSA9ICfmo4Dmn6Xlj5jmm7TliJvlu7rkurrnmoTmqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSBjaGFuZ2UgbWFuYWdlci4nfSA9ICfmo4Dmn6Xlj5jmm7Tnu4/nkIbnmoTmqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAn5qOA5p+l5bel5L2c5oyH5Luk5pyN5Yqh5Lq65ZGY55qE5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIG5vIHdvcmtvcmRlciBhZ2VudCBpcyBzZXQuJ30gPSAn5qOA5p+l5piv5ZCm5rKh5pyJ6K6+572u5bel5L2c5oyH5Luk5pyN5Yqh5Lq65ZGY55qE5qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBjaGVjayB3aGV0aGVyIHRoZSBhZ2VudCBpcyBjb250YWluZWQgaW4gdGhlIGNvbmZpZ3VyZWQgbGlzdC4nfSA9CiAgICAgICAgJ+ajgOafpeacjeWKoeS6uuWRmOaYr+WQpuWMheWQq+WcqOWcqOmFjee9ruWIl+ihqOS4reeahOaooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBhIGxpbmsgdG8gY3JlYXRlIGEgY2hhbmdlIGZyb20gdGhpcyB0aWNrZXQuIFRoZSB0aWNrZXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGxpbmtlZCB3aXRoIHRoZSBuZXcgY2hhbmdlLid9ID0KICAgICAgICAn5pi+56S65LiA5Liq6ZO+5o6l5Lul5LuO5bel5Y2V5Yib5bu65LiA5Liq5Y+Y5pu055qE5qih5Z2X44CC5bel5Y2V5bCG6Ieq5Yqo6ZO+5o6l5Yiw5paw55qE5Y+Y5pu044CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90Lid9ID0gJ+enu+WKqOaXtumXtOi9tOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb3ZlIGFsbCB3b3Jrb3JkZXJzIGluIHRpbWUuJ30gPSAn56e75Yqo5omA5pyJ5bel5L2c5oyH5Luk55qE5pe26Ze044CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyAoZnJvbSB0ZW1wbGF0ZSknfSA9ICfku47mqKHmnb/mlrDlu7rlj5jmm7QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT25seSB1c2VycyBvZiB0aGVzZSBncm91cHMgaGF2ZSB0aGUgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRpY2tldCB0eXBlcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMiIGlmIHRoZSBmZWF0dXJlICJUaWNrZXQ6OkFjbDo6TW9kdWxlIyMjMjAwLVRpY2tldDo6QWNsOjpNb2R1bGUiIGlzIGVuYWJsZWQuJ30gPQogICAgICAgICflpoLmnpzlkK/nlKjkuobigJxUaWNrZXQ6OkFjbDo6TW9kdWxlIyMjMjAwLVRpY2tldDo6QWNsOjpNb2R1bGXigJ3vvIzlj6rmnInov5nkupvnu4TkuK3nmoTnlKjmiLfmnInmnYPkvb/nlKjigJxJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXPigJ3kuK3lrprkuYnnmoTlt6XljZXnsbvlnovjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXcgb3ZlciBhbGwgQ2hhbmdlcy4nfSA9ICfmiYDmnInlj5jmm7TnmoTmpoLop4jjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUElSJ30gPSAn5a6e5pa95ZCO6K+E5a6hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpJ30gPSAnUElSICjlrp7mlr3lkI7lrqHmn6UpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BTQSd9ID0gJ1BTQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgVXNlckNyZWF0ZVdvcmtPcmRlck5leHRNYXNrIG9iamVjdCBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmnI3liqHkurrlkZjnlYzpnaLlgY/lpb3orr7nva7op4blm75Vc2VyQ3JlYXRlV29ya09yZGVyTmV4dE1hc2vvvIjliJvlu7rlt6XkvZzmjIfku6TlkI7nmoTnqpflj6PvvInlr7nosaHnmoTlj4LmlbDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgY2hhbmdlcyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPQogICAgICAgICflj5jmm7TmpoLop4jnroDmtIHmqKHlvI/mmL7npLrlj5jmm7TnmoTpobXpnaLlj4LmlbDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJlc2VudHMgYSBsaW5rIGluIHRoZSBtZW51IHRvIHNob3cgdGhlIGludm9sdmVkIHBlcnNvbnMgaW4gYSBjaGFuZ2UsIGluIHRoZSB6b29tIHZpZXcgb2Ygc3VjaCBjaGFuZ2UgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WcqOacjeWKoeS6uuWRmOeVjOmdouWPmOabtOivpuaDheeql+WPo++8jOWcqOiPnOWNleS4reaYvuekuuS4gOS4qumTvuaOpeS7peaYvuekuuWPmOabtOeahOebuOWFs+S6uuWRmOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGUgY2hhbmdlLid9ID0gJ+aJk+WNsOWPmOabtOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmludCB0aGUgd29ya29yZGVyLid9ID0gJ+aJk+WNsOW3peS9nOaMh+S7pOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHknfSA9ICforqHliJLmnI3liqHlj6/nlKjmgKcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5IChQU0EpJ30gPSAn6K6h5YiS5pyN5Yqh5Y+v55So5oCn77yIUFNB77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSAoUFNBKSBvZiBjaGFuZ2VzLiBPdmVydmlldyBvZiBhcHByb3ZlZCBjaGFuZ2VzIGFuZCB0aGVpciBzZXJ2aWNlcy4nfSA9CiAgICAgICAgJ+WPmOabtOeahOiuoeWIkuacjeWKoeWPr+eUqOaAp++8iFBTQe+8ieOAguW3suaJueWHhueahOWPmOabtOWSjOWug+S7rOeahOacjeWKoeeahOamguiniOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIGluIG9yZGVyIGZvciBhbiBhZ2VudCB0byB0YWtlIGEgd29ya29yZGVyLid9ID0KICAgICAgICAn5pyN5Yqh5Lq65ZGY5o6l5omL5bel5L2c5oyH5Luk5omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWNjZXNzIHRoZSBvdmVydmlldyBvZiBhbGwgY2hhbmdlcy4nfSA9ICforr/pl67miYDmnInnmoTlj5jmm7TmpoLop4jmiYDpnIDnmoTmnYPpmZDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBhZGQgYSB3b3Jrb3JkZXIuJ30gPSAn5re75Yqg5LiA5Liq5bel5L2c5oyH5Luk5omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY2hhbmdlIHRoZSB3b3Jrb3JkZXIgYWdlbnQuJ30gPSAn5pu05o2i5bel5L2c5oyH5Luk5pyN5Yqh5Lq65ZGY5omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZS4nfSA9ICfku47lj5jmm7TkuK3liJvlu7rmqKHmnb/miYDpnIDnmoTmnYPpmZDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgY2hhbmdlc1wnIENBQi4nfSA9CiAgICAgICAgJ+S7juWPmOabtENBQuS4reWIm+W7uuaooeadv+aJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSB3b3Jrb3JkZXIuJ30gPSAn5LuO5bel5L2c5oyH5Luk5Yib5bu65qih5p2/5omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMgZnJvbSB0ZW1wbGF0ZXMuJ30gPSAn5LuO5qih5p2/5Lit5Yib5bu65Y+Y5pu05omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGNoYW5nZXMuJ30gPSAn5Yib5bu65Y+Y5pu05omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgdGVtcGxhdGUuJ30gPSAn5Yig6Zmk5qih5p2/5omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZGVsZXRlIGEgd29ya29yZGVyLid9ID0gJ+WIoOmZpOS4gOS4quW3peS9nOaMh+S7pOaJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBjaGFuZ2VzLid9ID0gJ+WIoOmZpOWPmOabtOaJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgYSB0ZW1wbGF0ZS4nfSA9ICfnvJbovpHlj5jmm7TmiYDpnIDnmoTmnYPpmZDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgd29ya29yZGVyLid9ID0gJ+e8lui+keW3peS9nOaMh+S7pOaJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgY2hhbmdlcy4nfSA9ICfnvJbovpHlj5jmm7TmiYDpnIDnmoTmnYPpmZDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAn57yW6L6R5Y+Y5pu05p2h5Lu25omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29udGVudCBvZiBhIHRlbXBsYXRlLid9ID0gJ+e8lui+keaooeadv+WGheWuueaJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGludm9sdmVkIHBlcnNvbnMgb2YgYSBjaGFuZ2UuJ30gPQogICAgICAgICfnvJbovpHlj5jmm7Tnm7jlhbPkurrlkZjmiYDpnIDnmoTmnYPpmZDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBtb3ZlIGNoYW5nZXMgaW4gdGltZS4nfSA9ICfnp7vliqjlj5jmm7Tml7bpl7TovbTmiYDpnIDnmoTmnYPpmZDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBwcmludCBhIGNoYW5nZS4nfSA9ICfmiZPljbDlj5jmm7TmiYDpnIDnmoTmnYPpmZDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byByZXNldCBjaGFuZ2VzLid9ID0gJ+mHjee9ruWPmOabtOaJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgYSB3b3Jrb3JkZXIuJ30gPSAn5p+l55yL5bel5L2c5oyH5Luk5omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBjaGFuZ2VzLid9ID0gJ+afpeeci+WPmOabtOaJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgbGlzdCBvZiBjaGFuZ2VzIHdoZXJlIHRoZSB1c2VyIGlzIGEgQ0FCIG1lbWJlci4nfSA9CiAgICAgICAgJ+afpeeci1wn5oiR55qEQ0FCXCfnmoTlj5jmm7TliJfooajmiYDpnIDnmoTmnYPpmZDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPQogICAgICAgICfmn6XnnItcJ+aIkeeahOWPmOabtFwn55qE5Y+Y5pu05YiX6KGo5omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyBvdmVydmlldyBvdmVyIGFsbCB0ZW1wbGF0ZXMuJ30gPSAn5p+l55yL5omA5pyJ5qih5p2/5qaC6KeI5omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJ+afpeeci+WPmOabtOadoeS7tuaJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgb2YgYSBjaGFuZ2UuJ30gPSAn5p+l55yL5Y+Y5pu05Y6G5Y+y5omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlci4nfSA9ICfmn6XnnIvlt6XkvZzmjIfku6Tljoblj7LmiYDpnIDnmoTmnYPpmZDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSBjaGFuZ2UuJ30gPSAn5p+l55yL5Y+Y5pu05Y6G5Y+y6K+m5oOF5omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSB6b29tIG9mIGEgd29ya29yZGVyLid9ID0KICAgICAgICAn5p+l55yL5bel5L2c5oyH5Luk6K+m5oOF5omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBDaGFuZ2UgU2NoZWR1bGUuJ30gPSAn5p+l55yL5Y+Y5pu06K6h5YiS5YiX6KGo5omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2UgUFNBLid9ID0gJ+afpeeci+WPmOabtFBTQeWIl+ihqOaJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2YgY2hhbmdlcyB3aXRoIGFuIHVwY29taW5nIFBJUiAoUG9zdCBJbXBsZW1lbnRhdGlvbiBSZXZpZXcpLid9ID0KICAgICAgICAn5p+l55yL5pyJ5Y2z5L2/5p2l5Li055qEUElS77yI5a6e5pa95ZCO5a6h5p+l77yJ55qE5Y+Y5pu05YiX6KGo5omA6ZyA55qE5p2D6ZmQ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBvd24gY2hhbmdlcy4nfSA9ICfmn6XnnIvoh6rlt7HnmoTlj5jmm7TliJfooajmiYDpnIDnmoTmnYPpmZDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biB3b3Jrb3JkZXJzLid9ID0gJ+afpeeci+iHquW3seeahOW3peS9nOaMh+S7pOaJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHdyaXRlIGEgcmVwb3J0IGZvciB0aGUgd29ya29yZGVyLid9ID0gJ+S4uuW3peS9nOaMh+S7pOe8luWGmeaKpeWRiuaJgOmcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuJ30gPSAn6YeN572u5LiA5Liq5Y+Y5pu05ZKM5a6D55qE5bel5L2c5oyH5Luk44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMuJ30gPSAn6YeN572u5Y+Y5pu05ZKM5a6D55qE5bel5L2c5oyH5Luk44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1J1biB0YXNrIHRvIGNoZWNrIGlmIHNwZWNpZmljIHRpbWVzIGhhdmUgYmVlbiByZWFjaGVkIGluIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMuJ30gPQogICAgICAgICfmiafooYzku7vliqHmnaXmo4Dmn6XmmK/lkKbliLDovr7kuoblj5jmm7Tlkozlt6XkvZzmjIfku6TnmoTnibnlrprml7bpl7TngrnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSBjaGFuZ2UgYXMgYSB0ZW1wbGF0ZS4nfSA9ICfkv53lrZjlj5jmm7TkuLrmqKHmnb/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSB3b3Jrb3JkZXIgYXMgYSB0ZW1wbGF0ZS4nfSA9ICfkv53lrZjlt6XkvZzmjIfku6TkuLrmqKHmnb/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2NoZWR1bGUnfSA9ICforqHliJLooagnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2NyZWVuIGFmdGVyIGNyZWF0aW5nIGEgd29ya29yZGVyJ30gPSAn5Yib5bu65bel5L2c5oyH5Luk5ZCO55qE56qX5Y+jJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDaGFuZ2VzJ30gPSAn5pCc57Si5Y+Y5pu0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlYXJjaCBDaGFuZ2VzLid9ID0gJ+aQnOe0ouWPmOabtOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3RzIHRoZSBjaGFuZ2UgbnVtYmVyIGdlbmVyYXRvciBtb2R1bGUuICJBdXRvSW5jcmVtZW50IiBpbmNyZW1lbnRzIHRoZSBjaGFuZ2UgbnVtYmVyLCB0aGUgU3lzdGVtSUQgYW5kIHRoZSBjb3VudGVyIGFyZSB1c2VkIHdpdGggU3lzdGVtSUQuY291bnRlciBmb3JtYXQgKGUuZy4gMTAwMTE4LCAxMDAxMTkpLiBXaXRoICJEYXRlIiwgdGhlIGNoYW5nZSBudW1iZXJzIHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHRoZSBjdXJyZW50IGRhdGUgYW5kIGEgY291bnRlcjsgdGhpcyBmb3JtYXQgbG9va3MgbGlrZSBZZWFyLk1vbnRoLkRheS5jb3VudGVyLCBlLmcuIDIwMTAwNjI0MDAwMDEsIDIwMTAwNjI0MDAwMDIuIFdpdGggIkRhdGVDaGVja3N1bSIsIHRoZSBjb3VudGVyIHdpbGwgYmUgYXBwZW5kZWQgYXMgY2hlY2tzdW0gdG8gdGhlIHN0cmluZyBvZiBkYXRlIHBsdXMgdGhlIFN5c3RlbUlELiBUaGUgY2hlY2tzdW0gd2lsbCBiZSByb3RhdGVkIG9uIGEgZGFpbHkgYmFzaXMuIFRoaXMgZm9ybWF0IGxvb2tzIGxpa2UgWWVhci5Nb250aC5EYXkuU3lzdGVtSUQuQ291bnRlci5DaGVja1N1bSwgZS5nLiAyMDEwMDYyNDEwMDAwMDE3LCAyMDEwMDYyNDEwMDAwMDI2Lid9ID0KICAgICAgICAn6YCJ5oup5Y+Y5pu057yW5Y+355Sf5oiQ5Zmo5qih5Z2X44CC4oCc6Ieq5Yqo5aKe6YeP4oCdLS3pgJLlop7lj5jmm7TnvJblj7fvvIzns7vnu59JROWSjOiuoeaVsOWZqOmFjeWQiOS9v+eUqOeahOagvOW8j+S4uu+8muezu+e7n0lELuiuoeaVsOWZqO+8iOWmgjEwMDExOOOAgTEwMDExOe+8ieOAguKAnOaXpeacn+KAnS0t5Lya55So5b2T5YmN5pel5pyf44CB57O757ufSUTlkozorqHmlbDlmajlhbHlkIznlJ/miJDlj5jmm7TnvJblj7fvvIzmoLzlvI/kuLrvvJrlubQu5pyILuaXpS7ns7vnu59JRC7orqHmlbDlmajvvIjlpoIyMDEwMDYyNDAwMDAx44CBMjAxMDA2MjQwMDAwMu+8ieOAguKAnOaXpeacn+agoemqjOWSjOKAnS0t6K6h5pWw5Zmo55qE5YC85Lul5qCh6aqM5ZKM55qE5pa55byP6L+95Yqg5pel5pyf5ZKM57O757ufSUTnmoTlrZfnrKbkuLLlkI7pnaLvvIzmoKHpqozlkozmr4/ml6Xova7mjaLvvIzov5nnp43moLzlvI/kuLrvvJrlubQu5pyILuaXpS7ns7vnu59JRC7orqHmlbDlmagu5qCh6aqM5ZKM77yI5aaCMjAxMDA2MjQxMDAwMDAxN+OAgTIwMTAwNjI0MTAwMDAwMjbvvInjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBhZ2VudCBmb3IgdGhlIHdvcmtvcmRlci4nfSA9ICfkuLrlt6XkvZzmjIfku6TmjIfmtL7mnI3liqHkurrlkZjjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRJVFNNQ2hhbmdlWm9vbSBhbmQgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nfSA9CiAgICAgICAgJ+WcqOKAnEFnZW50SVRTTUNoYW5nZVpvb23vvIjlj5jmm7Tor6bmg4Xnqpflj6PvvInigJ3lkozigJxBZ2VudElUU01Xb3JrT3JkZXJab29t77yI5bel5L2c5oyH5Luk6K+m5oOF56qX5Y+j77yJ4oCd5Lit77yM6K6+572u5YaF572uSFRNTOWtl+auteeahOm7mOiupOmrmOW6pu+8iOWNleS9je+8muWDj+e0oO+8ieOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAn5Zyo4oCcQWdlbnRJVFNNQ2hhbmdlWm9vbe+8iOWPmOabtOivpuaDheeql+WPo++8ieKAneWSjOKAnEFnZW50SVRTTVdvcmtPcmRlclpvb23vvIjlt6XkvZzmjIfku6Tor6bmg4Xnqpflj6PvvInigJ3kuK3vvIzorr7nva7lhoXnva5IVE1M5a2X5q6155qE5pyA5aSn6auY5bqm77yI5Y2V5L2N77ya5YOP57Sg77yJ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIG1pbmltYWwgY2hhbmdlIGNvdW50ZXIgc2l6ZSAoaWYgIkF1dG9JbmNyZW1lbnQiIHdhcyBzZWxlY3RlZCBhcyBJVFNNQ2hhbmdlOjpOdW1iZXJHZW5lcmF0b3IpLiBEZWZhdWx0IGlzIDUsIHRoaXMgbWVhbnMgdGhlIGNvdW50ZXIgc3RhcnRzIGZyb20gMTAwMDAuJ30gPQogICAgICAgICforr7nva7mnIDlsI/nmoTlj5jmm7TorqHmlbDlmajlpKflsI/vvIjlpoLmnpzlj5jmm7TnvJblj7fnlJ/miJDlmajpgInnlKjigJzoh6rliqjlop7ph4/igJ3vvInjgILpu5jorqTmmK8177yI5L2N5pWw77yJ77yM5oSP5ZGz552A6K6h5pWw5Zmo5LuOMTAwMDDlvIDlp4vjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3IgY2hhbmdlcy4nfSA9ICforr7nva7lj5jmm7TnmoTnirbmgIHmqKHlvI/ovazmjaLjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3Igd29ya29yZGVycy4nfSA9ICforr7nva7lt6XkvZzmjIfku6TnmoTnirbmgIHmqKHlvI/ovazmjaLjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBjaGVja2JveCBpbiB0aGUgQWdlbnRJVFNNV29ya09yZGVyRWRpdCBzY3JlZW4gdGhhdCBkZWZpbmVzIGlmIHRoZSB0aGUgZm9sbG93aW5nIHdvcmtvcmRlcnMgc2hvdWxkIGFsc28gYmUgbW92ZWQgaWYgYSB3b3Jrb3JkZXIgaXMgbW9kaWZpZWQgYW5kIHRoZSBwbGFubmVkIGVuZCB0aW1lIGhhcyBjaGFuZ2VkLid9ID0KICAgICAgICAn5Zyo57yW6L6R5bel5L2c5oyH5Luk56qX5Y+j5pi+56S65LiA5Liq5aSN6YCJ5qGG77yM5a6a5LmJ5aaC5p6c5LiA5Liq5bel5L2c5oyH5Luk6KKr5L+u5pS55LiU6K6h5YiS57uT5p2f5pe26Ze06KKr5L+u5pS55pe25piv5ZCm5ZCO6Z2i55qE5bel5L2c5oyH5Luk5Lmf6Lef552A6KKr56e75Yqo5pe26Ze044CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBjaGFuZ2luZyB0aGUgd29ya29yZGVyIGFnZW50LCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLlt6XkvZzmjIfku6Tor6bmg4Xnqpflj6PvvIzlnKjoj5zljZXkuK3mmL7npLrkuIDkuKrlhYHorrjkv67mlLnlt6XkvZzmjIfku6TmnI3liqHkurrlkZjnmoTpk77mjqXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgY2hhbmdlIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgY2hhbmdlLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i5Y+Y5pu06K+m5oOF56qX5Y+j77yM5Zyo6I+c5Y2V5Lit5pi+56S65LiA5Liq5YWB6K645a6a5LmJ5LiA5Liq5Y+Y5pu05Li65qih5p2/55qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIHdvcmtvcmRlciwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WcqOacjeWKoeS6uuWRmOeVjOmdouW3peS9nOaMh+S7pOivpuaDheeql+WPo++8jOWcqOiPnOWNleS4reaYvuekuuS4gOS4quWFgeiuuOWumuS5ieS4gOS4quW3peS9nOaMh+S7pOS4uuaooeadv+eahOmTvuaOpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZWRpdGluZyB0aGUgcmVwb3J0IG9mIGEgd29ya29yZGVyLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLlt6XkvZzmjIfku6Tor6bmg4Xnqpflj6PvvIzlnKjoj5zljZXkuK3mmL7npLrkuIDkuKrlhYHorrjnvJbovpHlt6XkvZzmjIfku6TmiqXlkYrnmoTpk77mjqXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjaGFuZ2Ugd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i5Y+Y5pu06K+m5oOF56qX5Y+j77yM5Zyo6I+c5Y2V5Lit5pi+56S65LiA5Liq5YWB6K646ZO+5o6l5Y+Y5pu05Yiw5Y+m5LiA5a+56LGh55qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgd29ya29yZGVyIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i5bel5L2c5oyH5Luk6K+m5oOF56qX5Y+j77yM5Zyo6I+c5Y2V5Lit5pi+56S65LiA5Liq5YWB6K646ZO+5o6l5bel5L2c5oyH5Luk5Yiw5YW25a6D5a+56LGh55qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBtb3ZpbmcgdGhlIHRpbWUgc2xvdCBvZiBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLlj5jmm7Tor6bmg4Xnqpflj6PvvIzlnKjoj5zljZXkuK3mmL7npLrkuIDkuKrlhYHorrjnp7vliqjlj5jmm7Tml7bpl7TovbTnmoTpk77mjqXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRha2luZyBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i5bel5L2c5oyH5Luk6K+m5oOF56qX5Y+j77yM5Zyo6I+c5Y2V5Lit5pi+56S65LiA5Liq5YWB6K645omn6KGM5LiA5Liq5bel5L2c5oyH5Luk55qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGNvbmRpdGlvbnMgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WcqOacjeWKoeS6uuWRmOeVjOmdouWPmOabtOivpuaDheeql+WPo++8jOWcqOiPnOWNleS4reaYvuekuuS4gOS4quiuv+mXruWPmOabtOadoeS7tueahOmTvuaOpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLlj5jmm7Tor6bmg4Xnqpflj6PvvIzlnKjoj5zljZXkuK3mmL7npLrkuIDkuKrorr/pl67lj5jmm7Tljoblj7LnmoTpk77mjqXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i5bel5L2c5oyH5Luk6K+m5oOF56qX5Y+j77yM5Zyo6I+c5Y2V5Lit5pi+56S65LiA5Liq6K6/6Zeu5bel5L2c5oyH5Luk5Y6G5Y+y55qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSB3b3Jrb3JkZXIgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WcqOacjeWKoeS6uuWRmOeVjOmdouWPmOabtOivpuaDheeql+WPo++8jOWcqOiPnOWNleS4reaYvuekuuS4gOS4qua3u+WKoOW3peS9nOaMh+S7pOeahOmTvuaOpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WcqOacjeWKoeS6uuWRmOeVjOmdouWPmOabtOivpuaDheeql+WPo++8jOWcqOiPnOWNleS4reaYvuekuuS4gOS4quWIoOmZpOWPmOabtOeahOmTvuaOpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgd29ya29yZGVyIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WcqOacjeWKoeS6uuWRmOeVjOmdouW3peS9nOaMh+S7pOivpuaDheeql+WPo++8jOWcqOiPnOWNleS4reaYvuekuuS4gOS4quWIoOmZpOW3peS9nOaMh+S7pOeahOmTvuaOpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i5Y+Y5pu06K+m5oOF56qX5Y+j77yM5Zyo6I+c5Y2V5Lit5pi+56S65LiA5Liq57yW6L6R5Y+Y5pu055qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLlt6XkvZzmjIfku6Tor6bmg4Xnqpflj6PvvIzlnKjoj5zljZXkuK3mmL7npLrkuIDkuKrnvJbovpHlt6XkvZzmjIfku6TnmoTpk77mjqXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WcqOacjeWKoeS6uuWRmOeVjOmdouWPmOabtOivpuaDheeql+WPo++8jOWcqOiPnOWNleS4reaYvuekuuS4gOS4qui/lOWbnumTvuaOpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgd29ya29yZGVyIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i5bel5L2c5oyH5Luk6K+m5oOF56qX5Y+j77yM5Zyo6I+c5Y2V5Lit5pi+56S65LiA5Liq6L+U5Zue6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i5bel5L2c5oyH5Luk6K+m5oOF56qX5Y+j77yM5Zyo6I+c5Y2V5Lit5pi+56S65LiA5Liq5omT5Y2w5Y+Y5pu055qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i5bel5L2c5oyH5Luk6K+m5oOF56qX5Y+j77yM5Zyo6I+c5Y2V5Lit5pi+56S65LiA5Liq5omT5Y2w5bel5L2c5oyH5Luk55qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byByZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i5bel5L2c5oyH5Luk6K+m5oOF56qX5Y+j77yM5Zyo6I+c5Y2V5Lit5pi+56S65LiA5Liq6YeN572u5Y+Y5pu05ZKM5bel5L2c5oyH5Luk55qE6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjaGFuZ2UgaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i5pi+56S65Y+Y5pu05Y6G5Y+y77yI5YCS5bqP77yJ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRlIE1hY2hpbmUnfSA9ICfnirbmgIHmqKHlvI/ovazmjaInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RvcmVzIGNoYW5nZSBhbmQgd29ya29yZGVyIGlkcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB0ZW1wbGF0ZSBpZCwgd2hpbGUgYSB1c2VyIGlzIGVkaXRpbmcgYSB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJ+W9k+eUqOaIt+e8lui+keS4gOS4quaooeadv+aXtu+8jOWtmOWCqOWPmOabtOWSjOW3peS9nOaMh+S7pOeahElE5ZKM5LuW5Lus5a+55bqU55qE5qih5p2/SUTjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXInfSA9ICfmjqXmiYvlt6XkvZzmjIfku6QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSBXb3Jrb3JkZXIuJ30gPSAn5omn6KGM5bel5L2c5oyH5Luk44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rha2UgdGhlIHdvcmtvcmRlci4nfSA9ICfmjqXmiYvov5nkuKrlt6XkvZzmjIfku6TjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgT3ZlcnZpZXcnfSA9ICfmqKHmnb/mpoLop4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUuJ30gPSAn5qih5p2/44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIGNoYW5nZSwgZS5nLiBDaGFuZ2UjLCBNeUNoYW5nZSMuIFRoZSBkZWZhdWx0IGlzIENoYW5nZSMuJ30gPQogICAgICAgICflj5jmm7TnmoTmoIfor4bnrKbvvIzkvovlpoLvvJpDaGFuZ2Uj44CBTXlDaGFuZ2Uj44CC6buY6K6k5Li6Q2hhbmdlI+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSB3b3Jrb3JkZXIsIGUuZy4gV29ya29yZGVyIywgTXlXb3Jrb3JkZXIjLiBUaGUgZGVmYXVsdCBpcyBXb3Jrb3JkZXIjLid9ID0KICAgICAgICAn5bel5L2c5oyH5Luk55qE5qCH6K+G56ym77yM5L6L5aaC77yaV29ya29yZGVyI+OAgU15V29ya29yZGVyI+OAgum7mOiupOS4uldvcmtvcmRlciPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBBQ0wgbW9kdWxlIHJlc3RyaWN0cyB0aGUgdXN1YWdlIG9mIHRoZSB0aWNrZXQgdHlwZXMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbiBcJ0lUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlc1wnLCB0byB1c2VycyBvZiB0aGUgZ3JvdXBzIGFzIGRlZmluZWQgaW4gIklUU01DaGFuZ2U6OlJlc3RyaWN0VGlja2V0VHlwZXM6Okdyb3VwcyIuIEFzIHRoaXMgQUNMIGNvdWxkIGNvbGxpZGUgd2l0aCBvdGhlciBBQ0xzIHdoaWNoIGFyZSBhbHNvIHJlbGF0ZWQgdG8gdGhlIHRpY2tldCB0eXBlLCB0aGlzIHN5c2NvbmZpZyBvcHRpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgc2hvdWxkIG9ubHkgYmUgYWN0aXZhdGVkIGlmIG5lZWRlZC4nfSA9CiAgICAgICAgJ+i/meS4qkFDTOaooeWdl+mZkOWItuS9v+eUqOWumuS5ieWcqOezu+e7n+mFjee9rumAiemhuVwnSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzXCfkuK3nmoTlt6XljZXnsbvlnovvvIwg5LuF5ZyoXCdJVFNNQ2hhbmdlOjpSZXN0cmljdFRpY2tldFR5cGVzOjpHcm91cHNcJ+S4reWumuS5ieeahOe7hOaIkOWRmOiDveWkn+S9v+eUqOOAgui/meS4qkFDTOWPr+iDveS8muWSjOWFtuWug+S4jui/meS4quW3peWNleexu+Wei+ebuOWFs+eahEFDTOWGsueqge+8jCDmiYDku6Xov5nkuKrns7vnu5/phY3nva7pgInpobnpu5jorqTmmK/npoHnlKjnmoTvvIzku4XlnKjpnIDopoHml7blkK/nlKjjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBTbG90J30gPSAn5pe26Ze06L20JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R5cGVzIG9mIHRpY2tldHMsIHdoZXJlIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IGEgbGluayB0byBhZGQgYSBjaGFuZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICflnKjlt6XljZXor6bmg4Xnqpflj6Pmt7vliqDkuIDkuKrlj5jmm7Tpk77mjqXml7bmmL7npLrnmoTlt6XljZXnsbvlnovjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBTZWFyY2gnfSA9ICfnlKjmiLfmkJzntKInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFkZCAoZnJvbSB0ZW1wbGF0ZSkuJ30gPSAn5re75Yqg5bel5L2c5oyH5Luk77yI5LuO5qih5p2/77yJ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQuJ30gPSAn5re75Yqg5bel5L2c5oyH5Luk44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZ2VudC4nfSA9ICflt6XkvZzmjIfku6TmnI3liqHkurrlkZjjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIERlbGV0ZS4nfSA9ICfliKDpmaTlt6XkvZzmjIfku6TjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEVkaXQuJ30gPSAn57yW6L6R5bel5L2c5oyH5Luk44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBIaXN0b3J5IFpvb20uJ30gPSAn5bel5L2c5oyH5Luk5Y6G5Y+y6K+m5oOF44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBIaXN0b3J5Lid9ID0gJ+W3peS9nOaMh+S7pOWOhuWPsuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgUmVwb3J0Lid9ID0gJ+W3peS9nOaMh+S7pOaKpeWRiuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgWm9vbS4nfSA9ICflt6XkvZzmjIfku6Tor6bmg4XjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb25jZSd9ID0gJ+WNleasoSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWd1bGFybHknfSA9ICflrprmnJ8nOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6emhfVFdfSVRTTUNoYW5nZU1hbmFnZW1lbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICfpoZ7liKsgPC0+IOW9semfvyA8LT4g5YSq5YWI57SaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENhdGVnb3J5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICci6aGe5YirIDwtPiDlvbHpn78i5LmL6ZaT55qE57WE5ZCI5rG65a6a5YSq5YWI57qn44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICflhKrlhYjnuqfliIbphY0nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNoYW5nZU5vdGlmaWNhdGlvbgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBDaGFuZ2VNYW5hZ2VtZW50IE5vdGlmaWNhdGlvbiBNYW5hZ2VtZW50J30gPSAn566h55CG6K6K5pu06YCa55+lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOb3RpZmljYXRpb24gUnVsZSd9ID0gJ+a3u+WKoOmAmuefpeimj+WJhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdWxlJ30gPSAn6KaP5YmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Egbm90aWZpY2F0aW9uIHNob3VsZCBoYXZlIGEgbmFtZSEnfSA9ICfpgJrnn6Xlv4XpoIjmnInlkI3nqLHvvIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmFtZSBpcyByZXF1aXJlZC4nfSA9ICflkI3nqLHmmK/lv4XpnIDnmoTjgIInOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTVN0YXRlTWFjaGluZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gU3RhdGUgTWFjaGluZSd9ID0gJ+euoeeQhueLgOaFi+apnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYSBjYXRhbG9nIGNsYXNzISd9ID0gJ+mBuOaTh+ebrumMhOmhnic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGNhdGFsb2cgY2xhc3MgaXMgcmVxdWlyZWQhJ30gPSAn55uu6YyE6aGe5piv5b+F6ZyA55qE77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHN0YXRlIHRyYW5zaXRpb24nfSA9ICfmt7vliqDkuIDlgIvni4DmhYvovYnmj5snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ+ebrumMhOmhnic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPYmplY3QgTmFtZSd9ID0gJ+WwjeixoeWQjeeosSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldyBvdmVyIHN0YXRlIHRyYW5zaXRpb25zIGZvcid9ID0gJ+eLgOaFi+i9ieaPm+amguazgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgdGhpcyBzdGF0ZSB0cmFuc2l0aW9uJ30gPSAn5Yig6Zmk6YCZ5YCL54uA5oWL6L2J5o+bJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGZvcid9ID0gJ+a3u+WKoOS4gOWAi+aWsOeahOi9ieaPm+eLgOaFiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2Ugc2VsZWN0IGEgc3RhdGUhJ30gPSAn6KuL6YG45pOH5LiA5YCL54uA5oWL77yBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBzZWxlY3QgYSBuZXh0IHN0YXRlISd9ID0gJ+iri+mBuOaTh+S4i+S4gOatpeeLgOaFiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IGEgc3RhdGUgdHJhbnNpdGlvbiBmb3InfSA9ICfnt6jovK/ovYnmj5vni4DmhYsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGUgc3RhdGUgdHJhbnNpdGlvbid9ID0gJ+S9oOeiuuWumuimgeWIoOmZpOmAmeWAi+eLgOaFi+i9ieaPm+WXjj8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENoYW5nZSd9ID0gJ+WJteW7uuiuiuabtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSd9ID0gJ+iuiuabtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdXN0aWZpY2F0aW9uJ30gPSAn55CG55SxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lucHV0IGludmFsaWQuJ30gPSAn6Ly45YWl54Sh5pWI44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ+W9semfvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0ZWQgRGF0ZSd9ID0gJ+iri+axguaXpeacnyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgQ2hhbmdlIFRlbXBsYXRlJ30gPSAn6YG45pOH6K6K5pu05qih5p2/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgdHlwZSd9ID0gJ+aZgumWk+mhnuWeiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHRpbWUgdHlwZS4nfSA9ICfnhKHmlYjnmoTmmYLplpPpoZ7lnovjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHRpbWUnfSA9ICfmlrDnmoTmmYLplpMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIENoYW5nZSBDQUIgYXMgdGVtcGxhdGUnfSA9ICfkv53lrZjorormm7RDQULoh7PmqKHmnb8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gdG8gaW52b2x2ZWQgcGVyc29ucyBzY3JlZW4nfSA9ICfovYnlkJHnm7jpl5zkurrlk6Hnqpflj6MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBOYW1lJ30gPSAn54Sh5pWI55qE5ZCN56ixJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb24KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmRpdGlvbnMgYW5kIEFjdGlvbnMnfSA9ICfmop3ku7blkozmk43kvZwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIENvbmRpdGlvbid9ID0gJ+WIoOmZpOaineS7tic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgbmV3IGNvbmRpdGlvbid9ID0gJ+a3u+WKoOaWsOeahOaineS7tic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDb25kaXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBhIHZhbGlkIG5hbWUuJ30gPSAn6ZyA6KaB5LiA5YCL5pyJ5pWI55qE5ZCN56ixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdmFsaWQgbmFtZSBpcyBuZWVkZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R1cGxpY2F0ZSBuYW1lOid9ID0gJ+mHjeikh+eahOWQjeeose+8mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkIGJ5IGFub3RoZXIgY29uZGl0aW9uLid9ID0gJ+WPpuS4gOWAi+aineS7tuW3suiiq+S9v+eUqOmBjuipsuWQjeeoseOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXRjaGluZyd9ID0gJ+WMuemFjSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbnkgZXhwcmVzc2lvbiAoT1IpJ30gPSAn5Lu75oSP6KGo6YGU5byPKOaIliknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIGV4cHJlc3Npb25zIChBTkQpJ30gPSAn5omA5pyJ6KGo6YGU5byPKOiIhyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXhwcmVzc2lvbnMnfSA9ICfooajpgZTlvI8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0b3InfSA9ICfpgbjmk4flmagnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3BlcmF0b3InfSA9ICfmk43kvZznrKYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIEV4cHJlc3Npb24nfSA9ICfliKDpmaTooajpgZTlvI8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gRXhwcmVzc2lvbnMgZm91bmQuJ30gPSAn5rKS5pyJ5om+5Yiw6KGo6YGU5byPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgZXhwcmVzc2lvbid9ID0gJ+a3u+WKoOaWsOeahOihqOmBlOW8jyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgQWN0aW9uJ30gPSAn5Yig6Zmk5pON5L2cJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIEFjdGlvbnMgZm91bmQuJ30gPSAn5rKS5pyJ5om+5Yiw5pON5L2cJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBuZXcgYWN0aW9uJ30gPSAn5re75Yqg5paw55qE5pON5L2cJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBjaGFuZ2U/J30gPSAn5L2g56K65a6a6KaB5Yig6Zmk6YCZ5YCL6K6K5pu05ZeOPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2VIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyJ30gPSAn5bel5L2c5oyH5LukJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgZGV0YWlscyd9ID0gJ+mhr+ekuuips+aDhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHdvcmtvcmRlcid9ID0gJ+mhr+ekuuW3peS9nOaMh+S7pCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSGlzdG9yeVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbGVkIGhpc3RvcnkgaW5mb3JtYXRpb24gb2YgJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kaWZpZWQnfSA9ICfkv67mlLknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2xkIFZhbHVlJ30gPSAn6IiK5YC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBWYWx1ZSd9ID0gJ+aWsOWAvCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEludm9sdmVkIFBlcnNvbnMgb2YgJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZvbHZlZCBQZXJzb25zJ30gPSAn55u46Zec5Lq65ZOhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZU1hbmFnZXInfSA9ICforormm7TntpPnkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBpbnZhbGlkLid9ID0gJ+eUqOaIt+eEoeaViOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VCdWlsZGVyJ30gPSAn6K6K5pu05Ym15bu65Lq6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBBZHZpc29yeSBCb2FyZCd9ID0gJ+iuiuabtOWvqeaJueWnlOWToeacgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgVGVtcGxhdGUnfSA9ICdDQULmqKHmnb8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXBwbHkgVGVtcGxhdGUnfSA9ICfmh4nnlKjmqKHmnb8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3VGVtcGxhdGUnfSA9ICfmlrDmqKHmnb8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZSB0aGlzIENBQiBhcyB0ZW1wbGF0ZSd9ID0gJ+S/neWtmOmAmeWAi0NBQuiHs+aooeadvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdG8gQ0FCJ30gPSAn5re75Yqg6IezQ0FCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgVXNlcid9ID0gJ+eEoeaViOeahOeUqOaItyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IENBQid9ID0gJ+eVtuWJjUNBQic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICfkuIrkuIvmlofoqK3nva4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlcyBwZXIgcGFnZSd9ID0gJ+avj+mggemhr+ekuueahOiuiuabtOWAi+aVuCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlT3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEJ1aWxkZXInfSA9ICforormm7TlibXlu7rkuronOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIE1hbmFnZXInfSA9ICforormm7TntpPnkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVycyd9ID0gJ+W3peS9nOaMh+S7pCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIFN0YXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBUeXBlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RlZCBUaW1lJ30gPSAn6KuL5rGC5pmC6ZaTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsYW5uZWQgU3RhcnQgVGltZSd9ID0gJ+ioiOWKg+mWi+Wni+aZgumWkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkIEVuZCBUaW1lJ30gPSAn6KiI5YqD57WQ5p2f5pmC6ZaTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBTdGFydCBUaW1lJ30gPSAn56K65a+m6ZaL5aeL5pmC6ZaTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdHVhbCBFbmQgVGltZSd9ID0gJ+eiuuWvpue1kOadn+aZgumWkyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlUmVzZXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byByZXNldCB0aGlzIGNoYW5nZT8nfSA9ICfkvaDnorrlrpropoHliKDpmaTpgJnlgIvorormm7Tll47vvJ8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUNoYW5nZVNlYXJjaAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnKGUuZy4gMTAqNTE1NSBvciAxMDU2NTgqKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgQWdlbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZS5nLid9ID0gJ+S+iyAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ0FCIEN1c3RvbWVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIEluc3RydWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIFJlcG9ydCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBQcmlvcml0eSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBJbXBhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIENhdGVnb3J5J30gPSAn6K6K5pu06aGe5YirJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhiZWZvcmUvYWZ0ZXIpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JyhiZXR3ZWVuKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmUgQ2hhbmdlIGFzIFRlbXBsYXRlJ30gPSAn5L+d5a2Y6K6K5pu06Iez5qih5p2/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdGVtcGxhdGUgc2hvdWxkIGhhdmUgYSBuYW1lISd9ID0gJ+aooeadv+aHieacieWQjeeosSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHRlbXBsYXRlIG5hbWUgaXMgcmVxdWlyZWQuJ30gPSAn5qih5p2/5ZCN56ix5piv5b+F6ZyA55qE44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IFN0YXRlcyd9ID0gJ+mHjee9rueLgOaFiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVyd3JpdGUgb3JpZ2luYWwgdGVtcGxhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIG9yaWdpbmFsIGNoYW5nZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgVGltZSBTbG90J30gPSAn5L+u5pS55pmC6ZaT6KiI5YqDJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DaGFuZ2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgSW5mb3JtYXRpb24nfSA9ICforormm7Tkv6Hmga8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZCBFZmZvcnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWNjb3VudGVkIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEluaXRpYXRvcihzKSd9ID0gJ+iuiuabtOeZvOi1t+S6uic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUInfSA9ICdDQUInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn5LiK5qyh5L+u5pS5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ+S4iuasoeS/ruaUueS6uic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPayd9ID0gJ09rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Rvd25sb2FkIEF0dGFjaG1lbnQnfSA9ICfkuIvovInpmYTku7YnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlRWRpdENBQgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDQUIgVGVtcGxhdGUnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgY2hhbmdlIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBuZXcgY2hhbmdlIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIGl0IGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgd29ya29yZGVyIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdGVtcG9yYXJ5IGNoYW5nZSB3aWxsIGJlIGNyZWF0ZWQgd2hpY2ggY29udGFpbnMgdGhlIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgdGVtcG9yYXJ5IGNoYW5nZSBhbmQgbmV3IHdvcmtvcmRlciB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciB0aGUgd29ya29yZGVyIGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSB3YW50IHRvIHByb2NlZWQ/J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RlbXBsYXRlIElEJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ29udGVudCd9ID0gJ+e3qOi8r+WFp+WuuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBUaW1lJ30gPSAn6K6K5pu05pmC6ZaTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGVtcGxhdGUgQ29udGVudCd9ID0gJ+e3qOi8r+aooeadv+WFp+WuuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgVGVtcGxhdGUnfSA9ICfliKrpmaTmqKHmnb8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFkZAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlciB0byAlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luc3RydWN0aW9uJ30gPSAn5oyH56S6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgd29ya29yZGVyIHR5cGUuJ30gPSAn54Sh5pWI55qE5bel5L2c5oyH5Luk6aGe5Z6LJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBwbGFubmVkIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIHBsYW5uZWQgZW5kIHRpbWUhJ30gPSAn6KiI5YqD6ZaL5aeL5pmC6ZaT5b+F6aCI5Zyo6KiI5YqD57WQ5p2f5pmC6ZaT5LmL5YmNISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIGZvcm1hdC4nfSA9ICfnhKHmlYjnmoTmoLzlvI8uJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBXb3Jrb3JkZXIgVGVtcGxhdGUnfSA9ICfpgbjmk4flt6XkvZzmjIfku6TmqKHmnb8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlckFnZW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFdvcmtvcmRlciBBZ2VudCBvZiAlcyVzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyB3b3Jrb3JkZXI/J30gPSAn5L2g56K65a6a6KaB5Yiq6Zmk6YCZ5YCL5bel5L2c5oyH5Luk5ZeOPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBXb3Jrb3JkZXIuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIENvbmRpdGlvbiEnfSA9CiAgICAgICAgJ+S9oOeEoeazleWIqumZpOmAmeWAi+W3peS9nOWWruOAguiHs+WwkeacieS4gOWAi+aineS7tueUqOWIsOS6huWugyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBXb3Jrb3JkZXIgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIENvbmRpdGlvbihzKSd9ID0gJ+atpOW3peS9nOaMh+S7pOWHuuePvuWcqOS4i+WIl+aineS7tuS4rSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCAlcyVzLSVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgZm9sbG93aW5nIHdvcmtvcmRlcnMgYWNjb3JkaW5nbHknfSA9ICfnm7jmh4nnmoTnp7vli5Xlt6XkvZzmjIfku6QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhlIHBsYW5uZWQgZW5kIHRpbWUgb2YgdGhpcyB3b3Jrb3JkZXIgaXMgY2hhbmdlZCwgdGhlIHBsYW5uZWQgc3RhcnQgdGltZXMgb2YgYWxsIGZvbGxvd2luZyB3b3Jrb3JkZXJzIHdpbGwgYmUgY2hhbmdlZCBhY2NvcmRpbmdseSd9ID0KICAgICAgICAn5aaC5p6c6Kmy5bel5L2c5oyH5Luk55qE6KiI5YqD57WQ5p2f5pmC6ZaT5pS56K6K5LqG77yM5omA5pyJ5b6M57qM5bel5L2c5oyH5Luk55qE6KiI5YqD6ZaL5aeL5pmC6ZaT5bCH55u45oeJ55qE5pS56K6KJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5IG9mICVzJXMtJXMnfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclJlcG9ydAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBSZXBvcnQgb2YgJXMlcy0lcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnQnfSA9ICfloLHlkYonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIHRpbWUhJ30gPSAn5a+m6Zqb6ZaL5aeL5pmC6ZaT5b+F6aCI5Zyo5a+m6Zqb57WQ5p2f5pmC6ZaT5LmL5YmNISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgYWN0dWFsIHN0YXJ0IHRpbWUgbXVzdCBiZSBzZXQsIHdoZW4gdGhlIGFjdHVhbCBlbmQgdGltZSBpcyBzZXQhJ30gPQogICAgICAgICfoqK3nva7lr6bpmpvntZDmnZ/mmYLplpPlvozlv4XpoIjoqK3nva7lr6bpmpvplovlp4vmmYLplpMhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01Xb3JrT3JkZXJUYWtlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEFnZW50J30gPSAn55W25YmN55qE5pyN5YuZ5Lq65ZOhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byB0YWtlIHRoaXMgd29ya29yZGVyPyd9ID0gJ+S9oOeiuuWumuimgeWIqumZpOmAmeWAi+W3peS9nOaMh+S7pOWXjj8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIFdvcmtvcmRlciBhcyBUZW1wbGF0ZSd9ID0gJ+S/neWtmOW3peS9nOaMh+S7pOiHs+aooeadvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgb3JpZ2luYWwgd29ya29yZGVyIChhbmQgc3Vycm91bmRpbmcgY2hhbmdlKSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNV29ya09yZGVyWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEluZm9ybWF0aW9uJ30gPSAn5bel5L2c5oyH5Luk5L+h5oGvJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vua25vd24gbm90aWZpY2F0aW9uICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSB3YXMgYW4gZXJyb3IgY3JlYXRpbmcgdGhlIG5vdGlmaWNhdGlvbi4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IElUU00gQ2hhbmdlcyd9ID0gJ+amguazge+8mklUU00g6K6K5pu0JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCB3aXRoIFRpY2tldElEICVzIGRvZXMgbm90IGV4aXN0ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaXNzaW5nIHN5c2NvbmZpZyBvcHRpb24gIklUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyIhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGFkZCBjaGFuZ2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlIGZyb20gdGVtcGxhdGUhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDQUJUZW1wbGF0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNoYW5nZSBmb3VuZCBmb3IgY2hhbmdlSUQgJXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBDQUIgb2YgY2hhbmdlICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBhZGQgdGhlIHRlbXBsYXRlLid9ID0gJ+eEoeazlea3u+WKoOaooeadvyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvdWxkIG5vdCBkZWxldGUgQ29uZGl0aW9uSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyAlcyBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGNyZWF0ZSBuZXcgY29uZGl0aW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIENvbmRpdGlvbklEICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgdXBkYXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgRXhwcmVzc2lvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSBBY3Rpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGFkZCBuZXcgQWN0aW9uISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb3VsZCBub3QgZGVsZXRlIEV4cHJlc3Npb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBBY3Rpb25JRCAlcyEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3I6IFVua25vd24gZmllbGQgdHlwZSAiJXMiISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25kaXRpb25JRCAlcyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIGdpdmVuIENoYW5nZUlEICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlRGVsZXRlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBkb2VzIG5vdCBoYXZlIGFuIGFsbG93ZWQgY2hhbmdlIHN0YXRlIHRvIGJlIGRlbGV0ZWQhJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY2hhbmdlSUQgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3RvcnkucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzaG93IGhpc3RvcnksIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmtub3duIHR5cGUgIiVzIiBlbmNvdW50ZXJlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnknfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2hvdyBoaXN0b3J5IHpvb20sIG5vIEhpc3RvcnlFbnRyeUlEIGlzIGdpdmVuISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIaXN0b3J5RW50cnkgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlIENBQiBmb3IgQ2hhbmdlICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZU1hbmFnZXIucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2VNYW5hZ2VyJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VNeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnZpZXc6IE15IENBQid9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgQ2hhbmdlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlTXlXb3JrT3JkZXJzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogTXkgV29ya29yZGVycyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUElSLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydmlldzogUElSJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01DaGFuZ2VQU0EucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBQU0EnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVByaW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBjcmVhdGUgb3V0cHV0LCBhcyB0aGUgd29ya29yZGVyIGlzIG5vdCBhdHRhY2hlZCB0byBhIGNoYW5nZSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgbm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gY2hhbmdlIHRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyJ30gPSAn5bel5L2c5oyH5LukJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3Vua25vd24gd29ya29yZGVyIHRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gV29ya29yZGVyIE92ZXJ2aWV3ICglcyknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxhbm5lZFN0YXJ0VGltZSd9ID0gJ+ioiOWKg+mWi+Wni+aZgumWkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGFubmVkRW5kVGltZSd9ID0gJ+ioiOWKg+e1kOadn+aZgumWkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3R1YWxTdGFydFRpbWUnfSA9ICflr6bpmpvplovlp4vmmYLplpMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0dWFsRW5kVGltZSd9ID0gJ+Wvpumam+e1kOadn+aZgumWkyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlUmVzZXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byByZXNldCBXb3JrT3JkZXIgJXMgb2YgQ2hhbmdlICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gcmVzZXQgQ2hhbmdlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlU2NoZWR1bGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBDaGFuZ2UgU2NoZWR1bGUnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVNlYXJjaC5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VUaXRsZSd9ID0gJ+iuiuabtOaomemimCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXJzJ30gPSAn5bel5L2c5oyH5LukJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZVN0YXRlJ30gPSAn6K6K5pu054uA5oWLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTZWFyY2ggUmVzdWx0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBOdW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29yayBPcmRlciBUaXRsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEp1c3RpZmljYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEluc3RydWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciBSZXBvcnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFByaW9yaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbXBhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBCeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIFR5cGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya09yZGVyIEFnZW50J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZm9yZSd9ID0gJ+S5i+WJjSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBjaGFuZ2UgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IHVwZGF0ZSB0aGUgdGVtcGxhdGUgIiVzIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGRlbGV0ZSBjaGFuZ2UgIiVzIi4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTUNoYW5nZVRpbWVTbG90LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY2hhbmdlIGNhblwndCBiZSBtb3ZlZCwgYXMgaXQgaGFzIG5vIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciBmaXJzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IG1vdmUgYSBjaGFuZ2Ugd2hpY2ggYWxyZWFkeSBoYXMgc3RhcnRlZCEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIG1vdmUgdGhlIGluZGl2aWR1YWwgd29ya29yZGVycyBpbnN0ZWFkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgY3VycmVudCAlcyBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlICVzIG9mIGFsbCB3b3Jrb3JkZXJzIGhhcyB0byBiZSBkZWZpbmVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gbW92ZSB0aW1lIHNsb3QgZm9yIHdvcmtvcmRlciAjJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZURlbGV0ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IG5lZWQgJXMgcGVybWlzc2lvbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gVGVtcGxhdGVJRCBpcyBnaXZlbiEnfSA9ICfmspLmnInmj5DkvpvmqKHmnb9JRCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGVtcGxhdGUgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJ30gPSAn5Zyo5pW45pOa5bqr5Lit5rKS5pyJ5om+5Yiw5qih5p2/ICIlcyIhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHRlbXBsYXRlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q0FCLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICIlcyIhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSB3b3Jrb3JkZXIgZnJvbSB0ZW1wbGF0ZSEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3OiBUZW1wbGF0ZSd9ID0gJ+amguazge+8muaooeadvyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyQWRkLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyBvbiB0aGUgY2hhbmdlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gYWRkIHdvcmtvcmRlciEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckFnZW50LnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBXb3JrT3JkZXJJRCBpcyBnaXZlbiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FzIG5vdCBhYmxlIHRvIHNldCB0aGUgd29ya29yZGVyIGFnZW50IG9mIHRoZSB3b3Jrb3JkZXIgIiVzIiB0byBlbXB0eSEnfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdXBkYXRlIHRoZSB3b3Jrb3JkZXIgIiVzIiEnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ291bGQgbm90IGZpbmQgQ2hhbmdlIGZvciBXb3JrT3JkZXIgJXMhJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJEZWxldGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byBkZWxldGUgdGhlIHdvcmtvcmRlciAlcyEnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVdvcmtPcmRlckVkaXQucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcyBub3QgYWJsZSB0byB1cGRhdGUgV29ya09yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtPcmRlckhpc3Rvcnk6Oid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeVpvb20ucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hpc3RvcnkgZW50cnkgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JrT3JkZXIgSGlzdG9yeSBab29tJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudElUU01Xb3JrT3JkZXJUYWtlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXMgbm90IGFibGUgdG8gdGFrZSB0aGUgd29ya29yZGVyICVzISd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRJVFNNV29ya09yZGVyVGVtcGxhdGUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSB3b3Jrb3JkZXIgIiVzIiBjb3VsZCBub3QgYmUgc2VyaWFsaXplZC4nfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXQvSVRTTUNoYW5nZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCBjb25maWcgb3B0aW9uICVzISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWcgb3B0aW9uICVzIG5lZWRzIHRvIGJlIGEgSEFTSCByZWYhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGNvbmZpZyBvcHRpb24gZm91bmQgZm9yIHRoZSB2aWV3ICIlcyIhJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpdGxlOiAlcyB8IFR5cGU6ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeUNBQi5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTXkgQ0FCcyd9ID0gJ+aIkeeahENBQic7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1Rvb2xCYXIvTXlDaGFuZ2VzLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNeSBDaGFuZ2VzJ30gPSAn5oiR55qE6K6K5pu0JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVG9vbEJhci9NeVdvcmtPcmRlcnMucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J015IFdvcmsgT3JkZXJzJ30gPSAnJzsKCiAgICAjIERhdGFiYXNlIFhNTCBEZWZpbml0aW9uOiBJVFNNQ2hhbmdlTWFuYWdlbWVudC5zb3BtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZXF1ZXN0ZWQnfSA9ICfoq4vmsYInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncGVuZGluZyBhcHByb3ZhbCd9ID0gJ+W+heWvqeaJuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWplY3RlZCd9ID0gJ+iiq+aLkue1lSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZlZCd9ID0gJ+mAmumBjuWvqeaJuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpbiBwcm9ncmVzcyd9ID0gJ+iZleeQhuS4rSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwZW5kaW5nIHBpcid9ID0gJ+etieW+heWvpuaWveW+jOWvqeafpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzdWNjZXNzZnVsJ30gPSAn5oiQ5YqfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2ZhaWxlZCd9ID0gJ+WkseaVlyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjYW5jZWxlZCd9ID0gJ+WPlua2iCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZXRyYWN0ZWQnfSA9ICfmkqTlm54nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnY3JlYXRlZCd9ID0gJ+WJteW7uuaWvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhY2NlcHRlZCd9ID0gJ+aOpeWPlyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWFkeSd9ID0gJ+a6luWCmemWi+Wniyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhcHByb3ZhbCd9ID0gJ+WvqeaJuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd3b3Jrb3JkZXInfSA9ICflt6XkvZzmjIfku6QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYmFja291dCd9ID0gJ+mAgOWbnic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydkZWNpc2lvbid9ID0gJ+axuuWumic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydwaXInfSA9ICdQSVIgKOWvpuaWveW+jOWvqeafpSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMnfSA9ICfmmK8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbm90J30gPSAn5LiN5pivJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGVtcHR5J30gPSAn56m655m9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIG5vdCBlbXB0eSd9ID0gJ+mdnuepuueZvSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBncmVhdGVyIHRoYW4nfSA9ICflpKfmlrwuLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnaXMgbGVzcyB0aGFuJ30gPSAn5bCP5pa8Li4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2lzIGJlZm9yZSd9ID0gJy4uLuS5i+WJjSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydpcyBhZnRlcid9ID0gJy4uLuS5i+W+jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydjb250YWlucyd9ID0gJ+WQq+aciSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgY29udGFpbnMnfSA9ICdkb2VzIG5vdCBjb250YWluJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2JlZ2lucyB3aXRoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2VuZHMgd2l0aCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydzZXQnfSA9ICfoqK3nva4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIGxpc3Qgb2YgdGhlIGFnZW50cyB3aG8gaGF2ZSBwZXJtaXNzaW9uIHRvIHRha2Ugd29ya29yZGVycy4gS2V5IGlzIGEgbG9naW4gbmFtZS4gQ29udGVudCBpcyAwIG9yIDEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBsaXN0IG9mIHdvcmtvcmRlciBzdGF0ZXMsIGF0IHdoaWNoIHRoZSBBY3R1YWxTdGFydFRpbWUgb2YgYSB3b3Jrb3JkZXIgd2lsbCBiZSBzZXQgaWYgaXQgd2FzIGVtcHR5IGF0IHRoaXMgcG9pbnQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFdvcmtvcmRlcid9ID0gJ+a3u+WKoOW3peS9nOaMh+S7pCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgV29ya29yZGVyIChmcm9tIFRlbXBsYXRlKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBjaGFuZ2UgZnJvbSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSB3b3Jrb3JkZXIgKGZyb20gdGVtcGxhdGUpIHRvIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBhIHdvcmtvcmRlciB0byB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgZnJvbSB0ZW1wbGF0ZSd9ID0gJ1ZvbiBUZW1wbGF0ZSBoaW56dWbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgQ0lQIG1hdHJpeC4nfSA9ICfnrqHnkIZDSVDnn6npmaMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRtaW4gb2YgdGhlIHN0YXRlIG1hY2hpbmUuJ30gPSAn566h55CG54uA5oWL5qmfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZSBhZHZpc29yeSBib2FyZHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgY2hhbmdlcyBtYW5hZ2VkIGJ5IHRoZSB1c2VyLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGNoYW5nZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2Ygd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDQUIgTWVtYmVyIFNlYXJjaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudCB0b29sYmFycy4gRGVmYXVsdDogMyBob3VycyAoMTgwIG1pbnV0ZXMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIGNoYW5nZSBtYW5hZ2VtZW50LiBEZWZhdWx0OiA1IGRheXMgKDcyMDAgbWludXRlcykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIENBQiBUZW1wbGF0ZXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIEhpc3RvcnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBJbnZvbHZlZCBQZXJzb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBQcmludC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFNjaGVkdWxlJ30gPSAn6K6K5pu06KiI5YqDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBTY2hlZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBhbmQgV29ya29yZGVyIFRlbXBsYXRlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgYW5kIHdvcmtvcmRlciB0ZW1wbGF0ZXMgZWRpdGVkIGJ5IHRoaXMgdXNlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIGFyZWEuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBpbnZvbHZlZCBwZXJzb25zIG9mIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBsaW1pdCBwZXIgcGFnZSBmb3IgQ2hhbmdlIE92ZXJ2aWV3ICJTbWFsbCIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSBzZWFyY2ggYmFja2VuZCByb3V0ZXIgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIEVkaXQnfSA9ICfliKDpmaQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZGl0aW9uIE92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyZSB3aGljaCBzY3JlZW4gc2hvdWxkIGJlIHNob3duIGFmdGVyIGEgbmV3IHdvcmtvcmRlciBoYXMgYmVlbiBjcmVhdGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpZ3VyZXMgaG93IG9mdGVuIHRoZSBub3RpZmljYXRpb25zIGFyZSBzZW50IHdoZW4gcGxhbm5lZCB0aGUgc3RhcnQgdGltZSBvciBvdGhlciB0aW1lIHZhbHVlcyBoYXZlIGJlZW4gcmVhY2hlZC9wYXNzZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIENoYW5nZSd9ID0gJ+WJteW7uuiuiuabtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgQ2hhbmdlIChmcm9tIFRlbXBsYXRlKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYSBjaGFuZ2UgKGZyb20gdGVtcGxhdGUpIGZyb20gdGhpcyB0aWNrZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhIGNoYW5nZSBmcm9tIHRoaXMgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSBJVFNNIENoYW5nZSBNYW5hZ2VtZW50IG5vdGlmaWNhdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdHlwZSBmb3IgYSB3b3Jrb3JkZXIuIFRoaXMgZW50cnkgbXVzdCBleGlzdCBpbiBnZW5lcmFsIGNhdGFsb2cgY2xhc3MgXCdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpXb3JrT3JkZXI6OlR5cGVcJy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgQWN0aW9ucyB3aGVyZSBhIHNldHRpbmdzIGJ1dHRvbiBpcyBhdmFpbGFibGUgaW4gdGhlIGxpbmtlZCBvYmplY3RzIHdpZGdldCAoTGlua09iamVjdDo6Vmlld01vZGUgPSAiY29tcGxleCIpLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFjdGlvbnMgbXVzdCBoYXZlIHJlZ2lzdGVyZWQgdGhlIGZvbGxvd2luZyBKUyBhbmQgQ1NTIGZpbGVzOiBDb3JlLkFsbG9jYXRpb25MaXN0LmNzcywgQ29yZS5VSS5BbGxvY2F0aW9uTGlzdC5qcywgQ29yZS5VSS5UYWJsZS5Tb3J0LmpzLCBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5qcyBhbmQgQ29yZS5BZ2VudC5MaW5rT2JqZWN0LmpzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgc2lnbmFscyBmb3IgZWFjaCB3b3Jrb3JkZXIgc3RhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIENoYW5nZXMgd2lkZ2V0IChMaW5rT2JqZWN0OjpWaWV3TW9kZSA9ICJjb21wbGV4IikuIE5vdGU6IE9ubHkgQ2hhbmdlIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQgZm9yIERlZmF1bHRDb2x1bW5zLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gQXZhaWxhYmxlLCAyID0gRW5hYmxlZCBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB3aGljaCBjb2x1bW5zIGFyZSBzaG93biBpbiB0aGUgbGlua2VkIFdvcmtvcmRlciB3aWRnZXQgKExpbmtPYmplY3Q6OlZpZXdNb2RlID0gImNvbXBsZXgiKS4gTm90ZTogT25seSBXb3Jrb3JkZXIgYXR0cmlidXRlcyBhcmUgYWxsb3dlZCBmb3IgRGVmYXVsdENvbHVtbnMuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBBdmFpbGFibGUsIDIgPSBFbmFibGVkIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIGNoYW5nZSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSB0ZW1wbGF0ZSBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgYWNjb3VudGVkIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBwcmludCB0aGUgcGxhbm5lZCBlZmZvcnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgcmVhY2hhYmxlIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lKSBjaGFuZ2UgZW5kIHN0YXRlcyBzaG91bGQgYmUgYWxsb3dlZCBpZiBhIGNoYW5nZSBpcyBpbiBhIGxvY2tlZCBzdGF0ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHJlYWNoYWJsZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhdGUgbWFjaGluZSkgd29ya29yZGVyIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaWYgYSB3b3Jrb3JkZXIgaXMgaW4gYSBsb2NrZWQgc3RhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgYWNjb3VudGVkIHRpbWUgc2hvdWxkIGJlIHNob3duLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBzaG91bGQgYmUgc2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBjaGFuZ2Ugc2VhcmNoIGFuZCB0aGUgd29ya29yZGVyIHNlYXJjaCBmdW5jdGlvbnMgY291bGQgdXNlIHRoZSBtaXJyb3IgREIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgY2hhbmdlIHN0YXRlIGNhbiBiZSBzZXQgaW4gQWdlbnRJVFNNQ2hhbmdlRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBwbGFubmVkIGVmZm9ydCBzaG91bGQgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBwcmludCBieSBjdXN0b21lci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgcmVxdWVzdGVkIGRhdGUgc2hvdWxkIGJlIHNlYXJjaGVkIGJ5IGN1c3RvbWVyLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzZXQgYnkgY3VzdG9tZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIHJlcXVlc3RlZCBkYXRlIHNob3VsZCBiZSBzaG93biBieSBjdXN0b21lci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHN0YXRlIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgd29ya29yZGVyIHRpdGxlIHNob3VsZCBiZSBzaG93bi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBzaG93biBncmFwaCBhdHRyaWJ1dGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoYXQgb25seSBjaGFuZ2VzIGNvbnRhaW5pbmcgV29ya29yZGVycyBsaW5rZWQgd2l0aCBzZXJ2aWNlcywgd2hpY2ggdGhlIGN1c3RvbWVyIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gdXNlIHdpbGwgYmUgc2hvd24uIEFueSBvdGhlciBjaGFuZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSBhbGxvd2VkIHRvIGRlbGV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBDaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGNoYW5nZSBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgY2hhbmdlIHN0YXRlcyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXJzIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBjaGFuZ2Ugc3RhdGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGNoYW5nZSB0aXRsZSBmb3IgYSBkdW1teSBjaGFuZ2Ugd2hpY2ggaXMgbmVlZGVkIHRvIGVkaXQgYSB3b3Jrb3JkZXIgdGVtcGxhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2UgUFNBIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIG1hbmFnZXIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIGluIHRoZSBjaGFuZ2Ugb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBpbiB0aGUgY2hhbmdlIHNjaGVkdWxlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBjcml0ZXJpYSBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgTXlDQUIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeUNoYW5nZXMgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IGNyaXRlcmlhIG9mIHRoZSBjaGFuZ2VzIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBQSVIgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciBpbiB0aGUgY2hhbmdlIFBTQSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2UgbWFuYWdlciBvdmVydmlldy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHNvcnQgb3JkZXIgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSBjdXN0b21lciBjaGFuZ2Ugc2NoZWR1bGUgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBzb3J0IG9yZGVyIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNhdGVnb3J5IG9mIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW1wYWN0IG9mIGEgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmaWVsZCB0eXBlIG9mIENvbXBhcmVWYWx1ZSBmaWVsZHMgZm9yIGNoYW5nZSBhdHRyaWJ1dGVzIHVzZWQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4gVmFsaWQgdmFsdWVzIGFyZSBTZWxlY3Rpb24sIFRleHQgYW5kIERhdGUuIElmIGEgdHlwZSBpcyBub3QgZGVmaW5lZCwgdGhlIGZpZWxkIHdpbGwgbm90IGJlIHNob3duLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZpZWxkIHR5cGUgb2YgQ29tcGFyZVZhbHVlIGZpZWxkcyBmb3Igd29ya29yZGVyIGF0dHJpYnV0ZXMgdXNlZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0LiBWYWxpZCB2YWx1ZXMgYXJlIFNlbGVjdGlvbiwgVGV4dCBhbmQgRGF0ZS4gSWYgYSB0eXBlIGlzIG5vdCBkZWZpbmVkLCB0aGUgZmllbGQgd2lsbCBub3QgYmUgc2hvd24uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgY2hhbmdlIG9iamVjdHMgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvYmplY3QgYXR0cmlidXRlcyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB3b3Jrb3JkZXIgb2JqZWN0cyBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEFjY291bnRlZFRpbWUgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBBY3R1YWxFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQWN0dWFsU3RhcnRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgQ2F0ZWdvcnlJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZUJ1aWxkZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZU1hbmFnZXJJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIENoYW5nZVN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBDaGFuZ2VUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIER5bmFtaWNGaWVsZCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIEltcGFjdElEIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZEVmZm9ydCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFBsYW5uZWRFbmRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgUGxhbm5lZFN0YXJ0VGltZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFByaW9yaXR5SUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBSZXF1ZXN0ZWRUaW1lIGluIEFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgb3BlcmF0b3JzIHRoYXQgYXJlIHNlbGVjdGFibGUgZm9yIHRoZSBhdHRyaWJ1dGUgV29ya09yZGVyQWdlbnRJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlck51bWJlciBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclN0YXRlSUQgaW4gQWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBvcGVyYXRvcnMgdGhhdCBhcmUgc2VsZWN0YWJsZSBmb3IgdGhlIGF0dHJpYnV0ZSBXb3JrT3JkZXJUaXRsZSBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG9wZXJhdG9ycyB0aGF0IGFyZSBzZWxlY3RhYmxlIGZvciB0aGUgYXR0cmlidXRlIFdvcmtPcmRlclR5cGVJRCBpbiBBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHBlcmlvZCAoaW4geWVhcnMpLCBpbiB3aGljaCBzdGFydCBhbmQgZW5kIHRpbWVzIGNhbiBiZSBzZWxlY3RlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBhdHRyaWJ1dGVzIG9mIGEgd29ya29yZGVyIGluIHRoZSB0b29sdGlwIG9mIHRoZSB3b3Jrb3JkZXIgZ3JhcGggaW4gdGhlIGNoYW5nZSB6b29tLiBUbyBzaG93IHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcyBpbiB0aGUgdG9vbHRpcCwgdGhleSBtdXN0IGJlIHNwZWNpZmllZCBsaWtlIER5bmFtaWNGaWVsZF9Xb3JrT3JkZXJGaWVsZE5hbWUxLCBEeW5hbWljRmllbGRfV29ya09yZGVyRmllbGROYW1lMiwgZXRjLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIENoYW5nZSBQU0Egb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgQ2hhbmdlIFNjaGVkdWxlIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q0FCIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIE15Q2hhbmdlcyBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBNeVdvcmtvcmRlcnMgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgUElSIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBtYW5hZ2VyIG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGNoYW5nZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBjaGFuZ2Ugc2VhcmNoLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIGN1c3RvbWVyIGNoYW5nZSBzY2hlZHVsZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSB0ZW1wbGF0ZSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaWduYWxzIGZvciBlYWNoIElUU01DaGFuZ2Ugc3RhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHRlbXBsYXRlIHR5cGVzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlcnMgaW4gdGhlIHRlbXBsYXRlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgTXlXb3Jrb3JkZXJzIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVycyBpbiB0aGUgUElSIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHdvcmtvcmRlciB0eXBlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBzaG93IHRoZSBQSVIgb3ZlcnZpZXcuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB3aGV0aGVyIG5vdGlmaWNhdGlvbnMgc2hvdWxkIGJlIHNlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzIG9mIGEgY2hhbmdlIGhpc3RvcnkgZW50cnkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgYW4gYWdlbnQgY2FuIGV4Y2hhbmdlIHRoZSBYLWF4aXMgb2YgYSBzdGF0IGlmIGhlIGdlbmVyYXRlcyBvbmUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyBkb25lIGZvciBjb25maWcgaXRlbSBjbGFzc2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IGNoYW5nZXMgcmVnYXJkaW5nIGNoYW5nZSBzdGF0ZSB1cGRhdGVzIHdpdGhpbiBhIHRpbWVwZXJpb2QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgY29tbW9uIHN0YXRzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgc3RhdHMgYWJvdXQgY2hhbmdlcyByZWdhcmRpbmcgdGhlIHJlbGF0aW9uIGJldHdlZW4gY2hhbmdlcyBhbmQgaW5jaWRlbnQgdGlja2V0cy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRlcm1pbmVzIGlmIHRoZSBjb21tb24gc3RhdHMgbW9kdWxlIG1heSBnZW5lcmF0ZSBzdGF0cyBhYm91dCBjaGFuZ2VzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGVybWluZXMgaWYgdGhlIGNvbW1vbiBzdGF0cyBtb2R1bGUgbWF5IGdlbmVyYXRlIHN0YXRzIGFib3V0IHRoZSBudW1iZXIgb2YgUmZjIHRpY2tldHMgYSByZXF1ZXN0ZXIgY3JlYXRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyAoZm9yIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMpIHNob3duIGluIHRoZSBjaGFuZ2UgcHJpbnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgYWRkIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0R5bmFtaWMgZmllbGRzIHNob3duIGluIHRoZSBjaGFuZ2UgZWRpdCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgY2hhbmdlIHNlYXJjaCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIGNoYW5nZSB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGFkZCBzY3JlZW4gb2YgdGhlIGFnZW50IGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljIGZpZWxkcyBzaG93biBpbiB0aGUgd29ya29yZGVyIGVkaXQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciByZXBvcnQgc2NyZWVuIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRHluYW1pYyBmaWVsZHMgc2hvd24gaW4gdGhlIHdvcmtvcmRlciB6b29tIHNjcmVlbiBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEeW5hbWljRmllbGQgZXZlbnQgbW9kdWxlIHRvIGhhbmRsZSB0aGUgdXBkYXRlIG9mIGNvbmRpdGlvbnMgaWYgZHluYW1pYyBmaWVsZHMgYXJlIGFkZGVkLCB1cGRhdGVkIG9yIGRlbGV0ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aGUgY2hhbmdlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRoZSBjb25kaXRpb25zIG9mIHRoZSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9yd2FyZCBzY2hlZHVsZSBvZiBjaGFuZ2VzLiBPdmVydmlldyBvdmVyIGFwcHJvdmVkIGNoYW5nZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSGlzdG9yeSBab29tJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIENBQiBUZW1wbGF0ZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIENvbmRpdGlvbiBFZGl0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBDb25kaXRpb24gT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIE1hbmFnZW1lbnQgTm90aWZpY2F0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBNYW5hZ2VyIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZSBQSVIgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gQ2hhbmdlIG5vdGlmaWNhdGlvbiBydWxlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIENoYW5nZXMnfSA9ICforormm7QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeUNBQiBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBNeUNoYW5nZXMgT3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gTXlXb3Jrb3JkZXJzIE92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIFRlbXBsYXRlIERlbGV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0IENBQi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBFZGl0IENvbnRlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gVGVtcGxhdGUgRWRpdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBUZW1wbGF0ZSBPdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBjbGVhbnMgdXAgY29uZGl0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBjYWNoZSBmb3IgYSB0b29sYmFyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBtYXRjaGVzIGNvbmRpdGlvbnMgYW5kIGV4ZWN1dGVzIGFjdGlvbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCBzZW5kcyBub3RpZmljYXRpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0aGF0IHVwZGF0ZXMgdGhlIGhpc3Rvcnkgb2YgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVRTTSBldmVudCBtb2R1bGUgdGhhdCB1cGRhdGVzIHRoZSBoaXN0b3J5IG9mIGNvbmRpdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRoYXQgdXBkYXRlcyB0aGUgaGlzdG9yeSBvZiB3b3Jrb3JkZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNIGV2ZW50IG1vZHVsZSB0byByZWNhbGN1bGF0ZSB0aGUgd29ya29yZGVyIG51bWJlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU00gZXZlbnQgbW9kdWxlIHRvIHNldCB0aGUgYWN0dWFsIHN0YXJ0IGFuZCBlbmQgdGltZXMgb2Ygd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVFNNQ2hhbmdlJ30gPSAn6K6K5pu0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUU01Xb3JrT3JkZXInfSA9ICdJVFNN5bel5L2c5oyH5LukJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGZyZXF1ZW5jeSBpcyBcJ3JlZ3VsYXJseVwnLCB5b3UgY2FuIGNvbmZpZ3VyZSBob3cgb2Z0ZW4gdGhlIG5vdGlmaWNhdGlvbnMgYXJlIHNlbnQgKGV2ZXJ5IFggaG91cnMpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpbmsgYW5vdGhlciBvYmplY3QgdG8gdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGluayBhbm90aGVyIG9iamVjdCB0byB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb2dmaWxlIGZvciB0aGUgSVRTTSBjaGFuZ2UgY291bnRlci4gVGhpcyBmaWxlIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBjaGFuZ2UgbnVtYmVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rdXAgb2YgQ0FCIG1lbWJlcnMgZm9yIGF1dG9jb21wbGV0aW9uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMb29rdXAgb2YgYWdlbnRzLCB1c2VkIGZvciBhdXRvY29tcGxldGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIGlmIFdvcmtPcmRlckFkZCBvciBXb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUgc2hvdWxkIGJlIHBlcm1pdHRlZC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIENBQiBtZW1iZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGFnZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGNoYW5nZSBidWlsZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIGNoYW5nZSBtYW5hZ2VyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gY2hlY2sgdGhlIHdvcmtvcmRlciBhZ2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgbm8gd29ya29yZGVyIGFnZW50IGlzIHNldC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGFnZW50IGlzIGNvbnRhaW5lZCBpbiB0aGUgY29uZmlndXJlZCBsaXN0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGEgbGluayB0byBjcmVhdGUgYSBjaGFuZ2UgZnJvbSB0aGlzIHRpY2tldC4gVGhlIHRpY2tldCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgbGlua2VkIHdpdGggdGhlIG5ldyBjaGFuZ2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW92ZSBUaW1lIFNsb3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vdmUgYWxsIHdvcmtvcmRlcnMgaW4gdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IChmcm9tIHRlbXBsYXRlKSd9ID0gJ+WJteW7uuaWsOiuiuabtCjpgJrpgY7mqKHmnb8pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09ubHkgdXNlcnMgb2YgdGhlc2UgZ3JvdXBzIGhhdmUgdGhlIHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0aWNrZXQgdHlwZXMgYXMgZGVmaW5lZCBpbiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiBpZiB0aGUgZmVhdHVyZSAiVGlja2V0OjpBY2w6Ok1vZHVsZSMjIzIwMC1UaWNrZXQ6OkFjbDo6TW9kdWxlIiBpcyBlbmFibGVkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ2aWV3IG92ZXIgYWxsIENoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BJUid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQSVIgKFBvc3QgSW1wbGVtZW50YXRpb24gUmV2aWV3KSd9ID0gJ1BJUiAo5a+m5pa95b6M5a+p5p+lKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQU0EnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIFVzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFzayBvYmplY3QgaW4gdGhlIHByZWZlcmVuY2UgdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIGNoYW5nZXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgY2hhbmdlIG92ZXJ2aWV3Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXNlbnRzIGEgbGluayBpbiB0aGUgbWVudSB0byBzaG93IHRoZSBpbnZvbHZlZCBwZXJzb25zIGluIGEgY2hhbmdlLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggY2hhbmdlIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpbnQgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdGVkIFNlcnZpY2UgQXZhaWxhYmlsaXR5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3RlZCBTZXJ2aWNlIEF2YWlsYWJpbGl0eSAoUFNBKSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0ZWQgU2VydmljZSBBdmFpbGFiaWxpdHkgKFBTQSkgb2YgY2hhbmdlcy4gT3ZlcnZpZXcgb2YgYXBwcm92ZWQgY2hhbmdlcyBhbmQgdGhlaXIgc2VydmljZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyBpbiBvcmRlciBmb3IgYW4gYWdlbnQgdG8gdGFrZSBhIHdvcmtvcmRlci4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGFjY2VzcyB0aGUgb3ZlcnZpZXcgb2YgYWxsIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gYWRkIGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNoYW5nZSB0aGUgd29ya29yZGVyIGFnZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBhIHRlbXBsYXRlIGZyb20gYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gY3JlYXRlIGEgdGVtcGxhdGUgZnJvbSBhIGNoYW5nZXNcJyBDQUIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBjcmVhdGUgYSB0ZW1wbGF0ZSBmcm9tIGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzIGZyb20gdGVtcGxhdGVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGNyZWF0ZSBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGRlbGV0ZSBhIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBkZWxldGUgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGEgdGVtcGxhdGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCBhIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gZWRpdCB0aGUgY29uZGl0aW9ucyBvZiBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgYSB0ZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byBlZGl0IHRoZSBpbnZvbHZlZCBwZXJzb25zIG9mIGEgY2hhbmdlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gbW92ZSBjaGFuZ2VzIGluIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcHJpbnQgYSBjaGFuZ2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gcmVzZXQgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyBhIENBQiBtZW1iZXIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IGxpc3Qgb2YgY2hhbmdlcyB3aGVyZSB0aGUgdXNlciBpcyB0aGUgY2hhbmdlIG1hbmFnZXIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IG92ZXJ2aWV3IG92ZXIgYWxsIHRlbXBsYXRlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBjb25kaXRpb25zIG9mIGNoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgaGlzdG9yeSBvZiBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IG9mIGEgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGhpc3Rvcnkgem9vbSBvZiBhIGNoYW5nZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBoaXN0b3J5IHpvb20gb2YgYSB3b3Jrb3JkZXIuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIENoYW5nZSBTY2hlZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIGNoYW5nZSBQU0EuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gdmlldyB0aGUgbGlzdCBvZiBjaGFuZ2VzIHdpdGggYW4gdXBjb21pbmcgUElSIChQb3N0IEltcGxlbWVudGF0aW9uIFJldmlldykuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcHJpdmlsZWdlcyB0byB2aWV3IHRoZSBsaXN0IG9mIG93biBjaGFuZ2VzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwcml2aWxlZ2VzIHRvIHZpZXcgdGhlIGxpc3Qgb2Ygb3duIHdvcmtvcmRlcnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHByaXZpbGVnZXMgdG8gd3JpdGUgYSByZXBvcnQgZm9yIHRoZSB3b3Jrb3JkZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzZXQgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVuIHRhc2sgdG8gY2hlY2sgaWYgc3BlY2lmaWMgdGltZXMgaGF2ZSBiZWVuIHJlYWNoZWQgaW4gY2hhbmdlcyBhbmQgd29ya29yZGVycy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIGNoYW5nZSBhcyBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXZlIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY2hlZHVsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTY3JlZW4gYWZ0ZXIgY3JlYXRpbmcgYSB3b3Jrb3JkZXInfSA9ICflibXlu7rlt6XkvZzmjIfku6TlvoznmoToppblnJYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMnfSA9ICfmkJzntKLorormm7QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VhcmNoIENoYW5nZXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdHMgdGhlIGNoYW5nZSBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZS4gIkF1dG9JbmNyZW1lbnQiIGluY3JlbWVudHMgdGhlIGNoYW5nZSBudW1iZXIsIHRoZSBTeXN0ZW1JRCBhbmQgdGhlIGNvdW50ZXIgYXJlIHVzZWQgd2l0aCBTeXN0ZW1JRC5jb3VudGVyIGZvcm1hdCAoZS5nLiAxMDAxMTgsIDEwMDExOSkuIFdpdGggIkRhdGUiLCB0aGUgY2hhbmdlIG51bWJlcnMgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgYSBjb3VudGVyOyB0aGlzIGZvcm1hdCBsb29rcyBsaWtlIFllYXIuTW9udGguRGF5LmNvdW50ZXIsIGUuZy4gMjAxMDA2MjQwMDAwMSwgMjAxMDA2MjQwMDAwMi4gV2l0aCAiRGF0ZUNoZWNrc3VtIiwgdGhlIGNvdW50ZXIgd2lsbCBiZSBhcHBlbmRlZCBhcyBjaGVja3N1bSB0byB0aGUgc3RyaW5nIG9mIGRhdGUgcGx1cyB0aGUgU3lzdGVtSUQuIFRoZSBjaGVja3N1bSB3aWxsIGJlIHJvdGF0ZWQgb24gYSBkYWlseSBiYXNpcy4gVGhpcyBmb3JtYXQgbG9va3MgbGlrZSBZZWFyLk1vbnRoLkRheS5TeXN0ZW1JRC5Db3VudGVyLkNoZWNrU3VtLCBlLmcuIDIwMTAwNjI0MTAwMDAwMTcsIDIwMTAwNjI0MTAwMDAwMjYuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBhZ2VudCBmb3IgdGhlIHdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSBkZWZhdWx0IGhlaWdodCAoaW4gcGl4ZWxzKSBvZiBpbmxpbmUgSFRNTCBmaWVsZHMgaW4gQWdlbnRJVFNNQ2hhbmdlWm9vbSBhbmQgQWdlbnRJVFNNV29ya09yZGVyWm9vbS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIG1heGltdW0gaGVpZ2h0IChpbiBwaXhlbHMpIG9mIGlubGluZSBIVE1MIGZpZWxkcyBpbiBBZ2VudElUU01DaGFuZ2Vab29tIGFuZCBBZ2VudElUU01Xb3JrT3JkZXJab29tLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIG1pbmltYWwgY2hhbmdlIGNvdW50ZXIgc2l6ZSAoaWYgIkF1dG9JbmNyZW1lbnQiIHdhcyBzZWxlY3RlZCBhcyBJVFNNQ2hhbmdlOjpOdW1iZXJHZW5lcmF0b3IpLiBEZWZhdWx0IGlzIDUsIHRoaXMgbWVhbnMgdGhlIGNvdW50ZXIgc3RhcnRzIGZyb20gMTAwMDAuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3IgY2hhbmdlcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB1cCB0aGUgc3RhdGUgbWFjaGluZSBmb3Igd29ya29yZGVycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBjaGVja2JveCBpbiB0aGUgQWdlbnRJVFNNV29ya09yZGVyRWRpdCBzY3JlZW4gdGhhdCBkZWZpbmVzIGlmIHRoZSB0aGUgZm9sbG93aW5nIHdvcmtvcmRlcnMgc2hvdWxkIGFsc28gYmUgbW92ZWQgaWYgYSB3b3Jrb3JkZXIgaXMgbW9kaWZpZWQgYW5kIHRoZSBwbGFubmVkIGVuZCB0aW1lIGhhcyBjaGFuZ2VkLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBjaGFuZ2luZyB0aGUgd29ya29yZGVyIGFnZW50LCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGRlZmluaW5nIGEgY2hhbmdlIGFzIGEgdGVtcGxhdGUgaW4gdGhlIHpvb20gdmlldyBvZiB0aGUgY2hhbmdlLCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBkZWZpbmluZyBhIHdvcmtvcmRlciBhcyBhIHRlbXBsYXRlIGluIHRoZSB6b29tIHZpZXcgb2YgdGhlIHdvcmtvcmRlciwgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdGhhdCBhbGxvd3MgZWRpdGluZyB0aGUgcmVwb3J0IG9mIGEgd29ya29yZGVyLCBpbiB0aGUgem9vbSB2aWV3IG9mIHN1Y2ggd29ya29yZGVyIG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIGxpbmtpbmcgYSBjaGFuZ2Ugd2l0aCBhbm90aGVyIG9iamVjdCBpbiB0aGUgY2hhbmdlIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBsaW5raW5nIGEgd29ya29yZGVyIHdpdGggYW5vdGhlciBvYmplY3QgaW4gdGhlIHpvb20gdmlldyBvZiBzdWNoIHdvcmtvcmRlciBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0aGF0IGFsbG93cyBtb3ZpbmcgdGhlIHRpbWUgc2xvdCBvZiBhIGNoYW5nZSBpbiBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRoYXQgYWxsb3dzIHRha2luZyBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhY2Nlc3MgdGhlIGNvbmRpdGlvbnMgb2YgYSBjaGFuZ2UgaW4gdGhlIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gYWNjZXNzIHRoZSBoaXN0b3J5IG9mIGEgY2hhbmdlIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGFjY2VzcyB0aGUgaGlzdG9yeSBvZiBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBhZGQgYSB3b3Jrb3JkZXIgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgY2hhbmdlIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZGVsZXRlIGEgd29ya29yZGVyIGluIGl0cyB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZWRpdCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBlZGl0IGEgd29ya29yZGVyIGluIHRoZSBpdHMgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGdvIGJhY2sgaW4gdGhlIGNoYW5nZSB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gZ28gYmFjayBpbiB0aGUgd29ya29yZGVyIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIGNoYW5nZSBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBwcmludCBhIHdvcmtvcmRlciBpbiB0aGUgaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byByZXNldCBhIGNoYW5nZSBhbmQgaXRzIHdvcmtvcmRlcnMgaW4gaXRzIHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSBjaGFuZ2UgaGlzdG9yeSAocmV2ZXJzZSBvcmRlcmVkKSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRlIE1hY2hpbmUnfSA9ICfni4DmhYvmqZ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RvcmVzIGNoYW5nZSBhbmQgd29ya29yZGVyIGlkcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB0ZW1wbGF0ZSBpZCwgd2hpbGUgYSB1c2VyIGlzIGVkaXRpbmcgYSB0ZW1wbGF0ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIFdvcmtvcmRlcid9ID0gJ+aOpeaJi+W3peS9nOaMh+S7pCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYWtlIFdvcmtvcmRlci4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFrZSB0aGUgd29ya29yZGVyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZSBPdmVydmlldyd9ID0gJ+aooeadv+amguazgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZW1wbGF0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgY2hhbmdlLCBlLmcuIENoYW5nZSMsIE15Q2hhbmdlIy4gVGhlIGRlZmF1bHQgaXMgQ2hhbmdlIy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSB3b3Jrb3JkZXIsIGUuZy4gV29ya29yZGVyIywgTXlXb3Jrb3JkZXIjLiBUaGUgZGVmYXVsdCBpcyBXb3Jrb3JkZXIjLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgQUNMIG1vZHVsZSByZXN0cmljdHMgdGhlIHVzdWFnZSBvZiB0aGUgdGlja2V0IHR5cGVzIHRoYXQgYXJlIGRlZmluZWQgaW4gdGhlIHN5c2NvbmZpZyBvcHRpb24gXCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXNcJywgdG8gdXNlcnMgb2YgdGhlIGdyb3VwcyBhcyBkZWZpbmVkIGluICJJVFNNQ2hhbmdlOjpSZXN0cmljdFRpY2tldFR5cGVzOjpHcm91cHMiLiBBcyB0aGlzIEFDTCBjb3VsZCBjb2xsaWRlIHdpdGggb3RoZXIgQUNMcyB3aGljaCBhcmUgYWxzbyByZWxhdGVkIHRvIHRoZSB0aWNrZXQgdHlwZSwgdGhpcyBzeXNjb25maWcgb3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIHNob3VsZCBvbmx5IGJlIGFjdGl2YXRlZCBpZiBuZWVkZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBTbG90J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R5cGVzIG9mIHRpY2tldHMsIHdoZXJlIGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IGEgbGluayB0byBhZGQgYSBjaGFuZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBTZWFyY2gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEFkZCAoZnJvbSB0ZW1wbGF0ZSkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZGQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBBZ2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIERlbGV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya29yZGVyIEVkaXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBIaXN0b3J5IFpvb20uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtvcmRlciBIaXN0b3J5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgUmVwb3J0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgWm9vbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3Jrb3JkZXIgWm9vbS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnb25jZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydyZWd1bGFybHknfSA9ICcnOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwogICAgbXkgJENJUEFsbG9jYXRlT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01DaGFuZ2VDSVBBbGxvY2F0ZScpOwogICAgbXkgJExheW91dE9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY2F0ZWdvcnksIGltcGFjdCBhbmQgcHJpb3JpdHkgYWxsb2NhdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NJUEFsbG9jYXRlJyApIHsKCiAgICAgICAgIyBnZXQgb3B0aW9uIGxpc3RzCiAgICAgICAgbXkgJU9iamVjdE9wdGlvbjsKICAgICAgICAkT2JqZWN0T3B0aW9ue0NhdGVnb3J5TGlzdH0gPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2F0ZWdvcnknLAogICAgICAgICk7CiAgICAgICAgJE9iamVjdE9wdGlvbntJbXBhY3RMaXN0fSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpJbXBhY3QnLAogICAgICAgICk7CiAgICAgICAgJE9iamVjdE9wdGlvbntQcmlvcml0eUxpc3R9ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OlByaW9yaXR5JywKICAgICAgICApOwoKICAgICAgICAjIGdldCBhbGwgUHJpb3JpdHlJRHMgb2YgdGhlIG1hdHJpeAogICAgICAgIG15ICRBbGxvY2F0ZURhdGE7CiAgICAgICAgZm9yIG15ICRJbXBhY3RJRCAoIHNvcnQga2V5cyAleyAkT2JqZWN0T3B0aW9ue0ltcGFjdExpc3R9IH0gKSB7CgogICAgICAgICAgICBDQVRFR09SWUlEOgogICAgICAgICAgICBmb3IgbXkgJENhdGVnb3J5SUQgKCBzb3J0IGtleXMgJXsgJE9iamVjdE9wdGlvbntDYXRlZ29yeUxpc3R9IH0gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgZm9ybSBwYXJhbQogICAgICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKAogICAgICAgICAgICAgICAgICAgIFBhcmFtID0+ICJQcmlvcml0eUlEIiAuICRJbXBhY3RJRCAuICctJyAuICRDYXRlZ29yeUlECiAgICAgICAgICAgICAgICApIHx8ICcnOwoKICAgICAgICAgICAgICAgIG5leHQgQ0FURUdPUllJRCBpZiAhJFByaW9yaXR5SUQ7CgogICAgICAgICAgICAgICAgJEFsbG9jYXRlRGF0YS0+eyRJbXBhY3RJRH0tPnskQ2F0ZWdvcnlJRH0gPSAkUHJpb3JpdHlJRDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgYWxsb2NhdGlvbnMKICAgICAgICAkQ0lQQWxsb2NhdGVPYmplY3QtPkFsbG9jYXRlVXBkYXRlKAogICAgICAgICAgICBBbGxvY2F0ZURhdGEgPT4gJEFsbG9jYXRlRGF0YSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKCiAgICAgICAgIyBnZXQgb3B0aW9uIGxpc3RzCiAgICAgICAgbXkgJU9iamVjdE9wdGlvbjsKICAgICAgICAkT2JqZWN0T3B0aW9ue0NhdGVnb3J5TGlzdH0gPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2F0ZWdvcnknLAogICAgICAgICk7CiAgICAgICAgJE9iamVjdE9wdGlvbntJbXBhY3RMaXN0fSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpJbXBhY3QnLAogICAgICAgICk7CiAgICAgICAgJE9iamVjdE9wdGlvbntQcmlvcml0eUxpc3R9ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OlByaW9yaXR5JywKICAgICAgICApOwoKICAgICAgICAjIGdldCBhbGxvY2F0aW9uIGRhdGEKICAgICAgICBteSAkQWxsb2NhdGVEYXRhID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZUxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRBbGxvY2F0ZU1hdHJpeDsKCiAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlswXS0+e09iamVjdFR5cGV9ID0KICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdJbXBhY3QnKSAuICcgLyAnCiAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDYXRlZ29yeScpOwogICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bMF0tPntDbGFzc30gPSAnSGVhZGVyQ29sdW1uRGVzY3JpcHRpb24nOwoKICAgICAgICAjIGdlbmVyYXRlIHRhYmxlIGRlc2NyaXB0aW9uIChJbXBhY3QpCiAgICAgICAgbXkgJENvdW50ZXIxID0gMTsKICAgICAgICBmb3IgbXkgJEltcGFjdCAoCiAgICAgICAgICAgIHNvcnQgeyAkT2JqZWN0T3B0aW9ue0ltcGFjdExpc3R9LT57JGF9IGNtcCAkT2JqZWN0T3B0aW9ue0ltcGFjdExpc3R9LT57JGJ9IH0KICAgICAgICAgICAga2V5cyAleyAkT2JqZWN0T3B0aW9ue0ltcGFjdExpc3R9IH0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJENvdW50ZXIxXS0+WzBdLT57T2JqZWN0VHlwZX0gICA9ICdJbXBhY3QnOwogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskQ291bnRlcjFdLT5bMF0tPntJbXBhY3RLZXl9ICAgID0gJEltcGFjdDsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJENvdW50ZXIxXS0+WzBdLT57T2JqZWN0T3B0aW9ufSA9ICRPYmplY3RPcHRpb257SW1wYWN0TGlzdH17JEltcGFjdH07CiAgICAgICAgICAgICRDb3VudGVyMSsrOwogICAgICAgIH0KCiAgICAgICAgIyBnZW5lcmF0ZSB0YWJsZSBkZXNjcmlwdGlvbiAoQ2F0ZWdvcnkpCiAgICAgICAgbXkgJENvdW50ZXIyID0gMTsKICAgICAgICBmb3IgbXkgJENhdGVnb3J5ICgKICAgICAgICAgICAgc29ydCB7ICRPYmplY3RPcHRpb257Q2F0ZWdvcnlMaXN0fS0+eyRhfSBjbXAgJE9iamVjdE9wdGlvbntDYXRlZ29yeUxpc3R9LT57JGJ9IH0KICAgICAgICAgICAga2V5cyAleyAkT2JqZWN0T3B0aW9ue0NhdGVnb3J5TGlzdH0gfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlswXS0+WyRDb3VudGVyMl0tPntPYmplY3RUeXBlfSAgID0gJ0NhdGVnb3J5JzsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ291bnRlcjJdLT57Q2F0ZWdvcnlLZXl9ICA9ICRDYXRlZ29yeTsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ291bnRlcjJdLT57T2JqZWN0T3B0aW9ufSA9ICRPYmplY3RPcHRpb257Q2F0ZWdvcnlMaXN0fXskQ2F0ZWdvcnl9OwogICAgICAgICAgICAkQ291bnRlcjIrKzsKICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgY29udGVudAogICAgICAgIGZvciBteSAkUm93ICggMSAuLiAoICRDb3VudGVyMSAtIDEgKSApIHsKICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKCAxIC4uICggJENvdW50ZXIyIC0gMSApICkgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCBrZXlzCiAgICAgICAgICAgICAgICBteSAkSW1wYWN0S2V5ICAgPSAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WzBdLT57SW1wYWN0S2V5fTsKICAgICAgICAgICAgICAgIG15ICRDYXRlZ29yeUtleSA9ICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvbHVtbl0tPntDYXRlZ29yeUtleX07CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgb3B0aW9uIHN0cmluZwogICAgICAgICAgICAgICAgbXkgJE9wdGlvblN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdQcmlvcml0eUlEJyAuICRJbXBhY3RLZXkgLiAnLScgLiAkQ2F0ZWdvcnlLZXksCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICA9PiAkT2JqZWN0T3B0aW9ue1ByaW9yaXR5TGlzdH0sCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkQWxsb2NhdGVEYXRhLT57JEltcGFjdEtleX17JENhdGVnb3J5S2V5fSB8fCAnJywKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0tPntPcHRpb25TdHJnfSA9ICRPcHRpb25TdHJnOwogICAgICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJFJvd10tPlskQ29sdW1uXS0+e0NsYXNzfSAgICAgID0gJ0NvbnRlbnQnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJFJvdyAoIDAgLi4gJCN7JEFsbG9jYXRlTWF0cml4fSApIHsKCiAgICAgICAgICAgIGlmICggJFJvdyAhPSAwICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ1JvdycgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKCAwIC4uICQjeyAkQWxsb2NhdGVNYXRyaXgtPlskUm93XSB9ICkgewoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIHJvdyBpcyBoZWFkZXIKICAgICAgICAgICAgICAgIGlmICggJFJvdyA9PSAwICkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoICRDb2x1bW4gPT0gMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdIZWFkZXJDb2x1bW5EZXNjcmlwdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckNlbGwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WyRDb2x1bW5dLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb2x1bW4gaXMgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgIGVsc2lmICggJENvbHVtbiA9PSAwICkgewogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdEZXNjcmlwdGlvbkNlbGwnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdDb250ZW50Q2VsbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJEFsbG9jYXRlTWF0cml4LT5bJFJvd10tPlskQ29sdW1uXSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb247Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgaGFzaCB3aXRoIGZlZWRiYWNrIHRvIHRoZSB1c2VyCiAgICBteSAlTm90aWZpY2F0aW9uOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkQ29uZmlnT2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICROb3RpZmljYXRpb25PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6Tm90aWZpY2F0aW9uJyk7CiAgICBteSAkUGFyYW1PYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJExheW91dE9iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICBteSAkUmljaFRleHQgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpSaWNoVGV4dCcpOwoKICAgIGlmICggJFJpY2hUZXh0ICYmICEkQ29uZmlnT2JqZWN0LT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKS0+e1JpY2hUZXh0fSApIHsKICAgICAgICAkUmljaFRleHQgPSAwOwogICAgfQoKICAgICMgc2V0IGNvbnRlbnQgdHlwZSBmb3Igbm90aWZpY2F0aW9ucwogICAgbXkgJENvbnRlbnRUeXBlID0gJ3RleHQvcGxhaW4nOwogICAgaWYgKCRSaWNoVGV4dCkgewogICAgICAgICRDb250ZW50VHlwZSA9ICd0ZXh0L2h0bWwnOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY2hhbmdlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlJyApIHsKICAgICAgICBteSAkSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICkgfHwgJyc7CiAgICAgICAgbXkgJERhdGEgPSAkTm90aWZpY2F0aW9uT2JqZWN0LT5Ob3RpZmljYXRpb25SdWxlR2V0KCBJRCA9PiAkSUQgKTsKCiAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICBBY3Rpb24gICAgICA9PiAnQ2hhbmdlJywKICAgICAgICAgICAgQWN0aW9uTGFiZWwgPT4gJ0VkaXQnLAogICAgICAgICAgICBSaWNoVGV4dCAgICA9PiAkUmljaFRleHQsCiAgICAgICAgICAgICV7JERhdGF9LAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjaGFuZ2UgYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlQWN0aW9uJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgJUdldFBhcmFtOwoKICAgICAgICAjIGdldCBzY2FsYXIgcGFyYW1ldGVycwogICAgICAgIGZvciBteSAkUGFyYW0gKHF3KElEIE5hbWUgRXZlbnRJRCBDb21tZW50IFZhbGlkSUQgQXR0cmlidXRlIFJ1bGUpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW19ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtICkgfHwgJyc7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhcnJheSBwYXJhbWV0ZXJzCiAgICAgICAgJEdldFBhcmFte1JlY2lwaWVudElEc30gPSBbCiAgICAgICAgICAgICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdSZWNpcGllbnRJRHMnICkKICAgICAgICBdOwoKICAgICAgICAjIGdldCBtZXNzYWdlIHBhcmFtZXRlcnMgZm9yIGFnZW50cyBhbmQgY3VzdG9tZXJzIGFuZCBlYWNoIHByZXNlbnQgbGFuZ3VhZ2UKICAgICAgICBmb3IgbXkgJFR5cGUgKHF3KEFnZW50IEN1c3RvbWVyKSkgewoKICAgICAgICAgICAgbXkgQExhbmd1YWdlSURzID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJFR5cGUgLiAnX0xhbmd1YWdlSUQnICk7CgogICAgICAgICAgICAjIGdldCB0aGUgc3ViamVjdCBhbmQgYm9keSBmb3IgYWxsIGxhbmd1YWdlcwogICAgICAgICAgICBmb3IgbXkgJExhbmd1YWdlSUQgKEBMYW5ndWFnZUlEcykgewoKICAgICAgICAgICAgICAgIG15ICRTdWJqZWN0ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFR5cGUgLiAnXycgLiAkTGFuZ3VhZ2VJRCAuICdfU3ViamVjdCcgKSB8fCAnJzsKICAgICAgICAgICAgICAgIG15ICRCb2R5ICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFR5cGUgLiAnXycgLiAkTGFuZ3VhZ2VJRCAuICdfQm9keScgKSAgICB8fCAnJzsKCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17TWVzc2FnZX0tPnskVHlwZX0tPnskTGFuZ3VhZ2VJRH0gPSB7CiAgICAgICAgICAgICAgICAgICAgU3ViamVjdCAgICAgPT4gJFN1YmplY3QsCiAgICAgICAgICAgICAgICAgICAgQm9keSAgICAgICAgPT4gJEJvZHksCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJENvbnRlbnRUeXBlLAogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAjIHNldCBzZXJ2ZXIgZXJyb3IgZmxhZyBpZiBmaWVsZCBpcyBlbXB0eQogICAgICAgICAgICAgICAgaWYgKCAhJFN1YmplY3QgKSB7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVHlwZSAuICdfJyAuICRMYW5ndWFnZUlEIC4gJ19TdWJqZWN0U2VydmVyRXJyb3InIH0gPSAiU2VydmVyRXJyb3IiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCAhJEJvZHkgKSB7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVHlwZSAuICdfJyAuICRMYW5ndWFnZUlEIC4gJ19Cb2R5U2VydmVyRXJyb3InIH0gPSAiU2VydmVyRXJyb3IiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSBub3RpZmljYXRpb24KICAgICAgICBpZiAoICROb3RpZmljYXRpb25PYmplY3QtPk5vdGlmaWNhdGlvblJ1bGVVcGRhdGUoJUdldFBhcmFtKSApIHsKICAgICAgICAgICAgJFNlbGYtPl9PdmVydmlldygpOwoKICAgICAgICAgICAgIyBub3RpZmljYXRpb24gd2FzIHVwZGF0ZWQKICAgICAgICAgICAgJU5vdGlmaWNhdGlvbiA9ICgKICAgICAgICAgICAgICAgIEluZm8gPT4gVHJhbnNsYXRhYmxlKCdOb3RpZmljYXRpb24gdXBkYXRlZCEnKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIGFuIGVycm9yIG9jY3VyZWQgLT4gc2hvdyBub3RpZmljYXRpb24KICAgICAgICAgICAgJU5vdGlmaWNhdGlvbiA9ICggUHJpb3JpdHkgPT4gJ0Vycm9yJyApOwoKICAgICAgICAgICAgJFNlbGYtPl9FZGl0KAogICAgICAgICAgICAgICAgQWN0aW9uICAgICAgPT4gJ0NoYW5nZScsCiAgICAgICAgICAgICAgICBBY3Rpb25MYWJlbCA9PiAnRWRpdCcsCiAgICAgICAgICAgICAgICBSaWNoVGV4dCAgICA9PiAkUmljaFRleHQsCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgYWRkCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQWRkJyApIHsKICAgICAgICAkU2VsZi0+X0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiAgICAgID0+ICdBZGQnLAogICAgICAgICAgICBBY3Rpb25MYWJlbCA9PiAnQWRkJywKICAgICAgICAgICAgUmljaFRleHQgICAgPT4gJFJpY2hUZXh0LAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQgYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQWRkQWN0aW9uJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgJUdldFBhcmFtOwoKICAgICAgICAjIGdldCBzY2FsYXIgcGFyYW1ldGVycwogICAgICAgIGZvciBteSAkUGFyYW0gKHF3KElEIE5hbWUgRXZlbnRJRCBDb21tZW50IFZhbGlkSUQgQXR0cmlidXRlIFJ1bGUpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW19ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtICkgfHwgJyc7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhcnJheSBwYXJhbWV0ZXJzCiAgICAgICAgJEdldFBhcmFte1JlY2lwaWVudElEc30gPSBbCiAgICAgICAgICAgICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdSZWNpcGllbnRJRHMnICkKICAgICAgICBdOwoKICAgICAgICAjIGdldCBtZXNzYWdlIHBhcmFtZXRlcnMgZm9yIGFnZW50cyBhbmQgY3VzdG9tZXJzIGFuZCBlYWNoIHByZXNlbnQgbGFuZ3VhZ2UKICAgICAgICBmb3IgbXkgJFR5cGUgKHF3KEFnZW50IEN1c3RvbWVyKSkgewoKICAgICAgICAgICAgbXkgQExhbmd1YWdlSURzID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJFR5cGUgLiAnX0xhbmd1YWdlSUQnICk7CgogICAgICAgICAgICAjIGdldCB0aGUgc3ViamVjdCBhbmQgYm9keSBmb3IgYWxsIGxhbmd1YWdlcwogICAgICAgICAgICBmb3IgbXkgJExhbmd1YWdlSUQgKEBMYW5ndWFnZUlEcykgewoKICAgICAgICAgICAgICAgIG15ICRTdWJqZWN0ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFR5cGUgLiAnXycgLiAkTGFuZ3VhZ2VJRCAuICdfU3ViamVjdCcgKSB8fCAnJzsKICAgICAgICAgICAgICAgIG15ICRCb2R5ICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFR5cGUgLiAnXycgLiAkTGFuZ3VhZ2VJRCAuICdfQm9keScgKSAgICB8fCAnJzsKCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17TWVzc2FnZX0tPnskVHlwZX0tPnskTGFuZ3VhZ2VJRH0gPSB7CiAgICAgICAgICAgICAgICAgICAgU3ViamVjdCAgICAgPT4gJFN1YmplY3QsCiAgICAgICAgICAgICAgICAgICAgQm9keSAgICAgICAgPT4gJEJvZHksCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJENvbnRlbnRUeXBlLAogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAjIHNldCBzZXJ2ZXIgZXJyb3IgZmxhZyBpZiBmaWVsZCBpcyBlbXB0eQogICAgICAgICAgICAgICAgaWYgKCAhJFN1YmplY3QgKSB7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVHlwZSAuICdfJyAuICRMYW5ndWFnZUlEIC4gJ19TdWJqZWN0U2VydmVyRXJyb3InIH0gPSAiU2VydmVyRXJyb3IiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCAhJEJvZHkgKSB7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVHlwZSAuICdfJyAuICRMYW5ndWFnZUlEIC4gJ19Cb2R5U2VydmVyRXJyb3InIH0gPSAiU2VydmVyRXJyb3IiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGFkZCBub3RpZmljYXRpb24KICAgICAgICBpZiAoICROb3RpZmljYXRpb25PYmplY3QtPk5vdGlmaWNhdGlvblJ1bGVBZGQoJUdldFBhcmFtKSApIHsKICAgICAgICAgICAgJFNlbGYtPl9PdmVydmlldygpOwoKICAgICAgICAgICAgIyBub3RpZmljYXRpb24gd2FzIHVwZGF0ZWQKICAgICAgICAgICAgJU5vdGlmaWNhdGlvbiA9ICgKICAgICAgICAgICAgICAgIEluZm8gPT4gVHJhbnNsYXRhYmxlKCdOb3RpZmljYXRpb24gYWRkZWQhJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBhbiBlcnJvciBvY2N1cmVkIC0+IHNob3cgbm90aWZpY2F0aW9uCiAgICAgICAgICAgICVOb3RpZmljYXRpb24gPSAoIFByaW9yaXR5ID0+ICdFcnJvcicgKTsKCiAgICAgICAgICAgICRTZWxmLT5fRWRpdCgKICAgICAgICAgICAgICAgIEFjdGlvbiAgICAgID0+ICdBZGQnLAogICAgICAgICAgICAgICAgQWN0aW9uTGFiZWwgPT4gJ0FkZCcsCiAgICAgICAgICAgICAgICBSaWNoVGV4dCAgICA9PiAkUmljaFRleHQsCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgZGVsZXRlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRGVsZXRlJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgJUdldFBhcmFtOwogICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhJRCkpIHsKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbWV0ZXJ9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApIHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgbXkgJERlbGV0ZSA9ICROb3RpZmljYXRpb25PYmplY3QtPk5vdGlmaWNhdGlvblJ1bGVEZWxldGUoCiAgICAgICAgICAgIElEID0+ICRHZXRQYXJhbXtJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICEkRGVsZXRlICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBOb3RpZmljYXRpb25Db3B5CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnTm90aWZpY2F0aW9uQ29weScgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIG15ICVHZXRQYXJhbTsKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAocXcoSUQpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbWV0ZXIgKSB8fCAnJzsKICAgICAgICB9CgogICAgICAgICMgZ2V0IE5vdGlmaWNhdGlvbiBkYXRhCiAgICAgICAgbXkgJERhdGEgPSAkTm90aWZpY2F0aW9uT2JqZWN0LT5Ob3RpZmljYXRpb25SdWxlR2V0KAogICAgICAgICAgICBJRCA9PiAkR2V0UGFyYW17SUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCREYXRhKSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdVbmtub3duIG5vdGlmaWNhdGlvbiAlcyEnLCAkR2V0UGFyYW17SUR9ICksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSBuZXcgTm90aWZpY2F0aW9uIG5hbWUKICAgICAgICBteSAkTm90aWZpY2F0aW9uTmFtZSA9CiAgICAgICAgICAgICREYXRhLT57TmFtZX0KICAgICAgICAgICAgLiAnICgnCiAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDb3B5JykKICAgICAgICAgICAgLiAnKSc7CgogICAgICAgICMgb3RoZXJ3aXNlIHNhdmUgY29uZmlndXJhdGlvbiBhbmQgcmV0dXJuIHRvIG92ZXJ2aWV3IHNjcmVlbgogICAgICAgIG15ICROZXdOb3RpZmljYXRpb25JRCA9ICROb3RpZmljYXRpb25PYmplY3QtPk5vdGlmaWNhdGlvblJ1bGVBZGQoCiAgICAgICAgICAgICV7JERhdGF9LAogICAgICAgICAgICBOYW1lID0+ICROb3RpZmljYXRpb25OYW1lLAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBlcnJvciBpZiBjYW4ndCBjcmVhdGUKICAgICAgICBpZiAoICEkTmV3Tm90aWZpY2F0aW9uSUQgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdUaGVyZSB3YXMgYW4gZXJyb3IgY3JlYXRpbmcgdGhlIG5vdGlmaWNhdGlvbi4nKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcmV0dXJuIHRvIG92ZXJ2aWV3CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBvdmVydmlldwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5fT3ZlcnZpZXcoKTsKICAgIH0KCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICBpZiAoJU5vdGlmaWNhdGlvbikgewogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Tm90aWZ5KCVOb3RpZmljYXRpb24pIHx8ICcnOwogICAgfQogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbklUU01DaGFuZ2VOb3RpZmljYXRpb24nLAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7Cgp9CgojIHNob3cgdGhlIGVkaXQgbWFzayBmb3IgYSBub3RpZmljYXRpb24gcnVsZQpzdWIgX0VkaXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJENvbmZpZ09iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJEhUTUxVdGlsc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKTsKICAgIG15ICRWYWxpZE9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JyApOwoKICAgICRQYXJhbXtWYWxpZE9wdGlvbn0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJFZhbGlkT2JqZWN0LT5WYWxpZExpc3QoKSwKICAgICAgICB9LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1ZhbGlkSUQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1ZhbGlkSUR9IHx8ICggJFZhbGlkT2JqZWN0LT5WYWxpZElEc0dldCgpIClbMF0sCiAgICAgICAgU29ydCAgICAgICA9PiAnTnVtZXJpY0tleScsCiAgICApOwogICAgJFBhcmFte0V2ZW50T3B0aW9ufSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Okhpc3RvcnknKS0+SGlzdG9yeVR5cGVMaXN0KCBVc2VySUQgPT4gMSApIHx8IFtdLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0V2ZW50SUQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0V2ZW50SUR9LAogICAgKTsKICAgICRQYXJhbXtSZWNpcGllbnRPcHRpb259ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Ok5vdGlmaWNhdGlvbicpLT5SZWNpcGllbnRMaXN0KCBVc2VySUQgPT4gMSApIHx8IFtdLAogICAgICAgIE5hbWUgICAgID0+ICdSZWNpcGllbnRJRHMnLAogICAgICAgIE11bHRpcGxlID0+IDEsCiAgICAgICAgU2l6ZSAgICAgICA9PiAxMywgICAgICAgICAgICAgICAgICAgICAjIGN1cnJlbnQgbnVtYmVyIG9mIGRlZmF1bHQgcmVjaXBpZW50cywgYXZvaWQgc2Nyb2xsaW5nCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17UmVjaXBpZW50SURzfSwKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdVcGRhdGUnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgIyBhZGQgcmljaCB0ZXh0IGVkaXRvcgogICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewoKICAgICAgICAjIHVzZSBoZWlnaHQvd2lkdGggZGVmaW5lZCBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CiAgICAgICAgJFBhcmFte1JpY2hUZXh0SGVpZ2h0fSA9ICRDb25maWctPntSaWNoVGV4dEhlaWdodH0gfHwgMDsKICAgICAgICAkUGFyYW17UmljaFRleHRXaWR0aH0gID0gJENvbmZpZy0+e1JpY2hUZXh0V2lkdGh9ICB8fCAwOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUmljaFRleHQnLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgZGlmZmVybmV0IHdpZGdldCBjb250YWluZXJzIGZvciBhZ2VudCBhbmQgY3VzdG9tZXIgbm90aWZpY2F0aW9ucwogICAgZm9yIG15ICRUeXBlIChxdyhBZ2VudCBDdXN0b21lcikpIHsKCiAgICAgICAgIyBzaG93IHRoZSB3aWRnZXQgY29udGFpbmVyIGZvciB0aGlzIHR5cGUKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm90aWZpY2F0aW9uVHlwZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgVHlwZSA9PiAkVHlwZSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBsYW5ndWFnZSBpZHMgZnJvbSBtZXNzYWdlIHBhcmFtZXRlciwgdXNlIEVuZ2xpc2ggaWYgbm8gbWVzc2FnZSBpcyBnaXZlbgogICAgICAgICMgbWFrZSBzdXJlIEVuZ2xpc2ggaXMgdGhlIGZpcnN0IGxhbmd1YWdlCiAgICAgICAgbXkgQExhbmd1YWdlSURzOwogICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtNZXNzYWdlfS0+eyRUeXBlfSApICkgewogICAgICAgICAgICBpZiAoICRQYXJhbXtNZXNzYWdlfS0+eyRUeXBlfS0+e2VufSApIHsKICAgICAgICAgICAgICAgIHB1c2ggQExhbmd1YWdlSURzLCAnZW4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIExBTkdVQUdFSUQ6CiAgICAgICAgICAgIGZvciBteSAkTGFuZ3VhZ2VJRCAoIHNvcnQga2V5cyAleyAkUGFyYW17TWVzc2FnZX0tPnskVHlwZX0gfSApIHsKICAgICAgICAgICAgICAgIG5leHQgTEFOR1VBR0VJRCBpZiAkTGFuZ3VhZ2VJRCBlcSAnZW4nOwogICAgICAgICAgICAgICAgcHVzaCBATGFuZ3VhZ2VJRHMsICRMYW5ndWFnZUlEOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBATGFuZ3VhZ2VJRHMgPSAoJ2VuJyk7CiAgICAgICAgfQoKICAgICAgICBteSAlRGVmYXVsdFVzZWRMYW5ndWFnZXMgICAgICAgICA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnRGVmYXVsdFVzZWRMYW5ndWFnZXMnKSB9OwogICAgICAgIG15ICVPcmlnaW5hbERlZmF1bHRVc2VkTGFuZ3VhZ2VzID0gJURlZmF1bHRVc2VkTGFuZ3VhZ2VzOwoKICAgICAgICBmb3IgbXkgJExhbmd1YWdlSUQgKEBMYW5ndWFnZUlEcykgewoKICAgICAgICAgICAgIyBmb3JtYXQgdGhlIGNvbnRlbnQgYWNjb3JkaW5nIHRvIHRoZSBjb250ZW50IHR5cGUKICAgICAgICAgICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewoKICAgICAgICAgICAgICAgICMgbWFrZSBzdXJlIGJvZHkgaXMgcmljaCB0ZXh0IChpZiBib2R5IGlzIGJhc2VkIG9uIGNvbmZpZykKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkUGFyYW17TWVzc2FnZX0tPnskVHlwZX0tPnskTGFuZ3VhZ2VJRH0tPntDb250ZW50VHlwZX0KICAgICAgICAgICAgICAgICAgICAmJiAkUGFyYW17TWVzc2FnZX0tPnskVHlwZX0tPnskTGFuZ3VhZ2VJRH0tPntDb250ZW50VHlwZX0gPX4gbXt0ZXh0XC9wbGFpbn14bXNpCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRQYXJhbXtNZXNzYWdlfS0+eyRUeXBlfS0+eyRMYW5ndWFnZUlEfS0+e0JvZHl9ID0gJEhUTUxVdGlsc09iamVjdC0+VG9IVE1MKAogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFte01lc3NhZ2V9LT57JFR5cGV9LT57JExhbmd1YWdlSUR9LT57Qm9keX0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIHJlZm9ybWF0IGZyb20gSFRNTCB0byBwbGFpbgogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICRQYXJhbXtNZXNzYWdlfS0+eyRUeXBlfS0+eyRMYW5ndWFnZUlEfS0+e0NvbnRlbnRUeXBlfQogICAgICAgICAgICAgICAgICAgICYmICRQYXJhbXtNZXNzYWdlfS0+eyRUeXBlfS0+eyRMYW5ndWFnZUlEfS0+e0NvbnRlbnRUeXBlfSA9fiBte3RleHRcL2h0bWx9eG1zaQogICAgICAgICAgICAgICAgICAgICYmICRQYXJhbXtNZXNzYWdlfS0+eyRUeXBlfS0+eyRMYW5ndWFnZUlEfS0+e0JvZHl9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRQYXJhbXtNZXNzYWdlfS0+eyRUeXBlfS0+eyRMYW5ndWFnZUlEfS0+e0JvZHl9ID0gJEhUTUxVdGlsc09iamVjdC0+VG9Bc2NpaSgKICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRQYXJhbXtNZXNzYWdlfS0+eyRUeXBlfS0+eyRMYW5ndWFnZUlEfS0+e0JvZHl9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2hvdyB0aGUgbm90aWZpY2F0aW9uIGZvciB0aGlzIGxhbmd1YWdlCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTm90aWZpY2F0aW9uTGFuZ3VhZ2UnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJFBhcmFte01lc3NhZ2V9LT57JFR5cGV9LT57JExhbmd1YWdlSUR9LT57U3ViamVjdH0gfHwgJycsCiAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAkUGFyYW17TWVzc2FnZX0tPnskVHlwZX0tPnskTGFuZ3VhZ2VJRH0tPntCb2R5fSAgICB8fCAnJywKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICRUeXBlLAogICAgICAgICAgICAgICAgICAgIExhbmd1YWdlSUQgICAgICAgICA9PiAkTGFuZ3VhZ2VJRCwKICAgICAgICAgICAgICAgICAgICBMYW5ndWFnZSAgICAgICAgICAgPT4gJERlZmF1bHRVc2VkTGFuZ3VhZ2VzeyRMYW5ndWFnZUlEfSwKICAgICAgICAgICAgICAgICAgICBTdWJqZWN0U2VydmVyRXJyb3IgPT4gJFBhcmFteyAkVHlwZSAuICdfJyAuICRMYW5ndWFnZUlEIC4gJ19TdWJqZWN0U2VydmVyRXJyb3InIH0gfHwgJycsCiAgICAgICAgICAgICAgICAgICAgQm9keVNlcnZlckVycm9yICAgID0+ICRQYXJhbXsgJFR5cGUgLiAnXycgLiAkTGFuZ3VhZ2VJRCAuICdfQm9keVNlcnZlckVycm9yJyB9IHx8ICcnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2hvdyB0aGUgYnV0dG9uIHRvIHJlbW92ZSBhIG5vdGlmaWNhdGlvbiBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgRW5nbGlzaCBub3RpZmljYXRpb24KICAgICAgICAgICAgaWYgKCAkTGFuZ3VhZ2VJRCBuZSAnZW4nICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTm90aWZpY2F0aW9uTGFuZ3VhZ2VSZW1vdmVCdXR0b24nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIExhbmd1YWdlSUQgPT4gJFR5cGUgLiAnXycgLiAkTGFuZ3VhZ2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICA9PiAkVHlwZSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBkZWxldGUgbGFuZ3VhZ2UgZnJvbSBkcm9wLWRvd24gbGlzdCBiZWNhdXNlIGl0IGlzIGFscmVhZHkgc2hvd24KICAgICAgICAgICAgZGVsZXRlICREZWZhdWx0VXNlZExhbmd1YWdlc3skTGFuZ3VhZ2VJRH07CiAgICAgICAgfQoKICAgICAgICAjIHNob3cgbGFuZ3VhZ2UgYWRkIGRyb3Bkb3duCiAgICAgICAgJFBhcmFte0xhbmd1YWdlU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlRGVmYXVsdFVzZWRMYW5ndWFnZXMsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkVHlwZSAuICdMYW5ndWFnZUFkZCcsCiAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTGFuZ3VhZ2VBZGQnLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIEhUTUxRdW90ZSAgICA9PiAwLAogICAgICAgICk7CiAgICAgICAgJFBhcmFte0xhbmd1YWdlT3JpZ1N0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJU9yaWdpbmFsRGVmYXVsdFVzZWRMYW5ndWFnZXMsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkVHlwZSAuICdMYW5ndWFnZU9yaWcnLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIEhUTUxRdW90ZSAgICA9PiAwLAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vdGlmaWNhdGlvbkxhbmd1YWdlQWRkJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBUeXBlID0+ICRUeXBlLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCiMgc2hvdyBhIHRhYmxlIG9mIG5vdGlmaWNhdGlvbiBydWxlcwpzdWIgX092ZXJ2aWV3IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uTGlzdCcgKTsKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25BZGQnICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHQnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgIyBnZXQgbm90aWZpY2F0aW9uIG9iamVjdAogICAgbXkgJE5vdGlmaWNhdGlvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpOb3RpZmljYXRpb24nKTsKCiAgICBteSAkUnVsZUlEcyA9ICROb3RpZmljYXRpb25PYmplY3QtPk5vdGlmaWNhdGlvblJ1bGVMaXN0KCkgfHwgW107CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoKTsKICAgIGZvciBteSAkUnVsZUlEICggQHskUnVsZUlEc30gKSB7CgogICAgICAgIG15ICREYXRhID0gJE5vdGlmaWNhdGlvbk9iamVjdC0+Tm90aWZpY2F0aW9uUnVsZUdldCggSUQgPT4gJFJ1bGVJRCApOwogICAgICAgIG15ICRSZWNpcGllbnRzID0gam9pbiAnLCAnLCBAeyAkRGF0YS0+e1JlY2lwaWVudHN9IHx8IFtdIH07CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdFJvdycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVmFsaWQgPT4gJFZhbGlkTGlzdHsgJERhdGEtPntWYWxpZElEfSB9LAogICAgICAgICAgICAgICAgJXskRGF0YX0sCiAgICAgICAgICAgICAgICBSZWNpcGllbnRzID0+ICRSZWNpcGllbnRzLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pbklUU01TdGF0ZU1hY2hpbmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVFcnJvcjsKCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIHN0b3JlIGNvbW1vbmx5IG5lZWRlZCBwYXJhbWV0ZXJzIGluICVHZXRQYXJhbQogICAgbXkgJUdldFBhcmFtOwogICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KFN0YXRlSUQgTmV4dFN0YXRlSUQgQ2xhc3MpKSB7CiAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwogICAgfQoKICAgICMgcmVhZCB0aGUgY29uZmlnLAogICAgbXkgJENvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiSVRTTVN0YXRlTWFjaGluZTo6T2JqZWN0IikgfHwge307CgogICAgIyBwcmVwYXJlIHRoZSBjb25maWcgZm9yIGxvb2t1cCBieSBjbGFzcwogICAgIyB0aGUgaGFzaCBrZXlzIG9mICRDb25maWcgYXJlIG5vdCBzaWduaWZpY2FudAogICAgJFNlbGYtPntDb25maWdCeUNsYXNzfSA9IHt9OwogICAgZm9yIG15ICRIYXNoUmVmICggdmFsdWVzICV7JENvbmZpZ30gKSB7CiAgICAgICAgJFNlbGYtPntDb25maWdCeUNsYXNzfS0+eyAkSGFzaFJlZi0+e0NsYXNzfSB9ID0gJEhhc2hSZWY7CiAgICB9CgogICAgIyB0cmFuc2xhdGUgZnJvbSBuYW1lIHRvIGNsYXNzIGFuZCB2aWNlIHZlcnNhCiAgICBpZiAoICRHZXRQYXJhbXtDbGFzc30gKSB7CiAgICAgICAgJEdldFBhcmFte0NsYXNzU2hvcnROYW1lfSA9ICRTZWxmLT57Q29uZmlnQnlDbGFzc30tPnsgJEdldFBhcmFte0NsYXNzfSB9LT57TmFtZX07CiAgICB9CgogICAgIyBlcnJvciBtZXNzYWdlcyBhcmUgYWRkZWQgdG8gdGhpcyB2YXJpYWJsZQogICAgbXkgJE5vdGUgPSAnJzsKCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU3RhdGVUcmFuc2l0aW9uVXBkYXRlJyApIHsKCiAgICAgICAgIyBwcm92aWRlIGZvcm0gZm9yIGNoYW5naW5nIHRoZSBuZXh0IHN0YXRlCiAgICAgICAgcmV0dXJuICRTZWxmLT5fU3RhdGVUcmFuc2l0aW9uVXBkYXRlUGFnZUdldCgKICAgICAgICAgICAgQWN0aW9uID0+ICdTdGF0ZVRyYW5zaXRpb25VcGRhdGUnLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTdGF0ZVRyYW5zaXRpb25BZGQnICkgewogICAgICAgIGlmICggISRHZXRQYXJhbXtDbGFzc30gKSB7CiAgICAgICAgICAgICRFcnJvcnsnQ2xhc3NJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgcHJvdmlkZSBmb3JtIGZvciBhZGRpbmcgYSBzdGF0ZSB0cmFuc2l0aW9uCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X1N0YXRlVHJhbnNpdGlvbkFkZFBhZ2VHZXQoCiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gJ1N0YXRlVHJhbnNpdGlvbkFkZCcsCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1N0YXRlVHJhbnNpdGlvbkRlbGV0ZScgKSB7CgogICAgICAgICMgc2hvdyBjb25maXJtYXRpb24gcGFnZSBmb3Igc3RhdGUgZGVsZXRpb24KICAgICAgICByZXR1cm4gJFNlbGYtPl9TdGF0ZVRyYW5zaXRpb25EZWxldGVQYWdlR2V0KAogICAgICAgICAgICBBY3Rpb24gPT4gJ1N0YXRlVHJhbnNpdGlvbkRlbGV0ZScsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgQnVpbGQgZHJvcC1kb3duIGZvciB0aGUgY2xhc3Mgc2VsZWN0aW9uIG9uIHRoZSBsZWZ0IHNpZGUuCiAgICBteSBAQXJySGFzaFJlZjsKICAgIGZvciBteSAkQ2xhc3MgKCBzb3J0IGtleXMgJXsgJFNlbGYtPntDb25maWdCeUNsYXNzfSB9ICkgewogICAgICAgIHB1c2ggQEFyckhhc2hSZWYsIHsKICAgICAgICAgICAgS2V5ICAgPT4gJENsYXNzLAogICAgICAgICAgICBWYWx1ZSA9PiAkQ2xhc3MsCiAgICAgICAgfTsKICAgIH0KCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICRHZXRQYXJhbXtDbGFzc1NlbGVjdGlvblN0cmluZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBOYW1lICAgICAgICAgPT4gJ0NsYXNzJywKICAgICAgICBEYXRhICAgICAgICAgPT4gXEBBcnJIYXNoUmVmLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkR2V0UGFyYW17Q2xhc3N9LAogICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplIFZhbGlkYXRlX1JlcXVpcmVkIFcxMDBwYyAnIC4gKCAkRXJyb3J7Q2xhc3NJbnZhbGlkfSB8fCAnJyApLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgKTsKCiAgICAjIHBlcmZvcm0gYWN0aW9ucwogICAgbXkgJEFjdGlvbklzT2sgPSAxOwoKICAgICMgZ2V0IHN0YXRlIG1hY2hpbmUgb2JqZWN0CiAgICBteSAkU3RhdGVNYWNoaW5lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01TdGF0ZU1hY2hpbmUnKTsKCiAgICAjIHVwZGF0ZSB0aGUgbmV4dCBzdGF0ZSBvZiBhIHN0YXRlIHRyYW5zaXRpb24KICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTdGF0ZVRyYW5zaXRpb25VcGRhdGVBY3Rpb24nICkgewoKICAgICAgICAjIHBhcmFtcyBzcGVjaWZpYyB0byBTdGF0ZVRyYW5zaXRpb25VcGRhdGUKICAgICAgICBmb3IgbXkgJFBhcmFtTmFtZSAocXcoTmV3TmV4dFN0YXRlSUQpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbU5hbWUgKTsKICAgICAgICB9CgogICAgICAgICMgVXBkYXRlIHRoZSBzdGF0ZSB0cmFuc2l0aW9uCiAgICAgICAgJEFjdGlvbklzT2sgPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZVRyYW5zaXRpb25VcGRhdGUoCiAgICAgICAgICAgIENsYXNzICAgICAgICAgID0+ICRHZXRQYXJhbXtDbGFzc30sCiAgICAgICAgICAgIFN0YXRlSUQgICAgICAgID0+ICRHZXRQYXJhbXtTdGF0ZUlEfSwKICAgICAgICAgICAgTmV4dFN0YXRlSUQgICAgPT4gJEdldFBhcmFte05leHRTdGF0ZUlEfSwKICAgICAgICAgICAgTmV3TmV4dFN0YXRlSUQgPT4gJEdldFBhcmFte05ld05leHRTdGF0ZUlEfSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1N0YXRlVHJhbnNpdGlvbkFkZEFjdGlvbicgKSB7CgogICAgICAgIG15ICRJc1ZhbGlkID0gMTsKICAgICAgICAlRXJyb3IgPSAoKTsKCiAgICAgICAgIyB3ZSBuZWVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZW1wdHkgc3RyaW5nICcnIGFuZCB0aGUgc3RyaW5nICcwJy4KICAgICAgICAjICcnIGluZGljYXRlcyB0aGF0IG5vIHZhbHVlIHdhcyBzZWxlY3RlZCwgd2hpY2ggaXMgaW52YWxpZAogICAgICAgICMgJzAnIGluZGljYXRlZCAnKlNUQVJUKicgb3IgJypFTkQqJwogICAgICAgIGlmICggJEdldFBhcmFte1N0YXRlSUR9IGVxICcnICkgewogICAgICAgICAgICAkSXNWYWxpZCA9IDA7CiAgICAgICAgICAgICRFcnJvcnsnU3RhdGVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkR2V0UGFyYW17TmV4dFN0YXRlSUR9IGVxICcnICkgewogICAgICAgICAgICAkSXNWYWxpZCA9IDA7CiAgICAgICAgICAgICRFcnJvcnsnTmV4dFN0YXRlSW52YWxpZCd9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgIGlmICggISRJc1ZhbGlkICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9TdGF0ZVRyYW5zaXRpb25BZGRQYWdlR2V0KAogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgJUVycm9yLAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICdTdGF0ZVRyYW5zaXRpb25BZGQnLAogICAgICAgICAgICAgICAgTm90ZSAgID0+ICROb3RlLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBBZGQgdGhlIHN0YXRlIHRyYW5zaXRpb24KICAgICAgICAkQWN0aW9uSXNPayA9ICRTdGF0ZU1hY2hpbmVPYmplY3QtPlN0YXRlVHJhbnNpdGlvbkFkZCgKICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJEdldFBhcmFte0NsYXNzfSwKICAgICAgICAgICAgU3RhdGVJRCAgICAgPT4gJEdldFBhcmFte1N0YXRlSUR9LAogICAgICAgICAgICBOZXh0U3RhdGVJRCA9PiAkR2V0UGFyYW17TmV4dFN0YXRlSUR9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU3RhdGVUcmFuc2l0aW9uRGVsZXRlQWN0aW9uJyApIHsKCiAgICAgICAgIyBEZWxldGUgdGhlIHN0YXRlIHRyYW5zaXRpb24KICAgICAgICAkQWN0aW9uSXNPayA9ICRTdGF0ZU1hY2hpbmVPYmplY3QtPlN0YXRlVHJhbnNpdGlvbkRlbGV0ZSgKICAgICAgICAgICAgU3RhdGVJRCAgICAgPT4gJEdldFBhcmFte1N0YXRlSUR9LAogICAgICAgICAgICBOZXh0U3RhdGVJRCA9PiAkR2V0UGFyYW17TmV4dFN0YXRlSUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBTaG93IGxpc3Qgb2Ygc3RhdGUgdHJhbnNpdGlvbnMgZm9yIHRoZSBjbGFzcwogICAgaWYgKCAkR2V0UGFyYW17Q2xhc3N9ICkgewogICAgICAgICROb3RlIC49ICRBY3Rpb25Jc09rID8gJycgOiAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoIFByaW9yaXR5ID0+ICdFcnJvcicgKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT5fT3ZlcnZpZXdTdGF0ZVRyYW5zaXRpb25zUGFnZUdldCgKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBOb3RlID0+ICROb3RlLAogICAgICAgICk7CiAgICB9CgogICAgIyBwcmVzZW50IGEgbGlzdCBvZiBhbGwgY29uZmlndXJlZCBjbGFzc2VzLCBhcyB0aGUgY2xhc3MgaXMgbm90IGtub3duIHlldAogICAgcmV0dXJuICRTZWxmLT5fT3ZlcnZpZXdDbGFzc2VzUGFnZUdldCgKICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgTm90ZSA9PiAkTm90ZSwKICAgICk7Cn0KCiMgcHJvdmlkZSBhIGZvcm0gZm9yIGNoYW5naW5nIHRoZSBuZXh0IHN0YXRlIG9mIGEgdHJhbnNpdGlvbgpzdWIgX1N0YXRlVHJhbnNpdGlvblVwZGF0ZVBhZ2VHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBzdGF0ZSBtYWNoaW5lIG9iamVjdAogICAgbXkgJFN0YXRlTWFjaGluZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNU3RhdGVNYWNoaW5lJyk7CgogICAgJFBhcmFte1N0YXRlTmFtZX0gPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZUxvb2t1cCgKICAgICAgICBDbGFzcyAgID0+ICRQYXJhbXtDbGFzc30sCiAgICAgICAgU3RhdGVJRCA9PiAkUGFyYW17U3RhdGVJRH0sCiAgICApIHx8ICcqU1RBUlQqJzsKCiAgICAjIEFycmF5SGFzaFJlZiB3aXRoIGFsbCBzdGF0ZXMgZm9yIGEgY2F0YWxvZyBjbGFzcwogICAgbXkgJEFsbFN0YXRlc0FycmF5SGFzaFJlZiA9ICRTdGF0ZU1hY2hpbmVPYmplY3QtPlN0YXRlTGlzdCgKICAgICAgICBDbGFzcyAgPT4gJFBhcmFte0NsYXNzfSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIEFkZCB0aGUgc3BlY2lhbCBmaW5hbCBzdGF0ZQogICAgcHVzaCBAeyRBbGxTdGF0ZXNBcnJheUhhc2hSZWZ9LAogICAgICAgIHsKICAgICAgICBLZXkgICA9PiAnMCcsCiAgICAgICAgVmFsdWUgPT4gJypFTkQqJwogICAgICAgIH07CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAkUGFyYW17TmV4dFN0YXRlU2VsZWN0aW9uU3RyaW5nfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gJEFsbFN0YXRlc0FycmF5SGFzaFJlZiwKICAgICAgICBOYW1lICAgICAgID0+ICdOZXdOZXh0U3RhdGVJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17TmV4dFN0YXRlSUR9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JywKICAgICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU3RhdGVUcmFuc2l0aW9uVXBkYXRlJywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICMgZ2VuZXJhdGUgSFRNTAogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAkT3V0cHV0IC49ICRQYXJhbXtOb3RlfSB8fCAnJzsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5JVFNNU3RhdGVNYWNoaW5lJywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgojIHByb3ZpZGUgYSBmb3JtIGZvciBhZGRpbmcgYSBuZXcgc3RhdGUgdHJhbnNpdGlvbgpzdWIgX1N0YXRlVHJhbnNpdGlvbkFkZFBhZ2VHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIEFycmF5SGFzaFJlZiB3aXRoIGFsbCBzdGF0ZXMgZm9yIGEgY2F0YWxvZyBjbGFzcwogICAgbXkgJEFsbFN0YXRlc0FycmF5SGFzaFJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNU3RhdGVNYWNoaW5lJyktPlN0YXRlTGlzdCgKICAgICAgICBDbGFzcyAgPT4gJFBhcmFte0NsYXNzfSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIEFkZCB0aGUgc3BlY2lhbCBmaW5hbCBzdGF0ZQogICAgcHVzaCBAeyRBbGxTdGF0ZXNBcnJheUhhc2hSZWZ9LCB7CiAgICAgICAgS2V5ICAgPT4gJzAnLAogICAgICAgIFZhbHVlID0+ICcqU1RBUlQqJywKICAgIH07CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGRyb3Bkb3duIG1lbnUsIHdoZXJlIHRoZSBzdGF0ZSBjYW4gYmUgc2VsZWN0ZWQgZm9yIGFkZGl0aW9uCiAgICAkUGFyYW17U3RhdGVTZWxlY3Rpb25TdHJpbmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+ICRBbGxTdGF0ZXNBcnJheUhhc2hSZWYsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdTdGF0ZUlEJywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1N0YXRlSUR9LAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplIFZhbGlkYXRlX1JlcXVpcmVkICcgLiAoICRQYXJhbXtTdGF0ZUludmFsaWR9IHx8ICcnICksCiAgICApOwoKICAgICMgZHJvcGRvd24gbWVudSwgd2hlcmUgdGhlIG5leHQgc3RhdGUgY2FuIGJlIHNlbGVjdGVkIGZvciBhZGRpdGlvbgogICAgJEFsbFN0YXRlc0FycmF5SGFzaFJlZi0+Wy0xXSA9IHsKICAgICAgICBLZXkgICA9PiAnMCcsCiAgICAgICAgVmFsdWUgPT4gJypFTkQqJywKICAgIH07CiAgICAkUGFyYW17TmV4dFN0YXRlU2VsZWN0aW9uU3RyaW5nfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiAkQWxsU3RhdGVzQXJyYXlIYXNoUmVmLAogICAgICAgIE5hbWUgICAgICAgICA9PiAnTmV4dFN0YXRlSUQnLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17TmV4dFN0YXRlSUR9LAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplIFZhbGlkYXRlX1JlcXVpcmVkICcgLiAoICRQYXJhbXtOZXh0U3RhdGVJbnZhbGlkfSB8fCAnJyApLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU3RhdGVUcmFuc2l0aW9uQWRkJywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICMgZ2VuZXJhdGUgSFRNTAogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAkT3V0cHV0IC49ICRQYXJhbXtOb3RlfSB8fCAnJzsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5JVFNNU3RhdGVNYWNoaW5lJywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgojIHByb3ZpZGUgYSBmb3JtIGZvciBjb25maXJtaW5nIHRoZSBkZWxldGlvbiBvZiBhIHN0YXRlIHRyYW5zaXRpb24Kc3ViIF9TdGF0ZVRyYW5zaXRpb25EZWxldGVQYWdlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBY3Rpb25PdmVydmlldycsCiAgICApOwoKICAgICMgZ2V0IHN0YXRlIG1hY2hpbmUgb2JqZWN0CiAgICBteSAkU3RhdGVNYWNoaW5lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01TdGF0ZU1hY2hpbmUnKTsKCiAgICAkUGFyYW17U3RhdGVOYW1lfSA9ICRTdGF0ZU1hY2hpbmVPYmplY3QtPlN0YXRlTG9va3VwKAogICAgICAgIENsYXNzICAgPT4gJFBhcmFte0NsYXNzfSwKICAgICAgICBTdGF0ZUlEID0+ICRQYXJhbXtTdGF0ZUlEfSwKICAgICkgfHwgJypTVEFSVConOwoKICAgICRQYXJhbXtOZXh0U3RhdGVOYW1lfSA9ICRTdGF0ZU1hY2hpbmVPYmplY3QtPlN0YXRlTG9va3VwKAogICAgICAgIENsYXNzICAgPT4gJFBhcmFte0NsYXNzfSwKICAgICAgICBTdGF0ZUlEID0+ICRQYXJhbXtOZXh0U3RhdGVJRH0sCiAgICApIHx8ICcqRU5EKic7CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU3RhdGVUcmFuc2l0aW9uRGVsZXRlJywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICMgZ2VuZXJhdGUgSFRNTAogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAkT3V0cHV0IC49ICRQYXJhbXtOb3RlfSB8fCAnJzsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5JVFNNU3RhdGVNYWNoaW5lJywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgojIFNob3cgYSB0YWJsZSBvZiBhbGwgc3RhdGUgdHJhbnNpdGlvbnMKc3ViIF9PdmVydmlld1N0YXRlVHJhbnNpdGlvbnNQYWdlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBY3Rpb25PdmVydmlldycsCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3U3RhdGVUcmFuc2l0aW9ucycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAjIGdldCBzdGF0ZSBtYWNoaW5lIG9iamVjdAogICAgbXkgJFN0YXRlTWFjaGluZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNU3RhdGVNYWNoaW5lJyk7CgogICAgIyBsb29rdXAgZm9yIHN0YXRlIG5hbWVzCiAgICBteSAlTmV4dFN0YXRlSURzID0gJXsgJFN0YXRlTWFjaGluZU9iamVjdC0+U3RhdGVUcmFuc2l0aW9uTGlzdCggQ2xhc3MgPT4gJFBhcmFte0NsYXNzfSApIHx8IHt9IH07CgogICAgIyBsb29wIG92ZXIgYWxsICdTdGF0ZScgYW5kICdOZXh0U3RhdGUnIHBhaXJzIGZvciB0aGUgY2F0YWxvZyBjbGFzcwogICAgZm9yIG15ICRTdGF0ZUlEICggc29ydCBrZXlzICVOZXh0U3RhdGVJRHMgKSB7CgogICAgICAgIGZvciBteSAkTmV4dFN0YXRlSUQgKCBAeyAkTmV4dFN0YXRlSURzeyRTdGF0ZUlEfSB9ICkgewoKICAgICAgICAgICAgIyBzdGF0ZSBuYW1lcwogICAgICAgICAgICBteSAkU3RhdGVOYW1lID0gJFN0YXRlTWFjaGluZU9iamVjdC0+U3RhdGVMb29rdXAoCiAgICAgICAgICAgICAgICBDbGFzcyAgID0+ICRQYXJhbXtDbGFzc30sCiAgICAgICAgICAgICAgICBTdGF0ZUlEID0+ICRTdGF0ZUlELAogICAgICAgICAgICApIHx8ICcqU1RBUlQqJzsKICAgICAgICAgICAgbXkgJE5leHRTdGF0ZU5hbWUgPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZUxvb2t1cCgKICAgICAgICAgICAgICAgIENsYXNzICAgPT4gJFBhcmFte0NsYXNzfSwKICAgICAgICAgICAgICAgIFN0YXRlSUQgPT4gJE5leHRTdGF0ZUlELAogICAgICAgICAgICApIHx8ICcqRU5EKic7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N0YXRlVHJhbnNpdGlvblJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgICAgICAgICBTdGF0ZU5hbWUgICAgID0+ICRTdGF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgTmV4dFN0YXRlSUQgICA9PiAkTmV4dFN0YXRlSUQsCiAgICAgICAgICAgICAgICAgICAgTmV4dFN0YXRlTmFtZSA9PiAkTmV4dFN0YXRlTmFtZSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG9ubHkgc2hvdyB0aGUgZGVsZXRlIGxpbmsgaWYgaXQgaXMgbm90IHRoZSBzdGFydCBzdGF0ZQogICAgICAgICAgICBpZiAoICRTdGF0ZU5hbWUgbmUgJypTVEFSVConICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU3RhdGVUcmFuc2l0aW9uRGVsZXRlQnV0dG9uJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZU5hbWUgICAgID0+ICRTdGF0ZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIE5leHRTdGF0ZUlEICAgPT4gJE5leHRTdGF0ZUlELAogICAgICAgICAgICAgICAgICAgICAgICBOZXh0U3RhdGVOYW1lID0+ICROZXh0U3RhdGVOYW1lLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgZ2VuZXJhdGUgSFRNTAogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAkT3V0cHV0IC49ICRQYXJhbXtOb3RlfSB8fCAnJzsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5JVFNNU3RhdGVNYWNoaW5lJywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgojIFNob3cgYSBsaXN0IG9mIHJlbGV2YW50IG9iamVjdCB0eXBlcwpzdWIgX092ZXJ2aWV3Q2xhc3Nlc1BhZ2VHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0FjdGlvbkFkZFN0YXRlJywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3Q2xhc3NlcycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAjIHJlYWQgdGhlIGNvbmZpZywKICAgIG15ICRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01TdGF0ZU1hY2hpbmU6Ok9iamVjdCIpIHx8IHt9OwoKICAgICMgcHJlcGFyZSB0aGUgY29uZmlnIGZvciBsb29rdXAgYnkgY2xhc3MKICAgICMgdGhlIGhhc2gga2V5cyBvZiAkQ29uZmlnIGFyZSBub3Qgc2lnbmlmaWNhbnQKICAgICRTZWxmLT57Q29uZmlnQnlDbGFzc30gPSB7fTsKICAgIGZvciBteSAkSGFzaFJlZiAoIHZhbHVlcyAleyRDb25maWd9ICkgewogICAgICAgICRTZWxmLT57Q29uZmlnQnlDbGFzc30tPnsgJEhhc2hSZWYtPntDbGFzc30gfSA9ICRIYXNoUmVmOwogICAgfQoKICAgIGZvciBteSAkQ2xhc3MgKCBzb3J0IGtleXMgJXsgJFNlbGYtPntDb25maWdCeUNsYXNzfSB9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0NsYXNzZXNSb3cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIENsYXNzU2hvcnROYW1lID0+ICRTZWxmLT57Q29uZmlnQnlDbGFzc30tPnskQ2xhc3N9LT57TmFtZX0sCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICA9PiAkQ2xhc3MsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdlbmVyYXRlIEhUTUwKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwogICAgJE91dHB1dCAuPSAkUGFyYW17Tm90ZX0gfHwgJyc7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluSVRTTVN0YXRlTWFjaGluZScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DQUJNZW1iZXJTZWFyY2g7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRKU09OID0gJyc7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIHNlYXJjaCBmb3IgcG9zc2libGUgQ0FCIG1lbWJlcnMKICAgIGlmICggISRTZWxmLT57U3ViYWN0aW9ufSApIHsKCiAgICAgICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICAgICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICAgICAjIGdldCBuZWVkZWQgcGFyYW1zCiAgICAgICAgbXkgJFNlYXJjaCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUZXJtJyApICAgfHwgJyc7CiAgICAgICAgbXkgJEdyb3VwcyA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdHcm91cHMnICkgfHwgJyc7CgogICAgICAgICMgZ2V0IGFsbCBtZW1iZXJzIG9mIHRoZSBncm91cHMKICAgICAgICBteSAlR3JvdXBVc2VyczsKICAgICAgICBpZiAoJEdyb3VwcykgewogICAgICAgICAgICBteSBAR3JvdXBOYW1lcyA9IHNwbGl0IC8sXHMrLywgJEdyb3VwczsKCiAgICAgICAgICAgIGZvciBteSAkR3JvdXBOYW1lIChAR3JvdXBOYW1lcykgewoKICAgICAgICAgICAgICAgICMgZ2V0IGdyb3VwIG9iamVjdAogICAgICAgICAgICAgICAgbXkgJEdyb3VwT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CgogICAgICAgICAgICAgICAgbXkgJEdyb3VwSUQgPSAkR3JvdXBPYmplY3QtPkdyb3VwTG9va3VwKAogICAgICAgICAgICAgICAgICAgIEdyb3VwID0+ICRHcm91cE5hbWUsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgZ2V0IHVzZXIgZ3JvdXBzCiAgICAgICAgICAgICAgICBteSAlVXNlcnMgPSAkR3JvdXBPYmplY3QtPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICAgICAgICAgICAgICBHcm91cElEID0+ICRHcm91cElELAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ3JvJywKICAgICAgICAgICAgICAgICAgICBSZXN1bHQgID0+ICdIQVNIJywKICAgICAgICAgICAgICAgICAgICBDYWNoZWQgID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15IEBVc2VySURzID0ga2V5cyAlVXNlcnM7CiAgICAgICAgICAgICAgICBAR3JvdXBVc2Vyc3tAVXNlcklEc30gPSBAVXNlcklEczsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdXNlciBvYmplY3QKICAgICAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgICAgICMgZ2V0IGFnZW50IGxpc3QKICAgICAgICBteSAlVXNlckxpc3QgPSAkVXNlck9iamVjdC0+VXNlclNlYXJjaCgKICAgICAgICAgICAgU2VhcmNoID0+ICRTZWFyY2gsCiAgICAgICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgVXNlclNlYXJjaCgpIHJldHVybnMgdmFsdWVzIHdpdGggYSB0cmFpbGluZyBzcGFjZSwgZ2V0IHJpZCBvZiBpdAogICAgICAgIGZvciBteSAkTmFtZSAoIHZhbHVlcyAlVXNlckxpc3QgKSB7CiAgICAgICAgICAgICROYW1lID1+IHN7IFxzKyBceiB9e314bXM7CiAgICAgICAgfQoKICAgICAgICAjIHRoZSBkYXRhIHRoYXQgd2lsbCBiZSBzZW50IGFzIHJlc3BvbnNlCiAgICAgICAgbXkgQERhdGE7CgogICAgICAgIFVTRVJJRDoKICAgICAgICBmb3IgbXkgJFVzZXJJRCAoIHNvcnQgeyAkVXNlckxpc3R7JGF9IGNtcCAkVXNlckxpc3R7JGJ9IH0ga2V5cyAlVXNlckxpc3QgKSB7CgogICAgICAgICAgICAjIGlmIGdyb3VwcyBhcmUgcmVxdWlyZWQgYW5kIHVzZXIgaXMgbm90IG1lbWJlciBvZiBvbmUgb2YgdGhlIGdyb3VwcwogICAgICAgICAgICAjIHRoZSBza2lwIHRoZSB1c2VyCiAgICAgICAgICAgIG5leHQgVVNFUklEIGlmICRHcm91cHMgJiYgISRHcm91cFVzZXJzeyRVc2VySUR9OwoKICAgICAgICAgICAgIyBUaGUgdmFsdWVzIGluICVVc2VyTGlzdCBhcmUgaW4gdGhlIGZvcm06ICdtbSBNYXggTXVzdGVybWFubicuCiAgICAgICAgICAgICMgU28gYXNzZW1ibGUgYSBuZWF0ZXIgc3RyaW5nIGZvciBkaXNwbGF5LgogICAgICAgICAgICAjIChBY3R1YWxseSBVc2VyU2VhcmNoKCkgY29udGFpbnMgY29kZSBmb3IgZm9ybWF0aW5nLCBidXQgdGhhdCBpcyB1c3VhbGx5IG5vdCBjYWxsZWQuKQogICAgICAgICAgICBteSAlVXNlciA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICAgICAgVmFsaWQgID0+ICRQYXJhbXtWYWxpZH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG15ICRVc2VyVmFsdWVQbGFpbiA9IHNwcmludGYgJyIlcyAlcyIgPCVzPicsCiAgICAgICAgICAgICAgICAkVXNlcntVc2VyRmlyc3RuYW1lfSwKICAgICAgICAgICAgICAgICRVc2Vye1VzZXJMYXN0bmFtZX0sCiAgICAgICAgICAgICAgICAkVXNlcntVc2VyRW1haWx9OwoKICAgICAgICAgICAgcHVzaCBARGF0YSwgewogICAgICAgICAgICAgICAgVXNlcktleSAgID0+ICRVc2VySUQsCiAgICAgICAgICAgICAgICBVc2VyVmFsdWUgPT4gJFVzZXJWYWx1ZVBsYWluLAogICAgICAgICAgICAgICAgVXNlclR5cGUgID0+ICdDQUJBZ2VudHMnLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgY3VzdG9tZXIgbGlzdAogICAgICAgIG15ICVDdXN0b21lclVzZXJMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpLT5DdXN0b21lclNlYXJjaCgKICAgICAgICAgICAgU2VhcmNoID0+ICRTZWFyY2gsCiAgICAgICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgICk7CgogICAgICAgIENVU1RPTUVSVVNFUkxPR0lOOgogICAgICAgIGZvciBteSAkQ3VzdG9tZXJVc2VyTG9naW4gKAogICAgICAgICAgICBzb3J0IHsgJEN1c3RvbWVyVXNlckxpc3R7JGF9IGNtcCAkQ3VzdG9tZXJVc2VyTGlzdHskYn0gfQogICAgICAgICAgICBrZXlzICVDdXN0b21lclVzZXJMaXN0CiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIGlmIGdyb3VwcyBhcmUgcmVxdWlyZWQgYW5kIHVzZXIgaXMgbm90IG1lbWJlciBvZiBvbmUgb2YgdGhlIGdyb3VwcwogICAgICAgICAgICAjIHRoZSBza2lwIHRoZSB1c2VyCiAgICAgICAgICAgIG5leHQgVVNFUklEIGlmICRHcm91cHMgJiYgISRHcm91cFVzZXJzeyRDdXN0b21lclVzZXJMb2dpbn07CgogICAgICAgICAgICAjIGh0bWwgcXVvdGUgY2hhcmFjdGVycyBsaWtlIDw+CiAgICAgICAgICAgIG15ICRDdXN0b21lclVzZXJWYWx1ZVBsYWluID0gJEN1c3RvbWVyVXNlckxpc3R7JEN1c3RvbWVyVXNlckxvZ2lufTsKICAgICAgICAgICAgJEN1c3RvbWVyVXNlckxpc3R7JEN1c3RvbWVyVXNlckxvZ2lufSA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoCiAgICAgICAgICAgICAgICBUZXh0ID0+ICRDdXN0b21lclVzZXJMaXN0eyRDdXN0b21lclVzZXJMb2dpbn0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBwdXNoIEBEYXRhLCB7CiAgICAgICAgICAgICAgICBVc2VyS2V5ICAgPT4gJEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICAgICAgVXNlclZhbHVlID0+ICRDdXN0b21lclVzZXJWYWx1ZVBsYWluLAogICAgICAgICAgICAgICAgVXNlclR5cGUgID0+ICdDQUJDdXN0b21lcnMnLAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgIyBidWlsZCBKU09OIG91dHB1dAogICAgICAgICRKU09OID0gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSgKICAgICAgICAgICAgRGF0YSA9PiBcQERhdGEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNlbmQgSlNPTiByZXNwb25zZQogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9JyAuICRMYXlvdXRPYmplY3QtPntDaGFyc2V0fSwKICAgICAgICBDb250ZW50ICAgICA9PiAkSlNPTiB8fCAnJywKICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMhJywgJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0gKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgc3RvcmUgbGFzdCBzY3JlZW4sIHVzZWQgZm9yIGJhY2tsaW5rcwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyktPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlbkNoYW5nZXMnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IHNvcnRpbmcgcGFyYW1ldGVycwogICAgbXkgJFNvcnRCeSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTb3J0QnknICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnU29ydEJ5OjpEZWZhdWx0J30KICAgICAgICB8fCAnQ2hhbmdlTnVtYmVyJzsKCiAgICAjIGdldCBvcmRlcmluZyBwYXJhbWV0ZXJzCiAgICBteSAkT3JkZXJCeSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdPcmRlckJ5JyApCiAgICAgICAgfHwgJFNlbGYtPntDb25maWd9LT57J09yZGVyOjpEZWZhdWx0J30KICAgICAgICB8fCAnVXAnOwoKICAgIG15IEBTb3J0QnlBcnJheSAgPSAoJFNvcnRCeSk7CiAgICBteSBAT3JkZXJCeUFycmF5ID0gKCRPcmRlckJ5KTsKCiAgICAjIGludmVzdGlnYXRlIHJlZnJlc2gKICAgIG15ICRSZWZyZXNoID0gJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9ID8gNjAgKiAkU2VsZi0+e1VzZXJSZWZyZXNoVGltZX0gOiB1bmRlZjsKCiAgICAjIHN0YXJ0aW5nIHdpdGggcGFnZSAuLi4KICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoIFJlZnJlc2ggPT4gJFJlZnJlc2ggKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwogICAgJExheW91dE9iamVjdC0+UHJpbnQoIE91dHB1dCA9PiBcJE91dHB1dCApOwogICAgJE91dHB1dCA9ICcnOwoKICAgICMgZmluZCBvdXQgd2hpY2ggY29sdW1ucyBzaG91bGQgYmUgc2hvd24KICAgIG15IEBTaG93Q29sdW1uczsKICAgIGlmICggJFNlbGYtPntDb25maWd9LT57U2hvd0NvbHVtbnN9ICkgewoKICAgICAgICAjIGdldCBhbGwgcG9zc2libGUgY29sdW1ucyBmcm9tIGNvbmZpZwogICAgICAgIG15ICVQb3NzaWJsZUNvbHVtbiA9ICV7ICRTZWxmLT57Q29uZmlnfS0+e1Nob3dDb2x1bW5zfSB9OwoKICAgICAgICAjIGdldCB0aGUgY29sdW1uIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHNob3duCiAgICAgICAgQFNob3dDb2x1bW5zID0gZ3JlcCB7ICRQb3NzaWJsZUNvbHVtbnskX30gfSBzb3J0IGtleXMgJVBvc3NpYmxlQ29sdW1uOwogICAgfQoKICAgICMgdG8gc3RvcmUgdGhlIGZpbHRlcnMKICAgIG15ICVGaWx0ZXJzOwoKICAgICMgc2V0IG90aGVyIGZpbHRlcnMgYmFzZWQgb24gY2hhbmdlIHN0YXRlCiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+eydGaWx0ZXI6OkNoYW5nZVN0YXRlcyd9ICkgewoKICAgICAgICAjIGRlZmluZSBwb3NpdGlvbiBvZiB0aGUgZmlsdGVyIGluIHRoZSBmcm9udGVuZAogICAgICAgIG15ICRQcmlvQ291bnRlciA9IDEwMDA7CgogICAgICAgICMgZ2V0IGFsbCBjaGFuZ2Ugc3RhdGVzIHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgZmlsdGVycwogICAgICAgIENIQU5HRV9TVEFURToKICAgICAgICBmb3IgbXkgJENoYW5nZVN0YXRlICggQHsgJFNlbGYtPntDb25maWd9LT57J0ZpbHRlcjo6Q2hhbmdlU3RhdGVzJ30gfSApIHsKCiAgICAgICAgICAgICMgZG8gbm90IHVzZSBlbXB0eSBjaGFuZ2Ugc3RhdGVzCiAgICAgICAgICAgIG5leHQgQ0hBTkdFX1NUQVRFIGlmICEkQ2hhbmdlU3RhdGU7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHN0YXRlIGlzIHZhbGlkIGJ5IGxvb2tpbmcgdXAgdGhlIHN0YXRlIGlkCiAgICAgICAgICAgIG15ICRDaGFuZ2VTdGF0ZUlEID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU3RhdGVMb29rdXAoCiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZSA9PiAkQ2hhbmdlU3RhdGUsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRvIG5vdCB1c2UgaW52YWxpZCBjaGFuZ2Ugc3RhdGVzCiAgICAgICAgICAgIG5leHQgQ0hBTkdFX1NUQVRFIGlmICEkQ2hhbmdlU3RhdGVJRDsKCiAgICAgICAgICAgICMgaW5jcmVhc2UgdGhlIFByaW9Db3VudGVyCiAgICAgICAgICAgICRQcmlvQ291bnRlcisrOwoKICAgICAgICAgICAgIyBhZGQgZmlsdGVyIHdpdGggcGFyYW1zIGZvciB0aGUgc2VhcmNoIG1ldGhvZAogICAgICAgICAgICAkRmlsdGVyc3skQ2hhbmdlU3RhdGV9ID0gewogICAgICAgICAgICAgICAgTmFtZSAgID0+ICRDaGFuZ2VTdGF0ZSwKICAgICAgICAgICAgICAgIFByaW8gICA9PiAkUHJpb0NvdW50ZXIsCiAgICAgICAgICAgICAgICBTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlcyAgICAgPT4gWyRDaGFuZ2VTdGF0ZV0sCiAgICAgICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBcQFNvcnRCeUFycmF5LAogICAgICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gXEBPcmRlckJ5QXJyYXksCiAgICAgICAgICAgICAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAxMDAwLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgZmlsdGVyIGFuZCB2aWV3IHBhcmFtcwogICAgJFNlbGYtPntGaWx0ZXJ9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbHRlcicgKSB8fCAnQWxsJzsKICAgICRTZWxmLT57Vmlld30gICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdWaWV3JyApICAgfHwgJyc7CgogICAgIyBpZiBvbmx5IG9uZSBmaWx0ZXIgZXhpc3RzCiAgICBpZiAoIHNjYWxhciBrZXlzICVGaWx0ZXJzID09IDEgKSB7CgogICAgICAgICMgZ2V0IHRoZSBuYW1lIG9mIHRoZSBvbmx5IGZpbHRlcgogICAgICAgIG15ICgkRmlsdGVyTmFtZSkgPSBrZXlzICVGaWx0ZXJzOwoKICAgICAgICAjIGFjdGl2YXRlIHRoaXMgZmlsdGVyCiAgICAgICAgJFNlbGYtPntGaWx0ZXJ9ID0gJEZpbHRlck5hbWU7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBhZGQgZGVmYXVsdCBmaWx0ZXIsIHdoaWNoIHNob3dzIGFsbCBpdGVtcwogICAgICAgICRGaWx0ZXJze0FsbH0gPSB7CiAgICAgICAgICAgIE5hbWUgICA9PiAnQWxsJywKICAgICAgICAgICAgUHJpbyAgID0+IDEwMDAsCiAgICAgICAgICAgIFNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFxAU29ydEJ5QXJyYXksCiAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFxAT3JkZXJCeUFycmF5LAogICAgICAgICAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAxMDAwLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGZpbHRlciBpcyB2YWxpZAogICAgaWYgKCAhJEZpbHRlcnN7ICRTZWxmLT57RmlsdGVyfSB9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnSW52YWxpZCBGaWx0ZXI6ICVzIScsICRTZWxmLT57RmlsdGVyfSApLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZWFyY2ggY2hhbmdlcyB3aGljaCBtYXRjaCB0aGUgc2VsZWN0ZWQgZmlsdGVyCiAgICBteSAkSURzUmVmID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgICV7ICRGaWx0ZXJzeyAkU2VsZi0+e0ZpbHRlcn0gfS0+e1NlYXJjaH0gfSwKICAgICk7CgogICAgIyBkaXNwbGF5IGFsbCBuYXZiYXIgZmlsdGVycwogICAgbXkgJU5hdkJhckZpbHRlcjsKICAgIGZvciBteSAkRmlsdGVyICggc29ydCBrZXlzICVGaWx0ZXJzICkgewoKICAgICAgICAjIGNvdW50IHRoZSBudW1iZXIgb2YgaXRlbXMgZm9yIGVhY2ggZmlsdGVyCiAgICAgICAgbXkgJENvdW50ID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgICAgICAleyAkRmlsdGVyc3skRmlsdGVyfS0+e1NlYXJjaH0gfSwKICAgICAgICAgICAgUmVzdWx0ID0+ICdDT1VOVCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBkaXNwbGF5IHRoZSBuYXZiYXIgZmlsdGVyCiAgICAgICAgJE5hdkJhckZpbHRlcnsgJEZpbHRlcnN7JEZpbHRlcn0tPntQcmlvfSB9ID0gewogICAgICAgICAgICBDb3VudCAgPT4gJENvdW50LAogICAgICAgICAgICBGaWx0ZXIgPT4gJEZpbHRlciwKICAgICAgICAgICAgJXsgJEZpbHRlcnN7JEZpbHRlcn0gfSwKICAgICAgICB9OwogICAgfQoKICAgICMgc2hvdyB0aGUgbGlzdAogICAgbXkgJExpbmtQYWdlID0KICAgICAgICAnRmlsdGVyPScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57RmlsdGVyfSApCiAgICAgICAgLiAnO1ZpZXc9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntWaWV3fSApCiAgICAgICAgLiAnO1NvcnRCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU29ydEJ5ICkKICAgICAgICAuICc7T3JkZXJCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkT3JkZXJCeSApCiAgICAgICAgLiAnOyc7CiAgICBteSAkTGlua1NvcnQgPQogICAgICAgICdGaWx0ZXI9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntGaWx0ZXJ9ICkKICAgICAgICAuICc7Vmlldz0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAuICc7JzsKICAgIG15ICRMaW5rRmlsdGVyID0KICAgICAgICAnU29ydEJ5PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTb3J0QnkgKQogICAgICAgIC4gJztPcmRlckJ5PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRPcmRlckJ5ICkKICAgICAgICAuICc7Vmlldz0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAuICc7JzsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+SVRTTUNoYW5nZUxpc3RTaG93KAogICAgICAgIENoYW5nZUlEcyA9PiAkSURzUmVmLAogICAgICAgIFRvdGFsICAgICA9PiBzY2FsYXIgQHskSURzUmVmfSwKCiAgICAgICAgVmlldyA9PiAkU2VsZi0+e1ZpZXd9LAoKICAgICAgICBGaWx0ZXIgICAgID0+ICRTZWxmLT57RmlsdGVyfSwKICAgICAgICBGaWx0ZXJzICAgID0+IFwlTmF2QmFyRmlsdGVyLAogICAgICAgIEZpbHRlckxpbmsgPT4gJExpbmtGaWx0ZXIsCgogICAgICAgIFRpdGxlTmFtZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ092ZXJ2aWV3OiBJVFNNIENoYW5nZXMnKSwKCiAgICAgICAgVGl0bGVWYWx1ZSA9PiAkRmlsdGVyc3sgJFNlbGYtPntGaWx0ZXJ9IH0tPntOYW1lfSwKCiAgICAgICAgRW52ICAgICAgPT4gJFNlbGYsCiAgICAgICAgTGlua1BhZ2UgPT4gJExpbmtQYWdlLAogICAgICAgIExpbmtTb3J0ID0+ICRMaW5rU29ydCwKCiAgICAgICAgU2hvd0NvbHVtbnMgPT4gXEBTaG93Q29sdW1ucywKICAgICAgICBTb3J0QnkgICAgICA9PiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTb3J0QnkgKSwKICAgICAgICBPcmRlckJ5ICAgICA9PiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRPcmRlckJ5ICksCiAgICApOwoKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VBZGQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRDb25maWdPYmplY3QtPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMhJywgJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0gKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgc3RvcmUgbmVlZGVkIHBhcmFtZXRlcnMgaW4gJUdldFBhcmFtIHRvIG1ha2UgaXQgcmVsb2FkYWJsZQogICAgbXkgJUdldFBhcmFtOwogICAgZm9yIG15ICRQYXJhbU5hbWUgKAogICAgICAgIHF3KENoYW5nZVRpdGxlIERlc2NyaXB0aW9uIEp1c3RpZmljYXRpb24gVGlja2V0SUQgQ2F0ZWdvcnlJRCBJbXBhY3RJRCBQcmlvcml0eUlEIEF0dGFjaG1lbnRVcGxvYWQgRmlsZUlEKQogICAgICAgICkKICAgIHsKICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CiAgICB9CgogICAgIyBnZXQgZHluYW1pYyBmaWVsZHMgZnJvbSBQYXJhbU9iamVjdAogICAgbXkgJUR5bmFtaWNGaWVsZFZhbHVlczsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBteSAkRHluYW1pY0ZpZWxkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgIEZpZWxkRmlsdGVyID0+ICRTZWxmLT57Q29uZmlnfS0+e0R5bmFtaWNGaWVsZH0gfHwge30sCiAgICApOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgYmFja2VuZCBvYmplY3QKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGV4dHJhY3QgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZnJvbSB0aGUgd2ViIHJlcXVlc3QgYW5kIGFkZCB0aGUgcHJlZml4CiAgICAgICAgJER5bmFtaWNGaWVsZFZhbHVlc3sgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0KICAgICAgICAgICAgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkVmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgKTsKICAgIH0KCiAgICAjIHN0b3JlIHRpbWUgcmVsYXRlZCBmaWVsZHMgaW4gJUdldFBhcmFtCiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e1JlcXVlc3RlZFRpbWV9ICkgewogICAgICAgIGZvciBteSAkVGltZVBhcnQgKHF3KFVzZWQgWWVhciBNb250aCBEYXkgSG91ciBNaW51dGUpKSB7CiAgICAgICAgICAgIG15ICRQYXJhbU5hbWUgPSAnUmVxdWVzdGVkVGltZScgLiAkVGltZVBhcnQ7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbU5hbWUgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZSBmb3IgY2F0ZWdvcnkKICAgICRQYXJhbXtDYXRlZ29yeUlEfSA9ICRHZXRQYXJhbXtDYXRlZ29yeUlEfTsKICAgIGlmICggISRQYXJhbXtDYXRlZ29yeUlEfSApIHsKICAgICAgICBteSAkRGVmYXVsdENhdGVnb3J5ID0gJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNQ2hhbmdlOjpDYXRlZ29yeTo6RGVmYXVsdCcpOwogICAgICAgICRQYXJhbXtDYXRlZ29yeUlEfSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUNJUExvb2t1cCgKICAgICAgICAgICAgQ0lQICA9PiAkRGVmYXVsdENhdGVnb3J5LAogICAgICAgICAgICBUeXBlID0+ICdDYXRlZ29yeScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlIGZvciBpbXBhY3QKICAgICRQYXJhbXtJbXBhY3RJRH0gPSAkR2V0UGFyYW17SW1wYWN0SUR9OwogICAgaWYgKCAhJFBhcmFte0ltcGFjdElEfSApIHsKICAgICAgICBteSAkRGVmYXVsdEltcGFjdCA9ICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNoYW5nZTo6SW1wYWN0OjpEZWZhdWx0Jyk7CiAgICAgICAgJFBhcmFte0ltcGFjdElEfSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUNJUExvb2t1cCgKICAgICAgICAgICAgQ0lQICA9PiAkRGVmYXVsdEltcGFjdCwKICAgICAgICAgICAgVHlwZSA9PiAnSW1wYWN0JywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHVwbG9hZCBjYWNoZSBvYmplY3QKICAgIG15ICRVcGxvYWRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlJyk7CgogICAgIyBnZXQgZm9ybSBpZAogICAgJFNlbGYtPntGb3JtSUR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Zvcm1JRCcgKTsKCiAgICAjIGNyZWF0ZSBmb3JtIGlkCiAgICBpZiAoICEkU2VsZi0+e0Zvcm1JRH0gKSB7CiAgICAgICAgJFNlbGYtPntGb3JtSUR9ID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURDcmVhdGUoKTsKICAgIH0KCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgUmVtZW1iZXIgdGhlIHJlYXNvbiB3aHkgc2F2aW5nIHdhcyBub3QgYXR0ZW1wdGVkLgogICAgbXkgJVZhbGlkYXRpb25FcnJvcjsKCiAgICAjIHRoZSBUaWNrZXRJRCBjYW4gYmUgdmFsaWRhdGVkIGV2ZW4gd2l0aG91dCB0aGUgU3ViYWN0aW9uICdTYXZlJywKICAgICMgYXMgaXQgaXMgcGFzc2VkIGFzIEdFVC1wYXJhbSBvciBpbiBhIGhpZGRlbiBmaWVsZC4KICAgIGlmICggJEdldFBhcmFte1RpY2tldElEfSApIHsKCiAgICAgICAgIyBnZXQgdGlja2V0IGRhdGEKICAgICAgICBteSAlVGlja2V0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRHZXQoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRHZXRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiB0aWNrZXQgZXhpc3RzCiAgICAgICAgaWYgKCAhJVRpY2tldCApIHsKCiAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICdUaWNrZXQgd2l0aCBUaWNrZXRJRCAlcyBkb2VzIG5vdCBleGlzdCEnLCAkR2V0UGFyYW17VGlja2V0SUR9CiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgbGlzdCBvZiByZWxldmFudCB0aWNrZXQgdHlwZXMKICAgICAgICBteSAkQWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzID0gJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMnKTsKCiAgICAgICAgIyBjaGVjayB0aGUgbGlzdCBvZiByZWxldmFudCB0aWNrZXQgdHlwZXMKICAgICAgICBpZiAoCiAgICAgICAgICAgICEkQWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzCiAgICAgICAgICAgIHx8IHJlZiAkQWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIG5lICdBUlJBWScKICAgICAgICAgICAgfHwgIUB7JEFkZENoYW5nZUxpbmtUaWNrZXRUeXBlc30KICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgc2V0IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgbXkgJE1lc3NhZ2UgPSBUcmFuc2xhdGFibGUoJ01pc3Npbmcgc3lzY29uZmlnIG9wdGlvbiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiEnKTsKCiAgICAgICAgICAgICMgbG9nIGVycm9yCiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJE1lc3NhZ2UsCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCByZWxldmFudCB0aWNrZXQgdHlwZXMKICAgICAgICBteSAlSXNSZWxldmFudCA9IG1hcCB7ICRfID0+IDEgfSBAeyRBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXN9OwoKICAgICAgICAjIGNoZWNrIHdoZXRoZXIgdGhlIHRpY2tldCdzIHR5cGUgaXMgcmVsZXZhbnQKICAgICAgICBpZiAoICEkSXNSZWxldmFudHsgJFRpY2tldHtUeXBlfSB9ICkgewoKICAgICAgICAgICAgIyBzZXQgZXJyb3IgbWVzc2FnZQogICAgICAgICAgICBteSAkTWVzc2FnZSA9ICJJbnZhbGlkIHRpY2tldCB0eXBlICckVGlja2V0e1R5cGV9JyBmb3IgZGlyZWN0bHkgbGlua2luZyBhIHRpY2tldCB3aXRoIGEgY2hhbmdlLiAiCiAgICAgICAgICAgICAgICAuICdPbmx5IHRoZSBmb2xsb3dpbmcgdGlja2V0IHR5cGUocykgYXJlIGFsbG93ZWQgZm9yIHRoaXMgb3BlcmF0aW9uOiAnCiAgICAgICAgICAgICAgICAuIGpvaW4gJywnLCBAeyRBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXN9OwoKICAgICAgICAgICAgIyBsb2cgZXJyb3IKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICRNZXNzYWdlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgQ0lQIGFsbG9jYXRlIG9iamVjdAogICAgbXkgJENJUEFsbG9jYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01DaGFuZ2VDSVBBbGxvY2F0ZScpOwoKICAgICMgcGVyZm9ybSB0aGUgYWRkaW5nCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2F2ZScgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgICMgdGhlIHRpdGxlIGlzIHJlcXVpcmVkCiAgICAgICAgaWYgKCAhJEdldFBhcmFte0NoYW5nZVRpdGxlfSApIHsKICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntDaGFuZ2VUaXRsZVNlcnZlckVycm9yfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIENJUAogICAgICAgIGZvciBteSAkVHlwZSAocXcoQ2F0ZWdvcnkgSW1wYWN0IFByaW9yaXR5KSkgewogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17IiR7VHlwZX1JRCJ9IHx8ICRHZXRQYXJhbXsiJHtUeXBlfUlEIn0gIX4gbXsgXEEgXGQrIFx6IH14bXMgKSB7CiAgICAgICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9yeyAkVHlwZSAuICdJRFNlcnZlckVycm9yJyB9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG15ICRDSVBJc1ZhbGlkID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQ0lQTG9va3VwKAogICAgICAgICAgICAgICAgICAgIElEICAgPT4gJEdldFBhcmFteyIke1R5cGV9SUQifSwKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICRUeXBlLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoICEkQ0lQSXNWYWxpZCApIHsKICAgICAgICAgICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9yeyAkVHlwZSAuICdJRFNlcnZlckVycm9yJyB9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayB0aGUgcmVxdWVzdGVkIHRpbWUKICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e1JlcXVlc3RlZFRpbWV9ICYmICRHZXRQYXJhbXtSZXF1ZXN0ZWRUaW1lVXNlZH0gKSB7CgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17UmVxdWVzdGVkVGltZVllYXJ9CiAgICAgICAgICAgICAgICAmJiAkR2V0UGFyYW17UmVxdWVzdGVkVGltZU1vbnRofQogICAgICAgICAgICAgICAgJiYgJEdldFBhcmFte1JlcXVlc3RlZFRpbWVEYXl9CiAgICAgICAgICAgICAgICAmJiBkZWZpbmVkICRHZXRQYXJhbXtSZXF1ZXN0ZWRUaW1lSG91cn0KICAgICAgICAgICAgICAgICYmIGRlZmluZWQgJEdldFBhcmFte1JlcXVlc3RlZFRpbWVNaW51dGV9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIHRyYW5zZm9ybSBjaGFuZ2UgcmVxdWVzdGVkIHRpbWUsIHRpbWUgc3RhbXAgYmFzZWQgb24gdXNlciB0aW1lIHpvbmUKICAgICAgICAgICAgICAgICVHZXRQYXJhbSA9ICRMYXlvdXRPYmplY3QtPlRyYW5zZm9ybURhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIFByZWZpeCA9PiAnUmVxdWVzdGVkVGltZScsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgZm9ybWF0IGFzIHRpbWVzdGFtcCwgd2hlbiBhbGwgcmVxdWlyZWQgdGltZSBwYXJhbXMgd2VyZSBwYXNzZWQKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtSZXF1ZXN0ZWRUaW1lfSA9IHNwcmludGYgJyUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDowMCcsCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1JlcXVlc3RlZFRpbWVZZWFyfSwKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UmVxdWVzdGVkVGltZU1vbnRofSwKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UmVxdWVzdGVkVGltZURheX0sCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1JlcXVlc3RlZFRpbWVIb3VyfSwKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17UmVxdWVzdGVkVGltZU1pbnV0ZX07CgogICAgICAgICAgICAgICAgIyBzYW5pdHkgY2hlY2sgb2YgdGhlIGFzc2VtYmxlZCB0aW1lc3RhbXAKICAgICAgICAgICAgICAgIG15ICRTeXN0ZW1UaW1lID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRHZXRQYXJhbXtSZXF1ZXN0ZWRUaW1lfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBkbyBub3Qgc2F2ZSB3aGVuIHRpbWUgaXMgaW52YWxpZAogICAgICAgICAgICAgICAgaWYgKCAhJFN5c3RlbVRpbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntSZXF1ZXN0ZWRUaW1lSW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgaXQgd2FzIGluZGljYXRlZCB0aGF0IHRoZSByZXF1ZXN0ZWQgdGltZSBzaG91bGQgYmUgc2V0LAogICAgICAgICAgICAgICAgIyBidXQgYXQgbGVhc3Qgb25lIG9mIHRoZSByZXF1aXJlZCB0aW1lIHBhcmFtcyBpcyBtaXNzaW5nCiAgICAgICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye1JlcXVlc3RlZFRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgbXkgJFZhbGlkYXRpb25SZXN1bHQgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkVmFsdWVWYWxpZGF0ZSgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgICAgIE1hbmRhdG9yeSAgICAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntEeW5hbWljRmllbGR9LT57ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID09IDIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkVmFsaWRhdGlvblJlc3VsdCkgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICdDb3VsZCBub3QgcGVyZm9ybSB2YWxpZGF0aW9uIG9uIGZpZWxkICVzIScsICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH0KICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcHJvcGFnYXRlIHZhbGlkYXRpb24gZXJyb3IgdG8gdGhlIEVycm9yIHZhcmlhYmxlIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSBmcm9udGVuZAogICAgICAgICAgICBpZiAoICRWYWxpZGF0aW9uUmVzdWx0LT57U2VydmVyRXJyb3J9ICkgewogICAgICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAnIFNlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiBhbiBhdHRhY2htZW50IG11c3QgYmUgZGVsZXRlZAogICAgICAgIEFUVEFDSE1FTlQ6CiAgICAgICAgZm9yIG15ICROdW1iZXIgKCAxIC4uIDMyICkgewoKICAgICAgICAgICAgIyBjaGVjayBpZiB0aGUgZGVsZXRlIGJ1dHRvbiB3YXMgcHJlc3NlZCBmb3IgdGhpcyBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICREZWxldGUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiQXR0YWNobWVudERlbGV0ZSROdW1iZXIiICk7CgogICAgICAgICAgICAjIGNoZWNrIG5leHQgYXR0YWNobWVudCBpZiBpdCB3YXMgbm90IHByZXNzZWQKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkRGVsZXRlOwoKICAgICAgICAgICAgIyByZW1lbWJlciB0aGF0IHdlIG5lZWQgdG8gc2hvdyB0aGUgcGFnZSBhZ2FpbgogICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye0F0dGFjaG1lbnR9ID0gMTsKCiAgICAgICAgICAgICMgcmVtb3ZlIHRoZSBhdHRhY2htZW50IGZyb20gdGhlIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JRFJlbW92ZUZpbGUoCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgRmlsZUlEID0+ICROdW1iZXIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIHRoZXJlIHdhcyBhbiBhdHRhY2htZW50IHVwbG9hZAogICAgICAgIGlmICggJEdldFBhcmFte0F0dGFjaG1lbnRVcGxvYWR9ICkgewoKICAgICAgICAgICAgIyByZW1lbWJlciB0aGF0IHdlIG5lZWQgdG8gc2hvdyB0aGUgcGFnZSBhZ2FpbgogICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye0F0dGFjaG1lbnR9ID0gMTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSB1cGxvYWRlZCBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICVVcGxvYWRTdHVmZiA9ICRQYXJhbU9iamVjdC0+R2V0VXBsb2FkQWxsKAogICAgICAgICAgICAgICAgUGFyYW0gID0+ICdGaWxlVXBsb2FkJywKICAgICAgICAgICAgICAgIFNvdXJjZSA9PiAnc3RyaW5nJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIGF0dGFjaG1lbnQgdG8gdGhlIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREFkZEZpbGUoCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgJVVwbG9hZFN0dWZmLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBhZGQgb25seSB3aGVuIHRoZXJlIGFyZSBubyBpbnB1dCB2YWxpZGF0aW9uIGVycm9ycwogICAgICAgIGlmICggISVWYWxpZGF0aW9uRXJyb3IgKSB7CgogICAgICAgICAgICBteSAlQWRkaXRpb25hbFBhcmFtOwoKICAgICAgICAgICAgIyBhZGQgcmVxdWVzdGVkIHRpbWUgaWYgY29uZmlndXJlZAogICAgICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e1JlcXVlc3RlZFRpbWV9ICkgewogICAgICAgICAgICAgICAgJEFkZGl0aW9uYWxQYXJhbXtSZXF1ZXN0ZWRUaW1lfSA9ICRHZXRQYXJhbXtSZXF1ZXN0ZWRUaW1lfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjcmVhdGUgdGhlIGNoYW5nZQogICAgICAgICAgICBteSAkQ2hhbmdlSUQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICRHZXRQYXJhbXtEZXNjcmlwdGlvbn0sCiAgICAgICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICRHZXRQYXJhbXtKdXN0aWZpY2F0aW9ufSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJEdldFBhcmFte0NoYW5nZVRpdGxlfSwKICAgICAgICAgICAgICAgIENhdGVnb3J5SUQgICAgPT4gJEdldFBhcmFte0NhdGVnb3J5SUR9LAogICAgICAgICAgICAgICAgSW1wYWN0SUQgICAgICA9PiAkR2V0UGFyYW17SW1wYWN0SUR9LAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkR2V0UGFyYW17UHJpb3JpdHlJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICVBZGRpdGlvbmFsUGFyYW0sCiAgICAgICAgICAgICAgICAlRHluYW1pY0ZpZWxkVmFsdWVzLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhZGRpbmcgd2FzIHN1Y2Nlc3NmdWwKICAgICAgICAgICAgaWYgKCRDaGFuZ2VJRCkgewoKICAgICAgICAgICAgICAgICMgaWYgdGhlIGNoYW5nZSBhZGQgbWFzayB3YXMgY2FsbGVkIGZyb20gdGhlIHRpY2tldCB6b29tCiAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtUaWNrZXRJRH0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgbGluayB0aWNrZXQgd2l0aCBuZXdseSBjcmVhdGVkIGNoYW5nZQogICAgICAgICAgICAgICAgICAgIG15ICRMaW5rU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JyktPkxpbmtBZGQoCiAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZU9iamVjdCA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlS2V5ICAgID0+ICRHZXRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldE9iamVjdCA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldEtleSAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBsaW5rIGNvdWxkIG5vdCBiZSBhZGRlZAogICAgICAgICAgICAgICAgICAgIGlmICggISRMaW5rU3VjY2VzcyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2V0IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJE1lc3NhZ2UgPSAiQ2hhbmdlIHdpdGggQ2hhbmdlSUQgJENoYW5nZUlEIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gImJ1dCBhIGxpbmsgdG8gVGlja2V0IHdpdGggVGlja2V0SUQgJEdldFBhcmFte1RpY2tldElEfSBjb3VsZCBub3QgYmUgY3JlYXRlZCEiOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBsb2cgZXJyb3IKICAgICAgICAgICAgICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICRNZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBtb3ZlIGF0dGFjaG1lbnRzIGZyb20gY2FjaGUgdG8gdmlydHVhbCBmcwogICAgICAgICAgICAgICAgbXkgQENhY2hlZEF0dGFjaG1lbnRzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc0RhdGEoCiAgICAgICAgICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgZm9yIG15ICRDYWNoZWRBdHRhY2htZW50IChAQ2FjaGVkQXR0YWNobWVudHMpIHsKICAgICAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUF0dGFjaG1lbnRBZGQoCiAgICAgICAgICAgICAgICAgICAgICAgICV7JENhY2hlZEF0dGFjaG1lbnR9LAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGRlbGV0ZSBmaWxlIGZyb20gY2FjaGUgaWYgbW92ZSB3YXMgc3VjY2Vzc2Z1bAogICAgICAgICAgICAgICAgICAgIGlmICgkU3VjY2VzcykgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyByZXdyaXRlIFVSTCBmb3IgaW5saW5lIGltYWdlcwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRDYWNoZWRBdHRhY2htZW50LT57Q29udGVudElEfSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGdldCB0aGUgY2hhbmdlIGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRDaGFuZ2VEYXRhID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGljdHVyZSB1cmwgaW4gdXBsb2FkIGNhY2hlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkU2VhcmNoID0gIkFjdGlvbj1QaWN0dXJlVXBsb2FkIC4rIEZvcm1JRD0kU2VsZi0+e0Zvcm1JRH0gLisgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkNvbnRlbnRJRD0kQ2FjaGVkQXR0YWNobWVudC0+e0NvbnRlbnRJRH0iOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGljdHVyZSB1cmwgaW4gY2hhbmdlIGF0dHRhY2htZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkUmVwbGFjZSA9ICJBY3Rpb249QWdlbnRJVFNNQ2hhbmdlWm9vbTtTdWJhY3Rpb249RG93bmxvYWRBdHRhY2htZW50OyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJGaWxlbmFtZT0kQ2FjaGVkQXR0YWNobWVudC0+e0ZpbGVuYW1lfTtDaGFuZ2VJRD0kQ2hhbmdlSUQiOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVwbGFjZSB1cmxzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlRGF0YS0+e0Rlc2NyaXB0aW9ufSA9fiBzeyRTZWFyY2h9eyRSZXBsYWNlfXhtczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDaGFuZ2VEYXRhLT57SnVzdGlmaWNhdGlvbn0gPX4gc3skU2VhcmNofXskUmVwbGFjZX14bXM7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1cGRhdGUgY2hhbmdlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICRDaGFuZ2VEYXRhLT57RGVzY3JpcHRpb259LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJENoYW5nZURhdGEtPntKdXN0aWZpY2F0aW9ufSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ291bGQgbm90IHVwZGF0ZSB0aGUgaW5saW5lIGltYWdlIFVSTHMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiZm9yIENoYW5nZUlEICckQ2hhbmdlSUQnISIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURSZW1vdmVGaWxlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVJRCA9PiAkQ2FjaGVkQXR0YWNobWVudC0+e0ZpbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0Nhbm5vdCBtb3ZlIEZpbGUgZnJvbSBDYWNoZSB0byBWaXJ0dWFsRlMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiKCR7JENhY2hlZEF0dGFjaG1lbnR9e0ZpbGVuYW1lfSkiLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHJlZGlyZWN0IHRvIHpvb20gbWFzayBvZiB0aGUgbmV3IGNoYW5nZSwgd2hlbiBhZGRpbmcgd2FzIHN1Y2Nlc3NmdWwKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9JENoYW5nZUlEIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UsIHdoZW4gYWRkaW5nIGZhaWxlZAogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdXYXMgbm90IGFibGUgdG8gYWRkIGNoYW5nZSEnKSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgaGFuZGxlIEFKQVhVcGRhdGUKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBSkFYVXBkYXRlJyApIHsKCiAgICAgICAgIyBnZXQgcHJpb3JpdGllcwogICAgICAgIG15ICRQcmlvcml0aWVzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlUG9zc2libGVDSVBHZXQoCiAgICAgICAgICAgIFR5cGUgICA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNlbGVjdGVkIHByaW9yaXR5CiAgICAgICAgbXkgJFNlbGVjdGVkUHJpb3JpdHkgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPlByaW9yaXR5QWxsb2NhdGlvbkdldCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkR2V0UGFyYW17Q2F0ZWdvcnlJRH0sCiAgICAgICAgICAgIEltcGFjdElEICAgPT4gJEdldFBhcmFte0ltcGFjdElEfSwKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIGpzb24KICAgICAgICBteSAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uSlNPTigKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdQcmlvcml0eUlEJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiAkUHJpb3JpdGllcywKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEICA9PiAkU2VsZWN0ZWRQcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgICAgIE1heCAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKCiAgICAgICAgIyByZXR1cm4ganNvbgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkSlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGlmIHRoZXJlIHdhcyBhbiBhdHRhY2htZW50IGRlbGV0ZSBvciB1cGxvYWQKICAgICMgd2UgZG8gbm90IHdhbnQgdG8gc2hvdyB2YWxpZGF0aW9uIGVycm9ycyBmb3Igb3RoZXIgZmllbGRzCiAgICBpZiAoICRWYWxpZGF0aW9uRXJyb3J7QXR0YWNobWVudH0gKSB7CiAgICAgICAgJVZhbGlkYXRpb25FcnJvciA9ICgpOwogICAgfQoKICAgICMgZ2V0IGFsbCBhdHRhY2htZW50cyBtZXRhIGRhdGEKICAgIG15IEBBdHRhY2htZW50cyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNNZXRhKAogICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICBUaXRsZSA9PiAnQWRkJywKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAjIGNoZWNrIGlmIHJlcXVlc3RlZCB0aW1lIHNob3VsZCBiZSBzaG93bgogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntSZXF1ZXN0ZWRUaW1lfSApIHsKCiAgICAgICAgIyB0aW1lIHBlcmlvZCB0aGF0IGNhbiBiZSBzZWxlY3RlZCBmcm9tIHRoZSBHVUkKICAgICAgICBteSAlVGltZVBlcmlvZCA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnSVRTTVdvcmtPcmRlcjo6VGltZVBlcmlvZCcpIH07CgogICAgICAgICMgYWRkIHNlbGVjdGlvbiBmb3IgdGhlIHRpbWUKICAgICAgICBteSAkVGltZVNlbGVjdGlvblN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBGb3JtYXQgICAgICAgICAgICAgICAgPT4gJ0RhdGVJbnB1dEZvcm1hdExvbmcnLAogICAgICAgICAgICBQcmVmaXggICAgICAgICAgICAgICAgPT4gJ1JlcXVlc3RlZFRpbWUnLAogICAgICAgICAgICBSZXF1ZXN0ZWRUaW1lT3B0aW9uYWwgPT4gMSwKICAgICAgICAgICAgUmVxdWVzdGVkVGltZUNsYXNzICAgID0+ICdWYWxpZGF0ZSAnIC4gKCAkVmFsaWRhdGlvbkVycm9ye1JlcXVlc3RlZFRpbWVJbnZhbGlkfSB8fCAnJyApLAogICAgICAgICAgICBWYWxpZGF0ZSAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgJVRpbWVQZXJpb2QsCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IHRpbWUgZmllbGRzCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1JlcXVlc3RlZFRpbWUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICdSZXF1ZXN0ZWRUaW1lU3RyaW5nJyA9PiAkVGltZVNlbGVjdGlvblN0cmluZywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgY3JlYXRlIGRyb3Bkb3duIGZvciB0aGUgY2F0ZWdvcnkKICAgICMgYWxsIGNhdGVnb3JpZXMgYXJlIHNlbGVjdGFibGUKICAgICMgd2hlbiB0aGUgY2F0ZWdvcnkgaXMgY2hhbmdlZCwgYSBuZXcgcHJpb3JpdHkgaXMgcHJvcG9zZWQKICAgIG15ICRDYXRlZ29yaWVzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlUG9zc2libGVDSVBHZXQoCiAgICAgICAgVHlwZSAgID0+ICdDYXRlZ29yeScsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICAkUGFyYW17Q2F0ZWdvcnlTZWxlY3Rpb25TdHJpbmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiAkQ2F0ZWdvcmllcywKICAgICAgICBOYW1lICAgICAgID0+ICdDYXRlZ29yeUlEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtDYXRlZ29yeUlEfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGNyZWF0ZSBkcm9wZG93biBmb3IgdGhlIGltcGFjdAogICAgIyBhbGwgaW1wYWN0cyBhcmUgc2VsZWN0YWJsZQogICAgIyB3aGVuIHRoZSBpbXBhY3QgaXMgY2hhbmdlZCwgYSBuZXcgcHJpb3JpdHkgaXMgcHJvcG9zZWQKICAgIG15ICRJbXBhY3RzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlUG9zc2libGVDSVBHZXQoCiAgICAgICAgVHlwZSAgID0+ICdJbXBhY3QnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgJFBhcmFte0ltcGFjdFNlbGVjdGlvblN0cmluZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+ICRJbXBhY3RzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0ltcGFjdElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtJbXBhY3RJRH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBjcmVhdGUgZHJvcGRvd24gZm9yIHByaW9yaXR5LAogICAgIyBhbGwgcHJpb3JpdGllcyBhcmUgc2VsZWN0YWJsZQogICAgIyB0aGUgZGVmYXVsdCB2YWx1ZSBtaWdodCBkZXBlbmQgb24gY2F0ZWdvcnkgYW5kIGltcGFjdAogICAgbXkgJFByaW9yaXRpZXMgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VQb3NzaWJsZUNJUEdldCgKICAgICAgICBUeXBlICAgPT4gJ1ByaW9yaXR5JywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIG15ICRTZWxlY3RlZFByaW9yaXR5ID0gJEdldFBhcmFte1ByaW9yaXR5SUR9CiAgICAgICAgfHwgJENJUEFsbG9jYXRlT2JqZWN0LT5Qcmlvcml0eUFsbG9jYXRpb25HZXQoCiAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkUGFyYW17Q2F0ZWdvcnlJRH0sCiAgICAgICAgSW1wYWN0SUQgICA9PiAkUGFyYW17SW1wYWN0SUR9LAogICAgICAgICk7CiAgICAkUGFyYW17UHJpb3JpdHlTZWxlY3Rpb25TdHJpbmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiAkUHJpb3JpdGllcywKICAgICAgICBOYW1lICAgICAgID0+ICdQcmlvcml0eUlEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRTZWxlY3RlZFByaW9yaXR5LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CgogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBnZXQgZHluYW1pYyBmaWVsZHMgZGVmYXVsdHMgaWYgcGFnZSBpcyBsb2FkZWQgdGhlIGZpcnN0IHRpbWUKICAgICAgICBpZiAoICEkU2VsZi0+e1N1YmFjdGlvbn0gKSB7CiAgICAgICAgICAgICREeW5hbWljRmllbGRWYWx1ZXN7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9CiAgICAgICAgICAgICAgICA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57RGVmYXVsdFZhbHVlfSB8fCAnJzsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGZpZWxkIGh0bWwKICAgICAgICBteSAkRHluYW1pY0ZpZWxkSFRNTCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRSZW5kZXIoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJER5bmFtaWNGaWVsZFZhbHVlc3sgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgIFNlcnZlckVycm9yICAgICAgICA9PiAkVmFsaWRhdGlvbkVycm9yeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSB8fCAnJywKICAgICAgICAgICAgTWFuZGF0b3J5ICAgICAgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e0R5bmFtaWNGaWVsZH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPT0gMiwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgIEFKQVhVcGRhdGUgICAgICAgICA9PiAwLAogICAgICAgICk7CgogICAgICAgICMgc2tpcCBmaWVsZHMgdGhhdCBIVE1MIGNvdWxkIG5vdCBiZSByZXRyaWV2ZWQKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZEhUTUwpOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICBMYWJlbCA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgIEZpZWxkID0+ICREeW5hbWljRmllbGRIVE1MLT57RmllbGR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZXhhbXBsZSBvZiBkeW5hbWljIGZpZWxkcyBvcmRlciBjdXN0b21pemF0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgIExhYmVsID0+ICREeW5hbWljRmllbGRIVE1MLT57TGFiZWx9LAogICAgICAgICAgICAgICAgRmllbGQgPT4gJER5bmFtaWNGaWVsZEhUTUwtPntGaWVsZH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgdGhlIGF0dGFjaG1lbnQgdXBsb2FkIGJ1dHRvbgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQXR0YWNobWVudFVwbG9hZCcsCiAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgIyBzaG93IGF0dGFjaG1lbnRzCiAgICBBVFRBQ0hNRU5UOgogICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudHMpIHsKCiAgICAgICAgIyBkbyBub3Qgc2hvdyBpbmxpbmUgaW1hZ2VzIGFzIGF0dGFjaG1lbnRzCiAgICAgICAgIyAodGhleSBoYXZlIGEgY29udGVudCBpZCkKICAgICAgICBpZiAoICRBdHRhY2htZW50LT57Q29udGVudElEfSAmJiAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UOwogICAgICAgIH0KCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0F0dGFjaG1lbnQnLAogICAgICAgICAgICBEYXRhID0+ICRBdHRhY2htZW50LAogICAgICAgICk7CiAgICB9CgogICAgIyBhZGQgcmljaCB0ZXh0IGVkaXRvciBqYXZhc2NyaXB0CiAgICAjIG9ubHkgaWYgYWN0aXZhdGVkIGFuZCB0aGUgYnJvd3NlciBjYW4gaGFuZGxlIGl0CiAgICAjIG90aGVyd2lzZSBqdXN0IGEgdGV4dGFyZWEgaXMgc2hvd24KICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1JpY2hUZXh0JywKICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgfQoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNoYW5nZUFkZCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVWYWxpZGF0aW9uRXJyb3IsCiAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9vdGVyCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZXJyb3Igc2NyZWVuCiAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIScsICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259ICksCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIHN0b3JlIG5lZWRlZCBwYXJhbWV0ZXJzIGluICVHZXRQYXJhbSB0byBtYWtlIGl0IHJlbG9hZGFibGUKICAgIG15ICVHZXRQYXJhbTsKICAgIGZvciBteSAkUGFyYW1OYW1lICgKICAgICAgICBxdyhNb3ZlVGltZVR5cGUgTW92ZVRpbWVZZWFyIE1vdmVUaW1lTW9udGggTW92ZVRpbWVEYXkgTW92ZVRpbWVIb3VyIE1vdmVUaW1lTWludXRlIFRpY2tldElEIFRlbXBsYXRlSUQpCiAgICAgICAgKQogICAgewogICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbU5hbWUgKTsKICAgIH0KCiAgICAjIHN0b3JlIHRpbWUgcmVsYXRlZCBmaWVsZHMgaW4gJUdldFBhcmFtCiAgICBmb3IgbXkgJFRpbWVQYXJ0IChxdyhVc2VkIFllYXIgTW9udGggRGF5IEhvdXIgTWludXRlKSkgewogICAgICAgIG15ICRQYXJhbU5hbWUgPSAnTW92ZVRpbWUnIC4gJFRpbWVQYXJ0OwogICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbU5hbWUgKTsKICAgIH0KCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgUmVtZW1iZXIgdGhlIHJlYXNvbiB3aHkgc2F2aW5nIHdhcyBub3QgYXR0ZW1wdGVkLgogICAgbXkgJVZhbGlkYXRpb25FcnJvcjsKCiAgICAjIHRoZSBUaWNrZXRJRCBjYW4gYmUgdmFsaWRhdGVkIGV2ZW4gd2l0aG91dCB0aGUgU3ViYWN0aW9uICdTYXZlJywKICAgICMgYXMgaXQgaXMgcGFzc2VkIGFzIEdFVC1wYXJhbSBvciBpbiBhIGhpZGRlbiBmaWVsZC4KICAgIGlmICggJEdldFBhcmFte1RpY2tldElEfSApIHsKCiAgICAgICAgIyBnZXQgdGlja2V0IGRhdGEKICAgICAgICBteSAlVGlja2V0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRHZXQoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRHZXRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiB0aWNrZXQgZXhpc3RzCiAgICAgICAgaWYgKCAhJVRpY2tldCApIHsKCiAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICdUaWNrZXQgd2l0aCBUaWNrZXRJRCAlcyBkb2VzIG5vdCBleGlzdCEnLCAkR2V0UGFyYW17VGlja2V0SUR9CiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgbGlzdCBvZiByZWxldmFudCB0aWNrZXQgdHlwZXMKICAgICAgICBteSAkQWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzID0gJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMnKTsKCiAgICAgICAgIyBjaGVjayB0aGUgbGlzdCBvZiByZWxldmFudCB0aWNrZXQgdHlwZXMKICAgICAgICBpZiAoCiAgICAgICAgICAgICEkQWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzCiAgICAgICAgICAgIHx8IHJlZiAkQWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIG5lICdBUlJBWScKICAgICAgICAgICAgfHwgIUB7JEFkZENoYW5nZUxpbmtUaWNrZXRUeXBlc30KICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgc2V0IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgbXkgJE1lc3NhZ2UgPSBUcmFuc2xhdGFibGUoJ01pc3Npbmcgc3lzY29uZmlnIG9wdGlvbiAiSVRTTUNoYW5nZTo6QWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIiEnKTsKCiAgICAgICAgICAgICMgbG9nIGVycm9yCiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJE1lc3NhZ2UsCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCByZWxldmFudCB0aWNrZXQgdHlwZXMKICAgICAgICBteSAlSXNSZWxldmFudCA9IG1hcCB7ICRfID0+IDEgfSBAeyRBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXN9OwoKICAgICAgICAjIGNoZWNrIHdoZXRoZXIgdGhlIHRpY2tldCdzIHR5cGUgaXMgcmVsZXZhbnQKICAgICAgICBpZiAoICEkSXNSZWxldmFudHsgJFRpY2tldHtUeXBlfSB9ICkgewoKICAgICAgICAgICAgIyBzZXQgZXJyb3IgbWVzc2FnZQogICAgICAgICAgICBteSAkTWVzc2FnZSA9ICJJbnZhbGlkIHRpY2tldCB0eXBlICckVGlja2V0e1R5cGV9JyBmb3IgZGlyZWN0bHkgbGlua2luZyBhIHRpY2tldCB3aXRoIGEgY2hhbmdlLiAiCiAgICAgICAgICAgICAgICAuICdPbmx5IHRoZSBmb2xsb3dpbmcgdGlja2V0IHR5cGUocykgYXJlIGFsbG93ZWQgZm9yIHRoaXMgb3BlcmF0aW9uOiAnCiAgICAgICAgICAgICAgICAuIGpvaW4gJywnLCBAeyRBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXN9OwoKICAgICAgICAgICAgIyBsb2cgZXJyb3IKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICRNZXNzYWdlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdGVtcGxhdGUgb2JqZWN0CiAgICBteSAkVGVtcGxhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6VGVtcGxhdGUnKTsKCiAgICAjIGNyZWF0ZSBjaGFuZ2UgZnJvbSB0ZW1wbGF0ZQogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NyZWF0ZUZyb21UZW1wbGF0ZScgKSB7CgogICAgICAgIG15ICROZXdUaW1lOwoKICAgICAgICAjIGNoZWNrIHZhbGlkaXR5IG9mIHRoZSB0aW1lIHR5cGUKICAgICAgICBteSAkTW92ZVRpbWVUeXBlID0gJEdldFBhcmFte01vdmVUaW1lVHlwZX07CiAgICAgICAgaWYgKAogICAgICAgICAgICAhZGVmaW5lZCAkTW92ZVRpbWVUeXBlCiAgICAgICAgICAgIHx8ICggJE1vdmVUaW1lVHlwZSBuZSAnUGxhbm5lZFN0YXJ0VGltZScgJiYgJE1vdmVUaW1lVHlwZSBuZSAnUGxhbm5lZEVuZFRpbWUnICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntNb3ZlVGltZVR5cGVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHRoZSBjb21wbGV0ZW5lc3Mgb2YgdGhlIHRpbWUgcGFyYW1ldGVyIGxpc3QsCiAgICAgICAgIyBvbmx5IGhvdXIgYW5kIG1pbnV0ZSBhcmUgYWxsb3dlZCB0byBiZSAnMCcKICAgICAgICBpZiAoCiAgICAgICAgICAgICEkR2V0UGFyYW17TW92ZVRpbWVZZWFyfQogICAgICAgICAgICB8fCAhJEdldFBhcmFte01vdmVUaW1lTW9udGh9CiAgICAgICAgICAgIHx8ICEkR2V0UGFyYW17TW92ZVRpbWVEYXl9CiAgICAgICAgICAgIHx8ICFkZWZpbmVkICRHZXRQYXJhbXtNb3ZlVGltZUhvdXJ9CiAgICAgICAgICAgIHx8ICFkZWZpbmVkICRHZXRQYXJhbXtNb3ZlVGltZU1pbnV0ZX0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntNb3ZlVGltZUludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSBzeXN0ZW0gdGltZSBmcm9tIHRoZSBpbnB1dCwgaWYgaXQgY2FuJ3QgYmUgZGV0ZXJtaW5lZCB3ZSBoYXZlIGEgdmFsaWRhdGlvbiBlcnJvcgogICAgICAgIGlmICggISVWYWxpZGF0aW9uRXJyb3IgKSB7CgogICAgICAgICAgICAjIHRyYW5zZm9ybSBjaGFuZ2UgcGxhbm5lZCB0aW1lLCB0aW1lIHN0YW1wIGJhc2VkIG9uIHVzZXIgdGltZSB6b25lCiAgICAgICAgICAgICVHZXRQYXJhbSA9ICRMYXlvdXRPYmplY3QtPlRyYW5zZm9ybURhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBQcmVmaXggPT4gJ01vdmVUaW1lJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZm9ybWF0IGFzIHRpbWVzdGFtcAogICAgICAgICAgICBteSAkUGxhbm5lZFRpbWUgPSBzcHJpbnRmICclMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6MDAnLAogICAgICAgICAgICAgICAgJEdldFBhcmFte01vdmVUaW1lWWVhcn0sCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17TW92ZVRpbWVNb250aH0sCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17TW92ZVRpbWVEYXl9LAogICAgICAgICAgICAgICAgJEdldFBhcmFte01vdmVUaW1lSG91cn0sCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17TW92ZVRpbWVNaW51dGV9OwoKICAgICAgICAgICAgIyBzYW5pdHkgY2hlY2sgb2YgdGhlIGFzc2VtYmxlZCB0aW1lc3RhbXAKICAgICAgICAgICAgJE5ld1RpbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpLT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkUGxhbm5lZFRpbWUsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkTmV3VGltZSApIHsKICAgICAgICAgICAgICAgICRWYWxpZGF0aW9uRXJyb3J7TW92ZVRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgd2hldGhlciBhIHRlbXBsYXRlIHdhcyBzZWxlY3RlZAogICAgICAgIGlmICggISRHZXRQYXJhbXtUZW1wbGF0ZUlEfSApIHsKICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntUZW1wbGF0ZUlEU2VydmVyRXJyb3J9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgIGlmICggISVWYWxpZGF0aW9uRXJyb3IgKSB7CgogICAgICAgICAgICAjIGNyZWF0ZSBjaGFuZ2UgYmFzZWQgb24gdGhlIHRlbXBsYXRlCiAgICAgICAgICAgIG15ICRDaGFuZ2VJRCA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVEZVNlcmlhbGl6ZSgKICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgICAgICA9PiAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGVtcGxhdGVJRCcgKSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBOZXdUaW1lSW5FcG9jaGUgPT4gJE5ld1RpbWUsCiAgICAgICAgICAgICAgICBNb3ZlVGltZVR5cGUgICAgPT4gJEdldFBhcmFte01vdmVUaW1lVHlwZX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoYW5nZSBjb3VsZCBub3QgYmUgY3JlYXRlZAogICAgICAgICAgICBpZiAoICEkQ2hhbmdlSUQgKSB7CgogICAgICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UsIHdoZW4gYWRkaW5nIGZhaWxlZAogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdXYXMgbm90IGFibGUgdG8gY3JlYXRlIGNoYW5nZSBmcm9tIHRlbXBsYXRlIScpLAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaWYgdGhlIGNoYW5nZSBhZGQgbWFzayB3YXMgY2FsbGVkIGZyb20gdGhlIHRpY2tldCB6b29tCiAgICAgICAgICAgIGlmICggJEdldFBhcmFte1RpY2tldElEfSApIHsKCiAgICAgICAgICAgICAgICAjIGxpbmsgdGlja2V0IHdpdGggbmV3bHkgY3JlYXRlZCBjaGFuZ2UKICAgICAgICAgICAgICAgIG15ICRMaW5rU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JyktPkxpbmtBZGQoCiAgICAgICAgICAgICAgICAgICAgU291cmNlT2JqZWN0ID0+ICdUaWNrZXQnLAogICAgICAgICAgICAgICAgICAgIFNvdXJjZUtleSAgICA9PiAkR2V0UGFyYW17VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIFRhcmdldE9iamVjdCA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgICAgICAgICAgICAgVGFyZ2V0S2V5ICAgID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBsaW5rIGNvdWxkIG5vdCBiZSBhZGRlZAogICAgICAgICAgICAgICAgaWYgKCAhJExpbmtTdWNjZXNzICkgewoKICAgICAgICAgICAgICAgICAgICAjIHNldCBlcnJvciBtZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgbXkgJE1lc3NhZ2UgPSAiQ2hhbmdlIHdpdGggQ2hhbmdlSUQgJENoYW5nZUlEIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQsICIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiYnV0IGEgbGluayB0byBUaWNrZXQgd2l0aCBUaWNrZXRJRCAkR2V0UGFyYW17VGlja2V0SUR9IGNvdWxkIG5vdCBiZSBjcmVhdGVkISI7CgogICAgICAgICAgICAgICAgICAgICMgbG9nIGVycm9yCiAgICAgICAgICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIHNob3cgZXJyb3IgbWVzc2FnZQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVkaXJlY3QgdG8gem9vbSBtYXNrLCB3aGVuIGFkZGluZyB3YXMgc3VjY2Vzc2Z1bAogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9JENoYW5nZUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBidWlsZCB0ZW1wbGF0ZSBkcm9wZG93bgogICAgbXkgJFRlbXBsYXRlTGlzdCA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVMaXN0KAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIENvbW1lbnRMZW5ndGggPT4gMTUsCiAgICAgICAgVGVtcGxhdGVUeXBlICA9PiAnSVRTTUNoYW5nZScsCiAgICApOwogICAgbXkgJFRlbXBsYXRlU2VsZWN0aW9uU3RyaW5nID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdUZW1wbGF0ZUlEJywKICAgICAgICBEYXRhICAgICAgICAgPT4gJFRlbXBsYXRlTGlzdCwKICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZSBWYWxpZGF0ZV9SZXF1aXJlZCAnIC4gKCAkVmFsaWRhdGlvbkVycm9ye1RlbXBsYXRlSURTZXJ2ZXJFcnJvcn0gfHwgJycgKSwKICAgICAgICBUcmVlVmlldyAgICAgPT4gMSwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICk7CgogICAgIyBidWlsZCBkcm9wLWRvd24gd2l0aCB0aW1lIHR5cGVzCiAgICBteSAkTW92ZVRpbWVUeXBlU2VsZWN0aW9uU3RyaW5nID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgTmFtZSA9PiAnTW92ZVRpbWVUeXBlJywKICAgICAgICBEYXRhID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJ1BsYW5uZWRTdGFydFRpbWUnLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJ1BsYW5uZWRTdGFydFRpbWUnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICdQbGFubmVkRW5kVGltZScsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnUGxhbm5lZEVuZFRpbWUnCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbXtNb3ZlVGltZVR5cGV9IHx8ICdQbGFubmVkU3RhcnRUaW1lJywKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUgVmFsaWRhdGVfUmVxdWlyZWQgJyAuICggJFZhbGlkYXRpb25FcnJvcntNb3ZlVGltZVR5cGVJbnZhbGlkfSB8fCAnJyApLAogICAgKTsKCiAgICAjIHRpbWUgcGVyaW9kIHRoYXQgY2FuIGJlIHNlbGVjdGVkIGZyb20gdGhlIEdVSQogICAgbXkgJVRpbWVQZXJpb2QgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Xb3JrT3JkZXI6OlRpbWVQZXJpb2QnKSB9OwoKICAgICMgYWRkIHNlbGVjdGlvbiBmb3IgdGhlIHRpbWUKICAgIG15ICRNb3ZlVGltZVNlbGVjdGlvblN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgRm9ybWF0ICAgICAgICA9PiAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgUHJlZml4ICAgICAgICA9PiAnTW92ZVRpbWUnLAogICAgICAgIE1vdmVUaW1lQ2xhc3MgPT4gJ1ZhbGlkYXRlX1JlcXVpcmVkICcgLiAoICRWYWxpZGF0aW9uRXJyb3J7TW92ZVRpbWVJbnZhbGlkfSB8fCAnJyApLAogICAgICAgIFZhbGlkYXRlICAgICAgPT4gMSwKICAgICAgICAlVGltZVBlcmlvZCwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgIFRpdGxlID0+ICdBZGQnLAogICAgKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICMgZ2V0IGZvcm0gaWQKICAgICRTZWxmLT57Rm9ybUlEfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGb3JtSUQnICk7CgogICAgIyBjcmVhdGUgZm9ybSBpZAogICAgaWYgKCAhJFNlbGYtPntGb3JtSUR9ICkgewogICAgICAgICRTZWxmLT57Rm9ybUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlJyktPkZvcm1JRENyZWF0ZSgpOwogICAgfQoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNoYW5nZUFkZEZyb21UZW1wbGF0ZScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVWYWxpZGF0aW9uRXJyb3IsCiAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgIFRlbXBsYXRlU2VsZWN0aW9uU3RyaW5nICAgICA9PiAkVGVtcGxhdGVTZWxlY3Rpb25TdHJpbmcsCiAgICAgICAgICAgIE1vdmVUaW1lVHlwZVNlbGVjdGlvblN0cmluZyA9PiAkTW92ZVRpbWVUeXBlU2VsZWN0aW9uU3RyaW5nLAogICAgICAgICAgICBNb3ZlVGltZVNlbGVjdGlvblN0cmluZyAgICAgPT4gJE1vdmVUaW1lU2VsZWN0aW9uU3RyaW5nLAogICAgICAgIH0sCiAgICApOwoKICAgICMgYWRkIGZvb3RlcgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VDQUJUZW1wbGF0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IG5lZWRlZCBDaGFuZ2VJRAogICAgbXkgJENoYW5nZUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NoYW5nZUlEJyApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRDaGFuZ2VJRCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBDaGFuZ2VJRCBpcyBnaXZlbiEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBjaGVjayBwZXJtaXNzaW9ucwogICAgbXkgJEFjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgVHlwZSAgICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgQWN0aW9uICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZXJyb3Igc2NyZWVuCiAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJ1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIScsICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259CiAgICAgICAgICAgICksCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2UKICAgIG15ICRDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRDaGFuZ2UgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ05vIGNoYW5nZSBmb3VuZCBmb3IgY2hhbmdlSUQgJXMuJywgJENoYW5nZUlEICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgc3RvcmUgbmVlZGVkIHBhcmFtZXRlcnMgaW4gJUdldFBhcmFtIHRvIG1ha2UgaXQgcmVsb2FkYWJsZQogICAgbXkgJUdldFBhcmFtOwogICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KFRlbXBsYXRlTmFtZSBDb21tZW50IFZhbGlkSUQpKSB7CiAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwogICAgfQoKICAgICMgcmV0dXJuIFNlcnZlckVycm9yIGNsYXNzIHdoZW4gbmVlZGVkCiAgICBteSAlU2VydmVyRXJyb3I7CgogICAgIyBhZGQgYSB0ZW1wbGF0ZQogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FkZFRlbXBsYXRlJyApIHsKCiAgICAgICAgIyBjaGVjayB2YWxpZGl0eSBvZiB0aGUgdGVtcGxhdGUgbmFtZQogICAgICAgIGlmICggISRHZXRQYXJhbXtUZW1wbGF0ZU5hbWV9ICkgewogICAgICAgICAgICAkU2VydmVyRXJyb3J7VGVtcGxhdGVOYW1lU2VydmVyRXJyb3J9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgIGlmICggISVTZXJ2ZXJFcnJvciApIHsKCiAgICAgICAgICAgICMgZ2V0IHRlbXBsYXRlIG9iamVjdAogICAgICAgICAgICBteSAkVGVtcGxhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6VGVtcGxhdGUnKTsKCiAgICAgICAgICAgICMgc2VyaWFsaXplIHRoZSBjaGFuZ2UKICAgICAgICAgICAgbXkgJFRlbXBsYXRlQ29udGVudCA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVTZXJpYWxpemUoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZVR5cGUgPT4gJ0NBQicsCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlCiAgICAgICAgICAgIGlmICggISRUZW1wbGF0ZUNvbnRlbnQgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgQ0FCIG9mIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLicsICRDaGFuZ2VJRAogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzdG9yZSB0aGUgc2VyaWFsaXplZCBjaGFuZ2UKICAgICAgICAgICAgbXkgJFRlbXBsYXRlSUQgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlQWRkKAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRHZXRQYXJhbXtUZW1wbGF0ZU5hbWV9LAogICAgICAgICAgICAgICAgQ29tbWVudCAgICAgID0+ICRHZXRQYXJhbXtDb21tZW50fSwKICAgICAgICAgICAgICAgIFZhbGlkSUQgICAgICA9PiAkR2V0UGFyYW17VmFsaWRJRH0sCiAgICAgICAgICAgICAgICBUZW1wbGF0ZVR5cGUgPT4gJ0NBQicsCiAgICAgICAgICAgICAgICBDb250ZW50ICAgICAgPT4gJFRlbXBsYXRlQ29udGVudCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNob3cgZXJyb3IgbWVzc2FnZQogICAgICAgICAgICBpZiAoICEkVGVtcGxhdGVJRCApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnQ291bGQgbm90IGFkZCB0aGUgdGVtcGxhdGUuJyksCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBldmVyeXRoaW5nIHdlbnQgd2VsbCwgcmVkaXJlY3QgdG8gem9vbSBtYXNrCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zO0NoYW5nZUlEPSRDaGFuZ2VJRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICBUaXRsZSA9PiBUcmFuc2xhdGFibGUoJ1RlbXBsYXRlJyksCiAgICAgICAgVHlwZSAgPT4gJ1NtYWxsJywKICAgICk7CgogICAgIyBnZXQgdmFsaWQgb2JqZWN0CiAgICBteSAkVmFsaWRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKTsKCiAgICBteSAkVmFsaWRTZWxlY3Rpb25TdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJFZhbGlkT2JqZWN0LT5WYWxpZExpc3QoKSwKICAgICAgICB9LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1ZhbGlkSUQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJEdldFBhcmFte1ZhbGlkSUR9IHx8ICggJFZhbGlkT2JqZWN0LT5WYWxpZElEc0dldCgpIClbMF0sCiAgICAgICAgU29ydCAgICAgICA9PiAnTnVtZXJpY0tleScsCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNQ2hhbmdlQ0FCVGVtcGxhdGUnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgJVNlcnZlckVycm9yLAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgICAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFZhbGlkU2VsZWN0aW9uU3RyaW5nID0+ICRWYWxpZFNlbGVjdGlvblN0cmluZywKICAgICAgICAgICAgQ2hhbmdlTnVtYmVyICAgICAgICAgPT4gJENoYW5nZS0+e0NoYW5nZU51bWJlcn0sCiAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICAgICAgID0+ICRDaGFuZ2UtPntDaGFuZ2VUaXRsZX0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9vdGVyCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlciggVHlwZSA9PiAnU21hbGwnICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VDb25kaXRpb247Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIHN0b3JlIG5lZWRlZCBwYXJhbWV0ZXJzIGluICVHZXRQYXJhbSB0byBtYWtlIHRoaXMgcGFnZSByZWxvYWRhYmxlCiAgICBteSAlR2V0UGFyYW07CiAgICBmb3IgbXkgJFBhcmFtTmFtZSAocXcoQ2hhbmdlSUQgQ29uZGl0aW9uSUQgQWRkQ29uZGl0aW9uKSkgewogICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbU5hbWUgKTsKICAgIH0KCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkR2V0UGFyYW17Q2hhbmdlSUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIENoYW5nZUlEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJENoYW5nZU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgQ2hhbmdlSUQgPT4gJEdldFBhcmFte0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZXJyb3Igc2NyZWVuCiAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJ1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIScsICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259CiAgICAgICAgICAgICksCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2UgZGF0YQogICAgbXkgJENoYW5nZURhdGEgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJEdldFBhcmFte0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgaWYgY2hhbmdlIGlzIGZvdW5kCiAgICBpZiAoICEkQ2hhbmdlRGF0YSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnLCAkR2V0UGFyYW17Q2hhbmdlSUR9ICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgIG15ICVWYWxpZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CgogICAgIyBhZGQgY29uZGl0aW9uIGJ1dHRvbiB3YXMgcHJlc3NlZAogICAgaWYgKCAkR2V0UGFyYW17QWRkQ29uZGl0aW9ufSApIHsKCiAgICAgICAgIyByZWRpcmVjdCB0byBjb25kaXRpb24gZWRpdCBtYXNrCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PgogICAgICAgICAgICAgICAgIkFjdGlvbj1BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0O0NoYW5nZUlEPSRHZXRQYXJhbXtDaGFuZ2VJRH07Q29uZGl0aW9uSUQ9TkVXIiwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNvbmRpdGlvbiBvYmplY3QKICAgIG15ICRDb25kaXRpb25PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicpOwoKICAgICMgZ2V0IGFsbCBjb25kaXRpb24gaWRzIGZvciB0aGUgZ2l2ZW4gY2hhbmdlIGlkLCBpbmNsdWRpbmcgaW52YWxpZCBjb25kaXRpb25zCiAgICBteSAkQ29uZGl0aW9uSURzUmVmID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uTGlzdCgKICAgICAgICBDaGFuZ2VJRCA9PiAkR2V0UGFyYW17Q2hhbmdlSUR9LAogICAgICAgIFZhbGlkICAgID0+IDAsCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGlmIGEgY29uZGl0aW9uIHNob3VsZCBiZSBkZWxldGVkCiAgICBmb3IgbXkgJENvbmRpdGlvbklEICggQHskQ29uZGl0aW9uSURzUmVmfSApIHsKICAgICAgICBpZiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdEZWxldGVDb25kaXRpb25JRDo6JyAuICRDb25kaXRpb25JRCApICkgewoKICAgICAgICAgICAgIyBkZWxldGUgdGhlIGNvbmRpdGlvbgogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRDb25kaXRpb25PYmplY3QtPkNvbmRpdGlvbkRlbGV0ZSgKICAgICAgICAgICAgICAgIENvbmRpdGlvbklEID0+ICRDb25kaXRpb25JRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDb3VsZCBub3QgZGVsZXRlIENvbmRpdGlvbklEICVzIScsICRDb25kaXRpb25JRCApLAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVkaXJlY3QgdG8gb3ZlcnZpZXcKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07Q2hhbmdlSUQ9JEdldFBhcmFte0NoYW5nZUlEfSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb25seSBzaG93IHRoZSB0YWJsZSBoZWFkbGluZSBpZiB0aGVyZSBjb25kaXRpb25zIHRvIGJlIHNob3duCiAgICBpZiAoIEB7JENvbmRpdGlvbklEc1JlZn0gKSB7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAleyRDaGFuZ2VEYXRhfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIGZvciBteSAkQ29uZGl0aW9uSUQgKCBAeyRDb25kaXRpb25JRHNSZWZ9ICkgewoKICAgICAgICAjIGdldCBjb25kaXRpb24gZGF0YQogICAgICAgIG15ICRDb25kaXRpb25EYXRhID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uR2V0KAogICAgICAgICAgICBDb25kaXRpb25JRCA9PiAkQ29uZGl0aW9uSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldyByb3cKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSb3cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFZhbGlkID0+ICRWYWxpZExpc3R7ICRDb25kaXRpb25EYXRhLT57VmFsaWRJRH0gfSwKICAgICAgICAgICAgICAgICV7JENvbmRpdGlvbkRhdGF9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgIFRpdGxlID0+IFRyYW5zbGF0YWJsZSgnT3ZlcnZpZXcnKSwKICAgICAgICBUeXBlICA9PiAnU21hbGwnLAogICAgKTsKCiAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudElUU01DaGFuZ2VDb25kaXRpb24nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXskQ2hhbmdlRGF0YX0sCiAgICAgICAgfSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlciggVHlwZSA9PiAnU21hbGwnICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBzdG9yZSBuZWVkZWQgcGFyYW1ldGVycyBpbiAlR2V0UGFyYW0KICAgIG15ICVHZXRQYXJhbTsKICAgIGZvciBteSAkUGFyYW1OYW1lICgKICAgICAgICBxdygKICAgICAgICBDaGFuZ2VJRCBDb25kaXRpb25JRCBOYW1lIENvbW1lbnQgRXhwcmVzc2lvbkNvbmp1bmN0aW9uIFZhbGlkSUQgRGVsZXRlRXhwcmVzc2lvbklEIERlbGV0ZUFjdGlvbklECiAgICAgICAgU2F2ZSBBZGRBY3Rpb24gQWRkRXhwcmVzc2lvbiBOZXdFeHByZXNzaW9uIE5ld0FjdGlvbiBFbGVtZW50Q2hhbmdlZCBVcGRhdGVEaXZOYW1lKQogICAgICAgICkKICAgIHsKICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KENoYW5nZUlEIENvbmRpdGlvbklEKSkgewogICAgICAgIGlmICggISRHZXRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ05vICVzIGlzIGdpdmVuIScsICROZWVkZWQgKSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJENoYW5nZU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgQ2hhbmdlSUQgPT4gJEdldFBhcmFte0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZXJyb3Igc2NyZWVuCiAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJ1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIScsICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259CiAgICAgICAgICAgICksCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2UgZGF0YQogICAgbXkgJENoYW5nZURhdGEgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJEdldFBhcmFte0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgaWYgY2hhbmdlIGV4aXN0cwogICAgaWYgKCAhJENoYW5nZURhdGEgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJEdldFBhcmFte0NoYW5nZUlEfSApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB2YWxpZCBvYmplY3QKICAgIG15ICRWYWxpZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpOwoKICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgIG15ICVWYWxpZExpc3QgPSAkVmFsaWRPYmplY3QtPlZhbGlkTGlzdCgpOwoKICAgIG15ICRFeHByZXNzaW9uSURzUmVmID0gW107CiAgICBteSAkQWN0aW9uSURzUmVmICAgICA9IFtdOwoKICAgICMgZ2V0IGNvbmRpdGlvbiBvYmplY3QKICAgIG15ICRDb25kaXRpb25PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicpOwoKICAgICMgb25seSBnZXQgZXhwcmVzc2lvbiBsaXN0IGFuZCBhY3Rpb24gbGlzdCBpZiBjb25kaXRpb24gZXhpc3RzIGFscmVhZHkKICAgIGlmICggJEdldFBhcmFte0NvbmRpdGlvbklEfSBuZSAnTkVXJyApIHsKCiAgICAgICAgIyBnZXQgYWxsIGV4cHJlc3Npb24gaWRzIGZvciB0aGUgZ2l2ZW4gY29uZGl0aW9uIGlkCiAgICAgICAgJEV4cHJlc3Npb25JRHNSZWYgPSAkQ29uZGl0aW9uT2JqZWN0LT5FeHByZXNzaW9uTGlzdCgKICAgICAgICAgICAgQ29uZGl0aW9uSUQgPT4gJEdldFBhcmFte0NvbmRpdGlvbklEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGFsbCBhY3Rpb24gaWRzIGZvciB0aGUgZ2l2ZW4gY29uZGl0aW9uIGlkCiAgICAgICAgJEFjdGlvbklEc1JlZiA9ICRDb25kaXRpb25PYmplY3QtPkFjdGlvbkxpc3QoCiAgICAgICAgICAgIENvbmRpdGlvbklEID0+ICRHZXRQYXJhbXtDb25kaXRpb25JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgUmVtZW1iZXIgdGhlIHJlYXNvbiB3aHkgc2F2aW5nIHdhcyBub3QgYXR0ZW1wdGVkLgogICAgIyBUaGVzZSBlbnRyaWVzIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGR0bCB2YWxpZGF0aW9uIGVycm9yIGJsb2Nrcy4KICAgIG15IEBWYWxpZGF0aW9uRXJyb3JzOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNvbmRpdGlvbiBzYXZlIChhbHNvIGFkZC9kZWxldGUgZXhwcmVzc2lvbiBhbmQgYWRkL2RlbGV0ZSBhY3Rpb24pCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NhdmUnICkgewoKICAgICAgICAjIHVwZGF0ZSBvbmx5IGlmIENvbmRpdGlvbk5hbWUgaXMgZ2l2ZW4KICAgICAgICBpZiAoICEkR2V0UGFyYW17TmFtZX0gKSB7CiAgICAgICAgICAgICRQYXJhbXtJbnZhbGlkTmFtZX0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICBwdXNoIEBWYWxpZGF0aW9uRXJyb3JzLCAnSW52YWxpZE5hbWUnOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiBjb25kaXRpb24gbmFtZSBpcyBhbHJlYWR5IHVzZWQKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgY29uZGl0aW9uIG5hbWUgZXhpc3RzIGFscmVhZHkgZm9yIHRoaXMgY2hhbmdlCiAgICAgICAgICAgIG15ICRDb25kaXRpb25JRCA9ICRDb25kaXRpb25PYmplY3QtPkNvbmRpdGlvbkxvb2t1cCgKICAgICAgICAgICAgICAgIE5hbWUgICAgID0+ICRHZXRQYXJhbXtOYW1lfSwKICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRHZXRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGl0IGlzIG9ubHkgYW4gZXJyb3IgaWYgYW5vdGhlciBjb25kaXRpb24gb2YgdGhpcyBjaGFuZ2UgdXNlcyB0aGlzIG5hbWUKICAgICAgICAgICAgIyBjaGFuZ2luZyB0aGUgbmFtZSBvZiBhIGNvbmRpdGlvbiBpcyBzdGlsbCBwb3NzaWJsZQogICAgICAgICAgICBpZiAoICRDb25kaXRpb25JRCAmJiAoICRHZXRQYXJhbXtDb25kaXRpb25JRH0gbmUgJENvbmRpdGlvbklEICkgKSB7CiAgICAgICAgICAgICAgICAkUGFyYW17RHVwbGljYXRlTmFtZX0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgcHVzaCBAVmFsaWRhdGlvbkVycm9ycywgJ0R1cGxpY2F0ZU5hbWUnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGlmIGFsbCBwYXNzZWQgZGF0YSBpcyB2YWxpZAogICAgICAgIGlmICggIUBWYWxpZGF0aW9uRXJyb3JzICkgewoKICAgICAgICAgICAgIyBhZGQgYSBuZXcgY29uZGl0aW9uCiAgICAgICAgICAgIGlmICggJEdldFBhcmFte0NvbmRpdGlvbklEfSBlcSAnTkVXJyApIHsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBhIG5ldyBjb25kaXRpb24KICAgICAgICAgICAgICAgICRHZXRQYXJhbXtDb25kaXRpb25JRH0gPSAkQ29uZGl0aW9uT2JqZWN0LT5Db25kaXRpb25BZGQoCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgICAgICAgID0+ICRHZXRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgID0+ICRHZXRQYXJhbXtOYW1lfSwKICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uQ29uanVuY3Rpb24gPT4gJEdldFBhcmFte0V4cHJlc3Npb25Db25qdW5jdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICAgID0+ICRHZXRQYXJhbXtDb21tZW50fSwKICAgICAgICAgICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgICAgPT4gJEdldFBhcmFte1ZhbGlkSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtDb25kaXRpb25JRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdDb3VsZCBub3QgY3JlYXRlIG5ldyBjb25kaXRpb24hJyksCiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB1cGRhdGUgYW4gZXhpc3RpbmcgY29uZGl0aW9uCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgdXBkYXRlIHRoZSBjb25kaXRpb24KICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uVXBkYXRlKAogICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbklEICAgICAgICAgICA9PiAkR2V0UGFyYW17Q29uZGl0aW9uSUR9LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICA9PiAkR2V0UGFyYW17TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbkNvbmp1bmN0aW9uID0+ICRHZXRQYXJhbXtFeHByZXNzaW9uQ29uanVuY3Rpb259LAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgICA9PiAkR2V0UGFyYW17Q29tbWVudH0sCiAgICAgICAgICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICAgID0+ICRHZXRQYXJhbXtWYWxpZElEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ291bGQgbm90IHVwZGF0ZSBDb25kaXRpb25JRCAlcyEnLCAkR2V0UGFyYW17Q29uZGl0aW9uSUR9CiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzYXZlIGFsbCBleGlzdGluZyBleHByZXNzaW9uIGZpZWxkcwogICAgICAgICAgICBmb3IgbXkgJEV4cHJlc3Npb25JRCAoIEB7JEV4cHJlc3Npb25JRHNSZWZ9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IGV4cHJlc3Npb24gZmllbGRzCiAgICAgICAgICAgICAgICBteSAlRXhwcmVzc2lvbkRhdGE7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEZpZWxkIChxdyhPYmplY3RJRCBTZWxlY3RvciBBdHRyaWJ1dGVJRCBPcGVyYXRvcklEIENvbXBhcmVWYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAkRXhwcmVzc2lvbkRhdGF7JEZpZWxkfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oCiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtID0+ICdFeHByZXNzaW9uSUQtJyAuICRFeHByZXNzaW9uSUQgLiAnLScgLiAkRmllbGQsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIGV4aXN0aW5nIGV4cHJlc3Npb24gaXMgY29tcGxldGUKICAgICAgICAgICAgICAgICMgKGFsbCByZXF1aXJlZCBmaWVsZHMgbXVzdCBiZSBmaWxsZWQsIENvbXBhcmVWYWx1ZSBjYW4gYmUgZW1wdHkpCiAgICAgICAgICAgICAgICBteSAkRmllbGRzT2sgPSAxOwogICAgICAgICAgICAgICAgRklFTEQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEZpZWxkIChxdyhPYmplY3RJRCBTZWxlY3RvciBBdHRyaWJ1dGVJRCBPcGVyYXRvcklEKSkgewoKICAgICAgICAgICAgICAgICAgICAjIG5ldyBleHByZXNzaW9uIGlzIG5vdCBjb21wbGV0ZQogICAgICAgICAgICAgICAgICAgIGlmICggISRFeHByZXNzaW9uRGF0YXskRmllbGR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRmllbGRzT2sgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBsYXN0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHVwZGF0ZSBleGlzdGluZyBleHByZXNzaW9uIG9ubHkgaWYgYWxsIGZpZWxkcyBhcmUgY29tcGxldGUKICAgICAgICAgICAgICAgIGlmICgkRmllbGRzT2spIHsKCiAgICAgICAgICAgICAgICAgICAgIyB1cGRhdGUgdGhlIGV4cHJlc3Npb24KICAgICAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRDb25kaXRpb25PYmplY3QtPkV4cHJlc3Npb25VcGRhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb25JRCA9PiAkRXhwcmVzc2lvbklELAogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RJRCAgICAgPT4gJEV4cHJlc3Npb25EYXRhe09iamVjdElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlSUQgID0+ICRFeHByZXNzaW9uRGF0YXtBdHRyaWJ1dGVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdG9ySUQgICA9PiAkRXhwcmVzc2lvbkRhdGF7T3BlcmF0b3JJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgICA9PiAkRXhwcmVzc2lvbkRhdGF7U2VsZWN0b3J9LAogICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJlVmFsdWUgPT4gZGVmaW5lZCAkRXhwcmVzc2lvbkRhdGF7Q29tcGFyZVZhbHVlfQogICAgICAgICAgICAgICAgICAgICAgICA/ICRFeHByZXNzaW9uRGF0YXtDb21wYXJlVmFsdWV9CiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgICAgICAgICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ291bGQgbm90IHVwZGF0ZSBFeHByZXNzaW9uSUQgJXMhJywgJEV4cHJlc3Npb25JRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IG5ldyBleHByZXNzaW9uIGZpZWxkcwogICAgICAgICAgICBteSAlRXhwcmVzc2lvbkRhdGE7CiAgICAgICAgICAgIGZvciBteSAkRmllbGQgKHF3KE9iamVjdElEIFNlbGVjdG9yIEF0dHJpYnV0ZUlEIE9wZXJhdG9ySUQgQ29tcGFyZVZhbHVlKSkgewogICAgICAgICAgICAgICAgJEV4cHJlc3Npb25EYXRheyRGaWVsZH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKAogICAgICAgICAgICAgICAgICAgIFBhcmFtID0+ICdFeHByZXNzaW9uSUQtTkVXLScgLiAkRmllbGQsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGlmIG5ldyBleHByZXNzaW9uIGlzIGNvbXBsZXRlCiAgICAgICAgICAgICMgKGFsbCByZXF1aXJlZCBmaWVsZHMgbXVzdCBiZSBmaWxsZWQsIENvbXBhcmVWYWx1ZSBjYW4gYmUgZW1wdHkpCiAgICAgICAgICAgIG15ICRGaWVsZHNPayA9IDE7CiAgICAgICAgICAgIEZJRUxEOgogICAgICAgICAgICBmb3IgbXkgJEZpZWxkIChxdyhPYmplY3RJRCBTZWxlY3RvciBBdHRyaWJ1dGVJRCBPcGVyYXRvcklEKSkgewoKICAgICAgICAgICAgICAgICMgbmV3IGV4cHJlc3Npb24gaXMgbm90IGNvbXBsZXRlCiAgICAgICAgICAgICAgICBpZiAoICEkRXhwcmVzc2lvbkRhdGF7JEZpZWxkfSApIHsKICAgICAgICAgICAgICAgICAgICAkRmllbGRzT2sgPSAwOwogICAgICAgICAgICAgICAgICAgIGxhc3QgRklFTEQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIG5ldyBleHByZXNzaW9uCiAgICAgICAgICAgIGlmICgkRmllbGRzT2spIHsKCiAgICAgICAgICAgICAgICAjIGFkZCBuZXcgZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgbXkgJEV4cHJlc3Npb25JRCA9ICRDb25kaXRpb25PYmplY3QtPkV4cHJlc3Npb25BZGQoCiAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uSUQgID0+ICRHZXRQYXJhbXtDb25kaXRpb25JRH0sCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgID0+ICRFeHByZXNzaW9uRGF0YXtPYmplY3RJRH0sCiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlSUQgID0+ICRFeHByZXNzaW9uRGF0YXtBdHRyaWJ1dGVJRH0sCiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JJRCAgID0+ICRFeHByZXNzaW9uRGF0YXtPcGVyYXRvcklEfSwKICAgICAgICAgICAgICAgICAgICBTZWxlY3RvciAgICAgPT4gJEV4cHJlc3Npb25EYXRhe1NlbGVjdG9yfSwKICAgICAgICAgICAgICAgICAgICBDb21wYXJlVmFsdWUgPT4gZGVmaW5lZCAkRXhwcmVzc2lvbkRhdGF7Q29tcGFyZVZhbHVlfQogICAgICAgICAgICAgICAgICAgID8gJEV4cHJlc3Npb25EYXRhe0NvbXBhcmVWYWx1ZX0KICAgICAgICAgICAgICAgICAgICA6ICcnLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICAgICAgICAgIGlmICggISRFeHByZXNzaW9uSUQgKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnQ291bGQgbm90IGFkZCBuZXcgRXhwcmVzc2lvbiEnKSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2F2ZSBhbGwgZXhpc3RpbmcgYWN0aW9uIGZpZWxkcwogICAgICAgICAgICBmb3IgbXkgJEFjdGlvbklEICggQHskQWN0aW9uSURzUmVmfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBhY3Rpb24gZmllbGRzCiAgICAgICAgICAgICAgICBteSAlQWN0aW9uRGF0YTsKICAgICAgICAgICAgICAgIGZvciBteSAkRmllbGQgKHF3KE9iamVjdElEIFNlbGVjdG9yIEF0dHJpYnV0ZUlEIE9wZXJhdG9ySUQgQWN0aW9uVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgJEFjdGlvbkRhdGF7JEZpZWxkfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oCiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtID0+ICdBY3Rpb25JRC0nIC4gJEFjdGlvbklEIC4gJy0nIC4gJEZpZWxkLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiBleGlzdGluZyBhY3Rpb24gaXMgY29tcGxldGUKICAgICAgICAgICAgICAgICMgKGFsbCByZXF1aXJlZCBmaWVsZHMgbXVzdCBiZSBmaWxsZWQsIEFjdGlvblZhbHVlIGNhbiBiZSBlbXB0eSkKICAgICAgICAgICAgICAgIG15ICRGaWVsZHNPayA9IDE7CiAgICAgICAgICAgICAgICBGSUVMRDoKICAgICAgICAgICAgICAgIGZvciBteSAkRmllbGQgKHF3KE9iamVjdElEIFNlbGVjdG9yIEF0dHJpYnV0ZUlEIE9wZXJhdG9ySUQpKSB7CgogICAgICAgICAgICAgICAgICAgICMgbmV3IGFjdGlvbiBpcyBub3QgY29tcGxldGUKICAgICAgICAgICAgICAgICAgICBpZiAoICEkQWN0aW9uRGF0YXskRmllbGR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRmllbGRzT2sgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBsYXN0IEZJRUxEOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHVwZGF0ZSBleGlzdGluZyBhY3Rpb24gb25seSBpZiBhbGwgZmllbGRzIGFyZSBjb21wbGV0ZQogICAgICAgICAgICAgICAgaWYgKCRGaWVsZHNPaykgewoKICAgICAgICAgICAgICAgICAgICAjIHVwZGF0ZSB0aGUgYWN0aW9uCiAgICAgICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ29uZGl0aW9uT2JqZWN0LT5BY3Rpb25VcGRhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbklEICAgID0+ICRBY3Rpb25JRCwKICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgPT4gJEFjdGlvbkRhdGF7T2JqZWN0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiAkQWN0aW9uRGF0YXtBdHRyaWJ1dGVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdG9ySUQgID0+ICRBY3Rpb25EYXRhe09wZXJhdG9ySUR9LAogICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RvciAgICA9PiAkQWN0aW9uRGF0YXtTZWxlY3Rvcn0sCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvblZhbHVlID0+ICRBY3Rpb25EYXRhe0FjdGlvblZhbHVlfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICAgICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT5UcmFuc2xhdGUoICdDb3VsZCBub3QgdXBkYXRlIEFjdGlvbklEICVzIScsICRBY3Rpb25JRCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgbmV3IGFjdGlvbiBmaWVsZHMKICAgICAgICAgICAgbXkgJUFjdGlvbkRhdGE7CiAgICAgICAgICAgIGZvciBteSAkRmllbGQgKHF3KE9iamVjdElEIFNlbGVjdG9yIEF0dHJpYnV0ZUlEIE9wZXJhdG9ySUQgQWN0aW9uVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAkQWN0aW9uRGF0YXskRmllbGR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSgKICAgICAgICAgICAgICAgICAgICBQYXJhbSA9PiAnQWN0aW9uSUQtTkVXLScgLiAkRmllbGQsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGlmIG5ldyBhY3Rpb24gaXMgY29tcGxldGUKICAgICAgICAgICAgIyAoYWxsIHJlcXVpcmVkIGZpZWxkcyBtdXN0IGJlIGZpbGxlZCwgQWN0aW9uVmFsdWUgY2FuIGJlIGVtcHR5KQogICAgICAgICAgICAkRmllbGRzT2sgPSAxOwogICAgICAgICAgICBGSUVMRDoKICAgICAgICAgICAgZm9yIG15ICRGaWVsZCAocXcoT2JqZWN0SUQgU2VsZWN0b3IgQXR0cmlidXRlSUQgT3BlcmF0b3JJRCkpIHsKCiAgICAgICAgICAgICAgICAjIG5ldyBhY3Rpb24gaXMgbm90IGNvbXBsZXRlCiAgICAgICAgICAgICAgICBpZiAoICEkQWN0aW9uRGF0YXskRmllbGR9ICkgewogICAgICAgICAgICAgICAgICAgICRGaWVsZHNPayA9IDA7CiAgICAgICAgICAgICAgICAgICAgbGFzdCBGSUVMRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhZGQgbmV3IGFjdGlvbgogICAgICAgICAgICBpZiAoJEZpZWxkc09rKSB7CgogICAgICAgICAgICAgICAgIyBhZGQgbmV3IGFjdGlvbgogICAgICAgICAgICAgICAgbXkgJEFjdGlvbklEID0gJENvbmRpdGlvbk9iamVjdC0+QWN0aW9uQWRkKAogICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbklEID0+ICRHZXRQYXJhbXtDb25kaXRpb25JRH0sCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgPT4gJEFjdGlvbkRhdGF7T2JqZWN0SUR9LAogICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+ICRBY3Rpb25EYXRhe0F0dHJpYnV0ZUlEfSwKICAgICAgICAgICAgICAgICAgICBPcGVyYXRvcklEICA9PiAkQWN0aW9uRGF0YXtPcGVyYXRvcklEfSwKICAgICAgICAgICAgICAgICAgICBTZWxlY3RvciAgICA9PiAkQWN0aW9uRGF0YXtTZWxlY3Rvcn0sCiAgICAgICAgICAgICAgICAgICAgQWN0aW9uVmFsdWUgPT4gJEFjdGlvbkRhdGF7QWN0aW9uVmFsdWV9IHx8ICcnLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgICAgICAgICAgaWYgKCAhJEFjdGlvbklEICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0NvdWxkIG5vdCBhZGQgbmV3IEFjdGlvbiEnKSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMganVzdCB0aGUgc2F2ZSBidXR0b24gd2FzIHByZXNzZWQsIHJlZGlyZWN0IHRvIGNvbmRpdGlvbiBvdmVydmlldwogICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtTYXZlfSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbjtDaGFuZ2VJRD0kR2V0UGFyYW17Q2hhbmdlSUR9IiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZXhwcmVzc2lvbiBhZGQgYnV0dG9uIHdhcyBwcmVzc2VkCiAgICAgICAgICAgIGVsc2lmICggJEdldFBhcmFte0FkZEV4cHJlc3Npb259ICkgewoKICAgICAgICAgICAgICAgICMgc2hvdyB0aGUgZWRpdCB2aWV3IGFnYWluLCBidXQgbm93IHdpdGggYSBuZXcgZW1wdHkgZXhwcmVzc2lvbiBsaW5lCiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj1BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0O0NoYW5nZUlEPSRHZXRQYXJhbXtDaGFuZ2VJRH07IgogICAgICAgICAgICAgICAgICAgICAgICAuICJDb25kaXRpb25JRD0kR2V0UGFyYW17Q29uZGl0aW9uSUR9O05ld0V4cHJlc3Npb249MSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFjdGlvbiBhZGQgYnV0dG9uIHdhcyBwcmVzc2VkCiAgICAgICAgICAgIGVsc2lmICggJEdldFBhcmFte0FkZEFjdGlvbn0gKSB7CgogICAgICAgICAgICAgICAgIyBzaG93IHRoZSBlZGl0IHZpZXcgYWdhaW4sIGJ1dCBub3cgd2l0aCBhIG5ldyBlbXB0eSBhY3Rpb24gbGluZQogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdDtDaGFuZ2VJRD0kR2V0UGFyYW17Q2hhbmdlSUR9OyIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiQ29uZGl0aW9uSUQ9JEdldFBhcmFte0NvbmRpdGlvbklEfTtOZXdBY3Rpb249MSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGlmIGFuIGV4cHJlc3Npb24gc2hvdWxkIGJlIGRlbGV0ZWQKICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17RGVsZXRlRXhwcmVzc2lvbklEfSAmJiAkR2V0UGFyYW17RGVsZXRlRXhwcmVzc2lvbklEfSBuZSAnTkVXJyApIHsKCiAgICAgICAgICAgICAgICAjIGRlbGV0ZSB0aGUgZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ29uZGl0aW9uT2JqZWN0LT5FeHByZXNzaW9uRGVsZXRlKAogICAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb25JRCA9PiAkR2V0UGFyYW17RGVsZXRlRXhwcmVzc2lvbklEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBkZWxldGUgRXhwcmVzc2lvbklEICVzIScsICRHZXRQYXJhbXtEZWxldGVFeHByZXNzaW9uSUR9CiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc2hvdyB0aGUgZWRpdCB2aWV3IGFnYWluCiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj1BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0O0NoYW5nZUlEPSRHZXRQYXJhbXtDaGFuZ2VJRH07IgogICAgICAgICAgICAgICAgICAgICAgICAuICJDb25kaXRpb25JRD0kR2V0UGFyYW17Q29uZGl0aW9uSUR9IiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgaWYgYW4gYWN0aW9uIHNob3VsZCBiZSBkZWxldGVkCiAgICAgICAgICAgIGlmICggJEdldFBhcmFte0RlbGV0ZUFjdGlvbklEfSAmJiAkR2V0UGFyYW17RGVsZXRlQWN0aW9uSUR9IG5lICdORVcnICkgewoKICAgICAgICAgICAgICAgICMgZGVsZXRlIHRoZSBhY3Rpb24KICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJENvbmRpdGlvbk9iamVjdC0+QWN0aW9uRGVsZXRlKAogICAgICAgICAgICAgICAgICAgIEFjdGlvbklEID0+ICRHZXRQYXJhbXtEZWxldGVBY3Rpb25JRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBkZWxldGUgQWN0aW9uSUQgJXMhJywgJEdldFBhcmFte0RlbGV0ZUFjdGlvbklEfQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHNob3cgdGhlIGVkaXQgdmlldyBhZ2FpbgogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uRWRpdDtDaGFuZ2VJRD0kR2V0UGFyYW17Q2hhbmdlSUR9OyIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiQ29uZGl0aW9uSUQ9JEdldFBhcmFte0NvbmRpdGlvbklEfSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNob3cgdGhlIGVkaXQgdmlldyBhZ2FpbgogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbkVkaXQ7Q2hhbmdlSUQ9JEdldFBhcmFte0NoYW5nZUlEfTsiCiAgICAgICAgICAgICAgICAgICAgLiAiQ29uZGl0aW9uSUQ9JEdldFBhcmFte0NvbmRpdGlvbklEfSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgaGFuZGxlIEFKQVhVcGRhdGUgKGNoYW5nZSB0aGUgY29udGVudCBvZiBkcm9wZG93bmxpc3RzKQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FKQVhVcGRhdGUnICkgewoKICAgICAgICAjIHRvIHN0b3JlIHRoZSBKU09OIG91dHB1dAogICAgICAgIG15ICRKU09OOwoKICAgICAgICAjIGV4cHJlc3Npb24gb3IgYWN0aW9uIGZpZWxkIHdhcyBjaGFuZ2VkCiAgICAgICAgaWYgKCAkR2V0UGFyYW17RWxlbWVudENoYW5nZWR9ID1+IG17IFxBICggRXhwcmVzc2lvbklEIHwgQWN0aW9uSUQgKSAtICggXGQrIHwgTkVXICkgfXhtcyApCiAgICAgICAgewoKICAgICAgICAgICAgIyBnZXQgaWQgbmFtZSBvZiB0aGUgaW52b2x2ZWQgZWxlbWVudCAoICdFeHByZXNzaW9uSUQnIG9yICdBY3Rpb25JRCcgKQogICAgICAgICAgICBteSAkSUROYW1lID0gJDE7CgogICAgICAgICAgICAjIGdldCBpZCBvZiB0aGUgaW52b2x2ZWQgZWxlbWVudAogICAgICAgICAgICBteSAkSUQgPSAkMjsKCiAgICAgICAgICAgICMgZ2V0IHZhbHVlIGZpZWxkIG5hbWUKICAgICAgICAgICAgbXkgJFZhbHVlRmllbGROYW1lOwogICAgICAgICAgICBpZiAoICRJRE5hbWUgZXEgJ0V4cHJlc3Npb25JRCcgKSB7CiAgICAgICAgICAgICAgICAkVmFsdWVGaWVsZE5hbWUgPSAnQ29tcGFyZVZhbHVlJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRJRE5hbWUgZXEgJ0FjdGlvbklEJyApIHsKICAgICAgICAgICAgICAgICRWYWx1ZUZpZWxkTmFtZSA9ICdBY3Rpb25WYWx1ZSc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IGV4cHJlc3Npb24gb3IgYWN0aW9uIGZpZWxkcwogICAgICAgICAgICBmb3IgbXkgJEZpZWxkIChxdyhPYmplY3RJRCBTZWxlY3RvciBBdHRyaWJ1dGVJRCBPcGVyYXRvcklEIENvbXBhcmVWYWx1ZSBBY3Rpb25WYWx1ZSkpIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXskRmllbGR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSgKICAgICAgICAgICAgICAgICAgICBQYXJhbSA9PiAkSUROYW1lIC4gJy0nIC4gJElEIC4gJy0nIC4gJEZpZWxkLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgb2JqZWN0IHNlbGVjdGlvbiBsaXN0CiAgICAgICAgICAgIG15ICRPYmplY3RMaXN0ID0gJFNlbGYtPl9HZXRPYmplY3RTZWxlY3Rpb24oKTsKCiAgICAgICAgICAgICMgZ2V0IHNlbGVjdG9yIHNlbGVjdGlvbiBsaXN0CiAgICAgICAgICAgIG15ICRTZWxlY3Rvckxpc3QgPSAkU2VsZi0+X0dldFNlbGVjdG9yU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgPT4gJEdldFBhcmFte09iamVjdElEfSwKICAgICAgICAgICAgICAgIENvbmRpdGlvbklEID0+ICRHZXRQYXJhbXtDb25kaXRpb25JRH0sCiAgICAgICAgICAgICAgICAkSUROYW1lICAgICA9PiAkSUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBhdHRyaWJ1dGUgc2VsZWN0aW9uIGxpc3QKICAgICAgICAgICAgbXkgJEF0dHJpYnV0ZUxpc3QgPSAkU2VsZi0+X0dldEF0dHJpYnV0ZVNlbGVjdGlvbigKICAgICAgICAgICAgICAgIE9iamVjdElEID0+ICRHZXRQYXJhbXtPYmplY3RJRH0sCiAgICAgICAgICAgICAgICBTZWxlY3RvciA9PiAkR2V0UGFyYW17U2VsZWN0b3J9LAogICAgICAgICAgICAgICAgJElETmFtZSAgPT4gJElELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgb3BlcmF0b3Igc2VsZWN0aW9uIGxpc3QKICAgICAgICAgICAgbXkgJE9wZXJhdG9yTGlzdCA9ICRTZWxmLT5fR2V0T3BlcmF0b3JTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBPYmplY3RJRCAgICA9PiAkR2V0UGFyYW17T2JqZWN0SUR9LAogICAgICAgICAgICAgICAgQXR0cmlidXRlSUQgPT4gJEdldFBhcmFte0F0dHJpYnV0ZUlEfSwKICAgICAgICAgICAgICAgICRJRE5hbWUgICAgID0+ICRJRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIGFuIGVtcHR5IHNlbGVjdG9yIHNlbGVjdGlvbiBpZiBubyBsaXN0IGlzIGF2YWlsYWJsZSBvciBub3RoaW5nIGlzIHNlbGVjdGVkCiAgICAgICAgICAgIG15ICRQb3NzaWJsZU5vbmVTZWxlY3RvciA9IDA7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICEkU2VsZWN0b3JMaXN0CiAgICAgICAgICAgICAgICB8fCAhcmVmICRTZWxlY3Rvckxpc3QgZXEgJ0hBU0gnCiAgICAgICAgICAgICAgICB8fCAhJXskU2VsZWN0b3JMaXN0fQogICAgICAgICAgICAgICAgfHwgJEdldFBhcmFte0VsZW1lbnRDaGFuZ2VkfSBlcSAkSUROYW1lIC4gJy0nIC4gJElEIC4gJy1PYmplY3RJRCcKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFBvc3NpYmxlTm9uZVNlbGVjdG9yID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhZGQgYW4gZW1wdHkgYXR0cmlidXRlIHNlbGVjdGlvbiBpZiBubyBsaXN0IGlzIGF2YWlsYWJsZSBvciBub3RoaW5nIGlzIHNlbGVjdGVkCiAgICAgICAgICAgIG15ICRQb3NzaWJsZU5vbmVBdHRyaWJ1dGVJRCA9IDA7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICEkQXR0cmlidXRlTGlzdAogICAgICAgICAgICAgICAgfHwgIXJlZiAkQXR0cmlidXRlTGlzdCBlcSAnSEFTSCcKICAgICAgICAgICAgICAgIHx8ICEleyRBdHRyaWJ1dGVMaXN0fQogICAgICAgICAgICAgICAgfHwgJEdldFBhcmFte0VsZW1lbnRDaGFuZ2VkfSBlcSAkSUROYW1lIC4gJy0nIC4gJElEIC4gJy1PYmplY3RJRCcKICAgICAgICAgICAgICAgIHx8ICRHZXRQYXJhbXtFbGVtZW50Q2hhbmdlZH0gZXEgJElETmFtZSAuICctJyAuICRJRCAuICctU2VsZWN0b3InCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRQb3NzaWJsZU5vbmVBdHRyaWJ1dGVJRCA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIGFuIGVtcHR5IG9wZXJhdG9yIHNlbGVjdGlvbiBpZiBubyBsaXN0IGlzIGF2YWlsYWJsZSBvciBub3RoaW5nIGlzIHNlbGVjdGVkCiAgICAgICAgICAgIG15ICRQb3NzaWJsZU5vbmVPcGVyYXRvcklEID0gMDsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgISRPcGVyYXRvckxpc3QKICAgICAgICAgICAgICAgIHx8ICFyZWYgJE9wZXJhdG9yTGlzdCBlcSAnSEFTSCcKICAgICAgICAgICAgICAgIHx8ICEleyRPcGVyYXRvckxpc3R9CiAgICAgICAgICAgICAgICB8fCAkR2V0UGFyYW17RWxlbWVudENoYW5nZWR9IGVxICRJRE5hbWUgLiAnLScgLiAkSUQgLiAnLU9iamVjdElEJwogICAgICAgICAgICAgICAgfHwgJEdldFBhcmFte0VsZW1lbnRDaGFuZ2VkfSBlcSAkSUROYW1lIC4gJy0nIC4gJElEIC4gJy1TZWxlY3RvcicKICAgICAgICAgICAgICAgIHx8ICRHZXRQYXJhbXtFbGVtZW50Q2hhbmdlZH0gZXEgJElETmFtZSAuICctJyAuICRJRCAuICctQXR0cmlidXRlSUQnCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRQb3NzaWJsZU5vbmVPcGVyYXRvcklEID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiBvYmplY3Qgd2FzIGNoYW5nZWQsIHJlc2V0IHRoZSBhdHRyaWJ1dGUgYW5kIG9wZXJhdG9yIGxpc3QKICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17RWxlbWVudENoYW5nZWR9IGVxICRJRE5hbWUgLiAnLScgLiAkSUQgLiAnLU9iamVjdElEJyApIHsKICAgICAgICAgICAgICAgICRBdHRyaWJ1dGVMaXN0ID0ge307CiAgICAgICAgICAgICAgICAkT3BlcmF0b3JMaXN0ICA9IHt9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGJ1aWxkIGpzb24KICAgICAgICAgICAgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbkpTT04oCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJElETmFtZSAuICctJyAuICRJRCAuICctT2JqZWN0SUQnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJE9iamVjdExpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkR2V0UGFyYW17T2JqZWN0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkSUROYW1lIC4gJy0nIC4gJElEIC4gJy1TZWxlY3RvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkU2VsZWN0b3JMaXN0LAogICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBvc3NpYmxlTm9uZVNlbGVjdG9yID8gJycgOiAkR2V0UGFyYW17U2VsZWN0b3J9LAogICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gJFBvc3NpYmxlTm9uZVNlbGVjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRJRE5hbWUgLiAnLScgLiAkSUQgLiAnLUF0dHJpYnV0ZUlEJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRBdHRyaWJ1dGVMaXN0LAogICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJEdldFBhcmFte0F0dHJpYnV0ZUlEfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+ICRQb3NzaWJsZU5vbmVBdHRyaWJ1dGVJRCwKICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkSUROYW1lIC4gJy0nIC4gJElEIC4gJy1PcGVyYXRvcklEJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRPcGVyYXRvckxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkR2V0UGFyYW17T3BlcmF0b3JJRH0gfHwgJycsCiAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAkUG9zc2libGVOb25lT3BlcmF0b3JJRCwKICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHJldHVybiBqc29uCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PScgLiAkTGF5b3V0T2JqZWN0LT57Q2hhcnNldH0sCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRKU09OLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGhhbmRsZSBBSkFYVXBkYXRlIChyZXBsYWNlIHRoZSBmaWVsZCB0eXBlLCBlLmcuIHJlcGxhY2UgYSB0ZXh0IGZpZWxkIHdpdGggYSBzZWxlY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQUpBWENvbnRlbnRVcGRhdGUnICkgewoKICAgICAgICAjIHRvIHN0b3JlIHRoZSBIVE1MIHN0cmluZyB3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgYnJvd3NlcgogICAgICAgIG15ICRIVE1MU3RyaW5nOwoKICAgICAgICAjIGV4cHJlc3Npb24gb3IgYWN0aW9uIGZpZWxkIHdhcyBjaGFuZ2VkCiAgICAgICAgaWYgKCAkR2V0UGFyYW17RWxlbWVudENoYW5nZWR9ID1+IG17IFxBICggRXhwcmVzc2lvbklEIHwgQWN0aW9uSUQgKSBcLSAoIFxkKyB8IE5FVyApIH14bXMgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgZ2V0IGlkIG5hbWUgb2YgdGhlIGludm9sdmVkIGVsZW1lbnQgKCAnRXhwcmVzc2lvbklEJyBvciAnQWN0aW9uSUQnICkKICAgICAgICAgICAgbXkgJElETmFtZSA9ICQxOwoKICAgICAgICAgICAgIyBnZXQgaWQgb2YgdGhlIGludm9sdmVkIGVsZW1lbnQKICAgICAgICAgICAgbXkgJElEID0gJDI7CgogICAgICAgICAgICAjIGdldCB2YWx1ZSBmaWVsZCBuYW1lCiAgICAgICAgICAgIG15ICRWYWx1ZUZpZWxkTmFtZTsKICAgICAgICAgICAgaWYgKCAkSUROYW1lIGVxICdFeHByZXNzaW9uSUQnICkgewogICAgICAgICAgICAgICAgJFZhbHVlRmllbGROYW1lID0gJ0NvbXBhcmVWYWx1ZSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkSUROYW1lIGVxICdBY3Rpb25JRCcgKSB7CiAgICAgICAgICAgICAgICAkVmFsdWVGaWVsZE5hbWUgPSAnQWN0aW9uVmFsdWUnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCBleHByZXNzaW9uIG9yIGFjdGlvbiBmaWVsZHMKICAgICAgICAgICAgZm9yIG15ICRGaWVsZCAocXcoT2JqZWN0SUQgU2VsZWN0b3IgQXR0cmlidXRlSUQgT3BlcmF0b3JJRCBDb21wYXJlVmFsdWUgQWN0aW9uVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JEZpZWxkfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oCiAgICAgICAgICAgICAgICAgICAgUGFyYW0gPT4gJElETmFtZSAuICctJyAuICRJRCAuICctJyAuICRGaWVsZCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IGNvbXBhcmUgdmFsdWUgZmllbGQgdHlwZQogICAgICAgICAgICBteSAkRmllbGRUeXBlID0gJFNlbGYtPl9HZXRDb21wYXJlVmFsdWVGaWVsZFR5cGUoJUdldFBhcmFtKTsKCiAgICAgICAgICAgICMgYnVpbGQgQ29tcGFyZVZhbHVlIHNlbGVjdGlvbgogICAgICAgICAgICBpZiAoICRGaWVsZFR5cGUgZXEgJ1NlbGVjdGlvbicgKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgY29tcGFyZSB2YWx1ZSBzZWxlY3Rpb24gbGlzdAogICAgICAgICAgICAgICAgbXkgJENvbXBhcmVWYWx1ZUxpc3QgPSAkU2VsZi0+X0dldENvbXBhcmVWYWx1ZVNlbGVjdGlvbiglR2V0UGFyYW0pOwoKICAgICAgICAgICAgICAgICMgYWRkIGFuIGVtcHR5IHNlbGVjdGlvbiBpZiBubyBsaXN0IGlzIGF2YWlsYWJsZSBvciBub3RoaW5nIGlzIHNlbGVjdGVkCiAgICAgICAgICAgICAgICBteSAkUG9zc2libGVOb25lID0gMDsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkUGFyYW17UG9zc2libGVOb25lfQogICAgICAgICAgICAgICAgICAgIHx8ICEkUGFyYW17JFZhbHVlRmllbGROYW1lfQogICAgICAgICAgICAgICAgICAgIHx8ICEkQ29tcGFyZVZhbHVlTGlzdAogICAgICAgICAgICAgICAgICAgIHx8ICggcmVmICRDb21wYXJlVmFsdWVMaXN0IGVxICdIQVNIJyAgJiYgISV7JENvbXBhcmVWYWx1ZUxpc3R9ICkKICAgICAgICAgICAgICAgICAgICB8fCAoIHJlZiAkQ29tcGFyZVZhbHVlTGlzdCBlcSAnQVJSQVknICYmICFAeyRDb21wYXJlVmFsdWVMaXN0fSApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRQb3NzaWJsZU5vbmUgPSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZ2VuZXJhdGUgVmFsdWVPcHRpb25TdHJpbmcKICAgICAgICAgICAgICAgICRIVE1MU3RyaW5nID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRDb21wYXJlVmFsdWVMaXN0LAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkSUROYW1lIC4gJy0nIC4gJElEIC4gJy0nIC4gJFZhbHVlRmllbGROYW1lLAogICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkR2V0UGFyYW17JFZhbHVlRmllbGROYW1lfSwKICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gJFBvc3NpYmxlTm9uZSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYnVpbGQgdGV4dCBpbnB1dCBmaWVsZAogICAgICAgICAgICBlbHNpZiAoICRGaWVsZFR5cGUgZXEgJ1RleHQnICkgewoKICAgICAgICAgICAgICAgICMgYnVpbGQgYW4gZW1wdHkgaW5wdXQgZmllbGQKICAgICAgICAgICAgICAgICRIVE1MU3RyaW5nID0gJycKICAgICAgICAgICAgICAgICAgICAuICc8aW5wdXQgdHlwZT0idGV4dCIgJwogICAgICAgICAgICAgICAgICAgIC4gJ2lkPSInIC4gJElETmFtZSAuICctJyAuICRJRCAuICctJyAuICRWYWx1ZUZpZWxkTmFtZSAuICciICcKICAgICAgICAgICAgICAgICAgICAuICduYW1lPSInIC4gJElETmFtZSAuICctJyAuICRJRCAuICctJyAuICRWYWx1ZUZpZWxkTmFtZSAuICciICcKICAgICAgICAgICAgICAgICAgICAuICd2YWx1ZT0iIiBjbGFzPSJXNzVwYyIgbWF4bGVuZ3RoPSIyNTAiIC8+JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzaG93IGVycm9yIGZvciB1bmtub3duIGZpZWxkIHR5cGUKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkSFRNTFN0cmluZyA9ICc8c3Bhbj48Yj4nCiAgICAgICAgICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdFcnJvcjogVW5rbm93biBmaWVsZCB0eXBlICIlcyIhJywgJEZpZWxkVHlwZSApCiAgICAgICAgICAgICAgICAgICAgLiAnPC9iPjwvc3Bhbj4nOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHJldHVybiBIVE1MCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICBDaGFyc2V0ICAgICA9PiAkTGF5b3V0T2JqZWN0LT57VXNlckNoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkSFRNTFN0cmluZywKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNvbmRpdGlvbiBlZGl0IHZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiAgICBteSAlQ29uZGl0aW9uRGF0YTsKCiAgICAjIGdldCBDb25kaXRpb25JRAogICAgJENvbmRpdGlvbkRhdGF7Q29uZGl0aW9uSUR9ID0gJEdldFBhcmFte0NvbmRpdGlvbklEfTsKCiAgICAjIGlmIHRoaXMgaXMgYW4gZXhpc3RpbmcgY29uZGl0aW9uCiAgICBpZiAoICRDb25kaXRpb25EYXRhe0NvbmRpdGlvbklEfSBuZSAnTkVXJyApIHsKCiAgICAgICAgIyBnZXQgY29uZGl0aW9uIGRhdGEKICAgICAgICBteSAkQ29uZGl0aW9uID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uR2V0KAogICAgICAgICAgICBDb25kaXRpb25JRCA9PiAkQ29uZGl0aW9uRGF0YXtDb25kaXRpb25JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb25kaXRpb24gYmVsb25ncyB0byB0aGUgZ2l2ZW4gY2hhbmdlCiAgICAgICAgaWYgKCAkQ29uZGl0aW9uLT57Q2hhbmdlSUR9IG5lICRHZXRQYXJhbXtDaGFuZ2VJRH0gKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICdDb25kaXRpb25JRCAlcyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIGdpdmVuIENoYW5nZUlEICVzIScsCiAgICAgICAgICAgICAgICAgICAgJENvbmRpdGlvbkRhdGF7Q29uZGl0aW9uSUR9LAogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtDaGFuZ2VJRH0KICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGFkZCBkYXRhIGZyb20gY29uZGl0aW9uCiAgICAgICAgJUNvbmRpdGlvbkRhdGEgPSAoICVDb25kaXRpb25EYXRhLCAleyRDb25kaXRpb259ICk7CgogICAgICAgICMgc2hvdyBleGlzdGluZyBleHByZXNzaW9ucwogICAgICAgICRTZWxmLT5fRXhwcmVzc2lvbk92ZXJ2aWV3KAogICAgICAgICAgICAleyRDaGFuZ2VEYXRhfSwKICAgICAgICAgICAgJUNvbmRpdGlvbkRhdGEsCiAgICAgICAgICAgIEV4cHJlc3Npb25JRHMgPT4gJEV4cHJlc3Npb25JRHNSZWYsCiAgICAgICAgICAgIE5ld0V4cHJlc3Npb24gPT4gJEdldFBhcmFte05ld0V4cHJlc3Npb259LAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBleGlzdGluZyBhY3Rpb25zCiAgICAgICAgJFNlbGYtPl9BY3Rpb25PdmVydmlldygKICAgICAgICAgICAgJXskQ2hhbmdlRGF0YX0sCiAgICAgICAgICAgICVDb25kaXRpb25EYXRhLAogICAgICAgICAgICBBY3Rpb25JRHMgPT4gJEFjdGlvbklEc1JlZiwKICAgICAgICAgICAgTmV3QWN0aW9uID0+ICRHZXRQYXJhbXtOZXdBY3Rpb259LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnRXhwcmVzc2lvbk92ZXJ2aWV3Um93Tm9EYXRhJyApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25PdmVydmlld1Jvd05vRGF0YScgKTsKICAgIH0KCiAgICAjIGdldCBleHByZXNzaW9uIGNvbmp1bmN0aW9uIGZyb20gY29uZGl0aW9uCiAgICBpZiAoICEkR2V0UGFyYW17RXhwcmVzc2lvbkNvbmp1bmN0aW9ufSApIHsKICAgICAgICAkR2V0UGFyYW17RXhwcmVzc2lvbkNvbmp1bmN0aW9ufSA9ICRDb25kaXRpb25EYXRhe0V4cHJlc3Npb25Db25qdW5jdGlvbn0gfHwgJyc7CiAgICB9CgogICAgIyBzZXQgcmFkaW8gYnV0dG9ucyBmb3IgZXhwcmVzc2lvbiBjb25qdW5jdGlvbgogICAgaWYgKCAkR2V0UGFyYW17RXhwcmVzc2lvbkNvbmp1bmN0aW9ufSBlcSAnYWxsJyApIHsKICAgICAgICAkQ29uZGl0aW9uRGF0YXthbGxzZWxlY3RlZH0gPSAnY2hlY2tlZD0iY2hlY2tlZCInOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJENvbmRpdGlvbkRhdGF7YW55c2VsZWN0ZWR9ID0gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsKICAgIH0KCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwoKICAgICMgZ2VuZXJhdGUgVmFsaWRPcHRpb25TdHJpbmcKICAgICRDb25kaXRpb25EYXRhe1ZhbGlkT3B0aW9uU3RyaW5nfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgID0+IFwlVmFsaWRMaXN0LAogICAgICAgIE5hbWUgICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEICA9PiAkQ29uZGl0aW9uRGF0YXtWYWxpZElEfSB8fCAoICRWYWxpZE9iamVjdC0+VmFsaWRJRHNHZXQoKSApWzBdLAogICAgICAgIFNvcnQgICAgICAgID0+ICdOdW1lcmljS2V5JywKICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGFkZCB0aGUgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcwogICAgZm9yIG15ICRCbG9ja05hbWUgKEBWYWxpZGF0aW9uRXJyb3JzKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJEJsb2NrTmFtZSwKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0JywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7JENoYW5nZURhdGF9LAogICAgICAgICAgICAlQ29uZGl0aW9uRGF0YSwKICAgICAgICB9LAogICAgKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKAogICAgICAgIFR5cGUgPT4gJ1NtYWxsJywKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCiMgc2hvdyBleGlzdGluZyBleHByZXNzaW9ucwpzdWIgX0V4cHJlc3Npb25PdmVydmlldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAhJFBhcmFte0V4cHJlc3Npb25JRHN9OwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17RXhwcmVzc2lvbklEc30gbmUgJ0FSUkFZJzsKCiAgICBteSBARXhwcmVzc2lvbklEcyA9IEB7ICRQYXJhbXtFeHByZXNzaW9uSURzfSB9OwoKICAgICMgYWxzbyBzaG93IGEgbmV3IGVtcHR5IGV4cHJlc3Npb24gbGluZQogICAgaWYgKCAkUGFyYW17TmV3RXhwcmVzc2lvbn0gKSB7CiAgICAgICAgcHVzaCBARXhwcmVzc2lvbklEcywgJ05FVyc7CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICBpZiAoICFARXhwcmVzc2lvbklEcyApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnRXhwcmVzc2lvbk92ZXJ2aWV3Um93Tm9EYXRhJyApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBFWFBSRVNTSU9OSUQ6CiAgICBmb3IgbXkgJEV4cHJlc3Npb25JRCAoIHNvcnQgeyAkYSBjbXAgJGIgfSBARXhwcmVzc2lvbklEcyApIHsKCiAgICAgICAgIyB0byBzdG9yZSB0aGUgZGF0ZSBvZiBhbiBleHByZXNzaW9uCiAgICAgICAgbXkgJEV4cHJlc3Npb25EYXRhID0ge307CgogICAgICAgICMgc2V0IGV4cHJlc3Npb24gaWQgdG8gJ05FVycgZm9yIGZ1cnRoZXIgZnVuY3Rpb24gY2FsbHMKICAgICAgICBpZiAoICRFeHByZXNzaW9uSUQgZXEgJ05FVycgKSB7CiAgICAgICAgICAgICRFeHByZXNzaW9uRGF0YS0+e0V4cHJlc3Npb25JRH0gPSAkRXhwcmVzc2lvbklEOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgZGF0YSBmb3IgYW4gZXhpc3RpbmcgZXhwcmVzc2lvbgogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBnZXQgY29uZGl0aW9uIGRhdGEKICAgICAgICAgICAgJEV4cHJlc3Npb25EYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nKS0+RXhwcmVzc2lvbkdldCgKICAgICAgICAgICAgICAgIEV4cHJlc3Npb25JRCA9PiAkRXhwcmVzc2lvbklELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgRVhQUkVTU0lPTklEIGlmICEkRXhwcmVzc2lvbkRhdGE7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBvdmVydmlldyByb3cKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRXhwcmVzc2lvbk92ZXJ2aWV3Um93JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAleyRFeHByZXNzaW9uRGF0YX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IG9iamVjdCBzZWxlY3Rpb24KICAgICAgICAkU2VsZi0+X1Nob3dPYmplY3RTZWxlY3Rpb24oCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXskRXhwcmVzc2lvbkRhdGF9LAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBzZWxlY29yIHNlbGVjdGlvbgogICAgICAgICRTZWxmLT5fU2hvd1NlbGVjdG9yU2VsZWN0aW9uKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7JEV4cHJlc3Npb25EYXRhfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgYXR0cmlidXRlIHNlbGVjdGlvbgogICAgICAgICRTZWxmLT5fU2hvd0F0dHJpYnV0ZVNlbGVjdGlvbigKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyRFeHByZXNzaW9uRGF0YX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IG9wZXJhdG9yIHNlbGVjdGlvbgogICAgICAgICRTZWxmLT5fU2hvd09wZXJhdG9yU2VsZWN0aW9uKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7JEV4cHJlc3Npb25EYXRhfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgY29tcGFyZSB2YWx1ZSBmaWVsZAogICAgICAgICRTZWxmLT5fU2hvd0NvbXBhcmVWYWx1ZUZpZWxkKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7JEV4cHJlc3Npb25EYXRhfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgojIHNob3cgZXhpc3RpbmcgYWN0aW9ucwpzdWIgX0FjdGlvbk92ZXJ2aWV3IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGlmICEkUGFyYW17QWN0aW9uSURzfTsKICAgIHJldHVybiBpZiByZWYgJFBhcmFte0FjdGlvbklEc30gbmUgJ0FSUkFZJzsKCiAgICBteSBAQWN0aW9uSURzID0gQHsgJFBhcmFte0FjdGlvbklEc30gfTsKCiAgICAjIGFsc28gc2hvdyBhIG5ldyBlbXB0eSBhY3Rpb24gbGluZQogICAgaWYgKCAkUGFyYW17TmV3QWN0aW9ufSApIHsKICAgICAgICBwdXNoIEBBY3Rpb25JRHMsICdORVcnOwogICAgfQoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgaWYgKCAhQEFjdGlvbklEcyApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXdSb3dOb0RhdGEnICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIEFjdGlvbklEOgogICAgZm9yIG15ICRBY3Rpb25JRCAoIHNvcnQgeyAkYSBjbXAgJGIgfSBAQWN0aW9uSURzICkgewoKICAgICAgICAjIHRvIHN0b3JlIHRoZSBkYXRlIG9mIGFuIGFjdGlvbgogICAgICAgIG15ICRBY3Rpb25EYXRhID0ge307CgogICAgICAgICMgc2V0IGFjdGlvbiBpZCB0byAnTkVXJyBmb3IgZnVydGhlciBmdW5jdGlvbiBjYWxscwogICAgICAgIGlmICggJEFjdGlvbklEIGVxICdORVcnICkgewogICAgICAgICAgICAkQWN0aW9uRGF0YS0+e0FjdGlvbklEfSA9ICRBY3Rpb25JRDsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGRhdGEgZm9yIGFuIGV4aXN0aW5nIGFjdGlvbgogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBnZXQgY29uZGl0aW9uIGRhdGEKICAgICAgICAgICAgJEFjdGlvbkRhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicpLT5BY3Rpb25HZXQoCiAgICAgICAgICAgICAgICBBY3Rpb25JRCA9PiAkQWN0aW9uSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IEFjdGlvbklEIGlmICEkQWN0aW9uRGF0YTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IHJvdwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBY3Rpb25PdmVydmlld1JvdycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJXskQWN0aW9uRGF0YX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IG9iamVjdCBzZWxlY3Rpb24KICAgICAgICAkU2VsZi0+X1Nob3dPYmplY3RTZWxlY3Rpb24oCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXskQWN0aW9uRGF0YX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IHNlbGVjb3Igc2VsZWN0aW9uCiAgICAgICAgJFNlbGYtPl9TaG93U2VsZWN0b3JTZWxlY3Rpb24oCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXskQWN0aW9uRGF0YX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IGF0dHJpYnV0ZSBzZWxlY3Rpb24KICAgICAgICAkU2VsZi0+X1Nob3dBdHRyaWJ1dGVTZWxlY3Rpb24oCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXskQWN0aW9uRGF0YX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IG9wZXJhdG9yIHNlbGVjdGlvbgogICAgICAgICRTZWxmLT5fU2hvd09wZXJhdG9yU2VsZWN0aW9uKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7JEFjdGlvbkRhdGF9LAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBjb21wYXJlIHZhbHVlIGZpZWxkCiAgICAgICAgJFNlbGYtPl9TaG93Q29tcGFyZVZhbHVlRmllbGQoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXskQWN0aW9uRGF0YX0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKIyBzaG93IG9iamVjdCBkcm9wZG93biBmaWVsZApzdWIgX1Nob3dPYmplY3RTZWxlY3Rpb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBvYmplY3Qgc2VsZWN0aW9uIGxpc3QKICAgIG15ICRPYmplY3RMaXN0ID0gJFNlbGYtPl9HZXRPYmplY3RTZWxlY3Rpb24oJVBhcmFtKTsKCiAgICAjIGFkZCBhbiBlbXB0eSBzZWxlY3Rpb24gaWYgbm8gbGlzdCBpcyBhdmFpbGFibGUgb3Igbm90aGluZyBpcyBzZWxlY3RlZAogICAgbXkgJFBvc3NpYmxlTm9uZSA9IDA7CiAgICBpZiAoCiAgICAgICAgISRPYmplY3RMaXN0CiAgICAgICAgfHwgIXJlZiAkT2JqZWN0TGlzdCBlcSAnSEFTSCcKICAgICAgICB8fCAhJXskT2JqZWN0TGlzdH0KICAgICAgICB8fCAhJFBhcmFte09iamVjdElEfQogICAgICAgICkKICAgIHsKICAgICAgICAkUG9zc2libGVOb25lID0gMTsKICAgIH0KCiAgICAjIG5hbWUgb2YgdGhlIGRpdiB0aGF0IHNob3VsZCBiZSB1cGRhdGVkCiAgICBteSAkVXBkYXRlRGl2TmFtZTsKCiAgICAjIGlkIG5hbWUgb2YgdGhlIGludm9sdmVkIGVsZW1lbnQgKCAnRXhwcmVzc2lvbklEJyBvciAnQWN0aW9uSUQnICkKICAgIG15ICRJRE5hbWU7CgogICAgIyBibG9jayBuYW1lIGZvciB0aGUgb3V0cHV0IGxheW91dCBibG9jawogICAgbXkgJEJsb2NrTmFtZTsKCiAgICAjIGZvciBleHByZXNzaW9uIGVsZW1lbnRzCiAgICBpZiAoICRQYXJhbXtFeHByZXNzaW9uSUR9ICkgewogICAgICAgICRVcGRhdGVEaXZOYW1lID0gIkV4cHJlc3Npb25JRC0kUGFyYW17RXhwcmVzc2lvbklEfS1Db21wYXJlVmFsdWUtRGl2IjsKICAgICAgICAkSUROYW1lICAgICAgICA9ICdFeHByZXNzaW9uSUQnOwogICAgICAgICRCbG9ja05hbWUgICAgID0gJ0V4cHJlc3Npb25PdmVydmlld1Jvd0VsZW1lbnRPYmplY3QnOwogICAgfQoKICAgICMgZm9yIGFjdGlvbiBlbGVtZW50cwogICAgZWxzaWYgKCAkUGFyYW17QWN0aW9uSUR9ICkgewogICAgICAgICRVcGRhdGVEaXZOYW1lID0gIkFjdGlvbklELSRQYXJhbXtBY3Rpb25JRH0tQWN0aW9uVmFsdWUtRGl2IjsKICAgICAgICAkSUROYW1lICAgICAgICA9ICdBY3Rpb25JRCc7CiAgICAgICAgJEJsb2NrTmFtZSAgICAgPSAnQWN0aW9uT3ZlcnZpZXdSb3dFbGVtZW50T2JqZWN0JzsKICAgIH0KCiAgICAjIHBhcmFtZXRlcnMgZm9yIGFqYXgKICAgICRQYXJhbXtPYmplY3RPcHRpb25OYW1lfSA9ICRJRE5hbWUgLiAnLScgLiAkUGFyYW17JElETmFtZX0gLiAnLU9iamVjdElEJzsKICAgICRQYXJhbXtJRE5hbWV9ICAgICAgICAgICA9ICRJRE5hbWU7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGdlbmVyYXRlIE9iamVjdE9wdGlvblN0cmluZwogICAgbXkgJE9iamVjdE9wdGlvblN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiAkT2JqZWN0TGlzdCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJFBhcmFte09iamVjdE9wdGlvbk5hbWV9LAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17T2JqZWN0SUR9LAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAkUG9zc2libGVOb25lLAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgKTsKCiAgICAjIG91dHB1dCBvYmplY3Qgc2VsZWN0aW9uCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICRCbG9ja05hbWUsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgT2JqZWN0T3B0aW9uU3RyaW5nID0+ICRPYmplY3RPcHRpb25TdHJpbmcsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCiMgc2hvdyBzZWxlY3RvciBkcm9wZG93biBmaWVsZApzdWIgX1Nob3dTZWxlY3RvclNlbGVjdGlvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHNlbGVjdG9yIHNlbGVjdGlvbiBsaXN0CiAgICBteSAkU2VsZWN0b3JMaXN0ID0gJFNlbGYtPl9HZXRTZWxlY3RvclNlbGVjdGlvbiglUGFyYW0pOwoKICAgICMgYWRkIGFuIGVtcHR5IHNlbGVjdGlvbiBpZiBubyBsaXN0IGlzIGF2YWlsYWJsZSBvciBub3RoaW5nIGlzIHNlbGVjdGVkCiAgICBteSAkUG9zc2libGVOb25lID0gMDsKICAgIGlmICgKICAgICAgICAhJFNlbGVjdG9yTGlzdAogICAgICAgIHx8ICFyZWYgJFNlbGVjdG9yTGlzdCBlcSAnSEFTSCcKICAgICAgICB8fCAhJXskU2VsZWN0b3JMaXN0fQogICAgICAgIHx8ICEkUGFyYW17U2VsZWN0b3J9CiAgICAgICAgKQogICAgewogICAgICAgICRQb3NzaWJsZU5vbmUgPSAxOwogICAgfQoKICAgICMgaWQgbmFtZSBvZiB0aGUgaW52b2x2ZWQgZWxlbWVudCAoICdFeHByZXNzaW9uSUQnIG9yICdBY3Rpb25JRCcgKQogICAgbXkgJElETmFtZTsKCiAgICAjIGJsb2NrIG5hbWUgZm9yIHRoZSBvdXRwdXQgbGF5b3V0IGJsb2NrCiAgICBteSAkQmxvY2tOYW1lOwoKICAgICMgZm9yIGV4cHJlc3Npb24gZWxlbWVudHMKICAgIGlmICggJFBhcmFte0V4cHJlc3Npb25JRH0gKSB7CiAgICAgICAgJElETmFtZSAgICA9ICdFeHByZXNzaW9uSUQnOwogICAgICAgICRCbG9ja05hbWUgPSAnRXhwcmVzc2lvbk92ZXJ2aWV3Um93RWxlbWVudFNlbGVjdG9yJzsKICAgIH0KCiAgICAjIGZvciBhY3Rpb24gZWxlbWVudHMKICAgIGVsc2lmICggJFBhcmFte0FjdGlvbklEfSApIHsKICAgICAgICAkSUROYW1lICAgID0gJ0FjdGlvbklEJzsKICAgICAgICAkQmxvY2tOYW1lID0gJ0FjdGlvbk92ZXJ2aWV3Um93RWxlbWVudFNlbGVjdG9yJzsKICAgIH0KCiAgICAjIHBhcmFtZXRlcnMgZm9yIGFqYXgKICAgICRQYXJhbXtPYmplY3RPcHRpb25OYW1lfSA9ICRJRE5hbWUgLiAnLScgLiAkUGFyYW17JElETmFtZX0gLiAnLVNlbGVjdG9yJzsKICAgICRQYXJhbXtJRE5hbWV9ICAgICAgICAgICA9ICRJRE5hbWU7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGdlbmVyYXRlIFNlbGVjdG9yT3B0aW9uU3RyaW5nCiAgICBteSAkU2VsZWN0b3JPcHRpb25TdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gJFNlbGVjdG9yTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJFBhcmFte09iamVjdE9wdGlvbk5hbWV9LAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17U2VsZWN0b3J9LAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAkUG9zc2libGVOb25lLAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgKTsKCiAgICAjIG91dHB1dCBzZWxlY3RvciBzZWxlY3Rpb24KICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJEJsb2NrTmFtZSwKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBTZWxlY3Rvck9wdGlvblN0cmluZyA9PiAkU2VsZWN0b3JPcHRpb25TdHJpbmcsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCiMgc2hvdyBhdHRyaWJ1dGUgZHJvcGRvd24gZmllbGQKc3ViIF9TaG93QXR0cmlidXRlU2VsZWN0aW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBuYW1lIG9mIHRoZSBkaXYgdGhhdCBzaG91bGQgYmUgdXBkYXRlZAogICAgbXkgJFVwZGF0ZURpdk5hbWU7CgogICAgIyBpZCBuYW1lIG9mIHRoZSBpbnZvbHZlZCBlbGVtZW50ICggJ0V4cHJlc3Npb25JRCcgb3IgJ0FjdGlvbklEJyApCiAgICBteSAkSUROYW1lOwoKICAgICMgYmxvY2sgbmFtZSBmb3IgdGhlIG91dHB1dCBsYXlvdXQgYmxvY2sKICAgIG15ICRCbG9ja05hbWU7CgogICAgIyBuYW1lIG9mIHRoZSB2YWx1ZSBmaWVsZCAoIENvbXBhcmVWYWx1ZSBvciBBY3Rpb25WYWx1ZSApCiAgICBteSAkVmFsdWVGaWVsZE5hbWU7CgogICAgIyBmb3IgZXhwcmVzc2lvbiBlbGVtZW50cwogICAgaWYgKCAkUGFyYW17RXhwcmVzc2lvbklEfSApIHsKICAgICAgICAkVXBkYXRlRGl2TmFtZSAgPSAiRXhwcmVzc2lvbklELSRQYXJhbXtFeHByZXNzaW9uSUR9LUNvbXBhcmVWYWx1ZS1EaXYiOwogICAgICAgICRJRE5hbWUgICAgICAgICA9ICdFeHByZXNzaW9uSUQnOwogICAgICAgICRCbG9ja05hbWUgICAgICA9ICdFeHByZXNzaW9uT3ZlcnZpZXdSb3dFbGVtZW50QXR0cmlidXRlJzsKICAgICAgICAkVmFsdWVGaWVsZE5hbWUgPSAnQ29tcGFyZVZhbHVlJzsKICAgIH0KCiAgICAjIGZvciBhY3Rpb24gZWxlbWVudHMKICAgIGVsc2lmICggJFBhcmFte0FjdGlvbklEfSApIHsKICAgICAgICAkVXBkYXRlRGl2TmFtZSAgPSAiQWN0aW9uSUQtJFBhcmFte0FjdGlvbklEfS1BY3Rpb25WYWx1ZS1EaXYiOwogICAgICAgICRJRE5hbWUgICAgICAgICA9ICdBY3Rpb25JRCc7CiAgICAgICAgJEJsb2NrTmFtZSAgICAgID0gJ0FjdGlvbk92ZXJ2aWV3Um93RWxlbWVudEF0dHJpYnV0ZSc7CiAgICAgICAgJFZhbHVlRmllbGROYW1lID0gJ0FjdGlvblZhbHVlJzsKICAgIH0KCiAgICAjIGdldCBhdHRyaWJ1dGUgc2VsZWN0aW9uIGxpc3QKICAgIG15ICRBdHRyaWJ1dGVMaXN0ID0gJFNlbGYtPl9HZXRBdHRyaWJ1dGVTZWxlY3Rpb24oCiAgICAgICAgT2JqZWN0SUQgPT4gJFBhcmFte09iamVjdElEfSwKICAgICAgICBTZWxlY3RvciA9PiAkUGFyYW17U2VsZWN0b3J9LAogICAgICAgICRJRE5hbWUgID0+ICRQYXJhbXskSUROYW1lfSwKICAgICk7CgogICAgIyBhZGQgYW4gZW1wdHkgc2VsZWN0aW9uIGlmIG5vIGxpc3QgaXMgYXZhaWxhYmxlIG9yIG5vdGhpbmcgaXMgc2VsZWN0ZWQKICAgIG15ICRQb3NzaWJsZU5vbmUgPSAwOwogICAgaWYgKAogICAgICAgICEkQXR0cmlidXRlTGlzdAogICAgICAgIHx8ICFyZWYgJEF0dHJpYnV0ZUxpc3QgZXEgJ0hBU0gnCiAgICAgICAgfHwgISV7JEF0dHJpYnV0ZUxpc3R9CiAgICAgICAgfHwgISRQYXJhbXtBdHRyaWJ1dGVJRH0KICAgICAgICApCiAgICB7CiAgICAgICAgJFBvc3NpYmxlTm9uZSA9IDE7CiAgICB9CgogICAgIyBwYXJhbWV0ZXJzIGZvciBhamF4CiAgICAkUGFyYW17T2JqZWN0T3B0aW9uTmFtZX0gPSAkSUROYW1lIC4gJy0nIC4gJFBhcmFteyRJRE5hbWV9IC4gJy1BdHRyaWJ1dGVJRCc7CiAgICAkUGFyYW17SUROYW1lfSAgICAgICAgICAgPSAkSUROYW1lOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBnZW5lcmF0ZSBBdHRyaWJ1dGVPcHRpb25TdHJpbmcKICAgIG15ICRBdHRyaWJ1dGVPcHRpb25TdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gJEF0dHJpYnV0ZUxpc3QsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICRQYXJhbXtPYmplY3RPcHRpb25OYW1lfSwKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte0F0dHJpYnV0ZUlEfSwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gJFBvc3NpYmxlTm9uZSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICk7CgogICAgIyBvdXRwdXQgYXR0cmlidXRlIHNlbGVjdGlvbgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAkQmxvY2tOYW1lLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIEF0dHJpYnV0ZU9wdGlvblN0cmluZyA9PiAkQXR0cmlidXRlT3B0aW9uU3RyaW5nLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgojIHNob3cgb3BlcmF0b3IgZHJvcGRvd24gZmllbGQKc3ViIF9TaG93T3BlcmF0b3JTZWxlY3Rpb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGlkIG5hbWUgb2YgdGhlIGludm9sdmVkIGVsZW1lbnQgKCAnRXhwcmVzc2lvbklEJyBvciAnQWN0aW9uSUQnICkKICAgIG15ICRJRE5hbWU7CgogICAgIyBibG9jayBuYW1lIGZvciB0aGUgb3V0cHV0IGxheW91dCBibG9jawogICAgbXkgJEJsb2NrTmFtZTsKCiAgICAjIGZvciBleHByZXNzaW9uIGVsZW1lbnRzCiAgICBpZiAoICRQYXJhbXtFeHByZXNzaW9uSUR9ICkgewogICAgICAgICRJRE5hbWUgICAgPSAnRXhwcmVzc2lvbklEJzsKICAgICAgICAkQmxvY2tOYW1lID0gJ0V4cHJlc3Npb25PdmVydmlld1Jvd0VsZW1lbnRPcGVyYXRvcic7CiAgICB9CgogICAgIyBmb3IgYWN0aW9uIGVsZW1lbnRzCiAgICBlbHNpZiAoICRQYXJhbXtBY3Rpb25JRH0gKSB7CiAgICAgICAgJElETmFtZSAgICA9ICdBY3Rpb25JRCc7CiAgICAgICAgJEJsb2NrTmFtZSA9ICdBY3Rpb25PdmVydmlld1Jvd0VsZW1lbnRPcGVyYXRvcic7CiAgICB9CgogICAgIyBnZXQgb3BlcmF0b3Igc2VsZWN0aW9uIGxpc3QKICAgIG15ICRPcGVyYXRvckxpc3QgPSAkU2VsZi0+X0dldE9wZXJhdG9yU2VsZWN0aW9uKAogICAgICAgIE9iamVjdElEICAgID0+ICRQYXJhbXtPYmplY3RJRH0sCiAgICAgICAgQXR0cmlidXRlSUQgPT4gJFBhcmFte0F0dHJpYnV0ZUlEfSwKICAgICAgICAkSUROYW1lICAgICA9PiAkUGFyYW17JElETmFtZX0sCiAgICApOwoKICAgICMgYWRkIGFuIGVtcHR5IHNlbGVjdGlvbiBpZiBubyBsaXN0IGlzIGF2YWlsYWJsZSBvciBub3RoaW5nIGlzIHNlbGVjdGVkCiAgICBteSAkUG9zc2libGVOb25lID0gMDsKICAgIGlmICgKICAgICAgICAhJE9wZXJhdG9yTGlzdAogICAgICAgIHx8ICFyZWYgJE9wZXJhdG9yTGlzdCBlcSAnSEFTSCcKICAgICAgICB8fCAhJXskT3BlcmF0b3JMaXN0fQogICAgICAgIHx8ICEkUGFyYW17T3BlcmF0b3JJRH0KICAgICAgICApCiAgICB7CiAgICAgICAgJFBvc3NpYmxlTm9uZSA9IDE7CiAgICB9CgogICAgIyBwYXJhbWV0ZXJzIGZvciBhamF4CiAgICAkUGFyYW17T2JqZWN0T3B0aW9uTmFtZX0gPSAkSUROYW1lIC4gJy0nIC4gJFBhcmFteyRJRE5hbWV9IC4gJy1PcGVyYXRvcklEJzsKICAgICRQYXJhbXtJRE5hbWV9ICAgICAgICAgICA9ICRJRE5hbWU7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGdlbmVyYXRlIE9wZXJhdG9yT3B0aW9uU3RyaW5nCiAgICBteSAkT3BlcmF0b3JPcHRpb25TdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gJE9wZXJhdG9yTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJFBhcmFte09iamVjdE9wdGlvbk5hbWV9LAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17T3BlcmF0b3JJRH0sCiAgICAgICAgUG9zc2libGVOb25lID0+ICRQb3NzaWJsZU5vbmUsCiAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICApOwoKICAgICMgb3V0cHV0IG9wZXJhdG9yIHNlbGVjdGlvbgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAkQmxvY2tOYW1lLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIE9wZXJhdG9yT3B0aW9uU3RyaW5nID0+ICRPcGVyYXRvck9wdGlvblN0cmluZywKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKIyBzaG93IGNvbXBhcmUgdmFsdWUgZmllbGQKc3ViIF9TaG93Q29tcGFyZVZhbHVlRmllbGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb21wYXJlIHZhbHVlIGZpZWxkIHR5cGUKICAgIG15ICRGaWVsZFR5cGUgPSAkU2VsZi0+X0dldENvbXBhcmVWYWx1ZUZpZWxkVHlwZSglUGFyYW0pOwoKICAgICMgaWQgbmFtZSBvZiB0aGUgaW52b2x2ZWQgZWxlbWVudCAoICdFeHByZXNzaW9uSUQnIG9yICdBY3Rpb25JRCcgKQogICAgbXkgJElETmFtZTsKCiAgICAjIGJsb2NrIG5hbWVzIGZvciB0aGUgb3V0cHV0IGxheW91dCBibG9jawogICAgbXkgJEJsb2NrTmFtZVRleHQ7CiAgICBteSAkQmxvY2tOYW1lU2VsZWN0aW9uOwoKICAgIG15ICRWYWx1ZUZpZWxkTmFtZTsKCiAgICAjIGZvciBleHByZXNzaW9uIGVsZW1lbnRzCiAgICBpZiAoICRQYXJhbXtFeHByZXNzaW9uSUR9ICkgewogICAgICAgICRJRE5hbWUgICAgICAgICAgICAgPSAnRXhwcmVzc2lvbklEJzsKICAgICAgICAkQmxvY2tOYW1lVGV4dCAgICAgID0gJ0V4cHJlc3Npb25PdmVydmlld1Jvd0VsZW1lbnRDb21wYXJlVmFsdWVUZXh0JzsKICAgICAgICAkQmxvY2tOYW1lU2VsZWN0aW9uID0gJ0V4cHJlc3Npb25PdmVydmlld1Jvd0VsZW1lbnRDb21wYXJlVmFsdWVTZWxlY3Rpb24nOwogICAgICAgICRWYWx1ZUZpZWxkTmFtZSAgICAgPSAnQ29tcGFyZVZhbHVlJzsKICAgIH0KCiAgICAjIGZvciBhY3Rpb24gZWxlbWVudHMKICAgIGVsc2lmICggJFBhcmFte0FjdGlvbklEfSApIHsKICAgICAgICAkSUROYW1lICAgICAgICAgICAgID0gJ0FjdGlvbklEJzsKICAgICAgICAkQmxvY2tOYW1lVGV4dCAgICAgID0gJ0FjdGlvbk92ZXJ2aWV3Um93RWxlbWVudEFjdGlvblZhbHVlVGV4dCc7CiAgICAgICAgJEJsb2NrTmFtZVNlbGVjdGlvbiA9ICdBY3Rpb25PdmVydmlld1Jvd0VsZW1lbnRBY3Rpb25WYWx1ZVNlbGVjdGlvbic7CiAgICAgICAgJFZhbHVlRmllbGROYW1lICAgICA9ICdBY3Rpb25WYWx1ZSc7CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNvbXBhcmUgdmFsdWUgaXMgYSB0ZXh0IGZpZWxkCiAgICBpZiAoICRGaWVsZFR5cGUgZXEgJ1RleHQnICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICRCbG9ja05hbWVUZXh0LAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgY29tcGFyZSB2YWx1ZSBpcyBhIHNlbGVjdGlvbiBmaWVsZAogICAgZWxzaWYgKCAkRmllbGRUeXBlIGVxICdTZWxlY3Rpb24nICkgewoKICAgICAgICAjIGdldCBjb21wYXJlIHZhbHVlIHNlbGVjdGlvbiBsaXN0CiAgICAgICAgbXkgJENvbXBhcmVWYWx1ZUxpc3QgPSAkU2VsZi0+X0dldENvbXBhcmVWYWx1ZVNlbGVjdGlvbiglUGFyYW0pOwoKICAgICAgICBteSAkQXR0cmlidXRlTmFtZTsKICAgICAgICBpZiAoICRQYXJhbXtBdHRyaWJ1dGVJRH0gKSB7CgogICAgICAgICAgICAjIGxvb2t1cCBhdHRyaWJ1dGUgbmFtZQogICAgICAgICAgICAkQXR0cmlidXRlTmFtZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJyktPkF0dHJpYnV0ZUxvb2t1cCgKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+ICRQYXJhbXtBdHRyaWJ1dGVJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGFkZCBhbiBlbXB0eSBzZWxlY3Rpb24gaWYgbm8gbGlzdCBpcyBhdmFpbGFibGUgb3Igbm90aGluZyBpcyBzZWxlY3RlZAogICAgICAgICMgb3IgdGhlIGxpc3QgaXMgdGhlIHdvcmtvcmRlciBhZ2VudCBsaXN0CiAgICAgICAgbXkgJFBvc3NpYmxlTm9uZSA9IDA7CiAgICAgICAgaWYgKAogICAgICAgICAgICAkUGFyYW17UG9zc2libGVOb25lfQogICAgICAgICAgICB8fCAhJFBhcmFteyRWYWx1ZUZpZWxkTmFtZX0KICAgICAgICAgICAgfHwgISRDb21wYXJlVmFsdWVMaXN0CiAgICAgICAgICAgIHx8ICggcmVmICRDb21wYXJlVmFsdWVMaXN0IGVxICdIQVNIJyAgJiYgISV7JENvbXBhcmVWYWx1ZUxpc3R9ICkKICAgICAgICAgICAgfHwgKCByZWYgJENvbXBhcmVWYWx1ZUxpc3QgZXEgJ0FSUkFZJyAmJiAhQHskQ29tcGFyZVZhbHVlTGlzdH0gKQogICAgICAgICAgICB8fCAoCiAgICAgICAgICAgICAgICAkVmFsdWVGaWVsZE5hbWUgZXEgJ0FjdGlvblZhbHVlJwogICAgICAgICAgICAgICAgJiYgJEF0dHJpYnV0ZU5hbWUKICAgICAgICAgICAgICAgICYmICRBdHRyaWJ1dGVOYW1lIGVxICdXb3JrT3JkZXJBZ2VudElEJwogICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRQb3NzaWJsZU5vbmUgPSAxOwogICAgICAgIH0KCiAgICAgICAgIyBnZW5lcmF0ZSBWYWx1ZU9wdGlvblN0cmluZwogICAgICAgIG15ICRWYWx1ZU9wdGlvblN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJENvbXBhcmVWYWx1ZUxpc3QsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkSUROYW1lIC4gJy0nIC4gJFBhcmFteyRJRE5hbWV9IC4gJy0nIC4gJFZhbHVlRmllbGROYW1lLAogICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFteyRWYWx1ZUZpZWxkTmFtZX0sCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAkUG9zc2libGVOb25lLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBzZWxlY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAkQmxvY2tOYW1lU2VsZWN0aW9uLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIFZhbHVlT3B0aW9uU3RyaW5nID0+ICRWYWx1ZU9wdGlvblN0cmluZywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgY29tcGFyZSB2YWx1ZSBpcyBhIGRhdGUgZmllbGQKICAgIGVsc2lmICggJEZpZWxkVHlwZSBlcSAnRGF0ZScgKSB7CgogICAgICAgICMgVE9ETyA6IEltcGxlbWVudCBkYXRlIHNlbGVjdGlvbiBsYXRlciEKICAgIH0KCiAgICAjIGNvbXBhcmUgdmFsdWUgaXMgYW4gYXV0b2NvbXBsZXRlIGZpZWxkCiAgICBlbHNpZiAoICRGaWVsZFR5cGUgZXEgJ0F1dG9jb21wbGV0ZScgKSB7CgogICAgICAgICMgVE9ETyA6IEltcGxlbWVudCBhdXRvY29tcGxldGUgc2VsZWN0aW9uIGxhdGVyIQogICAgfQoKICAgICMgc2hvdyBlbXB0eSBibG9jayBpZiBmaWVsZCB0eXBlIGlzIHVua25vd24KICAgIGVsc2UgewoKICAgICAgICAjIG91dHB1dCBlbXB0eSBibG9jawogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICRCbG9ja05hbWVTZWxlY3Rpb24sCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCiMgZ2V0IGNvbXBhcmUgdmFsdWUgZmllbGQgdHlwZQpzdWIgX0dldENvbXBhcmVWYWx1ZUZpZWxkVHlwZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgc2V0IGRlZmF1bHQgZmllbGQgdHlwZQogICAgbXkgJEZpZWxkVHlwZSA9ICdTZWxlY3Rpb24nOwoKICAgICMgaWYgYW4gYXR0cmlidXRlIGlzIHNldAogICAgaWYgKCAkUGFyYW17QXR0cmlidXRlSUR9ICkgewoKICAgICAgICAjIGdldCBjb25kaXRpb24gb2JqZWN0CiAgICAgICAgbXkgJENvbmRpdGlvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJyk7CgogICAgICAgICMgbG9va3VwIGF0dHJpYnV0ZSBuYW1lCiAgICAgICAgbXkgJEF0dHJpYnV0ZU5hbWUgPSAkQ29uZGl0aW9uT2JqZWN0LT5BdHRyaWJ1dGVMb29rdXAoCiAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+ICRQYXJhbXtBdHRyaWJ1dGVJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISRBdHRyaWJ1dGVOYW1lICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQXR0cmlidXRlSUQgJFBhcmFte0F0dHJpYnV0ZUlEfSBkb2VzIG5vdCBleGlzdCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgZmllbGQgdHlwZQogICAgICAgICRGaWVsZFR5cGUgPSAkQ29uZGl0aW9uT2JqZWN0LT5Db25kaXRpb25Db21wYXJlVmFsdWVGaWVsZFR5cGUoCiAgICAgICAgICAgIE9iamVjdElEICAgID0+ICRQYXJhbXtPYmplY3RJRH0sCiAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+ICRQYXJhbXtBdHRyaWJ1dGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gaWYgISRGaWVsZFR5cGU7CiAgICB9CgogICAgIyBXb3JrYXJvdW5kIGZvciBub3QgeWV0IGltcGxlbWVudGVkIGZpZWxkIHR5cGVzCiAgICAjIFRPRE86IGltcGxlbWVudCB0aGVzZSBmaWVsZCB0eXBlcyBsYXRlciEKICAgIGlmICggJEZpZWxkVHlwZSBlcSAnRGF0ZScgKSB7CiAgICAgICAgJEZpZWxkVHlwZSA9ICdUZXh0JzsKICAgIH0KICAgIGVsc2lmICggJEZpZWxkVHlwZSBlcSAnQXV0b2NvbXBsZXRlJyApIHsKICAgICAgICAkRmllbGRUeXBlID0gJ1NlbGVjdGlvbic7CiAgICB9CgogICAgcmV0dXJuICRGaWVsZFR5cGU7Cn0KCiMgZ2V0IG9iamVjdCBkcm9wZG93biBmaWVsZCBkYXRhCnN1YiBfR2V0T2JqZWN0U2VsZWN0aW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgb2JqZWN0IGxpc3QKICAgIG15ICRPYmplY3RMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nKS0+T2JqZWN0TGlzdCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gJE9iamVjdExpc3Q7Cn0KCiMgZ2V0IHNlbGVjdG9yIGRyb3Bkb3duIGZpZWxkIGRhdGEKc3ViIF9HZXRTZWxlY3RvclNlbGVjdGlvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxlY3Rvckxpc3QgPSB7fTsKCiAgICAjIGlmIGFuIG9iamVjdCBpcyBzZXQKICAgIGlmICggJFBhcmFte09iamVjdElEfSApIHsKCiAgICAgICAgIyBnZXQgc2VsZWN0b3IgbGlzdAogICAgICAgICRTZWxlY3Rvckxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicpLT5PYmplY3RTZWxlY3Rvckxpc3QoCiAgICAgICAgICAgIE9iamVjdElEICAgICA9PiAkUGFyYW17T2JqZWN0SUR9LAogICAgICAgICAgICBDb25kaXRpb25JRCAgPT4gJFBhcmFte0NvbmRpdGlvbklEfSwKICAgICAgICAgICAgRXhwcmVzc2lvbklEID0+ICRQYXJhbXtFeHByZXNzaW9uSUR9LAogICAgICAgICAgICBBY3Rpb25JRCAgICAgPT4gJFBhcmFte0FjdGlvbklEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkU2VsZWN0b3JMaXN0Owp9CgojIGdldCBhdHRyaWJ1dGUgc2VsZWN0aW9uIGxpc3QgZGF0YQpzdWIgX0dldEF0dHJpYnV0ZVNlbGVjdGlvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdG8gc3RvcmUgdGhlIGF0dHJpdXRlcwogICAgbXkgJUF0dHJpYnV0ZXM7CgogICAgIyBpZiBhIHNlbGVjdG9yIGlzIHNldAogICAgaWYgKCAkUGFyYW17U2VsZWN0b3J9ICkgewoKICAgICAgICAjIGdldCBjb25kaXRpb24gb2JqZWN0CiAgICAgICAgbXkgJENvbmRpdGlvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJyk7CgogICAgICAgICMgZ2V0IGxpc3Qgb2YgYWxsIGF0dHJpYnV0ZXMKICAgICAgICBteSAkQWxsQXR0cmlidXRlcyA9ICRDb25kaXRpb25PYmplY3QtPkF0dHJpYnV0ZUxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBsb29rdXAgb2JqZWN0IG5hbWUKICAgICAgICBteSAkT2JqZWN0TmFtZSA9ICRDb25kaXRpb25PYmplY3QtPk9iamVjdExvb2t1cCgKICAgICAgICAgICAgT2JqZWN0SUQgPT4gJFBhcmFte09iamVjdElEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgaWYgKCAhJE9iamVjdE5hbWUgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJPYmplY3RJRCAkUGFyYW17T2JqZWN0SUR9IGRvZXMgbm90IGV4aXN0ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IG9iamVjdCBhdHRyaWJ1dGUgbWFwcGluZyBmcm9tIHN5c2NvbmZpZwogICAgICAgIG15ICRPYmplY3RBdHRyaWJ1dGVNYXBwaW5nOwoKICAgICAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICAgICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgICAgICMgZ2V0IG1hcHBpbmcgY29uZmlnIGZvciBleHByZXNzaW9ucyBvciBhY3Rpb25zCiAgICAgICAgaWYgKCAkUGFyYW17RXhwcmVzc2lvbklEfSApIHsKICAgICAgICAgICAgJE9iamVjdEF0dHJpYnV0ZU1hcHBpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoCiAgICAgICAgICAgICAgICAkT2JqZWN0TmFtZSAuICc6Ok1hcHBpbmc6OkV4cHJlc3Npb246Ok9iamVjdDo6QXR0cmlidXRlJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkUGFyYW17QWN0aW9uSUR9ICkgewogICAgICAgICAgICAkT2JqZWN0QXR0cmlidXRlTWFwcGluZyA9ICRDb25maWdPYmplY3QtPkdldCgKICAgICAgICAgICAgICAgICRPYmplY3ROYW1lIC4gJzo6TWFwcGluZzo6QWN0aW9uOjpPYmplY3Q6OkF0dHJpYnV0ZScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgbGlzdCBvZiBkeW5hbWljIGZpZWxkcyAoY2hhbmdlIG9yIHdvcmtvcmRlcikKICAgICAgICBteSAkRHluYW1pY0ZpZWxkcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICAgICAgVmFsaWQgICAgICA9PiAwLAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICRPYmplY3ROYW1lLAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgYSBsb29rdXAgaGFzaCBmb3IgYWxsIGR5bmFtaWMgZmllbGRzIGZvciB0aGlzIG9iamVjdCAoY2hhbmdlIG9yIHdvcmtvcmRlcikKICAgICAgICBteSAlRHluYW1pY0ZpZWxkTmFtZTsKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIEB7JER5bmFtaWNGaWVsZHN9ICkgewogICAgICAgICAgICAkRHluYW1pY0ZpZWxkTmFtZXsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gPSAxOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdGhlIHZhbGlkIGF0dHJpYnV0ZXMgZm9yIHRoZSBnaXZlbiBvYmplY3QKICAgICAgICBBVFRSSUJVVEVJRDoKICAgICAgICBmb3IgbXkgJEF0dHJpYnV0ZUlEICggc29ydCBrZXlzICV7JEFsbEF0dHJpYnV0ZXN9ICkgewoKICAgICAgICAgICAgIyBjaGVjayBpZiBhdHRyaWJ1dGUgaXMgaW4gdGhlIG1hcHBpbmcKICAgICAgICAgICAgaWYgKCAkT2JqZWN0QXR0cmlidXRlTWFwcGluZy0+eyAkQWxsQXR0cmlidXRlcy0+eyRBdHRyaWJ1dGVJRH0gfSApIHsKICAgICAgICAgICAgICAgICRBdHRyaWJ1dGVzeyRBdHRyaWJ1dGVJRH0gPSAkQWxsQXR0cmlidXRlcy0+eyRBdHRyaWJ1dGVJRH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBnZXQgYXR0cmlidXRlIG5hbWUKICAgICAgICAgICAgICAgIG15ICRBdHRyaWJ1dGVOYW1lID0gJEFsbEF0dHJpYnV0ZXMtPnskQXR0cmlidXRlSUR9OwoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBpcyBhIGR5bmFtaWMgZmllbGQgYW5kIGR5bmFtaWMgZmllbGRzIHNob3VsZCBiZSB1c2VkIGFzIGF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgIG5leHQgQVRUUklCVVRFSUQgaWYgISRPYmplY3RBdHRyaWJ1dGVNYXBwaW5nLT57RHluYW1pY0ZpZWxkfTsKICAgICAgICAgICAgICAgIG5leHQgQVRUUklCVVRFSUQgaWYgJEF0dHJpYnV0ZU5hbWUgIX4gbXsgXEEgRHluYW1pY0ZpZWxkXyAoXHcrKSB9eG1zOwoKICAgICAgICAgICAgICAgICMgcmVtb3ZlIHRoZSBwcmVmaXggJ0R5bmFtaWNGaWVsZF8nIGZyb20gZHluYW1pYyBmaWVsZHMgZm9yIG5pY2VyIGRpc3BsYXkKICAgICAgICAgICAgICAgIG15ICRBdHRyaWJ1dGVXaXRob3V0UHJlZml4ID0gJDE7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiBpdCBpcyBhIGR5bmFtaWMgZmllbGQgZm9yIHRoZSBjb3JyZWN0IG9iamVjdAogICAgICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEVJRCBpZiAhJER5bmFtaWNGaWVsZE5hbWV7JEF0dHJpYnV0ZVdpdGhvdXRQcmVmaXh9OwoKICAgICAgICAgICAgICAgICMgYWRkIHRoZSBkeW5hbWljIGZpZWxkIHRvIGF0dHJpYnV0ZSBsaXN0CiAgICAgICAgICAgICAgICAkQXR0cmlidXRlc3skQXR0cmlidXRlSUR9ID0gJEF0dHJpYnV0ZVdpdGhvdXRQcmVmaXg7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZvciBteSAkQXR0cmlidXRlICggdmFsdWVzICVBdHRyaWJ1dGVzICkgewoKICAgICAgICAgICAgIyByZW1vdmUgJ0lEJyBhdCB0aGUgZW5kIG9mIHRoZSBhdHRyaWJ1dGUgbmFtZSBmb3IgbmljZXIgZGlzcGxheQogICAgICAgICAgICAkQXR0cmlidXRlID1+IHN7IElEIFx6IH17fXhtczsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFwlQXR0cmlidXRlczsKfQoKIyBnZXQgb3BlcmF0b3IgbGlzdCBkYXRhCnN1YiBfR2V0T3BlcmF0b3JTZWxlY3Rpb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHRvIHN0b3JlIHRoZSBvcGVyYXRvcnMKICAgIG15ICVPcGVyYXRvcnM7CgogICAgIyBpZiBhbiBhdHJpYnV0ZSBpcyBzZXQKICAgIGlmICggJFBhcmFte0F0dHJpYnV0ZUlEfSApIHsKCiAgICAgICAgIyBnZXQgY29uZGl0aW9uIG9iamVjdAogICAgICAgIG15ICRDb25kaXRpb25PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicpOwoKICAgICAgICAjIGxvb2t1cCBvYmplY3QgbmFtZQogICAgICAgIG15ICRPYmplY3ROYW1lID0gJENvbmRpdGlvbk9iamVjdC0+T2JqZWN0TG9va3VwKAogICAgICAgICAgICBPYmplY3RJRCA9PiAkUGFyYW17T2JqZWN0SUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGxvZyBvYmplY3QKICAgICAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgaWYgKCAhJE9iamVjdE5hbWUgKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiT2JqZWN0SUQgJFBhcmFte09iamVjdElEfSBkb2VzIG5vdCBleGlzdCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGxvb2t1cCBhdHRyaWJ1dGUgbmFtZQogICAgICAgIG15ICRBdHRyaWJ1dGVOYW1lID0gJENvbmRpdGlvbk9iamVjdC0+QXR0cmlidXRlTG9va3VwKAogICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiAkUGFyYW17QXR0cmlidXRlSUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICBpZiAoICEkQXR0cmlidXRlTmFtZSApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJBdHRyaWJ1dGVJRCAkUGFyYW17QXR0cmlidXRlSUR9IGRvZXMgbm90IGV4aXN0ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGxpc3Qgb2YgYWxsIG9wZXJhdG9ycwogICAgICAgIG15ICRBbGxPcGVyYXRvcnMgPSAkQ29uZGl0aW9uT2JqZWN0LT5PcGVyYXRvckxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgYXR0cmlidXRlIG9wZXJhdG9yIG1hcHBpbmcgZnJvbSBzeXNjb25maWcKICAgICAgICBteSAkTWFwcGluZ0NvbmZpZzsKCiAgICAgICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICAgICAjIGdldCBtYXBwaW5nIGNvbmZpZyBmb3IgZXhwcmVzc2lvbnMgb3IgYWN0aW9ucwogICAgICAgIGlmICggJFBhcmFte0V4cHJlc3Npb25JRH0gKSB7CiAgICAgICAgICAgICRNYXBwaW5nQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KAogICAgICAgICAgICAgICAgJE9iamVjdE5hbWUgLiAnOjpNYXBwaW5nOjpFeHByZXNzaW9uOjpBdHRyaWJ1dGU6Ok9wZXJhdG9yJwogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRQYXJhbXtBY3Rpb25JRH0gKSB7CiAgICAgICAgICAgICRNYXBwaW5nQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KAogICAgICAgICAgICAgICAgJE9iamVjdE5hbWUgLiAnOjpNYXBwaW5nOjpBY3Rpb246OkF0dHJpYnV0ZTo6T3BlcmF0b3InCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHJlbW92ZSB0aGUgbmFtZSBwYXJ0IG9mIHRoZSBkeW5hbWljIGZpZWxkIGFuZCByZXBsYWNlIG9ubHkgd2l0aCB0aGUgc3RyaW5nICJEeW5hbWljRmllbGQiCiAgICAgICAgJEF0dHJpYnV0ZU5hbWUgPX4gc3sgXEEgRHluYW1pY0ZpZWxkXyAoXHcrKSB9e0R5bmFtaWNGaWVsZH14bXM7CgogICAgICAgIG15ICRBdHRyaWJ1dGVPcGVyYXRvck1hcHBpbmc7CiAgICAgICAgaWYgKCRNYXBwaW5nQ29uZmlnKSB7CiAgICAgICAgICAgICRBdHRyaWJ1dGVPcGVyYXRvck1hcHBpbmcgPSAkTWFwcGluZ0NvbmZpZy0+eyRBdHRyaWJ1dGVOYW1lfSB8fCB7fTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGFsbG93ZWQgb3BlcmF0b3JzIGZvciB0aGUgZ2l2ZW4gYXR0cmlidXRlCiAgICAgICAgT1BFUkFUT1JJRDoKICAgICAgICBmb3IgbXkgJE9wZXJhdG9ySUQgKCBzb3J0IGtleXMgJXskQWxsT3BlcmF0b3JzfSApIHsKCiAgICAgICAgICAgICMgZ2V0IG9wZXJhdG9yIG5hbWUKICAgICAgICAgICAgbXkgJE9wZXJhdG9yTmFtZSA9ICRBbGxPcGVyYXRvcnMtPnskT3BlcmF0b3JJRH07CgogICAgICAgICAgICAjIGNoZWNrIGlmIG9wZXJhdG9yIGlzIGFsbG93ZWQgZm9yIHRoaXMgYXR0cmlidXRlCiAgICAgICAgICAgIG5leHQgT1BFUkFUT1JJRCBpZiAhJEF0dHJpYnV0ZU9wZXJhdG9yTWFwcGluZy0+eyRPcGVyYXRvck5hbWV9OwoKICAgICAgICAgICAgIyByZW1lbWJlciB0aGUgb3BlcmF0b3IKICAgICAgICAgICAgJE9wZXJhdG9yc3skT3BlcmF0b3JJRH0gPSAkT3BlcmF0b3JOYW1lOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXCVPcGVyYXRvcnM7Cn0KCiMgZ2V0IGNvbXBhcmUgdmFsdWUgbGlzdApzdWIgX0dldENvbXBhcmVWYWx1ZVNlbGVjdGlvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdG8gc3RvcmUgdGhlIGNvbXBhcmUgdmFsdWUgbGlzdAogICAgbXkgJENvbXBhcmVWYWx1ZUxpc3QgPSB7fTsKCiAgICAjIGlmIGFuIGF0dHJpYnV0ZSBpcyBzZXQKICAgIGlmICggJFBhcmFte0F0dHJpYnV0ZUlEfSApIHsKCiAgICAgICAgIyBnZXQgY29uZGl0aW9uIG9iamVjdAogICAgICAgIG15ICRDb25kaXRpb25PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicpOwoKICAgICAgICAjIGxvb2t1cCBhdHRyaWJ1dGUgbmFtZQogICAgICAgIG15ICRBdHRyaWJ1dGVOYW1lID0gJENvbmRpdGlvbk9iamVjdC0+QXR0cmlidXRlTG9va3VwKAogICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiAkUGFyYW17QXR0cmlidXRlSUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICBpZiAoICEkQXR0cmlidXRlTmFtZSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkF0dHJpYnV0ZUlEICRQYXJhbXtBdHRyaWJ1dGVJRH0gZG9lcyBub3QgZXhpc3QhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgY29tcGFyZSB2YWx1ZSBsaXN0CiAgICAgICAgJENvbXBhcmVWYWx1ZUxpc3QgPSAkQ29uZGl0aW9uT2JqZWN0LT5PYmplY3RDb21wYXJlVmFsdWVMaXN0KAogICAgICAgICAgICBPYmplY3RJRCAgICAgID0+ICRQYXJhbXtPYmplY3RJRH0sCiAgICAgICAgICAgIEF0dHJpYnV0ZU5hbWUgPT4gJEF0dHJpYnV0ZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRDb21wYXJlVmFsdWVMaXN0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VEZWxldGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgQ2hhbmdlSUQKICAgIG15ICRDaGFuZ2VJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdDaGFuZ2VJRCcgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkQ2hhbmdlSUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGVycm9yIHNjcmVlbgogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyEnLCAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSApLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY2hhbmdlIGRhdGEKICAgIG15ICRDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBpZiBjaGFuZ2UgaXMgZm91bmQKICAgIGlmICggISRDaGFuZ2UgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnLCAkQ2hhbmdlSUQgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBidWlsZCBhIGxvb2t1cCBoYXNoIGZvciB0aGUgYWxsb3dlZCBjaGFuZ2Ugc3RhdGVzCiAgICBteSAlQWxsb3dlZENoYW5nZVN0YXRlcyA9IG1hcCB7ICRfID0+IDEgfSBAeyAkU2VsZi0+e0NvbmZpZ30tPntDaGFuZ2VTdGF0ZXN9IH07CgogICAgIyBvbmx5IGFsbG93IGRlbGV0aW9uIGlmIGNoYW5nZSBpcyBpbiBvbmUgb2YgdGhlIGFsbG93ZWQgY2hhbmdlIHN0YXRlcwogICAgaWYgKCAhJEFsbG93ZWRDaGFuZ2VTdGF0ZXN7ICRDaGFuZ2UtPntDaGFuZ2VTdGF0ZX0gfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJ0NoYW5nZSAiJXMiIGRvZXMgbm90IGhhdmUgYW4gYWxsb3dlZCBjaGFuZ2Ugc3RhdGUgdG8gYmUgZGVsZXRlZCEnLCAkQ2hhbmdlSUQKICAgICAgICAgICAgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NoYW5nZURlbGV0ZScgKSB7CgogICAgICAgICMgZGVsZXRlIHRoZSBjaGFuZ2UKICAgICAgICBteSAkQ291bGREZWxldGVDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICgkQ291bGREZWxldGVDaGFuZ2UpIHsKCiAgICAgICAgICAgICMgcmVkaXJlY3QgdG8gY2hhbmdlIG92ZXJ2aWV3LCB3aGVuIHRoZSBkZWxldGlvbiB3YXMgc3VjY2Vzc2Z1bAogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50SVRTTUNoYW5nZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UsIHdoZW4gZGVsZXRlIGZhaWxlZAogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgY2hhbmdlSUQgJXMhJywgJENoYW5nZUlEICksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IHRoZSBkaWFsb2cgdHlwZS4gQXMgZGVmYXVsdCwgdGhlIGRpYWxvZyB3aWxsIGhhdmUgMiBidXR0b25zOiBZZXMgYW5kIE5vCiAgICBteSAkRGlhbG9nVHlwZSA9ICdDb25maXJtYXRpb24nOwoKICAgICMgb3V0cHV0IGNvbnRlbnQKICAgIG15ICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNQ2hhbmdlRGVsZXRlJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7JENoYW5nZX0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBidWlsZCB0aGUgcmV0dXJuZWQgZGF0YSBzdHJ1Y3R1cmUKICAgIG15ICVEYXRhID0gKAogICAgICAgIEhUTUwgICAgICAgPT4gJE91dHB1dCwKICAgICAgICBEaWFsb2dUeXBlID0+ICREaWFsb2dUeXBlLAogICAgKTsKCiAgICAjIHJldHVybiBKU09OLVN0cmluZyBiZWNhdXNlIG9mIEFKQVgtTW9kZQogICAgbXkgJE91dHB1dEpTT04gPSAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKCBEYXRhID0+IFwlRGF0YSApOwoKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PScgLiAkTGF5b3V0T2JqZWN0LT57Q2hhcnNldH0sCiAgICAgICAgQ29udGVudCAgICAgPT4gJE91dHB1dEpTT04sCiAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VFZGl0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIGdldCBuZWVkZWQgQ2hhbmdlSUQKICAgIG15ICRDaGFuZ2VJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDaGFuZ2VJRCcgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkQ2hhbmdlSUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRDb25maWdPYmplY3QtPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGVycm9yIHNjcmVlbgogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyEnLCAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSApLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY2hhbmdlIGRhdGEKICAgIG15ICRDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBpZiBjaGFuZ2UgaXMgZm91bmQKICAgIGlmICggISRDaGFuZ2UgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnLCAkQ2hhbmdlSUQgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBzdG9yZSBuZWVkZWQgcGFyYW1ldGVycyBpbiAlR2V0UGFyYW0gdG8gbWFrZSB0aGlzIHBhZ2UgcmVsb2FkYWJsZQogICAgbXkgJUdldFBhcmFtOwogICAgZm9yIG15ICRQYXJhbU5hbWUgKAogICAgICAgIHF3KAogICAgICAgIENoYW5nZVRpdGxlIERlc2NyaXB0aW9uIEp1c3RpZmljYXRpb24KICAgICAgICBDYXRlZ29yeUlEIEltcGFjdElEIFByaW9yaXR5SUQKICAgICAgICBBdHRhY2htZW50VXBsb2FkIEZpbGVJRAogICAgICAgICkKICAgICAgICApCiAgICB7CiAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwogICAgfQoKICAgICMgZ2V0IER5bmFtaWMgZmllbGRzIGZyb20gUGFyYW1PYmplY3QKICAgIG15ICVEeW5hbWljRmllbGRWYWx1ZXM7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgbXkgJER5bmFtaWNGaWVsZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICBGaWVsZEZpbHRlciA9PiAkU2VsZi0+e0NvbmZpZ30tPntEeW5hbWljRmllbGR9IHx8IHt9LAogICAgKTsKCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIGJhY2tlbmQgb2JqZWN0CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBleHRyYWN0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZyb20gdGhlIHdlYiByZXF1ZXN0IGFuZCBhZGQgdGhlIHByZWZpeAogICAgICAgICREeW5hbWljRmllbGRWYWx1ZXN7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9CiAgICAgICAgICAgID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFZhbHVlR2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICk7CiAgICB9CgogICAgIyBzdG9yZSB0aW1lIHJlbGF0ZWQgZmllbGRzIGluICVHZXRQYXJhbQogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntSZXF1ZXN0ZWRUaW1lfSApIHsKICAgICAgICBmb3IgbXkgJFRpbWVQYXJ0IChxdyhVc2VkIFllYXIgTW9udGggRGF5IEhvdXIgTWludXRlKSkgewogICAgICAgICAgICBteSAkUGFyYW1OYW1lID0gJ1JlcXVlc3RlZFRpbWUnIC4gJFRpbWVQYXJ0OwogICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CiAgICAgICAgfQogICAgfQoKICAgICMgUmVtZW1iZXIgdGhlIHJlYXNvbiB3aHkgcGVyZm9ybWluZyB0aGUgc3ViYWN0aW9uIHdhcyBub3QgYXR0ZW1wdGVkLgogICAgbXkgJVZhbGlkYXRpb25FcnJvcjsKCiAgICAjIGtlZXAgQ2hhbmdlU3RhdGVJRCBvbmx5IGlmIGNvbmZpZ3VyZWQKICAgIGlmICggJFNlbGYtPntDb25maWd9LT57Q2hhbmdlU3RhdGV9ICkgewogICAgICAgICRHZXRQYXJhbXtDaGFuZ2VTdGF0ZUlEfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDaGFuZ2VTdGF0ZUlEJyApOwogICAgfQoKICAgICMgZ2V0IHVwbG9hZCBjYWNoZSBvYmplY3QKICAgIG15ICRVcGxvYWRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlJyk7CgogICAgIyBnZXQgZm9ybSBpZAogICAgJFNlbGYtPntGb3JtSUR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Zvcm1JRCcgKTsKCiAgICAjIGNyZWF0ZSBmb3JtIGlkCiAgICBpZiAoICEkU2VsZi0+e0Zvcm1JRH0gKSB7CiAgICAgICAgJFNlbGYtPntGb3JtSUR9ID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURDcmVhdGUoKTsKICAgIH0KCiAgICAjIGdldCB0aW1lIG9iamVjdAogICAgbXkgJFRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpOwoKICAgICMgdXBkYXRlIGNoYW5nZQogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NhdmUnICkgewoKICAgICAgICAjIGNoZWNrIHRoZSB0aXRsZQogICAgICAgIGlmICggISRHZXRQYXJhbXtDaGFuZ2VUaXRsZX0gKSB7CiAgICAgICAgICAgICRWYWxpZGF0aW9uRXJyb3J7Q2hhbmdlVGl0bGVTZXJ2ZXJFcnJvcn0gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBDSVAKICAgICAgICBmb3IgbXkgJFR5cGUgKHF3KENhdGVnb3J5IEltcGFjdCBQcmlvcml0eSkpIHsKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFteyIke1R5cGV9SUQifSB8fCAkR2V0UGFyYW17IiR7VHlwZX1JRCJ9ICF+IG17IFxBIFxkKyBceiB9eG1zICkgewogICAgICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcnsgJFR5cGUgLiAnSURTZXJ2ZXJFcnJvcicgfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBteSAkQ0lQSXNWYWxpZCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUNJUExvb2t1cCgKICAgICAgICAgICAgICAgICAgICBJRCAgID0+ICRHZXRQYXJhbXsiJHtUeXBlfUlEIn0sCiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAkVHlwZSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAhJENJUElzVmFsaWQgKSB7CiAgICAgICAgICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcnsgJFR5cGUgLiAnSURTZXJ2ZXJFcnJvcicgfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgdGhlIHJlcXVlc3RlZCB0aW1lCiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntSZXF1ZXN0ZWRUaW1lfSAmJiAkR2V0UGFyYW17UmVxdWVzdGVkVGltZVVzZWR9ICkgewoKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJEdldFBhcmFte1JlcXVlc3RlZFRpbWVZZWFyfQogICAgICAgICAgICAgICAgJiYgJEdldFBhcmFte1JlcXVlc3RlZFRpbWVNb250aH0KICAgICAgICAgICAgICAgICYmICRHZXRQYXJhbXtSZXF1ZXN0ZWRUaW1lRGF5fQogICAgICAgICAgICAgICAgJiYgZGVmaW5lZCAkR2V0UGFyYW17UmVxdWVzdGVkVGltZUhvdXJ9CiAgICAgICAgICAgICAgICAmJiBkZWZpbmVkICRHZXRQYXJhbXtSZXF1ZXN0ZWRUaW1lTWludXRlfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyB0cmFuc2Zvcm0gY2hhbmdlIHJlcXVlc3RlZCB0aW1lLCB0aW1lIHN0YW1wIGJhc2VkIG9uIHVzZXIgdGltZSB6b25lCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0gPSAkTGF5b3V0T2JqZWN0LT5UcmFuc2Zvcm1EYXRlU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICBQcmVmaXggPT4gJ1JlcXVlc3RlZFRpbWUnLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGZvcm1hdCBhcyB0aW1lc3RhbXAsIHdoZW4gYWxsIHJlcXVpcmVkIHRpbWUgcGFyYW1zIHdlcmUgcGFzc2VkCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17UmVxdWVzdGVkVGltZX0gPSBzcHJpbnRmICclMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6MDAnLAogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtSZXF1ZXN0ZWRUaW1lWWVhcn0sCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1JlcXVlc3RlZFRpbWVNb250aH0sCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1JlcXVlc3RlZFRpbWVEYXl9LAogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtSZXF1ZXN0ZWRUaW1lSG91cn0sCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1JlcXVlc3RlZFRpbWVNaW51dGV9OwoKICAgICAgICAgICAgICAgICMgc2FuaXR5IGNoZWNrIG9mIHRoZSBhc3NlbWJsZWQgdGltZXN0YW1wCiAgICAgICAgICAgICAgICBteSAkU3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEdldFBhcmFte1JlcXVlc3RlZFRpbWV9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGRvIG5vdCBzYXZlIHdoZW4gdGltZSBpcyBpbnZhbGlkCiAgICAgICAgICAgICAgICBpZiAoICEkU3lzdGVtVGltZSApIHsKICAgICAgICAgICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye1JlcXVlc3RlZFRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBpdCB3YXMgaW5kaWNhdGVkIHRoYXQgdGhlIHJlcXVlc3RlZCB0aW1lIHNob3VsZCBiZSBzZXQsCiAgICAgICAgICAgICAgICAjIGJ1dCBhdCBsZWFzdCBvbmUgb2YgdGhlIHJlcXVpcmVkIHRpbWUgcGFyYW1zIGlzIG1pc3NpbmcKICAgICAgICAgICAgICAgICRWYWxpZGF0aW9uRXJyb3J7UmVxdWVzdGVkVGltZUludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICBteSAkVmFsaWRhdGlvblJlc3VsdCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRWYWx1ZVZhbGlkYXRlKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgTWFuZGF0b3J5ICAgICAgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e0R5bmFtaWNGaWVsZH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPT0gMiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCRWYWxpZGF0aW9uUmVzdWx0KSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBwZXJmb3JtIHZhbGlkYXRpb24gb24gZmllbGQgJXMhJywgJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBwcm9wYWdhdGUgdmFsaWRhdGlvbiBlcnJvciB0byB0aGUgRXJyb3IgdmFyaWFibGUgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlIGZyb250ZW5kCiAgICAgICAgICAgIGlmICggJFZhbGlkYXRpb25SZXN1bHQtPntTZXJ2ZXJFcnJvcn0gKSB7CiAgICAgICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9yeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIGFuIGF0dGFjaG1lbnQgbXVzdCBiZSBkZWxldGVkCiAgICAgICAgQVRUQUNITUVOVDoKICAgICAgICBmb3IgbXkgJE51bWJlciAoIDEgLi4gMzIgKSB7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHRoZSBkZWxldGUgYnV0dG9uIHdhcyBwcmVzc2VkIGZvciB0aGlzIGF0dGFjaG1lbnQKICAgICAgICAgICAgbXkgJERlbGV0ZSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICJBdHRhY2htZW50RGVsZXRlJE51bWJlciIgKTsKCiAgICAgICAgICAgICMgY2hlY2sgbmV4dCBhdHRhY2htZW50IGlmIGl0IHdhcyBub3QgcHJlc3NlZAogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISREZWxldGU7CgogICAgICAgICAgICAjIHJlbWVtYmVyIHRoYXQgd2UgbmVlZCB0byBzaG93IHRoZSBwYWdlIGFnYWluCiAgICAgICAgICAgICRWYWxpZGF0aW9uRXJyb3J7QXR0YWNobWVudH0gPSAxOwoKICAgICAgICAgICAgIyByZW1vdmUgdGhlIGF0dGFjaG1lbnQgZnJvbSB0aGUgdXBsb2FkIGNhY2hlCiAgICAgICAgICAgICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlEUmVtb3ZlRmlsZSgKICAgICAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICBGaWxlSUQgPT4gJE51bWJlciwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgdGhlcmUgd2FzIGFuIGF0dGFjaG1lbnQgdXBsb2FkCiAgICAgICAgaWYgKCAkR2V0UGFyYW17QXR0YWNobWVudFVwbG9hZH0gKSB7CgogICAgICAgICAgICAjIHJlbWVtYmVyIHRoYXQgd2UgbmVlZCB0byBzaG93IHRoZSBwYWdlIGFnYWluCiAgICAgICAgICAgICRWYWxpZGF0aW9uRXJyb3J7QXR0YWNobWVudH0gPSAxOwoKICAgICAgICAgICAgIyBnZXQgdGhlIHVwbG9hZGVkIGF0dGFjaG1lbnQKICAgICAgICAgICAgbXkgJVVwbG9hZFN0dWZmID0gJFBhcmFtT2JqZWN0LT5HZXRVcGxvYWRBbGwoCiAgICAgICAgICAgICAgICBQYXJhbSAgPT4gJ0ZpbGVVcGxvYWQnLAogICAgICAgICAgICAgICAgU291cmNlID0+ICdzdHJpbmcnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhZGQgYXR0YWNobWVudCB0byB0aGUgdXBsb2FkIGNhY2hlCiAgICAgICAgICAgICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlEQWRkRmlsZSgKICAgICAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICAlVXBsb2FkU3R1ZmYsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSBvbmx5IHdoZW4gdGhlcmUgYXJlIG5vIGlucHV0IHZhbGlkYXRpb24gZXJyb3JzCiAgICAgICAgaWYgKCAhJVZhbGlkYXRpb25FcnJvciApIHsKCiAgICAgICAgICAgICMgc2V0dGluZyBvZiBjaGFuZ2Ugc3RhdGUgYW5kIHJlcXVlc3RlZCB0aW1lIGlzIGNvbmZpZ3VyYWJsZQogICAgICAgICAgICBteSAlQWRkaXRpb25hbFBhcmFtOwogICAgICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e0NoYW5nZVN0YXRlfSApIHsKICAgICAgICAgICAgICAgICRBZGRpdGlvbmFsUGFyYW17Q2hhbmdlU3RhdGVJRH0gPSAkR2V0UGFyYW17Q2hhbmdlU3RhdGVJRH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntSZXF1ZXN0ZWRUaW1lfSApIHsKICAgICAgICAgICAgICAgICRBZGRpdGlvbmFsUGFyYW17UmVxdWVzdGVkVGltZX0gPSAkR2V0UGFyYW17UmVxdWVzdGVkVGltZX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgdXBkYXRlIHRoZSBjaGFuZ2UKICAgICAgICAgICAgbXkgJENvdWxkVXBkYXRlQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlVXBkYXRlKAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICRHZXRQYXJhbXtEZXNjcmlwdGlvbn0sCiAgICAgICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICRHZXRQYXJhbXtKdXN0aWZpY2F0aW9ufSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJEdldFBhcmFte0NoYW5nZVRpdGxlfSwKICAgICAgICAgICAgICAgIENhdGVnb3J5SUQgICAgPT4gJEdldFBhcmFte0NhdGVnb3J5SUR9LAogICAgICAgICAgICAgICAgSW1wYWN0SUQgICAgICA9PiAkR2V0UGFyYW17SW1wYWN0SUR9LAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCAgICA9PiAkR2V0UGFyYW17UHJpb3JpdHlJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICVBZGRpdGlvbmFsUGFyYW0sCiAgICAgICAgICAgICAgICAlRHluYW1pY0ZpZWxkVmFsdWVzLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyB1cGRhdGUgd2FzIHN1Y2Nlc3NmdWwKICAgICAgICAgICAgaWYgKCRDb3VsZFVwZGF0ZUNoYW5nZSkgewoKICAgICAgICAgICAgICAgICMgZ2V0IGFsbCBhdHRhY2htZW50cyBmcm9tIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAgICAgbXkgQEF0dGFjaG1lbnRzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc0RhdGEoCiAgICAgICAgICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBidWlsZCBhIGxvb2t1cCBsb29rdXAgaGFzaCBvZiB0aGUgbmV3IGF0dGFjaG1lbnRzCiAgICAgICAgICAgICAgICBteSAlTmV3QXR0YWNobWVudDsKICAgICAgICAgICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoQEF0dGFjaG1lbnRzKSB7CgogICAgICAgICAgICAgICAgICAgICMgdGhlIGtleSBpcyB0aGUgZmlsZW5hbWUgKyBmaWxlc2l6ZSArIGNvbnRlbnQgdHlwZQogICAgICAgICAgICAgICAgICAgIG15ICRLZXkgPSAkQXR0YWNobWVudC0+e0ZpbGVuYW1lfQogICAgICAgICAgICAgICAgICAgICAgICAuICRBdHRhY2htZW50LT57RmlsZXNpemV9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJEF0dGFjaG1lbnQtPntDb250ZW50VHlwZX07CgogICAgICAgICAgICAgICAgICAgICMgYXBwZW5kIGNvbnRlbnQgaWQgaWYgYXZhaWxhYmxlIChmb3IgbmV3IGlubGluZSBpbWFnZXMpCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRLZXkgLj0gJEF0dGFjaG1lbnQtPntDb250ZW50SUR9OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSBhbGwgb2YgdGhlIG5ldyBhdHRhY2htZW50IGRhdGEKICAgICAgICAgICAgICAgICAgICAkTmV3QXR0YWNobWVudHskS2V5fSA9ICRBdHRhY2htZW50OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZ2V0IGFsbCBhdHRhY2htZW50cyBtZXRhIGRhdGEKICAgICAgICAgICAgICAgIG15IEBFeGlzdGluZ0F0dGFjaG1lbnRzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQXR0YWNobWVudExpc3QoCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIHRoZSBleGlzdGluZyBhdHRhY2htZW50cwogICAgICAgICAgICAgICAgRklMRU5BTUU6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEZpbGVuYW1lIChARXhpc3RpbmdBdHRhY2htZW50cykgewoKICAgICAgICAgICAgICAgICAgICAjIGdldCB0aGUgZXhpc3RpbmcgYXR0YWNobWVudCBkYXRhCiAgICAgICAgICAgICAgICAgICAgbXkgJEF0dGFjaG1lbnREYXRhID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQXR0YWNobWVudEdldCgKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSA9PiAkRmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGRvIG5vdCBjb25zaWRlciBpbmxpbmUgYXR0YWNobWVudHMKICAgICAgICAgICAgICAgICAgICBuZXh0IEZJTEVOQU1FIGlmICRBdHRhY2htZW50RGF0YS0+e1ByZWZlcmVuY2VzfS0+e0NvbnRlbnRJRH07CgogICAgICAgICAgICAgICAgICAgICMgdGhlIGtleSBpcyB0aGUgZmlsZW5hbWUgKyBmaWxlc2l6ZSArIGNvbnRlbnQgdHlwZQogICAgICAgICAgICAgICAgICAgICMgKG5vIGNvbnRlbnQgaWQsIGFzIGV4aXN0aW5nIGF0dGFjaG1lbnRzIGRvbid0IGhhdmUgaXQpCiAgICAgICAgICAgICAgICAgICAgbXkgJEtleSA9ICRBdHRhY2htZW50RGF0YS0+e0ZpbGVuYW1lfQogICAgICAgICAgICAgICAgICAgICAgICAuICRBdHRhY2htZW50RGF0YS0+e0ZpbGVzaXplfQogICAgICAgICAgICAgICAgICAgICAgICAuICRBdHRhY2htZW50RGF0YS0+e0NvbnRlbnRUeXBlfTsKCiAgICAgICAgICAgICAgICAgICAgIyBhdHRhY2htZW50IGlzIGFscmVhZHkgZXhpc3RpbmcsIHdlIGNhbiBkZWxldGUgaXQgZnJvbSB0aGUgbmV3IGF0dGFjaG1lbnQgaGFzaAogICAgICAgICAgICAgICAgICAgIGlmICggJE5ld0F0dGFjaG1lbnR7JEtleX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkTmV3QXR0YWNobWVudHskS2V5fTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgZXhpc3RpbmcgYXR0YWNobWVudCBpcyBubyBsb25nZXIgaW4gbmV3IGF0dGFjaG1lbnRzIGhhc2gKICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgZGVsZXRlIHRoZSBleGlzdGluZyBhdHRhY2htZW50CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICREZWxldGVTdWNjZXNzZnVsID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQXR0YWNobWVudERlbGV0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVuYW1lID0+ICRGaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJERlbGV0ZVN1Y2Nlc3NmdWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgd3JpdGUgdGhlIG5ldyBhdHRhY2htZW50cwogICAgICAgICAgICAgICAgQVRUQUNITUVOVDoKICAgICAgICAgICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoIHZhbHVlcyAlTmV3QXR0YWNobWVudCApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBpZiBhdHRhY2htZW50IGlzIGFuIGlubGluZSBhdHRhY2htZW50CiAgICAgICAgICAgICAgICAgICAgbXkgJElubGluZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHJlbWVtYmVyIHRoYXQgaXQgaXMgaW5saW5lCiAgICAgICAgICAgICAgICAgICAgICAgICRJbmxpbmUgPSAxOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyByZW1lbWJlciBpZiB0aGlzIGlubGluZSBhdHRhY2htZW50IGlzIHVzZWQgaW4KICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgY2hhbmdlIGRlc2NyaXB0aW9uIG9yIGp1c3RpZmljYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgbXkgJENvbnRlbnRJREZvdW5kOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBjaGFuZ2UgZGVzY3JpcHRpb24gYW5kIGp1c3RpZmljYXRpb24gZm9yIGNvbnRlbnQgaWQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAkR2V0UGFyYW17RGVzY3JpcHRpb259ID1+IG17ICRBdHRhY2htZW50LT57Q29udGVudElEfSB9eG1zICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICggJEdldFBhcmFte0p1c3RpZmljYXRpb259ID1+IG17ICRBdHRhY2htZW50LT57Q29udGVudElEfSB9eG1zICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZm91bmQgdGhlIGNvbnRlbnQgaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDb250ZW50SURGb3VuZCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgd2UgZG8gbm90IHdhbnQgdG8ga2VlcCB0aGlzIGF0dGFjaG1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCB3YXMgZGVsZXRlZCBpbiB0aGUgcmljaHQgdGV4dCBlZGl0b3IKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkQ29udGVudElERm91bmQ7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGFkZCBhdHRhY2htZW50CiAgICAgICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBdHRhY2htZW50QWRkKAogICAgICAgICAgICAgICAgICAgICAgICAleyRBdHRhY2htZW50fSwKICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgICAgICAgICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkSW5saW5lOwogICAgICAgICAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH07CgogICAgICAgICAgICAgICAgICAgICMgcGljdHVyZSB1cmwgaW4gdXBsb2FkIGNhY2hlCiAgICAgICAgICAgICAgICAgICAgbXkgJFNlYXJjaCA9ICJBY3Rpb249UGljdHVyZVVwbG9hZCAuKyBGb3JtSUQ9JFNlbGYtPntGb3JtSUR9IC4rICIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiQ29udGVudElEPSRBdHRhY2htZW50LT57Q29udGVudElEfSI7CgogICAgICAgICAgICAgICAgICAgICMgcGljdHVyZSB1cmwgaW4gY2hhbmdlIGF0dHRhY2htZW50CiAgICAgICAgICAgICAgICAgICAgbXkgJFJlcGxhY2UgPSAiQWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDsiCiAgICAgICAgICAgICAgICAgICAgICAgIC4gIkZpbGVuYW1lPSRBdHRhY2htZW50LT57RmlsZW5hbWV9O0NoYW5nZUlEPSRDaGFuZ2VJRCI7CgogICAgICAgICAgICAgICAgICAgICMgcmVwbGFjZSB1cmxzCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte0Rlc2NyaXB0aW9ufSA9fiBzeyRTZWFyY2h9eyRSZXBsYWNlfXhtczsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17SnVzdGlmaWNhdGlvbn0gPX4gc3skU2VhcmNofXskUmVwbGFjZX14bXM7CgogICAgICAgICAgICAgICAgICAgICMgdXBkYXRlIGNoYW5nZQogICAgICAgICAgICAgICAgICAgICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlVXBkYXRlKAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAkR2V0UGFyYW17RGVzY3JpcHRpb259LAogICAgICAgICAgICAgICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICRHZXRQYXJhbXtKdXN0aWZpY2F0aW9ufSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgICAgICAgICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ291bGQgbm90IHVwZGF0ZSB0aGUgaW5saW5lIGltYWdlIFVSTHMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gImZvciBDaGFuZ2VJRCAnJENoYW5nZUlEJyEhIiwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBkZWxldGUgdGhlIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAgICAgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURSZW1vdmUoIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0gKTsKCiAgICAgICAgICAgICAgICAjIGxvYWQgbmV3IFVSTCBpbiBwYXJlbnQgd2luZG93IGFuZCBjbG9zZSBwb3B1cAogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlBvcHVwQ2xvc2UoCiAgICAgICAgICAgICAgICAgICAgVVJMID0+ICJBY3Rpb249QWdlbnRJVFNNQ2hhbmdlWm9vbTtDaGFuZ2VJRD0kQ2hhbmdlSUQiLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlIScsICRDaGFuZ2VJRCApLAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBoYW5kbGUgQUpBWFVwZGF0ZQogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FKQVhVcGRhdGUnICkgewoKICAgICAgICAjIGdldCBwcmlvcml0aWVzCiAgICAgICAgbXkgJFByaW9yaXRpZXMgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VQb3NzaWJsZUNJUEdldCgKICAgICAgICAgICAgVHlwZSAgID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2VsZWN0ZWQgcHJpb3JpdHkKICAgICAgICBteSAkU2VsZWN0ZWRQcmlvcml0eQogICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ2hhbmdlQ0lQQWxsb2NhdGUnKS0+UHJpb3JpdHlBbGxvY2F0aW9uR2V0KAogICAgICAgICAgICBDYXRlZ29yeUlEID0+ICRHZXRQYXJhbXtDYXRlZ29yeUlEfSwKICAgICAgICAgICAgSW1wYWN0SUQgICA9PiAkR2V0UGFyYW17SW1wYWN0SUR9LAogICAgICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIGpzb24KICAgICAgICBteSAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uSlNPTigKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdQcmlvcml0eUlEJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiAkUHJpb3JpdGllcywKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEICA9PiAkU2VsZWN0ZWRQcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgICAgIE1heCAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKCiAgICAgICAgIyByZXR1cm4ganNvbgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkSlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGRlbGV0ZSBhbGwga2V5cyBmcm9tICVHZXRQYXJhbSB3aGVuIGl0IGlzIG5vIFN1YmFjdGlvbgogICAgZWxzZSB7CgogICAgICAgICVHZXRQYXJhbSA9ICgpOwoKICAgICAgICAjIHNldCB0aGUgY2hhbmdlIHN0YXRlIGZyb20gY2hhbmdlLCBpZiBjb25maWd1cmVkCiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntDaGFuZ2VTdGF0ZX0gKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtDaGFuZ2VTdGF0ZUlEfSA9ICRDaGFuZ2UtPntDaGFuZ2VTdGF0ZUlEfTsKICAgICAgICB9CgogICAgICAgICMgc2V0IHRoZSByZXF1ZXN0ZWQgdGltZSBmcm9tIGNoYW5nZSBpZiBjb25maWd1cmVkCiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntSZXF1ZXN0ZWRUaW1lfSAmJiAkQ2hhbmdlLT57UmVxdWVzdGVkVGltZX0gKSB7CgogICAgICAgICAgICAjIGdldCByZXF1ZXN0ZWQgdGltZSBmcm9tIHRoZSBjaGFuZ2UKICAgICAgICAgICAgbXkgJFN5c3RlbVRpbWUgPSAkVGltZU9iamVjdC0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJENoYW5nZS0+e1JlcXVlc3RlZFRpbWV9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgKCAkU2Vjb25kLCAkTWludXRlLCAkSG91ciwgJERheSwgJE1vbnRoLCAkWWVhciApCiAgICAgICAgICAgICAgICA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMkRhdGUoIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgKTsKCiAgICAgICAgICAgICMgc2V0IHRoZSBwYXJhbWV0ZXIgaGFzaCBmb3IgQnVpbGREYXRlU2VsZWN0aW9uKCkKICAgICAgICAgICAgJEdldFBhcmFte1JlcXVlc3RlZFRpbWVVc2VkfSAgID0gMTsKICAgICAgICAgICAgJEdldFBhcmFte1JlcXVlc3RlZFRpbWVNaW51dGV9ID0gJE1pbnV0ZTsKICAgICAgICAgICAgJEdldFBhcmFte1JlcXVlc3RlZFRpbWVIb3VyfSAgID0gJEhvdXI7CiAgICAgICAgICAgICRHZXRQYXJhbXtSZXF1ZXN0ZWRUaW1lRGF5fSAgICA9ICREYXk7CiAgICAgICAgICAgICRHZXRQYXJhbXtSZXF1ZXN0ZWRUaW1lTW9udGh9ICA9ICRNb250aDsKICAgICAgICAgICAgJEdldFBhcmFte1JlcXVlc3RlZFRpbWVZZWFyfSAgID0gJFllYXI7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgbWV0YSBkYXRhCiAgICAgICAgbXkgQEV4aXN0aW5nQXR0YWNobWVudHMgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBdHRhY2htZW50TGlzdCgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICk7CgogICAgICAgICMgY29weSBhbGwgZXhpc3RpbmcgYXR0YWNobWVudHMgdG8gdXBsb2FkIGNhY2hlCiAgICAgICAgRklMRU5BTUU6CiAgICAgICAgZm9yIG15ICRGaWxlbmFtZSAoQEV4aXN0aW5nQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBleGlzdGluZyBhdHRhY2htZW50IGRhdGEKICAgICAgICAgICAgbXkgJEF0dGFjaG1lbnREYXRhID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQXR0YWNobWVudEdldCgKICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgIEZpbGVuYW1lID0+ICRGaWxlbmFtZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZG8gbm90IGNvbnNpZGVyIGlubGluZSBhdHRhY2htZW50cwogICAgICAgICAgICBuZXh0IEZJTEVOQU1FIGlmICRBdHRhY2htZW50RGF0YS0+e1ByZWZlcmVuY2VzfS0+e0NvbnRlbnRJRH07CgogICAgICAgICAgICAjIGFkZCBhdHRhY2htZW50IHRvIHRoZSB1cGxvYWQgY2FjaGUKICAgICAgICAgICAgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURBZGRGaWxlKAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEF0dGFjaG1lbnREYXRhLT57RmlsZW5hbWV9LAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEF0dGFjaG1lbnREYXRhLT57Q29udGVudH0sCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAkQXR0YWNobWVudERhdGEtPntDb250ZW50VHlwZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgaWYgdGhlcmUgd2FzIGFuIGF0dGFjaG1lbnQgZGVsZXRlIG9yIHVwbG9hZAogICAgIyB3ZSBkbyBub3Qgd2FudCB0byBzaG93IHZhbGlkYXRpb24gZXJyb3JzIGZvciBvdGhlciBmaWVsZHMKICAgIGlmICggJFZhbGlkYXRpb25FcnJvcntBdHRhY2htZW50fSApIHsKICAgICAgICAlVmFsaWRhdGlvbkVycm9yID0gKCk7CiAgICB9CgogICAgIyBjaGVjayBpZiBjaGFuZ2Ugc3RhdGUgaXMgY29uZmlndXJlZAogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntDaGFuZ2VTdGF0ZX0gKSB7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBsaXN0CiAgICAgICAgbXkgJENoYW5nZVBvc3NpYmxlU3RhdGVzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlUG9zc2libGVTdGF0ZXNHZXQoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgZHJvcC1kb3duIHdpdGggY2hhbmdlIHN0YXRlcwogICAgICAgIG15ICRTdGF0ZVNlbGVjdGlvblN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgID0+ICRDaGFuZ2VQb3NzaWJsZVN0YXRlcywKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnQ2hhbmdlU3RhdGVJRCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJEdldFBhcmFte0NoYW5nZVN0YXRlSUR9LAogICAgICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBjaGFuZ2Ugc3RhdGUgZHJvcGRvd24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQ2hhbmdlU3RhdGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFN0YXRlU2VsZWN0aW9uU3RyaW5nID0+ICRTdGF0ZVNlbGVjdGlvblN0cmluZywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICBUaXRsZSA9PiBUcmFuc2xhdGFibGUoJ0VkaXQnKSwKICAgICAgICBUeXBlICA9PiAnU21hbGwnLAogICAgKTsKCiAgICAjIGNoZWNrIGlmIHJlcXVlc3RlZCB0aW1lIHNob3VsZCBiZSBzaG93bgogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntSZXF1ZXN0ZWRUaW1lfSApIHsKCiAgICAgICAgIyB0aW1lIHBlcmlvZCB0aGF0IGNhbiBiZSBzZWxlY3RlZCBmcm9tIHRoZSBHVUkKICAgICAgICBteSAlVGltZVBlcmlvZCA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnSVRTTVdvcmtPcmRlcjo6VGltZVBlcmlvZCcpIH07CgogICAgICAgICMgYWRkIHNlbGVjdGlvbiBmb3IgdGhlIHRpbWUKICAgICAgICBteSAkVGltZVNlbGVjdGlvblN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBGb3JtYXQgICAgICAgICAgICAgICAgPT4gJ0RhdGVJbnB1dEZvcm1hdExvbmcnLAogICAgICAgICAgICBQcmVmaXggICAgICAgICAgICAgICAgPT4gJ1JlcXVlc3RlZFRpbWUnLAogICAgICAgICAgICBSZXF1ZXN0ZWRUaW1lT3B0aW9uYWwgPT4gMSwKICAgICAgICAgICAgUmVxdWVzdGVkVGltZUNsYXNzICAgID0+ICdWYWxpZGF0ZSAnIC4gKCAkVmFsaWRhdGlvbkVycm9ye1JlcXVlc3RlZFRpbWVJbnZhbGlkfSB8fCAnJyApLAogICAgICAgICAgICBWYWxpZGF0ZSAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgJVRpbWVQZXJpb2QsCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IHRpbWUgZmllbGRzCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1JlcXVlc3RlZFRpbWUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICdSZXF1ZXN0ZWRUaW1lU3RyaW5nJyA9PiAkVGltZVNlbGVjdGlvblN0cmluZywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgY3JlYXRlIGRyb3Bkb3duIGZvciB0aGUgY2F0ZWdvcnkKICAgICMgYWxsIGNhdGVnb3JpZXMgYXJlIHNlbGVjdGFibGUKICAgICMgd2hlbiB0aGUgY2F0ZWdvcnkgaXMgY2hhbmdlZCwgYSBuZXcgcHJpb3JpdHkgaXMgcHJvcG9zZWQKICAgIG15ICRDYXRlZ29yaWVzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlUG9zc2libGVDSVBHZXQoCiAgICAgICAgVHlwZSAgID0+ICdDYXRlZ29yeScsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICAkUGFyYW17Q2F0ZWdvcnlTZWxlY3Rpb25TdHJpbmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiAkQ2F0ZWdvcmllcywKICAgICAgICBOYW1lICAgICAgID0+ICdDYXRlZ29yeUlEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbXtDYXRlZ29yeUlEfSB8fCAkQ2hhbmdlLT57Q2F0ZWdvcnlJRH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBjcmVhdGUgZHJvcGRvd24gZm9yIHRoZSBpbXBhY3QKICAgICMgYWxsIGltcGFjdHMgYXJlIHNlbGVjdGFibGUKICAgICMgd2hlbiB0aGUgaW1wYWN0IGlzIGNoYW5nZWQsIGEgbmV3IHByaW9yaXR5IGlzIHByb3Bvc2VkCiAgICBteSAkSW1wYWN0cyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVBvc3NpYmxlQ0lQR2V0KAogICAgICAgIFR5cGUgICA9PiAnSW1wYWN0JywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgICRQYXJhbXtJbXBhY3RTZWxlY3Rpb25TdHJpbmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiAkSW1wYWN0cywKICAgICAgICBOYW1lICAgICAgID0+ICdJbXBhY3RJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17SW1wYWN0SUR9IHx8ICRDaGFuZ2UtPntJbXBhY3RJRH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBjcmVhdGUgZHJvcGRvd24gZm9yIHByaW9yaXR5LAogICAgIyBhbGwgcHJpb3JpdGllcyBhcmUgc2VsZWN0YWJsZQogICAgbXkgJFByaW9yaXRpZXMgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VQb3NzaWJsZUNJUEdldCgKICAgICAgICBUeXBlICAgPT4gJ1ByaW9yaXR5JywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgICRQYXJhbXtQcmlvcml0eVNlbGVjdGlvblN0cmluZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+ICRQcmlvcml0aWVzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1ByaW9yaXR5SUQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJEdldFBhcmFte1ByaW9yaXR5SUR9IHx8ICRDaGFuZ2UtPntQcmlvcml0eUlEfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewoKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBkeW5hbWljIGZpZWxkcyBmcm9tIGNoYW5nZSBpZiBwYWdlIGlzIGxvYWRlZCB0aGUgZmlyc3QgdGltZQogICAgICAgIGlmICggISRTZWxmLT57U3ViYWN0aW9ufSApIHsKICAgICAgICAgICAgJER5bmFtaWNGaWVsZFZhbHVlc3sgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0KICAgICAgICAgICAgICAgID0gJENoYW5nZS0+eyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGZpZWxkIGh0bWwKICAgICAgICBteSAkRHluYW1pY0ZpZWxkSFRNTCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRSZW5kZXIoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJER5bmFtaWNGaWVsZFZhbHVlc3sgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgIFNlcnZlckVycm9yICAgICAgICA9PiAkVmFsaWRhdGlvbkVycm9yeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSB8fCAnJywKICAgICAgICAgICAgTWFuZGF0b3J5ICAgICAgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e0R5bmFtaWNGaWVsZH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPT0gMiwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgIEFKQVhVcGRhdGUgICAgICAgICA9PiAwLAogICAgICAgICk7CgogICAgICAgICMgc2tpcCBmaWVsZHMgdGhhdCBIVE1MIGNvdWxkIG5vdCBiZSByZXRyaWV2ZWQKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZEhUTUwpOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICBMYWJlbCA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgIEZpZWxkID0+ICREeW5hbWljRmllbGRIVE1MLT57RmllbGR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZXhhbXBsZSBvZiBkeW5hbWljIGZpZWxkcyBvcmRlciBjdXN0b21pemF0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgIExhYmVsID0+ICREeW5hbWljRmllbGRIVE1MLT57TGFiZWx9LAogICAgICAgICAgICAgICAgRmllbGQgPT4gJER5bmFtaWNGaWVsZEhUTUwtPntGaWVsZH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgdGhlIGF0dGFjaG1lbnQgdXBsb2FkIGJ1dHRvbgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQXR0YWNobWVudFVwbG9hZCcsCiAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgIyBnZXQgYWxsIGF0dGFjaG1lbnRzIG1ldGEgZGF0YQogICAgbXkgQEF0dGFjaG1lbnRzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc01ldGEoCiAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICk7CgogICAgIyBzaG93IGF0dGFjaG1lbnRzCiAgICBBVFRBQ0hNRU5UOgogICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudHMpIHsKCiAgICAgICAgIyBkbyBub3Qgc2hvdyBpbmxpbmUgaW1hZ2VzIGFzIGF0dGFjaG1lbnRzCiAgICAgICAgIyAodGhleSBoYXZlIGEgY29udGVudCBpZCkKICAgICAgICBpZiAoICRBdHRhY2htZW50LT57Q29udGVudElEfSAmJiAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UOwogICAgICAgIH0KCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0F0dGFjaG1lbnQnLAogICAgICAgICAgICBEYXRhID0+ICRBdHRhY2htZW50LAogICAgICAgICk7CiAgICB9CgogICAgIyBhZGQgcmljaCB0ZXh0IGVkaXRvciBqYXZhc2NyaXB0CiAgICAjIG9ubHkgaWYgYWN0aXZhdGVkIGFuZCB0aGUgYnJvd3NlciBjYW4gaGFuZGxlIGl0CiAgICAjIG90aGVyd2lzZSBqdXN0IGEgdGV4dGFyZWEgaXMgc2hvd24KICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1JpY2hUZXh0JywKICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgfQoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNoYW5nZUVkaXQnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXskQ2hhbmdlfSwKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAlVmFsaWRhdGlvbkVycm9yLAogICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgYWRkIGZvb3RlcgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VIaXN0b3J5OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbmVlZGVkIGNoYW5nZSBpZAogICAgbXkgJENoYW5nZUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NoYW5nZUlEJyApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRDaGFuZ2VJRCApIHsKCiAgICAgICAgIyBlcnJvciBwYWdlCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRDb25maWdPYmplY3QtPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGVycm9yIHNjcmVlbgogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyEnLCAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSApLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY2hhbmdlIGluZm9ybWF0aW9uCiAgICBteSAkQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISRDaGFuZ2UgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlIScsICRDaGFuZ2VJRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGJ1aWxkIGEgbG9va3VwIGhhc2ggd2l0aCBhbGwgd29ya29yZGVyIElEcyBvZiB0aGlzIGNoYW5nZQogICAgbXkgJVdvcmtPcmRlcklETG9va3VwID0gbWFwIHsgJF8gPT4gMSB9IEB7ICRDaGFuZ2UtPntXb3JrT3JkZXJJRHN9IH07CgogICAgIyBnZXQgaGlzdG9yeSBlbnRyaWVzCiAgICBteSAkSGlzdG9yeUVudHJpZXNSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SGlzdG9yeScpLT5DaGFuZ2VIaXN0b3J5R2V0KAogICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApIHx8IFtdOwoKICAgICMgZ2V0IG9yZGVyIGRpcmVjdGlvbgogICAgbXkgQEhpc3RvcnlMaW5lcyA9IEB7JEhpc3RvcnlFbnRyaWVzUmVmfTsKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNQ2hhbmdlOjpGcm9udGVuZDo6SGlzdG9yeU9yZGVyJykgZXEgJ3JldmVyc2UnICkgewogICAgICAgIEBIaXN0b3J5TGluZXMgPSByZXZlcnNlIEB7JEhpc3RvcnlFbnRyaWVzUmVmfTsKICAgIH0KCiAgICAjIG1ha2Ugc29tZSBsb29rdXBzIGluIGFkdmFuY2UgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZQogICAgbXkgJENhY2hlID0ge307CgogICAgIyBnZXQgY29uZGl0aW9uIG9iamVjdAogICAgbXkgJENvbmRpdGlvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJyk7CgogICAgIyBnZXQgdGhlIG9iamVjdCBsaXN0CiAgICAkQ2FjaGUtPntPYmplY3RMaXN0fSA9ICRDb25kaXRpb25PYmplY3QtPk9iamVjdExpc3QoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgdGhlIGF0dHJpYnV0ZSBsaXN0CiAgICAkQ2FjaGUtPntBdHRyaWJ1dGVMaXN0fSA9ICRDb25kaXRpb25PYmplY3QtPkF0dHJpYnV0ZUxpc3QoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgdGhlIG9wZXJhdG9yIGxpc3QKICAgICRDYWNoZS0+e09wZXJhdG9yTGlzdH0gPSAkQ29uZGl0aW9uT2JqZWN0LT5PcGVyYXRvckxpc3QoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBtYXggbGVuZ3RoIG9mIHN0cmluZ3MKICAgIG15ICRNYXhMZW5ndGggPSAzMDsKCiAgICAjIGNyZWF0ZSB0YWJsZQogICAgbXkgJENvdW50ZXIgPSAxOwogICAgSElTVE9SWUVOVFJZOgogICAgZm9yIG15ICRIaXN0b3J5RW50cnkgKEBIaXN0b3J5TGluZXMpIHsKICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICAjIHNldCBmaWVsZG5hbWUgdG8gZW1wdHkgc3RyaW5nIGlmIHRoZXJlIGlzIG5vIGZpZWxkbmFtZQogICAgICAgICRIaXN0b3J5RW50cnktPntGaWVsZG5hbWV9IHx8PSAnJzsKCiAgICAgICAgIyBkbyBub3Qgc2hvdyBpbnRlcm5hbCBlbnRyaWVzIGZyb20gd29ya29yZGVyIG51bWJlciByZWNhbGN1bGF0aW9uCiAgICAgICAgbmV4dCBISVNUT1JZRU5UUlkgaWYgJEhpc3RvcnlFbnRyeS0+e0ZpZWxkbmFtZX0gZXEgJ05vTnVtYmVyQ2FsYyc7CgogICAgICAgICMgZGF0YSBmb3IgYSBzaW5nbGUgcm93LCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZHRsCiAgICAgICAgbXkgJURhdGEgPSAleyRIaXN0b3J5RW50cnl9OwoKICAgICAgICAjIGRldGVybWluZSB3aGF0IHNob3VsZCBiZSBzaG93bgogICAgICAgIG15ICRIaXN0b3J5VHlwZSA9ICRIaXN0b3J5RW50cnktPntIaXN0b3J5VHlwZX07CiAgICAgICAgaWYgKAogICAgICAgICAgICAkSGlzdG9yeVR5cGUgPX4gbXsKICAgICAgICAgICAgICAgIFxBCiAgICAgICAgICAgICAgICAoPzogKD86IENoYW5nZSB8IENoYW5nZUNBQiB8IFdvcmtPcmRlciApIFVwZGF0ZSApCiAgICAgICAgICAgICAgICB8ICg/OiAoPzogQ29uZGl0aW9uIHwgRXhwcmVzc2lvbiB8IEFjdGlvbiApICg/OiBBZGQgfCBVcGRhdGUgfCBEZWxldGUgfCBEZWxldGVBbGwgfCBFeGVjdXRlICkgKQogICAgICAgICAgICAgICAgXHoKICAgICAgICAgICAgfXhtcwogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyBUaGUgZGlzcGxheWVkIGZpZWxkbmFtZSBtaWdodCBiZSBjaGFuZ2VkIGluIHRoZSBmb2xsb3dpbmcgbG9vcAogICAgICAgICAgICBteSAkRGlzcGxheWVkRmllbGRuYW1lID0gJEhpc3RvcnlFbnRyeS0+e0ZpZWxkbmFtZX07CgogICAgICAgICAgICAjIHNldCBkZWZhdWx0IHZhbHVlcyBmb3Igc29tZSBrZXlzCiAgICAgICAgICAgIGZvciBteSAkQ29udGVudE5ld09yT2xkIChxdyhDb250ZW50TmV3IENvbnRlbnRPbGQpKSB7CiAgICAgICAgICAgICAgICBpZiAoICFkZWZpbmVkICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfSApIHsKICAgICAgICAgICAgICAgICAgICAkSGlzdG9yeUVudHJ5LT57JENvbnRlbnROZXdPck9sZH0gPSAnLSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBnZXQgdXNlciBvYmplY3QKICAgICAgICAgICAgICAgICAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgICAgICAgICAgICAgICAgICMgZm9yIHRoZSBJRCBmaWVsZHMsIHdlIHJlcGxhY2UgSUQgd2l0aCBpdHMgdGV4dHVhbCB2YWx1ZQogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgbXkgKCRUeXBlKSA9ICRIaXN0b3J5RW50cnktPntGaWVsZG5hbWV9ID1+IG17CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcQSAgICAgICAgICAjIHN0cmluZyBzdGFydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAgICAgICAgICAgIyBzdGFydCBjYXB0dXJlIG9mICRUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2F0ZWdvcnkgfCBJbXBhY3QgfCBQcmlvcml0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2hhbmdlU3RhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFdvcmtPcmRlclN0YXRlIHwgV29ya09yZGVyVHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgV29ya09yZGVyQWdlbnQgfCBDaGFuZ2VCdWlsZGVyIHwgQ2hhbmdlTWFuYWdlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVmFsaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9iamVjdCB8IEF0dHJpYnV0ZSB8IE9wZXJhdG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApICAgICAgICAgICAjIGVuZCBjYXB0dXJlIG9mICRUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRCAgICAgICAgICAjIHByb2Nlc3Npbmcgb25seSBmb3IgdGhlICdJRCcgZmllbGRzCiAgICAgICAgICAgICAgICAgICAgICAgIH14bXMKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkSGlzdG9yeUVudHJ5LT57JENvbnRlbnROZXdPck9sZH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkVHJhbnNsYXRpb25OZWVkZWQgPSAxOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IHdvcmsgb3JkZXIgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRUeXBlIGVxICdXb3JrT3JkZXJTdGF0ZScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFZhbHVlID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyU3RhdGVMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlSUQgPT4gJEhpc3RvcnlFbnRyeS0+eyRDb250ZW50TmV3T3JPbGR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRUeXBlIGVxICdXb3JrT3JkZXJUeXBlJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVmFsdWUgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJUeXBlTG9va3VwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJUeXBlSUQgPT4gJEhpc3RvcnlFbnRyeS0+eyRDb250ZW50TmV3T3JPbGR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRUeXBlIGVxICdDaGFuZ2VTdGF0ZScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFZhbHVlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU3RhdGVMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJEhpc3RvcnlFbnRyeS0+eyRDb250ZW50TmV3T3JPbGR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFR5cGUgZXEgJ1dvcmtPcmRlckFnZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRUeXBlIGVxICdDaGFuZ2VCdWlsZGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRUeXBlIGVxICdDaGFuZ2VNYW5hZ2VyJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVmFsdWUgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBsb2dpbiBuYW1lcyBhcmUgbm90IHRvIGJlIHRyYW5zbGF0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVHJhbnNsYXRpb25OZWVkZWQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUeXBlIGVxICdDYXRlZ29yeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkVHlwZSBlcSAnSW1wYWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRUeXBlIGVxICdQcmlvcml0eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFZhbHVlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQ0lQTG9va3VwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRCAgID0+ICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAkVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkVHlwZSBlcSAnVmFsaWQnICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGdldCB0aGUgVXBkYXRlSUQgKENvbmRpdGlvbklEIG9yIEV4cHJlc3Npb25JRCBvciBBY3Rpb25JRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCB0aGUgQXR0cmlidXRlSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfSA9fiBteyAlJSB9eG1zICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICRIaXN0b3J5RW50cnktPntVcGRhdGVJRH0sICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfSApID0gc3BsaXQgbS8lJS8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSGlzdG9yeUVudHJ5LT57JENvbnRlbnROZXdPck9sZH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVmFsdWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkSUQgPT4gJEhpc3RvcnlFbnRyeS0+eyRDb250ZW50TmV3T3JPbGR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRUeXBlIGVxICdPYmplY3QnICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGdldCB0aGUgVXBkYXRlSUQgKENvbmRpdGlvbklEIG9yIEV4cHJlc3Npb25JRCBvciBBY3Rpb25JRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCB0aGUgQXR0cmlidXRlSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfSA9fiBteyAlJSB9eG1zICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICRIaXN0b3J5RW50cnktPntVcGRhdGVJRH0sICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfSApID0gc3BsaXQgbS8lJS8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSGlzdG9yeUVudHJ5LT57JENvbnRlbnROZXdPck9sZH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxvb2t1cCB0aGUgb2JqZWN0IG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVmFsdWUgPSAkQ2FjaGUtPntPYmplY3RMaXN0fS0+eyAkSGlzdG9yeUVudHJ5LT57JENvbnRlbnROZXdPck9sZH0gfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRUeXBlIGVxICdBdHRyaWJ1dGUnICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGdldCB0aGUgVXBkYXRlSUQgKENvbmRpdGlvbklEIG9yIEV4cHJlc3Npb25JRCBvciBBY3Rpb25JRCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFuZCB0aGUgQXR0cmlidXRlSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfSA9fiBteyAlJSB9eG1zICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICRIaXN0b3J5RW50cnktPntVcGRhdGVJRH0sICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfSApID0gc3BsaXQgbS8lJS8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSGlzdG9yeUVudHJ5LT57JENvbnRlbnROZXdPck9sZH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxvb2t1cCB0aGUgYXR0cmlidXRlIG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVmFsdWUgPSAkQ2FjaGUtPntBdHRyaWJ1dGVMaXN0fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPnsgJEhpc3RvcnlFbnRyeS0+eyRDb250ZW50TmV3T3JPbGR9IH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRUeXBlIGVxICdPcGVyYXRvcicgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBVcGRhdGVJRCAoQ29uZGl0aW9uSUQgb3IgRXhwcmVzc2lvbklEIG9yIEFjdGlvbklEKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYW5kIHRoZSBBdHRyaWJ1dGVJRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEhpc3RvcnlFbnRyeS0+eyRDb250ZW50TmV3T3JPbGR9ID1+IG17ICUlIH14bXMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggJEhpc3RvcnlFbnRyeS0+e1VwZGF0ZUlEfSwgJEhpc3RvcnlFbnRyeS0+eyRDb250ZW50TmV3T3JPbGR9ICkgPSBzcGxpdCBtLyUlLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbG9va3VwIHRoZSBvcGVyYXRvciBuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFZhbHVlID0gJENhY2hlLT57T3BlcmF0b3JMaXN0fS0+eyAkSGlzdG9yeUVudHJ5LT57JENvbnRlbnROZXdPck9sZH0gfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPlRyYW5zbGF0ZSggJ1Vua25vd24gdHlwZSAiJXMiIGVuY291bnRlcmVkIScsICRUeXBlICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRS5nLiB0aGUgdXNlcm5hbWVzIHNob3VsZCBub3QgYmUgdHJhbnNsYXRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFRyYW5zbGF0ZWRWYWx1ZSA9ICRUcmFuc2xhdGlvbk5lZWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJFZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVmFsdWU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEhpc3RvcnlFbnRyeS0+eyRDb250ZW50TmV3T3JPbGR9ID0gc3ByaW50ZiAnJXMgKElEPSVzKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRyYW5zbGF0ZWRWYWx1ZSwgJEhpc3RvcnlFbnRyeS0+eyRDb250ZW50TmV3T3JPbGR9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEhpc3RvcnlFbnRyeS0+eyRDb250ZW50TmV3T3JPbGR9ID0gJy0nOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBjb250ZW50IGhhcyBjaGFuZ2VkLCBzbyBjaGFuZ2UgdGhlIGRpc3BsYXllZCBmaWVsZG5hbWUgYXMgd2VsbAogICAgICAgICAgICAgICAgICAgICAgICAkRGlzcGxheWVkRmllbGRuYW1lID0gJFR5cGU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEhpc3RvcnlFbnRyeS0+e0ZpZWxkbmFtZX0gZXEgJ0NBQkN1c3RvbWVycycgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIENvbnRlbnROZXcgYW5kIENvbnRlbnRPbGQgY29udGFpbiBhICclJScgc2VwZXJhdGVkIGxpc3Qgb2YgY3VzdG9tZXIgdXNlciBpZHMKICAgICAgICAgICAgICAgICAgICAgICAgIyByZWZvcm1hdCBpdCBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfSA9fiBzeyAlICUgfXssfXhtc2c7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJEhpc3RvcnlFbnRyeS0+e0ZpZWxkbmFtZX0gZXEgJ0NBQkFnZW50cycgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIENvbnRlbnROZXcgYW5kIENvbnRlbnRPbGQgY29udGFpbiBhICclJScgc2VwZXJhdGVkIGxpc3Qgb2YgdXNlciBpZHMKICAgICAgICAgICAgICAgICAgICAgICAgIyBsb29rIHVwIHRoZSBsb2dpbiBuYW1lcyBmcm9tIHRoZSB1c2VyIGlkcyBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgIyBmb3JtYXQgaXQgYXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdAogICAgICAgICAgICAgICAgICAgICAgICBteSBAVXNlcklEcyA9IHNwbGl0IG0vJSUvLCAkSGlzdG9yeUVudHJ5LT57JENvbnRlbnROZXdPck9sZH07CiAgICAgICAgICAgICAgICAgICAgICAgIG15IEBVc2VyTG9naW5zID0gbWFwIHsgJFVzZXJPYmplY3QtPlVzZXJMb29rdXAoIFVzZXJJRCA9PiAkXyApIH0gQFVzZXJJRHM7CiAgICAgICAgICAgICAgICAgICAgICAgICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfSA9IGpvaW4gJywnLCBAVXNlckxvZ2luczsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkSGlzdG9yeUVudHJ5LT57RmllbGRuYW1lfSBlcSAnRXhwcmVzc2lvbkNvbmp1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICB8fCAkSGlzdG9yeUVudHJ5LT57RmllbGRuYW1lfSBlcSAnTmFtZScKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJEhpc3RvcnlFbnRyeS0+e0ZpZWxkbmFtZX0gZXEgJ0NvbW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRIaXN0b3J5RW50cnktPntGaWVsZG5hbWV9IGVxICdTZWxlY3RvcicKICAgICAgICAgICAgICAgICAgICAgICAgfHwgJEhpc3RvcnlFbnRyeS0+e0ZpZWxkbmFtZX0gZXEgJ0FjdGlvblZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICB8fCAkSGlzdG9yeUVudHJ5LT57RmllbGRuYW1lfSBlcSAnQ29tcGFyZVZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXQgdGhlIFVwZGF0ZUlEIChDb25kaXRpb25JRCBvciBFeHByZXNzaW9uSUQgb3IgQWN0aW9uSUQpCiAgICAgICAgICAgICAgICAgICAgICAgICMgYW5kIHRoZSBBdHRyaWJ1dGVJRAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfSA9fiBteyAlJSB9eG1zICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAkSGlzdG9yeUVudHJ5LT57VXBkYXRlSUR9LCAkSGlzdG9yeUVudHJ5LT57JENvbnRlbnROZXdPck9sZH0gKSA9IHNwbGl0IG0vJSUvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyByZXBsYWNlIEhUTUwgYnJlYWtzIHdpdGggc2luZ2xlIHNwYWNlCiAgICAgICAgICAgICAgICAgICAgJEhpc3RvcnlFbnRyeS0+eyRDb250ZW50TmV3T3JPbGR9ID1+IHN7IDwgYnIgXHMqIC8/ID4gfXsgfXhtc2c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgdHJhbnNsYXRlIGZpZWxkbmFtZSBmb3IgZGlzcGxheQogICAgICAgICAgICAkRGlzcGxheWVkRmllbGRuYW1lID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJERpc3BsYXllZEZpZWxkbmFtZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IEhUTUwgdXRpbHMgb2JqZWN0CiAgICAgICAgICAgIG15ICRIVE1MVXRpbHNPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyk7CgogICAgICAgICAgICAjIHRyaW0gc3RyaW5ncyB0byBhIG1heCBsZW5ndGggb2YgJE1heExlbmd0aAogICAgICAgICAgICBteSAkQ29udGVudE5ldyA9ICRIVE1MVXRpbHNPYmplY3QtPlRvQXNjaWkoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEhpc3RvcnlFbnRyeS0+e0NvbnRlbnROZXd9IHx8ICctJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbXkgJENvbnRlbnRPbGQgPSAkSFRNTFV0aWxzT2JqZWN0LT5Ub0FzY2lpKAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICRIaXN0b3J5RW50cnktPntDb250ZW50T2xkfSB8fCAnLScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNob3cgWy4uLl0gZm9yIHRvbyBsb25nIHN0cmluZ3MKICAgICAgICAgICAgZm9yIG15ICRDb250ZW50ICggJENvbnRlbnROZXcsICRDb250ZW50T2xkICkgewogICAgICAgICAgICAgICAgaWYgKCAkQ29udGVudCAmJiAoIGxlbmd0aCAkQ29udGVudCA+ICRNYXhMZW5ndGggKSApIHsKICAgICAgICAgICAgICAgICAgICAkQ29udGVudCA9IHN1YnN0ciggJENvbnRlbnQsIDAsICRNYXhMZW5ndGggKSAuICdbLi4uXSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYnVpbGQgZGVzY3JpcHRpb24gYXJyYXkKICAgICAgICAgICAgbXkgQERlc2NyaXB0aW9uID0gKCAkRGlzcGxheWVkRmllbGRuYW1lIHx8ICcnICk7CgogICAgICAgICAgICAjIGFkZCB0aGUgSUQgb2YgdGhlIENvbmRpdGlvbiwgRXhwcmVzc2lvbiBvciBBY3Rpb24gdGhhdCB3YXMgdXBkYXRlZAogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkSGlzdG9yeVR5cGUgZXEgJ0NvbmRpdGlvblVwZGF0ZScKICAgICAgICAgICAgICAgIHx8ICRIaXN0b3J5VHlwZSBlcSAnRXhwcmVzc2lvblVwZGF0ZScKICAgICAgICAgICAgICAgIHx8ICRIaXN0b3J5VHlwZSBlcSAnQWN0aW9uVXBkYXRlJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoICRIaXN0b3J5RW50cnktPntVcGRhdGVJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBARGVzY3JpcHRpb24sICRIaXN0b3J5RW50cnktPntVcGRhdGVJRH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2V0IGRlc2NyaXB0aW9uCiAgICAgICAgICAgICREYXRhe0NvbnRlbnR9ID0gam9pbiAnJSUnLCBARGVzY3JpcHRpb24sICRDb250ZW50TmV3LCAkQ29udGVudE9sZDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICREYXRhe0NvbnRlbnR9ID0gJEhpc3RvcnlFbnRyeS0+e0NvbnRlbnROZXd9OwogICAgICAgIH0KCiAgICAgICAgIyByZXBsYWNlIHRleHQKICAgICAgICBpZiAoICREYXRhe0NvbnRlbnR9ICkgewoKICAgICAgICAgICAgIyByZW1vdmUgbGVhZGluZyAlJQogICAgICAgICAgICAkRGF0YXtDb250ZW50fSA9fiBzeyBcQSAlJSB9e314bXNnOwoKICAgICAgICAgICAgIyBzcGxpdCB0aGUgY29udGVudCBieSAlJQogICAgICAgICAgICBteSBAVmFsdWVzID0gc3BsaXQgbS8lJS8sICREYXRhe0NvbnRlbnR9OwoKICAgICAgICAgICAgIyBmb3Igd2hhdCBpdGVtIHR5cGUgaXMgdGhpcyBoaXN0b3J5IGVudHJ5CiAgICAgICAgICAgIG15ICRIaXN0b3J5SXRlbVR5cGUgPSAnQ2hhbmdlJzsKICAgICAgICAgICAgaWYgKCAkSGlzdG9yeVR5cGUgPX4gbXsgXEEgV29ya09yZGVyIH14bXMgKSB7CiAgICAgICAgICAgICAgICAkSGlzdG9yeUl0ZW1UeXBlID0gJ1dvcmtPcmRlcic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZm9yIHdvcmtvcmRlciBlbnRyaWVzIHRoYXQgc3RpbGwgZXhpc3RzLCBzaG93IHdvcmtvcmRlcmlkCiAgICAgICAgICAgIG15ICRIaXN0b3J5RW50cnlUeXBlID0gJERhdGF7SGlzdG9yeVR5cGV9OwogICAgICAgICAgICBpZiAoICRIaXN0b3J5RW50cnktPntXb3JrT3JkZXJJRH0gKSB7CiAgICAgICAgICAgICAgICAkSGlzdG9yeUVudHJ5VHlwZSAuPSAnV2l0aFdvcmtPcmRlcklEJzsKICAgICAgICAgICAgICAgIHVuc2hpZnQgQFZhbHVlcywgJEhpc3RvcnlFbnRyeS0+e1dvcmtPcmRlcklEfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBoYW5kbGUgY29uZGl0aW9uIGFkZCB3aXRoIGlkCiAgICAgICAgICAgIGlmICggJEhpc3RvcnlFbnRyeVR5cGUgZXEgJ0NvbmRpdGlvbkFkZCcgJiYgISRIaXN0b3J5RW50cnktPntGaWVsZG5hbWV9ICkgewogICAgICAgICAgICAgICAgJEhpc3RvcnlFbnRyeVR5cGUgLj0gJ0lEJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBoYW5kbGUgZXhwcmVzc2lvbiBhZGQgd2l0aCBpZAogICAgICAgICAgICBpZiAoICRIaXN0b3J5RW50cnlUeXBlIGVxICdFeHByZXNzaW9uQWRkJyAmJiAhJEhpc3RvcnlFbnRyeS0+e0ZpZWxkbmFtZX0gKSB7CiAgICAgICAgICAgICAgICAkSGlzdG9yeUVudHJ5VHlwZSAuPSAnSUQnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGhhbmRsZSBhY3Rpb24gYWRkIHdpdGggaWQKICAgICAgICAgICAgaWYgKCAkSGlzdG9yeUVudHJ5VHlwZSBlcSAnQWN0aW9uQWRkJyAmJiAhJEhpc3RvcnlFbnRyeS0+e0ZpZWxkbmFtZX0gKSB7CiAgICAgICAgICAgICAgICAkSGlzdG9yeUVudHJ5VHlwZSAuPSAnSUQnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHVzZWZ1bCBmb3IgZGVidWdnaW5nLCBjYW4gYmUgYWRkZWQgdG8gZHRsIHRvIHNlZSB0aGUgdW50cmFuc2xhdGVkIG91dHB1dAogICAgICAgICAgICAkRGF0YXtDb250ZW50VW50cmFuc2xhdGVkfSA9ICREYXRhe0NvbnRlbnR9OwoKICAgICAgICAgICAgIyBzaG93ICduaWNlJyBvdXRwdXQgd2l0aCB2YXJpYWJsZSBzdWJzdGl0dXRpb24KICAgICAgICAgICAgJERhdGF7Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAkSGlzdG9yeUl0ZW1UeXBlIC4gJ0hpc3Rvcnk6OicgLiAkSGlzdG9yeUVudHJ5VHlwZSwKICAgICAgICAgICAgICAgIEBWYWx1ZXMsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJlbW92ZSBub3QgbmVlZGVkIHBsYWNlIGhvbGRlcgogICAgICAgICAgICAkRGF0YXtDb250ZW50fSA9fiBzeyAlIHMgfXt9eG1zZzsKICAgICAgICB9CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSb3cnLAogICAgICAgICAgICBEYXRhID0+IHslRGF0YX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IGEgJ21vcmUgaW5mbycgbGluawogICAgICAgIGlmICgKICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgJEhpc3RvcnlFbnRyeS0+e0NvbnRlbnROZXd9CiAgICAgICAgICAgICAgICAmJiBsZW5ndGgoICRIaXN0b3J5RW50cnktPntDb250ZW50TmV3fSApID4gJE1heExlbmd0aAogICAgICAgICAgICApCiAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICRIaXN0b3J5RW50cnktPntDb250ZW50T2xkfQogICAgICAgICAgICAgICAgJiYgbGVuZ3RoKCAkSGlzdG9yeUVudHJ5LT57Q29udGVudE9sZH0gKSA+ICRNYXhMZW5ndGgKICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyBpcyBpdCBhIENoYW5nZUhpc3Rvcnlab29tIG9yIGEgV29ya09yZGVySGlzdG9yeVpvb20/CiAgICAgICAgICAgIG15ICRab29tVHlwZSA9ICdDaGFuZ2UnOwoKICAgICAgICAgICAgaWYgKCAkSGlzdG9yeVR5cGUgPX4gbXsgXEEgV29ya09yZGVyIH14bXMgJiYgJEhpc3RvcnlFbnRyeS0+e1dvcmtPcmRlcklEfSApIHsKICAgICAgICAgICAgICAgICRab29tVHlwZSA9ICdXb3JrT3JkZXInOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNob3cgaGlzdG9yeXpvb20gYmxvY2sKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTaG93SGlzdG9yeVpvb20nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgICAgICAgICAgWm9vbVR5cGUgPT4gJFpvb21UeXBlLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZG9uJ3Qgc2hvdyBhIGxpbmsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdOb0hpc3Rvcnlab29tJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyBsaW5rIHRvIHdvcmtvcmRlciBmb3IgV29ya09yZGVyQWRkIGV2ZW50IC0gaWYgdGhlIHdvcmtvcmRlciBzdGlsbCBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgICRIaXN0b3J5RW50cnktPntIaXN0b3J5VHlwZX0gPX4gbXsgXEEgV29ya09yZGVyIH14bXMKICAgICAgICAgICAgJiYgJEhpc3RvcnlFbnRyeS0+e1dvcmtPcmRlcklEfQogICAgICAgICAgICAmJiAkV29ya09yZGVySURMb29rdXB7ICRIaXN0b3J5RW50cnktPntXb3JrT3JkZXJJRH0gfQogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyBzaG93IGxpbmsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTaG93V29ya09yZGVyWm9vbScsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslRGF0YX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGRvbid0IHNob3cgYW55IGxpbmsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdOb1dvcmtPcmRlclpvb20nLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgVHlwZSAgPT4gJ1NtYWxsJywKICAgICAgICBUaXRsZSA9PiBUcmFuc2xhdGFibGUoJ0NoYW5nZSBIaXN0b3J5JyksCiAgICApOwoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNoYW5nZUhpc3RvcnknLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXskQ2hhbmdlfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb290ZXIKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKAogICAgICAgIFR5cGUgPT4gJ1NtYWxsJywKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VIaXN0b3J5Wm9vbTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lZWRlZCBjaGFuZ2UgaWQKICAgIG15ICRIaXN0b3J5RW50cnlJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdIaXN0b3J5RW50cnlJRCcgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkSGlzdG9yeUVudHJ5SUQgKSB7CgogICAgICAgICMgZXJyb3IgcGFnZQogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0NhblwndCBzaG93IGhpc3Rvcnkgem9vbSwgbm8gSGlzdG9yeUVudHJ5SUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGhpc3RvcnkgZW50cmllcwogICAgbXkgJEhpc3RvcnlFbnRyeSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpIaXN0b3J5JyktPkhpc3RvcnlFbnRyeUdldCgKICAgICAgICBIaXN0b3J5RW50cnlJRCA9PiAkSGlzdG9yeUVudHJ5SUQsCiAgICAgICAgVXNlcklEICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBpZiAoICEkSGlzdG9yeUVudHJ5ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAnSGlzdG9yeUVudHJ5ICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlIScsICRIaXN0b3J5RW50cnlJRAogICAgICAgICAgICApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJENoYW5nZU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgQ2hhbmdlSUQgPT4gJEhpc3RvcnlFbnRyeS0+e0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZXJyb3Igc2NyZWVuCiAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIScsICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259ICksCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2UgaW5mb3JtYXRpb24KICAgIG15ICRDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJEhpc3RvcnlFbnRyeS0+e0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISRDaGFuZ2UgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICdDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlIScsICRIaXN0b3J5RW50cnktPntDaGFuZ2VJRH0KICAgICAgICAgICAgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IGRhc2ggKCctJykgd2hlbiB0aGUgZmllbGQgaXMgZW1wdHkKICAgIGZvciBteSAkRmllbGQgKHF3KENvbnRlbnROZXcgQ29udGVudE9sZCkpIHsKICAgICAgICAkSGlzdG9yeUVudHJ5LT57JEZpZWxkfSB8fD0gJy0nOwogICAgfQoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICBUeXBlICA9PiAnU21hbGwnLAogICAgICAgIFRpdGxlID0+ICdDaGFuZ2VIaXN0b3J5Wm9vbScsCiAgICApOwoKICAgICMgaGFuZGxlIGNvbmRpdGlvbiB1cGRhdGUKICAgIGlmICggJEhpc3RvcnlFbnRyeS0+e0hpc3RvcnlUeXBlfSBlcSAnQ29uZGl0aW9uVXBkYXRlJyApIHsKICAgICAgICAkSGlzdG9yeUVudHJ5LT57Q29udGVudE5ld30gPX4gc3sgXEEgXGQrICUlICguKykgXHogfXskMX14bXM7CiAgICAgICAgJEhpc3RvcnlFbnRyeS0+e0NvbnRlbnRPbGR9ID1+IHN7IFxBIFxkKyAlJSAoLispIFx6IH17JDF9eG1zOwogICAgfQoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7JENoYW5nZX0sCiAgICAgICAgICAgICV7JEhpc3RvcnlFbnRyeX0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9vdGVyCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigKICAgICAgICBUeXBlID0+ICdTbWFsbCcsCiAgICApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIGdldCBuZWVkZWQgQ2hhbmdlSUQKICAgIG15ICRDaGFuZ2VJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDaGFuZ2VJRCcgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkQ2hhbmdlSUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGVycm9yIHNjcmVlbgogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyEnLCAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSApLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY2hhbmdlIGRhdGEKICAgIG15ICRDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBpZiBjaGFuZ2UgaXMgZm91bmQKICAgIGlmICggISRDaGFuZ2UgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnLCAkQ2hhbmdlSUQgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBzdG9yZSBhbGwgbmVlZGVkIHBhcmFtZXRlcnMgaW4gJUdldFBhcmFtIHRvIG1ha2UgaXQgcmVsb2FkYWJsZQogICAgbXkgJUdldFBhcmFtOwogICAgZm9yIG15ICRQYXJhbU5hbWUgKAogICAgICAgIHF3KENoYW5nZUJ1aWxkZXIgQ2hhbmdlQnVpbGRlclNlbGVjdGVkIENoYW5nZU1hbmFnZXIgQ2hhbmdlTWFuYWdlclNlbGVjdGVkCiAgICAgICAgTmV3Q0FCTWVtYmVyIE5ld0NBQk1lbWJlclNlbGVjdGVkIE5ld0NBQk1lbWJlclR5cGUgQ0FCVGVtcGxhdGUgQWRkQ0FCTWVtYmVyCiAgICAgICAgQWRkQ0FCVGVtcGxhdGUgVGVtcGxhdGVJRCBOZXdUZW1wbGF0ZSBTdWJtaXQpCiAgICAgICAgKQogICAgewogICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbU5hbWUgKTsKICAgIH0KCiAgICAjIHNlcnZlciBlcnJvciBoYXNoLCB0byBzdG9yZSB0aGUgaXRlbXMgd2l0aCBTZXJ2ZXJFcnJvciBjbGFzcwogICAgbXkgJVNlcnZlckVycm9yOwoKICAgICMgUmVtZW1iZXIgdGhlIHJlYXNvbiB3aHkgc2F2aW5nIHdhcyBub3QgYXR0ZW1wdGVkLgogICAgIyBUaGUgZW50cmllcyBhcmUgdGhlIG5hbWVzIG9mIHRoZSBkdGwgdmFsaWRhdGlvbiBlcnJvciBibG9ja3MuCiAgICBteSBAVmFsaWRhdGlvbkVycm9yczsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlJyk7CiAgICBteSAkVXNlck9iamVjdCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTYXZlJyApIHsKCiAgICAgICAgIyBnbyB0byBzdG9yZSB0aGUgbmV3IHRlbXBsYXRlCiAgICAgICAgaWYgKCAkR2V0UGFyYW17TmV3VGVtcGxhdGV9ICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50SVRTTUNoYW5nZUNBQlRlbXBsYXRlO0NoYW5nZUlEPSRDaGFuZ2VJRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoYW5nZSBtYW5hZ2VyIGFuZCBjaGFuZ2UgYnVpbGRlciBhcmUgcmVxdWlyZWQgZm9yIGFuIHVwZGF0ZQogICAgICAgIG15ICVFcnJvckFsbFJlcXVpcmVkID0gJFNlbGYtPl9DaGVja0NoYW5nZU1hbmFnZXJBbmRDaGFuZ2VCdWlsZGVyKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyBpcyBjYWIgbWVtYmVyIGRlbGV0ZSByZXF1ZXN0ZWQKICAgICAgICBteSAlRGVsZXRlTWVtYmVyID0gJFNlbGYtPl9Jc01lbWJlckRlbGV0aW9uKAogICAgICAgICAgICBDaGFuZ2UgPT4gJENoYW5nZSwKICAgICAgICApOwoKICAgICAgICAjIHVwZGF0ZSBjaGFuZ2UKICAgICAgICBpZiAoICRHZXRQYXJhbXtBZGRDQUJNZW1iZXJ9ICYmICRHZXRQYXJhbXtOZXdDQUJNZW1iZXJ9ICkgewoKICAgICAgICAgICAgIyBhZGQgYSBtZW1iZXIKICAgICAgICAgICAgbXkgJUNBQlVwZGF0ZUluZm8gPSAkU2VsZi0+X0lzTmV3Q0FCTWVtYmVyT2soCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBDaGFuZ2UgPT4gJENoYW5nZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgaWYgbWVtYmVyIGlzIHZhbGlkCiAgICAgICAgICAgIGlmICglQ0FCVXBkYXRlSW5mbykgewoKICAgICAgICAgICAgICAgICMgdXBkYXRlIGNoYW5nZSBDQUIKICAgICAgICAgICAgICAgIG15ICRDb3VsZFVwZGF0ZUNBQiA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUNBQlVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAlQ0FCVXBkYXRlSW5mbywKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlLT57Q2hhbmdlSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBpZiB1cGRhdGUgd2FzIHN1Y2Nlc3NmdWwKICAgICAgICAgICAgICAgIGlmICgkQ291bGRVcGRhdGVDQUIpIHsKCiAgICAgICAgICAgICAgICAgICAgIyBnZXQgbmV3IGNoYW5nZSBkYXRhIGFzIGEgbWVtYmVyIHdhcyBhZGRlZAogICAgICAgICAgICAgICAgICAgICRDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2UtPntDaGFuZ2VJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGRvIG5vdCBkaXNwbGF5IGEgbmFtZSBpbiBhdXRvY29tcGxldGUgZmllbGQKICAgICAgICAgICAgICAgICAgICAjIGFuZCBkbyBub3Qgc2V0IHZhbHVlcyBpbiBoaWRkZW4gZmllbGRzIGFzIHRoZQogICAgICAgICAgICAgICAgICAgICMgdXNlciB3YXMgYWxyZWFkeSBhZGRlZAogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBAR2V0UGFyYW17cXcoTmV3Q0FCTWVtYmVyIE5ld0NBQk1lbWJlclNlbGVjdGVkIE5ld0NBQk1lbWJlclR5cGUpfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIHNob3cgZXJyb3IgbWVzc2FnZQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBDaGFuZ2UgQ0FCIGZvciBDaGFuZ2UgJXMhJywgJENoYW5nZUlECiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGlmIG1lbWJlciBpcyBpbnZhbGlkCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNlcnZlckVycm9ye05ld0NBQk1lbWJlckVycm9yfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17QWRkQ0FCVGVtcGxhdGV9ICkgewoKICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17VGVtcGxhdGVJRH0gKSB7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgQ0FCIGJhc2VkIG9uIHRoZSB0ZW1wbGF0ZQogICAgICAgICAgICAgICAgbXkgJENyZWF0ZWRJRCA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVEZVNlcmlhbGl6ZSgKICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRHZXRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyByZWRpcmVjdCB0byBpbnZvbHZlZCBwZXJzb24sIHdoZW4gYWRkaW5nIHdhcyBzdWNjZXNzZnVsCiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj1BZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnM7Q2hhbmdlSUQ9JENoYW5nZUlEIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbm90aWZ5IGFib3V0IHRoZSBtaXNzaW5nIHRlbXBsYXRlIGlkCiAgICAgICAgICAgICRTZXJ2ZXJFcnJvcntUZW1wbGF0ZUlERXJyb3J9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCVEZWxldGVNZW1iZXIpIHsKCiAgICAgICAgICAgICMgZmluZCB1c2VycyB3aG8gYXJlIHN0aWxsIG1lbWJlciBvZiBDQUIKICAgICAgICAgICAgbXkgJFR5cGUgPSAkRGVsZXRlTWVtYmVye1R5cGV9OwogICAgICAgICAgICBteSBAU3RpbGxNZW1iZXJzID0gZ3JlcCB7ICRfIG5lICREZWxldGVNZW1iZXJ7SUR9IH0gQHsgJENoYW5nZS0+eyRUeXBlfSB9OwoKICAgICAgICAgICAgIyB1cGRhdGUgQ2hhbmdlQ0FCCiAgICAgICAgICAgIG15ICRDb3VsZFVwZGF0ZUNBQk1lbWJlciA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUNBQlVwZGF0ZSgKICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2UtPntDaGFuZ2VJRH0sCiAgICAgICAgICAgICAgICAkVHlwZSAgICA9PiBcQFN0aWxsTWVtYmVycywKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgc3VjY2Vzc2Z1bCB1cGRhdGUKICAgICAgICAgICAgaWYgKCAhJENvdWxkVXBkYXRlQ0FCTWVtYmVyICkgewoKICAgICAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlCiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICdXYXMgbm90IGFibGUgdG8gdXBkYXRlIENoYW5nZSBDQUIgZm9yIENoYW5nZSAlcyEnLCAkQ2hhbmdlSUQKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IG5ldyBjaGFuZ2UgZGF0YSBhcyBhIG1lbWJlciB3YXMgcmVtb3ZlZAogICAgICAgICAgICAkQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZS0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMganVzdCB1cGRhdGUgY2hhbmdlIHdoZW4gc3VibWl0IGJ1dHRvbiBjbGlja2VkCiAgICAgICAgZWxzaWYgKCAhJUVycm9yQWxsUmVxdWlyZWQgJiYgJEdldFBhcmFte1N1Ym1pdH0gKSB7CgogICAgICAgICAgICAjIHVwZGF0ZSBjaGFuZ2UKICAgICAgICAgICAgbXkgJENhblVwZGF0ZUNoYW5nZSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVVwZGF0ZSgKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICBDaGFuZ2VNYW5hZ2VySUQgPT4gJEdldFBhcmFte0NoYW5nZU1hbmFnZXJTZWxlY3RlZH0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCdWlsZGVySUQgPT4gJEdldFBhcmFte0NoYW5nZUJ1aWxkZXJTZWxlY3RlZH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayBzdWNjZXNzZnVsIHVwZGF0ZQogICAgICAgICAgICBpZiAoJENhblVwZGF0ZUNoYW5nZSkgewoKICAgICAgICAgICAgICAgICMgcmVkaXJlY3QgdG8gY2hhbmdlIHpvb20gbWFzawogICAgICAgICAgICAgICAgIyBsb2FkIG5ldyBVUkwgaW4gcGFyZW50IHdpbmRvdyBhbmQgY2xvc2UgcG9wdXAKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Qb3B1cENsb3NlKAogICAgICAgICAgICAgICAgICAgIFVSTCA9PiAiQWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9JENoYW5nZUlEIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1dhcyBub3QgYWJsZSB0byB1cGRhdGUgQ2hhbmdlICVzIScsICRDaGFuZ2VJRCApLAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc2hvdyBmaWVsZCBlcnJvcnMganVzdCB3aGVuIHN1Ym1pdAogICAgICAgIGVsc2lmICggJUVycm9yQWxsUmVxdWlyZWQgJiYgJEdldFBhcmFte1N1Ym1pdH0gKSB7CgogICAgICAgICAgICAjIHNob3cgZXJyb3IgbWVzc2FnZSBmb3IgY2hhbmdlIGJ1aWxkZXIKICAgICAgICAgICAgaWYgKCAkRXJyb3JBbGxSZXF1aXJlZHtDaGFuZ2VCdWlsZGVyfSApIHsKICAgICAgICAgICAgICAgICRTZXJ2ZXJFcnJvcntDaGFuZ2VCdWlsZGVyRXJyb3J9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UgZm9yIGNoYW5nZSBtYW5hZ2VyCiAgICAgICAgICAgIGlmICggJEVycm9yQWxsUmVxdWlyZWR7Q2hhbmdlTWFuYWdlcn0gKSB7CiAgICAgICAgICAgICAgICAkU2VydmVyRXJyb3J7Q2hhbmdlTWFuYWdlckVycm9yfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdXNlIHRoZSBzZWxlY3RlZCBjaGFuZ2UgYW5kIGJ1aWxkZXIgbWFuYWdlcnMKICAgICAgICBpZiAoICRHZXRQYXJhbXtDaGFuZ2VNYW5hZ2VyU2VsZWN0ZWR9ICkgewogICAgICAgICAgICAkQ2hhbmdlLT57Q2hhbmdlTWFuYWdlcklEfSA9ICRHZXRQYXJhbXtDaGFuZ2VNYW5hZ2VyU2VsZWN0ZWR9OwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkR2V0UGFyYW17Q2hhbmdlQnVpbGRlclNlbGVjdGVkfSApIHsKICAgICAgICAgICAgJENoYW5nZS0+e0NoYW5nZUJ1aWxkZXJJRH0gPSAkR2V0UGFyYW17Q2hhbmdlQnVpbGRlclNlbGVjdGVkfTsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMgaWYgaXQgaXMgbm90ICdTYXZlJyBzdWJhY3Rpb24KICAgIGVsc2UgewoKICAgICAgICAjIGluaXRpYWxpemUgdmFyaWFibGVzCiAgICAgICAgbXkgJENoYW5nZU1hbmFnZXIgPSAnJzsKICAgICAgICBteSAkQ2hhbmdlQnVpbGRlciA9ICcnOwoKICAgICAgICAjIGdldCBjaGFuZ2VtYW5hZ2VyIHN0cmluZwogICAgICAgIGlmICggJENoYW5nZS0+e0NoYW5nZU1hbmFnZXJJRH0gKSB7CgogICAgICAgICAgICAjIGdldCBjaGFuZ2VtYW5hZ2VyIGRhdGEKICAgICAgICAgICAgbXkgJUNoYW5nZU1hbmFnZXJEYXRhID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRDaGFuZ2UtPntDaGFuZ2VNYW5hZ2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCVDaGFuZ2VNYW5hZ2VyRGF0YSkgewoKICAgICAgICAgICAgICAgICMgYnVpbGQgc3RyaW5nIHRvIGRpc3BsYXkKICAgICAgICAgICAgICAgICRDaGFuZ2VNYW5hZ2VyID0gc3ByaW50ZiAnIiVzICVzIiA8JXM+JywKICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlTWFuYWdlckRhdGF7VXNlckZpcnN0bmFtZX0sCiAgICAgICAgICAgICAgICAgICAgJENoYW5nZU1hbmFnZXJEYXRhe1VzZXJMYXN0bmFtZX0sCiAgICAgICAgICAgICAgICAgICAgJENoYW5nZU1hbmFnZXJEYXRhe1VzZXJFbWFpbH07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IGNoYW5nZWJ1aWxkZXIgc3RyaW5nCiAgICAgICAgaWYgKCAkQ2hhbmdlLT57Q2hhbmdlQnVpbGRlcklEfSApIHsKCiAgICAgICAgICAgICMgZ2V0IGNoYW5nZWJ1aWxkZXIgZGF0YQogICAgICAgICAgICBteSAlQ2hhbmdlQnVpbGRlckRhdGEgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJENoYW5nZS0+e0NoYW5nZUJ1aWxkZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJUNoYW5nZUJ1aWxkZXJEYXRhKSB7CgogICAgICAgICAgICAgICAgIyBidWlsZCBzdHJpbmcgdG8gZGlzcGxheQogICAgICAgICAgICAgICAgJENoYW5nZUJ1aWxkZXIgPSBzcHJpbnRmICciJXMgJXMiIDwlcz4nLAogICAgICAgICAgICAgICAgICAgICRDaGFuZ2VCdWlsZGVyRGF0YXtVc2VyRmlyc3RuYW1lfSwKICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlQnVpbGRlckRhdGF7VXNlckxhc3RuYW1lfSwKICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlQnVpbGRlckRhdGF7VXNlckVtYWlsfTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBmaWxsIEdldFBhcmFtIGhhc2gKICAgICAgICAlR2V0UGFyYW0gPSAoCiAgICAgICAgICAgIENoYW5nZU1hbmFnZXIgICA9PiAkQ2hhbmdlTWFuYWdlciwKICAgICAgICAgICAgQ2hhbmdlTWFuYWdlcklEID0+ICRDaGFuZ2UtPntDaGFuZ2VNYW5hZ2VySUR9LAogICAgICAgICAgICBDaGFuZ2VCdWlsZGVyICAgPT4gJENoYW5nZUJ1aWxkZXIsCiAgICAgICAgICAgIENoYW5nZUJ1aWxkZXJJRCA9PiAkQ2hhbmdlLT57Q2hhbmdlQnVpbGRlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBhbGwgYWdlbnQgbWVtYmVycyBvZiBDQUIKICAgIGlmICggQHsgJENoYW5nZS0+e0NBQkFnZW50c30gfSB8fCBAeyAkQ2hhbmdlLT57Q0FCQ3VzdG9tZXJzfSB9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdDQUJNZW1iZXJUYWJsZScgKTsKICAgIH0KCiAgICBVU0VSSUQ6CiAgICBmb3IgbXkgJFVzZXJJRCAoIEB7ICRDaGFuZ2UtPntDQUJBZ2VudHN9IH0gKSB7CgogICAgICAgICMgZ2V0IHVzZXIgZGF0YQogICAgICAgIG15ICVVc2VyRGF0YSA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBuZXh0IGlmIG5vIHVzZXIgZGF0YSBjYW4gYmUgZm91bmQKICAgICAgICBuZXh0IFVTRVJJRCBpZiAhJVVzZXJEYXRhOwoKICAgICAgICAjIGRpc3BsYXkgY2FiIG1lbWJlciBpbmZvCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0NBQk1lbWJlclJvdycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVXNlclR5cGUgICAgICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICAgICAgSW50ZXJuYWxVc2VyVHlwZSA9PiAnQ0FCQWdlbnRzJywKICAgICAgICAgICAgICAgICVVc2VyRGF0YSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGN1c3RvbWVyIHVzZXIgb2JqZWN0CiAgICBteSAkQ3VzdG9tZXJVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpOwoKICAgICMgc2hvdyBhbGwgY3VzdG9tZXIgbWVtYmVycyBvZiBDQUIKICAgIENVU1RPTUVSTE9HSU46CiAgICBmb3IgbXkgJEN1c3RvbWVyTG9naW4gKCBAeyAkQ2hhbmdlLT57Q0FCQ3VzdG9tZXJzfSB9ICkgewoKICAgICAgICAjIGdldCB1c2VyIGRhdGEKICAgICAgICBteSAlQ3VzdG9tZXJVc2VyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgIFVzZXIgID0+ICRDdXN0b21lckxvZ2luLAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgbmV4dCBpZiBubyB1c2VyIGRhdGEgY2FuIGJlIGZvdW5kCiAgICAgICAgbmV4dCBDVVNUT01FUkxPR0lOIGlmICElQ3VzdG9tZXJVc2VyRGF0YTsKCiAgICAgICAgIyBkaXNwbGF5IGNhYiBtZW1iZXIgaW5mbwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDQUJNZW1iZXJSb3cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFVzZXJUeXBlICAgICAgICAgPT4gJ0N1c3RvbWVyJywKICAgICAgICAgICAgICAgIEludGVybmFsVXNlclR5cGUgPT4gJ0NBQkN1c3RvbWVycycsCiAgICAgICAgICAgICAgICAlQ3VzdG9tZXJVc2VyRGF0YSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgY29kZSBhbmQgcmV0dXJuIGJsb2NrcyBmb3IgY2hhbmdlIGJ1aWxkZXIgYW5kIGNoYW5nZSBtYW5hZ2VyIChBZ2VudElUU01Vc2VyU2VhcmNoLmR0bCkKICAgIGZvciBteSAkSXRlbUlEIChxdyhDaGFuZ2VNYW5hZ2VyIENoYW5nZUJ1aWxkZXIpKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1VzZXJTZWFyY2hJbml0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJEl0ZW1JRCwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgIH0KCiAgICAjIHNob3cgdmFsaWRhdGlvbiBlcnJvcnMgaW4gQ0FCVGVtcGxhdGUgYmxvY2sKICAgIG15ICVWYWxpZGF0aW9uRXJyb3JOYW1lczsKICAgIG15ICRUZW1wbGF0ZUVycm9yID0gJyc7CgogICAgJFZhbGlkYXRpb25FcnJvck5hbWVze0BWYWxpZGF0aW9uRXJyb3JzfSA9ICgxKSB4IEBWYWxpZGF0aW9uRXJyb3JzOwoKICAgIGZvciBteSAkQ2hhbmdlVGVtcGxhdGVWYWxpZGF0aW9uRXJyb3IgKHF3KEludmFsaWRUZW1wbGF0ZSkpIHsKICAgICAgICBpZiAoICRWYWxpZGF0aW9uRXJyb3JOYW1lc3skQ2hhbmdlVGVtcGxhdGVWYWxpZGF0aW9uRXJyb3J9ICkgewogICAgICAgICAgICAkU2VydmVyRXJyb3J7VGVtcGxhdGVJREVycm9yfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQogICAgfQoKICAgICMgYnVpbGQgdGVtcGxhdGUgZHJvcGRvd24KICAgIG15ICRUZW1wbGF0ZUxpc3QgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlTGlzdCgKICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBDb21tZW50TGVuZ3RoID0+IDE1LAogICAgICAgIFRlbXBsYXRlVHlwZSAgPT4gJ0NBQicsCiAgICApOwoKICAgIG15ICRUZW1wbGF0ZURyb3BEb3duID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdUZW1wbGF0ZUlEJywKICAgICAgICBEYXRhICAgICAgICAgPT4gJFRlbXBsYXRlTGlzdCwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgc2hvdyBibG9jayB3aXRoIHRlbXBsYXRlIGRyb3Bkb3duCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdDQUJUZW1wbGF0ZScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIENBQlRlbXBsYXRlU3RyZyA9PiAkVGVtcGxhdGVEcm9wRG93biwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGlmIENBQiBNZW1iZXJzIHNob3cgTmV3IFRlbXBsYXRlIEJ1dHRvbgogICAgaWYgKCBAeyAkQ2hhbmdlLT57Q0FCQWdlbnRzfSB9IHx8IEB7ICRDaGFuZ2UtPntDQUJDdXN0b21lcnN9IH0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ05ld1RlbXBsYXRlQnV0dG9uJyApOwogICAgfQoKICAgICMgc2VhcmNoIGluaXQKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0NBQk1lbWJlclNlYXJjaEluaXQnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBJdGVtSUQgPT4gJ05ld0NBQk1lbWJlcicsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGVyIGFuZCBuYXZpZ2F0aW9uCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgIFRpdGxlID0+IFRyYW5zbGF0YWJsZSgnSW52b2x2ZWQgUGVyc29ucycpLAogICAgICAgIFR5cGUgID0+ICdTbWFsbCcsCiAgICApOwoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29ucycsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyRDaGFuZ2V9LAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVTZXJ2ZXJFcnJvciwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb290ZXIKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCBUeXBlID0+ICdTbWFsbCcgKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9Jc01lbWJlckRlbGV0aW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkbyBub3QgZGV0ZWN0IGRlbGV0aW9uIHdoZW4gbm8gc3ViYWN0aW9uIGlzIGdpdmVuCiAgICByZXR1cm4gaWYgISRTZWxmLT57U3ViYWN0aW9ufTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgcmV0dXJuIGlmICEkUGFyYW17Q2hhbmdlfTsKCiAgICAjIGluZm8gYWJvdXQgd2hhdCB0byBkZWxldGUKICAgIG15ICVEZWxldGVJbmZvOwoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgY2hlY2sgcG9zc2libGUgYWdlbnQgaWRzCiAgICBBR0VOVElEOgogICAgZm9yIG15ICRBZ2VudElEICggQHsgJFBhcmFte0NoYW5nZX0tPntDQUJBZ2VudHN9IH0gKSB7CiAgICAgICAgaWYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRGVsZXRlQ0FCQWdlbnRzJyAuICRBZ2VudElEICkgKSB7CgogICAgICAgICAgICAjIHNhdmUgaW5mbwogICAgICAgICAgICAlRGVsZXRlSW5mbyA9ICgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0NBQkFnZW50cycsCiAgICAgICAgICAgICAgICBJRCAgID0+ICRBZ2VudElELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbGFzdCBBR0VOVElEOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICElRGVsZXRlSW5mbyApIHsKCiAgICAgICAgIyBjaGVjayBwb3NzaWJsZSBjdXN0b21lciBpZHMKICAgICAgICBDVVNUT01FUklEOgogICAgICAgIGZvciBteSAkQ3VzdG9tZXJJRCAoIEB7ICRQYXJhbXtDaGFuZ2V9LT57Q0FCQ3VzdG9tZXJzfSB9ICkgewogICAgICAgICAgICBpZiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdEZWxldGVDQUJDdXN0b21lcnMnIC4gJEN1c3RvbWVySUQgKSApIHsKCiAgICAgICAgICAgICAgICAjIHNhdmUgaW5mbwogICAgICAgICAgICAgICAgJURlbGV0ZUluZm8gPSAoCiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnQ0FCQ3VzdG9tZXJzJywKICAgICAgICAgICAgICAgICAgICBJRCAgID0+ICRDdXN0b21lcklELAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBsYXN0IENVU1RPTUVSSUQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICVEZWxldGVJbmZvOwp9CgpzdWIgX0NoZWNrQ2hhbmdlTWFuYWdlckFuZENoYW5nZUJ1aWxkZXIgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIFRoZSBoYXNoIHdpdGggdGhlIGVycm9yIGluZm8gd2lsbCBiZSByZXR1cm5lZC4KICAgIG15ICVFcnJvcnM7CgogICAgUk9MRToKICAgIGZvciBteSAkUm9sZSAocXcoQ2hhbmdlQnVpbGRlciBDaGFuZ2VNYW5hZ2VyKSkgewoKICAgICAgICAjIGNoZWNrIHRoZSByb2xlCiAgICAgICAgaWYgKCAhJFBhcmFteyRSb2xlfSB8fCAhJFBhcmFteyAkUm9sZSAuICdTZWxlY3RlZCcgfSApIHsKICAgICAgICAgICAgJEVycm9yc3skUm9sZX0gPSAxOwogICAgICAgICAgICBuZXh0IFJPTEU7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB1c2VyIGRhdGEKICAgICAgICBteSAlVXNlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFteyAkUm9sZSAuICdTZWxlY3RlZCcgfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgZXJyb3IgaWYgdXNlciBkb2VzIG5vdCBleGlzdAogICAgICAgIGlmICggISVVc2VyICkgewogICAgICAgICAgICAkRXJyb3JzeyRSb2xlfSA9IDE7CiAgICAgICAgICAgIG5leHQgUk9MRTsKICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgd2hldGhlciB0aGUgaW5wdXQgaGFzIGJlZW4gbWFudWFsbHkgZWRpdGVkLgogICAgICAgICMgTG9vayBmb3IgZXhhY3QgbWF0Y2ggYXQgYmVnaW5uaW5nLAogICAgICAgICMgYXMgJFVzZXJ7VXNlckxhc3RuYW1lfSBtaWdodCBjb250YWluIGEgdHJhaWxpbmcgJ291dCBvZiBvZmZpY2UnIG5vdGUuCiAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyB3b24ndCBjYXRjaCBkZWxldGlvbnMgb2YgJFBhcmFteyRSb2xlfSBhdCB0aGUgZW5kLgogICAgICAgIG15ICRDaGVja1N0cmluZyA9IHNwcmludGYgJyIlcyAlcyIgPCVzPicsCiAgICAgICAgICAgICRVc2Vye1VzZXJGaXJzdG5hbWV9LAogICAgICAgICAgICAkVXNlcntVc2VyTGFzdG5hbWV9LAogICAgICAgICAgICAkVXNlcntVc2VyRW1haWx9OwogICAgICAgIGlmICggaW5kZXgoICRDaGVja1N0cmluZywgJFBhcmFteyRSb2xlfSApICE9IDAgKSB7CiAgICAgICAgICAgICRFcnJvcnN7JFJvbGV9ID0gMTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICVFcnJvcnM7Cn0KCnN1YiBfSXNOZXdDQUJNZW1iZXJPayB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICByZXR1cm4gaWYgISRQYXJhbXtDaGFuZ2V9OwoKICAgICMgVGhlIG1lbWJlciBpbmZvIHdpbGwgYmUgcmV0dXJuZWQuCiAgICBteSAlTWVtYmVySW5mbzsKCiAgICAjIENBQkN1c3RvbWVycyBvciBDQUJBZ2VudHM/CiAgICBteSAkTWVtYmVyVHlwZSA9ICRQYXJhbXtOZXdDQUJNZW1iZXJUeXBlfTsKCiAgICAjIGN1cnJlbnQgbWVtYmVycwogICAgbXkgQEN1cnJlbnRNZW1iZXJzOwoKICAgICMgYW4gYWdlbnQgaXMgcmVxdWVzdGVkIHRvIGJlIGFkZGVkCiAgICBpZiAoICRNZW1iZXJUeXBlIGVxICdDQUJBZ2VudHMnICkgewoKICAgICAgICAjIGdldCB1c2VyIG9iamVjdAogICAgICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICAgICAgbXkgJVVzZXIgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17TmV3Q0FCTWVtYmVyU2VsZWN0ZWR9LAogICAgICAgICk7CgogICAgICAgIGlmICglVXNlcikgewoKICAgICAgICAgICAgIyBjaGVjayBjdXJyZW50IHVzZXJzCiAgICAgICAgICAgIFVTRVJJRDoKICAgICAgICAgICAgZm9yIG15ICRVc2VySUQgKCBAeyAkUGFyYW17Q2hhbmdlfS0+eyRNZW1iZXJUeXBlfSB9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHVzZXIgZGF0YQogICAgICAgICAgICAgICAgbXkgJVVzZXJEYXRhID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICAgICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSBpbnZhbGlkIHVzZXJzIGZyb20gQ0FCCiAgICAgICAgICAgICAgICBuZXh0IFVTRVJJRCBpZiAhJFVzZXJEYXRhe1VzZXJJRH07CgogICAgICAgICAgICAgICAgcHVzaCBAQ3VycmVudE1lbWJlcnMsICRVc2VySUQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgQ29tcGFyZSBpbnB1dCB2YWx1ZSB3aXRoIHVzZXIgZGF0YS4KICAgICAgICAgICAgIyBMb29rIGZvciBleGFjdCBtYXRjaCBhdCBiZWdpbm5pbmcsCiAgICAgICAgICAgICMgYXMgJFVzZXJ7VXNlckxhc3RuYW1lfSBtaWdodCBjb250YWluIGEgdHJhaWxpbmcgJ291dCBvZiBvZmZpY2UnIG5vdGUuCiAgICAgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgd29uJ3QgY2F0Y2ggZGVsZXRpb25zIG9mICRQYXJhbXtOZXdDQUJNZW1iZXJ9IGF0IHRoZSBlbmQuCiAgICAgICAgICAgIG15ICRDaGVja1N0cmluZyA9IHNwcmludGYgJyIlcyAlcyIgPCVzPicsCiAgICAgICAgICAgICAgICAkVXNlcntVc2VyRmlyc3RuYW1lfSwKICAgICAgICAgICAgICAgICRVc2Vye1VzZXJMYXN0bmFtZX0sCiAgICAgICAgICAgICAgICAkVXNlcntVc2VyRW1haWx9OwogICAgICAgICAgICBpZiAoIGluZGV4KCAkQ2hlY2tTdHJpbmcsICRQYXJhbXtOZXdDQUJNZW1iZXJ9ICkgPT0gMCApIHsKCiAgICAgICAgICAgICAgICAjIHNhdmUgbWVtYmVyIGluZm9zCiAgICAgICAgICAgICAgICAlTWVtYmVySW5mbyA9ICgKICAgICAgICAgICAgICAgICAgICAkTWVtYmVyVHlwZSA9PiBbIEBDdXJyZW50TWVtYmVycywgJFVzZXJ7VXNlcklEfSBdLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGFuIGN1c3RvbWVyIGlzIHJlcXVlc3RlZCB0byBiZSBhZGRlZAogICAgZWxzZSB7CgogICAgICAgICMgZ2V0IGN1c3RvbWVyIHVzZXIgb2JqZWN0CiAgICAgICAgbXkgJEN1c3RvbWVyVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKTsKCiAgICAgICAgIyBjaGVjayBjdXJyZW50IGN1c3RvbWVyIHVzZXJzCiAgICAgICAgQ1VTVE9NRVJVU0VSOgogICAgICAgIGZvciBteSAkQ3VzdG9tZXJVc2VyICggQHsgJFBhcmFte0NoYW5nZX0tPnskTWVtYmVyVHlwZX0gfSApIHsKCiAgICAgICAgICAgICMgZ2V0IGN1c3RvbWVyIHVzZXIgZGF0YQogICAgICAgICAgICBteSAlQ3VzdG9tZXJVc2VyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgICAgICBVc2VyICA9PiAkQ3VzdG9tZXJVc2VyLAogICAgICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVtb3ZlIGludmFsaWQgY3VzdG9tZXIgdXNlcnMgZnJvbSBDQUIKICAgICAgICAgICAgbmV4dCBDVVNUT01FUlVTRVIgaWYgISVDdXN0b21lclVzZXJEYXRhOwoKICAgICAgICAgICAgcHVzaCBAQ3VycmVudE1lbWJlcnMsICRDdXN0b21lclVzZXI7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIGN1c3RvbWVyIGNhbiBiZSBmb3VuZAogICAgICAgIG15ICVDdXN0b21lclVzZXIgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclNlYXJjaCgKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRQYXJhbXtOZXdDQUJNZW1iZXJTZWxlY3RlZH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkQ3VzdG9tZXJVc2VyeyAkUGFyYW17TmV3Q0FCTWVtYmVyU2VsZWN0ZWR9IH0gKSB7CgogICAgICAgICAgICAjIHNhdmUgbWVtYmVyIGluZm9zCiAgICAgICAgICAgICVNZW1iZXJJbmZvID0gKAogICAgICAgICAgICAgICAgJE1lbWJlclR5cGUgPT4gWyBAQ3VycmVudE1lbWJlcnMsICRQYXJhbXtOZXdDQUJNZW1iZXJTZWxlY3RlZH0gXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICVNZW1iZXJJbmZvOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VNYW5hZ2VyOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJENoYW5nZU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZXJyb3Igc2NyZWVuCiAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIScsICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259ICksCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHN0b3JlIGxhc3Qgc2NyZWVuLCB1c2VkIGZvciBiYWNrbGlua3MKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpLT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5DaGFuZ2VzJywKICAgICAgICBWYWx1ZSAgICAgPT4gJFNlbGYtPntSZXF1ZXN0ZWRVUkx9LAogICAgKTsKCiAgICAjIGdldCBwYXJhbSBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAjIGdldCBzb3J0aW5nIHBhcmFtZXRlcnMKICAgIG15ICRTb3J0QnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnU29ydEJ5JyApCiAgICAgICAgfHwgJFNlbGYtPntDb25maWd9LT57J1NvcnRCeTo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ0NoYW5nZU51bWJlcic7CgogICAgIyBnZXQgb3JkZXJpbmcgcGFyYW1ldGVycwogICAgbXkgJE9yZGVyQnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXJCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydPcmRlcjo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ1VwJzsKCiAgICBteSBAU29ydEJ5QXJyYXkgID0gKCRTb3J0QnkpOwogICAgbXkgQE9yZGVyQnlBcnJheSA9ICgkT3JkZXJCeSk7CgogICAgIyBpbnZlc3RpZ2F0ZSByZWZyZXNoCiAgICBteSAkUmVmcmVzaCA9ICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA/IDYwICogJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9IDogdW5kZWY7CgogICAgIyBzdGFydGluZyB3aXRoIHBhZ2UgLi4uCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCBSZWZyZXNoID0+ICRSZWZyZXNoICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICRMYXlvdXRPYmplY3QtPlByaW50KCBPdXRwdXQgPT4gXCRPdXRwdXQgKTsKICAgICRPdXRwdXQgPSAnJzsKCiAgICAjIGZpbmQgb3V0IHdoaWNoIGNvbHVtbnMgc2hvdWxkIGJlIHNob3duCiAgICBteSBAU2hvd0NvbHVtbnM7CiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e1Nob3dDb2x1bW5zfSApIHsKCiAgICAgICAgIyBnZXQgYWxsIHBvc3NpYmxlIGNvbHVtbnMgZnJvbSBjb25maWcKICAgICAgICBteSAlUG9zc2libGVDb2x1bW4gPSAleyAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gfTsKCiAgICAgICAgIyBnZXQgdGhlIGNvbHVtbiBuYW1lcyB0aGF0IHNob3VsZCBiZSBzaG93bgogICAgICAgIENPTFVNTk5BTUU6CiAgICAgICAgZm9yIG15ICROYW1lICggc29ydCBrZXlzICVQb3NzaWJsZUNvbHVtbiApIHsKICAgICAgICAgICAgbmV4dCBDT0xVTU5OQU1FIGlmICEkUG9zc2libGVDb2x1bW57JE5hbWV9OwogICAgICAgICAgICBwdXNoIEBTaG93Q29sdW1ucywgJE5hbWU7CiAgICAgICAgfQogICAgfQoKICAgICMgdG8gc3RvcmUgdGhlIGZpbHRlcnMKICAgIG15ICVGaWx0ZXJzOwoKICAgICMgc2V0IG90aGVyIGZpbHRlcnMgYmFzZWQgb24gY2hhbmdlIHN0YXRlCiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+eydGaWx0ZXI6OkNoYW5nZVN0YXRlcyd9ICkgewoKICAgICAgICAjIGRlZmluZSBwb3NpdGlvbiBvZiB0aGUgZmlsdGVyIGluIHRoZSBmcm9udGVuZAogICAgICAgIG15ICRQcmlvQ291bnRlciA9IDEwMDA7CgogICAgICAgICMgZ2V0IGFsbCBjaGFuZ2Ugc3RhdGVzIHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgZmlsdGVycwogICAgICAgIENIQU5HRVNUQVRFOgogICAgICAgIGZvciBteSAkQ2hhbmdlU3RhdGUgKCBAeyAkU2VsZi0+e0NvbmZpZ30tPnsnRmlsdGVyOjpDaGFuZ2VTdGF0ZXMnfSB9ICkgewoKICAgICAgICAgICAgIyBkbyBub3QgdXNlIGVtcHR5IGNoYW5nZSBzdGF0ZXMKICAgICAgICAgICAgbmV4dCBDSEFOR0VTVEFURSBpZiAhJENoYW5nZVN0YXRlOwoKICAgICAgICAgICAgIyBjaGVjayBpZiBzdGF0ZSBpcyB2YWxpZCBieSBsb29raW5nIHVwIHRoZSBzdGF0ZSBpZAogICAgICAgICAgICBteSAkQ2hhbmdlU3RhdGVJRCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVN0YXRlTG9va3VwKAogICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGUgPT4gJENoYW5nZVN0YXRlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBkbyBub3QgdXNlIGludmFsaWQgY2hhbmdlIHN0YXRlcwogICAgICAgICAgICBuZXh0IENIQU5HRVNUQVRFIGlmICEkQ2hhbmdlU3RhdGVJRDsKCiAgICAgICAgICAgICMgaW5jcmVhc2UgdGhlIFByaW9Db3VudGVyCiAgICAgICAgICAgICRQcmlvQ291bnRlcisrOwoKICAgICAgICAgICAgIyBhZGQgZmlsdGVyIGZvciB0aGUgY3VycmVudCBjaGFuZ2Ugc3RhdGUKICAgICAgICAgICAgJEZpbHRlcnN7JENoYW5nZVN0YXRlfSA9IHsKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAkQ2hhbmdlU3RhdGUsCiAgICAgICAgICAgICAgICBQcmlvICAgPT4gJFByaW9Db3VudGVyLAogICAgICAgICAgICAgICAgU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VNYW5hZ2VySURzID0+IFsgJFNlbGYtPntVc2VySUR9IF0sCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGVzICAgICA9PiBbJENoYW5nZVN0YXRlXSwKICAgICAgICAgICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFxAU29ydEJ5QXJyYXksCiAgICAgICAgICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBcQE9yZGVyQnlBcnJheSwKICAgICAgICAgICAgICAgICAgICBMaW1pdCAgICAgICAgICAgID0+IDEwMDAsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBmaWx0ZXIgYW5kIHZpZXcgcGFyYW1zCiAgICAkU2VsZi0+e0ZpbHRlcn0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRmlsdGVyJyApIHx8ICdBbGwnOwogICAgJFNlbGYtPntWaWV3fSAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1ZpZXcnICkgICB8fCAnJzsKCiAgICAjIGlmIG9ubHkgb25lIGZpbHRlciBleGlzdHMKICAgIGlmICggc2NhbGFyIGtleXMgJUZpbHRlcnMgPT0gMSApIHsKCiAgICAgICAgIyBnZXQgdGhlIG5hbWUgb2YgdGhlIG9ubHkgZmlsdGVyCiAgICAgICAgbXkgKCRGaWx0ZXJOYW1lKSA9IGtleXMgJUZpbHRlcnM7CgogICAgICAgICMgYWN0aXZhdGUgdGhpcyBmaWx0ZXIKICAgICAgICAkU2VsZi0+e0ZpbHRlcn0gPSAkRmlsdGVyTmFtZTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGFkZCBkZWZhdWx0IGZpbHRlcgogICAgICAgICRGaWx0ZXJze0FsbH0gPSB7CiAgICAgICAgICAgIE5hbWUgICA9PiAnQWxsJywKICAgICAgICAgICAgUHJpbyAgID0+IDEwMDAsCiAgICAgICAgICAgIFNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VNYW5hZ2VySURzID0+IFsgJFNlbGYtPntVc2VySUR9IF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZXMgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+eydGaWx0ZXI6OkNoYW5nZVN0YXRlcyd9LAogICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBcQFNvcnRCeUFycmF5LAogICAgICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBcQE9yZGVyQnlBcnJheSwKICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgPT4gMTAwMCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICB9LAogICAgICAgIH07CiAgICB9CgogICAgIyBjaGVjayBpZiBmaWx0ZXIgaXMgdmFsaWQKICAgIGlmICggISRGaWx0ZXJzeyAkU2VsZi0+e0ZpbHRlcn0gfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0ludmFsaWQgRmlsdGVyOiAlcyEnLCAkU2VsZi0+e0ZpbHRlcn0gKSwKICAgICAgICApOwogICAgfQoKICAgICMgc2VhcmNoIGNoYW5nZXMgd2hpY2ggbWF0Y2ggdGhlIHNlbGVjdGVkIGZpbHRlcgogICAgbXkgJENoYW5nZUlEc1JlZiA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVNlYXJjaCgKICAgICAgICAleyAkRmlsdGVyc3sgJFNlbGYtPntGaWx0ZXJ9IH0tPntTZWFyY2h9IH0sCiAgICApOwoKICAgICMgZGlzcGxheSBhbGwgbmF2YmFyIGZpbHRlcnMKICAgIG15ICVOYXZCYXJGaWx0ZXI7CiAgICBmb3IgbXkgJEZpbHRlciAoIHNvcnQga2V5cyAlRmlsdGVycyApIHsKCiAgICAgICAgIyBjb3VudCB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgZm9yIGVhY2ggZmlsdGVyCiAgICAgICAgbXkgJENvdW50ID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgICAgICAleyAkRmlsdGVyc3skRmlsdGVyfS0+e1NlYXJjaH0gfSwKICAgICAgICAgICAgUmVzdWx0ID0+ICdDT1VOVCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBkaXNwbGF5IHRoZSBuYXZiYXIgZmlsdGVyCiAgICAgICAgJE5hdkJhckZpbHRlcnsgJEZpbHRlcnN7JEZpbHRlcn0tPntQcmlvfSB9ID0gewogICAgICAgICAgICBDb3VudCAgPT4gJENvdW50LAogICAgICAgICAgICBGaWx0ZXIgPT4gJEZpbHRlciwKICAgICAgICAgICAgJXsgJEZpbHRlcnN7JEZpbHRlcn0gfSwKICAgICAgICB9OwogICAgfQoKICAgICMgc2hvdyBjaGFuZ2VzCiAgICBteSAkTGlua1BhZ2UgPSAnRmlsdGVyPScKICAgICAgICAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntGaWx0ZXJ9ICkKICAgICAgICAuICc7Vmlldz0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAuICc7U29ydEJ5PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTb3J0QnkgKQogICAgICAgIC4gJztPcmRlckJ5PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRPcmRlckJ5ICkKICAgICAgICAuICc7JzsKICAgIG15ICRMaW5rU29ydCA9ICdGaWx0ZXI9JwogICAgICAgIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e0ZpbHRlcn0gKQogICAgICAgIC4gJztWaWV3PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57Vmlld30gKQogICAgICAgIC4gJzsnOwogICAgbXkgJExpbmtGaWx0ZXIgPSAnU29ydEJ5PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTb3J0QnkgKQogICAgICAgIC4gJztPcmRlckJ5PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRPcmRlckJ5ICkKICAgICAgICAuICc7Vmlldz0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAuICc7JzsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+SVRTTUNoYW5nZUxpc3RTaG93KAoKICAgICAgICBDaGFuZ2VJRHMgPT4gJENoYW5nZUlEc1JlZiwKICAgICAgICBUb3RhbCAgICAgPT4gc2NhbGFyIEB7JENoYW5nZUlEc1JlZn0sCgogICAgICAgIFZpZXcgPT4gJFNlbGYtPntWaWV3fSwKCiAgICAgICAgRmlsdGVyICAgICA9PiAkU2VsZi0+e0ZpbHRlcn0sCiAgICAgICAgRmlsdGVycyAgICA9PiBcJU5hdkJhckZpbHRlciwKICAgICAgICBGaWx0ZXJMaW5rID0+ICRMaW5rRmlsdGVyLAoKICAgICAgICBUaXRsZU5hbWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdPdmVydmlldzogQ2hhbmdlTWFuYWdlcicpLAoKICAgICAgICBUaXRsZVZhbHVlID0+ICRTZWxmLT57RmlsdGVyfSwKCiAgICAgICAgRW52ICAgICAgPT4gJFNlbGYsCiAgICAgICAgTGlua1BhZ2UgPT4gJExpbmtQYWdlLAogICAgICAgIExpbmtTb3J0ID0+ICRMaW5rU29ydCwKCiAgICAgICAgU2hvd0NvbHVtbnMgPT4gXEBTaG93Q29sdW1ucywKICAgICAgICBTb3J0QnkgICAgICA9PiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTb3J0QnkgKSwKICAgICAgICBPcmRlckJ5ICAgICA9PiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRPcmRlckJ5ICksCiAgICApOwoKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VNeUNBQjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBjaGVjayBwZXJtaXNzaW9ucwogICAgbXkgJEFjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgVHlwZSAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgIEFjdGlvbiA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGVycm9yIHNjcmVlbgogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyEnLCAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSApLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBzdG9yZSBsYXN0IHNjcmVlbiwgdXNlZCBmb3IgYmFja2xpbmtzCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0aFNlc3Npb24nKS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuQ2hhbmdlcycsCiAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57UmVxdWVzdGVkVVJMfSwKICAgICk7CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgc29ydGluZyBwYXJhbWV0ZXJzCiAgICBteSAkU29ydEJ5ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NvcnRCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydTb3J0Qnk6OkRlZmF1bHQnfQogICAgICAgIHx8ICdDaGFuZ2VOdW1iZXInOwoKICAgICMgZ2V0IG9yZGVyaW5nIHBhcmFtZXRlcnMKICAgIG15ICRPcmRlckJ5ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ09yZGVyQnknICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnT3JkZXI6OkRlZmF1bHQnfQogICAgICAgIHx8ICdVcCc7CgogICAgbXkgQFNvcnRCeUFycmF5ICA9ICgkU29ydEJ5KTsKICAgIG15IEBPcmRlckJ5QXJyYXkgPSAoJE9yZGVyQnkpOwoKICAgICMgaW52ZXN0aWdhdGUgcmVmcmVzaAogICAgbXkgJFJlZnJlc2ggPSAkU2VsZi0+e1VzZXJSZWZyZXNoVGltZX0gPyA2MCAqICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA6IHVuZGVmOwoKICAgICMgc3RhcnRpbmcgd2l0aCBwYWdlIC4uLgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlciggUmVmcmVzaCA9PiAkUmVmcmVzaCApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAkTGF5b3V0T2JqZWN0LT5QcmludCggT3V0cHV0ID0+IFwkT3V0cHV0ICk7CiAgICAkT3V0cHV0ID0gJyc7CgogICAgIyBmaW5kIG91dCB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSBzaG93bgogICAgbXkgQFNob3dDb2x1bW5zOwogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gKSB7CgogICAgICAgICMgZ2V0IGFsbCBwb3NzaWJsZSBjb2x1bW5zIGZyb20gY29uZmlnCiAgICAgICAgbXkgJVBvc3NpYmxlQ29sdW1uID0gJXsgJFNlbGYtPntDb25maWd9LT57U2hvd0NvbHVtbnN9IH07CgogICAgICAgICMgZ2V0IHRoZSBjb2x1bW4gbmFtZXMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgICAgICBDT0xVTU5OQU1FOgogICAgICAgIGZvciBteSAkTmFtZSAoIHNvcnQga2V5cyAlUG9zc2libGVDb2x1bW4gKSB7CiAgICAgICAgICAgIG5leHQgQ09MVU1OTkFNRSBpZiAhJFBvc3NpYmxlQ29sdW1ueyROYW1lfTsKICAgICAgICAgICAgcHVzaCBAU2hvd0NvbHVtbnMsICROYW1lOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRvIHN0b3JlIHRoZSBmaWx0ZXJzCiAgICBteSAlRmlsdGVyczsKCiAgICAjIHNldCBvdGhlciBmaWx0ZXJzIGJhc2VkIG9uIGNoYW5nZSBzdGF0ZQogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPnsnRmlsdGVyOjpDaGFuZ2VTdGF0ZXMnfSApIHsKCiAgICAgICAgIyBkZWZpbmUgcG9zaXRpb24gb2YgdGhlIGZpbHRlciBpbiB0aGUgZnJvbnRlbmQKICAgICAgICBteSAkUHJpb0NvdW50ZXIgPSAxMDAwOwoKICAgICAgICAjIGdldCBhbGwgY2hhbmdlIHN0YXRlcyB0aGF0IHNob3VsZCBiZSB1c2VkIGFzIGZpbHRlcnMKICAgICAgICBDSEFOR0VTVEFURToKICAgICAgICBmb3IgbXkgJENoYW5nZVN0YXRlICggQHsgJFNlbGYtPntDb25maWd9LT57J0ZpbHRlcjo6Q2hhbmdlU3RhdGVzJ30gfSApIHsKCiAgICAgICAgICAgICMgZG8gbm90IHVzZSBlbXB0eSBjaGFuZ2Ugc3RhdGVzCiAgICAgICAgICAgIG5leHQgQ0hBTkdFU1RBVEUgaWYgISRDaGFuZ2VTdGF0ZTsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgc3RhdGUgaXMgdmFsaWQgYnkgbG9va2luZyB1cCB0aGUgc3RhdGUgaWQKICAgICAgICAgICAgbXkgJENoYW5nZVN0YXRlSUQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VTdGF0ZUxvb2t1cCgKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlID0+ICRDaGFuZ2VTdGF0ZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZG8gbm90IHVzZSBpbnZhbGlkIGNoYW5nZSBzdGF0ZXMKICAgICAgICAgICAgbmV4dCBDSEFOR0VTVEFURSBpZiAhJENoYW5nZVN0YXRlSUQ7CgogICAgICAgICAgICAjIGluY3JlYXNlIHRoZSBQcmlvQ291bnRlcgogICAgICAgICAgICAkUHJpb0NvdW50ZXIrKzsKCiAgICAgICAgICAgICMgYWRkIGZpbHRlciBmb3IgdGhlIGN1cnJlbnQgY2hhbmdlIHN0YXRlCiAgICAgICAgICAgICRGaWx0ZXJzeyRDaGFuZ2VTdGF0ZX0gPSB7CiAgICAgICAgICAgICAgICBOYW1lICAgPT4gJENoYW5nZVN0YXRlLAogICAgICAgICAgICAgICAgUHJpbyAgID0+ICRQcmlvQ291bnRlciwKICAgICAgICAgICAgICAgIFNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ0FCQWdlbnRzICAgICAgICA9PiBbICRTZWxmLT57VXNlcklEfSBdLAogICAgICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlcyAgICAgPT4gWyRDaGFuZ2VTdGF0ZV0sCiAgICAgICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBcQFNvcnRCeUFycmF5LAogICAgICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gXEBPcmRlckJ5QXJyYXksCiAgICAgICAgICAgICAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAxMDAwLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgZmlsdGVyIGFuZCB2aWV3IHBhcmFtcwogICAgJFNlbGYtPntGaWx0ZXJ9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbHRlcicgKSB8fCAnQWxsJzsKICAgICRTZWxmLT57Vmlld30gICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdWaWV3JyApICAgfHwgJyc7CgogICAgIyBpZiBvbmx5IG9uZSBmaWx0ZXIgZXhpc3RzCiAgICBpZiAoIHNjYWxhciBrZXlzICVGaWx0ZXJzID09IDEgKSB7CgogICAgICAgICMgZ2V0IHRoZSBuYW1lIG9mIHRoZSBvbmx5IGZpbHRlcgogICAgICAgIG15ICgkRmlsdGVyTmFtZSkgPSBrZXlzICVGaWx0ZXJzOwoKICAgICAgICAjIGFjdGl2YXRlIHRoaXMgZmlsdGVyCiAgICAgICAgJFNlbGYtPntGaWx0ZXJ9ID0gJEZpbHRlck5hbWU7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBhZGQgZGVmYXVsdCBmaWx0ZXIKICAgICAgICAkRmlsdGVyc3tBbGx9ID0gewogICAgICAgICAgICBOYW1lICAgPT4gJ0FsbCcsCiAgICAgICAgICAgIFByaW8gICA9PiAxMDAwLAogICAgICAgICAgICBTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgQ0FCQWdlbnRzICAgICAgICA9PiBbICRTZWxmLT57VXNlcklEfSBdLAogICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGVzICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPnsnRmlsdGVyOjpDaGFuZ2VTdGF0ZXMnfSwKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gXEBTb3J0QnlBcnJheSwKICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gXEBPcmRlckJ5QXJyYXksCiAgICAgICAgICAgICAgICBMaW1pdCAgICAgICAgICAgID0+IDEwMDAsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9OwogICAgfQoKICAgICMgY2hlY2sgaWYgZmlsdGVyIGlzIHZhbGlkCiAgICBpZiAoICEkRmlsdGVyc3sgJFNlbGYtPntGaWx0ZXJ9IH0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdJbnZhbGlkIEZpbHRlcjogJXMhJywgJFNlbGYtPntGaWx0ZXJ9ICksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNlYXJjaCBjaGFuZ2VzIHdoaWNoIG1hdGNoIHRoZSBzZWxlY3RlZCBmaWx0ZXIKICAgIG15ICRDaGFuZ2VJRHNSZWYgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VTZWFyY2goCiAgICAgICAgJXsgJEZpbHRlcnN7ICRTZWxmLT57RmlsdGVyfSB9LT57U2VhcmNofSB9LAogICAgKTsKCiAgICAjIGRpc3BsYXkgYWxsIG5hdmJhciBmaWx0ZXJzCiAgICBteSAlTmF2QmFyRmlsdGVyOwogICAgZm9yIG15ICRGaWx0ZXIgKCBzb3J0IGtleXMgJUZpbHRlcnMgKSB7CgogICAgICAgICMgY291bnQgdGhlIG51bWJlciBvZiBjaGFuZ2VzIGZvciBlYWNoIGZpbHRlcgogICAgICAgIG15ICRDb3VudCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVNlYXJjaCgKICAgICAgICAgICAgJXsgJEZpbHRlcnN7JEZpbHRlcn0tPntTZWFyY2h9IH0sCiAgICAgICAgICAgIFJlc3VsdCA9PiAnQ09VTlQnLAogICAgICAgICk7CgogICAgICAgICMgZGlzcGxheSB0aGUgbmF2YmFyIGZpbHRlcgogICAgICAgICROYXZCYXJGaWx0ZXJ7ICRGaWx0ZXJzeyRGaWx0ZXJ9LT57UHJpb30gfSA9IHsKICAgICAgICAgICAgQ291bnQgID0+ICRDb3VudCwKICAgICAgICAgICAgRmlsdGVyID0+ICRGaWx0ZXIsCiAgICAgICAgICAgICV7ICRGaWx0ZXJzeyRGaWx0ZXJ9IH0sCiAgICAgICAgfTsKICAgIH0KCiAgICAjIHNob3cgY2hhbmdlcwogICAgbXkgJExpbmtQYWdlID0gJ0ZpbHRlcj0nCiAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57RmlsdGVyfSApCiAgICAgICAgLiAnO1ZpZXc9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntWaWV3fSApCiAgICAgICAgLiAnO1NvcnRCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU29ydEJ5ICkKICAgICAgICAuICc7T3JkZXJCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkT3JkZXJCeSApCiAgICAgICAgLiAnOyc7CiAgICBteSAkTGlua1NvcnQgPSAnRmlsdGVyPScKICAgICAgICAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntGaWx0ZXJ9ICkKICAgICAgICAuICc7Vmlldz0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAuICc7JzsKICAgIG15ICRMaW5rRmlsdGVyID0gJ1NvcnRCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU29ydEJ5ICkKICAgICAgICAuICc7T3JkZXJCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkT3JkZXJCeSApCiAgICAgICAgLiAnO1ZpZXc9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntWaWV3fSApCiAgICAgICAgLiAnOyc7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPklUU01DaGFuZ2VMaXN0U2hvdygKCiAgICAgICAgQ2hhbmdlSURzID0+ICRDaGFuZ2VJRHNSZWYsCiAgICAgICAgVG90YWwgICAgID0+IHNjYWxhciBAeyRDaGFuZ2VJRHNSZWZ9LAoKICAgICAgICBWaWV3ID0+ICRTZWxmLT57Vmlld30sCgogICAgICAgIEZpbHRlciAgICAgPT4gJFNlbGYtPntGaWx0ZXJ9LAogICAgICAgIEZpbHRlcnMgICAgPT4gXCVOYXZCYXJGaWx0ZXIsCiAgICAgICAgRmlsdGVyTGluayA9PiAkTGlua0ZpbHRlciwKCiAgICAgICAgVGl0bGVOYW1lICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ092ZXJ2aWV3OiBNeSBDQUInKSwKICAgICAgICBUaXRsZVZhbHVlID0+ICRTZWxmLT57RmlsdGVyfSwKCiAgICAgICAgRW52ICAgICAgPT4gJFNlbGYsCiAgICAgICAgTGlua1BhZ2UgPT4gJExpbmtQYWdlLAogICAgICAgIExpbmtTb3J0ID0+ICRMaW5rU29ydCwKCiAgICAgICAgU2hvd0NvbHVtbnMgPT4gXEBTaG93Q29sdW1ucywKICAgICAgICBTb3J0QnkgICAgICA9PiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTb3J0QnkgKSwKICAgICAgICBPcmRlckJ5ICAgICA9PiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRPcmRlckJ5ICksCiAgICApOwoKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VNeUNoYW5nZXM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMhJywgJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0gKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgc3RvcmUgbGFzdCBzY3JlZW4sIHVzZWQgZm9yIGJhY2tsaW5rcwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyktPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlbkNoYW5nZXMnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IHNvcnRpbmcgcGFyYW1ldGVycwogICAgbXkgJFNvcnRCeSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTb3J0QnknICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnU29ydEJ5OjpEZWZhdWx0J30KICAgICAgICB8fCAnUGxhbm5lZFN0YXJ0VGltZSc7CgogICAgIyBnZXQgb3JkZXJpbmcgcGFyYW1ldGVycwogICAgbXkgJE9yZGVyQnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXJCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydPcmRlcjo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ1VwJzsKCiAgICBteSBAU29ydEJ5QXJyYXkgID0gKCRTb3J0QnkpOwogICAgbXkgQE9yZGVyQnlBcnJheSA9ICgkT3JkZXJCeSk7CgogICAgIyBpbnZlc3RpZ2F0ZSByZWZyZXNoCiAgICBteSAkUmVmcmVzaCA9ICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA/IDYwICogJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9IDogdW5kZWY7CgogICAgIyBzdGFydGluZyB3aXRoIHBhZ2UgLi4uCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCBSZWZyZXNoID0+ICRSZWZyZXNoICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICRMYXlvdXRPYmplY3QtPlByaW50KCBPdXRwdXQgPT4gXCRPdXRwdXQgKTsKICAgICRPdXRwdXQgPSAnJzsKCiAgICAjIGZpbmQgb3V0IHdoaWNoIGNvbHVtbnMgc2hvdWxkIGJlIHNob3duCiAgICBteSBAU2hvd0NvbHVtbnM7CiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e1Nob3dDb2x1bW5zfSApIHsKCiAgICAgICAgIyBnZXQgYWxsIHBvc3NpYmxlIGNvbHVtbnMgZnJvbSBjb25maWcKICAgICAgICBteSAlUG9zc2libGVDb2x1bW4gPSAleyAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gfTsKCiAgICAgICAgIyBnZXQgdGhlIGNvbHVtbiBuYW1lcyB0aGF0IHNob3VsZCBiZSBzaG93bgogICAgICAgIENPTFVNTk5BTUU6CiAgICAgICAgZm9yIG15ICROYW1lICggc29ydCBrZXlzICVQb3NzaWJsZUNvbHVtbiApIHsKICAgICAgICAgICAgbmV4dCBDT0xVTU5OQU1FIGlmICEkUG9zc2libGVDb2x1bW57JE5hbWV9OwogICAgICAgICAgICBwdXNoIEBTaG93Q29sdW1ucywgJE5hbWU7CiAgICAgICAgfQogICAgfQoKICAgICMgdG8gc3RvcmUgdGhlIGZpbHRlcnMKICAgIG15ICVGaWx0ZXJzOwoKICAgICMgc2V0IG90aGVyIGZpbHRlcnMgYmFzZWQgb24gY2hhbmdlIHN0YXRlCiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+eydGaWx0ZXI6OkNoYW5nZVN0YXRlcyd9ICkgewoKICAgICAgICAjIGRlZmluZSBwb3NpdGlvbiBvZiB0aGUgZmlsdGVyIGluIHRoZSBmcm9udGVuZAogICAgICAgIG15ICRQcmlvQ291bnRlciA9IDEwMDA7CgogICAgICAgICMgZ2V0IGFsbCBjaGFuZ2Ugc3RhdGVzIHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgZmlsdGVycwogICAgICAgIENIQU5HRVNUQVRFOgogICAgICAgIGZvciBteSAkQ2hhbmdlU3RhdGUgKCBAeyAkU2VsZi0+e0NvbmZpZ30tPnsnRmlsdGVyOjpDaGFuZ2VTdGF0ZXMnfSB9ICkgewoKICAgICAgICAgICAgIyBkbyBub3QgdXNlIGVtcHR5IGNoYW5nZSBzdGF0ZXMKICAgICAgICAgICAgbmV4dCBDSEFOR0VTVEFURSBpZiAhJENoYW5nZVN0YXRlOwoKICAgICAgICAgICAgIyBjaGVjayBpZiBzdGF0ZSBpcyB2YWxpZCBieSBsb29raW5nIHVwIHRoZSBzdGF0ZSBpZAogICAgICAgICAgICBteSAkQ2hhbmdlU3RhdGVJRCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVN0YXRlTG9va3VwKAogICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGUgPT4gJENoYW5nZVN0YXRlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBkbyBub3QgdXNlIGludmFsaWQgY2hhbmdlIHN0YXRlcwogICAgICAgICAgICBuZXh0IENIQU5HRVNUQVRFIGlmICEkQ2hhbmdlU3RhdGVJRDsKCiAgICAgICAgICAgICMgaW5jcmVhc2UgdGhlIFByaW9Db3VudGVyCiAgICAgICAgICAgICRQcmlvQ291bnRlcisrOwoKICAgICAgICAgICAgIyBhZGQgZmlsdGVyIGZvciB0aGUgY3VycmVudCBjaGFuZ2Ugc3RhdGUKICAgICAgICAgICAgJEZpbHRlcnN7JENoYW5nZVN0YXRlfSA9IHsKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAkQ2hhbmdlU3RhdGUsCiAgICAgICAgICAgICAgICBQcmlvICAgPT4gJFByaW9Db3VudGVyLAogICAgICAgICAgICAgICAgU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VCdWlsZGVySURzID0+IFsgJFNlbGYtPntVc2VySUR9IF0sCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGVzICAgICA9PiBbJENoYW5nZVN0YXRlXSwKICAgICAgICAgICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFxAU29ydEJ5QXJyYXksCiAgICAgICAgICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBcQE9yZGVyQnlBcnJheSwKICAgICAgICAgICAgICAgICAgICBMaW1pdCAgICAgICAgICAgID0+IDEwMDAsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBmaWx0ZXIgYW5kIHZpZXcgcGFyYW1zCiAgICAkU2VsZi0+e0ZpbHRlcn0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRmlsdGVyJyApIHx8ICdBbGwnOwogICAgJFNlbGYtPntWaWV3fSAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1ZpZXcnICkgICB8fCAnJzsKCiAgICAjIGlmIG9ubHkgb25lIGZpbHRlciBleGlzdHMKICAgIGlmICggc2NhbGFyIGtleXMgJUZpbHRlcnMgPT0gMSApIHsKCiAgICAgICAgIyBnZXQgdGhlIG5hbWUgb2YgdGhlIG9ubHkgZmlsdGVyCiAgICAgICAgbXkgKCRGaWx0ZXJOYW1lKSA9IGtleXMgJUZpbHRlcnM7CgogICAgICAgICMgYWN0aXZhdGUgdGhpcyBmaWx0ZXIKICAgICAgICAkU2VsZi0+e0ZpbHRlcn0gPSAkRmlsdGVyTmFtZTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGFkZCBkZWZhdWx0IGZpbHRlcgogICAgICAgICRGaWx0ZXJze0FsbH0gPSB7CiAgICAgICAgICAgIE5hbWUgICA9PiAnQWxsJywKICAgICAgICAgICAgUHJpbyAgID0+IDEwMDAsCiAgICAgICAgICAgIFNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VCdWlsZGVySURzID0+IFsgJFNlbGYtPntVc2VySUR9IF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZXMgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+eydGaWx0ZXI6OkNoYW5nZVN0YXRlcyd9LAogICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBcQFNvcnRCeUFycmF5LAogICAgICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBcQE9yZGVyQnlBcnJheSwKICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgPT4gMTAwMCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICB9LAogICAgICAgIH07CiAgICB9CgogICAgIyBjaGVjayBpZiBmaWx0ZXIgaXMgdmFsaWQKICAgIGlmICggISRGaWx0ZXJzeyAkU2VsZi0+e0ZpbHRlcn0gfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0ludmFsaWQgRmlsdGVyOiAlcyEnLCAkU2VsZi0+e0ZpbHRlcn0gKSwKICAgICAgICApOwogICAgfQoKICAgICMgc2VhcmNoIGNoYW5nZXMgd2hpY2ggbWF0Y2ggdGhlIHNlbGVjdGVkIGZpbHRlcgogICAgbXkgJENoYW5nZUlEc1JlZiA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVNlYXJjaCgKICAgICAgICAleyAkRmlsdGVyc3sgJFNlbGYtPntGaWx0ZXJ9IH0tPntTZWFyY2h9IH0sCiAgICApOwoKICAgICMgZGlzcGxheSBhbGwgbmF2YmFyIGZpbHRlcnMKICAgIG15ICVOYXZCYXJGaWx0ZXI7CiAgICBmb3IgbXkgJEZpbHRlciAoIHNvcnQga2V5cyAlRmlsdGVycyApIHsKCiAgICAgICAgIyBjb3VudCB0aGUgbnVtYmVyIG9mIGNoYW5nZXMgZm9yIGVhY2ggZmlsdGVyCiAgICAgICAgbXkgJENvdW50ID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgICAgICAleyAkRmlsdGVyc3skRmlsdGVyfS0+e1NlYXJjaH0gfSwKICAgICAgICAgICAgUmVzdWx0ID0+ICdDT1VOVCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBkaXNwbGF5IHRoZSBuYXZiYXIgZmlsdGVyCiAgICAgICAgJE5hdkJhckZpbHRlcnsgJEZpbHRlcnN7JEZpbHRlcn0tPntQcmlvfSB9ID0gewogICAgICAgICAgICBDb3VudCAgPT4gJENvdW50LAogICAgICAgICAgICBGaWx0ZXIgPT4gJEZpbHRlciwKICAgICAgICAgICAgJXsgJEZpbHRlcnN7JEZpbHRlcn0gfSwKICAgICAgICB9OwogICAgfQoKICAgICMgc2hvdyBjaGFuZ2VzCiAgICBteSAkTGlua1BhZ2UgPSAnRmlsdGVyPScKICAgICAgICAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntGaWx0ZXJ9ICkKICAgICAgICAuICc7Vmlldz0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAuICc7U29ydEJ5PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTb3J0QnkgKQogICAgICAgIC4gJztPcmRlckJ5PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRPcmRlckJ5ICkKICAgICAgICAuICc7JzsKICAgIG15ICRMaW5rU29ydCA9ICdGaWx0ZXI9JwogICAgICAgIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e0ZpbHRlcn0gKQogICAgICAgIC4gJztWaWV3PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57Vmlld30gKQogICAgICAgIC4gJzsnOwogICAgbXkgJExpbmtGaWx0ZXIgPSAnU29ydEJ5PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTb3J0QnkgKQogICAgICAgIC4gJztPcmRlckJ5PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRPcmRlckJ5ICkKICAgICAgICAuICc7Vmlldz0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAuICc7JzsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+SVRTTUNoYW5nZUxpc3RTaG93KAoKICAgICAgICBDaGFuZ2VJRHMgPT4gJENoYW5nZUlEc1JlZiwKICAgICAgICBUb3RhbCAgICAgPT4gc2NhbGFyIEB7JENoYW5nZUlEc1JlZn0sCgogICAgICAgIFZpZXcgPT4gJFNlbGYtPntWaWV3fSwKCiAgICAgICAgRmlsdGVyICAgICA9PiAkU2VsZi0+e0ZpbHRlcn0sCiAgICAgICAgRmlsdGVycyAgICA9PiBcJU5hdkJhckZpbHRlciwKICAgICAgICBGaWx0ZXJMaW5rID0+ICRMaW5rRmlsdGVyLAoKICAgICAgICBUaXRsZU5hbWUgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdPdmVydmlldzogTXkgQ2hhbmdlcycpLAoKICAgICAgICBUaXRsZVZhbHVlID0+ICRTZWxmLT57RmlsdGVyfSwKCiAgICAgICAgRW52ICAgICAgPT4gJFNlbGYsCiAgICAgICAgTGlua1BhZ2UgPT4gJExpbmtQYWdlLAogICAgICAgIExpbmtTb3J0ID0+ICRMaW5rU29ydCwKCiAgICAgICAgU2hvd0NvbHVtbnMgPT4gXEBTaG93Q29sdW1ucywKICAgICAgICBTb3J0QnkgICAgICA9PiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTb3J0QnkgKSwKICAgICAgICBPcmRlckJ5ICAgICA9PiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRPcmRlckJ5ICksCiAgICApOwoKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VNeVdvcmtPcmRlcnM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMhJywgJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0gKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgc3RvcmUgbGFzdCBzY3JlZW4sIHVzZWQgZm9yIGJhY2tsaW5rcwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyktPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlbldvcmtPcmRlcnMnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IHNvcnRpbmcgcGFyYW1ldGVycwogICAgbXkgJFNvcnRCeSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTb3J0QnknICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnU29ydEJ5OjpEZWZhdWx0J30KICAgICAgICB8fCAnUGxhbm5lZFN0YXJ0VGltZSc7CgogICAgIyBnZXQgb3JkZXJpbmcgcGFyYW1ldGVycwogICAgbXkgJE9yZGVyQnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXJCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydPcmRlcjo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ1VwJzsKCiAgICBteSBAU29ydEJ5QXJyYXkgID0gKCRTb3J0QnkpOwogICAgbXkgQE9yZGVyQnlBcnJheSA9ICgkT3JkZXJCeSk7CgogICAgIyBzb3J0IGJ5IGNoYW5nZSBudW1iZXIgZmlyc3QgaWYgdXNlciB3YW50cyB0byBzb3J0IGJ5IHdvcmtvcmRlciBudW1iZXIKICAgIGlmICggJFNvcnRCeSBlcSAnV29ya09yZGVyTnVtYmVyJyApIHsKICAgICAgICBAU29ydEJ5QXJyYXkgPSAoICdDaGFuZ2VOdW1iZXInLCAnV29ya09yZGVyTnVtYmVyJyApOwogICAgICAgIEBPcmRlckJ5QXJyYXkgPSAoICRPcmRlckJ5LCAkT3JkZXJCeSApOwogICAgfQoKICAgICMgaW52ZXN0aWdhdGUgcmVmcmVzaAogICAgbXkgJFJlZnJlc2ggPSAkU2VsZi0+e1VzZXJSZWZyZXNoVGltZX0gPyA2MCAqICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA6IHVuZGVmOwoKICAgICMgc3RhcnRpbmcgd2l0aCBwYWdlIC4uLgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlciggUmVmcmVzaCA9PiAkUmVmcmVzaCApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAkTGF5b3V0T2JqZWN0LT5QcmludCggT3V0cHV0ID0+IFwkT3V0cHV0ICk7CiAgICAkT3V0cHV0ID0gJyc7CgogICAgIyBmaW5kIG91dCB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSBzaG93bgogICAgbXkgQFNob3dDb2x1bW5zOwogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gKSB7CgogICAgICAgICMgZ2V0IGFsbCBwb3NzaWJsZSBjb2x1bW5zIGZyb20gY29uZmlnCiAgICAgICAgbXkgJVBvc3NpYmxlQ29sdW1uID0gJXsgJFNlbGYtPntDb25maWd9LT57U2hvd0NvbHVtbnN9IH07CgogICAgICAgICMgZ2V0IHRoZSBjb2x1bW4gbmFtZXMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgICAgICBDT0xVTU5OQU1FOgogICAgICAgIGZvciBteSAkTmFtZSAoIHNvcnQga2V5cyAlUG9zc2libGVDb2x1bW4gKSB7CiAgICAgICAgICAgIG5leHQgQ09MVU1OTkFNRSBpZiAhJFBvc3NpYmxlQ29sdW1ueyROYW1lfTsKICAgICAgICAgICAgcHVzaCBAU2hvd0NvbHVtbnMsICROYW1lOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRvIHN0b3JlIHRoZSBmaWx0ZXJzCiAgICBteSAlRmlsdGVyczsKCiAgICAjIGdldCB3b3JrIG9yZGVyIG9iamVjdAogICAgbXkgJFdvcmtPcmRlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyk7CgogICAgIyBzZXQgb3RoZXIgZmlsdGVycyBiYXNlZCBvbiB3b3Jrb3JkZXIgc3RhdGUKICAgIGlmICggJFNlbGYtPntDb25maWd9LT57J0ZpbHRlcjo6V29ya09yZGVyU3RhdGVzJ30gKSB7CgogICAgICAgICMgZGVmaW5lIHBvc2l0aW9uIG9mIHRoZSBmaWx0ZXIgaW4gdGhlIGZyb250ZW5kCiAgICAgICAgbXkgJFByaW9Db3VudGVyID0gMTAwMDsKCiAgICAgICAgIyBnZXQgYWxsIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyBmaWx0ZXJzCiAgICAgICAgV09SS09SREVSU1RBVEU6CiAgICAgICAgZm9yIG15ICRXb3JrT3JkZXJTdGF0ZSAoIEB7ICRTZWxmLT57Q29uZmlnfS0+eydGaWx0ZXI6OldvcmtPcmRlclN0YXRlcyd9IH0gKSB7CgogICAgICAgICAgICAjIGRvIG5vdCB1c2UgZW1wdHkgd29ya29yZGVyIHN0YXRlcwogICAgICAgICAgICBuZXh0IFdPUktPUkRFUlNUQVRFIGlmICEkV29ya09yZGVyU3RhdGU7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHN0YXRlIGlzIHZhbGlkIGJ5IGxvb2tpbmcgdXAgdGhlIHN0YXRlIGlkCiAgICAgICAgICAgIG15ICRXb3JrT3JkZXJTdGF0ZUlEID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyU3RhdGVMb29rdXAoCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZSA9PiAkV29ya09yZGVyU3RhdGUsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRvIG5vdCB1c2UgaW52YWxpZCB3b3Jrb3JkZXIgc3RhdGVzCiAgICAgICAgICAgIG5leHQgV09SS09SREVSU1RBVEUgaWYgISRXb3JrT3JkZXJTdGF0ZUlEOwoKICAgICAgICAgICAgIyBpbmNyZWFzZSB0aGUgUHJpb0NvdW50ZXIKICAgICAgICAgICAgJFByaW9Db3VudGVyKys7CgogICAgICAgICAgICAjIGFkZCBmaWx0ZXIgZm9yIHRoZSBjdXJyZW50IHdvcmtvcmRlciBzdGF0ZQogICAgICAgICAgICAkRmlsdGVyc3skV29ya09yZGVyU3RhdGV9ID0gewogICAgICAgICAgICAgICAgTmFtZSAgID0+ICRXb3JrT3JkZXJTdGF0ZSwKICAgICAgICAgICAgICAgIFByaW8gICA9PiAkUHJpb0NvdW50ZXIsCiAgICAgICAgICAgICAgICBTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgICAgIFdvcmtPcmRlckFnZW50SURzID0+IFsgJFNlbGYtPntVc2VySUR9IF0sCiAgICAgICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGVzICAgPT4gWyRXb3JrT3JkZXJTdGF0ZV0sCiAgICAgICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICAgPT4gXEBTb3J0QnlBcnJheSwKICAgICAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uICA9PiBcQE9yZGVyQnlBcnJheSwKICAgICAgICAgICAgICAgICAgICBMaW1pdCAgICAgICAgICAgICA9PiAxMDAwLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGZpbHRlciBhbmQgdmlldyBwYXJhbXMKICAgICRTZWxmLT57RmlsdGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGaWx0ZXInICkgfHwgJ0FsbCc7CiAgICAkU2VsZi0+e1ZpZXd9ICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVmlldycgKSAgIHx8ICcnOwoKICAgICMgaWYgb25seSBvbmUgZmlsdGVyIGV4aXN0cwogICAgaWYgKCBzY2FsYXIga2V5cyAlRmlsdGVycyA9PSAxICkgewoKICAgICAgICAjIGdldCB0aGUgbmFtZSBvZiB0aGUgb25seSBmaWx0ZXIKICAgICAgICBteSAoJEZpbHRlck5hbWUpID0ga2V5cyAlRmlsdGVyczsKCiAgICAgICAgIyBhY3RpdmF0ZSB0aGlzIGZpbHRlcgogICAgICAgICRTZWxmLT57RmlsdGVyfSA9ICRGaWx0ZXJOYW1lOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgYWRkIGRlZmF1bHQgZmlsdGVyCiAgICAgICAgJEZpbHRlcnN7QWxsfSA9IHsKICAgICAgICAgICAgTmFtZSAgID0+ICdBbGwnLAogICAgICAgICAgICBQcmlvICAgPT4gMTAwMCwKICAgICAgICAgICAgU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFdvcmtPcmRlckFnZW50SURzID0+IFsgJFNlbGYtPntVc2VySUR9IF0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZXMgICA9PiAkU2VsZi0+e0NvbmZpZ30tPnsnRmlsdGVyOjpXb3JrT3JkZXJTdGF0ZXMnfSwKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgID0+IFxAU29ydEJ5QXJyYXksCiAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uICA9PiBcQE9yZGVyQnlBcnJheSwKICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgID0+IDEwMDAsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGZpbHRlciBpcyB2YWxpZAogICAgaWYgKCAhJEZpbHRlcnN7ICRTZWxmLT57RmlsdGVyfSB9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnSW52YWxpZCBGaWx0ZXI6ICVzIScsICRTZWxmLT57RmlsdGVyfSApLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZWFyY2ggd29ya29yZGVycyB3aGljaCBtYXRjaCB0aGUgc2VsZWN0ZWQgZmlsdGVyCiAgICBteSAkV29ya09yZGVySURzUmVmID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyU2VhcmNoKAogICAgICAgICV7ICRGaWx0ZXJzeyAkU2VsZi0+e0ZpbHRlcn0gfS0+e1NlYXJjaH0gfSwKICAgICk7CgogICAgIyBkaXNwbGF5IGFsbCBuYXZiYXIgZmlsdGVycwogICAgbXkgJU5hdkJhckZpbHRlcjsKICAgIGZvciBteSAkRmlsdGVyICggc29ydCBrZXlzICVGaWx0ZXJzICkgewoKICAgICAgICAjIGNvdW50IHRoZSBudW1iZXIgb2Ygd29ya29yZGVycyBmb3IgZWFjaCBmaWx0ZXIKICAgICAgICBteSAkQ291bnQgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJTZWFyY2goCiAgICAgICAgICAgICV7ICRGaWx0ZXJzeyRGaWx0ZXJ9LT57U2VhcmNofSB9LAogICAgICAgICAgICBSZXN1bHQgPT4gJ0NPVU5UJywKICAgICAgICApOwoKICAgICAgICAjIGRpc3BsYXkgdGhlIG5hdmJhciBmaWx0ZXIKICAgICAgICAkTmF2QmFyRmlsdGVyeyAkRmlsdGVyc3skRmlsdGVyfS0+e1ByaW99IH0gPSB7CiAgICAgICAgICAgIENvdW50ICA9PiAkQ291bnQsCiAgICAgICAgICAgIEZpbHRlciA9PiAkRmlsdGVyLAogICAgICAgICAgICAleyAkRmlsdGVyc3skRmlsdGVyfSB9LAogICAgICAgIH07CiAgICB9CgogICAgIyBzaG93IGNoYW5nZXMKICAgIG15ICRMaW5rUGFnZSA9ICdGaWx0ZXI9JwogICAgICAgIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e0ZpbHRlcn0gKQogICAgICAgIC4gJztWaWV3PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57Vmlld30gKQogICAgICAgIC4gJztTb3J0Qnk9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNvcnRCeSApCiAgICAgICAgLiAnO09yZGVyQnk9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJE9yZGVyQnkgKQogICAgICAgIC4gJzsnOwogICAgbXkgJExpbmtTb3J0ID0gJ0ZpbHRlcj0nCiAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57RmlsdGVyfSApCiAgICAgICAgLiAnO1ZpZXc9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntWaWV3fSApCiAgICAgICAgLiAnOyc7CiAgICBteSAkTGlua0ZpbHRlciA9ICdTb3J0Qnk9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNvcnRCeSApCiAgICAgICAgLiAnO09yZGVyQnk9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJE9yZGVyQnkgKQogICAgICAgIC4gJztWaWV3PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57Vmlld30gKQogICAgICAgIC4gJzsnOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5JVFNNQ2hhbmdlTGlzdFNob3coCgogICAgICAgIFdvcmtPcmRlcklEcyA9PiAkV29ya09yZGVySURzUmVmLAogICAgICAgIFRvdGFsICAgICAgICA9PiBzY2FsYXIgQHskV29ya09yZGVySURzUmVmfSwKCiAgICAgICAgVmlldyA9PiAkU2VsZi0+e1ZpZXd9LAoKICAgICAgICBGaWx0ZXIgICAgID0+ICRTZWxmLT57RmlsdGVyfSwKICAgICAgICBGaWx0ZXJzICAgID0+IFwlTmF2QmFyRmlsdGVyLAogICAgICAgIEZpbHRlckxpbmsgPT4gJExpbmtGaWx0ZXIsCgogICAgICAgIFRpdGxlTmFtZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ092ZXJ2aWV3OiBNeSBXb3Jrb3JkZXJzJyksCgogICAgICAgIFRpdGxlVmFsdWUgPT4gJFNlbGYtPntGaWx0ZXJ9LAoKICAgICAgICBFbnYgICAgICA9PiAkU2VsZiwKICAgICAgICBMaW5rUGFnZSA9PiAkTGlua1BhZ2UsCiAgICAgICAgTGlua1NvcnQgPT4gJExpbmtTb3J0LAoKICAgICAgICBTaG93Q29sdW1ucyA9PiBcQFNob3dDb2x1bW5zLAogICAgICAgIFNvcnRCeSAgICAgID0+ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNvcnRCeSApLAogICAgICAgIE9yZGVyQnkgICAgID0+ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJE9yZGVyQnkgKSwKICAgICk7CgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VQSVI7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMhJywgJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0gKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgc3RvcmUgbGFzdCBzY3JlZW4sIHVzZWQgZm9yIGJhY2tsaW5rcwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyktPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlbldvcmtPcmRlcnMnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IHNvcnRpbmcgcGFyYW1ldGVycwogICAgbXkgJFNvcnRCeSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTb3J0QnknICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnU29ydEJ5OjpEZWZhdWx0J30KICAgICAgICB8fCAnUGxhbm5lZFN0YXJ0VGltZSc7CgogICAgIyBnZXQgb3JkZXJpbmcgcGFyYW1ldGVycwogICAgbXkgJE9yZGVyQnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXJCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydPcmRlcjo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ1VwJzsKCiAgICBteSBAU29ydEJ5QXJyYXkgID0gKCRTb3J0QnkpOwogICAgbXkgQE9yZGVyQnlBcnJheSA9ICgkT3JkZXJCeSk7CgogICAgIyBzb3J0IGJ5IGNoYW5nZSBudW1iZXIgZmlyc3QgaWYgdXNlciB3YW50cyB0byBzb3J0IGJ5IHdvcmtvcmRlciBudW1iZXIKICAgIGlmICggJFNvcnRCeSBlcSAnV29ya09yZGVyTnVtYmVyJyApIHsKICAgICAgICBAU29ydEJ5QXJyYXkgPSAoICdDaGFuZ2VOdW1iZXInLCAnV29ya09yZGVyTnVtYmVyJyApOwogICAgICAgIEBPcmRlckJ5QXJyYXkgPSAoICRPcmRlckJ5LCAkT3JkZXJCeSApOwogICAgfQoKICAgICMgaW52ZXN0aWdhdGUgcmVmcmVzaAogICAgbXkgJFJlZnJlc2ggPSAkU2VsZi0+e1VzZXJSZWZyZXNoVGltZX0gPyA2MCAqICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA6IHVuZGVmOwoKICAgICMgc3RhcnRpbmcgd2l0aCBwYWdlIC4uLgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlciggUmVmcmVzaCA9PiAkUmVmcmVzaCApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAkTGF5b3V0T2JqZWN0LT5QcmludCggT3V0cHV0ID0+IFwkT3V0cHV0ICk7CiAgICAkT3V0cHV0ID0gJyc7CgogICAgIyBmaW5kIG91dCB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSBzaG93bgogICAgbXkgQFNob3dDb2x1bW5zOwogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gKSB7CgogICAgICAgICMgZ2V0IGFsbCBwb3NzaWJsZSBjb2x1bW5zIGZyb20gY29uZmlnCiAgICAgICAgbXkgJVBvc3NpYmxlQ29sdW1uID0gJXsgJFNlbGYtPntDb25maWd9LT57U2hvd0NvbHVtbnN9IH07CgogICAgICAgICMgZ2V0IHRoZSBjb2x1bW4gbmFtZXMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgICAgICBDT0xVTU5OQU1FOgogICAgICAgIGZvciBteSAkTmFtZSAoIHNvcnQga2V5cyAlUG9zc2libGVDb2x1bW4gKSB7CiAgICAgICAgICAgIG5leHQgQ09MVU1OTkFNRSBpZiAhJFBvc3NpYmxlQ29sdW1ueyROYW1lfTsKICAgICAgICAgICAgcHVzaCBAU2hvd0NvbHVtbnMsICROYW1lOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB3b3JrIG9yZGVyIG9iamVjdAogICAgbXkgJFdvcmtPcmRlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyk7CgogICAgIyBmaW5kIG91dCB3aGljaCB3b3Jrb3JkZXIgdHlwZXMgc2hvdWxkIGJlIHVzZWQgdG8gc2hvdyBQSVIKICAgIG15IEBXb3JrT3JkZXJUeXBlczsKICAgIGlmICggJFNlbGYtPntDb25maWd9LT57V29ya09yZGVyVHlwZXN9ICkgewogICAgICAgIFdPUktPUkRFUlRZUEU6CiAgICAgICAgZm9yIG15ICRXb3JrT3JkZXJUeXBlICggQHsgJFNlbGYtPntDb25maWd9LT57V29ya09yZGVyVHlwZXN9IH0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHdvcmtvcmRlciB0eXBlIGlzIHZhbGlkIGJ5IGxvb2tpbmcgdXAgdGhlIHR5cGUgaWQKICAgICAgICAgICAgbXkgJFdvcmtPcmRlclR5cGVJRCA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclR5cGVMb29rdXAoCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUeXBlID0+ICRXb3JrT3JkZXJUeXBlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBkbyBub3QgdXNlIGludmFsaWQgd29ya29yZGVyIHR5cGVzCiAgICAgICAgICAgIG5leHQgV09SS09SREVSVFlQRSBpZiAhJFdvcmtPcmRlclR5cGVJRDsKCiAgICAgICAgICAgIHB1c2ggQFdvcmtPcmRlclR5cGVzLCAkV29ya09yZGVyVHlwZTsKICAgICAgICB9CiAgICB9CgogICAgIyB0byBzdG9yZSB0aGUgZmlsdGVycwogICAgbXkgJUZpbHRlcnM7CgogICAgIyBzZXQgb3RoZXIgZmlsdGVycyBiYXNlZCBvbiB3b3Jrb3JkZXIgc3RhdGUKICAgIGlmICggJFNlbGYtPntDb25maWd9LT57J0ZpbHRlcjo6V29ya09yZGVyU3RhdGVzJ30gKSB7CgogICAgICAgICMgZGVmaW5lIHBvc2l0aW9uIG9mIHRoZSBmaWx0ZXIgaW4gdGhlIGZyb250ZW5kCiAgICAgICAgbXkgJFByaW9Db3VudGVyID0gMTAwMDsKCiAgICAgICAgIyBnZXQgYWxsIHdvcmtvcmRlciBzdGF0ZXMgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyBmaWx0ZXJzCiAgICAgICAgV09SS09SREVSU1RBVEU6CiAgICAgICAgZm9yIG15ICRXb3JrT3JkZXJTdGF0ZSAoIEB7ICRTZWxmLT57Q29uZmlnfS0+eydGaWx0ZXI6OldvcmtPcmRlclN0YXRlcyd9IH0gKSB7CgogICAgICAgICAgICAjIGRvIG5vdCB1c2UgZW1wdHkgd29ya29yZGVyIHN0YXRlcwogICAgICAgICAgICBuZXh0IFdPUktPUkRFUlNUQVRFIGlmICEkV29ya09yZGVyU3RhdGU7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHN0YXRlIGlzIHZhbGlkIGJ5IGxvb2tpbmcgdXAgdGhlIHN0YXRlIGlkCiAgICAgICAgICAgIG15ICRXb3JrT3JkZXJTdGF0ZUlEID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyU3RhdGVMb29rdXAoCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZSA9PiAkV29ya09yZGVyU3RhdGUsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRvIG5vdCB1c2UgaW52YWxpZCB3b3Jrb3JkZXIgc3RhdGVzCiAgICAgICAgICAgIG5leHQgV09SS09SREVSU1RBVEUgaWYgISRXb3JrT3JkZXJTdGF0ZUlEOwoKICAgICAgICAgICAgIyBpbmNyZWFzZSB0aGUgUHJpb0NvdW50ZXIKICAgICAgICAgICAgJFByaW9Db3VudGVyKys7CgogICAgICAgICAgICAjIGFkZCBmaWx0ZXIgZm9yIHRoZSBjdXJyZW50IHdvcmtvcmRlciBzdGF0ZQogICAgICAgICAgICAkRmlsdGVyc3skV29ya09yZGVyU3RhdGV9ID0gewogICAgICAgICAgICAgICAgTmFtZSAgID0+ICRXb3JrT3JkZXJTdGF0ZSwKICAgICAgICAgICAgICAgIFByaW8gICA9PiAkUHJpb0NvdW50ZXIsCiAgICAgICAgICAgICAgICBTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgICAgIFdvcmtPcmRlclR5cGVzICAgPT4gXEBXb3JrT3JkZXJUeXBlcywKICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZXMgID0+IFskV29ya09yZGVyU3RhdGVdLAogICAgICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gXEBTb3J0QnlBcnJheSwKICAgICAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFxAT3JkZXJCeUFycmF5LAogICAgICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgPT4gMTAwMCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGZpbHRlciBhbmQgdmlldyBwYXJhbXMKICAgICRTZWxmLT57RmlsdGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGaWx0ZXInICkgfHwgJ0FsbCc7CiAgICAkU2VsZi0+e1ZpZXd9ICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVmlldycgKSAgIHx8ICcnOwoKICAgICMgaWYgb25seSBvbmUgZmlsdGVyIGV4aXN0cwogICAgaWYgKCBzY2FsYXIga2V5cyAlRmlsdGVycyA9PSAxICkgewoKICAgICAgICAjIGdldCB0aGUgbmFtZSBvZiB0aGUgb25seSBmaWx0ZXIKICAgICAgICBteSAoJEZpbHRlck5hbWUpID0gc29ydCBrZXlzICVGaWx0ZXJzOwoKICAgICAgICAjIGFjdGl2YXRlIHRoaXMgZmlsdGVyCiAgICAgICAgJFNlbGYtPntGaWx0ZXJ9ID0gJEZpbHRlck5hbWU7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAjIGxpbWl0IHRvIGNvbmZpZ3VyZWQgc3RhdGVzCiAgICAgICAgbXkgQFdvcmtPcmRlclN0YXRlcyA9IHNvcnQga2V5cyAlRmlsdGVyczsKCiAgICAgICAgIyBhZGQgZGVmYXVsdCBmaWx0ZXIKICAgICAgICAkRmlsdGVyc3tBbGx9ID0gewogICAgICAgICAgICBOYW1lICAgPT4gJ0FsbCcsCiAgICAgICAgICAgIFByaW8gICA9PiAxMDAwLAogICAgICAgICAgICBTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGVzICA9PiBcQFdvcmtPcmRlclN0YXRlcywKICAgICAgICAgICAgICAgIFdvcmtPcmRlclR5cGVzICAgPT4gXEBXb3JrT3JkZXJUeXBlcywKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gXEBTb3J0QnlBcnJheSwKICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gXEBPcmRlckJ5QXJyYXksCiAgICAgICAgICAgICAgICBMaW1pdCAgICAgICAgICAgID0+IDEwMDAsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9OwogICAgfQoKICAgICMgY2hlY2sgaWYgZmlsdGVyIGlzIHZhbGlkCiAgICBpZiAoICEkRmlsdGVyc3sgJFNlbGYtPntGaWx0ZXJ9IH0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdJbnZhbGlkIEZpbHRlcjogJXMhJywgJFNlbGYtPntGaWx0ZXJ9ICksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNlYXJjaCB3b3Jrb3JkZXJzIHdoaWNoIG1hdGNoIHRoZSBzZWxlY3RlZCBmaWx0ZXIKICAgIG15ICRXb3JrT3JkZXJJRHNSZWYgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJTZWFyY2goCiAgICAgICAgJXsgJEZpbHRlcnN7ICRTZWxmLT57RmlsdGVyfSB9LT57U2VhcmNofSB9LAogICAgKTsKCiAgICAjIGRpc3BsYXkgYWxsIG5hdmJhciBmaWx0ZXJzCiAgICBteSAlTmF2QmFyRmlsdGVyOwogICAgZm9yIG15ICRGaWx0ZXIgKCBzb3J0IGtleXMgJUZpbHRlcnMgKSB7CgogICAgICAgICMgY291bnQgdGhlIG51bWJlciBvZiB3b3Jrb3JkZXJzIGZvciBlYWNoIGZpbHRlcgogICAgICAgIG15ICRDb3VudCA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclNlYXJjaCgKICAgICAgICAgICAgJXsgJEZpbHRlcnN7JEZpbHRlcn0tPntTZWFyY2h9IH0sCiAgICAgICAgICAgIFJlc3VsdCA9PiAnQ09VTlQnLAogICAgICAgICk7CgogICAgICAgICMgZGlzcGxheSB0aGUgbmF2YmFyIGZpbHRlcgogICAgICAgICROYXZCYXJGaWx0ZXJ7ICRGaWx0ZXJzeyRGaWx0ZXJ9LT57UHJpb30gfSA9IHsKICAgICAgICAgICAgQ291bnQgID0+ICRDb3VudCwKICAgICAgICAgICAgRmlsdGVyID0+ICRGaWx0ZXIsCiAgICAgICAgICAgICV7ICRGaWx0ZXJzeyRGaWx0ZXJ9IH0sCiAgICAgICAgfTsKICAgIH0KCiAgICAjIHNob3cgY2hhbmdlcwogICAgbXkgJExpbmtQYWdlID0gJ0ZpbHRlcj0nCiAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57RmlsdGVyfSApCiAgICAgICAgLiAnO1ZpZXc9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntWaWV3fSApCiAgICAgICAgLiAnO1NvcnRCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU29ydEJ5ICkKICAgICAgICAuICc7T3JkZXJCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkT3JkZXJCeSApCiAgICAgICAgLiAnOyc7CiAgICBteSAkTGlua1NvcnQgPSAnRmlsdGVyPScKICAgICAgICAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntGaWx0ZXJ9ICkKICAgICAgICAuICc7Vmlldz0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAuICc7JzsKICAgIG15ICRMaW5rRmlsdGVyID0gJ1NvcnRCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU29ydEJ5ICkKICAgICAgICAuICc7T3JkZXJCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkT3JkZXJCeSApCiAgICAgICAgLiAnO1ZpZXc9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntWaWV3fSApCiAgICAgICAgLiAnOyc7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPklUU01DaGFuZ2VMaXN0U2hvdygKCiAgICAgICAgV29ya09yZGVySURzID0+ICRXb3JrT3JkZXJJRHNSZWYsCiAgICAgICAgVG90YWwgICAgICAgID0+IHNjYWxhciBAeyRXb3JrT3JkZXJJRHNSZWZ9LAoKICAgICAgICBWaWV3ID0+ICRTZWxmLT57Vmlld30sCgogICAgICAgIEZpbHRlciAgICAgPT4gJFNlbGYtPntGaWx0ZXJ9LAogICAgICAgIEZpbHRlcnMgICAgPT4gXCVOYXZCYXJGaWx0ZXIsCiAgICAgICAgRmlsdGVyTGluayA9PiAkTGlua0ZpbHRlciwKCiAgICAgICAgVGl0bGVOYW1lID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnT3ZlcnZpZXc6IFBJUicpLAoKICAgICAgICBUaXRsZVZhbHVlID0+ICRTZWxmLT57RmlsdGVyfSwKCiAgICAgICAgRW52ICAgICAgPT4gJFNlbGYsCiAgICAgICAgTGlua1BhZ2UgPT4gJExpbmtQYWdlLAogICAgICAgIExpbmtTb3J0ID0+ICRMaW5rU29ydCwKCiAgICAgICAgU2hvd0NvbHVtbnMgPT4gXEBTaG93Q29sdW1ucywKICAgICAgICBTb3J0QnkgICAgICA9PiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTb3J0QnkgKSwKICAgICAgICBPcmRlckJ5ICAgICA9PiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRPcmRlckJ5ICksCiAgICApOwoKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VQcmludDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBMaXN0OjpVdGlsIHF3KG1heCk7CnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBGaW5kIG91dCB3aGV0aGVyIGEgY2hhbmdlIG9yIGEgd29ya29yZGVyIHNob3VsZCBiZSBwcmludGVkLgogICAgIyBBIHdvcmtvcmRlciBpcyB0byBiZSBwcmludGVkIHdoZW4gdGhlIFdvcmtPcmRlcklEIGlzIHBhc3NlZC4KICAgICMgT3RoZXJ3aXNlIGEgY2hhbmdlIHNob3VsZCBiZSBwcmludGVkLgogICAgbXkgJFdvcmtPcmRlcklEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1dvcmtPcmRlcklEJyApOwogICAgbXkgJFByaW50V29ya09yZGVyID0gJFdvcmtPcmRlcklEID8gMSA6IDA7CiAgICBteSAkUHJpbnRDaGFuZ2UgICAgPSAhJFdvcmtPcmRlcklEOwogICAgbXkgJFdvcmtPcmRlciAgICAgID0ge307CiAgICBteSAkQ2hhbmdlSUQ7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRDaGFuZ2VPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwogICAgbXkgJFdvcmtPcmRlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJENvbmZpZ09iamVjdC0+R2V0KCJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgaWYgKCRQcmludFdvcmtPcmRlcikgewoKICAgICAgICAjIGNoZWNrIHBlcm1pc3Npb24gb24gdGhlIHdvcmtvcmRlcgogICAgICAgIG15ICRBY2Nlc3MgPSAkV29ya09yZGVyT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICAgICAgQWN0aW9uICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGVycm9yIHNjcmVlbgogICAgICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0KICAgICAgICAgICAgICAgICAgICAtPlRyYW5zbGF0ZSggJ1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIScsICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259ICksCiAgICAgICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgd29ya29yZGVyIGluZm9ybWF0aW9uCiAgICAgICAgJFdvcmtPcmRlciA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckdldCgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISRXb3JrT3JkZXIgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJFdvcmtPcmRlcklEICksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGluZmVyIHRoZSBjaGFuZ2UgaWQgZnJvbSB0aGUgd29ya29yZGVyCiAgICAgICAgJENoYW5nZUlEID0gJFdvcmtPcmRlci0+e0NoYW5nZUlEfTsKCiAgICAgICAgaWYgKCAhJENoYW5nZUlEICkgewoKICAgICAgICAgICAgIyBlcnJvciBwYWdlCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdDYW5cJ3QgY3JlYXRlIG91dHB1dCwgYXMgdGhlIHdvcmtvcmRlciBpcyBub3QgYXR0YWNoZWQgdG8gYSBjaGFuZ2UhJyksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgdGhlIGNoYW5nZSBpZCBpcyByZXF1aXJlZCwgYXMgd2UgaGF2ZSBubyB3b3Jrb3JkZXIgaWQKICAgICAgICAkQ2hhbmdlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ2hhbmdlSUQnICk7CgogICAgICAgIGlmICggISRDaGFuZ2VJRCApIHsKCiAgICAgICAgICAgICMgZXJyb3IgcGFnZQogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnQ2FuXCd0IGNyZWF0ZSBvdXRwdXQsIGFzIG5vIENoYW5nZUlEIGlzIGdpdmVuIScpLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBwZXJtaXNzaW9uIG9uIHRoZSBjaGFuZ2UKICAgICAgICBteSAkQWNjZXNzID0gJENoYW5nZU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBlcnJvciBzY3JlZW4KICAgICAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9CiAgICAgICAgICAgICAgICAgICAgLT5UcmFuc2xhdGUoICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyEnLCAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSApLAogICAgICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgY2hhbmdlIGluZm9ybWF0aW9uCiAgICBteSAkQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISRDaGFuZ2UgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnLCAkQ2hhbmdlSUQgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBzb21lIGluaXQgZm9yIFBERi1PdXRwdXQKICAgICMgcGFnZSBjb250cm9scyB0aGUgUERGLWdlbmVyYXRpb24KICAgICRTZWxmLT57UGFnZX0gPSB7fTsKICAgIG15ICRQYWdlID0gJFNlbGYtPntQYWdlfTsKCiAgICAjIGdldCBtYXhpbXVtIG51bWJlciBvZiBwYWdlcwogICAgJFBhZ2UtPntNYXhQYWdlc30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1BERjo6TWF4UGFnZXMnKTsKICAgIGlmICggISRQYWdlLT57TWF4UGFnZXN9IHx8ICRQYWdlLT57TWF4UGFnZXN9IDwgMSB8fCAkUGFnZS0+e01heFBhZ2VzfSA+IDEwMDAgKSB7CiAgICAgICAgJFBhZ2UtPntNYXhQYWdlc30gPSAxMDA7CiAgICB9CgogICAgIyBwYWdlIGxheW91dCBzZXR0aW5ncwogICAgJFBhZ2UtPntNYXJnaW5Ub3B9ICAgID0gMzA7CiAgICAkUGFnZS0+e01hcmdpblJpZ2h0fSAgPSA0MDsKICAgICRQYWdlLT57TWFyZ2luQm90dG9tfSA9IDQwOwogICAgJFBhZ2UtPntNYXJnaW5MZWZ0fSAgID0gNDA7CgogICAgIyB0aGUgc2Vjb25kIGl0ZW0gaW4gdGhlIHBhZ2UgdGl0bGUgaXMgdGhlIGFyZWEgaW4gdGhlIHByb2R1Y3QgJ0lUU00gQ2hhbmdlIE1hbmFnZW1lbnQnCiAgICBteSAkSGVhZGVyQXJlYSA9ICRQcmludENoYW5nZSA/ICdJVFNNIENoYW5nZScgOiAnSVRTTSBXb3Jrb3JkZXInOwogICAgJEhlYWRlckFyZWEgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJEhlYWRlckFyZWEpOwoKICAgICMgdGhlIGxhc3QgaXRlbSBpbiB0aGUgcGFnZSB0aXRsZSBpcyBlaXRoZXIgdGhlIGNoYW5nZSBudW1iZXIgb2YgdGhlIGZ1bGwgd29ya29yZGVyIG51bWJlcgogICAgbXkgJEhlYWRlclZhbHVlID0gJFByaW50Q2hhbmdlCiAgICAgICAgPwogICAgICAgICRDaGFuZ2UtPntDaGFuZ2VOdW1iZXJ9CiAgICAgICAgOgogICAgICAgIGpvaW4oICctJywgJENoYW5nZS0+e0NoYW5nZU51bWJlcn0sICRXb3JrT3JkZXItPntXb3JrT3JkZXJOdW1iZXJ9ICk7CgogICAgIyBzdGFydCB0aGUgZG9jdW1lbnQKICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+X1N0YXJ0RG9jdW1lbnQoCiAgICAgICAgSGVhZGVyQXJlYSAgPT4gJEhlYWRlckFyZWEsCiAgICAgICAgSGVhZGVyVmFsdWUgPT4gJEhlYWRlclZhbHVlLAogICAgKTsKCiAgICAjIGdldCBsaW5rIG9iamVjdAogICAgbXkgJExpbmtPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpOwoKICAgICMgdGhlIGxpbmsgdHlwZXMgYXJlIG5lZWRlZCBmb3Igc2hvd2luZyB0aGUgbGlua2VkIG9iamVjdHMKICAgIG15ICVMaW5rVHlwZUxpc3QgPSAkTGlua09iamVjdC0+VHlwZUxpc3QoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBwcmludCB0aGUgY2hhbmdlIHNwZWNpZmljIHN0dWZmCiAgICBpZiAoJFByaW50Q2hhbmdlKSB7CgogICAgICAgICMgc3RhcnQgdGhlIGZpcnN0IHBhZ2UKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fT3V0cHV0SGVhZGxpbmUoCiAgICAgICAgICAgIEhlYWRlckFyZWEgICAgID0+ICRIZWFkZXJBcmVhLAogICAgICAgICAgICBIZWFkZXJWYWx1ZSAgICA9PiAkSGVhZGVyVmFsdWUsCiAgICAgICAgICAgIFRpdGxlICAgICAgICAgID0+ICRDaGFuZ2UtPntDaGFuZ2VUaXRsZX0gfHwgVHJhbnNsYXRhYmxlKCd1bmtub3duIGNoYW5nZSB0aXRsZScpLAogICAgICAgICAgICBUZW1wbGF0ZVByZWZpeCA9PiAnQ2hhbmdlJywKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBjaGFuZ2UgaW5mbwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9PdXRwdXRDaGFuZ2VJbmZvKAogICAgICAgICAgICBDaGFuZ2UgICAgICAgICA9PiAkQ2hhbmdlLAogICAgICAgICAgICBQcmludFdvcmtPcmRlciA9PiAkUHJpbnRXb3JrT3JkZXIsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgY2hhbmdlIGRlc2NyaXB0aW9uIGFuZCBqdXN0aWZpY2F0aW9uCiAgICAgICAgIyB0aGUgcGxhaW4gY29udGVudCB3aWxsIGJlIGRpc3BsYXllZAogICAgICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhEZXNjcmlwdGlvbiBKdXN0aWZpY2F0aW9uKSkgewogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fT3V0cHV0TG9uZ1RleHQoCiAgICAgICAgICAgICAgICBQcmludENoYW5nZSAgICA9PiAkUHJpbnRDaGFuZ2UsCiAgICAgICAgICAgICAgICBQcmludFdvcmtPcmRlciA9PiAkUHJpbnRXb3JrT3JkZXIsCiAgICAgICAgICAgICAgICBUaXRsZSA9PgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgkQXR0cmlidXRlKSwKICAgICAgICAgICAgICAgIExvbmdUZXh0ID0+ICRDaGFuZ2UtPnsgJEF0dHJpYnV0ZSAuICdQbGFpbicgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGxpbmtlZCBvYmplY3RzIHdoaWNoIGFyZSBkaXJlY3RseSBsaW5rZWQgd2l0aCB0aGlzIGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkTGlua0xpc3RXaXRoRGF0YSA9ICRMaW5rT2JqZWN0LT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgICAgICBPYmplY3QgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICBLZXkgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICBTdGF0ZSAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aGUgY29tYmluZWQgbGlua2VkIG9iamVjdHMgZnJvbSBhbGwgd29ya29yZGVycyBvZiB0aGlzIGNoYW5nZQogICAgICAgIG15ICRMaW5rTGlzdFdpdGhEYXRhQ29tYmluZWRXb3JrT3JkZXJzID0ge307CiAgICAgICAgZm9yIG15ICRXb3JrT3JkZXJJRCAoIEB7ICRDaGFuZ2UtPntXb3JrT3JkZXJJRHN9IH0gKSB7CgogICAgICAgICAgICAjIGdldCBsaW5rZWQgb2JqZWN0cyBvZiB0aGlzIHdvcmtvcmRlcgogICAgICAgICAgICBteSAkTGlua0xpc3RXaXRoRGF0YVdvcmtPcmRlciA9ICRMaW5rT2JqZWN0LT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgICAgICAgICAgT2JqZWN0ID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgIEtleSAgICA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICBTdGF0ZSAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBPQkpFQ1Q6CiAgICAgICAgICAgIGZvciBteSAkT2JqZWN0ICggc29ydCBrZXlzICV7JExpbmtMaXN0V2l0aERhdGFXb3JrT3JkZXJ9ICkgewoKICAgICAgICAgICAgICAgICMgb25seSBzaG93IGxpbmtlZCBzZXJ2aWNlcyBhbmQgY29uZmlnIGl0ZW1zIG9mIHdvcmtvcmRlcgogICAgICAgICAgICAgICAgaWYgKCAkT2JqZWN0IG5lICdTZXJ2aWNlJyAmJiAkT2JqZWN0IG5lICdJVFNNQ29uZmlnSXRlbScgKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBPQkpFQ1Q7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgTElOS1RZUEU6CiAgICAgICAgICAgICAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7ICRMaW5rTGlzdFdpdGhEYXRhV29ya09yZGVyLT57JE9iamVjdH0gfSApIHsKCiAgICAgICAgICAgICAgICAgICAgRElSRUNUSU9OOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkRGlyZWN0aW9uICgKICAgICAgICAgICAgICAgICAgICAgICAgc29ydCBrZXlzICV7ICRMaW5rTGlzdFdpdGhEYXRhV29ya09yZGVyLT57JE9iamVjdH0tPnskTGlua1R5cGV9IH0KICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgSUQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkSUQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydCBrZXlzICV7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExpbmtMaXN0V2l0aERhdGFXb3JrT3JkZXItPnskT2JqZWN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb21iaW5lIHRoZSBsaW5rZWQgb2JqZWN0IGRhdGEgZnJvbSBhbGwgd29ya29yZGVycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExpbmtMaXN0V2l0aERhdGFDb21iaW5lZFdvcmtPcmRlcnMtPnskT2JqZWN0fS0+eyRMaW5rVHlwZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPnskRGlyZWN0aW9ufS0+eyRJRH0gPSAkTGlua0xpc3RXaXRoRGF0YVdvcmtPcmRlci0+eyRPYmplY3R9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT57JElEfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBhZGQgY29tYmluZWQgbGlua2VkIG9iamVjdHMgZnJvbSB3b3Jrb3JkZXIgdG8gbGlua2VkIG9iamVjdHMgZnJvbSBjaGFuZ2Ugb2JqZWN0CiAgICAgICAgJExpbmtMaXN0V2l0aERhdGEgPSB7CiAgICAgICAgICAgICV7JExpbmtMaXN0V2l0aERhdGF9LAogICAgICAgICAgICAleyRMaW5rTGlzdFdpdGhEYXRhQ29tYmluZWRXb3JrT3JkZXJzfSwKICAgICAgICB9OwoKICAgICAgICAjIGdldCB0aGUgbGluayBkYXRhCiAgICAgICAgaWYgKCAkTGlua0xpc3RXaXRoRGF0YSAmJiByZWYgJExpbmtMaXN0V2l0aERhdGEgZXEgJ0hBU0gnICYmICV7JExpbmtMaXN0V2l0aERhdGF9ICkgewogICAgICAgICAgICBteSAlTGlua0RhdGEgPSAkTGF5b3V0T2JqZWN0LT5MaW5rT2JqZWN0VGFibGVDcmVhdGUoCiAgICAgICAgICAgICAgICBMaW5rTGlzdFdpdGhEYXRhID0+ICRMaW5rTGlzdFdpdGhEYXRhLAogICAgICAgICAgICAgICAgVmlld01vZGUgICAgICAgICA9PiAnU2ltcGxlUmF3JywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9PdXRwdXRMaW5rZWRPYmplY3RzKAogICAgICAgICAgICAgICAgUHJpbnRDaGFuZ2UgICAgPT4gJFByaW50Q2hhbmdlLAogICAgICAgICAgICAgICAgUHJpbnRXb3JrT3JkZXIgPT4gJFByaW50V29ya09yZGVyLAogICAgICAgICAgICAgICAgTGlua0RhdGEgICAgICAgPT4gXCVMaW5rRGF0YSwKICAgICAgICAgICAgICAgIExpbmtUeXBlTGlzdCAgID0+IFwlTGlua1R5cGVMaXN0LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgYW4gb3ZlcnZpZXcgb3ZlciB3b3Jrb3JkZXJzCiAgICAgICAgbXkgQFdvcmtPcmRlck92ZXJ2aWV3OwogICAgICAgIGZvciBteSAkV29ya09yZGVySUQgKCBAeyAkQ2hhbmdlLT57V29ya09yZGVySURzfSB9ICkgewoKICAgICAgICAgICAgIyBnZXQgd29ya29yZGVyIGluZm8KICAgICAgICAgICAgbXkgJFdvcmtPcmRlciA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckdldCgKICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICAgICAgaWYgKCAhJFdvcmtPcmRlciApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0KICAgICAgICAgICAgICAgICAgICAgICAgLT5UcmFuc2xhdGUoICdXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJFdvcmtPcmRlcklEICksCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHVzaCBAV29ya09yZGVyT3ZlcnZpZXcsCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAkV29ya09yZGVyLT57V29ya09yZGVyTnVtYmVyfSwKICAgICAgICAgICAgICAgICRXb3JrT3JkZXItPntXb3JrT3JkZXJUaXRsZX0sCiAgICAgICAgICAgICAgICAkV29ya09yZGVyLT57V29ya09yZGVyU3RhdGV9LAogICAgICAgICAgICAgICAgJFdvcmtPcmRlci0+e1BsYW5uZWRTdGFydFRpbWV9LAogICAgICAgICAgICAgICAgJFdvcmtPcmRlci0+e1BsYW5uZWRFbmRUaW1lfSwKICAgICAgICAgICAgICAgICRXb3JrT3JkZXItPntBY3R1YWxTdGFydFRpbWV9LAogICAgICAgICAgICAgICAgJFdvcmtPcmRlci0+e0FjdHVhbEVuZFRpbWV9LAogICAgICAgICAgICAgICAgXTsKICAgICAgICB9CgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9PdXRwdXRXb3JrT3JkZXJPdmVydmlldygKICAgICAgICAgICAgV29ya09yZGVyT3ZlcnZpZXcgPT4gXEBXb3JrT3JkZXJPdmVydmlldywKICAgICAgICApOwogICAgfQoKICAgICMgb3V0cHV0IGVpdGhlciBhIHNpbmdsZSB3b3Jrb3JkZXIgb3IgYWxsIHdvcmtvcmRlcnMgb2YgYSBjaGFuZ2UKICAgIG15IEBXb3JrT3JkZXJJRHMgPSAkUHJpbnRDaGFuZ2UKICAgICAgICA/CiAgICAgICAgQHsgJENoYW5nZS0+e1dvcmtPcmRlcklEc30gfHwgW10gfQogICAgICAgIDoKICAgICAgICAoJFdvcmtPcmRlcklEKTsKCiAgICBmb3IgbXkgJFdvcmtPcmRlcklEIChAV29ya09yZGVySURzKSB7CgogICAgICAgICMgZ2V0IHdvcmtvcmRlciBpbmZvCiAgICAgICAgbXkgJFdvcmtPcmRlciA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckdldCgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISRXb3JrT3JkZXIgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJFdvcmtPcmRlcklEICksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHN0YXJ0IGEgbmV3IHBhZ2UgZm9yIGV2ZXJ5IHdvcmtvcmRlcgogICAgICAgIG15ICRIZWFkZXJBcmVhID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdJVFNNIFdvcmtvcmRlcicpOwogICAgICAgIG15ICRIZWFkZXJWYWx1ZSA9IGpvaW4gJy0nLCAkQ2hhbmdlLT57Q2hhbmdlTnVtYmVyfSwgJFdvcmtPcmRlci0+e1dvcmtPcmRlck51bWJlcn07CgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9PdXRwdXRIZWFkbGluZSgKICAgICAgICAgICAgSGVhZGVyQXJlYSAgICAgPT4gJEhlYWRlckFyZWEsCiAgICAgICAgICAgIEhlYWRlclZhbHVlICAgID0+ICRIZWFkZXJWYWx1ZSwKICAgICAgICAgICAgVGl0bGUgICAgICAgICAgPT4gJFdvcmtPcmRlci0+e1dvcmtPcmRlclRpdGxlfSB8fCBUcmFuc2xhdGFibGUoJ3Vua25vd24gd29ya29yZGVyIHRpdGxlJyksCiAgICAgICAgICAgIFRlbXBsYXRlUHJlZml4ID0+ICdXb3JrT3JkZXInLAogICAgICAgICk7CgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9PdXRwdXRXb3JrT3JkZXJJbmZvKAogICAgICAgICAgICBDaGFuZ2UgICAgPT4gJENoYW5nZSwKICAgICAgICAgICAgV29ya09yZGVyID0+ICRXb3JrT3JkZXIsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgd29ya29yZGVyIGluc3RydWN0aW9uIGFuZCByZXBvcnQKICAgICAgICAjIFRoZSBwbGFpbiBjb250ZW50IHdpbGwgYmUgZGlzcGxheWVkCiAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKHF3KEluc3RydWN0aW9uIFJlcG9ydCkpIHsKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X091dHB1dExvbmdUZXh0KAogICAgICAgICAgICAgICAgUHJpbnRDaGFuZ2UgICAgPT4gMCwKICAgICAgICAgICAgICAgIFByaW50V29ya09yZGVyID0+IDEsCiAgICAgICAgICAgICAgICBUaXRsZSA9PgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgkQXR0cmlidXRlKSwKICAgICAgICAgICAgICAgIExvbmdUZXh0ID0+ICRXb3JrT3JkZXItPnsgJEF0dHJpYnV0ZSAuICdQbGFpbicgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGxpbmtlZCBvYmplY3RzCiAgICAgICAgbXkgJExpbmtMaXN0V2l0aERhdGEgPSAkTGlua09iamVjdC0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICAgICAgT2JqZWN0ID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgS2V5ICAgID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgU3RhdGUgID0+ICdWYWxpZCcsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGhlIGxpbmsgZGF0YQogICAgICAgIGlmICggJExpbmtMaXN0V2l0aERhdGEgJiYgcmVmICRMaW5rTGlzdFdpdGhEYXRhIGVxICdIQVNIJyAmJiAleyRMaW5rTGlzdFdpdGhEYXRhfSApIHsKICAgICAgICAgICAgbXkgJUxpbmtEYXRhID0gJExheW91dE9iamVjdC0+TGlua09iamVjdFRhYmxlQ3JlYXRlKAogICAgICAgICAgICAgICAgTGlua0xpc3RXaXRoRGF0YSA9PiAkTGlua0xpc3RXaXRoRGF0YSwKICAgICAgICAgICAgICAgIFZpZXdNb2RlICAgICAgICAgPT4gJ1NpbXBsZVJhdycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fT3V0cHV0TGlua2VkT2JqZWN0cygKICAgICAgICAgICAgICAgIFByaW50Q2hhbmdlICAgID0+IDAsCiAgICAgICAgICAgICAgICBQcmludFdvcmtPcmRlciA9PiAxLAogICAgICAgICAgICAgICAgTGlua0RhdGEgICAgICAgPT4gXCVMaW5rRGF0YSwKICAgICAgICAgICAgICAgIExpbmtUeXBlTGlzdCAgID0+IFwlTGlua1R5cGVMaXN0LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdlbmVyYXRlIFBERiBvdXRwdXQKICAgICMgZ2V0IHRpbWUgb2JqZWN0CiAgICBteSAkVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyk7CgogICAgIyBnZW5lcmF0ZSBhIGZpbGVuYW1lCiAgICBteSAoICRzLCAkbSwgJGgsICRELCAkTSwgJFkgKSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpLAogICAgKTsKICAgIG15ICRGaWxlbmFtZSA9ICRQcmludENoYW5nZQogICAgICAgID8KICAgICAgICBzcHJpbnRmKAogICAgICAgICdjaGFuZ2VfJXNfJTAyZC0lMDJkLSUwMmRfJTAyZC0lMDJkLnBkZicsCiAgICAgICAgJENoYW5nZS0+e0NoYW5nZU51bWJlcn0sICRZLCAkTSwgJEQsICRoLCAkbQogICAgICAgICkKICAgICAgICA6CiAgICAgICAgc3ByaW50ZigKICAgICAgICAnd29ya29yZGVyXyVzLSVzXyUwMmQtJTAyZC0lMDJkXyUwMmQtJTAyZC5wZGYnLAogICAgICAgICRDaGFuZ2UtPntDaGFuZ2VOdW1iZXJ9LCAkV29ya09yZGVyLT57V29ya09yZGVyTnVtYmVyfSwgJFksICRNLCAkRCwgJGgsICRtCiAgICAgICAgKTsKCiAgICAjIHJldHVybiB0aGUgUERGIGRvY3VtZW50CiAgICBteSAkUERGU3RyaW5nID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBERicpLT5Eb2N1bWVudE91dHB1dCgpOwoKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgIEZpbGVuYW1lICAgID0+ICRGaWxlbmFtZSwKICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vcGRmJywKICAgICAgICBDb250ZW50ICAgICA9PiAkUERGU3RyaW5nLAogICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgKTsKfQoKIyBzdGFydCB0aGUgZG9jdW1lbnQKc3ViIF9TdGFydERvY3VtZW50IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhIZWFkZXJBcmVhIEhlYWRlclZhbHVlKSkgewogICAgICAgIGlmICggIWRlZmluZWQoICRQYXJhbXskTmVlZGVkfSApICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIHRpdGxlIG9mIHRoZSBQREYtRG9jdW1lbnQKICAgIG15ICRQcm9kdWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdQcm9kdWN0Jyk7CiAgICBteSAkVGl0bGUgPSBzcHJpbnRmICclczogJXMjJXMnLCAkUHJvZHVjdCwgJFBhcmFte0hlYWRlckFyZWF9LCAkUGFyYW17SGVhZGVyVmFsdWV9OwoKICAgICMgY3JlYXRlIG5ldyBQREYgZG9jdW1lbnQKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKS0+RG9jdW1lbnROZXcoCiAgICAgICAgVGl0bGUgID0+ICRUaXRsZSwKICAgICAgICBFbmNvZGUgPT4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICk7CgogICAgcmV0dXJuICcnOwoKfQoKIyBvdXRwdXQgdGhlIGhlYWRsaW5lLCBjcmVhdGUgYSBuZXcgcGFnZQpzdWIgX091dHB1dEhlYWRsaW5lIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhIZWFkZXJBcmVhIEhlYWRlclZhbHVlIFRpdGxlIFRlbXBsYXRlUHJlZml4KSkgewogICAgICAgIGlmICggIWRlZmluZWQoICRQYXJhbXskTmVlZGVkfSApICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICBteSAkUHJpbnRlZEJ5ICAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdwcmludGVkIGJ5Jyk7CiAgICBteSAkVGltZSAgICAgICAgID0gJExheW91dE9iamVjdC0+e1RpbWV9OwogICAgbXkgJFVzZXJGdWxsTmFtZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgcGFnZSBjb250cm9scyB0aGUgUERGLWdlbmVyYXRpb24KICAgICMgcGFnZSBoZWFkZXJzIGFuZCBmb290ZXIKICAgIG15ICRQYWdlID0gJFNlbGYtPntQYWdlfTsKICAgICRQYWdlLT57SGVhZGVyUmlnaHR9ID0gc3ByaW50ZiAnJXMjJXMnLCAkUGFyYW17SGVhZGVyQXJlYX0sICRQYXJhbXtIZWFkZXJWYWx1ZX07CiAgICAkUGFnZS0+e1BhZ2VUZXh0fSAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnUGFnZScpOwogICAgJFBhZ2UtPntQYWdlQ291bnR9ICAgPSAkU2VsZi0+e1BhZ2V9LT57UGFnZUNvdW50fSAvLyAxOwoKICAgICMgY3JlYXRlIG5ldyBQREYgcGFnZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBERicpLT5QYWdlTmV3KAogICAgICAgICV7JFBhZ2V9LAogICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdlLT57UGFnZVRleHR9IC4gJyAnIC4gJFBhZ2UtPntQYWdlQ291bnR9LAogICAgKTsKCiAgICAkU2VsZi0+e1BhZ2V9LT57UGFnZUNvdW50fSsrOwoKICAgICMgZ2V0IFBERiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNiwKICAgICk7CgogICAgIyBvdXRwdXQgdGl0bGUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJFBhcmFte1RpdGxlfSwKICAgICAgICBGb250U2l6ZSA9PiAxMywKICAgICk7CgogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNiwKICAgICk7CgogICAgIyBvdXRwdXQgInByaW50ZWQgYnkiCiAgICAkUERGT2JqZWN0LT5UZXh0KAogICAgICAgIFRleHQgPT4gJFByaW50ZWRCeSAuICcgJwogICAgICAgICAgICAuICRVc2VyRnVsbE5hbWUgLiAnICcKICAgICAgICAgICAgLiAkVGltZSwKICAgICAgICBGb250U2l6ZSA9PiA5LAogICAgKTsKCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC0xNCwKICAgICk7CgogICAgcmV0dXJuICcnOwp9CgojIGEgaGVscGVyIGZvciBwcmVwYXJpbmcgYSB0YWJsZSByb3cgZm9yIFBERiBnZW5lcmF0aW9uCnN1YiBfUHJlcGFyZUFuZEFkZEluZm9Sb3cgewoKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhSb3dTcGVjIERhdGEpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCggJFBhcmFteyROZWVkZWR9ICkgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAoICRSb3dTcGVjLCAkRGF0YSApID0gQFBhcmFte3F3KFJvd1NwZWMgRGF0YSl9OwoKICAgICMgc2hvcnQgbmFtZSwganVzdCBmb3IgY29udmVuaWVuY2UKICAgIG15ICRBdHRyaWJ1dGUgPSAkUm93U3BlYy0+e0F0dHJpYnV0ZX07CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBza2lwIGlmIHJvdyBpcyBzd2l0Y2hlZCBvZmYgaW4gU3lzQ29uZmlnCiAgICByZXR1cm4gaWYgJFJvd1NwZWMtPntJc09wdGlvbmFsfSAmJiAhJFNlbGYtPntDb25maWd9LT57JEF0dHJpYnV0ZX07CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGtleXMgYXJlIGFsd2F5cyB0cmFuc2xhdGFibGUKICAgIG15ICRLZXkgPSAkUm93U3BlYy0+e0tleX0gfHwgJEF0dHJpYnV0ZTsKICAgICRLZXkgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJEtleSk7CgogICAgIyBkZXRlcm1pbmUgdGhlIHZhbHVlCiAgICBteSAkVmFsdWU7CiAgICBpZiAoICRSb3dTcGVjLT57VmFsdWVJc1RpbWV9ICkgewoKICAgICAgICAjIGZvcm1hdCB0aGUgdGltZSB2YWx1ZQogICAgICAgICRWYWx1ZSA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuJyAuICRBdHRyaWJ1dGUgLiAnIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0nLAogICAgICAgICAgICBEYXRhICAgICA9PiAkRGF0YSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkUm93U3BlYy0+e1ZhbHVlSXNVc2VyfSApIHsKCiAgICAgICAgIyBmb3JtYXQgdGhlIHVzZXIgaWQKICAgICAgICBpZiAoICREYXRhLT57ICRBdHRyaWJ1dGUgLiAnSUQnIH0gKSB7CgogICAgICAgICAgICBteSAkVXNlckZ1bGxOYW1lID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlck5hbWUoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJERhdGEtPnsgJEF0dHJpYnV0ZSAuICdJRCcgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkVXNlckZ1bGxOYW1lKSB7CiAgICAgICAgICAgICAgICAkVmFsdWUgPSAkVXNlckZ1bGxOYW1lOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFZhbHVlID0gJ0lEPScgLiAkRGF0YS0+eyRBdHRyaWJ1dGV9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkUm93U3BlYy0+e1ZhbHVlSXNEeW5hbWljRmllbGR9ICkgewogICAgICAgICRWYWx1ZSA9ICRSb3dTcGVjLT57VmFsdWV9OwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgdGFrZSB2YWx1ZSBmcm9tIHRoZSBwYXNzZWQgaW4gZGF0YQogICAgICAgICRWYWx1ZSA9ICREYXRhLT57JEF0dHJpYnV0ZX07CiAgICB9CgogICAgIyB0cmFuc2xhdGUgdGhlIHZhbHVlCiAgICBpZiAoICRWYWx1ZSAmJiAkUm93U3BlYy0+e1ZhbHVlSXNUcmFuc2xhdGFibGV9ICkgewogICAgICAgICRWYWx1ZSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgkVmFsdWUpOwogICAgfQoKICAgICMgYWRkIHNlcGFyYXRvciBiZXR3ZWVuIGtleSBhbmQgdmFsdWUKICAgICRLZXkgLj0gJzonOwoKICAgICMgc2hvdyByb3cKICAgIHB1c2ggQHsgJFJvd1NwZWMtPntUYWJsZX0gfSwKICAgICAgICB7CiAgICAgICAgS2V5ICAgPT4gJEtleSwKICAgICAgICBWYWx1ZSA9PiAkVmFsdWUsCiAgICAgICAgfTsKCiAgICByZXR1cm47Cn0KCiMgZW1pdCBpbmZvcm1hdGlvbiBhYm91dCBhIGNoYW5nZQpzdWIgX091dHB1dENoYW5nZUluZm8gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KENoYW5nZSBQcmludFdvcmtPcmRlcikpIHsKICAgICAgICBpZiAoICFkZWZpbmVkKCAkUGFyYW17JE5lZWRlZH0gKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMganVzdCBmb3IgaGF2aW5nIHNob3J0ZXIgbmFtZXMKICAgIG15ICRDaGFuZ2UgPSAkUGFyYW17Q2hhbmdlfTsKCiAgICAjIGZpbGwgdGhlIHR3byB0YWJsZXMgb24gdG9wLAogICAgIyBib3RoIHRhYmxlcyBoYXZlIHR3byBjb2x1bXM6IEtleSBhbmQgVmFsdWUKICAgIG15ICggQFRhYmxlTGVmdCwgQFRhYmxlUmlnaHQgKTsKCiAgICAjIGRldGVybWluZSB2YWx1ZXMgdGhhdCBjYW4ndCBlYXNpbHkgYmUgZGV0ZXJtaW5lZCBpbiBfUHJlcGFyZUFuZEFkZEluZm9Sb3coKQogICAgbXkgJUNvbXBsaWNhdGVkVmFsdWU7CgogICAgIyBWYWx1ZXMgZm9yIENBQgogICAgZm9yIG15ICRBdHRyaWJ1dGUgKHF3KENBQkFnZW50cyBDQUJDdXN0b21lcnMpKSB7CiAgICAgICAgbXkgQExvbmdOYW1lczsKICAgICAgICBpZiAoICRBdHRyaWJ1dGUgZXEgJ0NBQkFnZW50cycgJiYgJENoYW5nZS0+eyRBdHRyaWJ1dGV9ICkgewoKICAgICAgICAgICAgZm9yIG15ICRDQUJBZ2VudCAoIEB7ICRDaGFuZ2UtPnskQXR0cmlidXRlfSB9ICkgewoKICAgICAgICAgICAgICAgIG15ICRVc2VyRnVsbE5hbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTmFtZSgKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJENBQkFnZW50LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBpZiAoJFVzZXJGdWxsTmFtZSkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQExvbmdOYW1lcywgJFVzZXJGdWxsTmFtZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQExvbmdOYW1lcywgJ0lEPScgLiAkQ0FCQWdlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkQXR0cmlidXRlIGVxICdDQUJDdXN0b21lcnMnICYmICRDaGFuZ2UtPnskQXR0cmlidXRlfSApIHsKCiAgICAgICAgICAgIGZvciBteSAkQ0FCQ3VzdG9tZXIgKCBAeyAkQ2hhbmdlLT57JEF0dHJpYnV0ZX0gfSApIHsKCiAgICAgICAgICAgICAgICBteSAlVXNlckRhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyktPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgICAgICAgICAgVXNlciAgPT4gJENBQkN1c3RvbWVyLAogICAgICAgICAgICAgICAgICAgIENhY2hlID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCVVc2VyRGF0YSkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQExvbmdOYW1lcywgc3ByaW50ZiAnJXMgKCVzICVzKScsCiAgICAgICAgICAgICAgICAgICAgICAgIEBVc2VyRGF0YXtxdyhVc2VyTG9naW4gVXNlckZpcnN0bmFtZSBVc2VyTGFzdG5hbWUpfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQExvbmdOYW1lcywgJ0lEPScgLiAkQ0FCQ3VzdG9tZXI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgcmVtZW1iZXIgdGhlIHZhbHVlCiAgICAgICAgJENvbXBsaWNhdGVkVmFsdWV7ICRBdHRyaWJ1dGUgLiAnTG9uZycgfSA9IGpvaW4oICJcbiIsIEBMb25nTmFtZXMgKSB8fCAnLSc7CiAgICB9CgogICAgIyB2YWx1ZSBmb3IgYXR0YWNobWVudHMKICAgIHsKCiAgICAgICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICAgICBteSBAQXR0YWNobWVudHMgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBdHRhY2htZW50TGlzdCgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZS0+e0NoYW5nZUlEfSwKICAgICAgICApOwoKICAgICAgICBteSBAVmFsdWVzOwoKICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgIGZvciBteSAkRmlsZW5hbWUgKEBBdHRhY2htZW50cykgewoKICAgICAgICAgICAgIyBnZXQgaW5mbyBhYm91dCBmaWxlCiAgICAgICAgICAgIG15ICRBdHRhY2htZW50RGF0YSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlLT57Q2hhbmdlSUR9LAogICAgICAgICAgICAgICAgRmlsZW5hbWUgPT4gJEZpbGVuYW1lLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayBmb3IgYXR0YWNobWVudCBpbmZvcm1hdGlvbgogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRBdHRhY2htZW50RGF0YTsKCiAgICAgICAgICAgIHB1c2ggQFZhbHVlcywgc3ByaW50ZiAnJXMgJXMnLAogICAgICAgICAgICAgICAgJEF0dGFjaG1lbnREYXRhLT57RmlsZW5hbWV9LAogICAgICAgICAgICAgICAgJEF0dGFjaG1lbnREYXRhLT57RmlsZXNpemV9OwogICAgICAgIH0KCiAgICAgICAgIyBzaG93IHJvdwogICAgICAgICRDb21wbGljYXRlZFZhbHVle0F0dGFjaG1lbnRzfSA9IGpvaW4oICJcbiIsIEBWYWx1ZXMgKSB8fCAnLSc7CiAgICB9CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgbXkgJER5bmFtaWNGaWVsZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsgJ0lUU01DaGFuZ2UnLCAnSVRTTVdvcmtPcmRlcicgXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiAkU2VsZi0+e0NvbmZpZ30tPntEeW5hbWljRmllbGR9IHx8IHt9LAogICAgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMKICAgIG15IEBEeW5hbWljRmllbGRSb3dTcGVjOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBzaG93IG9ubHkgY2hhbmdlIGR5bmFtaWMgZmllbGRzIGhlcmUKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57T2JqZWN0VHlwZX0gbmUgJ0lUU01DaGFuZ2UnOwoKICAgICAgICAjIGdldCBkeW5hbWljIGZpZWxkIGJhY2tlbmQgb2JqZWN0CiAgICAgICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgICAgIG15ICRWYWx1ZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZUdldCgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkQ2hhbmdlLT57Q2hhbmdlSUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHByaW50IHN0cmluZyBmb3IgdGhpcyBkeW5hbWljIGZpZWxkCiAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICBWYWx1ZU1heENoYXJzICAgICAgPT4gMTAwMCwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgKTsKCiAgICAgICAgIyBmb3IgZW1wdHkgdmFsdWVzCiAgICAgICAgaWYgKCAhJFZhbHVlU3RyZy0+e1ZhbHVlfSApIHsKICAgICAgICAgICAgJFZhbHVlU3RyZy0+e1ZhbHVlfSA9ICctJzsKICAgICAgICB9CgogICAgICAgIG15ICRMYWJlbCA9ICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH07CgogICAgICAgIHB1c2ggQER5bmFtaWNGaWVsZFJvd1NwZWMsIHsKICAgICAgICAgICAgQXR0cmlidXRlICAgICAgICAgICA9PiAkTGFiZWwsCiAgICAgICAgICAgIEtleSAgICAgICAgICAgICAgICAgPT4gJExhYmVsLAogICAgICAgICAgICBWYWx1ZUlzRHluYW1pY0ZpZWxkID0+IDEsCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1ZhbHVlfSwKICAgICAgICAgICAgVGFibGUgICAgICAgICAgICAgICA9PiBcQFRhYmxlTGVmdCwKICAgICAgICB9OwogICAgfQoKICAgIG15IEBSb3dTcGVjID0gKAogICAgICAgIHsKICAgICAgICAgICAgQXR0cmlidXRlICAgICAgICAgICA9PiAnQ2hhbmdlU3RhdGUnLAogICAgICAgICAgICBUYWJsZSAgICAgICAgICAgICAgID0+IFxAVGFibGVMZWZ0LAogICAgICAgICAgICBWYWx1ZUlzVHJhbnNsYXRhYmxlID0+IDEsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSAgPT4gJ1BsYW5uZWRFZmZvcnQnLAogICAgICAgICAgICBJc09wdGlvbmFsID0+IDEsCiAgICAgICAgICAgIFRhYmxlICAgICAgPT4gXEBUYWJsZUxlZnQsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSAgPT4gJ0FjY291bnRlZFRpbWUnLAogICAgICAgICAgICBJc09wdGlvbmFsID0+IDEsCiAgICAgICAgICAgIFRhYmxlICAgICAgPT4gXEBUYWJsZUxlZnQsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSAgICAgICAgICAgPT4gJ0NhdGVnb3J5JywKICAgICAgICAgICAgS2V5ICAgICAgICAgICAgICAgICA9PiAnQ2F0ZWdvcnknLAogICAgICAgICAgICBUYWJsZSAgICAgICAgICAgICAgID0+IFxAVGFibGVMZWZ0LAogICAgICAgICAgICBWYWx1ZUlzVHJhbnNsYXRhYmxlID0+IDEsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSAgICAgICAgICAgPT4gJ0ltcGFjdCcsCiAgICAgICAgICAgIEtleSAgICAgICAgICAgICAgICAgPT4gJ0ltcGFjdCcsCiAgICAgICAgICAgIFRhYmxlICAgICAgICAgICAgICAgPT4gXEBUYWJsZUxlZnQsCiAgICAgICAgICAgIFZhbHVlSXNUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgQXR0cmlidXRlICAgICAgICAgICA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBLZXkgICAgICAgICAgICAgICAgID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIFRhYmxlICAgICAgICAgICAgICAgPT4gXEBUYWJsZUxlZnQsCiAgICAgICAgICAgIFZhbHVlSXNUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICB9LAogICAgICAgIEBEeW5hbWljRmllbGRSb3dTcGVjLAogICAgICAgIHsKICAgICAgICAgICAgQXR0cmlidXRlICAgPT4gJ0NoYW5nZU1hbmFnZXInLAogICAgICAgICAgICBUYWJsZSAgICAgICA9PiBcQFRhYmxlTGVmdCwKICAgICAgICAgICAgVmFsdWVJc1VzZXIgPT4gMSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgQXR0cmlidXRlICAgPT4gJ0NoYW5nZUJ1aWxkZXInLAogICAgICAgICAgICBUYWJsZSAgICAgICA9PiBcQFRhYmxlTGVmdCwKICAgICAgICAgICAgVmFsdWVJc1VzZXIgPT4gMSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgQXR0cmlidXRlID0+ICdDQUJBZ2VudHNMb25nJywKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdDQUIgQWdlbnRzJywKICAgICAgICAgICAgVGFibGUgICAgID0+IFxAVGFibGVMZWZ0LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBBdHRyaWJ1dGUgPT4gJ0NBQkN1c3RvbWVyc0xvbmcnLAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0NBQiBDdXN0b21lcnMnLAogICAgICAgICAgICBUYWJsZSAgICAgPT4gXEBUYWJsZUxlZnQsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnQXR0YWNobWVudHMnLAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0F0dGFjaG1lbnRzJywKICAgICAgICAgICAgVGFibGUgICAgID0+IFxAVGFibGVMZWZ0LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBBdHRyaWJ1dGUgICA9PiAnUmVxdWVzdGVkVGltZScsCiAgICAgICAgICAgIElzT3B0aW9uYWwgID0+IDEsCiAgICAgICAgICAgIFRhYmxlICAgICAgID0+IFxAVGFibGVSaWdodCwKICAgICAgICAgICAgVmFsdWVJc1RpbWUgPT4gMSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgQXR0cmlidXRlICAgPT4gJ1BsYW5uZWRTdGFydFRpbWUnLAogICAgICAgICAgICBUYWJsZSAgICAgICA9PiBcQFRhYmxlUmlnaHQsCiAgICAgICAgICAgIFZhbHVlSXNUaW1lID0+IDEsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSAgID0+ICdQbGFubmVkRW5kVGltZScsCiAgICAgICAgICAgIFRhYmxlICAgICAgID0+IFxAVGFibGVSaWdodCwKICAgICAgICAgICAgVmFsdWVJc1RpbWUgPT4gMSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgQXR0cmlidXRlICAgPT4gJ0FjdHVhbFN0YXJ0VGltZScsCiAgICAgICAgICAgIFRhYmxlICAgICAgID0+IFxAVGFibGVSaWdodCwKICAgICAgICAgICAgVmFsdWVJc1RpbWUgPT4gMSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgQXR0cmlidXRlICAgPT4gJ0FjdHVhbEVuZFRpbWUnLAogICAgICAgICAgICBUYWJsZSAgICAgICA9PiBcQFRhYmxlUmlnaHQsCiAgICAgICAgICAgIFZhbHVlSXNUaW1lID0+IDEsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSAgID0+ICdDcmVhdGVUaW1lJywKICAgICAgICAgICAgS2V5ICAgICAgICAgPT4gJ0NyZWF0ZWQnLAogICAgICAgICAgICBUYWJsZSAgICAgICA9PiBcQFRhYmxlUmlnaHQsCiAgICAgICAgICAgIFZhbHVlSXNUaW1lID0+IDEsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSAgID0+ICdDaGFuZ2VUaW1lJywKICAgICAgICAgICAgS2V5ICAgICAgICAgPT4gJ0NoYW5nZWQnLAogICAgICAgICAgICBUYWJsZSAgICAgICA9PiBcQFRhYmxlUmlnaHQsCiAgICAgICAgICAgIFZhbHVlSXNUaW1lID0+IDEsCiAgICAgICAgfSwKICAgICk7CgogICAgZm9yIG15ICRSb3dTcGVjIChAUm93U3BlYykgewoKICAgICAgICAjIGZpbGwgQFRhYmxlTGVmdCBhbmQgQFRhYmxlUmlnaHQKICAgICAgICAkU2VsZi0+X1ByZXBhcmVBbmRBZGRJbmZvUm93KAogICAgICAgICAgICBSb3dTcGVjID0+ICRSb3dTcGVjLAogICAgICAgICAgICBEYXRhICAgID0+IHsgJXskQ2hhbmdlfSwgJUNvbXBsaWNhdGVkVmFsdWUgfSwKICAgICAgICApOwogICAgfQoKICAgICMgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIGNoYW5nZSBpbmZvIHRhYmxlCiAgICBteSAkUm93cyA9IG1heCggc2NhbGFyKEBUYWJsZUxlZnQpLCBzY2FsYXIoQFRhYmxlUmlnaHQpICk7CgogICAgbXkgJVRhYmxlOwogICAgZm9yIG15ICRSb3cgKCAwIC4uICRSb3dzIC0gMSApIHsKICAgICAgICAkVGFibGV7Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0WyRSb3ddLT57S2V5fTsKICAgICAgICAkVGFibGV7Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxle0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdFskUm93XS0+e1ZhbHVlfTsKICAgICAgICAkVGFibGV7Q2VsbERhdGF9WyRSb3ddWzJde0NvbnRlbnR9ICAgICAgICAgPSAnICc7CiAgICAgICAgJFRhYmxle0NlbGxEYXRhfVskUm93XVsyXXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNGRkZGRkYnOwogICAgICAgICRUYWJsZXtDZWxsRGF0YX1bJFJvd11bM117Q29udGVudH0gICAgICAgICA9ICRUYWJsZVJpZ2h0WyRSb3ddLT57S2V5fTsKICAgICAgICAkVGFibGV7Q2VsbERhdGF9WyRSb3ddWzNde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxle0NlbGxEYXRhfVskUm93XVs0XXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHRbJFJvd10tPntWYWx1ZX07CiAgICB9CgogICAgJFRhYmxle0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDgwOwogICAgJFRhYmxle0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDE3MC41OwogICAgJFRhYmxle0NvbHVtbkRhdGF9WzJde1dpZHRofSA9IDQ7CiAgICAkVGFibGV7Q29sdW1uRGF0YX1bM117V2lkdGh9ID0gODA7CiAgICAkVGFibGV7Q29sdW1uRGF0YX1bNF17V2lkdGh9ID0gMTcwLjU7CgogICAgJFRhYmxle1R5cGV9ICAgICAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGV7Qm9yZGVyfSAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxle0ZvbnRTaXplfSAgICAgICAgICAgID0gNjsKICAgICRUYWJsZXtCYWNrZ3JvdW5kQ29sb3JFdmVufSA9ICcjREREREREJzsKICAgICRUYWJsZXtQYWRkaW5nfSAgICAgICAgICAgICA9IDE7CiAgICAkVGFibGV7UGFkZGluZ1RvcH0gICAgICAgICAgPSAzOwogICAgJFRhYmxle1BhZGRpbmdCb3R0b219ICAgICAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgJFNlbGYtPl9QREZPdXRwdXRUYWJsZSgKICAgICAgICBUYWJsZSA9PiBcJVRhYmxlLAogICAgKTsKCiAgICByZXR1cm4gJyc7Cgp9CgojIGVtaXQgaW5mb3JtYXRpb24gYWJvdXQgYSB3b3Jrb3JkZXIKc3ViIF9PdXRwdXRXb3JrT3JkZXJJbmZvIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhDaGFuZ2UgV29ya09yZGVyKSkgewogICAgICAgIGlmICggIWRlZmluZWQoICRQYXJhbXskTmVlZGVkfSApICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgKCAkV29ya09yZGVyLCAkQ2hhbmdlICkgPSBAUGFyYW17cXcoV29ya09yZGVyIENoYW5nZSl9OwoKICAgIG15ICRQcmludFdvcmtPcmRlciA9ICRQYXJhbXtQcmludFdvcmtPcmRlcn0gfHwgMDsKCiAgICAjIGZpbGwgdGhlIHR3byB0YWJsZXMgb24gdG9wLAogICAgIyBib3RoIHRhYmxlcyBoYXZlIHR3byBjb2x1bXM6IEtleSBhbmQgVmFsdWUKICAgIG15ICggQFRhYmxlTGVmdCwgQFRhYmxlUmlnaHQgKTsKCiAgICAjIGRldGVybWluZSB2YWx1ZXMgdGhhdCBjYW4ndCBiZSBkZXRlcm1pbmVkIGluIF9QcmVwYXJlQW5kQWRkSW5mb1JvdygpCiAgICBteSAlQ29tcGxpY2F0ZWRWYWx1ZTsKCiAgICAjIHZhbHVlIGZvciBhdHRhY2htZW50cwogICAgewoKICAgICAgICAjIGdldCB3b3JrIG9yZGVyIG9iamVjdAogICAgICAgIG15ICRXb3JrT3JkZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpOwoKICAgICAgICBteSBAQXR0YWNobWVudHMgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBdHRhY2htZW50TGlzdCgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlci0+e1dvcmtPcmRlcklEfSwKICAgICAgICApOwoKICAgICAgICBteSBAVmFsdWVzOwoKICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgIGZvciBteSAkRmlsZW5hbWUgKEBBdHRhY2htZW50cykgewoKICAgICAgICAgICAgIyBnZXQgaW5mbyBhYm91dCBmaWxlCiAgICAgICAgICAgIG15ICRBdHRhY2htZW50RGF0YSA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVyLT57V29ya09yZGVySUR9LAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEZpbGVuYW1lLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayBmb3IgYXR0YWNobWVudCBpbmZvcm1hdGlvbgogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRBdHRhY2htZW50RGF0YTsKCiAgICAgICAgICAgIHB1c2ggQFZhbHVlcywgc3ByaW50ZiAnJXMgJXMnLAogICAgICAgICAgICAgICAgJEF0dGFjaG1lbnREYXRhLT57RmlsZW5hbWV9LAogICAgICAgICAgICAgICAgJEF0dGFjaG1lbnREYXRhLT57RmlsZXNpemV9OwogICAgICAgIH0KCiAgICAgICAgIyBzaG93IHJvdwogICAgICAgICRDb21wbGljYXRlZFZhbHVle0F0dGFjaG1lbnRzfSA9IGpvaW4oICJcbiIsIEBWYWx1ZXMgKSB8fCAnLSc7CiAgICB9CgogICAgIyBhbGxvdyB3cmFwcGluZyBvZiBsb25nIHdvcmRzIGluIHRoZSBjaGFuZ2UgdGl0bGUKICAgICggJENvbXBsaWNhdGVkVmFsdWV7V3JhcHBhYmxlQ2hhbmdlVGl0bGV9ID0gJENoYW5nZS0+e0NoYW5nZVRpdGxlfSApCiAgICAgICAgPX4gc3sgKCBcU3syNX0gKSB9eyQxIH14bXNnOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIG15ICREeW5hbWljRmllbGQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiBbICdJVFNNQ2hhbmdlJywgJ0lUU01Xb3JrT3JkZXInIF0sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJFNlbGYtPntDb25maWd9LT57RHluYW1pY0ZpZWxkfSB8fCB7fSwKICAgICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICBteSBARHluYW1pY0ZpZWxkUm93U3BlYzsKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgc2hvdyBvbmx5IHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcyBoZXJlCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e09iamVjdFR5cGV9IG5lICdJVFNNV29ya09yZGVyJzsKCiAgICAgICAgIyBnZXQgZHluYW1pYyBmaWVsZCBiYWNrZW5kIG9iamVjdAogICAgICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICAgICBteSAkVmFsdWUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFdvcmtPcmRlci0+e1dvcmtPcmRlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBwcmludCBzdHJpbmcgZm9yIHRoaXMgZHluYW1pYyBmaWVsZAogICAgICAgIG15ICRWYWx1ZVN0cmcgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RGlzcGxheVZhbHVlUmVuZGVyKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRWYWx1ZSwKICAgICAgICAgICAgVmFsdWVNYXhDaGFycyAgICAgID0+IDEwMDAsCiAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICk7CgogICAgICAgICMgZm9yIGVtcHR5IHZhbHVlcwogICAgICAgIGlmICggISRWYWx1ZVN0cmctPntWYWx1ZX0gKSB7CiAgICAgICAgICAgICRWYWx1ZVN0cmctPntWYWx1ZX0gPSAnLSc7CiAgICAgICAgfQoKICAgICAgICBteSAkTGFiZWwgPSAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9OwoKICAgICAgICBwdXNoIEBEeW5hbWljRmllbGRSb3dTcGVjLCB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSAgICAgICAgICAgPT4gJExhYmVsLAogICAgICAgICAgICBLZXkgICAgICAgICAgICAgICAgID0+ICRMYWJlbCwKICAgICAgICAgICAgVmFsdWVJc0R5bmFtaWNGaWVsZCA9PiAxLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgIFRhYmxlICAgICAgICAgICAgICAgPT4gXEBUYWJsZUxlZnQsCiAgICAgICAgfTsKICAgIH0KCiAgICBteSBAUm93U3BlYyA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnV3JhcHBhYmxlQ2hhbmdlVGl0bGUnLAogICAgICAgICAgICBUYWJsZSAgICAgPT4gXEBUYWJsZUxlZnQsCiAgICAgICAgICAgIEtleSAgICAgICA9PiAnQ2hhbmdlVGl0bGUnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBBdHRyaWJ1dGUgPT4gJ0NoYW5nZU51bWJlcicsCiAgICAgICAgICAgIFRhYmxlICAgICA9PiBcQFRhYmxlTGVmdCwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdDaGFuZ2VOdW1iZXInLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBBdHRyaWJ1dGUgICAgICAgICAgID0+ICdXb3JrT3JkZXJTdGF0ZScsCiAgICAgICAgICAgIFRhYmxlICAgICAgICAgICAgICAgPT4gXEBUYWJsZUxlZnQsCiAgICAgICAgICAgIFZhbHVlSXNUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgQXR0cmlidXRlICAgICAgICAgICA9PiAnV29ya09yZGVyVHlwZScsCiAgICAgICAgICAgIFRhYmxlICAgICAgICAgICAgICAgPT4gXEBUYWJsZUxlZnQsCiAgICAgICAgICAgIFZhbHVlSXNUcmFuc2xhdGFibGUgPT4gMSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgQXR0cmlidXRlICAgPT4gJ1dvcmtPcmRlckFnZW50JywKICAgICAgICAgICAgVGFibGUgICAgICAgPT4gXEBUYWJsZUxlZnQsCiAgICAgICAgICAgIFZhbHVlSXNVc2VyID0+IDEsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSAgPT4gJ1BsYW5uZWRFZmZvcnQnLAogICAgICAgICAgICBJc09wdGlvbmFsID0+IDEsCiAgICAgICAgICAgIFRhYmxlICAgICAgPT4gXEBUYWJsZUxlZnQsCiAgICAgICAgICAgIEtleSAgICAgICAgPT4gJ1BsYW5uZWRFZmZvcnQnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBBdHRyaWJ1dGUgID0+ICdBY2NvdW50ZWRUaW1lJywKICAgICAgICAgICAgSXNPcHRpb25hbCA9PiAxLAogICAgICAgICAgICBUYWJsZSAgICAgID0+IFxAVGFibGVMZWZ0LAogICAgICAgICAgICBLZXkgICAgICAgID0+ICdBY2NvdW50ZWRUaW1lJywKICAgICAgICB9LAogICAgICAgIEBEeW5hbWljRmllbGRSb3dTcGVjLAogICAgICAgIHsKICAgICAgICAgICAgQXR0cmlidXRlID0+ICdBdHRhY2htZW50cycsCiAgICAgICAgICAgIEtleSAgICAgICA9PiAnQXR0YWNobWVudHMnLAogICAgICAgICAgICBUYWJsZSAgICAgPT4gXEBUYWJsZUxlZnQsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSAgID0+ICdQbGFubmVkU3RhcnRUaW1lJywKICAgICAgICAgICAgVGFibGUgICAgICAgPT4gXEBUYWJsZVJpZ2h0LAogICAgICAgICAgICBWYWx1ZUlzVGltZSA9PiAxLAogICAgICAgICAgICBLZXkgICAgICAgICA9PiAnUGxhbm5lZFN0YXJ0VGltZScsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSAgID0+ICdQbGFubmVkRW5kVGltZScsCiAgICAgICAgICAgIFRhYmxlICAgICAgID0+IFxAVGFibGVSaWdodCwKICAgICAgICAgICAgVmFsdWVJc1RpbWUgPT4gMSwKICAgICAgICAgICAgS2V5ICAgICAgICAgPT4gJ1BsYW5uZWRFbmRUaW1lJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgQXR0cmlidXRlICAgPT4gJ0FjdHVhbFN0YXJ0VGltZScsCiAgICAgICAgICAgIFRhYmxlICAgICAgID0+IFxAVGFibGVSaWdodCwKICAgICAgICAgICAgVmFsdWVJc1RpbWUgPT4gMSwKICAgICAgICAgICAgS2V5ICAgICAgICAgPT4gJ0FjdHVhbFN0YXJ0VGltZScsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSAgID0+ICdBY3R1YWxFbmRUaW1lJywKICAgICAgICAgICAgVGFibGUgICAgICAgPT4gXEBUYWJsZVJpZ2h0LAogICAgICAgICAgICBWYWx1ZUlzVGltZSA9PiAxLAogICAgICAgICAgICBLZXkgICAgICAgICA9PiAnQWN0dWFsRW5kVGltZScsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSAgID0+ICdDcmVhdGVUaW1lJywKICAgICAgICAgICAgS2V5ICAgICAgICAgPT4gJ0NyZWF0ZWQnLAogICAgICAgICAgICBUYWJsZSAgICAgICA9PiBcQFRhYmxlUmlnaHQsCiAgICAgICAgICAgIFZhbHVlSXNUaW1lID0+IDEsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEF0dHJpYnV0ZSAgID0+ICdDaGFuZ2VUaW1lJywKICAgICAgICAgICAgS2V5ICAgICAgICAgPT4gJ0NoYW5nZWQnLAogICAgICAgICAgICBUYWJsZSAgICAgICA9PiBcQFRhYmxlUmlnaHQsCiAgICAgICAgICAgIFZhbHVlSXNUaW1lID0+IDEsCiAgICAgICAgfSwKICAgICk7CgogICAgZm9yIG15ICRSb3dTcGVjIChAUm93U3BlYykgewoKICAgICAgICAjIGZpbGwgQFRhYmxlTGVmdCBhbmQgQFRhYmxlUmlnaHQKICAgICAgICAjIHRoZSB3b3Jrb3JkZXIgZGF0YSBvdmVycmlkZXMgdGhlIGNoYW5nZSBkYXRhCiAgICAgICAgJFNlbGYtPl9QcmVwYXJlQW5kQWRkSW5mb1JvdygKICAgICAgICAgICAgUm93U3BlYyA9PiAkUm93U3BlYywKICAgICAgICAgICAgRGF0YSAgICA9PiB7ICV7JENoYW5nZX0sICV7JFdvcmtPcmRlcn0sICVDb21wbGljYXRlZFZhbHVlIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkUm93cyA9IG1heCggc2NhbGFyKEBUYWJsZUxlZnQpLCBzY2FsYXIoQFRhYmxlUmlnaHQpICk7CgogICAgbXkgJVRhYmxlOwogICAgZm9yIG15ICRSb3cgKCAwIC4uICRSb3dzIC0gMSApIHsKICAgICAgICAkVGFibGV7Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0WyRSb3ddLT57S2V5fTsKICAgICAgICAkVGFibGV7Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxle0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdFskUm93XS0+e1ZhbHVlfTsKICAgICAgICAkVGFibGV7Q2VsbERhdGF9WyRSb3ddWzJde0NvbnRlbnR9ICAgICAgICAgPSAnICc7CiAgICAgICAgJFRhYmxle0NlbGxEYXRhfVskUm93XVsyXXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNGRkZGRkYnOwogICAgICAgICRUYWJsZXtDZWxsRGF0YX1bJFJvd11bM117Q29udGVudH0gICAgICAgICA9ICRUYWJsZVJpZ2h0WyRSb3ddLT57S2V5fTsKICAgICAgICAkVGFibGV7Q2VsbERhdGF9WyRSb3ddWzNde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxle0NlbGxEYXRhfVskUm93XVs0XXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHRbJFJvd10tPntWYWx1ZX07CiAgICB9CgogICAgJFRhYmxle0NvbHVtbkRhdGF9WzBde1dpZHRofSA9IDgwOwogICAgJFRhYmxle0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDE3MC41OwogICAgJFRhYmxle0NvbHVtbkRhdGF9WzJde1dpZHRofSA9IDQ7CiAgICAkVGFibGV7Q29sdW1uRGF0YX1bM117V2lkdGh9ID0gODA7CiAgICAkVGFibGV7Q29sdW1uRGF0YX1bNF17V2lkdGh9ID0gMTcwLjU7CgogICAgJFRhYmxle1R5cGV9ICAgICAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGV7Qm9yZGVyfSAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxle0ZvbnRTaXplfSAgICAgICAgICAgID0gNjsKICAgICRUYWJsZXtCYWNrZ3JvdW5kQ29sb3JFdmVufSA9ICcjREREREREJzsKICAgICRUYWJsZXtQYWRkaW5nfSAgICAgICAgICAgICA9IDE7CiAgICAkVGFibGV7UGFkZGluZ1RvcH0gICAgICAgICAgPSAzOwogICAgJFRhYmxle1BhZGRpbmdCb3R0b219ICAgICAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgJFNlbGYtPl9QREZPdXRwdXRUYWJsZSgKICAgICAgICBUYWJsZSA9PiBcJVRhYmxlLAogICAgKTsKCiAgICByZXR1cm4gJyc7Cgp9CgojIG91dHB1dCBhIGJvZHkgb2YgdGV4dCwgc3VjaCBhcyBhIGNoYW5nZSBkZXNjcmlwdGlvbgpzdWIgX091dHB1dExvbmdUZXh0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhQcmludENoYW5nZSBQcmludFdvcmtPcmRlciBUaXRsZSBMb25nVGV4dCkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkKCAkUGFyYW17JE5lZWRlZH0gKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IFBERiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgIyBzb21lIHZlcnRpY2FsIHdoaXRlc3BhY2UKICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTE1LAogICAgKTsKCiAgICAjIG91dHB1dCBoZWFkbGluZSBmb3IgdGhlIHNlY3Rpb24KICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJFBhcmFte1RpdGxlfSwKICAgICAgICBIZWlnaHQgICA9PiA3LAogICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkSXRhbGljJywKICAgICAgICBGb250U2l6ZSA9PiA3LAogICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICk7CgogICAgIyB2ZXJ0aWNhbCB3aGl0ZXNwYWNlIGFmdGVyIHRpdGxlCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC00LAogICAgKTsKCiAgICAjIHRhYmxlIHBhcmFtcyBjb21tb24gdG8gcHJpbnRpbmcgYSBib2R5IG9mIHRleHQsCiAgICAjIGFjdHVhbGx5IGEgdGFibGUgaXMgYSBiaXQgb2Ygb3ZlcmtpbGwgZm9yIGEgc2luZ2xlIHRleHQsCiAgICBteSAlVGFibGUgPSAoCiAgICAgICAgVHlwZSAgICAgICAgICAgID0+ICdDdXQnLAogICAgICAgIEJvcmRlciAgICAgICAgICA9PiAwLAogICAgICAgIEZvbnQgICAgICAgICAgICA9PiAnTW9ub3NwYWNlZCcsCiAgICAgICAgRm9udFNpemUgICAgICAgID0+IDcsCiAgICAgICAgQmFja2dyb3VuZENvbG9yID0+ICcjREREREREJywKICAgICAgICBQYWRkaW5nICAgICAgICAgPT4gNCwKICAgICAgICBQYWRkaW5nVG9wICAgICAgPT4gOCwKICAgICAgICBQYWRkaW5nQm90dG9tICAgPT4gOCwKICAgICk7CgogICAgIyBvdXRwdXQgdGFibGVzCiAgICAkVGFibGV7Q2VsbERhdGF9WzBdWzBde0NvbnRlbnR9ID0gJFBhcmFte0xvbmdUZXh0fSB8fCAnJzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgJFNlbGYtPl9QREZPdXRwdXRUYWJsZSgKICAgICAgICBUYWJsZSA9PiBcJVRhYmxlLAogICAgKTsKCiAgICByZXR1cm4gJyc7Cgp9CgojIG91dHB1dCBvdmVydmlldyBvdmVyIHdvcmtvcmRlcnMKc3ViIF9PdXRwdXRXb3JrT3JkZXJPdmVydmlldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICFkZWZpbmVkKCAkUGFyYW17V29ya09yZGVyT3ZlcnZpZXd9ICkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFdvcmtPcmRlck92ZXJ2aWV3ISIKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBQREYgb2JqZWN0CiAgICBteSAkUERGT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlBERicpOwoKICAgICMgdmVydGljYWwgd2hpdGVzcGFjZSBiZWZvcmUgc2VjdGlvbiBoZWFkbGluZQogICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTUsCiAgICApOwoKICAgICMgZ2V0IGxheXRvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgb3V0cHV0IGhlYWRsaW5lIGZvciB0aGUgc2VjdGlvbgogICAgbXkgJFRyYW5zbGF0aW9uID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fTsKICAgIG15ICRTZWN0aW9uVGl0bGUgPQogICAgICAgICRUcmFuc2xhdGlvbi0+VHJhbnNsYXRlKCAnSVRTTSBXb3Jrb3JkZXIgT3ZlcnZpZXcgKCVzKScsIHNjYWxhciBAeyAkUGFyYW17V29ya09yZGVyT3ZlcnZpZXd9IH0gKTsKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJFNlY3Rpb25UaXRsZSwKICAgICAgICBIZWlnaHQgICA9PiA3LAogICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkSXRhbGljJywKICAgICAgICBGb250U2l6ZSA9PiA3LAogICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICk7CgogICAgIyB2ZXJ0aWNhbCB3aGl0ZXNwYWNlIGFmdGVyIHNlY3Rpb24gaGVhZGxpbmUKICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTQsCiAgICApOwoKICAgICMgb3V0cHV0IHRoZSBvdmVydmlldyB0YWJsZSBvbmx5IGlmIHRoZXJlIGlzIGF0IGxlYXN0IGEgc2luZ2xlIHdvcmtvcmRlciwKICAgICMgcHJpbnRpbmcgYW4gZW1wdHkgdGFibGUgbWlnaHQgY3JlYXRlIGhhdm9jCiAgICBpZiAoIEB7ICRQYXJhbXtXb3JrT3JkZXJPdmVydmlld30gfSApIHsKCiAgICAgICAgbXkgJVRhYmxlOwogICAgICAgIG15ICRSb3cgPSAwOwoKICAgICAgICAjIGFkZCB0YWJsZSBoZWFkZXIKICAgICAgICAkVGFibGV7Q2VsbERhdGF9WyAkUm93KysgXSA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRm9udCAgICA9PiAnUHJvcG9ydGlvbmFsQm9sZCcsCiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcjJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRm9udCAgICA9PiAnUHJvcG9ydGlvbmFsQm9sZCcsCiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRUcmFuc2xhdGlvbi0+VHJhbnNsYXRlKCdUaXRsZScpLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBGb250ICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkJywKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJFRyYW5zbGF0aW9uLT5UcmFuc2xhdGUoJ1N0YXRlJyksCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZvbnQgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGQnLAogICAgICAgICAgICAgICAgQ29udGVudCA9PiAkVHJhbnNsYXRpb24tPlRyYW5zbGF0ZSgnUGxhbm5lZFN0YXJ0VGltZScpLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBGb250ICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkJywKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJFRyYW5zbGF0aW9uLT5UcmFuc2xhdGUoJ1BsYW5uZWRFbmRUaW1lJyksCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZvbnQgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGQnLAogICAgICAgICAgICAgICAgQ29udGVudCA9PiAkVHJhbnNsYXRpb24tPlRyYW5zbGF0ZSgnQWN0dWFsU3RhcnRUaW1lJyksCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEZvbnQgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGQnLAogICAgICAgICAgICAgICAgQ29udGVudCA9PiAkVHJhbnNsYXRpb24tPlRyYW5zbGF0ZSgnQWN0dWFsRW5kVGltZScpLAogICAgICAgICAgICB9LAogICAgICAgIF07CgogICAgICAgIGZvciBteSAkV29ya09yZGVyICggQHsgJFBhcmFte1dvcmtPcmRlck92ZXJ2aWV3fSB9ICkgewogICAgICAgICAgICAkVGFibGV7Q2VsbERhdGF9WyAkUm93KysgXSA9IFsgbWFwIHsgeyBDb250ZW50ID0+ICRfIH0gfSBAeyRXb3JrT3JkZXJ9IF07CiAgICAgICAgfQoKICAgICAgICAkVGFibGV7Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gMjsKICAgICAgICAkVGFibGV7Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gNjM7CiAgICAgICAgJFRhYmxle0NvbHVtbkRhdGF9WzJde1dpZHRofSA9IDI1OwogICAgICAgICRUYWJsZXtDb2x1bW5EYXRhfVszXXtXaWR0aH0gPSA0MDsKICAgICAgICAkVGFibGV7Q29sdW1uRGF0YX1bNF17V2lkdGh9ID0gNDA7CiAgICAgICAgJFRhYmxle0NvbHVtbkRhdGF9WzVde1dpZHRofSA9IDQwOwogICAgICAgICRUYWJsZXtDb2x1bW5EYXRhfVs2XXtXaWR0aH0gPSA0MDsKCiAgICAgICAgIyB0YWJsZSBwYXJhbXMKICAgICAgICAkVGFibGV7VHlwZX0gICAgICAgICAgICA9ICdDdXQnOwogICAgICAgICRUYWJsZXtCb3JkZXJ9ICAgICAgICAgID0gMDsKICAgICAgICAkVGFibGV7Rm9udFNpemV9ICAgICAgICA9IDY7CiAgICAgICAgJFRhYmxle0JhY2tncm91bmRDb2xvcn0gPSAnI0RERERERCc7CiAgICAgICAgJFRhYmxle1BhZGRpbmd9ICAgICAgICAgPSAxOwogICAgICAgICRUYWJsZXtQYWRkaW5nVG9wfSAgICAgID0gMzsKICAgICAgICAkVGFibGV7UGFkZGluZ0JvdHRvbX0gICA9IDM7CgogICAgICAgICMgb3V0cHV0IHRhYmxlCiAgICAgICAgJFNlbGYtPl9QREZPdXRwdXRUYWJsZSgKICAgICAgICAgICAgVGFibGUgPT4gXCVUYWJsZSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgojIG91dHB1dCBpbmZvIGFib3V0IGxpbmtlZCBvYmplY3RzIG9mIGEgY2hhbmdlIG9yIGEgd29ya29yZGVyCnN1YiBfT3V0cHV0TGlua2VkT2JqZWN0cyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUHJpbnRDaGFuZ2UgUHJpbnRXb3JrT3JkZXIgTGlua0RhdGEgTGlua1R5cGVMaXN0KSkgewogICAgICAgIGlmICggIWRlZmluZWQoICRQYXJhbXskTmVlZGVkfSApICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICVUeXBlTGlzdCA9ICV7ICRQYXJhbXtMaW5rVHlwZUxpc3R9IH07CgogICAgbXkgJVRhYmxlOwogICAgbXkgJFJvdyA9IDA7CiAgICBmb3IgbXkgJExpbmtUeXBlTGlua0RpcmVjdGlvbiAoIHNvcnQgeyBsYyAkYSBjbXAgbGMgJGIgfSBrZXlzICV7ICRQYXJhbXtMaW5rRGF0YX0gfSApIHsKCiAgICAgICAgIyBpbnZlc3RpZ2F0ZSBsaW5rIHR5cGUgbmFtZQogICAgICAgIG15IEBMaW5rRGF0YSA9IHNwbGl0IHF7Ojp9LCAkTGlua1R5cGVMaW5rRGlyZWN0aW9uOwogICAgICAgIG15ICRMaW5rVHlwZU5hbWUgPSAkVHlwZUxpc3R7ICRMaW5rRGF0YVswXSB9LT57ICRMaW5rRGF0YVsxXSAuICdOYW1lJyB9OwogICAgICAgICRMaW5rVHlwZU5hbWUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJExpbmtUeXBlTmFtZSk7CgogICAgICAgICMgZGVmaW5lIGhlYWRsaW5lCiAgICAgICAgJFRhYmxle0NlbGxEYXRhfVskUm93XVswXXtDb250ZW50fSA9ICRMaW5rVHlwZU5hbWUgLiAnOic7CiAgICAgICAgJFRhYmxle0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGV7Q2VsbERhdGF9WyRSb3ddWzFde0NvbnRlbnR9ID0gJyc7CgogICAgICAgICMgZXh0cmFjdCBvYmplY3QgbGlzdAogICAgICAgIG15ICRPYmplY3RMaXN0ID0gJFBhcmFte0xpbmtEYXRhfS0+eyRMaW5rVHlwZUxpbmtEaXJlY3Rpb259OwoKICAgICAgICBmb3IgbXkgJE9iamVjdCAoIHNvcnQgeyBsYyAkYSBjbXAgbGMgJGIgfSBrZXlzICV7JE9iamVjdExpc3R9ICkgewoKICAgICAgICAgICAgZm9yIG15ICRJdGVtICggQHsgJE9iamVjdExpc3QtPnskT2JqZWN0fSB9ICkgewoKICAgICAgICAgICAgICAgICRUYWJsZXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gfHw9ICcnOwogICAgICAgICAgICAgICAgJFRhYmxle0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSA9ICRJdGVtLT57VGl0bGV9IHx8ICcnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRpbnVlIHsKICAgICAgICAgICAgICAgICRSb3crKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAkVGFibGV7Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gODA7CiAgICAkVGFibGV7Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gNDMxOwoKICAgICMgZ2V0IFBERiBvYmplY3QKICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkUERGT2JqZWN0LT5Qb3NpdGlvblNldCgKICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICBZICAgID0+IC0xNSwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGxpbmUKICAgICRQREZPYmplY3QtPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdMaW5rZWQgT2JqZWN0cycpLAogICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGRJdGFsaWMnLAogICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTQsCiAgICApOwoKICAgICMgdGFibGUgcGFyYW1zCiAgICAkVGFibGV7VHlwZX0gICAgICAgICAgICA9ICdDdXQnOwogICAgJFRhYmxle0JvcmRlcn0gICAgICAgICAgPSAwOwogICAgJFRhYmxle0ZvbnRTaXplfSAgICAgICAgPSA2OwogICAgJFRhYmxle0JhY2tncm91bmRDb2xvcn0gPSAnI0RERERERCc7CiAgICAkVGFibGV7UGFkZGluZ30gICAgICAgICA9IDE7CiAgICAkVGFibGV7UGFkZGluZ1RvcH0gICAgICA9IDM7CiAgICAkVGFibGV7UGFkZGluZ0JvdHRvbX0gICA9IDM7CgogICAgIyBvdXRwdXQgdGFibGUKICAgICRTZWxmLT5fUERGT3V0cHV0VGFibGUoCiAgICAgICAgVGFibGUgPT4gXCVUYWJsZSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCiMgb3V0cHV0IGEgdGFibGUsIGFjY3Jvc3Mgc2V2ZXJhbCBwYWdlcyBpZiBuZWNjZXNzYXJ5CnN1YiBfUERGT3V0cHV0VGFibGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhZGVmaW5lZCggJFBhcmFte1RhYmxlfSApICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBUYWJsZSEiCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBqdXN0IGZvciBoYXZpbmcgc2hvcnRlciBuYW1lcwogICAgbXkgJFRhYmxlID0gJFBhcmFte1RhYmxlfTsKICAgIG15ICRQYWdlICA9ICRTZWxmLT57UGFnZX07CiAgICBQQUdFOgogICAgZm9yICggJFBhZ2UtPntQYWdlQ291bnR9IC4uICRQYWdlLT57TWF4UGFnZXN9ICkgewoKICAgICAgICAjIGdldCBQREYgb2JqZWN0CiAgICAgICAgbXkgJFBERk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQREYnKTsKCiAgICAgICAgIyBvdXRwdXQgdGFibGUgKG9yIGEgZnJhZ21lbnQgb2YgaXQpCiAgICAgICAgJXskVGFibGV9ID0gJFBERk9iamVjdC0+VGFibGUoICV7JFRhYmxlfSApOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBpZiAoICRUYWJsZS0+e1N0YXRlfSApIHsKICAgICAgICAgICAgbGFzdCBQQUdFOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFBERk9iamVjdC0+UGFnZU5ldygKICAgICAgICAgICAgICAgICV7JFBhZ2V9LAogICAgICAgICAgICAgICAgRm9vdGVyUmlnaHQgPT4gam9pbiggJyAnLCAkUGFnZS0+e1BhZ2VUZXh0fSwgJFBhZ2UtPntQYWdlQ291bnR9ICksCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQYWdlLT57UGFnZUNvdW50fSsrOwogICAgICAgIH0KICAgIH0KCiAgICAkU2VsZi0+e1BhZ2V9LT57UGFnZUNvdW50fSA9ICRQYWdlLT57UGFnZUNvdW50fTsKCiAgICByZXR1cm4gMTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VQU0E7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMhJywgJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0gKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgc3RvcmUgbGFzdCBzY3JlZW4sIHVzZWQgZm9yIGJhY2tsaW5rcwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJyktPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlbkNoYW5nZXMnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IHNvcnRpbmcgcGFyYW1ldGVycwogICAgbXkgJFNvcnRCeSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTb3J0QnknICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnU29ydEJ5OjpEZWZhdWx0J30KICAgICAgICB8fCAnUGxhbm5lZFN0YXJ0VGltZSc7CgogICAgIyBnZXQgb3JkZXJpbmcgcGFyYW1ldGVycwogICAgbXkgJE9yZGVyQnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXJCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydPcmRlcjo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ1VwJzsKCiAgICBteSBAU29ydEJ5QXJyYXkgID0gKCRTb3J0QnkpOwogICAgbXkgQE9yZGVyQnlBcnJheSA9ICgkT3JkZXJCeSk7CgogICAgIyBpbnZlc3RpZ2F0ZSByZWZyZXNoCiAgICBteSAkUmVmcmVzaCA9ICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA/IDYwICogJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9IDogdW5kZWY7CgogICAgIyBzdGFydGluZyB3aXRoIHBhZ2UgLi4uCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCBSZWZyZXNoID0+ICRSZWZyZXNoICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICRMYXlvdXRPYmplY3QtPlByaW50KCBPdXRwdXQgPT4gXCRPdXRwdXQgKTsKICAgICRPdXRwdXQgPSAnJzsKCiAgICAjIGZpbmQgb3V0IHdoaWNoIGNvbHVtbnMgc2hvdWxkIGJlIHNob3duCiAgICBteSBAU2hvd0NvbHVtbnM7CiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e1Nob3dDb2x1bW5zfSApIHsKCiAgICAgICAgIyBnZXQgYWxsIHBvc3NpYmxlIGNvbHVtbnMgZnJvbSBjb25maWcKICAgICAgICBteSAlUG9zc2libGVDb2x1bW4gPSAleyAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gfTsKCiAgICAgICAgIyBnZXQgdGhlIGNvbHVtbiBuYW1lcyB0aGF0IHNob3VsZCBiZSBzaG93bgogICAgICAgIENPTFVNTk5BTUU6CiAgICAgICAgZm9yIG15ICROYW1lICggc29ydCBrZXlzICVQb3NzaWJsZUNvbHVtbiApIHsKICAgICAgICAgICAgbmV4dCBDT0xVTU5OQU1FIGlmICEkUG9zc2libGVDb2x1bW57JE5hbWV9OwogICAgICAgICAgICBwdXNoIEBTaG93Q29sdW1ucywgJE5hbWU7CiAgICAgICAgfQogICAgfQoKICAgICMgdG8gc3RvcmUgdGhlIGZpbHRlcnMKICAgIG15ICVGaWx0ZXJzOwoKICAgICMgc2V0IG90aGVyIGZpbHRlcnMgYmFzZWQgb24gY2hhbmdlIHN0YXRlCiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+eydGaWx0ZXI6OkNoYW5nZVN0YXRlcyd9ICkgewoKICAgICAgICAjIGRlZmluZSBwb3NpdGlvbiBvZiB0aGUgZmlsdGVyIGluIHRoZSBmcm9udGVuZAogICAgICAgIG15ICRQcmlvQ291bnRlciA9IDEwMDA7CgogICAgICAgICMgZ2V0IGFsbCBjaGFuZ2Ugc3RhdGVzIHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgZmlsdGVycwogICAgICAgIENIQU5HRVNUQVRFOgogICAgICAgIGZvciBteSAkQ2hhbmdlU3RhdGUgKCBAeyAkU2VsZi0+e0NvbmZpZ30tPnsnRmlsdGVyOjpDaGFuZ2VTdGF0ZXMnfSB9ICkgewoKICAgICAgICAgICAgIyBkbyBub3QgdXNlIGVtcHR5IGNoYW5nZSBzdGF0ZXMKICAgICAgICAgICAgbmV4dCBDSEFOR0VTVEFURSBpZiAhJENoYW5nZVN0YXRlOwoKICAgICAgICAgICAgIyBjaGVjayBpZiBzdGF0ZSBpcyB2YWxpZCBieSBsb29raW5nIHVwIHRoZSBzdGF0ZSBpZAogICAgICAgICAgICBteSAkQ2hhbmdlU3RhdGVJRCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVN0YXRlTG9va3VwKAogICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGUgPT4gJENoYW5nZVN0YXRlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBkbyBub3QgdXNlIGludmFsaWQgY2hhbmdlIHN0YXRlcwogICAgICAgICAgICBuZXh0IENIQU5HRVNUQVRFIGlmICEkQ2hhbmdlU3RhdGVJRDsKCiAgICAgICAgICAgICMgaW5jcmVhc2UgdGhlIFByaW9Db3VudGVyCiAgICAgICAgICAgICRQcmlvQ291bnRlcisrOwoKICAgICAgICAgICAgIyBhZGQgZmlsdGVyIGZvciB0aGUgY3VycmVudCBjaGFuZ2Ugc3RhdGUKICAgICAgICAgICAgJEZpbHRlcnN7JENoYW5nZVN0YXRlfSA9IHsKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAkQ2hhbmdlU3RhdGUsCiAgICAgICAgICAgICAgICBQcmlvICAgPT4gJFByaW9Db3VudGVyLAogICAgICAgICAgICAgICAgU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZXMgICAgID0+IFskQ2hhbmdlU3RhdGVdLAogICAgICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gXEBTb3J0QnlBcnJheSwKICAgICAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFxAT3JkZXJCeUFycmF5LAogICAgICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgPT4gMTAwMCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGZpbHRlciBhbmQgdmlldyBwYXJhbXMKICAgICRTZWxmLT57RmlsdGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGaWx0ZXInICkgfHwgJ0FsbCc7CiAgICAkU2VsZi0+e1ZpZXd9ICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVmlldycgKSAgIHx8ICcnOwoKICAgICMgaWYgb25seSBvbmUgZmlsdGVyIGV4aXN0cwogICAgaWYgKCBzY2FsYXIga2V5cyAlRmlsdGVycyA9PSAxICkgewoKICAgICAgICAjIGdldCB0aGUgbmFtZSBvZiB0aGUgb25seSBmaWx0ZXIKICAgICAgICBteSAoJEZpbHRlck5hbWUpID0ga2V5cyAlRmlsdGVyczsKCiAgICAgICAgIyBhY3RpdmF0ZSB0aGlzIGZpbHRlcgogICAgICAgICRTZWxmLT57RmlsdGVyfSA9ICRGaWx0ZXJOYW1lOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgYWRkIGRlZmF1bHQgZmlsdGVyCiAgICAgICAgJEZpbHRlcnN7QWxsfSA9IHsKICAgICAgICAgICAgTmFtZSAgID0+ICdBbGwnLAogICAgICAgICAgICBQcmlvICAgPT4gMTAwMCwKICAgICAgICAgICAgU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlcyAgICAgPT4gJFNlbGYtPntDb25maWd9LT57J0ZpbHRlcjo6Q2hhbmdlU3RhdGVzJ30sCiAgICAgICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFxAU29ydEJ5QXJyYXksCiAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFxAT3JkZXJCeUFycmF5LAogICAgICAgICAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAxMDAwLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGZpbHRlciBpcyB2YWxpZAogICAgaWYgKCAhJEZpbHRlcnN7ICRTZWxmLT57RmlsdGVyfSB9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnSW52YWxpZCBGaWx0ZXI6ICVzIScsICRTZWxmLT57RmlsdGVyfSApLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZWFyY2ggY2hhbmdlcyB3aGljaCBtYXRjaCB0aGUgc2VsZWN0ZWQgZmlsdGVyCiAgICBteSAkQ2hhbmdlSURzUmVmID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgICV7ICRGaWx0ZXJzeyAkU2VsZi0+e0ZpbHRlcn0gfS0+e1NlYXJjaH0gfSwKICAgICk7CgogICAgIyBkaXNwbGF5IGFsbCBuYXZiYXIgZmlsdGVycwogICAgbXkgJU5hdkJhckZpbHRlcjsKICAgIGZvciBteSAkRmlsdGVyICggc29ydCBrZXlzICVGaWx0ZXJzICkgewoKICAgICAgICAjIGNvdW50IHRoZSBudW1iZXIgb2YgY2hhbmdlcyBmb3IgZWFjaCBmaWx0ZXIKICAgICAgICBteSAkQ291bnQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VTZWFyY2goCiAgICAgICAgICAgICV7ICRGaWx0ZXJzeyRGaWx0ZXJ9LT57U2VhcmNofSB9LAogICAgICAgICAgICBSZXN1bHQgPT4gJ0NPVU5UJywKICAgICAgICApOwoKICAgICAgICAjIGRpc3BsYXkgdGhlIG5hdmJhciBmaWx0ZXIKICAgICAgICAkTmF2QmFyRmlsdGVyeyAkRmlsdGVyc3skRmlsdGVyfS0+e1ByaW99IH0gPSB7CiAgICAgICAgICAgIENvdW50ICA9PiAkQ291bnQsCiAgICAgICAgICAgIEZpbHRlciA9PiAkRmlsdGVyLAogICAgICAgICAgICAleyAkRmlsdGVyc3skRmlsdGVyfSB9LAogICAgICAgIH07CiAgICB9CgogICAgIyBzaG93IGNoYW5nZXMKICAgIG15ICRMaW5rUGFnZSA9ICdGaWx0ZXI9JwogICAgICAgIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e0ZpbHRlcn0gKQogICAgICAgIC4gJztWaWV3PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57Vmlld30gKQogICAgICAgIC4gJztTb3J0Qnk9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNvcnRCeSApCiAgICAgICAgLiAnO09yZGVyQnk9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJE9yZGVyQnkgKQogICAgICAgIC4gJzsnOwogICAgbXkgJExpbmtTb3J0ID0gJ0ZpbHRlcj0nCiAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57RmlsdGVyfSApCiAgICAgICAgLiAnO1ZpZXc9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntWaWV3fSApCiAgICAgICAgLiAnOyc7CiAgICBteSAkTGlua0ZpbHRlciA9ICdTb3J0Qnk9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNvcnRCeSApCiAgICAgICAgLiAnO09yZGVyQnk9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJE9yZGVyQnkgKQogICAgICAgIC4gJztWaWV3PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57Vmlld30gKQogICAgICAgIC4gJzsnOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5JVFNNQ2hhbmdlTGlzdFNob3coCgogICAgICAgIENoYW5nZUlEcyA9PiAkQ2hhbmdlSURzUmVmLAogICAgICAgIFRvdGFsICAgICA9PiBzY2FsYXIgQHskQ2hhbmdlSURzUmVmfSwKCiAgICAgICAgVmlldyA9PiAkU2VsZi0+e1ZpZXd9LAoKICAgICAgICBGaWx0ZXIgICAgID0+ICRTZWxmLT57RmlsdGVyfSwKICAgICAgICBGaWx0ZXJzICAgID0+IFwlTmF2QmFyRmlsdGVyLAogICAgICAgIEZpbHRlckxpbmsgPT4gJExpbmtGaWx0ZXIsCgogICAgICAgIFRpdGxlTmFtZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ092ZXJ2aWV3OiBQU0EnKSwKCiAgICAgICAgVGl0bGVWYWx1ZSA9PiAkU2VsZi0+e0ZpbHRlcn0sCgogICAgICAgIEVudiAgICAgID0+ICRTZWxmLAogICAgICAgIExpbmtQYWdlID0+ICRMaW5rUGFnZSwKICAgICAgICBMaW5rU29ydCA9PiAkTGlua1NvcnQsCgogICAgICAgIFNob3dDb2x1bW5zID0+IFxAU2hvd0NvbHVtbnMsCiAgICAgICAgU29ydEJ5ICAgICAgPT4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU29ydEJ5ICksCiAgICAgICAgT3JkZXJCeSAgICAgPT4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkT3JkZXJCeSApLAogICAgKTsKCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VSZXNldDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbmVlZGVkIENoYW5nZUlECiAgICBteSAkQ2hhbmdlSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnQ2hhbmdlSUQnICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJENoYW5nZUlEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIENoYW5nZUlEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJENoYW5nZU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMhJywgJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0gKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNoYW5nZSBkYXRhCiAgICBteSAkQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgaWYgY2hhbmdlIGlzIGZvdW5kCiAgICBpZiAoICEkQ2hhbmdlICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJENoYW5nZUlEICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgcmVzZXQgY2hhbmdlCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnUmVzZXQnICkgewoKICAgICAgICAjIGdldCBzdGF0ZSBtYWNoaW5lIG9iamVjdAogICAgICAgIG15ICRTdGF0ZU1hY2hpbmVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVN0YXRlTWFjaGluZScpOwoKICAgICAgICAjIGdldCBzdGFydCBzdGF0ZSBmb3IgQ2hhbmdlcwogICAgICAgIG15ICROZXh0Q2hhbmdlU3RhdGVJRHMgPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZVRyYW5zaXRpb25HZXQoCiAgICAgICAgICAgIFN0YXRlSUQgPT4gMCwKICAgICAgICAgICAgQ2xhc3MgICA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgKTsKICAgICAgICBteSAkQ2hhbmdlU3RhcnRTdGF0ZUlEID0gJE5leHRDaGFuZ2VTdGF0ZUlEcy0+WzBdOwoKICAgICAgICAjIGdldCBzdGFydCBzdGF0ZSBmb3IgV29ya09yZGVycwogICAgICAgIG15ICROZXh0V29ya09yZGVyU3RhdGVJRHMgPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZVRyYW5zaXRpb25HZXQoCiAgICAgICAgICAgIFN0YXRlSUQgPT4gMCwKICAgICAgICAgICAgQ2xhc3MgICA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpTdGF0ZScsCiAgICAgICAgKTsKICAgICAgICBteSAkV29ya09yZGVyU3RhcnRTdGF0ZUlEID0gJE5leHRXb3JrT3JkZXJTdGF0ZUlEcy0+WzBdOwoKICAgICAgICAjIGdldCBhbGwgZHluYW1pYyBmaWVsZHMgZm9yIHRoZSBvYmplY3QgdHlwZSBJVFNNV29ya09yZGVyCiAgICAgICAgbXkgJER5bmFtaWNGaWVsZExpc3RXb3JrT3JkZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgICAgICBWYWxpZCAgICAgID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyByZXNldCBXb3JrT3JkZXJzCiAgICAgICAgZm9yIG15ICRXb3JrT3JkZXJJRCAoIEB7ICRDaGFuZ2UtPntXb3JrT3JkZXJJRHN9IH0gKSB7CgogICAgICAgICAgICAjIGRlbGV0ZSBkeW5hbWljZmllbGQgdmFsdWVzIGZvciB0aGlzIHdvcmtvcmRlcgogICAgICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkTGlzdFdvcmtPcmRlcn0gKSB7CgogICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRDb25maWc7CiAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CiAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9OwogICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfSApOwoKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKS0+VmFsdWVEZWxldGUoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyByZXNldCB3b3Jrb3JkZXIKICAgICAgICAgICAgbXkgJENvdWxkVXBkYXRlV29ya09yZGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyVXBkYXRlKAogICAgICAgICAgICAgICAgV29ya09yZGVySUQgICAgICAgID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlSUQgICA9PiAkV29ya09yZGVyU3RhcnRTdGF0ZUlELAogICAgICAgICAgICAgICAgQWN0dWFsU3RhcnRUaW1lICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZSAgICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgQnlwYXNzU3RhdGVNYWNoaW5lID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJENvdWxkVXBkYXRlV29ya09yZGVyICkgewoKICAgICAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlCiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICdXYXMgbm90IGFibGUgdG8gcmVzZXQgV29ya09yZGVyICVzIG9mIENoYW5nZSAlcyEnLAogICAgICAgICAgICAgICAgICAgICAgICAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAgICAgICAgICRDaGFuZ2VJRAogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYWxsIGR5bmFtaWMgZmllbGRzIGZvciB0aGUgb2JqZWN0IHR5cGUgSVRTTUNoYW5nZQogICAgICAgIG15ICREeW5hbWljRmllbGRMaXN0Q2hhbmdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICAgICAgVmFsaWQgICAgICA9PiAwLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIGR5bmFtaWNmaWVsZCB2YWx1ZXMgZm9yIHRoaXMgY2hhbmdlCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkTGlzdENoYW5nZX0gKSB7CgogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJER5bmFtaWNGaWVsZENvbmZpZzsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9OwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9ICk7CgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyktPlZhbHVlRGVsZXRlKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcmVzZXQgQ2hhbmdlCiAgICAgICAgbXkgJENvdWxkVXBkYXRlQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlVXBkYXRlKAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgICAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEICAgICAgPT4gJENoYW5nZVN0YXJ0U3RhdGVJRCwKICAgICAgICAgICAgQnlwYXNzU3RhdGVNYWNoaW5lID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyB1cGRhdGUgd2FzIHN1Y2Nlc3NmdWwKICAgICAgICBpZiAoJENvdWxkVXBkYXRlQ2hhbmdlKSB7CgogICAgICAgICAgICAjIGxvYWQgbmV3IFVSTCBpbiBwYXJlbnQgd2luZG93IGFuZCBjbG9zZSBwb3B1cAogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UG9wdXBDbG9zZSgKICAgICAgICAgICAgICAgIFVSTCA9PiAiQWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9JENoYW5nZUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdXYXMgbm90IGFibGUgdG8gcmVzZXQgQ2hhbmdlICVzIScsICRDaGFuZ2VJRCApLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCB0aGUgZGlhbG9nIHR5cGUuIEFzIGRlZmF1bHQsIHRoZSBkaWFsb2cgd2lsbCBoYXZlIDIgYnV0dG9uczogWWVzIGFuZCBObwogICAgbXkgJERpYWxvZ1R5cGUgPSAnQ29uZmlybWF0aW9uJzsKCiAgICAjIG91dHB1dCBjb250ZW50CiAgICBteSAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNoYW5nZVJlc2V0JywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7JENoYW5nZX0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBidWlsZCB0aGUgcmV0dXJuZWQgZGF0YSBzdHJ1Y3R1cmUKICAgIG15ICVEYXRhID0gKAogICAgICAgIEhUTUwgICAgICAgPT4gJE91dHB1dCwKICAgICAgICBEaWFsb2dUeXBlID0+ICREaWFsb2dUeXBlLAogICAgKTsKCiAgICAjIHJldHVybiBKU09OLVN0cmluZyBiZWNhdXNlIG9mIEFKQVgtTW9kZQogICAgbXkgJE91dHB1dEpTT04gPSAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKCBEYXRhID0+IFwlRGF0YSApOwoKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PScgLiAkTGF5b3V0T2JqZWN0LT57Q2hhcnNldH0sCiAgICAgICAgQ29udGVudCAgICAgPT4gJE91dHB1dEpTT04sCiAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VTY2hlZHVsZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBjaGVjayBwZXJtaXNzaW9ucwogICAgbXkgJEFjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgVHlwZSAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgIEFjdGlvbiA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGVycm9yIHNjcmVlbgogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyEnLCAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSApLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBzdG9yZSBsYXN0IHNjcmVlbiwgdXNlZCBmb3IgYmFja2xpbmtzCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0aFNlc3Npb24nKS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuQ2hhbmdlcycsCiAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57UmVxdWVzdGVkVVJMfSwKICAgICk7CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBnZXQgc29ydGluZyBwYXJhbWV0ZXJzCiAgICBteSAkU29ydEJ5ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NvcnRCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydTb3J0Qnk6OkRlZmF1bHQnfQogICAgICAgIHx8ICdQbGFubmVkU3RhcnRUaW1lJzsKCiAgICAjIGdldCBvcmRlcmluZyBwYXJhbWV0ZXJzCiAgICBteSAkT3JkZXJCeSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdPcmRlckJ5JyApCiAgICAgICAgfHwgJFNlbGYtPntDb25maWd9LT57J09yZGVyOjpEZWZhdWx0J30KICAgICAgICB8fCAnVXAnOwoKICAgIG15IEBTb3J0QnlBcnJheSAgPSAoJFNvcnRCeSk7CiAgICBteSBAT3JkZXJCeUFycmF5ID0gKCRPcmRlckJ5KTsKCiAgICAjIGludmVzdGlnYXRlIHJlZnJlc2gKICAgIG15ICRSZWZyZXNoID0gJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9ID8gNjAgKiAkU2VsZi0+e1VzZXJSZWZyZXNoVGltZX0gOiB1bmRlZjsKCiAgICAjIHN0YXJ0aW5nIHdpdGggcGFnZSAuLi4KICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoIFJlZnJlc2ggPT4gJFJlZnJlc2ggKTsKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwogICAgJExheW91dE9iamVjdC0+UHJpbnQoIE91dHB1dCA9PiBcJE91dHB1dCApOwogICAgJE91dHB1dCA9ICcnOwoKICAgICMgZmluZCBvdXQgd2hpY2ggY29sdW1ucyBzaG91bGQgYmUgc2hvd24KICAgIG15IEBTaG93Q29sdW1uczsKICAgIGlmICggJFNlbGYtPntDb25maWd9LT57U2hvd0NvbHVtbnN9ICkgewoKICAgICAgICAjIGdldCBhbGwgcG9zc2libGUgY29sdW1ucyBmcm9tIGNvbmZpZwogICAgICAgIG15ICVQb3NzaWJsZUNvbHVtbiA9ICV7ICRTZWxmLT57Q29uZmlnfS0+e1Nob3dDb2x1bW5zfSB9OwoKICAgICAgICAjIGdldCB0aGUgY29sdW1uIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHNob3duCiAgICAgICAgQ09MVU1OTkFNRToKICAgICAgICBmb3IgbXkgJE5hbWUgKCBzb3J0IGtleXMgJVBvc3NpYmxlQ29sdW1uICkgewogICAgICAgICAgICBuZXh0IENPTFVNTk5BTUUgaWYgISRQb3NzaWJsZUNvbHVtbnskTmFtZX07CiAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zLCAkTmFtZTsKICAgICAgICB9CiAgICB9CgogICAgIyB0byBzdG9yZSB0aGUgZmlsdGVycwogICAgbXkgJUZpbHRlcnM7CgogICAgIyBzZXQgb3RoZXIgZmlsdGVycyBiYXNlZCBvbiBjaGFuZ2Ugc3RhdGUKICAgIGlmICggJFNlbGYtPntDb25maWd9LT57J0ZpbHRlcjo6Q2hhbmdlU3RhdGVzJ30gKSB7CgogICAgICAgICMgZGVmaW5lIHBvc2l0aW9uIG9mIHRoZSBmaWx0ZXIgaW4gdGhlIGZyb250ZW5kCiAgICAgICAgbXkgJFByaW9Db3VudGVyID0gMTAwMDsKCiAgICAgICAgIyBnZXQgYWxsIGNoYW5nZSBzdGF0ZXMgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyBmaWx0ZXJzCiAgICAgICAgQ0hBTkdFU1RBVEU6CiAgICAgICAgZm9yIG15ICRDaGFuZ2VTdGF0ZSAoIEB7ICRTZWxmLT57Q29uZmlnfS0+eydGaWx0ZXI6OkNoYW5nZVN0YXRlcyd9IH0gKSB7CgogICAgICAgICAgICAjIGRvIG5vdCB1c2UgZW1wdHkgY2hhbmdlIHN0YXRlcwogICAgICAgICAgICBuZXh0IENIQU5HRVNUQVRFIGlmICEkQ2hhbmdlU3RhdGU7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHN0YXRlIGlzIHZhbGlkIGJ5IGxvb2tpbmcgdXAgdGhlIHN0YXRlIGlkCiAgICAgICAgICAgIG15ICRDaGFuZ2VTdGF0ZUlEID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU3RhdGVMb29rdXAoCiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZSA9PiAkQ2hhbmdlU3RhdGUsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRvIG5vdCB1c2UgaW52YWxpZCBjaGFuZ2Ugc3RhdGVzCiAgICAgICAgICAgIG5leHQgQ0hBTkdFU1RBVEUgaWYgISRDaGFuZ2VTdGF0ZUlEOwoKICAgICAgICAgICAgIyBpbmNyZWFzZSB0aGUgUHJpb0NvdW50ZXIKICAgICAgICAgICAgJFByaW9Db3VudGVyKys7CgogICAgICAgICAgICAjIGFkZCBmaWx0ZXIgZm9yIHRoZSBjdXJyZW50IGNoYW5nZSBzdGF0ZQogICAgICAgICAgICAkRmlsdGVyc3skQ2hhbmdlU3RhdGV9ID0gewogICAgICAgICAgICAgICAgTmFtZSAgID0+ICRDaGFuZ2VTdGF0ZSwKICAgICAgICAgICAgICAgIFByaW8gICA9PiAkUHJpb0NvdW50ZXIsCiAgICAgICAgICAgICAgICBTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlcyAgICAgPT4gWyRDaGFuZ2VTdGF0ZV0sCiAgICAgICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBcQFNvcnRCeUFycmF5LAogICAgICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gXEBPcmRlckJ5QXJyYXksCiAgICAgICAgICAgICAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAxMDAwLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgZmlsdGVyIGFuZCB2aWV3IHBhcmFtcwogICAgJFNlbGYtPntGaWx0ZXJ9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbHRlcicgKSB8fCAnQWxsJzsKICAgICRTZWxmLT57Vmlld30gICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdWaWV3JyApICAgfHwgJyc7CgogICAgIyBpZiBvbmx5IG9uZSBmaWx0ZXIgZXhpc3RzCiAgICBpZiAoIHNjYWxhciBrZXlzICVGaWx0ZXJzID09IDEgKSB7CgogICAgICAgICMgZ2V0IHRoZSBuYW1lIG9mIHRoZSBvbmx5IGZpbHRlcgogICAgICAgIG15ICgkRmlsdGVyTmFtZSkgPSBrZXlzICVGaWx0ZXJzOwoKICAgICAgICAjIGFjdGl2YXRlIHRoaXMgZmlsdGVyCiAgICAgICAgJFNlbGYtPntGaWx0ZXJ9ID0gJEZpbHRlck5hbWU7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBhZGQgZGVmYXVsdCBmaWx0ZXIKICAgICAgICAkRmlsdGVyc3tBbGx9ID0gewogICAgICAgICAgICBOYW1lICAgPT4gJ0FsbCcsCiAgICAgICAgICAgIFByaW8gICA9PiAxMDAwLAogICAgICAgICAgICBTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGVzICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPnsnRmlsdGVyOjpDaGFuZ2VTdGF0ZXMnfSwKICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gXEBTb3J0QnlBcnJheSwKICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gXEBPcmRlckJ5QXJyYXksCiAgICAgICAgICAgICAgICBMaW1pdCAgICAgICAgICAgID0+IDEwMDAsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgfSwKICAgICAgICB9OwogICAgfQoKICAgICMgY2hlY2sgaWYgZmlsdGVyIGlzIHZhbGlkCiAgICBpZiAoICEkRmlsdGVyc3sgJFNlbGYtPntGaWx0ZXJ9IH0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdJbnZhbGlkIEZpbHRlcjogJXMhJywgJFNlbGYtPntGaWx0ZXJ9ICksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNlYXJjaCBjaGFuZ2VzIHdoaWNoIG1hdGNoIHRoZSBzZWxlY3RlZCBmaWx0ZXIKICAgIG15ICRDaGFuZ2VJRHNSZWYgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VTZWFyY2goCiAgICAgICAgJXsgJEZpbHRlcnN7ICRTZWxmLT57RmlsdGVyfSB9LT57U2VhcmNofSB9LAogICAgKTsKCiAgICAjIGRpc3BsYXkgYWxsIG5hdmJhciBmaWx0ZXJzCiAgICBteSAlTmF2QmFyRmlsdGVyOwogICAgZm9yIG15ICRGaWx0ZXIgKCBzb3J0IGtleXMgJUZpbHRlcnMgKSB7CgogICAgICAgICMgY291bnQgdGhlIG51bWJlciBvZiBjaGFuZ2VzIGZvciBlYWNoIGZpbHRlcgogICAgICAgIG15ICRDb3VudCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVNlYXJjaCgKICAgICAgICAgICAgJXsgJEZpbHRlcnN7JEZpbHRlcn0tPntTZWFyY2h9IH0sCiAgICAgICAgICAgIFJlc3VsdCA9PiAnQ09VTlQnLAogICAgICAgICk7CgogICAgICAgICMgZGlzcGxheSB0aGUgbmF2YmFyIGZpbHRlcgogICAgICAgICROYXZCYXJGaWx0ZXJ7ICRGaWx0ZXJzeyRGaWx0ZXJ9LT57UHJpb30gfSA9IHsKICAgICAgICAgICAgQ291bnQgID0+ICRDb3VudCwKICAgICAgICAgICAgRmlsdGVyID0+ICRGaWx0ZXIsCiAgICAgICAgICAgICV7ICRGaWx0ZXJzeyRGaWx0ZXJ9IH0sCiAgICAgICAgfTsKICAgIH0KCiAgICAjIHNob3cgY2hhbmdlcwogICAgbXkgJExpbmtQYWdlID0gJ0ZpbHRlcj0nCiAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57RmlsdGVyfSApCiAgICAgICAgLiAnO1ZpZXc9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntWaWV3fSApCiAgICAgICAgLiAnO1NvcnRCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU29ydEJ5ICkKICAgICAgICAuICc7T3JkZXJCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkT3JkZXJCeSApCiAgICAgICAgLiAnOyc7CiAgICBteSAkTGlua1NvcnQgPSAnRmlsdGVyPScKICAgICAgICAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntGaWx0ZXJ9ICkKICAgICAgICAuICc7Vmlldz0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAuICc7JzsKICAgIG15ICRMaW5rRmlsdGVyID0gJ1NvcnRCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU29ydEJ5ICkKICAgICAgICAuICc7T3JkZXJCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkT3JkZXJCeSApCiAgICAgICAgLiAnO1ZpZXc9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntWaWV3fSApCiAgICAgICAgLiAnOyc7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPklUU01DaGFuZ2VMaXN0U2hvdygKCiAgICAgICAgQ2hhbmdlSURzID0+ICRDaGFuZ2VJRHNSZWYsCiAgICAgICAgVG90YWwgICAgID0+IHNjYWxhciBAeyRDaGFuZ2VJRHNSZWZ9LAoKICAgICAgICBWaWV3ID0+ICRTZWxmLT57Vmlld30sCgogICAgICAgIEZpbHRlciAgICAgPT4gJFNlbGYtPntGaWx0ZXJ9LAogICAgICAgIEZpbHRlcnMgICAgPT4gXCVOYXZCYXJGaWx0ZXIsCiAgICAgICAgRmlsdGVyTGluayA9PiAkTGlua0ZpbHRlciwKCiAgICAgICAgVGl0bGVOYW1lID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnT3ZlcnZpZXc6IENoYW5nZSBTY2hlZHVsZScpLAoKICAgICAgICBUaXRsZVZhbHVlID0+ICRTZWxmLT57RmlsdGVyfSwKCiAgICAgICAgRW52ICAgICAgPT4gJFNlbGYsCiAgICAgICAgTGlua1BhZ2UgPT4gJExpbmtQYWdlLAogICAgICAgIExpbmtTb3J0ID0+ICRMaW5rU29ydCwKCiAgICAgICAgU2hvd0NvbHVtbnMgPT4gXEBTaG93Q29sdW1ucywKICAgICAgICBTb3J0QnkgICAgICA9PiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTb3J0QnkgKSwKICAgICAgICBPcmRlckJ5ICAgICA9PiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRPcmRlckJ5ICksCiAgICApOwoKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VTZWFyY2g7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGNvbmZpZyBmb3IgZnJvbnRlbmQKICAgICRTZWxmLT57Q29uZmlnfSA9ICRDb25maWdPYmplY3QtPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IGNvbmZpZCBkYXRhCiAgICAkU2VsZi0+e1N0YXJ0SGl0fSA9IGludCggJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N0YXJ0SGl0JyApIHx8IDEgKTsKICAgICRTZWxmLT57U2VhcmNoTGltaXR9ID0gJFNlbGYtPntDb25maWd9LT57U2VhcmNoTGltaXR9IHx8IDUwMDsKICAgICRTZWxmLT57U29ydEJ5fSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTb3J0QnknICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnU29ydEJ5OjpEZWZhdWx0J30KICAgICAgICB8fCAnQ2hhbmdlSUQnOwogICAgJFNlbGYtPntPcmRlckJ5fSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdPcmRlckJ5JyApCiAgICAgICAgfHwgJFNlbGYtPntDb25maWd9LT57J09yZGVyOjpEZWZhdWx0J30KICAgICAgICB8fCAnRG93bic7CiAgICAkU2VsZi0+e1Byb2ZpbGV9ICAgICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdQcm9maWxlJyApICAgICAgICB8fCAnJzsKICAgICRTZWxmLT57U2F2ZVByb2ZpbGV9ICAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NhdmVQcm9maWxlJyApICAgIHx8ICcnOwogICAgJFNlbGYtPntUYWtlTGFzdFNlYXJjaH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVGFrZUxhc3RTZWFyY2gnICkgfHwgJyc7CiAgICAkU2VsZi0+e1NlbGVjdFRlbXBsYXRlfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZWxlY3RUZW1wbGF0ZScgKSB8fCAnJzsKICAgICRTZWxmLT57RXJhc2VUZW1wbGF0ZX0gID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0VyYXNlVGVtcGxhdGUnICkgIHx8ICcnOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayByZXF1ZXN0CiAgICBpZiAoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZWFyY2hUZW1wbGF0ZScgKSAmJiAkU2VsZi0+e1Byb2ZpbGV9ICkgewoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+CiAgICAgICAgICAgICAgICAiQWN0aW9uPUFnZW50SVRTTUNoYW5nZVNlYXJjaDtTdWJhY3Rpb249U2VhcmNoO1Rha2VMYXN0U2VhcmNoPTE7U2F2ZVByb2ZpbGU9MTtQcm9maWxlPSRTZWxmLT57UHJvZmlsZX0iCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIG9iamVjdAogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRoaXMgc2NyZWVuIChjaGFuZ2UgZHluYW1pYyBmaWVsZHMpCiAgICAkU2VsZi0+e0R5bmFtaWNGaWVsZENoYW5nZX0gPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgIEZpZWxkRmlsdGVyID0+ICRTZWxmLT57Q29uZmlnfS0+e0R5bmFtaWNGaWVsZH0gfHwge30sCiAgICApOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgdGhpcyBzY3JlZW4gKHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcykKICAgICRTZWxmLT57RHluYW1pY0ZpZWxkV29ya09yZGVyfSA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJFNlbGYtPntDb25maWd9LT57RHluYW1pY0ZpZWxkfSB8fCB7fSwKICAgICk7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwogICAgbXkgJFNlYXJjaFByb2ZpbGVPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VhcmNoUHJvZmlsZScpOwoKICAgICMgZ2V0IHNpbmdsZSBwYXJhbXMKICAgIG15ICVHZXRQYXJhbTsKCiAgICAjIGxvYWQgcGFyYW1ldGVycyBmcm9tIHNlYXJjaCBwcm9maWxlLAogICAgIyB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgbmV4dCByZXN1bHQgcGFnZSBzaG91bGQgYmUgc2hvd24sIG9yIHdoZW4gdGhlIHJlc3VsdHMgYXJlIHJlb3JkZXJlZAogICAgaWYgKCAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnTG9hZFByb2ZpbGUnICYmICRTZWxmLT57UHJvZmlsZX0gKSB8fCAkU2VsZi0+e1Rha2VMYXN0U2VhcmNofSApIHsKICAgICAgICAlR2V0UGFyYW0gPSAkU2VhcmNoUHJvZmlsZU9iamVjdC0+U2VhcmNoUHJvZmlsZUdldCgKICAgICAgICAgICAgQmFzZSAgICAgID0+ICdJVFNNQ2hhbmdlU2VhcmNoJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZWxmLT57UHJvZmlsZX0sCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGdldCBzY2FsYXIgc2VhcmNoIHBhcmFtcwogICAgICAgIGZvciBteSAkUGFyYW1OYW1lICgKICAgICAgICAgICAgcXcoCiAgICAgICAgICAgIENoYW5nZU51bWJlciBDaGFuZ2VUaXRsZSBEZXNjcmlwdGlvbiBKdXN0aWZpY2F0aW9uCiAgICAgICAgICAgIENBQkN1c3RvbWVyCiAgICAgICAgICAgIENBQkFnZW50CiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlIFdvcmtPcmRlckluc3RydWN0aW9uIFdvcmtPcmRlclJlcG9ydCBSZXN1bHRGb3JtCiAgICAgICAgICAgIFJlcXVlc3RlZFRpbWVTZWFyY2hUeXBlIFBsYW5uZWRTdGFydFRpbWVTZWFyY2hUeXBlIFBsYW5uZWRFbmRUaW1lU2VhcmNoVHlwZQogICAgICAgICAgICBBY3R1YWxTdGFydFRpbWVTZWFyY2hUeXBlIEFjdHVhbEVuZFRpbWVTZWFyY2hUeXBlIENyZWF0ZVRpbWVTZWFyY2hUeXBlCiAgICAgICAgICAgIENoYW5nZVRpbWVTZWFyY2hUeXBlCiAgICAgICAgICAgICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwoKICAgICAgICAgICAgIyByZW1vdmUgd2hpdGVzcGFjZSBvbiB0aGUgc3RhcnQgYW5kIGVuZAogICAgICAgICAgICBpZiAoICRHZXRQYXJhbXskUGFyYW1OYW1lfSApIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9fiBzeyBcQSBccysgfXt9eG1zOwogICAgICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID1+IHN7IFxzKyBceiB9e314bXM7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IGFycmF5IHNlYXJjaCBwYXJhbXMKICAgICAgICBmb3IgbXkgJFNlYXJjaFBhcmFtICgKICAgICAgICAgICAgcXcoIENoYW5nZVN0YXRlSURzCiAgICAgICAgICAgIENoYW5nZU1hbmFnZXJJRHMgQ2hhbmdlQnVpbGRlcklEcwogICAgICAgICAgICBQcmlvcml0eUlEcyBDYXRlZ29yeUlEcyBJbXBhY3RJRHMKICAgICAgICAgICAgQ3JlYXRlQnkKICAgICAgICAgICAgV29ya09yZGVyU3RhdGVJRHMgV29ya09yZGVyVHlwZUlEcyBXb3JrT3JkZXJBZ2VudElEcwogICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15IEBBcnJheSA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICRTZWFyY2hQYXJhbSApOwogICAgICAgICAgICBpZiAoQEFycmF5KSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFNlYXJjaFBhcmFtfSA9IFxAQXJyYXk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IHRpbWUgcmVsYXRlZCBwYXJhbXMKICAgICAgICBmb3IgbXkgJFRpbWVUeXBlICgKICAgICAgICAgICAgcXcoIFJlcXVlc3RlZCBQbGFubmVkU3RhcnQgUGxhbm5lZEVuZCBBY3R1YWxTdGFydCBBY3R1YWxFbmQgQ3JlYXRlIENoYW5nZSApCiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIGdldCB0aW1lIHBhcmFtcyBmaWVsZHMKICAgICAgICAgICAgbXkgQEFycmF5ID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJFRpbWVUeXBlIC4gJ1RpbWVTZWFyY2hUeXBlJyApOwogICAgICAgICAgICBpZiAoQEFycmF5KSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEl0ZW0gKEBBcnJheSkgewogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJEl0ZW0gLiAnRmllbGQnIH0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCB0aW1lIHBhcmFtcyBkZXRhaWxzCiAgICAgICAgICAgIGZvciBteSAkUGFydCAoCiAgICAgICAgICAgICAgICBxdygKICAgICAgICAgICAgICAgIFBvaW50Rm9ybWF0IFBvaW50IFBvaW50U3RhcnQKICAgICAgICAgICAgICAgIFN0YXJ0IFN0YXJ0RGF5IFN0YXJ0TW9udGggU3RhcnRZZWFyCiAgICAgICAgICAgICAgICBTdG9wICBTdG9wRGF5ICBTdG9wTW9udGggIFN0b3BZZWFyCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG15ICRQYXJhbUtleSA9ICIke1RpbWVUeXBlfVRpbWUke1BhcnR9IjsKICAgICAgICAgICAgICAgIG15ICRQYXJhbVZhbCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbUtleSApOwoKICAgICAgICAgICAgICAgICMgcmVtb3ZlIHdoaXRlIHNwYWNlIG9uIHRoZSBzdGFydCBhbmQgZW5kCiAgICAgICAgICAgICAgICBpZiAoJFBhcmFtVmFsKSB7CiAgICAgICAgICAgICAgICAgICAgJFBhcmFtVmFsID1+IHN7IFxBIFxzKyB9e314bXM7CiAgICAgICAgICAgICAgICAgICAgJFBhcmFtVmFsID1+IHN7IFxzKyBceiB9e314bXM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBzdG9yZSBpbiAlR2V0UGFyYW0KICAgICAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1LZXl9ID0gJFBhcmFtVmFsOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCBEeW5hbWljIGZpZWxkcyBmcm9tIHBhcmFtIG9iamVjdAogICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICgKICAgICAgICAgICAgQHsgJFNlbGYtPntEeW5hbWljRmllbGRDaGFuZ2V9IH0sCiAgICAgICAgICAgIEB7ICRTZWxmLT57RHluYW1pY0ZpZWxkV29ya09yZGVyfSB9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgICAgICMgZ2V0IHNlYXJjaCBmaWVsZCBwcmVmZXJlbmNlcwogICAgICAgICAgICBteSAkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFByZWZlcmVuY2VzKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCRTZWFyY2hGaWVsZFByZWZlcmVuY2VzKTsKCiAgICAgICAgICAgIFBSRUZFUkVOQ0U6CiAgICAgICAgICAgIGZvciBteSAkUHJlZmVyZW5jZSAoIEB7JFNlYXJjaEZpZWxkUHJlZmVyZW5jZXN9ICkgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmcm9tIHRoZSB3ZWIgcmVxdWVzdAogICAgICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZFZhbHVlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlNlYXJjaEZpZWxkVmFsdWVHZXQoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnICAgICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgICAgIFJldHVyblByb2ZpbGVTdHJ1Y3R1cmUgPT4gMSwKICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgICAgICA9PiAkUHJlZmVyZW5jZS0+e1R5cGV9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNldCB0aGUgY29tcGxldGUgdmFsdWUgc3RydWN0dXJlIGluIEdldFBhcmFtIHRvIHN0b3JlIGl0IGxhdGVyIGluIHRoZSBzZWFyY2ggcHJvZmlsZQogICAgICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkVmFsdWUpICkgewogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSA9ICggJUdldFBhcmFtLCAleyREeW5hbWljRmllbGRWYWx1ZX0gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCByZXN1bHQgZm9ybSBlbnYKICAgIGlmICggISRHZXRQYXJhbXtSZXN1bHRGb3JtfSApIHsKICAgICAgICAkR2V0UGFyYW17UmVzdWx0Rm9ybX0gPSAnJzsKICAgIH0KCiAgICAjIHNob3cgcmVzdWx0IHNpdGUgb3IgcGVyZm9ybSBvdGhlciBhY3Rpb25zCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2VhcmNoJyAmJiAhJFNlbGYtPntFcmFzZVRlbXBsYXRlfSApIHsKCiAgICAgICAgIyBmaWxsIHVwIHByb2ZpbGUgbmFtZSAoZS5nLiB3aXRoIGxhc3Qtc2VhcmNoKQogICAgICAgIGlmICggISRTZWxmLT57UHJvZmlsZX0gfHwgISRTZWxmLT57U2F2ZVByb2ZpbGV9ICkgewogICAgICAgICAgICAkU2VsZi0+e1Byb2ZpbGV9ID0gJ2xhc3Qtc2VhcmNoJzsKICAgICAgICB9CgogICAgICAgICMgc2F2ZSBzZWFyY2ggcHJvZmlsZSAodW5kZXIgbGFzdC1zZWFyY2ggb3IgcmVhbCBwcm9maWxlIG5hbWUpCiAgICAgICAgJFNlbGYtPntTYXZlUHJvZmlsZX0gPSAxOwoKICAgICAgICAjIHJlbWVtYmVyIGxhc3Qgc2VhcmNoIHZhbHVlcwogICAgICAgIGlmICggJFNlbGYtPntTYXZlUHJvZmlsZX0gJiYgJFNlbGYtPntQcm9maWxlfSApIHsKCiAgICAgICAgICAgICMgcmVtb3ZlIG9sZCBwcm9maWxlIHN0dWZmCiAgICAgICAgICAgICRTZWFyY2hQcm9maWxlT2JqZWN0LT5TZWFyY2hQcm9maWxlRGVsZXRlKAogICAgICAgICAgICAgICAgQmFzZSAgICAgID0+ICdJVFNNQ2hhbmdlU2VhcmNoJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VsZi0+e1Byb2ZpbGV9LAogICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgaW5zZXJ0IG5ldyBwcm9maWxlIHBhcmFtcwogICAgICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlR2V0UGFyYW0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXskS2V5fSApIHsKICAgICAgICAgICAgICAgICAgICAkU2VhcmNoUHJvZmlsZU9iamVjdC0+U2VhcmNoUHJvZmlsZUFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgQmFzZSAgICAgID0+ICdJVFNNQ2hhbmdlU2VhcmNoJywKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZWxmLT57UHJvZmlsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIEtleSAgICAgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJEdldFBhcmFteyRLZXl9LAogICAgICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gJFNlbGYtPntVc2VyTG9naW59LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgcHJlcGFyZSBDQUJBZ2VudHMgYW5kIENBQkN1c3RvbWVycwogICAgICAgIGlmICggJEdldFBhcmFte0NBQkFnZW50fSApIHsKICAgICAgICAgICAgJEdldFBhcmFte0NBQkFnZW50c30gPSBbICRHZXRQYXJhbXtDQUJBZ2VudH0gXTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkR2V0UGFyYW17Q0FCQ3VzdG9tZXJ9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17Q0FCQ3VzdG9tZXJzfSA9IFsgJEdldFBhcmFte0NBQkN1c3RvbWVyfSBdOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc2Vzc2lvbiBvYmplY3QKICAgICAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICAgICAjIHN0b3JlIGxhc3QgcXVldWUgc2NyZWVuCiAgICAgICAgbXkgJFVSTCA9ICJBY3Rpb249QWdlbnRJVFNNQ2hhbmdlU2VhcmNoO1N1YmFjdGlvbj1TZWFyY2g7UHJvZmlsZT0kU2VsZi0+e1Byb2ZpbGV9O1NvcnRCeT0kU2VsZi0+e1NvcnRCeX0iCiAgICAgICAgICAgIC4gIjtPcmRlckJ5PSRTZWxmLT57T3JkZXJCeX07VGFrZUxhc3RTZWFyY2g9MTtTdGFydEhpdD0kU2VsZi0+e1N0YXJ0SGl0fSI7CiAgICAgICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuQ2hhbmdlcycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVVJMLAogICAgICAgICk7CiAgICAgICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0Q2hhbmdlVmlldycsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVVJMLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHRpbWUgb2JqZWN0CiAgICAgICAgbXkgJFRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpOwoKICAgICAgICAjIGdldCBhbmQgY2hlY2sgdGhlIHRpbWUgc2VhcmNoIHBhcmFtZXRlcnMKICAgICAgICBUSU1FVFlQRToKICAgICAgICBmb3IgbXkgJFRpbWVUeXBlICgKICAgICAgICAgICAgcXcoIFJlcXVlc3RlZCBQbGFubmVkU3RhcnQgUGxhbm5lZEVuZCBBY3R1YWxTdGFydCBBY3R1YWxFbmQgQ3JlYXRlIENoYW5nZSApCiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIGV4dHJhY3QgdGhlIHRpbWUgc2VhcmNoIHBhcmFtZXRlcnMgZm9yICRUaW1lVHlwZSBpbnRvICVUaW1lU2VsZWN0aW9uUGFyYW0KICAgICAgICAgICAgbXkgJVRpbWVTZWxlY3Rpb25QYXJhbTsKICAgICAgICAgICAgZm9yIG15ICRQYXJ0ICgKICAgICAgICAgICAgICAgIHF3KAogICAgICAgICAgICAgICAgU2VhcmNoVHlwZQogICAgICAgICAgICAgICAgUG9pbnRGb3JtYXQgUG9pbnQgUG9pbnRTdGFydAogICAgICAgICAgICAgICAgU3RhcnQgU3RhcnREYXkgU3RhcnRNb250aCBTdGFydFllYXIKICAgICAgICAgICAgICAgIFN0b3AgIFN0b3BEYXkgIFN0b3BNb250aCAgU3RvcFllYXIKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFRpbWVTZWxlY3Rpb25QYXJhbXskUGFydH0gPSAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lJyAuICRQYXJ0IH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbm90aGluZyB0byBkbywgd2hlbiBubyB0aW1lIHNlYXJjaCB0eXBlIGhhcyBiZWVuIHNlbGVjdGVkCiAgICAgICAgICAgIG5leHQgVElNRVRZUEUgaWYgISRUaW1lU2VsZWN0aW9uUGFyYW17U2VhcmNoVHlwZX07CgogICAgICAgICAgICBpZiAoICRUaW1lU2VsZWN0aW9uUGFyYW17U2VhcmNoVHlwZX0gZXEgJ1RpbWVTbG90JyApIHsKCiAgICAgICAgICAgICAgICBteSAlU3lzdGVtVGltZTsgICAgIyB1c2VkIGZvciBjaGVja2luZyB0aGUgb3JkZXJpbmcgb2YgdGhlIHR3byB0aW1lcwoKICAgICAgICAgICAgICAgICMgdGhlIGVhcmxpZXIgbGltaXQKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkVGltZVNlbGVjdGlvblBhcmFte1N0YXJ0RGF5fQogICAgICAgICAgICAgICAgICAgICYmICRUaW1lU2VsZWN0aW9uUGFyYW17U3RhcnRNb250aH0KICAgICAgICAgICAgICAgICAgICAmJiAkVGltZVNlbGVjdGlvblBhcmFte1N0YXJ0WWVhcn0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICMgZm9ybWF0IGFzIHRpbWVzdGFtcAogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVOZXdlckRhdGUnIH0gPSBzcHJpbnRmCiAgICAgICAgICAgICAgICAgICAgICAgICclMDRkLSUwMmQtJTAyZCAwMDowMDowMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lU2VsZWN0aW9uUGFyYW17U3RhcnRZZWFyfSwKICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWVTZWxlY3Rpb25QYXJhbXtTdGFydE1vbnRofSwKICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWVTZWxlY3Rpb25QYXJhbXtTdGFydERheX07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyB0aGUgbGF0ZXIgbGltaXQKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkVGltZVNlbGVjdGlvblBhcmFte1N0b3BEYXl9CiAgICAgICAgICAgICAgICAgICAgJiYgJFRpbWVTZWxlY3Rpb25QYXJhbXtTdG9wTW9udGh9CiAgICAgICAgICAgICAgICAgICAgJiYgJFRpbWVTZWxlY3Rpb25QYXJhbXtTdG9wWWVhcn0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICMgZm9ybWF0IGFzIHRpbWVzdGFtcAogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVPbGRlckRhdGUnIH0gPSBzcHJpbnRmCiAgICAgICAgICAgICAgICAgICAgICAgICclMDRkLSUwMmQtJTAyZCAyMzo1OTo1OScsCiAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lU2VsZWN0aW9uUGFyYW17U3RvcFllYXJ9LAogICAgICAgICAgICAgICAgICAgICAgICAkVGltZVNlbGVjdGlvblBhcmFte1N0b3BNb250aH0sCiAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lU2VsZWN0aW9uUGFyYW17U3RvcERheX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkVGltZVNlbGVjdGlvblBhcmFte1NlYXJjaFR5cGV9IGVxICdUaW1lUG9pbnQnICkgewoKICAgICAgICAgICAgICAgICMgcXVlcmllcyByZWxhdGl2ZSB0byBub3cKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkVGltZVNlbGVjdGlvblBhcmFte1BvaW50fQogICAgICAgICAgICAgICAgICAgICYmICRUaW1lU2VsZWN0aW9uUGFyYW17UG9pbnRTdGFydH0KICAgICAgICAgICAgICAgICAgICAmJiAkVGltZVNlbGVjdGlvblBhcmFte1BvaW50Rm9ybWF0fQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAkRGlmZlNlY29uZHMgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmICggJFRpbWVTZWxlY3Rpb25QYXJhbXtQb2ludEZvcm1hdH0gZXEgJ21pbnV0ZScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICREaWZmU2Vjb25kcyA9ICRUaW1lU2VsZWN0aW9uUGFyYW17UG9pbnR9ICogNjA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJFRpbWVTZWxlY3Rpb25QYXJhbXtQb2ludEZvcm1hdH0gZXEgJ2hvdXInICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRGlmZlNlY29uZHMgPSAkVGltZVNlbGVjdGlvblBhcmFte1BvaW50fSAqIDYwICogNjA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJFRpbWVTZWxlY3Rpb25QYXJhbXtQb2ludEZvcm1hdH0gZXEgJ2RheScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICREaWZmU2Vjb25kcyA9ICRUaW1lU2VsZWN0aW9uUGFyYW17UG9pbnR9ICogNjAgKiA2MCAqIDI0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRUaW1lU2VsZWN0aW9uUGFyYW17UG9pbnRGb3JtYXR9IGVxICd3ZWVrJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJERpZmZTZWNvbmRzID0gJFRpbWVTZWxlY3Rpb25QYXJhbXtQb2ludH0gKiA2MCAqIDYwICogMjQgKiA3OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRUaW1lU2VsZWN0aW9uUGFyYW17UG9pbnRGb3JtYXR9IGVxICdtb250aCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICREaWZmU2Vjb25kcyA9ICRUaW1lU2VsZWN0aW9uUGFyYW17UG9pbnR9ICogNjAgKiA2MCAqIDI0ICogMzA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJFRpbWVTZWxlY3Rpb25QYXJhbXtQb2ludEZvcm1hdH0gZXEgJ3llYXInICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRGlmZlNlY29uZHMgPSAkVGltZVNlbGVjdGlvblBhcmFte1BvaW50fSAqIDYwICogNjAgKiAyNCAqIDM2NTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIG15ICRDdXJyZW50U3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCk7CiAgICAgICAgICAgICAgICAgICAgbXkgJEN1cnJlbnRUaW1lU3RhbXAgID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRDdXJyZW50U3lzdGVtVGltZQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkVGltZVNlbGVjdGlvblBhcmFte1BvaW50U3RhcnR9IGVxICdCZWZvcmUnICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBzZWFyY2ggaW4gdGhlIGZ1dHVyZQogICAgICAgICAgICAgICAgICAgICAgICBteSAkU2VhcmNoVGltZVN0YW1wID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkQ3VycmVudFN5c3RlbVRpbWUgKyAkRGlmZlNlY29uZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVOZXdlckRhdGUnIH0gPSAkQ3VycmVudFRpbWVTdGFtcDsKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnVGltZU9sZGVyRGF0ZScgfSA9ICRTZWFyY2hUaW1lU3RhbXA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkU2VhcmNoVGltZVN0YW1wID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkQ3VycmVudFN5c3RlbVRpbWUgLSAkRGlmZlNlY29uZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1RpbWVOZXdlckRhdGUnIH0gPSAkU2VhcmNoVGltZVN0YW1wOwogICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdUaW1lT2xkZXJEYXRlJyB9ID0gJEN1cnJlbnRUaW1lU3RhbXA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgdW5rbm93biBzZWFyY2ggdHlwZXMgYXJlIHNpbXBseSBpZ25vcmVkCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc2VhcmNoIGZvciBzdWJzdHJpbmdzIGJ5IGRlZmF1bHQKICAgICAgICBmb3IgbXkgJEZpZWxkICgKICAgICAgICAgICAgcXcoQ2hhbmdlVGl0bGUgV29ya09yZGVyVGl0bGUgRGVzY3JpcHRpb24gSnVzdGlmaWNhdGlvbgogICAgICAgICAgICBXb3JrT3JkZXJJbnN0cnVjdGlvbiBXb3JrT3JkZXJSZXBvcnQKICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBpZiAoIGRlZmluZWQoICRHZXRQYXJhbXskRmllbGR9ICkgJiYgJEdldFBhcmFteyRGaWVsZH0gbmUgJycgKSB7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JEZpZWxkfSA9ICIqJEdldFBhcmFteyRGaWVsZH0qIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBkeW5hbWljIGZpZWxkcyBzZWFyY2ggcGFyYW1ldGVycyBmb3IgdGlja2V0IHNlYXJjaAogICAgICAgIG15ICVEeW5hbWljRmllbGRTZWFyY2hQYXJhbWV0ZXJzOwoKICAgICAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoCiAgICAgICAgICAgIEB7ICRTZWxmLT57RHluYW1pY0ZpZWxkQ2hhbmdlfSB9LAogICAgICAgICAgICBAeyAkU2VsZi0+e0R5bmFtaWNGaWVsZFdvcmtPcmRlcn0gfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICAgICAjIGdldCBzZWFyY2ggZmllbGQgcHJlZmVyZW5jZXMKICAgICAgICAgICAgbXkgJFNlYXJjaEZpZWxkUHJlZmVyZW5jZXMgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzQXJyYXlSZWZXaXRoRGF0YSgkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyk7CgogICAgICAgICAgICBQUkVGRVJFTkNFOgogICAgICAgICAgICBmb3IgbXkgJFByZWZlcmVuY2UgKCBAeyRTZWFyY2hGaWVsZFByZWZlcmVuY2VzfSApIHsKCiAgICAgICAgICAgICAgICAjIGV4dHJhY3QgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZnJvbSB0aGUgcHJvZmlsZQogICAgICAgICAgICAgICAgbXkgJFNlYXJjaFBhcmFtZXRlciA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFBhcmFtZXRlckJ1aWxkKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFByb2ZpbGUgICAgICAgICAgICA9PiBcJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgICA9PiAkUHJlZmVyZW5jZS0+e1R5cGV9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNldCBzZWFyY2ggcGFyYW1ldGVyCiAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQgJFNlYXJjaFBhcmFtZXRlciApIHsKICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkU2VhcmNoUGFyYW1ldGVyc3sgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0KICAgICAgICAgICAgICAgICAgICAgICAgPSAkU2VhcmNoUGFyYW1ldGVyLT57UGFyYW1ldGVyfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICAgICAjIHBlcmZvcm0gY2hhbmdlIHNlYXJjaAogICAgICAgIG15ICRWaWV3YWJsZUNoYW5nZUlEcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVNlYXJjaCgKICAgICAgICAgICAgUmVzdWx0ICAgICAgICAgICA9PiAnQVJSQVknLAogICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFsgJFNlbGYtPntTb3J0Qnl9IF0sCiAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWyAkU2VsZi0+e09yZGVyQnl9IF0sCiAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgPT4gJFNlbGYtPntTZWFyY2hMaW1pdH0sCiAgICAgICAgICAgIE1pcnJvckRCICAgICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgJUR5bmFtaWNGaWVsZFNlYXJjaFBhcmFtZXRlcnMsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdXNlciBvYmplY3QKICAgICAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgICAgICMgQ1NWIG91dHB1dAogICAgICAgIGlmICggJEdldFBhcmFte1Jlc3VsdEZvcm19IGVxICdDU1YnICkgewogICAgICAgICAgICBteSBAQ1NWSGVhZDsKICAgICAgICAgICAgbXkgQENTVkRhdGE7CgogICAgICAgICAgICAjIGdldCBhbGwgY2hhbmdlIGR5bmFtaWMgZmllbGRzIHRoYXQgYXJlIGNvbmZpZ3VyZWQgZm9yIHRoZSBzZWFyY2ggY3N2IG91dHB1dAogICAgICAgICAgICBteSAlRmllbGRGaWx0ZXI7CiAgICAgICAgICAgIEZJRUxEOgogICAgICAgICAgICBmb3IgbXkgJEZpZWxkICggQHsgJFNlbGYtPntDb25maWd9LT57U2VhcmNoQ1NWRGF0YX0gfSApIHsKICAgICAgICAgICAgICAgIGlmICggJEZpZWxkID1+IG17IFxBIER5bmFtaWNGaWVsZF8gKCBbYS16QS1aXGRdKyApIFx6IH14bXMgKSB7CiAgICAgICAgICAgICAgICAgICAgJEZpZWxkRmlsdGVyeyQxfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZ2V0IGFsbCBkeW5hbWljIGZpZWxkcyBmb3IgSVRTTUNoYW5nZSB3aXRoIHRoZSBzZWxlY3RlZCBmaWVsZCBmaWx0ZXIKICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZHNJVFNNQ2hhbmdlID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICAgICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBPYmplY3RUeXBlICA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgICAgICAgICBGaWVsZEZpbHRlciA9PiBcJUZpZWxkRmlsdGVyLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgSUQ6CiAgICAgICAgICAgIGZvciBteSAkQ2hhbmdlSUQgKCBAeyRWaWV3YWJsZUNoYW5nZUlEc30gKSB7CgogICAgICAgICAgICAgICAgIyB0byBzdG9yZSBkYXRhIG9mIHN1Yi1lbGVtZW50cwogICAgICAgICAgICAgICAgbXkgJVN1YkVsZW1lbnREYXRhOwoKICAgICAgICAgICAgICAgICMgZ2V0IGNoYW5nZSBkYXRhCiAgICAgICAgICAgICAgICBteSAkQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG5leHQgSUQgaWYgISRDaGFuZ2U7CgogICAgICAgICAgICAgICAgIyB0byBzdG9yZSBhbGwgZGF0YQogICAgICAgICAgICAgICAgbXkgJUluZm8gPSAleyRDaGFuZ2V9OwoKICAgICAgICAgICAgICAgICMgZ2V0IHVzZXIgZGF0YSBmb3IgbmVlZGVkIHVzZXIgdHlwZXMKICAgICAgICAgICAgICAgIFVTRVJUWVBFOgogICAgICAgICAgICAgICAgZm9yIG15ICRVc2VyVHlwZSAocXcoQ2hhbmdlQnVpbGRlciBDaGFuZ2VNYW5hZ2VyIFdvcmtPcmRlckFnZW50KSkgewoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIFVzZXJUeXBlIGF0dHJpYnV0ZSBleGlzdHMgZWl0aGVyIGluIGNoYW5nZSBvciB3b3Jrb3JkZXIKICAgICAgICAgICAgICAgICAgICBpZiAoICEkQ2hhbmdlLT57ICRVc2VyVHlwZSAuICdJRCcgfSAmJiAhJEluZm97ICRVc2VyVHlwZSAuICdJRCcgfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBVU0VSVFlQRTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IHVzZXIgZGF0YQogICAgICAgICAgICAgICAgICAgIG15ICVVc2VyID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJENoYW5nZS0+eyAkVXNlclR5cGUgLiAnSUQnIH0gfHwgJEluZm97ICRVc2VyVHlwZSAuICdJRCcgfSwKICAgICAgICAgICAgICAgICAgICAgICAgQ2FjaGVkID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBzZXQgdXNlciBkYXRhCiAgICAgICAgICAgICAgICAgICAgJEluZm97ICRVc2VyVHlwZSAuICdVc2VyTG9naW4nIH0gICAgICAgID0gJFVzZXJ7VXNlckxvZ2lufTsKICAgICAgICAgICAgICAgICAgICAkSW5mb3sgJFVzZXJUeXBlIC4gJ1VzZXJGaXJzdG5hbWUnIH0gICAgPSAkVXNlcntVc2VyRmlyc3RuYW1lfTsKICAgICAgICAgICAgICAgICAgICAkSW5mb3sgJFVzZXJUeXBlIC4gJ1VzZXJMYXN0bmFtZScgfSAgICAgPSAkVXNlcntVc2VyTGFzdG5hbWV9OwogICAgICAgICAgICAgICAgICAgICRJbmZveyAkVXNlclR5cGUgLiAnTGVmdFBhcmVudGhlc2lzJyB9ICA9ICcoJzsKICAgICAgICAgICAgICAgICAgICAkSW5mb3sgJFVzZXJUeXBlIC4gJ1JpZ2h0UGFyZW50aGVzaXMnIH0gPSAnKSc7CgogICAgICAgICAgICAgICAgICAgICMgc2V0IHVzZXIgZnVsbCBuYW1lCiAgICAgICAgICAgICAgICAgICAgJEluZm97JFVzZXJUeXBlfSA9ICRVc2Vye1VzZXJMb2dpbn0gLiAnICgnIC4gJFVzZXJ7VXNlckZpcnN0bmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgLiAkVXNlcntVc2VyTGFzdG5hbWV9IC4gJyknOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgdG8gc3RvcmUgdGhlIGxpbmtlZCBzZXJ2aWNlIGRhdGEKICAgICAgICAgICAgICAgIG15ICRMaW5rTGlzdFdpdGhEYXRhID0ge307CgogICAgICAgICAgICAgICAgbXkgQFdvcmtPcmRlcklEczsKCiAgICAgICAgICAgICAgICAjIHN0b3JlIHRoZSBjb21iaW5lZCBsaW5rZWQgc2VydmljZXMgZGF0YSBmcm9tIGFsbCB3b3Jrb3JkZXJzIG9mIHRoaXMgY2hhbmdlCiAgICAgICAgICAgICAgICBAV29ya09yZGVySURzID0gQHsgJENoYW5nZS0+e1dvcmtPcmRlcklEc30gfTsKCiAgICAgICAgICAgICAgICAjIHN0b3JlIHRoZSBjb21iaW5lZCBsaW5rZWQgc2VydmljZXMgZGF0YQogICAgICAgICAgICAgICAgZm9yIG15ICRXb3JrT3JkZXJJRCAoQFdvcmtPcmRlcklEcykgewoKICAgICAgICAgICAgICAgICAgICAjIGdldCBsaW5rZWQgb2JqZWN0cyBvZiB0aGlzIHdvcmtvcmRlcgogICAgICAgICAgICAgICAgICAgIG15ICRMaW5rTGlzdFdpdGhEYXRhV29ya09yZGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0ID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICAgICAgS2V5ICAgID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgID0+ICdWYWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgT0JKRUNUOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkT2JqZWN0ICggc29ydCBrZXlzICV7JExpbmtMaXN0V2l0aERhdGFXb3JrT3JkZXJ9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBvbmx5IHNob3cgbGlua2VkIHNlcnZpY2VzIG9mIHdvcmtvcmRlcgogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IE9CSkVDVCBpZiAkT2JqZWN0IG5lICdTZXJ2aWNlJzsKCiAgICAgICAgICAgICAgICAgICAgICAgIExJTktUWVBFOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7ICRMaW5rTGlzdFdpdGhEYXRhV29ya09yZGVyLT57JE9iamVjdH0gfSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBESVJFQ1RJT046CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJERpcmVjdGlvbiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydCBrZXlzICV7ICRMaW5rTGlzdFdpdGhEYXRhV29ya09yZGVyLT57JE9iamVjdH0tPnskTGlua1R5cGV9IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkSUQgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0IGtleXMgJXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMaW5rTGlzdFdpdGhEYXRhV29ya09yZGVyLT57JE9iamVjdH0tPnskTGlua1R5cGV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT57JERpcmVjdGlvbn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb21iaW5lIHRoZSBsaW5rZWQgb2JqZWN0IGRhdGEgZnJvbSBhbGwgd29ya29yZGVycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGlua0xpc3RXaXRoRGF0YS0+eyRPYmplY3R9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259LT57JElEfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkTGlua0xpc3RXaXRoRGF0YVdvcmtPcmRlci0+eyRPYmplY3R9LT57JExpbmtUeXBlfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT57JERpcmVjdGlvbn0tPnskSUR9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGdldCB1bmlxdWUgc2VydmljZSBpZHMKICAgICAgICAgICAgICAgIG15ICVVbmlxdWVTZXJ2aWNlSURzOwogICAgICAgICAgICAgICAgbXkgJFNlcnZpY2VzUmVmID0gJExpbmtMaXN0V2l0aERhdGEtPntTZXJ2aWNlfSB8fCB7fTsKICAgICAgICAgICAgICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXskU2VydmljZXNSZWZ9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIGV4dHJhY3QgbGluayB0eXBlIExpc3QKICAgICAgICAgICAgICAgICAgICBteSAkTGlua1R5cGVMaXN0ID0gJFNlcnZpY2VzUmVmLT57JExpbmtUeXBlfTsKCiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICREaXJlY3Rpb24gKCBzb3J0IGtleXMgJXskTGlua1R5cGVMaXN0fSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgZXh0cmFjdCBkaXJlY3Rpb24gbGlzdAogICAgICAgICAgICAgICAgICAgICAgICBteSAkRGlyZWN0aW9uTGlzdCA9ICRTZXJ2aWNlc1JlZi0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgY29sbGVjdCB1bmlxdWUgc2VydmljZSBpZHMKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBzb3J0IGtleXMgJXskRGlyZWN0aW9uTGlzdH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVW5pcXVlU2VydmljZUlEc3skU2VydmljZUlEfSsrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBkYXRhIGZvciBlYWNoIHNlcnZpY2UKICAgICAgICAgICAgICAgIG15IEBTZXJ2aWNlc0RhdGE7CiAgICAgICAgICAgICAgICBTRVJWSUNFSUQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAlVW5pcXVlU2VydmljZUlEcyApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBnZXQgc2VydmljZSBkYXRhCiAgICAgICAgICAgICAgICAgICAgbXkgJVNlcnZpY2VEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSBzZXJ2aWNlIGRhdGEKICAgICAgICAgICAgICAgICAgICBwdXNoIEBTZXJ2aWNlc0RhdGEsIFwlU2VydmljZURhdGE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBzb3J0IHNlcnZpY2VzIGRhdGEgYnkgc2VydmljZSBuYW1lCiAgICAgICAgICAgICAgICBAU2VydmljZXNEYXRhID0gc29ydCB7ICRhLT57TmFtZX0gY21wICRiLT57TmFtZX0gfSBAU2VydmljZXNEYXRhOwoKICAgICAgICAgICAgICAgICMgc3RvcmUgc2VydmljZXMgZGF0YQogICAgICAgICAgICAgICAgaWYgKCBzY2FsYXIgQFNlcnZpY2VzRGF0YSApIHsKICAgICAgICAgICAgICAgICAgICBTRVJWSUNFOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkU2VydmljZSAoQFNlcnZpY2VzRGF0YSkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkU2VydmljZU5hbWUgPSAkU2VydmljZS0+e05hbWVTaG9ydH07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEluZm97U2VydmljZXN9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEluZm97U2VydmljZXN9IC49ICcgJyAuICRTZXJ2aWNlTmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgU0VSVklDRTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkSW5mb3tTZXJ2aWNlc30gPSAkU2VydmljZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY3N2IHF1b3RlCiAgICAgICAgICAgICAgICBpZiAoICFAQ1NWSGVhZCApIHsKICAgICAgICAgICAgICAgICAgICBAQ1NWSGVhZCA9IEB7ICRTZWxmLT57Q29uZmlnfS0+e1NlYXJjaENTVkRhdGF9IH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgQERhdGE7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEhlYWRlciAoQENTVkhlYWQpIHsKCiAgICAgICAgICAgICAgICAgICAgIyBpZiB0aGUgY29sdW1uIGlzIGEgZHluYW1pYyBmaWVsZAogICAgICAgICAgICAgICAgICAgIGlmICggJEhlYWRlciA9fiBteyBcQSBEeW5hbWljRmllbGRfICggW2EtekEtWlxkXSsgKSBceiB9eG1zICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZE5hbWUgPSAkMTsKCiAgICAgICAgICAgICAgICAgICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGRzSVRTTUNoYW5nZX0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IG5lICREeW5hbWljRmllbGROYW1lOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IHByaW50IHN0cmluZyBmb3IgdGhpcyBkeW5hbWljIGZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkVmFsdWUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RGlzcGxheVZhbHVlUmVuZGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkSW5mb3skSGVhZGVyfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZU1heENoYXJzICAgICAgPT4gMTAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSW5mb3skSGVhZGVyfSA9ICRWYWx1ZS0+e1ZhbHVlfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IERZTkFNSUNGSUVMRDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcHVzaCBARGF0YSwgJEluZm97JEhlYWRlcn07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcHVzaCBAQ1NWRGF0YSwgXEBEYXRhOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNzdiBxdW90ZQogICAgICAgICAgICAjIHRyYW5zbGF0ZSBub24gZXhpc3RpbmcgaGVhZGVyIG1heSByZXN1bHQgaW4gYSBnYXJiYWdlIGZpbGUKICAgICAgICAgICAgaWYgKCAhQENTVkhlYWQgKSB7CiAgICAgICAgICAgICAgICBAQ1NWSGVhZCA9IEB7ICRTZWxmLT57Q29uZmlnfS0+e1NlYXJjaENTVkRhdGF9IH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgdHJhbnNsYXRlIGhlYWRlcnMKICAgICAgICAgICAgZm9yIG15ICRIZWFkZXIgKEBDU1ZIZWFkKSB7CgogICAgICAgICAgICAgICAgIyByZXBsYWNlIENoYW5nZU51bWJlciBoZWFkZXIgd2l0aCB0aGUgY3VycmVudCBDaGFuZ2VIb29rIGZyb20gY29uZmlnCiAgICAgICAgICAgICAgICBpZiAoICRIZWFkZXIgZXEgJ0NoYW5nZU51bWJlcicgKSB7CiAgICAgICAgICAgICAgICAgICAgJEhlYWRlciA9ICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNoYW5nZTo6SG9vaycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJEhlYWRlciA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgkSGVhZGVyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhc3NhYmxlIENTViBkYXRhCiAgICAgICAgICAgIG15ICRDU1YgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q1NWJyktPkFycmF5MkNTVigKICAgICAgICAgICAgICAgIEhlYWQgICAgICA9PiBcQENTVkhlYWQsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgPT4gXEBDU1ZEYXRhLAogICAgICAgICAgICAgICAgU2VwYXJhdG9yID0+ICRTZWxmLT57VXNlckNTVlNlcGFyYXRvcn0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJldHVybiBjc3YgdG8gZG93bmxvYWQKICAgICAgICAgICAgbXkgJENTVkZpbGUgPSAnY2hhbmdlX3NlYXJjaCc7CiAgICAgICAgICAgIG15ICggJHMsICRtLCAkaCwgJEQsICRNLCAkWSApID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE0gPSBzcHJpbnRmKCAiJTAyZCIsICRNICk7CiAgICAgICAgICAgICREID0gc3ByaW50ZiggIiUwMmQiLCAkRCApOwogICAgICAgICAgICAkaCA9IHNwcmludGYoICIlMDJkIiwgJGggKTsKICAgICAgICAgICAgJG0gPSBzcHJpbnRmKCAiJTAyZCIsICRtICk7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJENTVkZpbGUgLiAiXyIgLiAiJFktJE0tJEQiIC4gIl8iIC4gIiRoLSRtLmNzdiIsCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAidGV4dC9jc3Y7IGNoYXJzZXQ9IiAuICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAkQ1NWLAogICAgICAgICAgICApOwoKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17UmVzdWx0Rm9ybX0gZXEgJ1ByaW50JyApIHsKCiAgICAgICAgICAgICMgdG8gc3RvcmUgYWxsIGRhdGEKICAgICAgICAgICAgbXkgJUluZm87CgogICAgICAgICAgICAjIGdldCBwZGYgb2JqZWN0CiAgICAgICAgICAgIG15ICRQREZPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UERGJyk7CgogICAgICAgICAgICAjIHRvIHNlbmQgZGF0YSB0byB0aGUgUERGIG91dHB1dAogICAgICAgICAgICBteSBAUERGRGF0YTsKICAgICAgICAgICAgSUQ6CiAgICAgICAgICAgIGZvciBteSAkQ2hhbmdlSUQgKCBAeyRWaWV3YWJsZUNoYW5nZUlEc30gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgY2hhbmdlIGRhdGEKICAgICAgICAgICAgICAgIG15ICRDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJENoYW5nZTsKCiAgICAgICAgICAgICAgICAjIGFkZCBjaGFuZ2UgZGF0YSwKICAgICAgICAgICAgICAgICVJbmZvID0gJXskQ2hhbmdlfTsKCiAgICAgICAgICAgICAgICAjIGdldCB1c2VyIGRhdGEgZm9yIG5lZWRlZCB1c2VyIHR5cGVzCiAgICAgICAgICAgICAgICBVU0VSVFlQRToKICAgICAgICAgICAgICAgIGZvciBteSAkVXNlclR5cGUgKHF3KENoYW5nZUJ1aWxkZXIgQ2hhbmdlTWFuYWdlciBXb3JrT3JkZXJBZ2VudCkpIHsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBpZiBVc2VyVHlwZSBhdHRyaWJ1dGUgZXhpc3RzIGVpdGhlciBpbiBjaGFuZ2Ugb3Igd29ya29yZGVyCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJENoYW5nZS0+eyAkVXNlclR5cGUgLiAnSUQnIH0gJiYgISRJbmZveyAkVXNlclR5cGUgLiAnSUQnIH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgVVNFUlRZUEU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGdldCB1c2VyIGRhdGEKICAgICAgICAgICAgICAgICAgICBteSAlVXNlciA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlLT57ICRVc2VyVHlwZSAuICdJRCcgfSB8fCAkSW5mb3sgJFVzZXJUeXBlIC4gJ0lEJyB9LAogICAgICAgICAgICAgICAgICAgICAgICBDYWNoZWQgPT4gMSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIHNldCB1c2VyIGZ1bGwgbmFtZQogICAgICAgICAgICAgICAgICAgICRJbmZveyRVc2VyVHlwZX0gPSAkVXNlcntVc2VyTG9naW59IC4gJyAoJyAuICRVc2Vye1VzZXJGaXJzdG5hbWV9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJFVzZXJ7VXNlckxhc3RuYW1lfSAuICcpJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAkQ2hhbmdlVGl0bGUgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuQ2hhbmdlVGl0bGUgfCB0cnVuY2F0ZSgzMCkgfCBodG1sICVdJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICA9PiBcJUluZm8sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15ICRQbGFubmVkU3RhcnQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuUGxhbm5lZFN0YXJ0VGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICA9PiBcJUluZm8sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15ICRQbGFubmVkRW5kID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlID0+ICdbJSBEYXRhLlBsYW5uZWRFbmRUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0nLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwlSW5mbywKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgQFBERlJvdzsKICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgICRJbmZve0NoYW5nZU51bWJlcn07CiAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICAkQ2hhbmdlVGl0bGU7CiAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICAkSW5mb3tDaGFuZ2VCdWlsZGVyfTsKICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgICRJbmZve1dvcmtPcmRlckNvdW50fTsKICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgICRJbmZve0NoYW5nZVN0YXRlfTsKICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgICRJbmZve1ByaW9yaXR5fTsKICAgICAgICAgICAgICAgIHB1c2ggQFBERlJvdywgICRQbGFubmVkU3RhcnQ7CiAgICAgICAgICAgICAgICBwdXNoIEBQREZSb3csICAkUGxhbm5lZEVuZDsKICAgICAgICAgICAgICAgIHB1c2ggQFBERkRhdGEsIFxAUERGUm93OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFBERiBPdXRwdXQKICAgICAgICAgICAgbXkgJFRpdGxlICAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ2hhbmdlIFNlYXJjaCcpOwogICAgICAgICAgICBteSAkUHJpbnRlZEJ5ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdwcmludGVkIGJ5Jyk7CiAgICAgICAgICAgIG15ICRQYWdlICAgICAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1BhZ2UnKTsKICAgICAgICAgICAgbXkgJFRpbWUgICAgICA9ICRMYXlvdXRPYmplY3QtPntUaW1lfTsKCiAgICAgICAgICAgICMgZ2V0IG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzCiAgICAgICAgICAgIG15ICRNYXhQYWdlcyA9ICRDb25maWdPYmplY3QtPkdldCgnUERGOjpNYXhQYWdlcycpOwogICAgICAgICAgICBpZiAoICEkTWF4UGFnZXMgfHwgJE1heFBhZ2VzIDwgMSB8fCAkTWF4UGFnZXMgPiAxMDAwICkgewogICAgICAgICAgICAgICAgJE1heFBhZ2VzID0gMTAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNyZWF0ZSB0aGUgaGVhZGVyCiAgICAgICAgICAgIG15ICRDZWxsRGF0YTsKCiAgICAgICAgICAgICMgb3V0cHV0ICdObyB0aWNrZXQgZGF0YSBmb3VuZCcsIGlmIG5vIGNvbnRlbnQgd2FzIGdpdmVuCiAgICAgICAgICAgIGlmIChAUERGRGF0YSkgewogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlswXS0+e0NvbnRlbnR9ID0gJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNQ2hhbmdlOjpIb29rJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzBdLT57Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzFdLT57Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NoYW5nZVRpdGxlJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzFdLT57Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzJdLT57Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NoYW5nZUJ1aWxkZXInKTsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bMl0tPntGb250fSAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bM10tPntDb250ZW50fSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnV29ya09yZGVycycpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPlszXS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPls0XS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdDaGFuZ2VTdGF0ZScpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPls0XS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPls1XS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdQcmlvcml0eScpOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPls1XS0+e0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICAgICAgICAgJENlbGxEYXRhLT5bMF0tPls2XS0+e0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdQbGFubmVkU3RhcnRUaW1lJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzZdLT57Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzddLT57Q29udGVudH0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1BsYW5uZWRFbmRUaW1lJyk7CiAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlswXS0+WzddLT57Rm9udH0gICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgdGhlIGNvbnRlbnQgYXJyYXkKICAgICAgICAgICAgICAgIG15ICRDb3VudGVyUm93ID0gMTsKICAgICAgICAgICAgICAgIGZvciBteSAkUm93IChAUERGRGF0YSkgewogICAgICAgICAgICAgICAgICAgIG15ICRDb3VudGVyQ29sdW1uID0gMDsKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJENvbnRlbnQgKCBAeyRSb3d9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ2VsbERhdGEtPlskQ291bnRlclJvd10tPlskQ291bnRlckNvbHVtbl0tPntDb250ZW50fSA9ICRDb250ZW50OwogICAgICAgICAgICAgICAgICAgICAgICAkQ291bnRlckNvbHVtbisrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkQ291bnRlclJvdysrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRDZWxsRGF0YS0+WzBdLT5bMF0tPntDb250ZW50fSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTm8gdGlja2V0IGRhdGEgZm91bmQuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcGFnZSBwYXJhbXMKICAgICAgICAgICAgbXkgJVBhZ2VQYXJhbTsKICAgICAgICAgICAgJFBhZ2VQYXJhbXtQYWdlT3JpZW50YXRpb259ID0gJ2xhbmRzY2FwZSc7CiAgICAgICAgICAgICRQYWdlUGFyYW17TWFyZ2luVG9wfSAgICAgICA9IDMwOwogICAgICAgICAgICAkUGFnZVBhcmFte01hcmdpblJpZ2h0fSAgICAgPSA0MDsKICAgICAgICAgICAgJFBhZ2VQYXJhbXtNYXJnaW5Cb3R0b219ICAgID0gNDA7CiAgICAgICAgICAgICRQYWdlUGFyYW17TWFyZ2luTGVmdH0gICAgICA9IDQwOwogICAgICAgICAgICAkUGFnZVBhcmFte0hlYWRlclJpZ2h0fSAgICAgPSAkVGl0bGU7CgogICAgICAgICAgICAjIHRhYmxlIHBhcmFtcwogICAgICAgICAgICBteSAlVGFibGVQYXJhbTsKICAgICAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9ICAgICAgICAgICAgPSAkQ2VsbERhdGE7CiAgICAgICAgICAgICRUYWJsZVBhcmFte1R5cGV9ICAgICAgICAgICAgICAgID0gJ0N1dCc7CiAgICAgICAgICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgICAgID0gNjsKICAgICAgICAgICAgJFRhYmxlUGFyYW17Qm9yZGVyfSAgICAgICAgICAgICAgPSAwOwogICAgICAgICAgICAkVGFibGVQYXJhbXtCYWNrZ3JvdW5kQ29sb3JFdmVufSA9ICcjREREREREJzsKICAgICAgICAgICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICAgICAgPSAxOwogICAgICAgICAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICA9IDM7CiAgICAgICAgICAgICRUYWJsZVBhcmFte1BhZGRpbmdCb3R0b219ICAgICAgID0gMzsKCiAgICAgICAgICAgICMgY3JlYXRlIG5ldyBwZGYgZG9jdW1lbnQKICAgICAgICAgICAgJFBERk9iamVjdC0+RG9jdW1lbnROZXcoCiAgICAgICAgICAgICAgICBUaXRsZSAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdQcm9kdWN0JykgLiAnOiAnIC4gJFRpdGxlLAogICAgICAgICAgICAgICAgRW5jb2RlID0+ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHN0YXJ0IHRhYmxlIG91dHB1dAogICAgICAgICAgICAkUERGT2JqZWN0LT5QYWdlTmV3KAogICAgICAgICAgICAgICAgJVBhZ2VQYXJhbSwKICAgICAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdlIC4gJyAxJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRQREZPYmplY3QtPlBvc2l0aW9uU2V0KAogICAgICAgICAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgICAgICAgICBZICAgID0+IC02LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBvdXRwdXQgdGl0bGUKICAgICAgICAgICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICAgICAgICAgIFRleHQgICAgID0+ICRUaXRsZSwKICAgICAgICAgICAgICAgIEZvbnRTaXplID0+IDEzLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgICAgIFkgICAgPT4gLTYsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG91dHB1dCAicHJpbnRlZCBieSIKICAgICAgICAgICAgJFBERk9iamVjdC0+VGV4dCgKICAgICAgICAgICAgICAgIFRleHQgPT4gJFByaW50ZWRCeSAuICcgJwogICAgICAgICAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyRmlyc3RuYW1lfSAuICcgJwogICAgICAgICAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyTGFzdG5hbWV9IC4gJyAoJwogICAgICAgICAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyRW1haWx9IC4gJykgJwogICAgICAgICAgICAgICAgICAgIC4gJFRpbWUsCiAgICAgICAgICAgICAgICBGb250U2l6ZSA9PiA5LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFBERk9iamVjdC0+UG9zaXRpb25TZXQoCiAgICAgICAgICAgICAgICBNb3ZlID0+ICdyZWxhdGl2JywKICAgICAgICAgICAgICAgIFkgICAgPT4gLTE0LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgUEFHRToKICAgICAgICAgICAgZm9yIG15ICRDb3VudCAoIDIgLi4gJE1heFBhZ2VzICkgewoKICAgICAgICAgICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICAgICAgICAgJVRhYmxlUGFyYW0gPSAkUERGT2JqZWN0LT5UYWJsZSggJVRhYmxlUGFyYW0sICk7CgogICAgICAgICAgICAgICAgIyBzdG9wIG91dHB1dCBvciBhbm90aGVyIHBhZ2UKICAgICAgICAgICAgICAgIGlmICggJFRhYmxlUGFyYW17U3RhdGV9ICkgewogICAgICAgICAgICAgICAgICAgIGxhc3QgUEFHRTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRQREZPYmplY3QtPlBhZ2VOZXcoCiAgICAgICAgICAgICAgICAgICAgICAgICVQYWdlUGFyYW0sIEZvb3RlclJpZ2h0ID0+ICRQYWdlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICcgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ291bnQsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyByZXR1cm4gdGhlIHBkZiBkb2N1bWVudAogICAgICAgICAgICBteSAkRmlsZW5hbWUgPSAnY2hhbmdlX3NlYXJjaCc7CiAgICAgICAgICAgIG15ICggJHMsICRtLCAkaCwgJEQsICRNLCAkWSApID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE0gPSBzcHJpbnRmKCAiJTAyZCIsICRNICk7CiAgICAgICAgICAgICREID0gc3ByaW50ZiggIiUwMmQiLCAkRCApOwogICAgICAgICAgICAkaCA9IHNwcmludGYoICIlMDJkIiwgJGggKTsKICAgICAgICAgICAgJG0gPSBzcHJpbnRmKCAiJTAyZCIsICRtICk7CiAgICAgICAgICAgIG15ICRQREZTdHJpbmcgPSAkUERGT2JqZWN0LT5Eb2N1bWVudE91dHB1dCgpOwogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICRGaWxlbmFtZSAuICJfIiAuICIkWS0kTS0kRCIgLiAiXyIgLiAiJGgtJG0ucGRmIiwKICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICJhcHBsaWNhdGlvbi9wZGYiLAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFBERlN0cmluZywKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgc3RhcnQgaHRtbCBwYWdlCiAgICAgICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPlByaW50KCBPdXRwdXQgPT4gXCRPdXRwdXQgKTsKICAgICAgICAgICAgJE91dHB1dCA9ICcnOwoKICAgICAgICAgICAgJFNlbGYtPntGaWx0ZXJ9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbHRlcicgKSB8fCAnJzsKICAgICAgICAgICAgJFNlbGYtPntWaWV3fSAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1ZpZXcnICkgICB8fCAnJzsKCiAgICAgICAgICAgICMgc2hvdyBjaGFuZ2VzCiAgICAgICAgICAgIG15ICRMaW5rUGFnZSA9ICdGaWx0ZXI9JwogICAgICAgICAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57RmlsdGVyfSApCiAgICAgICAgICAgICAgICAuICc7Vmlldz0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAgICAgICAgIC4gJztTb3J0Qnk9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntTb3J0Qnl9ICkKICAgICAgICAgICAgICAgIC4gJztPcmRlckJ5PScKICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e09yZGVyQnl9ICkKICAgICAgICAgICAgICAgIC4gJztQcm9maWxlPScgLiAkU2VsZi0+e1Byb2ZpbGV9IC4gJztUYWtlTGFzdFNlYXJjaD0xO1N1YmFjdGlvbj1TZWFyY2gnCiAgICAgICAgICAgICAgICAuICc7JzsKICAgICAgICAgICAgbXkgJExpbmtTb3J0ID0gJ0ZpbHRlcj0nCiAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntGaWx0ZXJ9ICkKICAgICAgICAgICAgICAgIC4gJztWaWV3PScgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57Vmlld30gKQogICAgICAgICAgICAgICAgLiAnO1Byb2ZpbGU9JyAuICRTZWxmLT57UHJvZmlsZX0gLiAnO1Rha2VMYXN0U2VhcmNoPTE7U3ViYWN0aW9uPVNlYXJjaCcKICAgICAgICAgICAgICAgIC4gJzsnOwogICAgICAgICAgICBteSAkTGlua0ZpbHRlciA9ICdUYWtlTGFzdFNlYXJjaD0xO1N1YmFjdGlvbj1TZWFyY2g7UHJvZmlsZT0nCiAgICAgICAgICAgICAgICAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntQcm9maWxlfSApCiAgICAgICAgICAgICAgICAuICc7JzsKICAgICAgICAgICAgbXkgJExpbmtCYWNrID0gJ1N1YmFjdGlvbj1Mb2FkUHJvZmlsZTtQcm9maWxlPScKICAgICAgICAgICAgICAgIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1Byb2ZpbGV9ICkKICAgICAgICAgICAgICAgIC4gJztUYWtlTGFzdFNlYXJjaD0xOyc7CgogICAgICAgICAgICAjIGZpbmQgb3V0IHdoaWNoIGNvbHVtbnMgc2hvdWxkIGJlIHNob3duCiAgICAgICAgICAgIG15IEBTaG93Q29sdW1uczsKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgYWxsIHBvc3NpYmxlIGNvbHVtbnMgZnJvbSBjb25maWcKICAgICAgICAgICAgICAgIG15ICVQb3NzaWJsZUNvbHVtbiA9ICV7ICRTZWxmLT57Q29uZmlnfS0+e1Nob3dDb2x1bW5zfSB9OwoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBjb2x1bW4gbmFtZXMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgICAgICAgICAgICAgIENPTFVNTk5BTUU6CiAgICAgICAgICAgICAgICBmb3IgbXkgJE5hbWUgKCBzb3J0IGtleXMgJVBvc3NpYmxlQ29sdW1uICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgQ09MVU1OTkFNRSBpZiAhJFBvc3NpYmxlQ29sdW1ueyROYW1lfTsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBTaG93Q29sdW1ucywgJE5hbWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+SVRTTUNoYW5nZUxpc3RTaG93KAogICAgICAgICAgICAgICAgQ2hhbmdlSURzICAgID0+ICRWaWV3YWJsZUNoYW5nZUlEcywKICAgICAgICAgICAgICAgIFRvdGFsICAgICAgICA9PiBzY2FsYXIgQHskVmlld2FibGVDaGFuZ2VJRHN9LAogICAgICAgICAgICAgICAgVmlldyAgICAgICAgID0+ICRTZWxmLT57Vmlld30sCiAgICAgICAgICAgICAgICBFbnYgICAgICAgICAgPT4gJFNlbGYsCiAgICAgICAgICAgICAgICBMaW5rUGFnZSAgICAgPT4gJExpbmtQYWdlLAogICAgICAgICAgICAgICAgTGlua1NvcnQgICAgID0+ICRMaW5rU29ydCwKICAgICAgICAgICAgICAgIExpbmtGaWx0ZXIgICA9PiAkTGlua0ZpbHRlciwKICAgICAgICAgICAgICAgIExpbmtCYWNrICAgICA9PiAkTGlua0JhY2ssCiAgICAgICAgICAgICAgICBQcm9maWxlICAgICAgPT4gJFNlbGYtPntQcm9maWxlfSwKICAgICAgICAgICAgICAgIFRpdGxlTmFtZSAgICA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0NoYW5nZSBTZWFyY2ggUmVzdWx0JyksCiAgICAgICAgICAgICAgICBTaG93Q29sdW1ucyAgPT4gXEBTaG93Q29sdW1ucywKICAgICAgICAgICAgICAgIFNvcnRCeSAgICAgICA9PiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57U29ydEJ5fSApLAogICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgID0+ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntPcmRlckJ5fSApLAogICAgICAgICAgICAgICAgUmVxdWVzdGVkVVJMID0+ICdBY3Rpb249JyAuICRTZWxmLT57QWN0aW9ufSAuICc7JyAuICRMaW5rUGFnZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYnVpbGQgZm9vdGVyCiAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQUpBWFByb2ZpbGVEZWxldGUnICkgewogICAgICAgIG15ICRQcm9maWxlID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Byb2ZpbGUnICk7CgogICAgICAgICMgcmVtb3ZlIG9sZCBwcm9maWxlIHN0dWZmCiAgICAgICAgJFNlYXJjaFByb2ZpbGVPYmplY3QtPlNlYXJjaFByb2ZpbGVEZWxldGUoCiAgICAgICAgICAgIEJhc2UgICAgICA9PiAnSVRTTUNoYW5nZVNlYXJjaCcsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkUHJvZmlsZSwKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICAgICApOwogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKAogICAgICAgICAgICBEYXRhID0+IDEsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRPdXRwdXQsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBSkFYJyApIHsKCiAgICAgICAgbXkgJE91dHB1dCAuPSAkU2VsZi0+X01hc2tGb3JtKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNQ2hhbmdlU2VhcmNoJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRPdXRwdXQsCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnCiAgICAgICAgKTsKCiAgICB9CgogICAgIyBUaGVyZSB3YXMgbm8gJ1N1YkFjdGlvbicsIG9yIHRoZXJlIHdlcmUgdmFsaWRhdGlvbiBlcnJvcnMsIG9yIGFuIHVzZXIgb3IgY3VzdG9tZXIgd2FzIHNlYXJjaGVkCiAgICAjIGdlbmVyYXRlIHNlYXJjaCBtYXNrCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdTZWFyY2gnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNoYW5nZVNlYXJjaCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9NYXNrRm9ybSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIG15ICRQcm9maWxlID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Byb2ZpbGUnICkgfHwgJyc7CiAgICBteSAkRW1wdHlTZWFyY2ggPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRW1wdHlTZWFyY2gnICk7CiAgICBpZiAoICEkUHJvZmlsZSApIHsKICAgICAgICAkRW1wdHlTZWFyY2ggPSAxOwogICAgfQoKICAgICMgZ2V0IHNlYXJjaCBwcm9maWxlIG9iamVjdAogICAgbXkgJFNlYXJjaFByb2ZpbGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VhcmNoUHJvZmlsZScpOwoKICAgIG15ICVHZXRQYXJhbSA9ICRTZWFyY2hQcm9maWxlT2JqZWN0LT5TZWFyY2hQcm9maWxlR2V0KAogICAgICAgIEJhc2UgICAgICA9PiAnSVRTTUNoYW5nZVNlYXJjaCcsCiAgICAgICAgTmFtZSAgICAgID0+ICRQcm9maWxlLAogICAgICAgIFVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJMb2dpbn0sCiAgICApOwoKICAgICMgYWxsb3cgcHJvZmlsZSBvdmVyd3JpdGUgdGhlIGNvbnRlbnRzIG9mICVQYXJhbQogICAgJVBhcmFtID0gKAogICAgICAgICVQYXJhbSwKICAgICAgICAlR2V0UGFyYW0sCiAgICApOwoKICAgICMgZ2V0IHVzZXIgb2JqZWN0CiAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgIyBzZXQgdXNlciBmcmllbmRseSBDQUJBZ2VudCBmaWVsZAogICAgaWYgKCAkUGFyYW17Q0FCQWdlbnR9ICYmICRQYXJhbXtDQUJBZ2VudH0gbmUgJycgKSB7CgogICAgICAgICMgZ2V0IHVzZXIgZGF0YQogICAgICAgIG15ICVVc2VyRGF0YSA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtDQUJBZ2VudH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgdXNlciBmcmVubHkgQ0FCQWdlbnQgc3RyaW5nCiAgICAgICAgbXkgJFVzZXJWYWx1ZSA9IHNwcmludGYgJyIlcyAlcyIgPCVzPicsCiAgICAgICAgICAgICRVc2VyRGF0YXtVc2VyRmlyc3RuYW1lfSwKICAgICAgICAgICAgJFVzZXJEYXRhe1VzZXJMYXN0bmFtZX0sCiAgICAgICAgICAgICRVc2VyRGF0YXtVc2VyRW1haWx9OwoKICAgICAgICAkUGFyYW17Q0FCQWdlbnRTZWFyY2h9ID0gJFVzZXJWYWx1ZTsKICAgIH0KCiAgICAjIHNldCB1c2VyIGZyZW5kbHkgQ0FCQ3VzdG9tZXIgZmllbGQKICAgIGlmICggJFBhcmFte0NBQkN1c3RvbWVyfSAmJiAkUGFyYW17Q0FCQ3VzdG9tZXJ9IG5lICcnICkgewoKICAgICAgICAjIGdldCBjdXN0b21lciBkYXRhCiAgICAgICAgbXkgJUN1c3RvbWVyU2VhcmNoTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKS0+Q3VzdG9tZXJTZWFyY2goCiAgICAgICAgICAgIFNlYXJjaCA9PiAkUGFyYW17Q0FCQ3VzdG9tZXJ9LAogICAgICAgICk7CiAgICAgICAgJFBhcmFte0NBQkN1c3RvbWVyU2VhcmNofSA9ICRDdXN0b21lclNlYXJjaExpc3R7ICRQYXJhbXtDQUJDdXN0b21lcn0gfTsKICAgIH0KCiAgICAjIHNldCBhdHRyaWJ1dGVzIHN0cmluZwogICAgbXkgQEF0dHJpYnV0ZXMgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ2hhbmdlTnVtYmVyJywKICAgICAgICAgICAgVmFsdWUgPT4gVHJhbnNsYXRhYmxlKCdDaGFuZ2UgTnVtYmVyJyksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdDaGFuZ2VUaXRsZScsCiAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnQ2hhbmdlIFRpdGxlJyksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdXb3JrT3JkZXJUaXRsZScsCiAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnV29yayBPcmRlciBUaXRsZScpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ0FCQWdlbnQnLAogICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ0NBQiBBZ2VudCcpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ0FCQ3VzdG9tZXInLAogICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ0NBQiBDdXN0b21lcicpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICAgICA9PiAnJywKICAgICAgICAgICAgVmFsdWUgICAgPT4gJy0nLAogICAgICAgICAgICBEaXNhYmxlZCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnRGVzY3JpcHRpb24nLAogICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ0NoYW5nZSBEZXNjcmlwdGlvbicpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnSnVzdGlmaWNhdGlvbicsCiAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnQ2hhbmdlIEp1c3RpZmljYXRpb24nKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1dvcmtPcmRlckluc3RydWN0aW9uJywKICAgICAgICAgICAgVmFsdWUgPT4gVHJhbnNsYXRhYmxlKCdXb3JrT3JkZXIgSW5zdHJ1Y3Rpb24nKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1dvcmtPcmRlclJlcG9ydCcsCiAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnV29ya09yZGVyIFJlcG9ydCcpLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgYmFja2VuZCBvYmplY3QKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgIG15ICREeW5hbWljRmllbGRTZXBhcmF0b3IgPSAxOwogICAgbXkgJExhc3RPYmplY3RUeXBlICAgICAgICA9ICcnOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjcmVhdGUgZHluYW1pYyBmaWVsZHMgc2VhcmNoIG9wdGlvbnMgZm9yIGF0dHJpYnV0ZSBzZWxlY3QKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoCiAgICAgICAgQHsgJFNlbGYtPntEeW5hbWljRmllbGRDaGFuZ2V9IH0sCiAgICAgICAgQHsgJFNlbGYtPntEeW5hbWljRmllbGRXb3JrT3JkZXJ9IH0KICAgICAgICApCiAgICB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX07CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IGVxICcnOwoKICAgICAgICBpZiAoCiAgICAgICAgICAgICRMYXN0T2JqZWN0VHlwZSBlcSAnSVRTTUNoYW5nZScKICAgICAgICAgICAgJiYgJER5bmFtaWNGaWVsZENvbmZpZy0+e09iamVjdFR5cGV9IGVxICdJVFNNV29ya09yZGVyJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkRHluYW1pY0ZpZWxkU2VwYXJhdG9yID0gMTsKICAgICAgICB9CgogICAgICAgICMgc2F2ZSB0aGUgbGFzdCBvYmplY3QgdHlwZSAobmVlZGVkIGZvciBzZXBhcmF0b3IgYmV0d2VlbiBjaGFuZ2UgYW5kIHdvcmtvcmRlciBmaWVsZHMpCiAgICAgICAgJExhc3RPYmplY3RUeXBlID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e09iamVjdFR5cGV9OwoKICAgICAgICAjIGNyZWF0ZSBhIHNlcGFyYXRvciBmb3IgZHluYW1pYyBmaWVsZHMgYXR0cmlidXRlcwogICAgICAgIGlmICgkRHluYW1pY0ZpZWxkU2VwYXJhdG9yKSB7CiAgICAgICAgICAgIHB1c2ggQEF0dHJpYnV0ZXMsICgKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICA9PiAnLScsCiAgICAgICAgICAgICAgICAgICAgRGlzYWJsZWQgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkRHluYW1pY0ZpZWxkU2VwYXJhdG9yID0gMDsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHNlYXJjaCBmaWVsZCBwcmVmZXJlbmNlcwogICAgICAgIG15ICRTZWFyY2hGaWVsZFByZWZlcmVuY2VzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlNlYXJjaEZpZWxkUHJlZmVyZW5jZXMoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICk7CgogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0FycmF5UmVmV2l0aERhdGEoJFNlYXJjaEZpZWxkUHJlZmVyZW5jZXMpOwoKICAgICAgICAjIHRyYW5zbGF0ZSB0aGUgZHluYW1pYyBmaWVsZCBsYWJlbAogICAgICAgIG15ICRUcmFuc2xhdGVkRHluYW1pY0ZpZWxkTGFiZWwgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH0sCiAgICAgICAgKTsKCiAgICAgICAgUFJFRkVSRU5DRToKICAgICAgICBmb3IgbXkgJFByZWZlcmVuY2UgKCBAeyRTZWFyY2hGaWVsZFByZWZlcmVuY2VzfSApIHsKCiAgICAgICAgICAgICMgdHJhbnNsYXRlIHRoZSBzdWZmaXgKICAgICAgICAgICAgbXkgJFRyYW5zbGF0ZWRTdWZmaXggPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAkUHJlZmVyZW5jZS0+e0xhYmVsU3VmZml4fSwKICAgICAgICAgICAgKSB8fCAnJzsKCiAgICAgICAgICAgIGlmICgkVHJhbnNsYXRlZFN1ZmZpeCkgewogICAgICAgICAgICAgICAgJFRyYW5zbGF0ZWRTdWZmaXggPSAnICgnIC4gJFRyYW5zbGF0ZWRTdWZmaXggLiAnKSc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1c2ggQEF0dHJpYnV0ZXMsICgKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgPT4gJ1NlYXJjaF9EeW5hbWljRmllbGRfJwogICAgICAgICAgICAgICAgICAgICAgICAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfQogICAgICAgICAgICAgICAgICAgICAgICAuICRQcmVmZXJlbmNlLT57VHlwZX0sCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFRyYW5zbGF0ZWREeW5hbWljRmllbGRMYWJlbCAuICRUcmFuc2xhdGVkU3VmZml4LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgYSBzZXBhcmF0b3IgaWYgYSBkeW5hbWljIGZpZWxkIGF0dHJpYnV0ZSB3YXMgcHVzaGVkCiAgICBpZiAoICEkRHluYW1pY0ZpZWxkU2VwYXJhdG9yICkgewogICAgICAgIHB1c2ggQEF0dHJpYnV0ZXMsICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICA9PiAnLScsCiAgICAgICAgICAgICAgICBEaXNhYmxlZCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBjcmVhdGUgSFRNTCBzdHJpbmdzIGZvciBhbGwgZHluYW1pYyBmaWVsZHMKICAgIG15ICVEeW5hbWljRmllbGRIVE1MOwoKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoCiAgICAgICAgQHsgJFNlbGYtPntEeW5hbWljRmllbGRDaGFuZ2V9IH0sCiAgICAgICAgQHsgJFNlbGYtPntEeW5hbWljRmllbGRXb3JrT3JkZXJ9IH0KICAgICAgICApCiAgICB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBzZWFyY2ggZmllbGQgcHJlZmVyZW5jZXMKICAgICAgICBteSAkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFByZWZlcmVuY2VzKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICApOwoKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCRTZWFyY2hGaWVsZFByZWZlcmVuY2VzKTsKCiAgICAgICAgIyBnZXQgUG9zc2libGVWYWx1ZXMKICAgICAgICBteSAkUG9zc2libGVWYWx1ZXMgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+UG9zc2libGVWYWx1ZXNHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyAgID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIE92ZXJyaWRlUG9zc2libGVOb25lID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgUFJFRkVSRU5DRToKICAgICAgICBmb3IgbXkgJFByZWZlcmVuY2UgKCBAeyRTZWFyY2hGaWVsZFByZWZlcmVuY2VzfSApIHsKCiAgICAgICAgICAgICMgZ2V0IGZpZWxkIGh0bWwKICAgICAgICAgICAgJER5bmFtaWNGaWVsZEhUTUx7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSAuICRQcmVmZXJlbmNlLT57VHlwZX0gfQogICAgICAgICAgICAgICAgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+U2VhcmNoRmllbGRSZW5kZXIoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgUHJvZmlsZSAgICAgICAgICAgICAgPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzRmlsdGVyID0+ICRQb3NzaWJsZVZhbHVlcywKICAgICAgICAgICAgICAgIERlZmF1bHRWYWx1ZSA9PgogICAgICAgICAgICAgICAgICAgICRTZWxmLT57Q29uZmlnfS0+e0RlZmF1bHRzfS0+e0R5bmFtaWNGaWVsZH0KICAgICAgICAgICAgICAgICAgICAtPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAkUHJlZmVyZW5jZS0+e1R5cGV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcHVzaCBAQXR0cmlidXRlcywgKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1ByaW9yaXR5SURzJywKICAgICAgICAgICAgVmFsdWUgPT4gVHJhbnNsYXRhYmxlKCdDaGFuZ2UgUHJpb3JpdHknKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0ltcGFjdElEcycsCiAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnQ2hhbmdlIEltcGFjdCcpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ2F0ZWdvcnlJRHMnLAogICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ0NoYW5nZSBDYXRlZ29yeScpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ2hhbmdlU3RhdGVJRHMnLAogICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ0NoYW5nZSBTdGF0ZScpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ2hhbmdlTWFuYWdlcklEcycsCiAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnQ2hhbmdlIE1hbmFnZXInKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0NoYW5nZUJ1aWxkZXJJRHMnLAogICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ0NoYW5nZSBCdWlsZGVyJyksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdDcmVhdGVCeScsCiAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnQ3JlYXRlZCBCeScpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnV29ya09yZGVyU3RhdGVJRHMnLAogICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ1dvcmtPcmRlciBTdGF0ZScpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnV29ya09yZGVyVHlwZUlEcycsCiAgICAgICAgICAgIFZhbHVlID0+IFRyYW5zbGF0YWJsZSgnV29ya09yZGVyIFR5cGUnKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1dvcmtPcmRlckFnZW50SURzJywKICAgICAgICAgICAgVmFsdWUgPT4gVHJhbnNsYXRhYmxlKCdXb3JrT3JkZXIgQWdlbnQnKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgICAgPT4gJycsCiAgICAgICAgICAgIFZhbHVlICAgID0+ICctJywKICAgICAgICAgICAgRGlzYWJsZWQgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIHNldCB0aW1lIGF0dHJpYnV0ZXMKICAgIG15IEBUaW1lVHlwZXMgPSAoCiAgICAgICAgewogICAgICAgICAgICBQcmVmaXggPT4gJ1JlcXVlc3RlZCcsCiAgICAgICAgICAgIFRpdGxlICA9PiBUcmFuc2xhdGFibGUoJ1JlcXVlc3RlZCBEYXRlJyksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIFByZWZpeCA9PiAnUGxhbm5lZFN0YXJ0JywKICAgICAgICAgICAgVGl0bGUgID0+IFRyYW5zbGF0YWJsZSgnUGxhbm5lZCBTdGFydCBUaW1lJyksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIFByZWZpeCA9PiAnUGxhbm5lZEVuZCcsCiAgICAgICAgICAgIFRpdGxlICA9PiBUcmFuc2xhdGFibGUoJ1BsYW5uZWQgRW5kIFRpbWUnKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgUHJlZml4ID0+ICdBY3R1YWxTdGFydCcsCiAgICAgICAgICAgIFRpdGxlICA9PiBUcmFuc2xhdGFibGUoJ0FjdHVhbCBTdGFydCBUaW1lJyksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIFByZWZpeCA9PiAnQWN0dWFsRW5kJywKICAgICAgICAgICAgVGl0bGUgID0+IFRyYW5zbGF0YWJsZSgnQWN0dWFsIEVuZCBUaW1lJyksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIFByZWZpeCA9PiAnQ3JlYXRlJywKICAgICAgICAgICAgVGl0bGUgID0+IFRyYW5zbGF0YWJsZSgnQ3JlYXRlIFRpbWUnKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgUHJlZml4ID0+ICdDaGFuZ2UnLAogICAgICAgICAgICBUaXRsZSAgPT4gVHJhbnNsYXRhYmxlKCdDaGFuZ2UgVGltZScpLAogICAgICAgIH0sCiAgICApOwoKICAgIFRJTUVUWVBFOgogICAgZm9yIG15ICRUaW1lVHlwZSAoQFRpbWVUeXBlcykgewogICAgICAgIG15ICRQcmVmaXggPSAkVGltZVR5cGUtPntQcmVmaXh9OwoKICAgICAgICAjIHNob3cgUmVxdWVzdGVkVGltZSBvbmx5IHdoZW4gZW5hYmxlZCBpbiBTeXNDb25maWcKICAgICAgICBpZiAoICRQcmVmaXggZXEgJ1JlcXVlc3RlZCcgJiYgISRTZWxmLT57Q29uZmlnfS0+e1JlcXVlc3RlZFRpbWV9ICkgewogICAgICAgICAgICBuZXh0IFRJTUVUWVBFOwogICAgICAgIH0KCiAgICAgICAgbXkgJFRpdGxlICAgICAgICAgICAgICAgICAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkVGltZVR5cGUtPntUaXRsZX0gKTsKICAgICAgICBteSAkQmVmb3JlQWZ0ZXJUcmFuc2xhdGFibGUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJyhiZWZvcmUvYWZ0ZXIpJyk7CiAgICAgICAgbXkgJEJldHdlZW5UcmFuc2xhdGFibGUgICAgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCcoYmV0d2VlbiknKTsKICAgICAgICBwdXNoIEBBdHRyaWJ1dGVzLCAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICRQcmVmaXggLiAnVGltZVBvaW50RmllbGQnLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFRpdGxlIC4gIiAkQmVmb3JlQWZ0ZXJUcmFuc2xhdGFibGUiLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAkUHJlZml4IC4gJ1RpbWVTbG90RmllbGQnLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFRpdGxlIC4gIiAkQmV0d2VlblRyYW5zbGF0YWJsZSIsCiAgICAgICAgICAgIH0sCgogICAgICAgICk7CiAgICB9CgogICAgJFBhcmFte0F0dHJpYnV0ZXNTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgID0+IFxAQXR0cmlidXRlcywKICAgICAgICBOYW1lICAgICA9PiAnQXR0cmlidXRlJywKICAgICAgICBNdWx0aXBsZSA9PiAwLAogICAgICAgIENsYXNzICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKICAgICRQYXJhbXtBdHRyaWJ1dGVzT3JpZ1N0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgPT4gXEBBdHRyaWJ1dGVzLAogICAgICAgIE5hbWUgICAgID0+ICdBdHRyaWJ1dGVPcmlnJywKICAgICAgICBNdWx0aXBsZSA9PiAwLAogICAgICAgIENsYXNzICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIEdldCBhIGNvbXBsZXRlIGxpc3Qgb2YgdXNlcnMKICAgICMgZm9yIHRoZSBzZWxlY3Rpb24gJ0NoYW5nZUJ1aWxkZXInLCAnQ2hhbmdlTWFuYWdlcicgYW5kICdjcmVhdGVkIGJ5IHVzZXInLgogICAgIyBJdCBpcyBpbXBvcnRhbnQgdG8gYWxzbyBzZWFyY2ggZm9yIGludmFsaWQgYWdlbnRzLCBhcyB3ZSB3YW50IHRvIGZpbmQKICAgICMgdGhlc2UgY2hhbmdlcyB0b28uCiAgICAjIE91dCBvZiBvZmZpY2UgbmljZSBtaWdodCBiZSBhcHBlbmRlZCB0byB0aGUgdmFsdWVzLgogICAgbXkgJVVzZXJzID0gJFVzZXJPYmplY3QtPlVzZXJMaXN0KAogICAgICAgIFR5cGUgID0+ICdMb25nJywKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICAjIGRyb3Bkb3duIG1lbnUgZm9yICdjcmVhdGVkIGJ5IHVzZXJzJwogICAgJFBhcmFteydDcmVhdGVCeVNlbGVjdGlvblN0cmluZyd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVVzZXJzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0NyZWF0ZUJ5JywKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0NyZWF0ZUJ5fSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGJ1aWxkIGNoYW5nZSBtYW5hZ2VyIGRyb3Bkb3duCiAgICAkUGFyYW17J0NoYW5nZU1hbmFnZXJTZWxlY3Rpb25TdHJpbmcnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXCVVc2VycywKICAgICAgICBOYW1lICAgICAgID0+ICdDaGFuZ2VNYW5hZ2VySURzJywKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0NoYW5nZU1hbmFnZXJJRHN9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgYnVpbGQgY2hhbmdlIGJ1aWxkZXIgZHJvcGRvd24KICAgICRQYXJhbXsnQ2hhbmdlQnVpbGRlclNlbGVjdGlvblN0cmluZyd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVVzZXJzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0NoYW5nZUJ1aWxkZXJJRHMnLAogICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICBTaXplICAgICAgID0+IDUsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17Q2hhbmdlQnVpbGRlcklEc30sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgIyBnZXQgcG9zc2libGUgQ2hhbmdlIENhdGVnb3JpZXMKICAgIG15ICRDYXRlZ29yaWVzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlUG9zc2libGVDSVBHZXQoCiAgICAgICAgVHlwZSAgID0+ICdDYXRlZ29yeScsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICAkUGFyYW17J0NoYW5nZUNhdGVnb3J5U2VsZWN0aW9uU3RyaW5nJ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+ICRDYXRlZ29yaWVzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ0NhdGVnb3J5SURzJywKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0NhdGVnb3J5SURzfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGdldCBwb3NzaWJsZSBDaGFuZ2UgSW1wYWN0cwogICAgbXkgJEltcGFjdHMgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VQb3NzaWJsZUNJUEdldCgKICAgICAgICBUeXBlICAgPT4gJ0ltcGFjdCcsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICAkUGFyYW17J0NoYW5nZUltcGFjdFNlbGVjdGlvblN0cmluZyd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiAkSW1wYWN0cywKICAgICAgICBOYW1lICAgICAgID0+ICdJbXBhY3RJRHMnLAogICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICBTaXplICAgICAgID0+IDUsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17SW1wYWN0SURzfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGdldCBwb3NzaWJsZSBDaGFuZ2UgUHJpb3JpdGllcwogICAgbXkgJFByaW9yaXRpZXMgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VQb3NzaWJsZUNJUEdldCgKICAgICAgICBUeXBlICAgPT4gJ1ByaW9yaXR5JywKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgICRQYXJhbXsnQ2hhbmdlUHJpb3JpdHlTZWxlY3Rpb25TdHJpbmcnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gJFByaW9yaXRpZXMsCiAgICAgICAgTmFtZSAgICAgICA9PiAnUHJpb3JpdHlJRHMnLAogICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICBTaXplICAgICAgID0+IDUsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17UHJpb3JpdHlJRHN9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgZ2V0IGNoYW5nZSBzdGF0ZXMKICAgIG15ICRDaGFuZ2VTdGF0ZXMgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VQb3NzaWJsZVN0YXRlc0dldCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgICRQYXJhbXsnQ2hhbmdlU3RhdGVTZWxlY3Rpb25TdHJpbmcnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gJENoYW5nZVN0YXRlcywKICAgICAgICBOYW1lICAgICAgID0+ICdDaGFuZ2VTdGF0ZUlEcycsCiAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgIFNpemUgICAgICAgPT4gNSwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtDaGFuZ2VTdGF0ZUlEc30sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBnZXQgd29ya29yZGVyIGFnZW50cwogICAgJFBhcmFteydXb3JrT3JkZXJBZ2VudElEU2VsZWN0aW9uU3RyaW5nJ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlVXNlcnMsCiAgICAgICAgTmFtZSAgICAgICA9PiAnV29ya09yZGVyQWdlbnRJRHMnLAogICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICBTaXplICAgICAgID0+IDUsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17V29ya09yZGVyQWdlbnRJRHN9LAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgZ2V0IHdvcmsgb3JkZXIgb2JqZWN0CiAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiAgICAjIGdldCB3b3Jrb3JkZXIgc3RhdGVzCiAgICBteSAkV29ya09yZGVyU3RhdGVzID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyUG9zc2libGVTdGF0ZXNHZXQoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgJFBhcmFteydXb3JrT3JkZXJTdGF0ZVNlbGVjdGlvblN0cmluZyd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiAkV29ya09yZGVyU3RhdGVzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1dvcmtPcmRlclN0YXRlSURzJywKICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgU2l6ZSAgICAgICA9PiA1LAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1dvcmtPcmRlclN0YXRlSURzfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGdldCB3b3Jrb3JkZXIgdHlwZXMKICAgIG15ICRXb3JrT3JkZXJUeXBlcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclR5cGVMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgICRQYXJhbXsnV29ya09yZGVyVHlwZVNlbGVjdGlvblN0cmluZyd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiAkV29ya09yZGVyVHlwZXMsCiAgICAgICAgTmFtZSAgICAgICA9PiAnV29ya09yZGVyVHlwZUlEcycsCiAgICAgICAgTXVsdGlwbGUgICA9PiAxLAogICAgICAgIFNpemUgICAgICAgPT4gNSwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtXb3JrT3JkZXJUeXBlSURzfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIHNldCByZXN1bHQgb3V0cHV0IGZvcm1hdHMKICAgICRQYXJhbXtSZXN1bHRGb3JtU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgTm9ybWFsID0+IFRyYW5zbGF0YWJsZSgnTm9ybWFsJyksCiAgICAgICAgICAgIFByaW50ICA9PiBUcmFuc2xhdGFibGUoJ1ByaW50JyksCiAgICAgICAgICAgIENTViAgICA9PiBUcmFuc2xhdGFibGUoJ0NTVicpLAogICAgICAgIH0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnUmVzdWx0Rm9ybScsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17UmVzdWx0Rm9ybX0gfHwgJ05vcm1hbCcsCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgbXkgJVByb2ZpbGVzID0gJFNlYXJjaFByb2ZpbGVPYmplY3QtPlNlYXJjaFByb2ZpbGVMaXN0KAogICAgICAgIEJhc2UgICAgICA9PiAnSVRTTUNoYW5nZVNlYXJjaCcsCiAgICAgICAgVXNlckxvZ2luID0+ICRTZWxmLT57VXNlckxvZ2lufSwKICAgICk7CiAgICBkZWxldGUgJFByb2ZpbGVzeycnfTsKICAgIGRlbGV0ZSAkUHJvZmlsZXN7J2xhc3Qtc2VhcmNoJ307CiAgICBpZiAoJEVtcHR5U2VhcmNoKSB7CiAgICAgICAgJFByb2ZpbGVzeycnfSA9ICctJzsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRQcm9maWxlc3snbGFzdC1zZWFyY2gnfSA9ICctJzsKICAgIH0KICAgICRQYXJhbXtQcm9maWxlc1N0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUHJvZmlsZXMsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdQcm9maWxlJywKICAgICAgICBJRCAgICAgICAgICAgPT4gJ1NlYXJjaFByb2ZpbGUnLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUHJvZmlsZSwKICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICApOwoKICAgICMgaHRtbCBzZWFyY2ggbWFzayBvdXRwdXQKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1NlYXJjaEFKQVgnLAogICAgICAgIERhdGEgPT4geyAlUGFyYW0sIH0sICAgICMlR2V0UGFyYW0gfSwKICAgICk7CgogICAgIyBudW1iZXIgb2YgbWludXRlcywgZGF5cywgd2Vla3MsIG1vbnRocyBhbmQgeWVhcnMKICAgIG15ICVPbmVUb0ZpZnR5TmluZSA9IG1hcCB7ICRfID0+IHNwcmludGYgJyUycycsICRfIH0gKCAxIC4uIDU5ICk7CgogICAgIyB0aW1lIHBlcmlvZCB0aGF0IGNhbiBiZSBzZWxlY3RlZCBmcm9tIHRoZSBHVUkKICAgIG15ICVUaW1lUGVyaW9kID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNV29ya09yZGVyOjpUaW1lUGVyaW9kJykgfTsKCiAgICBUSU1FVFlQRToKICAgIGZvciBteSAkVGltZVR5cGUgKEBUaW1lVHlwZXMpIHsKICAgICAgICBteSAkUHJlZml4ID0gJFRpbWVUeXBlLT57UHJlZml4fTsKCiAgICAgICAgIyBzaG93IFJlcXVlc3RlZFRpbWUgb25seSB3aGVuIGVuYWJsZWQgaW4gU3lzQ29uZmlnCiAgICAgICAgaWYgKCAkUHJlZml4IGVxICdSZXF1ZXN0ZWQnICYmICEkU2VsZi0+e0NvbmZpZ30tPntSZXF1ZXN0ZWRUaW1lfSApIHsKICAgICAgICAgICAgbmV4dCBUSU1FVFlQRTsKICAgICAgICB9CgogICAgICAgIG15ICRUaXRsZSAgICAgICAgICAgICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJFRpbWVUeXBlLT57VGl0bGV9ICk7CiAgICAgICAgbXkgJVRpbWVTZWxlY3Rpb25EYXRhID0gKAogICAgICAgICAgICBQcmVmaXggPT4gJFByZWZpeCwKICAgICAgICAgICAgVGl0bGUgID0+ICRUaXRsZSwKICAgICAgICApOwoKICAgICAgICAkVGltZVNlbGVjdGlvbkRhdGF7VGltZVBvaW50fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgID0+IFwlT25lVG9GaWZ0eU5pbmUsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFByZWZpeCAuICdUaW1lUG9pbnQnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXsgJFByZWZpeCAuICdUaW1lUG9pbnQnIH0sCiAgICAgICAgKTsKCiAgICAgICAgJFRpbWVTZWxlY3Rpb25EYXRhe1RpbWVQb2ludFN0YXJ0fSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICdMYXN0JyAgID0+IFRyYW5zbGF0YWJsZSgnbGFzdCcpLAogICAgICAgICAgICAgICAgJ0JlZm9yZScgPT4gVHJhbnNsYXRhYmxlKCdiZWZvcmUnKSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkUHJlZml4IC4gJ1RpbWVQb2ludFN0YXJ0JywKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17ICRQcmVmaXggLiAnVGltZVBvaW50U3RhcnQnIH0gfHwgJ0xhc3QnLAogICAgICAgICk7CgogICAgICAgICRUaW1lU2VsZWN0aW9uRGF0YXtUaW1lUG9pbnRGb3JtYXR9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgbWludXRlID0+IFRyYW5zbGF0YWJsZSgnbWludXRlKHMpJyksCiAgICAgICAgICAgICAgICBob3VyICAgPT4gVHJhbnNsYXRhYmxlKCdob3VyKHMpJyksCiAgICAgICAgICAgICAgICBkYXkgICAgPT4gVHJhbnNsYXRhYmxlKCdkYXkocyknKSwKICAgICAgICAgICAgICAgIHdlZWsgICA9PiBUcmFuc2xhdGFibGUoJ3dlZWsocyknKSwKICAgICAgICAgICAgICAgIG1vbnRoICA9PiBUcmFuc2xhdGFibGUoJ21vbnRoKHMpJyksCiAgICAgICAgICAgICAgICB5ZWFyICAgPT4gVHJhbnNsYXRhYmxlKCd5ZWFyKHMpJyksCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFByZWZpeCAuICdUaW1lUG9pbnRGb3JtYXQnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXsgJFByZWZpeCAuICdUaW1lUG9pbnRGb3JtYXQnIH0sCiAgICAgICAgKTsKCiAgICAgICAgJFRpbWVTZWxlY3Rpb25EYXRhe1RpbWVTdGFydH0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJVRpbWVQZXJpb2QsCiAgICAgICAgICAgIFByZWZpeCAgID0+ICRQcmVmaXggLiAnVGltZVN0YXJ0JywKICAgICAgICAgICAgRm9ybWF0ICAgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsCiAgICAgICAgICAgIFZhbGlkYXRlID0+IDEsCiAgICAgICAgICAgIERpZmZUaW1lID0+IC0oICggNjAgKiA2MCAqIDI0ICkgKiAzMCApLAogICAgICAgICk7CgogICAgICAgICRUaW1lU2VsZWN0aW9uRGF0YXtUaW1lU3RvcH0gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJVRpbWVQZXJpb2QsCiAgICAgICAgICAgIFByZWZpeCA9PiAkUHJlZml4IC4gJ1RpbWVTdG9wJywKICAgICAgICAgICAgRm9ybWF0ID0+ICdEYXRlSW5wdXRGb3JtYXQnLAogICAgICAgICk7CgogICAgICAgICMgc2hvdyB0aW1lIGZpZWxkCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RpbWVTZWxlY3Rpb24nLAogICAgICAgICAgICBEYXRhID0+IFwlVGltZVNlbGVjdGlvbkRhdGEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG91dHB1dCBEeW5hbWljIGZpZWxkcyBibG9ja3MKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoCiAgICAgICAgQHsgJFNlbGYtPntEeW5hbWljRmllbGRDaGFuZ2V9IH0sCiAgICAgICAgQHsgJFNlbGYtPntEeW5hbWljRmllbGRXb3JrT3JkZXJ9IH0KICAgICAgICApCiAgICB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBzZWFyY2ggZmllbGQgcHJlZmVyZW5jZXMKICAgICAgICBteSAkU2VhcmNoRmllbGRQcmVmZXJlbmNlcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TZWFyY2hGaWVsZFByZWZlcmVuY2VzKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICApOwoKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCRTZWFyY2hGaWVsZFByZWZlcmVuY2VzKTsKCiAgICAgICAgUFJFRkVSRU5DRToKICAgICAgICBmb3IgbXkgJFByZWZlcmVuY2UgKCBAeyRTZWFyY2hGaWVsZFByZWZlcmVuY2VzfSApIHsKCiAgICAgICAgICAgICMgc2tpcCBmaWVsZHMgdGhhdCBIVE1MIGNvdWxkIG5vdCBiZSByZXRyaWV2ZWQKICAgICAgICAgICAgbmV4dCBQUkVGRVJFTkNFIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRIVE1MeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gLiAkUHJlZmVyZW5jZS0+e1R5cGV9IH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIExhYmVsID0+CiAgICAgICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRIVE1MeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gLiAkUHJlZmVyZW5jZS0+e1R5cGV9IH0KICAgICAgICAgICAgICAgICAgICAgICAgLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgIEZpZWxkID0+CiAgICAgICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRIVE1MeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gLiAkUHJlZmVyZW5jZS0+e1R5cGV9IH0KICAgICAgICAgICAgICAgICAgICAgICAgLT57RmllbGR9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBzaG93IGF0dHJpYnV0ZXMKICAgIG15ICVBbHJlYWR5U2hvd247CiAgICBJVEVNOgogICAgZm9yIG15ICRJdGVtIChAQXR0cmlidXRlcykgewogICAgICAgIG15ICRLZXkgPSAkSXRlbS0+e0tleX07CiAgICAgICAgbmV4dCBJVEVNIGlmICEkS2V5OwogICAgICAgIG5leHQgSVRFTSBpZiAhZGVmaW5lZCAkUGFyYW17JEtleX07CiAgICAgICAgbmV4dCBJVEVNIGlmICRQYXJhbXskS2V5fSBlcSAnJzsKICAgICAgICBuZXh0IElURU0gaWYgJEFscmVhZHlTaG93bnskS2V5fTsKICAgICAgICBpZiAoIHJlZiAkUGFyYW17JEtleX0gZXEgJ0FSUkFZJyAmJiAhQHsgJFBhcmFteyRLZXl9IH0gKSB7CiAgICAgICAgICAgIG5leHQgSVRFTTsKICAgICAgICB9CiAgICAgICAgJEFscmVhZHlTaG93bnskS2V5fSA9IDE7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTZWFyY2hBSkFYU2hvdycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgQXR0cmlidXRlID0+ICRLZXksCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGlmIG5vIGF0dHJpYnV0ZSBpcyBzaG93biwgc2hvdyBjaGFuZ2UgbnVtYmVyCiAgICBpZiAoICEkUHJvZmlsZSApIHsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NlYXJjaEFKQVhTaG93JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBBdHRyaWJ1dGUgPT4gJ0NoYW5nZU51bWJlcicsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGJ1aWxkIG91dHB1dAogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNoYW5nZVNlYXJjaCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VUZW1wbGF0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGdldCBuZWVkZWQgQ2hhbmdlSUQKICAgIG15ICRDaGFuZ2VJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDaGFuZ2VJRCcgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJENoYW5nZUlEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIENoYW5nZUlEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJENoYW5nZU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMhJywgJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0gKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNoYW5nZSBkYXRhCiAgICBteSAkQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZXJyb3Igc2NyZWVuCiAgICBpZiAoICEkQ2hhbmdlICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdObyBjaGFuZ2UgZm91bmQgZm9yIGNoYW5nZUlEICVzLicsICRDaGFuZ2VJRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHN0b3JlIG5lZWRlZCBwYXJhbWV0ZXJzIGluICVHZXRQYXJhbSB0byBtYWtlIGl0IHJlbG9hZGFibGUKICAgIG15ICVHZXRQYXJhbTsKICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhUZW1wbGF0ZU5hbWUgQ29tbWVudCBWYWxpZElEIFN0YXRlUmVzZXQgT3ZlcndyaXRlVGVtcGxhdGUgRGVsZXRlQ2hhbmdlICkpCiAgICB7CiAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwogICAgfQoKICAgICMgZ2V0IHVzZXIgb2JqZWN0CiAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgIyBnZXQgZXhpc3RpbmcgdXNlciBwcmVmZXJlbmNlcwogICAgbXkgJVVzZXJQcmVmZXJlbmNlcyA9ICRVc2VyT2JqZWN0LT5HZXRQcmVmZXJlbmNlcygKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBwcmVmZXJlbmNlIHRvIHNlZSB3aGljaCB0ZW1wbGF0ZXMgYXJlIGluIGVkaXQgYnkgdGhlIHVzZXIKICAgIG15ICRUZW1wbGF0ZUVkaXRQcmVmZXJlbmNlU3RyaW5nID0gJFVzZXJQcmVmZXJlbmNlc3tVc2VySVRTTUNoYW5nZU1hbmFnZW1lbnRUZW1wbGF0ZUVkaXR9IHx8ICcnOwoKICAgICMgY29udmVydCB0byBsb29rdXAgaGFzaAogICAgbXkgQEVkaXRlZFRlbXBsYXRlcyA9IHNwbGl0IG0vOy8sICRUZW1wbGF0ZUVkaXRQcmVmZXJlbmNlU3RyaW5nOwogICAgbXkgJU9iamVjdDJUZW1wbGF0ZTsKICAgIGZvciBteSAkU3RyaW5nIChARWRpdGVkVGVtcGxhdGVzKSB7CiAgICAgICAgbXkgKCAkT2JqZWN0LCAkVGVtcGxhdGUgKSA9IHNwbGl0IG0vOjovLCAkU3RyaW5nOwogICAgICAgICRPYmplY3QyVGVtcGxhdGV7JE9iamVjdH0gPSAkVGVtcGxhdGU7CiAgICB9CgogICAgIyBnZXQgdGVtcGxhdGUgaWQgZnJvbSB1c2VyIHByZWZlcmVuY2VzCiAgICBteSAkVGVtcGxhdGVJRCA9ICRPYmplY3QyVGVtcGxhdGV7ICdDaGFuZ2VJRCcgLiAkQ2hhbmdlSUQgfTsKCiAgICAjIGdldCB0ZW1wbGF0ZSBvYmplY3QKICAgIG15ICRUZW1wbGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpUZW1wbGF0ZScpOwoKICAgICMgY2hlY2sgaWYgdGhpcyBjaGFuZ2Ugd2FzIGNyZWF0ZWQgYnkgdGhpcyB1c2VyIHVzaW5nIGEgdGVtcGxhdGUKICAgIGlmICgkVGVtcGxhdGVJRCkgewoKICAgICAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICAgICAgbXkgJFRlbXBsYXRlRGF0YSA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVHZXQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoJFRlbXBsYXRlRGF0YSkgewoKICAgICAgICAgICAgIyBvdmVyd3JpdGUgZW1wdHkgdmFsdWVzIHdpdGggdGVtcGxhdGUgZGF0YQogICAgICAgICAgICAkR2V0UGFyYW17VGVtcGxhdGVOYW1lfSB8fD0gJFRlbXBsYXRlRGF0YS0+e05hbWV9OwogICAgICAgICAgICAkR2V0UGFyYW17Q29tbWVudH0gICAgICB8fD0gJFRlbXBsYXRlRGF0YS0+e0NvbW1lbnR9OwogICAgICAgICAgICAkR2V0UGFyYW17VmFsaWRJRH0gICAgICB8fD0gJFRlbXBsYXRlRGF0YS0+e1ZhbGlkSUR9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFRlbXBsYXRlSUQgPSAnJzsKICAgICAgICB9CiAgICB9CgogICAgIyBDaGVjayByZXF1aXJlZCBmaWVsZHMgdG8gbG9vayBmb3IgZXJyb3JzLgogICAgbXkgJUVycm9yOwoKICAgICMgYWRkIGEgdGVtcGxhdGUKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGRUZW1wbGF0ZScgKSB7CgogICAgICAgICMgY2hlY2sgdmFsaWRpdHkgb2YgdGhlIHRlbXBsYXRlIG5hbWUKICAgICAgICBpZiAoICEkR2V0UGFyYW17VGVtcGxhdGVOYW1lfSApIHsKICAgICAgICAgICAgJEVycm9yeydUZW1wbGF0ZU5hbWVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAhJUVycm9yICkgewoKICAgICAgICAgICAgIyBzZXJpYWxpemUgdGhlIGNoYW5nZQogICAgICAgICAgICBteSAkVGVtcGxhdGVDb250ZW50ID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZVNlcmlhbGl6ZSgKICAgICAgICAgICAgICAgIFRlbXBsYXRlVHlwZSA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgICAgICAgICBTdGF0ZVJlc2V0ICAgPT4gJEdldFBhcmFte1N0YXRlUmVzZXR9IHx8IDAsCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlCiAgICAgICAgICAgIGlmICggISRUZW1wbGF0ZUNvbnRlbnQgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9CiAgICAgICAgICAgICAgICAgICAgICAgIC0+VHJhbnNsYXRlKCAnVGhlIGNoYW5nZSAiJXMiIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkLicsICRDaGFuZ2VJRCApLAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaWYgdGhpcyBjaGFuZ2Ugd2FzIGNyZWF0ZWQgZnJvbSBhIHRlbXBsYXRlIGFuZCBzaG91bGQgYmUgc2F2ZWQgYmFjawogICAgICAgICAgICBpZiAoICRUZW1wbGF0ZUlEICYmICRHZXRQYXJhbXtPdmVyd3JpdGVUZW1wbGF0ZX0gKSB7CgogICAgICAgICAgICAgICAgbXkgJFVwZGF0ZVN1Y2Nlc3MgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlVXBkYXRlKAogICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkR2V0UGFyYW17VGVtcGxhdGVOYW1lfSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ICAgID0+ICRHZXRQYXJhbXtDb21tZW50fSwKICAgICAgICAgICAgICAgICAgICBWYWxpZElEICAgID0+ICRHZXRQYXJhbXtWYWxpZElEfSwKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgID0+ICRUZW1wbGF0ZUNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlCiAgICAgICAgICAgICAgICBpZiAoICEkVXBkYXRlU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLT5UcmFuc2xhdGUoICdDb3VsZCBub3QgdXBkYXRlIHRoZSB0ZW1wbGF0ZSAiJXMiLicsICRUZW1wbGF0ZUlEICksCiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIyBzdG9yZSB0aGUgc2VyaWFsaXplZCBjaGFuZ2UgYXMgYSBuZXcgdGVtcGxhdGUKICAgICAgICAgICAgICAgICRUZW1wbGF0ZUlEID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZUFkZCgKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJEdldFBhcmFte1RlbXBsYXRlTmFtZX0sCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCAgICAgID0+ICRHZXRQYXJhbXtDb21tZW50fSwKICAgICAgICAgICAgICAgICAgICBWYWxpZElEICAgICAgPT4gJEdldFBhcmFte1ZhbGlkSUR9LAogICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlVHlwZSA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgID0+ICRUZW1wbGF0ZUNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgICAgIGlmICggISRUZW1wbGF0ZUlEICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0NvdWxkIG5vdCBhZGQgdGhlIHRlbXBsYXRlLicpLAogICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBkZWZpbmUgcmVkaXJlY3QgVVJMCiAgICAgICAgICAgIG15ICRSZWRpcmVjdFVSTCA9ICJBY3Rpb249QWdlbnRJVFNNQ2hhbmdlWm9vbTtDaGFuZ2VJRD0kQ2hhbmdlSUQiOwoKICAgICAgICAgICAgIyBpZiB0aGUgb3JpZ2luYWwgY2hhbmdlIHNob3VsZCBiZSBkZWxldGVkCiAgICAgICAgICAgIGlmICggJEdldFBhcmFte0RlbGV0ZUNoYW5nZX0gKSB7CgogICAgICAgICAgICAgICAgIyBkZWxldGUgdGhlIGNoYW5nZQogICAgICAgICAgICAgICAgbXkgJERlbGV0ZVN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgICAgIGlmICggISREZWxldGVTdWNjZXNzICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnQ291bGQgbm90IGRlbGV0ZSBjaGFuZ2UgIiVzIi4nLCAkQ2hhbmdlSUQgKSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBkZWxldGUgdGhlIHVzZXIgcHJlZmVyZW5jZSBlbnRyeQogICAgICAgICAgICAgICAgZGVsZXRlICRPYmplY3QyVGVtcGxhdGV7ICdDaGFuZ2VJRCcgLiAkQ2hhbmdlSUQgfTsKCiAgICAgICAgICAgICAgICAjIHJlZGlyZWN0IHRvIHRlbXBsYXRlIG92ZXJ2aWV3CiAgICAgICAgICAgICAgICAkUmVkaXJlY3RVUkwgPSAnQWN0aW9uPUFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHVwZGF0ZSB0aGUgdXNlciBwcmVmZXJlbmNlIHdpdGggdGhlIG5ldyB0ZW1wbGF0ZSBpZAogICAgICAgICAgICBlbHNpZiAoICRPYmplY3QyVGVtcGxhdGV7ICdDaGFuZ2VJRCcgLiAkQ2hhbmdlSUQgfSApIHsKICAgICAgICAgICAgICAgICRPYmplY3QyVGVtcGxhdGV7ICdDaGFuZ2VJRCcgLiAkQ2hhbmdlSUQgfSA9ICRUZW1wbGF0ZUlEOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNvbnZlcnQgdG8gc3RyaW5nCiAgICAgICAgICAgICRUZW1wbGF0ZUVkaXRQcmVmZXJlbmNlU3RyaW5nID0gJyc7CiAgICAgICAgICAgIGZvciBteSAkT2JqZWN0ICggc29ydCBrZXlzICVPYmplY3QyVGVtcGxhdGUgKSB7CiAgICAgICAgICAgICAgICAkVGVtcGxhdGVFZGl0UHJlZmVyZW5jZVN0cmluZyAuPSAkT2JqZWN0IC4gJzo6JyAuICRPYmplY3QyVGVtcGxhdGV7JE9iamVjdH0gLiAnOyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2F2ZSBwcmVmZXJlbmNlcwogICAgICAgICAgICAkVXNlck9iamVjdC0+U2V0UHJlZmVyZW5jZXMoCiAgICAgICAgICAgICAgICBLZXkgICAgPT4gJ1VzZXJJVFNNQ2hhbmdlTWFuYWdlbWVudFRlbXBsYXRlRWRpdCcsCiAgICAgICAgICAgICAgICBWYWx1ZSAgPT4gJFRlbXBsYXRlRWRpdFByZWZlcmVuY2VTdHJpbmcsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBsb2FkIG5ldyBVUkwgaW4gcGFyZW50IHdpbmRvdyBhbmQgY2xvc2UgcG9wdXAKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlBvcHVwQ2xvc2UoCiAgICAgICAgICAgICAgICBVUkwgPT4gJFJlZGlyZWN0VVJMLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgVHlwZSAgPT4gJ1NtYWxsJywKICAgICAgICBUaXRsZSA9PiBUcmFuc2xhdGFibGUoJ1RlbXBsYXRlJyksCiAgICApOwoKICAgICMgZ2V0IHZhbGlkIG9iamVjdAogICAgbXkgJFZhbGlkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyk7CgogICAgIyBidWlsZCB2YWxpZCBzZWxlY3Rpb24KICAgIG15ICRWYWxpZFNlbGVjdGlvblN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAkVmFsaWRPYmplY3QtPlZhbGlkTGlzdCgpLAogICAgICAgIH0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnVmFsaWRJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17VmFsaWRJRH0gfHwgKCAkVmFsaWRPYmplY3QtPlZhbGlkSURzR2V0KCkgKVswXSwKICAgICAgICBTb3J0ICAgICAgID0+ICdOdW1lcmljS2V5JywKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGJ1aWxkIHNlbGVjdGlvbiBzdHJpbmcgZm9yIHN0YXRlIHJlc2V0CiAgICBteSAkU3RhdGVSZXNldFNlbGVjdGlvblN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAwID0+IFRyYW5zbGF0YWJsZSgnTm8nKSwKICAgICAgICAgICAgMSA9PiBUcmFuc2xhdGFibGUoJ1llcycpLAogICAgICAgIH0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnU3RhdGVSZXNldCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17U3RhdGVSZXNldH0gLy8gMSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIHNob3cgZHJvcGRvd25zIG9ubHkgaWYgdGhpcyBjaGFuZ2Ugd2FzIGNyZWF0ZWQgZnJvbSBhIHRlbXBsYXRlCiAgICBpZiAoJFRlbXBsYXRlSUQpIHsKCiAgICAgICAgIyBidWlsZCBzZWxlY3Rpb24gc3RyaW5nIGZvciB0ZW1wbGF0ZSBvdmVyd3JpdGUsIGRlZmF1bHQgaXMgeWVzCiAgICAgICAgbXkgJE92ZXJ3cml0ZVRlbXBsYXRlU2VsZWN0aW9uU3RyaW5nID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgMCA9PiBUcmFuc2xhdGFibGUoJ05vJyksCiAgICAgICAgICAgICAgICAxID0+IFRyYW5zbGF0YWJsZSgnWWVzJyksCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ092ZXJ3cml0ZVRlbXBsYXRlJywKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17T3ZlcndyaXRlVGVtcGxhdGV9IC8vIDEsCiAgICAgICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IG92ZXJ3cml0ZSBvcmlnaW5hbCB0ZW1wbGF0ZSBkcm9wZG93bgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVyd3JpdGVUZW1wbGF0ZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgT3ZlcndyaXRlVGVtcGxhdGVTZWxlY3Rpb25TdHJpbmcgPT4gJE92ZXJ3cml0ZVRlbXBsYXRlU2VsZWN0aW9uU3RyaW5nLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgc2VsZWN0aW9uIHN0cmluZyBmb3IgZGVsZXRlIGNoYW5nZQogICAgICAgIG15ICREZWxldGVDaGFuZ2VTZWxlY3Rpb25TdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAwID0+IFRyYW5zbGF0YWJsZSgnTm8nKSwKICAgICAgICAgICAgICAgIDEgPT4gVHJhbnNsYXRhYmxlKCdZZXMnKSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnRGVsZXRlQ2hhbmdlJywKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17RGVsZXRlQ2hhbmdlfSAvLyAxLAogICAgICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBkZWxldGUgY2hhbmdlIGRyb3Bkb3duCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0RlbGV0ZUNoYW5nZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgRGVsZXRlQ2hhbmdlU2VsZWN0aW9uU3RyaW5nID0+ICREZWxldGVDaGFuZ2VTZWxlY3Rpb25TdHJpbmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudElUU01DaGFuZ2VUZW1wbGF0ZScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgICAgICAgICAgICAgID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVmFsaWRTZWxlY3Rpb25TdHJpbmcgICAgICA9PiAkVmFsaWRTZWxlY3Rpb25TdHJpbmcsCiAgICAgICAgICAgIFN0YXRlUmVzZXRTZWxlY3Rpb25TdHJpbmcgPT4gJFN0YXRlUmVzZXRTZWxlY3Rpb25TdHJpbmcsCiAgICAgICAgICAgIENoYW5nZU51bWJlciAgICAgICAgICAgICAgPT4gJENoYW5nZS0+e0NoYW5nZU51bWJlcn0sCiAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICAgICAgICAgICAgPT4gJENoYW5nZS0+e0NoYW5nZVRpdGxlfSwKICAgICAgICAgICAgJUVycm9yLAogICAgICAgIH0sCiAgICApOwoKICAgICMgYWRkIGZvb3RlcgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2VUaW1lU2xvdDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2V0IG5lZWRlZCBDaGFuZ2VJRAogICAgbXkgJENoYW5nZUlEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0NoYW5nZUlEJyApOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkQ2hhbmdlSUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gQ2hhbmdlSUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRDb25maWdPYmplY3QtPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGVycm9yIHNjcmVlbgogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyEnLCAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSApLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY2hhbmdlIGRhdGEKICAgIG15ICRDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBpZiBjaGFuZ2UgaXMgZm91bmQKICAgIGlmICggISRDaGFuZ2UgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NoYW5nZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnLCAkQ2hhbmdlSUQgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBNb3ZpbmcgaXMgcG9zc2libGUgb25seSB3aGVuIHRoZXJlIGFyZSB3b3Jrb3JkZXJzLgogICAgaWYgKCAhJENoYW5nZS0+e1dvcmtPcmRlckNvdW50fSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdUaGUgY2hhbmdlIGNhblwndCBiZSBtb3ZlZCwgYXMgaXQgaGFzIG5vIHdvcmtvcmRlcnMuJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdBZGQgYSB3b3Jrb3JkZXIgZmlyc3QuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIE1vdmluZyBpcyBhbGxvd2VkIG9ubHkgd2hlbiB0aGVyZSB0aGUgY2hhbmdlIGhhcyBub3Qgc3RhcnRlZCB5ZXQuCiAgICBpZiAoICRDaGFuZ2UtPntBY3R1YWxTdGFydFRpbWV9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0NhblwndCBtb3ZlIGEgY2hhbmdlIHdoaWNoIGFscmVhZHkgaGFzIHN0YXJ0ZWQhJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgbW92ZSB0aGUgaW5kaXZpZHVhbCB3b3Jrb3JkZXJzIGluc3RlYWQuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHN0b3JlIG5lZWRlZCBwYXJhbWV0ZXJzIGluICVHZXRQYXJhbSB0byBtYWtlIGl0IHJlbG9hZGFibGUKICAgIG15ICVHZXRQYXJhbTsKICAgICRHZXRQYXJhbXtNb3ZlVGltZVR5cGV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSgKICAgICAgICBQYXJhbSA9PiAnTW92ZVRpbWVUeXBlJywKICAgICkgfHwgJ1BsYW5uZWRTdGFydFRpbWUnOwoKICAgICMgc3RvcmUgdGltZSByZWxhdGVkIGZpZWxkcyBpbiAlR2V0UGFyYW0KICAgIGZvciBteSAkVGltZVBhcnQgKHF3KFllYXIgTW9udGggRGF5IEhvdXIgTWludXRlKSkgewogICAgICAgIG15ICRQYXJhbU5hbWUgPSAnTW92ZVRpbWUnIC4gJFRpbWVQYXJ0OwogICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oCiAgICAgICAgICAgIFBhcmFtID0+ICRQYXJhbU5hbWUsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIFJlbWVtYmVyIHRoZSByZWFzb24gd2h5IHNhdmluZyB3YXMgbm90IGF0dGVtcHRlZC4KICAgIG15ICVWYWxpZGF0aW9uRXJyb3JzOwoKICAgICMgZ2V0IHRpbWUgb2JqZWN0CiAgICBteSAkVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyk7CgogICAgIyBtb3ZlIHRpbWUgc2xvdCBvZiBjaGFuZ2UKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdNb3ZlVGltZVNsb3QnICkgewoKICAgICAgICAjIGNoZWNrIHZhbGlkaXR5IG9mIHRoZSB0aW1lIHR5cGUKICAgICAgICBteSAkTW92ZVRpbWVUeXBlID0gJEdldFBhcmFte01vdmVUaW1lVHlwZX07CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkTW92ZVRpbWVUeXBlICkKICAgICAgICB7CiAgICAgICAgICAgICRWYWxpZGF0aW9uRXJyb3Jze01vdmVUaW1lSW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgY2hlY2sgdGhlIGNvbXBsZXRlbmVzcyBvZiB0aGUgdGltZSBwYXJhbWV0ZXIgbGlzdCwKICAgICAgICAgICAgIyBvbmx5IGhvdXIgYW5kIG1pbnV0ZSBhcmUgYWxsb3dlZCB0byBiZSAnMCcKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgISRHZXRQYXJhbXtNb3ZlVGltZVllYXJ9CiAgICAgICAgICAgICAgICB8fCAhJEdldFBhcmFte01vdmVUaW1lTW9udGh9CiAgICAgICAgICAgICAgICB8fCAhJEdldFBhcmFte01vdmVUaW1lRGF5fQogICAgICAgICAgICAgICAgfHwgIWRlZmluZWQgJEdldFBhcmFte01vdmVUaW1lSG91cn0KICAgICAgICAgICAgICAgIHx8ICFkZWZpbmVkICRHZXRQYXJhbXtNb3ZlVGltZU1pbnV0ZX0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcnN7TW92ZVRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSBzeXN0ZW0gdGltZSBmcm9tIHRoZSBpbnB1dCwgaWYgaXQgY2FuJ3QgYmUgZGV0ZXJtaW5lZCB3ZSBoYXZlIGEgdmFsaWRhdGlvbiBlcnJvcgogICAgICAgIG15ICRQbGFubmVkU3lzdGVtVGltZTsKICAgICAgICBpZiAoICElVmFsaWRhdGlvbkVycm9ycyApIHsKCiAgICAgICAgICAgICMgdHJhbnNmb3JtIGNoYW5nZSBwbGFubmVkIHRpbWUsIHRpbWUgc3RhbXAgYmFzZWQgb24gdXNlciB0aW1lIHpvbmUKICAgICAgICAgICAgJUdldFBhcmFtID0gJExheW91dE9iamVjdC0+VHJhbnNmb3JtRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgIFByZWZpeCA9PiAnTW92ZVRpbWUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBmb3JtYXQgYXMgdGltZXN0YW1wCiAgICAgICAgICAgIG15ICRQbGFubmVkVGltZSA9IHNwcmludGYgJyUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDowMCcsCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17TW92ZVRpbWVZZWFyfSwKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtNb3ZlVGltZU1vbnRofSwKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtNb3ZlVGltZURheX0sCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17TW92ZVRpbWVIb3VyfSwKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtNb3ZlVGltZU1pbnV0ZX07CgogICAgICAgICAgICAjIHNhbml0eSBjaGVjayBvZiB0aGUgYXNzZW1ibGVkIHRpbWVzdGFtcAogICAgICAgICAgICAkUGxhbm5lZFN5c3RlbVRpbWUgPSAkVGltZU9iamVjdC0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFBsYW5uZWRUaW1lLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFBsYW5uZWRTeXN0ZW1UaW1lICkgewogICAgICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcnN7TW92ZVRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgbW92ZSB0aW1lIHNsb3Qgb25seSB3aGVuIHRoZXJlIGFyZSBubyB2YWxpZGF0aW9uIGVycm9ycwogICAgICAgIGlmICggISVWYWxpZGF0aW9uRXJyb3JzICkgewoKICAgICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRpZmZlcmVuY2UgaW4gc2Vjb25kcwogICAgICAgICAgICBteSAkQ3VycmVudFBsYW5uZWRUaW1lID0gJENoYW5nZS0+eyRNb3ZlVGltZVR5cGV9OwoKICAgICAgICAgICAgIyBFdmVuIHdoZW4gdGhlcmUgYXJlIHdvcmtvcmRlcnMsIGEgY2hhbmdlIG1pZ2h0IHN0aWxsIG1pc3MgYSBwbGFubmVkIHRpbWUuCiAgICAgICAgICAgICMgSW4gdGhhdCBjYXNlIG1vdmluZyB0aGUgdGltZSBzbG90IGlzIG5vdCBwb3NzaWJsZS4KICAgICAgICAgICAgaWYgKCAhJEN1cnJlbnRQbGFubmVkVGltZSApIHsKCiAgICAgICAgICAgICAgICAjIHNob3cgZXJyb3IgbWVzc2FnZQogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fQogICAgICAgICAgICAgICAgICAgICAgICAtPlRyYW5zbGF0ZSggJ1RoZSBjdXJyZW50ICVzIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkLicsICRNb3ZlVGltZVR5cGUgKSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0KICAgICAgICAgICAgICAgICAgICAgICAgLT5UcmFuc2xhdGUoICdUaGUgJXMgb2YgYWxsIHdvcmtvcmRlcnMgaGFzIHRvIGJlIGRlZmluZWQuJywgJE1vdmVUaW1lVHlwZSApLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJEN1cnJlbnRQbGFubmVkU3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkQ3VycmVudFBsYW5uZWRUaW1lLAogICAgICAgICAgICApOwogICAgICAgICAgICBteSAkRGlmZlNlY29uZHMgPSAkUGxhbm5lZFN5c3RlbVRpbWUgLSAkQ3VycmVudFBsYW5uZWRTeXN0ZW1UaW1lOwoKICAgICAgICAgICAgbXkgJE1vdmVFcnJvciA9ICRTZWxmLT5fTW92ZVdvcmtPcmRlcnMoCiAgICAgICAgICAgICAgICBEaWZmU2Vjb25kcyAgPT4gJERpZmZTZWNvbmRzLAogICAgICAgICAgICAgICAgV29ya09yZGVySURzID0+ICRDaGFuZ2UtPntXb3JrT3JkZXJJRHN9LAogICAgICAgICAgICAgICAgQ2hhbmdlTnVtYmVyID0+ICRDaGFuZ2UtPntDaGFuZ2VOdW1iZXJ9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRNb3ZlRXJyb3IpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTW92ZUVycm9yOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGxvYWQgbmV3IFVSTCBpbiBwYXJlbnQgd2luZG93IGFuZCBjbG9zZSBwb3B1cAogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UG9wdXBDbG9zZSgKICAgICAgICAgICAgICAgIFVSTCA9PiAiQWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9JENoYW5nZUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQUpBWFVwZGF0ZScgKSB7CgogICAgICAgICMgZ2V0IHBsYW5uZWQgc3RhcnQgdGltZSBvciBwbGFubmVkIGVuZCB0aW1lIGZyb20gdGhlIGNoYW5nZQogICAgICAgIG15ICRTeXN0ZW1UaW1lID0gJFRpbWVPYmplY3QtPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgICAgICBTdHJpbmcgPT4gJENoYW5nZS0+eyAkR2V0UGFyYW17TW92ZVRpbWVUeXBlfSB9LAogICAgICAgICk7CgogICAgICAgICMgdGltZSB6b25lIHRyYW5zbGF0aW9uCiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpbWVab25lVXNlcicpICYmICRTZWxmLT57VXNlclRpbWVab25lfSApIHsKICAgICAgICAgICAgJFN5c3RlbVRpbWUgPSAkU3lzdGVtVGltZSArICggJFNlbGYtPntVc2VyVGltZVpvbmV9ICogMzYwMCApOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgdGhlIHBhcmFtZXRlciBoYXNoIGZvciB0aGUgYW5zd2VycwogICAgICAgICMgdGhlIHNlY29uZHMgYXJlIGlnbm9yZWQKICAgICAgICBteSAoICRTZWNvbmQsICRNaW51dGUsICRIb3VyLCAkRGF5LCAkTW9udGgsICRZZWFyICkgPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTeXN0ZW1UaW1lLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNvbmZpZyBmb3IgdGhlIG51bWJlciBvZiB5ZWFycyB3aGljaCBzaG91bGQgYmUgc2VsZWN0YWJsZQogICAgICAgIG15ICRUaW1lUGVyaW9kID0gJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNV29ya09yZGVyOjpUaW1lUGVyaW9kJyk7CiAgICAgICAgbXkgJFN0YXJ0WWVhciAgPSAkWWVhciAtICRUaW1lUGVyaW9kLT57WWVhclBlcmlvZFBhc3R9OwogICAgICAgIG15ICRFbmRZZWFyICAgID0gJFllYXIgKyAkVGltZVBlcmlvZC0+e1llYXJQZXJpb2RGdXR1cmV9OwoKICAgICAgICAjIGFzc2VtYmxlIHRoZSBkYXRhIHRoYXQgd2lsbCBiZSByZXR1cm5lZAogICAgICAgIG15ICRKU09OID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb25KU09OKAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTW92ZVRpbWVNaW51dGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgPT4gWyBtYXAgeyBzcHJpbnRmICclMDJkJywgJF8gfSAoIDAgLi4gNTkgKSBdLAogICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJE1pbnV0ZSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTW92ZVRpbWVIb3VyJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgID0+IFsgbWFwIHsgc3ByaW50ZiAnJTAyZCcsICRfIH0gKCAwIC4uIDIzICkgXSwKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEID0+ICRIb3VyLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdNb3ZlVGltZURheScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICA9PiB7IG1hcCB7ICRfID0+IHNwcmludGYgJyUwMmQnLCAkXyB9ICggMSAuLiAzMSApIH0sCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiBpbnQgJERheSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTW92ZVRpbWVNb250aCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICA9PiB7IG1hcCB7ICRfID0+IHNwcmludGYgJyUwMmQnLCAkXyB9ICggMSAuLiAxMiApIH0sCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiBpbnQgJE1vbnRoLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICdNb3ZlVGltZVllYXInLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgPT4gWyAkU3RhcnRZZWFyIC4uICRFbmRZZWFyIF0sCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17TW92ZVRpbWVZZWFyfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PScgLiAkTGF5b3V0T2JqZWN0LT57Q2hhcnNldH0sCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRKU09OLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgbm8gc3ViYWN0aW9uLAogICAgICAgICMgZ2V0IHBsYW5uZWQgc3RhcnQgdGltZSBvciBwbGFubmVkIGVuZCB0aW1lIGZyb20gdGhlIGNoYW5nZQogICAgICAgIG15ICRTeXN0ZW1UaW1lID0gJFRpbWVPYmplY3QtPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgICAgICBTdHJpbmcgPT4gJENoYW5nZS0+eyAkR2V0UGFyYW17TW92ZVRpbWVUeXBlfSB9LAogICAgICAgICk7CgogICAgICAgICMgc2V0IHRoZSBwYXJhbWV0ZXIgaGFzaCBmb3IgQnVpbGREYXRlU2VsZWN0aW9uKCkKICAgICAgICAjIHRoZSBzZWNvbmRzIGFyZSBpZ25vcmVkCiAgICAgICAgbXkgKCAkU2Vjb25kLCAkTWludXRlLCAkSG91ciwgJERheSwgJE1vbnRoLCAkWWVhciApID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU3lzdGVtVGltZSwKICAgICAgICApOwogICAgICAgICRHZXRQYXJhbXtNb3ZlVGltZU1pbnV0ZX0gPSAkTWludXRlOwogICAgICAgICRHZXRQYXJhbXtNb3ZlVGltZUhvdXJ9ICAgPSAkSG91cjsKICAgICAgICAkR2V0UGFyYW17TW92ZVRpbWVEYXl9ICAgID0gJERheTsKICAgICAgICAkR2V0UGFyYW17TW92ZVRpbWVNb250aH0gID0gJE1vbnRoOwogICAgICAgICRHZXRQYXJhbXtNb3ZlVGltZVllYXJ9ICAgPSAkWWVhcjsKICAgIH0KCiAgICAjIGJ1aWxkIGRyb3AtZG93biB3aXRoIHRpbWUgdHlwZXMKICAgIG15ICRNb3ZlVGltZVR5cGVTZWxlY3Rpb25TdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJ1BsYW5uZWRTdGFydFRpbWUnLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gVHJhbnNsYXRhYmxlKCdQbGFubmVkIFN0YXJ0IFRpbWUnKQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnUGxhbm5lZEVuZFRpbWUnLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gVHJhbnNsYXRhYmxlKCdQbGFubmVkIEVuZCBUaW1lJykKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgICAgIE5hbWUgICAgICAgPT4gJ01vdmVUaW1lVHlwZScsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17TW92ZVRpbWVUeXBlfSwKICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIHRpbWUgcGVyaW9kIHRoYXQgY2FuIGJlIHNlbGVjdGVkIGZyb20gdGhlIEdVSQogICAgbXkgJVRpbWVQZXJpb2QgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Xb3JrT3JkZXI6OlRpbWVQZXJpb2QnKSB9OwoKICAgICMgYWRkIHNlbGVjdGlvbiBmb3IgdGhlIHRpbWUKICAgIG15ICRNb3ZlVGltZVNlbGVjdGlvblN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgRm9ybWF0ICAgICAgICA9PiAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgUHJlZml4ICAgICAgICA9PiAnTW92ZVRpbWUnLAogICAgICAgIFZhbGlkYXRlICAgICAgPT4gMSwKICAgICAgICBNb3ZlVGltZUNsYXNzID0+ICRWYWxpZGF0aW9uRXJyb3Jze01vdmVUaW1lSW52YWxpZH0gfHwgJycsCiAgICAgICAgJVRpbWVQZXJpb2QsCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICBUaXRsZSA9PiBUcmFuc2xhdGFibGUoJ01vdmUgVGltZSBTbG90JyksCiAgICAgICAgVHlwZSAgPT4gJ1NtYWxsJywKICAgICk7CgogICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNQ2hhbmdlVGltZVNsb3QnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICV7JENoYW5nZX0sCiAgICAgICAgICAgICVWYWxpZGF0aW9uRXJyb3JzLAogICAgICAgICAgICBNb3ZlVGltZVR5cGVTZWxlY3Rpb25TdHJpbmcgPT4gJE1vdmVUaW1lVHlwZVNlbGVjdGlvblN0cmluZywKICAgICAgICAgICAgTW92ZVRpbWVTZWxlY3Rpb25TdHJpbmcgICAgID0+ICRNb3ZlVGltZVNlbGVjdGlvblN0cmluZywKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb290ZXIKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCBUeXBlID0+ICdTbWFsbCcgKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKIyB0aGUgYWN0dWFsIG1vdmluZyBpcyBkb25lIGhlcmUKc3ViIF9Nb3ZlV29ya09yZGVycyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15IEBDb2xsZWN0ZWRVcGRhdGVQYXJhbXM7ICAgICMgYW4gYXJyYXkgb2YgcGFyYW1zIGZvciBXb3JrT3JkZXJVcGRhdGUoKQogICAgbXkgJVdvcmtPcmRlcklEMk51bWJlcjsgICAgICAgIyB1c2VkIG9ubHkgZm9yIGVycm9yIG1lc3NhZ2VzCgogICAgIyBnZXQgd29yayBvcmRlciBvYmplY3QKICAgIG15ICRXb3JrT3JkZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpOwogICAgbXkgJExheW91dE9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGRldGVybWluZSB0aGUgbmV3IHRpbWVzCiAgICBXT1JLT1JERVJJRDoKICAgIGZvciBteSAkV29ya09yZGVySUQgKCBAeyAkUGFyYW17V29ya09yZGVySURzfSB9ICkgewogICAgICAgIG15ICRXb3JrT3JkZXIgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIG5leHQgV09SS09SREVSSUQgaWYgISRXb3JrT3JkZXI7CiAgICAgICAgbmV4dCBXT1JLT1JERVJJRCBpZiByZWYgJFdvcmtPcmRlciBuZSAnSEFTSCc7CiAgICAgICAgbmV4dCBXT1JLT1JERVJJRCBpZiAhJXskV29ya09yZGVyfTsKCiAgICAgICAgJFdvcmtPcmRlcklEMk51bWJlcnskV29ya09yZGVySUR9ID0gJFdvcmtPcmRlci0+e1dvcmtPcmRlck51bWJlcn07CiAgICAgICAgbXkgJVVwZGF0ZVBhcmFtczsKICAgICAgICBUWVBFOgogICAgICAgIGZvciBteSAkVHlwZSAocXcoUGxhbm5lZFN0YXJ0VGltZSBQbGFubmVkRW5kVGltZSkpIHsKCiAgICAgICAgICAgIG5leHQgVFlQRSBpZiAhJFdvcmtPcmRlci0+eyRUeXBlfTsKCiAgICAgICAgICAgICMgZ2V0IHRpbWUgb2JqZWN0CiAgICAgICAgICAgIG15ICRUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKTsKCiAgICAgICAgICAgIG15ICRTeXN0ZW1UaW1lID0gJFRpbWVPYmplY3QtPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICRXb3JrT3JkZXItPnskVHlwZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG5leHQgVFlQRSBpZiAhJFN5c3RlbVRpbWU7CgogICAgICAgICAgICAjIGFkZCB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdGhhdCB0aGUgdGltZSBzbG90IHNob3VsZCBiZSBtb3ZlZAogICAgICAgICAgICAkU3lzdGVtVGltZSArPSAkUGFyYW17RGlmZlNlY29uZHN9OwogICAgICAgICAgICAkVXBkYXRlUGFyYW1zeyRUeXBlfSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCgKICAgICAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBuZXh0IFdPUktPUkRFUklEIGlmICElVXBkYXRlUGFyYW1zOwoKICAgICAgICAjIHJlbWVtYmVyIHRoZSB3b3Jrb3JkZXIgdGhhdCBzaG91bGQgYmUgbW92ZWQKICAgICAgICAkVXBkYXRlUGFyYW1ze1dvcmtPcmRlcklEfSA9ICRXb3JrT3JkZXJJRDsKCiAgICAgICAgcHVzaCBAQ29sbGVjdGVkVXBkYXRlUGFyYW1zLCBcJVVwZGF0ZVBhcmFtczsKICAgIH0KCiAgICAjIGRvIHRoZSB1cGRhdGluZwogICAgVVBEQVRFUEFSQU1TOgogICAgZm9yIG15ICRVcGRhdGVQYXJhbXMgKEBDb2xsZWN0ZWRVcGRhdGVQYXJhbXMpIHsKCiAgICAgICAgIyBubyBudW1iZXIgY2FsY3VsYXRpb24gbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIHdvcmtvcmRlciBvcmRlciBkb2Vzbid0IGNoYW5nZQogICAgICAgIG15ICRVcGRhdGVPayA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclVwZGF0ZSgKICAgICAgICAgICAgJXskVXBkYXRlUGFyYW1zfSwKICAgICAgICAgICAgTm9OdW1iZXJDYWxjID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFVwZGF0ZU9rICkgewoKICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgbXkgJE51bWJlciA9IGpvaW4gJy0nLAogICAgICAgICAgICAgICAgJFBhcmFte0NoYW5nZU51bWJlcn0sCiAgICAgICAgICAgICAgICAkV29ya09yZGVySUQyTnVtYmVyeyAkVXBkYXRlUGFyYW1zLT57V29ya09yZGVySUR9IH07CgogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0KICAgICAgICAgICAgICAgICAgICAtPlRyYW5zbGF0ZSggJ1dhcyBub3QgYWJsZSB0byBtb3ZlIHRpbWUgc2xvdCBmb3Igd29ya29yZGVyICMlcyEnLCAkTnVtYmVyICksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgbW92aW5nIHdhcyBzdWNjZXNzZnVsCiAgICByZXR1cm47Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01DaGFuZ2Vab29tOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFBhcmFtT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkQ2hhbmdlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiQ2hhbmdlSUQiICk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRDaGFuZ2VJRCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBDaGFuZ2VJRCBpcyBnaXZlbiEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJENvbmZpZ09iamVjdC0+R2V0KCJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBjaGVjayBwZXJtaXNzaW9ucwogICAgbXkgJEFjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgVHlwZSAgICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgQWN0aW9uICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZXJyb3Igc2NyZWVuLCBkb24ndCBzaG93IGNoYW5nZSB6b29tCiAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIScsICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259ICksCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2UgZGF0YQogICAgbXkgJENoYW5nZSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUdldCgKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGVycm9yCiAgICBpZiAoICEkQ2hhbmdlICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJENoYW5nZUlEICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgY2xlYW4gdGhlIHJpY2ggdGV4dCBmaWVsZHMgZnJvbSBhY3RpdmUgSFRNTCBjb250ZW50CiAgICBBVFRSSUJVVEU6CiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoRGVzY3JpcHRpb24gSnVzdGlmaWNhdGlvbikpIHsKCiAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgISRDaGFuZ2UtPnskQXR0cmlidXRlfTsKCiAgICAgICAgIyByZW1vdmUgYWN0aXZlIGh0bWwgY29udGVudCAoc2NyaXB0cywgYXBwbGV0cywgZXRjLi4uKQogICAgICAgIG15ICVTYWZlQ29udGVudCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+U2FmZXR5KAogICAgICAgICAgICBTdHJpbmcgICAgICAgPT4gJENoYW5nZS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICBOb0FwcGxldCAgICAgPT4gMSwKICAgICAgICAgICAgTm9PYmplY3QgICAgID0+IDEsCiAgICAgICAgICAgIE5vRW1iZWQgICAgICA9PiAxLAogICAgICAgICAgICBOb0ludFNyY0xvYWQgPT4gMCwKICAgICAgICAgICAgTm9FeHRTcmNMb2FkID0+IDAsCiAgICAgICAgICAgIE5vSmF2YVNjcmlwdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgdGFrZSB0aGUgc2FmZSBjb250ZW50IGlmIG5lY2Nlc3NhcnkKICAgICAgICBpZiAoICRTYWZlQ29udGVudHtSZXBsYWNlfSApIHsKICAgICAgICAgICAgJENoYW5nZS0+eyRBdHRyaWJ1dGV9ID0gJFNhZmVDb250ZW50e1N0cmluZ307CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGxvZyBvYmplY3QKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBoYW5kbGUgSFRNTFZpZXcKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdIVE1MVmlldycgKSB7CgogICAgICAgICMgZ2V0IHBhcmFtCiAgICAgICAgbXkgJEZpZWxkID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gIkZpZWxkIiApOwoKICAgICAgICAjIG5lZWRlZCBwYXJhbQogICAgICAgIGlmICggISRGaWVsZCApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWRlZCBQYXJhbTogJEZpZWxkISIsCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGVycm9yIGNoZWNraW5nCiAgICAgICAgaWYgKCAkRmllbGQgbmUgJ0Rlc2NyaXB0aW9uJyAmJiAkRmllbGQgbmUgJ0p1c3RpZmljYXRpb24nICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVW5rbm93biBmaWVsZDogJEZpZWxkISBGaWVsZCBtdXN0IGJlIGVpdGhlciBEZXNjcmlwdGlvbiBvciBKdXN0aWZpY2F0aW9uISIsCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgRmllbGQgY29udGVudAogICAgICAgIG15ICRGaWVsZENvbnRlbnQgPSAkQ2hhbmdlLT57JEZpZWxkfTsKCiAgICAgICAgIyBidWlsZCBiYXNlIFVSTCBmb3IgaW4tbGluZSBpbWFnZXMgaWYgbm8gc2Vzc2lvbiBjb29raWVzIGFyZSB1c2VkCiAgICAgICAgbXkgJFNlc3Npb25JRCA9ICcnOwogICAgICAgIGlmICggJFNlbGYtPntTZXNzaW9uSUR9ICYmICEkU2VsZi0+e1Nlc3Npb25JRENvb2tpZX0gKSB7CiAgICAgICAgICAgICRTZXNzaW9uSUQgPSAnOycgLiAkU2VsZi0+e1Nlc3Npb25OYW1lfSAuICc9JyAuICRTZWxmLT57U2Vzc2lvbklEfTsKICAgICAgICAgICAgJEZpZWxkQ29udGVudCA9fiBzewogICAgICAgICAgICAgICAgKEFjdGlvbj1BZ2VudElUU01DaGFuZ2Vab29tO1N1YmFjdGlvbj1Eb3dubG9hZEF0dGFjaG1lbnQ7RmlsZW5hbWU9Lis7Q2hhbmdlSUQ9XGQrKQogICAgICAgICAgICB9eyQxJFNlc3Npb25JRH1nbXN4OwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgSFRNTCB1dGlscyBvYmplY3QKICAgICAgICBteSAkSFRNTFV0aWxzT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpOwoKICAgICAgICAjIGRldGVjdCBhbGwgcGxhaW4gdGV4dCBsaW5rcyBhbmQgcHV0IHRoZW0gaW50byBhbiBIVE1MIDxhPiB0YWcKICAgICAgICAkRmllbGRDb250ZW50ID0gJEhUTUxVdGlsc09iamVjdC0+TGlua1F1b3RlKAogICAgICAgICAgICBTdHJpbmcgPT4gJEZpZWxkQ29udGVudCwKICAgICAgICApOwoKICAgICAgICAjIHNldCB0YXJnZXQ9Il9ibGFuayIgYXR0cmlidXRlIHRvIGFsbCBIVE1MIDxhPiB0YWdzCiAgICAgICAgIyB0aGUgTGlua1F1b3RlIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCBhZ2FpbgogICAgICAgICRGaWVsZENvbnRlbnQgPSAkSFRNTFV0aWxzT2JqZWN0LT5MaW5rUXVvdGUoCiAgICAgICAgICAgIFN0cmluZyAgICA9PiAkRmllbGRDb250ZW50LAogICAgICAgICAgICBUYXJnZXRBZGQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBuZWVkZWQgSFRNTCBoZWFkZXJzCiAgICAgICAgJEZpZWxkQ29udGVudCA9ICRIVE1MVXRpbHNPYmplY3QtPkRvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgIFN0cmluZyAgPT4gJEZpZWxkQ29udGVudCwKICAgICAgICAgICAgQ2hhcnNldCA9PiAndXRmLTgnLAogICAgICAgICk7CgogICAgICAgICMgcmV0dXJuIGNvbXBsZXRlIEhUTUwgYXMgYW4gYXR0YWNobWVudAogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRGaWVsZENvbnRlbnQsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGhhbmRsZSBEb3dubG9hZEF0dGFjaG1lbnQKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEb3dubG9hZEF0dGFjaG1lbnQnICkgewoKICAgICAgICAjIGdldCBkYXRhIGZvciBhdHRhY2htZW50CiAgICAgICAgbXkgJEZpbGVuYW1lID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbGVuYW1lJyApOwogICAgICAgIG15ICRBdHRhY2htZW50RGF0YSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgRmlsZW5hbWUgPT4gJEZpbGVuYW1lLAogICAgICAgICk7CgogICAgICAgICMgcmV0dXJuIGVycm9yIGlmIGZpbGUgZG9lcyBub3QgZXhpc3QKICAgICAgICBpZiAoICEkQXR0YWNobWVudERhdGEgKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBzdWNoIGF0dGFjaG1lbnQgKCRGaWxlbmFtZSkhIE1heSBiZSBhbiBhdHRhY2shISEiLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgJXskQXR0YWNobWVudERhdGF9LAogICAgICAgICAgICBUeXBlID0+ICdhdHRhY2htZW50JywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNlc3Npb24gb2JqZWN0CiAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICMgU3RvcmUgTGFzdENoYW5nZVZpZXcsIGZvciBiYWNrbGlua3MgZnJvbSBjaGFuZ2Ugc3BlY2lmaWMgcGFnZXMKICAgICRTZXNzaW9uT2JqZWN0LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RDaGFuZ2VWaWV3JywKICAgICAgICBWYWx1ZSAgICAgPT4gJFNlbGYtPntSZXF1ZXN0ZWRVUkx9LAogICAgKTsKCiAgICAjIFN0b3JlIExhc3RTY3JlZW5PdmVydmlldywgZm9yIGJhY2tsaW5rcyBmcm9tIEFnZW50TGlua09iamVjdAogICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlbk92ZXJ2aWV3JywKICAgICAgICBWYWx1ZSAgICAgPT4gJFNlbGYtPntSZXF1ZXN0ZWRVUkx9LAogICAgKTsKCiAgICAjIFN0b3JlIExhc3RTY3JlZW5PdmVydmlldywgZm9yIGJhY2tsaW5rcyBmcm9tIEFnZW50TGlua09iamVjdAogICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlblZpZXcnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgU3RvcmUgTGFzdFNjcmVlbldvcmtPcmRlcnMsIGZvciBiYWNrbGlua3MgZnJvbSBJVFNNV29ya09yZGVyWm9vbQogICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlbldvcmtPcmRlcnMnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgcnVuIGNoYW5nZSBtZW51IG1vZHVsZXMKICAgIGlmICggcmVmICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNoYW5nZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKSBlcSAnSEFTSCcgKSB7CgogICAgICAgICMgZ2V0IGl0ZW1zIGZvciBtZW51CiAgICAgICAgbXkgJU1lbnVzICAgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01DaGFuZ2U6OkZyb250ZW5kOjpNZW51TW9kdWxlJykgfTsKICAgICAgICBteSAkQ291bnRlciA9IDA7CgogICAgICAgIGZvciBteSAkTWVudSAoIHNvcnQga2V5cyAlTWVudXMgKSB7CgogICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSggJE1lbnVzeyRNZW51fS0+e01vZHVsZX0gKSApIHsKICAgICAgICAgICAgICAgIG15ICRPYmplY3QgPSAkTWVudXN7JE1lbnV9LT57TW9kdWxlfS0+bmV3KAogICAgICAgICAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgY2xhc3NlcwogICAgICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSBlcSAnUG9wVXAnICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTWVudXN7JE1lbnV9LT57TWVudUNsYXNzfSA9ICdBc1BvcHVwJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSBlcSAnQmFjaycgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntNZW51Q2xhc3N9ID0gJ0hpc3RvcnlCYWNrJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBydW4gbW9kdWxlCiAgICAgICAgICAgICAgICAkQ291bnRlciA9ICRPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlICA9PiAkQ2hhbmdlLAogICAgICAgICAgICAgICAgICAgIENvdW50ZXIgPT4gJENvdW50ZXIsCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnICA9PiAkTWVudXN7JE1lbnV9LAogICAgICAgICAgICAgICAgICAgIE1lbnVJRCAgPT4gJE1lbnUsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgVmFsdWUgPT4gJENoYW5nZS0+e0NoYW5nZVRpdGxlfSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAjIGJ1aWxkIHdvcmtvcmRlciBncmFwaCBpbiBsYXlvdXQgb2JqZWN0CiAgICBteSAkV29ya09yZGVyR3JhcGggPSAkTGF5b3V0T2JqZWN0LT5JVFNNQ2hhbmdlQnVpbGRXb3JrT3JkZXJHcmFwaCgKICAgICAgICBDaGFuZ2UgICAgICAgICAgICAgPT4gJENoYW5nZSwKICAgICAgICBXb3JrT3JkZXJPYmplY3QgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKSwKICAgICAgICBEeW5hbWljRmllbGRPYmplY3QgPT4gJER5bmFtaWNGaWVsZE9iamVjdCwKICAgICAgICBCYWNrZW5kT2JqZWN0ICAgICAgPT4gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QsCiAgICApOwoKICAgICMgZGlzcGxheSBncmFwaCB3aXRoaW4gYW4gb3duIGJsb2NrCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdXb3JrT3JkZXJHcmFwaCcsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdyYXBoID0+ICRXb3JrT3JkZXJHcmFwaCwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCB1c2VyIG9iamVjdAogICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKICAgICMgZ2V0IGFnZW50cyBwcmVmZXJlbmNlcwogICAgbXkgJVVzZXJQcmVmZXJlbmNlcyA9ICRVc2VyT2JqZWN0LT5HZXRQcmVmZXJlbmNlcygKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHJlbWVtYmVyIGlmIHVzZXIgYWxyZWFkeSBjbG9zZWQgbWVzc2FnZSBhYm91dCBsaW5rcyBpbiBpZnJhbWVzCiAgICBpZiAoICFkZWZpbmVkICRTZWxmLT57RG9Ob3RTaG93QnJvd3NlckxpbmtNZXNzYWdlfSApIHsKICAgICAgICBpZiAoICRVc2VyUHJlZmVyZW5jZXN7VXNlckFnZW50RG9Ob3RTaG93QnJvd3NlckxpbmtNZXNzYWdlfSApIHsKICAgICAgICAgICAgJFNlbGYtPntEb05vdFNob3dCcm93c2VyTGlua01lc3NhZ2V9ID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57RG9Ob3RTaG93QnJvd3NlckxpbmtNZXNzYWdlfSA9IDA7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBtZXNzYWdlIGFib3V0IGxpbmtzIGluIGlmcmFtZXMsIGlmIHVzZXIgZGlkbid0IGNsb3NlIGl0IGFscmVhZHkKICAgIGlmICggISRTZWxmLT57RG9Ob3RTaG93QnJvd3NlckxpbmtNZXNzYWdlfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQnJvd3NlckxpbmtNZXNzYWdlJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNlY3VyaXR5IHJlc3RyaWN0aW9uIHNldHRpbmcgZm9yIGlmcmFtZXMKICAgICMgc2VjdXJpdHk9InJlc3RyaWN0ZWQiIG1heSBicmVhayBTU08gLSBkaXNhYmxlIHRoaXMgZmVhdHVyZSBpZiByZXF1ZXN0ZWQKICAgIG15ICRNU1NlY3VyaXR5UmVzdHJpY3RlZDsKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdEaXNhYmxlTVNJRnJhbWVTZWN1cml0eVJlc3RyaWN0ZWQnKSApIHsKICAgICAgICAkTVNTZWN1cml0eVJlc3RyaWN0ZWQgPSAnJzsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRNU1NlY3VyaXR5UmVzdHJpY3RlZCA9ICdzZWN1cml0eT0icmVzdHJpY3RlZCInOwogICAgfQoKICAgICMgc2hvdyB0aGUgSFRNTCBmaWVsZCBibG9ja3MgYXMgaWZyYW1lcwogICAgZm9yIG15ICRGaWVsZCAocXcoRGVzY3JpcHRpb24gSnVzdGlmaWNhdGlvbikpIHsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0lUU01Db250ZW50JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICBGaWVsZCAgICAgICAgICAgICAgICA9PiAkRmllbGQsCiAgICAgICAgICAgICAgICBNU1NlY3VyaXR5UmVzdHJpY3RlZCA9PiAkTVNTZWN1cml0eVJlc3RyaWN0ZWQsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2UgYnVpbGRlciBkYXRhCiAgICBteSAlQ2hhbmdlQnVpbGRlclVzZXIgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgVXNlcklEID0+ICRDaGFuZ2UtPntDaGFuZ2VCdWlsZGVySUR9LAogICAgICAgIENhY2hlZCA9PiAxLAogICAgKTsKCiAgICAjIGdldCBjcmVhdGUgdXNlciBkYXRhCiAgICBteSAlQ3JlYXRlVXNlciA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICBVc2VySUQgPT4gJENoYW5nZS0+e0NyZWF0ZUJ5fSwKICAgICAgICBDYWNoZWQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgY2hhbmdlIHVzZXIgZGF0YQogICAgbXkgJUNoYW5nZVVzZXIgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgVXNlcklEID0+ICRDaGFuZ2UtPntDaGFuZ2VCeX0sCiAgICAgICAgQ2FjaGVkID0+IDEsCiAgICApOwoKICAgICMgYWxsIHBvc3RmaXhlcyBuZWVkZWQgZm9yIHVzZXIgaW5mb3JtYXRpb24KICAgIG15IEBQb3N0Zml4ZXMgPSBxdyhVc2VyTG9naW4gVXNlckZpcnN0bmFtZSBVc2VyTGFzdG5hbWUpOwoKICAgICMgZ2V0IHVzZXIgaW5mb3JtYXRpb24gZm9yIENoYW5nZUJ1aWxkZXIsIENyZWF0ZUJ5LCBDaGFuZ2VCeQogICAgZm9yIG15ICRQb3N0Zml4IChAUG9zdGZpeGVzKSB7CiAgICAgICAgJENoYW5nZS0+eyAnQ2hhbmdlQnVpbGRlcicgLiAkUG9zdGZpeCB9ID0gJENoYW5nZUJ1aWxkZXJVc2VyeyRQb3N0Zml4fTsKICAgICAgICAkQ2hhbmdlLT57ICdDcmVhdGUnIC4gJFBvc3RmaXggfSAgICAgICAgPSAkQ3JlYXRlVXNlcnskUG9zdGZpeH07CiAgICAgICAgJENoYW5nZS0+eyAnQ2hhbmdlJyAuICRQb3N0Zml4IH0gICAgICAgID0gJENoYW5nZVVzZXJ7JFBvc3RmaXh9OwogICAgfQoKICAgICMgb3V0cHV0IG1ldGEgYmxvY2sKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01ldGEnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAleyRDaGFuZ2V9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2hvdyB2YWx1ZXMgb3IgZGFzaCAoJy0nKQogICAgZm9yIG15ICRCbG9ja05hbWUgKHF3KFBsYW5uZWRTdGFydFRpbWUgUGxhbm5lZEVuZFRpbWUgQWN0dWFsU3RhcnRUaW1lIEFjdHVhbEVuZFRpbWUpKSB7CiAgICAgICAgaWYgKCAkQ2hhbmdlLT57JEJsb2NrTmFtZX0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAkQmxvY2tOYW1lLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJEJsb2NrTmFtZSA9PiAkQ2hhbmdlLT57JEJsb2NrTmFtZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdFbXB0eScgLiAkQmxvY2tOYW1lLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgY29uZmlndXJhYmxlIGJsb2NrcwogICAgQkxPQ0tOQU1FOgogICAgZm9yIG15ICRCbG9ja05hbWUgKHF3KFJlcXVlc3RlZFRpbWUgUGxhbm5lZEVmZm9ydCBBY2NvdW50ZWRUaW1lKSkgewoKICAgICAgICAjIHNraXAgaWYgYmxvY2sgaXMgc3dpdGNoZWQgb2ZmIGluIFN5c0NvbmZpZwogICAgICAgIG5leHQgQkxPQ0tOQU1FIGlmICEkU2VsZi0+e0NvbmZpZ30tPnskQmxvY2tOYW1lfTsKCiAgICAgICAgIyBzaG93IGJsb2NrCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Nob3cnIC4gJEJsb2NrTmFtZSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgdmFsdWUgb3IgZGFzaAogICAgICAgIGlmICggJENoYW5nZS0+eyRCbG9ja05hbWV9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJEJsb2NrTmFtZSwKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICRCbG9ja05hbWUgPT4gJENoYW5nZS0+eyRCbG9ja05hbWV9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnRW1wdHknIC4gJEJsb2NrTmFtZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBzaG93IENJUAogICAgZm9yIG15ICRUeXBlIChxdyhDYXRlZ29yeSBJbXBhY3QgUHJpb3JpdHkpKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJFR5cGUsCiAgICAgICAgICAgIERhdGEgPT4geyAleyRDaGFuZ2V9IH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBteSAkRHluYW1pY0ZpZWxkID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICBGaWVsZEZpbHRlciA9PiAkU2VsZi0+e0NvbmZpZ30tPntEeW5hbWljRmllbGR9IHx8IHt9LAogICAgKTsKCiAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICBteSAkVmFsdWUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJENoYW5nZUlELAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHByaW50IHN0cmluZyBmb3IgdGhpcyBkeW5hbWljIGZpZWxkCiAgICAgICAgbXkgJFZhbHVlU3RyZyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5EaXNwbGF5VmFsdWVSZW5kZXIoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICBWYWx1ZU1heENoYXJzICAgICAgPT4gMTAwLAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICApOwoKICAgICAgICAjIGZvciBlbXB0eSB2YWx1ZXMKICAgICAgICBpZiAoICEkVmFsdWVTdHJnLT57VmFsdWV9ICkgewogICAgICAgICAgICAkVmFsdWVTdHJnLT57VmFsdWV9ID0gJy0nOwogICAgICAgIH0KCiAgICAgICAgbXkgJExhYmVsID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTGFiZWwgPT4gJExhYmVsLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIGlmICggJFZhbHVlU3RyZy0+e0xpbmt9ICkgewoKICAgICAgICAgICAgIyBvdXRwdXQgbGluayBlbGVtZW50CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkTGluaycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAleyRDaGFuZ2V9LAogICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICAgICAgICAgIExpbmsgICAgICAgICAgICAgICAgICAgICAgICA9PiAkVmFsdWVTdHJnLT57TGlua30sCiAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9ID0+ICRWYWx1ZVN0cmctPntUaXRsZX0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBvdXRwdXQgbm9uIGxpbmsgZWxlbWVudAogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZFBsYWluJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGV4YW1wbGUgb2YgZHluYW1pYyBmaWVsZHMgb3JkZXIgY3VzdG9taXphdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdEeW5hbWljRmllbGQnIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIExhYmVsID0+ICRMYWJlbCwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICBUaXRsZSA9PiAkVmFsdWVTdHJnLT57VGl0bGV9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY2hhbmdlIG1hbmFnZXIgZGF0YQogICAgbXkgJUNoYW5nZU1hbmFnZXJVc2VyOwogICAgaWYgKCAkQ2hhbmdlLT57Q2hhbmdlTWFuYWdlcklEfSApIHsKCiAgICAgICAgIyBnZXQgY2hhbmdlIG1hbmFnZXIgZGF0YQogICAgICAgICVDaGFuZ2VNYW5hZ2VyVXNlciA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEID0+ICRDaGFuZ2UtPntDaGFuZ2VNYW5hZ2VySUR9LAogICAgICAgICAgICBDYWNoZWQgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNoYW5nZSBtYW5hZ2VyIGluZm9ybWF0aW9uCiAgICBmb3IgbXkgJFBvc3RmaXggKHF3KFVzZXJMb2dpbiBVc2VyRmlyc3RuYW1lIFVzZXJMYXN0bmFtZSkpIHsKICAgICAgICAkQ2hhbmdlLT57ICdDaGFuZ2VNYW5hZ2VyJyAuICRQb3N0Zml4IH0gPSAkQ2hhbmdlTWFuYWdlclVzZXJ7JFBvc3RmaXh9IHx8ICcnOwogICAgfQoKICAgICMgb3V0cHV0IGNoYW5nZSBtYW5hZ2VyIGJsb2NrCiAgICBpZiAoJUNoYW5nZU1hbmFnZXJVc2VyKSB7CgogICAgICAgICMgc2hvdyBuYW1lIGFuZCBtYWlsIGFkZHJlc3MgaWYgdXNlciBleGlzdHMKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQ2hhbmdlTWFuYWdlcicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJXskQ2hhbmdlfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgc2hvdyBkYXNoIGlmIG5vIGNoYW5nZSBtYW5hZ2VyIGV4aXN0cwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdFbXB0eUNoYW5nZU1hbmFnZXInLAogICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY3VzdG9tZXIgdXNlciBvYmplY3QKICAgIG15ICRDdXN0b21lclVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyk7CgogICAgIyBzaG93IENBQiBibG9jayB3aGVuIHRoZXJlIGlzIGEgQ0FCCiAgICBpZiAoIEB7ICRDaGFuZ2UtPntDQUJBZ2VudHN9IH0gfHwgQHsgJENoYW5nZS0+e0NBQkN1c3RvbWVyc30gfSApIHsKCiAgICAgICAgIyBvdXRwdXQgQ0FCIGJsb2NrCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0NBQicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJXskQ2hhbmdlfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIGFuZCBvdXRwdXQgQ0FCIGFnZW50cwogICAgICAgIENBQkFHRU5UOgogICAgICAgIGZvciBteSAkQ0FCQWdlbnQgKCBAeyAkQ2hhbmdlLT57Q0FCQWdlbnRzfSB9ICkgewogICAgICAgICAgICBuZXh0IENBQkFHRU5UIGlmICEkQ0FCQWdlbnQ7CgogICAgICAgICAgICBteSAlQ0FCQWdlbnRVc2VyRGF0YSA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkQ0FCQWdlbnQsCiAgICAgICAgICAgICAgICBDYWNoZSAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgQ0FCQUdFTlQgaWYgISVDQUJBZ2VudFVzZXJEYXRhOwoKICAgICAgICAgICAgIyBidWlsZCBjb250ZW50IGZvciBhZ2VudCBibG9jawogICAgICAgICAgICBteSAlQ0FCQWdlbnREYXRhOwogICAgICAgICAgICBmb3IgbXkgJFBvc3RmaXggKEBQb3N0Zml4ZXMpIHsKICAgICAgICAgICAgICAgICRDQUJBZ2VudERhdGF7ICdDQUJBZ2VudCcgLiAkUG9zdGZpeCB9ID0gJENBQkFnZW50VXNlckRhdGF7JFBvc3RmaXh9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG91dHB1dCBhZ2VudCBibG9jawogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NBQkFnZW50JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVDQUJBZ2VudERhdGEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBidWlsZCBhbmQgb3V0cHV0IENBQiBjdXN0b21lcnMKICAgICAgICBDQUJDVVNUT01FUjoKICAgICAgICBmb3IgbXkgJENBQkN1c3RvbWVyICggQHsgJENoYW5nZS0+e0NBQkN1c3RvbWVyc30gfSApIHsKICAgICAgICAgICAgbmV4dCBDQUJDVVNUT01FUiBpZiAhJENBQkN1c3RvbWVyOwoKICAgICAgICAgICAgbXkgJUNBQkN1c3RvbWVyVXNlckRhdGEgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICAgICAgVXNlciA9PiAkQ0FCQ3VzdG9tZXIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IENBQkNVU1RPTUVSIGlmICElQ0FCQ3VzdG9tZXJVc2VyRGF0YTsKCiAgICAgICAgICAgICMgYnVpbGQgY29udGVudCBmb3IgQ0FCIGN1c3RvbWVyIGJsb2NrCiAgICAgICAgICAgIG15ICVDQUJDdXN0b21lckRhdGE7CiAgICAgICAgICAgIGZvciBteSAkUG9zdGZpeCAoQFBvc3RmaXhlcykgewogICAgICAgICAgICAgICAgJENBQkN1c3RvbWVyRGF0YXsgJ0NBQkN1c3RvbWVyJyAuICRQb3N0Zml4IH0gPSAkQ0FCQ3VzdG9tZXJVc2VyRGF0YXskUG9zdGZpeH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgb3V0cHV0IENBQiBjdXN0b21lciBibG9jawogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NBQkN1c3RvbWVyJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVDQUJDdXN0b21lckRhdGEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgZGFzaCB3aGVuIG5vIENBQiBleGlzdHMKICAgIGVsc2UgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdFbXB0eUNBQicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBsaW5rIG9iamVjdAogICAgbXkgJExpbmtPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpOwoKICAgICMgZ2V0IGxpbmtlZCBvYmplY3RzIHdoaWNoIGFyZSBkaXJlY3RseSBsaW5rZWQgd2l0aCB0aGlzIGNoYW5nZSBvYmplY3QKICAgIG15ICRMaW5rTGlzdFdpdGhEYXRhID0gJExpbmtPYmplY3QtPkxpbmtMaXN0V2l0aERhdGEoCiAgICAgICAgT2JqZWN0ID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICBLZXkgICAgPT4gJENoYW5nZUlELAogICAgICAgIFN0YXRlICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGNoYW5nZSBpbml0aWF0b3JzIChjdXN0b21lciB1c2VycyBvZiBsaW5rZWQgdGlja2V0cykKICAgIG15ICRUaWNrZXRzUmVmID0gJExpbmtMaXN0V2l0aERhdGEtPntUaWNrZXR9IHx8IHt9OwogICAgbXkgJUNoYW5nZUluaXRpYXRvcnNJRDsKICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXskVGlja2V0c1JlZn0gKSB7CgogICAgICAgIG15ICRUaWNrZXRSZWYgPSAkVGlja2V0c1JlZi0+eyRMaW5rVHlwZX0tPntTb3VyY2V9OwogICAgICAgIGZvciBteSAkVGlja2V0SUQgKCBzb3J0IGtleXMgJXskVGlja2V0UmVmfSApIHsKCiAgICAgICAgICAgICMgZ2V0IGlkIG9mIGN1c3RvbWVyIHVzZXIKICAgICAgICAgICAgbXkgJEN1c3RvbWVyVXNlcklEID0gJFRpY2tldFJlZi0+eyRUaWNrZXRJRH0tPntDdXN0b21lclVzZXJJRH07CgogICAgICAgICAgICAjIGlmIGEgY3VzdG9tZXIKICAgICAgICAgICAgaWYgKCRDdXN0b21lclVzZXJJRCkgewogICAgICAgICAgICAgICAgJENoYW5nZUluaXRpYXRvcnNJRHskQ3VzdG9tZXJVc2VySUR9ID0gJ0N1c3RvbWVyVXNlcic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBteSAkT3duZXJJRCA9ICRUaWNrZXRSZWYtPnskVGlja2V0SUR9LT57T3duZXJJRH07CiAgICAgICAgICAgICAgICAkQ2hhbmdlSW5pdGlhdG9yc0lEeyRPd25lcklEfSA9ICdVc2VyJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjaGFuZ2UgaW5pdGlhdG9ycyBpbmZvCiAgICBpZiAoIGtleXMgJUNoYW5nZUluaXRpYXRvcnNJRCApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQ2hhbmdlSW5pdGlhdG9yRXhpc3RzJywKICAgICAgICApOwogICAgfQoKICAgIG15ICRDaGFuZ2VJbml0aWF0b3JzID0gJyc7CiAgICBmb3IgbXkgJFVzZXJJRCAoIHNvcnQga2V5cyAlQ2hhbmdlSW5pdGlhdG9yc0lEICkgewogICAgICAgIG15ICVVc2VyOwoKICAgICAgICAjIGdldCBjdXN0b21lciB1c2VyIGluZm8gaWYgQ0kgaXMgYSBjdXN0b21lciB1c2VyCiAgICAgICAgaWYgKCAkQ2hhbmdlSW5pdGlhdG9yc0lEeyRVc2VySUR9IGVxICdDdXN0b21lclVzZXInICkgewogICAgICAgICAgICAlVXNlciA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgICAgICBVc2VyID0+ICRVc2VySUQsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG90aGVyd2lzZSBnZXQgdXNlciBpbmZvCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICVVc2VyID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGlmIHVzZXIgaW5mbyBleGlzdAogICAgICAgIGlmICglVXNlcikgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NoYW5nZUluaXRpYXRvcicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslVXNlcn0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkVXNlcntVc2VyTG9naW59ICAgICB8fD0gJyc7CiAgICAgICAgICAgICRVc2Vye1VzZXJGaXJzdG5hbWV9IHx8PSAnJzsKICAgICAgICAgICAgJFVzZXJ7VXNlckxhc3RuYW1lfSAgfHw9ICcnOwoKICAgICAgICAgICAgJENoYW5nZUluaXRpYXRvcnMgLj0gc3ByaW50ZiAiJXMgKCVzICVzKSIsCiAgICAgICAgICAgICAgICAkVXNlcntVc2VyTG9naW59LAogICAgICAgICAgICAgICAgJFVzZXJ7VXNlckZpcnN0bmFtZX0sCiAgICAgICAgICAgICAgICAkVXNlcntVc2VyTGFzdG5hbWV9OwogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgZGFzaCBpZiBubyBjaGFuZ2UgaW5pdGlhdG9yIGV4aXN0cwogICAgaWYgKCAhJENoYW5nZUluaXRpYXRvcnMgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0VtcHR5Q2hhbmdlSW5pdGlhdG9ycycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGRpc3BsYXkgYSBzdHJpbmcgd2l0aCBhbGwgY2hhbmdlaW5pdGlhdG9ycwogICAgJENoYW5nZS0+eydDaGFuZ2UgSW5pdGF0b3JzJ30gPSAkQ2hhbmdlSW5pdGlhdG9yczsKCiAgICAjIHN0b3JlIHRoZSBjb21iaW5lZCBsaW5rZWQgb2JqZWN0cyBmcm9tIGFsbCB3b3Jrb3JkZXJzIG9mIHRoaXMgY2hhbmdlCiAgICBteSAkTGlua0xpc3RXaXRoRGF0YUNvbWJpbmVkV29ya09yZGVycyA9IHt9OwogICAgZm9yIG15ICRXb3JrT3JkZXJJRCAoIEB7ICRDaGFuZ2UtPntXb3JrT3JkZXJJRHN9IH0gKSB7CgogICAgICAgICMgZ2V0IGxpbmtlZCBvYmplY3RzIG9mIHRoaXMgd29ya29yZGVyCiAgICAgICAgbXkgJExpbmtMaXN0V2l0aERhdGFXb3JrT3JkZXIgPSAkTGlua09iamVjdC0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICAgICAgT2JqZWN0ID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgS2V5ICAgID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgU3RhdGUgID0+ICdWYWxpZCcsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgT0JKRUNUOgogICAgICAgIGZvciBteSAkT2JqZWN0ICggc29ydCBrZXlzICV7JExpbmtMaXN0V2l0aERhdGFXb3JrT3JkZXJ9ICkgewoKICAgICAgICAgICAgIyBvbmx5IHNob3cgbGlua2VkIHNlcnZpY2VzIGFuZCBjb25maWcgaXRlbXMgb2Ygd29ya29yZGVyCiAgICAgICAgICAgIGlmICggJE9iamVjdCBuZSAnU2VydmljZScgJiYgJE9iamVjdCBuZSAnSVRTTUNvbmZpZ0l0ZW0nICkgewogICAgICAgICAgICAgICAgbmV4dCBPQkpFQ1Q7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIExJTktUWVBFOgogICAgICAgICAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7ICRMaW5rTGlzdFdpdGhEYXRhV29ya09yZGVyLT57JE9iamVjdH0gfSApIHsKCiAgICAgICAgICAgICAgICBESVJFQ1RJT046CiAgICAgICAgICAgICAgICBmb3IgbXkgJERpcmVjdGlvbiAoCiAgICAgICAgICAgICAgICAgICAgc29ydCBrZXlzICV7ICRMaW5rTGlzdFdpdGhEYXRhV29ya09yZGVyLT57JE9iamVjdH0tPnskTGlua1R5cGV9IH0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgIElEOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkSUQgKAogICAgICAgICAgICAgICAgICAgICAgICBzb3J0CiAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgJXsgJExpbmtMaXN0V2l0aERhdGFXb3JrT3JkZXItPnskT2JqZWN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufSB9CiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNvbWJpbmUgdGhlIGxpbmtlZCBvYmplY3QgZGF0YSBmcm9tIGFsbCB3b3Jrb3JkZXJzCiAgICAgICAgICAgICAgICAgICAgICAgICRMaW5rTGlzdFdpdGhEYXRhQ29tYmluZWRXb3JrT3JkZXJzLT57JE9iamVjdH0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+eyRJRH0gPSAkTGlua0xpc3RXaXRoRGF0YVdvcmtPcmRlci0+eyRPYmplY3R9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPnskSUR9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGFkZCBjb21iaW5lZCBsaW5rZWQgb2JqZWN0cyBmcm9tIHdvcmtvcmRlciB0byBsaW5rZWQgb2JqZWN0cyBmcm9tIGNoYW5nZSBvYmplY3QKICAgICRMaW5rTGlzdFdpdGhEYXRhID0gewogICAgICAgICV7JExpbmtMaXN0V2l0aERhdGF9LAogICAgICAgICV7JExpbmtMaXN0V2l0aERhdGFDb21iaW5lZFdvcmtPcmRlcnN9LAogICAgfTsKCiAgICAjIGdldCBsaW5rIHRhYmxlIHZpZXcgbW9kZQogICAgbXkgJExpbmtUYWJsZVZpZXdNb2RlID0gJENvbmZpZ09iamVjdC0+R2V0KCdMaW5rT2JqZWN0OjpWaWV3TW9kZScpOwoKICAgICMgY29udmVydCB0byBKU09OIHN0cmluZwogICAgbXkgJEFkZGl0aW9uYWxMaW5rTGlzdFdpdGhEYXRhSlNPTlN0cmluZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpKU09OJyktPkVuY29kZSgKICAgICAgICBEYXRhID0+ICRMaW5rTGlzdFdpdGhEYXRhQ29tYmluZWRXb3JrT3JkZXJzLAogICAgKTsKCiAgICAjIGNyZWF0ZSB0aGUgbGluayB0YWJsZQogICAgbXkgJExpbmtUYWJsZVN0cmcgPSAkTGF5b3V0T2JqZWN0LT5MaW5rT2JqZWN0VGFibGVDcmVhdGUoCiAgICAgICAgTGlua0xpc3RXaXRoRGF0YSAgICAgICAgICAgICAgID0+ICRMaW5rTGlzdFdpdGhEYXRhLAogICAgICAgIFZpZXdNb2RlICAgICAgICAgICAgICAgICAgICAgICA9PiAkTGlua1RhYmxlVmlld01vZGUsCiAgICAgICAgT2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICBLZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJENoYW5nZUlELAogICAgICAgIEFkZGl0aW9uYWxMaW5rTGlzdFdpdGhEYXRhSlNPTiA9PiAkQWRkaXRpb25hbExpbmtMaXN0V2l0aERhdGFKU09OU3RyaW5nLAogICAgKTsKCiAgICAjIG91dHB1dCB0aGUgbGluayB0YWJsZQogICAgaWYgKCRMaW5rVGFibGVTdHJnKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0xpbmtUYWJsZScgLiAkTGlua1RhYmxlVmlld01vZGUsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTGlua1RhYmxlU3RyZyA9PiAkTGlua1RhYmxlU3RyZywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGF0dGFjaG1lbnRzCiAgICBteSBAQXR0YWNobWVudHMgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBdHRhY2htZW50TGlzdCgKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICApOwoKICAgICMgc2hvdyBhdHRhY2htZW50cwogICAgQVRUQUNITUVOVDoKICAgIGZvciBteSAkRmlsZW5hbWUgKEBBdHRhY2htZW50cykgewoKICAgICAgICAjIGdldCBpbmZvIGFib3V0IGZpbGUKICAgICAgICBteSAkQXR0YWNobWVudERhdGEgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBdHRhY2htZW50R2V0KAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIEZpbGVuYW1lID0+ICRGaWxlbmFtZSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGZvciBhdHRhY2htZW50IGluZm9ybWF0aW9uCiAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkQXR0YWNobWVudERhdGE7CgogICAgICAgICMgZG8gbm90IHNob3cgaW5saW5lIGF0dGFjaG1lbnRzIGluIGF0dGFjaG1lbnRzIGxpc3QgKHRoZXkgaGF2ZSBhIGNvbnRlbnQgaWQpCiAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICRBdHRhY2htZW50RGF0YS0+e1ByZWZlcmVuY2VzfS0+e0NvbnRlbnRJRH07CgogICAgICAgICMgc2hvdyBibG9jawogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50Um93JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAleyRDaGFuZ2V9LAogICAgICAgICAgICAgICAgJXskQXR0YWNobWVudERhdGF9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNQ2hhbmdlWm9vbScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJXskQ2hhbmdlfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb290ZXIKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01UZW1wbGF0ZURlbGV0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNvbmZpZyBmb3IgZnJvbnRlbmQKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnWW91IG5lZWQgJXMgcGVybWlzc2lvbiEnLCAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSApLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbmVlZGVkIFRlbXBsYXRlSUQKICAgIG15ICRUZW1wbGF0ZUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJ1RlbXBsYXRlSUQnICk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRUZW1wbGF0ZUlEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIFRlbXBsYXRlSUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHRlbXBsYXRlIG9iamVjdAogICAgbXkgJFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlJyk7CgogICAgIyBnZXQgdGVtcGxhdGUgZGF0YQogICAgbXkgJFRlbXBsYXRlID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGVycm9yCiAgICBpZiAoICEkVGVtcGxhdGUgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdUZW1wbGF0ZSAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnLCAkVGVtcGxhdGVJRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnVGVtcGxhdGVEZWxldGUnICkgewoKICAgICAgICBteSAkQ291bGREZWxldGVUZW1wbGF0ZSA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVEZWxldGUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICgkQ291bGREZWxldGVUZW1wbGF0ZSkgewoKICAgICAgICAgICAgIyByZWRpcmVjdCB0byB0ZW1wbGF0ZSBvdmVydmlldyBtYXNrLCB3aGVuIHVwZGF0ZSB3YXMgc3VjY2Vzc2Z1bAogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXciLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlLCB3aGVuIGRlbGV0ZSBmYWlsZWQKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9CiAgICAgICAgICAgICAgICAgICAgLT5UcmFuc2xhdGUoICdXYXMgbm90IGFibGUgdG8gZGVsZXRlIHRoZSB0ZW1wbGF0ZSAlcyEnLCAkVGVtcGxhdGVJRCApLAogICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG91dHB1dCBjb250ZW50CiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNVGVtcGxhdGVEZWxldGUnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICV7JFRlbXBsYXRlfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGJ1aWxkIHRoZSByZXR1cm5lZCBkYXRhIHN0cnVjdHVyZQogICAgbXkgJURhdGEgPSAoCiAgICAgICAgSFRNTCAgICAgICA9PiAkT3V0cHV0LAogICAgICAgIERpYWxvZ1R5cGUgPT4gJ0NvbmZpcm1hdGlvbicsCiAgICApOwoKICAgICMgcmV0dXJuIEpTT04tU3RyaW5nIGJlY2F1c2Ugb2YgQUpBWC1Nb2RlCiAgICBteSAkT3V0cHV0SlNPTiA9ICRMYXlvdXRPYmplY3QtPkpTT05FbmNvZGUoIERhdGEgPT4gXCVEYXRhICk7CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9JyAuICRMYXlvdXRPYmplY3QtPntDaGFyc2V0fSwKICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0SlNPTiwKICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgKTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01UZW1wbGF0ZUVkaXQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb25maWcgZm9yIGZyb250ZW5kCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZXJyb3Igc2NyZWVuCiAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1lvdSBuZWVkICVzIHBlcm1pc3Npb24hJywgJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0gKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IG5lZWRlZCBUZW1wbGF0ZUlECiAgICBteSAkVGVtcGxhdGVJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUZW1wbGF0ZUlEJyApOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkVGVtcGxhdGVJRCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBUZW1wbGF0ZUlEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB0ZW1wbGF0ZSBvYmplY3QKICAgIG15ICRUZW1wbGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpUZW1wbGF0ZScpOwoKICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgIG15ICRUZW1wbGF0ZSA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBlcnJvcgogICAgaWYgKCAhJFRlbXBsYXRlICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnVGVtcGxhdGUgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJFRlbXBsYXRlSUQgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJUdldFBhcmFtOwoKICAgICMgdXBkYXRlIHRoZSB0ZW1wbGF0ZQogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1VwZGF0ZVRlbXBsYXRlJyApIHsKCiAgICAgICAgIyBzdG9yZSBuZWVkZWQgcGFyYW1ldGVycyBpbiAlR2V0UGFyYW0gdG8gbWFrZSBpdCByZWxvYWRhYmxlCiAgICAgICAgZm9yIG15ICRQYXJhbU5hbWUgKHF3KFRlbXBsYXRlTmFtZSBDb21tZW50IFZhbGlkSUQpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbU5hbWUgKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgdmFsaWRpdHkgb2YgdGhlIHRlbXBsYXRlIG5hbWUKICAgICAgICBteSAkVGVtcGxhdGVOYW1lID0gJEdldFBhcmFte1RlbXBsYXRlTmFtZX0gfHwgJFRlbXBsYXRlLT57TmFtZX07CgogICAgICAgIGlmICgkVGVtcGxhdGVOYW1lKSB7CgogICAgICAgICAgICBteSAkQ291bGRVcGRhdGVUZW1wbGF0ZSA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVVcGRhdGUoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkVGVtcGxhdGVOYW1lLAogICAgICAgICAgICAgICAgQ29tbWVudCAgICA9PiAkR2V0UGFyYW17Q29tbWVudH0sCiAgICAgICAgICAgICAgICBWYWxpZElEICAgID0+ICRHZXRQYXJhbXtWYWxpZElEfSB8fCAkVGVtcGxhdGUtPntWYWxpZElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRDb3VsZFVwZGF0ZVRlbXBsYXRlKSB7CgogICAgICAgICAgICAgICAgIyBsb2FkIG5ldyBVUkwgaW4gcGFyZW50IHdpbmRvdyBhbmQgY2xvc2UgcG9wdXAKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Qb3B1cENsb3NlKAogICAgICAgICAgICAgICAgICAgIFVSTCA9PiAiQWN0aW9uPUFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXciLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIHNob3cgZXJyb3IgbWVzc2FnZQogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fQogICAgICAgICAgICAgICAgICAgICAgICAtPlRyYW5zbGF0ZSggJ1dhcyBub3QgYWJsZSB0byB1cGRhdGUgVGVtcGxhdGUgJXMhJywgJFRlbXBsYXRlSUQgKSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgbm8gc3ViYWN0aW9uCiAgICB9CgogICAgIyBmaXggdXAgdGhlIG5hbWUKICAgICRUZW1wbGF0ZS0+e1RlbXBsYXRlTmFtZX0gPSAkR2V0UGFyYW17VGVtcGxhdGVOYW1lfSB8fCAkVGVtcGxhdGUtPntOYW1lfTsKCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgVHlwZSAgPT4gJ1NtYWxsJywKICAgICAgICBUaXRsZSA9PiAkVGVtcGxhdGUtPntUZW1wbGF0ZU5hbWV9LAogICAgKTsKCiAgICAjIGdldCB2YWxpZCBvYmplY3QKICAgIG15ICRWYWxpZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpOwoKICAgIG15ICRWYWxpZFNlbGVjdGlvblN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAkVmFsaWRPYmplY3QtPlZhbGlkTGlzdCgpLAogICAgICAgIH0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnVmFsaWRJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17VmFsaWRJRH0KICAgICAgICAgICAgfHwgJFRlbXBsYXRlLT57VmFsaWRJRH0KICAgICAgICAgICAgfHwgKCAkVmFsaWRPYmplY3QtPlZhbGlkSURzR2V0KCkgKVswXSwKICAgICAgICBTb3J0ICA9PiAnTnVtZXJpY0tleScsCiAgICAgICAgQ2xhc3MgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVRlbXBsYXRlRWRpdCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJXskVGVtcGxhdGV9LAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIFZhbGlkU2VsZWN0aW9uU3RyaW5nID0+ICRWYWxpZFNlbGVjdGlvblN0cmluZywKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb290ZXIKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01UZW1wbGF0ZUVkaXRDQUI7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpQZXJsOjpEdW1wZXIpCnVzZSBEYXRhOjpEdW1wZXI7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnWW91IG5lZWQgJXMgcGVybWlzc2lvbiEnLCAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSApLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBzdG9yZSBhbGwgbmVlZGVkIHBhcmFtZXRlcnMgaW4gJUdldFBhcmFtIHRvIG1ha2UgaXQgcmVsb2FkYWJsZQogICAgbXkgJUdldFBhcmFtOwogICAgZm9yIG15ICRQYXJhbU5hbWUgKAogICAgICAgIHF3KFRlbXBsYXRlSUQgVGVtcGxhdGVDb250ZW50IE5ld0NBQk1lbWJlciBOZXdDQUJNZW1iZXJTZWxlY3RlZCBOZXdDQUJNZW1iZXJUeXBlIEFkZENBQk1lbWJlcikKICAgICAgICApCiAgICB7CiAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkR2V0UGFyYW17VGVtcGxhdGVJRH0gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gVGVtcGxhdGVJRCBpcyBnaXZlbiEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdGVtcGxhdGUgb2JqZWN0CiAgICBteSAkVGVtcGxhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6VGVtcGxhdGUnKTsKCiAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICBteSAkVGVtcGxhdGUgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJEdldFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGVycm9yCiAgICBpZiAoICEkVGVtcGxhdGUgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0KICAgICAgICAgICAgICAgIC0+VHJhbnNsYXRlKCAnVGVtcGxhdGUgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJEdldFBhcmFte1RlbXBsYXRlSUR9ICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgb24gZmlyc3QgcGFnZSBsb2FkIHdlIGZpbGwgdGhlIHRlbXBsYXRlIGNvbnRlbnQgc3RyaW5nIHBhcmFtZXRlciBmcm9tIHRoZSB0ZW1wbGV0ZQogICAgaWYgKCAhJFNlbGYtPntTdWJhY3Rpb259ICkgewogICAgICAgICRHZXRQYXJhbXtUZW1wbGF0ZUNvbnRlbnR9ID0gJFRlbXBsYXRlLT57Q29udGVudH07CiAgICB9CgogICAgIyBkZS1zZXJpYWxpemUgdGhlIENBQiBjb250ZW50CiAgICBteSAkQ0FCUmVmZXJlbmNlID0gJFNlbGYtPl9DQUJEZVNlcmlhbGl6ZSgKICAgICAgICBDb250ZW50ID0+ICRHZXRQYXJhbXtUZW1wbGF0ZUNvbnRlbnR9LAogICAgICAgIFVzZXJJRCAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGlzIGNhYiBtZW1iZXIgZGVsZXRlIHJlcXVlc3RlZAogICAgbXkgJURlbGV0ZU1lbWJlciA9ICRTZWxmLT5fSXNNZW1iZXJEZWxldGlvbigKICAgICAgICBDQUJSZWZlcmVuY2UgPT4gJENBQlJlZmVyZW5jZSwKICAgICk7CiAgICBpZiAoJURlbGV0ZU1lbWJlcikgewoKICAgICAgICAjIGZpbmQgdXNlcnMgd2hvIGFyZSBzdGlsbCBtZW1iZXIgb2YgQ0FCCiAgICAgICAgbXkgJFR5cGUgPSAkRGVsZXRlTWVtYmVye1R5cGV9OwogICAgICAgIG15IEBTdGlsbE1lbWJlcnMgPSBncmVwIHsgJF8gbmUgJERlbGV0ZU1lbWJlcntJRH0gfSBAeyAkQ0FCUmVmZXJlbmNlLT57Q0FCQWRkfS0+eyRUeXBlfSB9OwoKICAgICAgICAjIHN0b3JlIHRoZSByZW1haW5pbmcgbWVtYmVycwogICAgICAgICRDQUJSZWZlcmVuY2UtPntDQUJBZGR9LT57JFR5cGV9ID0gXEBTdGlsbE1lbWJlcnM7CgogICAgICAgICMgcmVzZXQgdGhlICJzYXZlIiBzdWJhY3Rpb24sIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvIHNob3cgdGhlIHVwZGF0ZWQgbWVtYmVyIGxpc3QKICAgICAgICAkU2VsZi0+e1N1YmFjdGlvbn0gPSAnJzsKICAgIH0KCiAgICAjIHNlcnZlciBlcnJvciBoYXNoLCB0byBzdG9yZSB0aGUgaXRlbXMgd2l0aCBTZXJ2ZXJFcnJvciBjbGFzcwogICAgbXkgJVNlcnZlckVycm9yOwoKICAgICMgUmVtZW1iZXIgdGhlIHJlYXNvbiB3aHkgc2F2aW5nIHdhcyBub3QgYXR0ZW1wdGVkLgogICAgIyBUaGUgZW50cmllcyBhcmUgdGhlIG5hbWVzIG9mIHRoZSBkdGwgdmFsaWRhdGlvbiBlcnJvciBibG9ja3MuCiAgICBteSBAVmFsaWRhdGlvbkVycm9yczsKCiAgICAjIGFkZCBhIENBQiBtZW1iZXIKICAgIGlmICggJEdldFBhcmFte0FkZENBQk1lbWJlcn0gJiYgJEdldFBhcmFte05ld0NBQk1lbWJlcn0gKSB7CgogICAgICAgICMgYWRkIGEgbWVtYmVyCiAgICAgICAgbXkgJUNBQlVwZGF0ZUluZm8gPSAkU2VsZi0+X0lzTmV3Q0FCTWVtYmVyT2soCiAgICAgICAgICAgIENBQlJlZmVyZW5jZSA9PiAkQ0FCUmVmZXJlbmNlLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyBpZiBtZW1iZXIgaXMgdmFsaWQKICAgICAgICBpZiAoJUNBQlVwZGF0ZUluZm8pIHsKCiAgICAgICAgICAgICMgYWRkIG5ldyBtZW1iZXIKICAgICAgICAgICAgJENBQlJlZmVyZW5jZS0+e0NBQkFkZH0tPnsgJEdldFBhcmFte05ld0NBQk1lbWJlclR5cGV9IH0gPSAkQ0FCVXBkYXRlSW5mb3sgJEdldFBhcmFte05ld0NBQk1lbWJlclR5cGV9IH07CgogICAgICAgICAgICAjIGRvIG5vdCBkaXNwbGF5IGEgbmFtZSBpbiBhdXRvY29tcGxldGUgZmllbGQKICAgICAgICAgICAgIyBhbmQgZG8gbm90IHNldCB2YWx1ZXMgaW4gaGlkZGVuIGZpZWxkcyBhcyB0aGUKICAgICAgICAgICAgIyB1c2VyIHdhcyBhbHJlYWR5IGFkZGVkCiAgICAgICAgICAgIGRlbGV0ZSBAR2V0UGFyYW17cXcoTmV3Q0FCTWVtYmVyIE5ld0NBQk1lbWJlclNlbGVjdGVkIE5ld0NBQk1lbWJlclR5cGUpfTsKICAgICAgICB9CgogICAgICAgICMgaWYgbWVtYmVyIGlzIGludmFsaWQKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlcnZlckVycm9ye05ld0NBQk1lbWJlckVycm9yfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAjIHJlc2V0IHRoZSAic2F2ZSIgc3ViYWN0aW9uLCBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byBzaG93IHRoZSB1cGRhdGVkIG1lbWJlciBsaXN0CiAgICAgICAgJFNlbGYtPntTdWJhY3Rpb259ID0gJyc7CiAgICB9CgogICAgIyBzYXZlIHRoZSBDQUIgdGVtcGxhdGUKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTYXZlJyApIHsKCiAgICAgICAgIyB1cGRhdGUgdGhlIHRlbXBsYXRlCiAgICAgICAgbXkgJFVwZGF0ZVN1Y2Nlc3MgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlVXBkYXRlKAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRHZXRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgQ29udGVudCAgICA9PiAkR2V0UGFyYW17VGVtcGxhdGVDb250ZW50fSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRVcGRhdGVTdWNjZXNzKSB7CgogICAgICAgICAgICAjIHJlZGlyZWN0IHRvIHRlbXBsYXRlIG92ZXJ2aWV3CiAgICAgICAgICAgICMgbG9hZCBuZXcgVVJMIGluIHBhcmVudCB3aW5kb3cgYW5kIGNsb3NlIHBvcHVwCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Qb3B1cENsb3NlKAogICAgICAgICAgICAgICAgVVJMID0+ICJBY3Rpb249QWdlbnRJVFNNVGVtcGxhdGVPdmVydmlldyIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9CiAgICAgICAgICAgICAgICAgICAgLT5UcmFuc2xhdGUoICdXYXMgbm90IGFibGUgdG8gdXBkYXRlIFRlbXBsYXRlICIlcyIhJywgJEdldFBhcmFte1RlbXBsYXRlSUR9ICksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgQ0FCIGNvbnRhaW5zIGFueW9uZQogICAgaWYgKCBAeyAkQ0FCUmVmZXJlbmNlLT57Q0FCQWRkfS0+e0NBQkFnZW50c30gfSB8fCBAeyAkQ0FCUmVmZXJlbmNlLT57Q0FCQWRkfS0+e0NBQkN1c3RvbWVyc30gfSApCiAgICB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ0NBQk1lbWJlclRhYmxlJyApOwogICAgfQoKICAgIFVTRVJJRDoKICAgIGZvciBteSAkVXNlcklEICggQHsgJENBQlJlZmVyZW5jZS0+e0NBQkFkZH0tPntDQUJBZ2VudHN9IH0gKSB7CgogICAgICAgICMgZ2V0IHVzZXIgZGF0YQogICAgICAgIG15ICVVc2VyRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICApOwoKICAgICAgICAjIG5leHQgaWYgbm8gdXNlciBkYXRhIGNhbiBiZSBmb3VuZAogICAgICAgIG5leHQgVVNFUklEIGlmICElVXNlckRhdGE7CgogICAgICAgICMgZGlzcGxheSBjYWIgbWVtYmVyIGluZm8KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQ0FCTWVtYmVyUm93JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBVc2VyVHlwZSAgICAgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgICAgICBJbnRlcm5hbFVzZXJUeXBlID0+ICdDQUJBZ2VudHMnLAogICAgICAgICAgICAgICAgJVVzZXJEYXRhLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IGFsbCBjdXN0b21lciBtZW1iZXJzIG9mIENBQgogICAgQ1VTVE9NRVJMT0dJTjoKICAgIGZvciBteSAkQ3VzdG9tZXJMb2dpbiAoIEB7ICRDQUJSZWZlcmVuY2UtPntDQUJBZGR9LT57Q0FCQ3VzdG9tZXJzfSB9ICkgewoKICAgICAgICAjIGdldCB1c2VyIGRhdGEKICAgICAgICBteSAlQ3VzdG9tZXJVc2VyRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKS0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgVXNlciAgPT4gJEN1c3RvbWVyTG9naW4sCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBuZXh0IGlmIG5vIHVzZXIgZGF0YSBjYW4gYmUgZm91bmQKICAgICAgICBuZXh0IENVU1RPTUVSTE9HSU4gaWYgISVDdXN0b21lclVzZXJEYXRhOwoKICAgICAgICAjIGRpc3BsYXkgY2FiIG1lbWJlciBpbmZvCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0NBQk1lbWJlclJvdycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVXNlclR5cGUgICAgICAgICA9PiAnQ3VzdG9tZXInLAogICAgICAgICAgICAgICAgSW50ZXJuYWxVc2VyVHlwZSA9PiAnQ0FCQ3VzdG9tZXJzJywKICAgICAgICAgICAgICAgICVDdXN0b21lclVzZXJEYXRhLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXJpYWxpemUgdGhlIENBQiB0byBiZSB1c2VkIGFzIHBhcmFtZXRlciBpbiBoaWRkZW4gZmllbGQKICAgICRHZXRQYXJhbXtUZW1wbGF0ZUNvbnRlbnR9ID0gJFNlbGYtPl9DQUJTZXJpYWxpemUoCiAgICAgICAgQ29udGVudCA9PiAkQ0FCUmVmZXJlbmNlLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgIyBzZWFyY2ggaW5pdAogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnQ0FCTWVtYmVyU2VhcmNoSW5pdCcsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIEl0ZW1JRCA9PiAnTmV3Q0FCTWVtYmVyJywKICAgICAgICB9LAogICAgKTsKCiAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmlnYXRpb24KICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgVGl0bGUgPT4gVHJhbnNsYXRhYmxlKCdFZGl0IENBQiBUZW1wbGF0ZScpLAogICAgICAgIFR5cGUgID0+ICdTbWFsbCcsCiAgICApOwoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVRlbXBsYXRlRWRpdENBQicsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyRUZW1wbGF0ZX0sCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgJVNlcnZlckVycm9yLAogICAgICAgIH0sCiAgICApOwoKICAgICMgYWRkIGZvb3RlcgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgpzdWIgX0lzTWVtYmVyRGVsZXRpb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGRvIG5vdCBkZXRlY3QgZGVsZXRpb24gd2hlbiBubyBzdWJhY3Rpb24gaXMgZ2l2ZW4KICAgIHJldHVybiBpZiAhJFNlbGYtPntTdWJhY3Rpb259OwoKICAgICMgaW5mbyBhYm91dCB3aGF0IHRvIGRlbGV0ZQogICAgbXkgJURlbGV0ZUluZm87CgogICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBjaGVjayBwb3NzaWJsZSBhZ2VudCBpZHMKICAgIEFHRU5USUQ6CiAgICBmb3IgbXkgJEFnZW50SUQgKCBAeyAkUGFyYW17Q0FCUmVmZXJlbmNlfS0+e0NBQkFkZH0tPntDQUJBZ2VudHN9IH0gKSB7CiAgICAgICAgaWYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRGVsZXRlQ0FCQWdlbnRzJyAuICRBZ2VudElEICkgKSB7CgogICAgICAgICAgICAjIHNhdmUgaW5mbwogICAgICAgICAgICAlRGVsZXRlSW5mbyA9ICgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0NBQkFnZW50cycsCiAgICAgICAgICAgICAgICBJRCAgID0+ICRBZ2VudElELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbGFzdCBBR0VOVElEOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICElRGVsZXRlSW5mbyApIHsKCiAgICAgICAgIyBjaGVjayBwb3NzaWJsZSBjdXN0b21lciBpZHMKICAgICAgICBDVVNUT01FUklEOgogICAgICAgIGZvciBteSAkQ3VzdG9tZXJJRCAoIEB7ICRQYXJhbXtDQUJSZWZlcmVuY2V9LT57Q0FCQWRkfS0+e0NBQkN1c3RvbWVyc30gfSApIHsKICAgICAgICAgICAgaWYgKCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRGVsZXRlQ0FCQ3VzdG9tZXJzJyAuICRDdXN0b21lcklEICkgKSB7CgogICAgICAgICAgICAgICAgIyBzYXZlIGluZm8KICAgICAgICAgICAgICAgICVEZWxldGVJbmZvID0gKAogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0NBQkN1c3RvbWVycycsCiAgICAgICAgICAgICAgICAgICAgSUQgICA9PiAkQ3VzdG9tZXJJRCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbGFzdCBDVVNUT01FUklEOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlRGVsZXRlSW5mbzsKfQoKc3ViIF9Jc05ld0NBQk1lbWJlck9rIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBUaGUgbWVtYmVyIGluZm8gd2lsbCBiZSByZXR1cm5lZC4KICAgIG15ICVNZW1iZXJJbmZvOwoKICAgICMgQ0FCQ3VzdG9tZXJzIG9yIENBQkFnZW50cz8KICAgIG15ICRNZW1iZXJUeXBlID0gJFBhcmFte05ld0NBQk1lbWJlclR5cGV9OwoKICAgICMgbWVtYmVyIGxvb2t1cAogICAgbXkgJUN1cnJlbnRNZW1iZXJMb29rdXA7CgogICAgIyBhbiBhZ2VudCBpcyByZXF1ZXN0ZWQgdG8gYmUgYWRkZWQKICAgIGlmICggJE1lbWJlclR5cGUgZXEgJ0NBQkFnZW50cycgKSB7CgogICAgICAgICMgZ2V0IHVzZXIgb2JqZWN0CiAgICAgICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKICAgICAgICBteSAlVXNlciA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtOZXdDQUJNZW1iZXJTZWxlY3RlZH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCVVc2VyKSB7CgogICAgICAgICAgICAjIGNoZWNrIGN1cnJlbnQgdXNlcnMKICAgICAgICAgICAgVVNFUklEOgogICAgICAgICAgICBmb3IgbXkgJFVzZXJJRCAoIEB7ICRQYXJhbXtDQUJSZWZlcmVuY2V9LT57Q0FCQWRkfS0+eyRNZW1iZXJUeXBlfSB9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHVzZXIgZGF0YQogICAgICAgICAgICAgICAgbXkgJVVzZXJEYXRhID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICAgICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSBpbnZhbGlkIHVzZXJzIGZyb20gQ0FCCiAgICAgICAgICAgICAgICBuZXh0IFVTRVJJRCBpZiAhJFVzZXJEYXRhe1VzZXJJRH07CgogICAgICAgICAgICAgICAgIyBzdG9yZSBpbiBsb29rdXAKICAgICAgICAgICAgICAgICRDdXJyZW50TWVtYmVyTG9va3VweyRVc2VySUR9ID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBDb21wYXJlIGlucHV0IHZhbHVlIHdpdGggdXNlciBkYXRhLgogICAgICAgICAgICAjIExvb2sgZm9yIGV4YWN0IG1hdGNoIGF0IGJlZ2lubmluZywKICAgICAgICAgICAgIyBhcyAkVXNlcntVc2VyTGFzdG5hbWV9IG1pZ2h0IGNvbnRhaW4gYSB0cmFpbGluZyAnb3V0IG9mIG9mZmljZScgbm90ZS4KICAgICAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyB3b24ndCBjYXRjaCBkZWxldGlvbnMgb2YgJFBhcmFte05ld0NBQk1lbWJlcn0gYXQgdGhlIGVuZC4KICAgICAgICAgICAgbXkgJENoZWNrU3RyaW5nID0gc3ByaW50ZiAnIiVzICVzIiA8JXM+JywKICAgICAgICAgICAgICAgICRVc2Vye1VzZXJGaXJzdG5hbWV9LAogICAgICAgICAgICAgICAgJFVzZXJ7VXNlckxhc3RuYW1lfSwKICAgICAgICAgICAgICAgICRVc2Vye1VzZXJFbWFpbH07CiAgICAgICAgICAgIGlmICggaW5kZXgoICRDaGVja1N0cmluZywgJFBhcmFte05ld0NBQk1lbWJlcn0gKSA9PSAwICkgewoKICAgICAgICAgICAgICAgICRDdXJyZW50TWVtYmVyTG9va3VweyAkVXNlcntVc2VySUR9IH0gPSAxOwoKICAgICAgICAgICAgICAgICMgc2F2ZSBtZW1iZXIgaW5mb3MKICAgICAgICAgICAgICAgICVNZW1iZXJJbmZvID0gKAogICAgICAgICAgICAgICAgICAgICRNZW1iZXJUeXBlID0+IFsgc29ydCBrZXlzICVDdXJyZW50TWVtYmVyTG9va3VwIF0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgYW4gY3VzdG9tZXIgaXMgcmVxdWVzdGVkIHRvIGJlIGFkZGVkCiAgICBlbHNlIHsKCiAgICAgICAgIyBnZXQgY3VzdG9tZXIgdXNlciBvYmplY3QKICAgICAgICBteSAkQ3VzdG9tZXJVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpOwoKICAgICAgICAjIGNoZWNrIGN1cnJlbnQgY3VzdG9tZXIgdXNlcnMKICAgICAgICBDVVNUT01FUlVTRVI6CiAgICAgICAgZm9yIG15ICRDdXN0b21lclVzZXIgKCBAeyAkUGFyYW17Q0FCUmVmZXJlbmNlfS0+e0NBQkFkZH0tPnskTWVtYmVyVHlwZX0gfSApIHsKCiAgICAgICAgICAgICMgZ2V0IGN1c3RvbWVyIHVzZXIgZGF0YQogICAgICAgICAgICBteSAlQ3VzdG9tZXJVc2VyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgICAgICBVc2VyICA9PiAkQ3VzdG9tZXJVc2VyLAogICAgICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVtb3ZlIGludmFsaWQgY3VzdG9tZXIgdXNlcnMgZnJvbSBDQUIKICAgICAgICAgICAgbmV4dCBDVVNUT01FUlVTRVIgaWYgISVDdXN0b21lclVzZXJEYXRhOwoKICAgICAgICAgICAgIyBzdG9yZSBpbiBsb29rdXAKICAgICAgICAgICAgJEN1cnJlbnRNZW1iZXJMb29rdXB7JEN1c3RvbWVyVXNlcn0gPSAxOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiBjdXN0b21lciBjYW4gYmUgZm91bmQKICAgICAgICBteSAlQ3VzdG9tZXJVc2VyID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJTZWFyY2goCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkUGFyYW17TmV3Q0FCTWVtYmVyU2VsZWN0ZWR9LAogICAgICAgICk7CgogICAgICAgIGlmICggJEN1c3RvbWVyVXNlcnsgJFBhcmFte05ld0NBQk1lbWJlclNlbGVjdGVkfSB9ICkgewoKICAgICAgICAgICAgJEN1cnJlbnRNZW1iZXJMb29rdXB7ICRQYXJhbXtOZXdDQUJNZW1iZXJTZWxlY3RlZH0gfSA9IDE7CgogICAgICAgICAgICAjIHNhdmUgbWVtYmVyIGluZm9zCiAgICAgICAgICAgICVNZW1iZXJJbmZvID0gKAogICAgICAgICAgICAgICAgJE1lbWJlclR5cGUgPT4gWyBzb3J0IGtleXMgJUN1cnJlbnRNZW1iZXJMb29rdXAgXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICVNZW1iZXJJbmZvOwp9CgpzdWIgX0NBQkRlU2VyaWFsaXplIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBDb250ZW50KSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB0aGUgUGVybCBkYXRhc3RydWN0dXJlCiAgICBteSAkVkFSMTsKCiAgICByZXR1cm4gaWYgIWV2YWwgIlwkVkFSMSA9ICRQYXJhbXtDb250ZW50fTsgMTsiOyAgICAjIyBubyBjcml0aWMKCiAgICByZXR1cm4gaWYgISRWQVIxOwogICAgcmV0dXJuIGlmIHJlZiAkVkFSMSBuZSAnSEFTSCc7CgogICAgcmV0dXJuICRWQVIxOwp9CgpzdWIgX0NBQlNlcmlhbGl6ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgQ29udGVudCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBubyBpbmRlbnRhdGlvbiAoc2F2ZXMgc3BhY2UpCiAgICBsb2NhbCAkRGF0YTo6RHVtcGVyOjpJbmRlbnQgPSAwOwoKICAgICMgZG8gbm90IHVzZSBjcm9zcy1yZWZlcmVuY2luZwogICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6RGVlcGNvcHkgPSAxOwoKICAgICMgc2VyaWFsaXplIHRoZSBkYXRhIChkbyBub3QgdXNlICRWQVIxLCBidXQgJFRlbXBsYXRlRGF0YSBmb3IgRHVtcGVyIG91dHB1dCkKICAgIG15ICRTZXJpYWxpemVkRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPkR1bXAoICRQYXJhbXtDb250ZW50fSwgJ2JpbmFyeScgKTsKCiAgICByZXR1cm4gJFNlcmlhbGl6ZWREYXRhOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgIyBnZXQgY29uZmlnIGZvciBmcm9udGVuZAogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBjaGVjayBwZXJtaXNzaW9ucwogICAgbXkgJEFjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgVHlwZSAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgIEFjdGlvbiA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGVycm9yIHNjcmVlbgogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9uIScsICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259ICksCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBuZWVkZWQgVGVtcGxhdGVJRAogICAgbXkgJFRlbXBsYXRlSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnVGVtcGxhdGVJRCcgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFRlbXBsYXRlSUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gVGVtcGxhdGVJRCBpcyBnaXZlbiEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdGVtcGxhdGUgb2JqZWN0CiAgICBteSAkVGVtcGxhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6VGVtcGxhdGUnKTsKCiAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICBteSAkVGVtcGxhdGUgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISRUZW1wbGF0ZSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1RlbXBsYXRlICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlIScsICRUZW1wbGF0ZUlEICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgY3JlYXRlIGEgbmV3IGNoYW5nZSBvciB3b3Jrb3JkZXIgc28gaXQgY2FuIGJlIGVkaXRlZAogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1RlbXBsYXRlRWRpdENvbnRlbnQnICkgewoKICAgICAgICAjIGdldCBjdXJyZW50IHN5c3RlbSB0aW1lIGluIGVwb2NoIHNlY29uZHMKICAgICAgICBteSAkU3lzdGVtVGltZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyktPlN5c3RlbVRpbWUoKTsKCiAgICAgICAgIyBnZXQgdXNlciBvYmplY3QKICAgICAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgICAgICMgZ2V0IGV4aXN0aW5nIHVzZXIgcHJlZmVyZW5jZXMKICAgICAgICBteSAlVXNlclByZWZlcmVuY2VzID0gJFVzZXJPYmplY3QtPkdldFByZWZlcmVuY2VzKAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHByZWZlcmVuY2UgdG8gc2VlIHdoaWNoIHRlbXBsYXRlcyBhcmUgaW4gZWRpdCBieSB0aGUgdXNlcgogICAgICAgIG15ICRUZW1wbGF0ZUVkaXRQcmVmZXJlbmNlU3RyaW5nID0gJFVzZXJQcmVmZXJlbmNlc3tVc2VySVRTTUNoYW5nZU1hbmFnZW1lbnRUZW1wbGF0ZUVkaXR9IHx8ICcnOwoKICAgICAgICAjIGNvbnZlcnQgdG8gbG9va3VwIGhhc2gKICAgICAgICBteSBARWRpdGVkVGVtcGxhdGVzID0gc3BsaXQgbS87LywgJFRlbXBsYXRlRWRpdFByZWZlcmVuY2VTdHJpbmc7CiAgICAgICAgbXkgJU9iamVjdDJUZW1wbGF0ZTsKICAgICAgICBmb3IgbXkgJFN0cmluZyAoQEVkaXRlZFRlbXBsYXRlcykgewogICAgICAgICAgICBteSAoICRPYmplY3QsICRUZW1wbGF0ZSApID0gc3BsaXQgbS86Oi8sICRTdHJpbmc7CiAgICAgICAgICAgICRPYmplY3QyVGVtcGxhdGV7JE9iamVjdH0gPSAkVGVtcGxhdGU7CiAgICAgICAgfQoKICAgICAgICAjIGVkaXQgYSBjaGFuZ2UgdGVtcGxhdGUKICAgICAgICBpZiAoICRUZW1wbGF0ZS0+e1R5cGV9IGVxICdJVFNNQ2hhbmdlJyApIHsKCiAgICAgICAgICAgICMgY3JlYXRlIGNoYW5nZSBiYXNlZCBvbiB0aGUgdGVtcGxhdGUKICAgICAgICAgICAgbXkgJENoYW5nZUlEID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZURlU2VyaWFsaXplKAogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICAgID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICAgICAgTW92ZVRpbWVUeXBlICAgID0+ICdQbGFubmVkU3RhcnRUaW1lJywKICAgICAgICAgICAgICAgIE5ld1RpbWVJbkVwb2NoZSA9PiAkU3lzdGVtVGltZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNob3cgZXJyb3IgbWVzc2FnZSwgd2hlbiBhZGRpbmcgZmFpbGVkCiAgICAgICAgICAgIGlmICggISRDaGFuZ2VJRCApIHsKCiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlIGZyb20gdGVtcGxhdGUhJyksCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzdG9yZSB0aGUgY2hhbmdlIGlkIHRvIHRlbXBsYXRlIGlkIHJlZmVyZW5jZQogICAgICAgICAgICAkT2JqZWN0MlRlbXBsYXRleyAnQ2hhbmdlSUQnIC4gJENoYW5nZUlEIH0gPSAkVGVtcGxhdGVJRDsKCiAgICAgICAgICAgICMgY29udmVydCB0byBzdHJpbmcKICAgICAgICAgICAgJFRlbXBsYXRlRWRpdFByZWZlcmVuY2VTdHJpbmcgPSAnJzsKICAgICAgICAgICAgZm9yIG15ICRPYmplY3QgKCBzb3J0IGtleXMgJU9iamVjdDJUZW1wbGF0ZSApIHsKICAgICAgICAgICAgICAgICRUZW1wbGF0ZUVkaXRQcmVmZXJlbmNlU3RyaW5nIC49ICRPYmplY3QgLiAnOjonIC4gJE9iamVjdDJUZW1wbGF0ZXskT2JqZWN0fSAuICc7JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzYXZlIHByZWZlcmVuY2VzCiAgICAgICAgICAgICRVc2VyT2JqZWN0LT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIEtleSAgICA9PiAnVXNlcklUU01DaGFuZ2VNYW5hZ2VtZW50VGVtcGxhdGVFZGl0JywKICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkVGVtcGxhdGVFZGl0UHJlZmVyZW5jZVN0cmluZywKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJlZGlyZWN0IHRvIGNoYW5nZSB6b29tIG1hc2ssIHdoZW4gYWRkaW5nIHdhcyBzdWNjZXNzZnVsCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRJVFNNQ2hhbmdlWm9vbTtDaGFuZ2VJRD0kQ2hhbmdlSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBlZGl0IGEgd29ya29yZGVyIHRlbXBsYXRlCiAgICAgICAgZWxzaWYgKCAkVGVtcGxhdGUtPntUeXBlfSBlcSAnSVRTTVdvcmtPcmRlcicgKSB7CgogICAgICAgICAgICAjIGFkZCBhIGR1bW15IGNoYW5nZSwgbmVlZGVkIHRvIGNvbnRhaW4gdGhlIHdvcmtvcmRlcgogICAgICAgICAgICBteSAkQ2hhbmdlSUQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAkU2VsZi0+e0NvbmZpZ30tPntEZWZhdWx0Q2hhbmdlVGl0bGV9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UsIHdoZW4gYWRkaW5nIGZhaWxlZAogICAgICAgICAgICBpZiAoICEkQ2hhbmdlSUQgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ1dhcyBub3QgYWJsZSB0byBjcmVhdGUgY2hhbmdlIScpLAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY3JlYXRlIHdvcmtvcmRlciBiYXNlZCBvbiB0aGUgdGVtcGxhdGUsIGFuZCBhZGQgaXQgdG8gdGhlIGR1bW15IGNoYW5nZQogICAgICAgICAgICBteSAkV29ya09yZGVySUQgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlRGVTZXJpYWxpemUoCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgVGVtcGxhdGVJRCAgICAgID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICAgICAgTW92ZVRpbWVUeXBlICAgID0+ICdQbGFubmVkU3RhcnRUaW1lJywKICAgICAgICAgICAgICAgIE5ld1RpbWVJbkVwb2NoZSA9PiAkU3lzdGVtVGltZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNob3cgZXJyb3IgbWVzc2FnZSwgd2hlbiBhZGRpbmcgZmFpbGVkCiAgICAgICAgICAgIGlmICggISRXb3JrT3JkZXJJRCApIHsKCiAgICAgICAgICAgICAgICAjIHNob3cgZXJyb3IgbWVzc2FnZSwgd2hlbiBhZGRpbmcgZmFpbGVkCiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ1dhcyBub3QgYWJsZSB0byBjcmVhdGUgd29ya29yZGVyIGZyb20gdGVtcGxhdGUhJyksCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzdG9yZSB0aGUgd29ya29yZGVyIGlkIHRvIHRlbXBsYXRlIGlkIHJlZmVyZW5jZQogICAgICAgICAgICAkT2JqZWN0MlRlbXBsYXRleyAnV29ya09yZGVySUQnIC4gJFdvcmtPcmRlcklEIH0gPSAkVGVtcGxhdGVJRDsKCiAgICAgICAgICAgICMgY29udmVydCB0byBzdHJpbmcKICAgICAgICAgICAgJFRlbXBsYXRlRWRpdFByZWZlcmVuY2VTdHJpbmcgPSAnJzsKICAgICAgICAgICAgZm9yIG15ICRPYmplY3QgKCBzb3J0IGtleXMgJU9iamVjdDJUZW1wbGF0ZSApIHsKICAgICAgICAgICAgICAgICRUZW1wbGF0ZUVkaXRQcmVmZXJlbmNlU3RyaW5nIC49ICRPYmplY3QgLiAnOjonIC4gJE9iamVjdDJUZW1wbGF0ZXskT2JqZWN0fSAuICc7JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzYXZlIHByZWZlcmVuY2VzCiAgICAgICAgICAgICRVc2VyT2JqZWN0LT5TZXRQcmVmZXJlbmNlcygKICAgICAgICAgICAgICAgIEtleSAgICA9PiAnVXNlcklUU01DaGFuZ2VNYW5hZ2VtZW50VGVtcGxhdGVFZGl0JywKICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkVGVtcGxhdGVFZGl0UHJlZmVyZW5jZVN0cmluZywKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJlZGlyZWN0IHRvIHdvcmtvcmRlciB6b29tIG1hc2ssIHdoZW4gYWRkaW5nIHdhcyBzdWNjZXNzZnVsCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRJVFNNV29ya09yZGVyWm9vbTtXb3JrT3JkZXJJRD0kV29ya09yZGVySUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgYSBkaWFsb2cgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IGNoYW5nZSBvciB3b3Jrb3JkZXIgdG8gYmUgZWRpdGVkCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnVGVtcGxhdGVFZGl0Q29udGVudFNob3dEaWFsb2cnICkgewoKICAgICAgICAjIHNob3cgdGhlIGVkaXQgY29udGVudCBkaWFsb2cKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRWRpdENvbnRlbnREaWFsb2cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICV7JFRlbXBsYXRlfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgdGhlIGNvcnJlY3QgYmxvY2sgZGVwZW5kaW5nIG9uIHRlbXBsYXRlIHR5cGUKICAgICAgICBpZiAoICRUZW1wbGF0ZS0+e1R5cGV9IGVxICdJVFNNQ2hhbmdlJyApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdDaGFuZ2VUZW1wbGF0ZScsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAleyRUZW1wbGF0ZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRUZW1wbGF0ZS0+e1R5cGV9IGVxICdJVFNNV29ya09yZGVyJyApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdXb3JrT3JkZXJUZW1wbGF0ZScsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAleyRUZW1wbGF0ZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgY29udGVudAogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNVGVtcGxhdGVFZGl0Q29udGVudCcsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICAleyRUZW1wbGF0ZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBidWlsZCB0aGUgcmV0dXJuZWQgZGF0YSBzdHJ1Y3R1cmUKICAgICAgICBteSAlRGF0YSA9ICgKICAgICAgICAgICAgSFRNTCAgICAgICA9PiAkT3V0cHV0LAogICAgICAgICAgICBEaWFsb2dUeXBlID0+ICdDb25maXJtYXRpb24nLAogICAgICAgICk7CgogICAgICAgICMgcmV0dXJuIEpTT04tU3RyaW5nIGJlY2F1c2Ugb2YgQUpBWC1Nb2RlCiAgICAgICAgbXkgJE91dHB1dEpTT04gPSAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKCBEYXRhID0+IFwlRGF0YSApOwoKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9JyAuICRMYXlvdXRPYmplY3QtPntDaGFyc2V0fSwKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJE91dHB1dEpTT04sCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZXJyb3Igc2NyZWVuCiAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIScsICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259ICksCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHN0b3JlIGxhc3Qgc2NyZWVuLCB1c2VkIGZvciBiYWNrbGlua3MKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpLT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW5UZW1wbGF0ZXMnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IHNvcnRpbmcgcGFyYW1ldGVycwogICAgbXkgJFNvcnRCeSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTb3J0QnknICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnU29ydEJ5OjpEZWZhdWx0J30KICAgICAgICB8fCAnVGVtcGxhdGVJRCc7CgogICAgIyBnZXQgb3JkZXJpbmcgcGFyYW1ldGVycwogICAgbXkgJE9yZGVyQnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXJCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydPcmRlcjo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ1VwJzsKCiAgICBteSBAU29ydEJ5QXJyYXkgID0gKCRTb3J0QnkpOwogICAgbXkgQE9yZGVyQnlBcnJheSA9ICgkT3JkZXJCeSk7CgogICAgIyBpbnZlc3RpZ2F0ZSByZWZyZXNoCiAgICBteSAkUmVmcmVzaCA9ICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA/IDYwICogJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9IDogdW5kZWY7CgogICAgIyBzdGFydGluZyB3aXRoIHBhZ2UgLi4uCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCBSZWZyZXNoID0+ICRSZWZyZXNoICk7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKICAgICRMYXlvdXRPYmplY3QtPlByaW50KCBPdXRwdXQgPT4gXCRPdXRwdXQgKTsKICAgICRPdXRwdXQgPSAnJzsKCiAgICAjIGZpbmQgb3V0IHdoaWNoIGNvbHVtbnMgc2hvdWxkIGJlIHNob3duCiAgICBteSBAU2hvd0NvbHVtbnM7CiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e1Nob3dDb2x1bW5zfSApIHsKCiAgICAgICAgIyBnZXQgYWxsIHBvc3NpYmxlIGNvbHVtbnMgZnJvbSBjb25maWcKICAgICAgICBteSAlUG9zc2libGVDb2x1bW4gPSAleyAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gfTsKCiAgICAgICAgIyBnZXQgdGhlIGNvbHVtbiBuYW1lcyB0aGF0IHNob3VsZCBiZSBzaG93bgogICAgICAgIEBTaG93Q29sdW1ucyA9IGdyZXAgeyAkUG9zc2libGVDb2x1bW57JF99IH0ga2V5cyAlUG9zc2libGVDb2x1bW47CiAgICB9CgogICAgIyB0byBzdG9yZSB0aGUgZmlsdGVycwogICAgbXkgJUZpbHRlcnM7CgogICAgIyBnZXQgdGVtcGxhdGUgb2JqZWN0CiAgICBteSAkVGVtcGxhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6VGVtcGxhdGUnKTsKCiAgICAjIHNldCBvdGhlciBmaWx0ZXJzIGJhc2VkIG9uIHRlbXBsYXRlIHR5cGUKICAgIGlmICggJFNlbGYtPntDb25maWd9LT57J0ZpbHRlcjo6VGVtcGxhdGVUeXBlcyd9ICkgewoKICAgICAgICAjIGRlZmluZSBwb3NpdGlvbiBvZiB0aGUgZmlsdGVyIGluIHRoZSBmcm9udGVuZAogICAgICAgIG15ICRQcmlvQ291bnRlciA9IDEwMDA7CgogICAgICAgICMgZ2V0IGFsbCB0ZW1wbGF0ZSB0eXBlcyB0aGF0IHNob3VsZCBiZSB1c2VkIGFzIGZpbHRlcnMKICAgICAgICBURU1QTEFURVRZUEU6CiAgICAgICAgZm9yIG15ICRUZW1wbGF0ZVR5cGUgKCBAeyAkU2VsZi0+e0NvbmZpZ30tPnsnRmlsdGVyOjpUZW1wbGF0ZVR5cGVzJ30gfSApIHsKCiAgICAgICAgICAgICMgZG8gbm90IHVzZSBlbXB0eSB0ZW1wbGF0ZSB0eXBlcwogICAgICAgICAgICBuZXh0IFRFTVBMQVRFVFlQRSBpZiAhJFRlbXBsYXRlVHlwZTsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIHRlbXBsYXRlIHR5cGUgaXMgdmFsaWQgYnkgbG9va2luZyB1cCB0aGUgaWQKICAgICAgICAgICAgbXkgJFRlbXBsYXRlVHlwZUlEID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZVR5cGVMb29rdXAoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZVR5cGUgPT4gJFRlbXBsYXRlVHlwZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZG8gbm90IHVzZSBpbnZhbGlkIHRlbXBsYXRlIHR5cGVzCiAgICAgICAgICAgIG5leHQgVEVNUExBVEVUWVBFIGlmICEkVGVtcGxhdGVUeXBlSUQ7CgogICAgICAgICAgICAjIGluY3JlYXNlIHRoZSBQcmlvQ291bnRlcgogICAgICAgICAgICAkUHJpb0NvdW50ZXIrKzsKCiAgICAgICAgICAgICMgYWRkIGZpbHRlciB3aXRoIHBhcmFtcyBmb3IgdGhlIHNlYXJjaCBtZXRob2QKICAgICAgICAgICAgJEZpbHRlcnN7JFRlbXBsYXRlVHlwZX0gPSB7CiAgICAgICAgICAgICAgICBOYW1lICAgPT4gJFRlbXBsYXRlVHlwZSwKICAgICAgICAgICAgICAgIFByaW8gICA9PiAkUHJpb0NvdW50ZXIsCiAgICAgICAgICAgICAgICBTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlVHlwZXMgICAgPT4gWyRUZW1wbGF0ZVR5cGVdLAogICAgICAgICAgICAgICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gXEBTb3J0QnlBcnJheSwKICAgICAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFxAT3JkZXJCeUFycmF5LAogICAgICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgPT4gMTAwMCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGZpbHRlciBwYXJhbXMKICAgICRTZWxmLT57RmlsdGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGaWx0ZXInICkgfHwgJ0FsbCc7CgogICAgIyBpZiBvbmx5IG9uZSBmaWx0ZXIgZXhpc3RzCiAgICBpZiAoIHNjYWxhciBrZXlzICVGaWx0ZXJzID09IDEgKSB7CgogICAgICAgICMgZ2V0IHRoZSBuYW1lIG9mIHRoZSBvbmx5IGZpbHRlcgogICAgICAgIG15ICgkRmlsdGVyTmFtZSkgPSBrZXlzICVGaWx0ZXJzOwoKICAgICAgICAjIGFjdGl2YXRlIHRoaXMgZmlsdGVyCiAgICAgICAgJFNlbGYtPntGaWx0ZXJ9ID0gJEZpbHRlck5hbWU7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBhZGQgZGVmYXVsdCBmaWx0ZXIsIHdoaWNoIHNob3dzIGFsbCBpdGVtcwogICAgICAgICRGaWx0ZXJze0FsbH0gPSB7CiAgICAgICAgICAgIE5hbWUgICA9PiAnQWxsJywKICAgICAgICAgICAgUHJpbyAgID0+IDEwMDAsCiAgICAgICAgICAgIFNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFxAU29ydEJ5QXJyYXksCiAgICAgICAgICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFxAT3JkZXJCeUFycmF5LAogICAgICAgICAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAxMDAwLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGZpbHRlciBpcyB2YWxpZAogICAgaWYgKCAhJEZpbHRlcnN7ICRTZWxmLT57RmlsdGVyfSB9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnSW52YWxpZCBGaWx0ZXI6ICVzIScsICRTZWxmLT57RmlsdGVyfSApLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZWFyY2ggdGVtcGxhdGVzIHdoaWNoIG1hdGNoIHRoZSBzZWxlY3RlZCBmaWx0ZXIKICAgIG15ICRJRHNSZWYgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlU2VhcmNoKAogICAgICAgICV7ICRGaWx0ZXJzeyAkU2VsZi0+e0ZpbHRlcn0gfS0+e1NlYXJjaH0gfSwKICAgICk7CgogICAgIyBkaXNwbGF5IGFsbCBuYXZiYXIgZmlsdGVycwogICAgbXkgJU5hdkJhckZpbHRlcjsKICAgIGZvciBteSAkRmlsdGVyICggc29ydCBrZXlzICVGaWx0ZXJzICkgewoKICAgICAgICAjIGNvdW50IHRoZSBudW1iZXIgb2YgaXRlbXMgZm9yIGVhY2ggZmlsdGVyCiAgICAgICAgbXkgJENvdW50ID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZVNlYXJjaCgKICAgICAgICAgICAgJXsgJEZpbHRlcnN7JEZpbHRlcn0tPntTZWFyY2h9IH0sCiAgICAgICAgICAgIFJlc3VsdCA9PiAnQ09VTlQnLAogICAgICAgICk7CgogICAgICAgICMgZGlzcGxheSB0aGUgbmF2YmFyIGZpbHRlcgogICAgICAgICROYXZCYXJGaWx0ZXJ7ICRGaWx0ZXJzeyRGaWx0ZXJ9LT57UHJpb30gfSA9IHsKICAgICAgICAgICAgQ291bnQgID0+ICRDb3VudCwKICAgICAgICAgICAgRmlsdGVyID0+ICRGaWx0ZXIsCiAgICAgICAgICAgICV7ICRGaWx0ZXJzeyRGaWx0ZXJ9IH0sCiAgICAgICAgfTsKICAgIH0KCiAgICAjIHNob3cgdGhlIGxpc3QKICAgIG15ICRMaW5rUGFnZSA9ICdGaWx0ZXI9JwogICAgICAgIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e0ZpbHRlcn0gKQogICAgICAgIC4gJztTb3J0Qnk9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNvcnRCeSApCiAgICAgICAgLiAnO09yZGVyQnk9JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJE9yZGVyQnkgKQogICAgICAgIC4gJzsnOwogICAgbXkgJExpbmtTb3J0ID0gJ0ZpbHRlcj0nCiAgICAgICAgLiAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57RmlsdGVyfSApCiAgICAgICAgLiAnOyc7CiAgICBteSAkTGlua0ZpbHRlciA9ICdTb3J0Qnk9JwogICAgICAgIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU29ydEJ5ICkKICAgICAgICAuICc7T3JkZXJCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkT3JkZXJCeSApCiAgICAgICAgLiAnOyc7CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPklUU01UZW1wbGF0ZUxpc3RTaG93KAoKICAgICAgICBUZW1wbGF0ZUlEcyA9PiAkSURzUmVmLAogICAgICAgIFRvdGFsICAgICAgID0+IHNjYWxhciBAeyRJRHNSZWZ9LAogICAgICAgIEZpbHRlciAgICAgID0+ICRTZWxmLT57RmlsdGVyfSwKICAgICAgICBGaWx0ZXJzICAgICA9PiBcJU5hdkJhckZpbHRlciwKICAgICAgICBGaWx0ZXJMaW5rICA9PiAkTGlua0ZpbHRlciwKCiAgICAgICAgVGl0bGVOYW1lID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnT3ZlcnZpZXc6IFRlbXBsYXRlJyksCgogICAgICAgIFRpdGxlVmFsdWUgPT4gJEZpbHRlcnN7ICRTZWxmLT57RmlsdGVyfSB9LT57TmFtZX0sCgogICAgICAgIEVudiAgICAgID0+ICRTZWxmLAogICAgICAgIExpbmtQYWdlID0+ICRMaW5rUGFnZSwKICAgICAgICBMaW5rU29ydCA9PiAkTGlua1NvcnQsCgogICAgICAgIFNob3dDb2x1bW5zID0+IFxAU2hvd0NvbHVtbnMsCiAgICAgICAgT3JkZXJCeSAgICAgPT4gJE9yZGVyQnksCiAgICAgICAgU29ydEJ5ICAgICAgPT4gJFNvcnRCeSwKICAgICk7CgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Vc2VyU2VhcmNoOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkSlNPTiA9ICcnOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBzZWFyY2ggdXNlcnMKICAgIGlmICggISRTZWxmLT57U3ViYWN0aW9ufSApIHsKCiAgICAgICAgIyBnZXQgcGFyYW0gb2JqZWN0CiAgICAgICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICAgICAjIGdldCBuZWVkZWQgcGFyYW1zCiAgICAgICAgbXkgJFNlYXJjaCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUZXJtJyApICAgfHwgJyc7CiAgICAgICAgbXkgJEdyb3VwcyA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdHcm91cHMnICkgfHwgJyc7CiAgICAgICAgbXkgJE1heFJlc3VsdHMgPSBpbnQoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdNYXhSZXN1bHRzJyApIHx8IDIwICk7CgogICAgICAgICMgZ2V0IGFsbCBtZW1iZXJzIG9mIHRoZSBncm91cHMKICAgICAgICBteSAlR3JvdXBVc2VyczsKICAgICAgICBpZiAoJEdyb3VwcykgewogICAgICAgICAgICBteSBAR3JvdXBOYW1lcyA9IHNwbGl0IC8sXHMrLywgJEdyb3VwczsKCiAgICAgICAgICAgIEdST1VQTkFNRToKICAgICAgICAgICAgZm9yIG15ICRHcm91cE5hbWUgKEBHcm91cE5hbWVzKSB7CgogICAgICAgICAgICAgICAgIyBhbGxvdyB0cmFpbGluZyBjb21tYQogICAgICAgICAgICAgICAgbmV4dCBHUk9VUE5BTUUgaWYgISRHcm91cE5hbWU7CgogICAgICAgICAgICAgICAgIyBnZXQgZ3JvdXAgb2JqZWN0CiAgICAgICAgICAgICAgICBteSAkR3JvdXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKCiAgICAgICAgICAgICAgICBteSAkR3JvdXBJRCA9ICRHcm91cE9iamVjdC0+R3JvdXBMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgR3JvdXAgPT4gJEdyb3VwTmFtZSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBHUk9VUE5BTUUgaWYgISRHcm91cElEOwoKICAgICAgICAgICAgICAgICMgZ2V0IHVzZXJzIGluIGdyb3VwCiAgICAgICAgICAgICAgICBteSAlVXNlcnMgPSAkR3JvdXBPYmplY3QtPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICAgICAgICAgICAgICBHcm91cElEID0+ICRHcm91cElELAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ3JvJywKICAgICAgICAgICAgICAgICAgICBSZXN1bHQgID0+ICdIQVNIJywKICAgICAgICAgICAgICAgICAgICBDYWNoZWQgID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15IEBVc2VySURzID0ga2V5cyAlVXNlcnM7CiAgICAgICAgICAgICAgICBAR3JvdXBVc2Vyc3tAVXNlcklEc30gPSBAVXNlcklEczsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdXNlciBvYmplY3QKICAgICAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgICAgICMgZ2V0IHVzZXIgbGlzdAogICAgICAgIG15ICVVc2VyTGlzdCA9ICRVc2VyT2JqZWN0LT5Vc2VyU2VhcmNoKAogICAgICAgICAgICBTZWFyY2ggPT4gJFNlYXJjaCwKICAgICAgICAgICAgVmFsaWQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJE1heFJlc3VsdENvdW50ID0gJE1heFJlc3VsdHM7CgogICAgICAgICMgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIHNlbnQgYXMgcmVzcG9uc2UKICAgICAgICBteSBARGF0YTsKCiAgICAgICAgVVNFUklEOgogICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCB7ICRVc2VyTGlzdHskYX0gY21wICRVc2VyTGlzdHskYn0gfSBrZXlzICVVc2VyTGlzdCApIHsKCiAgICAgICAgICAgICMgaWYgZ3JvdXBzIGFyZSByZXF1aXJlZCBhbmQgdXNlciBpcyBub3QgbWVtYmVyIG9mIG9uZSBvZiB0aGUgZ3JvdXBzCiAgICAgICAgICAgICMgdGhlbiBza2lwIHRoZSB1c2VyCiAgICAgICAgICAgIGlmICggJEdyb3VwcyAmJiAhJEdyb3VwVXNlcnN7JFVzZXJJRH0gKSB7CiAgICAgICAgICAgICAgICBuZXh0IFVTRVJJRDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBUaGUgdmFsdWVzIGluICVVc2VyTGlzdCBhcmUgaW4gdGhlIGZvcm06ICdtbSBNYXggTXVzdGVybWFubicuCiAgICAgICAgICAgICMgU28gYXNzZW1ibGUgYSBuZWF0ZXIgc3RyaW5nIGZvciBkaXNwbGF5LgogICAgICAgICAgICAjIChBY3R1YWxseSBVc2VyU2VhcmNoKCkgY29udGFpbnMgY29kZSBmb3IgZm9ybWF0aW5nLCBidXQgdGhhdCBpcyB1c3VhbGx5IG5vdCBjYWxsZWQuKQogICAgICAgICAgICBteSAlVXNlciA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICAgICAgVmFsaWQgID0+ICRQYXJhbXtWYWxpZH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkVXNlclZhbHVlID0gc3ByaW50ZiAnIiVzICVzIiA8JXM+JywKICAgICAgICAgICAgICAgICRVc2Vye1VzZXJGaXJzdG5hbWV9LAogICAgICAgICAgICAgICAgJFVzZXJ7VXNlckxhc3RuYW1lfSwKICAgICAgICAgICAgICAgICRVc2Vye1VzZXJFbWFpbH07CgogICAgICAgICAgICBwdXNoIEBEYXRhLCB7CiAgICAgICAgICAgICAgICBVc2VyS2V5ICAgPT4gJFVzZXJJRCwKICAgICAgICAgICAgICAgIFVzZXJWYWx1ZSA9PiAkVXNlclZhbHVlLAogICAgICAgICAgICB9OwoKICAgICAgICAgICAgJE1heFJlc3VsdENvdW50LS07CiAgICAgICAgICAgIGxhc3QgVVNFUklEIGlmICRNYXhSZXN1bHRDb3VudCA8PSAwOwogICAgICAgIH0KCiAgICAgICAgIyBidWlsZCBKU09OIG91dHB1dAogICAgICAgICRKU09OID0gJExheW91dE9iamVjdC0+SlNPTkVuY29kZSgKICAgICAgICAgICAgRGF0YSA9PiBcQERhdGEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNlbmQgSlNPTiByZXNwb25zZQogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9JyAuICRMYXlvdXRPYmplY3QtPntDaGFyc2V0fSwKICAgICAgICBDb250ZW50ICAgICA9PiAkSlNPTiB8fCAnJywKICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Xb3JrT3JkZXJBZGQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGdldCBuZWVkZWQgQ2hhbmdlSUQKICAgIG15ICRDaGFuZ2VJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDaGFuZ2VJRCcgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJENoYW5nZUlEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIENoYW5nZUlEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlIChXb3Jrb3JkZXJBZGQgaXMgYSBjaGFuZ2UgYWN0aW9uISkKICAgICRTZWxmLT57Q29uZmlnfSA9ICRDb25maWdPYmplY3QtPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGVycm9yIHNjcmVlbgogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyBvbiB0aGUgY2hhbmdlIScsICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259CiAgICAgICAgICAgICksCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2UgZGF0YQogICAgbXkgJENoYW5nZSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUdldCgKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGVycm9yCiAgICBpZiAoICEkQ2hhbmdlICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDaGFuZ2UgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJENoYW5nZUlEICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgc3RvcmUgbmVlZGVkIHBhcmFtZXRlcnMgaW4gJUdldFBhcmFtIHRvIG1ha2UgaXQgcmVsb2FkYWJsZQogICAgbXkgJUdldFBhcmFtOwogICAgZm9yIG15ICRQYXJhbU5hbWUgKAogICAgICAgIHF3KFdvcmtPcmRlclRpdGxlIEluc3RydWN0aW9uIFdvcmtPcmRlclR5cGVJRCBQbGFubmVkRWZmb3J0IEF0dGFjaG1lbnRVcGxvYWQgRmlsZUlEKQogICAgICAgICkKICAgIHsKICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CiAgICB9CgogICAgIyBnZXQgRHluYW1pYyBmaWVsZHMgZnJvbSBQYXJhbU9iamVjdAogICAgbXkgJUR5bmFtaWNGaWVsZFZhbHVlczsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBteSAkRHluYW1pY0ZpZWxkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgIEZpZWxkRmlsdGVyID0+ICRTZWxmLT57Q29uZmlnfS0+e0R5bmFtaWNGaWVsZH0gfHwge30sCiAgICApOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgYmFja2VuZCBvYmplY3QKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGV4dHJhY3QgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZnJvbSB0aGUgd2ViIHJlcXVlc3QgYW5kIGFkZCB0aGUgcHJlZml4CiAgICAgICAgJER5bmFtaWNGaWVsZFZhbHVlc3sgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0KICAgICAgICAgICAgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkVmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgKTsKICAgIH0KCiAgICAjIHN0b3JlIHRpbWUgcmVsYXRlZCBmaWVsZHMgaW4gJUdldFBhcmFtCiAgICBmb3IgbXkgJFRpbWVUeXBlIChxdyhQbGFubmVkU3RhcnRUaW1lIFBsYW5uZWRFbmRUaW1lKSkgewogICAgICAgIGZvciBteSAkVGltZVBhcnQgKHF3KFllYXIgTW9udGggRGF5IEhvdXIgTWludXRlKSkgewogICAgICAgICAgICBteSAkUGFyYW1OYW1lID0gJFRpbWVUeXBlIC4gJFRpbWVQYXJ0OwogICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CiAgICAgICAgfQogICAgfQoKICAgICMgUmVtZW1iZXIgdGhlIHJlYXNvbiB3aHkgc2F2aW5nIHdhcyBub3QgYXR0ZW1wdGVkLgogICAgbXkgJVZhbGlkYXRpb25FcnJvcjsKCiAgICAjIGdldCB3b3Jrb3JkZXIgb2JqZWN0CiAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiAgICAjIGdldCBmb3JtIGlkCiAgICAkU2VsZi0+e0Zvcm1JRH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRm9ybUlEJyApOwoKICAgICMgZ2V0IHVwbG9hZCBjYWNoZSBvYmplY3QKICAgIG15ICRVcGxvYWRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlJyk7CgogICAgIyBjcmVhdGUgZm9ybSBpZAogICAgaWYgKCAhJFNlbGYtPntGb3JtSUR9ICkgewogICAgICAgICRTZWxmLT57Rm9ybUlEfSA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlEQ3JlYXRlKCk7CiAgICB9CgogICAgIyBhZGQgdGhlIHdvcmtvcmRlcgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NhdmUnICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICAjIHRoZSB0aXRsZSBpcyByZXF1aXJlZAogICAgICAgIGlmICggISRHZXRQYXJhbXtXb3JrT3JkZXJUaXRsZX0gKSB7CiAgICAgICAgICAgICRWYWxpZGF0aW9uRXJyb3J7V29ya09yZGVyVGl0bGVTZXJ2ZXJFcnJvcn0gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBXb3JrT3JkZXJUeXBlSUQKICAgICAgICBteSAkV29ya09yZGVyVHlwZSA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclR5cGVMb29rdXAoCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIFdvcmtPcmRlclR5cGVJRCA9PiAkR2V0UGFyYW17V29ya09yZGVyVHlwZUlEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkV29ya09yZGVyVHlwZSApIHsKICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntXb3JrT3JkZXJUeXBlSURTZXJ2ZXJFcnJvcn0gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgbG9nIG9iamVjdAogICAgICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgICAgICMgY2hlY2sgd2hldGhlciBjb21wbGV0ZSB0aW1lcyBhcmUgcGFzc2VkIGFuZCBidWlsZCB0aGUgdGltZSBzdGFtcHMKICAgICAgICBteSAlU3lzdGVtVGltZTsKICAgICAgICBUSU1FVFlQRToKICAgICAgICBmb3IgbXkgJFRpbWVUeXBlIChxdyhQbGFubmVkU3RhcnRUaW1lIFBsYW5uZWRFbmRUaW1lKSkgewogICAgICAgICAgICBmb3IgbXkgJFRpbWVQYXJ0IChxdyhZZWFyIE1vbnRoIERheSBIb3VyIE1pbnV0ZSkpIHsKICAgICAgICAgICAgICAgIG15ICRQYXJhbU5hbWUgPSAkVGltZVR5cGUgLiAkVGltZVBhcnQ7CiAgICAgICAgICAgICAgICBpZiAoICFkZWZpbmVkICRHZXRQYXJhbXskUGFyYW1OYW1lfSApIHsKICAgICAgICAgICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRQYXJhbU5hbWUhIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIG5leHQgVElNRVRZUEU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgdHJhbnNmb3JtIHdvcmsgb3JkZXIgcGxhbm5lZCB0aW1lLCB0aW1lIHN0YW1wIGJhc2VkIG9uIHVzZXIgdGltZSB6b25lCiAgICAgICAgICAgICVHZXRQYXJhbSA9ICRMYXlvdXRPYmplY3QtPlRyYW5zZm9ybURhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBQcmVmaXggPT4gJFRpbWVUeXBlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBmb3JtYXQgYXMgdGltZXN0YW1wCiAgICAgICAgICAgICRHZXRQYXJhbXskVGltZVR5cGV9ID0gc3ByaW50ZiAnJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOjAwJywKICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1llYXInIH0sCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdNb250aCcgfSwKICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ0RheScgfSwKICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ0hvdXInIH0sCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdNaW51dGUnIH07CgogICAgICAgICAgICAjIHNhbml0eSBjaGVjayB0aGUgYXNzZW1ibGVkIHRpbWVzdGFtcAogICAgICAgICAgICAkU3lzdGVtVGltZXskVGltZVR5cGV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEdldFBhcmFteyRUaW1lVHlwZX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRvIG5vdCBzYXZlIGlmIHRpbWUgaXMgaW52YWxpZAogICAgICAgICAgICBpZiAoICEkU3lzdGVtVGltZXskVGltZVR5cGV9ICkgewogICAgICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcnsgJFRpbWVUeXBlIC4gJ0ludmFsaWQnIH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHZhbGlkaXR5IG9mIHRoZSBwbGFubmVkIHN0YXJ0IGFuZCBlbmQgdGltZXMKICAgICAgICBpZiAoICRTeXN0ZW1UaW1le1BsYW5uZWRTdGFydFRpbWV9ICYmICEkU3lzdGVtVGltZXtQbGFubmVkRW5kVGltZX0gKSB7CiAgICAgICAgICAgICRWYWxpZGF0aW9uRXJyb3J7UGxhbm5lZEVuZFRpbWVJbnZhbGlkfSAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntQbGFubmVkRW5kVGltZUVycm9yVHlwZX0gPSAnR2VuZXJpY1NlcnZlckVycm9yJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAhJFN5c3RlbVRpbWV7UGxhbm5lZFN0YXJ0VGltZX0gJiYgJFN5c3RlbVRpbWV7UGxhbm5lZEVuZFRpbWV9ICkgewogICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye1BsYW5uZWRTdGFydFRpbWVJbnZhbGlkfSAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntQbGFubmVkU3RhcnRUaW1lRXJyb3JUeXBlfSA9ICdHZW5lcmljU2VydmVyRXJyb3InOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICggJFN5c3RlbVRpbWV7UGxhbm5lZFN0YXJ0VGltZX0gJiYgJFN5c3RlbVRpbWV7UGxhbm5lZEVuZFRpbWV9ICkKICAgICAgICAgICAgJiYgKCAkU3lzdGVtVGltZXtQbGFubmVkRW5kVGltZX0gPD0gJFN5c3RlbVRpbWV7UGxhbm5lZFN0YXJ0VGltZX0gKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye1BsYW5uZWRTdGFydFRpbWVJbnZhbGlkfSAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntQbGFubmVkU3RhcnRUaW1lRXJyb3JUeXBlfSA9ICdCZWZvcmVUaGFuRW5kVGltZVNlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9ybWF0IG9mIHBsYW5uZWQgZWZmb3J0LCBlbXB0eSBpcyBhbGxvd2VkCiAgICAgICAgaWYgKCAkR2V0UGFyYW17UGxhbm5lZEVmZm9ydH0gIX4gbXsgXEEgXGQqICg/OiBbLl0gXGR7MSwyfSApPyBceiB9eG1zICkgewogICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9yeydQbGFubmVkRWZmb3J0SW52YWxpZCd9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgbXkgJFZhbGlkYXRpb25SZXN1bHQgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkVmFsdWVWYWxpZGF0ZSgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgICAgIE1hbmRhdG9yeSAgICAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntEeW5hbWljRmllbGR9LT57ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID09IDIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkVmFsaWRhdGlvblJlc3VsdCkgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICdDb3VsZCBub3QgcGVyZm9ybSB2YWxpZGF0aW9uIG9uIGZpZWxkICVzIScsICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH0KICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcHJvcGFnYXRlIHZhbGlkYXRpb24gZXJyb3IgdG8gdGhlIEVycm9yIHZhcmlhYmxlIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSBmcm9udGVuZAogICAgICAgICAgICBpZiAoICRWYWxpZGF0aW9uUmVzdWx0LT57U2VydmVyRXJyb3J9ICkgewogICAgICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAnIFNlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiBhbiBhdHRhY2htZW50IG11c3QgYmUgZGVsZXRlZAogICAgICAgIEFUVEFDSE1FTlQ6CiAgICAgICAgZm9yIG15ICROdW1iZXIgKCAxIC4uIDMyICkgewoKICAgICAgICAgICAgIyBjaGVjayBpZiB0aGUgZGVsZXRlIGJ1dHRvbiB3YXMgcHJlc3NlZCBmb3IgdGhpcyBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICREZWxldGUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiQXR0YWNobWVudERlbGV0ZSROdW1iZXIiICk7CgogICAgICAgICAgICAjIGNoZWNrIG5leHQgYXR0YWNobWVudCBpZiBpdCB3YXMgbm90IHByZXNzZWQKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkRGVsZXRlOwoKICAgICAgICAgICAgIyByZW1lbWJlciB0aGF0IHdlIG5lZWQgdG8gc2hvdyB0aGUgcGFnZSBhZ2FpbgogICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye0F0dGFjaG1lbnR9ID0gMTsKCiAgICAgICAgICAgICMgcmVtb3ZlIHRoZSBhdHRhY2htZW50IGZyb20gdGhlIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JRFJlbW92ZUZpbGUoCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgRmlsZUlEID0+ICROdW1iZXIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIHRoZXJlIHdhcyBhbiBhdHRhY2htZW50IHVwbG9hZAogICAgICAgIGlmICggJEdldFBhcmFte0F0dGFjaG1lbnRVcGxvYWR9ICkgewoKICAgICAgICAgICAgIyByZW1lbWJlciB0aGF0IHdlIG5lZWQgdG8gc2hvdyB0aGUgcGFnZSBhZ2FpbgogICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye0F0dGFjaG1lbnR9ID0gMTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSB1cGxvYWRlZCBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICVVcGxvYWRTdHVmZiA9ICRQYXJhbU9iamVjdC0+R2V0VXBsb2FkQWxsKAogICAgICAgICAgICAgICAgUGFyYW0gID0+ICdGaWxlVXBsb2FkJywKICAgICAgICAgICAgICAgIFNvdXJjZSA9PiAnc3RyaW5nJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIGF0dGFjaG1lbnQgdG8gdGhlIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREFkZEZpbGUoCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgJVVwbG9hZFN0dWZmLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBhZGQgb25seSB3aGVuIHRoZXJlIGFyZSBubyBpbnB1dCB2YWxpZGF0aW9uIGVycm9ycwogICAgICAgIGlmICggISVWYWxpZGF0aW9uRXJyb3IgKSB7CgogICAgICAgICAgICAjIGNyZWF0ZSB0aGUgd29ya29yZGVyCiAgICAgICAgICAgIG15ICRXb3JrT3JkZXJJRCA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckFkZCgKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgICA9PiAkR2V0UGFyYW17V29ya09yZGVyVGl0bGV9LAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgICA9PiAkR2V0UGFyYW17SW5zdHJ1Y3Rpb259LAogICAgICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZSA9PiAkR2V0UGFyYW17UGxhbm5lZFN0YXJ0VGltZX0sCiAgICAgICAgICAgICAgICBQbGFubmVkRW5kVGltZSAgID0+ICRHZXRQYXJhbXtQbGFubmVkRW5kVGltZX0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUeXBlSUQgID0+ICRHZXRQYXJhbXtXb3JrT3JkZXJUeXBlSUR9LAogICAgICAgICAgICAgICAgUGxhbm5lZEVmZm9ydCAgICA9PiAkR2V0UGFyYW17UGxhbm5lZEVmZm9ydH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICVEeW5hbWljRmllbGRWYWx1ZXMsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZGluZyB3YXMgc3VjY2Vzc2Z1bAogICAgICAgICAgICBpZiAoJFdvcmtPcmRlcklEKSB7CgogICAgICAgICAgICAgICAgIyBtb3ZlIGF0dGFjaG1lbnRzIGZyb20gY2FjaGUgdG8gdmlydHVhbCBmcwogICAgICAgICAgICAgICAgbXkgQENhY2hlZEF0dGFjaG1lbnRzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc0RhdGEoCiAgICAgICAgICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgZm9yIG15ICRDYWNoZWRBdHRhY2htZW50IChAQ2FjaGVkQXR0YWNobWVudHMpIHsKICAgICAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckF0dGFjaG1lbnRBZGQoCiAgICAgICAgICAgICAgICAgICAgICAgICV7JENhY2hlZEF0dGFjaG1lbnR9LAogICAgICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUlEICAgID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgZGVsZXRlIGZpbGUgZnJvbSBjYWNoZSBpZiBtb3ZlIHdhcyBzdWNjZXNzZnVsCiAgICAgICAgICAgICAgICAgICAgaWYgKCRTdWNjZXNzKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHJld3JpdGUgVVJMIGZvciBpbmxpbmUgaW1hZ2VzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJENhY2hlZEF0dGFjaG1lbnQtPntDb250ZW50SUR9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSB3b3Jrb3JkZXIgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFdvcmtPcmRlckRhdGEgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwaWN0dXJlIHVybCBpbiB1cGxvYWQgY2FjaGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRTZWFyY2ggPSAiQWN0aW9uPVBpY3R1cmVVcGxvYWQgLisgRm9ybUlEPSRTZWxmLT57Rm9ybUlEfSAuKyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQ29udGVudElEPSRDYWNoZWRBdHRhY2htZW50LT57Q29udGVudElEfSI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwaWN0dXJlIHVybCBpbiB3b3Jrb3JkZXIgYXR0dGFjaG1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRSZXBsYWNlID0gIkFjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJab29tO1N1YmFjdGlvbj1Eb3dubG9hZEF0dGFjaG1lbnQ7IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkZpbGVuYW1lPSRDYWNoZWRBdHRhY2htZW50LT57RmlsZW5hbWV9O1dvcmtPcmRlcklEPSRXb3JrT3JkZXJJRCI7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXBsYWNlIHVybAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFdvcmtPcmRlckRhdGEtPntJbnN0cnVjdGlvbn0gPX4gc3skU2VhcmNofXskUmVwbGFjZX14bXM7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1cGRhdGUgd29ya29yZGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gPT4gJFdvcmtPcmRlckRhdGEtPntJbnN0cnVjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgdXBkYXRlIHRoZSBpbmxpbmUgaW1hZ2UgVVJMcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJmb3IgV29ya09yZGVySUQgJyRXb3JrT3JkZXJJRCchIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JRFJlbW92ZUZpbGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZUlEID0+ICRDYWNoZWRBdHRhY2htZW50LT57RmlsZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnQ2Fubm90IG1vdmUgRmlsZSBmcm9tIENhY2hlIHRvIFZpcnR1YWxGUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICIoJHskQ2FjaGVkQXR0YWNobWVudH17RmlsZW5hbWV9KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZ2V0IHJlZGlyZWN0IHNjcmVlbgogICAgICAgICAgICAgICAgbXkgJE5leHRTY3JlZW4gPSAkU2VsZi0+e1VzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFza30gfHwgJ0FnZW50SVRTTVdvcmtPcmRlclpvb20nOwoKICAgICAgICAgICAgICAgICMgYWRkIHRoZSBjb3JyZWN0IGlkCiAgICAgICAgICAgICAgICBpZiAoICROZXh0U2NyZWVuIGVxICdBZ2VudElUU01Xb3JrT3JkZXJab29tJyApIHsKICAgICAgICAgICAgICAgICAgICAkTmV4dFNjcmVlbiAuPSAiO1dvcmtPcmRlcklEPSRXb3JrT3JkZXJJRCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICROZXh0U2NyZWVuIGVxICdBZ2VudElUU01DaGFuZ2Vab29tJyApIHsKICAgICAgICAgICAgICAgICAgICAkTmV4dFNjcmVlbiAuPSAiO0NoYW5nZUlEPSRDaGFuZ2VJRCI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBsb2FkIG5ldyBVUkwgaW4gcGFyZW50IHdpbmRvdyBhbmQgY2xvc2UgcG9wdXAKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Qb3B1cENsb3NlKAogICAgICAgICAgICAgICAgICAgIFVSTCA9PiAiQWN0aW9uPSROZXh0U2NyZWVuIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UsIHdoZW4gYWRkaW5nIGZhaWxlZAogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdXYXMgbm90IGFibGUgdG8gYWRkIHdvcmtvcmRlciEnKSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgaWYgdGhlcmUgd2FzIGFuIGF0dGFjaG1lbnQgZGVsZXRlIG9yIHVwbG9hZAogICAgIyB3ZSBkbyBub3Qgd2FudCB0byBzaG93IHZhbGlkYXRpb24gZXJyb3JzIGZvciBvdGhlciBmaWVsZHMKICAgIGlmICggJFZhbGlkYXRpb25FcnJvcntBdHRhY2htZW50fSApIHsKICAgICAgICAlVmFsaWRhdGlvbkVycm9yID0gKCk7CiAgICB9CgogICAgIyBnZXQgYWxsIGF0dGFjaG1lbnRzIG1ldGEgZGF0YQogICAgbXkgQEF0dGFjaG1lbnRzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc01ldGEoCiAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgIFRpdGxlID0+IFRyYW5zbGF0YWJsZSgnQWRkJyksCiAgICAgICAgVHlwZSAgPT4gJ1NtYWxsJywKICAgICk7CgogICAgIyBzZXQgc2VsZWN0ZWQgdHlwZQogICAgbXkgJVNlbGVjdGVkSW5mbyA9ICgKICAgICAgICBEZWZhdWx0ID0+IDEsCiAgICApOwoKICAgIGlmICggJEdldFBhcmFte1dvcmtPcmRlclR5cGVJRH0gKSB7CiAgICAgICAgJVNlbGVjdGVkSW5mbyA9ICggU2VsZWN0ZWQgPT4gJEdldFBhcmFte1dvcmtPcmRlclR5cGVJRH0gKTsKICAgIH0KCiAgICAjIGdldCBXb3JrT3JkZXJUeXBlIGxpc3QKICAgIG15ICRXb3JrT3JkZXJUeXBlTGlzdCA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclR5cGVMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgJVNlbGVjdGVkSW5mbywKICAgICkgfHwgW107CgogICAgIyBidWlsZCB0aGUgV29ya09yZGVyVHlwZSBkcm9wZG93bgogICAgJEdldFBhcmFte1dvcmtPcmRlclR5cGVTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIE5hbWUgID0+ICdXb3JrT3JkZXJUeXBlSUQnLAogICAgICAgIERhdGEgID0+ICRXb3JrT3JkZXJUeXBlTGlzdCwKICAgICAgICBDbGFzcyA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkfSApIHsKCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGdldCBkeW5hbWljIGZpZWxkcyBkZWZhdWx0cyBpZiBwYWdlIGlzIGxvYWRlZCB0aGUgZmlyc3QgdGltZQogICAgICAgIGlmICggISRTZWxmLT57U3ViYWN0aW9ufSApIHsKCiAgICAgICAgICAgICMgZ2V0IGR5bmFtaWMgZmllbGRzIGRlZmF1bHRzIGlmIHBhZ2UgaXMgbG9hZGVkIHRoZSBmaXJzdCB0aW1lCiAgICAgICAgICAgIGlmICggISRTZWxmLT57U3ViYWN0aW9ufSApIHsKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRWYWx1ZXN7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9CiAgICAgICAgICAgICAgICAgICAgPSAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfS0+e0RlZmF1bHRWYWx1ZX0gfHwgJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IGZpZWxkIGh0bWwKICAgICAgICBteSAkRHluYW1pY0ZpZWxkSFRNTCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRSZW5kZXIoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJER5bmFtaWNGaWVsZFZhbHVlc3sgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgIFNlcnZlckVycm9yICAgICAgICA9PiAkVmFsaWRhdGlvbkVycm9yeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSB8fCAnJywKICAgICAgICAgICAgTWFuZGF0b3J5ICAgICAgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e0R5bmFtaWNGaWVsZH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPT0gMiwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgIEFKQVhVcGRhdGUgICAgICAgICA9PiAwLAogICAgICAgICk7CgogICAgICAgICMgc2tpcCBmaWVsZHMgdGhhdCBIVE1MIGNvdWxkIG5vdCBiZSByZXRyaWV2ZWQKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZEhUTUwpOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICBMYWJlbCA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgIEZpZWxkID0+ICREeW5hbWljRmllbGRIVE1MLT57RmllbGR9LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZXhhbXBsZSBvZiBkeW5hbWljIGZpZWxkcyBvcmRlciBjdXN0b21pemF0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgIExhYmVsID0+ICREeW5hbWljRmllbGRIVE1MLT57TGFiZWx9LAogICAgICAgICAgICAgICAgRmllbGQgPT4gJER5bmFtaWNGaWVsZEhUTUwtPntGaWVsZH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRpbWUgcGVyaW9kIHRoYXQgY2FuIGJlIHNlbGVjdGVkIGZyb20gdGhlIEdVSQogICAgbXkgJVRpbWVQZXJpb2QgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Xb3JrT3JkZXI6OlRpbWVQZXJpb2QnKSB9OwoKICAgICMgc2V0IHRoZSB0aW1lIHNlbGVjdGlvbnMKICAgIGZvciBteSAkVGltZVR5cGUgKHF3KFBsYW5uZWRTdGFydFRpbWUgUGxhbm5lZEVuZFRpbWUpKSB7CgogICAgICAgICMgc2V0IGRlZmF1bHQgdmFsdWUgZm9yICREaWZmVGltZQogICAgICAgICMgV2hlbiBubyB0aW1lIGlzIGdpdmVuIHlldCwgdGhlbiB1c2UgdGhlIGN1cnJlbnQgdGltZSBwbHVzIHRoZSBkaWZmdGltZQogICAgICAgICMgV2hlbiBhbiBleHBsaWNpdCB0aW1lIHdhcyByZXRyaWV2ZWQsICREaWZmVGltZSBpcyBub3QgdXNlZAogICAgICAgIG15ICREaWZmVGltZSA9ICRUaW1lVHlwZSBlcSAnUGxhbm5lZFN0YXJ0VGltZScgPyAwIDogNjAgKiA2MDsKCiAgICAgICAgIyBhZGQgc2VsZWN0aW9uIGZvciB0aGUgdGltZQogICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1NlbGVjdGlvblN0cmluZycgfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBGb3JtYXQgICAgICAgICAgICAgID0+ICdEYXRlSW5wdXRGb3JtYXRMb25nJywKICAgICAgICAgICAgUHJlZml4ICAgICAgICAgICAgICA9PiAkVGltZVR5cGUsCiAgICAgICAgICAgIERpZmZUaW1lICAgICAgICAgICAgPT4gJERpZmZUaW1lLAogICAgICAgICAgICBWYWxpZGF0ZSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICRUaW1lVHlwZSAuICdDbGFzcycgPT4gJ1ZhbGlkYXRlX1JlcXVpcmVkICcKICAgICAgICAgICAgICAgIC4gKCAkVmFsaWRhdGlvbkVycm9yeyAkVGltZVR5cGUgLiAnSW52YWxpZCcgfSB8fCAnJyApLAogICAgICAgICAgICAlVGltZVBlcmlvZCwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBzZXJ2ZXIgZXJyb3IgbWVzc2FnZXMgZm9yIHRoZSBwbGFubmVkIHRpbWVzCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJFRpbWVUeXBlCiAgICAgICAgICAgICAgICAuICggJFZhbGlkYXRpb25FcnJvcnsgJFRpbWVUeXBlIC4gJ0Vycm9yVHlwZScgfSB8fCAnR2VuZXJpY1NlcnZlckVycm9yJyApCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgcGxhbm5lZCBlZmZvcnQgaWYgaXQgaXMgY29uZmlndXJlZAogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntQbGFubmVkRWZmb3J0fSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU2hvd1BsYW5uZWRFZmZvcnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFBsYW5uZWRFZmZvcnQgPT4gJEdldFBhcmFte1BsYW5uZWRFZmZvcnR9LAogICAgICAgICAgICAgICAgJVZhbGlkYXRpb25FcnJvciwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyB0aGUgYXR0YWNobWVudCB1cGxvYWQgYnV0dG9uCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50VXBsb2FkJywKICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIHNob3cgYXR0YWNobWVudHMKICAgIEFUVEFDSE1FTlQ6CiAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBBdHRhY2htZW50cykgewoKICAgICAgICAjIGRvIG5vdCBzaG93IGlubGluZSBpbWFnZXMgYXMgYXR0YWNobWVudHMKICAgICAgICAjICh0aGV5IGhhdmUgYSBjb250ZW50IGlkKQogICAgICAgIGlmICggJEF0dGFjaG1lbnQtPntDb250ZW50SUR9ICYmICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQ7CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQXR0YWNobWVudCcsCiAgICAgICAgICAgIERhdGEgPT4gJEF0dGFjaG1lbnQsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGFkZCByaWNoIHRleHQgZWRpdG9yIGphdmFzY3JpcHQKICAgICMgb25seSBpZiBhY3RpdmF0ZWQgYW5kIHRoZSBicm93c2VyIGNhbiBoYW5kbGUgaXQKICAgICMgb3RoZXJ3aXNlIGp1c3QgYSB0ZXh0YXJlYSBpcyBzaG93bgogICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUmljaFRleHQnLAogICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICk7CiAgICB9CgogICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNV29ya09yZGVyQWRkJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7JENoYW5nZX0sCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgJVZhbGlkYXRpb25FcnJvciwKICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb290ZXIKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCBUeXBlID0+ICdTbWFsbCcgKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Xb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFBhcmFtT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBnZXQgbmVlZGVkIENoYW5nZUlECiAgICBteSAkQ2hhbmdlSUQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ2hhbmdlSUQnICk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRDaGFuZ2VJRCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdObyBDaGFuZ2VJRCBpcyBnaXZlbiEnKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZSAoV29ya29yZGVyQWRkIGlzIGEgY2hhbmdlIGFjdGlvbiEpCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJENoYW5nZU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMgb24gdGhlIGNoYW5nZSEnLCAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufQogICAgICAgICAgICApLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY2hhbmdlIGRhdGEKICAgIG15ICRDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBlcnJvcgogICAgaWYgKCAhJENoYW5nZSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlIScsICRDaGFuZ2VJRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHN0b3JlIG5lZWRlZCBwYXJhbWV0ZXJzIGluICVHZXRQYXJhbSB0byBtYWtlIGl0IHJlbG9hZGFibGUKICAgIG15ICVHZXRQYXJhbTsKICAgIGZvciBteSAkUGFyYW1OYW1lICgKICAgICAgICBxdyhNb3ZlVGltZVR5cGUgTW92ZVRpbWVZZWFyIE1vdmVUaW1lTW9udGggTW92ZVRpbWVEYXkgTW92ZVRpbWVIb3VyIE1vdmVUaW1lTWludXRlIFRlbXBsYXRlSUQpCiAgICAgICAgKQogICAgewogICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbU5hbWUgKTsKICAgIH0KCiAgICAjIHN0b3JlIHRpbWUgcmVsYXRlZCBmaWVsZHMgaW4gJUdldFBhcmFtCiAgICBmb3IgbXkgJFRpbWVQYXJ0IChxdyhZZWFyIE1vbnRoIERheSBIb3VyIE1pbnV0ZSkpIHsKICAgICAgICBteSAkUGFyYW1OYW1lID0gJ01vdmVUaW1lJyAuICRUaW1lUGFydDsKICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CiAgICB9CgogICAgIyBSZW1lbWJlciB0aGUgcmVhc29uIHdoeSBzYXZpbmcgd2FzIG5vdCBhdHRlbXB0ZWQuCiAgICBteSAlVmFsaWRhdGlvbkVycm9yOwoKICAgICMgZ2V0IHRlbXBsYXRlIG9iamVjdAogICAgbXkgJFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlJyk7CgogICAgIyBjcmVhdGUgd29ya29yZGVyIGZyb20gdGVtcGxhdGUKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDcmVhdGVGcm9tVGVtcGxhdGUnICkgewoKICAgICAgICBteSAkTmV3VGltZTsKCiAgICAgICAgIyBjaGVjayB2YWxpZGl0eSBvZiB0aGUgdGltZSB0eXBlCiAgICAgICAgaWYgKAogICAgICAgICAgICAhZGVmaW5lZCAkR2V0UGFyYW17TW92ZVRpbWVUeXBlfQogICAgICAgICAgICB8fCAoCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17TW92ZVRpbWVUeXBlfSBuZSAnUGxhbm5lZFN0YXJ0VGltZScKICAgICAgICAgICAgICAgICYmICRHZXRQYXJhbXtNb3ZlVGltZVR5cGV9IG5lICdQbGFubmVkRW5kVGltZScKICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye01vdmVUaW1lVHlwZUludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgdGhlIGNvbXBsZXRlbmVzcyBvZiB0aGUgdGltZSBwYXJhbWV0ZXIgbGlzdCwKICAgICAgICAjIG9ubHkgaG91ciBhbmQgbWludXRlIGFyZSBhbGxvd2VkIHRvIGJlICcwJwogICAgICAgIGlmICgKICAgICAgICAgICAgISRHZXRQYXJhbXtNb3ZlVGltZVllYXJ9CiAgICAgICAgICAgIHx8ICEkR2V0UGFyYW17TW92ZVRpbWVNb250aH0KICAgICAgICAgICAgfHwgISRHZXRQYXJhbXtNb3ZlVGltZURheX0KICAgICAgICAgICAgfHwgIWRlZmluZWQgJEdldFBhcmFte01vdmVUaW1lSG91cn0KICAgICAgICAgICAgfHwgIWRlZmluZWQgJEdldFBhcmFte01vdmVUaW1lTWludXRlfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye01vdmVUaW1lSW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdGhlIHN5c3RlbSB0aW1lIGZyb20gdGhlIGlucHV0LCBpZiBpdCBjYW4ndCBiZSBkZXRlcm1pbmVkIHdlIGhhdmUgYSB2YWxpZGF0aW9uIGVycm9yCiAgICAgICAgaWYgKCAhJVZhbGlkYXRpb25FcnJvciApIHsKCiAgICAgICAgICAgICMgdHJhbnNmb3JtIHdvcmsgb3JkZXIgcGxhbm5lZCB0aW1lLCB0aW1lIHN0YW1wIGJhc2VkIG9uIHVzZXIgdGltZSB6b25lCiAgICAgICAgICAgICVHZXRQYXJhbSA9ICRMYXlvdXRPYmplY3QtPlRyYW5zZm9ybURhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBQcmVmaXggPT4gJ01vdmVUaW1lJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZm9ybWF0IGFzIHRpbWVzdGFtcAogICAgICAgICAgICBteSAkUGxhbm5lZFRpbWUgPSBzcHJpbnRmICclMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6MDAnLAogICAgICAgICAgICAgICAgJEdldFBhcmFte01vdmVUaW1lWWVhcn0sCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17TW92ZVRpbWVNb250aH0sCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17TW92ZVRpbWVEYXl9LAogICAgICAgICAgICAgICAgJEdldFBhcmFte01vdmVUaW1lSG91cn0sCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17TW92ZVRpbWVNaW51dGV9OwoKICAgICAgICAgICAgIyBzYW5pdHkgY2hlY2sgb2YgdGhlIGFzc2VtYmxlZCB0aW1lc3RhbXAKICAgICAgICAgICAgJE5ld1RpbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpLT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkUGxhbm5lZFRpbWUsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkTmV3VGltZSApIHsKICAgICAgICAgICAgICAgICRWYWxpZGF0aW9uRXJyb3J7TW92ZVRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgd2hldGhlciBhIHRlbXBsYXRlIHdhcyBzZWxlY3RlZAogICAgICAgIGlmICggISRHZXRQYXJhbXtUZW1wbGF0ZUlEfSApIHsKICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntUZW1wbGF0ZUlEU2VydmVyRXJyb3J9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgIGlmICggISVWYWxpZGF0aW9uRXJyb3IgKSB7CgogICAgICAgICAgICAjIGNyZWF0ZSB3b3Jrb3JkZXIgYmFzZWQgb24gdGhlIHRlbXBsYXRlCiAgICAgICAgICAgIG15ICRXb3JrT3JkZXJJRCA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVEZVNlcmlhbGl6ZSgKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEICAgICAgPT4gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1RlbXBsYXRlSUQnICksCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgTmV3VGltZUluRXBvY2hlID0+ICROZXdUaW1lLAogICAgICAgICAgICAgICAgTW92ZVRpbWVUeXBlICAgID0+ICRHZXRQYXJhbXtNb3ZlVGltZVR5cGV9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyB3b3Jrb3JkZXIgY291bGQgbm90IGJlIGNyZWF0ZWQKICAgICAgICAgICAgaWYgKCAhJFdvcmtPcmRlcklEICkgewoKICAgICAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlLCB3aGVuIGFkZGluZyBmYWlsZWQKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnV2FzIG5vdCBhYmxlIHRvIGNyZWF0ZSB3b3Jrb3JkZXIgZnJvbSB0ZW1wbGF0ZSEnKSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCByZWRpcmVjdCBzY3JlZW4KICAgICAgICAgICAgbXkgJE5leHRTY3JlZW4gPSAkU2VsZi0+e1VzZXJDcmVhdGVXb3JrT3JkZXJOZXh0TWFza30gfHwgJ0FnZW50SVRTTVdvcmtPcmRlclpvb20nOwoKICAgICAgICAgICAgIyBhZGQgdGhlIGNvcnJlY3QgaWQKICAgICAgICAgICAgaWYgKCAkTmV4dFNjcmVlbiBlcSAnQWdlbnRJVFNNV29ya09yZGVyWm9vbScgKSB7CiAgICAgICAgICAgICAgICAkTmV4dFNjcmVlbiAuPSAiO1dvcmtPcmRlcklEPSRXb3JrT3JkZXJJRCI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkTmV4dFNjcmVlbiBlcSAnQWdlbnRJVFNNQ2hhbmdlWm9vbScgKSB7CiAgICAgICAgICAgICAgICAkTmV4dFNjcmVlbiAuPSAiO0NoYW5nZUlEPSRDaGFuZ2VJRCI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbG9hZCBuZXcgVVJMIGluIHBhcmVudCB3aW5kb3cgYW5kIGNsb3NlIHBvcHVwCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Qb3B1cENsb3NlKAogICAgICAgICAgICAgICAgVVJMID0+ICJBY3Rpb249JE5leHRTY3JlZW4iLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGJ1aWxkIHRlbXBsYXRlIGRyb3Bkb3duCiAgICBteSAkVGVtcGxhdGVMaXN0ID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZUxpc3QoCiAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgQ29tbWVudExlbmd0aCA9PiAxNSwKICAgICAgICBUZW1wbGF0ZVR5cGUgID0+ICdJVFNNV29ya09yZGVyJywKICAgICk7CiAgICBteSAkVGVtcGxhdGVTZWxlY3Rpb25TdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBOYW1lICAgICAgICAgPT4gJ1RlbXBsYXRlSUQnLAogICAgICAgIERhdGEgICAgICAgICA9PiAkVGVtcGxhdGVMaXN0LAogICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplIFZhbGlkYXRlX1JlcXVpcmVkICcgLiAoICRWYWxpZGF0aW9uRXJyb3J7VGVtcGxhdGVJRFNlcnZlckVycm9yfSB8fCAnJyApLAogICAgICAgIFRyZWVWaWV3ICAgICA9PiAxLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgKTsKCiAgICAjIGJ1aWxkIGRyb3AtZG93biB3aXRoIHRpbWUgdHlwZXMKICAgIG15ICRNb3ZlVGltZVR5cGVTZWxlY3Rpb25TdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBOYW1lID0+ICdNb3ZlVGltZVR5cGUnLAogICAgICAgIERhdGEgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnUGxhbm5lZFN0YXJ0VGltZScsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ1BsYW5uZWQgU3RhcnQgVGltZScpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICdQbGFubmVkRW5kVGltZScsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiBUcmFuc2xhdGFibGUoJ1BsYW5uZWQgRW5kIFRpbWUnKQogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17TW92ZVRpbWVUeXBlfSB8fCAnUGxhbm5lZFN0YXJ0VGltZScsCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplIFZhbGlkYXRlX1JlcXVpcmVkICcgLiAoICRWYWxpZGF0aW9uRXJyb3J7TW92ZVRpbWVUeXBlSW52YWxpZH0gfHwgJycgKSwKICAgICk7CgogICAgIyB0aW1lIHBlcmlvZCB0aGF0IGNhbiBiZSBzZWxlY3RlZCBmcm9tIHRoZSBHVUkKICAgIG15ICVUaW1lUGVyaW9kID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNV29ya09yZGVyOjpUaW1lUGVyaW9kJykgfTsKCiAgICAjIGFkZCBzZWxlY3Rpb24gZm9yIHRoZSB0aW1lCiAgICBteSAkTW92ZVRpbWVTZWxlY3Rpb25TdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgJUdldFBhcmFtLAogICAgICAgIEZvcm1hdCAgICAgICAgPT4gJ0RhdGVJbnB1dEZvcm1hdExvbmcnLAogICAgICAgIFByZWZpeCAgICAgICAgPT4gJ01vdmVUaW1lJywKICAgICAgICBNb3ZlVGltZUNsYXNzID0+ICdWYWxpZGF0ZV9SZXF1aXJlZCAnIC4gKCAkVmFsaWRhdGlvbkVycm9ye01vdmVUaW1lSW52YWxpZH0gfHwgJycgKSwKICAgICAgICBWYWxpZGF0ZSAgICAgID0+IDEsCiAgICAgICAgJVRpbWVQZXJpb2QsCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICBUaXRsZSA9PiBUcmFuc2xhdGFibGUoJ0FkZCcpLAogICAgICAgIFR5cGUgID0+ICdTbWFsbCcsCiAgICApOwoKICAgICMgc2V0IHNlbGVjdGVkIHR5cGUKICAgIG15ICVTZWxlY3RlZEluZm8gPSAoCiAgICAgICAgRGVmYXVsdCA9PiAxLAogICAgKTsKCiAgICBpZiAoICRHZXRQYXJhbXtXb3JrT3JkZXJUeXBlSUR9ICkgewogICAgICAgICVTZWxlY3RlZEluZm8gPSAoIFNlbGVjdGVkID0+ICRHZXRQYXJhbXtXb3JrT3JkZXJUeXBlSUR9ICk7CiAgICB9CgogICAgIyBnZXQgV29ya09yZGVyVHlwZSBsaXN0CiAgICBteSAkV29ya09yZGVyVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpLT5Xb3JrT3JkZXJUeXBlTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICVTZWxlY3RlZEluZm8sCiAgICApIHx8IFtdOwoKICAgICMgYnVpbGQgdGhlIFdvcmtPcmRlclR5cGUgZHJvcGRvd24KICAgICRHZXRQYXJhbXtXb3JrT3JkZXJUeXBlU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBOYW1lICA9PiAnV29ya09yZGVyVHlwZUlEJywKICAgICAgICBEYXRhICA9PiAkV29ya09yZGVyVHlwZUxpc3QsCiAgICAgICAgQ2xhc3MgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgZ2V0IGZvcm0gaWQKICAgICRTZWxmLT57Rm9ybUlEfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGb3JtSUQnICk7CgogICAgIyBjcmVhdGUgZm9ybSBpZAogICAgaWYgKCAhJFNlbGYtPntGb3JtSUR9ICkgewogICAgICAgICRTZWxmLT57Rm9ybUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlVwbG9hZENhY2hlJyktPkZvcm1JRENyZWF0ZSgpOwogICAgfQoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyRDaGFuZ2V9LAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgICAgICAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFRlbXBsYXRlU2VsZWN0aW9uU3RyaW5nICAgICA9PiAkVGVtcGxhdGVTZWxlY3Rpb25TdHJpbmcsCiAgICAgICAgICAgIE1vdmVUaW1lVHlwZVNlbGVjdGlvblN0cmluZyA9PiAkTW92ZVRpbWVUeXBlU2VsZWN0aW9uU3RyaW5nLAogICAgICAgICAgICBNb3ZlVGltZVNlbGVjdGlvblN0cmluZyAgICAgPT4gJE1vdmVUaW1lU2VsZWN0aW9uU3RyaW5nLAogICAgICAgICAgICAlVmFsaWRhdGlvbkVycm9yLAogICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgYWRkIGZvb3RlcgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Xb3JrT3JkZXJBZ2VudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2V0IG5lZWRlZCBXb3JrT3JkZXJJRAogICAgbXkgJFdvcmtPcmRlcklEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1dvcmtPcmRlcklEJyApOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkV29ya09yZGVySUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHdvcmtvcmRlciBvYmplY3QKICAgIG15ICRXb3JrT3JkZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpOwoKICAgICMgZ2V0IHdvcmtvcmRlciBkYXRhCiAgICBteSAkV29ya09yZGVyID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyR2V0KAogICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISRXb3JrT3JkZXIgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJFdvcmtPcmRlcklEICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICMgZ2V0IGNvbmZpZyBmb3IgZnJvbnRlbmQKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiSVRTTVdvcmtPcmRlcjo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICAgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgIEFjdGlvbiAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBDaGFuZ2VJRCAgICA9PiAkV29ya09yZGVyLT57Q2hhbmdlSUR9LAogICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZXJyb3Igc2NyZWVuCiAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJ1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIG9uIHRoZSBjaGFuZ2UhJywgJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0KICAgICAgICAgICAgKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgIG15ICVHZXRQYXJhbTsKICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhVc2VyIFVzZXJTZWxlY3RlZCkpIHsKICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CiAgICB9CgogICAgbXkgJFVzZXJTZXJ2ZXJFcnJvciA9ICcnOwoKICAgICMgaGFuZGxlIHRoZSAnU2F2ZScgc3ViYWN0aW9uCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2F2ZScgKSB7CgogICAgICAgICMgd29ya29yZGVyIGFnZW50IGlzIGVtcHR5IGFuZCBubyBidXR0b24gYnV0IHRoZSAnU2F2ZScgYnV0dG9uIGlzIGNsaWNrZWQKICAgICAgICBpZiAoICEkR2V0UGFyYW17VXNlcn0gKSB7CgogICAgICAgICAgICAjIHNldHRpbmcgd29ya29yZGVyIGFnZW50IHRvIGVtcHR5CiAgICAgICAgICAgIG15ICRDb3VsZFVwZGF0ZVdvcmtPcmRlciA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclVwZGF0ZSgKICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEICAgICAgPT4gJFdvcmtPcmRlci0+e1dvcmtPcmRlcklEfSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlckFnZW50SUQgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkQ291bGRVcGRhdGVXb3JrT3JkZXIpIHsKCiAgICAgICAgICAgICAgICAjIGxvYWQgbmV3IFVSTCBpbiBwYXJlbnQgd2luZG93IGFuZCBjbG9zZSBwb3B1cAogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlBvcHVwQ2xvc2UoCiAgICAgICAgICAgICAgICAgICAgVVJMID0+ICRTZWxmLT57TGFzdFdvcmtPcmRlclZpZXd9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgJ1dhcyBub3QgYWJsZSB0byBzZXQgdGhlIHdvcmtvcmRlciBhZ2VudCBvZiB0aGUgd29ya29yZGVyICIlcyIgdG8gZW1wdHkhJywKICAgICAgICAgICAgICAgICAgICAgICAgJFdvcmtPcmRlci0+e1dvcmtPcmRlcklEfQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBpZiBhIHdvcmtvcmRlciBhZ2VudCBpcyBzZWxlY3RlZCBhbmQgbm8gYnV0dG9uIGJ1dCB0aGUgJ1NhdmUnIGJ1dHRvbiBpcyBjbGlja2VkCiAgICAgICAgZWxzaWYgKCAkR2V0UGFyYW17VXNlclNlbGVjdGVkfSApIHsKCiAgICAgICAgICAgICMgd29ya29yZGVyIGFnZW50IGlzIHJlcXVpcmVkIGZvciBhbiB1cGRhdGUKICAgICAgICAgICAgbXkgJUVycm9yQWxsUmVxdWlyZWQgPSAkU2VsZi0+X0NoZWNrV29ya09yZGVyQWdlbnQoJUdldFBhcmFtKTsKCiAgICAgICAgICAgICMgaWYgZXZlcnl0aGluZyBpcyBmaW5lCiAgICAgICAgICAgIGlmICggISVFcnJvckFsbFJlcXVpcmVkICkgewoKICAgICAgICAgICAgICAgIG15ICRDb3VsZFVwZGF0ZVdvcmtPcmRlciA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCAgICAgID0+ICRXb3JrT3JkZXItPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgV29ya09yZGVyQWdlbnRJRCA9PiAkR2V0UGFyYW17VXNlclNlbGVjdGVkfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCRDb3VsZFVwZGF0ZVdvcmtPcmRlcikgewoKICAgICAgICAgICAgICAgICAgICAjIGxvYWQgbmV3IFVSTCBpbiBwYXJlbnQgd2luZG93IGFuZCBjbG9zZSBwb3B1cAogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Qb3B1cENsb3NlKAogICAgICAgICAgICAgICAgICAgICAgICBVUkwgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBY3Rpb249QWdlbnRJVFNNV29ya09yZGVyWm9vbTtXb3JrT3JkZXJJRD0kV29ya09yZGVyLT57V29ya09yZGVySUR9IiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXYXMgbm90IGFibGUgdG8gdXBkYXRlIHRoZSB3b3Jrb3JkZXIgIiVzIiEnLCAkV29ya09yZGVyLT57V29ya09yZGVySUR9CiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCAkRXJyb3JBbGxSZXF1aXJlZHtVc2VyfSApIHsKICAgICAgICAgICAgICAgICAgICAkVXNlclNlcnZlckVycm9yID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoICEkR2V0UGFyYW17VXNlclNlbGVjdGVkfSApIHsKICAgICAgICAgICAgJFVzZXJTZXJ2ZXJFcnJvciA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBjdXJyZW50IHdvcmtvcmRlciBhZ2VudAogICAgaWYgKCAkV29ya09yZGVyLT57V29ya09yZGVyQWdlbnRJRH0gKSB7CiAgICAgICAgbXkgJVVzZXJEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkV29ya09yZGVyLT57V29ya09yZGVyQWdlbnRJRH0sCiAgICAgICAgKTsKCiAgICAgICAgJFBhcmFte1VzZXJJRH0gPSAkVXNlckRhdGF7VXNlcklEfTsKICAgICAgICAkUGFyYW17VXNlcn0gICA9IHNwcmludGYgJyIlcyAlcyIgPCVzPicsCiAgICAgICAgICAgICRVc2VyRGF0YXtVc2VyRmlyc3RuYW1lfSwKICAgICAgICAgICAgJFVzZXJEYXRhe1VzZXJMYXN0bmFtZX0sCiAgICAgICAgICAgICRVc2VyRGF0YXtVc2VyRW1haWx9OwogICAgfQoKICAgICMgZ2V0IGNoYW5nZSB0aGF0IHdvcmtvcmRlciBiZWxvbmdzIHRvCiAgICBteSAkQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRXb3JrT3JkZXItPntDaGFuZ2VJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIHdoZXRoZXIgY2hhbmdlIHdhcyBmb3VuZAogICAgaWYgKCAhJENoYW5nZSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NvdWxkIG5vdCBmaW5kIENoYW5nZSBmb3IgV29ya09yZGVyICVzIScsICRXb3JrT3JkZXJJRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdVc2VyU2VhcmNoSW5pdCcsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIEl0ZW1JRCA9PiAnVXNlcicsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgIFRpdGxlID0+ICRXb3JrT3JkZXItPntXb3JrT3JkZXJUaXRsZX0sCiAgICAgICAgVHlwZSAgPT4gJ1NtYWxsJywKICAgICk7CgogICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNV29ya09yZGVyQWdlbnQnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIFVzZXJTZXJ2ZXJFcnJvciA9PiAkVXNlclNlcnZlckVycm9yLAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7JENoYW5nZX0sCiAgICAgICAgICAgICV7JFdvcmtPcmRlcn0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9vdGVyCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlciggVHlwZSA9PiAnU21hbGwnICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCnN1YiBfQ2hlY2tXb3JrT3JkZXJBZ2VudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgaGFzaCBmb3IgZXJyb3IgaW5mbwogICAgbXkgJUVycm9yczsKCiAgICAjIGNoZWNrIHdvcmtvcmRlciBhZ2VudAogICAgaWYgKCAhJFBhcmFte1VzZXJ9IHx8ICEkUGFyYW17VXNlclNlbGVjdGVkfSApIHsKICAgICAgICAkRXJyb3Jze1VzZXJ9ID0gMTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGdldCB3b3Jrb3JkZXIgYWdlbnQgZGF0YQogICAgICAgIG15ICVVc2VyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlclNlbGVjdGVkfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgZXJyb3IgaWYgdXNlciBub3QgZXhpc3RzCiAgICAgICAgaWYgKCAhJVVzZXIgKSB7CiAgICAgICAgICAgICRFcnJvcnN7VXNlcn0gPSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgY29tcGFyZSBpbnB1dCB2YWx1ZSB3aXRoIHVzZXIgZGF0YQogICAgICAgICAgICBteSAkQ2hlY2tTdHJpbmcgPSBzcHJpbnRmICciJXMgJXMiIDwlcz4nLAogICAgICAgICAgICAgICAgJFVzZXJ7VXNlckZpcnN0bmFtZX0sCiAgICAgICAgICAgICAgICAkVXNlcntVc2VyTGFzdG5hbWV9LAogICAgICAgICAgICAgICAgJFVzZXJ7VXNlckVtYWlsfTsKCiAgICAgICAgICAgICMgc2hvdyBlcnJvcgogICAgICAgICAgICBpZiAoICRDaGVja1N0cmluZyBuZSAkUGFyYW17VXNlcn0gKSB7CiAgICAgICAgICAgICAgICAkRXJyb3Jze1VzZXJ9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJUVycm9yczsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Xb3JrT3JkZXJEZWxldGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgV29ya09yZGVySUQKICAgIG15ICRXb3JrT3JkZXJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdXb3JrT3JkZXJJRCcgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkV29ya09yZGVySUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHdvcmtvcmRlciBvYmplY3QKICAgIG15ICRXb3JrT3JkZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpOwoKICAgICMgZ2V0IHdvcmtvcmRlciBkYXRhCiAgICBteSAkV29ya09yZGVyID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyR2V0KAogICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISRXb3JrT3JkZXIgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJFdvcmtPcmRlcklEICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiSVRTTVdvcmtPcmRlcjo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICAgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgIEFjdGlvbiAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBDaGFuZ2VJRCAgICA9PiAkV29ya09yZGVyLT57Q2hhbmdlSUR9LAogICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZXJyb3Igc2NyZWVuLCBkb24ndCBzaG93IHdvcmtvcmRlciBkZWxldGUgbWFzawogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyBvbiB0aGUgY2hhbmdlIScsICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259CiAgICAgICAgICAgICksCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnV29ya09yZGVyRGVsZXRlJyApIHsKCiAgICAgICAgIyBkZWxldGUgdGhlIHdvcmtvcmRlcgogICAgICAgIG15ICRDb3VsZERlbGV0ZVdvcmtPcmRlciA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckRlbGV0ZSgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlci0+e1dvcmtPcmRlcklEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICgkQ291bGREZWxldGVXb3JrT3JkZXIpIHsKCiAgICAgICAgICAgICMgcmVkaXJlY3QgdG8gY2hhbmdlLCB3aGVuIHRoZSBkZWxldGlvbiB3YXMgc3VjY2Vzc2Z1bAogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9JFdvcmtPcmRlci0+e0NoYW5nZUlEfSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UsIHdoZW4gZGVsZXRlIGZhaWxlZAogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAnV2FzIG5vdCBhYmxlIHRvIGRlbGV0ZSB0aGUgd29ya29yZGVyICVzIScsICRXb3JrT3JkZXItPntXb3JrT3JkZXJJRH0KICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGNoYW5nZSB0aGF0IHdvcmtvcmRlciBiZWxvbmdzIHRvCiAgICBteSAkQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRXb3JrT3JkZXItPntDaGFuZ2VJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGlmIGNoYW5nZSBpcyBmb3VuZAogICAgaWYgKCAhJENoYW5nZSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NvdWxkIG5vdCBmaW5kIENoYW5nZSBmb3IgV29ya09yZGVyICVzIScsICRXb3JrT3JkZXJJRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjb25kaXRpb24gb2JqZWN0CiAgICBteSAkQ29uZGl0aW9uT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nKTsKCiAgICAjIGdldCBhZmZlY3RlZCBjb25kaXRpb24gaWRzCiAgICBteSAkQWZmZWN0ZWRDb25kaXRpb25JRHMgPSAkQ29uZGl0aW9uT2JqZWN0LT5Db25kaXRpb25MaXN0QnlPYmplY3RUeXBlKAogICAgICAgIE9iamVjdFR5cGUgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgIFNlbGVjdG9yICAgPT4gJFdvcmtPcmRlci0+e1dvcmtPcmRlcklEfSwKICAgICAgICBDaGFuZ2VJRCAgID0+ICRXb3JrT3JkZXItPntDaGFuZ2VJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApIHx8IFtdOwoKICAgICMgc2V0IHRoZSBkaWFsb2cgdHlwZS4gQXMgZGVmYXVsdCwgdGhlIGRpYWxvZyB3aWxsIGhhdmUgMiBidXR0b25zOiBZZXMgYW5kIE5vCiAgICBteSAkRGlhbG9nVHlwZSA9ICdDb25maXJtYXRpb24nOwoKICAgICMgZGlzcGxheSBsaXN0IG9mIGFmZmVjdGVkIGNvbmRpdGlvbnMKICAgIGlmICggQHskQWZmZWN0ZWRDb25kaXRpb25JRHN9ICkgewoKICAgICAgICAjIHNldCB0aGUgZGlhbG9nIHR5cGUgdG8gaGF2ZSBvbmx5IDEgYnV0dG9uOiBPawogICAgICAgICREaWFsb2dUeXBlID0gJ01lc3NhZ2UnOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnV29ya09yZGVySW5Db25kaXRpb24nLAogICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICk7CgogICAgICAgIENPTkRJVElPTklEOgogICAgICAgIGZvciBteSAkQ29uZGl0aW9uSUQgKCBAeyRBZmZlY3RlZENvbmRpdGlvbklEc30gKSB7CgogICAgICAgICAgICAjIGdldCBjb25kaXRpb24KICAgICAgICAgICAgbXkgJENvbmRpdGlvbiA9ICRDb25kaXRpb25PYmplY3QtPkNvbmRpdGlvbkdldCgKICAgICAgICAgICAgICAgIENvbmRpdGlvbklEID0+ICRDb25kaXRpb25JRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgY29uZGl0aW9uCiAgICAgICAgICAgIG5leHQgQ09ORElUSU9OSUQgaWYgISRDb25kaXRpb247CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1dvcmtPcmRlckluQ29uZGl0aW9uUm93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICV7JENvbmRpdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9Xb3JrT3JkZXJJbkNvbmRpdGlvbicsCiAgICAgICAgICAgIERhdGEgPT4gJFdvcmtPcmRlciwKICAgICAgICApOwogICAgfQoKICAgICMgb3V0cHV0IGNvbnRlbnQKICAgIG15ICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNV29ya09yZGVyRGVsZXRlJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7JENoYW5nZX0sCiAgICAgICAgICAgICV7JFdvcmtPcmRlcn0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBidWlsZCB0aGUgcmV0dXJuZWQgZGF0YSBzdHJ1Y3R1cmUKICAgIG15ICVEYXRhID0gKAogICAgICAgIEhUTUwgICAgICAgPT4gJE91dHB1dCwKICAgICAgICBEaWFsb2dUeXBlID0+ICREaWFsb2dUeXBlLAogICAgKTsKCiAgICAjIHJldHVybiBKU09OLVN0cmluZyBiZWNhdXNlIG9mIEFKQVgtTW9kZQogICAgbXkgJE91dHB1dEpTT04gPSAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKCBEYXRhID0+IFwlRGF0YSApOwoKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PScgLiAkTGF5b3V0T2JqZWN0LT57Q2hhcnNldH0sCiAgICAgICAgQ29udGVudCAgICAgPT4gJE91dHB1dEpTT04sCiAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Xb3JrT3JkZXJFZGl0OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGdldCBuZWVkZWQgV29ya09yZGVySUQKICAgIG15ICRXb3JrT3JkZXJJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdXb3JrT3JkZXJJRCcgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFdvcmtPcmRlcklEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIFdvcmtPcmRlcklEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB3b3JrZG9yZGVyIG9iamVjdAogICAgbXkgJFdvcmtPcmRlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyk7CgogICAgIyBnZXQgd29ya29yZGVyIGRhdGEKICAgIG15ICRXb3JrT3JkZXIgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBlcnJvcgogICAgaWYgKCAhJFdvcmtPcmRlciApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnLCAkV29ya09yZGVySUQgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJENvbmZpZ09iamVjdC0+R2V0KCJJVFNNV29ya09yZGVyOjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgIyBjaGVjayBwZXJtaXNzaW9ucwogICAgbXkgJEFjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgVHlwZSAgICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgQWN0aW9uICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIENoYW5nZUlEICAgID0+ICRXb3JrT3JkZXItPntDaGFuZ2VJRH0sCiAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMgb24gdGhlIGNoYW5nZSEnLCAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufQogICAgICAgICAgICApLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBzdG9yZSBuZWVkZWQgcGFyYW1ldGVycyBpbiAlR2V0UGFyYW0gdG8gbWFrZSBpdCByZWxvYWRhYmxlCiAgICBteSAlR2V0UGFyYW07CiAgICBmb3IgbXkgJFBhcmFtTmFtZSAocXcoV29ya09yZGVyVGl0bGUgSW5zdHJ1Y3Rpb24gUGxhbm5lZEVmZm9ydCBBdHRhY2htZW50VXBsb2FkIEZpbGVJRCkpIHsKICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CiAgICB9CgogICAgIyBnZXQgdGhlIGNoZWNrYm94IHZhbHVlIGFuZCBzdG9yZSBpdCBpbiAlR2V0UGFyYW0gdG8gbWFrZSBpdCByZWxvYWRhYmxlCiAgICAkR2V0UGFyYW17TW92ZUZvbGxvd2luZ1dvcmtPcmRlcnN9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ01vdmVGb2xsb3dpbmdXb3JrT3JkZXJzJyApOwoKICAgICMgZ2V0IGFsbCB3b3Jrb3JkZXIgaWRzIGZvciB0aGlzIGNoYW5nZQogICAgbXkgJFdvcmtPcmRlcklEc1JlZiA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckxpc3QoCiAgICAgICAgQ2hhbmdlSUQgPT4gJFdvcmtPcmRlci0+e0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZmluZCBvdXQgdGhlIGZvbGxvd2luZyB3b3Jrb3JkZXIgaWRzCiAgICBteSBARm9sbG93aW5nV29ya09yZGVySURzOwogICAgbXkgJE93bldvcmtPcmRlcklERm91bmQ7CiAgICBXT1JLT1JERVJJRDoKICAgIGZvciBteSAkT3RoZXJXb3JrT3JkZXJJRCAoIEB7JFdvcmtPcmRlcklEc1JlZn0gKSB7CgogICAgICAgICMgY2hlY2sgaWYgdGhlIG90aGVyIHdvcmtvcmRlciBpZCBpcyB0aGUgb3duIHdvcmtvcmRlciBpZAogICAgICAgIGlmICggJE90aGVyV29ya09yZGVySUQgZXEgJFdvcmtPcmRlcklEICkgewogICAgICAgICAgICAkT3duV29ya09yZGVySURGb3VuZCA9IDE7CiAgICAgICAgICAgIG5leHQgV09SS09SREVSSUQ7CiAgICAgICAgfQoKICAgICAgICAjIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGZvbGxvd2luZyB3b3Jrb3JkZXIgaWRzCiAgICAgICAgbmV4dCBXT1JLT1JERVJJRCBpZiAhJE93bldvcmtPcmRlcklERm91bmQ7CgogICAgICAgICMgY29sbGVjdCB0aGUgZm9sbG93aW5nIHdvcmtvcmRlciBpZHMKICAgICAgICBwdXNoIEBGb2xsb3dpbmdXb3JrT3JkZXJJRHMsICRPdGhlcldvcmtPcmRlcklEOwogICAgfQoKICAgICMgZ2V0IER5bmFtaWMgZmllbGRzIGZyb20gUGFyYW1PYmplY3QKICAgIG15ICVEeW5hbWljRmllbGRWYWx1ZXM7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgbXkgJER5bmFtaWNGaWVsZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICBGaWVsZEZpbHRlciA9PiAkU2VsZi0+e0NvbmZpZ30tPntEeW5hbWljRmllbGR9IHx8IHt9LAogICAgKTsKCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIGJhY2tlbmQgb2JqZWN0CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBleHRyYWN0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZyb20gdGhlIHdlYiByZXF1ZXN0IGFuZCBhZGQgdGhlIHByZWZpeAogICAgICAgICREeW5hbWljRmllbGRWYWx1ZXN7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9CiAgICAgICAgICAgID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFZhbHVlR2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICk7CiAgICB9CgogICAgIyBzdG9yZSB0aW1lIHJlbGF0ZWQgZmllbGRzIGluICVHZXRQYXJhbQogICAgZm9yIG15ICRUaW1lVHlwZSAocXcoUGxhbm5lZFN0YXJ0VGltZSBQbGFubmVkRW5kVGltZSkpIHsKICAgICAgICBmb3IgbXkgJFRpbWVQYXJ0IChxdyhZZWFyIE1vbnRoIERheSBIb3VyIE1pbnV0ZSkpIHsKICAgICAgICAgICAgbXkgJFBhcmFtTmFtZSA9ICRUaW1lVHlwZSAuICRUaW1lUGFydDsKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwogICAgICAgIH0KICAgIH0KCiAgICAjIFJlbWVtYmVyIHRoZSByZWFzb24gd2h5IHNhdmluZyB3YXMgbm90IGF0dGVtcHRlZC4KICAgIG15ICVWYWxpZGF0aW9uRXJyb3I7CgogICAgIyBnZXQgdXBsb2FkIGNhY2hlIG9iamVjdAogICAgbXkgJFVwbG9hZENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGUnKTsKCiAgICAjIGdldCBmb3JtIGlkCiAgICAkU2VsZi0+e0Zvcm1JRH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRm9ybUlEJyApOwoKICAgICMgY3JlYXRlIGZvcm0gaWQKICAgIGlmICggISRTZWxmLT57Rm9ybUlEfSApIHsKICAgICAgICAkU2VsZi0+e0Zvcm1JRH0gPSAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JRENyZWF0ZSgpOwogICAgfQoKICAgICMgZ2V0IHRpbWUgb2JqZWN0CiAgICBteSAkVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyk7CgogICAgIyB1cGRhdGUgd29ya29yZGVyCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2F2ZScgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgICMgdGhlIHRpdGxlIGlzIHJlcXVpcmVkCiAgICAgICAgaWYgKCAhJEdldFBhcmFte1dvcmtPcmRlclRpdGxlfSApIHsKICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntXb3JrT3JkZXJUaXRsZVNlcnZlckVycm9yfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBsb2cgb2JqZWN0CiAgICAgICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAgICAgIyBjaGVjayB3aGV0aGVyIGNvbXBsZXRlIHRpbWVzIGFyZSBwYXNzZWQgYW5kIGJ1aWxkIHRoZSB0aW1lIHN0YW1wcwogICAgICAgIG15ICVTeXN0ZW1UaW1lOwogICAgICAgIFRJTUVUWVBFOgogICAgICAgIGZvciBteSAkVGltZVR5cGUgKHF3KFBsYW5uZWRTdGFydFRpbWUgUGxhbm5lZEVuZFRpbWUpKSB7CiAgICAgICAgICAgIGZvciBteSAkVGltZVBhcnQgKHF3KFllYXIgTW9udGggRGF5IEhvdXIgTWludXRlKSkgewogICAgICAgICAgICAgICAgbXkgJFBhcmFtTmFtZSA9ICRUaW1lVHlwZSAuICRUaW1lUGFydDsKICAgICAgICAgICAgICAgIGlmICggIWRlZmluZWQgJEdldFBhcmFteyRQYXJhbU5hbWV9ICkgewogICAgICAgICAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJFBhcmFtTmFtZSEiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBUSU1FVFlQRTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB0cmFuc2Zvcm0gd29yayBvcmRlciBwbGFubmVkIHRpbWUsIHRpbWUgc3RhbXAgYmFzZWQgb24gdXNlciB0aW1lIHpvbmUKICAgICAgICAgICAgJUdldFBhcmFtID0gJExheW91dE9iamVjdC0+VHJhbnNmb3JtRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgIFByZWZpeCA9PiAkVGltZVR5cGUsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGZvcm1hdCBhcyB0aW1lc3RhbXAKICAgICAgICAgICAgJEdldFBhcmFteyRUaW1lVHlwZX0gPSBzcHJpbnRmICclMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6MDAnLAogICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnWWVhcicgfSwKICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ01vbnRoJyB9LAogICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnRGF5JyB9LAogICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnSG91cicgfSwKICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ01pbnV0ZScgfTsKCiAgICAgICAgICAgICMgc2FuaXR5IGNoZWNrIHRoZSBhc3NlbWJsZWQgdGltZXN0YW1wCiAgICAgICAgICAgICRTeXN0ZW1UaW1leyRUaW1lVHlwZX0gPSAkVGltZU9iamVjdC0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEdldFBhcmFteyRUaW1lVHlwZX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRvIG5vdCBzYXZlIGlmIHRpbWUgaXMgaW52YWxpZAogICAgICAgICAgICBpZiAoICEkU3lzdGVtVGltZXskVGltZVR5cGV9ICkgewogICAgICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcnsgJFRpbWVUeXBlIC4gJ0ludmFsaWQnIH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHZhbGlkaXR5IG9mIHRoZSBwbGFubmVkIHN0YXJ0IGFuZCBlbmQgdGltZXMKICAgICAgICBpZiAoICRTeXN0ZW1UaW1le1BsYW5uZWRTdGFydFRpbWV9ICYmICEkU3lzdGVtVGltZXtQbGFubmVkRW5kVGltZX0gKSB7CiAgICAgICAgICAgICRWYWxpZGF0aW9uRXJyb3J7UGxhbm5lZEVuZFRpbWVJbnZhbGlkfSAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntQbGFubmVkRW5kVGltZUVycm9yVHlwZX0gPSAnR2VuZXJpY1NlcnZlckVycm9yJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAhJFN5c3RlbVRpbWV7UGxhbm5lZFN0YXJ0VGltZX0gJiYgJFN5c3RlbVRpbWV7UGxhbm5lZEVuZFRpbWV9ICkgewogICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye1BsYW5uZWRTdGFydFRpbWVJbnZhbGlkfSAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntQbGFubmVkU3RhcnRUaW1lRXJyb3JUeXBlfSA9ICdHZW5lcmljU2VydmVyRXJyb3InOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICggJFN5c3RlbVRpbWV7UGxhbm5lZFN0YXJ0VGltZX0gJiYgJFN5c3RlbVRpbWV7UGxhbm5lZEVuZFRpbWV9ICkKICAgICAgICAgICAgJiYgKCAkU3lzdGVtVGltZXtQbGFubmVkRW5kVGltZX0gPD0gJFN5c3RlbVRpbWV7UGxhbm5lZFN0YXJ0VGltZX0gKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye1BsYW5uZWRTdGFydFRpbWVJbnZhbGlkfSAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntQbGFubmVkU3RhcnRUaW1lRXJyb3JUeXBlfSA9ICdCZWZvcmVUaGFuRW5kVGltZVNlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9ybWF0IG9mIHBsYW5uZWQgZWZmb3J0LCBlbXB0eSBpcyBhbGxvd2VkCiAgICAgICAgaWYgKAogICAgICAgICAgICAkR2V0UGFyYW17UGxhbm5lZEVmZm9ydH0KICAgICAgICAgICAgJiYgJEdldFBhcmFte1BsYW5uZWRFZmZvcnR9ICF+IG17IFxBIFxkKiAoPzogWy5dIFxkezEsMn0gKT8gXHogfXhtcwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9yeydQbGFubmVkRWZmb3J0SW52YWxpZCd9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgbXkgJFZhbGlkYXRpb25SZXN1bHQgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkVmFsdWVWYWxpZGF0ZSgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgICAgIE1hbmRhdG9yeSAgICAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntEeW5hbWljRmllbGR9LT57ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID09IDIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkVmFsaWRhdGlvblJlc3VsdCkgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICdDb3VsZCBub3QgcGVyZm9ybSB2YWxpZGF0aW9uIG9uIGZpZWxkICVzIScsICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH0KICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcHJvcGFnYXRlIHZhbGlkYXRpb24gZXJyb3IgdG8gdGhlIEVycm9yIHZhcmlhYmxlIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSBmcm9udGVuZAogICAgICAgICAgICBpZiAoICRWYWxpZGF0aW9uUmVzdWx0LT57U2VydmVyRXJyb3J9ICkgewogICAgICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAnIFNlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiBhbiBhdHRhY2htZW50IG11c3QgYmUgZGVsZXRlZAogICAgICAgIG15IEBBdHRhY2htZW50SURzID0gbWFwIHsKICAgICAgICAgICAgbXkgKCRJRCkgPSAkXyA9fiBteyBcQSBBdHRhY2htZW50RGVsZXRlIChcZCspIFx6IH14bXM7CiAgICAgICAgICAgICRJRCA/ICRJRCA6ICgpOwogICAgICAgIH0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbU5hbWVzKCk7CgogICAgICAgICMgY2hlY2sgaWYgYW4gYXR0YWNobWVudCBtdXN0IGJlIGRlbGV0ZWQKICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgIGZvciBteSAkTnVtYmVyICggcmV2ZXJzZSBzb3J0IEBBdHRhY2htZW50SURzICkgewoKICAgICAgICAgICAgIyBjaGVjayBpZiB0aGUgZGVsZXRlIGJ1dHRvbiB3YXMgcHJlc3NlZCBmb3IgdGhpcyBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICREZWxldGUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiQXR0YWNobWVudERlbGV0ZSROdW1iZXIiICk7CgogICAgICAgICAgICAjIGNoZWNrIG5leHQgYXR0YWNobWVudCBpZiBpdCB3YXMgbm90IHByZXNzZWQKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkRGVsZXRlOwoKICAgICAgICAgICAgIyByZW1lbWJlciB0aGF0IHdlIG5lZWQgdG8gc2hvdyB0aGUgcGFnZSBhZ2FpbgogICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye0F0dGFjaG1lbnR9ID0gMTsKCiAgICAgICAgICAgICMgcmVtb3ZlIHRoZSBhdHRhY2htZW50IGZyb20gdGhlIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JRFJlbW92ZUZpbGUoCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgRmlsZUlEID0+ICROdW1iZXIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIHRoZXJlIHdhcyBhbiBhdHRhY2htZW50IHVwbG9hZAogICAgICAgIGlmICggJEdldFBhcmFte0F0dGFjaG1lbnRVcGxvYWR9ICkgewoKICAgICAgICAgICAgIyByZW1lbWJlciB0aGF0IHdlIG5lZWQgdG8gc2hvdyB0aGUgcGFnZSBhZ2FpbgogICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye0F0dGFjaG1lbnR9ID0gMTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSB1cGxvYWRlZCBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICVVcGxvYWRTdHVmZiA9ICRQYXJhbU9iamVjdC0+R2V0VXBsb2FkQWxsKAogICAgICAgICAgICAgICAgUGFyYW0gID0+ICdGaWxlVXBsb2FkJywKICAgICAgICAgICAgICAgIFNvdXJjZSA9PiAnc3RyaW5nJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIGF0dGFjaG1lbnQgdG8gdGhlIHVwbG9hZCBjYWNoZQogICAgICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREFkZEZpbGUoCiAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgJVVwbG9hZFN0dWZmLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBpZiBhbGwgcGFzc2VkIGRhdGEgaXMgdmFsaWQKICAgICAgICBpZiAoICElVmFsaWRhdGlvbkVycm9yICkgewogICAgICAgICAgICBteSAkQ291bGRVcGRhdGVXb3JrT3JkZXIgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJVcGRhdGUoCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCAgICAgID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlICAgPT4gJEdldFBhcmFte1dvcmtPcmRlclRpdGxlfSwKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uICAgICAgPT4gJEdldFBhcmFte0luc3RydWN0aW9ufSwKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJEdldFBhcmFte1BsYW5uZWRTdGFydFRpbWV9LAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWUgICA9PiAkR2V0UGFyYW17UGxhbm5lZEVuZFRpbWV9LAogICAgICAgICAgICAgICAgUGxhbm5lZEVmZm9ydCAgICA9PiAkR2V0UGFyYW17UGxhbm5lZEVmZm9ydH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICVEeW5hbWljRmllbGRWYWx1ZXMsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHVwZGF0ZSB3YXMgc3VjY2Vzc2Z1bAogICAgICAgICAgICBpZiAoJENvdWxkVXBkYXRlV29ya09yZGVyKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgYWxsIGF0dGFjaG1lbnRzIGZyb20gdXBsb2FkIGNhY2hlCiAgICAgICAgICAgICAgICBteSBAQXR0YWNobWVudHMgPSAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JREdldEFsbEZpbGVzRGF0YSgKICAgICAgICAgICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIGEgbG9va3VwIGxvb2t1cCBoYXNoIG9mIHRoZSBuZXcgYXR0YWNobWVudHMKICAgICAgICAgICAgICAgIG15ICVOZXdBdHRhY2htZW50OwogICAgICAgICAgICAgICAgZm9yIG15ICRBdHRhY2htZW50IChAQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICAgICAgICAgIyB0aGUga2V5IGlzIHRoZSBmaWxlbmFtZSArIGZpbGVzaXplICsgY29udGVudCB0eXBlCiAgICAgICAgICAgICAgICAgICAgbXkgJEtleSA9ICRBdHRhY2htZW50LT57RmlsZW5hbWV9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJEF0dGFjaG1lbnQtPntGaWxlc2l6ZX0KICAgICAgICAgICAgICAgICAgICAgICAgLiAkQXR0YWNobWVudC0+e0NvbnRlbnRUeXBlfTsKCiAgICAgICAgICAgICAgICAgICAgIyBhcHBlbmQgY29udGVudCBpZCBpZiBhdmFpbGFibGUgKGZvciBuZXcgaW5saW5lIGltYWdlcykKICAgICAgICAgICAgICAgICAgICBpZiAoICRBdHRhY2htZW50LT57Q29udGVudElEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEtleSAuPSAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIHN0b3JlIGFsbCBvZiB0aGUgbmV3IGF0dGFjaG1lbnQgZGF0YQogICAgICAgICAgICAgICAgICAgICROZXdBdHRhY2htZW50eyRLZXl9ID0gJEF0dGFjaG1lbnQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBnZXQgYWxsIGF0dGFjaG1lbnRzIG1ldGEgZGF0YQogICAgICAgICAgICAgICAgbXkgQEV4aXN0aW5nQXR0YWNobWVudHMgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBdHRhY2htZW50TGlzdCgKICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgdGhlIGV4aXN0aW5nIGF0dGFjaG1lbnRzCiAgICAgICAgICAgICAgICBGSUxFTkFNRToKICAgICAgICAgICAgICAgIGZvciBteSAkRmlsZW5hbWUgKEBFeGlzdGluZ0F0dGFjaG1lbnRzKSB7CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBleGlzdGluZyBhdHRhY2htZW50IGRhdGEKICAgICAgICAgICAgICAgICAgICBteSAkQXR0YWNobWVudERhdGEgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBdHRhY2htZW50R2V0KAogICAgICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICRGaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgZG8gbm90IGNvbnNpZGVyIGlubGluZSBhdHRhY2htZW50cwogICAgICAgICAgICAgICAgICAgIG5leHQgRklMRU5BTUUgaWYgJEF0dGFjaG1lbnREYXRhLT57UHJlZmVyZW5jZXN9LT57Q29udGVudElEfTsKCiAgICAgICAgICAgICAgICAgICAgIyB0aGUga2V5IGlzIHRoZSBmaWxlbmFtZSArIGZpbGVzaXplICsgY29udGVudCB0eXBlCiAgICAgICAgICAgICAgICAgICAgIyAobm8gY29udGVudCBpZCwgYXMgZXhpc3RpbmcgYXR0YWNobWVudHMgZG9uJ3QgaGF2ZSBpdCkKICAgICAgICAgICAgICAgICAgICBteSAkS2V5ID0gJEF0dGFjaG1lbnREYXRhLT57RmlsZW5hbWV9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJEF0dGFjaG1lbnREYXRhLT57RmlsZXNpemV9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJEF0dGFjaG1lbnREYXRhLT57Q29udGVudFR5cGV9OwoKICAgICAgICAgICAgICAgICAgICAjIGF0dGFjaG1lbnQgaXMgYWxyZWFkeSBleGlzdGluZywgd2UgY2FuIGRlbGV0ZSBpdCBmcm9tIHRoZSBuZXcgYXR0YWNobWVudCBoYXNoCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkTmV3QXR0YWNobWVudHskS2V5fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlICROZXdBdHRhY2htZW50eyRLZXl9OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBleGlzdGluZyBhdHRhY2htZW50IGlzIG5vIGxvbmdlciBpbiBuZXcgYXR0YWNobWVudHMgaGFzaAogICAgICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWxldGUgdGhlIGV4aXN0aW5nIGF0dGFjaG1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJERlbGV0ZVN1Y2Nlc3NmdWwgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBdHRhY2htZW50RGVsZXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJFdvcmtPcmRlci0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICRGaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhJERlbGV0ZVN1Y2Nlc3NmdWwgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgd3JpdGUgdGhlIG5ldyBhdHRhY2htZW50cwogICAgICAgICAgICAgICAgQVRUQUNITUVOVDoKICAgICAgICAgICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoIHZhbHVlcyAlTmV3QXR0YWNobWVudCApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBpZiBhdHRhY2htZW50IGlzIGFuIGlubGluZSBhdHRhY2htZW50CiAgICAgICAgICAgICAgICAgICAgbXkgJElubGluZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHJlbWVtYmVyIHRoYXQgaXQgaXMgaW5saW5lCiAgICAgICAgICAgICAgICAgICAgICAgICRJbmxpbmUgPSAxOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyByZW1lbWJlciBpZiB0aGlzIGlubGluZSBhdHRhY2htZW50IGlzIHVzZWQgaW4gdGhlIHdvcmtvcmRlciBpbnN0cnVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBteSAkQ29udGVudElERm91bmQ7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIHdvcmtvcmRlciBpbnN0cnVjdGlvbiBmb3IgY29udGVudCBpZAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtJbnN0cnVjdGlvbn0gPX4gbXsgJEF0dGFjaG1lbnQtPntDb250ZW50SUR9IH14bXMgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmb3VuZCB0aGUgY29udGVudCBpZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJENvbnRlbnRJREZvdW5kID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSBkbyBub3Qgd2FudCB0byBrZWVwIHRoaXMgYXR0YWNobWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGl0IHdhcyBkZWxldGVkIGluIHRoZSByaWNodCB0ZXh0IGVkaXRvcgogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRDb250ZW50SURGb3VuZDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgYWRkIGF0dGFjaG1lbnQKICAgICAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckF0dGFjaG1lbnRBZGQoCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEF0dGFjaG1lbnR9LAogICAgICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUlEICAgID0+ICRXb3JrT3JkZXItPntDaGFuZ2VJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRJbmxpbmU7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fTsKCiAgICAgICAgICAgICAgICAgICAgIyBwaWN0dXJlIHVybCBpbiB1cGxvYWQgY2FjaGUKICAgICAgICAgICAgICAgICAgICBteSAkU2VhcmNoID0gIkFjdGlvbj1QaWN0dXJlVXBsb2FkIC4rIEZvcm1JRD0kU2VsZi0+e0Zvcm1JRH0gLisgIgogICAgICAgICAgICAgICAgICAgICAgICAuICJDb250ZW50SUQ9JEF0dGFjaG1lbnQtPntDb250ZW50SUR9IjsKCiAgICAgICAgICAgICAgICAgICAgIyBwaWN0dXJlIHVybCBpbiB3b3Jrb3JkZXIgYXR0dGFjaG1lbnQKICAgICAgICAgICAgICAgICAgICBteSAkUmVwbGFjZSA9ICJBY3Rpb249QWdlbnRJVFNNV29ya09yZGVyWm9vbTtTdWJhY3Rpb249RG93bmxvYWRBdHRhY2htZW50OyIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiRmlsZW5hbWU9JEF0dGFjaG1lbnQtPntGaWxlbmFtZX07V29ya09yZGVySUQ9JFdvcmtPcmRlcklEIjsKCiAgICAgICAgICAgICAgICAgICAgIyByZXBsYWNlIHVybAogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtJbnN0cnVjdGlvbn0gPX4gc3skU2VhcmNofXskUmVwbGFjZX14bXM7CgogICAgICAgICAgICAgICAgICAgICMgdXBkYXRlIHdvcmtvcmRlcgogICAgICAgICAgICAgICAgICAgICRTdWNjZXNzID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyVXBkYXRlKAogICAgICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0aW9uID0+ICRHZXRQYXJhbXtJbnN0cnVjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ291bGQgbm90IHVwZGF0ZSB0aGUgaW5saW5lIGltYWdlIFVSTHMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gImZvciBXb3JrT3JkZXJJRCAnJFdvcmtPcmRlcklEJyEhIiwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBpZiB0aGVyZSBhcmUgYW55IGZvbGxvd2luZyB3b3Jrb3JkZXJzCiAgICAgICAgICAgICAgICAjIGFuZCBpZiB0aGUgZm9sbG93aW5nIHdvcmtvcmRlcnMgc2hvdWxkIGJlIG1vdmVkLAogICAgICAgICAgICAgICAgIyB0aGF0IG1lYW5zIHdlIHdhbnQgdG8ga2VlcCB0aGUgZGlmZmVyZW5jZQogICAgICAgICAgICAgICAgIyBiZXR3ZWVuIHRoZSBwbGFubmVkIGVuZCBkYXRlIG9mIHRoaXMgd29ya29yZGVyIGFuZCB0aGUgdGhlIHBsYW5uZWQgc3RhcnQgZGF0ZXMgb2YgQUxMIExBVEVSIHdvcmtvcmRlcnMKICAgICAgICAgICAgICAgIGlmICggQEZvbGxvd2luZ1dvcmtPcmRlcklEcyAmJiAkR2V0UGFyYW17TW92ZUZvbGxvd2luZ1dvcmtPcmRlcnN9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgdGhlIE9MRCBwbGFubmVkIGVuZCB0aW1lIG9mIHRoaXMgd29ya29yZGVyCiAgICAgICAgICAgICAgICAgICAgIyBpbnRvIHN5c3RlbSB0aW1lIChlcG9jaCBzZWNvbmRzKQogICAgICAgICAgICAgICAgICAgIG15ICRPbGRQbGFubmVkRW5kVGltZVN5c3RlbVRpbWUgPSAkVGltZU9iamVjdC0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkV29ya09yZGVyLT57UGxhbm5lZEVuZFRpbWV9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgY29udmVydCB0aGUgTkVXIHBsYW5uZWQgZW5kIHRpbWUgb2YgdGhpcyB3b3Jrb3JkZXIKICAgICAgICAgICAgICAgICAgICAjIGludG8gc3lzdGVtIHRpbWUgKGVwb2NoIHNlY29uZHMpCiAgICAgICAgICAgICAgICAgICAgbXkgJE5ld1BsYW5uZWRFbmRUaW1lU3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRHZXRQYXJhbXtQbGFubmVkRW5kVGltZX0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgdGltZQogICAgICAgICAgICAgICAgICAgIG15ICREaWZmVGltZSA9ICROZXdQbGFubmVkRW5kVGltZVN5c3RlbVRpbWUgLSAkT2xkUGxhbm5lZEVuZFRpbWVTeXN0ZW1UaW1lOwoKICAgICAgICAgICAgICAgICAgICAjIG1vZGlmeSBhbGwgZm9sbG93aW5nIHdvcmtvcmRlcnMKICAgICAgICAgICAgICAgICAgICBXT1JLT1JERVJJRDoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFdvcmtPcmRlcklEIChARm9sbG93aW5nV29ya09yZGVySURzKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGdldCB3b3Jrb3JkZXIgZGF0YQogICAgICAgICAgICAgICAgICAgICAgICBteSAkV29ya09yZGVyID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjYWxjdWxhdGUgdGhlIG5ldyBwbGFubmVkIHN0YXJ0IGFuZCBlbmQgdGltZSBmb3IgdGhpcyBmb2xsb3dpbmcgd29ya29yZGVyCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICVUaW1lRGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRUaW1lVHlwZSAocXcoUGxhbm5lZFN0YXJ0VGltZSBQbGFubmVkRW5kVGltZSkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgdGhlIG9sZCBwbGFubmVkIHRpbWVzIG9mIHRoZSB3b3Jrb3JkZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW50byBzeXN0ZW0gdGltZSAoZXBvY2ggc2Vjb25kcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lRGF0YXskVGltZVR5cGV9ID0gJFRpbWVPYmplY3QtPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkV29ya09yZGVyLT57JFRpbWVUeXBlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGQgdGhlIGRpZmZlcmVuY2UgYW5kIGNvbnZlcnQgdGltZSB0byB0aW1lc3RhbXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUaW1lRGF0YXskVGltZVR5cGV9ID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFRpbWVEYXRheyRUaW1lVHlwZX0gKyAkRGlmZlRpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIHVwZGF0ZSB0aGUgd29ya29yZGVyIHdpdGggdGhlIG5ldyB0aW1lcwogICAgICAgICAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVUaW1lRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlLCBpZiB1cGRhdGUgZmFpbGVkCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV2FzIG5vdCBhYmxlIHRvIHVwZGF0ZSBXb3JrT3JkZXIgJXMhJywgJFdvcmtPcmRlcklECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZGVsZXRlIHRoZSB1cGxvYWQgY2FjaGUKICAgICAgICAgICAgICAgICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlEUmVtb3ZlKCBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9ICk7CgogICAgICAgICAgICAgICAgIyBsb2FkIG5ldyBVUkwgaW4gcGFyZW50IHdpbmRvdyBhbmQgY2xvc2UgcG9wdXAKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Qb3B1cENsb3NlKAogICAgICAgICAgICAgICAgICAgIFVSTCA9PiAiQWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlclpvb207V29ya09yZGVySUQ9JFdvcmtPcmRlcklEIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UsIHdoZW4gdXBkYXRlIGZhaWxlZAogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fQogICAgICAgICAgICAgICAgICAgICAgICAtPlRyYW5zbGF0ZSggJ1dhcyBub3QgYWJsZSB0byB1cGRhdGUgV29ya09yZGVyICVzIScsICRXb3JrT3JkZXJJRCApLAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZWxzZSB7CgogICAgICAgICMgZGVsZXRlIGFsbCBrZXlzIGZyb20gR2V0UGFyYW0gd2hlbiBpdCBpcyBubyBTdWJhY3Rpb24KICAgICAgICAlR2V0UGFyYW0gPSAoKTsKCiAgICAgICAgIyBhbHNvIHJlc2V0IHRoZSB0aW1lIGZpZWxkcwogICAgICAgIGZvciBteSAkVGltZVR5cGUgKHF3KFBsYW5uZWRTdGFydFRpbWUgUGxhbm5lZEVuZFRpbWUpKSB7CgogICAgICAgICAgICBpZiAoICRXb3JrT3JkZXItPnskVGltZVR5cGV9ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHBsYW5uZWQgc3RhcnQgdGltZSBmcm9tIHdvcmtvcmRlcgogICAgICAgICAgICAgICAgbXkgJFN5c3RlbVRpbWUgPSAkVGltZU9iamVjdC0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRXb3JrT3JkZXItPnskVGltZVR5cGV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICggJFNlY29uZCwgJE1pbnV0ZSwgJEhvdXIsICREYXksICRNb250aCwgJFllYXIgKSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU3lzdGVtVGltZSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgdGhlIHBhcmFtZXRlciBoYXNoIGZvciBCdWlsZERhdGVTZWxlY3Rpb24oKQogICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnTWludXRlJyB9ID0gJE1pbnV0ZTsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ0hvdXInIH0gICA9ICRIb3VyOwogICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnRGF5JyB9ICAgID0gJERheTsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ01vbnRoJyB9ICA9ICRNb250aDsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1llYXInIH0gICA9ICRZZWFyOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgbWV0YSBkYXRhCiAgICAgICAgbXkgQEV4aXN0aW5nQXR0YWNobWVudHMgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBdHRhY2htZW50TGlzdCgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICk7CgogICAgICAgICMgY29weSBhbGwgZXhpc3RpbmcgYXR0YWNobWVudHMgdG8gdXBsb2FkIGNhY2hlCiAgICAgICAgRklMRU5BTUU6CiAgICAgICAgZm9yIG15ICRGaWxlbmFtZSAoQEV4aXN0aW5nQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBleGlzdGluZyBhdHRhY2htZW50IGRhdGEKICAgICAgICAgICAgbXkgJEF0dGFjaG1lbnREYXRhID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQXR0YWNobWVudEdldCgKICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgID0+ICRGaWxlbmFtZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZG8gbm90IGNvbnNpZGVyIGlubGluZSBhdHRhY2htZW50cwogICAgICAgICAgICBuZXh0IEZJTEVOQU1FIGlmICRBdHRhY2htZW50RGF0YS0+e1ByZWZlcmVuY2VzfS0+e0NvbnRlbnRJRH07CgogICAgICAgICAgICAjIGFkZCBhdHRhY2htZW50IHRvIHRoZSB1cGxvYWQgY2FjaGUKICAgICAgICAgICAgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURBZGRGaWxlKAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEF0dGFjaG1lbnREYXRhLT57RmlsZW5hbWV9LAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEF0dGFjaG1lbnREYXRhLT57Q29udGVudH0sCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAkQXR0YWNobWVudERhdGEtPntDb250ZW50VHlwZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGNoYW5nZSB0aGF0IHdvcmtvcmRlciBiZWxvbmdzIHRvCiAgICBteSAkQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRXb3JrT3JkZXItPntDaGFuZ2VJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIHdoZXRoZXIgY2hhbmdlIHdhcyBmb3VuZAogICAgaWYgKCAhJENoYW5nZSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NvdWxkIG5vdCBmaW5kIENoYW5nZSBmb3IgV29ya09yZGVyICVzIScsICRXb3JrT3JkZXJJRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGlmIHRoZXJlIHdhcyBhbiBhdHRhY2htZW50IGRlbGV0ZSBvciB1cGxvYWQKICAgICMgd2UgZG8gbm90IHdhbnQgdG8gc2hvdyB2YWxpZGF0aW9uIGVycm9ycyBmb3Igb3RoZXIgZmllbGRzCiAgICBpZiAoICRWYWxpZGF0aW9uRXJyb3J7QXR0YWNobWVudH0gKSB7CiAgICAgICAgJVZhbGlkYXRpb25FcnJvciA9ICgpOwogICAgfQoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICBUaXRsZSA9PiAkV29ya09yZGVyLT57V29ya09yZGVyVGl0bGV9LAogICAgICAgIFR5cGUgID0+ICdTbWFsbCcsCiAgICApOwoKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CgogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBnZXQgd29ya29yZGVyIGR5bmFtaWMgZmllbGRzIGZyb20gd29ya29yZGVyIGlmIHBhZ2UgaXMgbG9hZGVkIHRoZSBmaXJzdCB0aW1lCiAgICAgICAgaWYgKCAhJFNlbGYtPntTdWJhY3Rpb259ICkgewogICAgICAgICAgICAkRHluYW1pY0ZpZWxkVmFsdWVzeyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfQogICAgICAgICAgICAgICAgPSAkV29ya09yZGVyLT57ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9OwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgZmllbGQgaHRtbAogICAgICAgIG15ICREeW5hbWljRmllbGRIVE1MID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFJlbmRlcigKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkVmFsdWVzeyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgU2VydmVyRXJyb3IgICAgICAgID0+ICRWYWxpZGF0aW9uRXJyb3J7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9IHx8ICcnLAogICAgICAgICAgICBNYW5kYXRvcnkgICAgICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57RHluYW1pY0ZpZWxkfS0+eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9PSAyLAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgQUpBWFVwZGF0ZSAgICAgICAgID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBza2lwIGZpZWxkcyB0aGF0IEhUTUwgY291bGQgbm90IGJlIHJldHJpZXZlZAogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkSFRNTCk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdEeW5hbWljRmllbGQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgIExhYmVsID0+ICREeW5hbWljRmllbGRIVE1MLT57TGFiZWx9LAogICAgICAgICAgICAgICAgRmllbGQgPT4gJER5bmFtaWNGaWVsZEhUTUwtPntGaWVsZH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBleGFtcGxlIG9mIGR5bmFtaWMgZmllbGRzIG9yZGVyIGN1c3RvbWl6YXRpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICAgICAgTGFiZWwgPT4gJER5bmFtaWNGaWVsZEhUTUwtPntMYWJlbH0sCiAgICAgICAgICAgICAgICBGaWVsZCA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0ZpZWxkfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgdGltZSBwZXJpb2QgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgZnJvbSB0aGUgR1VJCiAgICBteSAlVGltZVBlcmlvZCA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnSVRTTVdvcmtPcmRlcjo6VGltZVBlcmlvZCcpIH07CgogICAgIyBzZXQgdGhlIHRpbWUgc2VsZWN0aW9ucwogICAgZm9yIG15ICRUaW1lVHlwZSAocXcoUGxhbm5lZFN0YXJ0VGltZSBQbGFubmVkRW5kVGltZSkpIHsKCiAgICAgICAgIyBzZXQgZGVmYXVsdCB2YWx1ZSBmb3IgJERpZmZUaW1lCiAgICAgICAgIyBXaGVuIG5vIHRpbWUgaXMgZ2l2ZW4geWV0LCB0aGVuIHVzZSB0aGUgY3VycmVudCB0aW1lIHBsdXMgdGhlIGRpZmZ0aW1lCiAgICAgICAgIyBXaGVuIGFuIGV4cGxpY2l0IHRpbWUgd2FzIHJldHJpZXZlZCwgJERpZmZUaW1lIGlzIG5vdCB1c2VkCiAgICAgICAgbXkgJERpZmZUaW1lID0gJFRpbWVUeXBlIGVxICdQbGFubmVkU3RhcnRUaW1lJyA/IDAgOiA2MCAqIDYwOwoKICAgICAgICAjIGFkZCBzZWxlY3Rpb24gZm9yIHRoZSB0aW1lCiAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnU2VsZWN0aW9uU3RyaW5nJyB9ID0gJExheW91dE9iamVjdC0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIEZvcm1hdCAgICAgICAgICAgICAgPT4gJ0RhdGVJbnB1dEZvcm1hdExvbmcnLAogICAgICAgICAgICBQcmVmaXggICAgICAgICAgICAgID0+ICRUaW1lVHlwZSwKICAgICAgICAgICAgRGlmZlRpbWUgICAgICAgICAgICA9PiAkRGlmZlRpbWUsCiAgICAgICAgICAgIFZhbGlkYXRlICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgJFRpbWVUeXBlIC4gJ0NsYXNzJyA9PiAnVmFsaWRhdGVfUmVxdWlyZWQgJwogICAgICAgICAgICAgICAgLiAoICRWYWxpZGF0aW9uRXJyb3J7ICRUaW1lVHlwZSAuICdJbnZhbGlkJyB9IHx8ICcnICksCiAgICAgICAgICAgICVUaW1lUGVyaW9kLAogICAgICAgICk7CgogICAgICAgICMgYWRkIHNlcnZlciBlcnJvciBtZXNzYWdlcyBmb3IgdGhlIHBsYW5uZWQgdGltZXMKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAkVGltZVR5cGUKICAgICAgICAgICAgICAgIC4gKCAkVmFsaWRhdGlvbkVycm9yeyAkVGltZVR5cGUgLiAnRXJyb3JUeXBlJyB9IHx8ICdHZW5lcmljU2VydmVyRXJyb3InICkKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBwbGFubmVkIGVmZm9ydCBpZiBpdCBpcyBjb25maWd1cmVkCiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e1BsYW5uZWRFZmZvcnR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTaG93UGxhbm5lZEVmZm9ydCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJXskV29ya09yZGVyfSwKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICVWYWxpZGF0aW9uRXJyb3IsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgdGhlIGNoZWNrYm94IGZvciBNb3ZlRm9sbG93aW5nV29ya09yZGVycyBpZiBpdCBpcyBjb25maWd1cmVkCiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e01vdmVGb2xsb3dpbmdXb3JrT3JkZXJzfSApIHsKCiAgICAgICAgIyBzZXQgY2hlY2tib3ggZm9yIE1vdmVGb2xsb3dpbmdXb3JrT3JkZXJzCiAgICAgICAgaWYgKCAkR2V0UGFyYW17TW92ZUZvbGxvd2luZ1dvcmtPcmRlcnN9ICkgewogICAgICAgICAgICAkR2V0UGFyYW17TW92ZUZvbGxvd2luZ1dvcmtPcmRlcnN9ID0gJ2NoZWNrZWQ9ImNoZWNrZWQiJzsKICAgICAgICB9CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdNb3ZlRm9sbG93aW5nV29ya09yZGVycycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IHRoZSBhdHRhY2htZW50IHVwbG9hZCBidXR0b24KICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0F0dGFjaG1lbnRVcGxvYWQnLAogICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICApOwoKICAgICMgZ2V0IGFsbCBhdHRhY2htZW50cyBtZXRhIGRhdGEKICAgIG15IEBBdHRhY2htZW50cyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNNZXRhKAogICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICApOwoKICAgICMgc2hvdyBhdHRhY2htZW50cwogICAgQVRUQUNITUVOVDoKICAgIGZvciBteSAkQXR0YWNobWVudCAoQEF0dGFjaG1lbnRzKSB7CgogICAgICAgICMgZG8gbm90IHNob3cgaW5saW5lIGltYWdlcyBhcyBhdHRhY2htZW50cwogICAgICAgICMgKHRoZXkgaGF2ZSBhIGNvbnRlbnQgaWQpCiAgICAgICAgaWYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH0gJiYgJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVDsKICAgICAgICB9CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50JywKICAgICAgICAgICAgRGF0YSA9PiAkQXR0YWNobWVudCwKICAgICAgICApOwogICAgfQoKICAgICMgYWRkIHJpY2ggdGV4dCBlZGl0b3IgamF2YXNjcmlwdAogICAgIyBvbmx5IGlmIGFjdGl2YXRlZCBhbmQgdGhlIGJyb3dzZXIgY2FuIGhhbmRsZSBpdAogICAgIyBvdGhlcndpc2UganVzdCBhIHRleHRhcmVhIGlzIHNob3duCiAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdSaWNoVGV4dCcsCiAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudElUU01Xb3JrT3JkZXJFZGl0JywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7JENoYW5nZX0sCiAgICAgICAgICAgICV7JFdvcmtPcmRlcn0sCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgJVZhbGlkYXRpb25FcnJvciwKICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb290ZXIKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCBUeXBlID0+ICdTbWFsbCcgKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbmVlZGVkIHdvcmtvcmRlciBpZAogICAgbXkgJFdvcmtPcmRlcklEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJ1dvcmtPcmRlcklEJyApOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRXb3JrT3JkZXJJRCApIHsKCiAgICAgICAgIyBlcnJvciBwYWdlCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnQ2FuXCd0IHNob3cgaGlzdG9yeSwgYXMgbm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKICAgIG15ICRDb25maWdPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRDb25maWdPYmplY3QtPkdldCgiSVRTTVdvcmtPcmRlcjo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkV29ya09yZGVyT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICAgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgIEFjdGlvbiAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGVycm9yIHNjcmVlbgogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyEnLCAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSApLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgd29ya29yZGVyIGluZm9ybWF0aW9uCiAgICBteSAkV29ya09yZGVyID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyR2V0KAogICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISRXb3JrT3JkZXIgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlIScsICRXb3JrT3JkZXJJRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2UgaW5mb3JtYXRpb24KICAgIG15ICRDaGFuZ2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJFdvcmtPcmRlci0+e0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISRDaGFuZ2UgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0KICAgICAgICAgICAgICAgIC0+VHJhbnNsYXRlKCAnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnLCAkV29ya09yZGVyLT57Q2hhbmdlSUR9ICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGhpc3RvcnkgZW50cmllcwogICAgbXkgJEhpc3RvcnlFbnRyaWVzUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Okhpc3RvcnknKS0+V29ya09yZGVySGlzdG9yeUdldCgKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKSB8fCBbXTsKCiAgICAjIGdldCBvcmRlciBkaXJlY3Rpb24KICAgIG15IEBIaXN0b3J5TGluZXMgPSBAeyRIaXN0b3J5RW50cmllc1JlZn07CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNoYW5nZTo6RnJvbnRlbmQ6Okhpc3RvcnlPcmRlcicpIGVxICdyZXZlcnNlJyApIHsKICAgICAgICBASGlzdG9yeUxpbmVzID0gcmV2ZXJzZSBAeyRIaXN0b3J5RW50cmllc1JlZn07CiAgICB9CgogICAgIyBtYXggbGVuZ3RoIG9mIHN0cmluZ3MKICAgIG15ICRNYXhMZW5ndGggPSAzMDsKCiAgICAjIGNyZWF0ZSB0YWJsZQogICAgbXkgJENvdW50ZXIgPSAxOwogICAgZm9yIG15ICRIaXN0b3J5RW50cnkgKEBIaXN0b3J5TGluZXMpIHsKICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICAjIGRhdGEgZm9yIGEgc2luZ2xlIHJvdywgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGR0bAogICAgICAgIG15ICVEYXRhID0gJXskSGlzdG9yeUVudHJ5fTsKCiAgICAgICAgIyBkZXRlcm1pbmUgd2hhdCBzaG91bGQgYmUgc2hvd24KICAgICAgICBteSAkSGlzdG9yeVR5cGUgPSAkSGlzdG9yeUVudHJ5LT57SGlzdG9yeVR5cGV9OwogICAgICAgIGlmICggJEhpc3RvcnlUeXBlIGVxICdXb3JrT3JkZXJVcGRhdGUnICkgewoKICAgICAgICAgICAgIyBUaGUgZGlzcGxheWVkIGZpZWxkbmFtZSBtaWdodCBiZSBjaGFuZ2VkIGluIHRoZSBmb2xsb3dpbmcgbG9vcAogICAgICAgICAgICBteSAkRGlzcGxheWVkRmllbGRuYW1lID0gJEhpc3RvcnlFbnRyeS0+e0ZpZWxkbmFtZX07CgogICAgICAgICAgICAjIHNldCBkZWZhdWx0IHZhbHVlcyBmb3Igc29tZSBrZXlzCiAgICAgICAgICAgIGZvciBteSAkQ29udGVudE5ld09yT2xkIChxdyhDb250ZW50TmV3IENvbnRlbnRPbGQpKSB7CiAgICAgICAgICAgICAgICBpZiAoICFkZWZpbmVkICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfSApIHsKICAgICAgICAgICAgICAgICAgICAkSGlzdG9yeUVudHJ5LT57JENvbnRlbnROZXdPck9sZH0gPSAnLSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBmb3IgdGhlIElEIGZpZWxkcywgd2UgcmVwbGFjZSBJRCB3aXRoIGl0cyB0ZXh0dWFsIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICBteSAoJFR5cGUpID0gJEhpc3RvcnlFbnRyeS0+e0ZpZWxkbmFtZX0gPX4gbXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxBICAgICAgICAgICMgc3RyaW5nIHN0YXJ0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICAgICAgICAgICAjIHN0YXJ0IGNhcHR1cmUgb2YgJFR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZSB8IFdvcmtPcmRlclR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFdvcmtPcmRlckFnZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICApICAgICAgICAgICAjIGVuZCBjYXB0dXJlIG9mICRUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRCAgICAgICAgICAjIHByb2Nlc3Npbmcgb25seSBmb3IgdGhlICdJRCcgZmllbGRzCiAgICAgICAgICAgICAgICAgICAgICAgIH14bXMKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkSGlzdG9yeUVudHJ5LT57JENvbnRlbnROZXdPck9sZH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkVmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkVHJhbnNsYXRpb25OZWVkZWQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkVHlwZSBlcSAnV29ya09yZGVyU3RhdGUnICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRWYWx1ZSA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclN0YXRlTG9va3VwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZUlEID0+ICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkVHlwZSBlcSAnV29ya09yZGVyVHlwZScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFZhbHVlID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyVHlwZUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya09yZGVyVHlwZUlEID0+ICRIaXN0b3J5RW50cnktPnskQ29udGVudE5ld09yT2xkfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkVHlwZSBlcSAnV29ya09yZGVyQWdlbnQnICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRWYWx1ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkSGlzdG9yeUVudHJ5LT57JENvbnRlbnROZXdPck9sZH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgbG9naW4gbmFtZXMgYXJlIG5vdCB0byBiZSB0cmFuc2xhdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRyYW5zbGF0aW9uTmVlZGVkID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPlRyYW5zbGF0ZSggJ1Vua25vd24gdHlwZSAiJXMiIGVuY291bnRlcmVkIScsICRUeXBlICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRS5nLiB0aGUgdXNlcm5hbWVzIHNob3VsZCBub3QgYmUgdHJhbnNsYXRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFRyYW5zbGF0ZWRWYWx1ZSA9ICRUcmFuc2xhdGlvbk5lZWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJFZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVmFsdWU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEhpc3RvcnlFbnRyeS0+eyRDb250ZW50TmV3T3JPbGR9ID0gc3ByaW50ZiAnJXMgKElEPSVzKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRyYW5zbGF0ZWRWYWx1ZSwgJEhpc3RvcnlFbnRyeS0+eyRDb250ZW50TmV3T3JPbGR9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEhpc3RvcnlFbnRyeS0+eyRDb250ZW50TmV3T3JPbGR9ID0gJy0nOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBjb250ZW50IGhhcyBjaGFuZ2VkLCBzbyBjaGFuZ2UgdGhlIGRpc3BsYXllZCBmaWVsZG5hbWUgYXMgd2VsbAogICAgICAgICAgICAgICAgICAgICAgICAkRGlzcGxheWVkRmllbGRuYW1lID0gJFR5cGU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIHJlcGxhY2UgSFRNTCBicmVha3Mgd2l0aCBzaW5nbGUgc3BhY2UKICAgICAgICAgICAgICAgICAgICAkSGlzdG9yeUVudHJ5LT57JENvbnRlbnROZXdPck9sZH0gPX4gc3sgPCBiciBccyogLz8gPiB9eyB9eG1zZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB0cmFuc2xhdGUgZmllbGRuYW1lIGZvciBkaXNwbGF5CiAgICAgICAgICAgICREaXNwbGF5ZWRGaWVsZG5hbWUgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAkRGlzcGxheWVkRmllbGRuYW1lLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgSFRNTCB1dGlscyBvYmplY3QKICAgICAgICAgICAgbXkgJEhUTUxVdGlsc09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKTsKCiAgICAgICAgICAgICMgdHJpbSBzdHJpbmdzIHRvIGEgbWF4IGxlbmd0aCBvZiAkTWF4TGVuZ3RoCiAgICAgICAgICAgIG15ICRDb250ZW50TmV3ID0gJEhUTUxVdGlsc09iamVjdC0+VG9Bc2NpaSgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkSGlzdG9yeUVudHJ5LT57Q29udGVudE5ld30gfHwgJy0nLAogICAgICAgICAgICApOwogICAgICAgICAgICBteSAkQ29udGVudE9sZCA9ICRIVE1MVXRpbHNPYmplY3QtPlRvQXNjaWkoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEhpc3RvcnlFbnRyeS0+e0NvbnRlbnRPbGR9IHx8ICctJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2hvdyBbLi4uXSBmb3IgdG9vIGxvbmcgc3RyaW5ncwogICAgICAgICAgICBmb3IgbXkgJENvbnRlbnQgKCAkQ29udGVudE5ldywgJENvbnRlbnRPbGQgKSB7CiAgICAgICAgICAgICAgICBpZiAoICRDb250ZW50ICYmICggbGVuZ3RoICRDb250ZW50ID4gJE1heExlbmd0aCApICkgewogICAgICAgICAgICAgICAgICAgICRDb250ZW50ID0gc3Vic3RyKCAkQ29udGVudCwgMCwgJE1heExlbmd0aCApIC4gJ1suLi5dJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgZGVzY3JpcHRpb24KICAgICAgICAgICAgJERhdGF7Q29udGVudH0gPSBqb2luICclJScsICREaXNwbGF5ZWRGaWVsZG5hbWUsICRDb250ZW50TmV3LCAkQ29udGVudE9sZDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICREYXRhe0NvbnRlbnR9ID0gJEhpc3RvcnlFbnRyeS0+e0NvbnRlbnROZXd9OwogICAgICAgIH0KCiAgICAgICAgIyByZXBsYWNlIHRleHQKICAgICAgICBpZiAoICREYXRhe0NvbnRlbnR9ICkgewoKICAgICAgICAgICAgIyByZW1vdmUgbGVhZGluZyAlJQogICAgICAgICAgICAkRGF0YXtDb250ZW50fSA9fiBzeyBcQSAlJSB9e314bXNnOwoKICAgICAgICAgICAgIyBzcGxpdCB0aGUgY29udGVudCBieSAlJQogICAgICAgICAgICBteSBAVmFsdWVzID0gc3BsaXQoIC8lJS8sICREYXRhe0NvbnRlbnR9ICk7CgogICAgICAgICAgICAjIHNob3cgJ25pY2UnIG91dHB1dCB3aXRoIHZhcmlhYmxlIHN1YnN0aXR1dGlvbgogICAgICAgICAgICAjIHNhbXBsZSBpbnB1dDoKICAgICAgICAgICAgIyBDaGFuZ2VIaXN0b3J5OjpDaGFuZ2VMaW5rQWRkIiwgIlRpY2tldCIsICIxCiAgICAgICAgICAgICREYXRhe0NvbnRlbnR9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJ1dvcmtPcmRlckhpc3Rvcnk6OicgLiAkRGF0YXtIaXN0b3J5VHlwZX0sCiAgICAgICAgICAgICAgICBAVmFsdWVzLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyByZW1vdmUgbm90IG5lZWRlZCBwbGFjZSBob2xkZXIKICAgICAgICAgICAgJERhdGF7Q29udGVudH0gPX4gc3sgJSBzIH17fXhtc2c7CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUm93JywKICAgICAgICAgICAgRGF0YSA9PiB7JURhdGF9LAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBhICdtb3JlIGluZm8nIGxpbmsKICAgICAgICBpZiAoCiAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICRIaXN0b3J5RW50cnktPntDb250ZW50TmV3fQogICAgICAgICAgICAgICAgJiYgbGVuZ3RoKCAkSGlzdG9yeUVudHJ5LT57Q29udGVudE5ld30gKSA+ICRNYXhMZW5ndGgKICAgICAgICAgICAgKQogICAgICAgICAgICB8fAogICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAkSGlzdG9yeUVudHJ5LT57Q29udGVudE9sZH0KICAgICAgICAgICAgICAgICYmIGxlbmd0aCggJEhpc3RvcnlFbnRyeS0+e0NvbnRlbnRPbGR9ICkgPiAkTWF4TGVuZ3RoCiAgICAgICAgICAgICkKICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgc2hvdyBoaXN0b3J5em9vbSBibG9jawogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1Nob3dIaXN0b3J5Wm9vbScsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslRGF0YX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGRvbid0IHNob3cgYSBsaW5rCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTm9IaXN0b3J5Wm9vbScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU2hvd1dvcmtPcmRlclpvb20nLAogICAgICAgICAgICBEYXRhID0+IHslRGF0YX0sCiAgICAgICAgKTsKCiAgICB9CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgIFR5cGUgID0+ICdTbWFsbCcsCiAgICAgICAgVGl0bGUgPT4gVHJhbnNsYXRhYmxlKCdXb3JrT3JkZXIgSGlzdG9yeScpLAogICAgKTsKCiAgICAjIHN0YXJ0IHRlbXBsYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5JywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7JENoYW5nZX0sCiAgICAgICAgICAgICV7JFdvcmtPcmRlcn0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9vdGVyCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigKICAgICAgICBUeXBlID0+ICdTbWFsbCcsCiAgICApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5Wm9vbTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lZWRlZCBjaGFuZ2UgaWQKICAgIG15ICRIaXN0b3J5RW50cnlJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdIaXN0b3J5RW50cnlJRCcgKTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkSGlzdG9yeUVudHJ5SUQgKSB7CgogICAgICAgICMgZXJyb3IgcGFnZQogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0NhblwndCBzaG93IGhpc3Rvcnkgem9vbSwgbm8gSGlzdG9yeUVudHJ5SUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGhpc3RvcnkgZW50cmllcwogICAgbXkgJEhpc3RvcnlFbnRyeSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpIaXN0b3J5JyktPkhpc3RvcnlFbnRyeUdldCgKICAgICAgICBIaXN0b3J5RW50cnlJRCA9PiAkSGlzdG9yeUVudHJ5SUQsCiAgICAgICAgVXNlcklEICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBpZiAoICEkSGlzdG9yeUVudHJ5ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAnSGlzdG9yeSBlbnRyeSAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJywgJEhpc3RvcnlFbnRyeUlECiAgICAgICAgICAgICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHdvcmtvcmRlciBvYmplY3QKICAgIG15ICRXb3JrT3JkZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiSVRTTVdvcmtPcmRlcjo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkV29ya09yZGVyT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICAgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgIEFjdGlvbiAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkSGlzdG9yeUVudHJ5LT57V29ya09yZGVySUR9LAogICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMhJywgJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0gKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHdvcmtvcmRlciBpbmZvcm1hdGlvbgogICAgbXkgJFdvcmtPcmRlciA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckdldCgKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkSGlzdG9yeUVudHJ5LT57V29ya09yZGVySUR9LAogICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBlcnJvcgogICAgaWYgKCAhJFdvcmtPcmRlciApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJ1dvcmtPcmRlciAiJXMiIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UhJywgJEhpc3RvcnlFbnRyeS0+e1dvcmtPcmRlcklEfQogICAgICAgICAgICApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2UgaW5mb3JtYXRpb24KICAgIG15ICRDaGFuZ2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJEhpc3RvcnlFbnRyeS0+e0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISRXb3JrT3JkZXIgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0KICAgICAgICAgICAgICAgIC0+VHJhbnNsYXRlKCAnQ2hhbmdlICIlcyIgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSEnLCAkSGlzdG9yeUVudHJ5LT57Q2hhbmdlSUR9ICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgc2hvdyBkYXNoICgnLScpIHdoZW4gdGhlIGZpZWxkIGlzIGVtcHR5CiAgICBmb3IgbXkgJEZpZWxkIChxdyhDb250ZW50TmV3IENvbnRlbnRPbGQpKSB7CiAgICAgICAgJEhpc3RvcnlFbnRyeS0+eyRGaWVsZH0gfHw9ICctJzsKICAgIH0KCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgVHlwZSAgPT4gJ1NtYWxsJywKICAgICAgICBUaXRsZSA9PiBUcmFuc2xhdGFibGUoJ1dvcmtPcmRlciBIaXN0b3J5IFpvb20nKSwKICAgICk7CgogICAgIyBzdGFydCB0ZW1wbGF0ZSBvdXRwdXQKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeVpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXskQ2hhbmdlfSwKICAgICAgICAgICAgJXskV29ya09yZGVyfSwKICAgICAgICAgICAgJXskSGlzdG9yeUVudHJ5fSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb290ZXIKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKAogICAgICAgIFR5cGUgPT4gJ1NtYWxsJywKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Xb3JrT3JkZXJSZXBvcnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGdldCBuZWVkZWQgV29ya09yZGVySUQKICAgIG15ICRXb3JrT3JkZXJJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdXb3JrT3JkZXJJRCcgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFdvcmtPcmRlcklEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIFdvcmtPcmRlcklEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFdvcmtPcmRlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoIklUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJFdvcmtPcmRlck9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMhJywgJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0gKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHdvcmtvcmRlciBkYXRhCiAgICBteSAkV29ya09yZGVyID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyR2V0KAogICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISRXb3JrT3JkZXIgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJFdvcmtPcmRlcklEICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgc3RvcmUgbmVlZGVkIHBhcmFtZXRlcnMgaW4gJUdldFBhcmFtIHRvIG1ha2UgdGhpcyBwYWdlIHJlbG9hZGFibGUKICAgIG15ICVHZXRQYXJhbTsKICAgIGZvciBteSAkUGFyYW1OYW1lIChxdyhSZXBvcnQgV29ya09yZGVyU3RhdGVJRCBBY2NvdW50ZWRUaW1lIEF0dGFjaG1lbnRVcGxvYWQgRmlsZUlEKSkgewogICAgICAgICRHZXRQYXJhbXskUGFyYW1OYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbU5hbWUgKTsKICAgIH0KCiAgICAjIGdldCBEeW5hbWljIGZpZWxkcyBmcm9tIFBhcmFtT2JqZWN0CiAgICBteSAlRHluYW1pY0ZpZWxkVmFsdWVzOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIG15ICREeW5hbWljRmllbGQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJFNlbGYtPntDb25maWd9LT57RHluYW1pY0ZpZWxkfSB8fCB7fSwKICAgICk7CgogICAgIyBnZXQgZHluYW1pYyBmaWVsZCBiYWNrZW5kIG9iamVjdAogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZXh0cmFjdCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmcm9tIHRoZSB3ZWIgcmVxdWVzdCBhbmQgYWRkIHRoZSBwcmVmaXgKICAgICAgICAkRHluYW1pY0ZpZWxkVmFsdWVzeyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfQogICAgICAgICAgICA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRWYWx1ZUdldCgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICApOwogICAgfQoKICAgICMgc3RvcmUgYWN0dWFsIHRpbWUgcmVsYXRlZCBmaWVsZHMgaW4gJUdldFBhcmFtCiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e0FjdHVhbFRpbWVTcGFufSApIHsKICAgICAgICBmb3IgbXkgJFRpbWVUeXBlIChxdyhBY3R1YWxTdGFydFRpbWUgQWN0dWFsRW5kVGltZSkpIHsKICAgICAgICAgICAgZm9yIG15ICRUaW1lUGFydCAocXcoWWVhciBNb250aCBEYXkgSG91ciBNaW51dGUgVXNlZCkpIHsKICAgICAgICAgICAgICAgIG15ICRQYXJhbU5hbWUgPSAkVGltZVR5cGUgLiAkVGltZVBhcnQ7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtTmFtZX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1OYW1lICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBSZW1lbWJlciB0aGUgcmVhc29uIHdoeSBwZXJmb21pbmcgdGhlIHN1YmFjdGlvbiB3YXMgbm90IGF0dGVtcHRlZC4KICAgICMgVGhlIGVudHJpZXMgYXJlIHRoZSBuYW1lcyBvZiB0aGUgZHRsIHZhbGlkYXRpb24gZXJyb3IgYmxvY2tzLgogICAgbXkgJVZhbGlkYXRpb25FcnJvcjsKCiAgICAjIGdldCB1cGxvYWQgY2FjaGUgb2JqZWN0CiAgICBteSAkVXBsb2FkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpVcGxvYWRDYWNoZScpOwoKICAgICMgZ2V0IGZvcm0gaWQKICAgICRTZWxmLT57Rm9ybUlEfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGb3JtSUQnICk7CgogICAgIyBjcmVhdGUgZm9ybSBpZAogICAgaWYgKCAhJFNlbGYtPntGb3JtSUR9ICkgewogICAgICAgICRTZWxmLT57Rm9ybUlEfSA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlEQ3JlYXRlKCk7CiAgICB9CgogICAgIyBjaGVjayBpZiBhbiBhdHRhY2htZW50IHNob3VsZCBiZSBkZWxldGVkCiAgICBBVFRBQ0hNRU5UOgogICAgZm9yIG15ICROdW1iZXIgKCAxIC4uIDMyICkgewoKICAgICAgICAjIGNoZWNrIGlmIHRoZSBkZWxldGUgYnV0dG9uIHdhcyBwcmVzc2VkIGZvciB0aGlzIGF0dGFjaG1lbnQKICAgICAgICBteSAkRGVsZXRlID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gIkF0dGFjaG1lbnREZWxldGUkTnVtYmVyIiApOwoKICAgICAgICAjIGNoZWNrIG5leHQgYXR0YWNobWVudCBpZiBpdCB3YXMgbm90IHByZXNzZWQKICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISREZWxldGU7CgogICAgICAgICMgcmVtZW1iZXIgdGhhdCB3ZSBuZWVkIHRvIHNob3cgdGhlIHBhZ2UgYWdhaW4KICAgICAgICAkVmFsaWRhdGlvbkVycm9ye0F0dGFjaG1lbnR9ID0gMTsKCiAgICAgICAgIyByZW1vdmUgdGhlIGF0dGFjaG1lbnQgZnJvbSB0aGUgdXBsb2FkIGNhY2hlCiAgICAgICAgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURSZW1vdmVGaWxlKAogICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICBGaWxlSUQgPT4gJE51bWJlciwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgaWYgdGhlcmUgd2FzIGFuIGF0dGFjaG1lbnQgdXBsb2FkCiAgICBpZiAoICRHZXRQYXJhbXtBdHRhY2htZW50VXBsb2FkfSApIHsKCiAgICAgICAgIyByZW1lbWJlciB0aGF0IHdlIG5lZWQgdG8gc2hvdyB0aGUgcGFnZSBhZ2FpbgogICAgICAgICRWYWxpZGF0aW9uRXJyb3J7QXR0YWNobWVudH0gPSAxOwoKICAgICAgICAjIGdldCB0aGUgdXBsb2FkZWQgYXR0YWNobWVudAogICAgICAgIG15ICVVcGxvYWRTdHVmZiA9ICRQYXJhbU9iamVjdC0+R2V0VXBsb2FkQWxsKAogICAgICAgICAgICBQYXJhbSAgPT4gJ0ZpbGVVcGxvYWQnLAogICAgICAgICAgICBTb3VyY2UgPT4gJ3N0cmluZycsCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgYXR0YWNobWVudCB0byB0aGUgdXBsb2FkIGNhY2hlCiAgICAgICAgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURBZGRGaWxlKAogICAgICAgICAgICBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAlVXBsb2FkU3R1ZmYsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB0aW1lIG9iamVjdAogICAgbXkgJFRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpOwoKICAgICMgdXBkYXRlIHdvcmtvcmRlcgogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NhdmUnICkgewoKICAgICAgICAjIHZhbGlkYXRlIHRoZSBhY3R1YWwgdGltZSByZWxhdGVkIHBhcmFtZXRlcnMKICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e0FjdHVhbFRpbWVTcGFufSApIHsKICAgICAgICAgICAgbXkgJVN5c3RlbVRpbWU7CiAgICAgICAgICAgIGZvciBteSAkVGltZVR5cGUgKHF3KEFjdHVhbFN0YXJ0VGltZSBBY3R1YWxFbmRUaW1lKSkgewoKICAgICAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1VzZWQnIH0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgd2hlbiB0aGUgYnV0dG9uIHdhcyBub3QgY2hlY2tlZCwgdGhlbiBjbGVhciB0aGUgdGltZQogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXskVGltZVR5cGV9ID0gdW5kZWY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnWWVhcicgfQogICAgICAgICAgICAgICAgICAgICYmICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ01vbnRoJyB9CiAgICAgICAgICAgICAgICAgICAgJiYgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnRGF5JyB9CiAgICAgICAgICAgICAgICAgICAgJiYgZGVmaW5lZCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdIb3VyJyB9CiAgICAgICAgICAgICAgICAgICAgJiYgZGVmaW5lZCAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdNaW51dGUnIH0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICMgdHJhbnNmb3JtIHdvcmsgb3JkZXIgYWN0dWFsIHRpbWUsIHRpbWUgc3RhbXAgYmFzZWQgb24gdXNlciB0aW1lIHpvbmUKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0gPSAkTGF5b3V0T2JqZWN0LT5UcmFuc2Zvcm1EYXRlU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIFByZWZpeCA9PiAkVGltZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBmb3JtYXQgYXMgdGltZXN0YW1wLCB3aGVuIGFsbCByZXF1aXJlZCB0aW1lIHBhcmFtcyB3ZXJlIHBhc3NlZAogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXskVGltZVR5cGV9ID0gc3ByaW50ZiAnJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOjAwJywKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnWWVhcicgfSwKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnTW9udGgnIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ0RheScgfSwKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnSG91cicgfSwKICAgICAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnTWludXRlJyB9OwoKICAgICAgICAgICAgICAgICAgICAjIHNhbml0eSBjaGVjayBvZiB0aGUgYXNzZW1ibGVkIHRpbWVzdGFtcAogICAgICAgICAgICAgICAgICAgICRTeXN0ZW1UaW1leyRUaW1lVHlwZX0gPSAkVGltZU9iamVjdC0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkR2V0UGFyYW17JFRpbWVUeXBlfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIGRvIG5vdCBzYXZlIGlmIHRpbWUgaXMgaW52YWxpZAogICAgICAgICAgICAgICAgICAgIGlmICggISRTeXN0ZW1UaW1leyRUaW1lVHlwZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRWYWxpZGF0aW9uRXJyb3J7ICRUaW1lVHlwZSAuICdJbnZhbGlkJyB9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBpdCB3YXMgaW5kaWNhdGVkIHRoYXQgdGhlIHRpbWUgc2hvdWxkIGJlIHNldCwKICAgICAgICAgICAgICAgICAgICAjIGJ1dCBhdCBsZWFzdCBvbmUgb2YgdGhlIHJlcXVpcmVkIHRpbWUgcGFyYW1zIGlzIG1pc3NpbmcKICAgICAgICAgICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9yeyAkVGltZVR5cGUgLiAnSW52YWxpZCcgfSAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9yeyAkVGltZVR5cGUgLiAnRXJyb3JUeXBlJyB9ID0gJ0dlbmVyaWNTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgdmFsaWRpdHkgb2YgdGhlIGFjdHVhbCBzdGFydCBhbmQgZW5kIHRpbWVzCiAgICAgICAgICAgIGlmICggJFN5c3RlbVRpbWV7QWN0dWFsRW5kVGltZX0gJiYgISRTeXN0ZW1UaW1le0FjdHVhbFN0YXJ0VGltZX0gKSB7CiAgICAgICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye0FjdHVhbFN0YXJ0VGltZUludmFsaWR9ICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntBY3R1YWxTdGFydFRpbWVFcnJvclR5cGV9ID0gJ1NldFNlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAoICRTeXN0ZW1UaW1le0FjdHVhbEVuZFRpbWV9ICYmICRTeXN0ZW1UaW1le0FjdHVhbFN0YXJ0VGltZX0gKQogICAgICAgICAgICAgICAgJiYgKCAkU3lzdGVtVGltZXtBY3R1YWxFbmRUaW1lfSA8ICRTeXN0ZW1UaW1le0FjdHVhbFN0YXJ0VGltZX0gKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkVmFsaWRhdGlvbkVycm9ye0FjdHVhbFN0YXJ0VGltZUludmFsaWR9ICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcntBY3R1YWxTdGFydFRpbWVFcnJvclR5cGV9ID0gJ0JlZm9yZVRoYW5FbmRUaW1lU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHZhbGlkYXRlIGZvcm1hdCBvZiBhY2NvdW50ZWQgdGltZQogICAgICAgIGlmICgKICAgICAgICAgICAgJEdldFBhcmFte0FjY291bnRlZFRpbWV9CiAgICAgICAgICAgICYmICRHZXRQYXJhbXtBY2NvdW50ZWRUaW1lfSAhfiBteyBcQSAtPyBcZCogKD86IFsuXSBcZHsxLDJ9ICk/IFx6IH14bXMKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFZhbGlkYXRpb25FcnJvcnsnQWNjb3VudGVkVGltZUludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgICAgIG15ICRWYWxpZGF0aW9uUmVzdWx0ID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFZhbHVlVmFsaWRhdGUoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgICAgICBNYW5kYXRvcnkgICAgICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57RHluYW1pY0ZpZWxkfS0+eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9PSAyLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJFZhbGlkYXRpb25SZXN1bHQpICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAnQ291bGQgbm90IHBlcmZvcm0gdmFsaWRhdGlvbiBvbiBmaWVsZCAlcyEnLCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9CiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHByb3BhZ2F0ZSB2YWxpZGF0aW9uIGVycm9yIHRvIHRoZSBFcnJvciB2YXJpYWJsZSB0byBiZSBkZXRlY3RlZCBieSB0aGUgZnJvbnRlbmQKICAgICAgICAgICAgaWYgKCAkVmFsaWRhdGlvblJlc3VsdC0+e1NlcnZlckVycm9yfSApIHsKICAgICAgICAgICAgICAgICRWYWxpZGF0aW9uRXJyb3J7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJyBTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIG9ubHkgd2hlbiB0aGVyZSBhcmUgbm8gaW5wdXQgdmFsaWRhdGlvbiBlcnJvcnMKICAgICAgICBpZiAoICElVmFsaWRhdGlvbkVycm9yICkgewoKICAgICAgICAgICAgIyB0aGUgYWN0dWFsIHRpbWUgcmVsYXRlZCBmaWVsZHMgYXJlIGNvbmZpZ3VyYWJsZQogICAgICAgICAgICBteSAlQWRkaXRpb25hbFBhcmFtOwogICAgICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e0FjdHVhbFRpbWVTcGFufSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkVGltZVR5cGUgKHF3KEFjdHVhbFN0YXJ0VGltZSBBY3R1YWxFbmRUaW1lKSkgewoKICAgICAgICAgICAgICAgICAgICAjICRHZXRQYXJhbXskVGltZVR5cGV9IGlzIGVpdGhlciBhIHZhbGlkIHRpbWVzdGFtcCBvciB1bmRlZgogICAgICAgICAgICAgICAgICAgICRBZGRpdGlvbmFsUGFyYW17JFRpbWVUeXBlfSA9ICRHZXRQYXJhbXskVGltZVR5cGV9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHVwZGF0ZSB0aGUgd29ya29yZGVyCiAgICAgICAgICAgIG15ICRDb3VsZFVwZGF0ZVdvcmtPcmRlciA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclVwZGF0ZSgKICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEICAgICAgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgICA9PiAkR2V0UGFyYW17UmVwb3J0fSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlSUQgPT4gJEdldFBhcmFte1dvcmtPcmRlclN0YXRlSUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBBY2NvdW50ZWRUaW1lICAgID0+ICRHZXRQYXJhbXtBY2NvdW50ZWRUaW1lfSwKICAgICAgICAgICAgICAgICVBZGRpdGlvbmFsUGFyYW0sCiAgICAgICAgICAgICAgICAlRHluYW1pY0ZpZWxkVmFsdWVzLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBpZiB3b3Jrb3JkZXIgdXBkYXRlIHdhcyBzdWNjZXNzZnVsCiAgICAgICAgICAgIGlmICgkQ291bGRVcGRhdGVXb3JrT3JkZXIpIHsKCiAgICAgICAgICAgICAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgZnJvbSB1cGxvYWQgY2FjaGUKICAgICAgICAgICAgICAgIG15IEBBdHRhY2htZW50cyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNEYXRhKAogICAgICAgICAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgYSBsb29rdXAgbG9va3VwIGhhc2ggb2YgdGhlIG5ldyBhdHRhY2htZW50cwogICAgICAgICAgICAgICAgbXkgJU5ld0F0dGFjaG1lbnQ7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBBdHRhY2htZW50cykgewoKICAgICAgICAgICAgICAgICAgICAjIHRoZSBrZXkgaXMgdGhlIGZpbGVuYW1lICsgZmlsZXNpemUgKyBjb250ZW50IHR5cGUKICAgICAgICAgICAgICAgICAgICBteSAkS2V5ID0gJEF0dGFjaG1lbnQtPntGaWxlbmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgLiAkQXR0YWNobWVudC0+e0ZpbGVzaXplfQogICAgICAgICAgICAgICAgICAgICAgICAuICRBdHRhY2htZW50LT57Q29udGVudFR5cGV9OwoKICAgICAgICAgICAgICAgICAgICAjIGFwcGVuZCBjb250ZW50IGlkIGlmIGF2YWlsYWJsZSAoZm9yIG5ldyBpbmxpbmUgaW1hZ2VzKQogICAgICAgICAgICAgICAgICAgIGlmICggJEF0dGFjaG1lbnQtPntDb250ZW50SUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkS2V5IC49ICRBdHRhY2htZW50LT57Q29udGVudElEfTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgc3RvcmUgYWxsIG9mIHRoZSBuZXcgYXR0YWNobWVudCBkYXRhCiAgICAgICAgICAgICAgICAgICAgJE5ld0F0dGFjaG1lbnR7JEtleX0gPSAkQXR0YWNobWVudDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGdldCBhbGwgcmVwb3J0IGF0dGFjaG1lbnRzIG1ldGEgZGF0YQogICAgICAgICAgICAgICAgbXkgQEV4aXN0aW5nQXR0YWNobWVudHMgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJSZXBvcnRBdHRhY2htZW50TGlzdCgKICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgdGhlIGV4aXN0aW5nIGF0dGFjaG1lbnRzCiAgICAgICAgICAgICAgICBGSUxFTkFNRToKICAgICAgICAgICAgICAgIGZvciBteSAkRmlsZW5hbWUgKEBFeGlzdGluZ0F0dGFjaG1lbnRzKSB7CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBleGlzdGluZyBhdHRhY2htZW50IGRhdGEKICAgICAgICAgICAgICAgICAgICBteSAkQXR0YWNobWVudERhdGEgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBdHRhY2htZW50R2V0KAogICAgICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCAgICA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgICAgID0+ICRGaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgQXR0YWNobWVudFR5cGUgPT4gJ1dvcmtPcmRlclJlcG9ydCcsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBkbyBub3QgY29uc2lkZXIgaW5saW5lIGF0dGFjaG1lbnRzCiAgICAgICAgICAgICAgICAgICAgbmV4dCBGSUxFTkFNRSBpZiAkQXR0YWNobWVudERhdGEtPntQcmVmZXJlbmNlc30tPntDb250ZW50SUR9OwoKICAgICAgICAgICAgICAgICAgICAjIHRoZSBrZXkgaXMgdGhlIGZpbGVuYW1lICsgZmlsZXNpemUgKyBjb250ZW50IHR5cGUKICAgICAgICAgICAgICAgICAgICAjIChubyBjb250ZW50IGlkLCBhcyBleGlzdGluZyBhdHRhY2htZW50cyBkb24ndCBoYXZlIGl0KQogICAgICAgICAgICAgICAgICAgIG15ICRLZXkgPSAkQXR0YWNobWVudERhdGEtPntGaWxlbmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgLiAkQXR0YWNobWVudERhdGEtPntGaWxlc2l6ZX0KICAgICAgICAgICAgICAgICAgICAgICAgLiAkQXR0YWNobWVudERhdGEtPntDb250ZW50VHlwZX07CgogICAgICAgICAgICAgICAgICAgICMgYXR0YWNobWVudCBpcyBhbHJlYWR5IGV4aXN0aW5nLCB3ZSBjYW4gZGVsZXRlIGl0IGZyb20gdGhlIG5ldyBhdHRhY2htZW50IGhhc2gKICAgICAgICAgICAgICAgICAgICBpZiAoICROZXdBdHRhY2htZW50eyRLZXl9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgJE5ld0F0dGFjaG1lbnR7JEtleX07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGV4aXN0aW5nIGF0dGFjaG1lbnQgaXMgbm8gbG9uZ2VyIGluIG5ldyBhdHRhY2htZW50cyBoYXNoCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGRlbGV0ZSB0aGUgZXhpc3RpbmcgYXR0YWNobWVudAogICAgICAgICAgICAgICAgICAgICAgICBteSAkRGVsZXRlU3VjY2Vzc2Z1bCA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckF0dGFjaG1lbnREZWxldGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkV29ya09yZGVyLT57Q2hhbmdlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya09yZGVySUQgICAgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0YWNobWVudFR5cGUgPT4gJ1dvcmtPcmRlclJlcG9ydCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICAgICA9PiAkRmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISREZWxldGVTdWNjZXNzZnVsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHdyaXRlIHRoZSBuZXcgYXR0YWNobWVudHMKICAgICAgICAgICAgICAgIEFUVEFDSE1FTlQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKCB2YWx1ZXMgJU5ld0F0dGFjaG1lbnQgKSB7CgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgYXR0YWNobWVudCBpcyBhbiBpbmxpbmUgYXR0YWNobWVudAogICAgICAgICAgICAgICAgICAgIG15ICRJbmxpbmUgPSAwOwogICAgICAgICAgICAgICAgICAgIGlmICggJEF0dGFjaG1lbnQtPntDb250ZW50SUR9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayB3b3Jrb3JkZXIgcmVwb3J0IGZvciBjb250ZW50IGlkCiAgICAgICAgICAgICAgICAgICAgICAgICMgd2UgZG8gbm90IHdhbnQgdG8ga2VlcCB0aGlzIGF0dGFjaG1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgaXQgd2FzIGRlbGV0ZWQgaW4gdGhlIHJpY2ggdGV4dCBlZGl0b3IKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICRHZXRQYXJhbXtSZXBvcnR9ICF+IG17ICRBdHRhY2htZW50LT57Q29udGVudElEfSB9eG1zOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyByZW1lbWJlciB0aGF0IGl0IGlzIGlubGluZQogICAgICAgICAgICAgICAgICAgICAgICAkSW5saW5lID0gMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgYWRkIGF0dGFjaG1lbnQKICAgICAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckF0dGFjaG1lbnRBZGQoCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEF0dGFjaG1lbnR9LAogICAgICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCAgICA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgID0+ICRXb3JrT3JkZXItPntDaGFuZ2VJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgQXR0YWNobWVudFR5cGUgPT4gJ1dvcmtPcmRlclJlcG9ydCcsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKCkgaWYgISRTdWNjZXNzOwoKICAgICAgICAgICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRJbmxpbmU7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICEkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fTsKCiAgICAgICAgICAgICAgICAgICAgIyBwaWN0dXJlIHVybCBpbiB1cGxvYWQgY2FjaGUKICAgICAgICAgICAgICAgICAgICBteSAkU2VhcmNoID0gIkFjdGlvbj1QaWN0dXJlVXBsb2FkIC4rIEZvcm1JRD0kU2VsZi0+e0Zvcm1JRH0gLisgIgogICAgICAgICAgICAgICAgICAgICAgICAuICJDb250ZW50SUQ9JEF0dGFjaG1lbnQtPntDb250ZW50SUR9IjsKCiAgICAgICAgICAgICAgICAgICAgIyBwaWN0dXJlIHVybCBpbiB3b3Jrb3JkZXIgcmVwb3J0IGF0dGFjaG1lbnQKICAgICAgICAgICAgICAgICAgICBteSAkUmVwbGFjZSA9ICJBY3Rpb249QWdlbnRJVFNNV29ya09yZGVyWm9vbTtTdWJhY3Rpb249RG93bmxvYWRBdHRhY2htZW50OyIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiRmlsZW5hbWU9JEF0dGFjaG1lbnQtPntGaWxlbmFtZX07V29ya09yZGVySUQ9JFdvcmtPcmRlcklEO1R5cGU9V29ya09yZGVyUmVwb3J0IjsKCiAgICAgICAgICAgICAgICAgICAgIyByZXBsYWNlIHVybAogICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtSZXBvcnR9ID1+IHN7JFNlYXJjaH17JFJlcGxhY2V9eG1zOwoKICAgICAgICAgICAgICAgICAgICAjIHVwZGF0ZSB3b3Jrb3JkZXIKICAgICAgICAgICAgICAgICAgICAkU3VjY2VzcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnQgICAgICA9PiAkR2V0UGFyYW17UmVwb3J0fSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICAgICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvdWxkIG5vdCB1cGRhdGUgdGhlIGlubGluZSBpbWFnZSBVUkxzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJmb3IgV29ya09yZGVySUQgJyRXb3JrT3JkZXJJRCchISIsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZGVsZXRlIHRoZSB1cGxvYWQgY2FjaGUKICAgICAgICAgICAgICAgICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlEUmVtb3ZlKCBGb3JtSUQgPT4gJFNlbGYtPntGb3JtSUR9ICk7CgogICAgICAgICAgICAgICAgIyBsb2FkIG5ldyBVUkwgaW4gcGFyZW50IHdpbmRvdyBhbmQgY2xvc2UgcG9wdXAKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Qb3B1cENsb3NlKAogICAgICAgICAgICAgICAgICAgIFVSTCA9PiAiQWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlclpvb207V29ya09yZGVySUQ9JFdvcmtPcmRlcklEIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBzaG93IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0KICAgICAgICAgICAgICAgICAgICAgICAgLT5UcmFuc2xhdGUoICdXYXMgbm90IGFibGUgdG8gdXBkYXRlIFdvcmtPcmRlciAlcyEnLCAkV29ya09yZGVySUQgKSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgZGVsZXRlIGFsbCBrZXlzIGZyb20gR2V0UGFyYW0gd2hlbiBpdCBpcyBubyBTdWJhY3Rpb24KICAgICAgICAlR2V0UGFyYW0gPSAoKTsKCiAgICAgICAgIyBpbml0aWFsaXplIHRoZSBhY3R1YWwgdGltZSByZWxhdGVkIGZpZWxkcwogICAgICAgIGlmICggJFNlbGYtPntDb25maWd9LT57QWN0dWFsVGltZVNwYW59ICkgewogICAgICAgICAgICBUSU1FVFlQRToKICAgICAgICAgICAgZm9yIG15ICRUaW1lVHlwZSAocXcoQWN0dWFsU3RhcnRUaW1lIEFjdHVhbEVuZFRpbWUpKSB7CgogICAgICAgICAgICAgICAgbmV4dCBUSU1FVFlQRSBpZiAhJFdvcmtPcmRlci0+eyRUaW1lVHlwZX07CgogICAgICAgICAgICAgICAgIyBnZXQgdGhlIHRpbWUgZnJvbSB0aGUgd29ya29yZGVyCiAgICAgICAgICAgICAgICBteSAkU3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFdvcmtPcmRlci0+eyRUaW1lVHlwZX0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15ICggJFNlY29uZCwgJE1pbnV0ZSwgJEhvdXIsICREYXksICRNb250aCwgJFllYXIgKQogICAgICAgICAgICAgICAgICAgID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyRGF0ZSggU3lzdGVtVGltZSA9PiAkU3lzdGVtVGltZSApOwoKICAgICAgICAgICAgICAgICMgc2V0IHRoZSBwYXJhbWV0ZXIgaGFzaCBmb3IgQnVpbGREYXRlU2VsZWN0aW9uKCkKICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFRpbWVUeXBlIC4gJ1VzZWQnIH0gICA9IDE7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdNaW51dGUnIH0gPSAkTWludXRlOwogICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnSG91cicgfSAgID0gJEhvdXI7CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRUaW1lVHlwZSAuICdEYXknIH0gICAgPSAkRGF5OwogICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnTW9udGgnIH0gID0gJE1vbnRoOwogICAgICAgICAgICAgICAgJEdldFBhcmFteyAkVGltZVR5cGUgLiAnWWVhcicgfSAgID0gJFllYXI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IGFsbCByZXBvcnQgYXR0YWNobWVudHMgbWV0YSBkYXRhCiAgICAgICAgbXkgQEV4aXN0aW5nQXR0YWNobWVudHMgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJSZXBvcnRBdHRhY2htZW50TGlzdCgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICk7CgogICAgICAgICMgY29weSBhbGwgZXhpc3RpbmcgcmVwb3J0IGF0dGFjaG1lbnRzIHRvIHVwbG9hZCBjYWNoZQogICAgICAgIEZJTEVOQU1FOgogICAgICAgIGZvciBteSAkRmlsZW5hbWUgKEBFeGlzdGluZ0F0dGFjaG1lbnRzKSB7CgogICAgICAgICAgICAjIGdldCB0aGUgZXhpc3RpbmcgYXR0YWNobWVudCBkYXRhCiAgICAgICAgICAgIG15ICRBdHRhY2htZW50RGF0YSA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCAgICA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICAgICA9PiAkRmlsZW5hbWUsCiAgICAgICAgICAgICAgICBBdHRhY2htZW50VHlwZSA9PiAnV29ya09yZGVyUmVwb3J0JywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZG8gbm90IGNvbnNpZGVyIGlubGluZSBhdHRhY2htZW50cwogICAgICAgICAgICBuZXh0IEZJTEVOQU1FIGlmICRBdHRhY2htZW50RGF0YS0+e1ByZWZlcmVuY2VzfS0+e0NvbnRlbnRJRH07CgogICAgICAgICAgICAjIGFkZCBhdHRhY2htZW50IHRvIHRoZSB1cGxvYWQgY2FjaGUKICAgICAgICAgICAgJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURBZGRGaWxlKAogICAgICAgICAgICAgICAgRm9ybUlEICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEF0dGFjaG1lbnREYXRhLT57RmlsZW5hbWV9LAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEF0dGFjaG1lbnREYXRhLT57Q29udGVudH0sCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAkQXR0YWNobWVudERhdGEtPntDb250ZW50VHlwZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGNoYW5nZSB0aGF0IHRoZSB3b3Jrb3JkZXIgYmVsb25ncyB0bwogICAgbXkgJENoYW5nZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZUdldCgKICAgICAgICBDaGFuZ2VJRCA9PiAkV29ya09yZGVyLT57Q2hhbmdlSUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBubyBjaGFuZ2UgZm91bmQKICAgIGlmICggISRDaGFuZ2UgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDb3VsZCBub3QgZmluZCBDaGFuZ2UgZm9yIFdvcmtPcmRlciAlcyEnLCAkV29ya09yZGVySUQgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBpZiB0aGVyZSB3YXMgYW4gYXR0YWNobWVudCBkZWxldGUgb3IgdXBsb2FkCiAgICAjIHdlIGRvIG5vdCB3YW50IHRvIHNob3cgdmFsaWRhdGlvbiBlcnJvcnMgZm9yIG90aGVyIGZpZWxkcwogICAgaWYgKCAkVmFsaWRhdGlvbkVycm9ye0F0dGFjaG1lbnR9ICkgewogICAgICAgICVWYWxpZGF0aW9uRXJyb3IgPSAoKTsKICAgIH0KCiAgICAjIGdldCB3b3Jrb3JkZXIgc3RhdGUgbGlzdAogICAgbXkgJFdvcmtPcmRlclBvc3NpYmxlU3RhdGVzID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyUG9zc2libGVTdGF0ZXNHZXQoCiAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBidWlsZCBkcm9wLWRvd24gd2l0aCB3b3Jrb3JkZXIgc3RhdGVzCiAgICAkUGFyYW17U3RhdGVTZWxlY3R9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiAkV29ya09yZGVyUG9zc2libGVTdGF0ZXMsCiAgICAgICAgTmFtZSAgICAgICA9PiAnV29ya09yZGVyU3RhdGVJRCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkV29ya09yZGVyLT57V29ya09yZGVyU3RhdGVJRH0sCiAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICk7CgogICAgIyBzaG93IHN0YXRlIGRyb3Bkb3duCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdTdGF0ZScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgVGl0bGUgPT4gJFdvcmtPcmRlci0+e1dvcmtPcmRlclRpdGxlfSwKICAgICAgICBUeXBlICA9PiAnU21hbGwnLAogICAgKTsKCiAgICAjIGFkZCByaWNoIHRleHQgZWRpdG9yCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6OlJpY2hUZXh0JykgKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1JpY2hUZXh0JywKICAgICAgICApOwogICAgfQoKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CgogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBnZXQgd29ya29yZGVyIGR5bmFtaWMgZmllbGRzIGZyb20gd29ya29yZGVyIGlmIHBhZ2UgaXMgbG9hZGVkIHRoZSBmaXJzdCB0aW1lCiAgICAgICAgaWYgKCAhJFNlbGYtPntTdWJhY3Rpb259ICkgewogICAgICAgICAgICAkRHluYW1pY0ZpZWxkVmFsdWVzeyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfQogICAgICAgICAgICAgICAgPSAkV29ya09yZGVyLT57ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9OwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgZmllbGQgaHRtbAogICAgICAgIG15ICREeW5hbWljRmllbGRIVE1MID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFJlbmRlcigKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkVmFsdWVzeyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgU2VydmVyRXJyb3IgICAgICAgID0+ICRWYWxpZGF0aW9uRXJyb3J7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9IHx8ICcnLAogICAgICAgICAgICBNYW5kYXRvcnkgICAgICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57RHluYW1pY0ZpZWxkfS0+eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9PSAyLAogICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgQUpBWFVwZGF0ZSAgICAgICAgID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBza2lwIGZpZWxkcyB0aGF0IEhUTUwgY291bGQgbm90IGJlIHJldHJpZXZlZAogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkSFRNTCk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdEeW5hbWljRmllbGQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgIExhYmVsID0+ICREeW5hbWljRmllbGRIVE1MLT57TGFiZWx9LAogICAgICAgICAgICAgICAgRmllbGQgPT4gJER5bmFtaWNGaWVsZEhUTUwtPntGaWVsZH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBleGFtcGxlIG9mIGR5bmFtaWMgZmllbGRzIG9yZGVyIGN1c3RvbWl6YXRpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTmFtZSAgPT4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICAgICAgTGFiZWwgPT4gJER5bmFtaWNGaWVsZEhUTUwtPntMYWJlbH0sCiAgICAgICAgICAgICAgICBGaWVsZCA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0ZpZWxkfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgaWYgYWN0dWFsIHRpbWVzIHNob3VsZCBiZSBzaG93bgogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntBY3R1YWxUaW1lU3Bhbn0gKSB7CgogICAgICAgIGZvciBteSAkVGltZVR5cGUgKHF3KEFjdHVhbEVuZFRpbWUgQWN0dWFsU3RhcnRUaW1lKSkgewoKICAgICAgICAgICAgIyB0aW1lIHBlcmlvZCB0aGF0IGNhbiBiZSBzZWxlY3RlZCBmcm9tIHRoZSBHVUkKICAgICAgICAgICAgbXkgJVRpbWVQZXJpb2QgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Xb3JrT3JkZXI6OlRpbWVQZXJpb2QnKSB9OwoKICAgICAgICAgICAgIyBhZGQgc2VsZWN0aW9uIGZvciB0aGUgdGltZQogICAgICAgICAgICBteSAkVGltZVNlbGVjdGlvblN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgIEZvcm1hdCAgICAgICAgICAgICAgICA9PiAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgICAgICAgICBQcmVmaXggICAgICAgICAgICAgICAgPT4gJFRpbWVUeXBlLAogICAgICAgICAgICAgICAgIiR7VGltZVR5cGV9T3B0aW9uYWwiID0+IDEsCiAgICAgICAgICAgICAgICAkVGltZVR5cGUgLiAnQ2xhc3MnID0+ICRWYWxpZGF0aW9uRXJyb3J7ICRUaW1lVHlwZSAuICdJbnZhbGlkJyB9IHx8ICcnLAogICAgICAgICAgICAgICAgVmFsaWRhdGUgPT4gMSwKICAgICAgICAgICAgICAgICVUaW1lUGVyaW9kLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzaG93IHRpbWUgZmllbGQKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICRUaW1lVHlwZSwKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICRUaW1lVHlwZSAuICdTZWxlY3Rpb25TdHJpbmcnID0+ICRUaW1lU2VsZWN0aW9uU3RyaW5nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgYWRkIHNlcnZlciBlcnJvciBtZXNzYWdlcyBmb3IgdGhlIGFjdHVhbCBzdGFydCB0aW1lCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FjdHVhbFN0YXJ0VGltZScKICAgICAgICAgICAgICAgIC4gKCAkVmFsaWRhdGlvbkVycm9ye0FjdHVhbFN0YXJ0VGltZUVycm9yVHlwZX0gfHwgJ0dlbmVyaWNTZXJ2ZXJFcnJvcicgKQogICAgICAgICk7CiAgICB9CgogICAgIyBzaG93IGFjY291bnRlZCB0aW1lIG9ubHkgd2hlbiBmb3JtIHdhcyBzdWJtaXR0ZWQKICAgIGlmICggJFNlbGYtPntDb25maWd9LT57QWNjb3VudGVkVGltZX0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Nob3dBY2NvdW50ZWRUaW1lJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBBY2NvdW50ZWRUaW1lID0+ICRHZXRQYXJhbXtBY2NvdW50ZWRUaW1lfSwKICAgICAgICAgICAgICAgICVWYWxpZGF0aW9uRXJyb3IsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNob3cgYWNjb3VudGVkIHRpbWUgb25seSB3aGVuIGZvcm0gd2FzIHN1Ym1pdHRlZAogICAgbXkgJEFjY291bnRlZFRpbWUgPSAnJzsKICAgIGlmICggJEdldFBhcmFte0FjY291bnRlZFRpbWV9ICkgewogICAgICAgICRBY2NvdW50ZWRUaW1lID0gJEdldFBhcmFte0FjY291bnRlZFRpbWV9OwogICAgfQoKICAgICMgc2hvdyB0aGUgYXR0YWNobWVudCB1cGxvYWQgYnV0dG9uCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50VXBsb2FkJywKICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIGdldCBhbGwgcmVwb3J0IGF0dGFjaG1lbnRzIG1ldGEgZGF0YQogICAgbXkgQEF0dGFjaG1lbnRzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc01ldGEoCiAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICk7CgogICAgIyBzaG93IHJlcG9ydCBhdHRhY2htZW50cwogICAgQVRUQUNITUVOVDoKICAgIGZvciBteSAkQXR0YWNobWVudCAoQEF0dGFjaG1lbnRzKSB7CgogICAgICAgICMgZG8gbm90IHNob3cgaW5saW5lIGltYWdlcyBhcyBhdHRhY2htZW50cwogICAgICAgICMgKHRoZXkgaGF2ZSBhIGNvbnRlbnQgaWQpCiAgICAgICAgaWYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH0gJiYgJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgIG5leHQgQVRUQUNITUVOVDsKICAgICAgICB9CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBdHRhY2htZW50JywKICAgICAgICAgICAgRGF0YSA9PiAkQXR0YWNobWVudCwKICAgICAgICApOwogICAgfQoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVdvcmtPcmRlclJlcG9ydCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyRDaGFuZ2V9LAogICAgICAgICAgICAleyRXb3JrT3JkZXJ9LAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVWYWxpZGF0aW9uRXJyb3IsCiAgICAgICAgICAgIEFjY291bnRlZFRpbWUgPT4gJEFjY291bnRlZFRpbWUsCiAgICAgICAgICAgIEZvcm1JRCAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgYWRkIGZvb3RlcgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Xb3JrT3JkZXJUYWtlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbmVlZGVkIFdvcmtPcmRlcklECiAgICBteSAkV29ya09yZGVySUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnV29ya09yZGVySUQnICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFdvcmtPcmRlcklEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIFdvcmtPcmRlcklEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB3b3Jrb3JkZXIgb2JqZWN0CiAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiAgICAjIGdldCB3b3Jrb3JkZXIgZGF0YQogICAgbXkgJFdvcmtPcmRlciA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckdldCgKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGVycm9yCiAgICBpZiAoICEkV29ya09yZGVyICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlIScsICRXb3JrT3JkZXJJRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICAjIHF1ZXJ5IHRoZSBwZXJtaXNzaW9uIG1vZHVsZXMgcmVnaXN0ZXJlZCBpbiAnSVRTTVdvcmtPcmRlcjo6VGFrZVBlcm1pc3Npb24nCiAgICBteSAkQWNjZXNzID0gJFdvcmtPcmRlck9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICAgICAgICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgQWN0aW9uICAgICAgICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBQZXJtaXNzaW9uUmVnaXN0cnkgPT4gJ0lUU01Xb3JrT3JkZXI6OlRha2VQZXJtaXNzaW9uJywKICAgICAgICBXb3JrT3JkZXJJRCAgICAgICAgPT4gJFdvcmtPcmRlcklELAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZXJyb3Igc2NyZWVuCiAgICBpZiAoICEkQWNjZXNzICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5Ob1Blcm1pc3Npb24oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIScsICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259ICksCiAgICAgICAgICAgIFdpdGhIZWFkZXIgPT4gJ3llcycsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnV29ya09yZGVyVGFrZScgKSB7CgogICAgICAgICMgc2V0IHRoZSBjdXJyZW50IHVzZXIgYXMgdGhlIHdvcmtvcmRlciBhZ2VudAogICAgICAgIG15ICRDb3VsZFVwZGF0ZVdvcmtPcmRlciA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclVwZGF0ZSgKICAgICAgICAgICAgV29ya09yZGVySUQgICAgICA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgIFdvcmtPcmRlckFnZW50SUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJENvdWxkVXBkYXRlV29ya09yZGVyKSB7CgogICAgICAgICAgICAjIHJlZGlyZWN0IHRvIHdvcmtvcmRlciwgd2hlbiB0aGUgdXBkYXRlIHdhcyBzdWNjZXNzZnVsCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRJVFNNV29ya09yZGVyWm9vbTtXb3JrT3JkZXJJRD0kV29ya09yZGVySUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlCiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fQogICAgICAgICAgICAgICAgICAgIC0+VHJhbnNsYXRlKCAnV2FzIG5vdCBhYmxlIHRvIHRha2UgdGhlIHdvcmtvcmRlciAlcyEnLCAkV29ya09yZGVySUQgKSwKICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBMb2dpbiBuYW1lIG9mIHRoZSBjdXJyZW50IHdvcmtvcmRlciBhZ2VudAogICAgbXkgJFdvcmtPcmRlckFnZW50ID0gJy0nOwogICAgaWYgKCAkV29ya09yZGVyLT57V29ya09yZGVyQWdlbnRJRH0gKSB7CiAgICAgICAgJFdvcmtPcmRlckFnZW50ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxvb2t1cCgKICAgICAgICAgICAgVXNlcklEID0+ICRXb3JrT3JkZXItPntXb3JrT3JkZXJBZ2VudElEfSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNoYW5nZSB0aGF0IHdvcmtvcmRlciBiZWxvbmdzIHRvCiAgICBteSAkQ2hhbmdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRXb3JrT3JkZXItPntDaGFuZ2VJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGlmIGNoYW5nZSBpcyBmb3VuZAogICAgaWYgKCAhJENoYW5nZSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ0NvdWxkIG5vdCBmaW5kIENoYW5nZSBmb3IgV29ya09yZGVyICVzIScsICRXb3JrT3JkZXJJRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG91dHB1dCBjb250ZW50CiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNV29ya09yZGVyVGFrZScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyRDaGFuZ2V9LAogICAgICAgICAgICAleyRXb3JrT3JkZXJ9LAogICAgICAgICAgICBXb3JrT3JkZXJBZ2VudCA9PiAkV29ya09yZGVyQWdlbnQsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBidWlsZCB0aGUgcmV0dXJuZWQgZGF0YSBzdHJ1Y3R1cmUKICAgIG15ICVEYXRhID0gKAogICAgICAgIEhUTUwgICAgICAgPT4gJE91dHB1dCwKICAgICAgICBEaWFsb2dUeXBlID0+ICdDb25maXJtYXRpb24nLAogICAgKTsKCiAgICAjIHJldHVybiBKU09OLVN0cmluZyBiZWNhdXNlIG9mIEFKQVgtTW9kZQogICAgbXkgJE91dHB1dEpTT04gPSAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKCBEYXRhID0+IFwlRGF0YSApOwoKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgIENvbnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PScgLiAkTGF5b3V0T2JqZWN0LT57Q2hhcnNldH0sCiAgICAgICAgQ29udGVudCAgICAgPT4gJE91dHB1dEpTT04sCiAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgTm9DYWNoZSAgICAgPT4gMSwKICAgICk7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Xb3JrT3JkZXJUZW1wbGF0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3QKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2V0IG5lZWRlZCBXb3JrT3JkZXJJRAogICAgbXkgJFdvcmtPcmRlcklEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1dvcmtPcmRlcklEJyApOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkV29ya09yZGVySUQgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTm8gV29ya09yZGVySUQgaXMgZ2l2ZW4hJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHdvcmtvcmRlciBkYXRhCiAgICBteSAkV29ya09yZGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyR2V0KAogICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgaWYgTGF5b3V0T2JqZWN0IGhhcyBUcmFuc2xhdGlvbk9iamVjdAogICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9ICkgewoKICAgICAgICAjIHRyYW5zbGF0ZSB3b3Jrb3JkZXIgdHlwZQogICAgICAgICRXb3JrT3JkZXItPntXb3JrT3JkZXJUeXBlfSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgJFdvcmtPcmRlci0+e1dvcmtPcmRlclR5cGV9CiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGVycm9yCiAgICBpZiAoICEkV29ya09yZGVyICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnV29ya09yZGVyICIlcyIgbm90IGZvdW5kIGluIGRhdGFiYXNlIScsICRXb3JrT3JkZXJJRCApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJENoYW5nZU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgQ2hhbmdlSUQgICAgPT4gJFdvcmtPcmRlci0+e0NoYW5nZUlEfSwKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGVycm9yIHNjcmVlbgogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdZb3UgbmVlZCAlcyBwZXJtaXNzaW9ucyEnLCAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSApLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBzdG9yZSBuZWVkZWQgcGFyYW1ldGVycyBpbiAlR2V0UGFyYW0gdG8gbWFrZSBpdCByZWxvYWRhYmxlCiAgICBteSAlR2V0UGFyYW07CiAgICBmb3IgbXkgJFBhcmFtTmFtZSAoCiAgICAgICAgcXcoVGVtcGxhdGVOYW1lIENvbW1lbnQgVmFsaWRJRCBTdGF0ZVJlc2V0IE92ZXJ3cml0ZVRlbXBsYXRlIERlbGV0ZVdvcmtPcmRlcikKICAgICAgICApCiAgICB7CiAgICAgICAgJEdldFBhcmFteyRQYXJhbU5hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtTmFtZSApOwogICAgfQoKICAgICMgZ2V0IHVzZXIgb2JqZWN0CiAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgIyBnZXQgZXhpc3RpbmcgdXNlciBwcmVmZXJlbmNlcwogICAgbXkgJVVzZXJQcmVmZXJlbmNlcyA9ICRVc2VyT2JqZWN0LT5HZXRQcmVmZXJlbmNlcygKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBwcmVmZXJlbmNlIHRvIHNlZSB3aGljaCB0ZW1wbGF0ZXMgYXJlIGluIGVkaXQgYnkgdGhlIHVzZXIKICAgIG15ICRUZW1wbGF0ZUVkaXRQcmVmZXJlbmNlU3RyaW5nID0gJFVzZXJQcmVmZXJlbmNlc3tVc2VySVRTTUNoYW5nZU1hbmFnZW1lbnRUZW1wbGF0ZUVkaXR9IHx8ICcnOwoKICAgICMgY29udmVydCB0byBsb29rdXAgaGFzaAogICAgbXkgQEVkaXRlZFRlbXBsYXRlcyA9IHNwbGl0IG0vOy8sICRUZW1wbGF0ZUVkaXRQcmVmZXJlbmNlU3RyaW5nOwogICAgbXkgJU9iamVjdDJUZW1wbGF0ZTsKICAgIGZvciBteSAkU3RyaW5nIChARWRpdGVkVGVtcGxhdGVzKSB7CiAgICAgICAgbXkgKCAkT2JqZWN0LCAkVGVtcGxhdGUgKSA9IHNwbGl0IG0vOjovLCAkU3RyaW5nOwogICAgICAgICRPYmplY3QyVGVtcGxhdGV7JE9iamVjdH0gPSAkVGVtcGxhdGU7CiAgICB9CgogICAgIyBnZXQgdGVtcGxhdGUgaWQgZnJvbSB1c2VyIHByZWZlcmVuY2VzCiAgICBteSAkVGVtcGxhdGVJRCA9ICRPYmplY3QyVGVtcGxhdGV7ICdXb3JrT3JkZXJJRCcgLiAkV29ya09yZGVySUQgfTsKCiAgICAjIGdldCB0ZW1wbGF0ZSBvYmplY3QKICAgIG15ICRUZW1wbGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpUZW1wbGF0ZScpOwoKICAgICMgY2hlY2sgaWYgdGhpcyB3b3Jrb3JkZXIgd2FzIGNyZWF0ZWQgYnkgdGhpcyB1c2VyIHVzaW5nIGEgdGVtcGxhdGUKICAgIGlmICgkVGVtcGxhdGVJRCkgewoKICAgICAgICAjIGdldCB0ZW1wbGF0ZSBkYXRhCiAgICAgICAgbXkgJFRlbXBsYXRlRGF0YSA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVHZXQoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoJFRlbXBsYXRlRGF0YSkgewoKICAgICAgICAgICAgIyBvdmVyd3JpdGUgZW1wdHkgdmFsdWVzIHdpdGggdGVtcGxhdGUgZGF0YQogICAgICAgICAgICAkR2V0UGFyYW17VGVtcGxhdGVOYW1lfSB8fD0gJFRlbXBsYXRlRGF0YS0+e05hbWV9OwogICAgICAgICAgICAkR2V0UGFyYW17Q29tbWVudH0gICAgICB8fD0gJFRlbXBsYXRlRGF0YS0+e0NvbW1lbnR9OwogICAgICAgICAgICAkR2V0UGFyYW17VmFsaWRJRH0gICAgICB8fD0gJFRlbXBsYXRlRGF0YS0+e1ZhbGlkSUR9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFRlbXBsYXRlSUQgPSAnJzsKICAgICAgICB9CiAgICB9CgogICAgIyBDaGVjayByZXF1aXJlZCBmaWVsZHMgdG8gbG9vayBmb3IgZXJyb3JzLgogICAgbXkgJUVycm9yOwoKICAgICMgYWRkIGEgdGVtcGxhdGUKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGRUZW1wbGF0ZScgKSB7CgogICAgICAgICMgY2hlY2sgdmFsaWRpdHkgb2YgdGhlIHRlbXBsYXRlIG5hbWUKICAgICAgICBpZiAoICEkR2V0UGFyYW17VGVtcGxhdGVOYW1lfSApIHsKICAgICAgICAgICAgJEVycm9yeydUZW1wbGF0ZU5hbWVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAhJUVycm9yICkgewoKICAgICAgICAgICAgIyBzZXJpYWxpemUgdGhlIHdvcmtvcmRlcgogICAgICAgICAgICBteSAkVGVtcGxhdGVDb250ZW50ID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZVNlcmlhbGl6ZSgKICAgICAgICAgICAgICAgIFRlbXBsYXRlVHlwZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgICAgICAgICBTdGF0ZVJlc2V0ICAgPT4gJEdldFBhcmFte1N0YXRlUmVzZXR9IHx8IDAsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCAgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2hvdyBlcnJvciBtZXNzYWdlCiAgICAgICAgICAgIGlmICggISRUZW1wbGF0ZUNvbnRlbnQgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgd29ya29yZGVyICIlcyIgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuJywgJFdvcmtPcmRlcklECiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGlmIHRoaXMgd29ya29yZGVyIHdhcyBjcmVhdGVkIGZyb20gYSB0ZW1wbGF0ZSBhbmQgc2hvdWxkIGJlIHNhdmVkIGJhY2sKICAgICAgICAgICAgaWYgKCAkVGVtcGxhdGVJRCAmJiAkR2V0UGFyYW17T3ZlcndyaXRlVGVtcGxhdGV9ICkgewoKICAgICAgICAgICAgICAgIG15ICRVcGRhdGVTdWNjZXNzID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZVVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJEdldFBhcmFte1RlbXBsYXRlTmFtZX0sCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCAgICA9PiAkR2V0UGFyYW17Q29tbWVudH0sCiAgICAgICAgICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAkR2V0UGFyYW17VmFsaWRJRH0sCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICA9PiAkVGVtcGxhdGVDb250ZW50LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNob3cgZXJyb3IgbWVzc2FnZQogICAgICAgICAgICAgICAgaWYgKCAhJFVwZGF0ZVN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+VHJhbnNsYXRlKCAnQ291bGQgbm90IHVwZGF0ZSB0aGUgdGVtcGxhdGUgIiVzIi4nLCAkVGVtcGxhdGVJRCApLAogICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjIHN0b3JlIHRoZSBzZXJpYWxpemVkIHdvcmtvcmRlciBhcyBhIG5ldyB0ZW1wbGF0ZQogICAgICAgICAgICAgICAgJFRlbXBsYXRlSUQgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlQWRkKAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkR2V0UGFyYW17VGVtcGxhdGVOYW1lfSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJEdldFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICAgICAgICAgIFZhbGlkSUQgICAgICA9PiAkR2V0UGFyYW17VmFsaWRJRH0sCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVUeXBlID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICAgPT4gJFRlbXBsYXRlQ29udGVudCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNob3cgZXJyb3IgbWVzc2FnZQogICAgICAgICAgICAgICAgaWYgKCAhJFRlbXBsYXRlSUQgKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnQ291bGQgbm90IGFkZCB0aGUgdGVtcGxhdGUuJyksCiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGRlZmluZSByZWRpcmVjdCBVUkwKICAgICAgICAgICAgbXkgJFJlZGlyZWN0VVJMID0gIkFjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJab29tO1dvcmtPcmRlcklEPSRXb3JrT3JkZXJJRCI7CgogICAgICAgICAgICAjIGlmIHRoZSBvcmlnaW5hbCBjaGFuZ2UgYW5kIGFsbCB3b3Jrb3JkZXJzIHNob3VsZCBiZSBkZWxldGVkCiAgICAgICAgICAgIGlmICggJEdldFBhcmFte0RlbGV0ZVdvcmtPcmRlcn0gKSB7CgogICAgICAgICAgICAgICAgIyBkZWxldGUgdGhlIGNoYW5nZSBhbmQgYWxsIHdvcmtvcmRlcnMgKGluY2x1ZGluZyB0aGlzIG9uZSkKICAgICAgICAgICAgICAgIG15ICREZWxldGVTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRXb3JrT3JkZXItPntDaGFuZ2VJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNob3cgZXJyb3IgbWVzc2FnZQogICAgICAgICAgICAgICAgaWYgKCAhJERlbGV0ZVN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb3VsZCBub3QgZGVsZXRlIGNoYW5nZSAiJXMiLicsICRXb3JrT3JkZXItPntDaGFuZ2VJRH0KICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBkZWxldGUgdGhlIHVzZXIgcHJlZmVyZW5jZSBlbnRyeQogICAgICAgICAgICAgICAgZGVsZXRlICRPYmplY3QyVGVtcGxhdGV7ICdXb3JrT3JkZXJJRCcgLiAkV29ya09yZGVySUQgfTsKCiAgICAgICAgICAgICAgICAjIHJlZGlyZWN0IHRvIHRlbXBsYXRlIG92ZXJ2aWV3CiAgICAgICAgICAgICAgICAkUmVkaXJlY3RVUkwgPSAnQWN0aW9uPUFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXcnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHVwZGF0ZSB0aGUgdXNlciBwcmVmZXJlbmNlIHdpdGggdGhlIG5ldyB0ZW1wbGF0ZSBpZAogICAgICAgICAgICBlbHNpZiAoICRPYmplY3QyVGVtcGxhdGV7ICdXb3JrT3JkZXJJRCcgLiAkV29ya09yZGVySUQgfSApIHsKICAgICAgICAgICAgICAgICRPYmplY3QyVGVtcGxhdGV7ICdXb3JrT3JkZXJJRCcgLiAkV29ya09yZGVySUQgfSA9ICRUZW1wbGF0ZUlEOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNvbnZlcnQgdG8gc3RyaW5nCiAgICAgICAgICAgICRUZW1wbGF0ZUVkaXRQcmVmZXJlbmNlU3RyaW5nID0gJyc7CiAgICAgICAgICAgIGZvciBteSAkT2JqZWN0ICggc29ydCBrZXlzICVPYmplY3QyVGVtcGxhdGUgKSB7CiAgICAgICAgICAgICAgICAkVGVtcGxhdGVFZGl0UHJlZmVyZW5jZVN0cmluZyAuPSAkT2JqZWN0IC4gJzo6JyAuICRPYmplY3QyVGVtcGxhdGV7JE9iamVjdH0gLiAnOyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2F2ZSBwcmVmZXJlbmNlcwogICAgICAgICAgICAkVXNlck9iamVjdC0+U2V0UHJlZmVyZW5jZXMoCiAgICAgICAgICAgICAgICBLZXkgICAgPT4gJ1VzZXJJVFNNQ2hhbmdlTWFuYWdlbWVudFRlbXBsYXRlRWRpdCcsCiAgICAgICAgICAgICAgICBWYWx1ZSAgPT4gJFRlbXBsYXRlRWRpdFByZWZlcmVuY2VTdHJpbmcsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBsb2FkIG5ldyBVUkwgaW4gcGFyZW50IHdpbmRvdyBhbmQgY2xvc2UgcG9wdXAKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlBvcHVwQ2xvc2UoCiAgICAgICAgICAgICAgICBVUkwgPT4gJFJlZGlyZWN0VVJMLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjaGFuZ2UgdGhhdCB0aGUgd29ya29yZGVyIGJlbG9uZ3MgdG8KICAgIG15ICRDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJFdvcmtPcmRlci0+e0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgbm8gY2hhbmdlIGZvdW5kCiAgICBpZiAoICEkQ2hhbmdlICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnQ291bGQgbm90IGZpbmQgQ2hhbmdlIGZvciBXb3JrT3JkZXIgJXMhJywgJFdvcmtPcmRlcklEICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICBUeXBlICA9PiAnU21hbGwnLAogICAgICAgIFRpdGxlID0+IFRyYW5zbGF0YWJsZSgnVGVtcGxhdGUnKSwKICAgICk7CgogICAgIyBnZXQgdmFsaWQgb2JqZWN0CiAgICBteSAkVmFsaWRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKTsKCiAgICAjIGJ1aWxkIHZhbGlkIHNlbGVjdGlvbgogICAgbXkgJFZhbGlkU2VsZWN0aW9uU3RyaW5nID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICRWYWxpZE9iamVjdC0+VmFsaWRMaXN0KCksCiAgICAgICAgfSwKICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbXtWYWxpZElEfSB8fCAoICRWYWxpZE9iamVjdC0+VmFsaWRJRHNHZXQoKSApWzBdLAogICAgICAgIFNvcnQgICAgICAgPT4gJ051bWVyaWNLZXknLAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgYnVpbGQgc2VsZWN0aW9uIHN0cmluZyBmb3Igc3RhdGUgcmVzZXQKICAgIG15ICRTdGF0ZVJlc2V0U2VsZWN0aW9uU3RyaW5nID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIDAgPT4gVHJhbnNsYXRhYmxlKCdObycpLAogICAgICAgICAgICAxID0+IFRyYW5zbGF0YWJsZSgnWWVzJyksCiAgICAgICAgfSwKICAgICAgICBOYW1lICAgICAgID0+ICdTdGF0ZVJlc2V0JywKICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbXtTdGF0ZVJlc2V0fSAvLyAxLAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICApOwoKICAgICMgc2hvdyBkcm9wZG93bnMgb25seSBpZiB0aGlzIHdvcmtvcmRlciB3YXMgY3JlYXRlZCBmcm9tIGEgdGVtcGxhdGUKICAgIGlmICgkVGVtcGxhdGVJRCkgewoKICAgICAgICAjIGJ1aWxkIHNlbGVjdGlvbiBzdHJpbmcgZm9yIHRlbXBsYXRlIG92ZXJ3cml0ZSwgZGVmYXVsdCBpcyB5ZXMKICAgICAgICBteSAkT3ZlcndyaXRlVGVtcGxhdGVTZWxlY3Rpb25TdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAwID0+IFRyYW5zbGF0YWJsZSgnTm8nKSwKICAgICAgICAgICAgICAgIDEgPT4gVHJhbnNsYXRhYmxlKCdZZXMnKSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnT3ZlcndyaXRlVGVtcGxhdGUnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbXtPdmVyd3JpdGVUZW1wbGF0ZX0gLy8gMSwKICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICApOwoKICAgICAgICAjIHNob3cgb3ZlcndyaXRlIG9yaWdpbmFsIHRlbXBsYXRlIGRyb3Bkb3duCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ3cml0ZVRlbXBsYXRlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBPdmVyd3JpdGVUZW1wbGF0ZVNlbGVjdGlvblN0cmluZyA9PiAkT3ZlcndyaXRlVGVtcGxhdGVTZWxlY3Rpb25TdHJpbmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBidWlsZCBzZWxlY3Rpb24gc3RyaW5nIGZvciBkZWxldGUgd29ya29yZGVyCiAgICAgICAgbXkgJERlbGV0ZVdvcmtPcmRlclNlbGVjdGlvblN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDAgPT4gVHJhbnNsYXRhYmxlKCdObycpLAogICAgICAgICAgICAgICAgMSA9PiBUcmFuc2xhdGFibGUoJ1llcycpLAogICAgICAgICAgICB9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdEZWxldGVXb3JrT3JkZXInLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbXtEZWxldGVXb3JrT3JkZXJ9IC8vIDEsCiAgICAgICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IGRlbGV0ZSBXb3JrT3JkZXIgZHJvcGRvd24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRGVsZXRlV29ya09yZGVyJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBEZWxldGVXb3JrT3JkZXJTZWxlY3Rpb25TdHJpbmcgPT4gJERlbGV0ZVdvcmtPcmRlclNlbGVjdGlvblN0cmluZywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICV7JENoYW5nZX0sCiAgICAgICAgICAgICV7JFdvcmtPcmRlcn0sCiAgICAgICAgICAgIFZhbGlkU2VsZWN0aW9uU3RyaW5nICAgICAgPT4gJFZhbGlkU2VsZWN0aW9uU3RyaW5nLAogICAgICAgICAgICBTdGF0ZVJlc2V0U2VsZWN0aW9uU3RyaW5nID0+ICRTdGF0ZVJlc2V0U2VsZWN0aW9uU3RyaW5nLAogICAgICAgICAgICAlRXJyb3IsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9vdGVyCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlciggVHlwZSA9PiAnU21hbGwnICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01Xb3JrT3JkZXJab29tOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0CiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGdldCBuZWVkZWQgV29ya09yZGVySUQKICAgIG15ICRXb3JrT3JkZXJJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdXb3JrT3JkZXJJRCcgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFdvcmtPcmRlcklEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIFdvcmtPcmRlcklEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFdvcmtPcmRlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkQ29uZmlnT2JqZWN0LT5HZXQoIklUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJFdvcmtPcmRlck9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ30tPntQZXJtaXNzaW9ufSwKICAgICAgICBBY3Rpb24gICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBlcnJvciBzY3JlZW4KICAgIGlmICggISRBY2Nlc3MgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk5vUGVybWlzc2lvbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnWW91IG5lZWQgJXMgcGVybWlzc2lvbnMhJywgJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0gKSwKICAgICAgICAgICAgV2l0aEhlYWRlciA9PiAneWVzJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHdvcmtvcmRlciBkYXRhCiAgICBteSAkV29ya09yZGVyID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyR2V0KAogICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISRXb3JrT3JkZXIgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdXb3JrT3JkZXIgIiVzIiBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywgJFdvcmtPcmRlcklEICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgY2xlYW4gdGhlIHJpY2ggdGV4dCBmaWVsZHMgZnJvbSBhY3RpdmUgSFRNTCBjb250ZW50CiAgICBBVFRSSUJVVEU6CiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoSW5zdHJ1Y3Rpb24gUmVwb3J0KSkgewoKICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAhJFdvcmtPcmRlci0+eyRBdHRyaWJ1dGV9OwoKICAgICAgICAjIHJlbW92ZSBhY3RpdmUgaHRtbCBjb250ZW50IChzY3JpcHRzLCBhcHBsZXRzLCBldGMuLi4pCiAgICAgICAgbXkgJVNhZmVDb250ZW50ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5TYWZldHkoCiAgICAgICAgICAgIFN0cmluZyAgICAgICA9PiAkV29ya09yZGVyLT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgIE5vQXBwbGV0ICAgICA9PiAxLAogICAgICAgICAgICBOb09iamVjdCAgICAgPT4gMSwKICAgICAgICAgICAgTm9FbWJlZCAgICAgID0+IDEsCiAgICAgICAgICAgIE5vSW50U3JjTG9hZCA9PiAwLAogICAgICAgICAgICBOb0V4dFNyY0xvYWQgPT4gMCwKICAgICAgICAgICAgTm9KYXZhU2NyaXB0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyB0YWtlIHRoZSBzYWZlIGNvbnRlbnQgaWYgbmVjY2Vzc2FyeQogICAgICAgIGlmICggJFNhZmVDb250ZW50e1JlcGxhY2V9ICkgewogICAgICAgICAgICAkV29ya09yZGVyLT57JEF0dHJpYnV0ZX0gPSAkU2FmZUNvbnRlbnR7U3RyaW5nfTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGhhbmRsZSBIVE1MVmlldwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0hUTUxWaWV3JyApIHsKCiAgICAgICAgIyBnZXQgcGFyYW0KICAgICAgICBteSAkRmllbGQgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiRmllbGQiICk7CgogICAgICAgICMgbmVlZGVkIHBhcmFtCiAgICAgICAgaWYgKCAhJEZpZWxkICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZGVkIFBhcmFtOiAkRmllbGQhIiwKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZXJyb3IgY2hlY2tpbmcKICAgICAgICBpZiAoICRGaWVsZCBuZSAnSW5zdHJ1Y3Rpb24nICYmICRGaWVsZCBuZSAnUmVwb3J0JyApIHsKICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlVua25vd24gZmllbGQ6ICRGaWVsZCEgRmllbGQgbXVzdCBiZSBlaXRoZXIgSW5zdHJ1Y3Rpb24gb3IgUmVwb3J0ISIsCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgRmllbGQgY29udGVudAogICAgICAgIG15ICRGaWVsZENvbnRlbnQgPSAkV29ya09yZGVyLT57JEZpZWxkfTsKCiAgICAgICAgIyBidWlsZCBiYXNlIFVSTCBmb3IgaW4tbGluZSBpbWFnZXMgaWYgbm8gc2Vzc2lvbiBjb29raWVzIGFyZSB1c2VkCiAgICAgICAgbXkgJFNlc3Npb25JRCA9ICcnOwogICAgICAgIGlmICggJFNlbGYtPntTZXNzaW9uSUR9ICYmICEkU2VsZi0+e1Nlc3Npb25JRENvb2tpZX0gKSB7CiAgICAgICAgICAgICRTZXNzaW9uSUQgPSAnOycgLiAkU2VsZi0+e1Nlc3Npb25OYW1lfSAuICc9JyAuICRTZWxmLT57U2Vzc2lvbklEfTsKICAgICAgICAgICAgJEZpZWxkQ29udGVudCA9fiBzewogICAgICAgICAgICAgICAgKEFjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJab29tO1N1YmFjdGlvbj1Eb3dubG9hZEF0dGFjaG1lbnQ7RmlsZW5hbWU9Lis7V29ya09yZGVySUQ9XGQrKQogICAgICAgICAgICB9eyQxJFNlc3Npb25JRH1nbXN4OwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgSFRNTCB1dGlscyBvYmplY3QKICAgICAgICBteSAkSFRNTFV0aWxzT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpOwoKICAgICAgICAjIGRldGVjdCBhbGwgcGxhaW4gdGV4dCBsaW5rcyBhbmQgcHV0IHRoZW0gaW50byBhbiBIVE1MIDxhPiB0YWcKICAgICAgICAkRmllbGRDb250ZW50ID0gJEhUTUxVdGlsc09iamVjdC0+TGlua1F1b3RlKAogICAgICAgICAgICBTdHJpbmcgPT4gJEZpZWxkQ29udGVudCwKICAgICAgICApOwoKICAgICAgICAjIHNldCB0YXJnZXQ9Il9ibGFuayIgYXR0cmlidXRlIHRvIGFsbCBIVE1MIDxhPiB0YWdzCiAgICAgICAgIyB0aGUgTGlua1F1b3RlIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCBhZ2FpbgogICAgICAgICRGaWVsZENvbnRlbnQgPSAkSFRNTFV0aWxzT2JqZWN0LT5MaW5rUXVvdGUoCiAgICAgICAgICAgIFN0cmluZyAgICA9PiAkRmllbGRDb250ZW50LAogICAgICAgICAgICBUYXJnZXRBZGQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBuZWVkZWQgSFRNTCBoZWFkZXJzCiAgICAgICAgJEZpZWxkQ29udGVudCA9ICRIVE1MVXRpbHNPYmplY3QtPkRvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgIFN0cmluZyAgPT4gJEZpZWxkQ29udGVudCwKICAgICAgICAgICAgQ2hhcnNldCA9PiAndXRmLTgnLAogICAgICAgICk7CgogICAgICAgICMgcmV0dXJuIGNvbXBsZXRlIEhUTUwgYXMgYW4gYXR0YWNobWVudAogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRGaWVsZENvbnRlbnQsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGhhbmRsZSBEb3dubG9hZEF0dGFjaG1lbnQKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdEb3dubG9hZEF0dGFjaG1lbnQnICkgewoKICAgICAgICAjIGdldCBkYXRhIGZvciBhdHRhY2htZW50CiAgICAgICAgbXkgJEZpbGVuYW1lID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbGVuYW1lJyApOwogICAgICAgIG15ICRUeXBlICAgICA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdUeXBlJyApOwogICAgICAgIG15ICRBdHRhY2htZW50RGF0YSA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgIFdvcmtPcmRlcklEICAgID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgRmlsZW5hbWUgICAgICAgPT4gJEZpbGVuYW1lLAogICAgICAgICAgICBBdHRhY2htZW50VHlwZSA9PiAkVHlwZSwKICAgICAgICApOwoKICAgICAgICAjIHJldHVybiBlcnJvciBpZiBmaWxlIGRvZXMgbm90IGV4aXN0CiAgICAgICAgaWYgKCAhJEF0dGFjaG1lbnREYXRhICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gc3VjaCBhdHRhY2htZW50ICgkRmlsZW5hbWUpISBNYXkgYmUgYW4gYXR0YWNrISEhIiwKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICV7JEF0dGFjaG1lbnREYXRhfSwKICAgICAgICAgICAgVHlwZSA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIExheW91dE9iamVjdCBoYXMgVHJhbnNsYXRpb25PYmplY3QKICAgIGlmICggJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fSApIHsKCiAgICAgICAgIyB0cmFuc2xhdGUgcGFyYW1ldGVyCiAgICAgICAgUEFSQU06CiAgICAgICAgZm9yIG15ICRQYXJhbSAocXcoV29ya09yZGVyVHlwZSkpIHsKCiAgICAgICAgICAgICMgY2hlY2sgZm9yIHBhcmFtZXRlcgogICAgICAgICAgICBuZXh0IFBBUkFNIGlmICEkV29ya09yZGVyLT57JFBhcmFtfTsKCiAgICAgICAgICAgICMgdHJhbnNsYXRlCiAgICAgICAgICAgICRXb3JrT3JkZXItPnskUGFyYW19ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJFdvcmtPcmRlci0+eyRQYXJhbX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHNlc3Npb24gb2JqZWN0CiAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICMgU3RvcmUgTGFzdFdvcmtPcmRlclZpZXcsIGZvciBiYWNrbGlua3MgZnJvbSB3b3Jrb3JkZXIgc3BlY2lmaWMgcGFnZXMKICAgICRTZXNzaW9uT2JqZWN0LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RXb3JrT3JkZXJWaWV3JywKICAgICAgICBWYWx1ZSAgICAgPT4gJFNlbGYtPntSZXF1ZXN0ZWRVUkx9LAogICAgKTsKCiAgICAjIFN0b3JlIExhc3RTY3JlZW5PdmVydmlldywgZm9yIGJhY2tsaW5rcyBmcm9tIEFnZW50TGlua09iamVjdAogICAgJFNlc3Npb25PYmplY3QtPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlbk92ZXJWaWV3JywKICAgICAgICBWYWx1ZSAgICAgPT4gJFNlbGYtPntSZXF1ZXN0ZWRVUkx9LAogICAgKTsKCiAgICAjIFN0b3JlIExhc3RTY3JlZW5PdmVydmlldywgZm9yIGJhY2tsaW5rcyBmcm9tICdBZ2VudExpbmtPYmplY3QnCiAgICAkU2Vzc2lvbk9iamVjdC0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuVmlldycsCiAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57UmVxdWVzdGVkVVJMfSwKICAgICk7CgogICAgIyBnZXQgdGhlIGNoYW5nZSB0aGF0IHdvcmtvcmRlciBiZWxvbmdzIHRvCiAgICBteSAkQ2hhbmdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRXb3JrT3JkZXItPntDaGFuZ2VJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIHJ1biB3b3Jrb3JkZXIgbWVudSBtb2R1bGVzCiAgICBpZiAoIHJlZiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjpNZW51TW9kdWxlJykgZXEgJ0hBU0gnICkgewoKICAgICAgICAjIGdldCBpdGVtcyBmb3IgbWVudQogICAgICAgIG15ICVNZW51cyAgID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNV29ya09yZGVyOjpGcm9udGVuZDo6TWVudU1vZHVsZScpIH07CiAgICAgICAgbXkgJENvdW50ZXIgPSAwOwoKICAgICAgICBmb3IgbXkgJE1lbnUgKCBzb3J0IGtleXMgJU1lbnVzICkgewoKICAgICAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgICAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoICRNZW51c3skTWVudX0tPntNb2R1bGV9ICkgKSB7CiAgICAgICAgICAgICAgICBteSAkT2JqZWN0ID0gJE1lbnVzeyRNZW51fS0+e01vZHVsZX0tPm5ldygKICAgICAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVyLT57V29ya09yZGVySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNldCBjbGFzc2VzCiAgICAgICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9ICkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9IGVxICdQb3BVcCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntNZW51Q2xhc3N9ID0gJ0FzUG9wdXAnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9IGVxICdCYWNrJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51fS0+e01lbnVDbGFzc30gPSAnSGlzdG9yeUJhY2snOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHJ1biBtb2R1bGUKICAgICAgICAgICAgICAgICRDb3VudGVyID0gJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXIgPT4gJFdvcmtPcmRlciwKICAgICAgICAgICAgICAgICAgICBDb3VudGVyICAgPT4gJENvdW50ZXIsCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnICAgID0+ICRNZW51c3skTWVudX0sCiAgICAgICAgICAgICAgICAgICAgTWVudUlEICAgID0+ICRNZW51LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgIFRpdGxlID0+ICRXb3JrT3JkZXItPntXb3JrT3JkZXJUaXRsZX0sCiAgICApOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBnZXQgdXNlciBvYmplY3QKICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICAjIGdldCBjcmVhdGUgdXNlciBkYXRhCiAgICBteSAlQ3JlYXRlVXNlciA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICBVc2VySUQgPT4gJFdvcmtPcmRlci0+e0NyZWF0ZUJ5fSwKICAgICAgICBDYWNoZWQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgQ3JlYXRlQnkgdXNlciBpbmZvcm1hdGlvbgogICAgZm9yIG15ICRQb3N0Zml4IChxdyhVc2VyTG9naW4gVXNlckZpcnN0bmFtZSBVc2VyTGFzdG5hbWUpKSB7CiAgICAgICAgJFdvcmtPcmRlci0+eyAnQ3JlYXRlJyAuICRQb3N0Zml4IH0gPSAkQ3JlYXRlVXNlcnskUG9zdGZpeH07CiAgICB9CgogICAgIyBnZXQgY2hhbmdlIHVzZXIgZGF0YQogICAgbXkgJUNoYW5nZVVzZXIgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgVXNlcklEID0+ICRXb3JrT3JkZXItPntDaGFuZ2VCeX0sCiAgICAgICAgQ2FjaGVkID0+IDEsCiAgICApOwoKICAgICMgZ2V0IENoYW5nZUJ5IHVzZXIgaW5mb3JtYXRpb24KICAgIGZvciBteSAkUG9zdGZpeCAocXcoVXNlckxvZ2luIFVzZXJGaXJzdG5hbWUgVXNlckxhc3RuYW1lKSkgewogICAgICAgICRXb3JrT3JkZXItPnsgJ0NoYW5nZScgLiAkUG9zdGZpeCB9ID0gJENoYW5nZVVzZXJ7JFBvc3RmaXh9OwogICAgfQoKICAgICMgb3V0cHV0IG1ldGEgYmxvY2sKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01ldGEnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAleyRXb3JrT3JkZXJ9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2hvdyB2YWx1ZXMgb3IgZGFzaCAoJy0nKQogICAgZm9yIG15ICRCbG9ja05hbWUgKAogICAgICAgIHF3KFdvcmtPcmRlclR5cGUgUGxhbm5lZFN0YXJ0VGltZSBQbGFubmVkRW5kVGltZSBBY3R1YWxTdGFydFRpbWUgQWN0dWFsRW5kVGltZSkKICAgICAgICApCiAgICB7CiAgICAgICAgaWYgKCAkV29ya09yZGVyLT57JEJsb2NrTmFtZX0gKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAkQmxvY2tOYW1lLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJEJsb2NrTmFtZSA9PiAkV29ya09yZGVyLT57JEJsb2NrTmFtZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdFbXB0eScgLiAkQmxvY2tOYW1lLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgY29uZmlndXJhYmxlIGJsb2NrcwogICAgQkxPQ0tOQU1FOgogICAgZm9yIG15ICRCbG9ja05hbWUgKHF3KFBsYW5uZWRFZmZvcnQgQWNjb3VudGVkVGltZSkpIHsKCiAgICAgICAgIyBza2lwIGlmIGJsb2NrIGlzIHN3aXRjaGVkIG9mZiBpbiBTeXNDb25maWcKICAgICAgICBuZXh0IEJMT0NLTkFNRSBpZiAhJFNlbGYtPntDb25maWd9LT57JEJsb2NrTmFtZX07CgogICAgICAgICMgc2hvdyBibG9jawogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTaG93JyAuICRCbG9ja05hbWUsCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IHZhbHVlIG9yIGRhc2gKICAgICAgICBpZiAoICRXb3JrT3JkZXItPnskQmxvY2tOYW1lfSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICRCbG9ja05hbWUsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAkQmxvY2tOYW1lID0+ICRXb3JrT3JkZXItPnskQmxvY2tOYW1lfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0VtcHR5JyAuICRCbG9ja05hbWUsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgIG15ICREeW5hbWljRmllbGQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJFNlbGYtPntDb25maWd9LT57RHluYW1pY0ZpZWxkfSB8fCB7fSwKICAgICk7CgogICAgIyBnZXQgZHluYW1pYyBmaWVsZCBiYWNrZW5kIG9iamVjdAogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgbXkgJFZhbHVlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlR2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICApOwoKICAgICAgICAjIGdldCBwcmludCBzdHJpbmcgZm9yIHRoaXMgZHluYW1pYyBmaWVsZAogICAgICAgIG15ICRWYWx1ZVN0cmcgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RGlzcGxheVZhbHVlUmVuZGVyKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRWYWx1ZSwKICAgICAgICAgICAgVmFsdWVNYXhDaGFycyAgICAgID0+IDEwMCwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgKTsKCiAgICAgICAgIyBmb3IgZW1wdHkgdmFsdWVzCiAgICAgICAgaWYgKCAhJFZhbHVlU3RyZy0+e1ZhbHVlfSApIHsKICAgICAgICAgICAgJFZhbHVlU3RyZy0+e1ZhbHVlfSA9ICctJzsKICAgICAgICB9CgogICAgICAgIG15ICRMYWJlbCA9ICREeW5hbWljRmllbGRDb25maWctPntMYWJlbH07CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdEeW5hbWljRmllbGQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIExhYmVsID0+ICRMYWJlbCwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBpZiAoICRWYWx1ZVN0cmctPntMaW5rfSApIHsKCiAgICAgICAgICAgICMgb3V0cHV0IGxpbmsgZWxlbWVudAogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0R5bmFtaWNGaWVsZExpbmsnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJXskV29ya09yZGVyfSwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICAgICAgICAgICAgICAgPT4gJFZhbHVlU3RyZy0+e0xpbmt9LAogICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSA9PiAkVmFsdWVTdHJnLT57VGl0bGV9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgb3V0cHV0IG5vbiBsaW5rIGVsZW1lbnQKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdEeW5hbWljRmllbGRQbGFpbicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBleGFtcGxlIG9mIGR5bmFtaWMgZmllbGRzIG9yZGVyIGN1c3RvbWl6YXRpb24KICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBMYWJlbCA9PiAkTGFiZWwsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgVGl0bGUgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNoYW5nZSBidWlsZGVyIHVzZXIKICAgIG15ICVDaGFuZ2VCdWlsZGVyVXNlcjsKICAgIGlmICggJENoYW5nZS0+e0NoYW5nZUJ1aWxkZXJJRH0gKSB7CiAgICAgICAgJUNoYW5nZUJ1aWxkZXJVc2VyID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgPT4gJENoYW5nZS0+e0NoYW5nZUJ1aWxkZXJJRH0sCiAgICAgICAgICAgIENhY2hlZCA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY2hhbmdlIGJ1aWxkZXIgaW5mb3JtYXRpb24KICAgIGZvciBteSAkUG9zdGZpeCAocXcoVXNlckxvZ2luIFVzZXJGaXJzdG5hbWUgVXNlckxhc3RuYW1lKSkgewogICAgICAgICRXb3JrT3JkZXItPnsgJ0NoYW5nZUJ1aWxkZXInIC4gJFBvc3RmaXggfSA9ICRDaGFuZ2VCdWlsZGVyVXNlcnskUG9zdGZpeH0gfHwgJyc7CiAgICB9CgogICAgIyBvdXRwdXQgY2hhbmdlIGJ1aWxkZXIgYmxvY2sKICAgIGlmICglQ2hhbmdlQnVpbGRlclVzZXIpIHsKCiAgICAgICAgIyBzaG93IG5hbWUgYW5kIG1haWwgYWRkcmVzcyBpZiB1c2VyIGV4aXN0cwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDaGFuZ2VCdWlsZGVyJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAleyRXb3JrT3JkZXJ9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBzaG93IGRhc2ggaWYgbm8gY2hhbmdlIGJ1aWxkZXIgZXhpc3RzCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0VtcHR5Q2hhbmdlQnVpbGRlcicsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB3b3Jrb3JkZXIgYWdlbnQgdXNlcgogICAgaWYgKCAkV29ya09yZGVyLT57V29ya09yZGVyQWdlbnRJRH0gKSB7CiAgICAgICAgbXkgJVdvcmtPcmRlckFnZW50VXNlciA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEID0+ICRXb3JrT3JkZXItPntXb3JrT3JkZXJBZ2VudElEfSwKICAgICAgICAgICAgQ2FjaGVkID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCVXb3JrT3JkZXJBZ2VudFVzZXIpIHsKCiAgICAgICAgICAgICMgZ2V0IFdvcmtPcmRlckFnZW50IGluZm9ybWF0aW9uCiAgICAgICAgICAgIGZvciBteSAkUG9zdGZpeCAocXcoVXNlckxvZ2luIFVzZXJGaXJzdG5hbWUgVXNlckxhc3RuYW1lKSkgewogICAgICAgICAgICAgICAgJFdvcmtPcmRlci0+eyAnV29ya09yZGVyQWdlbnQnIC4gJFBvc3RmaXggfSA9ICRXb3JrT3JkZXJBZ2VudFVzZXJ7JFBvc3RmaXh9IHx8ICcnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG91dHB1dCBXb3JrT3JkZXJBZ2VudCBpbmZvcm1hdGlvbgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1dvcmtPcmRlckFnZW50JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICV7JFdvcmtPcmRlcn0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG91dHB1dCBpZiBubyBXb3JrT3JkZXJBZ2VudCBpcyBmb3VuZAogICAgaWYgKCAhJFdvcmtPcmRlci0+e1dvcmtPcmRlckFnZW50VXNlckxvZ2lufSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnRW1wdHlXb3JrT3JkZXJBZ2VudCcsCiAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBhZ2VudHMgcHJlZmVyZW5jZXMKICAgIG15ICVVc2VyUHJlZmVyZW5jZXMgPSAkVXNlck9iamVjdC0+R2V0UHJlZmVyZW5jZXMoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyByZW1lbWJlciBpZiB1c2VyIGFscmVhZHkgY2xvc2VkIG1lc3NhZ2UgYWJvdXQgbGlua3MgaW4gaWZyYW1lcwogICAgaWYgKCAhZGVmaW5lZCAkU2VsZi0+e0RvTm90U2hvd0Jyb3dzZXJMaW5rTWVzc2FnZX0gKSB7CiAgICAgICAgaWYgKCAkVXNlclByZWZlcmVuY2Vze1VzZXJBZ2VudERvTm90U2hvd0Jyb3dzZXJMaW5rTWVzc2FnZX0gKSB7CiAgICAgICAgICAgICRTZWxmLT57RG9Ob3RTaG93QnJvd3NlckxpbmtNZXNzYWdlfSA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+e0RvTm90U2hvd0Jyb3dzZXJMaW5rTWVzc2FnZX0gPSAwOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgbWVzc2FnZSBhYm91dCBsaW5rcyBpbiBpZnJhbWVzLCBpZiB1c2VyIGRpZG4ndCBjbG9zZSBpdCBhbHJlYWR5CiAgICBpZiAoICEkU2VsZi0+e0RvTm90U2hvd0Jyb3dzZXJMaW5rTWVzc2FnZX0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0Jyb3dzZXJMaW5rTWVzc2FnZScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzZWN1cml0eSByZXN0cmljdGlvbiBzZXR0aW5nIGZvciBpZnJhbWVzCiAgICAjIHNlY3VyaXR5PSJyZXN0cmljdGVkIiBtYXkgYnJlYWsgU1NPIC0gZGlzYWJsZSB0aGlzIGZlYXR1cmUgaWYgcmVxdWVzdGVkCiAgICBteSAkTVNTZWN1cml0eVJlc3RyaWN0ZWQ7CiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnRGlzYWJsZU1TSUZyYW1lU2VjdXJpdHlSZXN0cmljdGVkJykgKSB7CiAgICAgICAgJFBhcmFte01TU2VjdXJpdHlSZXN0cmljdGVkfSA9ICcnOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFBhcmFte01TU2VjdXJpdHlSZXN0cmljdGVkfSA9ICdzZWN1cml0eT0icmVzdHJpY3RlZCInOwogICAgfQoKICAgICMgc2hvdyB0aGUgSFRNTCBmaWVsZCBibG9ja3MgYXMgaWZyYW1lcwogICAgZm9yIG15ICRGaWVsZCAocXcoSW5zdHJ1Y3Rpb24gUmVwb3J0KSkgewoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSVRTTUNvbnRlbnQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEICAgICAgICAgID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgICAgIEZpZWxkICAgICAgICAgICAgICAgID0+ICRGaWVsZCwKICAgICAgICAgICAgICAgIE1TU2VjdXJpdHlSZXN0cmljdGVkID0+ICRNU1NlY3VyaXR5UmVzdHJpY3RlZCwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGxpbmtlZCBvYmplY3RzCiAgICBteSAkTGlua0xpc3RXaXRoRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JyktPkxpbmtMaXN0V2l0aERhdGEoCiAgICAgICAgT2JqZWN0ID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICBLZXkgICAgPT4gJFdvcmtPcmRlcklELAogICAgICAgIFN0YXRlICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IGxpbmsgdGFibGUgdmlldyBtb2RlCiAgICBteSAkTGlua1RhYmxlVmlld01vZGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0xpbmtPYmplY3Q6OlZpZXdNb2RlJyk7CgogICAgIyBjcmVhdGUgdGhlIGxpbmsgdGFibGUKICAgIG15ICRMaW5rVGFibGVTdHJnID0gJExheW91dE9iamVjdC0+TGlua09iamVjdFRhYmxlQ3JlYXRlKAogICAgICAgIExpbmtMaXN0V2l0aERhdGEgPT4gJExpbmtMaXN0V2l0aERhdGEsCiAgICAgICAgVmlld01vZGUgICAgICAgICA9PiAkTGlua1RhYmxlVmlld01vZGUsCiAgICAgICAgT2JqZWN0ICAgICAgICAgICA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgS2V5ICAgICAgICAgICAgICA9PiAkV29ya09yZGVySUQsCiAgICApOwoKICAgICMgb3V0cHV0IHRoZSBsaW5rIHRhYmxlCiAgICBpZiAoJExpbmtUYWJsZVN0cmcpIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTGlua1RhYmxlJyAuICRMaW5rVGFibGVWaWV3TW9kZSwKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBMaW5rVGFibGVTdHJnID0+ICRMaW5rVGFibGVTdHJnLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgYXR0YWNobWVudHMKICAgIG15IEBBdHRhY2htZW50cyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckF0dGFjaG1lbnRMaXN0KAogICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICk7CgogICAgIyBzaG93IGF0dGFjaG1lbnRzCiAgICBBVFRBQ0hNRU5UOgogICAgZm9yIG15ICRGaWxlbmFtZSAoQEF0dGFjaG1lbnRzKSB7CgogICAgICAgICMgZ2V0IGluZm8gYWJvdXQgZmlsZQogICAgICAgIG15ICRBdHRhY2htZW50RGF0YSA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckF0dGFjaG1lbnRHZXQoCiAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgRmlsZW5hbWUgICAgPT4gJEZpbGVuYW1lLAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgZm9yIGF0dGFjaG1lbnQgaW5mb3JtYXRpb24KICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRBdHRhY2htZW50RGF0YTsKCiAgICAgICAgIyBkbyBub3Qgc2hvdyBpbmxpbmUgYXR0YWNobWVudHMgaW4gYXR0YWNobWVudHMgbGlzdCAodGhleSBoYXZlIGEgY29udGVudCBpZCkKICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgJEF0dGFjaG1lbnREYXRhLT57UHJlZmVyZW5jZXN9LT57Q29udGVudElEfTsKCiAgICAgICAgIyBzaG93IGJsb2NrCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0F0dGFjaG1lbnRSb3cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICV7JFdvcmtPcmRlcn0sCiAgICAgICAgICAgICAgICAleyRBdHRhY2htZW50RGF0YX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCByZXBvcnQgYXR0YWNobWVudHMKICAgIG15IEBSZXBvcnRBdHRhY2htZW50cyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclJlcG9ydEF0dGFjaG1lbnRMaXN0KAogICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICk7CgogICAgIyBzaG93IHJlcG9ydCBhdHRhY2htZW50cwogICAgQVRUQUNITUVOVDoKICAgIGZvciBteSAkRmlsZW5hbWUgKEBSZXBvcnRBdHRhY2htZW50cykgewoKICAgICAgICAjIGdldCBpbmZvIGFib3V0IGZpbGUKICAgICAgICBteSAkQXR0YWNobWVudERhdGEgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBdHRhY2htZW50R2V0KAogICAgICAgICAgICBXb3JrT3JkZXJJRCAgICA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgIEZpbGVuYW1lICAgICAgID0+ICRGaWxlbmFtZSwKICAgICAgICAgICAgQXR0YWNobWVudFR5cGUgPT4gJ1dvcmtPcmRlclJlcG9ydCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBmb3IgYXR0YWNobWVudCBpbmZvcm1hdGlvbgogICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAhJEF0dGFjaG1lbnREYXRhOwoKICAgICAgICAjIGRvIG5vdCBzaG93IGlubGluZSBhdHRhY2htZW50cyBpbiBhdHRhY2htZW50cyBsaXN0ICh0aGV5IGhhdmUgYSBjb250ZW50IGlkKQogICAgICAgIG5leHQgQVRUQUNITUVOVCBpZiAkQXR0YWNobWVudERhdGEtPntQcmVmZXJlbmNlc30tPntDb250ZW50SUR9OwoKICAgICAgICAjIHNob3cgYmxvY2sKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUmVwb3J0QXR0YWNobWVudFJvdycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJXskV29ya09yZGVyfSwKICAgICAgICAgICAgICAgICV7JEF0dGFjaG1lbnREYXRhfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVdvcmtPcmRlclpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICV7JENoYW5nZX0sCiAgICAgICAgICAgICV7JFdvcmtPcmRlcn0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9vdGVyCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpDdXN0b21lcklUU01DaGFuZ2VTY2hlZHVsZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBzdG9yZSBsYXN0IHNjcmVlbgogICAgaWYgKAogICAgICAgICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6QXV0aFNlc3Npb24nKS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RDaGFuZ2VWaWV3JywKICAgICAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57UmVxdWVzdGVkVVJMfSwKICAgICAgICApCiAgICAgICAgKQogICAgewogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckhlYWRlcigKICAgICAgICAgICAgVGl0bGUgPT4gVHJhbnNsYXRhYmxlKCdFcnJvcicpLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckVycm9yKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIEN1c3RvbWVySUQKICAgIGlmICggISRTZWxmLT57VXNlckN1c3RvbWVySUR9ICkgewogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckhlYWRlcigKICAgICAgICAgICAgVGl0bGUgPT4gVHJhbnNsYXRhYmxlKCdFcnJvcicpLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTmVlZCBDdXN0b21lcklEIScpLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5DdXN0b21lckZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgbXkgJFBhcmFtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgZ2V0IHNvcnRpbmcgcGFyYW1ldGVycwogICAgbXkgJFNvcnRCeSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTb3J0QnknICkKICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ30tPnsnU29ydEJ5OjpEZWZhdWx0J30KICAgICAgICB8fCAnUGxhbm5lZFN0YXJ0VGltZSc7CgogICAgIyBnZXQgb3JkZXJpbmcgcGFyYW1ldGVycwogICAgbXkgJE9yZGVyQnkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXJCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydPcmRlcjo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ1VwJzsKCiAgICBteSBAU29ydEJ5QXJyYXkgID0gKCRTb3J0QnkpOwogICAgbXkgQE9yZGVyQnlBcnJheSA9ICgkT3JkZXJCeSk7CgogICAgIyBpbnZlc3RpZ2F0ZSByZWZyZXNoCiAgICBteSAkUmVmcmVzaCA9ICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA/IDYwICogJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9IDogdW5kZWY7CgogICAgIyBzdGFydGluZyB3aXRoIHBhZ2UgLi4uCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJIZWFkZXIoCiAgICAgICAgUmVmcmVzaCA9PiAkUmVmcmVzaCwKICAgICAgICBUaXRsZSAgID0+ICcnLAogICAgKTsKCiAgICAjIGJ1aWxkIE5hdmlnYXRpb25CYXIKICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Q3VzdG9tZXJOYXZpZ2F0aW9uQmFyKCk7CgogICAgJExheW91dE9iamVjdC0+UHJpbnQoIE91dHB1dCA9PiBcJE91dHB1dCApOwogICAgJE91dHB1dCA9ICcnOwoKICAgICMgZmluZCBvdXQgd2hpY2ggY29sdW1ucyBzaG91bGQgYmUgc2hvd24KICAgIG15IEBTaG93Q29sdW1uczsKICAgIGlmICggJFNlbGYtPntDb25maWd9LT57U2hvd0NvbHVtbnN9ICkgewoKICAgICAgICAjIGdldCBhbGwgcG9zc2libGUgY29sdW1ucyBmcm9tIGNvbmZpZwogICAgICAgIG15ICVQb3NzaWJsZUNvbHVtbiA9ICV7ICRTZWxmLT57Q29uZmlnfS0+e1Nob3dDb2x1bW5zfSB9OwoKICAgICAgICAjIGdldCB0aGUgY29sdW1uIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHNob3duCiAgICAgICAgQ09MVU1OTkFNRToKICAgICAgICBmb3IgbXkgJE5hbWUgKCBzb3J0IGtleXMgJVBvc3NpYmxlQ29sdW1uICkgewogICAgICAgICAgICBuZXh0IENPTFVNTk5BTUUgaWYgISRQb3NzaWJsZUNvbHVtbnskTmFtZX07CiAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zLCAkTmFtZTsKICAgICAgICB9CiAgICB9CgogICAgIyB0byBzdG9yZSB0aGUgZmlsdGVycwogICAgbXkgJUZpbHRlcnM7CgogICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgIyBzZXQgb3RoZXIgZmlsdGVycyBiYXNlZCBvbiBjaGFuZ2Ugc3RhdGUKICAgIGlmICggJFNlbGYtPntDb25maWd9LT57J0ZpbHRlcjo6Q2hhbmdlU3RhdGVzJ30gKSB7CgogICAgICAgICMgZGVmaW5lIHBvc2l0aW9uIG9mIHRoZSBmaWx0ZXIgaW4gdGhlIGZyb250ZW5kCiAgICAgICAgbXkgJFByaW9Db3VudGVyID0gMTAwMDsKCiAgICAgICAgIyBnZXQgYWxsIGNoYW5nZSBzdGF0ZXMgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyBmaWx0ZXJzCiAgICAgICAgQ0hBTkdFU1RBVEU6CiAgICAgICAgZm9yIG15ICRDaGFuZ2VTdGF0ZSAoIEB7ICRTZWxmLT57Q29uZmlnfS0+eydGaWx0ZXI6OkNoYW5nZVN0YXRlcyd9IH0gKSB7CgogICAgICAgICAgICAjIGRvIG5vdCB1c2UgZW1wdHkgY2hhbmdlIHN0YXRlcwogICAgICAgICAgICBuZXh0IENIQU5HRVNUQVRFIGlmICEkQ2hhbmdlU3RhdGU7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHN0YXRlIGlzIHZhbGlkIGJ5IGxvb2tpbmcgdXAgdGhlIHN0YXRlIGlkCiAgICAgICAgICAgIG15ICRDaGFuZ2VTdGF0ZUlEID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU3RhdGVMb29rdXAoCiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZSA9PiAkQ2hhbmdlU3RhdGUsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRvIG5vdCB1c2UgaW52YWxpZCBjaGFuZ2Ugc3RhdGVzCiAgICAgICAgICAgIG5leHQgQ0hBTkdFU1RBVEUgaWYgISRDaGFuZ2VTdGF0ZUlEOwoKICAgICAgICAgICAgIyBpbmNyZWFzZSB0aGUgUHJpb0NvdW50ZXIKICAgICAgICAgICAgJFByaW9Db3VudGVyKys7CgogICAgICAgICAgICAjIGFkZCBmaWx0ZXIgZm9yIHRoZSBjdXJyZW50IGNoYW5nZSBzdGF0ZQogICAgICAgICAgICAkRmlsdGVyc3skQ2hhbmdlU3RhdGV9ID0gewogICAgICAgICAgICAgICAgTmFtZSAgID0+ICRDaGFuZ2VTdGF0ZSwKICAgICAgICAgICAgICAgIFByaW8gICA9PiAkUHJpb0NvdW50ZXIsCiAgICAgICAgICAgICAgICBTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlcyAgICAgPT4gWyRDaGFuZ2VTdGF0ZV0sCiAgICAgICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBcQFNvcnRCeUFycmF5LAogICAgICAgICAgICAgICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gXEBPcmRlckJ5QXJyYXksCiAgICAgICAgICAgICAgICAgICAgTGltaXQgICAgICAgICAgICA9PiAxMDAwLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGZpbHRlciBhbmQgdmlldyBwYXJhbXMKICAgICRTZWxmLT57RmlsdGVyfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdGaWx0ZXInICkgfHwgJ0FsbCc7CiAgICAkU2VsZi0+e1ZpZXd9ICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVmlldycgKSAgIHx8ICcnOwogICAgJFNlbGYtPntTdGFydEhpdH0gPSBpbnQoICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdGFydEhpdCcgKSB8fCAxICk7CiAgICAkU2VsZi0+e1BhZ2VTaG93bn0gPSAkU2VsZi0+e1VzZXJTaG93VGlja2V0c30gfHwgMTsKCiAgICAjIGlmIG9ubHkgb25lIGZpbHRlciBleGlzdHMKICAgIGlmICggc2NhbGFyIGtleXMgJUZpbHRlcnMgPT0gMSApIHsKCiAgICAgICAgIyBnZXQgdGhlIG5hbWUgb2YgdGhlIG9ubHkgZmlsdGVyCiAgICAgICAgbXkgKCRGaWx0ZXJOYW1lKSA9IGtleXMgJUZpbHRlcnM7CgogICAgICAgICMgYWN0aXZhdGUgdGhpcyBmaWx0ZXIKICAgICAgICAkU2VsZi0+e0ZpbHRlcn0gPSAkRmlsdGVyTmFtZTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGFkZCBkZWZhdWx0IGZpbHRlcgogICAgICAgICRGaWx0ZXJze0FsbH0gPSB7CiAgICAgICAgICAgIE5hbWUgICA9PiAnQWxsJywKICAgICAgICAgICAgUHJpbyAgID0+IDEwMDAsCiAgICAgICAgICAgIFNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZXMgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+eydGaWx0ZXI6OkNoYW5nZVN0YXRlcyd9LAogICAgICAgICAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBcQFNvcnRCeUFycmF5LAogICAgICAgICAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBcQE9yZGVyQnlBcnJheSwKICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgPT4gMTAwMCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9OwogICAgfQoKICAgICMgY2hlY2sgaWYgZmlsdGVyIGlzIHZhbGlkCiAgICBpZiAoICEkRmlsdGVyc3sgJFNlbGYtPntGaWx0ZXJ9IH0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdJbnZhbGlkIEZpbHRlcjogJXMhJywgJFNlbGYtPntGaWx0ZXJ9ICksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNlYXJjaCBjaGFuZ2VzIHdoaWNoIG1hdGNoIHRoZSBzZWxlY3RlZCBmaWx0ZXIKICAgIG15ICRDaGFuZ2VJRHNSZWYgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VTZWFyY2goCiAgICAgICAgJXsgJEZpbHRlcnN7ICRTZWxmLT57RmlsdGVyfSB9LT57U2VhcmNofSB9LAogICAgKTsKICAgIG15IEBDaGFuZ2VJRHMgPSBAeyRDaGFuZ2VJRHNSZWZ9OwoKICAgIG15ICVDdXN0b21lclVzZXJTZXJ2aWNlczsKICAgIG15ICVDb3VudEJ5Q2hhbmdlU3RhdGU7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRMaW5rT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKTsKICAgIG15ICRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCiAgICAjIGlmIGNvbmZpZ3VyZWQsIGdldCBvbmx5IGNoYW5nZXMgd2hpY2ggaGF2ZSB3b3Jrb3JkZXJzIHRoYXQgYXJlIGxpbmtlZCB3aXRoIGEgc2VydmljZQogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntTaG93T25seUNoYW5nZXNXaXRoQWxsb3dlZFNlcnZpY2VzfSApIHsKCiAgICAgICAgIyBnZXQgYWxsIHNlcnZpY2VzIHRoZSBjdXN0b21lciB1c2VyIGlzIGFsbG93ZWQgdG8gdXNlCiAgICAgICAgJUN1c3RvbWVyVXNlclNlcnZpY2VzID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdIQVNIJywKICAgICAgICAgICAgRGVmYXVsdFNlcnZpY2VzICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSAlVW5pcXVlQ2hhbmdlSURzOwogICAgICAgIENIQU5HRUlEOgogICAgICAgIGZvciBteSAkQ2hhbmdlSUQgKEBDaGFuZ2VJRHMpIHsKCiAgICAgICAgICAgICMgZ2V0IGNoYW5nZSBkYXRhCiAgICAgICAgICAgIG15ICRDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCB3b3Jrb3JkZXIgaWRzCiAgICAgICAgICAgIG15IEBXb3JrT3JkZXJJRHMgPSBAeyAkQ2hhbmdlLT57V29ya09yZGVySURzfSB9OwoKICAgICAgICAgICAgIyBkb24ndCBzaG93IGNoYW5nZXMgd2l0aCBubyB3b3Jrb3JkZXJzIChhcyB0aGV5IGNhbiBub3QgYmUgbGlua2VkIHdpdGggYSBzZXJ2aWNlKQogICAgICAgICAgICBuZXh0IENIQU5HRUlEIGlmICFAV29ya09yZGVySURzOwoKICAgICAgICAgICAgV09SS09SREVSSUQ6CiAgICAgICAgICAgIGZvciBteSAkV29ya09yZGVySUQgKEBXb3JrT3JkZXJJRHMpIHsKCiAgICAgICAgICAgICAgICAjIGdldCB0aGUgbGlzdCBvZiBsaW5rZWQgc2VydmljZXMKICAgICAgICAgICAgICAgIG15ICVMaW5rS2V5TGlzdCA9ICRMaW5rT2JqZWN0LT5MaW5rS2V5TGlzdCgKICAgICAgICAgICAgICAgICAgICBPYmplY3QxID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICBLZXkxICAgID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgICAgICAgICBPYmplY3QyID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgID0+ICdWYWxpZCcsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHdvcmtvcmRlciBoYXMgbm8gbGlua2VkIHNlcnZpY2UKICAgICAgICAgICAgICAgIG5leHQgV09SS09SREVSSUQgaWYgISVMaW5rS2V5TGlzdDsKCiAgICAgICAgICAgICAgICBTRVJWSUNFSUQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAlTGlua0tleUxpc3QgKSB7CgogICAgICAgICAgICAgICAgICAgICMgb25seSB1c2Ugc2VydmljZXMgd2hlcmUgdGhlIGN1c3RvbWVyIGlzIGFsbG93ZWQgdG8gdXNlIHRoZSBzZXJ2aWNlCiAgICAgICAgICAgICAgICAgICAgbmV4dCBTRVJWSUNFSUQgaWYgISRDdXN0b21lclVzZXJTZXJ2aWNlc3skU2VydmljZUlEfTsKCiAgICAgICAgICAgICAgICAgICAgIyBhZGQgY2hhbmdlIGlkIHRvIGxpc3Qgb2YgdmlzaWJsZSBjaGFuZ2VzIGZvciB0aGUgY3VzdG9tZXIKICAgICAgICAgICAgICAgICAgICAkVW5pcXVlQ2hhbmdlSURzeyRDaGFuZ2VJRH0rKzsKCiAgICAgICAgICAgICAgICAgICAgIyBjb3VudCB0aGUgdmlzaWJsZSBjaGFuZ2VzIHBlciBzdGF0ZQogICAgICAgICAgICAgICAgICAgICRDb3VudEJ5Q2hhbmdlU3RhdGV7ICRDaGFuZ2UtPntDaGFuZ2VTdGF0ZX0gfSsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBAQ2hhbmdlSURzID0ga2V5cyAlVW5pcXVlQ2hhbmdlSURzOwoKICAgICAgICAjIGFkZCB0aGUgYWxsIGNvdW50CiAgICAgICAgJENvdW50QnlDaGFuZ2VTdGF0ZXtBbGx9ID0gc2NhbGFyIEBDaGFuZ2VJRHM7CiAgICB9CgogICAgIyBkaXNwbGF5IGFsbCBuYXZiYXIgZmlsdGVycwogICAgbXkgJU5hdkJhckZpbHRlcjsKICAgIG15ICRDb3VudGVyOwogICAgbXkgJEFsbENoYW5nZXM7CiAgICBteSAkQWxsQ2hhbmdlc1RvdGFsOwoKICAgICMgc3RvcmUgdGhlIG51bWJlciBvZiBmaWx0ZXJzCiAgICBteSAkTnVtYmVyT2ZGaWx0ZXJzID0ga2V5cyAlRmlsdGVyczsKCiAgICAjIGFycmF5IHRvIHNvcnQgdGhlIGZpbHRlcnMgYnkgaXRzIHByaW9yaXR5CiAgICBteSBATmF2QmFyRmlsdGVycyA9IHNvcnQgeyAkRmlsdGVyc3skYX0tPntQcmlvfSA8PT4gJEZpbHRlcnN7JGJ9LT57UHJpb30gfSBrZXlzICVGaWx0ZXJzOwoKICAgIEZJTFRFUjoKICAgIGZvciBteSAkRmlsdGVyTmFtZSAoQE5hdkJhckZpbHRlcnMpIHsKICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICAjIGR1ZSB0byBzZXJ2aWNlIHJlc3RyaWN0aW9ucyBmb3IgY3VzdG9tZXIgdXNlcnMKICAgICAgICAjIHdlIG5lZWQgdG8gY291bnQgZGlmZmVyZW50bHkgaWYgdGhlIGZlYXR1cmUgIlNob3dPbmx5Q2hhbmdlc1dpdGhBbGxvd2VkU2VydmljZXMiCiAgICAgICAgIyBpcyBhY3RpdmF0ZWQKICAgICAgICBteSAkQ291bnQ7CiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntTaG93T25seUNoYW5nZXNXaXRoQWxsb3dlZFNlcnZpY2VzfSApIHsKICAgICAgICAgICAgJENvdW50ID0gJENvdW50QnlDaGFuZ2VTdGF0ZXskRmlsdGVyTmFtZX0gfHwgMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIGNvdW50IHRoZSBudW1iZXIgb2YgY2hhbmdlcyBmb3IgZWFjaCBmaWx0ZXIKICAgICAgICAgICAgJENvdW50ID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgICAgICAgICAgJXsgJEZpbHRlcnN7JEZpbHRlck5hbWV9LT57U2VhcmNofSB9LAogICAgICAgICAgICAgICAgUmVzdWx0ID0+ICdDT1VOVCcsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRGaWx0ZXJOYW1lIG5lICdBbGwnICYmICEkQ291bnQgKSB7CiAgICAgICAgICAgIG5leHQgRklMVEVSOwogICAgICAgIH0KCiAgICAgICAgbXkgJENsYXNzTEkgPSAnJzsKICAgICAgICBteSAkQ2xhc3NBICA9ICcnOwogICAgICAgIGlmICggJEZpbHRlck5hbWUgZXEgJFNlbGYtPntGaWx0ZXJ9ICkgewogICAgICAgICAgICAkQ2xhc3NBID0gJ1NlbGVjdGVkJzsKICAgICAgICAgICAgJEFsbENoYW5nZXMgPSAkQ291bnQgfHwgMDsKICAgICAgICB9CiAgICAgICAgaWYgKCAkTnVtYmVyT2ZGaWx0ZXJzID09ICRDb3VudGVyICkgewogICAgICAgICAgICAkQ2xhc3NMSSA9ICdMYXN0JzsKICAgICAgICB9CiAgICAgICAgaWYgKCAkRmlsdGVyTmFtZSBlcSAnQWxsJyApIHsKICAgICAgICAgICAgJEFsbENoYW5nZXNUb3RhbCA9ICRDb3VudDsKICAgICAgICB9CgogICAgICAgICMgc2V0IGNvdW50ZXIgc3RyaW5nIChlbXR5IHN0cmluZyBpZiBDb3VudCBpcyB1bmRlZmluZWQpCiAgICAgICAgbXkgJENvdW50U3RyZzsKICAgICAgICBpZiAoIGRlZmluZWQgJENvdW50ICkgewogICAgICAgICAgICAkQ291bnRTdHJnID0gJygnIC4gJENvdW50IC4gJyknOwogICAgICAgIH0KCiAgICAgICAgIyBkaXNwbGF5IHRoZSBuYXZiYXIgZmlsdGVyCiAgICAgICAgJE5hdkJhckZpbHRlcnsgJEZpbHRlcnN7JEZpbHRlck5hbWV9LT57UHJpb30gfSA9IHsKICAgICAgICAgICAgQ291bnRTdHJnID0+ICRDb3VudFN0cmcsCiAgICAgICAgICAgIEZpbHRlciAgICA9PiAkRmlsdGVyTmFtZSwKICAgICAgICAgICAgQ2xhc3NMSSAgID0+ICRDbGFzc0xJLAogICAgICAgICAgICBDbGFzc0EgICAgPT4gJENsYXNzQSwKICAgICAgICAgICAgJXsgJEZpbHRlcnN7JEZpbHRlck5hbWV9IH0sCiAgICAgICAgfTsKICAgIH0KCiAgICAjIHNldCBtZXRhLWxpbmsgZm9yIHBhZ2luYXRpb24KICAgIG15ICRMaW5rID0gJ1NvcnRCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU29ydEJ5ICkKICAgICAgICAuICc7T3JkZXJCeT0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkT3JkZXJCeSApCiAgICAgICAgLiAnO0ZpbHRlcj0nIC4gJExheW91dE9iamVjdC0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e0ZpbHRlcn0gKQogICAgICAgIC4gJztTdWJhY3Rpb249JyAuICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntTdWJhY3Rpb259ICkKICAgICAgICAuICc7JzsKCiAgICAjIGNyZWF0ZSBwYWdpbmF0aW9uCiAgICBteSAlUGFnZU5hdiA9ICRMYXlvdXRPYmplY3QtPlBhZ2VOYXZCYXIoCiAgICAgICAgTGltaXQgICAgID0+IDEwMDAwLAogICAgICAgIFN0YXJ0SGl0ICA9PiAkU2VsZi0+e1N0YXJ0SGl0fSwKICAgICAgICBQYWdlU2hvd24gPT4gJFNlbGYtPntQYWdlU2hvd259LAogICAgICAgIEFsbEhpdHMgICA9PiBzY2FsYXIoQENoYW5nZUlEcyksICAgICAgICAgICAgICAgICAgICAjJEFsbENoYW5nZXMsCiAgICAgICAgQWN0aW9uICAgID0+ICdBY3Rpb249Q3VzdG9tZXJJVFNNQ2hhbmdlU2NoZWR1bGUnLAogICAgICAgIExpbmsgICAgICA9PiAkTGluaywKICAgICAgICBJRFByZWZpeCAgPT4gJ0N1c3RvbWVySVRTTUNoYW5nZVNjaGVkdWxlJywKICAgICk7CgogICAgIyBzaG93IGNoYW5nZXMgaXMgZGF0YSBpZiBhbnkKICAgIGlmICggc2NhbGFyIEBDaGFuZ2VJRHMgKSB7CgogICAgICAgICMgc2hvdyBoZWFkZXIgZmlsdGVyCiAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJU5hdkJhckZpbHRlciApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdGaWx0ZXJIZWFkZXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJXsgJE5hdkJhckZpbHRlcnskS2V5fSB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICggc2NhbGFyIEBTaG93Q29sdW1ucyApIHsKCiAgICAgICAgICAgICMgc2V0IGhlYWRlcnMKICAgICAgICAgICAgZm9yIG15ICRDb2x1bW5OYW1lIChAU2hvd0NvbHVtbnMpIHsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBuZWVkZWQgdmVyaWFibGVzCiAgICAgICAgICAgICAgICBteSAkQ1NTID0gJyc7CiAgICAgICAgICAgICAgICBteSAkU2V0T3JkZXJCeTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSBJRCBpZiBuZWNlc2FyeQogICAgICAgICAgICAgICAgaWYgKCRTb3J0QnkpIHsKICAgICAgICAgICAgICAgICAgICAkU29ydEJ5ID0gKCAkU29ydEJ5IGVxICdQcmlvcml0eUlEJyApCiAgICAgICAgICAgICAgICAgICAgICAgID8gJ1ByaW9yaXR5JwogICAgICAgICAgICAgICAgICAgICAgICA6ICggJFNvcnRCeSBlcSAnQ2F0ZWdvcnlJRCcgKSAgICAgICA/ICdDYXRlZ29yeScKICAgICAgICAgICAgICAgICAgICAgICAgOiAoICRTb3J0QnkgZXEgJ0NoYW5nZUJ1aWxkZXJJRCcgKSAgPyAnQ2hhbmdlQnVpbGRlcicKICAgICAgICAgICAgICAgICAgICAgICAgOiAoICRTb3J0QnkgZXEgJ0NoYW5nZU1hbmFnZXJJRCcgKSAgPyAnQ2hhbmdlTWFuYWdlcicKICAgICAgICAgICAgICAgICAgICAgICAgOiAoICRTb3J0QnkgZXEgJ0NoYW5nZVN0YXRlSUQnICkgICAgPyAnQ2hhbmdlU3RhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIDogKCAkU29ydEJ5IGVxICdJbXBhY3RJRCcgKSAgICAgICAgID8gJ0ltcGFjdCcKICAgICAgICAgICAgICAgICAgICAgICAgOiAoICRTb3J0QnkgZXEgJ1dvcmtPcmRlckFnZW50SUQnICkgPyAnV29ya09yZGVyQWdlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIDogKCAkU29ydEJ5IGVxICdXb3JrT3JkZXJTdGF0ZUlEJyApID8gJ1dvcmtPcmRlclN0YXRlJwogICAgICAgICAgICAgICAgICAgICAgICA6ICggJFNvcnRCeSBlcSAnV29ya09yZGVyVHlwZUlEJyApICA/ICdXb3JrT3JkZXJUeXBlJwogICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTb3J0Qnk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBzZXQgdGhlIGNvcnJlY3QgU2V0IENTUyBjbGFzcyBhbmQgb3JkZXIgYnkgbGluawogICAgICAgICAgICAgICAgaWYgKCAkU29ydEJ5ICYmICggJFNvcnRCeSBlcSAkQ29sdW1uTmFtZSApICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJE9yZGVyQnkgJiYgKCAkT3JkZXJCeSBlcSAnVXAnICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZXRPcmRlckJ5ID0gJ0Rvd24nOwogICAgICAgICAgICAgICAgICAgICAgICAkQ1NTIC49ICcgU29ydERlc2NlbmRpbmcnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFNldE9yZGVyQnkgPSAnVXAnOwogICAgICAgICAgICAgICAgICAgICAgICAkQ1NTIC49ICcgU29ydEFzY2VuZGluZyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJFNldE9yZGVyQnkgPSAnVXAnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcgLiAkQ29sdW1uTmFtZSAuICdIZWFkZXInLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBDU1MgICAgID0+ICRDU1MsCiAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyQnkgPT4gJFNldE9yZGVyQnksCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZGVmaW5lIGluY2lkZW50IHNpZ25hbHMsIG5lZWRlZCBmb3Igc2VydmljZXMKICAgICAgICBteSAlSW5jaVNpZ25hbHMgPSAoCiAgICAgICAgICAgIG9wZXJhdGlvbmFsID0+ICdncmVlbmxlZCcsCiAgICAgICAgICAgIHdhcm5pbmcgICAgID0+ICd5ZWxsb3dsZWQnLAogICAgICAgICAgICBpbmNpZGVudCAgICA9PiAncmVkbGVkJywKICAgICAgICApOwoKICAgICAgICAjIHNob3cgY2hhbmdlcydzCiAgICAgICAgJENvdW50ZXIgPSAwOwoKICAgICAgICBJRDoKICAgICAgICBmb3IgbXkgJENoYW5nZUlEIChAQ2hhbmdlSURzKSB7CiAgICAgICAgICAgICRDb3VudGVyKys7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRDb3VudGVyID49ICRTZWxmLT57U3RhcnRIaXR9CiAgICAgICAgICAgICAgICAmJiAkQ291bnRlciA8ICggJFNlbGYtPntQYWdlU2hvd259ICsgJFNlbGYtPntTdGFydEhpdH0gKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyB0byBzdG9yZSBhbGwgZGF0YQogICAgICAgICAgICAgICAgbXkgJURhdGE7CgogICAgICAgICAgICAgICAgIyB0byBzdG9yZSBkYXRhIG9mIHN1Yi1lbGVtZW50cwogICAgICAgICAgICAgICAgbXkgJVN1YkVsZW1lbnREYXRhOwoKICAgICAgICAgICAgICAgIG15ICRDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJENoYW5nZTsKCiAgICAgICAgICAgICAgICAjIGFkZCBjaGFuZ2UgZGF0YSwKICAgICAgICAgICAgICAgICMgKCBsZXQgd29ya29yZGVyIGRhdGEgb3ZlcndyaXRlCiAgICAgICAgICAgICAgICAjIHNvbWUgY2hhbmdlIGF0dHJpYnV0ZXMsIGkuZS4gUGxhbm5lZFN0YXJ0VGltZSwgZXRjLi4uICkKICAgICAgICAgICAgICAgICVEYXRhID0gKCAleyRDaGFuZ2V9LCAlRGF0YSApOwoKICAgICAgICAgICAgICAgICMgZ2V0IHVzZXIgZGF0YSBmb3IgbmVlZGVkIHVzZXIgdHlwZXMKICAgICAgICAgICAgICAgIFVTRVJUWVBFOgogICAgICAgICAgICAgICAgZm9yIG15ICRVc2VyVHlwZSAocXcoQ2hhbmdlQnVpbGRlciBDaGFuZ2VNYW5hZ2VyIFdvcmtPcmRlckFnZW50KSkgewoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIFVzZXJUeXBlIGF0dHJpYnV0ZSBleGlzdHMgZWl0aGVyIGluIGNoYW5nZSBvciB3b3Jrb3JkZXIKICAgICAgICAgICAgICAgICAgICBpZiAoICEkQ2hhbmdlLT57ICRVc2VyVHlwZSAuICdJRCcgfSAmJiAhJERhdGF7ICRVc2VyVHlwZSAuICdJRCcgfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBVU0VSVFlQRTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IHVzZXIgZGF0YQogICAgICAgICAgICAgICAgICAgIG15ICVVc2VyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkQ2hhbmdlLT57ICRVc2VyVHlwZSAuICdJRCcgfSB8fCAkRGF0YXsgJFVzZXJUeXBlIC4gJ0lEJyB9LAogICAgICAgICAgICAgICAgICAgICAgICBDYWNoZWQgPT4gMSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIHNldCB1c2VyIGRhdGEKICAgICAgICAgICAgICAgICAgICAkRGF0YXsgJFVzZXJUeXBlIC4gJ1VzZXJMb2dpbicgfSAgICAgICAgPSAkVXNlcntVc2VyTG9naW59OwogICAgICAgICAgICAgICAgICAgICREYXRheyAkVXNlclR5cGUgLiAnVXNlckZpcnN0bmFtZScgfSAgICA9ICRVc2Vye1VzZXJGaXJzdG5hbWV9OwogICAgICAgICAgICAgICAgICAgICREYXRheyAkVXNlclR5cGUgLiAnVXNlckxhc3RuYW1lJyB9ICAgICA9ICRVc2Vye1VzZXJMYXN0bmFtZX07CiAgICAgICAgICAgICAgICAgICAgJERhdGF7ICRVc2VyVHlwZSAuICdMZWZ0UGFyZW50aGVzaXMnIH0gID0gJygnOwogICAgICAgICAgICAgICAgICAgICREYXRheyAkVXNlclR5cGUgLiAnUmlnaHRQYXJlbnRoZXNpcycgfSA9ICcpJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHRvIHN0b3JlIHRoZSBsaW5rZWQgc2VydmljZSBkYXRhCiAgICAgICAgICAgICAgICBteSAkTGlua0xpc3RXaXRoRGF0YSA9IHt9OwoKICAgICAgICAgICAgICAgIG15IEBXb3JrT3JkZXJJRHM7CgogICAgICAgICAgICAgICAgIyBzdG9yZSB0aGUgY29tYmluZWQgbGlua2VkIHNlcnZpY2VzIGRhdGEgZnJvbSBhbGwgd29ya29yZGVycyBvZiB0aGlzIGNoYW5nZQogICAgICAgICAgICAgICAgQFdvcmtPcmRlcklEcyA9IEB7ICRDaGFuZ2UtPntXb3JrT3JkZXJJRHN9IH07CgogICAgICAgICAgICAgICAgIyBzdG9yZSB0aGUgY29tYmluZWQgbGlua2VkIHNlcnZpY2VzIGRhdGEKICAgICAgICAgICAgICAgIGZvciBteSAkV29ya09yZGVySUQgKEBXb3JrT3JkZXJJRHMpIHsKCiAgICAgICAgICAgICAgICAgICAgIyBnZXQgbGlua2VkIG9iamVjdHMgb2YgdGhpcyB3b3Jrb3JkZXIKICAgICAgICAgICAgICAgICAgICBteSAkTGlua0xpc3RXaXRoRGF0YVdvcmtPcmRlciA9ICRMaW5rT2JqZWN0LT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgICAgICAgICAgICAgICAgICBLZXkgICAgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICBPQkpFQ1Q6CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRPYmplY3QgKCBzb3J0IGtleXMgJXskTGlua0xpc3RXaXRoRGF0YVdvcmtPcmRlcn0gKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIG9ubHkgc2hvdyBsaW5rZWQgc2VydmljZXMgb2Ygd29ya29yZGVyCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJE9iamVjdCBuZSAnU2VydmljZScgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IE9CSkVDVDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgTElOS1RZUEU6CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXsgJExpbmtMaXN0V2l0aERhdGFXb3JrT3JkZXItPnskT2JqZWN0fSB9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJUkVDVElPTjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkRGlyZWN0aW9uICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0IGtleXMgJXsgJExpbmtMaXN0V2l0aERhdGFXb3JrT3JkZXItPnskT2JqZWN0fS0+eyRMaW5rVHlwZX0gfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRJRCAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQga2V5cyAlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExpbmtMaXN0V2l0aERhdGFXb3JrT3JkZXItPnskT2JqZWN0fS0+eyRMaW5rVHlwZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPnskRGlyZWN0aW9ufQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbWJpbmUgdGhlIGxpbmtlZCBvYmplY3QgZGF0YSBmcm9tIGFsbCB3b3Jrb3JkZXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMaW5rTGlzdFdpdGhEYXRhLT57JE9iamVjdH0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn0tPnskSUR9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICRMaW5rTGlzdFdpdGhEYXRhV29ya09yZGVyLT57JE9iamVjdH0tPnskTGlua1R5cGV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPnskRGlyZWN0aW9ufS0+eyRJRH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZ2V0IHVuaXF1ZSBzZXJ2aWNlIGlkcwogICAgICAgICAgICAgICAgbXkgJVVuaXF1ZVNlcnZpY2VJRHM7CiAgICAgICAgICAgICAgICBteSAkU2VydmljZXNSZWYgPSAkTGlua0xpc3RXaXRoRGF0YS0+e1NlcnZpY2V9IHx8IHt9OwogICAgICAgICAgICAgICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyRTZXJ2aWNlc1JlZn0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgZXh0cmFjdCBsaW5rIHR5cGUgTGlzdAogICAgICAgICAgICAgICAgICAgIG15ICRMaW5rVHlwZUxpc3QgPSAkU2VydmljZXNSZWYtPnskTGlua1R5cGV9OwoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJERpcmVjdGlvbiAoIHNvcnQga2V5cyAleyRMaW5rVHlwZUxpc3R9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBleHRyYWN0IGRpcmVjdGlvbiBsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICREaXJlY3Rpb25MaXN0ID0gJFNlcnZpY2VzUmVmLT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259OwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjb2xsZWN0IHVuaXF1ZSBzZXJ2aWNlIGlkcwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAleyREaXJlY3Rpb25MaXN0fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRVbmlxdWVTZXJ2aWNlSURzeyRTZXJ2aWNlSUR9Kys7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBnZXQgdGhlIGRhdGEgZm9yIGVhY2ggc2VydmljZQogICAgICAgICAgICAgICAgbXkgQFNlcnZpY2VzRGF0YTsKICAgICAgICAgICAgICAgIFNFUlZJQ0VJRDoKICAgICAgICAgICAgICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICVVbmlxdWVTZXJ2aWNlSURzICkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e1Nob3dPbmx5Q2hhbmdlc1dpdGhBbGxvd2VkU2VydmljZXN9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBkbyBub3Qgc2hvdyB0aGlzIHNlcnZpY2UgaWYgY3VzdG9tZXIgaXMgbm90IGFsbG93ZWQgdG8gdXNlIGl0CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgU0VSVklDRUlEIGlmICEkQ3VzdG9tZXJVc2VyU2VydmljZXN7JFNlcnZpY2VJRH07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGdldCBzZXJ2aWNlIGRhdGEKICAgICAgICAgICAgICAgICAgICBteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgICAgICAgICBJbmNpZGVudFN0YXRlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgYWRkIGN1cnJlbnQgaW5jaWRlbnQgc2lnbmFsCiAgICAgICAgICAgICAgICAgICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTaWduYWx9ID0gJEluY2lTaWduYWxzeyAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gfHwgJycgfSB8fCAnJzsKCiAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSBzZXJ2aWNlIGRhdGEKICAgICAgICAgICAgICAgICAgICBwdXNoIEBTZXJ2aWNlc0RhdGEsIFwlU2VydmljZURhdGE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBzb3J0IHNlcnZpY2VzIGRhdGEgYnkgc2VydmljZSBuYW1lCiAgICAgICAgICAgICAgICBAU2VydmljZXNEYXRhID0gc29ydCB7ICRhLT57TmFtZX0gY21wICRiLT57TmFtZX0gfSBAU2VydmljZXNEYXRhOwoKICAgICAgICAgICAgICAgICMgZG8gbm90IHNob3cgdGhlIGNoYW5nZSBpZiBpdCBoYXMgbm8gc2VydmljZXMKICAgICAgICAgICAgICAgIG5leHQgSUQgaWYgIUBTZXJ2aWNlc0RhdGE7CgogICAgICAgICAgICAgICAgIyBzdG9yZSBzZXJ2aWNlcyBkYXRhCiAgICAgICAgICAgICAgICAkU3ViRWxlbWVudERhdGF7U2VydmljZXN9ID0gXEBTZXJ2aWNlc0RhdGE7CgogICAgICAgICAgICAgICAgIyBhZGQgYmxvY2sKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKEBTaG93Q29sdW1ucykgewogICAgICAgICAgICAgICAgICAgIENPTFVNTjoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJENvbHVtbk5hbWUgKEBTaG93Q29sdW1ucykgewogICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcgLiAkQ29sdW1uTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgdGhpcyBjb2x1bW4gY29udGFpbnMgc3ViLWVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTdWJFbGVtZW50RGF0YXskQ29sdW1uTmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHJlZiAkU3ViRWxlbWVudERhdGF7JENvbHVtbk5hbWV9IGVxICdBUlJBWScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkU3ViRWxlbWVudCAoIEB7ICRTdWJFbGVtZW50RGF0YXskQ29sdW1uTmFtZX0gfSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzaG93IHN1Yi1lbGVtZW50cyBvZiBjb2x1bW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW5OYW1lIC4gJ1N1YkVsZW1lbnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXskU3ViRWxlbWVudH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhQFNlcnZpY2VzRGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcgLiAkQ29sdW1uTmFtZSAuICdTdWJFbGVtZW50RW1wdHknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIHNob3cgbm8gZGF0YSBmb3VuZCBtZXNzYWdlCiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICk7CiAgICB9CgogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdDdXN0b21lcklUU01DaGFuZ2VPdmVydmlldycsCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICApOwoKICAgICMgZ2V0IHBhZ2UgZm9vdGVyCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkN1c3RvbWVyRm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01DaGFuZ2U6Ok1lbnVDaGFuZ2VEZWxldGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgVXNlcklEIHBhcmFtCiAgICAkU2VsZi0+e1VzZXJJRH0gPSAkUGFyYW17VXNlcklEfSB8fCBkaWUgIkdvdCBubyBVc2VySUQhIjsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NoYW5nZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENoYW5nZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGNvbmZpZyBmb3IgdGhlIHJlbGV2YW50IGFjdGlvbgogICAgbXkgJEZyb250ZW5kQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6JFBhcmFte0NvbmZpZ30tPntBY3Rpb259Iik7CgogICAgIyBnZXQgdGhlIHJlcXVpcmVkIHByaXZpbGVnZSwgJ3JvJyBvciAncncnCiAgICBteSAkUmVxdWlyZWRQcml2OwogICAgaWYgKCRGcm9udGVuZENvbmZpZykgewoKICAgICAgICAjIGdldCB0aGUgcmVxdWlyZWQgcHJpdiBmcm9tIHRoZSBmcm9udGVuZCBjb25maWd1cmF0aW9uCiAgICAgICAgJFJlcXVpcmVkUHJpdiA9ICRGcm9udGVuZENvbmZpZy0+e1Blcm1pc3Npb259OwogICAgfQoKICAgIG15ICRBY2Nlc3M7CiAgICBpZiAoICEkUmVxdWlyZWRQcml2ICkgewoKICAgICAgICAjIERpc3BsYXkgdGhlIG1lbnUtbGluaywgd2hlbiBubyBwcml2aWxlZ2UgaXMgcmVxdWlyZWQKICAgICAgICAkQWNjZXNzID0gMTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGdldCB0aGUgcmVxdWlyZWQgZ3JvdXAgZm9yIHRoZSBmcm9udGVuZCBtb2R1bGUKICAgICAgICBteSAkR3JvdXAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyAkUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0gfQogICAgICAgICAgICAtPntHcm91cFJvfS0+WzBdOwoKICAgICAgICAjIGRlbnkgYWNjZXNzLCB3aGVuIHRoZSBncm91cCBpcyBub3QgZm91bmQKICAgICAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9IGlmICEkR3JvdXA7CgogICAgICAgICMgZ2V0IGdyb3VwIG9iamVjdAogICAgICAgIG15ICRHcm91cE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpOwoKICAgICAgICAjIGdldCB0aGUgZ3JvdXAgaWQKICAgICAgICBteSAkR3JvdXBJRCA9ICRHcm91cE9iamVjdC0+R3JvdXBMb29rdXAoIEdyb3VwID0+ICRHcm91cCApOwoKICAgICAgICAjIGRlbnkgYWNjZXNzLCB3aGVuIHRoZSBncm91cCBpcyBub3QgZm91bmQKICAgICAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9IGlmICEkR3JvdXBJRDsKCiAgICAgICAgIyBnZXQgdXNlciBncm91cHMsIHdoZXJlIHRoZSB1c2VyIGhhcyB0aGUgYXBwcm9wcmlhdGUgcHJpdmlsZWdlCiAgICAgICAgbXkgJUdyb3VwcyA9ICRHcm91cE9iamVjdC0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJFJlcXVpcmVkUHJpdiwKICAgICAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICAgICApOwoKICAgICAgICAjIGdyYW50IGFjY2VzcyBpZiB0aGUgYWdlbnQgaGFzIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGluIHRoZSBhcHByb3ByaWF0ZSBncm91cAogICAgICAgIGlmICggJEdyb3Vwc3skR3JvdXBJRH0gKSB7CiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9IGlmICEkQWNjZXNzOwoKICAgICMgYnVpbGQgYSBsb29rdXAgaGFzaCBmb3IgdGhlIGFsbG93ZWQgY2hhbmdlIHN0YXRlcwogICAgbXkgJUFsbG93ZWRDaGFuZ2VTdGF0ZXMgPSBtYXAgeyAkXyA9PiAxIH0gQHsgJEZyb250ZW5kQ29uZmlnLT57Q2hhbmdlU3RhdGVzfSB9OwoKICAgICMgb25seSBzaG93IHRoZSBkZWxldGUgbGluayBmb3IgY2hhbmdlcyBpbiB0aGUgYWxsb3dlZCBjaGFuZ2Ugc3RhdGVzCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9IGlmICEkQWxsb3dlZENoYW5nZVN0YXRlc3sgJFBhcmFte0NoYW5nZX0tPntDaGFuZ2VTdGF0ZX0gfTsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgb3V0cHV0IG1lbnUgYmxvY2sKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdNZW51JyApOwoKICAgICMgb3V0cHV0IHNlcGVyYXRvciwgd2hlbiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgbWVudSBpdGVtCiAgICBpZiAoICRQYXJhbXtDb3VudGVyfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnTWVudUl0ZW1TcGxpdCcgKTsKICAgIH0KCiAgICAjIG91dHB1dCBtZW51IGl0ZW0KICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01lbnVJdGVtJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyAkUGFyYW17Q2hhbmdlfSB9LAogICAgICAgICAgICAleyAkUGFyYW17Q29uZmlnfSB9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgY2hlY2sgaWYgYSBkaWFsb2cgaGFzIHRvIGJlIHNob3duCiAgICBpZiAoICRQYXJhbXtDb25maWd9LT57RGlhbG9nVGl0bGV9ICkgewoKICAgICAgICAjIG91dHB1dCBjb25maXJtYXRpb24gZGlhbG9nCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Nob3dDb25maXJtRGlhbG9nJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAleyAkUGFyYW17Q2hhbmdlfSB9LAogICAgICAgICAgICAgICAgJXsgJFBhcmFte0NvbmZpZ30gfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICRQYXJhbXtDb3VudGVyfSsrOwoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn07Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01DaGFuZ2U6Ok1lbnVHZW5lcmljOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgVXNlcklEIHBhcmFtCiAgICAkU2VsZi0+e1VzZXJJRH0gPSAkUGFyYW17VXNlcklEfSB8fCBkaWUgIkdvdCBubyBVc2VySUQhIjsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NoYW5nZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENoYW5nZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBmb3IgdGhlIHJlbGV2YW50IGFjdGlvbgogICAgbXkgJEZyb250ZW5kQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6JFBhcmFte0NvbmZpZ30tPntBY3Rpb259Iik7CgogICAgIyBnZXQgdGhlIHJlcXVpcmVkIHByaXZpbGVnZSwgJ3JvJyBvciAncncnCiAgICBteSAkUmVxdWlyZWRQcml2OwogICAgaWYgKCAkRnJvbnRlbmRDb25maWcgJiYgJEZyb250ZW5kQ29uZmlnLT57UGVybWlzc2lvbn0gKSB7CgogICAgICAgICMgZ2V0IHRoZSByZXF1aXJlZCBwcml2IGZyb20gdGhlIGZyb250ZW5kIGNvbmZpZ3VyYXRpb24KICAgICAgICAkUmVxdWlyZWRQcml2ID0gJEZyb250ZW5kQ29uZmlnLT57UGVybWlzc2lvbn07CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSBlcSAnQWdlbnRMaW5rT2JqZWN0JyApIHsKCiAgICAgICAgIyB0aGUgTGluay1saW5rIGlzIGEgc3BlY2lhbCBjYXNlLCBhcyBpdCBpcyBub3Qgc3BlY2lmaWMgdG8gSVRTTUNoYW5nZQogICAgICAgICRSZXF1aXJlZFByaXYgPSAncncnOwogICAgfQoKICAgIG15ICRBY2Nlc3M7CiAgICBpZiAoICEkUmVxdWlyZWRQcml2ICkgewoKICAgICAgICAjIERpc3BsYXkgdGhlIG1lbnUtbGluaywgd2hlbiBubyBwcml2aWxlZ2UgaXMgcmVxdWlyZWQKICAgICAgICAkQWNjZXNzID0gMTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGNoZWNrIHBlcm1pc3Npb25zLCBiYXNlZCBvbiB0aGUgcmVxdWlyZWQgcHJpdmlsZWdlCiAgICAgICAgJEFjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPlBlcm1pc3Npb24oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICRSZXF1aXJlZFByaXYsCiAgICAgICAgICAgIEFjdGlvbiAgID0+ICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSwKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJFBhcmFte0NoYW5nZX0tPntDaGFuZ2VJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgTG9nTm8gICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn0gaWYgISRBY2Nlc3M7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIG91dHB1dCBtZW51IGJsb2NrCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnTWVudScgKTsKCiAgICAjIG91dHB1dCBzZXBlcmF0b3IsIHdoZW4gdGhpcyBpcyBub3QgdGhlIGZpcnN0IG1lbnUgaXRlbQogICAgaWYgKCAkUGFyYW17Q291bnRlcn0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ01lbnVJdGVtU3BsaXQnICk7CiAgICB9CgogICAgIyBvdXRwdXQgbWVudSBpdGVtCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZW51SXRlbScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXsgJFBhcmFte0NoYW5nZX0gfSwKICAgICAgICAgICAgJXsgJFBhcmFte0NvbmZpZ30gfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNoZWNrIGlmIGEgZGlhbG9nIGhhcyB0byBiZSBzaG93bgogICAgaWYgKCAkUGFyYW17Q29uZmlnfS0+e0RpYWxvZ1RpdGxlfSApIHsKCiAgICAgICAgIyBvdXRwdXQgY29uZmlybWF0aW9uIGRpYWxvZwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTaG93Q29uZmlybURpYWxvZycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJXsgJFBhcmFte0NoYW5nZX0gfSwKICAgICAgICAgICAgICAgICV7ICRQYXJhbXtDb25maWd9IH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAkUGFyYW17Q291bnRlcn0rKzsKCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01DaGFuZ2U6Ok1lbnVUaW1lU2xvdDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IFVzZXJJRCBwYXJhbQogICAgJFNlbGYtPntVc2VySUR9ID0gJFBhcmFte1VzZXJJRH0gfHwgZGllICJHb3Qgbm8gVXNlcklEISI7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDaGFuZ2V9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDaGFuZ2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIGFueSB3b3Jrb3JkZXJzIHlldAogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfSBpZiAhJFBhcmFte0NoYW5nZX0tPntXb3JrT3JkZXJDb3VudH07CgogICAgIyBUaGUgY2hhbmdlIGNhbiBubyBsb25nZXIgYmUgbW92ZWQsIHdoZW4gdGhlIGNoYW5nZSBoYXMgYWxyZWFkeSBzdGFydGVkLgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfSBpZiAkUGFyYW17Q2hhbmdlfS0+e0FjdHVhbFN0YXJ0VGltZX07CgogICAgIyBnZXQgY29uZmlnIGZvciB0aGUgcmVsZXZhbnQgYWN0aW9uCiAgICBteSAkRnJvbnRlbmRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0iKTsKCiAgICAjIGdldCB0aGUgcmVxdWlyZWQgcHJpdmlsZWdlLCAncm8nIG9yICdydycKICAgIG15ICRSZXF1aXJlZFByaXY7CiAgICBpZiAoJEZyb250ZW5kQ29uZmlnKSB7CgogICAgICAgICMgZ2V0IHRoZSByZXF1aXJlZCBwcml2IGZyb20gdGhlIGZyb250ZW5kIGNvbmZpZ3VyYXRpb24KICAgICAgICAkUmVxdWlyZWRQcml2ID0gJEZyb250ZW5kQ29uZmlnLT57UGVybWlzc2lvbn07CiAgICB9CgogICAgbXkgJEFjY2VzczsKICAgIGlmICggISRSZXF1aXJlZFByaXYgKSB7CgogICAgICAgICMgRGlzcGxheSB0aGUgbWVudS1saW5rLCB3aGVuIG5vIHByaXZpbGVnZSBpcyByZXF1aXJlZAogICAgICAgICRBY2Nlc3MgPSAxOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgY2hlY2sgcGVybWlzc2lvbnMsIGJhc2VkIG9uIHRoZSByZXF1aXJlZCBwcml2aWxlZ2UKICAgICAgICAkQWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+UGVybWlzc2lvbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJFJlcXVpcmVkUHJpdiwKICAgICAgICAgICAgQWN0aW9uICAgPT4gJFBhcmFte0NvbmZpZ30tPntBY3Rpb259LAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkUGFyYW17Q2hhbmdlfS0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBMb2dObyAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfSBpZiAhJEFjY2VzczsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgb3V0cHV0IG1lbnUgYmxvY2sKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdNZW51JyApOwoKICAgICMgb3V0cHV0IHNlcGVyYXRvciwgd2hlbiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgbWVudSBpdGVtCiAgICBpZiAoICRQYXJhbXtDb3VudGVyfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnTWVudUl0ZW1TcGxpdCcgKTsKICAgIH0KCiAgICAjIG91dHB1dCBtZW51IGl0ZW0KICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01lbnVJdGVtJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyAkUGFyYW17Q2hhbmdlfSB9LAogICAgICAgICAgICAleyAkUGFyYW17Q29uZmlnfSB9LAogICAgICAgIH0sCiAgICApOwogICAgJFBhcmFte0NvdW50ZXJ9Kys7CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01DaGFuZ2U6Ok1lbnVXb3JrT3JkZXJzTmVlZGVkOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyBBcyBvZiAyMDEwLTAzLTE5IHRoaXMgbW9kdWxlIGlzIHVudXNlZC4KIyBCdXQgaXQgaXMga2VwdCBpbiB0aGUgZGlzdHJpYnV0aW9uLCBhcyBpdCBwcm92aWRlcyB1c2VmdWwgZnVuY3Rpb25hbGl0eSBmb3IgZnV0dXJlIHVzZS4KCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IFVzZXJJRCBwYXJhbQogICAgJFNlbGYtPntVc2VySUR9ID0gJFBhcmFte1VzZXJJRH0gfHwgZGllICJHb3Qgbm8gVXNlcklEISI7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDaGFuZ2V9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDaGFuZ2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIGFueSB3b3Jrb3JkZXJzIHlldAogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfSBpZiAhJFBhcmFte0NoYW5nZX0tPntXb3JrT3JkZXJDb3VudH07CgogICAgIyBnZXQgY29uZmlnIGZvciB0aGUgcmVsZXZhbnQgYWN0aW9uCiAgICBteSAkRnJvbnRlbmRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0iKTsKCiAgICAjIGdldCB0aGUgcmVxdWlyZWQgcHJpdmlsZWdlLCAncm8nIG9yICdydycKICAgIG15ICRSZXF1aXJlZFByaXY7CiAgICBpZiAoJEZyb250ZW5kQ29uZmlnKSB7CgogICAgICAgICMgZ2V0IHRoZSByZXF1aXJlZCBwcml2IGZyb20gdGhlIGZyb250ZW5kIGNvbmZpZ3VyYXRpb24KICAgICAgICAkUmVxdWlyZWRQcml2ID0gJEZyb250ZW5kQ29uZmlnLT57UGVybWlzc2lvbn07CiAgICB9CgogICAgbXkgJEFjY2VzczsKICAgIGlmICggISRSZXF1aXJlZFByaXYgKSB7CgogICAgICAgICMgRGlzcGxheSB0aGUgbWVudS1saW5rLCB3aGVuIG5vIHByaXZpbGVnZSBpcyByZXF1aXJlZAogICAgICAgICRBY2Nlc3MgPSAxOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgY2hlY2sgcGVybWlzc2lvbnMsIGJhc2VkIG9uIHRoZSByZXF1aXJlZCBwcml2aWxlZ2UKICAgICAgICAkQWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+UGVybWlzc2lvbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJFJlcXVpcmVkUHJpdiwKICAgICAgICAgICAgQWN0aW9uICAgPT4gJFBhcmFte0NvbmZpZ30tPntBY3Rpb259LAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkUGFyYW17Q2hhbmdlfS0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBMb2dObyAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfSBpZiAhJEFjY2VzczsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgb3V0cHV0IG1lbnUgYmxvY2sKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdNZW51JyApOwoKICAgICMgb3V0cHV0IHNlcGVyYXRvciwgd2hlbiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgbWVudSBpdGVtCiAgICBpZiAoICRQYXJhbXtDb3VudGVyfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnTWVudUl0ZW1TcGxpdCcgKTsKICAgIH0KCiAgICAjIG91dHB1dCBtZW51IGl0ZW0KICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01lbnVJdGVtJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyAkUGFyYW17Q2hhbmdlfSB9LAogICAgICAgICAgICAleyAkUGFyYW17Q29uZmlnfSB9LAogICAgICAgIH0sCiAgICApOwogICAgJFBhcmFte0NvdW50ZXJ9Kys7CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01DaGFuZ2U6Ok92ZXJ2aWV3U21hbGw7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlVzZXInLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBVc2VySUQgcGFyYW0KICAgICRTZWxmLT57VXNlcklEfSA9ICRQYXJhbXtVc2VySUR9IHx8IGRpZSAiR290IG5vIFVzZXJJRCEiOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGxvZyBvYmplY3QKICAgIG15ICRMb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhQYWdlU2hvd24gU3RhcnRIaXQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbmVlZCBDaGFuZ2VJRHMgb3IgV29ya09yZGVySURzCiAgICBpZiAoICEkUGFyYW17Q2hhbmdlSURzfSAmJiAhJFBhcmFte1dvcmtPcmRlcklEc30gKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCB0aGUgQ2hhbmdlSURzIG9yIHRoZSBXb3JrT3JkZXJJRHMhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIG9ubHkgb25lIG9mIENoYW5nZUlEcyBvciBXb3JrT3JkZXJJRHMgY2FuIGJlIHVzZWQKICAgIGlmICggJFBhcmFte0NoYW5nZUlEc30gJiYgJFBhcmFte1dvcmtPcmRlcklEc30gKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBlaXRoZXIgdGhlIENoYW5nZUlEcyBvciB0aGUgV29ya09yZGVySURzLCBub3QgYm90aCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IHNlcnZpY2Ugb2JqZWN0CiAgICBteSAkU2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyk7CgogICAgIyBpbiB0aGUgY3VzdG9tZXIgZnJvbnRlbmQKICAgIG15ICVDdXN0b21lclVzZXJTZXJ2aWNlczsKICAgIGlmICggJFBhcmFte0Zyb250ZW5kfSBlcSAnQ3VzdG9tZXInICYmICRTZWxmLT57Q29uZmlnfS0+e1Nob3dPbmx5Q2hhbmdlc1dpdGhBbGxvd2VkU2VydmljZXN9ICkgewoKICAgICAgICAjIGdldCBhbGwgc2VydmljZXMgdGhlIGN1c3RvbWVyIHVzZXIgaXMgYWxsb3dlZCB0byB1c2UKICAgICAgICAlQ3VzdG9tZXJVc2VyU2VydmljZXMgPSAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICAgICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgICAgICAgICBEZWZhdWx0U2VydmljZXMgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBkZWZpbmUgaW5jaWRlbnQgc2lnbmFscywgbmVlZGVkIGZvciBzZXJ2aWNlcwogICAgbXkgJUluY2lTaWduYWxzID0gKAogICAgICAgIG9wZXJhdGlvbmFsID0+ICdncmVlbmxlZCcsCiAgICAgICAgd2FybmluZyAgICAgPT4gJ3llbGxvd2xlZCcsCiAgICAgICAgaW5jaWRlbnQgICAgPT4gJ3JlZGxlZCcsCiAgICApOwoKICAgICMgc3RvcmUgZWl0aGVyIHRoZSBDaGFuZ2VJRHMgb3IgdGhlIFdvcmtPcmRlcklEcwogICAgbXkgQElEczsKICAgIGlmICggJFBhcmFte0NoYW5nZUlEc30gJiYgcmVmICRQYXJhbXtDaGFuZ2VJRHN9IGVxICdBUlJBWScgKSB7CiAgICAgICAgQElEcyA9IEB7ICRQYXJhbXtDaGFuZ2VJRHN9IH07CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtXb3JrT3JkZXJJRHN9ICYmIHJlZiAkUGFyYW17V29ya09yZGVySURzfSBlcSAnQVJSQVknICkgewogICAgICAgIEBJRHMgPSBAeyAkUGFyYW17V29ya09yZGVySURzfSB9OwogICAgfQoKICAgICMgY2hlY2sgU2hvd0NvbHVtbnMgcGFyYW1ldGVyCiAgICBteSBAU2hvd0NvbHVtbnM7CiAgICBteSAlRHluYW1pY0ZpZWxkQ29sdW1uczsKICAgIGlmICggJFBhcmFte1Nob3dDb2x1bW5zfSAmJiByZWYgJFBhcmFte1Nob3dDb2x1bW5zfSBlcSAnQVJSQVknICkgewoKICAgICAgICBmb3IgbXkgJENvbHVtbiAoIHNvcnQgQHsgJFBhcmFte1Nob3dDb2x1bW5zfSB9ICkgewoKICAgICAgICAgICAgIyByZW1lbWJlciB0aGUgZHluYW1pYyBmaWVsZCBuYW1lCiAgICAgICAgICAgIGlmICggJENvbHVtbiA9fiBteyBcQSBEeW5hbWljRmllbGRfICguKykgXHogfXhtcyApIHsKICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRDb2x1bW5zeyQxfSA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVtZW1iZXIgbm9ybWFsIGZpZWxkcwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zLCAkQ29sdW1uOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgb2JqZWN0CiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIGxpc3Qgb2YgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMKICAgIG15ICREeW5hbWljRmllbGRMaXN0ID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIE9iamVjdFR5cGUgID0+IFsgJ0lUU01DaGFuZ2UnLCAnSVRTTVdvcmtPcmRlcicgXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiBcJUR5bmFtaWNGaWVsZENvbHVtbnMsCiAgICApOwoKICAgICMgYWRkIHRoZSBhbHJlYWR5IHNvcnRlZCBkeW5hbWljIGZpZWxkcwogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCBAeyREeW5hbWljRmllbGRMaXN0fSApIHsKICAgICAgICBwdXNoIEBTaG93Q29sdW1ucywgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZC0+e05hbWV9OwogICAgfQoKICAgICMgYnVpbGQgbG9va3VwIGhhc2ggZm9yIFNob3dDb2x1bW5zCiAgICBteSAlU2hvd0NvbHVtbnNMb29rdXAgPSBtYXAgeyAkXyA9PiAxIH0gQFNob3dDb2x1bW5zOwoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBidWlsZCBjb2x1bW4gaGVhZGVyIGJsb2NrcwogICAgaWYgKEBTaG93Q29sdW1ucykgewoKICAgICAgICBDT0xVTU46CiAgICAgICAgZm9yIG15ICRDb2x1bW4gKEBTaG93Q29sdW1ucykgewoKICAgICAgICAgICAgIyBjcmVhdGUgbmVlZGVkIHZlcmlhYmxlcwogICAgICAgICAgICBteSAkQ1NTID0gJ092ZXJ2aWV3SGVhZGVyJzsKICAgICAgICAgICAgbXkgJE9yZGVyQnk7CgogICAgICAgICAgICAjIHJlbW92ZSBJRCBpZiBuZWNlc2FyeQogICAgICAgICAgICBpZiAoICRQYXJhbXtTb3J0Qnl9ICkgewogICAgICAgICAgICAgICAgJFBhcmFte1NvcnRCeX0gPSAoICRQYXJhbXtTb3J0Qnl9IGVxICdQcmlvcml0eUlEJyApCiAgICAgICAgICAgICAgICAgICAgPyAnUHJpb3JpdHknCiAgICAgICAgICAgICAgICAgICAgOiAoICRQYXJhbXtTb3J0Qnl9IGVxICdDYXRlZ29yeUlEJyApICAgICAgID8gJ0NhdGVnb3J5JwogICAgICAgICAgICAgICAgICAgIDogKCAkUGFyYW17U29ydEJ5fSBlcSAnQ2hhbmdlQnVpbGRlcklEJyApICA/ICdDaGFuZ2VCdWlsZGVyJwogICAgICAgICAgICAgICAgICAgIDogKCAkUGFyYW17U29ydEJ5fSBlcSAnQ2hhbmdlTWFuYWdlcklEJyApICA/ICdDaGFuZ2VNYW5hZ2VyJwogICAgICAgICAgICAgICAgICAgIDogKCAkUGFyYW17U29ydEJ5fSBlcSAnQ2hhbmdlU3RhdGVJRCcgKSAgICA/ICdDaGFuZ2VTdGF0ZScKICAgICAgICAgICAgICAgICAgICA6ICggJFBhcmFte1NvcnRCeX0gZXEgJ0ltcGFjdElEJyApICAgICAgICAgPyAnSW1wYWN0JwogICAgICAgICAgICAgICAgICAgIDogKCAkUGFyYW17U29ydEJ5fSBlcSAnV29ya09yZGVyQWdlbnRJRCcgKSA/ICdXb3JrT3JkZXJBZ2VudCcKICAgICAgICAgICAgICAgICAgICA6ICggJFBhcmFte1NvcnRCeX0gZXEgJ1dvcmtPcmRlclN0YXRlSUQnICkgPyAnV29ya09yZGVyU3RhdGUnCiAgICAgICAgICAgICAgICAgICAgOiAoICRQYXJhbXtTb3J0Qnl9IGVxICdXb3JrT3JkZXJUeXBlSUQnICkgID8gJ1dvcmtPcmRlclR5cGUnCiAgICAgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBhcmFte1NvcnRCeX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2V0IHRoZSBjb3JyZWN0IFNldCBDU1MgY2xhc3MgYW5kIG9yZGVyIGJ5IGxpbmsKICAgICAgICAgICAgaWYgKCAkUGFyYW17U29ydEJ5fSAmJiAoICRQYXJhbXtTb3J0Qnl9IGVxICRDb2x1bW4gKSApIHsKICAgICAgICAgICAgICAgIGlmICggJFBhcmFte09yZGVyQnl9ICYmICggJFBhcmFte09yZGVyQnl9IGVxICdVcCcgKSApIHsKICAgICAgICAgICAgICAgICAgICAkT3JkZXJCeSA9ICdEb3duJzsKICAgICAgICAgICAgICAgICAgICAkQ1NTIC49ICcgU29ydERlc2NlbmRpbmdMYXJnZSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkT3JkZXJCeSA9ICdVcCc7CiAgICAgICAgICAgICAgICAgICAgJENTUyAuPSAnIFNvcnRBc2NlbmRpbmdMYXJnZSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkT3JkZXJCeSA9ICdVcCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaGFuZGxlIGR5bmFtaWMgZmllbGRzCiAgICAgICAgICAgIGlmICggJENvbHVtbiA9fiBteyBcQSBEeW5hbWljRmllbGRfICguKykgXHogfXhtcyApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBkeW5hbWljIGZpZWxkIGRhdGEKICAgICAgICAgICAgICAgIG15ICREeW5hbWljRmllbGQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkRHluYW1pY0ZpZWxkSGVhZGVyJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJXskRHluYW1pY0ZpZWxkfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IENPTFVNTjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBoYW5kbGUgIm5vcm1hbCIgZmllbGRzCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4gLiAnSGVhZGVyJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBDU1MgICAgID0+ICRDU1MsCiAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyQnkgPT4gJE9yZGVyQnksCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbXkgJE91dHB1dCAgPSAnJzsKICAgIG15ICRDb3VudGVyID0gMDsKCiAgICAjIHNob3cgY2hhbmdlcyBpZiB0aGVyZSBhcmUgc29tZQogICAgaWYgKEBJRHMpIHsKCiAgICAgICAgSUQ6CiAgICAgICAgZm9yIG15ICRJRCAoQElEcykgewogICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkQ291bnRlciA+PSAkUGFyYW17U3RhcnRIaXR9CiAgICAgICAgICAgICAgICAmJiAkQ291bnRlciA8ICggJFBhcmFte1BhZ2VTaG93bn0gKyAkUGFyYW17U3RhcnRIaXR9ICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgdG8gc3RvcmUgYWxsIGRhdGEKICAgICAgICAgICAgICAgIG15ICVEYXRhOwoKICAgICAgICAgICAgICAgICMgdG8gc3RvcmUgZGF0YSBvZiBzdWItZWxlbWVudHMKICAgICAgICAgICAgICAgIG15ICVTdWJFbGVtZW50RGF0YTsKCiAgICAgICAgICAgICAgICBteSAkQ2hhbmdlSUQ7CiAgICAgICAgICAgICAgICBpZiAoICRQYXJhbXtDaGFuZ2VJRHN9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIHNldCBjaGFuZ2UgaWQKICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlSUQgPSAkSUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRQYXJhbXtXb3JrT3JkZXJJRHN9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIGdldCB3b3Jrb3JkZXIgZGF0YQogICAgICAgICAgICAgICAgICAgIG15ICRXb3JrT3JkZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpLT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIG5leHQgSUQgaWYgISRXb3JrT3JkZXI7CgogICAgICAgICAgICAgICAgICAgICMgYWRkIHdvcmtvcmRlciBkYXRhCiAgICAgICAgICAgICAgICAgICAgJURhdGEgPSAoICVEYXRhLCAleyRXb3JrT3JkZXJ9ICk7CgogICAgICAgICAgICAgICAgICAgICMgc2V0IGNoYW5nZSBpZCBmcm9tIHdvcmtvcmRlciBkYXRhCiAgICAgICAgICAgICAgICAgICAgJENoYW5nZUlEID0gJFdvcmtPcmRlci0+e0NoYW5nZUlEfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGdldCBjaGFuZ2UgZGF0YQogICAgICAgICAgICAgICAgbXkgJENoYW5nZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZUdldCgKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IElEIGlmICEkQ2hhbmdlOwoKICAgICAgICAgICAgICAgICMgYWRkIGNoYW5nZSBkYXRhLAogICAgICAgICAgICAgICAgIyAoIGxldCB3b3Jrb3JkZXIgZGF0YSBvdmVyd3JpdGUKICAgICAgICAgICAgICAgICMgc29tZSBjaGFuZ2UgYXR0cmlidXRlcywgaS5lLiBQbGFubmVkU3RhcnRUaW1lLCBldGMuLi4gKQogICAgICAgICAgICAgICAgJURhdGEgPSAoICV7JENoYW5nZX0sICVEYXRhICk7CgogICAgICAgICAgICAgICAgIyBnZXQgdXNlciBkYXRhIGZvciBuZWVkZWQgdXNlciB0eXBlcwogICAgICAgICAgICAgICAgVVNFUlRZUEU6CiAgICAgICAgICAgICAgICBmb3IgbXkgJFVzZXJUeXBlIChxdyhDaGFuZ2VCdWlsZGVyIENoYW5nZU1hbmFnZXIgV29ya09yZGVyQWdlbnQpKSB7CgogICAgICAgICAgICAgICAgICAgICMgb25seSBzaG93IHRoZSBkYXRhIGlmIGVuYWJsZWQgaW4gU2hvd0NvbHVtbnMgY29uZmlnCiAgICAgICAgICAgICAgICAgICAgbmV4dCBVU0VSVFlQRSBpZiAhJFNob3dDb2x1bW5zTG9va3VweyRVc2VyVHlwZX07CgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgVXNlclR5cGUgYXR0cmlidXRlIGV4aXN0cyBlaXRoZXIgaW4gY2hhbmdlIG9yIHdvcmtvcmRlcgogICAgICAgICAgICAgICAgICAgIGlmICggISRDaGFuZ2UtPnsgJFVzZXJUeXBlIC4gJ0lEJyB9ICYmICEkRGF0YXsgJFVzZXJUeXBlIC4gJ0lEJyB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IFVTRVJUWVBFOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBnZXQgdXNlciBvYmplY3QKICAgICAgICAgICAgICAgICAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgICAgICAgICAgICAgICAgICMgd2hlbiBjYWxsZWQgZnJvbSB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJFVzZXJPYmplY3QtPmNhbignR2V0VXNlckRhdGEnKSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgd29ya2Fyb3VuZCBmb3IgY3VzdG9tZXIgaW50ZXJmYWNlCiAgICAgICAgICAgICAgICAgICAgICAgICMgaW4gdGhlIGN1c3RvbWVyIGludGVyZmFjZSB0aGUgVXNlck9iamVjdCBpcyBpbiBmYWN0IHRoZSBDdXN0b21lclVzZXJPYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgIyBzbyB3ZSBuZWVkIHRvIGNvcnJlY3QgdGhpcyBoZXJlIGJ5IGNyZWF0aW5nIGEgbmV3IFVzZXJPYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntDdXN0b21lclVzZXJPYmplY3R9ID0gJFVzZXJPYmplY3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IHVzZXIgZGF0YQogICAgICAgICAgICAgICAgICAgIG15ICVVc2VyID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJENoYW5nZS0+eyAkVXNlclR5cGUgLiAnSUQnIH0gfHwgJERhdGF7ICRVc2VyVHlwZSAuICdJRCcgfSwKICAgICAgICAgICAgICAgICAgICAgICAgQ2FjaGVkID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgIyBzZXQgdXNlciBkYXRhCiAgICAgICAgICAgICAgICAgICAgJERhdGF7ICRVc2VyVHlwZSAuICdVc2VyTG9naW4nIH0gICAgICAgID0gJFVzZXJ7VXNlckxvZ2lufTsKICAgICAgICAgICAgICAgICAgICAkRGF0YXsgJFVzZXJUeXBlIC4gJ1VzZXJGaXJzdG5hbWUnIH0gICAgPSAkVXNlcntVc2VyRmlyc3RuYW1lfTsKICAgICAgICAgICAgICAgICAgICAkRGF0YXsgJFVzZXJUeXBlIC4gJ1VzZXJMYXN0bmFtZScgfSAgICAgPSAkVXNlcntVc2VyTGFzdG5hbWV9OwogICAgICAgICAgICAgICAgICAgICREYXRheyAkVXNlclR5cGUgLiAnTGVmdFBhcmVudGhlc2lzJyB9ICA9ICcoJzsKICAgICAgICAgICAgICAgICAgICAkRGF0YXsgJFVzZXJUeXBlIC4gJ1JpZ2h0UGFyZW50aGVzaXMnIH0gPSAnKSc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBpZiB0aGUgc2VydmljZXMgY29sdW1uIHNob3VsZCBiZSBzaG93bgogICAgICAgICAgICAgICAgaWYgKCAkU2hvd0NvbHVtbnNMb29rdXB7U2VydmljZXN9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIHRvIHN0b3JlIHRoZSBsaW5rZWQgc2VydmljZSBkYXRhCiAgICAgICAgICAgICAgICAgICAgbXkgJExpbmtMaXN0V2l0aERhdGEgPSB7fTsKCiAgICAgICAgICAgICAgICAgICAgbXkgQFdvcmtPcmRlcklEczsKCiAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSB0aGUgY29tYmluZWQgbGlua2VkIHNlcnZpY2VzIGRhdGEgZnJvbSBhbGwgd29ya29yZGVycyBvZiB0aGlzIGNoYW5nZQogICAgICAgICAgICAgICAgICAgIGlmICggJFBhcmFte0NoYW5nZUlEc30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEBXb3JrT3JkZXJJRHMgPSBAeyAkQ2hhbmdlLT57V29ya09yZGVySURzfSB9OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSBvbmx5IHRoZSBsaW5rZWQgc2VydmljZXMgZm9yIHRoaXMgd29ya29yZGVyCiAgICAgICAgICAgICAgICAgICAgZWxzaWYgKCAkUGFyYW17V29ya09yZGVySURzfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgQFdvcmtPcmRlcklEcyA9ICgkSUQpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSB0aGUgY29tYmluZWQgbGlua2VkIHNlcnZpY2VzIGRhdGEKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFdvcmtPcmRlcklEIChAV29ya09yZGVySURzKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGdldCBsaW5rZWQgb2JqZWN0cyBvZiB0aGlzIHdvcmtvcmRlcgogICAgICAgICAgICAgICAgICAgICAgICBteSAkTGlua0xpc3RXaXRoRGF0YVdvcmtPcmRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0ID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleSAgICA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgT0JKRUNUOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJE9iamVjdCAoIHNvcnQga2V5cyAleyRMaW5rTGlzdFdpdGhEYXRhV29ya09yZGVyfSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9ubHkgc2hvdyBsaW5rZWQgc2VydmljZXMgb2Ygd29ya29yZGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRPYmplY3QgbmUgJ1NlcnZpY2UnICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgT0JKRUNUOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJTktUWVBFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRMaW5rVHlwZSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydCBrZXlzICV7ICRMaW5rTGlzdFdpdGhEYXRhV29ya09yZGVyLT57JE9iamVjdH0gfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElSRUNUSU9OOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkRGlyZWN0aW9uICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzICV7ICRMaW5rTGlzdFdpdGhEYXRhV29ya09yZGVyLT57JE9iamVjdH0tPnskTGlua1R5cGV9IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJElEICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQga2V5cyAlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMaW5rTGlzdFdpdGhEYXRhV29ya09yZGVyLT57JE9iamVjdH0tPnskTGlua1R5cGV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+eyREaXJlY3Rpb259CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbWJpbmUgdGhlIGxpbmtlZCBvYmplY3QgZGF0YSBmcm9tIGFsbCB3b3Jrb3JkZXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGlua0xpc3RXaXRoRGF0YS0+eyRPYmplY3R9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT57JElEfSA9ICRMaW5rTGlzdFdpdGhEYXRhV29ya09yZGVyLT57JE9iamVjdH0tPnskTGlua1R5cGV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT57JERpcmVjdGlvbn0tPnskSUR9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAjIGdldCB1bmlxdWUgc2VydmljZSBpZHMKICAgICAgICAgICAgICAgICAgICBteSAlVW5pcXVlU2VydmljZUlEczsKICAgICAgICAgICAgICAgICAgICBteSAkU2VydmljZXNSZWYgPSAkTGlua0xpc3RXaXRoRGF0YS0+e1NlcnZpY2V9IHx8IHt9OwogICAgICAgICAgICAgICAgICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXskU2VydmljZXNSZWZ9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBleHRyYWN0IGxpbmsgdHlwZSBMaXN0CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRMaW5rVHlwZUxpc3QgPSAkU2VydmljZXNSZWYtPnskTGlua1R5cGV9OwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICREaXJlY3Rpb24gKCBzb3J0IGtleXMgJXskTGlua1R5cGVMaXN0fSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGV4dHJhY3QgZGlyZWN0aW9uIGxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICREaXJlY3Rpb25MaXN0ID0gJFNlcnZpY2VzUmVmLT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29sbGVjdCB1bmlxdWUgc2VydmljZSBpZHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkU2VydmljZUlEICggc29ydCBrZXlzICV7JERpcmVjdGlvbkxpc3R9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRVbmlxdWVTZXJ2aWNlSURzeyRTZXJ2aWNlSUR9Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBkYXRhIGZvciBlYWNoIHNlcnZpY2UKICAgICAgICAgICAgICAgICAgICBteSBAU2VydmljZXNEYXRhOwogICAgICAgICAgICAgICAgICAgIFNFUlZJQ0VJRDoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAlVW5pcXVlU2VydmljZUlEcyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgaW4gdGhlIGN1c3RvbWVyIGZyb250ZW5kCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXtGcm9udGVuZH0gZXEgJ0N1c3RvbWVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgJFNlbGYtPntDb25maWd9LT57U2hvd09ubHlDaGFuZ2VzV2l0aEFsbG93ZWRTZXJ2aWNlc30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZG8gbm90IHNob3cgdGhpcyBzZXJ2aWNlIGlmIGN1c3RvbWVyIGlzIG5vdCBhbGxvd2VkIHRvIHVzZSBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBTRVJWSUNFSUQgaWYgISRDdXN0b21lclVzZXJTZXJ2aWNlc3skU2VydmljZUlEfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXQgc2VydmljZSBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICVTZXJ2aWNlRGF0YSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlR2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGFkZCBjdXJyZW50IGluY2lkZW50IHNpZ25hbAogICAgICAgICAgICAgICAgICAgICAgICAkU2VydmljZURhdGF7Q3VySW5jaVNpZ25hbH0gPSAkSW5jaVNpZ25hbHN7ICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSBzZXJ2aWNlIGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAU2VydmljZXNEYXRhLCBcJVNlcnZpY2VEYXRhOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBzb3J0IHNlcnZpY2VzIGRhdGEgYnkgc2VydmljZSBuYW1lCiAgICAgICAgICAgICAgICAgICAgQFNlcnZpY2VzRGF0YSA9IHNvcnQgeyAkYS0+e05hbWV9IGNtcCAkYi0+e05hbWV9IH0gQFNlcnZpY2VzRGF0YTsKCiAgICAgICAgICAgICAgICAgICAgIyBpbiB0aGUgY3VzdG9tZXIgZnJvbnRlbmQKICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXtGcm9udGVuZH0gZXEgJ0N1c3RvbWVyJwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkU2VsZi0+e0NvbmZpZ30tPntTaG93T25seUNoYW5nZXNXaXRoQWxsb3dlZFNlcnZpY2VzfQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBkbyBub3Qgc2hvdyB0aGUgY2hhbmdlIGlmIGl0IGhhcyBubyBzZXJ2aWNlcwogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IElEIGlmICFAU2VydmljZXNEYXRhOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSBzZXJ2aWNlcyBkYXRhCiAgICAgICAgICAgICAgICAgICAgJFN1YkVsZW1lbnREYXRhe1NlcnZpY2VzfSA9IFxAU2VydmljZXNEYXRhOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgYnVpbGQgcmVjb3JkIGJsb2NrCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgY29sdW1uIHJlY29yZCBibG9ja3MKICAgICAgICAgICAgICAgIGlmIChAU2hvd0NvbHVtbnMpIHsKCiAgICAgICAgICAgICAgICAgICAgQ09MVU1OOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkQ29sdW1uIChAU2hvd0NvbHVtbnMpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgaGFuZGxlIGR5bmFtaWMgZmllbGRzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJENvbHVtbiA9fiBteyBcQSBEeW5hbWljRmllbGRfICguKykgXHogfXhtcyApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGdldCBkeW5hbWljIGZpZWxkIGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICREeW5hbWljRmllbGQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXQgZHluYW1pYyBmaWVsZCBiYWNrZW5kIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBnZXQgZmllbGQgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRWYWx1ZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkVmFsdWVTdHJnID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkRpc3BsYXlWYWx1ZVJlbmRlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlTWF4Q2hhcnMgICAgICA9PiAyMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJExheW91dE9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJFZhbHVlU3RyZy0+e1ZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJFZhbHVlU3RyZy0+e1RpdGxlfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmREeW5hbWljRmllbGRQbGFpbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZVN0cmctPntWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlID0+ICRWYWx1ZVN0cmctPntUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICMgaGFuZGxlICJub3JtYWwiIGZpZWxkcwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBpZiB0aGlzIGNvbHVtbiBjb250YWlucyBzdWItZWxlbWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkU3ViRWxlbWVudERhdGF7JENvbHVtbn0gJiYgcmVmICRTdWJFbGVtZW50RGF0YXskQ29sdW1ufSBlcSAnQVJSQVknICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkU3ViRWxlbWVudCAoIEB7ICRTdWJFbGVtZW50RGF0YXskQ29sdW1ufSB9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNob3cgc3ViLWVsZW1lbnRzIG9mIGNvbHVtbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiAuICdTdWJFbGVtZW50JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICV7JFN1YkVsZW1lbnR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRTdWJFbGVtZW50RGF0YXtTZXJ2aWNlc30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiAuICdTdWJFbGVtZW50RW1wdHknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAjIGRvIG5vdCBkaXNwbGF5IGNvbHVtbnMgYXMgbGlua3MgaW4gdGhlIGN1c3RvbWVyIGZyb250ZW5kCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgQ09MVU1OIGlmICRQYXJhbXtGcm9udGVuZH0gZXEgJ0N1c3RvbWVyJzsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgc2hvdyBsaW5rcyBpZiBhdmFpbGFibGUKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiAuICdMaW5rU3RhcnQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiAuICdMaW5rRW5kJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgaWYgdGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gc2hvdywgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaXMgZGlzcGxheWVkIGluIHRoZSB0YWJsZQogICAgZWxzZSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ05vRGF0YUZvdW5kTXNnJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUb3RhbENvbHVtbnMgPT4gc2NhbGFyIEBTaG93Q29sdW1ucywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgdXNlIHRlbXBsYXRlCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTUNoYW5nZU92ZXJ2aWV3U21hbGwnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJFNlbGYtPntWaWV3VHlwZX0sCiAgICAgICAgICAgIENvbHVtbkNvdW50ID0+IHNjYWxhciBAU2hvd0NvbHVtbnMsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01UZW1wbGF0ZTo6T3ZlcnZpZXdTbWFsbDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpUZW1wbGF0ZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlVzZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IFVzZXJJRCBwYXJhbQogICAgJFNlbGYtPntVc2VySUR9ID0gJFBhcmFte1VzZXJJRH0gfHwgZGllICJHb3Qgbm8gVXNlcklEISI7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbG9nIG9iamVjdAogICAgbXkgJExvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFBhZ2VTaG93biBTdGFydEhpdCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBuZWVkIFRlbXBsYXRlSURzCiAgICBpZiAoICEkUGFyYW17VGVtcGxhdGVJRHN9ICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgdGhlIFRlbXBsYXRlSURzIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzdG9yZSB0aGUgdGVtcGxhdGUgSURzCiAgICBteSBASURzID0gQHsgJFBhcmFte1RlbXBsYXRlSURzfSB9OwoKICAgICMgY2hlY2sgU2hvd0NvbHVtbnMgcGFyYW1ldGVyCiAgICBteSBAU2hvd0NvbHVtbnM7CiAgICBpZiAoICRQYXJhbXtTaG93Q29sdW1uc30gJiYgcmVmICRQYXJhbXtTaG93Q29sdW1uc30gZXEgJ0FSUkFZJyApIHsKICAgICAgICBAU2hvd0NvbHVtbnMgPSBAeyAkUGFyYW17U2hvd0NvbHVtbnN9IH07CiAgICB9CgogICAgIyBmb3IgdGhlIHRlbXBsYXRlIGRlbGV0aW9uIGxpbmsgd2UgbmVlZCB0byBjaGVjayB0aGUgcGVybWlzc2lvbnMKICAgIG15ICREZWxldGVGb3VuZCA9IGdyZXAgeyAkXyBlcSAnRGVsZXRlJyB9IEBTaG93Q29sdW1uczsKICAgIGlmICgkRGVsZXRlRm91bmQpIHsKICAgICAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgICAgICBteSAkR3JvdXBPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CiAgICAgICAgbXkgJE1vZHVsZVJlZyAgICA9ICRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57QWdlbnRJVFNNVGVtcGxhdGVEZWxldGV9OwoKICAgICAgICBteSAlR3JvdXBzOwogICAgICAgICRHcm91cHN7R3JvdXBSb30gPSB7CiAgICAgICAgICAgIHJldmVyc2UgJEdyb3VwT2JqZWN0LT5QZXJtaXNzaW9uVXNlckdldCgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBUeXBlICAgPT4gJ3JvJywKICAgICAgICAgICAgICAgICkKICAgICAgICB9OwogICAgICAgICRHcm91cHN7R3JvdXB9ID0gewogICAgICAgICAgICByZXZlcnNlICRHcm91cE9iamVjdC0+UGVybWlzc2lvblVzZXJHZXQoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICAgICAgICAgICAgICApCiAgICAgICAgfTsKCiAgICAgICAgbXkgJEFjY2Vzc09rOwogICAgICAgIGZvciBteSAkR3JvdXBUeXBlIChxdyhHcm91cCBHcm91cFJvKSkgewoKICAgICAgICAgICAgUEVSTUlTU0lPTjoKICAgICAgICAgICAgZm9yIG15ICRHcm91cCAoIEB7ICRNb2R1bGVSZWctPnskR3JvdXBUeXBlfSB8fCBbXSB9ICkgewogICAgICAgICAgICAgICAgbmV4dCBQRVJNSVNTSU9OIGlmICEkR3JvdXBzeyRHcm91cFR5cGV9LT57JEdyb3VwfTsKCiAgICAgICAgICAgICAgICAkQWNjZXNzT2sgPSAxOwoKICAgICAgICAgICAgICAgIGxhc3QgUEVSTUlTU0lPTjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAhJEFjY2Vzc09rICkgewogICAgICAgICAgICBAU2hvd0NvbHVtbnMgPSBncmVwIHsgJF8gbmUgJ0RlbGV0ZScgfSBAU2hvd0NvbHVtbnM7CiAgICAgICAgfQogICAgfQoKICAgIG15IEBDb2wgPSAocXcoTmFtZSBUZW1wbGF0ZVR5cGVJRCBWYWxpZElEIENyZWF0ZVRpbWUgQ2hhbmdlVGltZSkpOwogICAgbXkgJU9yZGVyOwogICAgbXkgJUNTUzsKCiAgICBmb3IgbXkgJEtleSAoQENvbCkgewogICAgICAgIGlmICggJFBhcmFte1NvcnRCeX0gJiYgKCAkUGFyYW17U29ydEJ5fSBlcSAkS2V5ICkgKSB7CiAgICAgICAgICAgIGlmICggJFBhcmFte09yZGVyQnl9ICYmICggJFBhcmFte09yZGVyQnl9IGVxICdVcCcgKSApIHsKICAgICAgICAgICAgICAgICRPcmRlcnsgJ09yZGVyQnknIC4gJEtleSB9ID0gJ0Rvd24nOwogICAgICAgICAgICAgICAgJENTU3sgJ1NvcnQnIC4gJEtleSB9ICAgICAgPSAnIFNvcnREZXNjZW5kaW5nJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRPcmRlcnsgJ09yZGVyQnknIC4gJEtleSB9ID0gJ1VwJzsKICAgICAgICAgICAgICAgICRDU1N7ICdTb3J0JyAuICRLZXkgfSAgICAgID0gJyBTb3J0QXNjZW5kaW5nJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgYnVpbGQgY29sdW1uIGhlYWRlciBibG9ja3MKICAgIGlmIChAU2hvd0NvbHVtbnMpIHsKICAgICAgICBmb3IgbXkgJENvbHVtbiAoQFNob3dDb2x1bW5zKSB7CgogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcgLiAkQ29sdW1uIC4gJ0hlYWRlcicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJU9yZGVyLAogICAgICAgICAgICAgICAgICAgICVDU1MsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkT3V0cHV0ICA9ICcnOwogICAgbXkgJENvdW50ZXIgPSAwOwoKICAgICMgc2hvdyB0ZW1wbGF0ZXMgaWYgdGhlcmUgYXJlIHNvbWUKICAgIGlmIChASURzKSB7CgogICAgICAgIElEOgogICAgICAgIGZvciBteSAkSUQgKEBJRHMpIHsKICAgICAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvdW50ZXIgPj0gJFBhcmFte1N0YXJ0SGl0fQogICAgICAgICAgICAgICAgJiYgJENvdW50ZXIgPCAoICRQYXJhbXtQYWdlU2hvd259ICsgJFBhcmFte1N0YXJ0SGl0fSApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGRpc3BsYXkgdGhlIHRlbXBsYXRlIGRhdGEKICAgICAgICAgICAgICAgIG15ICRUZW1wbGF0ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpUZW1wbGF0ZScpLT5UZW1wbGF0ZUdldCgKICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSAlRGF0YSA9ICV7JFRlbXBsYXRlfTsKCiAgICAgICAgICAgICAgICAjIGh1bWFuIHJlYWRhYmxlIHZhbGlkaXR5CiAgICAgICAgICAgICAgICAkRGF0YXtWYWxpZH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMb29rdXAoIFZhbGlkSUQgPT4gJERhdGF7VmFsaWRJRH0gKTsKCiAgICAgICAgICAgICAgICAjIGdldCB1c2VyIGRhdGEgZm9yIG5lZWRlZCB1c2VyIHR5cGVzCiAgICAgICAgICAgICAgICBVU0VSVFlQRToKICAgICAgICAgICAgICAgIGZvciBteSAkVXNlclR5cGUgKHF3KENyZWF0ZUJ5IENoYW5nZUJ5KSkgewoKICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIFVzZXJUeXBlIGF0dHJpYnV0ZSBleGlzdHMgaW4gdGhlIHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgICAgbmV4dCBVU0VSVFlQRSBpZiAhJERhdGF7JFVzZXJUeXBlfTsKCiAgICAgICAgICAgICAgICAgICAgIyBnZXQgdXNlciBkYXRhCiAgICAgICAgICAgICAgICAgICAgbXkgJVVzZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICREYXRheyRVc2VyVHlwZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIENhY2hlZCA9PiAxLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgc2V0IHVzZXIgZGF0YQogICAgICAgICAgICAgICAgICAgICREYXRheyAkVXNlclR5cGUgLiAnVXNlckxvZ2luJyB9ICAgICAgICA9ICRVc2Vye1VzZXJMb2dpbn07CiAgICAgICAgICAgICAgICAgICAgJERhdGF7ICRVc2VyVHlwZSAuICdVc2VyRmlyc3RuYW1lJyB9ICAgID0gJFVzZXJ7VXNlckZpcnN0bmFtZX07CiAgICAgICAgICAgICAgICAgICAgJERhdGF7ICRVc2VyVHlwZSAuICdVc2VyTGFzdG5hbWUnIH0gICAgID0gJFVzZXJ7VXNlckxhc3RuYW1lfTsKICAgICAgICAgICAgICAgICAgICAkRGF0YXsgJFVzZXJUeXBlIC4gJ0xlZnRQYXJlbnRoZXNpcycgfSAgPSAnKCc7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7ICRVc2VyVHlwZSAuICdSaWdodFBhcmVudGhlc2lzJyB9ID0gJyknOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgYnVpbGQgcmVjb3JkIGJsb2NrCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgY29sdW1uIHJlY29yZCBibG9ja3MKICAgICAgICAgICAgICAgIGlmIChAU2hvd0NvbHVtbnMpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJENvbHVtbiAoQFNob3dDb2x1bW5zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJENvbHVtbiBlcSAnRWRpdENvbnRlbnQnICYmICREYXRhe1R5cGV9IGVxICdDQUInICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkRWRpdENvbnRlbnRDQUInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBpZiB0aGVyZSBhcmUgbm8gdGVtcGxhdGVzIHRvIHNob3csIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlIGlzIGRpc3BsYXllZCBpbiB0aGUgdGFibGUKICAgIGVsc2UgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgVG90YWxDb2x1bW5zID0+IHNjYWxhciBAU2hvd0NvbHVtbnMsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHVzZSB0ZW1wbGF0ZQogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3U21hbGwnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJFNlbGYtPntWaWV3VHlwZX0sCiAgICAgICAgICAgIENvbHVtbkNvdW50ID0+IHNjYWxhciBAU2hvd0NvbHVtbnMsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Xb3JrT3JkZXI6Ok1lbnVHZW5lcmljOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgVXNlcklEIHBhcmFtCiAgICAkU2VsZi0+e1VzZXJJRH0gPSAkUGFyYW17VXNlcklEfSB8fCBkaWUgIkdvdCBubyBVc2VySUQhIjsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1dvcmtPcmRlcn0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFdvcmtPcmRlciEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBmb3IgdGhlIHJlbGV2YW50IGFjdGlvbgogICAgbXkgJEZyb250ZW5kQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJJVFNNV29ya09yZGVyOjpGcm9udGVuZDo6JFBhcmFte0NvbmZpZ30tPntBY3Rpb259Iik7CgogICAgIyBnZXQgdGhlIHJlcXVpcmVkIHByaXZpbGVnZSwgJ3JvJyBvciAncncnCiAgICBteSAkUmVxdWlyZWRQcml2OwogICAgaWYgKCAkRnJvbnRlbmRDb25maWcgJiYgJEZyb250ZW5kQ29uZmlnLT57UGVybWlzc2lvbn0gKSB7CgogICAgICAgICMgZ2V0IHRoZSByZXF1aXJlZCBwcml2IGZyb20gdGhlIGZyb250ZW5kIGNvbmZpZ3VyYXRpb24KICAgICAgICAkUmVxdWlyZWRQcml2ID0gJEZyb250ZW5kQ29uZmlnLT57UGVybWlzc2lvbn07CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSBlcSAnQWdlbnRMaW5rT2JqZWN0JyApIHsKCiAgICAgICAgIyB0aGUgTGluay1saW5rIGlzIGEgc3BlY2lhbCBjYXNlLCBhcyBpdCBpcyBub3Qgc3BlY2lmaWMgdG8gSVRTTUNoYW5nZQogICAgICAgICRSZXF1aXJlZFByaXYgPSAncncnOwogICAgfQoKICAgIG15ICRBY2Nlc3M7CiAgICBpZiAoICEkUmVxdWlyZWRQcml2ICkgewoKICAgICAgICAjIERpc3BsYXkgdGhlIG1lbnUtbGluaywgd2hlbiBubyBwcml2aWxlZ2UgaXMgcmVxdWlyZWQKICAgICAgICAkQWNjZXNzID0gMTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGNoZWNrIHBlcm1pc3Npb25zLCBiYXNlZCBvbiB0aGUgcmVxdWlyZWQgcHJpdmlsZWdlCiAgICAgICAgJEFjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPlBlcm1pc3Npb24oCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICRSZXF1aXJlZFByaXYsCiAgICAgICAgICAgIEFjdGlvbiAgICAgID0+ICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSwKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFBhcmFte1dvcmtPcmRlcn0tPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgTG9nTm8gICAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn0gaWYgISRBY2Nlc3M7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIG91dHB1dCBtZW51IGJsb2NrCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnTWVudScgKTsKCiAgICAjIG91dHB1dCBzZXBlcmF0b3IsIHdoZW4gdGhpcyBpcyBub3QgdGhlIGZpcnN0IG1lbnUgaXRlbQogICAgaWYgKCAkUGFyYW17Q291bnRlcn0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soIE5hbWUgPT4gJ01lbnVJdGVtU3BsaXQnICk7CiAgICB9CgogICAgIyBvdXRwdXQgbWVudSBpdGVtCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdNZW51SXRlbScsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJXsgJFBhcmFte1dvcmtPcmRlcn0gfSwKICAgICAgICAgICAgJXsgJFBhcmFte0NvbmZpZ30gfSwKICAgICAgICB9LAogICAgKTsKICAgICRQYXJhbXtDb3VudGVyfSsrOwoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn07Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Xb3JrT3JkZXI6Ok1lbnVXaXRoUGVybWlzc2lvbkZyb21DaGFuZ2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBVc2VySUQgcGFyYW0KICAgICRTZWxmLT57VXNlcklEfSA9ICRQYXJhbXtVc2VySUR9IHx8IGRpZSAiR290IG5vIFVzZXJJRCEiOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17V29ya09yZGVyfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgV29ya09yZGVyIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgY29uZmlnIGZvciB0aGUgcmVsZXZhbnQgYWN0aW9uCiAgICBteSAkRnJvbnRlbmRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjokUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0iKTsKCiAgICAjIGdldCB0aGUgcmVxdWlyZWQgcHJpdmlsZWdlLCAncm8nIG9yICdydycKICAgIG15ICRSZXF1aXJlZFByaXY7CiAgICBpZiAoJEZyb250ZW5kQ29uZmlnKSB7CgogICAgICAgICMgZ2V0IHRoZSByZXF1aXJlZCBwcml2IGZyb20gdGhlIGZyb250ZW5kIGNvbmZpZ3VyYXRpb24KICAgICAgICAkUmVxdWlyZWRQcml2ID0gJEZyb250ZW5kQ29uZmlnLT57UGVybWlzc2lvbn07CiAgICB9CgogICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgbXkgJEFjY2VzczsKICAgIGlmICggISRSZXF1aXJlZFByaXYgKSB7CgogICAgICAgICMgRGlzcGxheSB0aGUgbWVudS1saW5rLCB3aGVuIG5vIHByaXZpbGVnZSBpcyByZXF1aXJlZAogICAgICAgICRBY2Nlc3MgPSAxOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgY2hlY2sgcGVybWlzc2lvbnMsIGJhc2VkIG9uIHRoZSByZXF1aXJlZCBwcml2aWxlZ2UKICAgICAgICAkQWNjZXNzID0gJENoYW5nZU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJFJlcXVpcmVkUHJpdiwKICAgICAgICAgICAgQWN0aW9uICAgICAgPT4gJFBhcmFte0NvbmZpZ30tPntBY3Rpb259LAogICAgICAgICAgICBDaGFuZ2VJRCAgICA9PiAkUGFyYW17V29ya09yZGVyfS0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFBhcmFte1dvcmtPcmRlcn0tPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgTG9nTm8gICAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn0gaWYgISRBY2Nlc3M7CgogICAgIyBnZXQgdGhlIGNoYW5nZSBkYXRhCiAgICBteSAkQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtXb3JrT3JkZXJ9LT57Q2hhbmdlSUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIG91dHB1dCBtZW51IGJsb2NrCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jayggTmFtZSA9PiAnTWVudScgKTsKCiAgICAjIG91dHB1dCBtZW51IGl0ZW0KICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01lbnVJdGVtJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyRDaGFuZ2V9LAogICAgICAgICAgICAleyAkUGFyYW17V29ya09yZGVyfSB9LAogICAgICAgICAgICAleyAkUGFyYW17Q29uZmlnfSB9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgY2hlY2sgaWYgYSBkaWFsb2cgaGFzIHRvIGJlIHNob3duCiAgICBpZiAoICRQYXJhbXtDb25maWd9LT57RGlhbG9nVGl0bGV9ICkgewoKICAgICAgICAjIG91dHB1dCBjb25maXJtYXRpb24gZGlhbG9nCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Nob3dDb25maXJtRGlhbG9nJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAleyRDaGFuZ2V9LAogICAgICAgICAgICAgICAgJXsgJFBhcmFte1dvcmtPcmRlcn0gfSwKICAgICAgICAgICAgICAgICV7ICRQYXJhbXtDb25maWd9IH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAkUGFyYW17Q291bnRlcn0rKzsKCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01Xb3JrT3JkZXI6Ok1lbnVXaXRoVGFrZVBlcm1pc3Npb247Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBVc2VySUQgcGFyYW0KICAgICRTZWxmLT57VXNlcklEfSA9ICRQYXJhbXtVc2VySUR9IHx8IGRpZSAiR290IG5vIFVzZXJJRCEiOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17V29ya09yZGVyfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgV29ya09yZGVyIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgY29uZmlnIGZvciB0aGUgcmVsZXZhbnQgYWN0aW9uCiAgICBteSAkRnJvbnRlbmRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIklUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjokUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0iKTsKCiAgICAjIGdldCB0aGUgcmVxdWlyZWQgcHJpdmlsZWdlLCAncm8nIG9yICdydycKICAgIG15ICRSZXF1aXJlZFByaXY7CiAgICBpZiAoICRGcm9udGVuZENvbmZpZyAmJiAkRnJvbnRlbmRDb25maWctPntQZXJtaXNzaW9ufSApIHsKCiAgICAgICAgIyBnZXQgdGhlIHJlcXVpcmVkIHByaXYgZnJvbSB0aGUgZnJvbnRlbmQgY29uZmlndXJhdGlvbgogICAgICAgICRSZXF1aXJlZFByaXYgPSAkRnJvbnRlbmRDb25maWctPntQZXJtaXNzaW9ufTsKICAgIH0KCiAgICBteSAkQWNjZXNzOwogICAgaWYgKCAhJFJlcXVpcmVkUHJpdiApIHsKCiAgICAgICAgIyBEaXNwbGF5IHRoZSBtZW51LWxpbmssIHdoZW4gbm8gcHJpdmlsZWdlIGlzIHJlcXVpcmVkCiAgICAgICAgJEFjY2VzcyA9IDE7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBjaGVjayBwZXJtaXNzaW9ucywgYmFzZWQgb24gdGhlIHJlcXVpcmVkIHByaXZpbGVnZQogICAgICAgICMgcXVlcnkgdGhlIHBlcm1pc3Npb24gbW9kdWxlcyByZWdpc3RlcmVkIGluICdJVFNNV29ya09yZGVyOjpUYWtlUGVybWlzc2lvbicKICAgICAgICAkQWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+UGVybWlzc2lvbigKICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICAgID0+ICRSZXF1aXJlZFByaXYsCiAgICAgICAgICAgIEFjdGlvbiAgICAgICAgICAgICA9PiAkUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0sCiAgICAgICAgICAgIFBlcm1pc3Npb25SZWdpc3RyeSA9PiAnSVRTTVdvcmtPcmRlcjo6VGFrZVBlcm1pc3Npb24nLAogICAgICAgICAgICBXb3JrT3JkZXJJRCAgICAgICAgPT4gJFBhcmFte1dvcmtPcmRlcn0tPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgIExvZ05vICAgICAgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfSBpZiAhJEFjY2VzczsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgb3V0cHV0IG1lbnUgYmxvY2sKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKCBOYW1lID0+ICdNZW51JyApOwoKICAgICMgb3V0cHV0IG1lbnUgaXRlbQogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTWVudUl0ZW0nLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7ICRQYXJhbXtXb3JrT3JkZXJ9IH0sCiAgICAgICAgICAgICV7ICRQYXJhbXtDb25maWd9IH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBvdXRwdXQgY29uZmlybWF0aW9uIGRpYWxvZwogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU2hvd0NvbmZpcm1EaWFsb2cnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7ICRQYXJhbXtXb3JrT3JkZXJ9IH0sCiAgICAgICAgICAgICV7ICRQYXJhbXtDb25maWd9IH0sCiAgICAgICAgfSwKICAgICk7CgogICAgJFBhcmFte0NvdW50ZXJ9Kys7CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dDo6SVRTTUNoYW5nZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgo9b3ZlciA0Cgo9aXRlbSBJVFNNQ2hhbmdlQnVpbGRXb3JrT3JkZXJHcmFwaCgpCgpyZXR1cm5zIGEgb3V0cHV0IHN0cmluZyBmb3IgV29ya09yZGVyIGdyYXBoCgogICAgbXkgJFN0cmluZyA9ICRMYXlvdXRPYmplY3QtPklUU01DaGFuZ2VCdWlsZFdvcmtPcmRlckdyYXBoKAogICAgICAgIENoYW5nZSAgICAgICAgICAgICA9PiAkQ2hhbmdlUmVmLAogICAgICAgIFdvcmtPcmRlck9iamVjdCAgICA9PiAkV29ya09yZGVyT2JqZWN0LAogICAgICAgIER5bmFtaWNGaWVsZE9iamVjdCA9PiAkRHluYW1pY0ZpZWxkT2JqZWN0LAogICAgICAgIEJhY2tlbmRPYmplY3QgICAgICA9PiAkQmFja2VuZE9iamVjdCwKICAgICk7Cgo9Y3V0CgpzdWIgSVRTTUNoYW5nZUJ1aWxkV29ya09yZGVyR3JhcGggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsb2cgb2JqZWN0CiAgICBteSAkTG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgZm9yIGNoYW5nZQogICAgbXkgJENoYW5nZSA9ICRQYXJhbXtDaGFuZ2V9OwogICAgaWYgKCAhJENoYW5nZSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENoYW5nZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgd29ya29yZGVyIG9iamVjdAogICAgaWYgKCAhJFBhcmFte1dvcmtPcmRlck9iamVjdH0gKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBXb3JrT3JkZXJPYmplY3QhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHN0b3JlIHdvcmtvcmRlciBvYmplY3QgbG9jYWxseQogICAgbXkgJFdvcmtPcmRlck9iamVjdCA9ICRQYXJhbXtXb3JrT3JkZXJPYmplY3R9OwoKICAgICMgY2hlY2sgaWYgd29ya29yZGVycyBhcmUgYXZhaWxhYmxlCiAgICByZXR1cm4gaWYgISRDaGFuZ2UtPntXb3JrT3JkZXJDb3VudH07CgogICAgIyBleHRyYSBjaGVjayBmb3IgQVJSQVktcmVmCiAgICByZXR1cm4gaWYgcmVmICRDaGFuZ2UtPntXb3JrT3JkZXJJRHN9IG5lICdBUlJBWSc7CgogICAgIyBoYXNoIGZvciBzbWFsbGVzdCB0aW1lCiAgICBteSAlVGltZTsKCiAgICAjIGdldCB0aW1lIG9iamVjdAogICAgbXkgJFRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpOwoKICAgIFRJTUVUWVBFOgogICAgZm9yIG15ICRUaW1lVHlwZSAocXcoU3RhcnQgRW5kKSkgewoKICAgICAgICAjIGFjdHVhbCB0aW1lIG5vdCBzZXQsIHNvIHdlIGNhbiB1c2UgcGxhbm5lZAogICAgICAgIGlmICggISRDaGFuZ2UtPnsiQWN0dWFsJHtUaW1lVHlwZX1UaW1lIn0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHRpbWUgaXMgc2V0CiAgICAgICAgICAgIG5leHQgVElNRVRZUEUgaWYgISRDaGFuZ2UtPnsiUGxhbm5lZCR7VGltZVR5cGV9VGltZSJ9OwoKICAgICAgICAgICAgIyB0cmFuc2xhdGUgdG8gdGltZXN0YW1wCiAgICAgICAgICAgICRUaW1leyIke1RpbWVUeXBlfVRpbWUifSA9ICRUaW1lT2JqZWN0LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkQ2hhbmdlLT57IlBsYW5uZWQke1RpbWVUeXBlfVRpbWUifSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMganVtcCB0byBuZXh0IHR5cGUKICAgICAgICAgICAgbmV4dCBUSU1FVFlQRTsKICAgICAgICB9CgogICAgICAgICMgdHJhbnNsYXRlIHBsYW5uZWQgdGltZSB0byB0aW1lc3RhbXAgZm9yIGVxdWF0aW9uCiAgICAgICAgJFRpbWV7IlBsYW5uZWQke1RpbWVUeXBlfVRpbWUifSA9ICRUaW1lT2JqZWN0LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgU3RyaW5nID0+ICRDaGFuZ2UtPnsiUGxhbm5lZCR7VGltZVR5cGV9VGltZSJ9LAogICAgICAgICk7CgogICAgICAgICMgdHJhbnNsYXRlIGFjdHVhbCB0aW1lIHRvIHRpbWVzdGFtcCBmb3IgZXF1YXRpb24KICAgICAgICAkVGltZXsiQWN0dWFsJHtUaW1lVHlwZX1UaW1lIn0gPSAkVGltZU9iamVjdC0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgIFN0cmluZyA9PiAkQ2hhbmdlLT57IkFjdHVhbCR7VGltZVR5cGV9VGltZSJ9LAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXQgdGltZSBhdHRyaWJ1dGVzIHRvIGVtcHR5IHN0cmluZyBpZiBub3QgZGVmaW5lZAogICAgZm9yIG15ICRUaW1lQXR0cmlidXRlIChxdyhQbGFubmVkU3RhcnRUaW1lIFBsYW5uZWRFbmRUaW1lIEFjdHVhbFN0YXJ0VGltZSBBY3R1YWxFbmRUaW1lKSkgewogICAgICAgICRUaW1leyRUaW1lQXR0cmlidXRlfSAvLz0gJyc7CiAgICB9CgogICAgIyBnZXQgc21hbGxlc3Qgc3RhcnQgdGltZQogICAgaWYgKCAhJFRpbWV7U3RhcnRUaW1lfSApIHsKICAgICAgICAkVGltZXtTdGFydFRpbWV9ID0gKCAkVGltZXtQbGFubmVkU3RhcnRUaW1lfSBsdCAkVGltZXtBY3R1YWxTdGFydFRpbWV9ICkKICAgICAgICAgICAgPyAkVGltZXtQbGFubmVkU3RhcnRUaW1lfQogICAgICAgICAgICA6ICRUaW1le0FjdHVhbFN0YXJ0VGltZX07CiAgICB9CgogICAgIyBnZXQgaGlnaGVzdCBlbmQgdGltZQogICAgaWYgKCAhJFRpbWV7RW5kVGltZX0gKSB7CiAgICAgICAgJFRpbWV7RW5kVGltZX0gPSAoICRUaW1le1BsYW5uZWRFbmRUaW1lfSBndCAkVGltZXtBY3R1YWxFbmRUaW1lfSApCiAgICAgICAgICAgID8gJFRpbWV7UGxhbm5lZEVuZFRpbWV9CiAgICAgICAgICAgIDogJFRpbWV7QWN0dWFsRW5kVGltZX07CiAgICB9CgogICAgIyBjaGVjayBmb3IgcmVhbCBlbmQgb2YgZW5kIHRpbWUgZm9yIHNjYWxlIGFuZCBncmFwaCBpdGVtcwogICAgIyBvbmx5IGlmIEFjdHVhbFN0YXJ0VGltZSBpcyBzZXQKICAgIGlmICgKICAgICAgICAkVGltZXtBY3R1YWxTdGFydFRpbWV9CiAgICAgICAgJiYgISRUaW1le0FjdHVhbEVuZFRpbWV9CiAgICAgICAgJiYgKCAkVGltZXtFbmRUaW1lfSBsdCAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpICkKICAgICAgICApCiAgICB7CiAgICAgICAgJFRpbWV7RW5kVGltZX0gPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpOwogICAgfQoKICAgICMgY2FsY3VsYXRlIHRpY2tzIGZvciBjaGFuZ2UKICAgIG15ICRDaGFuZ2VUaWNrcyA9ICRTZWxmLT5fSVRTTUNoYW5nZUdldENoYW5nZVRpY2tzKAogICAgICAgIFN0YXJ0ID0+ICRUaW1le1N0YXJ0VGltZX0sCiAgICAgICAgRW5kICAgPT4gJFRpbWV7RW5kVGltZX0sCiAgICApOwoKICAgICMgY2hlY2sgZm9yIHZhbGlkIHRpY2tzCiAgICBpZiAoICEkQ2hhbmdlVGlja3MgKSB7CiAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnVW5hYmxlIHRvIGNhbGN1bGF0ZSB0aW1lIHNjYWxlLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCB3b3Jrb3JkZXJzIG9mIGNoYW5nZQogICAgbXkgQFdvcmtPcmRlcnM7CiAgICBXT1JLT1JERVJJRDoKICAgIGZvciBteSAkV29ya09yZGVySUQgKCBAeyAkQ2hhbmdlLT57V29ya09yZGVySURzfSB9ICkgewogICAgICAgIG15ICRXb3JrT3JkZXIgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgbmV4dCBXT1JLT1JERVJJRCBpZiAhJFdvcmtPcmRlcjsKCiAgICAgICAgcHVzaCBAV29ya09yZGVycywgJFdvcmtPcmRlcjsKICAgIH0KCiAgICAjIGdldCBjb25maWcgc2V0dGluZ3MKICAgIG15ICRDaGFuZ2Vab29tQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlWm9vbScpOwoKICAgICMgY2hlY2sgY29uZmlnIHNldHRpbmcKICAgIGlmICggISRDaGFuZ2Vab29tQ29uZmlnICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU3lzQ29uZmlnIHNldHRpbmdzIGZvciBJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlWm9vbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgZ3JhcGggY29uZmlnIHNldHRpbmcKICAgIGlmICggISRDaGFuZ2Vab29tQ29uZmlnLT57V29ya09yZGVyR3JhcGh9ICkgewogICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU3lzQ29uZmlnIHNldHRpbmdzIGZvciAnCiAgICAgICAgICAgICAgICAuICdJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlWm9vbSMjI1dvcmtPcmRlckdyYXBoIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyB2YWxpZGl0eSBzZXR0aW5ncyBvZiBncmFwaCBzZXR0aW5ncwogICAgbXkgJVdvcmtPcmRlckdyYXBoQ2hlY2sgPSAoCiAgICAgICAgVGltZUxpbmVDb2xvciAgICAgICAgICAgPT4gJyNbYS1mQS1GXGRdezZ9JywKICAgICAgICBUaW1lTGluZVdpZHRoICAgICAgICAgICA9PiAnXGR7MSwyfScsCiAgICAgICAgdW5kZWZpbmVkX3BsYW5uZWRfY29sb3IgPT4gJyNbYS1mQS1GXGRdezZ9JywKICAgICAgICB1bmRlZmluZWRfYWN0dWFsX2NvbG9yICA9PiAnI1thLWZBLUZcZF17Nn0nLAogICAgKTsKCiAgICAjIGNoZWNrIHZhbGlkaXR5IG9mIGdyYXBoIHNldHRpbmdzCiAgICBteSAkV29ya09yZGVyR3JhcGhDb25maWcgPSAkQ2hhbmdlWm9vbUNvbmZpZy0+e1dvcmtPcmRlckdyYXBofTsKICAgIGZvciBteSAkR3JhcGhTZXR0aW5nICggc29ydCBrZXlzICVXb3JrT3JkZXJHcmFwaENoZWNrICkgewoKICAgICAgICAjIGNoZWNrIGV4aXN0ZW5zZSBvZiBjb25maWcgc2V0dGluZwogICAgICAgIGlmICggISRXb3JrT3JkZXJHcmFwaENvbmZpZy0+eyRHcmFwaFNldHRpbmd9ICkgewoKICAgICAgICAgICAgIyBkaXNwbGF5IGVycm9yIGFuZCByZXR1cm4KICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFN5c0NvbmZpZyBzZXR0aW5nICckR3JhcGhTZXR0aW5nJyBpbiAiCiAgICAgICAgICAgICAgICAgICAgLiAiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZVpvb20jIyNXb3JrT3JkZXJHcmFwaCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHZhbGlkaXR5IG9mIGNvbmZpZyBzZXR0aW5nCiAgICAgICAgaWYgKAogICAgICAgICAgICAkV29ya09yZGVyR3JhcGhDb25maWctPnskR3JhcGhTZXR0aW5nfQogICAgICAgICAgICAhfiBteyBcQSAkV29ya09yZGVyR3JhcGhDaGVja3skR3JhcGhTZXR0aW5nfSBceiB9eG1zCiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIGRpc3BsYXkgZXJyb3IgYW5kIHJldHVybgogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlN5c0NvbmZpZyBzZXR0aW5nICckR3JhcGhTZXR0aW5nJyBpcyBpbnZhbGlkIGluICIKICAgICAgICAgICAgICAgICAgICAuICJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlWm9vbSMjI1dvcmtPcmRlckdyYXBoISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjb21wdXRlIGVmZmVjaXZlIGxhYmVsIHdpZHRoCiAgICBteSAkTGFiZWxXaWR0aCA9IDYwOwogICAgaWYgKCAkQ2hhbmdlWm9vbUNvbmZpZy0+e1dvcmtPcmRlclN0YXRlfSAmJiAkQ2hhbmdlWm9vbUNvbmZpZy0+e1dvcmtPcmRlclRpdGxlfSApIHsKICAgICAgICAkTGFiZWxXaWR0aCArPSAxODA7CiAgICB9CiAgICBlbHNpZiAoICRDaGFuZ2Vab29tQ29uZmlnLT57V29ya09yZGVyU3RhdGV9ICkgewogICAgICAgICRMYWJlbFdpZHRoICs9IDcwOwogICAgfQogICAgZWxzaWYgKCAkQ2hhbmdlWm9vbUNvbmZpZy0+e1dvcmtPcmRlclRpdGxlfSApIHsKICAgICAgICAkTGFiZWxXaWR0aCArPSAxMjU7CiAgICB9CgogICAgIyBsb2FkIGdyYXBoIHNrZWxldG9uCiAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnV29ya09yZGVyR3JhcGgnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICBMYWJlbFdpZHRoICA9PiAkTGFiZWxXaWR0aCwKICAgICAgICAgICAgTGFiZWxNYXJnaW4gPT4gJExhYmVsV2lkdGggKyAyLAogICAgICAgIH0sCiAgICApOwoKICAgICMgY3JlYXRlIGNvbG9yIGRlZmluaXRpb25zIGZvciBhbGwgY29uZmlndXJlZCB3b3Jrb3JkZXIgdHlwZXMKICAgIG15ICRXb3JrT3JkZXJUeXBlcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclR5cGVMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApIHx8IFtdOwoKICAgICMgY3JlYXRlIGNzcyBkZWZpbml0aW9ucyBmb3Igd29ya29yZGVyIHR5cGVzCiAgICBXT1JLT1JERVJUWVBFOgogICAgZm9yIG15ICRXb3JrT3JkZXJUeXBlICggQHskV29ya09yZGVyVHlwZXN9ICkgewoKICAgICAgICAjIGNoZWNrIHdvcmtvcmRlciB0eXBlCiAgICAgICAgbmV4dCBXT1JLT1JERVJUWVBFIGlmICEkV29ya09yZGVyVHlwZTsKICAgICAgICBuZXh0IFdPUktPUkRFUlRZUEUgaWYgISRXb3JrT3JkZXJUeXBlLT57VmFsdWV9OwoKICAgICAgICAjIGdldCBuYW1lIG9mIHdvcmtvcmRlciB0eXBlCiAgICAgICAgbXkgJFdvcmtPcmRlclR5cGVOYW1lID0gJFdvcmtPcmRlclR5cGUtPntWYWx1ZX07CgogICAgICAgICMgY2hlY2sgY29udGVudHMgb2YgbmFtZQogICAgICAgIG5leHQgV09SS09SREVSVFlQRSBpZiAhJFdvcmtPcmRlclR5cGVOYW1lOwoKICAgICAgICBmb3IgbXkgJFdvcmtPcmRlckNvbG9yIChxdyggX3BsYW5uZWQgX2FjdHVhbCApKSB7CgogICAgICAgICAgICAjIGdldCBjb25maWd1cmVkIG9yIGZhbGxiYWNrIHBsYW5uZWQgY29sb3IgZm9yIHdvcmtvcmRlcgogICAgICAgICAgICBteSAkV29ya09yZGVyVHlwZUNvbG9yID0gJFdvcmtPcmRlckdyYXBoQ29uZmlnLT57IiR7V29ya09yZGVyVHlwZU5hbWV9JHtXb3JrT3JkZXJDb2xvcn1fY29sb3IifTsKCiAgICAgICAgICAgICMgc2V0IGRlZmF1bHQgY29sb3IgaWYgbm8gY29sb3IgaXMgZm91bmQKICAgICAgICAgICAgJFdvcmtPcmRlclR5cGVDb2xvciB8fD0gJFdvcmtPcmRlckdyYXBoQ29uZmlnLT57InVuZGVmaW5lZCR7V29ya09yZGVyQ29sb3J9X2NvbG9yIn07CgogICAgICAgICAgICAjIGNoZWNrIHZhbGlkaXR5IG9mIHdvcmtvcmRlciBjb2xvcgogICAgICAgICAgICBpZiAoICRXb3JrT3JkZXJUeXBlQ29sb3IgIX4gbXsgXEEgIyBbQS1aYS16XGRdezZ9IFx6IH14bXMgKSB7CiAgICAgICAgICAgICAgICAkV29ya09yZGVyVHlwZUNvbG9yID0gJFdvcmtPcmRlckdyYXBoQ29uZmlnLT57InVuZGVmaW5lZCR7V29ya09yZGVyQ29sb3J9X2NvbG9yIn07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZGlzcGxheSBjc3MgZGVmaW5pdGlvbnMgZm9yIHBsYW5uZWQKICAgICAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQ1NTV29ya09yZGVyVHlwZScsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJUeXBlTmFtZSAgPT4gJFdvcmtPcmRlclR5cGVOYW1lIC4gJFdvcmtPcmRlckNvbG9yLAogICAgICAgICAgICAgICAgICAgIFdvcmtPcmRlclR5cGVDb2xvciA9PiAkV29ya09yZGVyVHlwZUNvbG9yLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjYWxjdWxhdGUgdGltZSBsaW5lIHBhcmFtZXRlcgogICAgbXkgJFRpbWVMaW5lID0gJFNlbGYtPl9JVFNNQ2hhbmdlR2V0VGltZUxpbmUoCiAgICAgICAgU3RhcnRUaW1lID0+ICRUaW1le1N0YXJ0VGltZX0sCiAgICAgICAgRW5kVGltZSAgID0+ICRUaW1le0VuZFRpbWV9LAogICAgICAgIFRpY2tzICAgICA9PiAkQ2hhbmdlVGlja3MsCiAgICApOwoKICAgIGlmICggJFRpbWVMaW5lICYmIGRlZmluZWQgJFRpbWVMaW5lLT57VGltZUxpbmVMZWZ0fSApIHsKCiAgICAgICAgIyBjYWxjdWxhdGUgaGVpZ2h0IG9mIHRpbWUgbGluZQogICAgICAgIG15ICRXb3JrT3JkZXJIZWlnaHQgPSAxNjsKICAgICAgICBteSAkU2NhbGVNYXJnaW4gICAgID0gMTE7CiAgICAgICAgJFRpbWVMaW5lLT57VGltZUxpbmVIZWlnaHR9ID0gKCAoIHNjYWxhciBAV29ya09yZGVycyApICogJFdvcmtPcmRlckhlaWdodCApICsgJFNjYWxlTWFyZ2luOwoKICAgICAgICAjIGRpc3BsYXkgY3NzIG9mIHRpbWVsaW5lCiAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDU1NUaW1lTGluZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJXskVGltZUxpbmV9LAogICAgICAgICAgICAgICAgJXskV29ya09yZGVyR3JhcGhDb25maWd9LAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZGlzcGxheSB0aW1lbGluZSBjb250YWluZXIKICAgICAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RpbWVMaW5lJywKICAgICAgICAgICAgRGF0YSA9PiB7fSwKICAgICAgICApOwogICAgfQoKICAgICMgc29ydCB3b3Jrb3JkZXIgYXNjZW5kaW5nIHRvIFdvcmtPcmRlck51bWJlcgogICAgQFdvcmtPcmRlcnMgPSBzb3J0IHsgJGEtPntXb3JrT3JkZXJOdW1iZXJ9IDw9PiAkYi0+e1dvcmtPcmRlck51bWJlcn0gfSBAV29ya09yZGVyczsKCiAgICAjIGJ1aWxkIGdyYXBoIG9mIGVhY2ggd29ya29yZGVyCiAgICBXT1JLT1JERVI6CiAgICBmb3IgbXkgJFdvcmtPcmRlciAoQFdvcmtPcmRlcnMpIHsKICAgICAgICBuZXh0IFdPUktPUkRFUiBpZiAhJFdvcmtPcmRlcjsKCiAgICAgICAgJFNlbGYtPl9JVFNNQ2hhbmdlR2V0V29ya09yZGVyR3JhcGgoCiAgICAgICAgICAgIFdvcmtPcmRlciAgICAgICAgICA9PiAkV29ya09yZGVyLAogICAgICAgICAgICBEeW5hbWljRmllbGRPYmplY3QgPT4gJFBhcmFte0R5bmFtaWNGaWVsZE9iamVjdH0sCiAgICAgICAgICAgIEJhY2tlbmRPYmplY3QgICAgICA9PiAkUGFyYW17QmFja2VuZE9iamVjdH0sCiAgICAgICAgICAgIFN0YXJ0VGltZSAgICAgICAgICA9PiAkVGltZXtTdGFydFRpbWV9LAogICAgICAgICAgICBFbmRUaW1lICAgICAgICAgICAgPT4gJFRpbWV7RW5kVGltZX0sCiAgICAgICAgICAgIFRpY2tzICAgICAgICAgICAgICA9PiAkQ2hhbmdlVGlja3MsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGJ1aWxkIHNjYWxlIG9mIGdyYXBoCiAgICAkU2VsZi0+X0lUU01DaGFuZ2VHZXRDaGFuZ2VTY2FsZSgKICAgICAgICBTdGFydFRpbWUgICA9PiAkVGltZXtTdGFydFRpbWV9LAogICAgICAgIEVuZFRpbWUgICAgID0+ICRUaW1le0VuZFRpbWV9LAogICAgICAgIFRpY2tzICAgICAgID0+ICRDaGFuZ2VUaWNrcywKICAgICAgICBMYWJlbE1hcmdpbiA9PiAkTGFiZWxXaWR0aCArIDIsCiAgICApOwoKICAgICMgcmVuZGVyIGdyYXBoIGFuZCByZXR1cm4gSFRNTCB3aXRoIElUU01DaGFuZ2UuZHRsIHRlbXBsYXRlCiAgICByZXR1cm4gJFNlbGYtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICk7Cn0KCj1pdGVtIElUU01DaGFuZ2VMaXN0U2hvdygpCgpSZXR1cm5zIGEgbGlzdCBvZiBjaGFuZ2VzIGFzIHNvcnRhYmxlIGxpc3Qgd2l0aCBwYWdpbmF0aW9uLgoKVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIEw8S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dFRpY2tldDo6VGlja2V0TGlzdFNob3coKT4KaW4gRjxLZXJuZWwvT3V0cHV0L0hUTUwvTGF5b3V0VGlja2V0LnBtPi4KCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SVRTTUNoYW5nZUxpc3RTaG93KAogICAgICAgIENoYW5nZUlEcyAgPT4gJENoYW5nZUlEc1JlZiwgICAgICAgICAgICAgICAgICAgICAgIyB0b3RhbCBsaXN0IG9mIGNoYW5nZSBpZHMsIHRoYXQgY2FuIGJlIGxpc3RlZAogICAgICAgIFRvdGFsICAgICAgPT4gc2NhbGFyIEB7ICRDaGFuZ2VJRHNSZWYgfSwgICAgICAgICAgIyB0b3RhbCBudW1iZXIgb2YgbGlzdCBpdGVtcywgY2hhbmdlcyBpbiB0aGlzIGNhc2UKICAgICAgICBWaWV3ICAgICAgID0+ICRTZWxmLT57Vmlld30sICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIHRoZSBkZWZhdWx0IHZhbHVlIGlzICdTbWFsbCcKICAgICAgICBGaWx0ZXIgICAgID0+ICdBbGwnLAogICAgICAgIEZpbHRlcnMgICAgPT4gXCVOYXZCYXJGaWx0ZXIsCiAgICAgICAgRmlsdGVyTGluayA9PiAkTGlua0ZpbHRlciwKICAgICAgICBUaXRsZU5hbWUgID0+ICdPdmVydmlldzogQ2hhbmdlcycsCiAgICAgICAgVGl0bGVWYWx1ZSA9PiAkU2VsZi0+e0ZpbHRlcn0sCiAgICAgICAgRW52ICAgICAgICA9PiAkU2VsZiwKICAgICAgICBMaW5rUGFnZSAgID0+ICRMaW5rUGFnZSwKICAgICAgICBMaW5rU29ydCAgID0+ICRMaW5rU29ydCwKICAgICAgICBGcm9udGVuZCAgID0+ICdBZ2VudCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAoQWdlbnR8Q3VzdG9tZXIpLCBkZWZhdWx0OiBBZ2VudCwgaW5kaWNhdGVzIGZyb20gd2hpY2ggZnJvbnRlbmQgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkCiAgICApOwoKPWN1dAoKc3ViIElUU01DaGFuZ2VMaXN0U2hvdyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdGFrZSBvYmplY3QgcmVmIHRvIGxvY2FsLCByZW1vdmUgaXQgZnJvbSAlUGFyYW0gKHByZXZlbnQgbWVtb3J5IGxlYWspCiAgICBteSAkRW52ID0gZGVsZXRlICRQYXJhbXtFbnZ9OwoKICAgICMgbG9va3VwIGxhdGVzdCB1c2VkIHZpZXcgbW9kZQogICAgaWYgKCAhJFBhcmFte1ZpZXd9ICYmICRTZWxmLT57ICdVc2VySVRTTUNoYW5nZU92ZXJ2aWV3JyAuICRFbnYtPntBY3Rpb259IH0gKSB7CiAgICAgICAgJFBhcmFte1ZpZXd9ID0gJFNlbGYtPnsgJ1VzZXJJVFNNQ2hhbmdlT3ZlcnZpZXcnIC4gJEVudi0+e0FjdGlvbn0gfTsKICAgIH0KCiAgICAjIHNldCBmcm9udGVuZAogICAgbXkgJEZyb250ZW5kID0gJFBhcmFte0Zyb250ZW5kfSB8fCAnQWdlbnQnOwoKICAgICMgc2V0IGRlZmF1dCB2aWV3IG1vZGUgdG8gJ3NtYWxsJwogICAgbXkgJFZpZXcgPSAkUGFyYW17Vmlld30gfHwgJ1NtYWxsJzsKCiAgICAjIHN0b3JlIGxhdGVzdCB2aWV3IG1vZGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpLT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ1VzZXJJVFNNQ2hhbmdlT3ZlcnZpZXcnIC4gJEVudi0+e0FjdGlvbn0sCiAgICAgICAgVmFsdWUgICAgID0+ICRWaWV3LAogICAgKTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBnZXQgYmFja2VuZCBmcm9tIGNvbmZpZwogICAgbXkgJEJhY2tlbmRzID0gJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNQ2hhbmdlOjpGcm9udGVuZDo6T3ZlcnZpZXcnKTsKICAgIGlmICggISRCYWNrZW5kcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAnTmVlZCBjb25maWcgb3B0aW9uICVzIScsCiAgICAgICAgICAgICAgICAnSVRTTUNoYW5nZTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3JywKICAgICAgICAgICAgKSwKICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBmb3IgaGFzaC1yZWYKICAgIGlmICggcmVmICRCYWNrZW5kcyBuZSAnSEFTSCcgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJ0NvbmZpZyBvcHRpb24gJXMgbmVlZHMgdG8gYmUgYSBIQVNIIHJlZiEnLAogICAgICAgICAgICAgICAgJ0lUU01DaGFuZ2U6OkZyb250ZW5kOjpPdmVydmlldycsCiAgICAgICAgICAgICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgZm9yIGNvbmZpZyBrZXkKICAgIGlmICggISRCYWNrZW5kcy0+eyRWaWV3fSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdObyBjb25maWcgb3B0aW9uIGZvdW5kIGZvciB0aGUgdmlldyAiJXMiIScsICRWaWV3ICksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgICMgbmF2IGJhcgogICAgbXkgJFN0YXJ0SGl0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSgKICAgICAgICBQYXJhbSA9PiAnU3RhcnRIaXQnLAogICAgKSB8fCAxOwoKICAgICMgZ2V0IHBlcnNvbmFsIHBhZ2Ugc2hvd24gY291bnQKICAgIG15ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleSA9ICdVc2VyQ2hhbmdlT3ZlcnZpZXcnIC4gJFZpZXcgLiAnUGFnZVNob3duJzsKICAgIG15ICRQYWdlU2hvd24gICAgICAgICAgICAgICA9ICRTZWxmLT57JFBhZ2VTaG93blByZWZlcmVuY2VzS2V5fSB8fCAxMDsKICAgIG15ICRHcm91cCAgICAgICAgICAgICAgICAgICA9ICdDaGFuZ2VPdmVydmlldycgLiAkVmlldyAuICdQYWdlU2hvd24nOwoKICAgICMgY2hlY2sgc3RhcnQgb3B0aW9uLCBpZiBoaWdoZXIgdGhlbiBlbGVtZW50cyBhdmFpbGFibGUsIHNldAogICAgIyBpdCB0byB0aGUgbGFzdCBvdmVydmlldyBwYWdlIChUaGFua3MgdG8gU3RlZmFuIFNjaG1pZHQhKQogICAgaWYgKCAkU3RhcnRIaXQgPiAkUGFyYW17VG90YWx9ICkgewogICAgICAgIG15ICRQYWdlcyA9IGludCggKCAkUGFyYW17VG90YWx9IC8gJFBhZ2VTaG93biApICsgMC45OTk5OSApOwogICAgICAgICRTdGFydEhpdCA9ICggKCAkUGFnZXMgLSAxICkgKiAkUGFnZVNob3duICkgKyAxOwogICAgfQoKICAgICMgZ2V0IGRhdGEgc2VsZWN0aW9uCiAgICBteSAlRGF0YTsKICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1ByZWZlcmVuY2VzR3JvdXBzJyk7CiAgICBpZiAoICRDb25maWcgJiYgJENvbmZpZy0+eyRHcm91cH0gJiYgJENvbmZpZy0+eyRHcm91cH0tPntEYXRhfSApIHsKICAgICAgICAlRGF0YSA9ICV7ICRDb25maWctPnskR3JvdXB9LT57RGF0YX0gfTsKICAgIH0KCiAgICAjIHNldCBwYWdlIGxpbWl0IGFuZCBidWlsZCBwYWdlIG5hdgogICAgbXkgJExpbWl0ID0gJFBhcmFte0xpbWl0fSB8fCAyMF8wMDA7CiAgICBteSAlUGFnZU5hdiA9ICRMYXlvdXRPYmplY3QtPlBhZ2VOYXZCYXIoCiAgICAgICAgTGltaXQgICAgID0+ICRMaW1pdCwKICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgIFBhZ2VTaG93biA9PiAkUGFnZVNob3duLAogICAgICAgIEFsbEhpdHMgICA9PiAkUGFyYW17VG90YWx9IHx8IDAsCiAgICAgICAgQWN0aW9uICAgID0+ICdBY3Rpb249JyAuICRMYXlvdXRPYmplY3QtPntBY3Rpb259LAogICAgICAgIExpbmsgICAgICA9PiAkUGFyYW17TGlua1BhZ2V9LAogICAgKTsKCiAgICAjIGJ1aWxkIHNob3duIHRpY2tldCBhIHBhZ2UKICAgICRQYXJhbXtSZXF1ZXN0ZWRVUkx9ICAgID0gJFBhcmFte1JlcXVlc3RlZFVSTH0gfHwgIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iOwogICAgJFBhcmFte0dyb3VwfSAgICAgICAgICAgPSAkR3JvdXA7CiAgICAkUGFyYW17UHJlZmVyZW5jZXNLZXl9ICA9ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleTsKICAgICRQYXJhbXtQYWdlU2hvd25TdHJpbmd9ID0gJFNlbGYtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleSwKICAgICAgICBTZWxlY3RlZElEICA9PiAkUGFnZVNob3duLAogICAgICAgIERhdGEgICAgICAgID0+IFwlRGF0YSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgKTsKCiAgICAjIGJ1aWxkIG5hdmJhciBjb250ZW50CiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhcicsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAjIGJhY2sgbGluawogICAgaWYgKCAkUGFyYW17TGlua0JhY2t9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclBhZ2VCYWNrJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZmlsdGVycwogICAgaWYgKCAkUGFyYW17RmlsdGVyc30gKSB7CgogICAgICAgICMgZ2V0IGdpdmVuIGZpbHRlcnMKICAgICAgICBteSBATmF2QmFyRmlsdGVyczsKICAgICAgICBmb3IgbXkgJFByaW8gKCBzb3J0IGtleXMgJXsgJFBhcmFte0ZpbHRlcnN9IH0gKSB7CiAgICAgICAgICAgIHB1c2ggQE5hdkJhckZpbHRlcnMsICRQYXJhbXtGaWx0ZXJzfS0+eyRQcmlvfTsKICAgICAgICB9CgogICAgICAgICMgYnVpbGQgZmlsdGVyIGNvbnRlbnQKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJGaWx0ZXInLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGxvb3Agb3ZlciBmaWx0ZXJzCiAgICAgICAgbXkgJENvdW50ID0gMDsKICAgICAgICBmb3IgbXkgJEZpbHRlciAoQE5hdkJhckZpbHRlcnMpIHsKCiAgICAgICAgICAgICMgaW5jcmVtZW50IGZpbHRlciBjb3VudCBhbmQgYnVpbGQgZmlsdGVyIGl0ZW0KICAgICAgICAgICAgJENvdW50Kys7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAleyRGaWx0ZXJ9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZmlsdGVyIGlzIHNlbGVjdGVkCiAgICAgICAgICAgIGlmICggJEZpbHRlci0+e0ZpbHRlcn0gZXEgJFBhcmFte0ZpbHRlcn0gKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhckZpbHRlckl0ZW1TZWxlY3RlZCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgJXskRmlsdGVyfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhckZpbHRlckl0ZW1TZWxlY3RlZE5vdCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgJXskRmlsdGVyfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBsb29wIG92ZXIgY29uZmlndXJlZCBiYWNrZW5kcwogICAgZm9yIG15ICRCYWNrZW5kICggc29ydCBrZXlzICV7JEJhY2tlbmRzfSApIHsKCiAgICAgICAgIyBidWlsZCBuYXZiYXIgdmlldyBtb2RlCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyVmlld01vZGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICV7ICRCYWNrZW5kcy0+eyRCYWNrZW5kfSB9LAogICAgICAgICAgICAgICAgRmlsdGVyID0+ICRQYXJhbXtGaWx0ZXJ9LAogICAgICAgICAgICAgICAgVmlldyAgID0+ICRCYWNrZW5kLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgY3VycmVudCB2aWV3IGlzIGNvbmZpZ3VyZWQgaW4gYmFja2VuZAogICAgICAgIGlmICggJFZpZXcgZXEgJEJhY2tlbmQgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZVNlbGVjdGVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAleyAkQmFja2VuZHMtPnskQmFja2VuZH0gfSwKICAgICAgICAgICAgICAgICAgICBGaWx0ZXIgPT4gJFBhcmFte0ZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgVmlldyAgID0+ICRCYWNrZW5kLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZU5vdFNlbGVjdGVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAleyAkQmFja2VuZHMtPnskQmFja2VuZH0gfSwKICAgICAgICAgICAgICAgICAgICBGaWx0ZXIgPT4gJFBhcmFte0ZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgVmlldyAgID0+ICRCYWNrZW5kLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiBwYWdlIG5hdiBpcyBhdmFpbGFibGUKICAgIGlmICglUGFnZU5hdikgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclBhZ2VOYXZCYXInLAogICAgICAgICAgICBEYXRhID0+IFwlUGFnZU5hdiwKICAgICAgICApOwoKICAgICAgICAjIGRvbid0IHNob3cgY29udGV4dCBzZXR0aW5ncyBpbiBBSkFYIGNhc2UgKGUuIGcuIGluIGN1c3RvbWVyIHRpY2tldCBoaXN0b3J5KSwKICAgICAgICAjICAgYmVjYXVzZSB0aGUgc3VibWl0IHdpdGggcGFnZSByZWxvYWQgd2lsbCBub3Qgd29yayB0aGVyZQogICAgICAgIGlmICggISRQYXJhbXtBSkFYfSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdDb250ZXh0U2V0dGluZ3MnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhZ2VOYXYsCiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBidWlsZCBodG1sIGNvbnRlbnQKICAgIG15ICRPdXRwdXROYXZCYXIgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudElUU01DaGFuZ2VPdmVydmlld05hdkJhcicsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIGNyZWF0ZSBvdXRwdXQKICAgIG15ICRPdXRwdXRSYXcgPSAnJzsKICAgIGlmICggISRQYXJhbXtPdXRwdXR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPlByaW50KAogICAgICAgICAgICBPdXRwdXQgPT4gXCRPdXRwdXROYXZCYXIsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRPdXRwdXRSYXcgLj0gJE91dHB1dE5hdkJhcjsKICAgIH0KCiAgICAjIGxvYWQgbW9kdWxlCiAgICBpZiAoICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlKCAkQmFja2VuZHMtPnskVmlld30tPntNb2R1bGV9ICkgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBiYWNrZW5kIG9iamVjdAogICAgbXkgJE9iamVjdCA9ICRCYWNrZW5kcy0+eyRWaWV3fS0+e01vZHVsZX0tPm5ldyggJXskRW52fSApOwogICAgcmV0dXJuIGlmICEkT2JqZWN0OwoKICAgICMgcnVuIG1vZHVsZQogICAgbXkgJE91dHB1dCA9ICRPYmplY3QtPlJ1bigKICAgICAgICAlUGFyYW0sCiAgICAgICAgTGltaXQgICAgID0+ICRMaW1pdCwKICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgIFBhZ2VTaG93biA9PiAkUGFnZVNob3duLAogICAgICAgIEFsbEhpdHMgICA9PiAkUGFyYW17VG90YWx9IHx8IDAsCiAgICAgICAgRnJvbnRlbmQgID0+ICRGcm9udGVuZCwKICAgICk7CgogICAgIyBjcmVhdGUgb3V0cHV0CiAgICBpZiAoICEkUGFyYW17T3V0cHV0fSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5QcmludCgKICAgICAgICAgICAgT3V0cHV0ID0+IFwkT3V0cHV0LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkT3V0cHV0UmF3IC49ICRPdXRwdXQ7CiAgICB9CgogICAgIyBjcmVhdGUgb3ZlcnZpZXcgbmF2IGJhcgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXInLAogICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICApOwoKICAgICMgcmV0dXJuIGNvbnRlbnQgaWYgYXZhaWxhYmxlCiAgICByZXR1cm4gJE91dHB1dFJhdzsKfQoKPWJlZ2luIEludGVybmFsOgoKPWl0ZW0gX0lUU01DaGFuZ2VHZXRDaGFuZ2VUaWNrcygpCgphIGhlbHBlciBtZXRob2QgZm9yIHRoZSB3b3Jrb3JkZXIgZ3JhcGggb2YgYSBjaGFuZ2UKCj1jdXQKCnN1YiBfSVRTTUNoYW5nZUdldENoYW5nZVRpY2tzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBmb3Igc3RhcnQgYW5kIGVuZAogICAgcmV0dXJuIGlmICEkUGFyYW17U3RhcnR9IHx8ICEkUGFyYW17RW5kfTsKCiAgICAjIG1ha2Ugc3VyZSB3ZSBnb3QgaW50ZWdlcnMKICAgIHJldHVybiBpZiAkUGFyYW17U3RhcnR9ICF+IG17IFxBIFxkKyBceiB9eG1zOwogICAgcmV0dXJuIGlmICRQYXJhbXtFbmR9ICF+IG17IFxBIFxkKyBceiB9eG1zOwoKICAgICMgY2FsY3VsYXRlIHRpbWUgc3BhbiBpbiBzZWMKICAgIG15ICRUaWNrcyA9ICRQYXJhbXtFbmR9IC0gJFBhcmFte1N0YXJ0fTsKCiAgICAjIGNoZWNrIGZvciBjb21wdXRpbmcgZXJyb3IKICAgIHJldHVybiBpZiAkVGlja3MgPD0gMDsKCiAgICAjIGdldCBzZWNvbmRzIHBlciBwZXJjZW50IGFuZCByb3VuZCBkb3duCiAgICAkVGlja3MgPSBzcHJpbnRmKCAiJS5mIiwgJFRpY2tzIC8gMTAwICk7CgogICAgcmV0dXJuICRUaWNrczsKfQoKPWl0ZW0gX0lUU01DaGFuZ2VHZXRDaGFuZ2VTY2FsZSgpCgphIGhlbHBlciBtZXRob2QgZm9yIHRoZSB3b3Jrb3JkZXIgZ3JhcGggb2YgYSBjaGFuZ2UKCj1jdXQKCnN1YiBfSVRTTUNoYW5nZUdldENoYW5nZVNjYWxlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBmb3Igc3RhcnQgdGltZQogICAgcmV0dXJuIGlmICEkUGFyYW17U3RhcnRUaW1lfTsKCiAgICAjIGNoZWNrIGZvciBzdGFydCB0aW1lIGlzIGFuIGludGVnZXIgdmFsdWUKICAgIHJldHVybiBpZiAkUGFyYW17U3RhcnRUaW1lfSAhfiBteyBcQSBcZCsgXHogfXhtczsKCiAgICAjIGFkZCBzdGFydCBhbmQgZW5kIHRpbWUgYW5kIGNhbGN1bGF0ZSBzY2FsZSBuYW1pbmcKICAgIG15ICVTY2FsZU5hbWUgPSAoCiAgICAgICAgU3RhcnRUaW1lID0+ICRQYXJhbXtTdGFydFRpbWV9LAogICAgICAgIEVuZFRpbWUgICA9PiAkUGFyYW17RW5kVGltZX0sCiAgICAgICAgU2NhbGUxNSAgID0+ICggJFBhcmFte1N0YXJ0VGltZX0gKyAyMCAqICRQYXJhbXtUaWNrc30gKSwKICAgICAgICBTY2FsZTM1ICAgPT4gKCAkUGFyYW17U3RhcnRUaW1lfSArIDQwICogJFBhcmFte1RpY2tzfSApLAogICAgICAgIFNjYWxlNTUgICA9PiAoICRQYXJhbXtTdGFydFRpbWV9ICsgNjAgKiAkUGFyYW17VGlja3N9ICksCiAgICAgICAgU2NhbGU3NSAgID0+ICggJFBhcmFte1N0YXJ0VGltZX0gKyA4MCAqICRQYXJhbXtUaWNrc30gKSwKICAgICk7CgogICAgIyB0cmFuc2xhdGUgdGltZXN0YW1wcyBpbiBkYXRlIGZvcm1hdAogICAgbWFwIHsKICAgICAgICAkU2NhbGVOYW1leyRffSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyktPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTY2FsZU5hbWV7JF99CiAgICAgICAgICAgICkKICAgIH0ga2V5cyAlU2NhbGVOYW1lOwoKICAgICMgY3JlYXRlIHNjYWxlIGJsb2NrCiAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU2NhbGUnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlU2NhbGVOYW1lLAogICAgICAgICAgICBMYWJlbE1hcmdpbiA9PiAkUGFyYW17TGFiZWxNYXJnaW59LAogICAgICAgIH0sCiAgICApOwoKICAgIElOVEVSVkFMOgogICAgZm9yIG15ICRJbnRlcnZhbCAoIHNvcnQga2V5cyAlU2NhbGVOYW1lICkgewoKICAgICAgICAjIGRvIG5vdCBkaXNwbGF5IHNjYWxlIGlmIHRyYW5zbGF0aW5nIGZhaWxlZAogICAgICAgIG5leHQgSU5URVJWQUwgaWYgISRTY2FsZU5hbWV7JEludGVydmFsfTsKCiAgICAgICAgIyBkbyBub3QgZGlzcGxheSBzdGFydCBvciBlbmQKICAgICAgICBuZXh0IElOVEVSVkFMIGlmICRJbnRlcnZhbCA9fiBteyBcQSAoIFN0YXJ0IHwgRW5kICkgVGltZSBceiB9eG1zOwoKICAgICAgICAjIGJ1aWxkIHNjYWxlIGxhYmVsIGJsb2NrCiAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTY2FsZUxhYmVsJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBTY2FsZUxhYmVsID0+ICRTY2FsZU5hbWV7JEludGVydmFsfSwKICAgICAgICAgICAgICAgIFNjYWxlQ2xhc3MgPT4gJEludGVydmFsLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9Cn0KCj1pdGVtIF9JVFNNQ2hhbmdlR2V0V29ya09yZGVyR3JhcGgoKQoKYSBoZWxwZXIgbWV0aG9kIGZvciB0aGUgd29ya29yZGVyIGdyYXBoIG9mIGEgY2hhbmdlCgo9Y3V0CgpzdWIgX0lUU01DaGFuZ2VHZXRXb3JrT3JkZXJHcmFwaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgZm9yIHdvcmtvcmRlcgogICAgcmV0dXJuIGlmICEkUGFyYW17V29ya09yZGVyfTsKCiAgICAjIGV4dHJhY3Qgd29ya29yZGVyCiAgICBteSAkV29ya09yZGVyID0gJFBhcmFte1dvcmtPcmRlcn07CgogICAgIyBzYXZlIG9yaWcgd29ya29yZGVyIGZvciB3b3Jrb3JkZXIgaW5mb3JtYXRpb24KICAgIG15ICVXb3JrT3JkZXJJbmZvcm1hdGlvbiA9ICV7JFdvcmtPcmRlcn07CgogICAgIyB0cmFuc2xhdGUgd29ya29yZGVyIHR5cGUKICAgICRXb3JrT3JkZXItPntUcmFuc2xhdGVkV29ya09yZGVyVHlwZX0gPSAkU2VsZi0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAkV29ya09yZGVyLT57V29ya09yZGVyVHlwZX0gKTsKCiAgICAjIGJ1aWxkIGxhYmVsIGZvciBsaW5rIGluIGdyYXBoCiAgICAkV29ya09yZGVyLT57V29ya09yZGVyTGFiZWx9ID0gJFNlbGYtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAnVGl0bGU6ICVzIHwgVHlwZTogJXMnLAogICAgICAgICRXb3JrT3JkZXItPntXb3JrT3JkZXJUaXRsZX0sCiAgICAgICAgJFdvcmtPcmRlci0+e1RyYW5zbGF0ZWRXb3JrT3JkZXJUeXBlfSwKICAgICk7CgogICAgIyBjcmVhdGUgd29ya29yZGVyIGl0ZW0KICAgICRTZWxmLT5CbG9jaygKICAgICAgICBOYW1lID0+ICdXb3JrT3JkZXJJdGVtJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJXskV29ya09yZGVyfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCBjb25maWcgc2V0dGluZ3MKICAgIG15ICRDaGFuZ2Vab29tQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlWm9vbScpOwoKICAgICMgYWRkIHdvcmtvcmRlciBzdGF0ZQogICAgaWYgKCAkQ2hhbmdlWm9vbUNvbmZpZy0+e1dvcmtPcmRlclN0YXRlfSApIHsKICAgICAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1dvcmtPcmRlckl0ZW1TdGF0ZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJXskV29ya09yZGVyfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgYWRkIHdvcmtvcmRlciB0aXRsZQogICAgaWYgKCAkQ2hhbmdlWm9vbUNvbmZpZy0+e1dvcmtPcmRlclRpdGxlfSApIHsKICAgICAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1dvcmtPcmRlckl0ZW1UaXRsZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJXskV29ya09yZGVyfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgaWYgdGlja3MgYXJlIGNhbGN1bGF0ZWQKICAgIHJldHVybiBpZiAhJFBhcmFte1RpY2tzfTsKCiAgICAjIHNldCBwbGFubmVkIGlmIG5vIGFjdHVhbCB0aW1lIGlzIHNldAogICAgaWYgKCAhJFdvcmtPcmRlci0+e0FjdHVhbFN0YXJ0VGltZX0gKSB7CiAgICAgICAgJFdvcmtPcmRlci0+e0FjdHVhbFN0YXJ0VGltZX0gPSAkV29ya09yZGVyLT57UGxhbm5lZFN0YXJ0VGltZX07CiAgICAgICAgJFdvcmtPcmRlci0+e0FjdHVhbEVuZFRpbWV9ICAgPSAkV29ya09yZGVyLT57UGxhbm5lZEVuZFRpbWV9OwogICAgfQoKICAgICMgZ2V0IHRpbWUgb2JqZWN0CiAgICBteSAkVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyk7CgogICAgIyBzZXQgY3VycmVudCB0aW1lIGlmIG5vIGFjdHVhbCBlbmQgdGltZSBpcyBzZXQKICAgIGlmICggJFdvcmtPcmRlci0+e0FjdHVhbFN0YXJ0VGltZX0gJiYgISRXb3JrT3JkZXItPntBY3R1YWxFbmRUaW1lfSApIHsKICAgICAgICAkV29ya09yZGVyLT57QWN0dWFsRW5kVGltZX0gPSAkVGltZU9iamVjdC0+Q3VycmVudFRpbWVzdGFtcCgpOwogICAgfQoKICAgICMgc2V0IG5pY2UgZGlzcGxheSBvZiB1bmRlZiBhY3R1YWwgdGltZXMKICAgIGZvciBteSAkVGltZVR5cGUgKHF3KEFjdHVhbFN0YXJ0VGltZSBBY3R1YWxFbmRUaW1lKSkgewogICAgICAgIGlmICggISRXb3JrT3JkZXJJbmZvcm1hdGlvbnskVGltZVR5cGV9ICkgewogICAgICAgICAgICAkV29ya09yZGVySW5mb3JtYXRpb257IkVtcHR5JHtUaW1lVHlwZX0ifSA9ICctJzsKICAgICAgICB9CiAgICB9CgogICAgIyBoYXNoIGZvciB0aW1lIHZhbHVlcwogICAgbXkgJVRpbWU7CgogICAgZm9yIG15ICRUaW1lVHlwZSAocXcoUGxhbm5lZFN0YXJ0VGltZSBQbGFubmVkRW5kVGltZSBBY3R1YWxTdGFydFRpbWUgQWN0dWFsRW5kVGltZSkpIHsKCiAgICAgICAgIyB0cmFuc2xhdGUgdGltZQogICAgICAgICRUaW1leyRUaW1lVHlwZX0gPSAkVGltZU9iamVjdC0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgIFN0cmluZyA9PiAkV29ya09yZGVyLT57JFRpbWVUeXBlfSwKICAgICAgICApOwogICAgfQoKICAgICMgZGV0ZXJtaW5lIGxlbmd0aCBvZiB3b3Jrb3JkZXIKICAgIG15ICVUaWNrVmFsdWU7CgogICAgZm9yIG15ICRUaW1lVHlwZSAocXcoIFBsYW5uZWQgQWN0dWFsICkpIHsKCiAgICAgICAgIyBnZXQgdmFsdWVzIGZvciBwYWRkaW5nIHNwYW4KICAgICAgICBteSAkU3RhcnRQYWRkaW5nID0gc3ByaW50ZigKICAgICAgICAgICAgIiUuMWYiLAogICAgICAgICAgICAoICRUaW1leyIke1RpbWVUeXBlfVN0YXJ0VGltZSJ9IC0gJFBhcmFte1N0YXJ0VGltZX0gKSAvICRQYXJhbXtUaWNrc30KICAgICAgICApOwogICAgICAgICRTdGFydFBhZGRpbmcgPSAoICRTdGFydFBhZGRpbmcgPD0gMCApICAgPyAwICAgIDogJFN0YXJ0UGFkZGluZzsKICAgICAgICAkU3RhcnRQYWRkaW5nID0gKCAkU3RhcnRQYWRkaW5nID49IDEwMCApID8gOTkuOSA6ICRTdGFydFBhZGRpbmc7CiAgICAgICAgJFRpY2tWYWx1ZXsiJHtUaW1lVHlwZX1QYWRkaW5nIn0gPSAkU3RhcnRQYWRkaW5nOwoKICAgICAgICAjIGdldCB2YWx1ZXMgZm9yIHRyYWlsaW5nIHNwYW4KICAgICAgICBteSAkRW5kVHJhaWxpbmcgPSBzcHJpbnRmKCAiJS4xZiIsICggJFBhcmFte0VuZFRpbWV9IC0gJFRpbWV7IiR7VGltZVR5cGV9RW5kVGltZSJ9ICkgLyAkUGFyYW17VGlja3N9ICk7CiAgICAgICAgJEVuZFRyYWlsaW5nID0gKCAkRW5kVHJhaWxpbmcgPD0gMCApICAgPyAwICAgIDogJEVuZFRyYWlsaW5nOwogICAgICAgICRFbmRUcmFpbGluZyA9ICggJEVuZFRyYWlsaW5nID49IDEwMCApID8gOTkuOSA6ICRFbmRUcmFpbGluZzsKICAgICAgICAkVGlja1ZhbHVleyIke1RpbWVUeXBlfVRyYWlsaW5nIn0gPSAkRW5kVHJhaWxpbmc7CgogICAgICAgICMgZ2V0IHZhbHVlcyBmb3IgZGlzcGxheSBzcGFuCiAgICAgICAgbXkgJFRpbWVUaWNrcyA9IDEwMCAtICggJFRpY2tWYWx1ZXsiJHtUaW1lVHlwZX1QYWRkaW5nIn0gKyAkVGlja1ZhbHVleyIke1RpbWVUeXBlfVRyYWlsaW5nIn0gKTsKICAgICAgICAkVGltZVRpY2tzID0gKCAkVGltZVRpY2tzIDw9IDAgKSAgID8gMC4xICA6ICRUaW1lVGlja3M7CiAgICAgICAgJFRpbWVUaWNrcyA9ICggJFRpbWVUaWNrcyA+PSAxMDAgKSA/IDk5LjkgOiAkVGltZVRpY2tzOwogICAgICAgICRUaWNrVmFsdWV7IiR7VGltZVR5cGV9VGlja3MifSA9IHNwcmludGYoICIlLjFmIiwgJFRpbWVUaWNrcyApOwogICAgfQoKICAgICMgc2V0IHdvcmtvcmRlciBhcyBpbmFjdGl2ZSBpZiBpdCBpcyBub3Qgc3RhcnRlZCBqZXQKICAgIGlmICggISRXb3JrT3JkZXJJbmZvcm1hdGlvbntBY3R1YWxTdGFydFRpbWV9ICkgewogICAgICAgICRXb3JrT3JkZXJJbmZvcm1hdGlvbntXb3JrT3JkZXJPcGFjaXR5fSA9ICdXb3Jrb3JkZXJJbmFjdGl2ZSc7CiAgICB9CgogICAgIyBzZXQgd29ya29yZGVyIGFnZW50CiAgICBpZiAoICRXb3JrT3JkZXJJbmZvcm1hdGlvbntXb3JrT3JkZXJBZ2VudElEfSApIHsKICAgICAgICBteSAlV29ya09yZGVyQWdlbnREYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkV29ya09yZGVySW5mb3JtYXRpb257V29ya09yZGVyQWdlbnRJRH0sCiAgICAgICAgICAgIENhY2hlZCA9PiAxLAogICAgICAgICk7CgogICAgICAgIGlmICglV29ya09yZGVyQWdlbnREYXRhKSB7CgogICAgICAgICAgICAjIGdldCBXb3JrT3JkZXJBZ2VudCBpbmZvcm1hdGlvbgogICAgICAgICAgICBmb3IgbXkgJFBvc3RmaXggKHF3KFVzZXJMb2dpbiBVc2VyRmlyc3RuYW1lIFVzZXJMYXN0bmFtZSkpIHsKICAgICAgICAgICAgICAgICRXb3JrT3JkZXJJbmZvcm1hdGlvbnsiV29ya09yZGVyQWdlbnQkUG9zdGZpeCJ9ID0gJFdvcmtPcmRlckFnZW50RGF0YXskUG9zdGZpeH0KICAgICAgICAgICAgICAgICAgICB8fCAnJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCB0aGUgZ3JhcGggZGlyZWN0aW9uIChMVFI6IGxlZnQsIFJUTDogcmlnaHQpCiAgICBpZiAoICRTZWxmLT57VGV4dERpcmVjdGlvbn0gJiYgJFNlbGYtPntUZXh0RGlyZWN0aW9ufSBlcSAncnRsJyApIHsKICAgICAgICAkV29ya09yZGVySW5mb3JtYXRpb257IkdyYXBoRGlyZWN0aW9uIn0gPSAncmlnaHQnOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFdvcmtPcmRlckluZm9ybWF0aW9ueyJHcmFwaERpcmVjdGlvbiJ9ID0gJ2xlZnQnOwogICAgfQoKICAgICMgY3JlYXRlIGdyYXBoIG9mIHdvcmtvcmRlciBpdGVtCiAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnV29ya09yZGVySXRlbUdyYXBoJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVdvcmtPcmRlckluZm9ybWF0aW9uLAogICAgICAgICAgICAlVGlja1ZhbHVlLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSB3b3Jrb3JkZXIgYXR0cmlidXRlIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHNob3duIGluIHRoZSB0b29sdGlwCiAgICBteSAlVG9vbHRpcEF0dHJpYnV0ZXMgPSAleyAkQ2hhbmdlWm9vbUNvbmZpZy0+eydUb29sdGlwOjpXb3JrT3JkZXJBdHRyaWJ1dGVzJ30gfTsKICAgIG15IEBTaG93QXR0cmlidXRlcyA9IGdyZXAgeyAkVG9vbHRpcEF0dHJpYnV0ZXN7JF99IH0ga2V5cyAlVG9vbHRpcEF0dHJpYnV0ZXM7CgogICAgIyBidWlsZCBhdHRyaWJ1dCBibG9ja3MKICAgIGlmIChAU2hvd0F0dHJpYnV0ZXMpIHsKCiAgICAgICAgQVRUUklCVVRFOgogICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBAU2hvd0F0dHJpYnV0ZXMgKSB7CgogICAgICAgICAgICAjIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHdvcmtvcmRlciBhZ2VudAogICAgICAgICAgICBpZiAoICRBdHRyaWJ1dGUgZXEgJ1dvcmtPcmRlckFnZW50JyApIHsKCiAgICAgICAgICAgICAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnV29ya09yZGVyQWdlbnRCbG9jaycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVXb3JrT3JkZXJJbmZvcm1hdGlvbiwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIHRoZSBsYXN0IHRoaW5nOiBVc2VyTG9naW4KICAgICAgICAgICAgICAgIGlmICggJFdvcmtPcmRlckluZm9ybWF0aW9ue1dvcmtPcmRlckFnZW50VXNlckxvZ2lufSApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1dvcmtPcmRlckFnZW50JywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlV29ya09yZGVySW5mb3JtYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnRW1wdHlXb3JrT3JkZXJBZ2VudCcsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJVdvcmtPcmRlckluZm9ybWF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaGFuZGxlIHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcwogICAgICAgICAgICBlbHNpZiAoICRBdHRyaWJ1dGUgPX4gbXsgXEEgRHluYW1pY0ZpZWxkXyAoLispIH14bXMgKSB7CgogICAgICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZE5hbWUgPSAkMTsKCiAgICAgICAgICAgICAgICAjIG9ubHkgaWYgdGhlIHdvcmtvcmRlciBkeW5hbWljIGZpZWxkIGNvbnRhaW5zIHNvbWV0aGluZwogICAgICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgISRXb3JrT3JkZXJJbmZvcm1hdGlvbnsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZE5hbWUgfTsKCiAgICAgICAgICAgICAgICAjIGdldCBjb25maWcgZm9yIHRoaXMgZHluYW1pYyBmaWVsZAogICAgICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZyA9ICRQYXJhbXtEeW5hbWljRmllbGRPYmplY3R9LT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkRHluYW1pY0ZpZWxkTmFtZSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgISREeW5hbWljRmllbGRDb25maWc7CgogICAgICAgICAgICAgICAgIyBnZXQgcHJpbnQgc3RyaW5nIGZvciB0aGlzIGR5bmFtaWMgZmllbGQKICAgICAgICAgICAgICAgIG15ICRWYWx1ZVN0cmcgPSAkUGFyYW17QmFja2VuZE9iamVjdH0tPkRpc3BsYXlWYWx1ZVJlbmRlcigKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFdvcmtPcmRlckluZm9ybWF0aW9ueyAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkTmFtZSB9LAogICAgICAgICAgICAgICAgICAgIFZhbHVlTWF4Q2hhcnMgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgPT4gJFNlbGYsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRTZWxmLT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdEeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWVTdHJnLT57VmFsdWV9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFsbCBvdGhlciBhdHRyaWJ1dGVzCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNlbGYtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJEF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVdvcmtPcmRlckluZm9ybWF0aW9uLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cgo9aXRlbSBfSVRTTUNoYW5nZUdldFRpbWVMaW5lKCkKCmEgaGVscGVyIG1ldGhvZCBmb3IgdGhlIHdvcmtvcmRlciBncmFwaCBvZiBhIGNoYW5nZQoKPWN1dAoKc3ViIF9JVFNNQ2hhbmdlR2V0VGltZUxpbmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIGZvciBzdGFydCB0aW1lCiAgICByZXR1cm4gaWYgISRQYXJhbXtTdGFydFRpbWV9OwoKICAgICMgY2hlY2sgZm9yIHN0YXJ0IHRpbWUgaXMgYW4gaW50ZWdlciB2YWx1ZQogICAgcmV0dXJuIGlmICRQYXJhbXtTdGFydFRpbWV9ICF+IG17IFxBIFxkKyBceiB9eG1zOwoKICAgICMgY2hlY2sgZm9yIGVuZCB0aW1lCiAgICByZXR1cm4gaWYgISRQYXJhbXtFbmRUaW1lfTsKCiAgICAjIGNoZWNrIGZvciBlbmQgdGltZSBpcyBhbiBpbnRlZ2VyIHZhbHVlCiAgICByZXR1cm4gaWYgJFBhcmFte0VuZFRpbWV9ICF+IG17IFxBIFxkKyBceiB9eG1zOwoKICAgICMgY2hlY2sgZm9yIHRpY2tzCiAgICByZXR1cm4gaWYgISRQYXJhbXtUaWNrc307CgogICAgIyBjaGVjayBmb3IgdGlja3MgaXMgYW4gaW50ZWdlciB2YWx1ZQogICAgcmV0dXJuIGlmICRQYXJhbXtUaWNrc30gIX4gbXsgXEEgXGQrIFx6IH14bXM7CgogICAgIyBnZXQgY3VycmVudCBzeXN0ZW0gdGltZQogICAgbXkgJEN1cnJlbnRUaW1lID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKS0+U3lzdGVtVGltZSgpOwoKICAgICMgY2hlY2sgZm9yIHN5c3RlbSB0aW1lCiAgICByZXR1cm4gaWYgISRDdXJyZW50VGltZTsKCiAgICAjIGNoZWNrIGlmIGN1cnJlbnQgdGltZSBpcyBpbiBjaGFuZ2UgdGltZSBpbnRlcnZhbAogICAgcmV0dXJuIGlmICRDdXJyZW50VGltZSA8ICRQYXJhbXtTdGFydFRpbWV9OwogICAgcmV0dXJuIGlmICRDdXJyZW50VGltZSA+ICRQYXJhbXtFbmRUaW1lfTsKCiAgICAjIHRpbWUgbGluZSBkYXRhCiAgICBteSAlVGltZUxpbmU7CgogICAgIyBjYWxjdWxhdGUgcGVyY2VudCBvZiB0aW1lbGluZQogICAgbXkgJFJlbGF0aXZlRW5kICAgPSAkUGFyYW17RW5kVGltZX0gLSAkUGFyYW17U3RhcnRUaW1lfTsKICAgIG15ICRSZWxhdGl2ZVN0YXJ0ID0gJEN1cnJlbnRUaW1lIC0gJFBhcmFte1N0YXJ0VGltZX07CgogICAgIyBnZXQgdGltZWxpbmUgaW5kZW50IHdpdGggMSBkaWdpdCBhZnRlciBkZWNpbWFsIHBvaW50CiAgICAkVGltZUxpbmV7VGltZUxpbmVMZWZ0fSA9IHNwcmludGYoICIlLjFmIiwgKCAkUmVsYXRpdmVTdGFydCAvICRSZWxhdGl2ZUVuZCApICogMTAwICk7CgogICAgIyB2ZXJpZnkgcGVyY2VudCB2YWx1ZXMKICAgIGlmICggJFRpbWVMaW5le1RpbWVMaW5lTGVmdH0gPD0gMCApIHsKICAgICAgICAkVGltZUxpbmV7VGltZUxpbmVMZWZ0fSA9IDA7CiAgICB9CiAgICBpZiAoICRUaW1lTGluZXtUaW1lTGluZUxlZnR9ID49IDEwMCApIHsKICAgICAgICAkVGltZUxpbmV7VGltZUxpbmVMZWZ0fSA9IDk5Ljk7CiAgICB9CgogICAgcmV0dXJuIFwlVGltZUxpbmU7Cn0KCj1lbmQgSW50ZXJuYWw6Cgo9YmFjawoKPWN1dAoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dDo6SVRTTVRlbXBsYXRlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKdXNlIFBPU0lYIHF3KGNlaWwpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPW92ZXIgNAoKPWl0ZW0gSVRTTVRlbXBsYXRlTGlzdFNob3coKQoKUmV0dXJucyBhIGxpc3Qgb2YgdGVtcGxhdGVzIGFzIHNvcnRhYmxlIGxpc3Qgd2l0aCBwYWdpbmF0aW9uLgoKVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIEw8S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dDo6SVRTTUNoYW5nZTo6SVRNQ2hhbmdlTGlzdFNob3coKT4KaW4gRjxLZXJuZWwvT3V0cHV0L0hUTUwvTGF5b3V0SVRTTUNoYW5nZS5wbT4uCgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPklUU01UZW1wbGF0ZUxpc3RTaG93KAogICAgICAgIFRlbXBsYXRlSURzICA9PiAkVGVtcGxhdGVJRHNSZWYsICAgICAgICAgICAgICAgICAgIyB0b3RhbCBsaXN0IG9mIHRlbXBsYXRlIGlkcywgdGhhdCBjYW4gYmUgbGlzdGVkCiAgICAgICAgVG90YWwgICAgICA9PiBzY2FsYXIgQHsgJFRlbXBsYXRlSURzUmVmIH0sICAgICAgICAjIHRvdGFsIG51bWJlciBvZiBsaXN0IGl0ZW1zLCB0ZW1wbGF0ZXMgaW4gdGhpcyBjYXNlCiAgICAgICAgRmlsdGVyICAgICA9PiAnQWxsJywKICAgICAgICBGaWx0ZXJzICAgID0+IFwlTmF2QmFyRmlsdGVyLAogICAgICAgIEZpbHRlckxpbmsgPT4gJExpbmtGaWx0ZXIsCiAgICAgICAgVGl0bGVOYW1lICA9PiAnT3ZlcnZpZXc6IFRlbXBsYXRlJywKICAgICAgICBUaXRsZVZhbHVlID0+ICRTZWxmLT57RmlsdGVyfSwKICAgICAgICBFbnYgICAgICAgID0+ICRTZWxmLAogICAgICAgIExpbmtQYWdlICAgPT4gJExpbmtQYWdlLAogICAgICAgIExpbmtTb3J0ICAgPT4gJExpbmtTb3J0LAogICAgKTsKCj1jdXQKCnN1YiBJVFNNVGVtcGxhdGVMaXN0U2hvdyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdGFrZSBvYmplY3QgcmVmIHRvIGxvY2FsLCByZW1vdmUgaXQgZnJvbSAlUGFyYW0gKHByZXZlbnQgbWVtb3J5IGxlYWspCiAgICBteSAkRW52ID0gZGVsZXRlICRQYXJhbXtFbnZ9OwoKICAgICMgZm9yIG5vdyB0aGVyZSBpcyBvbmx5IHRoZSAnU21hbGwnIHZpZXcKICAgIG15ICRWaWV3ID0gJ1NtYWxsJzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZ2V0IGJhY2tlbmQgZnJvbSBjb25maWcKICAgIG15ICRCYWNrZW5kcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OlRlbXBsYXRlT3ZlcnZpZXcnKTsKICAgIGlmICggISRCYWNrZW5kcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAnTmVlZCBjb25maWcgb3B0aW9uICVzIScsCiAgICAgICAgICAgICAgICAnSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OlRlbXBsYXRlT3ZlcnZpZXcnLAogICAgICAgICAgICApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBoYXNoLXJlZgogICAgaWYgKCByZWYgJEJhY2tlbmRzIG5lICdIQVNIJyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICAgICAnQ29uZmlnIG9wdGlvbiAlcyBuZWVkcyB0byBiZSBhIEhBU0ggcmVmIScsCiAgICAgICAgICAgICAgICAnSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OlRlbXBsYXRlT3ZlcnZpZXcnLAogICAgICAgICAgICApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBjb25maWcga2V5CiAgICBpZiAoICEkQmFja2VuZHMtPnskVmlld30gKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnTm8gY29uZmlnIG9wdGlvbiBmb3VuZCBmb3IgdGhlIHZpZXcgIiVzIiEnLCAkVmlldyApLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG5hdiBiYXIKICAgIG15ICRTdGFydEhpdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdGFydEhpdCcgKSB8fCAxOwoKICAgICMgY2hlY2sgc3RhcnQgb3B0aW9uLCBpZiBoaWdoZXIgdGhlbiBlbGVtZW50cyBhdmFpbGFibGUsIHNldAogICAgIyBpdCB0byB0aGUgbGFzdCBvdmVydmlldyBwYWdlIChUaGFua3MgdG8gU3RlZmFuIFNjaG1pZHQhKQogICAgbXkgJFBhZ2VTaG93biA9ICRCYWNrZW5kcy0+eyRWaWV3fS0+e1BhZ2VTaG93bn07CiAgICBpZiAoICRTdGFydEhpdCA+ICRQYXJhbXtUb3RhbH0gKSB7CiAgICAgICAgbXkgJFBhZ2VzID0gaW50KCAoICRQYXJhbXtUb3RhbH0gLyAkUGFnZVNob3duICkgKyAwLjk5OTk5ICk7CiAgICAgICAgJFN0YXJ0SGl0ID0gKCAoICRQYWdlcyAtIDEgKSAqICRQYWdlU2hvd24gKSArIDE7CiAgICB9CgogICAgIyBzZXQgcGFnZSBsaW1pdCBhbmQgYnVpbGQgcGFnZSBuYXYKICAgIG15ICRMaW1pdCA9ICRQYXJhbXtMaW1pdH0gfHwgMjBfMDAwOwogICAgbXkgJVBhZ2VOYXYgPSAkTGF5b3V0T2JqZWN0LT5QYWdlTmF2QmFyKAogICAgICAgIExpbWl0ICAgICA9PiAkTGltaXQsCiAgICAgICAgU3RhcnRIaXQgID0+ICRTdGFydEhpdCwKICAgICAgICBQYWdlU2hvd24gPT4gJFBhZ2VTaG93biwKICAgICAgICBBbGxIaXRzICAgPT4gJFBhcmFte1RvdGFsfSB8fCAwLAogICAgICAgIEFjdGlvbiAgICA9PiAnQWN0aW9uPScgLiAkTGF5b3V0T2JqZWN0LT57QWN0aW9ufSwKICAgICAgICBMaW5rICAgICAgPT4gJFBhcmFte0xpbmtQYWdlfSwKICAgICk7CgogICAgIyBidWlsZCBuYXZiYXIgY29udGVudAogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXInLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgIyBiYWNrIGxpbmsKICAgIGlmICggJFBhcmFte0xpbmtCYWNrfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJQYWdlQmFjaycsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGZpbHRlcnMKICAgIGlmICggJFBhcmFte0ZpbHRlcnN9ICkgewoKICAgICAgICAjIGdldCBnaXZlbiBmaWx0ZXJzCiAgICAgICAgbXkgQE5hdkJhckZpbHRlcnM7CiAgICAgICAgZm9yIG15ICRQcmlvICggc29ydCBrZXlzICV7ICRQYXJhbXtGaWx0ZXJzfSB9ICkgewogICAgICAgICAgICBwdXNoIEBOYXZCYXJGaWx0ZXJzLCAkUGFyYW17RmlsdGVyc30tPnskUHJpb307CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIGZpbHRlciBjb250ZW50CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyRmlsdGVyJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBsb29wIG92ZXIgZmlsdGVycwogICAgICAgIG15ICRDb3VudCA9IDA7CiAgICAgICAgZm9yIG15ICRGaWx0ZXIgKEBOYXZCYXJGaWx0ZXJzKSB7CgogICAgICAgICAgICAjIGluY3JlbWVudCBmaWx0ZXIgY291bnQgYW5kIGJ1aWxkIGZpbHRlciBpdGVtCiAgICAgICAgICAgICRDb3VudCsrOwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbScsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJXskRmlsdGVyfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGZpbHRlciBpcyBzZWxlY3RlZAogICAgICAgICAgICBpZiAoICRGaWx0ZXItPntGaWx0ZXJ9IGVxICRQYXJhbXtGaWx0ZXJ9ICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhckZpbHRlckl0ZW1TZWxlY3RlZE5vdCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgJXskRmlsdGVyfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGxvb3Agb3ZlciBjb25maWd1cmVkIGJhY2tlbmRzLCB3aGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBhIHNpbmdsZSBiYWNrZW5kCiAgICBmb3IgbXkgJEJhY2tlbmQgKCBzb3J0IGtleXMgJXskQmFja2VuZHN9ICkgewoKICAgICAgICAjIGJ1aWxkIG5hdmJhciB2aWV3IG1vZGUKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJXsgJEJhY2tlbmRzLT57JEJhY2tlbmR9IH0sCiAgICAgICAgICAgICAgICBGaWx0ZXIgPT4gJFBhcmFte0ZpbHRlcn0sCiAgICAgICAgICAgICAgICBWaWV3ICAgPT4gJEJhY2tlbmQsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjdXJyZW50IHZpZXcgaXMgY29uZmlndXJlZCBpbiBiYWNrZW5kCiAgICAgICAgaWYgKCAkVmlldyBlcSAkQmFja2VuZCApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclZpZXdNb2RlU2VsZWN0ZWQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICV7ICRCYWNrZW5kcy0+eyRCYWNrZW5kfSB9LAogICAgICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkUGFyYW17RmlsdGVyfSwKICAgICAgICAgICAgICAgICAgICBWaWV3ICAgPT4gJEJhY2tlbmQsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclZpZXdNb2RlTm90U2VsZWN0ZWQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICV7ICRCYWNrZW5kcy0+eyRCYWNrZW5kfSB9LAogICAgICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkUGFyYW17RmlsdGVyfSwKICAgICAgICAgICAgICAgICAgICBWaWV3ICAgPT4gJEJhY2tlbmQsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIHBhZ2UgbmF2IGlzIGF2YWlsYWJsZQogICAgaWYgKCVQYWdlTmF2KSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyUGFnZU5hdkJhcicsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYWdlTmF2LAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBpZiBuYXYgYmFyIGlzIGF2YWlsYWJsZQogICAgaWYgKCAkUGFyYW17TmF2QmFyfSApIHsKICAgICAgICBpZiAoICRQYXJhbXtOYXZCYXJ9LT57TWFpbk5hbWV9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyTWFpbicsCiAgICAgICAgICAgICAgICBEYXRhID0+ICRQYXJhbXtOYXZCYXJ9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGJ1aWxkIGh0bWwgY29udGVudAogICAgbXkgJE91dHB1dE5hdkJhciA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXdOYXZCYXInLAogICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgIyBjcmVhdGUgb3V0cHV0CiAgICBteSAkT3V0cHV0UmF3ID0gJyc7CiAgICBpZiAoICEkUGFyYW17T3V0cHV0fSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5QcmludCgKICAgICAgICAgICAgT3V0cHV0ID0+IFwkT3V0cHV0TmF2QmFyLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkT3V0cHV0UmF3IC49ICRPdXRwdXROYXZCYXI7CiAgICB9CgogICAgIyBsb2FkIG1vZHVsZQogICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSggJEJhY2tlbmRzLT57JFZpZXd9LT57TW9kdWxlfSApICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKCk7CiAgICB9CgogICAgIyBjaGVjayBmb3IgYmFja2VuZCBvYmplY3QKICAgIG15ICRPYmplY3QgPSAkQmFja2VuZHMtPnskVmlld30tPntNb2R1bGV9LT5uZXcoICV7JEVudn0gKTsKICAgIHJldHVybiBpZiAhJE9iamVjdDsKCiAgICAjIHJ1biBtb2R1bGUKICAgIG15ICRPdXRwdXQgPSAkT2JqZWN0LT5SdW4oCiAgICAgICAgJVBhcmFtLAogICAgICAgIExpbWl0ICAgICA9PiAkTGltaXQsCiAgICAgICAgU3RhcnRIaXQgID0+ICRTdGFydEhpdCwKICAgICAgICBQYWdlU2hvd24gPT4gJFBhZ2VTaG93biwKICAgICAgICBBbGxIaXRzICAgPT4gJFBhcmFte1RvdGFsfSB8fCAwLAogICAgKTsKCiAgICAjIGNyZWF0ZSBvdXRwdXQKICAgIGlmICggISRQYXJhbXtPdXRwdXR9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPlByaW50KAogICAgICAgICAgICBPdXRwdXQgPT4gXCRPdXRwdXQsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRPdXRwdXRSYXcgLj0gJE91dHB1dDsKICAgIH0KCiAgICAjIGNyZWF0ZSBvdmVydmlldyBuYXYgYmFyCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhcicsCiAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgIyByZXR1cm4gY29udGVudCBpZiBhdmFpbGFibGUKICAgIHJldHVybiAkT3V0cHV0UmF3Owp9Cgo9YmVnaW4gSW50ZXJuYWw6Cgo9ZW5kIEludGVybmFsOgoKPWJhY2sKCj1jdXQKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3Q6OklUU01DaGFuZ2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwp1c2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6TGFuZ3VhZ2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpKU09OJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VXNlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3Q6OklUU01DaGFuZ2UgLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGxheW91dCBmdW5jdGlvbnMgb2YgbGluayBvYmplY3QgKGNoYW5nZSkKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGlua09iamVjdDo6SVRTTUNoYW5nZS0+bmV3KAogICAgICAgIFVzZXJMYW5ndWFnZSA9PiAnZW4nLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKHF3KFVzZXJMYW5ndWFnZSBVc2VySUQpKSB7CiAgICAgICAgJFNlbGYtPnskTmVlZGVkfSA9ICRQYXJhbXskTmVlZGVkfSB8fCBkaWUgIkdvdCBubyAkTmVlZGVkISI7CiAgICB9CgogICAgIyBXZSBuZWVkIG91ciBvd24gTGF5b3V0T2JqZWN0IGluc3RhbmNlIHRvIGF2b2lkIGJsb2NrZGF0YSBjb2xsaXNpb25zCiAgICAjICAgd2l0aCB0aGUgbWFpbiBwYWdlLgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dC0+bmV3KCAleyRTZWxmfSApOwoKICAgICMgZGVmaW5lIG5lZWRlZCB2YXJpYWJsZXMKICAgICRTZWxmLT57T2JqZWN0RGF0YX0gPSB7CiAgICAgICAgT2JqZWN0ICAgICA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgUmVhbG5hbWUgICA9PiAnQ2hhbmdlJywKICAgICAgICBPYmplY3ROYW1lID0+ICdTb3VyY2VPYmplY3RJRCcsCiAgICB9OwoKICAgICMgZ2V0IGNvbmZpZwogICAgJFNlbGYtPntDaGFuZ2VIb29rfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSVRTTUNoYW5nZTo6SG9vaycpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gVGFibGVDcmVhdGVDb21wbGV4KCkKCnJldHVybiBhbiBhcnJheSB3aXRoIHRoZSBibG9jayBkYXRhCgpSZXR1cm4KCiAgICBAQmxvY2tEYXRhID0gKAoKICAgICAgICBPYmplY3ROYW1lICA9PiAnQ2hhbmdlSUQnLAogICAgICAgIE9iamVjdElEICAgID0+ICcxMjMnLAoKICAgICAgICBPYmplY3QgICAgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgIEJsb2NrbmFtZSA9PiAnQ2hhbmdlJywKICAgICAgICBIZWFkbGluZSAgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcnLAogICAgICAgICAgICAgICAgV2lkdGggICA9PiAyMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ2hhbmdlIycsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDIwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ2hhbmdlIFRpdGxlJywKICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMjAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDaGFuZ2UgU3RhdGUnLAogICAgICAgICAgICAgICAgV2lkdGggICA9PiAxMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0NoYW5nZWQnLAogICAgICAgICAgICAgICAgV2lkdGggICA9PiAxNTAsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgICAgICBJdGVtTGlzdCA9PiBbCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnQ2hhbmdlU3RhdGVTaWduYWwnLAogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgID0+IDEyMywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnZ3JheWxlZCcsCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGUgPT4gJ3JlcXVlc3RlZCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzIwMDkxMDAxMTIzNDU3NzgnLAogICAgICAgICAgICAgICAgICAgIExpbmsgICAgPT4gJ0FjdGlvbj1BZ2VudElUU01DaGFuZ2Vab29tO0NoYW5nZUlEPTEyMycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICdDaGFuZ2UgVGl0bGUnLAogICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA3MCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJ3JlcXVlc3RlZCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RpbWVMb25nJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcyMDA4LTAxLTAxIDEyOjEyOjAwJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnQ2hhbmdlU3RhdGVTaWduYWwnLAogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgID0+IDQ1NiwKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICA9PiAnZ3JlZW5sZWQnLAogICAgICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlID0+ICdjbG9zZWQnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcyMDA5MTAwMTEyMzQ1Nzc0JywKICAgICAgICAgICAgICAgICAgICBMaW5rICAgID0+ICdBY3Rpb249QWdlbnRJVFNNQ2hhbmdlWm9vbTtDaGFuZ2VJRD00NTYnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAnQ2hhbmdlIFRpdGxlJywKICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNzAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICdjbG9zZWQnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUaW1lTG9uZycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOC0wMS0wMSAxMjoxMjowMCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIF0sCiAgICApOwoKICAgIEBCbG9ja0RhdGEgPSAkTGlua09iamVjdC0+VGFibGVDcmVhdGVDb21wbGV4KAogICAgICAgIE9iamVjdExpbmtMaXN0V2l0aERhdGEgPT4gJE9iamVjdExpbmtMaXN0UmVmLAogICAgKTsKCj1jdXQKCnN1YiBUYWJsZUNyZWF0ZUNvbXBsZXggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IHx8IHJlZiAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gbmUgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBPYmplY3RMaW5rTGlzdFdpdGhEYXRhIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjb252ZXJ0IHRoZSBsaXN0CiAgICBteSAlTGlua0xpc3Q7CiAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSB9ICkgewoKICAgICAgICAjIGV4dHJhY3QgbGluayB0eXBlIExpc3QKICAgICAgICBteSAkTGlua1R5cGVMaXN0ID0gJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9LT57JExpbmtUeXBlfTsKCiAgICAgICAgZm9yIG15ICREaXJlY3Rpb24gKCBzb3J0IGtleXMgJXskTGlua1R5cGVMaXN0fSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCBkaXJlY3Rpb24gbGlzdAogICAgICAgICAgICBteSAkRGlyZWN0aW9uTGlzdCA9ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufTsKCiAgICAgICAgICAgIGZvciBteSAkQ2hhbmdlSUQgKCBzb3J0IGtleXMgJXskRGlyZWN0aW9uTGlzdH0gKSB7CgogICAgICAgICAgICAgICAgJExpbmtMaXN0eyRDaGFuZ2VJRH0tPntEYXRhfSA9ICREaXJlY3Rpb25MaXN0LT57JENoYW5nZUlEfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICBteSAkQ29tcGxleFRhYmxlRGF0YSA9ICRDb25maWdPYmplY3QtPkdldCgiTGlua09iamVjdDo6Q29tcGxleFRhYmxlIik7CiAgICBteSAkRGVmYXVsdENvbHVtbnM7CiAgICBpZiAoCiAgICAgICAgJENvbXBsZXhUYWJsZURhdGEKICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSgkQ29tcGxleFRhYmxlRGF0YSkKICAgICAgICAmJiAkQ29tcGxleFRhYmxlRGF0YS0+e0lUU01DaGFuZ2V9CiAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRDb21wbGV4VGFibGVEYXRhLT57SVRTTUNoYW5nZX0gKQogICAgICAgICkKICAgIHsKICAgICAgICAkRGVmYXVsdENvbHVtbnMgPSAkQ29tcGxleFRhYmxlRGF0YS0+eyJJVFNNQ2hhbmdlIn0tPnsiRGVmYXVsdENvbHVtbnMifTsKICAgIH0KCiAgICBteSBAVGltZUxvbmdUeXBlcyA9ICgKICAgICAgICAnQ3JlYXRlVGltZScsCiAgICAgICAgJ0NoYW5nZVRpbWUnLAogICAgICAgICdQbGFubmVkU3RhcnRUaW1lJywKICAgICAgICAnUGxhbm5lZEVuZFRpbWUnLAogICAgICAgICdBY3R1YWxTdGFydFRpbWUnLAogICAgICAgICdBY3R1YWxFbmRUaW1lJywKICAgICAgICAnUmVxdWVzdGVkVGltZScsCiAgICApOwoKICAgIG15IEBUcmFuc2xhdGVUeXBlcyA9ICgKICAgICAgICAnQ2F0ZWdvcnknLAogICAgICAgICdJbXBhY3QnLAogICAgICAgICdQcmlvcml0eScsCiAgICApOwoKICAgICMgYWx3YXlzIHNob3cgdGhlIGNoYW5nZSBzdGF0ZSBmbGFnIGFuZCB0aGUgY2hhbmdlIG51bWJlcgogICAgbXkgQEhlYWRsaW5lID0gKAogICAgICAgIHsKICAgICAgICAgICAgQ29udGVudCA9PiAnQ2hhbmdlU3RhdGUnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBDb250ZW50ID0+ICRTZWxmLT57Q2hhbmdlSG9va30sCiAgICAgICAgfSwKICAgICk7CgogICAgbXkgJFVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKICAgICMgTG9hZCB1c2VyIHByZWZlcmVuY2VzLgogICAgbXkgJVByZWZlcmVuY2VzID0gJFVzZXJPYmplY3QtPkdldFByZWZlcmVuY2VzKAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIGlmICggISREZWZhdWx0Q29sdW1ucyB8fCAhSXNIYXNoUmVmV2l0aERhdGEoJERlZmF1bHRDb2x1bW5zKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ01pc3NpbmcgY29uZmlndXJhdGlvbiBmb3IgTGlua09iamVjdDo6Q29tcGxleFRhYmxlIyMjSVRTTUNoYW5nZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgR2V0IGRlZmF1bHQgY29sdW1uIHByaW9yaXR5IGZyb20gU3lzQ29uZmlnLgogICAgIyBFYWNoIGNvbHVtbiBpbiB0YWJsZSAoVGl0bGUsIFN0YXRlLC4uLikgaGFzIGRlZmluZWQgUHJpb3JpdHkgaW4gU3lzQ29uZmlnLiBTeXN0ZW0gdXNlIHRoaXMKICAgICMgICBwcmlvcml0eSB0byBzb3J0IGNvbHVtbnMsIGlmIHVzZXIgZG9lc24ndCBoYXZlIG93biBzZXR0aW5ncy4KICAgIG15ICVTb3J0T3JkZXI7CiAgICBpZiAoCiAgICAgICAgJENvbXBsZXhUYWJsZURhdGEtPnsiSVRTTUNoYW5nZSJ9LT57IlByaW9yaXR5In0KICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJENvbXBsZXhUYWJsZURhdGEtPnsiSVRTTUNoYW5nZSJ9LT57IlByaW9yaXR5In0gKQogICAgICAgICkKICAgIHsKICAgICAgICAlU29ydE9yZGVyID0gJXsgJENvbXBsZXhUYWJsZURhdGEtPnsiSVRTTUNoYW5nZSJ9LT57IlByaW9yaXR5In0gfTsKICAgIH0KCiAgICBteSAlVXNlckNvbHVtbnMgPSAleyREZWZhdWx0Q29sdW1uc307CgogICAgaWYgKCAkUHJlZmVyZW5jZXN7J0xpbmtPYmplY3Q6OkNvbXBsZXhUYWJsZS1JVFNNQ2hhbmdlJ30gKSB7CgogICAgICAgIG15ICRDb2x1bW5zRW5hYmxlZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpKU09OJyktPkRlY29kZSgKICAgICAgICAgICAgRGF0YSA9PiAkUHJlZmVyZW5jZXN7J0xpbmtPYmplY3Q6OkNvbXBsZXhUYWJsZS1JVFNNQ2hhbmdlJ30sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQ29sdW1uc0VuYWJsZWQKICAgICAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoJENvbHVtbnNFbmFibGVkKQogICAgICAgICAgICAmJiAkQ29sdW1uc0VuYWJsZWQtPntPcmRlcn0KICAgICAgICAgICAgJiYgSXNBcnJheVJlZldpdGhEYXRhKCAkQ29sdW1uc0VuYWJsZWQtPntPcmRlcn0gKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAjIENsZWFyIHNvcnQgb3JkZXIuCiAgICAgICAgICAgICVTb3J0T3JkZXIgPSAoKTsKCiAgICAgICAgICAgIERFRkFVTFRDT0xVTU46CiAgICAgICAgICAgIGZvciBteSAkRGVmYXVsdENvbHVtbiAoIHNvcnQga2V5cyAlVXNlckNvbHVtbnMgKSB7CiAgICAgICAgICAgICAgICBteSAkSW5kZXggPSAwOwoKICAgICAgICAgICAgICAgIGZvciBteSAkVXNlclNldHRpbmcgKCBAeyAkQ29sdW1uc0VuYWJsZWQtPntPcmRlcn0gfSApIHsKICAgICAgICAgICAgICAgICAgICAkSW5kZXgrKzsKICAgICAgICAgICAgICAgICAgICBpZiAoICREZWZhdWx0Q29sdW1uIGVxICRVc2VyU2V0dGluZyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFVzZXJDb2x1bW5zeyREZWZhdWx0Q29sdW1ufSA9IDI7CiAgICAgICAgICAgICAgICAgICAgICAgICRTb3J0T3JkZXJ7JERlZmF1bHRDb2x1bW59ICAgPSAkSW5kZXg7CgogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IERFRkFVTFRDT0xVTU47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgTm90IGZvdW5kLCBtZWFucyB1c2VyIGNob3NlIHRvIGhpZGUgdGhpcyBpdGVtLgogICAgICAgICAgICAgICAgaWYgKCAkVXNlckNvbHVtbnN7JERlZmF1bHRDb2x1bW59ID09IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgJFVzZXJDb2x1bW5zeyREZWZhdWx0Q29sdW1ufSA9IDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhJFNvcnRPcmRlcnskRGVmYXVsdENvbHVtbn0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFNvcnRPcmRlcnskRGVmYXVsdENvbHVtbn0gPSAwOyAgICAjIFNldCAwLCBpdCBzeXN0ZW0gd2lsbCBoaWRlIHRoaXMgaXRlbSBhbnl3YXlzCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBVc2VyIGhhcyBubyBvd24gc2V0dGluZ3MuCiAgICAgICAgZm9yIG15ICRDb2x1bW4gKCBzb3J0IGtleXMgJVVzZXJDb2x1bW5zICkgewogICAgICAgICAgICBpZiAoICEkU29ydE9yZGVyeyRDb2x1bW59ICkgewogICAgICAgICAgICAgICAgJFNvcnRPcmRlcnskQ29sdW1ufSA9IDA7ICAgICAgICAgICAgICAgIyBTZXQgMCwgaXQgc3lzdGVtIHdpbGwgaGlkZSB0aGlzIGl0ZW0gYW55d2F5cwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgRGVmaW5lIEhlYWRsaW5lIGNvbHVtbnMuCiAgICBteSBAQWxsQ29sdW1uczsKICAgIENPTFVNTjoKICAgIGZvciBteSAkQ29sdW1uICggc29ydCB7ICRTb3J0T3JkZXJ7JGF9IDw9PiAkU29ydE9yZGVyeyRifSB9IGtleXMgJVVzZXJDb2x1bW5zICkgewoKICAgICAgICBteSAkQ29sdW1uVHJhbnNsYXRlID0gJENvbHVtbjsKICAgICAgICBpZiAoICRDb2x1bW4gZXEgJ0NyZWF0ZVRpbWUnICkgewogICAgICAgICAgICAkQ29sdW1uVHJhbnNsYXRlID0gVHJhbnNsYXRhYmxlKCdDcmVhdGVkJyk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJENvbHVtbiBlcSAnQ2hhbmdlVGltZScgKSB7CiAgICAgICAgICAgICRDb2x1bW5UcmFuc2xhdGUgPSBUcmFuc2xhdGFibGUoJ0NoYW5nZWQnKTsKICAgICAgICB9CgogICAgICAgIHB1c2ggQEFsbENvbHVtbnMsIHsKICAgICAgICAgICAgQ29sdW1uTmFtZSAgICAgID0+ICRDb2x1bW4sCiAgICAgICAgICAgIENvbHVtblRyYW5zbGF0ZSA9PiAkQ29sdW1uVHJhbnNsYXRlLAogICAgICAgIH07CgogICAgICAgICMgaWYgZW5hYmxlZCBieSBkZWZhdWx0LgogICAgICAgIGlmICggJFVzZXJDb2x1bW5zeyRDb2x1bW59ID09IDIgKSB7CiAgICAgICAgICAgIHB1c2ggQEhlYWRsaW5lLCB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRDb2x1bW5UcmFuc2xhdGUsCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIHRoZSBpdGVtIGxpc3QsIHNvcnQgYnkgQ2hhbmdlSUQgRG93bgogICAgbXkgQEl0ZW1MaXN0OwogICAgZm9yIG15ICRDaGFuZ2VJRCAoCiAgICAgICAgc29ydCB7CiAgICAgICAgICAgICRMaW5rTGlzdHskYn17RGF0YX0tPntDaGFuZ2VJRH0gPD0+ICRMaW5rTGlzdHskYX17RGF0YX0tPntDaGFuZ2VJRH0KICAgICAgICB9IGtleXMgJUxpbmtMaXN0CiAgICAgICAgKQogICAgewoKICAgICAgICAjIGV4dHJhY3QgY2hhbmdlIGRhdGEKICAgICAgICBteSAkQ2hhbmdlID0gJExpbmtMaXN0eyRDaGFuZ2VJRH0tPntEYXRhfTsKCiAgICAgICAgbXkgQEl0ZW1Db2x1bW5zID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnQ2hhbmdlU3RhdGVTaWduYWwnLAogICAgICAgICAgICAgICAgS2V5ICAgICAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJENoYW5nZS0+e0NoYW5nZVN0YXRlU2lnbmFsfSwKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlID0+ICRDaGFuZ2UtPntDaGFuZ2VTdGF0ZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgQ29udGVudCA9PiAkQ2hhbmdlLT57Q2hhbmdlTnVtYmVyfSwKICAgICAgICAgICAgICAgIExpbmsgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57QmFzZWxpbmt9CiAgICAgICAgICAgICAgICAgICAgLiAnQWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9JwogICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgVGl0bGUgPT4gIkNoYW5nZSMgJENoYW5nZS0+e0NoYW5nZU51bWJlcn06ICRDaGFuZ2UtPntDaGFuZ2VUaXRsZX0iLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIENPTFVNTjoKICAgICAgICBmb3IgbXkgJENvbHVtbiAoIHNvcnQgeyAkU29ydE9yZGVyeyRhfSA8PT4gJFNvcnRPcmRlcnskYn0gfSBrZXlzICVVc2VyQ29sdW1ucyApIHsKCiAgICAgICAgICAgICMgaWYgZW5hYmxlZCBieSBkZWZhdWx0CiAgICAgICAgICAgIGlmICggJFVzZXJDb2x1bW5zeyRDb2x1bW59ID09IDIgKSB7CgogICAgICAgICAgICAgICAgbXkgJUhhc2g7CiAgICAgICAgICAgICAgICBpZiAoIGdyZXAgeyAkXyBlcSAkQ29sdW1uIH0gQFRpbWVMb25nVHlwZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgJEhhc2h7J1R5cGUnfSA9ICdUaW1lTG9uZyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkSGFzaHsnVHlwZSd9ID0gJ1RleHQnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggZ3JlcCB7ICRfIGVxICRDb2x1bW4gfSBAVHJhbnNsYXRlVHlwZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgJEhhc2h7J1RyYW5zbGF0ZSd9ID0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkSGFzaHsnQ29udGVudCd9ID0gJENoYW5nZS0+eyRDb2x1bW59OwoKICAgICAgICAgICAgICAgIHB1c2ggQEl0ZW1Db2x1bW5zLCBcJUhhc2g7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHB1c2ggQEl0ZW1MaXN0LCBcQEl0ZW1Db2x1bW5zOwogICAgfQoKICAgIHJldHVybiBpZiAhQEl0ZW1MaXN0OwoKICAgICMgRGVmaW5lIHRoZSBibG9jayBkYXRhLgogICAgbXkgJUJsb2NrID0gKAogICAgICAgIE9iamVjdCAgICAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0sCiAgICAgICAgQmxvY2tuYW1lICA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57T2JqZWN0fSwKICAgICAgICBPYmplY3ROYW1lID0+ICRTZWxmLT57T2JqZWN0RGF0YX0tPntPYmplY3ROYW1lfSwKICAgICAgICBPYmplY3RJRCAgID0+ICRQYXJhbXtPYmplY3RJRH0sCiAgICAgICAgSGVhZGxpbmUgICA9PiBcQEhlYWRsaW5lLAogICAgICAgIEl0ZW1MaXN0ICAgPT4gXEBJdGVtTGlzdCwKICAgICAgICBBbGxDb2x1bW5zID0+IFxAQWxsQ29sdW1ucywKICAgICk7CgogICAgcmV0dXJuICggXCVCbG9jayApOwoKfQoKPWl0ZW0gVGFibGVDcmVhdGVTaW1wbGUoKQoKcmV0dXJuIGEgaGFzaCB3aXRoIHRoZSBsaW5rIG91dHB1dCBkYXRhCgpSZXR1cm4KCiAgICAlTGlua091dHB1dERhdGEgPSAoCiAgICAgICAgTm9ybWFsOjpTb3VyY2UgPT4gewogICAgICAgICAgICBJVFNNQ2hhbmdlID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDSDoyMDA5MTAwMTEyMzU0MzIxLTEnLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgPT4gJ0NoYW5nZSMgMjAwOTEwMTYxMDAwNTQwMjogVGhlIENoYW5nZSBUaXRsZScsCiAgICAgICAgICAgICAgICAgICAgQ3NzICAgICA9PiAnc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoIicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0NIOjIwMDkxMDAxMTIzNTQzMjEtNicsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAnQ2hhbmdlIyAyMDA5MTAxNjEwMDA3NjM0OiBUaGUgQ2hhbmdlIFRpdGxlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBQYXJlbnRDaGlsZDo6VGFyZ2V0ID0+IHsKICAgICAgICAgICAgSVRTTUNoYW5nZSA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ0g6MjAwOTEwMDExMjM1NDMyMS0zJywKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgID0+ICdDaGFuZ2UjIDIwMDkxMDE2MTAwMDQ0MzMxOiBUaGUgQ2hhbmdlIFRpdGxlJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICk7CgogICAgJUxpbmtPdXRwdXREYXRhID0gJExpbmtPYmplY3QtPlRhYmxlQ3JlYXRlU2ltcGxlKAogICAgICAgIE9iamVjdExpbmtMaXN0V2l0aERhdGEgPT4gJE9iamVjdExpbmtMaXN0UmVmLAogICAgKTsKCj1jdXQKCnN1YiBUYWJsZUNyZWF0ZVNpbXBsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfHwgcmVmICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE9iamVjdExpbmtMaXN0V2l0aERhdGEhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAlTGlua091dHB1dERhdGE7CiAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSB9ICkgewoKICAgICAgICAjIGV4dHJhY3QgbGluayB0eXBlIExpc3QKICAgICAgICBteSAkTGlua1R5cGVMaXN0ID0gJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9LT57JExpbmtUeXBlfTsKCiAgICAgICAgZm9yIG15ICREaXJlY3Rpb24gKCBzb3J0IGtleXMgJXskTGlua1R5cGVMaXN0fSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCBkaXJlY3Rpb24gbGlzdAogICAgICAgICAgICBteSAkRGlyZWN0aW9uTGlzdCA9ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufTsKCiAgICAgICAgICAgICMgY3JlYXRlIHRoZSBpdGVtIGxpc3QsIHNvcnQgYnkgQ2hhbmdlSUQgRG93bgogICAgICAgICAgICBteSBASXRlbUxpc3Q7CiAgICAgICAgICAgIGZvciBteSAkQ2hhbmdlSUQgKAogICAgICAgICAgICAgICAgc29ydCB7CiAgICAgICAgICAgICAgICAgICAgJERpcmVjdGlvbkxpc3QtPnskYn0tPntDaGFuZ2VJRH0gPD0+ICREaXJlY3Rpb25MaXN0LT57JGF9LT57Q2hhbmdlSUR9CiAgICAgICAgICAgICAgICB9IGtleXMgJXskRGlyZWN0aW9uTGlzdH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCBjaGFuZ2UgZGF0YQogICAgICAgICAgICAgICAgbXkgJENoYW5nZSA9ICREaXJlY3Rpb25MaXN0LT57JENoYW5nZUlEfTsKCiAgICAgICAgICAgICAgICAjIGRlZmluZSBpdGVtIGRhdGEKICAgICAgICAgICAgICAgIG15ICVJdGVtID0gKAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0NIOicgLiAkQ2hhbmdlLT57Q2hhbmdlTnVtYmVyfSwKICAgICAgICAgICAgICAgICAgICBUaXRsZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAiJFNlbGYtPntDaGFuZ2VIb29rfSAkQ2hhbmdlLT57Q2hhbmdlTnVtYmVyfTogJENoYW5nZS0+e0NoYW5nZVRpdGxlfSIsCiAgICAgICAgICAgICAgICAgICAgTGluayA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntCYXNlbGlua30KICAgICAgICAgICAgICAgICAgICAgICAgLiAnQWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9JwogICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMjAsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHB1c2ggQEl0ZW1MaXN0LCBcJUl0ZW07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIGl0ZW0gbGlzdCB0byBsaW5rIG91dHB1dCBkYXRhCiAgICAgICAgICAgICRMaW5rT3V0cHV0RGF0YXsgJExpbmtUeXBlIC4gJzo6JyAuICREaXJlY3Rpb24gfS0+e0lUU01DaGFuZ2V9ID0gXEBJdGVtTGlzdDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICVMaW5rT3V0cHV0RGF0YTsKfQoKPWl0ZW0gQ29udGVudFN0cmluZ0NyZWF0ZSgpCgpyZXR1cm4gYSBvdXRwdXQgc3RyaW5nCgogICAgbXkgJFN0cmluZyA9ICRMYXlvdXRPYmplY3QtPkNvbnRlbnRTdHJpbmdDcmVhdGUoCiAgICAgICAgQ29udGVudERhdGEgPT4gJEhhc2hSZWYsCiAgICApOwoKPWN1dAoKc3ViIENvbnRlbnRTdHJpbmdDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NvbnRlbnREYXRhfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ29udGVudERhdGEhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGV4dHJhY3QgY29udGVudAogICAgbXkgJENvbnRlbnQgPSAkUGFyYW17Q29udGVudERhdGF9OwoKICAgIHJldHVybiBpZiAkQ29udGVudC0+e1R5cGV9IG5lICdDaGFuZ2VTdGF0ZVNpZ25hbCc7CgogICAgIyBidWlsZCBodG1sIGZvciBzaWduYWwgTEVECiAgICBteSAkU3RyaW5nID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGUgPT4gJzxkaXYgY2xhc3M9IkZsYWcgU21hbGwiIHRpdGxlPSJbJSBEYXRhLkNoYW5nZVN0YXRlIHwgaHRtbCAlXSI+ICcKICAgICAgICAgICAgLiAnPHNwYW4gY2xhc3M9IlslIERhdGEuQ2hhbmdlU3RhdGVTaWduYWwgfCBodG1sICVdIj48L3NwYW4+IDwvZGl2PicsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZVN0YXRlU2lnbmFsID0+ICRDb250ZW50LT57Q29udGVudH0sCiAgICAgICAgICAgIENoYW5nZVN0YXRlICAgICAgID0+ICRDb250ZW50LT57Q2hhbmdlU3RhdGV9IHx8ICcnLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAkU3RyaW5nOwp9Cgo9aXRlbSBTZWxlY3RhYmxlT2JqZWN0TGlzdCgpCgpyZXR1cm4gYW4gYXJyYXkgaGFzaCB3aXRoIHNlbGVjdGFibGUgb2JqZWN0cwoKUmV0dXJuCgogICAgQFNlbGVjdGFibGVPYmplY3RMaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICBWYWx1ZSA9PiAnQ2hhbmdlJywKICAgICAgICB9LAogICAgKTsKCiAgICBAU2VsZWN0YWJsZU9iamVjdExpc3QgPSAkTGlua09iamVjdC0+U2VsZWN0YWJsZU9iamVjdExpc3QoCiAgICAgICAgU2VsZWN0ZWQgPT4gJElkZW50aWZpZXIsICAjIChvcHRpb25hbCkKICAgICk7Cgo9Y3V0CgpzdWIgU2VsZWN0YWJsZU9iamVjdExpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU2VsZWN0ZWQ7CiAgICBpZiAoICRQYXJhbXtTZWxlY3RlZH0gJiYgJFBhcmFte1NlbGVjdGVkfSBlcSAkU2VsZi0+e09iamVjdERhdGF9LT57T2JqZWN0fSApIHsKICAgICAgICAkU2VsZWN0ZWQgPSAxOwogICAgfQoKICAgICMgb2JqZWN0IHNlbGVjdCBsaXN0CiAgICBteSBAT2JqZWN0U2VsZWN0TGlzdCA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEtleSA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57T2JqZWN0fSwKCiAgICAgICAgICAgICMgYWxzbyB1c2UgdGhlIG9iamVjdCBoZXJlIGFuZCBub3QgdGhlIHJlYWwgbmFtZSwgZm9yIHRyYW5zbGF0aW9uIGlzc3VlcwogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57T2JqZWN0fSwKCiAgICAgICAgICAgIFNlbGVjdGVkID0+ICRTZWxlY3RlZCwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gQE9iamVjdFNlbGVjdExpc3Q7Cn0KCj1pdGVtIFNlYXJjaE9wdGlvbkxpc3QoKQoKcmV0dXJuIGFuIGFycmF5IGhhc2ggd2l0aCBzZWFyY2ggb3B0aW9ucwoKUmV0dXJuCgogICAgQFNlYXJjaE9wdGlvbkxpc3QgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0NoYW5nZU51bWJlcicsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAnQ2hhbmdlIycsCiAgICAgICAgICAgIElucHV0U3RyZyA9PiAkRm9ybVN0cmluZywKICAgICAgICAgICAgRm9ybURhdGEgID0+ICcxMicsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgICAgICA9PiAnQ2hhbmdlVGl0bGUnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJ0NoYW5nZSBUaXRsZScsCiAgICAgICAgICAgIElucHV0U3RyZyA9PiAkRm9ybVN0cmluZywKICAgICAgICAgICAgRm9ybURhdGEgID0+ICdNYWlsU2VydmVyIG5lZWRzIHVwZGF0ZScsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgICAgICA9PiAnV29ya09yZGVyVGl0bGUnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJ1dvcmtvcmRlciBUaXRsZScsCiAgICAgICAgICAgIElucHV0U3RyZyA9PiAkRm9ybVN0cmluZywKICAgICAgICAgICAgRm9ybURhdGEgID0+ICdTaHV0ZG93biBvbGQgbWFpbCBzZXJ2ZXInLAogICAgICAgIH0sCiAgICApOwoKICAgIEBTZWFyY2hPcHRpb25MaXN0ID0gJExpbmtPYmplY3QtPlNlYXJjaE9wdGlvbkxpc3QoKTsKCj1jdXQKCnN1YiBTZWFyY2hPcHRpb25MaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBzZWFyY2ggb3B0aW9uIGxpc3QKICAgIG15IEBTZWFyY2hPcHRpb25MaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICA9PiAnQ2hhbmdlTnVtYmVyJywKICAgICAgICAgICAgTmFtZSA9PiAkU2VsZi0+e0NoYW5nZUhvb2t9LAogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICA9PiAnQ2hhbmdlVGl0bGUnLAogICAgICAgICAgICBOYW1lID0+ICdDaGFuZ2VUaXRsZScsCiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgID0+ICdXb3JrT3JkZXJUaXRsZScsCiAgICAgICAgICAgIE5hbWUgPT4gJ1dvcmtPcmRlclRpdGxlJywKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dCcsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBhZGQgZm9ybWtleQogICAgZm9yIG15ICRSb3cgKEBTZWFyY2hPcHRpb25MaXN0KSB7CiAgICAgICAgJFJvdy0+e0Zvcm1LZXl9ID0gJ1NFQVJDSDo6JyAuICRSb3ctPntLZXl9OwogICAgfQoKICAgICMgYWRkIGZvcm0gZGF0YSBhbmQgaW5wdXQgc3RyaW5nCiAgICBST1c6CiAgICBmb3IgbXkgJFJvdyAoQFNlYXJjaE9wdGlvbkxpc3QpIHsKCiAgICAgICAgIyBnZXQgZm9ybSBkYXRhCiAgICAgICAgJFJvdy0+e0Zvcm1EYXRhfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oCiAgICAgICAgICAgIFBhcmFtID0+ICRSb3ctPntGb3JtS2V5fSwKICAgICAgICApOwoKICAgICAgICAjIHBhcnNlIHRoZSBpbnB1dCB0ZXh0IGJsb2NrCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSW5wdXRUZXh0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAkUm93LT57Rm9ybUtleX0sCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkUm93LT57Rm9ybURhdGF9IHx8ICcnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgYWRkIHRoZSBpbnB1dCBzdHJpbmcKICAgICAgICAkUm93LT57SW5wdXRTdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0xpbmtPYmplY3QnLAogICAgICAgICk7CgogICAgICAgIG5leHQgUk9XOwogICAgfQoKICAgIHJldHVybiBAU2VhcmNoT3B0aW9uTGlzdDsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3Q6OklUU01Xb3JrT3JkZXI7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwp1c2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6TGFuZ3VhZ2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpKU09OJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VXNlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3Q6OklUU01Xb3JrT3JkZXIgLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGxheW91dCBmdW5jdGlvbnMgb2YgbGluayBvYmplY3QgKHdvcmtvcmRlcikKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGlua09iamVjdDo6SVRTTVdvcmtPcmRlci0+bmV3KAogICAgICAgIFVzZXJMYW5ndWFnZSA9PiAnZW4nLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKHF3KFVzZXJMYW5ndWFnZSBVc2VySUQpKSB7CiAgICAgICAgJFNlbGYtPnskTmVlZGVkfSA9ICRQYXJhbXskTmVlZGVkfSB8fCBkaWUgIkdvdCBubyAkTmVlZGVkISI7CiAgICB9CgogICAgIyBXZSBuZWVkIG91ciBvd24gTGF5b3V0T2JqZWN0IGluc3RhbmNlIHRvIGF2b2lkIGJsb2NrZGF0YSBjb2xsaXNpb25zCiAgICAjICAgd2l0aCB0aGUgbWFpbiBwYWdlLgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dC0+bmV3KCAleyRTZWxmfSApOwoKICAgICMgZGVmaW5lIG5lZWRlZCB2YXJpYWJsZXMKICAgICRTZWxmLT57T2JqZWN0RGF0YX0gPSB7CiAgICAgICAgT2JqZWN0ICAgICA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgUmVhbG5hbWUgICA9PiAnV29ya29yZGVyJywKICAgICAgICBPYmplY3ROYW1lID0+ICdTb3VyY2VPYmplY3RJRCcsCiAgICB9OwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGNvbmZpZwogICAgJFNlbGYtPntDaGFuZ2VIb29rfSAgICA9ICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNoYW5nZTo6SG9vaycpOwogICAgJFNlbGYtPntXb3JrT3JkZXJIb29rfSA9ICRDb25maWdPYmplY3QtPkdldCgnSVRTTVdvcmtPcmRlcjo6SG9vaycpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gVGFibGVDcmVhdGVDb21wbGV4KCkKCnJldHVybiBhbiBhcnJheSB3aXRoIHRoZSBibG9jayBkYXRhCgpSZXR1cm4KCiAgICBAQmxvY2tEYXRhID0gKAogICAgICAgIE9iamVjdCAgICA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgQmxvY2tuYW1lID0+ICdXb3JrT3JkZXInLAogICAgICAgIEhlYWRsaW5lICA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJycsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDIwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdXb3Jrb3JkZXIjJywKICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMjAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdXb3Jrb3JkZXIgVGl0bGUnLAogICAgICAgICAgICAgICAgV2lkdGggICA9PiAyMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0NoYW5nZSBUaXRsZScsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDIwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnV29ya29yZGVyIFN0YXRlJywKICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDaGFuZ2VkJywKICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTUwLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICAgICAgSXRlbUxpc3QgPT4gWwogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgPT4gJ1dvcmtPcmRlclN0YXRlU2lnbmFsJywKICAgICAgICAgICAgICAgICAgICBLZXkgICAgICAgICAgICA9PiAyLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgICAgID0+ICdncmVlbmxlZCcsCiAgICAgICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGUgPT4gJ3JlYWR5JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOTEwMDExMjM0NTc3OC0zJywKICAgICAgICAgICAgICAgICAgICBMaW5rICAgID0+ICdBY3Rpb249QWdlbnRJVFNNV29ya09yZGVyWm9vbTtXb3JrT3JkZXJJRD0yJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJ1dvcmtvcmRlciBUaXRsZScsCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDcwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAnQ2hhbmdlIFRpdGxlJywKICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNzAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ3JlYWR5JywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnVGltZUxvbmcnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzIwMDktMDEtMDEgMTI6MTI6MDAnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgID0+ICdXb3JrT3JkZXJTdGF0ZVNpZ25hbCcsCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICAgICAgPT4gNCwKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgICAgICA9PiAncmVkbGVkJywKICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZSA9PiAnY2FuY2VsZCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzIwMDkxMDAxMTIzNDU3NzgtNCcsCiAgICAgICAgICAgICAgICAgICAgTGluayAgICA9PiAnQWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlclpvb207V29ya09yZGVySUQ9NCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICdXb3Jrb3JkZXIgVGl0bGUnLAogICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA3MCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJ0NoYW5nZSBUaXRsZScsCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDcwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdhY2NlcHRlZCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RpbWVMb25nJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICcyMDA5LTAyLTAyIDEzOjEzOjAwJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgXSwKICAgICk7CgogICAgQEJsb2NrRGF0YSA9ICRMaW5rT2JqZWN0LT5UYWJsZUNyZWF0ZUNvbXBsZXgoCiAgICAgICAgT2JqZWN0TGlua0xpc3RXaXRoRGF0YSA9PiAkT2JqZWN0TGlua0xpc3RSZWYsCiAgICApOwoKPWN1dAoKc3ViIFRhYmxlQ3JlYXRlQ29tcGxleCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfHwgcmVmICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE9iamVjdExpbmtMaXN0V2l0aERhdGEhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNvbnZlcnQgdGhlIGxpc3QKICAgIG15ICVMaW5rTGlzdDsKICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXsgJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IH0gKSB7CgogICAgICAgICMgZXh0cmFjdCBsaW5rIHR5cGUgTGlzdAogICAgICAgIG15ICRMaW5rVHlwZUxpc3QgPSAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0tPnskTGlua1R5cGV9OwoKICAgICAgICBmb3IgbXkgJERpcmVjdGlvbiAoIHNvcnQga2V5cyAleyRMaW5rVHlwZUxpc3R9ICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IGRpcmVjdGlvbiBsaXN0CiAgICAgICAgICAgIG15ICREaXJlY3Rpb25MaXN0ID0gJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259OwoKICAgICAgICAgICAgZm9yIG15ICRXb3JrT3JkZXJJRCAoIHNvcnQga2V5cyAleyREaXJlY3Rpb25MaXN0fSApIHsKCiAgICAgICAgICAgICAgICAkTGlua0xpc3R7JFdvcmtPcmRlcklEfS0+e0RhdGF9ID0gJERpcmVjdGlvbkxpc3QtPnskV29ya09yZGVySUR9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIG15ICRDb21wbGV4VGFibGVEYXRhID0gJENvbmZpZ09iamVjdC0+R2V0KCJMaW5rT2JqZWN0OjpDb21wbGV4VGFibGUiKTsKICAgIG15ICREZWZhdWx0Q29sdW1uczsKICAgIGlmICgKICAgICAgICAkQ29tcGxleFRhYmxlRGF0YQogICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCRDb21wbGV4VGFibGVEYXRhKQogICAgICAgICYmICRDb21wbGV4VGFibGVEYXRhLT57SVRTTVdvcmtPcmRlcn0KICAgICAgICAmJiBJc0hhc2hSZWZXaXRoRGF0YSggJENvbXBsZXhUYWJsZURhdGEtPntJVFNNV29ya09yZGVyfSApCiAgICAgICAgKQogICAgewogICAgICAgICREZWZhdWx0Q29sdW1ucyA9ICRDb21wbGV4VGFibGVEYXRhLT57IklUU01Xb3JrT3JkZXIifS0+eyJEZWZhdWx0Q29sdW1ucyJ9OwogICAgfQoKICAgIG15IEBUaW1lTG9uZ1R5cGVzID0gKAogICAgICAgICdDcmVhdGVUaW1lJywKICAgICAgICAnQ2hhbmdlVGltZScsCiAgICAgICAgJ1BsYW5uZWRTdGFydFRpbWUnLAogICAgICAgICdQbGFubmVkRW5kVGltZScsCiAgICAgICAgJ0FjdHVhbFN0YXJ0VGltZScsCiAgICAgICAgJ0FjdHVhbEVuZFRpbWUnLAogICAgKTsKCiAgICBteSBAVHJhbnNsYXRlVHlwZXMgPSAoKTsKCiAgICAjIGFsd2F5cyBzaG93IHRoZSBjaGFuZ2Ugc3RhdGUgZmxhZyBhbmQgdGhlIGNoYW5nZSBudW1iZXIKICAgIG15IEBIZWFkbGluZSA9ICgKICAgICAgICB7CiAgICAgICAgICAgIENvbnRlbnQgPT4gJ1dvcmtPcmRlclN0YXRlJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgQ29udGVudCA9PiAkU2VsZi0+e1dvcmtPcmRlckhvb2t9LAogICAgICAgIH0sCiAgICApOwoKICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICAjIExvYWQgdXNlciBwcmVmZXJlbmNlcy4KICAgIG15ICVQcmVmZXJlbmNlcyA9ICRVc2VyT2JqZWN0LT5HZXRQcmVmZXJlbmNlcygKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICBpZiAoICEkRGVmYXVsdENvbHVtbnMgfHwgIUlzSGFzaFJlZldpdGhEYXRhKCREZWZhdWx0Q29sdW1ucykgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdNaXNzaW5nIGNvbmZpZ3VyYXRpb24gZm9yIExpbmtPYmplY3Q6OkNvbXBsZXhUYWJsZSMjI0lUU01Xb3JrT3JkZXIhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIEdldCBkZWZhdWx0IGNvbHVtbiBwcmlvcml0eSBmcm9tIFN5c0NvbmZpZy4KICAgICMgRWFjaCBjb2x1bW4gaW4gdGFibGUgKFRpdGxlLCBTdGF0ZSwuLi4pIGhhcyBkZWZpbmVkIFByaW9yaXR5IGluIFN5c0NvbmZpZy4gU3lzdGVtIHVzZSB0aGlzCiAgICAjICAgcHJpb3JpdHkgdG8gc29ydCBjb2x1bW5zLCBpZiB1c2VyIGRvZXNuJ3QgaGF2ZSBvd24gc2V0dGluZ3MuCiAgICBteSAlU29ydE9yZGVyOwogICAgaWYgKAogICAgICAgICRDb21wbGV4VGFibGVEYXRhLT57IklUU01Xb3JrT3JkZXIifS0+eyJQcmlvcml0eSJ9CiAgICAgICAgJiYgSXNIYXNoUmVmV2l0aERhdGEoICRDb21wbGV4VGFibGVEYXRhLT57IklUU01Xb3JrT3JkZXIifS0+eyJQcmlvcml0eSJ9ICkKICAgICAgICApCiAgICB7CiAgICAgICAgJVNvcnRPcmRlciA9ICV7ICRDb21wbGV4VGFibGVEYXRhLT57IklUU01Xb3JrT3JkZXIifS0+eyJQcmlvcml0eSJ9IH07CiAgICB9CgogICAgbXkgJVVzZXJDb2x1bW5zID0gJXskRGVmYXVsdENvbHVtbnN9OwoKICAgIGlmICggJFByZWZlcmVuY2VzeydMaW5rT2JqZWN0OjpDb21wbGV4VGFibGUtSVRTTVdvcmtPcmRlcid9ICkgewoKICAgICAgICBteSAkQ29sdW1uc0VuYWJsZWQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SlNPTicpLT5EZWNvZGUoCiAgICAgICAgICAgIERhdGEgPT4gJFByZWZlcmVuY2VzeydMaW5rT2JqZWN0OjpDb21wbGV4VGFibGUtSVRTTVdvcmtPcmRlcid9LAogICAgICAgICk7CgogICAgICAgIGlmICgKICAgICAgICAgICAgJENvbHVtbnNFbmFibGVkCiAgICAgICAgICAgICYmIElzSGFzaFJlZldpdGhEYXRhKCRDb2x1bW5zRW5hYmxlZCkKICAgICAgICAgICAgJiYgJENvbHVtbnNFbmFibGVkLT57T3JkZXJ9CiAgICAgICAgICAgICYmIElzQXJyYXlSZWZXaXRoRGF0YSggJENvbHVtbnNFbmFibGVkLT57T3JkZXJ9ICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgIyBDbGVhciBzb3J0IG9yZGVyLgogICAgICAgICAgICAlU29ydE9yZGVyID0gKCk7CgogICAgICAgICAgICBERUZBVUxUQ09MVU1OOgogICAgICAgICAgICBmb3IgbXkgJERlZmF1bHRDb2x1bW4gKCBzb3J0IGtleXMgJVVzZXJDb2x1bW5zICkgewogICAgICAgICAgICAgICAgbXkgJEluZGV4ID0gMDsKCiAgICAgICAgICAgICAgICBmb3IgbXkgJFVzZXJTZXR0aW5nICggQHsgJENvbHVtbnNFbmFibGVkLT57T3JkZXJ9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEluZGV4Kys7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkRGVmYXVsdENvbHVtbiBlcSAkVXNlclNldHRpbmcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRVc2VyQ29sdW1uc3skRGVmYXVsdENvbHVtbn0gPSAyOwogICAgICAgICAgICAgICAgICAgICAgICAkU29ydE9yZGVyeyREZWZhdWx0Q29sdW1ufSAgID0gJEluZGV4OwoKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBERUZBVUxUQ09MVU1OOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIE5vdCBmb3VuZCwgbWVhbnMgdXNlciBjaG9zZSB0byBoaWRlIHRoaXMgaXRlbS4KICAgICAgICAgICAgICAgIGlmICggJFVzZXJDb2x1bW5zeyREZWZhdWx0Q29sdW1ufSA9PSAyICkgewogICAgICAgICAgICAgICAgICAgICRVc2VyQ29sdW1uc3skRGVmYXVsdENvbHVtbn0gPSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggISRTb3J0T3JkZXJ7JERlZmF1bHRDb2x1bW59ICkgewogICAgICAgICAgICAgICAgICAgICRTb3J0T3JkZXJ7JERlZmF1bHRDb2x1bW59ID0gMDsgICAgIyBTZXQgMCwgaXQgc3lzdGVtIHdpbGwgaGlkZSB0aGlzIGl0ZW0gYW55d2F5cwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgVXNlciBoYXMgbm8gb3duIHNldHRpbmdzLgogICAgICAgIGZvciBteSAkQ29sdW1uICggc29ydCBrZXlzICVVc2VyQ29sdW1ucyApIHsKICAgICAgICAgICAgaWYgKCAhJFNvcnRPcmRlcnskQ29sdW1ufSApIHsKICAgICAgICAgICAgICAgICRTb3J0T3JkZXJ7JENvbHVtbn0gPSAwOyAgICAgICAgICAgICAgICMgU2V0IDAsIGl0IHN5c3RlbSB3aWxsIGhpZGUgdGhpcyBpdGVtIGFueXdheXMKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIERlZmluZSBIZWFkbGluZSBjb2x1bW5zLgogICAgbXkgQEFsbENvbHVtbnM7CiAgICBDT0xVTU46CiAgICBmb3IgbXkgJENvbHVtbiAoIHNvcnQgeyAkU29ydE9yZGVyeyRhfSA8PT4gJFNvcnRPcmRlcnskYn0gfSBrZXlzICVVc2VyQ29sdW1ucyApIHsKCiAgICAgICAgbXkgJENvbHVtblRyYW5zbGF0ZSA9ICRDb2x1bW47CiAgICAgICAgaWYgKCAkQ29sdW1uIGVxICdDcmVhdGVUaW1lJyApIHsKICAgICAgICAgICAgJENvbHVtblRyYW5zbGF0ZSA9IFRyYW5zbGF0YWJsZSgnQ3JlYXRlZCcpOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRDb2x1bW4gZXEgJ0NoYW5nZVRpbWUnICkgewogICAgICAgICAgICAkQ29sdW1uVHJhbnNsYXRlID0gVHJhbnNsYXRhYmxlKCdDaGFuZ2VkJyk7CiAgICAgICAgfQoKICAgICAgICBwdXNoIEBBbGxDb2x1bW5zLCB7CiAgICAgICAgICAgIENvbHVtbk5hbWUgICAgICA9PiAkQ29sdW1uLAogICAgICAgICAgICBDb2x1bW5UcmFuc2xhdGUgPT4gJENvbHVtblRyYW5zbGF0ZSwKICAgICAgICB9OwoKICAgICAgICAjIGlmIGVuYWJsZWQgYnkgZGVmYXVsdC4KICAgICAgICBpZiAoICRVc2VyQ29sdW1uc3skQ29sdW1ufSA9PSAyICkgewogICAgICAgICAgICBwdXNoIEBIZWFkbGluZSwgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAkQ29sdW1uVHJhbnNsYXRlLAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSB0aGUgaXRlbSBsaXN0LCBzb3J0IGJ5IENoYW5nZUlEIERvd24sIHRoZW4gYnkgV29ya09yZGVySUQgVXAKICAgIG15IEBJdGVtTGlzdDsKICAgIGZvciBteSAkV29ya09yZGVySUQgKAogICAgICAgIHNvcnQgewogICAgICAgICAgICAkTGlua0xpc3R7JGJ9e0RhdGF9LT57Q2hhbmdlSUR9IDw9PiAkTGlua0xpc3R7JGF9e0RhdGF9LT57Q2hhbmdlSUR9CiAgICAgICAgICAgICAgICB8fCAkYSA8PT4gJGIKICAgICAgICB9IGtleXMgJUxpbmtMaXN0CiAgICAgICAgKQogICAgewoKICAgICAgICAjIGV4dHJhY3Qgd29ya29yZGVyIGRhdGEKICAgICAgICBteSAkV29ya09yZGVyID0gJExpbmtMaXN0eyRXb3JrT3JkZXJJRH0tPntEYXRhfTsKCiAgICAgICAgbXkgQEl0ZW1Db2x1bW5zID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgICA9PiAnV29ya09yZGVyU3RhdGVTaWduYWwnLAogICAgICAgICAgICAgICAgS2V5ICAgICAgICAgICAgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgPT4gJFdvcmtPcmRlci0+e1dvcmtPcmRlclN0YXRlU2lnbmFsfSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlID0+ICRXb3JrT3JkZXItPntXb3JrT3JkZXJTdGF0ZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgQ29udGVudCA9PiAkV29ya09yZGVyLT57Q2hhbmdlRGF0YX0tPntDaGFuZ2VOdW1iZXJ9CiAgICAgICAgICAgICAgICAgICAgLiAnLScgLiAkV29ya09yZGVyLT57V29ya09yZGVyTnVtYmVyfSwKICAgICAgICAgICAgICAgIExpbmsgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57QmFzZWxpbmt9CiAgICAgICAgICAgICAgICAgICAgLiAnQWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlclpvb207V29ya09yZGVySUQ9JwogICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgVGl0bGUgPT4gJFNlbGYtPntDaGFuZ2VIb29rfSAuICRXb3JrT3JkZXItPntDaGFuZ2VEYXRhfS0+e0NoYW5nZU51bWJlcn0gLiAnLScKICAgICAgICAgICAgICAgICAgICAuICRTZWxmLT57V29ya09yZGVySG9va30KICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXItPntXb3JrT3JkZXJOdW1iZXJ9IC4gJzogJwogICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlci0+e1dvcmtPcmRlclRpdGxlfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBDT0xVTU46CiAgICAgICAgZm9yIG15ICRDb2x1bW4gKCBzb3J0IHsgJFNvcnRPcmRlcnskYX0gPD0+ICRTb3J0T3JkZXJ7JGJ9IH0ga2V5cyAlVXNlckNvbHVtbnMgKSB7CgogICAgICAgICAgICAjIGlmIGVuYWJsZWQgYnkgZGVmYXVsdAogICAgICAgICAgICBpZiAoICRVc2VyQ29sdW1uc3skQ29sdW1ufSA9PSAyICkgewoKICAgICAgICAgICAgICAgIG15ICVIYXNoOwogICAgICAgICAgICAgICAgaWYgKCBncmVwIHsgJF8gZXEgJENvbHVtbiB9IEBUaW1lTG9uZ1R5cGVzICkgewogICAgICAgICAgICAgICAgICAgICRIYXNoeydUeXBlJ30gPSAnVGltZUxvbmcnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJEhhc2h7J1R5cGUnfSA9ICdUZXh0JzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIGdyZXAgeyAkXyBlcSAkQ29sdW1uIH0gQFRyYW5zbGF0ZVR5cGVzICkgewogICAgICAgICAgICAgICAgICAgICRIYXNoeydUcmFuc2xhdGUnfSA9IDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJEhhc2h7J0NvbnRlbnQnfSA9ICRXb3JrT3JkZXItPnskQ29sdW1ufTsKCiAgICAgICAgICAgICAgICBwdXNoIEBJdGVtQ29sdW1ucywgXCVIYXNoOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBwdXNoIEBJdGVtTGlzdCwgXEBJdGVtQ29sdW1uczsKICAgIH0KCiAgICByZXR1cm4gaWYgIUBJdGVtTGlzdDsKCiAgICAjIERlZmluZSB0aGUgYmxvY2sgZGF0YS4KICAgIG15ICVCbG9jayA9ICgKICAgICAgICBPYmplY3QgICAgID0+ICRTZWxmLT57T2JqZWN0RGF0YX0tPntPYmplY3R9LAogICAgICAgIEJsb2NrbmFtZSAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0sCiAgICAgICAgT2JqZWN0TmFtZSA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57T2JqZWN0TmFtZX0sCiAgICAgICAgT2JqZWN0SUQgICA9PiAkUGFyYW17T2JqZWN0SUR9LAogICAgICAgIEhlYWRsaW5lICAgPT4gXEBIZWFkbGluZSwKICAgICAgICBJdGVtTGlzdCAgID0+IFxASXRlbUxpc3QsCiAgICAgICAgQWxsQ29sdW1ucyA9PiBcQEFsbENvbHVtbnMsCiAgICApOwoKICAgIHJldHVybiAoIFwlQmxvY2sgKTsKCn0KCj1pdGVtIFRhYmxlQ3JlYXRlU2ltcGxlKCkKCnJldHVybiBhIGhhc2ggd2l0aCB0aGUgbGluayBvdXRwdXQgZGF0YQoKUmV0dXJuCgogICAgJUxpbmtPdXRwdXREYXRhID0gKAogICAgICAgIE5vcm1hbDo6U291cmNlID0+IHsKICAgICAgICAgICAgSVRTTVdvcmtPcmRlciA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnV086MjAwOTEwMDExMjM1NDMyMS0xJywKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgID0+ICdDaGFuZ2UjIDIwMDkxMDE2MTAwMDU0MDIgLSBXb3Jrb3JkZXIjIDE6IFRoZSBXb3JrT3JkZXIgVGl0bGUnLAogICAgICAgICAgICAgICAgICAgIENzcyAgICAgPT4gJ3N0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaCInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdXTzoyMDA5MTAwMTEyMzU0MzIxLTYnLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgPT4gJ0NoYW5nZSMgMjAwOTEwMTYxMDAwNzYzNCAtIFdvcmtvcmRlciMgNjogVGhlIFdvcmtPcmRlciBUaXRsZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUGFyZW50Q2hpbGQ6OlRhcmdldCA9PiB7CiAgICAgICAgICAgIElUU01Xb3JrT3JkZXIgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1dPOjIwMDkxMDAxMTIzNTQzMjEtMycsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAnQ2hhbmdlIyAyMDA5MTAxNjEwMDA0NDMzMSAtIFdvcmtvcmRlciMgMzogVGhlIFdvcmtPcmRlciBUaXRsZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICApOwoKICAgICVMaW5rT3V0cHV0RGF0YSA9ICRMaW5rT2JqZWN0LT5UYWJsZUNyZWF0ZVNpbXBsZSgKICAgICAgICBPYmplY3RMaW5rTGlzdFdpdGhEYXRhID0+ICRPYmplY3RMaW5rTGlzdFJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgVGFibGVDcmVhdGVTaW1wbGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IHx8IHJlZiAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gbmUgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBPYmplY3RMaW5rTGlzdFdpdGhEYXRhIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJUxpbmtPdXRwdXREYXRhOwogICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfSApIHsKCiAgICAgICAgIyBleHRyYWN0IGxpbmsgdHlwZSBMaXN0CiAgICAgICAgbXkgJExpbmtUeXBlTGlzdCA9ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfS0+eyRMaW5rVHlwZX07CgogICAgICAgIGZvciBteSAkRGlyZWN0aW9uICggc29ydCBrZXlzICV7JExpbmtUeXBlTGlzdH0gKSB7CgogICAgICAgICAgICAjIGV4dHJhY3QgZGlyZWN0aW9uIGxpc3QKICAgICAgICAgICAgbXkgJERpcmVjdGlvbkxpc3QgPSAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn07CgogICAgICAgICAgICAjIGNyZWF0ZSB0aGUgaXRlbSBsaXN0LCBzb3J0IGJ5IENoYW5nZUlEIERvd24sIHRoZW4gYnkgV29ya09yZGVyTnVtYmVyIFVwCiAgICAgICAgICAgIG15IEBJdGVtTGlzdDsKICAgICAgICAgICAgZm9yIG15ICRXb3JrT3JkZXJJRCAoCiAgICAgICAgICAgICAgICBzb3J0IHsKICAgICAgICAgICAgICAgICAgICAkRGlyZWN0aW9uTGlzdC0+eyRifS0+e0NoYW5nZUlEfSA8PT4gJERpcmVjdGlvbkxpc3QtPnskYX0tPntDaGFuZ2VJRH0KICAgICAgICAgICAgICAgICAgICAgICAgfHwgJGEgPD0+ICRiCiAgICAgICAgICAgICAgICB9IGtleXMgJXskRGlyZWN0aW9uTGlzdH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCB3b3Jrb3JkZXIgZGF0YQogICAgICAgICAgICAgICAgbXkgJFdvcmtPcmRlciA9ICREaXJlY3Rpb25MaXN0LT57JFdvcmtPcmRlcklEfTsKCiAgICAgICAgICAgICAgICAjIGRlZmluZSBpdGVtIGRhdGEKICAgICAgICAgICAgICAgIG15ICVJdGVtID0gKAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1dPOicgLiAkV29ya09yZGVyLT57Q2hhbmdlRGF0YX0tPntDaGFuZ2VOdW1iZXJ9IC4gJy0nCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlci0+e1dvcmtPcmRlck51bWJlcn0sCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJFNlbGYtPntDaGFuZ2VIb29rfSAuICRXb3JrT3JkZXItPntDaGFuZ2VEYXRhfS0+e0NoYW5nZU51bWJlcn0gLiAnLScKICAgICAgICAgICAgICAgICAgICAgICAgLiAkU2VsZi0+e1dvcmtPcmRlckhvb2t9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlci0+e1dvcmtPcmRlck51bWJlcn0gLiAnOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlci0+e1dvcmtPcmRlclRpdGxlfSwKICAgICAgICAgICAgICAgICAgICBMaW5rID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0Jhc2VsaW5rfQogICAgICAgICAgICAgICAgICAgICAgICAuICdBY3Rpb249QWdlbnRJVFNNV29ya09yZGVyWm9vbTtXb3JrT3JkZXJJRD0nCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAyMCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcHVzaCBASXRlbUxpc3QsIFwlSXRlbTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBhZGQgaXRlbSBsaXN0IHRvIGxpbmsgb3V0cHV0IGRhdGEKICAgICAgICAgICAgJExpbmtPdXRwdXREYXRheyAkTGlua1R5cGUgLiAnOjonIC4gJERpcmVjdGlvbiB9LT57SVRTTVdvcmtPcmRlcn0gPSBcQEl0ZW1MaXN0OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJUxpbmtPdXRwdXREYXRhOwp9Cgo9aXRlbSBDb250ZW50U3RyaW5nQ3JlYXRlKCkKCnJldHVybiBhIG91dHB1dCBzdHJpbmcKCiAgICBteSAkU3RyaW5nID0gJExheW91dE9iamVjdC0+Q29udGVudFN0cmluZ0NyZWF0ZSgKICAgICAgICBDb250ZW50RGF0YSA9PiAkSGFzaFJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgQ29udGVudFN0cmluZ0NyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17Q29udGVudERhdGF9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDb250ZW50RGF0YSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZXh0cmFjdCBjb250ZW50CiAgICBteSAkQ29udGVudCA9ICRQYXJhbXtDb250ZW50RGF0YX07CgogICAgcmV0dXJuIGlmICRDb250ZW50LT57VHlwZX0gbmUgJ1dvcmtPcmRlclN0YXRlU2lnbmFsJzsKCiAgICAjIGJ1aWxkIGh0bWwgZm9yIHNpZ25hbCBMRUQKICAgIG15ICRTdHJpbmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZSA9PiAnPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCIgdGl0bGU9IlslIERhdGEuV29ya09yZGVyU3RhdGUgfCBodG1sICVdIj4gJwogICAgICAgICAgICAuICc8c3BhbiBjbGFzcz0iWyUgRGF0YS5Xb3JrT3JkZXJTdGF0ZVNpZ25hbCB8IGh0bWwgJV0iPjwvc3Bhbj4gPC9kaXY+JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyU3RhdGVTaWduYWwgPT4gJENvbnRlbnQtPntDb250ZW50fSwKICAgICAgICAgICAgV29ya09yZGVyU3RhdGUgICAgICAgPT4gJENvbnRlbnQtPntXb3JrT3JkZXJTdGF0ZX0gfHwgJycsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuICRTdHJpbmc7Cn0KCj1pdGVtIFNlbGVjdGFibGVPYmplY3RMaXN0KCkKCnJldHVybiBhbiBhcnJheSBoYXNoIHdpdGggc2VsZWN0YWJsZSBvYmplY3RzCgpSZXR1cm4KCiAgICBAU2VsZWN0YWJsZU9iamVjdExpc3QgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgICAgIFZhbHVlID0+ICdXb3JrT3JkZXInLAogICAgICAgIH0sCiAgICApOwoKICAgIEBTZWxlY3RhYmxlT2JqZWN0TGlzdCA9ICRMaW5rT2JqZWN0LT5TZWxlY3RhYmxlT2JqZWN0TGlzdCgKICAgICAgICBTZWxlY3RlZCA9PiAkSWRlbnRpZmllciwgICMgKG9wdGlvbmFsKQogICAgKTsKCj1jdXQKCnN1YiBTZWxlY3RhYmxlT2JqZWN0TGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRTZWxlY3RlZDsKICAgIGlmICggJFBhcmFte1NlbGVjdGVkfSAmJiAkUGFyYW17U2VsZWN0ZWR9IGVxICRTZWxmLT57T2JqZWN0RGF0YX0tPntPYmplY3R9ICkgewogICAgICAgICRTZWxlY3RlZCA9IDE7CiAgICB9CgogICAgIyBvYmplY3Qgc2VsZWN0IGxpc3QKICAgIG15IEBPYmplY3RTZWxlY3RMaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgICAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0sCiAgICAgICAgICAgIFZhbHVlICAgID0+ICRTZWxmLT57T2JqZWN0RGF0YX0tPntSZWFsbmFtZX0sCiAgICAgICAgICAgIFNlbGVjdGVkID0+ICRTZWxlY3RlZCwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gQE9iamVjdFNlbGVjdExpc3Q7Cn0KCj1pdGVtIFNlYXJjaE9wdGlvbkxpc3QoKQoKcmV0dXJuIGFuIGFycmF5IGhhc2ggd2l0aCBzZWFyY2ggb3B0aW9ucwoKUmV0dXJuCgogICAgQFNlYXJjaE9wdGlvbkxpc3QgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0NoYW5nZU51bWJlcicsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAnQ2hhbmdlIycsCiAgICAgICAgICAgIElucHV0U3RyZyA9PiAkRm9ybVN0cmluZywKICAgICAgICAgICAgRm9ybURhdGEgID0+ICcyMDA5MTAwMTEyMzU0MzIxJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdDaGFuZ2VUaXRsZScsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAnQ2hhbmdlIFRpdGxlJywKICAgICAgICAgICAgSW5wdXRTdHJnID0+ICRGb3JtU3RyaW5nLAogICAgICAgICAgICBGb3JtRGF0YSAgPT4gJ01haWwgc2VydmVyIG5lZWRzIHVwZGF0ZScsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgICAgICA9PiAnV29ya09yZGVyTnVtYmVyJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdXb3Jrb3JkZXIjJywKICAgICAgICAgICAgSW5wdXRTdHJnID0+ICRGb3JtU3RyaW5nLAogICAgICAgICAgICBGb3JtRGF0YSAgPT4gJzEyJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdXb3JrT3JkZXJUaXRsZScsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAnV29ya09yZGVyIFRpdGxlJywKICAgICAgICAgICAgSW5wdXRTdHJnID0+ICRGb3JtU3RyaW5nLAogICAgICAgICAgICBGb3JtRGF0YSAgPT4gJ1NodXRkb3duIG9sZCBtYWlsIHNlcnZlcicsCiAgICAgICAgfSwKICAgICk7CgogICAgQFNlYXJjaE9wdGlvbkxpc3QgPSAkTGlua09iamVjdC0+U2VhcmNoT3B0aW9uTGlzdCgpOwoKPWN1dAoKc3ViIFNlYXJjaE9wdGlvbkxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNlYXJjaCBvcHRpb24gbGlzdAogICAgbXkgQFNlYXJjaE9wdGlvbkxpc3QgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgID0+ICdDaGFuZ2VOdW1iZXInLAogICAgICAgICAgICBOYW1lID0+ICRTZWxmLT57Q2hhbmdlSG9va30sCiAgICAgICAgICAgIFR5cGUgPT4gJ1RleHQnLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgID0+ICdDaGFuZ2VUaXRsZScsCiAgICAgICAgICAgIE5hbWUgPT4gJ0NoYW5nZVRpdGxlJywKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dCcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgPT4gJ1dvcmtPcmRlck51bWJlcicsCiAgICAgICAgICAgIE5hbWUgPT4gJFNlbGYtPntXb3JrT3JkZXJIb29rfSwKICAgICAgICAgICAgVHlwZSA9PiAnVGV4dCcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgPT4gJ1dvcmtPcmRlclRpdGxlJywKICAgICAgICAgICAgTmFtZSA9PiAnV29ya09yZGVyVGl0bGUnLAogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb3Jta2V5CiAgICBmb3IgbXkgJFJvdyAoQFNlYXJjaE9wdGlvbkxpc3QpIHsKICAgICAgICAkUm93LT57Rm9ybUtleX0gPSAnU0VBUkNIOjonIC4gJFJvdy0+e0tleX07CiAgICB9CgogICAgIyBhZGQgZm9ybSBkYXRhIGFuZCBpbnB1dCBzdHJpbmcKICAgIFJPVzoKICAgIGZvciBteSAkUm93IChAU2VhcmNoT3B0aW9uTGlzdCkgewoKICAgICAgICAjIGdldCBmb3JtIGRhdGEKICAgICAgICAkUm93LT57Rm9ybURhdGF9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSgKICAgICAgICAgICAgUGFyYW0gPT4gJFJvdy0+e0Zvcm1LZXl9LAogICAgICAgICk7CgogICAgICAgICMgcGFyc2UgdGhlIGlucHV0IHRleHQgYmxvY2sKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdJbnB1dFRleHQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICRSb3ctPntGb3JtS2V5fSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRSb3ctPntGb3JtRGF0YX0gfHwgJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgdGhlIGlucHV0IHN0cmluZwogICAgICAgICRSb3ctPntJbnB1dFN0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnTGlua09iamVjdCcsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBST1c7CiAgICB9CgogICAgcmV0dXJuIEBTZWFyY2hPcHRpb25MaXN0Owp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRpY2tldE1lbnU6OklUU01DaGFuZ2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IFVzZXJJRCBwYXJhbQogICAgJFNlbGYtPntVc2VySUR9ID0gJFBhcmFte1VzZXJJRH0gfHwgZGllICJHb3Qgbm8gVXNlcklEISI7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtUaWNrZXR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBUaWNrZXQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGlmIGFuIGFjdGlvbiBwYXJhbWV0ZXIgd2FzIGdpdmVuCiAgICBpZiAoICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBmcm9udGVuZCBtb2R1bGUgaXMgcmVnaXN0ZXJlZCwgaWYgbm90LCBkbyBub3Qgc2hvdyBhY3Rpb24KICAgICAgICBteSAkTW9kdWxlID0gJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPnsgJFBhcmFte0NvbmZpZ30tPntBY3Rpb259IH07CiAgICAgICAgcmV0dXJuIGlmICEkTW9kdWxlOwoKICAgICAgICAjIGNoZWNrIGlmIGN1cnJlbnQgdXNlciBoYXMgdGhlIHBlcm1pc3Npb24gZm9yIHRoZSBnaXZlbiBhY3Rpb24KICAgICAgICBpZiAoICRNb2R1bGUtPntHcm91cFJvfSAmJiByZWYgJE1vZHVsZS0+e0dyb3VwUm99IGVxICdBUlJBWScgJiYgQHsgJE1vZHVsZS0+e0dyb3VwUm99IH0gKSB7CgogICAgICAgICAgICBteSAkQWNjZXNzOwoKICAgICAgICAgICAgR1JPVVA6CiAgICAgICAgICAgIGZvciBteSAkR3JvdXAgKCBAeyAkTW9kdWxlLT57R3JvdXBSb30gfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBncm91cCBvYmplY3QKICAgICAgICAgICAgICAgIG15ICRHcm91cE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpOwoKICAgICAgICAgICAgICAgICMgbG9va3VwIHRoZSBncm91cCBpZAogICAgICAgICAgICAgICAgbXkgJEdyb3VwSUQgPSAkR3JvdXBPYmplY3QtPkdyb3VwTG9va3VwKAogICAgICAgICAgICAgICAgICAgIEdyb3VwID0+ICRHcm91cCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBkbyBub3QgZ3JhbnQgYWNjZXNzLCB3aGVuIHRoZSBncm91cCBpcyBub3QgZm91bmQKICAgICAgICAgICAgICAgIG5leHQgR1JPVVAgaWYgISRHcm91cElEOwoKICAgICAgICAgICAgICAgICMgZ2V0IHVzZXIgZ3JvdXBzLCB3aGVyZSB0aGUgdXNlciBoYXMgdGhlICdybycgcHJpdmlsZWdlCiAgICAgICAgICAgICAgICBteSAlR3JvdXBzID0gJEdyb3VwT2JqZWN0LT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBUeXBlICAgPT4gJ3JvJywKICAgICAgICAgICAgICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlbWVtYmVyIHRoYXQgdGhlIHVzZXIgaGFzIGFjY2VzcwogICAgICAgICAgICAgICAgaWYgKCAkR3JvdXBzeyRHcm91cElEfSApIHsKICAgICAgICAgICAgICAgICAgICAkQWNjZXNzID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBkbyBub3QgZ3JhbnQgYWNjZXNzIGlmIHRoZSBhZ2VudCBkb2Vzbid0IGhhdmUgdGhlICdybycgcmlnaHRzIGluIHRoZSBncm91cAogICAgICAgICAgICByZXR1cm4gaWYgISRBY2Nlc3M7CiAgICAgICAgfQogICAgfQoKICAgICMgdGhlIGxpbmsgaXMgc2hvd24gb25seSBmb3IgdGhlIGNvbmZpZ3VyZWQgdGlja2V0IHR5cGVzLAogICAgIyBzbyB0aGUgdGlja2V0IG5lZWRzIHRvIGhhdmUgYSB0eXBlLgogICAgcmV0dXJuIGlmICEkUGFyYW17VGlja2V0fS0+e1R5cGV9OwoKICAgICMgZ2V0IGFuZCBjaGVjayB0aGUgbGlzdCBvZiByZWxldmFudCB0aWNrZXQgdHlwZXMKICAgIG15ICRBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcycpOwoKICAgIHJldHVybiBpZiAhJEFkZENoYW5nZUxpbmtUaWNrZXRUeXBlczsKICAgIHJldHVybiBpZiByZWYgJEFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcyBuZSAnQVJSQVknOwogICAgcmV0dXJuIGlmICFAeyRBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXN9OwoKICAgICMgY2hlY2sgd2hldGhlciB0aGUgdGlja2V0J3MgdHlwZSBpcyByZWxldmFudAogICAgbXkgJUlzUmVsZXZhbnQgPSBtYXAgeyAkXyA9PiAxIH0gQHskQWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzfTsKCiAgICByZXR1cm4gaWYgISRJc1JlbGV2YW50eyAkUGFyYW17VGlja2V0fS0+e1R5cGV9IH07CgogICAgIyBjaGVjayBwZXJtaXNzaW9uCiAgICBteSAkRnJvbnRlbmRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0iKTsKCiAgICBpZiAoICRGcm9udGVuZENvbmZpZyAmJiAkRnJvbnRlbmRDb25maWctPntQZXJtaXNzaW9ufSApIHsKCiAgICAgICAgbXkgJEFjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPlBlcm1pc3Npb24oCiAgICAgICAgICAgIFR5cGUgICA9PiAkRnJvbnRlbmRDb25maWctPntQZXJtaXNzaW9ufSwKICAgICAgICAgICAgQWN0aW9uID0+ICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgTG9nTm8gID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIGlmICEkQWNjZXNzOwogICAgfQoKICAgIHJldHVybiB7ICV7ICRQYXJhbXtDb25maWd9IH0sICV7ICRQYXJhbXtUaWNrZXR9IH0sICVQYXJhbSwgfTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRvb2xCYXI6OkNoYW5nZU1hbmFnZXI7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgVXNlcklEIHBhcmFtCiAgICAkU2VsZi0+e1VzZXJJRH0gPSAkUGFyYW17VXNlcklEfSB8fCBkaWUgIkdvdCBubyBVc2VySUQhIjsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGRlZmluZSBhY3Rpb24sIGdyb3VwLCBsYWJlbCwgaW1hZ2UgYW5kIHByaW8KICAgIG15ICRBY3Rpb24gPSAnQWdlbnRJVFNNQ2hhbmdlTWFuYWdlcic7CiAgICBteSAkR3JvdXAgID0gJ2l0c20tY2hhbmdlLW1hbmFnZXInOwogICAgbXkgJEljb24gICA9ICRQYXJhbXtDb25maWd9LT57SWNvbn07CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBkbyBub3Qgc2hvdyBpY29uIGlmIGZyb250ZW5kIG1vZHVsZSBpcyBub3QgcmVnaXN0ZXJlZAogICAgcmV0dXJuIGlmICEkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyRBY3Rpb259OwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokQWN0aW9uIik7CgogICAgIyBnZXQgZ3JvdXAgb2JqZWN0CiAgICBteSAkR3JvdXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKCiAgICAjIGdldCB0aGUgZ3JvdXAgaWQKICAgIG15ICRHcm91cElEID0gJEdyb3VwT2JqZWN0LT5Hcm91cExvb2t1cCggR3JvdXAgPT4gJEdyb3VwICk7CgogICAgIyBkZW55IGFjY2Vzcywgd2hlbiB0aGUgZ3JvdXAgaXMgbm90IGZvdW5kCiAgICByZXR1cm4gaWYgISRHcm91cElEOwoKICAgICMgZ2V0IHVzZXIgZ3JvdXBzLCB3aGVyZSB0aGUgdXNlciBoYXMgdGhlIGFwcHJvcHJpYXRlIHByaXZpbGVnZQogICAgbXkgJUdyb3VwcyA9ICRHcm91cE9iamVjdC0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgVHlwZSAgID0+ICRDb25maWctPntQZXJtaXNzaW9ufSwKICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgKTsKCiAgICAjIGRlbnkgYWNjZXNzIGlmIHRoZSBhZ2VudCBkb2Vzbid0IGhhdmUgdGhlIGFwcHJvcHJpYXRlIHR5cGUgaW4gdGhlIGFwcHJvcHJpYXRlIGdyb3VwCiAgICByZXR1cm4gaWYgISRHcm91cHN7JEdyb3VwSUR9OwoKICAgICMgZ2V0IHRoZSBudW1iZXIgb2Ygdmlld2FibGUgY2hhbmdlcwogICAgbXkgJENvdW50ID0gMDsKICAgIGlmICggJENvbmZpZy0+eydGaWx0ZXI6OkNoYW5nZVN0YXRlcyd9ICYmIEB7ICRDb25maWctPnsnRmlsdGVyOjpDaGFuZ2VTdGF0ZXMnfSB9ICkgewoKICAgICAgICAjIHJlbW92ZSBlbXB0eSBjaGFuZ2Ugc3RhdGVzCiAgICAgICAgbXkgQENoYW5nZVN0YXRlczsKICAgICAgICBDSEFOR0VTVEFURToKICAgICAgICBmb3IgbXkgJENoYW5nZVN0YXRlICggQHsgJENvbmZpZy0+eydGaWx0ZXI6OkNoYW5nZVN0YXRlcyd9IH0gKSB7CiAgICAgICAgICAgIG5leHQgQ0hBTkdFU1RBVEUgaWYgISRDaGFuZ2VTdGF0ZTsKICAgICAgICAgICAgcHVzaCBAQ2hhbmdlU3RhdGVzLCAkQ2hhbmdlU3RhdGU7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgY2FjaGUgdHlwZSBhbmQgVFRMIChpbiBzZWNvbmRzKQogICAgICAgICRTZWxmLT57Q2FjaGVUeXBlfSA9ICdJVFNNQ2hhbmdlTWFuYWdlbWVudFRvb2xCYXJDaGFuZ2VNYW5hZ2VyJyAuICRTZWxmLT57VXNlcklEfTsKICAgICAgICAkU2VsZi0+e0NhY2hlVFRMfSAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01DaGFuZ2U6OlRvb2xCYXI6OkNhY2hlVFRMJykgKiA2MDsKCiAgICAgICAgIyBnZXQgY2FjaGUgb2JqZWN0CiAgICAgICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CgogICAgICAgICMgY2hlY2sgY2FjaGUKICAgICAgICBteSAkQ2FjaGVLZXkgPSBqb2luICcsJywgc29ydCBDaGFuZ2VTdGF0ZXM7CiAgICAgICAgbXkgJENhY2hlID0gJENhY2hlT2JqZWN0LT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwoKICAgICAgICBpZiAoIGRlZmluZWQgJENhY2hlICkgewogICAgICAgICAgICAkQ291bnQgPSAkQ2FjaGU7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBjb3VudCB0aGUgbnVtYmVyIG9mIHZpZXdhYmxlIGNoYW5nZXMKICAgICAgICAgICAgJENvdW50ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlU2VhcmNoKAogICAgICAgICAgICAgICAgQ2hhbmdlTWFuYWdlcklEcyA9PiBbICRTZWxmLT57VXNlcklEfSBdLAogICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGVzICAgICA9PiBcQENoYW5nZVN0YXRlcywKICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgPT4gMTAwMCwKICAgICAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICAgPT4gJ0NPVU5UJywKICAgICAgICAgICAgICAgIE1pcnJvckRCICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgY2FjaGUKICAgICAgICAgICAgJENhY2hlT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkQ291bnQsCiAgICAgICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGdldCBUb29sQmFyIG9iamVjdCBwYXJhbWV0ZXJzCiAgICBteSAkQ2xhc3MgPSAkUGFyYW17Q29uZmlnfS0+e0Nzc0NsYXNzfTsKICAgIG15ICRUZXh0ICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnQ2hhbmdlIE1hbmFnZXInKTsKCiAgICAjIHNldCBUb29sQmFyIG9iamVjdAogICAgbXkgJFVSTCAgICAgID0gJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfTsKICAgIG15ICRQcmlvcml0eSA9ICRQYXJhbXtDb25maWd9LT57UHJpb3JpdHl9OwogICAgbXkgJVJldHVybjsKICAgIGlmICgkQ291bnQpIHsKICAgICAgICAkUmV0dXJueyRQcmlvcml0eX0gPSB7CiAgICAgICAgICAgIEJsb2NrICAgICAgID0+ICdUb29sQmFySXRlbScsCiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICRUZXh0LAogICAgICAgICAgICBDb3VudCAgICAgICA9PiAkQ291bnQsCiAgICAgICAgICAgIENsYXNzICAgICAgID0+ICRDbGFzcywKICAgICAgICAgICAgSWNvbiAgICAgICAgPT4gJEljb24sCiAgICAgICAgICAgIExpbmsgICAgICAgID0+ICRVUkwgLiAnQWN0aW9uPScgLiAkQWN0aW9uLAogICAgICAgICAgICBBY2Nlc3NLZXkgICA9PiAnJywKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiAlUmV0dXJuOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRvb2xCYXI6Ok15Q0FCOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IFVzZXJJRCBwYXJhbQogICAgJFNlbGYtPntVc2VySUR9ID0gJFBhcmFte1VzZXJJRH0gfHwgZGllICJHb3Qgbm8gVXNlcklEISI7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkZWZpbmUgYWN0aW9uLCBncm91cCwgbGFiZWwsIGltYWdlIGFuZCBwcmlvCiAgICBteSAkQWN0aW9uID0gJ0FnZW50SVRTTUNoYW5nZU15Q0FCJzsKICAgIG15ICRHcm91cCAgPSAnaXRzbS1jaGFuZ2UnOwogICAgbXkgJEljb24gICA9ICRQYXJhbXtDb25maWd9LT57SWNvbn07CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBkbyBub3Qgc2hvdyBpY29uIGlmIGZyb250ZW5kIG1vZHVsZSBpcyBub3QgcmVnaXN0ZXJlZAogICAgcmV0dXJuIGlmICEkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyRBY3Rpb259OwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoIklUU01DaGFuZ2U6OkZyb250ZW5kOjokQWN0aW9uIik7CgogICAgIyBnZXQgZ3JvdXAgb2JqZWN0CiAgICBteSAkR3JvdXBPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKCiAgICAjIGdldCB0aGUgZ3JvdXAgaWQKICAgIG15ICRHcm91cElEID0gJEdyb3VwT2JqZWN0LT5Hcm91cExvb2t1cCggR3JvdXAgPT4gJEdyb3VwICk7CgogICAgIyBkZW55IGFjY2Vzcywgd2hlbiB0aGUgZ3JvdXAgaXMgbm90IGZvdW5kCiAgICByZXR1cm4gaWYgISRHcm91cElEOwoKICAgICMgZ2V0IHVzZXIgZ3JvdXBzLCB3aGVyZSB0aGUgdXNlciBoYXMgdGhlIGFwcHJvcHJpYXRlIHByaXZpbGVnZQogICAgbXkgJUdyb3VwcyA9ICRHcm91cE9iamVjdC0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgVHlwZSAgID0+ICRDb25maWctPntQZXJtaXNzaW9ufSwKICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgKTsKCiAgICAjIGRlbnkgYWNjZXNzIGlmIHRoZSBhZ2VudCBkb2Vzbid0IGhhdmUgdGhlIGFwcHJvcHJpYXRlIHR5cGUgaW4gdGhlIGFwcHJvcHJpYXRlIGdyb3VwCiAgICByZXR1cm4gaWYgISRHcm91cHN7JEdyb3VwSUR9OwoKICAgICMgZ2V0IHRoZSBudW1iZXIgb2Ygdmlld2FibGUgY2hhbmdlcwogICAgbXkgJENvdW50ID0gMDsKICAgIGlmICggJENvbmZpZy0+eydGaWx0ZXI6OkNoYW5nZVN0YXRlcyd9ICYmIEB7ICRDb25maWctPnsnRmlsdGVyOjpDaGFuZ2VTdGF0ZXMnfSB9ICkgewoKICAgICAgICAjIHJlbW92ZSBlbXB0eSBjaGFuZ2Ugc3RhdGVzCiAgICAgICAgbXkgQENoYW5nZVN0YXRlczsKICAgICAgICBDSEFOR0VTVEFURToKICAgICAgICBmb3IgbXkgJENoYW5nZVN0YXRlICggQHsgJENvbmZpZy0+eydGaWx0ZXI6OkNoYW5nZVN0YXRlcyd9IH0gKSB7CiAgICAgICAgICAgIG5leHQgQ0hBTkdFU1RBVEUgaWYgISRDaGFuZ2VTdGF0ZTsKICAgICAgICAgICAgcHVzaCBAQ2hhbmdlU3RhdGVzLCAkQ2hhbmdlU3RhdGU7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgY2FjaGUgdHlwZSBhbmQgVFRMIChpbiBzZWNvbmRzKQogICAgICAgICRTZWxmLT57Q2FjaGVUeXBlfSA9ICdJVFNNQ2hhbmdlTWFuYWdlbWVudFRvb2xCYXJNeUNBQicgLiAkU2VsZi0+e1VzZXJJRH07CiAgICAgICAgJFNlbGYtPntDYWNoZVRUTH0gID0gJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNQ2hhbmdlOjpUb29sQmFyOjpDYWNoZVRUTCcpICogNjA7CgogICAgICAgICMgZ2V0IGNhY2hlIG9iamVjdAogICAgICAgIG15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpOwoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgbXkgJENhY2hlS2V5ID0gam9pbiAnLCcsIHNvcnQgQENoYW5nZVN0YXRlczsKICAgICAgICBteSAkQ2FjaGUgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgICAgICk7CgogICAgICAgIGlmICggZGVmaW5lZCAkQ2FjaGUgKSB7CiAgICAgICAgICAgICRDb3VudCA9ICRDYWNoZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIGNvdW50IHRoZSBudW1iZXIgb2Ygdmlld2FibGUgY2hhbmdlcwogICAgICAgICAgICAkQ291bnQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5DaGFuZ2VTZWFyY2goCiAgICAgICAgICAgICAgICBDQUJBZ2VudHMgICAgPT4gWyAkU2VsZi0+e1VzZXJJRH0gXSwKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlcyA9PiBcQENoYW5nZVN0YXRlcywKICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICA9PiAxMDAwLAogICAgICAgICAgICAgICAgUmVzdWx0ICAgICAgID0+ICdDT1VOVCcsCiAgICAgICAgICAgICAgICBNaXJyb3JEQiAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNldCBjYWNoZQogICAgICAgICAgICAkQ2FjaGVPYmplY3QtPlNldCgKICAgICAgICAgICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRDb3VudCB8fCAwLAogICAgICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBnZXQgVG9vbEJhciBvYmplY3QgcGFyYW1ldGVycwogICAgbXkgJENsYXNzID0gJFBhcmFte0NvbmZpZ30tPntDc3NDbGFzc307CiAgICBteSAkVGV4dCAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ015IENBQnMnKTsKCiAgICAjIHNldCBUb29sQmFyIG9iamVjdAogICAgbXkgJFVSTCAgICAgID0gJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfTsKICAgIG15ICRQcmlvcml0eSA9ICRQYXJhbXtDb25maWd9LT57UHJpb3JpdHl9OwogICAgbXkgJVJldHVybjsKICAgIGlmICgkQ291bnQpIHsKICAgICAgICAkUmV0dXJueyRQcmlvcml0eX0gPSB7CiAgICAgICAgICAgIEJsb2NrICAgICAgID0+ICdUb29sQmFySXRlbScsCiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICRUZXh0LAogICAgICAgICAgICBDb3VudCAgICAgICA9PiAkQ291bnQsCiAgICAgICAgICAgIENsYXNzICAgICAgID0+ICRDbGFzcywKICAgICAgICAgICAgSWNvbiAgICAgICAgPT4gJEljb24sCiAgICAgICAgICAgIExpbmsgICAgICAgID0+ICRVUkwgLiAnQWN0aW9uPScgLiAkQWN0aW9uLAogICAgICAgICAgICBBY2Nlc3NLZXkgICA9PiAnJywKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiAlUmV0dXJuOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRvb2xCYXI6Ok15Q2hhbmdlczsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBVc2VySUQgcGFyYW0KICAgICRTZWxmLT57VXNlcklEfSA9ICRQYXJhbXtVc2VySUR9IHx8IGRpZSAiR290IG5vIFVzZXJJRCEiOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZGVmaW5lIGFjdGlvbiwgZ3JvdXAsIGxhYmVsLCBpbWFnZSBhbmQgcHJpbwogICAgbXkgJEFjdGlvbiA9ICdBZ2VudElUU01DaGFuZ2VNeUNoYW5nZXMnOwogICAgbXkgJEdyb3VwICA9ICdpdHNtLWNoYW5nZS1idWlsZGVyJzsKICAgIG15ICRJY29uICAgPSAkUGFyYW17Q29uZmlnfS0+e0ljb259OwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZG8gbm90IHNob3cgaWNvbiBpZiBmcm9udGVuZCBtb2R1bGUgaXMgbm90IHJlZ2lzdGVyZWQKICAgIHJldHVybiBpZiAhJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPnskQWN0aW9ufTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6JEFjdGlvbiIpOwoKICAgICMgZ2V0IGdyb3VwIG9iamVjdAogICAgbXkgJEdyb3VwT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CgogICAgIyBnZXQgdGhlIGdyb3VwIGlkCiAgICBteSAkR3JvdXBJRCA9ICRHcm91cE9iamVjdC0+R3JvdXBMb29rdXAoIEdyb3VwID0+ICRHcm91cCApOwoKICAgICMgZGVueSBhY2Nlc3MsIHdoZW4gdGhlIGdyb3VwIGlzIG5vdCBmb3VuZAogICAgcmV0dXJuIGlmICEkR3JvdXBJRDsKCiAgICAjIGdldCB1c2VyIGdyb3Vwcywgd2hlcmUgdGhlIHVzZXIgaGFzIHRoZSBhcHByb3ByaWF0ZSBwcml2aWxlZ2UKICAgIG15ICVHcm91cHMgPSAkR3JvdXBPYmplY3QtPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIFR5cGUgICA9PiAkQ29uZmlnLT57UGVybWlzc2lvbn0sCiAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICk7CgogICAgIyBkZW55IGFjY2VzcyBpZiB0aGUgYWdlbnQgZG9lc24ndCBoYXZlIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGluIHRoZSBhcHByb3ByaWF0ZSBncm91cAogICAgcmV0dXJuIGlmICEkR3JvdXBzeyRHcm91cElEfTsKCiAgICAjIGdldCB0aGUgbnVtYmVyIG9mIHZpZXdhYmxlIGNoYW5nZXMKICAgIG15ICRDb3VudCA9IDA7CiAgICBpZiAoICRDb25maWctPnsnRmlsdGVyOjpDaGFuZ2VTdGF0ZXMnfSAmJiBAeyAkQ29uZmlnLT57J0ZpbHRlcjo6Q2hhbmdlU3RhdGVzJ30gfSApIHsKCiAgICAgICAgIyByZW1vdmUgZW1wdHkgY2hhbmdlIHN0YXRlcwogICAgICAgIG15IEBDaGFuZ2VTdGF0ZXM7CiAgICAgICAgQ0hBTkdFU1RBVEU6CiAgICAgICAgZm9yIG15ICRDaGFuZ2VTdGF0ZSAoIEB7ICRDb25maWctPnsnRmlsdGVyOjpDaGFuZ2VTdGF0ZXMnfSB9ICkgewogICAgICAgICAgICBuZXh0IENIQU5HRVNUQVRFIGlmICEkQ2hhbmdlU3RhdGU7CiAgICAgICAgICAgIHB1c2ggQENoYW5nZVN0YXRlcywgJENoYW5nZVN0YXRlOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdGhlIGNhY2hlIHR5cGUgYW5kIFRUTCAoaW4gc2Vjb25kcykKICAgICAgICAkU2VsZi0+e0NhY2hlVHlwZX0gPSAnSVRTTUNoYW5nZU1hbmFnZW1lbnRUb29sQmFyTXlDaGFuZ2VzJyAuICRTZWxmLT57VXNlcklEfTsKICAgICAgICAkU2VsZi0+e0NhY2hlVFRMfSAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01DaGFuZ2U6OlRvb2xCYXI6OkNhY2hlVFRMJykgKiA2MDsKCiAgICAgICAgIyBnZXQgY2FjaGUgb2JqZWN0CiAgICAgICAgbXkgJENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7CgogICAgICAgICMgY2hlY2sgY2FjaGUKICAgICAgICBteSAkQ2FjaGVLZXkgPSBqb2luICcsJywgc29ydCBAQ2hhbmdlU3RhdGVzOwogICAgICAgIG15ICRDYWNoZSA9ICRDYWNoZU9iamVjdC0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCBkZWZpbmVkICRDYWNoZSApIHsKICAgICAgICAgICAgJENvdW50ID0gJENhY2hlOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgY291bnQgdGhlIG51bWJlciBvZiB2aWV3YWJsZSBjaGFuZ2VzCiAgICAgICAgICAgICRDb3VudCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZVNlYXJjaCgKICAgICAgICAgICAgICAgIENoYW5nZUJ1aWxkZXJJRHMgPT4gWyAkU2VsZi0+e1VzZXJJRH0gXSwKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlcyAgICAgPT4gXEBDaGFuZ2VTdGF0ZXMsCiAgICAgICAgICAgICAgICBMaW1pdCAgICAgICAgICAgID0+IDEwMDAsCiAgICAgICAgICAgICAgICBSZXN1bHQgICAgICAgICAgID0+ICdDT1VOVCcsCiAgICAgICAgICAgICAgICBNaXJyb3JEQiAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2V0IGNhY2hlCiAgICAgICAgICAgICRDYWNoZU9iamVjdC0+U2V0KAogICAgICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJENvdW50LAogICAgICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGxheW91dCBvYmplY3QKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBnZXQgVG9vbEJhciBvYmplY3QgcGFyYW1ldGVycwogICAgbXkgJENsYXNzID0gJFBhcmFte0NvbmZpZ30tPntDc3NDbGFzc307CiAgICBteSAkVGV4dCAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ015IENoYW5nZXMnKTsKCiAgICAjIHNldCBUb29sQmFyIG9iamVjdAogICAgbXkgJFVSTCAgICAgID0gJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfTsKICAgIG15ICRQcmlvcml0eSA9ICRQYXJhbXtDb25maWd9LT57UHJpb3JpdHl9OwogICAgbXkgJVJldHVybjsKICAgIGlmICgkQ291bnQpIHsKICAgICAgICAkUmV0dXJueyRQcmlvcml0eX0gPSB7CiAgICAgICAgICAgIEJsb2NrICAgICAgID0+ICdUb29sQmFySXRlbScsCiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICRUZXh0LAogICAgICAgICAgICBDb3VudCAgICAgICA9PiAkQ291bnQsCiAgICAgICAgICAgIENsYXNzICAgICAgID0+ICRDbGFzcywKICAgICAgICAgICAgSWNvbiAgICAgICAgPT4gJEljb24sCiAgICAgICAgICAgIExpbmsgICAgICAgID0+ICRVUkwgLiAnQWN0aW9uPScgLiAkQWN0aW9uLAogICAgICAgICAgICBBY2Nlc3NLZXkgICA9PiAnJywKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiAlUmV0dXJuOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRvb2xCYXI6Ok15V29ya09yZGVyczsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBVc2VySUQgcGFyYW0KICAgICRTZWxmLT57VXNlcklEfSA9ICRQYXJhbXtVc2VySUR9IHx8IGRpZSAiR290IG5vIFVzZXJJRCEiOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZGVmaW5lIGFjdGlvbgogICAgbXkgJEFjdGlvbiA9ICdBZ2VudElUU01DaGFuZ2VNeVdvcmtPcmRlcnMnOwogICAgbXkgJEdyb3VwICA9ICdpdHNtLWNoYW5nZSc7CiAgICBteSAkSWNvbiAgID0gJFBhcmFte0NvbmZpZ30tPntJY29ufTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGRvIG5vdCBzaG93IGljb24gaWYgZnJvbnRlbmQgbW9kdWxlIGlzIG5vdCByZWdpc3RlcmVkCiAgICByZXR1cm4gaWYgISRDb25maWdPYmplY3QtPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57JEFjdGlvbn07CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OiRBY3Rpb24iKTsKCiAgICAjIGdldCBncm91cCBvYmplY3QKICAgIG15ICRHcm91cE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpOwoKICAgICMgZ2V0IHRoZSBncm91cCBpZAogICAgbXkgJEdyb3VwSUQgPSAkR3JvdXBPYmplY3QtPkdyb3VwTG9va3VwKCBHcm91cCA9PiAkR3JvdXAgKTsKCiAgICAjIGRlbnkgYWNjZXNzLCB3aGVuIHRoZSBncm91cCBpcyBub3QgZm91bmQKICAgIHJldHVybiBpZiAhJEdyb3VwSUQ7CgogICAgIyBnZXQgdXNlciBncm91cHMsIHdoZXJlIHRoZSB1c2VyIGhhcyB0aGUgYXBwcm9wcmlhdGUgcHJpdmlsZWdlCiAgICBteSAlR3JvdXBzID0gJEdyb3VwT2JqZWN0LT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBUeXBlICAgPT4gJENvbmZpZy0+e1Blcm1pc3Npb259LAogICAgICAgIFJlc3VsdCA9PiAnSEFTSCcsCiAgICApOwoKICAgICMgZGVueSBhY2Nlc3MgaWYgdGhlIGFnZW50IGRvZXNuJ3QgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgdHlwZSBpbiB0aGUgYXBwcm9wcmlhdGUgZ3JvdXAKICAgIHJldHVybiBpZiAhJEdyb3Vwc3skR3JvdXBJRH07CgogICAgIyBnZXQgdGhlIG51bWJlciBvZiB2aWV3YWJsZSBjaGFuZ2VzCiAgICBteSAkQ291bnQgPSAwOwogICAgaWYgKCAkQ29uZmlnLT57J0ZpbHRlcjo6V29ya09yZGVyU3RhdGVzJ30gJiYgQHsgJENvbmZpZy0+eydGaWx0ZXI6OldvcmtPcmRlclN0YXRlcyd9IH0gKSB7CgogICAgICAgICMgcmVtb3ZlIGVtcHR5IHdvcmtvcmRlciBzdGF0ZXMKICAgICAgICBteSBAV29ya09yZGVyU3RhdGVzOwogICAgICAgIFdPUktPUkRFUlNUQVRFOgogICAgICAgIGZvciBteSAkV29ya09yZGVyU3RhdGUgKCBAeyAkQ29uZmlnLT57J0ZpbHRlcjo6V29ya09yZGVyU3RhdGVzJ30gfSApIHsKICAgICAgICAgICAgbmV4dCBXT1JLT1JERVJTVEFURSBpZiAhJFdvcmtPcmRlclN0YXRlOwogICAgICAgICAgICBwdXNoIEBXb3JrT3JkZXJTdGF0ZXMsICRXb3JrT3JkZXJTdGF0ZTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSBjYWNoZSB0eXBlIGFuZCBUVEwgKGluIHNlY29uZHMpCiAgICAgICAgJFNlbGYtPntDYWNoZVR5cGV9ID0gJ0lUU01DaGFuZ2VNYW5hZ2VtZW50VG9vbEJhck15V29ya09yZGVycycgLiAkU2VsZi0+e1VzZXJJRH07CiAgICAgICAgJFNlbGYtPntDYWNoZVRUTH0gID0gJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNQ2hhbmdlOjpUb29sQmFyOjpDYWNoZVRUTCcpICogNjA7CgogICAgICAgICMgY2hlY2sgY2FjaGUKICAgICAgICBteSAkQ2FjaGVLZXkgPSBqb2luICcsJywgc29ydCBAV29ya09yZGVyU3RhdGVzOwoKICAgICAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCBkZWZpbmVkICRDYWNoZSApIHsKICAgICAgICAgICAgJENvdW50ID0gJENhY2hlOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgY291bnQgdGhlIG51bWJlciBvZiB2aWV3YWJsZSB3b3Jrb3JkZXJzCiAgICAgICAgICAgICRDb3VudCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlclNlYXJjaCgKICAgICAgICAgICAgICAgIFdvcmtPcmRlckFnZW50SURzID0+IFsgJFNlbGYtPntVc2VySUR9IF0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZXMgICA9PiBcQFdvcmtPcmRlclN0YXRlcywKICAgICAgICAgICAgICAgIExpbWl0ICAgICAgICAgICAgID0+IDEwMDAsCiAgICAgICAgICAgICAgICBSZXN1bHQgICAgICAgICAgICA9PiAnQ09VTlQnLAogICAgICAgICAgICAgICAgTWlycm9yREIgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2V0IGNhY2hlCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkQ291bnQsCiAgICAgICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGdldCBUb29sQmFyIG9iamVjdCBwYXJhbWV0ZXJzCiAgICBteSAkQ2xhc3MgPSAkUGFyYW17Q29uZmlnfS0+e0Nzc0NsYXNzfTsKICAgIG15ICRUZXh0ICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTXkgV29yayBPcmRlcnMnKTsKCiAgICAjIHNldCBUb29sQmFyIG9iamVjdAogICAgbXkgJFVSTCAgICAgID0gJExheW91dE9iamVjdC0+e0Jhc2VsaW5rfTsKICAgIG15ICRQcmlvcml0eSA9ICRQYXJhbXtDb25maWd9LT57UHJpb3JpdHl9OwogICAgbXkgJVJldHVybjsKICAgIGlmICgkQ291bnQpIHsKICAgICAgICAkUmV0dXJueyRQcmlvcml0eX0gPSB7CiAgICAgICAgICAgIEJsb2NrICAgICAgID0+ICdUb29sQmFySXRlbScsCiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICRUZXh0LAogICAgICAgICAgICBDb3VudCAgICAgICA9PiAkQ291bnQsCiAgICAgICAgICAgIENsYXNzICAgICAgID0+ICRDbGFzcywKICAgICAgICAgICAgSWNvbiAgICAgICAgPT4gJEljb24sCiAgICAgICAgICAgIExpbmsgICAgICAgID0+ICRVUkwgLiAnQWN0aW9uPScgLiAkQWN0aW9uLAogICAgICAgICAgICBBY2Nlc3NLZXkgICA9PiAnJywKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiAlUmV0dXJuOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJIZWFkZXIiPlslIFRyYW5zbGF0ZSgiQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHkiKSB8IGh0bWwgJV08L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+PGgyPlslIFRyYW5zbGF0ZSgiTm90ZSIpIHwgaHRtbCAlXTwvaDI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ2F0ZWdvcnkgPC0+IEltcGFjdC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiUHJpb3JpdHkgYWxsb2NhdGlvbiIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkNJUEFsbG9jYXRlIi8+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUgRGF0YVRhYmxlTm9IaWdobGlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckNvbHVtbkRlc2NyaXB0aW9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLk9iamVjdFR5cGUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJDb2x1bW5EZXNjcmlwdGlvbiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckNlbGwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuT2JqZWN0T3B0aW9uKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiSGVhZGVyQ2VsbCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEZXNjcmlwdGlvbkNlbGwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuT2JqZWN0T3B0aW9uKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiRGVzY3JpcHRpb25DZWxsIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ29udGVudENlbGwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5PcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIkNvbnRlbnRDZWxsIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5Ij48c3Bhbj5bJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CgoKICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKPC9kaXY+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDE+WyUgVHJhbnNsYXRlKCJJVFNNIENoYW5nZU1hbmFnZW1lbnQgTm90aWZpY2F0aW9uIE1hbmFnZW1lbnQiKSB8IGh0bWwgJV08L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uTGlzdCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFjdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbkxpc3QiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtbGVmdCI+PC9pPlslIFRyYW5zbGF0ZSgiR28gdG8gb3ZlcnZpZXciKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlldyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249QWRkIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZSI+PC9pPlslIFRyYW5zbGF0ZSgiQWRkIE5vdGlmaWNhdGlvbiBSdWxlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uQWRkIikgJV0KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uTGlzdCIpICVdCiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3UmVzdWx0IikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiTGlzdCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVzIwcGMiPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJFdmVudCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJBdHRyaWJ1dGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiUnVsZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJSZWNpcGllbnRzIikgfCBodG1sICVdPC90aD4KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2VudGVyIFcxMHBjIj5bJSBUcmFuc2xhdGUoIkNvcHkiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDZW50ZXIgVzEwcGMiPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdSZXN1bHRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgWyUgSUYgRGF0YS5WYWxpZElEICE9IDElXWNsYXNzPSJJbnZhbGlkIlslIEVORCAlXT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPUNoYW5nZTtJRD1bJSBEYXRhLklEIHwgdXJpICVdIj5bJSBEYXRhLk5hbWUgfCBodG1sICVdPC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuRXZlbnQpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5BdHRyaWJ1dGUgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLlJ1bGUgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLlJlY2lwaWVudHMgfCBodG1sICVdPC90ZD4KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5Db21tZW50IHwgdHJ1bmNhdGUoMjApIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVmFsaWQpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPU5vdGlmaWNhdGlvbkNvcHk7SUQ9WyUgRGF0YS5JRCB8IHVyaSAlXTtbJSBFbnYoIkNoYWxsZW5nZVRva2VuUGFyYW0iKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jb3B5Ij48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiQ29weSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJUcmFzaENhbiBOb3RpZmljYXRpb25EZWxldGUiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1EZWxldGU7SUQ9WyUgRGF0YS5JRCB8IHVyaSAlXTtbJSBFbnYoIkNoYWxsZW5nZVRva2VuUGFyYW0iKSB8IGh0bWwgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkRlbGV0ZSB0aGlzIG5vdGlmaWNhdGlvbiIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS10cmFzaC1vIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3UmVzdWx0Um93IikgJV0KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwokKCcuTm90aWZpY2F0aW9uRGVsZXRlJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKCiAgICBpZiAod2luZG93LmNvbmZpcm0oWyUgVHJhbnNsYXRlKCJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgbm90aWZpY2F0aW9uPyIpIHwgSlNPTiAlXSkpIHsKICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAkKHRoaXMpLmF0dHIoJ2hyZWYnKTsKICAgIH0KCiAgICAvLyBkb24ndCBpbnRlcmZlcmUgd2l0aCBNYXN0ZXJBY3Rpb24KICAgIEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgRXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIHJldHVybiBmYWxzZTsKfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQoKWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3UmVzdWx0IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3VXBkYXRlIikgJV0KICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IlZhbGlkYXRlIj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoRGF0YS5BY3Rpb25MYWJlbCkgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJbJSBEYXRhLkFjdGlvbiB8IHVyaSAlXUFjdGlvbiIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IklEIiB2YWx1ZT0iWyUgRGF0YS5JRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik5hbWUiPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJOYW1lIiBuYW1lPSJOYW1lIiBjbGFzcz0iVmFsaWRhdGVfUmVxdWlyZWQgVzUwcGMgWyUgRGF0YS5OYW1lSW52YWxpZCB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBtYXhsZW5ndGg9IjUwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkEgbm90aWZpY2F0aW9uIHNob3VsZCBoYXZlIGEgbmFtZSEiKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIk5hbWUgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iRXZlbnRJRCI+WyUgVHJhbnNsYXRlKCJFdmVudCIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5FdmVudE9wdGlvbiAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQXR0cmlidXRlIj5bJSBUcmFuc2xhdGUoIkF0dHJpYnV0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkF0dHJpYnV0ZSIgbmFtZT0iQXR0cmlidXRlIiB2YWx1ZT0iWyUgRGF0YS5BdHRyaWJ1dGUgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iNTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlJ1bGUiPlslIFRyYW5zbGF0ZSgiUnVsZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IlJ1bGUiIG5hbWU9IlJ1bGUiIHZhbHVlPSJbJSBEYXRhLlJ1bGUgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iNTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlJlY2lwaWVudElEcyI+WyUgVHJhbnNsYXRlKCJSZWNpcGllbnRzIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuUmVjaXBpZW50T3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJWYWxpZElEIj5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsaWRPcHRpb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNvbW1lbnQiPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkNvbW1lbnQiIG5hbWU9IkNvbW1lbnQiIHZhbHVlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iMTUwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlJpY2hUZXh0IikgJV0KWyUgSW5zZXJ0VGVtcGxhdGUoIlJpY2hUZXh0RWRpdG9yLnR0IikgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlJpY2hUZXh0IikgJV0KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhpZGRlbiBUZW1wbGF0ZSBOb3RpZmljYXRpb25MYW5ndWFnZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJUb2dnbGUgdGhpcyB3aWRnZXQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJUaXRsZSI+PC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWRkaXRpb25hbEluZm9ybWF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHZhbHVlPSJSZW1vdmUgTGFuZ3VhZ2UiIGNsYXNzPSJSZW1vdmVCdXR0b24gTGFuZ3VhZ2VSZW1vdmUiIGlkPSJUZW1wbGF0ZV9MYW5ndWFnZV9SZW1vdmUiIGhyZWY9IiIgbmFtZT0iVGVtcGxhdGVfTGFuZ3VhZ2VfUmVtb3ZlIj48aSBjbGFzcz0iZmEgZmEtbWludXMtc3F1YXJlLW8iPjwvaT48c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJSZW1vdmUgTm90aWZpY2F0aW9uIExhbmd1YWdlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IiIgY2xhc3M9Ikxhbmd1YWdlSUQiIHZhbHVlPSIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlRlbXBsYXRlX1N1YmplY3QiIGlkPSJUZW1wbGF0ZV9MYWJlbF9TdWJqZWN0IiBjbGFzcz0iTWFuZGF0b3J5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiU3ViamVjdCIpIHwgaHRtbCAlXToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlRlbXBsYXRlX1N1YmplY3QiIGlkPSJUZW1wbGF0ZV9TdWJqZWN0IiB2YWx1ZT0iIiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iMjAwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVGVtcGxhdGVfU3ViamVjdEVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJUZW1wbGF0ZV9Cb2R5IiBpZD0iVGVtcGxhdGVfTGFiZWxfQm9keSIgY2xhc3M9Ik1hbmRhdG9yeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRleHQiKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJUZW1wbGF0ZV9Cb2R5IiBjbGFzcz0iIiBuYW1lPSJUZW1wbGF0ZV9Cb2R5IiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJNZXNzYWdlIGJvZHkiKSB8IGh0bWwgJV0iIHJvd3M9IjE1IiBjb2xzPSJbJSBDb25maWcoIlRpY2tldDo6RnJvbnRlbmQ6OlRleHRBcmVhTm90ZSIpICVdIj48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlRlbXBsYXRlX0JvZHlFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiTm90aWZpY2F0aW9uVHlwZSIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlRvZ2dsZSB0aGlzIHdpZGdldCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiTm90aWZpY2F0aW9uIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoRGF0YS5UeXBlKSB8IGh0bWwgJV0pPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Ik5vdGlmaWNhdGlvbkxhbmd1YWdlQ29udGFpbmVyIiBpZD0iWyUgRGF0YS5UeXBlIHwgaHRtbCAlXU5vdGlmaWNhdGlvbkxhbmd1YWdlQ29udGFpbmVyIj4KClslIFJlbmRlckJsb2NrU3RhcnQoIk5vdGlmaWNhdGlvbkxhbmd1YWdlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTm90aWZpY2F0aW9uTGFuZ3VhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVG9nZ2xlIHRoaXMgd2lkZ2V0IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iVGl0bGUiPlslIFRyYW5zbGF0ZShEYXRhLkxhbmd1YWdlKSAlXTwvaDI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vdGlmaWNhdGlvbkxhbmd1YWdlUmVtb3ZlQnV0dG9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWRkaXRpb25hbEluZm9ybWF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHZhbHVlPSJSZW1vdmUgTGFuZ3VhZ2UiIGNsYXNzPSJSZW1vdmVCdXR0b24gTGFuZ3VhZ2VSZW1vdmUgWyUgRGF0YS5UeXBlIHwgaHRtbCAlXUxhbmd1YWdlUmVtb3ZlIiBpZD0iWyUgRGF0YS5UeXBlIHwgaHRtbCAlXV9bJSBEYXRhLkxhbmd1YWdlSUQgfCBodG1sICVdX0xhbmd1YWdlX1JlbW92ZSIgaHJlZj0iIiBuYW1lPSJbJSBEYXRhLlR5cGUgfCBodG1sICVdX1slIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV1fTGFuZ3VhZ2VfUmVtb3ZlIj48aSBjbGFzcz0iZmEgZmEtbWludXMtc3F1YXJlLW8iPjwvaT48c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJSZW1vdmUgTm90aWZpY2F0aW9uIExhbmd1YWdlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJOb3RpZmljYXRpb25MYW5ndWFnZVJlbW92ZUJ1dHRvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlslIERhdGEuVHlwZSB8IGh0bWwgJV1fTGFuZ3VhZ2VJRCIgY2xhc3M9Ikxhbmd1YWdlSUQiIHZhbHVlPSJbJSBEYXRhLkxhbmd1YWdlSUQgfCBodG1sICVdIi8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5UeXBlIHwgaHRtbCAlXV9bJSBEYXRhLkxhbmd1YWdlSUQgfCBodG1sICVdX1N1YmplY3QiIGlkPSJbJSBEYXRhLlR5cGUgfCBodG1sICVdX1slIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV1fTGFiZWxfU3ViamVjdCIgY2xhc3M9Ik1hbmRhdG9yeSI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlN1YmplY3QiKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbJSBEYXRhLlR5cGUgfCBodG1sICVdX1slIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV1fU3ViamVjdCIgaWQ9IlslIERhdGEuVHlwZSB8IGh0bWwgJV1fWyUgRGF0YS5MYW5ndWFnZUlEIHwgaHRtbCAlXV9TdWJqZWN0IiB2YWx1ZT0iWyUgRGF0YS5TdWJqZWN0IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuU3ViamVjdFNlcnZlckVycm9yIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSIyMDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJbJSBEYXRhLlR5cGUgfCBodG1sICVdX1slIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV1fU3ViamVjdEVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iWyUgRGF0YS5UeXBlIHwgaHRtbCAlXV9bJSBEYXRhLkxhbmd1YWdlSUQgfCBodG1sICVdX1N1YmplY3RTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuVHlwZSB8IGh0bWwgJV1fWyUgRGF0YS5MYW5ndWFnZUlEIHwgaHRtbCAlXV9Cb2R5IiBpZD0iWyUgRGF0YS5UeXBlIHwgaHRtbCAlXV9bJSBEYXRhLkxhbmd1YWdlSUQgfCBodG1sICVdX0xhYmVsX0JvZHkiIGNsYXNzPSJNYW5kYXRvcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRleHQiKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9IlslIERhdGEuVHlwZSB8IGh0bWwgJV1fWyUgRGF0YS5MYW5ndWFnZUlEIHwgaHRtbCAlXV9Cb2R5IiBpZD0iWyUgRGF0YS5UeXBlIHwgaHRtbCAlXV9bJSBEYXRhLkxhbmd1YWdlSUQgfCBodG1sICVdX0JvZHkiIGNsYXNzPSJSaWNoVGV4dCBWYWxpZGF0ZV9SZXF1aXJlZFJpY2hUZXh0IFslIERhdGEuQm9keVNlcnZlckVycm9yIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiTWVzc2FnZSBib2R5IikgfCBodG1sICVdIiByb3dzPSIxNSIgY29scz0iWyUgQ29uZmlnKCJUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUiKSAlXSI+WyUgRGF0YS5Cb2R5IHwgaHRtbCAlXTwvdGV4dGFyZWE+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlslIERhdGEuVHlwZSB8IGh0bWwgJV1fWyUgRGF0YS5MYW5ndWFnZUlEIHwgaHRtbCAlXV9Cb2R5RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJbJSBEYXRhLlR5cGUgfCBodG1sICVdX1slIERhdGEuTGFuZ3VhZ2VJRCB8IGh0bWwgJV1fQm9keVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJOb3RpZmljYXRpb25MYW5ndWFnZSIpICVdCgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiTm90aWZpY2F0aW9uTGFuZ3VhZ2VBZGQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTGFuZ3VhZ2UiPlslIFRyYW5zbGF0ZSgiQWRkIG5ldyBub3RpZmljYXRpb24gbGFuZ3VhZ2UiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYW5ndWFnZVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFuZ3VhZ2VPcmlnU3RyZyAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiTm90aWZpY2F0aW9uTGFuZ3VhZ2VBZGQiKSAlXQoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vdGlmaWNhdGlvblR5cGUiKSAlXQoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKSVRTTS5BZ2VudC5DaGFuZ2VNYW5hZ2VtZW50Lk5vdGlmaWNhdGlvbkV2ZW50LkluaXQoewogICAgTG9jYWxpemF0aW9uOiB7CiAgICAgICAgRGVsZXRlTm90aWZpY2F0aW9uTGFuZ3VhZ2VNc2c6IFslIFRyYW5zbGF0ZSgiRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIG5vdGlmaWNhdGlvbiBsYW5ndWFnZT8iKSB8IEpTT04gJV0KICAgIH0KfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJTYXZlIENoYW5nZXMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU3VibWl0IikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgIDwvZm9ybT4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3VXBkYXRlIikgJV0KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3IikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3IikgJV0KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDE+WyUgVHJhbnNsYXRlKCJBZG1pbiBTdGF0ZSBNYWNoaW5lIikgfCBodG1sICVdPC9oMT4KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWN0aW9ucyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZFN0YXRlIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJnZXQiIGNsYXNzPSJWYWxpZGF0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iICAgIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlN0YXRlVHJhbnNpdGlvbkFkZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIERhdGEuQ2xhc3NTZWxlY3Rpb25TdHJpbmcgJV08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkNsYXNzRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlNlbGVjdCBhIGNhdGFsb2cgY2xhc3MhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQ2xhc3NTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiQSBjYXRhbG9nIGNsYXNzIGlzIHJlcXVpcmVkISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkFkZCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKCJBZGQgYSBzdGF0ZSB0cmFuc2l0aW9uIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uQWRkU3RhdGUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj48c3Bhbj5bJSBUcmFuc2xhdGUoIkdvIHRvIG92ZXJ2aWV3IikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uT3ZlcnZpZXciKSAlXQogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0NsYXNzZXMiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiTGlzdCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNhdGFsb2cgQ2xhc3MiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiT2JqZWN0IE5hbWUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0NsYXNzZXNSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO0NsYXNzPVslIERhdGEuQ2xhc3MgfCB1cmkgJV0iPlslIERhdGEuQ2xhc3MgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNsYXNzU2hvcnROYW1lIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld0NsYXNzZXNSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld0NsYXNzZXMiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdTdGF0ZVRyYW5zaXRpb25zIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIk92ZXJ2aWV3IG92ZXIgc3RhdGUgdHJhbnNpdGlvbnMgZm9yIikgfCBodG1sICVdIFslIERhdGEuQ2xhc3MgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU3RhdGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiTmV4dCBzdGF0ZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTdGF0ZVRyYW5zaXRpb25Sb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1TdGF0ZVRyYW5zaXRpb25VcGRhdGU7Q2xhc3M9WyUgRGF0YS5DbGFzcyB8IHVyaSAlXTtTdGF0ZUlEPVslIERhdGEuU3RhdGVJRCB8IHVyaSAlXTtOZXh0U3RhdGVJRD1bJSBEYXRhLk5leHRTdGF0ZUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuU3RhdGVOYW1lKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLk5leHRTdGF0ZU5hbWUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciBMYXN0Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU3RhdGVUcmFuc2l0aW9uRGVsZXRlQnV0dG9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249U3RhdGVUcmFuc2l0aW9uRGVsZXRlO0NsYXNzPVslIERhdGEuQ2xhc3MgfCB1cmkgJV07U3RhdGVJRD1bJSBEYXRhLlN0YXRlSUQgfCB1cmkgJV07TmV4dFN0YXRlSUQ9WyUgRGF0YS5OZXh0U3RhdGVJRCB8IHVyaSAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRGVsZXRlIHRoaXMgc3RhdGUgdHJhbnNpdGlvbiIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS10cmFzaC1vIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIkRlbGV0ZSB0aGlzIHN0YXRlIHRyYW5zaXRpb24iKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+ClslIFJlbmRlckJsb2NrRW5kKCJTdGF0ZVRyYW5zaXRpb25EZWxldGVCdXR0b24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIlN0YXRlVHJhbnNpdGlvblJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdTdGF0ZVRyYW5zaXRpb25zIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiU3RhdGVUcmFuc2l0aW9uQWRkIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFkZCBhIG5ldyBzdGF0ZSB0cmFuc2l0aW9uIGZvciIpIHwgaHRtbCAlXSBbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJJVFNNU3RhdGVNYWNoaW5lQWRkIiBjbGFzcz0iVmFsaWRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgICAgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJbJSBEYXRhLkFjdGlvbiB8IGh0bWwgJV1BY3Rpb24iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDbGFzcyIgICAgIHZhbHVlPSJbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlN0YXRlSUQiPlslIFRyYW5zbGF0ZSgiU3RhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TdGF0ZVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU3RhdGVJREVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJQbGVhc2Ugc2VsZWN0IGEgc3RhdGUhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU3RhdGVJRFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJQbGVhc2Ugc2VsZWN0IGEgc3RhdGUhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTmV4dCBzdGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk5leHRTdGF0ZVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmV4dFN0YXRlSURFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiUGxlYXNlIHNlbGVjdCBhIG5leHQgc3RhdGUhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmV4dFN0YXRlSURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiUGxlYXNlIHNlbGVjdCBhIG5leHQgc3RhdGUhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IiB0eXBlPSJzdWJtaXQiIGlkPSJTdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkFkZCIpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJBZGQiKSB8IGh0bWwgJV08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdIj5bJSBUcmFuc2xhdGUoIkNhbmNlbCIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTdGF0ZVRyYW5zaXRpb25BZGQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTdGF0ZVRyYW5zaXRpb25VcGRhdGUiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRWRpdCBhIHN0YXRlIHRyYW5zaXRpb24gZm9yIikgfCBodG1sICVdIFslIERhdGEuQ2xhc3MgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIG5hbWU9IklUU01TdGF0ZU1hY2hpbmVVcGRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgICAgICB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgICB2YWx1ZT0iWyUgRGF0YS5BY3Rpb24gfCBodG1sICVdQWN0aW9uIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ2xhc3MiICAgICAgIHZhbHVlPSJbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN0YXRlSUQiICAgICB2YWx1ZT0iWyUgRGF0YS5TdGF0ZUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik5leHRTdGF0ZUlEIiB2YWx1ZT0iWyUgRGF0YS5OZXh0U3RhdGVJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJTdGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5TdGF0ZU5hbWUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTmV4dCBzdGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk5leHRTdGF0ZVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24iIHR5cGU9InN1Ym1pdCIgaWQ9IlN1Ym1pdFVwZGF0ZSIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07Q2xhc3M9WyUgRGF0YS5DbGFzcyB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiU3RhdGVUcmFuc2l0aW9uVXBkYXRlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiU3RhdGVUcmFuc2l0aW9uRGVsZXRlIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJDZW50ZXIiPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGUgc3RhdGUgdHJhbnNpdGlvbiIpIHwgaHRtbCAlXToKICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlslIFRyYW5zbGF0ZShEYXRhLlN0YXRlTmFtZSkgfCBodG1sICVdPC9zdHJvbmc+ICYjODU5NDsKICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlslIFRyYW5zbGF0ZShEYXRhLk5leHRTdGF0ZU5hbWUpIHwgaHRtbCAlXTwvc3Ryb25nPj8KICAgICAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQ2FsbEZvckFjdGlvbiIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07Q2xhc3M9WyUgRGF0YS5DbGFzcyB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoIk5vIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJDYWxsRm9yQWN0aW9uIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249WyUgRGF0YS5BY3Rpb24gfCB1cmkgJV1BY3Rpb247Q2xhc3M9WyUgRGF0YS5DbGFzcyB8IHVyaSAlXTtTdGF0ZUlEPVslIERhdGEuU3RhdGVJRCB8IHVyaSAlXTtOZXh0U3RhdGVJRD1bJSBEYXRhLk5leHRTdGF0ZUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiWWVzIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTdGF0ZVRyYW5zaXRpb25EZWxldGUiKSAlXQogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIkNBQk1lbWJlclNlYXJjaEluaXQiKSAlXQpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwovKmdsb2JhbCBJVFNNOiB0cnVlICovCiAgICBJVFNNLkFnZW50LkNBQk1lbWJlclNlYXJjaC5Jbml0KCAkKCIjIiArIENvcmUuQXBwLkVzY2FwZVNlbGVjdG9yKCJbJSBEYXRhLkl0ZW1JRCB8IGh0bWwgJV0iKSApICk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiQ0FCTWVtYmVyU2VhcmNoSW5pdCIpICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KCiAgICA8aDE+WyUgVHJhbnNsYXRlKCJBZGQgQ2hhbmdlIikgfCBodG1sICVdPC9oMT4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIklUU00gQ2hhbmdlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIiBpZD0iQ2hhbmdlQWRkRm9ybSIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgICAgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTYXZlIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iVGlja2V0SUQiICB2YWx1ZT0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJGb3JtSUQiICAgIHZhbHVlPSJbJSBEYXRhLkZvcm1JRCB8IGh0bWwgJV0iLz4KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkNoYW5nZVRpdGxlIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qIDwvc3Bhbj5bJSBUcmFuc2xhdGUoIlRpdGxlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJDaGFuZ2VUaXRsZSIgaWQ9IkNoYW5nZVRpdGxlIiB2YWx1ZT0iWyUgRGF0YS5DaGFuZ2VUaXRsZSB8IGh0bWwgJV0iIGNsYXNzPSJXNzVwYyBWYWxpZGF0ZV9SZXF1aXJlZCBbJSBEYXRhLkNoYW5nZVRpdGxlVGl0bGVTZXJ2ZXJFcnJvciB8IGh0bWwgJV0iIG1heGxlbmd0aD0iMjUwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDaGFuZ2VUaXRsZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkNoYW5nZVRpdGxlU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUmljaFRleHQiKSAlXQpbJSBJbnNlcnRUZW1wbGF0ZSgiUmljaFRleHRFZGl0b3IudHQiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiUmljaFRleHQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJSaWNoVGV4dDEiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiRGVzY3JpcHRpb24iKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9IlJpY2hUZXh0MSIgY2xhc3M9IlJpY2hUZXh0IFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuRGVzY3JpcHRpb25JbnZhbGlkICVdIiBuYW1lPSJEZXNjcmlwdGlvbiIgcm93cz0iMTUiIGNvbHM9IlslIENvbmZpZygiVGlja2V0OjpGcm9udGVuZDo6VGV4dEFyZWFOb3RlIikgJV0iPlslIERhdGEuRGVzY3JpcHRpb24gfCBodG1sICVdPC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJpY2hUZXh0MUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJpY2hUZXh0MVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlJpY2hUZXh0MiI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJKdXN0aWZpY2F0aW9uIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJpY2hUZXh0RmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJSaWNoVGV4dDIiIGNsYXNzPSJSaWNoVGV4dCBWYWxpZGF0ZV9SZXF1aXJlZCBbJSBEYXRhLkp1c3RpZmljYXRpb25JbnZhbGlkICVdIiBuYW1lPSJKdXN0aWZpY2F0aW9uIiByb3dzPSIxNSIgY29scz0iWyUgQ29uZmlnKCJUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUiKSAlXSI+WyUgRGF0YS5KdXN0aWZpY2F0aW9uIHwgaHRtbCAlXTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSaWNoVGV4dDJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSaWNoVGV4dDJTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDYXRlZ29yeUlEIj5bJSBUcmFuc2xhdGUoIkNhdGVnb3J5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2F0ZWdvcnlTZWxlY3Rpb25TdHJpbmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkNhdGVnb3J5SURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW5wdXQgaW52YWxpZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkltcGFjdElEIj5bJSBUcmFuc2xhdGUoIkltcGFjdCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkltcGFjdFNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iSW1wYWN0SURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW5wdXQgaW52YWxpZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlByaW9yaXR5SUQiPlslIFRyYW5zbGF0ZSgiUHJpb3JpdHkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Qcmlvcml0eVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUHJpb3JpdHlJRFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJJbnB1dCBpbnZhbGlkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNDYXRlZ29yeUlEJykuYmluZCgnY2hhbmdlJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgQ29yZS5BSkFYLkZvcm1VcGRhdGUoJCgnI0NoYW5nZUFkZEZvcm0nKSwgJ0FKQVhVcGRhdGUnLCAnQ2F0ZWdvcnlJRCcsIFsnSW1wYWN0SUQnLCAnUHJpb3JpdHlJRCddKTsKICAgIH0pOwogICAgJCgnI0ltcGFjdElEJykuYmluZCgnY2hhbmdlJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgQ29yZS5BSkFYLkZvcm1VcGRhdGUoJCgnI0NoYW5nZUFkZEZvcm0nKSwgJ0FKQVhVcGRhdGUnLCAnSW1wYWN0SUQnLCBbJ1ByaW9yaXR5SUQnXSk7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSb3cgUm93X0R5bmFtaWNGaWVsZF9bJSBEYXRhLk5hbWUgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGQiKSAlXQoKIyBleGFtcGxlIG9mIGhvdyB0byB1c2UgZml4ZWQgZHluYW1pYyBmaWVsZCBibG9ja3MgZm9yIGN1c3RvbWl6YXRpb25zCiMgTm90ZTogRmllbGQxIGFuZCBGaWVsZDIgYXJlIHRoZSBuYW1lcyBvZiB0aGUgZmllbGRzIGFuZCBoYWQgdG8gYmUgcmVwbGFjZWQgd2l0aCB0aGUgYWN0dWFsCiMgZmllbGQgbmFtZXMKI1slIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZF9GaWVsZDEiKSAlXQojICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSb3cgUm93X0R5bmFtaWNGaWVsZF9bJSBEYXRhLk5hbWUgfCBodG1sICVdIj4KIyAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkICVdCiMgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiNbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkX0ZpZWxkMSIpICVdCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRfRmllbGQyIikgJV0KIyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiMgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhYmVsICVdCiMgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQojICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiMgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgICAgICAgICAgICAgICAgICAgIDwvZGl2PgojWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZF9GaWVsZDIiKSAlXQoKClslIFJlbmRlckJsb2NrU3RhcnQoIlJlcXVlc3RlZFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJSZXF1ZXN0ZWQgRGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlJlcXVlc3RlZFRpbWVTdHJpbmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJlcXVlc3RlZFRpbWVEYXlFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCBkYXRlISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJlcXVlc3RlZFRpbWVIb3VyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgZGF0ZSEiKSB8IGh0bWwgJV08L3A+PC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIlJlcXVlc3RlZFRpbWVHZW5lcmljU2VydmVyRXJyb3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUmVxdWVzdGVkVGltZURheVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJJbnZhbGlkIGRhdGUhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUmVxdWVzdGVkVGltZUhvdXJTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCBkYXRlISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlcXVlc3RlZFRpbWVHZW5lcmljU2VydmVyRXJyb3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVxdWVzdGVkVGltZSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBdHRhY2htZW50VXBsb2FkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQXR0YWNobWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+ClslIFJlbmRlckJsb2NrU3RhcnQoIkF0dGFjaG1lbnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWxlbmFtZSB8IGh0bWwgJV0gKFslIERhdGEuRmlsZXNpemUgfCBodG1sICVdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgaWQ9IkF0dGFjaG1lbnREZWxldGVbJSBEYXRhLkZpbGVJRCB8IGh0bWwgJV0iIG5hbWU9IkF0dGFjaG1lbnREZWxldGVbJSBEYXRhLkZpbGVJRCB8IGh0bWwgJV0iIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV08L2J1dHRvbj4KWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNBdHRhY2htZW50RGVsZXRlWyUgRGF0YS5GaWxlSUQgfCBodG1sICVdJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkRpc2FibGVWYWxpZGF0aW9uKCQoJyNBdHRhY2htZW50RGVsZXRlWyUgRGF0YS5GaWxlSUQgfCBodG1sICVdJykuY2xvc2VzdCgnZm9ybScpKTsKICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQXR0YWNobWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iRmlsZVVwbG9hZCIgaWQ9IkZpbGVVcGxvYWQiIHR5cGU9ImZpbGUiIHNpemU9IjQwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJBdHRhY2htZW50VXBsb2FkIiBuYW1lPSJBdHRhY2htZW50VXBsb2FkIiB2YWx1ZT0iMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcjRmlsZVVwbG9hZCcpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkRm9ybSA9ICQoJyNGaWxlVXBsb2FkJykuY2xvc2VzdCgnZm9ybScpOwogICAgICAgIENvcmUuRm9ybS5WYWxpZGF0ZS5EaXNhYmxlVmFsaWRhdGlvbigkRm9ybSk7CiAgICAgICAgJEZvcm0uZmluZCgnI0F0dGFjaG1lbnRVcGxvYWQnKS52YWwoJzEnKS5lbmQoKS5zdWJtaXQoKTsKICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KClslIFJlbmRlckJsb2NrRW5kKCJBdHRhY2htZW50VXBsb2FkIikgJV0KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiBpZD0iU3VibWl0Q2hhbmdlQWRkIiBuYW1lPSJDaGFuZ2VBZGQiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkNyZWF0ZSIpIHwgaHRtbCAlXSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJDcmVhdGUiKSB8IGh0bWwgJV0iPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1zcXVhcmUtbyI+PC9pPiBbJSBUcmFuc2xhdGUoIkNyZWF0ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KCiAgICA8aDE+WyUgVHJhbnNsYXRlKCJBZGQgQ2hhbmdlIikgfCBodG1sICVdPC9oMT4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlNlbGVjdCBDaGFuZ2UgVGVtcGxhdGUiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIG5hbWU9InRlbXBsYXRlIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiAgICB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkNyZWF0ZUZyb21UZW1wbGF0ZSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNoYW5nZUlEIiAgdmFsdWU9IlslIERhdGEuQ2hhbmdlSUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iVGlja2V0SUQiICB2YWx1ZT0iWyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV0iLz4KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlRlbXBsYXRlSUQiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPiogPC9zcGFuPlslIFRyYW5zbGF0ZSgiVGVtcGxhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5UZW1wbGF0ZVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVGVtcGxhdGVJREVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlRlbXBsYXRlSURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTW92ZVRpbWVUeXBlIj5bJSBUcmFuc2xhdGUoIlRpbWUgdHlwZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk1vdmVUaW1lVHlwZVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTW92ZVRpbWVUeXBlU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgdGltZSB0eXBlLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJOZXcgdGltZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk1vdmVUaW1lU2VsZWN0aW9uU3RyaW5nICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24iIGlkPSJTdWJtaXRBZGRUZW1wbGF0ZSIgYWNjZXNza2V5PSJnIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV0gKGcpIiB0eXBlPSJzdWJtaXQiIG5hbWU9IkFkZFRlbXBsYXRlIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV0iPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1zcXVhcmUtbyI+PC9pPiBbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgIDwvZGl2Pgo8L2Rpdj4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iICAgICAgIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIiAvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiAgICB2YWx1ZT0iQWRkVGVtcGxhdGUiIC8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDaGFuZ2VJRCIgICAgIHZhbHVlPSJbJSBEYXRhLkNoYW5nZUlEIHwgaHRtbCAlXSIgLz4KCiAgICA8ZGl2IGNsYXNzPSJMYXlvdXRQb3B1cCBBUklBUm9sZU1haW4iPgogICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgIDxoMSB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTYXZlIENoYW5nZSBDQUIgYXMgdGVtcGxhdGUiKSB8IGh0bWwgJV0gOiBbJSBDb25maWcoIklUU01DaGFuZ2U6Okhvb2siKSAlXTogWyUgRGF0YS5DaGFuZ2VOdW1iZXIgJV0gWyUgRGF0YS5DaGFuZ2VUaXRsZSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJTYXZlIENoYW5nZSBDQUIgYXMgdGVtcGxhdGUiKSB8IGh0bWwgJV0gOiBbJSBDb25maWcoIklUU01DaGFuZ2U6Okhvb2siKSAlXTogWyUgRGF0YS5DaGFuZ2VOdW1iZXIgJV0gWyUgRGF0YS5DaGFuZ2VUaXRsZSB8IGh0bWwgJV0KICAgICAgICAgICAgPC9oMT4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCI+WyUgVHJhbnNsYXRlKCJDYW5jZWwgJiBjbG9zZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnM7Q2hhbmdlSUQ9WyUgRGF0YS5DaGFuZ2VJRCB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJnbyB0byBpbnZvbHZlZCBwZXJzb25zIHNjcmVlbiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBTcGFjaW5nQm90dG9tIj4KICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJUZW1wbGF0ZU5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiVGVtcGxhdGUgTmFtZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9IlRlbXBsYXRlTmFtZSIgdHlwZT0idGV4dCIgbmFtZT0iVGVtcGxhdGVOYW1lIiB2YWx1ZT0iWyUgRGF0YS5UZW1wbGF0ZU5hbWUgfCBodG1sICVdIiBjbGFzcz0iVzc1cGMgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5UZW1wbGF0ZU5hbWVTZXJ2ZXJFcnJvciAlXSIvPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBpZD0iVGVtcGxhdGVOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQiKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlRlbXBsYXRlTmFtZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJJbnZhbGlkIE5hbWUiKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDb21tZW50Ij4gWyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iQ29tbWVudCIgdHlwZT0idGV4dCIgbmFtZT0iQ29tbWVudCIgdmFsdWU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iIGNsYXNzPSJXNzVwYyIvPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmFsaWRJRCI+IFslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWxpZFNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJGb290ZXIiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IiB0eXBlPSJzdWJtaXQiIGlkPSJTdWJtaXRBZGRUZW1wbGF0ZSIgbmFtZT0iQWRkVGVtcGxhdGUiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkFkZCIpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9mb3JtPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJjb21wb3NlIj4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IiIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ2hhbmdlSUQiIHZhbHVlPSJbJSBEYXRhLkNoYW5nZUlEIHwgaHRtbCAlXSIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ29uZGl0aW9uSUQiIHZhbHVlPSJbJSBEYXRhLkNvbmRpdGlvbklEIHwgaHRtbCAlXSIvPgoKICAgIDxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgPGgxPgogICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJPdmVydmlldyIpIHwgaHRtbCAlXTogWyUgVHJhbnNsYXRlKCJDb25kaXRpb25zIGFuZCBBY3Rpb25zIikgfCBodG1sICVdIDogWyUgQ29uZmlnKCJJVFNNQ2hhbmdlOjpIb29rIikgJV06IFslIERhdGEuQ2hhbmdlTnVtYmVyIHwgaHRtbCAlXSBbJSBEYXRhLkNoYW5nZVRpdGxlIHwgdHJ1bmNhdGUoNzApIHwgaHRtbCAlXQogICAgICAgICAgICA8L2gxPgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJDYW5jZWxDbG9zZVBvcHVwIiBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIkNhbmNlbCAmIGNsb3NlIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkNvbmRpdGlvbnMgYW5kIEFjdGlvbnMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXciKSAlXQogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIFNwYWNpbmdUb3BTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ilc1MHBjIj5bJSBUcmFuc2xhdGUoIk5hbWUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2VudGVyIj5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNlbnRlciBXMTBwYyI+WyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1JvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgWyUgSUYgRGF0YS5WYWxpZElEICE9IDElXWNsYXNzPSJJbnZhbGlkIlslIEVORCAlXT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0O0NoYW5nZUlEPVslIERhdGEuQ2hhbmdlSUQgfCB1cmkgJV07Q29uZGl0aW9uSUQ9WyUgRGF0YS5Db25kaXRpb25JRCB8IHVyaSAlXSIgY2xhc3M9IkFzQmxvY2siPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuQ29tbWVudCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciI+WyUgVHJhbnNsYXRlKERhdGEuVmFsaWQpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO0NoYW5nZUlEPVslIERhdGEuQ2hhbmdlSUQgfCB1cmkgJV07Q29uZGl0aW9uSUQ9WyUgRGF0YS5Db25kaXRpb25JRCB8IHVyaSAlXTtEZWxldGVDb25kaXRpb25JRDo6WyUgRGF0YS5Db25kaXRpb25JRCB8IHVyaSAlXT1EZWxldGUiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiRGVsZXRlIENvbmRpdGlvbiIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTGF5b3V0R3JpZCBTcGFjaW5nVG9wU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXMTAwcGMgUmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkFkZCBuZXcgY29uZGl0aW9uIikgfCBodG1sICVdIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJBZGQiKSB8IGh0bWwgJV0iIG5hbWU9IkFkZENvbmRpdGlvbiIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gUGx1cyI+PHNwYW4+WyUgVHJhbnNsYXRlKCJBZGQgbmV3IGNvbmRpdGlvbiIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkZvb3RlciI+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9mb3JtPgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKCiAgICAkKCcuQ2FuY2VsQ2xvc2VQb3B1cCcpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIHdpbmRvdy5jbG9zZSgpOwogICAgfSk7CgovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBpZD0iTmV3Q29uZGl0aW9uIiBuYW1lPSJOZXdDb25kaXRpb24iIGNsYXNzPSJWYWxpZGF0ZSI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTYXZlIi8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDaGFuZ2VJRCIgdmFsdWU9IlslIERhdGEuQ2hhbmdlSUQgfCBodG1sICVdIi8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDb25kaXRpb25JRCIgdmFsdWU9IlslIERhdGEuQ29uZGl0aW9uSUQgfCBodG1sICVdIi8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJEZWxldGVFeHByZXNzaW9uSUQiIGlkPSJEZWxldGVFeHByZXNzaW9uSUQiIHZhbHVlPSIiLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkRlbGV0ZUFjdGlvbklEIiBpZD0iRGVsZXRlQWN0aW9uSUQiIHZhbHVlPSIiLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFkZEV4cHJlc3Npb24iIGF1dG9jb21wbGV0ZT0ib2ZmIiBpZD0iQWRkRXhwcmVzc2lvbiIgdmFsdWU9IiIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWRkQWN0aW9uIiBhdXRvY29tcGxldGU9Im9mZiIgaWQ9IkFkZEFjdGlvbiIgdmFsdWU9IiIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU2F2ZSIgYXV0b2NvbXBsZXRlPSJvZmYiIGlkPSJTYXZlIiB2YWx1ZT0iIi8+CgogICAgPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICA8aDE+CiAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkVkaXQgQ29uZGl0aW9uIikgfCBodG1sICVdOiBbJSBDb25maWcoIklUU01DaGFuZ2U6Okhvb2siKSAlXTogWyUgRGF0YS5DaGFuZ2VOdW1iZXIgfCBodG1sICVdIFslIERhdGEuQ2hhbmdlVGl0bGUgfCB0cnVuY2F0ZSg3MCkgfCBodG1sICVdCiAgICAgICAgICAgIDwvaDE+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbjtDaGFuZ2VJRD1bJSBEYXRhLkNoYW5nZUlEIHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIkJhY2siKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCIgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJDYW5jZWwgJiBjbG9zZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQ29uZGl0aW9uIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPiogPC9zcGFuPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Ik5hbWUiIG5hbWU9Ik5hbWUiIHZhbHVlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5JbnZhbGlkTmFtZSB8IGh0bWwgJV0gWyUgRGF0YS5EdXBsaWNhdGVOYW1lIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSIyNTAiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIiA+PHA+WyUgVHJhbnNsYXRlKCJOZWVkIGEgdmFsaWQgbmFtZS4iKSB8IGh0bWwgJV08L3A+PC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIkludmFsaWROYW1lIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiQSB2YWxpZCBuYW1lIGlzIG5lZWRlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbnZhbGlkTmFtZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkR1cGxpY2F0ZU5hbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJEdXBsaWNhdGUgbmFtZToiKSB8IGh0bWwgJV0gJ1slIERhdGEuTmFtZSB8IGh0bWwgJV0nLiBbJSBUcmFuc2xhdGUoIlRoaXMgbmFtZSBpcyBhbHJlYWR5IHVzZWQgYnkgYW5vdGhlciBjb25kaXRpb24uIikgfCBodG1sICVdPC9wPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRHVwbGljYXRlTmFtZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJNYXRjaGluZyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iRXhwcmVzc2lvbkNvbmp1bmN0aW9uIiB0eXBlPSJyYWRpbyIgdmFsdWU9ImFueSIgWyUgRGF0YS5hbnlzZWxlY3RlZCAlXSB0aXRsZT0iWyUgVHJhbnNsYXRlKCJBbnkgZXhwcmVzc2lvbiAoT1IpIikgfCBodG1sICVdIi8+IFslIFRyYW5zbGF0ZSgiQW55IGV4cHJlc3Npb24gKE9SKSIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IkV4cHJlc3Npb25Db25qdW5jdGlvbiIgdHlwZT0icmFkaW8iIHZhbHVlPSJhbGwiIFslIERhdGEuYWxsc2VsZWN0ZWQgJV0gdGl0bGU9IlslIFRyYW5zbGF0ZSgiQWxsIGV4cHJlc3Npb25zIChBTkQpIikgfCBodG1sICVdIi8+IFslIFRyYW5zbGF0ZSgiQWxsIGV4cHJlc3Npb25zIChBTkQpIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJWYWxpZElEIj5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsaWRPcHRpb25TdHJpbmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAgZm9yPSJDb21tZW50Ij5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJDb21tZW50IiBuYW1lPSJDb21tZW50IiB2YWx1ZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIiBtYXhsZW5ndGg9IjI1MCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJFeHByZXNzaW9ucyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSBEYXRhVGFibGVOb0hpZ2hsaWdodCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlcxNXBjIj5bJSBUcmFuc2xhdGUoIk9iamVjdCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJXMjBwYyI+WyUgVHJhbnNsYXRlKCJTZWxlY3RvciIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJXMjBwYyI+WyUgVHJhbnNsYXRlKCJBdHRyaWJ1dGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVzIwcGMiPlslIFRyYW5zbGF0ZSgiT3BlcmF0b3IiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVzIwcGMiPlslIFRyYW5zbGF0ZSgiVmFsdWUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVzVwYyI+WyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFeHByZXNzaW9uT3ZlcnZpZXdSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFeHByZXNzaW9uT3ZlcnZpZXdSb3dFbGVtZW50T2JqZWN0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5PYmplY3RPcHRpb25TdHJpbmcgJV08L3RkPgpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgJCgnI1slIERhdGEuT2JqZWN0T3B0aW9uTmFtZSB8IGh0bWwgJV0nKS5iaW5kKCdjaGFuZ2UnLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBDb3JlLkFKQVguRm9ybVVwZGF0ZSgkKCcjTmV3Q29uZGl0aW9uJyksICdBSkFYVXBkYXRlJywgJ1slIERhdGEuSUROYW1lICVdLVslIERhdGEuRXhwcmVzc2lvbklEICVdLU9iamVjdElEJywgWydbJSBEYXRhLklETmFtZSAlXS1bJSBEYXRhLkV4cHJlc3Npb25JRCAlXS1TZWxlY3RvcicsICdbJSBEYXRhLklETmFtZSAlXS1bJSBEYXRhLkV4cHJlc3Npb25JRCAlXS1BdHRyaWJ1dGVJRCcsICdbJSBEYXRhLklETmFtZSAlXS1bJSBEYXRhLkV4cHJlc3Npb25JRCAlXS1PcGVyYXRvcklEJ10pOwogICAgICAgICQodGhpcykucGFyZW50KCkubmV4dCgndGQnKS5maW5kKCdzZWxlY3QnKS5mb2N1cygpOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiRXhwcmVzc2lvbk92ZXJ2aWV3Um93RWxlbWVudE9iamVjdCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFeHByZXNzaW9uT3ZlcnZpZXdSb3dFbGVtZW50U2VsZWN0b3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLlNlbGVjdG9yT3B0aW9uU3RyaW5nICVdPC90ZD4KWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNbJSBEYXRhLk9iamVjdE9wdGlvbk5hbWUgfCBodG1sICVdJykuYmluZCgnY2hhbmdlJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgQ29yZS5BSkFYLkZvcm1VcGRhdGUoJCgnI05ld0NvbmRpdGlvbicpLCAnQUpBWFVwZGF0ZScsICdbJSBEYXRhLklETmFtZSAlXS1bJSBEYXRhLkV4cHJlc3Npb25JRCAlXS1TZWxlY3RvcicsIFsnWyUgRGF0YS5JRE5hbWUgJV0tWyUgRGF0YS5FeHByZXNzaW9uSUQgJV0tQXR0cmlidXRlSUQnLCAnWyUgRGF0YS5JRE5hbWUgJV0tWyUgRGF0YS5FeHByZXNzaW9uSUQgJV0tT3BlcmF0b3JJRCddKTsKICAgICAgICAkKHRoaXMpLnBhcmVudCgpLm5leHQoJ3RkJykuZmluZCgnc2VsZWN0JykuZm9jdXMoKTsKICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkV4cHJlc3Npb25PdmVydmlld1Jvd0VsZW1lbnRTZWxlY3RvciIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFeHByZXNzaW9uT3ZlcnZpZXdSb3dFbGVtZW50QXR0cmlidXRlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5BdHRyaWJ1dGVPcHRpb25TdHJpbmcgJV08L3RkPgpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgJCgnI1slIERhdGEuT2JqZWN0T3B0aW9uTmFtZSB8IGh0bWwgJV0nKS5iaW5kKCdjaGFuZ2UnLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICB2YXIgTm90U2VyaWFsaXplLAogICAgICAgICAgICBGb3JtU2VyaWFsaXplZCwKICAgICAgICAgICAgVVJMU3RyaW5nOwogICAgICAgIENvcmUuQUpBWC5Gb3JtVXBkYXRlKCQoJyNOZXdDb25kaXRpb24nKSwgJ0FKQVhVcGRhdGUnLCAnWyUgRGF0YS5JRE5hbWUgJV0tWyUgRGF0YS5FeHByZXNzaW9uSUQgJV0tQXR0cmlidXRlSUQnLCBbJ1slIERhdGEuSUROYW1lICVdLVslIERhdGEuRXhwcmVzc2lvbklEICVdLU9wZXJhdG9ySUQnXSk7CiAgICAgICAgTm90U2VyaWFsaXplID0gQXJyYXk7CiAgICAgICAgTm90U2VyaWFsaXplLlN1YmFjdGlvbiA9ICdTdWJhY3Rpb24nOwogICAgICAgIEZvcm1TZXJpYWxpemVkID0gQ29yZS5BSkFYLlNlcmlhbGl6ZUZvcm0oJCgnI05ld0NvbmRpdGlvbicpLCBOb3RTZXJpYWxpemUpOwogICAgICAgIFVSTFN0cmluZyA9ICdbJSBFbnYoIkJhc2VsaW5rIikgJV0nICsgRm9ybVNlcmlhbGl6ZWQgKyAnU3ViYWN0aW9uPUFKQVhDb250ZW50VXBkYXRlO1VwZGF0ZURpdk5hbWU9RXhwcmVzc2lvbklELVslIERhdGEuRXhwcmVzc2lvbklEIHwgaHRtbCAlXS1Db21wYXJlVmFsdWUtRGl2O0VsZW1lbnRDaGFuZ2VkPVslIERhdGEuSUROYW1lICVdLVslIERhdGEuRXhwcmVzc2lvbklEIHwgaHRtbCAlXS1BdHRyaWJ1dGVJRCc7CiAgICAgICAgQ29yZS5BSkFYLkNvbnRlbnRVcGRhdGUoJCgnI0V4cHJlc3Npb25JRC1bJSBEYXRhLkV4cHJlc3Npb25JRCB8IGh0bWwgJV0tQ29tcGFyZVZhbHVlLURpdicpLCBVUkxTdHJpbmcsIGZ1bmN0aW9uICgpIHt9KTsKICAgICAgICAkKHRoaXMpLnBhcmVudCgpLm5leHQoJ3RkJykuZmluZCgnc2VsZWN0JykuZm9jdXMoKTsKICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkV4cHJlc3Npb25PdmVydmlld1Jvd0VsZW1lbnRBdHRyaWJ1dGUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFeHByZXNzaW9uT3ZlcnZpZXdSb3dFbGVtZW50T3BlcmF0b3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLk9wZXJhdG9yT3B0aW9uU3RyaW5nICVdPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIkV4cHJlc3Npb25PdmVydmlld1Jvd0VsZW1lbnRPcGVyYXRvciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJFeHByZXNzaW9uSUQtWyUgRGF0YS5FeHByZXNzaW9uSUQgfCBodG1sICVdLUNvbXBhcmVWYWx1ZS1EaXYiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFeHByZXNzaW9uT3ZlcnZpZXdSb3dFbGVtZW50Q29tcGFyZVZhbHVlVGV4dCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkV4cHJlc3Npb25JRC1bJSBEYXRhLkV4cHJlc3Npb25JRCB8IGh0bWwgJV0tQ29tcGFyZVZhbHVlIiBuYW1lPSJFeHByZXNzaW9uSUQtWyUgRGF0YS5FeHByZXNzaW9uSUQgfCBodG1sICVdLUNvbXBhcmVWYWx1ZSIgdmFsdWU9IlslIERhdGEuQ29tcGFyZVZhbHVlIHwgaHRtbCAlXSIgY2xhc3M9IlcxMDBwYyIgbWF4bGVuZ3RoPSIyNTAiIC8+ClslIFJlbmRlckJsb2NrRW5kKCJFeHByZXNzaW9uT3ZlcnZpZXdSb3dFbGVtZW50Q29tcGFyZVZhbHVlVGV4dCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkV4cHJlc3Npb25PdmVydmlld1Jvd0VsZW1lbnRDb21wYXJlVmFsdWVTZWxlY3Rpb24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWx1ZU9wdGlvblN0cmluZyAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiRXhwcmVzc2lvbk92ZXJ2aWV3Um93RWxlbWVudENvbXBhcmVWYWx1ZVNlbGVjdGlvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iRGVsZXRlRXhwcmVzc2lvbiIgaWQ9IkRlbGV0ZUV4cHJlc3Npb25JRC1bJSBEYXRhLkV4cHJlc3Npb25JRCB8IHVyaSAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRGVsZXRlIEV4cHJlc3Npb24iKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXRyYXNoLW8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIkRlbGV0ZSBFeHByZXNzaW9uIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJFeHByZXNzaW9uT3ZlcnZpZXdSb3ciKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRXhwcmVzc2lvbk92ZXJ2aWV3Um93Tm9EYXRhIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gRXhwcmVzc2lvbnMgZm91bmQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJFeHByZXNzaW9uT3ZlcnZpZXdSb3dOb0RhdGEiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXMTAwcGMgUmlnaHQgU3BhY2luZ1RvcFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkFkZCBuZXcgZXhwcmVzc2lvbiIpIHwgaHRtbCAlXSIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiQWRkIG5ldyBleHByZXNzaW9uIikgfCBodG1sICVdIiBuYW1lPSJBZGRFeHByZXNzaW9uQnV0dG9uIiBpZD0iQWRkRXhwcmVzc2lvbkJ1dHRvbiIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gUGx1cyI+PHNwYW4+WyUgVHJhbnNsYXRlKCJBZGQgbmV3IGV4cHJlc3Npb24iKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUgRGF0YVRhYmxlTm9IaWdobGlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJXMTVwYyI+WyUgVHJhbnNsYXRlKCJPYmplY3QiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVzIwcGMiPlslIFRyYW5zbGF0ZSgiU2VsZWN0b3IiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVzIwcGMiPlslIFRyYW5zbGF0ZSgiQXR0cmlidXRlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlcyMHBjIj5bJSBUcmFuc2xhdGUoIk9wZXJhdG9yIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlcyMHBjIj5bJSBUcmFuc2xhdGUoIlZhbHVlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ilc1cGMiPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uT3ZlcnZpZXdSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25PdmVydmlld1Jvd0VsZW1lbnRPYmplY3QiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLk9iamVjdE9wdGlvblN0cmluZyAlXTwvdGQ+ClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcjWyUgRGF0YS5PYmplY3RPcHRpb25OYW1lIHwgaHRtbCAlXScpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuQUpBWC5Gb3JtVXBkYXRlKCQoJyNOZXdDb25kaXRpb24nKSwgJ0FKQVhVcGRhdGUnLCAnWyUgRGF0YS5JRE5hbWUgJV0tWyUgRGF0YS5BY3Rpb25JRCAlXS1PYmplY3RJRCcsIFsnWyUgRGF0YS5JRE5hbWUgJV0tWyUgRGF0YS5BY3Rpb25JRCAlXS1TZWxlY3RvcicsICdbJSBEYXRhLklETmFtZSAlXS1bJSBEYXRhLkFjdGlvbklEICVdLUF0dHJpYnV0ZUlEJywgJ1slIERhdGEuSUROYW1lICVdLVslIERhdGEuQWN0aW9uSUQgJV0tT3BlcmF0b3JJRCddKTsKICAgICAgICAkKHRoaXMpLnBhcmVudCgpLm5leHQoJ3RkJykuZmluZCgnc2VsZWN0JykuZm9jdXMoKTsKICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbk92ZXJ2aWV3Um93RWxlbWVudE9iamVjdCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbk92ZXJ2aWV3Um93RWxlbWVudFNlbGVjdG9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5TZWxlY3Rvck9wdGlvblN0cmluZyAlXTwvdGQ+ClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcjWyUgRGF0YS5PYmplY3RPcHRpb25OYW1lIHwgaHRtbCAlXScpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuQUpBWC5Gb3JtVXBkYXRlKCQoJyNOZXdDb25kaXRpb24nKSwgJ0FKQVhVcGRhdGUnLCAnWyUgRGF0YS5JRE5hbWUgJV0tWyUgRGF0YS5BY3Rpb25JRCAlXS1TZWxlY3RvcicsIFsnWyUgRGF0YS5JRE5hbWUgJV0tWyUgRGF0YS5BY3Rpb25JRCAlXS1BdHRyaWJ1dGVJRCcsICdbJSBEYXRhLklETmFtZSAlXS1bJSBEYXRhLkFjdGlvbklEICVdLU9wZXJhdG9ySUQnXSk7CiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5uZXh0KCd0ZCcpLmZpbmQoJ3NlbGVjdCcpLmZvY3VzKCk7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlld1Jvd0VsZW1lbnRTZWxlY3RvciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbk92ZXJ2aWV3Um93RWxlbWVudEF0dHJpYnV0ZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQXR0cmlidXRlT3B0aW9uU3RyaW5nICVdPC90ZD4KWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNbJSBEYXRhLk9iamVjdE9wdGlvbk5hbWUgfCBodG1sICVdJykuYmluZCgnY2hhbmdlJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgdmFyIE5vdFNlcmlhbGl6ZSwKICAgICAgICAgICAgRm9ybVNlcmlhbGl6ZWQsCiAgICAgICAgICAgIFVSTFN0cmluZzsKICAgICAgICBDb3JlLkFKQVguRm9ybVVwZGF0ZSgkKCcjTmV3Q29uZGl0aW9uJyksICdBSkFYVXBkYXRlJywgJ1slIERhdGEuSUROYW1lICVdLVslIERhdGEuQWN0aW9uSUQgJV0tQXR0cmlidXRlSUQnLCBbJ1slIERhdGEuSUROYW1lICVdLVslIERhdGEuQWN0aW9uSUQgJV0tT3BlcmF0b3JJRCddKTsKICAgICAgICBOb3RTZXJpYWxpemUgPSBBcnJheTsKICAgICAgICBOb3RTZXJpYWxpemUuU3ViYWN0aW9uID0gJ1N1YmFjdGlvbic7CiAgICAgICAgRm9ybVNlcmlhbGl6ZWQgPSBDb3JlLkFKQVguU2VyaWFsaXplRm9ybSgkKCcjTmV3Q29uZGl0aW9uJyksIE5vdFNlcmlhbGl6ZSk7CiAgICAgICAgVVJMU3RyaW5nID0gJ1slIEVudigiQmFzZWxpbmsiKSAlXScgKyBGb3JtU2VyaWFsaXplZCArICdTdWJhY3Rpb249QUpBWENvbnRlbnRVcGRhdGU7VXBkYXRlRGl2TmFtZT1BY3Rpb25JRC1bJSBEYXRhLkFjdGlvbklEIHwgaHRtbCAlXS1BY3Rpb25WYWx1ZS1EaXY7RWxlbWVudENoYW5nZWQ9QWN0aW9uSUQtWyUgRGF0YS5BY3Rpb25JRCB8IGh0bWwgJV0tQXR0cmlidXRlSUQnOwogICAgICAgIENvcmUuQUpBWC5Db250ZW50VXBkYXRlKCQoJyNBY3Rpb25JRC1bJSBEYXRhLkFjdGlvbklEIHwgaHRtbCAlXS1BY3Rpb25WYWx1ZS1EaXYnKSwgVVJMU3RyaW5nLCBmdW5jdGlvbiAoKSB7fSk7CiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5uZXh0KCd0ZCcpLmZpbmQoJ3NlbGVjdCcpLmZvY3VzKCk7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlld1Jvd0VsZW1lbnRBdHRyaWJ1dGUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25PdmVydmlld1Jvd0VsZW1lbnRPcGVyYXRvciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuT3BlcmF0b3JPcHRpb25TdHJpbmcgJV08L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uT3ZlcnZpZXdSb3dFbGVtZW50T3BlcmF0b3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQWN0aW9uSUQtWyUgRGF0YS5BY3Rpb25JRCB8IGh0bWwgJV0tQWN0aW9uVmFsdWUtRGl2Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uT3ZlcnZpZXdSb3dFbGVtZW50QWN0aW9uVmFsdWVUZXh0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iQWN0aW9uSUQtWyUgRGF0YS5BY3Rpb25JRCB8IGh0bWwgJV0tQWN0aW9uVmFsdWUiIG5hbWU9IkFjdGlvbklELVslIERhdGEuQWN0aW9uSUQgfCBodG1sICVdLUFjdGlvblZhbHVlIiB2YWx1ZT0iWyUgRGF0YS5BY3Rpb25WYWx1ZSB8IGh0bWwgJV0iIGNsYXNzPSJXMTAwcGMiIG1heGxlbmd0aD0iMjUwIiAvPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uT3ZlcnZpZXdSb3dFbGVtZW50QWN0aW9uVmFsdWVUZXh0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uT3ZlcnZpZXdSb3dFbGVtZW50QWN0aW9uVmFsdWVTZWxlY3Rpb24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWx1ZU9wdGlvblN0cmluZyAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uT3ZlcnZpZXdSb3dFbGVtZW50QWN0aW9uVmFsdWVTZWxlY3Rpb24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9IkRlbGV0ZUFjdGlvbiIgaWQ9IkRlbGV0ZUFjdGlvbklELVslIERhdGEuQWN0aW9uSUQgfCB1cmkgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkRlbGV0ZSBBY3Rpb24iKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXRyYXNoLW8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIkRlbGV0ZSBBY3Rpb24iKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbk92ZXJ2aWV3Um93IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbk92ZXJ2aWV3Um93Tm9EYXRhIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gQWN0aW9ucyBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbk92ZXJ2aWV3Um93Tm9EYXRhIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iVzEwMHBjIFJpZ2h0IFNwYWNpbmdUb3BTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJBZGQgbmV3IGFjdGlvbiIpIHwgaHRtbCAlXSIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiQWRkIG5ldyBhY3Rpb24iKSB8IGh0bWwgJV0iIG5hbWU9IkFkZEFjdGlvbkJ1dHRvbiIgaWQ9IkFkZEFjdGlvbkJ1dHRvbiIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gUGx1cyI+PHNwYW4+WyUgVHJhbnNsYXRlKCJBZGQgbmV3IGFjdGlvbiIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iRm9vdGVyIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiBhY2Nlc3NrZXk9ImciIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSAoZykiIHR5cGU9InN1Ym1pdCIgbmFtZT0iU2F2ZUJ1dHRvbiIgaWQ9IlNhdmVCdXR0b24iIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2hlY2stc3F1YXJlLW8iPjwvaT4gWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZm9ybT4KWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKCiAgICAkKCcuQ2FuY2VsQ2xvc2VQb3B1cCcpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIHdpbmRvdy5jbG9zZSgpOwogICAgfSk7CgogICAgJCgnI0FkZEFjdGlvbkJ1dHRvbicpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAkKCdpbnB1dFtuYW1lPUFkZEV4cHJlc3Npb25dJykudmFsKCcwJyk7CiAgICAgICAgJCgnaW5wdXRbbmFtZT1BZGRBY3Rpb25dJykudmFsKCcxJyk7CiAgICAgICAgJCgnaW5wdXRbbmFtZT1TYXZlXScpLnZhbCgnMCcpOwogICAgfSk7CgogICAgJCgnI0FkZEV4cHJlc3Npb25CdXR0b24nKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgJCgnaW5wdXRbbmFtZT1BZGRBY3Rpb25dJykudmFsKCcwJyk7CiAgICAgICAgJCgnaW5wdXRbbmFtZT1BZGRFeHByZXNzaW9uXScpLnZhbCgnMScpOwogICAgICAgICQoJ2lucHV0W25hbWU9U2F2ZV0nKS52YWwoJzAnKTsKICAgIH0pOwoKICAgICQoJyNTYXZlQnV0dG9uJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICQoJ2lucHV0W25hbWU9QWRkRXhwcmVzc2lvbl0nKS52YWwoJzAnKTsKICAgICAgICAkKCdpbnB1dFtuYW1lPUFkZEFjdGlvbl0nKS52YWwoJzAnKTsKICAgICAgICAkKCdpbnB1dFtuYW1lPVNhdmVdJykudmFsKCcxJyk7CiAgICB9KTsKCiAgICAkKCcuRGVsZXRlRXhwcmVzc2lvbicpLnVuYmluZCgnY2xpY2suRGVsZXRlRXhwcmVzc2lvbicpLmJpbmQoJ2NsaWNrLkRlbGV0ZUV4cHJlc3Npb24nLCBmdW5jdGlvbihFdmVudCkgewogICAgICAgICQoJyNEZWxldGVFeHByZXNzaW9uSUQnKS52YWwoJCh0aGlzKS5hdHRyKCdpZCcpLnJlcGxhY2UoL0RlbGV0ZUV4cHJlc3Npb25JRC0vLCAnJykpOwogICAgICAgICQodGhpcykuY2xvc2VzdCgnZm9ybScpLnN1Ym1pdCgpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKICAgICQoJy5EZWxldGVBY3Rpb24nKS51bmJpbmQoJ2NsaWNrLkRlbGV0ZUFjdGlvbicpLmJpbmQoJ2NsaWNrLkRlbGV0ZUFjdGlvbicsIGZ1bmN0aW9uKEV2ZW50KSB7CiAgICAgICAgJCgnI0RlbGV0ZUFjdGlvbklEJykudmFsKCQodGhpcykuYXR0cignaWQnKS5yZXBsYWNlKC9EZWxldGVBY3Rpb25JRC0vLCAnJykpOwogICAgICAgICQodGhpcykuY2xvc2VzdCgnZm9ybScpLnN1Ym1pdCgpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIFczMDBweCI+CiAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJUaXRsZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICBbJSBEYXRhLkNoYW5nZVRpdGxlIHwgaHRtbCAlXQogICAgPC9wPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2ZpZWxkc2V0Pgo8cCBjbGFzcz0iU3BhY2luZ1RvcCBDZW50ZXIiPgogICAgWyUgVHJhbnNsYXRlKCJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2hhbmdlPyIpIHwgaHRtbCAlXQo8L3A+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKCJFZGl0ICVzJXMiLCBDb25maWcoIklUU01DaGFuZ2U6Okhvb2siKSwgRGF0YS5DaGFuZ2VOdW1iZXIpIHwgaHRtbCAlXSAmbmRhc2g7IFslIERhdGEuQ2hhbmdlVGl0bGUgfCBodG1sICVdPC9oMT4KICAgICAgICA8cD4KICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiPlslIFRyYW5zbGF0ZSgiQ2FuY2VsICYgY2xvc2UiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgPC9wPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgbmFtZT0iY29tcG9zZSIgaWQ9IkNoYW5nZUVkaXRGb3JtIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iICAgIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTYXZlIi8+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDaGFuZ2VJRCIgIHZhbHVlPSJbJSBEYXRhLkNoYW5nZUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRm9ybUlEIiAgICB2YWx1ZT0iWyUgRGF0YS5Gb3JtSUQgfCBodG1sICVdIi8+CgogICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iQ2hhbmdlVGl0bGUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPiogPC9zcGFuPlslIFRyYW5zbGF0ZSgiVGl0bGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJDaGFuZ2VUaXRsZSIgaWQ9IkNoYW5nZVRpdGxlIiB2YWx1ZT0iWyUgRGF0YS5DaGFuZ2VUaXRsZSB8IGh0bWwgJV0iIGNsYXNzPSJXNzVwYyBWYWxpZGF0ZV9SZXF1aXJlZCBbJSBEYXRhLkNoYW5nZVRpdGxlVGl0bGVTZXJ2ZXJFcnJvciB8IGh0bWwgJV0iIG1heGxlbmd0aD0iMjUwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkNoYW5nZVRpdGxlRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDaGFuZ2VUaXRsZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSaWNoVGV4dCIpICVdClslIEluc2VydFRlbXBsYXRlKCJSaWNoVGV4dEVkaXRvci50dCIpICVdClslIFJlbmRlckJsb2NrRW5kKCJSaWNoVGV4dCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iUmljaFRleHQxIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiBbJSBUcmFuc2xhdGUoIkRlc2NyaXB0aW9uIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0iUmljaFRleHQxIiBjbGFzcz0iUmljaFRleHQgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5EZXNjcmlwdGlvbkludmFsaWQgJV0iIG5hbWU9IkRlc2NyaXB0aW9uIiByb3dzPSIxNSIgY29scz0iWyUgQ29uZmlnKCJUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUiKSAlXSI+WyUgRGF0YS5EZXNjcmlwdGlvbiB8IGh0bWwgJV08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSaWNoVGV4dDFFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJpY2hUZXh0MVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlJpY2hUZXh0MiI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJKdXN0aWZpY2F0aW9uIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0iUmljaFRleHQyIiBjbGFzcz0iUmljaFRleHQgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5KdXN0aWZpY2F0aW9uSW52YWxpZCAlXSIgbmFtZT0iSnVzdGlmaWNhdGlvbiIgcm93cz0iMTUiIGNvbHM9IlslIENvbmZpZygiVGlja2V0OjpGcm9udGVuZDo6VGV4dEFyZWFOb3RlIikgJV0iPlslIERhdGEuSnVzdGlmaWNhdGlvbiB8IGh0bWwgJV08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSaWNoVGV4dDJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJpY2hUZXh0MlNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNhdGVnb3J5SUQiPlslIFRyYW5zbGF0ZSgiQ2F0ZWdvcnkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2F0ZWdvcnlTZWxlY3Rpb25TdHJpbmcgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDYXRlZ29yeUlEU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIklucHV0IGludmFsaWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iSW1wYWN0SUQiPlslIFRyYW5zbGF0ZSgiSW1wYWN0IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkltcGFjdFNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkltcGFjdElEU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIklucHV0IGludmFsaWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUHJpb3JpdHlJRCI+WyUgVHJhbnNsYXRlKCJQcmlvcml0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Qcmlvcml0eVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlByaW9yaXR5SURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW5wdXQgaW52YWxpZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNDYXRlZ29yeUlEJykuYmluZCgnY2hhbmdlJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgQ29yZS5BSkFYLkZvcm1VcGRhdGUoJCgnI0NoYW5nZUVkaXRGb3JtJyksICdBSkFYVXBkYXRlJywgJ0NhdGVnb3J5SUQnLCBbJ0ltcGFjdElEJywgJ1ByaW9yaXR5SUQnXSk7CiAgICB9KTsKICAgICQoJyNJbXBhY3RJRCcpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuQUpBWC5Gb3JtVXBkYXRlKCQoJyNDaGFuZ2VFZGl0Rm9ybScpLCAnQUpBWFVwZGF0ZScsICdJbXBhY3RJRCcsIFsnUHJpb3JpdHlJRCddKTsKICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkIikgJV0KCiMgZXhhbXBsZSBvZiBob3cgdG8gdXNlIGZpeGVkIGR5bmFtaWMgZmllbGQgYmxvY2tzIGZvciBjdXN0b21pemF0aW9ucwojIE5vdGU6IEZpZWxkMSBhbmQgRmllbGQyIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGZpZWxkcyBhbmQgaGFkIHRvIGJlIHJlcGxhY2VkIHdpdGggdGhlIGFjdHVhbAojIGZpZWxkIG5hbWVzCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRfRmllbGQxIikgJV0KIyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiMgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhYmVsICVdCiMgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQojICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiMgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgICAgICAgICAgICAgICAgICAgIDwvZGl2PgojWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZF9GaWVsZDEiKSAlXQojWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkX0ZpZWxkMiIpICVdCiMgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJvdyBSb3dfRHluYW1pY0ZpZWxkX1slIERhdGEuTmFtZSB8IGh0bWwgJV0iPgojICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYWJlbCAlXQojICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgojICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRmllbGQgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgojICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KI1slIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGRfRmllbGQyIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkNoYW5nZVN0YXRlIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDaGFuZ2VTdGF0ZUlEIj5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlN0YXRlU2VsZWN0aW9uU3RyaW5nICVdCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQ2hhbmdlU3RhdGVJRFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJJbnB1dCBpbnZhbGlkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJDaGFuZ2VTdGF0ZSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZXF1ZXN0ZWRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJSZXF1ZXN0ZWQgRGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5SZXF1ZXN0ZWRUaW1lU3RyaW5nICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJlcXVlc3RlZFRpbWVEYXlFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCBkYXRlISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUmVxdWVzdGVkVGltZUhvdXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCBkYXRlISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVxdWVzdGVkVGltZUdlbmVyaWNTZXJ2ZXJFcnJvciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJlcXVlc3RlZFRpbWVEYXlTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCBkYXRlISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUmVxdWVzdGVkVGltZUhvdXJTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCBkYXRlISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlcXVlc3RlZFRpbWVHZW5lcmljU2VydmVyRXJyb3IiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlcXVlc3RlZFRpbWUiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQXR0YWNobWVudFVwbG9hZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQXR0YWNobWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBdHRhY2htZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpbGVuYW1lIHwgaHRtbCAlXSAoWyUgRGF0YS5GaWxlc2l6ZSB8IGh0bWwgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGlkPSJBdHRhY2htZW50RGVsZXRlWyUgRGF0YS5GaWxlSUQgfCBodG1sICVdIiBuYW1lPSJBdHRhY2htZW50RGVsZXRlWyUgRGF0YS5GaWxlSUQgfCBodG1sICVdIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC9idXR0b24+ClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcjQXR0YWNobWVudERlbGV0ZVslIERhdGEuRmlsZUlEIHwgaHRtbCAlXScpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIENvcmUuRm9ybS5WYWxpZGF0ZS5EaXNhYmxlVmFsaWRhdGlvbigkKCcjQXR0YWNobWVudERlbGV0ZVslIERhdGEuRmlsZUlEIHwgaHRtbCAlXScpLmNsb3Nlc3QoJ2Zvcm0nKSk7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQXR0YWNobWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IkZpbGVVcGxvYWQiIGlkPSJGaWxlVXBsb2FkIiB0eXBlPSJmaWxlIiBzaXplPSI0MCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJBdHRhY2htZW50VXBsb2FkIiBuYW1lPSJBdHRhY2htZW50VXBsb2FkIiB2YWx1ZT0iMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNGaWxlVXBsb2FkJykuYmluZCgnY2hhbmdlJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgdmFyICRGb3JtID0gJCgnI0ZpbGVVcGxvYWQnKS5jbG9zZXN0KCdmb3JtJyk7CiAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkRpc2FibGVWYWxpZGF0aW9uKCRGb3JtKTsKICAgICAgICAkRm9ybS5maW5kKCcjQXR0YWNobWVudFVwbG9hZCcpLnZhbCgnMScpLmVuZCgpLnN1Ym1pdCgpOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQoKWyUgUmVuZGVyQmxvY2tFbmQoIkF0dGFjaG1lbnRVcGxvYWQiKSAlXQoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiBpZD0iU3VibWl0Q2hhbmdlRWRpdCIgYWNjZXNza2V5PSJnIiBuYW1lPSJDaGFuZ2VFZGl0IiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV0gKGcpIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNoZWNrLXNxdWFyZS1vIj48L2k+IFslIFRyYW5zbGF0ZSgiU3VibWl0IikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDE+CiAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiSGlzdG9yeSBvZiAlcyVzIiwgQ29uZmlnKCJJVFNNQ2hhbmdlOjpIb29rIiksIERhdGEuQ2hhbmdlTnVtYmVyKSB8IGh0bWwgJV0gJm5kYXNoOyBbJSBEYXRhLkNoYW5nZVRpdGxlIHwgdHJ1bmNhdGUoNjApIHwgaHRtbCAlXQogICAgICAgIDwvaDE+CiAgICAgICAgPHA+CiAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJDYW5jZWxDbG9zZVBvcHVwIj5bJSBUcmFuc2xhdGUoIkNhbmNlbCAmIGNsb3NlIikgfCBodG1sICVdPC9hPgogICAgICAgIDwvcD4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJIaXN0b3J5IENvbnRlbnQiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkFjdGlvbiIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkRldGFpbHMiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiV29ya29yZGVyIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlVzZXIiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ3JlYXRldGltZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5IaXN0b3J5VHlwZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IlslIERhdGEuQ29udGVudCB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ29udGVudCB8IHRydW5jYXRlKDEwMCkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0hpc3Rvcnlab29tIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtClslIFJlbmRlckJsb2NrRW5kKCJOb0hpc3Rvcnlab29tIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2hvd0hpc3Rvcnlab29tIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTVslIERhdGEuWm9vbVR5cGUgJV1IaXN0b3J5Wm9vbTtIaXN0b3J5RW50cnlJRD1bJSBEYXRhLkhpc3RvcnlFbnRyeUlEIHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIlNob3cgZGV0YWlscyIpIHwgaHRtbCAlXTwvYT4KWyUgUmVuZGVyQmxvY2tFbmQoIlNob3dIaXN0b3J5Wm9vbSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb1dvcmtPcmRlclpvb20iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KWyUgUmVuZGVyQmxvY2tFbmQoIk5vV29ya09yZGVyWm9vbSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlNob3dXb3JrT3JkZXJab29tIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlclpvb207V29ya09yZGVySUQ9WyUgRGF0YS5Xb3JrT3JkZXJJRCB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJTaG93IHdvcmtvcmRlciIpIHwgaHRtbCAlXTwvYT4KWyUgUmVuZGVyQmxvY2tFbmQoIlNob3dXb3JrT3JkZXJab29tIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Vc2VyTG9naW4gfCB0cnVuY2F0ZSgyNSkgfCBodG1sICVdIChbJSBEYXRhLlVzZXJGaXJzdG5hbWUgfCBodG1sICVdIFslIERhdGEuVXNlckxhc3RuYW1lIHwgaHRtbCAlXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJSb3ciKSAlXQoKICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkZvb3RlciI+CiAgICA8L2Rpdj4KPC9kaXY+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDE+CiAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiSGlzdG9yeSBvZiAlcyVzIiwgQ29uZmlnKCJJVFNNQ2hhbmdlOjpIb29rIiksIERhdGEuQ2hhbmdlTnVtYmVyKSB8IGh0bWwgJV0gJm5kYXNoOyBbJSBEYXRhLkNoYW5nZVRpdGxlIHwgdHJ1bmNhdGUoNjApIHwgaHRtbCAlXQogICAgICAgIDwvaDE+CiAgICAgICAgPHA+CiAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01DaGFuZ2VIaXN0b3J5O0NoYW5nZUlEPVslIERhdGEuQ2hhbmdlSUQgfCB1cmkgJV0iPlslIFRyYW5zbGF0ZSgiQmFjayIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICA8YSBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCIgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJDYW5jZWwgJiBjbG9zZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICA8L3A+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJEZXRhaWxlZCBoaXN0b3J5IGluZm9ybWF0aW9uIG9mICVzIiwgRGF0YS5IaXN0b3J5VHlwZSkgfCBodG1sICVdPC9oMj4KCiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CgogICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJNb2RpZmllZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkbmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIk9sZCBWYWx1ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkNvbnRlbnRPbGQgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIk5ldyBWYWx1ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkNvbnRlbnROZXcgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgWyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQgYnkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiIHRpdGxlPSJbJSBEYXRhLlVzZXJMb2dpbiB8IGh0bWwgJV0gKFslIERhdGEuVXNlckZpcnN0bmFtZSB8IGh0bWwgJV0gWyUgRGF0YS5Vc2VyTGFzdG5hbWUgfCBodG1sICVdKSI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLlVzZXJMb2dpbiB8IGh0bWwgJV0gKFslIERhdGEuVXNlckZpcnN0bmFtZSB8IGh0bWwgJV0gWyUgRGF0YS5Vc2VyTGFzdG5hbWUgfCBodG1sICVdKQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICA8L2ZpZWxkc2V0PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJGb290ZXIiPgogICAgPC9kaXY+CjwvZGl2Pgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIEluc2VydFRlbXBsYXRlKCJBZ2VudElUU01Vc2VyU2VhcmNoLnR0IikgJV0KWyUgSW5zZXJ0VGVtcGxhdGUoIkFnZW50SVRTTUNBQk1lbWJlclNlYXJjaC50dCIpICVdCgpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwoKICAgICQoJyNDaGFuZ2VNYW5hZ2VyJykuYmluZCgnZm9jdXMnLCBmdW5jdGlvbiggRXZlbnQgKSB7CiAgICAgICAgQ29yZS5Db25maWcuU2V0KCdVc2VyQXV0b2NvbXBsZXRlLkdyb3VwcycsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyk7CiAgICB9KTsKCiAgICAkKCcjQ2hhbmdlQnVpbGRlcicpLmJpbmQoJ2ZvY3VzJywgZnVuY3Rpb24oIEV2ZW50ICkgewogICAgICAgIENvcmUuQ29uZmlnLlNldCgnVXNlckF1dG9jb21wbGV0ZS5Hcm91cHMnLCAnaXRzbS1jaGFuZ2UtYnVpbGRlcicpOwogICAgfSk7CgogICAgJCgnI1N1Ym1pdEJ1dHRvbicpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgJCgnaW5wdXRbbmFtZT1TdWJtaXRdJykudmFsKCcxJyk7CiAgICAgICAgJCgnaW5wdXRbbmFtZT1BZGRDQUJUZW1wbGF0ZV0nKS52YWwoJzAnKTsKICAgICAgICAkKCdpbnB1dFtuYW1lPU5ld1RlbXBsYXRlXScpLnZhbCgnMCcpOwogICAgICAgICQoJ2lucHV0W25hbWU9QWRkQ0FCTWVtYmVyXScpLnZhbCgnMCcpOwogICAgfSk7CgogICAgJCgnI0FkZENBQlRlbXBsYXRlQnV0dG9uJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICB2YXIgJEZvcm0gPSAkKCcjQWRkQ0FCVGVtcGxhdGVCdXR0b24nKS5jbG9zZXN0KCdmb3JtJyk7CiAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkRpc2FibGVWYWxpZGF0aW9uKCRGb3JtKTsKICAgICAgICAkKCdpbnB1dFtuYW1lPVN1Ym1pdF0nKS52YWwoJzAnKTsKICAgICAgICAkKCdpbnB1dFtuYW1lPUFkZENBQlRlbXBsYXRlXScpLnZhbCgnMScpOwogICAgICAgICQoJ2lucHV0W25hbWU9TmV3VGVtcGxhdGVdJykudmFsKCcwJyk7CiAgICAgICAgJCgnaW5wdXRbbmFtZT1BZGRDQUJNZW1iZXJdJykudmFsKCcwJyk7CiAgICB9KTsKCiAgICAkKCcjTmV3VGVtcGxhdGVCdXR0b24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkRm9ybSA9ICQoJyNOZXdUZW1wbGF0ZUJ1dHRvbicpLmNsb3Nlc3QoJ2Zvcm0nKTsKICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuRGlzYWJsZVZhbGlkYXRpb24oJEZvcm0pOwogICAgICAgICQoJ2lucHV0W25hbWU9U3VibWl0XScpLnZhbCgnMCcpOwogICAgICAgICQoJ2lucHV0W25hbWU9QWRkQ0FCVGVtcGxhdGVdJykudmFsKCcwJyk7CiAgICAgICAgJCgnaW5wdXRbbmFtZT1OZXdUZW1wbGF0ZV0nKS52YWwoJzEnKTsKICAgICAgICAkKCdpbnB1dFtuYW1lPUFkZENBQk1lbWJlcl0nKS52YWwoJzAnKTsKICAgIH0pOwoKICAgICQoJyNBZGRDQUJNZW1iZXJCdXR0b24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkRm9ybSA9ICQoJyNBZGRDQUJNZW1iZXJCdXR0b24nKS5jbG9zZXN0KCdmb3JtJyk7CiAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkRpc2FibGVWYWxpZGF0aW9uKCRGb3JtKTsKICAgICAgICAkKCdpbnB1dFtuYW1lPVN1Ym1pdF0nKS52YWwoJzAnKTsKICAgICAgICAkKCdpbnB1dFtuYW1lPUFkZENBQlRlbXBsYXRlXScpLnZhbCgnMCcpOwogICAgICAgICQoJ2lucHV0W25hbWU9TmV3VGVtcGxhdGVdJykudmFsKCcwJyk7CiAgICAgICAgJCgnaW5wdXRbbmFtZT1BZGRDQUJNZW1iZXJdJykudmFsKCcxJyk7CiAgICB9KTsKCi8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQoKCjxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIiBjbGFzcz0iVmFsaWRhdGUiPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIgLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlNhdmUiIC8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDaGFuZ2VJRCIgdmFsdWU9IlslIERhdGEuQ2hhbmdlSUQgfCBodG1sICVdIiAvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VibWl0IiB2YWx1ZT0iIiAvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWRkQ0FCVGVtcGxhdGUiIHZhbHVlPSIiIC8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJOZXdUZW1wbGF0ZSIgdmFsdWU9IiIgLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFkZENBQk1lbWJlciIgdmFsdWU9IiIgLz4KCiAgICA8ZGl2IGNsYXNzPSJMYXlvdXRQb3B1cCBBUklBUm9sZU1haW4iPgogICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgIDxoMSB0aXRsZT0iWyUgVHJhbnNsYXRlKCJFZGl0IEludm9sdmVkIFBlcnNvbnMgb2YgJXMlcyIsIENvbmZpZygiSVRTTUNoYW5nZTo6SG9vayIpLCBEYXRhLkNoYW5nZU51bWJlcikgfCBodG1sICVdICZuZGFzaDsgWyUgRGF0YS5DaGFuZ2VUaXRsZSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJFZGl0IEludm9sdmVkIFBlcnNvbnMgb2YgJXMlcyIsIENvbmZpZygiSVRTTUNoYW5nZTo6SG9vayIpLCBEYXRhLkNoYW5nZU51bWJlcikgfCBodG1sICVdICZuZGFzaDsgWyUgRGF0YS5DaGFuZ2VUaXRsZSB8IHRydW5jYXRlKDcwKSB8IGh0bWwgJV0KICAgICAgICAgICAgPC9oMT4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiPlslIFRyYW5zbGF0ZSgiQ2FuY2VsICYgY2xvc2UiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBTcGFjaW5nQm90dG9tIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiSW52b2x2ZWQgUGVyc29ucyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWwiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJDaGFuZ2VNYW5hZ2VyIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiBbJSBUcmFuc2xhdGUoIkNoYW5nZU1hbmFnZXIiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iQ2hhbmdlTWFuYWdlciIgbmFtZT0iQ2hhbmdlTWFuYWdlciIgdHlwZT0idGV4dCIgdmFsdWU9IlslIERhdGEuQ2hhbmdlTWFuYWdlciB8IGh0bWwgJV0iIGNsYXNzPSJXNzVwYyBWYWxpZGF0ZV9SZXF1aXJlZCBbJSBEYXRhLkNoYW5nZU1hbmFnZXJFcnJvciAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJDaGFuZ2VNYW5hZ2VyU2VsZWN0ZWQiIG5hbWU9IkNoYW5nZU1hbmFnZXJTZWxlY3RlZCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iWyUgRGF0YS5DaGFuZ2VNYW5hZ2VySUQgfCBodG1sICVdIiAvPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkNoYW5nZU1hbmFnZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDaGFuZ2VNYW5hZ2VyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlVzZXIgaW52YWxpZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkNoYW5nZUJ1aWxkZXIiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiQ2hhbmdlQnVpbGRlciIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJDaGFuZ2VCdWlsZGVyIiBuYW1lPSJDaGFuZ2VCdWlsZGVyIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iWyUgRGF0YS5DaGFuZ2VCdWlsZGVyIHwgaHRtbCAlXSIgY2xhc3M9Ilc3NXBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuQ2hhbmdlQnVpbGRlckVycm9yICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9IkNoYW5nZUJ1aWxkZXJTZWxlY3RlZCIgdHlwZT0iaGlkZGVuIiBuYW1lPSJDaGFuZ2VCdWlsZGVyU2VsZWN0ZWQiIHZhbHVlPSJbJSBEYXRhLkNoYW5nZUJ1aWxkZXJJRCB8IGh0bWwgJV0iIC8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQ2hhbmdlQnVpbGRlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkNoYW5nZUJ1aWxkZXJTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVXNlciBpbnZhbGlkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24iIGFjY2Vzc2tleT0iZyIgbmFtZT0iU3VibWl0QnV0dG9uIiBpZD0iU3VibWl0QnV0dG9uIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV0gKGcpIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2hlY2stc3F1YXJlLW8iPjwvaT4gWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQ2hhbmdlIEFkdmlzb3J5IEJvYXJkIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDQUJUZW1wbGF0ZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlRlbXBsYXRlSUQiPiBbJSBUcmFuc2xhdGUoIkNBQiBUZW1wbGF0ZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DQUJUZW1wbGF0ZVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24iIHR5cGU9InN1Ym1pdCIgbmFtZT0iQWRkQ0FCVGVtcGxhdGVCdXR0b24iIGlkPSJBZGRDQUJUZW1wbGF0ZUJ1dHRvbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiQXBwbHkgVGVtcGxhdGUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiQXBwbHkgVGVtcGxhdGUiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5ld1RlbXBsYXRlQnV0dG9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24iIHR5cGU9InN1Ym1pdCIgbmFtZT0iTmV3VGVtcGxhdGVCdXR0b24iIGlkPSJOZXdUZW1wbGF0ZUJ1dHRvbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiTmV3VGVtcGxhdGUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSB0aGlzIENBQiBhcyB0ZW1wbGF0ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5ld1RlbXBsYXRlQnV0dG9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJDQUJUZW1wbGF0ZSIpICVdCgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOZXdDQUJNZW1iZXIiPiBbJSBUcmFuc2xhdGUoIkFkZCB0byBDQUIiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iTmV3Q0FCTWVtYmVyIiBuYW1lPSJOZXdDQUJNZW1iZXIiIHR5cGU9InRleHQiICAgdmFsdWU9IlslIERhdGEuTmV3Q0FCTWVtYmVyIHwgaHRtbCAlXSIgY2xhc3M9Ilc3NXBjIFslIERhdGEuTmV3Q0FCTWVtYmVyRXJyb3IgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9Ik5ld0NBQk1lbWJlclNlbGVjdGVkIiBuYW1lPSJOZXdDQUJNZW1iZXJTZWxlY3RlZCIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iWyUgRGF0YS5OZXdDQUJNZW1iZXJJRCB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9Ik5ld0NBQk1lbWJlclR5cGUiIG5hbWU9Ik5ld0NBQk1lbWJlclR5cGUiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IlslIERhdGEuQ0FCTWVtYmVyVHlwZSB8IGh0bWwgJV0iIC8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmV3Q0FCTWVtYmVyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlVzZXIgaW52YWxpZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiIgdHlwZT0ic3VibWl0IiBpZD0iQWRkQ0FCTWVtYmVyQnV0dG9uIiBuYW1lPSJBZGRDQUJNZW1iZXJCdXR0b24iIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkFkZCIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJBZGQiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVXNlclNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgVXNlciIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJDdXJyZW50IENBQiIpIHwgaHRtbCAlXTo8L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ0FCTWVtYmVyVGFibGUiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTG9naW4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2VudGVyIExhc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIkNBQk1lbWJlclJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5Vc2VyVHlwZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IlslIERhdGEuVXNlckxvZ2luIHwgaHRtbCAlXSAoWyUgRGF0YS5Vc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLlVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Vc2VyTG9naW4gfCB0cnVuY2F0ZSgyNSkgfCBodG1sICVdIChbJSBEYXRhLlVzZXJGaXJzdG5hbWUgfCBodG1sICVdIFslIERhdGEuVXNlckxhc3RuYW1lIHwgaHRtbCAlXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIExhc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iWyUgRGF0YS5JbnRlcm5hbFVzZXJUeXBlICVdWyUgRGF0YS5Vc2VySUQgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV0iIGNsYXNzPSJUcmFzaENhbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CgpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgJCgnI1slIERhdGEuSW50ZXJuYWxVc2VyVHlwZSAlXScgKyBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvciggJ1slIERhdGEuVXNlcklEIHwgaHRtbCAlXScgKSApLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuRGlzYWJsZVZhbGlkYXRpb24oJCh0aGlzKS5jbG9zZXN0KCdmb3JtJykpOwogICAgICAgICQodGhpcykuY2xvc2VzdCgnZm9ybScpLmFwcGVuZCgiPGlucHV0IG5hbWU9XCJEZWxldGVbJSBEYXRhLkludGVybmFsVXNlclR5cGUgJV1bJSBEYXRhLlVzZXJJRCB8IGh0bWwgJV1cIiB0eXBlPVwiaGlkZGVuXCIgdmFsdWU9XCIxXCIvPiIpLmVuZCgpLnN1Ym1pdCgpOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQoKWyUgUmVuZGVyQmxvY2tFbmQoIkNBQk1lbWJlclJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KWyUgUmVuZGVyQmxvY2tFbmQoIkNBQk1lbWJlclRhYmxlIikgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJGb290ZXIiPjwvZGl2PgogICAgPC9kaXY+CjwvZm9ybT4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXIiKSAlXQo8ZGl2IGNsYXNzPSJPdmVydmlld0JveCBBUklBUm9sZU1haW4gWyUgRGF0YS5WaWV3IHwgaHRtbCAlXSI+CiAgICA8aDE+WyUgVHJhbnNsYXRlKERhdGEuVGl0bGVOYW1lKSB8IGh0bWwgJV06IFslIFRyYW5zbGF0ZShEYXRhLlRpdGxlVmFsdWUpIHwgaHRtbCAlXTwvaDE+CgogICAgWyUgRGF0YS5EYXRhSW5UaGVNaWRkbGUgJV0KCiAgICA8ZGl2IGNsYXNzPSJPdmVydmlld0NvbnRyb2wiIGlkPSJPdmVydmlld0NvbnRyb2wiPgogICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhckZpbHRlciIpICVdCiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IlRhYnMiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhckZpbHRlckl0ZW0iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhckZpbHRlckl0ZW1TZWxlY3RlZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJBY3RpdmUgWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5GaWx0ZXJMaW5rICVdRmlsdGVyPVslIERhdGEuRmlsdGVyIHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08c3Bhbj5bJSBEYXRhLkNvdW50IHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWROb3QiKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5GaWx0ZXJMaW5rICVdRmlsdGVyPVslIERhdGEuRmlsdGVyIHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV08c3Bhbj5bJSBEYXRhLkNvdW50IHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkTm90IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU3BsaXQiKSAlXQogICAgICAgICAgICAgICAgICAgIC0KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNwbGl0IikgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbSIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhclBhZ2VCYWNrIikgJV0KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iVGFicyI+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iQ2hhbmdlU2VhcmNoIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtCYWNrICVdIj5bJSBUcmFuc2xhdGUoIkNoYW5nZSBzZWFyY2ggb3B0aW9ucyIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNDaGFuZ2VTZWFyY2gnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIElUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5TZWFyY2guT3BlblNlYXJjaERpYWxvZyggJ0FnZW50SVRTTUNoYW5nZVNlYXJjaCcsICJbJSBEYXRhLlByb2ZpbGUgfCBodG1sICVdIiApOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyUGFnZUJhY2siKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQ29udGV4dFNldHRpbmdzIikgJV0KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQ29udGV4dEZ1bmN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJDb250ZXh0U2V0dGluZ3MiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iU2hvd0NvbnRleHRTZXR0aW5nc0RpYWxvZyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQ29udGV4dCBTZXR0aW5ncyIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtY29nIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoIkNvbnRleHQgU2V0dGluZ3MiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDb250ZXh0U2V0dGluZ3NEaWFsb2dDb250YWluZXIiIGNsYXNzPSJIaWRkZW4iPgogICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBpZD0iQ29udGV4dFNldHRpbmdzRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWdlbnRQcmVmZXJlbmNlcyIvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJVcGRhdGUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iR3JvdXAiIHZhbHVlPSJbJSBEYXRhLkdyb3VwIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJSZWRpcmVjdFVSTCIgdmFsdWU9IlslIERhdGEuUmVxdWVzdGVkVVJMIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLlByZWZlcmVuY2VzS2V5IHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJDaGFuZ2VzIHBlciBwYWdlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5QYWdlU2hvd25TdHJpbmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgIDwvZGl2PgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIC8vIGJpbmQgdGhlIENvbnRleHRTZXR0aW5nc0RpYWxvZ0NvbnRhaW5lcgogICAgJCgnI1Nob3dDb250ZXh0U2V0dGluZ3NEaWFsb2cnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuVUkuRGlhbG9nLlNob3dDb250ZW50RGlhbG9nKCQoJyNDb250ZXh0U2V0dGluZ3NEaWFsb2dDb250YWluZXInKSwgWyUgVHJhbnNsYXRlKCJTZXR0aW5ncyIpIHwgSlNPTiAlXSwgJzIwJScsICdDZW50ZXInLCB0cnVlLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTGFiZWw6IFslIFRyYW5zbGF0ZSgiU3VibWl0IikgfCBKU09OICVdLAogICAgICAgICAgICAgICAgICAgIFR5cGU6ICdTdWJtaXQnLAogICAgICAgICAgICAgICAgICAgIENsYXNzOiAnUHJpbWFyeScKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICk7CiAgICAgICAgRXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICBFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdClslIFJlbmRlckJsb2NrRW5kKCJDb250ZXh0U2V0dGluZ3MiKSAlXQoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJPdmVydmlld0FjdGlvbnMiPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuQWN0aW9uUm93ICVdCiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJPdmVydmlld1pvb20iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhclZpZXdNb2RlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZVNlbGVjdGVkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJBY3RpdmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIG5hbWU9Ik92ZXJ2aWV3Q29udHJvbCIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07RmlsdGVyPVslIERhdGEuRmlsdGVyIHwgdXJpICVdO1ZpZXc9WyUgRGF0YS5WaWV3IHwgdXJpICVdO1slIERhdGEuTGlua0ZpbHRlciAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuTmFtZVNob3J0KSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyVmlld01vZGVTZWxlY3RlZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TmF2QmFyVmlld01vZGVOb3RTZWxlY3RlZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBuYW1lPSJPdmVydmlld0NvbnRyb2wiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO0ZpbHRlcj1bJSBEYXRhLkZpbHRlciB8IHVyaSAlXTtWaWV3PVslIERhdGEuVmlldyB8IHVyaSAlXTtbJSBEYXRhLkxpbmtGaWx0ZXIgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLk5hbWVTaG9ydCkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld05hdkJhclZpZXdNb2RlTm90U2VsZWN0ZWQiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iUGFnaW5hdGlvbiI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TmF2QmFyUGFnZU5hdkJhciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuUmVzdWx0TG9uZyAlXQogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlNpdGVOYXZCYXJMb25nICVdClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld05hdkJhclBhZ2VOYXZCYXIiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhckxlZnQiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiMgc29ydCBvcmRlciBiYXIgaWYgbmVlZGVkCiAgICAgICAgICAgICAgICBbJSBEYXRhLlNvcnRPcmRlckJhciAlXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyIikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIENvcmUuVUkuQWN0aW9uUm93LkluaXQoKTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCgo8ZGl2IGlkPSJPdmVydmlld0JvZHkiIGNsYXNzPSJPdmVydmlldyBUaWNrZXRMaXN0Ij4KICAgIDx0YWJsZSBjbGFzcz0iVGFibGVTbWFsbCIgc3VtbWFyeT0iQSBnZW5lcmljIElUU00gQ2hhbmdlIHRhYmxlIj4KICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgIDx0cj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2hhbmdlU3RhdGVTaWduYWxIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiU3RhdGUiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ2hhbmdlU3RhdGVTaWduYWxIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRXb3JrT3JkZXJTdGF0ZVNpZ25hbEhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+WyUgVHJhbnNsYXRlKCJTdGF0ZSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRXb3JrT3JkZXJTdGF0ZVNpZ25hbEhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENoYW5nZU51bWJlckhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNoYW5nZU51bWJlciBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PUNoYW5nZU51bWJlcjtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgQ29uZmlnKCJJVFNNQ2hhbmdlOjpIb29rIikgJV08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ2hhbmdlTnVtYmVySGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkV29ya09yZGVyTnVtYmVySGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iV29ya09yZGVyTnVtYmVyIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9V29ya09yZGVyTnVtYmVyO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBDb25maWcoIklUU01Xb3JrT3JkZXI6Okhvb2siKSAlXTwvYT4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRXb3JrT3JkZXJOdW1iZXJIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRXb3JrT3JkZXJUaXRsZUhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IldvcmtPcmRlclRpdGxlIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9V29ya09yZGVyVGl0bGU7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnkgfCB1cmkgJV0iPlslIFRyYW5zbGF0ZSgiV29ya29yZGVyIFRpdGxlIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFdvcmtPcmRlclRpdGxlSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2hhbmdlVGl0bGVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDaGFuZ2VUaXRsZSBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PUNoYW5nZVRpdGxlO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIkNoYW5nZSBUaXRsZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VUaXRsZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFdvcmtPcmRlckFnZW50SGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iV29ya09yZGVyQWdlbnRJRCBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PVdvcmtPcmRlckFnZW50SUQ7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnkgfCB1cmkgJV0iPlslIFRyYW5zbGF0ZSgiV29ya29yZGVyIEFnZW50IikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFdvcmtPcmRlckFnZW50SGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2hhbmdlQnVpbGRlckhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNoYW5nZUJ1aWxkZXJJRCBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PUNoYW5nZUJ1aWxkZXJJRDtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJDaGFuZ2UgQnVpbGRlciIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VCdWlsZGVySGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2hhbmdlTWFuYWdlckhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNoYW5nZUJ1aWxkZXJJRCBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PUNoYW5nZU1hbmFnZXJJRDtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJDaGFuZ2UgTWFuYWdlciIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VNYW5hZ2VySGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkV29ya09yZGVyQ291bnRIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoPjxzcGFuPlslIFRyYW5zbGF0ZSgiV29ya29yZGVycyIpIHwgaHRtbCAlXTwvc3Bhbj48L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkV29ya09yZGVyQ291bnRIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VTdGF0ZUhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNoYW5nZVN0YXRlSUQgWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1DaGFuZ2VTdGF0ZUlEO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIkNoYW5nZSBTdGF0ZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VTdGF0ZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFdvcmtPcmRlclN0YXRlSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iV29ya09yZGVyU3RhdGVJRCBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PVdvcmtPcmRlclN0YXRlSUQ7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnkgfCB1cmkgJV0iPlslIFRyYW5zbGF0ZSgiV29ya29yZGVyIFN0YXRlIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFdvcmtPcmRlclN0YXRlSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkV29ya09yZGVyVHlwZUhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IldvcmtPcmRlclR5cGVJRCBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PVdvcmtPcmRlclR5cGVJRDtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJXb3Jrb3JkZXIgVHlwZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRXb3JrT3JkZXJUeXBlSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2F0ZWdvcnlIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDYXRlZ29yeUlEIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9Q2F0ZWdvcnlJRDtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJDYXRlZ29yeSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDYXRlZ29yeUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEltcGFjdEhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkltcGFjdElEIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9SW1wYWN0SUQ7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnkgfCB1cmkgJV0iPlslIFRyYW5zbGF0ZSgiSW1wYWN0IikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZEltcGFjdEhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFByaW9yaXR5SGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iUHJpb3JpdHlJRCBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PVByaW9yaXR5SUQ7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnkgfCB1cmkgJV0iPlslIFRyYW5zbGF0ZSgiUHJpb3JpdHkiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkUHJpb3JpdHlIZWFkZXIiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkU2VydmljZXNIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2VydmljZXMiKSB8IGh0bWwgJV08L3NwYW4+PC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFNlcnZpY2VzSGVhZGVyIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZER5bmFtaWNGaWVsZEhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGg+PHNwYW4+WyUgRGF0YS5MYWJlbCB8IFRyYW5zbGF0ZSB8IGh0bWwgJV08L3NwYW4+PC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZER5bmFtaWNGaWVsZEhlYWRlciIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRSZXF1ZXN0ZWRUaW1lSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iUmVxdWVzdGVkVGltZSBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PVJlcXVlc3RlZFRpbWU7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnkgfCB1cmkgJV0iPlslIFRyYW5zbGF0ZSgiUmVxdWVzdGVkIFRpbWUiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkUmVxdWVzdGVkVGltZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFBsYW5uZWRTdGFydFRpbWVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJQbGFubmVkU3RhcnRUaW1lIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9UGxhbm5lZFN0YXJ0VGltZTtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJQbGFubmVkIFN0YXJ0IFRpbWUiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkUGxhbm5lZFN0YXJ0VGltZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFBsYW5uZWRFbmRUaW1lSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iUGxhbm5lZEVuZFRpbWUgWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1QbGFubmVkRW5kVGltZTtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJQbGFubmVkIEVuZCBUaW1lIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFBsYW5uZWRFbmRUaW1lSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQWN0dWFsU3RhcnRUaW1lSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQWN0dWFsU3RhcnRUaW1lIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9QWN0dWFsU3RhcnRUaW1lO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIkFjdHVhbCBTdGFydCBUaW1lIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZEFjdHVhbFN0YXJ0VGltZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEFjdHVhbEVuZFRpbWVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJBY3R1YWxFbmRUaW1lIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9QWN0dWFsRW5kVGltZTtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJBY3R1YWwgRW5kIFRpbWUiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQWN0dWFsRW5kVGltZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENyZWF0ZVRpbWVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDcmVhdGVUaW1lIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9Q3JlYXRlVGltZTtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENyZWF0ZVRpbWVIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VUaW1lSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2hhbmdlVGltZSBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PUNoYW5nZVRpbWU7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnkgfCB1cmkgJV0iPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VUaW1lSGVhZGVyIikgJV0KICAgICAgICAgICAgPC90cj4KICAgICAgICA8L3RoZWFkPgogICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iWyUgRGF0YS5Ub3RhbENvbHVtbnMgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk5vIGRhdGEgZm91bmQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9EYXRhRm91bmRNc2ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmQiKSAlXQogICAgICAgICAgICA8dHIgY2xhc3M9Ik1hc3RlckFjdGlvbiI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENoYW5nZVN0YXRlU2lnbmFsIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGbGFnIFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ2hhbmdlU3RhdGVTaWduYWwgfCBodG1sICVdIiB0aXRsZT0iWyUgRGF0YS5DaGFuZ2VTdGF0ZSB8IGh0bWwgJV0iPlslIERhdGEuQ2hhbmdlU3RhdGUgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENoYW5nZVN0YXRlU2lnbmFsIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkV29ya09yZGVyU3RhdGVTaWduYWwiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZsYWcgU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5Xb3JrT3JkZXJTdGF0ZVNpZ25hbCB8IGh0bWwgJV0iIHRpdGxlPSJbJSBEYXRhLldvcmtPcmRlclN0YXRlIHwgaHRtbCAlXSI+WyUgRGF0YS5Xb3JrT3JkZXJTdGF0ZSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkV29ya09yZGVyU3RhdGVTaWduYWwiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VOdW1iZXIiKSAlXQogICAgICAgICAgICAgICAgPHRkPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VOdW1iZXJMaW5rU3RhcnQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01DaGFuZ2Vab29tO0NoYW5nZUlEPVslIERhdGEuQ2hhbmdlSUQgfCB1cmkgJV0iIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENoYW5nZU51bWJlckxpbmtTdGFydCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlTnVtYmVyIHwgaHRtbCAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VOdW1iZXJMaW5rRW5kIikgJV0KICAgICAgICAgICAgICAgICAgICA8L2E+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VOdW1iZXJMaW5rRW5kIikgJV0KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VOdW1iZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRXb3JrT3JkZXJOdW1iZXIiKSAlXQogICAgICAgICAgICAgICAgPHRkPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRXb3JrT3JkZXJOdW1iZXJMaW5rU3RhcnQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJab29tO1dvcmtPcmRlcklEPVslIERhdGEuV29ya09yZGVySUQgfCB1cmkgJV0iIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFdvcmtPcmRlck51bWJlckxpbmtTdGFydCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlTnVtYmVyIHwgaHRtbCAlXS1bJSBEYXRhLldvcmtPcmRlck51bWJlciB8IGh0bWwgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkV29ya09yZGVyTnVtYmVyTGlua0VuZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPC9hPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkV29ya09yZGVyTnVtYmVyTGlua0VuZCIpICVdCiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkV29ya09yZGVyTnVtYmVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkV29ya09yZGVyVGl0bGUiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuV29ya09yZGVyVGl0bGUgfCBodG1sICVdIj5bJSBEYXRhLldvcmtPcmRlclRpdGxlIHwgdHJ1bmNhdGUoNDApIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFdvcmtPcmRlclRpdGxlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2hhbmdlVGl0bGUiKSAlXQogICAgICAgICAgICAgICAgPHRkPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VUaXRsZUxpbmtTdGFydCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9WyUgRGF0YS5DaGFuZ2VJRCB8IHVyaSAlXSIgdGl0bGU9IlslIERhdGEuQ2hhbmdlVGl0bGUgfCBodG1sICVdIj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENoYW5nZVRpdGxlTGlua1N0YXJ0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DaGFuZ2VUaXRsZSB8IHRydW5jYXRlKDQwKSB8IGh0bWwgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2hhbmdlVGl0bGVMaW5rRW5kIikgJV0KICAgICAgICAgICAgICAgICAgICA8L2E+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VUaXRsZUxpbmtFbmQiKSAlXQogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENoYW5nZVRpdGxlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkV29ya09yZGVyQWdlbnQiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuV29ya09yZGVyQWdlbnRVc2VyTG9naW4gfCBodG1sICVdIFslIERhdGEuV29ya09yZGVyQWdlbnRMZWZ0UGFyZW50aGVzaXMgfCBodG1sICVdWyUgRGF0YS5Xb3JrT3JkZXJBZ2VudFVzZXJGaXJzdG5hbWUgfCBodG1sICVdIFslIERhdGEuV29ya09yZGVyQWdlbnRVc2VyTGFzdG5hbWUgfCBodG1sICVdWyUgRGF0YS5Xb3JrT3JkZXJBZ2VudFJpZ2h0UGFyZW50aGVzaXMgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Xb3JrT3JkZXJBZ2VudFVzZXJMb2dpbiB8IHRydW5jYXRlKDE1KSB8IGh0bWwgJV0gWyUgRGF0YS5Xb3JrT3JkZXJBZ2VudExlZnRQYXJlbnRoZXNpcyB8IGh0bWwgJV1bJSBEYXRhLldvcmtPcmRlckFnZW50VXNlckZpcnN0bmFtZSB8IHRydW5jYXRlKDE1KSB8IGh0bWwgJV0gWyUgRGF0YS5Xb3JrT3JkZXJBZ2VudFVzZXJMYXN0bmFtZSB8IHRydW5jYXRlKDE1KSB8IGh0bWwgJV1bJSBEYXRhLldvcmtPcmRlckFnZW50UmlnaHRQYXJlbnRoZXNpcyB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRXb3JrT3JkZXJBZ2VudCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENoYW5nZUJ1aWxkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuQ2hhbmdlQnVpbGRlclVzZXJMb2dpbiB8IGh0bWwgJV0gWyUgRGF0YS5DaGFuZ2VCdWlsZGVyTGVmdFBhcmVudGhlc2lzIHwgaHRtbCAlXVslIERhdGEuQ2hhbmdlQnVpbGRlclVzZXJGaXJzdG5hbWUgfCBodG1sICVdIFslIERhdGEuQ2hhbmdlQnVpbGRlclVzZXJMYXN0bmFtZSB8IGh0bWwgJV1bJSBEYXRhLkNoYW5nZUJ1aWxkZXJSaWdodFBhcmVudGhlc2lzIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlQnVpbGRlclVzZXJMb2dpbiB8IHRydW5jYXRlKDE1KSB8IGh0bWwgJV0gWyUgRGF0YS5DaGFuZ2VCdWlsZGVyTGVmdFBhcmVudGhlc2lzIHwgaHRtbCAlXVslIERhdGEuQ2hhbmdlQnVpbGRlclVzZXJGaXJzdG5hbWUgfCB0cnVuY2F0ZSgxNSkgfCBodG1sICVdIFslIERhdGEuQ2hhbmdlQnVpbGRlclVzZXJMYXN0bmFtZSB8IHRydW5jYXRlKDE1KSB8IGh0bWwgJV1bJSBEYXRhLkNoYW5nZUJ1aWxkZXJSaWdodFBhcmVudGhlc2lzIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENoYW5nZUJ1aWxkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VNYW5hZ2VyIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBEYXRhLkNoYW5nZU1hbmFnZXJVc2VyTG9naW4gfCBodG1sICVdIFslIERhdGEuQ2hhbmdlTWFuYWdlckxlZnRQYXJlbnRoZXNpcyB8IGh0bWwgJV1bJSBEYXRhLkNoYW5nZU1hbmFnZXJVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLkNoYW5nZU1hbmFnZXJVc2VyTGFzdG5hbWUgfCBodG1sICVdWyUgRGF0YS5DaGFuZ2VNYW5hZ2VyUmlnaHRQYXJlbnRoZXNpcyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5nZU1hbmFnZXJVc2VyTG9naW4gfCB0cnVuY2F0ZSgxNSkgfCBodG1sICVdIFslIERhdGEuQ2hhbmdlTWFuYWdlckxlZnRQYXJlbnRoZXNpcyB8IGh0bWwgJV1bJSBEYXRhLkNoYW5nZU1hbmFnZXJVc2VyRmlyc3RuYW1lIHwgdHJ1bmNhdGUoMTUpIHwgaHRtbCAlXSBbJSBEYXRhLkNoYW5nZU1hbmFnZXJVc2VyTGFzdG5hbWUgfCB0cnVuY2F0ZSgxNSkgfCBodG1sICVdWyUgRGF0YS5DaGFuZ2VNYW5hZ2VyUmlnaHRQYXJlbnRoZXNpcyB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VNYW5hZ2VyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkV29ya09yZGVyQ291bnQiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNlbnRlciI+WyUgRGF0YS5Xb3JrT3JkZXJDb3VudCB8IGh0bWwgJV08L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRXb3JrT3JkZXJDb3VudCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENoYW5nZVN0YXRlIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIFRyYW5zbGF0ZShEYXRhLkNoYW5nZVN0YXRlKSB8IGh0bWwgJV08L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VTdGF0ZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFdvcmtPcmRlclN0YXRlIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIFRyYW5zbGF0ZShEYXRhLldvcmtPcmRlclN0YXRlKSB8IGh0bWwgJV08L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRXb3JrT3JkZXJTdGF0ZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFdvcmtPcmRlclR5cGUiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXY+WyUgVHJhbnNsYXRlKERhdGEuV29ya09yZGVyVHlwZSkgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkV29ya09yZGVyVHlwZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENhdGVnb3J5IikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIFRyYW5zbGF0ZShEYXRhLkNhdGVnb3J5KSB8IGh0bWwgJV08L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDYXRlZ29yeSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEltcGFjdCIpICVdCiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBUcmFuc2xhdGUoRGF0YS5JbXBhY3QpIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZEltcGFjdCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFByaW9yaXR5IikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIFRyYW5zbGF0ZShEYXRhLlByaW9yaXR5KSB8IGh0bWwgJV08L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRQcmlvcml0eSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFNlcnZpY2VzIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IklUU01GbGFnIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkU2VydmljZXNTdWJFbGVtZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZsYWcgU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ3VySW5jaVNpZ25hbCB8IGh0bWwgJV0iPiJbJSBEYXRhLkN1cnJJbmNpU3RhdGUgfCBodG1sICVdIjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRTZXJ2aWNlc1N1YkVsZW1lbnQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRTZXJ2aWNlc1N1YkVsZW1lbnRFbXB0eSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4mbmJzcDs8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkU2VydmljZXNTdWJFbGVtZW50RW1wdHkiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkU2VydmljZXMiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkRHluYW1pY0ZpZWxkIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZER5bmFtaWNGaWVsZFBsYWluIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsdWUgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZER5bmFtaWNGaWVsZFBsYWluIikgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmREeW5hbWljRmllbGQiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkUmVxdWVzdGVkVGltZSIpICVdCiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBEYXRhLlJlcXVlc3RlZFRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFJlcXVlc3RlZFRpbWUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRQbGFubmVkU3RhcnRUaW1lIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIERhdGEuUGxhbm5lZFN0YXJ0VGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkUGxhbm5lZFN0YXJ0VGltZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFBsYW5uZWRFbmRUaW1lIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIERhdGEuUGxhbm5lZEVuZFRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFBsYW5uZWRFbmRUaW1lIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQWN0dWFsU3RhcnRUaW1lIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIERhdGEuQWN0dWFsU3RhcnRUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRBY3R1YWxTdGFydFRpbWUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRBY3R1YWxFbmRUaW1lIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIERhdGEuQWN0dWFsRW5kVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQWN0dWFsRW5kVGltZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENyZWF0ZVRpbWUiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXY+WyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDcmVhdGVUaW1lIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2hhbmdlVGltZSIpICVdCiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENoYW5nZVRpbWUiKSAlXQogICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkIikgJV0KICAgICAgICA8L3Rib2R5PgogICAgPC90YWJsZT4KPC9kaXY+ClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcuTWFzdGVyQWN0aW9uJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICB2YXIgJE1hc3RlckFjdGlvbkxpbmsgPSAkKHRoaXMpLmZpbmQoJy5NYXN0ZXJBY3Rpb25MaW5rJyk7CiAgICAgICAgLy8gb25seSBhY3QgaWYgdGhlIGxpbmsgd2FzIG5vdCBjbGlja2VkIGRpcmVjdGx5CiAgICAgICAgaWYgKEV2ZW50LnRhcmdldCAhPT0gJE1hc3RlckFjdGlvbkxpbmsuZ2V0KDApKSB7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9ICRNYXN0ZXJBY3Rpb25MaW5rLmF0dHIoJ2hyZWYnKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIFczMDBweCI+CiAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJUaXRsZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICBbJSBEYXRhLkNoYW5nZVRpdGxlIHwgaHRtbCAlXQogICAgPC9wPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2ZpZWxkc2V0Pgo8cCBjbGFzcz0iU3BhY2luZ1RvcCBDZW50ZXIiPgogICAgWyUgVHJhbnNsYXRlKCJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gcmVzZXQgdGhpcyBjaGFuZ2U/IikgfCBodG1sICVdCjwvcD4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlYXJjaEFKQVgiKSAlXQo8ZGl2IGNsYXNzPSJJbm5lckNvbnRlbnQiPgogICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGlkPSJTZWFyY2hGb3JtIj4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIiBpZD0iU2VhcmNoQWN0aW9uIi8+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2VhcmNoIi8+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRW1wdHlTZWFyY2giIHZhbHVlPSJbJSBEYXRhLkVtcHR5U2VhcmNoIHwgaHRtbCAlXSIgaWQ9IkVtcHR5U2VhcmNoIi8+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU2hvd25BdHRyaWJ1dGVzIiB2YWx1ZT0iIiBpZD0iU2hvd25BdHRyaWJ1dGVzIj4KICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgIDxsZWdlbmQ+PHNwYW4+WyUgVHJhbnNsYXRlKCJUZW1wbGF0ZXMiKSB8IGh0bWwgJV08L3NwYW4+PC9sZWdlbmQ+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9IlNlYXJjaFByb2ZpbGUiPlslIFRyYW5zbGF0ZSgiU2VhcmNoIHRlbXBsYXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgIFslIERhdGEuUHJvZmlsZXNTdHJnICVdCiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJTZWFyY2hQcm9maWxlQWRkQmxvY2siPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiBpZD0iU2VhcmNoUHJvZmlsZUFkZE5hbWUiLz4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIiB0eXBlPSJidXR0b24iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkNyZWF0ZSBUZW1wbGF0ZSIpIHwgaHRtbCAlXSIgaWQ9IlNlYXJjaFByb2ZpbGVBZGRBY3Rpb24iPjxzcGFuPlslIFRyYW5zbGF0ZSgiQWRkIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJTZWFyY2hQcm9maWxlTmV3IiBjbGFzcz0iQ2FsbEZvckFjdGlvbiIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiQ3JlYXRlIE5ldyIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJDcmVhdGUgTmV3IikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iU2VhcmNoUHJvZmlsZURlbGV0ZSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gSGlkZGVuIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iU2VhcmNoUHJvZmlsZUFzTGluayIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gSGlkZGVuIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJQcm9maWxlIGxpbmsiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiUHJvZmlsZSBsaW5rIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJTYXZlIGNoYW5nZXMgaW4gdGVtcGxhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJTYXZlUHJvZmlsZSIgaWQ9IlNhdmVQcm9maWxlIiB2YWx1ZT0iMSIvPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIiBpZD0iU2VhcmNoSW5zZXJ0Ij4KICAgICAgICAgICAgPGxlZ2VuZD48c3Bhbj5bJSBUcmFuc2xhdGUoIkZpbHRlcnMgaW4gdXNlIikgfCBodG1sICVdPC9zcGFuPjwvbGVnZW5kPgogICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICA8bGVnZW5kPjxzcGFuPlslIFRyYW5zbGF0ZSgiQWRkaXRpb25hbCBmaWx0ZXJzIikgfCBodG1sICVdPC9zcGFuPjwvbGVnZW5kPgogICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJBZGQgYW5vdGhlciBhdHRyaWJ1dGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgWyUgRGF0YS5BdHRyaWJ1dGVzU3RyZyAlXQogICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFkZEJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiQWRkIGVudHJ5IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtcGx1cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIkFkZCIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIk91dHB1dCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLlJlc3VsdEZvcm1TdHJnICVdCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZmllbGRzZXQ+CiAgICA8L2Zvcm0+CgogICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgSGlkZGVuIiBpZD0iU2VhcmNoQXR0cmlidXRlc0hpZGRlbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IkZ1bGx0ZXh0IiBpZD0iTGFiZWxGdWxsdGV4dCI+WyUgVHJhbnNsYXRlKCJGdWxsdGV4dCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkZ1bGx0ZXh0IiB2YWx1ZT0iWyUgRGF0YS5GdWxsdGV4dCB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIgLz4KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWwgZm9yPSJDaGFuZ2VOdW1iZXIiIGlkPSJMYWJlbENoYW5nZU51bWJlciI+WyUgQ29uZmlnKCJJVFNNQ2hhbmdlOjpIb29rIikgJV0gWyUgVHJhbnNsYXRlKCIoZS5nLiAxMCo1MTU1IG9yIDEwNTY1OCopIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ2hhbmdlTnVtYmVyIiB2YWx1ZT0iWyUgRGF0YS5DaGFuZ2VOdW1iZXIgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiLz4KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IkNoYW5nZVRpdGxlIiBpZD0iTGFiZWxDaGFuZ2VUaXRsZSI+WyUgVHJhbnNsYXRlKCJDaGFuZ2UgVGl0bGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJDaGFuZ2VUaXRsZSIgdmFsdWU9IlslIERhdGEuQ2hhbmdlVGl0bGUgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiLz4KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IldvcmtPcmRlclRpdGxlIiBpZD0iTGFiZWxXb3JrT3JkZXJUaXRsZSI+WyUgVHJhbnNsYXRlKCJXb3Jrb3JkZXIgVGl0bGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJXb3JrT3JkZXJUaXRsZSIgdmFsdWU9IlslIERhdGEuV29ya09yZGVyVGl0bGUgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiLz4KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IkNBQkFnZW50IiBpZD0iTGFiZWxDQUJBZ2VudCI+WyUgVHJhbnNsYXRlKCJDQUIgQWdlbnQiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgiZS5nLiIpIHwgaHRtbCAlXSAyMzQyMzEpOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iQ0FCQWdlbnRTZWxlY3RlZCIgdmFsdWU9IlslIERhdGEuQ0FCQWdlbnQgfCBodG1sICVdIiBuYW1lPSJDQUJBZ2VudCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJDQUJBZ2VudFNlYXJjaCIgdmFsdWU9IlslIERhdGEuQ0FCQWdlbnRTZWFyY2ggfCBodG1sICVdIiBjbGFzcz0iVzUwcGMgSVRTTVVzZXJTZWFyY2giLz4KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IkNBQkN1c3RvbWVyIiBpZD0iTGFiZWxDQUJDdXN0b21lciI+WyUgVHJhbnNsYXRlKCJDQUIgQ3VzdG9tZXIiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgiZS5nLiIpIHwgaHRtbCAlXSBVUzQyMzEpOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iQ0FCQ3VzdG9tZXJTZWxlY3RlZCIgdmFsdWU9IlslIERhdGEuQ0FCQ3VzdG9tZXIgfCBodG1sICVdIiBuYW1lPSJDQUJDdXN0b21lciI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJDQUJDdXN0b21lclNlYXJjaCIgdmFsdWU9IlslIERhdGEuQ0FCQ3VzdG9tZXJTZWFyY2ggfCBodG1sICVdIiBjbGFzcz0iVzUwcGMgSVRTTUN1c3RvbWVyU2VhcmNoIi8+CiAgICAgICAgICAgIDxhIGNsYXNzPSJSZW1vdmVCdXR0b24iIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlJlbW92ZSB0aGlzIGVudHJ5IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtbWludXMtc3F1YXJlLW8iPjwvaT48c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJSZW1vdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWwgZm9yPSJEZXNjcmlwdGlvbiIgaWQ9IkxhYmVsRGVzY3JpcHRpb24iPlslIFRyYW5zbGF0ZSgiSVRTTSBDaGFuZ2UiKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCJEZXNjcmlwdGlvbiIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJlLmcuIikgfCBodG1sICVdICJNYXIqaW4iIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0gIkJhdWUqIik6PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJEZXNjcmlwdGlvbiIgdmFsdWU9IlslIERhdGEuRGVzY3JpcHRpb24gfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiLz4KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9Ikp1c3RpZmljYXRpb24iIGlkPSJMYWJlbEp1c3RpZmljYXRpb24iPlslIFRyYW5zbGF0ZSgiSVRTTSBDaGFuZ2UiKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCJKdXN0aWZpY2F0aW9uIikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoImUuZy4iKSB8IGh0bWwgJV0gIk1hcippbiIgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXSAiQmF1ZSoiKTo8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ikp1c3RpZmljYXRpb24iIHZhbHVlPSJbJSBEYXRhLkp1c3RpZmljYXRpb24gfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiLz4KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IldvcmtPcmRlckluc3RydWN0aW9uIiBpZD0iTGFiZWxXb3JrT3JkZXJJbnN0cnVjdGlvbiI+WyUgVHJhbnNsYXRlKCJJVFNNIFdvcmtvcmRlciBJbnN0cnVjdGlvbiIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJlLmcuIikgfCBodG1sICVdICJNYXIqaW4iIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0gIkJhdWUqIik6PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJXb3JrT3JkZXJJbnN0cnVjdGlvbiIgdmFsdWU9IlslIERhdGEuV29ya09yZGVySW5zdHJ1Y3Rpb24gfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiLz4KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IldvcmtPcmRlclJlcG9ydCIgaWQ9IkxhYmVsV29ya09yZGVyUmVwb3J0Ij5bJSBUcmFuc2xhdGUoIklUU00gV29ya29yZGVyIFJlcG9ydCIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJlLmcuIikgfCBodG1sICVdICJNYXIqaW4iIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0gIkJhdWUqIik6PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJXb3JrT3JkZXJSZXBvcnQiIHZhbHVlPSJbJSBEYXRhLldvcmtPcmRlclJlcG9ydCB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIvPgogICAgICAgICAgICA8YSBjbGFzcz0iUmVtb3ZlQnV0dG9uIiBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJSZW1vdmUgdGhpcyBlbnRyeSIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIFslIERhdGEuTGFiZWwgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIFslIERhdGEuRmllbGQgJV0KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkIikgJV0KCiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IlByaW9yaXR5SURzIiBpZD0iTGFiZWxQcmlvcml0eUlEcyI+WyUgVHJhbnNsYXRlKCJJVFNNIENoYW5nZSBQcmlvcml0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgWyUgRGF0YS5DaGFuZ2VQcmlvcml0eVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICA8YSBjbGFzcz0iUmVtb3ZlQnV0dG9uIiBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJSZW1vdmUgdGhpcyBlbnRyeSIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iSW1wYWN0SURzIiBpZD0iTGFiZWxJbXBhY3RJRHMiPlslIFRyYW5zbGF0ZSgiSVRTTSBDaGFuZ2UgSW1wYWN0IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICBbJSBEYXRhLkNoYW5nZUltcGFjdFNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICA8YSBjbGFzcz0iUmVtb3ZlQnV0dG9uIiBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJSZW1vdmUgdGhpcyBlbnRyeSIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iQ2F0ZWdvcnlJRHMiIGlkPSJMYWJlbENhdGVnb3J5SURzIj5bJSBUcmFuc2xhdGUoIkNoYW5nZSBDYXRlZ29yeSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgWyUgRGF0YS5DaGFuZ2VDYXRlZ29yeVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICA8YSBjbGFzcz0iUmVtb3ZlQnV0dG9uIiBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJSZW1vdmUgdGhpcyBlbnRyeSIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iQ2hhbmdlU3RhdGVJRHMiIGlkPSJMYWJlbENoYW5nZVN0YXRlSURzIj5bJSBUcmFuc2xhdGUoIkNoYW5nZSBTdGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgWyUgRGF0YS5DaGFuZ2VTdGF0ZVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICA8YSBjbGFzcz0iUmVtb3ZlQnV0dG9uIiBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJSZW1vdmUgdGhpcyBlbnRyeSIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iQ2hhbmdlTWFuYWdlcklEcyIgaWQ9IkxhYmVsQ2hhbmdlTWFuYWdlcklEcyI+WyUgVHJhbnNsYXRlKCJDaGFuZ2UgTWFuYWdlciIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgWyUgRGF0YS5DaGFuZ2VNYW5hZ2VyU2VsZWN0aW9uU3RyaW5nICVdCiAgICAgICAgICAgIDxhIGNsYXNzPSJSZW1vdmVCdXR0b24iIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlJlbW92ZSB0aGlzIGVudHJ5IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtbWludXMtc3F1YXJlLW8iPjwvaT48c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJSZW1vdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWwgZm9yPSJDaGFuZ2VCdWlsZGVySURzIiBpZD0iTGFiZWxDaGFuZ2VCdWlsZGVySURzIj5bJSBUcmFuc2xhdGUoIkNoYW5nZSBCdWlsZGVyIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICBbJSBEYXRhLkNoYW5nZUJ1aWxkZXJTZWxlY3Rpb25TdHJpbmcgJV0KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IkNyZWF0ZUJ5IiBpZD0iTGFiZWxDcmVhdGVCeSI+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZUJ5U2VsZWN0aW9uU3RyaW5nICVdCiAgICAgICAgICAgIDxhIGNsYXNzPSJSZW1vdmVCdXR0b24iIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlJlbW92ZSB0aGlzIGVudHJ5IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtbWludXMtc3F1YXJlLW8iPjwvaT48c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJSZW1vdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWwgZm9yPSJXb3JrT3JkZXJTdGF0ZUlEcyIgaWQ9IkxhYmVsV29ya09yZGVyU3RhdGVJRHMiPlslIFRyYW5zbGF0ZSgiV29ya29yZGVyIFN0YXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICBbJSBEYXRhLldvcmtPcmRlclN0YXRlU2VsZWN0aW9uU3RyaW5nICVdCiAgICAgICAgICAgIDxhIGNsYXNzPSJSZW1vdmVCdXR0b24iIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlJlbW92ZSB0aGlzIGVudHJ5IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtbWludXMtc3F1YXJlLW8iPjwvaT48c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJSZW1vdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWwgZm9yPSJXb3JrT3JkZXJUeXBlSURzIiBpZD0iTGFiZWxXb3JrT3JkZXJUeXBlSURzIj5bJSBUcmFuc2xhdGUoIldvcmtvcmRlciBUeXBlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICBbJSBEYXRhLldvcmtPcmRlclR5cGVTZWxlY3Rpb25TdHJpbmcgJV0KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDxsYWJlbCBmb3I9IldvcmtPcmRlckFnZW50SURzIiBpZD0iTGFiZWxXb3JrT3JkZXJBZ2VudElEcyI+WyUgVHJhbnNsYXRlKCJXb3Jrb3JkZXIgQWdlbnQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIFslIERhdGEuV29ya09yZGVyQWdlbnRJRFNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICA8YSBjbGFzcz0iUmVtb3ZlQnV0dG9uIiBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJSZW1vdmUgdGhpcyBlbnRyeSIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlRpbWVTZWxlY3Rpb24iKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLlByZWZpeCAlXVRpbWVQb2ludEZpZWxkIiBpZD0iTGFiZWxbJSBEYXRhLlByZWZpeCAlXVRpbWVQb2ludEZpZWxkIj5bJSBUcmFuc2xhdGUoRGF0YS5UaXRsZSkgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgiKGJlZm9yZS9hZnRlcikiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlslIERhdGEuUHJlZml4ICVdVGltZVNlYXJjaFR5cGUiIHZhbHVlPSJUaW1lUG9pbnQiIFslIERhdGEuaXRlbSgiVGltZVNlYXJjaFR5cGU6OlRpbWVQb2ludCIpICVdLz4KICAgICAgICAgICAgWyUgRGF0YS5UaW1lUG9pbnRTdGFydCAlXSBbJSBEYXRhLlRpbWVQb2ludCAlXSBbJSBEYXRhLlRpbWVQb2ludEZvcm1hdCAlXQogICAgICAgICAgICA8YSBjbGFzcz0iUmVtb3ZlQnV0dG9uIiBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJSZW1vdmUgdGhpcyBlbnRyeSIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiUmVtb3ZlIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5QcmVmaXggJV1UaW1lU2xvdEZpZWxkIiBpZD0iTGFiZWxbJSBEYXRhLlByZWZpeCAlXVRpbWVTbG90RmllbGQiPlslIFRyYW5zbGF0ZShEYXRhLlRpdGxlKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCIoYmV0d2VlbikiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlslIERhdGEuUHJlZml4ICVdVGltZVNlYXJjaFR5cGUiIHZhbHVlPSJUaW1lU2xvdCIgWyUgRGF0YS5pdGVtKCJUaW1lU2VhcmNoVHlwZTo6VGltZVNsb3QiKSAlXS8+CiAgICAgICAgICAgIFslIERhdGEuVGltZVN0YXJ0ICVdIFslIFRyYW5zbGF0ZSgiYW5kIikgfCBodG1sICVdIFslIERhdGEuVGltZVN0b3AgJV0KICAgICAgICAgICAgPGEgY2xhc3M9IlJlbW92ZUJ1dHRvbiIgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiUmVtb3ZlIHRoaXMgZW50cnkiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1taW51cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIlJlbW92ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUaW1lU2VsZWN0aW9uIikgJV0KCiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIFslIERhdGEuQXR0cmlidXRlc09yaWdTdHJnICVdCiAgICA8L2ZpZWxkc2V0Pgo8L2Rpdj4KCjxkaXYgY2xhc3M9IkNvbnRlbnRGb290ZXIgQ2VudGVyIj4KICAgIDxidXR0b24gaWQ9IlNlYXJjaEZvcm1TdWJtaXQiIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24iIHZhbHVlPSJSdW4gc2VhcmNoIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtc2VhcmNoIj48L2k+IFslIFRyYW5zbGF0ZSgiUnVuIHNlYXJjaCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KPC9kaXY+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpewpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZWFyY2hBSkFYU2hvdyIpICVdCiAgICAgICAgSVRTTS5BZ2VudC5DaGFuZ2VNYW5hZ2VtZW50LlNlYXJjaC5TZWFyY2hBdHRyaWJ1dGVBZGQoIlslIERhdGEuQXR0cmlidXRlIHwgaHRtbCAlXSIpOwpbJSBSZW5kZXJCbG9ja0VuZCgiU2VhcmNoQUpBWFNob3ciKSAlXQogICAgICAgIElUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5TZWFyY2guQWRkaXRpb25hbEF0dHJpYnV0ZVNlbGVjdGlvblJlYnVpbGQoKTsKICAgIH0sIDApOwovL11dPjwvc2NyaXB0PgoKWyUgUmVuZGVyQmxvY2tFbmQoIlNlYXJjaEFKQVgiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZWFyY2giKSAlXQoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIElUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5TZWFyY2guT3BlblNlYXJjaERpYWxvZyggJ1slIEVudigiQWN0aW9uIikgJV0nICk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQoKWyUgUmVuZGVyQmxvY2tFbmQoIlNlYXJjaCIpICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIiBpZD0iQ29tcG9zZSIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiAgICAgICB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iICAgIHZhbHVlPSJBZGRUZW1wbGF0ZSI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDaGFuZ2VJRCIgICAgIHZhbHVlPSJbJSBEYXRhLkNoYW5nZUlEIHwgaHRtbCAlXSI+CgogICAgPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKCJTYXZlIENoYW5nZSBhcyBUZW1wbGF0ZSIpIHwgaHRtbCAlXTogWyUgQ29uZmlnKCJJVFNNQ2hhbmdlOjpIb29rIikgJV0gWyUgRGF0YS5DaGFuZ2VOdW1iZXIgJV06IFslIERhdGEuQ2hhbmdlVGl0bGUgfCBodG1sICVdPC9oMT4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCI+WyUgVHJhbnNsYXRlKCJDYW5jZWwgJiBjbG9zZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJUZW1wbGF0ZU5hbWUiPlslIFRyYW5zbGF0ZSgiVGVtcGxhdGUgTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iVGVtcGxhdGVOYW1lIiBuYW1lPSJUZW1wbGF0ZU5hbWUiIHZhbHVlPSJbJSBEYXRhLlRlbXBsYXRlTmFtZSB8IGh0bWwgJV0iIGNsYXNzPSJXNzVwYyBWYWxpZGF0ZV9SZXF1aXJlZCBbJSBEYXRhLlRlbXBsYXRlTmFtZUludmFsaWQgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlRlbXBsYXRlTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSIgPjxwPlslIFRyYW5zbGF0ZSgiQSB0ZW1wbGF0ZSBzaG91bGQgaGF2ZSBhIG5hbWUhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlRlbXBsYXRlTmFtZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGUgdGVtcGxhdGUgbmFtZSBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDb21tZW50Ij5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkNvbW1lbnQiIG5hbWU9IkNvbW1lbnQiIHZhbHVlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIiBjbGFzcz0iVzc1cGMiIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTdGF0ZVJlc2V0Ij5bJSBUcmFuc2xhdGUoIlJlc2V0IFN0YXRlcyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuU3RhdGVSZXNldFNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVyd3JpdGVUZW1wbGF0ZSIpICVdCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJPdmVyd3JpdGVUZW1wbGF0ZSI+WyUgVHJhbnNsYXRlKCJPdmVyd3JpdGUgb3JpZ2luYWwgdGVtcGxhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk92ZXJ3cml0ZVRlbXBsYXRlU2VsZWN0aW9uU3RyaW5nICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ3cml0ZVRlbXBsYXRlIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkRlbGV0ZUNoYW5nZSIpICVdCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJEZWxldGVDaGFuZ2UiPlslIFRyYW5zbGF0ZSgiRGVsZXRlIG9yaWdpbmFsIGNoYW5nZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuRGVsZXRlQ2hhbmdlU2VsZWN0aW9uU3RyaW5nICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkRlbGV0ZUNoYW5nZSIpICVdCgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmFsaWRJRCI+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsaWRTZWxlY3Rpb25TdHJpbmcgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJGb290ZXIiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IENhbGxGb3JBY3Rpb24iIGlkPSJTdWJtaXRBZGRUZW1wbGF0ZSIgYWNjZXNza2V5PSJnIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV0gKGcpIiB0eXBlPSJzdWJtaXQiIG5hbWU9IkFkZFRlbXBsYXRlIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV0iPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1zcXVhcmUtbyI+PC9pPiBbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Zvcm0+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJjb21wb3NlIiBpZD0iTW92ZVRpbWVTbG90Rm9ybSIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiAgICB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIgLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9Ik1vdmVUaW1lU2xvdCIgLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNoYW5nZUlEIiAgdmFsdWU9IlslIERhdGEuQ2hhbmdlSUQgfCBodG1sICVdIiAvPgoKICAgIDxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgPGgxPlslIFRyYW5zbGF0ZSgiTW92ZSBUaW1lIFNsb3QiKSB8IGh0bWwgJV0gWyUgQ29uZmlnKCJJVFNNQ2hhbmdlOjpIb29rIikgJV0gWyUgRGF0YS5DaGFuZ2VOdW1iZXIgJV08L2gxPgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJDYW5jZWxDbG9zZVBvcHVwIiBocmVmPSIjIj5bJSBUcmFuc2xhdGUoIkNhbmNlbCAmIGNsb3NlIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWwiPgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTW92ZVRpbWVUeXBlIj5bJSBUcmFuc2xhdGUoIlRpbWUgdHlwZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuTW92ZVRpbWVUeXBlU2VsZWN0aW9uU3RyaW5nICVdClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcjTW92ZVRpbWVUeXBlJykuYmluZCgnY2hhbmdlJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgQ29yZS5BSkFYLkZvcm1VcGRhdGUoJCgnI01vdmVUaW1lU2xvdEZvcm0nKSwgJ0FKQVhVcGRhdGUnLCAnTW92ZVRpbWVUeXBlJywgWydNb3ZlVGltZU1pbnV0ZScsICdNb3ZlVGltZUhvdXInLCAnTW92ZVRpbWVEYXknLCAnTW92ZVRpbWVNb250aCcsICdNb3ZlVGltZVllYXInXSk7CiAgICAgICAgJCgnI0FKQVhMb2FkZXJNb3ZlVGltZURheSwgI0FKQVhMb2FkZXJNb3ZlVGltZU1vbnRoLCAjQUpBWExvYWRlck1vdmVUaW1lWWVhciwgI0FKQVhMb2FkZXJNb3ZlVGltZUhvdXInKS5yZW1vdmVDbGFzcygnQUpBWExvYWRlcicpOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTmV3IHRpbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk1vdmVUaW1lU2VsZWN0aW9uU3RyaW5nICVdCiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTW92ZVRpbWVEYXlTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiRGF0ZSBpbnZhbGlkISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJNb3ZlVGltZUhvdXJTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiRGF0ZSBpbnZhbGlkISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkZvb3RlciI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkgQ2FsbEZvckFjdGlvbiIgaWQ9IlN1Ym1pdE1vdmVUaW1lU2xvdCIgYWNjZXNza2V5PSJnIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJNb3ZlIikgfCBodG1sICVdIChnKSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJNb3ZlIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1zcXVhcmUtbyI+PC9pPiBbJSBUcmFuc2xhdGUoIk1vdmUiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZm9ybT4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkNoYW5nZVN0YXRlKSB8IGh0bWwgJV0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DaGFuZ2VTdGF0ZVNpZ25hbCB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkNoYW5nZVN0YXRlKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGgxIHRpdGxlPSJbJSBDb25maWcoIklUU01DaGFuZ2U6Okhvb2siKSAlXTogWyUgRGF0YS5DaGFuZ2VOdW1iZXIgfCBodG1sICVdICZuZGFzaDsgWyUgRGF0YS5DaGFuZ2VUaXRsZSB8IGh0bWwgJV0iPgogICAgICAgICAgICBbJSBDb25maWcoIklUU01DaGFuZ2U6Okhvb2siKSAlXTogWyUgRGF0YS5DaGFuZ2VOdW1iZXIgfCBodG1sICVdIDxzcGFuPiZtZGFzaDs8L3NwYW4+IFslIERhdGEuQ2hhbmdlVGl0bGUgfCB0cnVuY2F0ZSg3MCkgfCBodG1sICVdCiAgICAgICAgPC9oMT4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkxheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQiKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkNoYW5nZSBJbmZvcm1hdGlvbiIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTWV0YSIpICVdCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ2hhbmdlIFN0YXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZsYWcgU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJbJSBEYXRhLkNoYW5nZVN0YXRlU2lnbmFsIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuQ2hhbmdlU3RhdGUpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuQ2hhbmdlU3RhdGUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlBsYW5uZWQgU3RhcnQgVGltZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFbXB0eVBsYW5uZWRTdGFydFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSItIj4tPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiRW1wdHlQbGFubmVkU3RhcnRUaW1lIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGxhbm5lZFN0YXJ0VGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgRGF0YS5QbGFubmVkU3RhcnRUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJQbGFubmVkU3RhcnRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiUGxhbm5lZCBFbmQgVGltZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRW1wdHlQbGFubmVkRW5kVGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9Ii0iPi08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJFbXB0eVBsYW5uZWRFbmRUaW1lIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGxhbm5lZEVuZFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuUGxhbm5lZEVuZFRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIlBsYW5uZWRFbmRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQWN0dWFsIFN0YXJ0IFRpbWUiKSB8IGh0bWwgJV06IDwvbGFiZWw+ClslIFJlbmRlckJsb2NrU3RhcnQoIkVtcHR5QWN0dWFsU3RhcnRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iLSI+LTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkVtcHR5QWN0dWFsU3RhcnRUaW1lIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0dWFsU3RhcnRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLkFjdHVhbFN0YXJ0VGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0dWFsU3RhcnRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQWN0dWFsIEVuZCBUaW1lIikgfCBodG1sICVdOiA8L2xhYmVsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFbXB0eUFjdHVhbEVuZFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSItIj4tPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiRW1wdHlBY3R1YWxFbmRUaW1lIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0dWFsRW5kVGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgRGF0YS5BY3R1YWxFbmRUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJBY3R1YWxFbmRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTaG93UmVxdWVzdGVkVGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiUmVxdWVzdGVkIERhdGUiKSB8IGh0bWwgJV06IDwvbGFiZWw+ClslIFJlbmRlckJsb2NrU3RhcnQoIkVtcHR5UmVxdWVzdGVkVGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9Ii0iPi08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJFbXB0eVJlcXVlc3RlZFRpbWUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZXF1ZXN0ZWRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLlJlcXVlc3RlZFRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlcXVlc3RlZFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KWyUgUmVuZGVyQmxvY2tFbmQoIlNob3dSZXF1ZXN0ZWRUaW1lIikgJV0KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2hvd1BsYW5uZWRFZmZvcnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJQbGFubmVkIEVmZm9ydCIpIHwgaHRtbCAlXTogPC9sYWJlbD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRW1wdHlQbGFubmVkRWZmb3J0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iLSI+LTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkVtcHR5UGxhbm5lZEVmZm9ydCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlBsYW5uZWRFZmZvcnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuUGxhbm5lZEVmZm9ydCB8IGh0bWwgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJQbGFubmVkRWZmb3J0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiU2hvd1BsYW5uZWRFZmZvcnQiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU2hvd0FjY291bnRlZFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJBY2NvdW50ZWQgVGltZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRW1wdHlBY2NvdW50ZWRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iLSI+LTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkVtcHR5QWNjb3VudGVkVGltZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFjY291bnRlZFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuQWNjb3VudGVkVGltZSB8IGh0bWwgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJBY2NvdW50ZWRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiU2hvd0FjY291bnRlZFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDYXRlZ29yeSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNhdGVnb3J5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgVHJhbnNsYXRlKERhdGEuQ2F0ZWdvcnkpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQ2F0ZWdvcnkiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiSW1wYWN0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiSW1wYWN0IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgVHJhbnNsYXRlKERhdGEuSW1wYWN0KSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkltcGFjdCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJQcmlvcml0eSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlByaW9yaXR5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgVHJhbnNsYXRlKERhdGEuUHJpb3JpdHkpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUHJpb3JpdHkiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgojIHNob3cgZHluYW1pYyBmaWVsZHMKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwgTmFycm93Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkTGluayIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0iPjxhIGhyZWY9IlslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9IkR5bmFtaWNGaWVsZExpbmsiPlslIERhdGEuVmFsdWUgJV08L2E+PC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkTGluayIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZFBsYWluIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+WyUgRGF0YS5WYWx1ZSAlXTwvc3Bhbj4KWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZFBsYWluIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgojIGV4YW1wbGUgb2YgaG93IHRvIHVzZSBmaXhlZCBkeW5hbWljIGZpZWxkIGJsb2NrcyBmb3IgY3VzdG9taXphdGlvbnMKIyBOb3RlOiBGaWVsZDEgYW5kIEZpZWxkMiBhcmUgdGhlIG5hbWVzIG9mIHRoZSBmaWVsZHMgYW5kIGhhZCB0byBiZSByZXBsYWNlZCB3aXRoIHRoZSBhY3R1YWwKIyBmaWVsZCBuYW1lcwojICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwgTmFycm93Ij4KI1slIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZF9GaWVsZDEiKSAlXQojICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06PC9sYWJlbD4KIyAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRfRmllbGQxX0xpbmsiKSAlXQojICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+PGEgaHJlZj0iWyUgRGF0YS5MaW5rICVdIiB0YXJnZXQ9Il9ibGFuayI+WyUgRGF0YS5WYWx1ZSAlXTwvYT48L3NwYW4+CiNbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkX0ZpZWxkMV9MaW5rIikgJV0KI1slIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZF9GaWVsZDFfUGxhaW4iKSAlXQojICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+WyUgRGF0YS5WYWx1ZSAlXTwvc3Bhbj4KI1slIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGRfRmllbGQxX1BsYWluIikgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KI1slIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGRfRmllbGQxIikgJV0KIyAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KIyAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIE5hcnJvdyI+CiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRfRmllbGQyIikgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOjwvbGFiZWw+CiMgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPgojWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkX0ZpZWxkMl9MaW5rIikgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0iPjxhIGhyZWY9IlslIERhdGEuTGluayAlXSIgdGFyZ2V0PSJfYmxhbmsiPlslIERhdGEuVmFsdWUgJV08L2E+PC9zcGFuPgojWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZF9GaWVsZDJfTGluayIpICVdCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRfRmllbGQyX1BsYWluIikgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0iPlslIERhdGEuVmFsdWUgJV08L3NwYW4+CiNbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkX0ZpZWxkMl9QbGFpbiIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiNbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkX0ZpZWxkMiIpICVdCiMgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNoYW5nZSBJbml0aWF0b3IocykiKSB8IGh0bWwgJV06PC9sYWJlbD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRW1wdHlDaGFuZ2VJbml0aWF0b3JzIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iLSI+LTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkVtcHR5Q2hhbmdlSW5pdGlhdG9ycyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkNoYW5nZUluaXRpYXRvckV4aXN0cyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkNoYW5nZUluaXRpYXRvciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIERhdGEuVXNlckxvZ2luIHwgaHRtbCAlXSAoWyUgRGF0YS5Vc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLlVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVXNlckxvZ2luIHwgdHJ1bmNhdGUoMTUpIHwgaHRtbCAlXSAoWyUgRGF0YS5Vc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLlVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkNoYW5nZUluaXRpYXRvciIpICVdClslIFJlbmRlckJsb2NrRW5kKCJDaGFuZ2VJbml0aWF0b3JFeGlzdHMiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ2hhbmdlIE1hbmFnZXIiKSB8IGh0bWwgJV06PC9sYWJlbD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRW1wdHlDaGFuZ2VNYW5hZ2VyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iLSI+LTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkVtcHR5Q2hhbmdlTWFuYWdlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkNoYW5nZU1hbmFnZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBEYXRhLkNoYW5nZU1hbmFnZXJVc2VyTG9naW4gfCBodG1sICVdIChbJSBEYXRhLkNoYW5nZU1hbmFnZXJVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLkNoYW5nZU1hbmFnZXJVc2VyTGFzdG5hbWUgfCBodG1sICVdKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5nZU1hbmFnZXJVc2VyTG9naW4gfCB0cnVuY2F0ZSgxNSkgfCBodG1sICVdIChbJSBEYXRhLkNoYW5nZU1hbmFnZXJVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLkNoYW5nZU1hbmFnZXJVc2VyTGFzdG5hbWUgfCBodG1sICVdKQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+ClslIFJlbmRlckJsb2NrRW5kKCJDaGFuZ2VNYW5hZ2VyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNoYW5nZSBCdWlsZGVyIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIERhdGEuQ2hhbmdlQnVpbGRlclVzZXJMb2dpbiB8IGh0bWwgJV0gKFslIERhdGEuQ2hhbmdlQnVpbGRlclVzZXJGaXJzdG5hbWUgfCBodG1sICVdIFslIERhdGEuQ2hhbmdlQnVpbGRlclVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlQnVpbGRlclVzZXJMb2dpbiB8IHRydW5jYXRlKDE1KSB8IGh0bWwgJV0gKFslIERhdGEuQ2hhbmdlQnVpbGRlclVzZXJGaXJzdG5hbWUgfCBodG1sICVdIFslIERhdGEuQ2hhbmdlQnVpbGRlclVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNBQiIpIHwgaHRtbCAlXTo8L2xhYmVsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFbXB0eUNBQiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9Ii0iPi08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJFbXB0eUNBQiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkNBQiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkNBQkFnZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iWyUgRGF0YS5DQUJBZ2VudFVzZXJMb2dpbiB8IGh0bWwgJV0gKFslIERhdGEuQ0FCQWdlbnRVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLkNBQkFnZW50VXNlckxhc3RuYW1lIHwgaHRtbCAlXSkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DQUJBZ2VudFVzZXJMb2dpbiB8IHRydW5jYXRlKDE1KSB8IGh0bWwgJV0gKFslIERhdGEuQ0FCQWdlbnRVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLkNBQkFnZW50VXNlckxhc3RuYW1lIHwgaHRtbCAlXSkKICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiQ0FCQWdlbnQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDQUJDdXN0b21lciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIERhdGEuQ0FCQ3VzdG9tZXJVc2VyTG9naW4gfCBodG1sICVdIChbJSBEYXRhLkNBQkN1c3RvbWVyVXNlckZpcnN0bmFtZSB8IGh0bWwgJV0gWyUgRGF0YS5DQUJDdXN0b21lclVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ0FCQ3VzdG9tZXJVc2VyTG9naW4gfCB0cnVuY2F0ZSgxNSkgfCBodG1sICVdIChbJSBEYXRhLkNBQkN1c3RvbWVyVXNlckZpcnN0bmFtZSB8IGh0bWwgJV0gWyUgRGF0YS5DQUJDdXN0b21lclVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkNBQkN1c3RvbWVyIikgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkNBQiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIERhdGEuQ3JlYXRlVGltZSB8IGh0bWwgJV0iPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIERhdGEuQ3JlYXRlVXNlckxvZ2luIHwgaHRtbCAlXSAoWyUgRGF0YS5DcmVhdGVVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLkNyZWF0ZVVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ3JlYXRlVXNlckxvZ2luIHwgdHJ1bmNhdGUoMTUpIHwgaHRtbCAlXSAoWyUgRGF0YS5DcmVhdGVVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLkNyZWF0ZVVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkxhc3QgY2hhbmdlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBEYXRhLkNoYW5nZVRpbWUgfCBodG1sICVdIj5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTGFzdCBjaGFuZ2VkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIERhdGEuQ2hhbmdlVXNlckxvZ2luIHwgaHRtbCAlXSAoWyUgRGF0YS5DaGFuZ2VVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLkNoYW5nZVVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlVXNlckxvZ2luIHwgdHJ1bmNhdGUoMTUpIHwgaHRtbCAlXSAoWyUgRGF0YS5DaGFuZ2VVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLkNoYW5nZVVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiTGlua1RhYmxlU2ltcGxlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MaW5rVGFibGVTdHJnICVdClslIFJlbmRlckJsb2NrRW5kKCJMaW5rVGFibGVTaW1wbGUiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+ClslIFJlbmRlckJsb2NrRW5kKCJNZXRhIikgJV0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJBY3Rpb25Sb3ciPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25zIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTWVudSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk1lbnVJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIiBpZD0iTWVudVslIERhdGEuTWVudUlEIHwgaHRtbCAlXSIgY2xhc3M9IlslIERhdGEuTWVudUNsYXNzIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkRlc2NyaXB0aW9uKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU2hvd0NvbmZpcm1EaWFsb2ciKSAlXQpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwovKmdsb2JhbCBJVFNNOiB0cnVlICovCiAgICBJVFNNLkFnZW50LkNvbmZpcm1EaWFsb2cuQmluZENvbmZpcm1EaWFsb2coewogICAgICAgIEVsZW1lbnRJRDogICAgICAgICAgICAgICAgICAnTWVudVslIERhdGEuTWVudUlEICVdJywKICAgICAgICBFbGVtZW50U2VsZWN0b3I6ICAgICAgICAgICAgJ1slIERhdGEuRWxlbWVudFNlbGVjdG9yIHwgSW50ZXJwb2xhdGUgJV0nLAogICAgICAgIERpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZzogICAnWyUgRGF0YS5EaWFsb2dDb250ZW50UXVlcnlTdHJpbmcgfCBJbnRlcnBvbGF0ZSAlXScsCiAgICAgICAgQ29uZmlybWVkQWN0aW9uUXVlcnlTdHJpbmc6ICdbJSBEYXRhLkNvbmZpcm1lZEFjdGlvblF1ZXJ5U3RyaW5nIHwgSW50ZXJwb2xhdGUgJV0nLAogICAgICAgIERpYWxvZ1RpdGxlOiAgICAgICAgICAgICAgICAnWyUgRGF0YS5EaWFsb2dUaXRsZSB8IEludGVycG9sYXRlICVdJywKICAgICAgICBUcmFuc2xhdGVkVGV4dDogICAgICAgICAgICAgewogICAgICAgICAgICBZZXM6IFslIFRyYW5zbGF0ZSgiWWVzIikgfCBKU09OICVdLAogICAgICAgICAgICBObzogIFslIFRyYW5zbGF0ZSgiTm8iKSB8IEpTT04gJV0sCiAgICAgICAgICAgIE9rOiAgWyUgVHJhbnNsYXRlKCJPayIpIHwgSlNPTiAlXQogICAgICAgIH0KICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlNob3dDb25maXJtRGlhbG9nIikgJV0KClslIFJlbmRlckJsb2NrRW5kKCJNZW51SXRlbSIpICVdClslIFJlbmRlckJsb2NrRW5kKCJNZW51IikgJV0KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiV29ya09yZGVyR3JhcGgiKSAlXQogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgWyUgRGF0YS5Xb3JrT3JkZXJHcmFwaCAlXQogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIldvcmtPcmRlckdyYXBoIikgJV0KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEJveCBTcGFjaW5nVG9wIEV4cGFuZGVkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkxpZ2h0Um93IEhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50LiIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiSVRTTSBDaGFuZ2UiKSB8IGh0bWwgJV0gLSBbJSBEYXRhLkNoYW5nZVRpdGxlIHwgdHJ1bmNhdGUoNzApIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJCcm93c2VyTGlua01lc3NhZ2UiKSAlXQojIFNob3cgaW5mbywgdGhhdCBsaW5rcyB3aXRoaW4gdGhlIGlmcmFtZSBtdXN0IGJlIGNsaWNrZWQgd2l0aCBzdHJnL2NtZC9zaGlmdCAoZGVwZW5kaW5nIG9uIHRoZSB1c2VkIGJyb3dzZXIgYW5kIG9zKQojIHRvIG9wZW4gdGhlIGxpbmtzIGluIGEgbmV3IHdpbmRvdyB3aXRob3V0IHRoZSBzZWN1cml0eSBwZXJtaXNzaW9ucyBnaXZlbiB0byB0aGUgaWZyYW1lCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IklUU01NZXNzYWdlQnJvd3NlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRvIG9wZW4gbGlua3MgaW4gdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiBibG9ja3MsIHlvdSBtaWdodCBuZWVkIHRvIHByZXNzIEN0cmwgb3IgQ21kIG9yIFNoaWZ0IGtleSB3aGlsZSBjbGlja2luZyB0aGUgbGluayAoZGVwZW5kaW5nIG9uIHlvdXIgYnJvd3NlciBhbmQgT1MpLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkNsb3NlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJDbG9zZSB0aGlzIG1lc3NhZ2UiKSB8IGh0bWwgJV0iIGhyZWY9IiMiPjxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJCcm93c2VyTGlua01lc3NhZ2UiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiSVRTTUNvbnRlbnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCBEYXRhLkZpZWxkICkgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgojIFVzZSB0aGUgSFRNTDUgc2FuZGJveCBhdHRyaWJ1dGUgdG8gcHJldmVudCBwbHVnaW5zIGFuZCBzY3JpcHRzIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW4gdGhlIGJyb3dzZXIuCiMgVXNlIElFJ3MgKG5vbi1zdGFuZGFyZCkgc2VjdXJpdHkgYXR0cmlidXRlIHRvIGFjaGlldmUgc29tZXRoaW5nIHNpbWlsYXIgaW4gb2xkZXIgSUUgYnJvd3NlcnMuIEFwcGVuZCBzZXNzaW9uIGluZm8gdG8gVVJMIGJlY2F1c2UgSUUgd2lsbCBub3Qgc2VuZCBjb29raWVzLgojIFNldCAnYWxsb3ctcG9wdXBzJyB0byBhbGxvdyBJRTEwKyB0byBvcGVuIGxpbmtzLiByZWY6IGh0dHA6Ly93d3cudzMub3JnL2h0bWwvd2cvd2lraS9DaGFuZ2VQcm9wb3NhbHMvc2FuZGJveF9hbGxvd19wb3B1cHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZnJhbWUgc2FuZGJveD0iYWxsb3ctc2FtZS1vcmlnaW4gYWxsb3ctcG9wdXBzIGFsbG93LXBvcHVwcy10by1lc2NhcGUtc2FuZGJveCIgWyUgRGF0YS5NU1NlY3VyaXR5UmVzdHJpY3RlZCAlXSBjbGFzcz0iRmllbGQiIGlkPSJJZnJhbWVJVFNNWyUgRGF0YS5GaWVsZCB8IGh0bWwgJV0iIG9ubG9hZD0iaWYgKHR5cGVvZiBJVFNNID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgSVRTTS5BZ2VudCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIElUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIElUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5ab29tID09PSAnb2JqZWN0JykgeyBJVFNNLkFnZW50LkNoYW5nZU1hbmFnZW1lbnQuWm9vbS5JZnJhbWVBdXRvSGVpZ2h0KCQoJyNJZnJhbWVJVFNNWyUgRGF0YS5GaWVsZCB8IGh0bWwgJV0nKSk7IH07IiBzcmM9IiMiIGRhdGEtc3JjPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRJVFNNQ2hhbmdlWm9vbTtTdWJhY3Rpb249SFRNTFZpZXc7Q2hhbmdlSUQ9WyUgRGF0YS5DaGFuZ2VJRCB8IGh0bWwgJV07RmllbGQ9WyUgRGF0YS5GaWVsZCB8IGh0bWwgJV07WyUgRW52KCJTZXNzaW9uTmFtZSIpIHwgaHRtbCAlXT1bJSBFbnYoIlNlc3Npb25JRCIpIHwgaHRtbCAlXSI+PC9pZnJhbWU+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCgogICAgQ29yZS5Db25maWcuU2V0KCdJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHREZWZhdWx0JywgcGFyc2VJbnQoIlslIENvbmZpZygiSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SFRNTEZpZWxkSGVpZ2h0RGVmYXVsdCIpICVdIiB8fCAwLCAxMCkpOwogICAgQ29yZS5Db25maWcuU2V0KCdJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHRNYXgnLCBwYXJzZUludCgiWyUgQ29uZmlnKCJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHRNYXgiKSAlXSIgfHwgMCwgMTApKTsKCiAgICAvLyBjb3B5IGRhdGEtc3JjIGF0dHJpYnV0ZSB0byBzcmMgYXR0cmlidXRlIGZvciBhbGwgaWZyYW1lcyB0byBjb3JyZWN0bHkgZGlzcGxheSBpdHMgY29udGVudHMgYWZ0ZXIgSlMgaXMgZnVsbHkgbG9hZGVkCiAgICAkKCdpZnJhbWUnKS5lYWNoKGZ1bmN0aW9uKCl7CiAgICAgICAgJCh0aGlzKS5hdHRyKCJzcmMiLCAkKHRoaXMpLmF0dHIoImRhdGEtc3JjIikgKTsKICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIklUU01Db250ZW50IikgJV0KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkF0dGFjaG1lbnQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBdHRhY2htZW50Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJEb3dubG9hZEF0dGFjaG1lbnQiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkRvd25sb2FkIEF0dGFjaG1lbnQiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1Eb3dubG9hZEF0dGFjaG1lbnQ7RmlsZW5hbWU9WyUgRGF0YS5GaWxlbmFtZSB8IHVyaSAlXTtDaGFuZ2VJRD1bJSBEYXRhLkNoYW5nZUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWxlbmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBbJSBEYXRhLkZpbGVzaXplIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz4KWyUgUmVuZGVyQmxvY2tFbmQoIkF0dGFjaG1lbnRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJMaW5rVGFibGVDb21wbGV4IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkxpbmtUYWJsZVN0cmcgJV0KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJMaW5rVGFibGVDb21wbGV4IikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCd1bC5BY3Rpb25zIGEuQXNQb3B1cCcpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICBDb3JlLlVJLlBvcHVwLk9wZW5Qb3B1cCAoJCh0aGlzKS5hdHRyKCdocmVmJyksICdBY3Rpb24nKTsKICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKICAgICQoJ3VsLkFjdGlvbnMgYS5IaXN0b3J5QmFjaycpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgaGlzdG9yeS5iYWNrKCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7CgogICAgLy8gSW5pdGlhbGl6ZSBhbGxvY2F0aW9uIGxpc3QgZm9yIGxpbmsgb2JqZWN0IHRhYmxlLgogICAgQ29yZS5BZ2VudC5UYWJsZUZpbHRlcnMuU2V0QWxsb2NhdGlvbkxpc3QoKTsKCi8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIFczMDBweCI+CiAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgIDwvcD4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXQogICAgPC9wPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgWyUgRGF0YS5Db21tZW50IHwgdHJ1bmNhdGUoNDApIHwgaHRtbCAlXQogICAgPC9wPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2ZpZWxkc2V0Pgo8cCBjbGFzcz0iU3BhY2luZ1RvcCBDZW50ZXIiPgogICAgWyUgVHJhbnNsYXRlKCJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgdGVtcGxhdGU/IikgfCBodG1sICVdCjwvcD4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIiBpZD0iQ29tcG9zZSIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiAgICAgICB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iICAgIHZhbHVlPSJVcGRhdGVUZW1wbGF0ZSI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJUZW1wbGF0ZUlEIiAgIHZhbHVlPSJbJSBEYXRhLlRlbXBsYXRlSUQgfCBodG1sICVdIj4KCiAgICA8ZGl2IGNsYXNzPSJMYXlvdXRQb3B1cCBBUklBUm9sZU1haW4iPgogICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgIDxoMT5bJSBUcmFuc2xhdGUoIkVkaXQiKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgiVGVtcGxhdGUiKSB8IGh0bWwgJV06IFslIERhdGEuTmFtZSB8IGh0bWwgJV08L2gxPgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJDYW5jZWxDbG9zZVBvcHVwIj5bJSBUcmFuc2xhdGUoIkNhbmNlbCAmIGNsb3NlIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsIj4KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlRlbXBsYXRlTmFtZSI+WyUgVHJhbnNsYXRlKCJUZW1wbGF0ZSBOYW1lIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJUZW1wbGF0ZU5hbWUiIG5hbWU9IlRlbXBsYXRlTmFtZSIgdmFsdWU9IlslIERhdGEuVGVtcGxhdGVOYW1lIHwgaHRtbCAlXSIgY2xhc3M9Ilc3NXBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuVGVtcGxhdGVOYW1lSW52YWxpZCB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVGVtcGxhdGVOYW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIiA+PHA+WyUgVHJhbnNsYXRlKCJBIHRlbXBsYXRlIHNob3VsZCBoYXZlIGEgbmFtZSEiKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVGVtcGxhdGVOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoZSB0ZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNvbW1lbnQiPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iQ29tbWVudCIgbmFtZT0iQ29tbWVudCIgdmFsdWU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iIGNsYXNzPSJXNzVwYyIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlZhbGlkSUQiPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlZhbGlkU2VsZWN0aW9uU3RyaW5nICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iRm9vdGVyIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0ic3VibWl0RWRpdFRlbXBsYXRlIiBhY2Nlc3NrZXk9ImciIHR5cGU9InN1Ym1pdCIgbmFtZT0iRWRpdFRlbXBsYXRlIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9mb3JtPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIEluc2VydFRlbXBsYXRlKCJBZ2VudElUU01DQUJNZW1iZXJTZWFyY2gudHQiKSAlXQoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNBZGRDQUJNZW1iZXInKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkRm9ybSA9ICQoJyNBZGRDQUJNZW1iZXInKS5jbG9zZXN0KCdmb3JtJyk7CiAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkRpc2FibGVWYWxpZGF0aW9uKCRGb3JtKTsKICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KCjxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIiBjbGFzcz0iVmFsaWRhdGUiPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiAgICAgICAgICAgIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIiAvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiAgICAgICAgIHZhbHVlPSJTYXZlIiAvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iVGVtcGxhdGVJRCIgICAgICAgIHZhbHVlPSJbJSBEYXRhLlRlbXBsYXRlSUQgfCBodG1sICVdIiAvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iVGVtcGxhdGVDb250ZW50IiAgIHZhbHVlPSJbJSBEYXRhLlRlbXBsYXRlQ29udGVudCB8IGh0bWwgJV0iIC8+CgogICAgPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICA8aDEgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRWRpdCBDQUIgVGVtcGxhdGUiKSB8IGh0bWwgJV0gLSBbJSBEYXRhLk5hbWUgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiRWRpdCBDQUIgVGVtcGxhdGUiKSB8IGh0bWwgJV0gLSBbJSBEYXRhLk5hbWUgfCBodG1sICVdCiAgICAgICAgICAgIDwvaDE+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJDYW5jZWxDbG9zZVBvcHVwIj5bJSBUcmFuc2xhdGUoIkNhbmNlbCAmIGNsb3NlIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgU3BhY2luZ0JvdHRvbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkNoYW5nZSBBZHZpc29yeSBCb2FyZCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWwiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTmV3Q0FCTWVtYmVyIj4gWyUgVHJhbnNsYXRlKCJBZGQgdG8gQ0FCIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9Ik5ld0NBQk1lbWJlciIgbmFtZT0iTmV3Q0FCTWVtYmVyIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iWyUgRGF0YS5OZXdDQUJNZW1iZXIgfCBodG1sICVdIiBjbGFzcz0iVzc1cGMgWyUgRGF0YS5OZXdDQUJNZW1iZXJFcnJvciAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iTmV3Q0FCTWVtYmVyU2VsZWN0ZWQiIG5hbWU9Ik5ld0NBQk1lbWJlclNlbGVjdGVkIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJbJSBEYXRhLk5ld0NBQk1lbWJlcklEIHwgaHRtbCAlXSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iTmV3Q0FCTWVtYmVyVHlwZSIgbmFtZT0iTmV3Q0FCTWVtYmVyVHlwZSIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iWyUgRGF0YS5DQUJNZW1iZXJUeXBlIHwgaHRtbCAlXSIgLz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOZXdDQUJNZW1iZXJTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVXNlciBpbnZhbGlkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiIGlkPSJBZGRDQUJNZW1iZXIiIG5hbWU9IkFkZENBQk1lbWJlciIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiQWRkIikgfCBodG1sICVdIj48c3Bhbj5bJSBUcmFuc2xhdGUoIkFkZCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJVc2VyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCBVc2VyIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkN1cnJlbnQgQ0FCIikgfCBodG1sICVdOjwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDQUJNZW1iZXJUYWJsZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJMb2dpbiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIkNBQk1lbWJlclJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5Vc2VyVHlwZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IlslIERhdGEuVXNlckxvZ2luIHwgaHRtbCAlXSAoWyUgRGF0YS5Vc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLlVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Vc2VyTG9naW4gfCB0cnVuY2F0ZSgyNSkgfCBodG1sICVdIChbJSBEYXRhLlVzZXJGaXJzdG5hbWUgfCBodG1sICVdIFslIERhdGEuVXNlckxhc3RuYW1lIHwgaHRtbCAlXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIExhc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iWyUgRGF0YS5JbnRlcm5hbFVzZXJUeXBlICVdWyUgRGF0YS5Vc2VySUQgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV0iIGNsYXNzPSJUcmFzaENhbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CgpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwokKCcjWyUgRGF0YS5JbnRlcm5hbFVzZXJUeXBlICVdWyUgRGF0YS5Vc2VySUQgfCBodG1sICVdJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbigpewogICAgJCh0aGlzKS5jbG9zZXN0KCdmb3JtJykuYXBwZW5kKCI8aW5wdXQgbmFtZT1cIkRlbGV0ZVslIERhdGEuSW50ZXJuYWxVc2VyVHlwZSAlXVslIERhdGEuVXNlcklEIHwgaHRtbCAlXVwiIHR5cGU9XCJoaWRkZW5cIiB2YWx1ZT1cIjFcIi8+IikuZW5kKCkuc3VibWl0KCk7Cn0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KClslIFJlbmRlckJsb2NrRW5kKCJDQUJNZW1iZXJSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+ClslIFJlbmRlckJsb2NrRW5kKCJDQUJNZW1iZXJUYWJsZSIpICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AgU3BhY2luZ0JvdHRvbSBTcGFjaW5nTGVmdCI+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiIE5hbWU9IlN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkZvb3RlciI+PC9kaXY+CiAgICA8L2Rpdj4KPC9mb3JtPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIkVkaXRDb250ZW50RGlhbG9nIikgJV0KPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgVzMwMHB4Ij4KICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIk5hbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgPC9wPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdCiAgICA8L3A+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICBbJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSg0MCkgfCBodG1sICVdCiAgICA8L3A+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZmllbGRzZXQ+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDaGFuZ2VUZW1wbGF0ZSIpICVdCjxwIGNsYXNzPSJTcGFjaW5nVG9wIj4KICAgIFslIFRyYW5zbGF0ZSgiVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBjaGFuZ2UgZnJvbSB0aGlzIHRlbXBsYXRlLCBzbyB5b3UgY2FuIGVkaXQgYW5kIHNhdmUgaXQuIikgfCBodG1sICVdPGJyLz4KICAgIFslIFRyYW5zbGF0ZSgiVGhlIG5ldyBjaGFuZ2Ugd2lsbCBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgaXQgaGFzIGJlZW4gc2F2ZWQgYXMgdGVtcGxhdGUuIikgfCBodG1sICVdCjwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkNoYW5nZVRlbXBsYXRlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiV29ya09yZGVyVGVtcGxhdGUiKSAlXQo8cCBjbGFzcz0iU3BhY2luZ1RvcCI+CiAgICBbJSBUcmFuc2xhdGUoIlRoaXMgd2lsbCBjcmVhdGUgYSBuZXcgd29ya29yZGVyIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0LiIpIHwgaHRtbCAlXTxici8+CiAgICBbJSBUcmFuc2xhdGUoIkEgdGVtcG9yYXJ5IGNoYW5nZSB3aWxsIGJlIGNyZWF0ZWQgd2hpY2ggY29udGFpbnMgdGhlIHdvcmtvcmRlci4iKSB8IGh0bWwgJV08YnIvPgogICAgWyUgVHJhbnNsYXRlKCJUaGUgdGVtcG9yYXJ5IGNoYW5nZSBhbmQgbmV3IHdvcmtvcmRlciB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciB0aGUgd29ya29yZGVyIGhhcyBiZWVuIHNhdmVkIGFzIHRlbXBsYXRlLiIpIHwgaHRtbCAlXTxici8+CjwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIldvcmtPcmRlclRlbXBsYXRlIikgJV0KCjxwIGNsYXNzPSJTcGFjaW5nVG9wIENlbnRlciI+CiAgICBbJSBUcmFuc2xhdGUoIkRvIHlvdSB3YW50IHRvIHByb2NlZWQ/IikgfCBodG1sICVdCjwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkVkaXRDb250ZW50RGlhbG9nIikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TmF2QmFyIikgJV0KPGRpdiBjbGFzcz0iT3ZlcnZpZXdCb3ggQVJJQVJvbGVNYWluIj4KICAgIDxoMT5bJSBUcmFuc2xhdGUoRGF0YS5UaXRsZU5hbWUpIHwgaHRtbCAlXTogWyUgVHJhbnNsYXRlKERhdGEuVGl0bGVWYWx1ZSkgfCBodG1sICVdPC9oMT4KClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TmF2QmFyTWFpbiIpICVdCgogICAgPGgxPlslIFRyYW5zbGF0ZShEYXRhLk1haW5OYW1lKSB8IGh0bWwgJV06IFslIERhdGEuTWFpbkNvbnRlbnQgJV08L2gxPgoKWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyTWFpbiIpICVdCgogICAgPGRpdiBjbGFzcz0iT3ZlcnZpZXdDb250cm9sIiBpZD0iT3ZlcnZpZXdDb250cm9sIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250cm9sUm93Ij4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkZpbHRlciIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJBY3Rpb25Sb3ciPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iT3ZlcnZpZXdBY3Rpb25zIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXIiKSAlXQogICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9ucyI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJBY3Rpb25GaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBuYW1lPSJPdmVydmlld0NvbnRyb2wiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuRmlsdGVyTGluayAlXUZpbHRlcj1bJSBEYXRhLkZpbHRlciB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIChbJSBEYXRhLkNvdW50IHwgaHRtbCAlXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWROb3QiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IkFjdGlvbkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5hbWU9Ik92ZXJ2aWV3Q29udHJvbCIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5GaWx0ZXJMaW5rICVdRmlsdGVyPVslIERhdGEuRmlsdGVyIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV0gKFslIERhdGEuQ291bnQgfCBodG1sICVdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWROb3QiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICA8L3VsPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdOYXZCYXJGaWx0ZXIiKSAlXQogICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iT3ZlcnZpZXdab29tIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TmF2QmFyVmlld01vZGVTZWxlY3RlZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iQWN0aXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBuYW1lPSJPdmVydmlld0NvbnRyb2wiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO0ZpbHRlcj1bJSBEYXRhLkZpbHRlciB8IHVyaSAlXTtWaWV3PVslIERhdGEuVmlldyB8IHVyaSAlXTtbJSBEYXRhLkxpbmtGaWx0ZXIgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5OYW1lKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLk5hbWVTaG9ydCkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld05hdkJhclZpZXdNb2RlU2VsZWN0ZWQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhclZpZXdNb2RlTm90U2VsZWN0ZWQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgbmFtZT0iT3ZlcnZpZXdDb250cm9sIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtGaWx0ZXI9WyUgRGF0YS5GaWx0ZXIgfCB1cmkgJV07Vmlldz1bJSBEYXRhLlZpZXcgfCB1cmkgJV07WyUgRGF0YS5MaW5rRmlsdGVyICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5OYW1lU2hvcnQpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZU5vdFNlbGVjdGVkIikgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyVmlld01vZGUiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlBhZ2luYXRpb24iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld05hdkJhclBhZ2VOYXZCYXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlJlc3VsdExvbmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TaXRlTmF2QmFyTG9uZyAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdOYXZCYXJQYWdlTmF2QmFyIikgJV0KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXJMZWZ0Ij48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TmF2QmFyIikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgaWQ9Ik92ZXJ2aWV3Qm9keSIgY2xhc3M9Ik92ZXJ2aWV3IFRpY2tldExpc3QiPgogICAgPHRhYmxlIGNsYXNzPSJUYWJsZVNtYWxsIj4KICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgIDx0cj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkVGVtcGxhdGVJREhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGg+PHNwYW4+WyUgVHJhbnNsYXRlKCJUZW1wbGF0ZSBJRCIpIHwgaHRtbCAlXTwvc3Bhbj48L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkVGVtcGxhdGVJREhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZE5hbWVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJOYW1lIFslIERhdGEuU29ydE5hbWUgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICA8YSBuYW1lPSJPdmVydmlld0NvbnRyb2wiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PU5hbWU7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnlOYW1lIHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIk5hbWUiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkTmFtZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFR5cGVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJUeXBlIFslIERhdGEuU29ydFRlbXBsYXRlVHlwZUlEIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgbmFtZT0iT3ZlcnZpZXdDb250cm9sIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1UZW1wbGF0ZVR5cGVJRDtPcmRlckJ5PVslIERhdGEuT3JkZXJCeVRlbXBsYXRlVHlwZUlEIHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkVHlwZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENvbW1lbnRIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoPjxzcGFuPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTwvc3Bhbj48L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ29tbWVudEhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFZhbGlkSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iVmFsaWRJRCBbJSBEYXRhLlNvcnRWYWxpZElEIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgbmFtZT0iT3ZlcnZpZXdDb250cm9sIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1WYWxpZElEO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5VmFsaWRJRCB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRWYWxpZEhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEVkaXRDb250ZW50SGVhZGVyIikgJV0KICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2VudGVyIExhc3QiPjxzcGFuPlslIFRyYW5zbGF0ZSgiRWRpdCBDb250ZW50IikgfCBodG1sICVdPC9zcGFuPjwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRFZGl0Q29udGVudEhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZERlbGV0ZUhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNlbnRlciBMYXN0Ij48c3Bhbj5bJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkRGVsZXRlSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ3JlYXRlQnlIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoPjxzcGFuPlslIFRyYW5zbGF0ZSgiQ3JlYXRlIGJ5IikgfCBodG1sICVdPC9zcGFuPjwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDcmVhdGVCeUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENyZWF0ZVRpbWVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDcmVhdGVUaW1lIFslIERhdGEuU29ydENyZWF0ZVRpbWUgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICA8YSBuYW1lPSJPdmVydmlld0NvbnRyb2wiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PUNyZWF0ZVRpbWU7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnlDcmVhdGVUaW1lIHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIkNyZWF0ZSBUaW1lIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENyZWF0ZVRpbWVIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VCeUhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGg+PHNwYW4+WyUgVHJhbnNsYXRlKCJDaGFuZ2UgYnkiKSB8IGh0bWwgJV08L3NwYW4+PC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENoYW5nZUJ5SGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2hhbmdlVGltZUhlYWRlciIpICVdCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNoYW5nZVRpbWUgWyUgRGF0YS5Tb3J0Q2hhbmdlVGltZSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIDxhIG5hbWU9Ik92ZXJ2aWV3Q29udHJvbCIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9Q2hhbmdlVGltZTtPcmRlckJ5PVslIERhdGEuT3JkZXJCeUNoYW5nZVRpbWUgfCB1cmkgJV0iPlslIFRyYW5zbGF0ZSgiQ2hhbmdlIFRpbWUiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ2hhbmdlVGltZUhlYWRlciIpICVdCiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90aGVhZD4KICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IlslIERhdGEuVG90YWxDb2x1bW5zIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJObyBkYXRhIGZvdW5kLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vRGF0YUZvdW5kTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkIikgJV0KICAgICAgICAgICAgPHRyIFslIElGIERhdGEuVmFsaWRJRCAhPSAxICVdY2xhc3M9IkludmFsaWQiWyUgRU5EICVdIGlkPSJUZW1wbGF0ZUlEX1slIERhdGEuVGVtcGxhdGVJRCB8IGh0bWwgJV0iPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRUZW1wbGF0ZUlEIikgJV0KICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5UZW1wbGF0ZUlEKSB8IGh0bWwgJV08L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkVGVtcGxhdGVJRCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZE5hbWUiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01UZW1wbGF0ZUVkaXQ7VGVtcGxhdGVJRD1bJSBEYXRhLlRlbXBsYXRlSUQgfCB1cmkgJV0iIHRpdGxlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIChJRD1bJSBEYXRhLlRlbXBsYXRlSUQgfCBodG1sICVdKSIgY2xhc3M9IkFzQmxvY2sgQXNQb3B1cCI+WyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmROYW1lIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkVHlwZSIpICVdCiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdIChJRD1bJSBEYXRhLlR5cGVJRCB8IGh0bWwgJV0pIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkVHlwZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENvbW1lbnQiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ29tbWVudCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFZhbGlkIikgJV0KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5WYWxpZCkgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuVmFsaWQpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFZhbGlkIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEVkaXRDb250ZW50IikgJV0KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iQ2VudGVyIExhc3QiPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSIiIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkVkaXQgQ29udGVudCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGlkPSJFZGl0Q29udGVudFRlbXBsYXRlSURbJSBEYXRhLlRlbXBsYXRlSUQgfCBodG1sICVdIiBjbGFzcz0iZmEgZmEtcGVuY2lsIj48L2k+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBUcmFuc2xhdGUoIkVkaXQgQ29udGVudCIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L3RkPgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKLypnbG9iYWwgSVRTTTogdHJ1ZSAqLwogICAgSVRTTS5BZ2VudC5Db25maXJtRGlhbG9nLkJpbmRDb25maXJtRGlhbG9nKHsKICAgICAgICBFbGVtZW50SUQ6ICAgICAgICAgICAgICAgICAgJ0VkaXRDb250ZW50VGVtcGxhdGVJRFslIERhdGEuVGVtcGxhdGVJRCB8IGh0bWwgJV0nLAogICAgICAgIEVsZW1lbnRTZWxlY3RvcjogICAgICAgICAgICAnI0VkaXRDb250ZW50VGVtcGxhdGVJRFslIERhdGEuVGVtcGxhdGVJRCB8IGh0bWwgJV0nLAogICAgICAgIERpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZzogICAnQWN0aW9uPUFnZW50SVRTTVRlbXBsYXRlRWRpdENvbnRlbnQ7U3ViYWN0aW9uPVRlbXBsYXRlRWRpdENvbnRlbnRTaG93RGlhbG9nO1RlbXBsYXRlSUQ9WyUgRGF0YS5UZW1wbGF0ZUlEIHwgdXJpICVdJywKICAgICAgICBDb25maXJtZWRBY3Rpb25RdWVyeVN0cmluZzogJ0FjdGlvbj1BZ2VudElUU01UZW1wbGF0ZUVkaXRDb250ZW50O1N1YmFjdGlvbj1UZW1wbGF0ZUVkaXRDb250ZW50O1RlbXBsYXRlSUQ9WyUgRGF0YS5UZW1wbGF0ZUlEIHwgdXJpICVdJywKICAgICAgICBEaWFsb2dUaXRsZTogICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJFZGl0IFRlbXBsYXRlIENvbnRlbnQiKSB8IEpTT04gJV0sCiAgICAgICAgVHJhbnNsYXRlZFRleHQ6ICAgICAgICAgICAgIHsKICAgICAgICAgICAgWWVzOiBbJSBUcmFuc2xhdGUoIlllcyIpIHwgSlNPTiAlXSwKICAgICAgICAgICAgTm86ICBbJSBUcmFuc2xhdGUoIk5vIikgfCBKU09OICVdCiAgICAgICAgfQogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkRWRpdENvbnRlbnQiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkRWRpdENvbnRlbnRDQUIiKSAlXQogICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDZW50ZXIiPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01UZW1wbGF0ZUVkaXRDQUI7VGVtcGxhdGVJRD1bJSBEYXRhLlRlbXBsYXRlSUQgfCB1cmkgJV0iIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkVkaXQgQ29udGVudCIpIHwgaHRtbCAlXSIgY2xhc3M9IkFzQmxvY2sgQXNQb3B1cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1wZW5jaWwiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgiRWRpdCBDb250ZW50IikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRFZGl0Q29udGVudENBQiIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmREZWxldGUiKSAlXQogICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDZW50ZXIgTGFzdCI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGkgaWQ9IkRlbGV0ZVRlbXBsYXRlSURbJSBEYXRhLlRlbXBsYXRlSUQgfCBodG1sICVdIiBjbGFzcz0iZmEgZmEtdHJhc2gtbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iSW52aXNpYmxlVGV4dCI+WyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvaT4KICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L3RkPgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKLypnbG9iYWwgSVRTTTogdHJ1ZSAqLwogICAgSVRTTS5BZ2VudC5Db25maXJtRGlhbG9nLkJpbmRDb25maXJtRGlhbG9nKHsKICAgICAgICBFbGVtZW50SUQ6ICAgICAgICAgICAgICAgICAgJ0RlbGV0ZVRlbXBsYXRlSURbJSBEYXRhLlRlbXBsYXRlSUQgfCBodG1sICVdJywKICAgICAgICBFbGVtZW50U2VsZWN0b3I6ICAgICAgICAgICAgJyNEZWxldGVUZW1wbGF0ZUlEWyUgRGF0YS5UZW1wbGF0ZUlEIHwgaHRtbCAlXScsCiAgICAgICAgRGlhbG9nQ29udGVudFF1ZXJ5U3RyaW5nOiAgICdBY3Rpb249QWdlbnRJVFNNVGVtcGxhdGVEZWxldGU7VGVtcGxhdGVJRD1bJSBEYXRhLlRlbXBsYXRlSUQgfCB1cmkgJV0nLAogICAgICAgIENvbmZpcm1lZEFjdGlvblF1ZXJ5U3RyaW5nOiAnQWN0aW9uPUFnZW50SVRTTVRlbXBsYXRlRGVsZXRlO1N1YmFjdGlvbj1UZW1wbGF0ZURlbGV0ZTtUZW1wbGF0ZUlEPVslIERhdGEuVGVtcGxhdGVJRCB8IHVyaSAlXScsCiAgICAgICAgRGlhbG9nVGl0bGU6ICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiRGVsZXRlIFRlbXBsYXRlIikgfCBKU09OICVdLAogICAgICAgIFRyYW5zbGF0ZWRUZXh0OiAgICAgICAgICAgICB7CiAgICAgICAgICAgIFllczogWyUgVHJhbnNsYXRlKCJZZXMiKSB8IEpTT04gJV0sCiAgICAgICAgICAgIE5vOiAgWyUgVHJhbnNsYXRlKCJObyIpIHwgSlNPTiAlXQogICAgICAgIH0KICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmREZWxldGUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDcmVhdGVCeSIpICVdCiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgRGF0YS5DcmVhdGVCeVVzZXJMb2dpbiB8IGh0bWwgJV0gWyUgRGF0YS5DcmVhdGVCeUxlZnRQYXJlbnRoZXNpcyB8IGh0bWwgJV1bJSBEYXRhLkNyZWF0ZUJ5VXNlckZpcnN0bmFtZSB8IGh0bWwgJV0gWyUgRGF0YS5DcmVhdGVCeVVzZXJMYXN0bmFtZSB8IGh0bWwgJV1bJSBEYXRhLkNyZWF0ZUJ5UmlnaHRQYXJlbnRoZXNpcyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZUJ5VXNlckxvZ2luIHwgdHJ1bmNhdGUoMTUpIHwgaHRtbCAlXSBbJSBEYXRhLkNyZWF0ZUJ5TGVmdFBhcmVudGhlc2lzIHwgaHRtbCAlXVslIERhdGEuQ3JlYXRlQnlVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLkNyZWF0ZUJ5VXNlckxhc3RuYW1lIHwgaHRtbCAlXVslIERhdGEuQ3JlYXRlQnlSaWdodFBhcmVudGhlc2lzIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENyZWF0ZUJ5IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ3JlYXRlVGltZSIpICVdCiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgRGF0YS5DcmVhdGVUaW1lIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ3JlYXRlVGltZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDcmVhdGVUaW1lIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2hhbmdlQnkiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuQ2hhbmdlQnlVc2VyTG9naW4gfCBodG1sICVdIFslIERhdGEuQ2hhbmdlQnlMZWZ0UGFyZW50aGVzaXMgfCBodG1sICVdWyUgRGF0YS5DaGFuZ2VCeVVzZXJGaXJzdG5hbWUgfCBodG1sICVdIFslIERhdGEuQ2hhbmdlQnlVc2VyTGFzdG5hbWUgfCBodG1sICVdWyUgRGF0YS5DaGFuZ2VCeVJpZ2h0UGFyZW50aGVzaXMgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DaGFuZ2VCeVVzZXJMb2dpbiB8IHRydW5jYXRlKDE1KSB8IGh0bWwgJV0gWyUgRGF0YS5DaGFuZ2VCeUxlZnRQYXJlbnRoZXNpcyB8IGh0bWwgJV1bJSBEYXRhLkNoYW5nZUJ5VXNlckZpcnN0bmFtZSB8IGh0bWwgJV0gWyUgRGF0YS5DaGFuZ2VCeVVzZXJMYXN0bmFtZSB8IGh0bWwgJV1bJSBEYXRhLkNoYW5nZUJ5UmlnaHRQYXJlbnRoZXNpcyB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VCeSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENoYW5nZVRpbWUiKSAlXQogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuQ2hhbmdlVGltZSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5nZVRpbWUgfCB0cnVuY2F0ZSg0MCkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ2hhbmdlVGltZSIpICVdCiAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmQiKSAlXQogICAgICAgIDwvdGJvZHk+CiAgICA8L3RhYmxlPgo8L2Rpdj4KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCd0Ym9keSB0ciB0ZCBhLkFzUG9wdXAnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuVUkuUG9wdXAuT3BlblBvcHVwKCQodGhpcykuYXR0cignaHJlZicpLCAnQWN0aW9uJyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIlVzZXJTZWFyY2hJbml0IikgJV0KWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKLypnbG9iYWwgSVRTTTogdHJ1ZSAqLwogICAgSVRTTS5BZ2VudC5Vc2VyU2VhcmNoLkluaXQoICQoIiMiICsgQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoIlslIERhdGEuSXRlbUlEIHwgaHRtbCAlXSIpICkgKTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdClslIFJlbmRlckJsb2NrRW5kKCJVc2VyU2VhcmNoSW5pdCIpICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKCJBZGQgV29ya29yZGVyIHRvICVzJXMiLCBDb25maWcoIklUU01DaGFuZ2U6Okhvb2siKSwgRGF0YS5DaGFuZ2VOdW1iZXIpIHwgaHRtbCAlXSAmbmRhc2g7IFslIERhdGEuQ2hhbmdlVGl0bGUgfCBodG1sICVdPC9oMT4KICAgICAgICA8cD4KICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiPlslIFRyYW5zbGF0ZSgiQ2FuY2VsICYgY2xvc2UiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgPC9wPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJXb3Jrb3JkZXIiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIG5hbWU9ImNvbXBvc2UiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iICAgIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2F2ZSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNoYW5nZUlEIiAgdmFsdWU9IlslIERhdGEuQ2hhbmdlSUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRm9ybUlEIiAgICB2YWx1ZT0iWyUgRGF0YS5Gb3JtSUQgfCBodG1sICVdIi8+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJXb3JrT3JkZXJUaXRsZSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+KiA8L3NwYW4+WyUgVHJhbnNsYXRlKCJUaXRsZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iV29ya09yZGVyVGl0bGUiIGlkPSJXb3JrT3JkZXJUaXRsZSIgdmFsdWU9IlslIERhdGEuV29ya09yZGVyVGl0bGUgfCBodG1sICVdIiBjbGFzcz0iVzc1cGMgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5Xb3JrT3JkZXJUaXRsZVNlcnZlckVycm9yIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSIyNTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IldvcmtPcmRlclRpdGxlRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iV29ya09yZGVyVGl0bGVTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSaWNoVGV4dCIpICVdClslIEluc2VydFRlbXBsYXRlKCJSaWNoVGV4dEVkaXRvci50dCIpICVdClslIFJlbmRlckJsb2NrRW5kKCJSaWNoVGV4dCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlJpY2hUZXh0Ij48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiBbJSBUcmFuc2xhdGUoIkluc3RydWN0aW9uIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJpY2hUZXh0RmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJSaWNoVGV4dCIgY2xhc3M9IlJpY2hUZXh0IFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuSW5zdHJ1Y3Rpb25JbnZhbGlkICVdIiBuYW1lPSJJbnN0cnVjdGlvbiIgcm93cz0iMTUiIGNvbHM9IlslIENvbmZpZygiVGlja2V0OjpGcm9udGVuZDo6VGV4dEFyZWFOb3RlIikgJV0iPlslIERhdGEuSW5zdHJ1Y3Rpb24gfCBodG1sICVdPC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJpY2hUZXh0RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUmljaFRleHRTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJXb3JrT3JkZXJUeXBlSUQiPlslIFRyYW5zbGF0ZSgiV29ya29yZGVyIFR5cGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Xb3JrT3JkZXJUeXBlU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iV29ya09yZGVyVHlwZUlEU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgd29ya29yZGVyIHR5cGUuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSb3cgUm93X0R5bmFtaWNGaWVsZF9bJSBEYXRhLk5hbWUgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGQiKSAlXQoKIyBleGFtcGxlIG9mIGhvdyB0byB1c2UgZml4ZWQgZHluYW1pYyBmaWVsZCBibG9ja3MgZm9yIGN1c3RvbWl6YXRpb25zCiMgTm90ZTogRmllbGQxIGFuZCBGaWVsZDIgYXJlIHRoZSBuYW1lcyBvZiB0aGUgZmllbGRzIGFuZCBoYWQgdG8gYmUgcmVwbGFjZWQgd2l0aCB0aGUgYWN0dWFsCiMgZmllbGQgbmFtZXMKI1slIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZF9GaWVsZDEiKSAlXQojICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYWJlbCAlXQojICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQojICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgojICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgojWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZF9GaWVsZDEiKSAlXQojWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkX0ZpZWxkMiIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSb3cgUm93X0R5bmFtaWNGaWVsZF9bJSBEYXRhLk5hbWUgfCBodG1sICVdIj4KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhYmVsICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiNbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkX0ZpZWxkMiIpICVdCgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJQbGFubmVkIFN0YXJ0IFRpbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5QbGFubmVkU3RhcnRUaW1lU2VsZWN0aW9uU3RyaW5nICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQbGFubmVkU3RhcnRUaW1lRGF5RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgZGF0ZSEiKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQbGFubmVkU3RhcnRUaW1lSG91ckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJJbnZhbGlkIGRhdGUhIikgfCBodG1sICVdPC9wPjwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJQbGFubmVkU3RhcnRUaW1lR2VuZXJpY1NlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlBsYW5uZWRTdGFydFRpbWVEYXlTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCBkYXRlISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlBsYW5uZWRTdGFydFRpbWVIb3VyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgZGF0ZSEiKSB8IGh0bWwgJV08L3A+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJQbGFubmVkU3RhcnRUaW1lR2VuZXJpY1NlcnZlckVycm9yIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGxhbm5lZFN0YXJ0VGltZUJlZm9yZVRoYW5FbmRUaW1lU2VydmVyRXJyb3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUGxhbm5lZFN0YXJ0VGltZURheVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGUgcGxhbm5lZCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBwbGFubmVkIGVuZCB0aW1lISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlBsYW5uZWRTdGFydFRpbWVIb3VyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoZSBwbGFubmVkIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIHBsYW5uZWQgZW5kIHRpbWUhIikgfCBodG1sICVdPC9wPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUGxhbm5lZFN0YXJ0VGltZUJlZm9yZVRoYW5FbmRUaW1lU2VydmVyRXJyb3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiUGxhbm5lZCBFbmQgVGltZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlBsYW5uZWRFbmRUaW1lU2VsZWN0aW9uU3RyaW5nICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQbGFubmVkRW5kVGltZURheUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJJbnZhbGlkIGRhdGUhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUGxhbm5lZEVuZFRpbWVIb3VyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgZGF0ZSEiKSB8IGh0bWwgJV08L3A+PC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIlBsYW5uZWRFbmRUaW1lR2VuZXJpY1NlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlBsYW5uZWRFbmRUaW1lRGF5U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgZGF0ZSEiKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQbGFubmVkRW5kVGltZUhvdXJTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCBkYXRlISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlBsYW5uZWRFbmRUaW1lR2VuZXJpY1NlcnZlckVycm9yIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGxhbm5lZEVuZFRpbWVCZWZvcmVUaGFuRW5kVGltZVNlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlBsYW5uZWRFbmRUaW1lRGF5U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoZSBwbGFubmVkIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIHBsYW5uZWQgZW5kIHRpbWUhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUGxhbm5lZEVuZFRpbWVIb3VyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoZSBwbGFubmVkIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIHBsYW5uZWQgZW5kIHRpbWUhIikgfCBodG1sICVdPC9wPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUGxhbm5lZEVuZFRpbWVCZWZvcmVUaGFuRW5kVGltZVNlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlNob3dQbGFubmVkRWZmb3J0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUGxhbm5lZEVmZm9ydCI+WyUgVHJhbnNsYXRlKCJQbGFubmVkIEVmZm9ydCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iUGxhbm5lZEVmZm9ydCIgaWQ9IlBsYW5uZWRFZmZvcnQiIHZhbHVlPSJbJSBEYXRhLlBsYW5uZWRFZmZvcnQgfCBodG1sICVdIiBjbGFzcz0iVzEwcGMgVmFsaWRhdGUgWyUgRGF0YS5QbGFubmVkRWZmb3J0SW52YWxpZCB8IGh0bWwgJV0iIG1heGxlbmd0aD0iMTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlBsYW5uZWRFZmZvcnRFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCBmb3JtYXQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUGxhbm5lZEVmZm9ydFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJJbnZhbGlkIGZvcm1hdC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTaG93UGxhbm5lZEVmZm9ydCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBdHRhY2htZW50VXBsb2FkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQXR0YWNobWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+ClslIFJlbmRlckJsb2NrU3RhcnQoIkF0dGFjaG1lbnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWxlbmFtZSB8IGh0bWwgJV0gKFslIERhdGEuRmlsZXNpemUgfCBodG1sICVdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgaWQ9IkF0dGFjaG1lbnREZWxldGVbJSBEYXRhLkZpbGVJRCB8IGh0bWwgJV0iIG5hbWU9IkF0dGFjaG1lbnREZWxldGVbJSBEYXRhLkZpbGVJRCB8IGh0bWwgJV0iIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV08L2J1dHRvbj4KWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNBdHRhY2htZW50RGVsZXRlWyUgRGF0YS5GaWxlSUQgfCBodG1sICVdJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkRpc2FibGVWYWxpZGF0aW9uKCQoJyNBdHRhY2htZW50RGVsZXRlWyUgRGF0YS5GaWxlSUQgfCBodG1sICVdJykuY2xvc2VzdCgnZm9ybScpKTsKICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQXR0YWNobWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iRmlsZVVwbG9hZCIgaWQ9IkZpbGVVcGxvYWQiIHR5cGU9ImZpbGUiIHNpemU9IjQwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJBdHRhY2htZW50VXBsb2FkIiBuYW1lPSJBdHRhY2htZW50VXBsb2FkIiB2YWx1ZT0iMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcjRmlsZVVwbG9hZCcpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkRm9ybSA9ICQoJyNGaWxlVXBsb2FkJykuY2xvc2VzdCgnZm9ybScpOwogICAgICAgIENvcmUuRm9ybS5WYWxpZGF0ZS5EaXNhYmxlVmFsaWRhdGlvbigkRm9ybSk7CiAgICAgICAgJEZvcm0uZmluZCgnI0F0dGFjaG1lbnRVcGxvYWQnKS52YWwoJzEnKS5lbmQoKS5zdWJtaXQoKTsKICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KClslIFJlbmRlckJsb2NrRW5kKCJBdHRhY2htZW50VXBsb2FkIikgJV0KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiBpZD0iU3VibWl0V29ya09yZGVyQWRkIiBuYW1lPSJXb3JrT3JkZXJBZGQiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkNyZWF0ZSIpIHwgaHRtbCAlXSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJDcmVhdGUiKSB8IGh0bWwgJV0iPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1zcXVhcmUtbyI+PC9pPiBbJSBUcmFuc2xhdGUoIkNyZWF0ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKCJBZGQgV29ya29yZGVyIHRvICVzJXMiLCBDb25maWcoIklUU01DaGFuZ2U6Okhvb2siKSwgRGF0YS5DaGFuZ2VOdW1iZXIpIHwgaHRtbCAlXSAmbmRhc2g7IFslIERhdGEuQ2hhbmdlVGl0bGUgfCBodG1sICVdPC9oMT4KICAgICAgICA8cD4KICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiPlslIFRyYW5zbGF0ZSgiQ2FuY2VsICYgY2xvc2UiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgPC9wPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJTZWxlY3QgV29ya29yZGVyIFRlbXBsYXRlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIG5hbWU9InRlbXBsYXRlIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiAgICB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkNyZWF0ZUZyb21UZW1wbGF0ZSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNoYW5nZUlEIiAgdmFsdWU9IlslIERhdGEuQ2hhbmdlSUQgfCBodG1sICVdIi8+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJUZW1wbGF0ZUlEIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qIDwvc3Bhbj5bJSBUcmFuc2xhdGUoIlRlbXBsYXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVGVtcGxhdGVTZWxlY3Rpb25TdHJpbmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlRlbXBsYXRlSURFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUZW1wbGF0ZUlEU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik1vdmVUaW1lVHlwZSI+WyUgVHJhbnNsYXRlKCJUaW1lIHR5cGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Nb3ZlVGltZVR5cGVTZWxlY3Rpb25TdHJpbmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik1vdmVUaW1lVHlwZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJJbnZhbGlkIHRpbWUgdHlwZS4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTmV3IHRpbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Nb3ZlVGltZVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiBpZD0iU3VibWl0VGVtcGxhdGUiIG5hbWU9IlN1Ym1pdFRlbXBsYXRlIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJDcmVhdGUiKSB8IGh0bWwgJV0iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiQ3JlYXRlIikgfCBodG1sICVdIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2hlY2stc3F1YXJlLW8iPjwvaT4gWyUgVHJhbnNsYXRlKCJDcmVhdGUiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICA8L2Rpdj4KPC9kaXY+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIEluc2VydFRlbXBsYXRlKCJBZ2VudElUU01Vc2VyU2VhcmNoLnR0IikgJV0KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwoKICAgICAgICAkKCcjVXNlcicpLmJpbmQoJ2ZvY3VzJywgZnVuY3Rpb24oIEV2ZW50ICkgewogICAgICAgICAgICBDb3JlLkNvbmZpZy5TZXQoJ1VzZXJBdXRvY29tcGxldGUuR3JvdXBzJywgJ2l0c20tY2hhbmdlJyk7CiAgICAgICAgfSk7CgogICAgICAgICQoJyNVc2VyJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiggRXZlbnQgKSB7CiAgICAgICAgICAgICQoJyNVc2VyJykudmFsKCcnKTsKICAgICAgICB9KTsKCiAgICAvL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KCjxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iICAgIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIiAvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2F2ZSIgLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IldvcmtPcmRlcklEIiB2YWx1ZT0iWyUgRGF0YS5Xb3JrT3JkZXJJRCB8IGh0bWwgJV0iIC8+CgogICAgPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICA8aDEgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRWRpdCBXb3Jrb3JkZXIgQWdlbnQgb2YgJXMlcyIsIENvbmZpZygiSVRTTVdvcmtPcmRlcjo6SG9vayIpLCBEYXRhLkNoYW5nZU51bWJlcikgfCBodG1sICVdICZuZGFzaDsgWyUgRGF0YS5Xb3JrT3JkZXJOdW1iZXIgfCBodG1sICVdOiBbJSBEYXRhLldvcmtPcmRlclRpdGxlIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkVkaXQgV29ya29yZGVyIEFnZW50IG9mICVzJXMiLCBDb25maWcoIklUU01Xb3JrT3JkZXI6Okhvb2siKSwgRGF0YS5DaGFuZ2VOdW1iZXIpIHwgaHRtbCAlXSAmbmRhc2g7IFslIERhdGEuV29ya09yZGVyTnVtYmVyIHwgaHRtbCAlXTogWyUgRGF0YS5Xb3JrT3JkZXJUaXRsZSB8IHRydW5jYXRlKDcwKSB8IGh0bWwgJV0KICAgICAgICAgICAgPC9oMT4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCI+WyUgVHJhbnNsYXRlKCJDYW5jZWwgJiBjbG9zZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50IFNwYWNpbmdCb3R0b20iPgogICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsIj4KCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJVc2VyIj4gWyUgVHJhbnNsYXRlKCJXb3Jrb3JkZXIgQWdlbnQiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJVc2VyIiB0eXBlPSJ0ZXh0IiBuYW1lPSJVc2VyIiB2YWx1ZT0iWyUgRGF0YS5Vc2VyIHwgaHRtbCAlXSIgY2xhc3M9Ilc3NXBjIFslIERhdGEuVXNlclNlcnZlckVycm9yICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJVc2VyU2VsZWN0ZWQiIHR5cGU9ImhpZGRlbiIgbmFtZT0iVXNlclNlbGVjdGVkIiB2YWx1ZT0iWyUgRGF0YS5Vc2VySUQgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBpZD0iVXNlclNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgPHA+WyUgVHJhbnNsYXRlKCJJbnZhbGlkIFVzZXIiKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iRm9vdGVyIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiBhY2Nlc3NrZXk9ImciIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSAoZykiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU3VibWl0IikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1zcXVhcmUtbyI+PC9pPiBbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9mb3JtPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIk5vV29ya09yZGVySW5Db25kaXRpb24iKSAlXQo8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBXMzAwcHgiPgogICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiVGl0bGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgWyUgRGF0YS5Xb3JrT3JkZXJUaXRsZSB8IGh0bWwgJV0KICAgIDwvcD4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9maWVsZHNldD4KPHAgY2xhc3M9IlNwYWNpbmdUb3AgQ2VudGVyIj4KICAgIFslIFRyYW5zbGF0ZSgiRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHdvcmtvcmRlcj8iKSB8IGh0bWwgJV0KPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9Xb3JrT3JkZXJJbkNvbmRpdGlvbiIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJXb3JrT3JkZXJJbkNvbmRpdGlvbiIpICVdCjxwPgogICAgWyUgVHJhbnNsYXRlKCJZb3UgY2FuIG5vdCBkZWxldGUgdGhpcyBXb3Jrb3JkZXIuIEl0IGlzIHVzZWQgaW4gYXQgbGVhc3Qgb25lIENvbmRpdGlvbiEiKSB8IGh0bWwgJV0KPC9wPgo8cCBjbGFzcz0iU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tIj4KICAgIFslIFRyYW5zbGF0ZSgiVGhpcyBXb3Jrb3JkZXIgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIENvbmRpdGlvbihzKSIpIHwgaHRtbCAlXToKPC9wPgoKPHVsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJXb3JrT3JkZXJJbkNvbmRpdGlvblJvdyIpICVdCiAgICA8bGkgY2xhc3M9IkluZGVudCBTcGFjaW5nQm90dG9tU21hbGwiPgogICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01DaGFuZ2VDb25kaXRpb25FZGl0O0NoYW5nZUlEPVslIERhdGEuQ2hhbmdlSUQgfCB1cmkgJV07Q29uZGl0aW9uSUQ9WyUgRGF0YS5Db25kaXRpb25JRCB8IHVyaSAlXSIgY2xhc3M9IkFzUG9wdXBEaWFsb2ciPgogICAgICAgICAgICBbJSBEYXRhLk5hbWUgfCBodG1sICVdCiAgICAgICAgPC9hPgogICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIldvcmtPcmRlckluQ29uZGl0aW9uUm93IikgJV0KPC91bD4KClslIFJlbmRlckJsb2NrRW5kKCJXb3JrT3JkZXJJbkNvbmRpdGlvbiIpICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKCJFZGl0ICVzJXMtJXMiLCBDb25maWcoIklUU01Xb3JrT3JkZXI6Okhvb2siKSwgRGF0YS5DaGFuZ2VOdW1iZXIsIERhdGEuV29ya09yZGVyTnVtYmVyKSB8IGh0bWwgJV0gJm1kYXNoOyBbJSBEYXRhLldvcmtPcmRlclRpdGxlIHwgaHRtbCAlXTwvaDE+CiAgICAgICAgPHA+CiAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJDYW5jZWxDbG9zZVBvcHVwIj5bJSBUcmFuc2xhdGUoIkNhbmNlbCAmIGNsb3NlIikgfCBodG1sICVdPC9hPgogICAgICAgIDwvcD4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIG5hbWU9ImNvbXBvc2UiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlNhdmUiLz4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IldvcmtPcmRlcklEIiB2YWx1ZT0iWyUgRGF0YS5Xb3JrT3JkZXJJRCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkZvcm1JRCIgdmFsdWU9IlslIERhdGEuRm9ybUlEIHwgaHRtbCAlXSIvPgoKICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IldvcmtPcmRlclRpdGxlIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qIDwvc3Bhbj5bJSBUcmFuc2xhdGUoIlRpdGxlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iV29ya09yZGVyVGl0bGUiIGlkPSJXb3JrT3JkZXJUaXRsZSIgdmFsdWU9IlslIERhdGEuV29ya09yZGVyVGl0bGUgfCBodG1sICVdIiBjbGFzcz0iVzc1cGMgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5Xb3JrT3JkZXJUaXRsZVNlcnZlckVycm9yIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSIyNTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iV29ya09yZGVyVGl0bGVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IldvcmtPcmRlclRpdGxlU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlJpY2hUZXh0IikgJV0KWyUgSW5zZXJ0VGVtcGxhdGUoIlJpY2hUZXh0RWRpdG9yLnR0IikgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlJpY2hUZXh0IikgJV0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJSaWNoVGV4dCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJJbnN0cnVjdGlvbiIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJpY2hUZXh0RmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9IlJpY2hUZXh0IiBjbGFzcz0iUmljaFRleHQgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5JbnN0cnVjdGlvbkludmFsaWQgJV0iIG5hbWU9Ikluc3RydWN0aW9uIiByb3dzPSIxNSIgY29scz0iWyUgQ29uZmlnKCJUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUiKSAlXSI+WyUgRGF0YS5JbnN0cnVjdGlvbiB8IGh0bWwgJV08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSaWNoVGV4dEVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUmljaFRleHRTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJXb3Jrb3JkZXIgVHlwZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuV29ya09yZGVyVHlwZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkIikgJV0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSb3cgUm93X0R5bmFtaWNGaWVsZF9bJSBEYXRhLk5hbWUgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYWJlbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGQiKSAlXQoKIyBleGFtcGxlIG9mIGhvdyB0byB1c2UgZml4ZWQgZHluYW1pYyBmaWVsZCBibG9ja3MgZm9yIGN1c3RvbWl6YXRpb25zCiMgTm90ZTogRmllbGQxIGFuZCBGaWVsZDIgYXJlIHRoZSBuYW1lcyBvZiB0aGUgZmllbGRzIGFuZCBoYWQgdG8gYmUgcmVwbGFjZWQgd2l0aCB0aGUgYWN0dWFsCiMgZmllbGQgbmFtZXMKI1slIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZF9GaWVsZDEiKSAlXQojICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSb3cgUm93X0R5bmFtaWNGaWVsZF9bJSBEYXRhLk5hbWUgfCBodG1sICVdIj4KIyAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkICVdCiMgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiNbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkX0ZpZWxkMSIpICVdCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRfRmllbGQyIikgJV0KIyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiMgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhYmVsICVdCiMgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQojICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiMgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgICAgICAgICAgICAgICAgICAgIDwvZGl2PgojWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZF9GaWVsZDIiKSAlXQoKICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJQbGFubmVkIFN0YXJ0IFRpbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuUGxhbm5lZFN0YXJ0VGltZVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQbGFubmVkU3RhcnRUaW1lRGF5RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgZGF0ZSEiKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlBsYW5uZWRTdGFydFRpbWVIb3VyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgZGF0ZSEiKSB8IGh0bWwgJV08L3A+PC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIlBsYW5uZWRTdGFydFRpbWVHZW5lcmljU2VydmVyRXJyb3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQbGFubmVkU3RhcnRUaW1lRGF5U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgZGF0ZSEiKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlBsYW5uZWRTdGFydFRpbWVIb3VyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgZGF0ZSEiKSB8IGh0bWwgJV08L3A+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJQbGFubmVkU3RhcnRUaW1lR2VuZXJpY1NlcnZlckVycm9yIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGxhbm5lZFN0YXJ0VGltZUJlZm9yZVRoYW5FbmRUaW1lU2VydmVyRXJyb3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQbGFubmVkU3RhcnRUaW1lRGF5U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoZSBwbGFubmVkIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIHBsYW5uZWQgZW5kIHRpbWUhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQbGFubmVkU3RhcnRUaW1lSG91clNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGUgcGxhbm5lZCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBwbGFubmVkIGVuZCB0aW1lISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlBsYW5uZWRTdGFydFRpbWVCZWZvcmVUaGFuRW5kVGltZVNlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlBsYW5uZWQgRW5kIFRpbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuUGxhbm5lZEVuZFRpbWVTZWxlY3Rpb25TdHJpbmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUGxhbm5lZEVuZFRpbWVEYXlFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCBkYXRlISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUGxhbm5lZEVuZFRpbWVIb3VyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgZGF0ZSEiKSB8IGh0bWwgJV08L3A+PC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIlBsYW5uZWRFbmRUaW1lR2VuZXJpY1NlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUGxhbm5lZEVuZFRpbWVEYXlTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCBkYXRlISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUGxhbm5lZEVuZFRpbWVIb3VyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgZGF0ZSEiKSB8IGh0bWwgJV08L3A+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJQbGFubmVkRW5kVGltZUdlbmVyaWNTZXJ2ZXJFcnJvciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlBsYW5uZWRFbmRUaW1lQmVmb3JlVGhhbkVuZFRpbWVTZXJ2ZXJFcnJvciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlBsYW5uZWRFbmRUaW1lRGF5U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoZSBwbGFubmVkIHN0YXJ0IHRpbWUgbXVzdCBiZSBiZWZvcmUgdGhlIHBsYW5uZWQgZW5kIHRpbWUhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQbGFubmVkRW5kVGltZUhvdXJTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhlIHBsYW5uZWQgc3RhcnQgdGltZSBtdXN0IGJlIGJlZm9yZSB0aGUgcGxhbm5lZCBlbmQgdGltZSEiKSB8IGh0bWwgJV08L3A+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJQbGFubmVkRW5kVGltZUJlZm9yZVRoYW5FbmRUaW1lU2VydmVyRXJyb3IiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIk1vdmVGb2xsb3dpbmdXb3JrT3JkZXJzIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJNb3ZlRm9sbG93aW5nV29ya09yZGVycyI+WyUgVHJhbnNsYXRlKCJNb3ZlIGZvbGxvd2luZyB3b3Jrb3JkZXJzIGFjY29yZGluZ2x5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIklmIHRoZSBwbGFubmVkIGVuZCB0aW1lIG9mIHRoaXMgd29ya29yZGVyIGlzIGNoYW5nZWQsIHRoZSBwbGFubmVkIHN0YXJ0IHRpbWVzIG9mIGFsbCBmb2xsb3dpbmcgd29ya29yZGVycyB3aWxsIGJlIGNoYW5nZWQgYWNjb3JkaW5nbHkiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJNb3ZlRm9sbG93aW5nV29ya09yZGVycyIgbmFtZT0iTW92ZUZvbGxvd2luZ1dvcmtPcmRlcnMiIHZhbHVlPSIxIiBbJSBEYXRhLk1vdmVGb2xsb3dpbmdXb3JrT3JkZXJzIHwgaHRtbCAlXS8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiTW92ZUZvbGxvd2luZ1dvcmtPcmRlcnMiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU2hvd1BsYW5uZWRFZmZvcnQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlBsYW5uZWRFZmZvcnQiPlslIFRyYW5zbGF0ZSgiUGxhbm5lZCBFZmZvcnQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJQbGFubmVkRWZmb3J0IiBpZD0iUGxhbm5lZEVmZm9ydCIgdmFsdWU9IlslIERhdGEuUGxhbm5lZEVmZm9ydCB8IGh0bWwgJV0iIGNsYXNzPSJXMTBwYyBWYWxpZGF0ZSBbJSBEYXRhLlBsYW5uZWRFZmZvcnRJbnZhbGlkIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSIxMCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQbGFubmVkRWZmb3J0RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgZm9ybWF0LiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUGxhbm5lZEVmZm9ydFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJJbnZhbGlkIGZvcm1hdC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiU2hvd1BsYW5uZWRFZmZvcnQiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQXR0YWNobWVudFVwbG9hZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQXR0YWNobWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBdHRhY2htZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpbGVuYW1lIHwgaHRtbCAlXSAoWyUgRGF0YS5GaWxlc2l6ZSB8IGh0bWwgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGlkPSJBdHRhY2htZW50RGVsZXRlWyUgRGF0YS5GaWxlSUQgfCBodG1sICVdIiBuYW1lPSJBdHRhY2htZW50RGVsZXRlWyUgRGF0YS5GaWxlSUQgfCBodG1sICVdIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJEZWxldGUiKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdPC9idXR0b24+ClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcjQXR0YWNobWVudERlbGV0ZVslIERhdGEuRmlsZUlEIHwgaHRtbCAlXScpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIENvcmUuRm9ybS5WYWxpZGF0ZS5EaXNhYmxlVmFsaWRhdGlvbigkKCcjQXR0YWNobWVudERlbGV0ZVslIERhdGEuRmlsZUlEIHwgaHRtbCAlXScpLmNsb3Nlc3QoJ2Zvcm0nKSk7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQXR0YWNobWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IkZpbGVVcGxvYWQiIGlkPSJGaWxlVXBsb2FkIiB0eXBlPSJmaWxlIiBzaXplPSI0MCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJBdHRhY2htZW50VXBsb2FkIiBuYW1lPSJBdHRhY2htZW50VXBsb2FkIiB2YWx1ZT0iMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNGaWxlVXBsb2FkJykuYmluZCgnY2hhbmdlJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgdmFyICRGb3JtID0gJCgnI0ZpbGVVcGxvYWQnKS5jbG9zZXN0KCdmb3JtJyk7CiAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkRpc2FibGVWYWxpZGF0aW9uKCRGb3JtKTsKICAgICAgICAkRm9ybS5maW5kKCcjQXR0YWNobWVudFVwbG9hZCcpLnZhbCgnMScpLmVuZCgpLnN1Ym1pdCgpOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQoKWyUgUmVuZGVyQmxvY2tFbmQoIkF0dGFjaG1lbnRVcGxvYWQiKSAlXQoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiBpZD0iU3VibWl0V29ya09yZGVyRWRpdCIgYWNjZXNza2V5PSJnIiBuYW1lPSJXb3JrT3JkZXJFZGl0IiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV0gKGcpIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2hlY2stc3F1YXJlLW8iPjwvaT4gWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDE+CiAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiSGlzdG9yeSBvZiAlcyVzLSVzIiwgQ29uZmlnKCJJVFNNV29ya09yZGVyOjpIb29rIiksIERhdGEuQ2hhbmdlTnVtYmVyLCBEYXRhLldvcmtPcmRlck51bWJlcikgfCBodG1sICVdICZuZGFzaDsgWyUgRGF0YS5Xb3JrT3JkZXJUaXRsZSB8IHRydW5jYXRlKDYwKSB8IGh0bWwgJV0KICAgICAgICA8L2gxPgogICAgICAgIDxwPgogICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCI+WyUgVHJhbnNsYXRlKCJDYW5jZWwgJiBjbG9zZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICA8L3A+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiSGlzdG9yeSBDb250ZW50IikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJBY3Rpb24iKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJEZXRhaWxzIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIldvcmtvcmRlciIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJVc2VyIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNyZWF0ZXRpbWUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuSGlzdG9yeVR5cGUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ29udGVudCB8IHRydW5jYXRlKDEwMCkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0hpc3Rvcnlab29tIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtClslIFJlbmRlckJsb2NrRW5kKCJOb0hpc3Rvcnlab29tIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2hvd0hpc3Rvcnlab29tIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlckhpc3Rvcnlab29tO0hpc3RvcnlFbnRyeUlEPVslIERhdGEuSGlzdG9yeUVudHJ5SUQgJV0iPlslIFRyYW5zbGF0ZSgiU2hvdyBkZXRhaWxzIikgfCBodG1sICVdPC9hPgpbJSBSZW5kZXJCbG9ja0VuZCgiU2hvd0hpc3Rvcnlab29tIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlNob3dXb3JrT3JkZXJab29tIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlclpvb207V29ya09yZGVySUQ9WyUgRGF0YS5Xb3JrT3JkZXJJRCAlXSI+WyUgVHJhbnNsYXRlKCJTaG93IHdvcmtvcmRlciIpIHwgaHRtbCAlXTwvYT4KWyUgUmVuZGVyQmxvY2tFbmQoIlNob3dXb3JrT3JkZXJab29tIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Vc2VyTG9naW4gfCBodG1sICVdIChbJSBEYXRhLlVzZXJGaXJzdG5hbWUgfCBodG1sICVdIFslIERhdGEuVXNlckxhc3RuYW1lIHwgaHRtbCAlXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJSb3ciKSAlXQoKICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkZvb3RlciI+CiAgICA8L2Rpdj4KPC9kaXY+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDE+CiAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiSGlzdG9yeSBvZiAlcyVzLSVzIiwgQ29uZmlnKCJJVFNNV29ya09yZGVyOjpIb29rIiksIERhdGEuQ2hhbmdlTnVtYmVyLCBEYXRhLldvcmtPcmRlck51bWJlcikgfCBodG1sICVdICZuZGFzaDsgWyUgRGF0YS5Xb3JrT3JkZXJUaXRsZSB8IHRydW5jYXRlKDYwKSB8IGh0bWwgJV0KICAgICAgICA8L2gxPgogICAgICAgIDxwPgogICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRJVFNNV29ya09yZGVySGlzdG9yeTtXb3JrT3JkZXJJRD1bJSBEYXRhLldvcmtPcmRlcklEIHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIkJhY2siKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgPGEgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiQ2FuY2VsICYgY2xvc2UiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgPC9wPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRGV0YWlsZWQgaGlzdG9yeSBpbmZvcm1hdGlvbiBvZiAlcyIsIERhdGEuSGlzdG9yeVR5cGUpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CgogICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJNb2RpZmllZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkbmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIk9sZCBWYWx1ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkNvbnRlbnRPbGQgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIk5ldyBWYWx1ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkNvbnRlbnROZXcgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgWyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQgYnkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiIHRpdGxlPSJbJSBEYXRhLlVzZXJMb2dpbiB8IGh0bWwgJV0gKFslIERhdGEuVXNlckZpcnN0bmFtZSB8IGh0bWwgJV0gWyUgRGF0YS5Vc2VyTGFzdG5hbWUgfCBodG1sICVdKSI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLlVzZXJMb2dpbiB8IGh0bWwgJV0gKFslIERhdGEuVXNlckZpcnN0bmFtZSB8IGh0bWwgJV0gWyUgRGF0YS5Vc2VyTGFzdG5hbWUgfCBodG1sICVdKQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICA8L2ZpZWxkc2V0PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJGb290ZXIiPgogICAgPC9kaXY+CjwvZGl2Pgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMgVE9ETy4gQWRkIHZhbGlkYXRpb24gZm9yIHRoZSBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBpbiB0aGUgY2xpZW50IHNpZGUuCjxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTYXZlIi8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJXb3JrT3JkZXJJRCIgdmFsdWU9IlslIERhdGEuV29ya09yZGVySUQgfCBodG1sICVdIi8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJGb3JtSUQiIHZhbHVlPSJbJSBEYXRhLkZvcm1JRCB8IGh0bWwgJV0iLz4KCiAgICA8ZGl2IGNsYXNzPSJMYXlvdXRQb3B1cCBBUklBUm9sZU1haW4iPgogICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgIDxoMT5bJSBUcmFuc2xhdGUoIkVkaXQgUmVwb3J0IG9mICVzJXMtJXMiLCBDb25maWcoIklUU01Xb3JrT3JkZXI6Okhvb2siKSwgRGF0YS5DaGFuZ2VOdW1iZXIsIERhdGEuV29ya09yZGVyTnVtYmVyKSB8IGh0bWwgJV0gJm5kYXNoOyBbJSBEYXRhLldvcmtPcmRlclRpdGxlIHwgdHJ1bmNhdGUoNjApIHwgaHRtbCAlXTwvaDE+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgPGEgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiIGhyZWY9IiMiPlslIFRyYW5zbGF0ZSgiQ2FuY2VsICYgY2xvc2UiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJSaWNoVGV4dCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJSZXBvcnQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJpY2hUZXh0RmllbGQiPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUmljaFRleHQiKSAlXQpbJSBJbnNlcnRUZW1wbGF0ZSgiUmljaFRleHRFZGl0b3IudHQiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiUmljaFRleHQiKSAlXQoKICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9IlJpY2hUZXh0IiBjbGFzcz0iUmljaFRleHQgVmFsaWRhdGVfUmVxdWlyZWQgWyUgRGF0YS5SZXBvcnRJbnZhbGlkICVdIiBuYW1lPSJSZXBvcnQiIHJvd3M9IjE1IiBjb2xzPSJbJSBDb25maWcoIlRpY2tldDo6RnJvbnRlbmQ6OlRleHRBcmVhTm90ZSIpICVdIj5bJSBEYXRhLlJlcG9ydCB8IGh0bWwgJV08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJpY2hUZXh0RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJpY2hUZXh0U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTdGF0ZSIpICVdCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJXb3JrT3JkZXJTdGF0ZUlEIj5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TdGF0ZVNlbGVjdCAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTdGF0ZSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYWJlbCAlXQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkIikgJV0KCiMgZXhhbXBsZSBvZiBob3cgdG8gdXNlIGZpeGVkIGR5bmFtaWMgZmllbGQgYmxvY2tzIGZvciBjdXN0b21pemF0aW9ucwojIE5vdGU6IEZpZWxkMSBhbmQgRmllbGQyIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGZpZWxkcyBhbmQgaGFkIHRvIGJlIHJlcGxhY2VkIHdpdGggdGhlIGFjdHVhbAojIGZpZWxkIG5hbWVzCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRfRmllbGQxIikgJV0KIyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSb3cgUm93X0R5bmFtaWNGaWVsZF9bJSBEYXRhLk5hbWUgfCBodG1sICVdIj4KIyAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYWJlbCAlXQojICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiMgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkICVdCiMgICAgICAgICAgICAgICAgICAgIDwvZGl2PgojICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgICAgICAgICAgICAgICAgPC9kaXY+CiNbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkX0ZpZWxkMSIpICVdCiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRfRmllbGQyIikgJV0KIyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSb3cgUm93X0R5bmFtaWNGaWVsZF9bJSBEYXRhLk5hbWUgfCBodG1sICVdIj4KIyAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYWJlbCAlXQojICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiMgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkICVdCiMgICAgICAgICAgICAgICAgICAgIDwvZGl2PgojICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgICAgICAgICAgICAgICAgPC9kaXY+CiNbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkX0ZpZWxkMiIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3R1YWxTdGFydFRpbWUiKSAlXQogICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQWN0dWFsIFN0YXJ0IFRpbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkFjdHVhbFN0YXJ0VGltZVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkFjdHVhbFN0YXJ0VGltZURheUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJJbnZhbGlkIGRhdGUhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkFjdHVhbFN0YXJ0VGltZUhvdXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCBkYXRlISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0dWFsU3RhcnRUaW1lR2VuZXJpY1NlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBY3R1YWxTdGFydFRpbWVEYXlTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCBkYXRlISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBY3R1YWxTdGFydFRpbWVIb3VyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgZGF0ZSEiKSB8IGh0bWwgJV08L3A+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJBY3R1YWxTdGFydFRpbWVHZW5lcmljU2VydmVyRXJyb3IiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3R1YWxTdGFydFRpbWVCZWZvcmVUaGFuRW5kVGltZVNlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBY3R1YWxTdGFydFRpbWVEYXlTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIHRpbWUhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkFjdHVhbFN0YXJ0VGltZUhvdXJTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIHRpbWUhIikgfCBodG1sICVdPC9wPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0dWFsU3RhcnRUaW1lQmVmb3JlVGhhbkVuZFRpbWVTZXJ2ZXJFcnJvciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdHVhbFN0YXJ0VGltZVNldFNlcnZlckVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBY3R1YWxTdGFydFRpbWVEYXlTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhlIGFjdHVhbCBzdGFydCB0aW1lIG11c3QgYmUgc2V0LCB3aGVuIHRoZSBhY3R1YWwgZW5kIHRpbWUgaXMgc2V0ISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBY3R1YWxTdGFydFRpbWVIb3VyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoZSBhY3R1YWwgc3RhcnQgdGltZSBtdXN0IGJlIHNldCwgd2hlbiB0aGUgYWN0dWFsIGVuZCB0aW1lIGlzIHNldCEiKSB8IGh0bWwgJV08L3A+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJBY3R1YWxTdGFydFRpbWVTZXRTZXJ2ZXJFcnJvciIpICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdHVhbFN0YXJ0VGltZSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3R1YWxFbmRUaW1lIikgJV0KICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkFjdHVhbCBFbmQgVGltZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuQWN0dWFsRW5kVGltZVNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkFjdHVhbEVuZFRpbWVEYXlFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiRGF0ZSBpbnZhbGlkISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBY3R1YWxFbmRUaW1lSG91ckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJEYXRlIGludmFsaWQhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkFjdHVhbEVuZFRpbWVEYXlTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiRGF0ZSBpbnZhbGlkISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBY3R1YWxFbmRUaW1lSG91clNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJEYXRlIGludmFsaWQhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJBY3R1YWxFbmRUaW1lIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlNob3dBY2NvdW50ZWRUaW1lIikgJV0KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkFjY291bnRlZFRpbWUiPlslIFRyYW5zbGF0ZSgiQWNjb3VudGVkIFRpbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkFjY291bnRlZFRpbWUiIG5hbWU9IkFjY291bnRlZFRpbWUiIHZhbHVlPSJbJSBEYXRhLkFjY291bnRlZFRpbWUgfCBodG1sICVdIiBjbGFzcz0iMjVwYyBWYWxpZGF0ZSBbJSBEYXRhLkFjY291bnRlZFRpbWVJbnZhbGlkIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSIxMSIvPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkFjY291bnRlZFRpbWVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiID48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgZm9ybWF0LiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBY2NvdW50ZWRUaW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIkludmFsaWQgZm9ybWF0LiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiU2hvd0FjY291bnRlZFRpbWUiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQXR0YWNobWVudFVwbG9hZCIpICVdCiAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJBdHRhY2htZW50IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPHVsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBdHRhY2htZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRmlsZW5hbWUgfCBodG1sICVdIChbJSBEYXRhLkZpbGVzaXplIHwgaHRtbCAlXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBpZD0iQXR0YWNobWVudERlbGV0ZVslIERhdGEuRmlsZUlEIHwgaHRtbCAlXSIgbmFtZT0iQXR0YWNobWVudERlbGV0ZVslIERhdGEuRmlsZUlEIHwgaHRtbCAlXSIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiRGVsZXRlIikgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoIkRlbGV0ZSIpIHwgaHRtbCAlXTwvYnV0dG9uPgpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgJCgnI0F0dGFjaG1lbnREZWxldGVbJSBEYXRhLkZpbGVJRCB8IGh0bWwgJV0nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuRGlzYWJsZVZhbGlkYXRpb24oJCgnI0F0dGFjaG1lbnREZWxldGVbJSBEYXRhLkZpbGVJRCB8IGh0bWwgJV0nKS5jbG9zZXN0KCdmb3JtJykpOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQXR0YWNobWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJGaWxlVXBsb2FkIiBpZD0iRmlsZVVwbG9hZCIgdHlwZT0iZmlsZSIgc2l6ZT0iNDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJBdHRhY2htZW50VXBsb2FkIiBuYW1lPSJBdHRhY2htZW50VXBsb2FkIiB2YWx1ZT0iMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgJCgnI0ZpbGVVcGxvYWQnKS5iaW5kKCdjaGFuZ2UnLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICB2YXIgJEZvcm0gPSAkKCcjRmlsZVVwbG9hZCcpLmNsb3Nlc3QoJ2Zvcm0nKTsKICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuRGlzYWJsZVZhbGlkYXRpb24oJEZvcm0pOwogICAgICAgICRGb3JtLmZpbmQoJyNBdHRhY2htZW50VXBsb2FkJykudmFsKCcxJykuZW5kKCkuc3VibWl0KCk7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCgpbJSBSZW5kZXJCbG9ja0VuZCgiQXR0YWNobWVudFVwbG9hZCIpICVdCgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiBpZD0iU3VibWl0V29ya09yZGVyRWRpdFJlcG9ydCIgYWNjZXNza2V5PSJnIiBuYW1lPSJXb3JrT3JkZXJFZGl0IiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV0gKGcpIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1zcXVhcmUtbyI+PC9pPiBbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Zvcm0+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIFczMDBweCI+CiAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJUaXRsZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICBbJSBEYXRhLldvcmtPcmRlclRpdGxlIHwgaHRtbCAlXQogICAgPC9wPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkN1cnJlbnQgQWdlbnQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgWyUgRGF0YS5Xb3JrT3JkZXJBZ2VudCB8IGh0bWwgJV0KICAgIDwvcD4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCjwvZmllbGRzZXQ+CjxwIGNsYXNzPSJTcGFjaW5nVG9wIENlbnRlciI+CiAgICBbJSBUcmFuc2xhdGUoIkRvIHlvdSByZWFsbHkgd2FudCB0byB0YWtlIHRoaXMgd29ya29yZGVyPyIpIHwgaHRtbCAlXQo8L3A+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJjb21wb3NlIiBpZD0iQ29tcG9zZSIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiAgICAgICB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iICAgIHZhbHVlPSJBZGRUZW1wbGF0ZSI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJXb3JrT3JkZXJJRCIgIHZhbHVlPSJbJSBEYXRhLldvcmtPcmRlcklEIHwgaHRtbCAlXSI+CgogICAgPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKCJTYXZlIFdvcmtvcmRlciBhcyBUZW1wbGF0ZSIpIHwgaHRtbCAlXTogWyUgQ29uZmlnKCJJVFNNV29ya09yZGVyOjpIb29rIikgJV0gWyUgRGF0YS5DaGFuZ2VOdW1iZXIgJV0gLSBbJSBEYXRhLldvcmtPcmRlck51bWJlciB8IGh0bWwgJV06IFslIERhdGEuV29ya09yZGVyVGl0bGUgfCBodG1sICVdPC9oMT4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCI+WyUgVHJhbnNsYXRlKCJDYW5jZWwgJiBjbG9zZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJUZW1wbGF0ZU5hbWUiPlslIFRyYW5zbGF0ZSgiVGVtcGxhdGUgTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iVGVtcGxhdGVOYW1lIiBuYW1lPSJUZW1wbGF0ZU5hbWUiIHZhbHVlPSJbJSBEYXRhLlRlbXBsYXRlTmFtZSB8IGh0bWwgJV0iIGNsYXNzPSJXNzVwYyBWYWxpZGF0ZV9SZXF1aXJlZCBbJSBEYXRhLlRlbXBsYXRlTmFtZUludmFsaWQgfCBodG1sICVdIiAvPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlRlbXBsYXRlTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSIgPjxwPlslIFRyYW5zbGF0ZSgiQSB0ZW1wbGF0ZSBzaG91bGQgaGF2ZSBhIG5hbWUhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlRlbXBsYXRlTmFtZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGUgdGVtcGxhdGUgbmFtZSBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDb21tZW50Ij5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkNvbW1lbnQiIG5hbWU9IkNvbW1lbnQiIHZhbHVlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIiBjbGFzcz0iVzc1cGMiIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTdGF0ZVJlc2V0Ij5bJSBUcmFuc2xhdGUoIlJlc2V0IFN0YXRlcyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuU3RhdGVSZXNldFNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVyd3JpdGVUZW1wbGF0ZSIpICVdCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJPdmVyd3JpdGVUZW1wbGF0ZSI+WyUgVHJhbnNsYXRlKCJPdmVyd3JpdGUgb3JpZ2luYWwgdGVtcGxhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk92ZXJ3cml0ZVRlbXBsYXRlU2VsZWN0aW9uU3RyaW5nICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ3cml0ZVRlbXBsYXRlIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkRlbGV0ZVdvcmtPcmRlciIpICVdCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJEZWxldGVXb3JrT3JkZXIiPlslIFRyYW5zbGF0ZSgiRGVsZXRlIG9yaWdpbmFsIHdvcmtvcmRlciAoYW5kIHN1cnJvdW5kaW5nIGNoYW5nZSkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkRlbGV0ZVdvcmtPcmRlclNlbGVjdGlvblN0cmluZyAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJEZWxldGVXb3JrT3JkZXIiKSAlXQoKICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlZhbGlkSUQiPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlZhbGlkU2VsZWN0aW9uU3RyaW5nICVdCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iRm9vdGVyIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiBpZD0iU3VibWl0QWRkVGVtcGxhdGUiIGFjY2Vzc2tleT0iZyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU3VibWl0IikgfCBodG1sICVdIChnKSIgdHlwZT0ic3VibWl0IiBuYW1lPSJBZGRUZW1wbGF0ZSIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiU3VibWl0IikgfCBodG1sICVdIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2hlY2stc3F1YXJlLW8iPjwvaT4gWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9mb3JtPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJbJSBEYXRhLldvcmtPcmRlclN0YXRlU2lnbmFsIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuV29ya09yZGVyU3RhdGUpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8aDEgdGl0bGU9IlslIENvbmZpZygiSVRTTVdvcmtPcmRlcjo6SG9vayIpICVdOiBbJSBEYXRhLkNoYW5nZU51bWJlciB8IGh0bWwgJV0tWyUgRGF0YS5Xb3JrT3JkZXJOdW1iZXIgfCBodG1sICVdICZuZGFzaDsgWyUgRGF0YS5Xb3JrT3JkZXJUaXRsZSB8IGh0bWwgJV0iPgogICAgICAgICAgICBbJSBDb25maWcoIklUU01Xb3JrT3JkZXI6Okhvb2siKSAlXTogWyUgRGF0YS5DaGFuZ2VOdW1iZXIgfCBodG1sICVdLVslIERhdGEuV29ya09yZGVyTnVtYmVyIHwgaHRtbCAlXSA8c3Bhbj4mbWRhc2g7PC9zcGFuPiBbJSBEYXRhLldvcmtPcmRlclRpdGxlIHwgdHJ1bmNhdGUoNzApIHwgaHRtbCAlXQogICAgICAgIDwvaDE+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckxhc3QiPgogICAgICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJXb3Jrb3JkZXIgSW5mb3JtYXRpb24iKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTWV0YSIpICVdCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiV29ya29yZGVyIFN0YXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZsYWcgU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJbJSBEYXRhLldvcmtPcmRlclN0YXRlU2lnbmFsIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuV29ya09yZGVyU3RhdGUpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuV29ya09yZGVyU3RhdGUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiV29ya29yZGVyIFR5cGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRW1wdHlXb3JrT3JkZXJUeXBlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iLSI+LTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkVtcHR5V29ya09yZGVyVHlwZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIldvcmtPcmRlclR5cGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuV29ya09yZGVyVHlwZSB8IGh0bWwgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJXb3JrT3JkZXJUeXBlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlBsYW5uZWQgU3RhcnQgVGltZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFbXB0eVBsYW5uZWRTdGFydFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSItIj4tPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiRW1wdHlQbGFubmVkU3RhcnRUaW1lIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGxhbm5lZFN0YXJ0VGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgRGF0YS5QbGFubmVkU3RhcnRUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJQbGFubmVkU3RhcnRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlBsYW5uZWQgRW5kIFRpbWUiKSB8IGh0bWwgJV06IDwvbGFiZWw+ClslIFJlbmRlckJsb2NrU3RhcnQoIkVtcHR5UGxhbm5lZEVuZFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSItIj4tPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiRW1wdHlQbGFubmVkRW5kVGltZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlBsYW5uZWRFbmRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLlBsYW5uZWRFbmRUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJQbGFubmVkRW5kVGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkFjdHVhbCBTdGFydCBUaW1lIikgfCBodG1sICVdOiA8L2xhYmVsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFbXB0eUFjdHVhbFN0YXJ0VGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9Ii0iPi08L3A+ClslIFJlbmRlckJsb2NrRW5kKCJFbXB0eUFjdHVhbFN0YXJ0VGltZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdHVhbFN0YXJ0VGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgRGF0YS5BY3R1YWxTdGFydFRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdHVhbFN0YXJ0VGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkFjdHVhbCBFbmQgVGltZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRW1wdHlBY3R1YWxFbmRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iLSI+LTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkVtcHR5QWN0dWFsRW5kVGltZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdHVhbEVuZFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuQWN0dWFsRW5kVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0dWFsRW5kVGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTaG93UGxhbm5lZEVmZm9ydCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlBsYW5uZWQgRWZmb3J0IikgfCBodG1sICVdOiA8L2xhYmVsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFbXB0eVBsYW5uZWRFZmZvcnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSItIj4tPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiRW1wdHlQbGFubmVkRWZmb3J0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGxhbm5lZEVmZm9ydCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgRGF0YS5QbGFubmVkRWZmb3J0IHwgaHRtbCAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIlBsYW5uZWRFZmZvcnQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTaG93UGxhbm5lZEVmZm9ydCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTaG93QWNjb3VudGVkVGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkFjY291bnRlZCBUaW1lIikgfCBodG1sICVdOiA8L2xhYmVsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFbXB0eUFjY291bnRlZFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSItIj4tPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiRW1wdHlBY2NvdW50ZWRUaW1lIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWNjb3VudGVkVGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgRGF0YS5BY2NvdW50ZWRUaW1lIHwgaHRtbCAlXTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjY291bnRlZFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTaG93QWNjb3VudGVkVGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiMgc2hvdyBkeW5hbWljIGZpZWxkcwogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCBOYXJyb3ciPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRMaW5rIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+PGEgaHJlZj0iWyUgRGF0YS5MaW5rIHwgSW50ZXJwb2xhdGUgJV0iIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iRHluYW1pY0ZpZWxkTGluayI+WyUgRGF0YS5WYWx1ZSAlXTwvYT48L3NwYW4+ClslIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGRMaW5rIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkUGxhaW4iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIj5bJSBEYXRhLlZhbHVlICVdPC9zcGFuPgpbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkUGxhaW4iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiMgZXhhbXBsZSBvZiBob3cgdG8gdXNlIGZpeGVkIGR5bmFtaWMgZmllbGQgYmxvY2tzIGZvciBjdXN0b21pemF0aW9ucwojIE5vdGU6IEZpZWxkMSBhbmQgRmllbGQyIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGZpZWxkcyBhbmQgaGFkIHRvIGJlIHJlcGxhY2VkIHdpdGggdGhlIGFjdHVhbAojIGZpZWxkIG5hbWVzCiMgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCBOYXJyb3ciPgojWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkX0ZpZWxkMSIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTo8L2xhYmVsPgojICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KI1slIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZF9GaWVsZDFfTGluayIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIj48YSBocmVmPSJbJSBEYXRhLkxpbmsgJV0iIHRhcmdldD0iX2JsYW5rIj5bJSBEYXRhLlZhbHVlICVdPC9hPjwvc3Bhbj4KI1slIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGRfRmllbGQxX0xpbmsiKSAlXQojWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkX0ZpZWxkMV9QbGFpbiIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9IlslIERhdGEuVGl0bGUgfCBodG1sICVdIj5bJSBEYXRhLlZhbHVlICVdPC9zcGFuPgojWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZF9GaWVsZDFfUGxhaW4iKSAlXQojICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgojWyUgUmVuZGVyQmxvY2tFbmQoIkR5bmFtaWNGaWVsZF9GaWVsZDEiKSAlXQojICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgojICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwgTmFycm93Ij4KI1slIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZF9GaWVsZDIiKSAlXQojICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06PC9sYWJlbD4KIyAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiNbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEeW5hbWljRmllbGRfRmllbGQyX0xpbmsiKSAlXQojICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+PGEgaHJlZj0iWyUgRGF0YS5MaW5rICVdIiB0YXJnZXQ9Il9ibGFuayI+WyUgRGF0YS5WYWx1ZSAlXTwvYT48L3NwYW4+CiNbJSBSZW5kZXJCbG9ja0VuZCgiRHluYW1pY0ZpZWxkX0ZpZWxkMl9MaW5rIikgJV0KI1slIFJlbmRlckJsb2NrU3RhcnQoIkR5bmFtaWNGaWVsZF9GaWVsZDJfUGxhaW4iKSAlXQojICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPSJbJSBEYXRhLlRpdGxlIHwgaHRtbCAlXSI+WyUgRGF0YS5WYWx1ZSAlXTwvc3Bhbj4KI1slIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGRfRmllbGQyX1BsYWluIikgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KI1slIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGRfRmllbGQyIikgJV0KIyAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ2hhbmdlIEJ1aWxkZXIiKSB8IGh0bWwgJV06PC9sYWJlbD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiRW1wdHlDaGFuZ2VCdWlsZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iLSI+LTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkVtcHR5Q2hhbmdlQnVpbGRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkNoYW5nZUJ1aWxkZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBEYXRhLkNoYW5nZUJ1aWxkZXJVc2VyTG9naW4gfCBodG1sICVdIChbJSBEYXRhLkNoYW5nZUJ1aWxkZXJVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLkNoYW5nZUJ1aWxkZXJVc2VyTGFzdG5hbWUgfCBodG1sICVdKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5nZUJ1aWxkZXJVc2VyTG9naW4gfCB0cnVuY2F0ZSgxNSkgfCBodG1sICVdIChbJSBEYXRhLkNoYW5nZUJ1aWxkZXJVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLkNoYW5nZUJ1aWxkZXJVc2VyTGFzdG5hbWUgfCBodG1sICVdKQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+ClslIFJlbmRlckJsb2NrRW5kKCJDaGFuZ2VCdWlsZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIldvcmtvcmRlciBBZ2VudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFbXB0eVdvcmtPcmRlckFnZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iLSI+LTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkVtcHR5V29ya09yZGVyQWdlbnQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJXb3JrT3JkZXJBZ2VudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIERhdGEuV29ya09yZGVyQWdlbnRVc2VyTG9naW4gfCBodG1sICVdIChbJSBEYXRhLldvcmtPcmRlckFnZW50VXNlckZpcnN0bmFtZSB8IGh0bWwgJV0gWyUgRGF0YS5Xb3JrT3JkZXJBZ2VudFVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuV29ya09yZGVyQWdlbnRVc2VyTG9naW4gfCB0cnVuY2F0ZSgxNSkgfCBodG1sICVdIChbJSBEYXRhLldvcmtPcmRlckFnZW50VXNlckZpcnN0bmFtZSB8IGh0bWwgJV0gWyUgRGF0YS5Xb3JrT3JkZXJBZ2VudFVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIldvcmtPcmRlckFnZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLkNyZWF0ZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCBieSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSJbJSBEYXRhLkNyZWF0ZVVzZXJMb2dpbiB8IGh0bWwgJV0gKFslIERhdGEuQ3JlYXRlVXNlckZpcnN0bmFtZSB8IGh0bWwgJV0gWyUgRGF0YS5DcmVhdGVVc2VyTGFzdG5hbWUgfCBodG1sICVdKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZVVzZXJMb2dpbiB8IHRydW5jYXRlKDE1KSB8IGh0bWwgJV0gKFslIERhdGEuQ3JlYXRlVXNlckZpcnN0bmFtZSB8IGh0bWwgJV0gWyUgRGF0YS5DcmVhdGVVc2VyTGFzdG5hbWUgfCBodG1sICVdKQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTGFzdCBjaGFuZ2VkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IlslIERhdGEuQ2hhbmdlVXNlckxvZ2luIHwgaHRtbCAlXSAoWyUgRGF0YS5DaGFuZ2VVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLkNoYW5nZVVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlVXNlckxvZ2luIHwgdHJ1bmNhdGUoMTUpIHwgaHRtbCAlXSAoWyUgRGF0YS5DaGFuZ2VVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLkNoYW5nZVVzZXJMYXN0bmFtZSB8IGh0bWwgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiTGlua1RhYmxlU2ltcGxlIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MaW5rVGFibGVTdHJnICVdClslIFJlbmRlckJsb2NrRW5kKCJMaW5rVGFibGVTaW1wbGUiKSAlXQogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk1ldGEiKSAlXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJBY3Rpb25Sb3ciPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25zIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiTWVudSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk1lbnVJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIiBpZD0iTWVudVslIERhdGEuTWVudUlEIHwgaHRtbCAlXSIgY2xhc3M9IlslIERhdGEuTWVudUNsYXNzIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkRlc2NyaXB0aW9uKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU2hvd0NvbmZpcm1EaWFsb2ciKSAlXQpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwovKmdsb2JhbCBJVFNNOiB0cnVlICovCiAgICBJVFNNLkFnZW50LkNvbmZpcm1EaWFsb2cuQmluZENvbmZpcm1EaWFsb2coewogICAgICAgIEVsZW1lbnRJRDogICAgICAgICAgICAgICAgICAnTWVudVslIERhdGEuTWVudUlEICVdJywKICAgICAgICBFbGVtZW50U2VsZWN0b3I6ICAgICAgICAgICAgJ1slIERhdGEuRWxlbWVudFNlbGVjdG9yIHwgSW50ZXJwb2xhdGUgJV0nLAogICAgICAgIERpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZzogICAnWyUgRGF0YS5EaWFsb2dDb250ZW50UXVlcnlTdHJpbmcgfCBJbnRlcnBvbGF0ZSAlXScsCiAgICAgICAgQ29uZmlybWVkQWN0aW9uUXVlcnlTdHJpbmc6ICdbJSBEYXRhLkNvbmZpcm1lZEFjdGlvblF1ZXJ5U3RyaW5nIHwgSW50ZXJwb2xhdGUgJV0nLAogICAgICAgIERpYWxvZ1RpdGxlOiAgICAgICAgICAgICAgICAnWyUgRGF0YS5EaWFsb2dUaXRsZSB8IEludGVycG9sYXRlICVdJywKICAgICAgICBUcmFuc2xhdGVkVGV4dDogICAgICAgICAgICAgewogICAgICAgICAgICBZZXM6IFslIFRyYW5zbGF0ZSgiWWVzIikgfCBKU09OICVdLAogICAgICAgICAgICBObzogIFslIFRyYW5zbGF0ZSgiTm8iKSB8IEpTT04gJV0sCiAgICAgICAgICAgIE9rOiAgWyUgVHJhbnNsYXRlKCJPayIpIHwgSlNPTiAlXQogICAgICAgIH0KICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIlNob3dDb25maXJtRGlhbG9nIikgJV0KClslIFJlbmRlckJsb2NrRW5kKCJNZW51SXRlbSIpICVdClslIFJlbmRlckJsb2NrRW5kKCJNZW51IikgJV0KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0Qm94IFNwYWNpbmdUb3AgRXhwYW5kZWQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTGlnaHRSb3cgSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj48YSBocmVmPSIjIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQuIikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJXb3Jrb3JkZXIiKSB8IGh0bWwgJV0gLSBbJSBEYXRhLldvcmtPcmRlclRpdGxlIHwgdHJ1bmNhdGUoNzApIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD48c3Ryb25nPlslIFRyYW5zbGF0ZSgiSVRTTSBDaGFuZ2UiKSB8IGh0bWwgJV08L3N0cm9uZz48L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGbGFnIFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DaGFuZ2VTdGF0ZVNpZ25hbCB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkNoYW5nZVN0YXRlKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlTnVtYmVyIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9WyUgRGF0YS5DaGFuZ2VJRCB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DaGFuZ2VUaXRsZSB8IHRydW5jYXRlKDcwKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD48c3Ryb25nPlslIFRyYW5zbGF0ZSgiV29ya29yZGVyIikgfCBodG1sICVdPC9zdHJvbmc+PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iVmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuV29ya09yZGVyU3RhdGVTaWduYWwgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5Xb3JrT3JkZXJTdGF0ZSkgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5nZU51bWJlciB8IGh0bWwgJV0gLSBbJSBEYXRhLldvcmtPcmRlck51bWJlciB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+WyUgRGF0YS5Xb3JrT3JkZXJUaXRsZSB8IHRydW5jYXRlKDcwKSB8IGh0bWwgJV08L3N0cm9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkJyb3dzZXJMaW5rTWVzc2FnZSIpICVdCiMgU2hvdyBpbmZvLCB0aGF0IGxpbmtzIHdpdGhpbiB0aGUgaWZyYW1lIG11c3QgYmUgY2xpY2tlZCB3aXRoIHN0cmcvY21kL3NoaWZ0IChkZXBlbmRpbmcgb24gdGhlIHVzZWQgYnJvd3NlciBhbmQgb3MpCiMgdG8gb3BlbiB0aGUgbGlua3MgaW4gYSBuZXcgd2luZG93IHdpdGhvdXQgdGhlIHNlY3VyaXR5IHBlcm1pc3Npb25zIGdpdmVuIHRvIHRoZSBpZnJhbWUKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSVRTTU1lc3NhZ2VCcm93c2VyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVG8gb3BlbiBsaW5rcyBpbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIGJsb2NrcywgeW91IG1pZ2h0IG5lZWQgdG8gcHJlc3MgQ3RybCBvciBDbWQgb3IgU2hpZnQga2V5IHdoaWxlIGNsaWNraW5nIHRoZSBsaW5rIChkZXBlbmRpbmcgb24geW91ciBicm93c2VyIGFuZCBPUykuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQ2xvc2UiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkNsb3NlIHRoaXMgbWVzc2FnZSIpIHwgaHRtbCAlXSIgaHJlZj0iIyI+PGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkJyb3dzZXJMaW5rTWVzc2FnZSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJVFNNQ29udGVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIERhdGEuRmllbGQgKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiMgVXNlIHRoZSBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSB0byBwcmV2ZW50IHBsdWdpbnMgYW5kIHNjcmlwdHMgZnJvbSBiZWluZyBleGVjdXRlZCBpbiB0aGUgYnJvd3Nlci4KIyBVc2UgSUUncyAobm9uLXN0YW5kYXJkKSBzZWN1cml0eSBhdHRyaWJ1dGUgdG8gYWNoaWV2ZSBzb21ldGhpbmcgc2ltaWxhciBpbiBvbGRlciBJRSBicm93c2Vycy4gQXBwZW5kIHNlc3Npb24gaW5mbyB0byBVUkwgYmVjYXVzZSBJRSB3aWxsIG5vdCBzZW5kIGNvb2tpZXMuCiMgU2V0ICdhbGxvdy1wb3B1cHMnIHRvIGFsbG93IElFMTArIHRvIG9wZW4gbGlua3MuIHJlZjogaHR0cDovL3d3dy53My5vcmcvaHRtbC93Zy93aWtpL0NoYW5nZVByb3Bvc2Fscy9zYW5kYm94X2FsbG93X3BvcHVwcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlmcmFtZSBzYW5kYm94PSJhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1wb3B1cHMgYWxsb3ctcG9wdXBzLXRvLWVzY2FwZS1zYW5kYm94IiBbJSBEYXRhLk1TU2VjdXJpdHlSZXN0cmljdGVkICVdIGNsYXNzPSJGaWVsZCIgaWQ9IklmcmFtZUlUU01bJSBEYXRhLkZpZWxkIHwgaHRtbCAlXSIgb25sb2FkPSJpZiAodHlwZW9mIElUU00gPT09ICdvYmplY3QnICYmIHR5cGVvZiBJVFNNLkFnZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgSVRTTS5BZ2VudC5DaGFuZ2VNYW5hZ2VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgSVRTTS5BZ2VudC5DaGFuZ2VNYW5hZ2VtZW50Llpvb20gPT09ICdvYmplY3QnKSB7IElUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5ab29tLklmcmFtZUF1dG9IZWlnaHQoJCgnI0lmcmFtZUlUU01bJSBEYXRhLkZpZWxkIHwgaHRtbCAlXScpKTsgfTsiIHNyYz0iIyIgZGF0YS1zcmM9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJab29tO1N1YmFjdGlvbj1IVE1MVmlldztXb3JrT3JkZXJJRD1bJSBEYXRhLldvcmtPcmRlcklEIHwgaHRtbCAlXTtGaWVsZD1bJSBEYXRhLkZpZWxkIHwgaHRtbCAlXTtbJSBFbnYoIlNlc3Npb25OYW1lIikgfCBodG1sICVdPVslIEVudigiU2Vzc2lvbklEIikgfCBodG1sICVdIj48L2lmcmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKCiAgICBDb3JlLkNvbmZpZy5TZXQoJ0lUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudEhUTUxGaWVsZEhlaWdodERlZmF1bHQnLCBwYXJzZUludCgiWyUgQ29uZmlnKCJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHREZWZhdWx0IikgJV0iIHx8IDAsIDEwKSk7CiAgICBDb3JlLkNvbmZpZy5TZXQoJ0lUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudEhUTUxGaWVsZEhlaWdodE1heCcsIHBhcnNlSW50KCJbJSBDb25maWcoIklUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudEhUTUxGaWVsZEhlaWdodE1heCIpICVdIiB8fCAwLCAxMCkpOwoKICAgIC8vIGNvcHkgZGF0YS1zcmMgYXR0cmlidXRlIHRvIHNyYyBhdHRyaWJ1dGUgZm9yIGFsbCBpZnJhbWVzIHRvIGNvcnJlY3RseSBkaXNwbGF5IGl0cyBjb250ZW50cyBhZnRlciBKUyBpcyBmdWxseSBsb2FkZWQKICAgICQoJ2lmcmFtZScpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAkKHRoaXMpLmF0dHIoInNyYyIsICQodGhpcykuYXR0cigiZGF0YS1zcmMiKSApOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiSVRTTUNvbnRlbnQiKSAlXQoKCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkF0dGFjaG1lbnQiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgiV29ya29yZGVyIikgfCBodG1sICVdKTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkF0dGFjaG1lbnRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IkRvd25sb2FkQXR0YWNobWVudCIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiRG93bmxvYWQgQXR0YWNobWVudCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPURvd25sb2FkQXR0YWNobWVudDtGaWxlbmFtZT1bJSBEYXRhLkZpbGVuYW1lIHwgdXJpICVdO1dvcmtPcmRlcklEPVslIERhdGEuV29ya09yZGVySUQgfCB1cmkgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpbGVuYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIFslIERhdGEuRmlsZXNpemUgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIvPgpbJSBSZW5kZXJCbG9ja0VuZCgiQXR0YWNobWVudFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJBdHRhY2htZW50IikgfCBodG1sICVdIChbJSBUcmFuc2xhdGUoIlJlcG9ydCIpIHwgaHRtbCAlXSk6PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZXBvcnRBdHRhY2htZW50Um93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJEb3dubG9hZEF0dGFjaG1lbnQiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIkRvd25sb2FkIEF0dGFjaG1lbnQiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1Eb3dubG9hZEF0dGFjaG1lbnQ7RmlsZW5hbWU9WyUgRGF0YS5GaWxlbmFtZSB8IHVyaSAlXTtUeXBlPVdvcmtPcmRlclJlcG9ydDtXb3JrT3JkZXJJRD1bJSBEYXRhLldvcmtPcmRlcklEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWxlbmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBbJSBEYXRhLkZpbGVzaXplIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlcG9ydEF0dGFjaG1lbnRSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJMaW5rVGFibGVDb21wbGV4IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkxpbmtUYWJsZVN0cmcgJV0KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJMaW5rVGFibGVDb21wbGV4IikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCd1bC5BY3Rpb25zIGEuQXNQb3B1cCcpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgQ29yZS5VSS5Qb3B1cC5PcGVuUG9wdXAgKCQodGhpcykuYXR0cignaHJlZicpLCAnQWN0aW9uJyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7CgogICAgJCgndWwuQWN0aW9ucyBhLkhpc3RvcnlCYWNrJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKCiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIHJlZmVycmVyIHdlIHVzZSBpdCwgc28gdGhlIHByZXZpb3VzIHBhZ2Ugd2lsbCBiZSBsb2FkZWQgZnJvbSB0aGUgc2VydmVyCiAgICAgICAgLy8gYW5kIGlmIHRoZSByZWZlcmVyIGlzIG5vdCB0aGUgY3VycmVudCBwYWdlIChBZ2VudElUU01Xb3JrT3JkZXJab29tKQogICAgICAgIGlmIChkb2N1bWVudC5yZWZlcnJlciAmJiAhZG9jdW1lbnQucmVmZXJyZXIubWF0Y2goL0FnZW50SVRTTVdvcmtPcmRlclpvb20vKSApIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBkb2N1bWVudC5yZWZlcnJlcjsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAvLyBvdGhlcndpc2Ugd2UgdXNlIHRoZSBicm93c2VyIGhpc3RvcnkgdG8gZ28gYmFjayBvbmUgcGFnZSAoY291bGQgYmUgZnJvbSB0aGUgYnJvd3NlciBjYWNoZSkKICAgICAgICBlbHNlIGlmIChoaXN0b3J5Lmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgaGlzdG9yeS5iYWNrKCk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgLy8gaWYgdGhlIHBhZ2Ugd2FzIGxvYWRlZCBmcm9tIGNsaWNraW5nIGEgbGluayBpbiBhbiBlbWFpbCB0aGVyZSBpcyBubyByZWZlcmVyCiAgICAgICAgLy8gYW5kIHRoZW4gd2Ugd2FudCB0byBmb2xsb3cgdGhlIG9yaWdpbmFsIGxpbmsgdGFyZ2V0ICh3aGljaCBpcyB0aGUgY2hhbmdlIHpvb20gKQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9KTsKCiAgICAvLyBJbml0aWFsaXplIGFsbG9jYXRpb24gbGlzdCBmb3IgbGluayBvYmplY3QgdGFibGUuCiAgICBDb3JlLkFnZW50LlRhYmxlRmlsdGVycy5TZXRBbGxvY2F0aW9uTGlzdCgpOwoKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KPGRpdiBpZD0iTWFpbkJveCIgY2xhc3M9IlRpY2tldFZpZXcgQVJJQVJvbGVNYWluIFNvcnRhYmxlIj4KICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgPHVsIGNsYXNzPSJGaWx0ZXIgVGFicyI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkZpbHRlckhlYWRlciIpICVdCiAgICAgICAgICAgIDxsaSBjbGFzcz0iWyUgRGF0YS5DbGFzc0xJIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iWyUgRGF0YS5DbGFzc0EgfCBodG1sICVdIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249WyUgRW52KCJTdWJhY3Rpb24iKSAlXTtGaWx0ZXI9WyUgRGF0YS5GaWx0ZXIgfCB1cmkgJV07U29ydEJ5PVslIERhdGEuU29ydEJ5IHwgdXJpICVdO09yZGVyPVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXTsiPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXSBbJSBEYXRhLkNvdW50U3RyZyB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkZpbHRlckhlYWRlciIpICVdCiAgICAgICAgICAgIDxsaSBjbGFzcz0iQ2xlYXIiPjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICA8ZGl2IGNsYXNzPSJUYWJzIFBhZ2luYXRpb24iPgogICAgICAgICAgICBbJSBEYXRhLlNpdGVOYXZCYXIgJV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgIDx0YWJsZSBjbGFzcz0iSVRTTU92ZXJ2aWV3Ij4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgPHRyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VTdGF0ZVNpZ25hbEhlYWRlciIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VTdGF0ZVNpZ25hbEhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFdvcmtPcmRlclN0YXRlU2lnbmFsSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlslIFRyYW5zbGF0ZSgiU2VydmljZXMiKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFdvcmtPcmRlclN0YXRlU2lnbmFsSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2hhbmdlTnVtYmVySGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNoYW5nZU51bWJlciBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1DaGFuZ2VOdW1iZXI7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnkgfCB1cmkgJV0iPlslIENvbmZpZygiSVRTTUNoYW5nZTo6SG9vayIpICVdPC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VOdW1iZXJIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRXb3JrT3JkZXJOdW1iZXJIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iV29ya09yZGVyTnVtYmVyIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PVdvcmtPcmRlck51bWJlcjtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgQ29uZmlnKCJJVFNNV29ya09yZGVyOjpIb29rIikgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFdvcmtPcmRlck51bWJlckhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFdvcmtPcmRlclRpdGxlSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IldvcmtPcmRlclRpdGxlIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PVdvcmtPcmRlclRpdGxlO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIldvcmtvcmRlciBUaXRsZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkV29ya09yZGVyVGl0bGVIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VUaXRsZUhlYWRlciIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDaGFuZ2VUaXRsZSBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1DaGFuZ2VUaXRsZTtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJDaGFuZ2UgVGl0bGUiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENoYW5nZVRpdGxlSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkV29ya09yZGVyQWdlbnRIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iV29ya09yZGVyQWdlbnRJRCBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1Xb3JrT3JkZXJBZ2VudElEO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIldvcmtvcmRlciBBZ2VudCIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkV29ya09yZGVyQWdlbnRIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VCdWlsZGVySGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNoYW5nZUJ1aWxkZXJJRCBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1DaGFuZ2VCdWlsZGVySUQ7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnkgfCB1cmkgJV0iPlslIFRyYW5zbGF0ZSgiQ2hhbmdlIEJ1aWxkZXIiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENoYW5nZUJ1aWxkZXJIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VNYW5hZ2VySGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNoYW5nZUJ1aWxkZXJJRCBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1DaGFuZ2VNYW5hZ2VySUQ7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnkgfCB1cmkgJV0iPlslIFRyYW5zbGF0ZSgiQ2hhbmdlIE1hbmFnZXIiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENoYW5nZU1hbmFnZXJIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRXb3JrT3JkZXJDb3VudEhlYWRlciIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuPlslIFRyYW5zbGF0ZSgiV29ya29yZGVycyIpIHwgaHRtbCAlXTwvc3Bhbj48L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkV29ya09yZGVyQ291bnRIZWFkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VTdGF0ZUhlYWRlciIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDaGFuZ2VTdGF0ZUlEIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PUNoYW5nZVN0YXRlSUQ7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnkgfCB1cmkgJV0iPlslIFRyYW5zbGF0ZSgiQ2hhbmdlIFN0YXRlIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VTdGF0ZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFdvcmtPcmRlclN0YXRlSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IldvcmtPcmRlclN0YXRlSUQgWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9V29ya09yZGVyU3RhdGVJRDtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJXb3Jrb3JkZXIgU3RhdGUiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFdvcmtPcmRlclN0YXRlSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkV29ya09yZGVyVHlwZUhlYWRlciIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJXb3JrT3JkZXJUeXBlSUQgWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9V29ya09yZGVyVHlwZUlEO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIldvcmtvcmRlciBUeXBlIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRXb3JrT3JkZXJUeXBlSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2F0ZWdvcnlIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2F0ZWdvcnlJRCBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1DYXRlZ29yeUlEO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIkNhdGVnb3J5IikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDYXRlZ29yeUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEltcGFjdEhlYWRlciIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJJbXBhY3RJRCBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1JbXBhY3RJRDtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJJbXBhY3QiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZEltcGFjdEhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFByaW9yaXR5SGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlByaW9yaXR5SUQgWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9UHJpb3JpdHlJRDtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJQcmlvcml0eSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkUHJpb3JpdHlIZWFkZXIiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkU2VydmljZXNIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0aD48c3Bhbj5bJSBUcmFuc2xhdGUoIlNlcnZpY2VzIikgfCBodG1sICVdPC9zcGFuPjwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRTZXJ2aWNlc0hlYWRlciIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRSZXF1ZXN0ZWRUaW1lSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlJlcXVlc3RlZFRpbWUgWyUgRGF0YS5DU1MgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07WyUgRGF0YS5MaW5rU29ydCAlXTtTb3J0Qnk9UmVxdWVzdGVkVGltZTtPcmRlckJ5PVslIERhdGEuT3JkZXJCeSB8IHVyaSAlXSI+WyUgVHJhbnNsYXRlKCJSZXF1ZXN0ZWQgVGltZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkUmVxdWVzdGVkVGltZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFBsYW5uZWRTdGFydFRpbWVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iUGxhbm5lZFN0YXJ0VGltZSBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1QbGFubmVkU3RhcnRUaW1lO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIlBsYW5uZWQgU3RhcnQgVGltZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkUGxhbm5lZFN0YXJ0VGltZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFBsYW5uZWRFbmRUaW1lSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlBsYW5uZWRFbmRUaW1lIFslIERhdGEuQ1NTIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1slIERhdGEuTGlua1NvcnQgJV07U29ydEJ5PVBsYW5uZWRFbmRUaW1lO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIlBsYW5uZWQgRW5kIFRpbWUiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFBsYW5uZWRFbmRUaW1lSGVhZGVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQWN0dWFsU3RhcnRUaW1lSGVhZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkFjdHVhbFN0YXJ0VGltZSBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1BY3R1YWxTdGFydFRpbWU7T3JkZXJCeT1bJSBEYXRhLk9yZGVyQnkgfCB1cmkgJV0iPlslIFRyYW5zbGF0ZSgiQWN0dWFsIFN0YXJ0IFRpbWUiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZEFjdHVhbFN0YXJ0VGltZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEFjdHVhbEVuZFRpbWVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQWN0dWFsRW5kVGltZSBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1BY3R1YWxFbmRUaW1lO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIkFjdHVhbCBFbmQgVGltZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQWN0dWFsRW5kVGltZUhlYWRlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENyZWF0ZVRpbWVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ3JlYXRlVGltZSBbJSBEYXRhLkNTUyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtbJSBEYXRhLkxpbmtTb3J0ICVdO1NvcnRCeT1DcmVhdGVUaW1lO09yZGVyQnk9WyUgRGF0YS5PcmRlckJ5IHwgdXJpICVdIj5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENyZWF0ZVRpbWVIZWFkZXIiKSAlXQogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IlslIERhdGEuVG90YWxDb2x1bW5zIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk5vRGF0YUZvdW5kTXNnIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkIikgJV0KICAgICAgICAgICAgICAgIDx0cj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2hhbmdlU3RhdGVTaWduYWwiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuQ2hhbmdlU3RhdGUpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZsYWcgU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ2hhbmdlU3RhdGVTaWduYWwgfCBodG1sICVdIj4iWyUgRGF0YS5DaGFuZ2VTdGF0ZSB8IGh0bWwgJV0iPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ2hhbmdlU3RhdGVTaWduYWwiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRXb3JrT3JkZXJTdGF0ZVNpZ25hbCIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBUcmFuc2xhdGUoRGF0YS5Xb3JrT3JkZXJTdGF0ZSkgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5Xb3JrT3JkZXJTdGF0ZVNpZ25hbCB8IGh0bWwgJV0iPiJbJSBEYXRhLldvcmtPcmRlclN0YXRlIHwgaHRtbCAlXSI8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRXb3JrT3JkZXJTdGF0ZVNpZ25hbCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZENoYW5nZU51bWJlciIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIERhdGEuQ2hhbmdlTnVtYmVyIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRDaGFuZ2VOdW1iZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRXb3JrT3JkZXJOdW1iZXIiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBEYXRhLkNoYW5nZU51bWJlciB8IGh0bWwgJV0tWyUgRGF0YS5Xb3JrT3JkZXJOdW1iZXIgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFdvcmtPcmRlck51bWJlciIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFdvcmtPcmRlclRpdGxlIikgJV0KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+WyUgRGF0YS5Xb3JrT3JkZXJUaXRsZSB8IHRydW5jYXRlKDQwKSB8IGh0bWwgJV08L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkV29ya09yZGVyVGl0bGUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VUaXRsZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBEYXRhLkNoYW5nZVRpdGxlIHwgaHRtbCAlXSI+WyUgRGF0YS5DaGFuZ2VUaXRsZSB8IHRydW5jYXRlKDQwKSB8IGh0bWwgJV08L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ2hhbmdlVGl0bGUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRXb3JrT3JkZXJBZ2VudCIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSJbJSBEYXRhLldvcmtPcmRlckFnZW50VXNlckxvZ2luIHwgaHRtbCAlXSBbJSBEYXRhLldvcmtPcmRlckFnZW50TGVmdFBhcmVudGhlc2lzIHwgaHRtbCAlXVslIERhdGEuV29ya09yZGVyQWdlbnRVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLldvcmtPcmRlckFnZW50VXNlckxhc3RuYW1lIHwgaHRtbCAlXVslIERhdGEuV29ya09yZGVyQWdlbnRSaWdodFBhcmVudGhlc2lzIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLldvcmtPcmRlckFnZW50VXNlckxvZ2luIHwgdHJ1bmNhdGUoMTUpIHwgaHRtbCAlXSBbJSBEYXRhLldvcmtPcmRlckFnZW50TGVmdFBhcmVudGhlc2lzIHwgaHRtbCAlXVslIERhdGEuV29ya09yZGVyQWdlbnRVc2VyRmlyc3RuYW1lIHwgdHJ1bmNhdGUoMTUpIHwgaHRtbCAlXSBbJSBEYXRhLldvcmtPcmRlckFnZW50VXNlckxhc3RuYW1lIHwgdHJ1bmNhdGUoMTUpIHwgaHRtbCAlXVslIERhdGEuV29ya09yZGVyQWdlbnRSaWdodFBhcmVudGhlc2lzIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkV29ya09yZGVyQWdlbnQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VCdWlsZGVyIikgJV0KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuQ2hhbmdlQnVpbGRlclVzZXJMb2dpbiB8IGh0bWwgJV0gWyUgRGF0YS5DaGFuZ2VCdWlsZGVyTGVmdFBhcmVudGhlc2lzIHwgaHRtbCAlXVslIERhdGEuQ2hhbmdlQnVpbGRlclVzZXJGaXJzdG5hbWUgfCBodG1sICVdIFslIERhdGEuQ2hhbmdlQnVpbGRlclVzZXJMYXN0bmFtZSB8IGh0bWwgJV1bJSBEYXRhLkNoYW5nZUJ1aWxkZXJSaWdodFBhcmVudGhlc2lzIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5nZUJ1aWxkZXJVc2VyTG9naW4gfCB0cnVuY2F0ZSgxNSkgfCBodG1sICVdIFslIERhdGEuQ2hhbmdlQnVpbGRlckxlZnRQYXJlbnRoZXNpcyB8IGh0bWwgJV1bJSBEYXRhLkNoYW5nZUJ1aWxkZXJVc2VyRmlyc3RuYW1lIHwgdHJ1bmNhdGUoMTUpIHwgaHRtbCAlXSBbJSBEYXRhLkNoYW5nZUJ1aWxkZXJVc2VyTGFzdG5hbWUgfCB0cnVuY2F0ZSgxNSkgfCBodG1sICVdWyUgRGF0YS5DaGFuZ2VCdWlsZGVyUmlnaHRQYXJlbnRoZXNpcyB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENoYW5nZUJ1aWxkZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDaGFuZ2VNYW5hZ2VyIikgJV0KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IlslIERhdGEuQ2hhbmdlTWFuYWdlclVzZXJMb2dpbiB8IGh0bWwgJV0gWyUgRGF0YS5DaGFuZ2VNYW5hZ2VyTGVmdFBhcmVudGhlc2lzIHwgaHRtbCAlXVslIERhdGEuQ2hhbmdlTWFuYWdlclVzZXJGaXJzdG5hbWUgfCBodG1sICVdIFslIERhdGEuQ2hhbmdlTWFuYWdlclVzZXJMYXN0bmFtZSB8IGh0bWwgJV1bJSBEYXRhLkNoYW5nZU1hbmFnZXJSaWdodFBhcmVudGhlc2lzIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5nZU1hbmFnZXJVc2VyTG9naW4gfCB0cnVuY2F0ZSgxNSkgfCBodG1sICVdIFslIERhdGEuQ2hhbmdlTWFuYWdlckxlZnRQYXJlbnRoZXNpcyB8IGh0bWwgJV1bJSBEYXRhLkNoYW5nZU1hbmFnZXJVc2VyRmlyc3RuYW1lIHwgdHJ1bmNhdGUoMTUpIHwgaHRtbCAlXSBbJSBEYXRhLkNoYW5nZU1hbmFnZXJVc2VyTGFzdG5hbWUgfCB0cnVuY2F0ZSgxNSkgfCBodG1sICVdWyUgRGF0YS5DaGFuZ2VNYW5hZ2VyUmlnaHRQYXJlbnRoZXNpcyB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENoYW5nZU1hbmFnZXIiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRXb3JrT3JkZXJDb3VudCIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDZW50ZXIiPlslIERhdGEuV29ya09yZGVyQ291bnQgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFdvcmtPcmRlckNvdW50IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2hhbmdlU3RhdGUiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBUcmFuc2xhdGUoRGF0YS5DaGFuZ2VTdGF0ZSkgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENoYW5nZVN0YXRlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkV29ya09yZGVyU3RhdGUiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBUcmFuc2xhdGUoRGF0YS5Xb3JrT3JkZXJTdGF0ZSkgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFdvcmtPcmRlclN0YXRlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkV29ya09yZGVyVHlwZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIFRyYW5zbGF0ZShEYXRhLldvcmtPcmRlclR5cGUpIHwgaHRtbCAlXTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRXb3JrT3JkZXJUeXBlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQ2F0ZWdvcnkiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBUcmFuc2xhdGUoRGF0YS5DYXRlZ29yeSkgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZENhdGVnb3J5IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkSW1wYWN0IikgJV0KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+WyUgVHJhbnNsYXRlKERhdGEuSW1wYWN0KSB8IGh0bWwgJV08L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkSW1wYWN0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkUHJpb3JpdHkiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBUcmFuc2xhdGUoRGF0YS5Qcmlvcml0eSkgfCBodG1sICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFByaW9yaXR5IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkU2VydmljZXMiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJJVFNNRmxhZyI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFNlcnZpY2VzU3ViRWxlbWVudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iVmFsdWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ3VySW5jaVNpZ25hbCB8IGh0bWwgJV0iPiJbJSBEYXRhLkN1cnJJbmNpU3RhdGUgfCBodG1sICVdIjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFNlcnZpY2VzU3ViRWxlbWVudCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFNlcnZpY2VzU3ViRWxlbWVudEVtcHR5IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4mbmJzcDs8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkU2VydmljZXNTdWJFbGVtZW50RW1wdHkiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRTZXJ2aWNlcyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZFJlcXVlc3RlZFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5bJSBEYXRhLlJlcXVlc3RlZFRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRSZXF1ZXN0ZWRUaW1lIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkUGxhbm5lZFN0YXJ0VGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIERhdGEuUGxhbm5lZFN0YXJ0VGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZFBsYW5uZWRTdGFydFRpbWUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRQbGFubmVkRW5kVGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIERhdGEuUGxhbm5lZEVuZFRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+ClslIFJlbmRlckJsb2NrRW5kKCJSZWNvcmRQbGFubmVkRW5kVGltZSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJlY29yZEFjdHVhbFN0YXJ0VGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIERhdGEuQWN0dWFsU3RhcnRUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQWN0dWFsU3RhcnRUaW1lIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVjb3JkQWN0dWFsRW5kVGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlslIERhdGEuQWN0dWFsRW5kVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlY29yZEFjdHVhbEVuZFRpbWUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZWNvcmRDcmVhdGVUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+WyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkQ3JlYXRlVGltZSIpICVdCiAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmVjb3JkIikgJV0KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICA8L3RhYmxlPgogICAgPC9kaXY+CjwvZGl2Pgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIldvcmtPcmRlckdyYXBoIikgJV0KPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KICAgIC5MYWJlbE1hcmdpbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IFslIERhdGEuTGFiZWxNYXJnaW4gfCBodG1sICVdcHg7CiAgICB9CgogICAgLlJUTCAuTGFiZWxNYXJnaW4gewogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICAgIG1hcmdpbi1yaWdodDogWyUgRGF0YS5MYWJlbE1hcmdpbiB8IGh0bWwgJV1weDsKICAgIH0KCiAgICBkaXYuV29ya29yZGVyTGFiZWwgewogICAgICAgIHdpZHRoOiBbJSBEYXRhLkxhYmVsV2lkdGggfCBodG1sICVdcHg7CiAgICB9CgovKiBbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDU1NXb3JrT3JkZXJUeXBlIikgJV0gKi8KICAgIHNwYW4uWyUgRGF0YS5Xb3JrT3JkZXJUeXBlTmFtZSB8IGh0bWwgJV0geyBiYWNrZ3JvdW5kLWNvbG9yOiBbJSBEYXRhLldvcmtPcmRlclR5cGVDb2xvciB8IGh0bWwgJV07IH0KLyogWyUgUmVuZGVyQmxvY2tFbmQoIkNTU1dvcmtPcmRlclR5cGUiKSAlXSAqLwoKLyogWyUgUmVuZGVyQmxvY2tTdGFydCgiQ1NTVGltZUxpbmUiKSAlXSAqLwogICAgZGl2LlRpbWVsaW5lIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBbJSBEYXRhLlRpbWVMaW5lQ29sb3IgfCBodG1sICVdOwogICAgICAgIGxlZnQ6IFslIERhdGEuVGltZUxpbmVMZWZ0IHwgaHRtbCAlXSU7CiAgICAgICAgd2lkdGg6IFslIERhdGEuVGltZUxpbmVXaWR0aCB8IGh0bWwgJV1weDsKICAgIH0KCiAgICAuUlRMIGRpdi5UaW1lbGluZSB7CiAgICAgICAgbGVmdDogYXV0bzsKICAgICAgICByaWdodDogWyUgRGF0YS5UaW1lTGluZUxlZnQgfCBodG1sICVdJTsKICAgIH0KLyogWyUgUmVuZGVyQmxvY2tFbmQoIkNTU1RpbWVMaW5lIikgJV0gKi8KPC9zdHlsZT4KCjxkaXYgY2xhc3M9IldvcmtvcmRlckdyYXBoQm94Ij4KICAgIDxkaXYgY2xhc3M9IldvcmtvcmRlckdyYXBoIj4KICAgICAgICA8ZGl2IGNsYXNzPSJMaW5lc1NjYWxlQm94Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iTGluZXNTY2FsZSBMYWJlbE1hcmdpbiI+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRpbWVMaW5lIikgJV0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlRpbWVsaW5lIj4mbmJzcDs8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpbWVMaW5lIikgJV0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNjYWxlVmVydGljYWxMaW5lIFNjYWxlMCI+Jm5ic3A7PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTY2FsZVZlcnRpY2FsTGluZSBTY2FsZTIwIj4mbmJzcDs8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNjYWxlVmVydGljYWxMaW5lIFNjYWxlNDAiPiZuYnNwOzwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU2NhbGVWZXJ0aWNhbExpbmUgU2NhbGU2MCI+Jm5ic3A7PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTY2FsZVZlcnRpY2FsTGluZSBTY2FsZTgwIj4mbmJzcDs8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNjYWxlVmVydGljYWxMaW5lIFNjYWxlMTAwIj4mbmJzcDs8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJXb3JrT3JkZXJJdGVtIikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJXb3Jrb3JkZXJMYWJlbCIgdGl0bGU9IlslIERhdGEuV29ya09yZGVyTGFiZWwgfCBodG1sICVdIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5Xb3JrT3JkZXJTdGF0ZVNpZ25hbCB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLldvcmtPcmRlclN0YXRlKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRJVFNNV29ya09yZGVyWm9vbTtXb3JrT3JkZXJJRD1bJSBEYXRhLldvcmtPcmRlcklEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgIFslIERhdGEuV29ya09yZGVyTnVtYmVyIHwgaHRtbCAlXS4KWyUgUmVuZGVyQmxvY2tTdGFydCgiV29ya09yZGVySXRlbVN0YXRlIikgJV0KICAgICAgICAgICAgICAgIC0gWyUgVHJhbnNsYXRlKERhdGEuV29ya09yZGVyU3RhdGUpIHwgaHRtbCAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiV29ya09yZGVySXRlbVN0YXRlIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiV29ya09yZGVySXRlbVRpdGxlIikgJV0KICAgICAgICAgICAgICAgIC0gWyUgRGF0YS5Xb3JrT3JkZXJUaXRsZSB8IHRydW5jYXRlKDIwKSB8IGh0bWwgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIldvcmtPcmRlckl0ZW1UaXRsZSIpICVdCiAgICAgICAgICAgIDwvYT4KICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIldvcmtPcmRlckl0ZW1HcmFwaCIpICVdCiAgICAgICAgPGRpdiBjbGFzcz0iV29ya29yZGVyIExhYmVsTWFyZ2luIj4KICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlclpvb207V29ya09yZGVySUQ9WyUgRGF0YS5Xb3JrT3JkZXJJRCB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5Xb3JrT3JkZXJUeXBlIHwgaHRtbCAlXV9wbGFubmVkIFslIERhdGEuV29ya09yZGVyT3BhY2l0eSAlXSIgc3R5bGU9IlslIERhdGEuR3JhcGhEaXJlY3Rpb24gfCBodG1sICVdOiBbJSBEYXRhLlBsYW5uZWRQYWRkaW5nIHwgaHRtbCAlXSU7IHdpZHRoOiBbJSBEYXRhLlBsYW5uZWRUaWNrcyB8IGh0bWwgJV0lIj4mbmJzcDs8L3NwYW4+CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5Xb3JrT3JkZXJUeXBlIHwgaHRtbCAlXV9hY3R1YWwgWyUgRGF0YS5Xb3JrT3JkZXJPcGFjaXR5ICVdIiBzdHlsZT0iWyUgRGF0YS5HcmFwaERpcmVjdGlvbiB8IGh0bWwgJV06IFslIERhdGEuQWN0dWFsUGFkZGluZyB8IGh0bWwgJV0lOyB3aWR0aDogWyUgRGF0YS5BY3R1YWxUaWNrcyB8IGh0bWwgJV0lIj4mbmJzcDs8L3NwYW4+CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV29ya29yZGVyRGV0YWlscyI+CiAgICAgICAgICAgICAgICA8aDM+WyUgVHJhbnNsYXRlKCJXb3Jrb3JkZXIgSW5mb3JtYXRpb24iKSB8IGh0bWwgJV08L2gzPgogICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiV29ya09yZGVyVGl0bGUiKSAlXQogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlRpdGxlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLldvcmtPcmRlclRpdGxlIHwgdHJ1bmNhdGUoNDApIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJXb3JrT3JkZXJUaXRsZSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJXb3JrT3JkZXJTdGF0ZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiU3RhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIFRyYW5zbGF0ZShEYXRhLldvcmtPcmRlclN0YXRlKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiV29ya09yZGVyU3RhdGUiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiV29ya09yZGVyVHlwZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgVHJhbnNsYXRlKERhdGEuV29ya09yZGVyVHlwZSkgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIldvcmtPcmRlclR5cGUiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiRHluYW1pY0ZpZWxkIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgRGF0YS5WYWx1ZSAlXTwvcD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJEeW5hbWljRmllbGQiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiV29ya09yZGVyQWdlbnRCbG9jayIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiV29ya29yZGVyIEFnZW50IikgfCBodG1sICVdOjwvbGFiZWw+ClslIFJlbmRlckJsb2NrU3RhcnQoIkVtcHR5V29ya09yZGVyQWdlbnQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+LTwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIkVtcHR5V29ya09yZGVyQWdlbnQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJXb3JrT3JkZXJBZ2VudCIpICVdCiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Xb3JrT3JkZXJBZ2VudFVzZXJMb2dpbiB8IHRydW5jYXRlKDIwKSB8IGh0bWwgJV0gKFslIERhdGEuV29ya09yZGVyQWdlbnRVc2VyRmlyc3RuYW1lIHwgaHRtbCAlXSBbJSBEYXRhLldvcmtPcmRlckFnZW50VXNlckxhc3RuYW1lIHwgaHRtbCAlXSkKICAgICAgICAgICAgICAgICAgICA8L3A+ClslIFJlbmRlckJsb2NrRW5kKCJXb3JrT3JkZXJBZ2VudCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiV29ya09yZGVyQWdlbnRCbG9jayIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbnN0cnVjdGlvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiSW5zdHJ1Y3Rpb24iKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuSW5zdHJ1Y3Rpb25QbGFpbiB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5zdHJ1Y3Rpb24iKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUmVwb3J0IikgJV0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJSZXBvcnQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuUmVwb3J0UGxhaW4gfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlcG9ydCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJQbGFubmVkRWZmb3J0IikgJV0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJQbGFubmVkIEVmZm9ydCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgRGF0YS5QbGFubmVkRWZmb3J0IHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJQbGFubmVkRWZmb3J0IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjY291bnRlZFRpbWUiKSAlXQogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkFjY291bnRlZCBUaW1lIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLkFjY291bnRlZFRpbWUgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjY291bnRlZFRpbWUiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUGxhbm5lZFN0YXJ0VGltZSIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiUGxhbm5lZCBTdGFydCBUaW1lIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLlBsYW5uZWRTdGFydFRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvcD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJQbGFubmVkU3RhcnRUaW1lIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlBsYW5uZWRFbmRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJQbGFubmVkIEVuZCBUaW1lIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj5bJSBEYXRhLlBsYW5uZWRFbmRUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUGxhbm5lZEVuZFRpbWUiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0dWFsU3RhcnRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJBY3R1YWwgU3RhcnQgVGltZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+WyUgRGF0YS5BY3R1YWxTdGFydFRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXVslIERhdGEuRW1wdHlBY3R1YWxTdGFydFRpbWUgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdHVhbFN0YXJ0VGltZSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3R1YWxFbmRUaW1lIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJBY3R1YWwgRW5kIFRpbWUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuQWN0dWFsRW5kVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdWyUgRGF0YS5FbXB0eUFjdHVhbEVuZFRpbWUgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdHVhbEVuZFRpbWUiKSAlXQoKICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiV29ya09yZGVySXRlbUdyYXBoIikgJV0KICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJXb3JrT3JkZXJJdGVtIikgJV0KICAgIDwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU2NhbGUiKSAlXQogICAgPGRpdiBjbGFzcz0iTGFiZWxNYXJnaW4iPgogICAgICAgIDxkaXYgY2xhc3M9IlNjYWxlSG9yaXpvbnRhbCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNjYWxlRW50cnkgU2NhbGUwIFNjYWxlRW50cnlUYWlsIj5bJSBEYXRhLlN0YXJ0VGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIlNjYWxlTGFiZWwiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJTY2FsZUVudHJ5IFslIERhdGEuU2NhbGVDbGFzcyAlXSI+WyUgRGF0YS5TY2FsZUxhYmVsIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNjYWxlTGFiZWwiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJTY2FsZUVudHJ5IFNjYWxlOTAgU2NhbGVFbnRyeVRyYWlsIj5bJSBEYXRhLkVuZFRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTY2FsZSIpICVdCjwvZGl2PgpbJSBXUkFQUEVSIEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwovKmdsb2JhbCBJVFNNOiB0cnVlICovCiAgICBJVFNNLkFnZW50LkNoYW5nZU1hbmFnZW1lbnQuV29ya29yZGVyR3JhcGguSW5pdCgpOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIldvcmtPcmRlckdyYXBoIikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OkV2ZW50SGFuZGxlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKdXNlIHZhcnMgcXcoQElTQSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpFbmNvZGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01DaGFuZ2VDSVBBbGxvY2F0ZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNU3RhdGVNYWNoaW5lJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpNYWluJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VXNlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OlZhbGlkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VmlydHVhbEZTJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZSAtIGNoYW5nZSBsaWIKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGZ1bmN0aW9ucyBmb3IgY2hhbmdlcyBpbiBJVFNNQ2hhbmdlTWFuYWdlbWVudC4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgc2V0IHRoZSBkZWJ1ZyBmbGFnCiAgICAkU2VsZi0+e0RlYnVnfSA9ICRQYXJhbXtEZWJ1Z30gfHwgMDsKCiAgICAjIGdldCB0aGUgY2FjaGUgdHlwZSBhbmQgVFRMIChpbiBzZWNvbmRzKQogICAgJFNlbGYtPntDYWNoZVR5cGV9ID0gJ0lUU01DaGFuZ2VNYW5hZ2VtZW50JzsKICAgICRTZWxmLT57Q2FjaGVUVEx9ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSVRTTUNoYW5nZTo6Q2FjaGVUVEwnKSAqIDYwOwoKICAgIEBJU0EgPSAoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpFdmVudEhhbmRsZXInLAogICAgKTsKCiAgICAjIGluaXQgb2YgZXZlbnQgaGFuZGxlcgogICAgJFNlbGYtPkV2ZW50SGFuZGxlckluaXQoCiAgICAgICAgQ29uZmlnID0+ICdJVFNNQ2hhbmdlOjpFdmVudE1vZHVsZScsCiAgICApOwoKICAgICMgbG9hZCBjaGFuZ2UgbnVtYmVyIGdlbmVyYXRvcgogICAgbXkgJEdlbmVyYXRvck1vZHVsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSVRTTUNoYW5nZTo6TnVtYmVyR2VuZXJhdG9yJykKICAgICAgICB8fCAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Ok51bWJlcjo6RGF0ZUNoZWNrc3VtJzsKICAgIGlmICggISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmVCYXNlQ2xhc3MoJEdlbmVyYXRvck1vZHVsZSkgKSB7CiAgICAgICAgZGllICJDYW4ndCBsb2FkIGNoYW5nZSBudW1iZXIgZ2VuZXJhdG9yIGJhY2tlbmQgbW9kdWxlICRHZW5lcmF0b3JNb2R1bGUhICRAIjsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSB0eXBlCiAgICAkU2VsZi0+e0RCVHlwZX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+eydEQjo6VHlwZSd9IHx8ICcnOwogICAgJFNlbGYtPntEQlR5cGV9ID0gbGMgJFNlbGYtPntEQlR5cGV9OwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gQ2hhbmdlQWRkKCkKCkFkZCBhIG5ldyBjaGFuZ2UuIFRoZSBVc2VySUQgaXMgdGhlIG9ubHkgcmVxdWlyZWQgcGFyYW1ldGVyLgpJbnRlcm5hbGx5IGZpcnN0IGEgbWluaW1hbCBjaGFuZ2UgaXMgY3JlYXRlZCwgdGhlbiBDaGFuZ2VVcGRhdGUoKSBpcyBjYWxsZWQuCgogICAgbXkgJENoYW5nZUlEID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCm9yCgogICAgbXkgJENoYW5nZUlEID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgIENoYW5nZVRpdGxlICAgICA9PiAnUmVwbGFjZW1lbnQgb2YgbWFpbCBzZXJ2ZXInLCAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBEZXNjcmlwdGlvbiAgICAgPT4gJ05ldyBtYWlsIHNlcnZlciBpcyBmYXN0ZXInLCAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSnVzdGlmaWNhdGlvbiAgID0+ICdPbGQgbWFpbCBzZXJ2ZXIgdG9vIHNsb3cnLCAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIENoYW5nZVN0YXRlSUQgICA9PiA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkgb3IgQ2hhbmdlU3RhdGUgPT4gJ2FjY2VwdGVkJwogICAgICAgIENoYW5nZVN0YXRlICAgICA9PiAnYWNjZXB0ZWQnLCAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkgb3IgQ2hhbmdlU3RhdGVJRCA9PiA0CiAgICAgICAgQ2hhbmdlTWFuYWdlcklEID0+IDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIENoYW5nZUJ1aWxkZXJJRCA9PiA2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDYXRlZ29yeUlEICAgICAgPT4gNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIG9yIENhdGVnb3J5ID0+ICczIG5vcm1hbCcKICAgICAgICBDYXRlZ29yeSAgICAgICAgPT4gJzMgbm9ybWFsJywgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIG9yIENhdGVnb3J5SUQgPT4gNAogICAgICAgIEltcGFjdElEICAgICAgICA9PiA4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkgb3IgSW1wYWN0ID0+ICc0IGhpZ2gnCiAgICAgICAgSW1wYWN0ICAgICAgICAgID0+ICc0IGhpZ2gnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBvciBJbXBhY3RJRCA9PiA1CiAgICAgICAgUHJpb3JpdHlJRCAgICAgID0+IDksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBvciBQcmlvcml0eSA9PiAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgUHJpb3JpdHkgICAgICAgID0+ICc1IHZlcnkgaGlnaCcsICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBvciBQcmlvcml0eUlEID0+IDYKICAgICAgICBDQUJBZ2VudHMgICAgICAgPT4gWyAxLCAyLCA0IF0sICAgICAjIFVzZXJJRHMgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQ0FCQ3VzdG9tZXJzICAgID0+IFsgJ3R0JywgJ21tJyBdLCAgIyBDdXN0b21lclVzZXJJRHMgICMgKG9wdGlvbmFsKQogICAgICAgIFJlcXVlc3RlZFRpbWUgICA9PiAnMjAwNi0wMS0xOSAyMzo1OTo1OScsICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBEeW5hbWljRmllbGRfWCAgPT4gJ1N1bicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRHluYW1pY0ZpZWxkX1kgID0+ICdFYXJ0aCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBDaGFuZ2VBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGEgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGFyZ3VtZW50cyB3aGljaCBtaWdodCBjb250YWluIEhUTUwgbWFya3VwCiAgICBBUkdVTUVOVDoKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KERlc2NyaXB0aW9uIEp1c3RpZmljYXRpb24pKSB7CgogICAgICAgIG5leHQgQVJHVU1FTlQgaWYgIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fTsKCiAgICAgICAgJFBhcmFteyIke0FyZ3VtZW50fVBsYWluIn0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvQXNjaWkoCiAgICAgICAgICAgIFN0cmluZyA9PiAkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICApOwoKICAgICAgICAjIEV2ZW4gd2hlbiBwYXNzZWQgYSBwbGFpbiBBU0NJSSBzdHJpbmcsCiAgICAgICAgIyBUb0FzY2lpKCkgY2FuIHJldHVybiBhIG5vbi11dGY4IHN0cmluZyB3aXRoIGNoYXJzIGluIHRoZSBleHRlbmRlZCByYW5nZS4KICAgICAgICAjIFVwZ3JhZGUgdG8gdXRmLTggaW4gb3JkZXIgdG8gY29tcGx5IHRvIHRoZSBPVFJTLWNvbnZlbnRpb24uCiAgICAgICAgdXRmODo6dXBncmFkZSggJFBhcmFteyIke0FyZ3VtZW50fVBsYWluIn0gKTsKICAgIH0KCiAgICAjIGNoZWNrIHRoZSBwYXJhbWV0ZXJzCiAgICByZXR1cm4gaWYgISRTZWxmLT5fQ2hlY2tDaGFuZ2VQYXJhbXMoJVBhcmFtKTsKCiAgICAjIHRyaWdnZXIgQ2hhbmdlQWRkUHJlLUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdDaGFuZ2VBZGRQcmUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNyZWF0ZSBhIG5ldyBjaGFuZ2UgbnVtYmVyCiAgICBteSAkQ2hhbmdlTnVtYmVyID0gJFNlbGYtPkNoYW5nZU51bWJlckNyZWF0ZSgpOwoKICAgICMgZ2V0IGluaXRpYWwgY2hhbmdlIHN0YXRlIGlkCiAgICBteSAkQ2hhbmdlU3RhdGVJRCA9IGRlbGV0ZSAkUGFyYW17Q2hhbmdlU3RhdGVJRH07CiAgICBpZiAoICEkQ2hhbmdlU3RhdGVJRCApIHsKICAgICAgICBteSAkTmV4dFN0YXRlSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01TdGF0ZU1hY2hpbmUnKS0+U3RhdGVUcmFuc2l0aW9uR2V0KAogICAgICAgICAgICBTdGF0ZUlEID0+IDAsCiAgICAgICAgICAgIENsYXNzICAgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICk7CiAgICAgICAgJENoYW5nZVN0YXRlSUQgPSAkTmV4dFN0YXRlSURzLT5bMF07CiAgICB9CgogICAgIyBnZXQgZGVmYXVsdCBDYXRlZ29yeSBpZiBub3QgZGVmaW5lZAogICAgbXkgJENhdGVnb3J5SUQgPSBkZWxldGUgJFBhcmFte0NhdGVnb3J5SUR9OwogICAgaWYgKCAhJENhdGVnb3J5SUQgKSB7CiAgICAgICAgbXkgJERlZmF1bHRDYXRlZ29yeSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSVRTTUNoYW5nZTo6Q2F0ZWdvcnk6OkRlZmF1bHQnKTsKICAgICAgICAkQ2F0ZWdvcnlJRCA9ICRTZWxmLT5DaGFuZ2VDSVBMb29rdXAoCiAgICAgICAgICAgIENJUCAgPT4gJERlZmF1bHRDYXRlZ29yeSwKICAgICAgICAgICAgVHlwZSA9PiAnQ2F0ZWdvcnknLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZGVmYXVsdCBJbXBhY3QgaWYgbm90IGRlZmluZWQKICAgIG15ICRJbXBhY3RJRCA9IGRlbGV0ZSAkUGFyYW17SW1wYWN0SUR9OwogICAgaWYgKCAhJEltcGFjdElEICkgewogICAgICAgIG15ICREZWZhdWx0SW1wYWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ2hhbmdlOjpJbXBhY3Q6OkRlZmF1bHQnKTsKICAgICAgICAkSW1wYWN0SUQgPSAkU2VsZi0+Q2hhbmdlQ0lQTG9va3VwKAogICAgICAgICAgICBDSVAgID0+ICREZWZhdWx0SW1wYWN0LAogICAgICAgICAgICBUeXBlID0+ICdJbXBhY3QnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZGVmYXVsdCBQcmlvcml0eSBpZiBub3QgZGVmaW5lZAogICAgbXkgJFByaW9yaXR5SUQgPSBkZWxldGUgJFBhcmFte1ByaW9yaXR5SUR9OwogICAgaWYgKCAhJFByaW9yaXR5SUQgKSB7CiAgICAgICAgJFByaW9yaXR5SUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNoYW5nZUNJUEFsbG9jYXRlJyktPlByaW9yaXR5QWxsb2NhdGlvbkdldCgKICAgICAgICAgICAgQ2F0ZWdvcnlJRCA9PiAkQ2F0ZWdvcnlJRCwKICAgICAgICAgICAgSW1wYWN0SUQgICA9PiAkSW1wYWN0SUQsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGlmIG5vIGNoYW5nZSBidWlsZGVyIGlkIHdhcyBnaXZlbiwgdGFrZSB0aGUgdXNlciBpZAogICAgbXkgJENoYW5nZUJ1aWxkZXJJRCA9ICRQYXJhbXtDaGFuZ2VCdWlsZGVySUR9IHx8ICRQYXJhbXtVc2VySUR9OwoKICAgICMgYWRkIGNoYW5nZSB0byBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBjaGFuZ2VfaXRlbSAnCiAgICAgICAgICAgIC4gJyhjaGFuZ2VfbnVtYmVyLCBjaGFuZ2Vfc3RhdGVfaWQsIGNoYW5nZV9idWlsZGVyX2lkLCAnCiAgICAgICAgICAgIC4gJ2NhdGVnb3J5X2lkLCBpbXBhY3RfaWQsIHByaW9yaXR5X2lkLCAnCiAgICAgICAgICAgIC4gJ2NyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpICcKICAgICAgICAgICAgLiAnVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRDaGFuZ2VOdW1iZXIsIFwkQ2hhbmdlU3RhdGVJRCwgXCRDaGFuZ2VCdWlsZGVySUQsCiAgICAgICAgICAgIFwkQ2F0ZWdvcnlJRCwgICBcJEltcGFjdElELCAgICAgIFwkUHJpb3JpdHlJRCwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgXSwKICAgICk7CgogICAgIyBnZXQgY2hhbmdlIGlkCiAgICBteSAkQ2hhbmdlSUQgPSAkU2VsZi0+Q2hhbmdlTG9va3VwKAogICAgICAgIENoYW5nZU51bWJlciA9PiAkQ2hhbmdlTnVtYmVyLAogICAgKTsKCiAgICByZXR1cm4gaWYgISRDaGFuZ2VJRDsKCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgZm9yIG15ICRLZXkgKAogICAgICAgICdDaGFuZ2VHZXQ6OklEOjonIC4gJENoYW5nZUlELAogICAgICAgICdDaGFuZ2VMaXN0JywKICAgICAgICAnQ2hhbmdlTG9va3VwOjpDaGFuZ2VJRDo6JyAuICRDaGFuZ2VJRCwKICAgICAgICAnQ2hhbmdlTG9va3VwOjpDaGFuZ2VOdW1iZXI6OicgLiAkQ2hhbmdlTnVtYmVyLAogICAgICAgICkKICAgIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJEtleSwKICAgICAgICApOwogICAgfQoKICAgICMgdHJpZ2dlciBDaGFuZ2VBZGRQb3N0LUV2ZW50CiAgICAjICh5ZXMsIHdlIHdhbnQgZG8gZG8gdGhpcyBiZWZvcmUgdGhlIENoYW5nZVVwZGF0ZSEpCiAgICAjIG92ZXJyaWRlIHRoZSBhY3R1YWxseSBwYXNzZWQgY2hhbmdlIHN0YXRlIHdpdGggdGhlIGluaXRpYWwgY2hhbmdlIHN0YXRlCiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdDaGFuZ2VBZGRQb3N0JywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQ2hhbmdlSUQgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIENhdGVnb3J5SUQgICAgPT4gJENhdGVnb3J5SUQsCiAgICAgICAgICAgIEltcGFjdElEICAgICAgPT4gJEltcGFjdElELAogICAgICAgICAgICBQcmlvcml0eUlEICAgID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VTdGF0ZUlELAogICAgICAgICAgICBDaGFuZ2VOdW1iZXIgID0+ICRDaGFuZ2VOdW1iZXIsCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgdXBkYXRlIGNoYW5nZSB3aXRoIHJlbWFpbmluZyBwYXJhbWV0ZXJzCiAgICAjIHRoZSBhbHJlYWR5IGhhbmRsZXMgcGFyYW1zIGhhdmUgYmVlbiBkZWxldGVkIGZyb20gJVBhcmFtCiAgICBteSAkVXBkYXRlU3VjY2VzcyA9ICRTZWxmLT5DaGFuZ2VVcGRhdGUoCiAgICAgICAgJVBhcmFtLAogICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICk7CgogICAgIyBjaGVjayB1cGRhdGUgZXJyb3IKICAgIGlmICggISRVcGRhdGVTdWNjZXNzICkgewoKICAgICAgICAjIGRlbGV0ZSBjaGFuZ2UgaWYgaXQgY291bGQgbm90IGJlIHVwZGF0ZWQKICAgICAgICAkU2VsZi0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gJENoYW5nZUlEOwp9Cgo9aXRlbSBDaGFuZ2VVcGRhdGUoKQoKVXBkYXRlIGEgY2hhbmdlLgpMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQgZnJvbSBDPENoYW5nZVRpdGxlPi4KUGFzc2luZyB1bmRlZmluZWQgdmFsdWVzIGlzIGdlbmVyYWxseSBub3QgYWxsb3dlZC4KQW4gZXhjZXB0aW9uIGlzIHRoZSBwYXJhbWV0ZXIgQzxSZXF1ZXN0ZWRUaW1lPiwgd2hlcmUgdGhlIHVuZGVmaW5lZCB2YWx1ZQppbmRpY2F0ZXMgdGhhdCByZXF1ZXN0ZWQgdGltZSBvZiB0aGUgY2hhbmdlIHNob3VsZCBiZSBjbGVhcmVkLgoKICAgIG15ICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlVXBkYXRlKAogICAgICAgIENoYW5nZUlEICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgQ2hhbmdlVGl0bGUgICAgICAgID0+ICdSZXBsYWNlbWVudCBvZiBzbG93IG1haWwgc2VydmVyJywgICMgKG9wdGlvbmFsKQogICAgICAgIERlc2NyaXB0aW9uICAgICAgICA9PiAnTmV3IG1haWwgc2VydmVyIGlzIGZhc3RlcicsICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBKdXN0aWZpY2F0aW9uICAgICAgPT4gJ09sZCBtYWlsIHNlcnZlciB0b28gc2xvdycsICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQ2hhbmdlU3RhdGVJRCAgICAgID0+IDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBvciBDaGFuZ2VTdGF0ZSA9PiAnYWNjZXB0ZWQnCiAgICAgICAgQ2hhbmdlU3RhdGUgICAgICAgID0+ICdhY2NlcHRlZCcsICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBvciBDaGFuZ2VTdGF0ZUlEID0+IDQKICAgICAgICBDaGFuZ2VNYW5hZ2VySUQgICAgPT4gNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQ2hhbmdlQnVpbGRlcklEICAgID0+IDYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIENhdGVnb3J5SUQgICAgICAgICA9PiA3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkgb3IgQ2F0ZWdvcnkgPT4gJzMgbm9ybWFsJwogICAgICAgIENhdGVnb3J5ICAgICAgICAgICA9PiAnMyBub3JtYWwnLCAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkgb3IgQ2F0ZWdvcnlJRCA9PiA0CiAgICAgICAgSW1wYWN0SUQgICAgICAgICAgID0+IDgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBvciBJbXBhY3QgPT4gJzQgaGlnaCcKICAgICAgICBJbXBhY3QgICAgICAgICAgICAgPT4gJzQgaGlnaCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIG9yIEltcGFjdElEID0+IDUKICAgICAgICBQcmlvcml0eUlEICAgICAgICAgPT4gOSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIG9yIFByaW9yaXR5ID0+ICc1IHZlcnkgaGlnaCcKICAgICAgICBQcmlvcml0eSAgICAgICAgICAgPT4gJzUgdmVyeSBoaWdoJywgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIG9yIFByaW9yaXR5SUQgPT4gNgogICAgICAgIENBQkFnZW50cyAgICAgICAgICA9PiBbIDEsIDIsIDQgXSwgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkgVXNlcklEcwogICAgICAgIENBQkN1c3RvbWVycyAgICAgICA9PiBbICd0dCcsICdtbScgXSwgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkgQ3VzdG9tZXJVc2VySURzCiAgICAgICAgUmVxdWVzdGVkVGltZSAgICAgID0+ICcyMDA2LTAxLTE5IDIzOjU5OjU5JywgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBvciAndW5kZWYnLCB3aGljaCBjbGVhcnMgdGhlIHRpbWUKICAgICAgICBEeW5hbWljRmllbGRfWCAgICAgPT4gJ1N1bicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRHluYW1pY0ZpZWxkX1kgICAgID0+ICdFYXJ0aCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEJ5cGFzc1N0YXRlTWFjaGluZSA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkgZGVmYXVsdCAwLCBpZiAxIHRoZSBzdGF0ZSBtYWNoaW5lIHdpbGwgYmUgYnlwYXNzZWQKICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQ2hhbmdlVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENoYW5nZUlEIFVzZXJJRCApKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgdGhhdCBub3QgYm90aCBDaGFuZ2VTdGF0ZSBhbmQgQ2hhbmdlU3RhdGVJRCBhcmUgZ2l2ZW4KICAgIGlmICggJFBhcmFte0NoYW5nZVN0YXRlfSAmJiAkUGFyYW17Q2hhbmdlU3RhdGVJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIGVpdGhlciBDaGFuZ2VTdGF0ZSBPUiBDaGFuZ2VTdGF0ZUlEIC0gbm90IGJvdGghJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHdoZW4gdGhlIFN0YXRlIGlzIGdpdmVuLCB0aGVuIGxvb2sgdXAgdGhlIElECiAgICBpZiAoICRQYXJhbXtDaGFuZ2VTdGF0ZX0gKSB7CiAgICAgICAgJFBhcmFte0NoYW5nZVN0YXRlSUR9ID0gJFNlbGYtPkNoYW5nZVN0YXRlTG9va3VwKAogICAgICAgICAgICBDaGFuZ2VTdGF0ZSA9PiAkUGFyYW17Q2hhbmdlU3RhdGV9LAogICAgICAgICk7CiAgICB9CgogICAgIyB3aGVuIENJUCBpcyBnaXZlbiwgdGhlbiBsb29rIHVwIHRoZSBJRCwKICAgICMgb3RoZXJ3aXNlIGxvb2sgdXAgdGhlIG5hbWVzLCB0aGlzIGlzIG5lZWRlZCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBydWxlcwogICAgZm9yIG15ICRUeXBlIChxdyhDYXRlZ29yeSBJbXBhY3QgUHJpb3JpdHkpKSB7CiAgICAgICAgaWYgKCAkUGFyYW17JFR5cGV9ICkgewogICAgICAgICAgICAkUGFyYW17IiR7VHlwZX1JRCJ9ID0gJFNlbGYtPkNoYW5nZUNJUExvb2t1cCgKICAgICAgICAgICAgICAgIENJUCAgPT4gJFBhcmFteyRUeXBlfSwKICAgICAgICAgICAgICAgIFR5cGUgPT4gJFR5cGUsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFBhcmFteyIke1R5cGV9SUQifSApIHsKICAgICAgICAgICAgJFBhcmFteyRUeXBlfSA9ICRTZWxmLT5DaGFuZ2VDSVBMb29rdXAoCiAgICAgICAgICAgICAgICBJRCAgID0+ICRQYXJhbXsiJHtUeXBlfUlEIn0sCiAgICAgICAgICAgICAgICBUeXBlID0+ICRUeXBlLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG5vcm1hbGl6ZSB0aGUgVGl0bGUsIHdoZW4gaXQgaXMgZ2l2ZW4KICAgIGlmICggJFBhcmFte0NoYW5nZVRpdGxlfSAmJiAhcmVmICRQYXJhbXtDaGFuZ2VUaXRsZX0gKSB7CgogICAgICAgICMgcmVtb3ZlIGxlYWRpbmcgd2hpdGVzcGFjZQogICAgICAgICRQYXJhbXtDaGFuZ2VUaXRsZX0gPX4gc3sgXEEgXHMrIH17fXhtczsKCiAgICAgICAgIyByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZQogICAgICAgICRQYXJhbXtDaGFuZ2VUaXRsZX0gPX4gc3sgXHMrIFx6IH17fXhtczsKICAgIH0KCiAgICAjIGdldCBhIHBsYWluIHRleHQgdmVyc2lvbiBvZiBhcmd1bWVudHMgd2hpY2ggbWlnaHQgY29udGFpbiBIVE1MIG1hcmt1cAogICAgQVJHVU1FTlQ6CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhEZXNjcmlwdGlvbiBKdXN0aWZpY2F0aW9uKSkgewoKICAgICAgICBuZXh0IEFSR1VNRU5UIGlmICFleGlzdHMgJFBhcmFteyRBcmd1bWVudH07CgogICAgICAgICRQYXJhbXsiJHtBcmd1bWVudH1QbGFpbiJ9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0FzY2lpKAogICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBFdmVuIHdoZW4gcGFzc2VkIGEgcGxhaW4gQVNDSUkgc3RyaW5nLAogICAgICAgICMgVG9Bc2NpaSgpIGNhbiByZXR1cm4gYSBub24tdXRmOCBzdHJpbmcgd2l0aCBjaGFycyBpbiB0aGUgZXh0ZW5kZWQgcmFuZ2UuCiAgICAgICAgIyBVcGdyYWRlIHRvIHV0Zi04IGluIG9yZGVyIHRvIGNvbXBseSB0byB0aGUgT1RSUy1jb252ZW50aW9uLgogICAgICAgIHV0Zjg6OnVwZ3JhZGUoICRQYXJhbXsiJHtBcmd1bWVudH1QbGFpbiJ9ICk7CiAgICB9CgogICAgIyBjaGVjayB0aGUgZ2l2ZW4gcGFyYW1ldGVycwogICAgcmV0dXJuIGlmICEkU2VsZi0+X0NoZWNrQ2hhbmdlUGFyYW1zKCVQYXJhbSk7CgogICAgIyBjaGVjayBzYW5pdHkgb2YgdGhlIG5ldyBzdGF0ZSB3aXRoIHRoZSBzdGF0ZSBtYWNoaW5lCiAgICBpZiAoICRQYXJhbXtDaGFuZ2VTdGF0ZUlEfSApIHsKCiAgICAgICAgIyBnZXQgY2hhbmdlIGlkCiAgICAgICAgbXkgJENoYW5nZUlEID0gJFBhcmFte0NoYW5nZUlEfTsKCiAgICAgICAgIyBkbyBub3QgZ2l2ZSBDaGFuZ2VQb3NzaWJsZVN0YXRlc0dldCgpIHRoZSBDaGFuZ2VJRAogICAgICAgICMgaWYgdGhlIHN0YXRlbWFjaGluZSBzaG91bGQgYmUgYnlwYXNzZWQuCiAgICAgICAgIyBDaGFuZ2VQb3NzaWJsZVN0YXRlc0dldCgpIHdpbGwgdGhlbiByZXR1cm4gYWxsIGNoYW5nZSBzdGF0ZXMuCiAgICAgICAgaWYgKCAkUGFyYW17QnlwYXNzU3RhdGVNYWNoaW5lfSApIHsKICAgICAgICAgICAgJENoYW5nZUlEID0gdW5kZWY7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgbGlzdCBvZiBwb3NzaWJsZSBuZXh0IHN0YXRlcwogICAgICAgIG15ICRTdGF0ZUxpc3QgPSAkU2VsZi0+Q2hhbmdlUG9zc2libGVTdGF0ZXNHZXQoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICFncmVwIHsgJF8tPntLZXl9ID09ICRQYXJhbXtDaGFuZ2VTdGF0ZUlEfSB9IEB7JFN0YXRlTGlzdH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgc3RhdGUgJFBhcmFte0NoYW5nZVN0YXRlSUR9IGlzIG5vdCBhIHBvc3NpYmxlIG5leHQgc3RhdGUhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRyaWdnZXIgQ2hhbmdlVXBkYXRlUHJlLUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdDaGFuZ2VVcGRhdGVQcmUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBvbGQgZGF0YSB0byBiZSBnaXZlbiB0byBwb3N0IGV2ZW50IGhhbmRsZXIKICAgIG15ICRDaGFuZ2VEYXRhID0gJFNlbGYtPkNoYW5nZUdldCgKICAgICAgICBDaGFuZ2VJRCA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIHVwZGF0ZSBDQUIKICAgIGlmICggZXhpc3RzICRQYXJhbXtDQUJBZ2VudHN9IHx8IGV4aXN0cyAkUGFyYW17Q0FCQ3VzdG9tZXJzfSApIHsKICAgICAgICByZXR1cm4gaWYgISRTZWxmLT5DaGFuZ2VDQUJVcGRhdGUoJVBhcmFtKTsKICAgIH0KCiAgICAjIHNldCB0aGUgY2hhbmdlIGR5bmFtaWMgZmllbGRzCiAgICBLRVk6CiAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlUGFyYW0gKSB7CgogICAgICAgIG5leHQgS0VZIGlmICRLZXkgIX4gbXsgXEEgRHluYW1pY0ZpZWxkXyguKikgXHogfXhtczsKCiAgICAgICAgIyBzYXZlIHRoZSByZWFsIG5hbWUgb2YgdGhlIGR5bmFtaWMgZmllbGQgKHdpdGhvdXQgcHJlZml4KQogICAgICAgIG15ICREeW5hbWljRmllbGROYW1lID0gJDE7CgogICAgICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIGNvbmZpZwogICAgICAgIG15ICREeW5hbWljRmllbGRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgTmFtZSA9PiAkRHluYW1pY0ZpZWxkTmFtZSwKICAgICAgICApOwoKICAgICAgICAjIHdyaXRlIHZhbHVlIHRvIGR5bmFtaWMgZmllbGQKICAgICAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKS0+VmFsdWVTZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRQYXJhbXskS2V5fSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBtYXAgdXBkYXRlIGF0dHJpYnV0ZXMgdG8gY29sdW1uIG5hbWVzCiAgICBteSAlQXR0cmlidXRlID0gKAogICAgICAgIENoYW5nZVRpdGxlICAgICAgICA9PiAndGl0bGUnLAogICAgICAgIERlc2NyaXB0aW9uICAgICAgICA9PiAnZGVzY3JpcHRpb24nLAogICAgICAgIEp1c3RpZmljYXRpb24gICAgICA9PiAnanVzdGlmaWNhdGlvbicsCiAgICAgICAgQ2hhbmdlU3RhdGVJRCAgICAgID0+ICdjaGFuZ2Vfc3RhdGVfaWQnLAogICAgICAgIENoYW5nZU1hbmFnZXJJRCAgICA9PiAnY2hhbmdlX21hbmFnZXJfaWQnLAogICAgICAgIENoYW5nZUJ1aWxkZXJJRCAgICA9PiAnY2hhbmdlX2J1aWxkZXJfaWQnLAogICAgICAgIENhdGVnb3J5SUQgICAgICAgICA9PiAnY2F0ZWdvcnlfaWQnLAogICAgICAgIEltcGFjdElEICAgICAgICAgICA9PiAnaW1wYWN0X2lkJywKICAgICAgICBQcmlvcml0eUlEICAgICAgICAgPT4gJ3ByaW9yaXR5X2lkJywKICAgICAgICBSZXF1ZXN0ZWRUaW1lICAgICAgPT4gJ3JlcXVlc3RlZF90aW1lJywKICAgICAgICBEZXNjcmlwdGlvblBsYWluICAgPT4gJ2Rlc2NyaXB0aW9uX3BsYWluJywKICAgICAgICBKdXN0aWZpY2F0aW9uUGxhaW4gPT4gJ2p1c3RpZmljYXRpb25fcGxhaW4nLAogICAgKTsKCiAgICAjIGJ1aWxkIFNRTCB0byB1cGRhdGUgY2hhbmdlCiAgICBteSAkU1FMID0gJ1VQREFURSBjaGFuZ2VfaXRlbSBTRVQgJzsKICAgIG15IEBCaW5kOwoKICAgIEFUVFJJQlVURToKICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICVBdHRyaWJ1dGUgKSB7CgogICAgICAgICMgcHJlc2VydmUgdGhlIG9sZCB2YWx1ZSwgd2hlbiB0aGUgY29sdW1uIGlzbid0IGluIGZ1bmN0aW9uIHBhcmFtZXRlcnMKICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAhZXhpc3RzICRQYXJhbXskQXR0cmlidXRlfTsKCiAgICAgICAgIyBwYXJhbSBjaGVja2luZyBoYXMgYWxyZWFkeSBiZWVuIGRvbmUsIHNvIHRoaXMgaXMgc2FmZQogICAgICAgICRTUUwgLj0gIiRBdHRyaWJ1dGV7JEF0dHJpYnV0ZX0gPSA/LCAiOwogICAgICAgIHB1c2ggQEJpbmQsIFwkUGFyYW17JEF0dHJpYnV0ZX07CiAgICB9CgogICAgJFNRTCAuPSAnY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPyAnOwogICAgcHVzaCBAQmluZCwgXCRQYXJhbXtVc2VySUR9OwogICAgJFNRTCAuPSAnV0hFUkUgaWQgPSA/JzsKICAgIHB1c2ggQEJpbmQsIFwkUGFyYW17Q2hhbmdlSUR9OwoKICAgICMgdXBkYXRlIGNoYW5nZQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMICA9PiAkU1FMLAogICAgICAgIEJpbmQgPT4gXEBCaW5kLAogICAgKTsKCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgZm9yIG15ICRLZXkgKAogICAgICAgICdDaGFuZ2VHZXQ6OklEOjonIC4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICAnQ2hhbmdlTGlzdCcsCiAgICAgICAgJ0NoYW5nZUxvb2t1cDo6Q2hhbmdlSUQ6OicgLiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgICdDaGFuZ2VMb29rdXA6OkNoYW5nZU51bWJlcjo6JyAuICRDaGFuZ2VEYXRhLT57Q2hhbmdlTnVtYmVyfSwKICAgICAgICApCiAgICB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRLZXksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRyaWdnZXIgQ2hhbmdlVXBkYXRlUG9zdC1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnQ2hhbmdlVXBkYXRlUG9zdCcsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICBPbGRDaGFuZ2VEYXRhID0+ICRDaGFuZ2VEYXRhLAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDaGFuZ2VHZXQoKQoKUmV0dXJuIGEgY2hhbmdlIGFzIGEgaGFzaCByZWZlcmVuY2UuCldoZW4gdGhlIHdvcmtvcmRlciBkb2VzIG5vdCBleGlzdCwgYSBmYWxzZSB2YWx1ZSBpcyByZXR1cm5lZC4KVGhlIG9wdGlvbmFsIG9wdGlvbiBDPExvZ05vPiB0dXJucyBvZmYgbG9nZ2luZyB3aGVuIHRoZSBjaGFuZ2UgZG9lcyBub3QgZXhpc3QuCgogICAgbXkgJENoYW5nZSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUdldCgKICAgICAgICBDaGFuZ2VJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICBMb2dObyAgICA9PiAxLCAgICAgICMgb3B0aW9uYWwsIHR1cm5zIG9mZiBsb2dnaW5nIHdoZW4gdGhlIGNoYW5nZSBkb2VzIG5vdCBleGlzdAogICAgKTsKClRoZSByZXR1cm5lZCBoYXNoIHJlZmVyZW5jZSBjb250YWlucyB0aGUgZm9sbG93aW5nIGVsZW1lbnRzOgoKICAgICRDaGFuZ2V7Q2hhbmdlSUR9CiAgICAkQ2hhbmdle0NoYW5nZU51bWJlcn0KICAgICRDaGFuZ2V7Q2hhbmdlU3RhdGVJRH0KICAgICRDaGFuZ2V7Q2hhbmdlU3RhdGV9ICAgICAgICAgICAgIyBmZXRjaGVkIGZyb20gdGhlIGdlbmVyYWwgY2F0YWxvZwogICAgJENoYW5nZXtDaGFuZ2VTdGF0ZVNpZ25hbH0gICAgICAjIGZldGNoZWQgZnJvbSBTeXNDb25maWcKICAgICRDaGFuZ2V7Q2hhbmdlVGl0bGV9CiAgICAkQ2hhbmdle0Rlc2NyaXB0aW9ufQogICAgJENoYW5nZXtEZXNjcmlwdGlvblBsYWlufQogICAgJENoYW5nZXtKdXN0aWZpY2F0aW9ufQogICAgJENoYW5nZXtKdXN0aWZpY2F0aW9uUGxhaW59CiAgICAkQ2hhbmdle0NoYW5nZU1hbmFnZXJJRH0KICAgICRDaGFuZ2V7Q2hhbmdlQnVpbGRlcklEfQogICAgJENoYW5nZXtDYXRlZ29yeUlEfQogICAgJENoYW5nZXtDYXRlZ29yeX0KICAgICRDaGFuZ2V7SW1wYWN0SUR9CiAgICAkQ2hhbmdle0ltcGFjdH0KICAgICRDaGFuZ2V7UHJpb3JpdHlJRH0KICAgICRDaGFuZ2V7UHJpb3JpdHl9CiAgICAkQ2hhbmdle1dvcmtPcmRlcklEc30gICAgICAgICAgICMgYXJyYXkgcmVmZXJlbmNlIHdpdGggV29ya09yZGVySURzLCBzb3J0ZWQgYnkgV29ya09yZGVyTnVtYmVyCiAgICAkQ2hhbmdle1dvcmtPcmRlckNvdW50fSAgICAgICAgICMgbnVtYmVyIG9mIHdvcmtvcmRlcnMKICAgICRDaGFuZ2V7Q0FCQWdlbnRzfSAgICAgICAgICAgICAgIyBhcnJheSByZWZlcmVuY2Ugd2l0aCBDQUIgQWdlbnQgVXNlcklEcwogICAgJENoYW5nZXtDQUJDdXN0b21lcnN9ICAgICAgICAgICAjIGFycmF5IHJlZmVyZW5jZSB3aXRoIENBQiBDdXN0b21lclVzZXJJRHMKICAgICRDaGFuZ2V7UGxhbm5lZFN0YXJ0VGltZX0gICAgICAgIyBkZXRlcm1pbmVkIGZyb20gdGhlIHdvcmtvcmRlcnMKICAgICRDaGFuZ2V7UGxhbm5lZEVuZFRpbWV9ICAgICAgICAgIyBkZXRlcm1pbmVkIGZyb20gdGhlIHdvcmtvcmRlcnMKICAgICRDaGFuZ2V7QWN0dWFsU3RhcnRUaW1lfSAgICAgICAgIyBkZXRlcm1pbmVkIGZyb20gdGhlIHdvcmtvcmRlcnMKICAgICRDaGFuZ2V7QWN0dWFsRW5kVGltZX0gICAgICAgICAgIyBkZXRlcm1pbmVkIGZyb20gdGhlIHdvcmtvcmRlcnMKICAgICRDaGFuZ2V7UGxhbm5lZEVmZm9ydH0gICAgICAgICAgIyBkZXRlcm1pbmVkIGZyb20gdGhlIHdvcmtvcmRlcnMKICAgICRDaGFuZ2V7QWNjb3VudGVkVGltZX0gICAgICAgICAgIyBkZXRlcm1pbmVkIGZyb20gdGhlIHdvcmtvcmRlcnMKICAgICRDaGFuZ2V7UmVxdWVzdGVkVGltZX0KICAgICRDaGFuZ2V7RHluYW1pY0ZpZWxkX1h9CiAgICAkQ2hhbmdle0R5bmFtaWNGaWVsZF9ZfQogICAgJENoYW5nZXtDcmVhdGVUaW1lfQogICAgJENoYW5nZXtDcmVhdGVCeX0KICAgICRDaGFuZ2V7Q2hhbmdlVGltZX0KICAgICRDaGFuZ2V7Q2hhbmdlQnl9Cgo9Y3V0CgpzdWIgQ2hhbmdlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhDaGFuZ2VJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBdHRyaWJ1dGV9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXR0cmlidXRlISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0NoYW5nZUdldDo6SUQ6OicgLiAkUGFyYW17Q2hhbmdlSUR9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CgogICAgbXkgJUNoYW5nZURhdGE7CgogICAgaWYgKCRDYWNoZSkgewogICAgICAgICVDaGFuZ2VEYXRhID0gJXskQ2FjaGV9OwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgZ2V0IGRhdGEgZnJvbSBkYXRhYmFzZQogICAgICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBjaGFuZ2VfbnVtYmVyLCB0aXRsZSwgJwogICAgICAgICAgICAgICAgLiAnZGVzY3JpcHRpb24sIGRlc2NyaXB0aW9uX3BsYWluLCAnCiAgICAgICAgICAgICAgICAuICdqdXN0aWZpY2F0aW9uLCBqdXN0aWZpY2F0aW9uX3BsYWluLCAnCiAgICAgICAgICAgICAgICAuICdjaGFuZ2Vfc3RhdGVfaWQsIGNoYW5nZV9tYW5hZ2VyX2lkLCBjaGFuZ2VfYnVpbGRlcl9pZCwgJwogICAgICAgICAgICAgICAgLiAnY2F0ZWdvcnlfaWQsIGltcGFjdF9pZCwgcHJpb3JpdHlfaWQsICcKICAgICAgICAgICAgICAgIC4gJ2NyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnksICcKICAgICAgICAgICAgICAgIC4gJ3JlcXVlc3RlZF90aW1lICcKICAgICAgICAgICAgICAgIC4gJ0ZST00gY2hhbmdlX2l0ZW0gJwogICAgICAgICAgICAgICAgLiAnV0hFUkUgaWQgPSA/ICcsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDaGFuZ2VJRH0gXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkQ2hhbmdlRGF0YXtDaGFuZ2VJRH0gICAgICAgICAgID0gJFJvd1swXTsKICAgICAgICAgICAgJENoYW5nZURhdGF7Q2hhbmdlTnVtYmVyfSAgICAgICA9ICRSb3dbMV07CiAgICAgICAgICAgICRDaGFuZ2VEYXRhe0NoYW5nZVRpdGxlfSAgICAgICAgPSBkZWZpbmVkKCAkUm93WzJdICkgPyAkUm93WzJdIDogJyc7CiAgICAgICAgICAgICRDaGFuZ2VEYXRhe0Rlc2NyaXB0aW9ufSAgICAgICAgPSBkZWZpbmVkKCAkUm93WzNdICkgPyAkUm93WzNdIDogJyc7CiAgICAgICAgICAgICRDaGFuZ2VEYXRhe0Rlc2NyaXB0aW9uUGxhaW59ICAgPSBkZWZpbmVkKCAkUm93WzRdICkgPyAkUm93WzRdIDogJyc7CiAgICAgICAgICAgICRDaGFuZ2VEYXRhe0p1c3RpZmljYXRpb259ICAgICAgPSBkZWZpbmVkKCAkUm93WzVdICkgPyAkUm93WzVdIDogJyc7CiAgICAgICAgICAgICRDaGFuZ2VEYXRhe0p1c3RpZmljYXRpb25QbGFpbn0gPSBkZWZpbmVkKCAkUm93WzZdICkgPyAkUm93WzZdIDogJyc7CiAgICAgICAgICAgICRDaGFuZ2VEYXRhe0NoYW5nZVN0YXRlSUR9ICAgICAgPSAkUm93WzddOwogICAgICAgICAgICAkQ2hhbmdlRGF0YXtDaGFuZ2VNYW5hZ2VySUR9ICAgID0gJFJvd1s4XTsKICAgICAgICAgICAgJENoYW5nZURhdGF7Q2hhbmdlQnVpbGRlcklEfSAgICA9ICRSb3dbOV07CiAgICAgICAgICAgICRDaGFuZ2VEYXRhe0NhdGVnb3J5SUR9ICAgICAgICAgPSAkUm93WzEwXTsKICAgICAgICAgICAgJENoYW5nZURhdGF7SW1wYWN0SUR9ICAgICAgICAgICA9ICRSb3dbMTFdOwogICAgICAgICAgICAkQ2hhbmdlRGF0YXtQcmlvcml0eUlEfSAgICAgICAgID0gJFJvd1sxMl07CiAgICAgICAgICAgICRDaGFuZ2VEYXRhe0NyZWF0ZVRpbWV9ICAgICAgICAgPSAkUm93WzEzXTsKICAgICAgICAgICAgJENoYW5nZURhdGF7Q3JlYXRlQnl9ICAgICAgICAgICA9ICRSb3dbMTRdOwogICAgICAgICAgICAkQ2hhbmdlRGF0YXtDaGFuZ2VUaW1lfSAgICAgICAgID0gJFJvd1sxNV07CiAgICAgICAgICAgICRDaGFuZ2VEYXRhe0NoYW5nZUJ5fSAgICAgICAgICAgPSAkUm93WzE2XTsKICAgICAgICAgICAgJENoYW5nZURhdGF7UmVxdWVzdGVkVGltZX0gICAgICA9ICRSb3dbMTddOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISVDaGFuZ2VEYXRhICkgewogICAgICAgICAgICBpZiAoICEkUGFyYW17TG9nTm99ICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2hhbmdlIHdpdGggSUQgJFBhcmFte0NoYW5nZUlEfSBkb2VzIG5vdCBleGlzdC4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGNsZWFudXAgdGltZSBzdGFtcHMgKHNvbWUgZGF0YWJhc2VzIGFyZSB1c2luZyBlLiBnLiAyMDA4LTAyLTI1IDIyOjAzOjAwLjAwMDAwMCkKICAgICAgICBUSU1FRklFTEQ6CiAgICAgICAgZm9yIG15ICRUaW1lZmllbGQgKCAnQ3JlYXRlVGltZScsICdDaGFuZ2VUaW1lJywgJ1JlcXVlc3RlZFRpbWUnICkgewogICAgICAgICAgICBuZXh0IFRJTUVGSUVMRCBpZiAhJENoYW5nZURhdGF7JFRpbWVmaWVsZH07CiAgICAgICAgICAgICRDaGFuZ2VEYXRheyRUaW1lZmllbGR9CiAgICAgICAgICAgICAgICA9fiBzeyBcQSAoIFxkXGRcZFxkIC0gXGRcZCAtIFxkXGQgXHMgXGRcZDpcZFxkOlxkXGQgKSBcLiAuKz8gXHogfXskMX14bXM7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhbGwgZHluYW1pYyBmaWVsZHMgZm9yIHRoZSBvYmplY3QgdHlwZSBJVFNNQ2hhbmdlCiAgICAgICAgbXkgJER5bmFtaWNGaWVsZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICk7CgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewoKICAgICAgICAgICAgIyB2YWxpZGF0ZSBlYWNoIGR5bmFtaWMgZmllbGQKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRDb25maWc7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRDb25maWctPntOYW1lfTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfSApOwoKICAgICAgICAgICAgIyBnZXQgdGhlIGN1cnJlbnQgdmFsdWUgZm9yIGVhY2ggZHluYW1pYyBmaWVsZAogICAgICAgICAgICBteSAkVmFsdWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyktPlZhbHVlR2V0KAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2V0IHRoZSBkeW5hbWljIGZpZWxkIG5hbWUgYW5kIHZhbHVlIGludG8gdGhlIGNoYW5nZSBkYXRhIGhhc2gKICAgICAgICAgICAgJENoYW5nZURhdGF7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJFZhbHVlIC8vICcnOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgY2FjaGUgKGNoYW5nZSBkYXRhIGV4aXN0cyBhdCB0aGlzIHBvaW50LCBpdCB3YXMgY2hlY2tlZCBiZWZvcmUpCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+IFwlQ2hhbmdlRGF0YSwKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBuYW1lIG9mIGNoYW5nZSBzdGF0ZQogICAgaWYgKCAkQ2hhbmdlRGF0YXtDaGFuZ2VTdGF0ZUlEfSApIHsKICAgICAgICAkQ2hhbmdlRGF0YXtDaGFuZ2VTdGF0ZX0gPSAkU2VsZi0+Q2hhbmdlU3RhdGVMb29rdXAoCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZURhdGF7Q2hhbmdlU3RhdGVJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBuYW1lcyBmb3IgQ0lQCiAgICBmb3IgbXkgJFR5cGUgKHF3KENhdGVnb3J5IEltcGFjdCBQcmlvcml0eSkpIHsKICAgICAgICBpZiAoICRDaGFuZ2VEYXRheyIke1R5cGV9SUQifSApIHsKICAgICAgICAgICAgJENoYW5nZURhdGF7JFR5cGV9ID0gJFNlbGYtPkNoYW5nZUNJUExvb2t1cCgKICAgICAgICAgICAgICAgIElEICAgPT4gJENoYW5nZURhdGF7IiR7VHlwZX1JRCJ9LAogICAgICAgICAgICAgICAgVHlwZSA9PiAkVHlwZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgdGhlIGNoYW5nZSBzdGF0ZSBzaWduYWwKICAgIGlmICggJENoYW5nZURhdGF7Q2hhbmdlU3RhdGV9ICkgewoKICAgICAgICAjIGdldCBhbGwgY2hhbmdlIHN0YXRlIHNpZ25hbHMKICAgICAgICBteSAkU3RhdGVTaWduYWwgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0lUU01DaGFuZ2U6OlN0YXRlOjpTaWduYWwnKTsKCiAgICAgICAgJENoYW5nZURhdGF7Q2hhbmdlU3RhdGVTaWduYWx9ID0gJFN0YXRlU2lnbmFsLT57ICRDaGFuZ2VEYXRhe0NoYW5nZVN0YXRlfSB9OwogICAgfQoKICAgICMgZ2V0IENBQiBkYXRhCiAgICBteSAkQ0FCID0gJFNlbGYtPkNoYW5nZUNBQkdldCgKICAgICAgICBDaGFuZ2VJRCA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKSB8fCB7fTsKCiAgICAjIGFkZCByZXN1bHQgdG8gY2hhbmdlIGRhdGEKICAgICVDaGFuZ2VEYXRhID0gKCAlQ2hhbmdlRGF0YSwgJXskQ0FCfSApOwoKICAgICMgZ2V0IGFsbCB3b3Jrb3JkZXIgaWRzIGZvciB0aGlzIGNoYW5nZQogICAgbXkgJFdvcmtPcmRlcklEc1JlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlckxpc3QoCiAgICAgICAgQ2hhbmdlSUQgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBhZGQgcmVzdWx0IHRvIGNoYW5nZSBkYXRhCiAgICAkQ2hhbmdlRGF0YXtXb3JrT3JkZXJJRHN9ID0gJFdvcmtPcmRlcklEc1JlZiB8fCBbXTsKICAgICRDaGFuZ2VEYXRhe1dvcmtPcmRlckNvdW50fSA9IHNjYWxhciBAeyAkQ2hhbmdlRGF0YXtXb3JrT3JkZXJJRHN9IH07CgogICAgIyBnZXQgcGxhbm5lZCBlZmZvcnQgYW5kIGFjY291bnRlZCB0aW1lIGZvciB0aGUgY2hhbmdlCiAgICBteSAkQ2hhbmdlRWZmb3J0cyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlckNoYW5nZUVmZm9ydHNHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBtZXJnZSBlZmZvcnQgaGFzaCB3aXRoIGNoYW5nZSBoYXNoCiAgICBpZiAoCiAgICAgICAgJENoYW5nZUVmZm9ydHMKICAgICAgICAmJiByZWYgJENoYW5nZUVmZm9ydHMgZXEgJ0hBU0gnCiAgICAgICAgJiYgJXskQ2hhbmdlRWZmb3J0c30KICAgICAgICApCiAgICB7CiAgICAgICAgJUNoYW5nZURhdGEgPSAoICVDaGFuZ2VEYXRhLCAleyRDaGFuZ2VFZmZvcnRzfSApOwogICAgfQoKICAgICMgZ2V0IHRpbWVzdGFtcHMgZm9yIHRoZSBjaGFuZ2UKICAgIG15ICRDaGFuZ2VUaW1lID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyQ2hhbmdlVGltZUdldCgKICAgICAgICBDaGFuZ2VJRCA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIG1lcmdlIHRpbWUgaGFzaCB3aXRoIGNoYW5nZSBoYXNoCiAgICBpZiAoCiAgICAgICAgJENoYW5nZVRpbWUKICAgICAgICAmJiByZWYgJENoYW5nZVRpbWUgZXEgJ0hBU0gnCiAgICAgICAgJiYgJXskQ2hhbmdlVGltZX0KICAgICAgICApCiAgICB7CiAgICAgICAgJUNoYW5nZURhdGEgPSAoICVDaGFuZ2VEYXRhLCAleyRDaGFuZ2VUaW1lfSApOwogICAgfQoKICAgIHJldHVybiBcJUNoYW5nZURhdGE7Cn0KCj1pdGVtIENoYW5nZUNBQlVwZGF0ZSgpCgpBZGQgb3IgdXBkYXRlIHRoZSBDQUIgb2YgYSBjaGFuZ2UuCk9uZSBvciBib3RoIG9mIENBQkFnZW50cyBhbmQgQ0FCQ3VzdG9tZXJzIG11c3QgYmUgcGFzc2VkLgpQYXNzaW5nIGEgcmVmZXJlbmNlIHRvIGFuIGVtcHR5IGFycmF5IGRlbGV0ZXMgdGhlIHBhcnQgb2YgdGhlIENBQiAoQ0FCQWdlbnRzIG9yIENBQkN1c3RvbWVycykKV2hlbiBhZ2VudHMgb3IgY3VzdG9tZXJzIGFyZSBwYXNzZWQgbXVsdGlwbGUgdGltZXMsIHRoZXkgd2lsbCBiZSBpbnNlcnRlZCBvbmx5IG9uY2UuCgogICAgbXkgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VDQUJVcGRhdGUoCiAgICAgICAgQ2hhbmdlSUQgICAgID0+IDEyMywKICAgICAgICBDQUJBZ2VudHMgICAgPT4gWyAxLCAyLCA0IF0sICAgICAjIFVzZXJJRHMgICAgICAgICAgKG9wdGlvbmFsKQogICAgICAgIENBQkN1c3RvbWVycyA9PiBbICd0dCcsICdtbScgXSwgICMgQ3VzdG9tZXJVc2VySURzICAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIENoYW5nZUNBQlVwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoQ2hhbmdlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEF0dHJpYnV0ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZWl0aGVyIENBQkFnZW50cyBvZiBDQUJDdXN0b21lcnMgb3IgYm90aCBtdXN0IGJlIHBhc3NlZAogICAgaWYgKCAhJFBhcmFte0NBQkFnZW50c30gJiYgISRQYXJhbXtDQUJDdXN0b21lcnN9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBwYXJhbWV0ZXIgQ0FCQWdlbnRzIG9yIENBQkN1c3RvbWVycyEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgQ0FCQWdlbnRzIGFuZCBDQUJDdXN0b21lcnMgbXVzdCBiZSBhcnJheSByZWZlcmVuY2VzCiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoQ0FCQWdlbnRzIENBQkN1c3RvbWVycykpIHsKICAgICAgICBpZiAoICRQYXJhbXskQXR0cmlidXRlfSAmJiByZWYgJFBhcmFteyRBdHRyaWJ1dGV9IG5lICdBUlJBWScgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgcGFyYW1ldGVyICRBdHRyaWJ1dGUgaXMgbm90IGFuIGFycmF5IHJlZmVyZW5jZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgQ0FCQWdlbnRzIGFuZCBDQUJDdXN0b21lcnMgZXhpc3QgaW4gdGhlIGFnZW50cyBhbmQgY3VzdG9tZXIgZGF0YWJhc2VzCiAgICByZXR1cm4gaWYgISRTZWxmLT5fQ2hlY2tDaGFuZ2VQYXJhbXMoJVBhcmFtKTsKCiAgICAjIHRyaWdnZXIgQ2hhbmdlQ0FCVXBkYXRlUHJlLUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdDaGFuZ2VDQUJVcGRhdGVQcmUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBvbGQgQ0FCIGRhdGEgdG8gYmUgZ2l2ZW4gdG8gcG9zdCBldmVudCBoYW5kbGVyCiAgICBteSAkQ2hhbmdlQ0FCRGF0YSA9ICRTZWxmLT5DaGFuZ2VDQUJHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBlbnRlciB0aGUgQ0FCIEFnZW50cwogICAgaWYgKCAkUGFyYW17Q0FCQWdlbnRzfSApIHsKCiAgICAgICAgIyByZW1vdmUgYWxsIGN1cnJlbnQgdXNlcnMgZnJvbSBjYWIgdGFibGUKICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMID0+ICdERUxFVEUgRlJPTSBjaGFuZ2VfY2FiICcKICAgICAgICAgICAgICAgIC4gJ1dIRVJFIGNoYW5nZV9pZCA9ID8gJwogICAgICAgICAgICAgICAgLiAnQU5EIHVzZXJfaWQgSVMgTk9UIE5VTEwnLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDaGFuZ2VJRH0gXSwKICAgICAgICApOwoKICAgICAgICAjIGZpbHRlciBvdXQgdW5pcXVlIHVzZXJzCiAgICAgICAgbXkgJVVuaXF1ZVVzZXJzID0gbWFwIHsgJF8gPT4gMSB9IEB7ICRQYXJhbXtDQUJBZ2VudHN9IH07CgogICAgICAgICMgYWRkIHVzZXIgdG8gY2FiIHRhYmxlCiAgICAgICAgZm9yIG15ICRVc2VySUQgKCBzb3J0IGtleXMgJVVuaXF1ZVVzZXJzICkgewogICAgICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgICAgIFNRTCAgPT4gJ0lOU0VSVCBJTlRPIGNoYW5nZV9jYWIgKCBjaGFuZ2VfaWQsIHVzZXJfaWQgKSBWQUxVRVMgKCA/LCA/ICknLAogICAgICAgICAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q2hhbmdlSUR9LCBcJFVzZXJJRCBdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGVudGVyIHRoZSBDQUIgQ3VzdG9tZXJzCiAgICBpZiAoICRQYXJhbXtDQUJDdXN0b21lcnN9ICkgewoKICAgICAgICAjIHJlbW92ZSBhbGwgY3VycmVudCBjdXN0b21lciB1c2VycyBmcm9tIGNhYiB0YWJsZQogICAgICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4gJ0RFTEVURSBGUk9NIGNoYW5nZV9jYWIgJwogICAgICAgICAgICAgICAgLiAnV0hFUkUgY2hhbmdlX2lkID0gPyAnCiAgICAgICAgICAgICAgICAuICdBTkQgY3VzdG9tZXJfdXNlcl9pZCBJUyBOT1QgTlVMTCcsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NoYW5nZUlEfSBdLAogICAgICAgICk7CgogICAgICAgICMgZmlsdGVyIG91dCB1bmlxdWUgY3VzdG9tZXIgdXNlcnMKICAgICAgICBteSAlVW5pcXVlQ3VzdG9tZXJVc2VycyA9IG1hcCB7ICRfID0+IDEgfSBAeyAkUGFyYW17Q0FCQ3VzdG9tZXJzfSB9OwoKICAgICAgICAjIGFkZCB1c2VyIHRvIGNhYiB0YWJsZQogICAgICAgIGZvciBteSAkQ3VzdG9tZXJVc2VySUQgKCBzb3J0IGtleXMgJVVuaXF1ZUN1c3RvbWVyVXNlcnMgKSB7CiAgICAgICAgICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICAgICAgU1FMICA9PiAnSU5TRVJUIElOVE8gY2hhbmdlX2NhYiAoIGNoYW5nZV9pZCwgY3VzdG9tZXJfdXNlcl9pZCApIFZBTFVFUyAoID8sID8gKScsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDaGFuZ2VJRH0sIFwkQ3VzdG9tZXJVc2VySUQgXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAnQ2hhbmdlQ0FCR2V0OjpJRDo6JyAuICRQYXJhbXtDaGFuZ2VJRH0sCiAgICApOwoKICAgICMgdHJpZ2dlciBDaGFuZ2VDQUJVcGRhdGVQb3N0LUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdDaGFuZ2VDQUJVcGRhdGVQb3N0JywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgIE9sZENoYW5nZUNBQkRhdGEgPT4gJENoYW5nZUNBQkRhdGEsCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENoYW5nZUNBQkdldCgpCgpSZXR1cm4gdGhlIENBQiBvZiBhIGNoYW5nZSBhcyBhIGhhc2hyZWYsIHdoZXJlIHRoZSB2YWx1ZXMgYXJlIGFycmF5cmVmcy4KVGhlIHJldHVybmVkIGFycmF5IHJlZmVyZW5jZXMgYXJlIHNvcnRlZC4KCiAgICBteSAkQ2hhbmdlQ0FCID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQ0FCR2V0KAogICAgICAgIENoYW5nZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKClJldHVybnM6CgogICAgJENoYW5nZUNBQiA9IHsKICAgICAgICBDQUJBZ2VudHMgICAgPT4gWyAxLCAyLCA0IF0sCiAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFsgJ2FhJywgJ2JiJyBdLAogICAgfQoKPWN1dAoKc3ViIENoYW5nZUNBQkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDaGFuZ2VJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2FiIGRhdGEKICAgIG15ICVDQUIgPSAoCiAgICAgICAgQ0FCQWdlbnRzICAgID0+IFtdLAogICAgICAgIENBQkN1c3RvbWVycyA9PiBbXSwKICAgICk7CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0NoYW5nZUNBQkdldDo6SUQ6OicgLiAkUGFyYW17Q2hhbmdlSUR9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CgogICAgaWYgKCRDYWNoZSkgewoKICAgICAgICAjIGdldCBkYXRhIGZyb20gY2FjaGUKICAgICAgICAlQ0FCID0gJXskQ2FjaGV9OwogICAgfQoKICAgIGVsc2UgewoKICAgICAgICAjIGdldCBkYXRhCiAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIGNoYW5nZV9pZCwgdXNlcl9pZCwgY3VzdG9tZXJfdXNlcl9pZCAnCiAgICAgICAgICAgICAgICAuICdGUk9NIGNoYW5nZV9jYWIgV0hFUkUgY2hhbmdlX2lkID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NoYW5nZUlEfSBdLAogICAgICAgICk7CgogICAgICAgIG15ICRFcnJvckNBQklEOwoKICAgICAgICBST1c6CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgbXkgJENBQklEICAgICAgICAgID0gJFJvd1swXTsKICAgICAgICAgICAgbXkgJENoYW5nZUlEICAgICAgID0gJFJvd1sxXTsKICAgICAgICAgICAgbXkgJFVzZXJJRCAgICAgICAgID0gJFJvd1syXTsKICAgICAgICAgICAgbXkgJEN1c3RvbWVyVXNlcklEID0gJFJvd1szXTsKCiAgICAgICAgICAgICMgZXJyb3IgY2hlY2sgaWYgYm90aCBjb2x1bW5zIGFyZSBmaWxsZWQKICAgICAgICAgICAgaWYgKCAkVXNlcklEICYmICRDdXN0b21lclVzZXJJRCApIHsKICAgICAgICAgICAgICAgICRFcnJvckNBQklEID0gJENBQklEOwogICAgICAgICAgICAgICAgbmV4dCBST1c7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgYWRkIGRhdGEgdG8gQ0FCCiAgICAgICAgICAgIGlmICgkVXNlcklEKSB7CiAgICAgICAgICAgICAgICBwdXNoIEB7ICRDQUJ7Q0FCQWdlbnRzfSB9LCAkVXNlcklEOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICgkQ3VzdG9tZXJVc2VySUQpIHsKICAgICAgICAgICAgICAgIHB1c2ggQHsgJENBQntDQUJDdXN0b21lcnN9IH0sICRDdXN0b21lclVzZXJJRDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBlcnJvciBjaGVjayBpZiBib3RoIGNvbHVtbnMgYXJlIGZpbGxlZAogICAgICAgIGlmICgkRXJyb3JDQUJJRCkgewoKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICJDQUIgdGFibGUgZW50cnkgd2l0aCBJRCAkRXJyb3JDQUJJRCBjb250YWlucyBVc2VySUQgYW5kIEN1c3RvbWVyVXNlcklEISAiCiAgICAgICAgICAgICAgICAgICAgLiAnT25seSBvbmUgYXQgYSB0aW1lIGlzIGFsbG93ZWQhJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBzb3J0IHRoZSByZXN1bHRzCiAgICAgICAgQHsgJENBQntDQUJBZ2VudHN9IH0gICAgPSBzb3J0IEB7ICRDQUJ7Q0FCQWdlbnRzfSB9OwogICAgICAgIEB7ICRDQUJ7Q0FCQ3VzdG9tZXJzfSB9ID0gc29ydCBAeyAkQ0FCe0NBQkN1c3RvbWVyc30gfTsKCiAgICAgICAgIyBzZXQgY2FjaGUKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gXCVDQUIsCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIFwlQ0FCOwp9Cgo9aXRlbSBDaGFuZ2VDQUJEZWxldGUoKQoKRGVsZXRlIHRoZSBDQUIgb2YgYSBjaGFuZ2UuCgogICAgbXkgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VDQUJEZWxldGUoCiAgICAgICAgQ2hhbmdlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIENoYW5nZUNBQkRlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoQ2hhbmdlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEF0dHJpYnV0ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgdHJpZ2dlciBDaGFuZ2VDQUJEZWxldGVQcmUtRXZlbnQKICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ0NoYW5nZUNBQkRlbGV0ZVByZScsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IG9sZCBDQUIgZGF0YSB0byBiZSBnaXZlbiB0byBwb3N0IGV2ZW50IGhhbmRsZXIKICAgIG15ICRDaGFuZ2VDQUJEYXRhID0gJFNlbGYtPkNoYW5nZUNBQkdldCgKICAgICAgICBDaGFuZ2VJRCA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGRlbGV0ZSBDQUIKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGNoYW5nZV9jYWIgV0hFUkUgY2hhbmdlX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q2hhbmdlSUR9IF0sCiAgICApOwoKICAgICMgZGVsZXRlIGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJ0NoYW5nZUNBQkdldDo6SUQ6OicgLiAkUGFyYW17Q2hhbmdlSUR9LAogICAgKTsKCiAgICAjIHRyaWdnZXIgQ2hhbmdlQ0FCRGVsZXRlUG9zdC1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnQ2hhbmdlQ0FCRGVsZXRlUG9zdCcsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICBPbGRDaGFuZ2VDQUJEYXRhID0+ICRDaGFuZ2VDQUJEYXRhLAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDaGFuZ2VMb29rdXAoKQoKUmV0dXJuIHRoZSBjaGFuZ2UgaWQgd2hlbiB0aGUgY2hhbmdlIG51bWJlciBpcyBwYXNzZWQuClJldHVybiB0aGUgY2hhbmdlIG51bWJlciB3aGVuIHRoZSBjaGFuZ2UgaWQgaXMgcGFzc2VkLgpXaGVuIG5vIGNoYW5nZSBpZCBvciBjaGFuZ2UgbnVtYmVyIGlzIGZvdW5kLCB0aGVuIHRoZSB1bmRlZmluZWQgdmFsdWUgaXMgcmV0dXJuZWQuCgogICAgbXkgJENoYW5nZUlEID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlTG9va3VwKAogICAgICAgIENoYW5nZU51bWJlciA9PiAnMjAwOTA5MTc0MjAwMDQ2NScsCiAgICApOwoKICAgIG9yCgogICAgbXkgJENoYW5nZU51bWJlciA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUxvb2t1cCgKICAgICAgICBDaGFuZ2VJRCA9PiA0MiwKICAgICk7Cgo9Y3V0CgpzdWIgQ2hhbmdlTG9va3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyB0aGUgY2hhbmdlIGlkIG9yIHRoZSBjaGFuZ2UgbnVtYmVyIG11c3QgYmUgcGFzc2VkCiAgICBpZiAoICEkUGFyYW17Q2hhbmdlSUR9ICYmICEkUGFyYW17Q2hhbmdlTnVtYmVyfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgdGhlIENoYW5nZUlEIG9yIHRoZSBDaGFuZ2VOdW1iZXIhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIG9ubHkgb25lIG9mIGNoYW5nZSBpZCBhbmQgY2hhbmdlIG51bWJlciBjYW4gYmUgcGFzc2VkCiAgICBpZiAoICRQYXJhbXtDaGFuZ2VJRH0gJiYgJFBhcmFte0NoYW5nZU51bWJlcn0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIGVpdGhlciB0aGUgQ2hhbmdlSUQgb3IgdGhlIENoYW5nZU51bWJlciwgbm90IGJvdGghJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2UgaWQKICAgIGlmICggJFBhcmFte0NoYW5nZU51bWJlcn0gKSB7CgogICAgICAgIG15ICRDaGFuZ2VJRDsKCiAgICAgICAgIyBjaGVjayBjYWNoZQogICAgICAgIG15ICRDYWNoZUtleSA9ICdDaGFuZ2VMb29rdXA6OkNoYW5nZU51bWJlcjo6JyAuICRQYXJhbXtDaGFuZ2VOdW1iZXJ9OwogICAgICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwoKICAgICAgICBpZiAoJENhY2hlKSB7CgogICAgICAgICAgICAjIGdldCBkYXRhIGZyb20gY2FjaGUKICAgICAgICAgICAgJENoYW5nZUlEID0gJENhY2hlOwogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gY2hhbmdlX2l0ZW0gV0hFUkUgY2hhbmdlX251bWJlciA9ID8nLAogICAgICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0NoYW5nZU51bWJlcn0gXSwKICAgICAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAgICAgJENoYW5nZUlEID0gJFJvd1swXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgY2FjaGUgb25seSBpZiBjaGFuZ2UgaWQgZXhpc3RzCiAgICAgICAgICAgIGlmICgkQ2hhbmdlSUQpIHsKCiAgICAgICAgICAgICAgICAjIHNldCBjYWNoZQogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkQ2hhbmdlSUQ7CiAgICB9CgogICAgIyBnZXQgY2hhbmdlIG51bWJlcgogICAgZWxzaWYgKCAkUGFyYW17Q2hhbmdlSUR9ICkgewoKICAgICAgICBteSAkQ2hhbmdlTnVtYmVyOwoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgbXkgJENhY2hlS2V5ID0gJ0NoYW5nZUxvb2t1cDo6Q2hhbmdlSUQ6OicgLiAkUGFyYW17Q2hhbmdlSUR9OwogICAgICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwoKICAgICAgICBpZiAoJENhY2hlKSB7CgogICAgICAgICAgICAjIGdldCBkYXRhIGZyb20gY2FjaGUKICAgICAgICAgICAgJENoYW5nZU51bWJlciA9ICRDYWNoZTsKICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgICAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBjaGFuZ2VfbnVtYmVyIEZST00gY2hhbmdlX2l0ZW0gV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDaGFuZ2VJRH0gXSwKICAgICAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAgICAgJENoYW5nZU51bWJlciA9ICRSb3dbMF07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2V0IGNhY2hlIG9ubHkgaWYgY2hhbmdlIG51bWJlciBleGlzdHMKICAgICAgICAgICAgaWYgKCRDaGFuZ2VOdW1iZXIpIHsKCiAgICAgICAgICAgICAgICAjIHNldCBjYWNoZQogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRDaGFuZ2VOdW1iZXIsCiAgICAgICAgICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJENoYW5nZU51bWJlcjsKICAgIH0KCiAgICByZXR1cm47Cn0KCj1pdGVtIENoYW5nZUxpc3QoKQoKUmV0dXJuIGEgY2hhbmdlIGlkIGxpc3Qgb2YgYWxsIGNoYW5nZXMgYXMgYW4gYXJyYXkgcmVmZXJlbmNlLgoKICAgIG15ICRDaGFuZ2VJRHNSZWYgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBDaGFuZ2VMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIG15IEBDaGFuZ2VJRHM7CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0NoYW5nZUxpc3QnOwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CgogICAgaWYgKCRDYWNoZSkgewoKICAgICAgICAjIGdldCBjaGFuZ2UgaWRzIGZyb20gY2FjaGUKICAgICAgICBAQ2hhbmdlSURzID0gQHskQ2FjaGV9OwogICAgfQoKICAgIGVsc2UgewoKICAgICAgICAjIGdldCBjaGFuZ2UgaWRzCiAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBjaGFuZ2VfaXRlbScsCiAgICAgICAgKTsKCiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgcHVzaCBAQ2hhbmdlSURzLCAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgY2FjaGUKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gXEBDaGFuZ2VJRHMsCiAgICAgICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIFxAQ2hhbmdlSURzOwp9Cgo9aXRlbSBDaGFuZ2VTZWFyY2goKQoKUmV0dXJucyBlaXRoZXIgYSBsaXN0LCBhcyBhbiBhcnJheXJlZiwgb3IgYSBjb3VudCBvZiBmb3VuZCBjaGFuZ2UgaWRzLgpUaGUgY291bnQgb2YgcmVzdWx0cyBpcyByZXR1cm5lZCB3aGVuIHRoZSBwYXJhbWV0ZXIgQzxSZXN1bHQgPSAnQ09VTlQnPiBpcyBwYXNzZWQuCgpUaGUgc2VhcmNoIGNyaXRlcmlhIGFyZSBsb2dpY2FsbHkgQU5EIGNvbm5lY3RlZC4KV2hlbiBhIGxpc3QgaXMgcGFzc2VkIGFzIGNyaXRlcml1bSwgdGhlIGluZGl2aWR1YWwgbWVtYmVycyBhcmUgT1IgY29ubmVjdGVkLgpXaGVuIGFuIHVuZGVmIG9yIGEgcmVmZXJlbmNlIHRvIGFuIGVtcHR5IGFycmF5IGlzIHBhc3NlZCwgdGhlbiB0aGUgc2VhcmNoIGNyaXRlcml1bQppcyBpZ25vcmVkLgoKICAgIG15ICRDaGFuZ2VJRHNSZWYgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VTZWFyY2goCiAgICAgICAgQ2hhbmdlTnVtYmVyICAgICAgID0+ICcyMDA5MTAwMTEyMzQ1Nzc4JywgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICBDaGFuZ2VUaXRsZSAgICAgICAgPT4gJ1JlcGxhY2VtZW50IG9mIHNsb3cgbWFpbCBzZXJ2ZXInLCAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRGVzY3JpcHRpb24gICAgICAgID0+ICdOZXcgbWFpbCBzZXJ2ZXIgaXMgZmFzdGVyJywgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEp1c3RpZmljYXRpb24gICAgICA9PiAnT2xkIG1haWwgc2VydmVyIHRvbyBzbG93JywgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgIyBhcnJheSBwYXJhbWV0ZXJzIGFyZSB1c2VkIHdpdGggbG9naWNhbCBPUiBvcGVyYXRvcgogICAgICAgIENoYW5nZVN0YXRlSURzICAgICA9PiBbIDExLCAxMiwgMTMgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDaGFuZ2VTdGF0ZXMgICAgICAgPT4gWyAncmVxdWVzdGVkJywgJ2ZhaWxlZCcgXSwgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQ2hhbmdlTWFuYWdlcklEcyAgID0+IFsgMSwgMiwgMyBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIENoYW5nZUJ1aWxkZXJJRHMgICA9PiBbIDUsIDcsIDQgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgPT4gWyA1LCAyLCAzIF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgID0+IFsgMywgMiwgMSBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFdvcmtPcmRlckFnZW50SURzICA9PiBbIDYsIDIgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDQUJBZ2VudHMgICAgICAgICAgPT4gWyA5LCAxMyBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQ0FCQ3VzdG9tZXJzICAgICAgID0+IFsgJ3R0JywgJ3h4JyBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIENhdGVnb3JpZXMgICAgICAgICA9PiBbICcxIHZlcnkgbG93JywgJzIgbG93JyBdLCAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDYXRlZ29yeUlEcyAgICAgICAgPT4gWyAxMzUsIDE3MyBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSW1wYWN0cyAgICAgICAgICAgID0+IFsgJzEgdmVyeSBsb3cnLCAnMiBsb3cnIF0sICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEltcGFjdElEcyAgICAgICAgICA9PiBbIDEzNiwgMTc0IF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBQcmlvcml0aWVzICAgICAgICAgPT4gWyAnMSB2ZXJ5IGxvdycsICcyIGxvdycgXSwgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgUHJpb3JpdHlJRHMgICAgICAgID0+IFsgMTM3LCAxNzUgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICAjIER5bmFtaWNGaWVsZHMgKGJvdGggY2hhbmdlIGFuZCB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMgYXJlIHBvc3NpYmxlKQogICAgICAgICMgICBBdCBsZWFzdCBvbmUgb3BlcmF0b3IgbXVzdCBiZSBzcGVjaWZpZWQuIE9wZXJhdG9ycyB3aWxsIGJlIGNvbm5lY3RlZCB3aXRoIEFORCwKICAgICAgICAjICAgICAgIHZhbHVlcyBpbiBhbiBvcGVyYXRvciB3aXRoIE9SLgogICAgICAgICMgICBZb3UgY2FuIGFsc28gcGFzcyBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IHRvIGFuIG9wZXJhdG9yOiBbJ3ZhbHVlMScsICd2YWx1ZTInXQogICAgICAgIER5bmFtaWNGaWVsZF9GaWVsZE5hbWVYID0+IHsKICAgICAgICAgICAgRXF1YWxzICAgICAgICAgICAgPT4gMTIzLAogICAgICAgICAgICBMaWtlICAgICAgICAgICAgICA9PiAndmFsdWUqJywgICAgICAgICAgICAgICAgIyAiZXF1YWxzIiBvcGVyYXRvciB3aXRoIHdpbGRjYXJkIHN1cHBvcnQKICAgICAgICAgICAgR3JlYXRlclRoYW4gICAgICAgPT4gJzIwMDEtMDEtMDEgMDE6MDE6MDEnLAogICAgICAgICAgICBHcmVhdGVyVGhhbkVxdWFscyA9PiAnMjAwMS0wMS0wMSAwMTowMTowMScsCiAgICAgICAgICAgIFNtYWxsZXJUaGFuICAgICAgID0+ICcyMDAyLTAyLTAyIDAyOjAyOjAyJywKICAgICAgICAgICAgU21hbGxlclRoYW5FcXVhbHMgPT4gJzIwMDItMDItMDIgMDI6MDI6MDInLAogICAgICAgIH0KCiAgICAgICAgIyBzZWFyY2ggaW4gdGV4dCBmaWVsZHMgb2Ygd29ya29yZGVyIG9iamVjdAogICAgICAgIFdvcmtPcmRlclRpdGxlICAgICAgICAgICAgPT4gJ0Jvb3QgTWFpbHNlcnZlcicsICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFdvcmtPcmRlckluc3RydWN0aW9uICAgICAgPT4gJ1ByZXNzIHRoZSBidXR0b24uJywgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFdvcmtPcmRlclJlcG9ydCAgICAgICAgICAgPT4gJ01haWxzZXJ2ZXIgaGFzIGJvb3RlZC4nLCAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICAjIHNlYXJjaCBpbiB3b3Jrb3JkZXIgKGFycmF5IHBhcmFtcykKICAgICAgICBXb3JrT3JkZXJTdGF0ZXMgICA9PiBbICdhY2NlcHRlZCcsICdyZWFkeScgXSwgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBXb3JrT3JkZXJTdGF0ZUlEcyA9PiBbIDEsIDIsIDMgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBXb3JrT3JkZXJUeXBlcyAgICA9PiBbICd3b3Jrb3JkZXInLCAnYmFja291dCcsICdhcHByb3ZhbCcgXSwgICAjIChvcHRpb25hbCkKICAgICAgICBXb3JrT3JkZXJUeXBlSURzICA9PiBbIDUsIDYsIDcgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgIyBjaGFuZ2VzIHdpdGggcGxhbm5lZCBzdGFydCB0aW1lIGFmdGVyIC4uLgogICAgICAgIFBsYW5uZWRTdGFydFRpbWVOZXdlckRhdGUgPT4gJzIwMDYtMDEtMDkgMDA6MDA6MDEnLCAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgY2hhbmdlcyB3aXRoIHBsYW5uZWQgc3RhcnQgdGltZSBiZWZvcmUgdGhlbiAuLi4uCiAgICAgICAgUGxhbm5lZFN0YXJ0VGltZU9sZGVyRGF0ZSA9PiAnMjAwNi0wMS0xOSAyMzo1OTo1OScsICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgICAgICMgY2hhbmdlcyB3aXRoIHBsYW5uZWQgZW5kIHRpbWUgYWZ0ZXIgLi4uCiAgICAgICAgUGxhbm5lZEVuZFRpbWVOZXdlckRhdGUgICA9PiAnMjAwNi0wMS0wOSAwMDowMDowMScsICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBjaGFuZ2VzIHdpdGggcGxhbm5lZCBlbmQgdGltZSBiZWZvcmUgdGhlbiAuLi4uCiAgICAgICAgUGxhbm5lZEVuZFRpbWVPbGRlckRhdGUgICA9PiAnMjAwNi0wMS0xOSAyMzo1OTo1OScsICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgICAgICMgY2hhbmdlcyB3aXRoIGFjdHVhbCBzdGFydCB0aW1lIGFmdGVyIC4uLgogICAgICAgIEFjdHVhbFN0YXJ0VGltZU5ld2VyRGF0ZSAgPT4gJzIwMDYtMDEtMDkgMDA6MDA6MDEnLCAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgY2hhbmdlcyB3aXRoIGFjdHVhbCBzdGFydCB0aW1lIGJlZm9yZSB0aGVuIC4uLi4KICAgICAgICBBY3R1YWxTdGFydFRpbWVPbGRlckRhdGUgID0+ICcyMDA2LTAxLTE5IDIzOjU5OjU5JywgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgIyBjaGFuZ2VzIHdpdGggYWN0dWFsIGVuZCB0aW1lIGFmdGVyIC4uLgogICAgICAgIEFjdHVhbEVuZFRpbWVOZXdlckRhdGUgICAgPT4gJzIwMDYtMDEtMDkgMDA6MDA6MDEnLCAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgY2hhbmdlcyB3aXRoIGFjdHVhbCBlbmQgdGltZSBiZWZvcmUgdGhlbiAuLi4uCiAgICAgICAgQWN0dWFsRW5kVGltZU9sZGVyRGF0ZSAgICA9PiAnMjAwNi0wMS0xOSAyMzo1OTo1OScsICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgICAgICMgY2hhbmdlcyB3aXRoIGNyZWF0ZWQgdGltZSBhZnRlciAuLi4KICAgICAgICBDcmVhdGVUaW1lTmV3ZXJEYXRlICAgICAgID0+ICcyMDA2LTAxLTA5IDAwOjAwOjAxJywgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjIGNoYW5nZXMgd2l0aCBjcmVhdGVkIHRpbWUgYmVmb3JlIHRoZW4gLi4uLgogICAgICAgIENyZWF0ZVRpbWVPbGRlckRhdGUgICAgICAgPT4gJzIwMDYtMDEtMTkgMjM6NTk6NTknLCAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICAjIGNoYW5nZXMgd2l0aCBjaGFuZ2VkIHRpbWUgYWZ0ZXIgLi4uCiAgICAgICAgQ2hhbmdlVGltZU5ld2VyRGF0ZSAgICAgICA9PiAnMjAwNi0wMS0wOSAwMDowMDowMScsICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBjaGFuZ2VzIHdpdGggY2hhbmdlZCB0aW1lIGJlZm9yZSB0aGVuIC4uLi4KICAgICAgICBDaGFuZ2VUaW1lT2xkZXJEYXRlICAgICAgID0+ICcyMDA2LTAxLTE5IDIzOjU5OjU5JywgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgIyBjaGFuZ2VzIHdpdGggcmVxdWVzdGVkIHRpbWUgYWZ0ZXIgLi4uCiAgICAgICAgUmVxdWVzdGVkVGltZU5ld2VyRGF0ZSAgICA9PiAnMjAwNi0wMS0wOSAwMDowMDowMScsICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBjaGFuZ2VzIHdpdGggcmVxdWVzdGVkIHRpbWUgYmVmb3JlIHRoZW4gLi4uLgogICAgICAgIFJlcXVlc3RlZFRpbWVPbGRlckRhdGUgICAgPT4gJzIwMDYtMDEtMTkgMjM6NTk6NTknLCAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICBPcmRlckJ5ID0+IFsgJ0NoYW5nZUlEJywgJ0NoYW5nZU1hbmFnZXJJRCcgXSwgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjIGlnbm9yZWQgd2hlbiB0aGUgcmVzdWx0IHR5cGUgaXMgJ0NPVU5UJwogICAgICAgICMgZGVmYXVsdDogWyAnQ2hhbmdlSUQnIF0KICAgICAgICAjIChDaGFuZ2VJRCwgQ2hhbmdlTnVtYmVyLCBDaGFuZ2VUaXRsZSwgQ2hhbmdlU3RhdGVJRCwKICAgICAgICAjIENoYW5nZU1hbmFnZXJJRCwgQ2hhbmdlQnVpbGRlcklELAogICAgICAgICMgQ2F0ZWdvcnlJRCwgSW1wYWN0SUQsIFByaW9yaXR5SUQKICAgICAgICAjIFBsYW5uZWRTdGFydFRpbWUsIFBsYW5uZWRFbmRUaW1lLAogICAgICAgICMgQWN0dWFsU3RhcnRUaW1lLCBBY3R1YWxFbmRUaW1lLCBSZXF1ZXN0ZWRUaW1lLAogICAgICAgICMgQ3JlYXRlVGltZSwgQ3JlYXRlQnksIENoYW5nZVRpbWUsIENoYW5nZUJ5KQoKICAgICAgICAjIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIE9yZGVyQnk6CiAgICAgICAgIyBUaGUgT3JkZXJCeURpcmVjdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGZvciBlYWNoIE9yZGVyQnkgYXR0cmlidXRlLgogICAgICAgICMgVGhlIHBhaXJpbmcgaXMgbWFkZSBieSB0aGUgYXJyYXkgaW5kaWNlcy4KCiAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbICdEb3duJywgJ1VwJyBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBpZ25vcmVkIHdoZW4gdGhlIHJlc3VsdCB0eXBlIGlzICdDT1VOVCcKICAgICAgICAjIGRlZmF1bHQ6IFsgJ0Rvd24nIF0KICAgICAgICAjIChEb3duIHwgVXApCgogICAgICAgIFVzaW5nV2lsZGNhcmRzID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgKDAgfCAxKSBkZWZhdWx0IDEKCiAgICAgICAgUmVzdWx0ID0+ICdBUlJBWScgfHwgJ0NPVU5UJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBkZWZhdWx0OiBBUlJBWSwgcmV0dXJucyBhbiBhcnJheSBvZiBjaGFuZ2UgaWRzCiAgICAgICAgIyBDT1VOVCByZXR1cm5zIGEgc2NhbGFyIHdpdGggdGhlIG51bWJlciBvZiBmb3VuZCBjaGFuZ2VzCgogICAgICAgIExpbWl0ID0+IDEwMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgaWdub3JlZCB3aGVuIHRoZSByZXN1bHQgdHlwZSBpcyAnQ09VTlQnCgogICAgICAgIE1pcnJvckRCID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgKDAgfCAxKSBkZWZhdWx0IDAKICAgICAgICAjIGlmIHNldCB0byAxIGFuZCBJVFNNQ2hhbmdlOjpDaGFuZ2VTZWFyY2g6Ok1pcnJvckRCCiAgICAgICAgIyBpcyBhY3RpdmF0ZWQgYW5kIGEgbWlycm9yIGRiIGlzIGNvbmZpZ3VyZWQgaW4KICAgICAgICAjIENvcmU6Ok1pcnJvckRCOjpEU04gdGhlIGNoYW5nZSBzZWFyY2ggd2lsbCB0aGVuIHVzZQogICAgICAgICMgdGhlIG1pcnJvciBkYgoKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQ2hhbmdlU2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHZlcmlmeSB0aGF0IGFsbCBwYXNzZWQgYXJyYXkgcGFyYW1ldGVycyBjb250YWluIGFuIGFycmF5cmVmCiAgICBBUkdVTUVOVDoKICAgIGZvciBteSAkQXJndW1lbnQgKAogICAgICAgIHF3KAogICAgICAgIE9yZGVyQnkKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uCiAgICAgICAgQ2hhbmdlU3RhdGVJRHMKICAgICAgICBDaGFuZ2VTdGF0ZXMKICAgICAgICBDaGFuZ2VNYW5hZ2VySURzCiAgICAgICAgQ2hhbmdlQnVpbGRlcklEcwogICAgICAgIENBQkFnZW50cwogICAgICAgIENBQkN1c3RvbWVycwogICAgICAgIFdvcmtPcmRlckFnZW50SURzCiAgICAgICAgV29ya09yZGVyU3RhdGVzCiAgICAgICAgV29ya09yZGVyU3RhdGVJRHMKICAgICAgICBXb3JrT3JkZXJUeXBlcwogICAgICAgIFdvcmtPcmRlclR5cGVJRHMKICAgICAgICBDcmVhdGVCeQogICAgICAgIENoYW5nZUJ5CiAgICAgICAgQ2F0ZWdvcmllcwogICAgICAgIENhdGVnb3J5SURzCiAgICAgICAgSW1wYWN0cwogICAgICAgIEltcGFjdElEcwogICAgICAgIFByaW9yaXRpZXMKICAgICAgICBQcmlvcml0eUlEcwogICAgICAgICkKICAgICAgICApCiAgICB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gfHw9IFtdOwoKICAgICAgICAgICAgbmV4dCBBUkdVTUVOVDsKICAgICAgICB9CgogICAgICAgIGlmICggcmVmICRQYXJhbXskQXJndW1lbnR9IG5lICdBUlJBWScgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkQXJndW1lbnQgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlZmluZSBhIGxvY2FsIGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBpZiB3ZSBuZWVkIHRvIGRvIGEgY2hhbmdlIHNlYXJjaCBvbiBhbiBleHRlcm5hbCBtaXJyb3IgZGF0YWJhc2UKICAgIGlmICgKICAgICAgICAkUGFyYW17TWlycm9yREJ9CiAgICAgICAgJiYgJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNQ2hhbmdlOjpDaGFuZ2VTZWFyY2g6Ok1pcnJvckRCJykKICAgICAgICAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NvcmU6Ok1pcnJvckRCOjpEU04nKQogICAgICAgICYmICRDb25maWdPYmplY3QtPkdldCgnQ29yZTo6TWlycm9yREI6OlVzZXInKQogICAgICAgICYmICRDb25maWdPYmplY3QtPkdldCgnQ29yZTo6TWlycm9yREI6OlBhc3N3b3JkJykKICAgICAgICApCiAgICB7CgogICAgICAgICMgY3JlYXRlIGFuIGV4dHJhIGRhdGFiYXNlIG9iamVjdCBmb3IgdGhlIG1pcnJvciBkYgogICAgICAgIG15ICRFeHRyYURhdGFiYXNlT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgICAgIERhdGFiYXNlRFNOICA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NvcmU6Ok1pcnJvckRCOjpEU04nKSwKICAgICAgICAgICAgRGF0YWJhc2VVc2VyID0+ICRDb25maWdPYmplY3QtPkdldCgnQ29yZTo6TWlycm9yREI6OlVzZXInKSwKICAgICAgICAgICAgRGF0YWJhc2VQdyAgID0+ICRDb25maWdPYmplY3QtPkdldCgnQ29yZTo6TWlycm9yREI6OlBhc3N3b3JkJyksCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISRFeHRyYURhdGFiYXNlT2JqZWN0ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnQ291bGQgbm90IGNyZWF0ZSBkYXRhYmFzZSBvYmplY3QgZm9yIE1pcnJvckRCIScsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJERCT2JqZWN0ID0gJEV4dHJhRGF0YWJhc2VPYmplY3Q7CiAgICB9CgogICAgIyBkZWZpbmUgb3JkZXIgdGFibGUKICAgIG15ICVPcmRlckJ5VGFibGUgPSAoCiAgICAgICAgQ2hhbmdlSUQgICAgICAgICA9PiAnYy5pZCcsCiAgICAgICAgQ2hhbmdlTnVtYmVyICAgICA9PiAnYy5jaGFuZ2VfbnVtYmVyJywKICAgICAgICBDaGFuZ2VUaXRsZSAgICAgID0+ICdjLnRpdGxlJywKICAgICAgICBDaGFuZ2VTdGF0ZUlEICAgID0+ICdjLmNoYW5nZV9zdGF0ZV9pZCcsCiAgICAgICAgQ2hhbmdlTWFuYWdlcklEICA9PiAnYy5jaGFuZ2VfbWFuYWdlcl9pZCcsCiAgICAgICAgQ2hhbmdlQnVpbGRlcklEICA9PiAnYy5jaGFuZ2VfYnVpbGRlcl9pZCcsCiAgICAgICAgQ2F0ZWdvcnlJRCAgICAgICA9PiAnYy5jYXRlZ29yeV9pZCcsCiAgICAgICAgSW1wYWN0SUQgICAgICAgICA9PiAnYy5pbXBhY3RfaWQnLAogICAgICAgIFByaW9yaXR5SUQgICAgICAgPT4gJ2MucHJpb3JpdHlfaWQnLAogICAgICAgIENyZWF0ZVRpbWUgICAgICAgPT4gJ2MuY3JlYXRlX3RpbWUnLAogICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gJ2MuY3JlYXRlX2J5JywKICAgICAgICBDaGFuZ2VUaW1lICAgICAgID0+ICdjLmNoYW5nZV90aW1lJywKICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+ICdjLmNoYW5nZV9ieScsCiAgICAgICAgUmVxdWVzdGVkVGltZSAgICA9PiAnYy5yZXF1ZXN0ZWRfdGltZScsCiAgICAgICAgUGxhbm5lZFN0YXJ0VGltZSA9PiAnTUlOKHdvMS5wbGFubmVkX3N0YXJ0X3RpbWUpJywKICAgICAgICBQbGFubmVkRW5kVGltZSAgID0+ICdNQVgod28xLnBsYW5uZWRfZW5kX3RpbWUpJywKICAgICAgICBBY3R1YWxTdGFydFRpbWUgID0+ICdNSU4od28xLmFjdHVhbF9zdGFydF90aW1lKScsCiAgICAgICAgQWN0dWFsRW5kVGltZSAgICA9PiAnTUFYKHdvMS5hY3R1YWxfZW5kX3RpbWUpJywKICAgICk7CgogICAgIyBjaGVjayBpZiBPcmRlckJ5IGNvbnRhaW5zIG9ubHkgdW5pcXVlIHZhbGlkIHZhbHVlcwogICAgbXkgJU9yZGVyQnlTZWVuOwogICAgZm9yIG15ICRPcmRlckJ5ICggQHsgJFBhcmFte09yZGVyQnl9IH0gKSB7CgogICAgICAgIGlmICggISRPcmRlckJ5IHx8ICEkT3JkZXJCeVRhYmxleyRPcmRlckJ5fSB8fCAkT3JkZXJCeVNlZW57JE9yZGVyQnl9ICkgewoKICAgICAgICAgICAgIyBmb3VuZCBhbiBlcnJvcgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiT3JkZXJCeSBjb250YWlucyBpbnZhbGlkIHZhbHVlICckT3JkZXJCeScgIgogICAgICAgICAgICAgICAgICAgIC4gJ29yIHRoZSB2YWx1ZSBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlIScsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgcmVtZW1iZXIgdGhlIHZhbHVlIHRvIGNoZWNrIGlmIGl0IGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UKICAgICAgICAkT3JkZXJCeVNlZW57JE9yZGVyQnl9ID0gMTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIE9yZGVyQnlEaXJlY3Rpb24gYXJyYXkgY29udGFpbnMgb25seSAnVXAnIG9yICdEb3duJwogICAgRElSRUNUSU9OOgogICAgZm9yIG15ICREaXJlY3Rpb24gKCBAeyAkUGFyYW17T3JkZXJCeURpcmVjdGlvbn0gfSApIHsKCiAgICAgICAgIyBvbmx5ICdVcCcgb3IgJ0Rvd24nIGFsbG93ZWQKICAgICAgICBuZXh0IERJUkVDVElPTiBpZiAkRGlyZWN0aW9uIGVxICdVcCc7CiAgICAgICAgbmV4dCBESVJFQ1RJT04gaWYgJERpcmVjdGlvbiBlcSAnRG93bic7CgogICAgICAgICMgZm91bmQgYW4gZXJyb3IKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk9yZGVyQnlEaXJlY3Rpb24gY2FuIG9ubHkgY29udGFpbiAnVXAnIG9yICdEb3duJyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgdmFsdWVzCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtVc2luZ1dpbGRjYXJkc30gKSB7CiAgICAgICAgJFBhcmFte1VzaW5nV2lsZGNhcmRzfSA9IDE7CiAgICB9CgogICAgIyBzZXQgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGZvciB0aGUgcmV0dXJuIHR5cGUKICAgIG15ICRSZXN1bHQgPSAkUGFyYW17UmVzdWx0fSB8fCAnQVJSQVknOwoKICAgICMgY2hlY2sgd2hldGhlciBhbGwgb2YgdGhlIGdpdmVuIENoYW5nZVN0YXRlSURzIGFyZSB2YWxpZAogICAgcmV0dXJuIGlmICEkU2VsZi0+X0NoZWNrQ2hhbmdlU3RhdGVJRHMoIENoYW5nZVN0YXRlSURzID0+ICRQYXJhbXtDaGFuZ2VTdGF0ZUlEc30gKTsKCiAgICAjIGNoZWNrIHdoZXRoZXIgYWxsIG9mIHRoZSBnaXZlbiBDYXRlZ29yeUlEcywgSW1wYWN0SURzIGFuZCBQcmlvcml0eUlEcyBhcmUgdmFsaWQKICAgIGZvciBteSAkVHlwZSAocXcoQ2F0ZWdvcnkgSW1wYWN0IFByaW9yaXR5KSkgewogICAgICAgIHJldHVybiBpZiAhJFNlbGYtPl9DaGVja0NoYW5nZUNJUElEcygKICAgICAgICAgICAgSURzICA9PiAkUGFyYW17IiR7VHlwZX1JRHMifSwKICAgICAgICAgICAgVHlwZSA9PiAkVHlwZSwKICAgICAgICApOwogICAgfQoKICAgICMgbG9vayB1cCBhbmQgdGh1cyBjaGVjayB0aGUgU3RhdGVzCiAgICBmb3IgbXkgJENoYW5nZVN0YXRlICggQHsgJFBhcmFte0NoYW5nZVN0YXRlc30gfSApIHsKCiAgICAgICAgIyBsb29rIHVwIHRoZSBJRCBmb3IgdGhlIG5hbWUKICAgICAgICBteSAkQ2hhbmdlU3RhdGVJRCA9ICRTZWxmLT5DaGFuZ2VTdGF0ZUxvb2t1cCgKICAgICAgICAgICAgQ2hhbmdlU3RhdGUgPT4gJENoYW5nZVN0YXRlLAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgd2hldGhlciB0aGUgSUQgd2FzIGZvdW5kLCB3aGV0aGVyIHRoZSBuYW1lIGV4aXN0cwogICAgICAgIGlmICggISRDaGFuZ2VTdGF0ZUlEICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIGNoYW5nZSBzdGF0ZSAkQ2hhbmdlU3RhdGUgaXMgbm90IGtub3duISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBwdXNoIEB7ICRQYXJhbXtDaGFuZ2VTdGF0ZUlEc30gfSwgJENoYW5nZVN0YXRlSUQ7CiAgICB9CgogICAgIyBsb29rIHVwIGFuZCB0aHVzIGNoZWNrIHRoZSBDSVBzCiAgICBteSAlQ0lQU2luZ3VsYXIyUGx1cmFsID0gKAogICAgICAgIENhdGVnb3J5ID0+ICdDYXRlZ29yaWVzJywKICAgICAgICBJbXBhY3QgICA9PiAnSW1wYWN0cycsCiAgICAgICAgUHJpb3JpdHkgPT4gJ1ByaW9yaXRpZXMnLAogICAgKTsKCiAgICBmb3IgbXkgJENJUFNpbmd1bGFyICggc29ydCBrZXlzICVDSVBTaW5ndWxhcjJQbHVyYWwgKSB7CiAgICAgICAgZm9yIG15ICRDSVAgKCBAeyAkUGFyYW17ICRDSVBTaW5ndWxhcjJQbHVyYWx7JENJUFNpbmd1bGFyfSB9IH0gKSB7CgogICAgICAgICAgICAjIGxvb2sgdXAgdGhlIElEIGZvciB0aGUgbmFtZQogICAgICAgICAgICBteSAkQ0lQSUQgPSAkU2VsZi0+Q2hhbmdlQ0lQTG9va3VwKAogICAgICAgICAgICAgICAgQ0lQICA9PiAkQ0lQLAogICAgICAgICAgICAgICAgVHlwZSA9PiAkQ0lQU2luZ3VsYXIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIHdoZXRoZXIgdGhlIElEIHdhcyBmb3VuZCwgd2hldGhlciB0aGUgbmFtZSBleGlzdHMKICAgICAgICAgICAgaWYgKCAhJENJUElEICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlICRDSVBTaW5ndWxhciAkQ0lQIGlzIG5vdCBrbm93biEiLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1c2ggQHsgJFBhcmFteyIke0NJUFNpbmd1bGFyfUlEcyJ9IH0sICRDSVBJRDsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayB3b3Jrb3JkZXIgc3RhdGVzIC0gaWYgZ2l2ZW4KICAgIHJldHVybgogICAgICAgIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpLT5Xb3JrT3JkZXJTdGF0ZUlEc0NoZWNrKAogICAgICAgIFdvcmtPcmRlclN0YXRlSURzID0+ICRQYXJhbXtXb3JrT3JkZXJTdGF0ZUlEc30sCiAgICAgICAgKTsKCiAgICAjIGxvb2sgdXAgYW5kIHRodXMgY2hlY2sgdGhlIHdvcmtvcmRlciBzdGF0ZXMKICAgIGZvciBteSAkV29ya09yZGVyU3RhdGUgKCBAeyAkUGFyYW17V29ya09yZGVyU3RhdGVzfSB9ICkgewoKICAgICAgICAjIGxvb2sgdXAgdGhlIElEIGZvciB0aGUgbmFtZQogICAgICAgIG15ICRXb3JrT3JkZXJTdGF0ZUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyU3RhdGVMb29rdXAoCiAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlID0+ICRXb3JrT3JkZXJTdGF0ZSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIHdoZXRoZXIgdGhlIElEIHdhcyBmb3VuZCwgd2hldGhlciB0aGUgbmFtZSBleGlzdHMKICAgICAgICBpZiAoICEkV29ya09yZGVyU3RhdGVJRCApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSB3b3Jrb3JkZXIgc3RhdGUgJFdvcmtPcmRlclN0YXRlIGlzIG5vdCBrbm93biEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcHVzaCBAeyAkUGFyYW17V29ya09yZGVyU3RhdGVJRHN9IH0sICRXb3JrT3JkZXJTdGF0ZUlEOwogICAgfQoKICAgICMgbG9vayB1cCBhbmQgdGh1cyBjaGVjayB0aGUgd29ya29yZGVyIHR5cGVzCiAgICBmb3IgbXkgJFdvcmtPcmRlclR5cGUgKCBAeyAkUGFyYW17V29ya09yZGVyVHlwZXN9IH0gKSB7CgogICAgICAgICMgbG9vayB1cCB0aGUgSUQgZm9yIHRoZSBuYW1lCiAgICAgICAgbXkgJFdvcmtPcmRlclR5cGVJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlclR5cGVMb29rdXAoCiAgICAgICAgICAgIFdvcmtPcmRlclR5cGUgPT4gJFdvcmtPcmRlclR5cGUsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayB3aGV0aGVyIHRoZSBJRCB3YXMgZm91bmQsIHdoZXRoZXIgdGhlIG5hbWUgZXhpc3RzCiAgICAgICAgaWYgKCAhJFdvcmtPcmRlclR5cGVJRCApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSB3b3Jrb3JkZXIgdHlwZSAkV29ya09yZGVyVHlwZSBpcyBub3Qga25vd24hIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHB1c2ggQHsgJFBhcmFte1dvcmtPcmRlclR5cGVJRHN9IH0sICRXb3JrT3JkZXJUeXBlSUQ7CiAgICB9CgogICAgbXkgQFNRTFdoZXJlOyAgICAgICAgICAgIyBhc3NlbWJsZSB0aGUgY29uZGl0aW9ucyB1c2VkIGluIHRoZSBXSEVSRSBjbGF1c2UKICAgIG15IEBTUUxIYXZpbmc7ICAgICAgICAgICMgYXNzZW1ibGUgdGhlIGNvbmRpdGlvbnMgdXNlZCBpbiB0aGUgSEFWSU5HIGNsYXVzZQogICAgbXkgQElubmVySm9pblRhYmxlczsgICAgIyBrZWVwIHRyYWNrIG9mIHRoZSB0YWJsZXMgdGhhdCBuZWVkIHRvIGJlIGlubmVyIGpvaW5lZAogICAgbXkgQE91dGVySm9pblRhYmxlczsgICAgIyBrZWVwIHRyYWNrIG9mIHRoZSB0YWJsZXMgdGhhdCBuZWVkIHRvIGJlIG91dGVyIGpvaW5lZAoKICAgICMgY2hlY2sgYWxsIGNvbmZpZ3VyZWQgY2hhbmdlIGR5bmFtaWMgZmllbGRzLCBidWlsZCBsb29rdXAgaGFzaCBieSBuYW1lCiAgICBteSAlQ2hhbmdlRHluYW1pY0ZpZWxkTmFtZTJDb25maWc7CiAgICBteSAkQ2hhbmdlRHluYW1pY0ZpZWxkcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBPYmplY3RUeXBlID0+ICdJVFNNQ2hhbmdlJywKICAgICk7CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIEB7JENoYW5nZUR5bmFtaWNGaWVsZHN9ICkgewogICAgICAgICRDaGFuZ2VEeW5hbWljRmllbGROYW1lMkNvbmZpZ3sgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkOwogICAgfQoKICAgICMgY2hlY2sgYWxsIGNvbmZpZ3VyZWQgd29ya29yZGVyIGR5bmFtaWMgZmllbGRzLCBidWlsZCBsb29rdXAgaGFzaCBieSBuYW1lCiAgICBteSAlV29ya09yZGVyRHluYW1pY0ZpZWxkTmFtZTJDb25maWc7CiAgICBteSAkV29ya09yZGVyRHluYW1pY0ZpZWxkcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBPYmplY3RUeXBlID0+ICdJVFNNV29ya09yZGVyJywKICAgICk7CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIEB7JFdvcmtPcmRlckR5bmFtaWNGaWVsZHN9ICkgewogICAgICAgICRXb3JrT3JkZXJEeW5hbWljRmllbGROYW1lMkNvbmZpZ3sgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkOwogICAgfQoKICAgICMgYWRkIHN0cmluZyBwYXJhbXMgdG8gdGhlIFdIRVJFIGNsYXVzZQogICAgbXkgJVN0cmluZ1BhcmFtcyA9ICgKCiAgICAgICAgIyBzdHJpbmdzIGluIGNoYW5nZV9pdGVtCiAgICAgICAgQ2hhbmdlTnVtYmVyICA9PiAnYy5jaGFuZ2VfbnVtYmVyJywKICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICdjLnRpdGxlJywKICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICdjLmRlc2NyaXB0aW9uX3BsYWluJywKICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICdjLmp1c3RpZmljYXRpb25fcGxhaW4nLAoKICAgICAgICAjIHN0cmluZ3MgaW4gY2hhbmdlX3dvcmtvcmRlcgogICAgICAgIFdvcmtPcmRlclRpdGxlICAgICAgID0+ICd3bzIudGl0bGUnLAogICAgICAgIFdvcmtPcmRlckluc3RydWN0aW9uID0+ICd3bzIuaW5zdHJ1Y3Rpb25fcGxhaW4nLAogICAgICAgIFdvcmtPcmRlclJlcG9ydCAgICAgID0+ICd3bzIucmVwb3J0X3BsYWluJywKICAgICk7CgogICAgIyBhZGQgc3RyaW5nIHBhcmFtcyB0byBzcWwtd2hlcmUtYXJyYXkKICAgIFNUUklOR1BBUkFNOgogICAgZm9yIG15ICRTdHJpbmdQYXJhbSAoIHNvcnQga2V5cyAlU3RyaW5nUGFyYW1zICkgewoKICAgICAgICAjIGNoZWNrIHN0cmluZyBwYXJhbXMgZm9yIHVzZWZ1bCB2YWx1ZXMsIHRoZSBzdHJpbmcgJzAnIGlzIGFsbG93ZWQKICAgICAgICBuZXh0IFNUUklOR1BBUkFNIGlmICFleGlzdHMgJFBhcmFteyRTdHJpbmdQYXJhbX07CiAgICAgICAgbmV4dCBTVFJJTkdQQVJBTSBpZiAhZGVmaW5lZCAkUGFyYW17JFN0cmluZ1BhcmFtfTsKICAgICAgICBuZXh0IFNUUklOR1BBUkFNIGlmICRQYXJhbXskU3RyaW5nUGFyYW19IGVxICcnOwoKICAgICAgICAjIHF1b3RlCiAgICAgICAgJFBhcmFteyRTdHJpbmdQYXJhbX0gPSAkREJPYmplY3QtPlF1b3RlKCAkUGFyYW17JFN0cmluZ1BhcmFtfSApOwoKICAgICAgICAjIGNoZWNrIGlmIGEgQ0xPQiBmaWVsZCBpcyB1c2VkIGluIG9yYWNsZQogICAgICAgICMgRml4L1dvcmthcm91bmQgZm9yIE9SQS0wMDkzMjogaW5jb25zaXN0ZW50IGRhdGF0eXBlczogZXhwZWN0ZWQgLSBnb3QgQ0xPQgogICAgICAgIG15ICRGb3JjZUxpa2VTZWFyY2hGb3JTcGVjaWFsRmllbGRzOwogICAgICAgIGlmICgKICAgICAgICAgICAgJFNlbGYtPntEQlR5cGV9IGVxICdvcmFjbGUnCiAgICAgICAgICAgICYmICggJFN0cmluZ1BhcmFtIGVxICdEZXNjcmlwdGlvbicgfHwgJFN0cmluZ1BhcmFtIGVxICdKdXN0aWZpY2F0aW9uJyApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRGb3JjZUxpa2VTZWFyY2hGb3JTcGVjaWFsRmllbGRzID0gMTsKICAgICAgICB9CgogICAgICAgICMgd2lsZGNhcmRzIGFyZSB1c2VkIChvciBMSUtFIHNlYXJjaCBpcyBmb3JjZWQgZm9yIHNvbWUgc3BlY2lhbCBmaWVsZHMgb24gb3JhY2xlKQogICAgICAgIGlmICggJFBhcmFte1VzaW5nV2lsZGNhcmRzfSB8fCAkRm9yY2VMaWtlU2VhcmNoRm9yU3BlY2lhbEZpZWxkcyApIHsKCiAgICAgICAgICAgICMgZ2V0IGxpa2UgZXNjYXBlIHN0cmluZyBuZWVkZWQgZm9yIHNvbWUgZGF0YWJhc2VzIChlLmcuIG9yYWNsZSkKICAgICAgICAgICAgbXkgJExpa2VFc2NhcGVTdHJpbmcgPSAkREJPYmplY3QtPkdldERhdGFiYXNlRnVuY3Rpb24oJ0xpa2VFc2NhcGVTdHJpbmcnKTsKCiAgICAgICAgICAgICMgUXVvdGUKICAgICAgICAgICAgJFBhcmFteyRTdHJpbmdQYXJhbX0gPSAkREJPYmplY3QtPlF1b3RlKCAkUGFyYW17JFN0cmluZ1BhcmFtfSwgJ0xpa2UnICk7CgogICAgICAgICAgICAjIHJlcGxhY2UgKiB3aXRoICUKICAgICAgICAgICAgJFBhcmFteyRTdHJpbmdQYXJhbX0gPX4gc3sgXCorIH17JX14bXNnOwoKICAgICAgICAgICAgIyBkbyBub3QgdXNlIHN0cmluZyBwYXJhbXMgd2hpY2ggY29udGFpbiBvbmx5ICUKICAgICAgICAgICAgbmV4dCBTVFJJTkdQQVJBTSBpZiAkUGFyYW17JFN0cmluZ1BhcmFtfSA9fiBteyBcQSAlKiBceiB9eG1zOwoKICAgICAgICAgICAgcHVzaCBAU1FMV2hlcmUsCiAgICAgICAgICAgICAgICAiTE9XRVIoJFN0cmluZ1BhcmFtc3skU3RyaW5nUGFyYW19KSBMSUtFIExPV0VSKCckUGFyYW17JFN0cmluZ1BhcmFtfScpICRMaWtlRXNjYXBlU3RyaW5nIjsKICAgICAgICB9CgogICAgICAgICMgbm8gd2lsZGNhcmRzIGFyZSB1c2VkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHB1c2ggQFNRTFdoZXJlLAogICAgICAgICAgICAgICAgIkxPV0VSKCRTdHJpbmdQYXJhbXN7JFN0cmluZ1BhcmFtfSkgPSBMT1dFUignJFBhcmFteyRTdHJpbmdQYXJhbX0nKSI7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRTdHJpbmdQYXJhbXN7JFN0cmluZ1BhcmFtfSA9fiBteyB3bzIgfXhtcyApIHsKCiAgICAgICAgICAgICMgdGhlIGNoYW5nZV93b3Jrb3JkZXIgdGFibGUgbmVlZHMgdG8gYmUgam9pbmVkLCB3aGVuIGl0IG9jY3VycyBpbiB0aGUgV0hFUkUgY2xhdXNlCiAgICAgICAgICAgIHB1c2ggQElubmVySm9pblRhYmxlcywgJ3dvMic7CiAgICAgICAgfQogICAgfQoKICAgICMgYnVpbGQgc3FsIGZvciBkeW5hbWljIGZpZWxkcwogICAgbXkgJFNRTER5bmFtaWNGaWVsZElubmVySm9pbnMgPSAnJzsgICAgIyBqb2luLXN0YXRlbWVudHMKICAgIG15ICRTUUxEeW5hbWljRmllbGRXaGVyZSAgICAgID0gJyc7ICAgICMgd2hlcmUtY2xhdXNlCiAgICBteSAkRHluYW1pY0ZpZWxkSm9pbkNvdW50ZXIgICA9IDE7CgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCBAeyRDaGFuZ2VEeW5hbWljRmllbGRzfSwgQHskV29ya09yZGVyRHluYW1pY0ZpZWxkc30gKSB7CgogICAgICAgIG15ICRTZWFyY2hQYXJhbSA9ICRQYXJhbXsgIkR5bmFtaWNGaWVsZF8iIC4gJER5bmFtaWNGaWVsZC0+e05hbWV9IH07CgogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICggISRTZWFyY2hQYXJhbSApOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICggcmVmICRTZWFyY2hQYXJhbSBuZSAnSEFTSCcgKTsKCiAgICAgICAgbXkgJE5lZWRKb2luOwoKICAgICAgICBmb3IgbXkgJE9wZXJhdG9yICggc29ydCBrZXlzICV7JFNlYXJjaFBhcmFtfSApIHsKCiAgICAgICAgICAgIG15IEBTZWFyY2hQYXJhbXMgPSAoIHJlZiAkU2VhcmNoUGFyYW0tPnskT3BlcmF0b3J9IGVxICdBUlJBWScgKQogICAgICAgICAgICAgICAgPyBAeyAkU2VhcmNoUGFyYW0tPnskT3BlcmF0b3J9IH0KICAgICAgICAgICAgICAgIDogKCAkU2VhcmNoUGFyYW0tPnskT3BlcmF0b3J9ICk7CgogICAgICAgICAgICBteSAkU1FMRHluYW1pY0ZpZWxkV2hlcmVTdWIgPSAnJzsKICAgICAgICAgICAgaWYgKCRTUUxEeW5hbWljRmllbGRXaGVyZSkgewogICAgICAgICAgICAgICAgJFNRTER5bmFtaWNGaWVsZFdoZXJlU3ViID0gJyBBTkQgKCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkU1FMRHluYW1pY0ZpZWxkV2hlcmVTdWIgPSAnICgnOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkQ291bnRlciA9IDA7CiAgICAgICAgICAgIFRFWFQ6CiAgICAgICAgICAgIGZvciBteSAkVGV4dCAoQFNlYXJjaFBhcmFtcykgewogICAgICAgICAgICAgICAgbmV4dCBURVhUIGlmICggIWRlZmluZWQgJFRleHQgfHwgJFRleHQgZXEgJycgKTsKCiAgICAgICAgICAgICAgICAkVGV4dCA9fiBzL1wqLyUvZ2k7CgogICAgICAgICAgICAgICAgIyBjaGVjayBzZWFyY2ggYXR0cmlidXRlLCB3ZSBkbyBub3QgbmVlZCB0byBzZWFyY2ggZm9yICoKICAgICAgICAgICAgICAgIG5leHQgVEVYVCBpZiAkVGV4dCA9fiAvXlwlezEsM30kLzsKCiAgICAgICAgICAgICAgICAjIHZhbGlkYXRlIGRhdGEgdHlwZQogICAgICAgICAgICAgICAgbXkgJFZhbGlkYXRlU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKS0+VmFsdWVWYWxpZGF0ZSgKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZCwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFRleHQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9IHx8IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJFZhbGlkYXRlU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlYXJjaCBub3QgZXhlY3V0ZWQgZHVlIHRvIGludmFsaWQgdmFsdWUgJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIicgb24gZmllbGQgJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJER5bmFtaWNGaWVsZC0+e05hbWV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICInISIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRDb3VudGVyKSB7CiAgICAgICAgICAgICAgICAgICAgJFNRTER5bmFtaWNGaWVsZFdoZXJlU3ViIC49ICcgT1IgJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRTUUxEeW5hbWljRmllbGRXaGVyZVN1YgogICAgICAgICAgICAgICAgICAgIC49ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKS0+U2VhcmNoU1FMR2V0KAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkLAogICAgICAgICAgICAgICAgICAgIFRhYmxlQWxpYXMgICAgICAgICA9PiAiZGZ2JER5bmFtaWNGaWVsZEpvaW5Db3VudGVyIiwKICAgICAgICAgICAgICAgICAgICBPcGVyYXRvciAgICAgICAgICAgPT4gJE9wZXJhdG9yLAogICAgICAgICAgICAgICAgICAgIFNlYXJjaFRlcm0gICAgICAgICA9PiAkVGV4dCwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRDb3VudGVyKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFNRTER5bmFtaWNGaWVsZFdoZXJlU3ViIC49ICcpICc7CiAgICAgICAgICAgIGlmICgkQ291bnRlcikgewogICAgICAgICAgICAgICAgJFNRTER5bmFtaWNGaWVsZFdoZXJlIC49ICRTUUxEeW5hbWljRmllbGRXaGVyZVN1YjsKICAgICAgICAgICAgICAgICROZWVkSm9pbiA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkTmVlZEpvaW4pIHsKCiAgICAgICAgICAgIGlmICggJER5bmFtaWNGaWVsZC0+e09iamVjdFR5cGV9IGVxICdJVFNNQ2hhbmdlJyApIHsKCiAgICAgICAgICAgICAgICAjIGpvaW4gdGhlIHRhYmxlIGZvciB0aGlzIGR5bmFtaWMgZmllbGQKICAgICAgICAgICAgICAgICRTUUxEeW5hbWljRmllbGRJbm5lckpvaW5zCiAgICAgICAgICAgICAgICAgICAgLj0gIklOTkVSIEpPSU4gZHluYW1pY19maWVsZF92YWx1ZSBkZnYkRHluYW1pY0ZpZWxkSm9pbkNvdW50ZXIKICAgICAgICAgICAgICAgICAgICBPTiAoYy5pZCA9IGRmdiREeW5hbWljRmllbGRKb2luQ291bnRlci5vYmplY3RfaWQKICAgICAgICAgICAgICAgICAgICAgICAgQU5EIGRmdiREeW5hbWljRmllbGRKb2luQ291bnRlci5maWVsZF9pZCA9ICIgLgogICAgICAgICAgICAgICAgICAgICREQk9iamVjdC0+UXVvdGUoICREeW5hbWljRmllbGQtPntJRH0sICdJbnRlZ2VyJyApIC4gIikgIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWxzaWYgKCAkRHluYW1pY0ZpZWxkLT57T2JqZWN0VHlwZX0gZXEgJ0lUU01Xb3JrT3JkZXInICkgewoKICAgICAgICAgICAgICAgICMgYWx3YXlzIGpvaW4gdGhlIHdvcmtvcmRlciB0YWJsZSBmb3IgaW5uZXIgam9pbnMgd2l0aCB0aGUgY2hhbmdlIHRhYmxlCiAgICAgICAgICAgICAgICAjIGl0IGRvZXMgbm90IG1hdHRlciBpZiBhbHJlYWR5IGNvbnRhaW5lZCBpbiBASW5uZXJKb2luVGFibGVzCiAgICAgICAgICAgICAgICAjIGFzIGRvdWJsZSBlbnRyaWVzIGFyZSBmaWx0ZXJlZCBvdXQgbGF0ZXIKICAgICAgICAgICAgICAgIHB1c2ggQElubmVySm9pblRhYmxlcywgJ3dvMic7CgogICAgICAgICAgICAgICAgJFNRTER5bmFtaWNGaWVsZElubmVySm9pbnMKICAgICAgICAgICAgICAgICAgICAuPSAiSU5ORVIgSk9JTiBkeW5hbWljX2ZpZWxkX3ZhbHVlIGRmdiREeW5hbWljRmllbGRKb2luQ291bnRlcgogICAgICAgICAgICAgICAgICAgIE9OICh3bzIuaWQgPSBkZnYkRHluYW1pY0ZpZWxkSm9pbkNvdW50ZXIub2JqZWN0X2lkCiAgICAgICAgICAgICAgICAgICAgICAgIEFORCBkZnYkRHluYW1pY0ZpZWxkSm9pbkNvdW50ZXIuZmllbGRfaWQgPSAiIC4KICAgICAgICAgICAgICAgICAgICAkREJPYmplY3QtPlF1b3RlKCAkRHluYW1pY0ZpZWxkLT57SUR9LCAnSW50ZWdlcicgKSAuICIpICI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICREeW5hbWljRmllbGRKb2luQ291bnRlcisrOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBhcnJheSBwYXJhbXMKICAgIG15ICVBcnJheVBhcmFtcyA9ICgKICAgICAgICBDaGFuZ2VTdGF0ZUlEcyAgID0+ICdjLmNoYW5nZV9zdGF0ZV9pZCcsCiAgICAgICAgQ2hhbmdlTWFuYWdlcklEcyA9PiAnYy5jaGFuZ2VfbWFuYWdlcl9pZCcsCiAgICAgICAgQ2hhbmdlQnVpbGRlcklEcyA9PiAnYy5jaGFuZ2VfYnVpbGRlcl9pZCcsCiAgICAgICAgQ2F0ZWdvcnlJRHMgICAgICA9PiAnYy5jYXRlZ29yeV9pZCcsCiAgICAgICAgSW1wYWN0SURzICAgICAgICA9PiAnYy5pbXBhY3RfaWQnLAogICAgICAgIFByaW9yaXR5SURzICAgICAgPT4gJ2MucHJpb3JpdHlfaWQnLAogICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gJ2MuY3JlYXRlX2J5JywKICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+ICdjLmNoYW5nZV9ieScsCiAgICApOwoKICAgICMgYWRkIGFycmF5IHBhcmFtcyB0byBzcWwtd2hlcmUtYXJyYXkKICAgIEFSUkFZUEFSQU06CiAgICBmb3IgbXkgJEFycmF5UGFyYW0gKCBzb3J0IGtleXMgJUFycmF5UGFyYW1zICkgewoKICAgICAgICAjIGlnbm9yZSBlbXB0eSBsaXN0cwogICAgICAgIG5leHQgQVJSQVlQQVJBTSBpZiAhQHsgJFBhcmFteyRBcnJheVBhcmFtfSB9OwoKICAgICAgICAjIHF1b3RlCiAgICAgICAgZm9yIG15ICRPbmVQYXJhbSAoIEB7ICRQYXJhbXskQXJyYXlQYXJhbX0gfSApIHsKICAgICAgICAgICAgJE9uZVBhcmFtID0gJERCT2JqZWN0LT5RdW90ZSggJE9uZVBhcmFtLCAnSW50ZWdlcicgKTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIHN0cmluZwogICAgICAgIG15ICRJblN0cmluZyA9IGpvaW4gJywgJywgQHsgJFBhcmFteyRBcnJheVBhcmFtfSB9OwoKICAgICAgICBwdXNoIEBTUUxXaGVyZSwgIiRBcnJheVBhcmFtc3skQXJyYXlQYXJhbX0gSU4gKCRJblN0cmluZykiOwogICAgfQoKICAgICMgc2V0IHRpbWUgcGFyYW1zCiAgICBteSAlVGltZVBhcmFtcyA9ICgKCiAgICAgICAgIyB0aW1lcyBpbiBjaGFuZ2VfaXRlbQogICAgICAgIENyZWF0ZVRpbWVOZXdlckRhdGUgICAgPT4gJ2MuY3JlYXRlX3RpbWUgPj0nLAogICAgICAgIENyZWF0ZVRpbWVPbGRlckRhdGUgICAgPT4gJ2MuY3JlYXRlX3RpbWUgPD0nLAogICAgICAgIENoYW5nZVRpbWVOZXdlckRhdGUgICAgPT4gJ2MuY2hhbmdlX3RpbWUgPj0nLAogICAgICAgIENoYW5nZVRpbWVPbGRlckRhdGUgICAgPT4gJ2MuY2hhbmdlX3RpbWUgPD0nLAogICAgICAgIFJlcXVlc3RlZFRpbWVOZXdlckRhdGUgPT4gJ2MucmVxdWVzdGVkX3RpbWUgPj0nLAogICAgICAgIFJlcXVlc3RlZFRpbWVPbGRlckRhdGUgPT4gJ2MucmVxdWVzdGVkX3RpbWUgPD0nLAoKICAgICAgICAjIHRpbWVzIGluIGNoYW5nZV93b3Jrb3JkZXIKICAgICAgICBQbGFubmVkU3RhcnRUaW1lTmV3ZXJEYXRlID0+ICdtaW4od28xLnBsYW5uZWRfc3RhcnRfdGltZSkgPj0nLAogICAgICAgIFBsYW5uZWRTdGFydFRpbWVPbGRlckRhdGUgPT4gJ21pbih3bzEucGxhbm5lZF9zdGFydF90aW1lKSA8PScsCiAgICAgICAgUGxhbm5lZEVuZFRpbWVOZXdlckRhdGUgICA9PiAnbWF4KHdvMS5wbGFubmVkX2VuZF90aW1lKSA+PScsCiAgICAgICAgUGxhbm5lZEVuZFRpbWVPbGRlckRhdGUgICA9PiAnbWF4KHdvMS5wbGFubmVkX2VuZF90aW1lKSA8PScsCiAgICAgICAgQWN0dWFsU3RhcnRUaW1lTmV3ZXJEYXRlICA9PiAnbWluKHdvMS5hY3R1YWxfc3RhcnRfdGltZSkgPj0nLAogICAgICAgIEFjdHVhbFN0YXJ0VGltZU9sZGVyRGF0ZSAgPT4gJ21pbih3bzEuYWN0dWFsX3N0YXJ0X3RpbWUpIDw9JywKICAgICAgICBBY3R1YWxFbmRUaW1lTmV3ZXJEYXRlICAgID0+ICdtYXgod28xLmFjdHVhbF9lbmRfdGltZSkgPj0nLAogICAgICAgIEFjdHVhbEVuZFRpbWVPbGRlckRhdGUgICAgPT4gJ21heCh3bzEuYWN0dWFsX2VuZF90aW1lKSA8PScsCiAgICApOwoKICAgICMgY2hlY2sgYW5kIGFkZCB0aW1lIHBhcmFtcyB0byBXSEVSRSBvciBIQVZJTkcgY2xhdXNlCiAgICBUSU1FUEFSQU06CiAgICBmb3IgbXkgJFRpbWVQYXJhbSAoIHNvcnQga2V5cyAlVGltZVBhcmFtcyApIHsKCiAgICAgICAgbmV4dCBUSU1FUEFSQU0gaWYgISRQYXJhbXskVGltZVBhcmFtfTsKCiAgICAgICAgaWYgKCAkUGFyYW17JFRpbWVQYXJhbX0gIX4gbXsgXEEgXGRcZFxkXGQtXGRcZC1cZFxkIFxzIFxkXGQ6XGRcZDpcZFxkIFx6IH14bXMgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgcGFyYW1ldGVyICRUaW1lUGFyYW0gaGFzIGFuIGludmFsaWQgZGF0ZSBmb3JtYXQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRQYXJhbXskVGltZVBhcmFtfSA9ICREQk9iamVjdC0+UXVvdGUoICRQYXJhbXskVGltZVBhcmFtfSApOwoKICAgICAgICBpZiAoICRUaW1lUGFyYW1zeyRUaW1lUGFyYW19ID1+IG17IHdvMSB9eG1zICkgewoKICAgICAgICAgICAgIyB0aGUgY2hhbmdlX3dvcmtvcmRlciB0YWJsZSBuZWVkcyB0byBiZSBqb2luZWQsIHdoZW4gaXQgb2NjdXJzIGluIHRoZSBIQVZJTkcgY2xhdXNlCiAgICAgICAgICAgIHB1c2ggQFNRTEhhdmluZywgICAgICAgIiRUaW1lUGFyYW1zeyRUaW1lUGFyYW19ICckUGFyYW17JFRpbWVQYXJhbX0nIjsKICAgICAgICAgICAgcHVzaCBAT3V0ZXJKb2luVGFibGVzLCAnd28xJzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIHRoZSB0aW1lIGF0dHJpYnV0ZXMgb2YgY2hhbmdlX2l0ZW0gc2hvdyB1cCBpbiB0aGUgV0hFUkUgY2xhdXNlCiAgICAgICAgICAgIHB1c2ggQFNRTFdoZXJlLCAiJFRpbWVQYXJhbXN7JFRpbWVQYXJhbX0gJyRQYXJhbXskVGltZVBhcmFtfSciOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNvbmRpdGlvbnMgZm9yIENBQiBzZWFyY2hlcwogICAgbXkgJUNBQlBhcmFtcyA9ICgKICAgICAgICBDQUJBZ2VudHMgICAgPT4gJ2NhYjEudXNlcl9pZCcsCiAgICAgICAgQ0FCQ3VzdG9tZXJzID0+ICdjYWIyLmN1c3RvbWVyX3VzZXJfaWQnLAogICAgKTsKCiAgICAjIGFkZCBjYWIgcGFyYW1zIHRvIHNxbC13aGVyZS1hcnJheQogICAgQ0FCUEFSQU06CiAgICBmb3IgbXkgJENBQlBhcmFtICggc29ydCBrZXlzICVDQUJQYXJhbXMgKSB7CiAgICAgICAgbmV4dCBDQUJQQVJBTSBpZiAhQHsgJFBhcmFteyRDQUJQYXJhbX0gfTsKCiAgICAgICAgIyBxdW90ZQogICAgICAgIGZvciBteSAkT25lUGFyYW0gKCBAeyAkUGFyYW17JENBQlBhcmFtfSB9ICkgewogICAgICAgICAgICAkT25lUGFyYW0gPSAkREJPYmplY3QtPlF1b3RlKCRPbmVQYXJhbSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRDQUJQYXJhbSBlcSAnQ0FCQWdlbnRzJyApIHsKCiAgICAgICAgICAgICMgQ0FCQWdlbnQgaXMgYSBpbnRlZ2VyLCBzbyBubyBxdW90ZXMgYXJlIG5lZWRlZAogICAgICAgICAgICBteSAkSW5TdHJpbmcgPSBqb2luICcsICcsIEB7ICRQYXJhbXskQ0FCUGFyYW19IH07CiAgICAgICAgICAgIHB1c2ggQFNRTFdoZXJlLCAgICAgICAgIiRDQUJQYXJhbXN7JENBQlBhcmFtfSBJTiAoJEluU3RyaW5nKSI7CiAgICAgICAgICAgIHB1c2ggQElubmVySm9pblRhYmxlcywgJ2NhYjEnOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRDQUJQYXJhbSBlcSAnQ0FCQ3VzdG9tZXJzJyApIHsKCiAgICAgICAgICAgICMgQ0FCQ3VzdG9tZXIgaXMgYSBzdHJpbmcsIHNvIHRoZSBzaW5nbGUgcXVvdGVzIGFyZSBuZWVkZWQKICAgICAgICAgICAgbXkgJEluU3RyaW5nID0gam9pbiAnLCAnLCBtYXAgeyInJF8nIn0gQHsgJFBhcmFteyRDQUJQYXJhbX0gfTsKICAgICAgICAgICAgcHVzaCBAU1FMV2hlcmUsICAgICAgICAiJENBQlBhcmFtc3skQ0FCUGFyYW19IElOICgkSW5TdHJpbmcpIjsKICAgICAgICAgICAgcHVzaCBASW5uZXJKb2luVGFibGVzLCAnY2FiMic7CiAgICAgICAgfQogICAgfQoKICAgICMgd29ya29yZGVyIGFycmF5IHBhcmFtcwogICAgbXkgJVdvcmtPcmRlckFycmF5UGFyYW1zID0gKAogICAgICAgIFdvcmtPcmRlckFnZW50SURzID0+ICd3b3Jrb3JkZXJfYWdlbnRfaWQnLAogICAgICAgIFdvcmtPcmRlclN0YXRlSURzID0+ICd3b3Jrb3JkZXJfc3RhdGVfaWQnLAogICAgICAgIFdvcmtPcmRlclR5cGVJRHMgID0+ICd3b3Jrb3JkZXJfdHlwZV9pZCcsCiAgICApOwoKICAgICMgYWRkIHdvcmtvcmRlciBwYXJhbXMgdG8gc3FsLXdoZXJlLWFycmF5CiAgICBXT1JLT1JERVJQQVJBTToKICAgIGZvciBteSAkV29ya09yZGVyUGFyYW0gKCBzb3J0IGtleXMgJVdvcmtPcmRlckFycmF5UGFyYW1zICkgewoKICAgICAgICBuZXh0IFdPUktPUkRFUlBBUkFNIGlmICFAeyAkUGFyYW17JFdvcmtPcmRlclBhcmFtfSB9OwoKICAgICAgICAjIHF1b3RlIGFzIGludGVnZXIKICAgICAgICBmb3IgbXkgJE9uZVBhcmFtICggQHsgJFBhcmFteyRXb3JrT3JkZXJQYXJhbX0gfSApIHsKICAgICAgICAgICAgJE9uZVBhcmFtID0gJERCT2JqZWN0LT5RdW90ZSggJE9uZVBhcmFtLCAnSW50ZWdlcicgKTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIHN0cmluZwogICAgICAgIG15ICRJblN0cmluZyA9IGpvaW4gJywgJywgQHsgJFBhcmFteyRXb3JrT3JkZXJQYXJhbX0gfTsKICAgICAgICBteSAkQ29sdW1uTmFtZSA9ICRXb3JrT3JkZXJBcnJheVBhcmFtc3skV29ya09yZGVyUGFyYW19OwoKICAgICAgICBwdXNoIEBTUUxXaGVyZSwgICAgICAgICJ3bzIuJENvbHVtbk5hbWUgSU4gKCAkSW5TdHJpbmcgKSI7CiAgICAgICAgcHVzaCBASW5uZXJKb2luVGFibGVzLCAnd28yJzsKICAgIH0KCiAgICAjIGRlZmluZSB3aGljaCBwYXJhbWV0ZXIgcmVxdWlyZSBhIGpvaW4gd2l0aCB3b3Jrb3JkZXIgdGFibGUKICAgIG15ICVUYWJsZVJlcXVpcmVzSm9pbiA9ICgKICAgICAgICBQbGFubmVkU3RhcnRUaW1lID0+IDEsCiAgICAgICAgUGxhbm5lZEVuZFRpbWUgICA9PiAxLAogICAgICAgIEFjdHVhbFN0YXJ0VGltZSAgPT4gMSwKICAgICAgICBBY3R1YWxFbmRUaW1lICAgID0+IDEsCiAgICApOwoKICAgICMgZGVsZXRlIHRoZSBPcmRlckJ5IHBhcmFtZXRlciB3aGVuIHRoZSByZXN1bHQgdHlwZSBpcyAnQ09VTlQnCiAgICBpZiAoICRSZXN1bHQgZXEgJ0NPVU5UJyApIHsKICAgICAgICAkUGFyYW17T3JkZXJCeX0gPSBbXTsKICAgIH0KCiAgICAjIGFzc2VtYmxlIHRoZSBPUkRFUiBCWSBjbGF1c2UKICAgIG15IEBTUUxPcmRlckJ5OwogICAgbXkgQFNRTEFsaWFzZXM7ICAgICMgb3JkZXIgYnkgYWxpYXNlcywgYmUgb24gdGhlIHNhdmUgc2lkZSB3aXRoIE15U1FMCiAgICBteSAkQ291bnQgPSAwOwogICAgZm9yIG15ICRPcmRlckJ5ICggQHsgJFBhcmFte09yZGVyQnl9IH0gKSB7CgogICAgICAgICMgc2V0IHRoZSBkZWZhdWx0IG9yZGVyIGRpcmVjdGlvbgogICAgICAgIG15ICREaXJlY3Rpb24gPSAnREVTQyc7CgogICAgICAgICMgYWRkIHRoZSBnaXZlbiBvcmRlciBkaXJlY3Rpb24KICAgICAgICBpZiAoICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufS0+WyRDb3VudF0gKSB7CiAgICAgICAgICAgIGlmICggJFBhcmFte09yZGVyQnlEaXJlY3Rpb259LT5bJENvdW50XSBlcSAnVXAnICkgewogICAgICAgICAgICAgICAgJERpcmVjdGlvbiA9ICdBU0MnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFBhcmFte09yZGVyQnlEaXJlY3Rpb259LT5bJENvdW50XSBlcSAnRG93bicgKSB7CiAgICAgICAgICAgICAgICAkRGlyZWN0aW9uID0gJ0RFU0MnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGFkZCBTUUwKICAgICAgICBpZiAoICRPcmRlckJ5VGFibGV7JE9yZGVyQnl9ID1+IG17IHdvMSB9eG1zICkgewogICAgICAgICAgICBwdXNoIEBTUUxBbGlhc2VzLCAiJE9yZGVyQnlUYWJsZXskT3JkZXJCeX0gYXMgYWxpYXNfJE9yZGVyQnkiOwogICAgICAgICAgICBwdXNoIEBTUUxPcmRlckJ5LCAiYWxpYXNfJE9yZGVyQnkgJERpcmVjdGlvbiI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBwdXNoIEBTUUxPcmRlckJ5LCAiJE9yZGVyQnlUYWJsZXskT3JkZXJCeX0gJERpcmVjdGlvbiI7CiAgICAgICAgfQoKICAgICAgICAjIGZvciBzb21lIG9yZGVyIGZpZWxkcywgd2UgbmVlZCB0byBtYWtlIHN1cmUsIHRoYXQgdGhlIHdvMSB0YWJsZSBpcyBqb2luZWQKICAgICAgICBpZiAoICRUYWJsZVJlcXVpcmVzSm9pbnskT3JkZXJCeX0gKSB7CiAgICAgICAgICAgIHB1c2ggQE91dGVySm9pblRhYmxlcywgJ3dvMSc7CiAgICAgICAgfQogICAgfQogICAgY29udGludWUgewogICAgICAgICRDb3VudCsrOwogICAgfQoKICAgICMgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBvcmRlcmluZyBpcyBub3QgZGV0ZXJtaW5lZAogICAgIyB3ZSBhZGQgYW4gZGVzY2VuZGluZyBvcmRlcmluZyBieSBpZAogICAgaWYgKCAhZ3JlcCB7ICRfIGVxICdDaGFuZ2VJRCcgfSAoIEB7ICRQYXJhbXtPcmRlckJ5fSB9ICkgKSB7CiAgICAgICAgcHVzaCBAU1FMT3JkZXJCeSwgIiRPcmRlckJ5VGFibGV7Q2hhbmdlSUR9IERFU0MiOwogICAgfQoKICAgICMgYXNzZW1ibGUgdGhlIFNRTCBxdWVyeQogICAgbXkgJFNRTCA9ICdTRUxFQ1QgJyAuIGpvaW4oICcsICcsICggJ2MuaWQnLCBAU1FMQWxpYXNlcyApICkgLiAnIEZST00gY2hhbmdlX2l0ZW0gYyAnOwoKICAgICMgbW9kaWZ5IFNRTCB3aGVuIHRoZSByZXN1bHQgdHlwZSBpcyAnQ09VTlQnLCBhbmQgd2hlbiB0aGVyZSBhcmUgbm8gam9pbnMKICAgIGlmICggJFJlc3VsdCBlcSAnQ09VTlQnICYmICFASW5uZXJKb2luVGFibGVzICYmICFAT3V0ZXJKb2luVGFibGVzICkgewogICAgICAgICRTUUwgICAgICAgID0gJ1NFTEVDVCBDT1VOVChjLmlkKSBGUk9NIGNoYW5nZV9pdGVtIGMgJzsKICAgICAgICBAU1FMT3JkZXJCeSA9ICgpOwogICAgfQoKICAgICMgYWRkIHRoZSBqb2lucwogICAgbXkgJUxvbmdUYWJsZU5hbWUgPSAoCiAgICAgICAgd28xICA9PiAnY2hhbmdlX3dvcmtvcmRlcicsCiAgICAgICAgd28yICA9PiAnY2hhbmdlX3dvcmtvcmRlcicsCiAgICAgICAgY2FiMSA9PiAnY2hhbmdlX2NhYicsCiAgICAgICAgY2FiMiA9PiAnY2hhbmdlX2NhYicsCiAgICApOwogICAgbXkgJVRhYmxlU2VlbjsKCiAgICBJTk5FUl9KT0lOX1RBQkxFOgogICAgZm9yIG15ICRUYWJsZSAoQElubmVySm9pblRhYmxlcykgewoKICAgICAgICAjIGRvIG5vdCBqb2luIGEgdGFibGUgdHdpY2UKICAgICAgICBuZXh0IElOTkVSX0pPSU5fVEFCTEUgaWYgJFRhYmxlU2VlbnskVGFibGV9OwoKICAgICAgICAkVGFibGVTZWVueyRUYWJsZX0gPSAxOwoKICAgICAgICBpZiAoICEkTG9uZ1RhYmxlTmFtZXskVGFibGV9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiRW5jb3VudGVyZWQgaW52YWxpZCBpbm5lciBqb2luIHRhYmxlICckVGFibGUnISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRTUUwgLj0gIklOTkVSIEpPSU4gJExvbmdUYWJsZU5hbWV7JFRhYmxlfSAkVGFibGUgT04gJFRhYmxlLmNoYW5nZV9pZCA9IGMuaWQgIjsKICAgIH0KCiAgICAjIGFkZCB0aGUgZHluYW1pYyBmaWVsZCBpbm5lciBqb2luIHN0YXRlbWVudHMKICAgICRTUUwgLj0gJFNRTER5bmFtaWNGaWVsZElubmVySm9pbnM7CgogICAgT1VURVJfSk9JTl9UQUJMRToKICAgIGZvciBteSAkVGFibGUgKEBPdXRlckpvaW5UYWJsZXMpIHsKCiAgICAgICAgIyBkbyBub3Qgam9pbiBhIHRhYmxlIHR3aWNlLCB3aGVuIGEgdGFibGUgaGFzIGJlZW4gaW5uZXIgam9pbmVkLCBubyBvdXRlciBqb2luIGlzIG5lY2Vzc2FyeQogICAgICAgIG5leHQgT1VURVJfSk9JTl9UQUJMRSBpZiAkVGFibGVTZWVueyRUYWJsZX07CgogICAgICAgICMgcmVtZW1iZXIgdGhhdCB0aGlzIHRhYmxlIGlzIGpvaW5lZCBhbHJlYWR5CiAgICAgICAgJFRhYmxlU2VlbnskVGFibGV9ID0gMTsKCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISRMb25nVGFibGVOYW1leyRUYWJsZX0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJFbmNvdW50ZXJlZCBpbnZhbGlkIG91dGVyIGpvaW4gdGFibGUgJyRUYWJsZSchIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJFNRTCAuPSAiTEVGVCBPVVRFUiBKT0lOICRMb25nVGFibGVOYW1leyRUYWJsZX0gJFRhYmxlIE9OICRUYWJsZS5jaGFuZ2VfaWQgPSBjLmlkICI7CiAgICB9CgogICAgIyBhZGQgdGhlIFdIRVJFIGNsYXVzZQogICAgaWYgKEBTUUxXaGVyZSkgewogICAgICAgICRTUUwgLj0gJ1dIRVJFICc7CiAgICAgICAgJFNRTCAuPSBqb2luICcgQU5EICcsIG1hcCB7IiggJF8gKSJ9IEBTUUxXaGVyZTsKICAgICAgICAkU1FMIC49ICcgJzsKICAgICAgICBpZiAoJFNRTER5bmFtaWNGaWVsZFdoZXJlKSB7CiAgICAgICAgICAgICRTUUwgLj0gJyBBTkQgJyAuICRTUUxEeW5hbWljRmllbGRXaGVyZTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBpZiAoJFNRTER5bmFtaWNGaWVsZFdoZXJlKSB7CiAgICAgICAgICAgICRTUUwgLj0gJyBXSEVSRSAnIC4gJFNRTER5bmFtaWNGaWVsZFdoZXJlOwogICAgICAgIH0KICAgIH0KCiAgICAjIHdlIG5lZWQgdG8gZ3JvdXAgd2hlbmV2ZXIgdGhlcmUgaXMgYSBqb2luCiAgICBpZiAoCiAgICAgICAgc2NhbGFyIEBJbm5lckpvaW5UYWJsZXMKICAgICAgICB8fCAkU1FMRHluYW1pY0ZpZWxkV2hlcmUKICAgICAgICB8fCBzY2FsYXIgQE91dGVySm9pblRhYmxlcwogICAgICAgICkKICAgIHsKICAgICAgICAkU1FMIC49ICdHUk9VUCBCWSBjLmlkICc7CgogICAgICAgICMgYWRkIHRoZSBvcmRlcmJ5IGNvbHVtbnMgYWxzbyB0byB0aGUgZ3JvdXAgYnkgY2xhdXNlLCBhcyB0aGlzIGlzIGNvcnJlY3QgU1FMCiAgICAgICAgIyBhbmQgc29tZSBEQnMgbGlrZSBQb3N0Z3JlU1FMIGFyZSBtb3JlIHN0cmljdCB0aGFuIG90aGVycwogICAgICAgICMgdGhpcyBpcyB0aGUgYnVnZml4IGZvciBidWcjIDU4MjUgaHR0cDovL2J1Z3Mub3Rycy5vcmcvc2hvd19idWcuY2dpP2lkPTU4MjUKICAgICAgICBpZiAoQFNRTE9yZGVyQnkpIHsKCiAgICAgICAgICAgIE9SREVSQlk6CiAgICAgICAgICAgIGZvciBteSAkT3JkZXJCeSAoQFNRTE9yZGVyQnkpIHsKCiAgICAgICAgICAgICAgICAjIGdldCB0aGUgY29sdW1uIGZyb20gYSBzdHJpbmcgdGhhdCBsb29rcyBsaWtlOiBjLmNoYW5nZV9udW1iZXIgQVNDCiAgICAgICAgICAgICAgICBpZiAoICRPcmRlckJ5ID1+IG17IFxBIChcUyspIH14bXMgKSB7CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBjb2x1bW4gcGFydCBvZiB0aGUgc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgbXkgJENvbHVtbiA9ICQxOwoKICAgICAgICAgICAgICAgICAgICAjIGRvIG5vdCBpbmNsdWRlIHRoZSBjLmlkIGNvbHVtbiBhZ2FpbiwgYXMgdGhpcyBpcyBhbHJlYWR5IGRvbmUgYmVmb3JlCiAgICAgICAgICAgICAgICAgICAgbmV4dCBPUkRFUkJZIGlmICRDb2x1bW4gZXEgJ2MuaWQnOwoKICAgICAgICAgICAgICAgICAgICAjIGRvIG5vdCBpbmNsdWRlIGFsaWFzZXMgb2YgYWdncmVnYXRlIGZ1bmN0aW9ucyAobWluL21heCkKICAgICAgICAgICAgICAgICAgICBuZXh0IE9SREVSQlkgaWYgJENvbHVtbiA9fiBteyBcQSBhbGlhc18gfXhtczsKCiAgICAgICAgICAgICAgICAgICAgIyBhZGQgdGhlIGNvbHVtbiB0byB0aGUgZ3JvdXAgYnkgY2xhdXNlCiAgICAgICAgICAgICAgICAgICAgJFNRTCAuPSAiLCAkQ29sdW1uICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBhZGQgdGhlIEhBVklORyBjbGF1c2UKICAgIGlmIChAU1FMSGF2aW5nKSB7CiAgICAgICAgJFNRTCAuPSAnSEFWSU5HICc7CiAgICAgICAgJFNRTCAuPSBqb2luICcgQU5EICcsIG1hcCB7IiggJF8gKSJ9IEBTUUxIYXZpbmc7CiAgICAgICAgJFNRTCAuPSAnICc7CiAgICB9CgogICAgIyBhZGQgdGhlIE9SREVSIEJZIGNsYXVzZQogICAgaWYgKEBTUUxPcmRlckJ5KSB7CiAgICAgICAgJFNRTCAuPSAnT1JERVIgQlkgJzsKICAgICAgICAkU1FMIC49IGpvaW4gJywgJywgQFNRTE9yZGVyQnk7CiAgICAgICAgJFNRTCAuPSAnICc7CiAgICB9CgogICAgIyBpZ25vcmUgdGhlIHBhcmFtZXRlciAnTGltaXQnIHdoZW4gcmVzdWx0IHR5cGUgaXMgJ0NPVU5UJwogICAgaWYgKCAkUmVzdWx0IGVxICdDT1VOVCcgKSB7CiAgICAgICAgZGVsZXRlICRQYXJhbXtMaW1pdH07CiAgICB9CgogICAgIyBhc2sgZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgTGltaXQgPT4gJFBhcmFte0xpbWl0fSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBASURzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBASURzLCAkUm93WzBdOwogICAgfQoKICAgIGlmICgKICAgICAgICAkUmVzdWx0IGVxICdDT1VOVCcKICAgICAgICAmJiAhQElubmVySm9pblRhYmxlcwogICAgICAgICYmICEkU1FMRHluYW1pY0ZpZWxkV2hlcmUKICAgICAgICAmJiAhQE91dGVySm9pblRhYmxlcwogICAgICAgICkKICAgIHsKCiAgICAgICAgIyByZXR1cm4gdGhlIENPVU5UKGMuaWQpIGF0dHJpYnV0ZQogICAgICAgIHJldHVybiAkSURzWzBdIHx8IDA7CiAgICB9CiAgICBlbHNpZiAoICRSZXN1bHQgZXEgJ0NPVU5UJyApIHsKCiAgICAgICAgIyByZXR1cm4gdGhlIGNvdW50IGFzIHRoZSBudW1iZXIgb2YgSURzCiAgICAgICAgcmV0dXJuIHNjYWxhciBASURzOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIFxASURzOwogICAgfQp9Cgo9aXRlbSBDaGFuZ2VEZWxldGUoKQoKRGVsZXRlIGEgY2hhbmdlLgoKVGhpcyBmdW5jdGlvbiBmaXJzdCByZW1vdmVzIGFsbCBsaW5rcyBhbmQgYXR0YWNobWVudHMgdG8gdGhlIGdpdmVuIGNoYW5nZS4KVGhlbiBpdCBnZXRzIGEgbGlzdCBvZiBhbGwgd29ya29yZGVycyBvZiB0aGUgY2hhbmdlIGFuZApjYWxscyBDPFdvcmtvcmRlckRlbGV0ZSgpPiBmb3IgZWFjaCB3b3Jrb3JkZXIsIHdoaWNoIHdpbGwgZGVsZXRlCmFsbCBsaW5rcyBhbmQgYWxsIGF0dGFjaG1lbnRzIHRvIHRoZSB3b3Jrb3JkZXJzLgpUaGVuIGl0IGRlbGV0ZXMgdGhlIENBQi4KQWZ0ZXIgdGhhdCB0aGUgY2hhbmdlIGlzIHJlbW92ZWQuClRoZSBoaXN0b3J5IG9mIHRoaXMgY2hhbmdlIHdpbGwgYmUgZGVsZXRlZCBkdXJpbmcgdGhlIGhhbmRsaW5nIG9mIHRoZQp0cmlnZ2VyZWQgQ2hhbmdlRGVsZXRlUG9zdC1ldmVudC4KCiAgICBteSAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICBDaGFuZ2VJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQ2hhbmdlRGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhDaGFuZ2VJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBdHRyaWJ1dGV9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXR0cmlidXRlISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyB0cmlnZ2VyIENoYW5nZURlbGV0ZVByZS1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnQ2hhbmdlRGVsZXRlUHJlJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyB0aGUgY2hhbmdlIGRvZXMgbm90IGV4aXN0LCB3aGVuIGl0IGNhbid0IGJlIGxvb2tlZCB1cAogICAgcmV0dXJuIGlmICEkU2VsZi0+Q2hhbmdlTG9va3VwKAogICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtDaGFuZ2VJRH0sCiAgICApOwoKICAgICMgZGVsZXRlIGFsbCBsaW5rcyB0byB0aGlzIGNoYW5nZQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rRGVsZXRlQWxsKAogICAgICAgIE9iamVjdCA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgS2V5ICAgID0+ICRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICMgZ2V0IHRoZSBsaXN0IG9mIGF0dGFjaG1lbnRzIGFuZCBkZWxldGUgdGhlbQogICAgbXkgQEF0dGFjaG1lbnRzID0gJFNlbGYtPkNoYW5nZUF0dGFjaG1lbnRMaXN0KAogICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtDaGFuZ2VJRH0sCiAgICApOwogICAgZm9yIG15ICRGaWxlbmFtZSAoQEF0dGFjaG1lbnRzKSB7CiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+Q2hhbmdlQXR0YWNobWVudERlbGV0ZSgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICAgICAgRmlsZW5hbWUgPT4gJEZpbGVuYW1lLAogICAgICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNoYW5nZSBkYXRhIHRvIGdldCB0aGUgd29ya29yZGVyIGlkcwogICAgbXkgJENoYW5nZURhdGEgPSAkU2VsZi0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgaWYgY2hhbmdlIGNvbnRhaW5zIHdvcmtvcmRlcnMKICAgIGlmICgKICAgICAgICAkQ2hhbmdlRGF0YQogICAgICAgICYmIHJlZiAkQ2hhbmdlRGF0YSBlcSAnSEFTSCcKICAgICAgICAmJiAkQ2hhbmdlRGF0YS0+e1dvcmtPcmRlcklEc30KICAgICAgICAmJiByZWYgJENoYW5nZURhdGEtPntXb3JrT3JkZXJJRHN9IGVxICdBUlJBWScKICAgICAgICApCiAgICB7CgogICAgICAgICMgZGVsZXRlIHRoZSB3b3Jrb3JkZXJzCiAgICAgICAgZm9yIG15ICRXb3JrT3JkZXJJRCAoIEB7ICRDaGFuZ2VEYXRhLT57V29ya09yZGVySURzfSB9ICkgewoKICAgICAgICAgICAgbXkgJERlbGV0ZVN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpLT5Xb3JrT3JkZXJEZWxldGUoCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCAgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgTm9OdW1iZXJDYWxjID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gaWYgISREZWxldGVTdWNjZXNzOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlbGV0ZSB0aGUgQ0FCCiAgICByZXR1cm4gaWYgISRTZWxmLT5DaGFuZ2VDQUJEZWxldGUoCiAgICAgICAgQ2hhbmdlSUQgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgYWxsIGR5bmFtaWMgZmllbGRzIGZvciB0aGUgb2JqZWN0IHR5cGUgSVRTTUNoYW5nZQogICAgbXkgJER5bmFtaWNGaWVsZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgT2JqZWN0VHlwZSA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgVmFsaWQgICAgICA9PiAwLAogICAgKTsKCiAgICAjIGRlbGV0ZSBkeW5hbWljZmllbGQgdmFsdWVzIGZvciB0aGlzIGNoYW5nZQogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGRMaXN0fSApIHsKCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRDb25maWc7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX07CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfSApOwoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyktPlZhbHVlRGVsZXRlKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgZGVsZXRlIGNhY2hlCiAgICBmb3IgbXkgJEtleSAoCiAgICAgICAgJ0NoYW5nZUdldDo6SUQ6OicgLiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgICdDaGFuZ2VMaXN0JywKICAgICAgICAnQ2hhbmdlTG9va3VwOjpDaGFuZ2VJRDo6JyAuICRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgJ0NoYW5nZUxvb2t1cDo6Q2hhbmdlTnVtYmVyOjonIC4gJENoYW5nZURhdGEtPntDaGFuZ2VOdW1iZXJ9LAogICAgICAgICkKICAgIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJEtleSwKICAgICAgICApOwogICAgfQoKICAgICMgdHJpZ2dlciBDaGFuZ2VEZWxldGVQb3N0LUV2ZW50CiAgICAjIHRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBkZWxldGluZyB0aGUgY2hhbmdlIGZyb20gdGhlIGRhdGFiYXNlLAogICAgIyBiZWNhdXNlIG9mIGEgZm9yZWlnbiBrZXkgY29uc3RyYWludCBpbiB0aGUgY2hhbmdlX2hpc3RvcnkgdGFibGUKICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ0NoYW5nZURlbGV0ZVBvc3QnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgT2xkQ2hhbmdlRGF0YSA9PiAkQ2hhbmdlRGF0YSwKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGRlbGV0ZSB0aGUgY2hhbmdlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBjaGFuZ2VfaXRlbSBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NoYW5nZUlEfSBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ2hhbmdlU3RhdGVMb29rdXAoKQoKVGhpcyBtZXRob2QgZG9lcyBhIGxvb2t1cCBmb3IgYSBjaGFuZ2Ugc3RhdGUuIElmIGEgY2hhbmdlIHN0YXRlIGlkIGlzIGdpdmVuLAppdCByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjaGFuZ2Ugc3RhdGUuIElmIGEgY2hhbmdlIHN0YXRlIG5hbWUgaXMgZ2l2ZW4sCnRoZSBhcHByb3ByaWF0ZSBpZCBpcyByZXR1cm5lZC4KCiAgICBteSAkQ2hhbmdlU3RhdGUgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VTdGF0ZUxvb2t1cCgKICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+IDEyMzQsCiAgICApOwoKICAgIG15ICRDaGFuZ2VTdGF0ZUlEID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU3RhdGVMb29rdXAoCiAgICAgICAgQ2hhbmdlU3RhdGUgPT4gJ2FjY2VwdGVkJywKICAgICk7Cgo9Y3V0CgpzdWIgQ2hhbmdlU3RhdGVMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGVpdGhlciBDaGFuZ2VTdGF0ZUlEIG9yIFN0YXRlIG11c3QgYmUgcGFzc2VkCiAgICBpZiAoICEkUGFyYW17Q2hhbmdlU3RhdGVJRH0gJiYgISRQYXJhbXtDaGFuZ2VTdGF0ZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENoYW5nZVN0YXRlSUQgb3IgQ2hhbmdlU3RhdGUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtDaGFuZ2VTdGF0ZUlEfSAmJiAkUGFyYW17Q2hhbmdlU3RhdGV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDaGFuZ2VTdGF0ZUlEIE9SIENoYW5nZVN0YXRlIC0gbm90IGJvdGghJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCB0aGUgY2hhbmdlIHN0YXRlcyBmcm9tIHRoZSBnZW5lcmFsIGNhdGFsb2cKICAgIG15ICRTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgKTsKCiAgICAjIGNvbnZlcnQgc3RhdGUgbGlzdCBpbnRvIGEgbG9va3VwIGhhc2gKICAgIG15ICVTdGF0ZUlEMk5hbWU7CiAgICBpZiAoICRTdGF0ZUxpc3QgJiYgcmVmICRTdGF0ZUxpc3QgZXEgJ0hBU0gnICYmICV7JFN0YXRlTGlzdH0gKSB7CiAgICAgICAgJVN0YXRlSUQyTmFtZSA9ICV7JFN0YXRlTGlzdH07CiAgICB9CgogICAgIyBjaGVjayB0aGUgc3RhdGUgaGFzaAogICAgaWYgKCAhJVN0YXRlSUQyTmFtZSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0NvdWxkIG5vdCByZXRyaWV2ZSBjaGFuZ2Ugc3RhdGVzIGZyb20gdGhlIGdlbmVyYWwgY2F0YWxvZy4nLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCAkUGFyYW17Q2hhbmdlU3RhdGVJRH0gKSB7CiAgICAgICAgcmV0dXJuICRTdGF0ZUlEMk5hbWV7ICRQYXJhbXtDaGFuZ2VTdGF0ZUlEfSB9OwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgcmV2ZXJzZSBrZXkgLSB2YWx1ZSBwYWlycyB0byBoYXZlIHRoZSBuYW1lIGFzIGtleXMKICAgICAgICBteSAlU3RhdGVOYW1lMklEID0gcmV2ZXJzZSAlU3RhdGVJRDJOYW1lOwoKICAgICAgICByZXR1cm4gJFN0YXRlTmFtZTJJRHsgJFBhcmFte0NoYW5nZVN0YXRlfSB9OwogICAgfQp9Cgo9aXRlbSBDaGFuZ2VQb3NzaWJsZVN0YXRlc0dldCgpCgpUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiBwb3NzaWJsZSBjaGFuZ2Ugc3RhdGVzLgpJZiBDaGFuZ2VJRCBpcyBvbWl0dGVkLCB0aGUgY29tcGxldGUgbGlzdCBvZiBjaGFuZ2Ugc3RhdGVzIGlzIHJldHVybmVkLgpJZiBDaGFuZ2VJRCBpcyBnaXZlbiwgdGhlIGxpc3Qgb2YgcG9zc2libGUgY2hhbmdlIHN0YXRlcyBmb3IgdGhpcwpjaGFuZ2UgaXMgcmV0dXJuZWQuCgogICAgbXkgJENoYW5nZVN0YXRlTGlzdCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVBvc3NpYmxlU3RhdGVzR2V0KAogICAgICAgIENoYW5nZUlEID0+IDEyMywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CgpUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcmVmZXJlbmNlIHRvIGFuIGFycmF5IG9mIGhhc2hyZWZzLiBUaGUgZWxlbWVudCAnS2V5JyBpcyB0aGVuCnRoZSBDaGFuZ2VTdGF0ZUlEIGFuZCB0aGUgZWxlbWVudCAnVmFsdWUnIGlzIHRoZSBuYW1lIG9mIHRoZSBzdGF0ZS4gVGhlIGFycmF5IGVsZW1lbnRzCmFyZSBzb3J0ZWQgYnkgc3RhdGUgaWQuCgogICAgbXkgJENoYW5nZVN0YXRlTGlzdCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+IDE1NiwKICAgICAgICAgICAgVmFsdWUgPT4gJ2FwcHJvdmVkJywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gMTU3LAogICAgICAgICAgICBWYWx1ZSA9PiAnaW4gcHJvZ3Jlc3MnLAogICAgICAgIH0sCiAgICBdOwoKPWN1dAoKc3ViIENoYW5nZVBvc3NpYmxlU3RhdGVzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBVc2VySUQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBjaGFuZ2Ugc3RhdGUgbGlzdAogICAgbXkgJFN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICApIHx8IHt9OwoKICAgICMgdG8gc3RvcmUgYW4gYXJyYXkgb2YgaGFzaCByZWZzCiAgICBteSBAQXJyYXlIYXNoUmVmOwoKICAgICMgaWYgQ2hhbmdlSUQgaXMgZ2l2ZW4sIG9ubHkgdXNlIHBvc3NpYmxlIG5leHQgc3RhdGVzIGFzIGRlZmluZWQgaW4gc3RhdGUgbWFjaGluZQogICAgaWYgKCAkUGFyYW17Q2hhbmdlSUR9ICkgewoKICAgICAgICAjIGdldCBjaGFuZ2UgZGF0YQogICAgICAgIG15ICRDaGFuZ2UgPSAkU2VsZi0+Q2hhbmdlR2V0KAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGZvciBzdGF0ZSBsb2NrCiAgICAgICAgbXkgJFN0YXRlTG9jazsKICAgICAgICAkU3RhdGVMb2NrID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nKS0+Q29uZGl0aW9uTWF0Y2hTdGF0ZUxvY2soCiAgICAgICAgICAgIE9iamVjdE5hbWUgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICBTZWxlY3RvciAgID0+ICRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgICAgIFN0YXRlSUQgICAgPT4gJENoYW5nZS0+e0NoYW5nZVN0YXRlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgc2V0IGFzIGRlZmF1bHQgc3RhdGUgY3VycmVudCBjaGFuZ2Ugc3RhdGUKICAgICAgICBteSBATmV4dFN0YXRlSURzID0gKCAkQ2hhbmdlLT57Q2hhbmdlU3RhdGVJRH0gKTsKCiAgICAgICAgIyBjaGVjayBpZiByZWFjaGFibGUgY2hhbmdlIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgZm9yIGxvY2tlZCBjaGFuZ2Ugc3RhdGVzCiAgICAgICAgbXkgJENoYW5nZUVuZFN0YXRlc0FsbG93ZWQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0lUU01DaGFuZ2U6OlN0YXRlTG9jazo6QWxsb3dFbmRTdGF0ZXMnKTsKCiAgICAgICAgaWYgKCRDaGFuZ2VFbmRTdGF0ZXNBbGxvd2VkKSB7CgogICAgICAgICAgICAjIHNldCBhcyBkZWZhdWx0IHN0YXRlIGN1cnJlbnQgc3RhdGUgYW5kIGFsbCBwb3NzaWJsZSBlbmQgc3RhdGVzCiAgICAgICAgICAgIG15ICRFbmRTdGF0ZUlEc1JlZgogICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVN0YXRlTWFjaGluZScpLT5TdGF0ZVRyYW5zaXRpb25HZXRFbmRTdGF0ZXMoCiAgICAgICAgICAgICAgICBTdGF0ZUlEID0+ICRDaGFuZ2UtPntDaGFuZ2VTdGF0ZUlEfSwKICAgICAgICAgICAgICAgIENsYXNzICAgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICAgICAgICAgKSB8fCBbXTsKICAgICAgICAgICAgQE5leHRTdGF0ZUlEcyA9IHNvcnQgKCBAeyRFbmRTdGF0ZUlEc1JlZn0sICRDaGFuZ2UtPntDaGFuZ2VTdGF0ZUlEfSApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgcG9zc2libGUgbmV4dCBzdGF0ZXMgaWYgbm8gc3RhdGUgbG9jawogICAgICAgIGlmICggISRTdGF0ZUxvY2sgKSB7CgogICAgICAgICAgICAjIGdldCB0aGUgcG9zc2libGUgbmV4dCBzdGF0ZSBpZHMKICAgICAgICAgICAgbXkgJE5leHRTdGF0ZUlEc1JlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNU3RhdGVNYWNoaW5lJyktPlN0YXRlVHJhbnNpdGlvbkdldCgKICAgICAgICAgICAgICAgIFN0YXRlSUQgPT4gJENoYW5nZS0+e0NoYW5nZVN0YXRlSUR9LAogICAgICAgICAgICAgICAgQ2xhc3MgICA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgICkgfHwgW107CgogICAgICAgICAgICAjIGFkZCBjdXJyZW50IGNoYW5nZSBzdGF0ZSBpZCB0byBsaXN0CiAgICAgICAgICAgIEBOZXh0U3RhdGVJRHMgPSBzb3J0ICggQHskTmV4dFN0YXRlSURzUmVmfSwgJENoYW5nZS0+e0NoYW5nZVN0YXRlSUR9ICk7CiAgICAgICAgfQoKICAgICAgICAjIGFzc2VtYmxlIHRoZSBhcnJheSBvZiBoYXNoIHJlZnMgd2l0aCBvbmx5IHBvc3NpYmxlIG5leHQgc3RhdGVzCiAgICAgICAgU1RBVEVJRDoKICAgICAgICBmb3IgbXkgJFN0YXRlSUQgKEBOZXh0U3RhdGVJRHMpIHsKCiAgICAgICAgICAgIG5leHQgU1RBVEVJRCBpZiAhJFN0YXRlSUQ7CgogICAgICAgICAgICBwdXNoIEBBcnJheUhhc2hSZWYsIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFN0YXRlTGlzdC0+eyRTdGF0ZUlEfSwKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBcQEFycmF5SGFzaFJlZjsKICAgIH0KCiAgICAjIGFzc2VtYmxlIHRoZSBhcnJheSBvZiBoYXNoIHJlZnMgd2l0aCBhbGwgbmV4dCBzdGF0ZXMKICAgIGZvciBteSAkU3RhdGVJRCAoIHNvcnQga2V5cyAleyRTdGF0ZUxpc3R9ICkgewogICAgICAgIHB1c2ggQEFycmF5SGFzaFJlZiwgewogICAgICAgICAgICBLZXkgICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgVmFsdWUgPT4gJFN0YXRlTGlzdC0+eyRTdGF0ZUlEfSwKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiBcQEFycmF5SGFzaFJlZjsKfQoKPWl0ZW0gQ2hhbmdlUG9zc2libGVDSVBHZXQoKQoKVGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2YgcG9zc2libGUgY2F0ZWdvcmllcywgaW1wYWN0cyBvciBwcmlvcml0aWVzLgoKICAgIG15ICRDSVBMaXN0ID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlUG9zc2libGVDSVBHZXQoCiAgICAgICAgVHlwZSAgID0+ICdDYXRlZ29yeScsICAjIENhdGVnb3J5fEltcGFjdHxQcmlvcml0eQogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKClRoZSByZXR1cm4gdmFsdWUgaXMgYSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgb2YgaGFzaHJlZnMuIFRoZSBFbGVtZW50ICdLZXknIGlzIHRoZW4KdGhlIElEIGFuZCB0aGUgZWxlbWVudCAnVmFsdWUnIGlzIHRoZSBuYW1lIG9mIHRoZSBjYXRlZ29yeSwgaW1wYWN0IG9yIHByaW9yaXR5LgpUaGUgYXJyYXkgZWxlbWVudHMgYXJlIHNvcnRlZCBieSBpZCBpbiBhc2NlbmRpbmcgb3JkZXIuCgogICAgbXkgJENJUExpc3QgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAxNTYsCiAgICAgICAgICAgIFZhbHVlID0+ICcxIHZlcnkgbG93JywKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gMTU3LAogICAgICAgICAgICBWYWx1ZSA9PiAnMiBsb3cnLAogICAgICAgIH0sCiAgICBdOwoKPWN1dAoKc3ViIENoYW5nZVBvc3NpYmxlQ0lQR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBVc2VySUQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIFR5cGUgcGFyYW0gZm9yIHZhbGlkIHZhbHVlcwogICAgaWYgKAogICAgICAgICEkUGFyYW17VHlwZX0KICAgICAgICB8fCAoICRQYXJhbXtUeXBlfSBuZSAnQ2F0ZWdvcnknICYmICRQYXJhbXtUeXBlfSBuZSAnSW1wYWN0JyAmJiAkUGFyYW17VHlwZX0gbmUgJ1ByaW9yaXR5JyApCiAgICAgICAgKQogICAgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnVGhlIHBhcmFtIFR5cGUgbXVzdCBiZSBlaXRoZXIgIkNhdGVnb3J5IiBvciAiSW1wYWN0IiBvciAiUHJpb3JpdHkiIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgaXRlbSBsaXN0IGZvciB0aGUgcmVxdWVzdGVkIHR5cGUKICAgIG15ICRDSVBMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjonIC4gJFBhcmFte1R5cGV9LAogICAgKSB8fCB7fTsKCiAgICAjIGFzc2VtYmxlIGFuIGFycmF5IG9mIGhhc2ggcmVmcwogICAgbXkgQEFycmF5SGFzaFJlZjsKICAgIGZvciBteSAkSUQgKCBzb3J0IHsgJENJUExpc3QtPnskYX0gY21wICRDSVBMaXN0LT57JGJ9IH0ga2V5cyAleyRDSVBMaXN0fSApIHsKICAgICAgICBwdXNoIEBBcnJheUhhc2hSZWYsIHsKICAgICAgICAgICAgS2V5ICAgPT4gJElELAogICAgICAgICAgICBWYWx1ZSA9PiAkQ0lQTGlzdC0+eyRJRH0sCiAgICAgICAgfTsKICAgIH0KCiAgICByZXR1cm4gXEBBcnJheUhhc2hSZWY7Cn0KCj1pdGVtIENoYW5nZUNJUExvb2t1cCgpCgpUaGlzIG1ldGhvZCBkb2VzIGEgbG9va3VwIGZvciBhIGNoYW5nZSBjYXRlZ29yeSwgaW1wYWN0IG9yIHByaW9yaXR5LgpJZiBhIGNoYW5nZSBDSVAtSUQgaXMgZ2l2ZW4sIGl0IHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIENJUC4KSWYgYSBjaGFuZ2UgQ0lQIG5hbWUgaXMgZ2l2ZW4sIHRoZSBhcHByb3ByaWF0ZSBJRCBpcyByZXR1cm5lZC4KCiAgICBteSAkTmFtZSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUNJUExvb2t1cCgKICAgICAgICBJRCAgID0+IDEyMzQsCiAgICAgICAgVHlwZSA9PiAnUHJpb3JpdHknLAogICAgKTsKCiAgICBteSAkSUQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VDSVBMb29rdXAoCiAgICAgICAgQ0lQICA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgVHlwZSA9PiAnQ2F0ZWdvcnknLAogICAgKTsKCj1jdXQKCnN1YiBDaGFuZ2VDSVBMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGVpdGhlciBJRCBvciBDSVAgbXVzdCBiZSBwYXNzZWQKICAgIGlmICggISRQYXJhbXtJRH0gJiYgISRQYXJhbXtDSVB9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBJRCBvciBDSVAhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIHRoYXQgbm90IGJvdGggSUQgYW5kIENJUCBhcmUgZ2l2ZW4KICAgIGlmICggJFBhcmFte0lEfSAmJiAkUGFyYW17Q0lQfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgZWl0aGVyIElEIE9SIENJUCAtIG5vdCBib3RoIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBUeXBlIHBhcmFtIGZvciB2YWxpZCB2YWx1ZXMKICAgIGlmICgKICAgICAgICAhJFBhcmFte1R5cGV9CiAgICAgICAgfHwgKCAkUGFyYW17VHlwZX0gbmUgJ0NhdGVnb3J5JyAmJiAkUGFyYW17VHlwZX0gbmUgJ0ltcGFjdCcgJiYgJFBhcmFte1R5cGV9IG5lICdQcmlvcml0eScgKQogICAgICAgICkKICAgIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1RoZSBwYXJhbSBUeXBlIG11c3QgYmUgZWl0aGVyICJDYXRlZ29yeSIgb3IgIkltcGFjdCIgb3IgIlByaW9yaXR5IiEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGNoYW5nZSBDSVAgZnJvbSBnZW5lcmFsIGNhdGFsb2cKICAgICMgbWFwcGluZyBvZiB0aGUgaWQgdG8gdGhlIG5hbWUKICAgIG15ICVDaGFuZ2VDSVAgPSAlewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OicgLiAkUGFyYW17VHlwZX0sCiAgICAgICAgKSB8fCB7fQogICAgfTsKCiAgICBpZiAoICRQYXJhbXtJRH0gKSB7CiAgICAgICAgcmV0dXJuICRDaGFuZ2VDSVB7ICRQYXJhbXtJRH0gfTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIHJldmVyc2Uga2V5IC0gdmFsdWUgcGFpcnMgdG8gaGF2ZSB0aGUgbmFtZSBhcyBrZXlzCiAgICAgICAgbXkgJVJldmVyc2VkQ2hhbmdlQ0lQID0gcmV2ZXJzZSAlQ2hhbmdlQ0lQOwoKICAgICAgICByZXR1cm4gJFJldmVyc2VkQ2hhbmdlQ0lQeyAkUGFyYW17Q0lQfSB9OwogICAgfQp9Cgo9aXRlbSBQZXJtaXNzaW9uKCkKClJldHVybnMgd2hldGhlciB0aGUgYWdlbnQgQzxVc2VySUQ+IGhhcyBwZXJtaXNzaW9ucyBvZiB0aGUgdHlwZSBDPFR5cGU+Cm9uIHRoZSBjaGFuZ2UgQzxDaGFuZ2VJRD4uIFRoZSBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgb24gdG8KdGhlIHBlcm1pc3Npb24gbW9kdWxlcyB0aGF0IHdlcmUgcmVnaXN0ZXJlZCBpbiB0aGUgcGVybWlzc2lvbiByZWdpc3RyeS4KVGhlIHN0YW5kYXJkIHBlcm1pc3Npb24gcmVnaXN0cnkgaXMgQjxJVFNNQ2hhbmdlOjpQZXJtaXNzaW9uPiwgYnV0CnRoYXQgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgcGFyYW1ldGVyIEM8UGVybWlzc2lvblJlZ2lzdHJ5Pi4KClRoZSBvcHRpb25hbCBvcHRpb24gQzxMb2dObz4gdHVybnMgb2ZmIGxvZ2dpbmcgd2hlbiBhY2Nlc3Mgd2FzIGRlbmllZC4KVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGUgbWV0aG9kIGlzIHVzZWQgZm9yIGNoZWNraW5nIHdoZXRoZXIgYSBsaW5rIG9yIGFuIGFjdGlvbiBzaG91bGQgYmUgc2hvd24uCgogICAgbXkgJEFjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEyMywKICAgICAgICBUeXBlICAgICAgICAgICAgICAgPT4gJ3JvJywgICAgICAgICAgICAgICAgICAgICAgICAgIyAncm8nIGFuZCAncncnIGFyZSBzdXBwb3J0ZWQKICAgICAgICBBY3Rpb24gICAgICAgICAgICAgPT4gJ0FnZW50SVRTTUNoYW5nZUVkaXQnLCAgICAgICAgIyBvcHRpb25hbAogICAgICAgIENoYW5nZUlEICAgICAgICAgICA9PiAzMzMzLCAgICMgb3B0aW9uYWwsIGRvIG5vdCBwYXNzIGZvciAnQ2hhbmdlQWRkJwogICAgICAgIFBlcm1pc3Npb25SZWdpc3RyeSA9PiAnSVRTTUNoYW5nZTo6UGVybWlzc2lvbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCB3aXRoIGRlZmF1bHQgJ0lUU01DaGFuZ2U6OlBlcm1pc3Npb24nCiAgICAgICAgTG9nTm8gICAgICAgICAgICAgID0+IDEsICAgICAgIyBvcHRpb25hbCwgdHVybnMgb2ZmIGxvZ2dpbmcgd2hlbiBhY2Nlc3MgaXMgZGVuaWVkCiAgICApOwoKPWN1dAoKc3ViIFBlcm1pc3Npb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVHlwZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgVGhlcmUgYXJlIHZhbGlkIGNhc2VzIHdoZW4gbm8gQ2hhbmdlSUQgaXMgcGFzc2VkLgogICAgIyBFLmcuIGZvciBDaGFuZ2VBZGQoKSBvciBDaGFuZ2VTZWFyY2goKS4KICAgICRQYXJhbXtDaGFuZ2VJRH0gfHw9ICcnOwoKICAgICMgdGhlIHBsYWNlIHdoZXJlIHRoZSBwZXJtaXNzaW9uIG1vZHVsZXMgYXJlIHJlZ2lzdGVyZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIHBhcmFtZXRlcgogICAgbXkgJFJlZ2lzdHJ5ID0gJFBhcmFte1Blcm1pc3Npb25SZWdpc3RyeX0gfHwgJ0lUU01DaGFuZ2U6OlBlcm1pc3Npb24nOwoKICAgICMgcnVuIHRoZSByZWxldmFudCBwZXJtaXNzaW9uIG1vZHVsZXMKICAgIGlmICggcmVmICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgkUmVnaXN0cnkpIGVxICdIQVNIJyApIHsKCiAgICAgICAgbXkgJU1vZHVsZXMgPSAleyAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJFJlZ2lzdHJ5KSB9OwoKICAgICAgICBNT0RVTEU6CiAgICAgICAgZm9yIG15ICRNb2R1bGUgKCBzb3J0IGtleXMgJU1vZHVsZXMgKSB7CgogICAgICAgICAgICAjIGxvZyB0cnkgb2YgbG9hZCBtb2R1bGUKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0RlYnVnfSA+IDEgKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUcnkgdG8gbG9hZCBtb2R1bGU6ICRNb2R1bGVzeyRNb2R1bGV9LT57TW9kdWxlfSEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgICAgICBuZXh0IE1PRFVMRQogICAgICAgICAgICAgICAgaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoICRNb2R1bGVzeyRNb2R1bGV9LT57TW9kdWxlfSApOwoKICAgICAgICAgICAgIyBjcmVhdGUgb2JqZWN0CiAgICAgICAgICAgIG15ICRNb2R1bGVPYmplY3QgPSAkTW9kdWxlc3skTW9kdWxlfS0+e01vZHVsZX0tPm5ldygpOwoKICAgICAgICAgICAgIyBhc2sgZm9yIHRoZSBvcGluaW9uIG9mIHRoZSBQZXJtaXNzaW9uIG1vZHVsZQogICAgICAgICAgICBteSAkQWNjZXNzID0gJE1vZHVsZU9iamVjdC0+UnVuKCVQYXJhbSk7CgogICAgICAgICAgICAjIEdyYW50IG92ZXJhbGwgcGVybWlzc2lvbiwKICAgICAgICAgICAgIyB3aGVuIHRoZSBtb2R1bGUgZ3JhbnRlZCBhIHN1ZmZpY2llbnQgcGVybWlzc2lvbi4KICAgICAgICAgICAgaWYgKCAkQWNjZXNzICYmICRNb2R1bGVzeyRNb2R1bGV9LT57R3JhbnRlZH0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57RGVidWd9ID4gMCApIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkdyYW50ZWQgJyRQYXJhbXtUeXBlfScgYWNjZXNzIGZvciAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJVc2VySUQ6ICRQYXJhbXtVc2VySUR9IG9uICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkNoYW5nZUlEICckUGFyYW17Q2hhbmdlSUR9JyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJ0aHJvdWdoICRNb2R1bGVzeyRNb2R1bGV9LT57TW9kdWxlfSAobm8gbW9yZSBjaGVja3MpISIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGdyYW50IHBlcm1pc3Npb24KICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIERlbnkgb3ZlcmFsbCBwZXJtaXNzaW9uLAogICAgICAgICAgICAjIHdoZW4gdGhlIG1vZHVsZSBkZW5pZWQgYSByZXF1aXJlZCBwZXJtaXNzaW9uLgogICAgICAgICAgICBpZiAoICEkQWNjZXNzICYmICRNb2R1bGVzeyRNb2R1bGV9LT57UmVxdWlyZWR9ICkgewogICAgICAgICAgICAgICAgaWYgKCAhJFBhcmFte0xvZ05vfSApIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJEZW5pZWQgJyRQYXJhbXtUeXBlfScgYWNjZXNzIGZvciAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJVc2VySUQ6ICRQYXJhbXtVc2VySUR9IG9uICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkNoYW5nZUlEICckUGFyYW17Q2hhbmdlSUR9JyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJiZWNhdXNlICRNb2R1bGVzeyRNb2R1bGV9LT57TW9kdWxlfSBpcyByZXF1aXJlZCEiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBkZW55IHBlcm1pc3Npb24KICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIERlbnkgYWNjZXNzIHdoZW4gbmVpdGhlciBhICdHcmFudGVkJy1DaGVjayBub3IgYSAnUmVxdWlyZWQnLUNoZWNrIGhhcyByZWFjaGVkIGEgY29uY2x1c2lvbi4KICAgIGlmICggISRQYXJhbXtMb2dOb30gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiUGVybWlzc2lvbiBkZW5pZWQgKFVzZXJJRDogJFBhcmFte1VzZXJJRH0gJyRQYXJhbXtUeXBlfScgIgogICAgICAgICAgICAgICAgLiAib24gQ2hhbmdlSUQ6ICRQYXJhbXtDaGFuZ2VJRH0pISIsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm47Cn0KCj1pdGVtIENoYW5nZUF0dGFjaG1lbnRBZGQoKQoKQWRkIGFuIGF0dGFjaG1lbnQgdG8gdGhlIGdpdmVuIGNoYW5nZS4KCiAgICBteSAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUF0dGFjaG1lbnRBZGQoCiAgICAgICAgQ2hhbmdlSUQgICAgPT4gMTIzLCAgICAgICAgICAgICAgICMgdGhlIENoYW5nZUlEIGJlY29tZXMgcGFydCBvZiB0aGUgZmlsZSBwYXRoCiAgICAgICAgRmlsZW5hbWUgICAgPT4gJ2ZpbGVuYW1lJywKICAgICAgICBDb250ZW50ICAgICA9PiAnY29udGVudCcsCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIENoYW5nZUF0dGFjaG1lbnRBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KENoYW5nZUlEIEZpbGVuYW1lIENvbnRlbnQgQ29udGVudFR5cGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHdyaXRlIHRvIHZpcnR1YWwgZnMKICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZpcnR1YWxGUycpLT5Xcml0ZSgKICAgICAgICBGaWxlbmFtZSAgICA9PiAiQ2hhbmdlLyRQYXJhbXtDaGFuZ2VJRH0vJFBhcmFte0ZpbGVuYW1lfSIsCiAgICAgICAgTW9kZSAgICAgICAgPT4gJ2JpbmFyeScsCiAgICAgICAgQ29udGVudCAgICAgPT4gXCRQYXJhbXtDb250ZW50fSwKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIENvbnRlbnRJRCAgID0+ICRQYXJhbXtDb250ZW50SUR9LAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAkUGFyYW17Q29udGVudFR5cGV9LAogICAgICAgICAgICBDaGFuZ2VJRCAgICA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGNoZWNrIGZvciBlcnJvcgogICAgaWYgKCRTdWNjZXNzKSB7CgogICAgICAgICMgdHJpZ2dlciBBdHRhY2htZW50QWRkLUV2ZW50CiAgICAgICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICAgICAgRXZlbnQgPT4gJ0NoYW5nZUF0dGFjaG1lbnRBZGRQb3N0JywKICAgICAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2Fubm90IGFkZCBhdHRhY2htZW50IGZvciBjaGFuZ2UgJFBhcmFte0NoYW5nZUlEfSIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDaGFuZ2VBdHRhY2htZW50RGVsZXRlKCkKCkRlbGV0ZSB0aGUgZ2l2ZW4gZmlsZSBmcm9tIHRoZSB2aXJ0dWFsIGZpbGVzeXN0ZW0uCgogICAgbXkgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBdHRhY2htZW50RGVsZXRlKAogICAgICAgIENoYW5nZUlEID0+IDEyMywgICAgICAjIHVzZWQgaW4gZXZlbnQgaGFuZGxpbmcsIGUuZy4gZm9yIGxvZ2dpbmcgdGhlIGhpc3RvcnkKICAgICAgICBGaWxlbmFtZSA9PiAnUHJvamVjdHBsYW4ucGRmJywgICAgICMgaWRlbnRpZmllcyB0aGUgYXR0YWNobWVudCAodG9nZXRoZXIgd2l0aCB0aGUgQ2hhbmdlSUQpCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQ2hhbmdlQXR0YWNobWVudERlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoQ2hhbmdlSUQgRmlsZW5hbWUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFkZCBwcmVmaXgKICAgIG15ICRGaWxlbmFtZSA9ICdDaGFuZ2UvJyAuICRQYXJhbXtDaGFuZ2VJRH0gLiAnLycgLiAkUGFyYW17RmlsZW5hbWV9OwoKICAgICMgZGVsZXRlIGZpbGUKICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZpcnR1YWxGUycpLT5EZWxldGUoCiAgICAgICAgRmlsZW5hbWUgPT4gJEZpbGVuYW1lLAogICAgKTsKCiAgICAjIGNoZWNrIGZvciBlcnJvcgogICAgaWYgKCRTdWNjZXNzKSB7CgogICAgICAgICMgdHJpZ2dlciBBdHRhY2htZW50RGVsZXRlUG9zdC1FdmVudAogICAgICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgICAgIEV2ZW50ID0+ICdDaGFuZ2VBdHRhY2htZW50RGVsZXRlUG9zdCcsCiAgICAgICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbm5vdCBkZWxldGUgYXR0YWNobWVudCAkRmlsZW5hbWUhIiwKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuICRTdWNjZXNzOwp9Cgo9aXRlbSBDaGFuZ2VBdHRhY2htZW50R2V0KCkKClRoaXMgbWV0aG9kIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgb25lIHNwZWNpZmljIGF0dGFjaG1lbnQuCgogICAgbXkgJEF0dGFjaG1lbnQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBdHRhY2htZW50R2V0KAogICAgICAgIENoYW5nZUlEID0+IDQsCiAgICAgICAgRmlsZW5hbWUgPT4gJ3Rlc3QudHh0JywKICAgICk7CgpyZXR1cm5zCgogICAgewogICAgICAgIFByZWZlcmVuY2VzID0+IHsKICAgICAgICAgICAgQWxsUHJlZmVyZW5jZXMgPT4gJ3Rlc3QnLAogICAgICAgIH0sCiAgICAgICAgRmlsZW5hbWUgICAgPT4gJ3Rlc3QudHh0JywKICAgICAgICBDb250ZW50ICAgICA9PiAnaGFsbG8nLAogICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICBGaWxlc2l6ZSAgICA9PiAnMTIzIEtCeXRlcycsCiAgICAgICAgVHlwZSAgICAgICAgPT4gJ2F0dGFjaG1lbnQnLAogICAgfQoKPWN1dAoKc3ViIENoYW5nZUF0dGFjaG1lbnRHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2hhbmdlSUQgRmlsZW5hbWUpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgYWRkIHByZWZpeAogICAgbXkgJEZpbGVuYW1lID0gJ0NoYW5nZS8nIC4gJFBhcmFte0NoYW5nZUlEfSAuICcvJyAuICRQYXJhbXtGaWxlbmFtZX07CgogICAgIyBmaW5kIGFsbCBhdHRhY2htZW50cyBvZiB0aGlzIGNoYW5nZQogICAgbXkgQEF0dGFjaG1lbnRzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZpcnR1YWxGUycpLT5GaW5kKAogICAgICAgIEZpbGVuYW1lICAgID0+ICRGaWxlbmFtZSwKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyByZXR1cm4gZXJyb3IgaWYgZmlsZSBkb2VzIG5vdCBleGlzdAogICAgaWYgKCAhQEF0dGFjaG1lbnRzICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gc3VjaCBhdHRhY2htZW50ICgkRmlsZW5hbWUpISBNYXkgYmUgYW4gYXR0YWNrISEhIiwKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBkYXRhIGZvciBhdHRhY2htZW50CiAgICBteSAlQXR0YWNobWVudERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmlydHVhbEZTJyktPlJlYWQoCiAgICAgICAgRmlsZW5hbWUgPT4gJEZpbGVuYW1lLAogICAgICAgIE1vZGUgICAgID0+ICdiaW5hcnknLAogICAgKTsKCiAgICBteSAkQXR0YWNobWVudEluZm8gPSB7CiAgICAgICAgJUF0dGFjaG1lbnREYXRhLAogICAgICAgIEZpbGVuYW1lICAgID0+ICRQYXJhbXtGaWxlbmFtZX0sCiAgICAgICAgQ29udGVudCAgICAgPT4gJHsgJEF0dGFjaG1lbnREYXRhe0NvbnRlbnR9IH0sCiAgICAgICAgQ29udGVudFR5cGUgPT4gJEF0dGFjaG1lbnREYXRhe1ByZWZlcmVuY2VzfS0+e0NvbnRlbnRUeXBlfSwKICAgICAgICBUeXBlICAgICAgICA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgRmlsZXNpemUgICAgPT4gJEF0dGFjaG1lbnREYXRhe1ByZWZlcmVuY2VzfS0+e0ZpbGVzaXplfSwKICAgIH07CgogICAgcmV0dXJuICRBdHRhY2htZW50SW5mbzsKfQoKPWl0ZW0gQ2hhbmdlQXR0YWNobWVudExpc3QoKQoKUmV0dXJucyBhbiBhcnJheSB3aXRoIGFsbCBhdHRhY2htZW50cyBvZiB0aGUgZ2l2ZW4gY2hhbmdlLgoKICAgIG15IEBBdHRhY2htZW50cyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUF0dGFjaG1lbnRMaXN0KAogICAgICAgIENoYW5nZUlEID0+IDEyMywKICAgICk7CgpyZXR1cm5zCgogICAgQEF0dGFjaG1lbnRzID0gKAogICAgICAgICdmaWxlbmFtZS50eHQnLAogICAgICAgICdvdGhlcl9maWxlLnBkZicsCiAgICApOwoKPWN1dAoKc3ViIENoYW5nZUF0dGFjaG1lbnRMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDaGFuZ2VJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENoYW5nZUlEIScsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZmluZCBhbGwgYXR0YWNobWVudHMgb2YgdGhpcyBjaGFuZ2UKICAgIG15IEBBdHRhY2htZW50cyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWaXJ0dWFsRlMnKS0+RmluZCgKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgfSwKICAgICk7CgogICAgZm9yIG15ICRGaWxlbmFtZSAoQEF0dGFjaG1lbnRzKSB7CgogICAgICAgICMgcmVtb3ZlIGV4dHJhIGluZm9ybWF0aW9uIGZyb20gZmlsZW5hbWUKICAgICAgICAkRmlsZW5hbWUgPX4gc3sgXEEgQ2hhbmdlIC8gXGQrIC8gfXt9eG1zOwogICAgfQoKICAgIHJldHVybiBAQXR0YWNobWVudHM7Cn0KCj1pdGVtIENoYW5nZUF0dGFjaG1lbnRFeGlzdHMoKQoKQ2hlY2tzIGlmIGEgZmlsZSB3aXRoIGEgZ2l2ZW4gZmlsZW5hbWUgZXhpc3RzLgoKICAgIG15ICRFeGlzdHMgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBdHRhY2htZW50RXhpc3RzKAogICAgICAgIEZpbGVuYW1lID0+ICd0ZXN0LnR4dCcsCiAgICAgICAgQ2hhbmdlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIENoYW5nZUF0dGFjaG1lbnRFeGlzdHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KEZpbGVuYW1lIENoYW5nZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmlydHVhbEZTJyktPkZpbmQoCiAgICAgICAgRmlsZW5hbWUgPT4gJ0NoYW5nZS8nIC4gJFBhcmFte0NoYW5nZUlEfSAuICcvJyAuICRQYXJhbXtGaWxlbmFtZX0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgpzdWIgREVTVFJPWSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgZXhlY3V0ZSBhbGwgdHJhbnNhY3Rpb24gZXZlbnRzCiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyVHJhbnNhY3Rpb24oKTsKCiAgICByZXR1cm4gMTsKfQoKPWJlZ2luIEludGVybmFsOgoKPWl0ZW0gX0NoZWNrQ2hhbmdlU3RhdGVJRHMoKQoKQ2hlY2sgd2hldGhlciBhbGwgb2YgdGhlIGdpdmVuIGNoYW5nZSBzdGF0ZSBpZHMgYXJlIHZhbGlkLgoKICAgIG15ICRPayA9ICRDaGFuZ2VPYmplY3QtPl9DaGVja0NoYW5nZVN0YXRlSURzKAogICAgICAgIENoYW5nZVN0YXRlSURzID0+IFsgMjUsIDI2IF0sCiAgICApOwoKPWN1dAoKc3ViIF9DaGVja0NoYW5nZVN0YXRlSURzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDaGFuZ2VTdGF0ZUlEc30gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENoYW5nZVN0YXRlSURzIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCByZWYgJFBhcmFte0NoYW5nZVN0YXRlSURzfSBuZSAnQVJSQVknICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnVGhlIHBhcmFtIENoYW5nZVN0YXRlSURzIG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBpZiBDaGFuZ2VTdGF0ZUlEcyBiZWxvbmcgdG8gY29ycmVjdCBnZW5lcmFsIGNhdGFsb2cgY2xhc3MKICAgIGZvciBteSAkU3RhdGVJRCAoIEB7ICRQYXJhbXtDaGFuZ2VTdGF0ZUlEc30gfSApIHsKICAgICAgICBteSAkU3RhdGUgPSAkU2VsZi0+Q2hhbmdlU3RhdGVMb29rdXAoCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJFN0YXRlSUQsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFN0YXRlICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIHN0YXRlIGlkICRTdGF0ZUlEIGlzIG5vdCB2YWxpZCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0NoZWNrQ2hhbmdlQ0lQSURzKCkKCkNoZWNrIHdoZXRoZXIgYWxsIG9mIHRoZSBnaXZlbiBpZHMgb2YgY2F0ZWdvcnksIGltcGFjdCBvciBwcmlvcml0eSBhcmUgdmFsaWQuCgogICAgbXkgJE9rID0gJENoYW5nZU9iamVjdC0+X0NoZWNrQ2hhbmdlQ0lQSURzKAogICAgICAgIElEcyAgPT4gWyAyNSwgMjYgXSwgIyBtYW5kYXRvcnkKICAgICAgICBUeXBlID0+ICdQcmlvcml0eScsICMgbWFuZGF0b3J5IChDYXRlZ29yeXxJbXBhY3R8UHJpb3JpdHkpCiAgICApOwoKPWN1dAoKc3ViIF9DaGVja0NoYW5nZUNJUElEcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoSURzIFR5cGUpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiBJRHMgaXMgYW4gYXJyYXkgcmVmZXJlbmNlCiAgICBpZiAoIHJlZiAkUGFyYW17SURzfSBuZSAnQVJSQVknICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnVGhlIHBhcmFtIElEcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgVHlwZSBwYXJhbSBmb3IgdmFsaWQgdmFsdWVzCiAgICBpZiAoCiAgICAgICAgISRQYXJhbXtUeXBlfQogICAgICAgIHx8ICggJFBhcmFte1R5cGV9IG5lICdDYXRlZ29yeScgJiYgJFBhcmFte1R5cGV9IG5lICdJbXBhY3QnICYmICRQYXJhbXtUeXBlfSBuZSAnUHJpb3JpdHknICkKICAgICAgICApCiAgICB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdUaGUgcGFyYW0gVHlwZSBtdXN0IGJlIGVpdGhlciAiQ2F0ZWdvcnkiIG9yICJJbXBhY3QiIG9yICJQcmlvcml0eSIhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGlmIElEcyBiZWxvbmdzIHRvIGNvcnJlY3QgZ2VuZXJhbCBjYXRhbG9nIGNsYXNzCiAgICBmb3IgbXkgJElEICggQHsgJFBhcmFte0lEc30gfSApIHsKICAgICAgICBteSAkQ0lQID0gJFNlbGYtPkNoYW5nZUNJUExvb2t1cCgKICAgICAgICAgICAgSUQgICA9PiAkSUQsCiAgICAgICAgICAgIFR5cGUgPT4gJFBhcmFte1R5cGV9LAogICAgICAgICk7CgogICAgICAgIGlmICggISRDSVAgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgJFBhcmFte1R5cGV9IGlkICRJRCBpcyBub3QgdmFsaWQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9DaGVja0NoYW5nZVBhcmFtcygpCgpDaGVja3MgdGhlIHBhcmFtcyB0byBDaGFuZ2VBZGQoKSBhbmQgQ2hhbmdlVXBkYXRlKCkuClRoZXJlIGFyZSBubyByZXF1aXJlZCBwYXJhbWV0ZXJzLgoKICAgIG15ICRPayA9ICRDaGFuZ2VPYmplY3QtPl9DaGVja0NoYW5nZVBhcmFtcygKICAgICAgICBDaGFuZ2VUaXRsZSAgICAgICAgICA9PiAnUmVwbGFjZW1lbnQgb2YgbWFpbCBzZXJ2ZXInLCAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgICA9PiAnTmV3IG1haWwgc2VydmVyIDxiPmlzPC9iPiBmYXN0ZXInLCAjIChvcHRpb25hbCkKICAgICAgICBEZXNjcmlwdGlvblBsYWluICAgICA9PiAnTmV3IG1haWwgc2VydmVyIGlzIGZhc3RlcicsICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBKdXN0aWZpY2F0aW9uICAgICAgICA9PiAnT2xkIG1haWwgc2VydmVyPGI+dG9vPC9iPiBzbG93JywgICAjIChvcHRpb25hbCkKICAgICAgICBKdXN0aWZpY2F0aW9uUGxhaW4gICA9PiAnT2xkIG1haWwgc2VydmVyIHRvbyBzbG93JywgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDaGFuZ2VTdGF0ZUlEICAgICAgICA9PiA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDaGFuZ2VNYW5hZ2VySUQgICAgICA9PiA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDaGFuZ2VCdWlsZGVySUQgICAgICA9PiA2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDYXRlZ29yeUlEICAgICAgICAgICA9PiA3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBJbXBhY3RJRCAgICAgICAgICAgICA9PiA4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBQcmlvcml0eUlEICAgICAgICAgICA9PiA5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBSZXF1ZXN0ZWRUaW1lICAgICAgICA9PiAnMjAwOS0xMC0yMyAwODo1NzoxMicsICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDQUJBZ2VudHMgICAgICAgICAgICA9PiBbIDEsIDIsIDQgXSwgICAgICMgVXNlcklEcyAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDQUJDdXN0b21lcnMgICAgICAgICA9PiBbICd0dCcsICdtbScgXSwgICMgQ3VzdG9tZXJVc2VySURzICAjIChvcHRpb25hbCkKICAgICAgICBEeW5hbWljRmllbGRfWCAgICAgICA9PiAnU3VuJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBEeW5hbWljRmllbGRfWSAgICAgICA9PiAnRWFydGgnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICk7CgpUaGUgQ2hhbmdlU3RhdGVJRCBpcyBjaGVja2VkIGZvciBleGlzdGVuY2UgaW4gdGhlIGdlbmVyYWwgY2F0YWxvZy4KVGhlc2Ugc3RyaW5nIHBhcmFtZXRlcnMgaGF2ZSBsZW5ndGggY29uc3RyYWludHM6CgogICAgUGFyYW1ldGVyICAgICAgICAgICB8IG1heC4gbGVuZ3RoCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLQogICAgQ2hhbmdlVGl0bGUgICAgICAgICB8ICAyNTAgY2hhcmFjdGVycwogICAgRGVzY3JpcHRpb24gICAgICAgICB8IDE4MDAwMDAgY2hhcmFjdGVycwogICAgRGVzY3JpcHRpb25QbGFpbiAgICB8IDE4MDAwMDAgY2hhcmFjdGVycwogICAgSnVzdGlmaWNhdGlvbiAgICAgICB8IDE4MDAwMDAgY2hhcmFjdGVycwogICAgSnVzdGlmaWNhdGlvblBsYWluICB8IDE4MDAwMDAgY2hhcmFjdGVycwogICAgRHluYW1pY0ZpZWxkX1ggICAgICB8IDM4MDAgY2hhcmFjdGVycwogICAgRHluYW1pY0ZpZWxkX1kgICAgICB8IDM4MDAgY2hhcmFjdGVycwoKPWN1dAoKc3ViIF9DaGVja0NoYW5nZVBhcmFtcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgdGhlIHN0cmluZyBhbmQgaWQgcGFyYW1ldGVycwogICAgQVJHVU1FTlQ6CiAgICBmb3IgbXkgJEFyZ3VtZW50ICgKICAgICAgICBxdygKICAgICAgICBDaGFuZ2VUaXRsZQogICAgICAgIERlc2NyaXB0aW9uCiAgICAgICAgRGVzY3JpcHRpb25QbGFpbgogICAgICAgIEp1c3RpZmljYXRpb24KICAgICAgICBKdXN0aWZpY2F0aW9uUGxhaW4KICAgICAgICBDaGFuZ2VNYW5hZ2VySUQKICAgICAgICBDaGFuZ2VCdWlsZGVySUQKICAgICAgICBDaGFuZ2VTdGF0ZUlECiAgICAgICAgKQogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBwYXJhbXMgYXJlIG5vdCByZXF1aXJlZAogICAgICAgIG5leHQgQVJHVU1FTlQgaWYgIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fTsKCiAgICAgICAgIyBjaGVjayBpZiBwYXJhbSBpcyBub3QgZGVmaW5lZAogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgcGFyYW1ldGVyICckQXJndW1lbnQnIG11c3QgYmUgZGVmaW5lZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIHBhcmFtIGlzIG5vdCBhIHJlZmVyZW5jZQogICAgICAgIGlmICggcmVmICRQYXJhbXskQXJndW1lbnR9IG5lICcnICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIHBhcmFtZXRlciAnJEFyZ3VtZW50JyBtdXN0bid0IGJlIGEgcmVmZXJlbmNlISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRpdGxlCiAgICAgICAgaWYgKCAkQXJndW1lbnQgZXEgJ0NoYW5nZVRpdGxlJyAmJiBsZW5ndGgoICRQYXJhbXskQXJndW1lbnR9ICkgPiAyNTAgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgcGFyYW1ldGVyICckQXJndW1lbnQnIG11c3QgYmUgc2hvcnRlciB0aGFuIDI1MCBjaGFyYWN0ZXJzISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGRlc2NyaXB0aW9uIGFuZCBqdXN0aWZpY2F0aW9uCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQXJndW1lbnQgZXEgJ0Rlc2NyaXB0aW9uJwogICAgICAgICAgICB8fCAkQXJndW1lbnQgZXEgJ0Rlc2NyaXB0aW9uUGxhaW4nCiAgICAgICAgICAgIHx8ICRBcmd1bWVudCBlcSAnSnVzdGlmaWNhdGlvbicKICAgICAgICAgICAgfHwgJEFyZ3VtZW50IGVxICdKdXN0aWZpY2F0aW9uUGxhaW4nCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIGlmICggbGVuZ3RoKCAkUGFyYW17JEFyZ3VtZW50fSApID4gMTgwMDAwMCApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBwYXJhbWV0ZXIgJyRBcmd1bWVudCcgbXVzdCBiZSBzaG9ydGVyIHRoYW4gMTgwMDAwMCBjaGFyYWN0ZXJzISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgdGhlIGNoYW5nZSBkeW5hbWljIGZpZWxkcwogICAgS0VZOgogICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJVBhcmFtICkgewoKICAgICAgICBuZXh0IEtFWSBpZiAkS2V5ICF+IG17IFxBIER5bmFtaWNGaWVsZF8oLiopIFx6IH14bXM7CgogICAgICAgICMgcGFyYW1zIGFyZSBub3QgcmVxdWlyZWQKICAgICAgICBuZXh0IEtFWSBpZiAhZXhpc3RzICRQYXJhbXskS2V5fTsKCiAgICAgICAgIyBjaGVjayBpZiBwYXJhbSBpcyBub3QgZGVmaW5lZAogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRLZXl9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIHBhcmFtZXRlciAnJEtleScgbXVzdCBiZSBkZWZpbmVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGR5bmFtaWMgZmllbGRzCiAgICAgICAgaWYgKCBsZW5ndGgoICRQYXJhbXskS2V5fSApID4gMzgwMCApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBwYXJhbWV0ZXIgJyRLZXknIG11c3QgYmUgc2hvcnRlciB0aGFuIDM4MDAgY2hhcmFjdGVycyEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgcmVxdWVzdGVkX3RpbWUgaGFzIGNvcnJlY3QgZm9ybWF0CiAgICBpZiAoCiAgICAgICAgZGVmaW5lZCAkUGFyYW17UmVxdWVzdGVkVGltZX0KICAgICAgICAmJiAkUGFyYW17UmVxdWVzdGVkVGltZX0gIX4gbXsgXEEgXGRcZFxkXGQtXGRcZC1cZFxkIFxzIFxkXGQ6XGRcZDpcZFxkIFx6IH14bXMKICAgICAgICApCiAgICB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdJbnZhbGlkIGZvcm1hdCBmb3IgUmVxdWVzdGVkVGltZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgaWYgZ2l2ZW4gQ2hhbmdlU3RhdGVJRCBpcyB2YWxpZAogICAgaWYgKCAkUGFyYW17Q2hhbmdlU3RhdGVJRH0gKSB7CiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+X0NoZWNrQ2hhbmdlU3RhdGVJRHMoCiAgICAgICAgICAgIENoYW5nZVN0YXRlSURzID0+IFsgJFBhcmFte0NoYW5nZVN0YXRlSUR9IF0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGdpdmVuIGNhdGVnb3J5LCBpbXBhY3Qgb3IgcHJpb3JpdHkgSUQgaXMgdmFsaWQKICAgIGZvciBteSAkVHlwZSAocXcoQ2F0ZWdvcnkgSW1wYWN0IFByaW9yaXR5KSkgewogICAgICAgIGlmICggZGVmaW5lZCAkUGFyYW17IiR7VHlwZX1JRCJ9ICkgewogICAgICAgICAgICByZXR1cm4gaWYgISRTZWxmLT5fQ2hlY2tDaGFuZ2VDSVBJRHMoCiAgICAgICAgICAgICAgICBJRHMgID0+IFsgJFBhcmFteyIke1R5cGV9SUQifSBdLAogICAgICAgICAgICAgICAgVHlwZSA9PiAkVHlwZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICggZGVmaW5lZCAkUGFyYW17JFR5cGV9ICkgewogICAgICAgICAgICByZXR1cm4gaWYgISRTZWxmLT5DaGFuZ2VDSVBMb29rdXAoCiAgICAgICAgICAgICAgICBDSVAgID0+ICRQYXJhbXskVHlwZX0sCiAgICAgICAgICAgICAgICBUeXBlID0+ICRUeXBlLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoYW5nZSBtYW5hZ2VyIGFuZCBjaGFuZ2UgYnVpbGRlciBtdXN0IGJlIGFnZW50cwogICAgQVJHVU1FTlQ6CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDaGFuZ2VNYW5hZ2VySUQgQ2hhbmdlQnVpbGRlcklEKSkgewoKICAgICAgICAjIHBhcmFtcyBhcmUgbm90IHJlcXVpcmVkCiAgICAgICAgbmV4dCBBUkdVTUVOVCBpZiAhZXhpc3RzICRQYXJhbXskQXJndW1lbnR9OwoKICAgICAgICAjIGdldCB1c2VyIGRhdGEKICAgICAgICBteSAlVXNlckRhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBWYWxpZCAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkVXNlckRhdGF7VXNlcklEfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSAkQXJndW1lbnQgJFBhcmFteyRBcmd1bWVudH0gaXMgbm90IGEgdmFsaWQgdXNlciBpZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgQ0FCIGFnZW50cyBtdXN0IGJlIGFnZW50cwogICAgaWYgKCBleGlzdHMgJFBhcmFte0NBQkFnZW50c30gKSB7CiAgICAgICAgaWYgKCByZWYgJFBhcmFte0NBQkFnZW50c30gbmUgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1RoZSBwYXJhbWV0ZXIgQ0FCQWdlbnRzIGlzIG5vdCBhbiBBUlJBWSByZWZlcmVuY2UhJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayB1c2VycwogICAgICAgIGZvciBteSAkVXNlcklEICggQHsgJFBhcmFte0NBQkFnZW50c30gfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHVzZXIgZGF0YQogICAgICAgICAgICBteSAlVXNlckRhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICAgICAgVmFsaWQgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICEkVXNlckRhdGF7VXNlcklEfSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBDQUJBZ2VudCAkVXNlcklEIGlzIG5vdCBhIHZhbGlkIHVzZXIgaWQhIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBDQUIgY3VzdG9tZXJzIG11c3QgYmUgY3VzdG9tZXJzCiAgICBpZiAoIGV4aXN0cyAkUGFyYW17Q0FCQ3VzdG9tZXJzfSApIHsKICAgICAgICBpZiAoIHJlZiAkUGFyYW17Q0FCQ3VzdG9tZXJzfSBuZSAnQVJSQVknICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnVGhlIHBhcmFtZXRlciBDQUJDdXN0b21lcnMgaXMgbm90IGFuIEFSUkFZIHJlZmVyZW5jZSEnLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgdmFsaWQgaWQgZm9yICJ2YWxpZCIKICAgICAgICBteSAkVmFsaWRJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExvb2t1cCgKICAgICAgICAgICAgVmFsaWQgPT4gJ3ZhbGlkJywKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGN1c3RvbWVyIHVzZXJzCiAgICAgICAgZm9yIG15ICRDdXN0b21lclVzZXIgKCBAeyAkUGFyYW17Q0FCQ3VzdG9tZXJzfSB9ICkgewoKICAgICAgICAgICAgIyBnZXQgY3VzdG9tZXIgdXNlciBkYXRhCiAgICAgICAgICAgIG15ICVDdXN0b21lclVzZXJEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpLT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICAgICAgVXNlciAgPT4gJEN1c3RvbWVyVXNlciwKICAgICAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoICRDdXN0b21lclVzZXJEYXRhe1ZhbGlkSUR9IG5lICRWYWxpZElEICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIENBQkN1c3RvbWVyICRDdXN0b21lclVzZXIgaXMgbm90IGEgdmFsaWQgY3VzdG9tZXIhIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9ZW5kIEludGVybmFsOgoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6RXZlbnQ6OlVwZGF0ZUlUU01DaGFuZ2VDb25kaXRpb25zOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KERhdGEgRXZlbnQgQ29uZmlnIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIG9ubHkgZm9yIGR5bmFtaWMgZmllbGRzIG9mIHRoZSB0eXBlIElUU01DaGFuZ2Ugb3IgSVRTTVdvcmtPcmRlcgogICAgcmV0dXJuIGlmICEkUGFyYW17RGF0YX0tPntOZXdEYXRhfTsKICAgIHJldHVybiBpZiAhJFBhcmFte0RhdGF9LT57TmV3RGF0YX0tPntPYmplY3RUeXBlfTsKICAgIGlmICgKICAgICAgICAkUGFyYW17RGF0YX0tPntOZXdEYXRhfS0+e09iamVjdFR5cGV9IG5lICdJVFNNQ2hhbmdlJwogICAgICAgICYmICRQYXJhbXtEYXRhfS0+e05ld0RhdGF9LT57T2JqZWN0VHlwZX0gbmUgJ0lUU01Xb3JrT3JkZXInCiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGR5bmFtaWMgZmllbGQgaGFzIGJlZW4gYWRkZWQKICAgIGlmICggJFBhcmFte0V2ZW50fSBlcSAnRHluYW1pY0ZpZWxkQWRkJyApIHsKCiAgICAgICAgIyBhZGQgbmV3IGF0dHJpYnV0ZSB0byBjb25kaXRpb24gYXR0cmlidXRlIHRhYmxlCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicpLT5BdHRyaWJ1dGVBZGQoCiAgICAgICAgICAgIE5hbWUgICA9PiAnRHluYW1pY0ZpZWxkXycgLiAkUGFyYW17RGF0YX0tPntOZXdEYXRhfS0+e05hbWV9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBhZGQgYXR0cmlidXRlICckUGFyYW17RGF0YX0tPntOZXdEYXRhfS0+e05hbWV9JyB0byBjb25kaXRpb24gYXR0cmlidXRlIHRhYmxlISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZHluYW1pYyBmaWVsZCBoYXMgYmVlbiB1cGRhdGVkCiAgICBlbHNpZiAoICRQYXJhbXtFdmVudH0gZXEgJ0R5bmFtaWNGaWVsZFVwZGF0ZScgKSB7CgogICAgICAgICMgbG9va3VwIHRoZSBJRCBvZiB0aGUgb2xkIGF0dHJpYnV0ZQogICAgICAgIG15ICRBdHRyaWJ1dGVJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJyktPkF0dHJpYnV0ZUxvb2t1cCgKICAgICAgICAgICAgTmFtZSA9PiAnRHluYW1pY0ZpZWxkXycgLiAkUGFyYW17RGF0YX0tPntPbGREYXRhfS0+e05hbWV9LAogICAgICAgICk7CgogICAgICAgICMgdXBkYXRlIHRoZSBhdHRyaWJ1dGUgbmFtZQogICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nKS0+QXR0cmlidXRlVXBkYXRlKAogICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiAkQXR0cmlidXRlSUQsCiAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdEeW5hbWljRmllbGRfJyAuICRQYXJhbXtEYXRhfS0+e05ld0RhdGF9LT57TmFtZX0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCB1cGRhdGUgYXR0cmlidXRlIG5hbWUgZnJvbSAnJFBhcmFte0RhdGF9LT57T2xkRGF0YX0tPntOYW1lfScgdG8gJyRQYXJhbXtEYXRhfS0+e05ld0RhdGF9LT57TmFtZX0nISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZHluYW1pYyBmaWVsZCBoYXMgYmVlbiBkZWxldGVkCiAgICBlbHNpZiAoICRQYXJhbXtFdmVudH0gZXEgJ0R5bmFtaWNGaWVsZERlbGV0ZScgKSB7CgogICAgICAgICMgZ2V0IGFsbCBjb25kaXRpb24gYXR0cmlidXRlcwogICAgICAgIG15ICRDb25kaXRpb25BdHRyaWJ1dGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nKS0+QXR0cmlidXRlTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyByZXZlcnNlIHRoZSBsaXN0IHRvIGxvb2t1cCBhdHRyaWJ1dGUgbmFtZXMKICAgICAgICBteSAlQXR0cmlidXRlMklEID0gcmV2ZXJzZSAleyRDb25kaXRpb25BdHRyaWJ1dGVzfTsKCiAgICAgICAgIyBsb29rdXAgYXR0cmlidXRlIGlkCiAgICAgICAgbXkgJEF0dHJpYnV0ZUlEID0gJEF0dHJpYnV0ZTJJRHsgJ0R5bmFtaWNGaWVsZF8nIC4gJFBhcmFte0RhdGF9LT57TmV3RGF0YX0tPntOYW1lfSB9IHx8ICcnOwoKICAgICAgICAjIGRvIG5vdGhpbmcgaWYgbm8gYXR0cmlidXRlIHdpdGggdGhpcyBuYW1lIGV4c2lzdHMKICAgICAgICByZXR1cm4gaWYgISRBdHRyaWJ1dGVJRDsKCiAgICAgICAgIyBkZWxldGUgdGhpcyBhdHRyaWJ1dGUgZnJvbSBleHByZXNzaW9uIHRhYmxlCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4gJ0RFTEVURSBGUk9NIGNvbmRpdGlvbl9leHByZXNzaW9uCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgYXR0cmlidXRlX2lkID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICAgICAgXCRBdHRyaWJ1dGVJRCwKICAgICAgICAgICAgXSwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0aGlzIGF0dHJpYnV0ZSBmcm9tIGFjdGlvbiB0YWJsZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMID0+ICdERUxFVEUgRlJPTSBjb25kaXRpb25fYWN0aW9uCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgYXR0cmlidXRlX2lkID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICAgICAgXCRBdHRyaWJ1dGVJRCwKICAgICAgICAgICAgXSwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0aGlzIGF0dHJpYnV0ZSBmcm9tIGF0dHJpYnV0ZSB0YWJsZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMID0+ICdERUxFVEUgRlJPTSBjb25kaXRpb25fYXR0cmlidXRlCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICBcJEF0dHJpYnV0ZUlELAogICAgICAgICAgICBdLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIGNhY2hlCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgIFR5cGUgPT4gJ0lUU01DaGFuZ2VNYW5hZ2VtZW50JywKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6T2JqZWN0VHlwZTo6SVRTTUNoYW5nZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBTY2FsYXI6OlV0aWw7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6Ok9iamVjdFR5cGU6OklUU01DaGFuZ2UKCj1oZWFkMSBTWU5PUFNJUwoKSVRTTUNoYW5nZSBvYmplY3QgaGFuZGxlciBmb3IgRHluYW1pY0ZpZWxkcwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1pdGVtIG5ldygpCgp1c3VhbGx5LCB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcwpieSB1c2luZyBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpPYmplY3RUeXBlOjpJVFNNQ2hhbmdlLT5uZXcoKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBQb3N0VmFsdWVTZXQoKQoKcGVyZm9ybSBzcGVjaWZpYyBmdW5jdGlvbnMgYWZ0ZXIgdGhlIFZhbHVlIHNldCBmb3IgdGhpcyBvYmplY3QgdHlwZS4KCiAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRJVFNNQ2hhbmdlSGFuZGxlck9iamVjdC0+UG9zdFZhbHVlU2V0KAogICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLCAgICAgICMgY29tcGxldGUgY29uZmlnIG9mIHRoZSBEeW5hbWljRmllbGQKICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJE9iamVjdElELCAgICAgICAgICAgICAgICAjIElEIG9mIHRoZSBjdXJyZW50IG9iamVjdCB0aGF0IHRoZSBmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbXVzdCBiZSBsaW5rZWQgdG8sIGUuIGcuIElUU01DaGFuZ2VJRAogICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVmFsdWUsICAgICAgICAgICAgICAgICAgICMgVmFsdWUgdG8gc3RvcmUsIGRlcGVuZHMgb24gYmFja2VuZCB0eXBlCiAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgUG9zdFZhbHVlU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhEeW5hbWljRmllbGRDb25maWcgT2JqZWN0SUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgRHluYW1pY0ZpZWxkQ29uZmlnIChnZW5lcmFsKQogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9ICkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgZmllbGQgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIER5bmFtaWNGaWVsZENvbmZpZyAoaW50ZXJuYWxseSkKICAgIGZvciBteSAkTmVlZGVkIChxdyhJRCBGaWVsZFR5cGUgT2JqZWN0VHlwZSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfS0+eyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkIGluIER5bmFtaWNGaWVsZENvbmZpZyEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbm90aGluZyB0byBkbwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6T2JqZWN0VHlwZTo6SVRTTVdvcmtPcmRlcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBTY2FsYXI6OlV0aWw7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6Ok9iamVjdFR5cGU6OklUU01Xb3JrT3JkZXIKCj1oZWFkMSBTWU5PUFNJUwoKSVRTTVdvcmtPcmRlciBvYmplY3QgaGFuZGxlciBmb3IgRHluYW1pY0ZpZWxkcwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1pdGVtIG5ldygpCgp1c3VhbGx5LCB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcwpieSB1c2luZyBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpPYmplY3RUeXBlOjpJVFNNV29ya09yZGVyLT5uZXcoKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBQb3N0VmFsdWVTZXQoKQoKcGVyZm9ybSBzcGVjaWZpYyBmdW5jdGlvbnMgYWZ0ZXIgdGhlIFZhbHVlIHNldCBmb3IgdGhpcyBvYmplY3QgdHlwZS4KCiAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRJVFNNV29ya09yZGVySGFuZGxlck9iamVjdC0+UG9zdFZhbHVlU2V0KAogICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLCAgICAgICMgY29tcGxldGUgY29uZmlnIG9mIHRoZSBEeW5hbWljRmllbGQKICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJE9iamVjdElELCAgICAgICAgICAgICAgICAjIElEIG9mIHRoZSBjdXJyZW50IG9iamVjdCB0aGF0IHRoZSBmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbXVzdCBiZSBsaW5rZWQgdG8sIGUuIGcuIElUU01Xb3JrT3JkZXJJRAogICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVmFsdWUsICAgICAgICAgICAgICAgICAgICMgVmFsdWUgdG8gc3RvcmUsIGRlcGVuZHMgb24gYmFja2VuZCB0eXBlCiAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgUG9zdFZhbHVlU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhEeW5hbWljRmllbGRDb25maWcgT2JqZWN0SUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgRHluYW1pY0ZpZWxkQ29uZmlnIChnZW5lcmFsKQogICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9ICkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgZmllbGQgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIER5bmFtaWNGaWVsZENvbmZpZyAoaW50ZXJuYWxseSkKICAgIGZvciBteSAkTmVlZGVkIChxdyhJRCBGaWVsZFR5cGUgT2JqZWN0VHlwZSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfS0+eyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkIGluIER5bmFtaWNGaWVsZENvbmZpZyEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbm90aGluZyB0byBkbwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01DaGFuZ2VDSVBBbGxvY2F0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01DaGFuZ2VDSVBBbGxvY2F0ZSAtIGNhdGVnb3J5LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24gbGliCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBjYXRlZ29yeSwgaW1wYWN0IGFuZCBwcmlvcml0eSBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJENJUEFsbG9jYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01DaGFuZ2VDSVBBbGxvY2F0ZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIEFsbG9jYXRlTGlzdCgpCgpyZXR1cm4gYSAyZCBoYXNoIHJlZmVyZW5jZSBvZiBhbGxvY2F0aW9ucwoKICAgIG15ICRMaXN0UmVmID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKQzwkTGlzdFJlZj4gaXMgc29tZXRoaW5nIGxpa2UKCiAgICAkTGlzdFJldCA9IHsKICAgICAgICAnNicgPT4gewogICAgICAgICAgICAnNCcgPT4gMiwKICAgICAgICAgICAgJzEnID0+IDEsCiAgICAgICAgICAgICczJyA9PiAyLAogICAgICAgIH0sCiAgICAgICAgJzgnID0+IHsKICAgICAgICAgICAgJzQnID0+IDQsCiAgICAgICAgICAgICcxJyA9PiAyLAogICAgICAgICAgICAnMycgPT4gMywKICAgICAgICB9LAogICAgfTsKCm1lYW5pbmcgdGhhdCB0aGUgQ3JpdGljYWxpdHlJRCAnNicgYW5kIHRoZSBJbmNpZGVudElEICc0JyBzdWdnZXN0IHRoZSBQcmlvcml0eUlEICcyJy4KCj1jdXQKCnN1YiBBbGxvY2F0ZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgYXNrIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGNhdGVnb3J5X2lkLCBpbXBhY3RfaWQsIHByaW9yaXR5X2lkIEZST00gY2hhbmdlX2NpcF9hbGxvY2F0ZScsCiAgICApOwoKICAgICMgcmVzdWx0IGxpc3QKICAgIG15ICVBbGxvY2F0ZURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRBbGxvY2F0ZURhdGF7ICRSb3dbMV0gfXsgJFJvd1swXSB9ID0gJFJvd1syXTsKICAgIH0KCiAgICByZXR1cm4gXCVBbGxvY2F0ZURhdGE7Cn0KCj1pdGVtIEFsbG9jYXRlVXBkYXRlKCkKCnVwZGF0ZSB0aGUgYWxsb2NhdGlvbiBvZiBjYXRlZ29yeSwgaW1wYWN0IGFuZCBwcmlvcml0eQoKICAgIG15ICRUcnVlID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgICAgICBBbGxvY2F0ZURhdGEgPT4gJERhdGFSZWYsICAjIDJEIGhhc2ggcmVmZXJlbmNlCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEFsbG9jYXRlVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEFsbG9jYXRlRGF0YSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgYWxsb2NhdGUgZGF0YSBpcyBhIGhhc2ggcmVmZXJlbmNlCiAgICBpZiAoIHJlZiAkUGFyYW17QWxsb2NhdGVEYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdBbGxvY2F0ZURhdGEgbXVzdCBiZSBhIDJEIGhhc2ggcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBpZiBhbGxvY2F0ZSBkYXRhIGlzIGEgMkQgaGFzaCByZWZlcmVuY2UKICAgIElNUEFDVElEOgogICAgZm9yIG15ICRJbXBhY3RJRCAoIHNvcnQga2V5cyAleyAkUGFyYW17QWxsb2NhdGVEYXRhfSB9ICkgewoKICAgICAgICBuZXh0IElNUEFDVElEIGlmIHJlZiAkUGFyYW17QWxsb2NhdGVEYXRhfS0+eyRJbXBhY3RJRH0gZXEgJ0hBU0gnOwoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0FsbG9jYXRlRGF0YSBtdXN0IGJlIGEgMkQgaGFzaCByZWZlcmVuY2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRlbGV0ZSBvbGQgYWxsb2NhdGlvbnMKICAgIHJldHVybgogICAgICAgIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oIFNRTCA9PiAnREVMRVRFIEZST00gY2hhbmdlX2NpcF9hbGxvY2F0ZScgKTsKCiAgICAjIGluc2VydCBuZXcgYWxsb2NhdGlvbnMKICAgIGZvciBteSAkSW1wYWN0SUQgKCBzb3J0IGtleXMgJXsgJFBhcmFte0FsbG9jYXRlRGF0YX0gfSApIHsKCiAgICAgICAgZm9yIG15ICRDYXRlZ29yeUlEICggc29ydCBrZXlzICV7ICRQYXJhbXtBbGxvY2F0ZURhdGF9LT57JEltcGFjdElEfSB9ICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IHByaW9yaXR5CiAgICAgICAgICAgIG15ICRQcmlvcml0eUlEID0gJFBhcmFte0FsbG9jYXRlRGF0YX0tPnskSW1wYWN0SUR9LT57JENhdGVnb3J5SUR9OwoKICAgICAgICAgICAgIyBpbnNlcnQgbmV3IGFsbG9jYXRpb24KICAgICAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGNoYW5nZV9jaXBfYWxsb2NhdGUgJwogICAgICAgICAgICAgICAgICAgIC4gJyhjYXRlZ29yeV9pZCwgaW1wYWN0X2lkLCBwcmlvcml0eV9pZCwgJwogICAgICAgICAgICAgICAgICAgIC4gJ2NyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpIFZBTFVFUyAnCiAgICAgICAgICAgICAgICAgICAgLiAnKD8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAogICAgICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICAgICAgXCRDYXRlZ29yeUlELCBcJEltcGFjdElELCBcJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gUHJpb3JpdHlBbGxvY2F0aW9uR2V0KCkKCnJldHVybiB0aGUgcHJpb3JpdHkgaWQgZm9yIGdpdmVuIGNhdGVnb3J5IGFuZCBpbXBhY3QKCiAgICBteSAkUHJpb3JpdHlJRCA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+UHJpb3JpdHlBbGxvY2F0aW9uR2V0KAogICAgICAgIENhdGVnb3J5SUQgPT4gMzIxLAogICAgICAgIEltcGFjdElEICAgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBQcmlvcml0eUFsbG9jYXRpb25HZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2F0ZWdvcnlJRCBJbXBhY3RJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgcHJpb3JpdHkgaWQgZnJvbSBkYgogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBwcmlvcml0eV9pZCBGUk9NIGNoYW5nZV9jaXBfYWxsb2NhdGUgJwogICAgICAgICAgICAuICdXSEVSRSBjYXRlZ29yeV9pZCA9ID8gQU5EIGltcGFjdF9pZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDYXRlZ29yeUlEfSwgXCRQYXJhbXtJbXBhY3RJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHJlc3VsdAogICAgbXkgJFByaW9yaXR5SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRQcmlvcml0eUlEID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJFByaW9yaXR5SUQ7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIFNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb247Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OkV2ZW50SGFuZGxlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uOjpPYmplY3Q7CnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbjo6QXR0cmlidXRlOwp1c2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246Ok9wZXJhdG9yOwp1c2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246OkV4cHJlc3Npb247CnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbjo6QWN0aW9uOwoKdXNlIHZhcnMgcXcoQElTQSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpbWUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uOjpPYmplY3Q6OklUU01Xb3JrT3JkZXInLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uIC0gY29uZGl0aW9uIGxpYgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgZnVuY3Rpb25zIGZvciBjb25kaXRpb25zIGluIElUU01DaGFuZ2VNYW5hZ2VtZW50LgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ29uZGl0aW9uT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBzZXQgdGhlIGRlYnVnIGZsYWcKICAgICRTZWxmLT57RGVidWd9ID0gJFBhcmFte0RlYnVnfSB8fCAwOwoKICAgICMgZ2V0IHRoZSBjYWNoZSB0eXBlIGFuZCBUVEwgKGluIHNlY29uZHMpCiAgICAkU2VsZi0+e0NhY2hlVHlwZX0gPSAnSVRTTUNoYW5nZU1hbmFnZW1lbnQnOwogICAgJFNlbGYtPntDYWNoZVRUTH0gID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ2hhbmdlOjpDYWNoZVRUTCcpICogNjA7CgogICAgIyBnZXQgdGhlIGRhdGFiYXNlIHR5cGUKICAgICRTZWxmLT57REJUeXBlfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT57J0RCOjpUeXBlJ30gfHwgJyc7CiAgICAkU2VsZi0+e0RCVHlwZX0gPSBsYyAkU2VsZi0+e0RCVHlwZX07CgogICAgQElTQSA9IHF3KAogICAgICAgIEtlcm5lbDo6U3lzdGVtOjpFdmVudEhhbmRsZXIKICAgICAgICBLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbjo6T2JqZWN0CiAgICAgICAgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246OkF0dHJpYnV0ZQogICAgICAgIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uOjpPcGVyYXRvcgogICAgICAgIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uOjpFeHByZXNzaW9uCiAgICAgICAgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246OkFjdGlvbgogICAgKTsKCiAgICAjIGluaXQgb2YgZXZlbnQgaGFuZGxlcgogICAgJFNlbGYtPkV2ZW50SGFuZGxlckluaXQoCiAgICAgICAgQ29uZmlnID0+ICdJVFNNQ29uZGl0aW9uOjpFdmVudE1vZHVsZScsCiAgICApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gQ29uZGl0aW9uQWRkKCkKCkFkZCBhIG5ldyBjb25kaXRpb24uCgogICAgbXkgJENvbmRpdGlvbklEID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uQWRkKAogICAgICAgIENoYW5nZUlEICAgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgID0+ICdUaGUgY29uZGl0aW9uIG5hbWUnLAogICAgICAgIEV4cHJlc3Npb25Db25qdW5jdGlvbiA9PiAnYW55JywgICAgICAgICAgICAgICAgICMgKGFueXxhbGwpCiAgICAgICAgQ29tbWVudCAgICAgICAgICAgICAgID0+ICdBIGNvbW1lbnQnLCAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIENvbmRpdGlvbkFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDaGFuZ2VJRCBOYW1lIEV4cHJlc3Npb25Db25qdW5jdGlvbiBWYWxpZElEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiBhIGNvbmRpdGlvbiB3aXRoIHRoaXMgbmFtZSBhbmQgY2hhbmdlIGlkIGV4aXN0IGFscmVhZHkKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBjaGFuZ2VfY29uZGl0aW9uICcKICAgICAgICAgICAgLiAnV0hFUkUgY2hhbmdlX2lkID0gPyBBTkQgbmFtZSA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0NoYW5nZUlEfSwgXCRQYXJhbXtOYW1lfSwKICAgICAgICBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJENvbmRpdGlvbklEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQ29uZGl0aW9uSUQgPSAkUm93WzBdOwogICAgfQoKICAgICMgYSBjb25kaXRpb24gd2l0aCB0aGlzIG5hbWUgYW5kIGNoYW5nZSBpZCBleGlzdHMgYWxyZWFkeQogICAgaWYgKCRDb25kaXRpb25JRCkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQSBjb25kaXRpb24gd2l0aCB0aGUgbmFtZSAkUGFyYW17TmFtZX0gIgogICAgICAgICAgICAgICAgLiAiZXhpc3RzIGFscmVhZHkgZm9yIENoYW5nZUlEICRQYXJhbXtDaGFuZ2VJRH0hIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHRyaWdnZXIgQ29uZGl0aW9uQWRkUHJlLUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdDb25kaXRpb25BZGRQcmUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGFkZCBuZXcgY29uZGl0aW9uIHRvIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGNoYW5nZV9jb25kaXRpb24gJwogICAgICAgICAgICAuICcoY2hhbmdlX2lkLCBuYW1lLCBleHByZXNzaW9uX2Nvbmp1bmN0aW9uLCBjb21tZW50cywgdmFsaWRfaWQsICcKICAgICAgICAgICAgLiAnY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgJwogICAgICAgICAgICAuICdWQUxVRVMgKD8sID8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0NoYW5nZUlEfSwgXCRQYXJhbXtOYW1lfSwgXCRQYXJhbXtFeHByZXNzaW9uQ29uanVuY3Rpb259LAogICAgICAgICAgICBcJFBhcmFte0NvbW1lbnR9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIHByZXBhcmUgU1FMIHN0YXRlbWVudAogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCBGUk9NIGNoYW5nZV9jb25kaXRpb24gJwogICAgICAgICAgICAuICdXSEVSRSBjaGFuZ2VfaWQgPSA/IEFORCBuYW1lID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17Q2hhbmdlSUR9LCBcJFBhcmFte05hbWV9LAogICAgICAgIF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRDb25kaXRpb25JRCA9ICRSb3dbMF07CiAgICB9CgogICAgIyBjaGVjayBpZiBjb25kaXRpb24gY291bGQgYmUgYWRkZWQKICAgIGlmICggISRDb25kaXRpb25JRCApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvbmRpdGlvbkFkZCgpIGZhaWxlZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGVsZXRlIGNhY2hlCiAgICBmb3IgbXkgJEtleSAoCiAgICAgICAgJ0NvbmRpdGlvbkxpc3Q6OkNoYW5nZUlEOjonIC4gJFBhcmFte0NoYW5nZUlEfSAuICc6OlZhbGlkOjowJywKICAgICAgICAnQ29uZGl0aW9uTGlzdDo6Q2hhbmdlSUQ6OicgLiAkUGFyYW17Q2hhbmdlSUR9IC4gJzo6VmFsaWQ6OjEnLAogICAgICAgICkKICAgIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkS2V5LAogICAgICAgICk7CiAgICB9CgogICAgIyB0cmlnZ2VyIENvbmRpdGlvbkFkZFBvc3QtRXZlbnQKICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ0NvbmRpdGlvbkFkZFBvc3QnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBDb25kaXRpb25JRCA9PiAkQ29uZGl0aW9uSUQsCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAkQ29uZGl0aW9uSUQ7Cn0KCj1pdGVtIENvbmRpdGlvblVwZGF0ZSgpCgpVcGRhdGUgYSBjb25kaXRpb24uCgogICAgbXkgJFN1Y2Nlc3MgPSAkQ29uZGl0aW9uT2JqZWN0LT5Db25kaXRpb25VcGRhdGUoCiAgICAgICAgQ29uZGl0aW9uSUQgICAgICAgICAgID0+IDEyMzQsCiAgICAgICAgTmFtZSAgICAgICAgICAgICAgICAgID0+ICdUaGUgY29uZGl0aW9uIG5hbWUnLCAgIyAob3B0aW9uYWwpCiAgICAgICAgRXhwcmVzc2lvbkNvbmp1bmN0aW9uID0+ICdhbnknLCAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIChhbnl8YWxsKQogICAgICAgIENvbW1lbnQgICAgICAgICAgICAgICA9PiAnQSBjb21tZW50JywgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBDb25kaXRpb25VcGRhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ29uZGl0aW9uSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjdXJyZW50IGNvbmRpdGlvbiBkYXRhIGZvciBldmVudCBoYW5kbGVyCiAgICBteSAkQ29uZGl0aW9uRGF0YSA9ICRTZWxmLT5Db25kaXRpb25HZXQoCiAgICAgICAgQ29uZGl0aW9uSUQgPT4gJFBhcmFte0NvbmRpdGlvbklEfSwKICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBjb25kaXRpb24KICAgIHJldHVybiBpZiAhJENvbmRpdGlvbkRhdGE7CgogICAgIyB0cmlnZ2VyIENvbmRpdGlvblVwZGF0ZVByZS1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnQ29uZGl0aW9uVXBkYXRlUHJlJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBtYXAgdXBkYXRlIGF0dHJpYnV0ZXMgdG8gY29sdW1uIG5hbWVzCiAgICBteSAlQXR0cmlidXRlID0gKAogICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICA9PiAnbmFtZScsCiAgICAgICAgRXhwcmVzc2lvbkNvbmp1bmN0aW9uID0+ICdleHByZXNzaW9uX2Nvbmp1bmN0aW9uJywKICAgICAgICBDb21tZW50ICAgICAgICAgICAgICAgPT4gJ2NvbW1lbnRzJywKICAgICAgICBWYWxpZElEICAgICAgICAgICAgICAgPT4gJ3ZhbGlkX2lkJywKICAgICk7CgogICAgIyBidWlsZCBTUUwgdG8gdXBkYXRlIGNvbmRpdGlvbgogICAgbXkgJFNRTCA9ICdVUERBVEUgY2hhbmdlX2NvbmRpdGlvbiBTRVQgJzsKICAgIG15IEBCaW5kOwoKICAgIEFUVFJJQlVURToKICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICVBdHRyaWJ1dGUgKSB7CgogICAgICAgICMgcHJlc2VydmUgdGhlIG9sZCB2YWx1ZSwgd2hlbiB0aGUgY29sdW1uIGlzbid0IGluIGZ1bmN0aW9uIHBhcmFtZXRlcnMKICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAhZXhpc3RzICRQYXJhbXskQXR0cmlidXRlfTsKCiAgICAgICAgIyBwYXJhbSBjaGVja2luZyBoYXMgYWxyZWFkeSBiZWVuIGRvbmUsIHNvIHRoaXMgaXMgc2FmZQogICAgICAgICRTUUwgLj0gIiRBdHRyaWJ1dGV7JEF0dHJpYnV0ZX0gPSA/LCAiOwogICAgICAgIHB1c2ggQEJpbmQsIFwkUGFyYW17JEF0dHJpYnV0ZX07CiAgICB9CgogICAgIyBhZGQgY2hhbmdlIHRpbWUgYW5kIGNoYW5nZSB1c2VyCiAgICAkU1FMIC49ICdjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCBjaGFuZ2VfYnkgPSA/ICc7CiAgICBwdXNoIEBCaW5kLCBcJFBhcmFte1VzZXJJRH07CgogICAgIyBzZXQgbWF0Y2hpbmcgb2YgU1FMIHN0YXRlbWVudAogICAgJFNRTCAuPSAnV0hFUkUgaWQgPSA/JzsKICAgIHB1c2ggQEJpbmQsIFwkUGFyYW17Q29uZGl0aW9uSUR9OwoKICAgICMgdXBkYXRlIGNvbmRpdGlvbgogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMICA9PiAkU1FMLAogICAgICAgIEJpbmQgPT4gXEBCaW5kLAogICAgKTsKCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgZm9yIG15ICRLZXkgKAogICAgICAgICdDb25kaXRpb25MaXN0OjpDaGFuZ2VJRDo6JyAuICRDb25kaXRpb25EYXRhLT57Q2hhbmdlSUR9IC4gJzo6VmFsaWQ6OjAnLAogICAgICAgICdDb25kaXRpb25MaXN0OjpDaGFuZ2VJRDo6JyAuICRDb25kaXRpb25EYXRhLT57Q2hhbmdlSUR9IC4gJzo6VmFsaWQ6OjEnLAogICAgICAgICdDb25kaXRpb25HZXQ6OkNvbmRpdGlvbklEOjonIC4gJFBhcmFte0NvbmRpdGlvbklEfSwKICAgICAgICApCiAgICB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJEtleSwKICAgICAgICApOwogICAgfQoKICAgICMgdHJpZ2dlciBDb25kaXRpb25VcGRhdGVQb3N0LUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdDb25kaXRpb25VcGRhdGVQb3N0JywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgT2xkQ29uZGl0aW9uRGF0YSA9PiAkQ29uZGl0aW9uRGF0YSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvbmRpdGlvbkxvb2t1cCgpCgpSZXR1cm4gdGhlIGNvbmRpdGlvbiBpZCB3aGVuIHRoZSBjb25kaXRpb24gbmFtZSBpcyBwYXNzZWQuClJldHVybiB0aGUgY29uZGl0aW9uIG5hbWUgd2hlbiB0aGUgY29uZGl0aW9uIGlkIGlzIHBhc3NlZC4KV2hlbiBubyBjb25kaXRpb24gaWQgb3IgY29uZGl0aW9uIG5hbWUgaXMgZm91bmQsIHRoZW4gdGhlIHVuZGVmaW5lZCB2YWx1ZSBpcyByZXR1cm5lZC4KVGhlIENoYW5nZUlEIGlzIGFsd2F5cyByZXF1aXJlZCBhcyBjb25kaXRpb24gbmFtZXMgYXJlIG9ubHkgdW5pcXVlIHdpdGhpbiB0aGUgc2FtZSBjaGFuZ2UuCgogICAgbXkgJENvbmRpdGlvbklEID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uTG9va3VwKAogICAgICAgIE5hbWUgICAgID0+ICdBQkMnLAogICAgICAgIENoYW5nZUlEID0+IDIsCiAgICApOwoKICAgIG15ICROYW1lID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uTG9va3VwKAogICAgICAgIENvbmRpdGlvbklEID0+IDQyLAogICAgICAgIENoYW5nZUlEICAgID0+IDIsCiAgICApOwoKPWN1dAoKc3ViIENvbmRpdGlvbkxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdGhlIGNoYW5nZSBpZCBtdXN0IGJlIHBhc3NlZAogICAgaWYgKCAhJFBhcmFte0NoYW5nZUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgdGhlIENoYW5nZUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyB0aGUgY29uZGl0aW9uIGlkIG9yIHRoZSBjb25kaXRpb24gbmFtZSBtdXN0IGJlIHBhc3NlZAogICAgaWYgKCAhJFBhcmFte0NvbmRpdGlvbklEfSAmJiAhJFBhcmFte05hbWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCB0aGUgQ29uZGl0aW9uSUQgb3IgdGhlIE5hbWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIG9ubHkgb25lIG9mIGNvbmRpdGlvbiBpZCBhbmQgY29uZGl0aW9uIG5hbWUgY2FuIGJlIHBhc3NlZAogICAgaWYgKCAkUGFyYW17Q29uZGl0aW9uSUR9ICYmICRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgZWl0aGVyIHRoZSBDb25kaXRpb25JRCBvciB0aGUgTmFtZSwgbm90IGJvdGghJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGlmIENvbmRpdGlvbklEIGlzIGEgbnVtYmVyCiAgICBpZiAoICRQYXJhbXtDb25kaXRpb25JRH0gJiYgJFBhcmFte0NvbmRpdGlvbklEfSAhfiBteyBcQSBcZCsgXHogfXhtcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvbmRpdGlvbklEIG11c3QgYmUgYSBudW1iZXIhIChDb25kaXRpb25JRDogJFBhcmFte0NvbmRpdGlvbklEfSkiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGNvbmRpdGlvbiBpZAogICAgaWYgKCAkUGFyYW17TmFtZX0gKSB7CgogICAgICAgIG15ICRDb25kaXRpb25JRDsKCiAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgICAgIFNFTEVDVCBpZAogICAgICAgICAgICAgICAgRlJPTSBjaGFuZ2VfY29uZGl0aW9uCiAgICAgICAgICAgICAgICBXSEVSRSBjaGFuZ2VfaWQgPSA/CiAgICAgICAgICAgICAgICBBTkQgbmFtZSA9ID8KICAgICAgICAgICAgJywKICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICBcJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICAgICAgICAgIFwkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJENvbmRpdGlvbklEID0gJFJvd1swXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkQ29uZGl0aW9uSUQ7CiAgICB9CgogICAgIyBnZXQgY29uZGl0aW9uIG5hbWUKICAgIGVsc2lmICggJFBhcmFte0NvbmRpdGlvbklEfSApIHsKCiAgICAgICAgbXkgJE5hbWU7CgogICAgICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgICAgICBTRUxFQ1QgbmFtZQogICAgICAgICAgICAgICAgRlJPTSBjaGFuZ2VfY29uZGl0aW9uCiAgICAgICAgICAgICAgICBXSEVSRSBjaGFuZ2VfaWQgPSA/CiAgICAgICAgICAgICAgICBBTkQgaWQgPSA/CiAgICAgICAgICAgICcsCiAgICAgICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICAgICAgXCRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgICAgICAgICBcJFBhcmFte0NvbmRpdGlvbklEfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwoKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkTmFtZSA9ICRSb3dbMF07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJE5hbWU7CiAgICB9CgogICAgcmV0dXJuOwp9Cgo9aXRlbSBDb25kaXRpb25HZXQoKQoKUmV0dXJucyBhIGhhc2ggcmVmZXJlbmNlIG9mIHRoZSBjb25kaXRpb24gZGF0YSBmb3IgYSBnaXZlbiBDb25kaXRpb25JRC4KCiAgICBteSAkQ29uZGl0aW9uRGF0YSA9ICRDb25kaXRpb25PYmplY3QtPkNvbmRpdGlvbkdldCgKICAgICAgICBDb25kaXRpb25JRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CgpUaGUgcmV0dXJuZWQgaGFzaCByZWZlcmVuY2UgY29udGFpbnMgZm9sbG93aW5nIGVsZW1lbnRzOgoKICAgICRDb25kaXRpb25EYXRhe0NvbmRpdGlvbklEfQogICAgJENvbmRpdGlvbkRhdGF7Q2hhbmdlSUR9CiAgICAkQ29uZGl0aW9uRGF0YXtOYW1lfQogICAgJENvbmRpdGlvbkRhdGF7RXhwcmVzc2lvbkNvbmp1bmN0aW9ufQogICAgJENvbmRpdGlvbkRhdGF7Q29tbWVudH0KICAgICRDb25kaXRpb25EYXRhe1ZhbGlkSUR9CiAgICAkQ29uZGl0aW9uRGF0YXtDcmVhdGVUaW1lfQogICAgJENvbmRpdGlvbkRhdGF7Q3JlYXRlQnl9CiAgICAkQ29uZGl0aW9uRGF0YXtDaGFuZ2VUaW1lfQogICAgJENvbmRpdGlvbkRhdGF7Q2hhbmdlQnl9Cgo9Y3V0CgpzdWIgQ29uZGl0aW9uR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENvbmRpdGlvbklEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ0NvbmRpdGlvbkdldDo6Q29uZGl0aW9uSUQ6OicgLiAkUGFyYW17Q29uZGl0aW9uSUR9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAjIHByZXBhcmUgU1FMIHN0YXRlbWVudAogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgY2hhbmdlX2lkLCBuYW1lLCBleHByZXNzaW9uX2Nvbmp1bmN0aW9uLCBjb21tZW50cywgJwogICAgICAgICAgICAuICd2YWxpZF9pZCwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSAnCiAgICAgICAgICAgIC4gJ0ZST00gY2hhbmdlX2NvbmRpdGlvbiAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0NvbmRpdGlvbklEfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJUNvbmRpdGlvbkRhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRDb25kaXRpb25EYXRhe0NvbmRpdGlvbklEfSAgICAgICAgICAgPSAkUm93WzBdOwogICAgICAgICRDb25kaXRpb25EYXRhe0NoYW5nZUlEfSAgICAgICAgICAgICAgPSAkUm93WzFdOwogICAgICAgICRDb25kaXRpb25EYXRhe05hbWV9ICAgICAgICAgICAgICAgICAgPSAkUm93WzJdOwogICAgICAgICRDb25kaXRpb25EYXRhe0V4cHJlc3Npb25Db25qdW5jdGlvbn0gPSAkUm93WzNdOwogICAgICAgICRDb25kaXRpb25EYXRhe0NvbW1lbnR9ICAgICAgICAgICAgICAgPSAkUm93WzRdOwogICAgICAgICRDb25kaXRpb25EYXRhe1ZhbGlkSUR9ICAgICAgICAgICAgICAgPSAkUm93WzVdOwogICAgICAgICRDb25kaXRpb25EYXRhe0NyZWF0ZVRpbWV9ICAgICAgICAgICAgPSAkUm93WzZdOwogICAgICAgICRDb25kaXRpb25EYXRhe0NyZWF0ZUJ5fSAgICAgICAgICAgICAgPSAkUm93WzddOwogICAgICAgICRDb25kaXRpb25EYXRhe0NoYW5nZVRpbWV9ICAgICAgICAgICAgPSAkUm93WzhdOwogICAgICAgICRDb25kaXRpb25EYXRhe0NoYW5nZUJ5fSAgICAgICAgICAgICAgPSAkUm93WzldOwogICAgfQoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISVDb25kaXRpb25EYXRhICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ29uZGl0aW9uSUQgJFBhcmFte0NvbmRpdGlvbklEfSBkb2VzIG5vdCBleGlzdCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2xlYW51cCB0aW1lIHN0YW1wcyAoc29tZSBkYXRhYmFzZXMgYXJlIHVzaW5nIGUuIGcuIDIwMDgtMDItMjUgMjI6MDM6MDAuMDAwMDAwKQogICAgVElNRUZJRUxEOgogICAgZm9yIG15ICRUaW1lZmllbGQgKCAnQ3JlYXRlVGltZScsICdDaGFuZ2VUaW1lJywgKSB7CiAgICAgICAgbmV4dCBUSU1FRklFTEQgaWYgISRDb25kaXRpb25EYXRheyRUaW1lZmllbGR9OwogICAgICAgICRDb25kaXRpb25EYXRheyRUaW1lZmllbGR9CiAgICAgICAgICAgID1+IHN7IFxBICggXGRcZFxkXGQgLSBcZFxkIC0gXGRcZCBccyBcZFxkOlxkXGQ6XGRcZCApIFwuIC4rPyBceiB9eyQxfXhtczsKICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlQ29uZGl0aW9uRGF0YSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICk7CgogICAgcmV0dXJuIFwlQ29uZGl0aW9uRGF0YTsKfQoKPWl0ZW0gQ29uZGl0aW9uTGlzdCgpCgpyZXR1cm4gYSBsaXN0IG9mIGFsbCBjb25kaXRpb24gaWRzIG9mIGEgZ2l2ZW4gY2hhbmdlIGlkIGFzIGFycmF5IHJlZmVyZW5jZS4KVGhlIGlkcyBhcmUgc29ydGVkIGJ5IHRoZSBuYW1lIG9mIHRoZSBjb25kaXRpb24uCgogICAgbXkgJENvbmRpdGlvbklEc1JlZiA9ICRDb25kaXRpb25PYmplY3QtPkNvbmRpdGlvbkxpc3QoCiAgICAgICAgQ2hhbmdlSUQgPT4gNSwKICAgICAgICBWYWxpZCAgICA9PiAwLCAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEgKDB8MSkKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBDb25kaXRpb25MaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENoYW5nZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayB2YWxpZCBwYXJhbQogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17VmFsaWR9ICkgewogICAgICAgICRQYXJhbXtWYWxpZH0gPSAxOwogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdDb25kaXRpb25MaXN0OjpDaGFuZ2VJRDo6JyAuICRQYXJhbXtDaGFuZ2VJRH0gLiAnOjpWYWxpZDo6JyAuICRQYXJhbXtWYWxpZH07CiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAkQ2FjaGUgaWYgJENhY2hlOwoKICAgICMgZGVmaW5lIFNRTCBzdGF0ZW1lbnQKICAgIG15ICRTUUwgPSAnU0VMRUNUIGlkICcKICAgICAgICAuICdGUk9NIGNoYW5nZV9jb25kaXRpb24gJwogICAgICAgIC4gJ1dIRVJFIGNoYW5nZV9pZCA9ID8gJzsKCiAgICAjIGdldCBvbmx5IHZhbGlkIGNvbmRpdGlvbiBpZHMKICAgIGlmICggJFBhcmFte1ZhbGlkfSApIHsKCiAgICAgICAgbXkgQFZhbGlkSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCk7CiAgICAgICAgbXkgJFZhbGlkSURTdHJpbmcgPSBqb2luICcsICcsIEBWYWxpZElEczsKCiAgICAgICAgJFNRTCAuPSAiQU5EIHZhbGlkX2lkIElOICggJFZhbGlkSURTdHJpbmcgKSAiOwogICAgfQoKICAgICMgZ2V0IHNvcnRlZCBsaXN0CiAgICAkU1FMIC49ICdPUkRFUiBCWSBuYW1lIEFTQyAnOwoKICAgICMgcHJlcGFyZSBTUUwgc3RhdGVtZW50CiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDaGFuZ2VJRH0gXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAQ29uZGl0aW9uSURzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBDb25kaXRpb25JRHMsICRSb3dbMF07CiAgICB9CgogICAgIyBzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQENvbmRpdGlvbklEcywKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICk7CgogICAgcmV0dXJuIFxAQ29uZGl0aW9uSURzOwp9Cgo9aXRlbSBDb25kaXRpb25EZWxldGUoKQoKRGVsZXRlIGEgY29uZGl0aW9uLgoKICAgIG15ICRTdWNjZXNzID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uRGVsZXRlKAogICAgICAgIENvbmRpdGlvbklEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBDb25kaXRpb25EZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ29uZGl0aW9uSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRyaWdnZXIgQ29uZGl0aW9uRGVsZXRlUHJlLUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdDb25kaXRpb25EZWxldGVQcmUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBjb25kaXRpb24gZGF0YSBmb3IgZXZlbnQgaGFuZGxlcgogICAgbXkgJENvbmRpdGlvbkRhdGEgPSAkU2VsZi0+Q29uZGl0aW9uR2V0KAogICAgICAgIENvbmRpdGlvbklEID0+ICRQYXJhbXtDb25kaXRpb25JRH0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgZGVsZXRlIGFsbCBleHByZXNzaW9ucyBmb3IgdGhpcyBjb25kaXRpb24gaWQKICAgIG15ICRTdWNjZXNzID0gJFNlbGYtPkV4cHJlc3Npb25EZWxldGVBbGwoCiAgICAgICAgQ29uZGl0aW9uSUQgPT4gJFBhcmFte0NvbmRpdGlvbklEfSwKICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkU3VjY2VzczsKCiAgICAjIGRlbGV0ZSBhbGwgYWN0aW9ucyBmb3IgdGhpcyBjb25kaXRpb24gaWQKICAgICRTdWNjZXNzID0gJFNlbGYtPkFjdGlvbkRlbGV0ZUFsbCgKICAgICAgICBDb25kaXRpb25JRCA9PiAkUGFyYW17Q29uZGl0aW9uSUR9LAogICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISRTdWNjZXNzOwoKICAgICMgZGVsZXRlIGNvbmRpdGlvbiBmcm9tIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ0RFTEVURSBGUk9NIGNoYW5nZV9jb25kaXRpb24gJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NvbmRpdGlvbklEfSBdLAogICAgKTsKCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgZm9yIG15ICRLZXkgKAogICAgICAgICdDb25kaXRpb25MaXN0OjpDaGFuZ2VJRDo6JyAuICRDb25kaXRpb25EYXRhLT57Q2hhbmdlSUR9IC4gJzo6VmFsaWQ6OjAnLAogICAgICAgICdDb25kaXRpb25MaXN0OjpDaGFuZ2VJRDo6JyAuICRDb25kaXRpb25EYXRhLT57Q2hhbmdlSUR9IC4gJzo6VmFsaWQ6OjEnLAogICAgICAgICdDb25kaXRpb25HZXQ6OkNvbmRpdGlvbklEOjonIC4gJFBhcmFte0NvbmRpdGlvbklEfSwKICAgICAgICApCiAgICB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJEtleSwKICAgICAgICApOwogICAgfQoKICAgICMgdHJpZ2dlciBDb25kaXRpb25EZWxldGVQb3N0LUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdDb25kaXRpb25EZWxldGVQb3N0JywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgT2xkQ29uZGl0aW9uRGF0YSA9PiAkQ29uZGl0aW9uRGF0YSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvbmRpdGlvbkRlbGV0ZUFsbCgpCgpEZWxldGUgYWxsIGNvbmRpdGlvbnMgZm9yIGEgZ2l2ZW4gQ2hhbmdlSUQuCkFsbCByZWxhdGVkIGV4cHJlc3Npb25zIGFuZCBhY3Rpb25zIHdpbGwgYmUgZGVsZXRlZCBmaXJzdC4KCiAgICBteSAkU3VjY2VzcyA9ICRDb25kaXRpb25PYmplY3QtPkNvbmRpdGlvbkRlbGV0ZUFsbCgKICAgICAgICBDaGFuZ2VJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQ29uZGl0aW9uRGVsZXRlQWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENoYW5nZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgYWxsIGNvbmRpdGlvbiBpZHMgKGluY2x1ZGluZyBpbnZhbGlkKSBmb3IgdGhlIGdpdmVuIGNoYW5nZSBpZAogICAgbXkgJENvbmRpdGlvbklEc1JlZiA9ICRTZWxmLT5Db25kaXRpb25MaXN0KAogICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgVmFsaWQgICAgPT4gMCwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyB0cmlnZ2VyIENvbmRpdGlvbkRlbGV0ZUFsbFByZS1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnQ29uZGl0aW9uRGVsZXRlQWxsUHJlJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgZm9yIG15ICRDb25kaXRpb25JRCAoIEB7JENvbmRpdGlvbklEc1JlZn0gKSB7CgogICAgICAgICMgZGVsZXRlIGFsbCBleHByZXNzaW9ucyBmb3IgdGhpcyBjb25kaXRpb24gaWQKICAgICAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT5FeHByZXNzaW9uRGVsZXRlQWxsKAogICAgICAgICAgICBDb25kaXRpb25JRCA9PiAkQ29uZGl0aW9uSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIHJldHVybiBpZiAhJFN1Y2Nlc3M7CgogICAgICAgICMgZGVsZXRlIGFsbCBhY3Rpb25zIGZvciB0aGlzIGNvbmRpdGlvbiBpZAogICAgICAgICRTdWNjZXNzID0gJFNlbGYtPkFjdGlvbkRlbGV0ZUFsbCgKICAgICAgICAgICAgQ29uZGl0aW9uSUQgPT4gJENvbmRpdGlvbklELAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gaWYgISRTdWNjZXNzOwoKICAgICAgICAjIGRlbGV0ZSBjYWNoZSBmb3IgQ29uZGl0aW9uR2V0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJ0NvbmRpdGlvbkdldDo6Q29uZGl0aW9uSUQ6OicgLiAkQ29uZGl0aW9uSUQsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGRlbGV0ZSBjb25kaXRpb25zIGZyb20gZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnREVMRVRFIEZST00gY2hhbmdlX2NvbmRpdGlvbiAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGNoYW5nZV9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NoYW5nZUlEfSBdLAogICAgKTsKCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgZm9yIG15ICRLZXkgKAogICAgICAgICdDb25kaXRpb25MaXN0OjpDaGFuZ2VJRDo6JyAuICRQYXJhbXtDaGFuZ2VJRH0gLiAnOjpWYWxpZDo6MCcsCiAgICAgICAgJ0NvbmRpdGlvbkxpc3Q6OkNoYW5nZUlEOjonIC4gJFBhcmFte0NoYW5nZUlEfSAuICc6OlZhbGlkOjoxJywKICAgICAgICApCiAgICB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJEtleSwKICAgICAgICApOwogICAgfQoKICAgICMgdHJpZ2dlciBDb25kaXRpb25EZWxldGVBbGxQb3N0LUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdDb25kaXRpb25EZWxldGVBbGxQb3N0JywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvbmRpdGlvbk1hdGNoRXhlY3V0ZUFsbCgpCgpUaGlzIGZ1bmN0aW9ucyBmaW5kcyB0aGUgdmFsaWQgY29uZGl0aW9ucyBmb3IgYSBnaXZlbiBDaGFuZ2VJRC4gVGhlIGZvdW5kIGNvbmRpdGlvbnMKYXJlIGhhbmRsZWQgYnkgZXhlY3V0aW5nIHRoZSBhc3NvY2lhdGVkIGFjdGlvbnMgd2hlbiBhIGNvbmRpdGlvbiBtYXRjaGVzLgpUaGUgY29uZGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgb3JkZXIgZGVmaW5lZCBieSB0aGVpciBuYW1lcy4KCkludGVybmFsbHksIHRoZSBtZXRob2QgQ29uZGl0aW9uTWF0Y2hFeGVjdXRlKCkgaXMgY2FsbGVkIGZvciBlYWNoIG9mIHRoZSBmb3VuZCBjb25kaXRpb25zLgpUaGUgb3B0aW9uYWwgcGFyYW1ldGVyICdBdHRyaWJ1dGVzQ2hhbmdlZCcgaXMgcGFzc2VkIG9uIHRvIENvbmRpdGlvbk1hdGNoRXhlY3V0ZSgpLgoKICAgIG15ICRTdWNjZXNzID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uTWF0Y2hFeGVjdXRlQWxsKAogICAgICAgIENoYW5nZUlEICAgICAgICAgID0+IDEyMywKICAgICAgICBBdHRyaWJ1dGVzQ2hhbmdlZCA9PiB7IElUU01DaGFuZ2UgPT4gWyBDaGFuZ2VUaXRsZSwgQ2hhbmdlRGVzY3JpcHRpb25dIH0sICAjIChvcHRpb25hbCkKICAgICAgICBFdmVudCAgICAgICAgICAgICA9PiAnQ2hhbmdlVXBkYXRlJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBDb25kaXRpb25NYXRjaEV4ZWN1dGVBbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2hhbmdlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBhbGwgY29uZGl0aW9uIGlkcyBmb3IgdGhlIGdpdmVuIGNoYW5nZSBpZAogICAgbXkgJENvbmRpdGlvbklEc1JlZiA9ICRTZWxmLT5Db25kaXRpb25MaXN0KAogICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgVmFsaWQgICAgPT4gMSwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBlcnJvcnMKICAgIHJldHVybiBpZiAhJENvbmRpdGlvbklEc1JlZjsKICAgIHJldHVybiBpZiByZWYgJENvbmRpdGlvbklEc1JlZiBuZSAnQVJSQVknOwoKICAgICMgbm8gZXJyb3IgaWYganVzdCBubyB2YWxpZCBjb25kaXRpb25zIHdlcmUgZm91bmQKICAgIHJldHVybiAxIGlmICFAeyRDb25kaXRpb25JRHNSZWZ9OwoKICAgICMgbWF0Y2ggYW5kIGV4ZWN1dGUgYWxsIGNvbmRpdGlvbnMKICAgIGZvciBteSAkQ29uZGl0aW9uSUQgKCBAeyRDb25kaXRpb25JRHNSZWZ9ICkgewoKICAgICAgICAjIG1hdGNoIGFuZCBleGVjdXRlIGVhY2ggY29uZGl0aW9uCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+Q29uZGl0aW9uTWF0Y2hFeGVjdXRlKAogICAgICAgICAgICBDb25kaXRpb25JRCAgICAgICA9PiAkQ29uZGl0aW9uSUQsCiAgICAgICAgICAgIEF0dHJpYnV0ZXNDaGFuZ2VkID0+ICRQYXJhbXtBdHRyaWJ1dGVzQ2hhbmdlZH0sCiAgICAgICAgICAgIEV2ZW50ICAgICAgICAgICAgID0+ICRQYXJhbXtFdmVudH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgd3JpdGUgbG9nIGVudHJ5IGJ1dCBkbyBub3QgcmV0dXJuCiAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb25kaXRpb25NYXRjaEV4ZWN1dGUgZm9yIENvbmRpdGlvbklEICckQ29uZGl0aW9uSUQnIGZhaWxlZCEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29uZGl0aW9uTWF0Y2hFeGVjdXRlKCkKClRoaXMgZnVuY3Rpb24gbWF0Y2hlcyB0aGUgZ2l2ZW4gY29uZGl0aW9uLiBXaGVuIGl0IG1hdGNoZXMgdGhlIGFzc29jaWF0ZWQgYWN0aW9ucyBhcmUKZXhlY3V0ZWQuCgpUaGUgb3B0aW9uYWwgcGFyYW1ldGVyICdBdHRyaWJ1dGVzQ2hhbmdlZCcgZGVmaW5lcyBhIGxpc3Qgb2YgYXR0cmlidXRlcyB0aGF0IHdlcmUgY2hhbmdlZApkdXJpbmcgZS5nLiBhIENoYW5nZVVwZGF0ZS1FdmVudC4gV2hlbiAnQXR0cmlidXRlc0NoYW5nZWQnIGlzIHBhc3NlZCwgaXQgaXMgdXNlZCB0byBzaG9ydGN1dCB0aGUKZXhwcmVzc2lvbiBldmFsdXRpb24uIE9ubHkgdGhlIGNoYW5nZWQgYXR0cmlidXRlcyBtdXN0IGJlIGNoZWNrZWQuCldoZW4gdGhlIGV4cHJlc3Npb24gY29uanVuY3Rpb24gaXMgJ2FueScgYW5kIG1vcmUgdGhhbiBhIHNpbmdsZSBleHByZXNzaW9uIGlzIHNldCB1cCwKdGhlbiwgZm9yIG9idmlvdXMgcmVhc29ucywgdGhlIHNob3J0Y3V0IGlzIG5vdCB1c2VkLgoKICAgIG15ICRTdWNjZXNzID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uTWF0Y2hFeGVjdXRlKAogICAgICAgIENvbmRpdGlvbklEICAgICAgID0+IDEyMywKICAgICAgICBBdHRyaWJ1dGVzQ2hhbmdlZCA9PiB7IElUU01DaGFuZ2UgPT4gWyBDaGFuZ2VUaXRsZSwgQ2hhbmdlRGVzY3JpcHRpb25dIH0sICAjIChvcHRpb25hbCkKICAgICAgICBFdmVudCAgICAgICAgICAgICA9PiAnQ2hhbmdlVXBkYXRlJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBDb25kaXRpb25NYXRjaEV4ZWN1dGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ29uZGl0aW9uSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjb25kaXRpb24gZGF0YQogICAgbXkgJENvbmRpdGlvbkRhdGEgPSAkU2VsZi0+Q29uZGl0aW9uR2V0KAogICAgICAgIENvbmRpdGlvbklEID0+ICRQYXJhbXtDb25kaXRpb25JRH0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIHJldHVybiBpZiAhJENvbmRpdGlvbkRhdGE7CgogICAgIyBnZXQgYWxsIGV4cHJlc3Npb25zIGZvciB0aGUgZ2l2ZW4gY29uZGl0aW9uIGlkCiAgICBteSAkRXhwcmVzc2lvbklEc1JlZiA9ICRTZWxmLT5FeHByZXNzaW9uTGlzdCgKICAgICAgICBDb25kaXRpb25JRCA9PiAkUGFyYW17Q29uZGl0aW9uSUR9LAogICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGVycm9ycwogICAgcmV0dXJuIGlmICEkRXhwcmVzc2lvbklEc1JlZjsKICAgIHJldHVybiBpZiByZWYgJEV4cHJlc3Npb25JRHNSZWYgbmUgJ0FSUkFZJzsKCiAgICAjIG5vIGVycm9yIGlmIGp1c3Qgbm8gZXhwcmVzc2lvbnMgd2VyZSBmb3VuZAogICAgcmV0dXJuIDEgaWYgIUB7JEV4cHJlc3Npb25JRHNSZWZ9OwoKICAgICMgY291bnQgdGhlIG51bWJlciBvZiBleHByZXNzaW9uIGlkcwogICAgbXkgJEV4cHJlc3Npb25JRENvdW50ID0gc2NhbGFyIEB7JEV4cHJlc3Npb25JRHNSZWZ9OwoKICAgICMgZ2V0IGFsbCBhY3Rpb25zIGZvciB0aGUgZ2l2ZW4gY29uZGl0aW9uIGlkCiAgICBteSAkQWN0aW9uSURzUmVmID0gJFNlbGYtPkFjdGlvbkxpc3QoCiAgICAgICAgQ29uZGl0aW9uSUQgPT4gJFBhcmFte0NvbmRpdGlvbklEfSwKICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBlcnJvcnMKICAgIHJldHVybiBpZiAhJEFjdGlvbklEc1JlZjsKICAgIHJldHVybiBpZiByZWYgJEFjdGlvbklEc1JlZiBuZSAnQVJSQVknOwoKICAgICMgbm8gZXJyb3IgaWYganVzdCBubyBhY3Rpb25zIHdlcmUgZm91bmQKICAgIHJldHVybiAxIGlmICFAeyRBY3Rpb25JRHNSZWZ9OwoKICAgICMgdG8gc3RvcmUgdGhlIG51bWJlciBvZiBwb3NpdGl2ZSAodHJ1ZSkgZXhwcmVzc2lvbnMKICAgIG15IEBFeHByZXNzaW9uTWF0Y2hSZXN1bHQ7CgogICAgIyB0byBzdG9yZSBpZiB0aGUgY29uZGl0aW9uIG1hdGNoZXMKICAgIG15ICRDb25kaXRpb25NYXRjaDsKCiAgICAjIG5vcm1hbGx5IGdpdmUgdGhlIGxpc3Qgb2YgY2hhbmdlZCBhdHRyaWJ1dGVzIHRvIEV4cHJlc3Npb25NYXRjaCgpIGZ1bmN0aW9uCiAgICBteSAkQXR0cmlidXRlc0NoYW5nZWQgPSAkUGFyYW17QXR0cmlidXRlc0NoYW5nZWR9OwoKICAgICMgZXhwcmVzc2lvbiBjb25qdW5jdGlvbiBpcyAnYWxsJyBhbmQgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBleHByZXNpb24KICAgIGlmICggJENvbmRpdGlvbkRhdGEtPntFeHByZXNzaW9uQ29uanVuY3Rpb259IGVxICdhbGwnICYmICRFeHByZXNzaW9uSURDb3VudCA+IDEgKSB7CgogICAgICAgICMgZG8gbm90IGdpdmUgdGhlIGxpc3Qgb2YgY2hhbmdlZCBhdHRyaWJ1dGVzIHRvIEV4cHJlc3Npb25NYXRjaCgpCiAgICAgICAgJEF0dHJpYnV0ZXNDaGFuZ2VkID0gdW5kZWY7CiAgICB9CgogICAgIyB0cnkgdG8gbWF0Y2ggZWFjaCBleHByZXNzaW9uCiAgICBFWFBSRVNTSU9OSUQ6CiAgICBmb3IgbXkgJEV4cHJlc3Npb25JRCAoIEB7JEV4cHJlc3Npb25JRHNSZWZ9ICkgewoKICAgICAgICAjIG1hdGNoIGV4cHJlc3Npb24KICAgICAgICBteSAkRXhwcmVzc2lvbk1hdGNoID0gJFNlbGYtPkV4cHJlc3Npb25NYXRjaCgKICAgICAgICAgICAgRXhwcmVzc2lvbklEICAgICAgPT4gJEV4cHJlc3Npb25JRCwKICAgICAgICAgICAgQXR0cmlidXRlc0NoYW5nZWQgPT4gJEF0dHJpYnV0ZXNDaGFuZ2VkLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApIHx8IDA7CgogICAgICAgICMgc2V0IENvbmRpdGlvbk1hdGNoIHRydWUgaWYgRXhwcmVzc2lvbk1hdGNoIGlzIHRydWUgYW5kICdhbnknIGlzIHJlcXVlc3RlZAogICAgICAgIGlmICggJENvbmRpdGlvbkRhdGEtPntFeHByZXNzaW9uQ29uanVuY3Rpb259IGVxICdhbnknICYmICRFeHByZXNzaW9uTWF0Y2ggKSB7CiAgICAgICAgICAgICRDb25kaXRpb25NYXRjaCA9IDE7CiAgICAgICAgICAgIGxhc3QgRVhQUkVTU0lPTklEOwogICAgICAgIH0KCiAgICAgICAgIyBjb25kaXRpb24gaXMgZmFsc2UgYXQgYWxsLCBubyBhY3Rpb24gd2lsbCBiZSBleGVjdGVkLCB3ZSBqdXN0IHJldHVybiB0cnVlCiAgICAgICAgaWYgKCAkQ29uZGl0aW9uRGF0YS0+e0V4cHJlc3Npb25Db25qdW5jdGlvbn0gZXEgJ2FsbCcgJiYgISRFeHByZXNzaW9uTWF0Y2ggKSB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KCiAgICAgICAgIyBzYXZlIGN1cnJlbnQgZXhwcmVzc2lvbiBtYXRjaCByZXN1bHQgZm9yIGxhdGVyIGNoZWNrcwogICAgICAgIHB1c2ggQEV4cHJlc3Npb25NYXRjaFJlc3VsdCwgJEV4cHJlc3Npb25NYXRjaDsKICAgIH0KCiAgICAjIGNvdW50IGFsbCByZXN1bHRzIHdoaWNoIGhhdmUgYSB0cnVlIHZhbHVlCiAgICBteSAkVHJ1ZUNvdW50ID0gc2NhbGFyIGdyZXAgeyAkXyA9PSAxIH0gQEV4cHJlc3Npb25NYXRjaFJlc3VsdDsKCiAgICAjIGlmIHRoZSBjb25kaXRpb24gZGlkIG5vdCBtYXRjaCBhbHJlYWR5LCBhbmQgbm90IGFsbCBleHByZXNzaW9ucyBhcmUgdHJ1ZQogICAgaWYgKCAhJENvbmRpdGlvbk1hdGNoICYmICRUcnVlQ291bnQgIT0gJEV4cHJlc3Npb25JRENvdW50ICkgewoKICAgICAgICAjIG5vIGVycm9yOiBpZiBqdXN0IHRoZSBjb25kaXRpb24gZGlkIG5vdCBtYXRjaCwKICAgICAgICAjIHRoZXJlIGlzIG5vIG5lZWQgdG8gZXhlY3V0ZSBhbnkgYWN0aW9ucwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgZXhlY3V0ZSBhbGwgYWN0aW9ucyBvZiB0aGlzIGNvbmRpdGlvbgogICAgQUNUSU9OSUQ6CiAgICBmb3IgbXkgJEFjdGlvbklEICggQHskQWN0aW9uSURzUmVmfSApIHsKCiAgICAgICAgIyBleGVjdXRlIGVhY2ggYWN0aW9uCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+QWN0aW9uRXhlY3V0ZSgKICAgICAgICAgICAgQWN0aW9uSUQgPT4gJEFjdGlvbklELAogICAgICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGVycm9yOiBpZiBBY3Rpb25FeGVjdXRlKCkgcmV0dXJucyB1bmRlZmluZWQgaXQgaXMgYW4gZXJyb3IsCiAgICAgICAgIyAxIG1lYW5zIGFuIGFjdGlvbiB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LCBhbmQgMCBtZWFucyBpdCB3YXMgYSAiTG9jayItQWN0aW9uLAogICAgICAgICMgd2hpY2ggaXMgbm8gZXJyb3IsIGFuZCBzaG91bGQgdGhlcmVmb3JlIG5vdCBiZSBsb2dnZWQuCiAgICAgICAgaWYgKCAhZGVmaW5lZCAkU3VjY2VzcyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkFjdGlvbklEICckQWN0aW9uSUQnIGNvdWxkIG5vdCBiZSBleGVjdXRlZCBzdWNjZXNzZnVsbHkgIgogICAgICAgICAgICAgICAgICAgIC4gImZvciBDb25kaXRpb25JRCAnJFBhcmFte0NvbmRpdGlvbklEfScgKENvbmRpdGlvbiBuYW1lOiAnJENvbmRpdGlvbkRhdGEtPntOYW1lfScpICIKICAgICAgICAgICAgICAgICAgICAuICJvbiBDaGFuZ2VJRCAnJENvbmRpdGlvbkRhdGEtPntDaGFuZ2VJRH0nIGZvciBldmVudCAnJFBhcmFte0V2ZW50fScuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvbmRpdGlvbk1hdGNoU3RhdGVMb2NrKCkKCiAgICBteSAkU3VjY2VzcyA9ICRDb25kaXRpb25PYmplY3QtPkNvbmRpdGlvbk1hdGNoU3RhdGVMb2NrKAogICAgICAgIE9iamVjdE5hbWUgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgIFNlbGVjdG9yICAgPT4gMjM0LAogICAgICAgIFN0YXRlSUQgICAgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQ29uZGl0aW9uTWF0Y2hTdGF0ZUxvY2sgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoT2JqZWN0TmFtZSBTZWxlY3RvciBTdGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgaWQgb2Ygb2JqZWN0CiAgICBteSAkT2JqZWN0SUQgPSAkU2VsZi0+T2JqZWN0TG9va3VwKAogICAgICAgIE5hbWUgICA9PiAkUGFyYW17T2JqZWN0TmFtZX0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGVycm9yCiAgICByZXR1cm4gaWYgISRPYmplY3RJRDsKCiAgICAjIGdldCBpZCBvZiBvcGVyYXRvcjsKICAgIG15ICRPcGVyYXRvck5hbWUgPSAnbG9jayc7CiAgICBteSAkT3BlcmF0b3JJRCAgID0gJFNlbGYtPk9wZXJhdG9yTG9va3VwKAogICAgICAgIE5hbWUgICA9PiAkT3BlcmF0b3JOYW1lLAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBlcnJvcgogICAgcmV0dXJuIGlmICEkT3BlcmF0b3JJRDsKCiAgICAjIGdldCBjb25kaXRpb25zCiAgICBteSAkQ29uZGl0aW9ucyA9ICRTZWxmLT5fQ29uZGl0aW9uTGlzdEJ5T2JqZWN0KAogICAgICAgIE9iamVjdE5hbWUgPT4gJFBhcmFte09iamVjdE5hbWV9LAogICAgICAgIFNlbGVjdG9yICAgPT4gJFBhcmFte1NlbGVjdG9yfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKSB8fCBbXTsKCiAgICAjIGNoZWNrIGVycm9yCiAgICByZXR1cm4gaWYgIUB7JENvbmRpdGlvbnN9OwoKICAgICMgZ2V0IGFsbCBhY3Rpb25zIGFmZmVjdGluZyB0aGlzIG9iamVjdAogICAgbXkgQEFmZmVjdGVkQ29uZGl0aW9uSURzOwogICAgQ09ORElUSU9OSUQ6CiAgICBmb3IgbXkgJENvbmRpdGlvbklEICggQHskQ29uZGl0aW9uc30gKSB7CgogICAgICAgICMgZ2V0IGFjdGlvbnMgZm9yIHRoaXMgY29uZGl0aW9uCiAgICAgICAgbXkgJEFjdGlvbklEc1JlZiA9ICRTZWxmLT5BY3Rpb25MaXN0KAogICAgICAgICAgICBDb25kaXRpb25JRCA9PiAkQ29uZGl0aW9uSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICkgfHwgW107CgogICAgICAgICMgY2hlY2sgYWN0aW9ucwogICAgICAgIG5leHQgQ09ORElUSU9OSUQgaWYgIUB7JEFjdGlvbklEc1JlZn07CgogICAgICAgICMgY2hlY2sgZm9yIGFjdGlvbnMKICAgICAgICBBQ1RJT05JRDoKICAgICAgICBmb3IgbXkgJEFjdGlvbklEICggQHskQWN0aW9uSURzUmVmfSApIHsKCiAgICAgICAgICAgICMgZ2V0IGFjdGlvbgogICAgICAgICAgICBteSAkQWN0aW9uID0gJFNlbGYtPkFjdGlvbkdldCgKICAgICAgICAgICAgICAgIEFjdGlvbklEID0+ICRBY3Rpb25JRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayBhY3Rpb24KICAgICAgICAgICAgbmV4dCBBQ1RJT05JRCBpZiAhJEFjdGlvbjsKCiAgICAgICAgICAgICMgc3RvcmUgb25seSBhZmZlY3RlZCBhY3Rpb25zCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRBY3Rpb24tPntPYmplY3RJRH0gZXEgJE9iamVjdElECiAgICAgICAgICAgICAgICAmJiAkQWN0aW9uLT57T3BlcmF0b3JJRH0gZXEgJE9wZXJhdG9ySUQKICAgICAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICAgICAkQWN0aW9uLT57U2VsZWN0b3J9IGVxICRQYXJhbXtTZWxlY3Rvcn0KICAgICAgICAgICAgICAgICAgICB8fCAkQWN0aW9uLT57U2VsZWN0b3J9IGVxICdhbGwnCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAmJiAkQWN0aW9uLT57QWN0aW9uVmFsdWV9IGVxICRQYXJhbXtTdGF0ZUlEfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwdXNoIEBBZmZlY3RlZENvbmRpdGlvbklEcywgJEFjdGlvbi0+e0NvbmRpdGlvbklEfTsKCiAgICAgICAgICAgICAgICAjIGZvdW5kIGEgY29uZGl0aW9uIHdpdGggYW4gYWZmZWN0ZWQgYWN0aW9uCiAgICAgICAgICAgICAgICAjIHNvIHdlIGNhbiBtb3ZlIG9uIHRvIHRoZSBuZXh0IGNvbmRpdGlvbgogICAgICAgICAgICAgICAgbmV4dCBDT05ESVRJT05JRDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGZvciBhZmZlY3RlZCBjb25kaXRpb25zCiAgICByZXR1cm4gaWYgIUBBZmZlY3RlZENvbmRpdGlvbklEczsKCiAgICAjIGNoZWNrIGZvciBwb3NpdGl2ZSBjb25kaXRpb24gbWF0Y2hlcwogICAgQUZGRUNURURDT05ESVRJT05JRDoKICAgIGZvciBteSAkQWZmZWN0ZWRDb25kaXRpb25JRCAoQEFmZmVjdGVkQ29uZGl0aW9uSURzKSB7CgogICAgICAgICMgZ2V0IGNvbmRpdGlvbiBtYXRjaAogICAgICAgIG15ICRDb25kaXRpb25NYXRjaCA9ICRTZWxmLT5fQ29uZGl0aW9uTWF0Y2goCiAgICAgICAgICAgIENvbmRpdGlvbklEID0+ICRBZmZlY3RlZENvbmRpdGlvbklELAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBuZXh0IEFGRkVDVEVEQ09ORElUSU9OSUQgaWYgISRDb25kaXRpb25NYXRjaDsKCiAgICAgICAgIyBjb25kaXRpb24gbWF0Y2hlZCBzdWNjZXNzZnVsbHkKICAgICAgICByZXR1cm4gMSBpZiAkQ29uZGl0aW9uTWF0Y2g7CiAgICB9CgogICAgIyBubyBjb25kaXRpb24gbWF0Y2hlZAogICAgcmV0dXJuOwp9Cgo9aXRlbSBDb25kaXRpb25Db21wYXJlVmFsdWVGaWVsZFR5cGUoKQoKUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgY29tcGFyZSB2YWx1ZSBmaWVsZCBhcyBzdHJpbmcsIGJhc2VkIG9uIHRoZSBnaXZlbiBvYmplY3QgaWQgYW5kIGF0dHJpYnV0ZSBpZC4KCiAgICBteSAkRmllbGRUeXBlID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uQ29tcGFyZVZhbHVlRmllbGRUeXBlKAogICAgICAgIE9iamVjdElEICAgID0+IDEyMzQsCiAgICAgICAgQXR0cmlidXRlSUQgPT4gNSwKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKClJldHVybnMgJ1RleHQnIG9yICdTZWxlY3Rpb24nIG9yICdEYXRlJy4KClRPRE86IEFkZCAnQXV0b2NvbXBsZXRlJyB0eXBlIGZvciBDaGFuZ2VCdWlsZGVyLCBDaGFuZ2VNYW5hZ2VyLCBXb3JrT3JkZXJBZ2VudCwgZXRjLi4uCgo9Y3V0CgpzdWIgQ29uZGl0aW9uQ29tcGFyZVZhbHVlRmllbGRUeXBlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdElEIEF0dHJpYnV0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBsb29rdXAgb2JqZWN0IG5hbWUKICAgIG15ICRPYmplY3ROYW1lID0gJFNlbGYtPk9iamVjdExvb2t1cCgKICAgICAgICBPYmplY3RJRCA9PiAkUGFyYW17T2JqZWN0SUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGVycm9yCiAgICBpZiAoICEkT2JqZWN0TmFtZSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk9iamVjdElEICRQYXJhbXtPYmplY3RJRH0gZG9lcyBub3QgZXhpc3QhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvb2t1cCBhdHRyaWJ1dGUgbmFtZQogICAgbXkgJEF0dHJpYnV0ZU5hbWUgPSAkU2VsZi0+QXR0cmlidXRlTG9va3VwKAogICAgICAgIEF0dHJpYnV0ZUlEID0+ICRQYXJhbXtBdHRyaWJ1dGVJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISRBdHRyaWJ1dGVOYW1lICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQXR0cmlidXRlSUQgJFBhcmFte0F0dHJpYnV0ZUlEfSBkb2VzIG5vdCBleGlzdCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IHRoZSBmaWVsZCB0eXBlIGNvbmZpZyBmb3IgdGhlIGdpdmVuIG9iamVjdAogICAgbXkgJENvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCggJE9iamVjdE5hbWUgLiAnOjpBdHRyaWJ1dGU6OkNvbXBhcmVWYWx1ZTo6RmllbGRUeXBlJyApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIHJldHVybiBpZiAhJENvbmZpZzsKCiAgICAjIHJlbW92ZSB0aGUgbmFtZSBwYXJ0IG9mIHRoZSBkeW5hbWljIGZpZWxkIGFuZCByZXBsYWNlIG9ubHkgd2l0aCB0aGUgc3RyaW5nICJEeW5hbWljRmllbGQiCiAgICAkQXR0cmlidXRlTmFtZSA9fiBzeyBcQSBEeW5hbWljRmllbGRfIChcdyspIH17RHluYW1pY0ZpZWxkfXhtczsKCiAgICAjIGdldCB0aGUgZmllbGQgdHlwZSBmb3IgdGhlIGdpdmVuIGF0dHJpYnV0ZSBvciByZXR1cm4gdGhlIGRlZmF1bHQgZmllbGQgdHlwZSAnU2VsZWN0aW9uJwogICAgbXkgJEZpZWxkVHlwZSA9ICRDb25maWctPnskQXR0cmlidXRlTmFtZX0gfHwgJ1NlbGVjdGlvbic7CgogICAgcmV0dXJuICRGaWVsZFR5cGU7Cn0KCj1pdGVtIENvbmRpdGlvbkxpc3RCeU9iamVjdFR5cGUoKQoKUmV0dXJuIGEgbGlzdCBvZiBhbGwgY29uZGl0aW9ucyBpZHMgb2YgYSBnaXZlbiBjaGFuZ2UgaWQgYXMgYXJyYXkgcmVmZXJlbmNlLgpPbmx5IHRoZSBpZHMgb2YgYSBjb25kaXRpb24gYXJlIHJldHVybmVkIHdoZXJlIG9iamVjdCB0eXBlIGFuZCBpZGVudGlmaWVyIGFyZSBtYXRjaGluZy4KCiAgICBteSAkQ29uZGl0aW9uSURzUmVmID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uTGlzdEJ5T2JqZWN0VHlwZSgKICAgICAgICBPYmplY3RUeXBlID0+ICdJVFNNV29ya09yZGVyJwogICAgICAgIFNlbGVjdG9yICAgPT4gMTIzNCwKICAgICAgICBDaGFuZ2VJRCAgID0+IDUsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBDb25kaXRpb25MaXN0QnlPYmplY3RUeXBlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdFR5cGUgU2VsZWN0b3IgQ2hhbmdlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjb25kaXRpb25zIG9mIGNoYW5nZQogICAgbXkgJENoYW5nZUNvbmRpdGlvbnMgPSAkU2VsZi0+Q29uZGl0aW9uTGlzdCgKICAgICAgICBDaGFuZ2VJRCA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIFZhbGlkICAgID0+IDAsCiAgICApOwoKICAgICMgY2hlY2sgY29uZGl0aW9ucwogICAgcmV0dXJuIGlmICEkQ2hhbmdlQ29uZGl0aW9uczsKCiAgICAjIGdldCBleHByZXNzaW9ucyBvZiBjb25kaXRpb25zCiAgICBteSAlQ29uZGl0aW9uRXhwcmVzc2lvbiA9IG1hcCB7CiAgICAgICAgJF8gPT4gJFNlbGYtPkV4cHJlc3Npb25MaXN0KAogICAgICAgICAgICBDb25kaXRpb25JRCA9PiAkXywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKSB8fCBbXQogICAgfSBAeyRDaGFuZ2VDb25kaXRpb25zfTsKCiAgICAjIGdldCBhY3Rpb25zIG9mIGNvbmRpdGlvbnMKICAgIG15ICVDb25kaXRpb25BY3Rpb24gPSBtYXAgewogICAgICAgICRfID0+ICRTZWxmLT5BY3Rpb25MaXN0KAogICAgICAgICAgICBDb25kaXRpb25JRCA9PiAkXywKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKSB8fCBbXQogICAgfSBAeyRDaGFuZ2VDb25kaXRpb25zfTsKCiAgICAjIGdldCBvYmplY3QgaWQgb2Ygb2JqZWN0IHR5cGUKICAgIG15ICRPYmplY3RJRCA9ICRTZWxmLT5PYmplY3RMb29rdXAoCiAgICAgICAgTmFtZSAgID0+ICRQYXJhbXtPYmplY3RUeXBlfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgb2JqZWN0IGlkCiAgICByZXR1cm4gaWYgISRPYmplY3RJRDsKCiAgICAjIGdldCBvbmx5IGFmZmVjdGVkIHVuaXF1ZSBjb25kaXRpb24gaWQKICAgIG15IEBBZmZlY3RlZENvbmRpdGlvbklEczsKICAgIENPTkRJVElPTklEOgogICAgZm9yIG15ICRDb25kaXRpb25JRCAoIHNvcnQga2V5cyAlQ29uZGl0aW9uRXhwcmVzc2lvbiApIHsKCiAgICAgICAgIyBjaGVjayBleHByZXNzaW9uIGZvciB0aGlzIHdvcmtvcmRlcgogICAgICAgIEVYUFJFU1NJT05JRDoKICAgICAgICBmb3IgbXkgJEV4cHJlc3Npb25JRCAoIEB7ICRDb25kaXRpb25FeHByZXNzaW9ueyRDb25kaXRpb25JRH0gfSApIHsKCiAgICAgICAgICAgICMgZ2V0IGV4cHJlc3Npb24KICAgICAgICAgICAgbXkgJEV4cHJlc3Npb24gPSAkU2VsZi0+RXhwcmVzc2lvbkdldCgKICAgICAgICAgICAgICAgIEV4cHJlc3Npb25JRCA9PiAkRXhwcmVzc2lvbklELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayBleHByZXNzaW9uCiAgICAgICAgICAgIG5leHQgRVhQUkVTU0lPTklEIGlmICEkRXhwcmVzc2lvbjsKCiAgICAgICAgICAgICMgY2hlY2sgZm9yIHNlbGVjdG9yCiAgICAgICAgICAgIG5leHQgRVhQUkVTU0lPTklEIGlmICRFeHByZXNzaW9uLT57U2VsZWN0b3J9IG5lICRQYXJhbXtTZWxlY3Rvcn07CgogICAgICAgICAgICAjIGNoZWNrIGZvciBvYmplY3QgdHlwZQogICAgICAgICAgICBuZXh0IEVYUFJFU1NJT05JRCBpZiAkRXhwcmVzc2lvbi0+e09iamVjdElEfSBuZSAkT2JqZWN0SUQ7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHRoaXMgY29uZGl0aW9ucyBpcyBhbHJlYWR5IG9uIHN0YWNrCiAgICAgICAgICAgIGlmICggIWdyZXAgeyAkXyBlcSAkQ29uZGl0aW9uSUQgfSBAQWZmZWN0ZWRDb25kaXRpb25JRHMgKSB7CgogICAgICAgICAgICAgICAgIyB0aGlzIGV4cHJlc3Npb24gaXMgdmFsaWQKICAgICAgICAgICAgICAgIHB1c2ggQEFmZmVjdGVkQ29uZGl0aW9uSURzLCAkQ29uZGl0aW9uSUQ7CgogICAgICAgICAgICAgICAgIyBqdW1wIHRvIG5leHQgY29uZGl0aW9uCiAgICAgICAgICAgICAgICBuZXh0IENPTkRJVElPTklEOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIENPTkRJVElPTklEOgogICAgZm9yIG15ICRDb25kaXRpb25JRCAoIHNvcnQga2V5cyAlQ29uZGl0aW9uQWN0aW9uICkgewoKICAgICAgICAjIGNoZWNrIGFjdGlvbiBmb3IgdGhpcyB3b3Jrb3JkZXIKICAgICAgICBBQ1RJT05JRDoKICAgICAgICBmb3IgbXkgJEFjdGlvbklEICggQHsgJENvbmRpdGlvbkFjdGlvbnskQ29uZGl0aW9uSUR9IH0gKSB7CgogICAgICAgICAgICAjIGdldCBhY3Rpb24KICAgICAgICAgICAgbXkgJEFjdGlvbiA9ICRTZWxmLT5BY3Rpb25HZXQoCiAgICAgICAgICAgICAgICBBY3Rpb25JRCA9PiAkQWN0aW9uSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgZXhwcmVzc2lvbgogICAgICAgICAgICBuZXh0IEFDVElPTklEIGlmICEkQWN0aW9uOwoKICAgICAgICAgICAgIyBjaGVjayBmb3Igc2VsZWN0b3IKICAgICAgICAgICAgbmV4dCBBQ1RJT05JRCBpZiAkQWN0aW9uLT57U2VsZWN0b3J9IG5lICRQYXJhbXtTZWxlY3Rvcn07CgogICAgICAgICAgICAjIGNoZWNrIGZvciBvYmplY3QgdHlwZQogICAgICAgICAgICBuZXh0IEFDVElPTklEIGlmICRBY3Rpb24tPntPYmplY3RJRH0gbmUgJE9iamVjdElEOwoKICAgICAgICAgICAgIyBjaGVjayBpZiB0aGlzIGNvbmRpdGlvbnMgaXMgYWxyZWFkeSBvbiBzdGFjawogICAgICAgICAgICBpZiAoICFncmVwIHsgJF8gZXEgJENvbmRpdGlvbklEIH0gQEFmZmVjdGVkQ29uZGl0aW9uSURzICkgewoKICAgICAgICAgICAgICAgICMgdGhpcyBleHByZXNzaW9uIGlzIHZhbGlkCiAgICAgICAgICAgICAgICBwdXNoIEBBZmZlY3RlZENvbmRpdGlvbklEcywgJENvbmRpdGlvbklEOwoKICAgICAgICAgICAgICAgICMganVtcCB0byBuZXh0IGNvbmRpdGlvbgogICAgICAgICAgICAgICAgbmV4dCBDT05ESVRJT05JRDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXEBBZmZlY3RlZENvbmRpdGlvbklEczsKfQoKPWJlZ2luIEludGVybmFsOgoKPWl0ZW0gX0NvbmRpdGlvbk1hdGNoKCkKClRoaXMgZnVuY3Rpb24gbWF0Y2hlcyB0aGUgZ2l2ZW4gY29uZGl0aW9uIGFuZCBleGVjdXRlcyAnbm8nIGFjdGlvbnMuClRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgJ0F0dHJpYnV0ZXNDaGFuZ2VkJyBkZWZpbmVzIGEgbGlzdCBvZiBhdHRyaWJ1dGVzIHRoYXQgd2VyZSBjaGFuZ2VkCmR1cmluZyBlLmcuIGEgQ2hhbmdlVXBkYXRlLUV2ZW50LiBJZiBhIGNvbmRpdGlvbiBtYXRjaGVzIGFuIGV4cHJlc3Npb24sIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIGV4cHJlc3Npb24KbXVzdCBiZSBsaXN0ZWQgaW4gJ0F0dHJpYnV0ZXNDaGFuZ2VkJy4KCiAgICBteSAkU3VjY2VzcyA9ICRDb25kaXRpb25PYmplY3QtPl9Db25kaXRpb25NYXRjaCgKICAgICAgICBDb25kaXRpb25JRCAgICAgICA9PiAxMjMsCiAgICAgICAgQXR0cmlidXRlc0NoYW5nZWQgPT4geyBJVFNNQ2hhbmdlID0+IFsgQ2hhbmdlVGl0bGUsIENoYW5nZURlc2NyaXB0aW9uXSB9LCAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgX0NvbmRpdGlvbk1hdGNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENvbmRpdGlvbklEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgY29uZGl0aW9uIGRhdGEKICAgIG15ICRDb25kaXRpb25EYXRhID0gJFNlbGYtPkNvbmRpdGlvbkdldCgKICAgICAgICBDb25kaXRpb25JRCA9PiAkUGFyYW17Q29uZGl0aW9uSUR9LAogICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGVycm9yCiAgICByZXR1cm4gaWYgISRDb25kaXRpb25EYXRhOwoKICAgICMgZ2V0IGFsbCBleHByZXNzaW9ucyBmb3IgdGhlIGdpdmVuIGNvbmRpdGlvbiBpZAogICAgbXkgJEV4cHJlc3Npb25JRHNSZWYgPSAkU2VsZi0+RXhwcmVzc2lvbkxpc3QoCiAgICAgICAgQ29uZGl0aW9uSUQgPT4gJFBhcmFte0NvbmRpdGlvbklEfSwKICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBlcnJvcnMKICAgIHJldHVybiBpZiAhJEV4cHJlc3Npb25JRHNSZWY7CiAgICByZXR1cm4gaWYgcmVmICRFeHByZXNzaW9uSURzUmVmIG5lICdBUlJBWSc7CgogICAgIyBubyBlcnJvciBpZiBqdXN0IG5vIGV4cHJlc3Npb25zIHdlcmUgZm91bmQKICAgIHJldHVybiAwIGlmICFAeyRFeHByZXNzaW9uSURzUmVmfTsKCiAgICAjIGNvdW50IHRoZSBudW1iZXIgb2YgZXhwcmVzc2lvbiBpZHMKICAgIG15ICRFeHByZXNzaW9uSURDb3VudCA9IHNjYWxhciBAeyRFeHByZXNzaW9uSURzUmVmfTsKCiAgICAjIHRvIHN0b3JlIHRoZSBudW1iZXIgb2YgcG9zaXRpdmUgKHRydWUpIGV4cHJlc3Npb25zCiAgICBteSBARXhwcmVzc2lvbk1hdGNoUmVzdWx0OwoKICAgICMgdG8gc3RvcmUgaWYgdGhlIGNvbmRpdGlvbiBtYXRjaGVzCiAgICBteSAkQ29uZGl0aW9uTWF0Y2g7CgogICAgIyB0cnkgdG8gbWF0Y2ggZWFjaCBleHByZXNzaW9uCiAgICBFWFBSRVNTSU9OSUQ6CiAgICBmb3IgbXkgJEV4cHJlc3Npb25JRCAoIEB7JEV4cHJlc3Npb25JRHNSZWZ9ICkgewoKICAgICAgICAjIG5vcm1hbGx5IGdpdmUgdGhlIGxpc3Qgb2YgY2hhbmdlZCBhdHRyaWJ1dGVzIHRvIEV4cHJlc3Npb25NYXRjaCgpIGZ1bmN0aW9uCiAgICAgICAgbXkgJEF0dHJpYnV0ZXNDaGFuZ2VkID0gJFBhcmFte0F0dHJpYnV0ZXNDaGFuZ2VkfTsKCiAgICAgICAgIyBleHByZXNzaW9uIGNvbmp1bmN0aW9uIGlzICdhbGwnIGFuZCB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGV4cHJlc2lvbgogICAgICAgIGlmICggJENvbmRpdGlvbkRhdGEtPntFeHByZXNzaW9uQ29uanVuY3Rpb259IGVxICdhbGwnICYmICRFeHByZXNzaW9uSURDb3VudCA+IDEgKSB7CgogICAgICAgICAgICAjIGRvIG5vdCBnaXZlIHRoZSBsaXN0IG9mIGNoYW5nZWQgYXR0cmlidXRlcyB0byBFeHByZXNzaW9uTWF0Y2goKQogICAgICAgICAgICAkQXR0cmlidXRlc0NoYW5nZWQgPSB1bmRlZjsKICAgICAgICB9CgogICAgICAgICMgbWF0Y2ggZXhwcmVzc2lvbgogICAgICAgIG15ICRFeHByZXNzaW9uTWF0Y2ggPSAkU2VsZi0+RXhwcmVzc2lvbk1hdGNoKAogICAgICAgICAgICBFeHByZXNzaW9uSUQgICAgICA9PiAkRXhwcmVzc2lvbklELAogICAgICAgICAgICBBdHRyaWJ1dGVzQ2hhbmdlZCA9PiAkQXR0cmlidXRlc0NoYW5nZWQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICkgfHwgMDsKCiAgICAgICAgIyBzZXQgQ29uZGl0aW9uTWF0Y2ggdHJ1ZSBpZiBFeHByZXNzaW9uTWF0Y2ggaXMgdHJ1ZSBhbmQgJ2FueScgaXMgcmVxdWVzdGVkCiAgICAgICAgaWYgKCAkQ29uZGl0aW9uRGF0YS0+e0V4cHJlc3Npb25Db25qdW5jdGlvbn0gZXEgJ2FueScgJiYgJEV4cHJlc3Npb25NYXRjaCApIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQoKICAgICAgICAjIGNvbmRpdGlvbiBpcyBmYWxzZSBhdCBhbGwsIHNvIHJldHVybiB0cnVlCiAgICAgICAgaWYgKCAkQ29uZGl0aW9uRGF0YS0+e0V4cHJlc3Npb25Db25qdW5jdGlvbn0gZXEgJ2FsbCcgJiYgISRFeHByZXNzaW9uTWF0Y2ggKSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICAgICAgIyBzYXZlIGN1cnJlbnQgZXhwcmVzc2lvbiBtYXRjaCByZXN1bHQgZm9yIGxhdGVyIGNoZWNrcwogICAgICAgIHB1c2ggQEV4cHJlc3Npb25NYXRjaFJlc3VsdCwgJEV4cHJlc3Npb25NYXRjaDsKICAgIH0KCiAgICAjIGNvdW50IGFsbCByZXN1bHRzIHdoaWNoIGhhdmUgYSB0cnVlIHZhbHVlCiAgICBteSAkVHJ1ZUNvdW50ID0gc2NhbGFyIGdyZXAgeyAkXyA9PSAxIH0gQEV4cHJlc3Npb25NYXRjaFJlc3VsdDsKCiAgICAjIGlmIHRoZSBjb25kaXRpb24gZGlkIG5vdCBtYXRjaCBhbHJlYWR5LCBhbmQgbm90IGFsbCBleHByZXNzaW9ucyBhcmUgdHJ1ZQogICAgaWYgKCAhJENvbmRpdGlvbk1hdGNoICYmICRUcnVlQ291bnQgIT0gJEV4cHJlc3Npb25JRENvdW50ICkgewoKICAgICAgICAjIG5vdCBhbGwgZXhwcmVzc2lvbnMgaGF2ZSBtYXRjaGVkCiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9Db25kaXRpb25MaXN0QnlPYmplY3QoKQoKcmV0dXJuIGEgbGlzdCBvZiBhbGwgY29uZGl0aW9ucyBpZHMgb2YgYSBnaXZlbiBvYmplY3QuCgogICAgbXkgJENvbmRpdGlvbklEc1JlZiA9ICRDb25kaXRpb25PYmplY3QtPl9Db25kaXRpb25MaXN0QnlPYmplY3QoCiAgICAgICAgT2JqZWN0TmFtZSA9PiAnSVRTTUNoYW5nZScKICAgICAgICBTZWxlY3RvciAgID0+IDEyMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIF9Db25kaXRpb25MaXN0QnlPYmplY3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoT2JqZWN0TmFtZSBTZWxlY3RvciBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGNoYW5nZSBpZAogICAgbXkgJENoYW5nZUlEOwoKICAgIGlmICggJFBhcmFte09iamVjdE5hbWV9IGVxICdJVFNNQ2hhbmdlJyApIHsKCiAgICAgICAgIyBzZWxlY3RvciBpcyBuZWVkZWQgY2hhbmdlIGlkCiAgICAgICAgJENoYW5nZUlEID0gJFBhcmFte1NlbGVjdG9yfTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte09iamVjdE5hbWV9IGVxICdJVFNNV29ya09yZGVyJyApIHsKCiAgICAgICAgIyBnZXQgb2JqZWN0IGJhY2tlbmQKICAgICAgICBteSAkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uOjpPYmplY3Q6OklUU01Xb3JrT3JkZXInKTsKCiAgICAgICAgIyBjaGVjayBmb3IgZXJyb3IKICAgICAgICByZXR1cm4gaWYgISRCYWNrZW5kT2JqZWN0OwoKICAgICAgICAjIGRlZmluZSBkZWZhdWx0IGZ1bmN0aW9ucyBmb3IgYmFja2VuZAogICAgICAgIG15ICRTdWIgPSAnRGF0YUdldCc7CgogICAgICAgICMgY2hlY2sgZm9yIGF2YWlsYWJsZSBmdW5jdGlvbgogICAgICAgIGlmICggISRCYWNrZW5kT2JqZWN0LT5jYW4oJFN1YikgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBmdW5jdGlvbiAnJFN1YicgYXZhaWxhYmxlIGZvciBiYWNrZW5kICckUGFyYW17T2JqZWN0TmFtZX0nISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgZXhlY3V0ZSB0aGUgc3Vicm91dGluZQogICAgICAgIG15ICRXb3JrT3JkZXIgPSAkQmFja2VuZE9iamVjdC0+JFN1YigKICAgICAgICAgICAgU2VsZWN0b3IgPT4gJFBhcmFte1NlbGVjdG9yfSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKSB8fCB7fTsKCiAgICAgICAgcmV0dXJuIGlmICEkV29ya09yZGVyOwoKICAgICAgICAjIGdldCBjaGFuZ2UgaWQKICAgICAgICAkQ2hhbmdlSUQgPSAkV29ya09yZGVyLT5bMF0tPntDaGFuZ2VJRH07CiAgICB9CgogICAgIyBjaGVjayBjaGFuZ2UgaWQKICAgIHJldHVybiBpZiAhJENoYW5nZUlEOwoKICAgICMgZ2V0IGNvbmRpdGlvbnMgZm9yIHRoaXMgY2hhbmdlCiAgICBteSAkQ29uZGl0aW9ucyA9ICRTZWxmLT5Db25kaXRpb25MaXN0KAogICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuICRDb25kaXRpb25zOwp9CgoxOwoKPWVuZCBJbnRlcm5hbDoKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Okhpc3Rvcnk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SGlzdG9yeSAtIGFsbCBjaGFuZ2UgYW5kIHdvcmtvcmRlciBoaXN0b3J5IGZ1bmN0aW9ucwoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgaGlzdG9yeSBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRIaXN0b3J5T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Okhpc3RvcnknKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgdGhlIGNhY2hlIHR5cGUgYW5kIFRUTCAoaW4gc2Vjb25kcykKICAgICRTZWxmLT57Q2FjaGVUeXBlfSA9ICdJVFNNQ2hhbmdlTWFuYWdlbWVudCc7CiAgICAkU2VsZi0+e0NhY2hlVFRMfSAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0lUU01DaGFuZ2U6OkNhY2hlVFRMJykgKiA2MDsKCiAgICAjIHNldCBkZWZhdWx0IGRlYnVnIGZsYWcKICAgICRTZWxmLT57RGVidWd9IHx8PSAwOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gSGlzdG9yeUFkZCgpCgpBZGRzIGEgc2luZ2xlIGhpc3RvcnkgZW50cnkgdG8gdGhlIGhpc3RvcnkuIFJldHVybnMgMSBvbiBzdWNjZXNzLCBDPHVuZGVmPiBvdGhlcndpc2UuCgogICAgbXkgJFN1Y2Nlc3MgPSAkSGlzdG9yeU9iamVjdC0+SGlzdG9yeUFkZCgKICAgICAgICBDaGFuZ2VJRCAgICAgID0+IDEyMzQsICAgICAgICAgICAgICAgICAgICAgIyBlaXRoZXIgQ2hhbmdlSUQgb3IgV29ya09yZGVySUQgaXMgbmVlZGVkCiAgICAgICAgV29ya09yZGVySUQgICA9PiAxMjMsICAgICAgICAgICAgICAgICAgICAgICMgZWl0aGVyIENoYW5nZUlEIG9yIFdvcmtPcmRlcklEIGlzIG5lZWRlZAogICAgICAgIEhpc3RvcnlUeXBlICAgPT4gJ1dvcmtPcmRlckFkZCcsICAgICAgICAgICAjIGVpdGhlciBIaXN0b3J5VHlwZSBvciBIaXN0b3J5VHlwZUlEIGlzIG5lZWRlZAogICAgICAgIEhpc3RvcnlUeXBlSUQgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAjIGVpdGhlciBIaXN0b3J5VHlwZSBvciBIaXN0b3J5VHlwZUlEIGlzIG5lZWRlZAogICAgICAgIEZpZWxkbmFtZSAgICAgPT4gJ0p1c3RpZmljYXRpb24nLCAgICAgICAgICAjIG9wdGlvbmFsCiAgICAgICAgQ29udGVudE5ldyAgICA9PiAnQW55IHVzZWZ1bCBpbmZvcm1hdGlvbicsICMgb3B0aW9uYWwKICAgICAgICBDb250ZW50T2xkICAgID0+ICdPbGQgdmFsdWUgb2YgZmllbGQnLCAgICAgIyBvcHRpb25hbAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgSGlzdG9yeUFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICAjIENoYW5nZUlEIGlzIGFsd2F5cyBuZWVkZWQsIHdvcmtvcmRlciBpZCBpcyBvbmx5IG5lZWRlZCBmb3Igd29ya29yZGVyIGV2ZW50cwogICAgZm9yIG15ICROZWVkZWQgKHF3KFVzZXJJRCBDaGFuZ2VJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGVpdGhlciBIaXN0b3J5VHlwZSBvciBIaXN0b3J5VHlwZUlEIGlzIG5lZWRlZAogICAgaWYgKCAhKCAkUGFyYW17SGlzdG9yeVR5cGV9IHx8ICRQYXJhbXtIaXN0b3J5VHlwZUlEfSApICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBIaXN0b3J5VHlwZSBvciBIaXN0b3J5VHlwZUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgaGlzdG9yeSB0eXBlIGlkIGZyb20gaGlzdG9yeSB0eXBlIGlmIGhpc3RvcnkgdHlwZSBpcyBnaXZlbgogICAgaWYgKCAkUGFyYW17SGlzdG9yeVR5cGV9ICkgewoKICAgICAgICAjIGxvb2t1cCB0aGUgaGlzdG9yeSB0eXBlIGlkCiAgICAgICAgbXkgJElEID0gJFNlbGYtPkhpc3RvcnlUeXBlTG9va3VwKAogICAgICAgICAgICBIaXN0b3J5VHlwZSA9PiAkUGFyYW17SGlzdG9yeVR5cGV9LAogICAgICAgICk7CgogICAgICAgICMgbm8gdmFsaWQgaGlzdG9yeSB0eXBlIGdpdmVuCiAgICAgICAgaWYgKCAhJElEICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiSW52YWxpZCBoaXN0b3J5IHR5cGUgJyRQYXJhbXtIaXN0b3J5VHlwZX0nIGdpdmVuISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRQYXJhbXtIaXN0b3J5VHlwZUlEfSA9ICRJRDsKICAgIH0KCiAgICAjIGNvbnZlcnQgYXJyYXkgcGFyYW1zCiAgICBDT05URU5UOgogICAgZm9yIG15ICRDb250ZW50IChxdyhDb250ZW50TmV3IENvbnRlbnRPbGQpKSB7CiAgICAgICAgbmV4dCBDT05URU5UIGlmIHJlZiAkUGFyYW17JENvbnRlbnR9IG5lICdBUlJBWSc7CiAgICAgICAgJFBhcmFteyRDb250ZW50fSA9IGpvaW4gJywgJywgQHsgJFBhcmFteyRDb250ZW50fSB9OwogICAgfQoKICAgICMgaW5zZXJ0IGhpc3RvcnkgZW50cnkKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gY2hhbmdlX2hpc3RvcnkgKCBjaGFuZ2VfaWQsIHdvcmtvcmRlcl9pZCwgY29udGVudF9uZXcsICcKICAgICAgICAgICAgLiAnY29udGVudF9vbGQsIGNyZWF0ZV9ieSwgY3JlYXRlX3RpbWUsIHR5cGVfaWQsIGZpZWxkbmFtZSApICcKICAgICAgICAgICAgLiAnVkFMVUVTICggPywgPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sID8gKScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgICAgICBcJFBhcmFte1dvcmtPcmRlcklEfSwKICAgICAgICAgICAgXCRQYXJhbXtDb250ZW50TmV3fSwKICAgICAgICAgICAgXCRQYXJhbXtDb250ZW50T2xkfSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBcJFBhcmFte0hpc3RvcnlUeXBlSUR9LAogICAgICAgICAgICBcJFBhcmFte0ZpZWxkbmFtZX0sCiAgICAgICAgXSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIEhpc3RvcnlBZGRNdWx0aXBsZSgpCgpBZGRzIG11bHRpcGxlIGhpc3RvcnkgZW50cmllcyB0byB0aGUgaGlzdG9yeS4gUmV0dXJucyAxIG9uIHN1Y2Nlc3MsIEM8dW5kZWY+IG90aGVyd2lzZS4KCiAgICBteSAkU3VjY2VzcyA9ICRIaXN0b3J5T2JqZWN0LT5IaXN0b3J5QWRkTXVsdGlwbGUoCiAgICAgICAgRGF0YSA9PiBcQEhpc3RvcnlBZGREYXRhLAogICAgKTsKCj1jdXQKCnN1YiBIaXN0b3J5QWRkTXVsdGlwbGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0RhdGF9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBEYXRhISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggcmVmICRQYXJhbXtEYXRhfSBuZSAnQVJSQVknICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiRGF0YSBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICFAeyAkUGFyYW17RGF0YX0gfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkRhdGEgYXJyYXkgbXVzdCBub3QgYmUgZW1wdHkhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRlZmluZSBkYXRhYmFzZSBzcGVjaWZpYyBTUUwgZm9yIHRoZSBtdWx0aWxpbmUgaW5zZXJ0cwogICAgbXkgJURhdGFiYXNlU1FMOwoKICAgICMgbXlzcWwKICAgICREYXRhYmFzZVNRTHtteXNxbH0gPSB7CiAgICAgICAgU3RhcnQgPT4gJ0lOU0VSVCBJTlRPIGNoYW5nZV9oaXN0b3J5ICggY2hhbmdlX2lkLCB3b3Jrb3JkZXJfaWQsIGNvbnRlbnRfbmV3LCAnCiAgICAgICAgICAgIC4gJ2NvbnRlbnRfb2xkLCBjcmVhdGVfYnksIGNyZWF0ZV90aW1lLCB0eXBlX2lkLCBmaWVsZG5hbWUgKSAnLAogICAgICAgIEZpcnN0TGluZSA9PiAnVkFMVUVTICggPywgPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sID8gKScsCiAgICAgICAgTmV4dExpbmUgID0+ICcsICggPywgPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sID8gKSAnLAogICAgICAgIEVuZCAgICAgICA9PiAnJywKICAgIH07CgogICAgIyBwb3N0Z3JlcyA4LjIgYW5kIG5ld2VyIChzYW1lIFNRTCBjb2RlIGFzIGZvciBteXNxbCkKICAgICREYXRhYmFzZVNRTHtwb3N0Z3Jlc30gPSAkRGF0YWJhc2VTUUx7bXlzcWx9OwoKICAgICMgb3JhY2xlCiAgICAkRGF0YWJhc2VTUUx7b3JhY2xlfSA9IHsKICAgICAgICBTdGFydCAgICAgPT4gJ0lOU0VSVCBBTEwgJywKICAgICAgICBGaXJzdExpbmUgPT4gJ0lOVE8gY2hhbmdlX2hpc3RvcnkgKCBjaGFuZ2VfaWQsIHdvcmtvcmRlcl9pZCwgY29udGVudF9uZXcsICcKICAgICAgICAgICAgLiAnY29udGVudF9vbGQsIGNyZWF0ZV9ieSwgY3JlYXRlX3RpbWUsIHR5cGVfaWQsIGZpZWxkbmFtZSApICAnCiAgICAgICAgICAgIC4gJ1ZBTFVFUyAoID8sID8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCA/ICkgJywKICAgICAgICBOZXh0TGluZSA9PiAnSU5UTyBjaGFuZ2VfaGlzdG9yeSAoIGNoYW5nZV9pZCwgd29ya29yZGVyX2lkLCBjb250ZW50X25ldywgJwogICAgICAgICAgICAuICdjb250ZW50X29sZCwgY3JlYXRlX2J5LCBjcmVhdGVfdGltZSwgdHlwZV9pZCwgZmllbGRuYW1lICkgICcKICAgICAgICAgICAgLiAnVkFMVUVTICggPywgPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sID8gKSAnLAogICAgICAgIEVuZCA9PiAnU0VMRUNUICogRlJPTSBEVUFMJywKICAgIH07CgogICAgIyBnZXQgdGhlIGRhdGFiYXNlIHR5cGUKICAgIG15ICREQlR5cGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+R2V0RGF0YWJhc2VGdW5jdGlvbignVHlwZScpOwoKICAgICMgbWFrZSBtdWx0aWxpbmUgaW5zZXJ0cyBmb3IgZGVmaW5lZCBkYXRhYmFzZXMKICAgIGlmICggJERhdGFiYXNlU1FMeyREQlR5cGV9ICkgewoKICAgICAgICBteSAkU1FMID0gJyc7CiAgICAgICAgbXkgQEJpbmQ7CgogICAgICAgIEhJU1RPUllFTlRSWToKICAgICAgICBmb3IgbXkgJEhpc3RvcnlFbnRyeSAoIEB7ICRQYXJhbXtEYXRhfSB9ICkgewoKICAgICAgICAgICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgICAgICAgICAgIyBDaGFuZ2VJRCBpcyBhbHdheXMgbmVlZGVkLCB3b3Jrb3JkZXIgaWQgaXMgb25seSBuZWVkZWQgZm9yIHdvcmtvcmRlciBldmVudHMKICAgICAgICAgICAgZm9yIG15ICROZWVkZWQgKHF3KFVzZXJJRCBDaGFuZ2VJRCkpIHsKICAgICAgICAgICAgICAgIGlmICggISRIaXN0b3J5RW50cnktPnskTmVlZGVkfSApIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBISVNUT1JZRU5UUlk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZWl0aGVyIEhpc3RvcnlUeXBlIG9yIEhpc3RvcnlUeXBlSUQgaXMgbmVlZGVkCiAgICAgICAgICAgIGlmICggISggJEhpc3RvcnlFbnRyeS0+e0hpc3RvcnlUeXBlfSB8fCAkSGlzdG9yeUVudHJ5LT57SGlzdG9yeVR5cGVJRH0gKSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSGlzdG9yeVR5cGUgb3IgSGlzdG9yeVR5cGVJRCEnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG5leHQgSElTVE9SWUVOVFJZOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCBoaXN0b3J5IHR5cGUgaWQgZnJvbSBoaXN0b3J5IHR5cGUgaWYgaGlzdG9yeSB0eXBlIGlzIGdpdmVuCiAgICAgICAgICAgIGlmICggJEhpc3RvcnlFbnRyeS0+e0hpc3RvcnlUeXBlfSApIHsKCiAgICAgICAgICAgICAgICAjIGxvb2t1cCB0aGUgaGlzdG9yeSB0eXBlIGlkCiAgICAgICAgICAgICAgICBteSAkSUQgPSAkU2VsZi0+SGlzdG9yeVR5cGVMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgPT4gJEhpc3RvcnlFbnRyeS0+e0hpc3RvcnlUeXBlfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBubyB2YWxpZCBoaXN0b3J5IHR5cGUgZ2l2ZW4KICAgICAgICAgICAgICAgIGlmICggISRJRCApIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkludmFsaWQgaGlzdG9yeSB0eXBlICckSGlzdG9yeUVudHJ5LT57SGlzdG9yeVR5cGV9JyBnaXZlbiEiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBISVNUT1JZRU5UUlk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJEhpc3RvcnlFbnRyeS0+e0hpc3RvcnlUeXBlSUR9ID0gJElEOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG5vdyB0aGUgaGlzdG9yeSBlbnRyeSBpcyB2YWxpZGF0ZWQgYW5kIGNhbiBiZSBhZGRlZCB0byBzcWwKICAgICAgICAgICAgaWYgKCAhJFNRTCApIHsKICAgICAgICAgICAgICAgICRTUUwgPSAkRGF0YWJhc2VTUUx7JERCVHlwZX0tPntTdGFydH0gLiAkRGF0YWJhc2VTUUx7JERCVHlwZX0tPntGaXJzdExpbmV9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNRTCAuPSAkRGF0YWJhc2VTUUx7JERCVHlwZX0tPntOZXh0TGluZX07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY29udmVydCBhcnJheSBwYXJhbXMKICAgICAgICAgICAgQ09OVEVOVDoKICAgICAgICAgICAgZm9yIG15ICRDb250ZW50IChxdyhDb250ZW50TmV3IENvbnRlbnRPbGQpKSB7CiAgICAgICAgICAgICAgICBuZXh0IENPTlRFTlQgaWYgcmVmICRIaXN0b3J5RW50cnktPnskQ29udGVudH0gbmUgJ0FSUkFZJzsKICAgICAgICAgICAgICAgICRIaXN0b3J5RW50cnktPnskQ29udGVudH0gPSBqb2luICcsICcsIEB7ICRIaXN0b3J5RW50cnktPnskQ29udGVudH0gfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHVzaCBAQmluZCwgKAogICAgICAgICAgICAgICAgXCRIaXN0b3J5RW50cnktPntDaGFuZ2VJRH0sCiAgICAgICAgICAgICAgICBcJEhpc3RvcnlFbnRyeS0+e1dvcmtPcmRlcklEfSwKICAgICAgICAgICAgICAgIFwkSGlzdG9yeUVudHJ5LT57Q29udGVudE5ld30sCiAgICAgICAgICAgICAgICBcJEhpc3RvcnlFbnRyeS0+e0NvbnRlbnRPbGR9LAogICAgICAgICAgICAgICAgXCRIaXN0b3J5RW50cnktPntVc2VySUR9LAogICAgICAgICAgICAgICAgXCRIaXN0b3J5RW50cnktPntIaXN0b3J5VHlwZUlEfSwKICAgICAgICAgICAgICAgIFwkSGlzdG9yeUVudHJ5LT57RmllbGRuYW1lfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgdGhlIGxlbmd0aCBvZiB0aGUgU1FMIHN0cmluZwogICAgICAgICAgICAjIChzb21lIGRhdGFiYXNlcyBvbmx5IGFjY2VwdCBTUUwgc3RyaW5ncyB1cCB0byA0aywKICAgICAgICAgICAgIyBzbyB3ZSB3YW50IHRvIHN0YXkgc2FmZSBoZXJlIHdpdGgganVzdCAzNTAwIGJ5dGVzKQogICAgICAgICAgICBpZiAoIGxlbmd0aCAkU1FMID4gMzUwMCApIHsKCiAgICAgICAgICAgICAgICAjIGFkZCB0aGUgZW5kIGxpbmUgdG8gc3FsIHN0cmluZwogICAgICAgICAgICAgICAgJFNRTCAuPSAkRGF0YWJhc2VTUUx7JERCVHlwZX0tPntFbmR9OwoKICAgICAgICAgICAgICAgICMgaW5zZXJ0IG11bHRpcGxlIGhpc3RvcnkgZW50cmllcwogICAgICAgICAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgICAgICAgICAgU1FMICA9PiAkU1FMLAogICAgICAgICAgICAgICAgICAgIEJpbmQgPT4gXEBCaW5kLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlc2V0IHRoZSBTUUwgc3RyaW5nIGFuZCB0aGUgQmluZCBhcnJheQogICAgICAgICAgICAgICAgJFNRTCAgPSAnJzsKICAgICAgICAgICAgICAgIEBCaW5kID0gKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgaWYgdGhlcmUgaXMgc29tZSBTUUwgbGVmdCB0byBleGVjdXRlCiAgICAgICAgaWYgKCRTUUwpIHsKCiAgICAgICAgICAgICMgYWRkIHRoZSBlbmQgbGluZSB0byBzcWwgc3RyaW5nCiAgICAgICAgICAgICRTUUwgLj0gJERhdGFiYXNlU1FMeyREQlR5cGV9LT57RW5kfTsKCiAgICAgICAgICAgICMgaW5zZXJ0IG11bHRpcGxlIGhpc3RvcnkgZW50cmllcwogICAgICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICAgICAgICAgIEJpbmQgPT4gXEBCaW5kLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRhdGFiYXNlIHN1cHBvcnRzIG5vIG11bHRpbGluZSBpbnNlcnRzLCBzbyB3ZSBkbyBpdCBsaW5lIGJ5IGxpbmUKICAgIGVsc2UgewoKICAgICAgICBteSAkRXJyb3I7CiAgICAgICAgZm9yIG15ICRIaXN0b3J5RW50cnkgKCBAeyAkUGFyYW17RGF0YX0gfSApIHsKCiAgICAgICAgICAgICMgYWRkIGhpc3RvcnkgZW50cmllcyBvbmUgYnkgb25lIHdpdGggdGhlIEhpc3RvcnlBZGQgZnVuY3Rpb24KICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+SGlzdG9yeUFkZCgKICAgICAgICAgICAgICAgICV7JEhpc3RvcnlFbnRyeX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAgICAgJEVycm9yID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGlmICRFcnJvcjsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gV29ya09yZGVySGlzdG9yeUdldCgpCgpSZXR1cm5zIGEgbGlzdCBvZiBhbGwgaGlzdG9yeSBlbnRyaWVzIHRoYXQgYmVsb25nIHRvIHRoZSBnaXZlbiBXb3JrT3JkZXJJRC4gVGhlCmxpc3QgY29udGFpbnMgaGFzaCByZWZlcmVuY2VzIHdpdGggdGhlc2UgaW5mb3JtYXRpb246CgogICAgJEluZm97SGlzdG9yeUVudHJ5SUR9CiAgICAkSW5mb3tDaGFuZ2VJRH0KICAgICRJbmZve1dvcmtPcmRlcklEfQogICAgJEluZm97SGlzdG9yeVR5cGV9CiAgICAkSW5mb3tIaXN0b3J5VHlwZUlEfQogICAgJEluZm97RmllbGRuYW1lfQogICAgJEluZm97Q29udGVudE5ld30KICAgICRJbmZve0NvbnRlbnRPbGR9CiAgICAkSW5mb3tDcmVhdGVCeX0KICAgICRJbmZve0NyZWF0ZVRpbWV9CiAgICAkSW5mb3tVc2VySUR9CiAgICAkSW5mb3tVc2VyTG9naW59CiAgICAkSW5mb3tVc2VyTGFzdG5hbWV9CiAgICAkSW5mb3tVc2VyRmlyc3RuYW1lfQoKICAgIG15ICRIaXN0b3J5RW50cmllcyA9ICRIaXN0b3J5T2JqZWN0LT5Xb3JrT3JkZXJIaXN0b3J5R2V0KAogICAgICAgIFdvcmtPcmRlcklEID0+IDEyMywKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBXb3JrT3JkZXJIaXN0b3J5R2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBmb3IgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoV29ya09yZGVySUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEF0dHJpYnV0ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcnVuIHRoZSBzcWwgc3RhdGVtZW50IHRvIGdldCBoaXN0b3J5CiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGNoLmlkLCBjaGFuZ2VfaWQsIHdvcmtvcmRlcl9pZCwgY29udGVudF9uZXcsIGNvbnRlbnRfb2xkLCAnCiAgICAgICAgICAgIC4gJ2NoLmNyZWF0ZV9ieSwgY2guY3JlYXRlX3RpbWUsIHR5cGVfaWQsIGNodC5uYW1lLCBmaWVsZG5hbWUgJwogICAgICAgICAgICAuICdGUk9NIGNoYW5nZV9oaXN0b3J5IGNoLCBjaGFuZ2VfaGlzdG9yeV90eXBlIGNodCAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGNoLnR5cGVfaWQgPSBjaHQuaWQgJwogICAgICAgICAgICAuICdBTkQgd29ya29yZGVyX2lkID0gPyBPUkRFUiBCWSBjaC5jcmVhdGVfdGltZSwgY2guaWQnLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1dvcmtPcmRlcklEfSBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSBlbnRyaWVzIGFuZCBzYXZlIGluZm9ybWF0aW9uIGluIGFycmF5CiAgICBteSBASGlzdG9yeUVudHJpZXM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG15ICVIaXN0b3J5RW50cnkgPSAoCiAgICAgICAgICAgIEhpc3RvcnlFbnRyeUlEID0+ICRSb3dbMF0sCiAgICAgICAgICAgIENoYW5nZUlEICAgICAgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIFdvcmtPcmRlcklEICAgID0+ICRSb3dbMl0sCiAgICAgICAgICAgIENvbnRlbnROZXcgICAgID0+IGRlZmluZWQoICRSb3dbM10gKSA/ICRSb3dbM10gOiAnJywKICAgICAgICAgICAgQ29udGVudE9sZCAgICAgPT4gZGVmaW5lZCggJFJvd1s0XSApID8gJFJvd1s0XSA6ICcnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAkUm93WzVdLAogICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAkUm93WzZdLAogICAgICAgICAgICBIaXN0b3J5VHlwZUlEICA9PiAkUm93WzddLAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgICA9PiAkUm93WzhdLAogICAgICAgICAgICBGaWVsZG5hbWUgICAgICA9PiAkUm93WzldLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQEhpc3RvcnlFbnRyaWVzLCBcJUhpc3RvcnlFbnRyeTsKICAgIH0KCiAgICAjIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzZXIgd2hvIGNyZWF0ZWQgZW50cnkKICAgIGZvciBteSAkSGlzdG9yeUVudHJ5IChASGlzdG9yeUVudHJpZXMpIHsKCiAgICAgICAgIyBnZXQgdXNlciBuYW1lCiAgICAgICAgbXkgJVVzZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEID0+ICRIaXN0b3J5RW50cnktPntDcmVhdGVCeX0sCiAgICAgICAgICAgIENhY2hlICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgc2F2ZSB1c2VyIGluZm8gaW4gaGlzdG9yeSBlbnRyeQogICAgICAgIGlmICglVXNlcikgewogICAgICAgICAgICAkSGlzdG9yeUVudHJ5LT57VXNlcklEfSAgICAgICAgPSAkVXNlcntVc2VySUR9OwogICAgICAgICAgICAkSGlzdG9yeUVudHJ5LT57VXNlckxvZ2lufSAgICAgPSAkVXNlcntVc2VyTG9naW59OwogICAgICAgICAgICAkSGlzdG9yeUVudHJ5LT57VXNlckZpcnN0bmFtZX0gPSAkVXNlcntVc2VyRmlyc3RuYW1lfTsKICAgICAgICAgICAgJEhpc3RvcnlFbnRyeS0+e1VzZXJMYXN0bmFtZX0gID0gJFVzZXJ7VXNlckxhc3RuYW1lfTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFxASGlzdG9yeUVudHJpZXM7Cn0KCj1pdGVtIENoYW5nZUhpc3RvcnlHZXQoKQoKUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGhpc3RvcnkgZW50cmllcyB0aGF0IGJlbG9uZyB0byB0aGUgZ2l2ZW4gQ2hhbmdlSUQgLSBpbmNsdWRpbmcKaGlzdG9yeSBlbnRyaWVzIGZvciB3b3Jrb3JkZXJzLiBUaGUgbGlzdCBjb250YWlucyBoYXNoIHJlZmVyZW5jZXMgd2l0aCB0aGVzZSBpbmZvcm1hdGlvbjoKCiAgICAkSW5mb3tIaXN0b3J5RW50cnlJRH0KICAgICRJbmZve0NoYW5nZUlEfQogICAgJEluZm97V29ya09yZGVySUR9CiAgICAkSW5mb3tIaXN0b3J5VHlwZX0KICAgICRJbmZve0hpc3RvcnlUeXBlSUR9CiAgICAkSW5mb3tGaWVsZG5hbWV9CiAgICAkSW5mb3tDb250ZW50TmV3fQogICAgJEluZm97Q29udGVudE9sZH0KICAgICRJbmZve0NyZWF0ZUJ5fQogICAgJEluZm97Q3JlYXRlVGltZX0KICAgICRJbmZve1VzZXJJRH0KICAgICRJbmZve1VzZXJMb2dpbn0KICAgICRJbmZve1VzZXJMYXN0bmFtZX0KICAgICRJbmZve1VzZXJGaXJzdG5hbWV9CgogICAgbXkgJEhpc3RvcnlFbnRyaWVzID0gJEhpc3RvcnlPYmplY3QtPkNoYW5nZUhpc3RvcnlHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIENoYW5nZUhpc3RvcnlHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIGZvciBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhDaGFuZ2VJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBdHRyaWJ1dGV9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXR0cmlidXRlISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBydW4gdGhlIHNxbCBzdGF0ZW1lbnQgdG8gZ2V0IGhpc3RvcnkKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgY2guaWQsIGNoYW5nZV9pZCwgd29ya29yZGVyX2lkLCBjb250ZW50X25ldywgY29udGVudF9vbGQsICcKICAgICAgICAgICAgLiAnY2guY3JlYXRlX2J5LCBjaC5jcmVhdGVfdGltZSwgdHlwZV9pZCwgY2h0Lm5hbWUsIGZpZWxkbmFtZSAnCiAgICAgICAgICAgIC4gJ0ZST00gY2hhbmdlX2hpc3RvcnkgY2gsIGNoYW5nZV9oaXN0b3J5X3R5cGUgY2h0ICcKICAgICAgICAgICAgLiAnV0hFUkUgY2gudHlwZV9pZCA9IGNodC5pZCAnCiAgICAgICAgICAgIC4gJ0FORCBjaGFuZ2VfaWQgPSA/IE9SREVSIEJZIGNoLmNyZWF0ZV90aW1lLCBjaC5pZCcsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q2hhbmdlSUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGVudHJpZXMgYW5kIHNhdmUgaW5mb3JtYXRpb24gaW4gYXJyYXkKICAgIG15IEBIaXN0b3J5RW50cmllczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJUhpc3RvcnlFbnRyeSA9ICgKICAgICAgICAgICAgSGlzdG9yeUVudHJ5SUQgPT4gJFJvd1swXSwKICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgPT4gJFJvd1sxXSwKICAgICAgICAgICAgV29ya09yZGVySUQgICAgPT4gJFJvd1syXSwKICAgICAgICAgICAgQ29udGVudE5ldyAgICAgPT4gZGVmaW5lZCggJFJvd1szXSApID8gJFJvd1szXSA6ICcnLAogICAgICAgICAgICBDb250ZW50T2xkICAgICA9PiBkZWZpbmVkKCAkUm93WzRdICkgPyAkUm93WzRdIDogJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICRSb3dbNV0sCiAgICAgICAgICAgIENyZWF0ZVRpbWUgICAgID0+ICRSb3dbNl0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlSUQgID0+ICRSb3dbN10sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgID0+ICRSb3dbOF0sCiAgICAgICAgICAgIEZpZWxkbmFtZSAgICAgID0+ICRSb3dbOV0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjbGVhbnVwIHRpbWUgc3RhbXBzIChzb21lIGRhdGFiYXNlcyBhcmUgdXNpbmcgZS4gZy4gMjAwOC0wMi0yNSAyMjowMzowMC4wMDAwMDApCiAgICAgICAgJEhpc3RvcnlFbnRyeXtDcmVhdGVUaW1lfQogICAgICAgICAgICA9fiBzeyBcQSAoIFxkXGRcZFxkIC0gXGRcZCAtIFxkXGQgXHMgXGRcZDpcZFxkOlxkXGQgKSBcLiAuKz8gXHogfXskMX14bXM7CgogICAgICAgIHB1c2ggQEhpc3RvcnlFbnRyaWVzLCBcJUhpc3RvcnlFbnRyeTsKICAgIH0KCiAgICAjIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzZXIgd2hvIGNyZWF0ZWQgZW50cnkKICAgIGZvciBteSAkSGlzdG9yeUVudHJ5IChASGlzdG9yeUVudHJpZXMpIHsKCiAgICAgICAgIyBnZXQgdXNlciBuYW1lCiAgICAgICAgbXkgJVVzZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEID0+ICRIaXN0b3J5RW50cnktPntDcmVhdGVCeX0sCiAgICAgICAgICAgIENhY2hlICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgc2F2ZSB1c2VyIGluZm8gaW4gaGlzdG9yeSBlbnRyeQogICAgICAgIGlmICglVXNlcikgewogICAgICAgICAgICAkSGlzdG9yeUVudHJ5LT57VXNlcklEfSAgICAgICAgPSAkVXNlcntVc2VySUR9OwogICAgICAgICAgICAkSGlzdG9yeUVudHJ5LT57VXNlckxvZ2lufSAgICAgPSAkVXNlcntVc2VyTG9naW59OwogICAgICAgICAgICAkSGlzdG9yeUVudHJ5LT57VXNlckZpcnN0bmFtZX0gPSAkVXNlcntVc2VyRmlyc3RuYW1lfTsKICAgICAgICAgICAgJEhpc3RvcnlFbnRyeS0+e1VzZXJMYXN0bmFtZX0gID0gJFVzZXJ7VXNlckxhc3RuYW1lfTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFxASGlzdG9yeUVudHJpZXM7Cn0KCj1pdGVtIEhpc3RvcnlFbnRyeUdldCgpCgpSZXR1cm5zIGEgc2luZ2xlIGhpc3RvcnkgZW50cnkuIFRoZSBoYXNoIHJlZmVyZW5jZSBoYXMgdGhlc2UgaW5mb3JtYXRpb246CgogICAgJEluZm97SGlzdG9yeUVudHJ5SUR9CiAgICAkSW5mb3tDaGFuZ2VJRH0KICAgICRJbmZve1dvcmtPcmRlcklEfQogICAgJEluZm97SGlzdG9yeVR5cGV9CiAgICAkSW5mb3tIaXN0b3J5VHlwZUlEfQogICAgJEluZm97RmllbGRuYW1lfQogICAgJEluZm97Q29udGVudE5ld30KICAgICRJbmZve0NvbnRlbnRPbGR9CiAgICAkSW5mb3tDcmVhdGVCeX0KICAgICRJbmZve0NyZWF0ZVRpbWV9CiAgICAkSW5mb3tVc2VySUR9CiAgICAkSW5mb3tVc2VyTG9naW59CiAgICAkSW5mb3tVc2VyTGFzdG5hbWV9CiAgICAkSW5mb3tVc2VyRmlyc3RuYW1lfQoKICAgIG15ICRIaXN0b3J5RW50cnkgPSAkSGlzdG9yeU9iamVjdC0+SGlzdG9yeUVudHJ5R2V0KAogICAgICAgIEhpc3RvcnlFbnRyeUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBIaXN0b3J5RW50cnlHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIGZvciBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhIaXN0b3J5RW50cnlJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBdHRyaWJ1dGV9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXR0cmlidXRlISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBydW4gdGhlIHNxbCBzdGF0ZW1lbnQgdG8gZ2V0IGhpc3RvcnkKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgY2guaWQsIGNoYW5nZV9pZCwgd29ya29yZGVyX2lkLCBjb250ZW50X25ldywgY29udGVudF9vbGQsICcKICAgICAgICAgICAgLiAnY2guY3JlYXRlX2J5LCBjaC5jcmVhdGVfdGltZSwgdHlwZV9pZCwgY2h0Lm5hbWUsIGZpZWxkbmFtZSAnCiAgICAgICAgICAgIC4gJ0ZST00gY2hhbmdlX2hpc3RvcnkgY2gsIGNoYW5nZV9oaXN0b3J5X3R5cGUgY2h0ICcKICAgICAgICAgICAgLiAnV0hFUkUgY2gudHlwZV9pZCA9IGNodC5pZCAnCiAgICAgICAgICAgIC4gJ0FORCBjaC5pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0hpc3RvcnlFbnRyeUlEfSBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSBlbnRyaWVzIGFuZCBzYXZlIGluZm9ybWF0aW9uIGluIGFycmF5CiAgICBteSAlSGlzdG9yeUVudHJ5OwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAlSGlzdG9yeUVudHJ5ID0gKAogICAgICAgICAgICBIaXN0b3J5RW50cnlJRCA9PiAkUm93WzBdLAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkUm93WzFdLAogICAgICAgICAgICBXb3JrT3JkZXJJRCAgICA9PiAkUm93WzJdLAogICAgICAgICAgICBDb250ZW50TmV3ICAgICA9PiAkUm93WzNdLAogICAgICAgICAgICBDb250ZW50T2xkICAgICA9PiAkUm93WzRdLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAkUm93WzVdLAogICAgICAgICAgICBDcmVhdGVUaW1lICAgICA9PiAkUm93WzZdLAogICAgICAgICAgICBIaXN0b3J5VHlwZUlEICA9PiAkUm93WzddLAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgICA9PiAkUm93WzhdLAogICAgICAgICAgICBGaWVsZG5hbWUgICAgICA9PiAkUm93WzldLAogICAgICAgICk7CgogICAgICAgICMgY2xlYW51cCB0aW1lIHN0YW1wcyAoc29tZSBkYXRhYmFzZXMgYXJlIHVzaW5nIGUuIGcuIDIwMDgtMDItMjUgMjI6MDM6MDAuMDAwMDAwKQogICAgICAgICRIaXN0b3J5RW50cnl7Q3JlYXRlVGltZX0KICAgICAgICAgICAgPX4gc3sgXEEgKCBcZFxkXGRcZCAtIFxkXGQgLSBcZFxkIFxzIFxkXGQ6XGRcZDpcZFxkICkgXC4gLis/IFx6IH17JDF9eG1zOwogICAgfQoKICAgICMgZ2V0IHVzZXIgbmFtZQogICAgbXkgJVVzZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5HZXRVc2VyRGF0YSgKICAgICAgICBVc2VySUQgPT4gJEhpc3RvcnlFbnRyeXtDcmVhdGVCeX0sCiAgICAgICAgQ2FjaGUgID0+IDEsCiAgICApOwoKICAgICMgc2F2ZSB1c2VyIGluZm8gaW4gaGlzdG9yeSBlbnRyeQogICAgaWYgKCVVc2VyKSB7CiAgICAgICAgJEhpc3RvcnlFbnRyeXtVc2VySUR9ICAgICAgICA9ICRVc2Vye1VzZXJJRH07CiAgICAgICAgJEhpc3RvcnlFbnRyeXtVc2VyTG9naW59ICAgICA9ICRVc2Vye1VzZXJMb2dpbn07CiAgICAgICAgJEhpc3RvcnlFbnRyeXtVc2VyRmlyc3RuYW1lfSA9ICRVc2Vye1VzZXJGaXJzdG5hbWV9OwogICAgICAgICRIaXN0b3J5RW50cnl7VXNlckxhc3RuYW1lfSAgPSAkVXNlcntVc2VyTGFzdG5hbWV9OwogICAgfQoKICAgIHJldHVybiBcJUhpc3RvcnlFbnRyeTsKfQoKPWl0ZW0gV29ya09yZGVySGlzdG9yeURlbGV0ZSgpCgpEZWxldGVzIGFsbCBlbnRyaWVzIGluIGhpc3RvcnkgdGFibGUgdGhhdCBiZWxvbmdzIHRvIHRoZSBnaXZlbiBXb3JrT3JkZXJJRC4KVGhlIG1ldGhvZCByZXR1cm5zIDEgb24gc3VjY2VzcyBhbmQgQzx1bmRlZj4gb3RoZXJ3aXNlLgoKICAgIG15ICRTdWNjZXNzID0gJEhpc3RvcnlPYmplY3QtPldvcmtPcmRlckhpc3RvcnlEZWxldGUoCiAgICAgICAgV29ya09yZGVySUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFdvcmtPcmRlckhpc3RvcnlEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIGZvciBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhXb3JrT3JkZXJJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBdHRyaWJ1dGV9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXR0cmlidXRlISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgZW50cmllcyBmb3IgdGhlIGdpdmVuIHdvcmtvcmRlcgogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gY2hhbmdlX2hpc3RvcnkgV0hFUkUgd29ya29yZGVyX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17V29ya09yZGVySUR9IF0sCiAgICApOwoKICAgICMgc3VjY2VzcwogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENoYW5nZUhpc3RvcnlEZWxldGUoKQoKRGVsZXRlcyBhbGwgZW50cmllcyBpbiBoaXN0b3J5IHRhYmxlIHRoYXQgYmVsb25ncyB0byB0aGUgZ2l2ZW4gQ2hhbmdlSUQuClRoZSBtZXRob2QgcmV0dXJucyAxIG9uIHN1Y2Nlc3MgYW5kIEM8dW5kZWY+IG90aGVyd2lzZS4KCiAgICBteSAkU3VjY2VzcyA9ICRIaXN0b3J5T2JqZWN0LT5DaGFuZ2VIaXN0b3J5RGVsZXRlKAogICAgICAgIENoYW5nZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBDaGFuZ2VIaXN0b3J5RGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBmb3IgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoQ2hhbmdlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEF0dHJpYnV0ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZGVsZXRlIGVudHJpZXMgZm9yIHRoZSBnaXZlbiBjaGFuZ2UKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGNoYW5nZV9oaXN0b3J5IFdIRVJFIGNoYW5nZV9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NoYW5nZUlEfSBdLAogICAgKTsKCiAgICAjIHN1Y2Nlc3MKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBIaXN0b3J5VXBkYXRlKCkKClRoaXMgbWV0aG9kIHVwZGF0ZXMgYSBoaXN0b3J5IGVudHJ5LiBJdCByZXR1cm5zIDEgb24gc3VjY2VzcywgYW5kIEM8dW5kZWY+IG90aGVyd2lzZS4KCiAgICBteSAkU3VjY2VzcyA9ICRIaXN0b3J5T2JqZWN0LT5IaXN0b3J5VXBkYXRlKAogICAgICAgIEhpc3RvcnlFbnRyeUlEID0+IDEyMywKICAgICAgICBXb3JrT3JkZXJJRCAgICA9PiAzNDUxLCAgICAgICAgICMgb3B0aW9uYWwKICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAxMjM1LCAgICAgICAgICMgb3B0aW9uYWwKICAgICAgICBDb250ZW50TmV3ICAgICA9PiAnbmV3IHZhbHVlJywgICMgb3B0aW9uYWwKICAgICAgICBDb250ZW50T2xkICAgICA9PiAnb2xkIHZhbHVlJywgICMgb3B0aW9uYWwKICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBIaXN0b3J5VXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBmb3IgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoSGlzdG9yeUVudHJ5SUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEF0dHJpYnV0ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGhpc3RvcnkgZW50cnkgaWQgYW5kIHVzZXIgaWQKICAgIG15ICRIaXN0b3J5RW50cnlJRCA9IGRlbGV0ZSAkUGFyYW17SGlzdG9yeUVudHJ5SUR9OwogICAgbXkgJFVzZXJJRCAgICAgICAgID0gZGVsZXRlICRQYXJhbXtVc2VySUR9OwoKICAgICMgd2UgaGF2ZSB0byB1cGRhdGUgYXQgbGVhc3Qgb25lIGNvbHVtbgogICAgaWYgKCAha2V5cyAlUGFyYW0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIGF0IGxlYXN0IG9uZSBjb2x1bW4gdG8gdXBkYXRlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyB3aGF0IGNvbHVtbnMgc2hvdWxkIGJlIHVwZGF0ZWQKICAgIG15IEBDb2x1bW5zID0ga2V5cyAlUGFyYW07CiAgICBteSBAQmluZDsKCiAgICAjIGdldCBiaW5kIHZhcmlhYmxlcwogICAgZm9yIG15ICRDb2x1bW4gKEBDb2x1bW5zKSB7CiAgICAgICAgcHVzaCBAQmluZCwgXCRQYXJhbXskQ29sdW1ufTsKICAgIH0KCiAgICAjIGdldCBiaW5kIHN0cmluZwogICAgbXkgJVBhcmFtS2V5MkNvbHVtbk5hbWUgPSAoCiAgICAgICAgQ2hhbmdlSUQgICAgICA9PiAnY2hhbmdlX2lkJywKICAgICAgICBXb3JrT3JkZXJJRCAgID0+ICd3b3Jrb3JkZXJfaWQnLAogICAgICAgIENvbnRlbnROZXcgICAgPT4gJ2NvbnRlbnRfbmV3JywKICAgICAgICBDb250ZW50T2xkICAgID0+ICdjb250ZW50X29sZCcsCiAgICAgICAgSGlzdG9yeVR5cGVJRCA9PiAndHlwZV9pZCcsCiAgICAgICAgRmllbGRuYW1lICAgICA9PiAnZmllbGRuYW1lJywKICAgICk7CiAgICBteSAkQmluZHMgPSBqb2luICcsICcsIG1hcCB7ICRQYXJhbUtleTJDb2x1bW5OYW1leyRffSAuICcgPSA/ICcgfSBAQ29sdW1uczsKCiAgICAjIGRvIHRoZSB1cGRhdGUKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnVVBEQVRFIGNoYW5nZV9oaXN0b3J5IFNFVCAnIC4gJEJpbmRzIC4gJyAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbIEBCaW5kLCBcJEhpc3RvcnlFbnRyeUlEIF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBIaXN0b3J5U2VhcmNoKCkKClNlYXJjaGVzIGZvciBjaGFuZ2VzL3dvcmtvcmRlcnMgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBzZWFyY2ggY3JpdGVyaWEuIEl0IHJldHVybnMKYW4gYXJyYXkgcmVmZXJlbmNlIHdpdGggY2hhbmdlIG9yIHdvcmtvcmRlciBJRHMuIElmICJSZXN1bHQgPT4gJ0NPVU5UJyIgdGhlbiB0aGUKbnVtYmVyIG9mIGZvdW5kIGNoYW5nZXMgaXMgcmV0dXJuZWQuCgogICAgbXkgJElEcyA9ICRIaXN0b3J5T2JqZWN0LT5IaXN0b3J5U2VhcmNoKAogICAgICAgIFR5cGUgICAgICAgICAgICAgICAgPT4gJ0NoYW5nZScsICAgICAgICMgQ2hhbmdlfFdvcmtvcmRlciB3aGljaCBJRHMgc2hvdWxkIGJlIHJldHVybmVkCiAgICAgICAgQXR0cmlidXRlICAgICAgICAgICA9PiAnQ2hhbmdlU3RhdGUnLAogICAgICAgIE9sZFZhbHVlcyAgICAgICAgICAgPT4gWyAncmVqZWN0ZWQnIF0sICMgb3B0aW9uYWwgLSBPbGRWYWx1ZXMgT1IgTmV3VmFsdWVzIGlzIG5lZWRlZAogICAgICAgIE5ld1ZhbHVlcyAgICAgICAgICAgPT4gWyAnYXBwcm92ZWQnIF0sICMgb3B0aW9uYWwgLSBPbGRWYWx1ZXMgT1IgTmV3VmFsdWVzIGlzIG5lZWRlZAogICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gWyAxLCAyLCAzIF0sICAgICMgb3B0aW9uYWwKICAgICAgICBDaGFuZ2VEYXRlTmV3ZXJEYXRlID0+ICcyMDA5LTAxLTEzIDAwOjAwOjAxJywgI29wdGlvbmFsCiAgICAgICAgQ2hhbmdlRGF0ZU9sZGVyRGF0ZSA9PiAnMjAwOS0wMS0xMyAwMDowMDowMScsICNvcHRpb25hbAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBVc2luZ1dpbGRjYXJkcyAgICAgID0+IDAsICAgICAgICAgICAgICAjIDB8MSAtIGRlZmF1bHQgMQogICAgICAgIFJlc3VsdCAgICAgICAgICAgICAgPT4gJ0FSUkFZJywgICAgICAgICMgQVJSQVl8Q09VTlQgLSBkZWZhdWx0IEFSUkFZCiAgICApOwoKPWN1dAoKc3ViIEhpc3RvcnlTZWFyY2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIGZvciBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhUeXBlIEF0dHJpYnV0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBdHRyaWJ1dGV9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXR0cmlidXRlISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyB2ZXJpZnkgdGhhdCBhbGwgcGFzc2VkIGFycmF5IHBhcmFtZXRlcnMgY29udGFpbiBhbiBhcnJheXJlZgogICAgQVJHVU1FTlQ6CiAgICBmb3IgbXkgJEFyZ3VtZW50ICgKICAgICAgICBxdygKICAgICAgICBPbGRWYWx1ZXMKICAgICAgICBOZXdWYWx1ZXMKICAgICAgICBDaGFuZ2VCeQogICAgICAgICkKICAgICAgICApCiAgICB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gfHw9IFtdOwoKICAgICAgICAgICAgbmV4dCBBUkdVTUVOVDsKICAgICAgICB9CgogICAgICAgIGlmICggcmVmICRQYXJhbXskQXJndW1lbnR9IG5lICdBUlJBWScgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkQXJndW1lbnQgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlcwogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17VXNpbmdXaWxkY2FyZHN9ICkgewogICAgICAgICRQYXJhbXtVc2luZ1dpbGRjYXJkc30gPSAxOwogICAgfQoKICAgICMgc2V0IHRoZSBkZWZhdWx0IGJlaGF2aW91ciBmb3IgdGhlIHJldHVybiB0eXBlCiAgICBteSAkUmVzdWx0ID0gJFBhcmFte1Jlc3VsdH0gfHwgJ0FSUkFZJzsKCiAgICBteSBAU1FMV2hlcmU7ICAgICMgYXNzZW1ibGUgdGhlIGNvbmRpdGlvbnMgdXNlZCBpbiB0aGUgV0hFUkUgY2xhdXNlCgogICAgIyBhZGQgc3RyaW5nIHBhcmFtcyB0byB0aGUgV0hFUkUgY2xhdXNlCiAgICBteSAlU3RyaW5nUGFyYW1zID0gKAoKICAgICAgICAjIHN0cmluZ3MgaW4gY2hhbmdlX2hpc3RvcnkKICAgICAgICBBdHRyaWJ1dGUgPT4gJ2NoLmZpZWxkbmFtZScsCiAgICApOwoKICAgICMgYWRkIHN0cmluZyBwYXJhbXMgdG8gc3FsLXdoZXJlLWFycmF5CiAgICBTVFJJTkdQQVJBTToKICAgIGZvciBteSAkU3RyaW5nUGFyYW0gKCBzb3J0IGtleXMgJVN0cmluZ1BhcmFtcyApIHsKCiAgICAgICAgIyBjaGVjayBzdHJpbmcgcGFyYW1zIGZvciB1c2VmdWwgdmFsdWVzLCB0aGUgc3RyaW5nICcwJyBpcyBhbGxvd2VkCiAgICAgICAgbmV4dCBTVFJJTkdQQVJBTSBpZiAhZXhpc3RzICRQYXJhbXskU3RyaW5nUGFyYW19OwogICAgICAgIG5leHQgU1RSSU5HUEFSQU0gaWYgIWRlZmluZWQgJFBhcmFteyRTdHJpbmdQYXJhbX07CiAgICAgICAgbmV4dCBTVFJJTkdQQVJBTSBpZiAkUGFyYW17JFN0cmluZ1BhcmFtfSBlcSAnJzsKCiAgICAgICAgIyBxdW90ZQogICAgICAgICRQYXJhbXskU3RyaW5nUGFyYW19ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlF1b3RlKCAkUGFyYW17JFN0cmluZ1BhcmFtfSApOwoKICAgICAgICAjIHdpbGRjYXJkcyBhcmUgdXNlZAogICAgICAgIGlmICggJFBhcmFte1VzaW5nV2lsZGNhcmRzfSApIHsKCiAgICAgICAgICAgICMgZ2V0IGxpa2UgZXNjYXBlIHN0cmluZyBuZWVkZWQgZm9yIHNvbWUgZGF0YWJhc2VzIChlLmcuIG9yYWNsZSkKICAgICAgICAgICAgbXkgJExpa2VFc2NhcGVTdHJpbmcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+R2V0RGF0YWJhc2VGdW5jdGlvbignTGlrZUVzY2FwZVN0cmluZycpOwoKICAgICAgICAgICAgIyBRdW90ZQogICAgICAgICAgICAkUGFyYW17JFN0cmluZ1BhcmFtfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5RdW90ZSggJFBhcmFteyRTdHJpbmdQYXJhbX0sICdMaWtlJyApOwoKICAgICAgICAgICAgIyByZXBsYWNlICogd2l0aCAlCiAgICAgICAgICAgICRQYXJhbXskU3RyaW5nUGFyYW19ID1+IHN7IFwqKyB9eyV9eG1zZzsKCiAgICAgICAgICAgICMgZG8gbm90IHVzZSBzdHJpbmcgcGFyYW1zIHdoaWNoIGNvbnRhaW4gb25seSAlCiAgICAgICAgICAgIG5leHQgU1RSSU5HUEFSQU0gaWYgJFBhcmFteyRTdHJpbmdQYXJhbX0gPX4gbXsgXEEgJSogXHogfXhtczsKCiAgICAgICAgICAgIHB1c2ggQFNRTFdoZXJlLAogICAgICAgICAgICAgICAgIkxPV0VSKCRTdHJpbmdQYXJhbXN7JFN0cmluZ1BhcmFtfSkgTElLRSBMT1dFUignJFBhcmFteyRTdHJpbmdQYXJhbX0nKSAkTGlrZUVzY2FwZVN0cmluZyI7CiAgICAgICAgfQoKICAgICAgICAjIG5vIHdpbGRjYXJkcyBhcmUgdXNlZAogICAgICAgIGVsc2UgewogICAgICAgICAgICBwdXNoIEBTUUxXaGVyZSwKICAgICAgICAgICAgICAgICJMT1dFUigkU3RyaW5nUGFyYW1zeyRTdHJpbmdQYXJhbX0pID0gTE9XRVIoJyRQYXJhbXskU3RyaW5nUGFyYW19JykiOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBhcnJheSBwYXJhbXMKICAgIG15ICVBcnJheVBhcmFtcyA9ICgKICAgICAgICBPbGRWYWx1ZXMgPT4gJ2NoLmNvbnRlbnRfb2xkJywKICAgICAgICBOZXdWYWx1ZXMgPT4gJ2NoLmNvbnRlbnRfbmV3JywKICAgICAgICBDaGFuZ2VCeSAgPT4gJ2NoLmNyZWF0ZV9ieScsCiAgICApOwoKICAgICMgYWRkIGFycmF5IHBhcmFtcyB0byBzcWwtd2hlcmUtYXJyYXkKICAgIEFSUkFZUEFSQU06CiAgICBmb3IgbXkgJEFycmF5UGFyYW0gKCBzb3J0IGtleXMgJUFycmF5UGFyYW1zICkgewoKICAgICAgICAjIGlnbm9yZSBlbXB0eSBsaXN0cwogICAgICAgIG5leHQgQVJSQVlQQVJBTSBpZiAhQHsgJFBhcmFteyRBcnJheVBhcmFtfSB9OwoKICAgICAgICAjIHF1b3RlCiAgICAgICAgZm9yIG15ICRPbmVQYXJhbSAoIEB7ICRQYXJhbXskQXJyYXlQYXJhbX0gfSApIHsKICAgICAgICAgICAgJE9uZVBhcmFtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlF1b3RlKCRPbmVQYXJhbSk7CgogICAgICAgICAgICAjIGZvciBzdHJpbmdzIHdlIG5lZWQgc2luZ2xlIHF1b3RlcwogICAgICAgICAgICBpZiAoICRPbmVQYXJhbSAhfiBteyBcQSBbKy1dPyBcZCsgKD86XC5cZCspPyBceiB9eG1zICkgewogICAgICAgICAgICAgICAgJE9uZVBhcmFtID0gIickT25lUGFyYW0nIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgc3RyaW5nCiAgICAgICAgbXkgJEluU3RyaW5nID0gam9pbiAnLCAnLCBAeyAkUGFyYW17JEFycmF5UGFyYW19IH07CgogICAgICAgIHB1c2ggQFNRTFdoZXJlLCAiJEFycmF5UGFyYW1zeyRBcnJheVBhcmFtfSBJTiAoJEluU3RyaW5nKSI7CiAgICB9CgogICAgIyBzZXQgdGltZSBwYXJhbXMKICAgIG15ICVUaW1lUGFyYW1zID0gKAoKICAgICAgICAjIHRpbWVzIGluIGNoYW5nZV9oaXN0b3J5CiAgICAgICAgQ2hhbmdlVGltZU5ld2VyRGF0ZSA9PiAnY2guY3JlYXRlX3RpbWUgPj0nLAogICAgICAgIENoYW5nZVRpbWVPbGRlckRhdGUgPT4gJ2NoLmNyZWF0ZV90aW1lIDw9JywKICAgICk7CgogICAgIyBjaGVjayBhbmQgYWRkIHRpbWUgcGFyYW1zIHRvIFdIRVJFCiAgICBUSU1FUEFSQU06CiAgICBmb3IgbXkgJFRpbWVQYXJhbSAoIHNvcnQga2V5cyAlVGltZVBhcmFtcyApIHsKCiAgICAgICAgbmV4dCBUSU1FUEFSQU0gaWYgISRQYXJhbXskVGltZVBhcmFtfTsKCiAgICAgICAgaWYgKCAkUGFyYW17JFRpbWVQYXJhbX0gIX4gbXsgXEEgXGRcZFxkXGQtXGRcZC1cZFxkIFxzIFxkXGQ6XGRcZDpcZFxkIFx6IH14bXMgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgcGFyYW1ldGVyICRUaW1lUGFyYW0gaGFzIGFuIGludmFsaWQgZGF0ZSBmb3JtYXQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRQYXJhbXskVGltZVBhcmFtfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5RdW90ZSggJFBhcmFteyRUaW1lUGFyYW19ICk7CgogICAgICAgICMgdGhlIHRpbWUgYXR0cmlidXRlcyBvZiBjaGFuZ2VfaGlzdG9yeSBzaG93IHVwIGluIHRoZSBXSEVSRSBjbGF1c2UKICAgICAgICBwdXNoIEBTUUxXaGVyZSwgIiRUaW1lUGFyYW1zeyRUaW1lUGFyYW19ICckUGFyYW17JFRpbWVQYXJhbX0nIjsKICAgIH0KCiAgICAjIGNyZWF0ZSBTUUwgc3RhdGVtZW50CiAgICBteSAkVHlwZSA9IGxjICRQYXJhbXtUeXBlfTsKICAgIG15ICRTUUwgID0gIlNFTEVDVCBESVNUSU5DVCBjaC4ke1R5cGV9X2lkIEZST00gY2hhbmdlX2hpc3RvcnkgY2ggIjsKCiAgICBpZiAoICRSZXN1bHQgZXEgJ0NPVU5UJyApIHsKICAgICAgICAkU1FMID0gIlNFTEVDVCBDT1VOVCggRElTVElOQ1QoIGNoLiR7VHlwZX1faWQgKSApIEZST00gY2hhbmdlX2hpc3RvcnkgY2ggIjsKICAgIH0KCiAgICAjIGFkZCB0aGUgV0hFUkUgY2xhdXNlCiAgICBpZiAoQFNRTFdoZXJlKSB7CiAgICAgICAgJFNRTCAuPSAnV0hFUkUgJzsKICAgICAgICAkU1FMIC49IGpvaW4gJyBBTkQgJywgbWFwIHsiKCAkXyApIn0gQFNRTFdoZXJlOwogICAgICAgICRTUUwgLj0gJyAnOwogICAgfQoKICAgICMgaWdub3JlIHRoZSBwYXJhbWV0ZXIgJ0xpbWl0JyB3aGVuIHJlc3VsdCB0eXBlIGlzICdDT1VOVCcKICAgIGlmICggJFJlc3VsdCBlcSAnQ09VTlQnICkgewogICAgICAgIGRlbGV0ZSAkUGFyYW17TGltaXR9OwogICAgfQoKICAgICMgYXNrIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgTGltaXQgPT4gJFBhcmFte0xpbWl0fSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBASURzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBJRHMsICRSb3dbMF07CiAgICB9CgogICAgaWYgKCAkUmVzdWx0IGVxICdDT1VOVCcgKSB7CgogICAgICAgICMgcmV0dXJuIHRoZSBDT1VOVChjLmlkKSBhdHRyaWJ1dGUKICAgICAgICByZXR1cm4gJElEc1swXTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHJldHVybiBcQElEczsKICAgIH0KfQoKPWl0ZW0gSGlzdG9yeVR5cGVMb29rdXAoKQoKVGhpcyBtZXRob2QgZG9lcyBhIGxvb2t1cCBmb3IgYSBoaXN0b3J5IHR5cGUuIElmIGEgaGlzdG9yeSB0eXBlIGlkIGlzIGdpdmVuLAppdCByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBoaXN0b3J5IHR5cGUuIElmIGEgaGlzdG9yeSB0eXBlIGlzIGdpdmVuLCB0aGUgYXBwcm9wcmlhdGUKaWQgaXMgcmV0dXJuZWQuCgogICAgbXkgJE5hbWUgPSAkSGlzdG9yeU9iamVjdC0+SGlzdG9yeVR5cGVMb29rdXAoCiAgICAgICAgSGlzdG9yeVR5cGVJRCA9PiAxMjM0LAogICAgKTsKCiAgICBteSAkSUQgPSAkSGlzdG9yeU9iamVjdC0+SGlzdG9yeVR5cGVMb29rdXAoCiAgICAgICAgSGlzdG9yeVR5cGUgPT4gJ1dvcmtPcmRlckFkZCcsCiAgICApOwoKPWN1dAoKc3ViIEhpc3RvcnlUeXBlTG9va3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBmb3IgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17SGlzdG9yeVR5cGVJRH0gJiYgISRQYXJhbXtIaXN0b3J5VHlwZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEhpc3RvcnlUeXBlSUQgb3IgSGlzdG9yeVR5cGUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGlmIGJvdGggdmFsaWQga2V5cyBhcmUgZ2l2ZW4sIHJldHVybgogICAgaWYgKCAkUGFyYW17SGlzdG9yeVR5cGVJRH0gJiYgJFBhcmFte0hpc3RvcnlUeXBlfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgZWl0aGVyIEhpc3RvcnlUeXBlSUQgT1IgSGlzdG9yeVR5cGUgLSBub3QgYm90aCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZmluZCBvdXQgd2hhdCB0aGUgdXNlZCBrZXkgaXMKICAgIG15ICRLZXkgPSAnSGlzdG9yeVR5cGUnOwoKICAgIGlmICggJFBhcmFte0hpc3RvcnlUeXBlSUR9ICkgewogICAgICAgICRLZXkgPSAnSGlzdG9yeVR5cGVJRCc7CiAgICB9CgogICAgIyBjaGVjayB0aGUgY2FjaGUKICAgIG15ICRDYWNoZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAnSGlzdG9yeVR5cGVMb29rdXA6OicgLiAkS2V5IC4gJzo6JyAuICRQYXJhbXskS2V5fSwKICAgICk7CgogICAgIyBpZiByZXN1bHQgaXMgY2FjaGVkIHJldHVybiB0aGF0IHJlc3VsdAogICAgcmV0dXJuICRDYWNoZSBpZiAkQ2FjaGU7CgogICAgIyBzZXQgdGhlIGFwcHJvcHJpYXRlIFNRTCBzdGF0ZW1lbnQKICAgIG15ICRTUUwgPSAnU0VMRUNUIG5hbWUgRlJPTSBjaGFuZ2VfaGlzdG9yeV90eXBlIFdIRVJFIGlkID0gPyc7CgogICAgaWYgKCAkS2V5IGVxICdIaXN0b3J5VHlwZScgKSB7CiAgICAgICAgJFNRTCA9ICdTRUxFQ1QgaWQgRlJPTSBjaGFuZ2VfaGlzdG9yeV90eXBlIFdIRVJFIG5hbWUgPSA/JzsKICAgIH0KCiAgICAjIGZldGNoIHRoZSByZXF1ZXN0ZWQgdmFsdWUKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17JEtleX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICBteSAkVmFsdWU7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRWYWx1ZSA9ICRSb3dbMF07CiAgICB9CgogICAgIyBzYXZlIHZhbHVlIGluIGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgICA9PiAnSGlzdG9yeVR5cGVMb29rdXA6OicgLiAkS2V5IC4gJzo6JyAuICRQYXJhbXskS2V5fSwKICAgICAgICBWYWx1ZSA9PiAkVmFsdWUsCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICApOwoKICAgIHJldHVybiAkVmFsdWU7Cn0KCj1pdGVtIEhpc3RvcnlUeXBlTGlzdCgpCgpyZXR1cm5zIGFuIGFycmF5IHJlZmVyZW5jZSB3aXRoIGhhc2hyZWZlcmVuY2VzLiBUaGUga2V5IG9mIHRoZSBoYXNocmVmZXJlbmNlIGlzIHRoZSBpZApvZiBhbiByZWNpcGllbnQgYW5kIHRoZSBuYW1lIGlzIHRoZSB2YWx1ZS4KCj1jdXQKCnN1YiBIaXN0b3J5VHlwZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHRoZSBjYWNoZQogICAgbXkgJENhY2hlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICdIaXN0b3J5VHlwZUxpc3QnLAogICAgKTsKCiAgICAjIGlmIHJlc3VsdCBpcyBjYWNoZWQgcmV0dXJuIHRoYXQgcmVzdWx0CiAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAjIHByZXBhcmUgZGIgcXVlcnkKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIG5hbWUgRlJPTSBjaGFuZ2VfaGlzdG9yeV90eXBlIE9SREVSIEJZIG5hbWUnLAogICAgKTsKCiAgICAjIHJldHJpZXZlIGRhdGEKICAgIG15IEBIaXN0b3J5VHlwZXM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG15ICRFbnRyeSA9IHsKICAgICAgICAgICAgS2V5ICAgPT4gJFJvd1swXSwKICAgICAgICAgICAgVmFsdWUgPT4gJFJvd1sxXSwKICAgICAgICB9OwogICAgICAgIHB1c2ggQEhpc3RvcnlUeXBlcywgJEVudHJ5OwogICAgfQoKICAgICMgc2F2ZSB2YWx1ZXMgaW4gY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgID0+ICdIaXN0b3J5VHlwZUxpc3QnLAogICAgICAgIFZhbHVlID0+IFxASGlzdG9yeVR5cGVzLAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgKTsKCiAgICByZXR1cm4gXEBIaXN0b3J5VHlwZXM7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01TdGF0ZU1hY2hpbmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01TdGF0ZU1hY2hpbmUgLSBzdGF0ZW1hY2hpbmUgbGliCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBmdW5jdGlvbnMgZm9yIHN0YXRlbWFjaGluZSBpbiBJVFNNQ2hhbmdlTWFuYWdlbWVudC4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJFN0YXRlTWFjaGluZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNU3RhdGVNYWNoaW5lJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgc2V0IHRoZSBkZWJ1ZyBmbGFnCiAgICAkU2VsZi0+e0RlYnVnfSA9ICRQYXJhbXtEZWJ1Z30gfHwgMDsKCiAgICAjIGdldCB0aGUgY2FjaGUgdHlwZSBhbmQgVFRMIChpbiBzZWNvbmRzKQogICAgJFNlbGYtPntDYWNoZVR5cGV9ID0gJ0lUU01TdGF0ZU1hY2hpbmUnOwogICAgJFNlbGYtPntDYWNoZVRUTH0gID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ2hhbmdlOjpDYWNoZVRUTCcpICogNjA7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBTdGF0ZVRyYW5zaXRpb25BZGQoKQoKQWRkIGEgbmV3IHN0YXRlIHRyYW5zaXRpb24uIFJldHVybnMgdGhlIHRyYW5zaXRpb24gaWQgb24gc3VjY2Vzcy4KCiAgICBteSAkVHJhbnNpdGlvbklEID0gJFN0YXRlTWFjaGluZU9iamVjdC0+U3RhdGVUcmFuc2l0aW9uQWRkKAogICAgICAgIFN0YXRlSUQgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZCB3aXRoaW4gdGhlIGdpdmVuIGNsYXNzLCBvciAwIHRvIGluZGljYXRlIHRoZSBzdGFydCBzdGF0ZQogICAgICAgIE5leHRTdGF0ZUlEID0+IDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZCB3aXRoaW4gdGhlIGdpdmVuIGNsYXNzLCBvciAwIHRvIGluZGljYXRlIGFuIGVuZCBzdGF0ZQogICAgICAgIENsYXNzICAgICAgID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywgIyB0aGUgbmFtZSBvZiBhIGdlbmVyYWwgY2F0YWxvZyBjbGFzcwogICAgKTsKCj1jdXQKCnN1YiBTdGF0ZVRyYW5zaXRpb25BZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIGlmIFN0YXRlSUQgYW5kIE5leHRTdGF0ZUlEIGFyZSBnaXZlbiAodGhleSBjYW4gYmUgMCkKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFN0YXRlSUQgTmV4dFN0YXRlSUQpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayB0aGF0IGNsYXNzIGlzIGdpdmVuCiAgICBpZiAoICEkUGFyYW17Q2xhc3N9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDbGFzcyEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgdGhhdCBub3QgYm90aCBTdGF0ZUlEIGFuZCBOZXh0U3RhdGVJRCBhcmUgemVybwogICAgaWYgKCAhJFBhcmFte1N0YXRlSUR9ICYmICEkUGFyYW17TmV4dFN0YXRlSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiU3RhdGVJRCBhbmQgTmV4dFN0YXRlSUQgY2FuJ3QgYm90aCBiZSB6ZXJvISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkZWZpbmUgbG9va3VwIGhhc2ggZm9yIHN0YXRlIG5hbWUKICAgIG15ICVTdGF0ZUlEMlN0YXRlOwoKICAgICMgY2hlY2sgaWYgU3RhdGVJRCBhbmQgTmV4dFN0YXRlSUQgYmVsb25nIHRvIHRoZSBnaXZlbiBjbGFzcwogICAgQVJHVU1FTlQ6CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTdGF0ZUlEIE5leHRTdGF0ZUlEKSkgewoKICAgICAgICAkU3RhdGVJRDJTdGF0ZXsgJFBhcmFteyRBcmd1bWVudH0gfSA9ICRTZWxmLT5TdGF0ZUxvb2t1cCgKICAgICAgICAgICAgU3RhdGVJRCA9PiAkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgQ2xhc3MgICA9PiAkUGFyYW17Q2xhc3N9LAogICAgICAgICk7CgogICAgICAgICMgZG9udCBjaGVjayB6ZXJvIHZhbHVlcwogICAgICAgIG5leHQgQVJHVU1FTlQgaWYgISRQYXJhbXskQXJndW1lbnR9OwoKICAgICAgICAjIGdldCBjbGFzcwogICAgICAgIG15ICREYXRhUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIGlkIGJlbG9uZ3MgdG8gZ2l2ZW4gY2xhc3MKICAgICAgICBpZiAoICEkRGF0YVJlZiB8fCAhJXskRGF0YVJlZn0gfHwgJERhdGFSZWYtPntDbGFzc30gbmUgJFBhcmFte0NsYXNzfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRBcmd1bWVudCAkUGFyYW17JEFyZ3VtZW50fSBpcyBub3QgaW4gdGhlIGNsYXNzICRQYXJhbXtDbGFzc30hIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIGEgc3RhdGUgdHJhbnNpdGlvbiB3aXRoIHRoZSBTdGF0ZUlEIGFuZCBOZXh0U3RhdGVJRCBleGlzdHMgYWxyZWFkeQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCBGUk9NIGNoYW5nZV9zdGF0ZV9tYWNoaW5lICcKICAgICAgICAgICAgLiAnV0hFUkUgc3RhdGVfaWQgPSA/ICcKICAgICAgICAgICAgLiAnQU5EIG5leHRfc3RhdGVfaWQgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17U3RhdGVJRH0sIFwkUGFyYW17TmV4dFN0YXRlSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkVHJhbnNpdGlvbklEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkVHJhbnNpdGlvbklEID0gJFJvd1swXTsKICAgIH0KCiAgICAjIGRvIG5vdCBpbnNlcnQgdGhpcyB0cmFuc2l0aW9uIHR3aWNlCiAgICByZXR1cm4gJFRyYW5zaXRpb25JRCBpZiAkVHJhbnNpdGlvbklEOwoKICAgICMgY2hlY2sgaWYgU3RhdGVJRCBpcyBhIHN0YXJ0IHN0YXRlICg9MCkgYW5kIGFub3RoZXIgc3RhcnQgc3RhdGUgYWxyZWFkeSBleGlzdHMKICAgIGlmICggISRQYXJhbXtTdGF0ZUlEfSApIHsKCiAgICAgICAgIyBjb3VudCB0aGUgbnVtYmVyIG9mIGV4c3Rpbmcgc3RhcnQgc3RhdGVzIGluIHRoZSBnaXZlbiBjbGFzcwogICAgICAgICMgKCB0aGUgc3RhdGVfaWQgMCBpbmRpY2F0ZXMgdGhhdCB0aGUgbmV4dF9zdGF0ZV9pZCBpcyBhIHN0YXJ0IHN0YXRlICkKICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gJ1NFTEVDVCBjb3VudChzLmlkKSAnCiAgICAgICAgICAgICAgICAuICdGUk9NIGNoYW5nZV9zdGF0ZV9tYWNoaW5lIHMsIGdlbmVyYWxfY2F0YWxvZyBnICcKICAgICAgICAgICAgICAgIC4gJ1dIRVJFIGcuZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPyAnCiAgICAgICAgICAgICAgICAuICdBTkQgcy5uZXh0X3N0YXRlX2lkID0gZy5pZCAnCiAgICAgICAgICAgICAgICAuICdBTkQgcy5zdGF0ZV9pZCA9IDAnLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17Q2xhc3N9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICAgICAgbXkgJENvdW50OwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRDb3VudCA9ICRSb3dbMF07CiAgICAgICAgfQoKICAgICAgICAjIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdGFydCBzdGF0ZQogICAgICAgIGlmICgkQ291bnQpIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbiBub3QgYWRkIHN0YXRlICckU3RhdGVJRDJTdGF0ZXskUGFyYW17TmV4dFN0YXRlSUR9fScgIgogICAgICAgICAgICAgICAgICAgIC4gIihJRDogJFBhcmFte05leHRTdGF0ZUlEfSkgYXMgc3RhcnQgc3RhdGUuICIKICAgICAgICAgICAgICAgICAgICAuICJUaGVyZSBpcyBhbHJlYWR5IGEgc3RhcnQgc3RhdGUgZGVmaW5lZCBmb3IgY2xhc3MgJyRQYXJhbXtDbGFzc30nISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBwcmV2ZW50IHNldHRpbmcgYW4gZW5kIHN0YXRlIHRyYW5zaXRpb24sIGlmIG90aGVyIHN0YXRlIHRyYW5zaXN0aW9ucyBleGlzdCBhbHJlYWR5CiAgICBpZiAoICRQYXJhbXtTdGF0ZUlEfSAmJiAhJFBhcmFte05leHRTdGF0ZUlEfSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBvdGhlciBzdGF0ZSB0cmFuc2lzdGlvbnMgZXhpc3QgZm9yIHRoZSBnaXZlbiBTdGF0ZUlECiAgICAgICAgbXkgJE5leHRTdGF0ZUlEcyA9ICRTZWxmLT5TdGF0ZVRyYW5zaXRpb25HZXQoCiAgICAgICAgICAgIFN0YXRlSUQgPT4gJFBhcmFte1N0YXRlSUR9LAogICAgICAgICAgICBDbGFzcyAgID0+ICRQYXJhbXtDbGFzc30sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiBhbnkgbmV4dCBzdGF0ZXMgYXJlIGRlZmluZWQgZm9yIHRoaXMgc3RhcnQgc3RhdGUKICAgICAgICBpZiAoICROZXh0U3RhdGVJRHMgJiYgQHskTmV4dFN0YXRlSURzfSAmJiBzY2FsYXIgQHskTmV4dFN0YXRlSURzfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbiBub3Qgc2V0IHN0YXRlICIKICAgICAgICAgICAgICAgICAgICAuICInJFN0YXRlSUQyU3RhdGV7JFBhcmFte1N0YXRlSUR9fScgKElEOiAkUGFyYW17U3RhdGVJRH0pIGFzIGVuZCBzdGF0ZSwgIgogICAgICAgICAgICAgICAgICAgIC4gImJlY2F1c2Ugb3RoZXIgZm9sbG93aW5nIHN0YXRlcyBleGlzdCwgd2hpY2ggbXVzdCBiZSBkZWxldGVkIGZpcnN0ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBwcmV2ZW50IHRoZSBhZGRpbmcgb2Ygb3RoZXIgbmV4dCBzdGF0ZXMgaWYgYW4gZW5kIHN0YXRlIGlzIGFscmVhZHkgZGVmaW5lZAogICAgIyBmb3IgdGhpcyBzdGFydCBzdGF0ZQogICAgZWxzaWYgKCAkUGFyYW17U3RhdGVJRH0gJiYgJFBhcmFte05leHRTdGF0ZUlEfSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBvdGhlciBzdGF0ZSB0cmFuc2lzdGlvbnMgZXhpc3QgZm9yIHRoZSBnaXZlbiBTdGF0ZUlECiAgICAgICAgbXkgJE5leHRTdGF0ZUlEcyA9ICRTZWxmLT5TdGF0ZVRyYW5zaXRpb25HZXQoCiAgICAgICAgICAgIFN0YXRlSUQgPT4gJFBhcmFte1N0YXRlSUR9LAogICAgICAgICAgICBDbGFzcyAgID0+ICRQYXJhbXtDbGFzc30sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiB0aGVyZSBpcyBhbiBlbmQgc3RhdGUgKD0wKSBkZWZpbmVkIGZvciB0aGlzIHN0YXJ0IHN0YXRlCiAgICAgICAgaWYgKCAkTmV4dFN0YXRlSURzICYmIEB7JE5leHRTdGF0ZUlEc30gJiYgISROZXh0U3RhdGVJRHMtPlswXSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlN0YXRlICckU3RhdGVJRDJTdGF0ZXskUGFyYW17U3RhdGVJRH19JyAiCiAgICAgICAgICAgICAgICAgICAgLiAiKElEOiAkUGFyYW17U3RhdGVJRH0pIGlzIGRlZmluZWQgYXMgYW4gZW5kIHN0YXRlLCAiCiAgICAgICAgICAgICAgICAgICAgLiAiaXQgbXVzdCBiZSBkZWxldGVkIGZpcnN0LCBiZWZvcmUgbmV3IGZvbGxvd2luZyBzdGF0ZXMgY2FuIGJlIGFkZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBhZGQgc3RhdGUgdHJhbnNpdGlvbiB0byBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBjaGFuZ2Vfc3RhdGVfbWFjaGluZSAnCiAgICAgICAgICAgIC4gJyhzdGF0ZV9pZCwgbmV4dF9zdGF0ZV9pZCkgJwogICAgICAgICAgICAuICdWQUxVRVMgKD8sID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtTdGF0ZUlEfSwgXCRQYXJhbXtOZXh0U3RhdGVJRH0sCiAgICAgICAgXSwKICAgICk7CgogICAgIyBnZXQgVHJhbnNpdGlvbklECiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkIEZST00gY2hhbmdlX3N0YXRlX21hY2hpbmUgJwogICAgICAgICAgICAuICdXSEVSRSBzdGF0ZV9pZCA9ID8gJwogICAgICAgICAgICAuICdBTkQgbmV4dF9zdGF0ZV9pZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtTdGF0ZUlEfSwgXCRQYXJhbXtOZXh0U3RhdGVJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFRyYW5zaXRpb25JRCA9ICRSb3dbMF07CiAgICB9CgogICAgIyBjaGVjayBpZiBzdGF0ZSB0cmFuc2l0aW9uIGNvdWxkIGJlIGFkZGVkCiAgICBpZiAoICEkVHJhbnNpdGlvbklEICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiU3RhdGVUcmFuc2l0aW9uQWRkKCkgZmFpbGVkISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjbGVhbnVwIHN0YXRlbWFjaGluZSBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwoKICAgIHJldHVybiAkVHJhbnNpdGlvbklEOwp9Cgo9aXRlbSBTdGF0ZVRyYW5zaXRpb25EZWxldGUoKQoKRGVsZXRlIGEgc3RhdGUgdHJhbnNpdGlvbi4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuCgogICAgbXkgJFN1Y2Nlc3MgPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZVRyYW5zaXRpb25EZWxldGUoCiAgICAgICAgU3RhdGVJRCAgICAgPT4gMSwgICMgaWQgd2l0aGluIHRoZSBnaXZlbiBjbGFzcywgb3IgMCB0byBpbmRpY2F0ZSB0aGUgc3RhcnQgc3RhdGUKICAgICAgICBOZXh0U3RhdGVJRCA9PiAyLCAgIyBpZCB3aXRoaW4gdGhlIGdpdmVuIGNsYXNzLCBvciAwIHRvIGluZGljYXRlIGFuIGVuZCBzdGF0ZQogICAgKTsKCj1jdXQKCnN1YiBTdGF0ZVRyYW5zaXRpb25EZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIGlmIFN0YXRlSUQgYW5kIE5leHRTdGF0ZUlEIGFyZSBnaXZlbiAodGhleSBjYW4gYmUgMCkKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFN0YXRlSUQgTmV4dFN0YXRlSUQpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgc3RhdGUgdHJhbnNpdGlvbiBmcm9tIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ0RFTEVURSBGUk9NIGNoYW5nZV9zdGF0ZV9tYWNoaW5lICcKICAgICAgICAgICAgLiAnV0hFUkUgc3RhdGVfaWQgPSA/IEFORCBuZXh0X3N0YXRlX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17U3RhdGVJRH0sIFwkUGFyYW17TmV4dFN0YXRlSUR9LAogICAgICAgIF0sCiAgICApOwoKICAgICMgY2xlYW51cCBzdGF0ZW1hY2hpbmUgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gU3RhdGVUcmFuc2l0aW9uRGVsZXRlQWxsKCkKCkRlbGV0ZSBhbGwgc3RhdGUgdHJhbnNpdGlvbnMgb2YgYSBjbGFzcy4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuCgogICAgbXkgJFN1Y2Nlc3MgPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZVRyYW5zaXRpb25EZWxldGVBbGwoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLCAjIHRoZSBuYW1lIG9mIGEgZ2VuZXJhbCBjYXRhbG9nIGNsYXNzCiAgICApOwoKPWN1dAoKc3ViIFN0YXRlVHJhbnNpdGlvbkRlbGV0ZUFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHBhcmFtZXRlcgogICAgaWYgKCAhJFBhcmFte0NsYXNzfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ2xhc3MhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGZpbmQgYWxsIHN0YXRlIGlkcyBhbmQgbmV4dF9zdGF0ZSBpZHMgd2hpY2ggYmVsb25nIHRvIHRoZSBnaXZlbiBjbGFzcwogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCAnCiAgICAgICAgICAgIC4gJ0ZST00gZ2VuZXJhbF9jYXRhbG9nICcKICAgICAgICAgICAgLiAnV0hFUkUgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q2xhc3N9IF0sCiAgICApOwoKICAgIG15IEBJRHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQElEcywgJFJvd1swXTsKICAgIH0KCiAgICAjIHJldHVybiBpZiBubyBzdGF0ZSB0cmFuc2l0aW9ucyBleGlzdCBmb3IgdGhlIGdpdmVuIGNsYXNzCiAgICByZXR1cm4gMSBpZiAhQElEczsKCiAgICAjIGJ1aWxkIGlkIHN0cmluZwogICAgbXkgJElEU3RyaW5nID0gam9pbiAnLCAnLCBASURzOwoKICAgICMgZGVsZXRlIHN0YXRlIHRyYW5zaXRpb24gZnJvbSBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBjaGFuZ2Vfc3RhdGVfbWFjaGluZSAiCiAgICAgICAgICAgIC4gIldIRVJFIHN0YXRlX2lkIElOICggJElEU3RyaW5nICkgIgogICAgICAgICAgICAuICJPUiBuZXh0X3N0YXRlX2lkIElOICggJElEU3RyaW5nICkiLAogICAgKTsKCiAgICAjIGNsZWFudXAgc3RhdGVtYWNoaW5lIGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cgp9Cgo9aXRlbSBTdGF0ZVRyYW5zaXRpb25HZXQoKQoKR2V0IGEgc3RhdGUgdHJhbnNpdGlvbiBmb3IgYSBnaXZlbiBzdGF0ZSBpZC4KUmV0dXJucyBhbiBhcnJheSByZWZlcmVuY2Ugb2YgdGhlIG5leHQgc3RhdGUgaWRzLgoKICAgIG15ICROZXh0U3RhdGVJRHNSZWYgPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZVRyYW5zaXRpb25HZXQoCiAgICAgICAgU3RhdGVJRCA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaWQgd2l0aGluIHRoZSBnaXZlbiBjbGFzcywgb3IgMCB0byBpbmRpY2F0ZSB0aGUgc3RhcnQgc3RhdGUKICAgICAgICBDbGFzcyAgID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywgIyB0aGUgbmFtZSBvZiBhIGdlbmVyYWwgY2F0YWxvZyBjbGFzcwogICAgKTsKCj1jdXQKCnN1YiBTdGF0ZVRyYW5zaXRpb25HZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIGlmIFN0YXRlSUQgYXJlIGdpdmVuICh0aGV5IGNhbiBiZSAwKQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU3RhdGVJRCkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIHRoYXQgY2xhc3MgaXMgZ2l2ZW4KICAgIGlmICggISRQYXJhbXtDbGFzc30gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENsYXNzIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayB0aGUgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdTdGF0ZVRyYW5zaXRpb25HZXQ6OlN0YXRlSUQ6OicgLiAkUGFyYW17U3RhdGVJRH0gLiAnOjpDbGFzczo6JyAuICRQYXJhbXtDbGFzc307CiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAkQ2FjaGUgaWYgJENhY2hlOwoKICAgICMgY2hlY2sgaWYgU3RhdGVJRCBiZWxvbmdzIHRvIHRoZSBnaXZlbiBjbGFzcywgYnV0IG9ubHkgaWYgc3RhdGUgaWQgaXMgbm90IGEgc3RhcnQgc3RhdGUgKD0wKQogICAgaWYgKCAkUGFyYW17U3RhdGVJRH0gKSB7CgogICAgICAgICMgZ2V0IGNsYXNzIG9mIGdpdmVuIFN0YXRlSUQKICAgICAgICBteSAkRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJFBhcmFte1N0YXRlSUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgaWYgU3RhdGVJRCBiZWxvbmdzIHRvIGdpdmVuIGNsYXNzCiAgICAgICAgaWYgKCAhJERhdGFSZWYgfHwgISV7JERhdGFSZWZ9IHx8ICREYXRhUmVmLT57Q2xhc3N9IG5lICRQYXJhbXtDbGFzc30gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJTdGF0ZUlEICRQYXJhbXtTdGF0ZUlEfSBpcyBub3QgaW4gdGhlIGNsYXNzICckUGFyYW17Q2xhc3N9JyEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZmluZCBhbGwgc3RhdGUgaWRzIGFuZCBuZXh0X3N0YXRlIGlkcyB3aGljaCBiZWxvbmcgdG8gdGhlIGdpdmVuIGNsYXNzCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIERJU1RJTkNUIHMubmV4dF9zdGF0ZV9pZCAnCiAgICAgICAgICAgIC4gJ0ZST00gY2hhbmdlX3N0YXRlX21hY2hpbmUgcyAnCiAgICAgICAgICAgIC4gJ0xFRlQgT1VURVIgSk9JTiBnZW5lcmFsX2NhdGFsb2cgZyAnCiAgICAgICAgICAgIC4gJ09OICggKHMuc3RhdGVfaWQgPSBnLmlkICkgT1IgKHMubmV4dF9zdGF0ZV9pZCA9IGcuaWQpICkgJwogICAgICAgICAgICAuICdXSEVSRSBzLnN0YXRlX2lkID0gPyBBTkQgZy5nZW5lcmFsX2NhdGFsb2dfY2xhc3MgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtTdGF0ZUlEfSwgXCRQYXJhbXtDbGFzc30gXSwKICAgICk7CgogICAgbXkgQE5leHRTdGF0ZUlEczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBATmV4dFN0YXRlSURzLCAkUm93WzBdOwogICAgfQoKICAgICMgaWYgdGhlIHN0YXJ0IHN0YXRlIHdhcyByZXF1ZXN0ZWQgYW5kIG1vcmUgdGhhbiBvbmUgc3RhcnQgc3RhdGUgd2FzIGZvdW5kCiAgICBpZiAoICEkUGFyYW17U3RhdGVJRH0gKSB7CgogICAgICAgIGlmICggIUBOZXh0U3RhdGVJRHMgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4gbm90IGdldCBpbml0aWFsIHN0YXRlIGZvciAnJFBhcmFte0NsYXNzfScgIgogICAgICAgICAgICAgICAgICAgIC4gIk5vIGluaXRpYWwgc3RhdGUgd2FzIGZvdW5kISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKCBzY2FsYXIgQE5leHRTdGF0ZUlEcyA+IDEgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4gbm90IGdldCBpbml0aWFsIHN0YXRlIGZvciAnJFBhcmFte0NsYXNzfScgIgogICAgICAgICAgICAgICAgICAgIC4gIk1vcmUgdGhhbiBvbmUgaW5pdGlhbCBzdGF0ZSB3YXMgZm91bmQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNhdmUgdmFsdWVzIGluIGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBOZXh0U3RhdGVJRHMsCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICApOwoKICAgIHJldHVybiBcQE5leHRTdGF0ZUlEczsKfQoKPWl0ZW0gU3RhdGVUcmFuc2l0aW9uR2V0RW5kU3RhdGVzKCkKCkdldCBhIHN0YXRlIHRyYW5zaXRpb24gZm9yIGEgZ2l2ZW4gc3RhdGUgaWQsIGJ1dCBvbmx5IHNob3cgdGhlIHBvc3NpYmxlIG5leHQgZW5kIHN0YXRlcy4KUmV0dXJucyBhbiBhcnJheSByZWZlcmVuY2Ugb2YgdGhlIG5leHQgZW5kIHN0YXRlIGlkcy4KCiAgICBteSAkTmV4dFN0YXRlSURzUmVmID0gJFN0YXRlTWFjaGluZU9iamVjdC0+U3RhdGVUcmFuc2l0aW9uR2V0RW5kU3RhdGVzKAogICAgICAgIFN0YXRlSUQgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlkIHdpdGhpbiB0aGUgZ2l2ZW4gY2xhc3MsIG9yIDAgdG8gaW5kaWNhdGUgdGhlIHN0YXJ0IHN0YXRlCiAgICAgICAgQ2xhc3MgICA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsICMgdGhlIG5hbWUgb2YgYSBnZW5lcmFsIGNhdGFsb2cgY2xhc3MKICAgICk7Cgo9Y3V0CgpzdWIgU3RhdGVUcmFuc2l0aW9uR2V0RW5kU3RhdGVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBpZiBTdGF0ZUlEIGFyZSBnaXZlbiAodGhleSBjYW4gYmUgMCkKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFN0YXRlSUQpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayB0aGF0IGNsYXNzIGlzIGdpdmVuCiAgICBpZiAoICEkUGFyYW17Q2xhc3N9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDbGFzcyEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgdGhlIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnU3RhdGVUcmFuc2l0aW9uR2V0RW5kU3RhdGVzOjpTdGF0ZUlEOjonIC4gJFBhcmFte1N0YXRlSUR9IC4gJzo6Q2xhc3M6OicgLiAkUGFyYW17Q2xhc3N9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAjIGNoZWNrIGlmIFN0YXRlSUQgYmVsb25ncyB0byB0aGUgZ2l2ZW4gY2xhc3MsIGJ1dCBvbmx5IGlmIHN0YXRlIGlkIGlzIG5vdCBhIHN0YXJ0IHN0YXRlICg9MCkKICAgIGlmICggJFBhcmFte1N0YXRlSUR9ICkgewoKICAgICAgICAjIGdldCBjbGFzcyBvZiBnaXZlbiBTdGF0ZUlECiAgICAgICAgbXkgJERhdGFSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgSXRlbUlEID0+ICRQYXJhbXtTdGF0ZUlEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIFN0YXRlSUQgYmVsb25ncyB0byBnaXZlbiBjbGFzcwogICAgICAgIGlmICggISREYXRhUmVmIHx8ICEleyREYXRhUmVmfSB8fCAkRGF0YVJlZi0+e0NsYXNzfSBuZSAkUGFyYW17Q2xhc3N9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiU3RhdGVJRCAkUGFyYW17U3RhdGVJRH0gaXMgbm90IGluIHRoZSBjbGFzcyAnJFBhcmFte0NsYXNzfSchIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGZpbmQgYWxsIHN0YXRlIGlkcyBhbmQgbmV4dF9zdGF0ZSBpZHMgd2hpY2ggYmVsb25nIHRvIHRoZSBnaXZlbiBjbGFzcwogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBESVNUSU5DVCBzLm5leHRfc3RhdGVfaWQgJwogICAgICAgICAgICAuICdGUk9NIGNoYW5nZV9zdGF0ZV9tYWNoaW5lIHMgJwogICAgICAgICAgICAuICdMRUZUIE9VVEVSIEpPSU4gZ2VuZXJhbF9jYXRhbG9nIGcgJwogICAgICAgICAgICAuICdPTiAoIChzLnN0YXRlX2lkID0gZy5pZCApIE9SIChzLm5leHRfc3RhdGVfaWQgPSBnLmlkKSApICcKICAgICAgICAgICAgLiAnV0hFUkUgcy5zdGF0ZV9pZCA9ID8gQU5EIGcuZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17U3RhdGVJRH0sIFwkUGFyYW17Q2xhc3N9IF0sCiAgICApOwoKICAgIG15IEBOZXh0U3RhdGVJRHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQE5leHRTdGF0ZUlEcywgJFJvd1swXTsKICAgIH0KCiAgICAjIGlmIHRoZSBzdGFydCBzdGF0ZSB3YXMgcmVxdWVzdGVkIGFuZCBtb3JlIHRoYW4gb25lIHN0YXJ0IHN0YXRlIHdhcyBmb3VuZAogICAgaWYgKCAhJFBhcmFte1N0YXRlSUR9ICkgewoKICAgICAgICBpZiAoICFATmV4dFN0YXRlSURzICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuIG5vdCBnZXQgaW5pdGlhbCBzdGF0ZSBmb3IgJyRQYXJhbXtDbGFzc30nICIKICAgICAgICAgICAgICAgICAgICAuICJObyBpbml0aWFsIHN0YXRlIHdhcyBmb3VuZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICggc2NhbGFyIEBOZXh0U3RhdGVJRHMgPiAxICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuIG5vdCBnZXQgaW5pdGlhbCBzdGF0ZSBmb3IgJyRQYXJhbXtDbGFzc30nICIKICAgICAgICAgICAgICAgICAgICAuICJNb3JlIHRoYW4gb25lIGluaXRpYWwgc3RhdGUgd2FzIGZvdW5kISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBidWlsZCBuZXh0IHN0YXRlIGlkcyBzdHJpbmcKICAgIG15ICROZXh0U3RhdGVJRHNTdHJpbmcgPSBqb2luICcsICcsIEBOZXh0U3RhdGVJRHM7CgogICAgIyBmaW5kIGFsbCBuZXh0IHN0YXRlIGlkcyB3aGljaCBhcmUgZW5kIHN0YXRlcwogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBESVNUSU5DVCBzLnN0YXRlX2lkICcKICAgICAgICAgICAgLiAnRlJPTSBjaGFuZ2Vfc3RhdGVfbWFjaGluZSBzICcKICAgICAgICAgICAgLiAiV0hFUkUgcy5zdGF0ZV9pZCBJTiAoICROZXh0U3RhdGVJRHNTdHJpbmcgKSAiCiAgICAgICAgICAgIC4gJ0FORCBzLm5leHRfc3RhdGVfaWQgPSAwJywKICAgICk7CgogICAgbXkgQE5leHRFbmRTdGF0ZUlEczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBATmV4dEVuZFN0YXRlSURzLCAkUm93WzBdOwogICAgfQoKICAgICMgc2F2ZSB2YWx1ZXMgaW4gY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQE5leHRFbmRTdGF0ZUlEcywKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICk7CgogICAgcmV0dXJuIFxATmV4dEVuZFN0YXRlSURzOwp9Cgo9aXRlbSBTdGF0ZVRyYW5zaXRpb25MaXN0KCkKClJldHVybiBhIHN0YXRlIHRyYW5zaXRpb24gbGlzdCBoYXNoLWFycmF5IHJlZmVyZW5jZS4KVGhlIGhhc2gga2V5IGlzIHRoZSBTdGF0ZUlELCB0aGUgaGFzaCB2YWx1ZSBpcyBhbiBhcnJheSByZWZlcmVuY2Ugb2YgTmV4dFN0YXRlSURzLgoKICAgIG15ICRTdGF0ZVRyYW5zaXRpb25zUmVmID0gJFN0YXRlTWFjaGluZU9iamVjdC0+U3RhdGVUcmFuc2l0aW9uTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsICMgdGhlIG5hbWUgb2YgYSBnZW5lcmFsIGNhdGFsb2cgY2xhc3MKICAgICk7CgpSZXR1cm4gZXhhbXBsZToKCiAgICAkU3RhdGVUcmFuc2l0aW9uc1JlZiA9IHsKICAgICAgICAwID0+IFsgMSBdLAogICAgICAgIDEgPT4gWyAyLCAzLCA0IF0sCiAgICAgICAgMiA9PiBbIDUgXSwKICAgICAgICAzID0+IFsgNiwgNyBdLAogICAgICAgIDQgPT4gWyAwIF0sCiAgICAgICAgNSA9PiBbIDAgXSwKICAgICAgICA2ID0+IFsgMCBdLAogICAgICAgIDcgPT4gWyAwIF0sCiAgICB9OwoKPWN1dAoKc3ViIFN0YXRlVHJhbnNpdGlvbkxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NsYXNzfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ2xhc3MhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIHRoZSBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ1N0YXRlVHJhbnNpdGlvbkxpc3Q6OkNsYXNzOjonIC4gJFBhcmFte0NsYXNzfTsKICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICRDYWNoZSBpZiAkQ2FjaGU7CgogICAgIyBnZXQgc3RhdGUgdHJhbnNpdGlvbnMKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgRElTVElOQ1Qgcy5pZCAsIHMuc3RhdGVfaWQgLCBzLm5leHRfc3RhdGVfaWQgLCBnLmdlbmVyYWxfY2F0YWxvZ19jbGFzcyAnCiAgICAgICAgICAgIC4gJ0ZST00gY2hhbmdlX3N0YXRlX21hY2hpbmUgcyAnCiAgICAgICAgICAgIC4gJ0xFRlQgT1VURVIgSk9JTiBnZW5lcmFsX2NhdGFsb2cgZyAnCiAgICAgICAgICAgIC4gJ09OICggKHMuc3RhdGVfaWQgPSBnLmlkICkgT1IgKHMubmV4dF9zdGF0ZV9pZCA9IGcuaWQpICkgJwogICAgICAgICAgICAuICdXSEVSRSBnLmdlbmVyYWxfY2F0YWxvZ19jbGFzcyA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NsYXNzfSBdLAogICAgKTsKCiAgICBteSAlU3RhdGVUcmFuc2l0aW9uOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEB7ICRTdGF0ZVRyYW5zaXRpb257ICRSb3dbMV0gfSB9LCAkUm93WzJdOwogICAgfQoKICAgICMgc2F2ZSB2YWx1ZXMgaW4gY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcJVN0YXRlVHJhbnNpdGlvbiwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICk7CgogICAgcmV0dXJuIFwlU3RhdGVUcmFuc2l0aW9uOwp9Cgo9aXRlbSBTdGF0ZVRyYW5zaXRpb25VcGRhdGUoKQoKVXBkYXRlIHRoZSBuZXh0IHN0YXRlIG9mIGFuIGV4aXN0aW5nIG5ldyBzdGF0ZSB0cmFuc2l0aW9uLgpSZXR1cm5zIHRoZSB0cmFuc2l0aW9uIGlkIG9uIHN1Y2Nlc3MuCgogICAgbXkgJFVwZGF0ZVN1Y2Nlc3MgPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZVRyYW5zaXRpb25VcGRhdGUoCiAgICAgICAgU3RhdGVJRCAgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlkIHdpdGhpbiB0aGUgZ2l2ZW4gY2xhc3MsIG9yIDAgdG8gaW5kaWNhdGUgdGhlIHN0YXJ0IHN0YXRlCiAgICAgICAgTmV4dFN0YXRlSUQgICAgPT4gMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlkIHdpdGhpbiB0aGUgZ2l2ZW4gY2xhc3MsIG9yIDAgdG8gaW5kaWNhdGUgYW4gZW5kIHN0YXRlCiAgICAgICAgTmV3TmV4dFN0YXRlSUQgPT4gMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlkIHdpdGhpbiB0aGUgZ2l2ZW4gY2xhc3MsIG9yIDAgdG8gaW5kaWNhdGUgYW4gZW5kIHN0YXRlCiAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLCAjIHRoZSBuYW1lIG9mIGEgZ2VuZXJhbCBjYXRhbG9nIGNsYXNzCiAgICApOwoKPWN1dAoKc3ViIFN0YXRlVHJhbnNpdGlvblVwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgaWYgU3RhdGVJRCwgTmV4dFN0YXRlSUQgYW5kIE5ld05leHRTdGF0ZUlEIGFyZSBnaXZlbiAodGhleSBjYW4gYmUgMCkKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFN0YXRlSUQgTmV4dFN0YXRlSUQgTmV3TmV4dFN0YXRlSUQpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayB0aGF0IGNsYXNzIGlzIGdpdmVuCiAgICBpZiAoICEkUGFyYW17Q2xhc3N9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDbGFzcyEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgdGhhdCBub3QgYm90aCBTdGF0ZUlEIGFuZCBOZXh0U3RhdGVJRCBhcmUgemVybwogICAgaWYgKCAhJFBhcmFte1N0YXRlSUR9ICYmICEkUGFyYW17TmV4dFN0YXRlSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiU3RhdGVJRCBhbmQgTmV4dFN0YXRlSUQgY2FuJ3QgYm90aCBiZSB6ZXJvISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayB0aGF0IG5vdCBib3RoIFN0YXRlSUQgYW5kIE5ld05leHRTdGF0ZUlEIGFyZSB6ZXJvCiAgICBpZiAoICEkUGFyYW17U3RhdGVJRH0gJiYgISRQYXJhbXtOZXdOZXh0U3RhdGVJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJTdGF0ZUlEIGFuZCBOZXdOZXh0U3RhdGVJRCBjYW4ndCBib3RoIGJlIHplcm8hIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRlZmluZSBsb29rdXAgaGFzaCBmb3Igc3RhdGUgbmFtZQogICAgbXkgJVN0YXRlSUQyU3RhdGU7CgogICAgIyBjaGVjayBpZiBTdGF0ZUlELCBOZXh0U3RhdGVJRCBhbmQgTmV3TmV4dFN0YXRlSUQgYmVsb25nIHRvIHRoZSBnaXZlbiBjbGFzcwogICAgQVJHVU1FTlQ6CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTdGF0ZUlEIE5leHRTdGF0ZUlEIE5ld05leHRTdGF0ZUlEKSkgewoKICAgICAgICAkU3RhdGVJRDJTdGF0ZXsgJFBhcmFteyRBcmd1bWVudH0gfSA9ICRTZWxmLT5TdGF0ZUxvb2t1cCgKICAgICAgICAgICAgU3RhdGVJRCA9PiAkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgQ2xhc3MgICA9PiAkUGFyYW17Q2xhc3N9LAogICAgICAgICk7CgogICAgICAgICMgZG9udCBjaGVjayB6ZXJvIHZhbHVlcwogICAgICAgIG5leHQgQVJHVU1FTlQgaWYgISRQYXJhbXskQXJndW1lbnR9OwoKICAgICAgICAjIGdldCBjbGFzcwogICAgICAgIG15ICREYXRhUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIGlkIGJlbG9uZ3MgdG8gZ2l2ZW4gY2xhc3MKICAgICAgICBpZiAoICEkRGF0YVJlZiB8fCAhJXskRGF0YVJlZn0gfHwgJERhdGFSZWYtPntDbGFzc30gbmUgJFBhcmFte0NsYXNzfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRBcmd1bWVudCAkUGFyYW17JEFyZ3VtZW50fSBpcyBub3QgaW4gdGhlIGNsYXNzICckUGFyYW17Q2xhc3N9JyEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZG8gbm90IHVwZGF0ZSBpZiB0aGUgbmV3IG5leHQgc3RhdGUgaXMgdGhlIHNhbWUKICAgIHJldHVybiAxIGlmICRQYXJhbXtOZXh0U3RhdGVJRH0gPT0gJFBhcmFte05ld05leHRTdGF0ZUlEfTsKCiAgICAjIGdldCB0aGUgZXhpc3Rpbmcgc3RhdGUgdHJhbnNpdGlvbiBpZCB0aGF0IHNob3VsZCBiZSB1cGRhdGVkCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIERJU1RJTkNUIHMuaWQgJwogICAgICAgICAgICAuICdGUk9NIGNoYW5nZV9zdGF0ZV9tYWNoaW5lIHMgJwogICAgICAgICAgICAuICdMRUZUIE9VVEVSIEpPSU4gZ2VuZXJhbF9jYXRhbG9nIGcgJwogICAgICAgICAgICAuICdPTiAoIChzLnN0YXRlX2lkID0gZy5pZCApIE9SIChzLm5leHRfc3RhdGVfaWQgPSBnLmlkKSApICcKICAgICAgICAgICAgLiAnV0hFUkUgcy5zdGF0ZV9pZCA9ID8gQU5EIHMubmV4dF9zdGF0ZV9pZCA9ID8gJwogICAgICAgICAgICAuICdBTkQgZy5nZW5lcmFsX2NhdGFsb2dfY2xhc3MgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17U3RhdGVJRH0sIFwkUGFyYW17TmV4dFN0YXRlSUR9LCBcJFBhcmFte0NsYXNzfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgIG15ICRUcmFuc2l0aW9uSUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRUcmFuc2l0aW9uSUQgPSAkUm93WzBdOwogICAgfQoKICAgICMgY2hlY2sgdGhhdCB0aGUgc3RhdGUgdHJhbnNpdGlvbiB0aGF0IHNob3VsZCBiZSB1cGRhdGVkIGV4aXN0cwogICAgaWYgKCAhJFRyYW5zaXRpb25JRCApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbiBub3QgdXBkYXRlIHN0YXRlIHRyYW5zaXRpb24hIEEgc3RhdGUgdHJhbnNpdGlvbiB3aXRoICIKICAgICAgICAgICAgICAgIC4gIlN0YXRlSUQgJFBhcmFte1N0YXRlSUR9IGFuZCBOZXh0U3RhdGVJRCAkUGFyYW17TmV4dFN0YXRlSUR9IGRvZXMgbm90IGV4aXN0ISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBwcmV2ZW50IHNldHRpbmcgYW4gZW5kIHN0YXRlIHRyYW5zaXRpb24sIGlmIG90aGVyIHN0YXRlIHRyYW5zaXN0aW9ucyBleGlzdCBhbHJlYWR5CiAgICBpZiAoICEkUGFyYW17TmV3TmV4dFN0YXRlSUR9ICkgewoKICAgICAgICAjIGNoZWNrIGlmIG90aGVyIHN0YXRlIHRyYW5zaXN0aW9ucyBleGlzdCBmb3IgdGhlIGdpdmVuIFN0YXRlSUQKICAgICAgICBteSAkTmV4dFN0YXRlSURzID0gJFNlbGYtPlN0YXRlVHJhbnNpdGlvbkdldCgKICAgICAgICAgICAgU3RhdGVJRCA9PiAkUGFyYW17U3RhdGVJRH0sCiAgICAgICAgICAgIENsYXNzICAgPT4gJFBhcmFte0NsYXNzfSwKICAgICAgICApOwoKICAgICAgICAjIFRoZSBvbGQgc3RhdGUgdHJhbnNpdGlvbiwgd2hpY2ggaXMgdmVyaWZpZWQgdG8gZXhpc3QsIGRvZXMgbm90IGNvdW50IGluIHRoaXMgY2hlY2sKICAgICAgICBpZiAoICROZXh0U3RhdGVJRHMgJiYgc2NhbGFyIEB7JE5leHRTdGF0ZUlEc30gPiAxICkgewoKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbiBub3Qgc2V0IHN0YXRlICIKICAgICAgICAgICAgICAgICAgICAuICInJFN0YXRlSUQyU3RhdGV7JFBhcmFte1N0YXRlSUR9fScgKElEOiAkUGFyYW17U3RhdGVJRH0pIGFzIGVuZCBzdGF0ZSwgIgogICAgICAgICAgICAgICAgICAgIC4gImJlY2F1c2Ugb3RoZXIgZm9sbG93aW5nIHN0YXRlcyBleGlzdCwgd2hpY2ggbXVzdCBiZSBkZWxldGVkIGZpcnN0ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyB1cGRhdGUgc3RhdGUgdHJhbnNpdGlvbgogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICdVUERBVEUgY2hhbmdlX3N0YXRlX21hY2hpbmUgJwogICAgICAgICAgICAuICdTRVQgbmV4dF9zdGF0ZV9pZCA9ID8gJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte05ld05leHRTdGF0ZUlEfSwgXCRUcmFuc2l0aW9uSUQgXSwKICAgICk7CgogICAgIyBjbGVhbnVwIHN0YXRlbWFjaGluZSBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBTdGF0ZUxvb2t1cCgpCgpUaGlzIG1ldGhvZCBkb2VzIGEgbG9va3VwIGZvciBhIHN0YXRlLiBJZiBhIHN0YXRlIGlkIGlzIGdpdmVuLAppdCByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBzdGF0ZS4gSWYgYSBzdGF0ZSBuYW1lIGlzIGdpdmVuLAp0aGUgYXBwcm9wcmlhdGUgaWQgaXMgcmV0dXJuZWQuCgogICAgbXkgJFN0YXRlID0gJFN0YXRlTWFjaGluZU9iamVjdC0+U3RhdGVMb29rdXAoCiAgICAgICAgU3RhdGVJRCA9PiAxMjM0LAogICAgICAgIENsYXNzICAgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgKTsKCiAgICBteSAkU3RhdGVJRCA9ICRTdGF0ZU1hY2hpbmVPYmplY3QtPlN0YXRlTG9va3VwKAogICAgICAgIFN0YXRlICAgPT4gJ2FjY2VwdGVkJywKICAgICAgICBDbGFzcyAgID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICk7Cgo9Y3V0CgpzdWIgU3RhdGVMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIENsYXNzIHBhcmFtZXRlcgogICAgaWYgKCAhJFBhcmFte0NsYXNzfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ2xhc3MhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIFRoZSBTdGF0ZUlEICcwJyBpcyBhIHNwZWNpYWwgY2FzZS4gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IGl0CiAgICAjIGNhbiBpbmRpY2F0ZSAnKlNUQVJUKicgb3IgJypFTkQqJy4gU28gcmV0dXJuICcwJyBpbiB0aGF0IGNhc2UsCiAgICAjIGFuZCBkbyBub3QgZmxvb2QgdGhlIGVycm9yIGxvZy4KICAgIGlmICgKICAgICAgICBkZWZpbmVkICRQYXJhbXtTdGF0ZUlEfQogICAgICAgICYmICRQYXJhbXtTdGF0ZUlEfSBlcSAnMCcKICAgICAgICAmJiAhZGVmaW5lZCAkUGFyYW17U3RhdGV9CiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybiAnMCc7CiAgICB9CgogICAgIyBUaGUgU3RhdGUgJzAnIGlzIGEgc3BlY2lhbCBjYXNlLiBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgaXQKICAgICMgY2FuIGluZGljYXRlICcqU1RBUlQqJyBvciAnKkVORConLiBTbyByZXR1cm4gJzAnIGluIHRoYXQgY2FzZSwKICAgICMgYW5kIGRvIG5vdCBmbG9vZCB0aGUgZXJyb3IgbG9nLgogICAgaWYgKAogICAgICAgIGRlZmluZWQgJFBhcmFte1N0YXRlfQogICAgICAgICYmICRQYXJhbXtTdGF0ZX0gZXEgJzAnCiAgICAgICAgJiYgIWRlZmluZWQgJFBhcmFte1N0YXRlSUR9CiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybiAnMCc7CiAgICB9CgogICAgIyBlaXRoZXIgU3RhdGVJRCBvciBTdGF0ZSBtdXN0IGJlIHBhc3NlZAogICAgaWYgKCAhJFBhcmFte1N0YXRlSUR9ICYmICEkUGFyYW17U3RhdGV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTdGF0ZUlEIG9yIFN0YXRlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBvbmx5IG9uZSBwYXJhbWV0ZXIgU3RhdGUgb3IgU3RhdGVJRCBpcyBhbGxvd2VkCiAgICBpZiAoICRQYXJhbXtTdGF0ZUlEfSAmJiAkUGFyYW17U3RhdGV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTdGF0ZUlEIE9SIFN0YXRlIC0gbm90IGJvdGghJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCB0aGUgY2hhbmdlIHN0YXRlcyBmcm9tIHRoZSBnZW5lcmFsIGNhdGFsb2cKICAgIG15ICRTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJFBhcmFte0NsYXNzfSwKICAgICk7CgogICAgIyBjb252ZXJ0IHN0YXRlIGxpc3QgaW50byBhIGxvb2t1cCBoYXNoCiAgICBteSAlU3RhdGVJRDJOYW1lOwogICAgaWYgKCAkU3RhdGVMaXN0ICYmIHJlZiAkU3RhdGVMaXN0IGVxICdIQVNIJyAmJiAleyRTdGF0ZUxpc3R9ICkgewogICAgICAgICVTdGF0ZUlEMk5hbWUgPSAleyRTdGF0ZUxpc3R9OwogICAgfQoKICAgICMgY2hlY2sgdGhlIHN0YXRlIGhhc2gKICAgIGlmICggISVTdGF0ZUlEMk5hbWUgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdDb3VsZCBub3QgcmV0cmlldmUgY2hhbmdlIHN0YXRlcyBmcm9tIHRoZSBnZW5lcmFsIGNhdGFsb2cuJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICggJFBhcmFte1N0YXRlSUR9ICkgewogICAgICAgIHJldHVybiAkU3RhdGVJRDJOYW1leyAkUGFyYW17U3RhdGVJRH0gfTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIHJldmVyc2Uga2V5IC0gdmFsdWUgcGFpcnMgdG8gaGF2ZSB0aGUgbmFtZSBhcyBrZXlzCiAgICAgICAgbXkgJVN0YXRlTmFtZTJJRCA9IHJldmVyc2UgJVN0YXRlSUQyTmFtZTsKCiAgICAgICAgcmV0dXJuICRTdGF0ZU5hbWUySUR7ICRQYXJhbXtTdGF0ZX0gfTsKICAgIH0KfQoKPWl0ZW0gU3RhdGVMaXN0KCkKClRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIHN0YXRlcyBmb3IgYSBjYXRhbG9nIGNsYXNzLgoKICAgIG15ICRTdGF0ZUxpc3QgPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZUxpc3QoCiAgICAgICAgQ2xhc3MgID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcmVmZXJlbmNlIHRvIGFuIGFycmF5IG9mIGhhc2hyZWZzLiBUaGUgZWxlbWVudCAnS2V5JyBpcyB0aGVuCnRoZSBzdGF0ZSBpZCBhbmQgdGhlIGVsZW1lbnQgJ1ZhbHVlJyBpcyB0aGUgbmFtZSBvZiB0aGUgc3RhdGUuIFRoZSBhcnJheSBlbGVtZW50cwphcmUgc29ydGVkIGJ5IHN0YXRlIGlkLgoKICAgIG15ICRTdGF0ZUxpc3QgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAxNTYsCiAgICAgICAgICAgIFZhbHVlID0+ICdhcHByb3ZlZCcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+IDE1NywKICAgICAgICAgICAgVmFsdWUgPT4gJ2luIHByb2dyZXNzJywKICAgICAgICB9LAogICAgXTsKCj1jdXQKCnN1YiBTdGF0ZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBdHRyaWJ1dGUgKHF3KENsYXNzIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEF0dHJpYnV0ZX0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBdHRyaWJ1dGUhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjaGFuZ2Ugc3RhdGUgbGlzdAogICAgbXkgJFN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAkUGFyYW17Q2xhc3N9LAogICAgKSB8fCB7fTsKCiAgICAjIHRvIHN0b3JlIGFuIGFycmF5IG9mIGhhc2ggcmVmcwogICAgbXkgQEFycmF5SGFzaFJlZjsKCiAgICAjIGFzc2VtYmxlIHRoZSBhcnJheSBvZiBoYXNoIHJlZnMgd2l0aCBhbGwgc3RhdGVzCiAgICBmb3IgbXkgJFN0YXRlSUQgKCBzb3J0IGtleXMgJXskU3RhdGVMaXN0fSApIHsKICAgICAgICBwdXNoIEBBcnJheUhhc2hSZWYsIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgIFZhbHVlID0+ICRTdGF0ZUxpc3QtPnskU3RhdGVJRH0sCiAgICAgICAgfTsKICAgIH0KCiAgICByZXR1cm4gXEBBcnJheUhhc2hSZWY7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXI7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OkV2ZW50SGFuZGxlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKdXNlIHZhcnMgcXcoQElTQSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpFbmNvZGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNU3RhdGVNYWNoaW5lJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VmlydHVhbEZTJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlciAtIHdvcmtvcmRlciBsaWIKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGZ1bmN0aW9ucyBmb3Igd29ya29yZGVycyBpbiBJVFNNQ2hhbmdlTWFuYWdlbWVudC4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJFdvcmtPcmRlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgc2V0IHRoZSBkZWJ1ZyBmbGFnCiAgICAkU2VsZi0+e0RlYnVnfSA9ICRQYXJhbXtEZWJ1Z30gfHwgMDsKCiAgICAjIGdldCB0aGUgY2FjaGUgdHlwZSBhbmQgVFRMIChpbiBzZWNvbmRzKQogICAgJFNlbGYtPntDYWNoZVR5cGV9ID0gJ0lUU01DaGFuZ2VNYW5hZ2VtZW50JzsKICAgICRTZWxmLT57Q2FjaGVUVEx9ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSVRTTUNoYW5nZTo6Q2FjaGVUVEwnKSAqIDYwOwoKICAgIEBJU0EgPSAoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpFdmVudEhhbmRsZXInLAogICAgKTsKCiAgICAjIGluaXQgb2YgZXZlbnQgaGFuZGxlcgogICAgJFNlbGYtPkV2ZW50SGFuZGxlckluaXQoCiAgICAgICAgQ29uZmlnID0+ICdJVFNNV29ya09yZGVyOjpFdmVudE1vZHVsZScsCiAgICApOwoKICAgICMgZ2V0IGRhdGFiYXNlIHR5cGUKICAgICRTZWxmLT57REJUeXBlfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT57J0RCOjpUeXBlJ30gfHwgJyc7CiAgICAkU2VsZi0+e0RCVHlwZX0gPSBsYyAkU2VsZi0+e0RCVHlwZX07CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBXb3JrT3JkZXJBZGQoKQoKQWRkIGEgbmV3IHdvcmtvcmRlci4KSW50ZXJuYWxseSBmaXJzdCBhIG1pbmltYWwgd29ya29yZGVyIGlzIGNyZWF0ZWQsCnRoZW4gV29ya09yZGVyVXBkYXRlKCkgaXMgY2FsbGVkIGZvciBzZXR0aW5nIHRoZSByZW1haW5pbmcgYXJndW1lbnRzLgoKICAgIG15ICRXb3JrT3JkZXJJRCA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckFkZCgKICAgICAgICBDaGFuZ2VJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CgpvcgoKICAgIG15ICRXb3JrT3JkZXJJRCA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckFkZCgKICAgICAgICBDaGFuZ2VJRCAgICAgICAgICAgPT4gMTIzLAogICAgICAgIFdvcmtPcmRlclRpdGxlICAgICA9PiAnUmVwbGFjZW1lbnQgb2YgbWFpbCBzZXJ2ZXInLCAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSW5zdHJ1Y3Rpb24gICAgICAgID0+ICdJbnN0YWxsIHRoZSB0aGUgbmV3IHNlcnZlcicsICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBSZXBvcnQgICAgICAgICAgICAgPT4gJ0luc3RhbGxlZCBuZXcgc2VydmVyIHdpdGhvdXQgcHJvYmxlbXMnLCAgICMgKG9wdGlvbmFsKQogICAgICAgIFdvcmtPcmRlclN0YXRlSUQgICA9PiAxNTcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIG9yIFdvcmtPcmRlclN0YXRlID0+ICdyZWFkeScKICAgICAgICBXb3JrT3JkZXJTdGF0ZSAgICAgPT4gJ3JlYWR5JywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBvciBXb3JrT3JkZXJTdGF0ZUlEID0+IDE1NwogICAgICAgIFdvcmtPcmRlclR5cGVJRCAgICA9PiAxNjEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIG9yIFdvcmtPcmRlclR5cGUgPT4gJ3BpcicKICAgICAgICBXb3JrT3JkZXJUeXBlICAgICAgPT4gJ3JlYWR5JywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBvciBXb3JrT3JkZXJUeXBlSUQgPT4gMTYxCiAgICAgICAgV29ya09yZGVyQWdlbnRJRCAgID0+IDgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBQbGFubmVkU3RhcnRUaW1lICAgPT4gJzIwMDktMTAtMTIgMDA6MDA6MDEnLCAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFBsYW5uZWRFbmRUaW1lICAgICA9PiAnMjAwOS0xMC0xNSAxNTowMDowMCcsICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQWN0dWFsU3RhcnRUaW1lICAgID0+ICcyMDA5LTEwLTE0IDAwOjAwOjAxJywgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBBY3R1YWxFbmRUaW1lICAgICAgPT4gJzIwMDktMDEtMjAgMDA6MDA6MDEnLCAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFBsYW5uZWRFZmZvcnQgICAgICA9PiAxMjMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRHluYW1pY0ZpZWxkX1ggICAgID0+ICdTdW4nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBEeW5hbWljRmllbGRfWSAgICAgPT4gJ0VhcnRoJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBXb3JrT3JkZXJBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2hhbmdlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIHRoYXQgbm90IGJvdGggV29ya09yZGVyU3RhdGUgYW5kIFdvcmtPcmRlclN0YXRlSUQgYXJlIGdpdmVuCiAgICBpZiAoICRQYXJhbXtXb3JrT3JkZXJTdGF0ZX0gJiYgJFBhcmFte1dvcmtPcmRlclN0YXRlSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBlaXRoZXIgV29ya09yZGVyU3RhdGUgT1IgV29ya09yZGVyU3RhdGVJRCAtIG5vdCBib3RoIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBpZiBhIFN0YXRlIGlzIGdpdmVuLCB0aGVuIGxvb2sgdXAgdGhlIElECiAgICBpZiAoICRQYXJhbXtXb3JrT3JkZXJTdGF0ZX0gKSB7CiAgICAgICAgJFBhcmFte1dvcmtPcmRlclN0YXRlSUR9ID0gJFNlbGYtPldvcmtPcmRlclN0YXRlTG9va3VwKAogICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZSA9PiAkUGFyYW17V29ya09yZGVyU3RhdGV9LAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRoZSB3b3Jrb3JkZXIgc3RhdGUgb3RoZXJ3aXNlIHRoZSB1cGRhdGUgZmFpbHMKICAgICAgICAjIGFzIGJvdGggV29ya09yZGVyU3RhdGUgYW5kIFdvcmtPcmRlclN0YXRlSUQgZXhpc3RzIHRoZW4KICAgICAgICBkZWxldGUgJFBhcmFte1dvcmtPcmRlclN0YXRlfTsKICAgIH0KCiAgICAjIGNoZWNrIHRoYXQgbm90IGJvdGggV29ya09yZGVyVHlwZSBhbmQgV29ya09yZGVyVHlwZUlEIGFyZSBnaXZlbgogICAgaWYgKCAkUGFyYW17V29ya09yZGVyVHlwZX0gJiYgJFBhcmFte1dvcmtPcmRlclR5cGVJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIGVpdGhlciBXb3JrT3JkZXJUeXBlIE9SIFdvcmtPcmRlclR5cGVJRCAtIG5vdCBib3RoIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBpZiBUeXBlIGlzIGdpdmVuLCB0aGVuIGxvb2sgdXAgdGhlIElECiAgICBpZiAoICRQYXJhbXtXb3JrT3JkZXJUeXBlfSApIHsKICAgICAgICAkUGFyYW17V29ya09yZGVyVHlwZUlEfSA9ICRTZWxmLT5Xb3JrT3JkZXJUeXBlTG9va3VwKAogICAgICAgICAgICBXb3JrT3JkZXJUeXBlID0+ICRQYXJhbXtXb3JrT3JkZXJUeXBlfSwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0aGUgd29ya29yZGVyIHR5cGUgb3RoZXJ3aXNlIHRoZSB1cGRhdGUgZmFpbHMKICAgICAgICAjIGFzIGJvdGggV29ya09yZGVyVHlwZSBhbmQgV29ya09yZGVyVHlwZUlEIGV4aXN0cyB0aGVuCiAgICAgICAgZGVsZXRlICRQYXJhbXtXb3JrT3JkZXJUeXBlfTsKICAgIH0KCiAgICAjIGdldCBhIHBsYWluIHRleHQgdmVyc2lvbiBvZiBhcmd1bWVudHMgd2hpY2ggbWlnaHQgY29udGFpbiBIVE1MIG1hcmt1cAogICAgQVJHVU1FTlQ6CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhJbnN0cnVjdGlvbiBSZXBvcnQpKSB7CgogICAgICAgIG5leHQgQVJHVU1FTlQgaWYgIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fTsKCiAgICAgICAgJFBhcmFteyIke0FyZ3VtZW50fVBsYWluIn0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvQXNjaWkoCiAgICAgICAgICAgIFN0cmluZyA9PiAkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICApOwoKICAgICAgICAjIEV2ZW4gd2hlbiBwYXNzZWQgYSBwbGFpbiBBU0NJSSBzdHJpbmcsCiAgICAgICAgIyBUb0FzY2lpKCkgY2FuIHJldHVybiBhIG5vbi11dGY4IHN0cmluZyB3aXRoIGNoYXJzIGluIHRoZSBleHRlbmRlZCByYW5nZS4KICAgICAgICAjIFVwZ3JhZGUgdG8gdXRmLTggaW4gb3JkZXIgdG8gY29tcGx5IHRvIHRoZSBPVFJTLWNvbnZlbnRpb24uCiAgICAgICAgdXRmODo6dXBncmFkZSggJFBhcmFteyIke0FyZ3VtZW50fVBsYWluIn0gKTsKICAgIH0KCiAgICAjIGNoZWNrIHRoZSBwYXJhbWV0ZXJzCiAgICByZXR1cm4gaWYgISRTZWxmLT5fQ2hlY2tXb3JrT3JkZXJQYXJhbXMoJVBhcmFtKTsKCiAgICAjIHRyaWdnZXIgV29ya09yZGVyQWRkUHJlLUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdXb3JrT3JkZXJBZGRQcmUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIHNldCBpbml0aWFsIFdvcmtPcmRlclN0YXRlSUQsIHVzZSBkZWZhdWx0IGlmIG5vdCBwYXNzZWQKICAgIG15ICRXb3JrT3JkZXJTdGF0ZUlEID0gZGVsZXRlICRQYXJhbXtXb3JrT3JkZXJTdGF0ZUlEfTsKICAgIGlmICggISRXb3JrT3JkZXJTdGF0ZUlEICkgewoKICAgICAgICAjIGdldCBpbml0aWFsIHdvcmtvcmRlciBzdGF0ZSBpZAogICAgICAgIG15ICROZXh0U3RhdGVJRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVN0YXRlTWFjaGluZScpLT5TdGF0ZVRyYW5zaXRpb25HZXQoCiAgICAgICAgICAgIFN0YXRlSUQgPT4gMCwKICAgICAgICAgICAgQ2xhc3MgICA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpTdGF0ZScsCiAgICAgICAgKTsKICAgICAgICAkV29ya09yZGVyU3RhdGVJRCA9ICROZXh0U3RhdGVJRHMtPlswXTsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IFdvcmtPcmRlclR5cGVJRCwgdXNlIGRlZmF1bHQgaWYgbm90IHBhc3NlZAogICAgbXkgJFdvcmtPcmRlclR5cGVJRCA9IGRlbGV0ZSAkUGFyYW17V29ya09yZGVyVHlwZUlEfTsKICAgIGlmICggISRXb3JrT3JkZXJUeXBlSUQgKSB7CgogICAgICAgICMgc2V0IGNvbmZpZyBvcHRpb24KICAgICAgICBteSAkQ29uZmlnT3B0aW9uID0gJ0lUU01Xb3JrT3JkZXI6OlR5cGU6OkRlZmF1bHQnOwoKICAgICAgICAjIGdldCBkZWZhdWx0IHdvcmtvcmRlciB0eXBlIGZyb20gY29uZmlnCiAgICAgICAgbXkgJERlZmF1bHRUeXBlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCRDb25maWdPcHRpb24pOwoKICAgICAgICAjIGNoZWNrIGlmIGRlZmF1bHQgdHlwZSBleGlzdHMgaW4gZ2VuZXJhbCBjYXRhbG9nCiAgICAgICAgbXkgJEl0ZW1EYXRhUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpXb3JrT3JkZXI6OlR5cGUnLAogICAgICAgICAgICBOYW1lICA9PiAkRGVmYXVsdFR5cGUsCiAgICAgICAgKTsKCiAgICAgICAgIyBlcnJvciBoYW5kbGluZyBiZWNhdXNlIG9mIGludmFsaWQgY29uZmlnIHNldHRpbmcKICAgICAgICBpZiAoICEkSXRlbURhdGFSZWYgfHwgcmVmICRJdGVtRGF0YVJlZiBuZSAnSEFTSCcgfHwgISV7JEl0ZW1EYXRhUmVmfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBkZWZhdWx0IFdvcmtPcmRlclR5cGUgJyREZWZhdWx0VHlwZScgIgogICAgICAgICAgICAgICAgICAgIC4gImluIHN5c2NvbmZpZyBvcHRpb24gJyRDb25maWdPcHRpb24nIGlzIGludmFsaWQhIENoZWNrIHRoZSBnZW5lcmFsIGNhdGFsb2chIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgZGVmYXVsdAogICAgICAgICRXb3JrT3JkZXJUeXBlSUQgPSAkSXRlbURhdGFSZWYtPntJdGVtSUR9OwogICAgfQoKICAgICMgZ2V0IGEgdW5pcXVlIHdvcmtvcmRlciBudW1iZXIKICAgIG15ICRXb3JrT3JkZXJOdW1iZXIgPSAkU2VsZi0+X0dldFdvcmtPcmRlck51bWJlciglUGFyYW0pOwoKICAgICMgYWRkIFdvcmtPcmRlciB0byBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBjaGFuZ2Vfd29ya29yZGVyICcKICAgICAgICAgICAgLiAnKGNoYW5nZV9pZCwgd29ya29yZGVyX251bWJlciwgd29ya29yZGVyX3N0YXRlX2lkLCB3b3Jrb3JkZXJfdHlwZV9pZCwgJwogICAgICAgICAgICAuICdjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KSAnCiAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17Q2hhbmdlSUR9LCBcJFdvcmtPcmRlck51bWJlciwgXCRXb3JrT3JkZXJTdGF0ZUlELCBcJFdvcmtPcmRlclR5cGVJRCwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgXSwKICAgICk7CgogICAgIyBnZXQgV29ya09yZGVySUQKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIGNoYW5nZV93b3Jrb3JkZXIgV0hFUkUgY2hhbmdlX2lkID0gPyBBTkQgd29ya29yZGVyX251bWJlciA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDaGFuZ2VJRH0sIFwkV29ya09yZGVyTnVtYmVyIF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkV29ya09yZGVySUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRXb3JrT3JkZXJJRCA9ICRSb3dbMF07CiAgICB9CgogICAgIyBjaGVjayBlcnJvcgogICAgaWYgKCAhJFdvcmtPcmRlcklEICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiV29ya09yZGVyQWRkKCkgZmFpbGVkISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkZWxldGUgY2FjaGUKICAgIGZvciBteSAkS2V5ICgKICAgICAgICAnV29ya09yZGVyR2V0OjpJRDo6JyAuICRXb3JrT3JkZXJJRCwKICAgICAgICAnV29ya09yZGVyTGlzdDo6Q2hhbmdlSUQ6OicgLiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgICdXb3JrT3JkZXJDaGFuZ2VFZmZvcnRzR2V0OjpDaGFuZ2VJRDo6JyAuICRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgJ1dvcmtPcmRlckNoYW5nZVRpbWVHZXQ6OkNoYW5nZUlEOjonIC4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICAnQ2hhbmdlR2V0OjpJRDo6JyAuICRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgKQogICAgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkS2V5LAogICAgICAgICk7CiAgICB9CgogICAgIyB0cmlnZ2VyIFdvcmtPcmRlckFkZFBvc3QtRXZlbnQKICAgICMgKHllcywgd2Ugd2FudCBkbyBkbyB0aGlzIGJlZm9yZSB0aGUgV29ya09yZGVyVXBkYXRlISkKICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ1dvcmtPcmRlckFkZFBvc3QnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBXb3JrT3JkZXJJRCAgICAgID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgV29ya09yZGVyTnVtYmVyICA9PiAkV29ya09yZGVyTnVtYmVyLAogICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZUlEID0+ICRXb3JrT3JkZXJTdGF0ZUlELAogICAgICAgICAgICBXb3JrT3JkZXJUeXBlSUQgID0+ICRXb3JrT3JkZXJUeXBlSUQsCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgdXBkYXRlIFdvcmtPcmRlciB3aXRoIHJlbWFpbmluZyBwYXJhbWV0ZXJzLAogICAgIyB0aGUgYWxyZWFkeSBoYW5kbGVzIHBhcmFtcyBoYXZlIGJlZW4gZGVsZXRlZCBmcm9tICVQYXJhbQogICAgbXkgJFVwZGF0ZVN1Y2Nlc3MgPSAkU2VsZi0+V29ya09yZGVyVXBkYXRlKAogICAgICAgICVQYXJhbSwKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICApOwoKICAgICMgY2hlY2sgdXBkYXRlIGVycm9yCiAgICBpZiAoICEkVXBkYXRlU3VjY2VzcyApIHsKCiAgICAgICAgIyBkZWxldGUgd29ya29yZGVyIGlmIGl0IGNvdWxkIG5vdCBiZSB1cGRhdGVkCiAgICAgICAgJFNlbGYtPldvcmtPcmRlckRlbGV0ZSgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuICRXb3JrT3JkZXJJRDsKfQoKPWl0ZW0gV29ya09yZGVyVXBkYXRlKCkKClVwZGF0ZSBhIHdvcmtvcmRlci4KTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBpcyByZW1vdmVkIGZyb20gQzxXb3JrT3JkZXJUaXRsZT4uClBhc3NpbmcgdW5kZWZpbmVkIHZhbHVlcyBpcyBnZW5lcmFsbHkgbm90IGFsbG93ZWQuIEFuIGV4Y2VwdGlvbgphcmUgdGhlIHBhcmFtZXRlcnMgQzxQbGFubmVkU3RhcnRUaW1lPiwgQzxQbGFubmVkRW5kVGltZT4sIEM8QWN0dWFsU3RhcnRUaW1lPiwgYW5kIEM8QWN0dWFsRW5kVGltZT4uClRoZXJlIHBhc3NpbmcgQzx1bmRlZj4gaW5kaWNhdGVzIHRoYXQgdGhlIHdvcmtvcmRlciB0aW1lIHNob3VsZCBiZSBjbGVhcmVkLgpBbm90aGVyIGV4Y2VwdGlvbiBpcyB0aGUgV29ya09yZGVyQWdlbnRJRC4gUGFzcyB1bmRlZiBmb3IgcmVtb3ZpbmcgdGhlIHdvcmtvcmRlciBhZ2VudC4KCiAgICBteSAkU3VjY2VzcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclVwZGF0ZSgKICAgICAgICBXb3JrT3JkZXJJRCAgICAgICAgPT4gNCwKICAgICAgICBXb3JrT3JkZXJOdW1iZXIgICAgPT4gNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFdvcmtPcmRlclRpdGxlICAgICA9PiAnUmVwbGFjZW1lbnQgb2YgbWFpbCBzZXJ2ZXInLCAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSW5zdHJ1Y3Rpb24gICAgICAgID0+ICdJbnN0YWxsIHRoZSB0aGUgbmV3IHNlcnZlcicsICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBSZXBvcnQgICAgICAgICAgICAgPT4gJ0luc3RhbGxlZCBuZXcgc2VydmVyIHdpdGhvdXQgcHJvYmxlbXMnLCAgICMgKG9wdGlvbmFsKQogICAgICAgIFdvcmtPcmRlclN0YXRlSUQgICA9PiAxNTcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIG9yIFdvcmtPcmRlclN0YXRlID0+ICdyZWFkeScKICAgICAgICBXb3JrT3JkZXJTdGF0ZSAgICAgPT4gJ3JlYWR5JywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBvciBXb3JrT3JkZXJTdGF0ZUlEID0+IDE1NwogICAgICAgIFdvcmtPcmRlclR5cGVJRCAgICA9PiAxNjEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIG9yIFdvcmtPcmRlclR5cGUgPT4gJ3BpcicKICAgICAgICBXb3JrT3JkZXJUeXBlICAgICAgPT4gJ3BpcicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBvciBXb3JrT3JkZXJTdGF0ZUlEID0+IDE2MQogICAgICAgIFdvcmtPcmRlckFnZW50SUQgICA9PiA4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIGNhbiBiZSB1bmRlZiBmb3IgcmVtb3ZpbmcgdGhlIHdvcmtvcmRlciBhZ2VudAogICAgICAgIFBsYW5uZWRTdGFydFRpbWUgICA9PiAnMjAwOS0xMC0xMiAwMDowMDowMScsICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpICd1bmRlZicgaW5kaWNhdGVzIGNsZWFyaW5nCiAgICAgICAgUGxhbm5lZEVuZFRpbWUgICAgID0+ICcyMDA5LTEwLTE1IDE1OjAwOjAwJywgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkgJ3VuZGVmJyBpbmRpY2F0ZXMgY2xlYXJpbmcKICAgICAgICBBY3R1YWxTdGFydFRpbWUgICAgPT4gJzIwMDktMTAtMTQgMDA6MDA6MDEnLCAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSAndW5kZWYnIGluZGljYXRlcyBjbGVhcmluZwogICAgICAgIEFjdHVhbEVuZFRpbWUgICAgICA9PiAnMjAwOS0wMS0yMCAwMDowMDowMScsICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpICd1bmRlZicgaW5kaWNhdGVzIGNsZWFyaW5nCiAgICAgICAgUGxhbm5lZEVmZm9ydCAgICAgID0+IDEyMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBBY2NvdW50ZWRUaW1lICAgICAgPT4gMTMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSB0aGUgdmFsdWUgaXMgYWRkZWQgdG8gdGhlIHZhbHVlIGluIHRoZSBkYXRhYmFzZQogICAgICAgIER5bmFtaWNGaWVsZF9YICAgICA9PiAnU3VuJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRHluYW1pY0ZpZWxkX1kgICAgID0+ICdFYXJ0aCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBOb051bWJlckNhbGMgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDAsIGlmIDEgaXQgcHJldmVudHMgYSByZWNhbGN1bGF0aW9uIG9mIHRoZSB3b3Jrb3JkZXIgbnVtYmVycwogICAgICAgIEJ5cGFzc1N0YXRlTWFjaGluZSA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMCwgaWYgMSB0aGUgc3RhdGUgbWFjaGluZSB3aWxsIGJlIGJ5cGFzc2VkCiAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICApOwoKQ29uc3RyYWludHM6CgpDPHh4eFN0YXJ0VGltZT4gaGFzIHRvIGJlIGJlZm9yZSBDPHh4eEVuZFRpbWU+LiBJZiBqdXN0IG9uZSBvZiB0aGUgcGFyYW1ldGVyIHBhaXIgaXMgcGFzc2VkCnRoZSBvdGhlciB0aW1lIGlzIHJldHJpZXZlZCBmcm9tIGRhdGFiYXNlLgpUaGUgQzxXb3JrT3JkZXJTdGF0ZUlEPiBpcyBjaGVja2VkIGFnYWluc3QgdGhlIHN0YXRlIG1hY2hpbmUuCgo9Y3V0CgpzdWIgV29ya09yZGVyVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFdvcmtPcmRlcklEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayB0aGF0IG5vdCBib3RoIFdvcmtPcmRlclN0YXRlIGFuZCBXb3JrT3JkZXJTdGF0ZUlEIGFyZSBnaXZlbgogICAgaWYgKCAkUGFyYW17V29ya09yZGVyU3RhdGV9ICYmICRQYXJhbXtXb3JrT3JkZXJTdGF0ZUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgZWl0aGVyIFdvcmtPcmRlclN0YXRlIE9SIFdvcmtPcmRlclN0YXRlSUQgLSBub3QgYm90aCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgd2hlbiB0aGUgU3RhdGUgaXMgZ2l2ZW4sIHRoZW4gbG9vayB1cCB0aGUgSUQKICAgIGlmICggJFBhcmFte1dvcmtPcmRlclN0YXRlfSApIHsKICAgICAgICAkUGFyYW17V29ya09yZGVyU3RhdGVJRH0gPSAkU2VsZi0+V29ya09yZGVyU3RhdGVMb29rdXAoCiAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlID0+ICRQYXJhbXtXb3JrT3JkZXJTdGF0ZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIHRoYXQgbm90IGJvdGggVHlwZSBhbmQgVHlwZUlEIGFyZSBnaXZlbgogICAgaWYgKCAkUGFyYW17V29ya09yZGVyVHlwZX0gJiYgJFBhcmFte1dvcmtPcmRlclR5cGVJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIGVpdGhlciBXb3JrT3JkZXJUeXBlIE9SIFdvcmtPcmRlclR5cGVJRCAtIG5vdCBib3RoIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBpZiBUeXBlIGlzIGdpdmVuLCB0aGVuIGxvb2sgdXAgdGhlIElECiAgICBpZiAoICRQYXJhbXtXb3JrT3JkZXJUeXBlfSApIHsKICAgICAgICAkUGFyYW17V29ya09yZGVyVHlwZUlEfSA9ICRTZWxmLT5Xb3JrT3JkZXJUeXBlTG9va3VwKAogICAgICAgICAgICBXb3JrT3JkZXJUeXBlID0+ICRQYXJhbXtXb3JrT3JkZXJUeXBlfSwKICAgICAgICApOwogICAgfQoKICAgICMgbm9ybWFsaXplIHRoZSBUaXRsZSwgd2hlbiBpdCBpcyBnaXZlbgogICAgaWYgKCAkUGFyYW17V29ya09yZGVyVGl0bGV9ICYmICFyZWYgJFBhcmFte1dvcmtPcmRlclRpdGxlfSApIHsKCiAgICAgICAgIyByZW1vdmUgbGVhZGluZyB3aGl0ZXNwYWNlCiAgICAgICAgJFBhcmFte1dvcmtPcmRlclRpdGxlfSA9fiBzeyBcQSBccysgfXt9eG1zOwoKICAgICAgICAjIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlCiAgICAgICAgJFBhcmFte1dvcmtPcmRlclRpdGxlfSA9fiBzeyBccysgXHogfXt9eG1zOwogICAgfQoKICAgICMgZ2V0IGEgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGFyZ3VtZW50cyB3aGljaCBtaWdodCBjb250YWluIEhUTUwgbWFya3VwCiAgICBBUkdVTUVOVDoKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEluc3RydWN0aW9uIFJlcG9ydCkpIHsKCiAgICAgICAgbmV4dCBBUkdVTUVOVCBpZiAhZXhpc3RzICRQYXJhbXskQXJndW1lbnR9OwoKICAgICAgICAkUGFyYW17IiR7QXJndW1lbnR9UGxhaW4ifSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9Bc2NpaSgKICAgICAgICAgICAgU3RyaW5nID0+ICRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICk7CgogICAgICAgICMgRXZlbiB3aGVuIHBhc3NlZCBhIHBsYWluIEFTQ0lJIHN0cmluZywKICAgICAgICAjIFRvQXNjaWkoKSBjYW4gcmV0dXJuIGEgbm9uLXV0Zjggc3RyaW5nIHdpdGggY2hhcnMgaW4gdGhlIGV4dGVuZGVkIHJhbmdlLgogICAgICAgICMgVXBncmFkZSB0byB1dGYtOCBpbiBvcmRlciB0byBjb21wbHkgdG8gdGhlIE9UUlMtY29udmVudGlvbi4KICAgICAgICB1dGY4Ojp1cGdyYWRlKCAkUGFyYW17IiR7QXJndW1lbnR9UGxhaW4ifSApOwogICAgfQoKICAgICMgZGVmYXVsdCB2YWx1ZXMgZm9yIHBsYW5uZWQgZWZmb3J0IGFuZCBhY2NvdW50ZWQgdGltZQogICAgIyB0aGlzIGF2b2lkcyBzdXBlcmZsb3VzIGhpc3RvcnkgZW50cmllcwogICAgQVJHVU1FTlQ6CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhQbGFubmVkRWZmb3J0IEFjY291bnRlZFRpbWUpKSB7CgogICAgICAgIG5leHQgQVJHVU1FTlQgaWYgIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fTsKCiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gfHw9IDA7CiAgICB9CgogICAgIyBjaGVjayB0aGUgZ2l2ZW4gcGFyYW1ldGVycwogICAgcmV0dXJuIGlmICEkU2VsZi0+X0NoZWNrV29ya09yZGVyUGFyYW1zKCVQYXJhbSk7CgogICAgIyBjaGVjayBzYW5pdHkgb2YgdGhlIG5ldyBzdGF0ZSB3aXRoIHRoZSBzdGF0ZSBtYWNoaW5lCiAgICBpZiAoICRQYXJhbXtXb3JrT3JkZXJTdGF0ZUlEfSApIHsKCiAgICAgICAgIyBnZXQgd29ya29yZGVyIGlkCiAgICAgICAgbXkgJFdvcmtPcmRlcklEID0gJFBhcmFte1dvcmtPcmRlcklEfTsKCiAgICAgICAgIyBkbyBub3QgZ2l2ZSBXb3JrT3JkZXJQb3NzaWJsZVN0YXRlc0dldCgpIHRoZSBXb3JrT3JkZXJJRAogICAgICAgICMgaWYgdGhlIHN0YXRlbWFjaGluZSBzaG91bGQgYmUgYnlwYXNzZWQuCiAgICAgICAgIyBXb3JrT3JkZXJQb3NzaWJsZVN0YXRlc0dldCgpIHdpbGwgdGhlbiByZXR1cm4gYWxsIHdvcmtvcmRlciBzdGF0ZXMKICAgICAgICBpZiAoICRQYXJhbXtCeXBhc3NTdGF0ZU1hY2hpbmV9ICkgewogICAgICAgICAgICAkV29ya09yZGVySUQgPSB1bmRlZjsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSBsaXN0IG9mIHBvc3NpYmxlIG5leHQgc3RhdGVzCiAgICAgICAgbXkgJFN0YXRlTGlzdCA9ICRTZWxmLT5Xb3JrT3JkZXJQb3NzaWJsZVN0YXRlc0dldCgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgICAgIGlmICggIWdyZXAgeyAkXy0+e0tleX0gPT0gJFBhcmFte1dvcmtPcmRlclN0YXRlSUR9IH0gQHskU3RhdGVMaXN0fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBzdGF0ZSAkUGFyYW17V29ya09yZGVyU3RhdGVJRH0gaXMgbm90IGEgcG9zc2libGUgbmV4dCBzdGF0ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IG9sZCBkYXRhIHRvIGJlIGdpdmVuIHRvIF9DaGVja1dvcmtPcmRlclBhcmFtcygpIGFuZCB0aGUgcG9zdCBldmVudCBoYW5kbGVyCiAgICBteSAkV29ya09yZGVyRGF0YSA9ICRTZWxmLT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgV29ya09yZGVySUQgPT4gJFBhcmFte1dvcmtPcmRlcklEfSwKICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBpZiB0aGUgdGltZXN0YW1wcyBhcmUgY29ycmVjdAogICAgcmV0dXJuIGlmICEkU2VsZi0+X0NoZWNrVGltZXN0YW1wcygKICAgICAgICAlUGFyYW0sCiAgICAgICAgV29ya09yZGVyRGF0YSA9PiAkV29ya09yZGVyRGF0YSwKICAgICk7CgogICAgIyB0cmlnZ2VyIFdvcmtPcmRlclVwZGF0ZVByZS1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnV29ya09yZGVyVXBkYXRlUHJlJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBzZXQgdGhlIHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcwogICAgS0VZOgogICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJVBhcmFtICkgewoKICAgICAgICBuZXh0IEtFWSBpZiAkS2V5ICF+IG17IFxBIER5bmFtaWNGaWVsZF8oLiopIFx6IH14bXM7CgogICAgICAgICMgc2F2ZSB0aGUgcmVhbCBuYW1lIG9mIHRoZSBkeW5hbWljIGZpZWxkICh3aXRob3V0IHByZWZpeCkKICAgICAgICBteSAkRHluYW1pY0ZpZWxkTmFtZSA9ICQxOwoKICAgICAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCBjb25maWcKICAgICAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgIE5hbWUgPT4gJER5bmFtaWNGaWVsZE5hbWUsCiAgICAgICAgKTsKCiAgICAgICAgIyB3cml0ZSB2YWx1ZSB0byBkeW5hbWljIGZpZWxkCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyktPlZhbHVlU2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRQYXJhbXtXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkUGFyYW17JEtleX0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgbWFwIHVwZGF0ZSBhdHRyaWJ1dGVzIHRvIGNvbHVtbiBuYW1lcwogICAgbXkgJUF0dHJpYnV0ZSA9ICgKICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICd0aXRsZScsCiAgICAgICAgV29ya09yZGVyTnVtYmVyICA9PiAnd29ya29yZGVyX251bWJlcicsCiAgICAgICAgSW5zdHJ1Y3Rpb24gICAgICA9PiAnaW5zdHJ1Y3Rpb24nLAogICAgICAgIFJlcG9ydCAgICAgICAgICAgPT4gJ3JlcG9ydCcsCiAgICAgICAgV29ya09yZGVyU3RhdGVJRCA9PiAnd29ya29yZGVyX3N0YXRlX2lkJywKICAgICAgICBXb3JrT3JkZXJUeXBlSUQgID0+ICd3b3Jrb3JkZXJfdHlwZV9pZCcsCiAgICAgICAgV29ya09yZGVyQWdlbnRJRCA9PiAnd29ya29yZGVyX2FnZW50X2lkJywKICAgICAgICBQbGFubmVkU3RhcnRUaW1lID0+ICdwbGFubmVkX3N0YXJ0X3RpbWUnLAogICAgICAgIFBsYW5uZWRFbmRUaW1lICAgPT4gJ3BsYW5uZWRfZW5kX3RpbWUnLAogICAgICAgIEFjdHVhbFN0YXJ0VGltZSAgPT4gJ2FjdHVhbF9zdGFydF90aW1lJywKICAgICAgICBBY3R1YWxFbmRUaW1lICAgID0+ICdhY3R1YWxfZW5kX3RpbWUnLAogICAgICAgIEluc3RydWN0aW9uUGxhaW4gPT4gJ2luc3RydWN0aW9uX3BsYWluJywKICAgICAgICBSZXBvcnRQbGFpbiAgICAgID0+ICdyZXBvcnRfcGxhaW4nLAogICAgKTsKCiAgICAjIGJ1aWxkIFNRTCB0byB1cGRhdGUgd29ya29yZGVyCiAgICBteSAkU1FMID0gJ1VQREFURSBjaGFuZ2Vfd29ya29yZGVyIFNFVCAnOwogICAgbXkgQEJpbmQ7CgogICAgIyBkZWZpbmUgdGhlIERlZmF1bHRUaW1lU3RhbXAKICAgIG15ICREZWZhdWx0VGltZVN0YW1wID0gJzk5OTktMDEtMDEgMDA6MDA6MDAnOwoKICAgIEFUVFJJQlVURToKICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICVBdHRyaWJ1dGUgKSB7CgogICAgICAgICMgcHJlc2VydmUgdGhlIG9sZCB2YWx1ZSwgd2hlbiB0aGUgY29sdW1uIGlzbid0IGluIGZ1bmN0aW9uIHBhcmFtZXRlcnMKICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAhZXhpc3RzICRQYXJhbXskQXR0cmlidXRlfTsKCiAgICAgICAgIyBhdHRyaWJ1dGUgaXMgZGVmaW5lZAogICAgICAgIGlmICggZGVmaW5lZCAkUGFyYW17JEF0dHJpYnV0ZX0gKSB7CiAgICAgICAgICAgICRTUUwgLj0gIiRBdHRyaWJ1dGV7JEF0dHJpYnV0ZX0gPSA/LCAiOwogICAgICAgICAgICBwdXNoIEBCaW5kLCBcJFBhcmFteyRBdHRyaWJ1dGV9OwogICAgICAgIH0KCiAgICAgICAgIyBpdCdzIG9rIGlmIHRoZSBXb3JrT3JkZXJBZ2VudElEIGlzIG5vdCBkZWZpbmVkCiAgICAgICAgZWxzaWYgKCAkQXR0cmlidXRlIGVxICdXb3JrT3JkZXJBZ2VudElEJyApIHsKICAgICAgICAgICAgJFNRTCAuPSAiJEF0dHJpYnV0ZXskQXR0cmlidXRlfSA9IE5VTEwsICI7CiAgICAgICAgfQoKICAgICAgICAjIGF0dHJpYnV0ZSBpcyBub3QgZGVmaW5lZCBhbmQgaXMgb25lIG9mIHRoZSB0aW1lIHBhcmFtZXRlcnMKICAgICAgICBlbHNpZiAoICRBdHRyaWJ1dGUgPX4gbXsgXEEgKCBBY3R1YWwgfCBQbGFubmVkICkgKCBTdGFydCB8IEVuZCApIFRpbWUgXHogfXhtcyApIHsKICAgICAgICAgICAgJFNRTCAuPSAiJEF0dHJpYnV0ZXskQXR0cmlidXRlfSA9ID8sICI7CiAgICAgICAgICAgIHB1c2ggQEJpbmQsIFwkRGVmYXVsdFRpbWVTdGFtcDsKICAgICAgICB9CiAgICB9CgogICAgIyBhZGRpdGlvbiBvZiBhY2NvdW50ZWQgdGltZQogICAgaWYgKCAkUGFyYW17QWNjb3VudGVkVGltZX0gKSB7CgogICAgICAgICMgZ2V0IGN1cnJlbnQgYWNjb3VudGVkIHRpbWUKICAgICAgICBteSAkQ3VycmVudEFjY291bnRlZFRpbWUgPSAkV29ya09yZGVyRGF0YS0+e0FjY291bnRlZFRpbWV9IHx8IDA7CgogICAgICAgICMgYWRkIG5ldyBhY2NvdXRlZCB0aW1lIHRvIGN1cnJlbnQgYWNjb3VudGVkIHRpbWUKICAgICAgICBteSAkQWNjb3VudGVkVGltZSA9ICRDdXJyZW50QWNjb3VudGVkVGltZSArICRQYXJhbXtBY2NvdW50ZWRUaW1lfTsKCiAgICAgICAgIyBkYiBxdW90ZQogICAgICAgICRBY2NvdW50ZWRUaW1lID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlF1b3RlKCAkQWNjb3VudGVkVGltZSwgJ051bWJlcicgKTsKCiAgICAgICAgIyBidWlsZCBTUUwgKHdpdGhvdXQgYmluZHMpCiAgICAgICAgJFNRTCAuPSAiYWNjb3VudGVkX3RpbWUgPSAkQWNjb3VudGVkVGltZSwgIjsKICAgIH0KCiAgICAjIHNldHRpbmcgb2YgcGxhbm5lZCBlZmZvcnQKICAgIGlmICggJFBhcmFte1BsYW5uZWRFZmZvcnR9ICkgewoKICAgICAgICAjIGRiIHF1b3RlCiAgICAgICAgJFBhcmFte1BsYW5uZWRFZmZvcnR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlF1b3RlKCAkUGFyYW17UGxhbm5lZEVmZm9ydH0sICdOdW1iZXInICk7CgogICAgICAgICMgYnVpbGQgU1FMICh3aXRob3V0IGJpbmRzKQogICAgICAgICRTUUwgLj0gInBsYW5uZWRfZWZmb3J0ID0gJFBhcmFte1BsYW5uZWRFZmZvcnR9LCAiOwogICAgfQoKICAgICRTUUwgLj0gJ2NoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsIGNoYW5nZV9ieSA9ID8gJzsKICAgIHB1c2ggQEJpbmQsIFwkUGFyYW17VXNlcklEfTsKICAgICRTUUwgLj0gJ1dIRVJFIGlkID0gPyc7CiAgICBwdXNoIEBCaW5kLCBcJFBhcmFte1dvcmtPcmRlcklEfTsKCiAgICAjIHVwZGF0ZSB3b3Jrb3JkZXIKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICBCaW5kID0+IFxAQmluZCwKICAgICk7CgogICAgIyBkZWxldGUgY2FjaGUKICAgIGZvciBteSAkS2V5ICgKICAgICAgICAnV29ya09yZGVyR2V0OjpJRDo6JyAuICRQYXJhbXtXb3JrT3JkZXJJRH0sCiAgICAgICAgJ1dvcmtPcmRlckxpc3Q6OkNoYW5nZUlEOjonIC4gJFdvcmtPcmRlckRhdGEtPntDaGFuZ2VJRH0sCiAgICAgICAgJ1dvcmtPcmRlckNoYW5nZUVmZm9ydHNHZXQ6OkNoYW5nZUlEOjonIC4gJFdvcmtPcmRlckRhdGEtPntDaGFuZ2VJRH0sCiAgICAgICAgJ1dvcmtPcmRlckNoYW5nZVRpbWVHZXQ6OkNoYW5nZUlEOjonIC4gJFdvcmtPcmRlckRhdGEtPntDaGFuZ2VJRH0sCiAgICAgICAgJ0NoYW5nZUdldDo6SUQ6OicgLiAkV29ya09yZGVyRGF0YS0+e0NoYW5nZUlEfSwKICAgICAgICApCiAgICB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRLZXksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRyaWdnZXIgV29ya09yZGVyVXBkYXRlUG9zdC1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnV29ya09yZGVyVXBkYXRlUG9zdCcsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICBPbGRXb3JrT3JkZXJEYXRhID0+ICRXb3JrT3JkZXJEYXRhLAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBXb3JrT3JkZXJHZXQoKQoKUmV0dXJuIGEgV29ya09yZGVyIGFzIGhhc2ggcmVmZXJlbmNlLgpXaGVuIHRoZSB3b3Jrb3JkZXIgZG9lcyBub3QgZXhpc3QsIGEgZmFsc2UgdmFsdWUgaXMgcmV0dXJuZWQuClRoZSBvcHRpb25hbCBvcHRpb24gQzxMb2dObz4gdHVybnMgb2ZmIGxvZ2dpbmcgd2hlbiB0aGUgd29ya29yZGVyIGRvZXMgbm90IGV4aXN0LgoKICAgIG15ICRXb3JrT3JkZXJSZWYgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgV29ya09yZGVySUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgTG9nTm8gICAgICAgPT4gMSwgICAgICAjIG9wdGlvbmFsLCB0dXJucyBvZmYgbG9nZ2luZyB3aGVuIHRoZSB3b3Jrb3JkZXIgZG9lcyBub3QgZXhpc3QKICAgICk7CgpUaGUgcmV0dXJuZWQgaGFzaCByZWZlcmVuY2UgY29udGFpbnMgZm9sbG93aW5nIGVsZW1lbnRzOgoKICAgICRXb3JrT3JkZXJ7V29ya09yZGVySUR9CiAgICAkV29ya09yZGVye0NoYW5nZUlEfQogICAgJFdvcmtPcmRlcntXb3JrT3JkZXJOdW1iZXJ9CiAgICAkV29ya09yZGVye1dvcmtPcmRlclRpdGxlfQogICAgJFdvcmtPcmRlcntJbnN0cnVjdGlvbn0KICAgICRXb3JrT3JkZXJ7SW5zdHJ1Y3Rpb25QbGFpbn0KICAgICRXb3JrT3JkZXJ7UmVwb3J0fQogICAgJFdvcmtPcmRlcntSZXBvcnRQbGFpbn0KICAgICRXb3JrT3JkZXJ7V29ya09yZGVyU3RhdGVJRH0KICAgICRXb3JrT3JkZXJ7V29ya09yZGVyU3RhdGV9ICAgICAgICAgICAgICAjIGZldGNoZWQgZnJvbSB0aGUgZ2VuZXJhbCBjYXRhbG9nCiAgICAkV29ya09yZGVye1dvcmtPcmRlclN0YXRlU2lnbmFsfSAgICAgICAgIyBmZXRjaGVkIGZyb20gU3lzQ29uZmlnCiAgICAkV29ya09yZGVye1dvcmtPcmRlclR5cGVJRH0KICAgICRXb3JrT3JkZXJ7V29ya09yZGVyVHlwZX0gICAgICAgICAgICAgICAjIGZldGNoZWQgZnJvbSB0aGUgZ2VuZXJhbCBjYXRhbG9nCiAgICAkV29ya09yZGVye1dvcmtPcmRlckFnZW50SUR9CiAgICAkV29ya09yZGVye1BsYW5uZWRTdGFydFRpbWV9CiAgICAkV29ya09yZGVye1BsYW5uZWRFbmRUaW1lfQogICAgJFdvcmtPcmRlcntBY3R1YWxTdGFydFRpbWV9CiAgICAkV29ya09yZGVye0FjdHVhbEVuZFRpbWV9CiAgICAkV29ya09yZGVye0FjY291bnRlZFRpbWV9CiAgICAkV29ya09yZGVye1BsYW5uZWRFZmZvcnR9CiAgICAkV29ya09yZGVye0R5bmFtaWNGaWVsZF9YfQogICAgJFdvcmtPcmRlcntEeW5hbWljRmllbGRfWX0KICAgICRXb3JrT3JkZXJ7Q3JlYXRlVGltZX0KICAgICRXb3JrT3JkZXJ7Q3JlYXRlQnl9CiAgICAkV29ya09yZGVye0NoYW5nZVRpbWV9CiAgICAkV29ya09yZGVye0NoYW5nZUJ5fQoKPWN1dAoKc3ViIFdvcmtPcmRlckdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoV29ya09yZGVySUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEF0dHJpYnV0ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICVXb3JrT3JkZXJEYXRhOwoKICAgICMgY2hlY2sgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdXb3JrT3JkZXJHZXQ6OklEOjonIC4gJFBhcmFte1dvcmtPcmRlcklEfTsKICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwoKICAgIGlmICgkQ2FjaGUpIHsKCiAgICAgICAgIyBnZXQgZGF0YSBmcm9tIGNhY2hlCiAgICAgICAgJVdvcmtPcmRlckRhdGEgPSAleyRDYWNoZX07CiAgICB9CgogICAgZWxzZSB7CgogICAgICAgICMgZ2V0IGRhdGEgZnJvbSBkYXRhYmFzZQogICAgICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBjaGFuZ2VfaWQsIHdvcmtvcmRlcl9udW1iZXIsIHRpdGxlLCAnCiAgICAgICAgICAgICAgICAuICdpbnN0cnVjdGlvbiwgaW5zdHJ1Y3Rpb25fcGxhaW4sICcKICAgICAgICAgICAgICAgIC4gJ3JlcG9ydCwgcmVwb3J0X3BsYWluLCAnCiAgICAgICAgICAgICAgICAuICd3b3Jrb3JkZXJfc3RhdGVfaWQsIHdvcmtvcmRlcl90eXBlX2lkLCB3b3Jrb3JkZXJfYWdlbnRfaWQsICcKICAgICAgICAgICAgICAgIC4gJ3BsYW5uZWRfc3RhcnRfdGltZSwgcGxhbm5lZF9lbmRfdGltZSwgYWN0dWFsX3N0YXJ0X3RpbWUsIGFjdHVhbF9lbmRfdGltZSwgJwogICAgICAgICAgICAgICAgLiAnY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgJwogICAgICAgICAgICAgICAgLiAnY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSwgJwogICAgICAgICAgICAgICAgLiAncGxhbm5lZF9lZmZvcnQsIGFjY291bnRlZF90aW1lICcKICAgICAgICAgICAgICAgIC4gJ0ZST00gY2hhbmdlX3dvcmtvcmRlciAnCiAgICAgICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17V29ya09yZGVySUR9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7V29ya09yZGVySUR9ICAgICAgPSAkUm93WzBdOwogICAgICAgICAgICAkV29ya09yZGVyRGF0YXtDaGFuZ2VJRH0gICAgICAgICA9ICRSb3dbMV07CiAgICAgICAgICAgICRXb3JrT3JkZXJEYXRhe1dvcmtPcmRlck51bWJlcn0gID0gJFJvd1syXTsKICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7V29ya09yZGVyVGl0bGV9ICAgPSBkZWZpbmVkICRSb3dbM10gPyAkUm93WzNdIDogJyc7CiAgICAgICAgICAgICRXb3JrT3JkZXJEYXRhe0luc3RydWN0aW9ufSAgICAgID0gZGVmaW5lZCAkUm93WzRdID8gJFJvd1s0XSA6ICcnOwogICAgICAgICAgICAkV29ya09yZGVyRGF0YXtJbnN0cnVjdGlvblBsYWlufSA9IGRlZmluZWQgJFJvd1s1XSA/ICRSb3dbNV0gOiAnJzsKICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7UmVwb3J0fSAgICAgICAgICAgPSBkZWZpbmVkICRSb3dbNl0gPyAkUm93WzZdIDogJyc7CiAgICAgICAgICAgICRXb3JrT3JkZXJEYXRhe1JlcG9ydFBsYWlufSAgICAgID0gZGVmaW5lZCAkUm93WzddID8gJFJvd1s3XSA6ICcnOwogICAgICAgICAgICAkV29ya09yZGVyRGF0YXtXb3JrT3JkZXJTdGF0ZUlEfSA9ICRSb3dbOF07CiAgICAgICAgICAgICRXb3JrT3JkZXJEYXRhe1dvcmtPcmRlclR5cGVJRH0gID0gJFJvd1s5XTsKICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7V29ya09yZGVyQWdlbnRJRH0gPSAkUm93WzEwXTsKICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7UGxhbm5lZFN0YXJ0VGltZX0gPSAkUm93WzExXTsKICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7UGxhbm5lZEVuZFRpbWV9ICAgPSAkUm93WzEyXTsKICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7QWN0dWFsU3RhcnRUaW1lfSAgPSAkUm93WzEzXTsKICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7QWN0dWFsRW5kVGltZX0gICAgPSAkUm93WzE0XTsKICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7Q3JlYXRlVGltZX0gICAgICAgPSAkUm93WzE1XTsKICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7Q3JlYXRlQnl9ICAgICAgICAgPSAkUm93WzE2XTsKICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7Q2hhbmdlVGltZX0gICAgICAgPSAkUm93WzE3XTsKICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7Q2hhbmdlQnl9ICAgICAgICAgPSAkUm93WzE4XTsKICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7UGxhbm5lZEVmZm9ydH0gICAgPSAkUm93WzE5XSAvLyAnMC4wMCc7CiAgICAgICAgICAgICRXb3JrT3JkZXJEYXRhe0FjY291bnRlZFRpbWV9ICAgID0gJFJvd1syMF0gLy8gJzAuMDAnOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgIGlmICggISVXb3JrT3JkZXJEYXRhICkgewogICAgICAgICAgICBpZiAoICEkUGFyYW17TG9nTm99ICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiV29ya09yZGVySUQgJFBhcmFte1dvcmtPcmRlcklEfSBkb2VzIG5vdCBleGlzdCEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBUSU1FRklFTEQ6CiAgICAgICAgZm9yIG15ICRUaW1lIChxdyhQbGFubmVkU3RhcnRUaW1lIFBsYW5uZWRFbmRUaW1lIEFjdHVhbFN0YXJ0VGltZSBBY3R1YWxFbmRUaW1lKSkgewoKICAgICAgICAgICAgbmV4dCBUSU1FRklFTEQgaWYgISRXb3JrT3JkZXJEYXRheyRUaW1lfTsKCiAgICAgICAgICAgICMgY2xlYW51cCB0aW1lIHN0YW1wcyAoc29tZSBkYXRhYmFzZXMgYXJlIHVzaW5nIGUuIGcuIDIwMDgtMDItMjUgMjI6MDM6MDAuMDAwMDAwKQogICAgICAgICAgICAkV29ya09yZGVyRGF0YXskVGltZX0KICAgICAgICAgICAgICAgID1+IHN7IFxBICggXGRcZFxkXGQgLSBcZFxkIC0gXGRcZCBccyBcZFxkOlxkXGQ6XGRcZCApIFwuIC4rPyBceiB9eyQxfXhtczsKCiAgICAgICAgICAgICMgcmVwbGFjZSBkZWZhdWx0IHRpbWUgdmFsdWVzIHdpdGggZW1wdHkgc3RyaW5nCiAgICAgICAgICAgIGlmICggJFdvcmtPcmRlckRhdGF7JFRpbWV9IGVxICc5OTk5LTAxLTAxIDAwOjAwOjAwJyApIHsKICAgICAgICAgICAgICAgICRXb3JrT3JkZXJEYXRheyRUaW1lfSA9ICcnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBBVFRSSUJVVEU6CiAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKHF3KFBsYW5uZWRFZmZvcnQgQWNjb3VudGVkVGltZSkpIHsKCiAgICAgICAgICAgIG5leHQgQVRUUklCVVRFIGlmICEkV29ya09yZGVyRGF0YXskQXR0cmlidXRlfTsKCiAgICAgICAgICAgICMgZG8gbm90IHNob3cgemVybyB2YWx1ZXMKICAgICAgICAgICAgaWYgKCAkV29ya09yZGVyRGF0YXskQXR0cmlidXRlfSBlcSAwICkgewogICAgICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7JEF0dHJpYnV0ZX0gPSAnJzsKICAgICAgICAgICAgICAgIG5leHQgQVRUUklCVVRFOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNvbnZlcnQgZGVjaW1hbCBjaGFyYWN0ZXIgZnJvbSAnLCcgdG8gJy4nIGlmIG5lY2Nlc3NhcnkKICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7JEF0dHJpYnV0ZX0gPX4gc3ssfXsufXhtc2c7CgogICAgICAgICAgICAjIGZvcm1hdCBhcyBkZWNpbWFsIG51bWJlcgogICAgICAgICAgICAkV29ya09yZGVyRGF0YXskQXR0cmlidXRlfSA9IHNwcmludGYgJyUuMmYnLCAkV29ya09yZGVyRGF0YXskQXR0cmlidXRlfTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGFsbCBkeW5hbWljIGZpZWxkcyBmb3IgdGhlIG9iamVjdCB0eXBlIElUU01Xb3JrT3JkZXIKICAgICAgICBteSAkRHluYW1pY0ZpZWxkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgKTsKCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkTGlzdH0gKSB7CgogICAgICAgICAgICAjIHZhbGlkYXRlIGVhY2ggZHluYW1pYyBmaWVsZAogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJER5bmFtaWNGaWVsZENvbmZpZzsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9OwogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9ICk7CgogICAgICAgICAgICAjIGdldCB0aGUgY3VycmVudCB2YWx1ZSBmb3IgZWFjaCBkeW5hbWljIGZpZWxkCiAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKS0+VmFsdWVHZXQoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkUGFyYW17V29ya09yZGVySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgdGhlIGR5bmFtaWMgZmllbGQgbmFtZSBhbmQgdmFsdWUgaW50byB0aGUgd29ya29yZGVyIGRhdGEgaGFzaAogICAgICAgICAgICAkV29ya09yZGVyRGF0YXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkVmFsdWUgLy8gJyc7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBjYWNoZSAod29ya29yZGVyIGRhdGEgZXhpc3RzIGF0IHRoaXMgcG9pbnQsIGl0IHdhcyBjaGVja2VkIGJlZm9yZSkKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgICAgICBUeXBlICA9PiAnSVRTTUNoYW5nZU1hbmFnZW1lbnQnLAogICAgICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgICAgIFZhbHVlID0+IFwlV29ya09yZGVyRGF0YSwKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGFkZCB0aGUgbmFtZSBvZiB0aGUgd29ya29yZGVyIHN0YXRlCiAgICBpZiAoICRXb3JrT3JkZXJEYXRhe1dvcmtPcmRlclN0YXRlSUR9ICkgewogICAgICAgICRXb3JrT3JkZXJEYXRhe1dvcmtPcmRlclN0YXRlfSA9ICRTZWxmLT5Xb3JrT3JkZXJTdGF0ZUxvb2t1cCgKICAgICAgICAgICAgV29ya09yZGVyU3RhdGVJRCA9PiAkV29ya09yZGVyRGF0YXtXb3JrT3JkZXJTdGF0ZUlEfSwKICAgICAgICApOwogICAgfQoKICAgICMgYWRkIHRoZSB3b3Jrb3JkZXIgc3RhdGUgc2lnbmFsCiAgICBpZiAoICRXb3JrT3JkZXJEYXRhe1dvcmtPcmRlclN0YXRlfSApIHsKCiAgICAgICAgIyBnZXQgYWxsIHdvcmtvcmRlciBzdGF0ZSBzaWduYWxzCiAgICAgICAgbXkgJFN0YXRlU2lnbmFsID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNV29ya09yZGVyOjpTdGF0ZTo6U2lnbmFsJyk7CgogICAgICAgICRXb3JrT3JkZXJEYXRhe1dvcmtPcmRlclN0YXRlU2lnbmFsfSA9ICRTdGF0ZVNpZ25hbC0+eyAkV29ya09yZGVyRGF0YXtXb3JrT3JkZXJTdGF0ZX0gfTsKICAgIH0KCiAgICAjIGFkZCB0aGUgbmFtZSBvZiB0aGUgd29ya29yZGVyIHR5cGUKICAgIGlmICggJFdvcmtPcmRlckRhdGF7V29ya09yZGVyVHlwZUlEfSApIHsKICAgICAgICAkV29ya09yZGVyRGF0YXtXb3JrT3JkZXJUeXBlfSA9ICRTZWxmLT5Xb3JrT3JkZXJUeXBlTG9va3VwKAogICAgICAgICAgICBXb3JrT3JkZXJUeXBlSUQgPT4gJFdvcmtPcmRlckRhdGF7V29ya09yZGVyVHlwZUlEfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiBcJVdvcmtPcmRlckRhdGE7Cn0KCj1pdGVtIFdvcmtPcmRlckxpc3QoKQoKUmV0dXJuIGEgbGlzdCBvZiBhbGwgd29ya29yZGVyIGlkcyBvZiB0aGUgZ2l2ZW4gY2hhbmdlIGFzIGFycmF5IHJlZmVyZW5jZS4KVGhlIHdvcmtvcmRlciBpZHMgYXJlIG9yZGVyZWQgYnkgd29ya29yZGVyIG51bWJlci4KCiAgICBteSAkV29ya09yZGVySURzUmVmID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyTGlzdCgKICAgICAgICBDaGFuZ2VJRCA9PiA1LAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFdvcmtPcmRlckxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBdHRyaWJ1dGUgKHF3KENoYW5nZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEF0dHJpYnV0ZX0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBdHRyaWJ1dGUhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSBAV29ya09yZGVySURzOwoKICAgICMgY2hlY2sgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdXb3JrT3JkZXJMaXN0OjpDaGFuZ2VJRDo6JyAuICRQYXJhbXtDaGFuZ2VJRH07CiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKCiAgICBpZiAoJENhY2hlKSB7CgogICAgICAgICMgZ2V0IGRhdGEgZnJvbSBjYWNoZQogICAgICAgIEBXb3JrT3JkZXJJRHMgPSBAeyRDYWNoZX07CiAgICB9CgogICAgIyBnZXQgZGF0YSBmcm9tIGRhdGFiYXNlCiAgICBlbHNlIHsKCiAgICAgICAgIyBnZXQgd29ya29yZGVyIGlkcwogICAgICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PgogICAgICAgICAgICAgICAgJ1NFTEVDVCBpZCBGUk9NIGNoYW5nZV93b3Jrb3JkZXIgJwogICAgICAgICAgICAgICAgLiAnV0hFUkUgY2hhbmdlX2lkID0gPyAnCiAgICAgICAgICAgICAgICAuICdPUkRFUiBCWSB3b3Jrb3JkZXJfbnVtYmVyLCBpZCcsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NoYW5nZUlEfSBdLAogICAgICAgICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIHdoaWxlICggbXkgKCRJRCkgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICBwdXNoIEBXb3JrT3JkZXJJRHMsICRJRDsKICAgICAgICB9CgogICAgICAgICMgc2V0IGNhY2hlCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJ0lUU01DaGFuZ2VNYW5hZ2VtZW50JywKICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBWYWx1ZSA9PiBcQFdvcmtPcmRlcklEcywKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gXEBXb3JrT3JkZXJJRHM7Cn0KCj1pdGVtIFdvcmtPcmRlclNlYXJjaCgpCgpSZXR1cm5zIGVpdGhlciBhIGxpc3QsIGFzIGFuIGFycmF5cmVmLCBvciBhIGNvdW50IG9mIGZvdW5kIHdvcmtvcmRlciBpZHMuClRoZSBjb3VudCBvZiByZXN1bHRzIGlzIHJldHVybmVkIHdoZW4gdGhlIHBhcmFtZXRlciBDPFJlc3VsdCA9PiAnQ09VTlQnPiBpcyBwYXNzZWQuCgpUaGUgc2VhcmNoIGNyaXRlcmlhIGFyZSBsb2dpY2FsbHkgQU5EIGNvbm5lY3RlZC4KV2hlbiBhIGxpc3QgaXMgcGFzc2VkIGFzIGNyaXRlcml1bSwgdGhlIGluZGl2aWR1YWwgbWVtYmVycyBhcmUgT1IgY29ubmVjdGVkLgpXaGVuIGFuIHVuZGVmIG9yIGEgcmVmZXJlbmNlIHRvIGFuIGVtcHR5IGFycmF5IGlzIHBhc3NlZCwgdGhlbiB0aGUgc2VhcmNoIGNyaXRlcml1bQppcyBpZ25vcmVkLgoKICAgIG15ICRXb3JrT3JkZXJJRHNSZWYgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJTZWFyY2goCiAgICAgICAgQ2hhbmdlSURzICAgICAgICAgPT4gWyAxMjMsIDEyMiBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgV29ya09yZGVyTnVtYmVyICAgPT4gMTIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgICAgIFdvcmtPcmRlclRpdGxlICAgID0+ICdSZXBsYWNlbWVudCBvZiBtYWlsIHNlcnZlcicsICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEluc3RydWN0aW9uICAgICAgID0+ICdJbnN0YWxsIHRoZSB0aGUgbmV3IHNlcnZlcicsICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFJlcG9ydCAgICAgICAgICAgID0+ICdJbnN0YWxsZWQgbmV3IHNlcnZlciB3aXRob3V0IHByb2JsZW1zJywgICMgKG9wdGlvbmFsKQoKICAgICAgICAjIER5bmFtaWNGaWVsZHMgKGZvciB3b3Jrb3JkZXJzKQogICAgICAgICMgICBBdCBsZWFzdCBvbmUgb3BlcmF0b3IgbXVzdCBiZSBzcGVjaWZpZWQuIE9wZXJhdG9ycyB3aWxsIGJlIGNvbm5lY3RlZCB3aXRoIEFORCwKICAgICAgICAjICAgICAgIHZhbHVlcyBpbiBhbiBvcGVyYXRvciB3aXRoIE9SLgogICAgICAgICMgICBZb3UgY2FuIGFsc28gcGFzcyBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IHRvIGFuIG9wZXJhdG9yOiBbJ3ZhbHVlMScsICd2YWx1ZTInXQogICAgICAgIER5bmFtaWNGaWVsZF9GaWVsZE5hbWVYID0+IHsKICAgICAgICAgICAgRXF1YWxzICAgICAgICAgICAgPT4gMTIzLAogICAgICAgICAgICBMaWtlICAgICAgICAgICAgICA9PiAndmFsdWUqJywgICAgICAgICAgICAgICAgIyAiZXF1YWxzIiBvcGVyYXRvciB3aXRoIHdpbGRjYXJkIHN1cHBvcnQKICAgICAgICAgICAgR3JlYXRlclRoYW4gICAgICAgPT4gJzIwMDEtMDEtMDEgMDE6MDE6MDEnLAogICAgICAgICAgICBHcmVhdGVyVGhhbkVxdWFscyA9PiAnMjAwMS0wMS0wMSAwMTowMTowMScsCiAgICAgICAgICAgIFNtYWxsZXJUaGFuICAgICAgID0+ICcyMDAyLTAyLTAyIDAyOjAyOjAyJywKICAgICAgICAgICAgU21hbGxlclRoYW5FcXVhbHMgPT4gJzIwMDItMDItMDIgMDI6MDI6MDInLAogICAgICAgIH0KCiAgICAgICAgV29ya09yZGVyU3RhdGVJRHMgPT4gWyAxMSwgMTIgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgV29ya09yZGVyU3RhdGVzICAgPT4gWyAnY2xvc2VkJywgJ2NhbmNlbGVkJyBdLCAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgICAgIFdvcmtPcmRlclR5cGVJRHMgID0+IFsgMjEsIDIyIF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFdvcmtPcmRlclR5cGVzICAgID0+IFsgJ2FwcHJvdmFsJywgJ3dvcmtvcmRlcicgXSwgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICBXb3JrT3JkZXJBZ2VudElEcyA9PiBbIDEsIDIsIDMgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDcmVhdGVCeSAgICAgICAgICA9PiBbIDUsIDIsIDMgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDaGFuZ2VCeSAgICAgICAgICA9PiBbIDMsIDIsIDEgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgIyBzZWFyY2ggaW4gdGV4dCBmaWVsZHMgb2YgY2hhbmdlIG9iamVjdAogICAgICAgIENoYW5nZU51bWJlciAgICAgICAgPT4gJ051bWJlciBvZiBjaGFuZ2UnLCAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIENoYW5nZVRpdGxlICAgICAgICAgPT4gJ1RpdGxlIG9mIGNoYW5nZScsICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIENoYW5nZURlc2NyaXB0aW9uICAgPT4gJ0Rlc2NyaXB0aW9uIG9mIGNoYW5nZScsICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIENoYW5nZUp1c3RpZmljYXRpb24gPT4gJ0p1c3RpZmljYXRpb24gb2YgY2hhbmdlJywgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICAjIHdvcmtvcmRlcnMgd2l0aCBwbGFubmVkIHN0YXJ0IHRpbWUgYWZ0ZXIgLi4uCiAgICAgICAgUGxhbm5lZFN0YXJ0VGltZU5ld2VyRGF0ZSA9PiAnMjAwNi0wMS0wOSAwMDowMDowMScsICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyB3b3Jrb3JkZXJzIHdpdGggcGxhbm5lZCBzdGFydCB0aW1lIGJlZm9yZSB0aGVuIC4uLi4KICAgICAgICBQbGFubmVkU3RhcnRUaW1lT2xkZXJEYXRlID0+ICcyMDA2LTAxLTE5IDIzOjU5OjU5JywgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgIyB3b3Jrb3JkZXJzIHdpdGggcGxhbm5lZCBlbmQgdGltZSBhZnRlciAuLi4KICAgICAgICBQbGFubmVkRW5kVGltZU5ld2VyRGF0ZSAgID0+ICcyMDA2LTAxLTA5IDAwOjAwOjAxJywgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjIHdvcmtvcmRlcnMgd2l0aCBwbGFubmVkIGVuZCB0aW1lIGJlZm9yZSB0aGVuIC4uLi4KICAgICAgICBQbGFubmVkRW5kVGltZU9sZGVyRGF0ZSAgID0+ICcyMDA2LTAxLTE5IDIzOjU5OjU5JywgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgIyB3b3Jrb3JkZXJzIHdpdGggYWN0dWFsIHN0YXJ0IHRpbWUgYWZ0ZXIgLi4uCiAgICAgICAgQWN0dWFsU3RhcnRUaW1lTmV3ZXJEYXRlICA9PiAnMjAwNi0wMS0wOSAwMDowMDowMScsICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyB3b3Jrb3JkZXJzIHdpdGggYWN0dWFsIHN0YXJ0IHRpbWUgYmVmb3JlIHRoZW4gLi4uLgogICAgICAgIEFjdHVhbFN0YXJ0VGltZU9sZGVyRGF0ZSAgPT4gJzIwMDYtMDEtMTkgMjM6NTk6NTknLCAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICAjIHdvcmtvcmRlcnMgd2l0aCBhY3R1YWwgZW5kIHRpbWUgYWZ0ZXIgLi4uCiAgICAgICAgQWN0dWFsRW5kVGltZU5ld2VyRGF0ZSAgICA9PiAnMjAwNi0wMS0wOSAwMDowMDowMScsICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyB3b3Jrb3JkZXJzIHdpdGggYWN0dWFsIGVuZCB0aW1lIGJlZm9yZSB0aGVuIC4uLi4KICAgICAgICBBY3R1YWxFbmRUaW1lT2xkZXJEYXRlICAgID0+ICcyMDA2LTAxLTE5IDIzOjU5OjU5JywgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgIyB3b3Jrb3JkZXJzIHdpdGggY3JlYXRlZCB0aW1lIGFmdGVyIC4uLgogICAgICAgIENyZWF0ZVRpbWVOZXdlckRhdGUgICAgICAgPT4gJzIwMDYtMDEtMDkgMDA6MDA6MDEnLCAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgd29ya29yZGVycyB3aXRoIGNyZWF0ZWQgdGltZSBiZWZvcmUgdGhlbiAuLi4uCiAgICAgICAgQ3JlYXRlVGltZU9sZGVyRGF0ZSAgICAgICA9PiAnMjAwNi0wMS0xOSAyMzo1OTo1OScsICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgICAgICMgd29ya29yZGVycyB3aXRoIGNoYW5nZWQgdGltZSBhZnRlciAuLi4KICAgICAgICBDaGFuZ2VUaW1lTmV3ZXJEYXRlICAgICAgID0+ICcyMDA2LTAxLTA5IDAwOjAwOjAxJywgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjIHdvcmtvcmRlcnMgd2l0aCBjaGFuZ2VkIHRpbWUgYmVmb3JlIHRoZW4gLi4uLgogICAgICAgIENoYW5nZVRpbWVPbGRlckRhdGUgICAgICAgPT4gJzIwMDYtMDEtMTkgMjM6NTk6NTknLCAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICBPcmRlckJ5ID0+IFsgJ0NoYW5nZUlEJywgJ1dvcmtPcmRlck51bWJlcicgXSwgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjIGlnbm9yZWQgd2hlbiB0aGUgcmVzdWx0IHR5cGUgaXMgJ0NPVU5UJwogICAgICAgICMgZGVmYXVsdDogWyAnV29ya09yZGVySUQnIF0sCiAgICAgICAgIyAoV29ya09yZGVySUQsIENoYW5nZUlELCBXb3JrT3JkZXJOdW1iZXIsIFdvcmtPcmRlclRpdGxlCiAgICAgICAgIyBXb3JrT3JkZXJTdGF0ZUlELCBXb3JrT3JkZXJUeXBlSUQsIFdvcmtPcmRlckFnZW50SUQsCiAgICAgICAgIyBQbGFubmVkU3RhcnRUaW1lLCBQbGFubmVkRW5kVGltZSwKICAgICAgICAjIEFjdHVhbFN0YXJ0VGltZSwgQWN0dWFsRW5kVGltZSwKICAgICAgICAjIENyZWF0ZVRpbWUsIENyZWF0ZUJ5LCBDaGFuZ2VUaW1lLCBDaGFuZ2VCeSkKCiAgICAgICAgIyBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBPcmRlckJ5OgogICAgICAgICMgVGhlIE9yZGVyQnlEaXJlY3Rpb24gY2FuIGJlIHNwZWNpZmllZCBmb3IgZWFjaCBPcmRlckJ5IGF0dHJpYnV0ZS4KICAgICAgICAjIFRoZSBwYWlyaW5nIGlzIG1hZGUgYnkgdGhlIGFycmF5IGluZGljZXMuCgogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWyAnRG93bicsICdVcCcgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgaWdub3JlZCB3aGVuIHRoZSByZXN1bHQgdHlwZSBpcyAnQ09VTlQnCiAgICAgICAgIyBkZWZhdWx0OiBbICdEb3duJyBdCiAgICAgICAgIyAoRG93biB8IFVwKQoKICAgICAgICBVc2luZ1dpbGRjYXJkcyA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjICgwIHwgMSkgZGVmYXVsdCAxCgogICAgICAgIFJlc3VsdCA9PiAnQVJSQVknIHx8ICdDT1VOVCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgZGVmYXVsdDogQVJSQVksIHJldHVybnMgYW4gYXJyYXkgb2Ygd29ya29yZGVyIGlkcwogICAgICAgICMgQ09VTlQgcmV0dXJucyBhIHNjYWxhciB3aXRoIHRoZSBudW1iZXIgb2YgZm91bmQgd29ya29yZGVycwoKICAgICAgICBMaW1pdCA9PiAxMDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjIGlnbm9yZWQgd2hlbiB0aGUgcmVzdWx0IHR5cGUgaXMgJ0NPVU5UJwoKICAgICAgICBNaXJyb3JEQiA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjICgwIHwgMSkgZGVmYXVsdCAwCiAgICAgICAgIyBpZiBzZXQgdG8gMSBhbmQgSVRTTUNoYW5nZTo6Q2hhbmdlU2VhcmNoOjpNaXJyb3JEQgogICAgICAgICMgaXMgYWN0aXZhdGVkIGFuZCBhIG1pcnJvciBkYiBpcyBjb25maWd1cmVkIGluCiAgICAgICAgIyBDb3JlOjpNaXJyb3JEQjo6RFNOIHRoZSB3b3Jrb3JkZXIgc2VhcmNoIHdpbGwgdGhlbiB1c2UKICAgICAgICAjIHRoZSBtaXJyb3IgZGIKCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFdvcmtPcmRlclNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyB2ZXJpZnkgdGhhdCBhbGwgcGFzc2VkIGFycmF5IHBhcmFtZXRlcnMgY29udGFpbiBhbiBhcnJheXJlZgogICAgQVJHVU1FTlQ6CiAgICBmb3IgbXkgJEFyZ3VtZW50ICgKICAgICAgICBxdygKICAgICAgICBPcmRlckJ5CiAgICAgICAgT3JkZXJCeURpcmVjdGlvbgogICAgICAgIFdvcmtPcmRlclN0YXRlSURzCiAgICAgICAgV29ya09yZGVyU3RhdGVzCiAgICAgICAgV29ya09yZGVyVHlwZXMKICAgICAgICBXb3JrT3JkZXJUeXBlSURzCiAgICAgICAgQ2hhbmdlSURzCiAgICAgICAgV29ya09yZGVyQWdlbnRJRHMKICAgICAgICBDcmVhdGVCeQogICAgICAgIENoYW5nZUJ5CiAgICAgICAgKQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSB8fD0gW107CgogICAgICAgICAgICBuZXh0IEFSR1VNRU5UOwogICAgICAgIH0KCiAgICAgICAgaWYgKCByZWYgJFBhcmFteyRBcmd1bWVudH0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRBcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZGVmaW5lIGEgbG9jYWwgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGlmIHdlIG5lZWQgdG8gZG8gYSB3b3Jrb3JkZXIgc2VhcmNoIG9uIGFuIGV4dGVybmFsIG1pcnJvciBkYXRhYmFzZQogICAgaWYgKAogICAgICAgICRQYXJhbXtNaXJyb3JEQn0KICAgICAgICAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01DaGFuZ2U6OkNoYW5nZVNlYXJjaDo6TWlycm9yREInKQogICAgICAgICYmICRDb25maWdPYmplY3QtPkdldCgnQ29yZTo6TWlycm9yREI6OkRTTicpCiAgICAgICAgJiYgJENvbmZpZ09iamVjdC0+R2V0KCdDb3JlOjpNaXJyb3JEQjo6VXNlcicpCiAgICAgICAgJiYgJENvbmZpZ09iamVjdC0+R2V0KCdDb3JlOjpNaXJyb3JEQjo6UGFzc3dvcmQnKQogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBjcmVhdGUgYW4gZXh0cmEgZGF0YWJhc2Ugb2JqZWN0IGZvciB0aGUgbWlycm9yIGRiCiAgICAgICAgbXkgJEV4dHJhRGF0YWJhc2VPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6REItPm5ldygKICAgICAgICAgICAgRGF0YWJhc2VEU04gID0+ICRDb25maWdPYmplY3QtPkdldCgnQ29yZTo6TWlycm9yREI6OkRTTicpLAogICAgICAgICAgICBEYXRhYmFzZVVzZXIgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdDb3JlOjpNaXJyb3JEQjo6VXNlcicpLAogICAgICAgICAgICBEYXRhYmFzZVB3ICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdDb3JlOjpNaXJyb3JEQjo6UGFzc3dvcmQnKSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgaWYgKCAhJEV4dHJhRGF0YWJhc2VPYmplY3QgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdDb3VsZCBub3QgY3JlYXRlIGRhdGFiYXNlIG9iamVjdCBmb3IgTWlycm9yREIhJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkREJPYmplY3QgPSAkRXh0cmFEYXRhYmFzZU9iamVjdDsKICAgIH0KCiAgICBteSBAU1FMV2hlcmU7ICAgICAgICAgICAjIGFzc2VtYmxlIHRoZSBjb25kaXRpb25zIHVzZWQgaW4gdGhlIFdIRVJFIGNsYXVzZQogICAgbXkgQElubmVySm9pblRhYmxlczsgICAgIyBrZWVwIHRyYWNrIG9mIHRoZSB0YWJsZXMgdGhhdCBuZWVkIHRvIGJlIGlubmVyIGpvaW5lZAoKICAgICMgY2hlY2sgYWxsIGNvbmZpZ3VyZWQgd29ya29yZGVyIGR5bmFtaWMgZmllbGRzLCBidWlsZCBsb29rdXAgaGFzaCBieSBuYW1lCiAgICBteSAlV29ya09yZGVyRHluYW1pY0ZpZWxkTmFtZTJDb25maWc7CiAgICBteSAkV29ya09yZGVyRHluYW1pY0ZpZWxkcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBPYmplY3RUeXBlID0+ICdJVFNNV29ya09yZGVyJywKICAgICk7CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIEB7JFdvcmtPcmRlckR5bmFtaWNGaWVsZHN9ICkgewogICAgICAgICRXb3JrT3JkZXJEeW5hbWljRmllbGROYW1lMkNvbmZpZ3sgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkOwogICAgfQoKICAgICMgZGVmaW5lIG9yZGVyIHRhYmxlCiAgICBteSAlT3JkZXJCeVRhYmxlID0gKAoKICAgICAgICAjIHdvcmtvcmRlciBhdHRyaWJ1dGVzCiAgICAgICAgQ2hhbmdlSUQgICAgICAgICA9PiAnd28uY2hhbmdlX2lkJywKICAgICAgICBXb3JrT3JkZXJJRCAgICAgID0+ICd3by5pZCcsCiAgICAgICAgV29ya09yZGVyTnVtYmVyICA9PiAnd28ud29ya29yZGVyX251bWJlcicsCiAgICAgICAgV29ya09yZGVyVGl0bGUgICA9PiAnd28udGl0bGUnLAogICAgICAgIFdvcmtPcmRlclN0YXRlSUQgPT4gJ3dvLndvcmtvcmRlcl9zdGF0ZV9pZCcsCiAgICAgICAgV29ya09yZGVyVHlwZUlEICA9PiAnd28ud29ya29yZGVyX3R5cGVfaWQnLAogICAgICAgIFdvcmtPcmRlckFnZW50SUQgPT4gJ3dvLndvcmtvcmRlcl9hZ2VudF9pZCcsCiAgICAgICAgUGxhbm5lZFN0YXJ0VGltZSA9PiAnd28ucGxhbm5lZF9zdGFydF90aW1lJywKICAgICAgICBQbGFubmVkRW5kVGltZSAgID0+ICd3by5wbGFubmVkX2VuZF90aW1lJywKICAgICAgICBBY3R1YWxTdGFydFRpbWUgID0+ICd3by5hY3R1YWxfc3RhcnRfdGltZScsCiAgICAgICAgQWN0dWFsRW5kVGltZSAgICA9PiAnd28uYWN0dWFsX2VuZF90aW1lJywKICAgICAgICBDcmVhdGVUaW1lICAgICAgID0+ICd3by5jcmVhdGVfdGltZScsCiAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAnd28uY3JlYXRlX2J5JywKICAgICAgICBDaGFuZ2VUaW1lICAgICAgID0+ICd3by5jaGFuZ2VfdGltZScsCiAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAnd28uY2hhbmdlX2J5JywKCiAgICAgICAgIyBjaGFuZ2UgYXR0cmlidXRlcwogICAgICAgIENoYW5nZU51bWJlciAgICA9PiAnYy5jaGFuZ2VfbnVtYmVyJywKICAgICAgICBDaGFuZ2VUaXRsZSAgICAgPT4gJ2MudGl0bGUnLAogICAgICAgIENoYW5nZVN0YXRlSUQgICA9PiAnYy5jaGFuZ2Vfc3RhdGVfaWQnLAogICAgICAgIENoYW5nZU1hbmFnZXJJRCA9PiAnYy5jaGFuZ2VfbWFuYWdlcl9pZCcsCiAgICAgICAgQ2hhbmdlQnVpbGRlcklEID0+ICdjLmNoYW5nZV9idWlsZGVyX2lkJywKICAgICAgICBDYXRlZ29yeUlEICAgICAgPT4gJ2MuY2F0ZWdvcnlfaWQnLAogICAgICAgIEltcGFjdElEICAgICAgICA9PiAnYy5pbXBhY3RfaWQnLAogICAgICAgIFByaW9yaXR5SUQgICAgICA9PiAnYy5wcmlvcml0eV9pZCcsCiAgICAgICAgUmVxdWVzdGVkVGltZSAgID0+ICdjLnJlcXVlc3RlZF90aW1lJywKICAgICk7CgogICAgIyBjaGVjayBpZiBPcmRlckJ5IGNvbnRhaW5zIG9ubHkgdW5pcXVlIHZhbGlkIHZhbHVlcwogICAgbXkgJU9yZGVyQnlTZWVuOwogICAgZm9yIG15ICRPcmRlckJ5ICggQHsgJFBhcmFte09yZGVyQnl9IH0gKSB7CgogICAgICAgIGlmICggISRPcmRlckJ5IHx8ICEkT3JkZXJCeVRhYmxleyRPcmRlckJ5fSB8fCAkT3JkZXJCeVNlZW57JE9yZGVyQnl9ICkgewoKICAgICAgICAgICAgIyBmb3VuZCBhbiBlcnJvcgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiT3JkZXJCeSBjb250YWlucyBpbnZhbGlkIHZhbHVlICckT3JkZXJCeScgIgogICAgICAgICAgICAgICAgICAgIC4gJ29yIHRoZSB2YWx1ZSBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlIScsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgcmVtZW1iZXIgdGhlIHZhbHVlIHRvIGNoZWNrIGlmIGl0IGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UKICAgICAgICAkT3JkZXJCeVNlZW57JE9yZGVyQnl9ID0gMTsKCiAgICAgICAgIyBqb2luIHRoZSBjaGFuZ2UgdGFibGUsIHdoZW4gaXQgaXMgbmVlZGVkIGZvciB0aGUgT3JkZXJCeS1jbGF1c2UKICAgICAgICBpZiAoICRPcmRlckJ5VGFibGV7JE9yZGVyQnl9ID1+IG17IFxBIGNbLl0gfXhtcyApIHsKICAgICAgICAgICAgcHVzaCBASW5uZXJKb2luVGFibGVzLCAnYyc7CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgT3JkZXJCeURpcmVjdGlvbiBhcnJheSBjb250YWlucyBvbmx5ICdVcCcgb3IgJ0Rvd24nCiAgICBESVJFQ1RJT046CiAgICBmb3IgbXkgJERpcmVjdGlvbiAoIEB7ICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufSB9ICkgewoKICAgICAgICAjIG9ubHkgJ1VwJyBvciAnRG93bicgYWxsb3dlZAogICAgICAgIG5leHQgRElSRUNUSU9OIGlmICREaXJlY3Rpb24gZXEgJ1VwJzsKICAgICAgICBuZXh0IERJUkVDVElPTiBpZiAkRGlyZWN0aW9uIGVxICdEb3duJzsKCiAgICAgICAgIyBmb3VuZCBhbiBlcnJvcgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiT3JkZXJCeURpcmVjdGlvbiBjYW4gb25seSBjb250YWluICdVcCcgb3IgJ0Rvd24nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1VzaW5nV2lsZGNhcmRzfSApIHsKICAgICAgICAkUGFyYW17VXNpbmdXaWxkY2FyZHN9ID0gMTsKICAgIH0KCiAgICAjIHNldCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgZm9yIHRoZSByZXR1cm4gdHlwZQogICAgbXkgJFJlc3VsdCA9ICRQYXJhbXtSZXN1bHR9IHx8ICdBUlJBWSc7CgogICAgIyBjaGVjayB3aGV0aGVyIGFsbCBvZiB0aGUgZ2l2ZW4gV29ya09yZGVyU3RhdGVJRHMgYXJlIHZhbGlkCiAgICByZXR1cm4gaWYgISRTZWxmLT5Xb3JrT3JkZXJTdGF0ZUlEc0NoZWNrKCBXb3JrT3JkZXJTdGF0ZUlEcyA9PiAkUGFyYW17V29ya09yZGVyU3RhdGVJRHN9ICk7CgogICAgIyBsb29rIHVwIGFuZCB0aHVzIGNoZWNrIHRoZSBTdGF0ZXMKICAgIGZvciBteSAkV29ya09yZGVyU3RhdGUgKCBAeyAkUGFyYW17V29ya09yZGVyU3RhdGVzfSB9ICkgewoKICAgICAgICAjIGxvb2sgdXAgdGhlIElEIGZvciB0aGUgbmFtZQogICAgICAgIG15ICRXb3JrT3JkZXJTdGF0ZUlEID0gJFNlbGYtPldvcmtPcmRlclN0YXRlTG9va3VwKAogICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZSA9PiAkV29ya09yZGVyU3RhdGUsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayB3aGV0aGVyIHRoZSBJRCB3YXMgZm91bmQsIHdoZXRoZXIgdGhlIG5hbWUgZXhpc3RzCiAgICAgICAgaWYgKCAhJFdvcmtPcmRlclN0YXRlSUQgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgd29ya29yZGVyIHN0YXRlICRXb3JrT3JkZXJTdGF0ZSBpcyBub3Qga25vd24hIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHB1c2ggQHsgJFBhcmFte1dvcmtPcmRlclN0YXRlSURzfSB9LCAkV29ya09yZGVyU3RhdGVJRDsKICAgIH0KCiAgICAjIGNoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIFdvcmtPcmRlclR5cGVJRHMgYXJlIGFsbCB2YWxpZAogICAgcmV0dXJuIGlmICEkU2VsZi0+X0NoZWNrV29ya09yZGVyVHlwZUlEcyggV29ya09yZGVyVHlwZUlEcyA9PiAkUGFyYW17V29ya09yZGVyVHlwZUlEc30gKTsKCiAgICAjIGxvb2sgdXAgYW5kIHRodXMgY2hlY2sgdGhlIFdvcmtPcmRlclR5cGVzCiAgICBmb3IgbXkgJFR5cGUgKCBAeyAkUGFyYW17V29ya09yZGVyVHlwZXN9IH0gKSB7CgogICAgICAgICMgZ2V0IHRoZSBJRCBmb3IgdGhlIG5hbWUKICAgICAgICBteSAkVHlwZUlEID0gJFNlbGYtPldvcmtPcmRlclR5cGVMb29rdXAoCiAgICAgICAgICAgIFdvcmtPcmRlclR5cGUgPT4gJFR5cGUsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayB3aGV0aGVyIHRoZSBJRCB3YXMgZm91bmQsIHdoZXRoZXIgdGhlIG5hbWUgZXhpc3RzCiAgICAgICAgaWYgKCAhJFR5cGVJRCApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSB3b3Jrb3JkZXIgdHlwZSAnJFR5cGUnIGlzIG5vdCBrbm93biEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBwdXNoIEB7ICRQYXJhbXtXb3JrT3JkZXJUeXBlSURzfSB9LCAkVHlwZUlEOwogICAgfQoKICAgICMgYWRkIHN0cmluZyBwYXJhbXMgdG8gdGhlIFdIRVJFIGNsYXVzZQogICAgbXkgJVN0cmluZ1BhcmFtcyA9ICgKCiAgICAgICAgIyBpbiB3b3Jrb3JkZXIgdGFibGUKICAgICAgICBXb3JrT3JkZXJOdW1iZXIgPT4gJ3dvLndvcmtvcmRlcl9udW1iZXInLAogICAgICAgIFdvcmtPcmRlclRpdGxlICA9PiAnd28udGl0bGUnLAogICAgICAgIEluc3RydWN0aW9uICAgICA9PiAnd28uaW5zdHJ1Y3Rpb25fcGxhaW4nLAogICAgICAgIFJlcG9ydCAgICAgICAgICA9PiAnd28ucmVwb3J0X3BsYWluJywKCiAgICAgICAgIyBpbiBjaGFuZ2UgdGFibGUKICAgICAgICBDaGFuZ2VOdW1iZXIgICAgICAgID0+ICdjLmNoYW5nZV9udW1iZXInLAogICAgICAgIENoYW5nZVRpdGxlICAgICAgICAgPT4gJ2MudGl0bGUnLAogICAgICAgIENoYW5nZURlc2NyaXB0aW9uICAgPT4gJ2MuZGVzY3JpcHRpb25fcGxhaW4nLAogICAgICAgIENoYW5nZUp1c3RpZmljYXRpb24gPT4gJ2MuanVzdGlmaWNhdGlvbl9wbGFpbicsCiAgICApOwoKICAgICMgYWRkIHN0cmluZyBwYXJhbXMgdG8gc3FsLXdoZXJlLWFycmF5CiAgICBTVFJJTkdQQVJBTToKICAgIGZvciBteSAkU3RyaW5nUGFyYW0gKCBzb3J0IGtleXMgJVN0cmluZ1BhcmFtcyApIHsKCiAgICAgICAgIyBjaGVjayBzdHJpbmcgcGFyYW1zIGZvciB1c2VmdWwgdmFsdWVzLCB0aGUgc3RyaW5nICcwJyBpcyBhbGxvd2VkCiAgICAgICAgbmV4dCBTVFJJTkdQQVJBTSBpZiAhZXhpc3RzICRQYXJhbXskU3RyaW5nUGFyYW19OwogICAgICAgIG5leHQgU1RSSU5HUEFSQU0gaWYgIWRlZmluZWQgJFBhcmFteyRTdHJpbmdQYXJhbX07CiAgICAgICAgbmV4dCBTVFJJTkdQQVJBTSBpZiAkUGFyYW17JFN0cmluZ1BhcmFtfSBlcSAnJzsKCiAgICAgICAgIyBxdW90ZQogICAgICAgICRQYXJhbXskU3RyaW5nUGFyYW19ID0gJERCT2JqZWN0LT5RdW90ZSggJFBhcmFteyRTdHJpbmdQYXJhbX0gKTsKCiAgICAgICAgIyBjaGVjayBpZiBhIENMT0IgZmllbGQgaXMgdXNlZCBpbiBvcmFjbGUKICAgICAgICAjIEZpeC9Xb3JrYXJvdW5kIGZvciBPUkEtMDA5MzI6IGluY29uc2lzdGVudCBkYXRhdHlwZXM6IGV4cGVjdGVkIC0gZ290IENMT0IKICAgICAgICBteSAkRm9yY2VMaWtlU2VhcmNoRm9yU3BlY2lhbEZpZWxkczsKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57REJUeXBlfSBlcSAnb3JhY2xlJwogICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAkU3RyaW5nUGFyYW0gZXEgJ0luc3RydWN0aW9uJwogICAgICAgICAgICAgICAgfHwgJFN0cmluZ1BhcmFtIGVxICdSZXBvcnQnCiAgICAgICAgICAgICAgICB8fCAkU3RyaW5nUGFyYW0gZXEgJ0NoYW5nZURlc2NyaXB0aW9uJwogICAgICAgICAgICAgICAgfHwgJFN0cmluZ1BhcmFtIGVxICdDaGFuZ2VKdXN0aWZpY2F0aW9uJwogICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRGb3JjZUxpa2VTZWFyY2hGb3JTcGVjaWFsRmllbGRzID0gMTsKICAgICAgICB9CgogICAgICAgICMgd2lsZGNhcmRzIGFyZSB1c2VkIChvciBMSUtFIHNlYXJjaCBpcyBmb3JjZWQgZm9yIHNvbWUgc3BlY2lhbCBmaWVsZHMgb24gb3JhY2xlKQogICAgICAgIGlmICggJFBhcmFte1VzaW5nV2lsZGNhcmRzfSB8fCAkRm9yY2VMaWtlU2VhcmNoRm9yU3BlY2lhbEZpZWxkcyApIHsKCiAgICAgICAgICAgICMgZ2V0IGxpa2UgZXNjYXBlIHN0cmluZyBuZWVkZWQgZm9yIHNvbWUgZGF0YWJhc2VzIChlLmcuIG9yYWNsZSkKICAgICAgICAgICAgbXkgJExpa2VFc2NhcGVTdHJpbmcgPSAkREJPYmplY3QtPkdldERhdGFiYXNlRnVuY3Rpb24oJ0xpa2VFc2NhcGVTdHJpbmcnKTsKCiAgICAgICAgICAgICMgUXVvdGUKICAgICAgICAgICAgJFBhcmFteyRTdHJpbmdQYXJhbX0gPSAkREJPYmplY3QtPlF1b3RlKCAkUGFyYW17JFN0cmluZ1BhcmFtfSwgJ0xpa2UnICk7CgogICAgICAgICAgICAjIHJlcGxhY2UgKiB3aXRoICUKICAgICAgICAgICAgJFBhcmFteyRTdHJpbmdQYXJhbX0gPX4gc3sgXCorIH17JX14bXNnOwoKICAgICAgICAgICAgIyBkbyBub3QgdXNlIHN0cmluZyBwYXJhbXMgd2hpY2ggY29udGFpbiBvbmx5ICUKICAgICAgICAgICAgbmV4dCBTVFJJTkdQQVJBTSBpZiAkUGFyYW17JFN0cmluZ1BhcmFtfSA9fiBteyBcQSAlKiBceiB9eG1zOwoKICAgICAgICAgICAgcHVzaCBAU1FMV2hlcmUsCiAgICAgICAgICAgICAgICAiTE9XRVIoJFN0cmluZ1BhcmFtc3skU3RyaW5nUGFyYW19KSBMSUtFIExPV0VSKCckUGFyYW17JFN0cmluZ1BhcmFtfScpICRMaWtlRXNjYXBlU3RyaW5nIjsKICAgICAgICB9CgogICAgICAgICMgbm8gd2lsZGNhcmRzIGFyZSB1c2VkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHB1c2ggQFNRTFdoZXJlLAogICAgICAgICAgICAgICAgIkxPV0VSKCRTdHJpbmdQYXJhbXN7JFN0cmluZ1BhcmFtfSkgPSBMT1dFUignJFBhcmFteyRTdHJpbmdQYXJhbX0nKSI7CiAgICAgICAgfQoKICAgICAgICAjIGpvaW4gdGhlIGNoYW5nZSB0YWJsZSwgd2hlbiBpdCBpcyBuZWVkZWQgaW4gdGhlIFdIRVJFIGNsYXVzZQogICAgICAgIGlmICggJFN0cmluZ1BhcmFtc3skU3RyaW5nUGFyYW19ID1+IG17IFxBIGNbLl0gfXhtcyApIHsKICAgICAgICAgICAgcHVzaCBASW5uZXJKb2luVGFibGVzLCAnYyc7CiAgICAgICAgfQogICAgfQoKICAgICMgYnVpbGQgc3FsIGZvciBkeW5hbWljIGZpZWxkcwogICAgbXkgJFNRTER5bmFtaWNGaWVsZElubmVySm9pbnMgPSAnJzsgICAgIyBqb2luLXN0YXRlbWVudHMKICAgIG15ICRTUUxEeW5hbWljRmllbGRXaGVyZSAgICAgID0gJyc7ICAgICMgd2hlcmUtY2xhdXNlCiAgICBteSAkRHluYW1pY0ZpZWxkSm9pbkNvdW50ZXIgICA9IDE7CgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCBAeyRXb3JrT3JkZXJEeW5hbWljRmllbGRzfSApIHsKCiAgICAgICAgbXkgJFNlYXJjaFBhcmFtID0gJFBhcmFteyAiRHluYW1pY0ZpZWxkXyIgLiAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfTsKCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgKCAhJFNlYXJjaFBhcmFtICk7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgKCByZWYgJFNlYXJjaFBhcmFtIG5lICdIQVNIJyApOwoKICAgICAgICBteSAkTmVlZEpvaW47CgogICAgICAgIGZvciBteSAkT3BlcmF0b3IgKCBzb3J0IGtleXMgJXskU2VhcmNoUGFyYW19ICkgewoKICAgICAgICAgICAgbXkgQFNlYXJjaFBhcmFtcyA9ICggcmVmICRTZWFyY2hQYXJhbS0+eyRPcGVyYXRvcn0gZXEgJ0FSUkFZJyApCiAgICAgICAgICAgICAgICA/IEB7ICRTZWFyY2hQYXJhbS0+eyRPcGVyYXRvcn0gfQogICAgICAgICAgICAgICAgOiAoICRTZWFyY2hQYXJhbS0+eyRPcGVyYXRvcn0gKTsKCiAgICAgICAgICAgIG15ICRTUUxEeW5hbWljRmllbGRXaGVyZVN1YiA9ICcnOwogICAgICAgICAgICBpZiAoJFNRTER5bmFtaWNGaWVsZFdoZXJlKSB7CiAgICAgICAgICAgICAgICAkU1FMRHluYW1pY0ZpZWxkV2hlcmVTdWIgPSAnIEFORCAoJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTUUxEeW5hbWljRmllbGRXaGVyZVN1YiA9ICcgKCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRDb3VudGVyID0gMDsKICAgICAgICAgICAgVEVYVDoKICAgICAgICAgICAgZm9yIG15ICRUZXh0IChAU2VhcmNoUGFyYW1zKSB7CiAgICAgICAgICAgICAgICBuZXh0IFRFWFQgaWYgKCAhZGVmaW5lZCAkVGV4dCB8fCAkVGV4dCBlcSAnJyApOwoKICAgICAgICAgICAgICAgICRUZXh0ID1+IHMvXCovJS9naTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIHNlYXJjaCBhdHRyaWJ1dGUsIHdlIGRvIG5vdCBuZWVkIHRvIHNlYXJjaCBmb3IgKgogICAgICAgICAgICAgICAgbmV4dCBURVhUIGlmICRUZXh0ID1+IC9eXCV7MSwzfSQvOwoKICAgICAgICAgICAgICAgICMgdmFsaWRhdGUgZGF0YSB0eXBlCiAgICAgICAgICAgICAgICBteSAkVmFsaWRhdGVTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpLT5WYWx1ZVZhbGlkYXRlKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkLAogICAgICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVGV4dCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0gfHwgMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICEkVmFsaWRhdGVTdWNjZXNzICkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VhcmNoIG5vdCBleGVjdXRlZCBkdWUgdG8gaW52YWxpZCB2YWx1ZSAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkVGV4dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiJyBvbiBmaWVsZCAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkRHluYW1pY0ZpZWxkLT57TmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIichIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJENvdW50ZXIpIHsKICAgICAgICAgICAgICAgICAgICAkU1FMRHluYW1pY0ZpZWxkV2hlcmVTdWIgLj0gJyBPUiAnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJFNRTER5bmFtaWNGaWVsZFdoZXJlU3ViCiAgICAgICAgICAgICAgICAgICAgLj0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpLT5TZWFyY2hTUUxHZXQoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGQsCiAgICAgICAgICAgICAgICAgICAgVGFibGVBbGlhcyAgICAgICAgID0+ICJkZnYkRHluYW1pY0ZpZWxkSm9pbkNvdW50ZXIiLAogICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yICAgICAgICAgICA9PiAkT3BlcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgU2VhcmNoVGVybSAgICAgICAgID0+ICRUZXh0LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkU1FMRHluYW1pY0ZpZWxkV2hlcmVTdWIgLj0gJykgJzsKICAgICAgICAgICAgaWYgKCRDb3VudGVyKSB7CiAgICAgICAgICAgICAgICAkU1FMRHluYW1pY0ZpZWxkV2hlcmUgLj0gJFNRTER5bmFtaWNGaWVsZFdoZXJlU3ViOwogICAgICAgICAgICAgICAgJE5lZWRKb2luID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCROZWVkSm9pbikgewoKICAgICAgICAgICAgaWYgKCAkRHluYW1pY0ZpZWxkLT57T2JqZWN0VHlwZX0gZXEgJ0lUU01Xb3JrT3JkZXInICkgewoKICAgICAgICAgICAgICAgICRTUUxEeW5hbWljRmllbGRJbm5lckpvaW5zCiAgICAgICAgICAgICAgICAgICAgLj0gIklOTkVSIEpPSU4gZHluYW1pY19maWVsZF92YWx1ZSBkZnYkRHluYW1pY0ZpZWxkSm9pbkNvdW50ZXIKICAgICAgICAgICAgICAgICAgICBPTiAod28uaWQgPSBkZnYkRHluYW1pY0ZpZWxkSm9pbkNvdW50ZXIub2JqZWN0X2lkCiAgICAgICAgICAgICAgICAgICAgICAgIEFORCBkZnYkRHluYW1pY0ZpZWxkSm9pbkNvdW50ZXIuZmllbGRfaWQgPSAiIC4KICAgICAgICAgICAgICAgICAgICAkREJPYmplY3QtPlF1b3RlKCAkRHluYW1pY0ZpZWxkLT57SUR9LCAnSW50ZWdlcicgKSAuICIpICI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICREeW5hbWljRmllbGRKb2luQ291bnRlcisrOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBhcnJheSBwYXJhbXMKICAgIG15ICVBcnJheVBhcmFtcyA9ICgKICAgICAgICBDaGFuZ2VJRHMgICAgICAgICA9PiAnd28uY2hhbmdlX2lkJywKICAgICAgICBXb3JrT3JkZXJTdGF0ZUlEcyA9PiAnd28ud29ya29yZGVyX3N0YXRlX2lkJywKICAgICAgICBXb3JrT3JkZXJUeXBlSURzICA9PiAnd28ud29ya29yZGVyX3R5cGVfaWQnLAogICAgICAgIFdvcmtPcmRlckFnZW50SURzID0+ICd3by53b3Jrb3JkZXJfYWdlbnRfaWQnLAogICAgICAgIENyZWF0ZUJ5ICAgICAgICAgID0+ICd3by5jcmVhdGVfYnknLAogICAgICAgIENoYW5nZUJ5ICAgICAgICAgID0+ICd3by5jaGFuZ2VfYnknLAogICAgKTsKCiAgICAjIGFkZCBhcnJheSBwYXJhbXMgdG8gc3FsLXdoZXJlLWFycmF5CiAgICBBUlJBWVBBUkFNOgogICAgZm9yIG15ICRBcnJheVBhcmFtICggc29ydCBrZXlzICVBcnJheVBhcmFtcyApIHsKCiAgICAgICAgIyBpZ25vcmUgZW1wdHkgbGlzdHMKICAgICAgICBuZXh0IEFSUkFZUEFSQU0gaWYgIUB7ICRQYXJhbXskQXJyYXlQYXJhbX0gfTsKCiAgICAgICAgIyBxdW90ZSBhcyBpbnRlZ2VyCiAgICAgICAgZm9yIG15ICRPbmVQYXJhbSAoIEB7ICRQYXJhbXskQXJyYXlQYXJhbX0gfSApIHsKICAgICAgICAgICAgJE9uZVBhcmFtID0gJERCT2JqZWN0LT5RdW90ZSggJE9uZVBhcmFtLCAnSW50ZWdlcicgKTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIHN0cmluZwogICAgICAgIG15ICRJblN0cmluZyA9IGpvaW4gJywgJywgQHsgJFBhcmFteyRBcnJheVBhcmFtfSB9OwoKICAgICAgICBwdXNoIEBTUUxXaGVyZSwgIiRBcnJheVBhcmFtc3skQXJyYXlQYXJhbX0gSU4gKCRJblN0cmluZykiOwogICAgfQoKICAgICMgY2hlY2sgdGhlIHRpbWUgcGFyYW1zIGFuZCBhZGQgdGhlbSB0byB0aGUgV0hFUkUgY2xhdXNlIG9mIHRoZSBTRUxFQ1QtU3RhdGVtZW50CiAgICBteSAlVGltZVBhcmFtcyA9ICgKICAgICAgICBDcmVhdGVUaW1lTmV3ZXJEYXRlICAgICAgID0+ICd3by5jcmVhdGVfdGltZSA+PScsCiAgICAgICAgQ3JlYXRlVGltZU9sZGVyRGF0ZSAgICAgICA9PiAnd28uY3JlYXRlX3RpbWUgPD0nLAogICAgICAgIENoYW5nZVRpbWVOZXdlckRhdGUgICAgICAgPT4gJ3dvLmNoYW5nZV90aW1lID49JywKICAgICAgICBDaGFuZ2VUaW1lT2xkZXJEYXRlICAgICAgID0+ICd3by5jaGFuZ2VfdGltZSA8PScsCiAgICAgICAgUGxhbm5lZFN0YXJ0VGltZU5ld2VyRGF0ZSA9PiAnd28ucGxhbm5lZF9zdGFydF90aW1lID49JywKICAgICAgICBQbGFubmVkU3RhcnRUaW1lT2xkZXJEYXRlID0+ICd3by5wbGFubmVkX3N0YXJ0X3RpbWUgPD0nLAogICAgICAgIFBsYW5uZWRFbmRUaW1lTmV3ZXJEYXRlICAgPT4gJ3dvLnBsYW5uZWRfZW5kX3RpbWUgPj0nLAogICAgICAgIFBsYW5uZWRFbmRUaW1lT2xkZXJEYXRlICAgPT4gJ3dvLnBsYW5uZWRfZW5kX3RpbWUgPD0nLAogICAgICAgIEFjdHVhbFN0YXJ0VGltZU5ld2VyRGF0ZSAgPT4gJ3dvLmFjdHVhbF9zdGFydF90aW1lID49JywKICAgICAgICBBY3R1YWxTdGFydFRpbWVPbGRlckRhdGUgID0+ICd3by5hY3R1YWxfc3RhcnRfdGltZSA8PScsCiAgICAgICAgQWN0dWFsRW5kVGltZU5ld2VyRGF0ZSAgICA9PiAnd28uYWN0dWFsX2VuZF90aW1lID49JywKICAgICAgICBBY3R1YWxFbmRUaW1lT2xkZXJEYXRlICAgID0+ICd3by5hY3R1YWxfZW5kX3RpbWUgPD0nLAogICAgKTsKICAgIFRJTUVQQVJBTToKICAgIGZvciBteSAkVGltZVBhcmFtICggc29ydCBrZXlzICVUaW1lUGFyYW1zICkgewoKICAgICAgICBuZXh0IFRJTUVQQVJBTSBpZiAhJFBhcmFteyRUaW1lUGFyYW19OwoKICAgICAgICBpZiAoICRQYXJhbXskVGltZVBhcmFtfSAhfiBteyBcQSBcZFxkXGRcZC1cZFxkLVxkXGQgXHMgXGRcZDpcZFxkOlxkXGQgXHogfXhtcyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBwYXJhbWV0ZXIgJFRpbWVQYXJhbSBoYXMgYW4gaW52YWxpZCBkYXRlIGZvcm1hdCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIHF1b3RlCiAgICAgICAgJFBhcmFteyRUaW1lUGFyYW19ID0gJERCT2JqZWN0LT5RdW90ZSggJFBhcmFteyRUaW1lUGFyYW19ICk7CgogICAgICAgIHB1c2ggQFNRTFdoZXJlLCAiJFRpbWVQYXJhbXN7JFRpbWVQYXJhbX0gJyRQYXJhbXskVGltZVBhcmFtfSciOwogICAgfQoKICAgICMgZGVsZXRlIHRoZSBPcmRlckJ5IHBhcmFtZXRlciB3aGVuIHRoZSByZXN1bHQgdHlwZSBpcyAnQ09VTlQnCiAgICBpZiAoICRSZXN1bHQgZXEgJ0NPVU5UJyApIHsKICAgICAgICAkUGFyYW17T3JkZXJCeX0gPSBbXTsKICAgIH0KCiAgICAjIGFzc2VtYmxlIHRoZSBPUkRFUiBCWSBjbGF1c2UKICAgIG15IEBTUUxPcmRlckJ5OwogICAgbXkgJENvdW50ID0gMDsKICAgIGZvciBteSAkT3JkZXJCeSAoIEB7ICRQYXJhbXtPcmRlckJ5fSB9ICkgewoKICAgICAgICAjIHNldCB0aGUgZGVmYXVsdCBvcmRlciBkaXJlY3Rpb24KICAgICAgICBteSAkRGlyZWN0aW9uID0gJ0RFU0MnOwoKICAgICAgICAjIGFkZCB0aGUgZ2l2ZW4gb3JkZXIgZGlyZWN0aW9uCiAgICAgICAgaWYgKCAkUGFyYW17T3JkZXJCeURpcmVjdGlvbn0tPlskQ291bnRdICkgewogICAgICAgICAgICBpZiAoICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufS0+WyRDb3VudF0gZXEgJ1VwJyApIHsKICAgICAgICAgICAgICAgICREaXJlY3Rpb24gPSAnQVNDJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufS0+WyRDb3VudF0gZXEgJ0Rvd24nICkgewogICAgICAgICAgICAgICAgJERpcmVjdGlvbiA9ICdERVNDJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBhZGQgU1FMCiAgICAgICAgcHVzaCBAU1FMT3JkZXJCeSwgIiRPcmRlckJ5VGFibGV7JE9yZGVyQnl9ICREaXJlY3Rpb24iOwogICAgfQogICAgY29udGludWUgewogICAgICAgICRDb3VudCsrOwogICAgfQoKICAgICMgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBvcmRlcmluZyBpcyBub3QgZGV0ZXJtaW5lZAogICAgIyB3ZSBhZGQgYW4gZGVzY2VuZGluZyBvcmRlcmluZyBieSBpZAogICAgaWYgKCAhZ3JlcCB7ICRfIGVxICdXb3JrT3JkZXJJRCcgfSAoIEB7ICRQYXJhbXtPcmRlckJ5fSB9ICkgKSB7CiAgICAgICAgcHVzaCBAU1FMT3JkZXJCeSwgIiRPcmRlckJ5VGFibGV7V29ya09yZGVySUR9IERFU0MiOwogICAgfQoKICAgICMgYXNzZW1ibGUgdGhlIFNRTCBxdWVyeQogICAgbXkgJFNRTCA9ICdTRUxFQ1Qgd28uaWQgRlJPTSBjaGFuZ2Vfd29ya29yZGVyIHdvICc7CgogICAgIyBtb2RpZnkgU1FMIHdoZW4gdGhlIHJlc3VsdCB0eXBlIGlzICdDT1VOVCcuCiAgICAjIFRoZXJlIGlzIG5vICdHUk9VUCBCWScgU1FMLWNsYXVzZSwgdGhlcmVmb3JlIENPVU5UKGMuaWQpIGFsd2F5cyBnaXZlIHRoZSB3YW50ZWQgY291bnQKICAgIGlmICggJFJlc3VsdCBlcSAnQ09VTlQnICkgewogICAgICAgICRTUUwgICAgICAgID0gJ1NFTEVDVCBDT1VOVCh3by5pZCkgRlJPTSBjaGFuZ2Vfd29ya29yZGVyIHdvICc7CiAgICAgICAgQFNRTE9yZGVyQnkgPSAoKTsKICAgIH0KCiAgICAjIGFkZCB0aGUgam9pbnMKICAgIG15ICVMb25nVGFibGVOYW1lID0gKAogICAgICAgIGMgPT4gJ2NoYW5nZV9pdGVtJywKICAgICk7CiAgICBteSAlVGFibGVTZWVuOwoKICAgIElOTkVSX0pPSU5fVEFCTEU6CiAgICBmb3IgbXkgJFRhYmxlIChASW5uZXJKb2luVGFibGVzKSB7CgogICAgICAgICMgZG8gbm90IGpvaW4gYSB0YWJsZSB0d2ljZQogICAgICAgIG5leHQgSU5ORVJfSk9JTl9UQUJMRSBpZiAkVGFibGVTZWVueyRUYWJsZX07CgogICAgICAgICRUYWJsZVNlZW57JFRhYmxlfSA9IDE7CgogICAgICAgIGlmICggISRMb25nVGFibGVOYW1leyRUYWJsZX0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJFbmNvdW50ZXJlZCBpbnZhbGlkIGlubmVyIGpvaW4gdGFibGUgJyRUYWJsZSchIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJFNRTCAuPSAiSU5ORVIgSk9JTiAkTG9uZ1RhYmxlTmFtZXskVGFibGV9ICRUYWJsZSBPTiAkVGFibGUuaWQgPSB3by5jaGFuZ2VfaWQgIjsKICAgIH0KCiAgICAjIGFkZCB0aGUgZHluYW1pYyBmaWVsZCBpbm5lciBqb2luIHN0YXRlbWVudHMKICAgICRTUUwgLj0gJFNRTER5bmFtaWNGaWVsZElubmVySm9pbnM7CgogICAgIyBhZGQgdGhlIFdIRVJFIGNsYXVzZQogICAgaWYgKEBTUUxXaGVyZSkgewogICAgICAgICRTUUwgLj0gJ1dIRVJFICc7CiAgICAgICAgJFNRTCAuPSBqb2luICcgQU5EICcsIG1hcCB7IiggJF8gKSJ9IEBTUUxXaGVyZTsKICAgICAgICAkU1FMIC49ICcgJzsKICAgICAgICBpZiAoJFNRTER5bmFtaWNGaWVsZFdoZXJlKSB7CiAgICAgICAgICAgICRTUUwgLj0gJyBBTkQgJyAuICRTUUxEeW5hbWljRmllbGRXaGVyZTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBpZiAoJFNRTER5bmFtaWNGaWVsZFdoZXJlKSB7CiAgICAgICAgICAgICRTUUwgLj0gJyBXSEVSRSAnIC4gJFNRTER5bmFtaWNGaWVsZFdoZXJlOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFkZCB0aGUgT1JERVIgQlkgY2xhdXNlCiAgICBpZiAoQFNRTE9yZGVyQnkpIHsKICAgICAgICAkU1FMIC49ICcgT1JERVIgQlkgJzsKICAgICAgICAkU1FMIC49IGpvaW4gJywgJywgQFNRTE9yZGVyQnk7CiAgICAgICAgJFNRTCAuPSAnICc7CiAgICB9CgogICAgIyBpZ25vcmUgdGhlIHBhcmFtZXRlciAnTGltaXQnIHdoZW4gcmVzdWx0IHR5cGUgaXMgJ0NPVU5UJwogICAgaWYgKCAkUmVzdWx0IGVxICdDT1VOVCcgKSB7CiAgICAgICAgJFBhcmFte0xpbWl0fSA9IDE7CiAgICB9CgogICAgIyBhc2sgZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgTGltaXQgPT4gJFBhcmFte0xpbWl0fSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBASURzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBASURzLCAkUm93WzBdOwogICAgfQoKICAgICMgcmV0dXJuIHRoZSBjb3VudCBhcyBzY2FsYXIKICAgIHJldHVybiAkSURzWzBdIGlmICRSZXN1bHQgZXEgJ0NPVU5UJzsKCiAgICByZXR1cm4gXEBJRHM7Cn0KCj1pdGVtIFdvcmtPcmRlckRlbGV0ZSgpCgpEZWxldGUgYSB3b3Jrb3JkZXIuCgpUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYWxsIGxpbmtzIGFuZCBhdHRhY2htZW50cyB0byB0aGUgd29ya29yZGVyCndpdGggdGhlIHBhc3NlZCB3b3Jrb3JkZXIgaWQuCkFmdGVyIHRoYXQgdGhlIHdvcmtvcmRlciBpcyByZW1vdmVkLgoKICAgIG15ICRTdWNjZXNzID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyRGVsZXRlKAogICAgICAgIFdvcmtPcmRlcklEICA9PiAxMjMsCiAgICAgICAgTm9OdW1iZXJDYWxjID0+IDEsICMgKG9wdGlvbmFsKSBkZWZhdWx0IDAsIGlmIDEgaXQgcHJldmVudHMgYSByZWNhbGN1bGF0aW9uIG9mIHRoZSB3b3Jrb3JkZXIgbnVtYmVycwogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBXb3JrT3JkZXJEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBdHRyaWJ1dGUgKHF3KFdvcmtPcmRlcklEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEF0dHJpYnV0ZX0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBdHRyaWJ1dGUhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRyaWdnZXIgV29ya09yZGVyRGVsZXRlUHJlLUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdXb3JrT3JkZXJEZWxldGVQcmUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBvbGQgd29ya29yZGVyIGRhdGEgdG8gYmUgZ2l2ZW4gdG8gcG9zdCBldmVudCBoYW5kbGVyCiAgICBteSAkV29ya09yZGVyRGF0YSA9ICRTZWxmLT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgV29ya09yZGVySUQgPT4gJFBhcmFte1dvcmtPcmRlcklEfSwKICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBkZWxldGUgYWxsIGxpbmtzIHRvIHRoaXMgd29ya29yZGVyCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JyktPkxpbmtEZWxldGVBbGwoCiAgICAgICAgT2JqZWN0ID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICBLZXkgICAgPT4gJFBhcmFte1dvcmtPcmRlcklEfSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgdGhlIGxpc3Qgb2Ygd29ya29yZGVyIGF0dGFjaG1lbnRzIGFuZCBkZWxldGUgdGhlbQogICAgbXkgQEF0dGFjaG1lbnRzID0gJFNlbGYtPldvcmtPcmRlckF0dGFjaG1lbnRMaXN0KAogICAgICAgIFdvcmtPcmRlcklEID0+ICRQYXJhbXtXb3JrT3JkZXJJRH0sCiAgICApOwoKICAgIGZvciBteSAkRmlsZW5hbWUgKEBBdHRhY2htZW50cykgewoKICAgICAgICBteSAkRGVsZXRlU3VjY2VzcyA9ICRTZWxmLT5Xb3JrT3JkZXJBdHRhY2htZW50RGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkV29ya09yZGVyRGF0YS0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgV29ya09yZGVySUQgICAgPT4gJFBhcmFte1dvcmtPcmRlcklEfSwKICAgICAgICAgICAgRmlsZW5hbWUgICAgICAgPT4gJEZpbGVuYW1lLAogICAgICAgICAgICBBdHRhY2htZW50VHlwZSA9PiAnV29ya09yZGVyJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIGlmICEkRGVsZXRlU3VjY2VzczsKICAgIH0KCiAgICAjIGdldCB0aGUgbGlzdCBvZiByZXBvcnQgYXR0YWNobWVudHMgYW5kIGRlbGV0ZSB0aGVtCiAgICBteSBAUmVwb3J0QXR0YWNobWVudHMgPSAkU2VsZi0+V29ya09yZGVyUmVwb3J0QXR0YWNobWVudExpc3QoCiAgICAgICAgV29ya09yZGVySUQgPT4gJFBhcmFte1dvcmtPcmRlcklEfSwKICAgICk7CiAgICBmb3IgbXkgJEZpbGVuYW1lIChAUmVwb3J0QXR0YWNobWVudHMpIHsKCiAgICAgICAgbXkgJERlbGV0ZVN1Y2Nlc3MgPSAkU2VsZi0+V29ya09yZGVyQXR0YWNobWVudERlbGV0ZSgKICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgPT4gJFdvcmtPcmRlckRhdGEtPntDaGFuZ2VJRH0sCiAgICAgICAgICAgIFdvcmtPcmRlcklEICAgID0+ICRQYXJhbXtXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIEZpbGVuYW1lICAgICAgID0+ICRGaWxlbmFtZSwKICAgICAgICAgICAgQXR0YWNobWVudFR5cGUgPT4gJ1dvcmtPcmRlclJlcG9ydCcsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIHJldHVybiBpZiAhJERlbGV0ZVN1Y2Nlc3M7CiAgICB9CgogICAgIyBnZXQgYWxsIGR5bmFtaWMgZmllbGRzIGZvciB0aGUgb2JqZWN0IHR5cGUgSVRTTVdvcmtPcmRlcgogICAgbXkgJER5bmFtaWNGaWVsZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgT2JqZWN0VHlwZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgVmFsaWQgICAgICA9PiAwLAogICAgKTsKCiAgICAjIGRlbGV0ZSBkeW5hbWljZmllbGQgdmFsdWVzIGZvciB0aGlzIHdvcmtvcmRlcgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGRMaXN0fSApIHsKCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRDb25maWc7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX07CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfSApOwoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyktPlZhbHVlRGVsZXRlKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRQYXJhbXtXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgZGVsZXRlIHRoZSB3b3Jrb3JkZXIKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGNoYW5nZV93b3Jrb3JkZXIgV0hFUkUgaWQgPSA/ICcsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17V29ya09yZGVySUR9IF0sCiAgICApOwoKICAgICMgZGVsZXRlIGNhY2hlCiAgICBmb3IgbXkgJEtleSAoCiAgICAgICAgJ1dvcmtPcmRlckdldDo6SUQ6OicgLiAkUGFyYW17V29ya09yZGVySUR9LAogICAgICAgICdXb3JrT3JkZXJMaXN0OjpDaGFuZ2VJRDo6JyAuICRXb3JrT3JkZXJEYXRhLT57Q2hhbmdlSUR9LAogICAgICAgICdXb3JrT3JkZXJDaGFuZ2VFZmZvcnRzR2V0OjpDaGFuZ2VJRDo6JyAuICRXb3JrT3JkZXJEYXRhLT57Q2hhbmdlSUR9LAogICAgICAgICdXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0OjpDaGFuZ2VJRDo6JyAuICRXb3JrT3JkZXJEYXRhLT57Q2hhbmdlSUR9LAogICAgICAgICdDaGFuZ2VHZXQ6OklEOjonIC4gJFdvcmtPcmRlckRhdGEtPntDaGFuZ2VJRH0sCiAgICAgICAgKQogICAgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkS2V5LAogICAgICAgICk7CiAgICB9CgogICAgIyB0cmlnZ2VyIFdvcmtPcmRlckRlbGV0ZVBvc3QtRXZlbnQKICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ1dvcmtPcmRlckRlbGV0ZVBvc3QnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgT2xkV29ya09yZGVyRGF0YSA9PiAkV29ya09yZGVyRGF0YSwKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gV29ya09yZGVyQ2hhbmdlVGltZUdldCgpCgpSZXR1cm5zIGEgbGlzdCBvZiBQbGFubmVkU3RhcnRUaW1lIHwgUGxhbm5lZEVuZFRpbWUgfCBBY3R1YWxTdGFydFRpbWUgfCBBY3R1YWxFbmRUaW1lCm9mIGEgY2hhbmdlLCB3aGljaCB3b3VsZCBiZSB0aGUgcmVzcGVjdGl2ZSB0aW1lIG9mIHRoZSBlYXJsaWVzdCBzdGFydGluZwp3b3Jrb3JkZXIgKGZvciBzdGFydCB0aW1lcykgb3IgdGhlIGxhdGVzdCBlbmRpbmcgd29ya29yZGVyIChmb3IgZW5kIHRpbWVzKS4KCkZvciBQbGFubmVkU3RhcnRUaW1lIHwgUGxhbm5lZEVuZFRpbWUgfCBBY3R1YWxFbmRUaW1lIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZAppZiBhbnkgb2YgdGhlIHdvcmtvcmRlcnMgb2YgYSBjaGFuZ2UgaGFzIHRoZSByZXNwZWN0aXZlIHRpbWUgbm90IGRlZmluZWQuCgpUaGUgQWN0dWFsU3RhcnRUaW1lIGlzIGRlZmluZWQgd2hlbiBhbnkgb2YgdGhlIHdvcmtvcmRlcnMgb2YgYSBjaGFuZ2UgaGFzCmEgZGVmaW5lZCBBY3R1YWxTdGFydFRpbWUuCgpSZXR1cm4KCiAgICAkVGltZXtQbGFubmVkU3RhcnRUaW1lfQogICAgJFRpbWV7UGxhbm5lZEVuZFRpbWV9CiAgICAkVGltZXtBY3R1YWxTdGFydFRpbWV9CiAgICAkVGltZXtBY3R1YWxFbmRUaW1lfQoKICAgIG15ICRUaW1lUmVmID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQ2hhbmdlVGltZUdldCgKICAgICAgICBDaGFuZ2VJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgPT4gMSwKCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiAgICAgICAgIyBUT0RPOiAoZGVjaWRlIHRoaXMgbGF0ZXIhKQogICAgICAgIE1heWJlIGFkZCB0aGlzIG5ldyBhdHRyaWJ1dGU6CgogICAgICAgICMgVGhlc2UgYXJlIFdvcmtPcmRlclR5cGVzIChUeXBlcywgbm90IFN0YXRlcyEpCiAgICAgICAgIyB3aGljaCB3b3VsZCBiZSBleGNsdWRlZCBmcm9tIHRoZSBjYWxjdWxhdGlvbgogICAgICAgICMgb2YgdGhlIGNoYW5nZSBzdGFydCB0aW1lLgoKICAgICAgICBFeGNsdWRlV29ya09yZGVyVHlwZXMgPT4gWyAnYXBwcm92YWwnLCAncGlyJyBdLCAgICMgKG9wdGlvbmFsKQoKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgKTsKCj1jdXQKCnN1YiBXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhDaGFuZ2VJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBdHRyaWJ1dGV9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXR0cmlidXRlISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBpbml0aWFsaXplIHRoZSByZXR1cm4gdGltZSBoYXNoCiAgICBteSAlVGltZVJldHVybjsKCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnV29ya09yZGVyQ2hhbmdlVGltZUdldDo6Q2hhbmdlSUQ6OicgLiAkUGFyYW17Q2hhbmdlSUR9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CgogICAgaWYgKCRDYWNoZSkgewoKICAgICAgICAjIGdldCBkYXRhIGZyb20gY2FjaGUKICAgICAgICAlVGltZVJldHVybiA9ICV7JENhY2hlfTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGJ1aWxkIHNxbCwgdXNpbmcgbWluIGFuZCBtYXggZnVuY3Rpb25zCiAgICAgICAgbXkgJFNRTCA9ICdTRUxFQ1QgJwogICAgICAgICAgICAuICdNSU4oIHBsYW5uZWRfc3RhcnRfdGltZSApLCAnCiAgICAgICAgICAgIC4gJ01BWCggcGxhbm5lZF9lbmRfdGltZSApLCAnCiAgICAgICAgICAgIC4gJ01JTiggYWN0dWFsX3N0YXJ0X3RpbWUgKSwgJwogICAgICAgICAgICAuICdNQVgoIGFjdHVhbF9lbmRfdGltZSApICcKICAgICAgICAgICAgLiAnRlJPTSBjaGFuZ2Vfd29ya29yZGVyICcKICAgICAgICAgICAgLiAnV0hFUkUgY2hhbmdlX2lkID0gPyc7CgogICAgICAgICMgcmV0cmlldmUgdGhlIHJlcXVlc3RlZCB0aW1lCiAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0NoYW5nZUlEfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRUaW1lUmV0dXJue1BsYW5uZWRTdGFydFRpbWV9ID0gJFJvd1swXSB8fCAnJzsKICAgICAgICAgICAgJFRpbWVSZXR1cm57UGxhbm5lZEVuZFRpbWV9ICAgPSAkUm93WzFdIHx8ICcnOwogICAgICAgICAgICAkVGltZVJldHVybntBY3R1YWxTdGFydFRpbWV9ICA9ICRSb3dbMl0gfHwgJyc7CiAgICAgICAgICAgICRUaW1lUmV0dXJue0FjdHVhbEVuZFRpbWV9ICAgID0gJFJvd1szXSB8fCAnJzsKICAgICAgICB9CgogICAgICAgIFRJTUVGSUVMRDoKICAgICAgICBmb3IgbXkgJFRpbWUgKCBzb3J0IGtleXMgJVRpbWVSZXR1cm4gKSB7CgogICAgICAgICAgICBuZXh0IFRJTUVGSUVMRCBpZiAhJFRpbWVSZXR1cm57JFRpbWV9OwoKICAgICAgICAgICAgIyBjbGVhbnVwIHRpbWUgc3RhbXBzIChzb21lIGRhdGFiYXNlcyBhcmUgdXNpbmcgZS4gZy4gMjAwOC0wMi0yNSAyMjowMzowMC4wMDAwMDApCiAgICAgICAgICAgICRUaW1lUmV0dXJueyRUaW1lfQogICAgICAgICAgICAgICAgPX4gc3sgXEEgKCBcZFxkXGRcZCAtIFxkXGQgLSBcZFxkIFxzIFxkXGQ6XGRcZDpcZFxkICkgXC4gLis/IFx6IH17JDF9eG1zOwoKICAgICAgICAgICAgIyBzZXQgZW1wdHkgc3RyaW5nIGlmIHRoZSBkZWZhdWx0IHRpbWUgd2FzIGZvdW5kCiAgICAgICAgICAgIGlmICggJFRpbWVSZXR1cm57JFRpbWV9IGVxICc5OTk5LTAxLTAxIDAwOjAwOjAwJyApIHsKICAgICAgICAgICAgICAgICRUaW1lUmV0dXJueyRUaW1lfSA9ICcnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIGNoYW5nZSBoYXMgd29ya29yZGVycyB3aXRoIG5vdCB5ZXQgZGVmaW5lZCBwbGFubmVkX3N0YXJ0X3RpbWUgZW50cmllcwogICAgICAgIGlmICggJFRpbWVSZXR1cm57UGxhbm5lZFN0YXJ0VGltZX0gKSB7CgogICAgICAgICAgICAjIGJ1aWxkIFNRTAogICAgICAgICAgICBteSAkU1FMID0gJ1NFTEVDVCBjb3VudCgqKSAnCiAgICAgICAgICAgICAgICAuICdGUk9NIGNoYW5nZV93b3Jrb3JkZXIgJwogICAgICAgICAgICAgICAgLiAiV0hFUkUgcGxhbm5lZF9zdGFydF90aW1lID0gJzk5OTktMDEtMDEgMDA6MDA6MDAnICIKICAgICAgICAgICAgICAgIC4gJ0FORCBjaGFuZ2VfaWQgPSA/JzsKCiAgICAgICAgICAgICMgcmV0cmlldmUgbnVtYmVyIG9mIG5vdCBkZWZpbmVkIGVudHJpZXMKICAgICAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17Q2hhbmdlSUR9IF0sCiAgICAgICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICAgICAgICAgIG15ICRDb3VudDsKICAgICAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgICAgICRDb3VudCA9ICRSb3dbMF07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVzZXQgUGxhbm5lZFN0YXJ0VGltZQogICAgICAgICAgICBpZiAoJENvdW50KSB7CiAgICAgICAgICAgICAgICAkVGltZVJldHVybntQbGFubmVkU3RhcnRUaW1lfSA9ICcnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNldCBjYWNoZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICdJVFNNQ2hhbmdlTWFuYWdlbWVudCcsCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gXCVUaW1lUmV0dXJuLAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiBcJVRpbWVSZXR1cm47Cn0KCj1pdGVtIFdvcmtPcmRlclN0YXRlTG9va3VwKCkKClRoaXMgbWV0aG9kIGRvZXMgYSBsb29rdXAgZm9yIGEgd29ya29yZGVyIHN0YXRlLiBJZiBhIHdvcmtvcmRlciBzdGF0ZSBpZCBpcyBnaXZlbiwKaXQgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgd29ya29yZGVyIHN0YXRlLiBJZiBhIHdvcmtvcmRlciBzdGF0ZSBuYW1lIGlzIGdpdmVuLAp0aGUgYXBwcm9wcmlhdGUgaWQgaXMgcmV0dXJuZWQuCgogICAgbXkgJFdvcmtPcmRlclN0YXRlID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyU3RhdGVMb29rdXAoCiAgICAgICAgV29ya09yZGVyU3RhdGVJRCA9PiAxNTcsCiAgICApOwoKICAgIG15ICRXb3JrT3JkZXJTdGF0ZUlEID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyU3RhdGVMb29rdXAoCiAgICAgICAgV29ya09yZGVyU3RhdGUgPT4gJ3JlYWR5JywKICAgICk7Cgo9Y3V0CgpzdWIgV29ya09yZGVyU3RhdGVMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGVpdGhlciBXb3JrT3JkZXJTdGF0ZUlEIG9yIFdvcmtPcmRlclN0YXRlIG11c3QgYmUgcGFzc2VkCiAgICBpZiAoICEkUGFyYW17V29ya09yZGVyU3RhdGVJRH0gJiYgISRQYXJhbXtXb3JrT3JkZXJTdGF0ZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFdvcmtPcmRlclN0YXRlSUQgb3IgV29ya09yZGVyU3RhdGUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtXb3JrT3JkZXJTdGF0ZUlEfSAmJiAkUGFyYW17V29ya09yZGVyU3RhdGV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBXb3JrT3JkZXJTdGF0ZUlEIE9SIFdvcmtPcmRlclN0YXRlIC0gbm90IGJvdGghJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCB0aGUgd29ya29yZGVyIHN0YXRlcyBmcm9tIHRoZSBnZW5lcmFsIGNhdGFsb2cKICAgIG15ICRTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6U3RhdGUnLAogICAgKTsKCiAgICAjIGNvbnZlcnQgc3RhdGUgbGlzdCBpbnRvIGEgbG9va3VwIGhhc2gKICAgIG15ICVTdGF0ZUlEMk5hbWU7CiAgICBpZiAoICRTdGF0ZUxpc3QgJiYgcmVmICRTdGF0ZUxpc3QgZXEgJ0hBU0gnICYmICV7JFN0YXRlTGlzdH0gKSB7CiAgICAgICAgJVN0YXRlSUQyTmFtZSA9ICV7JFN0YXRlTGlzdH07CiAgICB9CgogICAgIyBjaGVjayB0aGUgc3RhdGUgaGFzaAogICAgaWYgKCAhJVN0YXRlSUQyTmFtZSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0NvdWxkIG5vdCByZXRyaWV2ZSB3b3Jrb3JkZXIgc3RhdGVzIGZyb20gdGhlIGdlbmVyYWwgY2F0YWxvZy4nLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtXb3JrT3JkZXJTdGF0ZUlEfSApIHsKICAgICAgICByZXR1cm4gJFN0YXRlSUQyTmFtZXsgJFBhcmFte1dvcmtPcmRlclN0YXRlSUR9IH07CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyByZXZlcnNlIGtleSAtIHZhbHVlIHBhaXJzIHRvIGhhdmUgdGhlIG5hbWUgYXMga2V5cwogICAgICAgIG15ICVTdGF0ZU5hbWUySUQgPSByZXZlcnNlICVTdGF0ZUlEMk5hbWU7CgogICAgICAgIHJldHVybiAkU3RhdGVOYW1lMklEeyAkUGFyYW17V29ya09yZGVyU3RhdGV9IH07CiAgICB9Cn0KCj1pdGVtIFdvcmtPcmRlclBvc3NpYmxlU3RhdGVzR2V0KCkKClRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIHBvc3NpYmxlIHdvcmtvcmRlciBzdGF0ZXMuCklmIEM8V29ya09yZGVySUQ+IGlzIG9taXR0ZWQsIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHdvcmtvcmRlciBzdGF0ZXMgaXMgcmV0dXJuZWQuCklmIEM8V29ya09yZGVySUQ+IGlzIGdpdmVuLCB0aGUgbGlzdCBvZiBwb3NzaWJsZSBzdGF0ZXMgZm9yIHRoZSBnaXZlbgp3b3Jrb3JkZXIgaXMgcmV0dXJuZWQuCgogICAgbXkgJFdvcmtPcmRlclN0YXRlTGlzdCA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclBvc3NpYmxlU3RhdGVzR2V0KAogICAgICAgIFdvcmtPcmRlcklEID0+IDEyMywgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKVGhlIHJldHVybiB2YWx1ZSBpcyBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSBvZiBoYXNocmVmcy4gVGhlIGVsZW1lbnQgJ0tleScgaXMgdGhlbgp0aGUgU3RhdGVJRCBhbmQgdGhlIGVsZW1lbnQgJ1ZhbHVlJyBpcyB0aGUgbmFtZSBvZiB0aGUgc3RhdGUuIFRoZSBhcnJheSBlbGVtZW50cwphcmUgc29ydGVkIGJ5IHN0YXRlIGlkLgoKICAgIG15ICRXb3JrT3JkZXJTdGF0ZUxpc3QgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAxNTYsCiAgICAgICAgICAgIFZhbHVlID0+ICdhY2NlcHRlZCcsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+IDE1NywKICAgICAgICAgICAgVmFsdWUgPT4gJ2luIHByb2dyZXNzJywKICAgICAgICB9LAogICAgXTsKCj1jdXQKCnN1YiBXb3JrT3JkZXJQb3NzaWJsZVN0YXRlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEF0dHJpYnV0ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHdvcmtvcmRlciBzdGF0ZSBsaXN0CiAgICBteSAkU3RhdGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpXb3JrT3JkZXI6OlN0YXRlJywKICAgICkgfHwge307CgogICAgIyB0byBzdG9yZSBhbiBhcnJheSBvZiBoYXNoIHJlZnMKICAgIG15IEBBcnJheUhhc2hSZWY7CgogICAgIyBpZiBXb3JrT3JkZXJJRCBpcyBnaXZlbiwgb25seSB1c2UgcG9zc2libGUgbmV4dCBzdGF0ZXMgYXMgZGVmaW5lZCBpbiBzdGF0ZSBtYWNoaW5lCiAgICBpZiAoICRQYXJhbXtXb3JrT3JkZXJJRH0gKSB7CgogICAgICAgICMgZ2V0IHdvcmtvcmRlciBkYXRhCiAgICAgICAgbXkgJFdvcmtPcmRlciA9ICRTZWxmLT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRQYXJhbXtXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgZm9yIHN0YXRlIGxvY2sKICAgICAgICBteSAkU3RhdGVMb2NrID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nKS0+Q29uZGl0aW9uTWF0Y2hTdGF0ZUxvY2soCiAgICAgICAgICAgIE9iamVjdE5hbWUgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgICAgICBTZWxlY3RvciAgID0+ICRQYXJhbXtXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIFN0YXRlSUQgICAgPT4gJFdvcmtPcmRlci0+e1dvcmtPcmRlclN0YXRlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgc2V0IGFzIGRlZmF1bHQgc3RhdGUgY3VycmVudCB3b3Jrb3JkZXIgc3RhdGUKICAgICAgICBteSBATmV4dFN0YXRlSURzID0gKCAkV29ya09yZGVyLT57V29ya09yZGVyU3RhdGVJRH0gKTsKCiAgICAgICAgIyBjaGVjayBpZiByZWFjaGFibGUgd29ya29yZGVyIGVuZCBzdGF0ZXMgc2hvdWxkIGJlIGFsbG93ZWQgZm9yIGxvY2tlZCB3b3Jrb3JkZXIgc3RhdGVzCiAgICAgICAgbXkgJFdvcmtPcmRlckVuZFN0YXRlc0FsbG93ZWQKICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0lUU01Xb3JrT3JkZXI6OlN0YXRlTG9jazo6QWxsb3dFbmRTdGF0ZXMnKTsKCiAgICAgICAgaWYgKCRXb3JrT3JkZXJFbmRTdGF0ZXNBbGxvd2VkKSB7CgogICAgICAgICAgICAjIHNldCBhcyBkZWZhdWx0IHN0YXRlIGN1cnJlbnQgc3RhdGUgYW5kIGFsbCBwb3NzaWJsZSBlbmQgc3RhdGVzCiAgICAgICAgICAgIG15ICRFbmRTdGF0ZUlEc1JlZgogICAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVN0YXRlTWFjaGluZScpLT5TdGF0ZVRyYW5zaXRpb25HZXRFbmRTdGF0ZXMoCiAgICAgICAgICAgICAgICBTdGF0ZUlEID0+ICRXb3JrT3JkZXItPntXb3JrT3JkZXJTdGF0ZUlEfSwKICAgICAgICAgICAgICAgIENsYXNzICAgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6U3RhdGUnLAogICAgICAgICAgICAgICAgKSB8fCBbXTsKICAgICAgICAgICAgQE5leHRTdGF0ZUlEcyA9IHNvcnQgKCBAeyRFbmRTdGF0ZUlEc1JlZn0sICRXb3JrT3JkZXItPntXb3JrT3JkZXJTdGF0ZUlEfSApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgcG9zc2libGUgbmV4dCBzdGF0ZXMgaWYgbm8gc3RhdGUgbG9jawogICAgICAgIGlmICggISRTdGF0ZUxvY2sgKSB7CgogICAgICAgICAgICAjIGdldCB0aGUgcG9zc2libGUgbmV4dCBzdGF0ZSBpZHMKICAgICAgICAgICAgbXkgJE5leHRTdGF0ZUlEc1JlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNU3RhdGVNYWNoaW5lJyktPlN0YXRlVHJhbnNpdGlvbkdldCgKICAgICAgICAgICAgICAgIFN0YXRlSUQgPT4gJFdvcmtPcmRlci0+e1dvcmtPcmRlclN0YXRlSUR9LAogICAgICAgICAgICAgICAgQ2xhc3MgICA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpTdGF0ZScsCiAgICAgICAgICAgICkgfHwgW107CgogICAgICAgICAgICAjIGFkZCBjdXJyZW50IHdvcmtvcmRlciBzdGF0ZSBpZCB0byBsaXN0CiAgICAgICAgICAgIEBOZXh0U3RhdGVJRHMgPSBzb3J0ICggQHskTmV4dFN0YXRlSURzUmVmfSwgJFdvcmtPcmRlci0+e1dvcmtPcmRlclN0YXRlSUR9ICk7CiAgICAgICAgfQoKICAgICAgICAjIGFzc2VtYmxlIHRoZSBhcnJheSBvZiBoYXNoIHJlZnMgd2l0aCBvbmx5IHBvc3NpYmxlIG5leHQgc3RhdGVzCiAgICAgICAgU1RBVEVJRDoKICAgICAgICBmb3IgbXkgJFN0YXRlSUQgKEBOZXh0U3RhdGVJRHMpIHsKCiAgICAgICAgICAgICMgY2hlY2sgc3RhdGUgaWQKICAgICAgICAgICAgbmV4dCBTVEFURUlEIGlmICEkU3RhdGVJRDsKCiAgICAgICAgICAgICMgc3RvcmUgaWQgYW5kIG5hbWUgaW4gdGhlIGFycmF5CiAgICAgICAgICAgIHB1c2ggQEFycmF5SGFzaFJlZiwgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkU3RhdGVMaXN0LT57JFN0YXRlSUR9LAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFxAQXJyYXlIYXNoUmVmOwogICAgfQoKICAgICMgYXNzZW1ibGUgdGhlIGFycmF5IG9mIGhhc2ggcmVmcyB3aXRoIGFsbCBuZXh0IHN0YXRlcwogICAgZm9yIG15ICRTdGF0ZUlEICggc29ydCBrZXlzICV7JFN0YXRlTGlzdH0gKSB7CiAgICAgICAgcHVzaCBAQXJyYXlIYXNoUmVmLCB7CiAgICAgICAgICAgIEtleSAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICBWYWx1ZSA9PiAkU3RhdGVMaXN0LT57JFN0YXRlSUR9LAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIFxAQXJyYXlIYXNoUmVmOwp9Cgo9aXRlbSBXb3JrT3JkZXJUeXBlTG9va3VwKCkKClRoaXMgbWV0aG9kIGRvZXMgYSBsb29rdXAgZm9yIGEgd29ya29yZGVyIHR5cGUuIElmIGEgd29ya29yZGVyIHR5cGUgaWQgaXMgZ2l2ZW4sCml0IHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHdvcmtvcmRlciB0eXBlLiBJZiBhIHdvcmtvcmRlciB0eXBlIG5hbWUgaXMgZ2l2ZW4sCnRoZSBhcHByb3ByaWF0ZSBpZCBpcyByZXR1cm5lZC4KCiAgICBteSAkV29ya09yZGVyVHlwZSA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclR5cGVMb29rdXAoCiAgICAgICAgV29ya09yZGVyVHlwZUlEID0+IDE1NywKICAgICk7CgogICAgbXkgJFdvcmtPcmRlclR5cGVJRCA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclR5cGVMb29rdXAoCiAgICAgICAgV29ya09yZGVyVHlwZSA9PiAncmVhZHknLAogICAgKTsKCj1jdXQKCnN1YiBXb3JrT3JkZXJUeXBlTG9va3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBlaXRoZXIgV29ya09yZGVyVHlwZUlEIG9yIFdvcmtPcmRlclR5cGUgbXVzdCBiZSBwYXNzZWQKICAgIGlmICggISRQYXJhbXtXb3JrT3JkZXJUeXBlSUR9ICYmICEkUGFyYW17V29ya09yZGVyVHlwZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFdvcmtPcmRlclR5cGVJRCBvciBXb3JrT3JkZXJUeXBlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCAkUGFyYW17V29ya09yZGVyVHlwZUlEfSAmJiAkUGFyYW17V29ya09yZGVyVHlwZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFdvcmtPcmRlclR5cGVJRCBPUiBXb3JrT3JkZXJUeXBlIC0gbm90IGJvdGghJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCB3b3Jrb3JkZXIgdHlwZSBmcm9tIGdlbmVyYWwgY2F0YWxvZwogICAgIyBtYXBwaW5nIG9mIHRoZSBpZCB0byB0aGUgbmFtZQogICAgbXkgJVdvcmtPcmRlclR5cGUgPSAlewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6VHlwZScsCiAgICAgICAgICAgICkKICAgIH07CgogICAgIyBjaGVjayB0aGUgd29ya29yZGVyIHR5cGVzIGhhc2gKICAgIGlmICggISVXb3JrT3JkZXJUeXBlICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnQ291bGQgbm90IHJldHJpZXZlIHdvcmtvcmRlciB0eXBlcyBmcm9tIHRoZSBnZW5lcmFsIGNhdGFsb2cuJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCAkUGFyYW17V29ya09yZGVyVHlwZUlEfSApIHsKICAgICAgICByZXR1cm4gJFdvcmtPcmRlclR5cGV7ICRQYXJhbXtXb3JrT3JkZXJUeXBlSUR9IH07CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyByZXZlcnNlIGtleSAtIHZhbHVlIHBhaXJzIHRvIGhhdmUgdGhlIG5hbWUgYXMga2V5cwogICAgICAgIG15ICVSZXZlcnNlZFdvcmtPcmRlclR5cGUgPSByZXZlcnNlICVXb3JrT3JkZXJUeXBlOwoKICAgICAgICByZXR1cm4gJFJldmVyc2VkV29ya09yZGVyVHlwZXsgJFBhcmFte1dvcmtPcmRlclR5cGV9IH07CiAgICB9Cn0KCj1pdGVtIFdvcmtPcmRlclR5cGVMaXN0KCkKClRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIGFsbCB3b3Jrb3JkZXIgdHlwZXMuCgogICAgbXkgJFdvcmtPcmRlclR5cGVMaXN0ID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyVHlwZUxpc3QoCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICBEZWZhdWx0ICAgICA9PiAxLCAgICMgb3B0aW9uYWwgLSB0aGUgZGVmYXVsdCB0eXBlIGlzIHNlbGVjdGVkIHR5cGUgKGRlZmF1bHQ6IDApCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gMTIzLCAjIG9wdGlvbmFsIC0gdGhpcyBpZCBpcyBzZWxlY3RlZAogICAgKTsKClRoZSByZXR1cm4gdmFsdWUgaXMgYSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgb2YgaGFzaHJlZnMuIFRoZSBFbGVtZW50ICdLZXknIGlzIHRoZW4KdGhlIFR5cGVJRCBhbmQgZGllIEVsZW1lbnQgJ1ZhbHVlJyBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZS4gVGhlIGFycmF5IGVsZW1lbnRzCmFyZSBzb3J0ZWQgYnkgdHlwZSBpZC4KCiAgICBteSAkV29ya09yZGVyVHlwZUxpc3QgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAxNzEsCiAgICAgICAgICAgIFZhbHVlID0+ICd3b3Jrb3JkZXInLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAxNzIsCiAgICAgICAgICAgIFZhbHVlID0+ICdiYWNrb3V0JywKICAgICAgICB9LAogICAgXTsKCj1jdXQKCnN1YiBXb3JrT3JkZXJUeXBlTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEF0dHJpYnV0ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgd2hhdCB0eXBlIGlzIHNlbGVjdGVkCiAgICBteSAkU2VsZWN0ZWRJRCA9ICRQYXJhbXtTZWxlY3RlZH0gfHwgMDsKCiAgICBpZiAoICRQYXJhbXtEZWZhdWx0fSApIHsKCiAgICAgICAgIyBzZXQgY29uZmlnIG9wdGlvbgogICAgICAgIG15ICRDb25maWdPcHRpb24gPSAnSVRTTVdvcmtPcmRlcjo6VHlwZTo6RGVmYXVsdCc7CgogICAgICAgICMgZ2V0IGRlZmF1bHQgd29ya29yZGVyIHR5cGUgZnJvbSBjb25maWcKICAgICAgICBteSAkRGVmYXVsdFR5cGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJENvbmZpZ09wdGlvbik7CgogICAgICAgICMgY2hlY2sgaWYgZGVmYXVsdCB0eXBlIGV4aXN0cyBpbiBnZW5lcmFsIGNhdGFsb2cKICAgICAgICBteSAkSXRlbURhdGFSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6VHlwZScsCiAgICAgICAgICAgIE5hbWUgID0+ICREZWZhdWx0VHlwZSwKICAgICAgICApOwoKICAgICAgICAjIGVycm9yIGhhbmRsaW5nIGJlY2F1c2Ugb2YgaW52YWxpZCBjb25maWcgc2V0dGluZwogICAgICAgIGlmICggISRJdGVtRGF0YVJlZiB8fCByZWYgJEl0ZW1EYXRhUmVmIG5lICdIQVNIJyB8fCAhJXskSXRlbURhdGFSZWZ9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIGRlZmF1bHQgV29ya09yZGVyVHlwZSAnJERlZmF1bHRUeXBlJyAiCiAgICAgICAgICAgICAgICAgICAgLiAiaW4gc3lzY29uZmlnIG9wdGlvbiAnJENvbmZpZ09wdGlvbicgaXMgaW52YWxpZCEgQ2hlY2sgdGhlIGdlbmVyYWwgY2F0YWxvZyEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIHNldCBkZWZhdWx0CiAgICAgICAgJFNlbGVjdGVkSUQgPSAkSXRlbURhdGFSZWYtPntJdGVtSUR9OwogICAgfQoKICAgICMgZ2V0IHdvcmtvcmRlciB0eXBlIGxpc3QKICAgIG15ICRXb3JrT3JkZXJUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpUeXBlJywKICAgICkgfHwge307CgogICAgIyBhc3NlbWJsZSBhIGFuIGFycmF5IG9mIGhhc2ggcmVmcwogICAgbXkgQEFycmF5SGFzaFJlZjsKICAgIGZvciBteSAkVHlwZUlEICggc29ydCBrZXlzICV7JFdvcmtPcmRlclR5cGVMaXN0fSApIHsKICAgICAgICBteSAlU2VsZWN0ZWRJbmZvOwoKICAgICAgICBpZiAoICRTZWxlY3RlZElEICYmICRTZWxlY3RlZElEID09ICRUeXBlSUQgKSB7CiAgICAgICAgICAgICRTZWxlY3RlZEluZm97U2VsZWN0ZWR9ID0gMTsKICAgICAgICB9CgogICAgICAgIHB1c2ggQEFycmF5SGFzaFJlZiwgewogICAgICAgICAgICBLZXkgICA9PiAkVHlwZUlELAogICAgICAgICAgICBWYWx1ZSA9PiAkV29ya09yZGVyVHlwZUxpc3QtPnskVHlwZUlEfSwKICAgICAgICAgICAgJVNlbGVjdGVkSW5mbywKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiBcQEFycmF5SGFzaFJlZjsKfQoKPWl0ZW0gUGVybWlzc2lvbigpCgpSZXR1cm5zIHdoZXRoZXIgdGhlIGFnZW50IEM8VXNlcklEPiBoYXMgcGVybWlzc2lvbnMgb2YgdGhlIHR5cGUgQzxUeXBlPgpvbiB0aGUgd29ya29yZGVyIEM8V29ya09yZGVySUQ+LiBUaGUgcGFyYW1ldGVycyBhcmUgcGFzc2VkIG9uIHRvCnRoZSBwZXJtaXNzaW9uIG1vZHVsZXMgdGhhdCB3ZXJlIHJlZ2lzdGVyZWQgaW4gdGhlIHBlcm1pc3Npb24gcmVnaXN0cnkuClRoZSBzdGFuZGFyZCBwZXJtaXNzaW9uIHJlZ2lzdHJ5IGlzIEI8SVRTTVdvcmtPcmRlcjo6UGVybWlzc2lvbj4sIGJ1dAp0aGF0IGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIHBhcmFtZXRlciBDPFBlcm1pc3Npb25SZWdpc3RyeT4uCgpUaGUgcmVnaXN0ZXJlZCBwZXJtaXNzaW9uIG1vZHVsZXMgYXJlIHJ1biBpbiB0aGUgYWxwaGFiZXRpY2FsIG9yZGVyIG9mCnRoZWlyIHJlZ2lzdHJ5IGtleXMuCk92ZXJhbGwgcGVybWlzc2lvbiBpcyBncmFudGVkIHdoZW4gYSBwZXJtaXNzaW9uIG1vZHVsZSwgd2hpY2ggaGFzIHRoZSBhdHRyaWJ1dGUgJ0dyYW50ZWQnIHNldCwKZ3JhbnRzIHBlcm1pc3Npb24uIE92ZXJhbGwgcGVybWlzc2lvbiBpcyBkZW5pZWQgd2hlbiBhIHBlcm1pc3Npb24gbW9kdWxlLCB3aGljaCBoYXMgdGhlIGF0dHJpYnV0ZSAnUmVxdWlyZWQnCnNldCwgZGVuaWVzIHBlcm1pc3Npb24uIE92ZXJhbGwgcGVybWlzc2lvbiBpcyBhbHNvIGRlbmllZCB3aGVuIHdoZW4gYWxsIHBlcm1pc3Npb24gbW9kdWxlIHdlcmUgYXNrZWQKd2l0aG91dCBjb21pbmcgdG8gYW4gY29uY2x1c2lvbi4KCkFwcHJvdmFsIGlzIGluZGljYXRlZCBieSB0aGUgcmV0dXJuIHZhbHVlIDEuIERlbmlhbCBpcyBpbmRpY2F0ZWQgYnkgcmV0dXJuaW5nIGFuIGVtcHR5IGxpc3QuCgpUaGUgb3B0aW9uYWwgb3B0aW9uIEM8TG9nTm8+IHR1cm5zIG9mZiBsb2dnaW5nIHdoZW4gYWNjZXNzIHdhcyBkZW5pZWQuClRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIG1ldGhvZCBpcyB1c2VkIGZvciBjaGVja2luZyB3aGV0aGVyIGEgbGluayBvciBhbiBhY3Rpb24gc2hvdWxkIGJlIHNob3duLgoKICAgIG15ICRBY2Nlc3MgPSAkV29ya09yZGVyT2JqZWN0LT5QZXJtaXNzaW9uKAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVHlwZSAgICAgICAgICAgICAgID0+ICdybycsICAgICAgICAgICAgICAgICAgICAgICAgICMgJ3JvJyBhbmQgJ3J3JyBhcmUgc3VwcG9ydGVkCiAgICAgICAgQWN0aW9uICAgICAgICAgICAgID0+ICdBZ2VudElUU01Xb3JrT3JkZXJSZXBvcnQnLCAgICMgb3B0aW9uYWwKICAgICAgICBXb3JrT3JkZXJJRCAgICAgICAgPT4gNDQ0NCwKICAgICAgICBQZXJtaXNzaW9uUmVnaXN0cnkgPT4gJ0lUU01Xb3JrT3JkZXI6OlRha2VQZXJtaXNzaW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIHdpdGggZGVmYXVsdCAnSVRTTVdvcmtPcmRlcjo6UGVybWlzc2lvbicKICAgICAgICBMb2dObyAgICAgICAgICAgICAgPT4gMSwgICAgICAjIG9wdGlvbmFsLCB0dXJucyBvZmYgbG9nZ2luZyB3aGVuIGFjY2VzcyBpcyBkZW5pZWQKICAgICk7Cgo9Y3V0CgpzdWIgUGVybWlzc2lvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUeXBlIFVzZXJJRCBXb3JrT3JkZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyB0aGUgcGxhY2Ugd2hlcmUgdGhlIHBlcm1pc3Npb24gbW9kdWxlcyBhcmUgcmVnaXN0ZXJkIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgcGFyYW1ldGVyCiAgICBteSAkUmVnaXN0cnkgPSAkUGFyYW17UGVybWlzc2lvblJlZ2lzdHJ5fSB8fCAnSVRTTVdvcmtPcmRlcjo6UGVybWlzc2lvbic7CgogICAgIyBydW4gdGhlIHJlbGV2YW50IHBlcm1pc3Npb24gbW9kdWxlcwogICAgaWYgKCByZWYgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCRSZWdpc3RyeSkgZXEgJ0hBU0gnICkgewoKICAgICAgICBteSAlTW9kdWxlcyA9ICV7ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgkUmVnaXN0cnkpIH07CgogICAgICAgIE1PRFVMRToKICAgICAgICBmb3IgbXkgJE1vZHVsZSAoIHNvcnQga2V5cyAlTW9kdWxlcyApIHsKCiAgICAgICAgICAgICMgbG9nIHRyeSBvZiBsb2FkIG1vZHVsZQogICAgICAgICAgICBpZiAoICRTZWxmLT57RGVidWd9ID4gMSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRyeSB0byBsb2FkIG1vZHVsZTogJE1vZHVsZXN7JE1vZHVsZX0tPntNb2R1bGV9ISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgIG5leHQgTU9EVUxFCiAgICAgICAgICAgICAgICBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSggJE1vZHVsZXN7JE1vZHVsZX0tPntNb2R1bGV9ICk7CgogICAgICAgICAgICAjIGNyZWF0ZSBvYmplY3QKICAgICAgICAgICAgbXkgJE1vZHVsZU9iamVjdCA9ICRNb2R1bGVzeyRNb2R1bGV9LT57TW9kdWxlfS0+bmV3KCk7CgogICAgICAgICAgICAjIGFzayBmb3IgdGhlIG9waW5pb24gb2YgdGhlIFBlcm1pc3Npb24gbW9kdWxlCiAgICAgICAgICAgIG15ICRBY2Nlc3MgPSAkTW9kdWxlT2JqZWN0LT5SdW4oJVBhcmFtKTsKCiAgICAgICAgICAgICMgR3JhbnQgb3ZlcmFsbCBwZXJtaXNzaW9uLAogICAgICAgICAgICAjIHdoZW4gdGhlIG1vZHVsZSBncmFudGVkIGEgc3VmZmljaWVudCBwZXJtaXNzaW9uLgogICAgICAgICAgICBpZiAoICRBY2Nlc3MgJiYgJE1vZHVsZXN7JE1vZHVsZX0tPntHcmFudGVkfSApIHsKICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntEZWJ1Z30gPiAwICkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiR3JhbnRlZCAnJFBhcmFte1R5cGV9JyBhY2Nlc3MgZm9yICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlVzZXJJRDogJFBhcmFte1VzZXJJRH0gb24gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiV29ya09yZGVySUQgJyRQYXJhbXtXb3JrT3JkZXJJRH0nICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gInRocm91Z2ggJE1vZHVsZXN7JE1vZHVsZX0tPntNb2R1bGV9IChubyBtb3JlIGNoZWNrcykhIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZ3JhbnQgcGVybWlzc2lvbgogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgRGVueSBvdmVyYWxsIHBlcm1pc3Npb24sCiAgICAgICAgICAgICMgd2hlbiB0aGUgbW9kdWxlIGRlbmllZCBhIHJlcXVpcmVkIHBlcm1pc3Npb24uCiAgICAgICAgICAgIGlmICggISRBY2Nlc3MgJiYgJE1vZHVsZXN7JE1vZHVsZX0tPntSZXF1aXJlZH0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICEkUGFyYW17TG9nTm99ICkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkRlbmllZCAnJFBhcmFte1R5cGV9JyBhY2Nlc3MgZm9yICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlVzZXJJRDogJFBhcmFte1VzZXJJRH0gb24gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiV29ya09yZGVySUQgJyRQYXJhbXtXb3JrT3JkZXJJRH0nICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gImJlY2F1c2UgJE1vZHVsZXN7JE1vZHVsZX0tPntNb2R1bGV9IGlzIHJlcXVpcmVkISIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGRlbnkgcGVybWlzc2lvbgogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgRGVueSBhY2Nlc3Mgd2hlbiBuZWl0aGVyIGEgJ0dyYW50ZWQnLUNoZWNrIG5vciBhICdSZXF1aXJlZCctQ2hlY2sgaGFzIHJlYWNoZWQgYSBjb25jbHVzaW9uLgogICAgaWYgKCAhJFBhcmFte0xvZ05vfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJQZXJtaXNzaW9uIGRlbmllZCAoVXNlcklEOiAkUGFyYW17VXNlcklEfSAnJFBhcmFte1R5cGV9JyAiCiAgICAgICAgICAgICAgICAuICJvbiBXb3JrT3JkZXJJRDogJFBhcmFte1dvcmtPcmRlcklEfSkhIiwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybjsKfQoKPWl0ZW0gV29ya09yZGVyU3RhdGVJRHNDaGVjaygpCgpDaGVjayB3aGV0aGVyIGFsbCBvZiB0aGUgZ2l2ZW4gd29ya29yZGVyIHN0YXRlIGlkcyBhcmUgdmFsaWQuClRoZSBtZXRob2QgaXMgcHVibGljIGFzIGl0IGlzIHVzZWQgaW4gTDxLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6Q2hhbmdlU2VhcmNoPi4KCiAgICBteSAkT2sgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJTdGF0ZUlEc0NoZWNrKAogICAgICAgIFdvcmtPcmRlclN0YXRlSURzID0+IFsgMjUgXSwKICAgICk7Cgo9Y3V0CgpzdWIgV29ya09yZGVyU3RhdGVJRHNDaGVjayB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17V29ya09yZGVyU3RhdGVJRHN9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBXb3JrT3JkZXJTdGF0ZUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCByZWYgJFBhcmFte1dvcmtPcmRlclN0YXRlSURzfSBuZSAnQVJSQVknICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnVGhlIHBhcmFtIFdvcmtPcmRlclN0YXRlSURzIG11c3QgYmUgYW4gQVJSQVkgcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBpZiBXb3JrT3JkZXJTdGF0ZUlEcyBiZWxvbmdzIHRvIGNvcnJlY3QgZ2VuZXJhbCBjYXRhbG9nIGNsYXNzCiAgICBmb3IgbXkgJFN0YXRlSUQgKCBAeyAkUGFyYW17V29ya09yZGVyU3RhdGVJRHN9IH0gKSB7CiAgICAgICAgbXkgJFN0YXRlID0gJFNlbGYtPldvcmtPcmRlclN0YXRlTG9va3VwKAogICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZUlEID0+ICRTdGF0ZUlELAogICAgICAgICk7CgogICAgICAgIGlmICggISRTdGF0ZSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBzdGF0ZSBpZCAkU3RhdGVJRCBpcyBub3QgdmFsaWQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIFdvcmtPcmRlckF0dGFjaG1lbnRBZGQoKQoKQWRkIGFuIGF0dGFjaG1lbnQgdG8gdGhlIGdpdmVuIHdvcmtvcmRlci4KCiAgICBteSAkU3VjY2VzcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckF0dGFjaG1lbnRBZGQoCiAgICAgICAgQ2hhbmdlSUQgICAgICAgPT4gMTIzLAogICAgICAgIFdvcmtPcmRlcklEICAgID0+IDQ1NiwgICAgICAgICAgICAjIHRoZSBXb3JrT3JkZXJJRCBiZWNvbWVzIHBhcnQgb2YgdGhlIGZpbGUgcGF0aAogICAgICAgIEF0dGFjaG1lbnRUeXBlID0+ICdXb3JrT3JkZXInLCAgICAjICggJ1dvcmtPcmRlcicgfHwgJ1dvcmtPcmRlclJlcG9ydCcpICAob3B0aW9uYWwsIGRlZmF1bHQgJ1dvcmtPcmRlcicgKQogICAgICAgIEZpbGVuYW1lICAgICAgID0+ICdmaWxlbmFtZScsCiAgICAgICAgQ29udGVudCAgICAgICAgPT4gJ2NvbnRlbnQnLAogICAgICAgIENvbnRlbnRUeXBlICAgID0+ICd0ZXh0L3BsYWluJywKICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBXb3JrT3JkZXJBdHRhY2htZW50QWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhDaGFuZ2VJRCBXb3JrT3JkZXJJRCBGaWxlbmFtZSBDb250ZW50IENvbnRlbnRUeXBlIFVzZXJJRCApKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgU2V0IGF0dGFjaG1lbnQgdHlwZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGF0dGFjaG1lbnRzIG9mIHdvcmtvcmRlcnMKICAgICMgYW5kIHRob3NlIGZyb20gcmVwb3J0cyBvZiB3b3Jrb3JkZXJzCiAgICBteSAkQXR0YWNobWVudFR5cGUgPSAkUGFyYW17QXR0YWNobWVudFR5cGV9IHx8ICdXb3JrT3JkZXInOwoKICAgICMgc2V0IGV2ZW50IG5hbWUgYmFzZWQgb24gdGhlIGF0dGFjaG1lbnQgdHlwZQogICAgbXkgJEV2ZW50OwogICAgaWYgKCAkQXR0YWNobWVudFR5cGUgZXEgJ1dvcmtPcmRlcicgKSB7CiAgICAgICAgJEV2ZW50ID0gJ1dvcmtPcmRlckF0dGFjaG1lbnRBZGRQb3N0JzsKICAgIH0KICAgIGVsc2lmICggJEF0dGFjaG1lbnRUeXBlIGVxICdXb3JrT3JkZXJSZXBvcnQnICkgewogICAgICAgICRFdmVudCA9ICdXb3JrT3JkZXJSZXBvcnRBdHRhY2htZW50QWRkUG9zdCc7CiAgICB9CgogICAgIyB3cml0ZSB0byB2aXJ0dWFsIGZzCiAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWaXJ0dWFsRlMnKS0+V3JpdGUoCiAgICAgICAgRmlsZW5hbWUgICAgPT4gIiRBdHRhY2htZW50VHlwZS8kUGFyYW17V29ya09yZGVySUR9LyRQYXJhbXtGaWxlbmFtZX0iLAogICAgICAgIE1vZGUgICAgICAgID0+ICdiaW5hcnknLAogICAgICAgIENvbnRlbnQgICAgID0+IFwkUGFyYW17Q29udGVudH0sCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBDb250ZW50SUQgICA9PiAkUGFyYW17Q29udGVudElEfSwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJFBhcmFte0NvbnRlbnRUeXBlfSwKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFBhcmFte1dvcmtPcmRlcklEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyBjaGVjayBmb3IgZXJyb3IKICAgIGlmICgkU3VjY2VzcykgewoKICAgICAgICAjIHRyaWdnZXIgQXR0YWNobWVudEFkZC1FdmVudAogICAgICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgICAgIEV2ZW50ID0+ICRFdmVudCwKICAgICAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2Fubm90IGFkZCBhdHRhY2htZW50IGZvciB3b3Jrb3JkZXIgJFBhcmFte1dvcmtPcmRlcklEfSIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBXb3JrT3JkZXJBdHRhY2htZW50RGVsZXRlKCkKCkRlbGV0ZSB0aGUgZ2l2ZW4gZmlsZSBmcm9tIHRoZSB2aXJ0dWFsIGZpbGVzeXN0ZW0uCgogICAgbXkgJFN1Y2Nlc3MgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBdHRhY2htZW50RGVsZXRlKAogICAgICAgIENoYW5nZUlEICAgICAgID0+IDEyMzQ1LAogICAgICAgIFdvcmtPcmRlcklEICAgID0+IDUxMjMsCiAgICAgICAgQXR0YWNobWVudFR5cGUgPT4gJ1dvcmtPcmRlcicsICAgICAgICAgICAjICggJ1dvcmtPcmRlcicgfHwgJ1dvcmtPcmRlclJlcG9ydCcpICAob3B0aW9uYWwsIGRlZmF1bHQgJ1dvcmtPcmRlcicgKQogICAgICAgIEZpbGVuYW1lICAgICAgID0+ICdQcm9qZWN0cGxhbi5wZGYnLCAgICAgIyBpZGVudGlmaWVzIHRoZSBhdHRhY2htZW50ICh0b2dldGhlciB3aXRoIHRoZSBXb3JrT3JkZXJJRCkKICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBXb3JrT3JkZXJBdHRhY2htZW50RGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhDaGFuZ2VJRCBXb3JrT3JkZXJJRCBGaWxlbmFtZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBTZXQgYXR0YWNobWVudCB0eXBlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gYXR0YWNobWVudHMgb2Ygd29ya29yZGVycwogICAgIyBhbmQgdGhvc2UgZnJvbSByZXBvcnRzIG9mIHdvcmtvcmRlcnMKICAgIG15ICRBdHRhY2htZW50VHlwZSA9ICRQYXJhbXtBdHRhY2htZW50VHlwZX0gfHwgJ1dvcmtPcmRlcic7CgogICAgIyBzZXQgZXZlbnQgbmFtZSBiYXNlZCBvbiB0aGUgYXR0YWNobWVudCB0eXBlCiAgICBteSAkRXZlbnQ7CiAgICBpZiAoICRBdHRhY2htZW50VHlwZSBlcSAnV29ya09yZGVyJyApIHsKICAgICAgICAkRXZlbnQgPSAnV29ya09yZGVyQXR0YWNobWVudERlbGV0ZVBvc3QnOwogICAgfQogICAgZWxzaWYgKCAkQXR0YWNobWVudFR5cGUgZXEgJ1dvcmtPcmRlclJlcG9ydCcgKSB7CiAgICAgICAgJEV2ZW50ID0gJ1dvcmtPcmRlclJlcG9ydEF0dGFjaG1lbnREZWxldGVQb3N0JzsKICAgIH0KCiAgICAjIGFkZCBwcmVmaXgKICAgIG15ICRGaWxlbmFtZSA9ICIkQXR0YWNobWVudFR5cGUvJFBhcmFte1dvcmtPcmRlcklEfS8kUGFyYW17RmlsZW5hbWV9IjsKCiAgICAjIGRlbGV0ZSBmaWxlCiAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWaXJ0dWFsRlMnKS0+RGVsZXRlKAogICAgICAgIEZpbGVuYW1lID0+ICRGaWxlbmFtZSwKICAgICk7CgogICAgIyBjaGVjayBmb3IgZXJyb3IKICAgIGlmICgkU3VjY2VzcykgewoKICAgICAgICAjIHRyaWdnZXIgQXR0YWNobWVudERlbGV0ZVBvc3QtRXZlbnQKICAgICAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgICAgICBFdmVudCA9PiAkRXZlbnQsCiAgICAgICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbm5vdCBkZWxldGUgYXR0YWNobWVudCAkRmlsZW5hbWUhIiwKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuICRTdWNjZXNzOwp9Cgo9aXRlbSBXb3JrT3JkZXJBdHRhY2htZW50R2V0KCkKClRoaXMgbWV0aG9kIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgb25lIHNwZWNpZmljIGF0dGFjaG1lbnQuCgogICAgbXkgJEF0dGFjaG1lbnQgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBdHRhY2htZW50R2V0KAogICAgICAgIFdvcmtPcmRlcklEICAgID0+IDQsCiAgICAgICAgQXR0YWNobWVudFR5cGUgPT4gJ1dvcmtPcmRlcicsICAgICMgKCAnV29ya09yZGVyJyB8fCAnV29ya09yZGVyUmVwb3J0JykgIChvcHRpb25hbCwgZGVmYXVsdCAnV29ya09yZGVyJyApCiAgICAgICAgRmlsZW5hbWUgICAgICAgPT4gJ3Rlc3QudHh0JywKICAgICk7CgpyZXR1cm5zCgogICAgJEF0dGFjaG1lbnQgPSB7CiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBBbGxQcmVmZXJlbmNlcyA9PiAndGVzdCcsCiAgICAgICAgfSwKICAgICAgICBGaWxlbmFtZSAgICAgICA9PiAndGVzdC50eHQnLAogICAgICAgIENvbnRlbnQgICAgICAgID0+ICdoYWxsbycsCiAgICAgICAgQ29udGVudFR5cGUgICAgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgIEZpbGVzaXplICAgICAgID0+ICcxMjMgS0J5dGVzJywKICAgICAgICBUeXBlICAgICAgICAgICA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgQXR0YWNobWVudFR5cGUgPT4gJ1dvcmtPcmRlcicsCiAgICB9OwoKPWN1dAoKc3ViIFdvcmtPcmRlckF0dGFjaG1lbnRHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoV29ya09yZGVySUQgRmlsZW5hbWUpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgU2V0IGF0dGFjaG1lbnQgdHlwZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGF0dGFjaG1lbnRzIG9mIHdvcmtvcmRlcnMKICAgICMgYW5kIHRob3NlIGZyb20gcmVwb3J0cyBvZiB3b3Jrb3JkZXJzCiAgICBteSAkQXR0YWNobWVudFR5cGUgPSAkUGFyYW17QXR0YWNobWVudFR5cGV9IHx8ICdXb3JrT3JkZXInOwoKICAgICMgYWRkIHByZWZpeAogICAgbXkgJEZpbGVuYW1lID0gJEF0dGFjaG1lbnRUeXBlIC4gJy8nIC4gJFBhcmFte1dvcmtPcmRlcklEfSAuICcvJyAuICRQYXJhbXtGaWxlbmFtZX07CgogICAgIyBmaW5kIGFsbCBhdHRhY2htZW50cyBvZiB0aGlzIHdvcmtvcmRlcgogICAgbXkgQEF0dGFjaG1lbnRzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZpcnR1YWxGUycpLT5GaW5kKAogICAgICAgIEZpbGVuYW1lICAgID0+ICRGaWxlbmFtZSwKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRQYXJhbXtXb3JrT3JkZXJJRH0sCiAgICAgICAgfSwKICAgICk7CgogICAgIyByZXR1cm4gZXJyb3IgaWYgZmlsZSBkb2VzIG5vdCBleGlzdAogICAgaWYgKCAhQEF0dGFjaG1lbnRzICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gc3VjaCBhdHRhY2htZW50ICgkRmlsZW5hbWUpISBNYXkgYmUgYW4gYXR0YWNrISEhIiwKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBkYXRhIGZvciBhdHRhY2htZW50CiAgICBteSAlQXR0YWNobWVudERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmlydHVhbEZTJyktPlJlYWQoCiAgICAgICAgRmlsZW5hbWUgPT4gJEZpbGVuYW1lLAogICAgICAgIE1vZGUgICAgID0+ICdiaW5hcnknLAogICAgKTsKCiAgICBteSAkQXR0YWNobWVudEluZm8gPSB7CiAgICAgICAgJUF0dGFjaG1lbnREYXRhLAogICAgICAgIEZpbGVuYW1lICAgICAgID0+ICRQYXJhbXtGaWxlbmFtZX0sCiAgICAgICAgQ29udGVudCAgICAgICAgPT4gJHsgJEF0dGFjaG1lbnREYXRhe0NvbnRlbnR9IH0sCiAgICAgICAgQ29udGVudFR5cGUgICAgPT4gJEF0dGFjaG1lbnREYXRhe1ByZWZlcmVuY2VzfS0+e0NvbnRlbnRUeXBlfSwKICAgICAgICBUeXBlICAgICAgICAgICA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgRmlsZXNpemUgICAgICAgPT4gJEF0dGFjaG1lbnREYXRhe1ByZWZlcmVuY2VzfS0+e0ZpbGVzaXplfSwKICAgICAgICBBdHRhY2htZW50VHlwZSA9PiAkQXR0YWNobWVudFR5cGUsCiAgICB9OwoKICAgIHJldHVybiAkQXR0YWNobWVudEluZm87Cn0KCj1pdGVtIFdvcmtPcmRlckF0dGFjaG1lbnRMaXN0KCkKClJldHVybnMgYW4gYXJyYXkgd2l0aCBhbGwgd29ya29yZGVyIGF0dGFjaG1lbnRzIChub3QgdGhlIHJlcG9ydCBhdHRhY2htZW50cykgb2YgdGhlIGdpdmVuIHdvcmtvcmRlci4KCiAgICBteSBAQXR0YWNobWVudHMgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBdHRhY2htZW50TGlzdCgKICAgICAgICBXb3JrT3JkZXJJRCA9PiAxMjMsCiAgICApOwoKcmV0dXJucwoKICAgIEBBdHRhY2htZW50cyA9ICgKICAgICAgICAnZmlsZW5hbWUudHh0JywKICAgICAgICAnb3RoZXJfZmlsZS5wZGYnLAogICAgKTsKCj1jdXQKCnN1YiBXb3JrT3JkZXJBdHRhY2htZW50TGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17V29ya09yZGVySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBXb3JrT3JkZXJJRCEnLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGZpbmQgYWxsIGF0dGFjaG1lbnRzIG9mIHRoaXMgd29ya29yZGVyCiAgICBteSBAQXR0YWNobWVudHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmlydHVhbEZTJyktPkZpbmQoCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkUGFyYW17V29ya09yZGVySUR9LAogICAgICAgIH0sCiAgICApOwoKICAgICMgZXh0cmFjdCBvbmx5IHRoZSB3b3Jrb3JkZXIgYXR0YWNobWVudHMKICAgIG15IEBXb3JrT3JkZXJBdHRhY2htZW50czsKICAgIEZJTEVOQU1FOgogICAgZm9yIG15ICRGaWxlbmFtZSAoQEF0dGFjaG1lbnRzKSB7CgogICAgICAgIG5leHQgRklMRU5BTUUgaWYgJEZpbGVuYW1lICF+IG17IFxBIFdvcmtPcmRlciAvIFxkKyAvIH14bXM7CgogICAgICAgICMgcmVtb3ZlIGV4dHJhIGluZm9ybWF0aW9uIGZyb20gZmlsZW5hbWUKICAgICAgICAkRmlsZW5hbWUgPX4gc3sgXEEgV29ya09yZGVyIC8gXGQrIC8gfXt9eG1zOwoKICAgICAgICBwdXNoIEBXb3JrT3JkZXJBdHRhY2htZW50cywgJEZpbGVuYW1lOwogICAgfQoKICAgIHJldHVybiBAV29ya09yZGVyQXR0YWNobWVudHM7Cn0KCj1pdGVtIFdvcmtPcmRlclJlcG9ydEF0dGFjaG1lbnRMaXN0KCkKClJldHVybnMgYW4gYXJyYXkgd2l0aCBhbGwgcmVwb3J0IGF0dGFjaG1lbnRzIG9mIHRoZSBnaXZlbiB3b3Jrb3JkZXIuCgogICAgbXkgQEF0dGFjaG1lbnRzID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyUmVwb3J0QXR0YWNobWVudExpc3QoCiAgICAgICAgV29ya09yZGVySUQgPT4gMTIzLAogICAgKTsKCnJldHVybnMKCiAgICBAQXR0YWNobWVudHMgPSAoCiAgICAgICAgJ2ZpbGVuYW1lLnR4dCcsCiAgICAgICAgJ290aGVyX2ZpbGUucGRmJywKICAgICk7Cgo9Y3V0CgpzdWIgV29ya09yZGVyUmVwb3J0QXR0YWNobWVudExpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1dvcmtPcmRlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgV29ya09yZGVySUQhJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBmaW5kIGFsbCBhdHRhY2htZW50cyBvZiB0aGlzIHdvcmtvcmRlcgogICAgbXkgQEF0dGFjaG1lbnRzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZpcnR1YWxGUycpLT5GaW5kKAogICAgICAgIFByZWZlcmVuY2VzID0+IHsKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFBhcmFte1dvcmtPcmRlcklEfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGV4dHJhY3Qgb25seSB0aGUgcmVwb3J0IGF0dGFjaG1lbnRzCiAgICBteSBAUmVwb3J0QXR0YWNobWVudHM7CiAgICBGSUxFTkFNRToKICAgIGZvciBteSAkRmlsZW5hbWUgKEBBdHRhY2htZW50cykgewoKICAgICAgICBuZXh0IEZJTEVOQU1FIGlmICRGaWxlbmFtZSAhfiBteyBcQSBXb3JrT3JkZXJSZXBvcnQgLyBcZCsgLyB9eG1zOwoKICAgICAgICAjIHJlbW92ZSBleHRyYSBpbmZvcm1hdGlvbiBmcm9tIGZpbGVuYW1lCiAgICAgICAgJEZpbGVuYW1lID1+IHN7IFxBIFdvcmtPcmRlclJlcG9ydCAvIFxkKyAvIH17fXhtczsKCiAgICAgICAgcHVzaCBAUmVwb3J0QXR0YWNobWVudHMsICRGaWxlbmFtZTsKCiAgICB9CgogICAgcmV0dXJuIEBSZXBvcnRBdHRhY2htZW50czsKfQoKPWl0ZW0gV29ya09yZGVyQXR0YWNobWVudEV4aXN0cygpCgpDaGVja3MgaWYgYSBmaWxlIHdpdGggYSBnaXZlbiBmaWxlbmFtZSBleGlzdHMuCgogICAgbXkgJEV4aXN0cyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckF0dGFjaG1lbnRFeGlzdHMoCiAgICAgICAgRmlsZW5hbWUgICAgICAgPT4gJ3Rlc3QudHh0JywKICAgICAgICBXb3JrT3JkZXJJRCAgICA9PiAxMjMsCiAgICAgICAgQXR0YWNobWVudFR5cGUgPT4gJ1dvcmtPcmRlcicsICAgICMgKCAnV29ya09yZGVyJyB8fCAnV29ya09yZGVyUmVwb3J0JykgIChvcHRpb25hbCwgZGVmYXVsdCAnV29ya09yZGVyJyApCiAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgV29ya09yZGVyQXR0YWNobWVudEV4aXN0cyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoRmlsZW5hbWUgV29ya09yZGVySUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIFNldCBhdHRhY2htZW50IHR5cGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhdHRhY2htZW50cyBvZiB3b3Jrb3JkZXJzCiAgICAjIGFuZCB0aG9zZSBmcm9tIHJlcG9ydHMgb2Ygd29ya29yZGVycwogICAgbXkgJEF0dGFjaG1lbnRUeXBlID0gJFBhcmFte0F0dGFjaG1lbnRUeXBlfSB8fCAnV29ya09yZGVyJzsKCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWaXJ0dWFsRlMnKS0+RmluZCgKICAgICAgICBGaWxlbmFtZSA9PiAkQXR0YWNobWVudFR5cGUgLiAnLycgLiAkUGFyYW17V29ya09yZGVySUR9IC4gJy8nIC4gJFBhcmFte0ZpbGVuYW1lfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIFdvcmtPcmRlckNoYW5nZUVmZm9ydHNHZXQoKQoKcmV0dXJucyB0aGUgY29tYmluZWQgZWZmb3J0cyBvZiB0aGUgd29ya29yZGVycyBmb3IgdGhlIGdpdmVuIGNoYW5nZQoKICAgIG15ICRDaGFuZ2VFZmZvcnRzID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQ2hhbmdlRWZmb3J0c0dldCgKICAgICAgICBDaGFuZ2VJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgV29ya09yZGVyQ2hhbmdlRWZmb3J0c0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoQ2hhbmdlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXR0cmlidXRlfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEF0dHJpYnV0ZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgaW5pdGlhbGl6ZSB0aGUgcmV0dXJuIHRpbWUgaGFzaAogICAgbXkgJUNoYW5nZUVmZm9ydHM7CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ1dvcmtPcmRlckNoYW5nZUVmZm9ydHNHZXQ6OkNoYW5nZUlEOjonIC4gJFBhcmFte0NoYW5nZUlEfTsKICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwoKICAgIGlmICgkQ2FjaGUpIHsKCiAgICAgICAgIyBnZXQgZGF0YSBmcm9tIGNhY2hlCiAgICAgICAgJUNoYW5nZUVmZm9ydHMgPSAleyRDYWNoZX07CgogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgYnVpbGQgc3FsLCB1c2luZyBtaW4gYW5kIG1heCBmdW5jdGlvbnMKICAgICAgICBteSAkU1FMID0gJ1NFTEVDVCAnCiAgICAgICAgICAgIC4gJ1NVTSggcGxhbm5lZF9lZmZvcnQgKSwgU1VNKCBhY2NvdW50ZWRfdGltZSApICcKICAgICAgICAgICAgLiAnRlJPTSBjaGFuZ2Vfd29ya29yZGVyICcKICAgICAgICAgICAgLiAnV0hFUkUgY2hhbmdlX2lkID0gPyc7CgogICAgICAgICMgcmV0cmlldmUgdGhlIHJlcXVlc3RlZCB0aW1lCiAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0NoYW5nZUlEfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRDaGFuZ2VFZmZvcnRze1BsYW5uZWRFZmZvcnR9ID0gJFJvd1swXSB8fCAnJzsKICAgICAgICAgICAgJENoYW5nZUVmZm9ydHN7QWNjb3VudGVkVGltZX0gPSAkUm93WzFdIHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgQVRUUklCVVRFOgogICAgICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhQbGFubmVkRWZmb3J0IEFjY291bnRlZFRpbWUpKSB7CgogICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAhJENoYW5nZUVmZm9ydHN7JEF0dHJpYnV0ZX07CgogICAgICAgICAgICAjIGRvIG5vdCBzaG93IHplcm8gdmFsdWVzCiAgICAgICAgICAgIGlmICggJENoYW5nZUVmZm9ydHN7JEF0dHJpYnV0ZX0gZXEgMCApIHsKICAgICAgICAgICAgICAgICRDaGFuZ2VFZmZvcnRzeyRBdHRyaWJ1dGV9ID0gJyc7CiAgICAgICAgICAgICAgICBuZXh0IEFUVFJJQlVURTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjb252ZXJ0IGRlY2ltYWwgY2hhcmFjdGVyIGZyb20gJywnIHRvICcuJyBpZiBuZWNjZXNzYXJ5CiAgICAgICAgICAgICRDaGFuZ2VFZmZvcnRzeyRBdHRyaWJ1dGV9ID1+IHN7LH17Ln14bXNnOwoKICAgICAgICAgICAgIyBmb3JtYXQgYXMgZGVjaW1hbCBudW1iZXIKICAgICAgICAgICAgJENoYW5nZUVmZm9ydHN7JEF0dHJpYnV0ZX0gPSBzcHJpbnRmICclLjJmJywgJENoYW5nZUVmZm9ydHN7JEF0dHJpYnV0ZX07CiAgICAgICAgfQoKICAgICAgICAjIHNldCBjYWNoZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICdJVFNNQ2hhbmdlTWFuYWdlbWVudCcsCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gXCVDaGFuZ2VFZmZvcnRzLAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiBcJUNoYW5nZUVmZm9ydHM7Cn0KCnN1YiBERVNUUk9ZIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBleGVjdXRlIGFsbCB0cmFuc2FjdGlvbiBldmVudHMKICAgICRTZWxmLT5FdmVudEhhbmRsZXJUcmFuc2FjdGlvbigpOwoKICAgIHJldHVybiAxOwp9Cgo9YmVnaW4gSW50ZXJuYWw6Cgo9aXRlbSBfQ2hlY2tXb3JrT3JkZXJUeXBlSURzKCkKCmNoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHdvcmtvcmRlciB0eXBlIGlkcyBhcmUgYWxsIHZhbGlkCgogICAgbXkgJE9rID0gJFdvcmtPcmRlck9iamVjdC0+X0NoZWNrV29ya09yZGVyVHlwZUlEcygKICAgICAgICBXb3JrT3JkZXJUeXBlSURzID0+IFsgMiwgNTAwIF0sCiAgICApOwoKPWN1dAoKc3ViIF9DaGVja1dvcmtPcmRlclR5cGVJRHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1dvcmtPcmRlclR5cGVJRHN9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBXb3JrT3JkZXJUeXBlSURzIScsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggcmVmICRQYXJhbXtXb3JrT3JkZXJUeXBlSURzfSBuZSAnQVJSQVknICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnVGhlIHBhcmFtIFdvcmtPcmRlclR5cGVJRHMgbXVzdCBiZSBhbiBBUlJBWSByZWZlcmVuY2UhJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBpZiBXb3JrT3JkZXJUeXBlSURzIGJlbG9uZ3MgdG8gY29ycmVjdCBnZW5lcmFsIGNhdGFsb2cgY2xhc3MKICAgIGZvciBteSAkVHlwZUlEICggQHsgJFBhcmFte1dvcmtPcmRlclR5cGVJRHN9IH0gKSB7CiAgICAgICAgbXkgJFR5cGUgPSAkU2VsZi0+V29ya09yZGVyVHlwZUxvb2t1cCgKICAgICAgICAgICAgV29ya09yZGVyVHlwZUlEID0+ICRUeXBlSUQsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFR5cGUgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgdHlwZSBpZCAkVHlwZUlEIGlzIG5vdCB2YWxpZCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0dldFdvcmtPcmRlck51bWJlcigpCgpHZXQgYSBuZXcgdW51c2VkIHdvcmtvcmRlciBudW1iZXIgZm9yIHRoZSBnaXZlbiBjaGFuZ2UuClRoZSBoaWdoZXN0IGN1cnJlbnQgd29ya29yZGVyIG51bWJlciBmb3IgdGhlIGdpdmVuIGNoYW5nZSBpcwpsb29rZWQgdXAgYW5kIGluY3JlbWVudGVkIGJ5IG9uZS4KCiAgICBteSAkV29ya09yZGVyTnVtYmVyID0gJFdvcmtPcmRlck9iamVjdC0+X0dldFdvcmtPcmRlck51bWJlcigKICAgICAgICBDaGFuZ2VJRCA9PiAyLAogICAgKTsKCj1jdXQKCnN1YiBfR2V0V29ya09yZGVyTnVtYmVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDaGFuZ2VJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENoYW5nZUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgdGhlIGxhcmdlc3Qgd29ya29yZGVyIG51bWJlcgogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBNQVgod29ya29yZGVyX251bWJlcikgJwogICAgICAgICAgICAuICdGUk9NIGNoYW5nZV93b3Jrb3JkZXIgJwogICAgICAgICAgICAuICdXSEVSRSBjaGFuZ2VfaWQgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17Q2hhbmdlSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0LCBkZWZhdWx0IHRvIDAgd2hlbiB0aGVyZSBhcmUgbm8gd29ya29yZGVycyB5ZXQKICAgIG15ICRXb3JrT3JkZXJOdW1iZXI7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRXb3JrT3JkZXJOdW1iZXIgPSAkUm93WzBdOwogICAgfQogICAgJFdvcmtPcmRlck51bWJlciB8fD0gMDsKCiAgICAjIGluY3JlbWVudCBudW1iZXIgdG8gZ2V0IGEgbm9uLWV4aXN0ZW50IHdvcmtvcmRlciBudW1iZXIKICAgICRXb3JrT3JkZXJOdW1iZXIrKzsKCiAgICByZXR1cm4gJFdvcmtPcmRlck51bWJlcjsKfQoKPWl0ZW0gX0NoZWNrV29ya09yZGVyUGFyYW1zKCkKCkNoZWNrcyB0aGUgcGFyYW1zIHRvIFdvcmtPcmRlckFkZCgpIGFuZCBXb3JrT3JkZXJVcGRhdGUoKS4KVGhlcmUgYXJlIG5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuClRoZSB2YWx1ZSBmb3IgQzxXb3JrT3JkZXJBZ2VudElEPiBjYW4gYmUgdW5kZWZpbmVkLgoKICAgIG15ICRPayA9ICRXb3JrT3JkZXJPYmplY3QtPl9DaGVja1dvcmtPcmRlclBhcmFtcygKICAgICAgICBDaGFuZ2VJRCAgICAgICAgICAgPT4gMTIzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFdvcmtPcmRlck51bWJlciAgICA9PiA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgV29ya09yZGVyVGl0bGUgICAgID0+ICdSZXBsYWNlbWVudCBvZiBtYWlsIHNlcnZlcicsICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBJbnN0cnVjdGlvbiAgICAgICAgPT4gJ0luc3RhbGwgdGhlIDxiPm5ldzwvYj4gc2VydmVyJywgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEluc3RydWN0aW9uUGxhaW4gICA9PiAnSW5zdGFsbCB0aGUgbmV3IHNlcnZlcicsICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgUmVwb3J0ICAgICAgICAgICAgID0+ICdJbnN0YWxsZWQgbmV3IHNlcnZlciA8Yj53aXRob3V0PC9iPiBwcm9ibGVtcycsICAjIChvcHRpb25hbCkKICAgICAgICBSZXBvcnRQbGFpbiAgICAgICAgPT4gJ0luc3RhbGxlZCBuZXcgc2VydmVyIHdpdGhvdXQgcHJvYmxlbXMnLCAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFdvcmtPcmRlclN0YXRlSUQgICA9PiA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgV29ya09yZGVyVHlwZUlEICAgID0+IDEyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBXb3JrT3JkZXJBZ2VudElEICAgPT4gOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSB1bmRlZiBpcyBhbGxvd2VkCiAgICAgICAgUGxhbm5lZFN0YXJ0VGltZSAgID0+ICcyMDA5LTEwLTAxIDEwOjMzOjAwJywgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBBY3R1YWxTdGFydFRpbWUgICAgPT4gJzIwMDktMTAtMDEgMTA6MzM6MDAnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFBsYW5uZWRFbmRUaW1lICAgICA9PiAnMjAwOS0xMC0wMSAxMDozMzowMCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQWN0dWFsRW5kVGltZSAgICAgID0+ICcyMDA5LTEwLTAxIDEwOjMzOjAwJywgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBEeW5hbWljRmllbGRfWCAgICAgPT4gJ1N1bicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIER5bmFtaWNGaWVsZF9ZICAgICA9PiAnRWFydGgnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgKTsKClRoZXNlIHN0cmluZyBwYXJhbWV0ZXJzIGhhdmUgbGVuZ3RoIGNvbnN0cmFpbnRzOgoKICAgIFBhcmFtZXRlciAgICAgICAgfCBtYXguIGxlbmd0aAogICAgLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0KICAgIFdvcmtPcmRlclRpdGxlICAgICAgfCAgMjUwIGNoYXJhY3RlcnMKICAgIEluc3RydWN0aW9uICAgICAgICAgfCAxODAwMDAwIGNoYXJhY3RlcnMKICAgIEluc3RydWN0aW9uUGxhaW4gICAgfCAxODAwMDAwIGNoYXJhY3RlcnMKICAgIFJlcG9ydCAgICAgICAgICAgICAgfCAxODAwMDAwIGNoYXJhY3RlcnMKICAgIFJlcG9ydFBsYWluICAgICAgICAgfCAxODAwMDAwIGNoYXJhY3RlcnMKICAgIER5bmFtaWNGaWVsZF9YICAgICAgfCAzODAwIGNoYXJhY3RlcnMKICAgIER5bmFtaWNGaWVsZF9ZICAgICAgfCAzODAwIGNoYXJhY3RlcnMKCj1jdXQKCnN1YiBfQ2hlY2tXb3JrT3JkZXJQYXJhbXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHRoZSBzdHJpbmcgYW5kIGlkIHBhcmFtZXRlcnMKICAgIEFSR1VNRU5UOgogICAgZm9yIG15ICRBcmd1bWVudCAoCiAgICAgICAgcXcoCiAgICAgICAgV29ya09yZGVyVGl0bGUKICAgICAgICBJbnN0cnVjdGlvbgogICAgICAgIEluc3RydWN0aW9uUGxhaW4KICAgICAgICBSZXBvcnQKICAgICAgICBSZXBvcnRQbGFpbgogICAgICAgIFdvcmtPcmRlckFnZW50SUQKICAgICAgICBXb3JrT3JkZXJTdGF0ZUlECiAgICAgICAgV29ya09yZGVyVHlwZUlECiAgICAgICAgV29ya09yZGVyTnVtYmVyCiAgICAgICAgQ2hhbmdlSUQKICAgICAgICApCiAgICAgICAgKQogICAgewoKICAgICAgICAjIHBhcmFtcyBhcmUgbm90IHJlcXVpcmVkCiAgICAgICAgbmV4dCBBUkdVTUVOVCBpZiAhZXhpc3RzICRQYXJhbXskQXJndW1lbnR9OwoKICAgICAgICAjIGNoZWNrIGlmIHBhcmFtIGlzIG5vdCBkZWZpbmVkCiAgICAgICAgaWYgKCAkQXJndW1lbnQgZXEgJ1dvcmtPcmRlckFnZW50SUQnICYmICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewoKICAgICAgICAgICAgIyBXb3JrT3JkZXJBZ2VudElEIGNhbiBiZSB1bmRlZmluZWQKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBwYXJhbWV0ZXIgJyRBcmd1bWVudCcgbXVzdCBiZSBkZWZpbmVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgcGFyYW0gaXMgbm90IGEgcmVmZXJlbmNlCiAgICAgICAgaWYgKCByZWYgJFBhcmFteyRBcmd1bWVudH0gbmUgJycgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgcGFyYW1ldGVyICckQXJndW1lbnQnIG11c3RuJ3QgYmUgYSByZWZlcmVuY2UhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGl0bGUKICAgICAgICBpZiAoICRBcmd1bWVudCBlcSAnV29ya09yZGVyVGl0bGUnICYmIGxlbmd0aCggJFBhcmFteyRBcmd1bWVudH0gKSA+IDI1MCApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBwYXJhbWV0ZXIgJyRBcmd1bWVudCcgbXVzdCBiZSBzaG9ydGVyIHRoYW4gMjUwIGNoYXJhY3RlcnMhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayB0aGUgbWF4aW11bSBsZW5ndGggb2YgZGVzY3JpcHRpb24gYW5kIGp1c3RpZmljYXRpb24KICAgICAgICBpZiAoCiAgICAgICAgICAgICRBcmd1bWVudCBlcSAnSW5zdHJ1Y3Rpb24nCiAgICAgICAgICAgIHx8ICRBcmd1bWVudCBlcSAnSW5zdHJ1Y3Rpb25QbGFpbicKICAgICAgICAgICAgfHwgJEFyZ3VtZW50IGVxICdSZXBvcnQnCiAgICAgICAgICAgIHx8ICRBcmd1bWVudCBlcSAnUmVwb3J0UGxhaW4nCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIGlmICggbGVuZ3RoKCAkUGFyYW17JEFyZ3VtZW50fSApID4gMTgwMDAwMCApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBwYXJhbWV0ZXIgJyRBcmd1bWVudCcgbXVzdCBiZSBzaG9ydGVyIHRoYW4gMTgwMDAwMCBjaGFyYWN0ZXJzISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgdGltZSBmb3JtYXRzCiAgICBPUFRJT046CiAgICBmb3IgbXkgJE9wdGlvbiAocXcoUGxhbm5lZFN0YXJ0VGltZSBQbGFubmVkRW5kVGltZSBBY3R1YWxTdGFydFRpbWUgQWN0dWFsRW5kVGltZSkpIHsKICAgICAgICBuZXh0IE9QVElPTiBpZiAhJFBhcmFteyRPcHRpb259OwoKICAgICAgICByZXR1cm4gaWYgJFBhcmFteyRPcHRpb259ICF+IG17IFxBIFxkXGRcZFxkLVxkXGQtXGRcZCBccyBcZFxkOlxkXGQ6XGRcZCBceiB9eG1zOwogICAgfQoKICAgICMgY2hlY2sgd29ya29yZGVyIGFnZW50CiAgICBpZiAoIGV4aXN0cyAkUGFyYW17V29ya09yZGVyQWdlbnRJRH0gJiYgZGVmaW5lZCAkUGFyYW17V29ya09yZGVyQWdlbnRJRH0gKSB7CgogICAgICAgICMgV29ya09yZGVyQWdlbnQgbXVzdCBiZSBhbiBhZ2VudAogICAgICAgIG15ICVVc2VyRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1dvcmtPcmRlckFnZW50SUR9LAogICAgICAgICAgICBWYWxpZCAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkVXNlckRhdGF7VXNlcklEfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBXb3JrT3JkZXJBZ2VudCAkUGFyYW17V29ya09yZGVyQWdlbnRJRH0gaXMgbm90IGEgdmFsaWQgdXNlciBpZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgdGhlIHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcwogICAgS0VZOgogICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJVBhcmFtICkgewoKICAgICAgICBuZXh0IEtFWSBpZiAkS2V5ICF+IG17IFxBIER5bmFtaWNGaWVsZF8oLiopIFx6IH14bXM7CgogICAgICAgICMgcGFyYW1zIGFyZSBub3QgcmVxdWlyZWQKICAgICAgICBuZXh0IEtFWSBpZiAhZXhpc3RzICRQYXJhbXskS2V5fTsKCiAgICAgICAgIyBjaGVjayBpZiBwYXJhbSBpcyBub3QgZGVmaW5lZAogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRLZXl9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIHBhcmFtZXRlciAnJEtleScgbXVzdCBiZSBkZWZpbmVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGR5bmFtaWMgZmllbGRzCiAgICAgICAgaWYgKCBsZW5ndGgoICRQYXJhbXskS2V5fSApID4gMzgwMCApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBwYXJhbWV0ZXIgJyRLZXknIG11c3QgYmUgc2hvcnRlciB0aGFuIDM4MDAgY2hhcmFjdGVycyEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgZ2l2ZW4gV29ya09yZGVyU3RhdGVJRCBpcyB2YWxpZAogICAgaWYgKCBleGlzdHMgJFBhcmFte1dvcmtPcmRlclN0YXRlSUR9ICkgewogICAgICAgIHJldHVybiBpZiAhJFNlbGYtPldvcmtPcmRlclN0YXRlSURzQ2hlY2soCiAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlSURzID0+IFsgJFBhcmFte1dvcmtPcmRlclN0YXRlSUR9IF0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGdpdmVuIFdvcmtPcmRlclR5cGVJRCBpcyB2YWxpZAogICAgaWYgKCBleGlzdHMgJFBhcmFte1dvcmtPcmRlclR5cGVJRH0gKSB7CiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+X0NoZWNrV29ya09yZGVyVHlwZUlEcygKICAgICAgICAgICAgV29ya09yZGVyVHlwZUlEcyA9PiBbICRQYXJhbXtXb3JrT3JkZXJUeXBlSUR9IF0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0NoZWNrVGltZXN0YW1wcygpCgpDaGVja3MgdGhlIGNvbnN0cmFpbnRzIG9mIHRpbWVzdGFtcHM6IHh4eFN0YXJ0VGltZSBtdXN0IGJlIGJlZm9yZSB4eHhFbmRUaW1lCgogICAgbXkgJE9rID0gJFdvcmtPcmRlck9iamVjdC0+X0NoZWNrVGltZXN0YW1wcygKICAgICAgICBXb3JrT3JkZXJEYXRhICAgID0+ICRXb3JrT3JkZXJEYXRhLAogICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJzIwMDktMTAtMTIgMDA6MDA6MDEnLCAgICAgIyAob3B0aW9uYWwpIG9yIHVuZGVmCiAgICAgICAgUGxhbm5lZEVuZFRpbWUgICA9PiAnMjAwOS0xMC0xNSAxNTowMDowMCcsICAgICAjIChvcHRpb25hbCkgb3IgdW5kZWYKICAgICAgICBBY3R1YWxTdGFydFRpbWUgID0+ICcyMDA5LTEwLTE0IDAwOjAwOjAxJywgICAgICMgKG9wdGlvbmFsKSBvciB1bmRlZgogICAgICAgIEFjdHVhbEVuZFRpbWUgICAgPT4gJzIwMDktMDEtMjAgMDA6MDA6MDEnLCAgICAgIyAob3B0aW9uYWwpIG9yIHVuZGVmCiAgICApOwoKSWYgUGxhbm5lZFN0YXJ0VGltZSBpcyBnaXZlbiwgUGxhbm5lZEVuZFRpbWUgaGFzIHRvIGJlIGdpdmVuLCB0b28gLSBhbmQgdmljZSB2ZXJzYS4KSWYgQWN0dWFsU3RhcnRUaW1lIGlzIGdpdmVuIEFjdHVhbEVuZFRpbWUgaXMgb3B0aW9uYWwuCkJ1dCBpZiBBY3R1YWxFbmRUaW1lIGlzIGdpdmVuIHRoZW4gQWN0dWFsU3RhcnRUaW1lIGhhcyB0byBiZSBnaXZlbiwgdG9vLgpXb3JrT3JkZXJEYXRhIGlzIG9ubHkgcGFzc2VkIGZvciBpbXByb3ZpbmcgdGhlIHBlcmZvcm1hbmNlLgoKPWN1dAoKc3ViIF9DaGVja1RpbWVzdGFtcHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoV29ya09yZGVyRGF0YSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJERlZmF1bHRUaW1lU3RhbXAgPSAnOTk5OS0wMS0wMSAwMDowMDowMCc7CgogICAgIyBjaGVjayB0aW1lcwogICAgVFlQRToKICAgIGZvciBteSAkVHlwZSAocXcoQWN0dWFsIFBsYW5uZWQpKSB7CgogICAgICAgICMgY2hlY2sgb25seSB3aGVuIGEgc3RhcnQgb3IgYSBlbmQgdGltZSBpcyBnaXZlbgogICAgICAgIGlmICggIWV4aXN0cyAkUGFyYW17ICRUeXBlIC4gJ1N0YXJ0VGltZScgfSAmJiAhZXhpc3RzICRQYXJhbXsgJFR5cGUgLiAnRW5kVGltZScgfSApIHsKICAgICAgICAgICAgbmV4dCBUWVBFOwogICAgICAgIH0KCiAgICAgICAgIyBmb3IgdGhlIGxvZyBtZXNzYWdlcwogICAgICAgIG15ICRUeXBlTGMgPSBsYyAkVHlwZTsKCiAgICAgICAgbXkgJFN0YXJ0VGltZSA9ICcnOwogICAgICAgIGlmICggIWV4aXN0cyAkUGFyYW17ICRUeXBlIC4gJ1N0YXJ0VGltZScgfSApIHsKCiAgICAgICAgICAgICMgaWYgYSB0aW1lIGlzIG5vdCBnaXZlbiwgZ2V0IGl0IGZyb20gdGhlIHdvcmtvcmRlcgogICAgICAgICAgICAkU3RhcnRUaW1lID0gJFBhcmFte1dvcmtPcmRlckRhdGF9LT57ICRUeXBlIC4gJ1N0YXJ0VGltZScgfTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAhZGVmaW5lZCAkUGFyYW17ICRUeXBlIC4gJ1N0YXJ0VGltZScgfSApIHsKCiAgICAgICAgICAgICMgc3BlY2lhbCBjYXNlIGZvciBjbGVhcmluZyB0aGUgdGltZQogICAgICAgICAgICAkU3RhcnRUaW1lID0gJERlZmF1bHRUaW1lU3RhbXA7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggISRQYXJhbXsgJFR5cGUgLiAnU3RhcnRUaW1lJyB9ICkgewoKICAgICAgICAgICAgIyBpZiBhIHRpbWUgaXMgbm90IGdpdmVuLCBnZXQgaXQgZnJvbSB0aGUgd29ya29yZGVyCiAgICAgICAgICAgICRTdGFydFRpbWUgPSAkUGFyYW17V29ya09yZGVyRGF0YX0tPnsgJFR5cGUgLiAnU3RhcnRUaW1lJyB9OwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRQYXJhbXsgJFR5cGUgLiAnU3RhcnRUaW1lJyB9IGVxICREZWZhdWx0VGltZVN0YW1wICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIHZhbHVlICRTdGFydFRpbWUgaXMgaW52YWxpZCBmb3IgdGhlICRUeXBlTGMgc3RhcnQgdGltZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU3RhcnRUaW1lID0gJFBhcmFteyAkVHlwZSAuICdTdGFydFRpbWUnIH07CiAgICAgICAgfQoKICAgICAgICBteSAkRW5kVGltZSA9ICcnOwogICAgICAgIGlmICggIWV4aXN0cyAkUGFyYW17ICRUeXBlIC4gJ0VuZFRpbWUnIH0gKSB7CgogICAgICAgICAgICAjIGlmIGEgdGltZSBpcyBub3QgZ2l2ZW4sIGdldCBpdCBmcm9tIHRoZSB3b3Jrb3JkZXIKICAgICAgICAgICAgJEVuZFRpbWUgPSAkUGFyYW17V29ya09yZGVyRGF0YX0tPnsgJFR5cGUgLiAnRW5kVGltZScgfTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAhZGVmaW5lZCAkUGFyYW17ICRUeXBlIC4gJ0VuZFRpbWUnIH0gKSB7CgogICAgICAgICAgICAjIHNwZWNpYWwgY2FzZSBmb3IgY2xlYXJpbmcgdGhlIHRpbWUKICAgICAgICAgICAgJEVuZFRpbWUgPSAkRGVmYXVsdFRpbWVTdGFtcDsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAhJFBhcmFteyAkVHlwZSAuICdFbmRUaW1lJyB9ICkgewoKICAgICAgICAgICAgIyBpZiBhIHRpbWUgaXMgbm90IGdpdmVuLCBnZXQgaXQgZnJvbSB0aGUgd29ya29yZGVyCiAgICAgICAgICAgICRFbmRUaW1lID0gJFBhcmFte1dvcmtPcmRlckRhdGF9LT57ICRUeXBlIC4gJ0VuZFRpbWUnIH07CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFBhcmFteyAkVHlwZSAuICdFbmRUaW1lJyB9IGVxICREZWZhdWx0VGltZVN0YW1wICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIHZhbHVlICRFbmRUaW1lIGlzIGludmFsaWQgZm9yIHRoZSAkVHlwZUxjIGVuZCB0aW1lISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRFbmRUaW1lID0gJFBhcmFteyAkVHlwZSAuICdFbmRUaW1lJyB9OwogICAgICAgIH0KCiAgICAgICAgIyBkb24ndCBjaGVjayBhY3R1YWwgc3RhcnQgdGltZSB3aGVuIHRoZSB3b3Jrb3JkZXIgaGFzIG5vdCBlbmRlZCB5ZXQKICAgICAgICBpZiAoICRUeXBlIGVxICdBY3R1YWwnICYmICRTdGFydFRpbWUgJiYgISRFbmRUaW1lICkgewogICAgICAgICAgICBuZXh0IFRZUEU7CiAgICAgICAgfQoKICAgICAgICAjIHRoZSBjaGVjayBmYWlscyBpZiBub3QgYm90aCAoc3RhcnQgYW5kIGVuZCkgdGltZXMgYXJlIHByZXNlbnQKICAgICAgICBpZiAoICEkU3RhcnRUaW1lIHx8ICEkRW5kVGltZSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRUeXBlIHN0YXJ0IHRpbWUgYW5kICRUeXBlTGMgZW5kIHRpbWUgbXVzdCBiZSBnaXZlbiEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHRoZSBvcmRlcmluZyBvZiB0aGUgdGltZXMsIG9ubHkgaW4gdGhlIG5vbi1kZWZhdWx0LWNhc2UKICAgICAgICBpZiAoICRTdGFydFRpbWUgbmUgJERlZmF1bHRUaW1lU3RhbXAgJiYgJEVuZFRpbWUgbmUgJERlZmF1bHRUaW1lU3RhbXAgKSB7CgogICAgICAgICAgICAjIHJlbW92ZSBhbGwgbm9uLWRpZ2l0IGNoYXJhY3RlcnMKICAgICAgICAgICAgJFN0YXJ0VGltZSA9fiBzeyBcRCB9e314bXNnOwogICAgICAgICAgICAkRW5kVGltZSA9fiBzeyBcRCB9e314bXNnOwoKICAgICAgICAgICAgIyBzdGFydCB0aW1lIG11c3QgYmUgc21hbGxlciB0aGFuIGVuZCB0aW1lCiAgICAgICAgICAgIGlmICggJFN0YXJ0VGltZSA+PSAkRW5kVGltZSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAiVGhlICRUeXBlTGMgc3RhcnQgdGltZSAnJFN0YXJ0VGltZScgbXVzdCBiZSBiZWZvcmUgdGhlICRUeXBlTGMgZW5kIHRpbWUgJyRFbmRUaW1lJyEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKMTsKCj1lbmQgSW50ZXJuYWw6Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Ok5vdGlmaWNhdGlvbjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBTdG9yYWJsZTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlOwp1c2UgS2VybmVsOjpTeXN0ZW06OkV2ZW50SGFuZGxlcjsKCnVzZSB2YXJzIHF3KEBJU0EpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RW1haWwnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlVzZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Ok5vdGlmaWNhdGlvbiAtIG5vdGlmaWNhdGlvbiBmdW5jdGlvbnMgZm9yIGNoYW5nZSBtYW5hZ2VtZW50Cgo9aGVhZDEgU1lOT1BTSVMKClRoaXMgbW9kdWxlIGlzIG1hbmFnaW5nIG5vdGlmaWNhdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhIG5vdGlmaWNhdGlvbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICROb3RpZmljYXRpb25PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6Tm90aWZpY2F0aW9uJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgc2V0IHRoZSBkZWJ1ZyBmbGFnCiAgICAkU2VsZi0+e0RlYnVnfSA9ICRQYXJhbXtEZWJ1Z30gfHwgMDsKCiAgICAjIGdldCB0aGUgY2FjaGUgdHlwZSBhbmQgVFRMIChpbiBzZWNvbmRzKQogICAgJFNlbGYtPntDYWNoZVR5cGV9ID0gJ0lUU01DaGFuZ2VNYW5hZ2VtZW50JzsKICAgICRTZWxmLT57Q2FjaGVUVEx9ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSVRTTUNoYW5nZTo6Q2FjaGVUVEwnKSAqIDYwOwoKICAgICMgZG8gd2UgdXNlIHJpY2h0ZXh0CiAgICAkU2VsZi0+e1JpY2hUZXh0fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRnJvbnRlbmQ6OlJpY2hUZXh0Jyk7CgogICAgQElTQSA9ICgKICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkV2ZW50SGFuZGxlcicsCiAgICApOwoKICAgICMgaW5pdCBvZiBldmVudCBoYW5kbGVyCiAgICAkU2VsZi0+RXZlbnRIYW5kbGVySW5pdCgKICAgICAgICBDb25maWcgPT4gJ0lUU01DaGFuZ2VNYW5hZ2VtZW50Tm90aWZpY2F0aW9uOjpFdmVudE1vZHVsZScsCiAgICApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gTm90aWZpY2F0aW9uU2VuZCgpCgpTZW5kIHRoZSBub3RpZmljYXRpb24gdG8gY3VzdG9tZXJzIGFuZC9vciBhZ2VudHMuCgogICAgbXkgJFN1Y2Nlc3MgPSAkTm90aWZpY2F0aW9uT2JqZWN0LT5Ob3RpZmljYXRpb25TZW5kKAogICAgICAgIEFnZW50SURzICAgID0+IFsgMSwgMiwgMywgXQogICAgICAgIEN1c3RvbWVySURzID0+IFsgMSwgMiwgMywgXSwKICAgICAgICBUeXBlICAgICAgICA9PiAnQ2hhbmdlJywgICAgICAgICAgIyBDaGFuZ2V8V29ya09yZGVyCiAgICAgICAgRXZlbnQgICAgICAgPT4gJ0NoYW5nZVVwZGF0ZScsCiAgICAgICAgRGF0YSAgICAgICAgPT4geyAlQ2hhbmdlRGF0YSB9LCAgICMgQ2hhbmdlfFdvcmtPcmRlcnxMaW5rIGRhdGEKICAgICAgICBNZXNzYWdlID0+IHsKICAgICAgICAgICAgQWdlbnQgPT4gewogICAgICAgICAgICAgICAgJ2VuJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3ViamVjdCAgICAgPT4gJ0hlbGxvIEFnZW50JywKICAgICAgICAgICAgICAgICAgICBCb2R5ICAgICAgICA9PiAnSGVsbG8gV29ybGQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnZGUnID0+IHsKICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICA9PiAnSGFsbG8gQWdlbnQnLAogICAgICAgICAgICAgICAgICAgIEJvZHkgICAgICAgID0+ICdIYWxsbyBXZWx0JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBDdXN0b21lciA9PiB7CiAgICAgICAgICAgICAgICAnZW4nID0+IHsKICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICA9PiAnSGVsbG8gQ3VzdG9tZXInLAogICAgICAgICAgICAgICAgICAgIEJvZHkgICAgICAgID0+ICdIZWxsbyBXb3JsZCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdkZScgPT4gewogICAgICAgICAgICAgICAgICAgIFN1YmplY3QgICAgID0+ICdIYWxsbyBLdW5kZScsCiAgICAgICAgICAgICAgICAgICAgQm9keSAgICAgICAgPT4gJ0hhbGxvIFdlbHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBOb3RpZmljYXRpb25TZW5kIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFR5cGUgRXZlbnQgVXNlcklEIERhdGEgTWVzc2FnZSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBtZXNzYWdlCiAgICBmb3IgbXkgJFR5cGUgKHF3KEFnZW50IEN1c3RvbWVyKSkgewoKICAgICAgICAjIGNoZWNrIG1lc3NhZ2UgcGFyYW1ldGVyLCB3ZSBhbHdheXMgbmVlZCBhZ2VudCBhbmQgbWVzc2FnZQogICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17TWVzc2FnZX0tPnskVHlwZX0gKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJFR5cGUgTWVzc2FnZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGVhY2ggYXJndW1lbnQgZm9yIGVhY2ggbWVzc2FnZSBsYW5ndWFnZQogICAgICAgIGZvciBteSAkTGFuZ3VhZ2UgKCBzb3J0IGtleXMgJXsgJFBhcmFte01lc3NhZ2V9LT57JFR5cGV9IH0gKSB7CgogICAgICAgICAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTdWJqZWN0IEJvZHkgQ29udGVudFR5cGUpKSB7CgogICAgICAgICAgICAgICAgIyBlcnJvciBpZiBtZXNzYWdlIGRhdGEgaXMgaW5jb21wbGV0ZQogICAgICAgICAgICAgICAgaWYgKCAhJFBhcmFte01lc3NhZ2V9LT57JFR5cGV9LT57JExhbmd1YWdlfS0+eyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRUeXBlIE1lc3NhZ2UgYXJndW1lbnQgJyRBcmd1bWVudCcgZm9yIGxhbmd1YWdlICckTGFuZ3VhZ2UnISIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBmb3IgY29udmVuaWVuY2UKICAgIG15ICRFdmVudCA9ICRQYXJhbXtFdmVudH07CgogICAgIyBuZWVkIGF0IGxlYXN0IEFnZW50SURzIG9yIEN1c3RvbWVySURzCiAgICBpZiAoICEkUGFyYW17QWdlbnRJRHN9ICYmICEkUGFyYW17Q3VzdG9tZXJJRHN9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBhdCBsZWFzdCBBZ2VudElEcyBvciBDdXN0b21lcklEcyEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgQWdlbnRJRHMgYW5kIEN1c3RvbWVySURzIGhhdmUgdG8gYmUgYXJyYXkgcmVmZXJlbmNlcwogICAgZm9yIG15ICRJREtleSAocXcoQWdlbnRJRHMgQ3VzdG9tZXJJRHMpKSB7CiAgICAgICAgaWYgKCBkZWZpbmVkICRQYXJhbXskSURLZXl9ICYmIHJlZiAkUGFyYW17JElES2V5fSBuZSAnQVJSQVknICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJElES2V5IGhhcyB0byBiZSBhbiBhcnJheSByZWZlcmVuY2UhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIHdoZXRoZXIgdGhlIHNlbmRpbmcgb2Ygbm90aWZpY2F0aW9uIGhhcyBiZWVuIHR1cm5lZCBvZmYKICAgIHJldHVybiAxIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0lUU01DaGFuZ2U6OlNlbmROb3RpZmljYXRpb25zJyk7CgogICAgIyB3ZSBuZWVkIHRvIGdldCB0aGUgaXRlbXMgZm9yIHJlcGxhY2VtZW50cwogICAgbXkgJENoYW5nZSAgICA9IHt9OwogICAgbXkgJFdvcmtPcmRlciA9IHt9OwogICAgbXkgJExpbmsgICAgICA9IHt9OwoKICAgICMgc3RhcnQgd2l0aCB3b3Jrb3JkZXIsIGFzIHRoZSBjaGFuZ2UgaWQgbWlnaHQgYmUgdGFrZW4gZnJvbSB0aGUgd29ya29yZGVyCiAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1dvcmtPcmRlcklEfSApIHsKCiAgICAgICAgaWYgKCAkRXZlbnQgZXEgJ1dvcmtPcmRlckRlbGV0ZScgKSB7CgogICAgICAgICAgICAjIHRoZSB3b3Jrb3JkZXIgaXMgYWxyZWFkeSBkZWxldGVkLAogICAgICAgICAgICAjIHNvIHdlIGRpc3BsYXkgdGhlIG9sZCBkYXRhCiAgICAgICAgICAgICRXb3JrT3JkZXIgPSAkUGFyYW17RGF0YX0tPntPbGRXb3JrT3JkZXJEYXRhfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIGdldCBmcmVzaCBkYXRhCiAgICAgICAgICAgICRXb3JrT3JkZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpLT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkUGFyYW17RGF0YX0tPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgIExvZ05vICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIFRoZSBldmVudCAnV29ya09yZGVyQWRkJyBpcyBhIHNwZWNpYWwgY2FzZSwgYXMgdGhlIHdvcmtvcmRlcgogICAgICAgICMgaXMgbm90IGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgeWV0LiBTbyBhbHNvIHRha2UKICAgICAgICAjIHRoZSBwYXJhbXMgZm9yIFdvcmtPcmRlckFkZCgpIGludG8gYWNjb3VudC4KICAgICAgICAjIFdvcmtPcmRlckdldCgpIG11c3Qgc3RpbGwgYmUgY2FsbGVkLCBhcyBpdCBwcm92aWRlcyB0cmFuc2xhdGlvbgogICAgICAgICMgZm9yIHNvbWUgSURzIHRoYXQgd2VyZSBzZXQgaW4gV29ya09yZGVyQWRkKCkuCiAgICAgICAgaWYgKCAkRXZlbnQgZXEgJ1dvcmtPcmRlckFkZCcgKSB7CiAgICAgICAgICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICV7JFdvcmtPcmRlcn0gKSB7CiAgICAgICAgICAgICAgICAkV29ya09yZGVyLT57JEF0dHJpYnV0ZX0gfHw9ICRQYXJhbXtEYXRhfS0+eyRBdHRyaWJ1dGV9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICRXb3JrT3JkZXItPntXb3JrT3JkZXJBZ2VudElEfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHVzZXIgZGF0YSBmb3IgdGhlIHdvcmtvcmRlciBhZ2VudAogICAgICAgICAgICAkUGFyYW17RGF0YX0tPntXb3JrT3JkZXJBZ2VudH0gPSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFdvcmtPcmRlci0+e1dvcmtPcmRlckFnZW50SUR9LAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICMgaW5mZXIgdGhlIGNoYW5nZSBpZCBmcm9tIHRoZSB3b3Jrb3JkZXIKICAgICAgICBpZiAoICRXb3JrT3JkZXItPntDaGFuZ2VJRH0gKSB7CiAgICAgICAgICAgICRQYXJhbXtEYXRhfS0+e0NoYW5nZUlEfSA9ICRXb3JrT3JkZXItPntDaGFuZ2VJRH07CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJFBhcmFte0RhdGF9LT57Q2hhbmdlSUR9ICkgewoKICAgICAgICAkQ2hhbmdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlR2V0KAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkUGFyYW17RGF0YX0tPntDaGFuZ2VJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBMb2dObyAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgVGhlIGV2ZW50ICdDaGFuZ2VBZGQnIGlzIGEgc3BlY2lhbCBjYXNlLCBhcyB0aGUgY2hhbmdlCiAgICAgICAgIyBpcyBub3QgY29tcGxldGVseSBpbml0aWFsaXplZCB5ZXQuIFNvIGFsc28gdGFrZQogICAgICAgICMgdGhlIHBhcmFtcyBmb3IgQ2hhbmdlQWRkKCkgaW50byBhY2NvdW50LgogICAgICAgICMgQ2hhbmdlR2V0KCkgbXVzdCBzdGlsbCBiZSBjYWxsZWQsIGFzIGl0IHByb3ZpZGVzIHRyYW5zbGF0aW9uCiAgICAgICAgIyBmb3Igc29tZSBJRHMgdGhhdCB3ZXJlIHNldCBpbiBDaGFuZ2VBZGQoKS4KICAgICAgICBpZiAoICRFdmVudCBlcSAnQ2hhbmdlQWRkJyApIHsKICAgICAgICAgICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXskQ2hhbmdlfSApIHsKICAgICAgICAgICAgICAgICRDaGFuZ2UtPnskQXR0cmlidXRlfSB8fD0gJFBhcmFte0RhdGF9LT57JEF0dHJpYnV0ZX07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICggJENoYW5nZS0+e0NoYW5nZUJ1aWxkZXJJRH0gKSB7CiAgICAgICAgICAgICRQYXJhbXtEYXRhfS0+e0NoYW5nZUJ1aWxkZXJ9ID0gewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRDaGFuZ2UtPntDaGFuZ2VCdWlsZGVySUR9LAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIGlmICggJENoYW5nZS0+e0NoYW5nZU1hbmFnZXJJRH0gKSB7CiAgICAgICAgICAgICRQYXJhbXtEYXRhfS0+e0NoYW5nZU1hbmFnZXJ9ID0gewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRDaGFuZ2UtPntDaGFuZ2VNYW5hZ2VySUR9LAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgIyBmb3IgbGluayBldmVudHMgdGhlcmUgaXMgc29tZSBpbmZvIGFib3V0IHRoZSBsaW5rCiAgICBpZiAoICRFdmVudCA9fiBteyBcQSAoPzogQ2hhbmdlIHwgV29ya09yZGVyICkgTGluayAoPzogQWRkIHwgRGVsZXRlICkgfXhtcyApIHsKICAgICAgICAkTGluayA9IHsKICAgICAgICAgICAgU291cmNlT2JqZWN0ID0+ICRQYXJhbXtEYXRhfS0+e1NvdXJjZU9iamVjdH0sCiAgICAgICAgICAgIFRhcmdldE9iamVjdCA9PiAkUGFyYW17RGF0YX0tPntUYXJnZXRPYmplY3R9LAogICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJFBhcmFte0RhdGF9LT57U3RhdGV9LAogICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJFBhcmFte0RhdGF9LT57VHlwZX0sCiAgICAgICAgICAgIE9iamVjdCAgICAgICA9PiAkUGFyYW17RGF0YX0tPntPYmplY3R9LAogICAgICAgIH07CiAgICB9CgogICAgIyBnZXQgdGhlIHZhbGlkIGlkcwogICAgbXkgQFZhbGlkSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkSURzR2V0KCk7CiAgICBteSAlVmFsaWRJRExvb2t1cCA9IG1hcCB7ICRfID0+IDEgfSBAVmFsaWRJRHM7CgogICAgbXkgJUFnZW50c1NlbnQ7CgogICAgQUdFTlRJRDoKICAgIGZvciBteSAkQWdlbnRJRCAoIEB7ICRQYXJhbXtBZ2VudElEc30gfSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBub3RpZmljYXRpb24gd2FzIGFscmVhZHkgc2VudCB0byB0aGlzIGFnZW50CiAgICAgICAgbmV4dCBBR0VOVElEIGlmICRBZ2VudHNTZW50eyRBZ2VudElEfTsKCiAgICAgICAgIyB1c2VyIGluZm8gZm9yIHByZWZlcnJlZCBsYW5ndWFnZSBhbmQgbWFjcm8gcmVwbGFjZW1lbnQKICAgICAgICBteSAlVXNlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgPT4gJEFnZW50SUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBkbyBub3Qgc2VuZCBlbWFpbHMgdG8gaW52YWxpZCBhZ2VudHMKICAgICAgICBpZiAoIGV4aXN0cyAkVXNlcntWYWxpZElEfSAmJiAhJFZhbGlkSURMb29rdXB7ICRVc2Vye1ZhbGlkSUR9IH0gKSB7CiAgICAgICAgICAgIG5leHQgQUdFTlRJRDsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHN5c3RlbSBkZWZhdWx0IGxhbmd1YWdlCiAgICAgICAgbXkgJERlZmF1bHRMYW5ndWFnZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnRGVmYXVsdExhbmd1YWdlJykgfHwgJ2VuJzsKCiAgICAgICAgIyBnZXQgdXNlciBwcmVmZXJyZWQgbGFuZ3VhZ2UKICAgICAgICBteSAkUHJlZmVycmVkTGFuZ3VhZ2UgPSAkVXNlcntVc2VyTGFuZ3VhZ2V9IHx8ICREZWZhdWx0TGFuZ3VhZ2U7CgogICAgICAgICMgbWFrZSBzdXJlIGEgbWVzc2FnZSBpbiB0aGUgdXNlciBsYW5ndWFnZSBleGlzdHMKICAgICAgICBpZiAoICEkUGFyYW17TWVzc2FnZX0tPntBZ2VudH0tPnskUHJlZmVycmVkTGFuZ3VhZ2V9ICkgewoKICAgICAgICAgICAgIyBvdGhlcndpc2UgdXNlIGRlZmF1bHQgbGFuZ3VhZ2UKICAgICAgICAgICAgJFByZWZlcnJlZExhbmd1YWdlID0gJERlZmF1bHRMYW5ndWFnZTsKCiAgICAgICAgICAgICMgaWYgbm8gbWVzc2FnZSBleGlzdHMgaW4gZGVmYXVsdCBsYW5ndWFnZSwgdGhlbiB0YWtlIHRoZSBmaXJzdCBhdmFpbGFibGUgbGFuZ3VhZ2UKICAgICAgICAgICAgaWYgKCAhJFBhcmFte01lc3NhZ2V9LT57QWdlbnR9LT57JFByZWZlcnJlZExhbmd1YWdlfSApIHsKICAgICAgICAgICAgICAgIG15IEBMYW5ndWFnZXMgPSBzb3J0IGtleXMgJXsgJFBhcmFte01lc3NhZ2V9LT57QWdlbnR9IH07CiAgICAgICAgICAgICAgICAkUHJlZmVycmVkTGFuZ3VhZ2UgPSAkTGFuZ3VhZ2VzWzBdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkTm90aWZpY2F0aW9uID0gJFBhcmFte01lc3NhZ2V9LT57QWdlbnR9LT57JFByZWZlcnJlZExhbmd1YWdlfTsKICAgICAgICByZXR1cm4gaWYgISROb3RpZmljYXRpb247CgogICAgICAgICMgZG8gdGV4dC9wbGFpbiB0byB0ZXh0L2h0bWwgY29udmVydAogICAgICAgIGlmICggJFNlbGYtPntSaWNoVGV4dH0gJiYgJE5vdGlmaWNhdGlvbi0+e0NvbnRlbnRUeXBlfSA9fiBteyB0ZXh0L3BsYWluIH14bXNpICkgewogICAgICAgICAgICAkTm90aWZpY2F0aW9uLT57Q29udGVudFR5cGV9ID0gJ3RleHQvaHRtbCc7CiAgICAgICAgICAgICROb3RpZmljYXRpb24tPntCb2R5fSAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvSFRNTCgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkTm90aWZpY2F0aW9uLT57Qm9keX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGRvIHRleHQvaHRtbCB0byB0ZXh0L3BsYWluIGNvbnZlcnQKICAgICAgICBlbHNpZiAoICEkU2VsZi0+e1JpY2hUZXh0fSAmJiAkTm90aWZpY2F0aW9uLT57Q29udGVudFR5cGV9ID1+IG17IHRleHQvaHRtbCB9eG1zaSApIHsKICAgICAgICAgICAgJE5vdGlmaWNhdGlvbi0+e0NvbnRlbnRUeXBlfSA9ICd0ZXh0L3BsYWluJzsKICAgICAgICAgICAgJE5vdGlmaWNhdGlvbi0+e0JvZHl9ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9Bc2NpaSgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkTm90aWZpY2F0aW9uLT57Qm9keX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHJlcGxhY2Ugb3RycyBtYWNyb3MKICAgICAgICAkTm90aWZpY2F0aW9uLT57Qm9keX0gPSAkU2VsZi0+X05vdGlmaWNhdGlvblJlcGxhY2VNYWNyb3MoCiAgICAgICAgICAgIFR5cGUgICAgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgICAgIFRleHQgICAgICA9PiAkTm90aWZpY2F0aW9uLT57Qm9keX0sCiAgICAgICAgICAgIFJlY2lwaWVudCA9PiB7JVVzZXJ9LAogICAgICAgICAgICBSaWNoVGV4dCAgPT4gJFNlbGYtPntSaWNoVGV4dH0sCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgQ2hhbmdlICAgID0+ICRDaGFuZ2UsCiAgICAgICAgICAgIFdvcmtPcmRlciA9PiAkV29ya09yZGVyLAogICAgICAgICAgICBMaW5rICAgICAgPT4gJExpbmssCiAgICAgICAgICAgIERhdGEgICAgICA9PiAkUGFyYW17RGF0YX0sCiAgICAgICAgICAgIExhbmd1YWdlICA9PiAkUHJlZmVycmVkTGFuZ3VhZ2UsCiAgICAgICAgKTsKCiAgICAgICAgJE5vdGlmaWNhdGlvbi0+e1N1YmplY3R9ID0gJFNlbGYtPl9Ob3RpZmljYXRpb25SZXBsYWNlTWFjcm9zKAogICAgICAgICAgICBUeXBlICAgICAgPT4gJFBhcmFte1R5cGV9LAogICAgICAgICAgICBUZXh0ICAgICAgPT4gJE5vdGlmaWNhdGlvbi0+e1N1YmplY3R9LAogICAgICAgICAgICBSZWNpcGllbnQgPT4geyVVc2VyfSwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBDaGFuZ2UgICAgPT4gJENoYW5nZSwKICAgICAgICAgICAgV29ya09yZGVyID0+ICRXb3JrT3JkZXIsCiAgICAgICAgICAgIExpbmsgICAgICA9PiAkTGluaywKICAgICAgICAgICAgRGF0YSAgICAgID0+ICRQYXJhbXtEYXRhfSwKICAgICAgICAgICAgTGFuZ3VhZ2UgID0+ICRQcmVmZXJyZWRMYW5ndWFnZSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCB1cmxzIGFuZCB2ZXJpZnkgdG8gYmUgZnVsbCBodG1sIGRvY3VtZW50CiAgICAgICAgaWYgKCAkU2VsZi0+e1JpY2hUZXh0fSApIHsKCiAgICAgICAgICAgICROb3RpZmljYXRpb24tPntCb2R5fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+TGlua1F1b3RlKAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICROb3RpZmljYXRpb24tPntCb2R5fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICROb3RpZmljYXRpb24tPntCb2R5fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+RG9jdW1lbnRDb21wbGV0ZSgKICAgICAgICAgICAgICAgIENoYXJzZXQgPT4gJ3V0Zi04JywKICAgICAgICAgICAgICAgIFN0cmluZyAgPT4gJE5vdGlmaWNhdGlvbi0+e0JvZHl9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzZW5kIG5vdGlmaWNhdGlvbgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpFbWFpbCcpLT5TZW5kKAogICAgICAgICAgICBGcm9tID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnTm90aWZpY2F0aW9uU2VuZGVyTmFtZScpIC4gJyA8JwogICAgICAgICAgICAgICAgLiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ05vdGlmaWNhdGlvblNlbmRlckVtYWlsJykgLiAnPicsCiAgICAgICAgICAgIFRvICAgICAgID0+ICRVc2Vye1VzZXJFbWFpbH0sCiAgICAgICAgICAgIFN1YmplY3QgID0+ICROb3RpZmljYXRpb24tPntTdWJqZWN0fSwKICAgICAgICAgICAgTWltZVR5cGUgPT4gJE5vdGlmaWNhdGlvbi0+e0NvbnRlbnRUeXBlfSB8fCAndGV4dC9wbGFpbicsCiAgICAgICAgICAgIENoYXJzZXQgID0+ICd1dGYtOCcsCiAgICAgICAgICAgIEJvZHkgICAgID0+ICROb3RpZmljYXRpb24tPntCb2R5fSwKICAgICAgICAgICAgTG9vcCAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aGUgZXZlbnQgdHlwZQogICAgICAgIG15ICRUeXBlOwogICAgICAgIGlmICggJEV2ZW50ID1+IG17IFxBIChDaGFuZ2V8QWN0aW9uRXhlY3V0ZSkgfXhtcyApIHsKICAgICAgICAgICAgJFR5cGUgPSAnQ2hhbmdlJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkRXZlbnQgPX4gbXsgXEEgV29ya09yZGVyIH14bXMgKSB7CiAgICAgICAgICAgICRUeXBlID0gJ1dvcmtPcmRlcic7CiAgICAgICAgfQoKICAgICAgICAjIHRyaWdnZXIgTm90aWZpY2F0aW9uU2VudC1FdmVudAogICAgICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgICAgIEV2ZW50ID0+ICRUeXBlIC4gJ05vdGlmaWNhdGlvblNlbnRQb3N0JywKICAgICAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlci0+e1dvcmtPcmRlcklEfSwKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgID0+ICRDaGFuZ2UtPntDaGFuZ2VJRH0sCiAgICAgICAgICAgICAgICBFdmVudFR5cGUgICA9PiAkRXZlbnQsCiAgICAgICAgICAgICAgICBUbyAgICAgICAgICA9PiAkVXNlcntVc2VyRW1haWx9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgJEFnZW50c1NlbnR7JEFnZW50SUR9ID0gMTsKICAgIH0KCiAgICBteSAlQ3VzdG9tZXJzU2VudDsKCiAgICBDVVNUT01FUklEOgogICAgZm9yIG15ICRDdXN0b21lcklEICggQHsgJFBhcmFte0N1c3RvbWVySURzfSB9ICkgewoKICAgICAgICAjIGNoZWNrIGlmIG5vdGlmaWNhdGlvbiB3YXMgYWxyZWFkeSBzZW50IHRvIGN1c3RvbWVyCiAgICAgICAgbmV4dCBDVVNUT01FUklEIGlmICRDdXN0b21lcnNTZW50eyRDdXN0b21lcklEfTsKCiAgICAgICAgIyBVc2VyIGluZm8gZm9yIHByZWZlcmVkIGxhbmd1YWdlIGFuZCBtYWNybyByZXBsYWNlbWVudAogICAgICAgIG15ICVDdXN0b21lclVzZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyktPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgIFVzZXIgPT4gJEN1c3RvbWVySUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBkbyBub3Qgc2VuZCBlbWFpbHMgdG8gaW52YWxpZCBjdXN0b21lcnMKICAgICAgICBpZiAoIGV4aXN0cyAkQ3VzdG9tZXJVc2Vye1ZhbGlkSUR9ICYmICEkVmFsaWRJRExvb2t1cHsgJEN1c3RvbWVyVXNlcntWYWxpZElEfSB9ICkgewogICAgICAgICAgICBuZXh0IENVU1RPTUVSSUQ7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzeXN0ZW0gZGVmYXVsdCBsYW5ndWFnZQogICAgICAgIG15ICREZWZhdWx0TGFuZ3VhZ2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0RlZmF1bHRMYW5ndWFnZScpIHx8ICdlbic7CgogICAgICAgICMgZ2V0IHVzZXIgcHJlZmVycmVkIGxhbmd1YWdlCiAgICAgICAgbXkgJFByZWZlcnJlZExhbmd1YWdlID0gJEN1c3RvbWVyVXNlcntVc2VyTGFuZ3VhZ2V9IHx8ICREZWZhdWx0TGFuZ3VhZ2U7CgogICAgICAgICMgbWFrZSBzdXJlIGEgbWVzc2FnZSBpbiB0aGUgdXNlciBsYW5ndWFnZSBleGlzdHMKICAgICAgICBpZiAoICEkUGFyYW17TWVzc2FnZX0tPntDdXN0b21lcn0tPnskUHJlZmVycmVkTGFuZ3VhZ2V9ICkgewoKICAgICAgICAgICAgIyBvdGhlcndpc2UgdXNlIGRlZmF1bHQgbGFuZ3VhZ2UKICAgICAgICAgICAgJFByZWZlcnJlZExhbmd1YWdlID0gJERlZmF1bHRMYW5ndWFnZTsKCiAgICAgICAgICAgICMgaWYgbm8gbWVzc2FnZSBleGlzdHMgaW4gZGVmYXVsdCBsYW5ndWFnZSwgdGhlbiB0YWtlIHRoZSBmaXJzdCBhdmFpbGFibGUgbGFuZ3VhZ2UKICAgICAgICAgICAgaWYgKCAhJFBhcmFte01lc3NhZ2V9LT57Q3VzdG9tZXJ9LT57JFByZWZlcnJlZExhbmd1YWdlfSApIHsKICAgICAgICAgICAgICAgIG15IEBMYW5ndWFnZXMgPSBzb3J0IGtleXMgJXsgJFBhcmFte01lc3NhZ2V9LT57Q3VzdG9tZXJ9IH07CiAgICAgICAgICAgICAgICAkUHJlZmVycmVkTGFuZ3VhZ2UgPSAkTGFuZ3VhZ2VzWzBdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkTm90aWZpY2F0aW9uID0gJFBhcmFte01lc3NhZ2V9LT57Q3VzdG9tZXJ9LT57JFByZWZlcnJlZExhbmd1YWdlfTsKICAgICAgICByZXR1cm4gaWYgISROb3RpZmljYXRpb247CgogICAgICAgICMgZG8gdGV4dC9wbGFpbiB0byB0ZXh0L2h0bWwgY29udmVydAogICAgICAgIGlmICggJFNlbGYtPntSaWNoVGV4dH0gJiYgJE5vdGlmaWNhdGlvbi0+e0NvbnRlbnRUeXBlfSA9fiBteyB0ZXh0L3BsYWluIH14bXNpICkgewogICAgICAgICAgICAkTm90aWZpY2F0aW9uLT57Q29udGVudFR5cGV9ID0gJ3RleHQvaHRtbCc7CiAgICAgICAgICAgICROb3RpZmljYXRpb24tPntCb2R5fSAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvSFRNTCgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkTm90aWZpY2F0aW9uLT57Qm9keX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGRvIHRleHQvaHRtbCB0byB0ZXh0L3BsYWluIGNvbnZlcnQKICAgICAgICBlbHNpZiAoICEkU2VsZi0+e1JpY2hUZXh0fSAmJiAkTm90aWZpY2F0aW9uLT57Q29udGVudFR5cGV9ID1+IG17IHRleHQvaHRtbCB9eG1zaSApIHsKICAgICAgICAgICAgJE5vdGlmaWNhdGlvbi0+e0NvbnRlbnRUeXBlfSA9ICd0ZXh0L3BsYWluJzsKICAgICAgICAgICAgJE5vdGlmaWNhdGlvbi0+e0JvZHl9ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9Bc2NpaSgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkTm90aWZpY2F0aW9uLT57Qm9keX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHJlcGxhY2Ugb3RycyBtYWNyb3MKICAgICAgICAkTm90aWZpY2F0aW9uLT57Qm9keX0gPSAkU2VsZi0+X05vdGlmaWNhdGlvblJlcGxhY2VNYWNyb3MoCiAgICAgICAgICAgIFR5cGUgICAgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgICAgIFRleHQgICAgICA9PiAkTm90aWZpY2F0aW9uLT57Qm9keX0sCiAgICAgICAgICAgIFJlY2lwaWVudCA9PiB7JUN1c3RvbWVyVXNlcn0sCiAgICAgICAgICAgIFJpY2hUZXh0ICA9PiAkU2VsZi0+e1JpY2hUZXh0fSwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBDaGFuZ2UgICAgPT4gJENoYW5nZSwKICAgICAgICAgICAgV29ya09yZGVyID0+ICRXb3JrT3JkZXIsCiAgICAgICAgICAgIExpbmsgICAgICA9PiAkTGluaywKICAgICAgICAgICAgRGF0YSAgICAgID0+ICRQYXJhbXtEYXRhfSwKICAgICAgICAgICAgTGFuZ3VhZ2UgID0+ICRQcmVmZXJyZWRMYW5ndWFnZSwKICAgICAgICApOwoKICAgICAgICAkTm90aWZpY2F0aW9uLT57U3ViamVjdH0gPSAkU2VsZi0+X05vdGlmaWNhdGlvblJlcGxhY2VNYWNyb3MoCiAgICAgICAgICAgIFR5cGUgICAgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgICAgIFRleHQgICAgICA9PiAkTm90aWZpY2F0aW9uLT57U3ViamVjdH0sCiAgICAgICAgICAgIFJlY2lwaWVudCA9PiB7JUN1c3RvbWVyVXNlcn0sCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgQ2hhbmdlICAgID0+ICRDaGFuZ2UsCiAgICAgICAgICAgIFdvcmtPcmRlciA9PiAkV29ya09yZGVyLAogICAgICAgICAgICBMaW5rICAgICAgPT4gJExpbmssCiAgICAgICAgICAgIERhdGEgICAgICA9PiAkUGFyYW17RGF0YX0sCiAgICAgICAgICAgIExhbmd1YWdlICA9PiAkUHJlZmVycmVkTGFuZ3VhZ2UsCiAgICAgICAgKTsKCiAgICAgICAgIyBzZW5kIG5vdGlmaWNhdGlvbgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpFbWFpbCcpLT5TZW5kKAogICAgICAgICAgICBGcm9tID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnTm90aWZpY2F0aW9uU2VuZGVyTmFtZScpIC4gJyA8JwogICAgICAgICAgICAgICAgLiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ05vdGlmaWNhdGlvblNlbmRlckVtYWlsJykgLiAnPicsCiAgICAgICAgICAgIFRvICAgICAgID0+ICRDdXN0b21lclVzZXJ7VXNlckVtYWlsfSwKICAgICAgICAgICAgU3ViamVjdCAgPT4gJE5vdGlmaWNhdGlvbi0+e1N1YmplY3R9LAogICAgICAgICAgICBNaW1lVHlwZSA9PiAkTm90aWZpY2F0aW9uLT57Q29udGVudFR5cGV9IHx8ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgQ2hhcnNldCAgPT4gJ3V0Zi04JywKICAgICAgICAgICAgQm9keSAgICAgPT4gJE5vdGlmaWNhdGlvbi0+e0JvZHl9LAogICAgICAgICAgICBMb29wICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgdHJpZ2dlciBOb3RpZmljYXRpb25TZW50LUV2ZW50CiAgICAgICAgbXkgKCRUeXBlKSA9ICRFdmVudCA9fiBteyAoV29ya09yZGVyfENoYW5nZSkgfXhtczsKICAgICAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgICAgICBFdmVudCA9PiAkVHlwZSAuICdOb3RpZmljYXRpb25TZW50UG9zdCcsCiAgICAgICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXItPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICA9PiAkQ2hhbmdlLT57Q2hhbmdlSUR9LAogICAgICAgICAgICAgICAgRXZlbnRUeXBlICAgPT4gJEV2ZW50LAogICAgICAgICAgICAgICAgVG8gICAgICAgICAgPT4gJEN1c3RvbWVyVXNlcntVc2VyRW1haWx9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgJEN1c3RvbWVyc1NlbnR7JEN1c3RvbWVySUR9ID0gMTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gTm90aWZpY2F0aW9uUnVsZUdldCgpCgpHZXQgaW5mbyBhYm91dCBhIHNpbmdsZSBub3RpZmljYXRpb24gcnVsZQoKICAgIG15ICROb3RpZmljYXRpb25SdWxlID0gJE5vdGlmaWNhdGlvbk9iamVjdC0+Tm90aWZpY2F0aW9uUnVsZUdldCgKICAgICAgICBJRCA9PiAxMjMsCiAgICApOwoKcmV0dXJucwoKICAgIHsKICAgICAgICBJRCAgICAgICAgICAgPT4gMTIzLAogICAgICAgIE5hbWUgICAgICAgICA9PiAnYSBkZXNjcmlwdGl2ZSBuYW1lJywKICAgICAgICBBdHRyaWJ1dGUgICAgPT4gJ0NoYW5nZVRpdGxlJywKICAgICAgICBFdmVudElEICAgICAgPT4gMSwKICAgICAgICBFdmVudCAgICAgICAgPT4gJ0NoYW5nZVVwZGF0ZScsCiAgICAgICAgVmFsaWRJRCAgICAgID0+IDEsCiAgICAgICAgQ29tbWVudCAgICAgID0+ICdkZXNjcmlwdGlvbiB3aGF0IHRoZSBydWxlIGRvZXMnLAogICAgICAgIFJ1bGUgICAgICAgICA9PiAncmVqZWN0ZWQnLAogICAgICAgIFJlY2lwaWVudHMgICA9PiBbICdDaGFuZ2VCdWlsZGVyJywgJ0NoYW5nZU1hbmFnZXInLCAnQ2hhbmdlQ0FCQ3VzdG9tZXJzJyBdLAogICAgICAgIFJlY2lwaWVudElEcyA9PiBbIDIsIDMsIDcgXSwKICAgICAgICBNZXNzYWdlID0+IHsKICAgICAgICAgICAgQWdlbnQgPT4gewogICAgICAgICAgICAgICAgJ2VuJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3ViamVjdCAgICAgPT4gJ0hlbGxvIEFnZW50JywKICAgICAgICAgICAgICAgICAgICBCb2R5ICAgICAgICA9PiAnSGVsbG8gV29ybGQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnZGUnID0+IHsKICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICA9PiAnSGFsbG8gQWdlbnQnLAogICAgICAgICAgICAgICAgICAgIEJvZHkgICAgICAgID0+ICdIYWxsbyBXZWx0JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBDdXN0b21lciA9PiB7CiAgICAgICAgICAgICAgICAnZW4nID0+IHsKICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICA9PiAnSGVsbG8gQ3VzdG9tZXInLAogICAgICAgICAgICAgICAgICAgIEJvZHkgICAgICAgID0+ICdIZWxsbyBXb3JsZCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdkZScgPT4gewogICAgICAgICAgICAgICAgICAgIFN1YmplY3QgICAgID0+ICdIYWxsbyBLdW5kZScsCiAgICAgICAgICAgICAgICAgICAgQm9keSAgICAgICAgPT4gJ0hhbGxvIFdlbHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0KCj1jdXQKCnN1YiBOb3RpZmljYXRpb25SdWxlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIElEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayB0aGUgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdOb3RpZmljYXRpb25SdWxlR2V0OjpJRDo6JyAuICRQYXJhbXtJRH07CiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgICAgICAgICAgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgICAgICAgICAgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgQ2FjaGVJbk1lbW9yeSAgPT4gMSwKICAgICAgICBDYWNoZUluQmFja2VuZCA9PiAwLAogICAgKTsKCiAgICAjIHJldHVybiBhIGNsb25lIG9mIHRoZSBjYWNoZSwgYXMgdGhlIGNhbGxlciBzaG91bGQgbm90IGJlIGFibGUgdG8gY2hhbmdlIHRoZSBjYWNoZQogICAgcmV0dXJuIFN0b3JhYmxlOjpkY2xvbmUoJENhY2hlKSBpZiAkQ2FjaGU7CgogICAgIyBkbyBzcWwgcXVlcnkKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgY24uaWQsIGNuLm5hbWUsIGl0ZW1fYXR0cmlidXRlLCBldmVudF9pZCwgY2h0Lm5hbWUsCiAgICAgICAgICAgIGNuLnZhbGlkX2lkLCBjbi5jb21tZW50cywgbm90aWZpY2F0aW9uX3J1bGUKICAgICAgICAgICAgRlJPTSBjaGFuZ2Vfbm90aWZpY2F0aW9uIGNuLCBjaGFuZ2VfaGlzdG9yeV90eXBlIGNodAogICAgICAgICAgICBXSEVSRSBldmVudF9pZCA9IGNodC5pZCBBTkQgY24uaWQgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17SUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCBub3RpZmljYXRpb24gcnVsZQogICAgbXkgJU5vdGlmaWNhdGlvblJ1bGU7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICVOb3RpZmljYXRpb25SdWxlID0gKAogICAgICAgICAgICBJRCAgICAgICAgICAgPT4gJFJvd1swXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIEF0dHJpYnV0ZSAgICA9PiAkUm93WzJdIC8vICcnLAogICAgICAgICAgICBFdmVudElEICAgICAgPT4gJFJvd1szXSwKICAgICAgICAgICAgRXZlbnQgICAgICAgID0+ICRSb3dbNF0sCiAgICAgICAgICAgIFZhbGlkSUQgICAgICA9PiAkUm93WzVdLAogICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJFJvd1s2XSwKICAgICAgICAgICAgUnVsZSAgICAgICAgID0+ICRSb3dbN10gLy8gJycsCiAgICAgICAgICAgIFJlY2lwaWVudHMgICA9PiB1bmRlZiwKICAgICAgICAgICAgUmVjaXBpZW50SURzID0+IHVuZGVmLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgYWRkaXRpb25hbCBpbmZvCiAgICBpZiAoJU5vdGlmaWNhdGlvblJ1bGUpIHsKCiAgICAgICAgIyBnZXQgcmVjaXBpZW50cwogICAgICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnU0VMRUNUIGdycC5pZCwgZ3JwLm5hbWUKICAgICAgICAgICAgICAgIEZST00gY2hhbmdlX25vdGlmaWNhdGlvbl9ncnBzIGdycCwgY2hhbmdlX25vdGlmaWNhdGlvbl9yZWMgcgogICAgICAgICAgICAgICAgV0hFUkUgZ3JwLmlkID0gci5ncm91cF9pZCBBTkQgci5ub3RpZmljYXRpb25faWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkTm90aWZpY2F0aW9uUnVsZXtJRH0gXSwKICAgICAgICApOwoKICAgICAgICAjIGZldGNoIHJlY2lwaWVudHMKICAgICAgICBteSBAUmVjaXBpZW50czsKICAgICAgICBteSBAUmVjaXBpZW50SURzOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgIHB1c2ggQFJlY2lwaWVudElEcywgJFJvd1swXTsKICAgICAgICAgICAgcHVzaCBAUmVjaXBpZW50cywgICAkUm93WzFdOwogICAgICAgIH0KCiAgICAgICAgJE5vdGlmaWNhdGlvblJ1bGV7UmVjaXBpZW50c30gICA9IFxAUmVjaXBpZW50czsKICAgICAgICAkTm90aWZpY2F0aW9uUnVsZXtSZWNpcGllbnRJRHN9ID0gXEBSZWNpcGllbnRJRHM7CgogICAgICAgICMgZ2V0IGNoYW5nZSBub3RpZmljYXRpb24gbWVzc2FnZSBkYXRhCiAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1Qgc3ViamVjdCwgdGV4dCwgY29udGVudF90eXBlLCBsYW5ndWFnZSwgbm90aWZpY2F0aW9uX3R5cGUKICAgICAgICAgICAgICAgIEZST00gY2hhbmdlX25vdGlmaWNhdGlvbl9tZXNzYWdlCiAgICAgICAgICAgICAgICBXSEVSRSBub3RpZmljYXRpb25faWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkTm90aWZpY2F0aW9uUnVsZXtJRH0gXSwKICAgICAgICApOwoKICAgICAgICBteSAlTWVzc2FnZTsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICAgICAgIyBhZGQgdG8gbWVzc2FnZSBoYXNoIHdpdGggdGhlIG5vdGlmaWNhdGlvbiB0eXBlIGFuZCB0aGUgbGFuZ3VhZ2UgYXMga2V5CiAgICAgICAgICAgICMgZS5nLiAkTWVzc2FnZXtBZ2VudH0tPntkZX0sIG9yICRNZXNzYWdle0N1c3RvbWVyfS0+e2VufQogICAgICAgICAgICAkTWVzc2FnZXsgJFJvd1s0XSB9LT57ICRSb3dbM10gfSA9IHsKICAgICAgICAgICAgICAgIFN1YmplY3QgICAgID0+ICRSb3dbMF0sCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICA9PiAkUm93WzFdLAogICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJFJvd1syXSwKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICROb3RpZmljYXRpb25SdWxle01lc3NhZ2V9ID0gXCVNZXNzYWdlOwogICAgfQoKICAgICMgc2F2ZSB2YWx1ZXMgaW4gY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCgogICAgICAgICMgbWFrZSBhIGxvY2FsIGNvcHkgb2YgdGhlIG5vdGlmaWNhdGlvbiBkYXRhIHRvIGF2b2lkIGl0IGJlaW5nIGFsdGVyZWQgaW4tbWVtb3J5IGxhdGVyCiAgICAgICAgVmFsdWUgPT4geyVOb3RpZmljYXRpb25SdWxlfSwKCiAgICAgICAgQ2FjaGVJbk1lbW9yeSAgPT4gMSwKICAgICAgICBDYWNoZUluQmFja2VuZCA9PiAwLAogICAgICAgIFRUTCAgICAgICAgICAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgKTsKCiAgICAjIHJldHVybiBhIGNsb25lIG9mIHRoZSBjYWNoZSwgYXMgdGhlIGNhbGxlciBzaG91bGQgbm90IGJlIGFibGUgdG8gY2hhbmdlIHRoZSBjYWNoZQogICAgcmV0dXJuIFN0b3JhYmxlOjpkY2xvbmUoIFwlTm90aWZpY2F0aW9uUnVsZSApOwp9Cgo9aXRlbSBOb3RpZmljYXRpb25SdWxlQWRkKCkKCkFkZCBhIG5vdGlmaWNhdGlvbiBydWxlLiBSZXR1cm5zIHRoZSBJRCBvZiB0aGUgcnVsZS4KCiAgICBteSAkSUQgPSAkTm90aWZpY2F0aW9uT2JqZWN0LT5Ob3RpZmljYXRpb25SdWxlQWRkKAogICAgICAgIE5hbWUgICAgICAgICA9PiAnYSBkZXNjcmlwdGl2ZSBuYW1lJywKICAgICAgICBBdHRyaWJ1dGUgICAgPT4gJ0NoYW5nZVRpdGxlJywKICAgICAgICBFdmVudElEICAgICAgPT4gMSwKICAgICAgICBWYWxpZElEICAgICAgPT4gMSwKICAgICAgICBDb21tZW50ICAgICAgPT4gJ2Rlc2NyaXB0aW9uIHdoYXQgdGhlIHJ1bGUgZG9lcycsCiAgICAgICAgUnVsZSAgICAgICAgID0+ICdyZWplY3RlZCcsCiAgICAgICAgUmVjaXBpZW50SURzID0+IFsgMiwgMywgNyBdLAogICAgICAgIE1lc3NhZ2UgPT4gewogICAgICAgICAgICBBZ2VudCA9PiB7CiAgICAgICAgICAgICAgICAnZW4nID0+IHsKICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICA9PiAnSGVsbG8gQWdlbnQnLAogICAgICAgICAgICAgICAgICAgIEJvZHkgICAgICAgID0+ICdIZWxsbyBXb3JsZCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdkZScgPT4gewogICAgICAgICAgICAgICAgICAgIFN1YmplY3QgICAgID0+ICdIYWxsbyBBZ2VudCcsCiAgICAgICAgICAgICAgICAgICAgQm9keSAgICAgICAgPT4gJ0hhbGxvIFdlbHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEN1c3RvbWVyID0+IHsKICAgICAgICAgICAgICAgICdlbicgPT4gewogICAgICAgICAgICAgICAgICAgIFN1YmplY3QgICAgID0+ICdIZWxsbyBDdXN0b21lcicsCiAgICAgICAgICAgICAgICAgICAgQm9keSAgICAgICAgPT4gJ0hlbGxvIFdvcmxkJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ2RlJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3ViamVjdCAgICAgPT4gJ0hhbGxvIEt1bmRlJywKICAgICAgICAgICAgICAgICAgICBCb2R5ICAgICAgICA9PiAnSGFsbG8gV2VsdCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgKTsKCj1jdXQKCnN1YiBOb3RpZmljYXRpb25SdWxlQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhOYW1lIEV2ZW50SUQgVmFsaWRJRCBSZWNpcGllbnRJRHMgTWVzc2FnZSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIFJlY2lwaWVudElEcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZQogICAgaWYgKCByZWYgJFBhcmFte1JlY2lwaWVudElEc30gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1JlY2lwaWVudElEcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgbWVzc2FnZQogICAgZm9yIG15ICRUeXBlIChxdyhBZ2VudCBDdXN0b21lcikpIHsKCiAgICAgICAgIyBjaGVjayBtZXNzYWdlIHBhcmFtZXRlciwgd2UgYWx3YXlzIG5lZWQgYWdlbnQgYW5kIG1lc3NhZ2UKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte01lc3NhZ2V9LT57JFR5cGV9ICkgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRUeXBlIE1lc3NhZ2UhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBlYWNoIGFyZ3VtZW50IGZvciBlYWNoIG1lc3NhZ2UgbGFuZ3VhZ2UKICAgICAgICBmb3IgbXkgJExhbmd1YWdlICggc29ydCBrZXlzICV7ICRQYXJhbXtNZXNzYWdlfS0+eyRUeXBlfSB9ICkgewoKICAgICAgICAgICAgZm9yIG15ICRBcmd1bWVudCAocXcoU3ViamVjdCBCb2R5IENvbnRlbnRUeXBlKSkgewoKICAgICAgICAgICAgICAgICMgZXJyb3IgaWYgbWVzc2FnZSBkYXRhIGlzIGluY29tcGxldGUKICAgICAgICAgICAgICAgIGlmICggISRQYXJhbXtNZXNzYWdlfS0+eyRUeXBlfS0+eyRMYW5ndWFnZX0tPnskQXJndW1lbnR9ICkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkVHlwZSBNZXNzYWdlIGFyZ3VtZW50ICckQXJndW1lbnQnIGZvciBsYW5ndWFnZSAnJExhbmd1YWdlJyEiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGZpeCBzb21lIGJhZCBzdHVmZiBmcm9tIHNvbWUgYnJvd3NlcnMgKE9wZXJhKSEKICAgICAgICAgICAgJFBhcmFte01lc3NhZ2V9LT57JFR5cGV9LT57JExhbmd1YWdlfS0+e0JvZHl9ID1+IHMvKFxuXHJ8XHJcclxufFxyXG58XHIpL1xuL2c7CiAgICAgICAgfQogICAgfQoKICAgICMgc2F2ZSBub3RpZmljYXRpb24gcnVsZQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBjaGFuZ2Vfbm90aWZpY2F0aW9uCiAgICAgICAgICAgIChuYW1lLCBldmVudF9pZCwgdmFsaWRfaWQsIGl0ZW1fYXR0cmlidXRlLCBjb21tZW50cywgbm90aWZpY2F0aW9uX3J1bGUpCiAgICAgICAgICAgIFZBTFVFUyAoPywgPywgPywgPywgPywgPyknLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LCAgICAgIFwkUGFyYW17RXZlbnRJRH0sIFwkUGFyYW17VmFsaWRJRH0sCiAgICAgICAgICAgIFwkUGFyYW17QXR0cmlidXRlfSwgXCRQYXJhbXtDb21tZW50fSwgXCRQYXJhbXtSdWxlfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGdldCBJRCBvZiBydWxlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkCiAgICAgICAgICAgIEZST00gY2hhbmdlX25vdGlmaWNhdGlvbgogICAgICAgICAgICBXSEVSRSBuYW1lID0gPwogICAgICAgICAgICBBTkQgZXZlbnRfaWQgPSA/CiAgICAgICAgICAgIEFORCB2YWxpZF9pZCA9ID8KICAgICAgICAgICAgQU5EIGl0ZW1fYXR0cmlidXRlID0gPwogICAgICAgICAgICBBTkQgY29tbWVudHMgPSA/CiAgICAgICAgICAgIEFORCBub3RpZmljYXRpb25fcnVsZSA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LCAgICAgIFwkUGFyYW17RXZlbnRJRH0sIFwkUGFyYW17VmFsaWRJRH0sCiAgICAgICAgICAgIFwkUGFyYW17QXR0cmlidXRlfSwgXCRQYXJhbXtDb21tZW50fSwgXCRQYXJhbXtSdWxlfSwKICAgICAgICBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggSUQKICAgIG15ICRSdWxlSUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRSdWxlSUQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBpZiAhJFJ1bGVJRDsKCiAgICAjIGluc2VydCByZWNpcGllbnRzCiAgICBmb3IgbXkgJFJlY2lwaWVudElEICggQHsgJFBhcmFte1JlY2lwaWVudElEc30gfSApIHsKICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMICA9PiAnSU5TRVJUIElOVE8gY2hhbmdlX25vdGlmaWNhdGlvbl9yZWMgKG5vdGlmaWNhdGlvbl9pZCwgZ3JvdXBfaWQpIFZBTFVFUyAoPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRSdWxlSUQsIFwkUmVjaXBpZW50SUQgXSwKICAgICAgICApOwogICAgfQoKICAgICMgaW5zZXJ0IGNoYW5nZSBub3RpZmljYXRpb24gbWVzc2FnZSBkYXRhCiAgICBmb3IgbXkgJFR5cGUgKHF3KEFnZW50IEN1c3RvbWVyKSkgewoKICAgICAgICBmb3IgbXkgJExhbmd1YWdlICggc29ydCBrZXlzICV7ICRQYXJhbXtNZXNzYWdlfS0+eyRUeXBlfSB9ICkgewoKICAgICAgICAgICAgbXkgJU1lc3NhZ2UgPSAleyAkUGFyYW17TWVzc2FnZX0tPnskVHlwZX0tPnskTGFuZ3VhZ2V9IH07CgogICAgICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gY2hhbmdlX25vdGlmaWNhdGlvbl9tZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgKG5vdGlmaWNhdGlvbl9pZCwgc3ViamVjdCwgdGV4dCwgY29udGVudF90eXBlLCBsYW5ndWFnZSwgbm90aWZpY2F0aW9uX3R5cGUpCiAgICAgICAgICAgICAgICAgICAgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/KScsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgICAgICBcJFJ1bGVJRCwKICAgICAgICAgICAgICAgICAgICBcJE1lc3NhZ2V7U3ViamVjdH0sCiAgICAgICAgICAgICAgICAgICAgXCRNZXNzYWdle0JvZHl9LAogICAgICAgICAgICAgICAgICAgIFwkTWVzc2FnZXtDb250ZW50VHlwZX0sCiAgICAgICAgICAgICAgICAgICAgXCRMYW5ndWFnZSwKICAgICAgICAgICAgICAgICAgICBcJFR5cGUsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgZm9yIG15ICRLZXkgKAogICAgICAgICdOb3RpZmljYXRpb25SdWxlTGlzdCcsCiAgICAgICAgJ05vdGlmaWNhdGlvblJ1bGVTZWFyY2g6OlZhbGlkOjowJywKICAgICAgICAnTm90aWZpY2F0aW9uUnVsZVNlYXJjaDo6VmFsaWQ6OjEnLAogICAgICAgICdOb3RpZmljYXRpb25SdWxlU2VhcmNoOjpWYWxpZDo6MDo6RXZlbnRJRDo6JyAuICRQYXJhbXtFdmVudElEfSwKICAgICAgICAnTm90aWZpY2F0aW9uUnVsZVNlYXJjaDo6VmFsaWQ6OjE6OkV2ZW50SUQ6OicgLiAkUGFyYW17RXZlbnRJRH0sCiAgICAgICAgKQogICAgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkS2V5LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRSdWxlSUQ7Cn0KCj1pdGVtIE5vdGlmaWNhdGlvblJ1bGVVcGRhdGUoKQoKdXBkYXRlcyBhbiBleGlzdGluZyBub3RpZmljYXRpb24gcnVsZQoKICAgIG15ICRTdWNjZXNzID0gJE5vdGlmaWNhdGlvbk9iamVjdC0+Tm90aWZpY2F0aW9uUnVsZVVwZGF0ZSgKICAgICAgICBJRCAgICAgICAgICAgPT4gMTIzLAogICAgICAgIE5hbWUgICAgICAgICA9PiAnYSBkZXNjcmlwdGl2ZSBuYW1lJywKICAgICAgICBBdHRyaWJ1dGUgICAgPT4gJ0NoYW5nZVRpdGxlJywKICAgICAgICBFdmVudElEICAgICAgPT4gMSwKICAgICAgICBWYWxpZElEICAgICAgPT4gMSwKICAgICAgICBDb21tZW50ICAgICAgPT4gJ2Rlc2NyaXB0aW9uIHdoYXQgdGhlIHJ1bGUgZG9lcycsCiAgICAgICAgUnVsZSAgICAgICAgID0+ICdyZWplY3RlZCcsCiAgICAgICAgUmVjaXBpZW50SURzID0+IFsgMiwgMywgNyBdLAogICAgICAgIE1lc3NhZ2UgPT4gewogICAgICAgICAgICBBZ2VudCA9PiB7CiAgICAgICAgICAgICAgICAnZW4nID0+IHsKICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICA9PiAnSGVsbG8gQWdlbnQnLAogICAgICAgICAgICAgICAgICAgIEJvZHkgICAgICAgID0+ICdIZWxsbyBXb3JsZCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdkZScgPT4gewogICAgICAgICAgICAgICAgICAgIFN1YmplY3QgICAgID0+ICdIYWxsbyBBZ2VudCcsCiAgICAgICAgICAgICAgICAgICAgQm9keSAgICAgICAgPT4gJ0hhbGxvIFdlbHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEN1c3RvbWVyID0+IHsKICAgICAgICAgICAgICAgICdlbicgPT4gewogICAgICAgICAgICAgICAgICAgIFN1YmplY3QgICAgID0+ICdIZWxsbyBDdXN0b21lcicsCiAgICAgICAgICAgICAgICAgICAgQm9keSAgICAgICAgPT4gJ0hlbGxvIFdvcmxkJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ2RlJyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3ViamVjdCAgICAgPT4gJ0hhbGxvIEt1bmRlJywKICAgICAgICAgICAgICAgICAgICBCb2R5ICAgICAgICA9PiAnSGFsbG8gV2VsdCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgKTsKCj1jdXQKCnN1YiBOb3RpZmljYXRpb25SdWxlVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhJRCBOYW1lIEV2ZW50SUQgVmFsaWRJRCBSZWNpcGllbnRJRHMgTWVzc2FnZSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIFJlY2lwaWVudElEcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZQogICAgaWYgKCByZWYgJFBhcmFte1JlY2lwaWVudElEc30gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1JlY2lwaWVudElEcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgbWVzc2FnZQogICAgZm9yIG15ICRUeXBlIChxdyhBZ2VudCBDdXN0b21lcikpIHsKCiAgICAgICAgIyBjaGVjayBtZXNzYWdlIHBhcmFtZXRlciwgd2UgYWx3YXlzIG5lZWQgYWdlbnQgYW5kIG1lc3NhZ2UKICAgICAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte01lc3NhZ2V9LT57JFR5cGV9ICkgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRUeXBlIE1lc3NhZ2UhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBlYWNoIGFyZ3VtZW50IGZvciBlYWNoIG1lc3NhZ2UgbGFuZ3VhZ2UKICAgICAgICBmb3IgbXkgJExhbmd1YWdlICggc29ydCBrZXlzICV7ICRQYXJhbXtNZXNzYWdlfS0+eyRUeXBlfSB9ICkgewoKICAgICAgICAgICAgZm9yIG15ICRBcmd1bWVudCAocXcoU3ViamVjdCBCb2R5IENvbnRlbnRUeXBlKSkgewoKICAgICAgICAgICAgICAgICMgZXJyb3IgaWYgbWVzc2FnZSBkYXRhIGlzIGluY29tcGxldGUKICAgICAgICAgICAgICAgIGlmICggISRQYXJhbXtNZXNzYWdlfS0+eyRUeXBlfS0+eyRMYW5ndWFnZX0tPnskQXJndW1lbnR9ICkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkVHlwZSBNZXNzYWdlIGFyZ3VtZW50ICckQXJndW1lbnQnIGZvciBsYW5ndWFnZSAnJExhbmd1YWdlJyEiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGZpeCBzb21lIGJhZCBzdHVmZiBmcm9tIHNvbWUgYnJvd3NlcnMgKE9wZXJhKSEKICAgICAgICAgICAgJFBhcmFte01lc3NhZ2V9LT57JFR5cGV9LT57JExhbmd1YWdlfS0+e0JvZHl9ID1+IHMvKFxuXHJ8XHJcclxufFxyXG58XHIpL1xuL2c7CiAgICAgICAgfQogICAgfQoKICAgICMgc2F2ZSBub3RpZmljYXRpb24gcnVsZQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICdVUERBVEUgY2hhbmdlX25vdGlmaWNhdGlvbiAnCiAgICAgICAgICAgIC4gJ1NFVCBuYW1lID0gPywgZXZlbnRfaWQgPSA/LCB2YWxpZF9pZCA9ID8sIGl0ZW1fYXR0cmlidXRlID0gPywgJwogICAgICAgICAgICAuICdjb21tZW50cyA9ID8sIG5vdGlmaWNhdGlvbl9ydWxlID0gPyBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LCAgICAgIFwkUGFyYW17RXZlbnRJRH0sIFwkUGFyYW17VmFsaWRJRH0sCiAgICAgICAgICAgIFwkUGFyYW17QXR0cmlidXRlfSwgXCRQYXJhbXtDb21tZW50fSwgXCRQYXJhbXtSdWxlfSwKICAgICAgICAgICAgXCRQYXJhbXtJRH0sCiAgICAgICAgXSwKICAgICk7CgogICAgIyBkZWxldGUgb2xkIHJlY2lwaWVudCBlbnRyaWVzCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBjaGFuZ2Vfbm90aWZpY2F0aW9uX3JlYyBXSEVSRSBub3RpZmljYXRpb25faWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtJRH0gXSwKICAgICk7CgogICAgIyBpbnNlcnQgcmVjaXBpZW50cwogICAgZm9yIG15ICRSZWNpcGllbnRJRCAoIEB7ICRQYXJhbXtSZWNpcGllbnRJRHN9IH0gKSB7CiAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gJ0lOU0VSVCBJTlRPIGNoYW5nZV9ub3RpZmljYXRpb25fcmVjIChub3RpZmljYXRpb25faWQsIGdyb3VwX2lkKSBWQUxVRVMgKD8sID8pJywKICAgICAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17SUR9LCBcJFJlY2lwaWVudElEIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGRlbGV0ZSBvbGQgY2hhbmdlIG5vdGlmaWNhdGlvbiBtZXNzYWdlIGRhdGEKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGNoYW5nZV9ub3RpZmljYXRpb25fbWVzc2FnZSBXSEVSRSBub3RpZmljYXRpb25faWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtJRH0gXSwKICAgICk7CgogICAgIyBpbnNlcnQgY2hhbmdlIG5vdGlmaWNhdGlvbiBtZXNzYWdlIGRhdGEKICAgIGZvciBteSAkVHlwZSAocXcoQWdlbnQgQ3VzdG9tZXIpKSB7CgogICAgICAgIGZvciBteSAkTGFuZ3VhZ2UgKCBzb3J0IGtleXMgJXsgJFBhcmFte01lc3NhZ2V9LT57JFR5cGV9IH0gKSB7CgogICAgICAgICAgICBteSAlTWVzc2FnZSA9ICV7ICRQYXJhbXtNZXNzYWdlfS0+eyRUeXBlfS0+eyRMYW5ndWFnZX0gfTsKCiAgICAgICAgICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBjaGFuZ2Vfbm90aWZpY2F0aW9uX21lc3NhZ2UKICAgICAgICAgICAgICAgICAgICAobm90aWZpY2F0aW9uX2lkLCBzdWJqZWN0LCB0ZXh0LCBjb250ZW50X3R5cGUsIGxhbmd1YWdlLCBub3RpZmljYXRpb25fdHlwZSkKICAgICAgICAgICAgICAgICAgICBWQUxVRVMgKD8sID8sID8sID8sID8sID8pJywKICAgICAgICAgICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICAgICAgICAgIFwkUGFyYW17SUR9LAogICAgICAgICAgICAgICAgICAgIFwkTWVzc2FnZXtTdWJqZWN0fSwKICAgICAgICAgICAgICAgICAgICBcJE1lc3NhZ2V7Qm9keX0sCiAgICAgICAgICAgICAgICAgICAgXCRNZXNzYWdle0NvbnRlbnRUeXBlfSwKICAgICAgICAgICAgICAgICAgICBcJExhbmd1YWdlLAogICAgICAgICAgICAgICAgICAgIFwkVHlwZSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZGVsZXRlIGNhY2hlCiAgICBmb3IgbXkgJEtleSAoCiAgICAgICAgJ05vdGlmaWNhdGlvblJ1bGVHZXQ6OklEOjonIC4gJFBhcmFte0lEfSwKICAgICAgICAnTm90aWZpY2F0aW9uUnVsZUxpc3QnLAogICAgICAgICdOb3RpZmljYXRpb25SdWxlU2VhcmNoOjpWYWxpZDo6MCcsCiAgICAgICAgJ05vdGlmaWNhdGlvblJ1bGVTZWFyY2g6OlZhbGlkOjoxJywKICAgICAgICAnTm90aWZpY2F0aW9uUnVsZVNlYXJjaDo6VmFsaWQ6OjA6OkV2ZW50SUQ6OicgLiAkUGFyYW17RXZlbnRJRH0sCiAgICAgICAgJ05vdGlmaWNhdGlvblJ1bGVTZWFyY2g6OlZhbGlkOjoxOjpFdmVudElEOjonIC4gJFBhcmFte0V2ZW50SUR9LAogICAgICAgICkKICAgIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJEtleSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBOb3RpZmljYXRpb25SdWxlRGVsZXRlKCkKCmRlbGV0ZXMgYW4gZXhpc3Rpbmcgbm90aWZpY2F0aW9uIHJ1bGUKCiAgICBteSAkU3VjY2VzcyA9ICROb3RpZmljYXRpb25PYmplY3QtPk5vdGlmaWNhdGlvblJ1bGVEZWxldGUoCiAgICAgICAgSUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBOb3RpZmljYXRpb25SdWxlRGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIElEISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkZWxldGUgY2hhbmdlIG5vdGlmaWNhdGlvbiByZWNpcGllbnQgZW50cmllcwogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gY2hhbmdlX25vdGlmaWNhdGlvbl9yZWMgV0hFUkUgbm90aWZpY2F0aW9uX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17SUR9IF0sCiAgICApOwoKICAgICMgZGVsZXRlIGNoYW5nZSBub3RpZmljYXRpb24gbWVzc2FnZSBkYXRhCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSBjaGFuZ2Vfbm90aWZpY2F0aW9uX21lc3NhZ2UgV0hFUkUgbm90aWZpY2F0aW9uX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17SUR9IF0sCiAgICApOwoKICAgICMgZGVsZXRlIGNoYW5nZSBub3RpZmljYXRpb24KICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIGNoYW5nZV9ub3RpZmljYXRpb24gV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtJRH0gXSwKICAgICk7CgogICAgIyBjbGVhbnVwIGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIE5vdGlmaWNhdGlvblJ1bGVMaXN0KCkKCnJldHVybnMgYW4gYXJyYXkgcmVmZXJlbmNlIHdpdGggSURzIG9mIGFsbCBleGlzdGluZyBub3RpZmljYXRpb24gcnVsZXMKCiAgICBteSAkTGlzdCA9ICROb3RpZmljYXRpb25PYmplY3QtPk5vdGlmaWNhdGlvblJ1bGVMaXN0KCk7CgpyZXR1cm5zCgogICAgWyAxLCAyLCAzIF0KCj1jdXQKCnN1YiBOb3RpZmljYXRpb25SdWxlTGlzdCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgY2hlY2sgdGhlIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnTm90aWZpY2F0aW9uUnVsZUxpc3QnOwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAjIGRvIHNxbCBxdWVyeSwKICAgICMgc29ydCBpbiBhIHVzZXJmcmllbmRseSBmYXNoaW9uCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkIEZST00gY2hhbmdlX25vdGlmaWNhdGlvbiAnCiAgICAgICAgICAgIC4gJ09SREVSIEJZIGV2ZW50X2lkLCBpdGVtX2F0dHJpYnV0ZSwgbm90aWZpY2F0aW9uX3J1bGUnLAogICAgKTsKCiAgICAjIGZldGNoIElEcwogICAgbXkgQElEczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBASURzLCAkUm93WzBdOwogICAgfQoKICAgICMgc2F2ZSB2YWx1ZXMgaW4gY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQElEcywKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICk7CgogICAgcmV0dXJuIFxASURzOwp9Cgo9aXRlbSBOb3RpZmljYXRpb25SdWxlU2VhcmNoKCkKClJldHVybnMgYW4gYXJyYXkgcmVmZXJlbmNlIHdpdGggSURzIG9mIGFsbCBtYXRjaGluZyBub3RpZmljYXRpb24gcnVsZXMuClRoZSBvbmx5IHZhbGlkIHNlYXJjaCBwYXJhbWV0ZXIgaXMgdGhlIEV2ZW50SUQuCgogICAgbXkgJE5vdGlmaWNhdGlvblJ1bGVJRHMgPSAkTm90aWZpY2F0aW9uT2JqZWN0LT5Ob3RpZmljYXRpb25SdWxlU2VhcmNoKAogICAgICAgIEV2ZW50SUQgPT4gNCwgICAgIyBvcHRpb25hbCwgcHJpbWFyeSBrZXkgaW4gY2hhbmdlX2hpc3RvcnlfdHlwZQogICAgICAgIFZhbGlkICAgPT4gMSwgICAgIyBvcHRpb25hbCwgZGVmYXVsdCBpcyAxCiAgICApOwoKcmV0dXJucwoKICAgIFsgMSwgMiwgMyBdCgo9Y3V0CgpzdWIgTm90aWZpY2F0aW9uUnVsZVNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRWYWxpZCA9IGRlZmluZWQgJFBhcmFte1ZhbGlkfSA/ICRQYXJhbXtWYWxpZH0gOiAxOwoKICAgIG15IEBTUUxXaGVyZTsgICAgIyBhc3NlbWJsZSB0aGUgY29uZGl0aW9ucyB1c2VkIGluIHRoZSBXSEVSRSBjbGF1c2UKICAgIG15IEBTUUxCaW5kOyAgICAgIyBwYXJhbWV0ZXJzIGZvciB0aGUgV0hFUkUgY2xhdXNlCgogICAgIyBkZWZpbmUgdGhlIGNhY2hlIGtleQogICAgbXkgJENhY2hlS2V5ID0gJ05vdGlmaWNhdGlvblJ1bGVTZWFyY2g6OlZhbGlkOjonIC4gJFZhbGlkOwoKICAgICMgZm9yIG5vdyB3ZSBvbmx5IGhhdmUgYSBzaW5nbGUgc2VhcmNoIHBhcmFtCiAgICBpZiAoICRQYXJhbXtFdmVudElEfSApIHsKICAgICAgICBwdXNoIEBTUUxXaGVyZSwgJ2NuLmV2ZW50X2lkID0gPyc7CiAgICAgICAgcHVzaCBAU1FMQmluZCwgIFwkUGFyYW17RXZlbnRJRH07CiAgICAgICAgJENhY2hlS2V5IC49ICc6OkV2ZW50SUQ6OicgLiAkUGFyYW17RXZlbnRJRH07CiAgICB9CgogICAgbXkgJENhY2hlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICBteSAkU1FMID0gJ1NFTEVDVCBpZCBGUk9NIGNoYW5nZV9ub3RpZmljYXRpb24gY24gJzsKCiAgICAjIGFkZCB0aGUgV0hFUkUgY2xhdXNlCiAgICBpZiAoQFNRTFdoZXJlKSB7CiAgICAgICAgJFNRTCAuPSAnV0hFUkUgJzsKICAgICAgICAkU1FMIC49IGpvaW4gJyBBTkQgJywgbWFwIHsiKCAkXyApIn0gQFNRTFdoZXJlOwogICAgICAgICRTUUwgLj0gJyAnOwogICAgfQoKICAgICMgYWRkIHZhbGlkIG9wdGlvbgogICAgaWYgKCRWYWxpZCkgewogICAgICAgICRTUUwgLj0gJ0FORCBjbi52YWxpZF9pZCBJTiAoJwogICAgICAgICAgICAuIGpvaW4oICcsICcsICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpICkgLiAnKSAnOwogICAgfQoKICAgICMgYWRkIHRoZSBPUkRFUiBCWSBjbGF1c2UKICAgICRTUUwgLj0gJ09SREVSIEJZIGNuLmlkICc7CgogICAgIyBkbyBzcWwgcXVlcnkKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAkU1FMLAogICAgICAgIEJpbmQgPT4gXEBTUUxCaW5kLAogICAgKTsKCiAgICAjIGZldGNoIElEcwogICAgbXkgQElEczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBASURzLCAkUm93WzBdOwogICAgfQoKICAgICMgc2F2ZSB2YWx1ZXMgaW4gY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQElEcywKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICk7CgogICAgcmV0dXJuIFxASURzOwp9Cgo9aXRlbSBSZWNpcGllbnRMb29rdXAoKQoKUmV0dXJucyB0aGUgSUQgd2hlbiB5b3UgcGFzcyB0aGUgcmVjaXBpZW50IG5hbWUgYW5kIHJldHVybnMgdGhlIG5hbWUgaWYgeW91CnBhc3MgdGhlIHJlY2lwaWVudCBJRC4KCiAgICBteSAkSUQgPSAkTm90aWZpY2F0aW9uT2JqZWN0LT5SZWNpcGllbnRMb29rdXAoCiAgICAgICAgTmFtZSA9PiAnQ2hhbmdlQnVpbGRlcicsCiAgICApOwoKICAgIG15ICROYW1lID0gJE5vdGlmaWNhdGlvbk9iamVjdC0+UmVjaXBpZW50TG9va3VwKAogICAgICAgIElEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgUmVjaXBpZW50TG9va3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJRH0gJiYgISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgZWl0aGVyIElEIG9yIE5hbWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtJRH0gJiYgJFBhcmFte05hbWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBlaXRoZXIgSUQgb3IgTmFtZSAtIG5vdCBib3RoIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayB0aGUgY2FjaGUKICAgIG15ICRDYWNoZUtleTsKICAgIGlmICggJFBhcmFte0lEfSApIHsKICAgICAgICAkQ2FjaGVLZXkgPSAnUmVjaXBpZW50TG9va3VwOjpJRDo6JyAuICRQYXJhbXtJRH07CiAgICB9CiAgICBlbHNpZiAoICRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkQ2FjaGVLZXkgPSAnUmVjaXBpZW50TG9va3VwOjpOYW1lOjonIC4gJFBhcmFte05hbWV9OwogICAgfQogICAgbXkgJENhY2hlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAjIGRldGVybWluZSBzcWwgc3RhdGVtZW50IGFuZCBiaW5kIHBhcmFtZXRlcnMKICAgIG15ICRTUUw7CiAgICBteSBAQmluZHM7CiAgICBpZiAoICRQYXJhbXtJRH0gKSB7CiAgICAgICAgJFNRTCAgID0gJ1NFTEVDVCBuYW1lIEZST00gY2hhbmdlX25vdGlmaWNhdGlvbl9ncnBzIFdIRVJFIGlkID0gPyc7CiAgICAgICAgQEJpbmRzID0gKCBcJFBhcmFte0lEfSApOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJFNRTCAgID0gJ1NFTEVDVCBpZCBGUk9NIGNoYW5nZV9ub3RpZmljYXRpb25fZ3JwcyBXSEVSRSBuYW1lID0gPyc7CiAgICAgICAgQEJpbmRzID0gKCBcJFBhcmFte05hbWV9ICk7CiAgICB9CgogICAgIyBkbyBzcWwgcXVlcnkKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBCaW5kICA9PiBcQEJpbmRzLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZ2V0IHZhbHVlCiAgICBteSAkVmFsdWU7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRWYWx1ZSA9ICRSb3dbMF07CiAgICB9CgogICAgIyBzYXZlIHZhbHVlIGluIGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gJFZhbHVlLAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgKTsKCiAgICByZXR1cm4gJFZhbHVlOwp9Cgo9aXRlbSBSZWNpcGllbnRMaXN0KCkKCnJldHVybnMgYW4gYXJyYXkgcmVmZXJlbmNlIHdpdGggaGFzaHJlZmVyZW5jZXMuIFRoZSBrZXkgb2YgdGhlIGhhc2hyZWZlcmVuY2UgaXMgdGhlIGlkCm9mIGFuIHJlY2lwaWVudCBhbmQgdGhlIG5hbWUgaXMgdGhlIHZhbHVlLgoKICAgIG15ICRMaXN0ID0gJE5vdGlmaWNhdGlvbk9iamVjdC0+UmVjaXBpZW50TGlzdCgpOwoKcmV0dXJucwoKICAgIFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+IDEsCiAgICAgICAgICAgIFZhbHVlID0+ICdDaGFuZ2VCdWlsZGVyJwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAyLAogICAgICAgICAgICBWYWx1ZSA9PiAnQ2hhbmdlTWFuYWdlcicKICAgICAgICB9LAogICAgXQoKPWN1dAoKc3ViIFJlY2lwaWVudExpc3QgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIGRvIFNRTCBxdWVyeQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgbmFtZSBGUk9NIGNoYW5nZV9ub3RpZmljYXRpb25fZ3JwcyBPUkRFUiBCWSBuYW1lJywKICAgICk7CgogICAgIyBmZXRjaCByZWNpcGllbnRzCiAgICBteSBAUmVjaXBpZW50czsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJFJlY2lwaWVudCA9IHsKICAgICAgICAgICAgS2V5ICAgPT4gJFJvd1swXSwKICAgICAgICAgICAgVmFsdWUgPT4gJFJvd1sxXSwKICAgICAgICB9OwogICAgICAgIHB1c2ggQFJlY2lwaWVudHMsICRSZWNpcGllbnQ7CiAgICB9CgogICAgcmV0dXJuIFxAUmVjaXBpZW50czsKfQoKPWJlZ2luIEludGVybmFsOgoKPWl0ZW0gX05vdGlmaWNhdGlvblJlcGxhY2VNYWNyb3MoKQoKVGhpcyBtZXRob2QgcmVwbGFjZXMgYWxsIHRoZSA8T1RSU194eHh4PiBtYWNyb3MgaW4gbm90aWZpY2F0aW9uIHRleHQuCgogICAgbXkgJENsZWFuVGV4dCA9ICROb3RpZmljYXRpb25PYmplY3QtPl9Ob3RpZmljYXRpb25SZXBsYWNlTWFjcm9zKAogICAgICAgIFR5cGUgICAgICA9PiAnQ2hhbmdlJywgICAgIyBDaGFuZ2V8V29ya09yZGVyCiAgICAgICAgVGV4dCAgICAgID0+ICdTb21lIDxPVFJTX0NPTkZJR19GUUROPiB0ZXh0JywKICAgICAgICBSaWNoVGV4dCAgPT4gMSwgICAgICAgICAgICMgb3B0aW9uYWwsIGlzIFRleHQgcmljaHRleHQgb3Igbm90LiBkZWZhdWx0IDAKICAgICAgICBSZWNpcGllbnQgPT4geyVVc2VyfSwKICAgICAgICBEYXRhICAgICAgPT4gewogICAgICAgICAgICBDaGFuZ2VCdWlsZGVyID0+IHsKICAgICAgICAgICAgICAgIFVzZXJGaXJzdG5hbWUgPT4gJ1RvbScsCiAgICAgICAgICAgICAgICBVc2VyTGFzdG5hbWUgID0+ICdUZXN0ZXInLAogICAgICAgICAgICAgICAgVXNlckVtYWlsICAgICA9PiAndHRAb3Rycy5jb20nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgQ2hhbmdlICAgID0+ICRDaGFuZ2UsCiAgICAgICAgV29ya09yZGVyID0+ICRXb3JrT3JkZXIsCiAgICAgICAgTGluayAgICAgID0+ICRMaW5rLAogICAgICAgIExhbmd1YWdlICA9PiAkTGFuZ3VhZ2UsICAgICMgdXNlZCBmb3IgdHJhbnNsYXRpbmcgc3RhdGVzIGFuZCBzdWNoCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIF9Ob3RpZmljYXRpb25SZXBsYWNlTWFjcm9zIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhUeXBlIFRleHQgRGF0YSBVc2VySUQgQ2hhbmdlIFdvcmtPcmRlciBMaW5rIExhbmd1YWdlKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFRleHQgPSAkUGFyYW17VGV4dH07CgogICAgIyBkZXRlcm1pbmUgd2hhdCAibWFjcm8iIGRlbGltaXRlcnMgYXJlIHVzZWQKICAgIG15ICRTdGFydCA9ICc8JzsKICAgIG15ICRFbmQgICA9ICc+JzsKCiAgICAjIHdpdGggcmljaHRleHQgZW5hYmxlZCwgdGhlIGRlbGltaXRlcnMgY2hhbmdlCiAgICBpZiAoICRQYXJhbXtSaWNoVGV4dH0gKSB7CiAgICAgICAgJFN0YXJ0ID0gJyZsdDsnOwogICAgICAgICRFbmQgICA9ICcmZ3Q7JzsKICAgICAgICAkVGV4dCA9fiBzeyAoXG58XHIpIH17fXhtc2c7CiAgICB9CgogICAgIyB0cmFuc2xhdGUgQ2hhbmdlIGFuZCBXb3Jrb3JkZXIgdmFsdWVzLCB3aGVyZSBhcHByb3ByaWF0ZQogICAgIyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBsYW5ndWFnZSBvYmplY3QgbWFudWFsbHkgKHdpdGhvdXQgdGhlIG9iamVjdCBtYW5hZ2VyKSwKICAgICMgc28gd2UgY2FuIHRyYW5zbGF0ZSBpbnRvIHRoZSBsYW5ndWFnZSBvZiB0aGUgcmVjaXBpZW50CiAgICBteSAkTGFuZ3VhZ2VPYmplY3QgPSBLZXJuZWw6Okxhbmd1YWdlLT5uZXcoCiAgICAgICAgVXNlckxhbmd1YWdlID0+ICRQYXJhbXtMYW5ndWFnZX0sCiAgICApOwogICAgbXkgJUNoYW5nZURhdGEgPSAleyAkUGFyYW17Q2hhbmdlfSB9OwogICAgZm9yIG15ICRGaWVsZCAocXcoQ2hhbmdlU3RhdGUgQ2F0ZWdvcnkgUHJpb3JpdHkgSW1wYWN0KSkgewogICAgICAgICRDaGFuZ2VEYXRheyRGaWVsZH0gPSAkTGFuZ3VhZ2VPYmplY3QtPlRyYW5zbGF0ZSggJENoYW5nZURhdGF7JEZpZWxkfSApOwogICAgfQoKICAgIG15ICVXb3JrT3JkZXJEYXRhID0gJXsgJFBhcmFte1dvcmtPcmRlcn0gfTsKICAgIGZvciBteSAkRmllbGQgKHF3KFdvcmtPcmRlclN0YXRlIFdvcmtPcmRlclR5cGUpKSB7CiAgICAgICAgJFdvcmtPcmRlckRhdGF7JEZpZWxkfSA9ICRMYW5ndWFnZU9iamVjdC0+VHJhbnNsYXRlKCAkV29ya09yZGVyRGF0YXskRmllbGR9ICk7CiAgICB9CgogICAgIyByZXBsYWNlIGNvbmZpZyBvcHRpb25zCiAgICBteSAkVGFnID0gJFN0YXJ0IC4gJ09UUlNfQ09ORklHXyc7CiAgICAkVGV4dCA9fiBzeyAkVGFnICguKz8pICRFbmQgfXskS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJDEpfWVneDsKCiAgICAjIGNsZWFudXAKICAgICRUZXh0ID1+IHN7ICRUYWcgLis/ICRFbmQgfXstfWdpOwoKICAgICRUYWcgPSAkU3RhcnQgLiAnT1RSU19BZ2VudF8nOwogICAgbXkgJFRhZzIgPSAkU3RhcnQgLiAnT1RSU19DVVJSRU5UXyc7CiAgICBteSAlQ3VycmVudFVzZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5HZXRVc2VyRGF0YSggVXNlcklEID0+ICRQYXJhbXtVc2VySUR9ICk7CgogICAgIyBodG1sIHF1b3Rpbmcgb2YgY29udGVudAogICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewogICAgICAgIEtFWToKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlQ3VycmVudFVzZXIgKSB7CiAgICAgICAgICAgIG5leHQgS0VZIGlmICEkQ3VycmVudFVzZXJ7JEtleX07CiAgICAgICAgICAgICRDdXJyZW50VXNlcnskS2V5fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9IVE1MKAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICRDdXJyZW50VXNlcnskS2V5fSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyByZXBsYWNlIGl0CiAgICBLRVk6CiAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlQ3VycmVudFVzZXIgKSB7CiAgICAgICAgbmV4dCBLRVkgaWYgIWRlZmluZWQgJEN1cnJlbnRVc2VyeyRLZXl9OwogICAgICAgICRUZXh0ID1+IHN7ICRUYWcgJEtleSAkRW5kIH17JEN1cnJlbnRVc2VyeyRLZXl9fWd4bXNpOwogICAgICAgICRUZXh0ID1+IHN7ICRUYWcyICRLZXkgJEVuZCB9eyRDdXJyZW50VXNlcnskS2V5fX1neG1zaTsKICAgIH0KCiAgICAjIHJlcGxhY2Ugb3RoZXIgbmVlZGVkIHN0dWZmCiAgICAkVGV4dCA9fiBzeyAkU3RhcnQgT1RSU19GSVJTVF9OQU1FICRFbmQgfXskQ3VycmVudFVzZXJ7VXNlckZpcnN0bmFtZX19Z3htczsKICAgICRUZXh0ID1+IHN7ICRTdGFydCBPVFJTX0xBU1RfTkFNRSAkRW5kIH17JEN1cnJlbnRVc2Vye1VzZXJMYXN0bmFtZX19Z3htczsKCiAgICAjIGNsZWFudXAKICAgICRUZXh0ID1+IHN7ICRUYWcgLis/ICRFbmR9ey19eG1zZ2k7CiAgICAkVGV4dCA9fiBzeyAkVGFnMiAuKz8gJEVuZH17LX14bXNnaTsKCiAgICAjIGdldCBhbmQgcHJlcGFyZSByZWFsbmFtZQogICAgJFRhZyA9ICRTdGFydCAuICdPVFJTX0NVU1RPTUVSX1JFQUxOQU1FJzsKICAgICRUZXh0ID1+IHN7JFRhZyRFbmR9ey19ZzsKCiAgICAjIGdldCBjdXN0b21lciBkYXRhIGFuZCByZXBsYWNlIGl0IHdpdGggPE9UUlNfQ1VTVE9NRVJfREFUQV8uLi4KICAgICRUYWcgID0gJFN0YXJ0IC4gJ09UUlNfQ1VTVE9NRVJfJzsKICAgICRUYWcyID0gJFN0YXJ0IC4gJ09UUlNfQ1VTVE9NRVJfREFUQV8nOwoKICAgICMgY2xlYW51cCBhbGwgbm90IG5lZWRlZCA8T1RSU19DVVNUT01FUl9EQVRBXyB0YWdzCiAgICAkVGV4dCA9fiBzeyAkVGFnIC4rPyAkRW5kIH17LX14bXNnaTsKICAgICRUZXh0ID1+IHN7ICRUYWcyIC4rPyAkRW5kfXstfXhtc2dpOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgb2JqZWN0cwogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAjIHJlcGxhY2UgPE9UUlNfQ0hBTkdFXy4uLiB0YWdzCiAgICB7CiAgICAgICAgbXkgJFRhZyA9ICRTdGFydCAuICdPVFJTX0NIQU5HRV8nOwoKICAgICAgICAjIGh0bWwgcXVvdGluZyBvZiBjb250ZW50CiAgICAgICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewogICAgICAgICAgICBLRVk6CiAgICAgICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVDaGFuZ2VEYXRhICkgewogICAgICAgICAgICAgICAgbmV4dCBLRVkgaWYgISRDaGFuZ2VEYXRheyRLZXl9OwogICAgICAgICAgICAgICAgJENoYW5nZURhdGF7JEtleX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvSFRNTCgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJENoYW5nZURhdGF7JEtleX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCBjaGFuZ2UgYnVpbGRlciBhbmQgY2hhbmdlIG1hbmFnZXIKICAgICAgICBVU0VSOgogICAgICAgIGZvciBteSAkVXNlciAocXcoQ2hhbmdlQnVpbGRlciBDaGFuZ2VNYW5hZ2VyKSkgewoKICAgICAgICAgICAgbXkgJEF0dHJpYnV0ZSA9ICRVc2VyIC4gJ0lEJzsKCiAgICAgICAgICAgICMgb25seSBpZiBhbiBhZ2VudCBpcyBzZXQgZm9yIHRoaXMgYXR0cmlidXRlCiAgICAgICAgICAgIG5leHQgVVNFUiBpZiAhJENoYW5nZURhdGF7JEF0dHJpYnV0ZX07CgogICAgICAgICAgICAjIGdldCB1c2VyIGRhdGEKICAgICAgICAgICAgbXkgJVVzZXJEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJENoYW5nZURhdGF7JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICBWYWxpZCAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgVVNFUiBpZiAhJVVzZXJEYXRhOwoKICAgICAgICAgICAgIyBidWlsZCB1c2VyIGF0dHJpYnV0ZQogICAgICAgICAgICAkQ2hhbmdlRGF0YXskVXNlcn0gPSAiJFVzZXJEYXRhe1VzZXJGaXJzdG5hbWV9ICRVc2VyRGF0YXtVc2VyTGFzdG5hbWV9IjsKICAgICAgICB9CgogICAgICAgICMgRHJvcGRvd24sIENoZWNrYm94IGFuZCBNdWx0aXBsZVNlbGVjdCBEeW5hbWljRmllbGRzLCBjYW4gc3RvcmUgdmFsdWVzIChrZXlzKSB0aGF0IGFyZQogICAgICAgICMgZGlmZmVyZW50IGZyb20gdGhlIHRoZSB2YWx1ZXMgdG8gZGlzcGxheQogICAgICAgICMgPE9UUlNfQ0hBTkdFX0R5bmFtaWNGaWVsZF9OYW1lWD4gcmV0dXJucyB0aGUgc3RvcmVkIGtleQogICAgICAgICMgPE9UUlNfQ0hBTkdFX0R5bmFtaWNGaWVsZF9OYW1lWF9WYWx1ZT4gcmV0dXJucyB0aGUgZGlzcGxheSB2YWx1ZQoKICAgICAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkRHluYW1pY0ZpZWxkTGlzdCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgICAgIFZhbGlkICAgICAgPT4gMSwKICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiBbJ0lUU01DaGFuZ2UnXSwKICAgICAgICApIHx8IFtdOwoKICAgICAgICAjIGN5Y2xlIHRocm91Z2ggYWxsIGNoYW5nZSBEeW5hbWljIEZpZWxkcwogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewoKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgIyBnZXQgdGhlIGRpc3BsYXkgdmFsdWUgZm9yIGVhY2ggZHluYW1pYyBmaWVsZAogICAgICAgICAgICBteSAkRGlzcGxheVZhbHVlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlTG9va3VwKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBLZXkgICAgICAgICAgICAgICAgPT4gJENoYW5nZURhdGF7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgTGFuZ3VhZ2VPYmplY3QgICAgID0+ICRMYW5ndWFnZU9iamVjdCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSByZWFkYWJsZSB2YWx1ZSAodmFsdWUpIGZvciBlYWNoIGR5bmFtaWMgZmllbGQKICAgICAgICAgICAgbXkgJERpc3BsYXlWYWx1ZVN0cmcgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+UmVhZGFibGVWYWx1ZVJlbmRlcigKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICREaXNwbGF5VmFsdWUsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGZpbGwgdGhlIER5bmFtaWNGaWVsc0Rpc3BsYXlWYWx1ZXMKICAgICAgICAgICAgaWYgKCREaXNwbGF5VmFsdWVTdHJnKSB7CiAgICAgICAgICAgICAgICAkQ2hhbmdlRGF0YXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IC4gJ19WYWx1ZScgfSA9ICREaXNwbGF5VmFsdWVTdHJnLT57VmFsdWV9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCB0aGUgcmVhZGFibGUgdmFsdWUgKGtleSkgZm9yIGVhY2ggZHluYW1pYyBmaWVsZAogICAgICAgICAgICBteSAkVmFsdWVTdHJnID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlJlYWRhYmxlVmFsdWVSZW5kZXIoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkQ2hhbmdlRGF0YXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJlcGxhY2UgdGlja2V0IGNvbnRlbnQgd2l0aCB0aGUgdmFsdWUgZnJvbSBSZWFkYWJsZVZhbHVlUmVuZGVyIChpZiBhbnkpCiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJFZhbHVlU3RyZykgKSB7CiAgICAgICAgICAgICAgICAkQ2hhbmdlRGF0YXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkVmFsdWVTdHJnLT57VmFsdWV9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHJlcGxhY2UgaXQKICAgICAgICBLRVk6CiAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJUNoYW5nZURhdGEgKSB7CiAgICAgICAgICAgIG5leHQgS0VZIGlmICFkZWZpbmVkICRDaGFuZ2VEYXRheyRLZXl9OwogICAgICAgICAgICAkVGV4dCA9fiBzeyAkVGFnICRLZXkgJEVuZCB9eyRDaGFuZ2VEYXRheyRLZXl9fWd4bXNpOwogICAgICAgIH0KCiAgICAgICAgIyBjbGVhbnVwCiAgICAgICAgJFRleHQgPX4gc3sgJFRhZyAuKz8gJEVuZH17LX1neG1zaTsKICAgIH0KCiAgICAjIHJlcGxhY2UgPE9UUlNfV09SS09SREVSXy4uLiB0YWdzCiAgICB7CiAgICAgICAgbXkgJFRhZyA9ICRTdGFydCAuICdPVFJTX1dPUktPUkRFUl8nOwoKICAgICAgICAjIGh0bWwgcXVvdGluZyBvZiBjb250ZW50CiAgICAgICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewogICAgICAgICAgICBLRVk6CiAgICAgICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVXb3JrT3JkZXJEYXRhICkgewogICAgICAgICAgICAgICAgbmV4dCBLRVkgaWYgISRXb3JrT3JkZXJEYXRheyRLZXl9OwogICAgICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7JEtleX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvSFRNTCgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFdvcmtPcmRlckRhdGF7JEtleX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCB3b3Jrb3JkZXIgYWdlbnQKICAgICAgICBpZiAoICRXb3JrT3JkZXJEYXRhe1dvcmtPcmRlckFnZW50SUR9ICkgewoKICAgICAgICAgICAgIyBnZXQgdXNlciBkYXRhCiAgICAgICAgICAgIG15ICVVc2VyRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRXb3JrT3JkZXJEYXRhe1dvcmtPcmRlckFnZW50SUR9LAogICAgICAgICAgICAgICAgVmFsaWQgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGJ1aWxkIHdvcmtvcmRlciBhZ2VudCBhdHRyaWJ1dGUKICAgICAgICAgICAgaWYgKCVVc2VyRGF0YSkgewogICAgICAgICAgICAgICAgJFdvcmtPcmRlckRhdGF7V29ya09yZGVyQWdlbnR9ID0gIiRVc2VyRGF0YXtVc2VyRmlyc3RuYW1lfSAkVXNlckRhdGF7VXNlckxhc3RuYW1lfSI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgRHJvcGRvd24sIENoZWNrYm94IGFuZCBNdWx0aXBsZVNlbGVjdCBEeW5hbWljRmllbGRzLCBjYW4gc3RvcmUgdmFsdWVzIChrZXlzKSB0aGF0IGFyZQogICAgICAgICMgZGlmZmVyZW50IGZyb20gdGhlIHRoZSB2YWx1ZXMgdG8gZGlzcGxheQogICAgICAgICMgPE9UUlNfV09SS09SREVSX0R5bmFtaWNGaWVsZF9OYW1lWD4gcmV0dXJucyB0aGUgc3RvcmVkIGtleQogICAgICAgICMgPE9UUlNfV09SS09SREVSX0R5bmFtaWNGaWVsZF9OYW1lWF9WYWx1ZT4gcmV0dXJucyB0aGUgZGlzcGxheSB2YWx1ZQoKICAgICAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHdvcmtvcmRlciBvYmplY3QKICAgICAgICBteSAkRHluYW1pY0ZpZWxkTGlzdCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgICAgIFZhbGlkICAgICAgPT4gMSwKICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiBbJ0lUU01Xb3JrT3JkZXInXSwKICAgICAgICApIHx8IFtdOwoKICAgICAgICAjIGN5Y2xlIHRocm91Z2ggYWxsIHdvcmtvcmRlciBEeW5hbWljIEZpZWxkcwogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewoKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAgICAgIyBnZXQgdGhlIGRpc3BsYXkgdmFsdWUgZm9yIGVhY2ggZHluYW1pYyBmaWVsZAogICAgICAgICAgICBteSAkRGlzcGxheVZhbHVlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlTG9va3VwKAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBLZXkgICAgICAgICAgICAgICAgPT4gJFdvcmtPcmRlckRhdGF7ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9LAogICAgICAgICAgICAgICAgTGFuZ3VhZ2VPYmplY3QgICAgID0+ICRMYW5ndWFnZU9iamVjdCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSByZWFkYWJsZSB2YWx1ZSAodmFsdWUpIGZvciBlYWNoIGR5bmFtaWMgZmllbGQKICAgICAgICAgICAgbXkgJERpc3BsYXlWYWx1ZVN0cmcgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+UmVhZGFibGVWYWx1ZVJlbmRlcigKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICREaXNwbGF5VmFsdWUsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGZpbGwgdGhlIER5bmFtaWNGaWVsc0Rpc3BsYXlWYWx1ZXMKICAgICAgICAgICAgaWYgKCREaXNwbGF5VmFsdWVTdHJnKSB7CiAgICAgICAgICAgICAgICAkV29ya09yZGVyRGF0YXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IC4gJ19WYWx1ZScgfSA9ICREaXNwbGF5VmFsdWVTdHJnLT57VmFsdWV9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCB0aGUgcmVhZGFibGUgdmFsdWUgKGtleSkgZm9yIGVhY2ggZHluYW1pYyBmaWVsZAogICAgICAgICAgICBteSAkVmFsdWVTdHJnID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlJlYWRhYmxlVmFsdWVSZW5kZXIoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkV29ya09yZGVyRGF0YXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJlcGxhY2UgdGlja2V0IGNvbnRlbnQgd2l0aCB0aGUgdmFsdWUgZnJvbSBSZWFkYWJsZVZhbHVlUmVuZGVyIChpZiBhbnkpCiAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJFZhbHVlU3RyZykgKSB7CiAgICAgICAgICAgICAgICAkV29ya09yZGVyRGF0YXsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPSAkVmFsdWVTdHJnLT57VmFsdWV9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHJlcGxhY2UgaXQKICAgICAgICBLRVk6CiAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJVdvcmtPcmRlckRhdGEgKSB7CiAgICAgICAgICAgIG5leHQgS0VZIGlmICFkZWZpbmVkICRXb3JrT3JkZXJEYXRheyRLZXl9OwogICAgICAgICAgICAkVGV4dCA9fiBzeyAkVGFnICRLZXkgJEVuZCB9eyRXb3JrT3JkZXJEYXRheyRLZXl9fWd4bXNpOwogICAgICAgIH0KCiAgICAgICAgIyBjbGVhbnVwCiAgICAgICAgJFRleHQgPX4gc3sgJFRhZyAuKz8gJEVuZH17LX1neG1zaTsKICAgIH0KCiAgICAjIHJlcGxhY2UgPE9UUlNfQ09ORElUSU9OLi4uIHRhZ3MKICAgIHsKICAgICAgICBteSAkVGFnICA9ICRTdGFydCAuICdPVFJTX0NPTkRJVElPTl8nOwogICAgICAgIG15ICVEYXRhID0gJXsgJFBhcmFte0RhdGF9IH07CgogICAgICAgICMgaHRtbCBxdW90aW5nIG9mIGNvbnRlbnQKICAgICAgICBpZiAoICRQYXJhbXtSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgIEtFWToKICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJURhdGEgKSB7CiAgICAgICAgICAgICAgICBuZXh0IEtFWSBpZiAhJERhdGF7JEtleX07CiAgICAgICAgICAgICAgICAkRGF0YXskS2V5fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9IVE1MKAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkRGF0YXskS2V5fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgcmVwbGFjZSBpdAogICAgICAgIEtFWToKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlRGF0YSApIHsKICAgICAgICAgICAgbmV4dCBLRVkgaWYgIWRlZmluZWQgJERhdGF7JEtleX07CiAgICAgICAgICAgICRUZXh0ID1+IHN7ICRUYWcgJEtleSAkRW5kIH17JERhdGF7JEtleX19Z3htc2k7CiAgICAgICAgfQoKICAgICAgICAjIGNsZWFudXAKICAgICAgICAkVGV4dCA9fiBzeyAkVGFnIC4rPyAkRW5kfXstfWd4bXNpOwogICAgfQoKICAgICMgcmVwbGFjZSA8T1RSU19MSU5LXy4uLiB0YWdzCiAgICB7CiAgICAgICAgbXkgJFRhZyAgICAgID0gJFN0YXJ0IC4gJ09UUlNfTElOS18nOwogICAgICAgIG15ICVMaW5rRGF0YSA9ICV7ICRQYXJhbXtMaW5rfSB9OwoKICAgICAgICAjIGh0bWwgcXVvdGluZyBvZiBjb250ZW50CiAgICAgICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewogICAgICAgICAgICBLRVk6CiAgICAgICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVMaW5rRGF0YSApIHsKICAgICAgICAgICAgICAgIG5leHQgS0VZIGlmICEkTGlua0RhdGF7JEtleX07CiAgICAgICAgICAgICAgICAkTGlua0RhdGF7JEtleX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyktPlRvSFRNTCgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJExpbmtEYXRheyRLZXl9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyByZXBsYWNlIGl0CiAgICAgICAgS0VZOgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVMaW5rRGF0YSApIHsKICAgICAgICAgICAgbmV4dCBLRVkgaWYgIWRlZmluZWQgJExpbmtEYXRheyRLZXl9OwogICAgICAgICAgICAkVGV4dCA9fiBzeyAkVGFnICRLZXkgJEVuZCB9eyRMaW5rRGF0YXskS2V5fX1neG1zaTsKICAgICAgICB9CgogICAgICAgICMgY2xlYW51cAogICAgICAgICRUZXh0ID1+IHN7ICRUYWcgLis/ICRFbmR9ey19Z3htc2k7CiAgICB9CgogICAgIyByZXBsYWNlIGV4dGVuZGVkIDxPVFJTX0NIQU5HRV8uLi4gdGFncwogICAgbXkgJUluZm9IYXNoID0gJXsgJFBhcmFte0RhdGF9IH07CgogICAgZm9yIG15ICRPYmplY3QgKHF3KENoYW5nZUJ1aWxkZXIgQ2hhbmdlTWFuYWdlciBXb3JrT3JkZXJBZ2VudCkpIHsKICAgICAgICBteSAkVGFnID0gJFN0YXJ0IC4gdWMgJ09UUlNfJyAuICRPYmplY3QgLiAnXyc7CgogICAgICAgIGlmICggZXhpc3RzICRJbmZvSGFzaHskT2JqZWN0fSAmJiByZWYgJEluZm9IYXNoeyRPYmplY3R9IGVxICdIQVNIJyApIHsKCiAgICAgICAgICAgICMgaHRtbCBxdW90aW5nIG9mIGNvbnRlbnQKICAgICAgICAgICAgaWYgKCAkUGFyYW17UmljaFRleHR9ICkgewoKICAgICAgICAgICAgICAgIEtFWToKICAgICAgICAgICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRJbmZvSGFzaHskT2JqZWN0fSB9ICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgS0VZIGlmICEkSW5mb0hhc2h7JE9iamVjdH0tPnskS2V5fTsKICAgICAgICAgICAgICAgICAgICAkSW5mb0hhc2h7JE9iamVjdH0tPnskS2V5fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMnKS0+VG9IVE1MKAogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEluZm9IYXNoeyRPYmplY3R9LT57JEtleX0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyByZXBsYWNlIGl0CiAgICAgICAgICAgIEtFWToKICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXsgJEluZm9IYXNoeyRPYmplY3R9IH0gKSB7CiAgICAgICAgICAgICAgICBuZXh0IEtFWSBpZiAhZGVmaW5lZCAkSW5mb0hhc2h7JE9iamVjdH0tPnskS2V5fTsKICAgICAgICAgICAgICAgICRUZXh0ID1+IHN7ICRUYWcgJEtleSAkRW5kIH17JEluZm9IYXNoeyRPYmplY3R9LT57JEtleX19Z3htc2k7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2xlYW51cAogICAgICAgICRUZXh0ID1+IHN7ICRUYWcgLis/ICRFbmR9ey19Z3htc2k7CiAgICB9CgogICAgIyBnZXQgcmVjaXBpZW50IGRhdGEgYW5kIHJlcGxhY2UgaXQgd2l0aCA8T1RSU18uLi4KICAgICRUYWcgPSAkU3RhcnQgLiAnT1RSU18nOwogICAgaWYgKCAkUGFyYW17UmVjaXBpZW50fSApIHsKCiAgICAgICAgIyBodG1sIHF1b3Rpbmcgb2YgY29udGVudAogICAgICAgIGlmICggJFBhcmFte1JpY2hUZXh0fSApIHsKICAgICAgICAgICAgS0VZOgogICAgICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkUGFyYW17UmVjaXBpZW50fSB9ICkgewogICAgICAgICAgICAgICAgbmV4dCBLRVkgaWYgISRQYXJhbXtSZWNpcGllbnR9LT57JEtleX07CiAgICAgICAgICAgICAgICAkUGFyYW17UmVjaXBpZW50fS0+eyRLZXl9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5Ub0hUTUwoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRQYXJhbXtSZWNpcGllbnR9LT57JEtleX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHJlcGxhY2UgaXQKICAgICAgICBLRVk6CiAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXsgJFBhcmFte1JlY2lwaWVudH0gfSApIHsKICAgICAgICAgICAgbmV4dCBLRVkgaWYgIWRlZmluZWQgJFBhcmFte1JlY2lwaWVudH0tPnskS2V5fTsKICAgICAgICAgICAgbXkgJFZhbHVlID0gJFBhcmFte1JlY2lwaWVudH0tPnskS2V5fTsKICAgICAgICAgICAgJFRleHQgPX4gc3sgJFRhZyAkS2V5ICRFbmQgfXskVmFsdWV9Z3htc2k7CiAgICAgICAgfQogICAgfQoKICAgICMgY2xlYW51cAogICAgJFRleHQgPX4gc3sgJFRhZyAuKz8gJEVuZH17LX1neG1zaTsKCiAgICByZXR1cm4gJFRleHQ7Cn0KCjE7Cgo9ZW5kIEludGVybmFsOgoKPWJhY2sKCj1oZWFkMiBUaGUgZm9sbG93aW5nIHBsYWNlaG9sZGVycyBjYW4gYmUgdXNlZCBpbiBDaGFuZ2U6Onh4eCBub3RpZmljYXRpb25zCgo9aGVhZDMgQzxPVFJTX0NIQU5HRV94eHg+Cgp3aXRoIHRoZSBzdWJzZXF1ZW50IHZhbHVlcyBmb3IgeHh4OgoKICAgIENoYW5nZUlECiAgICAgICAgVGhlIElEIG9mIHRoZSBjaGFuZ2UKICAgIENoYW5nZU51bWJlcgogICAgICAgIFRoZSBudW1iZXIgb2YgdGhlIGNoYW5nZQogICAgQ2hhbmdlU3RhdGVJRAogICAgICAgIFRoZSBJRCBvZiB0aGUgY2hhbmdlIHN0YXRlCiAgICBDaGFuZ2VTdGF0ZQogICAgICAgIFRoZSBuYW1lIG9mIHRoZSBjaGFuZ2Ugc3RhdGUgKGUuZy4gcmVxdWVzdGVkLCBhcHByb3ZlZCkKICAgIENoYW5nZVN0YXRlU2lnbmFsCiAgICBDaGFuZ2VUaXRsZQogICAgICAgIFRoZSBjaGFuZ2UgdGl0bGUKICAgIERlc2NyaXB0aW9uCiAgICAgICAgVGhlICJvcmlnaW5hbCIgZGVzY3JpcHRpb24uIFBsZWFzZSBub3RlOiBJZiByaWNodGV4dCBmZWF0dXJlIGlzIGVuYWJsZWQsCiAgICAgICAgdGhpcyBjb250YWlucyBIVE1MIG1hcmt1cC4gU28gdGhpcyBjYW4gYmUgdXNlZCB0byBzZW5kIEhUTUwgbm90aWZpY2F0aW9ucy4KICAgIERlc2NyaXB0aW9uUGxhaW4KICAgICAgICBUaGlzIGlzIHRoZSBwbGFpbiBkZXNjcmlwdGlvbiB3aXRob3V0IGFueSBIVE1MIG1hcmt1cC4gVGhpcyBpcyBiZXR0ZXIgZm9yIHBsYWluIG5vdGlmaWNhdGlvbnMuCiAgICBKdXN0aWZpY2F0aW9uCiAgICAgICAgVGhlIHNhbWUgYXMgZm9yIERlc2NyaXB0aW9uIGFwcGxpZXMgaGVyZS4KICAgIEp1c3RpZmljYXRpb25QbGFpbgogICAgICAgIFNlZSBEZXNjcmlwdGlvblBsYWluLgogICAgQ2hhbmdlQnVpbGRlcklECiAgICAgICAgQ2hhbmdlIGJ1aWxkZXIgSUQKICAgIENoYW5nZU1hbmFnZXJJRAogICAgICAgIENoYW5nZSBtYW5hZ2VyIElECiAgICBDYXRlZ29yeUlECiAgICAgICAgSUQgb2YgY2hhbmdlcycgY2F0ZWdvcnkuCiAgICBDYXRlZ29yeQogICAgICAgIE5hbWUgb2YgY2hhbmdlcycgY2F0ZWdvcnkuCiAgICBJbXBhY3RJRAogICAgICAgIElEIG9mIGNoYW5nZXMnIGltcGFjdC4KICAgIEltcGFjdAogICAgICAgIE5hbWUgb2YgY2hhbmdlcycgaW1wYWN0LgogICAgUHJpb3JpdHlJRAogICAgICAgIElEIG9mIGNoYW5nZXMnIHByaW9yaXR5LgogICAgUHJpb3JpdHkKICAgICAgICBOYW1lIG9mIGNoYW5nZXMnIHByaW9yaXR5LgogICAgV29ya09yZGVyQ291bnQKICAgICAgICBOdW1iZXIgb2YgYWxsIHdvcmsgb3JkZXJzIHRoYXQgYmVsb25nIHRvIHRoZSBjaGFuZ2UuCiAgICBSZXF1ZXN0ZWRUaW1lCiAgICAgICAgVGhlIHRpbWUgdGhlIGN1c3RvbWVyIHdhbnQgdGhlIGNoYW5nZSB0byBiZSBmaW5pc2hlZC4KICAgIFBsYW5uZWRFZmZvcnQKICAgICAgICBTdW0gb2YgdGhlIHBsYW5uZWQgZWZmb3J0cyAoY2FsY3VsYXRlZCBmcm9tIHRoZSB3b3Jrb3JkZXJzKS4KICAgIEFjY291bnRlZFRpbWUKICAgICAgICBBY2NvdW50ZWQgdGltZSBvZiB0aGUgY2hhbmdlIChjYWxjdWxhdGVkIGZyb20gdGhlIHdvcmtvcmRlcnMpLgogICAgUGxhbm5lZFN0YXJ0VGltZQogICAgICAgIFBsYW5uZWQgc3RhcnQgdGltZSBvZiB0aGUgY2hhbmdlIChjYWxjdWxhdGVkIGZyb20gdGhlIHdvcmtvcmRlcnMpLgogICAgUGxhbm5lZEVuZFRpbWUKICAgICAgICBQbGFubmVkIGVuZCB0aW1lIG9mIHRoZSBjaGFuZ2UgKGNhbGN1bGF0ZWQgZnJvbSB0aGUgd29ya29yZGVycykuCiAgICBBY3R1YWxTdGFydFRpbWUKICAgICAgICBBY3R1YWwgc3RhcnQgdGltZSBvZiB0aGUgY2hhbmdlIChjYWxjdWxhdGVkIGZyb20gdGhlIHdvcmtvcmRlcnMpLgogICAgQWN0dWFsRW5kVGltZQogICAgICAgIEFjdHVhbCBlbmQgdGltZSBvZiB0aGUgY2hhbmdlIChjYWxjdWxhdGVkIGZyb20gdGhlIHdvcmtvcmRlcnMpLgoKPWhlYWQzIEM8T1RSU19DSEFOR0VCVUlMREVSX3h4eD4sIEM8T1RSU19DSEFOR0VNQU5BR0VSX3h4eD4sIEM8T1RSU19XT1JLT1JERVJBR0VOVF94eHg+Cgp3aXRoIHRoZSBzdWJzZXF1ZW50IHZhbHVlcyBmb3IgeHh4OgoKICAgIFVzZXJGaXJzdG5hbWUKICAgICAgICBGaXJzdG5hbWUgb2YgdGhlIHBlcnNvbi4KICAgIFVzZXJMYXN0bmFtZQogICAgICAgIExhc3RuYW1lIG9mIHRoZSBwZXJzb24uCiAgICBVc2VyRW1haWwKICAgICAgICBFbWFpbCBhZGRyZXNzIG9mIHRoZSBwZXJzb24uCgo9aGVhZDMgQzxPVFJTX1dPUktPUkRFUl94eHg+Cgp3aXRoIHRoZSBzdWJzZXF1ZW50IHZhbHVlcyBmb3IgeHh4OgoKICAgIFdvcmtPcmRlcklECiAgICAgICAgSUQgb2YgdGhlIHdvcmtvcmRlcgogICAgQ2hhbmdlSUQKICAgICAgICBJRCBvZiB0aGUgY2hhbmdlIHRoZSB3b3Jrb3JkZXIgYmVsb25ncyB0by4KICAgIFdvcmtPcmRlck51bWJlcgogICAgICAgIFdvcmtvcmRlciBudW1iZXIKICAgIFdvcmtPcmRlclRpdGxlCiAgICAgICAgVGl0bGUgb2YgdGhlIHdvcmtvcmRlcgogICAgSW5zdHJ1Y3Rpb24KICAgICAgICBTZWUgQ2hhbmdlIHBsYWNlaG9sZGVycyAtPiBEZXNjcmlwdGlvbgogICAgSW5zdHJ1Y3Rpb25QbGFpbgogICAgICAgIFNlZSBDaGFuZ2UgcGxhY2Vob2xkZXJzIC0+IERlc2NyaXB0aW9uUGxhaW4KICAgIFJlcG9ydAogICAgICAgIFNlZSBDaGFuZ2UgcGxhY2Vob2xkZXJzIC0+IERlc2NyaXB0aW9uCiAgICBSZXBvcnRQbGFpbgogICAgICAgIFNlZSBDaGFuZ2UgcGxhY2Vob2xkZXJzIC0+IERlc2NyaXB0aW9uUGxhaW4KICAgIFdvcmtPcmRlclN0YXRlSUQKICAgICAgICBJRCBvZiB0aGUgd29ya29yZGVyIHN0YXRlLgogICAgV29ya09yZGVyU3RhdGUKICAgICAgICBOYW1lIG9mIHRoZSB3b3Jrb3JkZXIgc3RhdGUuCiAgICBXb3JrT3JkZXJTdGF0ZVNpZ25hbAogICAgV29ya09yZGVyVHlwZUlECiAgICAgICAgSUQgb2YgdGhlIHdvcmtvcmRlciB0eXBlLgogICAgV29ya09yZGVyVHlwZQogICAgICAgIFRoZSBuYW1lIG9mIHRoZSB3b3JrIG9yZGVyIHR5cGUuCiAgICBXb3JrT3JkZXJBZ2VudElECiAgICAgICAgVGhlIElEIG9mIHRoZSB3b3Jrb3JkZXIgYWdlbnQuCiAgICBQbGFubmVkU3RhcnRUaW1lCiAgICAgICAgVGhlIHBsYW5uZWQgc3RhcnQgdGltZSBmb3IgdGhlIHdvcmtvcmRlci4KICAgIFBsYW5uZWRFbmRUaW1lCiAgICAgICAgVGhlIHBsYW5uZWQgZW5kIHRpbWUgZm9yIHRoZSB3b3Jrb3JkZXIuCiAgICBBY3R1YWxTdGFydFRpbWUKICAgICAgICBXaGVuIGRpZCB0aGUgd29ya29yZGVyIGFjdHVhbGx5IHN0YXJ0LgogICAgQWN0dWFsRW5kVGltZQogICAgICAgIFdoZW4gZGlkIHRoZSB3b3Jrb3JkZXIgYWN0dWFsbHkgZW5kLgogICAgQWNjb3VudGVkVGltZQogICAgICAgIFRoZSBzbyBmYXIgYWNjb3VudGVkIHRpbWUgZm9yIHRoZSBzaW5nbGUgd29ya29yZGVyCiAgICBQbGFubmVkRWZmb3J0CiAgICAgICAgVGhpcyBpcyB0aGUgZWZmb3J0IHBsYW5uZWQgZm9yIHRoZSBzaW5nbGUgd29ya29yZGVyLgoKPWhlYWQzIEM8T1RSU19MSU5LX3h4eD4KCndpdGggdGhlIHN1YnNlcXVlbnQgdmFsdWVzIGZvciB4eHg6CgogICAgT2JqZWN0CiAgICAgICAgb3RoZXIgb2JqZWN0IG9mIHRoZSBsaW5rCiAgICBTb3VyY2VPYmplY3QKICAgICAgICBvdGhlciBvYmplY3Qgb2YgdGhlIGxpbmssIHdoZW4gdGhlIG90aGVyIG9iamVjdCBpcyB0aGUgc291cmNlCiAgICBUYXJnZXRPYmplY3QKICAgICAgICBvdGhlciBvYmplY3Qgb2YgdGhlIGxpbmssIHdoZW4gdGhlIG90aGVyIG9iamVjdCBpc3QgdGhlIHRhcmdldAogICAgU3RhdGUKICAgICAgICBTdGF0ZSBvZiB0aGUgbGluawogICAgVHlwZQogICAgICAgIFR5cGUgb2YgdGhlIGxpbmsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpQZXJsOjpEdW1wZXIpCnVzZSBEYXRhOjpEdW1wZXI7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RXZlbnRIYW5kbGVyOwoKdXNlIHZhcnMgcXcoQElTQSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlIC0gdGVtcGxhdGUgbGliCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBmdW5jdGlvbnMgZm9yIHRlbXBsYXRlcyBpbiBJVFNNQ2hhbmdlTWFuYWdlbWVudC4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgc2V0IHRoZSBkZWJ1ZyBmbGFnCiAgICAkU2VsZi0+e0RlYnVnfSA9ICRQYXJhbXtEZWJ1Z30gfHwgMDsKCiAgICBASVNBID0gKAogICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RXZlbnRIYW5kbGVyJywKICAgICk7CgogICAgIyBpbml0IG9mIGV2ZW50IGhhbmRsZXIKICAgICRTZWxmLT5FdmVudEhhbmRsZXJJbml0KAogICAgICAgIENvbmZpZyA9PiAnSVRTTVRlbXBsYXRlOjpFdmVudE1vZHVsZScsCiAgICApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gVGVtcGxhdGVBZGQoKQoKQWRkIGEgbmV3IHRlbXBsYXRlLgoKICAgIG15ICRUZW1wbGF0ZUlEID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZUFkZCgKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGhlIHRlbXBsYXRlIG5hbWUnLAogICAgICAgIENvbnRlbnQgICAgICAgID0+ICdbeyBDaGFuZ2VBZGQgPT4geyAuLi4gfSB9XScsICAgIyBhIHNlcmlhbGl6ZWQgY2hhbmdlLCB3b3Jrb3JkZXIsIC4uLgogICAgICAgIENvbW1lbnQgICAgICAgID0+ICdBIGNvbW1lbnQnLCAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVGVtcGxhdGVUeXBlICAgPT4gJ0lUU01DaGFuZ2UnLCAgICAgICAgICAgICAgICAgICAjIGFsdGVybmF0aXZlbHk6IFRlbXBsYXRlVHlwZUlECiAgICAgICAgVGVtcGxhdGVUeXBlSUQgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFsdGVybmF0aXZlbHk6IFRlbXBsYXRlVHlwZQogICAgICAgIFZhbGlkSUQgICAgICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgVGVtcGxhdGVBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHRoYXQgbm90IGJvdGggVGVtcGxhdGVUeXBlIGFuZCBUZW1wbGF0ZVR5cGVJRCBhcmUgZ2l2ZW4KICAgIGlmICggJFBhcmFte1RlbXBsYXRlVHlwZX0gJiYgJFBhcmFte1RlbXBsYXRlVHlwZUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgZWl0aGVyIFRlbXBsYXRlVHlwZSBPUiBUZW1wbGF0ZVR5cGVJRCAtIG5vdCBib3RoIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyB3aGVuIHRoZSB0ZW1wbGF0ZSB0eXBlIGlzIGdpdmVuLCB0aGVuIGxvb2sgdXAgdGhlIElECiAgICBpZiAoICRQYXJhbXtUZW1wbGF0ZVR5cGV9ICkgewogICAgICAgICRQYXJhbXtUZW1wbGF0ZVR5cGVJRH0gPSAkU2VsZi0+VGVtcGxhdGVUeXBlTG9va3VwKAogICAgICAgICAgICBUZW1wbGF0ZVR5cGUgPT4gJFBhcmFte1RlbXBsYXRlVHlwZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ29udGVudCBOYW1lIFRlbXBsYXRlVHlwZUlEIFZhbGlkSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIHdoZXRoZXIgYSB0ZW1wbGF0ZSB3aXRoIHRoaXMgbmFtZSBhbmQgdHlwZSBhbHJlYWR5IGV4aXN0cwogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gY2hhbmdlX3RlbXBsYXRlIFdIRVJFIG5hbWUgPSA/IEFORCB0eXBlX2lkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte05hbWV9LCBcJFBhcmFte1RlbXBsYXRlVHlwZUlEfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFRlbXBsYXRlSUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRUZW1wbGF0ZUlEID0gJFJvd1swXTsKICAgIH0KCiAgICAjIGEgdGVtcGxhdGUgd2l0aCB0aGlzIG5hbWUgZXhpc3RzIGFscmVhZHkKICAgIGlmICgkVGVtcGxhdGVJRCkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQSB0ZW1wbGF0ZSB3aXRoIHRoZSBuYW1lICckUGFyYW17TmFtZX0nIGFuZCB0aGUgdHlwZSAnJFBhcmFte1RlbXBsYXRlVHlwZUlEfScgYWxyZWFkeSBleGlzdHMhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHRyaWdnZXIgVGVtcGxhdGVBZGRQcmUtRXZlbnQKICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ1RlbXBsYXRlQWRkUHJlJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBhZGQgbmV3IHRlbXBsYXRlIHRvIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGNoYW5nZV90ZW1wbGF0ZSAnCiAgICAgICAgICAgIC4gJyhuYW1lLCBjb21tZW50cywgY29udGVudCwgdHlwZV9pZCwgdmFsaWRfaWQsICcKICAgICAgICAgICAgLiAnY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgJwogICAgICAgICAgICAuICdWQUxVRVMgKD8sID8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LCBcJFBhcmFte0NvbW1lbnR9LCBcJFBhcmFte0NvbnRlbnR9LCBcJFBhcmFte1RlbXBsYXRlVHlwZUlEfSwKICAgICAgICAgICAgXCRQYXJhbXtWYWxpZElEfSwgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgXSwKICAgICk7CgogICAgIyBwcmVwYXJlIFNRTCBzdGF0ZW1lbnQKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIGNoYW5nZV90ZW1wbGF0ZSBXSEVSRSBuYW1lID0gPyBBTkQgdHlwZV9pZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtOYW1lfSwgXCRQYXJhbXtUZW1wbGF0ZVR5cGVJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFRlbXBsYXRlSUQgPSAkUm93WzBdOwogICAgfQoKICAgICMgY2hlY2sgaWYgdGVtcGxhdGUgY291bGQgYmUgYWRkZWQKICAgIGlmICggISRUZW1wbGF0ZUlEICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnVGVtcGxhdGVBZGQoKSBmYWlsZWQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHRyaWdnZXIgVGVtcGxhdGVBZGRQb3N0LUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdUZW1wbGF0ZUFkZFBvc3QnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIFRPRE86IGFsbCBhdHRhY2htZW50cyBpbiB0aGUgdGVtcGxhdGUgc2hvdWxkIGJlIGNvcGllZAogICAgIyBpbiB0aGUgdmlydHVhbCBmcy4gT3RoZXJ3aXNlIGl0IGNvdWxkIGhhcHBlbiB0aGF0IGFuCiAgICAjIGF0dGFjaG1lbnQgaXMgZGVsZXRlZCBhZnRlciB0ZW1wbGF0ZSBjcmVhdGlvbiBhbmQgdGhlcmVmb3JlCiAgICAjIG5vIGxvbmdlciBhdmFpbGFibGUuCgogICAgcmV0dXJuICRUZW1wbGF0ZUlEOwp9Cgo9aXRlbSBUZW1wbGF0ZVVwZGF0ZSgpCgpVcGRhdGUgYSB0ZW1wbGF0ZS4KCiAgICBteSAkU3VjY2VzcyA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVVcGRhdGUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAxMjM0LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1RoZSB0ZW1wbGF0ZSBuYW1lJywgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQ29tbWVudCAgICA9PiAnQSBjb21tZW50JywgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDb250ZW50ICA9PiAnW3sgQ2hhbmdlQWRkID0+IHsgLi4uIH0gfV0nLCAgICMgKG9wdGlvbmFsKSBhIHNlcmlhbGl6ZWQgY2hhbmdlLCB3b3Jrb3JkZXIsIC4uLgogICAgICAgIFZhbGlkSUQgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVHlwZUlEICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFRlbXBsYXRlVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRyaWdnZXIgVGVtcGxhdGVVcGRhdGVQcmUtRXZlbnQKICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ1RlbXBsYXRlVXBkYXRlUHJlJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgdGVtcGxhdGUgZGF0YQogICAgbXkgJFRlbXBsYXRlRGF0YSA9ICRTZWxmLT5UZW1wbGF0ZUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIG1hcCB1cGRhdGUgYXR0cmlidXRlcyB0byBjb2x1bW4gbmFtZXMKICAgIG15ICVBdHRyaWJ1dGUgPSAoCiAgICAgICAgTmFtZSAgICA9PiAnbmFtZScsCiAgICAgICAgQ29tbWVudCA9PiAnY29tbWVudHMnLAogICAgICAgIENvbnRlbnQgPT4gJ2NvbnRlbnQnLAogICAgICAgIFZhbGlkSUQgPT4gJ3ZhbGlkX2lkJywKICAgICAgICBUeXBlSUQgID0+ICd0eXBlX2lkJywKICAgICk7CgogICAgIyBidWlsZCBTUUwgdG8gdXBkYXRlIHRlbXBsYXRlCiAgICBteSAkU1FMID0gJ1VQREFURSBjaGFuZ2VfdGVtcGxhdGUgU0VUICc7CiAgICBteSBAQmluZDsKCiAgICBBVFRSSUJVVEU6CiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAlQXR0cmlidXRlICkgewoKICAgICAgICAjIHByZXNlcnZlIHRoZSBvbGQgdmFsdWUsIHdoZW4gdGhlIGNvbHVtbiBpc24ndCBpbiBmdW5jdGlvbiBwYXJhbWV0ZXJzCiAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgIWV4aXN0cyAkUGFyYW17JEF0dHJpYnV0ZX07CgogICAgICAgICMgcGFyYW0gY2hlY2tpbmcgaGFzIGFscmVhZHkgYmVlbiBkb25lLCBzbyB0aGlzIGlzIHNhZmUKICAgICAgICAkU1FMIC49ICIkQXR0cmlidXRleyRBdHRyaWJ1dGV9ID0gPywgIjsKICAgICAgICBwdXNoIEBCaW5kLCBcJFBhcmFteyRBdHRyaWJ1dGV9OwogICAgfQoKICAgICMgYWRkIGNoYW5nZSB0aW1lIGFuZCBjaGFuZ2UgdXNlcgogICAgJFNRTCAuPSAnY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPyAnOwogICAgcHVzaCBAQmluZCwgXCRQYXJhbXtVc2VySUR9OwoKICAgICMgc2V0IG1hdGNoaW5nIG9mIFNRTCBzdGF0ZW1lbnQKICAgICRTUUwgLj0gJ1dIRVJFIGlkID0gPyc7CiAgICBwdXNoIEBCaW5kLCBcJFBhcmFte1RlbXBsYXRlSUR9OwoKICAgICMgdXBkYXRlIHRlbXBsYXRlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgID0+ICRTUUwsCiAgICAgICAgQmluZCA9PiBcQEJpbmQsCiAgICApOwoKICAgICMgdHJpZ2dlciBUZW1wbGF0ZVVwZGF0ZVBvc3QtRXZlbnQKICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ1RlbXBsYXRlVXBkYXRlUG9zdCcsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICBPbGRUZW1wbGF0ZURhdGEgPT4gJFRlbXBsYXRlRGF0YSwKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIFRPRE86IGFsbCBhdHRhY2htZW50cyBpbiB0aGUgdGVtcGxhdGUgc2hvdWxkIGJlIGNvcGllZAogICAgIyBpbiB0aGUgdmlydHVhbCBmcy4gT3RoZXJ3aXNlIGl0IGNvdWxkIGhhcHBlbiB0aGF0IGFuCiAgICAjIGF0dGFjaG1lbnQgaXMgZGVsZXRlZCBhZnRlciB0ZW1wbGF0ZSBjcmVhdGlvbiBhbmQgdGhlcmVmb3JlCiAgICAjIG5vIGxvbmdlciBhdmFpbGFibGUuCgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIFRlbXBsYXRlR2V0KCkKClJldHVybnMgYSBoYXNoIHJlZmVyZW5jZSBvZiB0aGUgdGVtcGxhdGUgZGF0YSBmb3IgYSBnaXZlbiBUZW1wbGF0ZUlELgoKICAgIG15ICRUZW1wbGF0ZURhdGEgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKVGhlIHJldHVybmVkIGhhc2ggcmVmZXJlbmNlIGNvbnRhaW5zIGZvbGxvd2luZyBlbGVtZW50czoKCiAgICAkVGVtcGxhdGVEYXRhe1RlbXBsYXRlSUR9CiAgICAkVGVtcGxhdGVEYXRhe05hbWV9CiAgICAkVGVtcGxhdGVEYXRhe0NvbW1lbnR9CiAgICAkVGVtcGxhdGVEYXRhe0NvbnRlbnR9CiAgICAkVGVtcGxhdGVEYXRhe1R5cGVJRH0KICAgICRUZW1wbGF0ZURhdGF7VHlwZX0KICAgICRUZW1wbGF0ZURhdGF7VmFsaWRJRH0KICAgICRUZW1wbGF0ZURhdGF7Q3JlYXRlVGltZX0KICAgICRUZW1wbGF0ZURhdGF7Q3JlYXRlQnl9CiAgICAkVGVtcGxhdGVEYXRhe0NoYW5nZVRpbWV9CiAgICAkVGVtcGxhdGVEYXRhe0NoYW5nZUJ5fQoKPWN1dAoKc3ViIFRlbXBsYXRlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHByZXBhcmUgU1FMIHN0YXRlbWVudAogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBjdC5pZCwgY3QubmFtZSwgY29tbWVudHMsIGNvbnRlbnQsIHR5cGVfaWQsIGN0dC5uYW1lLCAnCiAgICAgICAgICAgIC4gJ2N0LnZhbGlkX2lkLCBjdC5jcmVhdGVfdGltZSwgY3QuY3JlYXRlX2J5LCBjdC5jaGFuZ2VfdGltZSwgY3QuY2hhbmdlX2J5ICcKICAgICAgICAgICAgLiAnRlJPTSBjaGFuZ2VfdGVtcGxhdGUgY3QsIGNoYW5nZV90ZW1wbGF0ZV90eXBlIGN0dCAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGN0LnR5cGVfaWQgPSBjdHQuaWQgQU5EIGN0LmlkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1RlbXBsYXRlSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlVGVtcGxhdGVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkVGVtcGxhdGVEYXRhe1RlbXBsYXRlSUR9ID0gJFJvd1swXTsKICAgICAgICAkVGVtcGxhdGVEYXRhe05hbWV9ICAgICAgID0gJFJvd1sxXTsKICAgICAgICAkVGVtcGxhdGVEYXRhe0NvbW1lbnR9ICAgID0gJFJvd1syXTsKICAgICAgICAkVGVtcGxhdGVEYXRhe0NvbnRlbnR9ICAgID0gJFJvd1szXTsKICAgICAgICAkVGVtcGxhdGVEYXRhe1R5cGVJRH0gICAgID0gJFJvd1s0XTsKICAgICAgICAkVGVtcGxhdGVEYXRhe1R5cGV9ICAgICAgID0gJFJvd1s1XTsKICAgICAgICAkVGVtcGxhdGVEYXRhe1ZhbGlkSUR9ICAgID0gJFJvd1s2XTsKICAgICAgICAkVGVtcGxhdGVEYXRhe0NyZWF0ZVRpbWV9ID0gJFJvd1s3XTsKICAgICAgICAkVGVtcGxhdGVEYXRhe0NyZWF0ZUJ5fSAgID0gJFJvd1s4XTsKICAgICAgICAkVGVtcGxhdGVEYXRhe0NoYW5nZVRpbWV9ID0gJFJvd1s5XTsKICAgICAgICAkVGVtcGxhdGVEYXRhe0NoYW5nZUJ5fSAgID0gJFJvd1sxMF07CiAgICB9CgogICAgIyBjaGVjayBlcnJvcgogICAgaWYgKCAhJVRlbXBsYXRlRGF0YSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRlbXBsYXRlSUQgJFBhcmFte1RlbXBsYXRlSUR9IGRvZXMgbm90IGV4aXN0ISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjbGVhbnVwIHRpbWUgc3RhbXBzIChzb21lIGRhdGFiYXNlcyBhcmUgdXNpbmcgZS4gZy4gMjAwOC0wMi0yNSAyMjowMzowMC4wMDAwMDApCiAgICBUSU1FRklFTEQ6CiAgICBmb3IgbXkgJFRpbWVmaWVsZCAoICdDcmVhdGVUaW1lJywgJ0NoYW5nZVRpbWUnLCApIHsKICAgICAgICBuZXh0IFRJTUVGSUVMRCBpZiAhJFRlbXBsYXRlRGF0YXskVGltZWZpZWxkfTsKICAgICAgICAkVGVtcGxhdGVEYXRheyRUaW1lZmllbGR9CiAgICAgICAgICAgID1+IHN7IFxBICggXGRcZFxkXGQgLSBcZFxkIC0gXGRcZCBccyBcZFxkOlxkXGQ6XGRcZCApIFwuIC4rPyBceiB9eyQxfXhtczsKICAgIH0KCiAgICByZXR1cm4gXCVUZW1wbGF0ZURhdGE7Cn0KCj1pdGVtIFRlbXBsYXRlTGlzdCgpCgpyZXR1cm4gYSBoYXNocmVmIG9mIGFsbCB0ZW1wbGF0ZXMKCiAgICBteSAkVGVtcGxhdGVzID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZUxpc3QoCiAgICAgICAgVmFsaWQgICAgICAgICAgPT4gMCwgICAgICAgICAgICAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMSAoMHwxKQogICAgICAgIENvbW1lbnRMZW5ndGggID0+IDE1LCAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDAKICAgICAgICBUZW1wbGF0ZVR5cGUgICA9PiAnSVRTTUNoYW5nZScgICAjIChvcHRpb25hbCkgb3IgVGVtcGxhdGVUeXBlCiAgICAgICAgVGVtcGxhdGVUeXBlSUQgPT4gMSwgICAgICAgICAgICAgIyAob3B0aW9uYWwpIG9yIFRlbXBsYXRlVHlwZUlECiAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICk7CgpyZXR1cm5zCgogICAgJFRlbXBsYXRlcyA9IHsKICAgICAgICAxID0+ICdteSB0ZW1wbGF0ZScsCiAgICAgICAgMyA9PiAneW91ciB0ZW1wbGF0ZSBuYW1lJywKICAgIH07CgpJZiBwYXJhbWV0ZXIgQzxDb21tZW50TGVuZ3RoPiBpcyBwYXNzZWQsIGFuIGV4Y2VycHQgKG9mIHRoZSBwYXNzZWQgbGVuZ3RoKQpvZiB0aGUgY29tbWVudCBpcyBhcHBlbmRlZCB0byB0aGUgdGVtcGxhdGUgbmFtZS4KSWYgdGhlIHBhcmFtZXRlciBDPFRlbXBsYXRlVHlwZT4gb3IgQzxUZW1wbGF0ZVR5cGVJRD4gaXMgcGFzc2VkLCB0aGVuIHRoZQpsaXN0IG9mIHRlbXBsYXRlcyBpcyByZXN0cmljdGVkIHRvIHRoZSBnaXZlbiB0eXBlLgoKPWN1dAoKc3ViIFRlbXBsYXRlTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgdGhhdCBub3QgYm90aCBUZW1wbGF0ZVR5cGUgYW5kIFRlbXBsYXRlVHlwZUlEIGFyZSBnaXZlbgogICAgaWYgKCAkUGFyYW17VGVtcGxhdGVUeXBlfSAmJiAkUGFyYW17VGVtcGxhdGVUeXBlSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBlaXRoZXIgVGVtcGxhdGVUeXBlIE9SIFRlbXBsYXRlVHlwZUlEIC0gbm90IGJvdGghJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHdoZW4gdGhlIHRlbXBsYXRlIHR5cGUgaXMgZ2l2ZW4sIHRoZW4gbG9vayB1cCB0aGUgSUQKICAgIGlmICggJFBhcmFte1RlbXBsYXRlVHlwZX0gKSB7CiAgICAgICAgJFBhcmFte1RlbXBsYXRlVHlwZUlEfSA9ICRTZWxmLT5UZW1wbGF0ZVR5cGVMb29rdXAoCiAgICAgICAgICAgIFRlbXBsYXRlVHlwZSA9PiAkUGFyYW17VGVtcGxhdGVUeXBlfSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgdmFsaWQgcGFyYW0KICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkUGFyYW17VmFsaWR9ID0gMTsKICAgIH0KCiAgICAjIGRlZmluZSBTUUwgc3RhdGVtZW50CiAgICBteSAkU1FMID0gJ1NFTEVDVCBpZCwgbmFtZSwgY29tbWVudHMgRlJPTSBjaGFuZ2VfdGVtcGxhdGUgJzsKICAgIG15IEBTUUxXaGVyZTsgICAgIyBhc3NlbWJsZSB0aGUgY29uZGl0aW9ucyB1c2VkIGluIHRoZSBXSEVSRSBjbGF1c2UKICAgIG15IEBTUUxCaW5kOwoKICAgICMgcmVzdHJpY3QgYnkgdGVtcGxhdGUgdHlwZQogICAgaWYgKCAkUGFyYW17VGVtcGxhdGVUeXBlSUR9ICkgewogICAgICAgIHB1c2ggQFNRTFdoZXJlLCAidHlwZV9pZCA9ID8iOwogICAgICAgIHB1c2ggQFNRTEJpbmQsICBcJFBhcmFte1RlbXBsYXRlVHlwZUlEfTsKICAgIH0KCiAgICAjIGdldCBvbmx5IHZhbGlkIHRlbXBsYXRlIGlkcwogICAgaWYgKCAkUGFyYW17VmFsaWR9ICkgewoKICAgICAgICBteSBAVmFsaWRJRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKTsKICAgICAgICBteSAkVmFsaWRJRFN0cmluZyA9IGpvaW4gJywgJywgQFZhbGlkSURzOwoKICAgICAgICBwdXNoIEBTUUxXaGVyZSwgInZhbGlkX2lkIElOICggJFZhbGlkSURTdHJpbmcgKSI7CiAgICB9CgogICAgIyBhcHBlbmQgdGhlIFdIRVJFLWNsYXVzZQogICAgaWYgKEBTUUxXaGVyZSkgewogICAgICAgICRTUUwgLj0gJ1dIRVJFICc7CiAgICAgICAgJFNRTCAuPSBqb2luICcgQU5EICcsIG1hcCB7IiggJF8gKSJ9IEBTUUxXaGVyZTsKICAgICAgICAkU1FMIC49ICcgJzsKICAgIH0KCiAgICAjIHByZXBhcmUgU1FMIHN0YXRlbWVudAogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICRTUUwsCiAgICAgICAgQmluZCA9PiBcQFNRTEJpbmQsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJVRlbXBsYXRlczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFRlbXBsYXRlc3sgJFJvd1swXSB9ID0gWyAkUm93WzFdLCAkUm93WzJdIF07CiAgICB9CgogICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJVRlbXBsYXRlcyApIHsKICAgICAgICBteSAoICROYW1lLCAkQ29tbWVudCApID0gQHsgJFRlbXBsYXRlc3skS2V5fSB9OwoKICAgICAgICBteSAkQ29tbWVudEFwcGVuZCA9ICcnOwogICAgICAgIGlmICggJFBhcmFte0NvbW1lbnRMZW5ndGh9ICYmICRDb21tZW50ICkgewogICAgICAgICAgICBteSAkTGVuZ3RoID0gJFBhcmFte0NvbW1lbnRMZW5ndGh9ID4gbGVuZ3RoICRDb21tZW50CiAgICAgICAgICAgICAgICA/IGxlbmd0aCAkQ29tbWVudAogICAgICAgICAgICAgICAgOiAkUGFyYW17Q29tbWVudExlbmd0aH07CiAgICAgICAgICAgIG15ICRFbGxpcHNpcyA9ICRQYXJhbXtDb21tZW50TGVuZ3RofSA+IGxlbmd0aCAkQ29tbWVudAogICAgICAgICAgICAgICAgPyAnJwogICAgICAgICAgICAgICAgOiAnLi4uJzsKICAgICAgICAgICAgJENvbW1lbnQgPSBzdWJzdHIgJENvbW1lbnQsIDAsICRMZW5ndGg7CiAgICAgICAgICAgICRDb21tZW50QXBwZW5kID0gJyAoJyAuICRDb21tZW50IC4gJEVsbGlwc2lzIC4gJyknOwogICAgICAgIH0KCiAgICAgICAgJFRlbXBsYXRlc3skS2V5fSA9ICROYW1lIC4gJENvbW1lbnRBcHBlbmQ7CiAgICB9CgogICAgcmV0dXJuIFwlVGVtcGxhdGVzOwp9Cgo9aXRlbSBUZW1wbGF0ZVNlYXJjaCgpCgpSZXR1cm5zIGVpdGhlciBhIGxpc3QsIGFzIGFuIGFycmF5cmVmLCBvciBhIGNvdW50IG9mIGZvdW5kIHRlbXBsYXRlIGlkcy4KVGhlIGNvdW50IG9mIHJlc3VsdHMgaXMgcmV0dXJuZWQgd2hlbiB0aGUgcGFyYW1ldGVyIEM8UmVzdWx0ID0+ICdDT1VOVCc+IGlzIHBhc3NlZC4KClRoZSBzZWFyY2ggY3JpdGVyaWEgYXJlIGxvZ2ljYWxseSBBTkQgY29ubmVjdGVkLgpXaGVuIGEgbGlzdCBpcyBwYXNzZWQgYXMgY3JpdGVyaXVtLCB0aGUgaW5kaXZpZHVhbCBtZW1iZXJzIGFyZSBPUiBjb25uZWN0ZWQuCldoZW4gYW4gdW5kZWYgb3IgYSByZWZlcmVuY2UgdG8gYW4gZW1wdHkgYXJyYXkgaXMgcGFzc2VkLCB0aGVuIHRoZSBzZWFyY2ggY3JpdGVyaXVtCmlzIGlnbm9yZWQuCgogICAgbXkgJFRlbXBsYXRlSURzUmVmID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZVNlYXJjaCgKCiAgICAgICAgTmFtZSAgICAgICAgICAgICAgPT4gJ1NhbXBsZSB0ZW1wbGF0ZScsICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQ29tbWVudCAgICAgICAgICAgPT4gJ2p1c3QgYW4gZXhhbXBsZScsICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgICAgIFRlbXBsYXRlVHlwZUlEcyAgID0+IFsgMTEsIDEyIF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFRlbXBsYXRlVHlwZXMgICAgID0+IFsgJ0lUU01DaGFuZ2UnLCAnQ0FCJyBdLCAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICBDcmVhdGVCeSAgICAgICAgICA9PiBbIDUsIDIsIDMgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBDaGFuZ2VCeSAgICAgICAgICA9PiBbIDMsIDIsIDEgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgIyB0ZW1wbGF0ZXMgd2l0aCBjcmVhdGVkIHRpbWUgYWZ0ZXIgLi4uCiAgICAgICAgQ3JlYXRlVGltZU5ld2VyRGF0ZSAgICAgICA9PiAnMjAwNi0wMS0wOSAwMDowMDowMScsICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyB0ZW1wbGF0ZXMgd2l0aCBjcmVhdGVkIHRpbWUgYmVmb3JlIHRoZW4gLi4uLgogICAgICAgIENyZWF0ZVRpbWVPbGRlckRhdGUgICAgICAgPT4gJzIwMDYtMDEtMTkgMjM6NTk6NTknLCAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICAjIHRlbXBsYXRlcyB3aXRoIGNoYW5nZWQgdGltZSBhZnRlciAuLi4KICAgICAgICBDaGFuZ2VUaW1lTmV3ZXJEYXRlICAgICAgID0+ICcyMDA2LTAxLTA5IDAwOjAwOjAxJywgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjIHRlbXBsYXRlcyB3aXRoIGNoYW5nZWQgdGltZSBiZWZvcmUgdGhlbiAuLi4uCiAgICAgICAgQ2hhbmdlVGltZU9sZGVyRGF0ZSAgICAgICA9PiAnMjAwNi0wMS0xOSAyMzo1OTo1OScsICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgICAgIE9yZGVyQnkgPT4gWyAnVGVtcGxhdGVJRCcsICdOYW1lJyBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgaWdub3JlZCB3aGVuIHRoZSByZXN1bHQgdHlwZSBpcyAnQ09VTlQnCiAgICAgICAgIyBkZWZhdWx0OiBbICdUZW1wbGF0ZUlEJyBdLAogICAgICAgICMgKFRlbXBsYXRlSUQsIE5hbWUsIENvbW1lbnQsIFRlbXBsYXRlVHlwZUlELAogICAgICAgICMgQ3JlYXRlVGltZSwgQ3JlYXRlQnksIENoYW5nZVRpbWUsIENoYW5nZUJ5KQoKICAgICAgICAjIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIE9yZGVyQnk6CiAgICAgICAgIyBUaGUgT3JkZXJCeURpcmVjdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGZvciBlYWNoIE9yZGVyQnkgYXR0cmlidXRlLgogICAgICAgICMgVGhlIHBhaXJpbmcgaXMgbWFkZSBieSB0aGUgYXJyYXkgaW5kaWNlcy4KCiAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbICdEb3duJywgJ1VwJyBdLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBpZ25vcmVkIHdoZW4gdGhlIHJlc3VsdCB0eXBlIGlzICdDT1VOVCcKICAgICAgICAjIGRlZmF1bHQ6IFsgJ0Rvd24nIF0KICAgICAgICAjIChEb3duIHwgVXApCgogICAgICAgIFVzaW5nV2lsZGNhcmRzID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgKDAgfCAxKSBkZWZhdWx0IDEKCiAgICAgICAgUmVzdWx0ID0+ICdBUlJBWScgfHwgJ0NPVU5UJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBkZWZhdWx0OiBBUlJBWSwgcmV0dXJucyBhbiBhcnJheSBvZiB0ZW1wbGF0ZSBpZHMKICAgICAgICAjIENPVU5UIHJldHVybnMgYSBzY2FsYXIgd2l0aCB0aGUgbnVtYmVyIG9mIGZvdW5kIHRlbXBsYXRlcwoKICAgICAgICBMaW1pdCA9PiAxMDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjIGlnbm9yZWQgd2hlbiB0aGUgcmVzdWx0IHR5cGUgaXMgJ0NPVU5UJwoKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgVGVtcGxhdGVTZWFyY2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgdmVyaWZ5IHRoYXQgYWxsIHBhc3NlZCBhcnJheSBwYXJhbWV0ZXJzIGNvbnRhaW4gYW4gYXJyYXlyZWYKICAgIEFSR1VNRU5UOgogICAgZm9yIG15ICRBcmd1bWVudCAoCiAgICAgICAgcXcoCiAgICAgICAgT3JkZXJCeQogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24KICAgICAgICBUZW1wbGF0ZVR5cGVzCiAgICAgICAgVGVtcGxhdGVUeXBlSURzCiAgICAgICAgQ3JlYXRlQnkKICAgICAgICBDaGFuZ2VCeQogICAgICAgICkKICAgICAgICApCiAgICB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gfHw9IFtdOwoKICAgICAgICAgICAgbmV4dCBBUkdVTUVOVDsKICAgICAgICB9CgogICAgICAgIGlmICggcmVmICRQYXJhbXskQXJndW1lbnR9IG5lICdBUlJBWScgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkQXJndW1lbnQgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSBAU1FMV2hlcmU7ICAgICMgYXNzZW1ibGUgdGhlIGNvbmRpdGlvbnMgdXNlZCBpbiB0aGUgV0hFUkUgY2xhdXNlCgogICAgIyBkZWZpbmUgb3JkZXIgdGFibGUKICAgIG15ICVPcmRlckJ5VGFibGUgPSAoCiAgICAgICAgVGVtcGxhdGVJRCAgICAgPT4gJ3QuaWQnLAogICAgICAgIE5hbWUgICAgICAgICAgID0+ICd0Lm5hbWUnLAogICAgICAgIENvbW1lbnQgICAgICAgID0+ICd0LmNvbW1lbnRzJywKICAgICAgICBUZW1wbGF0ZVR5cGVJRCA9PiAndC50eXBlX2lkJywKICAgICAgICBWYWxpZElEICAgICAgICA9PiAndC52YWxpZF9pZCcsCiAgICAgICAgQ3JlYXRlVGltZSAgICAgPT4gJ3QuY3JlYXRlX3RpbWUnLAogICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICd0LmNyZWF0ZV9ieScsCiAgICAgICAgQ2hhbmdlVGltZSAgICAgPT4gJ3QuY2hhbmdlX3RpbWUnLAogICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICd0LmNoYW5nZV9ieScsCiAgICApOwoKICAgICMgY2hlY2sgaWYgT3JkZXJCeSBjb250YWlucyBvbmx5IHVuaXF1ZSB2YWxpZCB2YWx1ZXMKICAgIG15ICVPcmRlckJ5U2VlbjsKICAgIGZvciBteSAkT3JkZXJCeSAoIEB7ICRQYXJhbXtPcmRlckJ5fSB9ICkgewoKICAgICAgICBpZiAoICEkT3JkZXJCeSB8fCAhJE9yZGVyQnlUYWJsZXskT3JkZXJCeX0gfHwgJE9yZGVyQnlTZWVueyRPcmRlckJ5fSApIHsKCiAgICAgICAgICAgICMgZm91bmQgYW4gZXJyb3IKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk9yZGVyQnkgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAnJE9yZGVyQnknICIKICAgICAgICAgICAgICAgICAgICAuICdvciB0aGUgdmFsdWUgaXMgdXNlZCBtb3JlIHRoYW4gb25jZSEnLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIHJlbWVtYmVyIHRoZSB2YWx1ZSB0byBjaGVjayBpZiBpdCBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlCiAgICAgICAgJE9yZGVyQnlTZWVueyRPcmRlckJ5fSA9IDE7CiAgICB9CgogICAgIyBjaGVjayBpZiBPcmRlckJ5RGlyZWN0aW9uIGFycmF5IGNvbnRhaW5zIG9ubHkgJ1VwJyBvciAnRG93bicKICAgIERJUkVDVElPTjoKICAgIGZvciBteSAkRGlyZWN0aW9uICggQHsgJFBhcmFte09yZGVyQnlEaXJlY3Rpb259IH0gKSB7CgogICAgICAgICMgb25seSAnVXAnIG9yICdEb3duJyBhbGxvd2VkCiAgICAgICAgbmV4dCBESVJFQ1RJT04gaWYgJERpcmVjdGlvbiBlcSAnVXAnOwogICAgICAgIG5leHQgRElSRUNUSU9OIGlmICREaXJlY3Rpb24gZXEgJ0Rvd24nOwoKICAgICAgICAjIGZvdW5kIGFuIGVycm9yCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJPcmRlckJ5RGlyZWN0aW9uIGNhbiBvbmx5IGNvbnRhaW4gJ1VwJyBvciAnRG93bichIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlcwogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17VXNpbmdXaWxkY2FyZHN9ICkgewogICAgICAgICRQYXJhbXtVc2luZ1dpbGRjYXJkc30gPSAxOwogICAgfQoKICAgICMgc2V0IHRoZSBkZWZhdWx0IGJlaGF2aW91ciBmb3IgdGhlIHJldHVybiB0eXBlCiAgICBteSAkUmVzdWx0ID0gJFBhcmFte1Jlc3VsdH0gfHwgJ0FSUkFZJzsKCiAgICAjIGNoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIFRlbXBsYXRlVHlwZUlEcyBhcmUgYWxsIHZhbGlkCiAgICByZXR1cm4gaWYgISRTZWxmLT5fQ2hlY2tUZW1wbGF0ZVR5cGVJRHMoCiAgICAgICAgVGVtcGxhdGVUeXBlSURzID0+ICRQYXJhbXtUZW1wbGF0ZVR5cGVJRHN9LAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBsb29rIHVwIGFuZCB0aHVzIGNoZWNrIHRoZSBUZW1wbGF0ZVR5cGVzCiAgICBmb3IgbXkgJFR5cGUgKCBAeyAkUGFyYW17VGVtcGxhdGVUeXBlc30gfSApIHsKCiAgICAgICAgIyBnZXQgdGhlIElEIGZvciB0aGUgbmFtZQogICAgICAgIG15ICRUeXBlSUQgPSAkU2VsZi0+VGVtcGxhdGVUeXBlTG9va3VwKAogICAgICAgICAgICBUZW1wbGF0ZVR5cGUgPT4gJFR5cGUsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayB3aGV0aGVyIHRoZSBJRCB3YXMgZm91bmQsIHdoZXRoZXIgdGhlIG5hbWUgZXhpc3RzCiAgICAgICAgaWYgKCAhJFR5cGVJRCApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSB0ZW1wbGF0ZSB0eXBlICckVHlwZScgaXMgbm90IGtub3duISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHB1c2ggQHsgJFBhcmFte1RlbXBsYXRlVHlwZUlEc30gfSwgJFR5cGVJRDsKICAgIH0KCiAgICAjIGFkZCBzdHJpbmcgcGFyYW1zIHRvIHRoZSBXSEVSRSBjbGF1c2UKICAgIG15ICVTdHJpbmdQYXJhbXMgPSAoCiAgICAgICAgTmFtZSAgICA9PiAndC5uYW1lJywKICAgICAgICBDb21tZW50ID0+ICd0LmNvbW1lbnRzJywKICAgICk7CgogICAgIyBhZGQgc3RyaW5nIHBhcmFtcyB0byBzcWwtd2hlcmUtYXJyYXkKICAgIFNUUklOR1BBUkFNOgogICAgZm9yIG15ICRTdHJpbmdQYXJhbSAoIHNvcnQga2V5cyAlU3RyaW5nUGFyYW1zICkgewoKICAgICAgICAjIGNoZWNrIHN0cmluZyBwYXJhbXMgZm9yIHVzZWZ1bCB2YWx1ZXMsIHRoZSBzdHJpbmcgJzAnIGlzIGFsbG93ZWQKICAgICAgICBuZXh0IFNUUklOR1BBUkFNIGlmICFleGlzdHMgJFBhcmFteyRTdHJpbmdQYXJhbX07CiAgICAgICAgbmV4dCBTVFJJTkdQQVJBTSBpZiAhZGVmaW5lZCAkUGFyYW17JFN0cmluZ1BhcmFtfTsKICAgICAgICBuZXh0IFNUUklOR1BBUkFNIGlmICRQYXJhbXskU3RyaW5nUGFyYW19IGVxICcnOwoKICAgICAgICAjIHF1b3RlCiAgICAgICAgJFBhcmFteyRTdHJpbmdQYXJhbX0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UXVvdGUoICRQYXJhbXskU3RyaW5nUGFyYW19ICk7CgogICAgICAgICMgd2lsZGNhcmRzIGFyZSB1c2VkCiAgICAgICAgaWYgKCAkUGFyYW17VXNpbmdXaWxkY2FyZHN9ICkgewoKICAgICAgICAgICAgIyBnZXQgbGlrZSBlc2NhcGUgc3RyaW5nIG5lZWRlZCBmb3Igc29tZSBkYXRhYmFzZXMgKGUuZy4gb3JhY2xlKQogICAgICAgICAgICBteSAkTGlrZUVzY2FwZVN0cmluZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5HZXREYXRhYmFzZUZ1bmN0aW9uKCdMaWtlRXNjYXBlU3RyaW5nJyk7CgogICAgICAgICAgICAjIFF1b3RlCiAgICAgICAgICAgICRQYXJhbXskU3RyaW5nUGFyYW19ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlF1b3RlKCAkUGFyYW17JFN0cmluZ1BhcmFtfSwgJ0xpa2UnICk7CgogICAgICAgICAgICAjIHJlcGxhY2UgKiB3aXRoICUKICAgICAgICAgICAgJFBhcmFteyRTdHJpbmdQYXJhbX0gPX4gc3sgXCorIH17JX14bXNnOwoKICAgICAgICAgICAgIyBkbyBub3QgdXNlIHN0cmluZyBwYXJhbXMgd2hpY2ggY29udGFpbiBvbmx5ICUKICAgICAgICAgICAgbmV4dCBTVFJJTkdQQVJBTSBpZiAkUGFyYW17JFN0cmluZ1BhcmFtfSA9fiBteyBcQSAlKiBceiB9eG1zOwoKICAgICAgICAgICAgcHVzaCBAU1FMV2hlcmUsCiAgICAgICAgICAgICAgICAiTE9XRVIoJFN0cmluZ1BhcmFtc3skU3RyaW5nUGFyYW19KSBMSUtFIExPV0VSKCckUGFyYW17JFN0cmluZ1BhcmFtfScpICRMaWtlRXNjYXBlU3RyaW5nIjsKICAgICAgICB9CgogICAgICAgICMgbm8gd2lsZGNhcmRzIGFyZSB1c2VkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHB1c2ggQFNRTFdoZXJlLAogICAgICAgICAgICAgICAgIkxPV0VSKCRTdHJpbmdQYXJhbXN7JFN0cmluZ1BhcmFtfSkgPSBMT1dFUignJFBhcmFteyRTdHJpbmdQYXJhbX0nKSI7CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGFycmF5IHBhcmFtcwogICAgbXkgJUFycmF5UGFyYW1zID0gKAogICAgICAgIFRlbXBsYXRlVHlwZUlEcyA9PiAndC50eXBlX2lkJywKICAgICAgICBDcmVhdGVCeSAgICAgICAgPT4gJ3QuY3JlYXRlX2J5JywKICAgICAgICBDaGFuZ2VCeSAgICAgICAgPT4gJ3QuY2hhbmdlX2J5JywKICAgICk7CgogICAgIyBhZGQgYXJyYXkgcGFyYW1zIHRvIHNxbC13aGVyZS1hcnJheQogICAgQVJSQVlQQVJBTToKICAgIGZvciBteSAkQXJyYXlQYXJhbSAoIHNvcnQga2V5cyAlQXJyYXlQYXJhbXMgKSB7CgogICAgICAgICMgaWdub3JlIGVtcHR5IGxpc3RzCiAgICAgICAgbmV4dCBBUlJBWVBBUkFNIGlmICFAeyAkUGFyYW17JEFycmF5UGFyYW19IH07CgogICAgICAgICMgcXVvdGUgYXMgaW50ZWdlcgogICAgICAgIGZvciBteSAkT25lUGFyYW0gKCBAeyAkUGFyYW17JEFycmF5UGFyYW19IH0gKSB7CiAgICAgICAgICAgICRPbmVQYXJhbSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5RdW90ZSggJE9uZVBhcmFtLCAnSW50ZWdlcicgKTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIHN0cmluZwogICAgICAgIG15ICRJblN0cmluZyA9IGpvaW4gJywgJywgQHsgJFBhcmFteyRBcnJheVBhcmFtfSB9OwoKICAgICAgICBwdXNoIEBTUUxXaGVyZSwgIiRBcnJheVBhcmFtc3skQXJyYXlQYXJhbX0gSU4gKCRJblN0cmluZykiOwogICAgfQoKICAgICMgY2hlY2sgdGhlIHRpbWUgcGFyYW1zIGFuZCBhZGQgdGhlbSB0byB0aGUgV0hFUkUgY2xhdXNlIG9mIHRoZSBTRUxFQ1QtU3RhdGVtZW50CiAgICBteSAlVGltZVBhcmFtcyA9ICgKICAgICAgICBDcmVhdGVUaW1lTmV3ZXJEYXRlID0+ICd0LmNyZWF0ZV90aW1lID49JywKICAgICAgICBDcmVhdGVUaW1lT2xkZXJEYXRlID0+ICd0LmNyZWF0ZV90aW1lIDw9JywKICAgICAgICBDaGFuZ2VUaW1lTmV3ZXJEYXRlID0+ICd0LmNoYW5nZV90aW1lID49JywKICAgICAgICBDaGFuZ2VUaW1lT2xkZXJEYXRlID0+ICd0LmNoYW5nZV90aW1lIDw9JywKICAgICk7CiAgICBUSU1FUEFSQU06CiAgICBmb3IgbXkgJFRpbWVQYXJhbSAoIHNvcnQga2V5cyAlVGltZVBhcmFtcyApIHsKCiAgICAgICAgbmV4dCBUSU1FUEFSQU0gaWYgISRQYXJhbXskVGltZVBhcmFtfTsKCiAgICAgICAgaWYgKCAkUGFyYW17JFRpbWVQYXJhbX0gIX4gbXsgXEEgXGRcZFxkXGQtXGRcZC1cZFxkIFxzIFxkXGQ6XGRcZDpcZFxkIFx6IH14bXMgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgcGFyYW1ldGVyICRUaW1lUGFyYW0gaGFzIGFuIGludmFsaWQgZGF0ZSBmb3JtYXQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBxdW90ZQogICAgICAgICRQYXJhbXskVGltZVBhcmFtfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5RdW90ZSggJFBhcmFteyRUaW1lUGFyYW19ICk7CgogICAgICAgIHB1c2ggQFNRTFdoZXJlLCAiJFRpbWVQYXJhbXN7JFRpbWVQYXJhbX0gJyRQYXJhbXskVGltZVBhcmFtfSciOwogICAgfQoKICAgICMgZGVsZXRlIHRoZSBPcmRlckJ5IHBhcmFtZXRlciB3aGVuIHRoZSByZXN1bHQgdHlwZSBpcyAnQ09VTlQnCiAgICBpZiAoICRSZXN1bHQgZXEgJ0NPVU5UJyApIHsKICAgICAgICAkUGFyYW17T3JkZXJCeX0gPSBbXTsKICAgIH0KCiAgICAjIGFzc2VtYmxlIHRoZSBPUkRFUiBCWSBjbGF1c2UKICAgIG15IEBTUUxPcmRlckJ5OwogICAgbXkgJENvdW50ID0gMDsKICAgIGZvciBteSAkT3JkZXJCeSAoIEB7ICRQYXJhbXtPcmRlckJ5fSB9ICkgewoKICAgICAgICAjIHNldCB0aGUgZGVmYXVsdCBvcmRlciBkaXJlY3Rpb24KICAgICAgICBteSAkRGlyZWN0aW9uID0gJ0RFU0MnOwoKICAgICAgICAjIGFkZCB0aGUgZ2l2ZW4gb3JkZXIgZGlyZWN0aW9uCiAgICAgICAgaWYgKCAkUGFyYW17T3JkZXJCeURpcmVjdGlvbn0tPlskQ291bnRdICkgewogICAgICAgICAgICBpZiAoICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufS0+WyRDb3VudF0gZXEgJ1VwJyApIHsKICAgICAgICAgICAgICAgICREaXJlY3Rpb24gPSAnQVNDJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufS0+WyRDb3VudF0gZXEgJ0Rvd24nICkgewogICAgICAgICAgICAgICAgJERpcmVjdGlvbiA9ICdERVNDJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBhZGQgU1FMCiAgICAgICAgcHVzaCBAU1FMT3JkZXJCeSwgIiRPcmRlckJ5VGFibGV7JE9yZGVyQnl9ICREaXJlY3Rpb24iOwogICAgfQogICAgY29udGludWUgewogICAgICAgICRDb3VudCsrOwogICAgfQoKICAgICMgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBvcmRlcmluZyBpcyBub3QgZGV0ZXJtaW5lZAogICAgIyB3ZSBhZGQgYW4gZGVzY2VuZGluZyBvcmRlcmluZyBieSBpZAogICAgaWYgKCAhZ3JlcCB7ICRfIGVxICdUZW1wbGF0ZUlEJyB9ICggQHsgJFBhcmFte09yZGVyQnl9IH0gKSApIHsKICAgICAgICBwdXNoIEBTUUxPcmRlckJ5LCAiJE9yZGVyQnlUYWJsZXtUZW1wbGF0ZUlEfSBERVNDIjsKICAgIH0KCiAgICAjIGFzc2VtYmxlIHRoZSBTUUwgcXVlcnkKICAgIG15ICRTUUwgPSAnU0VMRUNUIHQuaWQgRlJPTSBjaGFuZ2VfdGVtcGxhdGUgdCAnOwoKICAgICMgbW9kaWZ5IFNRTCB3aGVuIHRoZSByZXN1bHQgdHlwZSBpcyAnQ09VTlQnLgogICAgIyBUaGVyZSBpcyBubyAnR1JPVVAgQlknIFNRTC1jbGF1c2UsIHRoZXJlZm9yZSBDT1VOVChjLmlkKSBhbHdheXMgZ2l2ZSB0aGUgd2FudGVkIGNvdW50CiAgICBpZiAoICRSZXN1bHQgZXEgJ0NPVU5UJyApIHsKICAgICAgICAkU1FMICAgICAgICA9ICdTRUxFQ1QgQ09VTlQodC5pZCkgRlJPTSBjaGFuZ2VfdGVtcGxhdGUgdCAnOwogICAgICAgIEBTUUxPcmRlckJ5ID0gKCk7CiAgICB9CgogICAgIyBhZGQgdGhlIFdIRVJFIGNsYXVzZQogICAgaWYgKEBTUUxXaGVyZSkgewogICAgICAgICRTUUwgLj0gJ1dIRVJFICc7CiAgICAgICAgJFNRTCAuPSBqb2luICcgQU5EICcsIG1hcCB7IiggJF8gKSJ9IEBTUUxXaGVyZTsKICAgICAgICAkU1FMIC49ICcgJzsKICAgIH0KCiAgICAjIGFkZCB0aGUgT1JERVIgQlkgY2xhdXNlCiAgICBpZiAoQFNRTE9yZGVyQnkpIHsKICAgICAgICAkU1FMIC49ICdPUkRFUiBCWSAnOwogICAgICAgICRTUUwgLj0gam9pbiAnLCAnLCBAU1FMT3JkZXJCeTsKICAgICAgICAkU1FMIC49ICcgJzsKICAgIH0KCiAgICAjIGlnbm9yZSB0aGUgcGFyYW1ldGVyICdMaW1pdCcgd2hlbiByZXN1bHQgdHlwZSBpcyAnQ09VTlQnCiAgICBpZiAoICRSZXN1bHQgZXEgJ0NPVU5UJyApIHsKICAgICAgICAkUGFyYW17TGltaXR9ID0gMTsKICAgIH0KCiAgICAjIGFzayBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAkU1FMLAogICAgICAgIExpbWl0ID0+ICRQYXJhbXtMaW1pdH0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQElEczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBASURzLCAkUm93WzBdOwogICAgfQoKICAgICMgcmV0dXJuIHRoZSBjb3VudCBhcyBzY2FsYXIKICAgIHJldHVybiAkSURzWzBdIGlmICRSZXN1bHQgZXEgJ0NPVU5UJzsKCiAgICByZXR1cm4gXEBJRHM7Cn0KCj1pdGVtIFRlbXBsYXRlRGVsZXRlKCkKCkRlbGV0ZSBhIHRlbXBsYXRlLgoKICAgIG15ICRTdWNjZXNzID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZURlbGV0ZSgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBUZW1wbGF0ZURlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyB0cmlnZ2VyIFRlbXBsYXRlRGVsZXRlUHJlLUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdUZW1wbGF0ZURlbGV0ZVByZScsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IHRlbXBsYXRlIGRhdGEKICAgIG15ICRUZW1wbGF0ZURhdGEgPSAkU2VsZi0+VGVtcGxhdGVHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBkZWxldGUgdGVtcGxhdGUgZnJvbSBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gY2hhbmdlX3RlbXBsYXRlIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VGVtcGxhdGVJRH0gXSwKICAgICk7CgogICAgIyB0cmlnZ2VyIFRlbXBsYXRlRGVsZXRlUG9zdC1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnVGVtcGxhdGVEZWxldGVQb3N0JywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgIE9sZFRlbXBsYXRlRGF0YSA9PiAkVGVtcGxhdGVEYXRhLAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBUZW1wbGF0ZVR5cGVMb29rdXAoKQoKUmV0dXJuIHRoZSB0ZW1wbGF0ZSB0eXBlIGlkIHdoZW4gdGhlIHRlbXBsYXRlIHR5cGUgbmFtZSBpcyBwYXNzZWQuClJldHVybiB0aGUgdGVtcGxhdGUgdHlwZSBuYW1lIHdoZW4gdGhlIHRlbXBsYXRlIHR5cGUgaWQgaXMgcGFzc2VkLgpXaGVuIG5vIHRlbXBsYXRlIHR5cGUgaWQgb3IgdGVtcGxhdGUgdHlwZSBuYW1lIGlzIGZvdW5kLCB0aGVuIHRoZQp1bmRlZmluZWQgdmFsdWUgaXMgcmV0dXJuZWQuCgogICAgbXkgJFR5cGVJRCA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVUeXBlTG9va3VwKAogICAgICAgIFRlbXBsYXRlVHlwZSA9PiAnbXkgdGVtcGxhdGUgdHlwZSBuYW1lJywKICAgICk7CgogICAgbXkgJFR4cGVOYW1lID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZVR5cGVMb29rdXAoCiAgICAgICAgVGVtcGxhdGVUeXBlSUQgPT4gNDIsCiAgICApOwoKPWN1dAoKc3ViIFRlbXBsYXRlVHlwZUxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdGhlIHRlbXBsYXRlIHR5cGUgaWQgb3IgdGhlIHRlbXBsYXRlIHR5cGUgbmFtZSBtdXN0IGJlIHBhc3NlZAogICAgaWYgKCAhJFBhcmFte1RlbXBsYXRlVHlwZUlEfSAmJiAhJFBhcmFte1RlbXBsYXRlVHlwZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIHRoZSBUZW1wbGF0ZVR5cGVJRCBvciB0aGUgVGVtcGxhdGVUeXBlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBvbmx5IG9uZSBvZiB0ZW1wbGF0ZSBpZCBhbmQgdGVtcGxhdGUgbmFtZSBjYW4gYmUgcGFzc2VkCiAgICBpZiAoICRQYXJhbXtUZW1wbGF0ZVR5cGVJRH0gJiYgJFBhcmFte1RlbXBsYXRlVHlwZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIGVpdGhlciB0aGUgVGVtcGxhdGVUeXBlIG9yIHRoZSBUZW1wbGF0ZVRlbXBsYXRlSUQsIG5vdCBib3RoIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgdHlwZSBpZAogICAgaWYgKCAkUGFyYW17VGVtcGxhdGVUeXBlfSApIHsKICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gY2hhbmdlX3RlbXBsYXRlX3R5cGUgV0hFUkUgbmFtZSA9ID8nLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17VGVtcGxhdGVUeXBlfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRUeXBlSUQ7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJFR5cGVJRCA9ICRSb3dbMF07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJFR5cGVJRDsKICAgIH0KCiAgICAjIGdldCB0eXBlIG5hbWUKICAgIGVsc2lmICggJFBhcmFte1RlbXBsYXRlVHlwZUlEfSApIHsKCiAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBuYW1lIEZST00gY2hhbmdlX3RlbXBsYXRlX3R5cGUgV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1RlbXBsYXRlVHlwZUlEfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRUeXBlTmFtZTsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkVHlwZU5hbWUgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRUeXBlTmFtZTsKICAgIH0KCiAgICByZXR1cm47Cn0KCj1pdGVtIFRlbXBsYXRlU2VyaWFsaXplKCkKClRoaXMgbWV0aG9kIGlzIGluIGZhY3QgYSBkaXNwYXRjaGVyIGZvciBkaWZmZXJlbnQgdGVtcGxhdGUgdHlwZXMuCkN1cnJlbnRseSBJVFNNQ2hhbmdlTWFuYWdlbWVudCBzdXBwb3J0cyB0aGVzZSB0ZW1wbGF0ZSB0eXBlczoKCklUU01DaGFuZ2UKSVRTTVdvcmtPcmRlcgpDQUIKSVRTTUNvbmRpdGlvbgoKVGhlIG1ldGhvZCByZXR1cm5zIGEgZGF0YXN0cnVjdHVyZSwgc2VyaWFsaXplZCB3aXRoIERhdGE6OkR1bXBlci4KCiAgICBteSAkQ2hhbmdlVGVtcGxhdGUgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlU2VyaWFsaXplKAogICAgICAgIFRlbXBsYXRlVHlwZSA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgU3RhdGVSZXNldCAgID0+IDEsICMgKG9wdGlvbmFsKSByZXNldCB0byBkZWZhdWx0IHN0YXRlCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCgogICAgICAgICMgb3RoZXIgb3B0aW9ucyBuZWVkZWQgZGVwZW5kaW5nIG9uIHRoZSB0ZW1wbGF0ZSB0eXBlCiAgICAgICAgQ2hhbmdlSUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBUZW1wbGF0ZVNlcmlhbGl6ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyB0aGUgdGVtcGxhdGUgdHlwZSBpZCBvciB0aGUgdGVtcGxhdGUgdHlwZSBuYW1lIG11c3QgYmUgcGFzc2VkCiAgICBpZiAoICEkUGFyYW17VGVtcGxhdGVUeXBlSUR9ICYmICEkUGFyYW17VGVtcGxhdGVUeXBlfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgdGhlIFRlbXBsYXRlVHlwZUlEIG9yIHRoZSBUZW1wbGF0ZVR5cGUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIG9ubHkgb25lIG9mIHRlbXBsYXRlIHR5cGUgbmFtZSBhbmQgdGVtcGxhdGUgdHlwZSBpZCBjYW4gYmUgcGFzc2VkCiAgICBpZiAoICRQYXJhbXtUZW1wbGF0ZVR5cGV9ICYmICRQYXJhbXtUZW1wbGF0ZVR5cGVJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIGVpdGhlciB0aGUgVGVtcGxhdGVUeXBlSUQgb3IgdGhlIFRlbXBsYXRlVHlwZSwgbm90IGJvdGghJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkVGVtcGxhdGVUeXBlID0gJFBhcmFte1RlbXBsYXRlVHlwZX07CiAgICBpZiAoICRQYXJhbXtUZW1wbGF0ZVR5cGVJRH0gKSB7CiAgICAgICAgJFRlbXBsYXRlVHlwZSA9ICRTZWxmLT5UZW1wbGF0ZVR5cGVMb29rdXAoCiAgICAgICAgICAgIFRlbXBsYXRlVHlwZUlEID0+ICRQYXJhbXtUZW1wbGF0ZVR5cGVJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHdoYXQgdHlwZXMgb2YgdGVtcGxhdGVzIGFyZSBzdXBwb3J0ZWQgYW5kIHdoYXQgc3Vicm91dGluZXMgZG8gdGhlIHNlcmlhbGl6YXRpb24KICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCggJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpUZW1wbGF0ZTo6JyAuICRUZW1wbGF0ZVR5cGUgKTsKCiAgICByZXR1cm4gaWYgISRCYWNrZW5kT2JqZWN0OwoKICAgIG15ICRTZXJpYWxpemVkRGF0YSA9ICRCYWNrZW5kT2JqZWN0LT5TZXJpYWxpemUoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCiAgICByZXR1cm4gJFNlcmlhbGl6ZWREYXRhOwp9Cgo9aXRlbSBUZW1wbGF0ZURlU2VyaWFsaXplKCkKClRoaXMgbWV0aG9kIGRlc2VyaWFsaXplcyB0aGUgdGVtcGxhdGUgY29udGVudC4gSXQgcmV0dXJucyB0aGUKSUQgb2YgdGhlICJtYWluIiBlbGVtZW50IHRoYXQgd2FzIGNyZWF0ZWQgYmFzZWQgb24gdGhlIHRlbXBsYXRlLgoKICAgIG15ICRFbGVtZW50SUQgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlRGVTZXJpYWxpemUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBUZW1wbGF0ZURlU2VyaWFsaXplIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBUZW1wbGF0ZUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB0ZW1wbGF0ZQogICAgbXkgJFRlbXBsYXRlID0gJFNlbGYtPlRlbXBsYXRlR2V0KAogICAgICAgICVQYXJhbSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkVGVtcGxhdGU7CgogICAgIyBnZXQgdGhlIFBlcmwgZGF0YXN0cnVjdHVyZQogICAgbXkgJFRlbXBsYXRlQ29udGVudCA9ICRUZW1wbGF0ZS0+e0NvbnRlbnR9OwogICAgbXkgJFZBUjE7CgogICAgcmV0dXJuIGlmICFldmFsICJcJFZBUjEgPSAkVGVtcGxhdGVDb250ZW50OyAxOyI7ICAgICMjIG5vIGNyaXRpYwoKICAgIHJldHVybiBpZiAhJFZBUjE7CiAgICByZXR1cm4gaWYgcmVmICRWQVIxIG5lICdIQVNIJzsKCiAgICAjIGNyZWF0ZSBlbnRpdGllcyBkZWZpbmVkIGJ5IHRoZSB0ZW1wbGF0ZQogICAgbXkgJUluZm8gPSAkU2VsZi0+X0NyZWF0ZVRlbXBsYXRlRWxlbWVudHMoCiAgICAgICAgJVBhcmFtLAogICAgICAgIFRlbXBsYXRlID0+ICRWQVIxLAogICAgKTsKCiAgICByZXR1cm4gJEluZm97SUR9Owp9Cgo9YmVnaW4gSW50ZXJuYWw6Cgo9aXRlbSBfQ3JlYXRlVGVtcGxhdGVFbGVtZW50cygpCgpUaGlzIG1ldGhvZCBkaXNwYXRjaGVzIHRoZSBlbGVtZW50cyBjcmVhdGlvbi4gSXQgY2FsbHMgdGhlIHN1YnJvdXRpbmUKdGhhdCBiZWxvbmdzIHRvIHRoZSBnaXZlbiB0eXBlIChlLmcuIENoYW5nZUFkZCkuIEFmdGVyIHRoYXQgaXQKaW52b2tlcyBpdHNlbGYgZm9yIGFsbCB0aGUgY2hpbGRyZW5zIG9mIHRoZSBtYWluIGVsZW1lbnQuCgpUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBJRCBvZiB0aGUgbWFpbiBlbGVtZW50LgoKICAgIG15ICRFbGVtZW50SUQgPSAkVGVtcGxhdGVPYmplY3QtPl9DcmVhdGVUZW1wbGF0ZUVsZW1lbnRzKAogICAgICAgIFRlbXBsYXRlID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsgLi4uIH0sCiAgICAgICAgICAgIENoaWxkcmVuICA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsgLi4uIH0sCiAgICAgICAgICAgICAgICAgICAgQ2hpbGRyZW4gICAgID0+IFsgLi4uIF0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7IC4uLiB9LAogICAgICAgICAgICAgICAgICAgIENoaWxkcmVuICAgICA9PiBbIC4uLiBdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAoKICAgICAgICAjIGFueSBvdGhlciBwYXJhbWV0ZXJzIGNhbiBmb2xsb3cKICAgICkKCj1jdXQKCnN1YiBfQ3JlYXRlVGVtcGxhdGVFbGVtZW50cyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgY2hpbGRyZW4KICAgIG15ICRDaGlsZHJlbiA9IGRlbGV0ZSAkUGFyYW17VGVtcGxhdGV9LT57Q2hpbGRyZW59OwogICAgJENoaWxkcmVuIHx8PSBbXTsKCiAgICAjIGRpc3BhdGNoIHRhYmxlCiAgICBteSAlTWV0aG9kMk9iamVjdCA9ICgKICAgICAgICBDaGFuZ2VBZGQgICAgID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICBXb3JrT3JkZXJBZGQgID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICBDQUJBZGQgICAgICAgID0+ICdDQUInLAogICAgICAgIENvbmRpdGlvbkFkZCAgPT4gJ0lUU01Db25kaXRpb24nLAogICAgICAgIEF0dGFjaG1lbnRBZGQgPT4gJ1BhcmVudCcsCiAgICAgICAgRXhwcmVzc2lvbkFkZCA9PiAnUGFyZW50JywKICAgICAgICBBY3Rpb25BZGQgICAgID0+ICdQYXJlbnQnLAogICAgICAgIExpbmtBZGQgICAgICAgPT4gJ1BhcmVudCcsCiAgICApOwoKICAgICMgZ2V0IGFjdGlvbgogICAgbXkgKCAkTWV0aG9kLCAkRGF0YSApID0gZWFjaCAleyAkUGFyYW17VGVtcGxhdGV9IH07CiAgICBteSAkVHlwZSA9ICRNZXRob2QyT2JqZWN0eyRNZXRob2R9OwogICAgbXkgJEJhY2tlbmRPYmplY3Q7CiAgICBpZiAoICRUeXBlIGVxICdQYXJlbnQnICkgewogICAgICAgICRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCggJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpUZW1wbGF0ZTo6JyAuICRQYXJhbXtQYXJlbnR9ICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6VGVtcGxhdGU6OicgLiAkVHlwZSApOwogICAgfQoKICAgIHJldHVybiBpZiAhJEJhY2tlbmRPYmplY3Q7CgogICAgIyBjcmVhdGUgcGFyZW50IGVsZW1lbnQKICAgIG15ICVQYXJlbnRSZXR1cm4gPSAkQmFja2VuZE9iamVjdC0+RGVTZXJpYWxpemUoCiAgICAgICAgJVBhcmFtLAogICAgICAgIERhdGEgICA9PiAkRGF0YSwKICAgICAgICBUeXBlICAgPT4gJFR5cGUsCiAgICAgICAgTWV0aG9kID0+ICRNZXRob2QsCiAgICApOwoKICAgIHJldHVybiBpZiAhJVBhcmVudFJldHVybjsKCiAgICBteSAlU2libGluZ3NJbmZvOwoKICAgICMgY3JlYXRlIGNoaWxkIGVsZW1lbnRzCiAgICAjIHByZXZlbnQgbmV3IG51bWJlciBjYWxjdWxhdGlvbiBmb3Igd29ya29yZGVycywKICAgICMgYXMgdGhlIG9yaWdpbmFsIG51bWJlciB3aWxsIGJlIHVzZWQKICAgIGZvciBteSAkQ2hpbGQgKCBAeyRDaGlsZHJlbn0gKSB7CiAgICAgICAgbXkgJUNoaWxkSW5mbyA9ICRTZWxmLT5fQ3JlYXRlVGVtcGxhdGVFbGVtZW50cygKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlU2libGluZ3NJbmZvLAogICAgICAgICAgICAlUGFyZW50UmV0dXJuLAogICAgICAgICAgICBUZW1wbGF0ZSAgICAgPT4gJENoaWxkLAogICAgICAgICAgICBQYXJlbnQgICAgICAgPT4gJFR5cGUsCiAgICAgICAgICAgIE1ldGhvZCAgICAgICA9PiAkTWV0aG9kLAogICAgICAgICAgICBOb051bWJlckNhbGMgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIHNhdmUgaW5mbyBmb3IgbmV4dCBzaWJsaW5nCiAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJUNoaWxkSW5mbyApIHsKICAgICAgICAgICAgJFNpYmxpbmdzSW5mb3skS2V5fSA9ICRDaGlsZEluZm97JEtleX07CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlUGFyZW50UmV0dXJuOwp9Cgo9aXRlbSBfQ2hlY2tUZW1wbGF0ZVR5cGVJRHMoKQoKY2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gdGVtcGxhdGUgdHlwZSBpZHMgYXJlIGFsbCB2YWxpZAoKICAgIG15ICRPayA9ICRUZW1wbGF0ZU9iamVjdC0+X0NoZWNrVGVtcGxhdGVUeXBlSURzKAogICAgICAgIFRlbXBsYXRlVHlwZUlEcyA9PiBbIDIsIDUwMCBdLAogICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBfQ2hlY2tUZW1wbGF0ZVR5cGVJRHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVUeXBlSURzIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCByZWYgJFBhcmFte1RlbXBsYXRlVHlwZUlEc30gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1RoZSBwYXJhbSBUZW1wbGF0ZVR5cGVJRHMgbXVzdCBiZSBhbiBBUlJBWSByZWZlcmVuY2UhJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBpZiBUZW1wbGF0ZVR5cGVJRHMgY2FuIGJlIGxvb2tlZCB1cAogICAgZm9yIG15ICRUeXBlSUQgKCBAeyAkUGFyYW17VGVtcGxhdGVUeXBlSURzfSB9ICkgewogICAgICAgIG15ICRUeXBlID0gJFNlbGYtPlRlbXBsYXRlVHlwZUxvb2t1cCgKICAgICAgICAgICAgVGVtcGxhdGVUeXBlSUQgPT4gJFR5cGVJRCwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkVHlwZSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSB0eXBlIGlkICRUeXBlSUQgaXMgbm90IHZhbGlkISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwoKPWVuZCBJbnRlcm5hbDoKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OkV2ZW50OjpDb25kaXRpb247Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoRGF0YSBFdmVudCBDb25maWcgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRvIHN0b3JlIHRoZSBjaGFuZ2UgaWQKICAgIG15ICRDaGFuZ2VJRDsKCiAgICAjIHRvIHN0b3JlIHRoZSBvYmplY3Qgd2VyZSB0aGUgZGF0YSBjb21lcyBmcm9tCiAgICBteSAkT2JqZWN0OwoKICAgICMgaGFuZGxlIGNoYW5nZSBldmVudHMKICAgIGlmICggJFBhcmFte0V2ZW50fSA9fiBteyBcQSBDaGFuZ2UgfXhtcyApIHsKCiAgICAgICAgIyBzZXQgdGhlIGNoYW5nZSBpZAogICAgICAgICRDaGFuZ2VJRCA9ICRQYXJhbXtEYXRhfS0+e0NoYW5nZUlEfTsKCiAgICAgICAgIyBzZXQgdGhlIG9iamVjdAogICAgICAgICRPYmplY3QgPSAnSVRTTUNoYW5nZSc7CiAgICB9CgogICAgIyBoYW5kbGUgd29ya29yZGVyIGV2ZW50cwogICAgZWxzaWYgKCAkUGFyYW17RXZlbnR9ID1+IG17IFxBIFdvcmtPcmRlciB9eG1zICkgewoKICAgICAgICAjIGdldCB3b3Jrb3JkZXIKICAgICAgICBteSAkV29ya09yZGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyR2V0KAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkUGFyYW17RGF0YX0tPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgc2V0IHRoZSBjaGFuZ2UgaWQgZnJvbSB3b3Jrb3JkZXIgZGF0YQogICAgICAgICRDaGFuZ2VJRCA9ICRXb3JrT3JkZXItPntDaGFuZ2VJRH07CgogICAgICAgICMgc2V0IHRoZSBvYmplY3QKICAgICAgICAkT2JqZWN0ID0gJ0lUU01Xb3JrT3JkZXInOwogICAgfQoKICAgICMgc2hvdyBlcnJvciBmb3IgdW5rbm93biBldmVudHMKICAgIGVsc2UgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuIG5vdCBoYW5kbGUgZXZlbnQgJyRQYXJhbXtFdmVudH0nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBpbiBjYXNlIG9mIGFuIHVwZGF0ZSBldmVudCBvciBhIHRpbWUgcmVhY2hlZCBldmVudCwgc3RvcmUgdGhlIHVwZGF0ZWQgYXR0cmlidXRlcwogICAgbXkgQEF0dHJpYnV0ZXNDaGFuZ2VkOwogICAgaWYgKCAkUGFyYW17RXZlbnR9IGVxICdDaGFuZ2VVcGRhdGVQb3N0JyApIHsKCiAgICAgICAgIyBnZXQgb2xkIGRhdGEKICAgICAgICBteSAkT2xkRGF0YSA9ICRQYXJhbXtEYXRhfS0+e09sZENoYW5nZURhdGF9OwoKICAgICAgICBGSUVMRDoKICAgICAgICBmb3IgbXkgJEZpZWxkICggc29ydCBrZXlzICV7ICRQYXJhbXtEYXRhfSB9ICkgewoKICAgICAgICAgICAgIyBhdm9pZCByZWN1cnNpb24KICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAkRmllbGQgZXEgJ09sZENoYW5nZURhdGEnOwoKICAgICAgICAgICAgIyB3ZSBkbyBub3QgdHJhY2sgdGhlIHVzZXIgaWQgYW5kICJwbGFpbiIgY29sdW1ucwogICAgICAgICAgICBuZXh0IEZJRUxEIGlmICRGaWVsZCBlcSAnVXNlcklEJzsKICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAkRmllbGQgZXEgJ0p1c3RpZmljYXRpb25QbGFpbic7CiAgICAgICAgICAgIG5leHQgRklFTEQgaWYgJEZpZWxkIGVxICdEZXNjcmlwdGlvblBsYWluJzsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgZmllbGQgaGFzIGNoYW5nZWQKICAgICAgICAgICAgbXkgJEZpZWxkSGFzQ2hhbmdlZCA9ICRTZWxmLT5fSGFzRmllbGRDaGFuZ2VkKAogICAgICAgICAgICAgICAgTmV3ID0+ICRQYXJhbXtEYXRhfS0+eyRGaWVsZH0sCiAgICAgICAgICAgICAgICBPbGQgPT4gJE9sZERhdGEtPnskRmllbGR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAhJEZpZWxkSGFzQ2hhbmdlZDsKCiAgICAgICAgICAgICMgcmVtZW1iZXIgY2hhbmdlZCBmaWVsZCBuYW1lCiAgICAgICAgICAgIHB1c2ggQEF0dHJpYnV0ZXNDaGFuZ2VkLCAkRmllbGQ7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkUGFyYW17RXZlbnR9IGVxICdXb3JrT3JkZXJVcGRhdGVQb3N0JyApIHsKCiAgICAgICAgIyBnZXQgb2xkIGRhdGEKICAgICAgICBteSAkT2xkRGF0YSA9ICRQYXJhbXtEYXRhfS0+e09sZFdvcmtPcmRlckRhdGF9OwoKICAgICAgICBGSUVMRDoKICAgICAgICBmb3IgbXkgJEZpZWxkICggc29ydCBrZXlzICV7ICRQYXJhbXtEYXRhfSB9ICkgewoKICAgICAgICAgICAgIyBhdm9pZCByZWN1cnNpb24KICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAkRmllbGQgZXEgJ09sZFdvcmtPcmRlckRhdGEnOwoKICAgICAgICAgICAgIyB3ZSBkbyBub3QgdHJhY2sgdGhlIHVzZXIgaWQgYW5kICJwbGFpbiIgY29sdW1ucwogICAgICAgICAgICBuZXh0IEZJRUxEIGlmICRGaWVsZCBlcSAnVXNlcklEJzsKICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAkRmllbGQgZXEgJ1JlcG9ydFBsYWluJzsKICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAkRmllbGQgZXEgJ0luc3RydWN0aW9uUGxhaW4nOwoKICAgICAgICAgICAgIyBzcGVjaWFsIGhhbmRsaW5nIGZvciBhY2NvdW50ZWQgdGltZQogICAgICAgICAgICBpZiAoICRGaWVsZCBlcSAnQWNjb3VudGVkVGltZScgKSB7CgogICAgICAgICAgICAgICAgIyB3ZSBkbyBub3QgdHJhY2sgaWYgYWNjb3VudGVkIHRpbWUgd2FzIGVtcHR5IG9yIHplcm8KICAgICAgICAgICAgICAgIG5leHQgRklFTEQgaWYgISRQYXJhbXtEYXRhfS0+e0FjY291bnRlZFRpbWV9OwoKICAgICAgICAgICAgICAgICMgcmVtZW1iZXIgY2hhbmdlZCBmaWVsZCBuYW1lCiAgICAgICAgICAgICAgICBwdXNoIEBBdHRyaWJ1dGVzQ2hhbmdlZCwgJEZpZWxkOwoKICAgICAgICAgICAgICAgIG5leHQgRklFTEQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgaWYgZmllbGQgaGFzIGNoYW5nZWQKICAgICAgICAgICAgbXkgJEZpZWxkSGFzQ2hhbmdlZCA9ICRTZWxmLT5fSGFzRmllbGRDaGFuZ2VkKAogICAgICAgICAgICAgICAgTmV3ID0+ICRQYXJhbXtEYXRhfS0+eyRGaWVsZH0sCiAgICAgICAgICAgICAgICBPbGQgPT4gJE9sZERhdGEtPnskRmllbGR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAhJEZpZWxkSGFzQ2hhbmdlZDsKCiAgICAgICAgICAgICMgcmVtZW1iZXIgY2hhbmdlZCBmaWVsZCBuYW1lCiAgICAgICAgICAgIHB1c2ggQEF0dHJpYnV0ZXNDaGFuZ2VkLCAkRmllbGQ7CiAgICAgICAgfQogICAgfQoKICAgICMgYWxsIGtpbmQgb2YgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgdGltZSByZWFjaGVkIGV2ZW50cwogICAgZWxzaWYgKCAkUGFyYW17RXZlbnR9ID1+IG17IFxBICg/OiBDaGFuZ2UgfCBXb3JrT3JkZXIgKSAoIC4rIFRpbWUgKSBSZWFjaGVkUG9zdCBceiB9eG1zICkgewoKICAgICAgICAjIGdldCB0aGUgbmFtZSBvZiB0aGUgcmVhY2hlZCB0aW1lIGZpZWxkCiAgICAgICAgbXkgJEZpZWxkID0gJDE7CgogICAgICAgICMgcmVtZW1iZXIgY2hhbmdlZCBmaWVsZCBuYW1lCiAgICAgICAgcHVzaCBAQXR0cmlidXRlc0NoYW5nZWQsICRGaWVsZDsKICAgIH0KCiAgICAjIG1hdGNoIGFsbCBjb25kaXRpb25zIGZvciB0aGlzIGNoYW5nZSBhbmQgZXhlY3V0ZSBhbGwgYWN0aW9ucwogICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicpLT5Db25kaXRpb25NYXRjaEV4ZWN1dGVBbGwoCiAgICAgICAgQ2hhbmdlSUQgICAgICAgICAgPT4gJENoYW5nZUlELAogICAgICAgIEF0dHJpYnV0ZXNDaGFuZ2VkID0+IHsgJE9iamVjdCA9PiBcQEF0dHJpYnV0ZXNDaGFuZ2VkIH0sCiAgICAgICAgRXZlbnQgICAgICAgICAgICAgPT4gJFBhcmFte0V2ZW50fSwKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBlcnJvcnMKICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ29uZGl0aW9uTWF0Y2hFeGVjdXRlQWxsIGNvdWxkIG5vdCBiZSAiCiAgICAgICAgICAgICAgICAuICJleGVjdXRlZCBzdWNjZXNzZnVsbHkgZm9yIGV2ZW50ICckUGFyYW17RXZlbnR9JyBvbiBDaGFuZ2VJRCAnJENoYW5nZUlEJyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9YmVnaW4gSW50ZXJuYWw6Cgo9aXRlbSBfSGFzRmllbGRDaGFuZ2VkKCkKClRoaXMgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIGEgZmllbGQgd2FzIGNoYW5nZWQgb3Igbm90LiBJdCByZXR1cm5zIDEgd2hlbiBmaWVsZAp3YXMgY2hhbmdlZCwgMCBvdGhlcndpc2UKCiAgICBteSAkRmllbGRIYXNDaGFuZ2VkID0gJENvbmRpdGlvbk9iamVjdC0+X0hhc0ZpZWxkQ2hhbmdlZCgKICAgICAgICBPbGQgPT4gJ29sZCB2YWx1ZScsICMgY2FuIGJlIGFycmF5IHJlZmVyZW5jZSBvciBoYXNoIHJlZmVyZW5jZSBhcyB3ZWxsCiAgICAgICAgTmV3ID0+ICduZXcgdmFsdWUnLCAjIGNhbiBiZSBhcnJheSByZWZlcmVuY2Ugb3IgaGFzaCByZWZlcmVuY2UgYXMgd2VsbAogICAgKTsKCj1jdXQKCnN1YiBfSGFzRmllbGRDaGFuZ2VkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBmaWVsZCBoYXMgY2hhbmdlZCB3aGVuIGVpdGhlciAnbmV3JyBvciAnb2xkIGlzIG5vdCBzZXQKICAgIHJldHVybiAxIGlmICEoICRQYXJhbXtOZXd9ICYmICRQYXJhbXtPbGR9ICkgJiYgKCAkUGFyYW17TmV3fSB8fCAkUGFyYW17T2xkfSApOwoKICAgICMgZmllbGQgaGFzIG5vdCBjaGFuZ2VkIHdoZW4gYm90aCB2YWx1ZXMgYXJlIGVtcHR5CiAgICByZXR1cm4gaWYgISRQYXJhbXtOZXd9ICYmICEkUGFyYW17T2xkfTsKCiAgICAjIHJldHVybiByZXN1bHQgb2YgJ2VxJyB3aGVuIGJvdGggcGFyYW1zIGFyZSBzY2FsYXJzCiAgICByZXR1cm4gJFBhcmFte05ld30gbmUgJFBhcmFte09sZH0gaWYgIXJlZiggJFBhcmFte05ld30gKSAmJiAhcmVmKCAkUGFyYW17T2xkfSApOwoKICAgICMgYSBmaWVsZCBoYXMgY2hhbmdlZCB3aGVuICdyZWYnIGlzIGRpZmZlcmVudAogICAgcmV0dXJuIDEgaWYgcmVmKCAkUGFyYW17TmV3fSApIG5lIHJlZiggJFBhcmFte09sZH0gKTsKCiAgICAjIGNoZWNrIGhhc2hlcwogICAgaWYgKCByZWYgJFBhcmFte05ld30gZXEgJ0hBU0gnICkgewoKICAgICAgICAjIGZpZWxkIGhhcyBjaGFuZ2VkIHdoZW4gbnVtYmVyIG9mIGtleXMgYXJlIGRpZmZlcmVudAogICAgICAgIHJldHVybiAxIGlmIHNjYWxhciBrZXlzICV7ICRQYXJhbXtOZXd9IH0gIT0gc2NhbGFyIGtleXMgJXsgJFBhcmFte09sZH0gfTsKCiAgICAgICAgIyBjaGVjayB0aGUgdmFsdWVzIGZvciBlYWNoIGtleQogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRQYXJhbXtOZXd9IH0gKSB7CiAgICAgICAgICAgIHJldHVybiAxIGlmICRQYXJhbXtOZXd9LT57JEtleX0gbmUgJFBhcmFte09sZH0tPnskS2V5fTsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBhcnJheXMKICAgIGlmICggcmVmICRQYXJhbXtOZXd9IGVxICdBUlJBWScgKSB7CgogICAgICAgICMgY2hhbmdlZCB3aGVuIG51bWJlciBvZiBlbGVtZW50cyBkaWZmZXIKICAgICAgICByZXR1cm4gMSBpZiBzY2FsYXIgQHsgJFBhcmFte05ld30gfSAhPSBzY2FsYXIgQHsgJFBhcmFte09sZH0gfTsKCiAgICAgICAgIyBjaGVjayBlYWNoIGVsZW1lbnQKICAgICAgICBmb3IgbXkgJEluZGV4ICggMCAuLiAkI3sgJFBhcmFte05ld30gfSApIHsKICAgICAgICAgICAgcmV0dXJuIDEgaWYgJFBhcmFte05ld30tPlskSW5kZXhdIG5lICRQYXJhbXtPbGR9LT5bJEluZGV4XTsKICAgICAgICB9CiAgICB9CgogICAgIyBmaWVsZCBoYXMgbm90IGJlZW4gY2hhbmdlZAogICAgcmV0dXJuIDA7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OkV2ZW50OjpDb25kaXRpb25EZWxldGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhEYXRhIEV2ZW50IENvbmZpZyBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgaGFuZGxlIGRlbGV0aW9uIG9mIGEgY2hhbmdlCiAgICBpZiAoICRQYXJhbXtFdmVudH0gZXEgJ0NoYW5nZURlbGV0ZVBvc3QnICkgewoKICAgICAgICAjIGRlbGV0ZSBhbGwgY29uZGl0aW9ucyAoYW5kIGV4cHJlc3Npb25zIGFuZCBhY3Rpb25zKSBmb3IgdGhpcyBjaGFuZ2UgaWQKICAgICAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJyktPkNvbmRpdGlvbkRlbGV0ZUFsbCgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJFBhcmFte0RhdGF9LT57Q2hhbmdlSUR9LAogICAgICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGhhbmRsZSBlcnJvcgogICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiQ29uZGl0aW9uRGVsZXRlQWxsKCkgZmFpbGVkIGZvciBDaGFuZ2VJRCAnJFBhcmFte0RhdGF9LT57Q2hhbmdlSUR9JyEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgZXJyb3IKICAgIGVsc2UgewoKICAgICAgICAjIGFuIHVua25vd24gZXZlbnQKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRQYXJhbXtFdmVudH0gaXMgYW4gdW5rbm93biBldmVudCEiLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OkV2ZW50OjpIaXN0b3J5QWRkOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Okhpc3RvcnknLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhEYXRhIEV2ZW50IENvbmZpZyBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkbyBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBldmVudCwgYmVjYXVzZSB3ZSBuZWVkIHRoaXMgdW5tb2RpZmllZCBpbiBsYXRlciBldmVudCBtb2R1bGVzCiAgICBteSAkRXZlbnQgPSAkUGFyYW17RXZlbnR9OwoKICAgICMgaW4gaGlzdG9yeSBldmVudCBoYW5kbGluZyB3ZSB1c2UgRXZlbnQgbmFtZSB3aXRob3V0IHRoZSB0cmFpbGluZyAnUG9zdCcKICAgICRFdmVudCA9fiBzeyBQb3N0IFx6IH17fXhtczsKCiAgICAjIGRpc3Rpbmd1aXNoIGJldHdlZW4gQ2hhbmdlIGFuZCBXb3JrT3JkZXIgZXZlbnRzLCBiYXNlZCBvbiBuYW1pbmcgY29udmVudGlvbgogICAgbXkgKCRUeXBlKSA9ICRFdmVudCA9fiBteyBcQSAoIENoYW5nZSB8IFdvcmtPcmRlciB8IENvbmRpdGlvbiB8IEV4cHJlc3Npb24gfCBBY3Rpb24gKSB9eG1zOwogICAgaWYgKCAhJFR5cGUgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBvYmplY3QgdHlwZSBmb3IgdGhlIGV2ZW50ICckRXZlbnQnISIKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHN0b3JlIGFsbCBoaXN0b3J5IGFkZCBkYXRhCiAgICBteSBASGlzdG9yeUFkZERhdGE7CgogICAgIyBkbyBoaXN0b3J5IHN0dWZmCiAgICBpZiAoICRFdmVudCBlcSAnQ2hhbmdlQWRkJyB8fCAkRXZlbnQgZXEgJ1dvcmtPcmRlckFkZCcgKSB7CgogICAgICAgICMgdGVsbCBoaXN0b3J5IHRoYXQgYSBjaGFuZ2Ugd2FzIGFkZGVkCiAgICAgICAgcHVzaCBASGlzdG9yeUFkZERhdGEsIHsKICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJFBhcmFte0RhdGF9LT57Q2hhbmdlSUR9LAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkUGFyYW17RGF0YX0tPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlID0+ICRFdmVudCwKICAgICAgICAgICAgQ29udGVudE5ldyAgPT4gJFBhcmFte0RhdGF9LT57ICRUeXBlIC4gJ0lEJyB9LAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICB9OwogICAgfQoKICAgIGVsc2lmICggJEV2ZW50IGVxICdDaGFuZ2VVcGRhdGUnIHx8ICRFdmVudCBlcSAnV29ya09yZGVyVXBkYXRlJyApIHsKCiAgICAgICAgIyBnZXQgb2xkIGRhdGEsIGVpdGhlciBmcm9tIGNoYW5nZSBvciB3b3Jrb3JkZXIKICAgICAgICBteSAkT2xkRGF0YSAgPSAkUGFyYW17RGF0YX0tPnsiT2xkJHtUeXBlfURhdGEifTsKICAgICAgICBteSAkQ2hhbmdlSUQgPSAkT2xkRGF0YS0+e0NoYW5nZUlEfTsgICAgICAgICAgICAgICAjIHdvcmtzIGZvciBjaGFuZ2UgYW5kIHdvcmtvcmRlciBldmVudHMKCiAgICAgICAgRklFTEQ6CiAgICAgICAgZm9yIG15ICRGaWVsZCAoIHNvcnQga2V5cyAleyAkUGFyYW17RGF0YX0gfSApIHsKCiAgICAgICAgICAgICMgZG8gbm90IHRyYWNrIHNwZWNpYWwgZmllbGRzICdPbGRDaGFuZ2VEYXRhJyBvciAnT2xkV29ya09yZGVyRGF0YScKICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAkRmllbGQgZXEgIk9sZCR7VHlwZX1EYXRhIjsKCiAgICAgICAgICAgICMgd2UgZG8gbm90IHRyYWNrIHRoZSB1c2VyIGlkCiAgICAgICAgICAgIG5leHQgRklFTEQgaWYgJEZpZWxkIGVxICdVc2VySUQnOwoKICAgICAgICAgICAgIyB3ZSBkbyBub3QgdHJhY2sgdGhlICJwbGFpbiIgY29sdW1ucywgb25seSB0aGUgbm9uLXBsYWluIGNvbHVtbnMKICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAkRmllbGQgZXEgJ0p1c3RpZmljYXRpb25QbGFpbic7ICAgICMgY2hhbmdlCiAgICAgICAgICAgIG5leHQgRklFTEQgaWYgJEZpZWxkIGVxICdEZXNjcmlwdGlvblBsYWluJzsgICAgICAjIGNoYW5nZQogICAgICAgICAgICBuZXh0IEZJRUxEIGlmICRGaWVsZCBlcSAnUmVwb3J0UGxhaW4nOyAgICAgICAgICAgIyB3b3Jrb3JkZXIKICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAkRmllbGQgZXEgJ0luc3RydWN0aW9uUGxhaW4nOyAgICAgICMgd29ya29yZGVyCgogICAgICAgICAgICAjIHdlIGRvIG5vIHdhbnQgdG8gdHJhY2sgdGhlIGludGVybmFsIGZpZWxkICJOb051bWJlckNhbGMiCiAgICAgICAgICAgIG5leHQgRklFTEQgaWYgJEZpZWxkIGVxICdOb051bWJlckNhbGMnOyAgICAgICAgICAjIHdvcmtvcmRlcgoKICAgICAgICAgICAgIyBUaGUgaGlzdG9yeSBvZiBDQUIgdXBkYXRlcyBpcyBub3QgdHJhY2tlZCBoZXJlLAogICAgICAgICAgICAjIGJ1dCBpbiB0aGUgaGFuZGxlciBmb3IgQ2hhbmdlQ0FCVXBkYXRlLgogICAgICAgICAgICBuZXh0IEZJRUxEIGlmICRGaWVsZCBlcSAnQ0FCQWdlbnRzJzsgICAgICAgIyBjaGFuZ2UKICAgICAgICAgICAgbmV4dCBGSUVMRCBpZiAkRmllbGQgZXEgJ0NBQkN1c3RvbWVycyc7ICAgICMgY2hhbmdlCgogICAgICAgICAgICAjIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFjY291bnRlZCB0aW1lCiAgICAgICAgICAgIGlmICggJFR5cGUgZXEgJ1dvcmtPcmRlcicgJiYgJEZpZWxkIGVxICdBY2NvdW50ZWRUaW1lJyApIHsKCiAgICAgICAgICAgICAgICAjIHdlIGRvIG5vdCB0cmFjayBpZiBhY2NvdW50ZWQgdGltZSB3YXMgZW1wdHkKICAgICAgICAgICAgICAgIG5leHQgRklFTEQgaWYgISRQYXJhbXtEYXRhfS0+eyRGaWVsZH07CgogICAgICAgICAgICAgICAgIyBpZiBhY2NvdW50ZWQgdGltZSBpcyBub3QgZW1wdHksIHdlIGFsd2F5cyB0cmFjayB0aGUgaGlzdG9yeQoKICAgICAgICAgICAgICAgICMgZ2V0IHdvcmtvcmRlciBkYXRhCiAgICAgICAgICAgICAgICBteSAkV29ya09yZGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyR2V0KAogICAgICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRQYXJhbXtEYXRhfS0+e1dvcmtPcmRlcklEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzYXZlIGhpc3RvcnkgaWYgYWNjb3VudGVkIHRpbWUgaGFzIGNoYW5nZWQKICAgICAgICAgICAgICAgIHB1c2ggQEhpc3RvcnlBZGREYXRhLCB7CiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRQYXJhbXtEYXRhfS0+e1dvcmtPcmRlcklEfSwKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSA9PiAkRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgRmllbGRuYW1lICAgPT4gJEZpZWxkLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnROZXcgID0+ICRXb3JrT3JkZXItPnskRmllbGR9LAogICAgICAgICAgICAgICAgICAgIENvbnRlbnRPbGQgID0+ICRPbGREYXRhLT57JEZpZWxkfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgbmV4dCBGSUVMRDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBpZiBmaWVsZCBoYXMgY2hhbmdlZAogICAgICAgICAgICBteSAkRmllbGRIYXNDaGFuZ2VkID0gJFNlbGYtPl9IYXNGaWVsZENoYW5nZWQoCiAgICAgICAgICAgICAgICBOZXcgPT4gJFBhcmFte0RhdGF9LT57JEZpZWxkfSwKICAgICAgICAgICAgICAgIE9sZCA9PiAkT2xkRGF0YS0+eyRGaWVsZH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNhdmUgaGlzdG9yeSBpZiBmaWVsZCBoYXMgY2hhbmdlZAogICAgICAgICAgICBpZiAoJEZpZWxkSGFzQ2hhbmdlZCkgewoKICAgICAgICAgICAgICAgIHB1c2ggQEhpc3RvcnlBZGREYXRhLCB7CiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRQYXJhbXtEYXRhfS0+e1dvcmtPcmRlcklEfSwKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSA9PiAkRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgRmllbGRuYW1lICAgPT4gJEZpZWxkLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnROZXcgID0+ICRQYXJhbXtEYXRhfS0+eyRGaWVsZH0sCiAgICAgICAgICAgICAgICAgICAgQ29udGVudE9sZCAgPT4gJE9sZERhdGEtPnskRmllbGR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBlbHNpZiAoICRFdmVudCBlcSAnV29ya09yZGVyRGVsZXRlJyApIHsKCiAgICAgICAgIyBnZXQgb2xkIGRhdGEKICAgICAgICBteSAkT2xkRGF0YSA9ICRQYXJhbXtEYXRhfS0+e09sZFdvcmtPcmRlckRhdGF9OwoKICAgICAgICAjIGdldCBleGlzdGluZyBoaXN0b3J5IGVudHJpZXMgZm9yIHRoaXMgd29ya29yZGVyCiAgICAgICAgbXkgJEhpc3RvcnlFbnRyaWVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Okhpc3RvcnknKS0+V29ya09yZGVySGlzdG9yeUdldCgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJE9sZERhdGEtPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgdXBkYXRlIGhpc3RvcnkgZW50cmllczogZGVsZXRlIHdvcmtvcmRlciBpZAogICAgICAgIEhJU1RPUllFTlRSWToKICAgICAgICBmb3IgbXkgJEhpc3RvcnlFbnRyeSAoIEB7JEhpc3RvcnlFbnRyaWVzfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Okhpc3RvcnknKS0+SGlzdG9yeVVwZGF0ZSgKICAgICAgICAgICAgICAgIEhpc3RvcnlFbnRyeUlEID0+ICRIaXN0b3J5RW50cnktPntIaXN0b3J5RW50cnlJRH0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCAgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBhZGQgaGlzdG9yeSBlbnRyeSBmb3IgV29ya09yZGVyIGRlbGV0aW9uCiAgICAgICAgIyBjYWxsIEhpc3RvcnlBZGQgZGlyZWN0bHkgZnJvbSBoZXJlIGluc3RlYWQgb2YgdXNpbmcgdGhlIEBIaXN0b3J5QWRkRGF0YQogICAgICAgICMgYXMgd2Ugd2FudCB0aGlzIHRvIGFwcGVhciBuZXh0IHRvIHRoZSBsaW5lIGluIGhpc3RvcnkgdGhhdCBIaXN0b3J5VXBkYXRlCiAgICAgICAgIyBqdXN0IGFkZGVkIGluIHRoZSBjb2RlIGJsb2NrIGJlZm9yZQogICAgICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Okhpc3RvcnknKS0+SGlzdG9yeUFkZCgKICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJE9sZERhdGEtPntDaGFuZ2VJRH0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlID0+ICRFdmVudCwKICAgICAgICAgICAgQ29udGVudE5ldyAgPT4gJE9sZERhdGEtPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBoYW5kbGUgQ2hhbmdlQ0FCIGV2ZW50cwogICAgZWxzaWYgKCAkRXZlbnQgZXEgJ0NoYW5nZUNBQlVwZGF0ZScgfHwgJEV2ZW50IGVxICdDaGFuZ2VDQUJEZWxldGUnICkgewoKICAgICAgICAjIGdldCBvbGQgZGF0YQogICAgICAgIG15ICRPbGREYXRhID0gJFBhcmFte0RhdGF9LT57T2xkQ2hhbmdlQ0FCRGF0YX07CgogICAgICAgIEZJRUxEOgogICAgICAgIGZvciBteSAkRmllbGQgKHF3KENBQkFnZW50cyBDQUJDdXN0b21lcnMpKSB7CgogICAgICAgICAgICAjIHdlIGRvIG5vdCB0cmFjayB3aGVuIHRoZSBwYXJhbSBoYXMgbm90IGJlZW4gcGFzc2VkCiAgICAgICAgICAgIG5leHQgRklFTEQgaWYgISRQYXJhbXtEYXRhfS0+eyRGaWVsZH07CgogICAgICAgICAgICAjIGNoZWNrIGlmIGZpZWxkIGhhcyBjaGFuZ2VkCiAgICAgICAgICAgIG15ICRGaWVsZEhhc0NoYW5nZWQgPSAkU2VsZi0+X0hhc0ZpZWxkQ2hhbmdlZCgKICAgICAgICAgICAgICAgIE5ldyA9PiAkUGFyYW17RGF0YX0tPnskRmllbGR9LAogICAgICAgICAgICAgICAgT2xkID0+ICRPbGREYXRhLT57JEZpZWxkfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2F2ZSBoaXN0b3J5IGlmIGZpZWxkIGhhcyBjaGFuZ2VkCiAgICAgICAgICAgIGlmICgkRmllbGRIYXNDaGFuZ2VkKSB7CgogICAgICAgICAgICAgICAgcHVzaCBASGlzdG9yeUFkZERhdGEsIHsKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICA9PiAkUGFyYW17RGF0YX0tPntDaGFuZ2VJRH0sCiAgICAgICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgPT4gJEV2ZW50LAogICAgICAgICAgICAgICAgICAgIEZpZWxkbmFtZSAgID0+ICRGaWVsZCwKICAgICAgICAgICAgICAgICAgICBDb250ZW50TmV3ICA9PiBqb2luKCAnJSUnLCBAeyAkUGFyYW17RGF0YX0tPnskRmllbGR9IH0gKSwKICAgICAgICAgICAgICAgICAgICBDb250ZW50T2xkICA9PiBqb2luKCAnJSUnLCBAeyAkT2xkRGF0YS0+eyRGaWVsZH0gfSApLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGhhbmRsZSBsaW5rIGV2ZW50cwogICAgZWxzaWYgKAogICAgICAgICRFdmVudCBlcSAnQ2hhbmdlTGlua0FkZCcKICAgICAgICB8fCAkRXZlbnQgZXEgJ0NoYW5nZUxpbmtEZWxldGUnCiAgICAgICAgfHwgJEV2ZW50IGVxICdXb3JrT3JkZXJMaW5rQWRkJwogICAgICAgIHx8ICRFdmVudCBlcSAnV29ya09yZGVyTGlua0RlbGV0ZScKICAgICAgICApCiAgICB7CgogICAgICAgICMgZm9yICB3b3Jrb3JkZXIgbGlua3MgZ2V0IHRoZSBjaGFuZ2UgaWQKICAgICAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1dvcmtPcmRlcklEfSApIHsKICAgICAgICAgICAgbXkgJFdvcmtPcmRlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlckdldCgKICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRQYXJhbXtEYXRhfS0+e1dvcmtPcmRlcklEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFBhcmFte0RhdGF9LT57Q2hhbmdlSUR9ID0gJFdvcmtPcmRlci0+e0NoYW5nZUlEfTsKICAgICAgICB9CgogICAgICAgIG15ICRDb250ZW50TmV3ID0gam9pbiAnJSUnLAogICAgICAgICAgICAkUGFyYW17RGF0YX0tPntTb3VyY2VPYmplY3R9IHx8ICRQYXJhbXtEYXRhfS0+e1RhcmdldE9iamVjdH0sCiAgICAgICAgICAgICRQYXJhbXtEYXRhfS0+e1NvdXJjZUtleX0gfHwgJFBhcmFte0RhdGF9LT57VGFyZ2V0S2V5fTsKCiAgICAgICAgIyB0ZWxsIGhpc3RvcnkgdGhhdCBhIGxpbmsgd2FzIGFkZGVkCiAgICAgICAgcHVzaCBASGlzdG9yeUFkZERhdGEsIHsKICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJFBhcmFte0RhdGF9LT57Q2hhbmdlSUR9LAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkUGFyYW17RGF0YX0tPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlID0+ICRFdmVudCwKICAgICAgICAgICAgQ29udGVudE5ldyAgPT4gJENvbnRlbnROZXcsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIH07CiAgICB9CgogICAgIyBoYW5kbGUgYXR0YWNobWVudCBldmVudHMKICAgIGVsc2lmICgKICAgICAgICAkRXZlbnQgZXEgJ0NoYW5nZUF0dGFjaG1lbnRBZGQnCiAgICAgICAgfHwgJEV2ZW50IGVxICdDaGFuZ2VBdHRhY2htZW50RGVsZXRlJwogICAgICAgIHx8ICRFdmVudCBlcSAnV29ya09yZGVyQXR0YWNobWVudEFkZCcKICAgICAgICB8fCAkRXZlbnQgZXEgJ1dvcmtPcmRlckF0dGFjaG1lbnREZWxldGUnCiAgICAgICAgfHwgJEV2ZW50IGVxICdXb3JrT3JkZXJSZXBvcnRBdHRhY2htZW50QWRkJwogICAgICAgIHx8ICRFdmVudCBlcSAnV29ya09yZGVyUmVwb3J0QXR0YWNobWVudERlbGV0ZScKICAgICAgICApCiAgICB7CgogICAgICAgICMgdGVsbCBoaXN0b3J5IHRoYXQgYW4gYXR0YWNobWVudCBldmVudCB3YXMgdHJpZ2dlcmVkCiAgICAgICAgcHVzaCBASGlzdG9yeUFkZERhdGEsIHsKICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJFBhcmFte0RhdGF9LT57Q2hhbmdlSUR9LAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkUGFyYW17RGF0YX0tPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlID0+ICRFdmVudCwKICAgICAgICAgICAgQ29udGVudE5ldyAgPT4gJFBhcmFte0RhdGF9LT57RmlsZW5hbWV9LAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICB9OwogICAgfQoKICAgICMgaGFuZGxlIHh4eFRpbWVSZWFjaGVkIGV2ZW50cwogICAgZWxzaWYgKCAkRXZlbnQgPX4gbXsgVGltZVJlYWNoZWQgXHogfXhtcyApIHsKCiAgICAgICAgIyBnZXQgZWl0aGVyIFdvcmtPcmRlcklEIG9yIENoYW5nZUlECiAgICAgICAgbXkgJElEID0gJFBhcmFte0RhdGF9LT57V29ya09yZGVySUR9IHx8ICRQYXJhbXtEYXRhfS0+e0NoYW5nZUlEfTsKCiAgICAgICAgcHVzaCBASGlzdG9yeUFkZERhdGEsIHsKICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJFBhcmFte0RhdGF9LT57Q2hhbmdlSUR9LAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkUGFyYW17RGF0YX0tPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlID0+ICRFdmVudCwKICAgICAgICAgICAgQ29udGVudE5ldyAgPT4gJElEIC4gJyUlTm90aWZpY2F0aW9uIFNlbnQnLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICB9OwogICAgfQoKICAgICMgYWRkIGhpc3RvcnkgZW50cnkgd2hlbiBub3RpZmljYXRpb24gd2FzIHNlbnQKICAgIGVsc2lmICggJEV2ZW50ID1+IG17IE5vdGlmaWNhdGlvblNlbnQgXHogfXhtcyApIHsKCiAgICAgICAgIyBnZXQgZWl0aGVyIFdvcmtPcmRlcklEIG9yIENoYW5nZUlECiAgICAgICAgbXkgJElEID0gJFBhcmFte0RhdGF9LT57V29ya09yZGVySUR9IHx8ICRQYXJhbXtEYXRhfS0+e0NoYW5nZUlEfTsKCiAgICAgICAgcHVzaCBASGlzdG9yeUFkZERhdGEsIHsKICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJFBhcmFte0RhdGF9LT57Q2hhbmdlSUR9LAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkUGFyYW17RGF0YX0tPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlID0+ICRFdmVudCwKICAgICAgICAgICAgQ29udGVudE5ldyAgPT4gJFBhcmFte0RhdGF9LT57VG99IC4gJyUlJyAuICRQYXJhbXtEYXRhfS0+e0V2ZW50VHlwZX0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIH07CiAgICB9CgogICAgIyBoYW5kbGUgY29uZGl0aW9uIGV2ZW50cwogICAgZWxzaWYgKCAkRXZlbnQgZXEgJ0NvbmRpdGlvbkFkZCcgKSB7CgogICAgICAgICMgY3JlYXRlIGhpc3RvcnkgZm9yIGNvbmRpdGlvbgogICAgICAgIHB1c2ggQEhpc3RvcnlBZGREYXRhLCB7CiAgICAgICAgICAgIENoYW5nZUlEICAgID0+ICRQYXJhbXtEYXRhfS0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgSGlzdG9yeVR5cGUgPT4gJEV2ZW50LAogICAgICAgICAgICBDb250ZW50TmV3ICA9PiAkUGFyYW17RGF0YX0tPntDb25kaXRpb25JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIH07CgogICAgICAgICMgY3JlYXRlIGhpc3RvcnkgZm9yIGFsbCBjb25kaXRpb24gZmllbGRzCiAgICAgICAgbXkgQENvbmRpdGlvblN0YXRpYyA9IHF3KENvbmRpdGlvbklEIFVzZXJJRCBDaGFuZ2VJRCk7CiAgICAgICAgQ09ORElUSU9ORklFTEQ6CiAgICAgICAgZm9yIG15ICRDb25kaXRpb25GaWVsZCAoIHNvcnQga2V5cyAleyAkUGFyYW17RGF0YX0gfSApIHsKCiAgICAgICAgICAgICMgY2hlY2sgZm9yIHN0YXRpYyBmaWVsZHMKICAgICAgICAgICAgbmV4dCBDT05ESVRJT05GSUVMRCBpZiBncmVwIHsgJF8gZXEgJENvbmRpdGlvbkZpZWxkIH0gQENvbmRpdGlvblN0YXRpYzsKCiAgICAgICAgICAgICMgZG8gbm90IGFkZCBlbXB0eSBmaWVsZHMgdG8gaGlzdG9yeQogICAgICAgICAgICBuZXh0IENPTkRJVElPTkZJRUxEIGlmICEkUGFyYW17RGF0YX0tPnskQ29uZGl0aW9uRmllbGR9OwoKICAgICAgICAgICAgcHVzaCBASGlzdG9yeUFkZERhdGEsIHsKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgID0+ICRQYXJhbXtEYXRhfS0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlID0+ICRFdmVudCwKICAgICAgICAgICAgICAgIEZpZWxkbmFtZSAgID0+ICRDb25kaXRpb25GaWVsZCwKICAgICAgICAgICAgICAgIENvbnRlbnROZXcgID0+ICRQYXJhbXtEYXRhfS0+eyRDb25kaXRpb25GaWVsZH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgIyBoYW5kbGUgY29uZGl0aW9uIHVwZGF0ZSBldmVudHMKICAgIGVsc2lmICggJEV2ZW50IGVxICdDb25kaXRpb25VcGRhdGUnICkgewoKICAgICAgICAjIGdldCBvbGQgZGF0YQogICAgICAgIG15ICRPbGREYXRhID0gJFBhcmFte0RhdGF9LT57T2xkQ29uZGl0aW9uRGF0YX07CgogICAgICAgICMgY3JlYXRlIGhpc3RvcnkgZm9yIGFsbCBjb25kaXRpb24gZmllbGRzCiAgICAgICAgbXkgQENvbmRpdGlvblN0YXRpYyA9IHF3KENvbmRpdGlvbklEIFVzZXJJRCBDaGFuZ2VJRCBPbGRDb25kaXRpb25EYXRhKTsKICAgICAgICBDT05ESVRJT05GSUVMRDoKICAgICAgICBmb3IgbXkgJENvbmRpdGlvbkZpZWxkICggc29ydCBrZXlzICV7ICRQYXJhbXtEYXRhfSB9ICkgewoKICAgICAgICAgICAgIyBjaGVjayBmb3Igc3RhdGljIGZpZWxkcwogICAgICAgICAgICBuZXh0IENPTkRJVElPTkZJRUxEIGlmIGdyZXAgeyAkXyBlcSAkQ29uZGl0aW9uRmllbGQgfSBAQ29uZGl0aW9uU3RhdGljOwoKICAgICAgICAgICAgIyBkbyBub3QgYWRkIGVtcHR5IGZpZWxkcyB0byBoaXN0b3J5CiAgICAgICAgICAgIG5leHQgQ09ORElUSU9ORklFTEQgaWYgISRQYXJhbXtEYXRhfS0+eyRDb25kaXRpb25GaWVsZH07CgogICAgICAgICAgICAjIGNoZWNrIGlmIGZpZWxkIGhhcyBjaGFuZ2VkCiAgICAgICAgICAgIG15ICRGaWVsZEhhc0NoYW5nZWQgPSAkU2VsZi0+X0hhc0ZpZWxkQ2hhbmdlZCgKICAgICAgICAgICAgICAgIE5ldyA9PiAkUGFyYW17RGF0YX0tPnskQ29uZGl0aW9uRmllbGR9LAogICAgICAgICAgICAgICAgT2xkID0+ICRPbGREYXRhLT57JENvbmRpdGlvbkZpZWxkfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY3JlYXRlIGhpc3Rvcnkgb25seSBmb3IgY2hhbmdlZCBmaWVsZHMKICAgICAgICAgICAgbmV4dCBDT05ESVRJT05GSUVMRCBpZiAhJEZpZWxkSGFzQ2hhbmdlZDsKCiAgICAgICAgICAgIHB1c2ggQEhpc3RvcnlBZGREYXRhLCB7CiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICA9PiAkT2xkRGF0YS0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlID0+ICRFdmVudCwKICAgICAgICAgICAgICAgIEZpZWxkbmFtZSAgID0+ICRDb25kaXRpb25GaWVsZCwKICAgICAgICAgICAgICAgIENvbnRlbnROZXcgID0+ICRQYXJhbXtEYXRhfS0+e0NvbmRpdGlvbklEfSAuICclJScgLiAkUGFyYW17RGF0YX0tPnskQ29uZGl0aW9uRmllbGR9LAogICAgICAgICAgICAgICAgQ29udGVudE9sZCAgPT4gJFBhcmFte0RhdGF9LT57Q29uZGl0aW9uSUR9IC4gJyUlJyAuICRPbGREYXRhLT57JENvbmRpdGlvbkZpZWxkfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGhhbmRsZSBjb25kaXRpb24gZGVsZXRlIGV2ZW50cwogICAgZWxzaWYgKCAkRXZlbnQgZXEgJ0NvbmRpdGlvbkRlbGV0ZScgKSB7CgogICAgICAgICMgZ2V0IG9sZCBkYXRhCiAgICAgICAgbXkgJE9sZERhdGEgPSAkUGFyYW17RGF0YX0tPntPbGRDb25kaXRpb25EYXRhfTsKCiAgICAgICAgcHVzaCBASGlzdG9yeUFkZERhdGEsIHsKICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJE9sZERhdGEtPntDaGFuZ2VJRH0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlID0+ICRFdmVudCwKICAgICAgICAgICAgQ29udGVudE5ldyAgPT4gJE9sZERhdGEtPntDb25kaXRpb25JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIH07CiAgICB9CgogICAgIyBoYW5kbGUgY29uZGl0aW9uIGRlbGV0ZSBldmVudHMKICAgIGVsc2lmICggJEV2ZW50IGVxICdDb25kaXRpb25EZWxldGVBbGwnICkgewoKICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpIaXN0b3J5JyktPkhpc3RvcnlBZGQoCiAgICAgICAgICAgIENoYW5nZUlEICAgID0+ICRQYXJhbXtEYXRhfS0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgSGlzdG9yeVR5cGUgPT4gJEV2ZW50LAogICAgICAgICAgICBDb250ZW50TmV3ICA9PiAkUGFyYW17RGF0YX0tPntDaGFuZ2VJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBoYW5kbGUgZXhwcmVzc2lvbiBldmVudHMKICAgIGVsc2lmICggJEV2ZW50IGVxICdFeHByZXNzaW9uQWRkJyApIHsKCiAgICAgICAgIyBjcmVhdGUgaGlzdG9yeSBmb3IgZXhwcmVzc2lvbgogICAgICAgIHB1c2ggQEhpc3RvcnlBZGREYXRhLCB7CiAgICAgICAgICAgIENoYW5nZUlEICAgID0+ICRQYXJhbXtEYXRhfS0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgSGlzdG9yeVR5cGUgPT4gJEV2ZW50LAogICAgICAgICAgICBDb250ZW50TmV3ICA9PiAkUGFyYW17RGF0YX0tPntFeHByZXNzaW9uSUR9LAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICB9OwoKICAgICAgICAjIGNyZWF0ZSBoaXN0b3J5IGZvciBhbGwgZXhwcmVzc2lvbiBmaWVsZHMKICAgICAgICBteSBARXhwcmVzc2lvblN0YXRpYyA9IHF3KCBFeHByZXNzaW9uSUQgVXNlcklEIENoYW5nZUlEKTsKICAgICAgICBFWFBSRVNTSU9ORklFTEQ6CiAgICAgICAgZm9yIG15ICRFeHByZXNzaW9uRmllbGQgKCBzb3J0IGtleXMgJXsgJFBhcmFte0RhdGF9IH0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIGZvciBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgIG5leHQgRVhQUkVTU0lPTkZJRUxEIGlmIGdyZXAgeyAkXyBlcSAkRXhwcmVzc2lvbkZpZWxkIH0gQEV4cHJlc3Npb25TdGF0aWM7CgogICAgICAgICAgICAjIGRvIG5vdCBhZGQgZW1wdHkgZmllbGRzIHRvIGhpc3RvcnkKICAgICAgICAgICAgbmV4dCBFWFBSRVNTSU9ORklFTEQgaWYgISRQYXJhbXtEYXRhfS0+eyRFeHByZXNzaW9uRmllbGR9OwoKICAgICAgICAgICAgcHVzaCBASGlzdG9yeUFkZERhdGEsIHsKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgID0+ICRQYXJhbXtEYXRhfS0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlID0+ICRFdmVudCwKICAgICAgICAgICAgICAgIEZpZWxkbmFtZSAgID0+ICRFeHByZXNzaW9uRmllbGQsCiAgICAgICAgICAgICAgICBDb250ZW50TmV3ICA9PiAkUGFyYW17RGF0YX0tPnskRXhwcmVzc2lvbkZpZWxkfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGhhbmRsZSBleHByZXNzaW9uIHVwZGF0ZSBldmVudHMKICAgIGVsc2lmICggJEV2ZW50IGVxICdFeHByZXNzaW9uVXBkYXRlJyApIHsKCiAgICAgICAgIyBnZXQgb2xkIGRhdGEKICAgICAgICBteSAkT2xkRGF0YSA9ICRQYXJhbXtEYXRhfS0+e09sZEV4cHJlc3Npb25EYXRhfTsKCiAgICAgICAgIyBjcmVhdGUgaGlzdG9yeSBmb3IgYWxsIGV4cHJlc3Npb24gZmllbGRzCiAgICAgICAgbXkgQEV4cHJlc3Npb25TdGF0aWMgPSBxdyggRXhwcmVzc2lvbklEIFVzZXJJRCBDaGFuZ2VJRCBPbGRFeHByZXNzaW9uRGF0YSApOwogICAgICAgIEVYUFJFU1NJT05GSUVMRDoKICAgICAgICBmb3IgbXkgJEV4cHJlc3Npb25GaWVsZCAoIHNvcnQga2V5cyAleyAkUGFyYW17RGF0YX0gfSApIHsKCiAgICAgICAgICAgICMgY2hlY2sgZm9yIHN0YXRpYyBmaWVsZHMKICAgICAgICAgICAgbmV4dCBFWFBSRVNTSU9ORklFTEQgaWYgZ3JlcCB7ICRfIGVxICRFeHByZXNzaW9uRmllbGQgfSBARXhwcmVzc2lvblN0YXRpYzsKCiAgICAgICAgICAgICMgZG8gbm90IGFkZCBlbXB0eSBmaWVsZHMgdG8gaGlzdG9yeQogICAgICAgICAgICBuZXh0IEVYUFJFU1NJT05GSUVMRCBpZiAhJFBhcmFte0RhdGF9LT57JEV4cHJlc3Npb25GaWVsZH07CgogICAgICAgICAgICAjIGNoZWNrIGlmIGZpZWxkIGhhcyBjaGFuZ2VkCiAgICAgICAgICAgIG15ICRGaWVsZEhhc0NoYW5nZWQgPSAkU2VsZi0+X0hhc0ZpZWxkQ2hhbmdlZCgKICAgICAgICAgICAgICAgIE5ldyA9PiAkUGFyYW17RGF0YX0tPnskRXhwcmVzc2lvbkZpZWxkfSwKICAgICAgICAgICAgICAgIE9sZCA9PiAkT2xkRGF0YS0+eyRFeHByZXNzaW9uRmllbGR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjcmVhdGUgaGlzdG9yeSBvbmx5IGZvciBjaGFuZ2VkIGZpZWxkcwogICAgICAgICAgICBuZXh0IEVYUFJFU1NJT05GSUVMRCBpZiAhJEZpZWxkSGFzQ2hhbmdlZDsKCiAgICAgICAgICAgIHB1c2ggQEhpc3RvcnlBZGREYXRhLCB7CiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICA9PiAkUGFyYW17RGF0YX0tPntDaGFuZ2VJRH0sCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSA9PiAkRXZlbnQsCiAgICAgICAgICAgICAgICBGaWVsZG5hbWUgICA9PiAkRXhwcmVzc2lvbkZpZWxkLAogICAgICAgICAgICAgICAgQ29udGVudE5ldyAgPT4gJFBhcmFte0RhdGF9LT57RXhwcmVzc2lvbklEfSAuICclJScKICAgICAgICAgICAgICAgICAgICAuICRQYXJhbXtEYXRhfS0+eyRFeHByZXNzaW9uRmllbGR9LAogICAgICAgICAgICAgICAgQ29udGVudE9sZCA9PiAkUGFyYW17RGF0YX0tPntFeHByZXNzaW9uSUR9IC4gJyUlJyAuICRPbGREYXRhLT57JEV4cHJlc3Npb25GaWVsZH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGhhbmRsZSBleHByZXNzaW9uIGRlbGV0ZSBldmVudHMKICAgIGVsc2lmICggJEV2ZW50IGVxICdFeHByZXNzaW9uRGVsZXRlJyApIHsKCiAgICAgICAgcHVzaCBASGlzdG9yeUFkZERhdGEsIHsKICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJFBhcmFte0RhdGF9LT57Q2hhbmdlSUR9LAogICAgICAgICAgICBIaXN0b3J5VHlwZSA9PiAkRXZlbnQsCiAgICAgICAgICAgIENvbnRlbnROZXcgID0+ICRQYXJhbXtEYXRhfS0+e0V4cHJlc3Npb25JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIH07CiAgICB9CgogICAgIyBoYW5kbGUgZGVsZXRlIGFsbCBleHByZXNzaW9ucyBldmVudHMKICAgIGVsc2lmICggJEV2ZW50IGVxICdFeHByZXNzaW9uRGVsZXRlQWxsJyApIHsKCiAgICAgICAgcHVzaCBASGlzdG9yeUFkZERhdGEsIHsKICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJFBhcmFte0RhdGF9LT57Q2hhbmdlSUR9LAogICAgICAgICAgICBIaXN0b3J5VHlwZSA9PiAkRXZlbnQsCiAgICAgICAgICAgIENvbnRlbnROZXcgID0+ICRQYXJhbXtEYXRhfS0+e0NvbmRpdGlvbklEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgfTsKICAgIH0KCiAgICAjIGhhbmRsZSBhY3Rpb24gZXZlbnRzCiAgICBlbHNpZiAoICRFdmVudCBlcSAnQWN0aW9uQWRkJyApIHsKCiAgICAgICAgIyBjcmVhdGUgaGlzdG9yeSBmb3IgYWN0aW9uCiAgICAgICAgcHVzaCBASGlzdG9yeUFkZERhdGEsIHsKICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJFBhcmFte0RhdGF9LT57Q2hhbmdlSUR9LAogICAgICAgICAgICBIaXN0b3J5VHlwZSA9PiAkRXZlbnQsCiAgICAgICAgICAgIENvbnRlbnROZXcgID0+ICRQYXJhbXtEYXRhfS0+e0FjdGlvbklEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgfTsKCiAgICAgICAgIyBjcmVhdGUgaGlzdG9yeSBmb3IgYWxsIGFjdGlvbiBmaWVsZHMKICAgICAgICBteSBAQWN0aW9uU3RhdGljID0gcXcoIEFjdGlvbklEIFVzZXJJRCBDaGFuZ2VJRCk7CiAgICAgICAgQUNUSU9ORklFTEQ6CiAgICAgICAgZm9yIG15ICRBY3Rpb25GaWVsZCAoIHNvcnQga2V5cyAleyAkUGFyYW17RGF0YX0gfSApIHsKCiAgICAgICAgICAgICMgY2hlY2sgZm9yIHN0YXRpYyBmaWVsZHMKICAgICAgICAgICAgbmV4dCBBQ1RJT05GSUVMRCBpZiBncmVwIHsgJF8gZXEgJEFjdGlvbkZpZWxkIH0gQEFjdGlvblN0YXRpYzsKCiAgICAgICAgICAgICMgZG8gbm90IGFkZCBlbXB0eSBmaWVsZHMgdG8gaGlzdG9yeQogICAgICAgICAgICBuZXh0IEFDVElPTkZJRUxEIGlmICEkUGFyYW17RGF0YX0tPnskQWN0aW9uRmllbGR9OwoKICAgICAgICAgICAgcHVzaCBASGlzdG9yeUFkZERhdGEsIHsKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgID0+ICRQYXJhbXtEYXRhfS0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlID0+ICRFdmVudCwKICAgICAgICAgICAgICAgIEZpZWxkbmFtZSAgID0+ICRBY3Rpb25GaWVsZCwKICAgICAgICAgICAgICAgIENvbnRlbnROZXcgID0+ICRQYXJhbXtEYXRhfS0+eyRBY3Rpb25GaWVsZH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgIyBoYW5kbGUgYWN0aW9uIHVwZGF0ZSBldmVudHMKICAgIGVsc2lmICggJEV2ZW50IGVxICdBY3Rpb25VcGRhdGUnICkgewoKICAgICAgICAjIGdldCBvbGQgZGF0YQogICAgICAgIG15ICRPbGREYXRhID0gJFBhcmFte0RhdGF9LT57T2xkQWN0aW9uRGF0YX07CgogICAgICAgICMgY3JlYXRlIGhpc3RvcnkgZm9yIGFsbCBleHByZXNzaW9uIGZpZWxkcwogICAgICAgIG15IEBBY3Rpb25TdGF0aWMgPSBxdyggQWN0aW9uSUQgVXNlcklEIENoYW5nZUlEIE9sZEFjdGlvbkRhdGEgKTsKICAgICAgICBBQ1RJT05GSUVMRDoKICAgICAgICBmb3IgbXkgJEFjdGlvbkZpZWxkICggc29ydCBrZXlzICV7ICRQYXJhbXtEYXRhfSB9ICkgewoKICAgICAgICAgICAgIyBjaGVjayBmb3Igc3RhdGljIGZpZWxkcwogICAgICAgICAgICBuZXh0IEFDVElPTkZJRUxEIGlmIGdyZXAgeyAkXyBlcSAkQWN0aW9uRmllbGQgfSBAQWN0aW9uU3RhdGljOwoKICAgICAgICAgICAgIyBkbyBub3QgYWRkIGVtcHR5IGZpZWxkcyB0byBoaXN0b3J5CiAgICAgICAgICAgIG5leHQgQUNUSU9ORklFTEQgaWYgISRQYXJhbXtEYXRhfS0+eyRBY3Rpb25GaWVsZH07CgogICAgICAgICAgICAjIGNoZWNrIGlmIGZpZWxkIGhhcyBjaGFuZ2VkCiAgICAgICAgICAgIG15ICRGaWVsZEhhc0NoYW5nZWQgPSAkU2VsZi0+X0hhc0ZpZWxkQ2hhbmdlZCgKICAgICAgICAgICAgICAgIE5ldyA9PiAkUGFyYW17RGF0YX0tPnskQWN0aW9uRmllbGR9LAogICAgICAgICAgICAgICAgT2xkID0+ICRPbGREYXRhLT57JEFjdGlvbkZpZWxkfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY3JlYXRlIGhpc3Rvcnkgb25seSBmb3IgY2hhbmdlZCBmaWVsZHMKICAgICAgICAgICAgbmV4dCBBQ1RJT05GSUVMRCBpZiAhJEZpZWxkSGFzQ2hhbmdlZDsKCiAgICAgICAgICAgIHB1c2ggQEhpc3RvcnlBZGREYXRhLCB7CiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICA9PiAkUGFyYW17RGF0YX0tPntDaGFuZ2VJRH0sCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSA9PiAkRXZlbnQsCiAgICAgICAgICAgICAgICBGaWVsZG5hbWUgICA9PiAkQWN0aW9uRmllbGQsCiAgICAgICAgICAgICAgICBDb250ZW50TmV3ICA9PiAkUGFyYW17RGF0YX0tPntBY3Rpb25JRH0gLiAnJSUnIC4gJFBhcmFte0RhdGF9LT57JEFjdGlvbkZpZWxkfSwKICAgICAgICAgICAgICAgIENvbnRlbnRPbGQgID0+ICRQYXJhbXtEYXRhfS0+e0FjdGlvbklEfSAuICclJScgLiAkT2xkRGF0YS0+eyRBY3Rpb25GaWVsZH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CgogICAgIyBoYW5kbGUgYWN0aW9uIGRlbGV0ZSBldmVudHMKICAgIGVsc2lmICggJEV2ZW50IGVxICdBY3Rpb25EZWxldGUnICkgewoKICAgICAgICBwdXNoIEBIaXN0b3J5QWRkRGF0YSwgewogICAgICAgICAgICBDaGFuZ2VJRCAgICA9PiAkUGFyYW17RGF0YX0tPntDaGFuZ2VJRH0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlID0+ICRFdmVudCwKICAgICAgICAgICAgQ29udGVudE5ldyAgPT4gJFBhcmFte0RhdGF9LT57QWN0aW9uSUR9LAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICB9OwogICAgfQoKICAgICMgaGFuZGxlIGRlbGV0ZSBhbGwgYWN0aW9ucyBldmVudHMKICAgIGVsc2lmICggJEV2ZW50IGVxICdBY3Rpb25EZWxldGVBbGwnICkgewoKICAgICAgICBwdXNoIEBIaXN0b3J5QWRkRGF0YSwgewogICAgICAgICAgICBDaGFuZ2VJRCAgICA9PiAkUGFyYW17RGF0YX0tPntDaGFuZ2VJRH0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlID0+ICRFdmVudCwKICAgICAgICAgICAgQ29udGVudE5ldyAgPT4gJFBhcmFte0RhdGF9LT57Q29uZGl0aW9uSUR9LAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICB9OwogICAgfQoKICAgICMgaGFuZGxlIGFjdGlvbiBleGVjdXRlIGV2ZW50cwogICAgZWxzaWYgKCAkRXZlbnQgZXEgJ0FjdGlvbkV4ZWN1dGUnICkgewoKICAgICAgICBwdXNoIEBIaXN0b3J5QWRkRGF0YSwgewogICAgICAgICAgICBDaGFuZ2VJRCAgICA9PiAkUGFyYW17RGF0YX0tPntDaGFuZ2VJRH0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlID0+ICRFdmVudCwKICAgICAgICAgICAgQ29udGVudE5ldyAgPT4gJFBhcmFte0RhdGF9LT57QWN0aW9uSUR9IC4gJyUlJyAuICRQYXJhbXtEYXRhfS0+e0FjdGlvblJlc3VsdH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIH07CiAgICB9CgogICAgIyBlcnJvcgogICAgZWxzZSB7CgogICAgICAgICMgYW4gdW5rbm93biBldmVudAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiJEV2ZW50IGlzIGFuIHVua25vd24gZXZlbnQhIiwKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIHdyaXRlIHRvIHRoZSBoaXN0b3J5CiAgICByZXR1cm4gMSBpZiAhQEhpc3RvcnlBZGREYXRhOwoKICAgICMgaWYgdGhlcmUgaXMganVzdCBvbmUgaGlzdG9yeSBlbnRyeSB0byB3cml0ZQogICAgaWYgKCBzY2FsYXIgQEhpc3RvcnlBZGREYXRhID09IDEgKSB7CgogICAgICAgICMgd3JpdGUgdGhlIGZpcnN0IGFuZCBvbmx5IGVudHJ5IG9mIHRoZSBhcnJheSB0byB0aGUgaGlzdG9yeQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpIaXN0b3J5JyktPkhpc3RvcnlBZGQoCiAgICAgICAgICAgICV7ICRIaXN0b3J5QWRkRGF0YVswXSB9LAogICAgICAgICk7CiAgICB9CgogICAgIyB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGVudHJ5IHRvIHdyaXRlCiAgICAjIGxldCB0aGUgSGlzdG9yeUFkZE11bHRpcGxlIGZ1bmN0aW9uIGhhbmRsZSB0aGF0CiAgICBlbHNlIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SGlzdG9yeScpLT5IaXN0b3J5QWRkTXVsdGlwbGUoCiAgICAgICAgICAgIERhdGEgPT4gXEBIaXN0b3J5QWRkRGF0YSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9YmVnaW4gSW50ZXJuYWw6Cgo9aXRlbSBfSGFzRmllbGRDaGFuZ2VkKCkKClRoaXMgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIGEgZmllbGQgd2FzIGNoYW5nZWQgb3Igbm90LiBJdCByZXR1cm5zIDEgd2hlbiBmaWVsZAp3YXMgY2hhbmdlZCwgdW5kZWYgb3RocmV3aXNlLgoKICAgIG15ICRGaWVsZEhhc0NoYW5nZWQgPSAkSGlzdG9yeU9iamVjdC0+X0hhc0ZpZWxkQ2hhbmdlZCgKICAgICAgICBPbGQgPT4gJ29sZCB2YWx1ZScsICMgY2FuIGJlIGFycmF5IHJlZmVyZW5jZSBvciBoYXNoIHJlZmVyZW5jZSBhcyB3ZWxsCiAgICAgICAgTmV3ID0+ICduZXcgdmFsdWUnLCAjIGNhbiBiZSBhcnJheSByZWZlcmVuY2Ugb3IgaGFzaCByZWZlcmVuY2UgYXMgd2VsbAogICAgKTsKCj1jdXQKCnN1YiBfSGFzRmllbGRDaGFuZ2VkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBmaWVsZCBoYXMgY2hhbmdlZCB3aGVuIGVpdGhlciAnbmV3JyBvciAnb2xkIGlzIG5vdCBzZXQKICAgIHJldHVybiAxIGlmICEoICRQYXJhbXtOZXd9ICYmICRQYXJhbXtPbGR9ICkgJiYgKCAkUGFyYW17TmV3fSB8fCAkUGFyYW17T2xkfSApOwoKICAgICMgZmllbGQgaGFzIG5vdCBjaGFuZ2VkIHdoZW4gYm90aCB2YWx1ZXMgYXJlIGVtcHR5CiAgICByZXR1cm4gaWYgISRQYXJhbXtOZXd9ICYmICEkUGFyYW17T2xkfTsKCiAgICAjIHJldHVybiByZXN1bHQgb2YgJ2VxJyB3aGVuIGJvdGggcGFyYW1zIGFyZSBzY2FsYXJzCiAgICByZXR1cm4gJFBhcmFte05ld30gbmUgJFBhcmFte09sZH0gaWYgIXJlZiggJFBhcmFte05ld30gKSAmJiAhcmVmKCAkUGFyYW17T2xkfSApOwoKICAgICMgYSBmaWVsZCBoYXMgY2hhbmdlZCB3aGVuICdyZWYnIGlzIGRpZmZlcmVudAogICAgcmV0dXJuIDEgaWYgcmVmKCAkUGFyYW17TmV3fSApIG5lIHJlZiggJFBhcmFte09sZH0gKTsKCiAgICAjIGNoZWNrIGhhc2hlcwogICAgaWYgKCByZWYgJFBhcmFte05ld30gZXEgJ0hBU0gnICkgewoKICAgICAgICAjIGZpZWxkIGhhcyBjaGFuZ2VkIHdoZW4gbnVtYmVyIG9mIGtleXMgYXJlIGRpZmZlcmVudAogICAgICAgIHJldHVybiAxIGlmIHNjYWxhciBrZXlzICV7ICRQYXJhbXtOZXd9IH0gIT0gc2NhbGFyIGtleXMgJXsgJFBhcmFte09sZH0gfTsKCiAgICAgICAgIyBjaGVjayB0aGUgdmFsdWVzIGZvciBlYWNoIGtleQogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRQYXJhbXtOZXd9IH0gKSB7CiAgICAgICAgICAgIHJldHVybiAxIGlmICRQYXJhbXtOZXd9LT57JEtleX0gbmUgJFBhcmFte09sZH0tPnskS2V5fTsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBhcnJheXMKICAgIGlmICggcmVmICRQYXJhbXtOZXd9IGVxICdBUlJBWScgKSB7CgogICAgICAgICMgY2hhbmdlZCB3aGVuIG51bWJlciBvZiBlbGVtZW50cyBkaWZmZXIKICAgICAgICByZXR1cm4gMSBpZiBzY2FsYXIgQHsgJFBhcmFte05ld30gfSAhPSBzY2FsYXIgQHsgJFBhcmFte09sZH0gfTsKCiAgICAgICAgIyBjaGVjayBlYWNoIGVsZW1lbnQKICAgICAgICBmb3IgbXkgJEluZGV4ICggMCAuLiAkI3sgJFBhcmFte05ld30gfSApIHsKICAgICAgICAgICAgcmV0dXJuIDEgaWYgJFBhcmFte05ld30tPlskSW5kZXhdIG5lICRQYXJhbXtPbGR9LT5bJEluZGV4XTsKICAgICAgICB9CiAgICB9CgogICAgIyBmaWVsZCBoYXMgbm90IGJlZW4gY2hhbmdlZAogICAgcmV0dXJuOwp9CgoxOwoKPWVuZCBJbnRlcm5hbDoK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OkV2ZW50OjpIaXN0b3J5RGVsZXRlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Okhpc3RvcnknLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoRGF0YSBFdmVudCBDb25maWcgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGhhbmRsZSBkZWxldGlvbiBvZiBhIGNoYW5nZQogICAgaWYgKCAkUGFyYW17RXZlbnR9IGVxICdDaGFuZ2VEZWxldGVQb3N0JyApIHsKCiAgICAgICAgIyBkZWxldGUgaGlzdG9yeSBvZiBjaGFuZ2UKICAgICAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpIaXN0b3J5JyktPkNoYW5nZUhpc3RvcnlEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtEYXRhfS0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBoYW5kbGUgZXJyb3IKICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNoYW5nZURlbGV0ZSgpIGZhaWxlZCBmb3IgQ2hhbmdlSUQgJyRQYXJhbXtEYXRhfS0+e0NoYW5nZUlEfSchIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgIyBlcnJvcgogICAgZWxzZSB7CgogICAgICAgICMgYW4gdW5rbm93biBldmVudAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiJFBhcmFte0V2ZW50fSBpcyBhbiB1bmtub3duIGV2ZW50ISIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OkV2ZW50OjpOb3RpZmljYXRpb247Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SGlzdG9yeScsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpOb3RpZmljYXRpb24nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KERhdGEgRXZlbnQgQ29uZmlnIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkbyBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBldmVudCwgYmVjYXVzZSB3ZSBuZWVkIHRoaXMgdW5tb2RpZmllZCBpbiBsYXRlciBldmVudCBtb2R1bGVzCiAgICBteSAkRXZlbnQgPSAkUGFyYW17RXZlbnR9OwoKICAgICMgaW4gaGlzdG9yeSBldmVudCBoYW5kbGluZyB3ZSB1c2UgRXZlbnQgbmFtZSB3aXRob3V0IHRoZSB0cmFpbGluZyAnUG9zdCcKICAgICRFdmVudCA9fiBzeyBQb3N0IFx6IH17fXhtczsKCiAgICAjIGRpc3Rpbmd1aXNoIGJldHdlZW4gQ2hhbmdlIGFuZCBXb3JrT3JkZXIgZXZlbnRzLCBiYXNlZCBvbiBuYW1pbmcgY29udmVudGlvbgogICAgbXkgJFR5cGU7CiAgICBpZiAoICRFdmVudCA9fiBteyBcQSAoQ2hhbmdlfEFjdGlvbkV4ZWN1dGUpIH14bXMgKSB7CiAgICAgICAgJFR5cGUgPSAnQ2hhbmdlJzsKICAgIH0KICAgIGVsc2lmICggJEV2ZW50ID1+IG17IFxBIFdvcmtPcmRlciB9eG1zICkgewogICAgICAgICRUeXBlID0gJ1dvcmtPcmRlcic7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIG9iamVjdCB0eXBlIGZvciB0aGUgZXZlbnQgJyRFdmVudCchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCB0aGUgZXZlbnQgaWQsIGZvciBsb29raW5nIHVwIHRoZSBsaXN0IG9mIHJlbGV2YW50IHJ1bGVzCiAgICBteSAkRXZlbnRJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpIaXN0b3J5JyktPkhpc3RvcnlUeXBlTG9va3VwKAogICAgICAgIEhpc3RvcnlUeXBlID0+ICRFdmVudCwKICAgICk7CiAgICBpZiAoICEkRXZlbnRJRCApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkVuY291bnRlcmVkIHVua25vd24gZXZlbnQgJyRFdmVudCchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkTm90aWZpY2F0aW9uUnVsZUlEcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpOb3RpZmljYXRpb24nKS0+Tm90aWZpY2F0aW9uUnVsZVNlYXJjaCgKICAgICAgICBFdmVudElEID0+ICRFdmVudElELAogICAgKTsKICAgIGlmICggISROb3RpZmljYXRpb25SdWxlSURzICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ291bGQgbm90IGdldCBub3RpZmljYXRpb24gcnVsZXMgZm9yIHRoZSBldmVudCAnJEV2ZW50JyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgaW4gY2FzZSBvZiBhbiB1cGRhdGUsIHdlIGhhdmUgdGhlIG9sZCBkYXRhIGZvciBjb21wYXJpc29uCiAgICBteSAkT2xkRGF0YSA9ICRQYXJhbXtEYXRhfS0+eyJPbGQke1R5cGV9RGF0YSJ9OwoKICAgICMgVGhlIG5vdGlmaWNhdGlvbiBydWxlcyBhcmUgYmFzZWQgb24gbmFtZXMsIHdoaWxlIHRoZSBDaGFuZ2VVcGRhdGUtRnVuY3Rpb24KICAgICMgcHJpbWFyaWx5IGNhcmVzIGFib3V0IElEcy4gU28gdGhlcmUgbmVlZHMgdG8gYmUgYSBtYXBwaW5nLgogICAgbXkgJU5hbWUySUQgPSAoCiAgICAgICAgQ2hhbmdlU3RhdGUgICAgPT4gJ0NoYW5nZVN0YXRlSUQnLAogICAgICAgIFdvcmtPcmRlclN0YXRlID0+ICdXb3JrT3JkZXJTdGF0ZUlEJywKICAgICk7CgogICAgIyBsb29wIG92ZXIgdGhlIG5vdGlmaWNhdGlvbiBydWxlcyBhbmQgY2hlY2sgdGhlIGNvbmRpdGlvbgogICAgUlVMRUlEOgogICAgZm9yIG15ICRSdWxlSUQgKCBAeyROb3RpZmljYXRpb25SdWxlSURzfSApIHsKICAgICAgICBteSAkUnVsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpOb3RpZmljYXRpb24nKS0+Tm90aWZpY2F0aW9uUnVsZUdldCgKICAgICAgICAgICAgSUQgPT4gJFJ1bGVJRCwKICAgICAgICApOwoKICAgICAgICBteSAkQXR0cmlidXRlID0gJFJ1bGUtPntBdHRyaWJ1dGV9IHx8ICcnOwogICAgICAgIGlmICggJE5hbWUySUR7JEF0dHJpYnV0ZX0gKSB7CiAgICAgICAgICAgICRBdHRyaWJ1dGUgPSAkTmFtZTJJRHskQXR0cmlidXRlfTsKICAgICAgICB9CgogICAgICAgICMgbm8gbm90aWZpY2F0aW9uIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHJlbGV2YW50CiAgICAgICAgaWYgKCAkQXR0cmlidXRlICYmICFleGlzdHMgJFBhcmFte0RhdGF9LT57JEF0dHJpYnV0ZX0gKSB7CiAgICAgICAgICAgIG5leHQgUlVMRUlEOwogICAgICAgIH0KCiAgICAgICAgIyBpbiBjYXNlIG9mIGFuIHVwZGF0ZSwgY2hlY2sgd2hldGhlciB0aGUgYXR0cmlidXRlIGhhcyBjaGFuZ2VkCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQXR0cmlidXRlCiAgICAgICAgICAgICYmICggJEV2ZW50IGVxICdDaGFuZ2VVcGRhdGUnIHx8ICRFdmVudCBlcSAnV29ya09yZGVyVXBkYXRlJyApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRIYXNDaGFuZ2VkID0gJFNlbGYtPl9IYXNGaWVsZENoYW5nZWQoCiAgICAgICAgICAgICAgICBOZXcgPT4gJFBhcmFte0RhdGF9LT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICBPbGQgPT4gJE9sZERhdGEtPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgUlVMRUlEIGlmICEkSGFzQ2hhbmdlZDsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSBzdHJpbmcgdG8gbWF0Y2ggYWdhaW5zdAogICAgICAgICMgVE9ETzogc3VwcG9ydCBvdGhlciBjb21iaW5hdGlvbnMsIG1heWJlIHVzZSBHZW5lcmFsQ2F0YWxvZyBkaXJlY3RseQogICAgICAgIG15ICROZXdGaWVsZENvbnRlbnQgPSAkQXR0cmlidXRlID8gJFBhcmFte0RhdGF9LT57JEF0dHJpYnV0ZX0gOiAnJzsKCiAgICAgICAgaWYgKCAkQXR0cmlidXRlIGVxICdDaGFuZ2VTdGF0ZUlEJyApIHsKICAgICAgICAgICAgJE5ld0ZpZWxkQ29udGVudCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZVN0YXRlTG9va3VwKAogICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRCA9PiAkTmV3RmllbGRDb250ZW50LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRBdHRyaWJ1dGUgZXEgJ1dvcmtPcmRlclN0YXRlSUQnICkgewogICAgICAgICAgICAkTmV3RmllbGRDb250ZW50ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyU3RhdGVMb29rdXAoCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZUlEID0+ICROZXdGaWVsZENvbnRlbnQsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNob3VsZCB0aGUgbm90aWZpY2F0aW9uIGJlIHNlbnQgPwogICAgICAgICMgdGhlIHgtbW9kaWZpZXIgaXMgaGFybWZ1bCBoZXJlLCBhcyAkUnVsZS0+e1J1bGV9IGNhbiBjb250YWluIHNwYWNlcwogICAgICAgIGlmICgKICAgICAgICAgICAgZGVmaW5lZCAkUnVsZS0+e1J1bGV9CiAgICAgICAgICAgICYmIGRlZmluZWQgJE5ld0ZpZWxkQ29udGVudAogICAgICAgICAgICAmJiAkTmV3RmllbGRDb250ZW50ICF+IG0vXiRSdWxlLT57UnVsZX0kLwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBuZXh0IFJVTEVJRDsKICAgICAgICB9CgogICAgICAgICMgZGV0ZXJtaW5lIGxpc3Qgb2YgYWdlbnRzIGFuZCBjdXN0b21lcnMKICAgICAgICBteSAkQWdlbnRBbmRDdXN0b21lcklEcyA9ICRTZWxmLT5fQWdlbnRBbmRDdXN0b21lcklEc0dldCgKICAgICAgICAgICAgUmVjaXBpZW50cyAgPT4gJFJ1bGUtPntSZWNpcGllbnRzfSwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJFR5cGUsCiAgICAgICAgICAgIEV2ZW50ICAgICAgID0+ICRFdmVudCwKICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJFBhcmFte0RhdGF9LT57Q2hhbmdlSUR9LAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkUGFyYW17RGF0YX0tPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIE9sZERhdGEgICAgID0+ICRPbGREYXRhLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBuZXh0IFJVTEVJRCBpZiAhJEFnZW50QW5kQ3VzdG9tZXJJRHM7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpOb3RpZmljYXRpb24nKS0+Tm90aWZpY2F0aW9uU2VuZCgKICAgICAgICAgICAgJXskQWdlbnRBbmRDdXN0b21lcklEc30sCiAgICAgICAgICAgIFR5cGUgICA9PiAkVHlwZSwKICAgICAgICAgICAgRXZlbnQgID0+ICRFdmVudCwKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBEYXRhICAgPT4gewogICAgICAgICAgICAgICAgJXsgJFBhcmFte0RhdGF9IH0sICAgICMgZG8gbm90IHBhc3MgYXMgcmVmZXJlbmNlLCBhcyBpdCB3b3VsZCBpbmZsdWVuY2UgbGF0ZXIgZXZlbnRzIQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgTWVzc2FnZSA9PiAkUnVsZS0+e01lc3NhZ2V9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1iZWdpbiBJbnRlcm5hbDoKCj1pdGVtIF9IYXNGaWVsZENoYW5nZWQoKQoKVGhpcyBtZXRob2QgY2hlY2tzIHdoZXRoZXIgYSBmaWVsZCB3YXMgY2hhbmdlZCBvciBub3QuIEl0IHJldHVybnMgMSB3aGVuIGZpZWxkCndhcyBjaGFuZ2VkLCAwIG90aGVyd2lzZQoKICAgIG15ICRGaWVsZEhhc0NoYW5nZWQgPSAkTm90aWZpY2F0aW9uRXZlbnRPYmplY3QtPl9IYXNGaWVsZENoYW5nZWQoCiAgICAgICAgT2xkID0+ICdvbGQgdmFsdWUnLCAjIGNhbiBiZSBhcnJheSByZWZlcmVuY2Ugb3IgaGFzaCByZWZlcmVuY2UgYXMgd2VsbAogICAgICAgIE5ldyA9PiAnbmV3IHZhbHVlJywgIyBjYW4gYmUgYXJyYXkgcmVmZXJlbmNlIG9yIGhhc2ggcmVmZXJlbmNlIGFzIHdlbGwKICAgICk7Cgo9Y3V0CgpzdWIgX0hhc0ZpZWxkQ2hhbmdlZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZmllbGQgaGFzIGNoYW5nZWQgd2hlbiBlaXRoZXIgJ25ldycgb3IgJ29sZCBpcyBub3Qgc2V0CiAgICByZXR1cm4gMSBpZiAhKCAkUGFyYW17TmV3fSAmJiAkUGFyYW17T2xkfSApICYmICggJFBhcmFte05ld30gfHwgJFBhcmFte09sZH0gKTsKCiAgICAjIGZpZWxkIGhhcyBub3QgY2hhbmdlZCB3aGVuIGJvdGggdmFsdWVzIGFyZSBlbXB0eQogICAgcmV0dXJuIGlmICEkUGFyYW17TmV3fSAmJiAhJFBhcmFte09sZH07CgogICAgIyByZXR1cm4gcmVzdWx0IG9mICdlcScgd2hlbiBib3RoIHBhcmFtcyBhcmUgc2NhbGFycwogICAgcmV0dXJuICRQYXJhbXtOZXd9IG5lICRQYXJhbXtPbGR9IGlmICFyZWYoICRQYXJhbXtOZXd9ICkgJiYgIXJlZiggJFBhcmFte09sZH0gKTsKCiAgICAjIGEgZmllbGQgaGFzIGNoYW5nZWQgd2hlbiAncmVmJyBpcyBkaWZmZXJlbnQKICAgIHJldHVybiAxIGlmIHJlZiggJFBhcmFte05ld30gKSBuZSByZWYoICRQYXJhbXtPbGR9ICk7CgogICAgIyBjaGVjayBoYXNoZXMKICAgIGlmICggcmVmICRQYXJhbXtOZXd9IGVxICdIQVNIJyApIHsKCiAgICAgICAgIyBmaWVsZCBoYXMgY2hhbmdlZCB3aGVuIG51bWJlciBvZiBrZXlzIGFyZSBkaWZmZXJlbnQKICAgICAgICByZXR1cm4gMSBpZiBzY2FsYXIga2V5cyAleyAkUGFyYW17TmV3fSB9ICE9IHNjYWxhciBrZXlzICV7ICRQYXJhbXtPbGR9IH07CgogICAgICAgICMgY2hlY2sgdGhlIHZhbHVlcyBmb3IgZWFjaCBrZXkKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkUGFyYW17TmV3fSB9ICkgewogICAgICAgICAgICByZXR1cm4gMSBpZiAkUGFyYW17TmV3fS0+eyRLZXl9IG5lICRQYXJhbXtPbGR9LT57JEtleX07CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgYXJyYXlzCiAgICBpZiAoIHJlZiAkUGFyYW17TmV3fSBlcSAnQVJSQVknICkgewoKICAgICAgICAjIGNoYW5nZWQgd2hlbiBudW1iZXIgb2YgZWxlbWVudHMgZGlmZmVyCiAgICAgICAgcmV0dXJuIDEgaWYgc2NhbGFyIEB7ICRQYXJhbXtOZXd9IH0gIT0gc2NhbGFyIEB7ICRQYXJhbXtPbGR9IH07CgogICAgICAgICMgY2hlY2sgZWFjaCBlbGVtZW50CiAgICAgICAgZm9yIG15ICRJbmRleCAoIDAgLi4gJCN7ICRQYXJhbXtOZXd9IH0gKSB7CiAgICAgICAgICAgIHJldHVybiAxIGlmICRQYXJhbXtOZXd9LT5bJEluZGV4XSBuZSAkUGFyYW17T2xkfS0+WyRJbmRleF07CiAgICAgICAgfQogICAgfQoKICAgICMgZmllbGQgaGFzIG5vdCBiZWVuIGNoYW5nZWQKICAgIHJldHVybiAwOwp9Cgo9aXRlbSBfQWdlbnRBbmRDdXN0b21lcklEc0dldCgpCgpHZXQgdGhlIGFnZW50IGFuZCBjdXN0b21lciBJRHMgZnJvbSB0aGUgcmVjaXBpZW50IGxpc3QuCgogICAgbXkgJEFnZW50QW5kQ3VzdG9tZXJJRHMgPSAkSGlzdG9yeU9iamVjdC0+X0FnZW50QW5kQ3VzdG9tZXJJRHNHZXQoCiAgICAgICAgUmVjaXBpZW50cyA9PiBbJ0NoYW5nZUJ1aWxkZXInLCAnQ2hhbmdlTWFuYWdlciddLAogICAgKTsKCnJldHVybnMKCiAgICAkQWdlbnRBbmRDdXN0b21lcklEcyA9IHsKICAgICAgICBBZ2VudElEcyAgICA9PiBbIDIsIDQgXSwKICAgICAgICBDdXN0b21lcklEcyA9PiBbXSwKICAgIH07Cgo9Y3V0CgpzdWIgX0FnZW50QW5kQ3VzdG9tZXJJRHNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkV29ya09yZGVyQWdlbnRJRDsKICAgIGlmICggJFBhcmFte1R5cGV9IGVxICdXb3JrT3JkZXInICkgewoKICAgICAgICAjIGNoZWNrIFdvcmtPcmRlcklECiAgICAgICAgaWYgKCAhJFBhcmFte1dvcmtPcmRlcklEfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBwYXJhbSAnV29ya09yZGVySUQnIGlzIHJlcXVpcmVkIGZvciBXb3JrT3JkZXIgZXZlbnRzISIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFBhcmFte0V2ZW50fSBlcSAnV29ya09yZGVyRGVsZXRlJyApIHsKCiAgICAgICAgICAgICMgdGhlIHdvcmtvcmRlciBpcyBhbHJlYWR5IGRlbGV0ZWQsIHNvIHdlIGxvb2sgYXQgdGhlIE9sZERhdGEKICAgICAgICAgICAgJFBhcmFte0NoYW5nZUlEfSA9ICRQYXJhbXtPbGREYXRhfS0+e0NoYW5nZUlEfTsKICAgICAgICAgICAgJFdvcmtPcmRlckFnZW50SUQgPSAkUGFyYW17T2xkRGF0YX0tPntXb3JrT3JkZXJBZ2VudElEfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIGdldCBDaGFuZ2VJRCBhbmQgV29ya09yZGVyQWdlbnRJRCBmcm9tIHRoZSBXb3JrT3JkZXIsCiAgICAgICAgICAgICMgdGhlIFdvcmtPcmRlckFnZW50IG1pZ2h0IGhhdmUgYmVlbiByZWNlbnRseSB1cGRhdGVkCiAgICAgICAgICAgIG15ICRXb3JrT3JkZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpLT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkUGFyYW17V29ya09yZGVySUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCgogICAgICAgICAgICApOwogICAgICAgICAgICAkUGFyYW17Q2hhbmdlSUR9ID0gJFdvcmtPcmRlci0+e0NoYW5nZUlEfTsKICAgICAgICAgICAgJFdvcmtPcmRlckFnZW50SUQgPSAkV29ya09yZGVyLT57V29ya09yZGVyQWdlbnRJRH07CiAgICAgICAgfQogICAgfQoKICAgICMgdGhlc2UgYXJyYXlzIHdpbGwgYmUgcmV0dXJuZWQKICAgIG15ICggQEFnZW50SURzLCBAQ3VzdG9tZXJJRHMgKTsKCiAgICAjIG5lZWRlZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFjdHVhbCByZWNpcGllbnRzCiAgICBteSAkQ2hhbmdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJENoYW5nZTsKICAgIHJldHVybiBpZiByZWYgJENoYW5nZSBuZSAnSEFTSCc7CiAgICByZXR1cm4gaWYgISV7JENoYW5nZX07CgogICAgZm9yIG15ICRSZWNpcGllbnQgKCBAeyAkUGFyYW17UmVjaXBpZW50c30gfSApIHsKCiAgICAgICAgaWYgKCAkUmVjaXBpZW50IGVxICdDaGFuZ2VCdWlsZGVyJyB8fCAkUmVjaXBpZW50IGVxICdDaGFuZ2VNYW5hZ2VyJyApIHsKCiAgICAgICAgICAgICMgdGFrZSB0aGUgYnVpbGRlciBvciBtYW5hZ2VyIGZyb20gdGhlIGN1cnJlbnQgY2hhbmdlIGRhdGEKICAgICAgICAgICAgcHVzaCBAQWdlbnRJRHMsICRDaGFuZ2UtPnsgJFJlY2lwaWVudCAuICdJRCcgfTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkUmVjaXBpZW50IGVxICdPbGRDaGFuZ2VCdWlsZGVyJyB8fCAkUmVjaXBpZW50IGVxICdPbGRDaGFuZ2VNYW5hZ2VyJyApIHsKICAgICAgICAgICAgaWYgKCAkUGFyYW17RXZlbnR9IG5lICdDaGFuZ2VVcGRhdGUnICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiUmVjaXBpZW50ICRSZWNpcGllbnQgaXMgb25seSB2YWxpZCBmb3IgQ2hhbmdlVXBkYXRlIGV2ZW50cywgIgogICAgICAgICAgICAgICAgICAgICAgICAuICJidXQgdGhlIGV2ZW50IHdhcyBhICckUGFyYW17RXZlbnR9JyBldmVudCEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIHRha2UgdGhlIGJ1aWxkZXIgb3IgbWFuYWdlciBmcm9tIHRoZSBvcmlnaW5hbCBjaGFuZ2UgZGF0YQogICAgICAgICAgICAgICAgJFJlY2lwaWVudCA9fiBzeyBcQSBPbGQgfXt9eG1zOwogICAgICAgICAgICAgICAgcHVzaCBAQWdlbnRJRHMsICRQYXJhbXtPbGREYXRhfS0+eyAkUmVjaXBpZW50IC4gJ0lEJyB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFJlY2lwaWVudCBlcSAnQ0FCQ3VzdG9tZXJzJyApIHsKICAgICAgICAgICAgcHVzaCBAQ3VzdG9tZXJJRHMsIEB7ICRDaGFuZ2UtPntDQUJDdXN0b21lcnN9IH07CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFJlY2lwaWVudCBlcSAnQ0FCQWdlbnRzJyApIHsKICAgICAgICAgICAgcHVzaCBAQWdlbnRJRHMsIEB7ICRDaGFuZ2UtPntDQUJBZ2VudHN9IH07CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFJlY2lwaWVudCBlcSAnV29ya09yZGVyQWdlbnQnICkgewogICAgICAgICAgICBpZiAoICRQYXJhbXtUeXBlfSBuZSAnV29ya09yZGVyJyApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlJlY2lwaWVudCAkUmVjaXBpZW50IGlzIG9ubHkgdmFsaWQgZm9yIHdvcmtvcmRlciBldmVudHMgIgogICAgICAgICAgICAgICAgICAgICAgICAuICJidXQgdGhlIGV2ZW50IHdhcyBhICckUGFyYW17RXZlbnR9JyBldmVudCEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHB1c2ggQEFnZW50SURzLCAkV29ya09yZGVyQWdlbnRJRDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRSZWNpcGllbnQgZXEgJ09sZFdvcmtPcmRlckFnZW50JyApIHsKICAgICAgICAgICAgaWYgKCAkUGFyYW17RXZlbnR9IG5lICdXb3JrT3JkZXJVcGRhdGUnICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiUmVjaXBpZW50ICRSZWNpcGllbnQgaXMgb25seSB2YWxpZCBmb3IgV29ya09yZGVyVXBkYXRlIGV2ZW50cyAiCiAgICAgICAgICAgICAgICAgICAgICAgIC4gImJ1dCB0aGUgZXZlbnQgd2FzIGEgJyRQYXJhbXtFdmVudH0nIGV2ZW50ISIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgdGFrZSB0aGUgd29ya29yZGVyIGFnZW50IGZyb20gdGhlIG9yaWdpbmFsIHdvcmtvcmRlciBkYXRhCiAgICAgICAgICAgICAgICAkUmVjaXBpZW50ID1+IHN7IFxBIE9sZCB9e314bXM7CiAgICAgICAgICAgICAgICBwdXNoIEBBZ2VudElEcywgJFBhcmFte09sZERhdGF9LT57ICRSZWNpcGllbnQgLiAnSUQnIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkUmVjaXBpZW50IGVxICdXb3JrT3JkZXJBZ2VudHMnICkgewoKICAgICAgICAgICAgIyBsb29wIG92ZXIgdGhlIHdvcmtvcmRlcnMgb2YgYSBjaGFuZ2UgYW5kIGdldCB0aGVpciB3b3Jrb3JkZXIgYWdlbnRzCiAgICAgICAgICAgIGZvciBteSAkV29ya09yZGVySUQgKCBAeyAkQ2hhbmdlLT57V29ya09yZGVySURzfSB9ICkgewogICAgICAgICAgICAgICAgbXkgJFdvcmtPcmRlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlckdldCgKICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHB1c2ggQEFnZW50SURzLCAkV29ya09yZGVyLT57V29ya09yZGVyQWdlbnRJRH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkUmVjaXBpZW50IGVxICdDaGFuZ2VJbml0aWF0b3JzJyApIHsKCiAgICAgICAgICAgICMgZ2V0IGxpbmtlZCBvYmplY3RzIHdoaWNoIGFyZSBkaXJlY3RseSBsaW5rZWQgd2l0aCB0aGlzIGNoYW5nZSBvYmplY3QKICAgICAgICAgICAgbXkgJExpbmtMaXN0V2l0aERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgICAgICAgICAgT2JqZWN0ID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICAgICAgICAgIEtleSAgICA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgICAgICAgICAgU3RhdGUgID0+ICdWYWxpZCcsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBjaGFuZ2UgaW5pdGlhdG9ycyAoY3VzdG9tZXIgdXNlcnMgb2YgbGlua2VkIHRpY2tldHMpCiAgICAgICAgICAgICMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgbGlzdCBhIGRpc3BsYXllZCBpbiBDaGFuZ2Vab29tLgogICAgICAgICAgICBteSAkTGlua0xpc3QgPSAkTGlua0xpc3RXaXRoRGF0YS0+e1RpY2tldH0gfHwge307CiAgICAgICAgICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXskTGlua0xpc3R9ICkgewoKICAgICAgICAgICAgICAgICMgdGhlIGxpbmtlZCB0aWNrZXRzIGFyZSBhbHdheXMgdGhlICdTb3VyY2UnLgogICAgICAgICAgICAgICAgZm9yIG15ICRUaWNrZXREYXRhICggdmFsdWVzICV7ICRMaW5rTGlzdC0+eyRMaW5rVHlwZX0tPntTb3VyY2V9IH0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgVGhlIGRhdGEgZm9yIHRoZSBsaW5rZWQgdGlja2V0IGNhbiBoYXZlIGEgY3VzdG9tZXIgaWQuCiAgICAgICAgICAgICAgICAgICAgIyBJZiBpdCBkb2Vzbid0LCBmYWxsIGJhY2sgdG8gdGhlIG93bmVyLgogICAgICAgICAgICAgICAgICAgIGlmICggJFRpY2tldERhdGEtPntDdXN0b21lclVzZXJJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEN1c3RvbWVySURzLCAkVGlja2V0RGF0YS0+e0N1c3RvbWVyVXNlcklEfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEFnZW50SURzLCAkVGlja2V0RGF0YS0+e093bmVySUR9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRSZWNpcGllbnQgPX4gbXsgXEEgR3JvdXBJVFNNQ2hhbmdlKHxCdWlsZGVyfE1hbmFnZXIpIFx6IH14bXMgKSB7CgogICAgICAgICAgICBteSAlUmVjaXBpZW50Mkdyb3VwID0gKAogICAgICAgICAgICAgICAgR3JvdXBJVFNNQ2hhbmdlICAgICAgICA9PiAnaXRzbS1jaGFuZ2UnLAogICAgICAgICAgICAgICAgR3JvdXBJVFNNQ2hhbmdlQnVpbGRlciA9PiAnaXRzbS1jaGFuZ2UtYnVpbGRlcicsCiAgICAgICAgICAgICAgICBHcm91cElUU01DaGFuZ2VNYW5hZ2VyID0+ICdpdHNtLWNoYW5nZS1tYW5hZ2VyJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IGdyb3VwIGlkCiAgICAgICAgICAgIG15ICRHcm91cElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTG9va3VwKAogICAgICAgICAgICAgICAgR3JvdXAgPT4gJFJlY2lwaWVudDJHcm91cHskUmVjaXBpZW50fQogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgbWVtYmVycyBvZiBncm91cAogICAgICAgICAgICBteSAlVXNlcnMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgICAgICAgICAgR3JvdXBJRCA9PiAkR3JvdXBJRCwKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ3JvJywKICAgICAgICAgICAgICAgIFJlc3VsdCAgPT4gJ0hBU0gnLAogICAgICAgICAgICAgICAgQ2FjaGVkICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcHVzaCBAQWdlbnRJRHMsIGtleXMgJVVzZXJzOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlVua25vd24gcmVjaXBpZW50ICckUmVjaXBpZW50JyEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbm8gbmVlZCB0byBlbGltaW5hdGUgZHVwbGljYXRlcywgTm90aWZpY2F0aW9uU2VuZCgpIHRha2VzIGNhcmUgb2YgdGhhdAogICAgIyByZW1vdmUgZW1wdHkgSURzCiAgICBAQWdlbnRJRHMgICAgPSBncmVwIHskX30gQEFnZW50SURzOwogICAgQEN1c3RvbWVySURzID0gZ3JlcCB7JF99IEBDdXN0b21lcklEczsKCiAgICBteSAlQWdlbnRBbmRDdXN0b21lcklEcyA9ICgKICAgICAgICBBZ2VudElEcyAgICA9PiBcQEFnZW50SURzLAogICAgICAgIEN1c3RvbWVySURzID0+IFxAQ3VzdG9tZXJJRHMsCiAgICApOwoKICAgIHJldHVybiBcJUFnZW50QW5kQ3VzdG9tZXJJRHM7Cn0KCjE7Cgo9ZW5kIEludGVybmFsOgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OkV2ZW50OjpUb29sQmFyQ2hhbmdlTWFuYWdlckNhY2hlRGVsZXRlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KERhdGEgRXZlbnQgQ29uZmlnIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgdGhlIGNhY2hlIHR5cGUgcHJlZml4CiAgICBteSAkQ2FjaGVUeXBlUHJlZml4ID0gJ0lUU01DaGFuZ2VNYW5hZ2VtZW50VG9vbEJhckNoYW5nZU1hbmFnZXInOwoKICAgICMgaGFuZGxlIGFkZGluZyBvZiBhIGNoYW5nZQogICAgaWYgKCAkUGFyYW17RXZlbnR9IGVxICdDaGFuZ2VBZGRQb3N0JyApIHsKCiAgICAgICAgIyBkbyBub3RoaW5nIGlmIHRoZSBDaGFuZ2VNYW5hZ2VySUQgd2FzIG5vdCBzZXQKICAgICAgICByZXR1cm4gMSBpZiAhJFBhcmFte0RhdGF9LT57Q2hhbmdlTWFuYWdlcklEfTsKCiAgICAgICAgIyBzZXQgdGhlIGNhY2hlIHR5cGUKICAgICAgICBteSAkQ2FjaGVUeXBlID0gJENhY2hlVHlwZVByZWZpeCAuICRQYXJhbXtEYXRhfS0+e0NoYW5nZU1hbmFnZXJJRH07CgogICAgICAgICMgZGVsZXRlIHRoZSBjYWNoZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICRDYWNoZVR5cGUsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgIyBoYW5kbGUgdXBkYXRlIG9mIGEgY2hhbmdlCiAgICBlbHNpZiAoICRQYXJhbXtFdmVudH0gZXEgJ0NoYW5nZVVwZGF0ZVBvc3QnICkgewoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgZGF0YSBpcyBpbml0aWFsaXplZAogICAgICAgICRQYXJhbXtEYXRhfS0+e0NoYW5nZU1hbmFnZXJJRH0gfHw9ICcnOwogICAgICAgICRQYXJhbXtEYXRhfS0+e09sZENoYW5nZURhdGF9LT57Q2hhbmdlTWFuYWdlcklEfSB8fD0gJyc7CgogICAgICAgICMgZG8gbm90aGluZyBpZiB0aGUgQ2hhbmdlTWFuYWdlcklEIGRpZCBub3QgY2hhbmdlCiAgICAgICAgcmV0dXJuIDEKICAgICAgICAgICAgaWYgJFBhcmFte0RhdGF9LT57Q2hhbmdlTWFuYWdlcklEfSBlcSAkUGFyYW17RGF0YX0tPntPbGRDaGFuZ2VEYXRhfS0+e0NoYW5nZU1hbmFnZXJJRH07CgogICAgICAgICMgc2V0IHRoZSBjYWNoZSB0eXBlIHBvc3RmaXgKICAgICAgICBteSBAQ2FjaGVUeXBlUG9zdGZpeGVzID0gKAogICAgICAgICAgICAkUGFyYW17RGF0YX0tPntDaGFuZ2VNYW5hZ2VySUR9LAogICAgICAgICAgICAkUGFyYW17RGF0YX0tPntPbGRDaGFuZ2VEYXRhfS0+e0NoYW5nZU1hbmFnZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGhlIGNhY2hlIGZvciB0aGUgb2xkIGFuZCB0aGUgY3VycmVudCBjaGFuZ2UgbWFuYWdlcgogICAgICAgIENBQ0hFVFlQRVBPU1RGSVg6CiAgICAgICAgZm9yIG15ICRDYWNoZVR5cGVQb3N0Zml4IChAQ2FjaGVUeXBlUG9zdGZpeGVzKSB7CgogICAgICAgICAgICAjIGRvIG5vdGhpbmcgaWYgdGhlIENoYW5nZU1hbmFnZXJJRCB3YXMgbm90IHNldAogICAgICAgICAgICBuZXh0IENBQ0hFVFlQRVBPU1RGSVggaWYgISRDYWNoZVR5cGVQb3N0Zml4OwoKICAgICAgICAgICAgIyBzZXQgdGhlIGNhY2hlIHR5cGUKICAgICAgICAgICAgbXkgJENhY2hlVHlwZSA9ICRDYWNoZVR5cGVQcmVmaXggLiAkQ2FjaGVUeXBlUG9zdGZpeDsKCiAgICAgICAgICAgICMgZGVsZXRlIHRoZSBjYWNoZQogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJENhY2hlVHlwZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgaGFuZGxlIGRlbGV0aW5nIGEgY2hhbmdlCiAgICBlbHNpZiAoICRQYXJhbXtFdmVudH0gZXEgJ0NoYW5nZURlbGV0ZVBvc3QnICkgewoKICAgICAgICAjIGRvIG5vdGhpbmcgaWYgdGhlIENoYW5nZU1hbmFnZXJJRCB3YXMgbm90IHNldAogICAgICAgIHJldHVybiAxIGlmICEkUGFyYW17RGF0YX0tPntPbGRDaGFuZ2VEYXRhfS0+e0NoYW5nZU1hbmFnZXJJRH07CgogICAgICAgICMgc2V0IHRoZSBjYWNoZSB0eXBlCiAgICAgICAgbXkgJENhY2hlVHlwZSA9ICRDYWNoZVR5cGVQcmVmaXggLiAkUGFyYW17RGF0YX0tPntPbGRDaGFuZ2VEYXRhfS0+e0NoYW5nZU1hbmFnZXJJRH07CgogICAgICAgICMgZGVsZXRlIHRoZSBjYWNoZQogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgICAgICBUeXBlID0+ICRDYWNoZVR5cGUsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OkV2ZW50OjpUb29sQmFyTXlDQUJDYWNoZURlbGV0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhEYXRhIEV2ZW50IENvbmZpZyBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IHRoZSBjYWNoZSB0eXBlIHByZWZpeAogICAgbXkgJENhY2hlVHlwZVByZWZpeCA9ICdJVFNNQ2hhbmdlTWFuYWdlbWVudFRvb2xCYXJNeUNBQic7CgogICAgIyBoYW5kbGUgdXBkYXRlIG9mIGEgQ0FCCiAgICBpZiAoICRQYXJhbXtFdmVudH0gZXEgJ0NoYW5nZUNBQlVwZGF0ZVBvc3QnICkgewoKICAgICAgICAjIGRvIG5vdGhpbmcgaWYgdGhlIENBQkFnZW50cyB3ZXJlIG5vdCB1cGRhdGVkCiAgICAgICAgcmV0dXJuIDEgaWYgISRQYXJhbXtEYXRhfS0+e0NBQkFnZW50c307CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBkYXRhIGlzIGluaXRpYWxpemVkCiAgICAgICAgJFBhcmFte0RhdGF9LT57Q0FCQWdlbnRzfSB8fD0gW107CiAgICAgICAgJFBhcmFte0RhdGF9LT57T2xkQ2hhbmdlQ0FCRGF0YX0tPntDQUJBZ2VudHN9IHx8PSBbXTsKCiAgICAgICAgIyBidWlsZCBsb29rdXAgaGFzaCBmb3IgQ0FCQWdlbnRzIGZyb20gIm5ldyIgYW5kICJvbGQiIEFnZW50cwogICAgICAgIG15ICVDaGFuZ2VkQ0FCQWdlbnRzTG9va3VwOwogICAgICAgIGZvciBteSAkQ0FCQWdlbnQgKAogICAgICAgICAgICBAeyAkUGFyYW17RGF0YX0tPntDQUJBZ2VudHN9IH0sCiAgICAgICAgICAgIEB7ICRQYXJhbXtEYXRhfS0+e09sZENoYW5nZUNBQkRhdGF9LT57Q0FCQWdlbnRzfSB9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRDaGFuZ2VkQ0FCQWdlbnRzTG9va3VweyRDQUJBZ2VudH0rKzsKICAgICAgICB9CgogICAgICAgICMgZmluZCB0aGUgQ0FCQWdlbnRzIHdoaWNoIGhhdmUgYmVlbiBjaGFuZ2VkLCB3aGljaCBhcmUgb25seSBhZ2VudHMgd2l0aCBhIGNvdW50IG9mIGV4YWN0bHkgb25lCiAgICAgICAgbXkgQENoYW5nZWRDQUJBZ2VudHM7CiAgICAgICAgZm9yIG15ICRDQUJBZ2VudCAoIHNvcnQga2V5cyAlQ2hhbmdlZENBQkFnZW50c0xvb2t1cCApIHsKICAgICAgICAgICAgaWYgKCAkQ2hhbmdlZENBQkFnZW50c0xvb2t1cHskQ0FCQWdlbnR9ID09IDEgKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBDaGFuZ2VkQ0FCQWdlbnRzLCAkQ0FCQWdlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIGNhY2hlIGZvciBhbGwgY2hhbmdlZCBDQUJBZ2VudHMKICAgICAgICBmb3IgbXkgJENBQkFnZW50IChAQ2hhbmdlZENBQkFnZW50cykgewoKICAgICAgICAgICAgIyBzZXQgdGhlIGNhY2hlIHR5cGUKICAgICAgICAgICAgbXkgJENhY2hlVHlwZSA9ICRDYWNoZVR5cGVQcmVmaXggLiAkQ0FCQWdlbnQ7CgogICAgICAgICAgICAjIGRlbGV0ZSB0aGUgY2FjaGUKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgICAgICBUeXBlID0+ICRDYWNoZVR5cGUsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIGhhbmRsZSBkZWxldGluZyBhIENBQgogICAgZWxzaWYgKCAkUGFyYW17RXZlbnR9IGVxICdDaGFuZ2VDQUJEZWxldGVQb3N0JyApIHsKCiAgICAgICAgIyBkbyBub3RoaW5nIGlmIHRoZXJlIHdlcmUgbm8gQ0FCQWdlbnRzIHNldAogICAgICAgIHJldHVybiAxIGlmICEkUGFyYW17RGF0YX0tPntPbGRDaGFuZ2VDQUJEYXRhfS0+e0NBQkFnZW50c307CiAgICAgICAgcmV0dXJuIDEgaWYgIUB7ICRQYXJhbXtEYXRhfS0+e09sZENoYW5nZUNBQkRhdGF9LT57Q0FCQWdlbnRzfSB9OwoKICAgICAgICAjIGRlbGV0ZSBjYWNoZSBmb3IgYWxsIENBQkFnZW50cwogICAgICAgIGZvciBteSAkQ0FCQWdlbnQgKCBAeyAkUGFyYW17RGF0YX0tPntPbGRDaGFuZ2VDQUJEYXRhfS0+e0NBQkFnZW50c30gfSApIHsKCiAgICAgICAgICAgICMgc2V0IHRoZSBjYWNoZSB0eXBlCiAgICAgICAgICAgIG15ICRDYWNoZVR5cGUgPSAkQ2FjaGVUeXBlUHJlZml4IC4gJENBQkFnZW50OwoKICAgICAgICAgICAgIyBkZWxldGUgdGhlIGNhY2hlCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgICAgICAgICAgVHlwZSA9PiAkQ2FjaGVUeXBlLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OkV2ZW50OjpUb29sQmFyTXlDaGFuZ2VzQ2FjaGVEZWxldGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoRGF0YSBFdmVudCBDb25maWcgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCB0aGUgY2FjaGUgdHlwZSBwcmVmaXgKICAgIG15ICRDYWNoZVR5cGVQcmVmaXggPSAnSVRTTUNoYW5nZU1hbmFnZW1lbnRUb29sQmFyTXlDaGFuZ2VzJzsKCiAgICAjIGhhbmRsZSBhZGRpbmcgb2YgYSBjaGFuZ2UKICAgIGlmICggJFBhcmFte0V2ZW50fSBlcSAnQ2hhbmdlQWRkUG9zdCcgKSB7CgogICAgICAgICMgZG8gbm90aGluZyBpZiB0aGUgQ2hhbmdlQnVpbGRlcklEIHdhcyBub3Qgc2V0CiAgICAgICAgcmV0dXJuIDEgaWYgISRQYXJhbXtEYXRhfS0+e0NoYW5nZUJ1aWxkZXJJRH07CgogICAgICAgICMgc2V0IHRoZSBjYWNoZSB0eXBlCiAgICAgICAgbXkgJENhY2hlVHlwZSA9ICRDYWNoZVR5cGVQcmVmaXggLiAkUGFyYW17RGF0YX0tPntDaGFuZ2VCdWlsZGVySUR9OwoKICAgICAgICAjIGRlbGV0ZSB0aGUgY2FjaGUKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAkQ2FjaGVUeXBlLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgaGFuZGxlIHVwZGF0ZSBvZiBhIGNoYW5nZQogICAgZWxzaWYgKCAkUGFyYW17RXZlbnR9IGVxICdDaGFuZ2VVcGRhdGVQb3N0JyApIHsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgaW5pdGlhbGl6ZWQKICAgICAgICAkUGFyYW17RGF0YX0tPntDaGFuZ2VCdWlsZGVySUR9IHx8PSAnJzsKICAgICAgICAkUGFyYW17RGF0YX0tPntPbGRDaGFuZ2VEYXRhfS0+e0NoYW5nZUJ1aWxkZXJJRH0gfHw9ICcnOwoKICAgICAgICAjIGRvIG5vdGhpbmcgaWYgdGhlIENoYW5nZUJ1aWxkZXJJRCBkaWQgbm90IGNoYW5nZQogICAgICAgIHJldHVybiAxCiAgICAgICAgICAgIGlmICRQYXJhbXtEYXRhfS0+e0NoYW5nZUJ1aWxkZXJJRH0gZXEgJFBhcmFte0RhdGF9LT57T2xkQ2hhbmdlRGF0YX0tPntDaGFuZ2VCdWlsZGVySUR9OwoKICAgICAgICAjIHNldCB0aGUgY2FjaGUgdHlwZSBwb3N0Zml4CiAgICAgICAgbXkgQENhY2hlVHlwZVBvc3RmaXhlcyA9ICgKICAgICAgICAgICAgJFBhcmFte0RhdGF9LT57Q2hhbmdlQnVpbGRlcklEfSwKICAgICAgICAgICAgJFBhcmFte0RhdGF9LT57T2xkQ2hhbmdlRGF0YX0tPntDaGFuZ2VCdWlsZGVySUR9LAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRoZSBjYWNoZSBmb3IgdGhlIG9sZCBhbmQgdGhlIGN1cnJlbnQgY2hhbmdlIGJ1aWxkZXIKICAgICAgICBDQUNIRVRZUEVQT1NURklYOgogICAgICAgIGZvciBteSAkQ2FjaGVUeXBlUG9zdGZpeCAoQENhY2hlVHlwZVBvc3RmaXhlcykgewoKICAgICAgICAgICAgIyBkbyBub3RoaW5nIGlmIHRoZSBDaGFuZ2VCdWlsZGVySUQgd2FzIG5vdCBzZXQKICAgICAgICAgICAgbmV4dCBDQUNIRVRZUEVQT1NURklYIGlmICEkQ2FjaGVUeXBlUG9zdGZpeDsKCiAgICAgICAgICAgICMgc2V0IHRoZSBjYWNoZSB0eXBlCiAgICAgICAgICAgIG15ICRDYWNoZVR5cGUgPSAkQ2FjaGVUeXBlUHJlZml4IC4gJENhY2hlVHlwZVBvc3RmaXg7CgogICAgICAgICAgICAjIGRlbGV0ZSB0aGUgY2FjaGUKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgICAgICBUeXBlID0+ICRDYWNoZVR5cGUsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIGhhbmRsZSBkZWxldGluZyBhIGNoYW5nZQogICAgZWxzaWYgKCAkUGFyYW17RXZlbnR9IGVxICdDaGFuZ2VEZWxldGVQb3N0JyApIHsKCiAgICAgICAgIyBkbyBub3RoaW5nIGlmIHRoZSBDaGFuZ2VCdWlsZGVySUQgd2FzIG5vdCBzZXQKICAgICAgICByZXR1cm4gMSBpZiAhJFBhcmFte0RhdGF9LT57T2xkQ2hhbmdlRGF0YX0tPntDaGFuZ2VCdWlsZGVySUR9OwoKICAgICAgICAjIHNldCB0aGUgY2FjaGUgdHlwZQogICAgICAgIG15ICRDYWNoZVR5cGUgPSAkQ2FjaGVUeXBlUHJlZml4IC4gJFBhcmFte0RhdGF9LT57T2xkQ2hhbmdlRGF0YX0tPntDaGFuZ2VCdWlsZGVySUR9OwoKICAgICAgICAjIGRlbGV0ZSB0aGUgY2FjaGUKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAkQ2FjaGVUeXBlLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246OkFjdGlvbjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbjo6QWN0aW9uIC0gY29uZGl0aW9uIGFjdGlvbiBsaWIKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGZ1bmN0aW9ucyBmb3IgY29uZGl0aW9uIGFjdGlvbnMgaW4gSVRTTUNoYW5nZU1hbmFnZW1lbnQuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWl0ZW0gQWN0aW9uQWRkKCkKCkFkZCBhIG5ldyBjb25kaXRpb24gYWN0aW9uLgoKICAgIG15ICRBY3Rpb25JRCA9ICRDb25kaXRpb25PYmplY3QtPkFjdGlvbkFkZCgKICAgICAgICBDb25kaXRpb25JRCAgPT4gMTIzLAogICAgICAgIEFjdGlvbk51bWJlciA9PiA1LAogICAgICAgIE9iamVjdElEICAgICA9PiAyMzQsCiAgICAgICAgQXR0cmlidXRlSUQgID0+IDM0NSwKICAgICAgICBPcGVyYXRvcklEICAgPT4gNDU2LAogICAgICAgIFNlbGVjdG9yICAgICA9PiAxMjM0LAogICAgICAgIEFjdGlvblZhbHVlICA9PiAncmVqZWN0ZWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBBY3Rpb25BZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ29uZGl0aW9uSUQgT2JqZWN0SUQgQXR0cmlidXRlSUQgT3BlcmF0b3JJRCBTZWxlY3RvciBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgaGFuZGxlICdBY3Rpb25WYWx1ZScgaW4gYSBzcGVjaWFsIHdheQogICAgaWYgKCAhZXhpc3RzICRQYXJhbXtBY3Rpb25WYWx1ZX0gfHwgIWRlZmluZWQgJFBhcmFte0FjdGlvblZhbHVlfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQWN0aW9uVmFsdWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBjb25kaXRpb24gZm9yIGV2ZW50IGhhbmRsZXIKICAgIG15ICRDb25kaXRpb24gPSAkU2VsZi0+Q29uZGl0aW9uR2V0KAogICAgICAgIENvbmRpdGlvbklEID0+ICRQYXJhbXtDb25kaXRpb25JRH0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgY29uZGl0aW9uCiAgICByZXR1cm4gaWYgISRDb25kaXRpb247CgogICAgIyB0cmlnZ2VyIEFjdGlvbkFkZFByZS1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnQWN0aW9uQWRkUHJlJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENvbmRpdGlvbi0+e0NoYW5nZUlEfSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgZGVmYXVsdCBhY3Rpb24gbnVtYmVyIGlmIG5vdCBnaXZlbgogICAgbXkgJEFjdGlvbk51bWJlciA9IGRlbGV0ZSAkUGFyYW17QWN0aW9uTnVtYmVyfTsKICAgIGlmICggISRBY3Rpb25OdW1iZXIgKSB7CiAgICAgICAgJEFjdGlvbk51bWJlciA9ICRTZWxmLT5fQ3JlYXRlTmV3QWN0aW9uTnVtYmVyKCVQYXJhbSk7CiAgICB9CgogICAgIyBhZGQgbmV3IGFjdGlvbiBuYW1lIHRvIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGNvbmRpdGlvbl9hY3Rpb24gJwogICAgICAgICAgICAuICcoY29uZGl0aW9uX2lkLCBhY3Rpb25fbnVtYmVyLCBvYmplY3RfaWQsICcKICAgICAgICAgICAgLiAnYXR0cmlidXRlX2lkLCBvcGVyYXRvcl9pZCwgc2VsZWN0b3IsICcKICAgICAgICAgICAgLiAnIGFjdGlvbl92YWx1ZSkgJwogICAgICAgICAgICAuICdWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtDb25kaXRpb25JRH0sIFwkQWN0aW9uTnVtYmVyLCBcJFBhcmFte09iamVjdElEfSwKICAgICAgICAgICAgXCRQYXJhbXtBdHRyaWJ1dGVJRH0sIFwkUGFyYW17T3BlcmF0b3JJRH0sIFwkUGFyYW17U2VsZWN0b3J9LAogICAgICAgICAgICBcJFBhcmFte0FjdGlvblZhbHVlfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIHByZXBhcmUgU1FMIHN0YXRlbWVudAogICAgbXkgJEFjdGlvbklEOwoKICAgICMgdGhpcyBpcyBpbXBvcnRhbnQgZm9yIG9yYWNsZSBmb3Igd2hpY2ggYW4gZW1wdHkgc3RyaW5nIGFuZCBOVUxMIGlzIHRoZSBzYW1lIQogICAgaWYgKCAkU2VsZi0+e0RCVHlwZX0gZXEgJ29yYWNsZScgJiYgJFBhcmFte0FjdGlvblZhbHVlfSBlcSAnJyApIHsKCiAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBjb25kaXRpb25fYWN0aW9uICcKICAgICAgICAgICAgICAgIC4gJ1dIRVJFIGNvbmRpdGlvbl9pZCA9ID8gQU5EIGFjdGlvbl9udW1iZXIgPSA/IEFORCBvYmplY3RfaWQgPSA/ICcKICAgICAgICAgICAgICAgIC4gJ0FORCBhdHRyaWJ1dGVfaWQgPSA/IEFORCBvcGVyYXRvcl9pZCA9ID8gQU5EIHNlbGVjdG9yID0gPyAnCiAgICAgICAgICAgICAgICAuICdBTkQgYWN0aW9uX3ZhbHVlIElTIE5VTEwnLAogICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgIFwkUGFyYW17Q29uZGl0aW9uSUR9LCBcJEFjdGlvbk51bWJlciwgXCRQYXJhbXtPYmplY3RJRH0sCiAgICAgICAgICAgICAgICBcJFBhcmFte0F0dHJpYnV0ZUlEfSwgXCRQYXJhbXtPcGVyYXRvcklEfSwgXCRQYXJhbXtTZWxlY3Rvcn0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGZvciBhbGwgb3RoZXIgZGF0YWJhc2VzIEFORCBmb3Igb3JhY2xlIElGIHRoZSBhY3Rpb24gdmFsdWUgaXMgTk9UIGFuIGVtcHR5IHN0cmluZwogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBjb25kaXRpb25fYWN0aW9uICcKICAgICAgICAgICAgICAgIC4gJ1dIRVJFIGNvbmRpdGlvbl9pZCA9ID8gQU5EIGFjdGlvbl9udW1iZXIgPSA/IEFORCBvYmplY3RfaWQgPSA/ICcKICAgICAgICAgICAgICAgIC4gJ0FORCBhdHRyaWJ1dGVfaWQgPSA/IEFORCBvcGVyYXRvcl9pZCA9ID8gQU5EIHNlbGVjdG9yID0gPyAnCiAgICAgICAgICAgICAgICAuICdBTkQgYWN0aW9uX3ZhbHVlID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICAgICAgXCRQYXJhbXtDb25kaXRpb25JRH0sIFwkQWN0aW9uTnVtYmVyLCBcJFBhcmFte09iamVjdElEfSwKICAgICAgICAgICAgICAgIFwkUGFyYW17QXR0cmlidXRlSUR9LCBcJFBhcmFte09wZXJhdG9ySUR9LCBcJFBhcmFte1NlbGVjdG9yfSwKICAgICAgICAgICAgICAgIFwkUGFyYW17QWN0aW9uVmFsdWV9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgaWQgb2YgY3JlYXRlZCBhY3Rpb24KICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEFjdGlvbklEID0gJFJvd1swXTsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGFjdGlvbiBjb3VsZCBiZSBhZGRlZAogICAgaWYgKCAhJEFjdGlvbklEICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQWN0aW9uQWRkKCkgZmFpbGVkISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkZWxldGUgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAnQWN0aW9uTGlzdDo6Q29uZGl0aW9uSUQ6OicgLiAkUGFyYW17Q29uZGl0aW9uSUR9LAogICAgKTsKCiAgICAjIHRyaWdnZXIgQWN0aW9uQWRkUG9zdC1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnQWN0aW9uQWRkUG9zdCcsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDb25kaXRpb24tPntDaGFuZ2VJRH0sCiAgICAgICAgICAgIEFjdGlvbklEID0+ICRBY3Rpb25JRCwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuICRBY3Rpb25JRDsKfQoKPWl0ZW0gQWN0aW9uVXBkYXRlKCkKClVwZGF0ZSBhIGNvbmRpdGlvbiBhY3Rpb24uCgogICAgbXkgJFN1Y2Nlc3MgPSAkQ29uZGl0aW9uT2JqZWN0LT5BY3Rpb25VcGRhdGUoCiAgICAgICAgQWN0aW9uSUQgICAgID0+IDEyMzQsCiAgICAgICAgQWN0aW9uTnVtYmVyID0+IDEsICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIE9iamVjdElEICAgICA9PiAyMzQsICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBBdHRyaWJ1dGVJRCAgPT4gMzQ1LCAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgT3BlcmF0b3JJRCAgID0+IDQ1NiwgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFNlbGVjdG9yICAgICA9PiAxMjM0JywgICAgICAjIChvcHRpb25hbCkKICAgICAgICBBY3Rpb25WYWx1ZSAgPT4gJ3JlamVjdGVkJywgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEFjdGlvblVwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhBY3Rpb25JRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGFjdGlvbgogICAgbXkgJEFjdGlvbiA9ICRTZWxmLT5BY3Rpb25HZXQoCiAgICAgICAgQWN0aW9uSUQgPT4gJFBhcmFte0FjdGlvbklEfSwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBhY3Rpb24KICAgIHJldHVybiBpZiAhJEFjdGlvbjsKCiAgICAjIGdldCBjb25kaXRpb24gZm9yIGV2ZW50IGhhbmRsZXIKICAgIG15ICRDb25kaXRpb24gPSAkU2VsZi0+Q29uZGl0aW9uR2V0KAogICAgICAgIENvbmRpdGlvbklEID0+ICRBY3Rpb24tPntDb25kaXRpb25JRH0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgY29uZGl0aW9uCiAgICByZXR1cm4gaWYgISRDb25kaXRpb247CgogICAgIyB0cmlnZ2VyIEFjdGlvblVwZGF0ZVByZS1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnQWN0aW9uVXBkYXRlUHJlJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENvbmRpdGlvbi0+e0NoYW5nZUlEfSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBtYXAgdXBkYXRlIGF0dHJpYnV0ZXMgdG8gY29sdW1uIG5hbWVzCiAgICBteSAlQXR0cmlidXRlID0gKAogICAgICAgIEFjdGlvbk51bWJlciA9PiAnYWN0aW9uX251bWJlcicsCiAgICAgICAgT2JqZWN0SUQgICAgID0+ICdvYmplY3RfaWQnLAogICAgICAgIEF0dHJpYnV0ZUlEICA9PiAnYXR0cmlidXRlX2lkJywKICAgICAgICBPcGVyYXRvcklEICAgPT4gJ29wZXJhdG9yX2lkJywKICAgICAgICBTZWxlY3RvciAgICAgPT4gJ3NlbGVjdG9yJywKICAgICAgICBBY3Rpb25WYWx1ZSAgPT4gJ2FjdGlvbl92YWx1ZScsCiAgICApOwoKICAgICMgYnVpbGQgU1FMIHRvIHVwZGF0ZSBhY3Rpb24KICAgIG15ICRTUUwgPSAnVVBEQVRFIGNvbmRpdGlvbl9hY3Rpb24gU0VUICc7CiAgICBteSBAQmluZDsKCiAgICBBVFRSSUJVVEU6CiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAlQXR0cmlidXRlICkgewoKICAgICAgICAjIHByZXNlcnZlIHRoZSBvbGQgdmFsdWUsIHdoZW4gdGhlIGNvbHVtbiBpc24ndCBpbiBmdW5jdGlvbiBwYXJhbWV0ZXJzCiAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgIWV4aXN0cyAkUGFyYW17JEF0dHJpYnV0ZX07CiAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgIWRlZmluZWQgJFBhcmFteyRBdHRyaWJ1dGV9OwoKICAgICAgICAjIHBhcmFtIGNoZWNraW5nIGhhcyBhbHJlYWR5IGJlZW4gZG9uZSwgc28gdGhpcyBpcyBzYWZlCiAgICAgICAgJFNRTCAuPSAiJEF0dHJpYnV0ZXskQXR0cmlidXRlfSA9ID8sICI7CiAgICAgICAgcHVzaCBAQmluZCwgXCRQYXJhbXskQXR0cmlidXRlfTsKICAgIH0KCiAgICAjIHNldCBjb25kaXRpb24gSUQgdG8gYWxsb3cgdHJhaWxpbmcgY29tbWEgb2YgcHJldmlvdXMgbG9vcAogICAgJFNRTCAuPSAnIGNvbmRpdGlvbl9pZCA9IGNvbmRpdGlvbl9pZCAnOwoKICAgICMgc2V0IG1hdGNoaW5nIG9mIFNRTCBzdGF0ZW1lbnQKICAgICRTUUwgLj0gJ1dIRVJFIGlkID0gPyc7CiAgICBwdXNoIEBCaW5kLCBcJFBhcmFte0FjdGlvbklEfTsKCiAgICAjIHVwZGF0ZSBhY3Rpb24KICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICBCaW5kID0+IFxAQmluZCwKICAgICk7CgogICAgIyBkZWxldGUgY2FjaGUKICAgIGZvciBteSAkS2V5ICgKICAgICAgICAnQWN0aW9uTGlzdDo6Q29uZGl0aW9uSUQ6OicgLiAkQWN0aW9uLT57Q29uZGl0aW9uSUR9LAogICAgICAgICdBY3Rpb25HZXQ6OicgLiAkUGFyYW17QWN0aW9uSUR9LAogICAgICAgICkKICAgIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkS2V5LAogICAgICAgICk7CiAgICB9CgogICAgIyB0cmlnZ2VyIEFjdGlvblVwZGF0ZVBvc3QtRXZlbnQKICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ0FjdGlvblVwZGF0ZVBvc3QnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgID0+ICRDb25kaXRpb24tPntDaGFuZ2VJRH0sCiAgICAgICAgICAgIE9sZEFjdGlvbkRhdGEgPT4gJEFjdGlvbiwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIEFjdGlvbkdldCgpCgpHZXQgYSBjb25kaXRpb24gYWN0aW9uIGZvciBhIGdpdmVuIGFjdGlvbiBpZC4KUmV0dXJucyBhIGhhc2ggcmVmZXJlbmNlIG9mIHRoZSBhY3Rpb24gZGF0YS4KCiAgICBteSAkQ29uZGl0aW9uQWN0aW9uUmVmID0gJENvbmRpdGlvbk9iamVjdC0+QWN0aW9uR2V0KAogICAgICAgIEFjdGlvbklEID0+IDEyMzQsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CgpUaGUgcmV0dXJuZWQgaGFzaCByZWZlcmVuY2UgY29udGFpbnMgZm9sbG93aW5nIGVsZW1lbnRzOgoKICAgICRDb25kaXRpb25BY3Rpb257QWN0aW9uSUR9CiAgICAkQ29uZGl0aW9uQWN0aW9ue0NvbmRpdGlvbklEfQogICAgJENvbmRpdGlvbkFjdGlvbntBY3Rpb25OdW1iZXJ9CiAgICAkQ29uZGl0aW9uQWN0aW9ue09iamVjdElEfQogICAgJENvbmRpdGlvbkFjdGlvbntBdHRyaWJ1dGVJRH0KICAgICRDb25kaXRpb25BY3Rpb257T3BlcmF0b3JJRH0KICAgICRDb25kaXRpb25BY3Rpb257U2VsZWN0b3J9CiAgICAkQ29uZGl0aW9uQWN0aW9ue0FjdGlvblZhbHVlfQoKPWN1dAoKc3ViIEFjdGlvbkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhBY3Rpb25JRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdBY3Rpb25HZXQ6OicgLiAkUGFyYW17QWN0aW9uSUR9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAjIHByZXBhcmUgU1FMIHN0YXRlbWVudAogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgY29uZGl0aW9uX2lkLCBhY3Rpb25fbnVtYmVyLCBvYmplY3RfaWQsICcKICAgICAgICAgICAgLiAnYXR0cmlidXRlX2lkLCBvcGVyYXRvcl9pZCwgc2VsZWN0b3IsIGFjdGlvbl92YWx1ZSAnCiAgICAgICAgICAgIC4gJ0ZST00gY29uZGl0aW9uX2FjdGlvbiBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtBY3Rpb25JRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVBY3Rpb25EYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQWN0aW9uRGF0YXtBY3Rpb25JRH0gICAgID0gJFJvd1swXTsKICAgICAgICAkQWN0aW9uRGF0YXtDb25kaXRpb25JRH0gID0gJFJvd1sxXTsKICAgICAgICAkQWN0aW9uRGF0YXtBY3Rpb25OdW1iZXJ9ID0gJFJvd1syXTsKICAgICAgICAkQWN0aW9uRGF0YXtPYmplY3RJRH0gICAgID0gJFJvd1szXTsKICAgICAgICAkQWN0aW9uRGF0YXtBdHRyaWJ1dGVJRH0gID0gJFJvd1s0XTsKICAgICAgICAkQWN0aW9uRGF0YXtPcGVyYXRvcklEfSAgID0gJFJvd1s1XTsKICAgICAgICAkQWN0aW9uRGF0YXtTZWxlY3Rvcn0gICAgID0gJFJvd1s2XTsKCiAgICAgICAgIyB0aGlzIGlzIGltcG9ydGFudCBmb3Igb3JhY2xlIGZvciB3aGljaCBhbiBlbXB0eSBzdHJpbmcgYW5kIE5VTEwgaXMgdGhlIHNhbWUhCiAgICAgICAgJEFjdGlvbkRhdGF7QWN0aW9uVmFsdWV9ID0gJFJvd1s3XSAvLyAnJzsKICAgIH0KCiAgICAjIGNoZWNrIGVycm9yCiAgICBpZiAoICElQWN0aW9uRGF0YSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkFjdGlvbklEICRQYXJhbXtBY3Rpb25JRH0gZG9lcyBub3QgZXhpc3QhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlQWN0aW9uRGF0YSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICk7CgogICAgcmV0dXJuIFwlQWN0aW9uRGF0YTsKfQoKPWl0ZW0gQWN0aW9uTGlzdCgpCgpSZXR1cm5zIGEgc29ydGVkIGxpc3Qgb2YgYWxsIGNvbmRpdGlvbiBhY3Rpb24KaWRzIGZvciBhIGdpdmVuIENvbmRpdGlvbklEIGFzIGFycmF5IHJlZmVyZW5jZS4KCiAgICBteSAkQ29uZGl0aW9uQWN0aW9uSURzUmVmID0gJENvbmRpdGlvbk9iamVjdC0+QWN0aW9uTGlzdCgKICAgICAgICBDb25kaXRpb25JRCA9PiAxMjM0LAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEFjdGlvbkxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ29uZGl0aW9uSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnQWN0aW9uTGlzdDo6Q29uZGl0aW9uSUQ6OicgLiAkUGFyYW17Q29uZGl0aW9uSUR9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAjIHByZXBhcmUgU1FMIHN0YXRlbWVudAogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCBGUk9NIGNvbmRpdGlvbl9hY3Rpb24gJwogICAgICAgICAgICAuICdXSEVSRSBjb25kaXRpb25faWQgPSA/ICcKICAgICAgICAgICAgLiAnT1JERVIgQlkgYWN0aW9uX251bWJlciBBU0MnLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NvbmRpdGlvbklEfSBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBBY3Rpb25MaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBBY3Rpb25MaXN0LCAkUm93WzBdOwogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBBY3Rpb25MaXN0LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgKTsKCiAgICByZXR1cm4gXEBBY3Rpb25MaXN0Owp9Cgo9aXRlbSBBY3Rpb25EZWxldGUoKQoKRGVsZXRlcyBhIGNvbmRpdGlvbiBhY3Rpb24uCgogICAgbXkgJFN1Y2Nlc3MgPSAkQ29uZGl0aW9uT2JqZWN0LT5BY3Rpb25EZWxldGUoCiAgICAgICAgQWN0aW9uSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEFjdGlvbkRlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhBY3Rpb25JRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGFjdGlvbgogICAgbXkgJEFjdGlvbiA9ICRTZWxmLT5BY3Rpb25HZXQoCiAgICAgICAgQWN0aW9uSUQgPT4gJFBhcmFte0FjdGlvbklEfSwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBhY3Rpb24KICAgIHJldHVybiBpZiAhJEFjdGlvbjsKCiAgICAjIGdldCBjb25kaXRpb24gZm9yIGV2ZW50IGhhbmRsZXIKICAgIG15ICRDb25kaXRpb24gPSAkU2VsZi0+Q29uZGl0aW9uR2V0KAogICAgICAgIENvbmRpdGlvbklEID0+ICRBY3Rpb24tPntDb25kaXRpb25JRH0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgY29uZGl0aW9uCiAgICByZXR1cm4gaWYgISRDb25kaXRpb247CgogICAgIyB0cmlnZ2VyIEFjdGlvbkRlbGV0ZVByZS1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnQWN0aW9uRGVsZXRlUHJlJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENvbmRpdGlvbi0+e0NoYW5nZUlEfSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBkZWxldGUgY29uZGl0aW9uIGFjdGlvbiBmcm9tIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ0RFTEVURSBGUk9NIGNvbmRpdGlvbl9hY3Rpb24gJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0FjdGlvbklEfSBdLAogICAgKTsKCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgZm9yIG15ICRLZXkgKAogICAgICAgICdBY3Rpb25MaXN0OjpDb25kaXRpb25JRDo6JyAuICRBY3Rpb24tPntDb25kaXRpb25JRH0sCiAgICAgICAgJ0FjdGlvbkdldDo6JyAuICRQYXJhbXtBY3Rpb25JRH0sCiAgICAgICAgKQogICAgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRLZXksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRyaWdnZXIgQWN0aW9uRGVsZXRlUG9zdC1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnQWN0aW9uRGVsZXRlUG9zdCcsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDb25kaXRpb24tPntDaGFuZ2VJRH0sCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBBY3Rpb25EZWxldGVBbGwoKQoKRGVsZXRlcyBhbGwgY29uZGl0aW9uIGFjdGlvbnMgZm9yIGEgZ2l2ZW4gY29uZGl0aW9uIGlkLgoKICAgIG15ICRTdWNjZXNzID0gJENvbmRpdGlvbk9iamVjdC0+QWN0aW9uRGVsZXRlQWxsKAogICAgICAgIENvbmRpdGlvbklEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBBY3Rpb25EZWxldGVBbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ29uZGl0aW9uSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjb25kaXRpb24gZm9yIGV2ZW50IGhhbmRsZXIKICAgIG15ICRDb25kaXRpb24gPSAkU2VsZi0+Q29uZGl0aW9uR2V0KAogICAgICAgIENvbmRpdGlvbklEID0+ICRQYXJhbXtDb25kaXRpb25JRH0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgY29uZGl0aW9uCiAgICByZXR1cm4gaWYgISRDb25kaXRpb247CgogICAgIyBnZXQgYWxsIGFjdGlvbnMgZm9yIHRoZSBnaXZlbiBjb25kaXRpb24gaWQKICAgIG15ICRBY3Rpb25JRHNSZWYgPSAkU2VsZi0+QWN0aW9uTGlzdCgKICAgICAgICBDb25kaXRpb25JRCA9PiAkUGFyYW17Q29uZGl0aW9uSUR9LAogICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIHRyaWdnZXIgQWN0aW9uRGVsZXRlQWxsUHJlLUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdBY3Rpb25EZWxldGVBbGxQcmUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBDaGFuZ2VJRCAgICA9PiAkQ29uZGl0aW9uLT57Q2hhbmdlSUR9LAogICAgICAgICAgICBDb25kaXRpb25JRCA9PiAkUGFyYW17Q29uZGl0aW9uSUR9LAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGRlbGV0ZSBjb25kaXRpb24gYWN0aW9ucyBmcm9tIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ0RFTEVURSBGUk9NIGNvbmRpdGlvbl9hY3Rpb24gJwogICAgICAgICAgICAuICdXSEVSRSBjb25kaXRpb25faWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDb25kaXRpb25JRH0gXSwKICAgICk7CgogICAgIyBkZWxldGUgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAnQWN0aW9uTGlzdDo6Q29uZGl0aW9uSUQ6OicgLiAkUGFyYW17Q29uZGl0aW9uSUR9LAogICAgKTsKCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgaWYgKCAkQWN0aW9uSURzUmVmICYmIEB7JEFjdGlvbklEc1JlZn0gKSB7CiAgICAgICAgZm9yIG15ICRBY3Rpb25JRCAoIEB7JEFjdGlvbklEc1JlZn0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgICAgIEtleSAgPT4gJ0FjdGlvbkdldDo6JyAuICRBY3Rpb25JRCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyB0cmlnZ2VyIEFjdGlvbkRlbGV0ZUFsbFBvc3QtRXZlbnQKICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ0FjdGlvbkRlbGV0ZUFsbFBvc3QnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBDaGFuZ2VJRCAgICA9PiAkQ29uZGl0aW9uLT57Q2hhbmdlSUR9LAogICAgICAgICAgICBDb25kaXRpb25JRCA9PiAkUGFyYW17Q29uZGl0aW9uSUR9LAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQWN0aW9uRXhlY3V0ZSgpCgpSZXR1cm5zIHRoZSBzdWNjZXNzIHZhbHVlIG9mIHRoZSBleGVjdXRpb24gb2YgYW4gYWN0aW9uLgoKICAgIG15ICRTdWNjZXNzID0gJENvbmRpdGlvbk9iamVjdC0+QWN0aW9uRXhlY3V0ZSgKICAgICAgICBBY3Rpb25JRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQWN0aW9uRXhlY3V0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhBY3Rpb25JRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGFjdGlvbiBjb250ZW50CiAgICBteSAkQWN0aW9uID0gJFNlbGYtPkFjdGlvbkdldCgKICAgICAgICBBY3Rpb25JRCA9PiAkUGFyYW17QWN0aW9uSUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGFjdGlvbiBjb250ZW50CiAgICByZXR1cm4gaWYgISRBY3Rpb247CgogICAgIyBnZXQgY29uZGl0aW9uIGZvciBldmVudCBoYW5kbGVyCiAgICBteSAkQ29uZGl0aW9uID0gJFNlbGYtPkNvbmRpdGlvbkdldCgKICAgICAgICBDb25kaXRpb25JRCA9PiAkQWN0aW9uLT57Q29uZGl0aW9uSUR9LAogICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGNvbmRpdGlvbgogICAgcmV0dXJuIGlmICEkQ29uZGl0aW9uOwoKICAgICMgZ2V0IGFjdGlvbiBhdHRyaWJ1dGVzCiAgICBteSAkQWN0aW9uRGF0YSA9ICRTZWxmLT5fQWN0aW9uRXhlY3V0ZUluaXQoCiAgICAgICAgQWN0aW9uID0+ICRBY3Rpb24sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGFjdGlvbiBhdHRyaWJ1dGVzCiAgICByZXR1cm4gaWYgISRBY3Rpb25EYXRhOwoKICAgICMgZG8gbm90IGV4ZWN1dGUgJ2xvY2snIGFjdGlvbnMsIHRoZXkgYXJlIHBhc3NpdmUhCiAgICBteSBAT21pdEFjdGlvbnMgPSBxdyggbG9jayApOwogICAgcmV0dXJuIDAgaWYgZ3JlcCB7ICRBY3Rpb25EYXRhLT57T3BlcmF0b3J9LT57TmFtZX0gZXEgJF8gfSBAT21pdEFjdGlvbnM7CgogICAgIyB0cmlnZ2VyIEFjdGlvbkV4ZWN1dGVQcmUtRXZlbnQKICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ0FjdGlvbkV4ZWN1dGVQcmUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyRDb25kaXRpb259LAogICAgICAgICAgICBDb25kaXRpb25OYW1lID0+ICRDb25kaXRpb24tPntOYW1lfSwKICAgICAgICAgICAgQ2hhbmdlSUQgICAgICA9PiAkQ29uZGl0aW9uLT57Q2hhbmdlSUR9LAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBvYmplY3QgbmFtZQogICAgbXkgJE9iamVjdE5hbWUgPSAkQWN0aW9uRGF0YS0+e09iamVjdH0tPntOYW1lfTsKCiAgICAjIGdldCBvYmplY3QgZGF0YQogICAgbXkgJEFjdGlvbk9iamVjdERhdGEgPSAkU2VsZi0+T2JqZWN0RGF0YUdldCgKICAgICAgICBDb25kaXRpb25JRCA9PiAkQWN0aW9uLT57Q29uZGl0aW9uSUR9LAogICAgICAgIE9iamVjdE5hbWUgID0+ICRPYmplY3ROYW1lLAogICAgICAgIFNlbGVjdG9yICAgID0+ICRBY3Rpb24tPntTZWxlY3Rvcn0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZm9yIGFjdGlvbiBvYmplY3QgZGF0YQogICAgIyBubyBuZWVkIHRvIGV4ZWN1dGUgb3BlcmF0b3IgaWYgaXQgaXMgYW4gZW1wdHkgYXJyYXkgcmVmCiAgICBpZiAoCiAgICAgICAgISRBY3Rpb25PYmplY3REYXRhCiAgICAgICAgfHwgcmVmICRBY3Rpb25PYmplY3REYXRhIG5lICdBUlJBWScKICAgICAgICB8fCByZWYgJEFjdGlvbk9iamVjdERhdGEgZXEgJ0FSUkFZJyAmJiAhQHskQWN0aW9uT2JqZWN0RGF0YX0KICAgICAgICApCiAgICB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBvYmplY3QgZGF0YSBmb3IgJE9iamVjdE5hbWUgKCRBY3Rpb24tPntTZWxlY3Rvcn0pIGZvdW5kISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgYXR0cmlidXRlIHR5cGUKICAgIG15ICRBdHRyaWJ1dGVUeXBlID0gJEFjdGlvbkRhdGEtPntBdHRyaWJ1dGV9LT57TmFtZX07CgogICAgIyBjaGVjayBhdHRyaWJ1dGUgdHlwZQogICAgaWYgKCAhJEF0dHJpYnV0ZVR5cGUgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBhdHRyaWJ1dGUgJE9iamVjdE5hbWUgKCRBY3Rpb24tPntTZWxlY3Rvcn0pIGZvdW5kISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBmb3Igb2JqZWN0IGF0dHJpYnV0ZQogICAgZm9yIG15ICRBY3Rpb25PYmplY3QgKCBAeyRBY3Rpb25PYmplY3REYXRhfSApIHsKICAgICAgICBpZiAoICFleGlzdHMgJEFjdGlvbk9iamVjdC0+eyRBdHRyaWJ1dGVUeXBlfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIG9iamVjdCBhdHRyaWJ1dGUgZm9yICRPYmplY3ROYW1lICgkQXR0cmlidXRlVHlwZSkgZm91bmQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlZmluZSBvcGVyYXRvciB2YWx1ZXMKICAgIG15ICVPcGVyYXRvckV4ZWN1dGUgPSAoCiAgICAgICAgT3BlcmF0b3JOYW1lID0+ICRBY3Rpb25EYXRhLT57T3BlcmF0b3J9LT57TmFtZX0sCiAgICAgICAgT2JqZWN0RGF0YSAgID0+ICRBY3Rpb25PYmplY3REYXRhLAogICAgICAgIE9iamVjdE5hbWUgICA9PiAkT2JqZWN0TmFtZSwKICAgICAgICBTZWxlY3RvciAgICAgPT4gJEFjdGlvbi0+e1NlbGVjdG9yfSwKICAgICAgICBBdHRyaWJ1dGUgICAgPT4gJEF0dHJpYnV0ZVR5cGUsCiAgICAgICAgQWN0aW9uVmFsdWUgID0+ICRBY3Rpb24tPntBY3Rpb25WYWx1ZX0sCiAgICAgICAgQWN0aW9uSUQgICAgID0+ICRBY3Rpb24tPntBY3Rpb25JRH0sCiAgICApOwoKICAgICMgcmV0dXJuIHJlc3VsdCBvZiB0aGUgYWN0aW9ucyBleGVjdXRpb24KICAgIG15ICRSZXN1bHQgPSAkU2VsZi0+T3BlcmF0b3JFeGVjdXRlKAogICAgICAgICVPcGVyYXRvckV4ZWN1dGUsCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGdldCBuaWNlIGFjdGlvbiByZXN1bHQKICAgIG15ICRBY3Rpb25SZXN1bHQgPSAoJFJlc3VsdCkgPyAnc3VjY2Vzc2Z1bGx5JyA6ICd1bnN1Y2Nlc3NmdWxseSc7CgogICAgIyB0cmlnZ2VyIEFjdGlvbkV4ZWN1dGVQb3N0LUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdBY3Rpb25FeGVjdXRlUG9zdCcsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7JENvbmRpdGlvbn0sCiAgICAgICAgICAgIENvbmRpdGlvbk5hbWUgPT4gJENvbmRpdGlvbi0+e05hbWV9LAogICAgICAgICAgICAlT3BlcmF0b3JFeGVjdXRlLAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgPT4gJENvbmRpdGlvbi0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgQWN0aW9uUmVzdWx0ID0+ICRBY3Rpb25SZXN1bHQsCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgcmV0dXJuIHJlc3VsdCBvZiB0aGUgYWN0aW9ucyBleGVjdXRpb24KICAgIHJldHVybiAkUmVzdWx0Owp9Cgo9aXRlbSBfQWN0aW9uRXhlY3V0ZUluaXQoKQoKUmV0dXJucyBvYmplY3QsIGF0dHJpYnV0ZSBhbmQgb3BlcmF0b3Igb2YgYSBnaXZlbiBhY3Rpb24uCgogICAgbXkgJEFjdGlvbkRhdGEgPSAkQ29uZGl0aW9uT2JqZWN0LT5fQWN0aW9uRXhlY3V0ZUluaXQoCiAgICAgICAgQWN0aW9uID0+ICRBY3Rpb25SZWYsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIF9BY3Rpb25FeGVjdXRlSW5pdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZXh0cmFjdCBhY3Rpb24KICAgIG15ICRBY3Rpb24gPSAkUGFyYW17QWN0aW9ufTsKCiAgICAjIGRlY2xhcmUgYWN0aW9uIGRhdGEKICAgIG15ICVBY3Rpb25EYXRhOwoKICAgICMgZ2V0IG9iamVjdCBkYXRhCiAgICAkQWN0aW9uRGF0YXtPYmplY3R9ID0gJFNlbGYtPk9iamVjdEdldCgKICAgICAgICBPYmplY3RJRCA9PiAkQWN0aW9uLT57T2JqZWN0SUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGZvciBvYmplY3QgZGF0YQogICAgaWYgKCAhJEFjdGlvbkRhdGF7T2JqZWN0fSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHZhbHVlIGZvciAnT2JqZWN0JyB3aXRoIElEICckQWN0aW9uLT57T2JqZWN0SUR9JyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGF0dHJpYnV0ZSBkYXRhCiAgICAkQWN0aW9uRGF0YXtBdHRyaWJ1dGV9ID0gJFNlbGYtPkF0dHJpYnV0ZUdldCgKICAgICAgICBBdHRyaWJ1dGVJRCA9PiAkQWN0aW9uLT57QXR0cmlidXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGZvciBhdHRyaWJ1dGUgZGF0YQogICAgaWYgKCAhJEFjdGlvbkRhdGF7QXR0cmlidXRlfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHZhbHVlIGZvciAnQXR0cmlidXRlJyB3aXRoIElEICckQWN0aW9uLT57QXR0cmlidXRlSUR9JyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IG9wZXJhdG9yIGRhdGEKICAgICRBY3Rpb25EYXRhe09wZXJhdG9yfSA9ICRTZWxmLT5PcGVyYXRvckdldCgKICAgICAgICBPcGVyYXRvcklEID0+ICRBY3Rpb24tPntPcGVyYXRvcklEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGZvciBvcGVyYXRvciBkYXRhCiAgICBpZiAoICEkQWN0aW9uRGF0YXtPcGVyYXRvcn0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyB2YWx1ZSBmb3IgJ09wZXJhdG9yJyB3aXRoIElEICckQWN0aW9uLT57T3BlcmF0b3JJRH0nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIFwlQWN0aW9uRGF0YTsKfQoKPWl0ZW0gX0NyZWF0ZU5ld0FjdGlvbk51bWJlcigpCgpDcmVhdGUgYSBuZXcgdW51c2VkIGFjdGlvbiBudW1iZXIgZm9yIHRoZSBnaXZlbiBjb25kaXRpb24uClRoZSBoaWdoZXN0IGN1cnJlbnQgYWN0aW9uIG51bWJlciBmb3IgdGhlIGdpdmVuIGNvbmRpdGlvbiBpcwpsb29rZWQgdXAgYW5kIGluY3JlbWVudGVkIGJ5IG9uZS4KCiAgICBteSAkQWN0aW9uTnVtYmVyID0gJENvbmRpdGlvbk9iamVjdC0+X0NyZWF0ZU5ld0FjdGlvbk51bWJlcigKICAgICAgICBDb25kaXRpb25JRCA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIF9DcmVhdGVOZXdBY3Rpb25OdW1iZXIgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NvbmRpdGlvbklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ29uZGl0aW9uSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCB0aGUgbGFyZ2VzdCBhY3Rpb24gbnVtYmVyCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIE1BWChhY3Rpb25fbnVtYmVyKSAnCiAgICAgICAgICAgIC4gJ0ZST00gY29uZGl0aW9uX2FjdGlvbiAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGNvbmRpdGlvbl9pZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDb25kaXRpb25JRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQsIGRlZmF1bHQgdG8gMCB3aGVuIHRoZXJlIGFyZSBubyBhY3Rpb25zIHlldAogICAgbXkgJEFjdGlvbk51bWJlcjsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEFjdGlvbk51bWJlciA9ICRSb3dbMF07CiAgICB9CiAgICAkQWN0aW9uTnVtYmVyIHx8PSAwOwoKICAgICMgaW5jcmVtZW50IG51bWJlciB0byBnZXQgYSBub24tZXhpc3RlbnQgYWN0aW9uIG51bWJlcgogICAgJEFjdGlvbk51bWJlcisrOwoKICAgIHJldHVybiAkQWN0aW9uTnVtYmVyOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246OkF0dHJpYnV0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgSU1QT1JUQU5UIQojIERvIG5vdCBkZWxldGUgdGhpcyBsaW5lISBUaGlzIHByZXZlbnRzIHRoZSAiRnJvbnRlbmQvQmFzaWMiIFVuaXRUZXN0IGZyb20gZmFpbGluZwojIG9uIG9wZW5zdXNlIDExLjMgYW5kIDExLjQgKDY0Yml0KSBpZiBtb2RfcGVybCBpcyB1c2VkIQojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UUlM6OkNvbW1vbjo6UmVtb3ZlQ1ZTSURzKQp1c2UgdmFycyBxdygkVkVSU0lPTik7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246OkF0dHJpYnV0ZSAtIGNvbmRpdGlvbiBhdHRyaWJ1dGUgbGliCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBmdW5jdGlvbnMgZm9yIGNvbmRpdGlvbiBhdHRyaWJ1dGVzIGluIElUU01DaGFuZ2VNYW5hZ2VtZW50LgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1pdGVtIEF0dHJpYnV0ZUFkZCgpCgpBZGQgYSBuZXcgY29uZGl0aW9uIGF0dHJpYnV0ZS4KCiAgICBteSAkQXR0cmlidXRlSUQgPSAkQ29uZGl0aW9uT2JqZWN0LT5BdHRyaWJ1dGVBZGQoCiAgICAgICAgTmFtZSAgID0+ICdBdHRyaWJ1dGVOYW1lJywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQXR0cmlidXRlQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIG1ha2UgbG9va3VwIHdpdGggZ2l2ZW4gbmFtZSBmb3IgY2hlY2tzCiAgICBteSAkQXR0cmlidXRlSUQgPSAkU2VsZi0+QXR0cmlidXRlTG9va3VwKAogICAgICAgIE5hbWUgPT4gJFBhcmFte05hbWV9LAogICAgKTsKCiAgICAjIGNoZWNrIGlmIGF0dHJpYnV0ZSBuYW1lIGFscmVhZHkgZXhpc3RzCiAgICBpZiAoJEF0dHJpYnV0ZUlEKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb25kaXRpb24gYXR0cmlidXRlICgkUGFyYW17TmFtZX0pIGFscmVhZHkgZXhpc3RzISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBhZGQgbmV3IGF0dHJpYnV0ZSBuYW1lIHRvIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGNvbmRpdGlvbl9hdHRyaWJ1dGUgJwogICAgICAgICAgICAuICcobmFtZSkgJwogICAgICAgICAgICAuICdWQUxVRVMgKD8pJywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgKTsKCiAgICAjIGdldCBpZCBvZiBjcmVhdGVkIGF0dHJpYnV0ZQogICAgJEF0dHJpYnV0ZUlEID0gJFNlbGYtPkF0dHJpYnV0ZUxvb2t1cCgKICAgICAgICBOYW1lID0+ICRQYXJhbXtOYW1lfSwKICAgICk7CgogICAgIyBjaGVjayBpZiBhdHRyaWJ1dGUgY291bGQgYmUgYWRkZWQKICAgIGlmICggISRBdHRyaWJ1dGVJRCApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkF0dHJpYnV0ZUFkZCgpIGZhaWxlZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGVsZXRlIGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJ0F0dHJpYnV0ZUxpc3QnLAogICAgKTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZUlEOwp9Cgo9aXRlbSBBdHRyaWJ1dGVVcGRhdGUoKQoKVXBkYXRlIGEgY29uZGl0aW9uIGF0dHJpYnV0ZS4KCiAgICBteSAkU3VjY2VzcyA9ICRDb25kaXRpb25PYmplY3QtPkF0dHJpYnV0ZVVwZGF0ZSgKICAgICAgICBBdHRyaWJ1dGVJRCA9PiAxMjM0LAogICAgICAgIE5hbWUgICAgICAgID0+ICdOZXdBdHRyaWJ1dGVOYW1lJywKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBBdHRyaWJ1dGVVcGRhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQXR0cmlidXRlSUQgTmFtZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGF0dHJpYnV0ZSBkYXRhCiAgICBteSAkQXR0cmlidXRlRGF0YSA9ICRTZWxmLT5BdHRyaWJ1dGVHZXQoCiAgICAgICAgQXR0cmlidXRlSUQgPT4gJFBhcmFte0F0dHJpYnV0ZUlEfSwKICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBhdHRyaWJ1dGUgZGF0YQogICAgaWYgKCAhJEF0dHJpYnV0ZURhdGEgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJBdHRyaWJ1dGVVcGRhdGUgb2YgJFBhcmFte0F0dHJpYnV0ZUlEfSBmYWlsZWQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHVwZGF0ZSBhdHRyaWJ1dGUgaW4gZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnVVBEQVRFIGNvbmRpdGlvbl9hdHRyaWJ1dGUgJwogICAgICAgICAgICAuICdTRVQgbmFtZSA9ID8gJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LAogICAgICAgICAgICBcJFBhcmFte0F0dHJpYnV0ZUlEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgZm9yIG15ICRLZXkgKAogICAgICAgICdBdHRyaWJ1dGVMaXN0JywKICAgICAgICAnQXR0cmlidXRlR2V0OjpBdHRyaWJ1dGVJRDo6JyAuICRQYXJhbXtBdHRyaWJ1dGVJRH0sCiAgICAgICAgJ0F0dHJpYnV0ZUxvb2t1cDo6QXR0cmlidXRlSUQ6OicgLiAkUGFyYW17QXR0cmlidXRlSUR9LAogICAgICAgICdBdHRyaWJ1dGVMb29rdXA6Ok5hbWU6OicgLiAkQXR0cmlidXRlRGF0YS0+e05hbWV9LCAgICAjIHVzZSB0aGUgb2xkIG5hbWUKICAgICAgICApCiAgICB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJEtleSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBBdHRyaWJ1dGVHZXQoKQoKR2V0IGEgY29uZGl0aW9uIGF0dHJpYnV0ZSBmb3IgYSBnaXZlbiBhdHRyaWJ1dGUgaWQuClJldHVybnMgYSBoYXNoIHJlZmVyZW5jZSBvZiB0aGUgYXR0cmlidXRlIGRhdGEuCgogICAgbXkgJENvbmRpdGlvbkF0dHJpYnV0ZVJlZiA9ICRDb25kaXRpb25PYmplY3QtPkF0dHJpYnV0ZUdldCgKICAgICAgICBBdHRyaWJ1dGVJRCA9PiAxMjM0LAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKVGhlIHJldHVybmVkIGhhc2ggcmVmZXJlbmNlIGNvbnRhaW5zIGZvbGxvd2luZyBlbGVtZW50czoKCiAgICAkQ29uZGl0aW9uQXR0cmlidXRle0F0dHJpYnV0ZUlEfQogICAgJENvbmRpdGlvbkF0dHJpYnV0ZXtOYW1lfQoKPWN1dAoKc3ViIEF0dHJpYnV0ZUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhBdHRyaWJ1dGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdBdHRyaWJ1dGVHZXQ6OkF0dHJpYnV0ZUlEOjonIC4gJFBhcmFte0F0dHJpYnV0ZUlEfTsKICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICRDYWNoZSBpZiAkQ2FjaGU7CgogICAgIyBwcmVwYXJlIFNRTCBzdGF0ZW1lbnQKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCwgbmFtZSBGUk9NIGNvbmRpdGlvbl9hdHRyaWJ1dGUgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17QXR0cmlidXRlSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlQXR0cmlidXRlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEF0dHJpYnV0ZURhdGF7QXR0cmlidXRlSUR9ID0gJFJvd1swXTsKICAgICAgICAkQXR0cmlidXRlRGF0YXtOYW1lfSAgICAgICAgPSAkUm93WzFdOwogICAgfQoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISVBdHRyaWJ1dGVEYXRhICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQXR0cmlidXRlSUQgJFBhcmFte0F0dHJpYnV0ZUlEfSBkb2VzIG5vdCBleGlzdCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVBdHRyaWJ1dGVEYXRhLAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgKTsKCiAgICByZXR1cm4gXCVBdHRyaWJ1dGVEYXRhOwp9Cgo9aXRlbSBBdHRyaWJ1dGVMb29rdXAoKQoKVGhpcyBtZXRob2QgZG9lcyBhIGxvb2t1cCBmb3IgYSBjb25kaXRpb24gYXR0cmlidXRlLiBJZiBhbiBhdHRyaWJ1dGUKaWQgaXMgZ2l2ZW4sIGl0IHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS4gSWYgdGhlIG5hbWUgb2YgdGhlCmF0dHJpYnV0ZSBpcyBnaXZlbiwgdGhlIGFwcHJvcHJpYXRlIGlkIGlzIHJldHVybmVkLgoKICAgIG15ICRBdHRyaWJ1dGVOYW1lID0gJENvbmRpdGlvbk9iamVjdC0+QXR0cmlidXRlTG9va3VwKAogICAgICAgIEF0dHJpYnV0ZUlEID0+IDQzMjEsCiAgICApOwoKICAgIG15ICRBdHRyaWJ1dGVJRCA9ICRDb25kaXRpb25PYmplY3QtPkF0dHJpYnV0ZUxvb2t1cCgKICAgICAgICBOYW1lICAgPT4gJ0F0dHJpYnV0ZU5hbWUnLAogICAgKTsKCj1jdXQKCnN1YiBBdHRyaWJ1dGVMb29rdXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIGlmIGJvdGggcGFyYW1ldGVycyBhcmUgZ2l2ZW4KICAgIGlmICggJFBhcmFte0F0dHJpYnV0ZUlEfSAmJiAkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEF0dHJpYnV0ZUlEIG9yIE5hbWUgLSBub3QgYm90aCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgaWYgYm90aCBwYXJhbWV0ZXJzIGFyZSBub3QgZ2l2ZW4KICAgIGlmICggISRQYXJhbXtBdHRyaWJ1dGVJRH0gJiYgISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQXR0cmlidXRlSUQgb3IgTmFtZSAtIG5vbmUgaXMgZ2l2ZW4hJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGlmIEF0dHJpYnV0ZUlEIGlzIGEgbnVtYmVyCiAgICBpZiAoICRQYXJhbXtBdHRyaWJ1dGVJRH0gJiYgJFBhcmFte0F0dHJpYnV0ZUlEfSAhfiBteyBcQSBcZCsgXHogfXhtcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkF0dHJpYnV0ZUlEIG11c3QgYmUgYSBudW1iZXIhIChBdHRyaWJ1dGVJRDogJFBhcmFte0F0dHJpYnV0ZUlEfSkiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRDYWNoZUtleTsKCiAgICAjIHByZXBhcmUgU1FMIHN0YXRlbWVudHMKICAgIGlmICggJFBhcmFte0F0dHJpYnV0ZUlEfSApIHsKCiAgICAgICAgIyBjaGVjayBjYWNoZQogICAgICAgICRDYWNoZUtleSA9ICdBdHRyaWJ1dGVMb29rdXA6OkF0dHJpYnV0ZUlEOjonIC4gJFBhcmFte0F0dHJpYnV0ZUlEfTsKICAgICAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBuYW1lIEZST00gY29uZGl0aW9uX2F0dHJpYnV0ZSBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17QXR0cmlidXRlSUR9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte05hbWV9ICkgewoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgJENhY2hlS2V5ID0gJ0F0dHJpYnV0ZUxvb2t1cDo6TmFtZTo6JyAuICRQYXJhbXtOYW1lfTsKICAgICAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIGNvbmRpdGlvbl9hdHRyaWJ1dGUgV0hFUkUgbmFtZSA9ID8nLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJExvb2t1cCA9ICcnOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkTG9va3VwID0gJFJvd1swXTsKICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+ICRMb29rdXAsCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICApOwoKICAgIHJldHVybiAkTG9va3VwOwp9Cgo9aXRlbSBBdHRyaWJ1dGVMaXN0KCkKClJldHVybnMgYSBsaXN0IG9mIGFsbCBjb25kaXRpb24gYXR0cmlidXRlcyBhcyBoYXNoIHJlZmVyZW5jZQoKICAgIG15ICRDb25kaXRpb25BdHRyaWJ1dGVzUmVmID0gJENvbmRpdGlvbk9iamVjdC0+QXR0cmlidXRlTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpUaGUgcmV0dXJuZWQgaGFzaCByZWZlcmVuY2UgY29udGFpbnMgZW50cmllcyBsaWtlIHRoaXM6CgogICAgJENvbmRpdGlvbkF0dHJpYnV0ZXtBdHRyaWJ1dGVJRH0gPSAnQXR0cmlidXRlTmFtZScKCj1jdXQKCnN1YiBBdHRyaWJ1dGVMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBVc2VySUQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnQXR0cmlidXRlTGlzdCc7CiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAkQ2FjaGUgaWYgJENhY2hlOwoKICAgICMgcHJlcGFyZSBTUUwgc3RhdGVtZW50CiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBuYW1lIEZST00gY29uZGl0aW9uX2F0dHJpYnV0ZScsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJUF0dHJpYnV0ZUxpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRBdHRyaWJ1dGVMaXN0eyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVBdHRyaWJ1dGVMaXN0LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgKTsKCiAgICByZXR1cm4gXCVBdHRyaWJ1dGVMaXN0Owp9Cgo9aXRlbSBBdHRyaWJ1dGVEZWxldGUoKQoKRGVsZXRlcyBhIGNvbmRpdGlvbiBhdHRyaWJ1dGUuCgogICAgbXkgJFN1Y2Nlc3MgPSAkQ29uZGl0aW9uT2JqZWN0LT5BdHRyaWJ1dGVEZWxldGUoCiAgICAgICAgQXR0cmlidXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEF0dHJpYnV0ZURlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhBdHRyaWJ1dGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbG9va3VwIGF0dHJpYnV0ZSBuYW1lCiAgICBteSAkQXR0cmlidXRlTmFtZSA9ICRTZWxmLT5BdHRyaWJ1dGVMb29rdXAoCiAgICAgICAgQXR0cmlidXRlSUQgPT4gJFBhcmFte0F0dHJpYnV0ZUlEfSwKICAgICk7CgogICAgIyBkZWxldGUgY29uZGl0aW9uIGF0dHJpYnV0ZSBmcm9tIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ0RFTEVURSBGUk9NIGNvbmRpdGlvbl9hdHRyaWJ1dGUgJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0F0dHJpYnV0ZUlEfSBdLAogICAgKTsKCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgZm9yIG15ICRLZXkgKAogICAgICAgICdBdHRyaWJ1dGVMaXN0JywKICAgICAgICAnQXR0cmlidXRlR2V0OjpBdHRyaWJ1dGVJRDo6JyAuICRQYXJhbXtBdHRyaWJ1dGVJRH0sCiAgICAgICAgJ0F0dHJpYnV0ZUxvb2t1cDo6QXR0cmlidXRlSUQ6OicgLiAkUGFyYW17QXR0cmlidXRlSUR9LAogICAgICAgICdBdHRyaWJ1dGVMb29rdXA6Ok5hbWU6OicgLiAkQXR0cmlidXRlTmFtZSwKICAgICAgICApCiAgICB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJEtleSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246OkV4cHJlc3Npb247Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246OkV4cHJlc3Npb24gLSBjb25kaXRpb24gZXhwcmVzc2lvbiBsaWIKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGZ1bmN0aW9ucyBmb3IgY29uZGl0aW9uIGV4cHJlc3Npb25zIGluIElUU01DaGFuZ2VNYW5hZ2VtZW50LgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1pdGVtIEV4cHJlc3Npb25BZGQoKQoKQWRkIGEgbmV3IGNvbmRpdGlvbiBleHByZXNzaW9uLgoKICAgIG15ICRFeHByZXNzaW9uSUQgPSAkQ29uZGl0aW9uT2JqZWN0LT5FeHByZXNzaW9uQWRkKAogICAgICAgIENvbmRpdGlvbklEICA9PiAxMjMsCiAgICAgICAgT2JqZWN0SUQgICAgID0+IDIzNCwKICAgICAgICBBdHRyaWJ1dGVJRCAgPT4gMzQ1LAogICAgICAgIE9wZXJhdG9ySUQgICA9PiA0NTYsCiAgICAgICAgU2VsZWN0b3IgICAgID0+IDEyMzQsCiAgICAgICAgQ29tcGFyZVZhbHVlID0+ICdyZWplY3RlZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEV4cHJlc3Npb25BZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ29uZGl0aW9uSUQgT2JqZWN0SUQgQXR0cmlidXRlSUQgT3BlcmF0b3JJRCBTZWxlY3RvciBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgaGFuZGxlICdDb21wYXJlVmFsdWUnIGluIGEgc3BlY2lhbCB3YXkKICAgIGlmICggIWV4aXN0cyAkUGFyYW17Q29tcGFyZVZhbHVlfSB8fCAhZGVmaW5lZCAkUGFyYW17Q29tcGFyZVZhbHVlfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ29tcGFyZVZhbHVlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgY29uZGl0aW9uIGZvciBldmVudCBoYW5kbGVyCiAgICBteSAkQ29uZGl0aW9uID0gJFNlbGYtPkNvbmRpdGlvbkdldCgKICAgICAgICBDb25kaXRpb25JRCA9PiAkUGFyYW17Q29uZGl0aW9uSUR9LAogICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGNvbmRpdGlvbgogICAgcmV0dXJuIGlmICEkQ29uZGl0aW9uOwoKICAgICMgdHJpZ2dlciBFeHByZXNzaW9uQWRkUHJlLUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdFeHByZXNzaW9uQWRkUHJlJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENvbmRpdGlvbi0+e0NoYW5nZUlEfSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBhZGQgbmV3IGV4cHJlc3Npb24gbmFtZSB0byBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBjb25kaXRpb25fZXhwcmVzc2lvbiAnCiAgICAgICAgICAgIC4gJyhjb25kaXRpb25faWQsIG9iamVjdF9pZCwgYXR0cmlidXRlX2lkLCAnCiAgICAgICAgICAgIC4gJ29wZXJhdG9yX2lkLCBzZWxlY3RvciwgY29tcGFyZV92YWx1ZSkgJwogICAgICAgICAgICAuICdWQUxVRVMgKD8sID8sID8sID8sID8sID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtDb25kaXRpb25JRH0sIFwkUGFyYW17T2JqZWN0SUR9LCBcJFBhcmFte0F0dHJpYnV0ZUlEfSwKICAgICAgICAgICAgXCRQYXJhbXtPcGVyYXRvcklEfSwgIFwkUGFyYW17U2VsZWN0b3J9LCBcJFBhcmFte0NvbXBhcmVWYWx1ZX0sCiAgICAgICAgXSwKICAgICk7CgogICAgIyBwcmVwYXJlIFNRTCBzdGF0ZW1lbnQKICAgIG15ICRFeHByZXNzaW9uSUQ7CgogICAgIyB0aGlzIGlzIGltcG9ydGFudCBmb3Igb3JhY2xlIGZvciB3aGljaCBhbiBlbXB0eSBzdHJpbmcgYW5kIE5VTEwgaXMgdGhlIHNhbWUhCiAgICBpZiAoICRTZWxmLT57REJUeXBlfSBlcSAnb3JhY2xlJyAmJiAkUGFyYW17Q29tcGFyZVZhbHVlfSBlcSAnJyApIHsKCiAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBjb25kaXRpb25fZXhwcmVzc2lvbiAnCiAgICAgICAgICAgICAgICAuICdXSEVSRSBjb25kaXRpb25faWQgPSA/IEFORCBvYmplY3RfaWQgPSA/IEFORCBhdHRyaWJ1dGVfaWQgPSA/ICcKICAgICAgICAgICAgICAgIC4gJ0FORCBvcGVyYXRvcl9pZCA9ID8gQU5EIHNlbGVjdG9yID0gPyBBTkQgY29tcGFyZV92YWx1ZSBJUyBOVUxMJywKICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICBcJFBhcmFte0NvbmRpdGlvbklEfSwgXCRQYXJhbXtPYmplY3RJRH0sIFwkUGFyYW17QXR0cmlidXRlSUR9LAogICAgICAgICAgICAgICAgXCRQYXJhbXtPcGVyYXRvcklEfSwgXCRQYXJhbXtTZWxlY3Rvcn0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGZvciBhbGwgb3RoZXIgZGF0YWJhc2VzIEFORCBmb3Igb3JhY2xlIElGIHRoZSBjb21wYXJlIHZhbHVlIGlzIE5PVCBhbiBlbXB0eSBzdHJpbmcKICAgIGVsc2UgewogICAgICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkIEZST00gY29uZGl0aW9uX2V4cHJlc3Npb24gJwogICAgICAgICAgICAgICAgLiAnV0hFUkUgY29uZGl0aW9uX2lkID0gPyBBTkQgb2JqZWN0X2lkID0gPyBBTkQgYXR0cmlidXRlX2lkID0gPyAnCiAgICAgICAgICAgICAgICAuICdBTkQgb3BlcmF0b3JfaWQgPSA/IEFORCBzZWxlY3RvciA9ID8gQU5EIGNvbXBhcmVfdmFsdWUgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICBcJFBhcmFte0NvbmRpdGlvbklEfSwgXCRQYXJhbXtPYmplY3RJRH0sIFwkUGFyYW17QXR0cmlidXRlSUR9LAogICAgICAgICAgICAgICAgXCRQYXJhbXtPcGVyYXRvcklEfSwgIFwkUGFyYW17U2VsZWN0b3J9LCBcJFBhcmFte0NvbXBhcmVWYWx1ZX0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBpZCBvZiBjcmVhdGVkIGV4cHJlc3Npb24KICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEV4cHJlc3Npb25JRCA9ICRSb3dbMF07CiAgICB9CgogICAgIyBjaGVjayBpZiBleHByZXNzaW9uIGNvdWxkIGJlIGFkZGVkCiAgICBpZiAoICEkRXhwcmVzc2lvbklEICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiRXhwcmVzc2lvbkFkZCgpIGZhaWxlZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGVsZXRlIGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJ0V4cHJlc3Npb25MaXN0OjpDb25kaXRpb25JRDo6JyAuICRQYXJhbXtDb25kaXRpb25JRH0sCiAgICApOwoKICAgICMgdHJpZ2dlciBFeHByZXNzaW9uQWRkUG9zdC1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnRXhwcmVzc2lvbkFkZFBvc3QnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgPT4gJENvbmRpdGlvbi0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgRXhwcmVzc2lvbklEID0+ICRFeHByZXNzaW9uSUQsCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAkRXhwcmVzc2lvbklEOwp9Cgo9aXRlbSBFeHByZXNzaW9uVXBkYXRlKCkKClVwZGF0ZSBhIGNvbmRpdGlvbiBleHByZXNzaW9uLgoKICAgIG15ICRTdWNjZXNzID0gJENvbmRpdGlvbk9iamVjdC0+RXhwcmVzc2lvblVwZGF0ZSgKICAgICAgICBFeHByZXNzaW9uSUQgPT4gMTIzNCwKICAgICAgICBPYmplY3RJRCAgICAgPT4gMjM0LCAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQXR0cmlidXRlSUQgID0+IDM0NSwgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIE9wZXJhdG9ySUQgICA9PiA0NTYsICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBTZWxlY3RvciAgICAgPT4gMTIzNCwgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgQ29tcGFyZVZhbHVlID0+ICdyZWplY3RlZCcsICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBFeHByZXNzaW9uVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEV4cHJlc3Npb25JRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGV4cHJlc3Npb24KICAgIG15ICRFeHByZXNzaW9uID0gJFNlbGYtPkV4cHJlc3Npb25HZXQoCiAgICAgICAgRXhwcmVzc2lvbklEID0+ICRQYXJhbXtFeHByZXNzaW9uSUR9LAogICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBleHByZXNzaW9uCiAgICByZXR1cm4gaWYgISRFeHByZXNzaW9uOwoKICAgICMgZ2V0IGNvbmRpdGlvbiBmb3IgZXZlbnQgaGFuZGxlcgogICAgbXkgJENvbmRpdGlvbiA9ICRTZWxmLT5Db25kaXRpb25HZXQoCiAgICAgICAgQ29uZGl0aW9uSUQgPT4gJEV4cHJlc3Npb24tPntDb25kaXRpb25JRH0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgY29uZGl0aW9uCiAgICByZXR1cm4gaWYgISRDb25kaXRpb247CgogICAgIyB0cmlnZ2VyIEV4cHJlc3Npb25VcGRhdGVQcmUtRXZlbnQKICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ0V4cHJlc3Npb25VcGRhdGVQcmUnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ29uZGl0aW9uLT57Q2hhbmdlSUR9LAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIG1hcCB1cGRhdGUgYXR0cmlidXRlcyB0byBjb2x1bW4gbmFtZXMKICAgIG15ICVBdHRyaWJ1dGUgPSAoCiAgICAgICAgT2JqZWN0SUQgICAgID0+ICdvYmplY3RfaWQnLAogICAgICAgIEF0dHJpYnV0ZUlEICA9PiAnYXR0cmlidXRlX2lkJywKICAgICAgICBPcGVyYXRvcklEICAgPT4gJ29wZXJhdG9yX2lkJywKICAgICAgICBTZWxlY3RvciAgICAgPT4gJ3NlbGVjdG9yJywKICAgICAgICBDb21wYXJlVmFsdWUgPT4gJ2NvbXBhcmVfdmFsdWUnLAogICAgKTsKCiAgICAjIGJ1aWxkIFNRTCB0byB1cGRhdGUgZXhwcmVzc2lvbgogICAgbXkgJFNRTCA9ICdVUERBVEUgY29uZGl0aW9uX2V4cHJlc3Npb24gU0VUICc7CiAgICBteSBAQmluZDsKCiAgICBBVFRSSUJVVEU6CiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAlQXR0cmlidXRlICkgewoKICAgICAgICAjIHByZXNlcnZlIHRoZSBvbGQgdmFsdWUsIHdoZW4gdGhlIGNvbHVtbiBpc24ndCBpbiBmdW5jdGlvbiBwYXJhbWV0ZXJzCiAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgIWV4aXN0cyAkUGFyYW17JEF0dHJpYnV0ZX07CiAgICAgICAgbmV4dCBBVFRSSUJVVEUgaWYgIWRlZmluZWQgJFBhcmFteyRBdHRyaWJ1dGV9OwoKICAgICAgICAjIHBhcmFtIGNoZWNraW5nIGhhcyBhbHJlYWR5IGJlZW4gZG9uZSwgc28gdGhpcyBpcyBzYWZlCiAgICAgICAgJFNRTCAuPSAiJEF0dHJpYnV0ZXskQXR0cmlidXRlfSA9ID8sICI7CiAgICAgICAgcHVzaCBAQmluZCwgXCRQYXJhbXskQXR0cmlidXRlfTsKICAgIH0KCiAgICAjIHNldCBjb25kaXRpb24gSUQgdG8gYWxsb3cgdHJhaWxpbmcgY29tbWEgb2YgcHJldmlvdXMgbG9vcAogICAgJFNRTCAuPSAnIGNvbmRpdGlvbl9pZCA9IGNvbmRpdGlvbl9pZCAnOwoKICAgICMgc2V0IG1hdGNoaW5nIG9mIFNRTCBzdGF0ZW1lbnQKICAgICRTUUwgLj0gJ1dIRVJFIGlkID0gPyc7CiAgICBwdXNoIEBCaW5kLCBcJFBhcmFte0V4cHJlc3Npb25JRH07CgogICAgIyB1cGRhdGUgZXhwcmVzc2lvbgogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMICA9PiAkU1FMLAogICAgICAgIEJpbmQgPT4gXEBCaW5kLAogICAgKTsKCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgZm9yIG15ICRLZXkgKAogICAgICAgICdFeHByZXNzaW9uTGlzdDo6Q29uZGl0aW9uSUQ6OicgLiAkRXhwcmVzc2lvbi0+e0NvbmRpdGlvbklEfSwKICAgICAgICAnRXhwcmVzc2lvbkdldDo6JyAuICRQYXJhbXtFeHByZXNzaW9uSUR9LAogICAgICAgICkKICAgIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkS2V5LAogICAgICAgICk7CiAgICB9CgogICAgIyB0cmlnZ2VyIEV4cHJlc3Npb25VcGRhdGVQb3N0LUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdFeHByZXNzaW9uVXBkYXRlUG9zdCcsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgID0+ICRDb25kaXRpb24tPntDaGFuZ2VJRH0sCiAgICAgICAgICAgIE9sZEV4cHJlc3Npb25EYXRhID0+ICRFeHByZXNzaW9uLAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gRXhwcmVzc2lvbkdldCgpCgpHZXQgYSBjb25kaXRpb24gZXhwcmVzc2lvbiBmb3IgYSBnaXZlbiBleHByZXNzaW9uIGlkLgpSZXR1cm5zIGEgaGFzaCByZWZlcmVuY2Ugb2YgdGhlIGV4cHJlc3Npb24gZGF0YS4KCiAgICBteSAkQ29uZGl0aW9uRXhwcmVzc2lvblJlZiA9ICRDb25kaXRpb25PYmplY3QtPkV4cHJlc3Npb25HZXQoCiAgICAgICAgRXhwcmVzc2lvbklEID0+IDEyMzQsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKVGhlIHJldHVybmVkIGhhc2ggcmVmZXJlbmNlIGNvbnRhaW5zIGZvbGxvd2luZyBlbGVtZW50czoKCiAgICAkQ29uZGl0aW9uRXhwcmVzc2lvbntFeHByZXNzaW9uSUR9CiAgICAkQ29uZGl0aW9uRXhwcmVzc2lvbntDb25kaXRpb25JRH0KICAgICRDb25kaXRpb25FeHByZXNzaW9ue09iamVjdElEfQogICAgJENvbmRpdGlvbkV4cHJlc3Npb257QXR0cmlidXRlSUR9CiAgICAkQ29uZGl0aW9uRXhwcmVzc2lvbntPcGVyYXRvcklEfQogICAgJENvbmRpdGlvbkV4cHJlc3Npb257U2VsZWN0b3J9CiAgICAkQ29uZGl0aW9uRXhwcmVzc2lvbntDb21wYXJlVmFsdWV9Cgo9Y3V0CgpzdWIgRXhwcmVzc2lvbkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhFeHByZXNzaW9uSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnRXhwcmVzc2lvbkdldDo6JyAuICRQYXJhbXtFeHByZXNzaW9uSUR9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAjIHByZXBhcmUgU1FMIHN0YXRlbWVudAogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgY29uZGl0aW9uX2lkLCBvYmplY3RfaWQsIGF0dHJpYnV0ZV9pZCwgJwogICAgICAgICAgICAuICdvcGVyYXRvcl9pZCwgc2VsZWN0b3IsIGNvbXBhcmVfdmFsdWUgJwogICAgICAgICAgICAuICdGUk9NIGNvbmRpdGlvbl9leHByZXNzaW9uIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0V4cHJlc3Npb25JRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVFeHByZXNzaW9uRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEV4cHJlc3Npb25EYXRhe0V4cHJlc3Npb25JRH0gPSAkUm93WzBdOwogICAgICAgICRFeHByZXNzaW9uRGF0YXtDb25kaXRpb25JRH0gID0gJFJvd1sxXTsKICAgICAgICAkRXhwcmVzc2lvbkRhdGF7T2JqZWN0SUR9ICAgICA9ICRSb3dbMl07CiAgICAgICAgJEV4cHJlc3Npb25EYXRhe0F0dHJpYnV0ZUlEfSAgPSAkUm93WzNdOwogICAgICAgICRFeHByZXNzaW9uRGF0YXtPcGVyYXRvcklEfSAgID0gJFJvd1s0XTsKICAgICAgICAkRXhwcmVzc2lvbkRhdGF7U2VsZWN0b3J9ICAgICA9ICRSb3dbNV07CgogICAgICAgICMgdGhpcyBpcyBpbXBvcnRhbnQgZm9yIG9yYWNsZSBmb3Igd2hpY2ggYW4gZW1wdHkgc3RyaW5nIGFuZCBOVUxMIGlzIHRoZSBzYW1lIQogICAgICAgICRFeHByZXNzaW9uRGF0YXtDb21wYXJlVmFsdWV9ID0gJFJvd1s2XSAvLyAnJzsKICAgIH0KCiAgICAjIGNoZWNrIGVycm9yCiAgICBpZiAoICElRXhwcmVzc2lvbkRhdGEgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJFeHByZXNzaW9uSUQgJFBhcmFte0V4cHJlc3Npb25JRH0gZG9lcyBub3QgZXhpc3QhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlRXhwcmVzc2lvbkRhdGEsCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICApOwoKICAgIHJldHVybiBcJUV4cHJlc3Npb25EYXRhOwp9Cgo9aXRlbSBFeHByZXNzaW9uTGlzdCgpCgpSZXR1cm5zIGEgbGlzdCBvZiBhbGwgY29uZGl0aW9uIGV4cHJlc3Npb24gaWRzIGZvcgphIGdpdmVuIENvbmRpdGlvbklEIGFzIGFycmF5IHJlZmVyZW5jZS4KCiAgICBteSAkQ29uZGl0aW9uRXhwcmVzc2lvbklEc1JlZiA9ICRDb25kaXRpb25PYmplY3QtPkV4cHJlc3Npb25MaXN0KAogICAgICAgIENvbmRpdGlvbklEID0+IDEyMzQsCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgRXhwcmVzc2lvbkxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ29uZGl0aW9uSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnRXhwcmVzc2lvbkxpc3Q6OkNvbmRpdGlvbklEOjonIC4gJFBhcmFte0NvbmRpdGlvbklEfTsKICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICRDYWNoZSBpZiAkQ2FjaGU7CgogICAgIyBwcmVwYXJlIFNRTCBzdGF0ZW1lbnQKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBjb25kaXRpb25fZXhwcmVzc2lvbiAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGNvbmRpdGlvbl9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NvbmRpdGlvbklEfSBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBFeHByZXNzaW9uTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBARXhwcmVzc2lvbkxpc3QsICRSb3dbMF07CiAgICB9CgogICAgIyBzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQEV4cHJlc3Npb25MaXN0LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgKTsKCiAgICByZXR1cm4gXEBFeHByZXNzaW9uTGlzdDsKfQoKPWl0ZW0gRXhwcmVzc2lvbkRlbGV0ZSgpCgpEZWxldGVzIGEgY29uZGl0aW9uIGV4cHJlc3Npb24uCgogICAgbXkgJFN1Y2Nlc3MgPSAkQ29uZGl0aW9uT2JqZWN0LT5FeHByZXNzaW9uRGVsZXRlKAogICAgICAgIEV4cHJlc3Npb25JRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEV4cHJlc3Npb25EZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoRXhwcmVzc2lvbklEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgZXhwcmVzc2lvbgogICAgbXkgJEV4cHJlc3Npb24gPSAkU2VsZi0+RXhwcmVzc2lvbkdldCgKICAgICAgICBFeHByZXNzaW9uSUQgPT4gJFBhcmFte0V4cHJlc3Npb25JRH0sCiAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGV4cHJlc3Npb24KICAgIHJldHVybiBpZiAhJEV4cHJlc3Npb247CgogICAgIyBnZXQgY29uZGl0aW9uIGZvciBldmVudCBoYW5kbGVyCiAgICBteSAkQ29uZGl0aW9uID0gJFNlbGYtPkNvbmRpdGlvbkdldCgKICAgICAgICBDb25kaXRpb25JRCA9PiAkRXhwcmVzc2lvbi0+e0NvbmRpdGlvbklEfSwKICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBjb25kaXRpb24KICAgIHJldHVybiBpZiAhJENvbmRpdGlvbjsKCiAgICAjIHRyaWdnZXIgRXhwcmVzc2lvbkRlbGV0ZVByZS1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnRXhwcmVzc2lvbkRlbGV0ZVByZScsCiAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDb25kaXRpb24tPntDaGFuZ2VJRH0sCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgZGVsZXRlIGNvbmRpdGlvbiBleHByZXNzaW9uIGZyb20gZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnREVMRVRFIEZST00gY29uZGl0aW9uX2V4cHJlc3Npb24gJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0V4cHJlc3Npb25JRH0gXSwKICAgICk7CgogICAgIyBkZWxldGUgY2FjaGUKICAgIGZvciBteSAkS2V5ICgKICAgICAgICAnRXhwcmVzc2lvbkxpc3Q6OkNvbmRpdGlvbklEOjonIC4gJEV4cHJlc3Npb24tPntDb25kaXRpb25JRH0sCiAgICAgICAgJ0V4cHJlc3Npb25HZXQ6OicgLiAkUGFyYW17RXhwcmVzc2lvbklEfSwKICAgICAgICApCiAgICB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJEtleSwKICAgICAgICApOwogICAgfQoKICAgICMgdHJpZ2dlciBFeHByZXNzaW9uRGVsZXRlUG9zdC1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnRXhwcmVzc2lvbkRlbGV0ZVBvc3QnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ29uZGl0aW9uLT57Q2hhbmdlSUR9LAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gRXhwcmVzc2lvbkRlbGV0ZUFsbCgpCgpEZWxldGVzIGFsbCBjb25kaXRpb24gZXhwcmVzc2lvbnMgZm9yIGEgZ2l2ZW4gY29uZGl0aW9uIGlkLgoKICAgIG15ICRTdWNjZXNzID0gJENvbmRpdGlvbk9iamVjdC0+RXhwcmVzc2lvbkRlbGV0ZUFsbCgKICAgICAgICBDb25kaXRpb25JRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgRXhwcmVzc2lvbkRlbGV0ZUFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDb25kaXRpb25JRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGNvbmRpdGlvbiBmb3IgZXZlbnQgaGFuZGxlcgogICAgbXkgJENvbmRpdGlvbiA9ICRTZWxmLT5Db25kaXRpb25HZXQoCiAgICAgICAgQ29uZGl0aW9uSUQgPT4gJFBhcmFte0NvbmRpdGlvbklEfSwKICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBjb25kaXRpb24KICAgIHJldHVybiBpZiAhJENvbmRpdGlvbjsKCiAgICAjIGdldCBhbGwgZXhwcmVzc2lvbnMgZm9yIHRoZSBnaXZlbiBjb25kaXRpb24gaWQKICAgIG15ICRFeHByZXNzaW9uSURzUmVmID0gJFNlbGYtPkV4cHJlc3Npb25MaXN0KAogICAgICAgIENvbmRpdGlvbklEID0+ICRQYXJhbXtDb25kaXRpb25JRH0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgdHJpZ2dlciBFeHByZXNzaW9uRGVsZXRlQWxsUHJlLUV2ZW50CiAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgIEV2ZW50ID0+ICdFeHByZXNzaW9uRGVsZXRlQWxsUHJlJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJENvbmRpdGlvbi0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgQ29uZGl0aW9uSUQgPT4gJFBhcmFte0NvbmRpdGlvbklEfSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBkZWxldGUgY29uZGl0aW9uIGV4cHJlc3Npb25zIGZyb20gZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnREVMRVRFIEZST00gY29uZGl0aW9uX2V4cHJlc3Npb24gJwogICAgICAgICAgICAuICdXSEVSRSBjb25kaXRpb25faWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDb25kaXRpb25JRH0gXSwKICAgICk7CgogICAgIyBkZWxldGUgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAnRXhwcmVzc2lvbkxpc3Q6OkNvbmRpdGlvbklEOjonIC4gJFBhcmFte0NvbmRpdGlvbklEfSwKICAgICk7CgogICAgIyBkZWxldGUgY2FjaGUKICAgIGlmICggJEV4cHJlc3Npb25JRHNSZWYgJiYgQHskRXhwcmVzc2lvbklEc1JlZn0gKSB7CiAgICAgICAgZm9yIG15ICRFeHByZXNzaW9uSUQgKCBAeyRFeHByZXNzaW9uSURzUmVmfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICAgICAgS2V5ICA9PiAnRXhwcmVzc2lvbkdldDo6JyAuICRFeHByZXNzaW9uSUQsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgdHJpZ2dlciBFeHByZXNzaW9uRGVsZXRlQWxsUG9zdC1FdmVudAogICAgJFNlbGYtPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnRXhwcmVzc2lvbkRlbGV0ZUFsbFBvc3QnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBDaGFuZ2VJRCAgICA9PiAkQ29uZGl0aW9uLT57Q2hhbmdlSUR9LAogICAgICAgICAgICBDb25kaXRpb25JRCA9PiAkUGFyYW17Q29uZGl0aW9uSUR9LAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gRXhwcmVzc2lvbk1hdGNoKCkKClJldHVybnMgdGhlIGJvb2xlYW4gdmFsdWUgb2YgYW4gZXhwcmVzc2lvbi4KCiAgICBteSAkTWF0Y2ggPSAkQ29uZGl0aW9uT2JqZWN0LT5FeHByZXNzaW9uTWF0Y2goCiAgICAgICAgRXhwcmVzc2lvbklEICAgICAgPT4gMTIzLAogICAgICAgIEF0dHJpYnV0ZXNDaGFuZ2VkID0+IHsgSVRTTUNoYW5nZSA9PiBbIENoYW5nZVRpdGxlLCBDaGFuZ2VEZXNjcmlwdGlvbiBdIH0sICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBFeHByZXNzaW9uTWF0Y2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoRXhwcmVzc2lvbklEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgZXhwcmVzc2lvbiBjb250ZW50CiAgICBteSAkRXhwcmVzc2lvbiA9ICRTZWxmLT5FeHByZXNzaW9uR2V0KAogICAgICAgIEV4cHJlc3Npb25JRCA9PiAkUGFyYW17RXhwcmVzc2lvbklEfSwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXhwcmVzc2lvbiBjb250ZW50CiAgICByZXR1cm4gaWYgISRFeHByZXNzaW9uOwoKICAgICMgZ2V0IGV4cHJlc3Npb24gYXR0cmlidXRlcwogICAgbXkgJEV4cHJlc3Npb25EYXRhID0gJFNlbGYtPl9FeHByZXNzaW9uTWF0Y2hJbml0KAogICAgICAgIEV4cHJlc3Npb24gPT4gJEV4cHJlc3Npb24sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBleHByZXNzaW9uIGF0dHJpYnV0ZXMKICAgIHJldHVybiBpZiAhJEV4cHJlc3Npb25EYXRhOwoKICAgICMgZ2V0IGNoYW5nZWQgYXR0cmlidXRlcwogICAgbXkgJEF0dHJpYnV0ZXNDaGFuZ2VkVHlwZTsKICAgIG15IEBBdHRyaWJ1dGVzQ2hhbmdlZDsKICAgIGlmICggZXhpc3RzICRQYXJhbXtBdHRyaWJ1dGVzQ2hhbmdlZH0gJiYgZGVmaW5lZCAkUGFyYW17QXR0cmlidXRlc0NoYW5nZWR9ICkgewoKICAgICAgICAjIGNoYW5nZWQgYXR0cmlidXRlcwogICAgICAgIG15ICVBdHRyaWJ1dGVDaGFuZ2VkOwoKICAgICAgICAjIGNoZWNrIGZvciByZWZlcmVuY2UgdHlwZQogICAgICAgIGlmICggcmVmICRQYXJhbXtBdHRyaWJ1dGVzQ2hhbmdlZH0gZXEgJ0hBU0gnICkgewogICAgICAgICAgICAlQXR0cmlidXRlQ2hhbmdlZCA9ICV7ICRQYXJhbXtBdHRyaWJ1dGVzQ2hhbmdlZH0gfTsKCiAgICAgICAgICAgICMgZ2V0IGF0dHJpYnV0ZSB0eXBlCiAgICAgICAgICAgICRBdHRyaWJ1dGVzQ2hhbmdlZFR5cGUgPSAoIGtleXMgJUF0dHJpYnV0ZUNoYW5nZWQgKVswXTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIHJlZmVyZW5jZSB0eXBlCiAgICAgICAgaWYgKCAkQXR0cmlidXRlc0NoYW5nZWRUeXBlICYmIHJlZiAkQXR0cmlidXRlQ2hhbmdlZHskQXR0cmlidXRlc0NoYW5nZWRUeXBlfSBlcSAnQVJSQVknICkgewoKICAgICAgICAgICAgIyBnZXQgbGlzdCBvZiBjaGFuZ2VkIGF0dHJpYnV0ZXMKICAgICAgICAgICAgQEF0dHJpYnV0ZXNDaGFuZ2VkID0gQHsgJEF0dHJpYnV0ZUNoYW5nZWR7JEF0dHJpYnV0ZXNDaGFuZ2VkVHlwZX0gfTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgb2JqZWN0IG5hbWUKICAgIG15ICRPYmplY3ROYW1lID0gJEV4cHJlc3Npb25EYXRhLT57T2JqZWN0fS0+e05hbWV9OwoKICAgICMgY2hlY2sgZm9yIGNoYW5nZWQgYXR0cmlidXRlcyB0eXBlcwogICAgaWYgKCAkQXR0cmlidXRlc0NoYW5nZWRUeXBlICYmICRBdHRyaWJ1dGVzQ2hhbmdlZFR5cGUgbmUgJE9iamVjdE5hbWUgKSB7CgogICAgICAgICMgdGhpcyBleHByZXNzaW9uIGRvZXMgbm90IG1hdGNoIHJlcXVlc3RlZCB0eXBlCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGF0dHJpYnV0ZSB0eXBlCiAgICBteSAkQXR0cmlidXRlVHlwZSA9ICRFeHByZXNzaW9uRGF0YS0+e0F0dHJpYnV0ZX0tPntOYW1lfTsKCiAgICAjIGNoZWNrIGZvciBjaGFuZ2VkIGF0dHJpYnV0ZXMgYW5kIGF2YWlsYWJsZSBhdHRyaWJ1dGVzIG9mIGV4cHJlc3Npb24KICAgIGlmICggJEF0dHJpYnV0ZVR5cGUgJiYgQEF0dHJpYnV0ZXNDaGFuZ2VkICkgewoKICAgICAgICAjIGNoZWNrIGZvciBvdXIgYXR0cmlidXRlIGluIGNoYW5nZWQgYXR0cmlidXRlIGxpc3QKICAgICAgICBteSBAQXR0cmlidXRlRm91bmQgPSBncmVwIHsgJF8gZXEgJEF0dHJpYnV0ZVR5cGUgfSBAQXR0cmlidXRlc0NoYW5nZWQ7CgogICAgICAgICMgdGhpcyBleHByZXNzaW9uIGRvZXMgbm90IGhhdmUgdGhlIHJlcXVlc3RlZCBhdHRyaWJ1dGUKICAgICAgICByZXR1cm4gaWYgIUBBdHRyaWJ1dGVGb3VuZDsKICAgIH0KCiAgICAjIGdldCBvYmplY3QgZGF0YQogICAgbXkgJEV4cHJlc3Npb25PYmplY3REYXRhID0gJFNlbGYtPk9iamVjdERhdGFHZXQoCiAgICAgICAgQ29uZGl0aW9uSUQgPT4gJEV4cHJlc3Npb24tPntDb25kaXRpb25JRH0sCiAgICAgICAgT2JqZWN0TmFtZSAgPT4gJE9iamVjdE5hbWUsCiAgICAgICAgU2VsZWN0b3IgICAgPT4gJEV4cHJlc3Npb24tPntTZWxlY3Rvcn0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZm9yIGV4cHJlc3Npb24gb2JqZWN0IGRhdGEKICAgICMgbm8gbmVlZCB0byBleGVjdXRlIG9wZXJhdG9yIGlmIGl0IGlzIGFuIGVtcHR5IGFycmF5IHJlZgogICAgaWYgKAogICAgICAgICEkRXhwcmVzc2lvbk9iamVjdERhdGEKICAgICAgICB8fCByZWYgJEV4cHJlc3Npb25PYmplY3REYXRhIG5lICdBUlJBWScKICAgICAgICB8fCByZWYgJEV4cHJlc3Npb25PYmplY3REYXRhIGVxICdBUlJBWScgJiYgIUB7JEV4cHJlc3Npb25PYmplY3REYXRhfQogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBhdHRyaWJ1dGUgdHlwZQogICAgaWYgKCAhJEF0dHJpYnV0ZVR5cGUgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBhdHRyaWJ1dGUgJE9iamVjdE5hbWUgKCRFeHByZXNzaW9uLT57U2VsZWN0b3J9KSBmb3VuZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgZm9yIG9iamVjdCBhdHRyaWJ1dGUKICAgIGZvciBteSAkRXhwcmVzc2lvbk9iamVjdCAoIEB7JEV4cHJlc3Npb25PYmplY3REYXRhfSApIHsKICAgICAgICBpZiAoICFleGlzdHMgJEV4cHJlc3Npb25PYmplY3QtPnskQXR0cmlidXRlVHlwZX0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBvYmplY3QgYXR0cmlidXRlIGZvciAkT2JqZWN0TmFtZSAoJEF0dHJpYnV0ZVR5cGUpIGZvdW5kISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyByZXR1cm4gcmVzdWx0IG9mIHRoZSBleHByZXNzaW9ucyBleGVjdXRpb24KICAgIG15ICRSZXN1bHQgPSAkU2VsZi0+T3BlcmF0b3JFeGVjdXRlKAogICAgICAgIE9wZXJhdG9yTmFtZSA9PiAkRXhwcmVzc2lvbkRhdGEtPntPcGVyYXRvcn0tPntOYW1lfSwKICAgICAgICBBdHRyaWJ1dGUgICAgPT4gJEF0dHJpYnV0ZVR5cGUsCiAgICAgICAgU2VsZWN0b3IgICAgID0+ICRFeHByZXNzaW9uLT57U2VsZWN0b3J9LAogICAgICAgIE9iamVjdERhdGEgICA9PiAkRXhwcmVzc2lvbk9iamVjdERhdGEsCiAgICAgICAgQ29tcGFyZVZhbHVlID0+ICRFeHByZXNzaW9uLT57Q29tcGFyZVZhbHVlfSwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgcmV0dXJuIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbnMgZXhlY3V0aW9uCiAgICByZXR1cm4gJFJlc3VsdDsKfQoKPWl0ZW0gX0V4cHJlc3Npb25NYXRjaEluaXQoKQoKUmV0dXJucyBvYmplY3QsIGF0dHJpYnV0ZSBhbmQgb3BlcmF0b3Igb2YgYSBnaXZlbiBleHByZXNzaW9uLgoKICAgIG15ICRFeHByZXNzaW9uRGF0YSA9ICRDb25kaXRpb25PYmplY3QtPl9FeHByZXNzaW9uTWF0Y2hJbml0KAogICAgICAgIEV4cHJlc3Npb24gPT4gJEV4cHJlc3Npb25SZWYsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBfRXhwcmVzc2lvbk1hdGNoSW5pdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZXh0cmFjdCBleHByZXNzaW9uCiAgICBteSAkRXhwcmVzc2lvbiA9ICRQYXJhbXtFeHByZXNzaW9ufTsKCiAgICAjIGRlY2xhcmUgZXhwcmVzc2lvbiBkYXRhCiAgICBteSAlRXhwcmVzc2lvbkRhdGE7CgogICAgIyBnZXQgb2JqZWN0IGRhdGEKICAgICRFeHByZXNzaW9uRGF0YXtPYmplY3R9ID0gJFNlbGYtPk9iamVjdEdldCgKICAgICAgICBPYmplY3RJRCA9PiAkRXhwcmVzc2lvbi0+e09iamVjdElEfSwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBmb3Igb2JqZWN0IGRhdGEKICAgIGlmICggISRFeHByZXNzaW9uRGF0YXtPYmplY3R9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gdmFsdWUgZm9yICdPYmplY3QnIHdpdGggSUQgJyRFeHByZXNzaW9uLT57T2JqZWN0SUR9JyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGF0dHJpYnV0ZSBkYXRhCiAgICAkRXhwcmVzc2lvbkRhdGF7QXR0cmlidXRlfSA9ICRTZWxmLT5BdHRyaWJ1dGVHZXQoCiAgICAgICAgQXR0cmlidXRlSUQgPT4gJEV4cHJlc3Npb24tPntBdHRyaWJ1dGVJRH0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZm9yIGF0dHJpYnV0ZSBkYXRhCiAgICBpZiAoICEkRXhwcmVzc2lvbkRhdGF7QXR0cmlidXRlfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHZhbHVlIGZvciAnQXR0cmlidXRlJyB3aXRoIElEICckRXhwcmVzc2lvbi0+e0F0dHJpYnV0ZUlEfSchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBvcGVyYXRvciBkYXRhCiAgICAkRXhwcmVzc2lvbkRhdGF7T3BlcmF0b3J9ID0gJFNlbGYtPk9wZXJhdG9yR2V0KAogICAgICAgIE9wZXJhdG9ySUQgPT4gJEV4cHJlc3Npb24tPntPcGVyYXRvcklEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGZvciBvcGVyYXRvciBkYXRhCiAgICBpZiAoICEkRXhwcmVzc2lvbkRhdGF7T3BlcmF0b3J9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gdmFsdWUgZm9yICdPcGVyYXRvcicgd2l0aCBJRCAnJEV4cHJlc3Npb24tPntPcGVyYXRvcklEfSchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gXCVFeHByZXNzaW9uRGF0YTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246Ok9iamVjdDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbjo6T2JqZWN0IC0gY29uZGl0aW9uIG9iamVjdCBsaWIKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGZ1bmN0aW9ucyBmb3IgY29uZGl0aW9uIG9iamVjdHMgaW4gSVRTTUNoYW5nZU1hbmFnZW1lbnQuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWl0ZW0gT2JqZWN0QWRkKCkKCkFkZCBhIG5ldyBjb25kaXRpb24gb2JqZWN0LgoKICAgIG15ICRDb25kaXRpb25JRCA9ICRDb25kaXRpb25PYmplY3QtPk9iamVjdEFkZCgKICAgICAgICBOYW1lICAgPT4gJ09iamVjdE5hbWUnLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3RBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbWFrZSBsb29rdXAgd2l0aCBnaXZlbiBuYW1lIGZvciBjaGVja3MKICAgIG15ICRPYmplY3RJRCA9ICRTZWxmLT5PYmplY3RMb29rdXAoCiAgICAgICAgTmFtZSA9PiAkUGFyYW17TmFtZX0sCiAgICApOwoKICAgICMgY2hlY2sgaWYgb2JqZWN0IG5hbWUgYWxyZWFkeSBleGlzdHMKICAgIGlmICgkT2JqZWN0SUQpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvbmRpdGlvbiBvYmplY3QgKCRQYXJhbXtOYW1lfSkgYWxyZWFkeSBleGlzdHMhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGFkZCBuZXcgb2JqZWN0IG5hbWUgdG8gZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gY29uZGl0aW9uX29iamVjdCAnCiAgICAgICAgICAgIC4gJyhuYW1lKSAnCiAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPyknLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte05hbWV9IF0sCiAgICApOwoKICAgICMgZ2V0IGlkIG9mIGNyZWF0ZWQgb2JqZWN0CiAgICAkT2JqZWN0SUQgPSAkU2VsZi0+T2JqZWN0TG9va3VwKAogICAgICAgIE5hbWUgPT4gJFBhcmFte05hbWV9LAogICAgKTsKCiAgICAjIGNoZWNrIGlmIG9iamVjdCBjb3VsZCBiZSBhZGRlZAogICAgaWYgKCAhJE9iamVjdElEICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiT2JqZWN0QWRkKCkgZmFpbGVkISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkZWxldGUgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAnT2JqZWN0TGlzdCcsCiAgICApOwoKICAgIHJldHVybiAkT2JqZWN0SUQ7Cn0KCj1pdGVtIE9iamVjdFVwZGF0ZSgpCgpVcGRhdGUgYSBjb25kaXRpb24gb2JqZWN0LgoKICAgIG15ICRTdWNjZXNzID0gJENvbmRpdGlvbk9iamVjdC0+T2JqZWN0VXBkYXRlKAogICAgICAgIE9iamVjdElEID0+IDEyMzQsCiAgICAgICAgTmFtZSAgICAgPT4gJ05ld09iamVjdE5hbWUnLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE9iamVjdFVwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhPYmplY3RJRCBOYW1lIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgb2JqZWN0IGRhdGEKICAgIG15ICRPYmplY3REYXRhID0gJFNlbGYtPk9iamVjdEdldCgKICAgICAgICBPYmplY3RJRCA9PiAkUGFyYW17T2JqZWN0SUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIG9iamVjdCBkYXRhCiAgICBpZiAoICEkT2JqZWN0RGF0YSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk9iamVjdFVwZGF0ZSBvZiAkUGFyYW17T2JqZWN0SUR9IGZhaWxlZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgdXBkYXRlIG9iamVjdCBpbiBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICdVUERBVEUgY29uZGl0aW9uX29iamVjdCAnCiAgICAgICAgICAgIC4gJ1NFVCBuYW1lID0gPyAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIFwkUGFyYW17T2JqZWN0SUR9LAogICAgICAgIF0sCiAgICApOwoKICAgICMgZGVsZXRlIGNhY2hlCiAgICBmb3IgbXkgJEtleSAoCiAgICAgICAgJ09iamVjdExpc3QnLAogICAgICAgICdPYmplY3RHZXQ6Ok9iamVjdElEOjonIC4gJFBhcmFte09iamVjdElEfSwKICAgICAgICAnT2JqZWN0TG9va3VwOjpPYmplY3RJRDo6JyAuICRQYXJhbXtPYmplY3RJRH0sCiAgICAgICAgJ09iamVjdExvb2t1cDo6TmFtZTo6JyAuICRPYmplY3REYXRhLT57TmFtZX0sICAgICMgdXNlIHRoZSBvbGQgbmFtZQogICAgICAgICkKICAgIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkS2V5LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIE9iamVjdEdldCgpCgpHZXQgYSBjb25kaXRpb24gb2JqZWN0IGZvciBhIGdpdmVuIG9iamVjdCBpZC4KUmV0dXJucyBhIGhhc2ggcmVmZXJlbmNlIG9mIHRoZSBvYmplY3QgZGF0YS4KCiAgICBteSAkQ29uZGl0aW9uT2JqZWN0UmVmID0gJENvbmRpdGlvbk9iamVjdC0+T2JqZWN0R2V0KAogICAgICAgIE9iamVjdElEID0+IDEyMzQsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CgpUaGUgcmV0dXJuZWQgaGFzaCByZWZlcmVuY2UgY29udGFpbnMgZm9sbG93aW5nIGVsZW1lbnRzOgoKICAgICRDb25kaXRpb25PYmplY3R7T2JqZWN0SUR9CiAgICAkQ29uZGl0aW9uT2JqZWN0e05hbWV9Cgo9Y3V0CgpzdWIgT2JqZWN0R2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdElEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBjYWNoZQogICAgbXkgJENhY2hlS2V5ID0gJ09iamVjdEdldDo6T2JqZWN0SUQ6OicgLiAkUGFyYW17T2JqZWN0SUR9OwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAjIHByZXBhcmUgU1FMIHN0YXRlbWVudAogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkLCBuYW1lIEZST00gY29uZGl0aW9uX29iamVjdCBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtPYmplY3RJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVPYmplY3REYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkT2JqZWN0RGF0YXtPYmplY3RJRH0gPSAkUm93WzBdOwogICAgICAgICRPYmplY3REYXRhe05hbWV9ICAgICA9ICRSb3dbMV07CiAgICB9CgogICAgIyBjaGVjayBlcnJvcgogICAgaWYgKCAhJU9iamVjdERhdGEgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJPYmplY3RJRCAkUGFyYW17T2JqZWN0SUR9IGRvZXMgbm90IGV4aXN0ISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcJU9iamVjdERhdGEsCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICApOwoKICAgIHJldHVybiBcJU9iamVjdERhdGE7Cn0KCj1pdGVtIE9iamVjdExvb2t1cCgpCgpUaGlzIG1ldGhvZCBkb2VzIGEgbG9va3VwIGZvciBhIGNvbmRpdGlvbiBvYmplY3QuIElmIGFuIG9iamVjdAppZCBpcyBnaXZlbiwgaXQgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgb2JqZWN0LiBJZiB0aGUgbmFtZSBvZiB0aGUKb2JqZWN0IGlzIGdpdmVuLCB0aGUgYXBwcm9wcmlhdGUgaWQgaXMgcmV0dXJuZWQuCgogICAgbXkgJE9iamVjdE5hbWUgPSAkQ29uZGl0aW9uT2JqZWN0LT5PYmplY3RMb29rdXAoCiAgICAgICAgT2JqZWN0SUQgPT4gNDMyMSwKICAgICk7CgogICAgbXkgJE9iamVjdElEID0gJENvbmRpdGlvbk9iamVjdC0+T2JqZWN0TG9va3VwKAogICAgICAgIE5hbWUgICA9PiAnT2JqZWN0TmFtZScsCiAgICApOwoKPWN1dAoKc3ViIE9iamVjdExvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgaWYgYm90aCBwYXJhbWV0ZXJzIGFyZSBnaXZlbgogICAgaWYgKCAkUGFyYW17T2JqZWN0SUR9ICYmICRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgT2JqZWN0SUQgb3IgTmFtZSAtIG5vdCBib3RoIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBpZiBib3RoIHBhcmFtZXRlcnMgYXJlIG5vdCBnaXZlbgogICAgaWYgKCAhJFBhcmFte09iamVjdElEfSAmJiAhJFBhcmFte05hbWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBPYmplY3RJRCBvciBOYW1lIC0gbm9uZSBpcyBnaXZlbiEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgaWYgT2JqZWN0SUQgaXMgYSBudW1iZXIKICAgIGlmICggJFBhcmFte09iamVjdElEfSAmJiAkUGFyYW17T2JqZWN0SUR9ICF+IG17IFxBIFxkKyBceiB9eG1zICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiT2JqZWN0SUQgbXVzdCBiZSBhIG51bWJlciEgKE9iamVjdElEOiAkUGFyYW17T2JqZWN0SUR9KSIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJENhY2hlS2V5OwoKICAgICMgcHJlcGFyZSBTUUwgc3RhdGVtZW50cwogICAgaWYgKCAkUGFyYW17T2JqZWN0SUR9ICkgewoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgJENhY2hlS2V5ID0gJ09iamVjdExvb2t1cDo6T2JqZWN0SUQ6OicgLiAkUGFyYW17T2JqZWN0SUR9OwogICAgICAgIG15ICRDYWNoZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkQ2FjaGUgaWYgJENhY2hlOwoKICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgICA9PiAnU0VMRUNUIG5hbWUgRlJPTSBjb25kaXRpb25fb2JqZWN0IFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtPYmplY3RJRH0gXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17TmFtZX0gKSB7CgogICAgICAgICMgY2hlY2sgY2FjaGUKICAgICAgICAkQ2FjaGVLZXkgPSAnT2JqZWN0TG9va3VwOjpOYW1lOjonIC4gJFBhcmFte05hbWV9OwogICAgICAgIG15ICRDYWNoZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkQ2FjaGUgaWYgJENhY2hlOwoKICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gY29uZGl0aW9uX29iamVjdCBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkTG9va3VwOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkTG9va3VwID0gJFJvd1swXTsKICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+ICRMb29rdXAsCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICApOwoKICAgIHJldHVybiAkTG9va3VwOwp9Cgo9aXRlbSBPYmplY3RMaXN0KCkKClJldHVybnMgYSBsaXN0IG9mIGFsbCBjb25kaXRpb24gb2JqZWN0cyBhcyBoYXNoIHJlZmVyZW5jZQoKICAgIG15ICRDb25kaXRpb25PYmplY3RzUmVmID0gJENvbmRpdGlvbk9iamVjdC0+T2JqZWN0TGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpUaGUgcmV0dXJuZWQgaGFzaCByZWZlcmVuY2UgY29udGFpbnMgZW50cmllcyBsaWtlIHRoaXM6CgogICAgJENvbmRpdGlvbk9iamVjdHtPYmplY3RJRH0gPSAnT2JqZWN0TmFtZScKCj1jdXQKCnN1YiBPYmplY3RMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBVc2VySUQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnT2JqZWN0TGlzdCc7CiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAkQ2FjaGUgaWYgJENhY2hlOwoKICAgICMgcHJlcGFyZSBTUUwgc3RhdGVtZW50CiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBuYW1lIEZST00gY29uZGl0aW9uX29iamVjdCcsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJU9iamVjdExpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRPYmplY3RMaXN0eyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVPYmplY3RMaXN0LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgKTsKCiAgICByZXR1cm4gXCVPYmplY3RMaXN0Owp9Cgo9aXRlbSBPYmplY3REZWxldGUoKQoKRGVsZXRlcyBhIGNvbmRpdGlvbiBvYmplY3QuCgogICAgbXkgJFN1Y2Nlc3MgPSAkQ29uZGl0aW9uT2JqZWN0LT5PYmplY3REZWxldGUoCiAgICAgICAgT2JqZWN0SUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE9iamVjdERlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhPYmplY3RJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbG9va3VwIG9iamVjdCBuYW1lCiAgICBteSAkT2JqZWN0TmFtZSA9ICRTZWxmLT5PYmplY3RMb29rdXAoCiAgICAgICAgT2JqZWN0SUQgPT4gJFBhcmFte09iamVjdElEfSwKICAgICk7CgogICAgIyBkZWxldGUgY29uZGl0aW9uIG9iamVjdCBmcm9tIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ0RFTEVURSBGUk9NIGNvbmRpdGlvbl9vYmplY3QgJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte09iamVjdElEfSBdLAogICAgKTsKCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgZm9yIG15ICRLZXkgKAogICAgICAgICdPYmplY3RMaXN0JywKICAgICAgICAnT2JqZWN0R2V0OjpPYmplY3RJRDo6JyAuICRQYXJhbXtPYmplY3RJRH0sCiAgICAgICAgJ09iamVjdExvb2t1cDo6T2JqZWN0SUQ6OicgLiAkUGFyYW17T2JqZWN0SUR9LAogICAgICAgICdPYmplY3RMb29rdXA6Ok5hbWU6OicgLiAkT2JqZWN0TmFtZSwKICAgICAgICApCiAgICB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJEtleSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBPYmplY3RTZWxlY3Rvckxpc3QoKQoKUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHNlbGVjdG9ycyBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiBvYmplY3QgaWQgYW5kIGNvbmRpdGlvbiBpZCBhcyBoYXNoIHJlZmVyZW5jZQoKICAgIG15ICRTZWxlY3Rvckxpc3QgPSAkQ29uZGl0aW9uT2JqZWN0LT5PYmplY3RTZWxlY3Rvckxpc3QoCiAgICAgICAgT2JqZWN0SUQgICAgPT4gMTIzNCwKICAgICAgICBDb25kaXRpb25JRCA9PiA1LAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKUmV0dXJucyBhIGhhc2ggcmVmZXJlbmNlIGxpa2UgdGhpcyAoZm9yIHdvcmtvcmRlciBvYmplY3RzKQoKICAgICRTZWxlY3Rvckxpc3QgPSB7CiAgICAgICAgMTAgICAgPT4gJzEgLSBXb3Jrb3JkZXJUaXRsZSBvZiBXb3Jrb3JkZXIgMScsCiAgICAgICAgMTIgICAgPT4gJzIgLSBXb3Jrb3JkZXJUaXRsZSBvZiBXb3Jrb3JkZXIgMicsCiAgICAgICAgMzQgICAgPT4gJzMgLSBXb3Jrb3JkZXJUaXRsZSBvZiBXb3Jrb3JkZXIgMycsCiAgICAgICAgJ2FueScgPT4gJ2FueScsCiAgICAgICAgJ2FsbCcgPT4gJ2FsbCcsCiAgICB9CgpvciBmb3IgY2hhbmdlIG9iamVjdHM6CgogICAgJFNlbGVjdG9yTGlzdCA9IHsKICAgICAgICA0NTYgPT4gJ0NoYW5nZSMgMjAxMDAxMTYxMDAwMDYxOCcsCiAgICB9Cgo9Y3V0CgpzdWIgT2JqZWN0U2VsZWN0b3JMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdElEIENvbmRpdGlvbklEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBsb29rdXAgb2JqZWN0IG5hbWUKICAgIG15ICRPYmplY3ROYW1lID0gJFNlbGYtPk9iamVjdExvb2t1cCgKICAgICAgICBPYmplY3RJRCA9PiAkUGFyYW17T2JqZWN0SUR9LAogICAgKTsKCiAgICAjIGdldCBjb25kaXRpb24gZGF0YQogICAgbXkgJENvbmRpdGlvbkRhdGEgPSAkU2VsZi0+Q29uZGl0aW9uR2V0KAogICAgICAgIENvbmRpdGlvbklEID0+ICRQYXJhbXtDb25kaXRpb25JRH0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZm9yIGVycm9yCiAgICByZXR1cm4gaWYgISRDb25kaXRpb25EYXRhOwoKICAgICMgZ2V0IG9iamVjdCBiYWNrZW5kCiAgICBteSAkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbjo6T2JqZWN0OjonIC4gJE9iamVjdE5hbWUgKTsKCiAgICAjIGNoZWNrIGZvciBlcnJvcgogICAgcmV0dXJuIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIGRlZmluZSBkZWZhdWx0IGZ1bmN0aW9ucyBmb3IgYmFja2VuZAogICAgbXkgJFN1YiA9ICdTZWxlY3Rvckxpc3QnOwoKICAgICMgY2hlY2sgZm9yIGF2YWlsYWJsZSBmdW5jdGlvbgogICAgaWYgKCAhJEJhY2tlbmRPYmplY3QtPmNhbigkU3ViKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIGZ1bmN0aW9uICckU3ViJyBhdmFpbGFibGUgZm9yIGJhY2tlbmQgJyRPYmplY3ROYW1lJyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZXhlY3V0ZSB0aGUgYWN0aW9uIHN1YnJvdXRpbmUKICAgIG15ICRTZWxlY3Rvckxpc3QgPSAkQmFja2VuZE9iamVjdC0+JFN1YigKICAgICAgICBDb25kaXRpb25JRCAgPT4gJFBhcmFte0NvbmRpdGlvbklEfSwKICAgICAgICBDaGFuZ2VJRCAgICAgPT4gJENvbmRpdGlvbkRhdGEtPntDaGFuZ2VJRH0sCiAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIEV4cHJlc3Npb25JRCA9PiAkUGFyYW17RXhwcmVzc2lvbklEfSwKICAgICAgICBBY3Rpb25JRCAgICAgPT4gJFBhcmFte0FjdGlvbklEfSwKICAgICkgfHwge307CgogICAgcmV0dXJuICRTZWxlY3Rvckxpc3Q7Cn0KCj1pdGVtIE9iamVjdENvbXBhcmVWYWx1ZUxpc3QoKQoKUmV0dXJucyBhIGxpc3Qgb2YgYXZhaWxhYmxlIENvbXBhcmVWYWx1ZXMgZm9yIHRoZSBnaXZlbiBvYmplY3QgaWQgYW5kIGF0dHJpYnV0ZSBpZCBhcyBoYXNoIHJlZmVyZW5jZS4KCiAgICBteSAkQ29tcGFyZVZhbHVlTGlzdCA9ICRDb25kaXRpb25PYmplY3QtPk9iamVjdENvbXBhcmVWYWx1ZUxpc3QoCiAgICAgICAgT2JqZWN0SUQgICAgICA9PiAxMjM0LAogICAgICAgIEF0dHJpYnV0ZU5hbWUgPT4gJ1dvcmtPcmRlclN0YXRlSUQnLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zIGEgaGFzaCByZWZlcmVuY2UgbGlrZSB0aGlzLCBmb3IgYSB3b3Jrb3JkZXIgb2JqZWN0IGFuZCB0aGUgYXR0cmlidXRlICdXb3JrT3JkZXJTdGF0ZUlEJzoKCiAgICAkQ29tcGFyZVZhbHVlTGlzdCA9IHsKICAgICAgICAxMCAgICA9PiAnY3JlYXRlZCcsCiAgICAgICAgMTIgICAgPT4gJ2FjY2VwdGVkJywKICAgICAgICAxMyAgICA9PiAncmVhZHknLAogICAgICAgIDE0ICAgID0+ICdpbiBwcm9ncmVzcycsCiAgICAgICAgMTUgICAgPT4gJ2Nsb3NlZCcsCiAgICAgICAgMTYgICAgPT4gJ2NhbmNlbGVkJywKICAgIH0KCj1jdXQKCnN1YiBPYmplY3RDb21wYXJlVmFsdWVMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdElEIEF0dHJpYnV0ZU5hbWUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBvYmplY3QgbmFtZQogICAgbXkgJE9iamVjdE5hbWUgPSAkUGFyYW17T2JqZWN0TmFtZX07CiAgICBpZiAoICRQYXJhbXtPYmplY3RJRH0gKSB7CiAgICAgICAgJE9iamVjdE5hbWUgPSAkU2VsZi0+T2JqZWN0TG9va3VwKAogICAgICAgICAgICBPYmplY3RJRCA9PiAkUGFyYW17T2JqZWN0SUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgb2JqZWN0IHR5cGUKICAgIG15ICRPYmplY3RUeXBlID0gJE9iamVjdE5hbWU7CgogICAgIyBnZXQgb2JqZWN0IGJhY2tlbmQKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCggJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uOjpPYmplY3Q6OicgLiAkT2JqZWN0VHlwZSApOwoKICAgIHJldHVybiBpZiAhJEJhY2tlbmRPYmplY3Q7CgogICAgIyBkZWZpbmUgZGVmYXVsdCBmdW5jdGlvbnMgZm9yIGJhY2tlbmQKICAgIG15ICRTdWIgPSAnQ29tcGFyZVZhbHVlTGlzdCc7CgogICAgIyBjaGVjayBmb3IgYXZhaWxhYmxlIGZ1bmN0aW9uCiAgICBpZiAoICEkQmFja2VuZE9iamVjdC0+Y2FuKCRTdWIpICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gZnVuY3Rpb24gJyRTdWInIGF2YWlsYWJsZSBmb3IgYmFja2VuZCAnJE9iamVjdFR5cGUnISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBleGVjdXRlIHRoZSBhY3Rpb24gc3Vicm91dGluZQogICAgbXkgJENvbXBhcmVWYWx1ZUxpc3QgPSAkQmFja2VuZE9iamVjdC0+JFN1YigKICAgICAgICBBdHRyaWJ1dGVOYW1lID0+ICRQYXJhbXtBdHRyaWJ1dGVOYW1lfSwKICAgICAgICBVc2VySUQgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKSB8fCB7fTsKCiAgICByZXR1cm4gJENvbXBhcmVWYWx1ZUxpc3Q7Cn0KCj1pdGVtIE9iamVjdERhdGFHZXQoKQoKUmV0dXJuIHRoZSBkYXRhIG9mIGEgZ2l2ZW4gdHlwZSBhbmQgc2VsZWN0b3Igb2YgYSBjZXJ0YWluIG9iamVjdC4KCiAgICBteSAkT2JqZWN0RGF0YVJlZiA9ICRDb25kaXRpb25PYmplY3QtPk9iamVjdERhdGFHZXQoCiAgICAgICAgQ29uZGl0aW9uSUQgPT4gMTIzNCwKICAgICAgICBPYmplY3ROYW1lICA9PiAnSVRTTUNoYW5nZScsICAgICMgb3IgT2JqZWN0SUQKICAgICAgICBPYmplY3RJRCAgICA9PiAxLCAgICAgICAgICAgICAgICMgb3IgT2JqZWN0TmFtZQogICAgICAgIFNlbGVjdG9yICAgID0+ICcxMjMnLCAgICAgICAgICAgIyAgKCBPYmplY3RLZXkgfCBhbnkgfCBhbGwgKQogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE9iamVjdERhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ29uZGl0aW9uSUQgU2VsZWN0b3IgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGVpdGhlciBPYmplY3ROYW1lIG9yIE9iamVjdElEIG11c3QgYmUgcGFzc2VkCiAgICBpZiAoICEkUGFyYW17T2JqZWN0TmFtZX0gJiYgISRQYXJhbXtPYmplY3RJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdPYmplY3ROYW1lIElEIG9yIE9iamVjdElEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayB0aGF0IG5vdCBib3RoIE9iamVjdE5hbWUgYW5kIE9iamVjdElEIGFyZSBnaXZlbgogICAgaWYgKCAkUGFyYW17T2JqZWN0TmFtZX0gJiYgJFBhcmFte09iamVjdElEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgZWl0aGVyIE9iamVjdE5hbWUgT1IgT2JqZWN0SUQgLSBub3QgYm90aCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IG9iamVjdCBuYW1lCiAgICBteSAkT2JqZWN0TmFtZSA9ICRQYXJhbXtPYmplY3ROYW1lfTsKICAgIGlmICggJFBhcmFte09iamVjdElEfSApIHsKICAgICAgICAkT2JqZWN0TmFtZSA9ICRTZWxmLT5PYmplY3RMb29rdXAoCiAgICAgICAgICAgIE9iamVjdElEID0+ICRQYXJhbXtPYmplY3RJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBvYmplY3QgdHlwZQogICAgbXkgJE9iamVjdFR5cGUgPSAkT2JqZWN0TmFtZTsKCiAgICAjIGdldCBvYmplY3QgYmFja2VuZAogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246Ok9iamVjdDo6JyAuICRPYmplY3RUeXBlICk7CgogICAgcmV0dXJuIGlmICEkQmFja2VuZE9iamVjdDsKCiAgICAjIGRlZmluZSBkZWZhdWx0IGZ1bmN0aW9ucyBmb3IgYmFja2VuZAogICAgbXkgJFN1YiA9ICdEYXRhR2V0JzsKCiAgICAjIGNoZWNrIGZvciBhdmFpbGFibGUgZnVuY3Rpb24KICAgIGlmICggISRCYWNrZW5kT2JqZWN0LT5jYW4oJFN1YikgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBmdW5jdGlvbiAnJFN1YicgYXZhaWxhYmxlIGZvciBiYWNrZW5kICckT2JqZWN0VHlwZSchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBvYmplY3QgZGF0YQogICAgbXkgJE9iamVjdERhdGEgPSAkQmFja2VuZE9iamVjdC0+JFN1YigKICAgICAgICBDb25kaXRpb25JRCA9PiAkUGFyYW17Q29uZGl0aW9uSUR9LAogICAgICAgIFNlbGVjdG9yICAgID0+ICRQYXJhbXtTZWxlY3Rvcn0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApIHx8IFtdOwoKICAgIHJldHVybiAkT2JqZWN0RGF0YTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246Ok9wZXJhdG9yOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uOjpPcGVyYXRvciAtIGNvbmRpdGlvbiBvcGVyYXRvciBsaWIKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGZ1bmN0aW9ucyBmb3IgY29uZGl0aW9uIG9wZXJhdG9ycyBpbiBJVFNNQ2hhbmdlTWFuYWdlbWVudC4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9aXRlbSBPcGVyYXRvckFkZCgpCgpBZGQgYSBuZXcgY29uZGl0aW9uIG9wZXJhdG9yLgoKICAgIG15ICRPcGVyYXRvcklEID0gJENvbmRpdGlvbk9iamVjdC0+T3BlcmF0b3JBZGQoCiAgICAgICAgTmFtZSAgID0+ICdPcGVyYXRvck5hbWUnLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPcGVyYXRvckFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBtYWtlIGxvb2t1cCB3aXRoIGdpdmVuIG5hbWUgZm9yIGNoZWNrcwogICAgbXkgJE9wZXJhdG9ySUQgPSAkU2VsZi0+T3BlcmF0b3JMb29rdXAoIE5hbWUgPT4gJFBhcmFte05hbWV9ICk7CgogICAgIyBjaGVjayBpZiBvcGVyYXRvciBuYW1lIGFscmVhZHkgZXhpc3RzCiAgICBpZiAoJE9wZXJhdG9ySUQpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvbmRpdGlvbiBvcGVyYXRvciAoJFBhcmFte05hbWV9KSBhbHJlYWR5IGV4aXN0cyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgYWRkIG5ldyBvcGVyYXRvciBuYW1lIHRvIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGNvbmRpdGlvbl9vcGVyYXRvciAnCiAgICAgICAgICAgIC4gJyhuYW1lKSAnCiAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPyknLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte05hbWV9IF0sCiAgICApOwoKICAgICMgZ2V0IGlkIG9mIGNyZWF0ZWQgb3BlcmF0b3IKICAgICRPcGVyYXRvcklEID0gJFNlbGYtPk9wZXJhdG9yTG9va3VwKAogICAgICAgIE5hbWUgPT4gJFBhcmFte05hbWV9LAogICAgKTsKCiAgICAjIGNoZWNrIGlmIG9wZXJhdG9yIGNvdWxkIGJlIGFkZGVkCiAgICBpZiAoICEkT3BlcmF0b3JJRCApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk9wZXJhdG9yQWRkKCkgZmFpbGVkISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkZWxldGUgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAnT3BlcmF0b3JMaXN0JywKICAgICk7CgogICAgcmV0dXJuICRPcGVyYXRvcklEOwp9Cgo9aXRlbSBPcGVyYXRvclVwZGF0ZSgpCgpVcGRhdGUgYSBjb25kaXRpb24gb3BlcmF0b3IuCgogICAgbXkgJFN1Y2Nlc3MgPSAkQ29uZGl0aW9uT2JqZWN0LT5PcGVyYXRvclVwZGF0ZSgKICAgICAgICBPcGVyYXRvcklEID0+IDEyMzQsCiAgICAgICAgTmFtZSAgICAgICA9PiAnTmV3T3BlcmF0b3JOYW1lJywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE9wZXJhdG9yVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9wZXJhdG9ySUQgTmFtZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IG9wZXJhdG9yIGRhdGEKICAgIG15ICRPcGVyYXRvckRhdGEgPSAkU2VsZi0+T3BlcmF0b3JHZXQoCiAgICAgICAgT3BlcmF0b3JJRCA9PiAkUGFyYW17T3BlcmF0b3JJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBvcGVyYXRvciBkYXRhCiAgICBpZiAoICEkT3BlcmF0b3JEYXRhICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiT3BlcmF0b3JVcGRhdGUgb2YgJFBhcmFte09wZXJhdG9ySUR9IGZhaWxlZCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgdXBkYXRlIG9wZXJhdG9yIGluIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ1VQREFURSBjb25kaXRpb25fb3BlcmF0b3IgJwogICAgICAgICAgICAuICdTRVQgbmFtZSA9ID8gJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LAogICAgICAgICAgICBcJFBhcmFte09wZXJhdG9ySUR9LAogICAgICAgIF0sCiAgICApOwoKICAgICMgZGVsZXRlIGNhY2hlCiAgICBmb3IgbXkgJEtleSAoCiAgICAgICAgJ09wZXJhdG9yTGlzdCcsCiAgICAgICAgJ09wZXJhdG9yR2V0OjpPcGVyYXRvcklEOjonIC4gJFBhcmFte09wZXJhdG9ySUR9LAogICAgICAgICdPcGVyYXRvckxvb2t1cDo6T3BlcmF0b3JJRDo6JyAuICRQYXJhbXtPcGVyYXRvcklEfSwKICAgICAgICAnT3BlcmF0b3JMb29rdXA6Ok5hbWU6OicgLiAkT3BlcmF0b3JEYXRhLT57TmFtZX0sICAgICMgdXNlIHRoZSBvbGQgbmFtZQogICAgICAgICkKICAgIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+RGVsZXRlKAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkS2V5LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIE9wZXJhdG9yR2V0KCkKCkdldCBhIGNvbmRpdGlvbiBvcGVyYXRvciBmb3IgYSBnaXZlbiBvcGVyYXRvciBpZC4KUmV0dXJucyBhIGhhc2ggcmVmZXJlbmNlIG9mIHRoZSBvcGVyYXRvciBkYXRhLgoKICAgIG15ICRDb25kaXRpb25PcGVyYXRvclJlZiA9ICRDb25kaXRpb25PYmplY3QtPk9wZXJhdG9yR2V0KAogICAgICAgIE9wZXJhdG9ySUQgPT4gMTIzNCwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKVGhlIHJldHVybmVkIGhhc2ggcmVmZXJlbmNlIGNvbnRhaW5zIGZvbGxvd2luZyBlbGVtZW50czoKCiAgICAkQ29uZGl0aW9uT3BlcmF0b3J7T3BlcmF0b3JJRH0KICAgICRDb25kaXRpb25PcGVyYXRvcntOYW1lfQoKPWN1dAoKc3ViIE9wZXJhdG9yR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9wZXJhdG9ySUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnT3BlcmF0b3JHZXQ6Ok9wZXJhdG9ySUQ6OicgLiAkUGFyYW17T3BlcmF0b3JJRH07CiAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAkQ2FjaGUgaWYgJENhY2hlOwoKICAgICMgcHJlcGFyZSBTUUwgc3RhdGVtZW50CiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQsIG5hbWUgRlJPTSBjb25kaXRpb25fb3BlcmF0b3IgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17T3BlcmF0b3JJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVPcGVyYXRvckRhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRPcGVyYXRvckRhdGF7T3BlcmF0b3JJRH0gPSAkUm93WzBdOwogICAgICAgICRPcGVyYXRvckRhdGF7TmFtZX0gICAgICAgPSAkUm93WzFdOwogICAgfQoKICAgICMgY2hlY2sgZXJyb3IKICAgIGlmICggISVPcGVyYXRvckRhdGEgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJPcGVyYXRvcklEICRQYXJhbXtPcGVyYXRvcklEfSBkb2VzIG5vdCBleGlzdCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVPcGVyYXRvckRhdGEsCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICApOwoKICAgIHJldHVybiBcJU9wZXJhdG9yRGF0YTsKfQoKPWl0ZW0gT3BlcmF0b3JMb29rdXAoKQoKVGhpcyBtZXRob2QgZG9lcyBhIGxvb2t1cCBmb3IgYSBjb25kaXRpb24gb3BlcmF0b3IuIElmIGFuIG9wZXJhdG9yCmlkIGlzIGdpdmVuLCBpdCByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBvcGVyYXRvci4gSWYgdGhlIG5hbWUgb2YgdGhlCm9wZXJhdG9yIGlzIGdpdmVuLCB0aGUgYXBwcm9wcmlhdGUgaWQgaXMgcmV0dXJuZWQuCgogICAgbXkgJE9wZXJhdG9yTmFtZSA9ICRDb25kaXRpb25PYmplY3QtPk9wZXJhdG9yTG9va3VwKAogICAgICAgIE9wZXJhdG9ySUQgPT4gNDMyMSwKICAgICk7CgogICAgbXkgJE9wZXJhdG9ySUQgPSAkQ29uZGl0aW9uT2JqZWN0LT5PcGVyYXRvckxvb2t1cCgKICAgICAgICBOYW1lICAgPT4gJ09wZXJhdG9yTmFtZScsCiAgICApOwoKPWN1dAoKc3ViIE9wZXJhdG9yTG9va3VwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBpZiBib3RoIHBhcmFtZXRlcnMgYXJlIGdpdmVuCiAgICBpZiAoICRQYXJhbXtPcGVyYXRvcklEfSAmJiAkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE9wZXJhdG9ySUQgb3IgTmFtZSAtIG5vdCBib3RoIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBpZiBib3RoIHBhcmFtZXRlcnMgYXJlIG5vdCBnaXZlbgogICAgaWYgKCAhJFBhcmFte09wZXJhdG9ySUR9ICYmICEkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE9wZXJhdG9ySUQgb3IgTmFtZSAtIG5vbmUgaXMgZ2l2ZW4hJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGlmIE9wZXJhdG9ySUQgaXMgYSBudW1iZXIKICAgIGlmICggJFBhcmFte09wZXJhdG9ySUR9ICYmICRQYXJhbXtPcGVyYXRvcklEfSAhfiBteyBcQSBcZCsgXHogfXhtcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk9wZXJhdG9ySUQgbXVzdCBiZSBhIG51bWJlciEgKE9wZXJhdG9ySUQ6ICRQYXJhbXtPcGVyYXRvcklEfSkiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRDYWNoZUtleTsKCiAgICAjIHByZXBhcmUgU1FMIHN0YXRlbWVudHMKICAgIGlmICggJFBhcmFte09wZXJhdG9ySUR9ICkgewoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgJENhY2hlS2V5ID0gJ09wZXJhdG9yTG9va3VwOjpPcGVyYXRvcklEOjonIC4gJFBhcmFte09wZXJhdG9ySUR9OwogICAgICAgIG15ICRDYWNoZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkQ2FjaGUgaWYgJENhY2hlOwoKICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgICA9PiAnU0VMRUNUIG5hbWUgRlJPTSBjb25kaXRpb25fb3BlcmF0b3IgV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte09wZXJhdG9ySUR9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte05hbWV9ICkgewoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgJENhY2hlS2V5ID0gJ09wZXJhdG9yTG9va3VwOjpOYW1lOjonIC4gJFBhcmFte05hbWV9OwogICAgICAgIG15ICRDYWNoZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkQ2FjaGUgaWYgJENhY2hlOwoKICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gY29uZGl0aW9uX29wZXJhdG9yIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRMb29rdXA7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRMb29rdXAgPSAkUm93WzBdOwogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gJExvb2t1cCwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICk7CgogICAgcmV0dXJuICRMb29rdXA7Cn0KCj1pdGVtIE9wZXJhdG9yTGlzdCgpCgpSZXR1cm5zIGEgbGlzdCBvZiBhbGwgY29uZGl0aW9uIG9wZXJhdG9ycyBhcyBoYXNoIHJlZmVyZW5jZQoKICAgIG15ICRDb25kaXRpb25PcGVyYXRvcnNSZWYgPSAkQ29uZGl0aW9uT2JqZWN0LT5PcGVyYXRvckxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKVGhlIHJldHVybmVkIGhhc2ggcmVmZXJlbmNlIGNvbnRhaW5zIGVudHJpZXMgbGlrZSB0aGlzOgoKICAgICRDb25kaXRpb25PcGVyYXRvcntPYmplY3RJRH0gPSAnT2JqZWN0TmFtZScKCj1jdXQKCnN1YiBPcGVyYXRvckxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFVzZXJJRCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgY2FjaGUKICAgIG15ICRDYWNoZUtleSA9ICdPcGVyYXRvckxpc3QnOwogICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7CiAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAjIHByZXBhcmUgU1FMIHN0YXRlbWVudAogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgbmFtZSBGUk9NIGNvbmRpdGlvbl9vcGVyYXRvcicsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJU9wZXJhdG9yTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE9wZXJhdG9yTGlzdHsgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICAjIHNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlT3BlcmF0b3JMaXN0LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgKTsKCiAgICByZXR1cm4gXCVPcGVyYXRvckxpc3Q7Cn0KCj1pdGVtIE9wZXJhdG9yRGVsZXRlKCkKCkRlbGV0ZXMgYSBjb25kaXRpb24gb3BlcmF0b3IuCgogICAgbXkgJFN1Y2Nlc3MgPSAkQ29uZGl0aW9uT2JqZWN0LT5PcGVyYXRvckRlbGV0ZSgKICAgICAgICBPcGVyYXRvcklEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPcGVyYXRvckRlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhPcGVyYXRvcklEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBsb29rdXAgb3BlcmF0b3IgbmFtZQogICAgbXkgJE9wZXJhdG9yTmFtZSA9ICRTZWxmLT5PcGVyYXRvckxvb2t1cCgKICAgICAgICBPcGVyYXRvcklEID0+ICRQYXJhbXtPcGVyYXRvcklEfSwKICAgICk7CgogICAgIyBkZWxldGUgY29uZGl0aW9uIG9wZXJhdG9yIGZyb20gZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnREVMRVRFIEZST00gY29uZGl0aW9uX29wZXJhdG9yICcKICAgICAgICAgICAgLiAnV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtPcGVyYXRvcklEfSBdLAogICAgKTsKCiAgICAjIGRlbGV0ZSBjYWNoZQogICAgZm9yIG15ICRLZXkgKAogICAgICAgICdPcGVyYXRvckxpc3QnLAogICAgICAgICdPcGVyYXRvckdldDo6T3BlcmF0b3JJRDo6JyAuICRQYXJhbXtPcGVyYXRvcklEfSwKICAgICAgICAnT3BlcmF0b3JMb29rdXA6Ok9wZXJhdG9ySUQ6OicgLiAkUGFyYW17T3BlcmF0b3JJRH0sCiAgICAgICAgJ09wZXJhdG9yTG9va3VwOjpOYW1lOjonIC4gJE9wZXJhdG9yTmFtZSwKICAgICAgICApCiAgICB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkRlbGV0ZSgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJEtleSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBPcGVyYXRvckV4ZWN1dGUoKQoKRXhlY3V0ZXMgdGhlIG9wZXJhdG9yIGFuZCByZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KCiAgICBteSAkUmVzdWx0ID0gJENvbmRpdGlvbk9iamVjdC0+T3BlcmF0b3JFeGVjdXRlKAogICAgICAgIE9wZXJhdG9yTmFtZSA9PiAnaXMnLAogICAgICAgIEF0dHJpYnV0ZSAgICA9PiAnV29ya09yZGVyU3RhdGVJRCcsCiAgICAgICAgU2VsZWN0b3IgICAgID0+ICcxMjM0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICggT2JqZWN0S2V5IHwgYW55IHwgYWxsICkKICAgICAgICBPYmplY3REYXRhICAgPT4gWyAkV29ya09yZGVyRGF0YTEsICRXb3JrT3JkZXJEYXRhMiBdLAogICAgICAgIENvbXBhcmVWYWx1ZSA9PiAnU29tZVZhbHVlJywgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9yIEFjdGlvblZhbHVlCiAgICAgICAgT2JqZWN0TmFtZSAgID0+ICdJVFNNV29ya09yZGVyJywgICAgICAgICAgICAgICAgICAgICAgICMgbmVlZGVkIGZvciBBY3Rpb25WYWx1ZQogICAgICAgIEFjdGlvbklEICAgICA9PiAxMjM0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5lZWRlZCBmb3IgQWN0aW9uVmFsdWUKICAgICAgICBBY3Rpb25WYWx1ZSAgPT4gJ1NvbWVWYWx1ZScsICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvciBDb21wYXJlVmFsdWUKICAgICAgICBVc2VySUQgICAgICAgPT4gMTIzNCwKICAgICk7Cgo9Y3V0CgpzdWIgT3BlcmF0b3JFeGVjdXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9wZXJhdG9yTmFtZSBBdHRyaWJ1dGUgU2VsZWN0b3IgT2JqZWN0RGF0YSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgaGFuZGxlICdDb21wYXJlVmFsdWUnIGFuZCAnQWN0aW9uVmFsdWUnIGluIGEgc3BlY2lhbCB3YXkKICAgIGlmICgKICAgICAgICAoICFleGlzdHMgJFBhcmFte0NvbXBhcmVWYWx1ZX0gfHwgIWRlZmluZWQgJFBhcmFte0NvbXBhcmVWYWx1ZX0gKQogICAgICAgICYmICggIWV4aXN0cyAkUGFyYW17QWN0aW9uVmFsdWV9IHx8ICFkZWZpbmVkICRQYXJhbXtBY3Rpb25WYWx1ZX0gKQogICAgICAgICkKICAgIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgZWl0aGVyIENvbXBhcmVWYWx1ZSBvciBBY3Rpb25WYWx1ZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgbmVlZGVkIHBhcmFtcyBmb3IgYWN0aW9ucwogICAgcmV0dXJuIGlmIGV4aXN0cyAkUGFyYW17QWN0aW9uVmFsdWV9ICYmICEkUGFyYW17T2JqZWN0TmFtZX07CgogICAgIyBnZXQgb2JqZWN0IGRhdGEKICAgIG15ICRPYmplY3REYXRhID0gJFBhcmFte09iamVjdERhdGF9OwoKICAgICMgY2hlY2sgT2JqZWN0RGF0YQogICAgaWYgKCByZWYgJE9iamVjdERhdGEgbmUgJ0FSUkFZJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ09iamVjdERhdGEgaXMgbm90IGFuIGFycmF5IHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZm9yIGFjdGlvbnMgJ2FueScgaXMgbm90IGFsbG93ZWQKICAgIHJldHVybiBpZiBleGlzdHMgJFBhcmFte0FjdGlvblZhbHVlfSAmJiAkUGFyYW17U2VsZWN0b3J9IGVxICdhbnknOwoKICAgICMgZXhlY3V0ZSBvcGVyYXRvciBmb3IgYWN0aW9ucyBoZXJlCiAgICAjIG5vIG5lZWQgdG8gaXRlcmF0ZSBvdmVyIG9iamVjdCBpbiB0aGlzIGNhc2UKICAgIGlmICggZXhpc3RzICRQYXJhbXtBY3Rpb25WYWx1ZX0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5fT3BlcmF0b3JBY3Rpb25FeGVjdXRlKAogICAgICAgICAgICBPcGVyYXRvciAgICA9PiAkUGFyYW17T3BlcmF0b3JOYW1lfSwKICAgICAgICAgICAgT2JqZWN0TmFtZSAgPT4gJFBhcmFte09iamVjdE5hbWV9LAogICAgICAgICAgICBTZWxlY3RvciAgICA9PiAkUGFyYW17U2VsZWN0b3J9LAogICAgICAgICAgICBBdHRyaWJ1dGUgICA9PiAkUGFyYW17QXR0cmlidXRlfSwKICAgICAgICAgICAgQWN0aW9uSUQgICAgPT4gJFBhcmFte0FjdGlvbklEfSwKICAgICAgICAgICAgQWN0aW9uVmFsdWUgPT4gJFBhcmFte0FjdGlvblZhbHVlfSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHJldHVybiBmYWxzZSBpZiBubyBvYmplY3QgZGF0YSBpcyBnaXZlbgogICAgcmV0dXJuIGlmICFAeyRPYmplY3REYXRhfTsKCiAgICAjIGV4ZWN1dGUgb3BlcmF0b3IgZm9yIGVhY2ggb2JqZWN0CiAgICBteSBAT3BlcmF0b3JFeGVjdXRlUmVzdWx0OwogICAgZm9yIG15ICRPYmplY3QgKCBAeyRPYmplY3REYXRhfSApIHsKCiAgICAgICAgIyBnZXQgZXF1YXRpb24gcmVzdWx0IGZvciBvYmplY3QKICAgICAgICBteSAkUmVzdWx0ID0gJFNlbGYtPl9PcGVyYXRvckV4ZWN1dGUoCiAgICAgICAgICAgIE9wZXJhdG9yTmFtZSA9PiAkUGFyYW17T3BlcmF0b3JOYW1lfSwKICAgICAgICAgICAgVmFsdWUxICAgICAgID0+ICRPYmplY3QtPnsgJFBhcmFte0F0dHJpYnV0ZX0gfSB8fCAnJywKICAgICAgICAgICAgVmFsdWUyICAgICAgID0+ICRQYXJhbXtDb21wYXJlVmFsdWV9LAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKSB8fCAwOwoKICAgICAgICAjIHJldHVybiB0cnVlIGlmIHJlc3VsdCBpcyBwb3NpdGl2ZSBhbmQgJ2FueScgaXMgcmVxdWVzdGVkCiAgICAgICAgaWYgKCAkUGFyYW17U2VsZWN0b3J9IGVxICdhbnknICYmICRSZXN1bHQgKSB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KCiAgICAgICAgIyByZXR1cm4gZmFsc2UgaWYgcmVzdWx0IGlzIG5lZ2F0aXZlIGFuZCAnYWxsJyBpcyByZXF1ZXN0ZWQKICAgICAgICBpZiAoICRQYXJhbXtTZWxlY3Rvcn0gZXEgJ2FsbCcgJiYgISRSZXN1bHQgKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgc2F2ZSBjdXJyZW50IHJlc3VsdCBmb3IgY29taW5nIGNoZWNrcwogICAgICAgIHB1c2ggQE9wZXJhdG9yRXhlY3V0ZVJlc3VsdCwgJFJlc3VsdDsKICAgIH0KCiAgICAjIGNvdW50IGFsbCByZXN1bHRzIHdoaWNoIGhhdmUgYSB0cnVlIHZhbHVlCiAgICBteSAkVHJ1ZUNvdW50ID0gc2NhbGFyIGdyZXAgeyAkXyA9PSAxIH0gQE9wZXJhdG9yRXhlY3V0ZVJlc3VsdDsKCiAgICAjIHJldHVybiBmYWxzZSBpZiBub3QgYWxsIHJlc3VsdHMgYXJlIHRydWUKICAgIHJldHVybiBpZiAkVHJ1ZUNvdW50ICE9IHNjYWxhciBAeyRPYmplY3REYXRhfTsKCiAgICByZXR1cm4gMTsKfQoKPWJlZ2luIEludGVybmFsOgoKPWl0ZW0gX09wZXJhdG9yRXhlY3V0ZSgpCgpSZXR1cm5zIHRydWUgb3IgZmFsc2UgKDEvdW5kZWYpLgoKICAgIG15ICRSZXN1bHQgPSAkQ29uZGl0aW9uT2JqZWN0LT5fT3BlcmF0b3JFeGVjdXRlKAogICAgICAgIE9wZXJhdG9yTmFtZSA9PiAnaXMnLAogICAgICAgIFZhbHVlMSAgICAgICA9PiAnU29tZVZhbHVlJywKICAgICAgICBWYWx1ZTIgICAgICAgPT4gJ1NvbWVPdGhlclZhbHVlJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMTIzNCwKICAgICk7Cgo9Y3V0CgpzdWIgX09wZXJhdG9yRXhlY3V0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhPcGVyYXRvck5hbWUgVXNlcklEKSkgewogICAgICAgIGlmICggIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFZhbHVlMSBWYWx1ZTIpKSB7CiAgICAgICAgaWYgKCAhZXhpc3RzICRQYXJhbXskQXJndW1lbnR9IHx8ICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIG1hcCBmb3Igb3BlcmF0b3IgYWN0aW9uCiAgICBteSAlT3BlcmF0b3JBY3Rpb24gPSAoCgogICAgICAgICMgY29tbW9uIG1hdGNoaW5nCiAgICAgICAgJ2lzJyAgICAgICAgICAgPT4gJ19PcGVyYXRvckVxdWFsJywKICAgICAgICAnaXMgbm90JyAgICAgICA9PiAnX09wZXJhdG9yTm90RXF1YWwnLAogICAgICAgICdpcyBlbXB0eScgICAgID0+ICdfT3BlcmF0b3JJc0VtcHR5JywKICAgICAgICAnaXMgbm90IGVtcHR5JyA9PiAnX09wZXJhdG9ySXNOb3RFbXB0eScsCgogICAgICAgICMgZGlnaXQgbWF0Y2hpbmcKICAgICAgICAnaXMgZ3JlYXRlciB0aGFuJyA9PiAnX09wZXJhdG9ySXNHcmVhdGVyVGhhbicsCiAgICAgICAgJ2lzIGxlc3MgdGhhbicgICAgPT4gJ19PcGVyYXRvcklzTGVzc1RoYW4nLAoKICAgICAgICAjIGRhdGUgbWF0Y2hpbmcKICAgICAgICAnaXMgYmVmb3JlJyA9PiAnX09wZXJhdG9ySXNCZWZvcmUnLAogICAgICAgICdpcyBhZnRlcicgID0+ICdfT3BlcmF0b3JJc0FmdGVyJywKCiAgICAgICAgIyBzdHJpbmcgbWF0Y2hpbmcKICAgICAgICAnY29udGFpbnMnICAgICA9PiAnX09wZXJhdG9yQ29udGFpbnMnLAogICAgICAgICdub3QgY29udGFpbnMnID0+ICdfT3BlcmF0b3JOb3RDb250YWlucycsCiAgICAgICAgJ2JlZ2lucyB3aXRoJyAgPT4gJ19PcGVyYXRvckJlZ2luc1dpdGgnLAogICAgICAgICdlbmRzIHdpdGgnICAgID0+ICdfT3BlcmF0b3JFbmRzV2l0aCcsCiAgICApOwoKICAgICMgZ2V0IG9wZXJhdG9yIG5hbWUKICAgIG15ICRPcGVyYXRvck5hbWUgPSAkUGFyYW17T3BlcmF0b3JOYW1lfTsKCiAgICAjIGNoZWNrIGZvciBtYXRjaGluZyBvcGVyYXRvcgogICAgaWYgKCAhZXhpc3RzICRPcGVyYXRvckFjdGlvbnskT3BlcmF0b3JOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIG1hdGNoaW5nIG9wZXJhdG9yIGZvciAnJE9wZXJhdG9yTmFtZScgZm91bmQhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGV4dHJhY3Qgb3BlcmF0b3Igc3ViCiAgICBteSAkU3ViID0gJE9wZXJhdG9yQWN0aW9ueyRPcGVyYXRvck5hbWV9OwoKICAgICMgY2hlY2sgZm9yIGF2YWlsYWJsZSBmdW5jdGlvbgogICAgaWYgKCAhJFNlbGYtPmNhbigkU3ViKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIGZ1bmN0aW9uICckU3ViJyBhdmFpbGFibGUgZm9yICckT3BlcmF0b3JOYW1lJyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZXhlY3V0ZSBleHRyYWN0ZWQgbWF0Y2gKICAgIG15ICRSZXN1bHQgPSAkU2VsZi0+JFN1YigKICAgICAgICBWYWx1ZTEgPT4gJFBhcmFte1ZhbHVlMX0sCiAgICAgICAgVmFsdWUyID0+ICRQYXJhbXtWYWx1ZTJ9LAogICAgKTsKCiAgICByZXR1cm4gJFJlc3VsdDsKfQoKPWl0ZW0gX09wZXJhdG9yQWN0aW9uRXhlY3V0ZSgpCgpSZXR1cm5zIHRydWUgb3IgZmFsc2UgKDEvdW5kZWYpIGlmIGdpdmVuIGFjdGlvbiBjb3VsZCBiZQpleGVjdXRlZCBzdWNjZXNzZnVsbHkuCgogICAgbXkgJFJlc3VsdCA9ICRDb25kaXRpb25PYmplY3QtPl9PcGVyYXRvckFjdGlvbkV4ZWN1dGUoCiAgICAgICAgT3BlcmF0b3IgICAgPT4gJ3NldCcsCiAgICAgICAgT2JqZWN0TmFtZSAgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgIFNlbGVjdG9yICAgID0+ICcxMjM0JwogICAgICAgIEF0dHJpYnV0ZSAgID0+ICdDaGFuZ2VTdGF0ZUlEJywKICAgICAgICBBY3Rpb25JRCAgICA9PiAyMzQ1LAogICAgICAgIEFjdGlvblZhbHVlID0+ICcxMycsCiAgICAgICAgVXNlcklEICAgICAgPT4gMTIzNCwKICAgICk7Cgo9Y3V0CgpzdWIgX09wZXJhdG9yQWN0aW9uRXhlY3V0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhPcGVyYXRvciBPYmplY3ROYW1lIFNlbGVjdG9yIEF0dHJpYnV0ZSBBY3Rpb25JRCBBY3Rpb25WYWx1ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhZXhpc3RzICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZiBpbiBhIHNwZWNpYWwgd2F5CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhBY3Rpb25WYWx1ZSkpIHsKICAgICAgICBpZiAoICFleGlzdHMgJFBhcmFteyRBcmd1bWVudH0gfHwgIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbWFwIGZvciBvcGVyYXRvciBhY3Rpb24KICAgIG15ICVPcGVyYXRvckFjdGlvbiA9ICgKICAgICAgICAnc2V0JyA9PiAnX09wZXJhdG9yU2V0JywKICAgICk7CgogICAgIyBnZXQgb3BlcmF0b3IgbmFtZQogICAgbXkgJE9wZXJhdG9yTmFtZSA9ICRQYXJhbXtPcGVyYXRvcn07CgogICAgIyBjaGVjayBmb3IgbWF0Y2hpbmcgb3BlcmF0b3IKICAgIGlmICggIWV4aXN0cyAkT3BlcmF0b3JBY3Rpb257JE9wZXJhdG9yTmFtZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBtYXRjaGluZyBvcGVyYXRvciBmb3IgJyRPcGVyYXRvck5hbWUnIGZvdW5kISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBleHRyYWN0IG9wZXJhdG9yIHN1YgogICAgbXkgJFN1YiA9ICRPcGVyYXRvckFjdGlvbnskT3BlcmF0b3JOYW1lfTsKCiAgICAjIGNoZWNrIGZvciBhdmFpbGFibGUgZnVuY3Rpb24KICAgIGlmICggISRTZWxmLT5jYW4oJFN1YikgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBmdW5jdGlvbiAnJFN1YicgYXZhaWxhYmxlIGZvciAnJE9wZXJhdG9yTmFtZSchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGV4ZWN1dGUgZXh0cmFjdGVkIGFjdGlvbgogICAgbXkgJFJlc3VsdCA9ICRTZWxmLT4kU3ViKAogICAgICAgIE9wZXJhdG9yICAgID0+ICRQYXJhbXtPcGVyYXRvcn0sCiAgICAgICAgT2JqZWN0TmFtZSAgPT4gJFBhcmFte09iamVjdE5hbWV9LAogICAgICAgIFNlbGVjdG9yICAgID0+ICRQYXJhbXtTZWxlY3Rvcn0sCiAgICAgICAgQXR0cmlidXRlICAgPT4gJFBhcmFte0F0dHJpYnV0ZX0sCiAgICAgICAgQWN0aW9uSUQgICAgPT4gJFBhcmFte0FjdGlvbklEfSwKICAgICAgICBBY3Rpb25WYWx1ZSA9PiAkUGFyYW17QWN0aW9uVmFsdWV9LAogICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gJFJlc3VsdDsKfQoKPWl0ZW0gX09wZXJhdG9yRXF1YWwoKQoKUmV0dXJucyB0cnVlIG9yIGZhbHNlICgxL3VuZGVmKSBpZiBnaXZlbiB2YWx1ZXMgYXJlIGVxdWFsLgoKICAgIG15ICRSZXN1bHQgPSAkQ29uZGl0aW9uT2JqZWN0LT5fT3BlcmF0b3JFcXVhbCgKICAgICAgICBWYWx1ZTEgPT4gJ1NvbWVWYWx1ZScsCiAgICAgICAgVmFsdWUyID0+ICdTb21lT3RoZXJWYWx1ZScsCiAgICApOwoKPWN1dAoKc3ViIF9PcGVyYXRvckVxdWFsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFZhbHVlMSBWYWx1ZTIpKSB7CiAgICAgICAgaWYgKCAhZXhpc3RzICRQYXJhbXskQXJndW1lbnR9IHx8ICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHJldHVybiByZXN1bHQgb2YgZXF1YXRpb24KICAgIHJldHVybiAkUGFyYW17VmFsdWUxfSBlcSAkUGFyYW17VmFsdWUyfTsKfQoKPWl0ZW0gX09wZXJhdG9yTm90RXF1YWwoKQoKUmV0dXJucyB0cnVlIG9yIGZhbHNlICgxL3VuZGVmKSBpZiBnaXZlbiB2YWx1ZXMgYXJlIG5vdCBlcXVhbC4KCiAgICBteSAkUmVzdWx0ID0gJENvbmRpdGlvbk9iamVjdC0+X09wZXJhdG9yTm90RXF1YWwoCiAgICAgICAgVmFsdWUxID0+ICdTb21lVmFsdWUnLAogICAgICAgIFZhbHVlMiA9PiAnU29tZU90aGVyVmFsdWUnLAogICAgKTsKCj1jdXQKCnN1YiBfT3BlcmF0b3JOb3RFcXVhbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhWYWx1ZTEgVmFsdWUyKSkgewogICAgICAgIGlmICggIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fSB8fCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyByZXR1cm4gcmVzdWx0IG9mIG5lZ2F0ZWQgZXF1YXRpb24KICAgIHJldHVybiAhJFNlbGYtPl9PcGVyYXRvckVxdWFsKCVQYXJhbSk7Cn0KCj1pdGVtIF9PcGVyYXRvcklzRW1wdHkoKQoKUmV0dXJucyB0cnVlIG9yIGZhbHNlICgxL3VuZGVmKSBpZiBnaXZlbiB2YWx1ZSBpcyBlbXB0eS4KCiAgICBteSAkUmVzdWx0ID0gJENvbmRpdGlvbk9iamVjdC0+X09wZXJhdG9ySXNFbXB0eSgKICAgICAgICBWYWx1ZTEgPT4gJycsCiAgICApOwoKPWN1dAoKc3ViIF9PcGVyYXRvcklzRW1wdHkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVmFsdWUxKSkgewogICAgICAgIGlmICggIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fSB8fCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBsZW5ndGggb2YgdmFsdWUKICAgIG15ICRWYWx1ZUxlbmd0aCA9IGxlbmd0aCAkUGFyYW17VmFsdWUxfTsKCiAgICAjIHJldHVybiByZXN1bHQgb2YgbGVuZ3RoIGNoZWNrCiAgICByZXR1cm4gJFZhbHVlTGVuZ3RoID09IDA7Cn0KCj1pdGVtIF9PcGVyYXRvcklzTm90RW1wdHkoKQoKUmV0dXJucyB0cnVlIG9yIGZhbHNlICgxL3VuZGVmKSBpZiBnaXZlbiB2YWx1ZSBpcyBub3QgZW1wdHkuCgogICAgbXkgJFJlc3VsdCA9ICRDb25kaXRpb25PYmplY3QtPl9PcGVyYXRvcklzTm90RW1wdHkoCiAgICAgICAgVmFsdWUxID0+ICdTb21lVmFsdWUnLAogICAgKTsKCj1jdXQKCnN1YiBfT3BlcmF0b3JJc05vdEVtcHR5IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFZhbHVlMSkpIHsKICAgICAgICBpZiAoICFleGlzdHMgJFBhcmFteyRBcmd1bWVudH0gfHwgIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcmV0dXJuIHJlc3VsdCBvZiBuZWdhdGVkIGVxdWF0aW9uCiAgICByZXR1cm4gISRTZWxmLT5fT3BlcmF0b3JJc0VtcHR5KCVQYXJhbSk7Cn0KCj1pdGVtIF9PcGVyYXRvcklzR3JlYXRlclRoYW4oKQoKUmV0dXJucyB0cnVlIG9yIGZhbHNlICgxL3VuZGVmKSBpZiBWYWx1ZTEgaXMgZ3JlYXRlciB0aGFuCnRoZSBjb21wYXJlIFZhbHVlMi4KCiAgICBteSAkUmVzdWx0ID0gJENvbmRpdGlvbk9iamVjdC0+X09wZXJhdG9ySXNHcmVhdGVyVGhhbigKICAgICAgICBWYWx1ZTEgPT4gMjM0NSwKICAgICAgICBWYWx1ZTIgPT4gMTIzNCwKICAgICk7Cgo9Y3V0CgpzdWIgX09wZXJhdG9ySXNHcmVhdGVyVGhhbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhWYWx1ZTEgVmFsdWUyKSkgewogICAgICAgIGlmICggIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fSB8fCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgc2V0IGRlZmF1bHQgdG8gbnVtYmVyIDAgKHplcm8pCiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gMDsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBmb3IgZGlnaXRzLCBhbGxvdyBkZWNpbWFsIHBvaW50LCBhbGxvdyBuZWdhdGl2ZSBudW1iZXJzCiAgICByZXR1cm4gaWYgJFBhcmFte1ZhbHVlMX0gIX4gbXsgXEEgWystXT8gXGQrICggXC4gXGQrICk/IFx6IH14bXM7CiAgICByZXR1cm4gaWYgJFBhcmFte1ZhbHVlMn0gIX4gbXsgXEEgWystXT8gXGQrICggXC4gXGQrICk/IFx6IH14bXM7CgogICAgIyByZXR1cm4gcmVzdWx0IG9mIGdyZWF0ZXIgdGhhbiBjaGVjawogICAgcmV0dXJuICRQYXJhbXtWYWx1ZTF9ID4gJFBhcmFte1ZhbHVlMn07Cn0KCj1pdGVtIF9PcGVyYXRvcklzTGVzc1RoYW4oKQoKUmV0dXJucyB0cnVlIG9yIGZhbHNlICgxL3VuZGVmKSBpZiBWYWx1ZTEgaXMgbGVzcyB0aGFuCnRoZSBjb21wYXJlIFZhbHVlMi4KCiAgICBteSAkUmVzdWx0ID0gJENvbmRpdGlvbk9iamVjdC0+X09wZXJhdG9ySXNMZXNzVGhhbigKICAgICAgICBWYWx1ZTEgPT4gMjM0NSwKICAgICAgICBWYWx1ZTIgPT4gMTIzNCwKICAgICk7Cgo9Y3V0CgpzdWIgX09wZXJhdG9ySXNMZXNzVGhhbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhWYWx1ZTEgVmFsdWUyKSkgewogICAgICAgIGlmICggIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fSB8fCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgc2V0IGRlZmF1bHQgdG8gbnVtYmVyIDAgKHplcm8pCiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gMDsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBmb3IgZGlnaXRzLCBhbGxvdyBkZWNpbWFsIHBvaW50LCBhbGxvdyBuZWdhdGl2ZSBudW1iZXJzCiAgICByZXR1cm4gaWYgJFBhcmFte1ZhbHVlMX0gIX4gbXsgXEEgWystXT8gXGQrICggXC4gXGQrICk/IFx6IH14bXM7CiAgICByZXR1cm4gaWYgJFBhcmFte1ZhbHVlMn0gIX4gbXsgXEEgWystXT8gXGQrICggXC4gXGQrICk/IFx6IH14bXM7CgogICAgIyByZXR1cm4gcmVzdWx0IG9mIGxlc3MgdGhhbiBjaGVjawogICAgcmV0dXJuICRQYXJhbXtWYWx1ZTF9IDwgJFBhcmFte1ZhbHVlMn07Cn0KCj1pdGVtIF9PcGVyYXRvcklzQmVmb3JlKCkKClJldHVybnMgdHJ1ZSBvciBmYWxzZSAoMS91bmRlZikgaWYgVmFsdWUxIGlzIGJlZm9yZSB0aGUgY29tcGFyZSBWYWx1ZTIuCgogICAgbXkgJFJlc3VsdCA9ICRDb25kaXRpb25PYmplY3QtPl9PcGVyYXRvcklzQmVmb3JlKAogICAgICAgIFZhbHVlMSA9PiAnMjAxMC0wMS0wMSAwMTowMTowMScsCiAgICAgICAgVmFsdWUyID0+ICcyMDEwLTAxLTAxIDEwOjAxOjAxJywKICAgICk7Cgo9Y3V0CgpzdWIgX09wZXJhdG9ySXNCZWZvcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVmFsdWUxIFZhbHVlMikpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBmb3IgZGF0ZSBmb3JtYXQKICAgIHJldHVybiBpZiAkUGFyYW17VmFsdWUxfSAhfiBteyBcQSBcZHs0fS1cZHsyfS1cZHsyfSBccyBcZHsyfTpcZHsyfTpcZHsyfSBceiB9eG1zOwogICAgcmV0dXJuIGlmICRQYXJhbXtWYWx1ZTJ9ICF+IG17IFxBIFxkezR9LVxkezJ9LVxkezJ9IFxzIFxkezJ9OlxkezJ9OlxkezJ9IFx6IH14bXM7CgogICAgIyBnZXQgdGltZXN0YW1wcwogICAgbXkgJVRpbWVzdGFtcDsKICAgIGZvciBteSAkRGF0ZSAocXcoVmFsdWUxIFZhbHVlMikpIHsKCiAgICAgICAgIyBjb252ZXJ0IHRpbWUKICAgICAgICAkVGltZXN0YW1weyREYXRlfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyktPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFteyREYXRlfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGZvciB0aW1lCiAgICAgICAgcmV0dXJuIGlmICEkVGltZXN0YW1weyREYXRlfTsKICAgIH0KCiAgICAjIHJldHVybiByZXN1bHQgb2YgbG93ZXIgdGhhbiBjaGVjawogICAgcmV0dXJuICRUaW1lc3RhbXB7VmFsdWUxfSA8ICRUaW1lc3RhbXB7VmFsdWUyfTsKfQoKPWl0ZW0gX09wZXJhdG9ySXNBZnRlcigpCgpSZXR1cm5zIHRydWUgb3IgZmFsc2UgKDEvdW5kZWYpIGlmIFZhbHVlMSBpcyBhZnRlciB0aGUgY29tcGFyZSBWYWx1ZTIuCgogICAgbXkgJFJlc3VsdCA9ICRDb25kaXRpb25PYmplY3QtPl9PcGVyYXRvcklzQWZ0ZXIoCiAgICAgICAgVmFsdWUxID0+ICcyMDEwLTAxLTAxIDEwOjAxOjAxJywKICAgICAgICBWYWx1ZTIgPT4gJzIwMTAtMDEtMDEgMDE6MDE6MDEnLAogICAgKTsKCj1jdXQKCnN1YiBfT3BlcmF0b3JJc0FmdGVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFZhbHVlMSBWYWx1ZTIpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgZm9yIGRhdGUgZm9ybWF0CiAgICByZXR1cm4gaWYgJFBhcmFte1ZhbHVlMX0gIX4gbXsgXEEgXGR7NH0tXGR7Mn0tXGR7Mn0gXHMgXGR7Mn06XGR7Mn06XGR7Mn0gIFx6IH14bXM7CiAgICByZXR1cm4gaWYgJFBhcmFte1ZhbHVlMn0gIX4gbXsgXEEgXGR7NH0tXGR7Mn0tXGR7Mn0gXHMgXGR7Mn06XGR7Mn06XGR7Mn0gIFx6IH14bXM7CgogICAgIyByZXR1cm4gcmVzdWx0IG9mIG5lZ2F0ZWQgZXF1YXRpb24KICAgIHJldHVybiAhJFNlbGYtPl9PcGVyYXRvcklzQmVmb3JlKCVQYXJhbSk7Cn0KCj1pdGVtIF9PcGVyYXRvckNvbnRhaW5zKCkKClJldHVybnMgdHJ1ZSBvciBmYWxzZSAoMS91bmRlZikgaWYgdmFsdWUxIGNvbnRhaW5zIHZhbHVlMi4KCiAgICBteSAkUmVzdWx0ID0gJENvbmRpdGlvbk9iamVjdC0+X09wZXJhdG9yQ29udGFpbnMoCiAgICAgICAgVmFsdWUxID0+ICdTb21lVmFsdWUnLAogICAgICAgIFZhbHVlMiA9PiAnVmFsdWUnLAogICAgKTsKCj1jdXQKCnN1YiBfT3BlcmF0b3JDb250YWlucyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhWYWx1ZTEgVmFsdWUyKSkgewogICAgICAgIGlmICggIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fSB8fCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbG93ZXIgY2FzZSwgZm9yIHBlcmZvcm1hbmNlIGlzc3VlcwogICAgbXkgJExvd2VyVmFsdWUxID0gbGMgJFBhcmFte1ZhbHVlMX07CiAgICBteSAkTG93ZXJWYWx1ZTIgPSBsYyAkUGFyYW17VmFsdWUyfTsKCiAgICAjIGNoZWNrIGVtYmVkZGVkIHN0cmluZwogICAgbXkgJENvbnRhaW5zID0gJExvd2VyVmFsdWUxID1+IG17IFxBIC4qICRMb3dlclZhbHVlMiAuKiBceiB9eG1zOwoKICAgICMgcmV0dXJuIHJlc3VsdCBvZiBlcXVhdGlvbgogICAgcmV0dXJuICRDb250YWluczsKfQoKPWl0ZW0gX09wZXJhdG9yTm90Q29udGFpbnMoKQoKUmV0dXJucyB0cnVlIG9yIGZhbHNlICgxL3VuZGVmKSBpZiB2YWx1ZTEgbm90IGNvbnRhaW5zIHZhbHVlMi4KCiAgICBteSAkUmVzdWx0ID0gJENvbmRpdGlvbk9iamVjdC0+X09wZXJhdG9yTm90Q29udGFpbnMoCiAgICAgICAgVmFsdWUxID0+ICdTb21lVmFsdWUnLAogICAgICAgIFZhbHVlMiA9PiAnU29tZU90aGVyVmFsdWUnLAogICAgKTsKCj1jdXQKCnN1YiBfT3BlcmF0b3JOb3RDb250YWlucyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhWYWx1ZTEgVmFsdWUyKSkgewogICAgICAgIGlmICggIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fSB8fCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyByZXR1cm4gcmVzdWx0IG9mIG5lZ2F0ZWQgZXF1YXRpb24KICAgIHJldHVybiAhJFNlbGYtPl9PcGVyYXRvckNvbnRhaW5zKCVQYXJhbSk7Cn0KCj1pdGVtIF9PcGVyYXRvckJlZ2luc1dpdGgoKQoKUmV0dXJucyB0cnVlIG9yIGZhbHNlICgxL3VuZGVmKSBpZiB2YWx1ZTEgYmVnaW5zIHdpdGggdmFsdWUyLgoKICAgIG15ICRSZXN1bHQgPSAkQ29uZGl0aW9uT2JqZWN0LT5fT3BlcmF0b3JCZWdpbnNXaXRoKAogICAgICAgIFZhbHVlMSA9PiAnU29tZVZhbHVlJywKICAgICAgICBWYWx1ZTIgPT4gJ1NvbWUnLAogICAgKTsKCj1jdXQKCnN1YiBfT3BlcmF0b3JCZWdpbnNXaXRoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFZhbHVlMSBWYWx1ZTIpKSB7CiAgICAgICAgaWYgKCAhZXhpc3RzICRQYXJhbXskQXJndW1lbnR9IHx8ICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBsb3dlciBjYXNlLCBmb3IgcGVyZm9ybWFuY2UgaXNzdWVzCiAgICBteSAkTG93ZXJWYWx1ZTEgPSBsYyAkUGFyYW17VmFsdWUxfTsKICAgIG15ICRMb3dlclZhbHVlMiA9IGxjICRQYXJhbXtWYWx1ZTJ9OwoKICAgICMgY2hlY2sgZW1iZWRkZWQgc3RyaW5nCiAgICBteSAkQmVnaW5zV2l0aCA9ICRMb3dlclZhbHVlMSA9fiBteyBcQSAkTG93ZXJWYWx1ZTIgLiogXHogfXhtczsKCiAgICAjIHJldHVybiByZXN1bHQgb2YgZXF1YXRpb24KICAgIHJldHVybiAkQmVnaW5zV2l0aDsKfQoKPWl0ZW0gX09wZXJhdG9yRW5kc1dpdGgoKQoKUmV0dXJucyB0cnVlIG9yIGZhbHNlICgxL3VuZGVmKSBpZiB2YWx1ZTEgZW5kcyB3aXRoIHZhbHVlMi4KCiAgICBteSAkUmVzdWx0ID0gJENvbmRpdGlvbk9iamVjdC0+X09wZXJhdG9yRW5kc1dpdGgoCiAgICAgICAgVmFsdWUxID0+ICdTb21lVmFsdWUnLAogICAgICAgIFZhbHVlMiA9PiAnVmFsdWUnLAogICAgKTsKCj1jdXQKCnN1YiBfT3BlcmF0b3JFbmRzV2l0aCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhWYWx1ZTEgVmFsdWUyKSkgewogICAgICAgIGlmICggIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fSB8fCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgbG93ZXIgY2FzZSwgZm9yIHBlcmZvcm1hbmNlIGlzc3VlcwogICAgbXkgJExvd2VyVmFsdWUxID0gbGMgJFBhcmFte1ZhbHVlMX07CiAgICBteSAkTG93ZXJWYWx1ZTIgPSBsYyAkUGFyYW17VmFsdWUyfTsKCiAgICAjIGNoZWNrIGVtYmVkZGVkIHN0cmluZwogICAgbXkgJEVuZHNXaXRoID0gJExvd2VyVmFsdWUxID1+IG17IFxBIC4qICRMb3dlclZhbHVlMiBceiB9eG1zOwoKICAgICMgcmV0dXJuIHJlc3VsdCBvZiBlcXVhdGlvbgogICAgcmV0dXJuICRFbmRzV2l0aDsKfQoKPWl0ZW0gX09wZXJhdG9yU2V0KCkKClJldHVybnMgdGhlIHN1Y2Nlc3Mgb2Ygc2V0dGluZyBhIG5ldyB2YWx1ZS4KCiAgICBteSAkUmVzdWx0ID0gJENvbmRpdGlvbk9iamVjdC0+X09wZXJhdG9yU2V0KAogICAgICAgIE9wZXJhdG9yICAgID0+ICdzZXQnLAogICAgICAgIE9iamVjdE5hbWUgID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICBTZWxlY3RvciAgICA9PiAnMTIzNCcKICAgICAgICBBdHRyaWJ1dGUgICA9PiAnQ2hhbmdlU3RhdGVJRCcsCiAgICAgICAgQWN0aW9uSUQgICAgPT4gJ0NoYW5nZVN0YXRlSUQnLAogICAgICAgIEFjdGlvblZhbHVlID0+ICcxMycsCiAgICAgICAgVXNlcklEICAgICAgPT4gMTIzNCwKICAgICk7Cgo9Y3V0CgpzdWIgX09wZXJhdG9yU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9wZXJhdG9yIE9iamVjdE5hbWUgU2VsZWN0b3IgQXR0cmlidXRlIEFjdGlvbklEIEFjdGlvblZhbHVlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICFleGlzdHMgJFBhcmFteyRBcmd1bWVudH0gfHwgIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IG9wZXJhdG9yIG5hbWUKICAgIG15ICRPcGVyYXRvck5hbWUgPSAkUGFyYW17T2JqZWN0TmFtZX07CgogICAgIyBnZXQgb3BlcmF0b3IgYmFja2VuZAogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KAogICAgICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbjo6T3BlcmF0b3I6OicgLiAkT3BlcmF0b3JOYW1lCiAgICApOwoKICAgIHJldHVybiBpZiAhJEJhY2tlbmRPYmplY3Q7CgogICAgIyBkZWZpbmUgZGVmYXVsdCBmdW5jdGlvbnMgZm9yIGJhY2tlbmQKICAgIG15ICRTdWIgPSAnU2V0JzsKCiAgICAjIGNoZWNrIGZvciBhdmFpbGFibGUgZnVuY3Rpb24KICAgIGlmICggISRCYWNrZW5kT2JqZWN0LT5jYW4oJFN1YikgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBmdW5jdGlvbiAnJFN1YicgYXZhaWxhYmxlIGZvciBiYWNrZW5kICckT3BlcmF0b3JOYW1lJyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcmVzdWx0IHZhbHVlCiAgICBteSAkUmVzdWx0OwoKICAgICMgZXhlY3V0ZSBleHRyYWN0ZWQgYWN0aW9uIHdpdGggc2VsZWN0b3IgJ2FsbCcKICAgIGlmICggJFBhcmFte1NlbGVjdG9yfSBlcSAnYWxsJyApIHsKCiAgICAgICAgIyBkZWZpbmUgJ2FsbCcgZnVuY3Rpb24gZm9yIGJhY2tlbmQKICAgICAgICAkU3ViID0gJ1NldEFsbCc7CgogICAgICAgICMgY2hlY2sgZm9yIGF2YWlsYWJsZSBmdW5jdGlvbgogICAgICAgIGlmICggISRCYWNrZW5kT2JqZWN0LT5jYW4oJFN1YikgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBmdW5jdGlvbiAnJFN1YicgYXZhaWxhYmxlIGZvciBiYWNrZW5kICckT3BlcmF0b3JOYW1lJyEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGdldCBhY3Rpb24KICAgICAgICBteSAkQWN0aW9uID0gJFNlbGYtPkFjdGlvbkdldCgKICAgICAgICAgICAgQWN0aW9uSUQgPT4gJFBhcmFte0FjdGlvbklEfSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBhY3Rpb24KICAgICAgICByZXR1cm4gaWYgISRBY3Rpb247CgogICAgICAgICMgZ2V0IG9iamVjdHMgZm9yICdhbGwnCiAgICAgICAgbXkgJEFjdGlvbk9iamVjdHMgPSAkU2VsZi0+T2JqZWN0RGF0YUdldCgKICAgICAgICAgICAgQ29uZGl0aW9uSUQgPT4gJEFjdGlvbi0+e0NvbmRpdGlvbklEfSwKICAgICAgICAgICAgT2JqZWN0TmFtZSAgPT4gJFBhcmFte09iamVjdE5hbWV9LAogICAgICAgICAgICBTZWxlY3RvciAgICA9PiAkUGFyYW17U2VsZWN0b3J9LAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIG9iamVjdHMKICAgICAgICByZXR1cm4gMSBpZiAhJEFjdGlvbk9iamVjdHM7CiAgICAgICAgcmV0dXJuICAgaWYgcmVmICRBY3Rpb25PYmplY3RzIG5lICdBUlJBWSc7CgogICAgICAgICMgZXhlY3V0ZSBhY3Rpb25zIGZvciBhbGwgb2JqZWN0cwogICAgICAgICRSZXN1bHQgPSAkQmFja2VuZE9iamVjdC0+JFN1YigKICAgICAgICAgICAgT3BlcmF0b3IgICAgPT4gJFBhcmFte09wZXJhdG9yfSwKICAgICAgICAgICAgT2JqZWN0TmFtZSAgPT4gJFBhcmFte09iamVjdE5hbWV9LAogICAgICAgICAgICBPYmplY3RzICAgICA9PiAkQWN0aW9uT2JqZWN0cywKICAgICAgICAgICAgQXR0cmlidXRlICAgPT4gJFBhcmFte0F0dHJpYnV0ZX0sCiAgICAgICAgICAgIEFjdGlvblZhbHVlID0+ICRQYXJhbXtBY3Rpb25WYWx1ZX0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBleGVjdXRlIGV4dHJhY3RlZCBhY3Rpb24gd2l0aCBzaW5nbGUgc2VsZWN0b3IKICAgICAgICAkUmVzdWx0ID0gJEJhY2tlbmRPYmplY3QtPiRTdWIoCiAgICAgICAgICAgIE9wZXJhdG9yICAgID0+ICRQYXJhbXtPcGVyYXRvcn0sCiAgICAgICAgICAgIE9iamVjdE5hbWUgID0+ICRQYXJhbXtPYmplY3ROYW1lfSwKICAgICAgICAgICAgU2VsZWN0b3IgICAgPT4gJFBhcmFte1NlbGVjdG9yfSwKICAgICAgICAgICAgQXR0cmlidXRlICAgPT4gJFBhcmFte0F0dHJpYnV0ZX0sCiAgICAgICAgICAgIEFjdGlvblZhbHVlID0+ICRQYXJhbXtBY3Rpb25WYWx1ZX0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRSZXN1bHQ7Cn0KCjE7Cgo9ZW5kIEludGVybmFsOgoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246Ok9iamVjdDo6SVRTTUNoYW5nZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VXNlcicsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246Ok9iamVjdDo6SVRTTUNoYW5nZSAtIGNvbmRpdGlvbiBpdHNtIGNoYW5nZSBvYmplY3QgbGliCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBJVFNNQ2hhbmdlIG9iamVjdCBmdW5jdGlvbnMgZm9yIGNvbmRpdGlvbnMgaW4gSVRTTUNoYW5nZU1hbmFnZW1lbnQuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRDb25kaXRpb25PYmplY3RJVFNNQ2hhbmdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246Ok9iamVjdDo6SVRTTUNoYW5nZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIERhdGFHZXQoKQoKUmV0dXJucyBjaGFuZ2UgZGF0YSBpbiBhbiBhcnJheSByZWZlcmVuY2UuCgogICAgbXkgJENoYW5nZURhdGFSZWYgPSAkQ29uZGl0aW9uT2JqZWN0SVRTTUNoYW5nZS0+RGF0YUdldCgKICAgICAgICBTZWxlY3RvciA9PiAxMjM0LAogICAgICAgIFVzZXJJRCAgID0+IDIzNDUsCiAgICApOwoKPWN1dAoKc3ViIERhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VsZWN0b3IgVXNlcklEKSkgewogICAgICAgIGlmICggIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fSB8fCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyByZW1hcCBwYXJhbXMKICAgIG15ICVDaGFuZ2VHZXQgPSAoCiAgICAgICAgQ2hhbmdlSUQgPT4gJFBhcmFte1NlbGVjdG9yfSwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgY2hhbmdlIGRhdGEgYXMgYW5vbiBoYXNoIHJlZgogICAgbXkgJENoYW5nZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZUdldCglQ2hhbmdlR2V0KTsKCiAgICAjIGNoZWNrIGZvciBjaGFuZ2UKICAgIHJldHVybiBpZiAhJENoYW5nZTsKCiAgICAjIGJ1aWxkIGFycmF5IHJlZgogICAgbXkgJENoYW5nZURhdGEgPSBbJENoYW5nZV07CgogICAgcmV0dXJuICRDaGFuZ2VEYXRhOwp9Cgo9aXRlbSBDb21wYXJlVmFsdWVMaXN0KCkKClJldHVybnMgYSBsaXN0IG9mIGF2YWlsYWJsZSBDb21wYXJlVmFsdWVzIGZvciB0aGUgZ2l2ZW4gYXR0cmlidXRlIGlkIG9mIGEgY2hhbmdlIG9iamVjdCBhcyBoYXNoIHJlZmVyZW5jZS4KCiAgICBteSAkQ29tcGFyZVZhbHVlTGlzdCA9ICRDb25kaXRpb25PYmplY3RJVFNNQ2hhbmdlLT5Db21wYXJlVmFsdWVMaXN0KAogICAgICAgIEF0dHJpYnV0ZU5hbWUgPT4gJ1ByaW9yaXR5SUQnLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zIGEgaGFzaCByZWZlcmVuY2UgbGlrZSB0aGlzLCBmb3IgdGhlIGNoYW5nZSBhdHRyaWJ1dGUgJ1ByaW9yaXR5JzoKCiAgICAkQ29tcGFyZVZhbHVlTGlzdCA9IHsKICAgICAgICAyMyAgICA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgMjQgICAgPT4gJzIgbG93JywKICAgICAgICAyNSAgICA9PiAnMyBub3JtYWwnLAogICAgICAgIDI2ICAgID0+ICc0IGhpZ2gnLAogICAgICAgIDI3ICAgID0+ICc1IHZlcnkgaGlnaCcsCiAgICB9Cgo9Y3V0CgpzdWIgQ29tcGFyZVZhbHVlTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhBdHRyaWJ1dGVOYW1lIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyB0byBzdG9yZSB0aGUgbGlzdAogICAgbXkgJENvbXBhcmVWYWx1ZUxpc3QgPSB7fTsKCiAgICAjIENhdGVnb3J5SUQsIEltcGFjdElELCBQcmlvcml0eUlECiAgICBpZiAoICRQYXJhbXtBdHRyaWJ1dGVOYW1lfSA9fiBteyBcQSAoIENhdGVnb3J5IHwgSW1wYWN0IHwgUHJpb3JpdHkgKSBJRCBceiB9eG1zICkgewoKICAgICAgICAjIHJlbW92ZSAnSUQnIGF0IHRoZSBlbmQgb2YgYXR0cmlidXRlCiAgICAgICAgbXkgJFR5cGUgPSAkMTsKCiAgICAgICAgIyBnZXQgdGhlIGNhdGVnb3J5IG9yIGltcGFjdCBvciBwcmlvcml0eSBsaXN0CiAgICAgICAgJENvbXBhcmVWYWx1ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5DaGFuZ2VQb3NzaWJsZUNJUEdldCgKICAgICAgICAgICAgVHlwZSAgID0+ICRUeXBlLAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIENoYW5nZVN0YXRlSUQKICAgIGVsc2lmICggJFBhcmFte0F0dHJpYnV0ZU5hbWV9IGVxICdDaGFuZ2VTdGF0ZUlEJyApIHsKCiAgICAgICAgIyBnZXQgY2hhbmdlIHN0YXRlIGxpc3QKICAgICAgICAkQ29tcGFyZVZhbHVlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZVBvc3NpYmxlU3RhdGVzR2V0KAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICgKICAgICAgICAkUGFyYW17QXR0cmlidXRlTmFtZX0gZXEgJ0NoYW5nZUJ1aWxkZXJJRCcKICAgICAgICB8fCAkUGFyYW17QXR0cmlidXRlTmFtZX0gZXEgJ0NoYW5nZU1hbmFnZXJJRCcKICAgICAgICApCiAgICB7CgogICAgICAgICMgZ2V0IGEgY29tcGxldGUgbGlzdCBvZiB1c2VycwogICAgICAgIG15ICVVc2VycyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMaXN0KAogICAgICAgICAgICBUeXBlICA9PiAnTG9uZycsCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgJENvbXBhcmVWYWx1ZUxpc3QgPSBcJVVzZXJzOwogICAgfQoKICAgIHJldHVybiAkQ29tcGFyZVZhbHVlTGlzdDsKfQoKPWl0ZW0gU2VsZWN0b3JMaXN0KCkKClJldHVybnMgYSBsaXN0IG9mIGFsbCBzZWxlY3RvcnMgYXZhaWxhYmxlIGZvciB0aGUgZ2l2ZW4gY2hhbmdlIG9iamVjdCBpZCBhbmQgY29uZGl0aW9uIGlkIGFzIGhhc2ggcmVmZXJlbmNlCgogICAgbXkgJFNlbGVjdG9yTGlzdCA9ICRDb25kaXRpb25PYmplY3RJVFNNQ2hhbmdlLT5TZWxlY3Rvckxpc3QoCiAgICAgICAgT2JqZWN0SUQgICAgPT4gMTIzNCwKICAgICAgICBDb25kaXRpb25JRCA9PiA1LAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKUmV0dXJucyBhIGhhc2ggcmVmZXJlbmNlIGxpa2UgdGhpczoKCiAgICAkU2VsZWN0b3JMaXN0ID0gewogICAgICAgIDQ1NiA9PiAnQ2hhbmdlIyAyMDEwMDExNjEwMDAwNjE4JywKICAgIH0KCj1jdXQKCnN1YiBTZWxlY3Rvckxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjaGFuZ2UgZGF0YQogICAgbXkgJENoYW5nZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBlcnJvcgogICAgcmV0dXJuIGlmICEkQ2hhbmdlRGF0YTsKCiAgICAjIGJ1aWxkIHNlbGVjdG9yIGxpc3QKICAgIG15ICVTZWxlY3Rvckxpc3QgPSAoCiAgICAgICAgJENoYW5nZURhdGEtPntDaGFuZ2VJRH0gPT4gJENoYW5nZURhdGEtPntDaGFuZ2VOdW1iZXJ9LAogICAgKTsKCiAgICByZXR1cm4gXCVTZWxlY3Rvckxpc3Q7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246Ok9iamVjdDo6SVRTTVdvcmtPcmRlcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlVzZXInLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uOjpPYmplY3Q6OklUU01Xb3JrT3JkZXIgLSBjb25kaXRpb24gaXRzbSB3b3Jrb3JkZXIgb2JqZWN0IGxpYgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgSVRTTVdvcmtPcmRlciBvYmplY3QgZnVuY3Rpb25zIGZvciBjb25kaXRpb25zIGluIElUU01DaGFuZ2VNYW5hZ2VtZW50LgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ29uZGl0aW9uT2JqZWN0SVRTTVdvcmtPcmRlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uOjpPYmplY3Q6OklUU01Xb3JrT3JkZXInKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBEYXRhR2V0KCkKClJldHVybnMgd29ya29yZGVyIGRhdGEgaW4gYW4gYXJyYXkgcmVmZXJlbmNlLgoKICAgIG15ICRXb3JrT3JkZXJEYXRhUmVmID0gJENvbmRpdGlvbk9iamVjdElUU01Xb3JrT3JkZXItPkRhdGFHZXQoCiAgICAgICAgU2VsZWN0b3IgPT4gMTIzNCwKICAgICAgICBVc2VySUQgICA9PiAyMzQ1LAogICAgKTsKCj1jdXQKCnN1YiBEYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFNlbGVjdG9yIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICFleGlzdHMgJFBhcmFteyRBcmd1bWVudH0gfHwgIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgaGFuZGxlICdhbnknIG9yICdhbGwnIGluIGEgc3BlY2lhbCBjYXNlCiAgICByZXR1cm4gJFNlbGYtPl9EYXRhR2V0QWxsKCVQYXJhbSkgaWYgJFBhcmFte1NlbGVjdG9yfSBlcSAnYW55JzsKICAgIHJldHVybiAkU2VsZi0+X0RhdGFHZXRBbGwoJVBhcmFtKSBpZiAkUGFyYW17U2VsZWN0b3J9IGVxICdhbGwnOwoKICAgICMgcmVtYXAgcGFyYW1zCiAgICBteSAlV29ya09yZGVyR2V0ID0gKAogICAgICAgIFdvcmtPcmRlcklEID0+ICRQYXJhbXtTZWxlY3Rvcn0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IHdvcmtvcmRlciBhcyBhbm9uIGhhc2ggcmVmCiAgICBteSAkV29ya09yZGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyR2V0KCVXb3JrT3JkZXJHZXQpOwoKICAgICMgY2hlY2sgZm9yIHdvcmtvcmRlcgogICAgcmV0dXJuIGlmICEkV29ya09yZGVyOwoKICAgICMgYnVpbGQgYXJyYXkgcmVmCiAgICBteSAkV29ya09yZGVyRGF0YSA9IFskV29ya09yZGVyXTsKCiAgICByZXR1cm4gJFdvcmtPcmRlckRhdGE7Cn0KCj1pdGVtIENvbXBhcmVWYWx1ZUxpc3QoKQoKUmV0dXJucyBhIGxpc3Qgb2YgYXZhaWxhYmxlIENvbXBhcmVWYWx1ZXMgZm9yIHRoZSBnaXZlbiBhdHRyaWJ1dGUgaWQgb2YgYSB3b3Jrb3JkZXIgb2JqZWN0IGFzIGhhc2ggcmVmZXJlbmNlLgoKICAgIG15ICRDb21wYXJlVmFsdWVMaXN0ID0gJENvbmRpdGlvbk9iamVjdElUU01Xb3JrT3JkZXItPkNvbXBhcmVWYWx1ZUxpc3QoCiAgICAgICAgQXR0cmlidXRlTmFtZSA9PiAnV29ya09yZGVyU3RhdGVJRCcsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKClJldHVybnMgYSBoYXNoIHJlZmVyZW5jZSBsaWtlIHRoaXMsIGZvciB0aGUgd29ya29yZGVyIGF0dHJpYnV0ZSAnV29ya09yZGVyU3RhdGVJRCc6CgogICAgJENvbXBhcmVWYWx1ZUxpc3QgPSB7CiAgICAgICAgMTAgICAgPT4gJ2NyZWF0ZWQnLAogICAgICAgIDEyICAgID0+ICdhY2NlcHRlZCcsCiAgICAgICAgMTMgICAgPT4gJ3JlYWR5JywKICAgICAgICAxNCAgICA9PiAnaW4gcHJvZ3Jlc3MnLAogICAgICAgIDE1ICAgID0+ICdjbG9zZWQnLAogICAgICAgIDE2ICAgID0+ICdjYW5jZWxlZCcsCiAgICB9Cgo9Y3V0CgpzdWIgQ29tcGFyZVZhbHVlTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhBdHRyaWJ1dGVOYW1lIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyB0byBzdG9yZSB0aGUgbGlzdAogICAgbXkgJENvbXBhcmVWYWx1ZUxpc3QgPSB7fTsKCiAgICAjIFdvcmtPcmRlclN0YXRlSUQKICAgIGlmICggJFBhcmFte0F0dHJpYnV0ZU5hbWV9IGVxICdXb3JrT3JkZXJTdGF0ZUlEJyApIHsKCiAgICAgICAgIyBnZXQgd29ya29yZGVyIHN0YXRlIGxpc3QKICAgICAgICAkQ29tcGFyZVZhbHVlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlclBvc3NpYmxlU3RhdGVzR2V0KAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIFdvcmtPcmRlclR5cGVJRAogICAgZWxzaWYgKCAkUGFyYW17QXR0cmlidXRlTmFtZX0gZXEgJ1dvcmtPcmRlclR5cGVJRCcgKSB7CgogICAgICAgICMgZ2V0IHdvcmtvcmRlciB0eXBlIGxpc3QKICAgICAgICAkQ29tcGFyZVZhbHVlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlclR5cGVMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte0F0dHJpYnV0ZU5hbWV9IGVxICdXb3JrT3JkZXJBZ2VudElEJyApIHsKCiAgICAgICAgIyBnZXQgYSBjb21wbGV0ZSBsaXN0IG9mIHVzZXJzCiAgICAgICAgbXkgJVVzZXJzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxpc3QoCiAgICAgICAgICAgIFR5cGUgID0+ICdMb25nJywKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkQ29tcGFyZVZhbHVlTGlzdCA9IFwlVXNlcnM7CiAgICB9CgogICAgcmV0dXJuICRDb21wYXJlVmFsdWVMaXN0Owp9Cgo9aXRlbSBTZWxlY3Rvckxpc3QoKQoKUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHNlbGVjdG9ycyBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiB3b3Jrb3JkZXIgb2JqZWN0IGlkIGFuZCBjb25kaXRpb24gaWQgYXMgaGFzaCByZWZlcmVuY2UKCiAgICBteSAkU2VsZWN0b3JMaXN0ID0gJENvbmRpdGlvbk9iamVjdElUU01Xb3JrT3JkZXItPlNlbGVjdG9yTGlzdCgKICAgICAgICBPYmplY3RJRCAgICA9PiAxMjM0LAogICAgICAgIENvbmRpdGlvbklEID0+IDUsCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zIGEgaGFzaCByZWZlcmVuY2UgbGlrZSB0aGlzOgoKICAgICRTZWxlY3Rvckxpc3QgPSB7CiAgICAgICAgMTAgICAgPT4gJzEgLSBXb3Jrb3JkZXJUaXRsZSBvZiBXb3Jrb3JkZXIgMScsCiAgICAgICAgMTIgICAgPT4gJzIgLSBXb3Jrb3JkZXJUaXRsZSBvZiBXb3Jrb3JkZXIgMicsCiAgICAgICAgMzQgICAgPT4gJzMgLSBXb3Jrb3JkZXJUaXRsZSBvZiBXb3Jrb3JkZXIgMycsCiAgICAgICAgJ2FueScgPT4gJ2FueScsCiAgICAgICAgJ2FsbCcgPT4gJ2FsbCcsCiAgICB9Cgo9Y3V0CgpzdWIgU2VsZWN0b3JMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgYWxsIHdvcmtvcmRlciBpZHMgb2YgY2hhbmdlCiAgICBteSAkV29ya09yZGVySURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyTGlzdCgKICAgICAgICBDaGFuZ2VJRCA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGZvciB3b3Jrb3JkZXIgaWRzCiAgICByZXR1cm4gaWYgISRXb3JrT3JkZXJJRHM7CiAgICByZXR1cm4gaWYgcmVmICRXb3JrT3JkZXJJRHMgbmUgJ0FSUkFZJzsKCiAgICAjIGJ1aWxkIHNlbGVjdG9yIGxpc3QKICAgIG15ICVTZWxlY3Rvckxpc3Q7CiAgICBmb3IgbXkgJFdvcmtPcmRlcklEICggQHskV29ya09yZGVySURzfSApIHsKCiAgICAgICAgIyBnZXQgd29ya29yZGVyIGRhdGEKICAgICAgICBteSAkV29ya09yZGVyRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlckdldCgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAkU2VsZWN0b3JMaXN0eyAkV29ya09yZGVyRGF0YS0+e1dvcmtPcmRlcklEfSB9CiAgICAgICAgICAgID0gJFdvcmtPcmRlckRhdGEtPntXb3JrT3JkZXJOdW1iZXJ9IC4gJyAtICcgLiAkV29ya09yZGVyRGF0YS0+e1dvcmtPcmRlclRpdGxlfTsKICAgIH0KCiAgICAjIGFkZCAnYWxsJyBzZWxlY3RvciAoZm9yIGV4cHJlc3Npb25zIGFuZCBhY3Rpb25zKQogICAgJFNlbGVjdG9yTGlzdHsnYWxsJ30gPSAnYWxsJzsKCiAgICAjIGFkZCAnYW55JyBzZWxlY3RvciBvbmx5IGZvciBleHByZXNzaW9ucwogICAgaWYgKCAkUGFyYW17RXhwcmVzc2lvbklEfSApIHsKICAgICAgICAkU2VsZWN0b3JMaXN0eydhbnknfSA9ICdhbnknOwogICAgfQoKICAgIHJldHVybiBcJVNlbGVjdG9yTGlzdDsKfQoKPWJlZ2luIEludGVybmFsOgoKPWl0ZW0gX0RhdGFHZXRBbGwoKQoKICAgIG15ICRXb3JrT3JkZXJEYXRhQXJyYXlSZWYgPSAkQ29uZGl0aW9uT2JqZWN0SVRTTVdvcmtPcmRlci0+X0RhdGFHZXRBbGwoCiAgICAgICAgQ29uZGl0aW9uSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIF9EYXRhR2V0QWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZGl0aW9uCiAgICBteSAkQ29uZGl0aW9uRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJyktPkNvbmRpdGlvbkdldCgKICAgICAgICBDb25kaXRpb25JRCA9PiAkUGFyYW17Q29uZGl0aW9uSUR9LAogICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGZvciBjb25kaXRpb24KICAgIHJldHVybiBpZiAhJENvbmRpdGlvbkRhdGE7CgogICAgIyBnZXQgYWxsIHdvcmtvcmRlciBpZHMgb2YgY2hhbmdlCiAgICBteSAkV29ya09yZGVySURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyTGlzdCgKICAgICAgICBDaGFuZ2VJRCA9PiAkQ29uZGl0aW9uRGF0YS0+e0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBmb3Igd29ya29yZGVyIGlkcwogICAgcmV0dXJuIGlmICEkV29ya09yZGVySURzOwogICAgcmV0dXJuIGlmIHJlZiAkV29ya09yZGVySURzIG5lICdBUlJBWSc7CiAgICByZXR1cm4gaWYgIUB7JFdvcmtPcmRlcklEc307CgogICAgIyBnZXQgd29ya29yZGVyIGRhdGEKICAgIG15IEBXb3JrT3JkZXJEYXRhOwogICAgV09SS09SREVSSUQ6CiAgICBmb3IgbXkgJFdvcmtPcmRlcklEICggQHskV29ya09yZGVySURzfSApIHsKICAgICAgICBteSAkV29ya09yZGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyR2V0KAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgd29ya29yZGVyCiAgICAgICAgbmV4dCBXT1JLT1JERVJJRCBpZiAhJFdvcmtPcmRlcjsKCiAgICAgICAgIyBhZGQgd29ya29yZGVyIHRvIHJldHVybiBhcnJheQogICAgICAgIHB1c2ggQFdvcmtPcmRlckRhdGEsICRXb3JrT3JkZXI7CiAgICB9CgogICAgIyByZXR1cm4gd29ya29yZGVyIGRhdGEKICAgIHJldHVybiBcQFdvcmtPcmRlckRhdGE7Cn0KCjE7Cgo9ZW5kIEludGVybmFsOgoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246Ok9wZXJhdG9yOjpJVFNNQ2hhbmdlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uOjpPcGVyYXRvcjo6SVRTTUNoYW5nZSAtIGNvbmRpdGlvbiBpdHNtIGNoYW5nZSBvcGVyYXRvciBsaWIKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIElUU01DaGFuZ2Ugb3BlcmF0b3IgZnVuY3Rpb25zIGZvciBjb25kaXRpb25zIGluIElUU01DaGFuZ2VNYW5hZ2VtZW50LgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ29uZGl0aW9uT3BlcmF0b3JJVFNNQ2hhbmdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246Ok9wZXJhdG9yOjpJVFNNQ2hhbmdlJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gU2V0KCkKClVwZGF0ZXMgYSBjaGFuZ2Ugd2l0aCB0aGUgZ2l2ZW4gZGF0YS4KCiAgICBteSAkU3VjY2VzcyA9ICRJVFNNQ2hhbmdlT3BlcmF0b3ItPlNldCgKICAgICAgICBTZWxlY3RvciAgICA9PiAxMjM0LAogICAgICAgIEF0dHJpYnV0ZSAgID0+ICdDaGFuZ2VTdGF0ZUlEJywKICAgICAgICBBY3Rpb25WYWx1ZSA9PiAyMzQ1LAogICAgICAgIFVzZXJJRCAgICAgID0+IDEyMzQsCiAgICApOwoKPWN1dAoKc3ViIFNldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTZWxlY3RvciBBdHRyaWJ1dGUgQWN0aW9uVmFsdWUgVXNlcklEKSkgewogICAgICAgIGlmICggIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fSB8fCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgY2hhbmdlCiAgICBteSAkQ2hhbmdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtTZWxlY3Rvcn0sCiAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIHJldHVybiBpZiAhJENoYW5nZTsKICAgIHJldHVybiBpZiByZWYgJENoYW5nZSBuZSAnSEFTSCc7CgogICAgIyBzZXQgY2hhbmdlIGF0dHJpYnV0ZSB0byBlbXB0eSBzdHJpbmcgaWYgaXQgaXMgbm90IHRydWUKICAgICRDaGFuZ2UtPnsgJFBhcmFte0F0dHJpYnV0ZX0gfSB8fD0gJyc7CgogICAgIyBkbyBub3QgdXBkYXRlIHRoZSBhdHRyaWJ1dGUgaWYgaXQgYWxyZWFkeSBoYXMgdGhpcyB2YWx1ZQogICAgIyAoIHRoaXMgd2lsbCBwcmV2ZW50IGluZmluaXRlIGV2ZW50IGxvb3BpbmchICkKICAgIHJldHVybiAxIGlmICRDaGFuZ2UtPnsgJFBhcmFte0F0dHJpYnV0ZX0gfSBlcSAkUGFyYW17QWN0aW9uVmFsdWV9OwoKICAgICMgdXBkYXRlIGNoYW5nZSBhbmQgcmV0dXJuIHVwZGF0ZSByZXN1bHQKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5DaGFuZ2VVcGRhdGUoCiAgICAgICAgQ2hhbmdlSUQgICAgICAgICAgPT4gJFBhcmFte1NlbGVjdG9yfSwKICAgICAgICAkUGFyYW17QXR0cmlidXRlfSA9PiAkUGFyYW17QWN0aW9uVmFsdWV9LAogICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246Ok9wZXJhdG9yOjpJVFNNV29ya09yZGVyOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uOjpPcGVyYXRvcjo6SVRTTVdvcmtPcmRlciAtIGNvbmRpdGlvbiBpdHNtIHdvcmtvcmRlciBvcGVyYXRvciBsaWIKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIElUU01Xb3JrT3JkZXIgb3BlcmF0b3IgZnVuY3Rpb25zIGZvciBjb25kaXRpb25zIGluIElUU01DaGFuZ2VNYW5hZ2VtZW50LgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ29uZGl0aW9uT3BlcmF0b3JJVFNNV29ya09yZGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb246Ok9wZXJhdG9yOjpJVFNNV29ya09yZGVyJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gU2V0KCkKClVwZGF0ZXMgYSB3b3Jrb3JkZXIgd2l0aCB0aGUgZ2l2ZW4gZGF0YS4KCiAgICBteSAkU3VjY2VzcyA9ICRJVFNNV29ya09yZGVyT3BlcmF0b3ItPlNldCgKICAgICAgICBTZWxlY3RvciAgICA9PiAxMjM0LAogICAgICAgIEF0dHJpYnV0ZSAgID0+ICdXb3JrT3JkZXJTdGF0ZUlEJywKICAgICAgICBBY3Rpb25WYWx1ZSA9PiAyMzQ1LAogICAgICAgIFVzZXJJRCAgICAgID0+IDEyMzQsCiAgICApOwoKPWN1dAoKc3ViIFNldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTZWxlY3RvciBBdHRyaWJ1dGUgQWN0aW9uVmFsdWUgVXNlcklEKSkgewogICAgICAgIGlmICggIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fSB8fCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgd29ya29yZGVyCiAgICBteSAkV29ya09yZGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyR2V0KAogICAgICAgIFdvcmtPcmRlcklEID0+ICRQYXJhbXtTZWxlY3Rvcn0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgZXJyb3IKICAgIHJldHVybiBpZiAhJFdvcmtPcmRlcjsKICAgIHJldHVybiBpZiByZWYgJFdvcmtPcmRlciBuZSAnSEFTSCc7CgogICAgIyBzZXQgd29ya29yZGVyIGF0dHJpYnV0ZSB0byBlbXB0eSBzdHJpbmcgaWYgaXQgaXMgbm90IHRydWUKICAgICRXb3JrT3JkZXItPnsgJFBhcmFte0F0dHJpYnV0ZX0gfSB8fD0gJyc7CgogICAgIyBkbyBub3QgdXBkYXRlIHRoZSBhdHRyaWJ1dGUgaWYgaXQgYWxyZWFkeSBoYXMgdGhpcyB2YWx1ZQogICAgIyAoIHRoaXMgd2lsbCBwcmV2ZW50IGluZmluaXRlIGV2ZW50IGxvb3BpbmchICkKICAgIHJldHVybiAxIGlmICRXb3JrT3JkZXItPnsgJFBhcmFte0F0dHJpYnV0ZX0gfSBlcSAkUGFyYW17QWN0aW9uVmFsdWV9OwoKICAgICMgaWYgdGhlIHdvcmtvcmRlciBhZ2VudCBzaG91bGQgYmUgZGVsZXRlZCBpdCBoYXMgdG8gYmUgdW5kZWZpbmVkCiAgICBpZiAoICRQYXJhbXtBdHRyaWJ1dGV9IGVxICdXb3JrT3JkZXJBZ2VudElEJyAmJiAhJFBhcmFte0FjdGlvblZhbHVlfSApIHsKICAgICAgICAkUGFyYW17QWN0aW9uVmFsdWV9ID0gdW5kZWY7CiAgICB9CgogICAgIyB1cGRhdGUgd29ya29yZGVyIGFuZCByZXR1cm4gdXBkYXRlIHJlc3VsdAogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlclVwZGF0ZSgKICAgICAgICBXb3JrT3JkZXJJRCAgICAgICA9PiAkUGFyYW17U2VsZWN0b3J9LAogICAgICAgICRQYXJhbXtBdHRyaWJ1dGV9ID0+ICRQYXJhbXtBY3Rpb25WYWx1ZX0sCiAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwp9Cgo9aXRlbSBTZXRBbGwoKQoKVXBkYXRlcyBhIHNldCBvZiB3b3Jrb3JkZXJzIHdpdGggdGhlIGdpdmVuIGRhdGEuCgogICAgbXkgJFN1Y2Nlc3MgPSAkSVRTTVdvcmtPcmRlck9wZXJhdG9yLT5TZXRBbGwoCiAgICAgICAgT2JqZWN0cyAgICAgPT4gWyB7Li4ufSwgey4uLn0sIF0sICAjIGRhdGEgb2YgSVRTTVdvcmtPcmRlcnMKICAgICAgICBBdHRyaWJ1dGUgICA9PiAnV29ya09yZGVyU3RhdGVJRCcsCiAgICAgICAgQWN0aW9uVmFsdWUgPT4gMjM0NSwKICAgICAgICBVc2VySUQgICAgICA9PiAxMjM0LAogICAgKTsKCj1jdXQKCnN1YiBTZXRBbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoT2JqZWN0cyBBdHRyaWJ1dGUgQWN0aW9uVmFsdWUgVXNlcklEKSkgewogICAgICAgIGlmICggIWV4aXN0cyAkUGFyYW17JEFyZ3VtZW50fSB8fCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBvYmplY3RzCiAgICByZXR1cm4gaWYgcmVmICRQYXJhbXtPYmplY3RzfSBuZSAnQVJSQVknOwoKICAgICMgdGhpcyB3aWxsIGJlIHNldCB0byB6ZXJvIGlmIGFueSBvZiB0aGUgU2V0LU9wZXJhdGlvbnMgZmFpbHMKICAgIG15ICRTZXRBbGxTdWNjZXNzID0gMTsKCiAgICAjIHVwZGF0ZSBlYWNoIHdvcmtvcmRlciBvYmplY3QKICAgIFdPUktPUkRFUk9CSkVDVDoKICAgIGZvciBteSAkV29ya09yZGVyT2JqZWN0ICggQHsgJFBhcmFte09iamVjdHN9IH0gKSB7CgogICAgICAgICMgY2hlY2sgd29ya29yZGVyIG9iamVjdAogICAgICAgIG5leHQgV09SS09SREVST0JKRUNUIGlmICEkV29ya09yZGVyT2JqZWN0OwogICAgICAgIG5leHQgV09SS09SREVST0JKRUNUIGlmIHJlZiAkV29ya09yZGVyT2JqZWN0IG5lICdIQVNIJzsKCiAgICAgICAgIyB1cGRhdGUgd29ya29yZGVyIG9iamVjdAogICAgICAgIG15ICRSZXN1bHQgPSAkU2VsZi0+U2V0KAogICAgICAgICAgICBTZWxlY3RvciAgICA9PiAkV29ya09yZGVyT2JqZWN0LT57V29ya09yZGVySUR9LAogICAgICAgICAgICBBdHRyaWJ1dGUgICA9PiAkUGFyYW17QXR0cmlidXRlfSwKICAgICAgICAgICAgQWN0aW9uVmFsdWUgPT4gJFBhcmFte0FjdGlvblZhbHVlfSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBpZiBhIHNldCBvcGVyYXRpb24gd2FzIG5vdCBzdWNjZXNzZnVsLAogICAgICAgICMgdGhlbiB0aGUgY29tcGxldGUgU2V0QWxsIG9wZXJhdGlvbiB3aWxsIG5vdCBiZSBzdWNjZXNzZnVsCiAgICAgICAgaWYgKCAhJFJlc3VsdCApIHsKICAgICAgICAgICAgJFNldEFsbFN1Y2Nlc3MgPSAwOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJFNldEFsbFN1Y2Nlc3M7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXI6OkV2ZW50OjpUb29sQmFyTXlXb3JrT3JkZXJzQ2FjaGVEZWxldGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoRGF0YSBFdmVudCBDb25maWcgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCB0aGUgY2FjaGUgdHlwZSBwcmVmaXgKICAgIG15ICRDYWNoZVR5cGVQcmVmaXggPSAnSVRTTUNoYW5nZU1hbmFnZW1lbnRUb29sQmFyTXlXb3JrT3JkZXJzJzsKCiAgICAjIGhhbmRsZSBhZGRpbmcgb2YgYSB3b3Jrb3JkZXIKICAgIGlmICggJFBhcmFte0V2ZW50fSBlcSAnV29ya09yZGVyQWRkUG9zdCcgKSB7CgogICAgICAgICMgZG8gbm90aGluZyBpZiB0aGUgV29ya09yZGVyQWdlbnRJRCB3YXMgbm90IHNldAogICAgICAgIHJldHVybiAxIGlmICEkUGFyYW17RGF0YX0tPntXb3JrT3JkZXJBZ2VudElEfTsKCiAgICAgICAgIyBzZXQgdGhlIGNhY2hlIHR5cGUKICAgICAgICBteSAkQ2FjaGVUeXBlID0gJENhY2hlVHlwZVByZWZpeCAuICRQYXJhbXtEYXRhfS0+e1dvcmtPcmRlckFnZW50SUR9OwoKICAgICAgICAjIGRlbGV0ZSB0aGUgY2FjaGUKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAkQ2FjaGVUeXBlLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgaGFuZGxlIHVwZGF0ZSBvZiBhIHdvcmtvcmRlcgogICAgZWxzaWYgKCAkUGFyYW17RXZlbnR9IGVxICdXb3JrT3JkZXJVcGRhdGVQb3N0JyApIHsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgaW5pdGlhbGl6ZWQKICAgICAgICAkUGFyYW17RGF0YX0tPntXb3JrT3JkZXJBZ2VudElEfSB8fD0gJyc7CiAgICAgICAgJFBhcmFte0RhdGF9LT57T2xkV29ya09yZGVyRGF0YX0tPntXb3JrT3JkZXJBZ2VudElEfSB8fD0gJyc7CgogICAgICAgICMgZG8gbm90aGluZyBpZiB0aGUgV29ya09yZGVyQWdlbnRJRCBkaWQgbm90IGNoYW5nZQogICAgICAgIHJldHVybiAxCiAgICAgICAgICAgIGlmICRQYXJhbXtEYXRhfS0+e1dvcmtPcmRlckFnZW50SUR9IGVxCiAgICAgICAgICAgICRQYXJhbXtEYXRhfS0+e09sZFdvcmtPcmRlckRhdGF9LT57V29ya09yZGVyQWdlbnRJRH07CgogICAgICAgICMgc2V0IHRoZSBjYWNoZSB0eXBlIHBvc3RmaXgKICAgICAgICBteSBAQ2FjaGVUeXBlUG9zdGZpeGVzID0gKAogICAgICAgICAgICAkUGFyYW17RGF0YX0tPntXb3JrT3JkZXJBZ2VudElEfSwKICAgICAgICAgICAgJFBhcmFte0RhdGF9LT57T2xkV29ya09yZGVyRGF0YX0tPntXb3JrT3JkZXJBZ2VudElEfSwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0aGUgY2FjaGUgZm9yIHRoZSBvbGQgYW5kIHRoZSBjdXJyZW50IHdvcmtvcmRlciBhZ2VudAogICAgICAgIENBQ0hFVFlQRVBPU1RGSVg6CiAgICAgICAgZm9yIG15ICRDYWNoZVR5cGVQb3N0Zml4IChAQ2FjaGVUeXBlUG9zdGZpeGVzKSB7CgogICAgICAgICAgICAjIGRvIG5vdGhpbmcgaWYgdGhlIFdvcmtPcmRlckFnZW50SUQgd2FzIG5vdCBzZXQKICAgICAgICAgICAgbmV4dCBDQUNIRVRZUEVQT1NURklYIGlmICEkQ2FjaGVUeXBlUG9zdGZpeDsKCiAgICAgICAgICAgICMgc2V0IHRoZSBjYWNoZSB0eXBlCiAgICAgICAgICAgIG15ICRDYWNoZVR5cGUgPSAkQ2FjaGVUeXBlUHJlZml4IC4gJENhY2hlVHlwZVBvc3RmaXg7CgogICAgICAgICAgICAjIGRlbGV0ZSB0aGUgY2FjaGUKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgICAgICBUeXBlID0+ICRDYWNoZVR5cGUsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIGhhbmRsZSBkZWxldGluZyBhIHdvcmtvcmRlcgogICAgZWxzaWYgKCAkUGFyYW17RXZlbnR9IGVxICdXb3JrT3JkZXJEZWxldGVQb3N0JyApIHsKCiAgICAgICAgIyBkbyBub3RoaW5nIGlmIHRoZSBXb3JrT3JkZXJBZ2VudElEIHdhcyBub3Qgc2V0CiAgICAgICAgcmV0dXJuIDEgaWYgISRQYXJhbXtEYXRhfS0+e09sZFdvcmtPcmRlckRhdGF9LT57V29ya09yZGVyQWdlbnRJRH07CgogICAgICAgICMgc2V0IHRoZSBjYWNoZSB0eXBlCiAgICAgICAgbXkgJENhY2hlVHlwZSA9ICRDYWNoZVR5cGVQcmVmaXggLiAkUGFyYW17RGF0YX0tPntPbGRXb3JrT3JkZXJEYXRhfS0+e1dvcmtPcmRlckFnZW50SUR9OwoKICAgICAgICAjIGRlbGV0ZSB0aGUgY2FjaGUKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAkQ2FjaGVUeXBlLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXI6OkV2ZW50OjpXb3JrT3JkZXJBY3R1YWxUaW1lc1NldDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVN0YXRlTWFjaGluZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhEYXRhIEV2ZW50IENvbmZpZyBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBoYW5kbGUgV29ya09yZGVyVXBkYXRlIGV2ZW50CiAgICBpZiAoICRQYXJhbXtFdmVudH0gZXEgJ1dvcmtPcmRlclVwZGF0ZVBvc3QnICkgewoKICAgICAgICAjIGdldCBXb3JrT3JkZXIKICAgICAgICBteSAkV29ya09yZGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyR2V0KAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkUGFyYW17RGF0YX0tPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICByZXR1cm4gaWYgISRXb3JrT3JkZXI7CgogICAgICAgICMgZ2V0IGFjdHVhbCBzdGFydCB0aW1lIGZyb20gd29ya29yZGVyCiAgICAgICAgbXkgJEFjdHVhbFN0YXJ0VGltZSA9ICRXb3JrT3JkZXItPntBY3R1YWxTdGFydFRpbWV9OwoKICAgICAgICAjIGdldCBjb25maWd1cmVkIHdvcmtvcmRlciBzdGF0ZXMgd2hlbiB0byBzZXQgYWN0dWFsIHN0YXJ0IHRpbWUKICAgICAgICBteSAkQ29uZmlndXJlZFdvcmtPcmRlclN0YXJ0U3RhdGVzCiAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNV29ya09yZGVyOjpBY3R1YWxTdGFydFRpbWVTZXQ6OlN0YXRlcycpOwoKICAgICAgICAjIGNvbnZlcnQgaW50byBoYXNoIGZvciBlYXNpZXIgbG9va3VwCiAgICAgICAgbXkgJUFjdHVhbFN0YXJ0VGltZVNldFN0YXRlcyA9IG1hcCB7ICRfID0+IDEgfSBAeyRDb25maWd1cmVkV29ya09yZGVyU3RhcnRTdGF0ZXN9OwoKICAgICAgICAjIGdldCBjdXJyZW50IHRpbWUgc3RhbXAKICAgICAgICBteSAkQ3VycmVudFRpbWVTdGFtcCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyktPkN1cnJlbnRUaW1lc3RhbXAoKTsKCiAgICAgICAgIyBjaGVjayBpZiBBY3R1YWxTdGFydFRpbWUgaXMgZW1wdHksCiAgICAgICAgIyBhbmQgV29ya09yZGVyU3RhdGUgaXMgaW4gYW4gQWN0dWFsU3RhcnRUaW1lU2V0U3RhdGUKICAgICAgICBpZiAoICEkQWN0dWFsU3RhcnRUaW1lICYmICRBY3R1YWxTdGFydFRpbWVTZXRTdGF0ZXN7ICRXb3JrT3JkZXItPntXb3JrT3JkZXJTdGF0ZX0gfSApIHsKCiAgICAgICAgICAgICMgc2V0IHRoZSBhY3R1YWwgc3RhcnQgdGltZQogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlclVwZGF0ZSgKICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEICAgICA9PiAkUGFyYW17RGF0YX0tPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWUgPT4gJEN1cnJlbnRUaW1lU3RhbXAsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIGVycm9yCiAgICAgICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3Qgc2V0IEFjdHVhbFN0YXJ0VGltZSBmb3IgV29ya09yZGVySUQgJyRQYXJhbXtEYXRhfS0+e1dvcmtPcmRlcklEfSchIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVtZW1iZXIgdGhlIGp1c3Qgc2V0IGFjdHVhbCBzdGFydCB0aW1lCiAgICAgICAgICAgICRBY3R1YWxTdGFydFRpbWUgPSAkQ3VycmVudFRpbWVTdGFtcDsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgdGhlIEFjdHVhbEVuZFRpbWUgaXMgZW1wdHkKICAgICAgICAjIGFuZCB0aGUgY3VycmVudCB3b3Jrb3JkZXIgc3RhdGUgaXMgYW4gZW5kIHN0YXRlCiAgICAgICAgaWYgKCAhJFdvcmtPcmRlci0+e0FjdHVhbEVuZFRpbWV9ICkgewoKICAgICAgICAgICAgIyBnZXQgdGhlIHBvc3NpYmxlIG5leHQgc3RhdGUgaWRzCiAgICAgICAgICAgIG15ICROZXh0U3RhdGVJRHNSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVN0YXRlTWFjaGluZScpLT5TdGF0ZVRyYW5zaXRpb25HZXQoCiAgICAgICAgICAgICAgICBTdGF0ZUlEID0+ICRXb3JrT3JkZXItPntXb3JrT3JkZXJTdGF0ZUlEfSwKICAgICAgICAgICAgICAgIENsYXNzICAgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6U3RhdGUnLAogICAgICAgICAgICApIHx8IFtdOwoKICAgICAgICAgICAgIyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBuZXh0IHN0YXRlLCB3aGljaCBpcyBhbHNvIDAsCiAgICAgICAgICAgICMgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIGlzIGFuIGVuZCBzdGF0ZQogICAgICAgICAgICBpZiAoICggc2NhbGFyIEB7JE5leHRTdGF0ZUlEc1JlZn0gPT0gMSApICYmICggISROZXh0U3RhdGVJRHNSZWYtPlswXSApICkgewoKICAgICAgICAgICAgICAgICMgaWYgbm8gYWN0dWFsIHN0YXJ0IHRpbWUgaXMgc2V0LCB1c2UgdGhlIGN1cnJlbnQgdGltZQogICAgICAgICAgICAgICAgaWYgKCAhJEFjdHVhbFN0YXJ0VGltZSApIHsKICAgICAgICAgICAgICAgICAgICAkQWN0dWFsU3RhcnRUaW1lID0gJEN1cnJlbnRUaW1lU3RhbXA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBpbmNyZWFzZSB0aGUgY3VycmVudCB0aW1lIHN0YW1wIGJ5IG9uZSBzZWNvbmQgdG8gYXZvaWQgdGhlIGNhc2UgdGhhdAogICAgICAgICAgICAgICAgIyBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lcyBhcmUgdGhlIHNhbWUKICAgICAgICAgICAgICAgIG15ICRDdXJyZW50U3lzdGVtVGltZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyktPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkQ3VycmVudFRpbWVTdGFtcCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSAkQWN0dWFsRW5kVGltZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyktPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgICAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJEN1cnJlbnRTeXN0ZW1UaW1lICsgMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgdGhlIGFjdHVhbCBlbmQgdGltZSwKICAgICAgICAgICAgICAgICMgYW5kIGlmIHRoZSBhY3R1YWwgc3RhcnQgdGltZSB3YXMgbm90IHNldCwgc2V0IGl0IGFsc28KICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyVXBkYXRlKAogICAgICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEICAgICA9PiAkUGFyYW17RGF0YX0tPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgQWN0dWFsU3RhcnRUaW1lID0+ICRBY3R1YWxTdGFydFRpbWUsCiAgICAgICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZSAgID0+ICRBY3R1YWxFbmRUaW1lLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjaGVjayBlcnJvcgogICAgICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3Qgc2V0IEFjdHVhbFN0YXJ0VGltZSBmb3IgV29ya09yZGVySUQgJyRQYXJhbXtEYXRhfS0+e1dvcmtPcmRlcklEfSchIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGVycm9yCiAgICBlbHNlIHsKCiAgICAgICAgIyBhbiB1bmtub3duIGV2ZW50CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICIkUGFyYW17RXZlbnR9IGlzIGFuIHVua25vd24gZXZlbnQgZm9yIHRoaXMgZXZlbnRoYW5kbGVyISIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXI6OkV2ZW50OjpXb3JrT3JkZXJOdW1iZXJDYWxjOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KERhdGEgRXZlbnQgQ29uZmlnIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIHJlY2FsY3VsYXRpb24gb2Ygd29ya29yZGVyIG51bWJlcnMgaXMgbmVlZGVkCiAgICByZXR1cm4gMSBpZiAkUGFyYW17RGF0YX0tPntOb051bWJlckNhbGN9OwoKICAgICMgaGFuZGxlIFdvcmtPcmRlclVwZGF0ZSBhbmQgV29ya09yZGVyRGVsZXRlUG9zdCBldmVudHMKICAgIGlmICggJFBhcmFte0V2ZW50fSA9fiBteyBcQSAoIFdvcmtPcmRlclVwZGF0ZVBvc3QgfCBXb3JrT3JkZXJEZWxldGVQb3N0ICkgXHogfXhtcyApIHsKCiAgICAgICAgIyByZWNhbGN1bGF0ZSBXb3JrT3JkZXIgbnVtYmVycwogICAgICAgICMgdGhlIENoYW5nZUlEIGlzIGluIHRoZSBPbGRXb3JrT3JkZXJEYXRhIHNvIHdlIGRvIG5vdCBuZWVkIHRvIG1ha2UgYSBXb3JrT3JkZXJHZXQoKSBoZXJlCiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+X1dvcmtPcmRlck51bWJlckNhbGMoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtEYXRhfS0+e09sZFdvcmtPcmRlckRhdGF9LT57Q2hhbmdlSUR9LAogICAgICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgZXJyb3IKICAgIGVsc2UgewoKICAgICAgICAjIGFuIHVua25vd24gZXZlbnQKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRQYXJhbXtFdmVudH0gaXMgYW4gdW5rbm93biBldmVudCBmb3IgdGhpcyBldmVudGhhbmRsZXIhIiwKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1iZWdpbiBJbnRlcm5hbDoKCj1pdGVtIF9Xb3JrT3JkZXJOdW1iZXJDYWxjKCkKClRoaXMgbWV0aG9kIGFjdHVhbGx5IHJlY2FsY3VsYXRlcyB0aGUgV29ya09yZGVyTnVtYmVycyBmb3IgdGhlIHdvcmtvcmRlcnMgb2YKdGhlIGdpdmVuIGNoYW5nZS4KSXQgcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIEM8dW5kZWY+IG90aGVyd2lzZS4KCiAgICBteSAkU3VjY2VzcyA9ICRFdmVudE9iamVjdC0+X1dvcmtPcmRlck51bWJlckNhbGMoCiAgICAgICAgQ2hhbmdlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIF9Xb3JrT3JkZXJOdW1iZXJDYWxjIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBmb3IgbmVlZGVkIHN0dWZmIC0gQ2hhbmdlSUQgYW5kIFVzZXJJRAogICAgZm9yIG15ICROZWVkZWQgKHF3KENoYW5nZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlZmluZSB0aGUgb3JkZXIgZGlyZWN0aW9uIGZvciBlYWNoIGF0dHJpYnV0ZQogICAgbXkgJU9yZGVyRGlyZWN0aW9uID0gKAogICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJ1VwJywKICAgICAgICBQbGFubmVkRW5kVGltZSAgID0+ICdEb3duJywKICAgICAgICBXb3JrT3JkZXJJRCAgICAgID0+ICdVcCcsCiAgICApOwoKICAgICMgZGVmaW5lIHRoZSBPcmRlckJ5IGFycmF5CiAgICBteSBAT3JkZXJCeSA9ICgKICAgICAgICAnUGxhbm5lZFN0YXJ0VGltZScsCiAgICAgICAgJ1BsYW5uZWRFbmRUaW1lJywKICAgICAgICAnV29ya09yZGVySUQnLAogICAgKTsKCiAgICAjIGRlZmluZSB0aGUgT3JkZXJCeURpcmVjdGlvbiBhcnJheQogICAgbXkgQE9yZGVyQnlEaXJlY3Rpb24gPSBtYXAgeyAkT3JkZXJEaXJlY3Rpb257JF99IH0gQE9yZGVyQnk7CgogICAgIyB1c2UgV29ya09yZGVyU2VhcmNoOiBTZWFyY2ggZm9yIGdpdmVuIElEcywgb3JkZXJlZCBieToKICAgICMgUGxhbm5lZFN0YXJ0VGltZSwgUGxhbm5lZEVuZFRpbWUsIFdvck9yZGVySUQKICAgIG15ICRTb3J0ZWRXb3JrT3JkZXJJRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpLT5Xb3JrT3JkZXJTZWFyY2goCiAgICAgICAgQ2hhbmdlSURzICAgICAgICA9PiBbICRQYXJhbXtDaGFuZ2VJRH0gXSwKICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFxAT3JkZXJCeSwKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFxAT3JkZXJCeURpcmVjdGlvbiwKICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKSB8fCBbXTsKCiAgICAjIGNvdW50ZXIgLSB1c2VkIGFzIFdvcmtPcmRlck51bWJlcgogICAgbXkgJENvdW50ZXIgPSAwOwoKICAgICMgdG8gc3RvcmUgdGhlIFdvcmtPcmRlcklEcyBhbmQgdGhlaXIgbmV3IFdvcmtPcmRlck51bWJlcnMKICAgIG15ICVOZXdXb3JrT3JkZXJOdW1iZXI7CgogICAgIyBzZXQgbmV3IFdvcmtPcmRlck51bWJlcgogICAgV09SS09SREVSSUQ6CiAgICBmb3IgbXkgJFdvcmtPcmRlcklEICggQHskU29ydGVkV29ya09yZGVySURzfSApIHsKCiAgICAgICAgIyBpbmNyZW1lbnQgQ291bnRlciB0byBnZXQgbmV3IFdvcmtPcmRlck51bWJlcgogICAgICAgICRDb3VudGVyKys7CgogICAgICAgICMgZ2V0IFdvcmtPcmRlcgogICAgICAgIG15ICRXb3JrT3JkZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpLT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyB1cGRhdGUgb25seSB3aGVuIE51bWJlciBjaGFuZ2VkIC0gdG8gYXZvaWQgaW5maW5pdCBsb29wcwogICAgICAgIG5leHQgV09SS09SREVSSUQgaWYgJENvdW50ZXIgPT0gJFdvcmtPcmRlci0+e1dvcmtPcmRlck51bWJlcn07CgogICAgICAgICMgc3RvcmUgdGhlIG5ldyBXb3JrT3JkZXJOdW1iZXIgZm9yIHRoaXMgV29ya09yZGVySUQKICAgICAgICAkTmV3V29ya09yZGVyTnVtYmVyeyRXb3JrT3JkZXJJRH0gPSAkQ291bnRlcjsKICAgIH0KCiAgICAjIHVwZGF0ZSB0aGUgd29ya29yZGVycyB0aGF0IG5lZWQgYSBuZXcgV29ya09yZGVyTnVtYmVyCiAgICBmb3IgbXkgJFdvcmtPcmRlcklEICggc29ydCBrZXlzICVOZXdXb3JrT3JkZXJOdW1iZXIgKSB7CgogICAgICAgICMgdXBkYXRlIGVhY2ggd29ya29yZGVyLCBwcmV2ZW50IHJlY2FsY3VsYXRpb24gb2YgdGhlIFdvcmtPcmRlck51bWJlciBhZ2FpbgogICAgICAgIG15ICRDb3VsZFVwZGF0ZVdvcmtPcmRlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlclVwZGF0ZSgKICAgICAgICAgICAgV29ya09yZGVySUQgICAgID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgV29ya09yZGVyTnVtYmVyID0+ICROZXdXb3JrT3JkZXJOdW1iZXJ7JFdvcmtPcmRlcklEfSwKICAgICAgICAgICAgTm9OdW1iZXJDYWxjICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwoKPWVuZCBJbnRlcm5hbDoK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXI6OlBlcm1pc3Npb246OkNBQkNoZWNrOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcjo6UGVybWlzc2lvbjo6Q0FCQ2hlY2sgLSBDQUIgYmFzZWQgcGVybWlzc2lvbiBjaGVjawoKPWhlYWQxIFNZTk9QU0lTCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRDaGVja09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyOjpQZXJtaXNzaW9uOjpDQUJDaGVjaycpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFJ1bigpCgpUaGlzIG1ldGhvZCBkb2VzIHRoZSBjaGVjay4gQWNjZXNzIGlzIGFsbG93ZWQgd2hlbiB0eXBlIGlzICdybycgYW5kIHRoZSBhZ2VudCBpcyBhIG1lbWJlcgpvZiB0aGUgQ0FCIG9mIHRoZSBjaGFuZ2Ugb2YgdGhlIHdvcmtvcmRlci4KCiAgICBteSAkSGFzQWNjZXNzID0gJENoZWNrT2JqZWN0LT5SdW4oCiAgICAgICAgVXNlcklEICAgICAgPT4gMTIzLAogICAgICAgIFR5cGUgICAgICAgID0+ICdydycsICAgICAjICdybycgb3IgJ3J3JwogICAgICAgIFdvcmtPcmRlcklEID0+IDQ0NDQsCiAgICApOwoKPWN1dAoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgVHlwZSBXb3JrT3JkZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgb25seSAncm8nIGFjY2VzcyBtaWdodCBiZSBncmFudGVkIGJ5IHRoaXMgbW9kdWxlCiAgICByZXR1cm4gaWYgJFBhcmFte1R5cGV9IG5lICdybyc7CgogICAgIyB0aGVyZSBhbHJlYWR5IGlzIGEgd29ya29yZGVyCiAgICBteSAkV29ya09yZGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyR2V0KAogICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIFdvcmtPcmRlcklEID0+ICRQYXJhbXtXb3JrT3JkZXJJRH0sCiAgICApOwoKICAgICMgZGVueSBhY2Nlc3MsIHdoZW4gbm8gd29ya29yZGVyIHdhcyBmb3VuZAogICAgcmV0dXJuIGlmICEkV29ya09yZGVyIHx8ICEleyRXb3JrT3JkZXJ9IHx8ICEkV29ya09yZGVyLT57Q2hhbmdlSUR9OwoKICAgICMgZ2V0IHRoZSBDQUIgb2YgdGhlIGNoYW5nZQogICAgbXkgJENBQiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZUNBQkdldCgKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBDaGFuZ2VJRCA9PiAkV29ya09yZGVyLT57Q2hhbmdlSUR9LAogICAgKTsKCiAgICAjIGxvb2sgZm9yIGEgQ0FCIG1lbWJlciB3aXRoIHRoZSByZWxldmFudCBVc2VySUQKICAgIG15ICgkRm91bmRDQUJNZW1iZXIpID0gZ3JlcCB7ICRfID09ICRQYXJhbXtVc2VySUR9IH0gQHsgJENBQi0+e0NBQkFnZW50c30gfTsKCiAgICAjIGFsbG93IGFjY2VzcyB0aGUgdGhlIGFnZW50IGlzIGEgQ0FCIG1lbWJlcgogICAgcmV0dXJuIDEgaWYgJEZvdW5kQ0FCTWVtYmVyOwoKICAgICMgZGVueSBhY2Nlc3Mgb3RoZXJ3aXNlCiAgICByZXR1cm47Cn0KCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXI6OlBlcm1pc3Npb246OkNoYW5nZUJ1aWxkZXJDaGVjazsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcjo6UGVybWlzc2lvbjo6Q2hhbmdlQnVpbGRlckNoZWNrIC0gY2hhbmdlIGJ1aWxkZXIgYmFzZWQgcGVybWlzc2lvbiBjaGVjawoKPWhlYWQxIFNZTk9QU0lTCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRDaGVja09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyOjpQZXJtaXNzaW9uOjpDaGFuZ2VCdWlsZGVyQ2hlY2snKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBSdW4oKQoKVGhpcyBtZXRob2QgZG9lcyB0aGUgY2hlY2suICdybycgYW5kICdydycgYWNjZXNzIGlzIGdyYW50ZWQKd2hlbiB0aGUgYWdlbnQgaGFzIHRoZSBwcml2IGluIHRoZSAnaXRzbS1jaGFuZ2UtYnVpbGRlcicgZ3JvdXAgYW5kCndoZW4gdGhlIGFnZW50IGlzIHRoZSBjaGFuZ2VidWlsZGVyIG9mIHRoZSBjaGFuZ2UuCgogICAgbXkgJEhhc0FjY2VzcyA9ICRDaGVja09iamVjdC0+UnVuKAogICAgICAgIFVzZXJJRCAgICAgID0+IDEyMywKICAgICAgICBUeXBlICAgICAgICA9PiAncncnLCAgICAgIyAncm8nIG9yICdydycKICAgICAgICBXb3JrT3JkZXJJRCA9PiA0NDQ0LAogICAgKTsKCj1jdXQKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIFR5cGUgV29ya09yZGVySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRoZSBjaGVjayBpcyBiYXNlZCB1cG9uIHRoZSBjaGFuZ2UgYnVpbGRlcgogICAgbXkgJEdyb3VwSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMb29rdXAoCiAgICAgICAgR3JvdXAgPT4gJ2l0c20tY2hhbmdlLWJ1aWxkZXInLAogICAgKTsKCiAgICAjIGRvIG5vdCBncmFudCBhY2Nlc3MsIHdoZW4gdGhlIGdyb3VwIGlzIG5vdCBmb3VuZAogICAgcmV0dXJuIGlmICEkR3JvdXBJRDsKCiAgICAjIGdldCB1c2VyIGdyb3Vwcywgd2hlcmUgdGhlIHVzZXIgaGFzIHRoZSBhcHByb3ByaWF0ZSBwcml2aWxlZ2UKICAgIG15ICVHcm91cHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBUeXBlICAgPT4gJFBhcmFte1R5cGV9LAogICAgICAgIFJlc3VsdCA9PiAnSEFTSCcsCiAgICApOwoKICAgICMgZG8gbm90IGdyYW50IGFjY2VzcyBpZiB0aGUgYWdlbnQgZG9lc24ndCBoYXZlIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGluIHRoZSBhcHByb3ByaWF0ZSBncm91cAogICAgcmV0dXJuIGlmICEkR3JvdXBzeyRHcm91cElEfTsKCiAgICAjIHRoZXJlIGFscmVhZHkgaXMgYSB3b3Jrb3JkZXIuIGUuZy4gQWdlbnRJVFNNV29ya09yZGVyRWRpdAogICAgbXkgJFdvcmtPcmRlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlckdldCgKICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkUGFyYW17V29ya09yZGVySUR9LAogICAgKTsKCiAgICAjIGRvIG5vdCBncmFudCBhY2Nlc3MsIHdoZW4gbm8gd29ya29yZGVyIHdhcyBmb3VuZAogICAgcmV0dXJuIGlmICEkV29ya09yZGVyIHx8ICEleyRXb3JrT3JkZXJ9IHx8ICEkV29ya09yZGVyLT57Q2hhbmdlSUR9OwoKICAgICMgZm9yIGNoZWNraW5nIHRoZSBjaGFuZ2UgYnVpbGRlciwgd2UgbmVlZCBpbmZvcm1hdGlvbiBvbiB0aGUgY2hhbmdlCiAgICBteSAkQ2hhbmdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlR2V0KAogICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIENoYW5nZUlEID0+ICRXb3JrT3JkZXItPntDaGFuZ2VJRH0sCiAgICApOwoKICAgICMgZG8gbm90IGdyYW50IGFjY2Vzcywgd2hlbiBubyBjaGFuZ2Ugd2FzIGZvdW5kCiAgICByZXR1cm4gaWYgISRDaGFuZ2UgfHwgISV7JENoYW5nZX0gfHwgISRDaGFuZ2UtPntDaGFuZ2VCdWlsZGVySUR9OwoKICAgICMgYWxsb3cgYWNjZXNzLCB3aGVuIHRoZSBhZ2VudCBpcyB0aGUgY2hhbmdlIGJ1aWxkZXIgb2YgdGhlIGNoYW5nZQogICAgcmV0dXJuIDEgaWYgJENoYW5nZS0+e0NoYW5nZUJ1aWxkZXJJRH0gPT0gJFBhcmFte1VzZXJJRH07CgogICAgIyBkbyBub3QgZ3JhbnQgYWNjZXNzIG90aGVyd2lzZQogICAgcmV0dXJuOwp9Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXI6OlBlcm1pc3Npb246OkNoYW5nZU1hbmFnZXJDaGVjazsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXI6OlBlcm1pc3Npb246OkNoYW5nZU1hbmFnZXJDaGVjayAtIGNoYW5nZSBtYW5hZ2VyIGJhc2VkIHBlcm1pc3Npb24gY2hlY2sKCj1oZWFkMSBTWU5PUFNJUwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ2hlY2tPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcjo6UGVybWlzc2lvbjo6Q2hhbmdlTWFuYWdlckNoZWNrJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gUnVuKCkKClRoaXMgbWV0aG9kIGRvZXMgdGhlIGNoZWNrLiAncm8nIGFuZCAncncnIGFjY2VzcyBpcyBncmFudGVkCndoZW4gdGhlIGFnZW50IGhhcyB0aGUgcHJpdiBpbiB0aGUgJ2l0c20tY2hhbmdlLW1hbmFnZXInIGdyb3VwLgoKICAgIG15ICRIYXNBY2Nlc3MgPSAkQ2hlY2tPYmplY3QtPlJ1bigKICAgICAgICBVc2VySUQgICAgICA9PiAxMjMsCiAgICAgICAgVHlwZSAgICAgICAgPT4gJ3J3JywgICAgICMgJ3JvJyBvciAncncnCiAgICAgICAgV29ya09yZGVySUQgPT4gNDQ0NCwKICAgICk7Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBUeXBlIFdvcmtPcmRlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyB0aGUgY2hlY2sgaXMgYmFzZWQgdXBvbiB0aGUgY2hhbmdlIG1hbmFnZXIKICAgIG15ICRHcm91cElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTG9va3VwKAogICAgICAgIEdyb3VwID0+ICdpdHNtLWNoYW5nZS1tYW5hZ2VyJywKICAgICk7CgogICAgIyBkZW55IGFjY2Vzcywgd2hlbiB0aGUgZ3JvdXAgaXMgbm90IGZvdW5kCiAgICByZXR1cm4gaWYgISRHcm91cElEOwoKICAgICMgZ2V0IHVzZXIgZ3JvdXBzLCB3aGVyZSB0aGUgdXNlciBoYXMgdGhlIGFwcHJvcHJpYXRlIHByaXZpbGVnZQogICAgbXkgJUdyb3VwcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIFR5cGUgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICk7CgogICAgIyBhbGxvdyBybyBhbmQgcncgYWNjZXNzIGlmIHRoZSBhZ2VudCBpcyBhIGNoYW5nZSBtYW5hZ2VyCiAgICByZXR1cm4gMSBpZiAkR3JvdXBzeyRHcm91cElEfTsKCiAgICAjIG5vIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGFnZW50IGlzIHRoZSBhY3R1YWwgbWFuYWdlciBvZiB0aGUgY2hhbmdlIG9mIHRoZSB3b3Jrb3JkZXIKCiAgICAjIGRlbnkgYWNjZXNzIG90aGVyd2lzZQogICAgcmV0dXJuOwp9Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXI6OlBlcm1pc3Npb246OkVtcHR5QWdlbnRDaGVjazsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyOjpQZXJtaXNzaW9uOjpFbXB0eUFnZW50Q2hlY2sgLSBncmFudCBwZXJtaXNzaW9uIHdoZW4gYWdlbnQgaXMgZW1wdHkKCj1oZWFkMSBTWU5PUFNJUwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ2hlY2tPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcjo6UGVybWlzc2lvbjo6RW1wdHlBZ2VudENoZWNrJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gUnVuKCkKClRoaXMgbWV0aG9kIGRvZXMgdGhlIGNoZWNrLiAncm8nIGFjY2VzcyBpcyBncmFudGVkIHdoZW4gdGhlIGFnZW50IGlzIGEgJ3JvJyBtZW1iZXIKb2YgdGhlICdpdHNtLWNoYW5nZScgZ3JvdXAuICdydycgYWNjZXNzIGlzIGdyYW50ZWQgd2hlbiB0aGUgd29ya29yZGVyIGhhcyBubyBhZ2VudC4KCiAgICBteSAkSGFzQWNjZXNzID0gJENoZWNrT2JqZWN0LT5SdW4oCiAgICAgICAgVXNlcklEICAgICAgPT4gMTIzLAogICAgICAgIFR5cGUgICAgICAgID0+ICdydycsICAgICAjICdybycgb3IgJ3J3JwogICAgICAgIFdvcmtPcmRlcklEID0+IDQ0NDQsCiAgICApOwoKPWN1dAoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgVHlwZSBXb3JrT3JkZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgdGhlIGNoZWNrIGlzIGJhc2VkIHVwb24gdGhlIHdvcmtvcmRlciBhZ2VudAogICAgbXkgJEdyb3VwSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMb29rdXAoCiAgICAgICAgR3JvdXAgPT4gJ2l0c20tY2hhbmdlJywKICAgICk7CgogICAgIyBkZW55IGFjY2Vzcywgd2hlbiB0aGUgZ3JvdXAgaXMgbm90IGZvdW5kCiAgICByZXR1cm4gaWYgISRHcm91cElEOwoKICAgICMgZ2V0IHVzZXIgZ3JvdXBzLCB3aGVyZSB0aGUgdXNlciBoYXMgdGhlIGFwcHJvcHJpYXRlIHByaXZpbGVnZQogICAgbXkgJUdyb3VwcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIFR5cGUgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICk7CgogICAgIyBkZW55IGFjY2VzcyBpZiB0aGUgYWdlbnQgZG9lc24ndCBoYXZlIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGluIHRoZSBhcHByb3ByaWF0ZSBncm91cAogICAgcmV0dXJuIGlmICEkR3JvdXBzeyRHcm91cElEfTsKCiAgICAjIHdvcmtvcmRlciBhZ2VudHMgYXJlIGdyYW50ZWQgcm8gYWNjZXNzCiAgICByZXR1cm4gMSBpZiAkUGFyYW17VHlwZX0gZXEgJ3JvJzsKCiAgICAjIHRoZXJlIGFscmVhZHkgaXMgYSB3b3Jrb3JkZXIuIGUuZy4gQWdlbnRJVFNNV29ya09yZGVyRWRpdAogICAgbXkgJFdvcmtPcmRlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlckdldCgKICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkUGFyYW17V29ya09yZGVySUR9LAogICAgKTsKCiAgICAjIGRlbnkgYWNjZXNzLCB3aGVuIG5vIHdvcmtvcmRlciB3YXMgZm91bmQKICAgIHJldHVybiBpZiAhJFdvcmtPcmRlciB8fCAhJXskV29ya09yZGVyfTsKCiAgICAjIGFsbG93IGFjY2Vzcywgd2hlbiB0aGVyZSBpcyBubyB3b3Jrb3JkZXIgYWdlbnQKICAgIHJldHVybiAxIGlmICEkV29ya09yZGVyLT57V29ya09yZGVyQWdlbnRJRH07CgogICAgIyBkZW55IGFjY2Vzcywgd2hlbiB3b3Jrb3JkZXIgYWdlbnQgaXMgZW1wdHkKICAgIHJldHVybiBpZiAhJFdvcmtPcmRlci0+e1dvcmtPcmRlckFnZW50SUR9OwoKICAgICMgZGVueSBydyBhY2Nlc3Mgb3RoZXJ3aXNlCiAgICByZXR1cm47Cn0KCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXI6OlBlcm1pc3Npb246Okxpc3RBZ2VudENoZWNrOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcjo6UGVybWlzc2lvbjo6TGlzdEFnZW50Q2hlY2sgLSBncmFudCBwZXJtaXNzaW9uIHdoZW4gdGhlIGFnZW50IGlzIGluIGEgbGlzdAoKPWhlYWQxIFNZTk9QU0lTCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRDaGVja09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyOjpQZXJtaXNzaW9uOjpMaXN0QWdlbnRDaGVjaycpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFJ1bigpCgpUaGlzIG1ldGhvZCBkb2VzIHRoZSBjaGVjay4gJ3JvJyBhY2Nlc3MgaXMgZ3JhbnRlZCB3aGVuIHRoZSBhZ2VudCBpcyBhICdybycgbWVtYmVyCm9mIHRoZSAnaXRzbS1jaGFuZ2UnIGdyb3VwLiAncncnIGFjY2VzcyBpcyBncmFudGVkIHdoZW4gdGhlIGN1cnJlbnQgd29ya29yZGVyIGFnZW50CmlzIGNvbnRhaW5lZCBpbiB0aGUgY29uZmlndXJlZCBsaXN0LgoKICAgIG15ICRIYXNBY2Nlc3MgPSAkQ2hlY2tPYmplY3QtPlJ1bigKICAgICAgICBVc2VySUQgICAgICA9PiAxMjMsCiAgICAgICAgVHlwZSAgICAgICAgPT4gJ3J3JywgICAgICMgJ3JvJyBvciAncncnCiAgICAgICAgV29ya09yZGVySUQgPT4gNDQ0NCwKICAgICk7Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBUeXBlIFdvcmtPcmRlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRoZSBjaGVjayBpcyBiYXNlZCB1cG9uIHRoZSB3b3Jrb3JkZXIgYWdlbnQKICAgIG15ICRHcm91cElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTG9va3VwKAogICAgICAgIEdyb3VwID0+ICdpdHNtLWNoYW5nZScsCiAgICApOwoKICAgICMgZGVueSBhY2Nlc3MsIHdoZW4gdGhlIGdyb3VwIGlzIG5vdCBmb3VuZAogICAgcmV0dXJuIGlmICEkR3JvdXBJRDsKCiAgICAjIGdldCB1c2VyIGdyb3Vwcywgd2hlcmUgdGhlIHVzZXIgaGFzIHRoZSBhcHByb3ByaWF0ZSBwcml2aWxlZ2UKICAgIG15ICVHcm91cHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBUeXBlICAgPT4gJFBhcmFte1R5cGV9LAogICAgICAgIFJlc3VsdCA9PiAnSEFTSCcsCiAgICApOwoKICAgICMgZGVueSBhY2Nlc3MgaWYgdGhlIGFnZW50IGRvZXNuJ3QgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgdHlwZSBpbiB0aGUgYXBwcm9wcmlhdGUgZ3JvdXAKICAgIHJldHVybiBpZiAhJEdyb3Vwc3skR3JvdXBJRH07CgogICAgIyB3b3Jrb3JkZXIgYWdlbnRzIGFyZSBncmFudGVkIHJvIGFjY2VzcwogICAgcmV0dXJuIDEgaWYgJFBhcmFte1R5cGV9IGVxICdybyc7CgogICAgIyB0aGVyZSBhbHJlYWR5IGlzIGEgd29ya29yZGVyLiBlLmcuIEFnZW50SVRTTVdvcmtPcmRlckVkaXQKICAgIG15ICRXb3JrT3JkZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpLT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgV29ya09yZGVySUQgPT4gJFBhcmFte1dvcmtPcmRlcklEfSwKICAgICk7CgogICAgIyBkZW55IGFjY2Vzcywgd2hlbiBubyB3b3Jrb3JkZXIgd2FzIGZvdW5kCiAgICByZXR1cm4gaWYgISRXb3JrT3JkZXIgfHwgISV7JFdvcmtPcmRlcn07CgogICAgIyBkZW55IGFjY2Vzcywgd2hlbiB3b3Jrb3JkZXIgYWdlbnQgaXMgZW1wdHkKICAgIHJldHVybiBpZiAhJFdvcmtPcmRlci0+e1dvcmtPcmRlckFnZW50SUR9OwoKICAgIG15ICRXb3JrT3JkZXJBZ2VudCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgVXNlcklEID0+ICRXb3JrT3JkZXItPntXb3JrT3JkZXJBZ2VudElEfSwKICAgICk7CgogICAgIyBkZW55IGFjY2Vzcywgd2hlbiB0aGUgbmFtZSBjYW4gbm90IGJlIGxvb2tlZCB1cAogICAgcmV0dXJuIGlmICEkV29ya09yZGVyQWdlbnQ7CgogICAgIyB0YWtlIGxpc3Qgb2Ygc3BlY2lhbCBhZ2VudHMgZnJvbSB0aGUgc3lzY29uZmlnCiAgICBteSAkQWdlbnRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNV29ya09yZGVyOjpUYWtlUGVybWlzc2lvbjo6TGlzdCcpOwoKICAgICMgYWxsb3cgYWNjZXNzLCB3aGVuIHRoZSB3b3Jrb3JkZXIgYWdlbnQgaXMgaW4gdGhlIGxpc3QKICAgIHJldHVybiAxIGlmICRBZ2VudExpc3QtPnskV29ya09yZGVyQWdlbnR9OwoKICAgICMgZGVueSBydyBhY2Nlc3Mgb3RoZXJ3aXNlCiAgICByZXR1cm47Cn0KCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXI6OlBlcm1pc3Npb246OldvcmtPcmRlckFnZW50Q2hlY2s7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcjo6UGVybWlzc2lvbjo6V29ya09yZGVyQWdlbnRDaGVjayAtIHdvcmtvcmRlciBhZ2VudCBiYXNlZCBwZXJtaXNzaW9uIGNoZWNrCgo9aGVhZDEgU1lOT1BTSVMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJENoZWNrT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXI6OlBlcm1pc3Npb246OldvcmtPcmRlckFnZW50Q2hlY2snKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBSdW4oKQoKVGhpcyBtZXRob2QgZG9lcyB0aGUgY2hlY2suICdybycgYWNjZXNzIGlzIGdyYW50ZWQgd2hlbiB0aGUgYWdlbnQgaXMgYSAncm8nIG1lbWJlcgpvZiB0aGUgJ2l0c20tY2hhbmdlJyBncm91cC4gJ3J3JyBhY2Nlc3MgaXMgZ3JhbnRlZCB3aGVuIHRoZSBhZ2VudCBpcyB0aGUgd29ya29yZGVyIGFnZW50Cm9mIHRoZSB3b3Jrb3JkZXIuCgogICAgbXkgJEhhc0FjY2VzcyA9ICRDaGVja09iamVjdC0+UnVuKAogICAgICAgIFVzZXJJRCAgICAgID0+IDEyMywKICAgICAgICBUeXBlICAgICAgICA9PiAncncnLCAgICAgIyAncm8nIG9yICdydycKICAgICAgICBXb3JrT3JkZXJJRCA9PiA0NDQ0LCAgICAgIyBvcHRpb25hbCBmb3IgV29ya09yZGVyQWRkCiAgICApOwoKPWN1dAoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgVHlwZSBXb3JrT3JkZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgdGhlIGNoZWNrIGlzIGJhc2VkIHVwb24gdGhlIHdvcmtvcmRlciBhZ2VudAogICAgbXkgJEdyb3VwSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMb29rdXAoCiAgICAgICAgR3JvdXAgPT4gJ2l0c20tY2hhbmdlJywKICAgICk7CgogICAgIyBkZW55IGFjY2Vzcywgd2hlbiB0aGUgZ3JvdXAgaXMgbm90IGZvdW5kCiAgICByZXR1cm4gaWYgISRHcm91cElEOwoKICAgICMgZ2V0IHVzZXIgZ3JvdXBzLCB3aGVyZSB0aGUgdXNlciBoYXMgdGhlIGFwcHJvcHJpYXRlIHByaXZpbGVnZQogICAgbXkgJUdyb3VwcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIFR5cGUgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICk7CgogICAgIyBkZW55IGFjY2VzcyBpZiB0aGUgYWdlbnQgZG9lc24ndCBoYXZlIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGluIHRoZSBhcHByb3ByaWF0ZSBncm91cAogICAgcmV0dXJuIGlmICEkR3JvdXBzeyRHcm91cElEfTsKCiAgICAjIHdvcmtvcmRlciBhZ2VudHMgYXJlIGdyYW50ZWQgcm8gYWNjZXNzCiAgICByZXR1cm4gMSBpZiAkUGFyYW17VHlwZX0gZXEgJ3JvJzsKCiAgICAjIHRoZXJlIGFscmVhZHkgaXMgYSB3b3Jrb3JkZXIuIGUuZy4gQWdlbnRJVFNNV29ya09yZGVyRWRpdAogICAgbXkgJFdvcmtPcmRlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlckdldCgKICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkUGFyYW17V29ya09yZGVySUR9LAogICAgKTsKCiAgICAjIGRlbnkgYWNjZXNzLCB3aGVuIG5vIHdvcmtvcmRlciB3YXMgZm91bmQKICAgIHJldHVybiBpZiAhJFdvcmtPcmRlciB8fCAhJXskV29ya09yZGVyfSB8fCAhJFdvcmtPcmRlci0+e1dvcmtPcmRlckFnZW50SUR9OwoKICAgICMgYWxsb3cgYWNjZXNzLCB3aGVuIHRoZSBhZ2VudCBpcyB0aGUgd29ya29yZGVyIGFnZW50IG9mIHRoZSB3b3Jrb3JkZXIKICAgIHJldHVybiAxIGlmICRXb3JrT3JkZXItPntXb3JrT3JkZXJBZ2VudElEfSA9PSAkUGFyYW17VXNlcklEfTsKCiAgICAjIGRlbnkgcncgYWNjZXNzIG90aGVyd2lzZQogICAgcmV0dXJuOwp9Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMgR2VuZXJhdGVzIGNoYW5nZSBudW1iZXJzIGxpa2UgSUQjIyMjIyAoZS4gZy4gMTAwMDEyMykKCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Ok51bWJlcjo6QXV0b0luY3JlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBDaGFuZ2VOdW1iZXJDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgY29uZmlnIG9wdGlvbnMKICAgIG15ICRDb3VudGVyTG9nID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ2hhbmdlOjpDb3VudGVyTG9nJyk7CiAgICBteSAkU3lzdGVtSUQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU3lzdGVtSUQnKTsKICAgIG15ICRNaW5TaXplID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ2hhbmdlOjpOdW1iZXJHZW5lcmF0b3I6OkF1dG9JbmNyZW1lbnQ6Ok1pbkNvdW50ZXJTaXplJykKICAgICAgICB8fCA1OwoKICAgICMgZGVmaW5lIG51bWJlciBvZiBtYXhpbXVtIGxvb3BzIGlmIGNyZWF0ZWQgY2hhbmdlIG51bWJlciBleGlzdHMKICAgIG15ICRNYXhSZXRyeU51bWJlciAgICAgICAgPSAxNjAwMDsKICAgIG15ICRMb29wUHJvdGVjdGlvbkNvdW50ZXIgPSAwOwoKICAgICMgdHJ5IHRvIGNyZWF0ZSBhIHVuaXF1ZSBjaGFuZ2UgbnVtYmVyIGZvciB1cCB0byAkTWF4UmV0cnlOdW1iZXIgdGltZXMKICAgIHdoaWxlICggJExvb3BQcm90ZWN0aW9uQ291bnRlciA8PSAkTWF4UmV0cnlOdW1iZXIgKSB7CgogICAgICAgICMgcmVhZCBjb3VudAogICAgICAgIG15ICRDb3VudCAgICAgID0gMDsKICAgICAgICBteSAkTGFzdE1vZGlmeSA9ICcnOwoKICAgICAgICAjIHRyeSB0byByZWFkIGV4aXN0aW5nIGNvdW50ZXIgZnJvbSBmaWxlCiAgICAgICAgaWYgKCAtZiAkQ291bnRlckxvZyApIHsKCiAgICAgICAgICAgIG15ICRDb250ZW50U0NBTEFSUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+RmlsZVJlYWQoCiAgICAgICAgICAgICAgICBMb2NhdGlvbiA9PiAkQ291bnRlckxvZywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggJENvbnRlbnRTQ0FMQVJSZWYgJiYgJHskQ29udGVudFNDQUxBUlJlZn0gKSB7CgogICAgICAgICAgICAgICAgKCAkQ291bnQsICRMYXN0TW9kaWZ5ICkgPSBzcGxpdCggLzsvLCAkeyRDb250ZW50U0NBTEFSUmVmfSApOwoKICAgICAgICAgICAgICAgICMganVzdCBkZWJ1ZwogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0RlYnVnfSA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJSZWFkIGNvdW50ZXIgZnJvbSAkQ291bnRlckxvZzogJENvdW50IiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNvdW50IGF1dG8gaW5jcmVtZW50CiAgICAgICAgJENvdW50Kys7CgogICAgICAgIG15ICRDb250ZW50ID0gJENvdW50OwoKICAgICAgICAjIHdyaXRlIG5ldyBjb3VudAogICAgICAgIG15ICRXcml0ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPkZpbGVXcml0ZSgKICAgICAgICAgICAgTG9jYXRpb24gPT4gJENvdW50ZXJMb2csCiAgICAgICAgICAgIENvbnRlbnQgID0+IFwkQ29udGVudCwKICAgICAgICApOwoKICAgICAgICAjIGxvZyBkZWJ1ZyBtZXNzYWdlCiAgICAgICAgaWYgKCAkV3JpdGUgJiYgJFNlbGYtPntEZWJ1Z30gKSB7CgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiV3JpdGUgY291bnRlcjogJENvdW50IiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcGFkIGNoYW5nZSBudW1iZXIgd2l0aCBsZWFkaW5nICcwJyB0byBsZW5ndGggJE1pblNpemUgKGNvbmZpZyBvcHRpb24pCiAgICAgICAgJENvdW50ID0gc3ByaW50ZiAiJS4qdSIsICRNaW5TaXplLCAkQ291bnQ7CgogICAgICAgICMgY3JlYXRlIG5ldyBjaGFuZ2UgbnVtYmVyCiAgICAgICAgbXkgJENoYW5nZU51bWJlciA9ICRTeXN0ZW1JRCAuICRDb3VudDsKCiAgICAgICAgIyBsb29rdXAgaWYgY2hhbmdlIG51bWJlciBleGlzdHMgYWxyZWFkeQogICAgICAgIG15ICRDaGFuZ2VJRCA9ICRTZWxmLT5DaGFuZ2VMb29rdXAoCiAgICAgICAgICAgIENoYW5nZU51bWJlciA9PiAkQ2hhbmdlTnVtYmVyLAogICAgICAgICk7CgogICAgICAgICMgbm93IHdlIGhhdmUgYSBuZXcgdW51c2VkIGNoYW5nZSBudW1iZXIgYW5kIHJldHVybiBpdAogICAgICAgIHJldHVybiAkQ2hhbmdlTnVtYmVyIGlmICEkQ2hhbmdlSUQ7CgogICAgICAgICMgc3RhcnQgbG9vcCBwcm90ZWN0aW9uIG1vZGUKICAgICAgICAkTG9vcFByb3RlY3Rpb25Db3VudGVyKys7CgogICAgICAgICMgY3JlYXRlIG5ldyBjaGFuZ2UgbnVtYmVyIGFnYWluCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2hhbmdlTnVtYmVyICgkQ2hhbmdlTnVtYmVyKSBleGlzdHMhIENyZWF0aW5nIGEgbmV3IG9uZS4iLAogICAgICAgICk7CiAgICB9CgogICAgIyBsb29wIHdhcyBydW5uaW5nIHRvbyBsb25nCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgIE1lc3NhZ2UgID0+ICJMb29wUHJvdGVjdGlvbkNvdW50ZXIgaXMgbm93ICRMb29wUHJvdGVjdGlvbkNvdW50ZXIhIgogICAgICAgICAgICAuICIgU3RvcHBlZCBDaGFuZ2VOdW1iZXJDcmVhdGUoKSEiLAogICAgKTsKCiAgICByZXR1cm47Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMgR2VuZXJhdGVzIGNoYW5nZSBudW1iZXJzIGxpa2UgeXl5eW1tZGRzcyMjIyMjIChlLiBnLiAyMDAyMDYyMzAwMDAxKQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6TnVtYmVyOjpEYXRlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIENoYW5nZU51bWJlckNyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lZWRlZCBjb25maWcgb3B0aW9ucwogICAgbXkgJENvdW50ZXJMb2cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0lUU01DaGFuZ2U6OkNvdW50ZXJMb2cnKTsKCiAgICAjIGRlZmluZSBudW1iZXIgb2YgbWF4aW11bSBsb29wcyBpZiBjcmVhdGVkIGNoYW5nZSBudW1iZXIgZXhpc3RzCiAgICBteSAkTWF4UmV0cnlOdW1iZXIgICAgICAgID0gMTYwMDA7CiAgICBteSAkTG9vcFByb3RlY3Rpb25Db3VudGVyID0gMDsKCiAgICAjIHRyeSB0byBjcmVhdGUgYSB1bmlxdWUgY2hhbmdlIG51bWJlciBmb3IgdXAgdG8gJE1heFJldHJ5TnVtYmVyIHRpbWVzCiAgICB3aGlsZSAoICRMb29wUHJvdGVjdGlvbkNvdW50ZXIgPD0gJE1heFJldHJ5TnVtYmVyICkgewoKICAgICAgICAjIGdldCBjdXJyZW50IHRpbWUKICAgICAgICBteSAoICRTZWMsICRNaW4sICRIb3VyLCAkRGF5LCAkTW9udGgsICRZZWFyICkgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpLT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKS0+U3lzdGVtVGltZSgpLAogICAgICAgICk7CgogICAgICAgICMgcmVhZCBjb3VudAogICAgICAgIG15ICRDb3VudCAgICAgID0gMDsKICAgICAgICBteSAkTGFzdE1vZGlmeSA9ICcnOwoKICAgICAgICAjIHRyeSB0byByZWFkIGV4aXN0aW5nIGNvdW50ZXIgZnJvbSBmaWxlCiAgICAgICAgaWYgKCAtZiAkQ291bnRlckxvZyApIHsKCiAgICAgICAgICAgIG15ICRDb250ZW50U0NBTEFSUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+RmlsZVJlYWQoCiAgICAgICAgICAgICAgICBMb2NhdGlvbiA9PiAkQ291bnRlckxvZywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggJENvbnRlbnRTQ0FMQVJSZWYgJiYgJHskQ29udGVudFNDQUxBUlJlZn0gKSB7CgogICAgICAgICAgICAgICAgKCAkQ291bnQsICRMYXN0TW9kaWZ5ICkgPSBzcGxpdCggLzsvLCAkeyRDb250ZW50U0NBTEFSUmVmfSApOwoKICAgICAgICAgICAgICAgICMganVzdCBkZWJ1ZwogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0RlYnVnfSA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJSZWFkIGNvdW50ZXIgZnJvbSAkQ291bnRlckxvZzogJENvdW50IiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNvdW50ZXIKICAgICAgICBpZiAoICEkTGFzdE1vZGlmeSB8fCAkTGFzdE1vZGlmeSBuZSAiJFllYXItJE1vbnRoLSREYXkiICkgewogICAgICAgICAgICAkQ291bnQgPSAwOwogICAgICAgIH0KCiAgICAgICAgIyBjb3VudCBhdXRvIGluY3JlbWVudAogICAgICAgICRDb3VudCsrOwoKICAgICAgICAjIGluY3JlYXNlIHRoZSB0aGUgY291bnRlciBmYXN0ZXIgaWYgd2UgYXJlIGluIGxvb3AgcHJldGVjdGlvbiBtb2RlCiAgICAgICAgJENvdW50ICs9ICRMb29wUHJvdGVjdGlvbkNvdW50ZXI7CgogICAgICAgIG15ICRDb250ZW50ID0gJENvdW50IC4gIjskWWVhci0kTW9udGgtJERheTsiOwoKICAgICAgICAjIHdyaXRlIG5ldyBjb3VudAogICAgICAgIG15ICRXcml0ZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPkZpbGVXcml0ZSgKICAgICAgICAgICAgTG9jYXRpb24gPT4gJENvdW50ZXJMb2csCiAgICAgICAgICAgIENvbnRlbnQgID0+IFwkQ29udGVudCwKICAgICAgICApOwoKICAgICAgICAjIGxvZyBkZWJ1ZyBtZXNzYWdlCiAgICAgICAgaWYgKCAkV3JpdGUgJiYgJFNlbGYtPntEZWJ1Z30gKSB7CgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdkZWJ1ZycsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiV3JpdGUgY291bnRlcjogJENvdW50IiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcGFkIGNoYW5nZSBudW1iZXIgd2l0aCBsZWFkaW5nICcwJyB0byBsZW5ndGggNQogICAgICAgICRDb3VudCA9IHNwcmludGYgIiUwNWQiLCAkQ291bnQ7CgogICAgICAgICMgY3JlYXRlIG5ldyBjaGFuZ2UgbnVtYmVyCiAgICAgICAgbXkgJENoYW5nZU51bWJlciA9ICRZZWFyIC4gJE1vbnRoIC4gJERheSAuICRDb3VudDsKCiAgICAgICAgIyBsb29rdXAgaWYgY2hhbmdlIG51bWJlciBleGlzdHMgYWxyZWFkeQogICAgICAgIG15ICRDaGFuZ2VJRCA9ICRTZWxmLT5DaGFuZ2VMb29rdXAoCiAgICAgICAgICAgIENoYW5nZU51bWJlciA9PiAkQ2hhbmdlTnVtYmVyLAogICAgICAgICk7CgogICAgICAgICMgbm93IHdlIGhhdmUgYSBuZXcgdW51c2VkIGNoYW5nZSBudW1iZXIgYW5kIHJldHVybiBpdAogICAgICAgIHJldHVybiAkQ2hhbmdlTnVtYmVyIGlmICEkQ2hhbmdlSUQ7CgogICAgICAgICMgc3RhcnQgbG9vcCBwcm90ZWN0aW9uIG1vZGUKICAgICAgICAkTG9vcFByb3RlY3Rpb25Db3VudGVyKys7CgogICAgICAgICMgY3JlYXRlIG5ldyBjaGFuZ2UgbnVtYmVyIGFnYWluCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2hhbmdlTnVtYmVyICgkQ2hhbmdlTnVtYmVyKSBleGlzdHMhIENyZWF0aW5nIGEgbmV3IG9uZS4iLAogICAgICAgICk7CiAgICB9CgogICAgIyBsb29wIHdhcyBydW5uaW5nIHRvbyBsb25nCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgIE1lc3NhZ2UgID0+ICJMb29wUHJvdGVjdGlvbkNvdW50ZXIgaXMgbm93ICRMb29wUHJvdGVjdGlvbkNvdW50ZXIhIgogICAgICAgICAgICAuICIgU3RvcHBlZCBDaGFuZ2VOdW1iZXJDcmVhdGUoKSEiLAogICAgKTsKICAgIHJldHVybjsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMgVGhlIGFsZ29yaXRobSB0byBjYWxjdWxhdGUgdGhlIGNoZWNrc3VtIGlzIGRlcml2ZWQgZnJvbSB0aGUgb25lCiMgRGV1dHNjaGUgQnVuZGVzYmFobiAoZ2VybWFuIHJhaWx3YXkgY29tcGFueSkgdXNlcyBmb3IgY2FsY3VsYXRpb24KIyBvZiB0aGUgY2hlY2sgZGlnaXQgb2YgdGhlaXIgdmVoaWtlbCBudW1iZXJpbmcuCiMgVGhlIGNoZWNrc3VtIGlzIGNhbGN1bGF0ZWQgYnkgYWx0ZXJuYXRlbHkgbXVsdGlwbHlpbmcgdGhlIGRpZ2l0cwojIHdpdGggMSBhbmQgMiBhbmQgYWRkaW5nIHRoZSByZXN1bHN0cyBmcm9tIGxlZnQgdG8gcmlnaHQgb2YgdGhlCiMgdmVoaWtlbCBudW1iZXIuIFRoZSBtb2R1bHVzIHRvIDEwIG9mIHRoaXMgc3VtIGlzIHN1YnN0cmFjdGVkIGZyb20KIyAxMC4gU2VlOiBodHRwOi8vd3d3LnBydWVmemlmZmVybmJlcmVjaG51bmcuZGUvRi9GYWhyemV1Z251bW1lci5zaHRtbAojIChnZXJtYW4pCiMKIyBHZW5lcmF0ZXMgdGlja2V0IG51bWJlcnMgbGlrZSB5eXl5bW1kZHNzSUQjIyMjI0MgKGUuIGcuIDIwMDIwNjIzMTAxMDAwMTEpCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpOdW1iZXI6OkRhdGVDaGVja3N1bTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBDaGFuZ2VOdW1iZXJDcmVhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgY29uZmlnIG9wdGlvbnMKICAgIG15ICRDb3VudGVyTG9nID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ2hhbmdlOjpDb3VudGVyTG9nJyk7CiAgICBteSAkU3lzdGVtSUQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU3lzdGVtSUQnKTsKCiAgICAjIGRlZmluZSBudW1iZXIgb2YgbWF4aW11bSBsb29wcyBpZiBjcmVhdGVkIGNoYW5nZSBudW1iZXIgZXhpc3RzCiAgICBteSAkTWF4UmV0cnlOdW1iZXIgICAgICAgID0gMTYwMDA7CiAgICBteSAkTG9vcFByb3RlY3Rpb25Db3VudGVyID0gMDsKCiAgICAjIHRyeSB0byBjcmVhdGUgYSB1bmlxdWUgY2hhbmdlIG51bWJlciBmb3IgdXAgdG8gJE1heFJldHJ5TnVtYmVyIHRpbWVzCiAgICB3aGlsZSAoICRMb29wUHJvdGVjdGlvbkNvdW50ZXIgPD0gJE1heFJldHJ5TnVtYmVyICkgewoKICAgICAgICAjIGdldCBjdXJyZW50IHRpbWUKICAgICAgICBteSAoICRTZWMsICRNaW4sICRIb3VyLCAkRGF5LCAkTW9udGgsICRZZWFyICkgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpLT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKS0+U3lzdGVtVGltZSgpLAogICAgICAgICk7CgogICAgICAgICMgcmVhZCBjb3VudAogICAgICAgIG15ICRDb3VudCAgICAgID0gMDsKICAgICAgICBteSAkTGFzdE1vZGlmeSA9ICcnOwoKICAgICAgICAjIHRyeSB0byByZWFkIGV4aXN0aW5nIGNvdW50ZXIgZnJvbSBmaWxlCiAgICAgICAgaWYgKCAtZiAkQ291bnRlckxvZyApIHsKCiAgICAgICAgICAgIG15ICRDb250ZW50U0NBTEFSUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+RmlsZVJlYWQoCiAgICAgICAgICAgICAgICBMb2NhdGlvbiA9PiAkQ291bnRlckxvZywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAkQ29udGVudFNDQUxBUlJlZiAmJiAkeyRDb250ZW50U0NBTEFSUmVmfSApIHsKCiAgICAgICAgICAgICAgICAoICRDb3VudCwgJExhc3RNb2RpZnkgKSA9IHNwbGl0KCAvOy8sICR7JENvbnRlbnRTQ0FMQVJSZWZ9ICk7CgogICAgICAgICAgICAgICAgIyBqdXN0IGRlYnVnCiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57RGVidWd9ID4gMCApIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2RlYnVnJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlJlYWQgY291bnRlciBmcm9tICRDb3VudGVyTG9nOiAkQ291bnQiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgd2UgbmVlZCB0byByZXNldCB0aGUgY291bnRlcgogICAgICAgIGlmICggISRMYXN0TW9kaWZ5IHx8ICRMYXN0TW9kaWZ5IG5lICIkWWVhci0kTW9udGgtJERheSIgKSB7CiAgICAgICAgICAgICRDb3VudCA9IDA7CiAgICAgICAgfQoKICAgICAgICAjIGNvdW50IGF1dG8gaW5jcmVtZW50CiAgICAgICAgJENvdW50Kys7CgogICAgICAgICMgaW5jcmVhc2UgdGhlIHRoZSBjb3VudGVyIGZhc3RlciBpZiB3ZSBhcmUgaW4gbG9vcCBwcmV0ZWN0aW9uIG1vZGUKICAgICAgICAkQ291bnQgKz0gJExvb3BQcm90ZWN0aW9uQ291bnRlcjsKCiAgICAgICAgbXkgJENvbnRlbnQgPSAkQ291bnQgLiAiOyRZZWFyLSRNb250aC0kRGF5OyI7CgogICAgICAgICMgd3JpdGUgbmV3IGNvdW50CiAgICAgICAgbXkgJFdyaXRlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+RmlsZVdyaXRlKAogICAgICAgICAgICBMb2NhdGlvbiA9PiAkQ291bnRlckxvZywKICAgICAgICAgICAgQ29udGVudCAgPT4gXCRDb250ZW50LAogICAgICAgICk7CgogICAgICAgICMgbG9nIGRlYnVnIG1lc3NhZ2UKICAgICAgICBpZiAoICRXcml0ZSAmJiAkU2VsZi0+e0RlYnVnfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZGVidWcnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIldyaXRlIGNvdW50ZXI6ICRDb3VudCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHBhZCBjaGFuZ2UgbnVtYmVyIHdpdGggbGVhZGluZyAnMCcgdG8gbGVuZ3RoIDUKICAgICAgICAkQ291bnQgPSBzcHJpbnRmICIlMDVkIiwgJENvdW50OwoKICAgICAgICAjIGNyZWF0ZSBuZXcgY2hhbmdlIG51bWJlcgogICAgICAgIG15ICRDaGFuZ2VOdW1iZXIgPSAkWWVhciAuICRNb250aCAuICREYXkgLiAkU3lzdGVtSUQgLiAkQ291bnQ7CgogICAgICAgICMgY2FsY3VsYXRlIGEgY2hlY2tzdW0KICAgICAgICBteSAkQ2hrU3VtID0gMDsKICAgICAgICBteSAkTXVsdCAgID0gMTsKICAgICAgICBmb3IgKCBteSAkaSA9IDA7ICRpIDwgbGVuZ3RoKCRDaGFuZ2VOdW1iZXIpOyArKyRpICkgewogICAgICAgICAgICBteSAkRGlnaXQgPSBzdWJzdHIoICRDaGFuZ2VOdW1iZXIsICRpLCAxICk7CiAgICAgICAgICAgICRDaGtTdW0gPSAkQ2hrU3VtICsgKCAkTXVsdCAqICREaWdpdCApOwogICAgICAgICAgICAkTXVsdCArPSAxOwogICAgICAgICAgICBpZiAoICRNdWx0ID09IDMgKSB7CiAgICAgICAgICAgICAgICAkTXVsdCA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJENoa1N1bSAlPSAxMDsKICAgICAgICAkQ2hrU3VtID0gMTAgLSAkQ2hrU3VtOwogICAgICAgIGlmICggJENoa1N1bSA9PSAxMCApIHsKICAgICAgICAgICAgJENoa1N1bSA9IDE7CiAgICAgICAgfQoKICAgICAgICAjIGFkZCBjaGVja3N1bSB0byBjaGFuZ2UgbnVtYmVyCiAgICAgICAgJENoYW5nZU51bWJlciAuPSAkQ2hrU3VtOwoKICAgICAgICAjIGxvb2t1cCBpZiBjaGFuZ2UgbnVtYmVyIGV4aXN0cyBhbHJlYWR5CiAgICAgICAgbXkgJENoYW5nZUlEID0gJFNlbGYtPkNoYW5nZUxvb2t1cCgKICAgICAgICAgICAgQ2hhbmdlTnVtYmVyID0+ICRDaGFuZ2VOdW1iZXIsCiAgICAgICAgKTsKCiAgICAgICAgIyBub3cgd2UgaGF2ZSBhIG5ldyB1bnVzZWQgY2hhbmdlIG51bWJlciBhbmQgcmV0dXJuIGl0CiAgICAgICAgcmV0dXJuICRDaGFuZ2VOdW1iZXIgaWYgISRDaGFuZ2VJRDsKCiAgICAgICAgIyBzdGFydCBsb29wIHByb3RlY3Rpb24gbW9kZQogICAgICAgICRMb29wUHJvdGVjdGlvbkNvdW50ZXIrKzsKCiAgICAgICAgIyBjcmVhdGUgbmV3IGNoYW5nZSBudW1iZXIgYWdhaW4KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDaGFuZ2VOdW1iZXIgKCRDaGFuZ2VOdW1iZXIpIGV4aXN0cyEgQ3JlYXRpbmcgYSBuZXcgb25lLiIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGxvb3Agd2FzIHJ1bm5pbmcgdG9vIGxvbmcKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgTWVzc2FnZSAgPT4gIkxvb3BQcm90ZWN0aW9uQ291bnRlciBpcyBub3cgJExvb3BQcm90ZWN0aW9uQ291bnRlciEiCiAgICAgICAgICAgIC4gIiBTdG9wcGVkIENoYW5nZU51bWJlckNyZWF0ZSgpISIsCiAgICApOwogICAgcmV0dXJuOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlBlcm1pc3Npb246OkFkZFdvcmtPcmRlckNoZWNrOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlBlcm1pc3Npb246OkFkZFdvcmtPcmRlckNoZWNrIC0gV29ya09yZGVyQWRkIGFuZCBXb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUgcGVybWlzc2lvbiBjaGVjawoKPWhlYWQxIFNZTk9QU0lTCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRDaGVja09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpQZXJtaXNzaW9uOjpBZGRXb3JrT3JkZXJDaGVjaycpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFJ1bigpCgpUaGlzIG1ldGhvZCBkb2VzIHRoZSBjaGVjay4gJ3JvJyBhbmQgJ3J3JyBhY2Nlc3MgaXMgZ3JhbnRlZAp3aGVuIHRoZSBhZ2VudCBoYXMgdGhlIGNvcnJlY3QgcHJpdmlsZWdlcyBpbiB0aGUgZ3JvdXAgZGVmaW5lZCBpbiB0aGUKZnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbi4KCiAgICBteSAkSGFzQWNjZXNzID0gJENoZWNrT2JqZWN0LT5SdW4oCiAgICAgICAgVXNlcklEICAgPT4gMTIzLAogICAgICAgIFR5cGUgICAgID0+ICdydycsICAgICAjICdybycgb3IgJ3J3JwogICAgICAgIENoYW5nZUlEID0+IDMzMzMsICAgICAjIG9wdGlvbmFsIGZvciBDaGFuZ2VBZGQKICAgICk7Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBUeXBlKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBpZiBubyBhY3Rpb24gaXMgZ2l2ZW4sIHBhc3MgdGhlIGNoZWNrcyB0byB0aGUgZm9sbG93aW5nIG1vZHVsZXMKICAgIHJldHVybiAxIGlmICEkUGFyYW17QWN0aW9ufTsKCiAgICAjIGlmIG5vIENoYW5nZUlEIGlzIGdpdmVuLCBwYXNzIHRoZSBjaGVja3MgdG8gdGhlIGZvbGxvd2luZyBtb2R1bGVzCiAgICByZXR1cm4gMSBpZiAhJFBhcmFte0NoYW5nZUlEfTsKCiAgICAjIGFjY2VzcyBpcyBwYXNzZWQgdG8gb3RoZXIgcGVybWlzc2lvbiBtb2R1bGVzIGlmIHRoZSBhY3Rpb24gaXMgbm9uZSBvZiB0aGUgYmVsb3cKICAgIGlmICgKICAgICAgICAkUGFyYW17QWN0aW9ufSBuZSAnQWdlbnRJVFNNV29ya09yZGVyQWRkJwogICAgICAgICYmICRQYXJhbXtBY3Rpb259IG5lICdBZ2VudElUU01Xb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUnCiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgZ2V0IGNvbmZpZyBmb3IgdGhlIHJlbGV2YW50IGFjdGlvbgogICAgbXkgJEZyb250ZW5kQ29uZmlnID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCJJVFNNQ2hhbmdlOjpGcm9udGVuZDo6JFBhcmFte0FjdGlvbn0iKTsKCiAgICAjIGdldCB0aGUgcmVxdWlyZWQgcHJpdmlsZWdlLCAncm8nIG9yICdydycKICAgIG15ICRSZXF1aXJlZFByaXY7CiAgICBpZiAoICRGcm9udGVuZENvbmZpZyAmJiAkRnJvbnRlbmRDb25maWctPntQZXJtaXNzaW9ufSApIHsKCiAgICAgICAgIyBnZXQgdGhlIHJlcXVpcmVkIHByaXYgZnJvbSB0aGUgZnJvbnRlbmQgY29uZmlndXJhdGlvbgogICAgICAgICRSZXF1aXJlZFByaXYgPSAkRnJvbnRlbmRDb25maWctPntQZXJtaXNzaW9ufTsKICAgIH0KCiAgICAjIGFjY2VzcyBpcyBwYXNzZWQgdG8gb3RoZXIgcGVybWlzc2lvbiBtb2R1bGVzIGlmIHRoZXJlIGlzIG5vIHJlcXVpcmVkIHByaXZpbGVnZQogICAgcmV0dXJuIDEgaWYgISRSZXF1aXJlZFByaXY7CgogICAgIyBnZXQgdGhlIHJlcXVpcmVkIGdyb3VwIGZvciB0aGUgZnJvbnRlbmQgbW9kdWxlCiAgICBteSAkR3JvdXAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyAkUGFyYW17QWN0aW9ufSB9CiAgICAgICAgLT57R3JvdXBSb30tPlswXTsKCiAgICAjIGRlbnkgYWNjZXNzLCB3aGVuIHRoZSBncm91cCBpcyBub3QgZm91bmQKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn0gaWYgISRHcm91cDsKCiAgICAjIGdldCB0aGUgZ3JvdXAgaWQKICAgIG15ICRHcm91cElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTG9va3VwKAogICAgICAgIEdyb3VwID0+ICRHcm91cCwKICAgICk7CgogICAgIyBkZW55IGFjY2Vzcywgd2hlbiB0aGUgZ3JvdXAgaXMgbm90IGZvdW5kCiAgICByZXR1cm4gJFBhcmFte0NvdW50ZXJ9IGlmICEkR3JvdXBJRDsKCiAgICAjIGdldCB1c2VyIGdyb3Vwcywgd2hlcmUgdGhlIHVzZXIgaGFzIHRoZSBhcHByb3ByaWF0ZSBwcml2aWxlZ2UKICAgIG15ICVHcm91cHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBUeXBlICAgPT4gJFJlcXVpcmVkUHJpdiwKICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgKTsKCiAgICAjIGFjY2VzcyBpcyBwYXNzZWQgdG8gb3RoZXIgcGVybWlzc2lvbiBtb2R1bGVzIGlmIHRoZSBhZ2VudAogICAgIyBoYXMgdGhlIGFwcHJvcHJpYXRlIHR5cGUgaW4gdGhlIGFwcHJvcHJpYXRlIGdyb3VwCiAgICByZXR1cm4gMSBpZiAkR3JvdXBzeyRHcm91cElEfTsKCiAgICAjIGRlbnkgYWNjZXNzIG90aGVyd2lzZQogICAgcmV0dXJuOwoKfQoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlBlcm1pc3Npb246OkNBQkNoZWNrOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpQZXJtaXNzaW9uOjpDQUJDaGVjayAtIENBQiBiYXNlZCBwZXJtaXNzaW9uIGNoZWNrCgo9aGVhZDEgU1lOT1BTSVMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJENoZWNrT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlBlcm1pc3Npb246OkNBQkNoZWNrJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gUnVuKCkKClRoaXMgbWV0aG9kIGRvZXMgdGhlIGNoZWNrLiBBY2Nlc3MgaXMgYWxsb3dlZCB3aGVuIHR5cGUgaXMgJ3JvJyBhbmQgdGhlIGFnZW50IGlzIGEgbWVtYmVyCm9mIHRoZSBDQUIgb2YgdGhlIGNoYW5nZS4KCiAgICBteSAkSGFzQWNjZXNzID0gJENoZWNrT2JqZWN0LT5SdW4oCiAgICAgICAgVXNlcklEICAgPT4gMTIzLAogICAgICAgIFR5cGUgICAgID0+ICdydycsICAgICAjICdybycgb3IgJ3J3JwogICAgICAgIENoYW5nZUlEID0+IDMzMzMsICAgICAjIG9wdGlvbmFsIGZvciBDaGFuZ2VBZGQKICAgICk7Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBUeXBlKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBvbmx5ICdybycgYWNjZXNzIG1pZ2h0IGJlIGdyYW50ZWQgYnkgdGhpcyBtb2R1bGUKICAgIHJldHVybiBpZiAkUGFyYW17VHlwZX0gbmUgJ3JvJzsKCiAgICAjIGRlbnkgYWNjZXNzIHdoZW4gdGhlcmUgaXMgbm8gY2hhbmdlLCBhbmQgdGh1cyBubyBDQUIKICAgIHJldHVybiBpZiAhJFBhcmFte0NoYW5nZUlEfTsKCiAgICAjIGdldCB0aGUgQ0FCIG9mIHRoZSBjaGFuZ2UKICAgIG15ICRDQUIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5DaGFuZ2VDQUJHZXQoCiAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgQ2hhbmdlSUQgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICk7CgogICAgIyBsb29rIGZvciBhIENBQiBtZW1iZXIgd2l0aCB0aGUgcmVsZXZhbnQgVXNlcklECiAgICBteSAoJEZvdW5kQ0FCTWVtYmVyKSA9IGdyZXAgeyAkXyA9PSAkUGFyYW17VXNlcklEfSB9IEB7ICRDQUItPntDQUJBZ2VudHN9IH07CgogICAgIyBhbGxvdyBhY2Nlc3MgdGhlIHRoZSBhZ2VudCBpcyBhIENBQiBtZW1iZXIKICAgIHJldHVybiAxIGlmICRGb3VuZENBQk1lbWJlcjsKCiAgICAjIGRlbnkgYWNjZXNzIG90aGVyd2lzZQogICAgcmV0dXJuOwp9Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlBlcm1pc3Npb246OkNoYW5nZUFnZW50Q2hlY2s7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpQZXJtaXNzaW9uOjpDaGFuZ2VBZ2VudENoZWNrIC0gY2hhbmdlIGFnZW50IGJhc2VkIHBlcm1pc3Npb24gY2hlY2sKCj1oZWFkMSBTWU5PUFNJUwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ2hlY2tPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6UGVybWlzc2lvbjo6Q2hhbmdlQWdlbnRDaGVjaycpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFJ1bigpCgpUaGlzIG1ldGhvZCBkb2VzIHRoZSBjaGVjay4gJ3JvJyBhY2Nlc3MgaXMgYWxsb3dlZCB3aGVuIHRoZSBhZ2VudCBpcyBhICdybycgbWVtYmVyCm9mIHRoZSAnaXRzbS1jaGFuZ2UnIGdyb3VwLgoKICAgIG15ICRIYXNBY2Nlc3MgPSAkQ2hlY2tPYmplY3QtPlJ1bigKICAgICAgICBVc2VySUQgICA9PiAxMjMsCiAgICAgICAgVHlwZSAgICAgPT4gJ3J3JywgICAgICMgJ3JvJyBvciAncncnCiAgICAgICAgQ2hhbmdlSUQgPT4gMzMzMywgICAgICMgb3B0aW9uYWwgZm9yIENoYW5nZUFkZAogICAgKTsKCj1jdXQKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIFR5cGUpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIG9ubHkgJ3JvJyBhY2Nlc3MgbWlnaHQgYmUgZ3JhbnRlZCBieSB0aGlzIG1vZHVsZQogICAgcmV0dXJuIGlmICRQYXJhbXtUeXBlfSBuZSAncm8nOwoKICAgICMgdGhlIGNoZWNrIGlzIGJhc2VkIHVwb24gdGhlIGNoYW5nZSBhZ2VudAogICAgbXkgJEdyb3VwSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMb29rdXAoCiAgICAgICAgR3JvdXAgPT4gJ2l0c20tY2hhbmdlJywKICAgICk7CgogICAgIyBkZW55IGFjY2Vzcywgd2hlbiB0aGUgZ3JvdXAgaXMgbm90IGZvdW5kCiAgICByZXR1cm4gaWYgISRHcm91cElEOwoKICAgICMgZ2V0IHVzZXIgZ3JvdXBzLCB3aGVyZSB0aGUgdXNlciBoYXMgdGhlIGFwcHJvcHJpYXRlIHByaXZpbGVnZQogICAgbXkgJUdyb3VwcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgIFR5cGUgICA9PiAkUGFyYW17VHlwZX0sCiAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICk7CgogICAgIyBkZW55IGFjY2VzcyBpZiB0aGUgYWdlbnQgZG9lc24ndCBoYXZlIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGluIHRoZSBhcHByb3ByaWF0ZSBncm91cAogICAgcmV0dXJuIGlmICEkR3JvdXBzeyRHcm91cElEfTsKCiAgICAjIGNoYW5nZSBhZ2VudHMgYXJlIGdyYW50ZWQgcm8gYWNjZXNzCiAgICByZXR1cm4gMTsKfQoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlBlcm1pc3Npb246OkNoYW5nZUJ1aWxkZXJDaGVjazsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpQZXJtaXNzaW9uOjpDaGFuZ2VCdWlsZGVyQ2hlY2sgLSBjaGFuZ2UgYnVpbGRlciBiYXNlZCBwZXJtaXNzaW9uIGNoZWNrCgo9aGVhZDEgU1lOT1BTSVMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJENoZWNrT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlBlcm1pc3Npb246OkNoYW5nZUJ1aWxkZXJDaGVjaycpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFJ1bigpCgpUaGlzIG1ldGhvZCBkb2VzIHRoZSBjaGVjay4gV2hlbiBubyBDaGFuZ2VJRCBpcyBwYXNzZWQsIHRoYW4gJ3JvJyBhbmQgJ3J3JyBhY2Nlc3MgaXMgZ3JhbnRlZAp3aGVuIHRoZSBhZ2VudCBoYXMgdGhlIHByaXYgaW4gdGhlICdpdHNtLWNoYW5nZS1idWlsZGVyJyBncm91cC4KV2hlbiB0aGUgQ2hhbmdlSUQgd2FzIHBhc3NlZCwgdGhhbiB0aGUgYWdlbnQgbXVzdCBhZGRpdGlvbmFsbHkgYmUgdGhlIGNoYW5nZWJ1aWxkZXIgb2YgdGhlIGNoYW5nZS4KCiAgICBteSAkSGFzQWNjZXNzID0gJENoZWNrT2JqZWN0LT5SdW4oCiAgICAgICAgVXNlcklEICAgPT4gMTIzLAogICAgICAgIFR5cGUgICAgID0+ICdydycsICAgICAjICdybycgb3IgJ3J3JwogICAgICAgIENoYW5nZUlEID0+IDMzMzMsICAgICAjIG9wdGlvbmFsIGZvciBDaGFuZ2VBZGQKICAgICk7Cgo9Y3V0CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBUeXBlKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyB0aGUgY2hlY2sgaXMgYmFzZWQgdXBvbiB0aGUgY2hhbmdlIGJ1aWxkZXIKICAgIG15ICRHcm91cElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTG9va3VwKAogICAgICAgIEdyb3VwID0+ICdpdHNtLWNoYW5nZS1idWlsZGVyJywKICAgICk7CgogICAgIyBkbyBub3QgZ3JhbnQgYWNjZXNzLCB3aGVuIHRoZSBncm91cCBpcyBub3QgZm91bmQKICAgIHJldHVybiBpZiAhJEdyb3VwSUQ7CgogICAgIyBnZXQgdXNlciBncm91cHMsIHdoZXJlIHRoZSB1c2VyIGhhcyB0aGUgYXBwcm9wcmlhdGUgcHJpdmlsZWdlCiAgICBteSAlR3JvdXBzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgVHlwZSAgID0+ICRQYXJhbXtUeXBlfSwKICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgKTsKCiAgICAjIGRvIG5vdCBncmFudCBhY2Nlc3MgaWYgdGhlIGFnZW50IGRvZXNuJ3QgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgdHlwZSBpbiB0aGUgYXBwcm9wcmlhdGUgZ3JvdXAKICAgIHJldHVybiBpZiAhJEdyb3Vwc3skR3JvdXBJRH07CgogICAgIyBBbGxvdyBhIGNoYW5nZSBidWlsZGVyIHRvIGNyZWF0ZSBhIGNoYW5nZSwgd2hlbiB0aGVyZSBpc24ndCBhIGNoYW5nZSB5ZXQuCiAgICByZXR1cm4gMSBpZiAhJFBhcmFte0NoYW5nZUlEfTsKCiAgICAjIHRoZXJlIGFscmVhZHkgaXMgYSBjaGFuZ2UuIGUuZy4gQWdlbnRJVFNNQ2hhbmdlRWRpdAogICAgbXkgJENoYW5nZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZUdldCgKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICBDaGFuZ2VJRCA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgKTsKCiAgICAjIGRvIG5vdCBncmFudCBhY2Nlc3MsIHdoZW4gbm8gY2hhbmdlIHdhcyBmb3VuZAogICAgcmV0dXJuIGlmICEkQ2hhbmdlIHx8ICEleyRDaGFuZ2V9IHx8ICEkQ2hhbmdlLT57Q2hhbmdlQnVpbGRlcklEfTsKCiAgICAjIGFsbG93IGFjY2Vzcywgd2hlbiB0aGUgYWdlbnQgaXMgdGhlIGNoYW5nZSBidWlsZGVyIG9mIHRoZSBjaGFuZ2UKICAgIHJldHVybiAxIGlmICRDaGFuZ2UtPntDaGFuZ2VCdWlsZGVySUR9ID09ICRQYXJhbXtVc2VySUR9OwoKICAgICMgZG8gbm90IGdyYW50IGFjY2VzcyBvdGhlcndpc2UKICAgIHJldHVybjsKfQoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlBlcm1pc3Npb246OkNoYW5nZU1hbmFnZXJDaGVjazsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlBlcm1pc3Npb246OkNoYW5nZU1hbmFnZXJDaGVjayAtIGNoYW5nZSBtYW5hZ2VyIGJhc2VkIHBlcm1pc3Npb24gY2hlY2sKCj1oZWFkMSBTWU5PUFNJUwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ2hlY2tPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6UGVybWlzc2lvbjo6Q2hhbmdlTWFuYWdlckNoZWNrJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gUnVuKCkKClRoaXMgbWV0aG9kIGRvZXMgdGhlIGNoZWNrLiAncm8nIGFuZCAncncnIGFjY2VzcyBpcyBncmFudGVkCndoZW4gdGhlIGFnZW50IGhhcyB0aGUgcHJpdiBpbiB0aGUgJ2l0c20tY2hhbmdlLW1hbmFnZXInIGdyb3VwLgoKICAgIG15ICRIYXNBY2Nlc3MgPSAkQ2hlY2tPYmplY3QtPlJ1bigKICAgICAgICBVc2VySUQgICA9PiAxMjMsCiAgICAgICAgVHlwZSAgICAgPT4gJ3J3JywgICAgICMgJ3JvJyBvciAncncnCiAgICAgICAgQ2hhbmdlSUQgPT4gMzMzMywgICAgICMgb3B0aW9uYWwgZm9yIENoYW5nZUFkZAogICAgKTsKCj1jdXQKCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIFR5cGUpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRoZSBjaGVjayBpcyBiYXNlZCB1cG9uIHRoZSBjaGFuZ2UgbWFuYWdlcgogICAgbXkgJEdyb3VwSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMb29rdXAoCiAgICAgICAgR3JvdXAgPT4gJ2l0c20tY2hhbmdlLW1hbmFnZXInLAogICAgKTsKCiAgICAjIGRlbnkgYWNjZXNzLCB3aGVuIHRoZSBncm91cCBpcyBub3QgZm91bmQKICAgIHJldHVybiBpZiAhJEdyb3VwSUQ7CgogICAgIyBnZXQgdXNlciBncm91cHMsIHdoZXJlIHRoZSB1c2VyIGhhcyB0aGUgYXBwcm9wcmlhdGUgcHJpdmlsZWdlCiAgICBteSAlR3JvdXBzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgVHlwZSAgID0+ICRQYXJhbXtUeXBlfSwKICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgKTsKCiAgICAjIGFsbG93IHJvIGFuZCBydyBhY2Nlc3MgaWYgdGhlIGFnZW50IGlzIGEgY2hhbmdlIG1hbmFnZXIKICAgIHJldHVybiAxIGlmICRHcm91cHN7JEdyb3VwSUR9OwoKICAgICMgbm8gbmVlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBhZ2VudCBpcyB0aGUgYWN0dWFsIG1hbmFnZXIgb2YgdGhlIGNoYW5nZQoKICAgICMgZGVueSBhY2Nlc3Mgb3RoZXJ3aXNlCiAgICByZXR1cm47Cn0KCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlOjpDQUI7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UUlM6OlBlcmw6OkR1bXBlcikKdXNlIERhdGE6OkR1bXBlcjsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlOjpDQUIgLSBhbGwgdGVtcGxhdGUgZnVuY3Rpb25zIGZvciBDQUIKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGZ1bmN0aW9ucyBmb3IgQ0FCIHRlbXBsYXRlcyBpbiBJVFNNQ2hhbmdlTWFuYWdlbWVudC4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlOjpDQUInKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBzZXQgdGhlIGRlYnVnIGZsYWcKICAgICRTZWxmLT57RGVidWd9ID0gJFBhcmFte0RlYnVnfSB8fCAwOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gU2VyaWFsaXplKCkKClNlcmlhbGl6ZSB0aGUgQ0FCIG9mIGEgY2hhbmdlLiBUaGlzIGlzIGRvbmUgd2l0aCBEYXRhOjpEdW1wZXIuIEl0IHJldHVybnMKYSBzZXJpYWxpemVkIHN0cmluZyBvZiB0aGUgZGF0YXN0cnVjdHVyZS4gVGhlIENBQiBhY3Rpb25zCmFyZSAid3JhcHBlZCIgd2l0aGluIGEgaGFzaHJlZmVyZW5jZS4uLgoKICAgIG15ICRUZW1wbGF0ZVN0cmluZyA9ICRUZW1wbGF0ZU9iamVjdC0+U2VyaWFsaXplKAogICAgICAgIENoYW5nZUlEID0+IDEsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICBSZXR1cm4gICA9PiAnSEFTSCcsICMgKG9wdGlvbmFsKSBIQVNIfFNUUklORyBkZWZhdWx0ICdTVFJJTkcnCiAgICApOwoKcmV0dXJucwoKICAgICd7Q0FCQWRkID0+IHsgQ0FCQ3VzdG9tZXJzID0+IFsgJ21tQGxvY2FsaG9zdCcgXSwgLi4uIH19JwoKSWYgcGFyYW1ldGVyIEM8UmV0dXJuPiBpcyBzZXQgdG8gQzxIQVNIPiwgdGhlIFBlcmwgZGF0YXN0cnVjdHVyZQppcyByZXR1cm5lZAoKICAgIHsKICAgICAgICBDQUJBZGQgICA9PiB7IC4uLiB9LAogICAgICAgIENoaWxkcmVuID0+IFsgLi4uIF0sCiAgICB9Cgo9Y3V0CgpzdWIgU2VyaWFsaXplIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBDaGFuZ2VJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZSBmb3IgJ1JldHVybicKICAgICRQYXJhbXtSZXR1cm59IHx8PSAnU1RSSU5HJzsKCiAgICAjIGdldCBDQUIgb2YgdGhlIGNoYW5nZQogICAgbXkgJENoYW5nZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZUdldCgKICAgICAgICBDaGFuZ2VJRCA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISRDaGFuZ2U7CgogICAgIyB0ZW1wbGF0ZXMgaGF2ZSB0byBiZSBhbiBhcnJheSByZWZlcmVuY2U7CiAgICBteSAkT3JpZ2luYWxEYXRhID0gewogICAgICAgIENBQkFkZCA9PiB7CiAgICAgICAgICAgIENBQkN1c3RvbWVycyA9PiAkQ2hhbmdlLT57Q0FCQ3VzdG9tZXJzfSwKICAgICAgICAgICAgQ0FCQWdlbnRzICAgID0+ICRDaGFuZ2UtPntDQUJBZ2VudHN9LAogICAgICAgIH0sCiAgICB9OwoKICAgIGlmICggJFBhcmFte1JldHVybn0gZXEgJ0hBU0gnICkgewogICAgICAgIHJldHVybiAkT3JpZ2luYWxEYXRhOwogICAgfQoKICAgICMgbm8gaW5kZW50YXRpb24gKHNhdmVzIHNwYWNlKQogICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6SW5kZW50ID0gMDsKCiAgICAjIGRvIG5vdCB1c2UgY3Jvc3MtcmVmZXJlbmNpbmcKICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OkRlZXBjb3B5ID0gMTsKCiAgICAjIHNlcmlhbGl6ZSB0aGUgZGF0YSAoZG8gbm90IHVzZSAkVkFSMSwgYnV0ICRUZW1wbGF0ZURhdGEgZm9yIER1bXBlciBvdXRwdXQpCiAgICBteSAkU2VyaWFsaXplZERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5EdW1wKCAkT3JpZ2luYWxEYXRhLCAnYmluYXJ5JyApOwoKICAgIHJldHVybiAkU2VyaWFsaXplZERhdGE7Cn0KCj1pdGVtIERlU2VyaWFsaXplKCkKClVwZGF0ZXMgdGhlIENBQiBvZiBhIGNoYW5nZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gQ0FCIHRlbXBsYXRlLiBJdApyZXR1cm5zIHRoZSBjaGFuZ2UgaWQgdGhlIGNhYiBpcyBmb3IuCgogICAgbXkgJENoYW5nZUlEID0gJFRlbXBsYXRlT2JqZWN0LT5EZVNlcmlhbGl6ZSgKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFsgJ21tQGxvY2FsaG9zdCcgXSwKICAgICAgICAgICAgQ0FCQWdlbnRzICAgID0+IFsgMSwgMiBdLAogICAgICAgIH0sCiAgICAgICAgQ2hhbmdlSUQgPT4gMSwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBEZVNlcmlhbGl6ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgQ2hhbmdlSUQgRGF0YSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgY3VycmVudCBDQUIgb2YgY2hhbmdlCiAgICBteSAkQ2hhbmdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgYSBDQUIgYWRkIGlzIGFjdHVhbGx5IGEgQ0FCIHVwZGF0ZSBvbiBhIGNoYW5nZQogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5DaGFuZ2VDQUJVcGRhdGUoCiAgICAgICAgQ2hhbmdlSUQgICAgID0+ICRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFsgQHsgJFBhcmFte0RhdGF9LT57Q0FCQ3VzdG9tZXJzfSB9LCBAeyAkQ2hhbmdlLT57Q0FCQ3VzdG9tZXJzfSB9IF0sCiAgICAgICAgQ0FCQWdlbnRzICAgID0+IFsgQHsgJFBhcmFte0RhdGF9LT57Q0FCQWdlbnRzfSB9LCBAeyAkQ2hhbmdlLT57Q0FCQWdlbnRzfSB9IF0sCiAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBteSAlSW5mbyA9ICgKICAgICAgICBJRCAgICAgICA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtDaGFuZ2VJRH0sCiAgICApOwoKICAgIHJldHVybiAlSW5mbzsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlOjpJVFNNQ2hhbmdlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpQZXJsOjpEdW1wZXIpCnVzZSBEYXRhOjpEdW1wZXI7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01TdGF0ZU1hY2hpbmUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpUZW1wbGF0ZTo6SVRTTUNvbmRpdGlvbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlOjpJVFNNV29ya09yZGVyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VXNlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicsCiAgICAnS2VybmVsOjpTeXN0ZW06OlZhbGlkJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6VGVtcGxhdGU6OklUU01DaGFuZ2UgLSBhbGwgdGVtcGxhdGUgZnVuY3Rpb25zIGZvciBjaGFuZ2VzCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBmdW5jdGlvbnMgZm9yIGNoYW5nZSB0ZW1wbGF0ZXMgaW4gSVRTTUNoYW5nZU1hbmFnZW1lbnQuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRUZW1wbGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpUZW1wbGF0ZTo6SVRTTUNoYW5nZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIHNldCB0aGUgZGVidWcgZmxhZwogICAgJFNlbGYtPntEZWJ1Z30gPSAkUGFyYW17RGVidWd9IHx8IDA7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBTZXJpYWxpemUoKQoKU2VyaWFsaXplIGEgY2hhbmdlLiBUaGlzIGlzIGRvbmUgd2l0aCBEYXRhOjpEdW1wZXIuIEl0IHJldHVybnMKYSBzZXJpYWxpemVkIHN0cmluZyBvZiB0aGUgZGF0YXN0cnVjdHVyZS4gVGhlIGNoYW5nZSBhY3Rpb25zCmFyZSAid3JhcHBlZCIgd2l0aGluIGFuIGFycmF5cmVmZXJlbmNlLi4uCgogICAgbXkgJFRlbXBsYXRlU3RyaW5nID0gJFRlbXBsYXRlT2JqZWN0LT5TZXJpYWxpemUoCiAgICAgICAgQ2hhbmdlSUQgICA9PiAxLAogICAgICAgIFN0YXRlUmVzZXQgPT4gMSwgIyAob3B0aW9uYWwpIHJlc2V0IHRvIGRlZmF1bHQgc3RhdGUKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgUmV0dXJuICAgICA9PiAnSEFTSCcsICMgKG9wdGlvbmFsKSBIQVNIfFNUUklORyBkZWZhdWx0ICdTVFJJTkcnCiAgICApOwoKcmV0dXJucwoKICAgICd7Q2hhbmdlQWRkID0+IHtUaXRsZSA9PiAndGl0bGUnLCAuLi59fSwge1dvcmtPcmRlckFkZCA9PiB7IENoYW5nZUlEID0+IDEyMywgLi4uIH19JwoKSWYgcGFyYW1ldGVyIEM8UmV0dXJuPiBpcyBzZXQgdG8gQzxIQVNIPiwgdGhlIFBlcmwgZGF0YXN0cnVjdHVyZQppcyByZXR1cm5lZAoKICAgIHsKICAgICAgICBDaGFuZ2VBZGQgPT4geyAuLi4gfSwKICAgICAgICBDaGlsZHJlbiAgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4geyAuLi4gfSwKICAgICAgICAgICAgICAgIENoaWxkcmVuICAgICA9PiBbIC4uLiBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4geyAuLi4gfSwKICAgICAgICAgICAgICAgIENoaWxkcmVuICAgICA9PiBbIC4uLiBdLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICB9Cgo9Y3V0CgpzdWIgU2VyaWFsaXplIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBDaGFuZ2VJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZSBmb3IgJ1JldHVybicKICAgICRQYXJhbXtSZXR1cm59IHx8PSAnU1RSSU5HJzsKCiAgICAjIGdldCBjaGFuZ2UKICAgIG15ICRDaGFuZ2UgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkQ2hhbmdlOwoKICAgICMga2VlcCBvbmx5IHdhbnRlZCBhdHRyaWJ1dGVzCiAgICBteSAkQ2xlYW5DaGFuZ2U7CiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoCiAgICAgICAgcXcoCiAgICAgICAgQ2hhbmdlSUQgQ2hhbmdlTnVtYmVyIENoYW5nZVN0YXRlSUQgQ2hhbmdlVGl0bGUgRGVzY3JpcHRpb24KICAgICAgICBKdXN0aWZpY2F0aW9uIENoYW5nZU1hbmFnZXJJRCBDaGFuZ2VCdWlsZGVySUQKICAgICAgICBDYXRlZ29yeUlEIEltcGFjdElEIFByaW9yaXR5SUQgQ0FCQWdlbnRzIENBQkN1c3RvbWVycyBSZXF1ZXN0ZWRUaW1lCiAgICAgICAgQ3JlYXRlVGltZSBDcmVhdGVCeSBDaGFuZ2VUaW1lIENoYW5nZUJ5IFBsYW5uZWRTdGFydFRpbWUgUGxhbm5lZEVuZFRpbWUpCiAgICAgICAgKQogICAgewogICAgICAgICRDbGVhbkNoYW5nZS0+eyRBdHRyaWJ1dGV9ID0gJENoYW5nZS0+eyRBdHRyaWJ1dGV9OwogICAgfQoKICAgICMgcmVzZXQgY2hhbmdlIHN0YXRlIHRvIGRlZmF1bHQgaWYgcmVxdWVzdGVkCiAgICBpZiAoICRQYXJhbXtTdGF0ZVJlc2V0fSApIHsKCiAgICAgICAgIyBnZXQgaW5pdGlhbCBjaGFuZ2Ugc3RhdGUgaWQKICAgICAgICBteSAkTmV4dFN0YXRlSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01TdGF0ZU1hY2hpbmUnKS0+U3RhdGVUcmFuc2l0aW9uR2V0KAogICAgICAgICAgICBTdGF0ZUlEID0+IDAsCiAgICAgICAgICAgIENsYXNzICAgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICk7CgogICAgICAgICRDbGVhbkNoYW5nZS0+e0NoYW5nZVN0YXRlSUR9ID0gJE5leHRTdGF0ZUlEcy0+WzBdOwogICAgfQoKICAgICMgYWRkIGNoYW5nZSBkeW5hbWljIGZpZWxkcyB0byBsaXN0IG9mIHdhbnRlZCBhdHRyaWJ1dGVzCiAgICBBVFRSSUJVVEU6CiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyRDaGFuZ2V9ICkgewoKICAgICAgICAjIGZpbmQgdGhlIGNoYW5nZSBkeW5hbWljIGZpZWxkIGF0dHJpYnV0ZXMKICAgICAgICBpZiAoICRBdHRyaWJ1dGUgPX4gbXsgXEEgRHluYW1pY0ZpZWxkXy4qIFx6IH14bXMgKSB7CgogICAgICAgICAgICAkQ2xlYW5DaGFuZ2UtPnskQXR0cmlidXRlfSA9ICRDaGFuZ2UtPnskQXR0cmlidXRlfTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJE9yaWdpbmFsRGF0YSA9IHsgQ2hhbmdlQWRkID0+ICRDbGVhbkNoYW5nZSB9OwoKICAgICMgZ2V0IGF0dGFjaG1lbnRzCiAgICBteSBAQ2hhbmdlQXR0YWNobWVudHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5DaGFuZ2VBdHRhY2htZW50TGlzdCgKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlLT57Q2hhbmdlSUR9LAogICAgKTsKICAgIGZvciBteSAkRmlsZW5hbWUgKEBDaGFuZ2VBdHRhY2htZW50cykgewoKICAgICAgICAjIHNhdmUgYXR0YWNobWVudHMgdG8gdGhpcyB0ZW1wbGF0ZQogICAgICAgIHB1c2ggQHsgJE9yaWdpbmFsRGF0YS0+e0NoaWxkcmVufSB9LCB7IEF0dGFjaG1lbnRBZGQgPT4geyBGaWxlbmFtZSA9PiAkRmlsZW5hbWUgfSB9OwogICAgfQoKICAgICMgZ2V0IHdvcmtvcmRlcnMKICAgIFdPUktPUkRFUklEOgogICAgZm9yIG15ICRXb3JrT3JkZXJJRCAoIEB7ICRDaGFuZ2UtPntXb3JrT3JkZXJJRHN9IH0gKSB7CiAgICAgICAgbXkgJFdvcmtPcmRlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpUZW1wbGF0ZTo6SVRTTVdvcmtPcmRlcicpLT5TZXJpYWxpemUoCiAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgU3RhdGVSZXNldCAgPT4gJFBhcmFte1N0YXRlUmVzZXR9IHx8IDAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBSZXR1cm4gICAgICA9PiAnSEFTSCcsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBXT1JLT1JERVJJRCBpZiAhJFdvcmtPcmRlcjsKCiAgICAgICAgcHVzaCBAeyAkT3JpZ2luYWxEYXRhLT57Q2hpbGRyZW59IH0sICRXb3JrT3JkZXI7CiAgICB9CgogICAgIyBnZXQgY29uZGl0aW9uIGxpc3QgZm9yIHRoZSBjaGFuZ2UKICAgIG15ICRDb25kaXRpb25MaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nKS0+Q29uZGl0aW9uTGlzdCgKICAgICAgICBDaGFuZ2VJRCA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgIFZhbGlkICAgID0+IDAsCiAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApIHx8IFtdOwoKICAgICMgZ2V0IGVhY2ggY29uZGl0aW9uCiAgICBDT05ESVRJT05JRDoKICAgIGZvciBteSAkQ29uZGl0aW9uSUQgKCBAeyRDb25kaXRpb25MaXN0fSApIHsKICAgICAgICBteSAkQ29uZGl0aW9uID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlOjpJVFNNQ29uZGl0aW9uJyktPlNlcmlhbGl6ZSgKICAgICAgICAgICAgQ29uZGl0aW9uSUQgPT4gJENvbmRpdGlvbklELAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgUmV0dXJuICAgICAgPT4gJ0hBU0gnLAogICAgICAgICk7CgogICAgICAgIG5leHQgQ09ORElUSU9OSUQgaWYgISRDb25kaXRpb247CgogICAgICAgIHB1c2ggQHsgJE9yaWdpbmFsRGF0YS0+e0NoaWxkcmVufSB9LCAkQ29uZGl0aW9uOwogICAgfQoKICAgICMgZ2V0IGxpbmtzIHRvIG90aGVyIG9iamVjdAogICAgbXkgJExpbmtMaXN0V2l0aERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgIE9iamVjdCA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgS2V5ICAgID0+ICRDaGFuZ2UtPntDaGFuZ2VJRH0sCiAgICAgICAgU3RhdGUgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBmb3IgbXkgJFRhcmdldE9iamVjdCAoIHNvcnQga2V5cyAleyRMaW5rTGlzdFdpdGhEYXRhfSApIHsKICAgICAgICBmb3IgbXkgJFR5cGUgKCBzb3J0IGtleXMgJXsgJExpbmtMaXN0V2l0aERhdGEtPnskVGFyZ2V0T2JqZWN0fSB9ICkgewogICAgICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkTGlua0xpc3RXaXRoRGF0YS0+eyRUYXJnZXRPYmplY3R9LT57JFR5cGV9IH0gKSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJFRhcmdldElEICgKICAgICAgICAgICAgICAgICAgICBzb3J0IGtleXMgJXsgJExpbmtMaXN0V2l0aERhdGEtPnskVGFyZ2V0T2JqZWN0fS0+eyRUeXBlfS0+eyRLZXl9IH0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbXkgJExpbmtJbmZvID0gewogICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VLZXkgICAgPT4gJENoYW5nZS0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICRUYXJnZXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldEtleSAgICA9PiAkVGFyZ2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAkVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJE9yaWdpbmFsRGF0YS0+e0NoaWxkcmVufSB9LCB7IExpbmtBZGQgPT4gJExpbmtJbmZvIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkUGFyYW17UmV0dXJufSBlcSAnSEFTSCcgKSB7CiAgICAgICAgcmV0dXJuICRPcmlnaW5hbERhdGE7CiAgICB9CgogICAgIyBubyBpbmRlbnRhdGlvbiAoc2F2ZXMgc3BhY2UpCiAgICBsb2NhbCAkRGF0YTo6RHVtcGVyOjpJbmRlbnQgPSAwOwoKICAgICMgZG8gbm90IHVzZSBjcm9zcy1yZWZlcmVuY2luZwogICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6RGVlcGNvcHkgPSAxOwoKICAgICMgc2VyaWFsaXplIHRoZSBkYXRhIChkbyBub3QgdXNlICRWQVIxLCBidXQgJFRlbXBsYXRlRGF0YSBmb3IgRHVtcGVyIG91dHB1dCkKICAgIG15ICRTZXJpYWxpemVkRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPkR1bXAoICRPcmlnaW5hbERhdGEsICdiaW5hcnknICk7CgogICAgcmV0dXJuICRTZXJpYWxpemVkRGF0YTsKfQoKPWl0ZW0gRGVTZXJpYWxpemUoKQoKRGVTZXJpYWxpemUoKSBpcyBhIHdyYXBwZXIgZm9yIGFsbCB0aGUgX1hYWEFkZCBtZXRob2RzLgoKICAgIG15ICVJbmZvID0gJFRlbXBsYXRlT2JqZWN0LT5EZVNlcmlhbGl6ZSgKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgIyAuLi4gUGFyYW1zIGZvciBDaGFuZ2VBZGQKICAgICAgICB9LAogICAgICAgIENoYW5nZUlEID0+IDEsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICBNZXRob2QgICA9PiAnQ2hhbmdlQWRkJywKICAgICk7Cgo9Y3V0CgpzdWIgRGVTZXJpYWxpemUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIE1ldGhvZCBEYXRhKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRpc3BhdGNoIHRhYmxlCiAgICBteSAlTWV0aG9kMlN1YiA9ICgKICAgICAgICBDaGFuZ2VBZGQgICAgID0+ICdfQ2hhbmdlQWRkJywKICAgICAgICBBdHRhY2htZW50QWRkID0+ICdfQXR0YWNobWVudEFkZCcsCiAgICAgICAgTGlua0FkZCAgICAgICA9PiAnX0xpbmtBZGQnLAogICAgKTsKCiAgICBteSAkU3ViID0gJE1ldGhvZDJTdWJ7ICRQYXJhbXtNZXRob2R9IH07CgogICAgaWYgKCAhJFN1YiApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0ludmFsaWQgTWV0aG9kbmFtZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiAkU2VsZi0+JFN1YiglUGFyYW0pOwp9Cgo9YmVnaW4gSW50ZXJuYWw6Cgo9aXRlbSBfQ2hhbmdlQWRkKCkKCkNyZWF0ZXMgYSBuZXcgY2hhbmdlIGJhc2VkIG9uIGEgdGVtcGxhdGUuIEl0IHJldHVybnMgYSBoYXNoIHdpdGggYWRkaXRpb25hbAppbmZvIGxpa2UgQ2hhbmdlSUQuCgogICAgbXkgJVJldHVybiA9ICRUZW1wbGF0ZU9iamVjdC0+X0NoYW5nZUFkZCgKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ3Rlc3QnLAogICAgICAgIH0sCiAgICAgICAgIyBvdGhlciBjaGFuZ2UgYXR0cmlidXRlcwogICAgICAgIENoYW5nZUlEID0+IDAsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgX0NoYW5nZUFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMb2dPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyk7CiAgICBteSAkVXNlck9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKICAgIG15ICRDdXN0b21lclVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBEYXRhKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBtYWtlIGEgbG9jYWwgY29weQogICAgbXkgJURhdGEgPSAleyAkUGFyYW17RGF0YX0gfTsKCiAgICAjIHdlIG5lZWQgdGhlIG9sZCBjaGFuZ2UgaWQgZm9yIGV4cHJlc3Npb25zCiAgICBteSAkT2xkQ2hhbmdlSUQgPSAkRGF0YXtDaGFuZ2VJRH07CgogICAgIyB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSwgc28gZG9uJ3QgcGFzcyB0aGVtIHRvIENoYW5nZUFkZCgpCiAgICBkZWxldGUgQERhdGF7cXcoQ2hhbmdlSUQgQ2hhbmdlTnVtYmVyIENyZWF0ZVRpbWUgQ3JlYXRlQnkgQ2hhbmdlVGltZSBDaGFuZ2VCeSl9OwogICAgZGVsZXRlIEBEYXRhe3F3KERlc2NyaXB0aW9uUGxhaW4gSnVzdGlmaWNhdGlvblBsYWluKX07CgogICAgIyBpZiB1c2VyIHNldCBhIG5ldyB0aW1lLCBjYWxjdWxhdGUgZGlmZmVyZW5jZQogICAgbXkgJERpZmZlcmVuY2U7CiAgICBpZiAoICRQYXJhbXtOZXdUaW1lSW5FcG9jaGV9ICkgewogICAgICAgIG15ICRPbGRUaW1lID0gJERhdGF7ICRQYXJhbXtNb3ZlVGltZVR5cGV9IH07CgogICAgICAgIGlmICgkT2xkVGltZSkgewogICAgICAgICAgICAkRGlmZmVyZW5jZSA9ICRTZWxmLT5fR2V0VGltZURpZmZlcmVuY2UoCiAgICAgICAgICAgICAgICBDdXJyZW50VGltZSAgICAgPT4gJE9sZFRpbWUsCiAgICAgICAgICAgICAgICBOZXdUaW1lSW5FcG9jaGUgPT4gJFBhcmFte05ld1RpbWVJbkVwb2NoZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgUGxhbm5lZFhYWFRpbWUgd2FzIHNhdmVkIGp1c3QgZm9yICJtb3ZlIHRpbWUiIHB1cnBvc2VzCiAgICBkZWxldGUgJERhdGF7UGxhbm5lZEVuZFRpbWV9OwogICAgZGVsZXRlICREYXRhe1BsYW5uZWRTdGFydFRpbWV9OwoKICAgICMgUmVxdWVzdGVkVGltZSBzaG91bGQgbm90IGJlIHNldAogICAgZGVsZXRlICREYXRhe1JlcXVlc3RlZFRpbWV9OwoKICAgICMgZGVsZXRlIGFsbCBwYXJhbWV0ZXJzIHdob3NlIHZhbHVlcyBhcmUgJ3VuZGVmJwogICAgIyBfQ2hlY2tDaGFuZ2VQYXJhbXMgdGhyb3dzIGFuIGVycm9yIG90aGVyd2lzZQogICAgZm9yIG15ICRQYXJhbWV0ZXIgKCBzb3J0IGtleXMgJURhdGEgKSB7CiAgICAgICAgZGVsZXRlICREYXRheyRQYXJhbWV0ZXJ9IGlmICFkZWZpbmVkICREYXRheyRQYXJhbWV0ZXJ9OwogICAgfQoKICAgICMgcmVwbGFjZSB0aGUgQ2hhbmdlQnVpbGRlcklEIGZyb20gdGhlIHNhdmVkIHRlbXBsYXRlIHdpdGggdGhlIGN1cnJlbnQgdXNlciBpZAogICAgJERhdGF7Q2hhbmdlQnVpbGRlcklEfSA9ICRQYXJhbXtVc2VySUR9OwoKICAgIGlmICggJERhdGF7Q2hhbmdlTWFuYWdlcklEfSApIHsKCiAgICAgICAgIyBDaGVjayBpZiB0aGUgY2hhbmdlIG1hbmFnZXIgaXMgc3RpbGwgdmFsaWQsIGxlYXZlIGVtcHR5IGlmIG5vdAogICAgICAgIG15ICVVc2VyRGF0YSA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEID0+ICREYXRhe0NoYW5nZU1hbmFnZXJJRH0sCiAgICAgICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgICk7CgogICAgICAgIGlmICggISRVc2VyRGF0YXtVc2VySUR9ICkgewogICAgICAgICAgICBkZWxldGUgJERhdGF7Q2hhbmdlTWFuYWdlcklEfTsKICAgICAgICB9CiAgICB9CgogICAgIyBDaGVjayBpZiBDQUIgYWdlbnRzIGFyZSB2YWxpZCBhZ2VudHMsIG90aGVyd2lzZSByZW1vdmUgdGhlbS4KICAgIGlmICggSXNBcnJheVJlZldpdGhEYXRhKCAkRGF0YXtDQUJBZ2VudHN9ICkgKSB7CgogICAgICAgIG15IEBOZXdDQUJBZ2VudHM7CgogICAgICAgICMgY2hlY2sgdXNlcnMKICAgICAgICBVU0VSSUQ6CiAgICAgICAgZm9yIG15ICRVc2VySUQgKCBAeyAkRGF0YXtDQUJBZ2VudHN9IH0gKSB7CgogICAgICAgICAgICAjIGdldCB1c2VyIGRhdGEKICAgICAgICAgICAgbXkgJVVzZXJEYXRhID0gJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgICAgICBWYWxpZCAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgVVNFUklEIGlmICEkVXNlckRhdGF7VXNlcklEfTsKCiAgICAgICAgICAgIHB1c2ggQE5ld0NBQkFnZW50cywgJFVzZXJJRDsKICAgICAgICB9CgogICAgICAgICREYXRhe0NBQkFnZW50c30gPSBcQE5ld0NBQkFnZW50czsKICAgIH0KCiAgICAjIENoZWNrIGlmIENBQiBjdXN0b21lcnMgYXJlIHZhbGlkIGN1c3RvbWVycywgb3RoZXJ3aXNlIHJlbW92ZSB0aGVtLgogICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoICREYXRhe0NBQkN1c3RvbWVyc30gKSApIHsKCiAgICAgICAgbXkgQE5ld0NBQkN1c3RvbWVyczsKCiAgICAgICAgIyBnZXQgdGhlIHZhbGlkIGlkIGZvciAidmFsaWQiCiAgICAgICAgbXkgJFZhbGlkSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMb29rdXAoCiAgICAgICAgICAgIFZhbGlkID0+ICd2YWxpZCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBjdXN0b21lciB1c2VycwogICAgICAgIENVU1RPTUVSVVNFUjoKICAgICAgICBmb3IgbXkgJEN1c3RvbWVyVXNlciAoIEB7ICREYXRhe0NBQkN1c3RvbWVyc30gfSApIHsKCiAgICAgICAgICAgICMgZ2V0IGN1c3RvbWVyIHVzZXIgZGF0YQogICAgICAgICAgICBteSAlQ3VzdG9tZXJVc2VyRGF0YSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgICAgICBVc2VyICA9PiAkQ3VzdG9tZXJVc2VyLAogICAgICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgQ1VTVE9NRVJVU0VSIGlmICRDdXN0b21lclVzZXJEYXRhe1ZhbGlkSUR9IG5lICRWYWxpZElEOwoKICAgICAgICAgICAgcHVzaCBATmV3Q0FCQ3VzdG9tZXJzLCAkQ3VzdG9tZXJVc2VyOwogICAgICAgIH0KCiAgICAgICAgJERhdGF7Q0FCQ3VzdG9tZXJzfSA9IFxATmV3Q0FCQ3VzdG9tZXJzOwogICAgfQoKICAgICMgYWRkIHRoZSBjaGFuZ2UKICAgIG15ICRDaGFuZ2VJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZUFkZCgKICAgICAgICAlRGF0YSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgZXJyb3IgaGFuZGxpbmcKICAgIGlmICggISRDaGFuZ2VJRCApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgY3JlYXRlIGNoYW5nZSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICVJbmZvID0gKAogICAgICAgIElEICAgICAgICAgICAgID0+ICRDaGFuZ2VJRCwKICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgVGltZURpZmZlcmVuY2UgPT4gJERpZmZlcmVuY2UsCiAgICAgICAgT2xkQ2hhbmdlSUQgICAgPT4gJE9sZENoYW5nZUlELAogICAgKTsKCiAgICByZXR1cm4gJUluZm87Cn0KCj1pdGVtIF9HZXRUaW1lRGlmZmVyZW5jZSgpCgpJZiBhIG5ldyBwbGFubmVkIHN0YXJ0L2VuZCB0aW1lIHdhcyBnaXZlbiwgdGhlIGRpZmZlcmVuY2UgaXMgbmVlZGVkCnRvIG1vdmUgYWxsIHRpbWUgdmFsdWVzCgogICAgbXkgJERpZmZJblNlY29uZHMgPSAkVGVtcGxhdGVPYmplY3QtPl9HZXRUaW1lRGlmZmVyZW5jZSgKICAgICAgICBDdXJyZW50VGltZSAgICAgPT4gJzIwMTAtMDEtMTIgMDA6MDA6MDAnLAogICAgICAgIE5ld1RpbWVJbkVwb2NoZSA9PiAxMjM0NTY3ODkwLAogICAgKTsKCj1jdXQKCnN1YiBfR2V0VGltZURpZmZlcmVuY2UgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ3VycmVudFRpbWUgTmV3VGltZUluRXBvY2hlKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjdXJyZW50IHRpbWUgYXMgdGltZXN0YW1wCiAgICBteSAkQ3VycmVudFN5c3RlbVRpbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpLT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICBTdHJpbmcgPT4gJFBhcmFte0N1cnJlbnRUaW1lfSwKICAgICk7CgogICAgbXkgJERpZmZTZWNvbmRzID0gJFBhcmFte05ld1RpbWVJbkVwb2NoZX0gLSAkQ3VycmVudFN5c3RlbVRpbWU7CgogICAgcmV0dXJuICREaWZmU2Vjb25kczsKfQoKPWl0ZW0gX0F0dGFjaG1lbnRBZGQoKQoKQ3JlYXRlcyBuZXcgYXR0YWNobWVudHMgZm9yIGEgY2hhbmdlIG9yIGEgd29ya29yZGVyIGJhc2VkIG9uIHRoZSBnaXZlbiB0ZW1wbGF0ZS4KSXQgcmV0dXJucyBhIGhhc2ggb2YgaW5mb3JtYXRpb24gKHdpdGgganVzdCBvbmUga2V5IC0gIlN1Y2Nlc3MiKQoKICAgIG15ICVJbmZvID0gJFRlbXBsYXRlT2JqZWN0LT5fQXR0YWNobWVudEFkZCgKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgIyAuLi4gUGFyYW1zIGZvciBBdHRhY2htZW50QWRkCiAgICAgICAgfSwKICAgICAgICBDaGFuZ2VJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIF9BdHRhY2htZW50QWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBDaGFuZ2VJRCBEYXRhKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkQXR0YWNobWVudCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZUF0dGFjaG1lbnRHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJFBhcmFte09sZENoYW5nZUlEfSwKICAgICAgICBGaWxlbmFtZSA9PiAkUGFyYW17RGF0YX0tPntGaWxlbmFtZX0sCiAgICApOwoKICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlQXR0YWNobWVudEFkZCgKICAgICAgICAleyRBdHRhY2htZW50fSwKICAgICAgICBDaGFuZ2VJRCA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBteSAlSW5mbyA9ICgKICAgICAgICBTdWNjZXNzID0+ICRTdWNjZXNzLAogICAgKTsKCiAgICByZXR1cm4gJUluZm87Cn0KCj1pdGVtIF9MaW5rQWRkKCkKCkNyZWF0ZXMgbmV3IGxpbmtzIGZvciBhIGNoYW5nZSBvciBhIHdvcmtvcmRlciBiYXNlZCBvbiB0aGUgZ2l2ZW4gdGVtcGxhdGUuIEl0CnJldHVybnMgYSBoYXNoIG9mIGluZm9ybWF0aW9uICh3aXRoIGp1c3Qgb25lIGtleSAtICJTdWNjZXNzIikKCiAgICBteSAlSW5mbyA9ICRUZW1wbGF0ZU9iamVjdC0+X0xpbmtBZGQoCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICMgLi4uIFBhcmFtcyBmb3IgTGlua0FkZAogICAgICAgIH0sCiAgICAgICAgQ2hhbmdlSUQgICAgPT4gMSwKICAgICAgICBXb3JrT3JkZXJJRCA9PiAxMjMsICMgb3B0aW9uYWwKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBfTGlua0FkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgRGF0YSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFNvdXJjZUtleTsKCiAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1NvdXJjZU9iamVjdH0gZXEgJ0lUU01DaGFuZ2UnICkgewogICAgICAgICRTb3VyY2VLZXkgPSAkUGFyYW17Q2hhbmdlSUR9OwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17RGF0YX0tPntTb3VyY2VPYmplY3R9IGVxICdJVFNNV29ya09yZGVyJyApIHsKICAgICAgICAkU291cmNlS2V5ID0gJFBhcmFte1dvcmtPcmRlcklEfTsKICAgIH0KCiAgICBpZiAoICEkU291cmNlS2V5ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBXb3JrT3JkZXJJRCBvciBDaGFuZ2VJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+TGlua0FkZCgKICAgICAgICAleyAkUGFyYW17RGF0YX0gfSwKICAgICAgICBTb3VyY2VLZXkgPT4gJFNvdXJjZUtleSwKICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIG15ICVJbmZvID0gKAogICAgICAgIFN1Y2Nlc3MgPT4gJFN1Y2Nlc3MsCiAgICApOwoKICAgIHJldHVybiAlSW5mbzsKfQoKMTsKCj1lbmQgSW50ZXJuYWw6Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlOjpJVFNNQ29uZGl0aW9uOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpQZXJsOjpEdW1wZXIpCnVzZSBEYXRhOjpEdW1wZXI7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpUZW1wbGF0ZTo6SVRTTUNvbmRpdGlvbiAtIGFsbCB0ZW1wbGF0ZSBmdW5jdGlvbnMgZm9yIGNvbmRpdGlvbnMKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGZ1bmN0aW9ucyBmb3IgY29uZGl0aW9uIHRlbXBsYXRlcyBpbiBJVFNNQ2hhbmdlTWFuYWdlbWVudC4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlOjpJVFNNQ29uZGl0aW9uJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgc2V0IHRoZSBkZWJ1ZyBmbGFnCiAgICAkU2VsZi0+e0RlYnVnfSA9ICRQYXJhbXtEZWJ1Z30gfHwgMDsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFNlcmlhbGl6ZSgpCgpTZXJpYWxpemUgYSBjb25kaXRpb24uIFRoaXMgaXMgZG9uZSB3aXRoIERhdGE6OkR1bXBlci4gSXQgcmV0dXJucwphIHNlcmlhbGl6ZWQgc3RyaW5nIG9mIHRoZSBkYXRhc3RydWN0dXJlLiBUaGUgY29uZGl0aW9uIGFjdGlvbnMKYXJlICJ3cmFwcGVkIiB3aXRoaW4gYSBoYXNocmVmZXJlbmNlLi4uCgogICAgbXkgJFRlbXBsYXRlU3RyaW5nID0gJFRlbXBsYXRlT2JqZWN0LT5TZXJpYWxpemUoCiAgICAgICAgQ29uZGl0aW9uSUQgPT4gMSwKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgIFJldHVybiAgICAgID0+ICdIQVNIJywgIyAob3B0aW9uYWwpIEhBU0h8U1RSSU5HIGRlZmF1bHQgJ1NUUklORycKICAgICk7CgpyZXR1cm5zCgogICAgJ3tDb25kaXRpb25BZGQgPT4geyAuLi4gfX0nCgpJZiBwYXJhbWV0ZXIgQzxSZXR1cm4+IGlzIHNldCB0byBDPEhBU0g+LCB0aGUgUGVybCBkYXRhc3RydWN0dXJlCmlzIHJldHVybmVkCgogICAgewogICAgICAgIENvbmRpdGlvbkFkZCA9PiB7IC4uLiB9LAogICAgICAgIENoaWxkcmVuICAgICA9PiBbIC4uLiBdLAogICAgfQoKPWN1dAoKc3ViIFNlcmlhbGl6ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgQ29uZGl0aW9uSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgdmFsdWUgZm9yICdSZXR1cm4nCiAgICAkUGFyYW17UmV0dXJufSB8fD0gJ1NUUklORyc7CgogICAgIyBnZXQgY29uZGl0aW9uCiAgICBteSAkQ29uZGl0aW9uID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nKS0+Q29uZGl0aW9uR2V0KAogICAgICAgIENvbmRpdGlvbklEID0+ICRQYXJhbXtDb25kaXRpb25JRH0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJENvbmRpdGlvbjsKCiAgICAjIHRlbXBsYXRlcyBoYXZlIHRvIGJlIGFuIGFycmF5IHJlZmVyZW5jZTsKICAgIG15ICRPcmlnaW5hbERhdGEgPSB7IENvbmRpdGlvbkFkZCA9PiAkQ29uZGl0aW9uIH07CgogICAgIyBnZXQgZXhwcmVzc2lvbnMKICAgIG15ICRFeHByZXNzaW9ucyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJyktPkV4cHJlc3Npb25MaXN0KAogICAgICAgIENvbmRpdGlvbklEID0+ICRQYXJhbXtDb25kaXRpb25JRH0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApIHx8IFtdOwoKICAgICMgYWRkIGVhY2ggZXhwcmVzc2lvbiB0byBjb25kaXRpb24gZGF0YQogICAgZm9yIG15ICRFeHByZXNzaW9uSUQgKCBAeyRFeHByZXNzaW9uc30gKSB7CiAgICAgICAgbXkgJEV4cHJlc3Npb24gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicpLT5FeHByZXNzaW9uR2V0KAogICAgICAgICAgICBFeHByZXNzaW9uSUQgPT4gJEV4cHJlc3Npb25JRCwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIHB1c2ggQHsgJE9yaWdpbmFsRGF0YS0+e0NoaWxkcmVufSB9LCB7IEV4cHJlc3Npb25BZGQgPT4gJEV4cHJlc3Npb24gfTsKICAgIH0KCiAgICAjIGdldCBhY3Rpb25zCiAgICBteSAkQWN0aW9ucyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJyktPkFjdGlvbkxpc3QoCiAgICAgICAgQ29uZGl0aW9uSUQgPT4gJFBhcmFte0NvbmRpdGlvbklEfSwKICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICkgfHwgW107CgogICAgIyBhZGQgZWFjaCBhY3Rpb24gdG8gY29uZGl0aW9uIGRhdGEKICAgIGZvciBteSAkQWN0aW9uSUQgKCBAeyRBY3Rpb25zfSApIHsKICAgICAgICBteSAkQWN0aW9uID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nKS0+QWN0aW9uR2V0KAogICAgICAgICAgICBBY3Rpb25JRCA9PiAkQWN0aW9uSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIHB1c2ggQHsgJE9yaWdpbmFsRGF0YS0+e0NoaWxkcmVufSB9LCB7IEFjdGlvbkFkZCA9PiAkQWN0aW9uIH07CiAgICB9CgogICAgaWYgKCAkUGFyYW17UmV0dXJufSBlcSAnSEFTSCcgKSB7CiAgICAgICAgcmV0dXJuICRPcmlnaW5hbERhdGE7CiAgICB9CgogICAgIyBubyBpbmRlbnRhdGlvbiAoc2F2ZXMgc3BhY2UpCiAgICBsb2NhbCAkRGF0YTo6RHVtcGVyOjpJbmRlbnQgPSAwOwoKICAgICMgZG8gbm90IHVzZSBjcm9zcy1yZWZlcmVuY2luZwogICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6RGVlcGNvcHkgPSAxOwoKICAgICMgc2VyaWFsaXplIHRoZSBkYXRhIChkbyBub3QgdXNlICRWQVIxLCBidXQgJFRlbXBsYXRlRGF0YSBmb3IgRHVtcGVyIG91dHB1dCkKICAgIG15ICRTZXJpYWxpemVkRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPkR1bXAoICRPcmlnaW5hbERhdGEsICdiaW5hcnknICk7CgogICAgcmV0dXJuICRTZXJpYWxpemVkRGF0YTsKfQoKPWl0ZW0gRGVTZXJpYWxpemUoKQoKRGVTZXJpYWxpemUoKSBpcyBhIHdyYXBwZXIgZm9yIGFsbCB0aGUgX1hYWEFkZCBtZXRob2RzLgoKICAgIG15ICVJbmZvID0gJFRlbXBsYXRlT2JqZWN0LT5EZVNlcmlhbGl6ZSgKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgIyAuLi4gUGFyYW1zIGZvciBDb25kaXRpb25BZGQKICAgICAgICB9LAogICAgICAgIENoYW5nZUlEID0+IDEsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICBNZXRob2QgICA9PiAnQ29uZGl0aW9uQWRkJywKICAgICk7Cgo9Y3V0CgpzdWIgRGVTZXJpYWxpemUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIE1ldGhvZCBEYXRhKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRpc3BhdGNoIHRhYmxlCiAgICBteSAlTWV0aG9kMlN1YiA9ICgKICAgICAgICBDb25kaXRpb25BZGQgID0+ICdfQ29uZGl0aW9uQWRkJywKICAgICAgICBFeHByZXNzaW9uQWRkID0+ICdfRXhwcmVzc2lvbkFkZCcsCiAgICAgICAgQWN0aW9uQWRkICAgICA9PiAnX0FjdGlvbkFkZCcsCiAgICApOwoKICAgIG15ICRTdWIgPSAkTWV0aG9kMlN1YnsgJFBhcmFte01ldGhvZH0gfTsKCiAgICBpZiAoICEkU3ViICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnSW52YWxpZCBNZXRob2RuYW1lIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuICRTZWxmLT4kU3ViKCVQYXJhbSk7Cn0KCj1iZWdpbiBJbnRlcm5hbDoKCj1pdGVtIF9Db25kaXRpb25BZGQoKQoKQ3JlYXRlcyBuZXcgY29uZGl0aW9ucyBmb3IgYSBjaGFuZ2UgYmFzZWQgb24gdGhlIGdpdmVuIHRlbXBsYXRlLiBJdApyZXR1cm5zIGEgaGFzaCBvZiBpbmZvcm1hdGlvbiAoY2hhbmdlIGlkIGl0IHdhcyBjcmVhdGVkIGZvciwgaWQgaXMKdGhlIGNvbmRpdGlvbiBpZCkKCiAgICBteSAlSW5mbyA9ICRUZW1wbGF0ZU9iamVjdC0+X0NvbmRpdGlvbkFkZCgKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgIyAuLi4gUGFyYW1zIGZvciBDb25kaXRpb25BZGQKICAgICAgICB9LAogICAgICAgIENoYW5nZUlEID0+IDEsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgX0NvbmRpdGlvbkFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgQ2hhbmdlSUQgRGF0YSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJURhdGEgPSAleyAkUGFyYW17RGF0YX0gfTsKCiAgICAjIGRlbGV0ZSBhdHRyaWJ1dGVzCiAgICBkZWxldGUgJERhdGF7Q29uZGl0aW9uSUR9OwoKICAgICMgYWRkIGNvbmRpdGlvbgogICAgbXkgJENvbmRpdGlvbklEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nKS0+Q29uZGl0aW9uQWRkKAogICAgICAgICVEYXRhLAogICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtDaGFuZ2VJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIG15ICVJbmZvID0gKAogICAgICAgIElEICAgICAgICAgID0+ICRDb25kaXRpb25JRCwKICAgICAgICBDaGFuZ2VJRCAgICA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgIENvbmRpdGlvbklEID0+ICRDb25kaXRpb25JRCwKICAgICk7CgogICAgcmV0dXJuICVJbmZvOwp9Cgo9aXRlbSBfRXhwcmVzc2lvbkFkZCgpCgpDcmVhdGVzIG5ldyBleHByZXNzaW9ucyBmb3IgYSBjb25kaXRpb24gYmFzZWQgb24gdGhlIGdpdmVuIHRlbXBsYXRlLiBJdApyZXR1cm5zIGEgaGFzaCBvZiBpbmZvcm1hdGlvbiAoY2hhbmdlIGlkIGl0IHdhcyBjcmVhdGVkIGZvciwgaWQgaXMKdGhlIGV4cHJlc3Npb24gaWQpCgogICAgbXkgJUluZm8gPSAkVGVtcGxhdGVPYmplY3QtPl9FeHByZXNzaW9uQWRkKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAjIC4uLiBQYXJhbXMgZm9yIEV4cHJlc3Npb25BZGQKICAgICAgICB9LAogICAgICAgIENoYW5nZUlEID0+IDEsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgX0V4cHJlc3Npb25BZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIENoYW5nZUlEIERhdGEgQ29uZGl0aW9uSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICVEYXRhID0gJXsgJFBhcmFte0RhdGF9IH07CgogICAgIyBkZWxldGUgYXR0cmlidXRlcyB0aGF0IGFyZSBub3QgbmVlZGVkCiAgICBkZWxldGUgJERhdGF7RXhwcmVzc2lvbklEfTsKCiAgICAjIHJlcGxhY2Ugb2xkIGlkcyB3aXRoIG5ldyBpZHMKICAgICREYXRhe0NvbmRpdGlvbklEfSA9ICRQYXJhbXtDb25kaXRpb25JRH07CgogICAgIyByZXBsYWNlIG9sZCBpZCBvbmx5IGlmIGl0IGlzIGFuIElECiAgICBpZiAoICREYXRhe1NlbGVjdG9yfSA9fiBteyBcQSBcZCsgXHogfXhtcyApIHsKICAgICAgICBteSAkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nKS0+T2JqZWN0R2V0KAogICAgICAgICAgICBPYmplY3RJRCA9PiAkRGF0YXtPYmplY3RJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggJE9iamVjdC0+e05hbWV9IGVxICdJVFNNQ2hhbmdlJyApIHsKICAgICAgICAgICAgJERhdGF7U2VsZWN0b3J9ID0gJFBhcmFte0NoYW5nZUlEfTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkT2JqZWN0LT57TmFtZX0gZXEgJ0lUU01Xb3JrT3JkZXInICkgewogICAgICAgICAgICAkRGF0YXtTZWxlY3Rvcn0gPSAkUGFyYW17T2xkV29ya09yZGVySURzfS0+eyAkRGF0YXtTZWxlY3Rvcn0gfTsKICAgICAgICB9CiAgICB9CgogICAgIyBhZGQgZXhwcmVzc2lvbgogICAgbXkgJEV4cHJlc3Npb25JRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJyktPkV4cHJlc3Npb25BZGQoCiAgICAgICAgJURhdGEsCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBteSAlSW5mbyA9ICgKICAgICAgICBJRCAgICAgICAgICAgPT4gJEV4cHJlc3Npb25JRCwKICAgICAgICBDaGFuZ2VJRCAgICAgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICBFeHByZXNzaW9uSUQgPT4gJEV4cHJlc3Npb25JRCwKICAgICk7CgogICAgcmV0dXJuICVJbmZvOwp9Cgo9aXRlbSBfQWN0aW9uQWRkKCkKCkNyZWF0ZXMgbmV3IGFjdGlvbnMgZm9yIGEgY29uZGl0aW9uIGJhc2VkIG9uIHRoZSBnaXZlbiB0ZW1wbGF0ZS4gSXQKcmV0dXJucyBhIGhhc2ggb2YgaW5mb3JtYXRpb24gKGNoYW5nZSBpZCBpdCB3YXMgY3JlYXRlZCBmb3IsIGlkIGlzCnRoZSBhY3Rpb24gaWQpCgogICAgbXkgJUluZm8gPSAkVGVtcGxhdGVPYmplY3QtPl9BY3Rpb25BZGQoCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICMgLi4uIFBhcmFtcyBmb3IgQWN0aW9uQWRkCiAgICAgICAgfSwKICAgICAgICBDaGFuZ2VJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIF9BY3Rpb25BZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIENoYW5nZUlEIERhdGEgQ29uZGl0aW9uSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICVEYXRhID0gJXsgJFBhcmFte0RhdGF9IH07CgogICAgIyBkZWxldGUgYXR0cmlidXRlcyB0aGF0IGFyZSBub3QgbmVlZGVkCiAgICBkZWxldGUgJERhdGF7QWN0aW9uSUR9OwoKICAgICMgcmVwbGFjZSBvbGQgaWRzIHdpdGggbmV3IGlkcwogICAgJERhdGF7Q29uZGl0aW9uSUR9ID0gJFBhcmFte0NvbmRpdGlvbklEfTsKCiAgICAjIHJlcGxhY2Ugb2xkIGlkIG9ubHkgaWYgaXQgaXMgYW4gSUQKICAgIGlmICggJERhdGF7U2VsZWN0b3J9ID1+IG17IFxBIFxkKyBceiB9eG1zICkgewogICAgICAgIG15ICRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicpLT5PYmplY3RHZXQoCiAgICAgICAgICAgIE9iamVjdElEID0+ICREYXRhe09iamVjdElEfSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkT2JqZWN0LT57TmFtZX0gZXEgJ0lUU01DaGFuZ2UnICkgewogICAgICAgICAgICAkRGF0YXtTZWxlY3Rvcn0gPSAkUGFyYW17Q2hhbmdlSUR9OwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRPYmplY3QtPntOYW1lfSBlcSAnSVRTTVdvcmtPcmRlcicgKSB7CiAgICAgICAgICAgICREYXRhe1NlbGVjdG9yfSA9ICRQYXJhbXtPbGRXb3JrT3JkZXJJRHN9LT57ICREYXRhe1NlbGVjdG9yfSB9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGFkZCBhY3Rpb24KICAgIG15ICRBY3Rpb25JRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJyktPkFjdGlvbkFkZCgKICAgICAgICAlRGF0YSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIG15ICVJbmZvID0gKAogICAgICAgIElEICAgICAgID0+ICRBY3Rpb25JRCwKICAgICAgICBDaGFuZ2VJRCA9PiAkUGFyYW17Q2hhbmdlSUR9LAogICAgICAgIEFjdGlvbklEID0+ICRBY3Rpb25JRCwKICAgICk7CgogICAgcmV0dXJuICVJbmZvOwp9CgoxOwoKPWVuZCBJbnRlcm5hbDoKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlOjpJVFNNV29ya09yZGVyOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpQZXJsOjpEdW1wZXIpCnVzZSBEYXRhOjpEdW1wZXI7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVN0YXRlTWFjaGluZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpbWUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6VGVtcGxhdGU6OklUU01DaGFuZ2UgLSBhbGwgdGVtcGxhdGUgZnVuY3Rpb25zIGZvciB3b3Jrb3JkZXJzCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBmdW5jdGlvbnMgZm9yIHdvcmtvcmRlciB0ZW1wbGF0ZXMgaW4gSVRTTUNoYW5nZU1hbmFnZW1lbnQuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRUZW1wbGF0ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpUZW1wbGF0ZTo6SVRTTVdvcmtPcmRlcicpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIHNldCB0aGUgZGVidWcgZmxhZwogICAgJFNlbGYtPntEZWJ1Z30gPSAkUGFyYW17RGVidWd9IHx8IDA7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBTZXJpYWxpemUoKQoKU2VyaWFsaXplIGEgd29ya29yZGVyLiBUaGlzIGlzIGRvbmUgd2l0aCBEYXRhOjpEdW1wZXIuIEl0IHJldHVybnMKYSBzZXJpYWxpemVkIHN0cmluZyBvZiB0aGUgZGF0YXN0cnVjdHVyZS4gVGhlIHdvcmtvcmRlciBhY3Rpb25zCmFyZSAid3JhcHBlZCIgd2l0aGluIGEgaGFzaHJlZmVyZW5jZS4uLgoKICAgIG15ICRUZW1wbGF0ZVN0cmluZyA9ICRUZW1wbGF0ZU9iamVjdC0+U2VyaWFsaXplKAogICAgICAgIFdvcmtPcmRlcklEID0+IDEsCiAgICAgICAgU3RhdGVSZXNldCAgPT4gMSwgIyAob3B0aW9uYWwpIHJlc2V0IHRvIGRlZmF1bHQgc3RhdGUKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgIFJldHVybiAgICAgID0+ICdIQVNIJywgIyAob3B0aW9uYWwpIEhBU0h8U1RSSU5HIGRlZmF1bHQgJ1NUUklORycKICAgICk7CgpyZXR1cm5zCgogICAgJ3tXb3JrT3JkZXJBZGQgPT4geyBDaGFuZ2VJRCA9PiAxMjMsIC4uLiB9fScKCklmIHBhcmFtZXRlciBDPFJldHVybj4gaXMgc2V0IHRvIEM8SEFTSD4sIHRoZSBQZXJsIGRhdGFzdHJ1Y3R1cmUKaXMgcmV0dXJuZWQKCiAgICB7CiAgICAgICAgV29ya09yZGVyQWRkID0+IHsgLi4uIH0sCiAgICAgICAgQ2hpbGRyZW4gICAgID0+IFsgLi4uIF0sCiAgICB9Cgo9Y3V0CgpzdWIgU2VyaWFsaXplIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBXb3JrT3JkZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZSBmb3IgJ1JldHVybicKICAgICRQYXJhbXtSZXR1cm59IHx8PSAnU1RSSU5HJzsKCiAgICAjIGdldCB3b3Jrb3JkZXIKICAgIG15ICRXb3JrT3JkZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpLT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgV29ya09yZGVySUQgPT4gJFBhcmFte1dvcmtPcmRlcklEfSwKICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkV29ya09yZGVyOwoKICAgICMga2VlcCBqdXN0IHdhbnRlZCBhdHRyaWJ1dGVzCiAgICBteSAkQ2xlYW5Xb3JrT3JkZXI7CiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAoCiAgICAgICAgcXcoCiAgICAgICAgV29ya09yZGVySUQgQ2hhbmdlSUQgV29ya09yZGVyTnVtYmVyIFdvcmtPcmRlclRpdGxlIEluc3RydWN0aW9uCiAgICAgICAgUmVwb3J0IFdvcmtPcmRlclN0YXRlSUQgV29ya09yZGVyVHlwZUlEIFdvcmtPcmRlckFnZW50SUQKICAgICAgICBQbGFubmVkU3RhcnRUaW1lIFBsYW5uZWRFbmRUaW1lIEFjdHVhbFN0YXJ0VGltZSBBY3R1YWxFbmRUaW1lIEFjY291bnRlZFRpbWUgUGxhbm5lZEVmZm9ydAogICAgICAgIENyZWF0ZVRpbWUgQ3JlYXRlQnkgQ2hhbmdlVGltZSBDaGFuZ2VCeSkKICAgICAgICApCiAgICB7CiAgICAgICAgJENsZWFuV29ya09yZGVyLT57JEF0dHJpYnV0ZX0gPSAkV29ya09yZGVyLT57JEF0dHJpYnV0ZX07CiAgICB9CgogICAgIyByZXNldCB3b3Jrb3JkZXIgc3RhdGUgdG8gZGVmYXVsdCBpZiByZXF1ZXN0ZWQKICAgIGlmICggJFBhcmFte1N0YXRlUmVzZXR9ICkgewoKICAgICAgICAjIGdldCBpbml0aWFsIHdvcmtvcmRlciBzdGF0ZSBpZAogICAgICAgIG15ICROZXh0U3RhdGVJRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVN0YXRlTWFjaGluZScpLT5TdGF0ZVRyYW5zaXRpb25HZXQoCiAgICAgICAgICAgIFN0YXRlSUQgPT4gMCwKICAgICAgICAgICAgQ2xhc3MgICA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpTdGF0ZScsCiAgICAgICAgKTsKICAgICAgICAkQ2xlYW5Xb3JrT3JkZXItPntXb3JrT3JkZXJTdGF0ZUlEfSA9ICROZXh0U3RhdGVJRHMtPlswXTsKCiAgICAgICAgIyByZXNldCBhY3R1YWwgc3RhcnQgYW5kIGVuZCB0aW1lCiAgICAgICAgJENsZWFuV29ya09yZGVyLT57QWN0dWFsU3RhcnRUaW1lfSA9IHVuZGVmOwogICAgICAgICRDbGVhbldvcmtPcmRlci0+e0FjdHVhbEVuZFRpbWV9ICAgPSB1bmRlZjsKICAgIH0KCiAgICAjIGFkZCB3b3Jrb3JkZXIgZmllbGRzIHRvIGxpc3Qgb2Ygd2FudGVkIGF0dHJpYnV0ZQogICAgQVRUUklCVVRFOgogICAgZm9yIG15ICRBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXskV29ya09yZGVyfSApIHsKCiAgICAgICAgIyBmaW5kIHRoZSB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZCBhdHRyaWJ1dGVzCiAgICAgICAgaWYgKCAkQXR0cmlidXRlID1+IG17IFxBIER5bmFtaWNGaWVsZF8uKiBceiB9eG1zICkgewoKICAgICAgICAgICAgJENsZWFuV29ya09yZGVyLT57JEF0dHJpYnV0ZX0gPSAkV29ya09yZGVyLT57JEF0dHJpYnV0ZX07CiAgICAgICAgfQogICAgfQoKICAgICMgdGVtcGxhdGVzIGhhdmUgdG8gYmUgYW4gYXJyYXkgcmVmZXJlbmNlOwogICAgbXkgJE9yaWdpbmFsRGF0YSA9IHsgV29ya09yZGVyQWRkID0+ICRDbGVhbldvcmtPcmRlciB9OwoKICAgICMgZ2V0IGF0dGFjaG1lbnRzCiAgICBteSBAV29ya09yZGVyQXR0YWNobWVudHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpLT5Xb3JrT3JkZXJBdHRhY2htZW50TGlzdCgKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVyLT57V29ya09yZGVySUR9LAogICAgKTsKCiAgICBmb3IgbXkgJEZpbGVuYW1lIChAV29ya09yZGVyQXR0YWNobWVudHMpIHsKCiAgICAgICAgIyBzYXZlIGF0dGFjaG1lbnRzIHRvIHRoaXMgdGVtcGxhdGUKICAgICAgICBwdXNoIEB7ICRPcmlnaW5hbERhdGEtPntDaGlsZHJlbn0gfSwgeyBBdHRhY2htZW50QWRkID0+IHsgRmlsZW5hbWUgPT4gJEZpbGVuYW1lIH0gfTsKICAgIH0KCiAgICAjIGdldCBsaW5rcyB0byBvdGhlciBvYmplY3QKICAgIG15ICRMaW5rTGlzdFdpdGhEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICBPYmplY3QgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgIEtleSAgICA9PiAkV29ya09yZGVyLT57V29ya09yZGVySUR9LAogICAgICAgIFN0YXRlICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgZm9yIG15ICRUYXJnZXRPYmplY3QgKCBzb3J0IGtleXMgJXskTGlua0xpc3RXaXRoRGF0YX0gKSB7CiAgICAgICAgZm9yIG15ICRUeXBlICggc29ydCBrZXlzICV7ICRMaW5rTGlzdFdpdGhEYXRhLT57JFRhcmdldE9iamVjdH0gfSApIHsKICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXsgJExpbmtMaXN0V2l0aERhdGEtPnskVGFyZ2V0T2JqZWN0fS0+eyRUeXBlfSB9ICkgewogICAgICAgICAgICAgICAgZm9yIG15ICRUYXJnZXRJRCAoCiAgICAgICAgICAgICAgICAgICAgc29ydCBrZXlzICV7ICRMaW5rTGlzdFdpdGhEYXRhLT57JFRhcmdldE9iamVjdH0tPnskVHlwZX0tPnskS2V5fSB9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICRMaW5rSW5mbyA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlT2JqZWN0ID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlS2V5ICAgID0+ICRXb3JrT3JkZXItPntXb3JrT3JkZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldE9iamVjdCA9PiAkVGFyZ2V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXRLZXkgICAgPT4gJFRhcmdldElELAogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICBwdXNoIEB7ICRPcmlnaW5hbERhdGEtPntDaGlsZHJlbn0gfSwgeyBMaW5rQWRkID0+ICRMaW5rSW5mbyB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJFBhcmFte1JldHVybn0gZXEgJ0hBU0gnICkgewogICAgICAgIHJldHVybiAkT3JpZ2luYWxEYXRhOwogICAgfQoKICAgICMgbm8gaW5kZW50YXRpb24gKHNhdmVzIHNwYWNlKQogICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6SW5kZW50ID0gMDsKCiAgICAjIGRvIG5vdCB1c2UgY3Jvc3MtcmVmZXJlbmNpbmcKICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OkRlZXBjb3B5ID0gMTsKCiAgICAjIHNlcmlhbGl6ZSB0aGUgZGF0YSAoZG8gbm90IHVzZSAkVkFSMSwgYnV0ICRUZW1wbGF0ZURhdGEgZm9yIER1bXBlciBvdXRwdXQpCiAgICBteSAkU2VyaWFsaXplZERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5EdW1wKCAkT3JpZ2luYWxEYXRhLCAnYmluYXJ5JyApOwoKICAgIHJldHVybiAkU2VyaWFsaXplZERhdGE7Cn0KCj1pdGVtIERlU2VyaWFsaXplKCkKCkRlU2VyaWFsaXplKCkgaXMgYSB3cmFwcGVyIGZvciBhbGwgdGhlIF9YWFhBZGQgbWV0aG9kcy4KCiAgICBteSAlSW5mbyA9ICRUZW1wbGF0ZU9iamVjdC0+RGVTZXJpYWxpemUoCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICMgLi4uIFBhcmFtcyBmb3IgV29ya09yZGVyQWRkCiAgICAgICAgfSwKICAgICAgICBDaGFuZ2VJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgTWV0aG9kICAgPT4gJ1dvcmtPcmRlckFkZCcsCiAgICApOwoKPWN1dAoKc3ViIERlU2VyaWFsaXplIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBNZXRob2QgRGF0YSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkaXNwYXRjaCB0YWJsZQogICAgbXkgJU1ldGhvZDJTdWIgPSAoCiAgICAgICAgV29ya09yZGVyQWRkICA9PiAnX1dvcmtPcmRlckFkZCcsCiAgICAgICAgQXR0YWNobWVudEFkZCA9PiAnX0F0dGFjaG1lbnRBZGQnLAogICAgICAgIExpbmtBZGQgICAgICAgPT4gJ19MaW5rQWRkJywKICAgICk7CgogICAgbXkgJFN1YiA9ICRNZXRob2QyU3VieyAkUGFyYW17TWV0aG9kfSB9OwoKICAgIGlmICggISRTdWIgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdJbnZhbGlkIE1ldGhvZG5hbWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByZXR1cm4gJFNlbGYtPiRTdWIoJVBhcmFtKTsKfQoKPWl0ZW0gX1dvcmtPcmRlckFkZCgpCgpDcmVhdGVzIGEgbmV3IHdvcmtvcmRlciBiYXNlZCBvbiBhIHRlbXBsYXRlLiBJdCByZXR1cm5zIHRoZQpjaGFuZ2UgaWQgaXQgd2FzIGNyZWF0ZWQgZm9yIGFuZCB0aGUgbmV3IHdvcmtvcmRlciBpZC4KCiAgICBteSAoICRDaGFuZ2VJRCwgJFdvcmtPcmRlcklEICkgPSAkVGVtcGxhdGVPYmplY3QtPl9Xb3JrT3JkZXJBZGQoCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICd0ZXN0JywKICAgICAgICB9LAogICAgICAgIENoYW5nZUlEICAgICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgX1dvcmtPcmRlckFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgQ2hhbmdlSUQgRGF0YSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBtYWtlIGEgbG9jYWwgY29weQogICAgbXkgJURhdGEgPSAleyAkUGFyYW17RGF0YX0gfTsKCiAgICAjIHdlIG5lZWQgdGhlIG9sZCBjaGFuZ2UgaWQgZm9yIGV4cHJlc3Npb25zCiAgICBteSAkT2xkV29ya09yZGVySUQgPSAkRGF0YXtXb3JrT3JkZXJJRH07CgogICAgIyB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSwgc28gZG9uJ3QgcGFzcyB0aGVtIHRvIFdvcmtPcmRlckFkZCgpCiAgICBkZWxldGUgQERhdGF7cXcoV29ya09yZGVySUQgQ3JlYXRlVGltZSBDcmVhdGVCeSBDaGFuZ2VUaW1lIENoYW5nZUJ5KX07CiAgICBkZWxldGUgQERhdGF7cXcoSW5zdHJ1Y3Rpb25QbGFpbiBSZXBvcnRQbGFpbil9OwoKICAgICMgZGVsZXRlIGFsbCBwYXJhbWV0ZXJzIHdob3NlIHZhbHVlcyBhcmUgJ3VuZGVmJwogICAgIyBfQ2hlY2tXb3JrT3JkZXJQYXJhbXMgdGhyb3dzIGFuIGVycm9yIG90aGVyd2lzZQogICAgZm9yIG15ICRQYXJhbWV0ZXIgKCBzb3J0IGtleXMgJURhdGEgKSB7CiAgICAgICAgZGVsZXRlICREYXRheyRQYXJhbWV0ZXJ9IGlmICFkZWZpbmVkICREYXRheyRQYXJhbWV0ZXJ9OwogICAgfQoKICAgICMgeHh4KD86U3RhcnR8RW5kKVRpbWVzIGFyZSBlbXB0eSBzdHJpbmdzIG9uIFdvcmtPcmRlckdldCB3aGVuCiAgICAjIG5vIHRpbWUgdmFsdWUgaXMgc2V0LiBUaGlzIGNvbmZ1c2VzIF9DaGVja1RpbWVzdGFtcHMuIFRodXMKICAgICMgZGVsZXRlIHRoZXNlIHBhcmFtZXRlcnMuCiAgICBmb3IgbXkgJFByZWZpeCAocXcoQWN0dWFsIFBsYW5uZWQpKSB7CiAgICAgICAgZm9yIG15ICRTdWZmaXggKHF3KFN0YXJ0IEVuZCkpIHsKICAgICAgICAgICAgaWYgKCAhJERhdGF7IiRQcmVmaXgke1N1ZmZpeH1UaW1lIn0gKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgJERhdGF7IiRQcmVmaXgke1N1ZmZpeH1UaW1lIn07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBtb3ZlIHRpbWUgc2xvdCBmb3Igd29ya29yZGVyIGlmIG5lY2Nlc3NhcnkKICAgIG15ICREaWZmZXJlbmNlID0gJFBhcmFte1RpbWVEaWZmZXJlbmNlfTsKICAgIGlmICggJERpZmZlcmVuY2UgfHwgJFBhcmFte05ld1RpbWVJbkVwb2NoZX0gKSB7CgogICAgICAgICMgY2FsYyBuZXcgdmFsdWVzIGZvciBzdGFydCBhbmQgZW5kIHRpbWUKICAgICAgICBmb3IgbXkgJFN1ZmZpeCAocXcoU3RhcnQgRW5kKSkgewoKICAgICAgICAgICAgaWYgKCAkRGF0YXsiUGxhbm5lZCR7U3VmZml4fVRpbWUifSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBkaWZmZXJlbmNlIGlmIG5vdCBhbHJlYWR5IGNhbGN1bGF0ZWQgKGFsbG93IHplcm8gZGlmZmVyZW5jZSkKICAgICAgICAgICAgICAgIGlmICggIWRlZmluZWQgJERpZmZlcmVuY2UgJiYgJFBhcmFte05ld1RpbWVJbkVwb2NoZX0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgdGltZSBuZWVkcyB0byBiZSBjb3JyZWN0ZWQgaWYgdGhlIG1vdmUgdGltZSB0eXBlIGlzIHRoZSBwbGFubmVkIGVuZCB0aW1lCiAgICAgICAgICAgICAgICAgICAgbXkgJFdvcmtPcmRlckxlbmd0aEluU2Vjb25kcyA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17TW92ZVRpbWVUeXBlfSBlcSAnUGxhbm5lZEVuZFRpbWUnICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgIyBjYWxjdWxhdGUgdGhlIG9sZCBwbGFubmVkIHN0YXJ0IHRpbWUgaW50byBlcG9jaCBzZWNvbmRzCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRPbGRQbGFubmVkU3RhcnRUaW1lSW5TZWNvbmRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyktPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICREYXRhe1BsYW5uZWRTdGFydFRpbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgY2FsY3VsYXRlIHRoZSBvbGQgcGxhbm5lZCBlbmQgdGltZSBpbnRvIGVwb2NoIHNlY29uZHMKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJE9sZFBsYW5uZWRFbmRUaW1lSW5TZWNvbmRzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJERhdGF7UGxhbm5lZEVuZFRpbWV9LAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgdGltZSBsZW5ndGggb2YgdGhlIHdvcmtvcmRlciBpbiBzZWNvbmRzCiAgICAgICAgICAgICAgICAgICAgICAgICRXb3JrT3JkZXJMZW5ndGhJblNlY29uZHMgPSAkT2xkUGxhbm5lZEVuZFRpbWVJblNlY29uZHMgLSAkT2xkUGxhbm5lZFN0YXJ0VGltZUluU2Vjb25kczsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgY2FsY3VsYXRlIHRoZSB0aW1lIGRpZmZlcmVuY2UKICAgICAgICAgICAgICAgICAgICAkRGlmZmVyZW5jZSA9ICRTZWxmLT5fR2V0VGltZURpZmZlcmVuY2UoCiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRUaW1lICAgICA9PiAkRGF0YXsiUGxhbm5lZCR7U3VmZml4fVRpbWUifSwKICAgICAgICAgICAgICAgICAgICAgICAgTmV3VGltZUluRXBvY2hlID0+ICRQYXJhbXtOZXdUaW1lSW5FcG9jaGV9IC0gJFdvcmtPcmRlckxlbmd0aEluU2Vjb25kcywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZ2V0IG5ldyB2YWx1ZQogICAgICAgICAgICAgICAgJERhdGF7IlBsYW5uZWQke1N1ZmZpeH1UaW1lIn0gPSAkU2VsZi0+X01vdmVUaW1lKAogICAgICAgICAgICAgICAgICAgIEN1cnJlbnRUaW1lID0+ICREYXRheyJQbGFubmVkJHtTdWZmaXh9VGltZSJ9LAogICAgICAgICAgICAgICAgICAgIERpZmZlcmVuY2UgID0+ICREaWZmZXJlbmNlLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICREYXRhe1dvcmtPcmRlckFnZW50SUR9ICkgewoKICAgICAgICAjIENoZWNrIGlmIHRoZSB3b3Jrb3JkZXIgYWdlbnQgaXMgc3RpbGwgdmFsaWQsIGxlYXZlIGVtcHR5IGlmIG5vdAogICAgICAgIG15ICVVc2VyRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgPT4gJERhdGF7V29ya09yZGVyQWdlbnRJRH0sCiAgICAgICAgICAgIFZhbGlkICA9PiAxLAogICAgICAgICk7CgogICAgICAgIGlmICggISRVc2VyRGF0YXtVc2VySUR9ICkgewogICAgICAgICAgICBkZWxldGUgJERhdGF7V29ya09yZGVyQWdlbnRJRH07CiAgICAgICAgfQogICAgfQoKICAgICMgb3ZlcnJpZGUgdGhlIGNoYW5nZSBpZCBmcm9tIHRoZSB0ZW1wbGF0ZQogICAgbXkgJFdvcmtPcmRlcklEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyQWRkKAogICAgICAgICVEYXRhLAogICAgICAgIE5vTnVtYmVyQ2FsYyA9PiAkUGFyYW17Tm9OdW1iZXJDYWxjfSwKICAgICAgICBDaGFuZ2VJRCAgICAgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgd2UgbmVlZCBhIG1hcHBpbmcgIm9sZCBpZCIgdG8gIm5ldyBpZCIgZm9yIHRoZSBjb25kaXRpb25zCiAgICBteSAkT2xkSURzMk5ld0lEcyA9IHsKICAgICAgICAleyAkUGFyYW17T2xkV29ya09yZGVySURzfSB8fCB7fSB9LAogICAgICAgICRPbGRXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICB9OwoKICAgIG15ICVJbmZvID0gKAogICAgICAgIElEICAgICAgICAgICAgICA9PiAkV29ya09yZGVySUQsCiAgICAgICAgV29ya09yZGVySUQgICAgID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICBDaGFuZ2VJRCAgICAgICAgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICBPbGRXb3JrT3JkZXJJRHMgPT4gJE9sZElEczJOZXdJRHMsCiAgICApOwoKICAgIHJldHVybiAlSW5mbzsKfQoKPWJlZ2luIEludGVybmFsOgoKPWl0ZW0gX0dldFRpbWVEaWZmZXJlbmNlKCkKCklmIGEgbmV3IHBsYW5uZWQgc3RhcnQvZW5kIHRpbWUgd2FzIGdpdmVuLCB0aGUgZGlmZmVyZW5jZSBpcyBuZWVkZWQKdG8gbW92ZSBhbGwgdGltZSB2YWx1ZXMKCiAgICBteSAkRGlmZkluU2Vjb25kcyA9ICRUZW1wbGF0ZU9iamVjdC0+X0dldFRpbWVEaWZmZXJlbmNlKAogICAgICAgIEN1cnJlbnRUaW1lICAgICA9PiAnMjAxMC0wMS0xMiAwMDowMDowMCcsCiAgICAgICAgTmV3VGltZUluRXBvY2hlID0+IDEyMzQ1Njc4OTAsCiAgICApOwoKPWN1dAoKc3ViIF9HZXRUaW1lRGlmZmVyZW5jZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDdXJyZW50VGltZSBOZXdUaW1lSW5FcG9jaGUpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGN1cnJlbnQgdGltZSBhcyB0aW1lc3RhbXAKICAgIG15ICRDdXJyZW50U3lzdGVtVGltZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyktPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgIFN0cmluZyA9PiAkUGFyYW17Q3VycmVudFRpbWV9LAogICAgKTsKCiAgICBteSAkRGlmZlNlY29uZHMgPSAkUGFyYW17TmV3VGltZUluRXBvY2hlfSAtICRDdXJyZW50U3lzdGVtVGltZTsKCiAgICByZXR1cm4gJERpZmZTZWNvbmRzOwp9Cgo9aXRlbSBfTW92ZVRpbWUoKQoKVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbmV3IHZhbHVlIGZvciBhIHRpbWUgY29sdW1uIGJhc2VkIG9uIHRoZQpkaWZmZXJlbmNlLgoKICAgIG15ICRUaW1lVmFsdWUgPSAkVGVtcGxhdGVPYmplY3QtPl9Nb3ZlVGltZSgKICAgICAgICBDdXJyZW50VGltZSA9PiAnMjAxMC0wMS0xMiAwMDowMDowMCcsCiAgICAgICAgRGlmZmVyZW5jZSAgPT4gMTM1LCAgICAgICAgICAgICAgICAgICAgICMgaW4gc2Vjb25kcwogICAgKTsKCj1jdXQKCnN1YiBfTW92ZVRpbWUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgIyBuZWVkIHRvIGNoZWNrIGZvciBkZWZpbmVkLCBiZWNhdXNlIDAgaXMgYWxsb3dlZCBmb3IgRGlmZmVyZW5jZQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ3VycmVudFRpbWUgRGlmZmVyZW5jZSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjdXJyZW50IHRpbWUgYXMgdGltZXN0YW1wCiAgICBteSAkQ3VycmVudFN5c3RlbVRpbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpLT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICBTdHJpbmcgPT4gJFBhcmFte0N1cnJlbnRUaW1lfSwKICAgICk7CgogICAgIyBnZXQgcGxhbm5lZCB0aW1lIGFzIHRpbWVzdGFtcAogICAgbXkgJE5ld1RpbWUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpLT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCgKICAgICAgICBTeXN0ZW1UaW1lID0+ICRDdXJyZW50U3lzdGVtVGltZSArICRQYXJhbXtEaWZmZXJlbmNlfSwKICAgICk7CgogICAgcmV0dXJuICROZXdUaW1lOwp9Cgo9aXRlbSBfQXR0YWNobWVudEFkZCgpCgpDcmVhdGVzIG5ldyBhdHRhY2htZW50cyBmb3IgYSBjaGFuZ2Ugb3IgYSB3b3Jrb3JkZXIgYmFzZWQgb24gdGhlIGdpdmVuIHRlbXBsYXRlLgpJdCByZXR1cm5zIGEgaGFzaCBvZiBpbmZvcm1hdGlvbiAod2l0aCBqdXN0IG9uZSBrZXkgLSAiU3VjY2VzcyIpCgogICAgbXkgJUluZm8gPSAkVGVtcGxhdGVPYmplY3QtPl9BdHRhY2htZW50QWRkKAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAjIC4uLiBQYXJhbXMgZm9yIEF0dGFjaG1lbnRBZGQKICAgICAgICB9LAogICAgICAgIENoYW5nZUlEID0+IDEsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgX0F0dGFjaG1lbnRBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIENoYW5nZUlEIERhdGEpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgYnVpbGQgYSBsb29rdXAgaGFzaCBmcm9tIG5ldyB3b3Jrb3JkZXIgaWQgdG8gb2xkIHdvcmtvcmRlciBpZAogICAgbXkgJU5ld1dvcmtPcmRlcklEMk9sZFdvcmtPcmRlcklEID0gcmV2ZXJzZSAleyAkUGFyYW17T2xkV29ya09yZGVySURzfSB9OwoKICAgIG15ICRPbGRXb3JrT3JkZXJJRCA9ICROZXdXb3JrT3JkZXJJRDJPbGRXb3JrT3JkZXJJRHsgJFBhcmFte1dvcmtPcmRlcklEfSB9OwoKICAgIG15ICRBdHRhY2htZW50ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyQXR0YWNobWVudEdldCgKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkT2xkV29ya09yZGVySUQsCiAgICAgICAgRmlsZW5hbWUgICAgPT4gJFBhcmFte0RhdGF9LT57RmlsZW5hbWV9LAogICAgKTsKCiAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlckF0dGFjaG1lbnRBZGQoCiAgICAgICAgJXskQXR0YWNobWVudH0sCiAgICAgICAgQ2hhbmdlSUQgICAgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkUGFyYW17V29ya09yZGVySUR9LAogICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBteSAlSW5mbyA9ICgKICAgICAgICBTdWNjZXNzID0+ICRTdWNjZXNzLAogICAgKTsKCiAgICByZXR1cm4gJUluZm87Cn0KCj1pdGVtIF9MaW5rQWRkKCkKCkNyZWF0ZXMgbmV3IGxpbmtzIGZvciBhIGNoYW5nZSBvciBhIHdvcmtvcmRlciBiYXNlZCBvbiB0aGUgZ2l2ZW4gdGVtcGxhdGUuIEl0CnJldHVybnMgYSBoYXNoIG9mIGluZm9ybWF0aW9uICh3aXRoIGp1c3Qgb25lIGtleSAtICJTdWNjZXNzIikKCiAgICBteSAlSW5mbyA9ICRUZW1wbGF0ZU9iamVjdC0+X0xpbmtBZGQoCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICMgLi4uIFBhcmFtcyBmb3IgTGlua0FkZAogICAgICAgIH0sCiAgICAgICAgQ2hhbmdlSUQgICAgPT4gMSwKICAgICAgICBXb3JrT3JkZXJJRCA9PiAxMjMsICMgb3B0aW9uYWwKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBfTGlua0FkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgRGF0YSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFNvdXJjZUtleTsKCiAgICBpZiAoICRQYXJhbXtEYXRhfS0+e1NvdXJjZU9iamVjdH0gZXEgJ0lUU01DaGFuZ2UnICkgewogICAgICAgICRTb3VyY2VLZXkgPSAkUGFyYW17Q2hhbmdlSUR9OwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17RGF0YX0tPntTb3VyY2VPYmplY3R9IGVxICdJVFNNV29ya09yZGVyJyApIHsKICAgICAgICAkU291cmNlS2V5ID0gJFBhcmFte1dvcmtPcmRlcklEfTsKICAgIH0KCiAgICBpZiAoICEkU291cmNlS2V5ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBXb3JrT3JkZXJJRCBvciBDaGFuZ2VJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+TGlua0FkZCgKICAgICAgICAleyAkUGFyYW17RGF0YX0gfSwKICAgICAgICBTb3VyY2VLZXkgPT4gJFNvdXJjZUtleSwKICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIG15ICVJbmZvID0gKAogICAgICAgIFN1Y2Nlc3MgPT4gJFN1Y2Nlc3MsCiAgICApOwoKICAgIHJldHVybiAlSW5mbzsKfQoKMTsKCj1lbmQgSW50ZXJuYWw6Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3Q6OklUU01DaGFuZ2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbC9TeXN0ZW0vTGlua09iamVjdC9JVFNNQ2hhbmdlLnBtIC0gTGlua09iamVjdCBiYWNrZW5kIGZvciBJVFNNQ2hhbmdlCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJExpbmtPYmplY3RJVFNNQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3Q6OklUU01DaGFuZ2UnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBMaW5rTGlzdFdpdGhEYXRhKCkKCmZpbGwgdXAgdGhlIGxpbmsgbGlzdCB3aXRoIGRhdGEKCiAgICAkU3VjY2VzcyA9ICRMaW5rT2JqZWN0QmFja2VuZC0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICBMaW5rTGlzdCA9PiAkSGFzaFJlZiwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rTGlzdFdpdGhEYXRhIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KExpbmtMaXN0IFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBsaW5rIGxpc3QKICAgIGlmICggcmVmICRQYXJhbXtMaW5rTGlzdH0gbmUgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTGlua0xpc3QgbXVzdCBiZSBhIGhhc2ggcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyAkUGFyYW17TGlua0xpc3R9IH0gKSB7CgogICAgICAgIGZvciBteSAkRGlyZWN0aW9uICggc29ydCBrZXlzICV7ICRQYXJhbXtMaW5rTGlzdH0tPnskTGlua1R5cGV9IH0gKSB7CgogICAgICAgICAgICBDSEFOR0VJRDoKICAgICAgICAgICAgZm9yIG15ICRDaGFuZ2VJRCAoIHNvcnQga2V5cyAleyAkUGFyYW17TGlua0xpc3R9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259IH0gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgY2hhbmdlIGRhdGEKICAgICAgICAgICAgICAgIG15ICRDaGFuZ2VEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlR2V0KAogICAgICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyByZW1vdmUgaWQgZnJvbSBoYXNoIGlmIENoYW5nZUdldCgpIHJldHVybnMgbm8gcmVzdWx0cwogICAgICAgICAgICAgICAgaWYgKCAhJENoYW5nZURhdGEgKSB7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRQYXJhbXtMaW5rTGlzdH0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn0tPnskQ2hhbmdlSUR9OwogICAgICAgICAgICAgICAgICAgIG5leHQgQ0hBTkdFSUQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBhZGQgY2hhbmdlIGRhdGEKICAgICAgICAgICAgICAgICRQYXJhbXtMaW5rTGlzdH0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn0tPnskQ2hhbmdlSUR9ID0gJENoYW5nZURhdGE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIE9iamVjdFBlcm1pc3Npb24oKQoKY2hlY2tzIHJlYWQgcGVybWlzc2lvbiBmb3IgYSBnaXZlbiBvYmplY3QgYW5kIFVzZXJJRC4KCiAgICAkUGVybWlzc2lvbiA9ICRMaW5rT2JqZWN0LT5PYmplY3RQZXJtaXNzaW9uKAogICAgICAgIE9iamVjdCAgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgIEtleSAgICAgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0UGVybWlzc2lvbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhPYmplY3QgS2V5IFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgY29uZmlnIG9mIGNoYW5nZSB6b29tIGZyb250ZW5kIG1vZHVsZQogICAgJFNlbGYtPntDb25maWd9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRJVFNNQ2hhbmdlWm9vbScpOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbnMKICAgIG15ICRBY2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5QZXJtaXNzaW9uKAogICAgICAgIFR5cGUgICAgID0+ICRTZWxmLT57Q29uZmlnfS0+e1Blcm1pc3Npb259LAogICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtLZXl9LAogICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gJEFjY2VzczsKfQoKPWl0ZW0gT2JqZWN0RGVzY3JpcHRpb25HZXQoKQoKcmV0dXJuIGEgaGFzaCBvZiBvYmplY3QgZGVzY3JpcHRpb25zCgpSZXR1cm4KICAgICVEZXNjcmlwdGlvbiA9ICgKICAgICAgICBOb3JtYWwgPT4gIkNoYW5nZSMgMjAwOTEwMjExMDAwMTY3NCIsCiAgICAgICAgTG9uZyAgID0+ICJDaGFuZ2UjIDIwMDkxMDIxMTAwMDE2NzQ6IFRoZSBDaGFuZ2UgVGl0bGUiLAogICAgKTsKCiAgICAlRGVzY3JpcHRpb24gPSAkTGlua09iamVjdC0+T2JqZWN0RGVzY3JpcHRpb25HZXQoCiAgICAgICAgS2V5ICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3REZXNjcmlwdGlvbkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhPYmplY3QgS2V5IFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgZGVzY3JpcHRpb24KICAgIG15ICVEZXNjcmlwdGlvbiA9ICgKICAgICAgICBOb3JtYWwgPT4gJ0NoYW5nZScsCiAgICAgICAgTG9uZyAgID0+ICdDaGFuZ2UnLAogICAgKTsKCiAgICByZXR1cm4gJURlc2NyaXB0aW9uIGlmICRQYXJhbXtNb2RlfSAmJiAkUGFyYW17TW9kZX0gZXEgJ1RlbXBvcmFyeSc7CgogICAgIyBnZXQgY2hhbmdlIGRhdGEKICAgIG15ICRDaGFuZ2VEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtLZXl9LAogICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISRDaGFuZ2VEYXRhOwogICAgcmV0dXJuIGlmICEleyRDaGFuZ2VEYXRhfTsKCiAgICAjIGRlZmluZSBkZXNjcmlwdGlvbiB0ZXh0CiAgICBteSAkQ2hhbmdlSG9vayAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ2hhbmdlOjpIb29rJyk7CiAgICBteSAkRGVzY3JpcHRpb25UZXh0ID0gIiRDaGFuZ2VIb29rICRDaGFuZ2VEYXRhLT57Q2hhbmdlTnVtYmVyfSI7CgogICAgIyBjcmVhdGUgZGVzY3JpcHRpb24KICAgICVEZXNjcmlwdGlvbiA9ICgKICAgICAgICBOb3JtYWwgPT4gJERlc2NyaXB0aW9uVGV4dCwKICAgICAgICBMb25nICAgPT4gIiREZXNjcmlwdGlvblRleHQ6ICRDaGFuZ2VEYXRhLT57Q2hhbmdlVGl0bGV9IiwKICAgICk7CgogICAgcmV0dXJuICVEZXNjcmlwdGlvbjsKfQoKPWl0ZW0gT2JqZWN0U2VhcmNoKCkKCnJldHVybiBhIGhhc2ggbGlzdCBvZiB0aGUgc2VhcmNoIHJlc3VsdHMKClJldHVybgogICAgJFNlYXJjaExpc3QgPSB7CiAgICAgICAgTk9UTElOS0VEID0+IHsKICAgICAgICAgICAgU291cmNlID0+IHsKICAgICAgICAgICAgICAgIDEyICA9PiAkRGF0YU9mSXRlbTEyLAogICAgICAgICAgICAgICAgMjEyID0+ICREYXRhT2ZJdGVtMjEyLAogICAgICAgICAgICAgICAgMzMyID0+ICREYXRhT2ZJdGVtMzMyLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9OwoKICAgICRTZWFyY2hMaXN0ID0gJExpbmtPYmplY3RCYWNrZW5kLT5PYmplY3RTZWFyY2goCiAgICAgICAgU2VhcmNoUGFyYW1zID0+ICRIYXNoUmVmLCAgICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0U2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHBhcmFtcwogICAgJFBhcmFte1NlYXJjaFBhcmFtc30gfHw9IHt9OwoKICAgICMgYWRkIHdpbGRjYXJkcwogICAgbXkgJVNlYXJjaDsKICAgIGZvciBteSAkRWxlbWVudCAocXcoQ2hhbmdlTnVtYmVyIENoYW5nZVRpdGxlIFdvcmtPcmRlclRpdGxlKSkgewogICAgICAgIGlmICggJFBhcmFte1NlYXJjaFBhcmFtc30tPnskRWxlbWVudH0gKSB7CiAgICAgICAgICAgICRTZWFyY2h7JEVsZW1lbnR9ID0gJyonIC4gJFBhcmFte1NlYXJjaFBhcmFtc30tPnskRWxlbWVudH0gLiAnKic7CiAgICAgICAgfQogICAgfQoKICAgICMgc2VhcmNoIHRoZSBjaGFuZ2VzCiAgICAjIG5vIG5lZWQgdG8gdXNlIE9yZGVyQnkgaGVyZSwgYmVjYXVzZSBpdCBpcyBzb3J0ZWQgaW4gVGFibGVDcmVhdGVDb21wbGV4IGFuZCBUYWJsZUNyZWF0ZVNpbXBsZQogICAgbXkgJENoYW5nZUlEc1JlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZVNlYXJjaCgKICAgICAgICAleyAkUGFyYW17U2VhcmNoUGFyYW1zfSB9LAogICAgICAgICVTZWFyY2gsCiAgICAgICAgVXNpbmdXaWxkY2FyZHMgPT4gMSwKICAgICAgICBNaXJyb3JEQiAgICAgICA9PiAxLAoKICAgICAgICAjIFRPRE86CiAgICAgICAgIyB1c2Ugc3lzY29uZmlnIG9wdGlvbiBmb3IgJ2xpbWl0JyBpbnN0ZWFkLCBkZWNpZGUgd2hlYXRlciB0aGlzIG9wdGlvbiB3b3VsZCBiZSBvbmx5CiAgICAgICAgIyB2YWxpZCBmb3IgbGlua2luZyBjaGFuZ2VzLCBvciBqdXN0IHVzZSBhIGdsb2JhbCBzZXR0aW5nIGZvciBhbGwgbGlua2luZyBzdHVmZgogICAgICAgIExpbWl0ID0+IDIwMCwKCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBteSAlU2VhcmNoTGlzdDsKICAgIENIQU5HRUlEOgogICAgZm9yIG15ICRDaGFuZ2VJRCAoIEB7JENoYW5nZUlEc1JlZn0gKSB7CgogICAgICAgICMgZ2V0IGNoYW5nZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5DaGFuZ2VHZXQoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBDaGFuZ2VJRCBpZiAhJENoYW5nZURhdGE7CgogICAgICAgICMgYWRkIGNoYW5nZSBkYXRhCiAgICAgICAgJFNlYXJjaExpc3R7Tk9UTElOS0VEfS0+e1NvdXJjZX0tPnskQ2hhbmdlSUR9ID0gJENoYW5nZURhdGE7CiAgICB9CgogICAgcmV0dXJuIFwlU2VhcmNoTGlzdDsKfQoKPWl0ZW0gTGlua0FkZFByZSgpCgpsaW5rIGFkZCBwcmUgZXZlbnQgbW9kdWxlCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFByZSgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZU9iamVjdCA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgU291cmNlS2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFByZSgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtBZGRQcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRvIG5vdCB0cmlnZ2VyIGV2ZW50IGZvciB0ZW1wb3JhcnkgbGlua3MKICAgIHJldHVybiAxIGlmICRQYXJhbXtTdGF0ZX0gZXEgJ1RlbXBvcmFyeSc7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIExpbmtBZGRQb3N0KCkKCmxpbmsgYWRkIHByZSBldmVudCBtb2R1bGUKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rQWRkUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZU9iamVjdCA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgU291cmNlS2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFBvc3QoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgIFRhcmdldEtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rQWRkUG9zdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZG8gbm90IHRyaWdnZXIgZXZlbnQgZm9yIHRlbXBvcmFyeSBsaW5rcwogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICAjIGdldCBpbmZvcm1hdGlvbiBhYm91dCBsaW5rZWQgb2JqZWN0CiAgICBteSAkSUQgICAgID0gJFBhcmFte1RhcmdldEtleX0gICAgfHwgJFBhcmFte1NvdXJjZUtleX07CiAgICBteSAkT2JqZWN0ID0gJFBhcmFte1RhcmdldE9iamVjdH0gfHwgJFBhcmFte1NvdXJjZU9iamVjdH07CgogICAgIyB0cmlnZ2VyIENoYW5nZUxpbmtBZGRQb3N0LUV2ZW50CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ0NoYW5nZUxpbmtBZGRQb3N0JywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtLZXl9LAogICAgICAgICAgICBPYmplY3QgICA9PiAkT2JqZWN0LCAgICAgICAgICMgdGhlIG90aGVyIG9iamVjdCBvZiB0aGUgbGluawogICAgICAgICAgICBJRCAgICAgICA9PiAkSUQsICAgICAgICAgICAgICMgaWQgb2YgdGhlIG90aGVyIG9iamVjdAogICAgICAgICAgICBUeXBlICAgICA9PiAkUGFyYW17VHlwZX0sICAgICMgdGhlIGxpbmsgdHlwZQogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBMaW5rRGVsZXRlUHJlKCkKCmxpbmsgZGVsZXRlIHByZSBldmVudCBtb2R1bGUKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUHJlKAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUHJlKAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0RlbGV0ZVByZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZG8gbm90IHRyaWdnZXIgZXZlbnQgZm9yIHRlbXBvcmFyeSBsaW5rcwogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gTGlua0RlbGV0ZVBvc3QoKQoKbGluayBkZWxldGUgcG9zdCBldmVudCBtb2R1bGUKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZU9iamVjdCA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgU291cmNlS2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0RlbGV0ZVBvc3QoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgIFRhcmdldEtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rRGVsZXRlUG9zdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZG8gbm90IHRyaWdnZXIgZXZlbnQgZm9yIHRlbXBvcmFyeSBsaW5rcwogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICAjIGdldCBpbmZvcm1hdGlvbiBhYm91dCBsaW5rZWQgb2JqZWN0CiAgICBteSAkSUQgICAgID0gJFBhcmFte1RhcmdldEtleX0gICAgfHwgJFBhcmFte1NvdXJjZUtleX07CiAgICBteSAkT2JqZWN0ID0gJFBhcmFte1RhcmdldE9iamVjdH0gfHwgJFBhcmFte1NvdXJjZU9iamVjdH07CgogICAgIyB0cmlnZ2VyIENoYW5nZUxpbmtEZWxldGVQb3N0LUV2ZW50CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5FdmVudEhhbmRsZXIoCiAgICAgICAgRXZlbnQgPT4gJ0NoYW5nZUxpbmtEZWxldGVQb3N0JywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEID0+ICRQYXJhbXtLZXl9LAogICAgICAgICAgICBPYmplY3QgICA9PiAkT2JqZWN0LCAgICAgICAgICMgdGhlIG90aGVyIG9iamVjdCBvZiB0aGUgbGluawogICAgICAgICAgICBJRCAgICAgICA9PiAkSUQsICAgICAgICAgICAgICMgaWQgb2YgdGhlIG90aGVyIG9iamVjdAogICAgICAgICAgICBUeXBlICAgICA9PiAkUGFyYW17VHlwZX0sICAgICMgdGhlIGxpbmsgdHlwZQogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3Q6OklUU01Xb3JrT3JkZXI7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWwvU3lzdGVtL0xpbmtPYmplY3QvSVRTTVdvcmtPcmRlci5wbSAtIExpbmtPYmplY3QgSVRTTVdvcmtPcmRlciBtb2R1bGUKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkTGlua09iamVjdElUU01Xb3JrT3JkZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdDo6SVRTTVdvcmtPcmRlcicpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIExpbmtMaXN0V2l0aERhdGEoKQoKZmlsbCB1cCB0aGUgbGluayBsaXN0IHdpdGggZGF0YQoKICAgICRTdWNjZXNzID0gJExpbmtPYmplY3RCYWNrZW5kLT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgIExpbmtMaXN0ID0+ICRIYXNoUmVmLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtMaXN0V2l0aERhdGEgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTGlua0xpc3QgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGxpbmsgbGlzdAogICAgaWYgKCByZWYgJFBhcmFte0xpbmtMaXN0fSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdMaW5rTGlzdCBtdXN0IGJlIGEgaGFzaCByZWZlcmVuY2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7ICRQYXJhbXtMaW5rTGlzdH0gfSApIHsKCiAgICAgICAgZm9yIG15ICREaXJlY3Rpb24gKCBzb3J0IGtleXMgJXsgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0gfSApIHsKCiAgICAgICAgICAgIFdPUktPUkRFUklEOgogICAgICAgICAgICBmb3IgbXkgJFdvcmtPcmRlcklEICggc29ydCBrZXlzICV7ICRQYXJhbXtMaW5rTGlzdH0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn0gfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCB3b3Jrb3JkZXIgZGF0YQogICAgICAgICAgICAgICAgbXkgJFdvcmtPcmRlckRhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpLT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSBpZCBmcm9tIGhhc2ggaWYgV29ya09yZGVyR2V0KCkgcmV0dXJucyBubyByZXN1bHRzCiAgICAgICAgICAgICAgICBpZiAoICEkV29ya09yZGVyRGF0YSApIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufS0+eyRXb3JrT3JkZXJJRH07CiAgICAgICAgICAgICAgICAgICAgbmV4dCBXT1JLT1JERVJJRDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGdldCBjaGFuZ2UgZGF0YSBmb3IgdGhpcyB3b3Jrb3JkZXIKICAgICAgICAgICAgICAgIG15ICRDaGFuZ2VEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlR2V0KAogICAgICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRXb3JrT3JkZXJEYXRhLT57Q2hhbmdlSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlbW92ZSB3b3Jrb3JkZXIgaWQgZnJvbSBoYXNoIGlmIGNoYW5nZSBmb3IgdGhpcyB3b3Jrb3JkZXIgcmV0dXJucyBubyByZXN1bHRzCiAgICAgICAgICAgICAgICBpZiAoICEkQ2hhbmdlRGF0YSApIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufS0+eyRXb3JrT3JkZXJJRH07CiAgICAgICAgICAgICAgICAgICAgbmV4dCBXT1JLT1JERVJJRDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFkZCB0aGUgY2hhbmdlIGRhdGEgdG8gd29ya29yZGVyIGRhdGEKICAgICAgICAgICAgICAgIG15ICVEYXRhID0gKAogICAgICAgICAgICAgICAgICAgICV7JFdvcmtPcmRlckRhdGF9LAogICAgICAgICAgICAgICAgICAgIENoYW5nZURhdGEgPT4gJENoYW5nZURhdGEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYWRkIHdvcmtvcmRlciBkYXRhCiAgICAgICAgICAgICAgICAkUGFyYW17TGlua0xpc3R9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259LT57JFdvcmtPcmRlcklEfSA9IFwlRGF0YTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gT2JqZWN0UGVybWlzc2lvbigpCgpjaGVja3MgcmVhZCBwZXJtaXNzaW9uIGZvciBhIGdpdmVuIG9iamVjdCBhbmQgVXNlcklELgoKICAgICRQZXJtaXNzaW9uID0gJExpbmtPYmplY3QtPk9iamVjdFBlcm1pc3Npb24oCiAgICAgICAgT2JqZWN0ICA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgS2V5ICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3RQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdCBLZXkgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjb25maWcgb2Ygd29ya29yZGVyIHpvb20gZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0lUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjpBZ2VudElUU01Xb3JrT3JkZXJab29tJyk7CgogICAgIyBjaGVjayBwZXJtaXNzaW9ucwogICAgbXkgJEFjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPlBlcm1pc3Npb24oCiAgICAgICAgVHlwZSAgICAgICAgPT4gJFNlbGYtPntDb25maWd9LT57UGVybWlzc2lvbn0sCiAgICAgICAgV29ya09yZGVySUQgPT4gJFBhcmFte0tleX0sCiAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiAkQWNjZXNzOwp9Cgo9aXRlbSBPYmplY3REZXNjcmlwdGlvbkdldCgpCgpyZXR1cm4gYSBoYXNoIG9mIG9iamVjdCBkZXNjcmlwdGlvbnMKClJldHVybgogICAgJURlc2NyaXB0aW9uID0gKAogICAgICAgIE5vcm1hbCA9PiAiV29ya29yZGVyIyAyMDA5MTAyMTEwMDAxNjc0LTEiLAogICAgICAgIExvbmcgICA9PiAiV29ya29yZGVyIyAyMDA5MTAyMTEwMDAxNjc0LTE6IFRoZSBXb3Jrb3JkZXIgVGl0bGUiLAogICAgKTsKCiAgICAlRGVzY3JpcHRpb24gPSAkTGlua09iamVjdC0+T2JqZWN0RGVzY3JpcHRpb25HZXQoCiAgICAgICAgS2V5ICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3REZXNjcmlwdGlvbkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhPYmplY3QgS2V5IFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgZGVzY3JpcHRpb24KICAgIG15ICVEZXNjcmlwdGlvbiA9ICgKICAgICAgICBOb3JtYWwgPT4gJ1dvcmtvcmRlcicsCiAgICAgICAgTG9uZyAgID0+ICdXb3Jrb3JkZXInLAogICAgKTsKCiAgICByZXR1cm4gJURlc2NyaXB0aW9uIGlmICRQYXJhbXtNb2RlfSAmJiAkUGFyYW17TW9kZX0gZXEgJ1RlbXBvcmFyeSc7CgogICAgIyBnZXQgd29ya29yZGVyIGRhdGEKICAgIG15ICRXb3JrT3JkZXJEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyR2V0KAogICAgICAgIFdvcmtPcmRlcklEID0+ICRQYXJhbXtLZXl9LAogICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISRXb3JrT3JkZXJEYXRhOwogICAgcmV0dXJuIGlmICEleyRXb3JrT3JkZXJEYXRhfTsKCiAgICAjIGdldCBjaGFuZ2UgZGF0YSBmb3IgdGhpcyB3b3Jrb3JkZXIKICAgIG15ICRDaGFuZ2VEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRXb3JrT3JkZXJEYXRhLT57Q2hhbmdlSUR9LAogICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISRDaGFuZ2VEYXRhOwogICAgcmV0dXJuIGlmICEleyRDaGFuZ2VEYXRhfTsKCiAgICAjIGRlZmluZSBkZXNjcmlwdGlvbiB0ZXh0CiAgICBteSAkV29ya09yZGVySG9vayAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNV29ya09yZGVyOjpIb29rJyk7CiAgICBteSAkRGVzY3JpcHRpb25UZXh0ID0gIiRXb3JrT3JkZXJIb29rICRDaGFuZ2VEYXRhLT57Q2hhbmdlTnVtYmVyfS0kV29ya09yZGVyRGF0YS0+e1dvcmtPcmRlck51bWJlcn0iOwoKICAgICMgY3JlYXRlIGRlc2NyaXB0aW9uCiAgICAlRGVzY3JpcHRpb24gPSAoCiAgICAgICAgTm9ybWFsID0+ICREZXNjcmlwdGlvblRleHQsCiAgICAgICAgTG9uZyAgID0+ICIkRGVzY3JpcHRpb25UZXh0OiAkV29ya09yZGVyRGF0YS0+e1dvcmtPcmRlclRpdGxlfSIsCiAgICApOwoKICAgIHJldHVybiAlRGVzY3JpcHRpb247Cn0KCj1pdGVtIE9iamVjdFNlYXJjaCgpCgpyZXR1cm4gYSBoYXNoIGxpc3Qgb2YgdGhlIHNlYXJjaCByZXN1bHRzCgpSZXR1cm4KICAgICRTZWFyY2hMaXN0ID0gewogICAgICAgIE5PVExJTktFRCA9PiB7CiAgICAgICAgICAgIFNvdXJjZSA9PiB7CiAgICAgICAgICAgICAgICAxMiAgPT4gJERhdGFPZkl0ZW0xMiwKICAgICAgICAgICAgICAgIDIxMiA9PiAkRGF0YU9mSXRlbTIxMiwKICAgICAgICAgICAgICAgIDMzMiA9PiAkRGF0YU9mSXRlbTMzMiwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfTsKCiAgICAkU2VhcmNoTGlzdCA9ICRMaW5rT2JqZWN0QmFja2VuZC0+T2JqZWN0U2VhcmNoKAogICAgICAgIFNlYXJjaFBhcmFtcyA9PiAkSGFzaFJlZiwgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE9iamVjdFNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCBwYXJhbXMKICAgICRQYXJhbXtTZWFyY2hQYXJhbXN9IHx8PSB7fTsKCiAgICAjIGFkZCB3aWxkY2FyZHMKICAgIG15ICVTZWFyY2g7CiAgICBmb3IgbXkgJEVsZW1lbnQgKHF3KENoYW5nZU51bWJlciBDaGFuZ2VUaXRsZSBXb3JrT3JkZXJUaXRsZSkpIHsKICAgICAgICBpZiAoICRQYXJhbXtTZWFyY2hQYXJhbXN9LT57JEVsZW1lbnR9ICkgewogICAgICAgICAgICAkU2VhcmNoeyRFbGVtZW50fSA9ICcqJyAuICRQYXJhbXtTZWFyY2hQYXJhbXN9LT57JEVsZW1lbnR9IC4gJyonOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNlYXJjaCB0aGUgd29ya29yZGVycwogICAgIyBubyBuZWVkIHRvIHVzZSBPcmRlckJ5IGhlcmUsIGJlY2F1c2UgaXQgaXMgc29ydGVkIGluIFRhYmxlQ3JlYXRlQ29tcGxleCBhbmQgVGFibGVDcmVhdFNpbXBsZQogICAgbXkgJFdvcmtPcmRlcklEc1JlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlclNlYXJjaCgKICAgICAgICAleyAkUGFyYW17U2VhcmNoUGFyYW1zfSB9LAogICAgICAgICVTZWFyY2gsCiAgICAgICAgVXNpbmdXaWxkY2FyZHMgPT4gMSwKICAgICAgICBNaXJyb3JEQiAgICAgICA9PiAxLAoKICAgICAgICAjIFRPRE86CiAgICAgICAgIyB1c2Ugc3lzY29uZmlnIG9wdGlvbiBmb3IgJ2xpbWl0JyBpbnN0ZWFkLCBkZWNpZGUgd2hlYXRlciB0aGlzIG9wdGlvbiB3b3VsZCBiZSBvbmx5CiAgICAgICAgIyB2YWxpZCBmb3IgbGlua2luZyB3b3Jrb3JkZXJzLCBvciBqdXN0IHVzZSBhIGdsb2JhbCBzZXR0aW5nIGZvciBhbGwgbGlua2luZyBzdHVmZgogICAgICAgIExpbWl0ID0+IDIwMCwKCiAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICBteSAlU2VhcmNoTGlzdDsKICAgIFdPUktPUkRFUklEOgogICAgZm9yIG15ICRXb3JrT3JkZXJJRCAoIEB7JFdvcmtPcmRlcklEc1JlZn0gKSB7CgogICAgICAgICMgZ2V0IHdvcmtvcmRlciBkYXRhCiAgICAgICAgbXkgJFdvcmtPcmRlckRhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpLT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBXT1JLT1JERVJJRCBpZiAhJFdvcmtPcmRlckRhdGE7CgogICAgICAgICMgZ2V0IGNoYW5nZSBkYXRhIGZvciB0aGlzIHdvcmtvcmRlcgogICAgICAgIG15ICRDaGFuZ2VEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlR2V0KAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkV29ya09yZGVyRGF0YS0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBXT1JLT1JERVJJRCBpZiAhJENoYW5nZURhdGE7CgogICAgICAgICMgYWRkIHRoZSBjaGFuZ2UgZGF0YSB0byB3b3Jrb3JkZXIgZGF0YQogICAgICAgIG15ICVEYXRhID0gKAogICAgICAgICAgICAleyRXb3JrT3JkZXJEYXRhfSwKICAgICAgICAgICAgQ2hhbmdlRGF0YSA9PiAkQ2hhbmdlRGF0YSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCB3b3Jrb3JkZXIgZGF0YQogICAgICAgICRTZWFyY2hMaXN0e05PVExJTktFRH0tPntTb3VyY2V9LT57JFdvcmtPcmRlcklEfSA9IFwlRGF0YTsKICAgIH0KCiAgICByZXR1cm4gXCVTZWFyY2hMaXN0Owp9Cgo9aXRlbSBMaW5rQWRkUHJlKCkKCmxpbmsgYWRkIHByZSBldmVudCBtb2R1bGUKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rQWRkUHJlKAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rQWRkUHJlKAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0FkZFByZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZG8gbm90IHRyaWdnZXIgZXZlbnQgZm9yIHRlbXBvcmFyeSBsaW5rcwogICAgcmV0dXJuIDEgaWYgJFBhcmFte1N0YXRlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gTGlua0FkZFBvc3QoKQoKbGluayBhZGQgcHJlIGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtBZGRQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rQWRkUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtBZGRQb3N0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBUeXBlIFN0YXRlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkbyBub3QgdHJpZ2dlciBldmVudCBmb3IgdGVtcG9yYXJ5IGxpbmtzCiAgICByZXR1cm4gMSBpZiAkUGFyYW17U3RhdGV9IGVxICdUZW1wb3JhcnknOwoKICAgICMgZ2V0IGluZm9ybWF0aW9uIGFib3V0IGxpbmtlZCBvYmplY3QKICAgIG15ICRJRCAgICAgPSAkUGFyYW17VGFyZ2V0S2V5fSAgICB8fCAkUGFyYW17U291cmNlS2V5fTsKICAgIG15ICRPYmplY3QgPSAkUGFyYW17VGFyZ2V0T2JqZWN0fSB8fCAkUGFyYW17U291cmNlT2JqZWN0fTsKCiAgICAjIHRyaWdnZXIgV29ya09yZGVyTGlua0FkZFBvc3QtRXZlbnQKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnV29ya09yZGVyTGlua0FkZFBvc3QnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFBhcmFte0tleX0sCiAgICAgICAgICAgIE9iamVjdCAgICAgID0+ICRPYmplY3QsICAgICAgICAgIyB0aGUgb3RoZXIgb2JqZWN0IG9mIHRoZSBsaW5rCiAgICAgICAgICAgIElEICAgICAgICAgID0+ICRJRCwgICAgICAgICAgICAgIyBpZCBvZiB0aGUgb3RoZXIgb2JqZWN0CiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICRQYXJhbXtUeXBlfSwgICAgIyB0aGUgbGluayB0eXBlCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIExpbmtEZWxldGVQcmUoKQoKbGluayBkZWxldGUgcHJlIGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGVQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGVQcmUoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgIFRhcmdldEtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBMaW5rRGVsZXRlUHJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBUeXBlIFN0YXRlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkbyBub3QgdHJpZ2dlciBldmVudCBmb3IgdGVtcG9yYXJ5IGxpbmtzCiAgICByZXR1cm4gMSBpZiAkUGFyYW17U3RhdGV9IGVxICdUZW1wb3JhcnknOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBMaW5rRGVsZXRlUG9zdCgpCgpsaW5rIGRlbGV0ZSBwb3N0IGV2ZW50IG1vZHVsZQoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGVQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUG9zdCgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtEZWxldGVQb3N0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEtleSBUeXBlIFN0YXRlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkbyBub3QgdHJpZ2dlciBldmVudCBmb3IgdGVtcG9yYXJ5IGxpbmtzCiAgICByZXR1cm4gMSBpZiAkUGFyYW17U3RhdGV9IGVxICdUZW1wb3JhcnknOwoKICAgICMgZ2V0IGluZm9ybWF0aW9uIGFib3V0IGxpbmtlZCBvYmplY3QKICAgIG15ICRJRCAgICAgPSAkUGFyYW17VGFyZ2V0S2V5fSAgICB8fCAkUGFyYW17U291cmNlS2V5fTsKICAgIG15ICRPYmplY3QgPSAkUGFyYW17VGFyZ2V0T2JqZWN0fSB8fCAkUGFyYW17U291cmNlT2JqZWN0fTsKCiAgICAjIHRyaWdnZXIgV29ya09yZGVyTGlua0RlbGV0ZVBvc3QtRXZlbnQKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPkV2ZW50SGFuZGxlcigKICAgICAgICBFdmVudCA9PiAnV29ya09yZGVyTGlua0RlbGV0ZVBvc3QnLAogICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFBhcmFte0tleX0sCiAgICAgICAgICAgIE9iamVjdCAgICAgID0+ICRPYmplY3QsICAgICAgICAgIyB0aGUgb3RoZXIgb2JqZWN0IG9mIHRoZSBsaW5rCiAgICAgICAgICAgIElEICAgICAgICAgID0+ICRJRCwgICAgICAgICAgICAgIyBpZCBvZiB0aGUgb3RoZXIgb2JqZWN0CiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICRQYXJhbXtUeXBlfSwgICAgIyB0aGUgbGluayB0eXBlCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpJVFNNQ2hhbmdlTWFuYWdlbWVudDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGltZScsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkcyBmb3IgY2hhbmdlIG9iamVjdAogICAgJFNlbGYtPntEeW5hbWljRmllbGR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlID0+IFsnSVRTTUNIYW5nZSddLAogICAgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBHZXRPYmplY3ROYW1lIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICdJVFNNQ2hhbmdlTWFuYWdlbWVudCc7Cn0KCnN1YiBHZXRPYmplY3RBdHRyaWJ1dGVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY2hhbmdlIHN0YXRlIGxpc3QKICAgIG15ICRDaGFuZ2VTdGF0ZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5DaGFuZ2VQb3NzaWJsZVN0YXRlc0dldCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlQ2hhbmdlU3RhdGVMaXN0ID0gbWFwIHsgJF8tPntLZXl9ID0+ICRfLT57VmFsdWV9IH0gQHskQ2hhbmdlU3RhdGVzfTsKCiAgICAjIGdldCBjaXAgbGlzdHMKICAgIG15ICRDYXRlZ29yaWVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlUG9zc2libGVDSVBHZXQoCiAgICAgICAgVHlwZSAgID0+ICdDYXRlZ29yeScsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgbXkgJUNhdGVnb3J5TGlzdCA9IG1hcCB7ICRfLT57S2V5fSA9PiAkXy0+e1ZhbHVlfSB9IEB7JENhdGVnb3JpZXN9OwoKICAgIG15ICRJbXBhY3RzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlUG9zc2libGVDSVBHZXQoCiAgICAgICAgVHlwZSAgID0+ICdJbXBhY3QnLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgIG15ICVJbXBhY3RMaXN0ID0gbWFwIHsgJF8tPntLZXl9ID0+ICRfLT57VmFsdWV9IH0gQHskSW1wYWN0c307CgogICAgbXkgJFByaW9yaXRpZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5DaGFuZ2VQb3NzaWJsZUNJUEdldCgKICAgICAgICBUeXBlICAgPT4gJ1ByaW9yaXR5JywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlUHJpb3JpdHlMaXN0ID0gbWFwIHsgJF8tPntLZXl9ID0+ICRfLT57VmFsdWV9IH0gQHskUHJpb3JpdGllc307CgogICAgIyBnZXQgY3VycmVudCB0aW1lIHRvIGZpeCBidWcjNDg3MAogICAgbXkgJFRpbWVTdGFtcCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyktPkN1cnJlbnRUaW1lc3RhbXAoKTsKICAgIG15ICgkRGF0ZSkgPSBzcGxpdCAvXHMrLywgJFRpbWVTdGFtcDsKICAgIG15ICRUb2RheSA9IHNwcmludGYgIiVzIDIzOjU5OjU5IiwgJERhdGU7CgogICAgbXkgQE9iamVjdEF0dHJpYnV0ZXMgPSAoCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdDaGFuZ2UgU3RhdGUnLAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMSwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAxLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICdDaGFuZ2VTdGF0ZUlEcycsCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ011bHRpU2VsZWN0RmllbGQnLAogICAgICAgICAgICBWYWx1ZXMgICAgICAgICAgID0+IFwlQ2hhbmdlU3RhdGVMaXN0LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdDYXRlZ29yeScsCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAxLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJ0NhdGVnb3J5SURzJywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnTXVsdGlTZWxlY3RGaWVsZCcsCiAgICAgICAgICAgIFZhbHVlcyAgICAgICAgICAgPT4gXCVDYXRlZ29yeUxpc3QsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgVXNlQXNYdmFsdWUgICAgICA9PiAxLAogICAgICAgICAgICBVc2VBc1ZhbHVlU2VyaWVzID0+IDEsCiAgICAgICAgICAgIFVzZUFzUmVzdHJpY3Rpb24gPT4gMSwKICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICA9PiAnUHJpb3JpdHlJRHMnLAogICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICdNdWx0aVNlbGVjdEZpZWxkJywKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICA9PiBcJVByaW9yaXR5TGlzdCwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnSW1wYWN0JywKICAgICAgICAgICAgVXNlQXNYdmFsdWUgICAgICA9PiAxLAogICAgICAgICAgICBVc2VBc1ZhbHVlU2VyaWVzID0+IDEsCiAgICAgICAgICAgIFVzZUFzUmVzdHJpY3Rpb24gPT4gMSwKICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICA9PiAnSW1wYWN0SURzJywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnTXVsdGlTZWxlY3RGaWVsZCcsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICA9PiBcJUltcGFjdExpc3QsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1RpbWVwZXJpb2QnLAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMSwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAxLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICdUaW1lUGVyaW9kJywKICAgICAgICAgICAgVGltZVBlcmlvZEZvcm1hdCA9PiAnRGF0ZUlucHV0Rm9ybWF0JywgICAgIyAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ1RpbWUnLAogICAgICAgICAgICBUaW1lU3RvcCAgICAgICAgID0+ICRUb2RheSwKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICBUaW1lU3RhcnQgPT4gJ0NyZWF0ZVRpbWVOZXdlckRhdGUnLAogICAgICAgICAgICAgICAgVGltZVN0b3AgID0+ICdDcmVhdGVUaW1lT2xkZXJEYXRlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIGJhY2tlbmQgb2JqZWN0CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0gfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgc2tpcCBhbGwgZmllbGRzIG5vdCBkZXNpZ25lZCB0byBiZSBzdXBwb3J0ZWQgYnkgc3RhdGlzdGljcwogICAgICAgIG15ICRJc1N0YXRzQ29uZGl0aW9uID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkhhc0JlaGF2aW9yKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgQmVoYXZpb3IgICAgICAgICAgID0+ICdJc1N0YXRzQ29uZGl0aW9uJywKICAgICAgICApOwoKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJElzU3RhdHNDb25kaXRpb247CgogICAgICAgIG15ICRQb3NzaWJsZVZhbHVlc0ZpbHRlcjsKCiAgICAgICAgIyBnZXQgZmllbGQgaHRtbAogICAgICAgIG15ICREeW5hbWljRmllbGRTdGF0c1BhcmFtZXRlciA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TdGF0c0ZpZWxkUGFyYW1ldGVyQnVpbGQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyAgID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzRmlsdGVyID0+ICRQb3NzaWJsZVZhbHVlc0ZpbHRlciwKICAgICAgICApOwoKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRTdGF0c1BhcmFtZXRlcikgKSB7CgogICAgICAgICAgICAjIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAgICAgICAgICAgaWYgKCAhJER5bmFtaWNGaWVsZFN0YXRzUGFyYW1ldGVyLT57QmxvY2t9ICkgewogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZFN0YXRzUGFyYW1ldGVyLT57QmxvY2t9ID0gJ0lucHV0RmllbGQnOwogICAgICAgICAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJER5bmFtaWNGaWVsZFN0YXRzUGFyYW1ldGVyLT57VmFsdWVzfSApICkgewogICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRTdGF0c1BhcmFtZXRlci0+e0Jsb2NrfSA9ICdNdWx0aVNlbGVjdEZpZWxkJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkRHluYW1pY0ZpZWxkU3RhdHNQYXJhbWV0ZXItPntCbG9ja30gZXEgJ1RpbWUnICkgewoKICAgICAgICAgICAgICAgICMgY3JlYXRlIG9iamVjdCBhdHRyaWJ1dGVzIChkYXRlL3RpbWUgZmllbGRzKQogICAgICAgICAgICAgICAgbXkgJFRpbWVQZXJpb2RGb3JtYXQgPSAkRHluYW1pY0ZpZWxkU3RhdHNQYXJhbWV0ZXItPntUaW1lUGVyaW9kRm9ybWF0fSB8fCAnRGF0ZUlucHV0Rm9ybWF0TG9uZyc7CgogICAgICAgICAgICAgICAgbXkgJU9iamVjdEF0dHJpYnV0ZSA9ICgKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICREeW5hbWljRmllbGRTdGF0c1BhcmFtZXRlci0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VBc1ZhbHVlU2VyaWVzID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJER5bmFtaWNGaWVsZFN0YXRzUGFyYW1ldGVyLT57RWxlbWVudH0sCiAgICAgICAgICAgICAgICAgICAgVGltZVBlcmlvZEZvcm1hdCA9PiAkVGltZVBlcmlvZEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICREeW5hbWljRmllbGRTdGF0c1BhcmFtZXRlci0+e0Jsb2NrfSwKICAgICAgICAgICAgICAgICAgICBUaW1lUGVyaW9kRm9ybWF0ID0+ICRUaW1lUGVyaW9kRm9ybWF0LAogICAgICAgICAgICAgICAgICAgIFZhbHVlcyAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBUaW1lU3RhcnQgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICREeW5hbWljRmllbGRTdGF0c1BhcmFtZXRlci0+e0VsZW1lbnR9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICdfR3JlYXRlclRoYW5FcXVhbHMnLAogICAgICAgICAgICAgICAgICAgICAgICBUaW1lU3RvcCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZFN0YXRzUGFyYW1ldGVyLT57RWxlbWVudH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJ19TbWFsbGVyVGhhbkVxdWFscycsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBwdXNoIEBPYmplY3RBdHRyaWJ1dGVzLCBcJU9iamVjdEF0dHJpYnV0ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICREeW5hbWljRmllbGRTdGF0c1BhcmFtZXRlci0+e0Jsb2NrfSBlcSAnTXVsdGlTZWxlY3RGaWVsZCcgKSB7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgb2JqZWN0IGF0dHJpYnV0ZXMgKG11bHRpcGxlIHZhbHVlcykKICAgICAgICAgICAgICAgIG15ICVPYmplY3RBdHRyaWJ1dGUgPSAoCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkU3RhdHNQYXJhbWV0ZXItPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAxLAogICAgICAgICAgICAgICAgICAgIFVzZUFzUmVzdHJpY3Rpb24gPT4gMSwKICAgICAgICAgICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICREeW5hbWljRmllbGRTdGF0c1BhcmFtZXRlci0+e0VsZW1lbnR9LAogICAgICAgICAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJER5bmFtaWNGaWVsZFN0YXRzUGFyYW1ldGVyLT57QmxvY2t9LAogICAgICAgICAgICAgICAgICAgIFZhbHVlcyAgICAgICAgICAgPT4gJER5bmFtaWNGaWVsZFN0YXRzUGFyYW1ldGVyLT57VmFsdWVzfSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgICAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgSXNEeW5hbWljRmllbGQgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFNob3dBc1RyZWUgICAgICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30tPntUcmVlVmlld30gfHwgMCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBwdXNoIEBPYmplY3RBdHRyaWJ1dGVzLCBcJU9iamVjdEF0dHJpYnV0ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBvYmplY3QgYXR0cmlidXRlcyAodGV4dCBmaWVsZHMpCiAgICAgICAgICAgICAgICBteSAlT2JqZWN0QXR0cmlidXRlID0gKAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJER5bmFtaWNGaWVsZFN0YXRzUGFyYW1ldGVyLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgVXNlQXNYdmFsdWUgICAgICA9PiAwLAogICAgICAgICAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMCwKICAgICAgICAgICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkU3RhdHNQYXJhbWV0ZXItPntFbGVtZW50fSwKICAgICAgICAgICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICREeW5hbWljRmllbGRTdGF0c1BhcmFtZXRlci0+e0Jsb2NrfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBwdXNoIEBPYmplY3RBdHRyaWJ1dGVzLCBcJU9iamVjdEF0dHJpYnV0ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gQE9iamVjdEF0dHJpYnV0ZXM7Cn0KCnN1YiBHZXRTdGF0RWxlbWVudFByZXZpZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaW50IHJhbmQgNTA7Cn0KCnN1YiBHZXRTdGF0RWxlbWVudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgYmFja2VuZCBvYmplY3QKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgIGZvciBteSAkUGFyYW1ldGVyTmFtZSAoIHNvcnQga2V5cyAlUGFyYW0gKSB7CiAgICAgICAgaWYgKAogICAgICAgICAgICAkUGFyYW1ldGVyTmFtZSA9fiBteyBcQSBEeW5hbWljRmllbGRfICggW2EtekEtWlxkXSsgKSAoPzogXyAoIFthLXpBLVpcZF0rICkgKT8gXHogfXhtcwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkRmllbGROYW1lID0gJDE7CiAgICAgICAgICAgIG15ICRPcGVyYXRvciAgPSAkMjsKCiAgICAgICAgICAgICMgbG9vcCBvdmVyIHRoZSBkeW5hbWljIGZpZWxkcyBjb25maWd1cmVkCiAgICAgICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkU2VsZi0+e0R5bmFtaWNGaWVsZH0gfSApIHsKICAgICAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKICAgICAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX07CgogICAgICAgICAgICAgICAgIyBza2lwIGFsbCBmaWVsZHMgdGhhdCBkbyBub3QgbWF0Y2ggd2l0aCBjdXJyZW50IGZpZWxkIG5hbWUKICAgICAgICAgICAgICAgICMgd2l0aG91dCB0aGUgJ0R5bmFtaWNGaWVsZF8nIHByZWZpeAogICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IG5lICRGaWVsZE5hbWU7CgogICAgICAgICAgICAgICAgIyBza2lwIGFsbCBmaWVsZHMgbm90IGRlc2lnbmVkIHRvIGJlIHN1cHBvcnRlZCBieSBzdGF0aXN0aWNzCiAgICAgICAgICAgICAgICBteSAkSXNTdGF0c0NvbmRpdGlvbiA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5IYXNCZWhhdmlvcigKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBCZWhhdmlvciAgICAgICAgICAgPT4gJ0lzU3RhdHNDb25kaXRpb24nLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJElzU3RhdHNDb25kaXRpb247CgogICAgICAgICAgICAgICAgIyBnZXQgbmV3IHNlYXJjaCBwYXJhbWV0ZXIKICAgICAgICAgICAgICAgIG15ICREeW5hbWljRmllbGRTdGF0c1NlYXJjaFBhcmFtZXRlciA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5TdGF0c1NlYXJjaEZpZWxkUGFyYW1ldGVyQnVpbGQoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRQYXJhbXskUGFyYW1ldGVyTmFtZX0sCiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3IgICAgICAgICAgID0+ICRPcGVyYXRvciwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBhZGQgbmV3IHNlYXJjaCBwYXJhbWV0ZXIKICAgICAgICAgICAgICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17IkR5bmFtaWNGaWVsZF8kRmllbGROYW1lIn0gKSApIHsKICAgICAgICAgICAgICAgICAgICAkUGFyYW17IkR5bmFtaWNGaWVsZF8kRmllbGROYW1lIn0gPQogICAgICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkU3RhdHNTZWFyY2hQYXJhbWV0ZXI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBleHRlbmQgc2VhcmNoIHBhcmFtZXRlcgogICAgICAgICAgICAgICAgZWxzaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkU3RhdHNTZWFyY2hQYXJhbWV0ZXIpICkgewogICAgICAgICAgICAgICAgICAgICRQYXJhbXsiRHluYW1pY0ZpZWxkXyRGaWVsZE5hbWUifSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgJXsgJFBhcmFteyJEeW5hbWljRmllbGRfJEZpZWxkTmFtZSJ9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JER5bmFtaWNGaWVsZFN0YXRzU2VhcmNoUGFyYW1ldGVyfSwKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgc2VhcmNoIGNoYW5nZXMKICAgIG15ICRDb3VudCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZVNlYXJjaCgKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgUmVzdWx0ICAgICA9PiAnQ09VTlQnLAogICAgICAgIFBlcm1pc3Npb24gPT4gJ3JvJywKICAgICAgICBMaW1pdCAgICAgID0+IDEwMF8wMDBfMDAwLAogICAgICAgICVQYXJhbSwKICAgICk7CgogICAgcmV0dXJuICRDb3VudDsKfQoKc3ViIEV4cG9ydFdyYXBwZXIgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHdyYXAgaWRzIHRvIHVzZWQgc3BlbGxpbmcKICAgIGZvciBteSAkVXNlIChxdyhVc2VBc1ZhbHVlU2VyaWVzIFVzZUFzUmVzdHJpY3Rpb24gVXNlQXNYdmFsdWUpKSB7CiAgICAgICAgRUxFTUVOVDoKICAgICAgICBmb3IgbXkgJEVsZW1lbnQgKCBAeyAkUGFyYW17JFVzZX0gfSApIHsKCiAgICAgICAgICAgIG5leHQgRUxFTUVOVCBpZiAhJEVsZW1lbnQ7CiAgICAgICAgICAgIG5leHQgRUxFTUVOVCBpZiAhJEVsZW1lbnQtPntTZWxlY3RlZFZhbHVlc307CgogICAgICAgICAgICBteSAkRWxlbWVudE5hbWUgPSAkRWxlbWVudC0+e0VsZW1lbnR9OwogICAgICAgICAgICBteSAkVmFsdWVzICAgICAgPSAkRWxlbWVudC0+e1NlbGVjdGVkVmFsdWVzfTsKCiAgICAgICAgICAgIGlmICggJEVsZW1lbnROYW1lIGVxICdDaGFuZ2VTdGF0ZUlEcycgKSB7CiAgICAgICAgICAgICAgICBteSAkU3RhdGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlUG9zc2libGVTdGF0ZXNHZXQoIFVzZXJJRCA9PiAxICk7CiAgICAgICAgICAgICAgICBJRDoKICAgICAgICAgICAgICAgIGZvciBteSAkSUQgKCBAeyRWYWx1ZXN9ICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgSUQgaWYgISRJRDsKCiAgICAgICAgICAgICAgICAgICAgU1RBVEU6CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRTdGF0ZSAoIEB7JFN0YXRlTGlzdH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgU1RBVEUgaWYgJElELT57Q29udGVudH0gbmUgJFN0YXRlLT57S2V5fTsKICAgICAgICAgICAgICAgICAgICAgICAgJElELT57Q29udGVudH0gPSAkU3RhdGUtPntWYWx1ZX07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAkRWxlbWVudE5hbWUgZXEgJ0NhdGVnb3J5SURzJyB8fCAkRWxlbWVudE5hbWUgZXEgJ0ltcGFjdElEcycKICAgICAgICAgICAgICAgIHx8ICRFbGVtZW50TmFtZSBlcSAnUHJpb3JpdHlJRHMnCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG15ICgkVHlwZSkgPSAkRWxlbWVudE5hbWUgPX4gbXsgXEEgKC4qPykgSURzIFx6IH14bXM7CgogICAgICAgICAgICAgICAgbXkgJENJUExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5DaGFuZ2VQb3NzaWJsZUNJUEdldCgKICAgICAgICAgICAgICAgICAgICBUeXBlICAgPT4gJFR5cGUsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIElEOgogICAgICAgICAgICAgICAgZm9yIG15ICRJRCAoIEB7JFZhbHVlc30gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJElEOwoKICAgICAgICAgICAgICAgICAgICBFTEVNRU5UOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkRWxlbWVudCAoIEB7JENJUExpc3R9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEVMRU1FTlQgaWYgJElELT57Q29udGVudH0gbmUgJEVsZW1lbnQtPntLZXl9OwogICAgICAgICAgICAgICAgICAgICAgICAkSUQtPntDb250ZW50fSA9ICRFbGVtZW50LT57VmFsdWV9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBcJVBhcmFtOwp9CgpzdWIgSW1wb3J0V3JhcHBlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgd3JhcCB1c2VkIHNwZWxsaW5nIHRvIGlkcwogICAgZm9yIG15ICRVc2UgKHF3KFVzZUFzVmFsdWVTZXJpZXMgVXNlQXNSZXN0cmljdGlvbiBVc2VBc1h2YWx1ZSkpIHsKICAgICAgICBFTEVNRU5UOgogICAgICAgIGZvciBteSAkRWxlbWVudCAoIEB7ICRQYXJhbXskVXNlfSB9ICkgewoKICAgICAgICAgICAgbmV4dCBFTEVNRU5UIGlmICEkRWxlbWVudDsKICAgICAgICAgICAgbmV4dCBFTEVNRU5UIGlmICEkRWxlbWVudC0+e1NlbGVjdGVkVmFsdWVzfTsKCiAgICAgICAgICAgIG15ICRFbGVtZW50TmFtZSA9ICRFbGVtZW50LT57RWxlbWVudH07CiAgICAgICAgICAgIG15ICRWYWx1ZXMgICAgICA9ICRFbGVtZW50LT57U2VsZWN0ZWRWYWx1ZXN9OwoKICAgICAgICAgICAgaWYgKCAkRWxlbWVudE5hbWUgZXEgJ0NoYW5nZVN0YXRlSURzJyApIHsKICAgICAgICAgICAgICAgIElEOgogICAgICAgICAgICAgICAgZm9yIG15ICRJRCAoIEB7JFZhbHVlc30gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJElEOwoKICAgICAgICAgICAgICAgICAgICBteSAkQ2hhbmdlU3RhdGVJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZVN0YXRlTG9va3VwKAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZSA9PiAkSUQtPntDb250ZW50fSwKICAgICAgICAgICAgICAgICAgICAgICAgQ2FjaGUgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIGlmICgkQ2hhbmdlU3RhdGVJRCkgewogICAgICAgICAgICAgICAgICAgICAgICAkSUQtPntDb250ZW50fSA9ICRDaGFuZ2VTdGF0ZUlEOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkltcG9ydDogQ2FuJ3QgZmluZCBzdGF0ZSAkSUQtPntDb250ZW50fSEiCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRJRCA9IHVuZGVmOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpbXBvcnQgd3JhcHBlciBmb3IgQ0lQCiAgICAgICAgICAgIGZvciBteSAkVHlwZSAocXcoQ2F0ZWdvcnkgSW1wYWN0IFByaW9yaXR5KSkgewogICAgICAgICAgICAgICAgaWYgKCAkRWxlbWVudE5hbWUgZXEgJFR5cGUgLiAnSURzJyApIHsKICAgICAgICAgICAgICAgICAgICBJRDoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJElEICggQHskVmFsdWVzfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJElEOwoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJENJUElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlQ0lQTG9va3VwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0lQICA9PiAkSUQtPntDb250ZW50fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkQ0lQSUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRJRC0+e0NvbnRlbnR9ID0gJENJUElEOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiSW1wb3J0OiBDYW4ndCBmaW5kICRUeXBlICRJRC0+e0NvbnRlbnR9ISIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSUQgPSB1bmRlZjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBcJVBhcmFtOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpJVFNNQ2hhbmdlTWFuYWdlbWVudENoYW5nZXNJbmNpZGVudHM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpbWUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgR2V0T2JqZWN0TmFtZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAnSVRTTUNoYW5nZU1hbmFnZW1lbnRDaGFuZ2VzSW5jaWRlbnRzJzsKfQoKc3ViIEdldE9iamVjdEF0dHJpYnV0ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsaXN0IG9mIHRpY2tldCB0eXBlcwogICAgbXkgJU9iamVjdHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpLT5UeXBlTGlzdCgKICAgICAgICBWYWxpZCA9PiAxLAogICAgKTsKICAgICRPYmplY3RzeyctMSd9ID0gJ0NoYW5nZXMnOwoKICAgICMgZ2V0IGN1cnJlbnQgdGltZSB0byBmaXggYnVnIzQ4NzAKICAgIG15ICRUaW1lU3RhbXAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpLT5DdXJyZW50VGltZXN0YW1wKCk7CiAgICBteSAoJERhdGUpID0gc3BsaXQgL1xzKy8sICRUaW1lU3RhbXA7CiAgICBteSAkVG9kYXkgPSBzcHJpbnRmICIlcyAyMzo1OTo1OSIsICREYXRlOwoKICAgIG15IEBPYmplY3RBdHRyaWJ1dGVzID0gKAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnT2JqZWN0cycsCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAxLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJ09iamVjdCcsCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ011bHRpU2VsZWN0RmllbGQnLAogICAgICAgICAgICBWYWx1ZXMgICAgICAgICAgID0+IFwlT2JqZWN0cywKICAgICAgICAgICAgU2VsZWN0ZWRWYWx1ZXMgICA9PiBbIGtleXMgJU9iamVjdHMgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVGltZXBlcmlvZCcsCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAxLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJ1RpbWVQZXJpb2QnLAogICAgICAgICAgICBUaW1lUGVyaW9kRm9ybWF0ID0+ICdEYXRlSW5wdXRGb3JtYXQnLCAgICAjICdEYXRlSW5wdXRGb3JtYXRMb25nJywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnVGltZScsCiAgICAgICAgICAgIFRpbWVTdG9wICAgICAgICAgPT4gJFRvZGF5LAogICAgICAgICAgICBWYWx1ZXMgICAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgIFRpbWVTdGFydCA9PiAnQ3JlYXRlVGltZU5ld2VyRGF0ZScsCiAgICAgICAgICAgICAgICBUaW1lU3RvcCAgPT4gJ0NyZWF0ZVRpbWVPbGRlckRhdGUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiBAT2JqZWN0QXR0cmlidXRlczsKfQoKc3ViIEdldFN0YXRFbGVtZW50UHJldmlldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpbnQgcmFuZCA1MDsKfQoKc3ViIEdldFN0YXRFbGVtZW50IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkZWxldGUgQ3JlYXRlVGltZU5ld2VyRGF0YSBhcyB3ZSB3YW50IHRvIGdldCAqQUxMKiBleGlzdGluZyBvYmplY3RzCiAgICBkZWxldGUgJFBhcmFte0NyZWF0ZVRpbWVOZXdlckRhdGV9OwoKICAgICMgZm9yIHRpY2tldHMgdGhlIHNlYXJjaCBvcHRpb24gaXMgIlRpY2tldENyZWF0ZVRpbWVPbGRlckRhdGUiCiAgICAkUGFyYW17VGlja2V0Q3JlYXRlVGltZU9sZGVyRGF0ZX0gPSAkUGFyYW17Q3JlYXRlVGltZU9sZGVyRGF0ZX07CgogICAgIyBpZiB0aGlzIGNlbGwgc2hvdWxkIGJlIGZpbGxlZCB3aXRoIG51bWJlciBvZiBjaGFuZ2VzCiAgICBpZiAoICRQYXJhbXtPYmplY3R9LT5bMF0gPT0gLTEgKSB7CiAgICAgICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZVNlYXJjaCgKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICBSZXN1bHQgICAgID0+ICdDT1VOVCcsCiAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gJ3JvJywKICAgICAgICAgICAgTGltaXQgICAgICA9PiAxMDBfMDAwXzAwMCwKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgIyBpZiB0aGlzIGNlbGwgc2hvdWxkIGJlIGZpbGxlZCB3aXRoIG51bWJlciBvZiB0aWNrZXRzCiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRTZWFyY2goCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgUmVzdWx0ICAgICA9PiAnQ09VTlQnLAogICAgICAgICAgICBQZXJtaXNzaW9uID0+ICdybycsCiAgICAgICAgICAgIExpbWl0ICAgICAgPT4gMTAwXzAwMF8wMDAsCiAgICAgICAgICAgIFR5cGVJRHMgICAgPT4gWyAkUGFyYW17T2JqZWN0fS0+WzBdIF0sCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybjsKfQoKc3ViIEV4cG9ydFdyYXBwZXIgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsaXN0IG9mIHRpY2tldCB0eXBlcwogICAgbXkgJU9iamVjdHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpLT5UeXBlTGlzdCggVmFsaWQgPT4gMSApOwogICAgJE9iamVjdHN7Jy0xJ30gPSAnQ2hhbmdlcyc7CgogICAgIyB3cmFwIGlkcyB0byB1c2VkIHNwZWxsaW5nCiAgICBmb3IgbXkgJFVzZSAocXcoVXNlQXNWYWx1ZVNlcmllcyBVc2VBc1Jlc3RyaWN0aW9uIFVzZUFzWHZhbHVlKSkgewogICAgICAgIEVMRU1FTlQ6CiAgICAgICAgZm9yIG15ICRFbGVtZW50ICggQHsgJFBhcmFteyRVc2V9IH0gKSB7CgogICAgICAgICAgICBuZXh0IEVMRU1FTlQgaWYgISRFbGVtZW50OwogICAgICAgICAgICBuZXh0IEVMRU1FTlQgaWYgISRFbGVtZW50LT57U2VsZWN0ZWRWYWx1ZXN9OwoKICAgICAgICAgICAgbXkgJEVsZW1lbnROYW1lID0gJEVsZW1lbnQtPntFbGVtZW50fTsKICAgICAgICAgICAgbXkgJFZhbHVlcyAgICAgID0gJEVsZW1lbnQtPntTZWxlY3RlZFZhbHVlc307CgogICAgICAgICAgICBpZiAoICRFbGVtZW50TmFtZSBlcSAnT2JqZWN0JyApIHsKCiAgICAgICAgICAgICAgICBJRDoKICAgICAgICAgICAgICAgIGZvciBteSAkSUQgKCBAeyRWYWx1ZXN9ICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgSUQgaWYgISRJRDsKCiAgICAgICAgICAgICAgICAgICAgJElELT57Q29udGVudH0gPSAkT2JqZWN0c3sgJElELT57Q29udGVudH0gfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXCVQYXJhbTsKfQoKc3ViIEltcG9ydFdyYXBwZXIgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBsaXN0IG9mIHRpY2tldCB0eXBlcwogICAgbXkgJU9iamVjdHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpLT5UeXBlTGlzdCggVmFsaWQgPT4gMSApOwogICAgJE9iamVjdHN7Jy0xJ30gPSAnQ2hhbmdlcyc7CgogICAgIyB3cmFwIHVzZWQgc3BlbGxpbmcgdG8gaWRzCiAgICBmb3IgbXkgJFVzZSAocXcoVXNlQXNWYWx1ZVNlcmllcyBVc2VBc1Jlc3RyaWN0aW9uIFVzZUFzWHZhbHVlKSkgewogICAgICAgIEVMRU1FTlQ6CiAgICAgICAgZm9yIG15ICRFbGVtZW50ICggQHsgJFBhcmFteyRVc2V9IH0gKSB7CgogICAgICAgICAgICBuZXh0IEVMRU1FTlQgaWYgISRFbGVtZW50OwogICAgICAgICAgICBuZXh0IEVMRU1FTlQgaWYgISRFbGVtZW50LT57U2VsZWN0ZWRWYWx1ZXN9OwoKICAgICAgICAgICAgbXkgJEVsZW1lbnROYW1lID0gJEVsZW1lbnQtPntFbGVtZW50fTsKICAgICAgICAgICAgbXkgJFZhbHVlcyAgICAgID0gJEVsZW1lbnQtPntTZWxlY3RlZFZhbHVlc307CgogICAgICAgICAgICBpZiAoICRFbGVtZW50TmFtZSBlcSAnT2JqZWN0JyApIHsKICAgICAgICAgICAgICAgIElEOgogICAgICAgICAgICAgICAgZm9yIG15ICRJRCAoIEB7JFZhbHVlc30gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJElEOwoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlT2JqZWN0cyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJElELT57Q29udGVudH0gPSAkS2V5IGlmICRPYmplY3RzeyRLZXl9IGVxICRJRC0+e0NvbnRlbnR9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXCVQYXJhbTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpJVFNNQ2hhbmdlTWFuYWdlbWVudENoYW5nZXNQZXJDSUNsYXNzZXM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGltZScsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIEdldE9iamVjdE5hbWUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gJ0lUU01DaGFuZ2VNYW5hZ2VtZW50Q2hhbmdlc1BlckNJQ2xhc3Nlcyc7Cn0KCnN1YiBHZXRPYmplY3RBdHRyaWJ1dGVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY2lwIGxpc3RzCiAgICBteSAkQ2F0ZWdvcmllcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZVBvc3NpYmxlQ0lQR2V0KAogICAgICAgIFR5cGUgICA9PiAnQ2F0ZWdvcnknLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgIG15ICVDYXRlZ29yeUxpc3QgPSBtYXAgeyAkXy0+e0tleX0gPT4gJF8tPntWYWx1ZX0gfSBAeyRDYXRlZ29yaWVzfTsKCiAgICAjIGdldCBjbGFzcyBsaXN0CiAgICBteSAkQ2xhc3NMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICApOwoKICAgICMgZ2V0IGRlcGxveW1lbnQgc3RhdGUgbGlzdAogICAgbXkgJERlcGxTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkRlcGxveW1lbnRTdGF0ZScsCiAgICApOwoKICAgICMgZ2V0IGluY2lkZW50IHN0YXRlIGxpc3QKICAgIG15ICRJbmNpU3RhdGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlJywKICAgICk7CgogICAgIyBnZXQgY3VycmVudCB0aW1lIHRvIGZpeCBidWcjNDg3MAogICAgbXkgJFRpbWVTdGFtcCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyktPkN1cnJlbnRUaW1lc3RhbXAoKTsKICAgIG15ICgkRGF0ZSkgPSBzcGxpdCAvXHMrLywgJFRpbWVTdGFtcDsKICAgIG15ICRUb2RheSA9IHNwcmludGYgIiVzIDIzOjU5OjU5IiwgJERhdGU7CgogICAgbXkgQE9iamVjdEF0dHJpYnV0ZXMgPSAoCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdDb25maWdJdGVtIENsYXNzZXMnLAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDAsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMSwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAwLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICdDSUNsYXNzSURzJywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnTXVsdGlTZWxlY3RGaWVsZCcsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICA9PiAkQ2xhc3NMaXN0LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdDYXRlZ29yeScsCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAwLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDAsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJ0NhdGVnb3J5SURzJywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnTXVsdGlTZWxlY3RGaWVsZCcsCiAgICAgICAgICAgIFZhbHVlcyAgICAgICAgICAgPT4gXCVDYXRlZ29yeUxpc3QsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ0NvbmZpZ0l0ZW0gU3RhdHVzJywKICAgICAgICAgICAgVXNlQXNYdmFsdWUgICAgICA9PiAwLAogICAgICAgICAgICBVc2VBc1ZhbHVlU2VyaWVzID0+IDAsCiAgICAgICAgICAgIFVzZUFzUmVzdHJpY3Rpb24gPT4gMSwKICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICA9PiAnQ0lTdGF0ZUlEcycsCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ011bHRpU2VsZWN0RmllbGQnLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgICAgID0+IDAsCiAgICAgICAgICAgIFZhbHVlcyAgICAgICAgICAgPT4gJEluY2lTdGF0ZUxpc3QsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1RpbWVwZXJpb2QnLAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDAsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMCwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAxLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICdUaW1lUGVyaW9kJywKICAgICAgICAgICAgVGltZVBlcmlvZEZvcm1hdCA9PiAnRGF0ZUlucHV0Rm9ybWF0JywgICAgIyAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ1RpbWUnLAogICAgICAgICAgICBUaW1lU3RvcCAgICAgICAgID0+ICRUb2RheSwKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICBUaW1lU3RhcnQgPT4gJ0NyZWF0ZVRpbWVOZXdlckRhdGUnLAogICAgICAgICAgICAgICAgVGltZVN0b3AgID0+ICdDcmVhdGVUaW1lT2xkZXJEYXRlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gQE9iamVjdEF0dHJpYnV0ZXM7Cn0KCnN1YiBHZXRTdGF0RWxlbWVudFByZXZpZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaW50IHJhbmQgNTA7Cn0KCnN1YiBHZXRTdGF0RWxlbWVudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG9iamVjdCBpZHMgZm9yIGNoYW5nZSBhbmQgY29uZmlnIGl0ZW0KICAgIG15ICRDb25maWdJdGVtT2JqZWN0SUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5PYmplY3RMb29rdXAoCiAgICAgICAgTmFtZSAgID0+ICdJVFNNQ29uZmlnSXRlbScsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIHJldHVybiBpZiAhJENvbmZpZ0l0ZW1PYmplY3RJRDsKCiAgICBteSAkQ2hhbmdlT2JqZWN0SUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5PYmplY3RMb29rdXAoCiAgICAgICAgTmFtZSAgID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkQ2hhbmdlT2JqZWN0SUQ7CgogICAgIyBnZXQgY2hhbmdlIGlkIGFuZCBjb25maWcgaXRlbSBpZAogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBjaGkuaWQgQVMgY2hhbmdlX2lkLCBjaS5pZCBBUyBjaV9pZCAnCiAgICAgICAgICAgIC4gJ0ZST00gY2hhbmdlX2l0ZW0gY2hpLCBjaGFuZ2Vfd29ya29yZGVyIGNodywgbGlua19yZWxhdGlvbiBsciwgY29uZmlnaXRlbSBjaSAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGNoaS5pZCA9IGNody5jaGFuZ2VfaWQgJwogICAgICAgICAgICAuICdBTkQgY2hpLmNhdGVnb3J5X2lkID0gPyAnCiAgICAgICAgICAgIC4gJ0FORCAoICcKICAgICAgICAgICAgLiAnKCAnCiAgICAgICAgICAgIC4gJ2Nody5pZCA9IGxyLnRhcmdldF9rZXkgJwogICAgICAgICAgICAuICdBTkQgbHIudGFyZ2V0X29iamVjdF9pZCA9ID8gJwogICAgICAgICAgICAuICdBTkQgbHIuc291cmNlX29iamVjdF9pZCA9ID8gJwogICAgICAgICAgICAuICdBTkQgbHIuc291cmNlX2tleSA9IGNpLmlkICcKICAgICAgICAgICAgLiAnQU5EIGNpLmNsYXNzX2lkID0gPyAnCiAgICAgICAgICAgIC4gJykgJwogICAgICAgICAgICAuICdPUiAnCiAgICAgICAgICAgIC4gJyggJwogICAgICAgICAgICAuICdjaHcuaWQgPSBsci5zb3VyY2Vfa2V5ICcKICAgICAgICAgICAgLiAnQU5EIGxyLnNvdXJjZV9vYmplY3RfaWQgPSA/ICcKICAgICAgICAgICAgLiAnQU5EIGxyLnRhcmdldF9vYmplY3RfaWQgPSA/ICcKICAgICAgICAgICAgLiAnQU5EIGxyLnRhcmdldF9rZXkgPSBjaS5pZCAnCiAgICAgICAgICAgIC4gJ0FORCBjaS5jbGFzc19pZCA9ID8gJwogICAgICAgICAgICAuICcpICcKICAgICAgICAgICAgLiAnKScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwoICRQYXJhbXtDYXRlZ29yeUlEc30tPlswXSApLAogICAgICAgICAgICBcJENoYW5nZU9iamVjdElELAogICAgICAgICAgICBcJENvbmZpZ0l0ZW1PYmplY3RJRCwKICAgICAgICAgICAgXCggJFBhcmFte0NJQ2xhc3NJRHN9LT5bMF0gKSwKICAgICAgICAgICAgXCRDaGFuZ2VPYmplY3RJRCwKICAgICAgICAgICAgXCRDb25maWdJdGVtT2JqZWN0SUQsCiAgICAgICAgICAgIFwoICRQYXJhbXtDSUNsYXNzSURzfS0+WzBdICksCiAgICAgICAgXSwKICAgICk7CgogICAgIyBmZXRjaCBjaGFuZ2UgYW5kIGNvbmZpZyBpdGVtIGlkcwogICAgbXkgQE1hdGNoZXM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQE1hdGNoZXMsIFxAUm93OwogICAgfQoKICAgICMgY2hlY2sgZm9yIGVhY2ggY2hhbmdlIGlmIHRoZSBjb25maWcgaXRlbSBpcyBpbiBhcHByb3ByaWF0ZSBzdGF0dXMKICAgICMgaWYgc28sIGNvdW50IHRoZSBjaGFuZ2UKICAgIG15ICVDaGFuZ2VzQWxyZWFkeUNvdW50ZWQ7CiAgICBNQVRDSDoKICAgIGZvciBteSAkTWF0Y2ggKEBNYXRjaGVzKSB7CiAgICAgICAgbmV4dCBNQVRDSCBpZiAkQ2hhbmdlc0FscmVhZHlDb3VudGVkeyAkTWF0Y2gtPlswXSB9OwoKICAgICAgICAjIGdldCBjdXJyZW50IHN0YXRlIG9mIHRoZSBjb25maWcgaXRlbQogICAgICAgIG5leHQgTUFUQ0ggaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpbmNpX3N0YXRlX2lkIEZST00gY29uZmlnaXRlbV92ZXJzaW9uICcKICAgICAgICAgICAgICAgIC4gJ1dIRVJFIGNvbmZpZ2l0ZW1faWQgPSA/ICcKICAgICAgICAgICAgICAgIC4gJ0FORCBjcmVhdGVfdGltZSA+PSA/IEFORCBjcmVhdGVfdGltZSA8PSA/JywKICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICBcKCAkTWF0Y2gtPlsxXSApLAogICAgICAgICAgICAgICAgXCggJFBhcmFte0NyZWF0ZVRpbWVOZXdlckRhdGV9ICksCiAgICAgICAgICAgICAgICBcKCAkUGFyYW17Q3JlYXRlVGltZU9sZGVyRGF0ZX0gKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGZldGNoIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUKICAgICAgICBteSAkSW5jaWRlbnRTdGF0ZUlEOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRJbmNpZGVudFN0YXRlSUQgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBNQVRDSCBpZiAhJEluY2lkZW50U3RhdGVJRDsKCiAgICAgICAgIyBjaGVjayBpZiB1c2VyIGhhcyBzZWxlY3RlZCB0aGlzIHN0YXRlCiAgICAgICAgbXkgKCRGb3VuZCkgPSBncmVwIHsgJF8gPT0gJEluY2lkZW50U3RhdGVJRCB9IEB7ICRQYXJhbXtDSVN0YXRlSURzfSB9OwoKICAgICAgICBuZXh0IE1BVENIIGlmICEkRm91bmQ7CgogICAgICAgICRDaGFuZ2VzQWxyZWFkeUNvdW50ZWR7ICRNYXRjaC0+WzBdIH0rKzsKICAgIH0KCiAgICAjIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYW5nZXMKICAgIG15ICRDb3VudCA9IGtleXMgJUNoYW5nZXNBbHJlYWR5Q291bnRlZDsKICAgIHJldHVybiAkQ291bnQ7Cn0KCnN1YiBFeHBvcnRXcmFwcGVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY2xhc3MgbGlzdAogICAgbXkgJENsYXNzTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgKTsKCiAgICAjIGdldCBpbmNpZGVudCBzdGF0ZSBsaXN0CiAgICBteSAkSW5jaVN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScsCiAgICApOwoKICAgICMgd3JhcCBpZHMgdG8gdXNlZCBzcGVsbGluZwogICAgZm9yIG15ICRVc2UgKHF3KFVzZUFzVmFsdWVTZXJpZXMgVXNlQXNSZXN0cmljdGlvbiBVc2VBc1h2YWx1ZSkpIHsKICAgICAgICBFTEVNRU5UOgogICAgICAgIGZvciBteSAkRWxlbWVudCAoIEB7ICRQYXJhbXskVXNlfSB9ICkgewogICAgICAgICAgICBuZXh0IEVMRU1FTlQgaWYgISRFbGVtZW50IHx8ICEkRWxlbWVudC0+e1NlbGVjdGVkVmFsdWVzfTsKICAgICAgICAgICAgbXkgJEVsZW1lbnROYW1lID0gJEVsZW1lbnQtPntFbGVtZW50fTsKICAgICAgICAgICAgbXkgJFZhbHVlcyAgICAgID0gJEVsZW1lbnQtPntTZWxlY3RlZFZhbHVlc307CgogICAgICAgICAgICBpZiAoICRFbGVtZW50TmFtZSBlcSAnQ0lTdGF0ZUlEcycgKSB7CiAgICAgICAgICAgICAgICBJRDoKICAgICAgICAgICAgICAgIGZvciBteSAkSUQgKCBAeyRWYWx1ZXN9ICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgSUQgaWYgISRJRDsKCiAgICAgICAgICAgICAgICAgICAgJElELT57Q29udGVudH0gPSAkSW5jaVN0YXRlTGlzdC0+eyAkSUQtPntDb250ZW50fSB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEVsZW1lbnROYW1lIGVxICdDSUNsYXNzSURzJyApIHsKICAgICAgICAgICAgICAgIElEOgogICAgICAgICAgICAgICAgZm9yIG15ICRJRCAoIEB7JFZhbHVlc30gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJElEOwoKICAgICAgICAgICAgICAgICAgICAkSUQtPntDb250ZW50fSA9ICRDbGFzc0xpc3QtPnsgJElELT57Q29udGVudH0gfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRFbGVtZW50TmFtZSBlcSAnQ2F0ZWdvcnlJRHMnICkgewoKICAgICAgICAgICAgICAgIG15ICRDSVBMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlUG9zc2libGVDSVBHZXQoCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgID0+ICdDYXRlZ29yeScsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIElEOgogICAgICAgICAgICAgICAgZm9yIG15ICRJRCAoIEB7JFZhbHVlc30gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJElEOwoKICAgICAgICAgICAgICAgICAgICBFTEVNRU5UOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkRWxlbWVudCAoIEB7JENJUExpc3R9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IEVMRU1FTlQgaWYgJElELT57Q29udGVudH0gbmUgJEVsZW1lbnQtPntLZXl9OwogICAgICAgICAgICAgICAgICAgICAgICAkSUQtPntDb250ZW50fSA9ICRFbGVtZW50LT57VmFsdWV9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBcJVBhcmFtOwp9CgpzdWIgSW1wb3J0V3JhcHBlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNsYXNzIGxpc3QKICAgIG15ICRDbGFzc0xpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OkNsYXNzJywKICAgICk7CgogICAgIyBnZXQgaW5jaWRlbnQgc3RhdGUgbGlzdAogICAgbXkgJEluY2lTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgKTsKCiAgICAjIHdyYXAgdXNlZCBzcGVsbGluZyB0byBpZHMKICAgIGZvciBteSAkVXNlIChxdyhVc2VBc1ZhbHVlU2VyaWVzIFVzZUFzUmVzdHJpY3Rpb24gVXNlQXNYdmFsdWUpKSB7CiAgICAgICAgRUxFTUVOVDoKICAgICAgICBmb3IgbXkgJEVsZW1lbnQgKCBAeyAkUGFyYW17JFVzZX0gfSApIHsKICAgICAgICAgICAgbmV4dCBFTEVNRU5UIGlmICEkRWxlbWVudCB8fCAhJEVsZW1lbnQtPntTZWxlY3RlZFZhbHVlc307CiAgICAgICAgICAgIG15ICRFbGVtZW50TmFtZSA9ICRFbGVtZW50LT57RWxlbWVudH07CiAgICAgICAgICAgIG15ICRWYWx1ZXMgICAgICA9ICRFbGVtZW50LT57U2VsZWN0ZWRWYWx1ZXN9OwoKICAgICAgICAgICAgaWYgKCAkRWxlbWVudE5hbWUgZXEgJ0NJU3RhdGVJRHMnICkgewogICAgICAgICAgICAgICAgSUQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJElEICggQHskVmFsdWVzfSApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IElEIGlmICEkSUQ7CgogICAgICAgICAgICAgICAgICAgIEtFWToKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyRJbmNpU3RhdGVMaXN0fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkSUQtPntDb250ZW50fSBlcSAkSW5jaVN0YXRlTGlzdC0+eyRLZXl9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElELT57Q29udGVudH0gPSAkS2V5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBLRVk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkRWxlbWVudE5hbWUgZXEgJ0NJQ2xhc3NJRHMnICkgewogICAgICAgICAgICAgICAgSUQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJElEICggQHskVmFsdWVzfSApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IElEIGlmICEkSUQ7CgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7JENsYXNzTGlzdH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJElELT57Q29udGVudH0gZXEgJENsYXNzTGlzdC0+eyRLZXl9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJElELT57Q29udGVudH0gPSAkS2V5OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGltcG9ydCB3cmFwcGVyIGZvciBDSVAKICAgICAgICAgICAgZm9yIG15ICRUeXBlIChxdyhDYXRlZ29yeSkpIHsKICAgICAgICAgICAgICAgIGlmICggJEVsZW1lbnROYW1lIGVxICRUeXBlIC4gJ0lEcycgKSB7CiAgICAgICAgICAgICAgICAgICAgSUQ6CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRJRCAoIEB7JFZhbHVlc30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgSUQgaWYgISRJRDsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRDSVBJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZUNJUExvb2t1cCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENJUCAgPT4gJElELT57Q29udGVudH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJENJUElEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSUQtPntDb250ZW50fSA9ICRDSVBJRDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkltcG9ydDogQ2FuJyBmaW5kICRUeXBlICRJRC0+e0NvbnRlbnR9ISIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSUQgPSB1bmRlZjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBcJVBhcmFtOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpJVFNNQ2hhbmdlTWFuYWdlbWVudEhpc3Rvcnk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Okhpc3RvcnknLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgR2V0T2JqZWN0TmFtZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAnSVRTTUNoYW5nZU1hbmFnZW1lbnRIaXN0b3J5JzsKfQoKc3ViIEdldE9iamVjdEF0dHJpYnV0ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjaGFuZ2Ugc3RhdGUgbGlzdAogICAgbXkgJENoYW5nZVN0YXRlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZVBvc3NpYmxlU3RhdGVzR2V0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgIG15ICVDaGFuZ2VTdGF0ZUxpc3QgPSBtYXAgeyAkXy0+e0tleX0gPT4gJF8tPntWYWx1ZX0gfSBAeyRDaGFuZ2VTdGF0ZXN9OwoKICAgICMgZ2V0IGN1cnJlbnQgdGltZSB0byBmaXggYnVnIzQ4NzAKICAgIG15ICRUaW1lU3RhbXAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGltZScpLT5DdXJyZW50VGltZXN0YW1wKCk7CiAgICBteSAoJERhdGUpID0gc3BsaXQgL1xzKy8sICRUaW1lU3RhbXA7CiAgICBteSAkVG9kYXkgPSBzcHJpbnRmICIlcyAyMzo1OTo1OSIsICREYXRlOwoKICAgIG15IEBPYmplY3RBdHRyaWJ1dGVzID0gKAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnQ2hhbmdlIFN0YXRlJywKICAgICAgICAgICAgVXNlQXNYdmFsdWUgICAgICA9PiAxLAogICAgICAgICAgICBVc2VBc1ZhbHVlU2VyaWVzID0+IDEsCiAgICAgICAgICAgIFVzZUFzUmVzdHJpY3Rpb24gPT4gMSwKICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICA9PiAnTmV3VmFsdWVzJywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnTXVsdGlTZWxlY3RGaWVsZCcsCiAgICAgICAgICAgIFZhbHVlcyAgICAgICAgICAgPT4gXCVDaGFuZ2VTdGF0ZUxpc3QsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1RpbWVwZXJpb2QnLAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMSwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAxLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICdUaW1lUGVyaW9kJywKICAgICAgICAgICAgVGltZVBlcmlvZEZvcm1hdCA9PiAnRGF0ZUlucHV0Rm9ybWF0JywgICAgIyAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ1RpbWUnLAogICAgICAgICAgICBUaW1lU3RvcCAgICAgICAgID0+ICRUb2RheSwKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICBUaW1lU3RhcnQgPT4gJ0NoYW5nZVRpbWVOZXdlckRhdGUnLAogICAgICAgICAgICAgICAgVGltZVN0b3AgID0+ICdDaGFuZ2VUaW1lT2xkZXJEYXRlJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gQE9iamVjdEF0dHJpYnV0ZXM7Cn0KCnN1YiBHZXRTdGF0RWxlbWVudFByZXZpZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaW50IHJhbmQgNTA7Cn0KCnN1YiBHZXRTdGF0RWxlbWVudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgc2VhcmNoIGhpc3RvcnkKICAgIG15ICRJRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SGlzdG9yeScpLT5IaXN0b3J5U2VhcmNoKAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgIFR5cGUgICAgICA9PiAnQ2hhbmdlJywKICAgICAgICBBdHRyaWJ1dGUgPT4gJ0NoYW5nZVN0YXRlSUQnLAogICAgICAgIExpbWl0ICAgICA9PiAxMDBfMDAwXzAwMCwKICAgICAgICAlUGFyYW0sCiAgICApOwoKICAgIG15IEBDaGFuZ2VOdW1iZXJzOwogICAgaWYgKCAkSURzICYmIHJlZiAkSURzIGVxICdBUlJBWScgKSB7CgogICAgICAgIElEOgogICAgICAgIGZvciBteSAkSUQgKCBAeyRJRHN9ICkgewogICAgICAgICAgICBteSAkQ2hhbmdlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlR2V0KAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJElELAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgSUQgaWYgISRDaGFuZ2U7CgogICAgICAgICAgICBwdXNoIEBDaGFuZ2VOdW1iZXJzLCAkQ2hhbmdlLT57Q2hhbmdlTnVtYmVyfTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGpvaW4gIlxuIiwgQENoYW5nZU51bWJlcnM7Cn0KCnN1YiBFeHBvcnRXcmFwcGVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyB3cmFwIGlkcyB0byB1c2VkIHNwZWxsaW5nCiAgICBmb3IgbXkgJFVzZSAocXcoVXNlQXNWYWx1ZVNlcmllcyBVc2VBc1Jlc3RyaWN0aW9uIFVzZUFzWHZhbHVlKSkgewogICAgICAgIEVMRU1FTlQ6CiAgICAgICAgZm9yIG15ICRFbGVtZW50ICggQHsgJFBhcmFteyRVc2V9IH0gKSB7CiAgICAgICAgICAgIG5leHQgRUxFTUVOVCBpZiAhJEVsZW1lbnQgfHwgISRFbGVtZW50LT57U2VsZWN0ZWRWYWx1ZXN9OwogICAgICAgICAgICBteSAkRWxlbWVudE5hbWUgPSAkRWxlbWVudC0+e0VsZW1lbnR9OwogICAgICAgICAgICBteSAkVmFsdWVzICAgICAgPSAkRWxlbWVudC0+e1NlbGVjdGVkVmFsdWVzfTsKCiAgICAgICAgICAgIGlmICggJEVsZW1lbnROYW1lIGVxICdOZXdWYWx1ZXMnICkgewogICAgICAgICAgICAgICAgbXkgJFN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZVBvc3NpYmxlU3RhdGVzR2V0KCBVc2VySUQgPT4gMSApOwogICAgICAgICAgICAgICAgSUQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJElEICggQHskVmFsdWVzfSApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IElEIGlmICEkSUQ7CgogICAgICAgICAgICAgICAgICAgIFNUQVRFOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkU3RhdGUgKCBAeyRTdGF0ZUxpc3R9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBuZXh0IFNUQVRFIGlmICRJRC0+e0NvbnRlbnR9IG5lICRTdGF0ZS0+e0tleX07CiAgICAgICAgICAgICAgICAgICAgICAgICRJRC0+e0NvbnRlbnR9ID0gJFN0YXRlLT57VmFsdWV9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBcJVBhcmFtOwp9CgpzdWIgSW1wb3J0V3JhcHBlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgd3JhcCB1c2VkIHNwZWxsaW5nIHRvIGlkcwogICAgZm9yIG15ICRVc2UgKHF3KFVzZUFzVmFsdWVTZXJpZXMgVXNlQXNSZXN0cmljdGlvbiBVc2VBc1h2YWx1ZSkpIHsKICAgICAgICBFTEVNRU5UOgogICAgICAgIGZvciBteSAkRWxlbWVudCAoIEB7ICRQYXJhbXskVXNlfSB9ICkgewogICAgICAgICAgICBuZXh0IEVMRU1FTlQgaWYgISRFbGVtZW50IHx8ICEkRWxlbWVudC0+e1NlbGVjdGVkVmFsdWVzfTsKICAgICAgICAgICAgbXkgJEVsZW1lbnROYW1lID0gJEVsZW1lbnQtPntFbGVtZW50fTsKICAgICAgICAgICAgbXkgJFZhbHVlcyAgICAgID0gJEVsZW1lbnQtPntTZWxlY3RlZFZhbHVlc307CgogICAgICAgICAgICBpZiAoICRFbGVtZW50TmFtZSBlcSAnTmV3VmFsdWVzJyApIHsKICAgICAgICAgICAgICAgIElEOgogICAgICAgICAgICAgICAgZm9yIG15ICRJRCAoIEB7JFZhbHVlc30gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJElEOwoKICAgICAgICAgICAgICAgICAgICBteSAkQ2hhbmdlU3RhdGVJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZVN0YXRlTG9va3VwKAogICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZSA9PiAkSUQtPntDb250ZW50fSwKICAgICAgICAgICAgICAgICAgICAgICAgQ2FjaGUgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIGlmICgkQ2hhbmdlU3RhdGVJRCkgewogICAgICAgICAgICAgICAgICAgICAgICAkSUQtPntDb250ZW50fSA9ICRDaGFuZ2VTdGF0ZUlEOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkltcG9ydDogQ2FuJyBmaW5kIHN0YXRlICRJRC0+e0NvbnRlbnR9ISIKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJElEID0gdW5kZWY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIFwlUGFyYW07Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpJVFNNQ2hhbmdlTWFuYWdlbWVudFJmY1JlcXVlc3RlcjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGltZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlVzZXInLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBHZXRPYmplY3ROYW1lIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICdJVFNNQ2hhbmdlTWFuYWdlbWVudFJmY1JlcXVlc3Rlcic7Cn0KCnN1YiBHZXRPYmplY3RBdHRyaWJ1dGVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFJmQ1R5cGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMnKTsKCiAgICAjIGdldCBhbGwgcmZjcwogICAgbXkgQFRpY2tldElEcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0U2VhcmNoKAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICBQZXJtaXNzaW9uID0+ICdybycsCiAgICAgICAgTGltaXQgICAgICA9PiAxMDBfMDAwXzAwMCwKICAgICAgICBUeXBlcyAgICAgID0+ICRSZkNUeXBlcywKICAgICAgICBSZXN1bHQgICAgID0+ICdBUlJBWScsCiAgICApOwoKICAgICMgZ2V0IGFsbCByZXF1ZXN0ZXIKICAgIG15ICVSZXF1ZXN0ZXI7CgogICAgVElDS0VUSUQ6CiAgICBmb3IgbXkgJFRpY2tldElEIChAVGlja2V0SURzKSB7CiAgICAgICAgbXkgJVRpY2tldCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBUSUNLRVRJRCBpZiAhJVRpY2tldDsKCiAgICAgICAgaWYgKCAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAgICAgbXkgJEN1c3RvbWVyVXNlcklEID0gJFRpY2tldHtDdXN0b21lclVzZXJJRH07CgogICAgICAgICAgICBuZXh0IFRJQ0tFVElEIGlmICRSZXF1ZXN0ZXJ7ImN1c3RvbWVyXyRDdXN0b21lclVzZXJJRCJ9OwoKICAgICAgICAgICAgbXkgJUN1c3RvbWVyVXNlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKS0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgICAgIFVzZXIgPT4gJEN1c3RvbWVyVXNlcklELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFJlcXVlc3RlcnsiY3VzdG9tZXJfJEN1c3RvbWVyVXNlcklEIn0gPSBzcHJpbnRmICIlcyAoJXMgJXMpIiwKICAgICAgICAgICAgICAgICRDdXN0b21lclVzZXJ7VXNlckxvZ2lufSwKICAgICAgICAgICAgICAgICRDdXN0b21lclVzZXJ7VXNlckZpcnN0bmFtZX0sCiAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2Vye1VzZXJMYXN0bmFtZX07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkT3duZXJJRCA9ICRUaWNrZXR7T3duZXJJRH07CgogICAgICAgICAgICBuZXh0IFRJQ0tFVElEIGlmICRSZXF1ZXN0ZXJ7ImFnZW50XyRPd25lcklEIn07CgogICAgICAgICAgICBteSAlVXNlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRPd25lcklELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFJlcXVlc3RlcnsiYWdlbnRfJE93bmVySUQifSA9IHNwcmludGYgIiVzICglcyAlcykiLAogICAgICAgICAgICAgICAgJFVzZXJ7VXNlckxvZ2lufSwKICAgICAgICAgICAgICAgICRVc2Vye1VzZXJGaXJzdG5hbWV9LAogICAgICAgICAgICAgICAgJFVzZXJ7VXNlckxhc3RuYW1lfTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgY3VycmVudCB0aW1lIHRvIGZpeCBidWcjNDg3MAogICAgbXkgJFRpbWVTdGFtcCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyktPkN1cnJlbnRUaW1lc3RhbXAoKTsKICAgIG15ICgkRGF0ZSkgPSBzcGxpdCAvXHMrLywgJFRpbWVTdGFtcDsKICAgIG15ICRUb2RheSA9IHNwcmludGYgIiVzIDIzOjU5OjU5IiwgJERhdGU7CgogICAgbXkgQE9iamVjdEF0dHJpYnV0ZXMgPSAoCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdSZXF1ZXN0ZXInLAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDAsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMSwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAwLAogICAgICAgICAgICBTZWxlY3RlZFZhbHVlcyAgID0+IFsga2V5cyAlUmVxdWVzdGVyIF0sCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJ1JlcXVlc3RlcicsCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ011bHRpU2VsZWN0RmllbGQnLAogICAgICAgICAgICBWYWx1ZXMgICAgICAgICAgID0+IFwlUmVxdWVzdGVyLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdUaW1lcGVyaW9kJywKICAgICAgICAgICAgVXNlQXNYdmFsdWUgICAgICA9PiAxLAogICAgICAgICAgICBVc2VBc1ZhbHVlU2VyaWVzID0+IDAsCiAgICAgICAgICAgIFVzZUFzUmVzdHJpY3Rpb24gPT4gMCwKICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICA9PiAnVGltZVBlcmlvZCcsCiAgICAgICAgICAgIFRpbWVQZXJpb2RGb3JtYXQgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsICAgICMgJ0RhdGVJbnB1dEZvcm1hdExvbmcnLAogICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICdUaW1lJywKICAgICAgICAgICAgVGltZVN0b3AgICAgICAgICA9PiAkVG9kYXksCiAgICAgICAgICAgIFZhbHVlcyAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgVGltZVN0YXJ0ID0+ICdUaWNrZXRDcmVhdGVUaW1lTmV3ZXJEYXRlJywKICAgICAgICAgICAgICAgIFRpbWVTdG9wICA9PiAnVGlja2V0Q3JlYXRlVGltZU9sZGVyRGF0ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuIEBPYmplY3RBdHRyaWJ1dGVzOwp9CgpzdWIgR2V0U3RhdEVsZW1lbnRQcmV2aWV3IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIGludCByYW5kIDUwOwp9CgpzdWIgR2V0U3RhdEVsZW1lbnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIHdoYXQgdHlwZSBvZiByZXF1ZXN0ZXIgd2UgaGF2ZQogICAgIyB0aWNrZXQgc2VhcmNoIGNyaXRlcmlhIGRpZmZlciBmb3IgYWdlbnRzIGFuZCBjdXN0b21lcnMKICAgIG15ICRUeXBlID0gJyc7CiAgICBteSAkSUQ7CiAgICBpZiAoICRQYXJhbXtSZXF1ZXN0ZXJ9ICYmICRQYXJhbXtSZXF1ZXN0ZXJ9LT5bMF0gKSB7CiAgICAgICAgKCAkVHlwZSwgJElEICkgPSBzcGxpdCAvXy8sICRQYXJhbXtSZXF1ZXN0ZXJ9LT5bMF07CiAgICAgICAgbXkgJEtleSA9ICRUeXBlIGVxICdhZ2VudCcgPyAnT3duZXJJRHMnIDogJ0N1c3RvbWVyVXNlckxvZ2luJzsKICAgICAgICAkUGFyYW17JEtleX0gPSBbJElEXTsKICAgIH0KCiAgICAjIGdldCB0aWNrZXQgdHlwZXMgdGhhdCBhcmUgaGFuZGxlZCBhcyBSZkNzCiAgICBteSAkUmZDVHlwZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0lUU01DaGFuZ2U6OkFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcycpOwoKICAgICMgc2VhcmNoIHRpY2tldHMKICAgIG15IEBUaWNrZXRJRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldFNlYXJjaCgKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgUmVzdWx0ICAgICA9PiAnQVJSQVknLAogICAgICAgIFBlcm1pc3Npb24gPT4gJ3JvJywKICAgICAgICBMaW1pdCAgICAgID0+IDEwMF8wMDBfMDAwLAogICAgICAgIFR5cGVzICAgICAgPT4gJFJmQ1R5cGVzLAogICAgICAgICVQYXJhbSwKICAgICk7CgogICAgIyBpZiB0aGlzIHdhbnRzIHRoZSBudW1iZXIgb2YgUmZDcyBmb3IgYW4gYWdlbnQgd2UgaGF2ZSB0byBjaGVjawogICAgIyB3aGV0aGVyIGEgY3VzdG9tZXIgaWQgaXMgaW4gdGhlIHRpY2tldC4gVGhlIG93bmVyIGlzICpOT1QqIHRoZQogICAgIyByZXF1ZXN0ZXIgdGhlbi4KICAgIGlmICggJFR5cGUgZXEgJ2FnZW50JyApIHsKICAgICAgICBteSAkQ291bnQgPSAwOwoKICAgICAgICBUSUNLRVRJRDoKICAgICAgICBmb3IgbXkgJFRpY2tldElEIChAVGlja2V0SURzKSB7CiAgICAgICAgICAgIG15ICVUaWNrZXQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldEdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgVElDS0VUSUQgaWYgISVUaWNrZXQ7CiAgICAgICAgICAgIG5leHQgVElDS0VUSUQgaWYgJFRpY2tldHtDdXN0b21lclVzZXJJRH07CgogICAgICAgICAgICAkQ291bnQrKzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkQ291bnQ7CiAgICB9CgogICAgcmV0dXJuIHNjYWxhciBAVGlja2V0SURzOwp9CgpzdWIgRXhwb3J0V3JhcHBlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBcJVBhcmFtOwp9CgpzdWIgSW1wb3J0V3JhcHBlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBcJVBhcmFtOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QWNsOjpSZXN0cmljdFRpY2tldFR5cGVzOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcsCik7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDb25maWcgQWNsKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIHVzZXIgaWQgaXMgZ2l2ZW4KICAgIHJldHVybiAxIGlmICEkUGFyYW17VXNlcklEfTsKCiAgICAjIGdldCBhbmQgY2hlY2sgdGhlIGxpc3Qgb2YgcmVsZXZhbnQgdGlja2V0IHR5cGVzCiAgICBteSAkQWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMnKTsKCiAgICByZXR1cm4gMSBpZiAhJEFkZENoYW5nZUxpbmtUaWNrZXRUeXBlczsKICAgIHJldHVybiAxIGlmIHJlZiAkQWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzIG5lICdBUlJBWSc7CiAgICByZXR1cm4gMSBpZiAhQHskQWRkQ2hhbmdlTGlua1RpY2tldFR5cGVzfTsKCiAgICAjIGNyZWF0ZSBhIGxvb2t1cCBoYXNoIGZvciB0aGUgcmVsZXZhbnQgdGlja2V0IHR5cGVzCiAgICBteSAlSXNSZWxldmFudCA9IG1hcCB7ICRfID0+IDEgfSBAeyRBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXN9OwoKICAgICMgaWYgdGlja2V0IGlkIHdhcyBnaXZlbgogICAgaWYgKCAkUGFyYW17VGlja2V0SUR9ICkgewoKICAgICAgICAjIGdldCB0aWNrZXQgZGF0YQogICAgICAgIG15ICVUaWNrZXQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldEdldCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIHRpY2tldCBleGlzdHMKICAgICAgICByZXR1cm4gMSBpZiAhJVRpY2tldDsKCiAgICAgICAgIyBkb24ndCByZW1vdmUgcmVsZXZhbnQgdHlwZXMgZnJvbSB0eXBlIGxpc3QKICAgICAgICAjIGlmIHRoZSB0aWNrZXQgdHlwZSBpcyBhbHJlYWR5IG9uZSBvZiB0aGVzZSB0eXBlcwogICAgICAgIHJldHVybiAxIGlmICRJc1JlbGV2YW50eyAkVGlja2V0e1R5cGV9IH07CiAgICB9CgogICAgIyBnZXQgdXNlciBncm91cHMsIHdoZXJlIHRoZSB1c2VyIGhhcyB0aGUgcncgcHJpdmlsZWdlCiAgICBteSAlR3JvdXBzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICAgICBDYWNoZWQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgYW5kIGNoZWNrIHRoZSBsaXN0IG9mIGdyb3VwcyB3aG8gYXJlIGFsbG93ZWQgdG8gdXNlIHRoZSBBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMKICAgIG15ICRSZXN0cmljdFRpY2tldFR5cGVzR3JvdXBzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdJVFNNQ2hhbmdlOjpSZXN0cmljdFRpY2tldFR5cGVzOjpHcm91cHMnKTsKCiAgICByZXR1cm4gMSBpZiAhJFJlc3RyaWN0VGlja2V0VHlwZXNHcm91cHM7CiAgICByZXR1cm4gMSBpZiByZWYgJFJlc3RyaWN0VGlja2V0VHlwZXNHcm91cHMgbmUgJ0FSUkFZJzsKICAgIHJldHVybiAxIGlmICFAeyRSZXN0cmljdFRpY2tldFR5cGVzR3JvdXBzfTsKCiAgICAjIGNoZWNrIGlmIHRoZSB1c2VyIGlzIGluIG9uZSBvZiB0aGVzZSBncm91cHMKICAgIGZvciBteSAkR3JvdXAgKCBAeyRSZXN0cmljdFRpY2tldFR5cGVzR3JvdXBzfSApIHsKCiAgICAgICAgIyBnZXQgdGhlIGdyb3VwIGlkCiAgICAgICAgbXkgJEdyb3VwSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMb29rdXAoCiAgICAgICAgICAgIEdyb3VwID0+ICRHcm91cCwKICAgICAgICApOwoKICAgICAgICAjIGRvIG5vdCByZW1vdmUgdGhlIHRpY2tldCB0eXBlICdSZkMnIGlmIHVzZXIgaXMgaW4gb25lIG9mIHRoZSBncm91cHMKICAgICAgICByZXR1cm4gMSBpZiAkR3JvdXBzeyRHcm91cElEfTsKICAgIH0KCiAgICAjIGdlbmVyYXRlIGFjbAogICAgJFBhcmFte0FjbH0tPntSZXN0cmljdFRpY2tldFR5cGVzfSA9IHsKCiAgICAgICAgIyByZW1vdmUgdGlja2V0IHR5cGVzIGxpc3RlZCBpbiBzeXNjb25maWcgb3B0aW9uICdJVFNNQ2hhbmdlOjpBZGRDaGFuZ2VMaW5rVGlja2V0VHlwZXMnCiAgICAgICAgIyBmcm9tIHR5cGUgZHJvcGRvd24gbGlzdCBpbiBhbGwgZnJvbnRlbmQgbW9kdWxlcwogICAgICAgIFBvc3NpYmxlTm90ID0+IHsKICAgICAgICAgICAgVGlja2V0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJEFkZENoYW5nZUxpbmtUaWNrZXRUeXBlcywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfTsKCiAgICByZXR1cm4gMTsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkNvbW1hbmQ6OkFkbWluOjpJVFNNOjpDaGFuZ2U6OkRlbGV0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBiYXNlIHF3KEtlcm5lbDo6U3lzdGVtOjpDb25zb2xlOjpCYXNlQ29tbWFuZCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScsCik7CgpzdWIgQ29uZmlndXJlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPkRlc2NyaXB0aW9uKCdEZWxldGUgY2hhbmdlcyAgKGFsbCBvciBieSBudW1iZXIpLicpOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAnYWxsJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiRGVsZXRlIGFsbCBjaGFuZ2VzLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICAgICBIYXNWYWx1ZSAgICA9PiAwLAogICAgKTsKICAgICRTZWxmLT5BZGRBcmd1bWVudCgKICAgICAgICBOYW1lICAgICAgICA9PiAnYWNjZXB0JywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiQWNjZXB0IGRlbGV0ZSBhbGwgb3IgY2FuY2VsLiIsCiAgICAgICAgUmVxdWlyZWQgICAgPT4gMCwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci8oeXxuKS9zbXgsCiAgICApOwogICAgJFNlbGYtPkFkZE9wdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAnY2hhbmdlLW51bWJlcicsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gIkRlbGV0ZSBsaXN0ZWQgY2hhbmdlcy4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMSwKICAgICAgICBWYWx1ZVJlZ2V4ICA9PiBxci9cZCsvc214LAogICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICApOwoKICAgIHJldHVybjsKfQoKc3ViIFByZVJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15IEBDaGFuZ2VOdW1iZXJzID0gQHsgJFNlbGYtPkdldE9wdGlvbignY2hhbmdlLW51bWJlcicpIC8vIFtdIH07CgogICAgaWYgKCAhJFNlbGYtPkdldE9wdGlvbignYWxsJykgJiYgIUBDaGFuZ2VOdW1iZXJzICkgewogICAgICAgIGRpZSAiUGxlYXNlIHByb3ZpZGUgb3B0aW9uIC0tYWxsIG9yIC0tY2hhbmdlLW51bWJlci4gRm9yIG1vcmUgZGV0YWlscyB1c2UgLS1oZWxwXG4iOwogICAgfQoKICAgIHJldHVybjsKCn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+UHJpbnQoIjx5ZWxsb3c+RGVsZXRpbmcgY2hhbmdlcy4uLjwveWVsbG93PlxuIik7CgogICAgJFNlbGYtPlByaW50KCAiPGdyZWVuPiIgLiAoICc9JyB4IDY5ICkgLiAiPC9ncmVlbj5cbiIgKTsKCiAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAjIGdldCBjaGFuZ2UgbnVtYmVycwogICAgbXkgQENoYW5nZU51bWJlcnMgPSBAeyAkU2VsZi0+R2V0T3B0aW9uKCdjaGFuZ2UtbnVtYmVyJykgLy8gW10gfTsKCiAgICAjIGRlbGV0ZSBhbGwgY2hhbmdlcwogICAgaWYgKCAkU2VsZi0+R2V0T3B0aW9uKCdhbGwnKSApIHsKCiAgICAgICAgIyBnZXQgYWxsIGNoYW5nZSBpZHMKICAgICAgICBteSBAQ2hhbmdlc0lEcyA9IEB7ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUxpc3QoIFVzZXJJRCA9PiAxICkgfTsKCiAgICAgICAgIyBnZXQgbnVtYmVyIG9mIGNoYW5nZXMKICAgICAgICBteSAkQ2hhbmdlQ291bnQgPSBzY2FsYXIgQENoYW5nZXNJRHM7CgogICAgICAgICMgaWYgdGhlcmUgYXJlIGFueSBjaGFuZ2VzIHRvIGRlbGV0ZQogICAgICAgIGlmICgkQ2hhbmdlQ291bnQpIHsKCiAgICAgICAgICAgICRTZWxmLT5QcmludCgiPHllbGxvdz5BcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgQUxMICRDaGFuZ2VDb3VudCBjaGFuZ2VzPzwveWVsbG93PlxuIik7CiAgICAgICAgICAgICRTZWxmLT5QcmludCgiPHllbGxvdz5UaGlzIGlzIGlycmV2b2NhYmxlLiBbeS9uXSA8L3llbGxvdz5cbiIpOwogICAgICAgICAgICBteSAkQ29uZmlybWF0aW9uID0gJFNlbGYtPkdldEFyZ3VtZW50KCdhY2NlcHQnKTsKICAgICAgICAgICAgY2hvbXAoICRDb25maXJtYXRpb24gPSBsYyA8U1RESU4+ICkgaWYgIWRlZmluZWQgJENvbmZpcm1hdGlvbjsKCiAgICAgICAgICAgICMgaWYgdGhlIHVzZXIgY29uZmlybXMgdGhlIGRlbGV0aW9uCiAgICAgICAgICAgIGlmICggJENvbmZpcm1hdGlvbiBlcSAneScgKSB7CgogICAgICAgICAgICAgICAgIyBkZWxldGUgY2hhbmdlcwogICAgICAgICAgICAgICAgJFNlbGYtPlByaW50KCI8eWVsbG93PkRlbGV0aW5nIGFsbCBjaGFuZ2VzLi4uPC95ZWxsb3c+XG4iKTsKICAgICAgICAgICAgICAgICRTZWxmLT5EZWxldGVDaGFuZ2VzKCBDaGFuZ2VzSURzID0+IFxAQ2hhbmdlc0lEcyApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNlbGYtPlByaW50KCI8eWVsbG93PkNvbW1hbmQgZGVsZXRlIHdhcyBjYW5jZWxlZCE8L3llbGxvdz5cbiIpOwogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5FeGl0Q29kZU9rKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5QcmludCgiPHllbGxvdz5UaGVyZSBhcmUgTk8gY2hhbmdlcyB0byBkZWxldGUuPC95ZWxsb3c+XG4iKTsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgbGlzdGVkIGNoYW5nZXMKICAgIGVsc2lmIChAQ2hhbmdlTnVtYmVycykgewoKICAgICAgICBteSBAQ2hhbmdlc0lEczsKCiAgICAgICAgZm9yIG15ICRDaGFuZ2VOdW1iZXIgKEBDaGFuZ2VOdW1iZXJzKSB7CgogICAgICAgICAgICAjIGNoZWNrcyB0aGUgdmFsaWRpdHkgb2YgdGhlIGNoYW5nZSBpZAogICAgICAgICAgICBteSAkSUQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VMb29rdXAoCiAgICAgICAgICAgICAgICBDaGFuZ2VOdW1iZXIgPT4gJENoYW5nZU51bWJlciwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkSUQpIHsKICAgICAgICAgICAgICAgIHB1c2ggQENoYW5nZXNJRHMsICRJRDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTZWxmLT5QcmludEVycm9yKCJVbmFibGUgdG8gZmluZCBjaGFuZ2UgJENoYW5nZU51bWJlci4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgY2hhbmdlcyAoaWYgYW55IHZhbGlkIG51bWJlciB3YXMgZ2l2ZW4pCiAgICAgICAgaWYgKEBDaGFuZ2VzSURzKSB7CiAgICAgICAgICAgICRTZWxmLT5QcmludCgiPHllbGxvdz5EZWxldGluZyBzcGVjaWZpZWQgY2hhbmdlcy4uLjwveWVsbG93PlxuIik7CiAgICAgICAgICAgICRTZWxmLT5EZWxldGVDaGFuZ2VzKCBDaGFuZ2VzSURzID0+IFxAQ2hhbmdlc0lEcyApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5QcmludEVycm9yKCJObyBjaGFuZ2UgZm9yIGRlbGV0ZS4iKTsKICAgIH0KCiAgICAkU2VsZi0+UHJpbnQoICI8Z3JlZW4+IiAuICggJz0nIHggNjkgKSAuICI8L2dyZWVuPlxuIiApOwogICAgJFNlbGYtPlByaW50KCI8Z3JlZW4+RG9uZS48L2dyZWVuPlxuIik7CiAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlT2soKTsKfQoKc3ViIERlbGV0ZUNoYW5nZXMgewoKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJERlbGV0ZWRDaGFuZ2VzID0gMDsKCiAgICAjIGRlbGV0ZSBzcGVjaWZpZWQgY2hhbmdlcwogICAgZm9yIG15ICRDaGFuZ2VJRCAoIEB7ICRQYXJhbXtDaGFuZ2VzSURzfSB9ICkgewogICAgICAgIG15ICRUcnVlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICBpZiAoICEkVHJ1ZSApIHsKICAgICAgICAgICAgJFNlbGYtPlByaW50RXJyb3IoIlVuYWJsZSB0byBkZWxldGUgY2hhbmdlIHdpdGggaWQgJENoYW5nZUlEXG4iKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICREZWxldGVkQ2hhbmdlcysrOwogICAgICAgIH0KICAgIH0KCiAgICAkU2VsZi0+UHJpbnQoIjxncmVlbj5EZWxldGVkICREZWxldGVkQ2hhbmdlcyBjaGFuZ2UocykuPC9ncmVlbj5cblxuIik7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OkNvbnNvbGU6OkNvbW1hbmQ6OkFkbWluOjpJVFNNOjpDaGFuZ2U6OkNoZWNrOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIGJhc2UgcXcoCiAgICBLZXJuZWw6OlN5c3RlbTo6Q29uc29sZTo6QmFzZUNvbW1hbmQKICAgIEtlcm5lbDo6U3lzdGVtOjpFdmVudEhhbmRsZXIpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJywKICAgICdLZXJuZWw6OlN5c3RlbTo6UElEJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpIaXN0b3J5JywKKTsKCnN1YiBDb25maWd1cmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+RGVzY3JpcHRpb24oJ0NoZWNrIGlmIElUU00gY2hhbmdlcyBoYXZlIHJlYWNoZWQgc3BlY2lmaWMgdGltZXMuJyk7CiAgICAkU2VsZi0+QWRkT3B0aW9uKAogICAgICAgIE5hbWUgICAgICAgID0+ICdmb3JjZS1waWQnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICJTdGFydCBldmVuIGlmIGFub3RoZXIgcHJvY2VzcyBpcyBzdGlsbCByZWdpc3RlcmVkIGluIHRoZSBkYXRhYmFzZS4iLAogICAgICAgIFJlcXVpcmVkICAgID0+IDAsCiAgICAgICAgSGFzVmFsdWUgICAgPT4gMCwKICAgICk7CgogICAgcmV0dXJuOwp9CgpzdWIgUHJlUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgUElEIG9iamVjdAogICAgbXkgJFBJRE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQSUQnKTsKCiAgICAjIGNyZWF0ZSBQSUQgbG9jawogICAgbXkgJFBJRENyZWF0ZWQgPSAkUElET2JqZWN0LT5QSURDcmVhdGUoCiAgICAgICAgTmFtZSAgPT4gJFNlbGYtPk5hbWUoKSwKICAgICAgICBGb3JjZSA9PiAkU2VsZi0+R2V0T3B0aW9uKCdmb3JjZS1waWQnKSwKICAgICAgICBUVEwgICA9PiA2MCAqIDYwICogMiwKICAgICk7CiAgICBpZiAoICEkUElEQ3JlYXRlZCApIHsKICAgICAgICBteSAkRXJyb3IgPSAiVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBwcm9jZXNzIGluIHRoZSBkYXRhYmFzZS4gSXMgYW5vdGhlciBpbnN0YW5jZSBzdGlsbCBydW5uaW5nP1xuIjsKICAgICAgICAkRXJyb3IgLj0gIllvdSBjYW4gdXNlIC0tZm9yY2UtcGlkIHRvIG92ZXJyaWRlIHRoaXMgY2hlY2suXG4iOwogICAgICAgIGRpZSAkRXJyb3I7CiAgICB9CgogICAgIyBpbml0IG9mIGV2ZW50IGhhbmRsZXIKICAgICRTZWxmLT5FdmVudEhhbmRsZXJJbml0KAogICAgICAgIENvbmZpZyA9PiAnSVRTTUNoYW5nZUNyb25qb2I6OkV2ZW50TW9kdWxlJywKICAgICk7CgogICAgIyBnZXQgdGltZSBvYmplY3QKICAgIG15ICRUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKTsKCiAgICAkU2VsZi0+e1N5c3RlbVRpbWV9ID0gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKTsKICAgICRTZWxmLT57Tm93fSAgICAgICAgPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU2VsZi0+e1N5c3RlbVRpbWV9LAogICAgKTsKCiAgICByZXR1cm47Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+UHJpbnQoIjx5ZWxsb3c+Q2hlY2tpbmcgSVRTTSBjaGFuZ2VzLi4uPC95ZWxsb3c+XG4iKTsKCiAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAjIG5vdGlmaWNhdGlvbnMgZm9yIGNoYW5nZXMnIHBsYW5uZWRYWFh0aW1lIGV2ZW50cwogICAgZm9yIG15ICRUeXBlIChxdyhTdGFydFRpbWUgRW5kVGltZSkpIHsKCiAgICAgICAgIyBnZXQgY2hhbmdlcyB3aXRoIFBsYW5uZWRTdGFydFRpbWUgb2xkZXIgdGhhbiBub3cKICAgICAgICBteSAkUGxhbm5lZENoYW5nZUlEcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVNlYXJjaCgKICAgICAgICAgICAgIlBsYW5uZWQke1R5cGV9T2xkZXJEYXRlIiA9PiAkU2VsZi0+e05vd30sCiAgICAgICAgICAgIE1pcnJvckRCICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICkgfHwgW107CgogICAgICAgIENIQU5HRUlEOgogICAgICAgIGZvciBteSAkQ2hhbmdlSUQgKCBAeyRQbGFubmVkQ2hhbmdlSURzfSApIHsKCiAgICAgICAgICAgICMgZ2V0IGNoYW5nZSBkYXRhCiAgICAgICAgICAgIG15ICRDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBza2lwIGNoYW5nZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdHVhbFhYWHRpbWUgc2V0IG9yIG5vdGlmaWNhdGlvbiB3YXMgc2VudAogICAgICAgICAgICBuZXh0IENIQU5HRUlEIGlmICRDaGFuZ2UtPnsiQWN0dWFsJFR5cGUifTsKCiAgICAgICAgICAgIG15ICRMYXN0Tm90aWZpY2F0aW9uU2VudERhdGUgPSAkU2VsZi0+Q2hhbmdlTm90aWZpY2F0aW9uU2VudCgKICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgIFR5cGUgICAgID0+ICJQbGFubmVkJHtUeXBlfSIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkQWxyZWFkeVNlbnRXaXRoaW5QZXJpb2QgPSAkU2VsZi0+U2VudFdpdGhpblBlcmlvZCgKICAgICAgICAgICAgICAgIExhc3ROb3RpZmljYXRpb25TZW50RGF0ZSA9PiAkTGFzdE5vdGlmaWNhdGlvblNlbnREYXRlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBDSEFOR0VJRCBpZiAkQWxyZWFkeVNlbnRXaXRoaW5QZXJpb2Q7CgogICAgICAgICAgICAjIHRyaWdnZXIgQ2hhbmdlUGxhbm5lZFN0YXJ0VGltZVJlYWNoZWRQb3N0LUV2ZW50CiAgICAgICAgICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgICAgICAgICBFdmVudCA9PiAiQ2hhbmdlUGxhbm5lZCR7VHlwZX1SZWFjaGVkUG9zdCIsCiAgICAgICAgICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgY2hhbmdlcyB3aXRoIGFjdHVhbHh4eHRpbWUKICAgICAgICBteSAkQWN0dWFsQ2hhbmdlSURzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgICAgICAiQWN0dWFsJHtUeXBlfU9sZGVyRGF0ZSIgPT4gJFNlbGYtPntOb3d9LAogICAgICAgICAgICBNaXJyb3JEQiAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKSB8fCBbXTsKCiAgICAgICAgQUNUVUFMQ0hBTkdFSUQ6CiAgICAgICAgZm9yIG15ICRDaGFuZ2VJRCAoIEB7JEFjdHVhbENoYW5nZUlEc30gKSB7CgogICAgICAgICAgICAjIGdldCBjaGFuZ2UgZGF0YQogICAgICAgICAgICBteSAkQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRMYXN0Tm90aWZpY2F0aW9uU2VudERhdGUgPSAkU2VsZi0+Q2hhbmdlTm90aWZpY2F0aW9uU2VudCgKICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgIFR5cGUgICAgID0+ICJBY3R1YWwke1R5cGV9IiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgQUNUVUFMQ0hBTkdFSUQgaWYgJExhc3ROb3RpZmljYXRpb25TZW50RGF0ZTsKCiAgICAgICAgICAgICMgdHJpZ2dlciBFdmVudAogICAgICAgICAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgICAgICAgICAgRXZlbnQgPT4gIkNoYW5nZUFjdHVhbCR7VHlwZX1SZWFjaGVkUG9zdCIsCiAgICAgICAgICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBjaGFuZ2VzIHdpdGggUmVxdWVzdGVkVGltZU9sZGVyRGF0ZQogICAgbXkgJFJlcXVlc3RlZFRpbWVDaGFuZ2VJRHMgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VTZWFyY2goCiAgICAgICAgUmVxdWVzdGVkVGltZU9sZGVyRGF0ZSA9PiAkU2VsZi0+e05vd30sCiAgICAgICAgTWlycm9yREIgICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgPT4gMSwKICAgICkgfHwgW107CgogICAgQ0hBTkdFSUQ6CiAgICBmb3IgbXkgJENoYW5nZUlEICggQHskUmVxdWVzdGVkVGltZUNoYW5nZUlEc30gKSB7CgogICAgICAgICMgZ2V0IGNoYW5nZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUdldCgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRMYXN0Tm90aWZpY2F0aW9uU2VudERhdGUgPSAkU2VsZi0+Q2hhbmdlTm90aWZpY2F0aW9uU2VudCgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBUeXBlICAgICA9PiAiUmVxdWVzdGVkVGltZSIsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBDSEFOR0VJRCBpZiAkTGFzdE5vdGlmaWNhdGlvblNlbnREYXRlOwoKICAgICAgICAjIHRyaWdnZXIgRXZlbnQKICAgICAgICAkU2VsZi0+RXZlbnRIYW5kbGVyKAogICAgICAgICAgICBFdmVudCA9PiAiQ2hhbmdlUmVxdWVzdGVkVGltZVJlYWNoZWRQb3N0IiwKICAgICAgICAgICAgRGF0YSAgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgbm90aWZpY2F0aW9ucyBmb3Igd29ya29yZGVycycgcGxhbm5lZFhYWHRpbWUgZXZlbnRzCiAgICBmb3IgbXkgJFR5cGUgKHF3KFN0YXJ0VGltZSBFbmRUaW1lKSkgewoKICAgICAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiAgICAgICAgIyBnZXQgd29ya29yZGVycyB3aXRoIFBsYW5uZWRTdGFydFRpbWUgb2xkZXIgdGhhbiBub3cKICAgICAgICBteSAkUGxhbm5lZFdvcmtPcmRlcklEcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclNlYXJjaCgKICAgICAgICAgICAgIlBsYW5uZWQke1R5cGV9T2xkZXJEYXRlIiA9PiAkU2VsZi0+e05vd30sCiAgICAgICAgICAgIE1pcnJvckRCICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICkgfHwgW107CgogICAgICAgIFdPUktPUkRFUklEOgogICAgICAgIGZvciBteSAkV29ya09yZGVySUQgKCBAeyRQbGFubmVkV29ya09yZGVySURzfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHdvcmtvcmRlciBkYXRhCiAgICAgICAgICAgIG15ICRXb3JrT3JkZXIgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBza2lwIHdvcmtvcmRlciBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGFjdHVhbFhYWHRpbWUgc2V0IG9yIG5vdGlmaWNhdGlvbiB3YXMgc2VudAogICAgICAgICAgICBuZXh0IFdPUktPUkRFUklEIGlmICRXb3JrT3JkZXItPnsiQWN0dWFsJFR5cGUifTsKCiAgICAgICAgICAgIG15ICRMYXN0Tm90aWZpY2F0aW9uU2VudERhdGUgPSAkU2VsZi0+V29ya09yZGVyTm90aWZpY2F0aW9uU2VudCgKICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICJQbGFubmVkJHtUeXBlfSIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkQWxyZWFkeVNlbnRXaXRoaW5QZXJpb2QgPSAkU2VsZi0+U2VudFdpdGhpblBlcmlvZCgKICAgICAgICAgICAgICAgIExhc3ROb3RpZmljYXRpb25TZW50RGF0ZSA9PiAkTGFzdE5vdGlmaWNhdGlvblNlbnREYXRlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBXT1JLT1JERVJJRCBpZiAkQWxyZWFkeVNlbnRXaXRoaW5QZXJpb2Q7CgogICAgICAgICAgICAjIHRyaWdnZXIgV29ya09yZGVyUGxhbm5lZFN0YXJ0VGltZVJlYWNoZWRQb3N0LUV2ZW50CiAgICAgICAgICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgICAgICAgICBFdmVudCA9PiAiV29ya09yZGVyUGxhbm5lZCR7VHlwZX1SZWFjaGVkUG9zdCIsCiAgICAgICAgICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgICAgIENoYW5nZUlEICAgID0+ICRXb3JrT3JkZXItPntDaGFuZ2VJRH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB3b3Jrb3JkZXJzIHdpdGggYWN0dWFseHh4dGltZQogICAgICAgIG15ICRBY3R1YWxXb3JrT3JkZXJJRHMgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJTZWFyY2goCiAgICAgICAgICAgICJBY3R1YWwke1R5cGV9T2xkZXJEYXRlIiA9PiAkU2VsZi0+e05vd30sCiAgICAgICAgICAgIE1pcnJvckRCICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICApIHx8IFtdOwoKICAgICAgICBXT1JLT1JERVJJRDoKICAgICAgICBmb3IgbXkgJFdvcmtPcmRlcklEICggQHskQWN0dWFsV29ya09yZGVySURzfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHdvcmtvcmRlciBkYXRhCiAgICAgICAgICAgIG15ICRXb3JrT3JkZXIgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJExhc3ROb3RpZmljYXRpb25TZW50RGF0ZSA9ICRTZWxmLT5Xb3JrT3JkZXJOb3RpZmljYXRpb25TZW50KAogICAgICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gIkFjdHVhbCR7VHlwZX0iLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBXT1JLT1JERVJJRCBpZiAkTGFzdE5vdGlmaWNhdGlvblNlbnREYXRlOwoKICAgICAgICAgICAgIyB0cmlnZ2VyIEV2ZW50CiAgICAgICAgICAgICRTZWxmLT5FdmVudEhhbmRsZXIoCiAgICAgICAgICAgICAgICBFdmVudCA9PiAiV29ya09yZGVyQWN0dWFsJHtUeXBlfVJlYWNoZWRQb3N0IiwKICAgICAgICAgICAgICAgIERhdGEgID0+IHsKICAgICAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJFdvcmtPcmRlci0+e0NoYW5nZUlEfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgJFNlbGYtPlByaW50KCI8Z3JlZW4+RG9uZS48L2dyZWVuPlxuIik7CiAgICByZXR1cm4gJFNlbGYtPkV4aXRDb2RlT2soKTsKCn0KCiMgY2hlY2sgaWYgYSBub3RpZmljYXRpb24gd2FzIGFscmVhZHkgc2VudCBmb3IgdGhlIGdpdmVuIGNoYW5nZQpzdWIgQ2hhbmdlTm90aWZpY2F0aW9uU2VudCB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KENoYW5nZUlEIFR5cGUpKSB7CiAgICAgICAgcmV0dXJuIGlmICEkUGFyYW17JE5lZWRlZH07CiAgICB9CgogICAgIyBnZXQgaGlzdG9yeSBlbnRyaWVzCiAgICBteSAkSGlzdG9yeSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpIaXN0b3J5JyktPkNoYW5nZUhpc3RvcnlHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJFBhcmFte0NoYW5nZUlEfSwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKCiAgICAjIHNlYXJjaCBmb3Igbm90aWZpY2F0aW9ucyBzZW50IGVhcmxpZXIKICAgIGZvciBteSAkSGlzdG9yeUVudHJ5ICggcmV2ZXJzZSBAeyRIaXN0b3J5fSApIHsKICAgICAgICBpZiAoCiAgICAgICAgICAgICRIaXN0b3J5RW50cnktPntIaXN0b3J5VHlwZX0gZXEgJ0NoYW5nZScgLiAkUGFyYW17VHlwZX0gLiAnUmVhY2hlZCcKICAgICAgICAgICAgJiYgJEhpc3RvcnlFbnRyeS0+e0NvbnRlbnROZXd9ID1+IG17IE5vdGlmaWNhdGlvbiBccyBTZW50ICQgfXhtcwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJEhpc3RvcnlFbnRyeS0+e0NyZWF0ZVRpbWV9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0KCiMgY2hlY2sgaWYgYSBub3RpZmljYXRpb24gd2FzIGFscmVhZHkgc2VudCBmb3IgdGhlIGdpdmVuIHdvcmtvcmRlcgpzdWIgV29ya09yZGVyTm90aWZpY2F0aW9uU2VudCB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFdvcmtPcmRlcklEIFR5cGUpKSB7CiAgICAgICAgcmV0dXJuIGlmICEkUGFyYW17JE5lZWRlZH07CiAgICB9CgogICAgIyBnZXQgaGlzdG9yeSBlbnRyaWVzCiAgICBteSAkSGlzdG9yeSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpIaXN0b3J5JyktPldvcmtPcmRlckhpc3RvcnlHZXQoCiAgICAgICAgV29ya09yZGVySUQgPT4gJFBhcmFte1dvcmtPcmRlcklEfSwKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKCiAgICAjIHNlYXJjaCBmb3Igbm90aWZpY2F0aW9ucyBzZW50IGVhcmxpZXIKICAgIGZvciBteSAkSGlzdG9yeUVudHJ5ICggcmV2ZXJzZSBAeyRIaXN0b3J5fSApIHsKICAgICAgICBpZiAoCiAgICAgICAgICAgICRIaXN0b3J5RW50cnktPntIaXN0b3J5VHlwZX0gZXEgJ1dvcmtPcmRlcicgLiAkUGFyYW17VHlwZX0gLiAnUmVhY2hlZCcKICAgICAgICAgICAgJiYgJEhpc3RvcnlFbnRyeS0+e0NvbnRlbnROZXd9ID1+IG17IE5vdGlmaWNhdGlvbiBccyBTZW50IH14bXMKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRIaXN0b3J5RW50cnktPntDcmVhdGVUaW1lfTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuOwp9CgpzdWIgU2VudFdpdGhpblBlcmlvZCB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgISRQYXJhbXtMYXN0Tm90aWZpY2F0aW9uU2VudERhdGV9OwoKICAgICMgZ2V0IFN5c0NvbmZpZyBvcHRpb24KICAgIG15ICRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0lUU01DaGFuZ2U6OlRpbWVSZWFjaGVkTm90aWZpY2F0aW9ucycpOwoKICAgICMgaWYgbm90aWZpY2F0aW9ucyBzaG91bGQgYmUgc2VudCBvbmx5IG9uY2UKICAgIHJldHVybiAxIGlmICRDb25maWctPntGcmVxdWVuY3l9IGVxICdvbmNlJzsKCiAgICAjIGdldCBlcG9jaGUgc2Vjb25kcyBvZiBzZW5kIHRpbWUKICAgIG15ICRTZW50RXBvY2hlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgU3RyaW5nID0+ICRQYXJhbXtMYXN0Tm90aWZpY2F0aW9uU2VudERhdGV9LAogICAgKTsKCiAgICAjIGNhbGMgZGlmZgogICAgbXkgJEVwb2NoZVNpbmNlU2VudCA9ICRTZWxmLT57U3lzdGVtVGltZX0gLSAkU2VudEVwb2NoZTsKICAgIG15ICRIb3Vyc1NpbmNlU2VudCA9IGludCggJEVwb2NoZVNpbmNlU2VudCAvICggNjAgKiA2MCApICk7CgogICAgaWYgKCAkSG91cnNTaW5jZVNlbnQgPj0gJENvbmZpZy0+e0hvdXJzfSApIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBQb3N0UnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkZWxldGUgcGlkIGxvY2sKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQSUQnKS0+UElERGVsZXRlKCBOYW1lID0+ICRTZWxmLT5OYW1lKCkgKTsKCiAgICByZXR1cm47Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyBxdygkU2VsZik7Cgp1c2UgRGF0YTo6RHVtcGVyOwp1c2UgTGlzdDo6VXRpbCBxdyhtYXgpOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpQZXJsOjpUZXN0U3VicykKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCm15ICRUZXN0Q291bnQgPSAxOwoKIyBjcmVhdGUgY29tbW9uIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKbXkgJER5bmFtaWNGaWVsZE9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwpteSAkVXNlck9iamVjdCAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwpteSAkR3JvdXBPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKTsKbXkgJEN1c3RvbWVyVXNlck9iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlcicpOwpteSAkVmFsaWRPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKTsKbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7Cm15ICRDSVBBbGxvY2F0ZU9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ2hhbmdlQ0lQQWxsb2NhdGUnKTsKbXkgJEhpc3RvcnlPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Okhpc3RvcnknKTsKbXkgJENhY2hlT2JqZWN0ICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyk7Cm15ICRUaW1lT2JqZWN0ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaW1lJyk7Cm15ICRMb2dPYmplY3QgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKbXkgJERCT2JqZWN0ICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7Cm15ICRXb3JrT3JkZXJPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyk7Cm15ICRDaGFuZ2VPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgojIHRlc3QgaWYgY2hhbmdlIG9iamVjdCB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkKJFNlbGYtPlRydWUoCiAgICAkQ2hhbmdlT2JqZWN0LAogICAgIlRlc3QgIiAuICRUZXN0Q291bnQrKyAuICcgLSBjb25zdHJ1Y3Rpb24gb2YgY2hhbmdlIG9iamVjdCcsCik7CiRTZWxmLT5JcygKICAgIHJlZiAkQ2hhbmdlT2JqZWN0LAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJywKICAgICJUZXN0ICIgLiAkVGVzdENvdW50KysgLiAnIC0gY2xhc3Mgb2YgY2hhbmdlIG9iamVjdCcsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgY3JlYXRlIG5lZWRlZCB1c2VycyBhbmQgY3VzdG9tZXIgdXNlcnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwpteSBAVXNlcklEczsgICAgICAgICAgICAgICAjIGEgbGlzdCBvZiBleGlzdGluZyBhbmQgdmFsaWQgdXNlciBpZHMKbXkgQEludmFsaWRVc2VySURzOyAgICAgICAgIyBhIGxpc3Qgb2YgZXhpc3RpbmcgYnV0IGludmFsaWQgdXNlciBpZHMKbXkgQE5vbkV4aXN0aW5nVXNlcklEczsgICAgIyBhIGxpc3Qgb2Ygbm9uLWV4aXN0aW9uIHVzZXIgaWRzCm15IEBDdXN0b21lclVzZXJJRHM7ICAgICAgICMgYSBsaXN0IG9mIGV4aXN0aW5nIGFuZCB2YWxpZCBjdXN0b21lciB1c2VyIGlkcywgYSBsaXN0IG9mIHN0cmluZ3MKCiMgZGlzYWJsZSBlbWFpbCBjaGVja3MgdG8gY3JlYXRlIG5ldyB1c2VyCm15ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnID0gJENvbmZpZ09iamVjdC0+R2V0KCdDaGVja0VtYWlsQWRkcmVzc2VzJyk7CmlmICggIWRlZmluZWQgJENoZWNrRW1haWxBZGRyZXNzZXNPcmcgKSB7CiAgICAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZyA9IDE7Cn0KJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgVmFsdWUgPT4gMCwKKTsKCmZvciBteSAkQ291bnRlciAoIDEgLi4gMyApIHsKCiAgICAjIGNyZWF0ZSBuZXcgdXNlcnMgZm9yIHRoZSB0ZXN0cwogICAgbXkgJFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyQWRkKAogICAgICAgIFVzZXJGaXJzdG5hbWUgPT4gJ0lUU01DaGFuZ2UnIC4gJENvdW50ZXIsCiAgICAgICAgVXNlckxhc3RuYW1lICA9PiAnVW5pdFRlc3QnLAogICAgICAgIFVzZXJMb2dpbiAgICAgPT4gJ1VuaXRUZXN0LUlUU01DaGFuZ2UtJyAuICRDb3VudGVyIC4gaW50IHJhbmQgMV8wMDBfMDAwLAogICAgICAgIFVzZXJFbWFpbCAgICAgPT4gJ1VuaXRUZXN0LUlUU01DaGFuZ2UtJyAuICRDb3VudGVyIC4gJ0Bsb2NhbGhvc3QnLAogICAgICAgIFZhbGlkSUQgICAgICAgPT4gJFZhbGlkT2JqZWN0LT5WYWxpZExvb2t1cCggVmFsaWQgPT4gJ3ZhbGlkJyApLAogICAgICAgIENoYW5nZVVzZXJJRCAgPT4gMSwKICAgICk7CiAgICBwdXNoIEBVc2VySURzLCAkVXNlcklEOwoKICAgICMgY3JlYXRlIG5ldyBjdXN0b21lcnMgZm9yIHRoZSB0ZXN0cwogICAgbXkgJEN1c3RvbWVyVXNlcklEID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJVc2VyQWRkKAogICAgICAgIFNvdXJjZSAgICAgICAgID0+ICdDdXN0b21lclVzZXInLAogICAgICAgIFVzZXJGaXJzdG5hbWUgID0+ICdJVFNNQ2hhbmdlQ3VzdG9tZXInIC4gJENvdW50ZXIsCiAgICAgICAgVXNlckxhc3RuYW1lICAgPT4gJ1VuaXRUZXN0Q3VzdG9tZXInLAogICAgICAgIFVzZXJDdXN0b21lcklEID0+ICdVQ1QnIC4gJENvdW50ZXIgLiBpbnQgcmFuZCAxXzAwMF8wMDAsCiAgICAgICAgVXNlckxvZ2luICAgICAgPT4gJ1VuaXRUZXN0LUlUU01DaGFuZ2UtQ3VzdG9tZXItJyAuICRDb3VudGVyIC4gaW50IHJhbmQgMV8wMDBfMDAwLAogICAgICAgIFVzZXJFbWFpbCAgICAgID0+ICdVbml0VGVzdC1JVFNNQ2hhbmdlLUN1c3RvbWVyLScKICAgICAgICAgICAgLiAkQ291bnRlcgogICAgICAgICAgICAuIGludCggcmFuZCAxXzAwMF8wMDAgKQogICAgICAgICAgICAuICdAbG9jYWxob3N0JywKICAgICAgICBWYWxpZElEID0+ICRWYWxpZE9iamVjdC0+VmFsaWRMb29rdXAoIFZhbGlkID0+ICd2YWxpZCcgKSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwogICAgcHVzaCBAQ3VzdG9tZXJVc2VySURzLCAkQ3VzdG9tZXJVc2VySUQ7Cn0KCiMgc29ydCB0aGUgdXNlciBhbmQgY3VzdG9tZXIgdXNlciBhcnJheXMKQFVzZXJJRHMgICAgICAgICA9IHNvcnQgQFVzZXJJRHM7CkBDdXN0b21lclVzZXJJRHMgPSBzb3J0IEBDdXN0b21lclVzZXJJRHM7CgojIGNyZWF0ZSBub24gZXhpc3RpbmcgdXNlciBJRHMKZm9yICggMSAuLiAyICkgewogICAgTFBDOgogICAgZm9yIG15ICRMb29wUHJvdGVjdGlvbkNvdW50ZXIgKCAxIC4uIDEwMCApIHsKCiAgICAgICAgIyBjcmVhdGUgYSByYW5kb20gdXNlciBpZAogICAgICAgIG15ICRUZW1wTm9uRXhpc3RpbmdVc2VySUQgPSBpbnQgcmFuZCAxXzAwMF8wMDA7CgogICAgICAgICMgY2hlY2sgaWYgcmFuZG9tIHVzZXIgaWQgZXhpc3RzIGFscmVhZHkKICAgICAgICBteSAlVXNlckRhdGEgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVGVtcE5vbkV4aXN0aW5nVXNlcklELAogICAgICAgICk7CiAgICAgICAgbmV4dCBMUEMgaWYgJVVzZXJEYXRhOwoKICAgICAgICAjIHdlIGdvdCBhbiB1bnVzZWQgdXNlciBJRAogICAgICAgIHB1c2ggQE5vbkV4aXN0aW5nVXNlcklEcywgJFRlbXBOb25FeGlzdGluZ1VzZXJJRDsKICAgICAgICBsYXN0IExQQzsKICAgIH0KfQoKIyBzZXQgM3JkIHVzZXIgaW52YWxpZAokVXNlck9iamVjdC0+VXNlclVwZGF0ZSgKICAgICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICBVc2VySUQgPT4gJFVzZXJJRHNbMl0sCiAgICApLAogICAgVmFsaWRJRCAgICAgID0+ICRWYWxpZE9iamVjdC0+VmFsaWRMb29rdXAoIFZhbGlkID0+ICdpbnZhbGlkJyApLAogICAgQ2hhbmdlVXNlcklEID0+IDEsCik7CnB1c2ggQEludmFsaWRVc2VySURzLCBwb3AgQFVzZXJJRHM7CgojIHJlc3RvcmUgb3JpZ2luYWwgZW1haWwgY2hlY2sgcGFyYW0KJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgVmFsdWUgPT4gJENoZWNrRW1haWxBZGRyZXNzZXNPcmcsCik7CgojIHR1cm4gb2ZmIFNlbmROb3RpZmljYXRpb25zLCBpbiBvcmRlciB0byBhdm9pZCBhIGxvdCBvZiB1c2VsZXNzIG1haWxzCm15ICRTZW5kTm90aWZpY2F0aW9uc09yZyA9ICRDb25maWdPYmplY3QtPkdldCgnSVRTTUNoYW5nZTo6U2VuZE5vdGlmY2F0aW9ucycpOwokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnSVRTTUNoYW5nZTo6U2VuZE5vdGlmaWNhdGlvbnMnLAogICAgVmFsdWUgPT4gMCwKKTsKCiMgc2F2ZSBvcmlnaW5hbCBkeW5hbWljIGZpZWxkIGNvbmZpZ3VyYXRpb24KbXkgJE9yaWdpbmFsRHluYW1pY0ZpZWxkcyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICBWYWxpZCA9PiAwLAopOwoKbXkgJFVuaXF1ZU5hbWVQcmVmaXggPSAnVW5pdFRlc3RDaGFuZ2UnIC4gaW50IHJhbmQgMV8wMDBfMDAwOwoKIyBjcmVhdGUgc29tZSBkeW5hbWljIGZpZWxkcyBmb3IgY2hhbmdlcyAoYW5kIGZvciB3b3Jrb3JkZXJzKQpteSBARHluYW1pY0ZpZWxkcyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgID0+ICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QxJywKICAgICAgICBMYWJlbCAgICAgID0+ICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QxJywKICAgICAgICBGaWVsZE9yZGVyID0+IDEwMDAwLAogICAgICAgIEZpZWxkVHlwZSAgPT4gJ1RleHQnLAogICAgICAgIE9iamVjdFR5cGUgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QxJywKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0Rlc2NyaXB0aW9uIGZvciBEeW5hbWljIEZpZWxkLicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICA9PiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MicsCiAgICAgICAgTGFiZWwgICAgICA9PiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MicsCiAgICAgICAgRmllbGRPcmRlciA9PiAxMDAwMCwKICAgICAgICBGaWVsZFR5cGUgID0+ICdUZXh0JywKICAgICAgICBPYmplY3RUeXBlID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICBOYW1lICAgICAgICA9PiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MicsCiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdEZXNjcmlwdGlvbiBmb3IgRHluYW1pYyBGaWVsZC4nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDMnLAogICAgICAgIExhYmVsICAgICAgPT4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDMnLAogICAgICAgIEZpZWxkT3JkZXIgPT4gMTAwMDAsCiAgICAgICAgRmllbGRUeXBlICA9PiAnVGV4dCcsCiAgICAgICAgT2JqZWN0VHlwZSA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDMnLAogICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAnRGVzY3JpcHRpb24gZm9yIER5bmFtaWMgRmllbGQuJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgID0+ICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3Q0JywKICAgICAgICBMYWJlbCAgICAgID0+ICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3Q0JywKICAgICAgICBGaWVsZE9yZGVyID0+IDEwMDAwLAogICAgICAgIEZpZWxkVHlwZSAgPT4gJ1RleHQnLAogICAgICAgIE9iamVjdFR5cGUgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3Q0JywKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0Rlc2NyaXB0aW9uIGZvciBEeW5hbWljIEZpZWxkLicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICA9PiAkVW5pcXVlTmFtZVByZWZpeCAuICdXb3Jrb3JkZXJUZXN0MScsCiAgICAgICAgTGFiZWwgICAgICA9PiAkVW5pcXVlTmFtZVByZWZpeCAuICdXb3Jrb3JkZXJUZXN0MScsCiAgICAgICAgRmllbGRPcmRlciA9PiAxMDAwMCwKICAgICAgICBGaWVsZFR5cGUgID0+ICdUZXh0JywKICAgICAgICBPYmplY3RUeXBlID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICBOYW1lICAgICAgICA9PiAkVW5pcXVlTmFtZVByZWZpeCAuICdXb3Jrb3JkZXJUZXN0MScsCiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdEZXNjcmlwdGlvbiBmb3IgRHluYW1pYyBGaWVsZC4nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnV29ya29yZGVyVGVzdDInLAogICAgICAgIExhYmVsICAgICAgPT4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnV29ya29yZGVyVGVzdDInLAogICAgICAgIEZpZWxkT3JkZXIgPT4gMTAwMDAsCiAgICAgICAgRmllbGRUeXBlICA9PiAnVGV4dCcsCiAgICAgICAgT2JqZWN0VHlwZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnV29ya29yZGVyVGVzdDInLAogICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAnRGVzY3JpcHRpb24gZm9yIER5bmFtaWMgRmllbGQuJywKICAgICAgICB9LAogICAgfSwKKTsKCm15IEBEeW5hbWljRmllbGRJRHM7CmZvciBteSAkVGVzdCAoQER5bmFtaWNGaWVsZHMpIHsKCiAgICAjIGFkZCBkeW5hbWljIGZpZWxkCiAgICBteSAkRHluYW1pY0ZpZWxkSUQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICAgICAgJXskVGVzdH0sCiAgICApOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICREeW5hbWljRmllbGRJRCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIER5bmFtaWNGaWVsZEFkZCgpIiwKICAgICk7CgogICAgIyByZW1lbWJlciBpZCB0byBkZWxldGUgaXQgbGF0ZXIKICAgIHB1c2ggQER5bmFtaWNGaWVsZElEcywgJER5bmFtaWNGaWVsZElEOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgdGVzdCBJVFNNQ2hhbmdlIEFQSQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGRlZmluZSBwdWJsaWMgaW50ZXJmYWNlIChpbiBhbHBoYWJldGljYWwgb3JkZXIpCm15IEBPYmplY3RNZXRob2RzID0gcXcoCiAgICBDaGFuZ2VBZGQKICAgIENoYW5nZUF0dGFjaG1lbnRBZGQKICAgIENoYW5nZUF0dGFjaG1lbnREZWxldGUKICAgIENoYW5nZUF0dGFjaG1lbnRFeGlzdHMKICAgIENoYW5nZUF0dGFjaG1lbnRHZXQKICAgIENoYW5nZUF0dGFjaG1lbnRMaXN0CiAgICBDaGFuZ2VDQUJEZWxldGUKICAgIENoYW5nZUNBQkdldAogICAgQ2hhbmdlQ0FCVXBkYXRlCiAgICBDaGFuZ2VDSVBMb29rdXAKICAgIENoYW5nZURlbGV0ZQogICAgQ2hhbmdlR2V0CiAgICBDaGFuZ2VMaXN0CiAgICBDaGFuZ2VMb29rdXAKICAgIENoYW5nZVBvc3NpYmxlQ0lQR2V0CiAgICBDaGFuZ2VQb3NzaWJsZVN0YXRlc0dldAogICAgQ2hhbmdlU2VhcmNoCiAgICBDaGFuZ2VTdGF0ZUxvb2t1cAogICAgQ2hhbmdlVXBkYXRlCiAgICBQZXJtaXNzaW9uCik7CgojIGNoZWNrIGlmIHN1YnMgYXJlIGF2YWlsYWJsZQpmb3IgbXkgJE9iamVjdE1ldGhvZCAoQE9iamVjdE1ldGhvZHMpIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRDaGFuZ2VPYmplY3QtPmNhbigkT2JqZWN0TWV0aG9kKSwKICAgICAgICAiVGVzdCAiIC4gJFRlc3RDb3VudCsrIC4gIiAtIGNoZWNrICdjYW4gJE9iamVjdE1ldGhvZCciLAogICAgKTsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHNlYXJjaCBmb3IgZGVmYXVsdCBJVFNNQ2hhbmdlLXN0YXRlcwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGRlZmluZSBkZWZhdWx0IElUU01DaGFuZ2Utc3RhdGVzCiMgY2FuJ3QgdXNlIHF3IGR1ZSB0byBzcGFjZXMgaW4gc3RhdGVzCm15IEBEZWZhdWx0Q2hhbmdlU3RhdGVzID0gKAogICAgJ3JlcXVlc3RlZCcsCiAgICAncGVuZGluZyBhcHByb3ZhbCcsCiAgICAncmVqZWN0ZWQnLAogICAgJ2FwcHJvdmVkJywKICAgICdpbiBwcm9ncmVzcycsCiAgICAncGVuZGluZyBwaXInLAogICAgJ3N1Y2Nlc3NmdWwnLAogICAgJ2ZhaWxlZCcsCiAgICAnY2FuY2VsZWQnLAogICAgJ3JldHJhY3RlZCcsCik7CgojIGdldCBpdGVtIGxpc3Qgb2YgdGhlIGNoYW5nZSBzdGF0ZXMgd2l0aCBzd2FwcGVkIGtleXMgYW5kIHZhbHVlcwpteSAlQ2hhbmdlU3RhdGVJRDJOYW1lID0gJXsKICAgICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgKSB8fCB7fQp9OwpteSAlQ2hhbmdlU3RhdGVOYW1lMklEICAgPSByZXZlcnNlICVDaGFuZ2VTdGF0ZUlEMk5hbWU7Cm15IEBTb3J0ZWRDaGFuZ2VTdGF0ZUlEcyA9IHNvcnQga2V5cyAlQ2hhbmdlU3RhdGVJRDJOYW1lOwoKIyBjaGVjayBpZiBzdGF0ZXMgYXJlIGluIEdlbmVyYWxDYXRhbG9nCmZvciBteSAkRGVmYXVsdENoYW5nZVN0YXRlIChARGVmYXVsdENoYW5nZVN0YXRlcykgewogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJENoYW5nZVN0YXRlTmFtZTJJRHskRGVmYXVsdENoYW5nZVN0YXRlfSwKICAgICAgICAiVGVzdCAiIC4gJFRlc3RDb3VudCsrIC4gIiAtIGNoZWNrIHN0YXRlICckRGVmYXVsdENoYW5nZVN0YXRlJyIsCiAgICApOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgdGVzdCB0aGUgc3RhdGUgbG9va3VwIG1ldGhvZAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGludmVzdGlnYXRlIHRoZSBkZWZhdWx0IHN0YXRlcwpmb3IgbXkgJFN0YXRlIChARGVmYXVsdENoYW5nZVN0YXRlcykgewoKICAgICMgbG9vayB1cCB0aGUgc3RhdGUgbmFtZQogICAgbXkgJExvb2tlZFVwU3RhdGVJRCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVN0YXRlTG9va3VwKAogICAgICAgIENoYW5nZVN0YXRlID0+ICRTdGF0ZSwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRMb29rZWRVcFN0YXRlSUQsCiAgICAgICAgJENoYW5nZVN0YXRlTmFtZTJJRHskU3RhdGV9LAogICAgICAgICJMb29rIHVwIHN0YXRlICckU3RhdGUnIiwKICAgICk7CgogICAgIyBkbyB0aGUgcmV2ZXJzZSBsb29rdXAKICAgIG15ICRMb29rZWRVcFN0YXRlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU3RhdGVMb29rdXAoCiAgICAgICAgQ2hhbmdlU3RhdGVJRCA9PiAkTG9va2VkVXBTdGF0ZUlELAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJExvb2tlZFVwU3RhdGUsCiAgICAgICAgJFN0YXRlLAogICAgICAgICJMb29rIHVwIHN0YXRlIGlkICckTG9va2VkVXBTdGF0ZUlEJyIsCiAgICApOwp9CgojIG5vdyBzb21lIHBhcmFtIGNoZWNrcyBmb3IgQ2hhbmdlU3RhdGVMb29rdXAKbXkgJExvb2t1cE9rID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU3RhdGVMb29rdXAoKTsKCiRTZWxmLT5GYWxzZSgKICAgICRMb29rdXBPaywKICAgICdObyBwYXJhbXMgcGFzc2VkIHRvIENoYW5nZVN0YXRlTG9va3VwKCknLAopOwoKJExvb2t1cE9rID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU3RhdGVMb29rdXAoCiAgICBDaGFuZ2VTdGF0ZSAgID0+ICdhcHByb3ZlZCcsCiAgICBDaGFuZ2VTdGF0ZUlEID0+IDIsCik7CgokU2VsZi0+RmFsc2UoCiAgICAkTG9va3VwT2ssCiAgICAnRXhjbHVzaXZlIHBhcmFtcyBwYXNzZWQgdG8gQ2hhbmdlU3RhdGVMb29rdXAoKScsCik7CgokTG9va3VwT2sgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VTdGF0ZUxvb2t1cCgKICAgIFN0YXRlID0+ICdhcHByb3ZlZCcsCik7CgokU2VsZi0+RmFsc2UoCiAgICAkTG9va3VwT2ssCiAgICAiSW5jb3JyZWN0IHBhcmFtICdTdGF0ZScgcGFzc2VkIHRvIENoYW5nZVN0YXRlTG9va3VwKCkiLAopOwoKJExvb2t1cE9rID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU3RhdGVMb29rdXAoCiAgICBTdGF0ZUlEID0+IDIsCik7CgokU2VsZi0+RmFsc2UoCiAgICAkTG9va3VwT2ssCiAgICAiSW5jb3JyZWN0IHBhcmFtICdTdGF0ZUlEJyBwYXNzZWQgdG8gQ2hhbmdlU3RhdGVMb29rdXAoKSIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgY2hlY2sgZXhpc3RlbmNlIG9mIHRoZSBkZWZhdWx0IGhpc3RvcnkgdHlwZXMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgQERlZmF1bHRIaXN0b3J5VHlwZXMgPSBxdygKICAgIENoYW5nZUFkZAogICAgQ2hhbmdlVXBkYXRlCiAgICBDaGFuZ2VEZWxldGUKICAgIENoYW5nZUNBQlVwZGF0ZQogICAgQ2hhbmdlQ0FCRGVsZXRlCiAgICBDaGFuZ2VMaW5rQWRkCiAgICBDaGFuZ2VMaW5rRGVsZXRlCiAgICBDaGFuZ2VBdHRhY2htZW50QWRkCiAgICBDaGFuZ2VBdHRhY2htZW50RGVsZXRlCiAgICBXb3JrT3JkZXJBZGQKICAgIFdvcmtPcmRlclVwZGF0ZQogICAgV29ya09yZGVyRGVsZXRlCiAgICBXb3JrT3JkZXJMaW5rQWRkCiAgICBXb3JrT3JkZXJMaW5rRGVsZXRlCiAgICBXb3JrT3JkZXJBdHRhY2htZW50QWRkCiAgICBXb3JrT3JkZXJBdHRhY2htZW50RGVsZXRlCiAgICBXb3JrT3JkZXJSZXBvcnRBdHRhY2htZW50QWRkCiAgICBXb3JrT3JkZXJSZXBvcnRBdHRhY2htZW50RGVsZXRlCiAgICBDaGFuZ2VQbGFubmVkU3RhcnRUaW1lUmVhY2hlZAogICAgQ2hhbmdlUGxhbm5lZEVuZFRpbWVSZWFjaGVkCiAgICBDaGFuZ2VBY3R1YWxTdGFydFRpbWVSZWFjaGVkCiAgICBDaGFuZ2VBY3R1YWxFbmRUaW1lUmVhY2hlZAogICAgV29ya09yZGVyUGxhbm5lZFN0YXJ0VGltZVJlYWNoZWQKICAgIFdvcmtPcmRlclBsYW5uZWRFbmRUaW1lUmVhY2hlZAogICAgV29ya09yZGVyQWN0dWFsU3RhcnRUaW1lUmVhY2hlZAogICAgV29ya09yZGVyQWN0dWFsRW5kVGltZVJlYWNoZWQKICAgIENoYW5nZVJlcXVlc3RlZFRpbWVSZWFjaGVkCiAgICBDb25kaXRpb25BZGQKICAgIENvbmRpdGlvblVwZGF0ZQogICAgQ29uZGl0aW9uRGVsZXRlCiAgICBDb25kaXRpb25EZWxldGVBbGwKICAgIEV4cHJlc3Npb25BZGQKICAgIEV4cHJlc3Npb25VcGRhdGUKICAgIEV4cHJlc3Npb25EZWxldGUKICAgIEV4cHJlc3Npb25EZWxldGVBbGwKICAgIEFjdGlvbkFkZAogICAgQWN0aW9uVXBkYXRlCiAgICBBY3Rpb25EZWxldGUKICAgIEFjdGlvbkRlbGV0ZUFsbAogICAgQWN0aW9uRXhlY3V0ZQogICAgQ2hhbmdlTm90aWZpY2F0aW9uU2VudAogICAgV29ya09yZGVyTm90aWZpY2F0aW9uU2VudAopOwoKIyBpbnZlc3RpZ2F0ZSB0aGUgZGVmYXVsdCBoaXN0b3J5IHR5cGVzCmZvciBteSAkSGlzdG9yeVR5cGUgKEBEZWZhdWx0SGlzdG9yeVR5cGVzKSB7CgogICAgIyBsb29rIHVwIHRoZSBuYW1lCiAgICBteSAkTG9va2VkVXBIaXN0b3J5VHlwZUlEID0gJEhpc3RvcnlPYmplY3QtPkhpc3RvcnlUeXBlTG9va3VwKAogICAgICAgIEhpc3RvcnlUeXBlID0+ICRIaXN0b3J5VHlwZSwKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJExvb2tlZFVwSGlzdG9yeVR5cGVJRCwKICAgICAgICAiTG9vayB1cCBoaXN0b3J5IHR5cGUgJyRIaXN0b3J5VHlwZSciLAogICAgKTsKCiAgICAjIGRvIHRoZSByZXZlcnNlIGxvb2t1cAogICAgbXkgJExvb2tlZFVwSGlzdG9yeVR5cGUgPSAkSGlzdG9yeU9iamVjdC0+SGlzdG9yeVR5cGVMb29rdXAoCiAgICAgICAgSGlzdG9yeVR5cGVJRCA9PiAkTG9va2VkVXBIaXN0b3J5VHlwZUlELAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJExvb2tlZFVwSGlzdG9yeVR5cGUsCiAgICAgICAgJEhpc3RvcnlUeXBlLAogICAgICAgICJMb29rIHVwIGhpc3RvcnkgdHlwZSBpZCAnJExvb2tlZFVwSGlzdG9yeVR5cGVJRCciLAogICAgKTsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGNoZWNrIGV4aXN0ZW5jZSBvZiB0aGUgZGVmYXVsdCBDSVAKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgQENJUFZhbHVlcyA9ICggJzEgdmVyeSBsb3cnLCAnMiBsb3cnLCAnMyBub3JtYWwnLCAnNCBoaWdoJywgJzUgdmVyeSBoaWdoJyApOwoKIyBnZXQgbGlzdCBvZiB0aGUgY2F0ZWdvcmllcyB3aXRoIHN3YXBwZWQga2V5cyBhbmQgdmFsdWVzCm15ICVDaGFuZ2VDYXRlZ29yeUlEMk5hbWUgPSAlewogICAgJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2F0ZWdvcnknLAogICAgKSB8fCB7fQp9OwpteSAlQ2hhbmdlQ2F0ZWdvcnlOYW1lMklEICAgPSByZXZlcnNlICVDaGFuZ2VDYXRlZ29yeUlEMk5hbWU7Cm15IEBTb3J0ZWRDaGFuZ2VDYXRlZ29yeUlEcyA9IHNvcnQga2V5cyAlQ2hhbmdlQ2F0ZWdvcnlJRDJOYW1lOwoKIyBnZXQgbGlzdCBvZiB0aGUgaW1wYWN0cyB3aXRoIHN3YXBwZWQga2V5cyBhbmQgdmFsdWVzCm15ICVDaGFuZ2VJbXBhY3RJRDJOYW1lID0gJXsKICAgICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkltcGFjdCcsCiAgICApIHx8IHt9Cn07Cm15ICVDaGFuZ2VJbXBhY3ROYW1lMklEICAgPSByZXZlcnNlICVDaGFuZ2VJbXBhY3RJRDJOYW1lOwpteSBAU29ydGVkQ2hhbmdlSW1wYWN0SURzID0gc29ydCBrZXlzICVDaGFuZ2VJbXBhY3RJRDJOYW1lOwoKIyBnZXQgbGlzdCBvZiB0aGUgcHJpb3JpdGllcyB3aXRoIHN3YXBwZWQga2V5cyBhbmQgdmFsdWVzCm15ICVDaGFuZ2VQcmlvcml0eUlEMk5hbWUgPSAlewogICAgJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6UHJpb3JpdHknLAogICAgKSB8fCB7fQp9OwpteSAlQ2hhbmdlUHJpb3JpdHlOYW1lMklEICAgPSByZXZlcnNlICVDaGFuZ2VQcmlvcml0eUlEMk5hbWU7Cm15IEBTb3J0ZWRDaGFuZ2VQcmlvcml0eUlEcyA9IHNvcnQga2V5cyAlQ2hhbmdlUHJpb3JpdHlJRDJOYW1lOwoKIyBjaGVjayBpZiBDSVAgdmFsdWVzIGFyZSBpbiBHZW5lcmFsQ2F0YWxvZwpmb3IgbXkgJENJUFZhbHVlIChAQ0lQVmFsdWVzKSB7CgogICAgIyB0ZXN0IGNhdGVnb3J5CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQ2hhbmdlQ2F0ZWdvcnlOYW1lMklEeyRDSVBWYWx1ZX0sCiAgICAgICAgIlRlc3QgIiAuICRUZXN0Q291bnQrKyAuICIgLSBjaGVjayBjYXRlZ29yeSAnJENJUFZhbHVlJyAoZ2VuZXJhbCBjYXRhbG9nKSIKICAgICk7CgogICAgbXkgJENhdGVnb3J5SUQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VDSVBMb29rdXAoCiAgICAgICAgVHlwZSA9PiAnQ2F0ZWdvcnknLAogICAgICAgIENJUCAgPT4gJENJUFZhbHVlLAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRDYXRlZ29yeUlELAogICAgICAgICJUZXN0ICIgLiAkVGVzdENvdW50IC4gIiAtIGNoZWNrIGNhdGVnb3J5ICckQ0lQVmFsdWUnIChDaGFuZ2VDSVBMb29rdXApIgogICAgKTsKCiAgICAjIHRlc3QgaW1wYWN0CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQ2hhbmdlSW1wYWN0TmFtZTJJRHskQ0lQVmFsdWV9LAogICAgICAgICJUZXN0ICIgLiAkVGVzdENvdW50KysgLiAiIC0gY2hlY2sgaW1wYWN0ICckQ0lQVmFsdWUnIChnZW5lcmFsIGNhdGFsb2cpIgogICAgKTsKCiAgICBteSAkSW1wYWN0SUQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VDSVBMb29rdXAoCiAgICAgICAgVHlwZSA9PiAnSW1wYWN0JywKICAgICAgICBDSVAgID0+ICRDSVBWYWx1ZSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkSW1wYWN0SUQsCiAgICAgICAgIlRlc3QgIiAuICRUZXN0Q291bnQgLiAiIC0gY2hlY2sgaW1wYWN0ICckQ0lQVmFsdWUnIChDaGFuZ2VDSVBMb29rdXApIgogICAgKTsKCiAgICAjIHRlc3QgcHJpb3JpdHkKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRDaGFuZ2VQcmlvcml0eU5hbWUySUR7JENJUFZhbHVlfSwKICAgICAgICAiVGVzdCAiIC4gJFRlc3RDb3VudCsrIC4gIiAtIGNoZWNrIHByaW9yaXR5ICckQ0lQVmFsdWUnIChnZW5lcmFsIGNhdGFsb2cpIgogICAgKTsKCiAgICBteSAkUHJpb3JpdHlJRCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUNJUExvb2t1cCgKICAgICAgICBUeXBlID0+ICdQcmlvcml0eScsCiAgICAgICAgQ0lQICA9PiAkQ0lQVmFsdWUsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFByaW9yaXR5SUQsCiAgICAgICAgIlRlc3QgIiAuICRUZXN0Q291bnQgLiAiIC0gY2hlY2sgcHJpb3JpdHkgJyRDSVBWYWx1ZScgKENoYW5nZUNJUExvb2t1cCkiCiAgICApOwoKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGNoZWNrIGV4aXN0ZW5jZSBvZiB0aGUgZ3JvdXBzIHRoYXQgYXJlIHVzZWQgZm9yIFBlcm1pc3Npb24KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgbWFwcGluZyBvZiB0aGUgZ3JvdXAgbmFtZSB0byB0aGUgZ3JvdXAgaWQKbXkgJUdyb3VwTmFtZTJJRCA9IHJldmVyc2UgJEdyb3VwT2JqZWN0LT5Hcm91cExpc3QoIFZhbGlkID0+IDEgKTsKCiMgY2hlY2sgaWYgdGhlIGdyb3VwcyB3ZXJlIGZvdW5kCmZvciBteSAkR3JvdXAgKHF3KCBpdHNtLWNoYW5nZSBpdHNtLWNoYW5nZS1idWlsZGVyIGl0c20tY2hhbmdlLW1hbmFnZXIgKSkgewogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEdyb3VwTmFtZTJJRHskR3JvdXB9LAogICAgICAgICJUZXN0ICIgLiAkVGVzdENvdW50KysgLiAiIC0gY2hlY2sgZ3JvdXAgJyRHcm91cCciCiAgICApOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZ2V0IHZhcmlhYmxlcyBmb3IgdGVzdAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCm15ICREZWZhdWx0Q2F0ZWdvcnkgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01DaGFuZ2U6OkNhdGVnb3J5OjpEZWZhdWx0Jyk7Cm15ICREZWZhdWx0SW1wYWN0ICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0lUU01DaGFuZ2U6OkltcGFjdDo6RGVmYXVsdCcpOwpteSAkRGVmYXVsdFByaW9yaXR5ID0gJENJUEFsbG9jYXRlT2JqZWN0LT5Qcmlvcml0eUFsbG9jYXRpb25HZXQoCiAgICBDYXRlZ29yeUlEID0+ICRDaGFuZ2VDYXRlZ29yeU5hbWUySUR7JERlZmF1bHRDYXRlZ29yeX0sCiAgICBJbXBhY3RJRCAgID0+ICRDaGFuZ2VJbXBhY3ROYW1lMklEeyREZWZhdWx0SW1wYWN0fSwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBkZWZpbmUgZ2VuZXJhbCBjaGFuZ2UgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBzdG9yZSBjdXJyZW50IFRlc3RDb3VudCBmb3IgYmV0dGVyIHRlc3QgY2FzZSByZWNvZ25pdGlvbgpteSAkVGVzdENvdW50TWlzYyA9ICRUZXN0Q291bnQ7CgojIEFuIHVuaXF1ZSBpbmRlbnRpZmllciwgc28gdGhhdCBkYXRhIGZyb20gZGlmZmVyZW50IHRlc3QgcnVucwojIHdvbid0IGJlIG1peGVkIHVwLiBUaGUgc3RyaW5nIGlzIGZvcm1hdGVkIHRvIGEgY29uc3RhbnQgbGVuZ3RoLAojIGFzIHRoZSBjb252ZXJzaW9uIHRvIHBsYWluIHRleHQgd2l0aCBUb0FzY2lpKCkgZGVwZW5kcyBvbiB0aGUgc3RyaW5nIGxlbmd0aC4KbXkgJFVuaXF1ZVNpZ25hdHVyZSA9IHNwcmludGYgJ1VuaXRUZXN0LUlUU01DaGFuZ2UtJTA2ZC0lMDEwZCcsCiAgICBpbnQoIHJhbmQgMV8wMDBfMDAwICksCiAgICB0aW1lKCk7Cm15ICROb1dpbGRjYXJkc1Rlc3RUaXRsZSA9IHNwcmludGYgJ1VuaXRUZXN0LUlUU01DaGFuZ2UtTm9XaWxkY2FyZHMtJTA2ZC0lMDEwZCcsCiAgICBpbnQoIHJhbmQgMV8wMDBfMDAwICksCiAgICB0aW1lKCk7CgpteSBAQ2hhbmdlVGVzdHMgPSAoCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKICAgICMgVGVzdHMgb24gQ2hhbmdlQWRkCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwoKICAgICMgQ2hhbmdlIGRvZXNuJ3QgY29udGFpbiBhbGwgZGF0YSAocmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBjb250YWlucyBubyBwYXJhbXMgZm9yIENoYW5nZUFkZC4nLAogICAgICAgIEZhaWxzICAgICAgID0+IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSBleHBlY3QgdGhpcyB0ZXN0IHRvIGZhaWwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7fSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gdW5kZWYsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBDaGFuZ2UgY29udGFpbnMgb25seSByZXF1aXJlZCBkYXRhIC0gZGVmYXVsdCB1c2VyIChyZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IG9ubHkgbmVlZGVkIHBhcmFtcyAoVXNlcklEID0gMSkgZm9yIENoYW5nZUFkZC4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblBsYWluICAgPT4gJycsCiAgICAgICAgICAgICAgICBKdXN0aWZpY2F0aW9uICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBKdXN0aWZpY2F0aW9uUGxhaW4gPT4gJycsCiAgICAgICAgICAgICAgICBDaGFuZ2VNYW5hZ2VySUQgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDaGFuZ2VCdWlsZGVySUQgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEcyAgICAgICA9PiBbXSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlckNvdW50ICAgICA9PiAwLAogICAgICAgICAgICAgICAgQ0FCQWdlbnRzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgSGlzdG9yeUdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VBZGQgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgMjUsIDI2IF0sCiAgICAgICAgTGFiZWwgICAgICA9PiAnQ2hhbmdlTG9va3VwVGVzdCcsICAgICMgdGhpcyBjaGFuZ2Ugd2lsbCBiZSB1c2VkIGZvciB0ZXN0aW5nIENoYW5nZUxvb2t1cCgpLgogICAgfSwKCiAgICAjIENoYW5nZSBjb250YWlucyBvbmx5IHJlcXVpcmVkIGRhdGEgLSBkZWZhdWx0IHVzZXIgKHJlcXVpcmVkIGF0dHJpYnV0ZXMpCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3Qgb25seSBuZWVkZWQgcGFyYW1zIChVc2VySUQgIT0gMSkgZm9yIENoYW5nZUFkZC4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgID0+ICcnLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgID0+ICcnLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiAgID0+ICcnLAogICAgICAgICAgICAgICAgQ2hhbmdlTWFuYWdlcklEID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ2hhbmdlQnVpbGRlcklEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgV29ya09yZGVySURzICAgID0+IFtdLAogICAgICAgICAgICAgICAgV29ya09yZGVyQ291bnQgID0+IDAsCiAgICAgICAgICAgICAgICBDQUJBZ2VudHMgICAgICAgPT4gW10sCiAgICAgICAgICAgICAgICBDQUJDdXN0b21lcnMgICAgPT4gW10sCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgNCwgMjUsIDI2IF0sCiAgICB9LAoKICAgICMgQ2hhbmdlIGNvbnRhaW5zIEhUTUwgZGVzY3JpcHRpb24gYW5kIGp1c3RpZmljYXRpb24KICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBvbmx5IG5lZWRlZCBwYXJhbXMgKFVzZXJJRCAhPSAxKSBmb3IgQ2hhbmdlQWRkLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJzxiPlRoaXMgPHU+aXM8L3U+IGJvbGQ8L2I+IC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICc8Yj5UaGlzIDx1PmlzPC91PiBib2xkPC9iPiAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgPT4gJzxiPlRoaXMgPHU+aXM8L3U+IGJvbGQ8L2I+IC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblBsYWluICAgPT4gJ1RoaXMgaXMgYm9sZCAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiAgICAgID0+ICc8Yj5UaGlzIDx1PmlzPC91PiBib2xkPC9iPiAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvblBsYWluID0+ICdUaGlzIGlzIGJvbGQgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENoYW5nZU1hbmFnZXJJRCAgICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIENoYW5nZUJ1aWxkZXJJRCAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEcyAgICAgICA9PiBbXSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlckNvdW50ICAgICA9PiAwLAogICAgICAgICAgICAgICAgQ0FCQWdlbnRzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDQsIDI1LCAyNiwgNDgsIDQ5LCA1MCBdLAogICAgfSwKCiAgICAjIENoYW5nZSB3aXRoIG5hbWVkIENoYW5nZVN0YXRlCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZm9yIFN0YXRlbmFtZXMgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdDaGFuZ2VTdGF0ZXMgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgICA9PiAnQ2hhbmdlU3RhdGVzIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvblBsYWluID0+ICdDaGFuZ2VTdGF0ZXMgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gICAgPT4gJycsCiAgICAgICAgICAgICAgICBDaGFuZ2VNYW5hZ2VySUQgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgQ2hhbmdlQnVpbGRlcklEICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgICAgPT4gJENoYW5nZVN0YXRlTmFtZTJJRHtyZXF1ZXN0ZWR9LAogICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGUgICAgICA9PiAncmVxdWVzdGVkJywKICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEcyAgICAgPT4gW10sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJDb3VudCAgID0+IDAsCiAgICAgICAgICAgICAgICBDQUJBZ2VudHMgICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzICAgICA9PiBbXSwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBIaXN0b3J5R2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZUFkZCAgICA9PiAnJywKICAgICAgICAgICAgICAgIENoYW5nZVVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gWwogICAgICAgICAgICAgICAgICAgICAgICBbICcnLCAnQ2hhbmdlU3RhdGVzIC0gJyAuICRVbmlxdWVTaWduYXR1cmUgXSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIENoYW5nZUJ1aWxkZXJJRCA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgIFsgdW5kZWYsICRVc2VySURzWzBdIF0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgWyB1bmRlZiwgJENoYW5nZVN0YXRlTmFtZTJJRHtyZXF1ZXN0ZWR9IF0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgNCwgMjUsIDI2LCAzMywgMzcgXSwKICAgIH0sCgogICAgIyBDaGFuZ2VVcGRhdGUoKSB3aXRoIHZhbGlkIG5hbWVkIENoYW5nZVN0YXRlCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZVVwZGF0ZSgpIHdpdGggdmFsaWQgbmFtZWQgQ2hhbmdlU3RhdGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdDaGFuZ2VTdGF0ZXMgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZSA9PiAncGVuZGluZyBhcHByb3ZhbCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICA9PiAnJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICA9PiAnQ2hhbmdlU3RhdGVzIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBKdXN0aWZpY2F0aW9uICAgPT4gJycsCiAgICAgICAgICAgICAgICBDaGFuZ2VNYW5hZ2VySUQgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDaGFuZ2VCdWlsZGVySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEICAgPT4gJENoYW5nZVN0YXRlTmFtZTJJRHsncGVuZGluZyBhcHByb3ZhbCd9LAogICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGUgICAgID0+ICdwZW5kaW5nIGFwcHJvdmFsJywKICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEcyAgICA9PiBbXSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlckNvdW50ICA9PiAwLAogICAgICAgICAgICAgICAgQ0FCQWdlbnRzICAgICAgID0+IFtdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzICAgID0+IFtdLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDQsIDI1LCAyNiwgMzggXSwKICAgIH0sCgogICAgIyBDaGFuZ2VVcGRhdGUoKSB3aXRoIGludmFsaWQgbmFtZWQgQ2hhbmdlU3RhdGUKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlVXBkYXRlKCkgd2l0aCBpbnZhbGlkIG5hbWVkIENoYW5nZVN0YXRlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgVXBkYXRlRmFpbHMgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdDaGFuZ2VTdGF0ZXMgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZSA9PiAnZmFpbGVkJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgID0+ICcnLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgID0+ICdDaGFuZ2VTdGF0ZXMgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gICA9PiAnJywKICAgICAgICAgICAgICAgIENoYW5nZU1hbmFnZXJJRCA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIENoYW5nZUJ1aWxkZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgICA9PiAkQ2hhbmdlU3RhdGVOYW1lMklEe3JlcXVlc3RlZH0sCiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZSAgICAgPT4gJ3JlcXVlc3RlZCcsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRHMgICAgPT4gW10sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJDb3VudCAgPT4gMCwKICAgICAgICAgICAgICAgIENBQkFnZW50cyAgICAgICA9PiBbXSwKICAgICAgICAgICAgICAgIENBQkN1c3RvbWVycyAgICA9PiBbXSwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWyA0LCAyNSwgMjYsIDM3IF0sCiAgICB9LAoKICAgICMgQ2hhbmdlVXBkYXRlKCkgd2l0aCBub3QgYWxsb3dlZCBuZXh0IENoYW5nZVN0YXRlCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZVVwZGF0ZSgpIHdpdGggbm90IGFsbG93ZWQgbmV4dCBDaGFuZ2VTdGF0ZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIFVwZGF0ZUZhaWxzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdDaGFuZ2VTdGF0ZXMgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlID0+ICdwZW5kaW5nIGFwcHJvdmFsJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ2hhbmdlVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZSA9PiAnc3VjY2Vzc2Z1bCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlID0+ICdwZW5kaW5nIGFwcHJvdmFsJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWzM4XSwKICAgIH0sCgogICAgIyBDaGFuZ2VVcGRhdGUoKSB3aXRoIG5vdCBhbGxvd2VkIG5leHQgQ2hhbmdlU3RhdGUgYnV0IEJ5cGFzc1N0YXRlTWFjaGluZSBwYXJhbWV0ZXIKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAnQ2hhbmdlVXBkYXRlKCkgd2l0aCBub3QgYWxsb3dlZCBuZXh0IENoYW5nZVN0YXRlIGJ1dCBCeXBhc3NTdGF0ZU1hY2hpbmUgcGFyYW1ldGVyIC0gJwogICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZVN0YXRlcyAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGUgPT4gJ3BlbmRpbmcgYXBwcm92YWwnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBCeXBhc3NTdGF0ZU1hY2hpbmUgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlICAgICAgICA9PiAnc3VjY2Vzc2Z1bCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlID0+ICdzdWNjZXNzZnVsJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGNoYW5nZSBjb250YWlucyBhbGwgZGF0YSAtIChhbGwgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBjb250YWlucyBhbGwgcG9zc2libGUgcGFyYW1zIGZvciBDaGFuZ2VBZGQuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgPT4gJ0NoYW5nZSAxIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICA9PiAnQ2hhbmdlIDEgLSBEZXNjcmlwdGlvbiAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiAgID0+ICdDaGFuZ2UgMSAtIEp1c3RpZmljYXRpb24gLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENoYW5nZU1hbmFnZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZUJ1aWxkZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENBQkFnZW50cyAgICAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgJFVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgICRDdXN0b21lclVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgPT4gJ0NoYW5nZSAxIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICA9PiAnQ2hhbmdlIDEgLSBEZXNjcmlwdGlvbiAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiAgID0+ICdDaGFuZ2UgMSAtIEp1c3RpZmljYXRpb24gLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENoYW5nZU1hbmFnZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZUJ1aWxkZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENBQkFnZW50cyAgICAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgJFVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgICRDdXN0b21lclVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDIsIDMsIDQsIDUsIDYsIDgsIDksIDEwLCAxMiwgMTMsIDIzLCAyNCwgMjcgXSwKICAgICAgICBMYWJlbCAgICAgID0+ICdTZWFyY2hUZXN0JywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhpcyB0ZXN0IHdpbGwgYmUgdXNlZCBmb3Igc2VhcmNoIHRlc3RzCiAgICB9LAoKICAgICMgY2hhbmdlIGNvbnRhaW5zIHRpdGxlLCBkZXNjcmlwdGlvbiwganVzdGlmaWNhdGlvbiwgY2hhbmdlbWFuYWdlcmlkIGFuZCBjaGFuZ2VidWlsZGVyaWQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBjb250YWlucyBhbGwgcG9zc2libGUgcGFyYW1zIGZvciBDaGFuZ2VBZGQgKFNlY29uZCB0cnkpLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgID0+ICdDaGFuZ2UgMiAtIFRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgPT4gJ0NoYW5nZSAyIC0gRGVzY3JpcHRpb24gLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gICA9PiAnQ2hhbmdlIDIgLSBKdXN0aWZpY2F0aW9uIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBDaGFuZ2VNYW5hZ2VySUQgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCdWlsZGVySUQgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBDQUJBZ2VudHMgICAgICAgPT4gWwogICAgICAgICAgICAgICAgICAgICRVc2VySURzWzFdLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIENBQkN1c3RvbWVycyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICA9PiAnQ2hhbmdlIDIgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgID0+ICdDaGFuZ2UgMiAtIERlc2NyaXB0aW9uIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBKdXN0aWZpY2F0aW9uICAgPT4gJ0NoYW5nZSAyIC0gSnVzdGlmaWNhdGlvbiAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgQ2hhbmdlTWFuYWdlcklEID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICAgICAgQ2hhbmdlQnVpbGRlcklEID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICAgICAgQ0FCQWdlbnRzICAgICAgID0+IFsgJFVzZXJJRHNbMV0gXSwKICAgICAgICAgICAgICAgIENBQkN1c3RvbWVycyAgICA9PiBbICRDdXN0b21lclVzZXJJRHNbMV0gXSwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICA9PiAkVXNlcklEc1sxXQogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDIzLCAyNCBdLAogICAgfSwKCiAgICAjIGNoYW5nZSBjb250YWlucyBhbGwgZGF0YSAtIHdyb25nIENBQiAtICh3cm9uZyBDQUIgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBjb250YWlucyBpbnZhbGlkIENBQiBtZW1iZXJzIGZvciBDaGFuZ2VBZGQuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgPT4gJ0NoYW5nZSAzIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICA9PiAnQ2hhbmdlIDMgLSBEZXNjcmlwdGlvbiAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiAgID0+ICdDaGFuZ2UgMyAtIEp1c3RpZmljYXRpb24gLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENoYW5nZU1hbmFnZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZUJ1aWxkZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENBQkFnZW50cyAgICAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VySURzWzFdLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIENBQkN1c3RvbWVycyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgJFVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB1bmRlZiwKICAgICAgICB9LAogICAgICAgIEZhaWxzID0+IDEsCiAgICB9LAoKICAgICMgY2hhbmdlIGNvbnRhaW5zIHJlcXVpcmVkIGRhdGEgLSBkdXBsaWNhdGUgQ0FCIGVudHJpZXMgLSAoZHVwbGljYXRlIENBQiBlbnRyaWVzKQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGNvbnRhaW5zIGR1cGxpY2F0ZSBDQUIgbWVtYmVycyBmb3IgQ2hhbmdlQWRkLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgQ0FCQWdlbnRzID0+IFsKICAgICAgICAgICAgICAgICAgICAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgICAgICAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBDQUJDdXN0b21lcnMgPT4gWwogICAgICAgICAgICAgICAgICAgICRDdXN0b21lclVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgICRDdXN0b21lclVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENBQkFnZW50cyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgJFVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgICRDdXN0b21lclVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0ZXN0IG9uIG1heCBsb25nIHBhcmFtcyAgKHJlcXVpcmVkIGF0dHJpYnV0ZXMpCiAgICAjIFRoZSBtYXggcGxhaW4gc3RyaW5nIGlzIG9ubHkgMTc5OTk5OSwgYmVjYXVzZSBUb0FzY2lpKCkgYWRkcyBhIG5ld2xpbmUKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBmb3IgbWF4IHN0cmluZyBsZW5ndGggZm9yIENoYW5nZUFkZC4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICdUJyB4IDI1MCwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ0QnIHggMTc5OTk5OSwKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ0onIHggMTc5OTk5OSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgICAgID0+ICdUJyB4IDI1MCwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgICA9PiAnRCcgeCAxNzk5OTk5LAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25QbGFpbiAgID0+ICdEJyB4IDE3OTk5OTkgLiAiXG4iLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiAgICAgID0+ICdKJyB4IDE3OTk5OTksCiAgICAgICAgICAgICAgICBKdXN0aWZpY2F0aW9uUGxhaW4gPT4gJ0onIHggMTc5OTk5OSAuICJcbiIsCiAgICAgICAgICAgICAgICBDaGFuZ2VNYW5hZ2VySUQgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDaGFuZ2VCdWlsZGVySUQgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRHMgICAgICAgPT4gW10sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJDb3VudCAgICAgPT4gMCwKICAgICAgICAgICAgICAgIENBQkFnZW50cyAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgICAgIENBQkN1c3RvbWVycyAgICAgICA9PiBbXSwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWyAxMSwgMTIsIDEzIF0sCiAgICB9LAoKICAgICMgdGVzdCBvbiBtYXgrMSBsb25nIHBhcmFtcyAgKHJlcXVpcmVkIGF0dHJpYnV0ZXMpCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZm9yIG1heCsxIHN0cmluZyBsZW5ndGggZm9yIENoYW5nZUFkZC4nLAogICAgICAgIEZhaWxzICAgICAgID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJ1QnIHggMjUxLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnRCcgeCAxODAwMDAwLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAnSicgeCAxODAwMDAwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB1bmRlZiwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRlc3Qgb24gbWF4KzIgbG9uZyBwYXJhbXMgIChyZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciBtYXgrMiBzdHJpbmcgbGVuZ3RoIGZvciBDaGFuZ2VBZGQuJywKICAgICAgICBGYWlscyAgICAgICA9PiAxLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICdUJyB4IDI1MiwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ0QnIHggMTgwMDAwMSwKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ0onIHggMTgwMDAwMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gdW5kZWYsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0ZXN0IG9uIG1heCsxIGxvbmcgcGFyYW1zIC0gdGl0bGUgIChyZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciBtYXgrMSBzdHJpbmcgLSB0aXRsZSAtIGxlbmd0aCBmb3IgQ2hhbmdlQWRkLicsCiAgICAgICAgRmFpbHMgICAgICAgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAnVCcgeCAyNTEsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICdEJywKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ0onLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB1bmRlZiwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRlc3Qgb24gbWF4KzEgbG9uZyBwYXJhbXMgLSBkZXNjcmlwdGlvbiAocmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBmb3IgbWF4KzEgc3RyaW5nIC0gZGVzY3JpcHRpb24gLSBsZW5ndGggZm9yIENoYW5nZUFkZC4nLAogICAgICAgIEZhaWxzICAgICAgID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJ1QnLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnRCcgeCAxODAwMDAwLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAnSicsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHVuZGVmLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGVzdCBvbiBtYXgrMSBsb25nIHBhcmFtcyAtIGp1c3RpZmljYXRpb24gKHJlcXVpcmVkIGF0dHJpYnV0ZXMpCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZm9yIG1heCsxIHN0cmluZyAtIGp1c3RpZmljYXRpb24gLSBsZW5ndGggZm9yIENoYW5nZUFkZC4nLAogICAgICAgIEZhaWxzICAgICAgID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJ1QnLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnRCcsCiAgICAgICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICdKJyB4IDE4MDAwMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHVuZGVmLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGVzdCBvbiB1bmRlZiBwYXJhbXMgLSB0aXRsZSAgKHJlcXVpcmVkIGF0dHJpYnV0ZXMpCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZm9yIHVuZGVmIC0gdGl0bGUnLAogICAgICAgIEZhaWxzICAgICAgID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICdEJywKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ0onLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB1bmRlZiwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRlc3Qgb24gdW5kZWYgcGFyYW1zIC0gZGVzY3JpcHRpb24gKHJlcXVpcmVkIGF0dHJpYnV0ZXMpCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZm9yIHVuZGVmIC0gZGVzY3JpcHRpb24nLAogICAgICAgIEZhaWxzICAgICAgID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJ1QnLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiB1bmRlZiwKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ0onLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB1bmRlZiwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRlc3Qgb24gdW5kZWYgcGFyYW1zIC0ganVzdGlmaWNhdGlvbiAocmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBmb3IgdW5kZWYgLSBqdXN0aWZpY2F0aW9uJywKICAgICAgICBGYWlscyAgICAgICA9PiAxLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICdUJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ0QnLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiB1bmRlZiwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gdW5kZWYsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0ZXN0IG9uICcwJyBzdHJpbmdzIC0gZGVmYXVsdCB1c2VyICAocmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiVGVzdCBmb3IgJzAnIHN0cmluZyBoYW5kbGluZyBmb3IgQ2hhbmdlQWRkLiIsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAnMCcsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICcwJywKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJzAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICcwJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJzAnLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAnMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgMTgsIDE5LCAyMCwgMjEgXSwKICAgIH0sCgogICAgIyBUZXN0IHRpdGxlIHdpdGggbGVhZGluZyB3aGl0ZXNwYWNlCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZm9yIHRpdGxlIHdpdGggbGVhZGluZyB3aGl0ZXNwYWNlJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICIgIFx0IFxuICBUaXRsZSB3aXRoIGxlYWRpbmcgd2hpdGVzcGFjZSAtICIgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgPT4gIlRpdGxlIHdpdGggbGVhZGluZyB3aGl0ZXNwYWNlIC0gIiAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBDaGFuZ2VCdWlsZGVySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgNiwgNDUgXSwKICAgIH0sCgogICAgIyBUZXN0IHRpdGxlIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciB0aXRsZSB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2UnLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gIlRpdGxlIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZSAtICIgLiAkVW5pcXVlU2lnbmF0dXJlIC4gIiAgXHQgXG4gICIsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICA9PiAiVGl0bGUgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlIC0gIiAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBDaGFuZ2VCdWlsZGVySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgNiwgNDYgXSwKICAgIH0sCgogICAgIyBUZXN0IHRpdGxlIHdpdGggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciB0aXRsZSB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UnLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gIiAgXHQgXG4gIFRpdGxlIHdpdGggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSAtICIKICAgICAgICAgICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUKICAgICAgICAgICAgICAgICAgICAuICIgIFx0IFxuICAiLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgPT4gIlRpdGxlIHdpdGggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSAtICIgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgQ2hhbmdlQnVpbGRlcklEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDYsIDQ3IF0sCiAgICB9LAoKICAgICMgVGVzdCB0aXRsZSB3aXRoIG9ubHkgd2hpdGVzcGFjZQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciB0aXRsZSB3aXRoIG9ubHkgd2hpdGVzcGFjZScsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAiICBcdCBcbiAgIiwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgID0+ICcnLAogICAgICAgICAgICAgICAgQ2hhbmdlQnVpbGRlcklEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbXSwKICAgIH0sCgogICAgIyBhIGNoYW5nZSBmb3IgdGhlICdVc2luZ1dpbGRjYXJkcyA9PiAwJyB0ZXN0CiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gIkEgY2hhbmdlIGZvciB0aGUgJ1VzaW5nV2lsZGNhcmRzID0+IDAnIHRlc3QuIiwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICROb1dpbGRjYXJkc1Rlc3RUaXRsZSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJE5vV2lsZGNhcmRzVGVzdFRpdGxlLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAkTm9XaWxkY2FyZHNUZXN0VGl0bGUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJE5vV2lsZGNhcmRzVGVzdFRpdGxlLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAkTm9XaWxkY2FyZHNUZXN0VGl0bGUsCiAgICAgICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICROb1dpbGRjYXJkc1Rlc3RUaXRsZSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRlc3Qgb24gbWl4ZWQgdmFsaWQgYW5kIGludmFsaWQgQ0FCQWdlbnRzICAocmVxdWlyZWQgYXR0cmlidXRlcykKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBvbiBtaXhlZCB2YWxpZCBhbmQgaW52YWxpZCBDQUJBZ2VudHMgZm9yIENoYW5nZUFkZC4nLAogICAgICAgIEZhaWxzICAgICAgID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICAgICBDQUJBZ2VudHMgPT4gWwogICAgICAgICAgICAgICAgICAgICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgICROb25FeGlzdGluZ1VzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICAgICAgJFVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICAgICAgJE5vbkV4aXN0aW5nVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHVuZGVmLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGVzdCBvbiBtaXhlZCB2YWxpZCBhbmQgaW52YWxpZCBDQUJDdXN0b21lcnMgIChyZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IG9uIG1peGVkIHZhbGlkIGFuZCBpbnZhbGlkIENBQkN1c3RvbWVycyBmb3IgQ2hhbmdlQWRkLicsCiAgICAgICAgRmFpbHMgICAgICAgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENBQkN1c3RvbWVycyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VySURzWzFdLAogICAgICAgICAgICAgICAgICAgICdUaGlzSXNBbkludmFsaWRDdXN0b21lclVzZXJJZCcsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB1bmRlZiwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRlc3Qgb24gaW52YWxpZCBJRHMgZm9yIENoYW5nZU1hbmFnZXJJRCBhbmQgQ2hhbmdlQnVpbGRlcklECiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3Qgb24gaW52YWxpZCBJRHMgZm9yIENoYW5nZU1hbmFnZXJJRCBhbmQgQ2hhbmdlQnVpbGRlcklEIGZvciBDaGFuZ2VBZGQuJywKICAgICAgICBGYWlscyAgICAgICA9PiAxLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlTWFuYWdlcklEID0+ICROb25FeGlzdGluZ1VzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCdWlsZGVySUQgPT4gJE5vbkV4aXN0aW5nVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gdW5kZWYsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0ZXN0IG9uIGludmFsaWQgSURzIGZvciBDaGFuZ2VNYW5hZ2VySUQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBvbiBpbnZhbGlkIElEIGZvciBDaGFuZ2VNYW5hZ2VySUQgZm9yIENoYW5nZUFkZC4nLAogICAgICAgIEZhaWxzICAgICAgID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VNYW5hZ2VySUQgPT4gJE5vbkV4aXN0aW5nVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZUJ1aWxkZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gdW5kZWYsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0ZXN0IG9uIGludmFsaWQgSURzIGZvciBDaGFuZ2VCdWlsZGVySUQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBvbiBpbnZhbGlkIElEIGZvciBDaGFuZ2VCdWlsZGVySUQgZm9yIENoYW5nZUFkZC4nLAogICAgICAgIEZhaWxzICAgICAgID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VNYW5hZ2VySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCdWlsZGVySUQgPT4gJE5vbkV4aXN0aW5nVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gdW5kZWYsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0ZXN0IG9uIGludmFsaWQgUmVxdWVzdGVkVGltZQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IG9uIGludmFsaWQgUmVxdWVzdGVkVGltZSBmb3IgQ2hhbmdlQWRkLicsCiAgICAgICAgRmFpbHMgICAgICAgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBSZXF1ZXN0ZWRUaW1lID0+ICdhbnl0aGluZyBpbnZhbGlkJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gdW5kZWYsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0ZXN0IG9uIHZhbGlkIFJlcXVlc3RlZFRpbWUKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBvbiB2YWxpZCBSZXF1ZXN0ZWRUaW1lIGZvciBDaGFuZ2VBZGQuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBSZXF1ZXN0ZWRUaW1lID0+ICcyMDA5LTEwLTI5IDEzOjMzOjMzJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ1JlcXVlc3RlZFRpbWUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAnJywKICAgICAgICAgICAgICAgIFJlcXVlc3RlZFRpbWUgPT4gJzIwMDktMTAtMjkgMTM6MzM6MzMnLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnUmVxdWVzdGVkVGltZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDQyLCA0MyBdLAogICAgfSwKCiAgICAjIFRlc3QgZGVmYXVsdCBDSVAgdmFsdWVzCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZGVmYXVsdCBDSVAgdmFsdWVzJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0IGRlZmF1bHQgQ0lQIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICA9PiAnVGVzdCBkZWZhdWx0IENJUCAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgQ2hhbmdlQnVpbGRlcklEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnkgICAgICAgID0+ICREZWZhdWx0Q2F0ZWdvcnksCiAgICAgICAgICAgICAgICBDYXRlZ29yeUlEICAgICAgPT4gJENoYW5nZUNhdGVnb3J5TmFtZTJJRHskRGVmYXVsdENhdGVnb3J5fSwKICAgICAgICAgICAgICAgIEltcGFjdCAgICAgICAgICA9PiAkRGVmYXVsdEltcGFjdCwKICAgICAgICAgICAgICAgIEltcGFjdElEICAgICAgICA9PiAkQ2hhbmdlSW1wYWN0TmFtZTJJRHskRGVmYXVsdEltcGFjdH0sCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgICAgPT4gJERlZmF1bHRQcmlvcml0eSwKICAgICAgICAgICAgICAgIFByaW9yaXR5ICAgICAgICA9PiAkQ2hhbmdlUHJpb3JpdHlJRDJOYW1leyREZWZhdWx0UHJpb3JpdHl9LAoKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWzZdLAogICAgICAgIExhYmVsICAgICAgPT4gJ09yZGVyQnlDSVBUZXN0cycsICAgICMgdGhpcyBjaGFuZ2Ugd2lsbCBiZSB1c2VkIGluIG9yZGVyIGJ5IHNlYXJjaCB0ZXN0cwogICAgfSwKCiAgICAjIFRlc3QgY2F0ZWdvcnkKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBjYXRlZ29yeSAiMSB2ZXJ5IGxvdyInLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ1Rlc3QgQ0lQIChDYXRlZ29yeSkgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENhdGVnb3J5ICAgID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgID0+ICdUZXN0IENJUCAoQ2F0ZWdvcnkpIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBDaGFuZ2VCdWlsZGVySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDYXRlZ29yeSAgICAgICAgPT4gJzEgdmVyeSBsb3cnLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgICAgID0+ICRDaGFuZ2VDYXRlZ29yeU5hbWUySUR7JzEgdmVyeSBsb3cnfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWyA2LCA1MSwgNTQsIDU3LCA2MCwgNjMsIDY0IF0sCiAgICAgICAgTGFiZWwgICAgICA9PiAnT3JkZXJCeUNJUFRlc3RzJywgICAgICAgICAgICAgICAjIHRoaXMgY2hhbmdlIHdpbGwgYmUgdXNlZCBpbiBvcmRlciBieSBzZWFyY2ggdGVzdHMKICAgIH0sCgogICAgIyBUZXN0IGludmFsaWQgY2F0ZWdvcnkKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBpbnZhbGlkIGNhdGVnb3J5ICIxOCBzdXBlciBoaWdoIicsCiAgICAgICAgRmFpbHMgICAgICAgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0IENJUCAoQ2F0ZWdvcnkpIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBDYXRlZ29yeSAgICA9PiAnMTggc3VwZXIgaGlnaCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFtdLAogICAgfSwKCiAgICAjIFRlc3QgaW1wYWN0CiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgaW1wYWN0ICIxIHZlcnkgbG93IicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAnVGVzdCBDSVAgKEltcGFjdCkgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIEltcGFjdCAgICAgID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgID0+ICdUZXN0IENJUCAoSW1wYWN0KSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgQ2hhbmdlQnVpbGRlcklEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgSW1wYWN0ICAgICAgICAgID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIEltcGFjdElEICAgICAgICA9PiAkQ2hhbmdlSW1wYWN0TmFtZTJJRHsnMSB2ZXJ5IGxvdyd9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDYsIDUyLCA1NSwgNTgsIDYxIF0sCiAgICAgICAgTGFiZWwgICAgICA9PiAnT3JkZXJCeUNJUFRlc3RzJywgICAgICAgIyB0aGlzIGNoYW5nZSB3aWxsIGJlIHVzZWQgaW4gb3JkZXIgYnkgc2VhcmNoIHRlc3RzCiAgICB9LAoKICAgICMgVGVzdCBpbnZhbGlkIGltcGFjdAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGludmFsaWQgaW1wYWN0ICIxOCBzdXBlciBoaWdoIicsCiAgICAgICAgRmFpbHMgICAgICAgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0IENJUCAoSW1wYWN0KSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSW1wYWN0ICAgICAgPT4gJzE4IHN1cGVyIGhpZ2gnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbXSwKICAgIH0sCgogICAgIyBUZXN0IHByaW9yaXR5CiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgcHJpb3JpdHkgIjEgdmVyeSBsb3ciJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0IENJUCAoUHJpb3JpdHkpIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBQcmlvcml0eSAgICA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICA9PiAnVGVzdCBDSVAgKFByaW9yaXR5KSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgQ2hhbmdlQnVpbGRlcklEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgICAgICAgID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgICA9PiAkQ2hhbmdlUHJpb3JpdHlOYW1lMklEeycxIHZlcnkgbG93J30sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgNiwgNTMsIDU2LCA1OSwgNjIgXSwKICAgICAgICBMYWJlbCAgICAgID0+ICdPcmRlckJ5Q0lQVGVzdHMnLCAgICAgICAjIHRoaXMgY2hhbmdlIHdpbGwgYmUgdXNlZCBpbiBvcmRlciBieSBzZWFyY2ggdGVzdHMKICAgIH0sCgogICAgIyBUZXN0IGludmFsaWQgcHJpb3JpdHkKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBpbnZhbGlkIHByaW9yaXR5ICIxOCBzdXBlciBoaWdoIicsCiAgICAgICAgRmFpbHMgICAgICAgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0IENJUCAoUHJpb3JpdHkpIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBQcmlvcml0eSAgICA9PiAnMTggc3VwZXIgaGlnaCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFtdLAogICAgfSwKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwogICAgIyBUZXN0cyBvbiBDaGFuZ2VVcGRhdGUKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCgogICAgIyBVcGRhdGUgY2hhbmdlIHdpdGhvdXQgcmVxdWlyZWQgcGFyYW1zIChyZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGNvbnRhaW5zIG5vIHBhcmFtcyBmb3IgQ2hhbmdlVXBkYXRlKCkuJywKICAgICAgICBGYWlscyAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSBleHBlY3QgdGhpcyB0ZXN0IHRvIGZhaWwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVVwZGF0ZSA9PiB7fSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VVcGRhdGUgPT4gdW5kZWYsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0ZXN0IG9uIG1heCBsb25nIHBhcmFtcyAgKHJlcXVpcmVkIGF0dHJpYnV0ZXMpCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZm9yIG1heCBzdHJpbmcgbGVuZ3RoIGZvciBDaGFuZ2VVcGRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZVVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICdUJyB4IDI1MCwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ0QnIHggMTc5OTk5OSwKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ0onIHggMTc5OTk5OSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgICAgID0+ICdUJyB4IDI1MCwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgICA9PiAnRCcgeCAxNzk5OTk5LAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb25QbGFpbiAgID0+ICdEJyB4IDE3OTk5OTkgLiAiXG4iLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiAgICAgID0+ICdKJyB4IDE3OTk5OTksCiAgICAgICAgICAgICAgICBKdXN0aWZpY2F0aW9uUGxhaW4gPT4gJ0onIHggMTc5OTk5OSAuICJcbiIsCiAgICAgICAgICAgICAgICBDaGFuZ2VNYW5hZ2VySUQgICAgPT4gdW5kZWYsCiAgICAgICAgICAgICAgICBDaGFuZ2VCdWlsZGVySUQgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRHMgICAgICAgPT4gW10sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJDb3VudCAgICAgPT4gMCwKICAgICAgICAgICAgICAgIENBQkFnZW50cyAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgICAgIENBQkN1c3RvbWVycyAgICAgICA9PiBbXSwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDExLCAxNCwgMTUsIDE2LCAxNyBdLAogICAgfSwKCiAgICAjIHRlc3Qgb24gbWF4KzEgbG9uZyBwYXJhbXMgIChyZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciBtYXgrMSBzdHJpbmcgbGVuZ3RoIGZvciBDaGFuZ2VVcGRhdGUuJywKICAgICAgICBVcGRhdGVGYWlscyA9PiAxLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ2hhbmdlVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJ1QnIHggMjUxLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnRCcgeCAxODAwMDAwLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAnSicgeCAxODAwMDAwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICcnLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnJywKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0ZXN0IG9uIG1heCsxIGxvbmcgcGFyYW1zIC0gdGl0bGUgIChyZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciBtYXgrMSBzdHJpbmcgbGVuZ3RoIC0gdGl0bGUgLSBmb3IgQ2hhbmdlVXBkYXRlLicsCiAgICAgICAgVXBkYXRlRmFpbHMgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZVVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICdUJyB4IDI1MSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ0QnLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAnSicsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJycsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICcnLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwgICAgIyB0ZXN0IG9uIG1heCsxIGxvbmcgcGFyYW1zIC0gZGVzY3JpcHRpb24gIChyZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciBtYXgrMSBzdHJpbmcgbGVuZ3RoIC0gZGVzY3JpcHRpb24gLSBmb3IgQ2hhbmdlVXBkYXRlLicsCiAgICAgICAgVXBkYXRlRmFpbHMgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZVVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICdUJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ0QnIHggMTgwMDAwMCwKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ0onLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICcnLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnJywKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sICAgICMgdGVzdCBvbiBtYXgrMSBsb25nIHBhcmFtcyAgLSBqdXN0aWZpY2F0aW9uIC0gKHJlcXVpcmVkIGF0dHJpYnV0ZXMpCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZm9yIG1heCsxIHN0cmluZyBsZW5ndGggLSBqdXN0aWZpY2F0aW9uIC0gZm9yIENoYW5nZVVwZGF0ZS4nLAogICAgICAgIFVwZGF0ZUZhaWxzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAnVCcsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICdEJywKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ0onIHggMTgwMDAwMCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAnJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJycsCiAgICAgICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGVzdCBvbiAnMCcgc3RyaW5ncyAtIGRlZmF1bHQgdXNlciAgKHJlcXVpcmVkIGF0dHJpYnV0ZXMpCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gIlRlc3QgZm9yICcwJyBzdHJpbmcgaGFuZGxpbmcgZm9yIENoYW5nZVVwZGF0ZS4iLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAnMCcsCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICcwJywKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJzAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICcwJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJzAnLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAnMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0ZXN0IG9uIHZhbGlkIFJlcXVlc3RlZFRpbWUKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBvbiB2YWxpZCBSZXF1ZXN0ZWRUaW1lIGZvciBDaGFuZ2VVcGRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBSZXF1ZXN0ZWRUaW1lID0+ICcyMDA5LTEwLTI5IDEzOjMzOjMzJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ1JlcXVlc3RlZFRpbWUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ2hhbmdlVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFJlcXVlc3RlZFRpbWUgPT4gJzIwMDktMTEtMDYgMDg6MTU6MjInLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJycsCiAgICAgICAgICAgICAgICBSZXF1ZXN0ZWRUaW1lID0+ICcyMDA5LTExLTA2IDA4OjE1OjIyJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ1JlcXVlc3RlZFRpbWUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWzQzXSwKICAgIH0sCgogICAgIyB0ZXN0IG9uIGludmFsaWQgUmVxdWVzdGVkVGltZQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IG9uIGludmFsaWQgUmVxdWVzdGVkVGltZSBmb3IgQ2hhbmdlVXBkYXRlLicsCiAgICAgICAgVXBkYXRlRmFpbHMgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBSZXF1ZXN0ZWRUaW1lID0+ICcyMDA5LTEwLTI5IDEzOjMzOjMzJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ1JlcXVlc3RlZFRpbWUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ2hhbmdlVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFJlcXVlc3RlZFRpbWUgPT4gJ2FueXRoaW5nJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJycsCiAgICAgICAgICAgICAgICBSZXF1ZXN0ZWRUaW1lID0+ICcyMDA5LTEwLTI5IDEzOjMzOjMzJywKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ1JlcXVlc3RlZFRpbWUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWyA0MiwgNDMgXSwKICAgIH0sCgogICAgIyBUZXN0IGNhdGVnb3J5CiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgY2F0ZWdvcnkgdXBkYXRlICI1IHZlcnkgaGlnaCInLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ1Rlc3QgQ0lQIChDYXRlZ29yeSkgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENhdGVnb3J5ICAgID0+ICcyIGxvdycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZVVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnkgPT4gJzUgdmVyeSBoaWdoJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgID0+ICdUZXN0IENJUCAoQ2F0ZWdvcnkpIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBDaGFuZ2VCdWlsZGVySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDYXRlZ29yeSAgICAgICAgPT4gJzUgdmVyeSBoaWdoJywKICAgICAgICAgICAgICAgIENhdGVnb3J5SUQgICAgICA9PiAkQ2hhbmdlQ2F0ZWdvcnlOYW1lMklEeyc1IHZlcnkgaGlnaCd9LAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgNiwgNTQsIDYwIF0sCiAgICAgICAgTGFiZWwgICAgICA9PiAnT3JkZXJCeUNJUFRlc3RzJywgICAgIyB0aGlzIGNoYW5nZSB3aWxsIGJlIHVzZWQgaW4gb3JkZXIgYnkgc2VhcmNoIHRlc3RzCiAgICB9LAoKICAgICMgVGVzdCBpbnZhbGlkIGNhdGVnb3J5CiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgaW52YWxpZCBjYXRlZ29yeSB1cGRhdGUgIjE4IHN1cGVyIGhpZ2giJywKICAgICAgICBVcGRhdGVGYWlscyA9PiAxLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ1Rlc3QgaW52YWxpZCB1cGRhdGUgQ0lQIChDYXRlZ29yeSkgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENhdGVnb3J5ICAgID0+ICcyIGxvdycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZVVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnkgPT4gJzE4IHN1cGVyIGhpZ2gnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgPT4gJ1Rlc3QgaW52YWxpZCB1cGRhdGUgQ0lQIChDYXRlZ29yeSkgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENoYW5nZUJ1aWxkZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENhdGVnb3J5ICAgICAgICA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgQ2F0ZWdvcnlJRCAgICAgID0+ICRDaGFuZ2VDYXRlZ29yeU5hbWUySUR7JzIgbG93J30sCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgNiwgNTQsIDYwLCA2MywgNjQgXSwKICAgICAgICBMYWJlbCAgICAgID0+ICdPcmRlckJ5Q0lQVGVzdHMnLCAgICAgICAjIHRoaXMgY2hhbmdlIHdpbGwgYmUgdXNlZCBpbiBvcmRlciBieSBzZWFyY2ggdGVzdHMKICAgIH0sCgogICAgIyBUZXN0IGltcGFjdAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGltcGFjdCB1cGRhdGUgIjUgdmVyeSBoaWdoIicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAnVGVzdCB1cGRhdGUgQ0lQIChJbXBhY3QpIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBJbXBhY3QgICAgICA9PiAnMiBsb3cnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICAgICBJbXBhY3QgPT4gJzUgdmVyeSBoaWdoJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgID0+ICdUZXN0IHVwZGF0ZSBDSVAgKEltcGFjdCkgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENoYW5nZUJ1aWxkZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIEltcGFjdCAgICAgICAgICA9PiAnNSB2ZXJ5IGhpZ2gnLAogICAgICAgICAgICAgICAgSW1wYWN0SUQgICAgICAgID0+ICRDaGFuZ2VJbXBhY3ROYW1lMklEeyc1IHZlcnkgaGlnaCd9LAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgNiwgNTUsIDYxIF0sCiAgICAgICAgTGFiZWwgICAgICA9PiAnT3JkZXJCeUNJUFRlc3RzJywgICAgIyB0aGlzIGNoYW5nZSB3aWxsIGJlIHVzZWQgaW4gb3JkZXIgYnkgc2VhcmNoIHRlc3RzCiAgICB9LAoKICAgICMgVGVzdCBpbnZhbGlkIGltcGFjdAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGludmFsaWQgaW1wYWN0IHVwZGF0ZSAiMTggc3VwZXIgaGlnaCInLAogICAgICAgIFVwZGF0ZUZhaWxzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAnVGVzdCB1cGRhdGUgaW52YWxpZCBDSVAgKEltcGFjdCkgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIEltcGFjdCAgICAgID0+ICcyIGxvdycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZVVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgIEltcGFjdCA9PiAnMTggc3VwZXIgaGlnaCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICA9PiAnVGVzdCB1cGRhdGUgaW52YWxpZCBDSVAgKEltcGFjdCkgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENoYW5nZUJ1aWxkZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIEltcGFjdCAgICAgICAgICA9PiAnMiBsb3cnLAogICAgICAgICAgICAgICAgSW1wYWN0SUQgICAgICAgID0+ICRDaGFuZ2VJbXBhY3ROYW1lMklEeycyIGxvdyd9LAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDYsIDU1LCA2MSBdLAogICAgICAgIExhYmVsICAgICAgPT4gJ09yZGVyQnlDSVBUZXN0cycsICAgICMgdGhpcyBjaGFuZ2Ugd2lsbCBiZSB1c2VkIGluIG9yZGVyIGJ5IHNlYXJjaCB0ZXN0cwogICAgfSwKCiAgICAjIFRlc3QgcHJpb3JpdHkKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBwcmlvcml0eSB1cGRhdGUgIjUgdmVyeSBoaWdoIicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAnVGVzdCB1cGRhdGUgQ0lQIChQcmlvcml0eSkgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIFByaW9yaXR5ICAgID0+ICcyIGxvdycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZVVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJzUgdmVyeSBoaWdoJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgID0+ICdUZXN0IHVwZGF0ZSBDSVAgKFByaW9yaXR5KSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgQ2hhbmdlQnVpbGRlcklEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgICAgICAgID0+ICc1IHZlcnkgaGlnaCcsCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEICAgICAgPT4gJENoYW5nZVByaW9yaXR5TmFtZTJJRHsnNSB2ZXJ5IGhpZ2gnfSwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDYsIDU2LCA2MiBdLAogICAgICAgIExhYmVsICAgICAgPT4gJ09yZGVyQnlDSVBUZXN0cycsICAgICMgdGhpcyBjaGFuZ2Ugd2lsbCBiZSB1c2VkIGluIG9yZGVyIGJ5IHNlYXJjaCB0ZXN0cwogICAgfSwKCiAgICAjIFRlc3QgaW52YWxpZCBwcmlvcml0eQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGludmFsaWQgcHJpb3JpdHkgdXBkYXRlICIxOCBzdXBlciBoaWdoIicsCiAgICAgICAgVXBkYXRlRmFpbHMgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0IGludmFsaWQgdXBkYXRlIENJUCAoUHJpb3JpdHkpIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBQcmlvcml0eSAgICA9PiAnMiBsb3cnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICcxOCBzdXBlciBoaWdoJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgID0+ICdUZXN0IGludmFsaWQgdXBkYXRlIENJUCAoUHJpb3JpdHkpIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBDaGFuZ2VCdWlsZGVySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBQcmlvcml0eSAgICAgICAgPT4gJzIgbG93JywKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgICAgICA9PiAkQ2hhbmdlUHJpb3JpdHlOYW1lMklEeycyIGxvdyd9LAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDYsIDU2LCA2MiBdLAogICAgICAgIExhYmVsICAgICAgPT4gJ09yZGVyQnlDSVBUZXN0cycsICAgICMgdGhpcyBjaGFuZ2Ugd2lsbCBiZSB1c2VkIGluIG9yZGVyIGJ5IHNlYXJjaCB0ZXN0cwogICAgfSwKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKICAgICMgVGVzdHMgZm9yIENoYW5nZSBEeW5hbWljIGZpZWxkcwogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCgogICAgIyB0ZXN0IHNvbWUgY2hhbmdlIGR5bmFtaWMgZmllbGRzIENoYW5nZUFkZCBhbmQgQ2hhbmdlVXBkYXRlCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgQ2hhbmdlQWRkIGFuZCBDaGFuZ2VVcGRhdGUgd2l0aCBjaGFuZ2UgZHluYW1pYyBmaWVsZHMuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0IGFkZCBjaGFuZ2Ugd2l0aCBkeW5hbWljIGZpZWxkcyAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDEnID0+ICdBQUFBJywKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QyJyA9PiAnQkJCQicsCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MycgPT4gJ0NDQ0MnLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDQnID0+ICdEREREJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ2hhbmdlVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDMnID0+ICdHR0dHJywKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3Q0JyA9PiAnSEhISCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdXb3Jrb3JkZXJUZXN0MScgPT4gJ1ctQUFBQScsCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdXb3Jrb3JkZXJUZXN0MicgPT4gJ1ctQkJCQicsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICA9PiAnVGVzdCBhZGQgY2hhbmdlIHdpdGggZHluYW1pYyBmaWVsZHMgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENoYW5nZUJ1aWxkZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QxJyA9PiAnQUFBQScsCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MicgPT4gJ0JCQkInLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDMnID0+ICdHR0dHJywKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3Q0JyA9PiAnSEhISCcsCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDYsIDY5LCA3MCwgNzEsIDcyIF0sCiAgICB9LAoKICAgICMgdGVzdCBjaGFuZ2UgZHluYW1pYyBmaWVsZHMgd2l0aCBtYXhpbXVtIGxlbmd0aAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IENoYW5nZUFkZCBkeW5hbWljIGZpZWxkcyB3aXRoIDM4MDAgY2hhcmFjdGVycy4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ1Rlc3QgYWRkIGNoYW5nZSBkeW5hbWljIGZpZWxkcyB3aXRoIDM4MDAgY2hhcmFjdGVycyAtICcKICAgICAgICAgICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MScgPT4gJ0EnIHggMzgwMCwKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QyJyA9PiAnQicgeCAzODAwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MScgPT4gJ0EnIHggMzgwMCwKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QyJyA9PiAnQicgeCAzODAwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCgogICAgICAgIFNlYXJjaFRlc3QgPT4gWzZdLAogICAgfSwKCiAgICAjIHRlc3QgY2hhbmdlIGR5bmFtaWMgZmllbGRzIGxhcmdlciB0aGFuIG1heGltdW0gbGVuZ3RoCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgQ2hhbmdlQWRkIGR5bmFtaWMgZmllbGRzIHdpdGggMzgwMSBjaGFyYWN0ZXJzLicsCiAgICAgICAgRmFpbHMgICAgICAgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0IGFkZCBjaGFuZ2UgZHluYW1pYyBmaWVsZHMgd2l0aCAzODAxIGNoYXJhY3RlcnMgLSAnCiAgICAgICAgICAgICAgICAgICAgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDEnID0+ICdBJyB4IDM4MDEsCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MicgPT4gJ0InIHggMzgwMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gdW5kZWYsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0ZXN0IGNoYW5nZSBkeW5hbWljIGZpZWxkcyBsYXJnZXIgdGhhbiBtYXhpbXVtIGxlbmd0aAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IENoYW5nZVVwZGF0ZSBkeW5hbWljIGZpZWxkcyB3aXRoIDM4MDEgY2hhcmFjdGVycy4nLAogICAgICAgIFVwZGF0ZUZhaWxzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAnVGVzdCB1cGRhdGUgY2hhbmdlIGR5bmFtaWMgZmllbGRzIHdpdGggMzgwMSBjaGFyYWN0ZXJzIC0gJwogICAgICAgICAgICAgICAgICAgIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QxJyA9PiAnQScgeCAzODAwLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDInID0+ICdCJyB4IDM4MDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZVVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QzJyA9PiAnQycgeCAzODAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MScgPT4gJ0EnIHggMzgwMCwKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QyJyA9PiAnQicgeCAzODAwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCgogICAgICAgIFNlYXJjaFRlc3QgPT4gWzZdLAogICAgfSwKCiAgICAjIHRlc3QgY2hhbmdlIGR5bmFtaWMgZmllbGRzIHdpdGggemVybyBhbmQgZW1wdHkgc3RyaW5ncwogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IENoYW5nZVVwZGF0ZSB3aXRoIHplcm8gYW5kIGVtcHR5IHN0cmluZy4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ1Rlc3QgdXBkYXRlIGNoYW5nZSBkeW5hbWljIGZpZWxkcyB3aXRoIHplcm8gYW5kIGVtcHR5IHN0cmluZyAtICcKICAgICAgICAgICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MScgPT4gJ0FBQUEnLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDInID0+ICdCQkJCJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ2hhbmdlVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDEnID0+IDAsCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MicgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QxJyA9PiAwLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDInID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCgogICAgICAgIFNlYXJjaFRlc3QgPT4gWzZdLAogICAgfSwKCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwogICAgIyBUZXN0cyBvbiBDaGFuZ2VDQUIqCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwoKICAgICMgVGVzdCBmb3IgQ2hhbmdlQ0FCR2V0CiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAgICAgJ1Rlc3QgY2hlY2tzIGVtcHR5IEFSUkFZLXJlZiBvbiBDaGFuZ2VDQUJHZXQgd2l0aCBubyBnaXZlbiBDQUIgZm9yIENoYW5nZUNBQkdldC4nLAogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUNBQkdldCA9PiB7CiAgICAgICAgICAgICAgICBDQUJBZ2VudHMgICAgPT4gW10sCiAgICAgICAgICAgICAgICBDQUJDdXN0b21lcnMgPT4gW10sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgNCwgMTIsIDEzIF0sCiAgICB9LAoKICAgICMgVGVzdCBmb3IgQ2hhbmdlQ0FCVXBkYXRlIGFuZCBDaGFuZ2VDQUJHZXQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBjaGVja3MgcmVtb3ZhbCBvZiBkdXBsaWNhdGUgQ0FCIG1lbWJlcnMgZm9yIENoYW5nZUNBQlVwZGF0ZScsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAnQ0FCVXBkYXRlIGFuZCBDQUJHZXQgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VDQUJVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgQ0FCQWdlbnRzID0+IFsKICAgICAgICAgICAgICAgICAgICAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBDQUJDdXN0b21lcnMgPT4gWwogICAgICAgICAgICAgICAgICAgICRDdXN0b21lclVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VySURzWzFdLAogICAgICAgICAgICAgICAgICAgICRDdXN0b21lclVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VySURzWzFdLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VDQUJHZXQgPT4gewogICAgICAgICAgICAgICAgQ0FCQWdlbnRzID0+IFsKICAgICAgICAgICAgICAgICAgICAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBDQUJDdXN0b21lcnMgPT4gWwogICAgICAgICAgICAgICAgICAgICRDdXN0b21lclVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEhpc3RvcnlHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlQWRkICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgQ2hhbmdlQ0FCVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VDQUJDdXN0b21lcnMgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICBbIHVuZGVmLCBqb2luICclJScsICRDdXN0b21lclVzZXJJRHNbMF0sICRDdXN0b21lclVzZXJJRHNbMV0gXQogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlQ0FCQWdlbnRzID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgWyB1bmRlZiwgam9pbiAnJSUnLCAkVXNlcklEc1swXSwgJFVzZXJJRHNbMV0gXQogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDYsIDgsIDksIDEwLCAyMiwgMjgsIDI5LCAzMywgMzQsIDM1IF0sCiAgICB9LAoKICAgICMgVGVzdCBmb3IgQ2hhbmdlQ0FCVXBkYXRlIGFuZCBDaGFuZ2VDQUJHZXQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBjaGVja3MgaW52YWxpZCBDQUJBZ2VudHMgcGFyYW0gZm9yIENoYW5nZUNBQlVwZGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ2hhbmdlQ0FCVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIENBQkFnZW50cyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZUNBQlVwZGF0ZUZhaWwgPT4gMSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VDQUJHZXQgPT4gewogICAgICAgICAgICAgICAgQ0FCQWdlbnRzICAgID0+IFtdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFtdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgVGVzdCBmb3IgQ2hhbmdlQ0FCVXBkYXRlIGFuZCBDaGFuZ2VDQUJHZXQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnUGFzc2luZyBhbiBpbnRlZ2VyIGFzIENBQkFnZW50cyB0byBDaGFuZ2VDQUJVcGRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZUNBQlVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBDQUJBZ2VudHMgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZUNBQlVwZGF0ZUZhaWwgPT4gMSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VDQUJHZXQgPT4gewogICAgICAgICAgICAgICAgQ0FCQWdlbnRzICAgID0+IFtdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFtdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgVGVzdCBmb3IgQ2hhbmdlQ0FCVXBkYXRlIGFuZCBDaGFuZ2VDQUJHZXQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnTmVpdGhlciBDQUJBZ2VudHMgbm9yIENBQkN1c3RvbWVycyBpcyBwYXNzZWQuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZUNBQlVwZGF0ZSA9PiB7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZUNBQlVwZGF0ZUZhaWwgPT4gMSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VDQUJHZXQgPT4gewogICAgICAgICAgICAgICAgQ0FCQWdlbnRzICAgID0+IFtdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFtdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgVGVzdCBmb3IgQ2hhbmdlQ0FCVXBkYXRlIGFuZCBDaGFuZ2VDQUJHZXQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBjaGVja3MgZGVha3RpdmF0ZWQgQ0FCQWdlbnRzIHBhcmFtIGZvciBDaGFuZ2VDQUJVcGRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZUNBQlVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBDQUJBZ2VudHMgPT4gWwogICAgICAgICAgICAgICAgICAgICRJbnZhbGlkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZUNBQlVwZGF0ZUZhaWwgPT4gMSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VDQUJHZXQgPT4gewogICAgICAgICAgICAgICAgQ0FCQWdlbnRzICAgID0+IFtdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFtdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgVGVzdCBmb3IgQ2hhbmdlQ0FCVXBkYXRlIGFuZCBDaGFuZ2VDQUJHZXQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBjaGVja3MgaW52YWxpZCBDQUJDdXN0b21lcnMgcGFyYW0gZm9yIENoYW5nZUNBQlVwZGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ2hhbmdlQ0FCVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIENBQkN1c3RvbWVycyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VDQUJVcGRhdGVGYWlsID0+IDEsCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlQ0FCR2V0ID0+IHsKICAgICAgICAgICAgICAgIENBQkFnZW50cyAgICA9PiBbXSwKICAgICAgICAgICAgICAgIENBQkN1c3RvbWVycyA9PiBbXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFRlc3QgZm9yIENoYW5nZUNBQlVwZGF0ZSBhbmQgQ2hhbmdlQ0FCR2V0CiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0EgdmFsaWQgQ0FCQ3VzdG9tZXIgaXMgcGFzc2VkIHRvIENoYW5nZUNBQlVwZGF0ZSwgbm8gQ0FCQWdlbnRzLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VDQUJVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VySURzWzBdLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VDQUJHZXQgPT4gewogICAgICAgICAgICAgICAgQ0FCQWdlbnRzICAgID0+IFtdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VySURzWzBdLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFRlc3QgZm9yIENoYW5nZUNBQlVwZGF0ZSBhbmQgQ2hhbmdlQ0FCR2V0CiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0EgdmFsaWQgQ0FCQWdlbnQgaXMgcGFzc2VkIHRvIENoYW5nZUNBQlVwZGF0ZSwgbm8gQ0FCQ3VzdG9tZXJzLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VDQUJVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgQ0FCQWdlbnRzID0+IFsKICAgICAgICAgICAgICAgICAgICAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlQ0FCR2V0ID0+IHsKICAgICAgICAgICAgICAgIENBQkFnZW50cyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFtdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgVGVzdCBmb3IgQ2hhbmdlQ0FCVXBkYXRlIGFuZCBDaGFuZ2VDQUJHZXQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBjaGVja3MgdmFsaWQgQ2hhbmdlQWRkIGFuZCBDaGFuZ2VDQUJVcGRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDQUJBZ2VudHMgPT4gWwogICAgICAgICAgICAgICAgICAgICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIENBQkN1c3RvbWVycyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZUNBQlVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBDQUJDdXN0b21lcnMgPT4gWwogICAgICAgICAgICAgICAgICAgICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIENBQkFnZW50cyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgJFVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgICRDdXN0b21lclVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUNBQkdldCA9PiB7CiAgICAgICAgICAgICAgICBDQUJBZ2VudHMgPT4gWwogICAgICAgICAgICAgICAgICAgICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgICRVc2VySURzWzFdLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIENBQkN1c3RvbWVycyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VySURzWzFdLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFRlc3QgZm9yIENoYW5nZUNBQkRlbGV0ZQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGNoZWNrcyBDaGFuZ2VDQUJEZWxldGUgd2l0aCB2YWxpZCBwYXJhbXMuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDQUJBZ2VudHMgPT4gWwogICAgICAgICAgICAgICAgICAgICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgICRVc2VySURzWzFdCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgICRDdXN0b21lclVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VDQUJEZWxldGUgPT4gMSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VDQUJHZXQgPT4gewogICAgICAgICAgICAgICAgQ0FCQWdlbnRzICAgID0+IFtdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFtdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgVGVzdCBmb3IgQ2hhbmdlQ0FCRGVsZXRlIC0gaW4gdGhlIGV4ZWN1dGlpb24gb2YgdGhlLCBubyBDaGFuZ2VJRCB3aWxsIGJlIGdpdmVuCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgY2hlY2tzIENoYW5nZUNBQkRlbGV0ZSB3aXRoIGludmFsaWQgcGFyYW1zLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAnQ0FCRGVsZXRlIChpbnZhbGlkIHBhcmFtcykgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgQ0FCQWdlbnRzICAgPT4gWwogICAgICAgICAgICAgICAgICAgICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgICRVc2VySURzWzFdCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFsKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgICRDdXN0b21lclVzZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VDQUJEZWxldGUgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUNBQkRlbGV0ZUZhaWwgPT4gMSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VDQUJHZXQgPT4gewogICAgICAgICAgICAgICAgQ0FCQWdlbnRzID0+IFsKICAgICAgICAgICAgICAgICAgICAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICAkVXNlcklEc1sxXQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIENBQkN1c3RvbWVycyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJEN1c3RvbWVyVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJVc2VySURzWzFdLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWyA2LCA4LCA5LCAxMCBdLAogICAgfSwKCiAgICAjIGFkZCBjaGFuZ2UgYW5kIHVwZGF0ZSBjaGFuZ2VzdGF0ZWlkCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3Qgc2V0dGluZyBuZXcgQ2hhbmdlU3RhdGVJRCBpbiBDaGFuZ2VVcGRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ2hhbmdlVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlTmFtZTJJRHtyZWplY3RlZH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlTmFtZTJJRHtyZWplY3RlZH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgMjksIDM1IF0sCiAgICB9LAoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwogICAgIyBDaGFuZ2VzIGZvciAnT3JkZXJCeScgc2VhcmNoIHRlc3RzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKCiAgICAjCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gIkNoYW5nZSBmb3IgJ09yZGVyQnknIHRlc3RzICgxKS4iLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJ09yZGVyQnlDaGFuZ2UgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRCA9PiAkQ2hhbmdlU3RhdGVOYW1lMklEe3N1Y2Nlc3NmdWx9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlTWFuYWdlcklEID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VBZGRDaGFuZ2VUaW1lID0+IHsKICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgPT4gJzIwMDktMTAtMDEgMDE6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VTdGF0ZU5hbWUySUR7c3VjY2Vzc2Z1bH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBMYWJlbCA9PiAnT3JkZXJCeVNlYXJjaFRlc3QnLCAgICAjIHRoaXMgY2hhbmdlIHdpbGwgYmUgdXNlZCBpbiBvcmRlciBieSBzZWFyY2ggdGVzdHMKICAgIH0sCgogICAgIwogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICJDaGFuZ2UgZm9yICdPcmRlckJ5JyB0ZXN0cyAoMikuIiwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdPcmRlckJ5Q2hhbmdlIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ2hhbmdlVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgICA9PiAkQ2hhbmdlU3RhdGVOYW1lMklEe3JlamVjdGVkfSwKICAgICAgICAgICAgICAgIENoYW5nZU1hbmFnZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VBZGRDaGFuZ2VUaW1lID0+IHsKICAgICAgICAgICAgICAgIENyZWF0ZVRpbWUgPT4gJzIwMDktMTAtMzAgMDE6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VVcGRhdGVDaGFuZ2VUaW1lID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgPT4gJzIwMDktMTAtMzAgMDE6MDA6MTUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VTdGF0ZU5hbWUySUR7cmVqZWN0ZWR9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgTGFiZWwgPT4gJ09yZGVyQnlTZWFyY2hUZXN0JywgICAgIyB0aGlzIGNoYW5nZSB3aWxsIGJlIHVzZWQgaW4gb3JkZXIgYnkgc2VhcmNoIHRlc3RzCiAgICB9LAoKICAgICMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiQ2hhbmdlIGZvciAnT3JkZXJCeScgdGVzdHMgKDMpLiIsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlTmFtZTJJRHtmYWlsZWR9LAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAnT3JkZXJCeUNoYW5nZSAtIFRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZVVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZU1hbmFnZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ2hhbmdlQWRkQ2hhbmdlVGltZSA9PiB7CiAgICAgICAgICAgICAgICBDcmVhdGVUaW1lID0+ICcyMDA5LTAxLTMwIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQ2hhbmdlVXBkYXRlQ2hhbmdlVGltZSA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaW1lID0+ICcyMDA5LTAxLTMwIDIzOjU5OjU5JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRCA9PiAkQ2hhbmdlU3RhdGVOYW1lMklEe2ZhaWxlZH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFs2XSwKICAgICAgICBMYWJlbCAgICAgID0+ICdPcmRlckJ5U2VhcmNoVGVzdCcsICAgICMgdGhpcyBjaGFuZ2Ugd2lsbCBiZSB1c2VkIGluIG9yZGVyIGJ5IHNlYXJjaCB0ZXN0cwogICAgfSwKCiAgICAjIENoYW5nZSBmb3IgUGVybWlzc2lvbiB0ZXN0cy4KICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiQ2hhbmdlIGZvciAnUGVybWlzc2lvbicgdGVzdHMuIiwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdQZXJtaXNzaW9uIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ1Blcm1pc3Npb24gLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VDQUJHZXQgPT4gewogICAgICAgICAgICAgICAgQ0FCQWdlbnRzID0+IFsKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBDQUJDdXN0b21lcnMgPT4gWwogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWzZdLAogICAgICAgIExhYmVsICAgICAgPT4gJ1Blcm1pc3Npb25UZXN0JywgICAgIyB0aGlzIGNoYW5nZSB3aWxsIGJlIHVzZWQgaW4gcGVybWlzc2lvbiB0ZXN0cwogICAgfSwKCiAgICAjIENoYW5nZSBmb3IgQ2hhbmdlUG9zc2libGVTdGF0ZXNHZXQgdGVzdHMuCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gIkNoYW5nZSBmb3IgJ0NoYW5nZVBvc3NpYmxlU3RhdGVzR2V0JyB0ZXN0cy4iLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ0NoYW5nZVBvc3NpYmxlU3RhdGVzR2V0IC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ0NoYW5nZVBvc3NpYmxlU3RhdGVzR2V0IC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWzZdLAogICAgICAgIExhYmVsICAgICAgPT4gJ1Bvc3NpYmxlU3RhdGVzVGVzdCcsICAgICMgY2hhbmdlIGZvciB0ZXN0aW5nIENoYW5nZVBvc3NpYmxlU3RhdGVzR2V0KCkKICAgIH0sCgogICAgIyBDaGFuZ2UgZm9yIGF0dGFjaG1lbnQgdGVzdHMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlIGZvciBhdHRhY2htZW50IHRlc3RzJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdBdHRhY2htZW50cyAtIFRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdBdHRhY2htZW50cyAtIFRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFs2XSwKICAgICAgICBMYWJlbCAgICAgID0+ICdBdHRhY2htZW50JywKICAgIH0sCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZXhlY3V0ZSB0aGUgZ2VuZXJhbCBjaGFuZ2UgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJVRlc3RlZENoYW5nZUlEOyAgICAgICAgICAgIyBjaGFuZ2UgaWRzIG9mIGNyZWF0ZWQgY2hhbmdlcwpteSAlQ2hhbmdlSURGb3JTZWFyY2hUZXN0OyAgICAjIGNoYW5nZSBpZHMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgZm91bmQgYnkgYSBzZWFyY2ggdGVzdApteSAlTGFiZWwyQ2hhbmdlSURzOyAgICAgICAgICAjIGNoYW5nZSBpZHMgdGhhdCBhcmUgdXNlZCBmb3Igc3BlY2lhbCB0ZXN0cwoKVEVTVDoKZm9yIG15ICRUZXN0IChAQ2hhbmdlVGVzdHMpIHsKCiAgICAjIGNoZWNrIFNvdXJjZURhdGEgYXR0cmlidXRlCiAgICBpZiAoICEkVGVzdC0+e1NvdXJjZURhdGF9IHx8IHJlZiAkVGVzdC0+e1NvdXJjZURhdGF9IG5lICdIQVNIJyApIHsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IE5vIFNvdXJjZURhdGEgZm91bmQgZm9yIHRoaXMgdGVzdCAodGVzdCBjYXNlOiAiCiAgICAgICAgICAgICAgICAuICggJFRlc3RDb3VudCAtICRUZXN0Q291bnRNaXNjICkgLiAiKS4iLAogICAgICAgICk7CgogICAgICAgIG5leHQgVEVTVDsKICAgIH0KCiAgICAjIHByaW50IHRlc3QgY2FzZSBkZXNjcmlwdGlvbgogICAgaWYgKCAkVGVzdC0+e0Rlc2NyaXB0aW9ufSApIHsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgMSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogJFRlc3QtPntEZXNjcmlwdGlvbn0gKHRlc3QgY2FzZTogIgogICAgICAgICAgICAgICAgLiAoICRUZXN0Q291bnQgLSAkVGVzdENvdW50TWlzYyApIC4gIikuIiwKICAgICAgICApOwogICAgfQoKICAgICMgZXh0cmFjdCB0ZXN0IGRhdGEKICAgIG15ICRTb3VyY2VEYXRhICAgID0gJFRlc3QtPntTb3VyY2VEYXRhfTsKICAgIG15ICRSZWZlcmVuY2VEYXRhID0gJFRlc3QtPntSZWZlcmVuY2VEYXRhfTsKCiAgICAjIHRoZSBjaGFuZ2UgaWQgd2lsbCBiZSB1c2VkIGZvciBzZXZlcmFsIGNhbGxzCiAgICBteSAkQ2hhbmdlSUQ7CgogICAgIyBhZGQgYSBuZXcgQ2hhbmdlCiAgICBpZiAoICRTb3VyY2VEYXRhLT57Q2hhbmdlQWRkfSApIHsKCiAgICAgICAgIyBhZGQgdGhlIGNoYW5nZQogICAgICAgICRDaGFuZ2VJRCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgJXsgJFNvdXJjZURhdGEtPntDaGFuZ2VBZGR9IH0KICAgICAgICApOwoKICAgICAgICAjIHJlbWVtYmVyIGN1cnJlbnQgQ2hhbmdlSUQKICAgICAgICBpZiAoJENoYW5nZUlEKSB7CgogICAgICAgICAgICAkVGVzdGVkQ2hhbmdlSUR7JENoYW5nZUlEfSA9IDE7CgogICAgICAgICAgICAjIHNhdmUgY2hhbmdlaWQgZm9yIHVzZSBpbiBzZWFyY2ggdGVzdHMKICAgICAgICAgICAgaWYgKCBleGlzdHMgJFRlc3QtPntTZWFyY2hUZXN0fSApIHsKICAgICAgICAgICAgICAgIG15IEBTZWFyY2hUZXN0cyA9IEB7ICRUZXN0LT57U2VhcmNoVGVzdH0gfTsKCiAgICAgICAgICAgICAgICBmb3IgbXkgJFNlYXJjaFRlc3ROciAoQFNlYXJjaFRlc3RzKSB7CiAgICAgICAgICAgICAgICAgICAgJENoYW5nZUlERm9yU2VhcmNoVGVzdHskU2VhcmNoVGVzdE5yfS0+eyRDaGFuZ2VJRH0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNhdmUgY2hhbmdlaWQgZm9yIHNwZWNpYWwgdGVzdHMKICAgICAgICAgICAgaWYgKCBleGlzdHMgJFRlc3QtPntMYWJlbH0gKSB7CiAgICAgICAgICAgICAgICAkTGFiZWwyQ2hhbmdlSURzeyAkVGVzdC0+e0xhYmVsfSB9IHx8PSBbXTsKICAgICAgICAgICAgICAgIHB1c2ggQHsgJExhYmVsMkNoYW5nZUlEc3sgJFRlc3QtPntMYWJlbH0gfSB9LCAkQ2hhbmdlSUQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hhbmdlIENyZWF0ZVRpbWUKICAgICAgICBpZiAoICRDaGFuZ2VJRCAmJiAkU291cmNlRGF0YS0+e0NoYW5nZUFkZENoYW5nZVRpbWV9ICkgewogICAgICAgICAgICBTZXRUaW1lcygKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgQ3JlYXRlVGltZSA9PiAkU291cmNlRGF0YS0+e0NoYW5nZUFkZENoYW5nZVRpbWV9LT57Q3JlYXRlVGltZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIFVzZXJJRCBpcyB0aGUgb25seSByZXF1aXJlZCBwYXJhbWV0ZXIKICAgICAgICBpZiAoICEkU291cmNlRGF0YS0+e0NoYW5nZUFkZH0tPntVc2VySUR9ICkgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDaGFuZ2VBZGQoKSAtIERvbid0IGFkZCBjaGFuZ2Ugd2l0aG91dCBnaXZlbiBVc2VySUQuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICggJFNvdXJjZURhdGEtPntDaGFuZ2VBZGR9LT57VXNlcklEfSApIHsKICAgICAgICAgICAgaWYgKCAkVGVzdC0+e0ZhaWxzfSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2hhbmdlQWRkKCkgLSBBZGQgY2hhbmdlIHNob3VsZCBmYWlsLiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENoYW5nZUFkZCgpIC0gQWRkIGNoYW5nZS4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gICAgIyBlbmQgaWYgJ0NoYW5nZUFkZCcKCiAgICBpZiAoIGV4aXN0cyAkU291cmNlRGF0YS0+e0NoYW5nZVVwZGF0ZX0gKSB7CgogICAgICAgICMgdXBkYXRlIHRoZSBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVXBkYXRlU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVVwZGF0ZSgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICAleyAkU291cmNlRGF0YS0+e0NoYW5nZVVwZGF0ZX0gfSwKICAgICAgICApOwoKICAgICAgICAjIGNoYW5nZSBDaGFuZ2VUaW1lCiAgICAgICAgaWYgKCAkQ2hhbmdlSUQgJiYgJFNvdXJjZURhdGEtPntDaGFuZ2VVcGRhdGVDaGFuZ2VUaW1lfSApIHsKICAgICAgICAgICAgU2V0VGltZXMoCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgIENoYW5nZVRpbWUgPT4gJFNvdXJjZURhdGEtPntDaGFuZ2VVcGRhdGVDaGFuZ2VUaW1lfS0+e0NoYW5nZVRpbWV9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKAogICAgICAgICAgICAkVGVzdC0+e0ZhaWxzfQogICAgICAgICAgICB8fCAkVGVzdC0+e1VwZGF0ZUZhaWxzfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkQ2hhbmdlVXBkYXRlU3VjY2VzcywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENoYW5nZVVwZGF0ZSgpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJENoYW5nZVVwZGF0ZVN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDaGFuZ2VVcGRhdGUoKSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfSAgICAjIGVuZCBpZiBDaGFuZ2VVcGRhdGUKCiAgICBpZiAoICRTb3VyY2VEYXRhLT57Q2hhbmdlQ0FCVXBkYXRlfSAmJiAkQ2hhbmdlSUQgKSB7CiAgICAgICAgbXkgJENBQlVwZGF0ZVN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VDQUJVcGRhdGUoCiAgICAgICAgICAgICV7ICRTb3VyY2VEYXRhLT57Q2hhbmdlQ0FCVXBkYXRlfSB9LAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkU291cmNlRGF0YS0+e0NoYW5nZUNBQlVwZGF0ZUZhaWx9ICkgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkQ0FCVXBkYXRlU3VjY2VzcywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIENoYW5nZUNBQlVwZGF0ZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRDQUJVcGRhdGVTdWNjZXNzLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gQ2hhbmdlQ0FCVXBkYXRlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9ICAgICMgZW5kIGlmICdDaGFuZ2VDQUJVcGRhdGUnCgogICAgaWYgKCAkU291cmNlRGF0YS0+e0NoYW5nZUNBQkRlbGV0ZX0gJiYgJENoYW5nZUlEICkgewogICAgICAgIG15ICVDQUJEZWxldGVQYXJhbXMgPSAoCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICApOwoKICAgICAgICAjIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGZhaWwgdGVzdHMKICAgICAgICBpZiAoICRTb3VyY2VEYXRhLT57Q2hhbmdlQ0FCRGVsZXRlRmFpbH0gKSB7CgogICAgICAgICAgICAjIHRlc3Qgdm9pZCBjb250ZXh0CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRDaGFuZ2VPYmplY3QtPkNoYW5nZUNBQkRlbGV0ZSgpIHx8IDAsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBDaGFuZ2VDQUJEZWxldGUiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgQERlbGV0ZVRlc3RzID0gKAogICAgICAgICAgICAgICAgeyBVc2VySUQgICA9PiAxIH0sCiAgICAgICAgICAgICAgICB7IENoYW5nZUlEID0+ICRDaGFuZ2VJRCB9LAogICAgICAgICAgICApOwogICAgICAgICAgICBmb3IgbXkgJEZhaWxUZXN0IChARGVsZXRlVGVzdHMpIHsKICAgICAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VDQUJEZWxldGUoICV7JEZhaWxUZXN0fSApIHx8IDAsCiAgICAgICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gQ2hhbmdlQ0FCRGVsZXRlIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIERlbGV0ZSB3aXRoIGFsbCBwYXJhbXMKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VDQUJEZWxldGUoJUNBQkRlbGV0ZVBhcmFtcyksCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBDaGFuZ2VDQUJEZWxldGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0gICAgIyBlbmQgaWYgJ0NoYW5nZUNBQkRlbGV0ZScKCiAgICAjIGFkZCBhIHdvcmtvcmRlcgogICAgaWYgKCAkU291cmNlRGF0YS0+e1dvcmtPcmRlckFkZH0gKSB7CiAgICAgICAgbXkgJFdvcmtPcmRlcklEID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQWRkKAogICAgICAgICAgICAleyAkU291cmNlRGF0YS0+e1dvcmtPcmRlckFkZH0gfSwKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkV29ya09yZGVySUQsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIFdvcmtPcmRlckFkZCIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBhIGNoYW5nZSBhbmQgY29tcGFyZSB0aGUgcmV0cmlldmVkIGRhdGEgd2l0aCB0aGUgcmVmZXJlbmNlCiAgICBpZiAoIGV4aXN0cyAkUmVmZXJlbmNlRGF0YS0+e0NoYW5nZUdldH0gKSB7CgogICAgICAgIG15ICRDaGFuZ2VHZXRSZWZlcmVuY2VEYXRhID0gJFJlZmVyZW5jZURhdGEtPntDaGFuZ2VHZXR9OwoKICAgICAgICBteSAkQ2hhbmdlRGF0YSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUdldCgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgQ2hhbmdlR2V0IHNob3VsZCBub3QgcmV0dXJuIGFueXRoaW5nCiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUmVmZXJlbmNlRGF0YS0+e0NoYW5nZUdldH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRDaGFuZ2VEYXRhLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gR2V0IGNoYW5nZSByZXR1cm5zIHVuZGVmLiIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIGlmIHdlIGV4Y3BlY3RlZCB0byBmYWlsCiAgICAgICAgICAgIGlmICggJFRlc3QtPntGYWlsc30gKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgIWRlZmluZWQgJENoYW5nZURhdGEsCiAgICAgICAgICAgICAgICAgICAgIWRlZmluZWQgJFJlZmVyZW5jZURhdGEtPntDaGFuZ2VEYXRhfSwKICAgICAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBTaG91bGQgZmFpbC4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBuZXh0IFRFU1Q7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGZvciBhbHdheXMgZXhpc3RpbmcgYXR0cmlidXRlcwogICAgICAgIGZvciBteSAkQ2hhbmdlQXR0cmlidXRlcyAocXcoQ2hhbmdlSUQgQ2hhbmdlTnVtYmVyIENoYW5nZUJ1aWxkZXJJRCBDcmVhdGVUaW1lIENoYW5nZVRpbWUpKSB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJENoYW5nZURhdGEtPnskQ2hhbmdlQXR0cmlidXRlc30sCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBoYXMgJENoYW5nZUF0dHJpYnV0ZXMuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGZvciBteSAkUmVxdWVzdGVkQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRSZWZlcmVuY2VEYXRhLT57Q2hhbmdlR2V0fSB9ICkgewoKICAgICAgICAgICAgIyB0dXJuIG9mZiBhbGwgcHJldHR5IHByaW50CiAgICAgICAgICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OkluZGVudCA9IDA7CiAgICAgICAgICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OlVzZXFxICA9IDE7CgogICAgICAgICAgICAjIGR1bXAgdGhlIGF0dHJpYnV0ZSBmcm9tIENoYW5nZUdldCgpIGFuZCB0aGUgcmVmZXJlbmNlIGF0dHJpYnV0ZQogICAgICAgICAgICAjIyBubyBjcml0aWMKICAgICAgICAgICAgbXkgJENoYW5nZUF0dHJpYnV0ZSAgICA9IERhdGE6OkR1bXBlcjo6RHVtcGVyKCAkQ2hhbmdlRGF0YS0+eyRSZXF1ZXN0ZWRBdHRyaWJ1dGV9ICk7CiAgICAgICAgICAgIG15ICRSZWZlcmVuY2VBdHRyaWJ1dGUgPSBEYXRhOjpEdW1wZXI6OkR1bXBlciggJFJlZmVyZW5jZURhdGEtPntDaGFuZ2VHZXR9LT57JFJlcXVlc3RlZEF0dHJpYnV0ZX0gKTsKICAgICAgICAgICAgIyMgdXNlIGNyaXRpYwoKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJENoYW5nZUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICRSZWZlcmVuY2VBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSAkUmVxdWVzdGVkQXR0cmlidXRlIChDaGFuZ2VJRDogJENoYW5nZUlEKSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfSAgICAjIGVuZCBpZiAnQ2hhbmdlR2V0JwoKICAgIGlmICggJFJlZmVyZW5jZURhdGEtPntDaGFuZ2VDQUJHZXR9ICkgewogICAgICAgIG15ICRDQUJEYXRhID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQ0FCR2V0KAogICAgICAgICAgICAleyAkUmVmZXJlbmNlRGF0YS0+e0NoYW5nZUNBQkdldH0gfSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICk7CgogICAgICAgIGZvciBteSAkUmVxdWVzdGVkQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRSZWZlcmVuY2VEYXRhLT57Q2hhbmdlQ0FCR2V0fSB9ICkgewoKICAgICAgICAgICAgIyB0dXJuIG9mZiBhbGwgcHJldHR5IHByaW50CiAgICAgICAgICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OkluZGVudCA9IDA7CiAgICAgICAgICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OlVzZXFxICA9IDE7CgogICAgICAgICAgICAjIGR1bXAgdGhlIGF0dHJpYnV0ZSBmcm9tIENoYW5nZUdldCgpIGFuZCB0aGUgcmVmZXJlbmNlIGF0dHJpYnV0ZQogICAgICAgICAgICAjIyBubyBjcml0aWMKICAgICAgICAgICAgbXkgJENoYW5nZUF0dHJpYnV0ZSAgICA9IERhdGE6OkR1bXBlcjo6RHVtcGVyKCAkQ0FCRGF0YS0+eyRSZXF1ZXN0ZWRBdHRyaWJ1dGV9ICk7CiAgICAgICAgICAgIG15ICRSZWZlcmVuY2VBdHRyaWJ1dGUgPSBEYXRhOjpEdW1wZXI6OkR1bXBlciggJFJlZmVyZW5jZURhdGEtPntDaGFuZ2VDQUJHZXR9LT57JFJlcXVlc3RlZEF0dHJpYnV0ZX0gKTsKICAgICAgICAgICAgIyMgdXNlIGNyaXRpYwoKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJENoYW5nZUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICRSZWZlcmVuY2VBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBDaGFuZ2VDQUJHZXQgKCAkUmVxdWVzdGVkQXR0cmlidXRlICkiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0gICAgIyBlbmQgaWYgJ0NoYW5nZUNBQkdldCcKCiAgICAjIHRlc3QgaGlzdG9yeSBlbnRyaWVzCiAgICBpZiAoICRSZWZlcmVuY2VEYXRhLT57SGlzdG9yeUdldH0gKSB7CgogICAgICAgICMgZ2V0IHN1YnRyZWUKICAgICAgICBteSAkQ2hlY2tEYXRhID0gJFJlZmVyZW5jZURhdGEtPntIaXN0b3J5R2V0fTsKCiAgICAgICAgIyBnZXQgYWxsIGhpc3RvcnkgZW50cmllcwogICAgICAgIG15ICRIaXN0b3J5RW50cmllcyA9ICRIaXN0b3J5T2JqZWN0LT5DaGFuZ2VIaXN0b3J5R2V0KAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJUhpc3RvcnlUeXBlMkNoZWNrSW5kZXg7CgogICAgICAgICMgY2hlY2sgaGlzdG9yeSBlbnRyaWVzCiAgICAgICAgSElTVE9SWUVOVFJZOgogICAgICAgIGZvciBteSAkSGlzdG9yeUVudHJ5ICggQHskSGlzdG9yeUVudHJpZXN9ICkgewogICAgICAgICAgICBteSAkSGlzdG9yeVR5cGUgPSAkSGlzdG9yeUVudHJ5LT57SGlzdG9yeVR5cGV9OwogICAgICAgICAgICBteSAkRGF0YUZvclR5cGUgPSAkQ2hlY2tEYXRhLT57JEhpc3RvcnlUeXBlfTsKCiAgICAgICAgICAgIGlmICggJEhpc3RvcnlUeXBlIGVxICdDaGFuZ2VBZGQnICkgewogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRIaXN0b3J5RW50cnktPntDb250ZW50TmV3fSwKICAgICAgICAgICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gQ2hlY2sgQ2hhbmdlQWRkIGhpc3RvcnkgZW50cnkgIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkSGlzdG9yeVR5cGUgZXEgJ0NoYW5nZVVwZGF0ZScgfHwgJEhpc3RvcnlUeXBlIGVxICdDaGFuZ2VDQUJVcGRhdGUnICkgewoKICAgICAgICAgICAgICAgIG15ICRJbmRleCAgICAgPSAkSGlzdG9yeVR5cGUyQ2hlY2tJbmRleHskSGlzdG9yeVR5cGV9Kys7CiAgICAgICAgICAgICAgICBteSAkRmllbGRuYW1lID0gJEhpc3RvcnlFbnRyeS0+e0ZpZWxkbmFtZX07CgogICAgICAgICAgICAgICAgbmV4dCBISVNUT1JZRU5UUlkgaWYgISREYXRhRm9yVHlwZS0+eyRGaWVsZG5hbWV9OwoKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkSGlzdG9yeUVudHJ5LT57Q29udGVudE9sZH0sCiAgICAgICAgICAgICAgICAgICAgJERhdGFGb3JUeXBlLT57JEZpZWxkbmFtZX0tPlskSW5kZXhdLT5bMF0sCiAgICAgICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gQ2hlY2sgQ2hhbmdlVXBkYXRlIC0+IENvbnRlbnRPbGQgIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRIaXN0b3J5RW50cnktPntDb250ZW50TmV3fSwKICAgICAgICAgICAgICAgICAgICAkRGF0YUZvclR5cGUtPnskRmllbGRuYW1lfS0+WyRJbmRleF0tPlsxXSwKICAgICAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBDaGVjayBDaGFuZ2VVcGRhdGUgLT4gQ29udGVudE5ldyBmb3IgJEZpZWxkbmFtZSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgojIGdldCBleGVjdXRlZCBlYWNoIGxvb3AsIGV2ZW4gb24gbmV4dApjb250aW51ZSB7CiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyB0ZXN0IGZvciBzcGVjaWFsIENoYW5nZVNlYXJjaCAod2l0aCBvcmRlciBieSBDaGFuZ2VOdW1iZXIpCiMgYnVnIyA1ODI1IGh0dHA6Ly9idWdzLm90cnMub3JnL3Nob3dfYnVnLmNnaT9pZD01ODI1CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKewoKICAgICMgYWRkIGEgbmV3IGNoYW5nZSB3aXRoIENBQkN1c3RvbWVyICRDdXN0b21lclVzZXJJRHNbMl0KICAgIG15ICRDaGFuZ2VJRCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICBDaGFuZ2VUaXRsZSAgICAgPT4gJ0FCQycsCiAgICAgICAgRGVzY3JpcHRpb24gICAgID0+ICdERUYnLAogICAgICAgIEp1c3RpZmljYXRpb24gICA9PiAnWFlaJywKICAgICAgICBDaGFuZ2VNYW5hZ2VySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgQ2hhbmdlQnVpbGRlcklEID0+ICRVc2VySURzWzBdLAogICAgICAgIENBQkN1c3RvbWVycyAgICA9PiBbCiAgICAgICAgICAgICRDdXN0b21lclVzZXJJRHNbMl0sCiAgICAgICAgXSwKICAgICAgICBVc2VySUQgPT4gJFVzZXJJRHNbMV0sCiAgICApOwoKICAgICMgdGVzdCBpZiBjaGFuZ2Ugd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseQogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJENoYW5nZUlELAogICAgICAgICJUZXN0ICIKICAgICAgICAgICAgLiAkVGVzdENvdW50KysKICAgICAgICAgICAgLiAnIC0gYWRkaW5nIG9mIGNoYW5nZSBmb3Igc3BlY2lhbCBzZWFyY2ggdGVzdCAod2l0aCBvcmRlciBieSBDaGFuZ2VOdW1iZXIpJywKICAgICk7CgogICAgIyBzZWFyY2ggZm9yIHRoZSBjaGFuZ2UgaWRzCiAgICBteSAkQ2hhbmdlSURzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgIENBQkN1c3RvbWVycyAgICAgPT4gWyAkQ3VzdG9tZXJVc2VySURzWzJdIF0sCiAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbJ1VwJ10sCiAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBbJ0NoYW5nZU51bWJlciddLAogICAgICAgIExpbWl0ICAgICAgICAgICAgPT4gMTAwMCwKICAgICAgICBDaGFuZ2VTdGF0ZXMgICAgID0+IFsKICAgICAgICAgICAgJ3JlcXVlc3RlZCcsCiAgICAgICAgICAgICdwZW5kaW5nIGFwcHJvdmFsJywKICAgICAgICAgICAgJ2FwcHJvdmVkJywKICAgICAgICAgICAgJ2luIHByb2dyZXNzJywKICAgICAgICAgICAgJ3BlbmRpbmcgcGlyJwogICAgICAgIF0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgaWYgc2VhcmNoIHJldHVybmVkIGEgcmVzdWx0CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQ2hhbmdlSURzICYmIHJlZiAkQ2hhbmdlSURzIGVxICdBUlJBWScgJiYgQHskQ2hhbmdlSURzfSwKICAgICAgICAiVGVzdCAiCiAgICAgICAgICAgIC4gJFRlc3RDb3VudCsrCiAgICAgICAgICAgIC4gJyAtIHNlYXJjaCBmb3IgQ0FCQ3VzdG9tZXJzLCBzcGVjaWFsIHNlYXJjaCB0ZXN0ICh3aXRoIG9yZGVyIGJ5IENoYW5nZU51bWJlciknLAogICAgKTsKCiAgICAjIGNoZWNrIGlmIGNoYW5nZSB3YXMgZm91bmQKICAgICRTZWxmLT5JcygKICAgICAgICAkQ2hhbmdlSURzLT5bMF0sCiAgICAgICAgJENoYW5nZUlELAogICAgICAgICdUZXN0ICcKICAgICAgICAgICAgLiAkVGVzdENvdW50KysKICAgICAgICAgICAgLiAnIC0gc2VhcmNoIGZvciBDQUJDdXN0b21lcnMsIHNwZWNpYWwgc2VhcmNoIHRlc3QgKHdpdGggb3JkZXIgYnkgQ2hhbmdlTnVtYmVyKSAnLAogICAgKTsKCiAgICAjIGRlbGV0ZSB0aGUgQ2hhbmdlCiAgICBteSAkRGVsZXRlU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CgogICAgIyBjaGVjayBmb3Igc3VjY2Vzc2Z1bCBkZWxldGluZwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJERlbGV0ZVN1Y2Nlc3MsCiAgICAgICAgIlRlc3QgIgogICAgICAgICAgICAuICRUZXN0Q291bnQrKwogICAgICAgICAgICAuICcgLSBkZWxldGluZyBvZiBDaGFuZ2VJRCAnCiAgICAgICAgICAgIC4gJENoYW5nZUlECiAgICAgICAgICAgIC4gJyBmb3Igc3BlY2lhbCBzZWFyY2ggdGVzdCAod2l0aCBvcmRlciBieSBDaGFuZ2VOdW1iZXIpJywKICAgICk7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyB0ZXN0IGZvciBDaGFuZ2VMb29rdXAKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgKCRDaGFuZ2VMb29rdXBUZXN0Q2hhbmdlSUQpID0gQHsgJExhYmVsMkNoYW5nZUlEc3tDaGFuZ2VMb29rdXBUZXN0fSB8fCBbXSB9OwoKaWYgKCRDaGFuZ2VMb29rdXBUZXN0Q2hhbmdlSUQpIHsKICAgIG15ICRDaGFuZ2VEYXRhID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VMb29rdXBUZXN0Q2hhbmdlSUQsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CgogICAgbXkgJENoYW5nZUlEID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlTG9va3VwKAogICAgICAgIENoYW5nZU51bWJlciA9PiAkQ2hhbmdlRGF0YS0+e0NoYW5nZU51bWJlcn0sCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgJENoYW5nZURhdGEtPntDaGFuZ2VJRH0sCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICc6IENoYW5nZUxvb2t1cCB3aXRoIENoYW5nZU51bWJlciAnCiAgICAgICAgICAgIC4gJENoYW5nZURhdGEtPntDaGFuZ2VOdW1iZXJ9IC4gJyBzdWNjZXNzZnVsLicsCiAgICApOwoKICAgIG15ICRDaGFuZ2VOdW1iZXIgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VMb29rdXAoCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUxvb2t1cFRlc3RDaGFuZ2VJRCwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRDaGFuZ2VOdW1iZXIsCiAgICAgICAgJENoYW5nZURhdGEtPntDaGFuZ2VOdW1iZXJ9LAogICAgICAgICdUZXN0ICcKICAgICAgICAgICAgLiAkVGVzdENvdW50KysKICAgICAgICAgICAgLiAiOiBDaGFuZ2VMb29rdXAgd2l0aCBDaGFuZ2VJRCAkQ2hhbmdlTG9va3VwVGVzdENoYW5nZUlEIHN1Y2Nlc3NmdWwuIiwKICAgICk7CgogICAgIyBub3cgc29tZSBwYXJhbSBjaGVja3MgZm9yIENoYW5nZUxvb2t1cCgpCiAgICBteSAkTG9va3VwT2sgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VMb29rdXAoIFVzZXJJRCA9PiAxICk7CgogICAgJFNlbGYtPkZhbHNlKAogICAgICAgICRMb29rdXBPaywKICAgICAgICAnT25seSBhbiB1bnVzZWQgcGFyYW0gcGFzc2VkIHRvIENoYW5nZUxvb2t1cCgpJywKICAgICk7CgogICAgJExvb2t1cE9rID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlTG9va3VwKCk7CgogICAgJFNlbGYtPkZhbHNlKAogICAgICAgICRMb29rdXBPaywKICAgICAgICAnTm8gcGFyYW0gcGFzc2VkIHRvIENoYW5nZUxvb2t1cCgpJywKICAgICk7CgogICAgJExvb2t1cE9rID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlTG9va3VwKAogICAgICAgIENoYW5nZUlEICAgICA9PiAkQ2hhbmdlTG9va3VwVGVzdENoYW5nZUlELAogICAgICAgIENoYW5nZU51bWJlciA9PiAkQ2hhbmdlRGF0YS0+e0NoYW5nZU51bWJlcn0sCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAkTG9va3VwT2ssCiAgICAgICAgJ0V4Y2x1c2l2ZSBwYXJhbXMgcGFzc2VkIHRvIENoYW5nZUxvb2t1cCgpJywKICAgICk7Cn0KCiMgdGVzdCBpZiBDaGFuZ2VMaXN0IHJldHVybnMgYXQgbGVhc3QgYXMgbWFueSBjaGFuZ2VzIGFzIHdlIGNyZWF0ZWQKIyB3ZSBjYW5ub3QgdGVzdCBmb3IgYSBzcGVjaWZpYyBudW1iZXIgYXMgdGhlc2UgdGVzdHMgY2FuIGJlIHJ1biBpbiBleGlzdGluZyBlbnZpcm9ubWVudHMKIyB3aGVyZSBvdGhlciBjaGFuZ2VzIGFscmVhZHkgZXhpc3QKbXkgJENoYW5nZUxpc3QgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VMaXN0KCBVc2VySUQgPT4gMSApIHx8IFtdOwpteSAlQ2hhbmdlTGlzdE1hcCA9IG1hcCB7ICRfID0+IDEgfSBAeyRDaGFuZ2VMaXN0fTsKCiMgY2hlY2sgd2hldGhlciB0aGUgY3JlYXRlZCBjaGFuZ2VzIHdlcmUgZm91bmQgYnkgQ2hhbmdlTGlzdCgpCmZvciBteSAkS2V5VGVzdGVkQ2hhbmdlSUQgKCBzb3J0IGtleXMgJVRlc3RlZENoYW5nZUlEICkgewogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJENoYW5nZUxpc3RNYXB7JEtleVRlc3RlZENoYW5nZUlEfSwKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIjogQ2hhbmdlTGlzdCgpIC0gQ2hhbmdlSUQgJEtleVRlc3RlZENoYW5nZUlEIGluIGxpc3QuIiwKICAgICk7Cn0KCiMgY291bnQgYWxsIHRlc3RzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGFuZCBwbGFubmVkIGZvciBmYWlsCm15ICRGYWlscyA9IHNjYWxhciBncmVwIHsgJF8tPntGYWlsc30gfSBAQ2hhbmdlVGVzdHM7Cm15ICROckNyZWF0ZUNoYW5nZXMgPSAoIHNjYWxhciBAQ2hhbmdlVGVzdHMgKSAtICRGYWlsczsKCiMgdGVzdCBpZiB0aGUgY2hhbmdlcyB3ZXJlIGNyZWF0ZWQKJFNlbGYtPklzKAogICAgc2NhbGFyIGtleXMgJVRlc3RlZENoYW5nZUlEIHx8IDAsCiAgICAkTnJDcmVhdGVDaGFuZ2VzLAogICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICc6IGFtb3VudCBvZiBjaGFuZ2Ugb2JqZWN0cyBhbmQgdGVzdCBjYXNlcy4nLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGRlZmluZSBnZW5lcmFsIGNoYW5nZSBzZWFyY2ggdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwpteSAkU3lzdGVtVGltZSA9ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lKCk7CgpteSBAQ2hhbmdlU2VhcmNoVGVzdHMgPSAoCgogICAgIyBOciAxIC0gYSBzaW1wbGUgY2hlY2sgaWYgdGhlIHNlYXJjaCBmdW5jdGlvbnMgdGFrZXMgY2FyZSBvZiAiTGltaXQiCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0xpbWl0JywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIExpbWl0ID0+IDMsICAgICMgZXhwZWN0IG9ubHkgMyByZXN1bHRzCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdENvdW50ID0+IDEsICAgICMgZmxhZyBmb3IgY2hlY2sgcmVzdWx0IGFtb3VudAogICAgICAgICAgICBDb3VudCAgICAgPT4gMywgICAgIyBjaGVjayBvbiAzIHJlc3VsdHMKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDIgLSBzZWFyY2ggZm9yIGFsbCBjaGFuZ2VzIGNyZWF0ZWQgYnkgb3VyIGZpcnN0IHVzZXIKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlVGl0bGUsIEp1c3RpZmljYXRpb24nLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAnQ2hhbmdlIDEgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICdDaGFuZ2UgMSAtIEp1c3RpZmljYXRpb24gLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAzIC0gdGVzdCBjcmVhdGV0aW1lbmV3ZXJkYXRlCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NyZWF0ZVRpbWVOZXdlckRhdGUnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTeXN0ZW1UaW1lIC0gKCA2MCAqIDYwICksCiAgICAgICAgICAgICksCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgNCAtIHRlc3QgY3JlYXRldGltZW9sZGVyZGF0ZQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdDcmVhdGVUaW1lT2xkZXJEYXRlJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENyZWF0ZVRpbWVPbGRlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU3lzdGVtVGltZSArICggNjAgKiA2MCApLAogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDUgLSB0ZXN0IENoYW5nZU1hbmFnZXJJRAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdDaGFuZ2VNYW5hZ2VySUQnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlTWFuYWdlcklEcyA9PiBbICRVc2VySURzWzBdIF0sCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgNiAtIHRlc3QgQ2hhbmdlQnVpbGRlcklEIGFuZCBDaGFuZ2VUaXRsZSB3aXRoIHdpbGRjYXJkCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZUJ1aWxkZXJJRCcsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VCdWlsZGVySURzID0+IFsgJFVzZXJJRHNbMF0gXSwKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgICA9PiAnJScgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgNyAtIHRlc3QgQ2hhbmdlTWFuYWdlcklEIGFuZCBDaGFuZ2VCdWlsZGVySUQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlQnVpbGRlcklELCBDaGFuZ2VNYW5hZ2VySUQnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQnVpbGRlcklEcyA9PiBbICRVc2VySURzWzBdIF0sCiAgICAgICAgICAgIENoYW5nZU1hbmFnZXJJRHMgPT4gWyAkSW52YWxpZFVzZXJJRHNbMF0gXSwKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgICA9PiAnJScgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RDb3VudCA9PiAxLAogICAgICAgICAgICBDb3VudCAgICAgPT4gMCwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDggLSB0ZXN0IENBQkFnZW50CiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NBQkFnZW50JywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENBQkFnZW50cyAgID0+IFsgJFVzZXJJRHNbMF0gXSwKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJyUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDkgLSB0ZXN0IENBQkN1c3RvbWVyCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NBQkN1c3RvbWVyJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENBQkN1c3RvbWVycyA9PiBbICRDdXN0b21lclVzZXJJRHNbMF0gXSwKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgID0+ICclJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdENvdW50ICAgICA9PiAxLAogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAxMCAtIHRlc3QgQ0FCQWdlbnQgYW5kIENBQkN1c3RvbWVyCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NBQkFnZW50LCBDQUJDdXN0b21lcicsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDQUJBZ2VudHMgICAgPT4gWyAkVXNlcklEc1swXSBdLAogICAgICAgICAgICBDQUJDdXN0b21lcnMgPT4gWyAkQ3VzdG9tZXJVc2VySURzWzFdIF0sCiAgICAgICAgICAgIENoYW5nZVRpdGxlICA9PiAnJScgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgMTEgLSB0ZXN0IEp1c3RpZmljYXRpb24KICAgICMgVG9Bc2NpaSgpIGFkZHMgYW4gZXh0cmEgbmV3bGluZQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdKdXN0aWZpY2F0aW9uJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ0pKJyAuICclJyAuICJcbiIsCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgMTIgLSB0ZXN0IGNoYW5nZXRpbWVuZXdlcmRhdGUKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlVGltZU5ld2VyRGF0ZScsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VUaW1lTmV3ZXJEYXRlID0+ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCgKICAgICAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUgLSAoIDYwICogNjAgKSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAxMyAtIHRlc3QgY2hhbmdldGltZW9sZGVyZGF0ZQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdDaGFuZ2VUaW1lT2xkZXJEYXRlJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVRpbWVPbGRlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU3lzdGVtVGltZSArICggNjAgKiA2MCApLAogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDE0IC0gQ2hhbmdlVGl0bGUgd2l0aCB3aWxkY2FyZAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdDaGFuZ2VUaXRsZSB3aXRoIHdpbGRjYXJkJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICggJ1QnIHggMjUwICkgLiAnJScsCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgMTUgLSBEZXNjcmlwdGlvbiB3aXRoIHdpbGRjYXJkCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0Rlc2NyaXB0aW9uIHdpdGggd2lsZGNhcmQnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gKCAnRCcgeCAyNTAgKSAuICclJywKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAxNiAtIEp1c3RpZmljYXRpb24gd2l0aCB3aWxkY2FyZAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdKdXN0aWZpY2F0aW9uIHdpdGggd2lsZGNhcmQnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAoICdKJyB4IDI1MCApIC4gJyUnLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDE3IC0gQ2hhbmdlVGl0bGUsIERlc2NyaXB0aW9uLCBKdXN0aWZpY2F0aW9uIHdpdGggd2lsZGNhcmQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlVGl0bGUsIERlc2NyaXB0aW9uLCBKdXN0aWZpY2F0aW9uIHdpdGggd2lsZGNhcmQnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAoICdUJyB4IDI1MCApIC4gJyUnLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICggJ0QnIHggMjUwICkgLiAnJScsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gKCAnSicgeCAyNTAgKSAuICclJywKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAxOCAtIENoYW5nZVRpdGxlIHdpdGggJzAnCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gIkNoYW5nZVRpdGxlIHdpdGggJzAnIiwKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICcwJywKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAxOSAtIERlc2NyaXB0aW9uIHdpdGggJzAnCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gIkRlc2NyaXB0aW9uIHdpdGggJzAnIiwKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICcwJywKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAyMCAtIEp1c3RpZmljYXRpb24gd2l0aCAnMCcKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAiSnVzdGlmaWNhdGlvbiB3aXRoICcwJyIsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICcwJywKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAyMSAtIENoYW5nZVRpdGxlLCBEZXNjcmlwdGlvbiwgSnVzdGlmaWNhdGlvbiB3aXRoICcwJwogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICJDaGFuZ2VUaXRsZSwgRGVzY3JpcHRpb24sIEp1c3RpZmljYXRpb24gd2l0aCAnMCciLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAnMCcsCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJzAnLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICcwJywKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAyMiAtIENoYW5nZVN0YXRlSUQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlU3RhdGVJRCcsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEcyA9PiBbICRDaGFuZ2VTdGF0ZU5hbWUySUR7cmVxdWVzdGVkfSBdLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDIzIC0gQ2hhbmdlQnVpbGRlcklECiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZUJ1aWxkZXJJRCAodHdvIGJ1aWxkZXJzKScsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VCdWlsZGVySURzID0+IFsgJFVzZXJJRHNbMF0sICRVc2VySURzWzFdIF0sCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgMjQgLSBDaGFuZ2VNYW5hZ2VySUQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlTWFuYWdlcklEICh0d28gbWFuYWdlciknLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlTWFuYWdlcklEcyA9PiBbICRVc2VySURzWzBdLCAkVXNlcklEc1sxXSBdLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDI1IC0gQ3JlYXRlQnkKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ3JlYXRlQnkgKHR3byBjcmVhdG9ycyknLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gWyAxLCAkVXNlcklEc1swXSBdLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDI2IC0gQ2hhbmdlQnkKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlQnkgKHR3byBjcmVhdG9ycyknLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gWyAxLCAkVXNlcklEc1swXSBdLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDI3IC0gdGVzdCBjaGFuZ2V0aW1lbmV3ZXJkYXRlIGFuZCBjaGFuZ2V0aW1lb2xkZXJkYXRlCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZVRpbWVOZXdlckRhdGUsIENoYW5nZVRpbWVPbGRlckRhdGUnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlVGltZU5ld2VyRGF0ZSA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTeXN0ZW1UaW1lIC0gKCA2MCAqIDYwICksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIENoYW5nZVRpbWVPbGRlckRhdGUgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU3lzdGVtVGltZSArICggNjAgKiA2MCApLAogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDI4IC0gQ2hhbmdlU3RhdGVJRCAoc2FtZSBJRCB0aHJlZSB0aW1lcykKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlU3RhdGVJRCAoc2FtZSBJRCB0aHJlZSB0aW1lcyknLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRHMgPT4gWwogICAgICAgICAgICAgICAgJENoYW5nZVN0YXRlTmFtZTJJRHtyZXF1ZXN0ZWR9LAogICAgICAgICAgICAgICAgJENoYW5nZVN0YXRlTmFtZTJJRHtyZXF1ZXN0ZWR9LAogICAgICAgICAgICAgICAgJENoYW5nZVN0YXRlTmFtZTJJRHtyZXF1ZXN0ZWR9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDI5IC0gQ2hhbmdlU3RhdGVJRCAodGhyZWUgZGlmZmVyZW50IElEcykKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlU3RhdGVJRCAodGhyZWUgZGlmZmVyZW50IElEcyknLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRHMgPT4gWwogICAgICAgICAgICAgICAgJENoYW5nZVN0YXRlTmFtZTJJRHtyZXF1ZXN0ZWR9LAogICAgICAgICAgICAgICAgJENoYW5nZVN0YXRlTmFtZTJJRHthcHByb3ZlZH0sCiAgICAgICAgICAgICAgICAkQ2hhbmdlU3RhdGVOYW1lMklEe3JlamVjdGVkfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAzMCAtIFVzaW5nV2lsZGNhcmRzID0+IDAsIENoYW5nZVRpdGxlCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1VzaW5nV2lsZGNhcmRzID0+IDAsIENoYW5nZVRpdGxlJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIFVzaW5nV2lsZGNhcmRzID0+IDAsCiAgICAgICAgICAgIENoYW5nZVRpdGxlICAgID0+ICdVbml0VGVzdC1JVFNNQ2hhbmdlLU5vV2lsZGNhcmRzLScsCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdENvdW50ID0+IDEsCiAgICAgICAgICAgIENvdW50ICAgICA9PiAwLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgMzEgLSBVc2luZ1dpbGRjYXJkcyA9PiAwLCBEZXNjcmlwdGlvbgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdVc2luZ1dpbGRjYXJkcyA9PiAwLCBEZXNjcmlwdGlvbicsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBVc2luZ1dpbGRjYXJkcyA9PiAwLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgICA9PiAnVW5pdFRlc3QtSVRTTUNoYW5nZS1Ob1dpbGRjYXJkcy0nLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RDb3VudCA9PiAxLAogICAgICAgICAgICBDb3VudCAgICAgPT4gMCwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDMyIC0gVXNpbmdXaWxkY2FyZHMgPT4gMCwgRGVzY3JpcHRpb24KICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVXNpbmdXaWxkY2FyZHMgPT4gMCwgRGVzY3JpcHRpb24nLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgVXNpbmdXaWxkY2FyZHMgPT4gMCwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgPT4gJE5vV2lsZGNhcmRzVGVzdFRpdGxlLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RDb3VudCA9PiAxLAogICAgICAgICAgICBDb3VudCAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDMzIC0gQ2hhbmdlU3RhdGUgKG5hbWVzLCBub3QgSURzKQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdDaGFuZ2VTdGF0ZSAobmFtZXMsIG5vdCBJRHMpJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVN0YXRlcyA9PiBbJ3JlcXVlc3RlZCddLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDM0IC0gQ2hhbmdlU3RhdGUgKHNhbWUgbmFtZSB0aHJlZSB0aW1lcykKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlU3RhdGUgKHNhbWUgbmFtZSB0aHJlZSB0aW1lcyknLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU3RhdGVzID0+IFtxdyhyZXF1ZXN0ZWQgcmVxdWVzdGVkIHJlcXVlc3RlZCldLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDM1IC0gQ2hhbmdlU3RhdGUgKHRocmVlIGRpZmZlcmVudCBuYW1lcykKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlU3RhdGUgKHRocmVlIGRpZmZlcmVudCBuYW1lcyknLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU3RhdGVzID0+IFtxdyhyZXF1ZXN0ZWQgYXBwcm92ZWQgcmVqZWN0ZWQpXSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAzNiAtIENoYW5nZVN0YXRlIChub24tZXhpc3RlbnQgc3RhdGUpCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZVN0YXRlIChub24tZXhpc3RlbnQgc3RhdGUpJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVN0YXRlcyA9PiBbcXcocmVxdWVzdGVkIGFwcHJvdmVkIHJlamVjdGVkIG5vbi1leGlzdGVudCldLAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoRmFpbHMgPT4gMSwKICAgIH0sCgogICAgIyBOciAzNyAtIENoYW5nZVN0YXRlcyAobmFtZXMgbm90IGlkcykKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlU3RhdGVzIChuYW1lcyBub3QgaWRzKSAtIGZhaWxlZCArIHJlcXVlc3RlZCcsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBEZXNjcmlwdGlvbiAgPT4gJ0NoYW5nZVN0YXRlcyAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICBDaGFuZ2VTdGF0ZXMgPT4gW3F3KHJlcXVlc3RlZCBmYWlsZWQpXSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0Q291bnQgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDM4IC0gQ2hhbmdlU3RhdGVzIChuYW1lcyBub3QgaWRzKQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdDaGFuZ2VTdGF0ZXMgKG5hbWVzIG5vdCBpZHMpIC0gcGVuZGluZyBhcHByb3ZhbCcsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBEZXNjcmlwdGlvbiAgPT4gJ0NoYW5nZVN0YXRlcyAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICBDaGFuZ2VTdGF0ZXMgPT4gWydwZW5kaW5nIGFwcHJvdmFsJ10sCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdENvdW50ID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAzOSAtIENoYW5nZVN0YXRlIChub24tZXhpc3RlbnQgc3RhdGUgb25seSkKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlU3RhdGUgKG5vbi1leGlzdGVudCBzdGF0ZSknLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU3RhdGVzID0+IFsnbm9uLWV4aXN0ZW50J10sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hGYWlscyA9PiAxLAogICAgfSwKCiAgICAjIE5yIDQwIC0gU2VhcmNoIGZvciBhbiBpbnZhbGlkIGNoYW5nZSBzdGF0ZSBpZAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIGFuIGludmFsaWQgY2hhbmdlIHN0YXRlIGlkJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVN0YXRlSURzID0+IFstMTFdLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgICA9PiAnQ2hhbmdlU3RhdGVzIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hGYWlscyA9PiAxLAogICAgfSwKCiAgICAjIE5yIDQxIC0gU2VhcmNoIGZvciBhbiBpbnZhbGlkIGNoYW5nZSBSZXF1ZXN0ZWRUaW1lT2xkZXJEYXRlCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgYW4gaW52YWxpZCBSZXF1ZXN0ZWRUaW1lJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIFJlcXVlc3RlZFRpbWVPbGRlckRhdGUgPT4gJ2FueXRoaW5nJywKICAgICAgICB9LAogICAgICAgIFNlYXJjaEZhaWxzID0+IDEsCiAgICB9LAoKICAgICMgTnIgNDIgLSBTZWFyY2ggZm9yIGFuIHZhbGlkIGNoYW5nZSBSZXF1ZXN0ZWRUaW1lT2xkZXJEYXRlCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgYW4gdmFsaWQgUmVxdWVzdGVkVGltZScsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBSZXF1ZXN0ZWRUaW1lT2xkZXJEYXRlID0+ICcyMDA5LTEwLTI5IDEzOjMzOjMzJywKICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICAgICA9PiAnUmVxdWVzdGVkVGltZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RDb3VudCA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgNDMgLSBTZWFyY2ggZm9yIGFuIHZhbGlkIGNoYW5nZSBSZXF1ZXN0ZWRUaW1lTmV3ZXJEYXRlCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgYW4gdmFsaWQgUmVxdWVzdGVkVGltZScsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBSZXF1ZXN0ZWRUaW1lTmV3ZXJEYXRlID0+ICcyMDA5LTEwLTI5IDEzOjMzOjMzJywKICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICAgICA9PiAnUmVxdWVzdGVkVGltZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RDb3VudCA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgNDQgLSBTZWFyY2ggZm9yIGFuIGludmFsaWQgY2hhbmdlIFJlcXVlc3RlZFRpbWVOZXdlckRhdGUKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBhbiBpbnZhbGlkIFJlcXVlc3RlZFRpbWUnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgUmVxdWVzdGVkVGltZU5ld2VyRGF0ZSA9PiAnYW55dGhpbmcnLAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoRmFpbHMgPT4gMSwKICAgIH0sCgogICAgIyBOciA0NSAtIFNlYXJjaCBmb3Igbm9ybWFsaXplZCB0aXRsZSwgbGVhZGluZyB3aGl0ZXNwYWNlCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3Igbm9ybWFsaXplZCB0aXRsZSwgbGVhZGluZyB3aGl0ZXNwYWNlJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVRpdGxlICAgID0+ICJUaXRsZSB3aXRoIGxlYWRpbmcgd2hpdGVzcGFjZSAtICIgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICBVc2luZ1dpbGRjYXJkcyA9PiAwLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICAgICAgVGVzdENvdW50ICAgICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgNDYgLSBTZWFyY2ggZm9yIG5vcm1hbGl6ZWQgdGl0bGUsIHRyYWlsaW5nIHdoaXRlc3BhY2UKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBub3JtYWxpemVkIHRpdGxlLCB0cmFpbGluZyB3aGl0ZXNwYWNlJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVRpdGxlICAgID0+ICJUaXRsZSB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2UgLSAiIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgVXNpbmdXaWxkY2FyZHMgPT4gMCwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDQ3IC0gU2VhcmNoIGZvciBub3JtYWxpemVkIHRpdGxlLCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3Igbm9ybWFsaXplZCB0aXRsZSwgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZScsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICA9PiAiVGl0bGUgd2l0aCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIC0gIiAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIFVzaW5nV2lsZGNhcmRzID0+IDAsCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciA0OCAtIFNlYXJjaCBmb3IgcGxhaW4gZGVzY3JpcHRpb24KICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBwbGFpbiBkZXNjcmlwdGlvbicsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBEZXNjcmlwdGlvbiAgICA9PiAnVGhpcyBpcyBib2xkIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIFVzaW5nV2lsZGNhcmRzID0+IDAsCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciA0OSAtIFNlYXJjaCBmb3IgcGxhaW4ganVzdGlmaWNhdGlvbgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIHBsYWluIGRlc2NyaXB0aW9uJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gID0+ICdUaGlzIGlzIGJvbGQgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgVXNpbmdXaWxkY2FyZHMgPT4gMCwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDUwIC0gU2VhcmNoIGZvciBwbGFpbiBqdXN0aWZpY2F0aW9uCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgcGxhaW4gZGVzY3JpcHRpb24nLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgPT4gJ1RoaXMgaXMgYm9sZCAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uICA9PiAnVGhpcyBpcyBib2xkIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIFVzaW5nV2lsZGNhcmRzID0+IDAsCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciA1MSAtIFNlYXJjaCBmb3IgY2F0ZWdvcnkKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBjYXRlZ29yeScsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDYXRlZ29yaWVzICA9PiBbJzEgdmVyeSBsb3cnXSwKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ1Rlc3QgQ0lQJScgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICAgICAgVGVzdENvdW50ICAgICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgNTIgLSBTZWFyY2ggZm9yIGltcGFjdAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIGltcGFjdCcsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBJbXBhY3RzICAgICA9PiBbJzEgdmVyeSBsb3cnXSwKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ1Rlc3QgQ0lQJScgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICAgICAgVGVzdENvdW50ICAgICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgNTMgLSBTZWFyY2ggZm9yIHByaW9yaXR5CiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgcHJpb3JpdHknLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgUHJpb3JpdGllcyAgPT4gWycxIHZlcnkgbG93J10sCiAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0IENJUCUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDU0IC0gU2VhcmNoIGZvciBjYXRlZ29yaWVzCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgY2F0ZWdvcmllcycsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDYXRlZ29yaWVzICA9PiBbICcxIHZlcnkgbG93JywgJzIgbG93JywgJzUgdmVyeSBoaWdoJyBdLAogICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAnVGVzdCVDSVAlJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciA1NSAtIFNlYXJjaCBmb3IgaW1wYWN0cwogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIGltcGFjdHMnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgSW1wYWN0cyAgICAgPT4gWyAnMSB2ZXJ5IGxvdycsICcyIGxvdycsICc1IHZlcnkgaGlnaCcgXSwKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ1Rlc3QlQ0lQJScgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICAgICAgVGVzdENvdW50ICAgICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgNTYgLSBTZWFyY2ggZm9yIHByaW9yaXRpZXMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBwcmlvcml0aWVzJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIFByaW9yaXRpZXMgID0+IFsgJzEgdmVyeSBsb3cnLCAnMiBsb3cnLCAnNSB2ZXJ5IGhpZ2gnIF0sCiAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0JUNJUCUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDU3IC0gU2VhcmNoIGZvciBjYXRlZ29yeSBpZAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIGNhdGVnb3J5IGlkJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENhdGVnb3J5SURzID0+IFsgJENoYW5nZUNhdGVnb3J5TmFtZTJJRHsnMSB2ZXJ5IGxvdyd9IF0sCiAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0IENJUCUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDU4IC0gU2VhcmNoIGZvciBpbXBhY3QgaWQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBpbXBhY3QgaWQnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgSW1wYWN0SURzICAgPT4gWyAkQ2hhbmdlSW1wYWN0TmFtZTJJRHsnMSB2ZXJ5IGxvdyd9IF0sCiAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0IENJUCUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDU5IC0gU2VhcmNoIGZvciBwcmlvcml0eSBpZAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIHByaW9yaXR5IGlkJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIFByaW9yaXR5SURzID0+IFsgJENoYW5nZVByaW9yaXR5TmFtZTJJRHsnMSB2ZXJ5IGxvdyd9IF0sCiAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0IENJUCUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDYwIC0gU2VhcmNoIGZvciBjYXRlZ29yeSBpZHMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBjYXRlZ29yeSBpZHMnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2F0ZWdvcnlJRHMgPT4gWwogICAgICAgICAgICAgICAgJENoYW5nZUNhdGVnb3J5TmFtZTJJRHsnMSB2ZXJ5IGxvdyd9LAogICAgICAgICAgICAgICAgJENoYW5nZUNhdGVnb3J5TmFtZTJJRHsnMiBsb3cnfSwKICAgICAgICAgICAgICAgICRDaGFuZ2VDYXRlZ29yeU5hbWUySUR7JzUgdmVyeSBoaWdoJ30sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0JUNJUCUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDYxIC0gU2VhcmNoIGZvciBpbXBhY3RzCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgaW1wYWN0cycsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBJbXBhY3RJRHMgPT4gWwogICAgICAgICAgICAgICAgJENoYW5nZUltcGFjdE5hbWUySUR7JzEgdmVyeSBsb3cnfSwKICAgICAgICAgICAgICAgICRDaGFuZ2VJbXBhY3ROYW1lMklEeycyIGxvdyd9LAogICAgICAgICAgICAgICAgJENoYW5nZUltcGFjdE5hbWUySUR7JzUgdmVyeSBoaWdoJ30sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0JUNJUCUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDYyIC0gU2VhcmNoIGZvciBwcmlvcml0eSBpZHMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBwcmlvcml0eSBpZHMnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgUHJpb3JpdHlJRHMgPT4gWwogICAgICAgICAgICAgICAgJENoYW5nZVByaW9yaXR5TmFtZTJJRHsnMSB2ZXJ5IGxvdyd9LAogICAgICAgICAgICAgICAgJENoYW5nZVByaW9yaXR5TmFtZTJJRHsnMiBsb3cnfSwKICAgICAgICAgICAgICAgICRDaGFuZ2VQcmlvcml0eU5hbWUySUR7JzUgdmVyeSBoaWdoJ30sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0JUNJUCUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDYzIC0gU2VhcmNoIGZvciBDSVBzCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgYWxsIENJUCBjb2x1bW5zJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENhdGVnb3JpZXMgID0+IFsgJzEgdmVyeSBsb3cnLCAnMiBsb3cnIF0sCiAgICAgICAgICAgIEltcGFjdHMgICAgID0+IFsnMyBub3JtYWwnXSwKICAgICAgICAgICAgUHJpb3JpdGllcyAgPT4gWyczIG5vcm1hbCddLAogICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAnVGVzdCVDSVAlJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciA2NCAtIFNlYXJjaCBmb3IgQ0lQIGlkcwogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIGFsbCBDSVAgaWQgY29sdW1ucycsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDYXRlZ29yeUlEcyA9PiBbCiAgICAgICAgICAgICAgICAkQ2hhbmdlQ2F0ZWdvcnlOYW1lMklEeycxIHZlcnkgbG93J30sCiAgICAgICAgICAgICAgICAkQ2hhbmdlQ2F0ZWdvcnlOYW1lMklEeycyIGxvdyd9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBJbXBhY3RJRHMgPT4gWwogICAgICAgICAgICAgICAgJENoYW5nZUltcGFjdE5hbWUySUR7JzMgbm9ybWFsJ30sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFByaW9yaXR5SURzID0+IFsKICAgICAgICAgICAgICAgICRDaGFuZ2VQcmlvcml0eU5hbWUySUR7JzMgbm9ybWFsJ30sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0JUNJUCUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDY1IC0gU2VhcmNoIGZvciBpbnZhbGlkIENJUHMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBpbnZhbGlkIENJUHMnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2F0ZWdvcmllcyAgPT4gWydGb29CYXInXSwKICAgICAgICAgICAgSW1wYWN0cyAgICAgPT4gWydGb29CYXInXSwKICAgICAgICAgICAgUHJpb3JpdGllcyAgPT4gWydGb29CYXInXSwKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ1Rlc3QlQ0lQJScgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoRmFpbHMgPT4gMSwKICAgIH0sCgogICAgIyBOciA2NiAtIFNlYXJjaCBmb3IgaW52YWxpZCBDYXRlZ29yaWVzCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgaW52YWxpZCBDYXRlZ29yaWVzJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENhdGVnb3JpZXMgID0+IFsnRm9vQmFyJ10sCiAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdUZXN0JUNJUCUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaEZhaWxzID0+IDEsCiAgICB9LAoKICAgICMgTnIgNjcgLSBTZWFyY2ggZm9yIGludmFsaWQgQ0lQcwogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIGludmFsaWQgSW1wYWN0cycsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBJbXBhY3RzICAgICA9PiBbJ0Zvb0JhciddLAogICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAnVGVzdCVDSVAlJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hGYWlscyA9PiAxLAogICAgfSwKCiAgICAjIE5yIDY4IC0gU2VhcmNoIGZvciBpbnZhbGlkIFByaW9yaXRpZXMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBpbnZhbGlkIENJUHMnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgUHJpb3JpdGllcyAgPT4gWydGb29CYXInXSwKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ1Rlc3QlQ0lQJScgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoRmFpbHMgPT4gMSwKICAgIH0sCgogICAgIyBOciA2OSAtIFNlYXJjaCBmb3IgY2hhbmdlIGR5bmFtaWMgZmllbGRzCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgY2hhbmdlIGR5bmFtaWMgZmllbGRzJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QxJyA9PiB7CiAgICAgICAgICAgICAgICBFcXVhbHMgPT4gJ0FBQUEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MicgPT4gewogICAgICAgICAgICAgICAgRXF1YWxzID0+ICdCQkJCJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgVXNpbmdXaWxkY2FyZHMgPT4gMCwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDcwIC0gU2VhcmNoIGZvciBjaGFuZ2UgZHluYW1pYyBmaWVsZHMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBjaGFuZ2UgZHluYW1pYyBmaWVsZHMnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDMnID0+IHsKICAgICAgICAgICAgICAgIEVxdWFscyA9PiAnR0dHRycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3Q0JyA9PiB7CiAgICAgICAgICAgICAgICBFcXVhbHMgPT4gJ0hISEgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2luZ1dpbGRjYXJkcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICAgICAgVGVzdENvdW50ICAgICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgNzEgLSBTZWFyY2ggZm9yIGNoYW5nZSBkeW5hbWljIGZpZWxkcwogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIGNoYW5nZSBkeW5hbWljIGZpZWxkcycsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAnVGVzdCBhZGQgY2hhbmdlIHdpdGggZHluYW1pYyBmaWVsZHMgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDEnID0+IHsKICAgICAgICAgICAgICAgIEVxdWFscyA9PiAnQUFBQScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QyJyA9PiB7CiAgICAgICAgICAgICAgICBFcXVhbHMgPT4gJ0JCQkInLAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2luZ1dpbGRjYXJkcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICAgICAgVGVzdENvdW50ICAgICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgNzIgLSBTZWFyY2ggZm9yIGNoYW5nZSBhbmQgd29ya29yZGVyIGR5bmFtaWMgZmllbGRzCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDEnID0+IHsKICAgICAgICAgICAgICAgIEVxdWFscyA9PiAnQUFBQScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QyJyA9PiB7CiAgICAgICAgICAgICAgICBFcXVhbHMgPT4gJ0JCQkInLAogICAgICAgICAgICB9LAogICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdXb3Jrb3JkZXJUZXN0MScgPT4gewogICAgICAgICAgICAgICAgRXF1YWxzID0+ICdXLUFBQUEnLAogICAgICAgICAgICB9LAogICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdXb3Jrb3JkZXJUZXN0MicgPT4gewogICAgICAgICAgICAgICAgRXF1YWxzID0+ICdXLUJCQkInLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICAgICAgVGVzdENvdW50ICAgICA9PiAxLAogICAgICAgIH0sCiAgICB9LAopOwoKIyBnZXQgYSBzYW1wbGUgY2hhbmdlIHdlIGNyZWF0ZWQgYWJvdmUgZm9yIHNvbWUgJ3NwZWNpYWwnIHRlc3QgY2FzZXMKbXkgKCRTZWFyY2hUZXN0Q2hhbmdlSUQpID0gQHsgJExhYmVsMkNoYW5nZUlEc3tTZWFyY2hUZXN0fSB9OwpteSAkTnJPZkdlbmVyYWxTZWFyY2hUZXN0cyA9IHNjYWxhciBAQ2hhbmdlU2VhcmNoVGVzdHM7CgppZiAoJFNlYXJjaFRlc3RDaGFuZ2VJRCkgewogICAgbXkgJFNlYXJjaFRlc3RDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJFNlYXJjaFRlc3RDaGFuZ2VJRCwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKCiAgICBwdXNoIEBDaGFuZ2VTZWFyY2hUZXN0cywgKAogICAgICAgIHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZU51bWJlcicsCiAgICAgICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZU51bWJlciA9PiAkU2VhcmNoVGVzdENoYW5nZS0+e0NoYW5nZU51bWJlcn0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICAgICAgVGVzdENvdW50ID0+IDEsCiAgICAgICAgICAgICAgICBDb3VudCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZU51bWJlciwgUGxhbm5lZFN0YXJ0VGltZU5ld2VyRGF0ZScsCiAgICAgICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZU51bWJlciAgICAgICAgICAgICAgPT4gJFNlYXJjaFRlc3RDaGFuZ2UtPntDaGFuZ2VOdW1iZXJ9LAogICAgICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZU5ld2VyRGF0ZSA9PiAkU2VhcmNoVGVzdENoYW5nZS0+e1BsYW5uZWRTdGFydFRpbWV9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgICAgIFRlc3RDb3VudCA9PiAxLAogICAgICAgICAgICAgICAgQ291bnQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdDaGFuZ2VOdW1iZXIsIFBsYW5uZWRTdGFydFRpbWVPbGRlckRhdGUnLAogICAgICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VOdW1iZXIgICAgICAgICAgICAgID0+ICRTZWFyY2hUZXN0Q2hhbmdlLT57Q2hhbmdlTnVtYmVyfSwKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWVPbGRlckRhdGUgPT4gJFNlYXJjaFRlc3RDaGFuZ2UtPntQbGFubmVkU3RhcnRUaW1lfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0Q291bnQgPT4gMSwKICAgICAgICAgICAgICAgIENvdW50ICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlTnVtYmVyLCBQbGFubmVkRW5kVGltZU5ld2VyRGF0ZScsCiAgICAgICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZU51bWJlciAgICAgICAgICAgID0+ICRTZWFyY2hUZXN0Q2hhbmdlLT57Q2hhbmdlTnVtYmVyfSwKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lTmV3ZXJEYXRlID0+ICRTZWFyY2hUZXN0Q2hhbmdlLT57UGxhbm5lZEVuZFRpbWV9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgICAgIFRlc3RDb3VudCA9PiAxLAogICAgICAgICAgICAgICAgQ291bnQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdDaGFuZ2VOdW1iZXIsIFBsYW5uZWRFbmRUaW1lT2xkZXJEYXRlJywKICAgICAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlTnVtYmVyICAgICAgICAgICAgPT4gJFNlYXJjaFRlc3RDaGFuZ2UtPntDaGFuZ2VOdW1iZXJ9LAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWVPbGRlckRhdGUgPT4gJFNlYXJjaFRlc3RDaGFuZ2UtPntQbGFubmVkRW5kVGltZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICAgICAgVGVzdENvdW50ID0+IDEsCiAgICAgICAgICAgICAgICBDb3VudCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZU51bWJlciwgUGxhbm5lZEVuZFRpbWVPbGRlckRhdGUsIFBsYW5uZWRFbmRUaW1lTmV3ZXJEYXRlJywKICAgICAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlTnVtYmVyICAgICAgICAgICAgPT4gJFNlYXJjaFRlc3RDaGFuZ2UtPntDaGFuZ2VOdW1iZXJ9LAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWVPbGRlckRhdGUgPT4gJFNlYXJjaFRlc3RDaGFuZ2UtPntQbGFubmVkRW5kVGltZX0sCiAgICAgICAgICAgICAgICBQbGFubmVkRW5kVGltZU5ld2VyRGF0ZSA9PiAkU2VhcmNoVGVzdENoYW5nZS0+e1BsYW5uZWRFbmRUaW1lfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0Q291bnQgPT4gMSwKICAgICAgICAgICAgICAgIENvdW50ICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlTnVtYmVyLCBQbGFubmVkRW5kVGltZU9sZGVyRGF0ZSwgUGxhbm5lZEVuZFRpbWVOZXdlckRhdGUnCiAgICAgICAgICAgICAgICAuICcsIFBsYW5uZWRTdGFydFRpbWVOZXdlckRhdGUsIFBsYW5uZWRTdGFydFRpbWVPbGRlckRhdGUnLAogICAgICAgICAgICBTZWFyY2hEYXRhID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZU51bWJlciAgICAgICAgICAgICAgPT4gJFNlYXJjaFRlc3RDaGFuZ2UtPntDaGFuZ2VOdW1iZXJ9LAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWVPbGRlckRhdGUgICA9PiAkU2VhcmNoVGVzdENoYW5nZS0+e1BsYW5uZWRFbmRUaW1lfSwKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lTmV3ZXJEYXRlICAgPT4gJFNlYXJjaFRlc3RDaGFuZ2UtPntQbGFubmVkRW5kVGltZX0sCiAgICAgICAgICAgICAgICBQbGFubmVkU3RhcnRUaW1lT2xkZXJEYXRlID0+ICRTZWFyY2hUZXN0Q2hhbmdlLT57UGxhbm5lZFN0YXJ0VGltZX0sCiAgICAgICAgICAgICAgICBQbGFubmVkU3RhcnRUaW1lTmV3ZXJEYXRlID0+ICRTZWFyY2hUZXN0Q2hhbmdlLT57UGxhbm5lZFN0YXJ0VGltZX0sCiAgICAgICAgICAgICAgICBQbGFubmVkU3RhcnRUaW1lT2xkZXJEYXRlID0+ICRTZWFyY2hUZXN0Q2hhbmdlLT57UGxhbm5lZFN0YXJ0VGltZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICAgICAgVGVzdENvdW50ID0+IDEsCiAgICAgICAgICAgICAgICBDb3VudCAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZU51bWJlciB3aXRoIHdpbGRjYXJkJywKICAgICAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlTnVtYmVyID0+IHN1YnN0ciggJFNlYXJjaFRlc3RDaGFuZ2UtPntDaGFuZ2VOdW1iZXJ9LCAwLCAxMCApIC4gJyUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZU51bWJlciwgQ2hhbmdlVGl0bGUgd2l0aCB3aWxkY2FyZCcsCiAgICAgICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZU51bWJlciA9PiBzdWJzdHIoICRTZWFyY2hUZXN0Q2hhbmdlLT57Q2hhbmdlTnVtYmVyfSwgMCwgMTAgKSAuICclJywKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICA9PiBzdWJzdHIoICRTZWFyY2hUZXN0Q2hhbmdlLT57VGl0bGV9LCAgICAgICAgMCwgMSApIC4gJyUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZU51bWJlciwgdHdvIGNyZWF0b3JzJywKICAgICAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlTnVtYmVyID0+ICRTZWFyY2hUZXN0Q2hhbmdlLT57Q2hhbmdlTnVtYmVyfSwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICA9PiBbICRTZWFyY2hUZXN0Q2hhbmdlLT57Q3JlYXRlQnl9LCAkU2VhcmNoVGVzdENoYW5nZS0+e0NyZWF0ZUJ5fSArIDEgXSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0Q291bnQgPT4gMSwKICAgICAgICAgICAgICAgIENvdW50ICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlTnVtYmVyICh3aXRoIHdpbGRjYXJkKSwgdHdvIGNyZWF0b3JzJywKICAgICAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlTnVtYmVyID0+IHN1YnN0ciggJFNlYXJjaFRlc3RDaGFuZ2UtPntDaGFuZ2VOdW1iZXJ9LCAwLCAxMCApIC4gJyUnLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgID0+IFsgJFNlYXJjaFRlc3RDaGFuZ2UtPntDcmVhdGVCeX0sICRTZWFyY2hUZXN0Q2hhbmdlLT57Q3JlYXRlQnl9ICsgMSBdLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZVRpdGxlLCBDaGFuZ2VOdW1iZXIsIHR3byBjcmVhdG9ycycsCiAgICAgICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZU51bWJlciA9PiAkU2VhcmNoVGVzdENoYW5nZS0+e0NoYW5nZU51bWJlcn0sCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgPT4gWyAkU2VhcmNoVGVzdENoYW5nZS0+e0NyZWF0ZUJ5fSwgJFNlYXJjaFRlc3RDaGFuZ2UtPntDcmVhdGVCeX0gKyAxIF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgPT4gc3Vic3RyKCAkU2VhcmNoVGVzdENoYW5nZS0+e0NoYW5nZVRpdGxlfSwgMCwgMSApIC4gJyUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgICAgIFRlc3RDb3VudCA9PiAxLAogICAgICAgICAgICAgICAgQ291bnQgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdDaGFuZ2VOdW1iZXIsIEFjdHVhbEVuZFRpbWVOZXdlckRhdGUnLAogICAgICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VOdW1iZXIgICAgICAgICAgID0+ICRTZWFyY2hUZXN0Q2hhbmdlLT57Q2hhbmdlTnVtYmVyfSwKICAgICAgICAgICAgICAgIEFjdHVhbEVuZFRpbWVOZXdlckRhdGUgPT4gJFNlYXJjaFRlc3RDaGFuZ2UtPntBY3R1YWxFbmRUaW1lfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0Q291bnQgPT4gMSwKICAgICAgICAgICAgICAgIENvdW50ICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlTnVtYmVyLCBBY3R1YWxFbmRUaW1lT2xkZXJEYXRlJywKICAgICAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlTnVtYmVyICAgICAgICAgICA9PiAkU2VhcmNoVGVzdENoYW5nZS0+e0NoYW5nZU51bWJlcn0sCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lT2xkZXJEYXRlID0+ICRTZWFyY2hUZXN0Q2hhbmdlLT57QWN0dWFsRW5kVGltZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlTnVtYmVyLCBBY3R1YWxFbmRUaW1lTmV3ZXJEYXRlLCBBY3R1YWxFbmRUaW1lT2xkZXJEYXRlJywKICAgICAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZU5ld2VyRGF0ZSA9PiAkU2VhcmNoVGVzdENoYW5nZS0+e0FjdHVhbEVuZFRpbWV9LAogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZU9sZGVyRGF0ZSA9PiAkU2VhcmNoVGVzdENoYW5nZS0+e0FjdHVhbEVuZFRpbWV9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZU51bWJlciwgQWN0dWFsU3RhcnRUaW1lTmV3ZXJEYXRlJywKICAgICAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICAgICAgQWN0dWFsU3RhcnRUaW1lTmV3ZXJEYXRlID0+ICRTZWFyY2hUZXN0Q2hhbmdlLT57QWN0dWFsU3RhcnRUaW1lfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdDaGFuZ2VOdW1iZXIsIEFjdHVhbFN0YXJ0VGltZU9sZGVyRGF0ZScsCiAgICAgICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZU9sZGVyRGF0ZSA9PiAkU2VhcmNoVGVzdENoYW5nZS0+e0FjdHVhbFN0YXJ0VGltZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlTnVtYmVyLCBBY3R1YWxTdGFydFRpbWVOZXdlckRhdGUsIEFjdHVhbFN0YXJ0VGltZU9sZGVyRGF0ZScsCiAgICAgICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZU5ld2VyRGF0ZSA9PiAkU2VhcmNoVGVzdENoYW5nZS0+e0FjdHVhbFN0YXJ0VGltZX0sCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWVPbGRlckRhdGUgPT4gJFNlYXJjaFRlc3RDaGFuZ2UtPntBY3R1YWxTdGFydFRpbWV9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgKTsKCiAgICBteSAkTnJPZkFsbFNlYXJjaFRlc3RzID0gc2NhbGFyIEBDaGFuZ2VTZWFyY2hUZXN0czsKCiAgICBmb3IgbXkgJFRlc3ROdW1iZXIgKCAoICROck9mR2VuZXJhbFNlYXJjaFRlc3RzICsgMSApIC4uICROck9mQWxsU2VhcmNoVGVzdHMgKSB7CiAgICAgICAgJENoYW5nZUlERm9yU2VhcmNoVGVzdHskVGVzdE51bWJlcn0tPnsgJFNlYXJjaFRlc3RDaGFuZ2UtPntDaGFuZ2VJRH0gfSA9IDE7CiAgICB9Cn0KCm15ICRTZWFyY2hUZXN0Q291bnQgPSAxOwoKU0VBUkNIVEVTVDoKZm9yIG15ICRUZXN0IChAQ2hhbmdlU2VhcmNoVGVzdHMpIHsKCiAgICAjIGNoZWNrIFNlYXJjaERhdGEgYXR0cmlidXRlCiAgICBpZiAoICEkVGVzdC0+e1NlYXJjaERhdGF9IHx8IHJlZiggJFRlc3QtPntTZWFyY2hEYXRhfSApIG5lICdIQVNIJyApIHsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgMCwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VhcmNoRGF0YSBmb3VuZCBmb3IgdGhpcyB0ZXN0LiIsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBTRUFSQ0hURVNUOwogICAgfQoKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDEsCiAgICAgICAgIkNoYW5nZVNlYXJjaCgpIHdpdGggcGFyYW1zOiAkVGVzdC0+e0Rlc2NyaXB0aW9ufSAoU2VhcmNoVGVzdENhc2U6ICRTZWFyY2hUZXN0Q291bnQpIiwKICAgICk7CgogICAgIyBnZXQgYSByZWYgdG8gYW4gYXJyYXkgb2YgZm91bmQgaWRzCiAgICBteSAkQ2hhbmdlSURzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgICV7ICRUZXN0LT57U2VhcmNoRGF0YX0gfSwKICAgICAgICBSZXN1bHQgPT4gJ0FSUkFZJywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBnZXQgYSBjb3VudCBvZiBmb3VuZCBpZHMKICAgIG15ICRDb3VudENoYW5nZUlEcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVNlYXJjaCgKICAgICAgICAleyAkVGVzdC0+e1NlYXJjaERhdGF9IH0sCiAgICAgICAgUmVzdWx0ID0+ICdDT1VOVCcsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIGlmICggJFRlc3QtPntTZWFyY2hGYWlsc30gKSB7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICFkZWZpbmVkKCRDaGFuZ2VJRHMpLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDaGFuZ2VTZWFyY2goKSBpcyBleHBlY3RlZCB0byBmYWlsIChSZXN1bHQgPT4gJ0FSUkFZJykiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICFkZWZpbmVkKCRDb3VudENoYW5nZUlEcyksCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENoYW5nZVNlYXJjaCgpIGlzIGV4cGVjdGVkIHRvIGZhaWwgKFJlc3VsdCA9PiAnQ09VTlQnKSIsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBkZWZpbmVkKCRDaGFuZ2VJRHMpICYmIHJlZiAkQ2hhbmdlSURzIGVxICdBUlJBWScsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIGFycmF5IHJlZmVyZW5jZSBmb3IgQ2hhbmdlSURzLiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgZGVmaW5lZCgkQ291bnRDaGFuZ2VJRHMpICYmIHJlZiAkQ291bnRDaGFuZ2VJRHMgZXEgJycsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIHNjYWxhciBmb3IgQ291bnRDaGFuZ2VJRHMuIiwKICAgICAgICApOwogICAgfQoKICAgICRDaGFuZ2VJRHMgfHw9IFtdOwogICAgJENvdW50Q2hhbmdlSURzIHx8PSAwOwoKICAgIGlmICggJFRlc3QtPntSZXN1bHREYXRhfS0+e1Rlc3RDb3VudH0gKSB7CgogICAgICAgICMgZ2V0IG51bWJlciBvZiBjaGFuZ2UgaWRzIENoYW5nZVNlYXJjaCBzaG91bGQgcmV0dXJuCiAgICAgICAgbXkgJEV4cGVjdGVkQ291bnQgPSBzY2FsYXIga2V5cyAleyAkQ2hhbmdlSURGb3JTZWFyY2hUZXN0eyRTZWFyY2hUZXN0Q291bnR9IH07CgogICAgICAgICMgZ2V0IGRlZmluZWQgZXhwZWN0ZWQgcmVzdWx0IGNvdW50IChkZWZpbmVkIGluIHNlYXJjaCB0ZXN0IGNhc2UhKQogICAgICAgIGlmICggZXhpc3RzICRUZXN0LT57UmVzdWx0RGF0YX0tPntDb3VudH0gKSB7CiAgICAgICAgICAgICRFeHBlY3RlZENvdW50ID0gJFRlc3QtPntSZXN1bHREYXRhfS0+e0NvdW50fTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgdGhlIG51bWJlciBvZiBJRHMgaW4gdGhlIHJldHVybmVkIGFycmF5cmVmCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICBzY2FsYXIgQHskQ2hhbmdlSURzfSwKICAgICAgICAgICAgJEV4cGVjdGVkQ291bnQsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIE51bWJlciBvZiBmb3VuZCBjaGFuZ2VzIChSZXN1bHQgPT4gJ0FSUkFZJykuIiwKICAgICAgICApOwoKICAgICAgICAjIFdoZW4gYSAnTGltaXQnIGhhcyBiZWVuIHBhc3NlZCwgdGhlbiB0aGUgcmV0dXJuZWQgY291bnQgbm90IG5lY2Vzc2FyaWx5IG1hdGNoZXMKICAgICAgICAjIHRoZSBudW1iZXIgb2YgSURzIGluIHRoZSByZXR1cm5lZCBhcnJheS4gSW4gdGhhdCBjYXNlIHRlc3RpbmcgaXMgZnV0aWxlLgogICAgICAgIGlmICggISRUZXN0LT57U2VhcmNoRGF0YX0tPntMaW1pdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRDb3VudENoYW5nZUlEcywKICAgICAgICAgICAgICAgICRFeHBlY3RlZENvdW50LAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gTnVtYmVyIG9mIGZvdW5kIGNoYW5nZXMgKFJlc3VsdCA9PiAnQ09VTlQnKS4iLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRUZXN0LT57UmVzdWx0RGF0YX0tPntUZXN0RXhpc3RlbmNlfSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBhbGwgaWRzIHRoYXQgYmVsb25ncyB0byB0aGlzIHNlYXJjaHRlc3QgYXJlIHJldHVybmVkCiAgICAgICAgbXkgQENoYW5nZUlEcyA9IGtleXMgJXsgJENoYW5nZUlERm9yU2VhcmNoVGVzdHskU2VhcmNoVGVzdENvdW50fSB9OwogICAgICAgIG15ICVSZXR1cm5lZENoYW5nZUlEID0gbWFwIHsgJF8gPT4gMSB9IEB7JENoYW5nZUlEc307CiAgICAgICAgZm9yIG15ICRDaGFuZ2VJRCAoQENoYW5nZUlEcykgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRSZXR1cm5lZENoYW5nZUlEeyRDaGFuZ2VJRH0sCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBDaGFuZ2VJRCAkQ2hhbmdlSUQgZm91bmQgaW4gcmV0dXJuZWQgbGlzdC4iLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KfQpjb250aW51ZSB7CiAgICAkVGVzdENvdW50Kys7CiAgICAkU2VhcmNoVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBkZWZpbmUgY2hhbmdlIHNlYXJjaCB0ZXN0cyBmb3IgJ09yZGVyQnknIHNlYXJjaGVzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IHRocmVlIGNoYW5nZSBpZHMuIFRoZW4gZ2V0IHRoZSBkYXRhLiBUaGF0IGlzIG5lZWRlZCBmb3Igc29ydGluZwpteSBAT3JkZXJCeVNlYXJjaFRlc3RDaGFuZ2VJRHMgPSBAeyAkTGFiZWwyQ2hhbmdlSURze09yZGVyQnlTZWFyY2hUZXN0fSB9OwpteSBAT3JkZXJCeVNlYXJjaFRlc3RDaGFuZ2VzOwoKZm9yIG15ICRDaGFuZ2VJREZvck9yZGVyQnlUZXN0cyAoQE9yZGVyQnlTZWFyY2hUZXN0Q2hhbmdlSURzKSB7CiAgICBteSAkQ2hhbmdlRGF0YSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUdldCgKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSURGb3JPcmRlckJ5VGVzdHMsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CgogICAgIyBjb252ZXJ0IHRpbWUgc3RyaW5nIHRvIG51bWJlcnMgLSB0aGF0J3MgYmV0dGVyIGZvciB0aGUgY29tcGFyaXNvbnMKICAgIGZvciBteSAkVGltZUNvbHVtbiAocXcoQ3JlYXRlVGltZSBDaGFuZ2VUaW1lKSkgewogICAgICAgICRDaGFuZ2VEYXRhLT57JFRpbWVDb2x1bW59ID1+IHN7IFxEIH17fXhtc2c7CiAgICB9CgogICAgcHVzaCBAT3JkZXJCeVNlYXJjaFRlc3RDaGFuZ2VzLCAkQ2hhbmdlRGF0YTsKfQoKbXkgQE9yZGVyQnlDb2x1bW5zID0gcXcoCiAgICBDaGFuZ2VJRAogICAgQ2hhbmdlTnVtYmVyCiAgICBDaGFuZ2VUaXRsZQogICAgQ2hhbmdlU3RhdGVJRAogICAgQ2hhbmdlTWFuYWdlcklECiAgICBDaGFuZ2VCdWlsZGVySUQKICAgIENyZWF0ZUJ5CiAgICBDaGFuZ2VCeQogICAgQ3JlYXRlVGltZQogICAgQ2hhbmdlVGltZQogICAgUGxhbm5lZFN0YXJ0VGltZQogICAgUGxhbm5lZEVuZFRpbWUKICAgIEFjdHVhbFN0YXJ0VGltZQogICAgQWN0dWFsRW5kVGltZQopOwoKZm9yIG15ICRPcmRlckJ5Q29sdW1uIChAT3JkZXJCeUNvbHVtbnMpIHsKCiAgICAjIHR1cm4gb2ZmIGFsbCBwcmV0dHkgcHJpbnQKICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OkluZGVudCA9IDA7CiAgICBsb2NhbCAkRGF0YTo6RHVtcGVyOjpVc2VxcSAgPSAxOwoKICAgIG15IEBTb3J0ZWRDaGFuZ2VzOwogICAgaWYgKCAkT3JkZXJCeUNvbHVtbiA9fiBteyBcQSAoIENoYW5nZVRpdGxlIHwgLisgVGltZSApIFx6IH14bXMgKSB7CiAgICAgICAgQFNvcnRlZENoYW5nZXMgPSBzb3J0IHsKICAgICAgICAgICAgJGEtPnskT3JkZXJCeUNvbHVtbn0gY21wICRiLT57JE9yZGVyQnlDb2x1bW59CiAgICAgICAgICAgICAgICB8fCAkYi0+e0NoYW5nZUlEfSA8PT4gJGEtPntDaGFuZ2VJRH0KICAgICAgICB9IEBPcmRlckJ5U2VhcmNoVGVzdENoYW5nZXM7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBAU29ydGVkQ2hhbmdlcyA9IHNvcnQgewogICAgICAgICAgICAkYS0+eyRPcmRlckJ5Q29sdW1ufSA8PT4gJGItPnskT3JkZXJCeUNvbHVtbn0KICAgICAgICAgICAgICAgIHx8ICRiLT57Q2hhbmdlSUR9IDw9PiAkYS0+e0NoYW5nZUlEfQogICAgICAgIH0gQE9yZGVyQnlTZWFyY2hUZXN0Q2hhbmdlczsKICAgIH0KICAgIG15IEBTb3J0ZWRJRHMgPSBtYXAgeyAkXy0+e0NoYW5nZUlEfSB9IEBTb3J0ZWRDaGFuZ2VzOwoKICAgICMgZHVtcCB0aGUgcmVmZXJlbmNlIGF0dHJpYnV0ZQogICAgbXkgJFJlZmVyZW5jZUxpc3QgPSBEYXRhOjpEdW1wZXI6OkR1bXBlciggXEBTb3J0ZWRJRHMgKTsgICAgIyMgbm8gY3JpdGljCgogICAgbXkgJFNlYXJjaFJlc3VsdCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVNlYXJjaCgKICAgICAgICBDaGFuZ2VUaXRsZSAgICAgID0+ICdPcmRlckJ5Q2hhbmdlIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFskT3JkZXJCeUNvbHVtbl0sCiAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbJ1VwJ10sCiAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgKTsKCiAgICAjIGR1bXAgdGhlIGF0dHJpYnV0ZSBmcm9tIENoYW5nZUdldCgpCiAgICBteSAkU2VhcmNoTGlzdCA9IERhdGE6OkR1bXBlcjo6RHVtcGVyKCRTZWFyY2hSZXN1bHQpOyAgICAgICAjIyBubyBjcml0aWMKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFNlYXJjaExpc3QsCiAgICAgICAgJFJlZmVyZW5jZUxpc3QsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICI6IENoYW5nZVNlYXJjaCgpIE9yZGVyQnkgJE9yZGVyQnlDb2x1bW4gKFVwKS4iCiAgICApOwoKICAgIG15IEBTb3J0ZWRDaGFuZ2VzRG93bjsKICAgIGlmICggJE9yZGVyQnlDb2x1bW4gPX4gbXsgXEEgKCBDaGFuZ2VUaXRsZSB8IC4rIFRpbWUgKSBceiB9eG1zICkgewogICAgICAgIEBTb3J0ZWRDaGFuZ2VzRG93biA9IHNvcnQgewogICAgICAgICAgICAkYi0+eyRPcmRlckJ5Q29sdW1ufSBjbXAgJGEtPnskT3JkZXJCeUNvbHVtbn0KICAgICAgICAgICAgICAgIHx8ICRiLT57Q2hhbmdlSUR9IDw9PiAkYS0+e0NoYW5nZUlEfQogICAgICAgIH0gQE9yZGVyQnlTZWFyY2hUZXN0Q2hhbmdlczsKICAgIH0KICAgIGVsc2UgewogICAgICAgIEBTb3J0ZWRDaGFuZ2VzRG93biA9IHNvcnQgewogICAgICAgICAgICAkYi0+eyRPcmRlckJ5Q29sdW1ufSA8PT4gJGEtPnskT3JkZXJCeUNvbHVtbn0KICAgICAgICAgICAgICAgIHx8ICRiLT57Q2hhbmdlSUR9IDw9PiAkYS0+e0NoYW5nZUlEfQogICAgICAgIH0gQE9yZGVyQnlTZWFyY2hUZXN0Q2hhbmdlczsKICAgIH0KICAgIG15IEBTb3J0ZWRJRHNEb3duID0gbWFwIHsgJF8tPntDaGFuZ2VJRH0gfSBAU29ydGVkQ2hhbmdlc0Rvd247CgogICAgIyBkdW1wIHRoZSByZWZlcmVuY2UgYXR0cmlidXRlCiAgICBteSAkUmVmZXJlbmNlTGlzdERvd24gPSBEYXRhOjpEdW1wZXI6OkR1bXBlciggXEBTb3J0ZWRJRHNEb3duICk7ICAgICMjIG5vIGNyaXRpYwoKICAgIG15ICRTZWFyY2hSZXN1bHREb3duID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgIENoYW5nZVRpdGxlID0+ICdPcmRlckJ5Q2hhbmdlIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICBPcmRlckJ5ICAgICA9PiBbJE9yZGVyQnlDb2x1bW5dLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKICAgICMgZHVtcCB0aGUgYXR0cmlidXRlIGZyb20gQ2hhbmdlR2V0KCkKICAgIG15ICRTZWFyY2hMaXN0RG93biA9IERhdGE6OkR1bXBlcjo6RHVtcGVyKCRTZWFyY2hSZXN1bHREb3duKTsgICAgICAgIyMgbm8gY3JpdGljCgogICAgJFNlbGYtPklzKAogICAgICAgICRTZWFyY2hMaXN0RG93biwKICAgICAgICAkUmVmZXJlbmNlTGlzdERvd24sCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICI6IENoYW5nZVNlYXJjaCgpIE9yZGVyQnkgJE9yZGVyQnlDb2x1bW4gKERvd24pLiIKICAgICk7CgogICAgIyBjaGVjayBpZiBJVFNNQ2hhbmdlLnBtIGhhbmRsZXMgbm9uLWV4aXN0ZW50IE9yZGVyQnlEaXJlY3Rpb24gY3JpdGVyaWEgY29ycmVjdAogICAgbXkgJFNlYXJjaFJlc3VsdFNpZGV3YXlzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgIENoYW5nZVRpdGxlICAgICAgPT4gJ09yZGVyQnlDaGFuZ2UgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gWyRPcmRlckJ5Q29sdW1uXSwKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsnU2lkZXdheXMnXSwKICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkU2VhcmNoUmVzdWx0U2lkZXdheXMsCiAgICAgICAgdW5kZWYsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICI6IENoYW5nZVNlYXJjaCgpIE9yZGVyQnkgJE9yZGVyQnlDb2x1bW4gKFNpZGV3YXlzKS4iCiAgICApOwp9CgojIGNyZWF0ZSBhbiBleHRyYSBibG9jaywgaW4gb3JkZXIgdG8gbGltaXQgc2NvcGUgb2YgbGV4aWNhbHMKewoKICAgICMgY2hlY2sgZm9yICdPcmRlckJ5JyB3aXRoIG5vbi1leGlzdGVudCBjb2x1bW4KICAgIG15ICRTZWFyY2hSZXN1bHRGb29CYXJDb2x1bW4gPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VTZWFyY2goCiAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ09yZGVyQnlDaGFuZ2UgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIE9yZGVyQnkgICAgID0+IFsnRm9vQmFyJ10sCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRTZWFyY2hSZXN1bHRGb29CYXJDb2x1bW4sCiAgICAgICAgdW5kZWYsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICI6IENoYW5nZVNlYXJjaCgpIE9yZGVyQnkgRm9vQmFyIChEb3duKS4iCiAgICApOwoKICAgICMgY2hlY2sgZm9yICdPcmRlckJ5JyB3aXRoIG5vbi1leGlzdGVudCBjb2x1bW4KICAgIG15ICRTZWFyY2hSZXN1bHRGb29CYXJDb2x1bW5EaXJlY3Rpb24gPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VTZWFyY2goCiAgICAgICAgQ2hhbmdlVGl0bGUgICAgICA9PiAnT3JkZXJCeUNoYW5nZSAtIFRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBbJ0Zvb0JhciddLAogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWydGb29CYXInXSwKICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkU2VhcmNoUmVzdWx0Rm9vQmFyQ29sdW1uRGlyZWN0aW9uLAogICAgICAgIHVuZGVmLAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiOiBDaGFuZ2VTZWFyY2goKSBPcmRlckJ5IEZvb0JhciAoRm9vQmFyKS4iCiAgICApOwoKICAgICMgY2hlY2sgZm9yICdPcmRlckJ5JyB3aXRoIG5vbi1leGlzdGVudCBjb2x1bW4KICAgIG15ICRTZWFyY2hSZXN1bHRGb29CYXJEb3VibGVDb2x1bW4gPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VTZWFyY2goCiAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ09yZGVyQnlDaGFuZ2UgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIE9yZGVyQnkgICAgID0+IFsgJ0NoYW5nZUlEJywgJ0NoYW5nZUlEJyBdLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkU2VhcmNoUmVzdWx0Rm9vQmFyRG91YmxlQ29sdW1uLAogICAgICAgIHVuZGVmLAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiOiBDaGFuZ2VTZWFyY2goKSBEb3VibGVkIE9yZGVyQnkgRm9vQmFyLiIKICAgICk7Cn0KCiMgY2hhbmdlIHRoZSBjcmVhdGUgdGltZSBmb3IgdGhlIHNlY29uZCB0ZXN0IGNhc2Ugd2UgZGVmaW5lZCBhYm92ZSBmb3IgdGhlIG9yZGVyYnkgdGVzdHMKIyB3ZSBkbyB0aGlzIHRvIGhhdmUgdHdvIGNoYW5nZXMgd2l0aCB0aGUgc2FtZSBjcmVhdGUgdGltZS4gdGhpcyBpcyBuZWVkZWQgdG8gdGVzdAojIHRoZSAnb3JkZXJieScgd2l0aCB0d28gY29sdW1ucwpTZXRUaW1lcygKICAgIENoYW5nZUlEICAgPT4gKCBzb3J0IEBPcmRlckJ5U2VhcmNoVGVzdENoYW5nZUlEcyApWzFdLAogICAgQ3JlYXRlVGltZSA9PiAnMjAwOS0xMC0wMSAwMTowMDowMCcsCik7CgpteSBAQ2hhbmdlc0ZvclNlY29uZE9yZGVyQnlUZXN0czsKZm9yIG15ICRDaGFuZ2VJREZvclNlY29uZE9yZGVyQnlUZXN0cyAoQE9yZGVyQnlTZWFyY2hUZXN0Q2hhbmdlSURzKSB7CiAgICBteSAkQ2hhbmdlRGF0YSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUdldCgKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSURGb3JTZWNvbmRPcmRlckJ5VGVzdHMsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CgogICAgIyBjb252ZXJ0IHRpbWUgc3RyaW5nIHRvIG51bWJlcnMgLSB0aGF0J3MgYmV0dGVyIGZvciB0aGUgY29tcGFyaXNvbnMKICAgIGZvciBteSAkVGltZUNvbHVtbiAocXcoQ3JlYXRlVGltZSBDaGFuZ2VUaW1lKSkgewogICAgICAgICRDaGFuZ2VEYXRhLT57JFRpbWVDb2x1bW59ID1+IHN7IFxEIH17fXhtc2c7CiAgICB9CgogICAgcHVzaCBAQ2hhbmdlc0ZvclNlY29uZE9yZGVyQnlUZXN0cywgJENoYW5nZURhdGE7Cn0KCiMgY3JlYXRlIGFuIGV4dHJhIGJsb2NrIGFzIHdlIHVzZSAibG9jYWwiCnsKICAgIG15IEBTb3J0ZWRDaGFuZ2VzID0gc29ydCB7CiAgICAgICAgJGEtPntDcmVhdGVUaW1lfSA8PT4gJGItPntDcmVhdGVUaW1lfSAgICAgICAjIGNyZWF0ZXRpbWUgaXMgc29ydGVkIGFzY2VuZGluZwogICAgICAgICAgICB8fCAkYS0+e0NoYW5nZUlEfSA8PT4gJGItPntDaGFuZ2VJRH0gICAgIyBjaGFuZ2VpZCBpcyBzb3J0ZWQgYXNjZW5kaW5nCiAgICB9IEBDaGFuZ2VzRm9yU2Vjb25kT3JkZXJCeVRlc3RzOwogICAgbXkgQFNvcnRlZElEcyA9IG1hcCB7ICRfLT57Q2hhbmdlSUR9IH0gQFNvcnRlZENoYW5nZXM7CgogICAgIyB0dXJuIG9mZiBhbGwgcHJldHR5IHByaW50CiAgICBsb2NhbCAkRGF0YTo6RHVtcGVyOjpJbmRlbnQgPSAwOwogICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6VXNlcXEgID0gMTsKCiAgICBteSAkU2VhcmNoUmVzdWx0ID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgIENoYW5nZVRpdGxlICAgICAgPT4gJ09yZGVyQnlDaGFuZ2UgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gWyAnQ3JlYXRlVGltZScsICdDaGFuZ2VJRCcgXSwKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsgJ1VwJywgJ1VwJyBdLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICk7CgogICAgIyBkdW1wIHRoZSBhdHRyaWJ1dGUgZnJvbSBDaGFuZ2VHZXQoKQogICAgbXkgJFNlYXJjaExpc3QgPSBEYXRhOjpEdW1wZXI6OkR1bXBlcigkU2VhcmNoUmVzdWx0KTsgICAgIyMgbm8gY3JpdGljCgogICAgIyBkdW1wIHRoZSByZWZlcmVuY2UgYXR0cmlidXRlCiAgICBteSAkUmVmZXJlbmNlTGlzdCA9IERhdGE6OkR1bXBlcjo6RHVtcGVyKCBcQFNvcnRlZElEcyApOyAgICAjIyBubyBjcml0aWMKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFNlYXJjaExpc3QsCiAgICAgICAgJFJlZmVyZW5jZUxpc3QsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICI6IENoYW5nZVNlYXJjaCgpIE9yZGVyQnkgQ3JlYXRlVGltZSAoRG93bikgYW5kIENoYW5nZUlEIChVcCkuIgogICAgKTsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGFkdmFuY2VkIHNlYXJjaCBieSB0ZXN0cyBmb3IgdGltZXMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwpteSAkVFNUQ2hhbmdlVGl0bGUgPSAnVGltZVNlYXJjaFRlc3QgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlOwpteSBAVFNUQ2hhbmdlSURzOwpteSBAVGltZVNlYXJjaFRlc3RzID0gKAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdJbnNlcnQgY2hhbmdlIHdpdGggb25lIHdvcmtvcmRlciBpbiB0aGUgMTl0aCBjZW50dXJ5LicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJzE5MDktMDEtMDEgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWUgICA9PiAnMTkwOS0wMS0zMCAwMDowMDowMCcsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWUgID0+ICcxOTA5LTAxLTAyIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIEFjdHVhbEVuZFRpbWUgICAgPT4gJzE5MDktMDEtMjkgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdJbnNlcnQgY2hhbmdlIHdpdGggb25lIHdvcmtvcmRlciBpbiB0aGUgMTl0aCBjZW50dXJ5LicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJzE5MDktMDEtMTAgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWUgICA9PiAnMTkwOS0wMS0yMCAwMDowMDowMCcsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWUgID0+ICcxOTA5LTAxLTExIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIEFjdHVhbEVuZFRpbWUgICAgPT4gJzE5MDktMDEtMTkgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdJbnNlcnQgY2hhbmdlIHdpdGggb25lIHdvcmtvcmRlciBpbiB0aGUgMTl0aCBjZW50dXJ5LicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJzE5MDktMDItMDEgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWUgICA9PiAnMTkwOS0wMi0yNyAwMDowMDowMCcsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWUgID0+ICcxOTA5LTAyLTAyIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIEFjdHVhbEVuZFRpbWUgICAgPT4gJzE5MDktMDItMjYgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdJbnNlcnQgY2hhbmdlIHdpdGggb25lIHdvcmtvcmRlciBpbiB0aGUgMTl0aCBjZW50dXJ5LicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJzE5MDktMDMtMDEgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWUgICA9PiAnMTkwOS0wNC0wNyAwMDowMDowMCcsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWUgID0+ICcxOTA5LTAyLTIwIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIEFjdHVhbEVuZFRpbWUgICAgPT4gJzE5MDktMDUtMDEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiAgICAjIHRlc3QgZm9yIHBsYW5uZWQgc3RhcnQgdGltZQogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBQbGFubmVkU3RhcnRUaW1lTmV3ZXJEYXRlIGFuZCBQbGFubmVkU3RhcnRUaW1lT2xkZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgICAgICAgICAgICA9PiAkVFNUQ2hhbmdlVGl0bGUsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQbGFubmVkU3RhcnRUaW1lTmV3ZXJEYXRlID0+ICcxOTA5LTAxLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWVPbGRlckRhdGUgPT4gJzE5MDktMDEtMDIgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgIDAsCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgUGxhbm5lZFN0YXJ0VGltZU5ld2VyRGF0ZSBhbmQgUGxhbm5lZFN0YXJ0VGltZU9sZGVyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICAgICAgICAgICAgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZU5ld2VyRGF0ZSA9PiAnMTkwOC0xMi0wMSAwMDowMDowMCcsCiAgICAgICAgICAgICAgICBQbGFubmVkU3RhcnRUaW1lT2xkZXJEYXRlID0+ICcxOTA4LTEyLTMxIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gW10sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIFBsYW5uZWRTdGFydFRpbWVOZXdlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgICAgICAgICAgID0+ICRUU1RDaGFuZ2VUaXRsZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWVOZXdlckRhdGUgPT4gJzE5MDktMDItMDEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbIDIsIDMsIF0sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIFBsYW5uZWRTdGFydFRpbWVOZXdlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgICAgICAgICAgID0+ICRUU1RDaGFuZ2VUaXRsZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWVOZXdlckRhdGUgPT4gJzE5MDktMTItMDEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgUGxhbm5lZFN0YXJ0VGltZU9sZGVyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICAgICAgICAgICAgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZU9sZGVyRGF0ZSA9PiAnMTkwOS0wMS0xMCAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsgMCwgMSwgXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgUGxhbm5lZFN0YXJ0VGltZU9sZGVyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICAgICAgICAgICAgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZU9sZGVyRGF0ZSA9PiAnMTkwOC0wMS0zMSAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFtdLAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBQbGFubmVkU3RhcnRUaW1lTmV3ZXJEYXRlIGFuZCBQbGFubmVkU3RhcnRUaW1lT2xkZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgICAgICAgICAgICA9PiAkVFNUQ2hhbmdlVGl0bGUsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQbGFubmVkU3RhcnRUaW1lTmV3ZXJEYXRlID0+ICcxOTA5LTEyLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWVPbGRlckRhdGUgPT4gJzE5MDgtMTItMDEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKICAgICMgdGVzdCBmb3IgcGxhbm5lZCBlbmQgdGltZQogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBQbGFubmVkRW5kVGltZU5ld2VyRGF0ZSBhbmQgUGxhbm5lZEVuZFRpbWVPbGRlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgICAgICAgICA9PiAkVFNUQ2hhbmdlVGl0bGUsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWVOZXdlckRhdGUgPT4gJzE5MDktMDEtMzAgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWVPbGRlckRhdGUgPT4gJzE5MDktMDEtMzEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgIDAsCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgUGxhbm5lZEVuZFRpbWVOZXdlckRhdGUgYW5kIFBsYW5uZWRFbmRUaW1lT2xkZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgICAgICAgICAgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lTmV3ZXJEYXRlID0+ICcxOTA4LTEyLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lT2xkZXJEYXRlID0+ICcxOTA4LTEyLTMxIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gW10sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIFBsYW5uZWRFbmRUaW1lTmV3ZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgICAgICAgICAgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lTmV3ZXJEYXRlID0+ICcxOTA5LTAyLTI3IDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWyAyLCAzLCBdLAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBQbGFubmVkRW5kVGltZU5ld2VyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICAgICAgICAgID0+ICRUU1RDaGFuZ2VUaXRsZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQbGFubmVkRW5kVGltZU5ld2VyRGF0ZSA9PiAnMTkwOS0wNS0wMSAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFtdLAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBQbGFubmVkRW5kVGltZU9sZGVyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICAgICAgICAgID0+ICRUU1RDaGFuZ2VUaXRsZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQbGFubmVkRW5kVGltZU9sZGVyRGF0ZSA9PiAnMTkwOS0wMS0yNSAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsgMSwgXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgUGxhbm5lZEVuZFRpbWVPbGRlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgICAgICAgICA9PiAkVFNUQ2hhbmdlVGl0bGUsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWVPbGRlckRhdGUgPT4gJzE5MDgtMDEtMzEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgUGxhbm5lZEVuZFRpbWVOZXdlckRhdGUgYW5kIFBsYW5uZWRFbmRUaW1lT2xkZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgICAgICAgICAgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lTmV3ZXJEYXRlID0+ICcxOTA5LTA1LTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lT2xkZXJEYXRlID0+ICcxOTA4LTEyLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gW10sCiAgICB9LAoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiAgICAjIHRlc3QgZm9yIGFjdHVhbCBzdGFydCB0aW1lCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIEFjdHVhbFN0YXJ0VGltZU5ld2VyRGF0ZSBhbmQgQWN0dWFsU3RhcnRUaW1lT2xkZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgICAgICAgICAgID0+ICRUU1RDaGFuZ2VUaXRsZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQWN0dWFsU3RhcnRUaW1lTmV3ZXJEYXRlID0+ICcxOTA5LTAxLTAyIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZU9sZGVyRGF0ZSA9PiAnMTkwOS0wMS0wMiAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsKICAgICAgICAgICAgMCwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBBY3R1YWxTdGFydFRpbWVOZXdlckRhdGUgYW5kIEFjdHVhbFN0YXJ0VGltZU9sZGVyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICAgICAgICAgICA9PiAkVFNUQ2hhbmdlVGl0bGUsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZU5ld2VyRGF0ZSA9PiAnMTkwOC0xMi0wMSAwMDowMDowMCcsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWVPbGRlckRhdGUgPT4gJzE5MDgtMTItMzEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgQWN0dWFsU3RhcnRUaW1lTmV3ZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgICAgICAgICAgID0+ICRUU1RDaGFuZ2VUaXRsZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQWN0dWFsU3RhcnRUaW1lTmV3ZXJEYXRlID0+ICcxOTA5LTAyLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWyAyLCAzLCBdLAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBBY3R1YWxTdGFydFRpbWVOZXdlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgICAgICAgICAgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWVOZXdlckRhdGUgPT4gJzE5MDktMTItMzAgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgQWN0dWFsU3RhcnRUaW1lT2xkZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgICAgICAgICAgID0+ICRUU1RDaGFuZ2VUaXRsZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQWN0dWFsU3RhcnRUaW1lT2xkZXJEYXRlID0+ICcxOTA5LTAxLTEyIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWyAwLCAxLCBdLAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBBY3R1YWxTdGFydFRpbWVPbGRlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgICAgICAgICAgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWVPbGRlckRhdGUgPT4gJzE5MDgtMDEtMzEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgQWN0dWFsU3RhcnRUaW1lTmV3ZXJEYXRlIGFuZCBBY3R1YWxTdGFydFRpbWVPbGRlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgICAgICAgICAgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWVOZXdlckRhdGUgPT4gJzE5MDktMTItMDEgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgQWN0dWFsU3RhcnRUaW1lT2xkZXJEYXRlID0+ICcxOTA4LTEyLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gW10sCiAgICB9LAoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiAgICAjIHRlc3QgZm9yIGFjdHVhbCBlbmQgdGltZQogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBBY3R1YWxFbmRUaW1lTmV3ZXJEYXRlIGFuZCBBY3R1YWxFbmRUaW1lT2xkZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgICAgICAgICA9PiAkVFNUQ2hhbmdlVGl0bGUsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lTmV3ZXJEYXRlID0+ICcxOTA5LTAxLTI4IDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIEFjdHVhbEVuZFRpbWVPbGRlckRhdGUgPT4gJzE5MDktMDEtMjkgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgIDAsCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgQWN0dWFsRW5kVGltZU5ld2VyRGF0ZSBhbmQgQWN0dWFsRW5kVGltZU9sZGVyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICAgICAgICAgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZU5ld2VyRGF0ZSA9PiAnMTkwOC0xMi0wMSAwMDowMDowMCcsCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lT2xkZXJEYXRlID0+ICcxOTA4LTEyLTMxIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gW10sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIEFjdHVhbEVuZFRpbWVOZXdlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgICAgICAgID0+ICRUU1RDaGFuZ2VUaXRsZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEFjdHVhbEVuZFRpbWVOZXdlckRhdGUgPT4gJzE5MDktMDItMjYgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbIDIsIDMsIF0sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIEFjdHVhbEVuZFRpbWVOZXdlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgICAgICAgID0+ICRUU1RDaGFuZ2VUaXRsZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEFjdHVhbEVuZFRpbWVOZXdlckRhdGUgPT4gJzE5MDktMTItMDEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgQWN0dWFsRW5kVGltZU9sZGVyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICAgICAgICAgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZU9sZGVyRGF0ZSA9PiAnMTkwOS0wMS0yOSAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsgMCwgMSwgXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgQWN0dWFsRW5kVGltZU9sZGVyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICAgICAgICAgPT4gJFRTVENoYW5nZVRpdGxlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZU9sZGVyRGF0ZSA9PiAnMTkwOC0xMi0wMSAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFtdLAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBBY3R1YWxFbmRUaW1lTmV3ZXJEYXRlIGFuZCBBY3R1YWxFbmRUaW1lT2xkZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICAgICAgICAgICA9PiAkVFNUQ2hhbmdlVGl0bGUsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lTmV3ZXJEYXRlID0+ICcxOTA5LTEyLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIEFjdHVhbEVuZFRpbWVPbGRlckRhdGUgPT4gJzE5MDgtMTItMzEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCgopOwoKbXkgJFRTVENvdW50ZXIgPSAxOwpteSBAVFNUV29ya09yZGVySURzOwpUU1RFU1Q6CmZvciBteSAkVGVzdCAoQFRpbWVTZWFyY2hUZXN0cykgewogICAgbXkgJFNvdXJjZURhdGEgICAgPSAkVGVzdC0+e1NvdXJjZURhdGF9OwogICAgbXkgJFJlZmVyZW5jZURhdGEgPSAkVGVzdC0+e1JlZmVyZW5jZURhdGF9OwoKICAgIG15ICRDaGFuZ2VJRDsKICAgIG15ICRXb3JrT3JkZXJJRDsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAxLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6ICRUZXN0LT57RGVzY3JpcHRpb259IChUU1Rlc3QgY2FzZTogJFRTVENvdW50ZXIpIiwKICAgICk7CgogICAgaWYgKCAkU291cmNlRGF0YS0+e0NoYW5nZUFkZH0gKSB7CiAgICAgICAgJENoYW5nZUlEID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICAleyAkU291cmNlRGF0YS0+e0NoYW5nZUFkZH0gfSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBDaGFuZ2VBZGQiLAogICAgICAgICk7CgogICAgICAgIGlmICgkQ2hhbmdlSUQpIHsKICAgICAgICAgICAgJFRlc3RlZENoYW5nZUlEeyRDaGFuZ2VJRH0gPSAxOwogICAgICAgICAgICBwdXNoIEBUU1RDaGFuZ2VJRHMsICRDaGFuZ2VJRDsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkU291cmNlRGF0YS0+e1dvcmtPcmRlckFkZH0gKSB7CiAgICAgICAgJFdvcmtPcmRlcklEID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQWRkKAogICAgICAgICAgICAleyAkU291cmNlRGF0YS0+e1dvcmtPcmRlckFkZH0gfSwKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkV29ya09yZGVySUQsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIFdvcmtPcmRlckFkZCIsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAVFNUV29ya09yZGVySURzLCAkV29ya09yZGVySUQ7CiAgICB9CgogICAgbXkgJFNlYXJjaFJlc3VsdDsKICAgIGlmICggJFNvdXJjZURhdGEtPntDaGFuZ2VTZWFyY2h9ICkgewogICAgICAgICRTZWFyY2hSZXN1bHQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VTZWFyY2goCiAgICAgICAgICAgICV7ICRTb3VyY2VEYXRhLT57Q2hhbmdlU2VhcmNofSB9LAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VhcmNoUmVzdWx0ICYmIHJlZiAkU2VhcmNoUmVzdWx0IGVxICdBUlJBWScsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENoYW5nZVNlYXJjaCgpIC0gTGlzdCBpcyBhbiBhcnJheSByZWZlcmVuY2UuIiwKICAgICAgICApOwoKICAgICAgICBuZXh0IFRTVEVTVCBpZiAhJFNlYXJjaFJlc3VsdDsKCiAgICAgICAgIyBjaGVjayBudW1iZXIgb2YgZm91bmRlZCBjaGFuZ2UKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIHNjYWxhciBAeyRTZWFyY2hSZXN1bHR9LAogICAgICAgICAgICBzY2FsYXIgQHskUmVmZXJlbmNlRGF0YX0sCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENoYW5nZVNlYXJjaCgpIC0gY29ycmVjdCBudW1iZXIgb2YgZm91bmQgY2hhbmdlcyIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYXAgYXJyYXkgaW5kZXggdG8gQ2hhbmdlSUQKICAgICAgICBteSBAUmVzdWx0Q2hhbmdlSURzOwogICAgICAgIGZvciBteSAkUmVzdWx0Q2hhbmdlSUQgKCBAeyRSZWZlcmVuY2VEYXRhfSApIHsKICAgICAgICAgICAgcHVzaCBAUmVzdWx0Q2hhbmdlSURzLCAkVFNUQ2hhbmdlSURzWyRSZXN1bHRDaGFuZ2VJRF07CiAgICAgICAgfQoKICAgICAgICAjIHR1cm4gb2ZmIGFsbCBwcmV0dHkgcHJpbnQKICAgICAgICBsb2NhbCAkRGF0YTo6RHVtcGVyOjpJbmRlbnQgPSAwOwogICAgICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OlVzZXFxICA9IDE7CgogICAgICAgICMgZHVtcCB0aGUgYXR0cmlidXRlIGZyb20gQ2hhbmdlU2VhcmNoKCkgYW5kIHRoZSByZWZlcmVuY2UgYXR0cmlidXRlCiAgICAgICAgIyMgbm8gY3JpdGljCiAgICAgICAgbXkgJFNlYXJjaFJlc3VsdER1bXAgPSBEYXRhOjpEdW1wZXI6OkR1bXBlciggc29ydCBAeyRTZWFyY2hSZXN1bHR9ICk7CiAgICAgICAgbXkgJFJlZmVyZW5jZUR1bXAgICAgPSBEYXRhOjpEdW1wZXI6OkR1bXBlciggc29ydCBAUmVzdWx0Q2hhbmdlSURzICk7CiAgICAgICAgIyMgdXNlIGNyaXRpYwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWFyY2hSZXN1bHREdW1wLAogICAgICAgICAgICAkUmVmZXJlbmNlRHVtcCwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gQ2hhbmdlU2VhcmNoKCk6ICIKICAgICAgICAgICAgICAgIC4gRGF0YTo6RHVtcGVyOjpEdW1wZXIoICRTb3VyY2VEYXRhLT57Q2hhbmdlU2VhcmNofSApICAgICMjIG5vIGNyaXRpYwogICAgICAgICAgICAgICAgLiAkU2VhcmNoUmVzdWx0RHVtcCwKICAgICAgICApOwogICAgfQoKICAgICRUZXN0Q291bnQrKzsKICAgICRUU1RDb3VudGVyKys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyAnT3JkZXJCeScgdGVzdHMgZm9yIENJUCBjb2x1bW5zCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IHRocmVlIGNoYW5nZSBpZHMuIFRoZW4gZ2V0IHRoZSBkYXRhLiBUaGF0IGlzIG5lZWRlZCBmb3Igc29ydGluZwpteSBAT3JkZXJCeUNJUENoYW5nZUlEcyA9IEB7ICRMYWJlbDJDaGFuZ2VJRHN7T3JkZXJCeUNJUFRlc3RzfSB9OwpteSBAT3JkZXJCeUNJUENoYW5nZXM7Cgpmb3IgbXkgJENoYW5nZUlERm9yT3JkZXJCeUNJUFRlc3RzIChAT3JkZXJCeUNJUENoYW5nZUlEcykgewogICAgbXkgJENoYW5nZURhdGEgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlERm9yT3JkZXJCeUNJUFRlc3RzLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKICAgIHB1c2ggQE9yZGVyQnlDSVBDaGFuZ2VzLCAkQ2hhbmdlRGF0YTsKfQoKbXkgQE9yZGVyQnlDSVBDb2x1bW5zID0gcXcoCiAgICBDYXRlZ29yeUlECiAgICBJbXBhY3RJRAogICAgUHJpb3JpdHlJRAopOwoKZm9yIG15ICRDSVBDb2x1bW4gKEBPcmRlckJ5Q0lQQ29sdW1ucykgewoKICAgICMgdHVybiBvZmYgYWxsIHByZXR0eSBwcmludAogICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6SW5kZW50ID0gMDsKICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OlVzZXFxICA9IDE7CgogICAgbXkgQFNvcnRlZENoYW5nZXMgPSBzb3J0IHsKICAgICAgICAkYS0+eyRDSVBDb2x1bW59IDw9PiAkYi0+eyRDSVBDb2x1bW59CiAgICAgICAgICAgIHx8ICRiLT57Q2hhbmdlSUR9IDw9PiAkYS0+e0NoYW5nZUlEfQogICAgfSBAT3JkZXJCeUNJUENoYW5nZXM7CgogICAgbXkgQFNvcnRlZElEcyA9IG1hcCB7ICRfLT57Q2hhbmdlSUR9IH0gQFNvcnRlZENoYW5nZXM7CgogICAgIyBkdW1wIHRoZSByZWZlcmVuY2UgYXR0cmlidXRlCiAgICBteSAkUmVmZXJlbmNlTGlzdCA9IERhdGE6OkR1bXBlcjo6RHVtcGVyKCBcQFNvcnRlZElEcyApOyAgICAjIyBubyBjcml0aWMKCiAgICBteSAkU2VhcmNoUmVzdWx0ID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgIENoYW5nZVRpdGxlICAgICAgPT4gJyVDSVAlJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBbJENJUENvbHVtbl0sCiAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbJ1VwJ10sCiAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgKTsKCiAgICAjIGR1bXAgdGhlIGF0dHJpYnV0ZSBmcm9tIENoYW5nZUdldCgpCiAgICBteSAkU2VhcmNoTGlzdCA9IERhdGE6OkR1bXBlcjo6RHVtcGVyKCRTZWFyY2hSZXN1bHQpOyAgICAgICAjIyBubyBjcml0aWMKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFNlYXJjaExpc3QsCiAgICAgICAgJFJlZmVyZW5jZUxpc3QsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICI6IENoYW5nZVNlYXJjaCgpIE9yZGVyQnkgJENJUENvbHVtbiAoVXApLiIKICAgICk7CgogICAgbXkgQFNvcnRlZENoYW5nZXNEb3duID0gc29ydCB7CiAgICAgICAgJGItPnskQ0lQQ29sdW1ufSA8PT4gJGEtPnskQ0lQQ29sdW1ufQogICAgICAgICAgICB8fCAkYi0+e0NoYW5nZUlEfSA8PT4gJGEtPntDaGFuZ2VJRH0KICAgIH0gQE9yZGVyQnlDSVBDaGFuZ2VzOwoKICAgIG15IEBTb3J0ZWRJRHNEb3duID0gbWFwIHsgJF8tPntDaGFuZ2VJRH0gfSBAU29ydGVkQ2hhbmdlc0Rvd247CgogICAgIyBkdW1wIHRoZSByZWZlcmVuY2UgYXR0cmlidXRlCiAgICBteSAkUmVmZXJlbmNlTGlzdERvd24gPSBEYXRhOjpEdW1wZXI6OkR1bXBlciggXEBTb3J0ZWRJRHNEb3duICk7ICAgICMjIG5vIGNyaXRpYwoKICAgIG15ICRTZWFyY2hSZXN1bHREb3duID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgIENoYW5nZVRpdGxlID0+ICclQ0lQJScgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIE9yZGVyQnkgICAgID0+IFskQ0lQQ29sdW1uXSwKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKCiAgICAjIGR1bXAgdGhlIGF0dHJpYnV0ZSBmcm9tIENoYW5nZUdldCgpCiAgICBteSAkU2VhcmNoTGlzdERvd24gPSBEYXRhOjpEdW1wZXI6OkR1bXBlcigkU2VhcmNoUmVzdWx0RG93bik7ICAgICAgICMjIG5vIGNyaXRpYwoKICAgICRTZWxmLT5JcygKICAgICAgICAkU2VhcmNoTGlzdERvd24sCiAgICAgICAgJFJlZmVyZW5jZUxpc3REb3duLAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiOiBDaGFuZ2VTZWFyY2goKSBPcmRlckJ5ICRDSVBDb2x1bW4gKERvd24pLiIKICAgICk7CgogICAgIyBjaGVjayBpZiBJVFNNQ2hhbmdlLnBtIGhhbmRsZXMgbm9uLWV4aXN0ZW50IE9yZGVyQnlEaXJlY3Rpb24gY3JpdGVyaWEgY29ycmVjdAogICAgbXkgJFNlYXJjaFJlc3VsdFNpZGV3YXlzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgIENoYW5nZVRpdGxlICAgICAgPT4gJyVDSVAlJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBbJENJUENvbHVtbl0sCiAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbJ1NpZGV3YXlzJ10sCiAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFNlYXJjaFJlc3VsdFNpZGV3YXlzLAogICAgICAgIHVuZGVmLAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiOiBDaGFuZ2VTZWFyY2goKSBPcmRlckJ5ICRDSVBDb2x1bW4gKFNpZGV3YXlzKS4iCiAgICApOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgYWR2YW5jZWQgc2VhcmNoIGJ5IHRlc3RzIGZvciB3b3Jrb3JkZXIgc3RyaW5ncyBhbmQgYWdlbnQgaWQKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwpteSBAV09TdHJpbmdBbmRBZ2VudFNlYXJjaFRlc3RzID0gKAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnSW5zZXJ0IGNoYW5nZSB3aXRoIG9uZSB3b3Jrb3JkZXIgYW5kIHdpdGggc2V0IHN0cmluZyBmaWVsZHMuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlICAgPT4gJ1N0cmluZyBUZXN0IDEgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgICA9PiAnU3RyaW5nIFRlc3QgMSAtIEluc3RydWN0aW9uIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBSZXBvcnQgICAgICAgICAgID0+ICdTdHJpbmcgVGVzdCAxIC0gUmVwb3J0IC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJBZ2VudElEID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBXb3JrT3JkZXJUaXRsZScsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdTdHJpbmcgVGVzdCAxIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWzBdLAogICAgfSwKCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3Igbm9uLWV4aXN0aW5nIFdvcmtPcmRlclRpdGxlJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJ05PTkVYSVNURU5UIFN0cmluZyBUZXN0IDEgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIFdvcmtPcmRlciBJbnN0cnVjdGlvbicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlckluc3RydWN0aW9uID0+ICdTdHJpbmcgVGVzdCAxIC0gSW5zdHJ1Y3Rpb24gLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWzBdLAogICAgfSwKCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3Igbm9uLWV4aXN0aW5nIFdvcmtPcmRlciBJbnN0cnVjdGlvbicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlckluc3RydWN0aW9uID0+ICdOT05FWElTVEVOVCBTdHJpbmcgVGVzdCAxIC0gSW5zdHJ1Y3Rpb24gLSAnCiAgICAgICAgICAgICAgICAgICAgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIFdvcmtPcmRlciBSZXBvcnQnLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgV29ya09yZGVyUmVwb3J0ID0+ICdTdHJpbmcgVGVzdCAxIC0gUmVwb3J0IC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFswXSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIG5vbi1leGlzdGluZyBXb3JrT3JkZXIgUmVwb3J0JywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZVNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclJlcG9ydCA9PiAnTk9ORVhJU1RFTlQgU3RyaW5nIFRlc3QgMSAtIFJlcG9ydCAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIGV4aXN0aW5nIFdvcmtPcmRlckFnZW50SUQnLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJBZ2VudElEcyA9PiBbICRVc2VySURzWzFdIF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFswXSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIGV4aXN0aW5nIGFuZCBub24tZXhpc3RpbmcgV29ya09yZGVyQWdlbnRJRCcsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlckFnZW50SURzID0+IFsgQFVzZXJJRHNbIDAsIDEgXSBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbMF0sCiAgICB9LAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBub24tZXhpc3RpbmcgV29ya09yZGVyQWdlbnRJRCcsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlckFnZW50SURzID0+IFsgJFVzZXJJRHNbMF0gXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gW10sCiAgICB9LAopOwoKbXkgJFdPU1RDb3VudGVyID0gMTsKbXkgQFdPU1RDaGFuZ2VJRHM7ICAgICAgICMgc2VhcmNoIGluIHdvcmtvcmRlciB0ZXN0IGNoYW5nZSBpZHMKbXkgQFdPU1RXb3JrT3JkZXJJRHM7ICAgICMgc2VhcmNoIGluIHdvcmtvcmRlciB0ZXN0IHdvcmtvcmRlciBpZHMKV09TVEVTVDoKZm9yIG15ICRUZXN0IChAV09TdHJpbmdBbmRBZ2VudFNlYXJjaFRlc3RzKSB7CiAgICBteSAkU291cmNlRGF0YSAgICA9ICRUZXN0LT57U291cmNlRGF0YX07CiAgICBteSAkUmVmZXJlbmNlRGF0YSA9ICRUZXN0LT57UmVmZXJlbmNlRGF0YX07CgogICAgbXkgJENoYW5nZUlEOwogICAgbXkgJFdvcmtPcmRlcklEOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDEsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogJFRlc3QtPntEZXNjcmlwdGlvbn0gKFdPU1Rlc3QgY2FzZTogJFdPU1RDb3VudGVyKSIsCiAgICApOwoKICAgIGlmICggJFNvdXJjZURhdGEtPntDaGFuZ2VBZGR9ICkgewogICAgICAgICRDaGFuZ2VJRCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgJXsgJFNvdXJjZURhdGEtPntDaGFuZ2VBZGR9IH0sCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gQ2hhbmdlQWRkIiwKICAgICAgICApOwoKICAgICAgICBpZiAoJENoYW5nZUlEKSB7CiAgICAgICAgICAgICRUZXN0ZWRDaGFuZ2VJRHskQ2hhbmdlSUR9ID0gMTsKICAgICAgICAgICAgcHVzaCBAV09TVENoYW5nZUlEcywgJENoYW5nZUlEOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRTb3VyY2VEYXRhLT57V29ya09yZGVyQWRkfSApIHsKICAgICAgICAkV29ya09yZGVySUQgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBZGQoCiAgICAgICAgICAgICV7ICRTb3VyY2VEYXRhLT57V29ya09yZGVyQWRkfSB9LAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gV29ya09yZGVyQWRkIiwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBXT1NUV29ya09yZGVySURzLCAkV29ya09yZGVySUQ7CiAgICB9CgogICAgbXkgJFNlYXJjaFJlc3VsdDsKICAgIGlmICggJFNvdXJjZURhdGEtPntDaGFuZ2VTZWFyY2h9ICkgewogICAgICAgICRTZWFyY2hSZXN1bHQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VTZWFyY2goCiAgICAgICAgICAgICV7ICRTb3VyY2VEYXRhLT57Q2hhbmdlU2VhcmNofSB9LAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VhcmNoUmVzdWx0ICYmIHJlZiAkU2VhcmNoUmVzdWx0IGVxICdBUlJBWScsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENoYW5nZVNlYXJjaCgpIC0gTGlzdCBpcyBhbiBhcnJheSByZWZlcmVuY2UuIiwKICAgICAgICApOwoKICAgICAgICBuZXh0IFdPU1RFU1QgaWYgISRTZWFyY2hSZXN1bHQ7CgogICAgICAgICMgY2hlY2sgbnVtYmVyIG9mIGZvdW5kIGNoYW5nZXMKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIHNjYWxhciBAeyRTZWFyY2hSZXN1bHR9LAogICAgICAgICAgICBzY2FsYXIgQHskUmVmZXJlbmNlRGF0YX0sCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENoYW5nZVNlYXJjaCgpIC0gY29ycmVjdCBudW1iZXIgb2YgZm91bmQgY2hhbmdlcyIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYXAgYXJyYXkgaW5kZXggdG8gQ2hhbmdlSUQKICAgICAgICBteSBAUmVzdWx0Q2hhbmdlSURzOwogICAgICAgIGZvciBteSAkUmVzdWx0Q2hhbmdlSUQgKCBAeyRSZWZlcmVuY2VEYXRhfSApIHsKICAgICAgICAgICAgcHVzaCBAUmVzdWx0Q2hhbmdlSURzLCAkV09TVENoYW5nZUlEc1skUmVzdWx0Q2hhbmdlSURdOwogICAgICAgIH0KCiAgICAgICAgIyB0dXJuIG9mZiBhbGwgcHJldHR5IHByaW50CiAgICAgICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6SW5kZW50ID0gMDsKICAgICAgICBsb2NhbCAkRGF0YTo6RHVtcGVyOjpVc2VxcSAgPSAxOwoKICAgICAgICAjIGR1bXAgdGhlIGF0dHJpYnV0ZSBmcm9tIENoYW5nZVNlYXJjaCgpCiAgICAgICAgbXkgJFNlYXJjaFJlc3VsdER1bXAgPSBEYXRhOjpEdW1wZXI6OkR1bXBlciggc29ydCBAeyRTZWFyY2hSZXN1bHR9ICk7ICAgICMjIG5vIGNyaXRpYwoKICAgICAgICAjIGR1bXAgdGhlIHJlZmVyZW5jZSBhdHRyaWJ1dGUKICAgICAgICBteSAkUmVmZXJlbmNlRHVtcCA9IERhdGE6OkR1bXBlcjo6RHVtcGVyKCBzb3J0IEBSZXN1bHRDaGFuZ2VJRHMgKTsgICAgICAgIyMgbm8gY3JpdGljCgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlYXJjaFJlc3VsdER1bXAsCiAgICAgICAgICAgICRSZWZlcmVuY2VEdW1wLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBDaGFuZ2VTZWFyY2goKTogIgogICAgICAgICAgICAgICAgLiBEYXRhOjpEdW1wZXI6OkR1bXBlciggJFNvdXJjZURhdGEtPntDaGFuZ2VTZWFyY2h9ICkgICAgICAgICAgICAjIyBubyBjcml0aWMKICAgICAgICAgICAgICAgIC4gJFNlYXJjaFJlc3VsdER1bXAsCiAgICAgICAgKTsKICAgIH0KCiAgICAkVGVzdENvdW50Kys7CiAgICAkV09TVENvdW50ZXIrKzsKfQoKIyBlYWNoIG9mIHRoZSBjaGFuZ2VzIHNob3VsZCBoYXZlIG9uZSB3b3Jrb3JkZXIKZm9yIG15ICRDaGFuZ2VJRCAoQFdPU1RDaGFuZ2VJRHMpIHsKICAgIG15ICRDaGFuZ2VEYXRhID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKICAgICRTZWxmLT5JcygKICAgICAgICAkQ2hhbmdlRGF0YS0+e1dvcmtPcmRlckNvdW50fSwKICAgICAgICAxLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIENoYW5nZUdldCgpOiBvbmUgd29ya29yZGVyIHdhcyBhZGRlZCIKICAgICk7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBhZHZhbmNlZCBzZWFyY2ggYnkgdGVzdHMgZm9yIHdvcmtvcmRlciBzdHJpbmdzIGFuZCBhZ2VudCBpZAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZ2V0IGl0ZW0gbGlzdCBvZiB0aGUgd29ya29yZGVyIHN0YXRlcyB3aXRoIHN3YXBwZWQga2V5cyBhbmQgdmFsdWVzCm15ICVXb3JrT3JkZXJTdGF0ZUlEMk5hbWUgPSAlewogICAgJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpTdGF0ZScsCiAgICApIHx8IHt9Cn07Cm15ICVXb3JrT3JkZXJTdGF0ZU5hbWUySUQgPSByZXZlcnNlICVXb3JrT3JkZXJTdGF0ZUlEMk5hbWU7CgpteSBAV09TdGF0ZVRlc3RzID0gKAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnSW5zZXJ0IGNoYW5nZSB3aXRoIG9uZSB3b3Jrb3JkZXIgYW5kIHdpdGggV29ya09yZGVyU3RhdGUgc2V0LicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICdXb3JrT3JkZXJTdGF0ZUlEIGluIENoYW5nZVNlYXJjaCAtIFRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZUlEID0+ICRXb3JrT3JkZXJTdGF0ZU5hbWUySUR7cmVhZHl9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBDaGFuZ2VTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlICAgID0+ICdXb3JrT3JkZXJTdGF0ZUlEIGluIENoYW5nZVNlYXJjaCAtIFRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZUlEcyA9PiBbICRXb3JrT3JkZXJTdGF0ZU5hbWUySUR7cmVhZHl9IF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsxXSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdJbnNlcnQgY2hhbmdlIHdpdGggb25lIHdvcmtvcmRlciBhbmQgd2l0aCBXb3JrT3JkZXJTdGF0ZSBzZXQuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlICAgPT4gJ1dvcmtPcmRlclN0YXRlSUQgaW4gQ2hhbmdlU2VhcmNoIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlSUQgPT4gJFdvcmtPcmRlclN0YXRlTmFtZTJJRHtjYW5jZWxlZH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZVNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgICAgPT4gJ1dvcmtPcmRlclN0YXRlSUQgaW4gQ2hhbmdlU2VhcmNoIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlSURzID0+IFsgJFdvcmtPcmRlclN0YXRlTmFtZTJJRHtjYW5jZWxlZH0gXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWzJdLAogICAgfSwKCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0luc2VydCBjaGFuZ2Ugd2l0aCBvbmUgd29ya29yZGVyIGFuZCB3aXRoIFdvcmtPcmRlclN0YXRlIHNldC4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgICA9PiAnV29ya09yZGVyU3RhdGVJRCBpbiBDaGFuZ2VTZWFyY2ggLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGVJRCA9PiAkV29ya09yZGVyU3RhdGVOYW1lMklEe2Nsb3NlZH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZVNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlICA9PiAnV29ya09yZGVyU3RhdGVJRCBpbiBDaGFuZ2VTZWFyY2ggLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGVzID0+IFsgJ3JlYWR5JywgJ2Nsb3NlZCcgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWyAxLCAzIF0sCiAgICB9LAopOwoKbXkgJFdPU3RhdGVUZXN0Q291bnRlciA9IDE7Cm15IEBXT1N0YXRlVGVzdENoYW5nZUlEczsgICAgICAgIyBzZWFyY2ggaW4gd29ya29yZGVyIHRlc3QgY2hhbmdlIGlkcwpteSBAV09TdGF0ZVRlc3RXb3JrT3JkZXJJRHM7ICAgICMgc2VhcmNoIGluIHdvcmtvcmRlciB0ZXN0IHdvcmtvcmRlciBpZHMKbXkgJVdvcmtPcmRlclN0YXRlVGVzdE1hcDsKCldPU1RBVEVURVNUOgpmb3IgbXkgJFdvcmtPcmRlclN0YXRlVGVzdCAoQFdPU3RhdGVUZXN0cykgewogICAgbXkgJFNvdXJjZURhdGEgPSAkV29ya09yZGVyU3RhdGVUZXN0LT57U291cmNlRGF0YX07CiAgICBteSAkUmVmZXJlbmNlRGF0YSA9ICRXb3JrT3JkZXJTdGF0ZVRlc3QtPntSZWZlcmVuY2VEYXRhfSB8fCBbXTsKCiAgICBteSAkQ2hhbmdlSUQ7CiAgICBteSAkV29ya09yZGVySUQ7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgMSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiAkV29ya09yZGVyU3RhdGVUZXN0LT57RGVzY3JpcHRpb259IChXT1N0YXRlVGVzdCBjYXNlOiAkV09TdGF0ZVRlc3RDb3VudGVyKSIsCiAgICApOwoKICAgIGlmICggJFNvdXJjZURhdGEtPntDaGFuZ2VBZGR9ICkgewogICAgICAgICRDaGFuZ2VJRCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgJXsgJFNvdXJjZURhdGEtPntDaGFuZ2VBZGR9IH0sCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gQ2hhbmdlQWRkIiwKICAgICAgICApOwoKICAgICAgICBpZiAoJENoYW5nZUlEKSB7CiAgICAgICAgICAgICRUZXN0ZWRDaGFuZ2VJRHskQ2hhbmdlSUR9ID0gMTsKICAgICAgICAgICAgcHVzaCBAV09TdGF0ZVRlc3RDaGFuZ2VJRHMsICRDaGFuZ2VJRDsKICAgICAgICAgICAgJFdvcmtPcmRlclN0YXRlVGVzdE1hcHskV09TdGF0ZVRlc3RDb3VudGVyfSA9ICRDaGFuZ2VJRDsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkU291cmNlRGF0YS0+e1dvcmtPcmRlckFkZH0gKSB7CiAgICAgICAgJFdvcmtPcmRlcklEID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQWRkKAogICAgICAgICAgICAleyAkU291cmNlRGF0YS0+e1dvcmtPcmRlckFkZH0gfSwKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkV29ya09yZGVySUQsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIFdvcmtPcmRlckFkZCIsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAV09TdGF0ZVRlc3RXb3JrT3JkZXJJRHMsICRXb3JrT3JkZXJJRDsKICAgIH0KCiAgICBteSAkU2VhcmNoUmVzdWx0OwogICAgaWYgKCAkU291cmNlRGF0YS0+e0NoYW5nZVNlYXJjaH0gKSB7CiAgICAgICAgJFNlYXJjaFJlc3VsdCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVNlYXJjaCgKICAgICAgICAgICAgJXsgJFNvdXJjZURhdGEtPntDaGFuZ2VTZWFyY2h9IH0sCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWFyY2hSZXN1bHQgJiYgcmVmICRTZWFyY2hSZXN1bHQgZXEgJ0FSUkFZJywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2hhbmdlU2VhcmNoKCkgLSBMaXN0IGlzIGFuIGFycmF5IHJlZmVyZW5jZS4iLAogICAgICAgICk7CgogICAgICAgIG5leHQgV09TVEFURVRFU1QgaWYgISRTZWFyY2hSZXN1bHQ7CgogICAgICAgICMgY2hlY2sgbnVtYmVyIG9mIGZvdW5kIGNoYW5nZXMKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIHNjYWxhciBAeyRTZWFyY2hSZXN1bHR9LAogICAgICAgICAgICBzY2FsYXIgQHskUmVmZXJlbmNlRGF0YX0sCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENoYW5nZVNlYXJjaCgpIC0gY29ycmVjdCBudW1iZXIgb2YgZm91bmQgY2hhbmdlcyIsCiAgICAgICAgKTsKCiAgICAgICAgIyBzYXZlIHJldHVybmVkIGlkcyBpbiBoYXNoIGZvciBlYXNpZXIgY2hlY2tzCiAgICAgICAgbXkgJVJlc3VsdElEcyA9IG1hcCB7ICRfID0+IDEgfSBAeyRTZWFyY2hSZXN1bHR9OwoKICAgICAgICAjIGNoZWNrIHJldHVybmVkIENoYW5nZUlEcwogICAgICAgIGZvciBteSAkVGVzdE5yICggQHskUmVmZXJlbmNlRGF0YX0gKSB7CiAgICAgICAgICAgIG15ICRDaGFuZ2VJRCA9ICRXb3JrT3JkZXJTdGF0ZVRlc3RNYXB7JFRlc3ROcn07CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFJlc3VsdElEc3skQ2hhbmdlSUR9LAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2hhbmdlU2VhcmNoKCkgLSAkQ2hhbmdlSUQgKGZyb20gdGVzdCAkVGVzdE5yKSBpbiByZXN1bHQgc2V0IGZvdW5kIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgfQoKICAgICRUZXN0Q291bnQrKzsKICAgICRXT1N0YXRlVGVzdENvdW50ZXIrKzsKfQoKIyBlYWNoIG9mIHRoZSBjaGFuZ2VzIHNob3VsZCBoYXZlIG9uZSB3b3Jrb3JkZXIKZm9yIG15ICRDaGFuZ2VJRCAoQFdPU3RhdGVUZXN0Q2hhbmdlSURzKSB7CiAgICBteSAkQ2hhbmdlRGF0YSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUdldCgKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJENoYW5nZURhdGEtPntXb3JrT3JkZXJDb3VudH0sCiAgICAgICAgMSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBDaGFuZ2VHZXQoKTogb25lIHdvcmtvcmRlciB3YXMgYWRkZWQiCiAgICApOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgdGVzdGluZyB0aGUgbWV0aG9kIFBlcm1pc3Npb24oKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAoJFBlcm1pc3Npb25UZXN0Q2hhbmdlSUQpID0gQHsgJExhYmVsMkNoYW5nZUlEc3tQZXJtaXNzaW9uVGVzdH0gfTsKbXkgQFBlcm1pc3Npb25UZXN0cyA9ICgKCiAgICAjIFBlcm1pc3Npb24gdGVzdCBOby4gMQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdJbml0aWFsbHkgbm8gcHJpdiBpbiBhbnkgZ3JvdXAnLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBQZXJtaXNzaW9ucyA9PiB7CiAgICAgICAgICAgICAgICAwID0+IHsKICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAxID0+IHsKICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBQZXJtaXNzaW9uIHRlc3QgTm8uIDIKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAncm8gaW4gaXRzbS1jaGFuZ2UnLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgR3JvdXBNZW1iZXJBZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UnfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFBlcm1pc3Npb25zID0+IHsKICAgICAgICAgICAgICAgIDAgPT4gewogICAgICAgICAgICAgICAgICAgIHJvID0+IDEsCiAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAxID0+IHsKICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgUGVybWlzc2lvbiB0ZXN0IE5vLiAzCiAgICB7CgogICAgICAgICMgVGhlIHR5cGUgJ3J3JyBpbXBsaWVzIGFsbCBvdGhlciB0eXBlcy4gU2VlIEtlcm5lbDo6U3lzdGVtOjpHcm91cF9HZXRUeXBlU3RyaW5nKCkKICAgICAgICAjIFRoZXJlZm9yZSBVc2VyMSBlZmZlY3RpdmVseSBoYXMgJ3JvJyBpbiAnaXRzbS1jaGFuZ2UnIGFuZAogICAgICAgICMgdGhlIENoYW5nZUFnZW50Q2hlY2sgUGVybWlzc2lvbiBtb2R1bGUgZ2l2ZXMgJ3JvJyBhY2Nlc3MuCiAgICAgICAgIyBOb3RlIHRoYXQgdGhlIENoYW5nZUFnZW50Q2hlY2sgUGVybWlzc2lvbiBtb2R1bGUgbmV2ZXIgZ2l2ZXMgJ3J3JyBhY2Nlc3MuCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ3J3IGluIGl0c20tY2hhbmdlIG9ubHkgZ3JhbnRzIHJvJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIEdyb3VwTWVtYmVyQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlJ30sCiAgICAgICAgICAgICAgICAgICAgVUlEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgcncgPT4gMSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBQZXJtaXNzaW9ucyA9PiB7CiAgICAgICAgICAgICAgICAwID0+IHsKICAgICAgICAgICAgICAgICAgICBybyA9PiAxLAogICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgMSA9PiB7CiAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFBlcm1pc3Npb24gdGVzdCBOby4gNAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdybyBpbiBpdHNtLWNoYW5nZS1tYW5hZ2VyJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIEdyb3VwTWVtYmVyQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlJ30sCiAgICAgICAgICAgICAgICAgICAgVUlEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlLW1hbmFnZXInfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFBlcm1pc3Npb25zID0+IHsKICAgICAgICAgICAgICAgIDAgPT4gewogICAgICAgICAgICAgICAgICAgIHJvID0+IDEsCiAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAxID0+IHsKICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgUGVybWlzc2lvbiB0ZXN0IE5vLiA1CiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ3J3IGluIGl0c20tY2hhbmdlLW1hbmFnZXInLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgR3JvdXBNZW1iZXJBZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UnfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UtbWFuYWdlcid9LAogICAgICAgICAgICAgICAgICAgIFVJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHJ3ID0+IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgUGVybWlzc2lvbnMgPT4gewogICAgICAgICAgICAgICAgMCA9PiB7CiAgICAgICAgICAgICAgICAgICAgcm8gPT4gMSwKICAgICAgICAgICAgICAgICAgICBydyA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIDEgPT4gewogICAgICAgICAgICAgICAgICAgIHJvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBQZXJtaXNzaW9uIHRlc3QgTm8uIDYKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAncm8gaW4gaXRzbS1jaGFuZ2UtYnVpbGRlciwgVXNlciAwIGlzIHRoZSBidWlsZGVyJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIEdyb3VwTWVtYmVyQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlJ30sCiAgICAgICAgICAgICAgICAgICAgVUlEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlLW1hbmFnZXInfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UtYnVpbGRlcid9LAogICAgICAgICAgICAgICAgICAgIFVJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgUGVybWlzc2lvbnMgPT4gewogICAgICAgICAgICAgICAgMCA9PiB7CiAgICAgICAgICAgICAgICAgICAgcm8gPT4gMSwKICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIDEgPT4gewogICAgICAgICAgICAgICAgICAgIHJvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBQZXJtaXNzaW9uIHRlc3QgTm8uIDcKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAncncgaW4gaXRzbS1jaGFuZ2UtYnVpbGRlciwgQWdlbnQgaXMgdGhlIGJ1aWxkZXInLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgR3JvdXBNZW1iZXJBZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UnfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UtbWFuYWdlcid9LAogICAgICAgICAgICAgICAgICAgIFVJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgR0lEICAgICAgICA9PiAkR3JvdXBOYW1lMklEeydpdHNtLWNoYW5nZS1idWlsZGVyJ30sCiAgICAgICAgICAgICAgICAgICAgVUlEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgcncgPT4gMSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBQZXJtaXNzaW9ucyA9PiB7CiAgICAgICAgICAgICAgICAwID0+IHsKICAgICAgICAgICAgICAgICAgICBybyA9PiAxLAogICAgICAgICAgICAgICAgICAgIHJ3ID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgMSA9PiB7CiAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFBlcm1pc3Npb24gdGVzdCBOby4gOAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdybyBpbiBpdHNtLWNoYW5nZS1idWlsZGVyLCB1c2VyIDEgaXMgbm90IHRoZSBidWlsZGVyJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIEdyb3VwTWVtYmVyQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlJ30sCiAgICAgICAgICAgICAgICAgICAgVUlEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlLW1hbmFnZXInfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UtYnVpbGRlcid9LAogICAgICAgICAgICAgICAgICAgIFVJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgR0lEICAgICAgICA9PiAkR3JvdXBOYW1lMklEeydpdHNtLWNoYW5nZS1idWlsZGVyJ30sCiAgICAgICAgICAgICAgICAgICAgVUlEICAgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgcm8gPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBQZXJtaXNzaW9ucyA9PiB7CiAgICAgICAgICAgICAgICAwID0+IHsKICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgMSA9PiB7CiAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFBlcm1pc3Npb24gdGVzdCBOby4gOQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdydyBpbiBpdHNtLWNoYW5nZS1idWlsZGVyLCB1c2VyIDEgaXMgbm90IHRoZSBidWlsZGVyJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIEdyb3VwTWVtYmVyQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlJ30sCiAgICAgICAgICAgICAgICAgICAgVUlEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlLW1hbmFnZXInfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UtYnVpbGRlcid9LAogICAgICAgICAgICAgICAgICAgIFVJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgR0lEICAgICAgICA9PiAkR3JvdXBOYW1lMklEeydpdHNtLWNoYW5nZS1idWlsZGVyJ30sCiAgICAgICAgICAgICAgICAgICAgVUlEICAgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBQZXJtaXNzaW9ucyA9PiB7CiAgICAgICAgICAgICAgICAwID0+IHsKICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgMSA9PiB7CiAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCik7CgpteSAkUGVybWlzc2lvblRlc3RDb3VudGVyID0gMTsKZm9yIG15ICRUZXN0IChAUGVybWlzc2lvblRlc3RzKSB7CiAgICBteSAkU291cmNlRGF0YSAgICA9ICRUZXN0LT57U291cmNlRGF0YX07CiAgICBteSAkUmVmZXJlbmNlRGF0YSA9ICRUZXN0LT57UmVmZXJlbmNlRGF0YX07CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgMSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiAkVGVzdC0+e0Rlc2NyaXB0aW9ufSAoUGVybWlzc2lvbiBUZXN0IGNhc2U6ICRQZXJtaXNzaW9uVGVzdENvdW50ZXIpIiwKICAgICk7CgogICAgIyBleGVjdXRlIHRoZSBzb3VyY2UgbW9kaWZpY2F0aW9ucwogICAgJFNvdXJjZURhdGEtPntHcm91cE1lbWJlckFkZH0gfHw9IFtdOwogICAgZm9yIG15ICRQYXJhbXMgKCBAeyAkU291cmNlRGF0YS0+e0dyb3VwTWVtYmVyQWRkfSB9ICkgewoKICAgICAgICAjIG1vZGlmeSB0aGUgZ3JvdXAgbWVtYmVyc2hpcAogICAgICAgIG15ICRTdWNjZXNzID0gJEdyb3VwT2JqZWN0LT5Hcm91cE1lbWJlckFkZCgKICAgICAgICAgICAgJXskUGFyYW1zfSwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSggJFN1Y2Nlc3MsICJQZXJtaXNzaW9uIHRlc3QgJFBlcm1pc3Npb25UZXN0Q291bnRlcjogR3JvdXBNZW1iZXJBZGQoKSIsICk7CiAgICB9CgogICAgIyBjaGVjayB0aGUgcmVzdWx0CiAgICBpZiAoICRSZWZlcmVuY2VEYXRhLT57UGVybWlzc2lvbnN9ICkgewogICAgICAgIGZvciBteSAkVXNlckluZGV4ICggc29ydCBrZXlzICV7ICRSZWZlcmVuY2VEYXRhLT57UGVybWlzc2lvbnN9IH0gKSB7CiAgICAgICAgICAgIG15ICRQcml2cyA9ICRSZWZlcmVuY2VEYXRhLT57UGVybWlzc2lvbnN9LT57JFVzZXJJbmRleH07CiAgICAgICAgICAgIGZvciBteSAkVHlwZSAoIHNvcnQga2V5cyAleyRQcml2c30gKSB7CiAgICAgICAgICAgICAgICAkQ2hhbmdlT2JqZWN0LT57RGVidWd9ID0gMTA7CiAgICAgICAgICAgICAgICBteSAkQWNjZXNzID0gJENoYW5nZU9iamVjdC0+UGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAkVHlwZSwKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkUGVybWlzc2lvblRlc3RDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkVXNlcklEc1skVXNlckluZGV4XSwKICAgICAgICAgICAgICAgICAgICBDYWNoZWQgICA9PiAwLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggJFByaXZzLT57JFR5cGV9ICkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgICAgICAkQWNjZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAiUGVybWlzc2lvbiB0ZXN0ICRQZXJtaXNzaW9uVGVzdENvdW50ZXI6IFVzZXIgJFVzZXJJbmRleCwgd2l0aCBVc2VyVUQgJFVzZXJJRHNbJFVzZXJJbmRleF0sIGhhcyAkVHlwZSBhY2Nlc3MiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAgICAgICAgICRBY2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICJQZXJtaXNzaW9uIHRlc3QgJFBlcm1pc3Npb25UZXN0Q291bnRlcjogVXNlciAkVXNlckluZGV4LCB3aXRoIFVzZXJJRCAkVXNlcklEc1skVXNlckluZGV4XSwgaGFzIG5vICRUeXBlIGFjY2VzcyIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQpjb250aW51ZSB7CiAgICAkUGVybWlzc2lvblRlc3RDb3VudGVyKys7CiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyB0ZXN0aW5nIHRoZSBtZXRob2QgQ2hhbmdlUG9zc2libGVTdGF0ZXNHZXQoKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAoJFBvc3NpYmxlU3RhdGVzVGVzdENoYW5nZUlEKSA9IEB7ICRMYWJlbDJDaGFuZ2VJRHN7UG9zc2libGVTdGF0ZXNUZXN0fSB9OwoKIyBXaGVuIG5vIENoYW5nZUlEIGlzIGdpdmVuIENoYW5nZVBvc3NpYmxlU3RhdGVzR2V0KCkgcmV0dXJucyBhIGxpc3Qgb2YgYWxsIHN0YXRlcy4KbXkgJFBvc3NpYmxlU3RhdGVzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlUG9zc2libGVTdGF0ZXNHZXQoCgogICAgIyAgICBDaGFuZ2VJRCA9PiAkUG9zc2libGVTdGF0ZXNUZXN0Q2hhbmdlSUQsCiAgICBVc2VySUQgPT4gMSwKKSB8fCB7fTsKCiMgZG8gdGhlIGNoZWNrcwpteSBAUG9zc2libGVTdGF0ZUlEc1JlZmVyZW5jZSA9IEBTb3J0ZWRDaGFuZ2VTdGF0ZUlEczsKZm9yIG15ICRQb3NzaWJsZVN0YXRlSUQgKEBQb3NzaWJsZVN0YXRlSURzUmVmZXJlbmNlKSB7CiAgICBteSAoICRGaXJzdEhhc2hSZWYsICRTZWNvbmRIYXNoUmVmICkgPSBncmVwIHsgJF8tPntLZXl9ID09ICRQb3NzaWJsZVN0YXRlSUQgfSBAeyRQb3NzaWJsZVN0YXRlc307CgogICAgIyBhIG1hdGNoIGlzIGV4cGVjdGVkCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkRmlyc3RIYXNoUmVmLAogICAgICAgICJDaGVjayBmb3IgcG9zc2libGUgc3RhdGUgaWQgJFBvc3NpYmxlU3RhdGVJRCIsCiAgICApOwoKICAgICMgdGhlIG5hbWUgc2hvdWxkIGFsc28gbWF0Y2gKICAgICRGaXJzdEhhc2hSZWYgfHw9IHt9OwogICAgbXkgJFBvc3NpYmxlU3RhdGVOYW1lID0gJENoYW5nZVN0YXRlSUQyTmFtZXskUG9zc2libGVTdGF0ZUlEfTsKICAgICRTZWxmLT5JcygKICAgICAgICAkRmlyc3RIYXNoUmVmLT57VmFsdWV9LAogICAgICAgICRQb3NzaWJsZVN0YXRlTmFtZSwKICAgICAgICAiQ2hlY2sgZm9yIHBvc3NpYmxlIHN0YXRlIG5hbWUgJFBvc3NpYmxlU3RhdGVJRCIsCiAgICApOwoKICAgICMgb25seSBvbmUgbWF0Y2ggaXMgZXhwZWN0ZWQKICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAkU2Vjb25kSGFzaFJlZiwKICAgICAgICAiQ2hlY2sgdGhhdCB0aGUgc3RhdGUgaWQgJFBvc3NpYmxlU3RhdGVJRCBpcyByZXR1cm5lZCBvbmx5IG9uY2UuIiwKICAgICk7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyB0ZXN0aW5nIHRoZSBtZXRob2QgQ2hhbmdlUG9zc2libGVTdGF0ZXNHZXQoKSB3aXRoIENoYW5nZUlEIGFyZ3VtZW50CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgU2V0IHRoZSBkZWZhdWx0IHZhbHVlcy4uLgpteSAkVGVzdE51bWJlciA9IDA7CgpteSBAUG9zc2libGVTdGF0ZXNGb3JSZXF1ZXN0ZWQgPSAoCiAgICAncmVxdWVzdGVkJywKICAgICdpbiBwcm9ncmVzcycsCiAgICAncGVuZGluZyBhcHByb3ZhbCcsCiAgICAncmVqZWN0ZWQnLAogICAgJ3JldHJhY3RlZCcsCik7CgpteSBAUG9zc2libGVTdGF0ZXNGb3JQZW5kaWdBcHByb3ZhbCA9ICgKICAgICdwZW5kaW5nIGFwcHJvdmFsJywKICAgICdhcHByb3ZlZCcsCiAgICAncmVqZWN0ZWQnLAogICAgJ3JldHJhY3RlZCcsCik7CgpteSBAUG9zc2libGVTdGF0ZXNGb3JBcHByb3ZlZCA9ICgKICAgICdhcHByb3ZlZCcsCiAgICAncmV0cmFjdGVkJywKICAgICdpbiBwcm9ncmVzcycsCik7CgpteSBAUG9zc2libGVTdGF0ZXNGb3JJblByb2dyZXNzID0gKAogICAgJ2luIHByb2dyZXNzJywKICAgICdjYW5jZWxlZCcsCiAgICAnZmFpbGVkJywKICAgICdwZW5kaW5nIHBpcicsCiAgICAncmV0cmFjdGVkJywKICAgICdzdWNjZXNzZnVsJywKKTsKCiMgVGVzdCBsb2dpYyBzdGFydHMuLi4KCiMgQ3JlYXRlIGEgY2hhbmdlIG9iamVjdC4uLgpteSAkQ2hhbmdlSURGb3JDaGFuZ2VQb3NzaWJsZVN0YXRlR2V0ID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgVXNlcklEID0+IDEsCik7CgojIEdldCBwb3Nzc2libGUgc3RhdGVzLi4uCm15ICRQb3NzaWJsZVN0YXRlc1VzaW5nQ2hhbmdlSUQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VQb3NzaWJsZVN0YXRlc0dldCgKICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJREZvckNoYW5nZVBvc3NpYmxlU3RhdGVHZXQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKJFRlc3ROdW1iZXIrKzsKCl9UZXN0UG9zc2libGVTdGF0ZXMoCiAgICBTdGF0ZSAgICAgICAgICAgICAgICAgPT4gJ1JlcXVlc3RlZCcsCiAgICBQb3NzaWJsZVN0YXRlcyAgICAgICAgPT4gJFBvc3NpYmxlU3RhdGVzVXNpbmdDaGFuZ2VJRCwKICAgIFBvc3NpYmxlRGVmYXVsdFN0YXRlcyA9PiBcQFBvc3NpYmxlU3RhdGVzRm9yUmVxdWVzdGVkLAogICAgVGVzdE51bWJlciAgICAgICAgICAgID0+ICRUZXN0TnVtYmVyLAopOwoKIyBDaGFuZ2UgdGhlIHN0YXRlCm15ICRDaGFuZ2VVcGRhdGVTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlVXBkYXRlKAogICAgQ2hhbmdlSUQgICAgPT4gJENoYW5nZUlERm9yQ2hhbmdlUG9zc2libGVTdGF0ZUdldCwKICAgIENoYW5nZVN0YXRlID0+ICdwZW5kaW5nIGFwcHJvdmFsJywKICAgIFVzZXJJRCAgICAgID0+IDEsCik7CgokVGVzdE51bWJlcisrOwoKJFNlbGYtPlRydWUoCiAgICAkQ2hhbmdlVXBkYXRlU3VjY2VzcywKICAgICJUZXN0ICRUZXN0TnVtYmVyIFN0YXRlIGNoYW5nZSIKKTsKCiMgR2V0IHBvc3NzaWJsZSBzdGF0ZXMuLi4KJFBvc3NpYmxlU3RhdGVzVXNpbmdDaGFuZ2VJRCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVBvc3NpYmxlU3RhdGVzR2V0KAogICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlERm9yQ2hhbmdlUG9zc2libGVTdGF0ZUdldCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgpfVGVzdFBvc3NpYmxlU3RhdGVzKAogICAgU3RhdGUgICAgICAgICAgICAgICAgID0+ICdBcHByb3ZlZCcsCiAgICBQb3NzaWJsZVN0YXRlcyAgICAgICAgPT4gJFBvc3NpYmxlU3RhdGVzVXNpbmdDaGFuZ2VJRCwKICAgIFBvc3NpYmxlRGVmYXVsdFN0YXRlcyA9PiBcQFBvc3NpYmxlU3RhdGVzRm9yUGVuZGlnQXBwcm92YWwsCiAgICBUZXN0TnVtYmVyICAgICAgICAgICAgPT4gJFRlc3ROdW1iZXIsCik7CgojIENoYW5nZSB0aGUgc3RhdGUKJENoYW5nZVVwZGF0ZVN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VVcGRhdGUoCiAgICBDaGFuZ2VJRCAgICA9PiAkQ2hhbmdlSURGb3JDaGFuZ2VQb3NzaWJsZVN0YXRlR2V0LAogICAgQ2hhbmdlU3RhdGUgPT4gJ2FwcHJvdmVkJywKICAgIFVzZXJJRCAgICAgID0+IDEsCik7CgokVGVzdE51bWJlcisrOwoKJFNlbGYtPlRydWUoCiAgICAkQ2hhbmdlVXBkYXRlU3VjY2VzcywKICAgICJUZXN0ICRUZXN0TnVtYmVyIFN0YXRlIGNoYW5nZSIKKTsKCiMgR2V0IHBvc3NzaWJsZSBzdGF0ZXMuLi4KJFBvc3NpYmxlU3RhdGVzVXNpbmdDaGFuZ2VJRCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVBvc3NpYmxlU3RhdGVzR2V0KAogICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlERm9yQ2hhbmdlUG9zc2libGVTdGF0ZUdldCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgpfVGVzdFBvc3NpYmxlU3RhdGVzKAogICAgU3RhdGUgICAgICAgICAgICAgICAgID0+ICdBcHByb3ZlZCcsCiAgICBQb3NzaWJsZVN0YXRlcyAgICAgICAgPT4gJFBvc3NpYmxlU3RhdGVzVXNpbmdDaGFuZ2VJRCwKICAgIFBvc3NpYmxlRGVmYXVsdFN0YXRlcyA9PiBcQFBvc3NpYmxlU3RhdGVzRm9yQXBwcm92ZWQsCiAgICBUZXN0TnVtYmVyICAgICAgICAgICAgPT4gJFRlc3ROdW1iZXIsCik7CgojIENoYW5nZSB0aGUgc3RhdGUKJENoYW5nZVVwZGF0ZVN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VVcGRhdGUoCiAgICBDaGFuZ2VJRCAgICA9PiAkQ2hhbmdlSURGb3JDaGFuZ2VQb3NzaWJsZVN0YXRlR2V0LAogICAgQ2hhbmdlU3RhdGUgPT4gJ2luIHByb2dyZXNzJywKICAgIFVzZXJJRCAgICAgID0+IDEsCik7CgokVGVzdE51bWJlcisrOwoKJFNlbGYtPlRydWUoCiAgICAkQ2hhbmdlVXBkYXRlU3VjY2VzcywKICAgICJUZXN0ICRUZXN0TnVtYmVyIFN0YXRlIGNoYW5nZSIKKTsKCiMgR2V0IHBvc3NzaWJsZSBzdGF0ZXMuLi4KJFBvc3NpYmxlU3RhdGVzVXNpbmdDaGFuZ2VJRCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZVBvc3NpYmxlU3RhdGVzR2V0KAogICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlERm9yQ2hhbmdlUG9zc2libGVTdGF0ZUdldCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgpfVGVzdFBvc3NpYmxlU3RhdGVzKAogICAgU3RhdGUgICAgICAgICAgICAgICAgID0+ICdJbiBQcm9ncmVzcycsCiAgICBQb3NzaWJsZVN0YXRlcyAgICAgICAgPT4gJFBvc3NpYmxlU3RhdGVzVXNpbmdDaGFuZ2VJRCwKICAgIFBvc3NpYmxlRGVmYXVsdFN0YXRlcyA9PiBcQFBvc3NpYmxlU3RhdGVzRm9ySW5Qcm9ncmVzcywKICAgIFRlc3ROdW1iZXIgICAgICAgICAgICA9PiAkVGVzdE51bWJlciwKKTsKCiMgRGVsZXRlIHRoZSBDaGFuZ2UKJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlERm9yQ2hhbmdlUG9zc2libGVTdGF0ZUdldCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgQ0lQIGFsbG9jYXRlIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IGN1cnJlbnQgYWxsb2NhdGlvbiBsaXN0IChVc2VySUQgaXMgbmVlZGVkKQpteSAkRW1wdHlBbGxvY2F0ZURhdGEgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPkFsbG9jYXRlTGlzdCgpOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5GYWxzZSgKICAgICRFbXB0eUFsbG9jYXRlRGF0YSwKICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAnOiBBbGxvY2F0ZUxpc3QoKScsCik7CgojIGdldCBjdXJyZW50IGFsbG9jYXRpb24gbGlzdApteSAkQ3VycmVudEFsbG9jYXRlRGF0YSA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVMaXN0KAogICAgVXNlcklEID0+IDEsCik7CgojIGNoZWNrIHRoZSByZXN1bHQKJFNlbGYtPlRydWUoCiAgICAkQ3VycmVudEFsbG9jYXRlRGF0YSwKICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAnOiBBbGxvY2F0ZUxpc3QoKScsCik7CgojIGNoZWNrIHRoZSBhbGxvY2F0aW9uIGhhc2gKbXkgJEhhc2hJc09LID0gMTsKaWYgKCByZWYgJEN1cnJlbnRBbGxvY2F0ZURhdGEgbmUgJ0hBU0gnICkgewogICAgJEhhc2hJc09LID0gMDsKfQoKIyBjaGVjayB0aGUgYWxsb2NhdGlvbiAyZCBoYXNoCmlmICgkSGFzaElzT0spIHsKCiAgICBJTVBBQ1RJRDoKICAgIGZvciBteSAkSW1wYWN0SUQgKCBzb3J0IGtleXMgJXskQ3VycmVudEFsbG9jYXRlRGF0YX0gKSB7CgogICAgICAgIGlmICggcmVmICRDdXJyZW50QWxsb2NhdGVEYXRhLT57JEltcGFjdElEfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgICAgICRIYXNoSXNPSyA9IDA7CiAgICAgICAgICAgIGxhc3QgSU1QQUNUSUQ7CiAgICAgICAgfQoKICAgICAgICBDQVRFR09SWUlEOgogICAgICAgIGZvciBteSAkQ2F0ZWdvcnlJRCAoIHNvcnQga2V5cyAleyAkQ3VycmVudEFsbG9jYXRlRGF0YS0+eyRJbXBhY3RJRH0gfSApIHsKCiAgICAgICAgICAgIGlmICggISRDYXRlZ29yeUlEIHx8ICEkQ3VycmVudEFsbG9jYXRlRGF0YS0+eyRJbXBhY3RJRH0tPnskQ2F0ZWdvcnlJRH0gKSB7CiAgICAgICAgICAgICAgICAkSGFzaElzT0sgPSAwOwogICAgICAgICAgICAgICAgbGFzdCBJTVBBQ1RJRDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKIyBjaGVjayBIYXNoT0sKJFNlbGYtPlRydWUoCiAgICAkSGFzaElzT0ssCiAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gJzogQWxsb2NhdGVMaXN0KCknLAopOwoKIyB1cGRhdGUgdGhlIGFsbG9jYXRpb24gaGFzaCAobm90IGFsbCBuZWVkZWQgYXJndW1lbnRzIGdpdmVuKQpteSAkQ0lQQWxsb2NhdGlvblVwZGF0ZWQgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPkFsbG9jYXRlVXBkYXRlKAogICAgVXNlcklEID0+IDEsCik7CgojIGNoZWNrIHRoZSByZXN1bHQKJFNlbGYtPkZhbHNlKAogICAgJENJUEFsbG9jYXRpb25VcGRhdGVkLAogICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICc6IEFsbG9jYXRlVXBkYXRlKCknLAopOwoKIyB1cGRhdGUgdGhlIGFsbG9jYXRpb24gaGFzaCAobm90IGFsbCBuZWVkZWQgYXJndW1lbnRzIGdpdmVuKQpteSAkQ0lQQWxsb2NhdGlvbklzVXBkYXRlZCA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVVcGRhdGUoCiAgICBBbGxvY2F0ZURhdGEgPT4gJEN1cnJlbnRBbGxvY2F0ZURhdGEsCik7CgojIGNoZWNrIHRoZSByZXN1bHQKJFNlbGYtPkZhbHNlKAogICAgJENJUEFsbG9jYXRpb25Jc1VwZGF0ZWQsCiAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gJzogQWxsb2NhdGVVcGRhdGUoKScsCik7CgojIHVwZGF0ZSB0aGUgYWxsb2NhdGlvbiBoYXNoIChhbGxvY2F0aW9uIGhhc2gpCm15ICRDSVBBbGxvY2F0aW9uSXNVcGRhdGVkTnJUaHJlZSA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVVcGRhdGUoCiAgICBBbGxvY2F0ZURhdGEgPT4gewogICAgICAgIFRlc3QgID0+ICdhYWEnLAogICAgICAgIFRlc3QyID0+ICdiYmInLAogICAgfSwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5GYWxzZSgKICAgICRDSVBBbGxvY2F0aW9uSXNVcGRhdGVkTnJUaHJlZSwKICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAnOiBBbGxvY2F0ZVVwZGF0ZSgpJywKKTsKCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2gKbXkgJFN1Y2Nlc3MgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPkFsbG9jYXRlVXBkYXRlKAogICAgQWxsb2NhdGVEYXRhID0+ICRDdXJyZW50QWxsb2NhdGVEYXRhLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgojIGNoZWNrIHRoZSByZXN1bHQKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAnOiBBbGxvY2F0ZVVwZGF0ZSgpJywKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBDSVAgbG9va3VwIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiRMb29rdXBPayA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUNJUExvb2t1cCgKICAgIENJUCAgPT4gJzEgdmVyeSBoaWdoJywKICAgIFR5cGUgPT4gJ25vbi1leGlzdGVudCcsCik7CgokU2VsZi0+RmFsc2UoCiAgICAkTG9va3VwT2ssCiAgICAnSW52YWxpZCB0eXBlIHBhc3NlZCB0byBDaGFuZ2VDSVBMb29rdXAoKScsCik7CgokTG9va3VwT2sgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VDSVBMb29rdXAoCiAgICBDSVAgPT4gJzEgdmVyeSBoaWdoJywKKTsKCiRTZWxmLT5GYWxzZSgKICAgICRMb29rdXBPaywKICAgICdQYXJhbWV0ZXIgVHlwZSBub3QgcGFzc2VkIHRvIENoYW5nZUNJUExvb2t1cCgpJywKKTsKCiRMb29rdXBPayA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUNJUExvb2t1cCgKICAgIFR5cGUgPT4gJ1ByaW9yaXR5JywKKTsKCiRTZWxmLT5GYWxzZSgKICAgICRMb29rdXBPaywKICAgICdQYXJhbWV0ZXIgSUQgb3IgQ0lQIG5vdCBwYXNzZWQgdG8gQ2hhbmdlQ0lQTG9va3VwKCknLAopOwoKJExvb2t1cE9rID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQ0lQTG9va3VwKAogICAgVHlwZSA9PiAnUHJpb3JpdHknLAogICAgQ0lQICA9PiAnMSB2ZXJ5IGhpZ2gnLAogICAgSUQgICA9PiAxMjMsCik7CgokU2VsZi0+RmFsc2UoCiAgICAkTG9va3VwT2ssCiAgICAnRXhjbHVzaXZlIHBhcmFtZXRlcnMgSUQgYW5kIENJUCBwYXNzZWQgdG8gQ2hhbmdlQ0lQTG9va3VwKCknLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIENoYW5nZVBvc3NpYmxlQ0lQR2V0KCkgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJFBvc3NpYmxlQ0lQR2V0T2sgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VQb3NzaWJsZUNJUEdldCgKICAgIFR5cGUgICA9PiAnbm9uLWV4aXN0ZW50JywKICAgIFVzZXJJRCA9PiAxLAopOwoKJFNlbGYtPkZhbHNlKAogICAgJFBvc3NpYmxlQ0lQR2V0T2ssCiAgICAnSW52YWxpZCB0eXBlIHBhc3NlZCB0byBDaGFuZ2VQb3NzaWJsZUNJUEdldCgpJywKKTsKCiRQb3NzaWJsZUNJUEdldE9rID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlUG9zc2libGVDSVBHZXQoCiAgICBVc2VySUQgPT4gMSwKKTsKCiRTZWxmLT5GYWxzZSgKICAgICRQb3NzaWJsZUNJUEdldE9rLAogICAgJ1BhcmFtZXRlciBUeXBlIG5vdCBwYXNzZWQgdG8gQ2hhbmdlUG9zc2libGVDSVBHZXQoKScsCik7CgojIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlIHRoZSBzYW1lIGZvciBhbGwgdGhyZWUgdHlwZXMuCm15ICRQb3NzaWJsZUNJUFJlZmVyZW5jZSA9IGpvaW4gJywgJywgQENJUFZhbHVlczsKZm9yIG15ICRUeXBlIChxdyhDYXRlZ29yeSBJbXBhY3QgUHJpb3JpdHkpKSB7CiAgICBteSAkUG9zc2libGVDSVBzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlUG9zc2libGVDSVBHZXQoCiAgICAgICAgVHlwZSAgID0+ICRUeXBlLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgcmVmICRQb3NzaWJsZUNJUHMsCiAgICAgICAgJ0FSUkFZJywKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIENoYW5nZVBvc3NpYmxlQ0lQR2V0KCkgcmV0dXJuZWQgYXJyYXkgcmVmIGZvciAnJFR5cGUnIiwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgIGpvaW4oICcsICcsIG1hcCB7ICRfLT57VmFsdWV9IH0gQHskUG9zc2libGVDSVBzfSApLAogICAgICAgICRQb3NzaWJsZUNJUFJlZmVyZW5jZSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50IC0gQ2hhbmdlUG9zc2libGVDSVBHZXQoKSByZXR1cm5lZCBleHBlY3RlZCB2YWx1ZXMgZm9yICckVHlwZSciLAogICAgKTsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHRlc3Rpbmcgc3VwcG9ydCBmb3IgYXR0YWNobWVudHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgKCRBdHRhY2htZW50VGVzdENoYW5nZUlEKSA9IEB7ICRMYWJlbDJDaGFuZ2VJRHN7QXR0YWNobWVudH0gfTsKCiMgdmVyaWZ5IHRoYXQgaW5pdGlhbHkgbm8gYXR0YWNobWVudCBleGlzdHMKbXkgQEF0dGFjaG1lbnRMaXN0ID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQXR0YWNobWVudExpc3QoCiAgICBDaGFuZ2VJRCA9PiAkQXR0YWNobWVudFRlc3RDaGFuZ2VJRCwKKTsKCiRTZWxmLT5JcygKICAgIHNjYWxhciBAQXR0YWNobWVudExpc3QsCiAgICAwLAogICAgJ05vIGF0dGFjaG1lbnRzIGluaXRpYWxseScsCik7CgpteSBAVGVzdEZpbGVMaXN0ID0gKAogICAgewogICAgICAgIEZpbGVuYW1lICAgID0+ICdmaXJzdCBhdHRhY2htZW50JywKICAgICAgICBDb250ZW50ICAgICA9PiAnRmlyc3QgYXR0YWNobWVudCBmcm9tIElUU01DaGFuZ2UudCcsCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgfSwKICAgIHsKICAgICAgICBGaWxlbmFtZSAgICA9PiAnc2Vjb25kIGF0dGFjaG1lbnQnLAogICAgICAgIENvbnRlbnQgICAgID0+ICdTZWNvbmQgYXR0YWNobWVudCBmcm9tIElUU01DaGFuZ2UudCcsCiAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgfSwKKTsKCm15ICRGaWxlQ291bnQ7CmZvciBteSAkVGVzdEZpbGUgKEBUZXN0RmlsZUxpc3QpIHsKCiAgICAkRmlsZUNvdW50Kys7CgogICAgbXkgJEFkZE9rID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQXR0YWNobWVudEFkZCgKICAgICAgICAleyRUZXN0RmlsZX0sCiAgICAgICAgQ2hhbmdlSUQgPT4gJEF0dGFjaG1lbnRUZXN0Q2hhbmdlSUQsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQWRkT2ssCiAgICAgICAgIkF0dGFjaG1lbnQgJEZpbGVDb3VudDogYXR0YWNobWVudCBhZGRlZCIsCiAgICApOwoKICAgIG15IEBBdHRhY2htZW50TGlzdCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUF0dGFjaG1lbnRMaXN0KAogICAgICAgIENoYW5nZUlEID0+ICRBdHRhY2htZW50VGVzdENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgIHNjYWxhciBAQXR0YWNobWVudExpc3QsCiAgICAgICAgJEZpbGVDb3VudCwKICAgICAgICAiQXR0YWNobWVudCAkRmlsZUNvdW50OiBudW1iZXIgb2YgYXR0YWNobWVudHMgYWZ0ZXIgYWRkaW5nIiwKICAgICk7CgogICAgIyBjaGVjayB3aGV0aGVyIHRoZSBsYXN0IGFkZGVkIGF0dGFjaG1lbnQgaXMgaW4gdGhlIGxpc3QKICAgIG15ICVBdHRhY2htZW50TG9va3VwID0gbWFwIHsgJF8gPT4gMSB9IEBBdHRhY2htZW50TGlzdDsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRBdHRhY2htZW50TG9va3VweyAkVGVzdEZpbGUtPntGaWxlbmFtZX0gfSwKICAgICAgICAiQXR0YWNobWVudCAkRmlsZUNvdW50OiBmaWxlbmFtZSBmcm9tIENoYW5nZUF0dGFjaG1lbnRMaXN0KCkiLAogICAgKTsKCiAgICAjIGdldCB0aGUgYXR0YWNobWVudAogICAgbXkgJEF0dGFjaG1lbnQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBdHRhY2htZW50R2V0KAogICAgICAgIENoYW5nZUlEID0+ICRBdHRhY2htZW50VGVzdENoYW5nZUlELAogICAgICAgIEZpbGVuYW1lID0+ICRUZXN0RmlsZS0+e0ZpbGVuYW1lfSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQXR0YWNobWVudCwKICAgICAgICAiQXR0YWNobWVudCAkRmlsZUNvdW50OiBDaGFuZ2VBdHRhY2htZW50R2V0KCkgcmV0dXJuZWQgdHJ1ZSIsCiAgICApOwoKICAgICMgY2hlY2sgYXR0YWNobWVudCBmaWxlIGF0dHJpYnV0ZXMKICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhGaWxlbmFtZSBDb250ZW50IENvbnRlbnRUeXBlKSkgewogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJEF0dGFjaG1lbnQtPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgJFRlc3RGaWxlLT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICJBdHRhY2htZW50ICRGaWxlQ291bnQ6ICRBdHRyaWJ1dGUgZnJvbSBDaGFuZ2VBdHRhY2htZW50R2V0IiwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgZXhpc3RlbmNlIG9mIGF0dGFjaG1lbnQKICAgIG15ICRBdHRhY2htZW50RXhpc3RzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQXR0YWNobWVudEV4aXN0cygKICAgICAgICBDaGFuZ2VJRCA9PiAkQXR0YWNobWVudFRlc3RDaGFuZ2VJRCwKICAgICAgICBGaWxlbmFtZSA9PiAkVGVzdEZpbGUtPntGaWxlbmFtZX0sCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQXR0YWNobWVudEV4aXN0cywKICAgICAgICAiQXR0YWNobWVudCAkRmlsZUNvdW50OiBhdHRhY2htZW50IGV4aXN0cyIsCiAgICApOwoKfQoKIyBub3cgZGVsZXRlIHRoZSBhdHRhY2htZW50cwokRmlsZUNvdW50ID0gMDsKbXkgJE1heFRlc3RGaWxlcyA9IHNjYWxhciBAVGVzdEZpbGVMaXN0Owpmb3IgbXkgJFRlc3RGaWxlIChAVGVzdEZpbGVMaXN0KSB7CgogICAgJEZpbGVDb3VudCsrOwoKICAgIG15ICREZWxldGVPayA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUF0dGFjaG1lbnREZWxldGUoCiAgICAgICAgQ2hhbmdlSUQgPT4gJEF0dGFjaG1lbnRUZXN0Q2hhbmdlSUQsCiAgICAgICAgRmlsZW5hbWUgPT4gJFRlc3RGaWxlLT57RmlsZW5hbWV9LAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJERlbGV0ZU9rLAogICAgICAgICJBdHRhY2htZW50ICRGaWxlQ291bnQ6IGF0dGFjaG1lbnQgZGVsZXRlZCIsCiAgICApOwoKICAgIG15IEBBdHRhY2htZW50TGlzdCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUF0dGFjaG1lbnRMaXN0KAogICAgICAgIENoYW5nZUlEID0+ICRBdHRhY2htZW50VGVzdENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICBzY2FsYXIgQEF0dGFjaG1lbnRMaXN0LAogICAgICAgICRNYXhUZXN0RmlsZXMgLSAkRmlsZUNvdW50LAogICAgICAgICJBdHRhY2htZW50ICRGaWxlQ291bnQ6IG51bWJlciBvZiBhdHRhY2htZW50cyBhZnRlciBkZWxldGlvbiIsCiAgICApOwoKICAgIG15ICRBdHRhY2htZW50RXhpc3RzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQXR0YWNobWVudEV4aXN0cygKICAgICAgICBGaWxlbmFtZSA9PiAkVGVzdEZpbGUtPntGaWxlbmFtZX0sCiAgICAgICAgQ2hhbmdlSUQgPT4gJEF0dGFjaG1lbnRUZXN0Q2hhbmdlSUQsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgJEF0dGFjaG1lbnRFeGlzdHMsCiAgICAgICAgIkF0dGFjaG1lbnQgJEZpbGVDb3VudDogYXR0YWNobWVudCBpcyBnb25lIiwKICAgICk7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyB0ZXN0IEhpc3RvcnlBZGRNdWx0aXBsZSgpIGZ1bmN0aW9uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCnsKCiAgICAjIGRlZmluZSBvbGQgdmFsdWVzIGZvciBjaGFuZ2UKICAgIG15ICVPbGRWYWx1ZXMgPSAoCiAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAnQUFBJywKICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICdCQkInLAogICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ0NDQycsCiAgICApOwoKICAgICMgYWRkIGEgbmV3IHRlc3QgY2hhbmdlCiAgICBteSAkQ2hhbmdlSUQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgJU9sZFZhbHVlcywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyByZW1lbWJlciBjaGFuZ2UgaWQgZm9yIGF1dG9tYXRpYyBkZWxldGlvbgogICAgJFRlc3RlZENoYW5nZUlEeyRDaGFuZ2VJRH0gPSAxOwoKICAgICMgZGVmaW5lIG5ldyB2YWx1ZXMgZm9yIGNoYW5nZSB1cGRhdGUKICAgIG15ICVOZXdWYWx1ZXMgPSAoCiAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAnWFhYJywKICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICdZWVknLAogICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ1paWicsCiAgICApOwoKICAgICMgdXBkYXRlIHRoZSBjaGFuZ2UKICAgIG15ICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlVXBkYXRlKAogICAgICAgICVOZXdWYWx1ZXMsCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKICAgICMgZ2V0IHRoZSBjaGFuZ2UgaGlzdG9yeQogICAgbXkgJEhpc3RvcnlFbnRyaWVzID0gJEhpc3RvcnlPYmplY3QtPkNoYW5nZUhpc3RvcnlHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKICAgICMgZ2V0IHJldmVyc2UgaGlzdG9yeSBlbnRyaWVzCiAgICBteSBAUmV2ZXJzZUhpc3RvcnkgPSByZXZlcnNlIEB7JEhpc3RvcnlFbnRyaWVzfTsKCiAgICAjIGdldCB0aGUgbGFzdCAzIGhpc3RvcnkgZW50cmllcyBhbmQgcHV0IHRoZW0gaW4gYSBoYXNoCiAgICAjIGtleSBpcyB0aGUgZmllbGRuYW1lLCB2YWx1ZSBpcyB0aGUgY29tcGxldGUgaGlzdG9yeSBkYXRhIG9mIHRoYXQgbGluZQogICAgbXkgJUhpc3RvcnlMb29rdXBCeUZpZWxkbmFtZSA9IG1hcCB7ICRfLT57RmllbGRuYW1lfSA9PiAkXyB9IEBSZXZlcnNlSGlzdG9yeVsgMCwgMSwgMiBdOwoKICAgIGZvciBteSAkRmllbGRuYW1lICggc29ydCBrZXlzICVOZXdWYWx1ZXMgKSB7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJEhpc3RvcnlMb29rdXBCeUZpZWxkbmFtZXskRmllbGRuYW1lfS0+e0NvbnRlbnRPbGR9LAogICAgICAgICAgICAkT2xkVmFsdWVzeyRGaWVsZG5hbWV9LAogICAgICAgICAgICAiQ2hlY2tpbmcgSGlzdG9yeSBmb3IgRmllbGQ6ICRGaWVsZG5hbWUsIENvbnRlbnRPbGQ6ICRPbGRWYWx1ZXN7JEZpZWxkbmFtZX0iLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJEhpc3RvcnlMb29rdXBCeUZpZWxkbmFtZXskRmllbGRuYW1lfS0+e0NvbnRlbnROZXd9LAogICAgICAgICAgICAkTmV3VmFsdWVzeyRGaWVsZG5hbWV9LAogICAgICAgICAgICAiQ2hlY2tpbmcgSGlzdG9yeSBmb3IgRmllbGQ6ICRGaWVsZG5hbWUsIENvbnRlbnROZXc6ICROZXdWYWx1ZXN7JEZpZWxkbmFtZX0iLAogICAgICAgICk7CiAgICB9Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBjbGVhbiB0aGUgc3lzdGVtCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZGlzYWJsZSBlbWFpbCBjaGVja3MgdG8gY2hhbmdlIHRoZSBuZXdseSBhZGRlZCB1c2VycwokQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZyA9ICRDb25maWdPYmplY3QtPkdldCgnQ2hlY2tFbWFpbEFkZHJlc3NlcycpOwppZiAoICFkZWZpbmVkICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnICkgewogICAgJENoZWNrRW1haWxBZGRyZXNzZXNPcmcgPSAxOwp9CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgIFZhbHVlID0+IDAsCik7CgojIHNldCB1bml0dGVzdCB1c2VycyBpbnZhbGlkCmZvciBteSAkVW5pdHRlc3RVc2VySUQgKEBVc2VySURzKSB7CgogICAgIyBnZXQgdXNlciBkYXRhCiAgICBteSAlVXNlciA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICBVc2VySUQgPT4gJFVuaXR0ZXN0VXNlcklELAogICAgKTsKCiAgICAjIHVwZGF0ZSB1c2VyCiAgICAkVXNlck9iamVjdC0+VXNlclVwZGF0ZSgKICAgICAgICAlVXNlciwKICAgICAgICBWYWxpZElEICAgICAgPT4gJFZhbGlkT2JqZWN0LT5WYWxpZExvb2t1cCggVmFsaWQgPT4gJ2ludmFsaWQnICksCiAgICAgICAgQ2hhbmdlVXNlcklEID0+IDEsCiAgICApOwp9CgojIGRlbGV0ZSB0aGUgdGVzdCBjaGFuZ2VzCm15ICREZWxldGVUZXN0Q291bnQgPSAxOwpmb3IgbXkgJENoYW5nZUlEICggc29ydCBrZXlzICVUZXN0ZWRDaGFuZ2VJRCApIHsKCiAgICBteSAkRGVsZXRlT2sgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJERlbGV0ZU9rLAogICAgICAgICJEZWxldGVUZXN0ICREZWxldGVUZXN0Q291bnQgLSBDaGFuZ2VEZWxldGUoKSAoQ2hhbmdlSUQ9JENoYW5nZUlEKSIsCiAgICApOwoKICAgICMgZG91YmxlIGNoZWNrIGlmIGNoYW5nZSBpcyByZWFsbHkgZGVsZXRlZAogICAgbXkgJENoYW5nZURhdGEgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgQ2FjaGUgICAgPT4gMCwKICAgICk7CgogICAgJFNlbGYtPkZhbHNlKAogICAgICAgICRDaGFuZ2VEYXRhLT57Q2hhbmdlSUR9LAogICAgICAgICJEZWxldGVUZXN0ICREZWxldGVUZXN0Q291bnQgLSBkb3VibGUgY2hlY2sgKENoYW5nZUlEPSRDaGFuZ2VJRCkiLAogICAgKTsKfQpjb250aW51ZSB7CiAgICAkRGVsZXRlVGVzdENvdW50Kys7Cn0KCiMgZGVsZXRlIGR5bmFtaWMgZmllbGRzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgdGVzdApmb3IgbXkgJER5bmFtaWNGaWVsZElEIChARHluYW1pY0ZpZWxkSURzKSB7CgogICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGREZWxldGUoCiAgICAgICAgSUQgICAgID0+ICREeW5hbWljRmllbGRJRCwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgIkR5bmFtaWNGaWVsZERlbGV0ZSgpIGRlbGV0ZWQgRHluYW1pY0ZpZWxkICREeW5hbWljRmllbGRJRCIsCiAgICApOwp9CgojIHJlc3RvcmUgb3JpZ2luYWwgZHluYW1pYyBmaWVsZHMgb3JkZXIKZm9yIG15ICREeW5hbWljRmllbGQgKCBAeyRPcmlnaW5hbER5bmFtaWNGaWVsZHN9ICkgewoKICAgIG15ICRTdWNjZXNzID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkVXBkYXRlKAogICAgICAgICV7JER5bmFtaWNGaWVsZH0sCiAgICAgICAgUmVvcmRlciA9PiAwLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgIyBjaGVjayBpZiB1cGRhdGUgKHJlc3RvcmUpIHdhcyBzdWNjZXNzZnVsCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiUmVzdG9yZWQgT3JpZ2luYWwgRHluYW1pYyBGaWVsZCAgLSBmb3IgRmllbGRJRCAkRHluYW1pY0ZpZWxkLT57SUR9IiwKICAgICk7Cn0KCiMgcmVzdG9yZSBvcmlnaW5hbCBlbWFpbCBjaGVjayBwYXJhbQokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICBWYWx1ZSA9PiAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZywKKTsKCj1vdmVyIDQKCj1pdGVtIFNldFRpbWVzKCkKClNldCBuZXcgdmFsdWVzIGZvciBDcmVhdGVUaW1lIGFuZCBDaGFuZ2VUaW1lIGZvciBhIGdpdmVuIENoYW5nZUlELgoKICAgIG15ICRVcGRhdGVTdWNjZXNzID0gU2V0VGltZXMoCiAgICAgICAgQ2hhbmdlSUQgPT4gMTIzLAogICAgICAgIENyZWF0ZVRpbWUgPT4gJzIwMDktMTAtMzAgMDE6MDA6MTUnLAogICAgICAgIENoYW5nZVRpbWUgPT4gJzIwMDktMTAtMzAgMDE6MDA6MTUnLAogICAgKTsKCj1iYWNrCgo9Y3V0CgpzdWIgU2V0VGltZXMgewogICAgbXkgKCVQYXJhbSkgPSBAXzsKCiAgICAjIGNoZWNrIGNoYW5nZSBpZAogICAgaWYgKCAhJFBhcmFte0NoYW5nZUlEfSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENoYW5nZUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBwYXJhbWV0ZXJzCiAgICBpZiAoICEkUGFyYW17Q3JlYXRlVGltZX0gJiYgISRQYXJhbXtDaGFuZ2VUaW1lfSApIHsKICAgICAgICAkTG9nT2JqZWN0LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIHBhcmFtZXRlciBDcmVhdGVUaW1lIG9yIENoYW5nZVRpbWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSBAQmluZDsKICAgIG15ICRTUUwgPSAnVVBEQVRFIGNoYW5nZV9pdGVtIFNFVCAnOwoKICAgIGlmICggJFBhcmFte0NyZWF0ZVRpbWV9ICkgewogICAgICAgICRTUUwgLj0gJ2NyZWF0ZV90aW1lID0gPyAnOwogICAgICAgIHB1c2ggQEJpbmQsIFwkUGFyYW17Q3JlYXRlVGltZX07CiAgICB9CgogICAgaWYgKCAkUGFyYW17Q3JlYXRlVGltZX0gJiYgJFBhcmFte0NoYW5nZVRpbWV9ICkgewogICAgICAgICRTUUwgLj0gJywgJzsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtDaGFuZ2VUaW1lfSApIHsKICAgICAgICAkU1FMIC49ICdjaGFuZ2VfdGltZSA9ID8gJzsKICAgICAgICBwdXNoIEBCaW5kLCBcJFBhcmFte0NoYW5nZVRpbWV9OwogICAgfQoKICAgICRTUUwgLj0gJ1dIRVJFIGlkID0gPyAnOwogICAgcHVzaCBAQmluZCwgXCRQYXJhbXtDaGFuZ2VJRH07CgogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICBCaW5kID0+IFxAQmluZCwKICAgICk7CgogICAgIyBjbGVhbnVwIHRoZSBjYWNoZQogICAgJENhY2hlT2JqZWN0LT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJ0lUU01DaGFuZ2VNYW5hZ2VtZW50JywKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCiMgc2V0IFNlbmROb3RpZmljYXRpb25zIHRvIGl0J3Mgb3JpZ2luYWwgdmFsdWUKJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ0lUU01DaGFuZ2U6OlNlbmROb3RpZmljYXRpb25zJywKICAgIFZhbHVlID0+ICRTZW5kTm90aWZpY2F0aW9uc09yZywKKTsKCj1vdmVyIDQKCj1pdGVtIF9UZXN0UG9zc2libGVTdGF0ZXMoKQoKSW50ZXJuYWwgdXNlIG9ubHkhClJ1bnMgYSBzZXJpZXMgb2YgdGVzdHMgZm9yIENoYW5nZVBvc3NpYmxlU3RhdGVzR2V0KCkgYnkgdXNpbmcgYSBDaGFuZ2VJRCBhcyBhcmd1bWVudAoKICAgIF9UZXN0UG9zc3NpYmxlU3RhdGVzKAogICAgICAgIFN0YXRlICAgICAgICAgICAgICAgICA9PiAnSW4gUHJvZ3Jlc3MnLCAgICAgICAgICAgICAgICAgIyBTdGF0ZSBuYW1lIHRvIGJlIGRpc3BsYXllZCBvbiB0aGUgdGVzdHMKICAgICAgICBQb3NzaWJsZVN0YXRlcyAgICAgICAgPT4gJFBvc3NpYmxlU3RhdGVzLCAgICAgICAgICAgICAgICMgVGhlIHJlc3VsdCBmcm9tIENoYW5nZVBvc3NpYmxlU3RhdGVzR2V0KCkKICAgICAgICBQb3NzaWJsZURlZmF1bHRTdGF0ZXMgPT4gXEBQb3NzaWJsZVN0YXRlc0ZvckluUHJvZ3Jlc3MsICMgQXJyYXkgdG8gcG9zc2libGUgc3RhdGUgdG8gY29tcGFyZQogICAgICAgIFRlc3ROdW1iZXIgICAgICAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUZXN0bnVtYmVyCgogICAgKTsKCj1iYWNrCgo9Y3V0CgpzdWIgX1Rlc3RQb3NzaWJsZVN0YXRlcyB7CiAgICBteSAoJVBhcmFtKSA9IEBfOwoKICAgIG15ICRTdGF0ZSAgICAgICAgICAgICAgICAgPSAkUGFyYW17U3RhdGV9OwogICAgbXkgJFBvc3NpYmxlU3RhdGVzICAgICAgICA9ICRQYXJhbXtQb3NzaWJsZVN0YXRlc307CiAgICBteSBAUG9zc2libGVEZWZhdWx0U3RhdGVzID0gQHsgJFBhcmFte1Bvc3NpYmxlRGVmYXVsdFN0YXRlc30gfTsKICAgIG15ICRUZXN0TnVtYmVyICAgICAgICAgICAgPSAkUGFyYW17VGVzdE51bWJlcn07CgogICAgIyBDaGVjayBpZiByZXR1cm4uLi4KICAgICRTZWxmLT5UcnVlKAogICAgICAgICRQb3NzaWJsZVN0YXRlcywKICAgICAgICAiUG9zc2libGUgU3RhdGVzIFRlc3QgJFRlc3ROdW1iZXI6IENoYW5nZVBvc3NpYmxlU3RhdGVzR2V0KCkgLSAiCiAgICAgICAgICAgIC4gInJldHVybnMgYSBsaXN0IG9mIHBvc2libGUgc3RhdGVzIGZyb20gJFN0YXRlIFN0YXRlLiIsCiAgICApOwoKICAgICMgQ2hlY2sgaWYgcmV0dXJuaW5nIHRoZSBzYW1lIG51bWJlciBvZiBzdGF0ZXMuLi4KICAgICRTZWxmLT5JcygKICAgICAgICBzY2FsYXIgQHskUG9zc2libGVTdGF0ZXNVc2luZ0NoYW5nZUlEfSwKICAgICAgICBzY2FsYXIgQFBvc3NpYmxlRGVmYXVsdFN0YXRlcywKICAgICAgICAiUG9zc2libGUgU3RhdGVzIFRlc3QgJFRlc3ROdW1iZXI6IHwtIgogICAgICAgICAgICAuICJyZXR1cm5zIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cyBhcyB0aGUgJFN0YXRlIFN0YXRlIGRlZmF1bHQuIiwKICAgICk7CgogICAgZm9yIG15ICRQb3NzaWJsZVN0YXRlSGFzaCAoIEB7JFBvc3NpYmxlU3RhdGVzfSApIHsKICAgICAgICBteSAoICRGaXJzdEhhc2hSZWYsICRTZWNvbmRIYXNoUmVmICkgPSBncmVwIHsgJF8gZXEgJFBvc3NpYmxlU3RhdGVIYXNoLT57VmFsdWV9IH0gQFBvc3NpYmxlRGVmYXVsdFN0YXRlczsKCiAgICAgICAgIyBDaGVjayBpZiB0aGUgc3RhdGUgbmFtZXMgYXJlIGNvcnJlY3QuLi4KICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRGaXJzdEhhc2hSZWYsCiAgICAgICAgICAgICRQb3NzaWJsZVN0YXRlSGFzaC0+e1ZhbHVlfSwKICAgICAgICAgICAgIlBvc3NpYmxlIFN0YXRlcyBUZXN0ICRUZXN0TnVtYmVyOiB8LSBtYXRjaCBkZWZhdWx0IHN0YXRlcyBmcm9tICRTdGF0ZSBTdGF0ZS4iLAogICAgICAgICk7CgogICAgICAgICMgQ2hlY2sgaWYgdGhlIHN0YXRlIG5hbWUgaXMgbm90IHJlcGV0ZWQKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICRTZWNvbmRIYXNoUmVmLAogICAgICAgICAgICAiUG9zc2libGUgU3RhdGVzIFRlc3QgJFRlc3ROdW1iZXI6IHwtIHN0YXRlcyBmb3JtICRTdGF0ZSBtYXRjaCBvbmx5IG9uY2UiCiAgICAgICAgKTsKICAgIH0KfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyBxdygkU2VsZik7Cgp1c2UgRGF0YTo6RHVtcGVyOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpQZXJsOjpUZXN0U3VicykKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkVGVzdENvdW50ID0gMTsKCiMgY3JlYXRlIGNvbW1vbiBvYmplY3RzCm15ICRDb25maWdPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkVGltZU9iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpbWUnKTsKbXkgJENvbmRpdGlvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJyk7Cm15ICRDaGFuZ2VPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwpteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgdGVzdCBpZiBjaGFuZ2Ugb2JqZWN0IHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseQokU2VsZi0+VHJ1ZSgKICAgICRDaGFuZ2VPYmplY3QsCiAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gJyAtIGNvbnN0cnVjdGlvbiBvZiBjaGFuZ2Ugb2JqZWN0JywKKTsKCiMgdGVzdCBpZiB3b3Jrb3JkZXIgb2JqZWN0IHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseQokU2VsZi0+VHJ1ZSgKICAgICRXb3JrT3JkZXJPYmplY3QsCiAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gJyAtIGNvbnN0cnVjdGlvbiBvZiB3b3Jrb3JkZXIgb2JqZWN0JywKKTsKCiMgdGVzdCBpZiBjb25kaXRpb24gb2JqZWN0IHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseQokU2VsZi0+VHJ1ZSgKICAgICRDb25kaXRpb25PYmplY3QsCiAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gJyAtIGNvbnN0cnVjdGlvbiBvZiBjb25kaXRpb24gb2JqZWN0JywKKTsKCiMgdHVybiBvZmYgU2VuZE5vdGlmaWNhdGlvbnMsIGluIG9yZGVyIHRvIGF2b2lkIGEgbG90IG9mIHVzZWxlc3MgbWFpbHMKbXkgJFNlbmROb3RpZmljYXRpb25zT3JnID0gJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNQ2hhbmdlOjpTZW5kTm90aWZjYXRpb25zJyk7CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdJVFNNQ2hhbmdlOjpTZW5kTm90aWZpY2F0aW9ucycsCiAgICBWYWx1ZSA9PiAwLAopOwoKIyBkZWZpbmUgbmVlZGVkIHZhcmlhYmxlCm15ICRSYW5kb21JRCA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgdGVzdCBDb25kaXRpb24gQVBJCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZGVmaW5lIHB1YmxpYyBpbnRlcmZhY2UgKGluIGFscGhhYmV0aWNhbCBvcmRlcikKbXkgQE9iamVjdE1ldGhvZHMgPSBxdygKICAgIEF0dHJpYnV0ZUFkZAogICAgQXR0cmlidXRlRGVsZXRlCiAgICBBdHRyaWJ1dGVHZXQKICAgIEF0dHJpYnV0ZUxpc3QKICAgIEF0dHJpYnV0ZUxvb2t1cAogICAgQXR0cmlidXRlVXBkYXRlCiAgICBDb25kaXRpb25BZGQKICAgIENvbmRpdGlvbkRlbGV0ZQogICAgQ29uZGl0aW9uRGVsZXRlQWxsCiAgICBDb25kaXRpb25HZXQKICAgIENvbmRpdGlvbkxpc3QKICAgIENvbmRpdGlvbkxvb2t1cAogICAgQ29uZGl0aW9uTWF0Y2hFeGVjdXRlCiAgICBDb25kaXRpb25NYXRjaEV4ZWN1dGVBbGwKICAgIENvbmRpdGlvblVwZGF0ZQogICAgRXhwcmVzc2lvbkFkZAogICAgRXhwcmVzc2lvbkRlbGV0ZQogICAgRXhwcmVzc2lvbkRlbGV0ZUFsbAogICAgRXhwcmVzc2lvbkdldAogICAgRXhwcmVzc2lvbkxpc3QKICAgIEV4cHJlc3Npb25NYXRjaAogICAgRXhwcmVzc2lvblVwZGF0ZQogICAgT2JqZWN0QWRkCiAgICBPYmplY3REZWxldGUKICAgIE9iamVjdEdldAogICAgT2JqZWN0TGlzdAogICAgT2JqZWN0TG9va3VwCiAgICBPYmplY3RVcGRhdGUKICAgIE9wZXJhdG9yQWRkCiAgICBPcGVyYXRvckRlbGV0ZQogICAgT3BlcmF0b3JFeGVjdXRlCiAgICBPcGVyYXRvckdldAogICAgT3BlcmF0b3JMaXN0CiAgICBPcGVyYXRvckxvb2t1cAogICAgT3BlcmF0b3JVcGRhdGUKKTsKCiMgY2hlY2sgaWYgc3VicyBhcmUgYXZhaWxhYmxlCmZvciBteSAkT2JqZWN0TWV0aG9kIChAT2JqZWN0TWV0aG9kcykgewogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJENvbmRpdGlvbk9iamVjdC0+Y2FuKCRPYmplY3RNZXRob2QpLAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gY2hlY2sgJ2NhbiAkT2JqZWN0TWV0aG9kJyIsCiAgICApOwp9CgojCiMgbWFrZSBzb21lIHByZXBhcmF0aW9ucwojCgojIGtlZXAgdHJhY2sgb2YgYSB0aW1lIGJlZm9yZSBvYmplY3RzIHdlcmUgYWRkZWQsCiMgZm9yIGNvbXBhcmlzb25zIGluIGV4cHJlc3Npb24gbWF0Y2ggdGVzdHMKbXkgJFN5c3RlbVRpbWVCZWZvcmVBZGRpbmcgPSAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpIC0gMTsKCiMgY3JlYXRlIG5ldyBjaGFuZ2UKbXkgQENoYW5nZUlEczsKbXkgQENoYW5nZVRpdGxlczsKQ1JFQVRFQ0hBTkdFOgpmb3IgbXkgJENyZWF0ZUNoYW5nZSAoIDAgLi4gOSApIHsKICAgIG15ICRDaGFuZ2VUaXRsZSA9ICdVbml0VGVzdENoYW5nZScgLiAkQ3JlYXRlQ2hhbmdlOwogICAgbXkgJENoYW5nZUlEICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgIENoYW5nZVRpdGxlID0+ICRDaGFuZ2VUaXRsZSwKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBDaGFuZ2VBZGQgLT4gJENoYW5nZUlEIiwKICAgICk7CgogICAgIyBkbyBub3Qgc3RvcmUgY2hhbmdlIGlkIGlmIGFkZCBmYWlsZWQKICAgIG5leHQgQ1JFQVRFQ0hBTkdFIGlmICEkQ2hhbmdlSUQ7CgogICAgIyBzdG9yZSBjaGFuZ2UgaWQgZm9yIGZ1cnRoZXIgdXNhZ2UgYW5kIGRlbGV0aW9uCiAgICBwdXNoIEBDaGFuZ2VJRHMsICAgICRDaGFuZ2VJRDsKICAgIHB1c2ggQENoYW5nZVRpdGxlcywgJENoYW5nZVRpdGxlOwp9CgojIGNyZWF0ZSBuZXcgd29ya29yZGVycwpteSBAV29ya09yZGVySURzOwpteSBAV29ya09yZGVyVGl0bGVzOwpDUkVBVEVXT1JLT1JERVI6CmZvciBteSAkQ3JlYXRlV29ya09yZGVyICggMCAuLiAoICggMyAqICggc2NhbGFyIEBDaGFuZ2VJRHMgKSApIC0gMSApICkgewogICAgbXkgJFdvcmtPcmRlclRpdGxlID0gJ1VuaXRUZXN0V08nIC4gJENyZWF0ZVdvcmtPcmRlcjsKICAgIG15ICRXb3JrT3JkZXJJRCAgICA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckFkZCgKICAgICAgICBDaGFuZ2VJRCAgICAgICAgID0+ICRDaGFuZ2VJRHNbICggJENyZWF0ZVdvcmtPcmRlciAlIHNjYWxhciBAQ2hhbmdlSURzICkgXSwKICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICRXb3JrT3JkZXJUaXRsZSwKICAgICAgICBQbGFubmVkU3RhcnRUaW1lID0+ICRUaW1lT2JqZWN0LT5DdXJyZW50VGltZXN0YW1wKCksCiAgICAgICAgUGxhbm5lZEVuZFRpbWUgICA9PiAkVGltZU9iamVjdC0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gKCAkVGltZU9iamVjdC0+U3lzdGVtVGltZSgpICsgMTAwICksCiAgICAgICAgKSwKICAgICAgICBBY3R1YWxTdGFydFRpbWUgPT4gJFRpbWVPYmplY3QtPkN1cnJlbnRUaW1lc3RhbXAoKSwKICAgICAgICBBY3R1YWxFbmRUaW1lICAgPT4gJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUyVGltZVN0YW1wKAogICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICggJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKSArIDEwMCApLAogICAgICAgICksCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRXb3JrT3JkZXJJRCwKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gJyAtIFdvcmtPcmRlckFkZCAoQ2hhbmdlSUQ6ICcKICAgICAgICAgICAgLiAkQ2hhbmdlSURzWyAoICRDcmVhdGVXb3JrT3JkZXIgJSBzY2FsYXIgQENoYW5nZUlEcyApIF0gLiAiKSAtPiAkV29ya09yZGVySUQiLAogICAgKTsKCiAgICAjIGRvIG5vdCBzdG9yZSB3b3Jrb3JkZXIgaWQgaWYgYWRkIGZhaWxlZAogICAgbmV4dCBDUkVBVEVXT1JLT1JERVIgaWYgISRXb3JrT3JkZXJJRDsKCiAgICAjIHN0b3JlIHdvcmtvcmRlciBpZCBmb3IgZnVydGhlciB1c2FnZSBhbmQgZGVsZXRpb24KICAgIHB1c2ggQFdvcmtPcmRlcklEcywgICAgJFdvcmtPcmRlcklEOwogICAgcHVzaCBAV29ya09yZGVyVGl0bGVzLCAkV29ya09yZGVyVGl0bGU7Cn0KCiMKIyBjb25kaXRpb24gdGVzdHMKIwoKIyBjcmVhdGUgbmV3IGNvbmRpdGlvbgpteSBAQ29uZGl0aW9uSURzOwpteSAlQ29uZGl0aW9uQ291bnQ7CkNIQU5HRUlEOgpmb3IgbXkgJENoYW5nZUlEIChAQ2hhbmdlSURzKSB7CgogICAgIyBhZGQgc29tZSBjb25kaXRpb25zIHRvIGVhY2ggY2hhbmdlCiAgICBDT05ESVRJT05DT1VOVEVSOgogICAgZm9yIG15ICRDb25kaXRpb25Db3VudGVyICggMCAuLiA1ICkgewoKICAgICAgICAjIGJ1aWxkIGNvbmRpdGlvbiBuYW1lCiAgICAgICAgbXkgJENvbmRpdGlvbk5hbWUgPSAiVW5pdFRlc3RDb25kaXRpb25OYW1lXyR7Q2hhbmdlSUR9XyIgLiAkQ29uZGl0aW9uQ291bnRlciAuICRSYW5kb21JRDsKCiAgICAgICAgIyBhZGQgYSBjb25kaXRpb24KICAgICAgICBteSAkQ29uZGl0aW9uSUQgPSAkQ29uZGl0aW9uT2JqZWN0LT5Db25kaXRpb25BZGQoCiAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICA9PiAkQ29uZGl0aW9uTmFtZSwKICAgICAgICAgICAgRXhwcmVzc2lvbkNvbmp1bmN0aW9uID0+ICdhbGwnLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDb25kaXRpb25JRCwKICAgICAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBDb25kaXRpb25BZGQgLT4gQ29uZGl0aW9uSUQ6ICRDb25kaXRpb25JRCIsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBDT05ESVRJT05DT1VOVEVSIGlmICEkQ29uZGl0aW9uSUQ7CgogICAgICAgICMgdGVzdCBjb25kaXRpb24gbG9va3VwIGJ5IG5hbWUKICAgICAgICBteSAkTG9va3VwQ29uZGl0aW9uSUQgPSAkQ29uZGl0aW9uT2JqZWN0LT5Db25kaXRpb25Mb29rdXAoCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRDb25kaXRpb25OYW1lLAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRMb29rdXBDb25kaXRpb25JRCwKICAgICAgICAgICAgJENvbmRpdGlvbklELAogICAgICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIENvbmRpdGlvbkxvb2t1cCAtPiBOYW1lOiAkQ29uZGl0aW9uTmFtZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyB0ZXN0IGNvbmRpdGlvbiBsb29rdXAgYnkgaWQKICAgICAgICBteSAkTG9va3VwQ29uZGl0aW9uTmFtZSA9ICRDb25kaXRpb25PYmplY3QtPkNvbmRpdGlvbkxvb2t1cCgKICAgICAgICAgICAgQ29uZGl0aW9uSUQgPT4gJENvbmRpdGlvbklELAogICAgICAgICAgICBDaGFuZ2VJRCAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRMb29rdXBDb25kaXRpb25OYW1lLAogICAgICAgICAgICAkQ29uZGl0aW9uTmFtZSwKICAgICAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBDb25kaXRpb25Mb29rdXAgLT4gQ29uZGl0aW9uSUQ6ICRDb25kaXRpb25JRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyByZW1lbWJlciBjaGFuZ2UgaWQgZm9yIGxhdGVyIHRlc3RzCiAgICAgICAgJENvbmRpdGlvbkNvdW50eyRDaGFuZ2VJRH0rKzsKCiAgICAgICAgIyBnZXQgdGhlIGFkZGVkIGNvbmRpdGlvbgogICAgICAgIG15ICRDb25kaXRpb25EYXRhID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uR2V0KAogICAgICAgICAgICBDb25kaXRpb25JRCA9PiAkQ29uZGl0aW9uSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkQ29uZGl0aW9uRGF0YS0+e0NvbmRpdGlvbklEfSwKICAgICAgICAgICAgJENvbmRpdGlvbklELAogICAgICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIENvbmRpdGlvbkdldCAtPiBDb25kaXRpb25JRDogJENvbmRpdGlvbklEIiwKICAgICAgICApOwoKICAgICAgICAjIHJlbWVtYmVyIGFsbCBjcmVhdGVkIGNvbmRpdGlvbnMgaWRzCiAgICAgICAgcHVzaCBAQ29uZGl0aW9uSURzLCAkQ29uZGl0aW9uSUQ7CgogICAgICAgICMgY29uZGl0aW9uIHVwZGF0ZSB0ZXN0cwogICAgICAgIG15ICRTdWNjZXNzID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uVXBkYXRlKAogICAgICAgICAgICBDb25kaXRpb25JRCAgICAgICAgICAgPT4gJENvbmRpdGlvbklELAogICAgICAgICAgICBFeHByZXNzaW9uQ29uanVuY3Rpb24gPT4gJ2FsbCcsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgICA9PiAnQW4gdXBkYXRlZCBjb21tZW50JywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIENvbmRpdGlvblVwZGF0ZSAtPiBDb25kaXRpb25JRDogJENvbmRpdGlvbklEIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aGUgdXBkYXRlZCBjb25kaXRpb24KICAgICAgICAkQ29uZGl0aW9uRGF0YSA9ICRDb25kaXRpb25PYmplY3QtPkNvbmRpdGlvbkdldCgKICAgICAgICAgICAgQ29uZGl0aW9uSUQgPT4gJENvbmRpdGlvbklELAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJENvbmRpdGlvbkRhdGEtPntDb21tZW50fSwKICAgICAgICAgICAgJ0FuIHVwZGF0ZWQgY29tbWVudCcsCiAgICAgICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gQ29uZGl0aW9uR2V0IC0+IENvbmRpdGlvbklEOiAkQ29uZGl0aW9uSUQiLAogICAgICAgICk7CgogICAgICAgICMgdHJ5IHRvIGFkZCB0aGUgc2FtZSBjb25kaXRpb24gYWdhaW4gKENoYW5nZUlEIGFuZCBOYW1lIGFyZSB0aGUgc2FtZSkgKG11c3QgZmFpbCkKICAgICAgICAkQ29uZGl0aW9uSUQgPSAkQ29uZGl0aW9uT2JqZWN0LT5Db25kaXRpb25BZGQoCiAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICA9PiAkQ29uZGl0aW9uTmFtZSwKICAgICAgICAgICAgRXhwcmVzc2lvbkNvbmp1bmN0aW9uID0+ICdhbGwnLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkQ29uZGl0aW9uSUQsCiAgICAgICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gQ29uZGl0aW9uQWRkIiwKICAgICAgICApOwoKICAgICAgICAjIGp1c3QgaW4gY2FzZSBpZiB0aGUgY29uZGl0aW9uIGNvdWxkIGJlIGFkZGVkCiAgICAgICAgaWYgKCRDb25kaXRpb25JRCkgewogICAgICAgICAgICBwdXNoIEBDb25kaXRpb25JRHMsICRDb25kaXRpb25JRDsKICAgICAgICB9CiAgICB9Cn0KCiMgY29uZGl0aW9uIGxpc3QgdGVzdApDSEFOR0VJRDoKZm9yIG15ICRDaGFuZ2VJRCAoIHNvcnQga2V5cyAlQ29uZGl0aW9uQ291bnQgKSB7CgogICAgIyBnZXQgY29uZGl0aW9uIGxpc3QKICAgIG15ICRDb25kaXRpb25JRHNSZWYgPSAkQ29uZGl0aW9uT2JqZWN0LT5Db25kaXRpb25MaXN0KAogICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICBWYWxpZCAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICBzY2FsYXIgQHskQ29uZGl0aW9uSURzUmVmfSwKICAgICAgICAkQ29uZGl0aW9uQ291bnR7JENoYW5nZUlEfSwKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIENvbmRpdGlvbkxpc3QgLT4gTnVtYmVyIG9mIGNvbmRpdGlvbnMgZm9yIENoYW5nZUlEOiAkQ2hhbmdlSUQiLAogICAgKTsKCiAgICAjIGlmIG5vIGNvbmRpdGlvbnMgZXhpc3QgZm9yIHRoaXMgY2hhbmdlCiAgICBuZXh0IENIQU5HRUlEIGlmICFAeyRDb25kaXRpb25JRHNSZWZ9OwoKICAgICMgc2V0IHRoZSBmaXJzdCBjb25kaXRpb24gb2YgdGhlIGN1cnJlbnQgY2hhbmdlIGludmFsaWQKICAgIG15ICRTdWNjZXNzID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uVXBkYXRlKAogICAgICAgIENvbmRpdGlvbklEID0+ICRDb25kaXRpb25JRHNSZWYtPlswXSwKICAgICAgICBWYWxpZElEICAgICA9PiAyLCAgICAgICAgICAgICAgICAgICAgICAgIyBpbnZhbGlkCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBDb25kaXRpb25VcGRhdGUgLT4gQ29uZGl0aW9uSUQ6ICRDb25kaXRpb25JRHNSZWYtPlswXSIsCiAgICApOwoKICAgICMgZ2V0IGNvbmRpdGlvbiBsaXN0IGFnYWluCiAgICAkQ29uZGl0aW9uSURzUmVmID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uTGlzdCgKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgVmFsaWQgICAgPT4gMSwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgc2NhbGFyIEB7JENvbmRpdGlvbklEc1JlZn0sCiAgICAgICAgJENvbmRpdGlvbkNvdW50eyRDaGFuZ2VJRH0gLSAxLAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gQ29uZGl0aW9uTGlzdCAtPiBOdW1iZXIgb2YgY29uZGl0aW9ucyBmb3IgQ2hhbmdlSUQ6ICRDaGFuZ2VJRCIsCiAgICApOwoKICAgICMgZ2V0IGNvbmRpdGlvbiBsaXN0IGFnYWluLCBidXQgbm93IHdpdGggYWxzbyB0aGUgaW52YWxpZCBjb25kaXRpb25zCiAgICAkQ29uZGl0aW9uSURzUmVmID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uTGlzdCgKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgVmFsaWQgICAgPT4gMCwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgc2NhbGFyIEB7JENvbmRpdGlvbklEc1JlZn0sCiAgICAgICAgJENvbmRpdGlvbkNvdW50eyRDaGFuZ2VJRH0sCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBDb25kaXRpb25MaXN0IC0+IE51bWJlciBvZiBjb25kaXRpb25zIGZvciBDaGFuZ2VJRDogJENoYW5nZUlEIiwKICAgICk7Cgp9CgojCiMgY29uZGl0aW9uIG9iamVjdCB0ZXN0cwojCgojIGNoZWNrIGNvbmRpdGlvbiBzdWItb2JqZWN0cwpmb3IgbXkgJENvbmRpdGlvblN1Yk9iamVjdE5hbWUgKHF3KElUU01DaGFuZ2UgSVRTTVdvcmtPcmRlcikpIHsKCiAgICAjIG1ha2UgbG9va3VwIHRvIGdldCBvYmplY3QgaWQKICAgIG15ICRPYmplY3RJRCA9ICRDb25kaXRpb25PYmplY3QtPk9iamVjdExvb2t1cCgKICAgICAgICBOYW1lICAgPT4gJENvbmRpdGlvblN1Yk9iamVjdE5hbWUsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApIHx8ICcnOwoKICAgICMgY2hlY2sgb24gcmV0dXJuIHZhbHVlCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkT2JqZWN0SUQsCiAgICAgICAgJ1Rlc3QgJwogICAgICAgICAgICAuICRUZXN0Q291bnQrKwogICAgICAgICAgICAuICIgLSBPYmplY3RMb29rdXAgb24gJyRDb25kaXRpb25TdWJPYmplY3ROYW1lJyAtPiBPYmplY3RJRDogJE9iamVjdElEIiwKICAgICk7CgogICAgIyBnZXQgb2JqZWN0IGRhdGEgd2l0aCBvYmplY3QgaWQKICAgIG15ICRPYmplY3REYXRhID0gJENvbmRpdGlvbk9iamVjdC0+T2JqZWN0R2V0KAogICAgICAgIE9iamVjdElEID0+ICRPYmplY3RJRCwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKCiAgICAjIGNoZWNrIHJldHVybiBwYXJhbWV0ZXJzCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJE9iamVjdERhdGEtPntOYW1lfSwKICAgICAgICAkQ29uZGl0aW9uU3ViT2JqZWN0TmFtZSwKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gJyAtIE9iamVjdEdldCgpIG5hbWUgY2hlY2snLAogICAgKTsKfQoKIyBjaGVjayBmb3Igb2JqZWN0IGFkZApteSBAQ29uZGl0aW9uT2JqZWN0Q3JlYXRlZDsKZm9yIG15ICRDb3VudGVyICggMSAuLiAzICkgewoKICAgICMgYWRkIG5ldyBvYmplY3RzCiAgICBteSAkT2JqZWN0SUQgPSAkQ29uZGl0aW9uT2JqZWN0LT5PYmplY3RBZGQoCiAgICAgICAgTmFtZSAgID0+ICdPYmplY3ROYW1lJyAuICRDb3VudGVyIC4gJFJhbmRvbUlELAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGNoZWNrIG9uIHJldHVybiB2YWx1ZQogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJE9iamVjdElELAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gT2JqZWN0QWRkIC0+IE9iamVjdElEOiAkT2JqZWN0SUQiLAogICAgKTsKCiAgICAjIHNhdmUgb2JqZWN0IGlkIGZvciBkZWxldGUgdGVzdAogICAgcHVzaCBAQ29uZGl0aW9uT2JqZWN0Q3JlYXRlZCwgJE9iamVjdElEOwp9CgojIGNoZWNrIGNvbmRpdGlvbiBvYmplY3QgbGlzdApteSAkT2JqZWN0TGlzdCA9ICRDb25kaXRpb25PYmplY3QtPk9iamVjdExpc3QoCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgY2hlY2sgZm9yIG9iamVjdCBsaXN0CiRTZWxmLT5UcnVlKAogICAgJE9iamVjdExpc3QsCiAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIE9iamVjdExpc3QgaXMgbm90IGVtcHR5IiwKKTsKCiMgY2hlY2sgZm9yIG9iamVjdCBsaXN0IGFzIGhhc2ggcmVmCiRTZWxmLT5JcygKICAgIHJlZiAkT2JqZWN0TGlzdCwKICAgICdIQVNIJywKICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gT2JqZWN0TGlzdCB0eXBlIiwKKTsKCiMgY2hlY2sgdXBkYXRlIG9mIGNvbmRpdGlvbiBvYmplY3QKbXkgJENvbmRpdGlvbk9iamVjdE5ld05hbWUgPSAnVW5pdFRlc3RVcGRhdGUnIC4gJFJhbmRvbUlEOwokU2VsZi0+VHJ1ZSgKICAgICRDb25kaXRpb25PYmplY3QtPk9iamVjdFVwZGF0ZSgKICAgICAgICBPYmplY3RJRCA9PiAkQ29uZGl0aW9uT2JqZWN0Q3JlYXRlZFswXSwKICAgICAgICBOYW1lICAgICA9PiAkQ29uZGl0aW9uT2JqZWN0TmV3TmFtZSwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKSwKICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gT2JqZWN0VXBkYXRlIiwKKTsKbXkgJENvbmRpdGlvbk9iamVjdFVwZGF0ZSA9ICRDb25kaXRpb25PYmplY3QtPk9iamVjdEdldCgKICAgIE9iamVjdElEID0+ICRDb25kaXRpb25PYmplY3RDcmVhdGVkWzBdLAogICAgVXNlcklEICAgPT4gMSwKKTsKJFNlbGYtPklzKAogICAgJENvbmRpdGlvbk9iamVjdFVwZGF0ZS0+e05hbWV9LAogICAgJENvbmRpdGlvbk9iamVjdE5ld05hbWUsCiAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIE9iamVjdFVwZGF0ZSB2ZXJpZnkgdXBkYXRlIiwKKTsKCiMgY2hlY2sgZm9yIG9iamVjdCBkZWxldGUKZm9yIG15ICRPYmplY3RJRCAoQENvbmRpdGlvbk9iamVjdENyZWF0ZWQpIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRDb25kaXRpb25PYmplY3QtPk9iamVjdERlbGV0ZSgKICAgICAgICAgICAgT2JqZWN0SUQgPT4gJE9iamVjdElELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICksCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBPYmplY3REZWxldGUgLT4gT2JqZWN0SUQ6ICRPYmplY3RJRCIsCiAgICApOwp9CgojCiMgY29uZGl0aW9uIGF0dHJpYnV0ZXMgdGVzdHMKIwoKIyBjaGVjayBmb3IgZGVmYXVsdCBjb25kaXRpb24gYXR0cmlidXRlcwpteSBAQ29uZGl0aW9uQXR0cmlidXRlcyA9IHF3KAogICAgQ2hhbmdlVGl0bGUgICAgICBDYXRlZ29yeUlEICAgICAgSW1wYWN0SUQgUHJpb3JpdHlJRCBQbGFubmVkRWZmb3J0ICAgIEFjY291bnRlZFRpbWUKICAgIENoYW5nZU1hbmFnZXJJRCAgQ2hhbmdlQnVpbGRlcklEIFdvcmtPcmRlckFnZW50SUQKICAgIFdvcmtPcmRlclRpdGxlICAgV29ya09yZGVyTnVtYmVyIFdvcmtPcmRlclN0YXRlSUQgICAgV29ya09yZGVyVHlwZUlECiAgICBQbGFubmVkU3RhcnRUaW1lIFBsYW5uZWRFbmRUaW1lICBBY3R1YWxTdGFydFRpbWUgICAgIEFjdHVhbEVuZFRpbWUKKTsKCiMgY2hlY2sgY29uZGl0aW9uIGF0dHJpYnV0ZXMKZm9yIG15ICRDb25kaXRpb25BdHRyaWJ1dGUgKEBDb25kaXRpb25BdHRyaWJ1dGVzKSB7CgogICAgIyBtYWtlIGxvb2t1cCB0byBnZXQgYXR0cmlidXRlIGlkCiAgICBteSAkQXR0cmlidXRlSUQgPSAkQ29uZGl0aW9uT2JqZWN0LT5BdHRyaWJ1dGVMb29rdXAoCiAgICAgICAgTmFtZSA9PiAkQ29uZGl0aW9uQXR0cmlidXRlLAogICAgKSB8fCAnJzsKCiAgICAjIGNoZWNrIG9uIHJldHVybiB2YWx1ZQogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEF0dHJpYnV0ZUlELAogICAgICAgICdUZXN0ICcKICAgICAgICAgICAgLiAkVGVzdENvdW50KysKICAgICAgICAgICAgLiAiIC0gQXR0cmlidXRlTG9va3VwIG9uICckQ29uZGl0aW9uQXR0cmlidXRlJyAtPiBBdHRyaWJ1dGVJRDogJEF0dHJpYnV0ZUlEJyIsCiAgICApOwoKICAgICMgZ2V0IGF0dHJpYnV0ZSBkYXRhIHdpdGggYXR0cmlidXRlIGlkCiAgICBteSAkQXR0cmlidXRlRGF0YSA9ICRDb25kaXRpb25PYmplY3QtPkF0dHJpYnV0ZUdldCgKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgIEF0dHJpYnV0ZUlEID0+ICRBdHRyaWJ1dGVJRCwKICAgICk7CgogICAgIyBjaGVjayByZXR1cm4gcGFyYW1ldGVycwogICAgJFNlbGYtPklzKAogICAgICAgICRBdHRyaWJ1dGVEYXRhLT57TmFtZX0sCiAgICAgICAgJENvbmRpdGlvbkF0dHJpYnV0ZSwKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gJyAtIEF0dHJpYnV0ZUdldCgpIG5hbWUgY2hlY2snLAogICAgKTsKfQoKIyBjaGVjayBmb3Igb2JqZWN0IGFkZApteSBAQ29uZGl0aW9uQXR0cmlidXRlQ3JlYXRlZDsKZm9yIG15ICRDb3VudGVyICggMSAuLiAzICkgewoKICAgICMgYWRkIG5ldyBvYmplY3RzCiAgICBteSAkQXR0cmlidXRlSUQgPSAkQ29uZGl0aW9uT2JqZWN0LT5BdHRyaWJ1dGVBZGQoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgTmFtZSAgID0+ICdBdHRyaWJ1dGVOYW1lJyAuICRDb3VudGVyIC4gJFJhbmRvbUlELAogICAgKTsKCiAgICAjIGNoZWNrIG9uIHJldHVybiB2YWx1ZQogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEF0dHJpYnV0ZUlELAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gQXR0cmlidXRlQWRkIC0+IEF0dHJpYnV0ZUlEOiAkQXR0cmlidXRlSUQiLAogICAgKTsKCiAgICAjIHNhdmUgb2JqZWN0IGl0IGZvciBkZWxldGUgdGVzdAogICAgcHVzaCBAQ29uZGl0aW9uQXR0cmlidXRlQ3JlYXRlZCwgJEF0dHJpYnV0ZUlEOwp9CgojIGNoZWNrIGNvbmRpdGlvbiBhdHRyaWJ1dGUgbGlzdApteSAkQXR0cmlidXRlTGlzdCA9ICRDb25kaXRpb25PYmplY3QtPkF0dHJpYnV0ZUxpc3QoCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgY2hlY2sgZm9yIGF0dHJpYnV0ZSBsaXN0CiRTZWxmLT5UcnVlKAogICAgJEF0dHJpYnV0ZUxpc3QsCiAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIEF0dHJpYnV0ZUxpc3QgaXMgbm90IGVtcHR5IiwKKTsKCiMgY2hlY2sgZm9yIGF0dHJpYnV0ZSBsaXN0IGFzIGhhc2ggcmVmCiRTZWxmLT5JcygKICAgIHJlZiAkQXR0cmlidXRlTGlzdCwKICAgICdIQVNIJywKICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gQXR0cmlidXRlTGlzdCB0eXBlIiwKKTsKCiMgY2hlY2sgdXBkYXRlIG9mIGF0dHJpYnV0ZSBvYmplY3QKbXkgJENvbmRpdGlvbkF0dHJpYnV0ZU5ld05hbWUgPSAnVW5pdFRlc3RVcGRhdGUnIC4gJFJhbmRvbUlEOwokU2VsZi0+VHJ1ZSgKICAgICRDb25kaXRpb25PYmplY3QtPkF0dHJpYnV0ZVVwZGF0ZSgKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgIEF0dHJpYnV0ZUlEID0+ICRDb25kaXRpb25BdHRyaWJ1dGVDcmVhdGVkWzBdLAogICAgICAgIE5hbWUgICAgICAgID0+ICRDb25kaXRpb25BdHRyaWJ1dGVOZXdOYW1lLAogICAgKSwKICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gQXR0cmlidXRlVXBkYXRlIiwKKTsKbXkgJENvbmRpdGlvbkF0dHJpYnV0ZVVwZGF0ZSA9ICRDb25kaXRpb25PYmplY3QtPkF0dHJpYnV0ZUdldCgKICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICBBdHRyaWJ1dGVJRCA9PiAkQ29uZGl0aW9uQXR0cmlidXRlQ3JlYXRlZFswXSwKKTsKJFNlbGYtPklzKAogICAgJENvbmRpdGlvbkF0dHJpYnV0ZVVwZGF0ZS0+e05hbWV9LAogICAgJENvbmRpdGlvbkF0dHJpYnV0ZU5ld05hbWUsCiAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIEF0dHJpYnV0ZVVwZGF0ZSB2ZXJpZnkgdXBkYXRlIiwKKTsKCiMgY2hlY2sgZm9yIGF0dHJpYnV0ZSBkZWxldGUKZm9yIG15ICRBdHRyaWJ1dGVJRCAoQENvbmRpdGlvbkF0dHJpYnV0ZUNyZWF0ZWQpIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRDb25kaXRpb25PYmplY3QtPkF0dHJpYnV0ZURlbGV0ZSgKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQXR0cmlidXRlSUQgPT4gJEF0dHJpYnV0ZUlELAogICAgICAgICksCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBBdHRyaWJ1dGVEZWxldGUgLT4gQXR0cmlidXRlSUQ6ICRBdHRyaWJ1dGVJRCIsCiAgICApOwp9CgojCiMgY29uZGl0aW9uIG9wZXJhdG9yIHRlc3RzCiMKCiMgY2hlY2sgZm9yIGRlZmF1bHQgY29uZGl0aW9uIG9wZXJhdG9ycwpteSBAQ29uZGl0aW9uT3BlcmF0b3JzID0gKAoKICAgICMgY29tbW9uIG1hdGNoaW5nCiAgICAnaXMnLCAnaXMgbm90JywgJ2lzIGVtcHR5JywgJ2lzIG5vdCBlbXB0eScsCgogICAgIyBkaWdpdCBtYXRjaGluZwogICAgJ2lzIGdyZWF0ZXIgdGhhbicsICdpcyBsZXNzIHRoYW4nLAoKICAgICMgZGF0ZSBtYXRjaGluZwogICAgJ2lzIGJlZm9yZScsICdpcyBhZnRlcicsCgogICAgIyBzdHJpbmcgbWF0Y2hpbmcKICAgICdjb250YWlucycsICdub3QgY29udGFpbnMnLCAnYmVnaW5zIHdpdGgnLCAnZW5kcyB3aXRoJywKCiAgICAjIGFjdGlvbiBvcGVyYXRvcgogICAgJ3NldCcsICdsb2NrJywKKTsKCiMgY2hlY2sgY29uZGl0aW9uIG9wZXJhdG9ycwpmb3IgbXkgJENvbmRpdGlvbk9wZXJhdG9yIChAQ29uZGl0aW9uT3BlcmF0b3JzKSB7CgogICAgIyBtYWtlIGxvb2t1cCB0byBnZXQgb3BlcmF0b3IgaWQKICAgIG15ICRPcGVyYXRvcklEID0gJENvbmRpdGlvbk9iamVjdC0+T3BlcmF0b3JMb29rdXAoIE5hbWUgPT4gJENvbmRpdGlvbk9wZXJhdG9yICkgfHwgJyc7CgogICAgIyBjaGVjayBvbiByZXR1cm4gdmFsdWUKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRPcGVyYXRvcklELAogICAgICAgICdUZXN0ICcKICAgICAgICAgICAgLiAkVGVzdENvdW50KysKICAgICAgICAgICAgLiAiIC0gT3BlcmF0b3JMb29rdXAgb24gJyRDb25kaXRpb25PcGVyYXRvcicgLT4gT3BlcmF0b3JJRDogJE9wZXJhdG9ySUQiLAogICAgKTsKCiAgICAjIGdldCBvcGVyYXRvciBkYXRhIHdpdGggb3BlcmF0b3IgaWQKICAgIG15ICRPcGVyYXRvckRhdGEgPSAkQ29uZGl0aW9uT2JqZWN0LT5PcGVyYXRvckdldCgKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgT3BlcmF0b3JJRCA9PiAkT3BlcmF0b3JJRCwKICAgICk7CgogICAgIyBjaGVjayByZXR1cm4gcGFyYW1ldGVycwogICAgJFNlbGYtPklzKAogICAgICAgICRPcGVyYXRvckRhdGEtPntOYW1lfSwKICAgICAgICAkQ29uZGl0aW9uT3BlcmF0b3IsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICcgLSBPcGVyYXRvckdldCgpIG5hbWUgY2hlY2snLAogICAgKTsKfQoKIyBjaGVjayBmb3Igb2JqZWN0IGFkZApteSBAQ29uZGl0aW9uT3BlcmF0b3JDcmVhdGVkOwpmb3IgbXkgJENvdW50ZXIgKCAxIC4uIDMgKSB7CgogICAgIyBhZGQgbmV3IG9iamVjdHMKICAgIG15ICRPcGVyYXRvcklEID0gJENvbmRpdGlvbk9iamVjdC0+T3BlcmF0b3JBZGQoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgTmFtZSAgID0+ICdPcGVyYXRvck5hbWUnIC4gJENvdW50ZXIgLiAkUmFuZG9tSUQsCiAgICApOwoKICAgICMgY2hlY2sgb24gcmV0dXJuIHZhbHVlCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkT3BlcmF0b3JJRCwKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIE9wZXJhdG9yQWRkIC0+IE9wZXJhdG9ySUQ6ICRPcGVyYXRvcklEIiwKICAgICk7CgogICAgIyBzYXZlIG9iamVjdCBpdCBmb3IgZGVsZXRlIHRlc3QKICAgIHB1c2ggQENvbmRpdGlvbk9wZXJhdG9yQ3JlYXRlZCwgJE9wZXJhdG9ySUQ7Cn0KCiMgY2hlY2sgY29uZGl0aW9uIG9wZXJhdG9yIGxpc3QKbXkgJE9wZXJhdG9yTGlzdCA9ICRDb25kaXRpb25PYmplY3QtPk9wZXJhdG9yTGlzdCgKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjaGVjayBmb3Igb3BlcmF0b3IgbGlzdAokU2VsZi0+VHJ1ZSgKICAgICRPcGVyYXRvckxpc3QsCiAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIE9wZXJhdG9yTGlzdCBpcyBub3QgZW1wdHkiLAopOwoKIyBjaGVjayBmb3Igb3BlcmF0b3IgbGlzdCBhcyBoYXNoIHJlZgokU2VsZi0+SXMoCiAgICByZWYgJE9wZXJhdG9yTGlzdCwKICAgICdIQVNIJywKICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gT3BlcmF0b3JMaXN0IHR5cGUiLAopOwoKIyBjaGVjayB1cGRhdGUgb2Ygb3BlcmF0b3Igb2JqZWN0Cm15ICRDb25kaXRpb25PcGVyYXRvck5ld05hbWUgPSAnVW5pdFRlc3RVcGRhdGUnIC4gJFJhbmRvbUlEOwokU2VsZi0+VHJ1ZSgKICAgICRDb25kaXRpb25PYmplY3QtPk9wZXJhdG9yVXBkYXRlKAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICBPcGVyYXRvcklEID0+ICRDb25kaXRpb25PcGVyYXRvckNyZWF0ZWRbMF0sCiAgICAgICAgTmFtZSAgICAgICA9PiAkQ29uZGl0aW9uT3BlcmF0b3JOZXdOYW1lLAogICAgKSwKICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gT3BlcmF0b3JVcGRhdGUiLAopOwpteSAkQ29uZGl0aW9uT3BlcmF0b3JVcGRhdGUgPSAkQ29uZGl0aW9uT2JqZWN0LT5PcGVyYXRvckdldCgKICAgIFVzZXJJRCAgICAgPT4gMSwKICAgIE9wZXJhdG9ySUQgPT4gJENvbmRpdGlvbk9wZXJhdG9yQ3JlYXRlZFswXSwKKTsKJFNlbGYtPklzKAogICAgJENvbmRpdGlvbk9wZXJhdG9yVXBkYXRlLT57TmFtZX0sCiAgICAkQ29uZGl0aW9uT3BlcmF0b3JOZXdOYW1lLAogICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBPcGVyYXRvclVwZGF0ZSB2ZXJpZnkgdXBkYXRlIiwKKTsKCiMgY2hlY2sgZm9yIG9wZXJhdG9yIGRlbGV0ZQpmb3IgbXkgJE9wZXJhdG9ySUQgKEBDb25kaXRpb25PcGVyYXRvckNyZWF0ZWQpIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRDb25kaXRpb25PYmplY3QtPk9wZXJhdG9yRGVsZXRlKAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgIE9wZXJhdG9ySUQgPT4gJE9wZXJhdG9ySUQsCiAgICAgICAgKSwKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIE9wZXJhdG9yRGVsZXRlIC0+IE9wZXJhdG9ySUQ6ICRPcGVyYXRvcklEIiwKICAgICk7Cn0KCiMKIyBjb25kaXRpb24gZXhwcmVzc2lvbiB0ZXN0cwojCgojIGNoZWNrIGZvciBkZWZhdWx0IGNvbmRpdGlvbiBleHByZXNzaW9ucwpteSBARXhwcmVzc2lvblRlc3RzID0gKAogICAgewogICAgICAgIE1hdGNoU3VjY2VzcyA9PiAwLAogICAgICAgIFNvdXJjZURhdGEgICA9PiB7CiAgICAgICAgICAgIEV4cHJlc3Npb25BZGQgPT4gewogICAgICAgICAgICAgICAgT2JqZWN0SUQgPT4gewogICAgICAgICAgICAgICAgICAgIE9iamVjdExvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQXR0cmlidXRlSUQgPT4gewogICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NoYW5nZVRpdGxlJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIE9wZXJhdG9ySUQgPT4gewogICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnaXMnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICMgc3RhdGljIGZpZWxkcwogICAgICAgICAgICAgICAgQ29uZGl0aW9uSUQgID0+ICRDb25kaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICBTZWxlY3RvciAgICAgPT4gJENoYW5nZUlEc1swXSwKICAgICAgICAgICAgICAgIENvbXBhcmVWYWx1ZSA9PiAnRHVtbXlDb21wYXJlVmFsdWUxJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBFeHByZXNzaW9uQWRkID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdElEID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdDaGFuZ2VNYW5hZ2VySUQnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdpcycsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBDb25kaXRpb25JRCAgPT4gJENvbmRpdGlvbklEc1swXSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgICA9PiAkQ2hhbmdlSURzWzBdLAogICAgICAgICAgICAgICAgQ29tcGFyZVZhbHVlID0+ICdEdW1teUNvbXBhcmVWYWx1ZTEnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIEV4cHJlc3Npb25BZGQgPT4gewogICAgICAgICAgICAgICAgT2JqZWN0SUQgPT4gewogICAgICAgICAgICAgICAgICAgIE9iamVjdExvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQXR0cmlidXRlSUQgPT4gewogICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1dvcmtPcmRlclRpdGxlJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIE9wZXJhdG9ySUQgPT4gewogICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnaXMgbm90JywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAjIHN0YXRpYyBmaWVsZHMKICAgICAgICAgICAgICAgIENvbmRpdGlvbklEICA9PiAkQ29uZGl0aW9uSURzWzFdLAogICAgICAgICAgICAgICAgU2VsZWN0b3IgICAgID0+ICRXb3JrT3JkZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBDb21wYXJlVmFsdWUgPT4gJ0R1bW15Q29tcGFyZVZhbHVlMicsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRXhwcmVzc2lvblVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQ2hhbmdlVGl0bGUnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdpcycsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBTZWxlY3RvciAgICAgPT4gJENoYW5nZUlEc1swXSwKICAgICAgICAgICAgICAgIENvbXBhcmVWYWx1ZSA9PiAnTmV3RHVtbXlDb21wYXJlVmFsdWUnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTWF0Y2hTdWNjZXNzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgID0+IHsKICAgICAgICAgICAgRXhwcmVzc2lvbkFkZCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnV29ya09yZGVyVGl0bGUnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdpcyBub3QnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICMgc3RhdGljIGZpZWxkcwogICAgICAgICAgICAgICAgQ29uZGl0aW9uSUQgID0+ICRDb25kaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICBTZWxlY3RvciAgICAgPT4gJFdvcmtPcmRlcklEc1sxXSwKICAgICAgICAgICAgICAgIENvbXBhcmVWYWx1ZSA9PiAkV29ya09yZGVyVGl0bGVzWzBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIEV4cHJlc3Npb25VcGRhdGUgPT4gewogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIEV4cHJlc3Npb25BZGQgPT4gewogICAgICAgICAgICAgICAgT2JqZWN0SUQgPT4gewogICAgICAgICAgICAgICAgICAgIE9iamVjdExvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQXR0cmlidXRlSUQgPT4gewogICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1BsYW5uZWRTdGFydFRpbWUnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdpcyBncmVhdGVyIHRoYW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICMgc3RhdGljIGZpZWxkcwogICAgICAgICAgICAgICAgQ29uZGl0aW9uSUQgID0+ICRDb25kaXRpb25JRHNbMV0sCiAgICAgICAgICAgICAgICBTZWxlY3RvciAgICAgPT4gJENoYW5nZUlEc1swXSwKICAgICAgICAgICAgICAgIENvbXBhcmVWYWx1ZSA9PiAnRHVtbXlDb21wYXJlVmFsdWUyJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBFeHByZXNzaW9uVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdElEID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAjIHN0YXRpYyBmaWVsZHMKICAgICAgICAgICAgICAgIFNlbGVjdG9yID0+ICRXb3JrT3JkZXJJRHNbMV0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE1hdGNoU3VjY2VzcyA9PiAxLAogICAgICAgIFNvdXJjZURhdGEgICA9PiB7CiAgICAgICAgICAgIEV4cHJlc3Npb25BZGQgPT4gewogICAgICAgICAgICAgICAgT2JqZWN0SUQgPT4gewogICAgICAgICAgICAgICAgICAgIE9iamVjdExvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQXR0cmlidXRlSUQgPT4gewogICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NoYW5nZVRpdGxlJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIE9wZXJhdG9ySUQgPT4gewogICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnaXMnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICMgc3RhdGljIGZpZWxkcwogICAgICAgICAgICAgICAgQ29uZGl0aW9uSUQgID0+ICRDb25kaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICBTZWxlY3RvciAgICAgPT4gJENoYW5nZUlEc1swXSwKICAgICAgICAgICAgICAgIENvbXBhcmVWYWx1ZSA9PiAkQ2hhbmdlVGl0bGVzWzBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTWF0Y2hTdWNjZXNzID0+IDAsCiAgICAgICAgU291cmNlRGF0YSAgID0+IHsKICAgICAgICAgICAgRXhwcmVzc2lvbkFkZCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQ2hhbmdlVGl0bGUnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdpcyBub3QnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICMgc3RhdGljIGZpZWxkcwogICAgICAgICAgICAgICAgQ29uZGl0aW9uSUQgID0+ICRDb25kaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICBTZWxlY3RvciAgICAgPT4gJENoYW5nZUlEc1swXSwKICAgICAgICAgICAgICAgIENvbXBhcmVWYWx1ZSA9PiAkQ2hhbmdlVGl0bGVzWzBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTWF0Y2hTdWNjZXNzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgID0+IHsKICAgICAgICAgICAgRXhwcmVzc2lvbkFkZCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQ2hhbmdlVGl0bGUnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdpcyBub3QnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICMgc3RhdGljIGZpZWxkcwogICAgICAgICAgICAgICAgQ29uZGl0aW9uSUQgID0+ICRDb25kaXRpb25JRHNbMF0sCiAgICAgICAgICAgICAgICBTZWxlY3RvciAgICAgPT4gJENoYW5nZUlEc1swXSwKICAgICAgICAgICAgICAgIENvbXBhcmVWYWx1ZSA9PiAkQ2hhbmdlVGl0bGVzWzBdIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTWF0Y2hTdWNjZXNzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgID0+IHsKICAgICAgICAgICAgRXhwcmVzc2lvbkFkZCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnV29ya09yZGVyVGl0bGUnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdpcycsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBDb25kaXRpb25JRCAgPT4gJENvbmRpdGlvbklEc1swXSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgICA9PiAkV29ya09yZGVySURzWzBdLAogICAgICAgICAgICAgICAgQ29tcGFyZVZhbHVlID0+ICRXb3JrT3JkZXJUaXRsZXNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBNYXRjaFN1Y2Nlc3MgPT4gMCwKICAgICAgICBTb3VyY2VEYXRhICAgPT4gewogICAgICAgICAgICBFeHByZXNzaW9uQWRkID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdElEID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdXb3JrT3JkZXJUaXRsZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBPcGVyYXRvcklEID0+IHsKICAgICAgICAgICAgICAgICAgICBPcGVyYXRvckxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ2lzJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAjIHN0YXRpYyBmaWVsZHMKICAgICAgICAgICAgICAgIENvbmRpdGlvbklEICA9PiAkQ29uZGl0aW9uSURzWzJdLAogICAgICAgICAgICAgICAgU2VsZWN0b3IgICAgID0+ICdhbGwnLAogICAgICAgICAgICAgICAgQ29tcGFyZVZhbHVlID0+ICRXb3JrT3JkZXJUaXRsZXNbOF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBNYXRjaFN1Y2Nlc3MgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICAgPT4gewogICAgICAgICAgICBFeHByZXNzaW9uQWRkID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdElEID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdXb3JrT3JkZXJUaXRsZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBPcGVyYXRvcklEID0+IHsKICAgICAgICAgICAgICAgICAgICBPcGVyYXRvckxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ2lzJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAjIHN0YXRpYyBmaWVsZHMKICAgICAgICAgICAgICAgIENvbmRpdGlvbklEICA9PiAkQ29uZGl0aW9uSURzWzJdLAogICAgICAgICAgICAgICAgU2VsZWN0b3IgICAgID0+ICdhbnknLAogICAgICAgICAgICAgICAgQ29tcGFyZVZhbHVlID0+ICRXb3JrT3JkZXJUaXRsZXNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBNYXRjaFN1Y2Nlc3MgPT4gMCwKICAgICAgICBTb3VyY2VEYXRhICAgPT4gewogICAgICAgICAgICBFeHByZXNzaW9uQWRkID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdElEID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdXb3JrT3JkZXJUaXRsZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBPcGVyYXRvcklEID0+IHsKICAgICAgICAgICAgICAgICAgICBPcGVyYXRvckxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ2lzIGVtcHR5JywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAjIHN0YXRpYyBmaWVsZHMKICAgICAgICAgICAgICAgIENvbmRpdGlvbklEICA9PiAkQ29uZGl0aW9uSURzWzJdLAogICAgICAgICAgICAgICAgU2VsZWN0b3IgICAgID0+ICRXb3JrT3JkZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDb21wYXJlVmFsdWUgPT4gJFdvcmtPcmRlclRpdGxlc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE1hdGNoU3VjY2VzcyA9PiAxLAogICAgICAgIFNvdXJjZURhdGEgICA9PiB7CiAgICAgICAgICAgIEV4cHJlc3Npb25BZGQgPT4gewogICAgICAgICAgICAgICAgT2JqZWN0SUQgPT4gewogICAgICAgICAgICAgICAgICAgIE9iamVjdExvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQXR0cmlidXRlSUQgPT4gewogICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1dvcmtPcmRlclRpdGxlJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIE9wZXJhdG9ySUQgPT4gewogICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnaXMgbm90IGVtcHR5JywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAjIHN0YXRpYyBmaWVsZHMKICAgICAgICAgICAgICAgIENvbmRpdGlvbklEICA9PiAkQ29uZGl0aW9uSURzWzJdLAogICAgICAgICAgICAgICAgU2VsZWN0b3IgICAgID0+ICRXb3JrT3JkZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDb21wYXJlVmFsdWUgPT4gJFdvcmtPcmRlclRpdGxlc1swXSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE1hdGNoU3VjY2VzcyA9PiAxLAogICAgICAgIFNvdXJjZURhdGEgICA9PiB7CiAgICAgICAgICAgIEV4cHJlc3Npb25BZGQgPT4gewogICAgICAgICAgICAgICAgT2JqZWN0SUQgPT4gewogICAgICAgICAgICAgICAgICAgIE9iamVjdExvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQXR0cmlidXRlSUQgPT4gewogICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1dvcmtPcmRlck51bWJlcicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBPcGVyYXRvcklEID0+IHsKICAgICAgICAgICAgICAgICAgICBPcGVyYXRvckxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ2lzIGdyZWF0ZXIgdGhhbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBDb25kaXRpb25JRCAgPT4gJENvbmRpdGlvbklEc1syXSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgICA9PiAkV29ya09yZGVySURzWzBdLAogICAgICAgICAgICAgICAgQ29tcGFyZVZhbHVlID0+IDAsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBNYXRjaFN1Y2Nlc3MgPT4gMCwKICAgICAgICBTb3VyY2VEYXRhICAgPT4gewogICAgICAgICAgICBFeHByZXNzaW9uQWRkID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdElEID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdXb3JrT3JkZXJOdW1iZXInLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdpcyBncmVhdGVyIHRoYW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICMgc3RhdGljIGZpZWxkcwogICAgICAgICAgICAgICAgQ29uZGl0aW9uSUQgID0+ICRDb25kaXRpb25JRHNbMl0sCiAgICAgICAgICAgICAgICBTZWxlY3RvciAgICAgPT4gJFdvcmtPcmRlcklEc1swXSwKICAgICAgICAgICAgICAgIENvbXBhcmVWYWx1ZSA9PiAxXzAwMF8wMDAsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBNYXRjaFN1Y2Nlc3MgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICAgPT4gewogICAgICAgICAgICBFeHByZXNzaW9uQWRkID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdElEID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdXb3JrT3JkZXJOdW1iZXInLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdpcyBsZXNzIHRoYW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICMgc3RhdGljIGZpZWxkcwogICAgICAgICAgICAgICAgQ29uZGl0aW9uSUQgID0+ICRDb25kaXRpb25JRHNbMl0sCiAgICAgICAgICAgICAgICBTZWxlY3RvciAgICAgPT4gJFdvcmtPcmRlcklEc1swXSwKICAgICAgICAgICAgICAgIENvbXBhcmVWYWx1ZSA9PiAxXzAwMF8wMDAsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBNYXRjaFN1Y2Nlc3MgPT4gMCwKICAgICAgICBTb3VyY2VEYXRhICAgPT4gewogICAgICAgICAgICBFeHByZXNzaW9uQWRkID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdElEID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdXb3JrT3JkZXJOdW1iZXInLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdpcyBsZXNzIHRoYW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICMgc3RhdGljIGZpZWxkcwogICAgICAgICAgICAgICAgQ29uZGl0aW9uSUQgID0+ICRDb25kaXRpb25JRHNbMl0sCiAgICAgICAgICAgICAgICBTZWxlY3RvciAgICAgPT4gJFdvcmtPcmRlcklEc1swXSwKICAgICAgICAgICAgICAgIENvbXBhcmVWYWx1ZSA9PiAwLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTWF0Y2hTdWNjZXNzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgID0+IHsKICAgICAgICAgICAgRXhwcmVzc2lvbkFkZCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUGxhbm5lZFN0YXJ0VGltZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBPcGVyYXRvcklEID0+IHsKICAgICAgICAgICAgICAgICAgICBPcGVyYXRvckxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ2lzIGJlZm9yZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBDb25kaXRpb25JRCAgPT4gJENvbmRpdGlvbklEc1syXSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgICA9PiAkV29ya09yZGVySURzWzBdLAogICAgICAgICAgICAgICAgQ29tcGFyZVZhbHVlID0+ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCgKICAgICAgICAgICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICggJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKSArIDEwICksCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTWF0Y2hTdWNjZXNzID0+IDAsCiAgICAgICAgU291cmNlRGF0YSAgID0+IHsKICAgICAgICAgICAgRXhwcmVzc2lvbkFkZCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUGxhbm5lZFN0YXJ0VGltZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBPcGVyYXRvcklEID0+IHsKICAgICAgICAgICAgICAgICAgICBPcGVyYXRvckxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ2lzIGJlZm9yZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBDb25kaXRpb25JRCAgPT4gJENvbmRpdGlvbklEc1syXSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgICA9PiAkV29ya09yZGVySURzWzBdLAogICAgICAgICAgICAgICAgQ29tcGFyZVZhbHVlID0+ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCgKICAgICAgICAgICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTeXN0ZW1UaW1lQmVmb3JlQWRkaW5nLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE1hdGNoU3VjY2VzcyA9PiAxLAogICAgICAgIFNvdXJjZURhdGEgICA9PiB7CiAgICAgICAgICAgIEV4cHJlc3Npb25BZGQgPT4gewogICAgICAgICAgICAgICAgT2JqZWN0SUQgPT4gewogICAgICAgICAgICAgICAgICAgIE9iamVjdExvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQXR0cmlidXRlSUQgPT4gewogICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1BsYW5uZWRTdGFydFRpbWUnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdpcyBhZnRlcicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBDb25kaXRpb25JRCAgPT4gJENvbmRpdGlvbklEc1syXSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgICA9PiAkV29ya09yZGVySURzWzBdLAogICAgICAgICAgICAgICAgQ29tcGFyZVZhbHVlID0+ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCgKICAgICAgICAgICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTeXN0ZW1UaW1lQmVmb3JlQWRkaW5nLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE1hdGNoU3VjY2VzcyA9PiAwLAogICAgICAgIFNvdXJjZURhdGEgICA9PiB7CiAgICAgICAgICAgIEV4cHJlc3Npb25BZGQgPT4gewogICAgICAgICAgICAgICAgT2JqZWN0SUQgPT4gewogICAgICAgICAgICAgICAgICAgIE9iamVjdExvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQXR0cmlidXRlSUQgPT4gewogICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1BsYW5uZWRTdGFydFRpbWUnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdpcyBhZnRlcicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBDb25kaXRpb25JRCAgPT4gJENvbmRpdGlvbklEc1syXSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgICA9PiAkV29ya09yZGVySURzWzBdLAogICAgICAgICAgICAgICAgQ29tcGFyZVZhbHVlID0+ICRUaW1lT2JqZWN0LT5TeXN0ZW1UaW1lMlRpbWVTdGFtcCgKICAgICAgICAgICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICggJFRpbWVPYmplY3QtPlN5c3RlbVRpbWUoKSArIDEwICksCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTWF0Y2hTdWNjZXNzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgID0+IHsKICAgICAgICAgICAgRXhwcmVzc2lvbkFkZCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnV29ya09yZGVyVGl0bGUnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdpcycsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBDb25kaXRpb25JRCAgPT4gJENvbmRpdGlvbklEc1syXSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgICA9PiAkV29ya09yZGVySURzWzBdLAogICAgICAgICAgICAgICAgQ29tcGFyZVZhbHVlID0+ICRXb3JrT3JkZXJUaXRsZXNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBNYXRjaFN1Y2Nlc3MgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICAgPT4gewogICAgICAgICAgICBFeHByZXNzaW9uQWRkID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdElEID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdXb3JrT3JkZXJUaXRsZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBPcGVyYXRvcklEID0+IHsKICAgICAgICAgICAgICAgICAgICBPcGVyYXRvckxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ2NvbnRhaW5zJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAjIHN0YXRpYyBmaWVsZHMKICAgICAgICAgICAgICAgIENvbmRpdGlvbklEICA9PiAkQ29uZGl0aW9uSURzWzJdLAogICAgICAgICAgICAgICAgU2VsZWN0b3IgICAgID0+ICRXb3JrT3JkZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDb21wYXJlVmFsdWUgPT4gc3Vic3RyKCAkV29ya09yZGVyVGl0bGVzWzBdLCAtNCApLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTWF0Y2hTdWNjZXNzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgID0+IHsKICAgICAgICAgICAgRXhwcmVzc2lvbkFkZCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnV29ya09yZGVyVGl0bGUnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdjb250YWlucycsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBDb25kaXRpb25JRCAgPT4gJENvbmRpdGlvbklEc1syXSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgICA9PiAkV29ya09yZGVySURzWzBdLAogICAgICAgICAgICAgICAgQ29tcGFyZVZhbHVlID0+ICRXb3JrT3JkZXJUaXRsZXNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBNYXRjaFN1Y2Nlc3MgPT4gMCwKICAgICAgICBTb3VyY2VEYXRhICAgPT4gewogICAgICAgICAgICBFeHByZXNzaW9uQWRkID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdElEID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdXb3JrT3JkZXJUaXRsZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBPcGVyYXRvcklEID0+IHsKICAgICAgICAgICAgICAgICAgICBPcGVyYXRvckxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ2NvbnRhaW5zJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAjIHN0YXRpYyBmaWVsZHMKICAgICAgICAgICAgICAgIENvbmRpdGlvbklEICA9PiAkQ29uZGl0aW9uSURzWzJdLAogICAgICAgICAgICAgICAgU2VsZWN0b3IgICAgID0+ICRXb3JrT3JkZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDb21wYXJlVmFsdWUgPT4gJ05vdCBBIFZhbGlkIFZhbHVlICcgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBNYXRjaFN1Y2Nlc3MgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICAgPT4gewogICAgICAgICAgICBFeHByZXNzaW9uQWRkID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdElEID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdXb3JrT3JkZXJUaXRsZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBPcGVyYXRvcklEID0+IHsKICAgICAgICAgICAgICAgICAgICBPcGVyYXRvckxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ25vdCBjb250YWlucycsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBDb25kaXRpb25JRCAgPT4gJENvbmRpdGlvbklEc1syXSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgICA9PiAkV29ya09yZGVySURzWzBdLAogICAgICAgICAgICAgICAgQ29tcGFyZVZhbHVlID0+ICdOb3QgQSBWYWxpZCBWYWx1ZSAnIC4gJFJhbmRvbUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTWF0Y2hTdWNjZXNzID0+IDAsCiAgICAgICAgU291cmNlRGF0YSAgID0+IHsKICAgICAgICAgICAgRXhwcmVzc2lvbkFkZCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnV29ya09yZGVyVGl0bGUnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdub3QgY29udGFpbnMnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICMgc3RhdGljIGZpZWxkcwogICAgICAgICAgICAgICAgQ29uZGl0aW9uSUQgID0+ICRDb25kaXRpb25JRHNbMl0sCiAgICAgICAgICAgICAgICBTZWxlY3RvciAgICAgPT4gJFdvcmtPcmRlcklEc1swXSwKICAgICAgICAgICAgICAgIENvbXBhcmVWYWx1ZSA9PiAkV29ya09yZGVyVGl0bGVzWzBdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTWF0Y2hTdWNjZXNzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgID0+IHsKICAgICAgICAgICAgRXhwcmVzc2lvbkFkZCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnV29ya09yZGVyVGl0bGUnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdiZWdpbnMgd2l0aCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBDb25kaXRpb25JRCAgPT4gJENvbmRpdGlvbklEc1syXSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgICA9PiAkV29ya09yZGVySURzWzBdLAogICAgICAgICAgICAgICAgQ29tcGFyZVZhbHVlID0+IHN1YnN0ciggJFdvcmtPcmRlclRpdGxlc1swXSwgMCwgNCApLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTWF0Y2hTdWNjZXNzID0+IDAsCiAgICAgICAgU291cmNlRGF0YSAgID0+IHsKICAgICAgICAgICAgRXhwcmVzc2lvbkFkZCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnV29ya09yZGVyVGl0bGUnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdiZWdpbnMgd2l0aCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBDb25kaXRpb25JRCAgPT4gJENvbmRpdGlvbklEc1syXSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgICA9PiAkV29ya09yZGVySURzWzBdLAogICAgICAgICAgICAgICAgQ29tcGFyZVZhbHVlID0+IHN1YnN0ciggJFdvcmtPcmRlclRpdGxlc1swXSwgMSApLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTWF0Y2hTdWNjZXNzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgID0+IHsKICAgICAgICAgICAgRXhwcmVzc2lvbkFkZCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnV29ya09yZGVyVGl0bGUnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdlbmRzIHdpdGgnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICMgc3RhdGljIGZpZWxkcwogICAgICAgICAgICAgICAgQ29uZGl0aW9uSUQgID0+ICRDb25kaXRpb25JRHNbMl0sCiAgICAgICAgICAgICAgICBTZWxlY3RvciAgICAgPT4gJFdvcmtPcmRlcklEc1swXSwKICAgICAgICAgICAgICAgIENvbXBhcmVWYWx1ZSA9PiBzdWJzdHIoICRXb3JrT3JkZXJUaXRsZXNbMF0sIC00ICksCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBNYXRjaFN1Y2Nlc3MgPT4gMCwKICAgICAgICBTb3VyY2VEYXRhICAgPT4gewogICAgICAgICAgICBFeHByZXNzaW9uQWRkID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdElEID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdXb3JrT3JkZXJUaXRsZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBPcGVyYXRvcklEID0+IHsKICAgICAgICAgICAgICAgICAgICBPcGVyYXRvckxvb2t1cCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ2VuZHMgd2l0aCcsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBDb25kaXRpb25JRCAgPT4gJENvbmRpdGlvbklEc1syXSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgICA9PiAkV29ya09yZGVySURzWzBdLAogICAgICAgICAgICAgICAgQ29tcGFyZVZhbHVlID0+IHN1YnN0ciggJFdvcmtPcmRlclRpdGxlc1swXSwgMSwgMyApLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBUZXN0IGZvciBidWcjIDEwODYyCiAgICB7CiAgICAgICAgTWF0Y2hTdWNjZXNzID0+IDAsCiAgICAgICAgU291cmNlRGF0YSAgID0+IHsKICAgICAgICAgICAgRXhwcmVzc2lvbkFkZCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQ2hhbmdlTWFuYWdlcklEJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIE9wZXJhdG9ySUQgPT4gewogICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnaXMgbm90JywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAjIHN0YXRpYyBmaWVsZHMKICAgICAgICAgICAgICAgIENvbmRpdGlvbklEICA9PiAkQ29uZGl0aW9uSURzWzBdLAogICAgICAgICAgICAgICAgU2VsZWN0b3IgICAgID0+ICRDaGFuZ2VJRHNbMF0sCiAgICAgICAgICAgICAgICBDb21wYXJlVmFsdWUgPT4gJycsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKKTsKCiMgY2hlY2sgY29uZGl0aW9uIGV4cHJlc3Npb25zCm15IEBFeHByZXNzaW9uSURzOwpFWFBSRVNTSU9OVEVTVDoKZm9yIG15ICRFeHByZXNzaW9uVGVzdCAoQEV4cHJlc3Npb25UZXN0cykgewoKICAgICMgc3RvcmUgZGF0YSBvZiB0ZXN0IGNhc2VzIGxvY2FsbHkKICAgIG15ICVTb3VyY2VEYXRhOwogICAgbXkgJEV4cHJlc3Npb25JRDsKICAgIG15ICVFeHByZXNzaW9uQWRkU291cmNlRGF0YTsKICAgIG15ICVFeHByZXNzaW9uQWRkRGF0YTsKCiAgICAjIGV4dHJhY3Qgc291cmNlIGRhdGEKICAgIGlmICggJEV4cHJlc3Npb25UZXN0LT57U291cmNlRGF0YX0gKSB7CiAgICAgICAgJVNvdXJjZURhdGEgPSAleyAkRXhwcmVzc2lvblRlc3QtPntTb3VyY2VEYXRhfSB9OwogICAgfQoKICAgIG5leHQgRVhQUkVTU0lPTlRFU1QgaWYgISVTb3VyY2VEYXRhOwoKICAgIENSRUFURURBVEE6CiAgICBmb3IgbXkgJENyZWF0ZURhdGEgKCBzb3J0IGtleXMgJVNvdXJjZURhdGEgKSB7CgogICAgICAgICMgYWRkIGV4cHJlc3Npb24KICAgICAgICBpZiAoICRDcmVhdGVEYXRhIGVxICdFeHByZXNzaW9uQWRkJyApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCBFeHByZXNzaW9uQWRkIGRhdGEKICAgICAgICAgICAgJUV4cHJlc3Npb25BZGRTb3VyY2VEYXRhID0gJXsgJFNvdXJjZURhdGF7JENyZWF0ZURhdGF9IH07CgogICAgICAgICAgICAjIHNldCBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgIG15IEBTdGF0aWNGaWVsZHMgPSBxdyggU2VsZWN0b3IgQ29tcGFyZVZhbHVlIFVzZXJJRCBDb25kaXRpb25JRCApOwoKICAgICAgICAgICAgU1RBVElDRklFTEQ6CiAgICAgICAgICAgIGZvciBteSAkU3RhdGljRmllbGQgKEBTdGF0aWNGaWVsZHMpIHsKCiAgICAgICAgICAgICAgICAjIG9taXQgc3RhdGljIGZpZWxkIGlmIGl0IGlzIG5vdCBzZXQKICAgICAgICAgICAgICAgIG5leHQgU1RBVElDRklFTEQgaWYgIWV4aXN0cyAkRXhwcmVzc2lvbkFkZFNvdXJjZURhdGF7JFN0YXRpY0ZpZWxkfQogICAgICAgICAgICAgICAgICAgIHx8ICFkZWZpbmVkICRFeHByZXNzaW9uQWRkU291cmNlRGF0YXskU3RhdGljRmllbGR9OwoKICAgICAgICAgICAgICAgICMgc2FmZSBkYXRhCiAgICAgICAgICAgICAgICAkRXhwcmVzc2lvbkFkZERhdGF7JFN0YXRpY0ZpZWxkfSA9ICRFeHByZXNzaW9uQWRkU291cmNlRGF0YXskU3RhdGljRmllbGR9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCBhbGwgZmllbGRzIGZvciBFeHByZXNzaW9uQWRkCiAgICAgICAgICAgIEVYUFJFU1NJT05BRERWQUxVRToKICAgICAgICAgICAgZm9yIG15ICRFeHByZXNzaW9uQWRkVmFsdWUgKCBzb3J0IGtleXMgJUV4cHJlc3Npb25BZGRTb3VyY2VEYXRhICkgewoKICAgICAgICAgICAgICAgICMgb21pdCBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBuZXh0IEVYUFJFU1NJT05BRERWQUxVRSBpZiBncmVwIHsgJF8gZXEgJEV4cHJlc3Npb25BZGRWYWx1ZSB9IEBTdGF0aWNGaWVsZHM7CgogICAgICAgICAgICAgICAgIyBnZXQgdmFsdWVzIGZvciBmaWVsZHMKICAgICAgICAgICAgICAgIGZvciBteSAkRmllbGRWYWx1ZSAoIHNvcnQga2V5cyAleyAkRXhwcmVzc2lvbkFkZFNvdXJjZURhdGF7JEV4cHJlc3Npb25BZGRWYWx1ZX0gfSApCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICMgc3RvcmUgZ2F0aGVyZWQgaW5mb3JtYXRpb24gaW4gaGFzaCBmb3IgYWRkaW5nCiAgICAgICAgICAgICAgICAgICAgJEV4cHJlc3Npb25BZGREYXRheyRFeHByZXNzaW9uQWRkVmFsdWV9ID0KICAgICAgICAgICAgICAgICAgICAgICAgJENvbmRpdGlvbk9iamVjdC0+JEZpZWxkVmFsdWUoCiAgICAgICAgICAgICAgICAgICAgICAgICV7ICRFeHByZXNzaW9uQWRkU291cmNlRGF0YXskRXhwcmVzc2lvbkFkZFZhbHVlfS0+eyRGaWVsZFZhbHVlfSB9LAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFkZCBleHByZXNzaW9uCiAgICAgICAgICAgICRFeHByZXNzaW9uSUQgPSAkQ29uZGl0aW9uT2JqZWN0LT5FeHByZXNzaW9uQWRkKAogICAgICAgICAgICAgICAgJUV4cHJlc3Npb25BZGREYXRhLAogICAgICAgICAgICApIHx8IDA7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRFeHByZXNzaW9uSUQsCiAgICAgICAgICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtICRDcmVhdGVEYXRhIC0+ICRFeHByZXNzaW9uSUQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBDUkVBVEVEQVRBIGlmICEkRXhwcmVzc2lvbklEOwoKICAgICAgICAgICAgIyBzYXZlIGNyZWF0ZWQgSUQgZm9yIGRlbGV0aW5nIGV4cHJlc3Npb25zCiAgICAgICAgICAgIHB1c2ggQEV4cHJlc3Npb25JRHMsICRFeHByZXNzaW9uSUQ7CgogICAgICAgICAgICAjIGNoZWNrIHRoZSBhZGRlZCBleHByZXNzaW9uCiAgICAgICAgICAgIG15ICRFeHByZXNzaW9uR2V0RGF0YSA9ICRDb25kaXRpb25PYmplY3QtPkV4cHJlc3Npb25HZXQoCiAgICAgICAgICAgICAgICBFeHByZXNzaW9uSUQgPT4gJEV4cHJlc3Npb25JRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkRXhwcmVzc2lvbkFkZERhdGF7VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkRXhwcmVzc2lvbkdldERhdGEsCiAgICAgICAgICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gJyAtIEV4cHJlc3Npb25BZGQoKTogRXhwcmVzc2lvbkdldCcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHRlc3QgdmFsdWVzCiAgICAgICAgICAgIGRlbGV0ZSAkRXhwcmVzc2lvbkFkZERhdGF7VXNlcklEfTsKICAgICAgICAgICAgZm9yIG15ICRUZXN0VmFsdWUgKCBzb3J0IGtleXMgJUV4cHJlc3Npb25BZGREYXRhICkgewogICAgICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgICAgICRFeHByZXNzaW9uR2V0RGF0YS0+eyRUZXN0VmFsdWV9LAogICAgICAgICAgICAgICAgICAgICRFeHByZXNzaW9uQWRkRGF0YXskVGVzdFZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIEV4cHJlc3Npb25BZGQoKTogRXhwcmVzc2lvbkdldCAtPiAkVGVzdFZhbHVlIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9ICAgICMgZW5kIGlmICggJENyZWF0ZURhdGEgZXEgJ0V4cHJlc3Npb25BZGQnICkKCiAgICAgICAgIyB1cGRhdGUgZXhwcmVzc2lvbgogICAgICAgIGlmICggJENyZWF0ZURhdGEgZXEgJ0V4cHJlc3Npb25VcGRhdGUnICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IEV4cHJlc3Npb25VcGRhdGUgZGF0YQogICAgICAgICAgICBteSAlRXhwcmVzc2lvblVwZGF0ZVNvdXJjZURhdGEgPSAleyAkU291cmNlRGF0YXskQ3JlYXRlRGF0YX0gfTsKICAgICAgICAgICAgbXkgJUV4cHJlc3Npb25VcGRhdGVEYXRhOwoKICAgICAgICAgICAgIyBzZXQgc3RhdGljIGZpZWxkcwogICAgICAgICAgICBteSBAU3RhdGljRmllbGRzID0gcXcoIFNlbGVjdG9yIENvbXBhcmVWYWx1ZSBVc2VySUQgQ29uZGl0aW9uSUQgKTsKCiAgICAgICAgICAgIFNUQVRJQ0ZJRUxEOgogICAgICAgICAgICBmb3IgbXkgJFN0YXRpY0ZpZWxkIChAU3RhdGljRmllbGRzKSB7CgogICAgICAgICAgICAgICAgIyBvbWl0IHN0YXRpYyBmaWVsZCBpZiBpdCBpcyBub3Qgc2V0CiAgICAgICAgICAgICAgICBuZXh0IFNUQVRJQ0ZJRUxEIGlmICEkRXhwcmVzc2lvblVwZGF0ZVNvdXJjZURhdGF7JFN0YXRpY0ZpZWxkfTsKCiAgICAgICAgICAgICAgICAjIHNhZmUgZGF0YQogICAgICAgICAgICAgICAgJEV4cHJlc3Npb25VcGRhdGVEYXRheyRTdGF0aWNGaWVsZH0gPSAkRXhwcmVzc2lvblVwZGF0ZVNvdXJjZURhdGF7JFN0YXRpY0ZpZWxkfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgYWxsIGZpZWxkcyBmb3IgRXhwcmVzc2lvblVwZGF0ZQogICAgICAgICAgICBFWFBSRVNTSU9OVVBEQVRFVkFMVUU6CiAgICAgICAgICAgIGZvciBteSAkRXhwcmVzc2lvblVwZGF0ZVZhbHVlICggc29ydCBrZXlzICVFeHByZXNzaW9uVXBkYXRlU291cmNlRGF0YSApIHsKCiAgICAgICAgICAgICAgICAjIG9taXQgc3RhdGljIGZpZWxkcwogICAgICAgICAgICAgICAgbmV4dCBFWFBSRVNTSU9OVVBEQVRFVkFMVUUgaWYgZ3JlcCB7ICRfIGVxICRFeHByZXNzaW9uVXBkYXRlVmFsdWUgfSBAU3RhdGljRmllbGRzOwoKICAgICAgICAgICAgICAgICMgZ2V0IHZhbHVlcyBmb3IgZmllbGRzCiAgICAgICAgICAgICAgICBmb3IgbXkgJEZpZWxkVmFsdWUgKAogICAgICAgICAgICAgICAgICAgIHNvcnQga2V5cyAleyAkRXhwcmVzc2lvblVwZGF0ZVNvdXJjZURhdGF7JEV4cHJlc3Npb25VcGRhdGVWYWx1ZX0gfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgIyBzdG9yZSBnYXRoZXJlZCBpbmZvcm1hdGlvbiBpbiBoYXNoIGZvciB1cGRhdGluZwogICAgICAgICAgICAgICAgICAgICRFeHByZXNzaW9uVXBkYXRlRGF0YXskRXhwcmVzc2lvblVwZGF0ZVZhbHVlfSA9CiAgICAgICAgICAgICAgICAgICAgICAgICRDb25kaXRpb25PYmplY3QtPiRGaWVsZFZhbHVlKAogICAgICAgICAgICAgICAgICAgICAgICAleyAkRXhwcmVzc2lvblVwZGF0ZVNvdXJjZURhdGF7JEV4cHJlc3Npb25VcGRhdGVWYWx1ZX0tPnskRmllbGRWYWx1ZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB1cGRhdGUgZXhwcmVzc2lvbgogICAgICAgICAgICBteSAkVXBkYXRlU3VjY2VzcyA9ICRDb25kaXRpb25PYmplY3QtPkV4cHJlc3Npb25VcGRhdGUoCiAgICAgICAgICAgICAgICBFeHByZXNzaW9uSUQgPT4gJEV4cHJlc3Npb25JRCwKICAgICAgICAgICAgICAgICVFeHByZXNzaW9uVXBkYXRlRGF0YSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFVwZGF0ZVN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtICRDcmVhdGVEYXRhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgQ1JFQVRFREFUQSBpZiAhJFVwZGF0ZVN1Y2Nlc3M7CgogICAgICAgICAgICAjIGNoZWNrIHRoZSBhZGRlZCBleHByZXNzaW9uCiAgICAgICAgICAgIG15ICRFeHByZXNzaW9uR2V0RGF0YSA9ICRDb25kaXRpb25PYmplY3QtPkV4cHJlc3Npb25HZXQoCiAgICAgICAgICAgICAgICBFeHByZXNzaW9uSUQgPT4gJEV4cHJlc3Npb25JRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkRXhwcmVzc2lvblVwZGF0ZURhdGF7VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkRXhwcmVzc2lvbkdldERhdGEsCiAgICAgICAgICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gJyAtIEV4cHJlc3Npb25VcGRhdGUoKTogRXhwcmVzc2lvbkdldCcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG1lcmdlIGFkZCBhbmQgdXBkYXRlIGRhdGEKICAgICAgICAgICAgJUV4cHJlc3Npb25VcGRhdGVEYXRhID0gKCAlRXhwcmVzc2lvbkFkZERhdGEsICVFeHByZXNzaW9uVXBkYXRlRGF0YSApOwoKICAgICAgICAgICAgIyB0ZXN0IHZhbHVlcwogICAgICAgICAgICBkZWxldGUgJEV4cHJlc3Npb25VcGRhdGVEYXRhe1VzZXJJRH07CiAgICAgICAgICAgIGZvciBteSAkVGVzdFZhbHVlICggc29ydCBrZXlzICVFeHByZXNzaW9uVXBkYXRlRGF0YSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkRXhwcmVzc2lvbkdldERhdGEtPnskVGVzdFZhbHVlfSwKICAgICAgICAgICAgICAgICAgICAkRXhwcmVzc2lvblVwZGF0ZURhdGF7JFRlc3RWYWx1ZX0sCiAgICAgICAgICAgICAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBFeHByZXNzaW9uVXBkYXRlKCk6IEV4cHJlc3Npb25HZXQgLT4gJFRlc3RWYWx1ZSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfSAgICAjIGVuZCBpZiAoICRDcmVhdGVEYXRhIGVxICdFeHByZXNzaW9uVXBkYXRlJyApCiAgICB9Cn0KCiMgY2hlY2sgZm9yIGV4cHJlc3Npb24gbGlzdApDT05ESVRJT05JRDoKZm9yIG15ICRDb25kaXRpb25JRCAoQENvbmRpdGlvbklEcykgewoKICAgICMgY2hlY2sgZm9yIGV4cHJlc3Npb25zIG9mIHRoaXMgY29uZGl0aW9uIGlkCiAgICBteSAkRXhwcmVzc2lvblRlc3RDb3VudCA9IDA7CiAgICBFWFBSRVNTSU9OVEVTVDoKICAgIGZvciBteSAkRXhwcmVzc2lvblRlc3QgKEBFeHByZXNzaW9uVGVzdHMpIHsKCiAgICAgICAgIyBvbWl0IHRlc3QgY2FzZSBpZiBubyBzb3VyY2UgZGF0YSBpcyBhdmFpbGFibGUKICAgICAgICBuZXh0IEVYUFJFU1NJT05URVNUIGlmICEkRXhwcmVzc2lvblRlc3QtPntTb3VyY2VEYXRhfTsKCiAgICAgICAgIyBvbWl0IHRlc3QgY2FzZSBpZiBubyBleHByZXNzaW9uIHNob3VsZCBiZSBhZGRlZAogICAgICAgIG5leHQgRVhQUkVTU0lPTlRFU1QgaWYgISRFeHByZXNzaW9uVGVzdC0+e1NvdXJjZURhdGF9LT57RXhwcmVzc2lvbkFkZH07CgogICAgICAgICRFeHByZXNzaW9uVGVzdENvdW50KysKICAgICAgICAgICAgaWYgJEV4cHJlc3Npb25UZXN0LT57U291cmNlRGF0YX0tPntFeHByZXNzaW9uQWRkfS0+e0NvbmRpdGlvbklEfSA9PSAkQ29uZGl0aW9uSUQ7CiAgICB9CgogICAgbXkgJEV4cHJlc3Npb25MaXN0ID0gJENvbmRpdGlvbk9iamVjdC0+RXhwcmVzc2lvbkxpc3QoCiAgICAgICAgQ29uZGl0aW9uSUQgPT4gJENvbmRpdGlvbklELAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICByZWYgJEV4cHJlc3Npb25MaXN0LAogICAgICAgICdBUlJBWScsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICcgLSBFeHByZXNzaW9uTGlzdCByZXR1cm4gdmFsdWUnLAogICAgKTsKCiAgICAjIGNoZWNrIGZvciBsaXN0IHR5cGUKICAgIG5leHQgQ09ORElUSU9OSUQgaWYgcmVmICRFeHByZXNzaW9uTGlzdCBuZSAnQVJSQVknOwoKICAgICRTZWxmLT5JcygKICAgICAgICBzY2FsYXIgQHskRXhwcmVzc2lvbkxpc3R9LAogICAgICAgICRFeHByZXNzaW9uVGVzdENvdW50LAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gRXhwcmVzc2lvbkxpc3QgLT4gJENvbmRpdGlvbklEIiwKICAgICk7Cn0KCiMgdGVzdCBmb3IgbWF0Y2hpbmcKZm9yIG15ICRFeHByZXNzaW9uQ291bnRlciAoIDAgLi4gKCBzY2FsYXIgQEV4cHJlc3Npb25JRHMgLSAxICkgKSB7CgogICAgbXkgJEV4cHJlc3Npb25JRCA9ICRFeHByZXNzaW9uSURzWyRFeHByZXNzaW9uQ291bnRlcl07CgogICAgIyBncm91cCByZWxhdGVkIHRlc3RzCiAgICAkVGVzdENvdW50Kys7CgogICAgIyBwcmludCBpbmZvIGFib3V0IHRoZSBtYXRjaCB0ZXN0OgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgMSwKICAgICAgICAiTWF0Y2ggdGVzdCAkVGVzdENvdW50OiAiCiAgICAgICAgICAgIC4gIkV4cHJlc3Npb25Db3VudGVyID0+ICRFeHByZXNzaW9uQ291bnRlciwgRXhwcmVzc2lvbklEID0+ICRFeHByZXNzaW9uSUQiLAogICAgKTsKCiAgICAjIGdldCBvYmplY3QgdmFsdWUgZm9yIGF0dHJpYnV0ZXMKICAgIG15ICRPYmplY3ROYW1lID0gJEV4cHJlc3Npb25UZXN0c1skRXhwcmVzc2lvbkNvdW50ZXJdLT57U291cmNlRGF0YX0tPntFeHByZXNzaW9uQWRkfS0+e09iamVjdElEfQogICAgICAgIC0+e09iamVjdExvb2t1cH0tPntOYW1lfTsKCiAgICAjIGNoZWNrIGZvciB1cGRhdGVkIG9iamVjdAogICAgaWYgKAogICAgICAgICRFeHByZXNzaW9uVGVzdHNbJEV4cHJlc3Npb25Db3VudGVyXS0+e1NvdXJjZURhdGF9LT57RXhwcmVzc2lvblVwZGF0ZX0KICAgICAgICAmJiAkRXhwcmVzc2lvblRlc3RzWyRFeHByZXNzaW9uQ291bnRlcl0tPntTb3VyY2VEYXRhfS0+e0V4cHJlc3Npb25VcGRhdGV9LT57T2JqZWN0SUR9CiAgICAgICAgLT57T2JqZWN0TG9va3VwfS0+e05hbWV9CiAgICAgICAgKQogICAgewogICAgICAgICRPYmplY3ROYW1lID0gJEV4cHJlc3Npb25UZXN0c1skRXhwcmVzc2lvbkNvdW50ZXJdLT57U291cmNlRGF0YX0tPntFeHByZXNzaW9uVXBkYXRlfS0+e09iamVjdElEfQogICAgICAgICAgICAtPntPYmplY3RMb29rdXB9LT57TmFtZX07CiAgICB9CgogICAgIyBnZXQgYXR0cmlidXRlIHZhbHVlcyBmb3IgYXR0cmlidXRlcwogICAgbXkgJEF0dHJpYnV0ZU5hbWUgPSAkRXhwcmVzc2lvblRlc3RzWyRFeHByZXNzaW9uQ291bnRlcl0tPntTb3VyY2VEYXRhfS0+e0V4cHJlc3Npb25BZGR9LT57QXR0cmlidXRlSUR9CiAgICAgICAgLT57QXR0cmlidXRlTG9va3VwfS0+e05hbWV9OwoKICAgICMgY2hlY2sgZm9yIHVwZGF0ZWQgYXR0cmlidXRlCiAgICBpZiAoCiAgICAgICAgJEV4cHJlc3Npb25UZXN0c1skRXhwcmVzc2lvbkNvdW50ZXJdLT57U291cmNlRGF0YX0tPntFeHByZXNzaW9uVXBkYXRlfQogICAgICAgICYmICRFeHByZXNzaW9uVGVzdHNbJEV4cHJlc3Npb25Db3VudGVyXS0+e1NvdXJjZURhdGF9LT57RXhwcmVzc2lvblVwZGF0ZX0tPntBdHRyaWJ1dGVJRH0KICAgICAgICAtPntBdHRyaWJ1dGVMb29rdXB9LT57TmFtZX0KICAgICAgICApCiAgICB7CiAgICAgICAgJEF0dHJpYnV0ZU5hbWUgPSAkRXhwcmVzc2lvblRlc3RzWyRFeHByZXNzaW9uQ291bnRlcl0tPntTb3VyY2VEYXRhfS0+e0V4cHJlc3Npb25VcGRhdGV9LT57QXR0cmlidXRlSUR9CiAgICAgICAgICAgIC0+e0F0dHJpYnV0ZUxvb2t1cH0tPntOYW1lfTsKICAgIH0KCiAgICAjIHRlc3Qgb24gc3VjY2Vzc2Z1bCByZXN1bHQKICAgIGlmICggJEV4cHJlc3Npb25UZXN0c1skRXhwcmVzc2lvbkNvdW50ZXJdLT57TWF0Y2hTdWNjZXNzfSApIHsKCiAgICAgICAgIyB0ZXN0IHdpdGhvdXQgZ2l2ZW4gY2hhbmdlZCBhdHRyaWJ1dGVzCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDb25kaXRpb25PYmplY3QtPkV4cHJlc3Npb25NYXRjaCgKICAgICAgICAgICAgICAgIEV4cHJlc3Npb25JRCA9PiAkRXhwcmVzc2lvbklELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB8fCAwLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50IC0gRXhwcmVzc2lvbk1hdGNoIHJldHVybiB0cnVlLCB3aXRob3V0IGNoYW5nZWQgYXR0cmlidXRlcyIsCiAgICAgICAgKTsKCiAgICAgICAgIyB0ZXN0IHdpdGggZ2l2ZW4gY2hhbmdlZCBhdHRyaWJ1dGVzCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDb25kaXRpb25PYmplY3QtPkV4cHJlc3Npb25NYXRjaCgKICAgICAgICAgICAgICAgIEV4cHJlc3Npb25JRCAgICAgID0+ICRFeHByZXNzaW9uSUQsCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzQ2hhbmdlZCA9PiB7ICRPYmplY3ROYW1lID0+IFskQXR0cmlidXRlTmFtZV0gfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB8fCAwLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50IC0gRXhwcmVzc2lvbk1hdGNoIHJldHVybiB0cnVlLCB3aXRoIGNoYW5nZWQgYXR0cmlidXRlcyIsCiAgICAgICAgKTsKCiAgICAgICAgIyB0ZXN0IHdpdGggd3JvbmcgZ2l2ZW4gb2JqZWN0IHR5cGUgb2YgY2hhbmdlZCBhdHRyaWJ1dGVzCiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkQ29uZGl0aW9uT2JqZWN0LT5FeHByZXNzaW9uTWF0Y2goCiAgICAgICAgICAgICAgICBFeHByZXNzaW9uSUQgICAgICA9PiAkRXhwcmVzc2lvbklELAogICAgICAgICAgICAgICAgQXR0cmlidXRlc0NoYW5nZWQgPT4geyAkT2JqZWN0TmFtZSAuICdVVCcgLiAkUmFuZG9tSUQgPT4gWyRBdHRyaWJ1dGVOYW1lXSB9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHx8IDAsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQgLSBFeHByZXNzaW9uTWF0Y2ggcmV0dXJuIGZhbHNlLCB3cm9uZyBvYmplY3QgdHlwZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyB0ZXN0IHdpdGggd3JvbmcgZ2l2ZW4gYXR0cmlidXRlIHR5cGUgb2YgY2hhbmdlZCBhdHRyaWJ1dGVzCiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkQ29uZGl0aW9uT2JqZWN0LT5FeHByZXNzaW9uTWF0Y2goCiAgICAgICAgICAgICAgICBFeHByZXNzaW9uSUQgICAgICA9PiAkRXhwcmVzc2lvbklELAogICAgICAgICAgICAgICAgQXR0cmlidXRlc0NoYW5nZWQgPT4geyAkT2JqZWN0TmFtZSA9PiBbICRBdHRyaWJ1dGVOYW1lIC4gJ1VUJyAuICRSYW5kb21JRCBdIH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgfHwgMCwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudCAtIEV4cHJlc3Npb25NYXRjaCByZXR1cm4gZmFsc2UsIHdyb25nIGF0dHJpYnV0ZSB0eXBlIiwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgdGVzdCB3aXRob3V0IGdpdmVuIGNoYW5nZWQgYXR0cmlidXRlcwogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJENvbmRpdGlvbk9iamVjdC0+RXhwcmVzc2lvbk1hdGNoKAogICAgICAgICAgICAgICAgRXhwcmVzc2lvbklEID0+ICRFeHByZXNzaW9uSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHx8IDAsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQgLSBFeHByZXNzaW9uTWF0Y2ggcmV0dXJuIGZhbHNlLCB3aXRob3V0IGNoYW5nZWQgYXR0cmlidXRlcyIsCiAgICAgICAgKTsKCiAgICAgICAgIyB0ZXN0IHdpdGggZ2l2ZW4gY2hhbmdlZCBhdHRyaWJ1dGVzCiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkQ29uZGl0aW9uT2JqZWN0LT5FeHByZXNzaW9uTWF0Y2goCiAgICAgICAgICAgICAgICBFeHByZXNzaW9uSUQgICAgICA9PiAkRXhwcmVzc2lvbklELAogICAgICAgICAgICAgICAgQXR0cmlidXRlc0NoYW5nZWQgPT4geyAkT2JqZWN0TmFtZSA9PiBbJEF0dHJpYnV0ZU5hbWVdIH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgfHwgMCwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudCAtIEV4cHJlc3Npb25NYXRjaCByZXR1cm4gZmFsc2UsIHdpdGggY2hhbmdlZCBhdHRyaWJ1dGVzIiwKICAgICAgICApOwogICAgfQp9CgojCiMgY29uZGl0aW9uIGFjdGlvbiB0ZXN0cwojCgojIGNoZWNrIGZvciBkZWZhdWx0IGNvbmRpdGlvbiBhY3Rpb25zCm15IEBBY3Rpb25UZXN0cyA9ICgKICAgIHsKICAgICAgICBBY3Rpb25TdWNjZXNzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgICA9PiB7CiAgICAgICAgICAgIEFjdGlvbkFkZCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgID0+ICdDaGFuZ2VUaXRsZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ3NldCcsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICMgc3RhdGljIGZpZWxkcwogICAgICAgICAgICAgICAgQ29uZGl0aW9uSUQgPT4gJENvbmRpdGlvbklEc1sxXSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgID0+ICRDaGFuZ2VJRHNbMF0sCiAgICAgICAgICAgICAgICBBY3Rpb25WYWx1ZSA9PiAnTmV3IENoYW5nZSBUaXRsZScgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgVGVzdCBmb3IgYnVnIyAxMDg2MgogICAgewogICAgICAgIEFjdGlvblN1Y2Nlc3MgPT4gMCwKICAgICAgICBTb3VyY2VEYXRhICAgID0+IHsKICAgICAgICAgICAgQWN0aW9uQWRkID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdElEID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ0NoYW5nZU1hbmFnZXJJRCcsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ2xvY2snLAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAjIHN0YXRpYyBmaWVsZHMKICAgICAgICAgICAgICAgIENvbmRpdGlvbklEID0+ICRDb25kaXRpb25JRHNbMV0sCiAgICAgICAgICAgICAgICBTZWxlY3RvciAgICA9PiAkQ2hhbmdlSURzWzBdLAogICAgICAgICAgICAgICAgQWN0aW9uVmFsdWUgPT4gJycsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEFjdGlvblN1Y2Nlc3MgPT4gMCwKICAgICAgICBTb3VyY2VEYXRhICAgID0+IHsKICAgICAgICAgICAgQWN0aW9uQWRkID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdElEID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ0NoYW5nZVN0YXRlSUQnLAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIE9wZXJhdG9ySUQgPT4gewogICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgID0+ICdsb2NrJywKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICAgICBDb25kaXRpb25JRCA9PiAkQ29uZGl0aW9uSURzWzFdLAogICAgICAgICAgICAgICAgU2VsZWN0b3IgICAgPT4gJENoYW5nZUlEc1swXSwKICAgICAgICAgICAgICAgIEFjdGlvblZhbHVlID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIEFjdGlvblN1Y2Nlc3MgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICAgID0+IHsKICAgICAgICAgICAgQWN0aW9uQWRkID0+IHsKICAgICAgICAgICAgICAgIE9iamVjdElEID0+IHsKICAgICAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUlEID0+IHsKICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ0NoYW5nZU1hbmFnZXJJRCcsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ3NldCcsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICMgc3RhdGljIGZpZWxkcwogICAgICAgICAgICAgICAgQ29uZGl0aW9uSUQgPT4gJENvbmRpdGlvbklEc1s2XSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgID0+ICRDaGFuZ2VJRHNbMV0sCiAgICAgICAgICAgICAgICBBY3Rpb25WYWx1ZSA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBBY3Rpb25TdWNjZXNzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgICA9PiB7CiAgICAgICAgICAgIEFjdGlvbkFkZCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSAgID0+ICdXb3JrT3JkZXJUaXRsZScsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgT3BlcmF0b3JJRCA9PiB7CiAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ3NldCcsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICMgc3RhdGljIGZpZWxkcwogICAgICAgICAgICAgICAgQ29uZGl0aW9uSUQgPT4gJENvbmRpdGlvbklEc1swXSwKICAgICAgICAgICAgICAgIFNlbGVjdG9yICAgID0+ICRXb3JrT3JkZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBBY3Rpb25WYWx1ZSA9PiAnTmV3IFdvcmtPcmRlclRpdGxlIFRpdGxlJyAuICRSYW5kb21JRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCik7CgojIGNoZWNrIGNvbmRpdGlvbiBhY3Rpb25zCm15IEBBY3Rpb25JRHM7CkFDVElPTlRFU1Q6CmZvciBteSAkQWN0aW9uVGVzdCAoQEFjdGlvblRlc3RzKSB7CgogICAgIyBzdG9yZSBkYXRhIG9mIHRlc3QgY2FzZXMgbG9jYWxseQogICAgbXkgJVNvdXJjZURhdGE7CiAgICBteSAkQWN0aW9uSUQ7CgogICAgIyBleHRyYWN0IHNvdXJjZSBkYXRhCiAgICBpZiAoICRBY3Rpb25UZXN0LT57U291cmNlRGF0YX0gKSB7CiAgICAgICAgJVNvdXJjZURhdGEgPSAleyAkQWN0aW9uVGVzdC0+e1NvdXJjZURhdGF9IH07CiAgICB9CgogICAgIyBjaGVjayBmb3Igc291ciBkYXRhCiAgICBuZXh0IEFDVElPTlRFU1QgaWYgISVTb3VyY2VEYXRhOwoKICAgIENSRUFURURBVEE6CiAgICBmb3IgbXkgJENyZWF0ZURhdGEgKCBzb3J0IGtleXMgJVNvdXJjZURhdGEgKSB7CgogICAgICAgICMgYWRkIGFjdGlvbgogICAgICAgIGlmICggJENyZWF0ZURhdGEgZXEgJ0FjdGlvbkFkZCcgKSB7CgogICAgICAgICAgICAjIGFkZCBhY3Rpb24KICAgICAgICAgICAgJEFjdGlvbklEID0gX0FjdGlvbkFkZCggJFNvdXJjZURhdGF7JENyZWF0ZURhdGF9ICk7CgogICAgICAgICAgICAjIGNoZWNrIGZvciBhY3Rpb24gaWQKICAgICAgICAgICAgbmV4dCBDUkVBVEVEQVRBIGlmICEkQWN0aW9uSUQ7CgogICAgICAgICAgICAjIHNhdmUgY3JlYXRlZCBJRCBmb3IgZGVsZXRpbmcgYWN0aW9ucwogICAgICAgICAgICBwdXNoIEBBY3Rpb25JRHMsICRBY3Rpb25JRDsKICAgICAgICB9CiAgICB9Cn0KCiMgY2hlY2sgZXhlY3V0aW9uIG9mIGFjdGlvbnMKQUNUSU9OQ09VTlRFUjoKZm9yIG15ICRBY3Rpb25Db3VudGVyICggMCAuLiAoICggc2NhbGFyIEBBY3Rpb25UZXN0cyApIC0gMSApICkgewoKICAgIG15ICRBY3Rpb25JRCA9ICRBY3Rpb25JRHNbJEFjdGlvbkNvdW50ZXJdIHx8IDA7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEFjdGlvbklELAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gQWN0aW9uRXhlY3V0ZSAtPiBBY3Rpb25JRDogJEFjdGlvbklEIiwKICAgICk7CgogICAgbmV4dCBBQ1RJT05DT1VOVEVSIGlmICEkQWN0aW9uSUQ7CgogICAgIyBzZWxlY3QgYXNzZXJ0IGZ1bmN0aW9uCiAgICBteSAkVGVzdFN1YiA9ICdGYWxzZSc7CiAgICBpZiAoICRBY3Rpb25UZXN0c1skQWN0aW9uQ291bnRlcl0tPntBY3Rpb25TdWNjZXNzfSApIHsKICAgICAgICAkVGVzdFN1YiA9ICdUcnVlJzsKICAgIH0KCiAgICAjIHRlc3QgZm9yIHJlc3VsdAogICAgJFNlbGYtPiRUZXN0U3ViKAogICAgICAgICRDb25kaXRpb25PYmplY3QtPkFjdGlvbkV4ZWN1dGUoCiAgICAgICAgICAgIEFjdGlvbklEID0+ICRBY3Rpb25JRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKQogICAgICAgICAgICB8fCAwLAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gQWN0aW9uRXhlY3V0ZSAtPiBBY3Rpb25JRDogJEFjdGlvbklEIiwKICAgICk7CgogICAgIyBkbyBub3QgZXhlY3V0ZSBmdXJ0aGVyIGNoZWNrcyBpZiBhY3Rpb24KICAgICMgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHN1Y2Nlc3NmdWxseQogICAgbmV4dCBBQ1RJT05DT1VOVEVSIGlmICEkQWN0aW9uVGVzdHNbJEFjdGlvbkNvdW50ZXJdLT57QWN0aW9uU3VjY2Vzc307CgogICAgIyBjaGVjayBmb3IgdXBkYXRlZCBhY3Rpb24KICAgIG15ICRBY3Rpb24gPSAkQ29uZGl0aW9uT2JqZWN0LT5BY3Rpb25HZXQoCiAgICAgICAgQWN0aW9uSUQgPT4gJEFjdGlvbklELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEFjdGlvbiwKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIEFjdGlvbkV4ZWN1dGUgLT4gQWN0aW9uR2V0OiAkQWN0aW9uSUQiLAogICAgKTsKICAgIG5leHQgQUNUSU9OQ09VTlRFUiBpZiAhJEFjdGlvbjsKCiAgICAjIGdldCBvYmplY3QgbmFtZQogICAgbXkgJE9iamVjdE5hbWUgPSAkQ29uZGl0aW9uT2JqZWN0LT5PYmplY3RMb29rdXAoCiAgICAgICAgT2JqZWN0SUQgPT4gJEFjdGlvbi0+e09iamVjdElEfSwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRPYmplY3ROYW1lLAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gQWN0aW9uRXhlY3V0ZSAtPiBPYmplY3RMb29rdXA6ICRPYmplY3ROYW1lIiwKICAgICk7CiAgICBuZXh0IEFDVElPTkNPVU5URVIgaWYgISRPYmplY3ROYW1lOwoKICAgICMgZ2V0IGF0dHJpYnV0ZSBuYW1lCiAgICBteSAkQXR0cmlidXRlTmFtZSA9ICRDb25kaXRpb25PYmplY3QtPkF0dHJpYnV0ZUxvb2t1cCgKICAgICAgICBBdHRyaWJ1dGVJRCA9PiAkQWN0aW9uLT57QXR0cmlidXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEF0dHJpYnV0ZU5hbWUsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBBY3Rpb25FeGVjdXRlIC0+IEF0dHJpYnV0ZUxvb2t1cDogJEF0dHJpYnV0ZU5hbWUiLAogICAgKTsKICAgIG5leHQgQUNUSU9OQ09VTlRFUiBpZiAhJE9iamVjdE5hbWU7CgogICAgIyBnZXQgb2JqZWN0IGRhdGEKICAgIG15ICRPYmplY3REYXRhOwogICAgaWYgKCAkT2JqZWN0TmFtZSBlcSAnSVRTTUNoYW5nZScgKSB7CiAgICAgICAgJE9iamVjdERhdGEgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRBY3Rpb24tPntTZWxlY3Rvcn0sCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJE9iamVjdE5hbWUgZXEgJ0lUU01Xb3JrT3JkZXInICkgewogICAgICAgICRPYmplY3REYXRhID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyR2V0KAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkQWN0aW9uLT57U2VsZWN0b3J9LAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQXR0cmlidXRlTmFtZSwKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIEFjdGlvbkV4ZWN1dGUgLT4gZ2V0IE9iamVjdERhdGE6ICRPYmplY3ROYW1lIiwKICAgICk7CiAgICBuZXh0IEFDVElPTkNPVU5URVIgaWYgISRPYmplY3REYXRhOwoKICAgICMgY2hlY2sgZm9yIHVwZGF0ZWQgdmFsdWUKICAgICRTZWxmLT5JcygKICAgICAgICAkT2JqZWN0RGF0YS0+eyRBdHRyaWJ1dGVOYW1lfSwKICAgICAgICAkQWN0aW9uLT57QWN0aW9uVmFsdWV9LAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gQWN0aW9uRXhlY3V0ZSAtPiBnZXQgY2hhbmdlZCBkYXRhOiAkT2JqZWN0TmFtZSIsCiAgICApOwp9CgojIHRlc3QgZm9yIG1hdGNoIHN0YXRlIGxvY2sKJFNlbGYtPkZhbHNlKAogICAgJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uTWF0Y2hTdGF0ZUxvY2soCiAgICAgICAgT2JqZWN0TmFtZSA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgU2VsZWN0b3IgICA9PiAkQ2hhbmdlSURzWzBdLAogICAgICAgIFN0YXRlSUQgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgKQogICAgICAgIHx8IDAsCiAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtIENvbmRpdGlvbk1hdGNoU3RhdGVMb2NrIiwKKTsKCiMgY2hlY2sgZm9yIGV4cHJlc3Npb24gZGVsZXRlCmZvciBteSAkRXhwcmVzc2lvbklEIChARXhwcmVzc2lvbklEcykgewogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJENvbmRpdGlvbk9iamVjdC0+RXhwcmVzc2lvbkRlbGV0ZSgKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgICAgIEV4cHJlc3Npb25JRCA9PiAkRXhwcmVzc2lvbklELAogICAgICAgICksCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBFeHByZXNzaW9uRGVsZXRlIC0+IEV4cHJlc3Npb25JRDogJEV4cHJlc3Npb25JRCIsCiAgICApOwoKICAgICMgZG91YmxlIGNoZWNrIGlmIGV4cHJlc3Npb24gaXMgcmVhbGx5IGRlbGV0ZWQKICAgIG15ICRFeHByZXNzaW9uRGF0YSA9ICRDb25kaXRpb25PYmplY3QtPkV4cHJlc3Npb25HZXQoCiAgICAgICAgRXhwcmVzc2lvbklEID0+ICRFeHByZXNzaW9uSUQsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICB1bmRlZiwKICAgICAgICAkRXhwcmVzc2lvbkRhdGEtPntFeHByZXNzaW9uSUR9LAogICAgICAgICdUZXN0JyAuICRUZXN0Q291bnQrKyAuICc6IEV4cHJlc3Npb25EZWxldGUoKSAtIGRvdWJsZSBjaGVjaycsCiAgICApOwp9CgojIGNoZWNrIGZvciBhY3Rpb24gZGVsZXRlCmZvciBteSAkQWN0aW9uSUQgKEBBY3Rpb25JRHMpIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRDb25kaXRpb25PYmplY3QtPkFjdGlvbkRlbGV0ZSgKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgQWN0aW9uSUQgPT4gJEFjdGlvbklELAogICAgICAgICksCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBBY3Rpb25EZWxldGUgLT4gQWN0aW9uSUQ6ICRBY3Rpb25JRCIsCiAgICApOwoKICAgICMgZG91YmxlIGNoZWNrIGlmIGFjdGlvbiBpcyByZWFsbHkgZGVsZXRlZAogICAgbXkgJEFjdGlvbkRhdGEgPSAkQ29uZGl0aW9uT2JqZWN0LT5BY3Rpb25HZXQoCiAgICAgICAgQWN0aW9uSUQgPT4gJEFjdGlvbklELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICB1bmRlZiwKICAgICAgICAkQWN0aW9uRGF0YS0+e0FjdGlvbklEfSwKICAgICAgICAnVGVzdCcgLiAkVGVzdENvdW50KysgLiAnOiBBY3Rpb25EZWxldGUoKSAtIGRvdWJsZSBjaGVjaycsCiAgICApOwp9CgojIGNoZWNrIGZvciBjb25kaXRpb24gZGVsZXRlCmZvciBteSAkQ29uZGl0aW9uSUQgKEBDb25kaXRpb25JRHMpIHsKCiAgICBteSAkRGVsZXRlU3VjY2VzcyA9ICRDb25kaXRpb25PYmplY3QtPkNvbmRpdGlvbkRlbGV0ZSgKICAgICAgICBDb25kaXRpb25JRCA9PiAkQ29uZGl0aW9uSUQsCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJERlbGV0ZVN1Y2Nlc3MsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBDb25kaXRpb25EZWxldGUgLT4gQ29uZGl0aW9uSUQ6ICRDb25kaXRpb25JRCIsCiAgICApOwoKICAgICMgZG91YmxlIGNoZWNrIGlmIGNvbmRpdGlvbiBpcyByZWFsbHkgZGVsZXRlZAogICAgbXkgJENvbmRpdGlvbkRhdGEgPSAkQ29uZGl0aW9uT2JqZWN0LT5Db25kaXRpb25HZXQoCiAgICAgICAgQ29uZGl0aW9uSUQgPT4gJENvbmRpdGlvbklELAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICB1bmRlZiwKICAgICAgICAkQ29uZGl0aW9uRGF0YS0+e0NvbmRpdGlvbklEfSwKICAgICAgICAnVGVzdCcgLiAkVGVzdENvdW50KysgLiAnOiBDb25kaXRpb25EZWxldGUoKSAtIGRvdWJsZSBjaGVjaycsCiAgICApOwp9CgojIHNldCBTZW5kTm90aWZpY2F0aW9ucyB0byBpdCdzIG9yaWdpbmFsIHZhbHVlCiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdJVFNNQ2hhbmdlOjpTZW5kTm90aWZpY2F0aW9ucycsCiAgICBWYWx1ZSA9PiAkU2VuZE5vdGlmaWNhdGlvbnNPcmcsCik7CgojIGNsZWFudXAgaXMgZG9uZSBieSBSZXN0b3JlRGF0YWJhc2UKCnN1YiBfQWN0aW9uQWRkIHsKICAgIG15ICRBY3Rpb25EYXRhID0gc2hpZnQ7CgogICAgcmV0dXJuIGlmICEkQWN0aW9uRGF0YTsKICAgIHJldHVybiBpZiByZWYgJEFjdGlvbkRhdGEgbmUgJ0hBU0gnOwoKICAgICMgaGFzaCBmb3IgYWRkaW5nCiAgICBteSAlQWN0aW9uQWRkOwoKICAgICMgc2V0IHN0YXRpYyBmaWVsZHMKICAgIG15IEBTdGF0aWNGaWVsZHMgPSBxdyggU2VsZWN0b3IgQWN0aW9uVmFsdWUgVXNlcklEIENvbmRpdGlvbklEICk7CgogICAgU1RBVElDRklFTEQ6CiAgICBmb3IgbXkgJFN0YXRpY0ZpZWxkIChAU3RhdGljRmllbGRzKSB7CgogICAgICAgICMgb21pdCBzdGF0aWMgZmllbGQgaWYgaXQgaXMgbm90IHNldAogICAgICAgIG5leHQgU1RBVElDRklFTEQgaWYgIWV4aXN0cyAkQWN0aW9uRGF0YS0+eyRTdGF0aWNGaWVsZH07CiAgICAgICAgbmV4dCBTVEFUSUNGSUVMRCBpZiAhZGVmaW5lZCAkQWN0aW9uRGF0YS0+eyRTdGF0aWNGaWVsZH07CgogICAgICAgICMgc2FmZSBkYXRhCiAgICAgICAgJEFjdGlvbkFkZHskU3RhdGljRmllbGR9ID0gJEFjdGlvbkRhdGEtPnskU3RhdGljRmllbGR9OwogICAgfQoKICAgICMgZ2V0IGFsbCBmaWVsZHMgZm9yIEFjdGlvbkFkZAogICAgQUNUSU9OQUREVkFMVUU6CiAgICBmb3IgbXkgJEFjdGlvbkFkZFZhbHVlICggc29ydCBrZXlzICV7JEFjdGlvbkRhdGF9ICkgewoKICAgICAgICAjIG9taXQgc3RhdGljIGZpZWxkcwogICAgICAgIG5leHQgQUNUSU9OQUREVkFMVUUgaWYgZ3JlcCB7ICRfIGVxICRBY3Rpb25BZGRWYWx1ZSB9IEBTdGF0aWNGaWVsZHM7CgogICAgICAgICMgZ2V0IHZhbHVlcyBmb3IgZmllbGRzCiAgICAgICAgZm9yIG15ICRGaWVsZFZhbHVlICggc29ydCBrZXlzICV7ICRBY3Rpb25EYXRhLT57JEFjdGlvbkFkZFZhbHVlfSB9ICkgewoKICAgICAgICAgICAgIyBzdG9yZSBnYXRoZXJlZCBpbmZvcm1hdGlvbiBpbiBoYXNoIGZvciBhZGRpbmcKICAgICAgICAgICAgJEFjdGlvbkFkZHskQWN0aW9uQWRkVmFsdWV9ID0gJENvbmRpdGlvbk9iamVjdC0+JEZpZWxkVmFsdWUoCiAgICAgICAgICAgICAgICAleyAkQWN0aW9uRGF0YS0+eyRBY3Rpb25BZGRWYWx1ZX0tPnskRmllbGRWYWx1ZX0gfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBhZGQgYWN0aW9uCiAgICBteSAkQWN0aW9uSUQgPSAkQ29uZGl0aW9uT2JqZWN0LT5BY3Rpb25BZGQoCiAgICAgICAgJUFjdGlvbkFkZCwKICAgICkgfHwgMDsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQWN0aW9uSUQsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBBY3Rpb25BZGQgLT4gJEFjdGlvbklEIiwKICAgICk7CgogICAgIyBjaGVjayBmb3IgQWN0aW9uSUQKICAgIHJldHVybiBpZiAhJEFjdGlvbklEOwoKICAgICMgY2hlY2sgdGhlIGFkZGVkIGFjdGlvbgogICAgbXkgJEFjdGlvbkdldCA9ICRDb25kaXRpb25PYmplY3QtPkFjdGlvbkdldCgKICAgICAgICBBY3Rpb25JRCA9PiAkQWN0aW9uSUQsCiAgICAgICAgVXNlcklEICAgPT4gJEFjdGlvbkFkZHtVc2VySUR9LAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRBY3Rpb25HZXQsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICcgLSBBY3Rpb25BZGQoKTogQWN0aW9uR2V0JywKICAgICk7CgogICAgIyBkZWxldGUgVXNlcklELCBpdCBpcyBub3QgcmV0dXJuZWQKICAgIGRlbGV0ZSAkQWN0aW9uQWRke1VzZXJJRH07CgogICAgIyB0ZXN0IHZhbHVlcwogICAgZm9yIG15ICRUZXN0VmFsdWUgKCBzb3J0IGtleXMgJUFjdGlvbkFkZCApIHsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRBY3Rpb25HZXQtPnskVGVzdFZhbHVlfSwKICAgICAgICAgICAgJEFjdGlvbkFkZHskVGVzdFZhbHVlfSwKICAgICAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBBY3Rpb25BZGQoKTogQWN0aW9uR2V0IC0+ICRUZXN0VmFsdWUiLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRBY3Rpb25JRDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyBxdygkU2VsZik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgbWFrZSBwcmVwYXJhdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJFRlc3RDb3VudCA9IDE7CgojIGNyZWF0ZSBjb21tb24gb2JqZWN0cwpteSAkU3RhdGVNYWNoaW5lT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVN0YXRlTWFjaGluZScpOwpteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKCiMgdGVzdCBpZiBzdGF0ZW1hY2hpbmUgb2JqZWN0IHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseQokU2VsZi0+VHJ1ZSgKICAgICRTdGF0ZU1hY2hpbmVPYmplY3QsCiAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gJyAtIGNvbnN0cnVjdGlvbiBvZiBzdGF0ZW1hY2hpbmUgb2JqZWN0JywKKTsKJFNlbGYtPklzKAogICAgcmVmICRTdGF0ZU1hY2hpbmVPYmplY3QsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01TdGF0ZU1hY2hpbmUnLAogICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICcgLSBjbGFzcyBvZiBzdGF0ZW1hY2hpbmUgb2JqZWN0JywKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyB0ZXN0IFN0YXRlTWFjaGluZSBBUEkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwp7CgogICAgIyBkZWZpbmUgcHVibGljIGludGVyZmFjZSAoaW4gYWxwaGFiZXRpY2FsIG9yZGVyKQogICAgbXkgQE9iamVjdE1ldGhvZHMgPSBxdygKICAgICAgICBTdGF0ZUxpc3QKICAgICAgICBTdGF0ZUxvb2t1cAogICAgICAgIFN0YXRlVHJhbnNpdGlvbkFkZAogICAgICAgIFN0YXRlVHJhbnNpdGlvbkRlbGV0ZQogICAgICAgIFN0YXRlVHJhbnNpdGlvbkRlbGV0ZUFsbAogICAgICAgIFN0YXRlVHJhbnNpdGlvbkdldAogICAgICAgIFN0YXRlVHJhbnNpdGlvbkdldEVuZFN0YXRlcwogICAgICAgIFN0YXRlVHJhbnNpdGlvbkxpc3QKICAgICAgICBTdGF0ZVRyYW5zaXRpb25VcGRhdGUKICAgICk7CgogICAgIyBjaGVjayBpZiBzdWJzIGFyZSBhdmFpbGFibGUKICAgIGZvciBteSAkT2JqZWN0TWV0aG9kIChAT2JqZWN0TWV0aG9kcykgewogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3RhdGVNYWNoaW5lT2JqZWN0LT5jYW4oJE9iamVjdE1ldGhvZCksCiAgICAgICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiIC0gY2hlY2sgJ2NhbiAkT2JqZWN0TWV0aG9kJyIsCiAgICAgICAgKTsKICAgIH0KfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGRlZmluZSBkZWZhdWx0IHRyYW5zaXRpb25zIGZvciBjaGFuZ2Ugc3RhdGVzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IHRoZSBjaGFuZ2Ugc3RhdGVzIGZyb20gdGhlIGdlbmVyYWwgY2F0YWxvZwpteSAlTmFtZTJDaGFuZ2VTdGF0ZUlEID0gcmV2ZXJzZSAlewogICAgJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgKQp9OwoKIyBhZGQgemVybyBlbnRyeSBmb3IgdGhlIGluaXRpYWwgc3RhdGUKJE5hbWUyQ2hhbmdlU3RhdGVJRHswfSA9IDA7CgojIGJ1aWxkIHJldmVyc2UgbG9va3VwIGhhc2gKbXkgJUNoYW5nZVN0YXRlSUQyTmFtZSA9IHJldmVyc2UgJU5hbWUyQ2hhbmdlU3RhdGVJRDsKCiMgZGVmYXVsdCBDaGFuZ2VTdGF0ZSBUcmFuc2l0aW9ucwpteSAlRGVmYXVsdENoYW5nZVN0YXRlVHJhbnNpdGlvbnMgPSAoCiAgICAwICAgICAgICAgICAgICAgICAgPT4gWydyZXF1ZXN0ZWQnXSwKICAgICdyZXF1ZXN0ZWQnICAgICAgICA9PiBbICdyZWplY3RlZCcsICdyZXRyYWN0ZWQnLCAncGVuZGluZyBhcHByb3ZhbCcsICdpbiBwcm9ncmVzcycgXSwKICAgICdwZW5kaW5nIGFwcHJvdmFsJyA9PiBbICdyZWplY3RlZCcsICdyZXRyYWN0ZWQnLCAnYXBwcm92ZWQnIF0sCiAgICAnYXBwcm92ZWQnICAgICAgICAgPT4gWyAncmV0cmFjdGVkJywgJ2luIHByb2dyZXNzJyBdLAogICAgJ2luIHByb2dyZXNzJyAgICAgID0+IFsgJ3BlbmRpbmcgcGlyJywgJ3JldHJhY3RlZCcsICdmYWlsZWQnLCAnc3VjY2Vzc2Z1bCcsICdjYW5jZWxlZCcgXSwKICAgICdwZW5kaW5nIHBpcicgICAgICA9PiBbICdmYWlsZWQnLCAnc3VjY2Vzc2Z1bCcgXSwKICAgICdyZWplY3RlZCcgICAgICAgICA9PiBbMF0sCiAgICAncmV0cmFjdGVkJyAgICAgICAgPT4gWzBdLAogICAgJ2ZhaWxlZCcgICAgICAgICAgID0+IFswXSwKICAgICdzdWNjZXNzZnVsJyAgICAgICA9PiBbMF0sCiAgICAnY2FuY2VsZWQnICAgICAgICAgPT4gWzBdLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGRlZmluZSBkZWZhdWx0IHRyYW5zaXRpb25zIGZvciB3b3Jrb3JkZXIgc3RhdGVzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZ2V0IHRoZSB3b3Jrb3JkZXIgc3RhdGVzIGZyb20gdGhlIGdlbmVyYWwgY2F0YWxvZwpteSAlTmFtZTJXb3JrT3JkZXJTdGF0ZUlEID0gcmV2ZXJzZSAlewogICAgJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpTdGF0ZScsCiAgICAgICAgKQp9OwoKIyBhZGQgemVybyBlbnRyeSBmb3IgdGhlIGluaXRpYWwgc3RhdGUKJE5hbWUyV29ya09yZGVyU3RhdGVJRHswfSA9IDA7CgojIGJ1aWxkIHJldmVyc2UgbG9va3VwIGhhc2gKbXkgJVdvcmtPcmRlclN0YXRlSUQyTmFtZSA9IHJldmVyc2UgJU5hbWUyV29ya09yZGVyU3RhdGVJRDsKCiMgZGVmYXVsdCBXb3JrT3JkZXJTdGF0ZSBUcmFuc2l0aW9ucwpteSAlRGVmYXVsdFdvcmtPcmRlclN0YXRlVHJhbnNpdGlvbnMgPSAoCiAgICAwICAgICAgICAgICAgID0+IFsnY3JlYXRlZCddLAogICAgJ2NyZWF0ZWQnICAgICA9PiBbICdhY2NlcHRlZCcsICdjYW5jZWxlZCcgXSwKICAgICdhY2NlcHRlZCcgICAgPT4gWyAncmVhZHknLCAnY2FuY2VsZWQnIF0sCiAgICAncmVhZHknICAgICAgID0+IFsgJ2luIHByb2dyZXNzJywgJ2NhbmNlbGVkJyBdLAogICAgJ2luIHByb2dyZXNzJyA9PiBbICdjbG9zZWQnLCAnY2FuY2VsZWQnIF0sCiAgICAnY2FuY2VsZWQnICAgID0+IFswXSwKICAgICdjbG9zZWQnICAgICAgPT4gWzBdLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHN0YXRlIHRyYW5zaXRpb24gZ2V0IGVuZCBzdGF0ZXMgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKewoKICAgICMgZ2V0IG5leHQgZW5kIHN0YXRlcyBmb3IgJ2FwcHJvdmVkJwogICAgbXkgJE5leHRFbmRTdGF0ZUlEc1JlZiA9ICRTdGF0ZU1hY2hpbmVPYmplY3QtPlN0YXRlVHJhbnNpdGlvbkdldEVuZFN0YXRlcygKICAgICAgICBTdGF0ZUlEID0+ICROYW1lMkNoYW5nZVN0YXRlSUR7YXBwcm92ZWR9LAogICAgICAgIENsYXNzICAgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgKTsKICAgIG15ICVOZXh0RW5kU3RhdGVMb29rdXAgPSBtYXAgeyAkXyA9PiAxIH0gQHskTmV4dEVuZFN0YXRlSURzUmVmfTsKCiAgICAjICdyZXRyYWN0ZWQnIGlzIGEgbmV4dCBlbmQgc3RhdGUKICAgICRTZWxmLT5UcnVlKAogICAgICAgICROZXh0RW5kU3RhdGVMb29rdXB7ICROYW1lMkNoYW5nZVN0YXRlSUR7cmV0cmFjdGVkfSB9LAogICAgICAgICdUZXN0ICcKICAgICAgICAgICAgLiAkVGVzdENvdW50KysKICAgICAgICAgICAgLiAiOiBTdGF0ZVRyYW5zaXRpb25HZXRFbmRTdGF0ZXMoKSAtIEdldCB0aGUgbmV4dCBlbmQgc3RhdGVzLiIsCiAgICApOwoKICAgICMgJ2luIHByb2dyZXNzJyBpcyBub3QgYSBuZXh0IGVuZCBzdGF0ZQogICAgJFNlbGYtPkZhbHNlKAogICAgICAgICROZXh0RW5kU3RhdGVMb29rdXB7ICROYW1lMkNoYW5nZVN0YXRlSUR7J2luIHByb2dyZXNzJ30gfSwKICAgICAgICAnVGVzdCAnCiAgICAgICAgICAgIC4gJFRlc3RDb3VudCsrCiAgICAgICAgICAgIC4gIjogU3RhdGVUcmFuc2l0aW9uR2V0RW5kU3RhdGVzKCkgLSBHZXQgdGhlIG5leHQgZW5kIHN0YXRlcy4iLAogICAgKTsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKICAgICMgZ2V0IG5leHQgZW5kIHN0YXRlcyBmb3IgJ3JlcXVlc3RlZCcKICAgICROZXh0RW5kU3RhdGVJRHNSZWYgPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZVRyYW5zaXRpb25HZXRFbmRTdGF0ZXMoCiAgICAgICAgU3RhdGVJRCA9PiAkTmFtZTJDaGFuZ2VTdGF0ZUlEe3JlcXVlc3RlZH0sCiAgICAgICAgQ2xhc3MgICA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICApOwogICAgJU5leHRFbmRTdGF0ZUxvb2t1cCA9IG1hcCB7ICRfID0+IDEgfSBAeyROZXh0RW5kU3RhdGVJRHNSZWZ9OwoKICAgICMgJ3JlamVjdGVkJyBpcyBhIG5leHQgZW5kIHN0YXRlCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkTmV4dEVuZFN0YXRlTG9va3VweyAkTmFtZTJDaGFuZ2VTdGF0ZUlEe3JlamVjdGVkfSB9LAogICAgICAgICdUZXN0ICcKICAgICAgICAgICAgLiAkVGVzdENvdW50KysKICAgICAgICAgICAgLiAiOiBTdGF0ZVRyYW5zaXRpb25HZXRFbmRTdGF0ZXMoKSAtIEdldCB0aGUgbmV4dCBlbmQgc3RhdGVzLiIsCiAgICApOwoKICAgICMgJ3JldHJhY3RlZCcgaXMgYSBuZXh0IGVuZCBzdGF0ZQogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJE5leHRFbmRTdGF0ZUxvb2t1cHsgJE5hbWUyQ2hhbmdlU3RhdGVJRHtyZXRyYWN0ZWR9IH0sCiAgICAgICAgJ1Rlc3QgJwogICAgICAgICAgICAuICRUZXN0Q291bnQrKwogICAgICAgICAgICAuICI6IFN0YXRlVHJhbnNpdGlvbkdldEVuZFN0YXRlcygpIC0gR2V0IHRoZSBuZXh0IGVuZCBzdGF0ZXMuIiwKICAgICk7CgogICAgIyAncGVuZGluZyBhcHByb3ZhbCcgaXMgbm90IGEgbmV4dCBlbmQgc3RhdGUKICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAkTmV4dEVuZFN0YXRlTG9va3VweyAkTmFtZTJDaGFuZ2VTdGF0ZUlEeydwZW5kaW5nIGFwcHJvdmFsJ30gfSwKICAgICAgICAnVGVzdCAnCiAgICAgICAgICAgIC4gJFRlc3RDb3VudCsrCiAgICAgICAgICAgIC4gIjogU3RhdGVUcmFuc2l0aW9uR2V0RW5kU3RhdGVzKCkgLSBHZXQgdGhlIG5leHQgZW5kIHN0YXRlcy4iLAogICAgKTsKCiAgICAjICdpbiBwcm9ncmVzcycgaXMgbm90IGEgbmV4dCBlbmQgc3RhdGUKICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAkTmV4dEVuZFN0YXRlTG9va3VweyAkTmFtZTJDaGFuZ2VTdGF0ZUlEeydpbiBwcm9ncmVzcyd9IH0sCiAgICAgICAgJ1Rlc3QgJwogICAgICAgICAgICAuICRUZXN0Q291bnQrKwogICAgICAgICAgICAuICI6IFN0YXRlVHJhbnNpdGlvbkdldEVuZFN0YXRlcygpIC0gR2V0IHRoZSBuZXh0IGVuZCBzdGF0ZXMuIiwKICAgICk7CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiAgICAjIGdldCBuZXh0IGVuZCBzdGF0ZXMgZm9yICdyZXRyYWN0ZWQnCiAgICAkTmV4dEVuZFN0YXRlSURzUmVmID0gJFN0YXRlTWFjaGluZU9iamVjdC0+U3RhdGVUcmFuc2l0aW9uR2V0RW5kU3RhdGVzKAogICAgICAgIFN0YXRlSUQgPT4gJE5hbWUyQ2hhbmdlU3RhdGVJRHtyZXRyYWN0ZWR9LAogICAgICAgIENsYXNzICAgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgKTsKCiAgICAjICdyZXRyYWN0ZWQnIGhhcyBubyBuZXh0IGVuZCBzdGF0ZXMsIGJlY2F1c2UgaXQgaXMgYW4gZW5kIHN0YXRlIGl0c2VsZgogICAgJFNlbGYtPkZhbHNlKAogICAgICAgIHNjYWxhciBAeyROZXh0RW5kU3RhdGVJRHNSZWZ9LAogICAgICAgICdUZXN0ICcKICAgICAgICAgICAgLiAkVGVzdENvdW50KysKICAgICAgICAgICAgLiAiOiBTdGF0ZVRyYW5zaXRpb25HZXRFbmRTdGF0ZXMoKSAtIEdldCB0aGUgbmV4dCBlbmQgc3RhdGVzLiIsCiAgICApOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgc3RhdGUgdHJhbnNpdGlvbiBhZGQsIHVwZGF0ZSBhbmQgZGVsZXRlIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCnsKCiAgICAjIGFkZCBhIHNlY29uZCBzdGFydCB0cmFuc2l0aW9uICggbXVzdCBmYWlsICkKICAgIG15ICRUcmFuc2l0aW9uSUQgPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZVRyYW5zaXRpb25BZGQoCiAgICAgICAgU3RhdGVJRCAgICAgPT4gMCwKICAgICAgICBOZXh0U3RhdGVJRCA9PiAkTmFtZTJDaGFuZ2VTdGF0ZUlEe2FwcHJvdmVkfSwKICAgICAgICBDbGFzcyAgICAgICA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICApOwogICAgJFNlbGYtPkZhbHNlKAogICAgICAgICRUcmFuc2l0aW9uSUQsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICI6IFN0YXRlVHJhbnNpdGlvbkFkZCgpIC0gQWRkIGFub3RoZXIgc3RhcnQgc3RhdGUgdHJhbnNpdGlvbi4iLAogICAgKTsKCiAgICAjIGFkZCBhIG5ldyBjaGFuZ2Ugc3RhdGUgdHJhbnNpdGlvbgogICAgJFRyYW5zaXRpb25JRCA9ICRTdGF0ZU1hY2hpbmVPYmplY3QtPlN0YXRlVHJhbnNpdGlvbkFkZCgKICAgICAgICBTdGF0ZUlEICAgICA9PiAkTmFtZTJDaGFuZ2VTdGF0ZUlEe2FwcHJvdmVkfSwKICAgICAgICBOZXh0U3RhdGVJRCA9PiAkTmFtZTJDaGFuZ2VTdGF0ZUlEe2FwcHJvdmVkfSwKICAgICAgICBDbGFzcyAgICAgICA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFRyYW5zaXRpb25JRCwKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIjogU3RhdGVUcmFuc2l0aW9uQWRkKCkgLSBBZGQgYSBuZXcgY2hhbmdlIHN0YXRlIHRyYW5zaXRpb24uIiwKICAgICk7CgogICAgIyB0cnkgdG8gc2V0IHRoZSBzdGF0ZSB0byBiZSBhbiBlbmQgc3RhdGUgKG11c3QgZmFpbCwgYmVjYXVzZSBvdGhlciBmb2xsb3dpbmcgc3RhdGVzIGV4aXN0KQogICAgJFRyYW5zaXRpb25JRCA9ICRTdGF0ZU1hY2hpbmVPYmplY3QtPlN0YXRlVHJhbnNpdGlvbkFkZCgKICAgICAgICBTdGF0ZUlEICAgICA9PiAkTmFtZTJDaGFuZ2VTdGF0ZUlEe2FwcHJvdmVkfSwKICAgICAgICBOZXh0U3RhdGVJRCA9PiAwLAogICAgICAgIENsYXNzICAgICAgID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICk7CiAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgJFRyYW5zaXRpb25JRCwKICAgICAgICAnVGVzdCAnCiAgICAgICAgICAgIC4gJFRlc3RDb3VudCsrCiAgICAgICAgICAgIC4gIjogU3RhdGVUcmFuc2l0aW9uQWRkKCkgLSBBZGQgYSBuZXcgY2hhbmdlIHN0YXRlIHRyYW5zaXRpb24gbXVzdCBmYWlsLCBiZWNhdXNlIG9mIGV4aXN0aW5nIGZvbGxvd2luZyBzdGF0ZXMuIiwKICAgICk7CgogICAgIyB1cGRhdGUgYSBzdGF0ZSB0cmFuc2l0aW9uCiAgICBteSAkU3VjY2VzcyA9ICRTdGF0ZU1hY2hpbmVPYmplY3QtPlN0YXRlVHJhbnNpdGlvblVwZGF0ZSgKICAgICAgICBTdGF0ZUlEICAgICAgICA9PiAkTmFtZTJDaGFuZ2VTdGF0ZUlEe2FwcHJvdmVkfSwKICAgICAgICBOZXh0U3RhdGVJRCAgICA9PiAkTmFtZTJDaGFuZ2VTdGF0ZUlEe2FwcHJvdmVkfSwKICAgICAgICBOZXdOZXh0U3RhdGVJRCA9PiAkTmFtZTJDaGFuZ2VTdGF0ZUlEe2ZhaWxlZH0sCiAgICAgICAgQ2xhc3MgICAgICAgICAgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiOiBTdGF0ZVRyYW5zaXRpb25VcGRhdGUoKSAtIFVwZGF0ZSBjaGFuZ2Ugc3RhdGUgdHJhbnNpdGlvbi4iLAogICAgKTsKCiAgICAjIGdldCB0aGUgdXBkYXRlZCBzdGF0ZSB0cmFuc2l0aW9uCiAgICBteSAkTmV4dFN0YXRlSURzUmVmID0gJFN0YXRlTWFjaGluZU9iamVjdC0+U3RhdGVUcmFuc2l0aW9uR2V0KAogICAgICAgIFN0YXRlSUQgPT4gJE5hbWUyQ2hhbmdlU3RhdGVJRHthcHByb3ZlZH0sCiAgICAgICAgQ2xhc3MgICA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICApOwogICAgbXkgJU5leHRTdGF0ZUxvb2t1cCA9IG1hcCB7ICRfID0+IDEgfSBAeyROZXh0U3RhdGVJRHNSZWZ9OwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJE5leHRTdGF0ZUxvb2t1cHsgJE5hbWUyQ2hhbmdlU3RhdGVJRHtmYWlsZWR9IH0sCiAgICAgICAgJ1Rlc3QgJwogICAgICAgICAgICAuICRUZXN0Q291bnQrKwogICAgICAgICAgICAuICI6IFN0YXRlVHJhbnNpdGlvbkdldCgpIC0gR2V0IHRoZSB1cGRhdGVkIGNoYW5nZSBzdGF0ZSB0cmFuc2l0aW9uLiIsCiAgICApOwoKICAgICMgdXBkYXRlIGEgc3RhdGUgdHJhbnNpdGlvbgogICAgIyAobXVzdCBmYWlsLCBiZWNhdXNlIG5ldyBuZXh0IHN0YXRlIGlzIGFuIGVuZCBzdGF0ZSBhbmQgb3RoZXIgZm9sbG93aW5nIHN0YXRlcyBhbHJlYWR5IGV4aXN0cykKICAgICRTdWNjZXNzID0gJFN0YXRlTWFjaGluZU9iamVjdC0+U3RhdGVUcmFuc2l0aW9uVXBkYXRlKAogICAgICAgIFN0YXRlSUQgICAgICAgID0+ICROYW1lMkNoYW5nZVN0YXRlSUR7cmVxdWVzdGVkfSwKICAgICAgICBOZXh0U3RhdGVJRCAgICA9PiAkTmFtZTJDaGFuZ2VTdGF0ZUlEe3JlamVjdGVkfSwKICAgICAgICBOZXdOZXh0U3RhdGVJRCA9PiAwLAogICAgICAgIENsYXNzICAgICAgICAgID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICk7CiAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgJ1Rlc3QgJwogICAgICAgICAgICAuICRUZXN0Q291bnQrKwogICAgICAgICAgICAuICI6IFN0YXRlVHJhbnNpdGlvblVwZGF0ZSgpIC0gVXBkYXRlIGNoYW5nZSBzdGF0ZSB0cmFuc2l0aW9uIChzZXQgZW5kIHN0YXRlIG11c3QgZmFpbCkuIiwKICAgICk7CgogICAgIyB1cGRhdGUgYSBzdGF0ZSB0cmFuc2l0aW9uIChtdXN0IGZhaWwsIGJlY2F1c2UgYm90aCBzdGF0ZXMgYXJlIHplcm8pCiAgICAkU3VjY2VzcyA9ICRTdGF0ZU1hY2hpbmVPYmplY3QtPlN0YXRlVHJhbnNpdGlvblVwZGF0ZSgKICAgICAgICBTdGF0ZUlEICAgICAgICA9PiAwLAogICAgICAgIE5leHRTdGF0ZUlEICAgID0+IDAsCiAgICAgICAgTmV3TmV4dFN0YXRlSUQgPT4gMCwKICAgICAgICBDbGFzcyAgICAgICAgICA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICApOwogICAgJFNlbGYtPkZhbHNlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICdUZXN0ICcKICAgICAgICAgICAgLiAkVGVzdENvdW50KysKICAgICAgICAgICAgLiAiOiBTdGF0ZVRyYW5zaXRpb25VcGRhdGUoKSAtIFVwZGF0ZSBjaGFuZ2Ugc3RhdGUgdHJhbnNpdGlvbiAoYm90aCBzdGF0ZXMgemVybyB0ZXN0KS4iLAogICAgKTsKCiAgICAjIGRlbGV0ZSB0aGUgdHJhbnNpdGlvbiB0aGF0IHdhcyBhZGRlZCBiZWZvcmUKICAgIG15ICREZWxldGVTdWNjZXNzID0gJFN0YXRlTWFjaGluZU9iamVjdC0+U3RhdGVUcmFuc2l0aW9uRGVsZXRlKAogICAgICAgIFN0YXRlSUQgICAgID0+ICROYW1lMkNoYW5nZVN0YXRlSUR7YXBwcm92ZWR9LAogICAgICAgIE5leHRTdGF0ZUlEID0+ICROYW1lMkNoYW5nZVN0YXRlSUR7ZmFpbGVkfSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkRGVsZXRlU3VjY2VzcywKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIjogU3RhdGVUcmFuc2l0aW9uRGVsZXRlKCkgLSBEZWxldGUgYSBjaGFuZ2Ugc3RhdGUgdHJhbnNpdGlvbi4iLAogICAgKTsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGNoZWNrIHRoZSBkZWZhdWx0IFN0YXRlTWFjaGluZSB0cmFuc2l0aW9ucyBmb3IgY2hhbmdlIHN0YXRlcwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGdldCBkZWZhdWx0IGNoYW5nZSBzdGF0ZSB0cmFuc2l0aW9ucyBmcm9tIGRhdGFiYXNlCm15ICRDaGFuZ2VTdGF0ZVRyYW5zaXRpb25zID0gJFN0YXRlTWFjaGluZU9iamVjdC0+U3RhdGVUcmFuc2l0aW9uTGlzdCgKICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKKTsKCiMgY2hlY2sgU3RhdGVUcmFuc2l0aW9uTGlzdCBmb3IgY2hhbmdlIHN0YXRlcwokU2VsZi0+SXMoCiAgICBzY2FsYXIga2V5cyAleyRDaGFuZ2VTdGF0ZVRyYW5zaXRpb25zfSB8fCAwLAogICAgc2NhbGFyIGtleXMgJURlZmF1bHRDaGFuZ2VTdGF0ZVRyYW5zaXRpb25zLAogICAgJ1Rlc3QgJwogICAgICAgIC4gJFRlc3RDb3VudCsrCiAgICAgICAgLiAiOiBTdGF0ZVRyYW5zaXRpb25MaXN0KCkgLSBudW1iZXIgb2YgZGVmYXVsdCBzdGFydCBzdGF0ZXMgZm9yIGNoYW5nZSBzdGF0ZXMuIiwKKTsKCmZvciBteSAkRGVmYXVsdFN0YXRlICggc29ydCBrZXlzICVEZWZhdWx0Q2hhbmdlU3RhdGVUcmFuc2l0aW9ucyApIHsKCiAgICAjIGNvbnZlcnQgdGhlIGRlZmF1bHQgc3RhdGUgdG8gYSBzdGF0ZUlECiAgICBteSAkRGVmYXVsdFN0YXRlSUQgPSAkTmFtZTJDaGFuZ2VTdGF0ZUlEeyREZWZhdWx0U3RhdGV9OwoKICAgICMgY2hlY2sgaWYgYWxsIHN0YXJ0IHN0YXRlcyBhcmUgdGhlIHNhbWUgYXMgdGhlIGRlZmF1bHQKICAgICMgYW5kIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIG5leHQgc3RhdGVzCiAgICAkU2VsZi0+SXMoCiAgICAgICAgc2NhbGFyIEB7ICRDaGFuZ2VTdGF0ZVRyYW5zaXRpb25zLT57ICROYW1lMkNoYW5nZVN0YXRlSUR7JERlZmF1bHRTdGF0ZX0gfSB9LAogICAgICAgIHNjYWxhciBAeyAkRGVmYXVsdENoYW5nZVN0YXRlVHJhbnNpdGlvbnN7JERlZmF1bHRTdGF0ZX0gfSwKICAgICAgICAnVGVzdCAnCiAgICAgICAgICAgIC4gJFRlc3RDb3VudCsrCiAgICAgICAgICAgIC4gIjogU3RhdGVUcmFuc2l0aW9uTGlzdCgpIC0gbnVtYmVyIG9mIGRlZmF1bHQgbmV4dCBzdGF0ZXMgZm9yIGNoYW5nZSBzdGF0ZSAnJERlZmF1bHRTdGF0ZScuIiwKICAgICk7CgogICAgIyBnZXQgbG9va3VwIGhhc2ggb2YgYWN0dWFsIG5leHQgc3RhdGVzCiAgICBteSBATmV4dFN0YXRlcyA9IHNvcnQgbWFwIHsgJENoYW5nZVN0YXRlSUQyTmFtZXskX30gfSBAeyAkQ2hhbmdlU3RhdGVUcmFuc2l0aW9ucy0+eyREZWZhdWx0U3RhdGVJRH0gfTsKCiAgICBteSAkSW5kZXggPSAwOwogICAgZm9yIG15ICREZWZhdWx0TmV4dFN0YXRlICggc29ydCBAeyAkRGVmYXVsdENoYW5nZVN0YXRlVHJhbnNpdGlvbnN7JERlZmF1bHRTdGF0ZX0gfSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBuZXh0IHN0YXRlIGlzIHRoZSB0aGUgc2FtZSBhcyB0aGUgZGVmYXVsdAogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJE5leHRTdGF0ZXNbICRJbmRleCsrIF0sCiAgICAgICAgICAgICREZWZhdWx0TmV4dFN0YXRlLAogICAgICAgICAgICAnVGVzdCAnCiAgICAgICAgICAgICAgICAuICRUZXN0Q291bnQKICAgICAgICAgICAgICAgIC4gIjogU3RhdGVUcmFuc2l0aW9uTGlzdCgpIC0gZGVmYXVsdCBuZXh0IHN0YXRlIGZvciBjaGFuZ2Ugc3RhdGUgJyREZWZhdWx0U3RhdGUnLiIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRlc3QgdGhlIHN0YXRlIGxvb2t1cCBmdW5jdGlvbiBmb3IgdGhlIHN0YXRlCiAgICBteSAkTG9va2VkVXBTdGF0ZUlEID0gJFN0YXRlTWFjaGluZU9iamVjdC0+U3RhdGVMb29rdXAoCiAgICAgICAgU3RhdGUgPT4gJERlZmF1bHRTdGF0ZSwKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRMb29rZWRVcFN0YXRlSUQsCiAgICAgICAgJERlZmF1bHRTdGF0ZUlELAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFN0YXRlTG9va3VwKCkgZm9yIGNoYW5nZSBzdGF0ZSAnJERlZmF1bHRTdGF0ZScuIiwKICAgICk7CgogICAgIyB0ZXN0IHRoZSBzdGF0ZSBsb29rdXAgZnVuY3Rpb24gZm9yIHRoZSBzdGF0ZSBpZAogICAgbXkgJExvb2tlZFVwU3RhdGUgPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZUxvb2t1cCgKICAgICAgICBTdGF0ZUlEID0+ICREZWZhdWx0U3RhdGVJRCwKICAgICAgICBDbGFzcyAgID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJExvb2tlZFVwU3RhdGUsCiAgICAgICAgJERlZmF1bHRTdGF0ZSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTdGF0ZUxvb2t1cCgpIGZvciBjaGFuZ2Ugc3RhdGUgaWQgJyREZWZhdWx0U3RhdGVJRCcuIiwKICAgICk7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBjaGVjayB0aGUgZGVmYXVsdCBTdGF0ZU1hY2hpbmUgdHJhbnNpdGlvbnMgZm9yIHdvcmtvcmRlciBzdGF0ZXMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgZGVmYXVsdCB3b3Jrb3JkZXIgc3RhdGUgdHJhbnNpdGlvbnMgZnJvbSBkYXRhYmFzZQpteSAkV29ya09yZGVyU3RhdGVUcmFuc2l0aW9ucyA9ICRTdGF0ZU1hY2hpbmVPYmplY3QtPlN0YXRlVHJhbnNpdGlvbkxpc3QoCiAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpTdGF0ZScsCik7CgojIGNoZWNrIFN0YXRlVHJhbnNpdGlvbkxpc3QgZm9yIHdvcmtvcmRlciBzdGF0ZXMKJFNlbGYtPklzKAogICAgc2NhbGFyIGtleXMgJXskV29ya09yZGVyU3RhdGVUcmFuc2l0aW9uc30gfHwgMCwKICAgIHNjYWxhciBrZXlzICVEZWZhdWx0V29ya09yZGVyU3RhdGVUcmFuc2l0aW9ucywKICAgICdUZXN0ICcKICAgICAgICAuICRUZXN0Q291bnQrKwogICAgICAgIC4gIjogU3RhdGVUcmFuc2l0aW9uTGlzdCgpIC0gTnVtYmVyIG9mIGRlZmF1bHQgc3RhcnQgc3RhdGVzIGZvciB3b3Jrb3JkZXIgc3RhdGVzLiIsCik7Cgpmb3IgbXkgJERlZmF1bHRTdGF0ZSAoIHNvcnQga2V5cyAlRGVmYXVsdFdvcmtPcmRlclN0YXRlVHJhbnNpdGlvbnMgKSB7CgogICAgIyBjb252ZXJ0IHRoZSBkZWZhdWx0IHN0YXRlIHRvIGEgc3RhdGVJRAogICAgbXkgJERlZmF1bHRTdGF0ZUlEID0gJE5hbWUyV29ya09yZGVyU3RhdGVJRHskRGVmYXVsdFN0YXRlfTsKCiAgICAjIGNoZWNrIGlmIGFsbCBzdGFydCBzdGF0ZXMgYXJlIHRoZSBzYW1lIGFzIHRoZSBkZWZhdWx0CiAgICAjIGFuZCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBuZXh0IHN0YXRlcwogICAgJFNlbGYtPklzKAogICAgICAgIHNjYWxhciBAeyAkV29ya09yZGVyU3RhdGVUcmFuc2l0aW9ucy0+eyAkTmFtZTJXb3JrT3JkZXJTdGF0ZUlEeyREZWZhdWx0U3RhdGV9IH0gfSwKICAgICAgICBzY2FsYXIgQHsgJERlZmF1bHRXb3JrT3JkZXJTdGF0ZVRyYW5zaXRpb25zeyREZWZhdWx0U3RhdGV9IH0sCiAgICAgICAgJ1Rlc3QgJwogICAgICAgICAgICAuICRUZXN0Q291bnQrKwogICAgICAgICAgICAuICI6IFN0YXRlVHJhbnNpdGlvbkxpc3QoKSAtIE51bWJlciBvZiBkZWZhdWx0IG5leHQgc3RhdGVzIGZvciB3b3Jrb3JkZXIgc3RhdGUgJyREZWZhdWx0U3RhdGUnLiIsCiAgICApOwoKICAgICMgZ2V0IGxvb2t1cCBoYXNoIG9mIGFjdHVhbCBuZXh0IHN0YXRlcwogICAgbXkgQE5leHRTdGF0ZXMgPSBzb3J0IG1hcCB7ICRXb3JrT3JkZXJTdGF0ZUlEMk5hbWV7JF99IH0KICAgICAgICBAeyAkV29ya09yZGVyU3RhdGVUcmFuc2l0aW9ucy0+eyREZWZhdWx0U3RhdGVJRH0gfTsKCiAgICBteSAkSW5kZXggPSAwOwogICAgZm9yIG15ICREZWZhdWx0TmV4dFN0YXRlICggc29ydCBAeyAkRGVmYXVsdFdvcmtPcmRlclN0YXRlVHJhbnNpdGlvbnN7JERlZmF1bHRTdGF0ZX0gfSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBuZXh0IHN0YXRlIGlzIHRoZSB0aGUgc2FtZSBhcyB0aGUgZGVmYXVsdAogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJE5leHRTdGF0ZXNbICRJbmRleCsrIF0sCiAgICAgICAgICAgICREZWZhdWx0TmV4dFN0YXRlLAogICAgICAgICAgICAnVGVzdCAnCiAgICAgICAgICAgICAgICAuICRUZXN0Q291bnQKICAgICAgICAgICAgICAgIC4gIjogU3RhdGVUcmFuc2l0aW9uTGlzdCgpIC0gRGVmYXVsdCBuZXh0IHN0YXRlIGZvciB3b3Jrb3JkZXIgc3RhdGUgJyREZWZhdWx0U3RhdGUnLiIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRlc3QgdGhlIHN0YXRlIGxvb2t1cCBmdW5jdGlvbiBmb3IgdGhlIHN0YXRlCiAgICBteSAkTG9va2VkVXBTdGF0ZUlEID0gJFN0YXRlTWFjaGluZU9iamVjdC0+U3RhdGVMb29rdXAoCiAgICAgICAgU3RhdGUgPT4gJERlZmF1bHRTdGF0ZSwKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpTdGF0ZScsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRMb29rZWRVcFN0YXRlSUQsCiAgICAgICAgJERlZmF1bHRTdGF0ZUlELAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFN0YXRlTG9va3VwKCkgZm9yIHdvcmtvcmRlciBzdGF0ZSAnJERlZmF1bHRTdGF0ZScuIiwKICAgICk7CgogICAgIyB0ZXN0IHRoZSBzdGF0ZSBsb29rdXAgZnVuY3Rpb24gZm9yIHRoZSBzdGF0ZSBpZAogICAgbXkgJExvb2tlZFVwU3RhdGUgPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZUxvb2t1cCgKICAgICAgICBTdGF0ZUlEID0+ICREZWZhdWx0U3RhdGVJRCwKICAgICAgICBDbGFzcyAgID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpXb3JrT3JkZXI6OlN0YXRlJywKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJExvb2tlZFVwU3RhdGUsCiAgICAgICAgJERlZmF1bHRTdGF0ZSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTdGF0ZUxvb2t1cCgpIGZvciB3b3Jrb3JkZXIgc3RhdGUgaWQgJyREZWZhdWx0U3RhdGVJRCcuIiwKICAgICk7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBzdGF0ZSB0cmFuc2l0aW9uIGdldCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGNvbXBhcmUgdGhlIHJlc3VsdHMgZnJvbSBTdGF0ZVRyYW5zaXRpb25MaXN0KCkgYW5kIFN0YXRlVHJhbnNpdGlvbkdldCgpCmZvciBteSAkU3RhdGVJRCAoIHNvcnQga2V5cyAleyRDaGFuZ2VTdGF0ZVRyYW5zaXRpb25zfSApIHsKCiAgICAjIGdldCB0aGUgbmV4dCBzdGF0ZSBpZHMgZnJvbSBTdGF0ZVRyYW5zaXRpb25MaXN0KCkKICAgIG15IEBOZXh0U3RhdGVJRHNGcm9tTGlzdCA9IHNvcnQgQHsgJENoYW5nZVN0YXRlVHJhbnNpdGlvbnMtPnskU3RhdGVJRH0gfTsKCiAgICAjIGdldCB0aGUgbmV4dCBzdGF0ZSBpZHMgZnJvbSBTdGF0ZVRyYW5zaXRpb25HZXQoKQogICAgbXkgJE5leHRTdGF0ZUlEc1JlZiA9ICRTdGF0ZU1hY2hpbmVPYmplY3QtPlN0YXRlVHJhbnNpdGlvbkdldCgKICAgICAgICBTdGF0ZUlEID0+ICRTdGF0ZUlELAogICAgICAgIENsYXNzICAgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgKTsKICAgIG15IEBOZXh0U3RhdGVJRHNGcm9tR2V0ID0gc29ydCBAeyROZXh0U3RhdGVJRHNSZWZ9OwoKICAgICMgY2hlY2sgaWYgdGhlIG51bWJlciBvZiBuZXh0IHN0YXRlcyBpcyB0aGUgc2FtZQogICAgJFNlbGYtPklzKAogICAgICAgIHNjYWxhciBATmV4dFN0YXRlSURzRnJvbUdldCwKICAgICAgICBzY2FsYXIgQE5leHRTdGF0ZUlEc0Zyb21MaXN0LAogICAgICAgICdUZXN0ICcKICAgICAgICAgICAgLiAkVGVzdENvdW50KysKICAgICAgICAgICAgLiAiOiBTdGF0ZVRyYW5zaXRpb25HZXQoKSAtIE51bWJlciBvZiBuZXh0IHN0YXRlcyBmb3IgY2hhbmdlIHN0YXRlICckQ2hhbmdlU3RhdGVJRDJOYW1leyRTdGF0ZUlEfScuIiwKICAgICk7CgogICAgbXkgJEluZGV4ID0gMDsKICAgIGZvciBteSAkTmV4dFN0YXRlIChATmV4dFN0YXRlSURzRnJvbUdldCkgewoKICAgICAgICAjIGNoZWNrIGlmIHRoZSBuZXh0IHN0YXRlcyBhcmUgYWxsIHRoZSBzYW1lCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkQ2hhbmdlU3RhdGVJRDJOYW1leyROZXh0U3RhdGV9LAogICAgICAgICAgICAkQ2hhbmdlU3RhdGVJRDJOYW1leyAkTmV4dFN0YXRlSURzRnJvbUxpc3RbICRJbmRleCsrIF0gfSwKICAgICAgICAgICAgJ1Rlc3QgJwogICAgICAgICAgICAgICAgLiAkVGVzdENvdW50KysKICAgICAgICAgICAgICAgIC4gIjogU3RhdGVUcmFuc2l0aW9uR2V0KCkgLSBOZXh0IHN0YXRlIGZvciBjaGFuZ2Ugc3RhdGUgJyRDaGFuZ2VTdGF0ZUlEMk5hbWV7JFN0YXRlSUR9Jy4iLAogICAgICAgICk7CiAgICB9Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBjaGVjayBTdGF0ZUxpc3QoKSBmb3IgY2hhbmdlIHN0YXRlcwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgp7CiAgICBteSAkU3RhdGVMaXN0ID0gJFN0YXRlTWFjaGluZU9iamVjdC0+U3RhdGVMaXN0KAogICAgICAgIENsYXNzICA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApIHx8IFtdOwoKICAgICMgQ2hlY2sgdGhlIG51bWJlciBvZiBjaGFuZ2Ugc3RhdGVzLiBUaGUgc3RhcnQgc3RhdGUgaXMgbm90IHJldHVybmVkIGJ5IFN0YXRlTGlzdCgpLgogICAgJFNlbGYtPklzKAogICAgICAgIHNjYWxhciggQHskU3RhdGVMaXN0fSApLAogICAgICAgIHNjYWxhcigga2V5cyAlRGVmYXVsdENoYW5nZVN0YXRlVHJhbnNpdGlvbnMgKSAtIDEsCiAgICAgICAgJ1N0YXRlTGlzdCgpIC0gQ2hhbmdlIC0gbnVtYmVyIG9mIHN0YXRlcycsCiAgICApOwoKICAgICMgY2hlY2sgd2hldGhlciB0aGUgZGVmYXVsdCBzdGF0ZXMgYXJlIGluIHRoZSBTdGF0ZUxpc3QKICAgIERFRkFVTFRfU1RBVEU6CiAgICBmb3IgbXkgJERlZmF1bHRTdGF0ZSAoIHNvcnQga2V5cyAlRGVmYXVsdENoYW5nZVN0YXRlVHJhbnNpdGlvbnMgKSB7CgogICAgICAgICMgc2tpcCB0aGUgZGVmYXVsdCBzdGF0ZSAnMCcKICAgICAgICBuZXh0IERFRkFVTFRfU1RBVEUgaWYgISREZWZhdWx0U3RhdGU7CgogICAgICAgIG15IEBNYXRjaGVzID0gZ3JlcCB7ICRfLT57VmFsdWV9IGVxICREZWZhdWx0U3RhdGUgfSBAeyRTdGF0ZUxpc3R9OwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgc2NhbGFyKEBNYXRjaGVzKSwKICAgICAgICAgICAgMSwKICAgICAgICAgICAgIlN0YXRlTGlzdCgpIC0gQ2hhbmdlIC0gZm91bmQgJERlZmF1bHRTdGF0ZSIsCiAgICAgICAgKTsKICAgIH0KfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGNoZWNrIFN0YXRlTGlzdCgpIGZvciB3b3Jrb3JkZXIgc3RhdGVzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCnsKICAgIG15ICRTdGF0ZUxpc3QgPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZUxpc3QoCiAgICAgICAgQ2xhc3MgID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpXb3JrT3JkZXI6OlN0YXRlJywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICkgfHwgW107CgogICAgIyBDaGVjayB0aGUgbnVtYmVyIG9mIHN0YXRlcy4gVGhlIHN0YXJ0IHN0YXRlIGlzIG5vdCByZXR1cm5lZCBieSBTdGF0ZUxpc3QoKS4KICAgICRTZWxmLT5JcygKICAgICAgICBzY2FsYXIoIEB7JFN0YXRlTGlzdH0gKSwKICAgICAgICBzY2FsYXIoIGtleXMgJURlZmF1bHRXb3JrT3JkZXJTdGF0ZVRyYW5zaXRpb25zICkgLSAxLAogICAgICAgICdTdGF0ZUxpc3QoKSAtIFdvcmtPcmRlciAtIG51bWJlciBvZiBzdGF0ZXMnLAogICAgKTsKCiAgICAjIGNoZWNrIHdoZXRoZXIgdGhlIGRlZmF1bHQgc3RhdGVzIGFyZSBpbiB0aGUgU3RhdGVMaXN0CiAgICBERUZBVUxUX1NUQVRFOgogICAgZm9yIG15ICREZWZhdWx0U3RhdGUgKCBzb3J0IGtleXMgJURlZmF1bHRXb3JrT3JkZXJTdGF0ZVRyYW5zaXRpb25zICkgewoKICAgICAgICAjIHNraXAgdGhlIGRlZmF1bHQgc3RhdGUgJzAnCiAgICAgICAgbmV4dCBERUZBVUxUX1NUQVRFIGlmICEkRGVmYXVsdFN0YXRlOwoKICAgICAgICBteSBATWF0Y2hlcyA9IGdyZXAgeyAkXy0+e1ZhbHVlfSBlcSAkRGVmYXVsdFN0YXRlIH0gQHskU3RhdGVMaXN0fTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIHNjYWxhcihATWF0Y2hlcyksCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICJTdGF0ZUxpc3QoKSAtIFdvcmtPcmRlciAtIGZvdW5kICREZWZhdWx0U3RhdGUiLAogICAgICAgICk7CiAgICB9Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyBxdygkU2VsZik7Cgp1c2UgRGF0YTo6RHVtcGVyOwp1c2UgTGlzdDo6VXRpbCBxdyhtYXgpOwoKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpQZXJsOjpUZXN0U3VicykKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgTm90ZSBmb3IgZGV2ZWxvcGVyczoKIyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBrZXlzIGluICVDaGFuZ2VEZWZpbml0aW9ucyAocmVzcC4gV29ya09yZGVyRGVmaW5pdGlvbnMgKQojIGhhdmUgdG8gYmUgaWRlbnRpY2FsIHdpdGggdGhlIGtleSBuYW1lcyBpbiAlVGVtcGxhdGVEZWZpbml0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKbXkgJFRlc3RDb3VudCA9IDE7CgojIGNyZWF0ZSBjb21tb24gb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKbXkgJEN1c3RvbWVyVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKTsKbXkgJFZhbGlkT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpOwpteSAkQ2hhbmdlT2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKbXkgJENvbmRpdGlvbk9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJyk7Cm15ICRXb3JrT3JkZXJPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpOwpteSAkVGVtcGxhdGVPYmplY3QgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlJyk7Cm15ICRIVE1MVXRpbHNPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzJyk7CgojIGdldCBoZWxwZXIgb2JqZWN0CiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgojIHRlc3QgaWYgY2hhbmdlIG9iamVjdCB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkKJFNlbGYtPlRydWUoCiAgICAkVGVtcGxhdGVPYmplY3QsCiAgICAiVGVzdCAiIC4gJFRlc3RDb3VudCsrIC4gJyAtIGNvbnN0cnVjdGlvbiBvZiB0ZW1wbGF0ZSBvYmplY3QnLAopOwokU2VsZi0+SXMoCiAgICByZWYgJFRlbXBsYXRlT2JqZWN0LAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpUZW1wbGF0ZScsCiAgICAiVGVzdCAiIC4gJFRlc3RDb3VudCsrIC4gJyAtIGNsYXNzIG9mIHRlbXBsYXRlIG9iamVjdCcsCik7CgojIGRlZmluZSBuZWVkZWQgdmFyaWFibGUKbXkgJFJhbmRvbUlEICAgICA9ICRIZWxwZXItPkdldFJhbmRvbUlEKCk7Cm15ICRSYW5kb21OdW1iZXIgPSAkSGVscGVyLT5HZXRSYW5kb21OdW1iZXIoKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBjcmVhdGUgbmVlZGVkIHVzZXJzIGFuZCBjdXN0b21lciB1c2VycwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCm15IEBDdXN0b21lclVzZXJJRHM7ICAgICMgYSBsaXN0IG9mIGV4aXN0aW5nIGFuZCB2YWxpZCBjdXN0b21lciB1c2VyIGlkcywgYSBsaXN0IG9mIHN0cmluZ3MKCiMgZGlzYWJsZSBlbWFpbCBjaGVja3MgdG8gY3JlYXRlIG5ldyB1c2VyCm15ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnID0gJENvbmZpZ09iamVjdC0+R2V0KCdDaGVja0VtYWlsQWRkcmVzc2VzJyk7CmlmICggIWRlZmluZWQgJENoZWNrRW1haWxBZGRyZXNzZXNPcmcgKSB7CiAgICAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZyA9IDE7Cn0KJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgVmFsdWUgPT4gMCwKKTsKCmZvciBteSAkQ291bnRlciAoIDEgLi4gMyApIHsKCiAgICAjIGNyZWF0ZSBuZXcgY3VzdG9tZXJzIGZvciB0aGUgdGVzdHMKICAgIG15ICRDdXN0b21lclVzZXJJRCA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckFkZCgKICAgICAgICBTb3VyY2UgICAgICAgICA9PiAnQ3VzdG9tZXJVc2VyJywKICAgICAgICBVc2VyRmlyc3RuYW1lICA9PiAnSVRTTUNoYW5nZUN1c3RvbWVyJyAuICRDb3VudGVyLAogICAgICAgIFVzZXJMYXN0bmFtZSAgID0+ICdVbml0VGVzdEN1c3RvbWVyJywKICAgICAgICBVc2VyQ3VzdG9tZXJJRCA9PiAnVUNUJyAuICRDb3VudGVyIC4gJFJhbmRvbUlELAogICAgICAgIFVzZXJMb2dpbiAgICAgID0+ICdVbml0VGVzdC1JVFNNVGVtcGxhdGUtQ3VzdG9tZXItJyAuICRDb3VudGVyIC4gJFJhbmRvbUlELAogICAgICAgIFVzZXJFbWFpbCAgICAgID0+ICdVbml0VGVzdC1JVFNNVGVtcGxhdGUtQ3VzdG9tZXItJwogICAgICAgICAgICAuICRDb3VudGVyCiAgICAgICAgICAgIC4gJFJhbmRvbUlECiAgICAgICAgICAgIC4gJ0Bsb2NhbGhvc3QnLAogICAgICAgIFZhbGlkSUQgPT4gJFZhbGlkT2JqZWN0LT5WYWxpZExvb2t1cCggVmFsaWQgPT4gJ3ZhbGlkJyApLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CiAgICBwdXNoIEBDdXN0b21lclVzZXJJRHMsICRDdXN0b21lclVzZXJJRDsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHRlc3QgVGVtcGxhdGUgQVBJCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZGVmaW5lIHB1YmxpYyBpbnRlcmZhY2UgKGluIGFscGhhYmV0aWNhbCBvcmRlcikKbXkgQE9iamVjdE1ldGhvZHMgPSBxdygKICAgIFRlbXBsYXRlQWRkCiAgICBUZW1wbGF0ZURlbGV0ZQogICAgVGVtcGxhdGVVcGRhdGUKICAgIFRlbXBsYXRlU2VhcmNoCiAgICBUZW1wbGF0ZVNlcmlhbGl6ZQogICAgVGVtcGxhdGVEZVNlcmlhbGl6ZQogICAgVGVtcGxhdGVUeXBlTG9va3VwCiAgICBUZW1wbGF0ZUxpc3QKICAgIFRlbXBsYXRlR2V0Cik7CgojIGNoZWNrIGlmIHN1YnMgYXJlIGF2YWlsYWJsZQpmb3IgbXkgJE9iamVjdE1ldGhvZCAoQE9iamVjdE1ldGhvZHMpIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRUZW1wbGF0ZU9iamVjdC0+Y2FuKCRPYmplY3RNZXRob2QpLAogICAgICAgICJUZXN0ICIgLiAkVGVzdENvdW50KysgLiAiIC0gY2hlY2sgJ2NhbiAkT2JqZWN0TWV0aG9kJyIsCiAgICApOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgc2VhcmNoIGZvciBkZWZhdWx0IFRlbXBsYXRlIHR5cGVzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgZGVmaW5lIGRlZmF1bHQgVGVtcGxhdGUgdHlwZXMKbXkgQERlZmF1bHRUeXBlcyA9IHF3KAogICAgSVRTTUNoYW5nZQogICAgSVRTTVdvcmtPcmRlcgogICAgSVRTTUNvbmRpdGlvbgogICAgQ0FCCik7CgojIGludmVzdGlnYXRlIHRoZSBkZWZhdWx0IHR5cGVzCmZvciBteSAkVHlwZSAoQERlZmF1bHRUeXBlcykgewoKICAgICMgbG9vayB1cCB0aGUgc3RhdGUgbmFtZQogICAgbXkgJExvb2tlZFVwVHlwZUlEID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZVR5cGVMb29rdXAoCiAgICAgICAgVGVtcGxhdGVUeXBlID0+ICRUeXBlLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkTG9va2VkVXBUeXBlSUQsCiAgICAgICAgIkxvb2sgdXAgdHlwZSAnJFR5cGUnIiwKICAgICk7CgogICAgIyBkbyB0aGUgcmV2ZXJzZSBsb29rdXAKICAgIG15ICRMb29rZWRVcFR5cGUgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlVHlwZUxvb2t1cCgKICAgICAgICBUZW1wbGF0ZVR5cGVJRCA9PiAkTG9va2VkVXBUeXBlSUQsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkTG9va2VkVXBUeXBlLAogICAgICAgICRUeXBlLAogICAgICAgICJMb29rIHVwIHR5cGUgaWQgJyRMb29rZWRVcFR5cGVJRCciLAogICAgKTsKfQoKIyBub3cgc29tZSBwYXJhbSBjaGVja3MgZm9yIENoYW5nZVN0YXRlTG9va3VwCm15ICRMb29rdXBPayA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVUeXBlTG9va3VwKCk7CgokU2VsZi0+RmFsc2UoCiAgICAkTG9va3VwT2ssCiAgICAnTm8gcGFyYW1zIHBhc3NlZCB0byBUZW1wbGF0ZVR5cGVMb29rdXAoKScsCik7CgokTG9va3VwT2sgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlVHlwZUxvb2t1cCgKICAgIFRlbXBsYXRlVHlwZSAgID0+ICdhcHByb3ZlZCcsCiAgICBUZW1wbGF0ZVR5cGVJRCA9PiAyLAopOwoKJFNlbGYtPkZhbHNlKAogICAgJExvb2t1cE9rLAogICAgJ0V4Y2x1c2l2ZSBwYXJhbXMgcGFzc2VkIHRvIFRlbXBsYXRlVHlwZUxvb2t1cCgpJywKKTsKCiRMb29rdXBPayA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVUeXBlTG9va3VwKAogICAgVGVtcGxhdGVUeXBlcyA9PiAnSVRTTUFueXRoaW5nJywKKTsKCiRTZWxmLT5GYWxzZSgKICAgICRMb29rdXBPaywKICAgICJJbmNvcnJlY3QgcGFyYW0gJ1RlbXBsYXRlVHlwZXMnIHBhc3NlZCB0byBUZW1wbGF0ZVR5cGVMb29rdXAoKSIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZ2VuZXJhbCB0ZW1wbGF0ZSB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIHN0b3JlIGN1cnJlbnQgVGVzdENvdW50IGZvciBiZXR0ZXIgdGVzdCBjYXNlIHJlY29nbml0aW9uCm15ICRUZXN0Q291bnRNaXNjID0gJFRlc3RDb3VudDsKCiMgQW4gdW5pcXVlIGlkZW50aWZpZXIsIHNvIHRoYXQgZGF0YSBmcm9tIGRpZmZlcmVudCB0ZXN0IHJ1bnMKIyB3b24ndCBiZSBtaXhlZCB1cC4gVGhlIHN0cmluZyBpcyBmb3JtYXRlZCB0byBhIGNvbnN0YW50IGxlbmd0aCwKIyBhcyB0aGUgY29udmVyc2lvbiB0byBwbGFpbiB0ZXh0IHdpdGggVG9Bc2NpaSgpIGRlcGVuZHMgb24gdGhlIHN0cmluZyBsZW5ndGguCm15ICRVbmlxdWVTaWduYXR1cmUgPSBzcHJpbnRmICdVbml0VGVzdC1JVFNNVGVtcGxhdGUtJTA2ZF8lMDEwZCcsCiAgICAkUmFuZG9tTnVtYmVyLAogICAgdGltZSgpOwoKbXkgJUNoYW5nZURlZmluaXRpb25zID0gKAogICAgQmFzZUNoYW5nZSA9PiB7CiAgICAgICAgQ2hhbmdlVGl0bGUgICAgID0+ICdBU0NJSSBDaGFuZ2UgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIERlc2NyaXB0aW9uICAgICA9PiAnQVNDSUkgQ2hhbmdlIC0gRGVzY3JpcHRpb24gLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICBKdXN0aWZpY2F0aW9uICAgPT4gJ0FTQ0lJIENoYW5nZSAtIEp1c3RpZmljYXRpb24gLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICBDaGFuZ2VNYW5hZ2VySUQgPT4gMSwKICAgICAgICBDaGFuZ2VCdWlsZGVySUQgPT4gMSwKICAgICAgICBDQUJBZ2VudHMgICAgICAgPT4gWwogICAgICAgICAgICAxLAogICAgICAgIF0sCiAgICAgICAgQ0FCQ3VzdG9tZXJzID0+IFsKICAgICAgICAgICAgQEN1c3RvbWVyVXNlcklEcywKICAgICAgICBdLAogICAgfSwKICAgIFVuaWNvZGVDaGFuZ2UgPT4gewogICAgICAgIENoYW5nZVRpdGxlICAgPT4gIlVuaWNvZGUgQ2hhbmdlIC0gVGl0bGUgw6TDtsO8IC0gJFVuaXF1ZVNpZ25hdHVyZSIsCiAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnVW5pY29kZSBDaGFuZ2UgLSBEZXNjcmlwdGlvbiAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIEp1c3RpZmljYXRpb24gPT4gIlVuaWNvZGUgQ2hhbmdlIC0gSnVzdGlmaWNhdGlvbiAiCiAgICAgICAgICAgIC4gIlx4ezE2N31ceHtiNn1ceHsyMGFjfVxAXHh7MTQyfVx4ezE0Mn1ceHsxMzh9alx4e2YwfVx4e2I1fVx4e2FifVx4e2RmfVx4e2JifSAiCiAgICAgICAgICAgIC4gIi0gJFVuaXF1ZVNpZ25hdHVyZSIsCiAgICAgICAgQ2hhbmdlTWFuYWdlcklEID0+IDEsCiAgICAgICAgQ2hhbmdlQnVpbGRlcklEID0+IDEsCiAgICAgICAgQ0FCQWdlbnRzICAgICAgID0+IFsKICAgICAgICAgICAgMSwKICAgICAgICBdLAogICAgfSwKICAgIEVudGl0eUNoYW5nZSA9PiB7CiAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ0VudGl0eSBDaGFuZ2UgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICdFbnRpdHkgQ2hhbmdlIC0gRGVzY3JpcHRpb24gLSByZWdpc3RlcmVkOiImcmVnOyIgLSBub24tYmxvY2tpbmctc3BhY2U6IiZuYnNwOyIgLSAnCiAgICAgICAgICAgIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICBKdXN0aWZpY2F0aW9uID0+CiAgICAgICAgICAgICdFbnRpdHkgQ2hhbmdlIC0gSnVzdGlmaWNhdGlvbiAtIHJlZ2lzdGVyZWQ6IiZyZWc7IiAtIG5vbi1ibG9ja2luZy1zcGFjZToiJm5ic3A7IiAtICcKICAgICAgICAgICAgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIENoYW5nZU1hbmFnZXJJRCA9PiAxLAogICAgICAgIENoYW5nZUJ1aWxkZXJJRCA9PiAxLAogICAgICAgIENBQkFnZW50cyAgICAgICA9PiBbCiAgICAgICAgICAgIDEsCiAgICAgICAgXSwKICAgICAgICBDQUJDdXN0b21lcnMgPT4gWwogICAgICAgICAgICBAQ3VzdG9tZXJVc2VySURzLAogICAgICAgIF0sCiAgICB9LAogICAgQ29udGFpbmVyQ2hhbmdlID0+IHsKICAgICAgICBDaGFuZ2VUaXRsZSAgICAgPT4gJ0NvbnRhaW5lciBDaGFuZ2UgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIERlc2NyaXB0aW9uICAgICA9PiAnQ29udGFpbmVyIENoYW5nZSAtIERlc2NyaXB0aW9uIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgSnVzdGlmaWNhdGlvbiAgID0+ICdDb250YWluZXIgQ2hhbmdlIC0gSnVzdGlmaWNhdGlvbiAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIENoYW5nZU1hbmFnZXJJRCA9PiAxLAogICAgICAgIENoYW5nZUJ1aWxkZXJJRCA9PiAxLAogICAgICAgIENBQkFnZW50cyAgICAgICA9PiBbCiAgICAgICAgICAgIDEsCiAgICAgICAgXSwKICAgIH0sCiAgICBUYXJnZXRDaGFuZ2UgPT4gewogICAgICAgIENoYW5nZVRpdGxlICAgICA9PiAnVGFyZ2V0IENoYW5nZSAtIFRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgRGVzY3JpcHRpb24gICAgID0+ICdUYXJnZXQgQ2hhbmdlIC0gRGVzY3JpcHRpb24gLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICBKdXN0aWZpY2F0aW9uICAgPT4gJ1RhcmdldCBDaGFuZ2UgLSBKdXN0aWZpY2F0aW9uIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgQ2hhbmdlTWFuYWdlcklEID0+IDEsCiAgICAgICAgQ2hhbmdlQnVpbGRlcklEID0+IDEsCiAgICAgICAgQ0FCQWdlbnRzICAgICAgID0+IFsKICAgICAgICAgICAgMSwKICAgICAgICBdLAogICAgfSwKKTsKCiMgY3JlYXRlIGNoYW5nZSB0aGF0IHNob3VsZCBhY3QgYXMgdGhlIGJhc2UgZm9yIHRoZSB0ZW1wbGF0ZSB0ZXN0Cm15ICVDcmVhdGVkQ2hhbmdlSUQ7Cgpmb3IgbXkgJENoYW5nZU5hbWUgKCBzb3J0IGtleXMgJUNoYW5nZURlZmluaXRpb25zICkgewogICAgJENyZWF0ZWRDaGFuZ2VJRHskQ2hhbmdlTmFtZX0gPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgJXsgJENoYW5nZURlZmluaXRpb25zeyRDaGFuZ2VOYW1lfSB9LAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQ3JlYXRlZENoYW5nZUlEeyRDaGFuZ2VOYW1lfSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDaGFuZ2VBZGQoKSAtICRDcmVhdGVkQ2hhbmdlSUR7JENoYW5nZU5hbWV9IGNyZWF0ZWQgKCRDaGFuZ2VOYW1lKSIsCiAgICApOwp9Cgpmb3IgbXkgJENoYW5nZU5hbWUgKCBzb3J0IGtleXMgJUNyZWF0ZWRDaGFuZ2VJRCApIHsKICAgIG15ICRDaGFuZ2VJRCA9ICRDcmVhdGVkQ2hhbmdlSUR7JENoYW5nZU5hbWV9OwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDaGFuZ2VBZGQoKSAtICRDaGFuZ2VJRCBjcmVhdGVkICgkQ2hhbmdlTmFtZSkiLAogICAgKTsKCiAgICBteSAkQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRDcmVhdGVkQ2hhbmdlSUR7JENoYW5nZU5hbWV9LAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgY2hhbmdlIGF0dHJpYnV0ZXMKICAgIGZvciBteSAkUmVxdWVzdGVkQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRDaGFuZ2VEZWZpbml0aW9uc3skQ2hhbmdlTmFtZX0gfSApIHsKCiAgICAgICAgIyB0dXJuIG9mZiBhbGwgcHJldHR5IHByaW50CiAgICAgICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6SW5kZW50ID0gMDsKICAgICAgICBsb2NhbCAkRGF0YTo6RHVtcGVyOjpVc2VxcSAgPSAxOwoKICAgICAgICAjIGR1bXAgdGhlIGF0dHJpYnV0ZSBmcm9tIENoYW5nZUdldCgpIGFuZCB0aGUgcmVmZXJlbmNlIGF0dHJpYnV0ZQogICAgICAgICMjIG5vIGNyaXRpYwogICAgICAgIG15ICRDaGFuZ2VBdHRyaWJ1dGUgICAgPSBEYXRhOjpEdW1wZXI6OkR1bXBlciggJENoYW5nZS0+eyRSZXF1ZXN0ZWRBdHRyaWJ1dGV9ICk7CiAgICAgICAgbXkgJFJlZmVyZW5jZUF0dHJpYnV0ZSA9IERhdGE6OkR1bXBlcjo6RHVtcGVyKCAkQ2hhbmdlRGVmaW5pdGlvbnN7JENoYW5nZU5hbWV9LT57JFJlcXVlc3RlZEF0dHJpYnV0ZX0gKTsKICAgICAgICAjIyB1c2UgY3JpdGljCgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJENoYW5nZUF0dHJpYnV0ZSwKICAgICAgICAgICAgJFJlZmVyZW5jZUF0dHJpYnV0ZSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gJFJlcXVlc3RlZEF0dHJpYnV0ZSAoQ2hhbmdlSUQ6ICRDaGFuZ2VJRCkiLAogICAgICAgICk7CiAgICB9CgogICAgJFRlc3RDb3VudCsrOwp9CgojIGFkZCB3b3Jrb3JkZXJzCm15ICVXb3JrT3JkZXJEZWZpbml0aW9ucyA9ICgKICAgIEFTQ0lJV29ya09yZGVyID0+IHsKICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkQ3JlYXRlZENoYW5nZUlEe0NvbnRhaW5lckNoYW5nZX0sCiAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJ0p1c3QgYW4gQVNDSUkgd29ya29yZGVyIHRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICB9LAogICAgVW1sYXV0c1dvcmtPcmRlciA9PiB7CiAgICAgICAgQ2hhbmdlSUQgICAgICAgPT4gJENyZWF0ZWRDaGFuZ2VJRHtDb250YWluZXJDaGFuZ2V9LAogICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdXb3Jrb3JkZXIgdGl0bGUgd2l0aCBnZXJtYW4gdW1sYXV0cyDDpMO2w7wtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgfSwKICAgIFVuaWNvZGVXb3JrT3JkZXIgPT4gewogICAgICAgIENoYW5nZUlEICAgICAgID0+ICRDcmVhdGVkQ2hhbmdlSUR7Q29udGFpbmVyQ2hhbmdlfSwKICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnV29ya29yZGVyIHRpdGxlIHdpdGggdW5pY29kZSBjaGFycyBceHsxNjd9XHh7YjZ9XHh7MjBhY30gLSAnCiAgICAgICAgICAgIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgIH0sCik7CgpteSAlQ3JlYXRlZFdvcmtPcmRlcklEOwpmb3IgbXkgJFdvcmtPcmRlck5hbWUgKCBzb3J0IGtleXMgJVdvcmtPcmRlckRlZmluaXRpb25zICkgewoKICAgICMgYWRkIHdvcmtvcmRlcgogICAgJENyZWF0ZWRXb3JrT3JkZXJJRHskV29ya09yZGVyTmFtZX0gPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBZGQoCiAgICAgICAgJXsgJFdvcmtPcmRlckRlZmluaXRpb25zeyRXb3JrT3JkZXJOYW1lfSB9LAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICBteSAkV29ya09yZGVySUQgPSAkQ3JlYXRlZFdvcmtPcmRlcklEeyRXb3JrT3JkZXJOYW1lfTsKCiAgICAjIGdldCB3b3Jrb3JkZXIKICAgIG15ICRXb3JrT3JkZXIgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgd29ya29yZGVyIGF0dHJpYnV0ZXMKICAgIGZvciBteSAkUmVxdWVzdGVkQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRXb3JrT3JkZXJEZWZpbml0aW9uc3skV29ya09yZGVyTmFtZX0gfSApIHsKCiAgICAgICAgIyB0dXJuIG9mZiBhbGwgcHJldHR5IHByaW50CiAgICAgICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6SW5kZW50ID0gMDsKICAgICAgICBsb2NhbCAkRGF0YTo6RHVtcGVyOjpVc2VxcSAgPSAxOwoKICAgICAgICAjIGR1bXAgdGhlIGF0dHJpYnV0ZSBmcm9tIENoYW5nZUdldCgpIGFuZCB0aGUgcmVmZXJlbmNlIGF0dHJpYnV0ZQogICAgICAgICMjIG5vIGNyaXRpYwogICAgICAgIG15ICRXb3JrT3JkZXJBdHRyaWJ1dGUgPSBEYXRhOjpEdW1wZXI6OkR1bXBlciggJFdvcmtPcmRlci0+eyRSZXF1ZXN0ZWRBdHRyaWJ1dGV9ICk7CiAgICAgICAgbXkgJFJlZmVyZW5jZUF0dHJpYnV0ZSA9IERhdGE6OkR1bXBlcjo6RHVtcGVyKCAkV29ya09yZGVyRGVmaW5pdGlvbnN7JFdvcmtPcmRlck5hbWV9LT57JFJlcXVlc3RlZEF0dHJpYnV0ZX0gKTsKICAgICAgICAjIyB1c2UgY3JpdGljCgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFdvcmtPcmRlckF0dHJpYnV0ZSwKICAgICAgICAgICAgJFJlZmVyZW5jZUF0dHJpYnV0ZSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gJFJlcXVlc3RlZEF0dHJpYnV0ZSAoV29ya09yZGVySUQ6ICRXb3JrT3JkZXJJRCkiLAogICAgICAgICk7CgogICAgICAgICRUZXN0Q291bnQrKzsKICAgIH0KfQoKIyBhZGQgY29uZGl0aW9ucwpteSAlQ29uZGl0aW9uRGVmaW5pdGlvbnMgPSAoCiAgICBTaW1wbGVDb25kaXRpb24gPT4gewogICAgICAgIENvbmRpdGlvbkFkZCA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgICAgICA9PiAkQ3JlYXRlZENoYW5nZUlEe0Jhc2VDaGFuZ2V9LAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgPT4gJ1NpbXBsZSBDb25kaXRpb24gLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgRXhwcmVzc2lvbkNvbmp1bmN0aW9uID0+ICdhbGwnLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgICAgPT4gJFZhbGlkT2JqZWN0LT5WYWxpZExvb2t1cCggVmFsaWQgPT4gJ3ZhbGlkJyApLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEV4cHJlc3Npb25BZGQgPT4gewogICAgICAgICAgICBPYmplY3RJRCA9PiB7CiAgICAgICAgICAgICAgICBPYmplY3RMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0cmlidXRlSUQgPT4gewogICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdDaGFuZ2VUaXRsZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBPcGVyYXRvcklEID0+IHsKICAgICAgICAgICAgICAgIE9wZXJhdG9yTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdpcycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgIyBzdGF0aWMgZmllbGRzCiAgICAgICAgICAgICNDb25kaXRpb25JRCAgPT4gLi4uLCAjIFRoaXMgaXMgZmlsbGVkIGJ5IGZvbGxvd2luZyBjb2RlCiAgICAgICAgICAgIFNlbGVjdG9yICAgICA9PiAkQ3JlYXRlZENoYW5nZUlEe0Jhc2VDaGFuZ2V9LAogICAgICAgICAgICBDb21wYXJlVmFsdWUgPT4gJ0R1bW15Q29tcGFyZVZhbHVlMScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWN0aW9uQWRkID0+IHsKICAgICAgICAgICAgT2JqZWN0SUQgPT4gewogICAgICAgICAgICAgICAgT2JqZWN0TG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgQXR0cmlidXRlSUQgPT4gewogICAgICAgICAgICAgICAgQXR0cmlidXRlTG9va3VwID0+IHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgPT4gJ0NoYW5nZVRpdGxlJywKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE9wZXJhdG9ySUQgPT4gewogICAgICAgICAgICAgICAgT3BlcmF0b3JMb29rdXAgPT4gewogICAgICAgICAgICAgICAgICAgIE5hbWUgICA9PiAnc2V0JywKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAjIHN0YXRpYyBmaWVsZHMKICAgICAgICAgICAgI0NvbmRpdGlvbklEICA9PiAuLi4sICMgVGhpcyBpcyBmaWxsZWQgYnkgZm9sbG93aW5nIGNvZGUKICAgICAgICAgICAgU2VsZWN0b3IgICAgPT4gJENyZWF0ZWRDaGFuZ2VJRHtCYXNlQ2hhbmdlfSwKICAgICAgICAgICAgQWN0aW9uVmFsdWUgPT4gJ05ldyBDaGFuZ2UgVGl0bGUnIC4gJFVuaXF1ZVNpZ25hdHVyZSAuICRSYW5kb21JRCwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgfQogICAgfSwKKTsKCm15ICVDcmVhdGVkQ29uZGl0aW9uSUQ7CgpDT05ESVRJT05OQU1FOgpmb3IgbXkgJENvbmRpdGlvbk5hbWUgKCBzb3J0IGtleXMgJUNvbmRpdGlvbkRlZmluaXRpb25zICkgewogICAgbXkgJENvbmRpdGlvbkRhdGEgPSAkQ29uZGl0aW9uRGVmaW5pdGlvbnN7JENvbmRpdGlvbk5hbWV9LT57Q29uZGl0aW9uQWRkfTsKICAgIG15ICRDb25kaXRpb25JRCAgID0gJENvbmRpdGlvbk9iamVjdC0+Q29uZGl0aW9uQWRkKAogICAgICAgICV7JENvbmRpdGlvbkRhdGF9LAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQ29uZGl0aW9uSUQsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQWRkIENvbmRpdGlvbiAkQ29uZGl0aW9uTmFtZSIsCiAgICApOwoKICAgIG5leHQgQ09ORElUSU9OTkFNRSBpZiAhJENvbmRpdGlvbklEOwoKICAgICRDcmVhdGVkQ29uZGl0aW9uSUR7JENvbmRpdGlvbk5hbWV9ID0gJENvbmRpdGlvbklEOwoKICAgIG15ICRFeHByZXNzaW9uRGF0YSA9ICRDb25kaXRpb25EZWZpbml0aW9uc3skQ29uZGl0aW9uTmFtZX0tPntFeHByZXNzaW9uQWRkfTsKICAgIG15ICRFeHByZXNzaW9uSUQgPSBfRXhwcmVzc2lvbkFkZCggJEV4cHJlc3Npb25EYXRhLCAkQ29uZGl0aW9uSUQgKTsKCiAgICBteSAkQWN0aW9uRGF0YSA9ICRDb25kaXRpb25EZWZpbml0aW9uc3skQ29uZGl0aW9uTmFtZX0tPntBY3Rpb25BZGR9OwogICAgbXkgJEFjdGlvbklEID0gX0FjdGlvbkFkZCggJEFjdGlvbkRhdGEsICRDb25kaXRpb25JRCApOwp9CmNvbnRpbnVlIHsKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBjcmVhdGUgdGVtcGxhdGVzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCm15ICVUZXN0ZWRUZW1wbGF0ZUlEOwpteSAlVGVzdGVkVGVtcGxhdGVTdHJpbmdzOwoKbXkgJVRlbXBsYXRlRGVmaW5pdGlvbnMgPSAoCiAgICBCYXNlQ2hhbmdlID0+IHsKICAgICAgICBOYW1lICAgICA9PiAnQmFzZSBDaGFuZ2UgVGVtcGxhdGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICBUeXBlICAgICA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgVmFsaWRJRCAgPT4gJFZhbGlkT2JqZWN0LT5WYWxpZExvb2t1cCggVmFsaWQgPT4gJ3ZhbGlkJyApLAogICAgICAgIENoYW5nZUlEID0+ICRDcmVhdGVkQ2hhbmdlSUR7QmFzZUNoYW5nZX0sCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgIH0sCiAgICBVbmljb2RlQ2hhbmdlID0+IHsKICAgICAgICBOYW1lICAgICA9PiAnVW5pY29kZSBDaGFuZ2UgVGVtcGxhdGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICBUeXBlICAgICA9PiAnSVRTTUNoYW5nZScsCiAgICAgICAgVmFsaWRJRCAgPT4gJFZhbGlkT2JqZWN0LT5WYWxpZExvb2t1cCggVmFsaWQgPT4gJ3ZhbGlkJyApLAogICAgICAgIENoYW5nZUlEID0+ICRDcmVhdGVkQ2hhbmdlSUR7VW5pY29kZUNoYW5nZX0sCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgIH0sCiAgICBFbnRpdHlDaGFuZ2UgPT4gewogICAgICAgIE5hbWUgICAgID0+ICdFbnRpdHkgQ2hhbmdlIFRlbXBsYXRlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgVHlwZSAgICAgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgIFZhbGlkSUQgID0+ICRWYWxpZE9iamVjdC0+VmFsaWRMb29rdXAoIFZhbGlkID0+ICd2YWxpZCcgKSwKICAgICAgICBDaGFuZ2VJRCA9PiAkQ3JlYXRlZENoYW5nZUlEe0VudGl0eUNoYW5nZX0sCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgIH0sCiAgICBBU0NJSVdvcmtPcmRlciA9PiB7CiAgICAgICAgTmFtZSAgICAgICAgPT4gJ0FzY2lpIFdvcmtPcmRlciBUZW1wbGF0ZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIFR5cGUgICAgICAgID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICBWYWxpZElEICAgICA9PiAkVmFsaWRPYmplY3QtPlZhbGlkTG9va3VwKCBWYWxpZCA9PiAndmFsaWQnICksCiAgICAgICAgV29ya09yZGVySUQgPT4gJENyZWF0ZWRXb3JrT3JkZXJJRHtBU0NJSVdvcmtPcmRlcn0sCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgIH0sCiAgICBVbWxhdXRzV29ya09yZGVyID0+IHsKICAgICAgICBOYW1lICAgICAgICA9PiAnVW1sYXV0cyBXb3JrT3JkZXIgVGVtcGxhdGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICBUeXBlICAgICAgICA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgVmFsaWRJRCAgICAgPT4gJFZhbGlkT2JqZWN0LT5WYWxpZExvb2t1cCggVmFsaWQgPT4gJ3ZhbGlkJyApLAogICAgICAgIFdvcmtPcmRlcklEID0+ICRDcmVhdGVkV29ya09yZGVySUR7VW1sYXV0c1dvcmtPcmRlcn0sCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgIH0sCiAgICBVbmljb2RlV29ya09yZGVyID0+IHsKICAgICAgICBOYW1lICAgICAgICA9PiAnVW5pY29kZSBXb3JrT3JkZXIgVGVtcGxhdGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICBUeXBlICAgICAgICA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgVmFsaWRJRCAgICAgPT4gJFZhbGlkT2JqZWN0LT5WYWxpZExvb2t1cCggVmFsaWQgPT4gJ3ZhbGlkJyApLAogICAgICAgIFdvcmtPcmRlcklEID0+ICRDcmVhdGVkV29ya09yZGVySUR7VW5pY29kZVdvcmtPcmRlcn0sCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgIH0sCiAgICBDQUJDdXN0b21lckFnZW50ID0+IHsKICAgICAgICBOYW1lICAgICA9PiAnQ3VzdG9tZXIgYW5kIEFnZW50IENBQiBUZW1wbGF0ZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIFR5cGUgICAgID0+ICdDQUInLAogICAgICAgIFZhbGlkSUQgID0+ICRWYWxpZE9iamVjdC0+VmFsaWRMb29rdXAoIFZhbGlkID0+ICd2YWxpZCcgKSwKICAgICAgICBDaGFuZ2VJRCA9PiAkQ3JlYXRlZENoYW5nZUlEe0Jhc2VDaGFuZ2V9LAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICB9LAogICAgU2ltcGxlQ29uZGl0aW9uID0+IHsKICAgICAgICBOYW1lICAgICAgICA9PiAnU2ltcGxlIENvbmRpdGlvbiBUZW1wbGF0ZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIFR5cGUgICAgICAgID0+ICdJVFNNQ29uZGl0aW9uJywKICAgICAgICBWYWxpZElEICAgICA9PiAkVmFsaWRPYmplY3QtPlZhbGlkTG9va3VwKCBWYWxpZCA9PiAndmFsaWQnICksCiAgICAgICAgQ29uZGl0aW9uSUQgPT4gJENyZWF0ZWRDb25kaXRpb25JRHtTaW1wbGVDb25kaXRpb259LAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICB9LAopOwoKZm9yIG15ICRUZW1wbGF0ZURlZmluaXRpb25OYW1lICggc29ydCBrZXlzICVUZW1wbGF0ZURlZmluaXRpb25zICkgewoKICAgICMgY3JlYXRlIHNpbXBsZSBjaGFuZ2UgdGVtcGxhdGUKICAgICRUZW1wbGF0ZURlZmluaXRpb25zeyRUZW1wbGF0ZURlZmluaXRpb25OYW1lfS0+e0NvbnRlbnR9ID0KICAgICAgICAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlU2VyaWFsaXplKAogICAgICAgICV7ICRUZW1wbGF0ZURlZmluaXRpb25zeyRUZW1wbGF0ZURlZmluaXRpb25OYW1lfSB9LAogICAgICAgIFRlbXBsYXRlVHlwZSA9PiAkVGVtcGxhdGVEZWZpbml0aW9uc3skVGVtcGxhdGVEZWZpbml0aW9uTmFtZX0tPntUeXBlfSwKICAgICAgICApOwoKICAgICMgY2hlY2sgc2VyaWFsaXphdGlvbgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFRlbXBsYXRlRGVmaW5pdGlvbnN7JFRlbXBsYXRlRGVmaW5pdGlvbk5hbWV9LT57Q29udGVudH0sCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogVGVtcGxhdGVTZXJpYWxpemUgZm9yICRUZW1wbGF0ZURlZmluaXRpb25OYW1lIiwKICAgICk7CgogICAgIyBhZGQgdGVtcGxhdGUKICAgICRUZXN0ZWRUZW1wbGF0ZUlEeyRUZW1wbGF0ZURlZmluaXRpb25OYW1lfSA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVBZGQoCiAgICAgICAgJXsgJFRlbXBsYXRlRGVmaW5pdGlvbnN7JFRlbXBsYXRlRGVmaW5pdGlvbk5hbWV9IH0sCiAgICAgICAgVGVtcGxhdGVUeXBlID0+ICRUZW1wbGF0ZURlZmluaXRpb25zeyRUZW1wbGF0ZURlZmluaXRpb25OYW1lfS0+e1R5cGV9LAogICAgKTsKCiAgICBteSAkVGVtcGxhdGVJRCA9ICRUZXN0ZWRUZW1wbGF0ZUlEeyRUZW1wbGF0ZURlZmluaXRpb25OYW1lfTsKCiAgICAjIGNoZWNrIHRlbXBsYXRlIElECiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkVGVtcGxhdGVJRCwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBUZW1wbGF0ZUFkZCBmb3IgJFRlbXBsYXRlRGVmaW5pdGlvbk5hbWUiLAogICAgKTsKCiAgICAjIGdldCBjcmVhdGVkIHRlbXBsYXRlCiAgICBteSAkVGVtcGxhdGUgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICAjIGNoZWNrIHRlbXBsYXRlIGF0dHJpYnV0ZXMgbmFtZSwgdHlwZSBhbmQgY29udGVudAogICAgZm9yIG15ICRBdHRyaWJ1dGUgKHF3KE5hbWUgVHlwZSBDb250ZW50KSkgewogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFRlbXBsYXRlLT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICRUZW1wbGF0ZURlZmluaXRpb25zeyRUZW1wbGF0ZURlZmluaXRpb25OYW1lfS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSAkQXR0cmlidXRlIChUZW1wbGF0ZUlEOiAkVGVtcGxhdGVJRCkiLAogICAgICAgICk7CiAgICB9CgogICAgJFRlc3RDb3VudCsrOwp9CgojIGNyZWF0ZSBvYmplY3RzIGJhc2VkIG9uIHRlbXBsYXRlcwpteSBAQ2hhbmdlSURzOwoKQ0hBTkdFVEVNUExBVEVOQU1FOgpmb3IgbXkgJENoYW5nZVRlbXBsYXRlTmFtZSAoIHNvcnQga2V5cyAlQ3JlYXRlZENoYW5nZUlEICkgewoKICAgICMgZ2V0IHRlbXBsYXRlIGlkCiAgICBteSAkVGVtcGxhdGVJRCA9ICRUZXN0ZWRUZW1wbGF0ZUlEeyRDaGFuZ2VUZW1wbGF0ZU5hbWV9OwoKICAgIG5leHQgQ0hBTkdFVEVNUExBVEVOQU1FIGlmICEkVGVtcGxhdGVJRDsKCiAgICAjIGRlc2VyaWFsaXplIHRlbXBsYXRlCiAgICBteSAkQ2hhbmdlSUQgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlRGVTZXJpYWxpemUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgY2hhbmdlIGlkCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ3JlYXRlIGNoYW5nZSBiYXNlZCBvbiB0ZW1wbGF0ZSAoVGVtcGxhdGVJRDogJFRlbXBsYXRlSUQpIiwKICAgICk7CgogICAgIyBnZXQgY2hhbmdlIGRhdGEKICAgIG15ICRDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgY2hhbmdlIGF0dHJpYnV0ZXMKICAgIGZvciBteSAkUmVxdWVzdGVkQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRDaGFuZ2VEZWZpbml0aW9uc3skQ2hhbmdlVGVtcGxhdGVOYW1lfSB9ICkgewoKICAgICAgICAjIHR1cm4gb2ZmIGFsbCBwcmV0dHkgcHJpbnQKICAgICAgICBsb2NhbCAkRGF0YTo6RHVtcGVyOjpJbmRlbnQgPSAwOwogICAgICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OlVzZXFxICA9IDE7CgogICAgICAgICMgZHVtcCB0aGUgYXR0cmlidXRlIGZyb20gQ2hhbmdlR2V0KCkgYW5kIHRoZSByZWZlcmVuY2UgYXR0cmlidXRlCiAgICAgICAgIyMgbm8gY3JpdGljCiAgICAgICAgbXkgJENoYW5nZUF0dHJpYnV0ZSAgICA9IERhdGE6OkR1bXBlcjo6RHVtcGVyKCAkQ2hhbmdlLT57JFJlcXVlc3RlZEF0dHJpYnV0ZX0gKTsKICAgICAgICBteSAkUmVmZXJlbmNlQXR0cmlidXRlID0gRGF0YTo6RHVtcGVyOjpEdW1wZXIoCiAgICAgICAgICAgICRDaGFuZ2VEZWZpbml0aW9uc3skQ2hhbmdlVGVtcGxhdGVOYW1lfS0+eyRSZXF1ZXN0ZWRBdHRyaWJ1dGV9CiAgICAgICAgKTsKICAgICAgICAjIyB1c2UgY3JpdGljCgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJENoYW5nZUF0dHJpYnV0ZSwKICAgICAgICAgICAgJFJlZmVyZW5jZUF0dHJpYnV0ZSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gJFJlcXVlc3RlZEF0dHJpYnV0ZSAoQ2hhbmdlSUQ6ICRDaGFuZ2VJRCkiLAogICAgICAgICk7CiAgICB9CgogICAgIyBjaGVjayBwbGFpbiB2ZXJzaW9uIG9mIHNvbWUgYXJndW1lbnRzLCBlc3BlY2lhbGx5IHdoZXRoZXIgdGhlIHJlc3VsdCBvZiBUb0FzY2lpCiAgICAjIGlzIGNvcnJlY3RseSBzYXZlZCBpbnRvIHRoZSBkYXRhYmFzZQogICAgQVJHVU1FTlQ6CiAgICBmb3IgbXkgJEF0dHJpYnV0ZSAocXcoRGVzY3JpcHRpb24gSnVzdGlmaWNhdGlvbikpIHsKICAgICAgICBuZXh0IEFSR1VNRU5UIGlmICEkQ2hhbmdlRGVmaW5pdGlvbnN7JENoYW5nZVRlbXBsYXRlTmFtZX0tPnskQXR0cmlidXRlfTsKCiAgICAgICAgbXkgJENoYW5nZUF0dHJpYnV0ZSA9ICRDaGFuZ2UtPnsiJHtBdHRyaWJ1dGV9UGxhaW4ifSB8fCAnJzsKICAgICAgICBteSAkUmVmZXJlbmNlQXR0cmlidXRlID0gJEhUTUxVdGlsc09iamVjdC0+VG9Bc2NpaSgKICAgICAgICAgICAgU3RyaW5nID0+ICRDaGFuZ2VEZWZpbml0aW9uc3skQ2hhbmdlVGVtcGxhdGVOYW1lfS0+eyRBdHRyaWJ1dGV9LAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJENoYW5nZUF0dHJpYnV0ZSwKICAgICAgICAgICAgJFJlZmVyZW5jZUF0dHJpYnV0ZSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gJHtBdHRyaWJ1dGV9UGxhaW4gKENoYW5nZUlEOiAkQ2hhbmdlSUQpIiwKICAgICAgICApOwogICAgfQoKICAgIHB1c2ggQENoYW5nZUlEcywgJENoYW5nZUlEOwoKICAgICRUZXN0Q291bnQrKzsKfQoKV09SS09SREVSVEVNUExBVEVOQU1FOgpmb3IgbXkgJFdvcmtPcmRlclRlbXBsYXRlTmFtZSAoIHNvcnQga2V5cyAlQ3JlYXRlZFdvcmtPcmRlcklEICkgewoKICAgICMgZ2V0IHRlbXBsYXRlIGlkCiAgICBteSAkVGVtcGxhdGVJRCA9ICRUZXN0ZWRUZW1wbGF0ZUlEeyRXb3JrT3JkZXJUZW1wbGF0ZU5hbWV9OwoKICAgIG5leHQgV09SS09SREVSVEVNUExBVEVOQU1FIGlmICEkVGVtcGxhdGVJRDsKCiAgICAjIGRlc2VyaWFsaXplIHRlbXBsYXRlCiAgICBteSAkV29ya09yZGVySUQgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlRGVTZXJpYWxpemUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICBDaGFuZ2VJRCAgID0+ICRDcmVhdGVkQ2hhbmdlSUR7VGFyZ2V0Q2hhbmdlfSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgd29ya29yZGVyIGlkCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkV29ya09yZGVySUQsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ3JlYXRlIHdvcmtvcmRlciBiYXNlZCBvbiB0ZW1wbGF0ZSAoVGVtcGxhdGVJRDogJFRlbXBsYXRlSUQpIiwKICAgICk7CgogICAgIyBnZXQgd29ya29yZGVyIGRhdGEKICAgIG15ICRXb3JrT3JkZXIgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJHZXQoCiAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKICAgICMgY2hlY2sgd29ya29yZGVyIGF0dHJpYnV0ZXMKICAgIFJFUVVFU1RFREFUVFJJQlVURToKICAgIGZvciBteSAkUmVxdWVzdGVkQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRXb3JrT3JkZXJEZWZpbml0aW9uc3skV29ya09yZGVyVGVtcGxhdGVOYW1lfSB9ICkgewoKICAgICAgICBuZXh0IFJFUVVFU1RFREFUVFJJQlVURSBpZiAkUmVxdWVzdGVkQXR0cmlidXRlIGVxICdDaGFuZ2VJRCc7CgogICAgICAgICMgdHVybiBvZmYgYWxsIHByZXR0eSBwcmludAogICAgICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OkluZGVudCA9IDA7CiAgICAgICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6VXNlcXEgID0gMTsKCiAgICAgICAgIyBkdW1wIHRoZSBhdHRyaWJ1dGUgZnJvbSBDaGFuZ2VHZXQoKSBhbmQgdGhlIHJlZmVyZW5jZSBhdHRyaWJ1dGUKICAgICAgICAjIyBubyBjcml0aWMKICAgICAgICBteSAkV29ya09yZGVyQXR0cmlidXRlID0gRGF0YTo6RHVtcGVyOjpEdW1wZXIoICRXb3JrT3JkZXItPnskUmVxdWVzdGVkQXR0cmlidXRlfSApOwogICAgICAgIG15ICRSZWZlcmVuY2VBdHRyaWJ1dGUgPSBEYXRhOjpEdW1wZXI6OkR1bXBlcigKICAgICAgICAgICAgJFdvcmtPcmRlckRlZmluaXRpb25zeyRXb3JrT3JkZXJUZW1wbGF0ZU5hbWV9LT57JFJlcXVlc3RlZEF0dHJpYnV0ZX0KICAgICAgICApOwogICAgICAgICMjIHVzZSBjcml0aWMKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkV29ya09yZGVyQXR0cmlidXRlLAogICAgICAgICAgICAkUmVmZXJlbmNlQXR0cmlidXRlLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSAkUmVxdWVzdGVkQXR0cmlidXRlIChXb3JrT3JkZXI6ICRXb3JrT3JkZXJJRCkiLAogICAgICAgICk7CiAgICB9CgogICAgJFNlbGYtPklzKAogICAgICAgICRXb3JrT3JkZXItPntDaGFuZ2VJRH0sCiAgICAgICAgJENyZWF0ZWRDaGFuZ2VJRHtUYXJnZXRDaGFuZ2V9LAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIENoYW5nZUlEIChXb3JrT3JkZXI6ICRXb3JrT3JkZXJJRCkiLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCkNPTkRJVElPTlRFTVBMQVRFTkFNRToKZm9yIG15ICRDb25kaXRpb25UZW1wbGF0ZU5hbWUgKCBzb3J0IGtleXMgJUNyZWF0ZWRDb25kaXRpb25JRCApIHsKCiAgICAjIGdldCB0ZW1wbGF0ZSBpZAogICAgbXkgJFRlbXBsYXRlSUQgPSAkVGVzdGVkVGVtcGxhdGVJRHskQ29uZGl0aW9uVGVtcGxhdGVOYW1lfTsKCiAgICBuZXh0IENPTkRJVElPTlRFTVBMQVRFTkFNRSBpZiAhJFRlbXBsYXRlSUQ7CgogICAgIyBkZXNlcmlhbGl6ZSB0ZW1wbGF0ZQogICAgbXkgJENvbmRpdGlvbklEID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZURlU2VyaWFsaXplKAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgQ2hhbmdlSUQgICA9PiAkQ3JlYXRlZENoYW5nZUlEe1RhcmdldENoYW5nZX0sCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICAjIGNoZWNrIGNoYW5nZSBpZAogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJENvbmRpdGlvbklELAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENyZWF0ZSBjb25kaXRpb24gYmFzZWQgb24gdGVtcGxhdGUgKFRlbXBsYXRlSUQ6ICRUZW1wbGF0ZUlEKSIsCiAgICApOwoKICAgICRUZXN0Q291bnQrKzsKfQoKIyBnZXQgbmFtZXMgb2YgQ0FCIHRlbXBsYXRlcwpteSBAQ0FCVGVtcGxhdGVOYW1lcyA9IGdyZXAgeyAkVGVtcGxhdGVEZWZpbml0aW9uc3skX30tPntUeXBlfSBlcSAnQ0FCJyB9IGtleXMgJVRlc3RlZFRlbXBsYXRlSUQ7CgpDQUJURU1QTEFURU5BTUU6CmZvciBteSAkQ0FCVGVtcGxhdGVOYW1lIChAQ0FCVGVtcGxhdGVOYW1lcykgewoKICAgICMgZ2V0IHRlbXBsYXRlIGlkCiAgICBteSAkVGVtcGxhdGVJRCA9ICRUZXN0ZWRUZW1wbGF0ZUlEeyRDQUJUZW1wbGF0ZU5hbWV9OwoKICAgIG5leHQgQ0FCVEVNUExBVEVOQU1FIGlmICEkVGVtcGxhdGVJRDsKCiAgICAjIGRlc2VyaWFsaXplIHRlbXBsYXRlCiAgICBteSAkQ2hhbmdlSUQgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlRGVTZXJpYWxpemUoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgQ2hhbmdlSUQgICA9PiAkQ3JlYXRlZENoYW5nZUlEe1RhcmdldENoYW5nZX0sCiAgICApOwoKICAgICMgY2hlY2sgY2hhbmdlIGlkCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ3JlYXRlIENBQiBiYXNlZCBvbiB0ZW1wbGF0ZSAoVGVtcGxhdGVJRDogJFRlbXBsYXRlSUQpIiwKICAgICk7CgogICAgIyBnZXQgY2hhbmdlIGRhdGEKICAgIG15ICRDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwoKICAgICMgZ2V0IG9yaWdpbmFsIGNoYW5nZQogICAgbXkgJE9yaWdDaGFuZ2UgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJENyZWF0ZWRDaGFuZ2VJRHtCYXNlQ2hhbmdlfSwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKCiAgICAjIHR1cm4gb2ZmIGFsbCBwcmV0dHkgcHJpbnQKICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OkluZGVudCA9IDA7CiAgICBsb2NhbCAkRGF0YTo6RHVtcGVyOjpVc2VxcSAgPSAxOwoKICAgICMgZHVtcCB0aGUgYXR0cmlidXRlIGZyb20gQ2hhbmdlR2V0KCkgYW5kIHRoZSByZWZlcmVuY2UgYXR0cmlidXRlCiAgICAjIyBubyBjcml0aWMKICAgIG15ICRDaGFuZ2VBdHRyaWJ1dGUgICAgPSBEYXRhOjpEdW1wZXI6OkR1bXBlciggWyAkQ2hhbmdlLT57Q0FCQWdlbnRzfSwgICAgICRDaGFuZ2UtPntDQUJDdXN0b21lcnN9IF0gKTsKICAgIG15ICRSZWZlcmVuY2VBdHRyaWJ1dGUgPSBEYXRhOjpEdW1wZXI6OkR1bXBlciggWyAkT3JpZ0NoYW5nZS0+e0NBQkFnZW50c30sICRPcmlnQ2hhbmdlLT57Q0FCQ3VzdG9tZXJzfSBdICk7CiAgICAjIyB1c2UgY3JpdGljCgogICAgJFNlbGYtPklzKAogICAgICAgICRDaGFuZ2VBdHRyaWJ1dGUsCiAgICAgICAgJFJlZmVyZW5jZUF0dHJpYnV0ZSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBDQUIgZnJvbSB0ZW1wbGF0ZSAoQ2hhbmdlSUQ6ICRDaGFuZ2VJRCkiLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyB0ZXN0CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgdGVzdCBUZW1wbGF0ZUxpc3QoKQpteSAkQ2hhbmdlVGVtcGxhdGVMaXN0ID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZUxpc3QoCiAgICBUZW1wbGF0ZVR5cGUgPT4gJ0lUU01DaGFuZ2UnLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CgpteSBAQ2hhbmdlVGVtcGxhdGVOYW1lcyA9IGdyZXAgewogICAgJFRlbXBsYXRlRGVmaW5pdGlvbnN7JF99LT57VHlwZX0gZXEgJ0lUU01DaGFuZ2UnCn0ga2V5cyAlVGVzdGVkVGVtcGxhdGVJRDsKCmZvciBteSAkQ2hhbmdlVGVtcGxhdGVOYW1lIChAQ2hhbmdlVGVtcGxhdGVOYW1lcykgewogICAgbXkgJFRlbXBsYXRlSUQgPSAkVGVzdGVkVGVtcGxhdGVJRHskQ2hhbmdlVGVtcGxhdGVOYW1lfTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICBleGlzdHMgJENoYW5nZVRlbXBsYXRlTGlzdC0+eyRUZW1wbGF0ZUlEfSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBDaGVjayBDaGFuZ2VUZW1wbGF0ZSAkVGVtcGxhdGVJRCBpbiBUZW1wbGF0ZUxpc3QiLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCm15IEBXb3JrT3JkZXJUZW1wbGF0ZU5hbWVzID0gZ3JlcCB7CiAgICAkVGVtcGxhdGVEZWZpbml0aW9uc3skX30tPntUeXBlfSBlcSAnSVRTTVdvcmtPcmRlcicKfSBrZXlzICVUZXN0ZWRUZW1wbGF0ZUlEOwoKbXkgJFdvcmtPcmRlclRlbXBsYXRlTGlzdCA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVMaXN0KAogICAgVGVtcGxhdGVUeXBlID0+ICdJVFNNV29ya09yZGVyJywKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKZm9yIG15ICRXb3JrT3JkZXJUZW1wbGF0ZU5hbWUgKEBXb3JrT3JkZXJUZW1wbGF0ZU5hbWVzKSB7CiAgICBteSAkVGVtcGxhdGVJRCA9ICRUZXN0ZWRUZW1wbGF0ZUlEeyRXb3JrT3JkZXJUZW1wbGF0ZU5hbWV9OwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgIGV4aXN0cyAkV29ya09yZGVyVGVtcGxhdGVMaXN0LT57JFRlbXBsYXRlSUR9LAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIENoZWNrIFdvcmtPcmRlclRlbXBsYXRlICRUZW1wbGF0ZUlEIGluIFRlbXBsYXRlTGlzdCIsCiAgICApOwoKICAgICRUZXN0Q291bnQrKzsKfQoKbXkgQENvbmRpdGlvblRlbXBsYXRlTmFtZXMgPSBncmVwIHsKICAgICRUZW1wbGF0ZURlZmluaXRpb25zeyRffS0+e1R5cGV9IGVxICdJVFNNQ29uZGl0aW9uJwp9IGtleXMgJVRlc3RlZFRlbXBsYXRlSUQ7CgpteSAkQ29uZGl0aW9uVGVtcGxhdGVMaXN0ID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZUxpc3QoCiAgICBUZW1wbGF0ZVR5cGUgPT4gJ0lUU01Db25kaXRpb24nLAogICAgVXNlcklEICAgICAgID0+IDEsCik7Cgpmb3IgbXkgJENvbmRpdGlvblRlbXBsYXRlTmFtZSAoQENvbmRpdGlvblRlbXBsYXRlTmFtZXMpIHsKICAgIG15ICRUZW1wbGF0ZUlEID0gJFRlc3RlZFRlbXBsYXRlSUR7JENvbmRpdGlvblRlbXBsYXRlTmFtZX07CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgZXhpc3RzICRDb25kaXRpb25UZW1wbGF0ZUxpc3QtPnskVGVtcGxhdGVJRH0sCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gQ2hlY2sgQ29uZGl0aW9uVGVtcGxhdGUgJFRlbXBsYXRlSUQgaW4gVGVtcGxhdGVMaXN0IiwKICAgICk7CgogICAgJFRlc3RDb3VudCsrOwp9CgpteSAkQ0FCVGVtcGxhdGVMaXN0ID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZUxpc3QoCiAgICBUZW1wbGF0ZVR5cGUgPT4gJ0NBQicsCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKCmZvciBteSAkQ0FCVGVtcGxhdGVOYW1lIChAQ0FCVGVtcGxhdGVOYW1lcykgewogICAgbXkgJFRlbXBsYXRlSUQgPSAkVGVzdGVkVGVtcGxhdGVJRHskQ0FCVGVtcGxhdGVOYW1lfTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICBleGlzdHMgJENBQlRlbXBsYXRlTGlzdC0+eyRUZW1wbGF0ZUlEfSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBDaGVjayBDQUJUZW1wbGF0ZSAkVGVtcGxhdGVJRCBpbiBUZW1wbGF0ZUxpc3QiLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgdGVzdCBUZW1wbGF0ZVNlYXJjaCgpCgojIHRlc3QgVGVtcGxhdGVVcGRhdGUoKQpteSAlTmV3VmFsdWVzOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGNsZWFuIHRoZSBzeXN0ZW0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyByZXN0b3JlIG9yaWdpbmFsIGVtYWlsIGNoZWNrIHBhcmFtCiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgIFZhbHVlID0+ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnLAopOwoKIyBkZWxldGUgdGhlIHRlc3QgdGVtcGxhdGVzCmZvciBteSAkVGVtcGxhdGVOYW1lICggc29ydCBrZXlzICVUZXN0ZWRUZW1wbGF0ZUlEICkgewogICAgbXkgJFRlbXBsYXRlSUQgPSAkVGVzdGVkVGVtcGxhdGVJRHskVGVtcGxhdGVOYW1lfTsKCiAgICBteSAkRGVsZXRlT2sgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlRGVsZXRlKAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICREZWxldGVPaywKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBUZW1wbGF0ZURlbGV0ZSgpIgogICAgKTsKCiAgICAjIGRvdWJsZSBjaGVjayBpZiBjaGFuZ2UgaXMgcmVhbGx5IGRlbGV0ZWQKICAgIG15ICRUZW1wbGF0ZURhdGEgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgJFRlbXBsYXRlRGF0YS0+e1RlbXBsYXRlSUR9LAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFRlbXBsYXRlRGVsZXRlKCkgLSBkb3VibGUgY2hlY2siLAogICAgKTsKfQpjb250aW51ZSB7CiAgICAkVGVzdENvdW50Kys7Cn0KCiMgY2xlYW51cCBpcyBkb25lIGJ5IFJlc3RvcmVEYXRhYmFzZQoKc3ViIF9BY3Rpb25BZGQgewogICAgbXkgKCAkQWN0aW9uRGF0YSwgJENvbmRpdGlvbklEICkgPSBAXzsKCiAgICByZXR1cm4gaWYgISRBY3Rpb25EYXRhOwogICAgcmV0dXJuIGlmIHJlZiAkQWN0aW9uRGF0YSBuZSAnSEFTSCc7CgogICAgIyBoYXNoIGZvciBhZGRpbmcKICAgIG15ICVBY3Rpb25BZGQ7CgogICAgIyBzZXQgc3RhdGljIGZpZWxkcwogICAgbXkgQFN0YXRpY0ZpZWxkcyA9IHF3KCBTZWxlY3RvciBBY3Rpb25WYWx1ZSBVc2VySUQgQ29uZGl0aW9uSUQgKTsKCiAgICBTVEFUSUNGSUVMRDoKICAgIGZvciBteSAkU3RhdGljRmllbGQgKEBTdGF0aWNGaWVsZHMpIHsKCiAgICAgICAgIyBvbWl0IHN0YXRpYyBmaWVsZCBpZiBpdCBpcyBub3Qgc2V0CiAgICAgICAgbmV4dCBTVEFUSUNGSUVMRCBpZiAhZXhpc3RzICRBY3Rpb25EYXRhLT57JFN0YXRpY0ZpZWxkfTsKICAgICAgICBuZXh0IFNUQVRJQ0ZJRUxEIGlmICFkZWZpbmVkICRBY3Rpb25EYXRhLT57JFN0YXRpY0ZpZWxkfTsKCiAgICAgICAgIyBzYWZlIGRhdGEKICAgICAgICAkQWN0aW9uQWRkeyRTdGF0aWNGaWVsZH0gPSAkQWN0aW9uRGF0YS0+eyRTdGF0aWNGaWVsZH07CiAgICB9CgogICAgIyBnZXQgYWxsIGZpZWxkcyBmb3IgQWN0aW9uQWRkCiAgICBBQ1RJT05BRERWQUxVRToKICAgIGZvciBteSAkQWN0aW9uQWRkVmFsdWUgKCBzb3J0IGtleXMgJXskQWN0aW9uRGF0YX0gKSB7CgogICAgICAgICMgb21pdCBzdGF0aWMgZmllbGRzCiAgICAgICAgbmV4dCBBQ1RJT05BRERWQUxVRSBpZiBncmVwIHsgJF8gZXEgJEFjdGlvbkFkZFZhbHVlIH0gQFN0YXRpY0ZpZWxkczsKCiAgICAgICAgIyBnZXQgdmFsdWVzIGZvciBmaWVsZHMKICAgICAgICBmb3IgbXkgJEZpZWxkVmFsdWUgKCBzb3J0IGtleXMgJXsgJEFjdGlvbkRhdGEtPnskQWN0aW9uQWRkVmFsdWV9IH0gKSB7CgogICAgICAgICAgICAjIHN0b3JlIGdhdGhlcmVkIGluZm9ybWF0aW9uIGluIGhhc2ggZm9yIGFkZGluZwogICAgICAgICAgICAkQWN0aW9uQWRkeyRBY3Rpb25BZGRWYWx1ZX0gPSAkQ29uZGl0aW9uT2JqZWN0LT4kRmllbGRWYWx1ZSgKICAgICAgICAgICAgICAgICV7ICRBY3Rpb25EYXRhLT57JEFjdGlvbkFkZFZhbHVlfS0+eyRGaWVsZFZhbHVlfSB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFkZCBhY3Rpb24KICAgIG15ICRBY3Rpb25JRCA9ICRDb25kaXRpb25PYmplY3QtPkFjdGlvbkFkZCgKICAgICAgICAlQWN0aW9uQWRkLAogICAgICAgIENvbmRpdGlvbklEID0+ICRDb25kaXRpb25JRCwKICAgICkgfHwgMDsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQWN0aW9uSUQsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBBY3Rpb25BZGQgLT4gJEFjdGlvbklEIiwKICAgICk7CgogICAgIyBjaGVjayBmb3IgQWN0aW9uSUQKICAgIHJldHVybiBpZiAhJEFjdGlvbklEOwoKICAgICMgY2hlY2sgdGhlIGFkZGVkIGFjdGlvbgogICAgbXkgJEFjdGlvbkdldCA9ICRDb25kaXRpb25PYmplY3QtPkFjdGlvbkdldCgKICAgICAgICBBY3Rpb25JRCA9PiAkQWN0aW9uSUQsCiAgICAgICAgVXNlcklEICAgPT4gJEFjdGlvbkFkZHtVc2VySUR9LAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRBY3Rpb25HZXQsCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICcgLSBBY3Rpb25BZGQoKTogQWN0aW9uR2V0JywKICAgICk7CgogICAgIyBkZWxldGUgVXNlcklELCBpdCBpcyBub3QgcmV0dXJuZWQKICAgIGRlbGV0ZSAkQWN0aW9uQWRke1VzZXJJRH07CgogICAgIyB0ZXN0IHZhbHVlcwogICAgZm9yIG15ICRUZXN0VmFsdWUgKCBzb3J0IGtleXMgJUFjdGlvbkFkZCApIHsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRBY3Rpb25HZXQtPnskVGVzdFZhbHVlfSwKICAgICAgICAgICAgJEFjdGlvbkFkZHskVGVzdFZhbHVlfSwKICAgICAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBBY3Rpb25BZGQoKTogQWN0aW9uR2V0IC0+ICRUZXN0VmFsdWUiLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRBY3Rpb25JRDsKfQoKc3ViIF9FeHByZXNzaW9uQWRkIHsKICAgIG15ICggJEV4cHJlc3Npb25EYXRhLCAkQ29uZGl0aW9uSUQgKSA9IEBfOwogICAgbXkgJUV4cHJlc3Npb25BZGRTb3VyY2VEYXRhID0gJXskRXhwcmVzc2lvbkRhdGF9OwoKICAgIG15ICVFeHByZXNzaW9uQWRkRGF0YTsKCiAgICAjIHNldCBzdGF0aWMgZmllbGRzCiAgICBteSBAU3RhdGljRmllbGRzID0gcXcoIFNlbGVjdG9yIENvbXBhcmVWYWx1ZSBVc2VySUQgQ29uZGl0aW9uSUQgKTsKCiAgICBTVEFUSUNGSUVMRDoKICAgIGZvciBteSAkU3RhdGljRmllbGQgKEBTdGF0aWNGaWVsZHMpIHsKCiAgICAgICAgIyBvbWl0IHN0YXRpYyBmaWVsZCBpZiBpdCBpcyBub3Qgc2V0CiAgICAgICAgbmV4dCBTVEFUSUNGSUVMRCBpZiAhZXhpc3RzICRFeHByZXNzaW9uQWRkU291cmNlRGF0YXskU3RhdGljRmllbGR9CiAgICAgICAgICAgIHx8ICFkZWZpbmVkICRFeHByZXNzaW9uQWRkU291cmNlRGF0YXskU3RhdGljRmllbGR9OwoKICAgICAgICAjIHNhZmUgZGF0YQogICAgICAgICRFeHByZXNzaW9uQWRkRGF0YXskU3RhdGljRmllbGR9ID0gJEV4cHJlc3Npb25BZGRTb3VyY2VEYXRheyRTdGF0aWNGaWVsZH07CiAgICB9CgogICAgIyBnZXQgYWxsIGZpZWxkcyBmb3IgRXhwcmVzc2lvbkFkZAogICAgRVhQUkVTU0lPTkFERFZBTFVFOgogICAgZm9yIG15ICRFeHByZXNzaW9uQWRkVmFsdWUgKCBzb3J0IGtleXMgJUV4cHJlc3Npb25BZGRTb3VyY2VEYXRhICkgewoKICAgICAgICAjIG9taXQgc3RhdGljIGZpZWxkcwogICAgICAgIG5leHQgRVhQUkVTU0lPTkFERFZBTFVFIGlmIGdyZXAgeyAkXyBlcSAkRXhwcmVzc2lvbkFkZFZhbHVlIH0gQFN0YXRpY0ZpZWxkczsKCiAgICAgICAgIyBnZXQgdmFsdWVzIGZvciBmaWVsZHMKICAgICAgICBmb3IgbXkgJEZpZWxkVmFsdWUgKCBzb3J0IGtleXMgJXsgJEV4cHJlc3Npb25BZGRTb3VyY2VEYXRheyRFeHByZXNzaW9uQWRkVmFsdWV9IH0gKSB7CgogICAgICAgICAgICAjIHN0b3JlIGdhdGhlcmVkIGluZm9ybWF0aW9uIGluIGhhc2ggZm9yIGFkZGluZwogICAgICAgICAgICAkRXhwcmVzc2lvbkFkZERhdGF7JEV4cHJlc3Npb25BZGRWYWx1ZX0gPQogICAgICAgICAgICAgICAgJENvbmRpdGlvbk9iamVjdC0+JEZpZWxkVmFsdWUoCiAgICAgICAgICAgICAgICAleyAkRXhwcmVzc2lvbkFkZFNvdXJjZURhdGF7JEV4cHJlc3Npb25BZGRWYWx1ZX0tPnskRmllbGRWYWx1ZX0gfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgYWRkIGV4cHJlc3Npb24KICAgIG15ICRFeHByZXNzaW9uSUQgPSAkQ29uZGl0aW9uT2JqZWN0LT5FeHByZXNzaW9uQWRkKAogICAgICAgICVFeHByZXNzaW9uQWRkRGF0YSwKICAgICAgICBDb25kaXRpb25JRCA9PiAkQ29uZGl0aW9uSUQsCiAgICApIHx8IDA7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEV4cHJlc3Npb25JRCwKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIiAtICRFeHByZXNzaW9uSUQiLAogICAgKTsKCiAgICBuZXh0IENSRUFURURBVEEgaWYgISRFeHByZXNzaW9uSUQ7CgogICAgIyBjaGVjayB0aGUgYWRkZWQgZXhwcmVzc2lvbgogICAgbXkgJEV4cHJlc3Npb25HZXREYXRhID0gJENvbmRpdGlvbk9iamVjdC0+RXhwcmVzc2lvbkdldCgKICAgICAgICBFeHByZXNzaW9uSUQgPT4gJEV4cHJlc3Npb25JRCwKICAgICAgICBVc2VySUQgICAgICAgPT4gJEV4cHJlc3Npb25BZGREYXRhe1VzZXJJRH0sCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEV4cHJlc3Npb25HZXREYXRhLAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAnIC0gRXhwcmVzc2lvbkFkZCgpOiBFeHByZXNzaW9uR2V0JywKICAgICk7CgogICAgIyB0ZXN0IHZhbHVlcwogICAgZGVsZXRlICRFeHByZXNzaW9uQWRkRGF0YXtVc2VySUR9OwogICAgZm9yIG15ICRUZXN0VmFsdWUgKCBzb3J0IGtleXMgJUV4cHJlc3Npb25BZGREYXRhICkgewogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJEV4cHJlc3Npb25HZXREYXRhLT57JFRlc3RWYWx1ZX0sCiAgICAgICAgICAgICRFeHByZXNzaW9uQWRkRGF0YXskVGVzdFZhbHVlfSwKICAgICAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICIgLSBFeHByZXNzaW9uQWRkKCk6IEV4cHJlc3Npb25HZXQgLT4gJFRlc3RWYWx1ZSIsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJEV4cHJlc3Npb25JRDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyBxdygkU2VsZik7Cgp1c2UgRGF0YTo6RHVtcGVyOwp1c2UgTGlzdDo6VXRpbCBxdyhtYXgpOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKbXkgJFRlc3RDb3VudCA9IDE7CgojIGNyZWF0ZSBjb21tb24gb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7Cm15ICRVc2VyT2JqZWN0ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7Cm15ICRHcm91cE9iamVjdCAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpOwpteSAkVmFsaWRPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKTsKbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7Cm15ICRDaGFuZ2VPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7Cm15ICRXb3JrT3JkZXJPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyk7CgojIHRlc3QgaWYgd29ya29yZGVyIG9iamVjdCB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkKJFNlbGYtPlRydWUoCiAgICAkV29ya09yZGVyT2JqZWN0LAogICAgIlRlc3QgIiAuICRUZXN0Q291bnQrKyAuICcgLSBjb25zdHJ1Y3Rpb24gb2Ygd29ya29yZGVyIG9iamVjdCcsCik7CiRTZWxmLT5JcygKICAgIHJlZiAkV29ya09yZGVyT2JqZWN0LAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJywKICAgICJUZXN0ICIgLiAkVGVzdENvdW50KysgLiAnIC0gY2xhc3Mgb2Ygd29ya29yZGVyIG9iamVjdCcsCik7CgojIHRlc3QgaWYgY2hhbmdlIG9iamVjdCB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkKJFNlbGYtPlRydWUoCiAgICAkQ2hhbmdlT2JqZWN0LAogICAgIlRlc3QgIiAuICRUZXN0Q291bnQrKyAuICcgLSBjb25zdHJ1Y3Rpb24gb2YgY2hhbmdlIG9iamVjdCcsCik7CiRTZWxmLT5JcygKICAgIHJlZiAkQ2hhbmdlT2JqZWN0LAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJywKICAgICJUZXN0ICIgLiAkVGVzdENvdW50KysgLiAnIC0gY2xhc3Mgb2YgY2hhbmdlIG9iamVjdCcsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgY3JlYXRlIG5lZWRlZCB1c2VycwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCm15IEBVc2VySURzOyAgICAgICAgICAgICAgICMgYSBsaXN0IG9mIGV4aXN0aW5nIGFuZCB2YWxpZCB1c2VyIGlkcwpteSBASW52YWxpZFVzZXJJRHM7ICAgICAgICAjIGEgbGlzdCBvZiBleGlzdGluZyBidXQgaW52YWxpZCB1c2VyIGlkcwpteSBATm9uRXhpc3RpbmdVc2VySURzOyAgICAjIGEgbGlzdCBvZiBub24tZXhpc3Rpb24gdXNlciBpZHMKCiMgZGlzYWJsZSBlbWFpbCBjaGVja3MgdG8gY3JlYXRlIG5ldyB1c2VyCm15ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnID0gJENvbmZpZ09iamVjdC0+R2V0KCdDaGVja0VtYWlsQWRkcmVzc2VzJyk7CmlmICggIWRlZmluZWQgJENoZWNrRW1haWxBZGRyZXNzZXNPcmcgKSB7CiAgICAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZyA9IDE7Cn0KJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgVmFsdWUgPT4gMCwKKTsKCmZvciBteSAkQ291bnRlciAoIDEgLi4gMyApIHsKCiAgICAjIGNyZWF0ZSBuZXcgdXNlcnMgZm9yIHRoZSB0ZXN0cwogICAgbXkgJFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyQWRkKAogICAgICAgIFVzZXJGaXJzdG5hbWUgPT4gJ0lUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInIC4gJENvdW50ZXIsCiAgICAgICAgVXNlckxhc3RuYW1lICA9PiAnVW5pdFRlc3QnLAogICAgICAgIFVzZXJMb2dpbiAgICAgPT4gJ1VuaXRUZXN0LUlUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXItJyAuICRDb3VudGVyIC4gaW50IHJhbmQgMV8wMDBfMDAwLAogICAgICAgIFVzZXJFbWFpbCAgICAgPT4gJ1VuaXRUZXN0LUlUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXItJyAuICRDb3VudGVyIC4gJ0Bsb2NhbGhvc3QnLAogICAgICAgIFZhbGlkSUQgICAgICAgPT4gJFZhbGlkT2JqZWN0LT5WYWxpZExvb2t1cCggVmFsaWQgPT4gJ3ZhbGlkJyApLAogICAgICAgIENoYW5nZVVzZXJJRCAgPT4gMSwKICAgICk7CiAgICBwdXNoIEBVc2VySURzLCAkVXNlcklEOwp9CgojIHNvcnQgdGhlIHVzZXIgYW5kIGN1c3RvbWVyIHVzZXIgYXJyYXlzCkBVc2VySURzID0gc29ydCBAVXNlcklEczsKCiMgY3JlYXRlIG5vbiBleGlzdGluZyB1c2VyIElEcwpmb3IgKCAxIC4uIDIgKSB7CiAgICBMUEM6CiAgICBmb3IgbXkgJExvb3BQcm90ZWN0aW9uQ291bnRlciAoIDEgLi4gMTAwICkgewoKICAgICAgICAjIGNyZWF0ZSBhIHJhbmRvbSB1c2VyIGlkCiAgICAgICAgbXkgJFRlbXBOb25FeGlzdGluZ1VzZXJJRCA9IGludCByYW5kIDFfMDAwXzAwMDsKCiAgICAgICAgIyBjaGVjayBpZiByYW5kb20gdXNlciBpZCBleGlzdHMgYWxyZWFkeQogICAgICAgIG15ICVVc2VyRGF0YSA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgVXNlcklEID0+ICRUZW1wTm9uRXhpc3RpbmdVc2VySUQsCiAgICAgICAgKTsKICAgICAgICBuZXh0IExQQyBpZiAlVXNlckRhdGE7CgogICAgICAgICMgd2UgZ290IGFuIHVudXNlZCB1c2VyIElECiAgICAgICAgcHVzaCBATm9uRXhpc3RpbmdVc2VySURzLCAkVGVtcE5vbkV4aXN0aW5nVXNlcklEOwogICAgICAgIGxhc3QgTFBDOwogICAgfQp9CgojIHNldCAzcmQgdXNlciBpbnZhbGlkCiRVc2VyT2JqZWN0LT5Vc2VyVXBkYXRlKAogICAgJFVzZXJPYmplY3QtPkdldFVzZXJEYXRhKAogICAgICAgIFVzZXJJRCA9PiAkVXNlcklEc1syXSwKICAgICksCiAgICBWYWxpZElEICAgICAgPT4gJFZhbGlkT2JqZWN0LT5WYWxpZExvb2t1cCggVmFsaWQgPT4gJ2ludmFsaWQnICksCiAgICBDaGFuZ2VVc2VySUQgPT4gMSwKKTsKcHVzaCBASW52YWxpZFVzZXJJRHMsIHBvcCBAVXNlcklEczsKCiMgcmVzdG9yZSBvcmlnaW5hbCBlbWFpbCBjaGVjayBwYXJhbQokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICBWYWx1ZSA9PiAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZywKKTsKCiMgdHVybiBvZmYgU2VuZE5vdGlmaWNhdGlvbnMsIGluIG9yZGVyIHRvIGF2b2lkIGEgbG90IG9mIHVzZWxlc3MgbWFpbHMKbXkgJFNlbmROb3RpZmljYXRpb25zT3JnID0gJENvbmZpZ09iamVjdC0+R2V0KCdJVFNNQ2hhbmdlOjpTZW5kTm90aWZjYXRpb25zJyk7CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdJVFNNQ2hhbmdlOjpTZW5kTm90aWZpY2F0aW9ucycsCiAgICBWYWx1ZSA9PiAwLAopOwoKIyBzYXZlIG9yaWdpbmFsIGR5bmFtaWMgZmllbGQgY29uZmlndXJhdGlvbgpteSAkT3JpZ2luYWxEeW5hbWljRmllbGRzID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgIFZhbGlkID0+IDAsCik7CgpteSAkVW5pcXVlTmFtZVByZWZpeCA9ICdVbml0VGVzdFdvcmtvcmRlcicgLiBpbnQgcmFuZCAxXzAwMF8wMDA7CgojIGNyZWF0ZSBzb21lIGR5bmFtaWMgZmllbGRzIGZvciB3b3Jrb3JkZXJzCm15IEBEeW5hbWljRmllbGRzID0gKAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDEnLAogICAgICAgIExhYmVsICAgICAgPT4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDEnLAogICAgICAgIEZpZWxkT3JkZXIgPT4gMTAwMDAsCiAgICAgICAgRmllbGRUeXBlICA9PiAnVGV4dCcsCiAgICAgICAgT2JqZWN0VHlwZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDEnLAogICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAnRGVzY3JpcHRpb24gZm9yIER5bmFtaWMgRmllbGQuJywKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgID0+ICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QyJywKICAgICAgICBMYWJlbCAgICAgID0+ICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QyJywKICAgICAgICBGaWVsZE9yZGVyID0+IDEwMDAwLAogICAgICAgIEZpZWxkVHlwZSAgPT4gJ1RleHQnLAogICAgICAgIE9iamVjdFR5cGUgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QyJywKICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0Rlc2NyaXB0aW9uIGZvciBEeW5hbWljIEZpZWxkLicsCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgICAgICA9PiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MycsCiAgICAgICAgTGFiZWwgICAgICA9PiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MycsCiAgICAgICAgRmllbGRPcmRlciA9PiAxMDAwMCwKICAgICAgICBGaWVsZFR5cGUgID0+ICdUZXh0JywKICAgICAgICBPYmplY3RUeXBlID0+ICdJVFNNV29ya09yZGVyJywKICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICBOYW1lICAgICAgICA9PiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MycsCiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICdEZXNjcmlwdGlvbiBmb3IgRHluYW1pYyBGaWVsZC4nLAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgPT4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDQnLAogICAgICAgIExhYmVsICAgICAgPT4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDQnLAogICAgICAgIEZpZWxkT3JkZXIgPT4gMTAwMDAsCiAgICAgICAgRmllbGRUeXBlICA9PiAnVGV4dCcsCiAgICAgICAgT2JqZWN0VHlwZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDQnLAogICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAnRGVzY3JpcHRpb24gZm9yIER5bmFtaWMgRmllbGQuJywKICAgICAgICB9LAogICAgfSwKKTsKCm15IEBEeW5hbWljRmllbGRJRHM7CmZvciBteSAkVGVzdCAoQER5bmFtaWNGaWVsZHMpIHsKCiAgICAjIGFkZCBkeW5hbWljIGZpZWxkCiAgICBteSAkRHluYW1pY0ZpZWxkSUQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICAgICAgJXskVGVzdH0sCiAgICApOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICREeW5hbWljRmllbGRJRCwKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIER5bmFtaWNGaWVsZEFkZCgpIiwKICAgICk7CgogICAgIyByZW1lbWJlciBpZCB0byBkZWxldGUgaXQgbGF0ZXIKICAgIHB1c2ggQER5bmFtaWNGaWVsZElEcywgJER5bmFtaWNGaWVsZElEOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgdGVzdCBJVFNNV29ya09yZGVyIEFQSQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGRlZmluZSBwdWJsaWMgaW50ZXJmYWNlIChpbiBhbHBoYWJldGljYWwgb3JkZXIpCm15IEBPYmplY3RNZXRob2RzID0gcXcoCiAgICBQZXJtaXNzaW9uCiAgICBXb3JrT3JkZXJBZGQKICAgIFdvcmtPcmRlckF0dGFjaG1lbnRBZGQKICAgIFdvcmtPcmRlckF0dGFjaG1lbnREZWxldGUKICAgIFdvcmtPcmRlckF0dGFjaG1lbnRFeGlzdHMKICAgIFdvcmtPcmRlckF0dGFjaG1lbnRHZXQKICAgIFdvcmtPcmRlckF0dGFjaG1lbnRMaXN0CiAgICBXb3JrT3JkZXJDaGFuZ2VFZmZvcnRzR2V0CiAgICBXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0CiAgICBXb3JrT3JkZXJEZWxldGUKICAgIFdvcmtPcmRlckdldAogICAgV29ya09yZGVyTGlzdAogICAgV29ya09yZGVyUG9zc2libGVTdGF0ZXNHZXQKICAgIFdvcmtPcmRlclNlYXJjaAogICAgV29ya09yZGVyU3RhdGVJRHNDaGVjawogICAgV29ya09yZGVyU3RhdGVMb29rdXAKICAgIFdvcmtPcmRlclR5cGVMaXN0CiAgICBXb3JrT3JkZXJUeXBlTG9va3VwCiAgICBXb3JrT3JkZXJVcGRhdGUKKTsKCiMgY2hlY2sgaWYgc3VicyBhcmUgYXZhaWxhYmxlCmZvciBteSAkT2JqZWN0TWV0aG9kIChAT2JqZWN0TWV0aG9kcykgewogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFdvcmtPcmRlck9iamVjdC0+Y2FuKCRPYmplY3RNZXRob2QpLAogICAgICAgICJUZXN0ICIgLiAkVGVzdENvdW50KysgLiAiIC0gY2hlY2sgJ2NhbiAkT2JqZWN0TWV0aG9kJyIKICAgICk7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBzZWFyY2ggZm9yIGRlZmF1bHQgSVRTTVdvcmtPcmRlciBTdGF0ZXMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGRlZmluZSBkZWZhdWx0IElUU01Xb3JrT3JkZXIgU3RhdGVzCiMgY2FuJ3QgdXNlIHF3IGR1ZSB0byBzcGFjZXMgaW4gc3RhdGVzCm15IEBEZWZhdWx0V29ya09yZGVyU3RhdGVzID0gKAogICAgJ2NyZWF0ZWQnLAogICAgJ2FjY2VwdGVkJywKICAgICdyZWFkeScsCiAgICAnaW4gcHJvZ3Jlc3MnLAogICAgJ2Nsb3NlZCcsCiAgICAnY2FuY2VsZWQnLAopOwoKIyBnZXQgaXRlbSBsaXN0IG9mIHRoZSB3b3Jrb3JkZXIgc3RhdGVzIHdpdGggc3dhcHBlZCBrZXlzIGFuZCB2YWx1ZXMKbXkgJVdvcmtPcmRlclN0YXRlSUQyTmFtZSA9ICV7CiAgICAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpXb3JrT3JkZXI6OlN0YXRlJywKICAgICkgfHwge30KfTsKbXkgJVdvcmtPcmRlclN0YXRlTmFtZTJJRCAgID0gcmV2ZXJzZSAlV29ya09yZGVyU3RhdGVJRDJOYW1lOwpteSBAU29ydGVkV29ya09yZGVyU3RhdGVJRHMgPSBzb3J0IGtleXMgJVdvcmtPcmRlclN0YXRlSUQyTmFtZTsKCiMgY2hlY2sgaWYgc3RhdGVzIGFyZSBpbiBHZW5lcmFsQ2F0YWxvZwpmb3IgbXkgJERlZmF1bHRXb3JrT3JkZXJTdGF0ZSAoQERlZmF1bHRXb3JrT3JkZXJTdGF0ZXMpIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRXb3JrT3JkZXJTdGF0ZU5hbWUySUR7JERlZmF1bHRXb3JrT3JkZXJTdGF0ZX0sCiAgICAgICAgIlRlc3QgIiAuICRUZXN0Q291bnQrKyAuICIgLSBjaGVjayBzdGF0ZSAnJERlZmF1bHRXb3JrT3JkZXJTdGF0ZSciCiAgICApOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgdGVzdCB0aGUgc3RhdGUgbG9va3VwIG1ldGhvZAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGludmVzdGlnYXRlIHRoZSBkZWZhdWx0IHN0YXRlcwpmb3IgbXkgJFN0YXRlIChARGVmYXVsdFdvcmtPcmRlclN0YXRlcykgewoKICAgICMgbG9vayB1cCB0aGUgc3RhdGUgbmFtZQogICAgbXkgJExvb2tlZFVwU3RhdGVJRCA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclN0YXRlTG9va3VwKAogICAgICAgIFdvcmtPcmRlclN0YXRlID0+ICRTdGF0ZSwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRMb29rZWRVcFN0YXRlSUQsCiAgICAgICAgJFdvcmtPcmRlclN0YXRlTmFtZTJJRHskU3RhdGV9LAogICAgICAgICJMb29rIHVwIHN0YXRlICckU3RhdGUnIiwKICAgICk7CgogICAgIyBkbyB0aGUgcmV2ZXJzZSBsb29rdXAKICAgIG15ICRMb29rZWRVcFN0YXRlID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyU3RhdGVMb29rdXAoCiAgICAgICAgV29ya09yZGVyU3RhdGVJRCA9PiAkTG9va2VkVXBTdGF0ZUlELAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJExvb2tlZFVwU3RhdGUsCiAgICAgICAgJFN0YXRlLAogICAgICAgICJMb29rIHVwIHN0YXRlIGlkICckTG9va2VkVXBTdGF0ZUlEJyIsCiAgICApOwp9CgojIG5vdyBzb21lIHBhcmFtIGNoZWNrcwpteSAkTG9va3VwT0sgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJTdGF0ZUxvb2t1cCgpOwoKJFNlbGYtPkZhbHNlKAogICAgJExvb2t1cE9LLAogICAgJ05vIHBhcmFtcyBwYXNzZWQgdG8gV29ya09yZGVyU3RhdGVMb29rdXAoKScsCik7CgokTG9va3VwT0sgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJTdGF0ZUxvb2t1cCgKICAgIFdvcmtPcmRlclN0YXRlICAgPT4gJ2FwcHJvdmVkJywKICAgIFdvcmtPcmRlclN0YXRlSUQgPT4gMiwKKTsKCiRTZWxmLT5GYWxzZSgKICAgICRMb29rdXBPSywKICAgICdFeGNsdXNpdmUgcGFyYW1zIHBhc3NlZCB0byBXb3JrT3JkZXJTdGF0ZUxvb2t1cCgpJywKKTsKCiRMb29rdXBPSyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclN0YXRlTG9va3VwKAogICAgU3RhdGUgPT4gJ2FwcHJvdmVkJywKKTsKCiRTZWxmLT5GYWxzZSgKICAgICRMb29rdXBPSywKICAgICJJbmNvcnJlY3QgcGFyYW0gJ1N0YXRlJyBwYXNzZWQgdG8gV29ya09yZGVyU3RhdGVMb29rdXAoKSIsCik7CgokTG9va3VwT0sgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJTdGF0ZUxvb2t1cCgKICAgIFN0YXRlSUQgPT4gMiwKKTsKCiRTZWxmLT5GYWxzZSgKICAgICRMb29rdXBPSywKICAgICJJbmNvcnJlY3QgcGFyYW0gJ1N0YXRlSUQnIHBhc3NlZCB0byBXb3JrT3JkZXJTdGF0ZUxvb2t1cCgpIiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBzZWFyY2ggZm9yIGRlZmF1bHQgSVRTTVdvcmtPcmRlci10eXBlcwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZGVmaW5lIGRlZmF1bHQgSVRTTVdvcmtPcmRlci1zdGF0ZXMKIyBjYW4ndCB1c2UgcXcgZHVlIHRvIHNwYWNlcyBpbiB0eXBlcwpteSBARGVmYXVsdFdvcmtPcmRlclR5cGVzID0gKAogICAgJ2FwcHJvdmFsJywKICAgICd3b3Jrb3JkZXInLAogICAgJ2JhY2tvdXQnLAogICAgJ2RlY2lzaW9uJywKICAgICdwaXInLAopOwoKIyBnZXQgY2xhc3MgbGlzdCB3aXRoIHN3YXBwZWQga2V5cyBhbmQgdmFsdWVzCm15ICVXb3JrT3JkZXJUeXBlSUQyTmFtZSA9ICV7CiAgICAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpXb3JrT3JkZXI6OlR5cGUnLAogICAgKSB8fCB7fQp9OwpteSAlV29ya09yZGVyVHlwZU5hbWUySUQgPSByZXZlcnNlICVXb3JrT3JkZXJUeXBlSUQyTmFtZTsKbXkgQFNvcnRlZFR5cGVJRHMgICAgICAgID0gc29ydCBrZXlzICVXb3JrT3JkZXJUeXBlSUQyTmFtZTsKCiMgY2hlY2sgaWYgdHlwZXMgYXJlIGluIEdlbmVyYWxDYXRhbG9nCmZvciBteSAkRGVmYXVsdFdvcmtPcmRlclR5cGUgKEBEZWZhdWx0V29ya09yZGVyVHlwZXMpIHsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRXb3JrT3JkZXJUeXBlTmFtZTJJRHskRGVmYXVsdFdvcmtPcmRlclR5cGV9LAogICAgICAgICJUZXN0ICIgLiAkVGVzdENvdW50KysgLiAiIC0gY2hlY2sgdHlwZSAnJERlZmF1bHRXb3JrT3JkZXJUeXBlJyIKICAgICk7Cn0KCiMgdGVzdCBsb29rdXAgbWV0aG9kCmZvciBteSAkRGVmYXVsdFdvcmtPcmRlclR5cGUgKEBEZWZhdWx0V29ya09yZGVyVHlwZXMpIHsKICAgIG15ICRUeXBlSUQgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJUeXBlTG9va3VwKAogICAgICAgIFdvcmtPcmRlclR5cGUgPT4gJERlZmF1bHRXb3JrT3JkZXJUeXBlLAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFR5cGVJRCwKICAgICAgICAkV29ya09yZGVyVHlwZU5hbWUySUR7JERlZmF1bHRXb3JrT3JkZXJUeXBlfSwKICAgICAgICAiTG9va3VwICREZWZhdWx0V29ya09yZGVyVHlwZSIsCiAgICApOwoKICAgIG15ICRUeXBlTmFtZSA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclR5cGVMb29rdXAoCiAgICAgICAgV29ya09yZGVyVHlwZUlEID0+ICRUeXBlSUQsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkVHlwZU5hbWUsCiAgICAgICAgJERlZmF1bHRXb3JrT3JkZXJUeXBlLAogICAgICAgICJMb29rdXAgJFR5cGVJRCIsCiAgICApOwp9CgojIHRlc3QgdGhlIG1ldGhvZCBXb3JrT3JkZXJUeXBlTGlzdCgpLiBJdCBzaG91bGQgcmV0dXJuIGEgbGlzdCBvZiBhbGwgdHlwZXMuCm15ICRUeXBlc0xpc3RVbmRlclRlc3QgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJUeXBlTGlzdCgKICAgIFVzZXJJRCA9PiAxLAopIHx8IHt9OwoKIyBkbyB0aGUgY2hlY2tzCmZvciBteSAkVHlwZUlEIChAU29ydGVkVHlwZUlEcykgewogICAgbXkgKCAkRmlyc3RIYXNoUmVmLCAkU2Vjb25kSGFzaFJlZiApID0gZ3JlcCB7ICRfLT57S2V5fSA9PSAkVHlwZUlEIH0gQHskVHlwZXNMaXN0VW5kZXJUZXN0fTsKCiAgICAjIGEgbWF0Y2ggaXMgZXhwZWN0ZWQKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRGaXJzdEhhc2hSZWYsCiAgICAgICAgIkNoZWNrIGZvciB0eXBlIGlkICRUeXBlSUQiLAogICAgKTsKCiAgICAjIHRoZSBuYW1lIHNob3VsZCBhbHNvIG1hdGNoCiAgICAkRmlyc3RIYXNoUmVmIHx8PSB7fTsKICAgIG15ICRUeXBlTmFtZSA9ICRXb3JrT3JkZXJUeXBlSUQyTmFtZXskVHlwZUlEfTsKICAgICRTZWxmLT5JcygKICAgICAgICAkRmlyc3RIYXNoUmVmLT57VmFsdWV9LAogICAgICAgICRUeXBlTmFtZSwKICAgICAgICAiQ2hlY2sgZm9yIHR5cGUgbmFtZSAkVHlwZUlEIiwKICAgICk7CgogICAgIyBvbmx5IG9uZSBtYXRjaCBpcyBleHBlY3RlZAogICAgJFNlbGYtPkZhbHNlKAogICAgICAgICRTZWNvbmRIYXNoUmVmLAogICAgICAgICJDaGVjayB0aGF0IHRoZSB0eXBlIGlkICRUeXBlSUQgaXMgcmV0dXJuZWQgb25seSBvbmNlLiIsCiAgICApOwoKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIERlZmluZSB0aGUgY2hhbmdlcyB0aGF0IGFyZSBuZWVkZWQgZm9yIHRlc3Rpbmcgd29ya29yZGVycwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIHN0b3JlIGN1cnJlbnQgVGVzdENvdW50IGZvciBiZXR0ZXIgdGVzdCBjYXNlIHJlY29nbml0aW9uCm15ICRUZXN0Q291bnRNaXNjID0gJFRlc3RDb3VudDsKCiMgQW4gdW5pcXVlIGluZGVudGlmaWVyLCBzbyB0aGF0IGRhdGEgZnJvbSBkaWZmZXJlbnQgdGVzdCBydW5zCiMgd29uJ3QgYmUgbWl4ZWQgdXAuIFRoZSBzdHJpbmcgaXMgZm9ybWF0ZWQgdG8gYSBjb25zdGFudCBsZW5ndGgsCiMgYXMgdGhlIGNvbnZlcnNpb24gdG8gcGxhaW4gdGV4dCB3aXRoIFRvQXNjaWkoKSBkZXBlbmRzIG9uIHRoZSBzdHJpbmcgbGVuZ3RoLgpteSAkVW5pcXVlU2lnbmF0dXJlID0gc3ByaW50ZiAnVW5pdFRlc3QtSVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlci0lMDZkLSUwMTBkJywKICAgIGludCggcmFuZCAxXzAwMF8wMDAgKSwKICAgIHRpbWUoKTsKCm15IEBDaGFuZ2VUZXN0cyA9ICgKCiAgICAjIGEgY2hhbmdlIGZvciBnZW5lcmFsIHdvcmtvcmRlciB0ZXN0aW5nCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZSBmb3IgZ2VuZXJhbCB0ZXN0aW5nIG9mIHdvcmtvcmRlcnMuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAnQ2hhbmdlIDEgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdDaGFuZ2UgMSAtIFRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhIGNoYW5nZSBmb3IgT3JkZXJCeSB3b3Jrb3JkZXIgc2VhcmNoZXMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlIGZvciB0ZXN0aW5nIE9yZGVyQnkgd29ya29yZGVyIHNlYXJjaGVzLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ0NoYW5nZSAyIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIENoYW5nZUdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAnQ2hhbmdlIDIgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgYSBjaGFuZ2UgZm9yIHRlc3Rpbmcgc3RyaW5nIHNlYXJjaGVzIGluIHRoZSBhc3NvY2lhdGVkIGNoYW5nZQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdDaGFuZ2UgZm9yIHRlc3Rpbmcgc3RyaW5nIHNlYXJjaGVzIGluIGNoYW5nZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJ0NoYW5nZSAzIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ0NoYW5nZSAzIC0gRGVzY3JpcHRpb24gLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ0NoYW5nZSAzIC0gSnVzdGlmaWNhdGlvbiAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAnQ2hhbmdlIDMgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnQ2hhbmdlIDMgLSBEZXNjcmlwdGlvbiAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAnQ2hhbmdlIDMgLSBKdXN0aWZpY2F0aW9uIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBhIGNoYW5nZSBmb3IgdGVzdGluZyB0aW1lIHNlYXJjaGVzIGluIHdvcmtvcmRlcnMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlIGZvciB0ZXN0aW5nIHRpbWUgc2VhcmNoZXMgaW4gd29ya29yZGVycyAuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAnQ2hhbmdlIDQgZm9yIHRlc3RpbmcgdGltZSBzZWFyY2hlcyBpbiB3b3Jrb3JkZXIgLSBUaXRsZSAtICcKICAgICAgICAgICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICdDaGFuZ2UgNCBmb3IgdGVzdGluZyB0aW1lIHNlYXJjaGVzIGluIHdvcmtvcmRlciAtIFRpdGxlIC0gJwogICAgICAgICAgICAgICAgICAgIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIGEgY2hhbmdlIGZvciB0ZXN0aW5nIHRoZSBQZXJtaXNzaW9uKCkgbWV0aG9kCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0NoYW5nZSBmb3IgdGVzdGluZyB0aGUgUGVybWlzc2lvbigpIG1ldGhvZCcsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ0NoYW5nZSA1IGZvciB0ZXN0aW5nIHRoZSBQZXJtaXNzaW9uKCkgbWV0aG9kJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ0NoYW5nZSA1IGZvciB0ZXN0aW5nIHRoZSBQZXJtaXNzaW9uKCkgbWV0aG9kJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIENoYW5nZUNBQkdldCA9PiB7CiAgICAgICAgICAgICAgICBDQUJBZ2VudHMgPT4gWwogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIENBQkN1c3RvbWVycyA9PiBbCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIENyZWF0ZSB0aGUgY2hhbmdlcyB0aGF0IGFyZSBuZWVkZWQgZm9yIHRlc3Rpbmcgd29ya29yZGVycwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGNoYW5nZSBpZHMgb2YgY3JlYXRlZCBjaGFuZ2VzCm15ICVUZXN0ZWRDaGFuZ2VJRDsKClRFU1Q6CmZvciBteSAkVGVzdCAoQENoYW5nZVRlc3RzKSB7CgogICAgIyBjaGVjayBTb3VyY2VEYXRhIGF0dHJpYnV0ZQogICAgaWYgKCAhJFRlc3QtPntTb3VyY2VEYXRhfSB8fCByZWYgJFRlc3QtPntTb3VyY2VEYXRhfSBuZSAnSEFTSCcgKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAwLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBObyBTb3VyY2VEYXRhIGZvdW5kIGZvciB0aGlzIHRlc3QgKHRlc3QgY2FzZTogIgogICAgICAgICAgICAgICAgLiAoICRUZXN0Q291bnQgLSAkVGVzdENvdW50TWlzYyApIC4gIikuIiwKICAgICAgICApOwoKICAgICAgICBuZXh0IFRFU1Q7CiAgICB9CgogICAgIyBwcmludCB0ZXN0IGNhc2UgZGVzY3JpcHRpb24KICAgIGlmICggJFRlc3QtPntEZXNjcmlwdGlvbn0gKSB7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6ICRUZXN0LT57RGVzY3JpcHRpb259ICh0ZXN0IGNhc2U6ICIKICAgICAgICAgICAgICAgIC4gKCAkVGVzdENvdW50IC0gJFRlc3RDb3VudE1pc2MgKSAuICIpLiIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGV4dHJhY3QgdGVzdCBkYXRhCiAgICBteSAkU291cmNlRGF0YSAgICA9ICRUZXN0LT57U291cmNlRGF0YX07CiAgICBteSAkUmVmZXJlbmNlRGF0YSA9ICRUZXN0LT57UmVmZXJlbmNlRGF0YX07CgogICAgIyB0aGUgY2hhbmdlIGlkIHdpbGwgYmUgdXNlZCBmb3Igc2V2ZXJhbCBjYWxscwogICAgbXkgJENoYW5nZUlEOwoKICAgICMgYWRkIGEgbmV3IGNoYW5nZQogICAgaWYgKCAkU291cmNlRGF0YS0+e0NoYW5nZUFkZH0gKSB7CgogICAgICAgICMgYWRkIHRoZSBjaGFuZ2UKICAgICAgICAkQ2hhbmdlSUQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgICAgICV7ICRTb3VyY2VEYXRhLT57Q2hhbmdlQWRkfSB9CiAgICAgICAgKTsKCiAgICAgICAgIyByZW1lbWJlciBjdXJyZW50IENoYW5nZUlECiAgICAgICAgaWYgKCRDaGFuZ2VJRCkgewogICAgICAgICAgICAkVGVzdGVkQ2hhbmdlSUR7JENoYW5nZUlEfSA9IDE7CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDaGFuZ2VBZGQoKSAtIEFkZCBjaGFuZ2UuIiwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGEgY2hhbmdlIGFuZCBjb21wYXJlIHRoZSByZXRyaWV2ZWQgZGF0YSB3aXRoIHRoZSByZWZlcmVuY2UKICAgIGlmICggZXhpc3RzICRSZWZlcmVuY2VEYXRhLT57Q2hhbmdlR2V0fSApIHsKCiAgICAgICAgbXkgJENoYW5nZUdldFJlZmVyZW5jZURhdGEgPSAkUmVmZXJlbmNlRGF0YS0+e0NoYW5nZUdldH07CgogICAgICAgIG15ICRDaGFuZ2VEYXRhID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBDaGFuZ2VHZXQgc2hvdWxkIG5vdCByZXR1cm4gYW55dGhpbmcKICAgICAgICBpZiAoICFkZWZpbmVkICRSZWZlcmVuY2VEYXRhLT57Q2hhbmdlR2V0fSApIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJENoYW5nZURhdGEsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBHZXQgY2hhbmdlIHJldHVybnMgdW5kZWYuIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgd2UgZXhjcGVjdGVkIHRvIGZhaWwKICAgICAgICAgICAgaWYgKCAkVGVzdC0+e0ZhaWxzfSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAhZGVmaW5lZCAkQ2hhbmdlRGF0YSwKICAgICAgICAgICAgICAgICAgICAhZGVmaW5lZCAkUmVmZXJlbmNlRGF0YS0+e0NoYW5nZURhdGF9LAogICAgICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIFNob3VsZCBmYWlsLiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5leHQgVEVTVDsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIGFsd2F5cyBleGlzdGluZyBhdHRyaWJ1dGVzCiAgICAgICAgZm9yIG15ICRDaGFuZ2VBdHRyaWJ1dGVzICgKICAgICAgICAgICAgcXcoQ2hhbmdlSUQgQ2hhbmdlTnVtYmVyIENoYW5nZUJ1aWxkZXJJRCBDcmVhdGVUaW1lIENoYW5nZVRpbWUpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJENoYW5nZURhdGEtPnskQ2hhbmdlQXR0cmlidXRlc30sCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBoYXMgJENoYW5nZUF0dHJpYnV0ZXMuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGZvciBteSAkUmVxdWVzdGVkQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRSZWZlcmVuY2VEYXRhLT57Q2hhbmdlR2V0fSB9ICkgewoKICAgICAgICAgICAgIyB0dXJuIG9mZiBhbGwgcHJldHR5IHByaW50CiAgICAgICAgICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OkluZGVudCA9IDA7CiAgICAgICAgICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OlVzZXFxICA9IDE7CgogICAgICAgICAgICAjIGR1bXAgdGhlIGF0dHJpYnV0ZSBmcm9tIENoYW5nZUdldCgpIGFuZCB0aGUgcmVmZXJlbmNlIGF0dHJpYnV0ZQogICAgICAgICAgICAjIyBubyBjcml0aWMKICAgICAgICAgICAgbXkgJENoYW5nZUF0dHJpYnV0ZSA9IERhdGE6OkR1bXBlcjo6RHVtcGVyKCAkQ2hhbmdlRGF0YS0+eyRSZXF1ZXN0ZWRBdHRyaWJ1dGV9ICk7ICAgICMjIG5vIGNyaXRpYwogICAgICAgICAgICBteSAkUmVmZXJlbmNlQXR0cmlidXRlID0gRGF0YTo6RHVtcGVyOjpEdW1wZXIoICRSZWZlcmVuY2VEYXRhLT57Q2hhbmdlR2V0fS0+eyRSZXF1ZXN0ZWRBdHRyaWJ1dGV9ICkKICAgICAgICAgICAgICAgIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIG5vIGNyaXRpYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1c2UgY3JpdGljCgogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkQ2hhbmdlQXR0cmlidXRlLAogICAgICAgICAgICAgICAgJFJlZmVyZW5jZUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtICRSZWZlcmVuY2VBdHRyaWJ1dGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0gICAgIyBlbmQgaWYgJ0NoYW5nZUdldCcKfQpjb250aW51ZSB7CgogICAgIyBpbmNyZWFzZSB0aGUgdGVzdCBjb3VudCwgZXZlbiBvbiBuZXh0CiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBEZWZpbmUgdGhlIHdvcmtvcmRlciB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCm15ICgKICAgICRXb3JrT3JkZXJBZGRUZXN0SUQsICRPcmRlckJ5VGVzdElELCAkU3RyaW5nU2VhcmNoVGVzdElELAogICAgJFRpbWVTZWFyY2hUZXN0SUQsICRQZXJtaXNzaW9uVGVzdElECikgPSBzb3J0IGtleXMgJVRlc3RlZENoYW5nZUlEOwoKIyB0ZXN0cyB3aXRoIG9ubHkgV29ya09yZGVyQWRkKCk7Cm15IEBXb3JrT3JkZXJUZXN0cyA9ICgKCiAgICAjIFRlc3RzIHdoZXJlIHRoZSB3b3Jrb3JkZXIgZG9lc24ndCBjb250YWluIGFsbCBkYXRhIChyZXF1aXJlZCBhdHRyaWJ1dGVzKQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGNvbnRhaW5zIG5vIHBhcmFtcyBmb3IgV29ya09yZGVyQWRkKCkuJywKICAgICAgICBGYWlscyAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSBleHBlY3QgdGhpcyB0ZXN0IHRvIGZhaWwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7fSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlcklEIGFuZCBDaGFuZ2VJRCBhcmUgbWlzc2luZwogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB1bmRlZiwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBjb250YWlucyBubyBVc2VySUQgZm9yIFdvcmtPcmRlckFkZCgpLicsCiAgICAgICAgRmFpbHMgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2UgZXhwZWN0IHRoaXMgdGVzdCB0byBmYWlsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFVzZXJJRCBpcyBtaXNzaW5nCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB1bmRlZiwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBjb250YWlucyBubyBDaGFuZ2VJRCBmb3IgV29ya09yZGVyQWRkKCkuJywKICAgICAgICBGYWlscyAgICAgICA9PiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdlIGV4cGVjdCB0aGlzIHRlc3QgdG8gZmFpbAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENoYW5nZUlEIGlzIG1pc3NpbmcKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB1bmRlZiwKICAgICAgICB9LAogICAgfSwKCiAgICAjIEZpcnN0IHRlc3Qgb2YgV29ya09yZGVyQWRkKCkgd2l0aCBhbGwgcmVxdWlyZWQgYXJndW1lbnRzLgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGNvbnRhaW5zIENoYW5nZUlEIGFuZCBDaGFuZ2VJRCBmb3IgV29ya09yZGVyQWRkKCkuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWyAyLCA4IF0sCiAgICB9LAoKICAgICMgRmlyc3QgdGVzdCBvZiBXb3JrT3JkZXJBZGQoKSB3aXRoIGFsbCByZXF1aXJlZCBhcmd1bWVudHMsIG5vdCBVc2VySUQgPT4gMS4KICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAnVGVzdCBjb250YWlucyBDaGFuZ2VJRCBhbmQgQ2hhbmdlSUQgZm9yIFdvcmtPcmRlckFkZCgpLCBvdGhlciB1c2VyIHRoYW4gVXNlcklEID0+IDEuJywKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgPT4gJFVzZXJJRHNbMF0KICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWyAyLCA4IF0sCiAgICB9LAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnV29ya09yZGVyQWRkKCkgd2l0aCBzdHJpbmcgcGFyYW1ldGVycy4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJ1dvcmtPcmRlciAxIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uICAgID0+ICdXb3JrT3JkZXIgMSAtIEluc3RydWN0aW9uIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBSZXBvcnQgICAgICAgICA9PiAnV29ya09yZGVyIDEgLSBSZXBvcnQgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgICA9PiAnV29ya09yZGVyIDEgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgICA9PiAnV29ya09yZGVyIDEgLSBJbnN0cnVjdGlvbiAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb25QbGFpbiA9PiAiV29ya09yZGVyIDEgLSBJbnN0cnVjdGlvbiAtXG4kVW5pcXVlU2lnbmF0dXJlXG4iLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgICA9PiAnV29ya09yZGVyIDEgLSBSZXBvcnQgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIFJlcG9ydFBsYWluICAgICAgPT4gJ1dvcmtPcmRlciAxIC0gUmVwb3J0IC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgMiwgMywgNCwgNSwgNiwgOCwgMTEgXSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdXb3Jrb3JkZXIgY29udGFpbnMgSFRNTCBpbnN0cnVjdGlvbiBhbmQgcmVwb3J0JywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uID0+ICc8Yj5UaGlzIGluc3RydWN0aW9uIDx1PmlzPC91PiBib2xkPC9iPiAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgPT4gJzxiPlRoaXMgcmVwb3J0IDx1PmlzPC91PiBib2xkPC9iPiAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICcnLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgICA9PiAnPGI+VGhpcyBpbnN0cnVjdGlvbiA8dT5pczwvdT4gYm9sZDwvYj4gLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uUGxhaW4gPT4gIlRoaXMgaW5zdHJ1Y3Rpb24gaXMgYm9sZCAtXG4kVW5pcXVlU2lnbmF0dXJlXG4iLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgICA9PiAnPGI+VGhpcyByZXBvcnQgPHU+aXM8L3U+IGJvbGQ8L2I+IC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBSZXBvcnRQbGFpbiAgICAgID0+ICdUaGlzIHJlcG9ydCBpcyBib2xkIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsyXSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdXb3JrT3JkZXJBZGQoKSB3aXRoIFdvcmtPcmRlclN0YXRlSUQuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICAgID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZUlEID0+ICRXb3JrT3JkZXJTdGF0ZU5hbWUySUR7cmVhZHl9LAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgICA9PiAnV29ya09yZGVyQWRkIHdpdGggV29ya09yZGVyU3RhdGVJRCAtIFRpdGxlIC0gJwogICAgICAgICAgICAgICAgICAgIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uID0+ICdXb3JrT3JkZXJBZGQgd2l0aCBXb3JrT3JkZXJTdGF0ZUlEIC0gSW5zdHJ1Y3Rpb24gLSAnCiAgICAgICAgICAgICAgICAgICAgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgUmVwb3J0ID0+ICdXb3JrT3JkZXJBZGQgd2l0aCBXb3JrT3JkZXJTdGF0ZUlEIC0gUmVwb3J0IC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlSUQgPT4gJFdvcmtPcmRlclN0YXRlTmFtZTJJRHtyZWFkeX0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICdXb3JrT3JkZXJBZGQgd2l0aCBXb3JrT3JkZXJTdGF0ZUlEIC0gVGl0bGUgLSAnCiAgICAgICAgICAgICAgICAgICAgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gPT4gJ1dvcmtPcmRlckFkZCB3aXRoIFdvcmtPcmRlclN0YXRlSUQgLSBJbnN0cnVjdGlvbiAtICcKICAgICAgICAgICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBSZXBvcnQgPT4gJ1dvcmtPcmRlckFkZCB3aXRoIFdvcmtPcmRlclN0YXRlSUQgLSBSZXBvcnQgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWyAyLCA4LCAyNywgMjggXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1dvcmtPcmRlckFkZCgpIHdpdGggV29ya09yZGVyVHlwZUlELicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICAgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclR5cGVJRCA9PiAkV29ya09yZGVyVHlwZU5hbWUySUR7YXBwcm92YWx9LAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgID0+ICdXb3JrT3JkZXJBZGQgd2l0aCBXb3JrT3JkZXJUeXBlSUQgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgID0+ICdXb3JrT3JkZXJBZGQgd2l0aCBXb3JrT3JkZXJUeXBlSUQgLSBJbnN0cnVjdGlvbiAtICcKICAgICAgICAgICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBSZXBvcnQgPT4gJ1dvcmtPcmRlckFkZCB3aXRoIFdvcmtPcmRlclR5cGVJRCAtIFJlcG9ydCAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICAgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclR5cGVJRCA9PiAkV29ya09yZGVyVHlwZU5hbWUySUR7YXBwcm92YWx9LAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgID0+ICdXb3JrT3JkZXJBZGQgd2l0aCBXb3JrT3JkZXJUeXBlSUQgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgID0+ICdXb3JrT3JkZXJBZGQgd2l0aCBXb3JrT3JkZXJUeXBlSUQgLSBJbnN0cnVjdGlvbiAtICcKICAgICAgICAgICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBSZXBvcnQgPT4gJ1dvcmtPcmRlckFkZCB3aXRoIFdvcmtPcmRlclR5cGVJRCAtIFJlcG9ydCAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDIsIDgsIDEzLCAyMywgMjQgXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1dvcmtPcmRlckFkZCgpIHdpdGggV29ya09yZGVyVHlwZUlEIGFuZCBXb3JrT3JkZXJTdGF0ZUlELicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgV29ya09yZGVyVHlwZUlEICA9PiAkV29ya09yZGVyVHlwZU5hbWUySUR7cGlyfSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlSUQgPT4gJFdvcmtPcmRlclN0YXRlTmFtZTJJRHtjbG9zZWR9LAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4KICAgICAgICAgICAgICAgICAgICAnV29ya09yZGVyQWRkIHdpdGggV29ya09yZGVyVHlwZUlEIGFuZCBXb3JrT3JkZXJTdGF0ZUlEIC0gVGl0bGUgLSAnCiAgICAgICAgICAgICAgICAgICAgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gPT4KICAgICAgICAgICAgICAgICAgICAnV29ya09yZGVyQWRkIHdpdGggV29ya09yZGVyVHlwZUlEIGFuZCBXb3JrT3JkZXJTdGF0ZUlEIC0gSW5zdHJ1Y3Rpb24gLSAnCiAgICAgICAgICAgICAgICAgICAgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgUmVwb3J0ID0+ICdXb3JrT3JkZXJBZGQgd2l0aCBXb3JrT3JkZXJUeXBlSUQgYW5kIFdvcmtPcmRlclN0YXRlSUQgLSBSZXBvcnQgLSAnCiAgICAgICAgICAgICAgICAgICAgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICAgID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUeXBlSUQgID0+ICRXb3JrT3JkZXJUeXBlTmFtZTJJRHtwaXJ9LAogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGVJRCA9PiAkV29ya09yZGVyU3RhdGVOYW1lMklEe2Nsb3NlZH0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PgogICAgICAgICAgICAgICAgICAgICdXb3JrT3JkZXJBZGQgd2l0aCBXb3JrT3JkZXJUeXBlSUQgYW5kIFdvcmtPcmRlclN0YXRlSUQgLSBUaXRsZSAtICcKICAgICAgICAgICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiA9PgogICAgICAgICAgICAgICAgICAgICdXb3JrT3JkZXJBZGQgd2l0aCBXb3JrT3JkZXJUeXBlSUQgYW5kIFdvcmtPcmRlclN0YXRlSUQgLSBJbnN0cnVjdGlvbiAtICcKICAgICAgICAgICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBSZXBvcnQgPT4gJ1dvcmtPcmRlckFkZCB3aXRoIFdvcmtPcmRlclR5cGVJRCBhbmQgV29ya09yZGVyU3RhdGVJRCAtIFJlcG9ydCAtICcKICAgICAgICAgICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgMiwgOCwgMTMsIDIzLCAyNCwgMjcsIDI4IF0sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICdXb3JrT3JkZXJBZGQoKSBhbmQgV29ya09yZGVyVXBkYXRlKCkgd2l0aCBXb3JrT3JkZXJUeXBlSUQgYW5kIFdvcmtPcmRlclN0YXRlSUQuJywKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclR5cGVJRCAgPT4gJFdvcmtPcmRlclR5cGVOYW1lMklEe3Bpcn0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZUlEID0+ICRXb3JrT3JkZXJTdGF0ZU5hbWUySUR7J2luIHByb2dyZXNzJ30sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICdXb3JrT3JkZXJBZGQgd2l0aCBXb3JrT3JkZXJTdGF0ZUlEIC0gVGl0bGUgLSAnCiAgICAgICAgICAgICAgICAgICAgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gPT4gJ1dvcmtPcmRlckFkZCB3aXRoIFdvcmtPcmRlclN0YXRlSUQgLSBJbnN0cnVjdGlvbiAtICcKICAgICAgICAgICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBSZXBvcnQgPT4gJ1dvcmtPcmRlckFkZCB3aXRoIFdvcmtPcmRlclN0YXRlSUQgLSBSZXBvcnQgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclR5cGVJRCAgPT4gJFdvcmtPcmRlclR5cGVOYW1lMklEe2RlY2lzaW9ufSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlSUQgPT4gJFdvcmtPcmRlclN0YXRlTmFtZTJJRHtjYW5jZWxlZH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclR5cGVJRCAgPT4gJFdvcmtPcmRlclR5cGVOYW1lMklEe2RlY2lzaW9ufSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlSUQgPT4gJFdvcmtPcmRlclN0YXRlTmFtZTJJRHtjYW5jZWxlZH0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICdXb3JrT3JkZXJBZGQgd2l0aCBXb3JrT3JkZXJTdGF0ZUlEIC0gVGl0bGUgLSAnCiAgICAgICAgICAgICAgICAgICAgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gPT4gJ1dvcmtPcmRlckFkZCB3aXRoIFdvcmtPcmRlclN0YXRlSUQgLSBJbnN0cnVjdGlvbiAtICcKICAgICAgICAgICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBSZXBvcnQgPT4gJ1dvcmtPcmRlckFkZCB3aXRoIFdvcmtPcmRlclN0YXRlSUQgLSBSZXBvcnQgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWyAyLCA4IF0sCiAgICB9LAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnV29ya09yZGVyQWRkKCkgd2l0aCBlbXB0eSBzdHJpbmcgcGFyYW1ldGVycy4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJycsCiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiAgICA9PiAnJywKICAgICAgICAgICAgICAgIFJlcG9ydCAgICAgICAgID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJycsCiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiAgICA9PiAnJywKICAgICAgICAgICAgICAgIFJlcG9ydCAgICAgICAgID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDIsIDggXSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciBTdGF0ZXMgKG5vIGlkcykgaW4gV09BZGQoKScsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnV29ya09yZGVyU3RhdGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlID0+ICdjbG9zZWQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICAgID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICdXb3JrT3JkZXJTdGF0ZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGUgICA9PiAnY2xvc2VkJywKICAgICAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlSUQgPT4gJFdvcmtPcmRlclN0YXRlTmFtZTJJRHtjbG9zZWR9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDI3LCAyOCBdLAogICAgfSwKCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZm9yIGludmFsaWQgc3RhdGUgbmFtZXMgaW4gV09BZGQoKSBhbmQgV09VcGRhdGUoKScsCiAgICAgICAgVXBkYXRlRmFpbHMgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdXb3JrT3JkZXJTdGF0ZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGUgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFdvcmtPcmRlclVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZSA9PiAnY2FuY2VsZWQnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJHZXQgPT4gewogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgICA9PiAnV29ya09yZGVyU3RhdGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlICAgPT4gJ2Nsb3NlZCcsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZUlEID0+ICRXb3JrT3JkZXJTdGF0ZU5hbWUySUR7Y2xvc2VkfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWyAyNywgMjggXSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciB2YWxpZCBzdGF0ZSBuYW1lcyBpbiBXT0FkZCgpIGFuZCBXT1VwZGF0ZSgpJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdXb3JrT3JkZXJTdGF0ZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGUgPT4gJ2luIHByb2dyZXNzJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlID0+ICdjYW5jZWxlZCcsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICAgID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICdXb3JrT3JkZXJTdGF0ZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGUgICA9PiAnY2FuY2VsZWQnLAogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGVJRCA9PiAkV29ya09yZGVyU3RhdGVOYW1lMklEe2NhbmNlbGVkfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZm9yIFR5cGVzIChubyBpZHMpIGluIFdPQWRkKCknLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJ1dvcmtPcmRlclR5cGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclR5cGUgID0+ICdwaXInLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgID0+ICdXb3JrT3JkZXJUeXBlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUeXBlICAgPT4gJ3BpcicsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUeXBlSUQgPT4gJFdvcmtPcmRlclR5cGVOYW1lMklEe3Bpcn0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgMTMsIDIzLCAyNCBdLAogICAgfSwKCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZm9yIFR5cGVzIChubyBpZHMpIGluIFdPQWRkKCkgYW5kIFdPVXBkYXRlKCknLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJ1dvcmtPcmRlclR5cGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclR5cGUgID0+ICdwaXInLAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgV29ya09yZGVyVHlwZSA9PiAnZGVjaXNpb24nLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICAgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgPT4gJ1dvcmtPcmRlclR5cGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclR5cGUgICA9PiAnZGVjaXNpb24nLAogICAgICAgICAgICAgICAgV29ya09yZGVyVHlwZUlEID0+ICRXb3JrT3JkZXJUeXBlTmFtZTJJRHtkZWNpc2lvbn0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciBXb3JrT3JkZXJVcGRhdGUoKSB3aXRoIG5vdCBhbGxvd2VkIHdvcmtvcmRlciBzdGF0ZScsCiAgICAgICAgVXBkYXRlRmFpbHMgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdXb3JrT3JkZXJVcGRhdGUoKSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGUgPT4gJ2luIHByb2dyZXNzJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdXb3JrT3JkZXJVcGRhdGUoKSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGUgPT4gJ2NyZWF0ZWQnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAnVGVzdCBmb3IgV29ya09yZGVyVXBkYXRlKCkgd2l0aCBub3QgYWxsb3dlZCB3b3Jrb3JkZXIgc3RhdGUgYnV0IEJ5cGFzc1N0YXRlTWFjaGluZSBwYXJhbWV0ZXIuJywKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJ1dvcmtPcmRlclVwZGF0ZSgpIEJ5cGFzc1N0YXRlTWFjaGluZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGUgICAgID0+ICdpbiBwcm9ncmVzcycsCiAgICAgICAgICAgICAgICBCeXBhc3NTdGF0ZU1hY2hpbmUgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJ1dvcmtPcmRlclVwZGF0ZSgpIEJ5cGFzc1N0YXRlTWFjaGluZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGUgPT4gJ2luIHByb2dyZXNzJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCik7CgojIHRlc3RzIGZvciBXb3JrT3JkZXJVcGRhdGUoKTsKcHVzaCBAV29ya09yZGVyVGVzdHMsICgKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBjb250YWlucyBubyBwYXJhbXMgZm9yIFdvcmtPcmRlclVwZGF0ZSgpLicsCiAgICAgICAgRmFpbHMgICAgICAgPT4gMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2UgZXhwZWN0IHRoaXMgdGVzdCB0byBmYWlsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJVcGRhdGUgPT4ge30sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyVXBkYXRlID0+IHVuZGVmLAogICAgICAgIH0sCiAgICB9LAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBmb3IgbWF4IHN0cmluZyBsZW5ndGggZm9yIFdvcmtPcmRlclVwZGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnVCcgeCAyNTAsCiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiAgICA9PiAnSScgeCAxNzk5OTk5LAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgPT4gJ1InIHggMTc5OTk5OSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJHZXQgPT4gewogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgICA9PiAnVCcgeCAyNTAsCiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiAgICAgID0+ICdJJyB4IDE3OTk5OTksCiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvblBsYWluID0+ICdJJyB4IDE3OTk5OTkgLiAiXG4iLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgICA9PiAnUicgeCAxNzk5OTk5LAogICAgICAgICAgICAgICAgUmVwb3J0UGxhaW4gICAgICA9PiAnUicgeCAxNzk5OTk5IC4gIlxuIiwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgMSwgOCBdLAogICAgfSwKCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZm9yIG1heCsxIHN0cmluZyBsZW5ndGggZm9yIFdvcmtPcmRlclVwZGF0ZS4nLAogICAgICAgIFVwZGF0ZUZhaWxzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdUJyB4IDI1MSwKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uICAgID0+ICdJJyB4IDE4MDAwMDAsCiAgICAgICAgICAgICAgICBSZXBvcnQgICAgICAgICA9PiAnUicgeCAxODAwMDAwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnJywKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uICAgID0+ICcnLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDEsIDggXSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciBtYXgrMiBzdHJpbmcgbGVuZ3RoIGZvciBXb3JrT3JkZXJVcGRhdGUuJywKICAgICAgICBVcGRhdGVGYWlscyA9PiAxLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnVCcgeCAyNTIsCiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiAgICA9PiAnSScgeCAxODAwMDAwLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgPT4gJ1InIHggMTgwMDAwMCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJHZXQgPT4gewogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJycsCiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiAgICA9PiAnJywKICAgICAgICAgICAgICAgIFJlcG9ydCAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWzhdLAogICAgfSwKCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgY3JlYXRlX2J5IGFuZCBjaGFuZ2VfYnkgZm9yIFdvcmtPcmRlclVwZGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnVCcgeCAyNSwKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uICAgID0+ICdJJyB4IDM4LAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgPT4gJ1InIHggMzgsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdUJyB4IDI1LAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJ0knIHggMzgsCiAgICAgICAgICAgICAgICBSZXBvcnQgICAgICAgICA9PiAnUicgeCAzOCwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWyAyLCA4IF0sCiAgICB9LAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBjcmVhdGVfYnkgYW5kIGNoYW5nZV9ieSBmb3IgV29ya09yZGVyVXBkYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdUJyB4IDI1LAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJ0knIHggMzgsCiAgICAgICAgICAgICAgICBSZXBvcnQgICAgICAgICA9PiAnUicgeCAzOCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJHZXQgPT4gewogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJ1QnIHggMjUsCiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiAgICA9PiAnSScgeCAzOCwKICAgICAgICAgICAgICAgIFJlcG9ydCAgICAgICAgID0+ICdSJyB4IDM4LAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDIsIDggXSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciBtYXgrMSBzdHJpbmcgbGVuZ3RoIC0gdGl0bGUgLSBmb3IgV29ya09yZGVyVXBkYXRlLicsCiAgICAgICAgVXBkYXRlRmFpbHMgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFdvcmtPcmRlclVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJ1QnIHggMjUxLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJ0knLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgPT4gJ1InLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnJywKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uICAgID0+ICcnLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFs4XSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciBtYXgrMSBzdHJpbmcgbGVuZ3RoIC0gSW5zdHJ1Y3Rpb24gLSBmb3IgV29ya09yZGVyVXBkYXRlLicsCiAgICAgICAgVXBkYXRlRmFpbHMgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFdvcmtPcmRlclVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJ1QnLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJ0knIHggMTgwMDAwMCwKICAgICAgICAgICAgICAgIFJlcG9ydCAgICAgICAgID0+ICdSJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJHZXQgPT4gewogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJycsCiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiAgICA9PiAnJywKICAgICAgICAgICAgICAgIFJlcG9ydCAgICAgICAgID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbOF0sCiAgICB9LAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBmb3IgbWF4KzEgc3RyaW5nIGxlbmd0aCAtIFJlcG9ydCAtIGZvciBXb3JrT3JkZXJVcGRhdGUuJywKICAgICAgICBVcGRhdGVGYWlscyA9PiAxLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnVCcsCiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiAgICA9PiAnSScsCiAgICAgICAgICAgICAgICBSZXBvcnQgICAgICAgICA9PiAnUicgeCAxODAwMDAwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnJywKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uICAgID0+ICcnLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFs4XSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciB1bmRlZiBwYXJhbSAtIFRpdGxlIC0gZm9yIFdvcmtPcmRlclVwZGF0ZS4nLAogICAgICAgIFVwZGF0ZUZhaWxzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+IHVuZGVmLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJ0knLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgPT4gJ1InLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnJywKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uICAgID0+ICcnLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFs4XSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciB1bmRlZiBwYXJhbSAtIEluc3RydWN0aW9uIC0gZm9yIFdvcmtPcmRlclVwZGF0ZS4nLAogICAgICAgIFVwZGF0ZUZhaWxzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdUJywKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uICAgID0+IHVuZGVmLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgPT4gJ1InLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnJywKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uICAgID0+ICcnLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFs4XSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciB1bmRlZiBwYXJhbSAtIFJlcG9ydCAtIGZvciBXb3JrT3JkZXJVcGRhdGUuJywKICAgICAgICBVcGRhdGVGYWlscyA9PiAxLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnVCcsCiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiAgICA9PiAnSScsCiAgICAgICAgICAgICAgICBSZXBvcnQgICAgICAgICA9PiB1bmRlZiwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJHZXQgPT4gewogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJycsCiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiAgICA9PiAnJywKICAgICAgICAgICAgICAgIFJlcG9ydCAgICAgICAgID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbOF0sCiAgICB9LAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBmb3IgVGltZUNoYW5nZXMgLSBqdXN0IFBsYW5uZWRTdGFydFRpbWUgLSBmb3IgV29ya09yZGVyVXBkYXRlLicsCiAgICAgICAgVXBkYXRlRmFpbHMgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgICAgICBSZXBvcnQgICA9PiAnUmVwb3J0IC0ganVzdCBQbGFubmVkU3RhcnRUaW1lJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJzIwMDktMDMtMjAgMTM6MjU6MDknLAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgICA9PiAnVGVzdCcsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICcnLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJycsCiAgICAgICAgICAgICAgICBSZXBvcnQgICAgICAgICA9PiAnUmVwb3J0IC0ganVzdCBQbGFubmVkU3RhcnRUaW1lJywKICAgICAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFs4XSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciBUaW1lQ2hhbmdlcyAtIGp1c3QgUGxhbm5lZEVuZFRpbWUgLSBmb3IgV29ya09yZGVyVXBkYXRlLicsCiAgICAgICAgVXBkYXRlRmFpbHMgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgICAgICBSZXBvcnQgICA9PiAnUmVwb3J0IC0ganVzdCBQbGFubmVkRW5kVGltZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFdvcmtPcmRlclVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBQbGFubmVkRW5kVGltZSA9PiAnMjAwOS0wMy0yMCAxMzoyNTowOScsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnVGVzdCcsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnJywKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uICAgID0+ICcnLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgPT4gJ1JlcG9ydCAtIGp1c3QgUGxhbm5lZEVuZFRpbWUnLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWzhdLAogICAgfSwKCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZm9yIFRpbWVDaGFuZ2VzIC0ganVzdCBBY3R1YWxTdGFydFRpbWUgLSBmb3IgV29ya09yZGVyVXBkYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgUmVwb3J0ICAgPT4gJ1JlcG9ydCAtIGp1c3QgQWN0dWFsU3RhcnRUaW1lJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZSA9PiAnMjAwOS0wMy0yMCAxMzoyNTowOScsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgPT4gJ1Rlc3QnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlICA9PiAnVGVzdCcsCiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBSZXBvcnQgICAgICAgICAgPT4gJ1JlcG9ydCAtIGp1c3QgQWN0dWFsU3RhcnRUaW1lJywKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZSA9PiAnMjAwOS0wMy0yMCAxMzoyNTowOScsCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWzhdLAogICAgfSwKCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZm9yIFRpbWVDaGFuZ2VzIC0ganVzdCBBY3R1YWxFbmRUaW1lIC0gZm9yIFdvcmtPcmRlclVwZGF0ZS4nLAogICAgICAgIFVwZGF0ZUZhaWxzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgUmVwb3J0ICAgPT4gJ1JlcG9ydCAtIGp1c3QgQWN0dWFsRW5kVGltZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFdvcmtPcmRlclVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lICA9PiAnMjAwOS0wMy0yMCAxMzoyNTowOScsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnVGVzdCcsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnJywKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uICAgID0+ICcnLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgPT4gJ1JlcG9ydCAtIGp1c3QgQWN0dWFsRW5kVGltZScsCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbOF0sCiAgICB9LAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAnVGVzdCBmb3IgVGltZUNoYW5nZXMgLSBBY3R1YWxTdGFydFRpbWUgPiBBY3R1YWxFbmRUaW1lIC0gZm9yIFdvcmtPcmRlclVwZGF0ZS4nLAogICAgICAgIFVwZGF0ZUZhaWxzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgUmVwb3J0ICAgPT4gJ1JlcG9ydCAtIEFjdHVhbFN0YXJ0VGltZSA+IEFjdHVhbEVuZFRpbWUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZSAgID0+ICcyMDA5LTAzLTIwIDEzOjI1OjA5JywKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZSA9PiAnMjAwOS0wMy0yMSAxMzoyNTowOScsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgPT4gJ1Rlc3QnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICcnLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJycsCiAgICAgICAgICAgICAgICBSZXBvcnQgICAgICAgICA9PiAnUmVwb3J0IC0gQWN0dWFsU3RhcnRUaW1lID4gQWN0dWFsRW5kVGltZScsCiAgICAgICAgICAgICAgICBDaGFuZ2VCeSAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbOF0sCiAgICB9LAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAnVGVzdCBmb3IgVGltZUNoYW5nZXMgLSBBY3R1YWxTdGFydFRpbWUgPCBBY3R1YWxFbmRUaW1lIC0gZm9yIFdvcmtPcmRlclVwZGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgUmVwb3J0ICAgPT4gJ1JlcG9ydCAtIEFjdHVhbFN0YXJ0VGltZSA8IEFjdHVhbEVuZFRpbWUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZSAgID0+ICcyMDA5LTAzLTIyIDEzOjI1OjA5JywKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZSA9PiAnMjAwOS0wMy0yMSAxMzoyNTowOScsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgPT4gJ1Rlc3QnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlICA9PiAnVGVzdCcsCiAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBSZXBvcnQgICAgICAgICAgPT4gJ1JlcG9ydCAtIEFjdHVhbFN0YXJ0VGltZSA8IEFjdHVhbEVuZFRpbWUnLAogICAgICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lICAgPT4gJzIwMDktMDMtMjIgMTM6MjU6MDknLAogICAgICAgICAgICAgICAgQWN0dWFsU3RhcnRUaW1lID0+ICcyMDA5LTAzLTIxIDEzOjI1OjA5JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gWzhdLAogICAgfSwKCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gIlRlc3QgZm9yICcwJyBzdHJpbmcgaGFuZGxpbmcgZm9yIFdvcmtPcmRlclVwZGF0ZS4iLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJVcGRhdGUgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICcwJywKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uICAgID0+ICcwJywKICAgICAgICAgICAgICAgIFJlcG9ydCAgICAgICAgID0+ICcwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJHZXQgPT4gewogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJzAnLAogICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJzAnLAogICAgICAgICAgICAgICAgUmVwb3J0ICAgICAgICAgPT4gJzAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbOF0sCiAgICB9LAoKICAgICMgVGVzdCB0aXRsZSB3aXRoIGxlYWRpbmcgd2hpdGVzcGFjZQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IGZvciB0aXRsZSB3aXRoIGxlYWRpbmcgd2hpdGVzcGFjZScsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAiICBcdCBcbiAgVGl0bGUgd2l0aCBsZWFkaW5nIHdoaXRlc3BhY2UgLSAiIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICJUaXRsZSB3aXRoIGxlYWRpbmcgd2hpdGVzcGFjZSAtICIgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbMzJdLAogICAgfSwKCiAgICAjIFRlc3QgdGl0bGUgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgZm9yIHRpdGxlIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZScsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gIlRpdGxlIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZSAtICIKICAgICAgICAgICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUKICAgICAgICAgICAgICAgICAgICAuICIgIFx0IFxuICAiLAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAiVGl0bGUgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlIC0gIiAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hUZXN0ID0+IFszM10sCiAgICB9LAoKICAgICMgVGVzdCB0aXRsZSB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBmb3IgdGl0bGUgd2l0aCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICIgIFx0IFxuICBUaXRsZSB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgLSAiCiAgICAgICAgICAgICAgICAgICAgLiAkVW5pcXVlU2lnbmF0dXJlCiAgICAgICAgICAgICAgICAgICAgLiAiICBcdCBcbiAgIiwKICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICJUaXRsZSB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgLSAiCiAgICAgICAgICAgICAgICAgICAgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbMzRdLAogICAgfSwKCiAgICAjIFRlc3QgdGl0bGUgd2l0aCBvbmx5IHdoaXRlc3BhY2UKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBmb3IgdGl0bGUgd2l0aCBvbmx5IHdoaXRlc3BhY2UnLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gIiAgXHQgXG4gICIsCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaFRlc3QgPT4gW10sCiAgICB9LAoKICAgICMgdGVzdCBmb3IgYWNjb3VudGVkIHRpbWUgYW5kIHBsYW5uZWQgZWZmb3J0CiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgMSBmb3IgQWNjb3VudGVkVGltZSBhbmQgUGxhbm5lZEVmZm9ydCcsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJ1Rlc3QgMSBmb3IgQWNjb3VudGVkVGltZSBhbmQgUGxhbm5lZEVmZm9ydCcsCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgIFBsYW5uZWRFZmZvcnQgPT4gJzUuNScsCiAgICAgICAgICAgICAgICBBY2NvdW50ZWRUaW1lID0+ICcxLjUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBQbGFubmVkRWZmb3J0ID0+ICc1LjUwJywgICAgIyBvdXRwdXQgaXMgYWx3YXlzIGZvcm1hdHRlZCB3aXRoIDIgZGVjaW1hbCBwbGFjZXMKICAgICAgICAgICAgICAgIEFjY291bnRlZFRpbWUgPT4gJzEuNTAnLCAgICAjIG91dHB1dCBpcyBhbHdheXMgZm9ybWF0dGVkIHdpdGggMiBkZWNpbWFsIHBsYWNlcwogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwogICAgIyBUZXN0cyBmb3IgV29ya29yZGVyIER5bmFtaWMgZmllbGRzCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKCiAgICAjIHRlc3Qgc29tZSB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMgV29ya09yZGVyQWRkIGFuZCBXb3JrT3JkZXJVcGRhdGUKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBXb3JrT3JkZXJBZGQgYW5kIFdvcmtPcmRlclVwZGF0ZSB3aXRoIHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcy4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdUZXN0IGFkZCB3b3Jrb3JkZXIgd2l0aCBkeW5hbWljIGZpZWxkcyAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDEnID0+ICdBQUFBJywKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QyJyA9PiAnQkJCQicsCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MycgPT4gJ0NDQ0MnLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDQnID0+ICdEREREJywKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFdvcmtPcmRlclVwZGF0ZSA9PiB7CiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MycgPT4gJ0dHR0cnLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDQnID0+ICdISEhIJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnVGVzdCBhZGQgd29ya29yZGVyIHdpdGggZHluYW1pYyBmaWVsZHMgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QxJyA9PiAnQUFBQScsCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MicgPT4gJ0JCQkInLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDMnID0+ICdHR0dHJywKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3Q0JyA9PiAnSEhISCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDgsIDM1IF0sCiAgICB9LAoKICAgICMgdGVzdCBzb21lIHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcyBXb3JrT3JkZXJBZGQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGVzdCBXb3JrT3JkZXJBZGQgYW5kIFdvcmtPcmRlclVwZGF0ZSB3aXRoIHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcy4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdUZXN0IGFkZCB3b3Jrb3JkZXIgd2l0aCBkeW5hbWljIGZpZWxkcyAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDEnID0+ICdBQUFBJywKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QyJyA9PiAnQkJCQicsCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MycgPT4gJ1hYWFgnLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDQnID0+ICdZWVlZJywKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdUZXN0IGFkZCB3b3Jrb3JkZXIgd2l0aCBkeW5hbWljIGZpZWxkcyAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDEnID0+ICdBQUFBJywKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QyJyA9PiAnQkJCQicsCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MycgPT4gJ1hYWFgnLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDQnID0+ICdZWVlZJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAoKICAgICAgICBTZWFyY2hUZXN0ID0+IFsgOCwgMzUsIDM2IF0sCiAgICB9LAoKICAgICMgdGVzdCB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMgd2l0aCBtYXhpbXVtIGxlbmd0aAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IFdvcmtPcmRlckFkZCBkeW5hbWljIGZpZWxkcyB3aXRoIDM4MDAgY2hhcmFjdGVycy4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdUZXN0IGFkZCB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMgd2l0aCAzODAwIGNoYXJhY3RlcnMgLSAnCiAgICAgICAgICAgICAgICAgICAgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDEnID0+ICdBJyB4IDM4MDAsCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MicgPT4gJ0InIHggMzgwMCwKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QxJyA9PiAnQScgeCAzODAwLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDInID0+ICdCJyB4IDM4MDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbOF0sCiAgICB9LAoKICAgICMgdGVzdCB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMgbGFyZ2VyIHRoYW4gbWF4aW11bSBsZW5ndGggaW4gV29ya09yZGVyQWRkCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgV29ya09yZGVyQWRkIGR5bmFtaWMgZmllbGRzIHdpdGggMzgwMSBjaGFyYWN0ZXJzLicsCiAgICAgICAgRmFpbHMgICAgICAgPT4gMSwKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnVGVzdCBhZGQgd29ya29yZGVyIGR5bmFtaWMgZmllbGRzIHdpdGggMjUxIGNoYXJhY3RlcnMgLSAnCiAgICAgICAgICAgICAgICAgICAgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDEnID0+ICdBJyB4IDM4MDEsCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MicgPT4gJ0InIHggMzgwMSwKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB1bmRlZiwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRlc3Qgd29ya29yZGVyIGR5bmFtaWMgZmllbGRzIGxhcmdlciB0aGFuIG1heGltdW0gbGVuZ3RoIGluIFdvcmtPcmRlclVwZGF0ZQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdUZXN0IFdvcmtPcmRlclVwZGF0ZSBkeW5hbWljIGZpZWxkcyB3aXRoIDM4MDEgY2hhcmFjdGVycy4nLAogICAgICAgIFVwZGF0ZUZhaWxzID0+IDEsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJ1Rlc3QgdXBkYXRlIHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcyB3aXRoIDM4MDEgY2hhcmFjdGVycyAtICcKICAgICAgICAgICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MScgPT4gJ0EnIHggMzgwMCwKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QyJyA9PiAnQicgeCAzODAwLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QzJyA9PiAnQycgeCAzODAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QxJyA9PiAnQScgeCAzODAwLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDInID0+ICdCJyB4IDM4MDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbOF0sCiAgICB9LAoKICAgICMgdGVzdCB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMgd2l0aCB6ZXJvIGFuZCBlbXB0eSBzdHJpbmdzCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1Rlc3QgV29ya09yZGVyVXBkYXRlIHdpdGggemVybyBhbmQgZW1wdHkgc3RyaW5nLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4KICAgICAgICAgICAgICAgICAgICAnVGVzdCB1cGRhdGUgd29ya29yZGVyIGR5bmFtaWMgZmllbGRzIHdpdGggemVybyBhbmQgZW1wdHkgc3RyaW5nIC0gJwogICAgICAgICAgICAgICAgICAgIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QxJyA9PiAnQUFBQScsCiAgICAgICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MicgPT4gJ0JCQkInLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICRXb3JrT3JkZXJBZGRUZXN0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyVXBkYXRlID0+IHsKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QxJyA9PiAwLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDInID0+ICcnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QxJyA9PiAwLAogICAgICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDInID0+ICcnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCgogICAgICAgIFNlYXJjaFRlc3QgPT4gWzhdLAogICAgfSwKCik7CgojIHdvcmtvcmRlcnMgdGVzdHMgZm9yIFdvcmtPcmRlclNlYXJjaCgpIHdpdGggT3JkZXJCeQpwdXNoIEBXb3JrT3JkZXJUZXN0cywgKAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAnV29ya09yZGVyQWRkKCkgZm9yIE9yZGVyQnkgd2l0aCBXb3JrT3JkZXJUeXBlSUQgYW5kIFdvcmtPcmRlclN0YXRlSUQuJywKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgPT4gJE9yZGVyQnlUZXN0SUQsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUeXBlSUQgID0+ICRTb3J0ZWRUeXBlSURzWzJdLAogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGVJRCA9PiAkU29ydGVkV29ya09yZGVyU3RhdGVJRHNbMF0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICdBQUEgV29ya09yZGVyQWRkKCkgZm9yIE9yZGVyQnkgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckdldCA9PiB7CiAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICAgID0+ICRPcmRlckJ5VGVzdElELAogICAgICAgICAgICAgICAgV29ya09yZGVyVHlwZUlEICA9PiAkU29ydGVkVHlwZUlEc1syXSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlSUQgPT4gJFNvcnRlZFdvcmtPcmRlclN0YXRlSURzWzBdLAogICAgICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgICA9PiAnQUFBIFdvcmtPcmRlckFkZCgpIGZvciBPcmRlckJ5IC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAoKICAgICAgICAjIDk5OTk5OSBpcyBhIHNwZWNpYWwgdGVzdCBjYXNlLgogICAgICAgICMgV29ya29yZGVycyB3aXRoIHNlYXJjaHRlc3QgOTk5OTk5IGFyZSB1c2VkIGluICdPcmRlckJ5JyBzZWFyY2ggdGVzdHMuCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbOTk5OTk5XSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICdXb3JrT3JkZXJBZGQoKSBmb3IgT3JkZXJCeSB3aXRoIFdvcmtPcmRlclR5cGVJRCBhbmQgV29ya09yZGVyU3RhdGVJRC4nLAogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgICA9PiAkT3JkZXJCeVRlc3RJRCwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclR5cGVJRCAgPT4gJFNvcnRlZFR5cGVJRHNbMV0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZUlEID0+ICRTb3J0ZWRXb3JrT3JkZXJTdGF0ZUlEc1sxXSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlICAgPT4gJ0JCQiBXb3JrT3JkZXJBZGQoKSBmb3IgT3JkZXJCeSAtIFRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgPT4gJE9yZGVyQnlUZXN0SUQsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUeXBlSUQgID0+ICRTb3J0ZWRUeXBlSURzWzFdLAogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGVJRCA9PiAkU29ydGVkV29ya09yZGVyU3RhdGVJRHNbMV0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICdCQkIgV29ya09yZGVyQWRkKCkgZm9yIE9yZGVyQnkgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbOTk5OTk5XSwKICAgIH0sCgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICdXb3JrT3JkZXJBZGQoKSBmb3IgT3JkZXJCeSB3aXRoIFdvcmtPcmRlclR5cGVJRCBhbmQgV29ya09yZGVyU3RhdGVJRC4nLAogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgICA9PiAkT3JkZXJCeVRlc3RJRCwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclR5cGVJRCAgPT4gJFNvcnRlZFR5cGVJRHNbMF0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZUlEID0+ICRTb3J0ZWRXb3JrT3JkZXJTdGF0ZUlEc1syXSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlICAgPT4gJ0NDQyBXb3JrT3JkZXJBZGQoKSBmb3IgT3JkZXJCeSAtIFRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgPT4gJE9yZGVyQnlUZXN0SUQsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUeXBlSUQgID0+ICRTb3J0ZWRUeXBlSURzWzBdLAogICAgICAgICAgICAgICAgV29ya09yZGVyU3RhdGVJRCA9PiAkU29ydGVkV29ya09yZGVyU3RhdGVJRHNbMl0sCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICdDQ0MgV29ya09yZGVyQWRkKCkgZm9yIE9yZGVyQnkgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbOTk5OTk5XSwKICAgIH0sCik7CgojIHdvcmtvcmRlcnMgdGVzdHMgZm9yIFdvcmtPcmRlclNlYXJjaCgpIHdpdGggc3RyaW5nIHNlYXJjaGVzIGluIGNoYW5nZQpwdXNoIEBXb3JrT3JkZXJUZXN0cywgKAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAnV29ya09yZGVyQWRkKCkgZm9yIHN0cmluZyBzZWFyY2ggaW4gY2hhbmdlLicsCiAgICAgICAgU291cmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgPT4gJFN0cmluZ1NlYXJjaFRlc3RJRCwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdXb3JrT3JkZXJBZGQoKSBmb3Igc3RyaW5nIHNlYXJjaCBpbiBjaGFuZ2UgLSBUaXRsZSAtICcKICAgICAgICAgICAgICAgICAgICAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgID0+ICRTdHJpbmdTZWFyY2hUZXN0SUQsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnV29ya09yZGVyQWRkKCkgZm9yIHN0cmluZyBzZWFyY2ggaW4gY2hhbmdlIC0gVGl0bGUgLSAnCiAgICAgICAgICAgICAgICAgICAgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoVGVzdCA9PiBbIDE1LCAxNywgMTksIDIxLCAyMiBdLAogICAgfSwKKTsKCiMgd29ya29yZGVycyB0ZXN0cyBmb3IgdGVzdGluZyB0aGUgUGVybWlzc2lvbigpIG1ldGhvZApwdXNoIEBXb3JrT3JkZXJUZXN0cywgKAoKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAnV29ya09yZGVyQWRkKCkgZm9yIHRlc3RpbmcgdGhlIFBlcm1pc3Npb24oKSBtZXRob2QnLAogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgICA9PiAkUGVybWlzc2lvblRlc3RJRCwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlICAgPT4gJ1dvcmtPcmRlckFkZCgpIGZvciBQZXJtaXNzaW9uKCkgIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlckFnZW50SUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyR2V0ID0+IHsKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgPT4gJFBlcm1pc3Npb25UZXN0SUQsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICdXb3JrT3JkZXJBZGQoKSBmb3IgUGVybWlzc2lvbigpICAtIFRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJBZ2VudElEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGV4ZWN1dGUgdGhlIHdvcmtvcmRlciB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAlVGVzdGVkV29ya09yZGVySUQ7ICAgICAgICAgICAjIGlkcyBvZiBhbGwgY3JlYXRlZCB3b3Jrb3JkZXJzCm15ICVXb3JrT3JkZXJJREZvckNoYW5nZUlEOyAgICAgICMga2VlcCB0cmFjayBvZiB0aGUgd29ya29yZGVycyB0aGF0IGFyZSBhdHRhY2hlZCB0byBhIGNoYW5nZQpteSAlV29ya09yZGVySURGb3JTZWFyY2hUZXN0OyAgICAjIHdvcmtvcmRlciBpZHMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgZm91bmQgaW4gYSBzZWFyY2gKClRFU1Q6CmZvciBteSAkVGVzdCAoQFdvcmtPcmRlclRlc3RzKSB7CgogICAgIyBjaGVjayBTb3VyY2VEYXRhIGF0dHJpYnV0ZQogICAgaWYgKCAhJFRlc3QtPntTb3VyY2VEYXRhfSB8fCByZWYgJFRlc3QtPntTb3VyY2VEYXRhfSBuZSAnSEFTSCcgKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAwLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBObyBTb3VyY2VEYXRhIGZvdW5kIGZvciB0aGlzIHRlc3QgKHRlc3QgY2FzZTogIgogICAgICAgICAgICAgICAgLiAoICRUZXN0Q291bnQgLSAkVGVzdENvdW50TWlzYyApIC4gIikuIiwKICAgICAgICApOwoKICAgICAgICBuZXh0IFRFU1Q7CiAgICB9CgogICAgIyBwcmludCB0ZXN0IGNhc2UgZGVzY3JpcHRpb24KICAgIGlmICggJFRlc3QtPntEZXNjcmlwdGlvbn0gKSB7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6ICRUZXN0LT57RGVzY3JpcHRpb259ICh0ZXN0IGNhc2U6ICIKICAgICAgICAgICAgICAgIC4gKCAkVGVzdENvdW50IC0gJFRlc3RDb3VudE1pc2MgKSAuICIpLiIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGV4dHJhY3QgdGVzdCBkYXRhCiAgICBteSAkU291cmNlRGF0YSAgICA9ICRUZXN0LT57U291cmNlRGF0YX07CiAgICBteSAkUmVmZXJlbmNlRGF0YSA9ICRUZXN0LT57UmVmZXJlbmNlRGF0YX07CgogICAgIyB0aGUgY2hhbmdlIGlkIHdpbGwgYmUgdXNlZCBmb3Igc2V2ZXJhbCBjYWxscwogICAgbXkgJFdvcmtPcmRlcklEOwoKICAgICMgYWRkIGEgbmV3IENoYW5nZQogICAgaWYgKCAkU291cmNlRGF0YS0+e1dvcmtPcmRlckFkZH0gKSB7CgogICAgICAgICMgYWRkIHRoZSB3b3Jrb3JkZXIKICAgICAgICAkV29ya09yZGVySUQgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBZGQoCiAgICAgICAgICAgICV7ICRTb3VyY2VEYXRhLT57V29ya09yZGVyQWRkfSB9LAogICAgICAgICk7CgogICAgICAgICMgcmVtZW1iZXIgY3VycmVudCBXb3JrT3JkZXJJRAogICAgICAgIGlmICgkV29ya09yZGVySUQpIHsKICAgICAgICAgICAgbXkgJENoYW5nZUlEID0gJFNvdXJjZURhdGEtPntXb3JrT3JkZXJBZGR9LT57Q2hhbmdlSUR9OwoKICAgICAgICAgICAgIyBrZWVwIHRyYWNrIG9mIGFsbCBjcmVhdGVkIHdvcmtvcmRlcnMKICAgICAgICAgICAgJFRlc3RlZFdvcmtPcmRlcklEeyRXb3JrT3JkZXJJRH0gPSAxOwoKICAgICAgICAgICAgIyBrZWVwIHRyYWNrIG9mIHRoZSB3b3Jrb3JkZXJzIGF0dGFjaGVkIHRvIGEgY2hhbmdlCiAgICAgICAgICAgICRXb3JrT3JkZXJJREZvckNoYW5nZUlEeyRDaGFuZ2VJRH0gfHw9IHt9OwogICAgICAgICAgICAkV29ya09yZGVySURGb3JDaGFuZ2VJRHskQ2hhbmdlSUR9LT57JFdvcmtPcmRlcklEfSA9IDE7CgogICAgICAgICAgICAjIHNhdmUgd29ya29yZGVyIGlkIGZvciB1c2UgaW4gc2VhcmNoIHRlc3RzCiAgICAgICAgICAgIGlmICggZXhpc3RzICRUZXN0LT57U2VhcmNoVGVzdH0gKSB7CiAgICAgICAgICAgICAgICBteSBAU2VhcmNoVGVzdHMgPSBAeyAkVGVzdC0+e1NlYXJjaFRlc3R9IH07CgogICAgICAgICAgICAgICAgZm9yIG15ICRTZWFyY2hUZXN0TnIgKEBTZWFyY2hUZXN0cykgewogICAgICAgICAgICAgICAgICAgICRXb3JrT3JkZXJJREZvclNlYXJjaFRlc3R7JFNlYXJjaFRlc3ROcn0tPnskV29ya09yZGVySUR9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAkVGVzdC0+e0ZhaWxzfSApIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogV29ya09yZGVyQWRkKCkgLSBBZGQgd29ya29yZGVyIHNob3VsZCBmYWlsLiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFdvcmtPcmRlckFkZCgpIC0gQWRkIHdvcmtvcmRlci4iLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0gICAgIyBlbmQgaWYgJ1dvcmtPcmRlckFkZCcKCiAgICBpZiAoICRTb3VyY2VEYXRhLT57V29ya09yZGVyVXBkYXRlfSApIHsKCiAgICAgICAgIyB1cGRhdGUgdGhlIHdvcmtvcmRlcgogICAgICAgIG15ICRXb3JrT3JkZXJVcGRhdGVTdWNjZXNzID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyVXBkYXRlKAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICV7ICRTb3VyY2VEYXRhLT57V29ya09yZGVyVXBkYXRlfSB9LAogICAgICAgICk7CgogICAgICAgIGlmICgKICAgICAgICAgICAgJFRlc3QtPntGYWlsc30KICAgICAgICAgICAgfHwgJFRlc3QtPntVcGRhdGVGYWlsc30KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFdvcmtPcmRlclVwZGF0ZVN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBXb3JrT3JkZXJVcGRhdGUoKSBpcyBleHBlY3RlZCB0byBmYWlsIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFdvcmtPcmRlclVwZGF0ZVN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBXb3JrT3JkZXJVcGRhdGUoKSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGEgd29ya29yZGVyIGFuZCBjb21wYXJlIHRoZSByZXRyaWV2ZWQgZGF0YSB3aXRoIHRoZSByZWZlcmVuY2UKICAgIGlmICggZXhpc3RzICRSZWZlcmVuY2VEYXRhLT57V29ya09yZGVyR2V0fSApIHsKCiAgICAgICAgbXkgJFdvcmtPcmRlckdldFJlZmVyZW5jZURhdGEgPSAkUmVmZXJlbmNlRGF0YS0+e1dvcmtPcmRlckdldH07CgogICAgICAgIG15ICRXb3JrT3JkZXJEYXRhID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyR2V0KAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBXb3JrT3JkZXJHZXQgc2hvdWxkIG5vdCByZXR1cm4gYW55dGhpbmcKICAgICAgICBpZiAoICFkZWZpbmVkICRSZWZlcmVuY2VEYXRhLT57V29ya09yZGVyR2V0fSApIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFdvcmtPcmRlckRhdGEsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBHZXQgY2hhbmdlIHJldHVybnMgdW5kZWYuIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgd2UgZXhjcGVjdGVkIHRvIGZhaWwKICAgICAgICAgICAgaWYgKCAkVGVzdC0+e0ZhaWxzfSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAhZGVmaW5lZCAkV29ya09yZGVyRGF0YSwKICAgICAgICAgICAgICAgICAgICAhZGVmaW5lZCAkUmVmZXJlbmNlRGF0YS0+e1dvcmtPcmRlckRhdGF9LAogICAgICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIFNob3VsZCBmYWlsLiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5leHQgVEVTVDsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgZm9yIGFsd2F5cyBleGlzdGluZyBhdHRyaWJ1dGVzCiAgICAgICAgZm9yIG15ICRXb3JrT3JkZXJBdHRyaWJ1dGVzICgKICAgICAgICAgICAgcXcoV29ya09yZGVySUQgV29ya09yZGVyTnVtYmVyIENyZWF0ZVRpbWUgQ2hhbmdlVGltZSkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkV29ya09yZGVyRGF0YS0+eyRXb3JrT3JkZXJBdHRyaWJ1dGVzfSwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIGhhcyAkV29ya09yZGVyQXR0cmlidXRlcy4iLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRSZXF1ZXN0ZWRBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXsgJFJlZmVyZW5jZURhdGEtPntXb3JrT3JkZXJHZXR9IH0gKSB7CgogICAgICAgICAgICAjIHR1cm4gb2ZmIGFsbCBwcmV0dHkgcHJpbnQKICAgICAgICAgICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6SW5kZW50ID0gMDsKICAgICAgICAgICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6VXNlcXEgID0gMTsKCiAgICAgICAgICAgICMgZHVtcCB0aGUgYXR0cmlidXRlIGZyb20gV29ya09yZGVyR2V0KCkgYW5kIHRoZSByZWZlcmVuY2UgYXR0cmlidXRlCiAgICAgICAgICAgICMjIG5vIGNyaXRpYwogICAgICAgICAgICBteSAkV29ya09yZGVyQXR0cmlidXRlID0gRGF0YTo6RHVtcGVyOjpEdW1wZXIoICRXb3JrT3JkZXJEYXRhLT57JFJlcXVlc3RlZEF0dHJpYnV0ZX0gKTsgICAgIyMgbm8gY3JpdGljCiAgICAgICAgICAgIG15ICRSZWZlcmVuY2VBdHRyaWJ1dGUgPSBEYXRhOjpEdW1wZXI6OkR1bXBlciggJFJlZmVyZW5jZURhdGEtPntXb3JrT3JkZXJHZXR9LT57JFJlcXVlc3RlZEF0dHJpYnV0ZX0gKQogICAgICAgICAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgbm8gY3JpdGljCiAgICAgICAgICAgICMjIHVzZSBjcml0aWMKCiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRXb3JrT3JkZXJBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAkUmVmZXJlbmNlQXR0cmlidXRlLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gJFJlcXVlc3RlZEF0dHJpYnV0ZSAoV29ya09yZGVySUQ6ICRXb3JrT3JkZXJJRCkiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0gICAgIyBlbmQgaWYgJ1dvcmtPcmRlckdldCcKfQpjb250aW51ZSB7CgogICAgIyBpbmNyZWFzZSB0aGUgdGVzdCBjb3VudCwgZXZlbiBvbiBuZXh0CiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyB0ZXN0IFdvcmtPcmRlckxpc3QoKSBhbmQgQ2hhbmdlR2V0KCkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBUZXN0IHdoZXRoZXIgV29ya09yZGVyTGlzdCgpIGFuZCBDaGFuZ2VHZXQoKSByZXR1cm4gdGhlIHNhbWUgd29ya29yZGVycyBhcyB3ZSBjcmVhdGVkLgpmb3IgbXkgJENoYW5nZUlEICggc29ydCBrZXlzICVXb3JrT3JkZXJJREZvckNoYW5nZUlEICkgewoKICAgICMgYXNrIHRoZSBXb3JrT3JkZXIgb2JqZWN0IGZvciBhIGxpc3Qgb2Ygd29ya29yZGVycwogICAgbXkgJExpc3RGcm9tV29ya09yZGVyT2JqZWN0ID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyTGlzdCgKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICkgfHwgW107CiAgICBteSAlTWFwRnJvbVdvcmtPcmRlck9iamVjdCA9IG1hcCB7ICRfID0+IDEgfSBAeyRMaXN0RnJvbVdvcmtPcmRlck9iamVjdH07CgogICAgIyBhc2sgdGhlIENoYW5nZSBvYmplY3QgZm9yIGEgbGlzdCBvZiB3b3Jrb3JkZXJzCiAgICBteSAkQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgKSB8fCB7fTsKICAgIG15ICRMaXN0RnJvbUNoYW5nZU9iamVjdCA9ICRDaGFuZ2UtPntXb3JrT3JkZXJJRHN9IHx8IFtdOwogICAgbXkgJU1hcEZyb21DaGFuZ2VPYmplY3QgPSBtYXAgeyAkXyA9PiAxIH0gQHskTGlzdEZyb21DaGFuZ2VPYmplY3R9OwoKICAgICMgY2hlY2sgd2hldGhlciB0aGUgY3JlYXRlZCB3b3Jrb3JkZXJzIHdlcmUgZm91bmQgYnkgV29ya09yZGVyTGlzdCgpCiAgICBmb3IgbXkgJFdvcmtPcmRlcklEICggc29ydCBrZXlzICV7ICRXb3JrT3JkZXJJREZvckNoYW5nZUlEeyRDaGFuZ2VJRH0gfSApIHsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJE1hcEZyb21Xb3JrT3JkZXJPYmplY3R7JFdvcmtPcmRlcklEfSwKICAgICAgICAgICAgJ1Rlc3QgJwogICAgICAgICAgICAgICAgLiAkVGVzdENvdW50KysKICAgICAgICAgICAgICAgIC4gIjogV29ya09yZGVyTGlzdCgpIC0gV29ya09yZGVySUQgJFdvcmtPcmRlcklEIGluIGxpc3QgZnJvbSBXb3JrT3JkZXIgb2JqZWN0LiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJE1hcEZyb21DaGFuZ2VPYmplY3R7JFdvcmtPcmRlcklEfSwKICAgICAgICAgICAgJ1Rlc3QgJwogICAgICAgICAgICAgICAgLiAkVGVzdENvdW50KysKICAgICAgICAgICAgICAgIC4gIjogQ2hhbmdlR2V0KCkgLSBXb3JrT3JkZXJJRCAkV29ya09yZGVySUQgaW4gbGlzdCBmcm9tIENoYW5nZSBvYmplY3QuIiwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgdGhlIG51bWJlciBvZiB3b3Jrb3JkZXJzIGZvciBhIGNoYW5nZQogICAgJFNlbGYtPklzKAogICAgICAgIHNjYWxhciBAeyRMaXN0RnJvbVdvcmtPcmRlck9iamVjdH0sCiAgICAgICAgc2NhbGFyIGtleXMgJXsgJFdvcmtPcmRlcklERm9yQ2hhbmdlSUR7JENoYW5nZUlEfSB9LAogICAgICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAiOiBXb3JrT3JkZXJMaXN0KCkgLSBudW1iZXIgb2Ygd29ya29yZGVycyBmb3IgYSBjaGFuZ2UuIiwKICAgICk7CiAgICAkU2VsZi0+SXMoCiAgICAgICAgc2NhbGFyIEB7JExpc3RGcm9tQ2hhbmdlT2JqZWN0fSwKICAgICAgICBzY2FsYXIga2V5cyAleyAkV29ya09yZGVySURGb3JDaGFuZ2VJRHskQ2hhbmdlSUR9IH0sCiAgICAgICAgJ1Rlc3QgJyAuICRUZXN0Q291bnQrKyAuICI6IENoYW5nZUdldCgpIC0gbnVtYmVyIG9mIHdvcmtvcmRlcnMgZm9yIGEgY2hhbmdlLiIsCiAgICApOwoKICAgICMgc2V0IGVmZm9ydHMgdGVzdC4uLgogICAgbXkgJEVmZm9ydHNGcm9tV29ya09yZGVyT2JqZWN0ID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQ2hhbmdlRWZmb3J0c0dldCgKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICk7CgogICAgZm9yIG15ICRFZmZvcnRLZXkgKCBzb3J0IGtleXMgJXskRWZmb3J0c0Zyb21Xb3JrT3JkZXJPYmplY3R9ICkgewogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJENoYW5nZS0+eyRFZmZvcnRLZXl9LAogICAgICAgICAgICAkRWZmb3J0c0Zyb21Xb3JrT3JkZXJPYmplY3QtPnskRWZmb3J0S2V5fSwKICAgICAgICAgICAgJ1Rlc3QgJwogICAgICAgICAgICAgICAgLiAkVGVzdENvdW50KysKICAgICAgICAgICAgICAgIC4gIjogV29ya09yZGVyQ2hhbmdlRWZmb3J0c0dldCgpIGFuZCBDaGFuZ2VHZXQoKSAtICRFZmZvcnRLZXkgbWF0Y2giLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXQgdGltZSB0ZXN0Li4uCiAgICBteSAkVGltZUZyb21Xb3JrT3JkZXJPYmplY3QgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJDaGFuZ2VUaW1lR2V0KAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgKTsKCiAgICBmb3IgbXkgJFRpbWVLZXkgKCBzb3J0IGtleXMgJXskVGltZUZyb21Xb3JrT3JkZXJPYmplY3R9ICkgewogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJENoYW5nZS0+eyRUaW1lS2V5fSwKICAgICAgICAgICAgJFRpbWVGcm9tV29ya09yZGVyT2JqZWN0LT57JFRpbWVLZXl9LAogICAgICAgICAgICAnVGVzdCAnCiAgICAgICAgICAgICAgICAuICRUZXN0Q291bnQrKwogICAgICAgICAgICAgICAgLiAiOiBXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0KCkgYW5kIENoYW5nZUdldCgpIC0gJFRpbWVLZXkgbWF0Y2giLAogICAgICAgICk7CiAgICB9Cgp9CgojIGNvdW50IGFsbCB0ZXN0cyB0aGF0IGFyZSByZXF1aXJlZCB0byBhbmQgcGxhbm5lZCBmb3IgZmFpbApteSAkRmFpbHMgPSBzY2FsYXIgZ3JlcCB7ICRfLT57RmFpbHN9IH0gQFdvcmtPcmRlclRlc3RzOwpteSAkTnJDcmVhdGVXb3JrT3JkZXJzID0gKCBzY2FsYXIgQFdvcmtPcmRlclRlc3RzICkgLSAkRmFpbHM7CgojIHRlc3QgaWYgdGhlIHdvcmtvcmRlcnMgd2VyZSBjcmVhdGVkCiRTZWxmLT5JcygKICAgIHNjYWxhciBrZXlzICVUZXN0ZWRXb3JrT3JkZXJJRCB8fCAwLAogICAgJE5yQ3JlYXRlV29ya09yZGVycywKICAgICdUZXN0ICcgLiAkVGVzdENvdW50KysgLiAnOiBhbW91bnQgb2Ygd29ya29yZGVyIG9iamVjdHMgYW5kIHRlc3QgY2FzZXMuJywKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBkZWZpbmUgZ2VuZXJhbCB3b3Jrb3JkZXIgc2VhcmNoIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRTdHJpbmdTZWFyY2hUZXN0Q2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgQ2hhbmdlSUQgPT4gJFN0cmluZ1NlYXJjaFRlc3RJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgpteSBAV29ya09yZGVyU2VhcmNoVGVzdHMgPSAoCgogICAgIyBOciAxIC0gYSBzaW1wbGUgY2hlY2sgaWYgdGhlIHNlYXJjaCBmdW5jdGlvbnMgdGFrZXMgY2FyZSBvZiAiTGltaXQiCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0xpbWl0JywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIExpbWl0ID0+IDMsICAgICMgZXhwZWN0IG9ubHkgMyByZXN1bHRzCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdENvdW50ID0+IDEsICAgICMgZmxhZyBmb3IgY2hlY2sgcmVzdWx0IGFtb3VudAogICAgICAgICAgICBDb3VudCAgICAgPT4gMywgICAgIyBjaGVjayBvbiAzIHJlc3VsdHMKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDIgLSBhIHNpbXBsZSBjaGVjayB0aGF0IHNob3VsZCBmaW5kIGFsbCB3b3Jrb3JkZXJzCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0xpbWl0JywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLCAgICAjIGZsYWcgZm9yIGNoZWNrIHJlc3VsdHMgdGhhdCB3ZXJlIG1hcmtlZCB3aXRoICdTZWFyY2hUZXN0JwogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgMyAtIHNlYXJjaCBmb3IgdGl0bGUKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnV29ya09yZGVyVGl0bGUnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJ1dvcmtPcmRlciAxIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciA0IC0gc2VhcmNoIGZvciBpbnN0cnVjdGlvbgogICAgIyBOb3RlIHRoZSBleHRyYSBuZXdsaW5lcyBpbmplY3RlZCBieSBUb0FzY2lpKCkKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnSW5zdHJ1Y3Rpb24nLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gPT4gIldvcmtPcmRlciAxIC0gSW5zdHJ1Y3Rpb24gLVxuJFVuaXF1ZVNpZ25hdHVyZVxuIiwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciA1IC0gc2VhcmNoIGZvciByZXBvcnQKICAgICMgVG9Bc2NpaSgpIGFkZHMgbm8gbmV3bGluZXMsIGFzIHRoZSBzdHJpbmcgbGVuZ3RoIGlzIGxlc3MgdGhhbiA3OC4KICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnUmVwb3J0JywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIFJlcG9ydCA9PiAnV29ya09yZGVyIDEgLSBSZXBvcnQgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciA2IC0gc2VhcmNoIGZvciB0aXRsZSwgaW5zdHJ1Y3Rpb24gYW5kIHJlcG9ydAogICAgIyBOb3RlIHRoZSBleHRyYSBuZXdsaW5lcyBpbmplY3RlZCBieSBUb0FzY2lpKCkuCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1dvcmtPcmRlclRpdGxlLCBJbnN0cnVjdGlvbiwgUmVwb3J0JywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdXb3JrT3JkZXIgMSAtIFRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIEluc3RydWN0aW9uICAgID0+ICJXb3JrT3JkZXIgMSAtIEluc3RydWN0aW9uIC1cbiRVbmlxdWVTaWduYXR1cmVcbiIsCiAgICAgICAgICAgIFJlcG9ydCAgICAgICAgID0+ICJXb3JrT3JkZXIgMSAtIFJlcG9ydCAtICRVbmlxdWVTaWduYXR1cmUiLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDcgLSBzZWFyY2ggZm9yIHRpdGxlLCB3aGljaCBpcyBub3QgaW4gZGF0YWJhc2UKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnV29ya09yZGVyVGl0bGUgZG9lcyBub3QgZXhpc3QnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJ05PVCBJTiBEQVRBQkFTRSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0Q291bnQgPT4gMSwKICAgICAgICAgICAgQ291bnQgICAgID0+IDAsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciA4IC0gc2VhcmNoIGZvciBDaGFuZ2VJRAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdDaGFuZ2VJRCBkb2VzIGV4aXN0JywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEcyA9PiBbJFdvcmtPcmRlckFkZFRlc3RJRF0sCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgOSAtIHNlYXJjaCBmb3IgY2hhbmdlIGlkLCB3aGljaCBpcyBub3QgaW4gZGF0YWJhc2UKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQWxsIFdvcmtPcmRlcnMgZm9yIENoYW5nZSAxXzAwMF8wMDAnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlSURzID0+IFsxXzAwMF8wMDBdLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RDb3VudCA9PiAxLAogICAgICAgICAgICBDb3VudCAgICAgPT4gMCwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDEwIC0gc2VhcmNoIGZvciBub24tZXhpc3RpbmcgY2hhbmdlIGlkIGFuZCBleGlzdGluZyB0aXRsZSB3aGljaCBpcyBub3QgaW4gZGF0YWJhc2UKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQWxsIFdvcmtPcmRlcnMgZm9yIENoYW5nZSAxXzAwMF8wMDAgYW5kIGFuIGV4aXN0aW5nIHRpdGxlJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEcyAgICAgID0+IFsxXzAwMF8wMDBdLAogICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnV29ya09yZGVyIDEgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RDb3VudCA9PiAxLAogICAgICAgICAgICBDb3VudCAgICAgPT4gMCwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDExIC0gc2VhcmNoIGZvciBleGlzdGluZyBDaGFuZ2VJRCBhbmQgZXhpc3RpbmcgV29ya09yZGVyVGl0bGUKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlSUQgZG9lcyBleGlzdCwgV29ya09yZGVyVGl0bGUgZG9lcyBleGlzdCcsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VJRHMgICAgICA9PiBbJFdvcmtPcmRlckFkZFRlc3RJRF0sCiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICdXb3JrT3JkZXIgMSAtIFRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgMTIgLSBzZWFyY2ggZm9yIGV4aXN0aW5nIGNoYW5nZSBpZCBhbmQgZm9yIHRpdGxlLCB3aGljaCBpcyBub3QgaW4gZGF0YWJhc2UKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQ2hhbmdlSUQgZG9lcyBleGlzdCwgV29ya09yZGVyVGl0bGUgZG9lcyBub3QgZXhpc3QnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlSURzICAgICAgPT4gWyRXb3JrT3JkZXJBZGRUZXN0SURdLAogICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnTk9UIElOIERBVEFCQVNFICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RDb3VudCA9PiAxLAogICAgICAgICAgICBDb3VudCAgICAgPT4gMCwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDEzIC0gc2VhcmNoIGZvciB3b3Jrb3JkZXIgdHlwZXMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBXb3JrT3JkZXIgdHlwZScsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VJRHMgICAgICAgID0+IFskV29ya09yZGVyQWRkVGVzdElEXSwKICAgICAgICAgICAgV29ya09yZGVyVHlwZUlEcyA9PiBbCiAgICAgICAgICAgICAgICAkV29ya09yZGVyVHlwZU5hbWUySUR7YXBwcm92YWx9LAogICAgICAgICAgICAgICAgJFdvcmtPcmRlclR5cGVOYW1lMklEe3Bpcn0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICclJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdENvdW50ICAgICA9PiAxLAogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAxNCAtIHNlYXJjaCBmb3Igbm9uZXhpc3RlbnQgY2hhbmdlIHRpdGxlCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3Igbm9uZXhpc3RlbnQgY2hhbmdlIHRpdGxlJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEcyAgID0+IFskU3RyaW5nU2VhcmNoVGVzdElEXSwKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJ05PTkVYSVNURU5UIENoYW5nZSAzIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDE1IC0gc2VhcmNoIGZvciBjaGFuZ2UgdGl0bGUKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBjaGFuZ2UgdGl0bGUnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlSURzICAgPT4gWyRTdHJpbmdTZWFyY2hUZXN0SURdLAogICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAnQ2hhbmdlIDMgLSBUaXRsZSAtICcgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgMTYgLSBzZWFyY2ggZm9yIG5vbmV4aXN0ZW50IGNoYW5nZSBkZXNjcmlwdGlvbgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIG5vbmV4aXN0ZW50IGNoYW5nZSBkZXNjcmlwdGlvbicsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VJRHMgICAgICAgICA9PiBbJFN0cmluZ1NlYXJjaFRlc3RJRF0sCiAgICAgICAgICAgIENoYW5nZURlc2NyaXB0aW9uID0+ICdOT05FWElTVEVOVCBDaGFuZ2UgMyAtIERlc2NyaXB0aW9uIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdENvdW50ICAgICA9PiAxLAogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAxNyAtIHNlYXJjaCBmb3IgY2hhbmdlIGRlc2NyaXB0aW9uCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgY2hhbmdlIGRlc2NyaXB0aW9uJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEcyAgICAgICAgID0+IFskU3RyaW5nU2VhcmNoVGVzdElEXSwKICAgICAgICAgICAgQ2hhbmdlRGVzY3JpcHRpb24gPT4gJ0NoYW5nZSAzIC0gRGVzY3JpcHRpb24gLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDE4IC0gc2VhcmNoIGZvciBub25leGlzdGVudCBjaGFuZ2UganVzdGlmaWNhdGlvbgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIG5vbmV4aXN0ZW50IGNoYW5nZSBqdXN0aWZpY2F0aW9uJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEcyAgICAgICAgICAgPT4gWyRTdHJpbmdTZWFyY2hUZXN0SURdLAogICAgICAgICAgICBDaGFuZ2VKdXN0aWZpY2F0aW9uID0+ICdOT05FWElTVEVOVCBDaGFuZ2UgMyAtIEp1c3RpZmljYXRpb24gLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDE5IC0gc2VhcmNoIGZvciBjaGFuZ2UganVzdGlmaWNhdGlvbgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIGNoYW5nZSBqdXN0aWZpY2F0aW9uJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEcyAgICAgICAgICAgPT4gWyRTdHJpbmdTZWFyY2hUZXN0SURdLAogICAgICAgICAgICBDaGFuZ2VKdXN0aWZpY2F0aW9uID0+ICJDaGFuZ2UgMyAtIEp1c3RpZmljYXRpb24gLVxuJFVuaXF1ZVNpZ25hdHVyZVxuIiwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDIwIC0gc2VhcmNoIGZvciBub25leGlzdGVudCBjaGFuZ2UgbnVtYmVyCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3Igbm9uZXhpc3RlbnQgY2hhbmdlIG51bWJlcicsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VJRHMgICAgPT4gWyRTdHJpbmdTZWFyY2hUZXN0SURdLAogICAgICAgICAgICBDaGFuZ2VOdW1iZXIgPT4gJ05PTkVYSVNURU5UICcgLiAkU3RyaW5nU2VhcmNoVGVzdENoYW5nZS0+e0NoYW5nZU51bWJlcn0sCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdENvdW50ICAgICA9PiAxLAogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAyMSAtIHNlYXJjaCBmb3IgY2hhbmdlIG51bWJlcgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIGNoYW5nZSBudW1iZXInLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlSURzICAgID0+IFskU3RyaW5nU2VhcmNoVGVzdElEXSwKICAgICAgICAgICAgQ2hhbmdlTnVtYmVyID0+ICRTdHJpbmdTZWFyY2hUZXN0Q2hhbmdlLT57Q2hhbmdlTnVtYmVyfSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDIyIC0gc2VhcmNoIGZvciBjaGFuZ2UgdGl0bGUsIGNoYW5nZSBudW1iZXIsIGRlc2NyaXB0aW9uIGFuZCBqdXN0aWZpY2F0aW9uCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgY2hhbmdlIHRpdGxlLCBjaGFuZ2UgbnVtYmVyLCBkZXNjcmlwdGlvbiBhbmQganVzdGlmaWNhdGlvbicsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VJRHMgICAgICAgICAgID0+IFskU3RyaW5nU2VhcmNoVGVzdElEXSwKICAgICAgICAgICAgQ2hhbmdlTnVtYmVyICAgICAgICA9PiAkU3RyaW5nU2VhcmNoVGVzdENoYW5nZS0+e0NoYW5nZU51bWJlcn0sCiAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICAgICAgPT4gJ0NoYW5nZSAzIC0gVGl0bGUgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgQ2hhbmdlRGVzY3JpcHRpb24gICA9PiAiQ2hhbmdlIDMgLSBEZXNjcmlwdGlvbiAtICRVbmlxdWVTaWduYXR1cmUiLAogICAgICAgICAgICBDaGFuZ2VKdXN0aWZpY2F0aW9uID0+ICJDaGFuZ2UgMyAtIEp1c3RpZmljYXRpb24gLVxuJFVuaXF1ZVNpZ25hdHVyZVxuIiwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDIzIC0gc2VhcmNoIGZvciB3b3Jrb3JkZXIgdHlwZXMgImFwcHJvdmFsIiBhbmQgInBpciInLAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIFdvcmtPcmRlciB0eXBlcyAiYXBwcm92YWwiIGFuZCAicGlyIicsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VJRHMgICAgICA9PiBbJFdvcmtPcmRlckFkZFRlc3RJRF0sCiAgICAgICAgICAgIFdvcmtPcmRlclR5cGVzID0+IFsgJ2FwcHJvdmFsJywgJ3BpcicgXSwKICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJyUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDI0IC0gc2VhcmNoIGZvciB3b3Jrb3JkZXIgdHlwZXMgKHNhbWUgdHlwZXMgc2V2ZXJhbCB0aW1lcykKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBXb3JrT3JkZXIgdHlwZXMgKHNhbWUgdHlwZXMgc2V2ZXJhbCB0aW1lcyknLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlSURzICAgICAgPT4gWyRXb3JrT3JkZXJBZGRUZXN0SURdLAogICAgICAgICAgICBXb3JrT3JkZXJUeXBlcyA9PiBbICdhcHByb3ZhbCcsICdwaXInLCAnYXBwcm92YWwnLCAncGlyJyBdLAogICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnJScgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgMjUgLSBzZWFyY2ggZm9yIHdvcmtvcmRlciB0eXBlcwogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIFdvcmtPcmRlciB0eXBlIChub24tZXhpc3RlbnQgdHlwZSknLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlSURzICAgICAgPT4gWyRXb3JrT3JkZXJBZGRUZXN0SURdLAogICAgICAgICAgICBXb3JrT3JkZXJUeXBlcyA9PiBbICdhcHByb3ZhbCcsICdwaXInLCAnbm9uLWV4aXN0ZW50JyBdLAogICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnJScgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgU2VhcmNoRmFpbHMgPT4gMSwKICAgIH0sCgogICAgIyBOciAyNiAtIHNlYXJjaCBmb3Igd29ya29yZGVyIHN0YXRlIChub24tZXhpc3RlbnQgc3RhdGUpCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgV29ya09yZGVyIHN0YXRlIChub24tZXhpc3RlbnQgc3RhdGUpJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEcyAgICAgICA9PiBbJFdvcmtPcmRlckFkZFRlc3RJRF0sCiAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlcyA9PiBbJ25vbi1leGlzdGVudCddLAogICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgPT4gJyUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaEZhaWxzID0+IDEsCiAgICB9LAoKICAgICMgTnIgMjcgLSBzZWFyY2ggZm9yIHdvcmtvcmRlciBzdGF0ZXMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBXb3JrT3JkZXIgc3RhdGVzICJjbG9zZWQiIGFuZCAicmVhZHkiJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEcyAgICAgICA9PiBbJFdvcmtPcmRlckFkZFRlc3RJRF0sCiAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlcyA9PiBbICdjbG9zZWQnLCAncmVhZHknIF0sCiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlICA9PiAnJScgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgMjggLSBTZWFyY2ggZm9yIFdvcmtPcmRlciBzdGF0ZXMgImNsb3NlZCIgYW5kICJyZWFkeSIgKHR3byB0aW1lcykKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBXb3JrT3JkZXIgc3RhdGVzICJjbG9zZWQiIGFuZCAicmVhZHkiICh0d28gdGltZXMpJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEcyAgICAgICA9PiBbJFdvcmtPcmRlckFkZFRlc3RJRF0sCiAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlcyA9PiBbICdjbG9zZWQnLCAncmVhZHknLCAnY2xvc2VkJywgJ3JlYWR5JyBdLAogICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgPT4gJyUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDI5IC0gU2VhcmNoIGZvciBXb3JrT3JkZXIgc3RhdGVzICJjbG9zZWQiLCAicmVhZHkiIGFuZCAibm9uLWV4aXN0ZW50IgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIFdvcmtPcmRlciBzdGF0ZXMgImNsb3NlZCIsICJyZWFkeSIgYW5kICJub24tZXhpc3RlbnQiJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEcyAgICAgICA9PiBbJFdvcmtPcmRlckFkZFRlc3RJRF0sCiAgICAgICAgICAgIFdvcmtPcmRlclN0YXRlcyA9PiBbICdjbG9zZWQnLCAncmVhZHknLCAnbm9uLWV4aXN0ZW50JyBdLAogICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgPT4gJyUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaEZhaWxzID0+IDEsCiAgICB9LAoKICAgICMgTnIgMzAgLSBTZWFyY2ggZm9yIGFuIGludmFsaWQgV29ya09yZGVyIHN0YXRlIGlkCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgYW4gaW52YWxpZCBXb3JrT3JkZXIgc3RhdGUgaWQnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlSURzICAgICAgICAgPT4gWyRXb3JrT3JkZXJBZGRUZXN0SURdLAogICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZUlEcyA9PiBbLTExXSwKICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgICAgPT4gJyUnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICB9LAogICAgICAgIFNlYXJjaEZhaWxzID0+IDEsCiAgICB9LAoKICAgICMgTnIgMzEgLSBTZWFyY2ggZm9yIGFuIGludmFsaWQgV29ya09yZGVyIHR5cGUgaWQKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBhbiBpbnZhbGlkIFdvcmtPcmRlciB0eXBlIGlkJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUlEcyAgICAgICAgPT4gWyRXb3JrT3JkZXJBZGRUZXN0SURdLAogICAgICAgICAgICBXb3JrT3JkZXJUeXBlSURzID0+IFstMTFdLAogICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICclJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgfSwKICAgICAgICBTZWFyY2hGYWlscyA9PiAxLAogICAgfSwKCiAgICAjIE5yIDMyIC0gU2VhcmNoIGZvciBub3JtYWxpemVkIHRpdGxlLCBsZWFkaW5nIHdoaXRlc3BhY2UKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBub3JtYWxpemVkIHRpdGxlLCBsZWFkaW5nIHdoaXRlc3BhY2UnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gIlRpdGxlIHdpdGggbGVhZGluZyB3aGl0ZXNwYWNlIC0gIiAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgICAgIFVzaW5nV2lsZGNhcmRzID0+IDAsCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBOciAzMyAtIFNlYXJjaCBmb3Igbm9ybWFsaXplZCB0aXRsZSwgdHJhaWxpbmcgd2hpdGVzcGFjZQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIG5vcm1hbGl6ZWQgdGl0bGUsIHRyYWlsaW5nIHdoaXRlc3BhY2UnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gIlRpdGxlIHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZSAtICIgLiAkVW5pcXVlU2lnbmF0dXJlLAogICAgICAgICAgICBVc2luZ1dpbGRjYXJkcyA9PiAwLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICAgICAgVGVzdENvdW50ICAgICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgMzQgLSBTZWFyY2ggZm9yIG5vcm1hbGl6ZWQgdGl0bGUsIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBub3JtYWxpemVkIHRpdGxlLCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlJywKICAgICAgICBTZWFyY2hEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICJUaXRsZSB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgLSAiIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgVXNpbmdXaWxkY2FyZHMgPT4gMCwKICAgICAgICB9LAogICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICBUZXN0RXhpc3RlbmNlID0+IDEsCiAgICAgICAgICAgIFRlc3RDb3VudCAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIE5yIDM1IC0gU2VhcmNoIGZvciB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMnLAogICAgICAgIFNlYXJjaERhdGEgID0+IHsKICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDEnID0+IHsKICAgICAgICAgICAgICAgIEVxdWFscyA9PiAnQUFBQScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QyJyA9PiB7CiAgICAgICAgICAgICAgICBFcXVhbHMgPT4gJ0JCQkInLAogICAgICAgICAgICB9LAogICAgICAgICAgICBVc2luZ1dpbGRjYXJkcyA9PiAwLAogICAgICAgIH0sCiAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgIFRlc3RFeGlzdGVuY2UgPT4gMSwKICAgICAgICAgICAgVGVzdENvdW50ICAgICA9PiAyLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgTnIgMzYgLSBTZWFyY2ggZm9yIHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcwogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcycsCiAgICAgICAgU2VhcmNoRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAnVGVzdCBhZGQgd29ya29yZGVyIHdpdGggZHluYW1pYyBmaWVsZHMgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZSwKICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDEnID0+IHsKICAgICAgICAgICAgICAgIEVxdWFscyA9PiAnQUFBQScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRVbmlxdWVOYW1lUHJlZml4IC4gJ1Rlc3QyJyA9PiB7CiAgICAgICAgICAgICAgICBFcXVhbHMgPT4gJ0JCQkInLAogICAgICAgICAgICB9LAogICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkVW5pcXVlTmFtZVByZWZpeCAuICdUZXN0MycgPT4gewogICAgICAgICAgICAgICAgRXF1YWxzID0+ICdYWFhYJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFVuaXF1ZU5hbWVQcmVmaXggLiAnVGVzdDQnID0+IHsKICAgICAgICAgICAgICAgIEVxdWFscyA9PiAnWVlZWScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFVzaW5nV2lsZGNhcmRzID0+IDEsCiAgICAgICAgfSwKICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgVGVzdEV4aXN0ZW5jZSA9PiAxLAogICAgICAgICAgICBUZXN0Q291bnQgICAgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgopOwoKbXkgJFNlYXJjaFRlc3RDb3VudCA9IDE7CgpURVNUOgpmb3IgbXkgJFRlc3QgKEBXb3JrT3JkZXJTZWFyY2hUZXN0cykgewoKICAgICMgY2hlY2sgU2VhcmNoRGF0YSBhdHRyaWJ1dGUKICAgIGlmICggISRUZXN0LT57U2VhcmNoRGF0YX0gfHwgcmVmKCAkVGVzdC0+e1NlYXJjaERhdGF9ICkgbmUgJ0hBU0gnICkgewoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgMCwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VhcmNoRGF0YSBmb3VuZCBmb3IgdGhpcyB0ZXN0LiIsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBURVNUOwogICAgfQoKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDEsCiAgICAgICAgJ2NhbGwgV29ya09yZGVyU2VhcmNoIHdpdGggcGFyYW1zOiAnCiAgICAgICAgICAgIC4gJFRlc3QtPntEZXNjcmlwdGlvbn0KICAgICAgICAgICAgLiAiIChTZWFyY2hUZXN0Q2FzZTogJFNlYXJjaFRlc3RDb3VudCkiLAogICAgKTsKCiAgICAjIGdldCBhIHJlZiB0byBhbiBhcnJheSBvZiBmb3VuZCBpZHMKICAgIG15ICRXb3JrT3JkZXJJRHMgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJTZWFyY2goCiAgICAgICAgJXsgJFRlc3QtPntTZWFyY2hEYXRhfSB9LAogICAgICAgIFJlc3VsdCAgID0+ICdBUlJBWScsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICBDaGFuZ2VJRCA9PiAkV29ya09yZGVyQWRkVGVzdElELAogICAgKTsKCiAgICAjIGdldCBhIGNvdW50IG9mIGZvdW5kIGlkcwogICAgbXkgJENvdW50V29ya09yZGVySURzID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyU2VhcmNoKAogICAgICAgICV7ICRUZXN0LT57U2VhcmNoRGF0YX0gfSwKICAgICAgICBSZXN1bHQgICA9PiAnQ09VTlQnLAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgQ2hhbmdlSUQgPT4gJFdvcmtPcmRlckFkZFRlc3RJRCwKICAgICk7CgogICAgaWYgKCAkVGVzdC0+e1NlYXJjaEZhaWxzfSApIHsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgIWRlZmluZWQoJFdvcmtPcmRlcklEcyksCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFdvcmtPcmRlclNlYXJjaCgpIGlzIGV4cGVjdGVkIHRvIGZhaWwgKFJlc3VsdCA9PiAnQVJSQVknKSIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgIWRlZmluZWQoJENvdW50V29ya09yZGVySURzKSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogV29ya09yZGVyU2VhcmNoKCkgaXMgZXhwZWN0ZWQgdG8gZmFpbCAoUmVzdWx0ID0+ICdDT1VOVCcpIiwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGRlZmluZWQoJFdvcmtPcmRlcklEcykgJiYgcmVmKCRXb3JrT3JkZXJJRHMpIGVxICdBUlJBWScsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIGFycmF5IHJlZmVyZW5jZSBmb3IgV29ya09yZGVySURzLiIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgZGVmaW5lZCgkQ291bnRXb3JrT3JkZXJJRHMpICYmIHJlZiAkQ291bnRXb3JrT3JkZXJJRHMgZXEgJycsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIHNjYWxhciBmb3IgQ291bnRXb3JrT3JkZXJJRHMuIiwKICAgICAgICApOwogICAgfQoKICAgICRXb3JrT3JkZXJJRHMgfHw9IFtdOwogICAgJENvdW50V29ya09yZGVySURzIHx8PSAwOwoKICAgIGlmICggJFRlc3QtPntSZXN1bHREYXRhfS0+e1Rlc3RDb3VudH0gKSB7CgogICAgICAgICMgZ2V0IG51bWJlciBvZiB3b3Jrb3JkZXIgaWRzIFdvcmtPcmRlclNlYXJjaCBzaG91bGQgcmV0dXJuCiAgICAgICAgbXkgJEV4cGVjdGVkQ291bnQgPSBzY2FsYXIga2V5cyAleyAkV29ya09yZGVySURGb3JTZWFyY2hUZXN0eyRTZWFyY2hUZXN0Q291bnR9IH07CgogICAgICAgICMgZ2V0IGRlZmluZWQgZXhwZWN0ZWQgcmVzdWx0IGNvdW50IChkZWZpbmVkIGluIHNlYXJjaCB0ZXN0IGNhc2UhKQogICAgICAgIGlmICggZXhpc3RzICRUZXN0LT57UmVzdWx0RGF0YX0tPntDb3VudH0gKSB7CiAgICAgICAgICAgICRFeHBlY3RlZENvdW50ID0gJFRlc3QtPntSZXN1bHREYXRhfS0+e0NvdW50fTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgdGhlIG51bWJlciBvZiBJRHMgaW4gdGhlIHJldHVybmVkIGFycmF5cmVmCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICBzY2FsYXIgQHskV29ya09yZGVySURzfSwKICAgICAgICAgICAgJEV4cGVjdGVkQ291bnQsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIE51bWJlciBvZiBmb3VuZCB3b3Jrb3JkZXJzLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBXaGVuIGEgJ0xpbWl0JyBoYXMgYmVlbiBwYXNzZWQsIHRoZW4gdGhlIHJldHVybmVkIGNvdW50IG5vdCBuZWNlc3NhcmlseSBtYXRjaGVzCiAgICAgICAgIyB0aGUgbnVtYmVyIG9mIElEcyBpbiB0aGUgcmV0dXJuZWQgYXJyYXkuIEluIHRoYXQgY2FzZSB0ZXN0aW5nIGlzIGZ1dGlsZS4KICAgICAgICBpZiAoICEkVGVzdC0+e1NlYXJjaERhdGF9LT57TGltaXR9ICkgewogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkQ291bnRXb3JrT3JkZXJJRHMsCiAgICAgICAgICAgICAgICAkRXhwZWN0ZWRDb3VudCwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIE51bWJlciBvZiBmb3VuZCB3b3Jrb3JkZXJzIChSZXN1bHQgPT4gJ0NPVU5UJykuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkVGVzdC0+e1Jlc3VsdERhdGF9LT57VGVzdEV4aXN0ZW5jZX0gKSB7CgogICAgICAgICMgY2hlY2sgaWYgYWxsIGlkcyB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBzZWFyY2h0ZXN0IGFyZSByZXR1cm5lZAogICAgICAgIG15IEBXb3JrT3JkZXJJRHMgPSBrZXlzICV7ICRXb3JrT3JkZXJJREZvclNlYXJjaFRlc3R7JFNlYXJjaFRlc3RDb3VudH0gfTsKCiAgICAgICAgbXkgJVJldHVybmVkV29ya09yZGVySUQgPSBtYXAgeyAkXyA9PiAxIH0gQHskV29ya09yZGVySURzfTsKICAgICAgICBmb3IgbXkgJFdvcmtPcmRlcklEIChAV29ya09yZGVySURzKSB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFJldHVybmVkV29ya09yZGVySUR7JFdvcmtPcmRlcklEfSwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIFdvcmtPcmRlcklEICRXb3JrT3JkZXJJRCBmb3VuZCBpbiByZXR1cm5lZCBsaXN0LiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQp9CmNvbnRpbnVlIHsKICAgICRUZXN0Q291bnQrKzsKICAgICRTZWFyY2hUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGRlZmluZSB3b3Jrb3JkZXIgc2VhcmNoIHRlc3RzIGZvciAnT3JkZXJCeScgc2VhcmNoZXMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgdGhyZWUgY2hhbmdlIGlkcy4gVGhlbiBnZXQgdGhlIGRhdGEuIFRoYXQgaXMgbmVlZGVkIGZvciBzb3J0aW5nCm15IEBXb3JrT3JkZXJJRHNGb3JPcmRlckJ5VGVzdHMgPSBrZXlzICV7ICRXb3JrT3JkZXJJREZvclNlYXJjaFRlc3R7OTk5OTk5fSB9OwpteSBAV29ya09yZGVyc0Zvck9yZGVyQnlUZXN0czsKCmZvciBteSAkV29ya09yZGVySURGb3JPcmRlckJ5VGVzdHMgKEBXb3JrT3JkZXJJRHNGb3JPcmRlckJ5VGVzdHMpIHsKICAgIG15ICRXb3JrT3JkZXJEYXRhID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyR2V0KAogICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJREZvck9yZGVyQnlUZXN0cywKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKCiAgICAjIGNvbnZlcnQgdGltZSBzdHJpbmcgdG8gbnVtYmVycyAtIHRoYXQncyBiZXR0ZXIgZm9yIHRoZSBjb21wYXJpc29ucwogICAgZm9yIG15ICRUaW1lQ29sdW1uIChxdyhDcmVhdGVUaW1lIENoYW5nZVRpbWUpKSB7CiAgICAgICAgJFdvcmtPcmRlckRhdGEtPnskVGltZUNvbHVtbn0gPX4gc3sgXEQgfXt9eG1zZzsKICAgIH0KCiAgICBwdXNoIEBXb3JrT3JkZXJzRm9yT3JkZXJCeVRlc3RzLCAkV29ya09yZGVyRGF0YTsKfQoKbXkgQE9yZGVyQnlDb2x1bW5zID0gcXcoCiAgICBXb3JrT3JkZXJJRAogICAgV29ya09yZGVyTnVtYmVyCiAgICBXb3JrT3JkZXJUaXRsZQogICAgV29ya09yZGVyU3RhdGVJRAogICAgV29ya09yZGVyVHlwZUlECiAgICBDcmVhdGVCeQogICAgQ2hhbmdlQnkKICAgIENyZWF0ZVRpbWUKICAgIENoYW5nZVRpbWUKKTsKCmZvciBteSAkT3JkZXJCeUNvbHVtbiAoQE9yZGVyQnlDb2x1bW5zKSB7CgogICAgIyB0dXJuIG9mZiBhbGwgcHJldHR5IHByaW50CiAgICBsb2NhbCAkRGF0YTo6RHVtcGVyOjpJbmRlbnQgPSAwOwogICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6VXNlcXEgID0gMTsKCiAgICAjIFdvcmtPcmRlclNlYXJjaCgpIHNvcnRzIHRoZSBJRC1GaWVsZHMgbnVtZXJpY2FsbHksIHRoZSBzdHJpbmcgZmllbGRzIGFscGhhYmV0aWNhbGx5LgogICAgIyB0aGUgc29ydGluZyBpcyBjb21wbGV0ZWx5IGRldGVybWluZWQgYnkgdGhlIHNlY29uZCBjb21wYXJpc29uCiAgICBteSBAU29ydGVkV29ya09yZGVyczsKICAgIGlmICggJE9yZGVyQnlDb2x1bW4gZXEgJ1dvcmtPcmRlclRpdGxlJyApIHsKICAgICAgICBAU29ydGVkV29ya09yZGVycyA9IHNvcnQgewogICAgICAgICAgICAkYS0+eyRPcmRlckJ5Q29sdW1ufSBjbXAgJGItPnskT3JkZXJCeUNvbHVtbn0KICAgICAgICAgICAgICAgIHx8ICRiLT57V29ya09yZGVySUR9IDw9PiAkYS0+e1dvcmtPcmRlcklEfQogICAgICAgIH0gQFdvcmtPcmRlcnNGb3JPcmRlckJ5VGVzdHM7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBAU29ydGVkV29ya09yZGVycyA9IHNvcnQgewogICAgICAgICAgICAkYS0+eyRPcmRlckJ5Q29sdW1ufSA8PT4gJGItPnskT3JkZXJCeUNvbHVtbn0KICAgICAgICAgICAgICAgIHx8ICRiLT57V29ya09yZGVySUR9IDw9PiAkYS0+e1dvcmtPcmRlcklEfQogICAgICAgIH0gQFdvcmtPcmRlcnNGb3JPcmRlckJ5VGVzdHM7CiAgICB9CiAgICBteSBAU29ydGVkSURzID0gbWFwIHsgJF8tPntXb3JrT3JkZXJJRH0gfSBAU29ydGVkV29ya09yZGVyczsKCiAgICAjIGR1bXAgdGhlIHJlZmVyZW5jZSBhdHRyaWJ1dGUKICAgIG15ICRSZWZlcmVuY2VMaXN0ID0gRGF0YTo6RHVtcGVyOjpEdW1wZXIoIFxAU29ydGVkSURzICk7ICAgICMjIG5vIGNyaXRpYwoKICAgIG15ICRTZWFyY2hSZXN1bHQgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJTZWFyY2goCiAgICAgICAgQ2hhbmdlSURzICAgICAgICA9PiBbJE9yZGVyQnlUZXN0SURdLAogICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gWyRPcmRlckJ5Q29sdW1uXSwKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsnVXAnXSwKICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgICMgZHVtcCB0aGUgYXR0cmlidXRlIGZyb20gV29ya09yZGVyR2V0KCkKICAgIG15ICRTZWFyY2hMaXN0ID0gRGF0YTo6RHVtcGVyOjpEdW1wZXIoJFNlYXJjaFJlc3VsdCk7ICAgICAgICMjIG5vIGNyaXRpYwoKICAgICRTZWxmLT5JcygKICAgICAgICAkU2VhcmNoTGlzdCwKICAgICAgICAkUmVmZXJlbmNlTGlzdCwKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIjogV29ya09yZGVyU2VhcmNoKCkgT3JkZXJCeSAkT3JkZXJCeUNvbHVtbiAoVXApLiIKICAgICk7CgogICAgIyBzb3J0IGluIHRoZSBvdGhlciBkaXJlY3Rpb24KCiAgICAjIFdvcmtPcmRlclNlYXJjaCgpIHNvcnRzIHRoZSBJRC1GaWVsZHMgbnVtZXJpY2FsbHksIHRoZSBzdHJpbmcgZmllbGRzIGFscGhhYmV0aWNhbGx5LgogICAgIyB0aGUgc29ydGluZyBpcyBjb21wbGV0ZWx5IGRldGVybWluZWQgYnkgdGhlIHNlY29uZCBjb21wYXJpc29uCiAgICBpZiAoICRPcmRlckJ5Q29sdW1uIGVxICdXb3JrT3JkZXJUaXRsZScgKSB7CiAgICAgICAgQFNvcnRlZFdvcmtPcmRlcnMgPSBzb3J0IHsKICAgICAgICAgICAgJGItPnskT3JkZXJCeUNvbHVtbn0gY21wICRhLT57JE9yZGVyQnlDb2x1bW59CiAgICAgICAgICAgICAgICB8fCAkYi0+e1dvcmtPcmRlcklEfSA8PT4gJGEtPntXb3JrT3JkZXJJRH0KICAgICAgICB9IEBXb3JrT3JkZXJzRm9yT3JkZXJCeVRlc3RzOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgQFNvcnRlZFdvcmtPcmRlcnMgPSBzb3J0IHsKICAgICAgICAgICAgJGItPnskT3JkZXJCeUNvbHVtbn0gPD0+ICRhLT57JE9yZGVyQnlDb2x1bW59CiAgICAgICAgICAgICAgICB8fCAkYi0+e1dvcmtPcmRlcklEfSA8PT4gJGEtPntXb3JrT3JkZXJJRH0KICAgICAgICB9IEBXb3JrT3JkZXJzRm9yT3JkZXJCeVRlc3RzOwogICAgfQogICAgbXkgQFNvcnRlZElEc0Rvd24gPSBtYXAgeyAkXy0+e1dvcmtPcmRlcklEfSB9IEBTb3J0ZWRXb3JrT3JkZXJzOwoKICAgICMgZHVtcCB0aGUgcmVmZXJlbmNlIGF0dHJpYnV0ZQogICAgbXkgJFJlZmVyZW5jZUxpc3REb3duID0gRGF0YTo6RHVtcGVyOjpEdW1wZXIoIFxAU29ydGVkSURzRG93biApOyAgICAjIyBubyBjcml0aWMKCiAgICBteSAkU2VhcmNoUmVzdWx0RG93biA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclNlYXJjaCgKICAgICAgICBDaGFuZ2VJRHMgPT4gWyRPcmRlckJ5VGVzdElEXSwKICAgICAgICBPcmRlckJ5ICAgPT4gWyRPcmRlckJ5Q29sdW1uXSwKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgIyBkdW1wIHRoZSBhdHRyaWJ1dGUgZnJvbSBXb3JrT3JkZXJHZXQoKQogICAgbXkgJFNlYXJjaExpc3REb3duID0gRGF0YTo6RHVtcGVyOjpEdW1wZXIoJFNlYXJjaFJlc3VsdERvd24pOyAgICAgICAjIyBubyBjcml0aWMKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFNlYXJjaExpc3REb3duLAogICAgICAgICRSZWZlcmVuY2VMaXN0RG93biwKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIjogV29ya09yZGVyU2VhcmNoKCkgT3JkZXJCeSAkT3JkZXJCeUNvbHVtbiAoRG93bikuIgogICAgKTsKCiAgICAjIGNoZWNrIGlmIFdvcmtPcmRlci5wbSBoYW5kbGVzIG5vbi1leGlzdGVudCBPcmRlckJ5RGlyZWN0aW9uIGNyaXRlcmlhIGNvcnJlY3QKICAgIG15ICRTZWFyY2hSZXN1bHRTaWRld2F5cyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclNlYXJjaCgKICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICdXb3JrT3JkZXJBZGQoKSBmb3IgT3JkZXJCeSAtIFRpdGxlIC0gJyAuICRVbmlxdWVTaWduYXR1cmUsCiAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBbJE9yZGVyQnlDb2x1bW5dLAogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWydTaWRld2F5cyddLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRTZWFyY2hSZXN1bHRTaWRld2F5cywKICAgICAgICB1bmRlZiwKICAgICAgICAnVGVzdCAnIC4gJFRlc3RDb3VudCsrIC4gIjogV29ya09yZGVyU2VhcmNoKCkgT3JkZXJCeSAkT3JkZXJCeUNvbHVtbiAoU2lkZXdheXMpLiIKICAgICk7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyB0ZXN0IHNvcnRpbmcgb2YgY2hhbmdlcyAoc29tZSBoYXZlIG5vIHdvcmtvcmRlciwgb3RoZXJzIGhhdmUgc2V2ZXJhbCB3b3Jrb3JkZXJzKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCm15ICVJRHNUb0RlbGV0ZSA9ICgKICAgIENoYW5nZSAgICA9PiBbXSwKICAgIFdvcmtPcmRlciA9PiBbXSwKKTsKbXkgJENoYW5nZXNUaXRsZSAgICAgICA9ICdDaGFuZ2VTZWFyY2hPcmRlckJ5VGltZXMgLSAnIC4gJFVuaXF1ZVNpZ25hdHVyZTsKbXkgQENoYW5nZXNGb3JTb3J0VGVzdCA9ICgKICAgIHsKICAgICAgICBDaGFuZ2UgPT4gewogICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAkQ2hhbmdlc1RpdGxlLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgV29ya29yZGVycyA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZSA9PiAnMjAwOS0wNi0zMCAwOTozMzoxMicsCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lICAgPT4gJzIwMDktMDktMDEgMDE6MTI6NTUnLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgQ2hhbmdlID0+IHsKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJENoYW5nZXNUaXRsZSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICB9LAogICAgICAgIFdvcmtvcmRlcnMgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBQbGFubmVkU3RhcnRUaW1lID0+ICcyMDA5LTAyLTIxIDEzOjI1OjA5JywKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lICAgPT4gJzIwMDktMTAtMTMgMjI6MTU6NTYnLAogICAgICAgICAgICAgICAgQWN0dWFsU3RhcnRUaW1lICA9PiAnMjAwOS0wNS0zMSAwOTozMzoxMicsCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lICAgID0+ICcyMDA5LTEwLTAxIDAxOjEyOjU1JywKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZSA9PiAnMjAwOS0wMy0yNSAxMzoyNTowOScsCiAgICAgICAgICAgICAgICBQbGFubmVkRW5kVGltZSAgID0+ICcyMDA5LTA5LTEzIDIyOjE1OjU2JywKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZSAgPT4gJzIwMDktMDYtMDEgMDk6MzM6MTInLAogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZSAgICA9PiAnMjAwOS0xMS0wMSAwMToxMjo1NScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgQ2hhbmdlID0+IHsKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgPT4gJENoYW5nZXNUaXRsZSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICB9LAogICAgICAgIFdvcmtvcmRlcnMgPT4gW10sCiAgICB9LAogICAgewogICAgICAgIENoYW5nZSA9PiB7CiAgICAgICAgICAgIENoYW5nZVRpdGxlID0+ICRDaGFuZ2VzVGl0bGUsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBXb3Jrb3JkZXJzID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZSA9PiAnMjAwOS0wMy0yMSAxMzoyNTowOScsCiAgICAgICAgICAgICAgICBQbGFubmVkRW5kVGltZSAgID0+ICcyMDA5LTEwLTEzIDIyOjE1OjU2JywKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZSAgPT4gJzIwMDktMDYtMzAgMDk6MzM6MTInLAogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZSAgICA9PiAnMjAwOS0wOS0wMSAwMToxMjo1NScsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJzIwMDktMDMtMjAgMTM6MjU6MDknLAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWUgICA9PiAnMjAwOS0xMC0xMiAyMjoxNTo1NicsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJzIwMDktMDMtMjIgMTM6MjU6MDknLAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWUgICA9PiAnMjAwOS0xMC0xMSAyMjoxNTo1NicsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgIH0sCik7CgpteSBAQ2hhbmdlSURzRm9yU29ydFRlc3Q7CmZvciBteSAkQ2hhbmdlIChAQ2hhbmdlc0ZvclNvcnRUZXN0KSB7CgogICAgIyBjcmVhdGUgY2hhbmdlCiAgICBteSAkQ2hhbmdlSUQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoICV7ICRDaGFuZ2UtPntDaGFuZ2V9IH0gKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2hhbmdlIGZvciBzb3J0IHRlc3QgY3JlYXRlZCIsCiAgICApOwoKICAgICMgc3RvcmUgQ2hhbmdlSUQKICAgIHB1c2ggQENoYW5nZUlEc0ZvclNvcnRUZXN0LCAkQ2hhbmdlSUQ7CiAgICBwdXNoIEB7ICRJRHNUb0RlbGV0ZXtDaGFuZ2V9IH0sICRDaGFuZ2VJRDsKCiAgICAjIGFkZCB0aGUgd29ya29yZGVycyBmb3IgdGhlIGNoYW5nZQogICAgbXkgJFdvcmtPcmRlckNvdW50ID0gMTsKICAgIGZvciBteSAkV29ya09yZGVyICggQHsgJENoYW5nZS0+e1dvcmtvcmRlcnN9IH0gKSB7CiAgICAgICAgbXkgJFdvcmtPcmRlcklEID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQWRkKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICV7JFdvcmtPcmRlcn0sCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogV29ya09yZGVyICRXb3JrT3JkZXJDb3VudCBmb3IgQ2hhbmdlIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQHsgJElEc1RvRGVsZXRle1dvcmtPcmRlcn0gfSwgJFdvcmtPcmRlcklEOwoKICAgICAgICAkV29ya09yZGVyQ291bnQrKzsKICAgIH0KCiAgICAjIGNoZWNrIHdoZXRoZXIgdGhlIHdvcmtvcmRlcnMgd2VyZSBhZGRlZAogICAgbXkgJENoYW5nZURhdGEgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPklzKAogICAgICAgICRDaGFuZ2VEYXRhLT57V29ya09yZGVyQ291bnR9LAogICAgICAgIHNjYWxhciBAeyAkQ2hhbmdlLT57V29ya29yZGVyc30gfSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBDaGFuZ2VHZXQoKTogd29ya29yZGVycyB3ZXJlIGFkZGVkIgogICAgKTsKfQpjb250aW51ZSB7CiAgICAkVGVzdENvdW50Kys7Cn0KCm15IEBUZXN0cGxhbiA9ICgKICAgIFsgMCwgMywgMSwgMiBdLCAgICAjIGluZGV4IG9mIGNoYW5nZXMgaW4gQENoYW5nZUlEc0ZvclNvcnRUZXN0CiAgICBbIDAsIDEsIDMsIDIgXSwKICAgIFsgMCwgMywgMSwgMiBdLAogICAgWyAzLCAxLCAwLCAyIF0sCik7CgojIERvIHRoZSB0ZXN0aW5nCm15ICRPcmRlckJ5VGVzdENvdW50ID0gMDsKZm9yIG15ICRPcmRlckJ5Q29sdW1uIChxdyhQbGFubmVkU3RhcnRUaW1lIFBsYW5uZWRFbmRUaW1lIEFjdHVhbFN0YXJ0VGltZSBBY3R1YWxFbmRUaW1lKSkgewoKICAgICMgdHVybiBvZmYgYWxsIHByZXR0eSBwcmludAogICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6SW5kZW50ID0gMDsKICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OlVzZXFxICA9IDE7CgogICAgIyBnZXQgdGhlIGN1cnJlbnQgcmVmZXJlbmNlIGFycmF5CiAgICBteSBAVGVzdHBsYW5BbHRlcm5hdGl2ZSA9IEB7ICRUZXN0cGxhblskT3JkZXJCeVRlc3RDb3VudF0gfTsKCiAgICAjIHBsYWNlIHRoZSBsYXN0IGVsZW1lbnQgYXQgZnJvbnQgb2YgdGhlIGFycmF5CiAgICAjIHNvbWUgREJzIHNvcnQgdGhlIE5VTExzIHZhbHVlcyBhdCBmcm9udCBvZiB0aGUgcmVzdWx0IHNldAogICAgbXkgJExhc3QgPSBwb3AgQFRlc3RwbGFuQWx0ZXJuYXRpdmU7CiAgICB1bnNoaWZ0IEBUZXN0cGxhbkFsdGVybmF0aXZlLCAkTGFzdDsKCiAgICAjIHJlc3VsdCB3aGF0IHdlIGV4cGVjdAogICAgbXkgQFJlc3VsdFJlZmVyZW5jZSAgICAgICAgICAgID0gbWFwIHsgJENoYW5nZUlEc0ZvclNvcnRUZXN0WyRfXSB9IEB7ICRUZXN0cGxhblskT3JkZXJCeVRlc3RDb3VudF0gfTsKICAgIG15IEBSZXN1bHRSZWZlcmVuY2VBbHRlcm5hdGl2ZSA9IG1hcCB7ICRDaGFuZ2VJRHNGb3JTb3J0VGVzdFskX10gfSBAVGVzdHBsYW5BbHRlcm5hdGl2ZTsKCiAgICAjIHNlYXJjaCB3aXRoIGRpcmVjdGlvbiAnRE9XTicKICAgIG15ICRTZWFyY2hSZXN1bHQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VTZWFyY2goCiAgICAgICAgQ2hhbmdlVGl0bGUgICAgICA9PiAkQ2hhbmdlc1RpdGxlLAogICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gWyAkT3JkZXJCeUNvbHVtbiwgJ0NoYW5nZUlEJyBdLAogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWyAnRG93bicsICdVcCcgXSwKICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgIGlmICgKICAgICAgICBEYXRhOjpEdW1wZXI6OkR1bXBlcigkU2VhcmNoUmVzdWx0KSAgICAgICAgICAgICAjIyBubyBjcml0aWMKICAgICAgICBlcSBEYXRhOjpEdW1wZXI6OkR1bXBlciggXEBSZXN1bHRSZWZlcmVuY2UgKSAgICAjIyBubyBjcml0aWMKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICBEYXRhOjpEdW1wZXI6OkR1bXBlcigkU2VhcmNoUmVzdWx0KSwgICAgICAgICAgIyMgbm8gY3JpdGljCiAgICAgICAgICAgIERhdGE6OkR1bXBlcjo6RHVtcGVyKCBcQFJlc3VsdFJlZmVyZW5jZSApLCAgICAjIyBubyBjcml0aWMKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2hhbmdlU2VhcmNoIE9yZGVyQnkgJE9yZGVyQnlDb2x1bW4gKERvd24pIiwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKAogICAgICAgIERhdGE6OkR1bXBlcjo6RHVtcGVyKCRTZWFyY2hSZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgIyMgbm8gY3JpdGljCiAgICAgICAgZXEgRGF0YTo6RHVtcGVyOjpEdW1wZXIoIFxAUmVzdWx0UmVmZXJlbmNlQWx0ZXJuYXRpdmUgKSAgICAjIyBubyBjcml0aWMKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICBEYXRhOjpEdW1wZXI6OkR1bXBlcigkU2VhcmNoUmVzdWx0KSwgICAgICAgICAgICAgICAgICAgICAjIyBubyBjcml0aWMKICAgICAgICAgICAgRGF0YTo6RHVtcGVyOjpEdW1wZXIoIFxAUmVzdWx0UmVmZXJlbmNlQWx0ZXJuYXRpdmUgKSwgICAgIyMgbm8gY3JpdGljCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENoYW5nZVNlYXJjaCBPcmRlckJ5ICRPcmRlckJ5Q29sdW1uIChEb3duKSIsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgRGF0YTo6RHVtcGVyOjpEdW1wZXIoJFNlYXJjaFJlc3VsdCksICAgICAgICAgICAgICAgICAgICAgIyMgbm8gY3JpdGljCiAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDaGFuZ2VTZWFyY2ggT3JkZXJCeSAkT3JkZXJCeUNvbHVtbiAoRG93bikiLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZWFyY2ggd2l0aCBkaXJlY3Rpb24gJ1VQJwogICAgbXkgJFNlYXJjaFJlc3VsdFVwID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlU2VhcmNoKAogICAgICAgIENoYW5nZVRpdGxlICAgICAgPT4gJENoYW5nZXNUaXRsZSwKICAgICAgICBPcmRlckJ5ICAgICAgICAgID0+IFsgJE9yZGVyQnlDb2x1bW4sICdDaGFuZ2VJRCcgXSwKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsgJ1VwJywgJ0Rvd24nIF0sCiAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgKTsKCiAgICBpZiAoCiAgICAgICAgRGF0YTo6RHVtcGVyOjpEdW1wZXIoJFNlYXJjaFJlc3VsdFVwKSAgICAjIyBubyBjcml0aWMKICAgICAgICBlcSBEYXRhOjpEdW1wZXI6OkR1bXBlciggWyByZXZlcnNlIEBSZXN1bHRSZWZlcmVuY2UgXSApICAgICMjIG5vIGNyaXRpYwogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIERhdGE6OkR1bXBlcjo6RHVtcGVyKCRTZWFyY2hSZXN1bHRVcCksICAgICAgICAgICAgICAgICAjIyBubyBjcml0aWMKICAgICAgICAgICAgRGF0YTo6RHVtcGVyOjpEdW1wZXIoIFsgcmV2ZXJzZSBAUmVzdWx0UmVmZXJlbmNlIF0gKSwgICMjIG5vIGNyaXRpYwogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDaGFuZ2VTZWFyY2ggT3JkZXJCeSAkT3JkZXJCeUNvbHVtbiAoVXApIiwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKAogICAgICAgIERhdGE6OkR1bXBlcjo6RHVtcGVyKCRTZWFyY2hSZXN1bHRVcCkgICAgICAgICAgICAgICAgICAgICAgIyMgbm8gY3JpdGljCiAgICAgICAgZXEgRGF0YTo6RHVtcGVyOjpEdW1wZXIoIFsgcmV2ZXJzZSBAUmVzdWx0UmVmZXJlbmNlQWx0ZXJuYXRpdmUgXSApICAgICMjIG5vIGNyaXRpYwogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIERhdGE6OkR1bXBlcjo6RHVtcGVyKCRTZWFyY2hSZXN1bHRVcCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIG5vIGNyaXRpYwogICAgICAgICAgICBEYXRhOjpEdW1wZXI6OkR1bXBlciggWyByZXZlcnNlIEBSZXN1bHRSZWZlcmVuY2VBbHRlcm5hdGl2ZSBdICksICAjIyBubyBjcml0aWMKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2hhbmdlU2VhcmNoIE9yZGVyQnkgJE9yZGVyQnlDb2x1bW4gKFVwKSIsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgRGF0YTo6RHVtcGVyOjpEdW1wZXIoJFNlYXJjaFJlc3VsdFVwKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgbm8gY3JpdGljCiAgICAgICAgICAgIHVuZGVmLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDaGFuZ2VTZWFyY2ggT3JkZXJCeSAkT3JkZXJCeUNvbHVtbiAoVXApIiwKICAgICAgICApOwogICAgfQoKICAgICRPcmRlckJ5VGVzdENvdW50Kys7CiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBhZHZhbmNlZCBzZWFyY2ggYnkgdGVzdHMgZm9yIHRpbWVzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15IEBUaW1lU2VhcmNoVGVzdHMgPSAoCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0ZpcnN0IHdvcmtvcmRlciBpbiB0aGUgMTl0aCBjZW50dXJ5LicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZSA9PiAnMTkwOS0wMS0wMSAwMDowMDowMCcsCiAgICAgICAgICAgICAgICBQbGFubmVkRW5kVGltZSAgID0+ICcxOTA5LTAxLTMwIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZSAgPT4gJzE5MDktMDEtMDIgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZSAgICA9PiAnMTkwOS0wMS0yOSAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlY29uZCB3b3Jrb3JkZXIgaW4gdGhlIDE5dGggY2VudHVyeS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZSA9PiAnMTkwOS0wMS0xMCAwMDowMDowMCcsCiAgICAgICAgICAgICAgICBQbGFubmVkRW5kVGltZSAgID0+ICcxOTA5LTAxLTIwIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZSAgPT4gJzE5MDktMDEtMTEgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZSAgICA9PiAnMTkwOS0wMS0xOSAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1RoaXJkIGNoYW5nZSB3aXRoIG9uZSB3b3Jrb3JkZXIgaW4gdGhlIDE5dGggY2VudHVyeS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZSA9PiAnMTkwOS0wMi0wMSAwMDowMDowMCcsCiAgICAgICAgICAgICAgICBQbGFubmVkRW5kVGltZSAgID0+ICcxOTA5LTAyLTI3IDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZSAgPT4gJzE5MDktMDItMDIgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZSAgICA9PiAnMTkwOS0wMi0yNiAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0ZvdXJ0aCB3b3Jrb3JkZXIgaW4gdGhlIDE5dGggY2VudHVyeS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZSA9PiAnMTkwOS0wMy0wMSAwMDowMDowMCcsCiAgICAgICAgICAgICAgICBQbGFubmVkRW5kVGltZSAgID0+ICcxOTA5LTA0LTA3IDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZSAgPT4gJzE5MDktMDItMjAgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZSAgICA9PiAnMTkwOS0wNS0wMSAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKICAgICMgdGVzdCBmb3IgcGxhbm5lZCBzdGFydCB0aW1lCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIFBsYW5uZWRTdGFydFRpbWVOZXdlckRhdGUgYW5kIFBsYW5uZWRTdGFydFRpbWVPbGRlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlclNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQbGFubmVkU3RhcnRUaW1lTmV3ZXJEYXRlID0+ICcxOTA5LTAxLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWVPbGRlckRhdGUgPT4gJzE5MDktMDEtMDIgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgIDAsCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgUGxhbm5lZFN0YXJ0VGltZU5ld2VyRGF0ZSBhbmQgUGxhbm5lZFN0YXJ0VGltZU9sZGVyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWVOZXdlckRhdGUgPT4gJzE5MDgtMTItMDEgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZU9sZGVyRGF0ZSA9PiAnMTkwOC0xMi0zMSAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFtdLAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBQbGFubmVkU3RhcnRUaW1lTmV3ZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZU5ld2VyRGF0ZSA9PiAnMTkwOS0wMi0wMSAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsgMiwgMywgXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgUGxhbm5lZFN0YXJ0VGltZU5ld2VyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWVOZXdlckRhdGUgPT4gJzE5MDktMTItMDEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgUGxhbm5lZFN0YXJ0VGltZU9sZGVyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWVPbGRlckRhdGUgPT4gJzE5MDktMDEtMTAgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbIDAsIDEsIF0sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIFBsYW5uZWRTdGFydFRpbWVPbGRlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlclNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQbGFubmVkU3RhcnRUaW1lT2xkZXJEYXRlID0+ICcxOTA4LTAxLTMxIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gW10sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIFBsYW5uZWRTdGFydFRpbWVOZXdlckRhdGUgYW5kIFBsYW5uZWRTdGFydFRpbWVPbGRlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlclNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQbGFubmVkU3RhcnRUaW1lTmV3ZXJEYXRlID0+ICcxOTA5LTEyLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWVPbGRlckRhdGUgPT4gJzE5MDgtMTItMDEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKICAgICMgdGVzdCBmb3IgcGxhbm5lZCBlbmQgdGltZQogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBQbGFubmVkRW5kVGltZU5ld2VyRGF0ZSBhbmQgUGxhbm5lZEVuZFRpbWVPbGRlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlclNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWVOZXdlckRhdGUgPT4gJzE5MDktMDEtMzAgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWVPbGRlckRhdGUgPT4gJzE5MDktMDEtMzEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgIDAsCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgUGxhbm5lZEVuZFRpbWVOZXdlckRhdGUgYW5kIFBsYW5uZWRFbmRUaW1lT2xkZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lTmV3ZXJEYXRlID0+ICcxOTA4LTEyLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lT2xkZXJEYXRlID0+ICcxOTA4LTEyLTMxIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gW10sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIFBsYW5uZWRFbmRUaW1lTmV3ZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lTmV3ZXJEYXRlID0+ICcxOTA5LTAyLTI3IDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWyAyLCAzLCBdLAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBQbGFubmVkRW5kVGltZU5ld2VyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQbGFubmVkRW5kVGltZU5ld2VyRGF0ZSA9PiAnMTkwOS0wNS0wMSAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFtdLAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBQbGFubmVkRW5kVGltZU9sZGVyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQbGFubmVkRW5kVGltZU9sZGVyRGF0ZSA9PiAnMTkwOS0wMS0yNSAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsgMSwgXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgUGxhbm5lZEVuZFRpbWVPbGRlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlclNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWVPbGRlckRhdGUgPT4gJzE5MDgtMDEtMzEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgUGxhbm5lZEVuZFRpbWVOZXdlckRhdGUgYW5kIFBsYW5uZWRFbmRUaW1lT2xkZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lTmV3ZXJEYXRlID0+ICcxOTA5LTA1LTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lT2xkZXJEYXRlID0+ICcxOTA4LTEyLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gW10sCiAgICB9LAoKICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiAgICAjIHRlc3QgZm9yIGFjdHVhbCBzdGFydCB0aW1lCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIEFjdHVhbFN0YXJ0VGltZU5ld2VyRGF0ZSBhbmQgQWN0dWFsU3RhcnRUaW1lT2xkZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWVOZXdlckRhdGUgPT4gJzE5MDktMDEtMDIgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgQWN0dWFsU3RhcnRUaW1lT2xkZXJEYXRlID0+ICcxOTA5LTAxLTAyIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWwogICAgICAgICAgICAwLAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIEFjdHVhbFN0YXJ0VGltZU5ld2VyRGF0ZSBhbmQgQWN0dWFsU3RhcnRUaW1lT2xkZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWVOZXdlckRhdGUgPT4gJzE5MDgtMTItMDEgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgQWN0dWFsU3RhcnRUaW1lT2xkZXJEYXRlID0+ICcxOTA4LTEyLTMxIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gW10sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIEFjdHVhbFN0YXJ0VGltZU5ld2VyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQWN0dWFsU3RhcnRUaW1lTmV3ZXJEYXRlID0+ICcxOTA5LTAyLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gWyAyLCAzLCBdLAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBBY3R1YWxTdGFydFRpbWVOZXdlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlclNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZU5ld2VyRGF0ZSA9PiAnMTkwOS0xMi0zMCAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFtdLAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBBY3R1YWxTdGFydFRpbWVPbGRlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlclNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZU9sZGVyRGF0ZSA9PiAnMTkwOS0wMS0xMiAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsgMCwgMSwgXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgQWN0dWFsU3RhcnRUaW1lT2xkZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWVPbGRlckRhdGUgPT4gJzE5MDgtMDEtMzEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgQWN0dWFsU3RhcnRUaW1lTmV3ZXJEYXRlIGFuZCBBY3R1YWxTdGFydFRpbWVPbGRlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlclNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZU5ld2VyRGF0ZSA9PiAnMTkwOS0xMi0wMSAwMDowMDowMCcsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWVPbGRlckRhdGUgPT4gJzE5MDgtMTItMDEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKICAgICMgdGVzdCBmb3IgYWN0dWFsIGVuZCB0aW1lCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIEFjdHVhbEVuZFRpbWVOZXdlckRhdGUgYW5kIEFjdHVhbEVuZFRpbWVPbGRlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlclNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lTmV3ZXJEYXRlID0+ICcxOTA5LTAxLTI4IDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIEFjdHVhbEVuZFRpbWVPbGRlckRhdGUgPT4gJzE5MDktMDEtMjkgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbCiAgICAgICAgICAgIDAsCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgQWN0dWFsRW5kVGltZU5ld2VyRGF0ZSBhbmQgQWN0dWFsRW5kVGltZU9sZGVyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEFjdHVhbEVuZFRpbWVOZXdlckRhdGUgPT4gJzE5MDgtMTItMDEgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZU9sZGVyRGF0ZSA9PiAnMTkwOC0xMi0zMSAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFtdLAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnU2VhcmNoIGZvciBBY3R1YWxFbmRUaW1lTmV3ZXJEYXRlLicsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJTZWFyY2ggPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZU5ld2VyRGF0ZSA9PiAnMTkwOS0wMi0yNiAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IFsgMiwgMywgXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgQWN0dWFsRW5kVGltZU5ld2VyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEFjdHVhbEVuZFRpbWVOZXdlckRhdGUgPT4gJzE5MDktMTItMDEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1NlYXJjaCBmb3IgQWN0dWFsRW5kVGltZU9sZGVyRGF0ZS4nLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgV29ya09yZGVyU2VhcmNoID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEFjdHVhbEVuZFRpbWVPbGRlckRhdGUgPT4gJzE5MDktMDEtMjkgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbIDAsIDEsIF0sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIEFjdHVhbEVuZFRpbWVPbGRlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlclNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lT2xkZXJEYXRlID0+ICcxOTA4LTEyLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gW10sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdTZWFyY2ggZm9yIEFjdHVhbEVuZFRpbWVOZXdlckRhdGUgYW5kIEFjdHVhbEVuZFRpbWVPbGRlckRhdGUuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlclNlYXJjaCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lTmV3ZXJEYXRlID0+ICcxOTA5LTEyLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIEFjdHVhbEVuZFRpbWVPbGRlckRhdGUgPT4gJzE5MDgtMTItMzEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiBbXSwKICAgIH0sCgopOwoKbXkgJFRTVENvdW50ZXIgPSAxOwpteSBAVFNUV29ya09yZGVySURzOwpUU1RFU1Q6CmZvciBteSAkVFNUZXN0IChAVGltZVNlYXJjaFRlc3RzKSB7CiAgICBteSAkU291cmNlRGF0YSAgICA9ICRUU1Rlc3QtPntTb3VyY2VEYXRhfTsKICAgIG15ICRSZWZlcmVuY2VEYXRhID0gJFRTVGVzdC0+e1JlZmVyZW5jZURhdGF9OwoKICAgIG15ICRXb3JrT3JkZXJJRDsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAxLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6ICRUU1Rlc3QtPntEZXNjcmlwdGlvbn0gKFRTVGVzdCBjYXNlOiAkVFNUQ291bnRlcikiLAogICAgKTsKCiAgICBpZiAoICRTb3VyY2VEYXRhLT57V29ya09yZGVyQWRkfSApIHsKICAgICAgICAkV29ya09yZGVySUQgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBZGQoCiAgICAgICAgICAgICV7ICRTb3VyY2VEYXRhLT57V29ya09yZGVyQWRkfSB9LAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkVGltZVNlYXJjaFRlc3RJRCwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFdvcmtPcmRlcklELAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBXb3JrT3JkZXJBZGQiLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQFRTVFdvcmtPcmRlcklEcywgJFdvcmtPcmRlcklEOwogICAgICAgIHB1c2ggQHsgJElEc1RvRGVsZXRle1dvcmtPcmRlcn0gfSwgJFdvcmtPcmRlcklEOwogICAgfQoKICAgIG15ICRTZWFyY2hSZXN1bHQ7CiAgICBpZiAoICRTb3VyY2VEYXRhLT57V29ya09yZGVyU2VhcmNofSApIHsKICAgICAgICAkU2VhcmNoUmVzdWx0ID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyU2VhcmNoKAogICAgICAgICAgICAleyAkU291cmNlRGF0YS0+e1dvcmtPcmRlclNlYXJjaH0gfSwKICAgICAgICAgICAgQ2hhbmdlSURzID0+IFskVGltZVNlYXJjaFRlc3RJRF0sCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWFyY2hSZXN1bHQgJiYgcmVmICRTZWFyY2hSZXN1bHQgZXEgJ0FSUkFZJywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogV29ya09yZGVyU2VhcmNoKCkgLSBMaXN0IGlzIGFuIGFycmF5IHJlZmVyZW5jZS4iLAogICAgICAgICk7CgogICAgICAgIG5leHQgVFNURVNUIGlmICEkU2VhcmNoUmVzdWx0OwoKICAgICAgICAjIGNoZWNrIG51bWJlciBvZiBmb3VuZGVkIGNoYW5nZQogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgc2NhbGFyIEB7JFNlYXJjaFJlc3VsdH0sCiAgICAgICAgICAgIHNjYWxhciBAeyRSZWZlcmVuY2VEYXRhfSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogV29ya09yZGVyU2VhcmNoKCkgLSBjb3JyZWN0IG51bWJlciBvZiBmb3VuZCBjaGFuZ2VzIiwKICAgICAgICApOwoKICAgICAgICAjIG1hcCBhcnJheSBpbmRleCB0byBXb3JrT3JkZXJJRAogICAgICAgIG15IEBSZXN1bHRXb3JrT3JkZXJJRHM7CiAgICAgICAgZm9yIG15ICRSZXN1bHRXb3JrT3JkZXJJRCAoIEB7JFJlZmVyZW5jZURhdGF9ICkgewogICAgICAgICAgICBwdXNoIEBSZXN1bHRXb3JrT3JkZXJJRHMsICRUU1RXb3JrT3JkZXJJRHNbJFJlc3VsdFdvcmtPcmRlcklEXTsKICAgICAgICB9CgogICAgICAgICMgdHVybiBvZmYgYWxsIHByZXR0eSBwcmludAogICAgICAgIGxvY2FsICREYXRhOjpEdW1wZXI6OkluZGVudCA9IDA7CiAgICAgICAgbG9jYWwgJERhdGE6OkR1bXBlcjo6VXNlcXEgID0gMTsKCiAgICAgICAgIyBkdW1wIHRoZSBhdHRyaWJ1dGUgZnJvbSBXb3JrT3JkZXJTZWFyY2goKQogICAgICAgIG15ICRTZWFyY2hSZXN1bHREdW1wID0gRGF0YTo6RHVtcGVyOjpEdW1wZXIoIHNvcnQgQHskU2VhcmNoUmVzdWx0fSApOyAgICAjIyBubyBjcml0aWMKCiAgICAgICAgIyBkdW1wIHRoZSByZWZlcmVuY2UgYXR0cmlidXRlCiAgICAgICAgbXkgJFJlZmVyZW5jZUR1bXAgPSBEYXRhOjpEdW1wZXI6OkR1bXBlciggc29ydCBAUmVzdWx0V29ya09yZGVySURzICk7ICAgICMjIG5vIGNyaXRpYwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWFyY2hSZXN1bHREdW1wLAogICAgICAgICAgICAkUmVmZXJlbmNlRHVtcCwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gV29ya09yZGVyU2VhcmNoKCk6ICIKICAgICAgICAgICAgICAgIC4gRGF0YTo6RHVtcGVyOjpEdW1wZXIoICRTb3VyY2VEYXRhLT57V29ya09yZGVyU2VhcmNofSApICAgICAgICAgIyMgbm8gY3JpdGljCiAgICAgICAgICAgICAgICAuICRTZWFyY2hSZXN1bHREdW1wLAogICAgICAgICk7CiAgICB9CgogICAgJFRlc3RDb3VudCsrOwogICAgJFRTVENvdW50ZXIrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHRlc3QgV29ya09yZGVyQ2hhbmdlVGltZUdldAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCm15IEBXT0NUR1Rlc3RzID0gKAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICd0ZXN0IGZvciBXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0IHdpdGhvdXQgdGltZXMuJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckNoYW5nZVRpbWVHZXQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1BsYW5uZWRTdGFydFRpbWUnID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdQbGFubmVkRW5kVGltZScgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnQWN0dWFsU3RhcnRUaW1lJyAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ0FjdHVhbEVuZFRpbWUnICAgID0+ICcnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAndGVzdCBmb3IgV29ya09yZGVyQ2hhbmdlVGltZUdldCB3aXRoIGFsbCB0aW1lcycsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQbGFubmVkU3RhcnRUaW1lID0+ICcyMDA5LTEwLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lICAgPT4gJzIwMDktMTAtMDIgMjM6NTk6NTknLAogICAgICAgICAgICAgICAgQWN0dWFsU3RhcnRUaW1lICA9PiAnMjAwOS0xMC0wMSAwMDowODowMCcsCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lICAgID0+ICcyMDA5LTEwLTAyIDAwOjE4OjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0ID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICdQbGFubmVkU3RhcnRUaW1lJyA9PiAnMjAwOS0xMC0wMSAwMDowMDowMCcsCiAgICAgICAgICAgICAgICAgICAgJ1BsYW5uZWRFbmRUaW1lJyAgID0+ICcyMDA5LTEwLTAyIDIzOjU5OjU5JywKICAgICAgICAgICAgICAgICAgICAnQWN0dWFsU3RhcnRUaW1lJyAgPT4gJzIwMDktMTAtMDEgMDA6MDg6MDAnLAogICAgICAgICAgICAgICAgICAgICdBY3R1YWxFbmRUaW1lJyAgICA9PiAnMjAwOS0xMC0wMiAwMDoxODowMCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICd0ZXN0IGZvciBXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0IG9ubHkgd2l0aCBwbGFubmVkIHRpbWVzJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJzIwMDktMTAtMDEgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWUgICA9PiAnMjAwOS0xMC0wMiAyMzo1OTo1OScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQ2hhbmdlVGltZUdldCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAnUGxhbm5lZFN0YXJ0VGltZScgPT4gJzIwMDktMTAtMDEgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgICAgICdQbGFubmVkRW5kVGltZScgICA9PiAnMjAwOS0xMC0wMiAyMzo1OTo1OScsCiAgICAgICAgICAgICAgICAgICAgJ0FjdHVhbFN0YXJ0VGltZScgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdBY3R1YWxFbmRUaW1lJyAgICA9PiAnJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAgICAgJ3Rlc3QgZm9yIFdvcmtPcmRlckNoYW5nZVRpbWVHZXQgb25seSB3aXRoIHBsYW5uZWQgdGltZXMgUGxhbm5lZFN0YXJ0VGltZSA9IFBsYW5uZWRFbmRUaW1lJywKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJBZGRGYWlscyA9PiAxLAogICAgICAgICAgICBXb3JrT3JkZXJBZGQgICAgICA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQbGFubmVkU3RhcnRUaW1lID0+ICcyMDA5LTEwLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lICAgPT4gJzIwMDktMTAtMDEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckNoYW5nZVRpbWVHZXQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1BsYW5uZWRTdGFydFRpbWUnID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdQbGFubmVkRW5kVGltZScgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnQWN0dWFsU3RhcnRUaW1lJyAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ0FjdHVhbEVuZFRpbWUnICAgID0+ICcnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAndGVzdCBmb3IgV29ya09yZGVyQ2hhbmdlVGltZUdldCBvbmx5IHdpdGggcGxhbm5lZCB0aW1lcyBQbGFubmVkU3RhcnRUaW1lID4gUGxhbm5lZEVuZFRpbWUnLAogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFdvcmtPcmRlckFkZEZhaWxzID0+IDEsCiAgICAgICAgICAgIFdvcmtPcmRlckFkZCAgICAgID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJzIwMDktMTAtMDEgMDA6MDA6MDEnLAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWUgICA9PiAnMjAwOS0xMC0wMSAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQ2hhbmdlVGltZUdldCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAnUGxhbm5lZFN0YXJ0VGltZScgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ1BsYW5uZWRFbmRUaW1lJyAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdBY3R1YWxTdGFydFRpbWUnICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnQWN0dWFsRW5kVGltZScgICAgPT4gJycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICd0ZXN0IGZvciBXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0IG9ubHkgd2l0aCBQbGFubmVkU3RhcnRUaW1lJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyQWRkRmFpbHMgPT4gMSwKICAgICAgICAgICAgV29ya09yZGVyQWRkICAgICAgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZSA9PiAnMjAwOS0xMC0wMSAwMDowMDowMCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQ2hhbmdlVGltZUdldCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAnUGxhbm5lZFN0YXJ0VGltZScgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ1BsYW5uZWRFbmRUaW1lJyAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdBY3R1YWxTdGFydFRpbWUnICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnQWN0dWFsRW5kVGltZScgICAgPT4gJycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICd0ZXN0IGZvciBXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0IG9ubHkgd2l0aCBQbGFubmVkRW5kVGltZScsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFdvcmtPcmRlckFkZEZhaWxzID0+IDEsCiAgICAgICAgICAgIFdvcmtPcmRlckFkZCAgICAgID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQbGFubmVkRW5kVGltZSA9PiAnMjAwOS0xMC0wMiAyMzo1OTo1OScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgV29ya09yZGVyQ2hhbmdlVGltZUdldCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBSZXN1bHREYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAnUGxhbm5lZFN0YXJ0VGltZScgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ1BsYW5uZWRFbmRUaW1lJyAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdBY3R1YWxTdGFydFRpbWUnICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnQWN0dWFsRW5kVGltZScgICAgPT4gJycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICd0ZXN0IGZvciBXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0IG9ubHkgd2l0aCBBY3R1YWxTdGFydFRpbWUnLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWUgPT4gJzIwMDktMTAtMDEgMDA6MDg6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckNoYW5nZVRpbWVHZXQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1BsYW5uZWRTdGFydFRpbWUnID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdQbGFubmVkRW5kVGltZScgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnQWN0dWFsU3RhcnRUaW1lJyAgPT4gJzIwMDktMTAtMDEgMDA6MDg6MDAnLAogICAgICAgICAgICAgICAgICAgICdBY3R1YWxFbmRUaW1lJyAgICA9PiAnJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ3Rlc3QgZm9yIFdvcmtPcmRlckNoYW5nZVRpbWVHZXQgb25seSB3aXRoIEFjdHVhbEVuZFRpbWUnLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJBZGRGYWlscyA9PiAxLAogICAgICAgICAgICBXb3JrT3JkZXJBZGQgICAgICA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lID0+ICcyMDA5LTEwLTAxIDAwOjA4OjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0ID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICdQbGFubmVkU3RhcnRUaW1lJyA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnUGxhbm5lZEVuZFRpbWUnICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ0FjdHVhbFN0YXJ0VGltZScgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdBY3R1YWxFbmRUaW1lJyAgICA9PiAnJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ3Rlc3QgZm9yIFdvcmtPcmRlckNoYW5nZVRpbWVHZXQgb25seSB3aXRoIGFjdHVhbCB0aW1lcycsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFdvcmtPcmRlckFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZSA9PiAnMjAwOS0xMC0wMSAwMDowMDowMCcsCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lICAgPT4gJzIwMDktMTAtMDIgMjM6NTk6NTknLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckNoYW5nZVRpbWVHZXQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1BsYW5uZWRTdGFydFRpbWUnID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdQbGFubmVkRW5kVGltZScgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnQWN0dWFsU3RhcnRUaW1lJyAgPT4gJzIwMDktMTAtMDEgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgICAgICdBY3R1YWxFbmRUaW1lJyAgICA9PiAnMjAwOS0xMC0wMiAyMzo1OTo1OScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICd0ZXN0IGZvciBXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0IG9ubHkgd2l0aCBBY3R1YWxTdGFydFRpbWUgPSBBY3R1YWxFbmRUaW1lJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIENoYW5nZUFkZCA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgV29ya09yZGVyQWRkRmFpbHMgPT4gMSwKICAgICAgICAgICAgV29ya09yZGVyQWRkICAgICAgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWUgPT4gJzIwMDktMTAtMDEgMDA6MDA6MDAnLAogICAgICAgICAgICAgICAgQWN0dWFsRW5kVGltZSAgID0+ICcyMDA5LTEwLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0ID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICdQbGFubmVkU3RhcnRUaW1lJyA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnUGxhbm5lZEVuZFRpbWUnICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ0FjdHVhbFN0YXJ0VGltZScgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdBY3R1YWxFbmRUaW1lJyAgICA9PiAnJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ3Rlc3QgZm9yIFdvcmtPcmRlckNoYW5nZVRpbWVHZXQgb25seSB3aXRoIEFjdHVhbFN0YXJ0VGltZSA+IEFjdHVhbEVuZFRpbWUnLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJBZGRGYWlscyA9PiAxLAogICAgICAgICAgICBXb3JrT3JkZXJBZGQgICAgICA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEFjdHVhbFN0YXJ0VGltZSA9PiAnMjAwOS0xMC0wMSAwMDowMDowMScsCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lICAgPT4gJzIwMDktMTAtMDEgMDA6MDA6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckNoYW5nZVRpbWVHZXQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1BsYW5uZWRTdGFydFRpbWUnID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdQbGFubmVkRW5kVGltZScgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnQWN0dWFsU3RhcnRUaW1lJyAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ0FjdHVhbEVuZFRpbWUnICAgID0+ICcnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAndGVzdCBmb3IgV29ya09yZGVyQ2hhbmdlVGltZUdldCB3aXRoIGFsbCB0aW1lcyAod2l0aCByZXNlcnZlZCB0aW1lIFBsYW5uZWRTdGFydFRpbWUpJywKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJBZGRGYWlscyA9PiAxLAogICAgICAgICAgICBXb3JrT3JkZXJBZGQgICAgICA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQbGFubmVkU3RhcnRUaW1lID0+ICc5OTk5LTAxLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJzk5OTktMDEtMDEgMDA6MDA6MDEnLAogICAgICAgICAgICAgICAgQWN0dWFsU3RhcnRUaW1lICA9PiAnMjAwOS0xMC0wMSAwMDowODowMCcsCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lICAgID0+ICcyMDA5LTEwLTAyIDAwOjE4OjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0ID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICdQbGFubmVkU3RhcnRUaW1lJyA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnUGxhbm5lZEVuZFRpbWUnICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ0FjdHVhbFN0YXJ0VGltZScgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdBY3R1YWxFbmRUaW1lJyAgICA9PiAnJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAgICAgJ3Rlc3QgZm9yIFdvcmtPcmRlckNoYW5nZVRpbWVHZXQgd2l0aCBhbGwgdGltZXMgKHdpdGggcmVzZXJ2ZWQgdGltZSBQbGFubmVkRW5kVGltZSknLAogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFdvcmtPcmRlckFkZEZhaWxzID0+IDEsCiAgICAgICAgICAgIFdvcmtPcmRlckFkZCAgICAgID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJzIwMDktMTAtMDEgMDE6MDE6MDAnLAogICAgICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZSA9PiAnOTk5OS0wMS0wMSAwMDowMDowMCcsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWUgID0+ICcyMDA5LTEwLTAxIDAwOjA4OjAwJywKICAgICAgICAgICAgICAgIEFjdHVhbEVuZFRpbWUgICAgPT4gJzIwMDktMTAtMDIgMDA6MTg6MDAnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFdvcmtPcmRlckNoYW5nZVRpbWVHZXQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICAgICAgUmVzdWx0RGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJ1BsYW5uZWRTdGFydFRpbWUnID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdQbGFubmVkRW5kVGltZScgICA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnQWN0dWFsU3RhcnRUaW1lJyAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ0FjdHVhbEVuZFRpbWUnICAgID0+ICcnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PgogICAgICAgICAgICAndGVzdCBmb3IgV29ya09yZGVyQ2hhbmdlVGltZUdldCB3aXRoIGFsbCB0aW1lcyAod2l0aCByZXNlcnZlZCB0aW1lIEFjdHVhbFN0YXJ0VGltZSknLAogICAgICAgIFNvdXJjZURhdGEgPT4gewogICAgICAgICAgICBDaGFuZ2VBZGQgPT4gewogICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFdvcmtPcmRlckFkZEZhaWxzID0+IDEsCiAgICAgICAgICAgIFdvcmtPcmRlckFkZCAgICAgID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJzIwMDktMTAtMDEgMDE6MDE6MDAnLAogICAgICAgICAgICAgICAgUGxhbm5lZEVuZFRpbWUgICA9PiAnMjAwOS0xMC0wMSAwMTowMTowMScsCiAgICAgICAgICAgICAgICBBY3R1YWxTdGFydFRpbWUgID0+ICc5OTk5LTAxLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0ID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICdQbGFubmVkU3RhcnRUaW1lJyA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnUGxhbm5lZEVuZFRpbWUnICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ0FjdHVhbFN0YXJ0VGltZScgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdBY3R1YWxFbmRUaW1lJyAgICA9PiAnJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAgICAgJ2VzdCBmb3IgV29ya09yZGVyQ2hhbmdlVGltZUdldCB3aXRoIGFsbCB0aW1lcyAod2l0aCByZXNlcnZlZCB0aW1lIEFjdHVhbEVuZFRpbWUpJywKICAgICAgICBTb3VyY2VEYXRhID0+IHsKICAgICAgICAgICAgQ2hhbmdlQWRkID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICBXb3JrT3JkZXJBZGRGYWlscyA9PiAxLAogICAgICAgICAgICBXb3JrT3JkZXJBZGQgICAgICA9PiB7CiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBQbGFubmVkU3RhcnRUaW1lID0+ICcyMDA5LTEwLTAxIDAxOjAxOjAwJywKICAgICAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lICAgPT4gJzIwMDktMTAtMDEgMDE6MDE6MDEnLAogICAgICAgICAgICAgICAgQWN0dWFsU3RhcnRUaW1lICA9PiAnMjAwOS0xMC0wMSAwMTowMTowMCcsCiAgICAgICAgICAgICAgICBBY3R1YWxFbmRUaW1lICAgID0+ICc5OTk5LTAxLTAxIDAwOjAwOjAwJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0ID0+IHsKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFJlc3VsdERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICdQbGFubmVkU3RhcnRUaW1lJyA9PiAnJywKICAgICAgICAgICAgICAgICAgICAnUGxhbm5lZEVuZFRpbWUnICAgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgJ0FjdHVhbFN0YXJ0VGltZScgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICdBY3R1YWxFbmRUaW1lJyAgICA9PiAnJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCik7CgpteSAkV09DVEdUZXN0Q291bnQgPSAxOwpmb3IgbXkgJFdPQ1RHVGVzdCAoQFdPQ1RHVGVzdHMpIHsKICAgIG15ICRTb3VyY2VEYXRhICAgID0gJFdPQ1RHVGVzdC0+e1NvdXJjZURhdGF9OwogICAgbXkgJFJlZmVyZW5jZURhdGEgPSAkV09DVEdUZXN0LT57UmVmZXJlbmNlRGF0YX07CgogICAgbXkgJENoYW5nZUlEOwogICAgbXkgJFdvcmtPcmRlcklEOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgIDEsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogJFdPQ1RHVGVzdC0+e0Rlc2NyaXB0aW9ufSAoV09DVEdUZXN0IGNhc2U6ICRXT0NUR1Rlc3RDb3VudCkiLAogICAgKTsKCiAgICBpZiAoICRTb3VyY2VEYXRhLT57Q2hhbmdlQWRkfSApIHsKICAgICAgICAkQ2hhbmdlSUQgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgICAgICV7ICRTb3VyY2VEYXRhLT57Q2hhbmdlQWRkfSB9LAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIENoYW5nZUFkZCIsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRDaGFuZ2VJRCkgewogICAgICAgICAgICAkVGVzdGVkQ2hhbmdlSUR7JENoYW5nZUlEfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJFNvdXJjZURhdGEtPntXb3JrT3JkZXJBZGR9ICkgewogICAgICAgICRXb3JrT3JkZXJJRCA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckFkZCgKICAgICAgICAgICAgJXsgJFNvdXJjZURhdGEtPntXb3JrT3JkZXJBZGR9IH0sCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICApOwoKICAgICAgICBpZiAoICRTb3VyY2VEYXRhLT57V29ya09yZGVyQWRkRmFpbHN9ICkgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBXb3JrT3JkZXJBZGQiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiB8LSBXb3JrT3JkZXJBZGQiLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEB7ICRJRHNUb0RlbGV0ZXtXb3JrT3JkZXJ9IH0sICRXb3JrT3JkZXJJRDsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkUmVmZXJlbmNlRGF0YS0+e1dvcmtPcmRlckNoYW5nZVRpbWVHZXR9ICkgewogICAgICAgIG15ICRUaW1lID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQ2hhbmdlVGltZUdldCgKICAgICAgICAgICAgJXsgJFJlZmVyZW5jZURhdGEtPntXb3JrT3JkZXJDaGFuZ2VUaW1lR2V0fSB9LAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICByZWYgJFRpbWUsCiAgICAgICAgICAgICdIQVNIJywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gV29ya09yZGVyQ2hhbmdlVGltZUdldCgpIiwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgcmVmICRUaW1lIGVxICdIQVNIJwogICAgICAgICAgICAgICAgICAgICYmICV7JFRpbWV9CiAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHx8IDAsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IHwtIFdvcmtPcmRlckNoYW5nZVRpbWVHZXQoKSAtIEhhc2hSZWYgd2l0aCBjb250ZW50IiwKICAgICAgICApOwoKICAgICAgICBpZiAoCiAgICAgICAgICAgIHJlZiAkVGltZSBlcSAnSEFTSCcKICAgICAgICAgICAgJiYgJXskVGltZX0KICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgVGVzdCBmb3IgcmlnaHQgdmFsdWVzIGluIHJlc3VsdAogICAgICAgICAgICBUSU1FVkFMVUU6CiAgICAgICAgICAgIGZvciBteSAkVGltZVR5cGUgKCBzb3J0IGtleXMgJXskVGltZX0gKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJFRpbWUtPnskVGltZVR5cGV9LAogICAgICAgICAgICAgICAgICAgICRSZWZlcmVuY2VEYXRhLT57V29ya09yZGVyQ2hhbmdlVGltZUdldH0tPntSZXN1bHREYXRhfS0+eyRUaW1lVHlwZX0sCiAgICAgICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogfC0gY2hlY2sgVGltZVJlc3VsdCAoJFRpbWVUeXBlKSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICRUZXN0Q291bnQrKzsKICAgICRXT0NUR1Rlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgdGVzdGluZyB0aGUgbWV0aG9kIFBlcm1pc3Npb24oKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAoJFBlcm1pc3Npb25UZXN0V29ya09yZGVySUQpID0ga2V5cyAleyAkV29ya09yZGVySURGb3JDaGFuZ2VJRHskUGVybWlzc2lvblRlc3RJRH0gfTsKCiMgZ2V0IG1hcHBpbmcgb2YgdGhlIGdyb3VwIG5hbWUgdG8gdGhlIGdyb3VwIGlkCm15ICVHcm91cE5hbWUySUQgPSByZXZlcnNlICRHcm91cE9iamVjdC0+R3JvdXBMaXN0KCBWYWxpZCA9PiAxICk7CgpteSBAUGVybWlzc2lvblRlc3RzID0gKAoKICAgICMgUGVybWlzc2lvbiB0ZXN0IE5vLiAxCiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0luaXRpYWxseSBubyBwcml2IGluIGFueSBncm91cCcsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFBlcm1pc3Npb25zID0+IHsKICAgICAgICAgICAgICAgIDAgPT4gewogICAgICAgICAgICAgICAgICAgIHJvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgcncgPT4gMAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIDEgPT4gewogICAgICAgICAgICAgICAgICAgIHJvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgcncgPT4gMAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFBlcm1pc3Npb24gdGVzdCBOby4gMgogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdybyBpbiBpdHNtLWNoYW5nZScsCiAgICAgICAgU291cmNlRGF0YSAgPT4gewogICAgICAgICAgICBHcm91cE1lbWJlckFkZCA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgR0lEICAgICAgICA9PiAkR3JvdXBOYW1lMklEeydpdHNtLWNoYW5nZSd9LAogICAgICAgICAgICAgICAgICAgIFVJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgUGVybWlzc2lvbnMgPT4gewogICAgICAgICAgICAgICAgMCA9PiB7CiAgICAgICAgICAgICAgICAgICAgcm8gPT4gMSwKICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIDEgPT4gewogICAgICAgICAgICAgICAgICAgIHJvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBQZXJtaXNzaW9uIHRlc3QgTm8uIDMKICAgICMgVGhlIHR5cGUgJ3J3JyBpbXBsaWVzIGFsbCBvdGhlciB0eXBlcy4gU2VlIEtlcm5lbDo6U3lzdGVtOjpHcm91cF9HZXRUeXBlU3RyaW5nKCkKICAgICMgVGhlcmVmb3JlIFVzZXIxIGVmZmVjdGl2ZWx5IGhhcyAncm8nIGluICdpdHNtLWNoYW5nZScgYW5kCiAgICAjIHRoZSBDaGFuZ2VBZ2VudENoZWNrIFBlcm1pc3Npb24gbW9kdWxlIGdpdmVzICdybycgYWNjZXNzLgogICAgIyBOb3RlIHRoYXQgV29ya09yZGVyQWdlbnRDaGVjayBnaXZlcyAncncnIGFjY2VzcyBvbmx5IHRvIHRoZSB3b3Jrb3JkZXIgYWdlbnQuCiAgICB7CgogICAgICAgIERlc2NyaXB0aW9uID0+ICdydyBpbiBpdHNtLWNoYW5nZSBncmFudHMgcm8sIGdyYW50cyBydyB0byB3b3Jrb3JkZXIgYWdlbnQnLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgR3JvdXBNZW1iZXJBZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UnfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UnfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFBlcm1pc3Npb25zID0+IHsKICAgICAgICAgICAgICAgIDAgPT4gewogICAgICAgICAgICAgICAgICAgIHJvID0+IDEsCiAgICAgICAgICAgICAgICAgICAgcncgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAxID0+IHsKICAgICAgICAgICAgICAgICAgICBybyA9PiAxLAogICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgUGVybWlzc2lvbiB0ZXN0IE5vLiA0CiAgICAjIHJlc2V0IFVzZXIxIGFmdGVyIHRoZSBwcmV2aW91cyB0ZXN0CiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ3Jldm9rZSBwcml2cyBmb3IgdXNlciAxJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIEdyb3VwTWVtYmVyQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlJ30sCiAgICAgICAgICAgICAgICAgICAgVUlEICAgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFBlcm1pc3Npb24gdGVzdCBOby4gNQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICdybyBpbiBpdHNtLWNoYW5nZS1tYW5hZ2VyJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIEdyb3VwTWVtYmVyQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlJ30sCiAgICAgICAgICAgICAgICAgICAgVUlEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlLW1hbmFnZXInfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFBlcm1pc3Npb25zID0+IHsKICAgICAgICAgICAgICAgIDAgPT4gewogICAgICAgICAgICAgICAgICAgIHJvID0+IDEsCiAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAxID0+IHsKICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgUGVybWlzc2lvbiB0ZXN0IE5vLiA2CiAgICB7CiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ3J3IGluIGl0c20tY2hhbmdlLW1hbmFnZXInLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgR3JvdXBNZW1iZXJBZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UnfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UtbWFuYWdlcid9LAogICAgICAgICAgICAgICAgICAgIFVJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHJ3ID0+IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgUGVybWlzc2lvbnMgPT4gewogICAgICAgICAgICAgICAgMCA9PiB7CiAgICAgICAgICAgICAgICAgICAgcm8gPT4gMSwKICAgICAgICAgICAgICAgICAgICBydyA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIDEgPT4gewogICAgICAgICAgICAgICAgICAgIHJvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBQZXJtaXNzaW9uIHRlc3QgTm8uIDcKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAncm8gaW4gaXRzbS1jaGFuZ2UtYnVpbGRlciwgVXNlciAwIGlzIHRoZSBidWlsZGVyJywKICAgICAgICBTb3VyY2VEYXRhICA9PiB7CiAgICAgICAgICAgIEdyb3VwTWVtYmVyQWRkID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlJ30sCiAgICAgICAgICAgICAgICAgICAgVUlEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlLW1hbmFnZXInfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UtYnVpbGRlcid9LAogICAgICAgICAgICAgICAgICAgIFVJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICBSZWZlcmVuY2VEYXRhID0+IHsKICAgICAgICAgICAgUGVybWlzc2lvbnMgPT4gewogICAgICAgICAgICAgICAgMCA9PiB7CiAgICAgICAgICAgICAgICAgICAgcm8gPT4gMSwKICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIDEgPT4gewogICAgICAgICAgICAgICAgICAgIHJvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyBQZXJtaXNzaW9uIHRlc3QgTm8uIDgKICAgIHsKICAgICAgICBEZXNjcmlwdGlvbiA9PiAncncgaW4gaXRzbS1jaGFuZ2UtYnVpbGRlciwgQWdlbnQgaXMgdGhlIGJ1aWxkZXInLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgR3JvdXBNZW1iZXJBZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UnfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UtbWFuYWdlcid9LAogICAgICAgICAgICAgICAgICAgIFVJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgR0lEICAgICAgICA9PiAkR3JvdXBOYW1lMklEeydpdHNtLWNoYW5nZS1idWlsZGVyJ30sCiAgICAgICAgICAgICAgICAgICAgVUlEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgcncgPT4gMSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFJlZmVyZW5jZURhdGEgPT4gewogICAgICAgICAgICBQZXJtaXNzaW9ucyA9PiB7CiAgICAgICAgICAgICAgICAwID0+IHsKICAgICAgICAgICAgICAgICAgICBybyA9PiAxLAogICAgICAgICAgICAgICAgICAgIHJ3ID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgMSA9PiB7CiAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIFBlcm1pc3Npb24gdGVzdCBOby4gOQogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICJybyBpbiBpdHNtLWNoYW5nZS1idWlsZGVyLCB1c2VyIDEgaXNuJ3QgdGhlIGJ1aWxkZXIiLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgR3JvdXBNZW1iZXJBZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UnfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UtbWFuYWdlcid9LAogICAgICAgICAgICAgICAgICAgIFVJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgR0lEICAgICAgICA9PiAkR3JvdXBOYW1lMklEeydpdHNtLWNoYW5nZS1idWlsZGVyJ30sCiAgICAgICAgICAgICAgICAgICAgVUlEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlLWJ1aWxkZXInfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFBlcm1pc3Npb25zID0+IHsKICAgICAgICAgICAgICAgIDAgPT4gewogICAgICAgICAgICAgICAgICAgIHJvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAxID0+IHsKICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAoKICAgICMgUGVybWlzc2lvbiB0ZXN0IE5vLiAxMAogICAgewogICAgICAgIERlc2NyaXB0aW9uID0+ICJydyBpbiBpdHNtLWNoYW5nZS1idWlsZGVyLCB1c2VyIDEgaXNuJ3QgdGhlIGJ1aWxkZXIiLAogICAgICAgIFNvdXJjZURhdGEgID0+IHsKICAgICAgICAgICAgR3JvdXBNZW1iZXJBZGQgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UnfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEdJRCAgICAgICAgPT4gJEdyb3VwTmFtZTJJRHsnaXRzbS1jaGFuZ2UtbWFuYWdlcid9LAogICAgICAgICAgICAgICAgICAgIFVJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgICAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgR0lEICAgICAgICA9PiAkR3JvdXBOYW1lMklEeydpdHNtLWNoYW5nZS1idWlsZGVyJ30sCiAgICAgICAgICAgICAgICAgICAgVUlEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgcm8gPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cE5hbWUySUR7J2l0c20tY2hhbmdlLWJ1aWxkZXInfSwKICAgICAgICAgICAgICAgICAgICBVSUQgICAgICAgID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBydyA9PiAwLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgUmVmZXJlbmNlRGF0YSA9PiB7CiAgICAgICAgICAgIFBlcm1pc3Npb25zID0+IHsKICAgICAgICAgICAgICAgIDAgPT4gewogICAgICAgICAgICAgICAgICAgIHJvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgcncgPT4gMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAxID0+IHsKICAgICAgICAgICAgICAgICAgICBybyA9PiAwLAogICAgICAgICAgICAgICAgICAgIHJ3ID0+IDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAopOwoKbXkgJFBlcm1pc3Npb25UZXN0Q291bnRlciA9IDE7CmZvciBteSAkVGVzdCAoQFBlcm1pc3Npb25UZXN0cykgewoKICAgIG15ICRTb3VyY2VEYXRhICAgID0gJFRlc3QtPntTb3VyY2VEYXRhfTsKICAgIG15ICRSZWZlcmVuY2VEYXRhID0gJFRlc3QtPntSZWZlcmVuY2VEYXRhfTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAxLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6ICRUZXN0LT57RGVzY3JpcHRpb259IChQZXJtaXNzaW9uIFRlc3QgY2FzZTogJFBlcm1pc3Npb25UZXN0Q291bnRlcikiLAogICAgKTsKCiAgICAjIGV4ZWN1dGUgdGhlIHNvdXJjZSBtb2RpZmljYXRpb25zCiAgICAkU291cmNlRGF0YS0+e0dyb3VwTWVtYmVyQWRkfSB8fD0gW107CiAgICBmb3IgbXkgJFBhcmFtcyAoIEB7ICRTb3VyY2VEYXRhLT57R3JvdXBNZW1iZXJBZGR9IH0gKSB7CgogICAgICAgICMgbW9kaWZ5IHRoZSBncm91cCBtZW1iZXJzaGlwCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkR3JvdXBPYmplY3QtPkdyb3VwTWVtYmVyQWRkKAogICAgICAgICAgICAleyRQYXJhbXN9LAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlBlcm1pc3Npb24gdGVzdCAkUGVybWlzc2lvblRlc3RDb3VudGVyOiBHcm91cE1lbWJlckFkZCgpIiwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgdGhlIHJlc3VsdAogICAgaWYgKCAkUmVmZXJlbmNlRGF0YS0+e1Blcm1pc3Npb25zfSApIHsKICAgICAgICBmb3IgbXkgJFVzZXJJbmRleCAoIHNvcnQga2V5cyAleyAkUmVmZXJlbmNlRGF0YS0+e1Blcm1pc3Npb25zfSB9ICkgewogICAgICAgICAgICBteSAkUHJpdnMgPSAkUmVmZXJlbmNlRGF0YS0+e1Blcm1pc3Npb25zfS0+eyRVc2VySW5kZXh9OwogICAgICAgICAgICBmb3IgbXkgJFR5cGUgKCBzb3J0IGtleXMgJXskUHJpdnN9ICkgewogICAgICAgICAgICAgICAgJFdvcmtPcmRlck9iamVjdC0+e0RlYnVnfSA9IDEwOwogICAgICAgICAgICAgICAgbXkgJEFjY2VzcyA9ICRXb3JrT3JkZXJPYmplY3QtPlBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJFR5cGUsCiAgICAgICAgICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFBlcm1pc3Npb25UZXN0V29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gJFVzZXJJRHNbJFVzZXJJbmRleF0sCiAgICAgICAgICAgICAgICAgICAgQ2FjaGVkICAgICAgPT4gMCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICRQcml2cy0+eyRUeXBlfSApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAgICAgJEFjY2VzcywKICAgICAgICAgICAgICAgICAgICAgICAgIlBlcm1pc3Npb24gdGVzdCAkUGVybWlzc2lvblRlc3RDb3VudGVyOiBVc2VyICRVc2VySW5kZXgsIHdpdGggVXNlcklEICRVc2VySURzWyRVc2VySW5kZXhdLCBoYXMgJFR5cGUgYWNjZXNzIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgICAgICAgICAkQWNjZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAiUGVybWlzc2lvbiB0ZXN0ICRQZXJtaXNzaW9uVGVzdENvdW50ZXI6IFVzZXIgJFVzZXJJbmRleCwgd2l0aCBVc2VySUQgJFVzZXJJRHNbJFVzZXJJbmRleF0sIGhhcyBubyAkVHlwZSBhY2Nlc3MiLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KY29udGludWUgewogICAgJFBlcm1pc3Npb25UZXN0Q291bnRlcisrOwogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgdGVzdGluZyB0aGUgbWV0aG9kIFdvcmtPcmRlclBvc3NpYmxlU3RhdGVzR2V0KCkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBjcmVhdGUgY2hhbmdlIGZvciB0aGlzIHRlc3QKbXkgJENoYW5nZUlERm9yUG9zc2libGVTdGF0ZXNUZXN0ID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgVXNlcklEID0+IDEsCik7CgojIGNyZWF0ZSB3b3Jrb3JkZXIgZm9yIHRoaXMgdGVzdApteSAkV29ya09yZGVySURGb3JQb3NzaWJsZVN0YXRlc1Rlc3QgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBZGQoCiAgICBDaGFuZ2VJRCAgICAgICA9PiAkQ2hhbmdlSURGb3JQb3NzaWJsZVN0YXRlc1Rlc3QsCiAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgV29ya09yZGVyU3RhdGUgPT4gJ2FjY2VwdGVkJywKKTsKCiMgV2hlbiBubyBXb3JrT3JkZXJJRCBpcyBnaXZlbiBXb3JrT3JkZXJQb3NzaWJsZVN0YXRlc0dldCgpIHJldHVybnMgYSBsaXN0IG9mIGFsbCBzdGF0ZXMuCm15ICRQb3NzaWJsZVN0YXRlcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclBvc3NpYmxlU3RhdGVzR2V0KAoKICAgICMgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklERm9yUG9zc2libGVTdGF0ZXNUZXN0LAogICAgVXNlcklEID0+IDEsCikgfHwge307CgojIGRvIHRoZSBjaGVja3MKbXkgQFBvc3NpYmxlU3RhdGVJRHNSZWZlcmVuY2UgPSBAU29ydGVkV29ya09yZGVyU3RhdGVJRHM7CmZvciBteSAkUG9zc2libGVTdGF0ZUlEIChAUG9zc2libGVTdGF0ZUlEc1JlZmVyZW5jZSkgewogICAgbXkgKCAkRmlyc3RIYXNoUmVmLCAkU2Vjb25kSGFzaFJlZiApID0gZ3JlcCB7ICRfLT57S2V5fSA9PSAkUG9zc2libGVTdGF0ZUlEIH0gQHskUG9zc2libGVTdGF0ZXN9OwoKICAgICMgYSBtYXRjaCBpcyBleHBlY3RlZAogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEZpcnN0SGFzaFJlZiwKICAgICAgICAiQ2hlY2sgZm9yIHBvc3NpYmxlIHN0YXRlIGlkICRQb3NzaWJsZVN0YXRlSUQiLAogICAgKTsKCiAgICAjIHRoZSBuYW1lIHNob3VsZCBhbHNvIG1hdGNoCiAgICAkRmlyc3RIYXNoUmVmIHx8PSB7fTsKICAgIG15ICRQb3NzaWJsZVN0YXRlTmFtZSA9ICRXb3JrT3JkZXJTdGF0ZUlEMk5hbWV7JFBvc3NpYmxlU3RhdGVJRH07CiAgICAkU2VsZi0+SXMoCiAgICAgICAgJEZpcnN0SGFzaFJlZi0+e1ZhbHVlfSwKICAgICAgICAkUG9zc2libGVTdGF0ZU5hbWUsCiAgICAgICAgIkNoZWNrIGZvciBwb3NzaWJsZSBzdGF0ZSBuYW1lICRQb3NzaWJsZVN0YXRlSUQiLAogICAgKTsKCiAgICAjIG9ubHkgb25lIG1hdGNoIGlzIGV4cGVjdGVkCiAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgJFNlY29uZEhhc2hSZWYsCiAgICAgICAgIkNoZWNrIHRoYXQgdGhlIHN0YXRlIGlkICRQb3NzaWJsZVN0YXRlSUQgaXMgcmV0dXJuZWQgb25seSBvbmNlLiIsCiAgICApOwoKfQoKIyB0aGVzZSBvYmplY3RzIHNob3VsZCBiZSBkZWxldGVkCnB1c2ggQHsgJElEc1RvRGVsZXRle0NoYW5nZX0gfSwgICAgJENoYW5nZUlERm9yUG9zc2libGVTdGF0ZXNUZXN0OwpwdXNoIEB7ICRJRHNUb0RlbGV0ZXtXb3JrT3JkZXJ9IH0sICRXb3JrT3JkZXJJREZvclBvc3NpYmxlU3RhdGVzVGVzdDsKCiMgVE9ETzogYWRkIHRlc3RzIGZvciBXb3JrT3JkZXJQb3NzaWJsZVN0YXRlc0dldCgpIHdpdGggYSBXb3JrT3JkZXJJRCBhcyBhcmd1bWVudAoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHRlc3Rpbmcgc3VwcG9ydCBmb3IgYXR0YWNobWVudHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBjcmVhdGUgY2hhbmdlIGZvciB0aGlzIHRlc3QKbXkgJENoYW5nZUlERm9yQXR0YWNobWVudFRlc3QgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgY3JlYXRlIHdvcmtvcmRlciBmb3IgdGhpcyB0ZXN0Cm15ICRXb3JrT3JkZXJJREZvckF0dGFjaG1lbnRUZXN0ID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQWRkKAogICAgQ2hhbmdlSUQgICAgICAgPT4gJENoYW5nZUlERm9yQXR0YWNobWVudFRlc3QsCiAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgV29ya09yZGVyU3RhdGUgPT4gJ2FjY2VwdGVkJywKKTsKCiMgdGhlc2Ugb2JqZWN0cyBzaG91bGQgYmUgZGVsZXRlZCBsYXRlciBvbgpwdXNoIEB7ICRJRHNUb0RlbGV0ZXtDaGFuZ2V9IH0sICAgICRDaGFuZ2VJREZvckF0dGFjaG1lbnRUZXN0OwpwdXNoIEB7ICRJRHNUb0RlbGV0ZXtXb3JrT3JkZXJ9IH0sICRXb3JrT3JkZXJJREZvckF0dGFjaG1lbnRUZXN0OwoKIyB2ZXJpZnkgdGhhdCBpbml0aWFseSBubyBhdHRhY2htZW50IGV4aXN0cwpteSBAQXR0YWNobWVudExpc3QgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBdHRhY2htZW50TGlzdCgKICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJREZvckF0dGFjaG1lbnRUZXN0LAogICAgVXNlcklEICAgICAgPT4gMSwKKTsKCiRTZWxmLT5JcygKICAgIHNjYWxhciBAQXR0YWNobWVudExpc3QsCiAgICAwLAogICAgJ05vIGF0dGFjaG1lbnRzIGluaXRpYWxseScsCik7CgojIGRlZmluZSBsaXN0IG9mIHRlc3QgYXR0YWNobWVudHMKbXkgQFRlc3RGaWxlTGlzdCA9ICgKICAgIHsKICAgICAgICBGaWxlbmFtZSAgICAgICA9PiAnZmlyc3QgYXR0YWNobWVudCcsCiAgICAgICAgQ29udGVudCAgICAgICAgPT4gJ0ZpcnN0IGF0dGFjaG1lbnQgZnJvbSBJVFNNV29ya09yZGVyLnQnLAogICAgICAgIENvbnRlbnRUeXBlICAgID0+ICd0ZXh0L3BsYWluJywKICAgICAgICBBdHRhY2htZW50VHlwZSA9PiAnV29ya09yZGVyJywKICAgIH0sCiAgICB7CiAgICAgICAgRmlsZW5hbWUgICAgICAgPT4gJ3NlY29uZCBhdHRhY2htZW50JywKICAgICAgICBDb250ZW50ICAgICAgICA9PiAnU2Vjb25kIGF0dGFjaG1lbnQgZnJvbSBJVFNNV29ya09yZGVyLnQnLAogICAgICAgIENvbnRlbnRUeXBlICAgID0+ICd0ZXh0L3BsYWluJywKICAgICAgICBBdHRhY2htZW50VHlwZSA9PiAnV29ya09yZGVyJywKICAgIH0sCiAgICB7CiAgICAgICAgRmlsZW5hbWUgICAgICAgPT4gJ2ZpcnN0IHJlcG9ydCBhdHRhY2htZW50JywKICAgICAgICBDb250ZW50ICAgICAgICA9PiAnRmlyc3QgcmVwb3J0IGF0dGFjaG1lbnQgZnJvbSBJVFNNV29ya09yZGVyLnQnLAogICAgICAgIENvbnRlbnRUeXBlICAgID0+ICd0ZXh0L3BsYWluJywKICAgICAgICBBdHRhY2htZW50VHlwZSA9PiAnV29ya09yZGVyUmVwb3J0JywKICAgIH0sCiAgICB7CiAgICAgICAgRmlsZW5hbWUgICAgICAgPT4gJ3NlY29uZCByZXBvcnQgYXR0YWNobWVudCcsCiAgICAgICAgQ29udGVudCAgICAgICAgPT4gJ1NlY29uZCByZXBvcnQgYXR0YWNobWVudCBmcm9tIElUU01Xb3JrT3JkZXIudCcsCiAgICAgICAgQ29udGVudFR5cGUgICAgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgIEF0dGFjaG1lbnRUeXBlID0+ICdXb3JrT3JkZXJSZXBvcnQnLAogICAgfSwKKTsKCm15ICVGaWxlQ291bnQ7CmZvciBteSAkVGVzdEZpbGUgKEBUZXN0RmlsZUxpc3QpIHsKCiAgICAkRmlsZUNvdW50eyAkVGVzdEZpbGUtPntBdHRhY2htZW50VHlwZX0gfSsrOwoKICAgICMgYWRkIHRoZSBhdHRhY2htZW50CiAgICBteSAkQWRkT2sgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBdHRhY2htZW50QWRkKAogICAgICAgICV7JFRlc3RGaWxlfSwKICAgICAgICBDaGFuZ2VJRCAgICA9PiAkQ2hhbmdlSURGb3JBdHRhY2htZW50VGVzdCwKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySURGb3JBdHRhY2htZW50VGVzdCwKICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRBZGRPaywKICAgICAgICAiQXR0YWNobWVudCAoJFRlc3RGaWxlLT57QXR0YWNobWVudFR5cGV9KSAkRmlsZUNvdW50eyAkVGVzdEZpbGUtPntBdHRhY2htZW50VHlwZX0gfTogYXR0YWNobWVudCBhZGRlZCIsCiAgICApOwoKICAgIG15IEBBdHRhY2htZW50TGlzdDsKICAgIGlmICggJFRlc3RGaWxlLT57QXR0YWNobWVudFR5cGV9IGVxICdXb3JrT3JkZXInICkgewoKICAgICAgICAjIGdldCBhdHRhY2htZW50IGxpc3QKICAgICAgICBAQXR0YWNobWVudExpc3QgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBdHRhY2htZW50TGlzdCgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklERm9yQXR0YWNobWVudFRlc3QsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFRlc3RGaWxlLT57QXR0YWNobWVudFR5cGV9IGVxICdXb3JrT3JkZXJSZXBvcnQnICkgewoKICAgICAgICAjIGdldCBhdHRhY2htZW50IGxpc3QKICAgICAgICBAQXR0YWNobWVudExpc3QgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJSZXBvcnRBdHRhY2htZW50TGlzdCgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklERm9yQXR0YWNobWVudFRlc3QsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAkU2VsZi0+SXMoCiAgICAgICAgc2NhbGFyIEBBdHRhY2htZW50TGlzdCwKICAgICAgICAkRmlsZUNvdW50eyAkVGVzdEZpbGUtPntBdHRhY2htZW50VHlwZX0gfSwKICAgICAgICAiQXR0YWNobWVudCAoJFRlc3RGaWxlLT57QXR0YWNobWVudFR5cGV9KSAkRmlsZUNvdW50eyAkVGVzdEZpbGUtPntBdHRhY2htZW50VHlwZX0gfTogbnVtYmVyIG9mIGF0dGFjaG1lbnRzIGFmdGVyIGFkZGluZyIsCiAgICApOwoKICAgICMgZ2V0IHRoZSBsYXN0IGFkZGVkIGF0dGFjaG1lbnQgZmlsZSBuYW1lCiAgICBteSAlQXR0YWNobWVudExvb2t1cCA9IG1hcCB7ICRfID0+IDEgfSBAQXR0YWNobWVudExpc3Q7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJEF0dGFjaG1lbnRMb29rdXB7ICRUZXN0RmlsZS0+e0ZpbGVuYW1lfSB9LAogICAgICAgICJBdHRhY2htZW50ICgkVGVzdEZpbGUtPntBdHRhY2htZW50VHlwZX0pICRGaWxlQ291bnR7ICRUZXN0RmlsZS0+e0F0dGFjaG1lbnRUeXBlfSB9OiBmaWxlbmFtZSBmcm9tIFdvcmtPcmRlckF0dGFjaG1lbnRMaXN0KCkgLyBXb3JrT3JkZXJSZXBvcnRBdHRhY2htZW50TGlzdCgpIiwKICAgICk7CgogICAgIyBnZXQgdGhlIGF0dGFjaG1lbnQKICAgIG15ICRBdHRhY2htZW50ID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQXR0YWNobWVudEdldCgKICAgICAgICBXb3JrT3JkZXJJRCAgICA9PiAkV29ya09yZGVySURGb3JBdHRhY2htZW50VGVzdCwKICAgICAgICBGaWxlbmFtZSAgICAgICA9PiAkVGVzdEZpbGUtPntGaWxlbmFtZX0sCiAgICAgICAgQXR0YWNobWVudFR5cGUgPT4gJFRlc3RGaWxlLT57QXR0YWNobWVudFR5cGV9LAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRBdHRhY2htZW50LAogICAgICAgICJBdHRhY2htZW50ICgkVGVzdEZpbGUtPntBdHRhY2htZW50VHlwZX0pICRGaWxlQ291bnR7ICRUZXN0RmlsZS0+e0F0dGFjaG1lbnRUeXBlfSB9OiBXb3JrT3JkZXJBdHRhY2htZW50R2V0KCkgcmV0dXJuZWQgdHJ1ZSIsCiAgICApOwoKICAgICMgY2hlY2sgYXR0YWNobWVudCBmaWxlIGF0dHJpYnV0ZXMKICAgIGZvciBteSAkQXR0cmlidXRlIChxdyhGaWxlbmFtZSBDb250ZW50IENvbnRlbnRUeXBlIEF0dGFjaG1lbnRUeXBlKSkgewogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJEF0dGFjaG1lbnQtPnskQXR0cmlidXRlfSwKICAgICAgICAgICAgJFRlc3RGaWxlLT57JEF0dHJpYnV0ZX0sCiAgICAgICAgICAgICJBdHRhY2htZW50ICgkVGVzdEZpbGUtPntBdHRhY2htZW50VHlwZX0pICRGaWxlQ291bnR7ICRUZXN0RmlsZS0+e0F0dGFjaG1lbnRUeXBlfSB9OiAkQXR0cmlidXRlIGZyb20gV29ya09yZGVyQXR0YWNobWVudEdldCIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGV4aXN0ZW5jZSBvZiBhdHRhY2htZW50CiAgICBteSAkQXR0YWNobWVudEV4aXN0cyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckF0dGFjaG1lbnRFeGlzdHMoCiAgICAgICAgQ2hhbmdlSUQgICAgICAgPT4gJENoYW5nZUlERm9yQXR0YWNobWVudFRlc3QsCiAgICAgICAgV29ya09yZGVySUQgICAgPT4gJFdvcmtPcmRlcklERm9yQXR0YWNobWVudFRlc3QsCiAgICAgICAgQXR0YWNobWVudFR5cGUgPT4gJFRlc3RGaWxlLT57QXR0YWNobWVudFR5cGV9LAogICAgICAgIEZpbGVuYW1lICAgICAgID0+ICRUZXN0RmlsZS0+e0ZpbGVuYW1lfSwKICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRBdHRhY2htZW50RXhpc3RzLAogICAgICAgICJBdHRhY2htZW50ICgkVGVzdEZpbGUtPntBdHRhY2htZW50VHlwZX0pICRGaWxlQ291bnR7ICRUZXN0RmlsZS0+e0F0dGFjaG1lbnRUeXBlfSB9OiBhdHRhY2htZW50IGV4aXN0cyIsCiAgICApOwp9CgojIG5vdyBkZWxldGUgdGhlIGF0dGFjaG1lbnRzCm15ICVNYXhUZXN0RmlsZXMgPSAlRmlsZUNvdW50OwolRmlsZUNvdW50ID0gKCk7CmZvciBteSAkVGVzdEZpbGUgKEBUZXN0RmlsZUxpc3QpIHsKCiAgICAkRmlsZUNvdW50eyAkVGVzdEZpbGUtPntBdHRhY2htZW50VHlwZX0gfSsrOwoKICAgIG15ICREZWxldGVPayA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckF0dGFjaG1lbnREZWxldGUoCiAgICAgICAgQ2hhbmdlSUQgICAgICAgPT4gJENoYW5nZUlERm9yQXR0YWNobWVudFRlc3QsCiAgICAgICAgV29ya09yZGVySUQgICAgPT4gJFdvcmtPcmRlcklERm9yQXR0YWNobWVudFRlc3QsCiAgICAgICAgQXR0YWNobWVudFR5cGUgPT4gJFRlc3RGaWxlLT57QXR0YWNobWVudFR5cGV9LAogICAgICAgIEZpbGVuYW1lICAgICAgID0+ICRUZXN0RmlsZS0+e0ZpbGVuYW1lfSwKICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICREZWxldGVPaywKICAgICAgICAiQXR0YWNobWVudCAoJFRlc3RGaWxlLT57QXR0YWNobWVudFR5cGV9KSAkRmlsZUNvdW50eyAkVGVzdEZpbGUtPntBdHRhY2htZW50VHlwZX0gfTogYXR0YWNobWVudCBkZWxldGVkIiwKICAgICk7CgogICAgbXkgQEF0dGFjaG1lbnRMaXN0OwogICAgaWYgKCAkVGVzdEZpbGUtPntBdHRhY2htZW50VHlwZX0gZXEgJ1dvcmtPcmRlcicgKSB7CgogICAgICAgICMgZ2V0IGF0dGFjaG1lbnQgbGlzdAogICAgICAgIEBBdHRhY2htZW50TGlzdCA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckF0dGFjaG1lbnRMaXN0KAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySURGb3JBdHRhY2htZW50VGVzdCwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkVGVzdEZpbGUtPntBdHRhY2htZW50VHlwZX0gZXEgJ1dvcmtPcmRlclJlcG9ydCcgKSB7CgogICAgICAgICMgZ2V0IGF0dGFjaG1lbnQgbGlzdAogICAgICAgIEBBdHRhY2htZW50TGlzdCA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlclJlcG9ydEF0dGFjaG1lbnRMaXN0KAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySURGb3JBdHRhY2htZW50VGVzdCwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICRTZWxmLT5JcygKICAgICAgICBzY2FsYXIgQEF0dGFjaG1lbnRMaXN0LAogICAgICAgICRNYXhUZXN0RmlsZXN7ICRUZXN0RmlsZS0+e0F0dGFjaG1lbnRUeXBlfSB9IC0gJEZpbGVDb3VudHsgJFRlc3RGaWxlLT57QXR0YWNobWVudFR5cGV9IH0sCiAgICAgICAgIkF0dGFjaG1lbnQgKCRUZXN0RmlsZS0+e0F0dGFjaG1lbnRUeXBlfSkgJEZpbGVDb3VudHsgJFRlc3RGaWxlLT57QXR0YWNobWVudFR5cGV9IH06IG51bWJlciBvZiBhdHRhY2htZW50cyBhZnRlciBkZWxldGlvbiIsCiAgICApOwoKICAgIG15ICRBdHRhY2htZW50RXhpc3RzID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQXR0YWNobWVudEV4aXN0cygKICAgICAgICBDaGFuZ2VJRCAgICA9PiAkQ2hhbmdlSURGb3JBdHRhY2htZW50VGVzdCwKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySURGb3JBdHRhY2htZW50VGVzdCwKICAgICAgICBGaWxlbmFtZSAgICA9PiAkVGVzdEZpbGUtPntGaWxlbmFtZX0sCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgJEF0dGFjaG1lbnRFeGlzdHMsCiAgICAgICAgIkF0dGFjaG1lbnQgKCRUZXN0RmlsZS0+e0F0dGFjaG1lbnRUeXBlfSkgJEZpbGVDb3VudHsgJFRlc3RGaWxlLT57QXR0YWNobWVudFR5cGV9IH06IGF0dGFjaG1lbnQgaXMgZ29uZSIsCiAgICApOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgY2xlYW4gdGhlIHN5c3RlbQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGRpc2FibGUgZW1haWwgY2hlY2tzIHRvIGNoYW5nZSB0aGUgbmV3bHkgYWRkZWQgdXNlcnMKJENoZWNrRW1haWxBZGRyZXNzZXNPcmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoZWNrRW1haWxBZGRyZXNzZXMnKTsKaWYgKCAhZGVmaW5lZCAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZyApIHsKICAgICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnID0gMTsKfQokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICBWYWx1ZSA9PiAwLAopOwoKIyBzZXQgdW5pdHRlc3QgdXNlcnMgaW52YWxpZApmb3IgbXkgJFVuaXR0ZXN0VXNlcklEIChAVXNlcklEcykgewoKICAgICMgZ2V0IHVzZXIgZGF0YQogICAgbXkgJVVzZXIgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgVXNlcklEID0+ICRVbml0dGVzdFVzZXJJRCwKICAgICk7CgogICAgIyB1cGRhdGUgdXNlcgogICAgJFVzZXJPYmplY3QtPlVzZXJVcGRhdGUoCiAgICAgICAgJVVzZXIsCiAgICAgICAgVmFsaWRJRCAgICAgID0+ICRWYWxpZE9iamVjdC0+VmFsaWRMb29rdXAoIFZhbGlkID0+ICdpbnZhbGlkJyApLAogICAgICAgIENoYW5nZVVzZXJJRCA9PiAxLAogICAgKTsKfQoKIyByZXN0b3JlIG9yaWdpbmFsIGVtYWlsIGNoZWNrIHBhcmFtCiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgIFZhbHVlID0+ICRDaGVja0VtYWlsQWRkcmVzc2VzT3JnLAopOwoKIyBkZWxldGUgdGhlIHRlc3Qgd29ya29yZGVycwpteSAkRGVsZXRlVGVzdENvdW50ID0gMTsKZm9yIG15ICRXb3JrT3JkZXJJRCAoIEB7ICRJRHNUb0RlbGV0ZXtXb3JrT3JkZXJ9IH0sIGtleXMgJVRlc3RlZFdvcmtPcmRlcklEICkgewogICAgbXkgJFN1Y2Nlc3MgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJEZWxldGUoCiAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgIkRlbGV0ZVRlc3QgJERlbGV0ZVRlc3RDb3VudCAtIFdvcmtPcmRlckRlbGV0ZSgpIChXb3JrT3JkZXJJRD0kV29ya09yZGVySUQpIiwKICAgICk7CgogICAgIyBkb3VibGUgY2hlY2sgV29ya09yZGVyIGl0IGlzIHJlYWxseSBkZWxldGVkCiAgICBteSAkV29ya09yZGVyRGF0YSA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckdldCgKICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgIHVuZGVmLAogICAgICAgICRXb3JrT3JkZXJEYXRhLT57V29ya09yZGVySUR9LAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFdvcmtPcmRlckRlbGV0ZSgpIC0gZG91YmxlIGNoZWNrIiwKICAgICAgICAiRGVsZXRlVGVzdCAkRGVsZXRlVGVzdENvdW50IC0gZG91YmxlIGNoZWNrIChXb3JrT3JkZXJJRD0kV29ya09yZGVySUQpIiwKICAgICk7Cn0KY29udGludWUgewogICAgJERlbGV0ZVRlc3RDb3VudCsrOwp9CgojIGRlbGV0ZSB0aGUgdGVzdCBjaGFuZ2VzCmZvciBteSAkQ2hhbmdlSUQgKCBAeyAkSURzVG9EZWxldGV7Q2hhbmdlfSB9LCBrZXlzICVUZXN0ZWRDaGFuZ2VJRCApIHsKICAgIG15ICREZWxldGVPayA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkRGVsZXRlT2ssCiAgICAgICAgIkRlbGV0ZVRlc3QgJERlbGV0ZVRlc3RDb3VudCAtIENoYW5nZURlbGV0ZSgpIChDaGFuZ2VJRD0kQ2hhbmdlSUQpIiwKICAgICk7CgogICAgIyBkb3VibGUgY2hlY2sgaWYgY2hhbmdlIGlzIHJlYWxseSBkZWxldGVkCiAgICBteSAkQ2hhbmdlRGF0YSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUdldCgKICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICBDYWNoZSAgICA9PiAwLAogICAgKTsKCiAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgJENoYW5nZURhdGEtPntDaGFuZ2VJRH0sCiAgICAgICAgIkRlbGV0ZVRlc3QgJERlbGV0ZVRlc3RDb3VudCAtIGRvdWJsZSBjaGVjayAoQ2hhbmdlSUQ9JENoYW5nZUlEKSIsCiAgICApOwp9CmNvbnRpbnVlIHsKICAgICREZWxldGVUZXN0Q291bnQrKzsKfQoKIyBkZWxldGUgZHluYW1pYyBmaWVsZHMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZCBmb3IgdGhpcyB0ZXN0CmZvciBteSAkRHluYW1pY0ZpZWxkSUQgKEBEeW5hbWljRmllbGRJRHMpIHsKCiAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZERlbGV0ZSgKICAgICAgICBJRCAgICAgPT4gJER5bmFtaWNGaWVsZElELAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiRHluYW1pY0ZpZWxkRGVsZXRlKCkgZGVsZXRlZCBEeW5hbWljRmllbGQgJER5bmFtaWNGaWVsZElEIiwKICAgICk7Cn0KCiMgcmVzdG9yZSBvcmlnaW5hbCBkeW5hbWljIGZpZWxkcyBvcmRlcgpmb3IgbXkgJER5bmFtaWNGaWVsZCAoIEB7JE9yaWdpbmFsRHluYW1pY0ZpZWxkc30gKSB7CgogICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRVcGRhdGUoCiAgICAgICAgJXskRHluYW1pY0ZpZWxkfSwKICAgICAgICBSZW9yZGVyID0+IDAsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCiAgICAjIGNoZWNrIGlmIHVwZGF0ZSAocmVzdG9yZSkgd2FzIHN1Y2Nlc3NmdWwKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICJSZXN0b3JlZCBPcmlnaW5hbCBEeW5hbWljIEZpZWxkICAtIGZvciBGaWVsZElEICREeW5hbWljRmllbGQtPntJRH0iLAogICAgKTsKfQoKIyBzZXQgU2VuZE5vdGlmaWNhdGlvbnMgdG8gaXQncyBvcmlnaW5hbCB2YWx1ZQokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnSVRTTUNoYW5nZTo6U2VuZE5vdGlmaWNhdGlvbnMnLAogICAgVmFsdWUgPT4gJFNlbmROb3RpZmljYXRpb25zT3JnLAopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgdGVzdCBjaGFuZ2UgZm9yIGVhY2ggc3RhdGUgaW4gQWdlbnRJVFNNQ2hhbmdlIHNjcmVlbgogICAgICAgIGZvciBteSAkQ2hhbmdlU3RhdGUgKAogICAgICAgICAgICAncmVxdWVzdGVkJywgICAncGVuZGluZyBhcHByb3ZhbCcsICdyZWplY3RlZCcsICdhcHByb3ZlZCcsICdpbiBwcm9ncmVzcycsCiAgICAgICAgICAgICdwZW5kaW5nIHBpcicsICdzdWNjZXNzZnVsJywgICAgICAgJ2ZhaWxlZCcsICAgJ2NhbmNlbGVkJywgJ3JldHJhY3RlZCcKICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgICAgIG15ICRDaGFuZ2VTdGF0ZURhdGFSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICAgICAgICAgICAgIE5hbWUgID0+ICRDaGFuZ2VTdGF0ZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNoYW5nZQogICAgICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSAnIC4gJENoYW5nZVN0YXRlIC4gJyAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICdTZWxlbml1bSBUZXN0IERlc2NyaXB0aW9uJywKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ1NlbGVuaXVtIFRlc3QgSnVzdGlmaWNhdGlvbicsCiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VTdGF0ZURhdGFSZWYtPntJdGVtSUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICJDaGFuZ2UgaW4gJENoYW5nZVN0YXRlIHN0YXRlIGlzIGNyZWF0ZWQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01DaGFuZ2Ugc2NyZWVuCiAgICAgICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZTtTb3J0Qnk9Q2hhbmdlTnVtYmVyO09yZGVyQnk9RG93biIpOwoKICAgICAgICAgICAgaWYgKCAkQ2hhbmdlU3RhdGUgZXEgJ3BlbmRpbmcgYXBwcm92YWwnICkgewoKICAgICAgICAgICAgICAgICMgY2xpY2sgb24gYXBwcm9wcmlhdGUgZmlsdGVyCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdGaWx0ZXI9cGVuZGluZyUyMGFwcHJvdmFsJyApXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJENoYW5nZVN0YXRlIGVxICdpbiBwcm9ncmVzcycgKSB7CgogICAgICAgICAgICAgICAgIyBjbGljayBvbiBhcHByb3ByaWF0ZSBmaWx0ZXIKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0ZpbHRlcj1pbiUyMHByb2dyZXNzJyApXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJENoYW5nZVN0YXRlIGVxICdwZW5kaW5nIHBpcicgKSB7CgogICAgICAgICAgICAgICAgIyBjbGljayBvbiBhcHByb3ByaWF0ZSBmaWx0ZXIKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0ZpbHRlcj1wZW5kaW5nJTIwcGlyJyApXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgY2xpY2sgb24gYXBwcm9wcmlhdGUgZmlsdGVyCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdGaWx0ZXI9JENoYW5nZVN0YXRlJyApXSIpLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgc2NyZWVuCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRoZWFkIHRyIHRoIiwgJ2NzcycgKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSB0Ym9keSB0ciB0ZCIsICdjc3MnICk7CgogICAgICAgICAgICAjIGNoZWNrIGZvciB0ZXN0IGNyZWF0ZWQgY2hhbmdlCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRDaGFuZ2VUaXRsZVJhbmRvbSApID4gLTEsCiAgICAgICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGZvdW5kIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZGVsZXRlIGNyZWF0ZWQgdGVzdCBjaGFuZ2UKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gJ0lUU01DaGFuZ2UqJyApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZG8gbm90IGNoZWNrIFJpY2hUZXh0CiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0Zyb250ZW5kOjpSaWNoVGV4dCcsCiAgICAgICAgICAgIFZhbHVlID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgYW5kIGxvZyBpbiB0ZXN0IHVzZXIKICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAnaXRzbS1jaGFuZ2UnLCAnaXRzbS1jaGFuZ2UtbWFuYWdlcicgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01DaGFuZ2VBZGQgc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ2hhbmdlQWRkIik7CgogICAgICAgICMgY2hlY2sgcGFnZQogICAgICAgIGZvciBteSAkSUQgKAogICAgICAgICAgICBxdyhDaGFuZ2VUaXRsZSBSaWNoVGV4dDEgUmljaFRleHQyIENhdGVnb3J5SUQgSW1wYWN0SUQgUHJpb3JpdHlJRCBSZXF1ZXN0ZWRUaW1lVXNlZAogICAgICAgICAgICBSZXF1ZXN0ZWRUaW1lTW9udGggUmVxdWVzdGVkVGltZURheSBSZXF1ZXN0ZWRUaW1lWWVhciBSZXF1ZXN0ZWRUaW1lSG91ciBSZXF1ZXN0ZWRUaW1lTWludXRlCiAgICAgICAgICAgIEZpbGVVcGxvYWQgU3VibWl0Q2hhbmdlQWRkKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkRWxlbWVudCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiIyRJRCIsICdjc3MnICk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGdlbmVyYWwgY2F0YWxvZyBvYmplY3QKICAgICAgICBteSAkR2VuZXJhQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICAgICAjIGdldCBjYXRlZ29yeSBJRCAnNSB2ZXJ5IGhpZ2gnCiAgICAgICAgbXkgJENhdGVnb3J5RGF0YVJlZiA9ICRHZW5lcmFDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2F0ZWdvcnknLAogICAgICAgICAgICBOYW1lICA9PiAnNSB2ZXJ5IGhpZ2gnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGltcGFjdCBJRCAnNCB2ZXJ5IGhpZ2gnCiAgICAgICAgbXkgJEltcGFjdERhdGFSZWYgPSAkR2VuZXJhQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkltcGFjdCcsCiAgICAgICAgICAgIE5hbWUgID0+ICc0IGhpZ2gnLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gIlNlbGVuaXVtQ2hhbmdlICIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0NoYW5nZVRpdGxlIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRDaGFuZ2VUaXRsZVJhbmRvbSk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjUmljaFRleHQxIiwgICAnY3NzJyApLT5zZW5kX2tleXMoJ1NlbGVuaXVtRGVzY3JpcHRpb24nKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNSaWNoVGV4dDIiLCAgICdjc3MnICktPnNlbmRfa2V5cygnU2VsZW5pdW1KdXN0aWZpY2F0aW9uJyk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjQ2F0ZWdvcnlJRCcpLnZhbCgnJENhdGVnb3J5RGF0YVJlZi0+e0l0ZW1JRH0nKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI0ltcGFjdElEJykudmFsKCckSW1wYWN0RGF0YVJlZi0+e0l0ZW1JRH0nKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdENoYW5nZUFkZCIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjaGVjayBjcmVhdGVkIHRlc3QgY2hhbmdlIHZhbHVlcwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJENoYW5nZVRpdGxlUmFuZG9tICkgPiAtMSwKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBmb3VuZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICJyZXR1cm4gXCQoJ3A6Y29udGFpbnMoNSB2ZXJ5IGhpZ2gpJykubGVuZ3RoIgogICAgICAgICAgICApLAogICAgICAgICAgICAiVGVzdCBDaGFuZ2UgdmFsdWUgY2F0ZWdvcnkgNSB2ZXJ5IGhpZ2ggaXMgZm91bmQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAicmV0dXJuIFwkKCdwOmNvbnRhaW5zKDQgaGlnaCknKS5sZW5ndGgiCiAgICAgICAgICAgICksCiAgICAgICAgICAgICJUZXN0IENoYW5nZSB2YWx1ZSBpbXBhY3QgNCBoaWdoIGlzIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBEQiBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBnZXQgY3JlYXRlZCB0ZXN0IGNoYW5nZSBJRAogICAgICAgIG15ICRDaGFuZ2VRdW90ZWQgPSAkREJPYmplY3QtPlF1b3RlKCRDaGFuZ2VUaXRsZVJhbmRvbSk7CiAgICAgICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgID0+ICJTRUxFQ1QgaWQgRlJPTSBjaGFuZ2VfaXRlbSBXSEVSRSB0aXRsZSA9ID8iLAogICAgICAgICAgICBCaW5kID0+IFsgXCRDaGFuZ2VRdW90ZWQgXQogICAgICAgICk7CiAgICAgICAgbXkgJENoYW5nZUlEOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkQ2hhbmdlSUQgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IGNoYW5nZQogICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdzdWNjZXNzZnVsJywKICAgICAgICApOwoKICAgICAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAiVGVzdCBEZXNjcmlwdGlvbiIsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gIlRlc3QgSnVzdGlmaWNhdGlvbiIsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICJDaGFuZ2UgaW4gc3VjY2Vzc2Z1bCBzdGF0ZSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0ZW1wbGF0ZSBvYmplY3QKICAgICAgICBteSAkVGVtcGxhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6VGVtcGxhdGUnKTsKCiAgICAgICAgIyBjcmVhdGUgc2ltcGxlIGNoYW5nZSB0ZW1wbGF0ZQogICAgICAgIG15ICRUZW1wbGF0ZU5hbWVSYW5kb20gPSAnVGVtcGxhdGUgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUNvbnRlbnQgICAgICA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVTZXJpYWxpemUoCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkVGVtcGxhdGVOYW1lUmFuZG9tLAogICAgICAgICAgICBUZW1wbGF0ZVR5cGUgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICBWYWxpZElEICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHRlbXBsYXRlIGZyb20gdGVzdCBjaGFuZ2UKICAgICAgICBteSAkVGVtcGxhdGVJRCA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVBZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkVGVtcGxhdGVOYW1lUmFuZG9tLAogICAgICAgICAgICBUZW1wbGF0ZVR5cGUgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICBDb250ZW50ICAgICAgPT4gJENoYW5nZUNvbnRlbnQsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgIkNoYW5nZSBUZW1wbGF0ZSAkVGVtcGxhdGVJRCBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTUNoYW5nZUFkZEZyb21UZW1wbGF0ZSBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUiKTsKCiAgICAgICAgIyBjaGVjayBwYWdlCiAgICAgICAgZm9yIG15ICRJRCAoCiAgICAgICAgICAgIHF3KFRlbXBsYXRlSUQgTW92ZVRpbWVUeXBlIE1vdmVUaW1lTW9udGggTW92ZVRpbWVEYXkgTW92ZVRpbWVZZWFyIE1vdmVUaW1lSG91ciBNb3ZlVGltZU1pbnV0ZSBTdWJtaXRBZGRUZW1wbGF0ZSkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiMkSUQiLCAnY3NzJyApOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZGlzcGxheWVkKCk7CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSBuZXcgY2hhbmdlIGZyb20gdGVzdCB0ZW1wbGF0ZQogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI1RlbXBsYXRlSUQnKS52YWwoJyRUZW1wbGF0ZUlEJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTdWJtaXRBZGRUZW1wbGF0ZSIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjaGVjayBjaGFuZ2UgdmFsdWVzIGNyZWF0ZWQgZnJvbSB0ZXN0IHRlbXBsYXRlCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkQ2hhbmdlVGl0bGVSYW5kb20gKSA+IC0xLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBEQiBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBnZXQgY3JlYXRlZCB0ZXN0IGNoYW5nZSBJRAogICAgICAgIG15ICRDaGFuZ2VRdW90ZWQgPSAkREJPYmplY3QtPlF1b3RlKCRDaGFuZ2VUaXRsZVJhbmRvbSk7CiAgICAgICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZAogICAgICAgICAgICAgICAgRlJPTSBjaGFuZ2VfaXRlbQogICAgICAgICAgICAgICAgV0hFUkUgdGl0bGUgPSA/CiAgICAgICAgICAgICAgICBBTkQgaWQgIT0gJENoYW5nZUlEIiwKICAgICAgICAgICAgQmluZCA9PiBbIFwkQ2hhbmdlUXVvdGVkIF0KICAgICAgICApOwogICAgICAgIG15ICRDcmVhdGVkQ2hhbmdlSUQ7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRDcmVhdGVkQ2hhbmdlSUQgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgdGVzdCB0ZW1wbGF0ZQogICAgICAgIG15ICRTdWNjZXNzID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZURlbGV0ZSgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJFRlbXBsYXRlTmFtZVJhbmRvbSBpcyBkZWxldGVkIgogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY2hhbmdlcwogICAgICAgIGZvciBteSAkQ2hhbmdlRGVsZXRlICggJENoYW5nZUlELCAkQ3JlYXRlZENoYW5nZUlEICkgewogICAgICAgICAgICAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VEZWxldGUsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIklUU01DaGFuZ2UgJENoYW5nZURlbGV0ZSBpcyBkZWxldGVkIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gJ0lUU01DaGFuZ2UqJyApOwoKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgR2V0IFNlbGVuaXVtIG9iamVjdC4KbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgbXkgJEhlbHBlciAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CiAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CiAgICAgICAgbXkgJFVzZXJPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgICAgICMgR2V0IGNoYW5nZSBzdGF0ZSBkYXRhLgogICAgICAgIG15ICRDaGFuZ2VTdGF0ZURhdGFSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICAgICBOYW1lICA9PiAnc3VjY2Vzc2Z1bCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCBjaGFuZ2UuCiAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAiVGVzdCBEZXNjcmlwdGlvbiIsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gIlRlc3QgSnVzdGlmaWNhdGlvbiIsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICJDaGFuZ2UgaW4gc3VjY2Vzc2Z1bCBzdGF0ZSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBhbmQgbG9naW4gYXMgdGVzdCB1c2VyLgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1idWlsZGVyJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0KICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgR2V0IHRlc3QgdXNlciBJRC4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbklEID0gJFVzZXJPYmplY3QtPlVzZXJMb29rdXAoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBuZXcgdGVzdCBDQUIgdXNlcnMuCiAgICAgICAgbXkgJFRlc3RDQUJVc2VyID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1idWlsZGVyJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAjIEdldCBDQUIgdXNlciBJRC4KICAgICAgICBteSAkVGVzdENBQlVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRlc3RDQUJVc2VyLAogICAgICAgICk7CgogICAgICAgICMgR2V0IHNjcmlwdCBhbGlhcy4KICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gQWdlbnRJVFNNQ2hhbmdlWm9vbSBvZiBjcmVhdGVkIHRlc3QgY2hhbmdlLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9JENoYW5nZUlEIik7CgogICAgICAgICMgQ2xpY2sgb24gJ0ludm9sdmVkIFBlcnNvbnMnIGFuZCBzd2l0Y2ggc2NyZWVucy4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zO0NoYW5nZUlEPSRDaGFuZ2VJRCcgKV0iKQogICAgICAgICAgICAtPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyBXYWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5LgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjQ2hhbmdlTWFuYWdlciIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBQcmVwYXJlIENBQiBmb3IgdGVzdCB0ZW1wbGF0ZS4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDaGFuZ2VNYW5hZ2VyIiwgJ2NzcycgKS0+Y2xlYXIoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDaGFuZ2VNYW5hZ2VyIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRUZXN0VXNlckxvZ2luKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgibGkudWktbWVudS1pdGVtOnZpc2libGUiKS5sZW5ndGgnICk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJ2xpLnVpLW1lbnUtaXRlbTpjb250YWlucygkVGVzdFVzZXJMb2dpbiknKS5jbGljaygpIik7CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05ld0NBQk1lbWJlciIsICdjc3MnICktPmNsZWFyKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTmV3Q0FCTWVtYmVyIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRUZXN0Q0FCVXNlcik7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoImxpLnVpLW1lbnUtaXRlbTp2aXNpYmxlIikubGVuZ3RoJyApOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCdsaS51aS1tZW51LWl0ZW06Y29udGFpbnMoJFRlc3RDQUJVc2VyKScpLmNsaWNrKCkiKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQWRkQ0FCTWVtYmVyQnV0dG9uIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjQ0FCQWdlbnRzJFRlc3RDQUJVc2VySUQnKS5sZW5ndGgiICk7CgogICAgICAgICMgVmVyaWZ5IENBQiB1c2VyLgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFRlc3RDQUJVc2VyICkgPiAtMSwKICAgICAgICAgICAgIiRUZXN0Q0FCVXNlciBpcyBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBDbGljayAnU2F2ZSB0aGlzIENBQiBhcyB0ZW1wbGF0ZScuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J05ld1RlbXBsYXRlJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ2hlY2sgcGFnZS4KICAgICAgICBmb3IgbXkgJElEIChxdyhUZW1wbGF0ZU5hbWUgQ29tbWVudCBWYWxpZElEIFN1Ym1pdEFkZFRlbXBsYXRlKSkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjJElEIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBjbGllbnQgc2lkZSB2YWxpZGF0aW9uLgogICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjVGVtcGxhdGVOYW1lIiwgJ2NzcycgKTsKICAgICAgICAkRWxlbWVudC0+c2VuZF9rZXlzKCIiKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTdWJtaXRBZGRUZW1wbGF0ZSIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgInJldHVybiBcJCgnI1RlbXBsYXRlTmFtZScpLmhhc0NsYXNzKCdFcnJvcicpIgogICAgICAgICAgICApLAogICAgICAgICAgICAnMScsCiAgICAgICAgICAgICdDbGllbnQgc2lkZSB2YWxpZGF0aW9uIGNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIGlucHV0IHZhbHVlJywKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IENBQiB0ZW1wbGF0ZS4KICAgICAgICBteSAkQ0FCVGVtcGxhdGVOYW1lID0gIkNBQiBUZW1wbGF0ZSAiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNUZW1wbGF0ZU5hbWUiLCAgICAgICdjc3MnICktPnNlbmRfa2V5cygkQ0FCVGVtcGxhdGVOYW1lKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDb21tZW50IiwgICAgICAgICAgICdjc3MnICktPnNlbmRfa2V5cygiU2VsZW5pdW1UZXN0Iik7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU3VibWl0QWRkVGVtcGxhdGUiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgRGVsZXRlIHByZXZpb3VzIENBQiB1c2VyIGZpcnN0LgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0NoYW5nZU1hbmFnZXIiLCAnY3NzJyApLT5zZW5kX2tleXMoJFRlc3RVc2VyTG9naW4pOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCJsaS51aS1tZW51LWl0ZW06dmlzaWJsZSIpLmxlbmd0aCcgKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnbGkudWktbWVudS1pdGVtOmNvbnRhaW5zKCRUZXN0VXNlckxvZ2luKScpLmNsaWNrKCkiKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ0FCQWdlbnRzJFRlc3RDQUJVc2VySUQiLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgIVwkKCcjQ0FCQWdlbnRzJFRlc3RDQUJVc2VySUQnKS5sZW5ndGgiCiAgICAgICAgKTsKCiAgICAgICAgIyBWZXJpZnkgQ0FCIHVzZXIgZGVsZXRpb24uCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGVzdENBQlVzZXIgKSA9PSAtMSwKICAgICAgICAgICAgIiRUZXN0Q0FCVXNlciBpcyBub3QgZm91bmQiLAogICAgICAgICk7CgogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIEdldCB0ZXN0IENBQiB0ZW1wbGF0ZSBJRC4KICAgICAgICBteSAkQ0FCVGVtcGxhdGVRdW90ZWQgPSAkREJPYmplY3QtPlF1b3RlKCRDQUJUZW1wbGF0ZU5hbWUpOwogICAgICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICA9PiAiU0VMRUNUIGlkIEZST00gY2hhbmdlX3RlbXBsYXRlIFdIRVJFIG5hbWUgPSA/IiwKICAgICAgICAgICAgQmluZCA9PiBbIFwkQ0FCVGVtcGxhdGVRdW90ZWQgXQogICAgICAgICk7CiAgICAgICAgbXkgJENBQlRlbXBsYXRlSUQ7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRDQUJUZW1wbGF0ZUlEID0gJFJvd1swXTsKICAgICAgICB9CgogICAgICAgICMgSW1wb3J0IENBQiBmcm9tIHRlbXBsYXRlLgogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI1RlbXBsYXRlSUQnKS52YWwoJyRDQUJUZW1wbGF0ZUlEJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nQXBwbHkgVGVtcGxhdGUnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBWZXJpZnkgQ0FCIHVzZXIgYXBwbGllZCBmcm9tIHRlbXBsYXRlLgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFRlc3RDQUJVc2VyICkgPiAtMSwKICAgICAgICAgICAgIiRUZXN0Q0FCVXNlciBpcyBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBDbG9zZSBwb3B1cC4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIi5DYW5jZWxDbG9zZVBvcHVwIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDEgKTsKCiAgICAgICAgIyBEZWxldGUgdGVzdCBjcmVhdGVkIHRlbXBsYXRlLgogICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlJyktPlRlbXBsYXRlRGVsZXRlKAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRDQUJUZW1wbGF0ZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkQ0FCVGVtcGxhdGVOYW1lIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgRGVsZXRlIHRlc3QgY3JlYXRlZCBjaGFuZ2UuCiAgICAgICAgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdC4KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9CgopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgIG15ICRIZWxwZXIgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CiAgICAgICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CiAgICAgICAgbXkgJENoYW5nZU9iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBHZXQgY2hhbmdlIHN0YXRlIGRhdGEuCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICAgICBOYW1lICA9PiAncGVuZGluZyBwaXInLAogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgY2hhbmdlLgogICAgICAgIG15ICRDaGFuZ2VUaXRsZVJhbmRvbSA9ICdJVFNNQ2hhbmdlICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDaGFuZ2VJRCAgICAgICAgICA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gIlRlc3QgRGVzY3JpcHRpb24iLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICJUZXN0IEp1c3RpZmljYXRpb24iLAogICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VTdGF0ZURhdGFSZWYtPntJdGVtSUR9LAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAiQ2hhbmdlIGluIFBlbmRpbmcgUElSIHN0YXRlIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4uCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLWJ1aWxkZXInLCAnaXRzbS1jaGFuZ2UtbWFuYWdlcicgXQogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIEFnZW50SVRTTUNoYW5nZVpvb20gb2YgY3JlYXRlZCB0ZXN0IGNoYW5nZS4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2Vab29tO0NoYW5nZUlEPSRDaGFuZ2VJRCIpOwoKICAgICAgICAjIENsaWNrIG9uICdDb25kaXRpb25zJyBhbmQgc3dpdGNoIHNjcmVlbnMuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbjtDaGFuZ2VJRD0kQ2hhbmdlSUQnICldIikKICAgICAgICAgICAgLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICBteSAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgV2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeS4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4KICAgICAgICAgICAgICAgICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIi5DYW5jZWxDbG9zZVBvcHVwIikubGVuZ3RoICYmICQoImJ1dHRvbltuYW1lPUFkZENvbmRpdGlvbl0iKS5sZW5ndGgnCiAgICAgICAgKTsKCiAgICAgICAgIyBDbGljayAnQWRkIG5ldyBjb25kaXRpb24nLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQG5hbWU9J0FkZENvbmRpdGlvbiddW1xAdHlwZT0nc3VibWl0J10iKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI05hbWUiKS5sZW5ndGggJiYgJCgiI0NvbW1lbnQiKS5sZW5ndGgnCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCBjb25kaXRpb24uCiAgICAgICAgbXkgJENvbmRpdGlvbk5hbWVSYW5kb20gPSAiQ29uZGl0aW9uICIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05hbWUiLCAgICAnY3NzJyApLT5zZW5kX2tleXMoJENvbmRpdGlvbk5hbWVSYW5kb20pOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0NvbW1lbnQiLCAnY3NzJyApLT5zZW5kX2tleXMoIlNlbGVuaXVtQ29uZGl0aW9uIik7CgogICAgICAgIG15ICRDb25kaXRpb25PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicpOwoKICAgICAgICAjIEdldCBuZWVkZWQgSURzLgogICAgICAgIG15ICRFeHByZXNpb25BdHRyaWJ1dGVJRCA9ICRDb25kaXRpb25PYmplY3QtPkF0dHJpYnV0ZUxvb2t1cCgKICAgICAgICAgICAgTmFtZSA9PiAnSW1wYWN0SUQnLAogICAgICAgICk7CiAgICAgICAgbXkgJEltcGFjdERhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpJbXBhY3QnLAogICAgICAgICAgICBOYW1lICA9PiAnNCBoaWdoJywKICAgICAgICApOwogICAgICAgIG15ICRBY3Rpb25BdHRyaWJ1dGVJRCA9ICRDb25kaXRpb25PYmplY3QtPkF0dHJpYnV0ZUxvb2t1cCgKICAgICAgICAgICAgTmFtZSA9PiAnQ2hhbmdlU3RhdGVJRCcKICAgICAgICApOwogICAgICAgIG15ICRBY3Rpb25PcGVyYXRvcklEID0gJENvbmRpdGlvbk9iamVjdC0+T3BlcmF0b3JMb29rdXAoCiAgICAgICAgICAgIE5hbWUgPT4gJ3NldCcsCiAgICAgICAgKTsKICAgICAgICBteSAkQ29uZGl0aW9uQ2hhbmdlU3RhdGVEYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdzdWNjZXNzZnVsJywKICAgICAgICApOwoKICAgICAgICAjIEFkZCBuZXcgZXhwcmVzc2lvbi4KICAgICAgICAjIEluIGNoYW5nZSBvYmplY3QgZm9yIHRlc3QgY2hhbmdlLCBsb29rIGZvciBpbXBhY3QgdmFsdWUgb2YgJzQgaGlnaCcuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAbmFtZT0nQWRkRXhwcmVzc2lvbkJ1dHRvbiddW1xAdHlwZT0nc3VibWl0J10iKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI0V4cHJlc3Npb25JRC1ORVctT2JqZWN0SUQgb3B0aW9uW3ZhbHVlPTFdIikubGVuZ3RoJwogICAgICAgICk7CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0V4cHJlc3Npb25JRC1ORVctT2JqZWN0SUQgb3B0aW9uW3ZhbHVlPScxJ10iLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAjIFdhaXQgZm9yIGFqYXggcmVzcG9uc2UgdG8gZmlsbCBuZXh0IGRyb3Bkb3duIGxpc3Qgd2l0aCBtb3JlIHRoYW4gMSB2YWx1ZS4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI0V4cHJlc3Npb25JRC1ORVctU2VsZWN0b3Igb3B0aW9uJykubGVuZ3RoID4gMTsiICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRXhwcmVzc2lvbklELU5FVy1TZWxlY3RvciBvcHRpb25bdmFsdWU9JyRDaGFuZ2VJRCddIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyBXYWl0IGZvciBhamF4IHJlc3BvbnNlIHRvIGZpbGwgbmV4dCBkcm9wZG93biBsaXN0IHdpdGggbW9yZSB0aGFuIDEgdmFsdWUuCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJyNFeHByZXNzaW9uSUQtTkVXLUF0dHJpYnV0ZUlEIG9wdGlvbicpLmxlbmd0aCA+IDE7IiApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0V4cHJlc3Npb25JRC1ORVctQXR0cmlidXRlSUQgb3B0aW9uW3ZhbHVlPSckRXhwcmVzaW9uQXR0cmlidXRlSUQnXSIsICdjc3MnICkKICAgICAgICAgICAgLT5jbGljaygpOwoKICAgICAgICAjIFdhaXQgZm9yIGFqYXggcmVzcG9uc2UgdG8gZmlsbCBuZXh0IGRyb3Bkb3duIGxpc3Qgd2l0aCBtb3JlIHRoYW4gMSB2YWx1ZS4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI0V4cHJlc3Npb25JRC1ORVctT3BlcmF0b3JJRCBvcHRpb24nKS5sZW5ndGggPiAxOyIgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNFeHByZXNzaW9uSUQtTkVXLU9wZXJhdG9ySUQgb3B0aW9uW3ZhbHVlPScxJ10iLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAjIFdhaXQgZm9yIGFqYXggcmVzcG9uc2UgdG8gZmlsbCBuZXh0IGRyb3Bkb3duIGxpc3Qgd2l0aCBtb3JlIHRoYW4gMSB2YWx1ZS4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI0V4cHJlc3Npb25JRC1ORVctQ29tcGFyZVZhbHVlIG9wdGlvbicpLmxlbmd0aCA+IDE7IiApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0V4cHJlc3Npb25JRC1ORVctQ29tcGFyZVZhbHVlIG9wdGlvblt2YWx1ZT0nJEltcGFjdERhdGFSZWYtPntJdGVtSUR9J10iLCAnY3NzJyApCiAgICAgICAgICAgIC0+Y2xpY2soKTsKCiAgICAgICAgIyBBZGQgbmV3IGFjdGlvbi4KICAgICAgICAjIEluIGNoYW5nZSBvYmplY3QgZm9yIHRlc3QgY2hhbmdlLCBzZXQgY2hhbmdlIHN0YXRlIG9uIHN1Y2Nlc3NmdWwuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAbmFtZT0nQWRkQWN0aW9uQnV0dG9uJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjQWN0aW9uSUQtTkVXLU9iamVjdElEIG9wdGlvblt2YWx1ZT0xXSIpLmxlbmd0aCcKICAgICAgICApOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNBY3Rpb25JRC1ORVctT2JqZWN0SUQgb3B0aW9uW3ZhbHVlPScxJ10iLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAjIFdhaXQgZm9yIGFqYXggcmVzcG9uc2UgdG8gZmlsbCBuZXh0IGRyb3Bkb3duIGxpc3Qgd2l0aCBtb3JlIHRoYW4gMSB2YWx1ZS4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI0FjdGlvbklELU5FVy1TZWxlY3RvciBvcHRpb24nKS5sZW5ndGggPiAxOyIgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNBY3Rpb25JRC1ORVctU2VsZWN0b3Igb3B0aW9uW3ZhbHVlPSckQ2hhbmdlSUQnXSIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICMgV2FpdCBmb3IgYWpheCByZXNwb25zZSB0byBmaWxsIG5leHQgZHJvcGRvd24gbGlzdCB3aXRoIG1vcmUgdGhhbiAxIHZhbHVlLgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcjQWN0aW9uSUQtTkVXLUF0dHJpYnV0ZUlEIG9wdGlvbicpLmxlbmd0aCA+IDE7IiApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0FjdGlvbklELU5FVy1BdHRyaWJ1dGVJRCBvcHRpb25bdmFsdWU9JyRBY3Rpb25BdHRyaWJ1dGVJRCddIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyBXYWl0IGZvciBhamF4IHJlc3BvbnNlIHRvIGZpbGwgbmV4dCBkcm9wZG93biBsaXN0IHdpdGggbW9yZSB0aGFuIDEgdmFsdWUuCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJyNBY3Rpb25JRC1ORVctT3BlcmF0b3JJRCBvcHRpb24nKS5sZW5ndGggPiAxOyIgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNBY3Rpb25JRC1ORVctT3BlcmF0b3JJRCBvcHRpb25bdmFsdWU9JyRBY3Rpb25PcGVyYXRvcklEJ10iLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAjIFdhaXQgZm9yIGFqYXggcmVzcG9uc2UgdG8gZmlsbCBuZXh0IGRyb3Bkb3duIGxpc3Qgd2l0aCBtb3JlIHRoYW4gMSB2YWx1ZS4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI0FjdGlvbklELU5FVy1BY3Rpb25WYWx1ZSBvcHRpb24nKS5sZW5ndGggPiAxOyIgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgKICAgICAgICAgICAgIiNBY3Rpb25JRC1ORVctQWN0aW9uVmFsdWUgb3B0aW9uW3ZhbHVlPSckQ29uZGl0aW9uQ2hhbmdlU3RhdGVEYXRhUmVmLT57SXRlbUlEfSddIiwKICAgICAgICAgICAgJ2NzcycKICAgICAgICApLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTYXZlQnV0dG9uIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4KICAgICAgICAgICAgICAgICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIi5XaWRnZXRTaW1wbGUgLkhlYWRlciBoMiIpLnRleHQoKSA9PT0gIkNvbmRpdGlvbnMgYW5kIEFjdGlvbnMiJwogICAgICAgICk7CgogICAgICAgICMgQ2hlY2sgc2NyZWVuLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIFZlcmlmeSBjcmVhdGVkIGNvbmRpdGlvbiBuYW1lIHZhbHVlLgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJENvbmRpdGlvbk5hbWVSYW5kb20gKSA+IC0xLAogICAgICAgICAgICAiJENvbmRpdGlvbk5hbWVSYW5kb20gaXMgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgQ2xvc2UgYW5kIHN3aXRjaCB3aW5kb3cuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIuQ2FuY2VsQ2xvc2VQb3B1cCIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAxICk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzBdICk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PSAiZnVuY3Rpb24iICYmICQoIi5WYWx1ZTpjb250YWlucyhcJ1BlbmRpbmcgUElSXCcpIikubGVuZ3RoJwogICAgICAgICk7CgogICAgICAgICMgQ2hlY2sgdGVzdCBjaGFuZ2Ugc3RhdGUuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoJ3JldHVybiAkKCIuVmFsdWU6Y29udGFpbnMoXCdQZW5kaW5nIFBJUlwnKSIpLmxlbmd0aCA9PT0gMScpLAogICAgICAgICAgICAiUGVuZGluZyBQSVIgc3RhdGUgaXMgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgR2V0IGdlbmVyYWwgY2F0YWxvZyBpbXBhY3QgSUQgJzQgdmVyeSBoaWdoJy4KICAgICAgICBteSAkQ2F0YWxvZ0ltcGFjdERhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpJbXBhY3QnLAogICAgICAgICAgICBOYW1lICA9PiAnNCBoaWdoJywKICAgICAgICApOwoKICAgICAgICAjIENsaWNrIHRvIGVkaXQgY2hhbmdlIGFuZCBzZXQgaXRzIGltcGFjdCBvbiAnNCBoaWdoJyB0byB0cmlnZ2VyIGNvbmRpdGlvbi4KICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJ2FbaHJlZio9XCJBY3Rpb249QWdlbnRJVFNNQ2hhbmdlRWRpdDtDaGFuZ2VJRD0kQ2hhbmdlSURcIl0nKS50cmlnZ2VyKCdjbGljaycpOyIKICAgICAgICApOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgV2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeS4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiYm9keSIpLmxlbmd0aCAmJiAkKCIjSW1wYWN0SUQiKS5sZW5ndGgnCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjSW1wYWN0SUQnKS52YWwoJyRDYXRhbG9nSW1wYWN0RGF0YVJlZi0+e0l0ZW1JRH0nKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI0ltcGFjdElEJykudmFsKCkgPT0gJyRDYXRhbG9nSW1wYWN0RGF0YVJlZi0+e0l0ZW1JRH0nIgogICAgICAgICk7CgogICAgICAgICMgU3VibWl0IGFuZCBjaGFuZ2Ugd2luZG93LgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTdWJtaXQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAxICk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzBdICk7CgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRSZWZyZXNoKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZihDb3JlKSA9PSAib2JqZWN0IiAmJiB0eXBlb2YoQ29yZS5BcHApID09ICJvYmplY3QiICYmIENvcmUuQXBwLlBhZ2VMb2FkQ29tcGxldGUnCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gJCgiLlZhbHVlOmNvbnRhaW5zKFwnU3VjY2Vzc2Z1bFwnKSIpLmxlbmd0aCcKICAgICAgICApOwoKICAgICAgICAjIENoZWNrIGZvciBleHBlY3RlZCBjaGFuZ2Ugc3RhdGUgdG8gdmVyaWZ5IHRlc3QgY29uZGl0aW9uLgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCdyZXR1cm4gJCgiLlZhbHVlOmNvbnRhaW5zKFwnU3VjY2Vzc2Z1bFwnKSIpLmxlbmd0aCA9PT0gMScpLAogICAgICAgICAgICAiU3VjY2Vzc2Z1bCBzdGF0ZSBpcyBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCdhW2hyZWYqPVwiQWN0aW9uPUFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbjtDaGFuZ2VJRD0kQ2hhbmdlSURcIl0nKS5jbGljaygpOyIKICAgICAgICApOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgV2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeS4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4KICAgICAgICAgICAgICAgICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnLkNhbmNlbENsb3NlUG9wdXAnKS5sZW5ndGggJiYgXCQoJ2FbaHJlZio9XCJBY3Rpb249QWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uO0NoYW5nZUlEPSRDaGFuZ2VJRFwiXScpLmxlbmd0aCIKICAgICAgICApOwoKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJ2FbaHJlZio9XCJBY3Rpb249QWdlbnRJVFNNQ2hhbmdlQ29uZGl0aW9uO0NoYW5nZUlEPSRDaGFuZ2VJRFwiXScpLmNsaWNrKCk7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJ2J1dHRvblt2YWx1ZT1BZGRdJykubGVuZ3RoIgogICAgICAgICk7CgogICAgICAgICMgQ2xvc2UgcG9wdXAuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIuQ2FuY2VsQ2xvc2VQb3B1cCIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAxICk7CgogICAgICAgICMgRGVsZXRlIHRlc3QgY3JlYXRlZCBjaGFuZ2UuCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIE1ha2Ugc3VyZSBjYWNoZSBpcyBjb3JyZWN0LgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICdJVFNNQ2hhbmdlKicgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZG8gbm90IGNoZWNrIFJpY2hUZXh0CiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0Zyb250ZW5kOjpSaWNoVGV4dCcsCiAgICAgICAgICAgIFZhbHVlID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgZ2VuZXJhbCBjYXRhbG9nIG9iamVjdAogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICAgICAjIGdldCBjaGFuZ2Ugc3RhdGUgZGF0YQogICAgICAgIG15ICRDaGFuZ2VTdGF0ZURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ3BlbmRpbmcgcGlyJywKICAgICAgICApOwoKICAgICAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAiVGVzdCBEZXNjcmlwdGlvbiIsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gIlRlc3QgSnVzdGlmaWNhdGlvbiIsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICJDaGFuZ2UgaW4gUGVuZGluZyBQSVIgc3RhdGUgaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgYW5kIGxvZyBpbiB0ZXN0IHVzZXIKICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAnaXRzbS1jaGFuZ2UnLCAnaXRzbS1jaGFuZ2UtYnVpbGRlcicsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNQ2hhbmdlWm9vbSBvZiBjcmVhdGVkIHRlc3QgY2hhbmdlCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ2hhbmdlWm9vbTtDaGFuZ2VJRD0kQ2hhbmdlSUQiKTsKCiAgICAgICAgIyBjbGljayBvbiAnRWRpdCcgYW5kIHN3aXRjaCBzY3JlZW5zCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTUNoYW5nZUVkaXQ7Q2hhbmdlSUQ9JENoYW5nZUlEJyApXSIpLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICBteSAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgd2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjQ2hhbmdlVGl0bGUiKS5sZW5ndGgnICk7CgogICAgICAgICMgZ2V0IGdlbmVyYWwgY2F0YWxvZyBjYXRlZ29yeSwgaW1wYWN0IGFuZCBwcmlvcml0eSBJRCBmb3IgJzMgbm9ybWFsJwogICAgICAgIG15IEBTdG9yZWRJRHM7CiAgICAgICAgZm9yIG15ICRHZW5lcmFsQ2F0YWxvZ1N0b3JlZCAocXcoQ2F0ZWdvcnkgSW1wYWN0IFByaW9yaXR5KSkgewogICAgICAgICAgICBteSAkQ2F0YWxvZ0RhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAiSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6JEdlbmVyYWxDYXRhbG9nU3RvcmVkIiwKICAgICAgICAgICAgICAgIE5hbWUgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHB1c2ggQFN0b3JlZElEcywgJENhdGFsb2dEYXRhUmVmLT57SXRlbUlEfTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGdlbmVyYWwgY2F0YWxvZyBjYXRlZ29yeSwgaW1wYWN0IGFuZCBwcmlvcml0eSBJRCBmb3IgJzQgaGlnaCcKICAgICAgICBteSBARWRpdElEczsKICAgICAgICBmb3IgbXkgJEdlbmVyYWxDYXRhbG9nRWRpdCAocXcoQ2F0ZWdvcnkgSW1wYWN0IFByaW9yaXR5KSkgewogICAgICAgICAgICBteSAkQ2F0YWxvZ0RhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAiSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6JEdlbmVyYWxDYXRhbG9nRWRpdCIsCiAgICAgICAgICAgICAgICBOYW1lICA9PiAnNCBoaWdoJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBARWRpdElEcywgJENhdGFsb2dEYXRhUmVmLT57SXRlbUlEfTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgc3RvcmVkIHZhbHVlcwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjQ2hhbmdlVGl0bGUnLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgJENoYW5nZVRpdGxlUmFuZG9tLAogICAgICAgICAgICAiI0NoYW5nZVRpdGxlIHN0b3JlZCB2YWx1ZSIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnI1JpY2hUZXh0MScsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAnVGVzdCBEZXNjcmlwdGlvbicsCiAgICAgICAgICAgICIjRGVzY3JpcHRpb24gc3RvcmVkIHZhbHVlIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjUmljaFRleHQyJywgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgICdUZXN0IEp1c3RpZmljYXRpb24nLAogICAgICAgICAgICAiI0p1c3RpZmljYXRpb24gc3RvcmVkIHZhbHVlIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjQ2F0ZWdvcnlJRCcsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAkU3RvcmVkSURzWzBdLAogICAgICAgICAgICAiI0NhdGVnb3J5SUQgc3RvcmVkIHZhbHVlIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjSW1wYWN0SUQnLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgJFN0b3JlZElEc1sxXSwKICAgICAgICAgICAgIiNJbXBhY3RJRCBzdG9yZWQgdmFsdWUiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNQcmlvcml0eUlEJywgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgICRTdG9yZWRJRHNbMl0sCiAgICAgICAgICAgICIjUHJpb3JpdHlJRCBzdG9yZWQgdmFsdWUiLAogICAgICAgICk7CgogICAgICAgICMgZWRpdCBmaWVsZHMgYW5kIHN1Ym1pdAogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0NoYW5nZVRpdGxlIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCIgZWRpdCIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1JpY2hUZXh0MSIsICAgJ2NzcycgKS0+c2VuZF9rZXlzKCIgZWRpdCIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1JpY2hUZXh0MiIsICAgJ2NzcycgKS0+c2VuZF9rZXlzKCIgZWRpdCIpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI0NhdGVnb3J5SUQnKS52YWwoJyRFZGl0SURzWzBdJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI0ltcGFjdElEJykudmFsKCckRWRpdElEc1sxXScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7Iik7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjUHJpb3JpdHlJRCcpLnZhbCgnJEVkaXRJRHNbMl0nKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTdWJtaXQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPmNsaWNrKCk7CgogICAgICAgICMgc3dpdGNoIGJhY2sgd2luZG93CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAxICk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzBdICk7CgogICAgICAgIHNsZWVwKDEpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiYm9keSIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBjbGljayBvbiAnRWRpdCcgYW5kIHN3aXRjaCBzY3JlZW5zCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTUNoYW5nZUVkaXQ7Q2hhbmdlSUQ9JENoYW5nZUlEJyApXSIpLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgd2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjQ2hhbmdlVGl0bGUiKS5sZW5ndGgnICk7CgogICAgICAgICMgY2hlY2sgZWRpdGVkIHZhbHVlcwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjQ2hhbmdlVGl0bGUnLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgJENoYW5nZVRpdGxlUmFuZG9tIC4gJyBlZGl0JywKICAgICAgICAgICAgIiNDaGFuZ2VUaXRsZSBlZGl0ZWQgdmFsdWUiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNSaWNoVGV4dDEnLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgJ1Rlc3QgRGVzY3JpcHRpb24gZWRpdCcsCiAgICAgICAgICAgICIjRGVzY3JpcHRpb24gZWRpdGVkIHZhbHVlIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjUmljaFRleHQyJywgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgICdUZXN0IEp1c3RpZmljYXRpb24gZWRpdCcsCiAgICAgICAgICAgICIjSnVzdGlmaWNhdGlvbiBlZGl0ZWQgdmFsdWUiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNDYXRlZ29yeUlEJywgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgICRFZGl0SURzWzBdLAogICAgICAgICAgICAiI0NhdGVnb3J5SUQgZWRpdGVkIHZhbHVlIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjSW1wYWN0SUQnLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgJEVkaXRJRHNbMV0sCiAgICAgICAgICAgICIjSW1wYWN0SUQgZWRpdGVkIHZhbHVlIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjUHJpb3JpdHlJRCcsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAkRWRpdElEc1syXSwKICAgICAgICAgICAgIiNQcmlvcml0eUlEIGVkaXRlZCB2YWx1ZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIGNoYW5nZQogICAgICAgIG15ICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gZWRpdCBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gJ0lUU01DaGFuZ2UqJyApOwogICAgfQoKKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdwZW5kaW5nIHBpcicsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNoYW5nZQogICAgICAgIG15ICRDaGFuZ2VUaXRsZVJhbmRvbSA9ICdJVFNNQ2hhbmdlICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDaGFuZ2VJRCAgICAgICAgICA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gIlRlc3QgRGVzY3JpcHRpb24iLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICJUZXN0IEp1c3RpZmljYXRpb24iLAogICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VTdGF0ZURhdGFSZWYtPntJdGVtSUR9LAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAiQ2hhbmdlIGluIFBlbmRpbmcgUElSIHN0YXRlIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLWJ1aWxkZXInLCAnaXRzbS1jaGFuZ2UtbWFuYWdlcicgXQogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTUNoYW5nZVpvb20gb2YgY3JlYXRlZCB0ZXN0IGNoYW5nZQogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9JENoYW5nZUlEIik7CgogICAgICAgICMgY2xpY2sgb24gJ0VkaXQnIGFuZCBzd2l0Y2ggc2NyZWVucwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01DaGFuZ2VIaXN0b3J5O0NoYW5nZUlEPSRDaGFuZ2VJRCcgKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgbXkgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiLkNhbmNlbENsb3NlUG9wdXAiKS5sZW5ndGgnICk7CgogICAgICAgICMgY2hlY2sgc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSIsICAgICAgICAgICAgICdjc3MnICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSB0aGVhZCB0ciB0aCIsICdjc3MnICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSB0Ym9keSB0ciB0ZCIsICdjc3MnICk7CgogICAgICAgICMgY2hlY2sgZm9yIGhpc3RvcnkgdmFsdWVzIHVwb24gdGVzdCBjaGFuZ2UgY3JlYXRpb24KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJOZXcgQ2hhbmdlIChJRD0kQ2hhbmdlSUQpIiApID4gLTEsCiAgICAgICAgICAgICJOZXcgQ2hhbmdlIChJRD1cIiRDaGFuZ2VJRCkgaXMgZm91bmQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KAogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIkRlc2NyaXB0aW9uOiBOZXc6IFRlc3QgRGVzY3JpcHRpb24gJmx0Oy0gT2xkOiAtIgogICAgICAgICAgICApID4gLTEsCiAgICAgICAgICAgICJEZXNjcmlwdGlvbjogTmV3OiBUZXN0IERlc2NyaXB0aW9uIDwtIE9sZDogaXMgZm91bmQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KAogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIkp1c3RpZmljYXRpb246IE5ldzogVGVzdCBKdXN0aWZpY2F0aW9uICZsdDstIE9sZDogLSIKICAgICAgICAgICAgKSA+IC0xLAogICAgICAgICAgICAiSnVzdGlmaWNhdGlvbjogTmV3OiBUZXN0IEp1c3RpZmljYXRpb24gPC0gT2xkOi0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCBjaGFuZ2UKICAgICAgICBteSAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdwZW5kaW5nIHBpcicsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNoYW5nZSwgd2UgbmVlZCBhIGxvbmcgZGVzY3JpcHRpb24gYW5kIGp1c3RpZmljYXRpb24gdG8gc2hvdyB0aGUgaGlzdG9yeSBkZXRhaWxzCiAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICAgICAiVGVzdCBEZXNjcmlwdGlvbiB3aXRoIGEgdmVyeSB2ZXJ5IHZlcnkgdmVyeSB2ZXJ5IHZlcnkgdmVyeSB2ZXJ5IHZlcnkgdmVyeSB2ZXJ5IHZlcnkgdmVyeSB2ZXJ5IHZlcnkgdmVyeSBsb25nIHRleHQiLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+CiAgICAgICAgICAgICAgICAiVGVzdCBKdXN0aWZpY2F0aW9uIHdpdGggYSB2ZXJ5IHZlcnkgdmVyeSB2ZXJ5IHZlcnkgdmVyeSB2ZXJ5IHZlcnkgdmVyeSB2ZXJ5IHZlcnkgdmVyeSB2ZXJ5IHZlcnkgdmVyeSB2ZXJ5IGxvbmcgdGV4dCIsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICJDaGFuZ2UgaW4gUGVuZGluZyBQSVIgc3RhdGUgaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgYW5kIGxvZyBpbiB0ZXN0IHVzZXIKICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAnaXRzbS1jaGFuZ2UnLCAnaXRzbS1jaGFuZ2UtYnVpbGRlcicsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNQ2hhbmdlWm9vbSBvZiBjcmVhdGVkIHRlc3QgY2hhbmdlCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ2hhbmdlWm9vbTtDaGFuZ2VJRD0kQ2hhbmdlSUQiKTsKCiAgICAgICAgIyBjbGljayBvbiAnRWRpdCcgYW5kIHN3aXRjaCBzY3JlZW5zCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTUNoYW5nZUhpc3Rvcnk7Q2hhbmdlSUQ9JENoYW5nZUlEJyApXSIpCiAgICAgICAgICAgIC0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICBteSAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgd2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIuQ2FuY2VsQ2xvc2VQb3B1cCIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBjbGljayBvbiBoaXN0b3J5IHNob3cgZGV0YWlscyB0byBjaGVjayBBZ2VudElUU01DaGFuZ2VIaXN0b3J5Wm9vbSBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNQ2hhbmdlSGlzdG9yeVpvb207SGlzdG9yeUVudHJ5SUQ9JyApXSIpCiAgICAgICAgICAgIC0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNoZWNrIEFnZW50SVRTTUNoYW5nZUhpc3Rvcnlab29tIHZhbHVlcwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIkRldGFpbGVkIGhpc3RvcnkgaW5mb3JtYXRpb24gb2YgQ2hhbmdlVXBkYXRlIiApID4gLTEsCiAgICAgICAgICAgICJEZXRhaWxlZCBoaXN0b3J5IGluZm9ybWF0aW9uIG9mIENoYW5nZVVwZGF0ZSBpcyBmb3VuZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRDaGFuZ2VUaXRsZVJhbmRvbSApID4gLTEsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCBjaGFuZ2UKICAgICAgICBteSAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZG1pbklUU01DaGFuZ2VDSVBBbGxvY2F0ZSBzY3JlZW4KICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWRtaW5JVFNNQ2hhbmdlQ0lQQWxsb2NhdGUiKTsKCiAgICAgICAgIyBnZXQgZ2VuZXJhbCBjYXRhbG9nIG9iamVjdAogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICAgICAjIGdldCBDYXRlZ29yeSBhbmQgSW1wYWN0IElEcwogICAgICAgIG15IEBWYWx1ZSA9ICggJzEgdmVyeSBsb3cnLCAnMiBsb3cnLCAnMyBub3JtYWwnLCAnNCBoaWdoJywgJzUgdmVyeSBoaWdoJyApOwogICAgICAgIG15IEBJbXBhY3RJRHM7CiAgICAgICAgbXkgQENhdGVnb3J5SURzOwogICAgICAgIGZvciBteSAkQ2F0ZWdvcnlOYW1lIChAVmFsdWUpIHsKICAgICAgICAgICAgbXkgJENhdGVnb3J5RGF0YVJlZiA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDYXRlZ29yeScsCiAgICAgICAgICAgICAgICBOYW1lICA9PiAkQ2F0ZWdvcnlOYW1lLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBDYXRlZ29yeUlEcywgJENhdGVnb3J5RGF0YVJlZi0+e0l0ZW1JRH07CiAgICAgICAgfQogICAgICAgIGZvciBteSAkSW1wYWN0TmFtZSAoQFZhbHVlKSB7CiAgICAgICAgICAgIG15ICRJbXBhY3REYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkltcGFjdCcsCiAgICAgICAgICAgICAgICBOYW1lICA9PiAkSW1wYWN0TmFtZSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcHVzaCBASW1wYWN0SURzLCAkSW1wYWN0RGF0YVJlZi0+e0l0ZW1JRH07CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGZvciBDYXRlZ29yeSA8LT4gSW1wYWN0IGZpZWxkcwogICAgICAgIGZvciBteSAkSW1wYWN0IChASW1wYWN0SURzKSB7CiAgICAgICAgICAgIGZvciBteSAkQ2F0ZWdvcnkgKEBDYXRlZ29yeUlEcykgewogICAgICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNQcmlvcml0eUlEJEltcGFjdC0kQ2F0ZWdvcnkiLCAnY3NzJyApOwogICAgICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZG1pbklUU01TdGF0ZU1hY2hpbmUgc2NyZWVuCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFkbWluSVRTTVN0YXRlTWFjaGluZSIpOwoKICAgICAgICAjIGNoZWNrIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIGdldCBzdGF0ZSBtYWNoaW5lIG9iamVjdAogICAgICAgIG15ICRTdGF0ZU1hY2hpbmVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVN0YXRlTWFjaGluZScpOwoKICAgICAgICAjIGNoZWNrIGZvciBkZWZhdWx0IGNsYXNzIHN0YXRlIG1hY2hpbmUKICAgICAgICBmb3IgbXkgJFN0YXRlTWFjaGluZSAocXcoQ2hhbmdlIFdvcmtPcmRlcikpIHsKCiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoCiAgICAgICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdDbGFzcz1JVFNNJTNBJTNBQ2hhbmdlTWFuYWdlbWVudCUzQSUzQSRTdGF0ZU1hY2hpbmUlM0ElM0FTdGF0ZScgKV0iCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmNsaWNrKCk7CgogICAgICAgICAgICAjIGNoZWNrIHNjcmVlbgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIiwgICAgICAgICAgICAgJ2NzcycgKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSB0aGVhZCB0ciB0aCIsICdjc3MnICk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAgICAgbXkgJFN0YXRlVHJhbnNpdGlvbnNSZWYgPSAkU3RhdGVNYWNoaW5lT2JqZWN0LT5TdGF0ZVRyYW5zaXRpb25MaXN0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OicgLiAkU3RhdGVNYWNoaW5lIC4gJzo6U3RhdGUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjaGVjayBkZWZhdWx0IHN0YXRlcyBhbmQgdGhlcmUgbGlua3MKICAgICAgICAgICAgZm9yIG15ICRTdGF0ZUlEICggc29ydCBrZXlzICV7JFN0YXRlVHJhbnNpdGlvbnNSZWZ9ICkgewogICAgICAgICAgICAgICAgZm9yIG15ICROZXh0U3RhdGVJRCAoIEB7ICRTdGF0ZVRyYW5zaXRpb25zUmVmLT57JFN0YXRlSUR9IH0gKSB7CgogICAgICAgICAgICAgICAgICAgICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICIvL2FbY29udGFpbnMoXEBocmVmLCBcJ1N0YXRlSUQ9JFN0YXRlSUQ7TmV4dFN0YXRlSUQ9JE5leHRTdGF0ZUlEJyApXSIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJldHVybiBiYWNrIHRvIEFkbWluSVRTTVN0YXRlTWFjaGluZSBvdmVydmlldyBzY3JyZWVuCiAgICAgICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFkbWluSVRTTVN0YXRlTWFjaGluZSIpOwogICAgICAgIH0KICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0ZXN0IHVzZXIgSUQKICAgICAgICBteSAkVGVzdFVzZXJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCB0ZXN0IGNoYW5nZSBmb3IgZWFjaCBzdGF0ZSBpbiBBZ2VudElUU01DaGFuZ2VNYW5hZ2VyIHNjcmVlbgogICAgICAgIGZvciBteSAkQ2hhbmdlU3RhdGUgKCAncmVxdWVzdGVkJywgJ3BlbmRpbmcgYXBwcm92YWwnLCAnYXBwcm92ZWQnLCAnaW4gcHJvZ3Jlc3MnLCAncGVuZGluZyBwaXInICkgewoKICAgICAgICAgICAgIyBnZXQgY2hhbmdlIHN0YXRlIGRhdGEKICAgICAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICAgICAgICAgTmFtZSAgPT4gJENoYW5nZVN0YXRlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgICAgICMgY3JlYXRlIHRlc3QgY2hhbmdlCiAgICAgICAgICAgIG15ICRDaGFuZ2VUaXRsZVJhbmRvbSA9ICdJVFNNQ2hhbmdlICcgLiAkQ2hhbmdlU3RhdGUgLiAnICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgICAgICBteSAkQ2hhbmdlSUQgICAgICAgICAgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgICAgPT4gJENoYW5nZVRpdGxlUmFuZG9tLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICAgID0+ICdTZWxlbml1bSBUZXN0IERlc2NyaXB0aW9uJywKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gICA9PiAnU2VsZW5pdW0gVGVzdCBKdXN0aWZpY2F0aW9uJywKICAgICAgICAgICAgICAgIENoYW5nZU1hbmFnZXJJRCA9PiAkVGVzdFVzZXJJRCwKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgICA9PiAkQ2hhbmdlU3RhdGVEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICJDaGFuZ2UgaW4gJENoYW5nZVN0YXRlIHN0YXRlIGlzIGNyZWF0ZWQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01DaGFuZ2VNYW5hZ2VyIHNjcmVlbgogICAgICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZU1hbmFnZXI7U29ydEJ5PUNoYW5nZU51bWJlcjtPcmRlckJ5PURvd24iCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJlcGxhY2UgJ3NwYWNlJyB3aXRoICclMjAnIGluIHN0cmluZywgc28gd2UgY2FuIHVzZSBpdCBhcyBhIGZpbHRlciBwYXJhbQogICAgICAgICAgICBteSAkRmlsdGVyQ2hhbmdlU3RhdGUgPSAkQ2hhbmdlU3RhdGU7CiAgICAgICAgICAgICRGaWx0ZXJDaGFuZ2VTdGF0ZSA9fiBzLyAvJTIwL2c7CgogICAgICAgICAgICAjIGNsaWNrIG9uIGFwcHJvcHJpYXRlIGZpbHRlcgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdGaWx0ZXI9JEZpbHRlckNoYW5nZVN0YXRlJyApXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICAjIGNoZWNrIHNjcmVlbgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIiwgICAgICAgICAgICAgJ2NzcycgKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSB0aGVhZCB0ciB0aCIsICdjc3MnICk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAgICAgIyBjaGVjayBmb3IgdGVzdCBjcmVhdGVkIGNoYW5nZQogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkQ2hhbmdlVGl0bGVSYW5kb20gKSA+IC0xLAogICAgICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBmb3VuZCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3QgY2hhbmdlCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICdJVFNNQ2hhbmdlKicgKTsKICAgIH0KCik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0ZXN0IHVzZXIgSUQKICAgICAgICBteSAkVGVzdFVzZXJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCB0ZXN0IGNoYW5nZSBmb3IgZWFjaCBzdGF0ZSBpbiBBZ2VudElUU01DaGFuZ2VNeUNBQiBzY3JlZW4KICAgICAgICBmb3IgbXkgJENoYW5nZVN0YXRlICggJ3JlcXVlc3RlZCcsICdwZW5kaW5nIGFwcHJvdmFsJywgJ2FwcHJvdmVkJywgJ2luIHByb2dyZXNzJywgJ3BlbmRpbmcgcGlyJyApIHsKCiAgICAgICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgICAgIG15ICRDaGFuZ2VTdGF0ZURhdGFSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICAgICAgICAgICAgIE5hbWUgID0+ICRDaGFuZ2VTdGF0ZSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNoYW5nZQogICAgICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSAnIC4gJENoYW5nZVN0YXRlIC4gJyAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICdTZWxlbml1bSBUZXN0IERlc2NyaXB0aW9uJywKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ1NlbGVuaXVtIFRlc3QgSnVzdGlmaWNhdGlvbicsCiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VTdGF0ZURhdGFSZWYtPntJdGVtSUR9LAogICAgICAgICAgICAgICAgQ0FCQWdlbnRzICAgICA9PiBbJFRlc3RVc2VySURdLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICJDaGFuZ2UgaW4gJENoYW5nZVN0YXRlIHN0YXRlIGlzIGNyZWF0ZWQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01DaGFuZ2VNeUNBQiBzY3JlZW4KICAgICAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2VNeUNBQjtTb3J0Qnk9Q2hhbmdlTnVtYmVyO09yZGVyQnk9RG93biIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVwbGFjZSAnc3BhY2UnIHdpdGggJyUyMCcgaW4gc3RyaW5nLCBpZiBuZWVkZWQsIHNvIHdlIGNhbiB1c2UgaXQgYXMgYSBmaWx0ZXIgcGFyYW0KICAgICAgICAgICAgbXkgJEZpbHRlckNoYW5nZVN0YXRlID0gJENoYW5nZVN0YXRlOwogICAgICAgICAgICAkRmlsdGVyQ2hhbmdlU3RhdGUgPX4gcy8gLyUyMC9nOwoKICAgICAgICAgICAgIyBjbGljayBvbiBhcHByb3ByaWF0ZSBmaWx0ZXIKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnRmlsdGVyPSRGaWx0ZXJDaGFuZ2VTdGF0ZScgKV0iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgIyBjaGVjayBzY3JlZW4KICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSIsICAgICAgICAgICAgICdjc3MnICk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRib2R5IHRyIHRkIiwgJ2NzcycgKTsKCiAgICAgICAgICAgICMgY2hlY2sgZm9yIHRlc3QgY3JlYXRlZCBjaGFuZ2UKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJENoYW5nZVRpdGxlUmFuZG9tICkgPiAtMSwKICAgICAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZm91bmQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IGNoYW5nZQogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9CgopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0ZXN0IHVzZXIgSUQKICAgICAgICBteSAkVGVzdFVzZXJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCB0ZXN0IGNoYW5nZSBmb3IgZWFjaCBzdGF0ZSBpbiBBZ2VudElUU01DaGFuZ2VNeUNoYW5nZXMgc2NyZWVuCiAgICAgICAgZm9yIG15ICRDaGFuZ2VTdGF0ZSAoICdyZXF1ZXN0ZWQnLCAncGVuZGluZyBhcHByb3ZhbCcsICdhcHByb3ZlZCcsICdpbiBwcm9ncmVzcycsICdwZW5kaW5nIHBpcicgKSB7CgogICAgICAgICAgICAjIGdldCBjaGFuZ2Ugc3RhdGUgZGF0YQogICAgICAgICAgICBteSAkQ2hhbmdlU3RhdGVEYXRhUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgICAgICBOYW1lICA9PiAkQ2hhbmdlU3RhdGUsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICAgICAgICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgJyAuICRDaGFuZ2VTdGF0ZSAuICcgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgICAgIG15ICRDaGFuZ2VJRCAgICAgICAgICA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJENoYW5nZVRpdGxlUmFuZG9tLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnU2VsZW5pdW0gVGVzdCBEZXNjcmlwdGlvbicsCiAgICAgICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICdTZWxlbml1bSBUZXN0IEp1c3RpZmljYXRpb24nLAogICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRCA9PiAkQ2hhbmdlU3RhdGVEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAgICAgIkNoYW5nZSBpbiAkQ2hhbmdlU3RhdGUgc3RhdGUgaXMgY3JlYXRlZCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTUNoYW5nZU15Q2hhbmdlcyBzY3JlZW4KICAgICAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2VNeUNoYW5nZXM7U29ydEJ5PUNoYW5nZU51bWJlcjtPcmRlckJ5PURvd24iCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHJlcGxhY2UgJ3NwYWNlJyB3aXRoICclMjAnIGluIHN0cmluZywgaWYgbmVlZGVkLCBzbyB3ZSBjYW4gdXNlIGl0IGFzIGEgZmlsdGVyIHBhcmFtCiAgICAgICAgICAgIG15ICRGaWx0ZXJDaGFuZ2VTdGF0ZSA9ICRDaGFuZ2VTdGF0ZTsKICAgICAgICAgICAgJEZpbHRlckNoYW5nZVN0YXRlID1+IHMvIC8lMjAvZzsKCiAgICAgICAgICAgICMgY2xpY2sgb24gYXBwcm9wcmlhdGUgZmlsdGVyCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0ZpbHRlcj0kRmlsdGVyQ2hhbmdlU3RhdGUnICldIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgICAgICMgY2hlY2sgc2NyZWVuCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRoZWFkIHRyIHRoIiwgJ2NzcycgKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSB0Ym9keSB0ciB0ZCIsICdjc3MnICk7CgogICAgICAgICAgICAjIGNoZWNrIGZvciB0ZXN0IGNyZWF0ZWQgY2hhbmdlCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRDaGFuZ2VUaXRsZVJhbmRvbSApID4gLTEsCiAgICAgICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGZvdW5kIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZGVsZXRlIGNyZWF0ZWQgdGVzdCBjaGFuZ2UKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gJ0lUU01DaGFuZ2UqJyApOwogICAgfQoKKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0ZXN0IHVzZXIgSUQKICAgICAgICBteSAkVGVzdFVzZXJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCB0ZXN0IGNoYW5nZSBmb3IgZWFjaCBzdGF0ZSBpbiBBZ2VudElUU01DaGFuZ2VNeVdvcmtPcmRlcnMgc2NyZWVuCiAgICAgICAgZm9yIG15ICRXb3JrT3JkZXJTdGF0ZSAoICdjcmVhdGVkJywgJ2FjY2VwdGVkJywgJ3JlYWR5JywgJ2luIHByb2dyZXNzJyApIHsKCiAgICAgICAgICAgICMgZ2V0IG5lZWRlZCBvYmplY3QKICAgICAgICAgICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CiAgICAgICAgICAgIG15ICRDaGFuZ2VPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICAgICAjIGdldCBjaGFuZ2Ugc3RhdGUgZGF0YQogICAgICAgICAgICBteSAkQ2hhbmdlU3RhdGVEYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICAgICAgICAgTmFtZSAgPT4gJ3JlcXVlc3RlZCcsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNoYW5nZQogICAgICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSBSZXF1ZXN0ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgICAgIG15ICRDaGFuZ2VJRCAgICAgICAgICA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJENoYW5nZVRpdGxlUmFuZG9tLAogICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnU2VsZW5pdW0gVGVzdCBEZXNjcmlwdGlvbicsCiAgICAgICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICdTZWxlbml1bSBUZXN0IEp1c3RpZmljYXRpb24nLAogICAgICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRCA9PiAkQ2hhbmdlU3RhdGVEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHdvcmtvcmRlciBzdGF0ZSBkYXRhCiAgICAgICAgICAgIG15ICRXb3JrT3JkZXJTdGF0ZURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpTdGF0ZScsCiAgICAgICAgICAgICAgICBOYW1lICA9PiAkV29ya09yZGVyU3RhdGUsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNyZWF0ZSB0ZXN0IHdvcmtvcmRlciBmb3IgdGVzdCBjaGFuZ2UKICAgICAgICAgICAgbXkgJFdvcmtPcmRlclRpdGxlUmFuZG9tID0gJ1dvcmtPcmRlciAnIC4gJFdvcmtPcmRlclN0YXRlIC4gJyAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAgICAgbXkgJFdvcmtPcmRlcklEICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyQWRkKAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uICAgICAgPT4gJ1NlbGVuaXVtIEluc3RydWN0aW9uJywKICAgICAgICAgICAgICAgIFJlcG9ydCAgICAgICAgICAgPT4gJ1NlbGVuaXVtIFJlcG9ydCcsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZUlEID0+ICRXb3JrT3JkZXJTdGF0ZURhdGFSZWYtPntJdGVtSUR9LAogICAgICAgICAgICAgICAgV29ya09yZGVyQWdlbnRJRCA9PiAkVGVzdFVzZXJJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNQ2hhbmdlTXlXb3JrT3JkZXJzIHNjcmVlbgogICAgICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZU15V29ya09yZGVycztTb3J0Qnk9Q2hhbmdlTnVtYmVyO09yZGVyQnk9RG93biIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgcmVwbGFjZSAnc3BhY2UnIHdpdGggJyUyMCcgaW4gc3RyaW5nLCBpZiBuZWVkZWQsIHNvIHdlIGNhbiB1c2UgaXQgYXMgYSBmaWx0ZXIgcGFyYW0KICAgICAgICAgICAgbXkgJEZpbHRlcldvcmtPcmRlclN0YXRlID0gJFdvcmtPcmRlclN0YXRlOwogICAgICAgICAgICAkRmlsdGVyV29ya09yZGVyU3RhdGUgPX4gcy8gLyUyMC9nOwoKICAgICAgICAgICAgIyBjbGljayBvbiBhcHByb3ByaWF0ZSBmaWx0ZXIKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnRmlsdGVyPSRGaWx0ZXJXb3JrT3JkZXJTdGF0ZScgKV0iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgIyBjaGVjayBzY3JlZW4KICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSIsICAgICAgICAgICAgICdjc3MnICk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRib2R5IHRyIHRkIiwgJ2NzcycgKTsKCiAgICAgICAgICAgICMgY2hlY2sgZm9yIHRlc3QgY3JlYXRlZCBjaGFuZ2UKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFdvcmtPcmRlclRpdGxlUmFuZG9tICkgPiAtMSwKICAgICAgICAgICAgICAgICIkV29ya09yZGVyVGl0bGVSYW5kb20gaXMgZm91bmQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IGNoYW5nZQogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9CgopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgR2V0IFNlbGVuaXVtIG9iamVjdC4KbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgbXkgJEhlbHBlciAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CiAgICAgICAgbXkgJFVzZXJPYmplY3QgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CiAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICMgQ3JlYXRlIGFuZCBsb2dpbiBhcyB0ZXN0IHVzZXIuCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgYnVpbGRlciB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgR2V0IHRlc3QgdXNlciBJRC4KICAgICAgICBteSAkVGVzdFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCBDQUIgdXNlci4KICAgICAgICBteSAkVGVzdFVzZXJDQUIgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgYnVpbGRlciB1c2VyIjsKCiAgICAgICAgIyBHZXQgdGVzdCBDQUIgdXNlciBJRC4KICAgICAgICBteSAkVGVzdFVzZXJDQUJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRlc3RVc2VyQ0FCLAogICAgICAgICk7CgogICAgICAgICMgR2V0IGNoYW5nZSBzdGF0ZSBkYXRhLgogICAgICAgIG15ICRDaGFuZ2VEYXRhUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ3JlcXVlc3RlZCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCBjaGFuZ2UuCiAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgUmVxdWVzdGVkICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDaGFuZ2VJRCAgICAgICAgICA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ1NlbGVuaXVtIFRlc3QgRGVzY3JpcHRpb24nLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICdTZWxlbml1bSBUZXN0IEp1c3RpZmljYXRpb24nLAogICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVGVzdFVzZXJJRCwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCBjdXN0b21lciB1c2VyLgogICAgICAgIG15ICRUZXN0Q3VzdG9tZXIgPSAkSGVscGVyLT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKCk7CgogICAgICAgICMgR2V0IHNjcmlwdCBhbGlhcy4KICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gQWdlbnRJVFNNQ2hhbmdlWm9vbSBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ2hhbmdlWm9vbTtDaGFuZ2VJRD0kQ2hhbmdlSUQiKTsKCiAgICAgICAgIyBDbGljayBvbiAnSW52b2x2ZWQgUGVyc29ucycgYW5kIHN3aXRjaCB3aW5kb3cuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29ucztDaGFuZ2VJRD0kQ2hhbmdlSUQnKV0iKQogICAgICAgICAgICAtPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyBXYWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5LgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjQ2hhbmdlTWFuYWdlciIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBDaGVjayBwYWdlLgogICAgICAgIGZvciBteSAkSUQgKAogICAgICAgICAgICBxdyggQ2hhbmdlTWFuYWdlciBDaGFuZ2VCdWlsZGVyIFRlbXBsYXRlSUQgTmV3Q0FCTWVtYmVyICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiMkSUQiLCAnY3NzJyApOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZGlzcGxheWVkKCk7CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJEJ1dHRvbiAoCiAgICAgICAgICAgIHF3ICggQWRkQ0FCTWVtYmVyQnV0dG9uIFN1Ym1pdEJ1dHRvbiBBZGRDQUJUZW1wbGF0ZUJ1dHRvbiApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAbmFtZT0nJEJ1dHRvbiddIik7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgY2xpZW50IHZhbGlkYXRpb24uCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ2hhbmdlTWFuYWdlciIsICdjc3MnICktPmNsZWFyKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU3VibWl0QnV0dG9uIiwgICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAicmV0dXJuIFwkKCcjQ2hhbmdlTWFuYWdlcicpLmhhc0NsYXNzKCdFcnJvcicpIgogICAgICAgICAgICApLAogICAgICAgICAgICAnMScsCiAgICAgICAgICAgICdWYWxpZGF0aW9uIGNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIGlucHV0IHZhbHVlJywKICAgICAgICApOwoKICAgICAgICAjIElucHV0IGNoYW5nZSBtYW5hZ2VyLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0NoYW5nZU1hbmFnZXIiLCAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0NoYW5nZU1hbmFnZXIiLCAnY3NzJyApLT5zZW5kX2tleXMoJFRlc3RVc2VyTG9naW4pOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCJsaS51aS1tZW51LWl0ZW06dmlzaWJsZSIpLmxlbmd0aCcgKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnbGkudWktbWVudS1pdGVtOmNvbnRhaW5zKCRUZXN0VXNlckxvZ2luKScpLmNsaWNrKCkiKTsKCiAgICAgICAgIyBJbnB1dCBjaGFuZ2UgYWdlbnQgQ0FCLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05ld0NBQk1lbWJlciIsICdjc3MnICktPmNsZWFyKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTmV3Q0FCTWVtYmVyIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRUZXN0VXNlckNBQik7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoImxpLnVpLW1lbnUtaXRlbTp2aXNpYmxlIikubGVuZ3RoJyApOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCdsaS51aS1tZW51LWl0ZW06Y29udGFpbnMoJFRlc3RVc2VyQ0FCKScpLmNsaWNrKCkiKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQWRkQ0FCTWVtYmVyQnV0dG9uIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjQ0FCQWdlbnRzJFRlc3RVc2VyQ0FCSUQnKS5sZW5ndGgiICk7CgogICAgICAgICMgSW5wdXQgY2hhbmdlIGN1c3RvbWVyIENBQi4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOZXdDQUJNZW1iZXIiLCAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05ld0NBQk1lbWJlciIsICdjc3MnICktPnNlbmRfa2V5cygkVGVzdEN1c3RvbWVyKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgibGkudWktbWVudS1pdGVtOnZpc2libGUiKS5sZW5ndGgnICk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJ2xpLnVpLW1lbnUtaXRlbTpjb250YWlucygkVGVzdEN1c3RvbWVyKScpLmNsaWNrKCkiKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQWRkQ0FCTWVtYmVyQnV0dG9uIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjQ0FCQ3VzdG9tZXJzJFRlc3RDdXN0b21lcicpLmxlbmd0aCIKICAgICAgICApOwoKICAgICAgICAjIFNlYXJjaCBpZiBkYXRhIGlzIGluIHRoZSB0YWJsZS4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICJyZXR1cm4gXCQoJ3RhYmxlLkRhdGFUYWJsZSB0ciB0ZDpjb250YWlucygkVGVzdFVzZXJDQUIpJykubGVuZ3RoIgogICAgICAgICAgICApLAogICAgICAgICAgICAiJFRlc3RVc2VyQ0FCIGlzIGZvdW5kIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgInJldHVybiBcJCgndGFibGUuRGF0YVRhYmxlIHRyIHRkOmNvbnRhaW5zKCRUZXN0Q3VzdG9tZXIpJykubGVuZ3RoIgogICAgICAgICAgICApLAogICAgICAgICAgICAiJFRlc3RDdXN0b21lciBpcyBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBUZXN0IGRlbGV0ZSBDQUIgYnV0dG9uLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0NBQkFnZW50cyRUZXN0VXNlckNBQklEIiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmICFcJCgnI0NBQkFnZW50cyRUZXN0VXNlckNBQklEJykubGVuZ3RoIgogICAgICAgICk7CgogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICJyZXR1cm4gXCQoJ3RhYmxlLkRhdGFUYWJsZSB0ciB0ZDpjb250YWlucygkVGVzdFVzZXJDQUIpJykubGVuZ3RoIgogICAgICAgICAgICApLAogICAgICAgICAgICAiJFRlc3RVc2VyQ0FCIGlzIG5vdCBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBTdWJtaXQuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1N1Ym1pdCddW1xAdHlwZT0nc3VibWl0J10iKS0+Y2xpY2soKTsKCiAgICAgICAgIyBCYWNrIHRvIHByZXZpb3VzIHdpbmRvdy4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDEgKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKCiAgICAgICAgc2xlZXAoMSk7CgogICAgICAgICMgQ2xpY2sgb24gJ0hpc3RvcnknLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNQ2hhbmdlSGlzdG9yeTtDaGFuZ2VJRD0kQ2hhbmdlSUQnICldIgogICAgICAgICktPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyBXYWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5LgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIuQ2FuY2VsQ2xvc2VQb3B1cCIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBDaGVjayBoaXN0b3J5IGxvZyB0byB2ZXJpZnkgY2hhbmdlIGludm9sdmVkIHBlcnNvbnMuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiQ0FCIEFnZW50czogTmV3OiAkVGVzdFVzZXJDQUIgJmx0Oy0gT2xkOiAtIiApID4gLTEsCiAgICAgICAgICAgICJDaGFuZ2UgaW4gYWdlbnQgQ0FCIC0gc3VjY2VzcyIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJDQUIgQ3VzdG9tZXJzOiBOZXc6ICRUZXN0Q3VzdG9tZXIgJmx0Oy0gT2xkOiAtIiApID4gLTEsCiAgICAgICAgICAgICJDaGFuZ2UgaW4gY3VzdG9tZXIgQ0FCIC0gc3VjY2VzcyIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJDaGFuZ2UgTWFuYWdlcjogTmV3OiAkVGVzdFVzZXJMb2dpbiIgKSA+IC0xLAogICAgICAgICAgICAiQ2hhbmdlIGluIG1hbmFnZXIgLSBzdWNjZXNzIiwKICAgICAgICApOwoKICAgICAgICAjIENsb3NlIHBvcHVwLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiLkNhbmNlbENsb3NlUG9wdXAiLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMSApOwoKICAgICAgICAjIERlbGV0ZSBjcmVhdGVkIHRlc3QgY2hhbmdlLgogICAgICAgIG15ICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QuCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gJ0lUU01DaGFuZ2UqJyApOwogICAgfQoKKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0ZXN0IHVzZXIgSUQKICAgICAgICBteSAkVGVzdFVzZXJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgY3JlYXRlIGFuZCB0ZXN0IGNoYW5nZSBmb3IgZWFjaCBzdGF0ZSBpbiBBZ2VudElUU01DaGFuZ2VQSVIgc2NyZWVuCiAgICAgICAgZm9yIG15ICRXb3JrT3JkZXJTdGF0ZSAoICdhY2NlcHRlZCcsICdyZWFkeScsICdpbiBwcm9ncmVzcycsICdjbG9zZWQnLCAnY2FuY2VsZWQnICkgewoKICAgICAgICAgICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgICAgIG15ICRDaGFuZ2VTdGF0ZURhdGFSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgUmVxdWVzdGVkICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgICAgICBteSAkQ2hhbmdlSUQgICAgICAgICAgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ1NlbGVuaXVtIFRlc3QgRGVzY3JpcHRpb24nLAogICAgICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAnU2VsZW5pdW0gVGVzdCBKdXN0aWZpY2F0aW9uJywKICAgICAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRUZXN0VXNlcklELAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNyZWF0ZSB0ZXN0IHdvcmtvcmRlciBmb3IgdGVzdCBjaGFuZ2UKICAgICAgICAgICAgbXkgJFdvcmtPcmRlclRpdGxlUmFuZG9tID0gJ1dvcmtPcmRlciAnIC4gJFdvcmtPcmRlclN0YXRlIC4gJyAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAgICAgbXkgJFdvcmtPcmRlcklEICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyQWRkKAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgICAgIEluc3RydWN0aW9uICAgICAgPT4gJ1NlbGVuaXVtIEluc3RydWN0aW9uJywKICAgICAgICAgICAgICAgIFJlcG9ydCAgICAgICAgICAgPT4gJ1NlbGVuaXVtIFJlcG9ydCcsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJTdGF0ZSAgID0+ICRXb3JrT3JkZXJTdGF0ZSwKICAgICAgICAgICAgICAgIFdvcmtPcmRlclR5cGUgICAgPT4gJ3BpcicsCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJBZ2VudElEID0+ICRUZXN0VXNlcklELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAkVGVzdFVzZXJJRCwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAiJFdvcmtPcmRlclRpdGxlUmFuZG9tIGlzIGNyZWF0ZWQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01DaGFuZ2VQSVIgc2NyZWVuCiAgICAgICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZVBJUjtTb3J0Qnk9Q2hhbmdlTnVtYmVyO09yZGVyQnk9RG93biIpOwoKICAgICAgICAgICAgIyByZXBsYWNlICdzcGFjZScgd2l0aCAnJTIwJyBpbiBzdHJpbmcsIGlmIG5lZWRlZCwgc28gd2UgY2FuIHVzZSBpdCBhcyBhIGZpbHRlciBwYXJhbQogICAgICAgICAgICBteSAkRmlsdGVyV29ya09yZGVyU3RhdGUgPSAkV29ya09yZGVyU3RhdGU7CiAgICAgICAgICAgICRGaWx0ZXJXb3JrT3JkZXJTdGF0ZSA9fiBzLyAvJTIwL2c7CgogICAgICAgICAgICAjIGNsaWNrIG9uIGFwcHJvcHJpYXRlIGZpbHRlcgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdGaWx0ZXI9JEZpbHRlcldvcmtPcmRlclN0YXRlJyApXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICAjIGNoZWNrIHNjcmVlbgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIiwgICAgICAgICAgICAgJ2NzcycgKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSB0aGVhZCB0ciB0aCIsICdjc3MnICk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAgICAgIyBjaGVjayBmb3IgdGVzdCBjcmVhdGVkIGNoYW5nZQogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkV29ya09yZGVyVGl0bGVSYW5kb20gKSA+IC0xLAogICAgICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBmb3VuZCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3QgY2hhbmdlCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICdJVFNNQ2hhbmdlKicgKTsKICAgIH0KCik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdhcHByb3ZlZCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNoYW5nZQogICAgICAgIG15ICRDaGFuZ2VUaXRsZVJhbmRvbSA9ICdJVFNNQ2hhbmdlICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDaGFuZ2VJRCAgICAgICAgICA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gIlRlc3QgRGVzY3JpcHRpb24iLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICJUZXN0IEp1c3RpZmljYXRpb24iLAogICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VTdGF0ZURhdGFSZWYtPntJdGVtSUR9LAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNQ2hhbmdlUFNBIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2VQU0E7RmlsdGVyPWFwcHJvdmVkO1ZpZXc9OztTb3J0Qnk9Q2hhbmdlTnVtYmVyO09yZGVyQnk9RG93biIKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUiLCAgICAgICAgICAgICAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGhlYWQgdHIgdGgiLCAnY3NzJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAjIGNoZWNrIGZvciB0ZXN0IGNyZWF0ZWQgY2hhbmdlCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkQ2hhbmdlVGl0bGVSYW5kb20gKSA+IC0xLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICdJVFNNQ2hhbmdlKicgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdhcHByb3ZlZCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNoYW5nZQogICAgICAgIG15ICRDaGFuZ2VUaXRsZVJhbmRvbSA9ICdJVFNNQ2hhbmdlICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDaGFuZ2VJRCAgICAgICAgICA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gIlRlc3QgRGVzY3JpcHRpb24iLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICJUZXN0IEp1c3RpZmljYXRpb24iLAogICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VTdGF0ZURhdGFSZWYtPntJdGVtSUR9LAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNQ2hhbmdlU2NoZWR1bGUgc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZVNjaGVkdWxlO0ZpbHRlcj1hcHByb3ZlZDtWaWV3PTs7U29ydEJ5PUNoYW5nZU51bWJlcjtPcmRlckJ5PURvd24iCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIiwgICAgICAgICAgICAgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRoZWFkIHRyIHRoIiwgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRib2R5IHRyIHRkIiwgJ2NzcycgKTsKCiAgICAgICAgIyBjaGVjayBmb3IgdGVzdCBjcmVhdGVkIGNoYW5nZQogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJENoYW5nZVRpdGxlUmFuZG9tICkgPiAtMSwKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IGNoYW5nZQogICAgICAgIG15ICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkQ2hhbmdlSUQgICAgICAgICAgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJENoYW5nZVRpdGxlUmFuZG9tLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICJUZXN0IERlc2NyaXB0aW9uIiwKICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAiVGVzdCBKdXN0aWZpY2F0aW9uIiwKICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRCA9PiAkQ2hhbmdlU3RhdGVEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTUNoYW5nZVpvb20gc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ2hhbmdlWm9vbTtDaGFuZ2VJRD0kQ2hhbmdlSUQiKTsKCiAgICAgICAgIyBjbGljayBvbiB0ZW1wbGF0ZSBhbmQgc3dpdGNoIHNjcmVlbnMKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNQ2hhbmdlVGVtcGxhdGU7Q2hhbmdlSUQ9JENoYW5nZUlEJyApXSIpCiAgICAgICAgICAgIC0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgbXkgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI1RlbXBsYXRlTmFtZSIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBjaGVjayBwYWdlCiAgICAgICAgZm9yIG15ICRJRCAocXcoVGVtcGxhdGVOYW1lIENvbW1lbnQgU3RhdGVSZXNldCBWYWxpZElEIFN1Ym1pdEFkZFRlbXBsYXRlKSkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjJElEIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgdGVzdCB0ZW1wbGF0ZSBmcm9tIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJFRlbXBsYXRlTmFtZVJhbmRvbSA9ICJDaGFuZ2UgVGVtcGxhdGUgIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjVGVtcGxhdGVOYW1lIiwgICAgICAnY3NzJyApLT5zZW5kX2tleXMoJFRlbXBsYXRlTmFtZVJhbmRvbSk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ29tbWVudCIsICAgICAgICAgICAnY3NzJyApLT5zZW5kX2tleXMoIlNlbGVuaXVtQ29tbWVudCIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdEFkZFRlbXBsYXRlIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAxICk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzBdICk7CgogICAgICAgIHNsZWVwKDEpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIElUU01DaGFuZ2VUZW1wbGF0ZU92ZXJ2aWV3IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3O1NvcnRCeT1UZW1wbGF0ZUlEO09yZGVyQnk9VXA7RmlsdGVyPUlUU01DaGFuZ2UiCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBmb3IgdGVzdCBjcmVhdGVkIGNoYW5nZQogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFRlbXBsYXRlTmFtZVJhbmRvbSApID4gLTEsCiAgICAgICAgICAgICIkVGVtcGxhdGVOYW1lUmFuZG9tIGlzIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBEQiBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBnZXQgdGVzdCBjaGFuZ2UgdGVtcGxhdGUgSUQKICAgICAgICBteSAkVGVtcGxhdGVkUXVvdGVkID0gJERCT2JqZWN0LT5RdW90ZSgkVGVtcGxhdGVOYW1lUmFuZG9tKTsKICAgICAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgPT4gIlNFTEVDVCBpZCBGUk9NIGNoYW5nZV90ZW1wbGF0ZSBXSEVSRSBuYW1lID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFRlbXBsYXRlZFF1b3RlZCBdCiAgICAgICAgKTsKICAgICAgICBteSAkVGVtcGxhdGVJRDsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJFRlbXBsYXRlSUQgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IHRlbXBsYXRlCiAgICAgICAgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6VGVtcGxhdGUnKS0+VGVtcGxhdGVEZWxldGUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIlRlbXBsYXRlIElEICRUZW1wbGF0ZUlEIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gJ0lUU01DaGFuZ2UqJyApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkQ2hhbmdlSUQgICAgICAgICAgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJENoYW5nZVRpdGxlUmFuZG9tLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICJUZXN0IERlc2NyaXB0aW9uIiwKICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAiVGVzdCBKdXN0aWZpY2F0aW9uIiwKICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRCA9PiAkQ2hhbmdlU3RhdGVEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTUNoYW5nZVpvb20gZm9yIHRlc3QgY3JlYXRlZCBjaGFuZ2UKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2Vab29tO0NoYW5nZUlEPSRDaGFuZ2VJRCIpOwoKICAgICAgICAjIHZlcmlmeSBpdHMgcmlnaHQgc2NyZWVuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkQ2hhbmdlVGl0bGVSYW5kb20gKSA+IC0xLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGZvdW5kIG9uIHBhZ2UiLAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgcGFnZQogICAgICAgIGZvciBteSAkQWN0aW9uICgKICAgICAgICAgICAgcXcoIENoYW5nZUhpc3RvcnkgQ2hhbmdlUHJpbnQgQ2hhbmdlRWRpdCBDaGFuZ2VJbnZvbHZlZFBlcnNvbnMgV29ya09yZGVyQWRkIFdvcmtPcmRlckFkZEZyb21UZW1wbGF0ZSBDaGFuZ2VDb25kaXRpb24gQ2hhbmdlVGVtcGxhdGUpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRFbGVtZW50CiAgICAgICAgICAgICAgICA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU00kQWN0aW9uO0NoYW5nZUlEPSRDaGFuZ2VJRCcpXSIpOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZGlzcGxheWVkKCk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICdJVFNNQ2hhbmdlKicgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdzdWNjZXNzZnVsJywKICAgICAgICApOwoKICAgICAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAiVGVzdCBEZXNjcmlwdGlvbiIsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gIlRlc3QgSnVzdGlmaWNhdGlvbiIsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGVtcGxhdGUgb2JqZWN0CiAgICAgICAgbXkgJFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlJyk7CgogICAgICAgICMgY3JlYXRlIHNpbXBsZSBjaGFuZ2UgdGVtcGxhdGUKICAgICAgICBteSAkVGVtcGxhdGVOYW1lUmFuZG9tID0gJ1RlbXBsYXRlICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDaGFuZ2VDb250ZW50ICAgICAgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlU2VyaWFsaXplKAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFRlbXBsYXRlTmFtZVJhbmRvbSwKICAgICAgICAgICAgVGVtcGxhdGVUeXBlID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICAgICAgQ2hhbmdlSUQgICAgID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB0ZW1wbGF0ZSBmcm9tIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJFRlbXBsYXRlSUQgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlQWRkKAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFRlbXBsYXRlTmFtZVJhbmRvbSwKICAgICAgICAgICAgVGVtcGxhdGVUeXBlID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICAgICAgQ2hhbmdlSUQgICAgID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgQ29udGVudCAgICAgID0+ICRDaGFuZ2VDb250ZW50LAogICAgICAgICAgICBWYWxpZElEICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFRlbXBsYXRlSUQsCiAgICAgICAgICAgICJDaGFuZ2UgVGVtcGxhdGUgSUQgJFRlbXBsYXRlSUQgaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgYW5kIGxvZyBpbiB0ZXN0IHVzZXIKICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAnaXRzbS1jaGFuZ2UnLCAnaXRzbS1jaGFuZ2UtbWFuYWdlcicgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01DaGFuZ2VBZGRGcm9tVGVtcGxhdGUgc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVRlbXBsYXRlT3ZlcnZpZXc7U29ydEJ5PVRlbXBsYXRlSUQ7T3JkZXJCeT1Eb3duO0ZpbHRlcj1JVFNNQ2hhbmdlIgogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgZm9yIGNyZWF0ZWQgdGVzdCB0ZW1wbGF0ZQogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFRlbXBsYXRlTmFtZVJhbmRvbSApID4gLTEsCiAgICAgICAgICAgICIkVGVtcGxhdGVOYW1lUmFuZG9tIGlzIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGNsaWNrIHRvIGRlbGV0ZSB0ZXN0IHRlbXBsYXRlCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRGVsZXRlVGVtcGxhdGVJRCRUZW1wbGF0ZUlEIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyB3YWl0IGZvciBjb25maXJtIGJ1dHRvbiB0byBzaG93IHVwIGFuZCBjb25maXJtIGRlbGV0ZSBhY3Rpb24KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI0RpYWxvZ0J1dHRvbjEnKS5sZW5ndGg7IiApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0RpYWxvZ0J1dHRvbjEiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNQ2hhbmdlQWRkRnJvbVRlbXBsYXRlIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3O1NvcnRCeT1UZW1wbGF0ZUlEO09yZGVyQnk9RG93bjtGaWx0ZXI9SVRTTUNoYW5nZSIKICAgICAgICApOwoKICAgICAgICAjIHZlcmlmeSBkZWxldGUgYWN0aW9uIGZvciB0ZXN0IGNyZWF0ZWQgdGVtcGxhdGUKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRUZW1wbGF0ZU5hbWVSYW5kb20gKSA9PSAtMSwKICAgICAgICAgICAgIiRUZW1wbGF0ZU5hbWVSYW5kb20gaXMgbm90IGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICdJVFNNQ2hhbmdlKicgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSBSZXF1ZXN0ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAiVGVzdCBEZXNjcmlwdGlvbiIsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gIlRlc3QgSnVzdGlmaWNhdGlvbiIsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGVtcGxhdGUgb2JqZWN0CiAgICAgICAgbXkgJFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlJyk7CgogICAgICAgICMgY3JlYXRlIHNpbXBsZSBjaGFuZ2UgdGVtcGxhdGUKICAgICAgICBteSAkVGVtcGxhdGVOYW1lUmFuZG9tID0gJ1RlbXBsYXRlICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDaGFuZ2VDb250ZW50ICAgICAgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlU2VyaWFsaXplKAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFRlbXBsYXRlTmFtZVJhbmRvbSwKICAgICAgICAgICAgVGVtcGxhdGVUeXBlID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICAgICAgQ2hhbmdlSUQgICAgID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgQ29tbWVudCAgICAgID0+ICdTZWxlbml1bSBUZXN0IENvbW1lbnQnLAogICAgICAgICAgICBWYWxpZElEICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHRlbXBsYXRlIGZyb20gdGVzdCBjaGFuZ2UKICAgICAgICBteSAkVGVtcGxhdGVJRCA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVBZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkVGVtcGxhdGVOYW1lUmFuZG9tLAogICAgICAgICAgICBUZW1wbGF0ZVR5cGUgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICBDb250ZW50ICAgICAgPT4gJENoYW5nZUNvbnRlbnQsCiAgICAgICAgICAgIENvbW1lbnQgICAgICA9PiAnU2VsZW5pdW0gVGVzdCBDb21tZW50JywKICAgICAgICAgICAgVmFsaWRJRCAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRUZW1wbGF0ZUlELAogICAgICAgICAgICAiQ2hhbmdlIFRlbXBsYXRlIElEICRUZW1wbGF0ZUlEIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNVGVtcGxhdGVPdmVydmlldyBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNVGVtcGxhdGVPdmVydmlldztTb3J0Qnk9VGVtcGxhdGVJRDtPcmRlckJ5PURvd247RmlsdGVyPUlUU01DaGFuZ2UiCiAgICAgICAgKTsKCiAgICAgICAgIyBjbGljayBvbiB0ZXN0IHRlbXBsYXRlIGFuZCBzd2l0Y2ggd2luZG93CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWdlbnRJVFNNVGVtcGxhdGVFZGl0O1RlbXBsYXRlSUQ9JFRlbXBsYXRlSUQnICldIiktPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIiNUZW1wbGF0ZU5hbWUiKS5sZW5ndGgnICk7CgogICAgICAgICMgY2hlY2sgc3RvcmVkIHZhbHVlcwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjVGVtcGxhdGVOYW1lJywgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgICRUZW1wbGF0ZU5hbWVSYW5kb20sCiAgICAgICAgICAgICIjVGVtcGxhdGVOYW1lIHN0b3JlZCB2YWx1ZSIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnI0NvbW1lbnQnLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgJ1NlbGVuaXVtIFRlc3QgQ29tbWVudCcsCiAgICAgICAgICAgICIjQ29tbWVudCBzdG9yZWQgdmFsdWUiLAogICAgICAgICk7CgogICAgICAgICMgZWRpdCB2YWx1ZXMgYW5kIHN1Ym1pdAogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1RlbXBsYXRlTmFtZSIsICdjc3MnICktPnNlbmRfa2V5cygiIEVkaXQiKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDb21tZW50IiwgICAgICAnY3NzJyApLT5zZW5kX2tleXMoIiBFZGl0Iik7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAaWQ9J3N1Ym1pdEVkaXRUZW1wbGF0ZSddW1xAdHlwZT0nc3VibWl0J10iKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAxICk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzBdICk7CgogICAgICAgIHNsZWVwKDEpOwoKICAgICAgICAjIGNsaWNrIG9uIGVkaXRlZCB0ZXN0IHRlbXBsYXRlIGFuZCBzd2l0Y2ggd2luZG93CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWdlbnRJVFNNVGVtcGxhdGVFZGl0O1RlbXBsYXRlSUQ9JFRlbXBsYXRlSUQnICldIiktPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIiNUZW1wbGF0ZU5hbWUiKS5sZW5ndGgnICk7CgogICAgICAgICMgY2hlY2sgZWRpdGVkIHZhbHVlcwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjVGVtcGxhdGVOYW1lJywgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgICRUZW1wbGF0ZU5hbWVSYW5kb20gLiAnIEVkaXQnLAogICAgICAgICAgICAiI1RlbXBsYXRlTmFtZSBlZGl0ZWQgdmFsdWUiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNDb21tZW50JywgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgICdTZWxlbml1bSBUZXN0IENvbW1lbnQgRWRpdCcsCiAgICAgICAgICAgICIjQ29tbWVudCBlZGl0ZWQgdmFsdWUiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgdGVtcGxhdGUKICAgICAgICBteSAkU3VjY2VzcyA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVEZWxldGUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRUZW1wbGF0ZU5hbWVSYW5kb20gZWRpdCBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgY2hhbmdlCiAgICAgICAgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gJ0lUU01DaGFuZ2UqJyApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSBSZXF1ZXN0ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAiVGVzdCBEZXNjcmlwdGlvbiIsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gIlRlc3QgSnVzdGlmaWNhdGlvbiIsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGVtcGxhdGUgb2JqZWN0CiAgICAgICAgbXkgJFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlJyk7CgogICAgICAgICMgY3JlYXRlIHNpbXBsZSBjaGFuZ2UgdGVtcGxhdGUKICAgICAgICBteSAkVGVtcGxhdGVOYW1lUmFuZG9tID0gJ0NBQiBUZW1wbGF0ZSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkQ2hhbmdlQ29udGVudCAgICAgID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZVNlcmlhbGl6ZSgKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRUZW1wbGF0ZU5hbWVSYW5kb20sCiAgICAgICAgICAgIFRlbXBsYXRlVHlwZSA9PiAnQ0FCJywKICAgICAgICAgICAgQ2hhbmdlSUQgICAgID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgQ29tbWVudCAgICAgID0+ICdTZWxlbml1bSBUZXN0IENvbW1lbnQnLAogICAgICAgICAgICBWYWxpZElEICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB0ZW1wbGF0ZSBmcm9tIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJFRlbXBsYXRlSUQgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlQWRkKAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFRlbXBsYXRlTmFtZVJhbmRvbSwKICAgICAgICAgICAgVGVtcGxhdGVUeXBlID0+ICdDQUInLAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICBDb250ZW50ICAgICAgPT4gJENoYW5nZUNvbnRlbnQsCiAgICAgICAgICAgIENvbW1lbnQgICAgICA9PiAnU2VsZW5pdW0gVGVzdCBDb21tZW50JywKICAgICAgICAgICAgVmFsaWRJRCAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRUZW1wbGF0ZUlELAogICAgICAgICAgICAiQ2hhbmdlIFRlbXBsYXRlIElEICRUZW1wbGF0ZUlEIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgQ0FCIHVzZXIKICAgICAgICBteSAkVGVzdFVzZXJDQUIgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdXNlciBvYmplY3QKICAgICAgICBteSAkVXNlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgogICAgICAgICMgZ2V0IHRlc3QgQ0FCIHVzZXIgSUQKICAgICAgICBteSAkVGVzdFVzZXJDQUJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyTG9va3VwKAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRlc3RVc2VyQ0FCLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgQ0FCIGN1c3RvbWVyIHVzZXIKICAgICAgICBteSAkVGVzdEN1c3RvbWVyQ0FCID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGVzdCB1c2VyIElECiAgICAgICAgbXkgJFRlc3RVc2VySUQgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3O1NvcnRCeT1UZW1wbGF0ZUlEO09yZGVyQnk9RG93bjtGaWx0ZXI9Q0FCIgogICAgICAgICk7CgogICAgICAgICMgY2xpY2sgb24gJ0VkaXQgQ29udGVudCcgZm9yIHRlc3QgY3JlYXRlZCBDQUIgdGVtcGxhdGUgYW5kIHN3aXRjaCB3aW5kb3cKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBZ2VudElUU01UZW1wbGF0ZUVkaXRDQUI7VGVtcGxhdGVJRD0kVGVtcGxhdGVJRCcgKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgbXkgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI05ld0NBQk1lbWJlciIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBhZGQgdGVzdCBjcmVhdGVkIENBQiB1c2VyIHRvIHRlc3QgQ0FCIHRlbXBsYXRlCiAgICAgICAgbXkgJEF1dG9Db21wbGV0ZVN0cmluZ0NBQlVzZXIKICAgICAgICAgICAgPSAiXCIkVGVzdFVzZXJDQUIgJFRlc3RVc2VyQ0FCXCIgPCRUZXN0VXNlckNBQlxAbG9jYWx1bml0dGVzdC5jb20+ICgkVGVzdFVzZXJDQUJJRCkiOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCcjTmV3Q0FCTWVtYmVyJykuYXV0b2NvbXBsZXRlKCdzZWFyY2gnLCAnJFRlc3RVc2VyQ0FCJykgIik7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gJCgibGkudWktbWVudS1pdGVtOnZpc2libGUiKS5sZW5ndGgnICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vKlt0ZXh0KCk9JyRBdXRvQ29tcGxldGVTdHJpbmdDQUJVc2VyJ10iKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI0FkZENBQk1lbWJlcicpLmNsaWNrKCk7Iik7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNDQUJBZ2VudHMkVGVzdFVzZXJDQUJJRCcpLmxlbmd0aCIgKTsKCiAgICAgICAgIyBhZGQgdGVzdCBjcmVhdGVkIENBQiBjdXN0b21lciB0byB0ZXN0IENBQiB0ZW1wbGF0ZQogICAgICAgIG15ICRBdXRvQ29tcGxldGVTdHJpbmdDQUJDdXN0b21lcgogICAgICAgICAgICA9ICJcIiRUZXN0Q3VzdG9tZXJDQUIgJFRlc3RDdXN0b21lckNBQlwiIDwkVGVzdEN1c3RvbWVyQ0FCXEBsb2NhbHVuaXR0ZXN0LmNvbT4gKCRUZXN0Q3VzdG9tZXJDQUIpIjsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI05ld0NBQk1lbWJlcicpLmF1dG9jb21wbGV0ZSgnc2VhcmNoJywgJyRUZXN0Q3VzdG9tZXJDQUInKSAiKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiAkKCJsaS51aS1tZW51LWl0ZW06dmlzaWJsZSIpLmxlbmd0aCcgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy8qW3RleHQoKT0nJEF1dG9Db21wbGV0ZVN0cmluZ0NBQkN1c3RvbWVyJ10iKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI0FkZENBQk1lbWJlcicpLmNsaWNrKCk7Iik7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNDQUJDdXN0b21lcnMkVGVzdEN1c3RvbWVyQ0FCJykubGVuZ3RoIgogICAgICAgICk7CgogICAgICAgICMgc2F2ZSBlZGl0ZWQgQ0FCIHRlbXBsYXRlIGFuZCBzd2l0Y2ggd2luZG93CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdHlwZT0nc3VibWl0J11bXEBuYW1lPSdTdWJtaXQnXSIpLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDEgKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKCiAgICAgICAgc2xlZXAoMSk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gY3JlYXRlZCB0ZXN0IGNoYW5nZQogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9JENoYW5nZUlEIik7CgogICAgICAgICMgY2xpY2sgb24gJ0ludm9sZWQgUGVyc29ucycgYW5kIHN3aXRjaCB3aW5kb3cKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnM7Q2hhbmdlSUQ9JENoYW5nZUlEJyApXSIpCiAgICAgICAgICAgIC0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI0NoYW5nZU1hbmFnZXIiKS5sZW5ndGgnICk7CgogICAgICAgICMgaW5wdXQgY2hhbmdlIG1hbmFnZXIKICAgICAgICBteSAkQXV0b0NvbXBsZXRlU3RyaW5nTWFuYWdlcgogICAgICAgICAgICA9ICJcIiRUZXN0VXNlckxvZ2luICRUZXN0VXNlckxvZ2luXCIgPCRUZXN0VXNlckxvZ2luXEBsb2NhbHVuaXR0ZXN0LmNvbT4gKCRUZXN0VXNlcklEKSI7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNDaGFuZ2VNYW5hZ2VyJykuYXV0b2NvbXBsZXRlKCdzZWFyY2gnLCAnJFRlc3RVc2VyTG9naW4nKSAiKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiAkKCJsaS51aS1tZW51LWl0ZW06dmlzaWJsZSIpLmxlbmd0aCcgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy8qW3RleHQoKT0nJEF1dG9Db21wbGV0ZVN0cmluZ01hbmFnZXInXSIpLT5jbGljaygpOwoKICAgICAgICAjIHRlc3QgZWRpdGVkIENBQiB0ZW1wbGF0ZQogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI1RlbXBsYXRlSUQnKS52YWwoJyRUZW1wbGF0ZUlEJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB0eXBlPSdzdWJtaXQnXVtcQG5hbWU9J0FkZENBQlRlbXBsYXRlQnV0dG9uJ10iKS0+Y2xpY2soKTsKCiAgICAgICAgIyB2ZXJpZnkgdGhhdCBib3RoIHVzZXIgYW5kIGN1c3RvbWVyIGFyZSBsb2FkZWQgZnJvbSBlZGl0ZWQgdGVzdCBDQUIgdGVtcGxhdGUKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICIkVGVzdFVzZXJDQUIiICkgPiAtMSwKICAgICAgICAgICAgIkNBQiB1c2VyIGxvYWRlZCBmcm9tIGVkaXRlZCB0ZW1wbGF0ZSAtIHN1Y2Nlc3MiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiJFRlc3RDdXN0b21lckNBQiIgKSA+IC0xLAogICAgICAgICAgICAiQ0FCIGN1c3RvbWVyIHVzZXIgbG9hZGVkIGZyb20gZWRpdGVkIHRlbXBsYXRlIC0gc3VjY2VzcyIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCB0ZW1wbGF0ZQogICAgICAgIG15ICRTdWNjZXNzID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZURlbGV0ZSgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJFRlbXBsYXRlTmFtZVJhbmRvbSBlZGl0IGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCBjaGFuZ2UKICAgICAgICAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSBSZXF1ZXN0ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAiVGVzdCBEZXNjcmlwdGlvbiIsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gIlRlc3QgSnVzdGlmaWNhdGlvbiIsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGVtcGxhdGUgb2JqZWN0CiAgICAgICAgbXkgJFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlJyk7CgogICAgICAgICMgY3JlYXRlIHNpbXBsZSBjaGFuZ2UgdGVtcGxhdGUKICAgICAgICBteSAkVGVtcGxhdGVOYW1lUmFuZG9tID0gJ1RlbXBsYXRlICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDaGFuZ2VDb250ZW50ICAgICAgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlU2VyaWFsaXplKAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJFRlbXBsYXRlTmFtZVJhbmRvbSwKICAgICAgICAgICAgVGVtcGxhdGVUeXBlID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICAgICAgQ2hhbmdlSUQgICAgID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgQ29tbWVudCAgICAgID0+ICdTZWxlbml1bSBUZXN0IENvbW1lbnQnLAogICAgICAgICAgICBWYWxpZElEICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHRlbXBsYXRlIGZyb20gdGVzdCBjaGFuZ2UKICAgICAgICBteSAkVGVtcGxhdGVDb21tZW50ID0gJ1NlbGVuaXVtIFRlc3QgQ29tbWVudCc7CiAgICAgICAgbXkgJFRlbXBsYXRlSUQgICAgICA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVBZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkVGVtcGxhdGVOYW1lUmFuZG9tLAogICAgICAgICAgICBUZW1wbGF0ZVR5cGUgPT4gJ0lUU01DaGFuZ2UnLAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICBDb250ZW50ICAgICAgPT4gJENoYW5nZUNvbnRlbnQsCiAgICAgICAgICAgIENvbW1lbnQgICAgICA9PiAkVGVtcGxhdGVDb21tZW50LAogICAgICAgICAgICBWYWxpZElEICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFRlbXBsYXRlSUQsCiAgICAgICAgICAgICJDaGFuZ2UgVGVtcGxhdGUgSUQgJFRlbXBsYXRlSUQgaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgYW5kIGxvZyBpbiB0ZXN0IHVzZXIKICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAnaXRzbS1jaGFuZ2UnLCAnaXRzbS1jaGFuZ2UtbWFuYWdlcicgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3IHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3O1NvcnRCeT1UZW1wbGF0ZUlEO09yZGVyQnk9RG93bjtGaWx0ZXI9SVRTTUNoYW5nZSIKICAgICAgICApOwoKICAgICAgICAjIGNsaWNrIG9uICdFZGl0IENvbnRlbnQnIGZvciB0ZXN0IGNyZWF0ZWQgY2hhbmdlIHRlbXBsYXRlCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRWRpdENvbnRlbnRUZW1wbGF0ZUlEJFRlbXBsYXRlSUQiLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAjIHdhaXQgZm9yIGRpYWxvZyB3aW5kb3cgdG8gbG9hZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJyNEaWFsb2dCdXR0b24xJykubGVuZ3RoOyIgKTsKCiAgICAgICAgIyB2ZXJpZnkgZWRpdCBjb250ZW50IHZhbHVlcwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIiRUZW1wbGF0ZU5hbWVSYW5kb20iICkgPiAtMSwKICAgICAgICAgICAgIiRUZW1wbGF0ZU5hbWVSYW5kb20gaXMgZm91bmQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiJFRlbXBsYXRlQ29tbWVudCIgKSA+IC0xLAogICAgICAgICAgICAiJFRlbXBsYXRlQ29tbWVudCBpcyBmb3VuZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLAogICAgICAgICAgICAgICAgIlRoaXMgd2lsbCBjcmVhdGUgYSBuZXcgY2hhbmdlIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0LiIKICAgICAgICAgICAgKSA+IC0xLAogICAgICAgICAgICAiJ1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgY2hhbmdlIGZyb20gdGhpcyB0ZW1wbGF0ZSwgc28geW91IGNhbiBlZGl0IGFuZCBzYXZlIGl0LicgaXMgZm91bmQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KAogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwKICAgICAgICAgICAgICAgICJUaGUgbmV3IGNoYW5nZSB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciBpdCBoYXMgYmVlbiBzYXZlZCBhcyB0ZW1wbGF0ZS4iCiAgICAgICAgICAgICkgPiAtMSwKICAgICAgICAgICAgIidUaGUgbmV3IGNoYW5nZSB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciBpdCBoYXMgYmVlbiBzYXZlZCBhcyB0ZW1wbGF0ZS4nIGlzIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBuZXcgY2hhbmdlIGZyb20gdGVzdCB0ZW1wbGF0ZQogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0RpYWxvZ0J1dHRvbjEiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgZ2V0IG5ldyBjaGFuZ2UgSUQgY3JlYXRlZCBmcm9tIHRlc3QgdGVtcGxhdGUKICAgICAgICBteSAkQ2hhbmdlRnJvbVRlbXBsYXRlSUQgPSAkQ2hhbmdlSUQrKzsKCiAgICAgICAgIyBnZXQgbmV3IGNoYW5nZSBkYXRhIGNyZWF0ZWQgZnJvbSB0ZXN0IHRlbXBsYXRlCiAgICAgICAgbXkgJENoYW5nZUZyb21UZW1wbGF0ZSA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUdldCgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUZyb21UZW1wbGF0ZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgdmVyaWZ5IG5ldyBjaGFuZ2UgdmFsdWVzCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkQ2hhbmdlRnJvbVRlbXBsYXRlLT57Q2hhbmdlVGl0bGV9ICkgPiAtMSwKICAgICAgICAgICAgIiRDaGFuZ2VGcm9tVGVtcGxhdGUtPntDaGFuZ2VUaXRsZX0gaXMgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgdGVtcGxhdGUKICAgICAgICBteSAkU3VjY2VzcyA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVEZWxldGUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRUZW1wbGF0ZU5hbWVSYW5kb20gZWRpdCBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgY2hhbmdlcwogICAgICAgIGZvciBteSAkQ2hhbmdlRGVsZXRlICggJENoYW5nZUlELCAkQ2hhbmdlRnJvbVRlbXBsYXRlSUQgKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZURlbGV0ZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICdJVFNNQ2hhbmdlKicgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZG8gbm90IGNoZWNrIFJpY2hUZXh0CiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0Zyb250ZW5kOjpSaWNoVGV4dCcsCiAgICAgICAgICAgIFZhbHVlID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIHN0YXRlIGRhdGEKICAgICAgICBteSAkQ2hhbmdlU3RhdGVEYXRhUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ3JlcXVlc3RlZCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNoYW5nZQogICAgICAgIG15ICRDaGFuZ2VUaXRsZVJhbmRvbSA9ICdJVFNNQ2hhbmdlIFJlcXVlc3RlZCAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkQ2hhbmdlSUQgICAgICAgICAgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJENoYW5nZVRpdGxlUmFuZG9tLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICJUZXN0IERlc2NyaXB0aW9uIiwKICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAiVGVzdCBKdXN0aWZpY2F0aW9uIiwKICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRCA9PiAkQ2hhbmdlU3RhdGVEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTUNoYW5nZVpvb20gZm9yIHRlc3QgY3JlYXRlZCBjaGFuZ2UKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2Vab29tO0NoYW5nZUlEPSRDaGFuZ2VJRCIpOwoKICAgICAgICAjIGNsaWNrICdBZGQgV29ya09yZGVyJyBhbmQgc3dpdGNoIHdpbmRvdwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJBZGQ7Q2hhbmdlSUQ9JENoYW5nZUlEJyldIiktPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIiNXb3JrT3JkZXJUaXRsZSIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBjaGVjayBwYWdlCiAgICAgICAgZm9yIG15ICRJRCAoCiAgICAgICAgICAgIHF3KFdvcmtPcmRlclRpdGxlIFJpY2hUZXh0IFdvcmtPcmRlclR5cGVJRCBQbGFubmVkU3RhcnRUaW1lTW9udGggUGxhbm5lZFN0YXJ0VGltZURheSBQbGFubmVkU3RhcnRUaW1lWWVhciBQbGFubmVkU3RhcnRUaW1lSG91ciBQbGFubmVkU3RhcnRUaW1lTWludXRlCiAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lTW9udGggUGxhbm5lZEVuZFRpbWVEYXkgUGxhbm5lZEVuZFRpbWVZZWFyIFBsYW5uZWRFbmRUaW1lSG91ciBQbGFubmVkRW5kVGltZU1pbnV0ZSBQbGFubmVkRWZmb3J0IEZpbGVVcGxvYWQgU3VibWl0V29ya09yZGVyQWRkKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkRWxlbWVudCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiIyRJRCIsICdjc3MnICk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIHRlc3Qgd29yayBvcmRlcgogICAgICAgIG15ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSA9ICdXb3JrIE9yZGVyICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1dvcmtPcmRlclRpdGxlIiwgICAgICdjc3MnICktPnNlbmRfa2V5cygkV29ya09yZGVyVGl0bGVSYW5kb20pOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1JpY2hUZXh0IiwgICAgICAgICAgICdjc3MnICktPnNlbmRfa2V5cygnU2VsZW5pdW0gV29ya09yZGVyIEluc3RydWN0aW9ucycpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdFdvcmtPcmRlckFkZCIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMSApOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlswXSApOwoKICAgICAgICBzbGVlcCgxKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoImJvZHkiKS5sZW5ndGgnICk7CgogICAgICAgICMgY2hlY2sgY3JlYXRlZCB0ZXN0IHdvcmsgb3JkZXIgdmFsdWVzCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkV29ya09yZGVyVGl0bGVSYW5kb20gKSA+IC0xLAogICAgICAgICAgICAiJFdvcmtPcmRlclRpdGxlUmFuZG9tIGlzIGZvdW5kIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJENoYW5nZVRpdGxlUmFuZG9tICkgPiAtMSwKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgREIgb2JqZWN0CiAgICAgICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgICAgICMgZ2V0IHRlc3Qgd29yayBvcmRlciBJRAogICAgICAgIG15ICRXb3JrT3JkZXJRdW90ZWQgPSAkREJPYmplY3QtPlF1b3RlKCRXb3JrT3JkZXJUaXRsZVJhbmRvbSk7CiAgICAgICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgID0+ICJTRUxFQ1QgaWQgRlJPTSBjaGFuZ2Vfd29ya29yZGVyIFdIRVJFIHRpdGxlID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFdvcmtPcmRlclF1b3RlZCBdCiAgICAgICAgKTsKICAgICAgICBteSAkV29ya09yZGVySUQ7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRXb3JrT3JkZXJJRCA9ICRSb3dbMF07CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgd29yayBvcmRlcgogICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyRGVsZXRlKAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkV29ya09yZGVyVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIGNoYW5nZQogICAgICAgICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICdJVFNNQ2hhbmdlKicgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSBSZXF1ZXN0ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAiVGVzdCBEZXNjcmlwdGlvbiIsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gIlRlc3QgSnVzdGlmaWNhdGlvbiIsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgd29yayBvcmRlciBvYmplY3QKICAgICAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB3b3JrIG9yZGVyCiAgICAgICAgbXkgJFdvcmtPcmRlclRpdGxlUmFuZG9tID0gJ1NlbGVuaXVtIFdvcmsgT3JkZXIgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFdvcmtPcmRlcklEICAgICAgICAgID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQWRkKAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJ1NlbGVuaXVtIFRlc3QgV29yayBPcmRlcicsCiAgICAgICAgICAgIFBsYW5uZWRFZmZvcnQgID0+IDEwLAogICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGVzdCB1c2VyIElECiAgICAgICAgbXkgJFRlc3RVc2VySUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTG9va3VwKAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVdvcmtPcmRlclpvb20gZm9yIHRlc3QgY3JlYXRlZCB3b3JrIG9yZGVyCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNV29ya09yZGVyWm9vbTtXb3JrT3JkZXJJRD0kV29ya09yZGVySUQiKTsKCiAgICAgICAgIyBjbGljayBvbiAnV29ya29yZGVyIEFnZW50JyBhbmQgc3dpdGNoIHdpbmRvdwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJBZ2VudDtXb3JrT3JkZXJJRD0kV29ya09yZGVySUQnKV0iKQogICAgICAgICAgICAtPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIiNVc2VyIikubGVuZ3RoJyApOwoKICAgICAgICAjIGlucHV0IHdvcmsgb3JkZXIgYWdlbnQKICAgICAgICBteSAkQXV0b0NvbXBsZXRlU3RyaW5nVXNlcgogICAgICAgICAgICA9ICJcIiRUZXN0VXNlckxvZ2luICRUZXN0VXNlckxvZ2luXCIgPCRUZXN0VXNlckxvZ2luXEBsb2NhbHVuaXR0ZXN0LmNvbT4gKCRUZXN0VXNlcklEKSI7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNVc2VyJykuYXV0b2NvbXBsZXRlKCdzZWFyY2gnLCAnJFRlc3RVc2VyTG9naW4nKSAiKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiAkKCJsaS51aS1tZW51LWl0ZW06dmlzaWJsZSIpLmxlbmd0aCcgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy8qW3RleHQoKT0nJEF1dG9Db21wbGV0ZVN0cmluZ1VzZXInXSIpLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTdWJtaXQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMSApOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlswXSApOwoKICAgICAgICBzbGVlcCgxKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoImJvZHkiKS5sZW5ndGgnICk7CgogICAgICAgICMgY2xpY2sgb24gJ0hpc3RvcnknIGFuZCBzd2l0Y2ggd2luZG93CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlckhpc3Rvcnk7V29ya09yZGVySUQ9JFdvcmtPcmRlcklEJyldIikKICAgICAgICAgICAgLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgd2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIuQ2FuY2VsQ2xvc2VQb3B1cCIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyB2ZXJpZnkgd29yayBvcmRlciBhZ2VudCBjaGFuZ2UKICAgICAgICBteSAkSGlzdG9yeUFnZW50TWVzc2FnZQogICAgICAgICAgICA9ICJXb3JrT3JkZXJIaXN0b3J5OjpXb3JrT3JkZXJVcGRhdGVcIiwgXCJXb3Jrb3JkZXIgQWdlbnRcIiwgXCIkVGVzdFVzZXJMb2dpbiAoSUQ9JFRlc3RVc2VySUQpXCIiOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFdvcmtPcmRlclRpdGxlUmFuZG9tICkgPiAtMSwKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIHdvcmsgb3JkZXIKICAgICAgICBteSAkU3VjY2VzcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckRlbGV0ZSgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJFdvcmtPcmRlclRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCBjaGFuZ2UKICAgICAgICAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSBSZXF1ZXN0ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAiVGVzdCBEZXNjcmlwdGlvbiIsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gIlRlc3QgSnVzdGlmaWNhdGlvbiIsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgd29yayBvcmRlciBvYmplY3QKICAgICAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB3b3JrIG9yZGVyCiAgICAgICAgbXkgJFdvcmtPcmRlclRpdGxlUmFuZG9tID0gJ1NlbGVuaXVtIFdvcmsgT3JkZXIgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFdvcmtPcmRlcklEICAgICAgICAgID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQWRkKAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJ1NlbGVuaXVtIFRlc3QgV29yayBPcmRlcicsCiAgICAgICAgICAgIFBsYW5uZWRFZmZvcnQgID0+IDEwLAogICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVdvcmtPcmRlclpvb20gZm9yIHRlc3QgY3JlYXRlZCB3b3JrIG9yZGVyCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNV29ya09yZGVyWm9vbTtXb3JrT3JkZXJJRD0kV29ya09yZGVySUQiKTsKCiAgICAgICAgIyBjbGljayBvbiAnRGVsZXRlJwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJEZWxldGU7V29ya09yZGVySUQ9JFdvcmtPcmRlcklEJyldIikKICAgICAgICAgICAgLT5jbGljaygpOwoKICAgICAgICAjIHdhaXQgZm9yIGNvbmZpcm0gYnV0dG9uIHRvIHNob3cgdXAgYW5kIGNvbmZpcm0gZGVsZXRlIGFjdGlvbgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcjRGlhbG9nQnV0dG9uMScpLmxlbmd0aDsiICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRGlhbG9nQnV0dG9uMSIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjbGljayBvbiAnSGlzdG9yeScgYW5kIHN3aXRjaCB3aW5kb3cKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNQ2hhbmdlSGlzdG9yeTtDaGFuZ2VJRD0kQ2hhbmdlSUQnKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgbXkgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiLkNhbmNlbENsb3NlUG9wdXAiKS5sZW5ndGgnICk7CgogICAgICAgICMgdmVyaWZ5IHdvcmsgb3JkZXIgZGVsZXRpb24KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICJXb3Jrb3JkZXIgKElEPSRXb3JrT3JkZXJJRCkgZGVsZXRlZCIgKSA+IC0xLAogICAgICAgICAgICAiV29yayBPcmRlciAkV29ya09yZGVySUQgaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIGNoYW5nZQogICAgICAgIG15ICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICdJVFNNQ2hhbmdlKicgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZG8gbm90IGNoZWNrIFJpY2hUZXh0CiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0Zyb250ZW5kOjpSaWNoVGV4dCcsCiAgICAgICAgICAgIFZhbHVlID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIHN0YXRlIGRhdGEKICAgICAgICBteSAkQ2hhbmdlU3RhdGVEYXRhUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ3JlcXVlc3RlZCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNoYW5nZQogICAgICAgIG15ICRDaGFuZ2VUaXRsZVJhbmRvbSA9ICdJVFNNQ2hhbmdlIFJlcXVlc3RlZCAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkQ2hhbmdlSUQgICAgICAgICAgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJENoYW5nZVRpdGxlUmFuZG9tLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICJUZXN0IERlc2NyaXB0aW9uIiwKICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAiVGVzdCBKdXN0aWZpY2F0aW9uIiwKICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRCA9PiAkQ2hhbmdlU3RhdGVEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB3b3JrIG9yZGVyIG9iamVjdAogICAgICAgIG15ICRXb3JrT3JkZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHdvcmsgb3JkZXIKICAgICAgICBteSAkV29ya09yZGVyVGl0bGVSYW5kb20gPSAnU2VsZW5pdW0gV29yayBPcmRlciAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkV29ya09yZGVySW5zdHJ1Y3Rpb24gPSAnU2VsZW5pdW0gVGVzdCBXb3JrIE9yZGVyJzsKICAgICAgICBteSAkV29ya09yZGVySUQgICAgICAgICAgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBZGQoCiAgICAgICAgICAgIENoYW5nZUlEICAgICAgID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJFdvcmtPcmRlclRpdGxlUmFuZG9tLAogICAgICAgICAgICBJbnN0cnVjdGlvbiAgICA9PiAkV29ya09yZGVySW5zdHJ1Y3Rpb24sCiAgICAgICAgICAgIFBsYW5uZWRFZmZvcnQgID0+IDEwLAogICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVdvcmtPcmRlclpvb20gZm9yIHRlc3QgY3JlYXRlZCB3b3JrIG9yZGVyCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNV29ya09yZGVyWm9vbTtXb3JrT3JkZXJJRD0kV29ya09yZGVySUQiKTsKCiAgICAgICAgIyBjbGljayBvbiAnRWRpdCcgYW5kIHN3aXRjaCB3aW5kb3cKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNV29ya09yZGVyRWRpdDtXb3JrT3JkZXJJRD0kV29ya09yZGVySUQnKV0iKQogICAgICAgICAgICAtPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIiNXb3JrT3JkZXJUaXRsZSIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBjaGVjayBzdG9yZWQgdmFsdWVzCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNXb3JrT3JkZXJUaXRsZScsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAkV29ya09yZGVyVGl0bGVSYW5kb20sCiAgICAgICAgICAgICIjV29ya09yZGVyVGl0bGUgc3RvcmVkIHZhbHVlIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjUmljaFRleHQnLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgJFdvcmtPcmRlckluc3RydWN0aW9uLAogICAgICAgICAgICAiI0luc3RydWN0aW9uIHN0b3JlZCB2YWx1ZSIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnI1BsYW5uZWRFZmZvcnQnLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgJzEwLjAwJywKICAgICAgICAgICAgIiNQbGFubmVkRWZmb3J0IHN0b3JlZCB2YWx1ZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyBlZGl0IHdvcmsgb3JkZXIgYW5kIHN1Ym1pdAogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1dvcmtPcmRlclRpdGxlIiwgICAgICAnY3NzJyApLT5zZW5kX2tleXMoIiBFZGl0Iik7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjUmljaFRleHQiLCAgICAgICAgICAgICdjc3MnICktPnNlbmRfa2V5cygiIEVkaXQiKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNQbGFubmVkRWZmb3J0IiwgICAgICAgJ2NzcycgKS0+Y2xlYXIoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNQbGFubmVkRWZmb3J0IiwgICAgICAgJ2NzcycgKS0+c2VuZF9rZXlzKCIxMS4wMCIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdFdvcmtPcmRlckVkaXQiLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAjIHN3aXRjaCBiYWNrIHdpbmRvdwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMSApOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlswXSApOwoKICAgICAgICBzbGVlcCgxKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoImJvZHkiKS5sZW5ndGgnICk7CgogICAgICAgICMgY2xpY2sgb24gJ0VkaXQnIGFuZCBzd2l0Y2ggd2luZG93CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlckVkaXQ7V29ya09yZGVySUQ9JFdvcmtPcmRlcklEJyldIikKICAgICAgICAgICAgLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgd2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjV29ya09yZGVyVGl0bGUiKS5sZW5ndGgnICk7CgogICAgICAgIHNsZWVwIDE7CgogICAgICAgICMgY2hlY2sgZWRpdGVkIHZhbHVlcwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjV29ya09yZGVyVGl0bGUnLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgJFdvcmtPcmRlclRpdGxlUmFuZG9tIC4gJyBFZGl0JywKICAgICAgICAgICAgIiNXb3JrT3JkZXJUaXRsZSBlZGl0ZWQgdmFsdWUiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNSaWNoVGV4dCcsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAkV29ya09yZGVySW5zdHJ1Y3Rpb24gLiAnIEVkaXQnLAogICAgICAgICAgICAiI0luc3RydWN0aW9uIGVkaXRlZCB2YWx1ZSIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnI1BsYW5uZWRFZmZvcnQnLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgJzExLjAwJywKICAgICAgICAgICAgIiNQbGFubmVkRWZmb3J0IGVkaXRlZCB2YWx1ZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIHdvcmsgb3JkZXIKICAgICAgICBteSAkU3VjY2VzcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckRlbGV0ZSgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJFdvcmtPcmRlclRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCBjaGFuZ2UKICAgICAgICAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSBSZXF1ZXN0ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAiVGVzdCBEZXNjcmlwdGlvbiIsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gIlRlc3QgSnVzdGlmaWNhdGlvbiIsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgd29yayBvcmRlciBvYmplY3QKICAgICAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB3b3JrIG9yZGVyCiAgICAgICAgbXkgJFdvcmtPcmRlclRpdGxlUmFuZG9tID0gJ1NlbGVuaXVtIFdvcmsgT3JkZXIgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFdvcmtPcmRlckluc3RydWN0aW9uID0gJ1NlbGVuaXVtIFRlc3QgV29yayBPcmRlcic7CiAgICAgICAgbXkgJFdvcmtPcmRlcklEICAgICAgICAgID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQWRkKAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJFdvcmtPcmRlckluc3RydWN0aW9uLAogICAgICAgICAgICBQbGFubmVkRWZmb3J0ICA9PiAxMCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkV29ya09yZGVyVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgYW5kIGxvZyBpbiB0ZXN0IHVzZXIKICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAnaXRzbS1jaGFuZ2UnLCAnaXRzbS1jaGFuZ2UtbWFuYWdlcicgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01Xb3JrT3JkZXJab29tIGZvciB0ZXN0IGNyZWF0ZWQgd29yayBvcmRlcgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlclpvb207V29ya09yZGVySUQ9JFdvcmtPcmRlcklEIik7CgogICAgICAgICMgY2xpY2sgb24gJ0hpc3RvcnknIGFuZCBzd2l0Y2ggd2luZG93CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlckhpc3Rvcnk7V29ya09yZGVySUQ9JFdvcmtPcmRlcklEJyldIikKICAgICAgICAgICAgLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICBteSAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgd2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIuQ2FuY2VsQ2xvc2VQb3B1cCIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBjaGVjayBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIiwgICAgICAgICAgICAgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRoZWFkIHRyIHRoIiwgJ2NzcycgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIHRib2R5IHRyIHRkIiwgJ2NzcycgKTsKCiAgICAgICAgIyBjaGVjayBmb3IgaGlzdG9yeSB2YWx1ZXMgdXBvbiB0ZXN0IGNoYW5nZSBjcmVhdGlvbgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIk5ldyBXb3Jrb3JkZXIgKElEPSRXb3JrT3JkZXJJRCkiICkgPiAtMSwKICAgICAgICAgICAgIk5ldyBXb3Jrb3JkZXIgKElEPSRXb3JrT3JkZXJJRCkgaXMgZm91bmQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiSW5zdHJ1Y3Rpb246IE5ldzogJFdvcmtPcmRlckluc3RydWN0aW9uICZsdDstIE9sZDogLSIgKSA+IC0xLAogICAgICAgICAgICAiSW5zdHJ1Y3Rpb246IE5ldzogJFdvcmtPcmRlckluc3RydWN0aW9uICZsdDstIE9sZDogaXMgZm91bmQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiUGxhbm5lZCBFZmZvcnQ6IE5ldzogMTAgJmx0Oy0gT2xkOiAwLjAwIiApID4gLTEsCiAgICAgICAgICAgICJQbGFubmVkIEVmZm9ydDogTmV3OiAxMCAmbHQ7LSBPbGQ6IDAuMDAgaXMgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgY3V0IG9mZiB0aGUgd29ya29yZGVyIHRpdGxlIGFmdGVyIDMwIGNoYXJhY3RlcnMgYW5kIGFkZCBbLi4uXQogICAgICAgIG15ICRXb3JrT3JkZXJUaXRsZVRydW5jYXRlZCA9IHN1YnN0ciggJFdvcmtPcmRlclRpdGxlUmFuZG9tLCAwLCAzMCApIC4gJ1suLi5dJzsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiV29ya29yZGVyIFRpdGxlOiBOZXc6ICRXb3JrT3JkZXJUaXRsZVRydW5jYXRlZCAmbHQ7LSBPbGQ6IC0iICkgPiAtMSwKICAgICAgICAgICAgIldvcmtvcmRlciBUaXRsZTogTmV3OiAkV29ya09yZGVyVGl0bGVUcnVuY2F0ZWQgJmx0Oy0gT2xkOiBpcyBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIHdvcmsgb3JkZXIKICAgICAgICBteSAkU3VjY2VzcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckRlbGV0ZSgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJFdvcmtPcmRlclRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCBjaGFuZ2UKICAgICAgICAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBkZWxldGUgbWVudSBtb2R1bGUgZGVmYXVsdCBjb25maWcKICAgICAgICBteSAlQ2hhbmdlRGVsZXRlTWVudSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKS0+Q29uZmlnSXRlbUdldCgKICAgICAgICAgICAgTmFtZSAgICA9PiAnSVRTTUNoYW5nZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMxMDAtQ2hhbmdlRGVsZXRlJywKICAgICAgICAgICAgRGVmYXVsdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgc2V0IGNoYW5nZSBkZWxldGUgbWVudSBtb2R1bGUgdG8gdmFsaWQKICAgICAgICBteSAlQ2hhbmdlRGVsZXRlTWVudVVwZGF0ZSA9IG1hcCB7ICRfLT57S2V5fSA9PiAkXy0+e0NvbnRlbnR9IH0KICAgICAgICAgICAgZ3JlcCB7IGRlZmluZWQgJF8tPntLZXl9IH0gQHsgJENoYW5nZURlbGV0ZU1lbnV7U2V0dGluZ30tPlsxXS0+e0hhc2h9LT5bMV0tPntJdGVtfSB9OwoKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBLZXkgICA9PiAnSVRTTUNoYW5nZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMxMDAtQ2hhbmdlRGVsZXRlJywKICAgICAgICAgICAgVmFsdWUgPT4gXCVDaGFuZ2VEZWxldGVNZW51VXBkYXRlLAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IEFnZW50SVRTTUNoYW5nZURlbGV0ZSBmcm9udGVuZCBtb2R1bGUgc3lzY29uZmlnCiAgICAgICAgbXkgJUNoYW5nZURlbGV0ZUZyb250ZW5kVXBkYXRlID0gKAogICAgICAgICAgICAnRGVzY3JpcHRpb24nID0+ICdEZWxldGUgYSBjaGFuZ2UnLAogICAgICAgICAgICAnR3JvdXBSbycgICAgID0+IFsKICAgICAgICAgICAgICAgICdpdHNtLWNoYW5nZS1tYW5hZ2VyJwogICAgICAgICAgICBdLAogICAgICAgICAgICAnTmF2QmFyTmFtZScgPT4gJ0lUU00gQ2hhbmdlJywKICAgICAgICAgICAgJ1RpdGxlJyAgICAgID0+ICdEZWxldGUnCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgQWdlbnRJVFNNQ2hhbmdlRGVsZXRlIGZyb250ZW5kIG1vZHVsZSBvbiB2YWxpZAogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIEtleSAgID0+ICdGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNQ2hhbmdlRGVsZXRlJywKICAgICAgICAgICAgVmFsdWUgPT4gXCVDaGFuZ2VEZWxldGVGcm9udGVuZFVwZGF0ZSwKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBnZW5lcmFsIGNhdGFsb2cgb2JqZWN0CiAgICAgICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICAgICBOYW1lICA9PiAncmVxdWVzdGVkJywKICAgICAgICApOwoKICAgICAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgUmVxdWVzdGVkICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDaGFuZ2VJRCAgICAgICAgICA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gIlRlc3QgRGVzY3JpcHRpb24iLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICJUZXN0IEp1c3RpZmljYXRpb24iLAogICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VTdGF0ZURhdGFSZWYtPntJdGVtSUR9LAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLWJ1aWxkZXInLCAnaXRzbS1jaGFuZ2UtbWFuYWdlcicgXQogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTUNoYW5nZSBzY3JlZW4gd2l0aCByZXF1ZXN0ZWQgZmlsdGVyIGFuZCBvcmRlcmVkIGRvd24KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ2hhbmdlO1NvcnRCeT1DaGFuZ2VOdW1iZXI7T3JkZXJCeT1Eb3duO1ZpZXc9O0ZpbHRlcj1yZXF1ZXN0ZWQiCiAgICAgICAgKTsKCiAgICAgICAgIyB2ZXJpZnkgdGhhdCB0ZXN0IGNyZWF0ZWQgY2hhbmdlIGlzIHByZXNlbnQKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRDaGFuZ2VUaXRsZVJhbmRvbSApID4gLTEsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgY2xpY2sgb24gdGVzdCBjcmVhdGVkIGNoYW5nZQogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01DaGFuZ2Vab29tO0NoYW5nZUlEPSRDaGFuZ2VJRCcpXSIpCiAgICAgICAgICAgIC0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNsaWNrIG9uICdEZWxldGUnCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTUNoYW5nZURlbGV0ZTtDaGFuZ2VJRD0kQ2hhbmdlSUQnKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgIyB3YWl0IGZvciBzZXJ2ZXIgc2lkZSBlcnJvcgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJ2Rpdi5EaWFsb2cgYnV0dG9uI0RpYWxvZ0J1dHRvbjEnKS5sZW5ndGgiCiAgICAgICAgKTsKCiAgICAgICAgIyBjbGljayBvayB0byBkaXNtaXNzCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICdkaXYuRGlhbG9nIGJ1dHRvbiNEaWFsb2dCdXR0b24xJywgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIHZlcmlmeSB0aGF0IHRlc3QgY3JlYXRlZCBjaGFuZ2UgaXMgbm90IHByZXNlbnQKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRDaGFuZ2VUaXRsZVJhbmRvbSApID09IC0xLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIG5vdCBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICdJVFNNQ2hhbmdlKicgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSByZXNldCBtZW51IG1vZHVsZSBkZWZhdWx0IGNvbmZpZwogICAgICAgIG15ICVDaGFuZ2VSZXNldE1lbnUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyktPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgIE5hbWUgICAgPT4gJ0lUU01DaGFuZ2U6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMTEwLUNoYW5nZVJlc2V0JywKICAgICAgICAgICAgRGVmYXVsdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgc2V0IGNoYW5nZSByZXNldCBtZW51IG1vZHVsZSB0byB2YWxpZAogICAgICAgIG15ICVDaGFuZ2VSZXNldE1lbnVVcGRhdGUgPSBtYXAgeyAkXy0+e0tleX0gPT4gJF8tPntDb250ZW50fSB9CiAgICAgICAgICAgIGdyZXAgeyBkZWZpbmVkICRfLT57S2V5fSB9IEB7ICRDaGFuZ2VSZXNldE1lbnV7U2V0dGluZ30tPlsxXS0+e0hhc2h9LT5bMV0tPntJdGVtfSB9OwoKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBLZXkgICA9PiAnSVRTTUNoYW5nZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMxMTAtQ2hhbmdlUmVzZXQnLAogICAgICAgICAgICBWYWx1ZSA9PiBcJUNoYW5nZVJlc2V0TWVudVVwZGF0ZSwKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBBZ2VtdElUU01DaGFuZ2VSZXNldCBmcm9udGVuZCBtb2R1bGUgc3lzY29uZmlnCiAgICAgICAgbXkgJUNoYW5nZVJlc2V0RnJvbnRlbmRVcGRhdGUgPSAoCiAgICAgICAgICAgICdEZXNjcmlwdGlvbicgPT4gJ1Jlc2V0IGEgY2hhbmdlIGFuZCBpdHMgd29ya29yZGVycycsCiAgICAgICAgICAgICdHcm91cFJvJyAgICAgPT4gWwogICAgICAgICAgICAgICAgJ2l0c20tY2hhbmdlLWJ1aWxkZXInCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdOYXZCYXJOYW1lJyA9PiAnSVRTTSBDaGFuZ2UnLAogICAgICAgICAgICAnVGl0bGUnICAgICAgPT4gJ1Jlc2V0JywKICAgICAgICApOwoKICAgICAgICAjIHNldCBBZ2VtdElUU01DaGFuZ2VSZXNldCBmcm9udGVuZCBtb2R1bGUgb24gdmFsaWQKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBLZXkgICA9PiAnRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTUNoYW5nZVJlc2V0JywKICAgICAgICAgICAgVmFsdWUgPT4gXCVDaGFuZ2VSZXNldEZyb250ZW5kVXBkYXRlLAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGdlbmVyYWwgY2F0YWxvZyBvYmplY3QKICAgICAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIHN0YXRlIGRhdGEKICAgICAgICBteSBAQ2hhbmdlU3RhdGVJRHM7CiAgICAgICAgZm9yIG15ICRDaGFuZ2VTdGF0ZSAocXcocmVxdWVzdGVkIGFwcHJvdmVkKSkgewogICAgICAgICAgICBteSAkQ2hhbmdlU3RhdGVEYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICAgICAgICAgTmFtZSAgPT4gJENoYW5nZVN0YXRlLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBDaGFuZ2VTdGF0ZUlEcywgJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH07CiAgICAgICAgfQoKICAgICAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgQXBwcm92ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAiVGVzdCBEZXNjcmlwdGlvbiIsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gIlRlc3QgSnVzdGlmaWNhdGlvbiIsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlSURzWzFdLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHdvcmsgb3JkZXIgc3RhdGUgZGF0YQogICAgICAgIG15IEBXb3JrT3JkZXJTdGF0ZUlEczsKICAgICAgICBmb3IgbXkgJFdvcmtPcmRlclN0YXRlIChxdyhjcmVhdGVkIGFjY2VwdGVkKSkgewogICAgICAgICAgICBteSAkV29ya09yZGVyU3RhdGVEYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OldvcmtPcmRlcjo6U3RhdGUnLAogICAgICAgICAgICAgICAgTmFtZSAgPT4gJFdvcmtPcmRlclN0YXRlLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBXb3JrT3JkZXJTdGF0ZUlEcywgJFdvcmtPcmRlclN0YXRlRGF0YVJlZi0+e0l0ZW1JRH07CiAgICAgICAgfQoKICAgICAgICAjIGdldCB3b3JrIG9yZGVyIG9iamVjdAogICAgICAgIG15ICRXb3JrT3JkZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHdvcmsgb3JkZXIKICAgICAgICBteSAkV29ya09yZGVyVGl0bGVSYW5kb20gPSAnU2VsZW5pdW0gV29yayBPcmRlciAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkV29ya09yZGVySUQgICAgICAgICAgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBZGQoCiAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgICA9PiAnU2VsZW5pdW0gVGVzdCBXb3JrIE9yZGVyJywKICAgICAgICAgICAgV29ya09yZGVyU3RhdGVJRCA9PiAkV29ya09yZGVyU3RhdGVJRHNbMV0sCiAgICAgICAgICAgIFBsYW5uZWRTdGFydFRpbWUgPT4gJzIwMjctMTAtMTIgMDA6MDA6MDEnLAogICAgICAgICAgICBQbGFubmVkRW5kVGltZSAgID0+ICcyMDI3LTEwLTE1IDE1OjAwOjAwJywKICAgICAgICAgICAgUGxhbm5lZEVmZm9ydCAgICA9PiAxMCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1idWlsZGVyJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0KICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01DaGFuZ2Vab29tIG9mIGNyZWF0ZWQgdGVzdCBjaGFuZ2UKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2Vab29tO0NoYW5nZUlEPSRDaGFuZ2VJRCIpOwoKICAgICAgICAjIGNsaWNrIG9uICdSZXNldCcKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNQ2hhbmdlUmVzZXQ7Q2hhbmdlSUQ9JENoYW5nZUlEJyldIiktPmNsaWNrKCk7CgogICAgICAgICMgd2FpdCBmb3IgY29uZmlybSBidXR0b24gdG8gc2hvdyB1cCBhbmQgY29uZmlybSByZXNldCBhY3Rpb24KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnLkRpYWxvZyBidXR0b24uUHJpbWFyeS5DYWxsRm9yQWN0aW9uOnZpc2libGUnKS5sZW5ndGg7IiApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiLkRpYWxvZyBidXR0b24uUHJpbWFyeS5DYWxsRm9yQWN0aW9uIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICBzbGVlcCgxKTsKCiAgICAgICAgIyAjIHdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiYm9keSIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBjbGljayBvbiAnSGlzdG9yeScgYW5kIHN3aXRjaCB3aW5kb3cKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNQ2hhbmdlSGlzdG9yeTtDaGFuZ2VJRD0kQ2hhbmdlSUQnKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgbXkgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiLkNhbmNlbENsb3NlUG9wdXAiKS5sZW5ndGgnICk7CgogICAgICAgICMgdmVyaWZ5IHRoYXQgY2hhbmdlIHN0YXRlIGlzIHJlc2V0ZWQKICAgICAgICBteSAkV29ya09yZGVyUmVzZXRNZXNzYWdlCiAgICAgICAgICAgID0gIihJRD0kV29ya09yZGVySUQpIFdvcmtvcmRlciBTdGF0ZTogTmV3OiBDcmVhdGVkIChJRD0kV29ya09yZGVyU3RhdGVJRHNbMF0pICZsdDstIE9sZDogQWNjZXB0ZWQgKElEPSRXb3JrT3JkZXJTdGF0ZUlEc1sxXSkiOwogICAgICAgIG15ICRDaGFuZ2VSZXNldE1lc3NhZ2UKICAgICAgICAgICAgPSAiQ2hhbmdlIFN0YXRlOiBOZXc6IFJlcXVlc3RlZCAoSUQ9JENoYW5nZVN0YXRlSURzWzBdKSAmbHQ7LSBPbGQ6IEFwcHJvdmVkIChJRD0kQ2hhbmdlU3RhdGVJRHNbMV0pIjsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRXb3JrT3JkZXJSZXNldE1lc3NhZ2UgKSA+IC0xLAogICAgICAgICAgICAiJFdvcmtPcmRlclJlc2V0TWVzc2FnZSBpcyBmb3VuZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRDaGFuZ2VSZXNldE1lc3NhZ2UgKSA+IC0xLAogICAgICAgICAgICAiJENoYW5nZVJlc2V0TWVzc2FnZSBpcyBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIHdvcmsgb3JkZXIKICAgICAgICBteSAkU3VjY2VzcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckRlbGV0ZSgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJFdvcmtPcmRlclRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCBjaGFuZ2UKICAgICAgICAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSBSZXF1ZXN0ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAiVGVzdCBEZXNjcmlwdGlvbiIsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gIlRlc3QgSnVzdGlmaWNhdGlvbiIsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgd29yayBvcmRlciBvYmplY3QKICAgICAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB3b3JrIG9yZGVyCiAgICAgICAgbXkgJFdvcmtPcmRlclRpdGxlUmFuZG9tID0gJ1NlbGVuaXVtIFdvcmsgT3JkZXIgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFdvcmtPcmRlcklEICAgICAgICAgID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQWRkKAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJ1NlbGVuaXVtIFRlc3QgV29yayBPcmRlcicsCiAgICAgICAgICAgIFBsYW5uZWRFZmZvcnQgID0+IDEwLAogICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVdvcmtPcmRlclpvb20gZm9yIHRlc3QgY3JlYXRlZCB3b3JrIG9yZGVyCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNV29ya09yZGVyWm9vbTtXb3JrT3JkZXJJRD0kV29ya09yZGVySUQiKTsKCiAgICAgICAgIyBjbGljayBvbiAnSGlzdG9yeScgYW5kIHN3aXRjaCB3aW5kb3cKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNV29ya09yZGVySGlzdG9yeTtXb3JrT3JkZXJJRD0kV29ya09yZGVySUQnKV0iKQogICAgICAgICAgICAtPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIi5DYW5jZWxDbG9zZVBvcHVwIikubGVuZ3RoJyApOwoKICAgICAgICAjIGNsaWNrIG9uIGhpc3Rvcnkgc2hvdyBkZXRhaWxzIHRvIGNoZWNrIEFnZW50SVRTTVdvcmtPcmRlckhpc3Rvcnlab29tIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5Wm9vbTtIaXN0b3J5RW50cnlJRD0nICldIikKICAgICAgICAgICAgLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgY2hlY2sgQWdlbnRJVFNNV29ya09yZGVySGlzdG9yeVpvb20gdmFsdWVzCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiRGV0YWlsZWQgaGlzdG9yeSBpbmZvcm1hdGlvbiBvZiBXb3JrT3JkZXJVcGRhdGUiICkgPiAtMSwKICAgICAgICAgICAgIkRldGFpbGVkIGhpc3RvcnkgaW5mb3JtYXRpb24gb2YgV29ya09yZGVyVXBkYXRlIGlzIGZvdW5kIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIldvcmtPcmRlclRpdGxlIiApID4gLTEsCiAgICAgICAgICAgICJXb3JrT3JkZXJUaXRsZSBpcyBmb3VuZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRXb3JrT3JkZXJUaXRsZVJhbmRvbSApID4gLTEsCiAgICAgICAgICAgICIkV29ya09yZGVyVGl0bGVSYW5kb20gaXMgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCB3b3JrIG9yZGVyCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJEZWxldGUoCiAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgY2hhbmdlCiAgICAgICAgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gJ0lUU01DaGFuZ2UqJyApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZG8gbm90IGNoZWNrIFJpY2hUZXh0CiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0Zyb250ZW5kOjpSaWNoVGV4dCcsCiAgICAgICAgICAgIFZhbHVlID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgZ2VuZXJhbCBjYXRhbG9nIG9iamVjdAogICAgICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICAgICAjIGdldCBjaGFuZ2Ugc3RhdGUgZGF0YQogICAgICAgIG15ICRDaGFuZ2VTdGF0ZURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ3JlcXVlc3RlZCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNoYW5nZQogICAgICAgIG15ICRDaGFuZ2VUaXRsZVJhbmRvbSA9ICdJVFNNQ2hhbmdlIFJlcXVlc3RlZCAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkQ2hhbmdlSUQgICAgICAgICAgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJENoYW5nZVRpdGxlUmFuZG9tLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICJUZXN0IERlc2NyaXB0aW9uIiwKICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAiVGVzdCBKdXN0aWZpY2F0aW9uIiwKICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRCA9PiAkQ2hhbmdlU3RhdGVEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB3b3JrIG9yZGVyIG9iamVjdAogICAgICAgIG15ICRXb3JrT3JkZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHdvcmsgb3JkZXIKICAgICAgICBteSAkV29ya09yZGVyVGl0bGVSYW5kb20gPSAnU2VsZW5pdW0gV29yayBPcmRlciAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkV29ya09yZGVySUQgICAgICAgICAgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBZGQoCiAgICAgICAgICAgIENoYW5nZUlEICAgICAgID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgV29ya09yZGVyVGl0bGUgPT4gJFdvcmtPcmRlclRpdGxlUmFuZG9tLAogICAgICAgICAgICBJbnN0cnVjdGlvbiAgICA9PiAnU2VsZW5pdW0gVGVzdCBXb3JrIE9yZGVyJywKICAgICAgICAgICAgUGxhbm5lZEVmZm9ydCAgPT4gMTAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAiJFdvcmtPcmRlclRpdGxlUmFuZG9tIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNV29ya09yZGVyWm9vbSBmb3IgdGVzdCBjcmVhdGVkIHdvcmsgb3JkZXIKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJab29tO1dvcmtPcmRlcklEPSRXb3JrT3JkZXJJRCIpOwoKICAgICAgICAjIGdldCB3b3JrIG9yZGVyIHN0YXRlcwogICAgICAgIG15IEBXb3JrT3JkZXJTdGF0ZXMgPSAoICdBY2NlcHRlZCcsICdSZWFkeScsICdJbiBQcm9ncmVzcycsICdjbG9zZWQnICk7CgogICAgICAgIGZvciBteSAkV29ya09yZGVyU3RhdGUgKEBXb3JrT3JkZXJTdGF0ZXMpIHsKCiAgICAgICAgICAgICMgY2xpY2sgb24gJ1JlcG9ydCcgYW5kIHN3aXRjaCB3aW5kb3cKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoCiAgICAgICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNV29ya09yZGVyUmVwb3J0O1dvcmtPcmRlcklEPSRXb3JrT3JkZXJJRCcpXSIKICAgICAgICAgICAgKS0+Y2xpY2soKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgICAgICBteSAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAgICAgIyB3YWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI1N1Ym1pdFdvcmtPcmRlckVkaXRSZXBvcnQiKS5sZW5ndGg7JwogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgd29yayBvcmRlciBzdGF0ZSBkYXRhCiAgICAgICAgICAgIG15ICRJdGVtR2V0U3RhdGUgICAgICAgICAgPSBsYyAkV29ya09yZGVyU3RhdGU7CiAgICAgICAgICAgIG15ICRXb3JrT3JkZXJTdGF0ZURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpTdGF0ZScsCiAgICAgICAgICAgICAgICBOYW1lICA9PiAkSXRlbUdldFN0YXRlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBpbnB1dCB0ZXh0IGluIHJlcG9ydCBhbmQgc2VsZWN0IG5leHQgd29yayBvcmRlciBzdGF0ZQogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNSaWNoVGV4dCIsICdjc3MnICktPmNsZWFyKCk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1JpY2hUZXh0IiwgJ2NzcycgKS0+c2VuZF9rZXlzKCIkV29ya09yZGVyU3RhdGUiKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICJcJCgnI1dvcmtPcmRlclN0YXRlSUQnKS52YWwoJyRXb3JrT3JkZXJTdGF0ZURhdGFSZWYtPntJdGVtSUR9JykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHN1Ym1pdCBhbmQgc3dpdGNoIGJhY2sgd2luZG93CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdFdvcmtPcmRlckVkaXRSZXBvcnQiLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAxICk7CiAgICAgICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlswXSApOwoKICAgICAgICAgICAgc2xlZXAoMSk7CgogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiYm9keSIpLmxlbmd0aCcgKTsKCiAgICAgICAgICAgICMgY2xpY2sgb24gJ0hpc3RvcnknIGFuZCBzd2l0Y2ggd2luZG93CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlckhpc3Rvcnk7V29ya09yZGVySUQ9JFdvcmtPcmRlcklEJyldIgogICAgICAgICAgICApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICAgICAgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgICAgICMgd2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiLkNhbmNlbENsb3NlUG9wdXAiKS5sZW5ndGg7JyApOwoKICAgICAgICAgICAgIyB2ZXJpZnkgcmVwb3J0IGNoYW5nZQogICAgICAgICAgICBteSAkUmVwb3J0VXBkYXRlTWVzc2FnZSA9ICJXb3Jrb3JkZXIgU3RhdGU6IE5ldzogJFdvcmtPcmRlclN0YXRlIChJRD0kV29ya09yZGVyU3RhdGVEYXRhUmVmLT57SXRlbUlEfSkiOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkUmVwb3J0VXBkYXRlTWVzc2FnZSApID4gLTEsCiAgICAgICAgICAgICAgICAiJFJlcG9ydFVwZGF0ZU1lc3NhZ2UgaXMgZm91bmQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBjbG9zZSBoaXN0b3J5IHBvcCB1cCBhbmQgc3dpdGNoIHdpbmRvdwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIi5DYW5jZWxDbG9zZVBvcHVwIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMSApOwogICAgICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKCiAgICAgICAgICAgIHNsZWVwKDEpOwoKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoImJvZHkiKS5sZW5ndGgnICk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgd29yayBvcmRlcgogICAgICAgIG15ICRTdWNjZXNzID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyRGVsZXRlKAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkV29ya09yZGVyVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIGNoYW5nZQogICAgICAgICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICdJVFNNQ2hhbmdlKicgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSBSZXF1ZXN0ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAiVGVzdCBEZXNjcmlwdGlvbiIsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gIlRlc3QgSnVzdGlmaWNhdGlvbiIsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgd29yayBvcmRlciBvYmplY3QKICAgICAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB3b3JrIG9yZGVyCiAgICAgICAgbXkgJFdvcmtPcmRlclRpdGxlUmFuZG9tID0gJ1NlbGVuaXVtIFdvcmsgT3JkZXIgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFdvcmtPcmRlckluc3RydWN0aW9uID0gJ1NlbGVuaXVtIFRlc3QgV29yayBPcmRlcic7CiAgICAgICAgbXkgJFdvcmtPcmRlcklEICAgICAgICAgID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQWRkKAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJFdvcmtPcmRlckluc3RydWN0aW9uLAogICAgICAgICAgICBQbGFubmVkRWZmb3J0ICA9PiAxMCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkV29ya09yZGVyVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgYW5kIGxvZyBpbiB0ZXN0IHVzZXIKICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAnaXRzbS1jaGFuZ2UnLCAnaXRzbS1jaGFuZ2UtbWFuYWdlcicgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01Xb3JrT3JkZXJab29tIGZvciB0ZXN0IGNyZWF0ZWQgd29yayBvcmRlcgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlclpvb207V29ya09yZGVySUQ9JFdvcmtPcmRlcklEIik7CgogICAgICAgICMgY2xpY2sgb24gJ1RlbXBsYXRlJyBhbmQgc3dpdGNoIHdpbmRvdwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJUZW1wbGF0ZTtXb3JrT3JkZXJJRD0kV29ya09yZGVySUQnKV0iKQogICAgICAgICAgICAtPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIiNUZW1wbGF0ZU5hbWUiKS5sZW5ndGgnICk7CgogICAgICAgICMgY2hlY2sgcGFnZQogICAgICAgIGZvciBteSAkSUQgKHF3KFRlbXBsYXRlTmFtZSBDb21tZW50IFN0YXRlUmVzZXQgVmFsaWRJRCBTdWJtaXRBZGRUZW1wbGF0ZSkpCiAgICAgICAgewogICAgICAgICAgICBteSAkRWxlbWVudCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiIyRJRCIsICdjc3MnICk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIHRlc3QgdGVtcGxhdGUgZnJvbSB0ZXN0IHdvcmsgb3JkZXIKICAgICAgICBteSAkVGVtcGxhdGVOYW1lUmFuZG9tID0gIldvcmsgT3JkZXIgVGVtcGxhdGUgIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjVGVtcGxhdGVOYW1lIiwgICAgICAnY3NzJyApLT5zZW5kX2tleXMoJFRlbXBsYXRlTmFtZVJhbmRvbSk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ29tbWVudCIsICAgICAgICAgICAnY3NzJyApLT5zZW5kX2tleXMoIlNlbGVuaXVtQ29tbWVudCIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdEFkZFRlbXBsYXRlIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAxICk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzBdICk7CgogICAgICAgIHNsZWVwKDEpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiYm9keSIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBJVFNNQ2hhbmdlVGVtcGxhdGVPdmVydmlldyBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNVGVtcGxhdGVPdmVydmlldztTb3J0Qnk9VGVtcGxhdGVJRDtPcmRlckJ5PVVwO0ZpbHRlcj1JVFNNV29ya09yZGVyIgogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgZm9yIHRlc3QgY3JlYXRlZCB3b3JrIG9yZGVyIHRlbXBsYXRlCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGVtcGxhdGVOYW1lUmFuZG9tICkgPiAtMSwKICAgICAgICAgICAgIiRUZW1wbGF0ZU5hbWVSYW5kb20gaXMgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCB3b3JrIG9yZGVyCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJEZWxldGUoCiAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3QgY2hhbmdlCiAgICAgICAgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBEQiBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBnZXQgdGVzdCBjaGFuZ2UgdGVtcGxhdGUgSUQKICAgICAgICBteSAkVGVtcGxhdGVkUXVvdGVkID0gJERCT2JqZWN0LT5RdW90ZSgkVGVtcGxhdGVOYW1lUmFuZG9tKTsKICAgICAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgPT4gIlNFTEVDVCBpZCBGUk9NIGNoYW5nZV90ZW1wbGF0ZSBXSEVSRSBuYW1lID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFRlbXBsYXRlZFF1b3RlZCBdCiAgICAgICAgKTsKICAgICAgICBteSAkVGVtcGxhdGVJRDsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJFRlbXBsYXRlSUQgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IHRlbXBsYXRlCiAgICAgICAgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6VGVtcGxhdGUnKS0+VGVtcGxhdGVEZWxldGUoCiAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICdJVFNNQ2hhbmdlKicgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSBSZXF1ZXN0ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAiVGVzdCBEZXNjcmlwdGlvbiIsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gIlRlc3QgSnVzdGlmaWNhdGlvbiIsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgd29yayBvcmRlciBvYmplY3QKICAgICAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB3b3JrIG9yZGVyCiAgICAgICAgbXkgJFdvcmtPcmRlclRpdGxlUmFuZG9tID0gJ1NlbGVuaXVtIFdvcmsgT3JkZXIgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFdvcmtPcmRlcklEICAgICAgICAgID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQWRkKAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJ1NlbGVuaXVtIFRlc3QgV29yayBPcmRlcicsCiAgICAgICAgICAgIFBsYW5uZWRFZmZvcnQgID0+IDEwLAogICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVdvcmtPcmRlclpvb20gZm9yIHRlc3QgY3JlYXRlZCB3b3JrIG9yZGVyCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNV29ya09yZGVyWm9vbTtXb3JrT3JkZXJJRD0kV29ya09yZGVySUQiKTsKCiAgICAgICAgIyB2ZXJpZnkgaXRzIHJpZ2h0IHNjcmVlbgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFdvcmtPcmRlclRpdGxlUmFuZG9tICkgPiAtMSwKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBmb3VuZCBvbiBwYWdlIiwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIHBhZ2UKICAgICAgICBmb3IgbXkgJEFjdGlvbiAoCiAgICAgICAgICAgIHF3KCBXb3JrT3JkZXJIaXN0b3J5IENoYW5nZVByaW50IFdvcmtPcmRlckVkaXQgV29ya09yZGVyQWdlbnQgV29ya09yZGVyUmVwb3J0IFdvcmtPcmRlclRlbXBsYXRlIFdvcmtPcmRlckRlbGV0ZSkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQKICAgICAgICAgICAgICAgID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTSRBY3Rpb247V29ya09yZGVySUQ9JFdvcmtPcmRlcklEJyldIik7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCB3b3JrIG9yZGVyCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJEZWxldGUoCiAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSBjcmVhdGVkIHRlc3QgY2hhbmdlCiAgICAgICAgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICdJVFNNQ2hhbmdlKicgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZURhdGFSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICAgICBOYW1lICA9PiAncmVxdWVzdGVkJywKICAgICAgICApOwoKICAgICAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgUmVxdWVzdGVkICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDaGFuZ2VJRCAgICAgICAgICA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ1NlbGVuaXVtIFRlc3QgRGVzY3JpcHRpb24nLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICdTZWxlbml1bSBUZXN0IEp1c3RpZmljYXRpb24nLAogICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIGJ1aWxkZXIgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IGJ1aWxkZXIgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB1c2VyIG9iamVjdAogICAgICAgIG15ICRVc2VyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiAgICAgICAgIyBnZXQgdGVzdCB1c2VyIElECiAgICAgICAgbXkgJFRlc3RVc2VySUQgPSAkVXNlck9iamVjdC0+VXNlckxvb2t1cCgKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgQ0FCIHVzZXIKICAgICAgICBteSAkVGVzdFVzZXJDQUIgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgYnVpbGRlciB1c2VyIjsKCiAgICAgICAgIyBnZXQgdGVzdCBDQUIgdXNlciBJRAogICAgICAgIG15ICRUZXN0VXNlckNBQklEID0gJFVzZXJPYmplY3QtPlVzZXJMb29rdXAoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJDQUIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjdXN0b21lciB1c2VyCiAgICAgICAgbXkgJFRlc3RDdXN0b21lckNBQiA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTUNoYW5nZVpvb20gc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ2hhbmdlWm9vbTtDaGFuZ2VJRD0kQ2hhbmdlSUQiKTsKCiAgICAgICAgIyBjbGljayBvbiAnSW52b2x2ZWQgUGVyc29ucycgYW5kIHN3aXRjaCB3aW5kb3cKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNQ2hhbmdlSW52b2x2ZWRQZXJzb25zO0NoYW5nZUlEPSRDaGFuZ2VJRCcpXSIpCiAgICAgICAgICAgIC0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgbXkgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI0NoYW5nZU1hbmFnZXIiKS5sZW5ndGgnICk7CgogICAgICAgICMgaW5wdXQgY2hhbmdlIG1hbmFnZXIKICAgICAgICBteSAkQXV0b0NvbXBsZXRlU3RyaW5nTWFuYWdlcgogICAgICAgICAgICA9ICJcIiRUZXN0VXNlckxvZ2luICRUZXN0VXNlckxvZ2luXCIgPCRUZXN0VXNlckxvZ2luXEBsb2NhbHVuaXR0ZXN0LmNvbT4gKCRUZXN0VXNlcklEKSI7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNDaGFuZ2VNYW5hZ2VyJykuYXV0b2NvbXBsZXRlKCdzZWFyY2gnLCAnJFRlc3RVc2VyTG9naW4nKSAiKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiAkKCJsaS51aS1tZW51LWl0ZW06dmlzaWJsZSIpLmxlbmd0aCcgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy8qW3RleHQoKT0nJEF1dG9Db21wbGV0ZVN0cmluZ01hbmFnZXInXSIpLT5jbGljaygpOwoKICAgICAgICAjIGlucHV0IGNoYW5nZSBhZ2VudCBDQUIKICAgICAgICBteSAkQXV0b0NvbXBsZXRlU3RyaW5nQ0FCID0gIlwiJFRlc3RVc2VyQ0FCICRUZXN0VXNlckNBQlwiIDwkVGVzdFVzZXJDQUJcQGxvY2FsdW5pdHRlc3QuY29tPiAoJFRlc3RVc2VyQ0FCSUQpIjsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI05ld0NBQk1lbWJlcicpLmF1dG9jb21wbGV0ZSgnc2VhcmNoJywgJyRUZXN0VXNlckNBQicpICIpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuICQoImxpLnVpLW1lbnUtaXRlbTp2aXNpYmxlIikubGVuZ3RoJyApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvLypbdGV4dCgpPSckQXV0b0NvbXBsZXRlU3RyaW5nQ0FCJ10iKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB0eXBlPSdzdWJtaXQnXVtcQG5hbWU9J0FkZENBQk1lbWJlckJ1dHRvbiddIiktPmNsaWNrKCk7CgogICAgICAgICMgaW5wdXQgY2hhbmdlIGN1c3RvbWVyIENBQgogICAgICAgIG15ICRBdXRvQ29tcGxldGVTdHJpbmdDdXN0b21lcgogICAgICAgICAgICA9ICJcIiRUZXN0Q3VzdG9tZXJDQUIgJFRlc3RDdXN0b21lckNBQlwiIDwkVGVzdEN1c3RvbWVyQ0FCXEBsb2NhbHVuaXR0ZXN0LmNvbT4gKCRUZXN0Q3VzdG9tZXJDQUIpIjsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI05ld0NBQk1lbWJlcicpLmF1dG9jb21wbGV0ZSgnc2VhcmNoJywgJyRUZXN0Q3VzdG9tZXJDQUInKSAiKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiAkKCJsaS51aS1tZW51LWl0ZW06dmlzaWJsZSIpLmxlbmd0aCcgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy8qW3RleHQoKT0nJEF1dG9Db21wbGV0ZVN0cmluZ0N1c3RvbWVyJ10iKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB0eXBlPSdzdWJtaXQnXVtcQG5hbWU9J0FkZENBQk1lbWJlckJ1dHRvbiddIiktPmNsaWNrKCk7CgogICAgICAgICMgc2VhcmNoIGlmIGRhdGEgaXMgaW4gdGhlIHRhYmxlCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAicmV0dXJuIFwkKCd0YWJsZS5EYXRhVGFibGUgdHIgdGQ6Y29udGFpbnMoJFRlc3RVc2VyQ0FCKScpLmxlbmd0aCIKICAgICAgICAgICAgKSwKICAgICAgICAgICAgIkNBQiBhdXRvY29tcGxldGVkICRUZXN0VXNlckNBQiBpcyBmb3VuZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICJyZXR1cm4gXCQoJ3RhYmxlLkRhdGFUYWJsZSB0ciB0ZDpjb250YWlucygkVGVzdEN1c3RvbWVyQ0FCKScpLmxlbmd0aCIKICAgICAgICAgICAgKSwKICAgICAgICAgICAgIkNBQiBhdXRvY29tcGxldGVkICRUZXN0Q3VzdG9tZXJDQUIgaXMgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIGNyZWF0ZWQgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gJ0lUU01DaGFuZ2UqJyApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgR2V0IFNlbGVuaXVtIG9iamVjdC4KbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgbXkgJEhlbHBlciAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CiAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICMgR2V0IGNoYW5nZSBzdGF0ZSBkYXRhLgogICAgICAgIG15ICRDaGFuZ2VEYXRhUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ3JlcXVlc3RlZCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCBjaGFuZ2UuCiAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgUmVxdWVzdGVkICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDaGFuZ2VJRCAgICAgICAgICA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ1NlbGVuaXVtIFRlc3QgRGVzY3JpcHRpb24nLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICdTZWxlbml1bSBUZXN0IEp1c3RpZmljYXRpb24nLAogICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIEdldCB0ZXN0IGNyZWF0ZWQgY2hhbmdlIGRhdGEuCiAgICAgICAgbXkgJENoYW5nZURhdGEgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VHZXQoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBhbmQgbG9naW4gYXMgdGVzdCB1c2VyLgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IGJ1aWxkZXIgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIEdldCBzY3JpcHQgYWxpYXMuCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIEFnZW50SVRTTUNoYW5nZVNlYXJjaC4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2VTZWFyY2giKTsKCiAgICAgICAgIyBXYWl0IHVudGlsIGZvcm0gYW5kIG92ZXJsYXkgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5LgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNTZWFyY2hQcm9maWxlJykubGVuZ3RoIiApOwoKICAgICAgICAjIENoZWNrIGNoYW5nZSBzZWFyY2ggcGFnZS4KICAgICAgICBmb3IgbXkgJElEICgKICAgICAgICAgICAgcXcoU2VhcmNoUHJvZmlsZSBTZWFyY2hQcm9maWxlTmV3IEF0dHJpYnV0ZSBSZXN1bHRGb3JtIFNlYXJjaEZvcm1TdWJtaXQpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjJElEIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KCiAgICAgICAgIyBJbnB1dCBjaGFuZ2UgdGl0bGUgYW5kIG51bWJlciBhcyBzZWFyY2ggcGFyYW0gYW5kIHJ1biBpdC4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW1xAY2xhc3M9J0FkZEJ1dHRvbiddIiktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJDaGFuZ2VOdW1iZXIiLCAgICAgICduYW1lJyApLT5zZW5kX2tleXMoICRDaGFuZ2VEYXRhLT57Q2hhbmdlTnVtYmVyfSApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiQ2hhbmdlVGl0bGUiLCAgICAgICAnbmFtZScgKS0+c2VuZF9rZXlzKCAkQ2hhbmdlRGF0YS0+e0NoYW5nZVRpdGxlfSApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NlYXJjaEZvcm1TdWJtaXQiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ2hlY2sgZm9yIGV4cGVjdGVkIHJlc3VsdC4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRDaGFuZ2VUaXRsZVJhbmRvbSApID4gLTEsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gQWdlbnRJVFNNQ2hhbmdlU2VhcmNoLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZVNlYXJjaCIpOwoKICAgICAgICAjIFdhaXQgdW50aWwgZm9ybSBhbmQgb3ZlcmxheSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkuCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnI1NlYXJjaFByb2ZpbGUnKS5sZW5ndGgiICk7CgogICAgICAgICMgSW5wdXQgd3Jvbmcgc2VhcmNoIHBhcmFtZXRlcnMsIHJlc3VsdCBzaG91bGQgYmUgJ05vIGRhdGEgZm91bmQnLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiQ2hhbmdlTnVtYmVyIiwgICAgICAnbmFtZScgKS0+c2VuZF9rZXlzKCIxMjM0NTU2NzgiKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTZWFyY2hGb3JtU3VibWl0IiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENoZWNrIGZvciBleHBlY3RlZCByZXN1bHQuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiTm8gZGF0YSBmb3VuZC4iICkgPiAtMSwKICAgICAgICAgICAgIkNoYW5nZSBpcyBub3QgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgRGVsZXRlIGNyZWF0ZWQgdGVzdCBjaGFuZ2UuCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdC4KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZURhdGFSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICAgICBOYW1lICA9PiAncmVxdWVzdGVkJywKICAgICAgICApOwoKICAgICAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgUmVxdWVzdGVkICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDaGFuZ2VJRCAgICAgICAgICA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ1NlbGVuaXVtIFRlc3QgRGVzY3JpcHRpb24nLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICdTZWxlbml1bSBUZXN0IEp1c3RpZmljYXRpb24nLAogICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB3b3JrIG9yZGVyIG9iamVjdAogICAgICAgIG15ICRXb3JrT3JkZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHdvcmsgb3JkZXIKICAgICAgICBteSAkV29ya09yZGVyVGl0bGVSYW5kb20gPSAnU2VsZW5pdW0gV29yayBPcmRlciAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkV29ya09yZGVySUQgICAgICAgICAgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBZGQoCiAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgICA9PiAnU2VsZW5pdW0gVGVzdCBXb3JrIE9yZGVyJywKICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZSA9PiAnMjAwOS0xMC0xMiAwMDowMDowMScsCiAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lICAgPT4gJzIwMDktMTAtMTUgMTU6MDA6MDAnLAogICAgICAgICAgICBQbGFubmVkRWZmb3J0ICAgID0+IDEwLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAiJFdvcmtPcmRlclRpdGxlUmFuZG9tIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNQ2hhbmdlWm9vbSBmb3IgdGVzdCBjcmVhdGVkIGNoYW5nZQogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9JENoYW5nZUlEIik7CgogICAgICAgICMgY2xpY2sgb24gJ01vdmUgVGltZSBTbG90JyBhbmQgc3dpdGNoIHdpbmRvdwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01DaGFuZ2VUaW1lU2xvdDtDaGFuZ2VJRD0kQ2hhbmdlSUQnKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgbXkgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI01vdmVUaW1lVHlwZSIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBjaGVjayBwYWdlCiAgICAgICAgZm9yIG15ICRJRCAoCiAgICAgICAgICAgIHF3KE1vdmVUaW1lVHlwZSBNb3ZlVGltZU1vbnRoIE1vdmVUaW1lRGF5IE1vdmVUaW1lWWVhciBNb3ZlVGltZUhvdXIgTW92ZVRpbWVNaW51dGUgU3VibWl0TW92ZVRpbWVTbG90KQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkRWxlbWVudCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiIyRJRCIsICdjc3MnICk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICB9CgogICAgICAgICMgc3VibWl0IGRlZmF1bHQgc2VsZWN0ZWQgdmFsdWUKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTdWJtaXRNb3ZlVGltZVNsb3QiLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDEgKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKCiAgICAgICAgc2xlZXAoMSk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCJib2R5IikubGVuZ3RoJyApOwoKICAgICAgICAjIGNsaWNrIG9uICdIaXN0b3J5JyBhbmQgc3dpdGNoIHdpbmRvdwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01DaGFuZ2VIaXN0b3J5O0NoYW5nZUlEPSRDaGFuZ2VJRCcpXSIpLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgd2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIuQ2FuY2VsQ2xvc2VQb3B1cCIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyB2ZXJpZnkgbW92ZSB0aW1lIHNsb3QgY2hhbmdlCiAgICAgICAgbXkgJEV4cGVjdGVkU3RhcnRNZXNzYWdlID0gIihJRD0kV29ya09yZGVySUQpIFBsYW5uZWQgU3RhcnQ6IE5ldzogMjAwOS0xMC0xMiAwMDowMDowMSAmbHQ7LSBPbGQ6IC0iOwogICAgICAgIG15ICRFeHBlY3RlZEVuZE1lc3NhZ2UgICA9ICIoSUQ9JFdvcmtPcmRlcklEKSBQbGFubmVkIEVuZDogTmV3OiAyMDA5LTEwLTE1IDE1OjAwOjAwICZsdDstIE9sZDogLSI7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkRXhwZWN0ZWRTdGFydE1lc3NhZ2UgKSA+IC0xLAogICAgICAgICAgICAiJEV4cGVjdGVkU3RhcnRNZXNzYWdlIGlzIGZvdW5kIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJEV4cGVjdGVkRW5kTWVzc2FnZSApID4gLTEsCiAgICAgICAgICAgICIkRXhwZWN0ZWRFbmRNZXNzYWdlIGlzIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgd29yayBvcmRlcgogICAgICAgIG15ICRTdWNjZXNzID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyRGVsZXRlKAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkV29ya09yZGVyVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IGNoYW5nZQogICAgICAgICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9CgopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IENBQiB1c2VyIGFuZCB0ZXN0IGN1c3RvbWVyIHVzZXIgYW5kIGdldCB0aGVyZSBJRHMKICAgICAgICBteSAkVGVzdFVzZXJDQUIgPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKTsKICAgICAgICBteSAkVGVzdFVzZXJDQUJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJDQUIsCiAgICAgICAgKTsKICAgICAgICBteSAkVGVzdEN1c3RvbWVyQ0FCICAgID0gJEhlbHBlci0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpOwogICAgICAgIG15IEBUZXN0Q3VzdG9tZXJDQUJJRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyktPkN1c3RvbWVySURzKAogICAgICAgICAgICBVc2VyID0+ICRUZXN0Q3VzdG9tZXJDQUIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIHN0YXRlIGRhdGEKICAgICAgICBteSAkQ2hhbmdlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSBSZXF1ZXN0ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnU2VsZW5pdW0gVGVzdCBEZXNjcmlwdGlvbicsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ1NlbGVuaXVtIFRlc3QgSnVzdGlmaWNhdGlvbicsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZURhdGFSZWYtPntJdGVtSUR9LAogICAgICAgICAgICBDQUJBZ2VudHMgICAgID0+IFskVGVzdFVzZXJDQUJJRF0sCiAgICAgICAgICAgIENBQkN1c3RvbWVycyAgPT4gWyAkVGVzdEN1c3RvbWVyQ0FCSURzWzBdIF0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGVtcGxhdGUgb2JqZWN0CiAgICAgICAgbXkgJFRlbXBsYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlJyk7CgogICAgICAgICMgY3JlYXRlIGNoYW5nZSBhbmQgQ0FCIHRlbXBsYXRlCiAgICAgICAgbXkgQFRlbXBsYXRlSURzOwogICAgICAgIG15IEBUZW1wbGF0ZU5hbWVzOwogICAgICAgIGZvciBteSAkVGVtcGxhdGUgKHF3KElUU01DaGFuZ2UgQ0FCKSkgewoKICAgICAgICAgICAgIyBjcmVhdGUgc2ltcGxlIHRlbXBsYXRlIGNoYW5nZSBhbmQgQ0FCCiAgICAgICAgICAgIG15ICRUZW1wbGF0ZU5hbWVSYW5kb20gPSAnVGVtcGxhdGUgJyAuICRUZW1wbGF0ZSAuICcgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgICAgIG15ICRDb250ZW50ICAgICAgICAgICAgPSAkVGVtcGxhdGVPYmplY3QtPlRlbXBsYXRlU2VyaWFsaXplKAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRUZW1wbGF0ZU5hbWVSYW5kb20sCiAgICAgICAgICAgICAgICBUZW1wbGF0ZVR5cGUgPT4gJFRlbXBsYXRlLAogICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgIENvbW1lbnQgICAgICA9PiAnU2VsZW5pdW0gVGVzdCBDb21tZW50JywKICAgICAgICAgICAgICAgIFZhbGlkSUQgICAgICA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY3JlYXRlIHRlc3QgdGVtcGxhdGUgZnJvbSB0ZXN0IGNoYW5nZSBhbmQgQ0FCCiAgICAgICAgICAgIG15ICRUZW1wbGF0ZUlEID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZUFkZCgKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkVGVtcGxhdGVOYW1lUmFuZG9tLAogICAgICAgICAgICAgICAgVGVtcGxhdGVUeXBlID0+ICRUZW1wbGF0ZSwKICAgICAgICAgICAgICAgIENoYW5nZUlEICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICBDb250ZW50ICAgICAgPT4gJENvbnRlbnQsCiAgICAgICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJ1NlbGVuaXVtIFRlc3QgQ29tbWVudCcsCiAgICAgICAgICAgICAgICBWYWxpZElEICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRUZW1wbGF0ZUlELAogICAgICAgICAgICAgICAgIkNoYW5nZSBUZW1wbGF0ZSBJRCAkVGVtcGxhdGVJRCBpcyBjcmVhdGVkIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHB1c2ggQFRlbXBsYXRlSURzLCAgICRUZW1wbGF0ZUlEOwogICAgICAgICAgICBwdXNoIEBUZW1wbGF0ZU5hbWVzLCAkVGVtcGxhdGVOYW1lUmFuZG9tOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgd29yayBvcmRlciBvYmplY3QKICAgICAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB3b3JrIG9yZGVyCiAgICAgICAgbXkgJFdvcmtPcmRlclRpdGxlUmFuZG9tID0gJ1NlbGVuaXVtIFdvcmsgT3JkZXIgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFdvcmtPcmRlcklEICAgICAgICAgID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQWRkKAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJ1NlbGVuaXVtIFRlc3QgV29yayBPcmRlcicsCiAgICAgICAgICAgIFBsYW5uZWRFZmZvcnQgID0+IDEwLAogICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICBteSAkVGVtcGxhdGVOYW1lUmFuZG9tID0gJ1RlbXBsYXRlIElUU01Xb3JrT3JkZXIgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENvbnRlbnQgICAgICAgICAgICA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVTZXJpYWxpemUoCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkVGVtcGxhdGVOYW1lUmFuZG9tLAogICAgICAgICAgICBUZW1wbGF0ZVR5cGUgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgICAgICBXb3JrT3JkZXJJRCAgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICBDb21tZW50ICAgICAgPT4gJ1NlbGVuaXVtIFRlc3QgQ29tbWVudCcsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMQogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdGVtcGxhdGUgZnJvbSB0ZXN0IHdvcmsgb3JkZXIKICAgICAgICBteSAkVGVtcGxhdGVJRCA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVBZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkVGVtcGxhdGVOYW1lUmFuZG9tLAogICAgICAgICAgICBUZW1wbGF0ZVR5cGUgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgICAgICBXb3JrT3JkZXJJRCAgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICBDb250ZW50ICAgICAgPT4gJENvbnRlbnQsCiAgICAgICAgICAgIENvbW1lbnQgICAgICA9PiAnU2VsZW5pdW0gVGVzdCBDb21tZW50JywKICAgICAgICAgICAgVmFsaWRJRCAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRUZW1wbGF0ZUlELAogICAgICAgICAgICAiQ2hhbmdlIFRlbXBsYXRlIElEICRUZW1wbGF0ZUlEIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQFRlbXBsYXRlSURzLCAgICRUZW1wbGF0ZUlEOwogICAgICAgIHB1c2ggQFRlbXBsYXRlTmFtZXMsICRUZW1wbGF0ZU5hbWVSYW5kb207CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgIG15ICRJbmRleCA9IDA7CiAgICAgICAgZm9yIG15ICRUZW1wbGF0ZUNoZWNrIChxdyhJVFNNQ2hhbmdlIENBQiBJVFNNV29ya09yZGVyKSkgewoKICAgICAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3IG9yZGVyIGRvd24gd2l0aCBhcHByb3ByaWF0ZSBmaWx0ZXIKICAgICAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01UZW1wbGF0ZU92ZXJ2aWV3O1NvcnRCeT1UZW1wbGF0ZUlEO09yZGVyQnk9RG93bjtGaWx0ZXI9JFRlbXBsYXRlQ2hlY2siCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIG92ZXJ2aWV3IHNjcmVlbgogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggInRhYmxlIiwgICAgICAgICAgICAgJ2NzcycgKTsKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJ0YWJsZSB0aGVhZCB0ciB0aCIsICdjc3MnICk7CiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAidGFibGUgdGJvZHkgdHIgdGQiLCAnY3NzJyApOwoKICAgICAgICAgICAgIyBjaGVjayBmb3IgZXhwZWN0ZWQgdGVzdCB0ZW1wbGF0ZQogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGVtcGxhdGVOYW1lc1skSW5kZXhdICkgPiAtMSwKICAgICAgICAgICAgICAgICIkVGVtcGxhdGVOYW1lc1skSW5kZXhdIGlzIGZvdW5kIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgZm9yIGVkaXQgdGVtcGxhdGUgbGluawogICAgICAgICAgICBteSAkVGVtcGxhdGVFZGl0OwogICAgICAgICAgICBpZiAoICRUZW1wbGF0ZUNoZWNrIGVxICdDQUInICkgewogICAgICAgICAgICAgICAgJFRlbXBsYXRlRWRpdCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAgICAgICAgICIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01UZW1wbGF0ZUVkaXRDQUI7VGVtcGxhdGVJRD0kVGVtcGxhdGVJRHNbJEluZGV4XScpXSIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkVGVtcGxhdGVFZGl0ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRWRpdENvbnRlbnRUZW1wbGF0ZUlEJFRlbXBsYXRlSURzWyRJbmRleF0iLCAnY3NzJyApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRUZW1wbGF0ZUVkaXQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJFRlbXBsYXRlRWRpdC0+aXNfZGlzcGxheWVkKCk7CgogICAgICAgICAgICAjIGNsaWNrIHRvIGRlbGV0ZSB0ZXN0IHRlbXBsYXRlCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0RlbGV0ZVRlbXBsYXRlSUQkVGVtcGxhdGVJRHNbJEluZGV4XSIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICAgICAjIHdhaXQgZm9yIGNvbmZpcm0gYnV0dG9uIHRvIHNob3cgdXAgYW5kIGNvbmZpcm0gZGVsZXRlIGFjdGlvbgogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI0RpYWxvZ0J1dHRvbjEnKS5sZW5ndGg7IiApOwogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNEaWFsb2dCdXR0b24xIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgJEluZGV4Kys7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgd29yayBvcmRlcgogICAgICAgIG15ICRTdWNjZXNzID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyRGVsZXRlKAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkV29ya09yZGVyVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIGNoYW5nZQogICAgICAgICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZURhdGFSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICAgICBOYW1lICA9PiAncmVxdWVzdGVkJywKICAgICAgICApOwoKICAgICAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgUmVxdWVzdGVkICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDaGFuZ2VJRCAgICAgICAgICA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ1NlbGVuaXVtIFRlc3QgRGVzY3JpcHRpb24nLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICdTZWxlbml1bSBUZXN0IEp1c3RpZmljYXRpb24nLAogICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIGJ1aWxkZXIgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IGJ1aWxkZXIgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0ZXN0IHVzZXIgSUQKICAgICAgICBteSAkVGVzdFVzZXJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNQ2hhbmdlWm9vbSBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2Vab29tO0NoYW5nZUlEPSRDaGFuZ2VJRCIpOwoKICAgICAgICAjIGNsaWNrIG9uICdJbnZvbHZlZCBQZXJzb25zJyBhbmQgc3dpdGNoIHdpbmRvdwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01DaGFuZ2VJbnZvbHZlZFBlcnNvbnM7Q2hhbmdlSUQ9JENoYW5nZUlEJyldIikKICAgICAgICAgICAgLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICBteSAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgd2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjQ2hhbmdlTWFuYWdlciIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBpbnB1dCBjaGFuZ2UgbWFuYWdlcgogICAgICAgIG15ICRBdXRvQ29tcGxldGVTdHJpbmdNYW5hZ2VyCiAgICAgICAgICAgID0gIlwiJFRlc3RVc2VyTG9naW4gJFRlc3RVc2VyTG9naW5cIiA8JFRlc3RVc2VyTG9naW5cQGxvY2FsdW5pdHRlc3QuY29tPiAoJFRlc3RVc2VySUQpIjsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI0NoYW5nZU1hbmFnZXInKS5hdXRvY29tcGxldGUoJ3NlYXJjaCcsICckVGVzdFVzZXJMb2dpbicpICIpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiAkKCJsaS51aS1tZW51LWl0ZW06dmlzaWJsZSIpLmxlbmd0aCcgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy8qW3RleHQoKT0nJEF1dG9Db21wbGV0ZVN0cmluZ01hbmFnZXInXSIpLT5jbGljaygpOwoKICAgICAgICAjIHN1Ym1pdCBhbmQgc3dpdGNoIHdpbmRvdwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHR5cGU9J3N1Ym1pdCddW1xAdmFsdWU9J1N1Ym1pdCddIiktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAxICk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzBdICk7CgogICAgICAgIHNsZWVwKDEpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiYm9keSIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBjbGljayBvbiAnSGlzdG9yeScgYW5kIHN3aXRjaCB3aW5kb3cKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNQ2hhbmdlSGlzdG9yeTtDaGFuZ2VJRD0kQ2hhbmdlSUQnKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiLkNhbmNlbENsb3NlUG9wdXAiKS5sZW5ndGgnICk7CgogICAgICAgICMgY2hlY2sgbWFuYWdlciBjaGFuZ2UKICAgICAgICBteSAkRXhwZWN0ZWRNYW5hZ2VyTWVzc2FnZSA9ICJDaGFuZ2UgTWFuYWdlcjogTmV3OiAkVGVzdFVzZXJMb2dpbiI7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJEV4cGVjdGVkTWFuYWdlck1lc3NhZ2UgKSA+IC0xLAogICAgICAgICAgICAiJEV4cGVjdGVkTWFuYWdlck1lc3NhZ2UgaXMgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIGNyZWF0ZWQgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gJ0lUU01DaGFuZ2UqJyApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZURhdGFSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICAgICBOYW1lICA9PiAncmVxdWVzdGVkJywKICAgICAgICApOwoKICAgICAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICMgY3JlYXRlIHR3byB0ZXN0IGNoYW5nZXMKICAgICAgICBteSBAQ2hhbmdlSURzOwogICAgICAgIGZvciBteSAkQ2hhbmdlQ3JlYXRlICggMSAuLiAyICkgewogICAgICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICdTZWxlbml1bSBUZXN0IERlc2NyaXB0aW9uJywKICAgICAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ1NlbGVuaXVtIFRlc3QgSnVzdGlmaWNhdGlvbicsCiAgICAgICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGNyZWF0ZWQiLAogICAgICAgICAgICApOwogICAgICAgICAgICBwdXNoIEBDaGFuZ2VJRHMsICRDaGFuZ2VJRDsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHdvcmsgb3JkZXIgb2JqZWN0CiAgICAgICAgbXkgJFdvcmtPcmRlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3Qgd29yayBvcmRlcgogICAgICAgIG15ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSA9ICdTZWxlbml1bSBXb3JrIE9yZGVyICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRXb3JrT3JkZXJJRCAgICAgICAgICA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckFkZCgKICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgICA9PiAkQ2hhbmdlSURzWzBdLAogICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgICA9PiAnU2VsZW5pdW0gVGVzdCBXb3JrIE9yZGVyJywKICAgICAgICAgICAgUGxhbm5lZFN0YXJ0VGltZSA9PiAnMjAyNy0xMC0xMiAwMDowMDowMScsCiAgICAgICAgICAgIFBsYW5uZWRFbmRUaW1lICAgPT4gJzIwMjctMTAtMTUgMTU6MDA6MDAnLAogICAgICAgICAgICBQbGFubmVkRWZmb3J0ICAgID0+IDEwLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFdvcmtPcmRlcklELAogICAgICAgICAgICAiJFdvcmtPcmRlclRpdGxlUmFuZG9tIElEICRXb3JrT3JkZXJJRCBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0ZW1wbGF0ZSBvYmplY3QKICAgICAgICBteSAkVGVtcGxhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6VGVtcGxhdGUnKTsKCiAgICAgICAgIyBjcmVhdGUgc2ltcGxlIGNoYW5nZSB0ZW1wbGF0ZQogICAgICAgIG15ICRUZW1wbGF0ZU5hbWVSYW5kb20gPSAnVGVtcGxhdGUgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFdvcmtPcmRlckNvbnRlbnQgICA9ICRUZW1wbGF0ZU9iamVjdC0+VGVtcGxhdGVTZXJpYWxpemUoCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAkVGVtcGxhdGVOYW1lUmFuZG9tLAogICAgICAgICAgICBUZW1wbGF0ZVR5cGUgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgICAgICBXb3JrT3JkZXJJRCAgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICBWYWxpZElEICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB0ZW1wbGF0ZSBmcm9tIHRlc3Qgd29yayBvcmRlcgogICAgICAgIG15ICRUZW1wbGF0ZUlEID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZUFkZCgKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICRUZW1wbGF0ZU5hbWVSYW5kb20sCiAgICAgICAgICAgIFRlbXBsYXRlVHlwZSA9PiAnSVRTTVdvcmtPcmRlcicsCiAgICAgICAgICAgIFdvcmtPcmRlcklEICA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgIENvbnRlbnQgICAgICA9PiAkV29ya09yZGVyQ29udGVudCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRUZW1wbGF0ZUlELAogICAgICAgICAgICAiV29yayBPcmRlciBUZW1wbGF0ZSBJRCAkVGVtcGxhdGVJRCBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTUNoYW5nZVpvb20gZm9yIHNlY29uZCB0ZXN0IGNyZWF0ZWQgY2hhbmdlCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ2hhbmdlWm9vbTtDaGFuZ2VJRD0kQ2hhbmdlSURzWzFdIik7CgogICAgICAgICMgY2xpY2sgb24gJ0FkZCBXb3Jrb3JkZXIgKGZyb20gdGVtcGxhdGUpJyBhbmQgc3dpdGNoIHdpbmRvdwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNV29ya09yZGVyQWRkRnJvbVRlbXBsYXRlO0NoYW5nZUlEPSRDaGFuZ2VJRHNbMV0nKV0iCiAgICAgICAgKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgbXkgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI1RlbXBsYXRlSUQiKS5sZW5ndGgnICk7CgogICAgICAgICMgY2hlY2sgcGFnZQogICAgICAgIGZvciBteSAkSUQgKAogICAgICAgICAgICBxdyhUZW1wbGF0ZUlEIE1vdmVUaW1lVHlwZSBNb3ZlVGltZU1vbnRoIE1vdmVUaW1lRGF5IE1vdmVUaW1lWWVhciBNb3ZlVGltZUhvdXIgTW92ZVRpbWVNaW51dGUgU3VibWl0VGVtcGxhdGUpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjJElEIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KCiAgICAgICAgIyBzZWxlY3QgdGVzdCBjcmVhdGVkIHdvcmsgb3JkZXIgdGVtcGxhdGUgYW5kIHN1Ym1pdAogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI1RlbXBsYXRlSUQnKS52YWwoJyRUZW1wbGF0ZUlEJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTdWJtaXRUZW1wbGF0ZSIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMSApOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlswXSApOwoKICAgICAgICBzbGVlcCgxKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoImJvZHkiKS5sZW5ndGgnICk7CgogICAgICAgICMgY2hlY2sgd29yayBvcmRlciB2YWx1ZXMgY3JlYXRlZCBmcm9tIHRlc3QgdGVtcGxhdGUKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRXb3JrT3JkZXJUaXRsZVJhbmRvbSApID4gLTEsCiAgICAgICAgICAgICIkV29ya09yZGVyVGl0bGVSYW5kb20gaXMgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCB3b3JrIG9yZGVycwogICAgICAgIG15ICRTdWNjZXNzOwogICAgICAgIGZvciBteSAkV29ya09yZGVyRGVsZXRlICggJFdvcmtPcmRlcklELCAkV29ya09yZGVySUQrKyApIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJEZWxldGUoCiAgICAgICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVyRGVsZXRlLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJXb3JrIE9yZGVyIElEICRXb3JrT3JkZXJEZWxldGUgaXMgZGVsZXRlZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgY2hhbmdlCiAgICAgICAgZm9yIG15ICRDaGFuZ2VEZWxldGUgKEBDaGFuZ2VJRHMpIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlRGVsZXRlLAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJDaGFuZ2UgSUQgJENoYW5nZURlbGV0ZSBpcyBkZWxldGVkIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCB0ZW1wbGF0ZQogICAgICAgICRTdWNjZXNzID0gJFRlbXBsYXRlT2JqZWN0LT5UZW1wbGF0ZURlbGV0ZSgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkVGVtcGxhdGVJRCwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiVGVtcGxhdGUgSUQgJFRlbXBsYXRlSUQgaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgICAgIG15ICRIZWxwZXIgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CiAgICAgICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICAgICBOYW1lICA9PiAncmVxdWVzdGVkJywKICAgICAgICApOwoKICAgICAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgUmVxdWVzdGVkICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDaGFuZ2VJRCAgICAgICAgICA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ1NlbGVuaXVtIFRlc3QgRGVzY3JpcHRpb24nLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICdTZWxlbml1biBUZXN0IEp1c3RpZmljYXRpb24nLAogICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VTdGF0ZURhdGFSZWYtPntJdGVtSUR9LAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLWJ1aWxkZXInLCAnaXRzbS1jaGFuZ2UtbWFuYWdlcicgXQogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTUNoYW5nZVpvb20gb2YgY3JlYXRlZCB0ZXN0IGNoYW5nZQogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9JENoYW5nZUlEIik7CgogICAgICAgICMgY2xpY2sgb24gJ0NvbmRpdGlvbnMnIGFuZCBzd2l0Y2ggc2NyZWVucwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01DaGFuZ2VDb25kaXRpb247Q2hhbmdlSUQ9JENoYW5nZUlEJyApXSIpCiAgICAgICAgICAgIC0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgbXkgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiLkNhbmNlbENsb3NlUG9wdXAiKS5sZW5ndGgnICk7CgogICAgICAgICMgY2xpY2sgJ0FkZCBuZXcgY29uZGl0aW9uJwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQG5hbWU9J0FkZENvbmRpdGlvbiddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNvbmRpdGlvbgogICAgICAgIG15ICRDb25kaXRpb25OYW1lUmFuZG9tID0gIkNvbmRpdGlvbiAiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgICAgJ2NzcycgKS0+c2VuZF9rZXlzKCRDb25kaXRpb25OYW1lUmFuZG9tKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDb21tZW50IiwgJ2NzcycgKS0+c2VuZF9rZXlzKCJTZWxlbml1bUNvbmRpdGlvbiIpOwoKICAgICAgICAjIGdldCBjb25kaXRpb24gb2JqZWN0CiAgICAgICAgbXkgJENvbmRpdGlvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ29uZGl0aW9uJyk7CgogICAgICAgICMgZ2V0IG5lZWRlZCBJRHMKICAgICAgICBteSAkRXhwcmVzaW9uQXR0cmlidXRlSUQgPSAkQ29uZGl0aW9uT2JqZWN0LT5BdHRyaWJ1dGVMb29rdXAoCiAgICAgICAgICAgIE5hbWUgPT4gJ1ByaW9yaXR5SUQnLAogICAgICAgICk7CiAgICAgICAgbXkgJFByaW9yaXR5RGF0YVJlZiA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OlByaW9yaXR5JywKICAgICAgICAgICAgTmFtZSAgPT4gJzIgbG93JywKICAgICAgICApOwogICAgICAgIG15ICRBY3Rpb25BdHRyaWJ1dGVJRCA9ICRDb25kaXRpb25PYmplY3QtPkF0dHJpYnV0ZUxvb2t1cCgKICAgICAgICAgICAgTmFtZSA9PiAnQ2hhbmdlU3RhdGVJRCcKICAgICAgICApOwogICAgICAgIG15ICRBY3Rpb25PcGVyYXRvcklEID0gJENvbmRpdGlvbk9iamVjdC0+T3BlcmF0b3JMb29rdXAoCiAgICAgICAgICAgIE5hbWUgPT4gJ3NldCcsCiAgICAgICAgKTsKICAgICAgICBteSAkQ29uZGl0aW9uQ2hhbmdlU3RhdGVEYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdhcHByb3ZlZCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgbmV3IGV4cHJlc3Npb24KICAgICAgICAjIGluIGNoYW5nZSBvYmplY3QgZm9yIHRlc3QgY2hhbmdlLCBsb29rIGZvciBwcmlvcml0eSB2YWx1ZSBvZiAnMiBsb3cnCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAbmFtZT0nQWRkRXhwcmVzc2lvbkJ1dHRvbiddW1xAdHlwZT0nc3VibWl0J10iKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNFeHByZXNzaW9uSUQtTkVXLU9iamVjdElEIG9wdGlvblt2YWx1ZT0nMSddIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyB3YWl0IGZvciBhamF4IHJlc3BvbnNlIHRvIGZpbGwgbmV4dCBkcm9wZG93biBsaXN0IHdpdGggbW9yZSB0aGFuIDEgdmFsdWUKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI0V4cHJlc3Npb25JRC1ORVctU2VsZWN0b3Igb3B0aW9uJykubGVuZ3RoID4gMTsiICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRXhwcmVzc2lvbklELU5FVy1TZWxlY3RvciBvcHRpb25bdmFsdWU9JyRDaGFuZ2VJRCddIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyB3YWl0IGZvciBhamF4IHJlc3BvbnNlIHRvIGZpbGwgbmV4dCBkcm9wZG93biBsaXN0IHdpdGggbW9yZSB0aGFuIDEgdmFsdWUKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI0V4cHJlc3Npb25JRC1ORVctQXR0cmlidXRlSUQgb3B0aW9uJykubGVuZ3RoID4gMTsiICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRXhwcmVzc2lvbklELU5FVy1BdHRyaWJ1dGVJRCBvcHRpb25bdmFsdWU9JyRFeHByZXNpb25BdHRyaWJ1dGVJRCddIiwgJ2NzcycgKQogICAgICAgICAgICAtPmNsaWNrKCk7CgogICAgICAgICMgd2FpdCBmb3IgYWpheCByZXNwb25zZSB0byBmaWxsIG5leHQgZHJvcGRvd24gbGlzdCB3aXRoIG1vcmUgdGhhbiAxIHZhbHVlCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJyNFeHByZXNzaW9uSUQtTkVXLU9wZXJhdG9ySUQgb3B0aW9uJykubGVuZ3RoID4gMTsiICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjRXhwcmVzc2lvbklELU5FVy1PcGVyYXRvcklEIG9wdGlvblt2YWx1ZT0nMSddIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyB3YWl0IGZvciBhamF4IHJlc3BvbnNlIHRvIGZpbGwgbmV4dCBkcm9wZG93biBsaXN0IHdpdGggbW9yZSB0aGFuIDEgdmFsdWUKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI0V4cHJlc3Npb25JRC1ORVctQ29tcGFyZVZhbHVlIG9wdGlvbicpLmxlbmd0aCA+IDE7IiApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0V4cHJlc3Npb25JRC1ORVctQ29tcGFyZVZhbHVlIG9wdGlvblt2YWx1ZT0nJFByaW9yaXR5RGF0YVJlZi0+e0l0ZW1JRH0nXSIsICdjc3MnICkKICAgICAgICAgICAgLT5jbGljaygpOwoKICAgICAgICAjIGFkZCBuZXcgYWN0aW9uIGluIGNoYW5nZSBvYmplY3QgZm9yIHRlc3QgY2hhbmdlLCBzZXQgY2hhbmdlIHN0YXRlIG9uICdBcHByb3ZlZCcKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEBuYW1lPSdBZGRBY3Rpb25CdXR0b24nXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNBY3Rpb25JRC1ORVctT2JqZWN0SUQgb3B0aW9uW3ZhbHVlPScxJ10iLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAjIHdhaXQgZm9yIGFqYXggcmVzcG9uc2UgdG8gZmlsbCBuZXh0IGRyb3Bkb3duIGxpc3Qgd2l0aCBtb3JlIHRoYW4gMSB2YWx1ZQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcjQWN0aW9uSUQtTkVXLVNlbGVjdG9yIG9wdGlvbicpLmxlbmd0aCA+IDE7IiApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0FjdGlvbklELU5FVy1TZWxlY3RvciBvcHRpb25bdmFsdWU9JyRDaGFuZ2VJRCddIiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgIyB3YWl0IGZvciBhamF4IHJlc3BvbnNlIHRvIGZpbGwgbmV4dCBkcm9wZG93biBsaXN0IHdpdGggbW9yZSB0aGFuIDEgdmFsdWUKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI0FjdGlvbklELU5FVy1BdHRyaWJ1dGVJRCBvcHRpb24nKS5sZW5ndGggPiAxOyIgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNBY3Rpb25JRC1ORVctQXR0cmlidXRlSUQgb3B0aW9uW3ZhbHVlPSckQWN0aW9uQXR0cmlidXRlSUQnXSIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICMgd2FpdCBmb3IgYWpheCByZXNwb25zZSB0byBmaWxsIG5leHQgZHJvcGRvd24gbGlzdCB3aXRoIG1vcmUgdGhhbiAxIHZhbHVlCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJyNBY3Rpb25JRC1ORVctT3BlcmF0b3JJRCBvcHRpb24nKS5sZW5ndGggPiAxOyIgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNBY3Rpb25JRC1ORVctT3BlcmF0b3JJRCBvcHRpb25bdmFsdWU9JyRBY3Rpb25PcGVyYXRvcklEJ10iLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAjIHdhaXQgZm9yIGFqYXggcmVzcG9uc2UgdG8gZmlsbCBuZXh0IGRyb3Bkb3duIGxpc3Qgd2l0aCBtb3JlIHRoYW4gMSB2YWx1ZQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcjQWN0aW9uSUQtTkVXLUFjdGlvblZhbHVlIG9wdGlvbicpLmxlbmd0aCA+IDE7IiApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAiI0FjdGlvbklELU5FVy1BY3Rpb25WYWx1ZSBvcHRpb25bdmFsdWU9JyRDb25kaXRpb25DaGFuZ2VTdGF0ZURhdGFSZWYtPntJdGVtSUR9J10iLAogICAgICAgICAgICAnY3NzJwogICAgICAgICktPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1NhdmVCdXR0b24iLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgdmVyaWZ5IGNyZWF0ZWQgY29uZGl0aW9uIG5hbWUgdmFsdWUKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRDb25kaXRpb25OYW1lUmFuZG9tICkgPiAtMSwKICAgICAgICAgICAgIiRDb25kaXRpb25OYW1lUmFuZG9tIGlzIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgY2hhbmdlCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gJ0lUU01DaGFuZ2UqJyApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IHdvcmsgb3JkZXIgZW1wdHkgYWdlbnQgZGVmYXVsdCBjb25maWcKICAgICAgICBteSAlV29ya09yZGVyRW1wdHlBZ2VudCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKS0+Q29uZmlnSXRlbUdldCgKICAgICAgICAgICAgTmFtZSAgICA9PiAnSVRTTVdvcmtPcmRlcjo6VGFrZVBlcm1pc3Npb24jIyMxMC1FbXB0eUFnZW50JywKICAgICAgICAgICAgRGVmYXVsdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgc2V0IHdvcmsgb3JkZXIgZW1wdHkgYWdlbnQgdG8gdmFsaWQKICAgICAgICBteSAlV29ya09yZGVyRW1wdHlBZ2VudFVwZGF0ZSA9IG1hcCB7ICRfLT57S2V5fSA9PiAkXy0+e0NvbnRlbnR9IH0KICAgICAgICAgICAgZ3JlcCB7IGRlZmluZWQgJF8tPntLZXl9IH0gQHsgJFdvcmtPcmRlckVtcHR5QWdlbnR7U2V0dGluZ30tPlsxXS0+e0hhc2h9LT5bMV0tPntJdGVtfSB9OwoKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBLZXkgICA9PiAnSVRTTVdvcmtPcmRlcjo6VGFrZVBlcm1pc3Npb24jIyMxMC1FbXB0eUFnZW50JywKICAgICAgICAgICAgVmFsdWUgPT4gXCVXb3JrT3JkZXJFbXB0eUFnZW50VXBkYXRlLAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHdvcmsgb3JkZXIgbGlzdCBhZ2VudCBkZWZhdWx0IHN5c2NvbmZpZwogICAgICAgIG15ICVXb3JrT3JkZXJMaXN0QWdlbnQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyktPkNvbmZpZ0l0ZW1HZXQoCiAgICAgICAgICAgIE5hbWUgICAgPT4gJ0lUU01Xb3JrT3JkZXI6OlRha2VQZXJtaXNzaW9uIyMjMjAtTGlzdEFnZW50JywKICAgICAgICAgICAgRGVmYXVsdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgc2V0IHdvcmsgb3JkZXIgbGlzdCBhZ2VudCB0byB2YWxpZAogICAgICAgIG15ICVXb3JrT3JkZXJMaXN0QWdlbnRVcGRhdGUgPSBtYXAgeyAkXy0+e0tleX0gPT4gJF8tPntDb250ZW50fSB9CiAgICAgICAgICAgIGdyZXAgeyBkZWZpbmVkICRfLT57S2V5fSB9IEB7ICRXb3JrT3JkZXJMaXN0QWdlbnR7U2V0dGluZ30tPlsxXS0+e0hhc2h9LT5bMV0tPntJdGVtfSB9OwoKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBLZXkgICA9PiAnSVRTTVdvcmtPcmRlcjo6VGFrZVBlcm1pc3Npb24jIyMyMC1MaXN0QWdlbnQnLAogICAgICAgICAgICBWYWx1ZSA9PiBcJVdvcmtPcmRlckxpc3RBZ2VudFVwZGF0ZSwKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBjaGFuZ2Ugc3RhdGUgZGF0YQogICAgICAgIG15ICRDaGFuZ2VTdGF0ZURhdGFSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICAgICBOYW1lICA9PiAncmVxdWVzdGVkJywKICAgICAgICApOwoKICAgICAgICAjIGdldCBjaGFuZ2Ugb2JqZWN0CiAgICAgICAgbXkgJENoYW5nZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgY2hhbmdlCiAgICAgICAgbXkgJENoYW5nZVRpdGxlUmFuZG9tID0gJ0lUU01DaGFuZ2UgUmVxdWVzdGVkICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDaGFuZ2VJRCAgICAgICAgICA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICAgICAgQ2hhbmdlVGl0bGUgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ1NlbGVuaXVtIFRlc3QgRGVzY3JpcHRpb24nLAogICAgICAgICAgICBKdXN0aWZpY2F0aW9uID0+ICdTZWxlbml1biBUZXN0IEp1c3RpZmljYXRpb24nLAogICAgICAgICAgICBDaGFuZ2VTdGF0ZUlEID0+ICRDaGFuZ2VTdGF0ZURhdGFSZWYtPntJdGVtSUR9LAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHdvcmsgb3JkZXIgb2JqZWN0CiAgICAgICAgbXkgJFdvcmtPcmRlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3Qgd29yayBvcmRlcgogICAgICAgIG15ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSA9ICdTZWxlbml1bSBXb3JrIE9yZGVyICcgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRXb3JrT3JkZXJJRCAgICAgICAgICA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckFkZCgKICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSA9PiAkV29ya09yZGVyVGl0bGVSYW5kb20sCiAgICAgICAgICAgIEluc3RydWN0aW9uICAgID0+ICdTZWxlbml1bSBUZXN0IFdvcmsgT3JkZXInLAogICAgICAgICAgICBQbGFubmVkRWZmb3J0ICA9PiAxMCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkV29ya09yZGVyVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgYW5kIGxvZyBpbiB0ZXN0IHVzZXIKICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWyAnYWRtaW4nLCAnaXRzbS1jaGFuZ2UnLCAnaXRzbS1jaGFuZ2UtYnVpbGRlcicsICdpdHNtLWNoYW5nZS1tYW5hZ2VyJyBdCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgbmF2aWdhdGUgdG8gQWdlbnRJVFNNV29ya09yZGVyWm9vbSBmb3IgdGVzdCBjcmVhdGVkIHdvcmsgb3JkZXIKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJab29tO1dvcmtPcmRlcklEPSRXb3JrT3JkZXJJRCIpOwoKICAgICAgICAjIGNsaWNrIG9uICdUYWtlIFdvcmtvcmRlcicKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRJVFNNV29ya09yZGVyVGFrZTtXb3JrT3JkZXJJRD0kV29ya09yZGVySUQnKV0iKQogICAgICAgICAgICAtPmNsaWNrKCk7CgogICAgICAgICMgd2FpdCBmb3IgY29uZmlybSBidXR0b24gdG8gc2hvdyB1cCBhbmQgY29uZmlybSBkZWxldGUgYWN0aW9uCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJyNEaWFsb2dCdXR0b24xJykubGVuZ3RoOyIgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNEaWFsb2dCdXR0b24xIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNsaWNrIG9uICdIaXN0b3J5JyBhbmQgc3dpdGNoIHdpbmRvdwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJIaXN0b3J5O1dvcmtPcmRlcklEPSRXb3JrT3JkZXJJRCcgKV0iKQogICAgICAgICAgICAtPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyB3YWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIi5DYW5jZWxDbG9zZVBvcHVwIikubGVuZ3RoJyApOwoKICAgICAgICAjIGNoZWNrIGZvciB0YWtlIHdvcmsgb3JkZXIgaGlzdG9yeSBtZXNzYWdlCiAgICAgICAgbXkgJEV4cGVjdGVkVGFrZVdvcmtPcmRlck1lc3NhZ2UgPSAiV29ya29yZGVyIEFnZW50OiBOZXc6ICRUZXN0VXNlckxvZ2luIjsKCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkRXhwZWN0ZWRUYWtlV29ya09yZGVyTWVzc2FnZSApID4gLTEsCiAgICAgICAgICAgICIkRXhwZWN0ZWRUYWtlV29ya09yZGVyTWVzc2FnZSBpcyBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIHdvcmsgb3JkZXIKICAgICAgICBteSAkU3VjY2VzcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckRlbGV0ZSgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJFdvcmtPcmRlclRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCBjaGFuZ2UKICAgICAgICAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSBSZXF1ZXN0ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnU2VsZW5pdW0gVGVzdCBEZXNjcmlwdGlvbicsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ1NlbGVuaXVtIFRlc3QgSnVzdGlmaWNhdGlvbicsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgd29yayBvcmRlciBvYmplY3QKICAgICAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB3b3JrIG9yZGVyCiAgICAgICAgbXkgJFdvcmtPcmRlclRpdGxlUmFuZG9tID0gJ1NlbGVuaXVtIFdvcmsgT3JkZXIgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFdvcmtPcmRlcklEICAgICAgICAgID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQWRkKAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJ1NlbGVuaXVtIFRlc3QgV29yayBPcmRlcicsCiAgICAgICAgICAgIFBsYW5uZWRFZmZvcnQgID0+IDEwLAogICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1idWlsZGVyJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0KICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01DaGFuZ2Vab29tIG9mIGNyZWF0ZWQgdGVzdCBjaGFuZ2UKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2Vab29tO0NoYW5nZUlEPSRDaGFuZ2VJRCIpOwoKICAgICAgICAjIGNyZWF0ZSBtZW51IG1vZHVsZSB0ZXN0IHBhcmFtcwogICAgICAgIG15IEBNZW51TW9kdWxlID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgPT4gIkJhY2siLAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICJBZ2VudElUU01DaGFuZ2UiLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgPT4gIkhpc3RvcnkiLAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICJBZ2VudElUU01DaGFuZ2VIaXN0b3J5IiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgID0+ICJQcmludCIsCiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gIkFnZW50SVRTTUNoYW5nZVByaW50IiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgID0+ICJFZGl0IiwKICAgICAgICAgICAgICAgIEFjdGlvbiA9PiAiQWdlbnRJVFNNQ2hhbmdlRWRpdCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAiSW52b2x2ZWQgUGVyc29ucyIsCiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gIkFnZW50SVRTTUNoYW5nZUludm9sdmVkUGVyc29ucyIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAiQWRkIFdvcmtvcmRlciIsCiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gIkFnZW50SVRTTVdvcmtPcmRlckFkZCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAiQWRkIFdvcmtvcmRlciAoZnJvbSB0ZW1wbGF0ZSkiLAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICJBZ2VudElUU01Xb3JrT3JkZXJBZGRGcm9tVGVtcGxhdGUiLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgPT4gIkNvbmRpdGlvbiIsCiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gIkFnZW50SVRTTUNoYW5nZUNvbmRpdGlvbiIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAiTGluayIsCiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gIkFnZW50TGlua09iamVjdCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAiTW92ZSBUaW1lIFNsb3QiLAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICJBZ2VudElUU01DaGFuZ2VUaW1lU2xvdCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAiVGVtcGxhdGUiLAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICJBZ2VudElUU01DaGFuZ2VUZW1wbGF0ZSIsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBjaGFuZ2UgbWVudSBtb2R1bGVzCiAgICAgICAgZm9yIG15ICRDaGFuZ2Vab29tTWVudU1vZHVsZSAoQE1lbnVNb2R1bGUpIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249JENoYW5nZVpvb21NZW51TW9kdWxlLT57QWN0aW9ufScgKV0iKSwKICAgICAgICAgICAgICAgICJDaGFuZ2UgbWVudSAkQ2hhbmdlWm9vbU1lbnVNb2R1bGUtPntOYW1lfSBpcyBmb3VuZCIKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCB3b3JrIG9yZGVyCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJEZWxldGUoCiAgICAgICAgICAgIFdvcmtPcmRlcklEID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgY2hhbmdlCiAgICAgICAgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gJ0lUU01DaGFuZ2UqJyApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSBSZXF1ZXN0ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnU2VsZW5pdW0gVGVzdCBEZXNjcmlwdGlvbicsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ1NlbGVuaXVtIFRlc3QgSnVzdGlmaWNhdGlvbicsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgd29yayBvcmRlciBvYmplY3QKICAgICAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB3b3JrIG9yZGVyCiAgICAgICAgbXkgJFdvcmtPcmRlclRpdGxlUmFuZG9tID0gJ1NlbGVuaXVtIFdvcmsgT3JkZXIgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFdvcmtPcmRlcklEICAgICAgICAgID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQWRkKAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJ1NlbGVuaXVtIFRlc3QgV29yayBPcmRlcicsCiAgICAgICAgICAgIFBsYW5uZWRFZmZvcnQgID0+IDEwLAogICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1idWlsZGVyJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0KICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01Xb3JrT3JkZXJab29tIG9mIGNyZWF0ZWQgdGVzdCB3b3JrIG9yZGVyCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNV29ya09yZGVyWm9vbTtXb3JrT3JkZXJJRD0kV29ya09yZGVySUQiKTsKCiAgICAgICAgIyBjcmVhdGUgbWVudSBtb2R1bGUgdGVzdCBwYXJhbXMKICAgICAgICBteSBATWVudU1vZHVsZSA9ICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgID0+ICJCYWNrIiwKICAgICAgICAgICAgICAgIEFjdGlvbiA9PiAiQWdlbnRJVFNNQ2hhbmdlWm9vbSIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAiSGlzdG9yeSIsCiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gIkFnZW50SVRTTVdvcmtPcmRlckhpc3RvcnkiLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgPT4gIlByaW50IiwKICAgICAgICAgICAgICAgIEFjdGlvbiA9PiAiQWdlbnRJVFNNQ2hhbmdlUHJpbnQiLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgPT4gIkVkaXQiLAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICJBZ2VudElUU01Xb3JrT3JkZXJFZGl0IiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgID0+ICJXb3Jrb3JkZXIgQWdlbnQiLAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICJBZ2VudElUU01Xb3JrT3JkZXJBZ2VudCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAiUmVwb3J0IiwKICAgICAgICAgICAgICAgIEFjdGlvbiA9PiAiQWdlbnRJVFNNV29ya09yZGVyUmVwb3J0IiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgID0+ICJMaW5rIiwKICAgICAgICAgICAgICAgIEFjdGlvbiA9PiAiQWdlbnRMaW5rT2JqZWN0IiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgID0+ICJUZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICBBY3Rpb24gPT4gIkFnZW50SVRTTVdvcmtPcmRlclRlbXBsYXRlIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgID0+ICJEZWxldGUiLAogICAgICAgICAgICAgICAgQWN0aW9uID0+ICJBZ2VudElUU01Xb3JrT3JkZXJEZWxldGUiLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgd29yayBvcmRlciBtZW51IG1vZHVsZXMKICAgICAgICBmb3IgbXkgJFdvcmtPcmRlclpvb21NZW51TW9kdWxlIChATWVudU1vZHVsZSkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj0kV29ya09yZGVyWm9vbU1lbnVNb2R1bGUtPntBY3Rpb259JyApXSIpLAogICAgICAgICAgICAgICAgIkNoYW5nZSBtZW51ICRXb3JrT3JkZXJab29tTWVudU1vZHVsZS0+e05hbWV9IGlzIGZvdW5kIgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIHdvcmsgb3JkZXIKICAgICAgICBteSAkU3VjY2VzcyA9ICRXb3JrT3JkZXJPYmplY3QtPldvcmtPcmRlckRlbGV0ZSgKICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJFdvcmtPcmRlclRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCBjaGFuZ2UKICAgICAgICAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSBSZXF1ZXN0ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnU2VsZW5pdW0gVGVzdCBEZXNjcmlwdGlvbicsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ1NlbGVuaXVtIFRlc3QgSnVzdGlmaWNhdGlvbicsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdGlja2V0CiAgICAgICAgbXkgJFRpY2tldE51bWJlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZU51bWJlcigpOwogICAgICAgIG15ICRUaWNrZXRJRCAgICAgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgICAgIFROICAgICAgICAgICA9PiAkVGlja2V0TnVtYmVyLAogICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1NlbGVuaXVtIFRlc3QgVGlja2V0JywKICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ29wZW4nLAogICAgICAgICAgICBDdXN0b21lcklEICAgPT4gJ1Rlc3QgU2VsZW5pdW0gQ3VzdG9tZXInLAogICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJ1Rlc3QgU2VsZW5pdW0gQ3VzdG9tZXInLAogICAgICAgICAgICBPd25lcklEICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFRpY2tldElELAogICAgICAgICAgICAiVGlja2V0IElEICRUaWNrZXRJRCBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1idWlsZGVyJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0KICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHNjcmlwdCBhbGlhcwogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZ2VudElUU01DaGFuZ2Vab29tIG9mIGNyZWF0ZWQgdGVzdCBjaGFuZ2UKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2Vab29tO0NoYW5nZUlEPSRDaGFuZ2VJRCIpOwoKICAgICAgICAjIGNsaWNrIG9uICdMaW5rJyBhbmQgc3dpdGNoIHNjcmVlbnMKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRMaW5rT2JqZWN0O1NvdXJjZU9iamVjdD1JVFNNQ2hhbmdlJyApXSIpLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICBteSAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgd2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjU3VibWl0U2VsZWN0IikubGVuZ3RoJyApOwoKICAgICAgICAjIHNlbGVjdCB0ZXN0IGNyZWF0ZWQgdGlja2V0IHRvIGxpbmsgd2l0aCB0ZXN0IGNyZWF0ZWQgY2hhbmdlCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEBuYW1lPSdTRUFSQ0g6OlRpY2tldE51bWJlciddIiktPnNlbmRfa2V5cygkVGlja2V0TnVtYmVyKTsKCiAgICAgICAgc2xlZXAoMik7CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTZWFyY2gnXVtcQHR5cGU9J3N1Ym1pdCddIiktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJ2lucHV0I0xpbmtUYXJnZXRLZXlzJykubGVuZ3RoIiApOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9pbnB1dFtcQGlkPSdMaW5rVGFyZ2V0S2V5cyddIiktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAaWQ9J0FkZExpbmtzJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTGlua0FkZENsb3NlTGluayIsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMSApOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlswXSApOwoKICAgICAgICBzbGVlcCgyKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoImJvZHkiKS5sZW5ndGgnICk7CgogICAgICAgICMgdmVyaWZ5IHRlc3QgY2hhbmdlIGlzIGxpbmtlZCB3aXRoIHRlc3QgdGlja2V0CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGlja2V0TnVtYmVyICkgPiAtMSwKICAgICAgICAgICAgIlRlc3QgdGlja2V0IG51bWJlciAkVGlja2V0TnVtYmVyIGlzIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGNsaWNrIG9uICdMaW5rJyBhbmQgc3dpdGNoIHNjcmVlbnMKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRMaW5rT2JqZWN0O1NvdXJjZU9iamVjdD1JVFNNQ2hhbmdlJyApXSIpLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgd2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjU3VibWl0U2VsZWN0IikubGVuZ3RoJyApOwoKICAgICAgICBzbGVlcCgyKTsKCiAgICAgICAgIyBkZWxldGUgbGluayByZWxhdGlvbgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ1N1YmFjdGlvbj1MaW5rRGVsZXRlJyApXSIpLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEBpZD0nTGlua0RlbGV0ZUlkZW50aWZpZXInXSIpLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudExpbmtPYmplY3Q7U3ViYWN0aW9uPUNsb3NlJyApXSIpLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDEgKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoImJvZHkiKS5sZW5ndGgnICk7CgogICAgICAgICMgdmVyaWZ5IHRoYXQgbGluayBoYXMgYmVlbiByZW1vdmVkCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkVGlja2V0TnVtYmVyICkgPT0gLTEsCiAgICAgICAgICAgICJUZXN0IHRpY2tldCBudW1iZXIgJFRpY2tldE51bWJlciBpcyBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIGNoYW5nZQogICAgICAgIG15ICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIHRpY2tldAogICAgICAgICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJUaWNrZXQgSUQgJFRpY2tldElEIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBzdGF0ZSBkYXRhCiAgICAgICAgbXkgJENoYW5nZVN0YXRlRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6Q2hhbmdlOjpTdGF0ZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdyZXF1ZXN0ZWQnLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNoYW5nZSBvYmplY3QKICAgICAgICBteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCBjaGFuZ2UKICAgICAgICBteSAkQ2hhbmdlVGl0bGVSYW5kb20gPSAnSVRTTUNoYW5nZSBSZXF1ZXN0ZWQgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENoYW5nZUlEICAgICAgICAgID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlQWRkKAogICAgICAgICAgICBDaGFuZ2VUaXRsZSAgID0+ICRDaGFuZ2VUaXRsZVJhbmRvbSwKICAgICAgICAgICAgRGVzY3JpcHRpb24gICA9PiAnU2VsZW5pdW0gVGVzdCBEZXNjcmlwdGlvbicsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gPT4gJ1NlbGVuaXVtIFRlc3QgSnVzdGlmaWNhdGlvbicsCiAgICAgICAgICAgIENoYW5nZVN0YXRlSUQgPT4gJENoYW5nZVN0YXRlRGF0YVJlZi0+e0l0ZW1JRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgd29yayBvcmRlciBvYmplY3QKICAgICAgICBteSAkV29ya09yZGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB3b3JrIG9yZGVyCiAgICAgICAgbXkgJFdvcmtPcmRlclRpdGxlUmFuZG9tID0gJ1NlbGVuaXVtIFdvcmsgT3JkZXIgJyAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJFdvcmtPcmRlcklEICAgICAgICAgID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyQWRkKAogICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFdvcmtPcmRlclRpdGxlID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgPT4gJ1NlbGVuaXVtIFRlc3QgV29yayBPcmRlcicsCiAgICAgICAgICAgIFBsYW5uZWRFZmZvcnQgID0+IDEwLAogICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aWNrZXQgb2JqZWN0CiAgICAgICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAgICAgIyBjcmVhdGUgdGVzdCB0aWNrZXQKICAgICAgICBteSAkVGlja2V0TnVtYmVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlTnVtYmVyKCk7CiAgICAgICAgbXkgJFRpY2tldElEICAgICA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgICAgICAgICAgVE4gICAgICAgICAgID0+ICRUaWNrZXROdW1iZXIsCiAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnU2VsZW5pdW0gVGVzdCBUaWNrZXQnLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnb3BlbicsCiAgICAgICAgICAgIEN1c3RvbWVySUQgICA9PiAnVGVzdCBTZWxlbml1bSBDdXN0b21lcicsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAnVGVzdCBTZWxlbml1bSBDdXN0b21lcicsCiAgICAgICAgICAgIE93bmVySUQgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgICAgICJUaWNrZXQgSUQgJFRpY2tldElEIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJywgJ2l0c20tY2hhbmdlJywgJ2l0c20tY2hhbmdlLWJ1aWxkZXInLCAnaXRzbS1jaGFuZ2UtbWFuYWdlcicgXQogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFnZW50SVRTTVdvcmtPcmRlclpvb20gb2YgY3JlYXRlZCB0ZXN0IHdvcmsgb3JkZXIKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJab29tO1dvcmtPcmRlcklEPSRXb3JrT3JkZXJJRCIpOwoKICAgICAgICAjIGNsaWNrIG9uICdMaW5rJyBhbmQgc3dpdGNoIHNjcmVlbnMKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRMaW5rT2JqZWN0O1NvdXJjZU9iamVjdD1JVFNNV29ya09yZGVyJyApXSIpCiAgICAgICAgICAgIC0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAyICk7CiAgICAgICAgbXkgJEhhbmRsZXMgPSAkU2VsZW5pdW0tPmdldF93aW5kb3dfaGFuZGxlcygpOwogICAgICAgICRTZWxlbml1bS0+c3dpdGNoX3RvX3dpbmRvdyggJEhhbmRsZXMtPlsxXSApOwoKICAgICAgICAjIHdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI1N1Ym1pdFNlbGVjdCIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyBzZWxlY3QgdGVzdCBjcmVhdGVkIHRpY2tldCB0byBsaW5rIHdpdGggdGVzdCBjcmVhdGVkIHdvcmsgb3JkZXIKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNUYXJnZXRJZGVudGlmaWVyJykudmFsKCdUaWNrZXQnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwoKICAgICAgICBzbGVlcCgyKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEBuYW1lPSdTRUFSQ0g6OlRpY2tldE51bWJlciddIiktPnNlbmRfa2V5cygkVGlja2V0TnVtYmVyKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU2VhcmNoJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCdpbnB1dCNMaW5rVGFyZ2V0S2V5cycpLmxlbmd0aCIgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vaW5wdXRbXEBpZD0nTGlua1RhcmdldEtleXMnXSIpLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQGlkPSdBZGRMaW5rcyddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0xpbmtBZGRDbG9zZUxpbmsiLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDEgKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKCiAgICAgICAgc2xlZXAoMSk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCJib2R5IikubGVuZ3RoJyApOwoKICAgICAgICAjIHZlcmlmeSB0ZXN0IHdvcmsgb3JkZXIgaXMgbGlua2VkIHdpdGggdGVzdCB0aWNrZXQKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRUaWNrZXROdW1iZXIgKSA+IC0xLAogICAgICAgICAgICAiVGVzdCB0aWNrZXQgbnVtYmVyICRUaWNrZXROdW1iZXIgaXMgZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgY2xpY2sgb24gJ0xpbmsnIGFuZCBzd2l0Y2ggc2NyZWVucwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudExpbmtPYmplY3Q7U291cmNlT2JqZWN0PUlUU01Xb3JrT3JkZXInICldIikKICAgICAgICAgICAgLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgd2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeQogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjU3VibWl0U2VsZWN0IikubGVuZ3RoJyApOwoKICAgICAgICAjIGRlbGV0ZSBsaW5rIHJlbGF0aW9uCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnU3ViYWN0aW9uPUxpbmtEZWxldGUnICldIiktPlZlcmlmaWVkQ2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9pbnB1dFtcQGlkPSdMaW5rRGVsZXRlSWRlbnRpZmllciddIiktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWdlbnRMaW5rT2JqZWN0O1N1YmFjdGlvbj1DbG9zZScgKV0iKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAxICk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzBdICk7CgogICAgICAgIHNsZWVwKDEpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiYm9keSIpLmxlbmd0aCcgKTsKCiAgICAgICAgIyB2ZXJpZnkgdGhhdCBsaW5rIGhhcyBiZWVuIHJlbW92ZWQKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRUaWNrZXROdW1iZXIgKSA9PSAtMSwKICAgICAgICAgICAgIlRlc3QgdGlja2V0IG51bWJlciAkVGlja2V0TnVtYmVyIGlzIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgd29yayBvcmRlcgogICAgICAgIG15ICRTdWNjZXNzID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyRGVsZXRlKAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkV29ya09yZGVyVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIGNoYW5nZQogICAgICAgICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIHRpY2tldAogICAgICAgICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJUaWNrZXQgSUQgJFRpY2tldElEIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1idWlsZGVyJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0KICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgIyBnZXQgdGVzdCB1c2VyIElECiAgICAgICAgbXkgJFRlc3RVc2VySUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTG9va3VwKAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIHN0YXRlIGRhdGEKICAgICAgICBteSAkQ2hhbmdlU3RhdGVEYXRhUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ3JlcXVlc3RlZCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNoYW5nZQogICAgICAgIG15ICRDaGFuZ2VUaXRsZVJhbmRvbSA9ICdJVFNNQ2hhbmdlIFJlcXVlc3RlZCAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkQ2hhbmdlSUQgICAgICAgICAgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgICAgIENoYW5nZVRpdGxlICAgICA9PiAkQ2hhbmdlVGl0bGVSYW5kb20sCiAgICAgICAgICAgIERlc2NyaXB0aW9uICAgICA9PiAnU2VsZW5pdW0gVGVzdCBEZXNjcmlwdGlvbicsCiAgICAgICAgICAgIEp1c3RpZmljYXRpb24gICA9PiAnU2VsZW5pdW0gVGVzdCBKdXN0aWZpY2F0aW9uJywKICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRCAgID0+ICRDaGFuZ2VTdGF0ZURhdGFSZWYtPntJdGVtSUR9LAogICAgICAgICAgICBDaGFuZ2VNYW5hZ2VySUQgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGxvZyBpbiB0ZXN0IHVzZXIKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyB2ZXJpZnkgdGhhdCB0b29sIGJhciBDaGFuZ2VNYW5hZ2VyIGlzIGVuYWJsZWQgYW5kIGRpc3BsYXllZAogICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTUNoYW5nZU1hbmFnZXInKV0iKTsKICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIGNoYW5nZQogICAgICAgIG15ICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICdJVFNNQ2hhbmdlKicgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1idWlsZGVyJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0KICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgIyBnZXQgdGVzdCB1c2VyIElECiAgICAgICAgbXkgJFRlc3RVc2VySUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTG9va3VwKAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIHN0YXRlIGRhdGEKICAgICAgICBteSAkQ2hhbmdlU3RhdGVEYXRhUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ3JlcXVlc3RlZCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNoYW5nZQogICAgICAgIG15ICRDaGFuZ2VUaXRsZVJhbmRvbSA9ICdJVFNNQ2hhbmdlIFJlcXVlc3RlZCAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkQ2hhbmdlSUQgICAgICAgICAgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJENoYW5nZVRpdGxlUmFuZG9tLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICdTZWxlbml1bSBUZXN0IERlc2NyaXB0aW9uJywKICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAnU2VsZW5pdW0gVGVzdCBKdXN0aWZpY2F0aW9uJywKICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRCA9PiAkQ2hhbmdlU3RhdGVEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgQ0FCQWdlbnRzICAgICA9PiBbJFRlc3RVc2VySURdLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJENoYW5nZUlELAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGNyZWF0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbG9nIGluIHRlc3QgdXNlcgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIHZlcmlmeSB0aGF0IHRvb2wgYmFyIE15Q0FCIGlzIGVuYWJsZWQgYW5kIGRpc3BsYXllZAogICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTUNoYW5nZU15Q0FCJyldIik7CiAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAkRWxlbWVudC0+aXNfZGlzcGxheWVkKCk7CgogICAgICAgICMgZGVsZXRlIHRlc3QgY3JlYXRlZCBjaGFuZ2UKICAgICAgICBteSAkU3VjY2VzcyA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZURlbGV0ZSgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiJENoYW5nZVRpdGxlUmFuZG9tIGlzIGRlbGV0ZWQiLAogICAgICAgICk7CgogICAgICAgICMgbWFrZSBzdXJlIGNhY2hlIGlzIGNvcnJlY3QKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnSVRTTUNoYW5nZSonICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1idWlsZGVyJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0KICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgIyBnZXQgdGVzdCB1c2VyIElECiAgICAgICAgbXkgJFRlc3RVc2VySUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTG9va3VwKAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIHN0YXRlIGRhdGEKICAgICAgICBteSAkQ2hhbmdlU3RhdGVEYXRhUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ3JlcXVlc3RlZCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNoYW5nZQogICAgICAgIG15ICRDaGFuZ2VUaXRsZVJhbmRvbSA9ICdJVFNNQ2hhbmdlIFJlcXVlc3RlZCAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkQ2hhbmdlSUQgICAgICAgICAgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJENoYW5nZVRpdGxlUmFuZG9tLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICdTZWxlbml1bSBUZXN0IERlc2NyaXB0aW9uJywKICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAnU2VsZW5pdW0gVGVzdCBKdXN0aWZpY2F0aW9uJywKICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRCA9PiAkQ2hhbmdlU3RhdGVEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVGVzdFVzZXJJRCwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgY3JlYXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBsb2cgaW4gdGVzdCB1c2VyCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgdmVyaWZ5IHRoYXQgdG9vbCBiYXIgTXlDaGFuZ2VzIGlzIGVuYWJsZWQgYW5kIGRpc3BsYXllZAogICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50SVRTTUNoYW5nZU15Q2hhbmdlcycpXSIpOwogICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgY2hhbmdlCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VEZWxldGUoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBkZWxldGVkIiwKICAgICAgICApOwoKICAgICAgICAjIG1ha2Ugc3VyZSBjYWNoZSBpcyBjb3JyZWN0CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gJ0lUU01DaGFuZ2UqJyApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7Cgp1c2UgdmFycyAocXcoJFNlbGYpKTsKCiMgZ2V0IHNlbGVuaXVtIG9iamVjdApteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICAjIGdldCBoZWxwZXIgb2JqZWN0CiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgY3JlYXRlIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICdpdHNtLWNoYW5nZScsICdpdHNtLWNoYW5nZS1idWlsZGVyJywgJ2l0c20tY2hhbmdlLW1hbmFnZXInIF0KICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgIyBnZXQgdGVzdCB1c2VyIElECiAgICAgICAgbXkgJFRlc3RVc2VySUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTG9va3VwKAogICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIHN0YXRlIGRhdGEKICAgICAgICBteSAkQ2hhbmdlU3RhdGVEYXRhUmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICAgICAgICAgTmFtZSAgPT4gJ3JlcXVlc3RlZCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2hhbmdlIG9iamVjdAogICAgICAgIG15ICRDaGFuZ2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IGNoYW5nZQogICAgICAgIG15ICRDaGFuZ2VUaXRsZVJhbmRvbSA9ICdJVFNNQ2hhbmdlIFJlcXVlc3RlZCAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkQ2hhbmdlSUQgICAgICAgICAgPSAkQ2hhbmdlT2JqZWN0LT5DaGFuZ2VBZGQoCiAgICAgICAgICAgIENoYW5nZVRpdGxlICAgPT4gJENoYW5nZVRpdGxlUmFuZG9tLAogICAgICAgICAgICBEZXNjcmlwdGlvbiAgID0+ICdTZWxlbml1bSBUZXN0IERlc2NyaXB0aW9uJywKICAgICAgICAgICAgSnVzdGlmaWNhdGlvbiA9PiAnU2VsZW5pdW0gVGVzdCBKdXN0aWZpY2F0aW9uJywKICAgICAgICAgICAgQ2hhbmdlU3RhdGVJRCA9PiAkQ2hhbmdlU3RhdGVEYXRhUmVmLT57SXRlbUlEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRDaGFuZ2VUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCB3b3JrIG9yZGVyIG9iamVjdAogICAgICAgIG15ICRXb3JrT3JkZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVdvcmtPcmRlcicpOwoKICAgICAgICAjIGNyZWF0ZSB0ZXN0IHdvcmsgb3JkZXIKICAgICAgICBteSAkV29ya09yZGVyVGl0bGVSYW5kb20gPSAnU2VsZW5pdW0gV29yayBPcmRlciAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkV29ya09yZGVySUQgICAgICAgICAgPSAkV29ya09yZGVyT2JqZWN0LT5Xb3JrT3JkZXJBZGQoCiAgICAgICAgICAgIENoYW5nZUlEICAgICAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICBXb3JrT3JkZXJUaXRsZSAgID0+ICRXb3JrT3JkZXJUaXRsZVJhbmRvbSwKICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgICA9PiAnU2VsZW5pdW0gVGVzdCBXb3JrIE9yZGVyJywKICAgICAgICAgICAgUGxhbm5lZEVmZm9ydCAgICA9PiAxMCwKICAgICAgICAgICAgV29ya09yZGVyQWdlbnRJRCA9PiAkVGVzdFVzZXJJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRDaGFuZ2VJRCwKICAgICAgICAgICAgIiRXb3JrT3JkZXJUaXRsZVJhbmRvbSBpcyBjcmVhdGVkIiwKICAgICAgICApOwoKICAgICAgICAjIGxvZyBpbiB0ZXN0IHVzZXIKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyB2ZXJpZnkgdGhhdCB0b29sIGJhciBNeVdvcmtPcmRlciBpcyBlbmFibGVkIGFuZCBkaXNwbGF5ZWQKICAgICAgICBteSAkRWxlbWVudCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudElUU01DaGFuZ2VNeVdvcmtPcmRlcicpXSIpOwogICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwoKICAgICAgICAjIGRlbGV0ZSB0ZXN0IGNyZWF0ZWQgd29yayBvcmRlcgogICAgICAgIG15ICRTdWNjZXNzID0gJFdvcmtPcmRlck9iamVjdC0+V29ya09yZGVyRGVsZXRlKAogICAgICAgICAgICBXb3JrT3JkZXJJRCA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkV29ya09yZGVyVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBkZWxldGUgdGVzdCBjcmVhdGVkIGNoYW5nZQogICAgICAgICRTdWNjZXNzID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlRGVsZXRlKAogICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIkQ2hhbmdlVGl0bGVSYW5kb20gaXMgZGVsZXRlZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBtYWtlIHN1cmUgY2FjaGUgaXMgY29ycmVjdAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKCBUeXBlID0+ICdJVFNNQ2hhbmdlKicgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKbXkgJENvbW1hbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q29uc29sZTo6Q29tbWFuZDo6QWRtaW46OklUU006OkNoYW5nZTo6RGVsZXRlJyk7CgojIGNoZWNrIGNvbW1hbmQgd2l0aG91dCBvcHRpb24KbXkgJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoKTsKCiRTZWxmLT5JcygKICAgICRFeGl0Q29kZSwKICAgIDEsCiAgICAiQWRtaW46OklUU006OkNoYW5nZTo6Q2hlY2sgLSBObyBvcHRpb25zIiwKKTsKCiNjaGVjayBjb21tYW5kIHdpdGggb3B0aW9uIC0tYWxsIGFuZCBhcmd1bWVudCAtLWFjY2VwdCBuICggY2FuY2VsIGNvbW1hbmQgKQokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSggJy0tYWxsJywgJ24nICk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIk9wdGlvbiAnLS1hbGwnIG4iLAopOwoKIyBnZXQgY2hhbmdlIG9iamVjdApteSAkQ2hhbmdlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKTsKbXkgQENoYW5nZU51bWJlcnM7CgojIGFkZCB0ZXN0IGNoYW5nZXMKZm9yICggMSAuLiAzICkgewoKICAgIG15ICRDaGFuZ2VJRCA9ICRDaGFuZ2VPYmplY3QtPkNoYW5nZUFkZCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAkQ2hhbmdlID0gJENoYW5nZU9iamVjdC0+Q2hhbmdlR2V0KAogICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkQ2hhbmdlSUQsCiAgICAgICAgIlRlc3QgY2hhbmdlIGlzIGNyZWF0ZWQgLSAkQ2hhbmdlLT57Q2hhbmdlTnVtYmVyfSIsCiAgICApOwoKICAgIHB1c2ggQENoYW5nZU51bWJlcnMsICRDaGFuZ2UtPntDaGFuZ2VOdW1iZXJ9Owp9CgojIGNoZWNrIGNvbW1hbmQgd2l0aCBvcHRpb24gLS1jaGFuZ2UtbnVtYmVyIHdpdGhvdXQgc3BlY2lmaWVkIGNoYW5nZSBudW1iZXIKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoJy0tY2hhbmdlLW51bWJlcicpOwoKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMSwKICAgICJPcHRpb24gJy0tY2hhbmdlLW51bWJlcicgd2l0aG91dCBzcGVjaWZpZWQgY2hhbmdlIG51bWJlci4iLAopOwoKIyBjaGVjayBjb21tYW5kIHdpdGggb3B0aW9uIC0tY2hhbmdlLW51bWJlciB3aXRoIHNwZWNpZmllZCBjaGFuZ2UgbnVtYmVycwokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSgKICAgICctLWNoYW5nZS1udW1iZXInLCAkQ2hhbmdlTnVtYmVyc1swXSwgJy0tY2hhbmdlLW51bWJlcicsICRDaGFuZ2VOdW1iZXJzWzFdLAogICAgJy0tY2hhbmdlLW51bWJlcicsICRDaGFuZ2VOdW1iZXJzWzJdLAopOwoKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMCwKICAgICJPcHRpb24gJy0tY2hhbmdlLW51bWJlcicgd2l0aCBzcGVjaWZpZWQgY2hhbmdlIG51bWJlcnMuIiwKKTsKCiMgdHJ5IHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgb25jZSBtb3JlIHdpdGggdGhlIHNhbWUgcGFyYW1ldGVycwojIHRoZSBjaGFuZ2VzIGhhdmUgYWxyZWR5IGJlZW4gZGVsZXRlZCwgYW5kIHRoaXMgb25lcyBkbyBub3QgZXhpc3QgYW55bW9yZQokRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSgKICAgICctLWNoYW5nZS1udW1iZXInLCAkQ2hhbmdlTnVtYmVyc1swXSwgJy0tY2hhbmdlLW51bWJlcicsICRDaGFuZ2VOdW1iZXJzWzFdLAogICAgJy0tY2hhbmdlLW51bWJlcicsICRDaGFuZ2VOdW1iZXJzWzJdLAopOwoKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMCwKICAgICJPcHRpb24gJy0tY2hhbmdlLW51bWJlcicgd2l0aCBzcGVjaWZpZWQgY2hhbmdlIG51bWJlcnMsIHdoaWNoIGRvIG5vdCBleGlzdHMuIiwKKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vIGNyaXRpYyAoTW9kdWxlczo6UmVxdWlyZUV4cGxpY2l0UGFja2FnZSkKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKbXkgJENvbW1hbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q29uc29sZTo6Q29tbWFuZDo6QWRtaW46OklUU006OkNoYW5nZTo6Q2hlY2snKTsKCiMgY2hlY2sgY29tbWFuZCB3aXRob3V0IG9wdGlvbgpteSAkRXhpdENvZGUgPSAkQ29tbWFuZE9iamVjdC0+RXhlY3V0ZSgpOwoKJFNlbGYtPklzKAogICAgJEV4aXRDb2RlLAogICAgMCwKICAgICJBZG1pbjo6SVRTTTo6Q2hhbmdlOjpDaGVjayAtIE5vIG9wdGlvbnMiLAopOwoKIyBjaGVjayBjb21tYW5kIHdpdGggb3B0aW9uIC0tZm9yY2UKJEV4aXRDb2RlID0gJENvbW1hbmRPYmplY3QtPkV4ZWN1dGUoJy0tZm9yY2UtcGlkJyk7CgokU2VsZi0+SXMoCiAgICAkRXhpdENvZGUsCiAgICAwLAogICAgIk9wdGlvbiAnLS1mb3JjZS1waWQnIiwKKTsKCjE7Cg==
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTggT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgSVRTTS5BZ2VudC5DQUJNZW1iZXJTZWFyY2gKICogQG1lbWJlcm9mIElUU00uQWdlbnQKICogQGF1dGhvciBPVFJTIEFHCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIHRoZSBDQUIgc2VhcmNoLgogKi8KSVRTTS5BZ2VudC5DQUJNZW1iZXJTZWFyY2ggPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0CiAgICAgKiBAbWVtYmVyb2YgSVRTTS5BZ2VudC5DQUJNZW1iZXJTZWFyY2gKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtqUXVlcnlPYmplY3R9ICRFbGVtZW50IC0gVGhlIGpRdWVyeSBvYmplY3Qgb2YgdGhlIGlucHV0IGZpZWxkIHdpdGggYXV0b2NvbXBsZXRlLgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucy4KICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uICgkRWxlbWVudCkgewoKICAgICAgICBpZiAoaXNKUXVlcnlPYmplY3QoJEVsZW1lbnQpKSB7CgogICAgICAgICAgICBDb3JlLlVJLkF1dG9jb21wbGV0ZS5Jbml0KAogICAgICAgICAgICAgICAgJEVsZW1lbnQsCiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoUmVxdWVzdCwgUmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgVVJMID0gQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpLCBEYXRhID0gewogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb246ICdBZ2VudElUU01DQUJNZW1iZXJTZWFyY2gnLAogICAgICAgICAgICAgICAgICAgICAgICBUZXJtOiBSZXF1ZXN0LnRlcm0gKyAnKicsCiAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwczogQ29yZS5Db25maWcuR2V0KCdDQUJBdXRvY29tcGxldGUuR3JvdXBzJykgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgICAgIE1heFJlc3VsdHM6IENvcmUuVUkuQXV0b2NvbXBsZXRlLkdldENvbmZpZygnTWF4UmVzdWx0c0Rpc3BsYXllZCcpCiAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAgICAgJEVsZW1lbnQuZGF0YSgnQXV0b0NvbXBsZXRlWEhSJywgQ29yZS5BSkFYLkZ1bmN0aW9uQ2FsbChVUkwsIERhdGEsIGZ1bmN0aW9uIChSZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFZhbHVlRGF0YSA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAkRWxlbWVudC5yZW1vdmVEYXRhKCdBdXRvQ29tcGxldGVYSFInKTsKICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKFJlc3VsdCwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVEYXRhLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLlVzZXJWYWx1ZSArICIgKCIgKyB0aGlzLlVzZXJLZXkgKyAiKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuVXNlclZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMuVXNlclR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2UoVmFsdWVEYXRhKTsKICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZnVuY3Rpb24gKEV2ZW50LCBVSSkgewoKICAgICAgICAgICAgICAgICAgICB2YXIgVXNlcktleSA9IFVJLml0ZW0ubGFiZWwucmVwbGFjZSgvLipcKCguKilcKSQvLCAnJDEnKTsKICAgICAgICAgICAgICAgICAgICAkRWxlbWVudC52YWwoVUkuaXRlbS52YWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIC8vIHNldCBoaWRkZW4gZmllbGQgVXNlclNlbGVjdGVkCiAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcigkRWxlbWVudC5hdHRyKCdpZCcpKSArICdTZWxlY3RlZCcpLnZhbChVc2VyS2V5KTsKICAgICAgICAgICAgICAgICAgICAkKCcjJyArIENvcmUuQXBwLkVzY2FwZVNlbGVjdG9yKCRFbGVtZW50LmF0dHIoJ2lkJykpICsgJ1R5cGUnKS52YWwoVUkuaXRlbS50eXBlKTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdDdXN0b21lclNlYXJjaCcKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgLy8gT24gdW5sb2FkIHJlbW92ZSBvbGQgc2VsZWN0ZWQgZGF0YS4gSWYgdGhlIHBhZ2UgaXMgcmVsb2FkZWQgKHdpdGggRjUpIHRoaXMgZGF0YSBzdGF5cyBpbiB0aGUgZmllbGQgYW5kIGludm9rZXMgYW4gYWpheCByZXF1ZXN0IG90aGVyd2lzZQogICAgICAgICQod2luZG93KS5vbignYmVmb3JldW5sb2FkLkNBQk1lbWJlclNlYXJjaCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgLy8gZXNjYXBlIHBvc3NpYmxlIGNvbG9ucyAoOikgaW4gZWxlbWVudCBpZCBiZWNhdXNlIGpRdWVyeSBjYW4gbm90IGhhbmRsZSBpdCBpbiBpZCBhdHRyaWJ1dGUgc2VsZWN0b3JzCiAgICAgICAgICAgICQoJyMnICsgQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoJEVsZW1lbnQuYXR0cignaWQnKSkgKyAnU2VsZWN0ZWQnKS52YWwoJycpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHJldHVybiBUYXJnZXROUzsKfShJVFNNLkFnZW50LkNBQk1lbWJlclNlYXJjaCB8fCB7fSkpOwo=
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTggT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwpJVFNNLkFnZW50LkNoYW5nZU1hbmFnZW1lbnQgPSBJVFNNLkFnZW50LkNoYW5nZU1hbmFnZW1lbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZSBJVFNNLkFnZW50LkNoYW5nZU1hbmFnZW1lbnQuTm90aWZpY2F0aW9uRXZlbnQKICogQG1lbWJlcm9mIElUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudAogKiBAYXV0aG9yIE9UUlMgQUcKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlIE5vdGlmaWNhdGlvbiBFdmVudCBtb2R1bGUuCiAqLwpJVFNNLkFnZW50LkNoYW5nZU1hbmFnZW1lbnQuTm90aWZpY2F0aW9uRXZlbnQgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0CiAgICAgKiBAbWVtYmVyb2YgSVRTTS5BZ2VudC5DaGFuZ2VNYW5hZ2VtZW50Lk5vdGlmaWNhdGlvbkV2ZW50CiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBQYXJhbXMgLSBJbml0aWFsaXphdGlvbiBhbmQgaW50ZXJuYXRpb25hbGl6YXRpb24gcGFyYW1ldGVycy4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemUgY29ycmVjdGx5IGFsbCBvdGhlciBmdW5jdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGxvY2FsIGxhbmd1YWdlLgogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKFBhcmFtcykgewoKICAgICAgICBUYXJnZXROUy5Mb2NhbGl6YXRpb24gPSBQYXJhbXMuTG9jYWxpemF0aW9uOwoKICAgICAgICAvLyBiaW5kIGNsaWNrIGZ1bmN0aW9uIHRvIGFkZCBidXR0b24KICAgICAgICAkKCcuTGFuZ3VhZ2VBZGQnKS5vZmYoJ2NoYW5nZS5MYW5ndWFnZUFkZCcpLm9uKCdjaGFuZ2UuTGFuZ3VhZ2VBZGQnLCBmdW5jdGlvbigpewogICAgICAgICAgICBUYXJnZXROUy5BZGRMYW5ndWFnZSgkKHRoaXMpLCAkKHRoaXMpLnZhbCgpLCAkKHRoaXMpLmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpLnRleHQoKSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gYmluZCBjbGljayBmdW5jdGlvbiB0byByZW1vdmUgYnV0dG9uCiAgICAgICAgJCgnLkxhbmd1YWdlUmVtb3ZlJykub2ZmKCdjbGljay5MYW5ndWFnZVJlbW92ZScpLm9uKCdjbGljay5MYW5ndWFnZVJlbW92ZScsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIGlmICh3aW5kb3cuY29uZmlybShUYXJnZXROUy5Mb2NhbGl6YXRpb24uRGVsZXRlTm90aWZpY2F0aW9uTGFuZ3VhZ2VNc2cpKSB7CiAgICAgICAgICAgICAgICBUYXJnZXROUy5SZW1vdmVMYW5ndWFnZSgkKHRoaXMpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSk7CiAgICB9OwoKICAgLyoqCiAgICAgKiBAbmFtZSBBZGRMYW5ndWFnZQogICAgICogQG1lbWJlcm9mIElUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5Ob3RpZmljYXRpb25FdmVudAogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge2pRdWVyeU9iamVjdH0gT2JqZWN0IC0gSlF1ZXJ5IG9iamVjdCB1c2VkIHRvIHJlbW92ZSB0aGUgbGFuZ3VhZ2UgYmxvY2sKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBMYW5ndWFnZUlEIC0gc2hvcnQgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgbGlrZSBlc19NWC4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBMYW5ndWFnZSAtIGZ1bGwgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgbGlrZSBTcGFuaXNoIChNZXhpY28pLgogICAgICogQHBhcmFtIHtzdHJpbmd9IFR5cGUgLSBBZ2VudCBvciBDdXN0b21lci4KICAgICAqIEByZXR1cm5zIHtCb29sfSBSZXR1cm5zIGZhbHNlIHRvIHByZXZlbnQgZXZlbnQgYnViYmxpbmcuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBhZGQgYSBuZXcgbm90aWZpY2F0aW9uIGV2ZW50IGxhbmd1YWdlLgogICAgICovCiAgICBUYXJnZXROUy5BZGRMYW5ndWFnZSA9IGZ1bmN0aW9uKE9iamVjdCwgTGFuZ3VhZ2VJRCwgTGFuZ3VhZ2UpewoKICAgICAgICB2YXIgJENsb25lID0gJCgnLlRlbXBsYXRlJykuY2xvbmUoKSwKICAgICAgICAgICAgVHlwZTsKCiAgICAgICAgaWYgKExhbmd1YWdlID09PSAnLScpewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoT2JqZWN0LmF0dHIoJ2lkJykgPT09ICdBZ2VudExhbmd1YWdlQWRkJykgewogICAgICAgICAgICBUeXBlID0gJ0FnZW50JzsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoT2JqZWN0LmF0dHIoJ2lkJykgPT09ICdDdXN0b21lckxhbmd1YWdlQWRkJykgewogICAgICAgICAgICBUeXBlID0gJ0N1c3RvbWVyJzsKICAgICAgICB9CgogICAgICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBjbGFzc2VzCiAgICAgICAgJENsb25lLnJlbW92ZUNsYXNzKCdIaWRkZW4gVGVtcGxhdGUnKTsKCiAgICAgICAgLy8gYWRkIHRpdGxlCiAgICAgICAgJENsb25lLmZpbmQoJy5UaXRsZScpLmh0bWwoTGFuZ3VhZ2UpOwoKICAgICAgICAvLyB1cGRhdGUgcmVtb3ZlIGxpbmsKICAgICAgICAkQ2xvbmUuZmluZCgnI1RlbXBsYXRlX0xhbmd1YWdlX1JlbW92ZScpLmFkZENsYXNzKFR5cGUgKyAnTGFuZ3VhZ2VSZW1vdmUnKTsKICAgICAgICAkQ2xvbmUuZmluZCgnI1RlbXBsYXRlX0xhbmd1YWdlX1JlbW92ZScpLmF0dHIoJ25hbWUnLCBUeXBlICsgJ18nICsgTGFuZ3VhZ2VJRCArICdfTGFuZ3VhZ2VfUmVtb3ZlJyk7CiAgICAgICAgJENsb25lLmZpbmQoJyNUZW1wbGF0ZV9MYW5ndWFnZV9SZW1vdmUnKS5hdHRyKCdpZCcsIFR5cGUgKyAnXycgKyBMYW5ndWFnZUlEICsgJ19MYW5ndWFnZV9SZW1vdmUnKTsKCiAgICAgICAgLy8gc2V0IGhpZGRlbiBsYW5ndWFnZSBmaWVsZAogICAgICAgICRDbG9uZS5maW5kKCcuTGFuZ3VhZ2VJRCcpLmF0dHIoJ25hbWUnLCBUeXBlICsgJ18nICsgJ0xhbmd1YWdlSUQnKTsKICAgICAgICAkQ2xvbmUuZmluZCgnLkxhbmd1YWdlSUQnKS52YWwoTGFuZ3VhZ2VJRCk7CgogICAgICAgIC8vIHVwZGF0ZSBzdWJqZWN0IGxhYmVsCiAgICAgICAgJENsb25lLmZpbmQoJyNUZW1wbGF0ZV9MYWJlbF9TdWJqZWN0JykuYXR0cignZm9yJywgVHlwZSArICdfJyArIExhbmd1YWdlSUQgKyAnX1N1YmplY3QnKTsKICAgICAgICAkQ2xvbmUuZmluZCgnI1RlbXBsYXRlX0xhYmVsX1N1YmplY3QnKS5hdHRyKCdpZCcsIFR5cGUgKyAnXycgKyBMYW5ndWFnZUlEICsgJ19MYWJlbF9TdWJqZWN0Jyk7CgogICAgICAgIC8vIHVwZGF0ZSBzdWJqZWN0IGZpZWxkCiAgICAgICAgJENsb25lLmZpbmQoJyNUZW1wbGF0ZV9TdWJqZWN0JykuYXR0cignbmFtZScsIFR5cGUgKyAnXycgKyBMYW5ndWFnZUlEICsgJ19TdWJqZWN0Jyk7CiAgICAgICAgJENsb25lLmZpbmQoJyNUZW1wbGF0ZV9TdWJqZWN0JykuYWRkQ2xhc3MoJ1ZhbGlkYXRlX1JlcXVpcmVkJyk7CiAgICAgICAgJENsb25lLmZpbmQoJyNUZW1wbGF0ZV9TdWJqZWN0JykuYXR0cignaWQnLCBUeXBlICsgJ18nICsgTGFuZ3VhZ2VJRCArICdfU3ViamVjdCcpOwogICAgICAgICRDbG9uZS5maW5kKCcjVGVtcGxhdGVfU3ViamVjdEVycm9yJykuYXR0cignaWQnLCBUeXBlICsgJ18nICsgTGFuZ3VhZ2VJRCArICdfU3ViamVjdEVycm9yJyk7CgogICAgICAgIC8vIHVwZGF0ZSBib2R5IGxhYmVsCiAgICAgICAgJENsb25lLmZpbmQoJyNUZW1wbGF0ZV9MYWJlbF9Cb2R5JykuYXR0cignZm9yJywgVHlwZSArICdfJyArIExhbmd1YWdlSUQgKyAnX0JvZHknKTsKICAgICAgICAkQ2xvbmUuZmluZCgnI1RlbXBsYXRlX0xhYmVsX0JvZHknKS5hdHRyKCdpZCcsIFR5cGUgKyAnXycgKyBMYW5ndWFnZUlEICsgJ19MYWJlbF9Cb2R5Jyk7CgogICAgICAgIC8vIHVwZGF0ZSBib2R5IGZpZWxkCiAgICAgICAgJENsb25lLmZpbmQoJyNUZW1wbGF0ZV9Cb2R5JykuYXR0cignbmFtZScsIFR5cGUgKyAnXycgKyBMYW5ndWFnZUlEICsgJ19Cb2R5Jyk7CiAgICAgICAgJENsb25lLmZpbmQoJyNUZW1wbGF0ZV9Cb2R5JykuYWRkQ2xhc3MoJ1JpY2hUZXh0Jyk7CiAgICAgICAgJENsb25lLmZpbmQoJyNUZW1wbGF0ZV9Cb2R5JykuYWRkQ2xhc3MoJ1ZhbGlkYXRlX1JlcXVpcmVkUmljaFRleHQnKTsKICAgICAgICAkQ2xvbmUuZmluZCgnI1RlbXBsYXRlX0JvZHknKS5hdHRyKCdpZCcsIFR5cGUgKyAnXycgKyBMYW5ndWFnZUlEICsgJ19Cb2R5Jyk7CiAgICAgICAgJENsb25lLmZpbmQoJyNUZW1wbGF0ZV9Cb2R5RXJyb3InKS5hdHRyKCdpZCcsIFR5cGUgKyAnXycgKyBMYW5ndWFnZUlEICsgJ19Cb2R5RXJyb3InKTsKCiAgICAgICAgLy8gYXBwZW5kIHRvIGNvbnRhaW5lcgogICAgICAgICQoJyMnICsgVHlwZSArICdOb3RpZmljYXRpb25MYW5ndWFnZUNvbnRhaW5lcicpLmFwcGVuZCgkQ2xvbmUpOwoKICAgICAgICAvLyBpbml0aWFsaXplIHRoZSByaWNoIHRleHQgZWRpdG9yIGlmIHNldAogICAgICAgIGlmIChwYXJzZUludChDb3JlLkNvbmZpZy5HZXQoJ1JpY2hUZXh0U2V0JyksIDEwKSA9PT0gMSkgewogICAgICAgICAgICBDb3JlLlVJLlJpY2hUZXh0RWRpdG9yLkluaXRBbGwoKTsKICAgICAgICB9CgogICAgICAgIC8vIGJpbmQgY2xpY2sgZnVuY3Rpb24gdG8gcmVtb3ZlIGJ1dHRvbgogICAgICAgICQoJy5MYW5ndWFnZVJlbW92ZScpLm9mZignY2xpY2suTGFuZ3VhZ2VSZW1vdmUnKS5vbignY2xpY2suTGFuZ3VhZ2VSZW1vdmUnLCBmdW5jdGlvbigpewoKICAgICAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKFRhcmdldE5TLkxvY2FsaXphdGlvbi5EZWxldGVOb3RpZmljYXRpb25MYW5ndWFnZU1zZykpIHsKICAgICAgICAgICAgICAgIFRhcmdldE5TLlJlbW92ZUxhbmd1YWdlKCQodGhpcykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKCiAgICAgICAgVGFyZ2V0TlMuTGFuZ3VhZ2VTZWxlY3Rpb25SZWJ1aWxkKFR5cGUpOwoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIC8qKgogICAgICogQG5hbWUgUmVtb3ZlTGFuZ3VhZ2UKICAgICAqIEBtZW1iZXJvZiBJVFNNLkFnZW50LkNoYW5nZU1hbmFnZW1lbnQuTm90aWZpY2F0aW9uRXZlbnQKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtqUXVlcnlPYmplY3R9IE9iamVjdCAtIEpRdWVyeSBvYmplY3QgdXNlZCB0byByZW1vdmUgdGhlIGxhbmd1YWdlIGJsb2NrCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgbm90aWZpY2F0aW9uIGV2ZW50IGxhbmd1YWdlLgogICAgICovCiAgICBUYXJnZXROUy5SZW1vdmVMYW5ndWFnZSA9IGZ1bmN0aW9uIChPYmplY3QpIHsKCiAgICAgICAgdmFyIFR5cGU7CgogICAgICAgIE9iamVjdC5jbG9zZXN0KCcuTm90aWZpY2F0aW9uTGFuZ3VhZ2UnKS5yZW1vdmUoKTsKCiAgICAgICAgaWYgKE9iamVjdC5oYXNDbGFzcygnQWdlbnRMYW5ndWFnZVJlbW92ZScpKSB7CiAgICAgICAgICAgIFR5cGUgPSAnQWdlbnQnOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChPYmplY3QuaGFzQ2xhc3MoJ0N1c3RvbWVyTGFuZ3VhZ2VSZW1vdmUnKSkgewogICAgICAgICAgICBUeXBlID0gJ0N1c3RvbWVyJzsKICAgICAgICB9CgogICAgICAgIFRhcmdldE5TLkxhbmd1YWdlU2VsZWN0aW9uUmVidWlsZChUeXBlKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAbmFtZSBMYW5ndWFnZVNlbGVjdGlvblJlYnVpbGQKICAgICAqIEBtZW1iZXJvZiBJVFNNLkFnZW50LkNoYW5nZU1hbmFnZW1lbnQuTm90aWZpY2F0aW9uRXZlbnQKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtzdHJpbmd9IFR5cGUgLSBBZ2VudCBvciBDdXN0b21lci4KICAgICAqIEByZXR1cm5zIHtCb29sZWFufSBSZXR1cm5zIHRydWUuCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiByZWJ1aWxkcyBsYW5ndWFnZSBzZWxlY3Rpb24sIG9ubHkgc2hvdyBhdmFpbGFibGUgbGFuZ3VhZ2VzLgogICAgICovCiAgICBUYXJnZXROUy5MYW5ndWFnZVNlbGVjdGlvblJlYnVpbGQgPSBmdW5jdGlvbiAoVHlwZSkgewoKICAgICAgICAvLyBnZXQgb3JpZ2luYWwgc2VsZWN0aW9uIHdpdGggYWxsIHBvc3NpYmxlIGZpZWxkcyBhbmQgY2xvbmUgaXQKICAgICAgICB2YXIgJExhbmd1YWdlQ2xvbmUgPSAkKCcjJyArIFR5cGUgKyAnTGFuZ3VhZ2VPcmlnJykuY2xvbmUoKTsKICAgICAgICAkTGFuZ3VhZ2VDbG9uZS5hdHRyKCdpZCcsIFR5cGUgKyAnTGFuZ3VhZ2VBZGQnKTsKICAgICAgICAkTGFuZ3VhZ2VDbG9uZS5hdHRyKCduYW1lJywgVHlwZSArICdMYW5ndWFnZUFkZCcpOwogICAgICAgICRMYW5ndWFnZUNsb25lLmFkZENsYXNzKCJMYW5ndWFnZUFkZCIpOwoKICAgICAgICAvLyBzdHJpcCBhbGwgYWxyZWFkeSB1c2VkIGF0dHJpYnV0ZXMKICAgICAgICAkTGFuZ3VhZ2VDbG9uZS5maW5kKCdvcHRpb24nKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKCQoJyMnICsgVHlwZSArICdOb3RpZmljYXRpb25MYW5ndWFnZUNvbnRhaW5lciBsYWJlbCMnICsgVHlwZSArICdfJyArICQodGhpcykudmFsKCkgKyAnX0xhYmVsX1N1YmplY3QnKS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gcmVwbGFjZSBzZWxlY3Rpb24gd2l0aCBvcmlnaW5hbCBzZWxlY3Rpb24KICAgICAgICAkKCcjJyArIFR5cGUgKyAnTGFuZ3VhZ2VBZGQnKS5yZXBsYWNlV2l0aCgkTGFuZ3VhZ2VDbG9uZSk7CgogICAgICAgIC8vIGJpbmQgY2xpY2sgZnVuY3Rpb24gdG8gYWRkIGJ1dHRvbgogICAgICAgICQoJyMnICsgVHlwZSArICdMYW5ndWFnZUFkZCcpLm9mZignY2hhbmdlLkxhbmd1YWdlQWRkJykub24oJ2NoYW5nZS5MYW5ndWFnZUFkZCcsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIFRhcmdldE5TLkFkZExhbmd1YWdlKCQodGhpcyksICQodGhpcykudmFsKCksICQodGhpcykuZmluZCgnb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5Ob3RpZmljYXRpb25FdmVudCB8fCB7fSkpOwo=
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTggT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoKLy8gVE9ETzoKLy9SZW1vdmUgdGhpcyBsaW5lIGFuZCBmaXggSlNEb2MKLy8gbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpKYXZhU2NyaXB0OjpFU0xpbnQpCgoKInVzZSBzdHJpY3QiOwoKdmFyIElUU00gPSBJVFNNIHx8IHt9OwpJVFNNLkFnZW50ID0gSVRTTS5BZ2VudCB8fCB7fTsKSVRTTS5BZ2VudC5DaGFuZ2VNYW5hZ2VtZW50ID0gSVRTTS5BZ2VudC5DaGFuZ2VNYW5hZ2VtZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UgSVRTTS5BZ2VudC5DaGFuZ2VNYW5hZ2VtZW50LlNlYXJjaAogKiBAbWVtYmVyb2YgSVRTTS5BZ2VudC5DaGFuZ2VNYW5hZ2VtZW50CiAqIEBhdXRob3IgT1RSUyBBRwogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciB0aGUgQ2hhbmdlTWFuYWdlbWVudCBzZWFyY2guCiAqLwpJVFNNLkFnZW50LkNoYW5nZU1hbmFnZW1lbnQuU2VhcmNoID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIC8qKgogICAgICogQG5hbWUgQWRkaXRpb25hbEF0dHJpYnV0ZVNlbGVjdGlvblJlYnVpbGQKICAgICAqIEBtZW1iZXJvZiBJVFNNLkFnZW50LkNoYW5nZU1hbmFnZW1lbnQuU2VhcmNoCiAgICAgKiBAYXV0aG9yIE9UUlMgQUcKICAgICAqIEBmdW5jdGlvbgogICAgICogQHJldHVybnMge0Jvb2xlYW59IFJldHVybnMgdHJ1ZS4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIHJlYnVpbGRzIHRoZSBzZWxlY3Rpb24gZHJvcGRvd24gYWZ0ZXIgY2hvb3Npbmcgb3IgZGVsZXRpbmcgYW4gYWRkaXRpb25hbCBzZWxlY3Rpb24uCiAgICAgKi8KICAgIFRhcmdldE5TLkFkZGl0aW9uYWxBdHRyaWJ1dGVTZWxlY3Rpb25SZWJ1aWxkID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAvLyBnZXQgb3JpZ2luYWwgc2VsZWN0aW9uIHdpdGggYWxsIHBvc3NpYmxlIGZpZWxkcyBhbmQgY2xvbmUgaXQKICAgICAgICB2YXIgJEF0dHJpYnV0ZUNsb25lID0gJCgnI0F0dHJpYnV0ZU9yaWcgb3B0aW9uJykuY2xvbmUoKSwKICAgICAgICAgICAgJEF0dHJpYnV0ZVNlbGVjdGlvbiA9ICQoJyNBdHRyaWJ1dGUnKS5lbXB0eSgpLAogICAgICAgICAgICBWYWx1ZTsKCiAgICAgICAgLy8gc3RyaXAgYWxsIGFscmVhZHkgdXNlZCBhdHRyaWJ1dGVzCiAgICAgICAgJEF0dHJpYnV0ZUNsb25lLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICBWYWx1ZSA9IENvcmUuQXBwLkVzY2FwZVNlbGVjdG9yKCQodGhpcykuYXR0cigndmFsdWUnKSk7CiAgICAgICAgICAgIGlmICghJCgnI1NlYXJjaEluc2VydCBsYWJlbCNMYWJlbCcgKyBWYWx1ZSkubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAkQXR0cmlidXRlU2VsZWN0aW9uLmFwcGVuZCgkKHRoaXMpKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAkQXR0cmlidXRlU2VsZWN0aW9uLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJyk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICAvKioKICAgICAqIEBuYW1lIFNlYXJjaEF0dHJpYnV0ZUFkZAogICAgICogQG1lbWJlcm9mIElUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5TZWFyY2gKICAgICAqIEBhdXRob3IgT1RSUyBBRwogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gb2YgYXR0cmlidXRlIHRvIGFkZC4KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGFkZHMgb25lIGF0dHJpYnV0ZXMgZm9yIHRoZSBzZWFyY2guCiAgICAgKi8KICAgIFRhcmdldE5TLlNlYXJjaEF0dHJpYnV0ZUFkZCA9IGZ1bmN0aW9uIChBdHRyaWJ1dGUpIHsKICAgICAgICB2YXIgJExhYmVsID0gJCgnI1NlYXJjaEF0dHJpYnV0ZXNIaWRkZW4gbGFiZWwjTGFiZWwnICsgQXR0cmlidXRlKTsKCiAgICAgICAgaWYgKCRMYWJlbC5sZW5ndGgpIHsKICAgICAgICAgICAgJExhYmVsLnByZXYoKS5jbG9uZSgpLmFwcGVuZFRvKCcjU2VhcmNoSW5zZXJ0Jyk7CiAgICAgICAgICAgICRMYWJlbC5jbG9uZSgpLmFwcGVuZFRvKCcjU2VhcmNoSW5zZXJ0Jyk7CiAgICAgICAgICAgICRMYWJlbC5uZXh0KCkuY2xvbmUoKS5hcHBlbmRUbygnI1NlYXJjaEluc2VydCcpCgogICAgICAgICAgICAgICAgLy8gYmluZCBjbGljayBmdW5jdGlvbiB0byByZW1vdmUgYnV0dG9uIG5vdwogICAgICAgICAgICAgICAgLmZpbmQoJy5SZW1vdmVCdXR0b24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgJEVsZW1lbnQgPSAkKHRoaXMpLnBhcmVudCgpOwogICAgICAgICAgICAgICAgICAgIFRhcmdldE5TLlNlYXJjaEF0dHJpYnV0ZVJlbW92ZSgkRWxlbWVudCk7CgogICAgICAgICAgICAgICAgICAgIC8vIHJlYnVpbGQgc2VsZWN0aW9uCiAgICAgICAgICAgICAgICAgICAgVGFyZ2V0TlMuQWRkaXRpb25hbEF0dHJpYnV0ZVNlbGVjdGlvblJlYnVpbGQoKTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBzZXQgYXV0b2NvbXBsZSB0byBjdXN0b21lciB0eXBlIGZpZWxkcwogICAgICAgICAgICAkKCcjU2VhcmNoSW5zZXJ0JykuZmluZCgnLklUU01DdXN0b21lclNlYXJjaCcpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHZhciBJbnB1dElEID0gJCh0aGlzKS5hdHRyKCdpZCcpICsgJ0N1c3RvbWVyQXV0b2NvbXBsZXRlJzsKICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ0lUU01DdXN0b21lclNlYXJjaCcpOwogICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdpZCcsIElucHV0SUQpOwogICAgICAgICAgICAgICAgJCh0aGlzKS5wcmV2KCkuYXR0cignaWQnLCBJbnB1dElEICsgJ1NlbGVjdGVkJyk7CiAgICAgICAgICAgICAgICBJVFNNLkFnZW50LkN1c3RvbWVyU2VhcmNoLkluaXQoJCgnIycgKyBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcihJbnB1dElEKSkpOwoKICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZGlhbG9nIGNsb3N1cmUgd2hlbiBzZWxlY3QgYSBjdXN0b21lciBmcm9tIHRoZSBsaXN0CiAgICAgICAgICAgICAgICAkKCd1bC51aS1hdXRvY29tcGxldGUnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKEV2ZW50KXsKICAgICAgICAgICAgICAgICAgICBFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBzZXQgYXV0b2NvbXBsZSB0byB1c2VyIHR5cGUgZmllbGRzCiAgICAgICAgICAgICQoJyNTZWFyY2hJbnNlcnQnKS5maW5kKCcuSVRTTVVzZXJTZWFyY2gnKS5lYWNoKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICB2YXIgSW5wdXRJRCA9ICQodGhpcykuYXR0cignaWQnKSArICdVc2VyQXV0b2NvbXBsZXRlJzsKICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ0lUU01Vc2VyU2VhcmNoJyk7CiAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2lkJywgSW5wdXRJRCk7CiAgICAgICAgICAgICAgICAkKHRoaXMpLnByZXYoKS5hdHRyKCdpZCcsIElucHV0SUQgKyAnU2VsZWN0ZWQnKTsKICAgICAgICAgICAgICAgIElUU00uQWdlbnQuVXNlclNlYXJjaC5Jbml0KCQoJyMnICsgQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoSW5wdXRJRCkpKTsKCiAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGRpYWxvZyBjbG9zdXJlIHdoZW4gc2VsZWN0IGEgY3VzdG9tZXIgZnJvbSB0aGUgbGlzdAogICAgICAgICAgICAgICAgJCgndWwudWktYXV0b2NvbXBsZXRlJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbihFdmVudCl7CiAgICAgICAgICAgICAgICAgICAgRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgLy8gTW9kZXJuaXplIGZpZWxkcwogICAgICAgICAgICBDb3JlLlVJLklucHV0RmllbGRzLkFjdGl2YXRlKCQoJyNTZWFyY2hJbnNlcnQnKSk7CgogICAgICAgICAgICAvLyBSZWdpc3RlciBldmVudCBmb3IgdHJlZSBzZWxlY3Rpb24gZGlhbG9nCiAgICAgICAgICAgIENvcmUuVUkuVHJlZVNlbGVjdGlvbi5Jbml0VHJlZVNlbGVjdGlvbigpOwoKICAgICAgICAgICAgLy8gSW5pdGlhbGx5IGRpc3BsYXkgZHluYW1pYyBmaWVsZHMgd2l0aCBUcmVlTW9kZSA9IDEgY29ycmVjdGx5CiAgICAgICAgICAgIENvcmUuVUkuVHJlZVNlbGVjdGlvbi5Jbml0RHluYW1pY0ZpZWxkVHJlZVZpZXdSZXN0b3JlKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge2pRdWVyeU9iamVjdH0gJEVsZW1lbnQgVGhlIGpRdWVyeSBvYmplY3Qgb2YgdGhlIGZvcm0gIG9yIGFueSBlbGVtZW50CiAgICAgKiAgICAgIHdpdGhpbiB0aGlzIGZvcm0gY2hlY2suCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiByZW1vdmUgYXR0cmlidXRlcyBmcm9tIGFuIGVsZW1lbnQuCiAgICAgKi8KCiAgICBUYXJnZXROUy5TZWFyY2hBdHRyaWJ1dGVSZW1vdmUgPSBmdW5jdGlvbiAoJEVsZW1lbnQpIHsKICAgICAgICAkRWxlbWVudC5wcmV2KCkucHJldigpLnJlbW92ZSgpOwogICAgICAgICRFbGVtZW50LnByZXYoKS5yZW1vdmUoKTsKICAgICAgICAkRWxlbWVudC5yZW1vdmUoKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwcml2YXRlCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gUHJvZmlsZSBUaGUgcHJvZmlsZSBuYW1lIHRoYXQgd2lsbCBiZSBkZWxldGUuCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqIEBkZXNjcmlwdGlvbiBEZWxldGUgYSBwcm9maWxlIHZpYSBhbiBhamF4IHJlcXVlc3RzLgogICAgICovCiAgICBmdW5jdGlvbiBTZWFyY2hQcm9maWxlRGVsZXRlKFByb2ZpbGUpIHsKICAgICAgICB2YXIgRGF0YSA9IHsKICAgICAgICAgICAgQWN0aW9uOiAnQWdlbnRJVFNNQ2hhbmdlU2VhcmNoJywKICAgICAgICAgICAgU3ViYWN0aW9uOiAnQUpBWFByb2ZpbGVEZWxldGUnLAogICAgICAgICAgICBQcm9maWxlOiBQcm9maWxlCiAgICAgICAgfTsKICAgICAgICBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKAogICAgICAgICAgICBDb3JlLkNvbmZpZy5HZXQoJ0NHSUhhbmRsZScpLAogICAgICAgICAgICBEYXRhLAogICAgICAgICAgICBmdW5jdGlvbiAoKSB7fQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwcml2YXRlCiAgICAgKiBAcmV0dXJuIDAgaWYgbm8gdmFsdWVzIHdlcmUgZm91bmQsIDEgaWYgdmFsdWVzIHdoZXJlIHRoZXJlCiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGFueSB2YWx1ZXMgd2VyZSBlbnRlcmVkIGluIHRoZSBzZWFyY2guCiAgICAgKiAgICAgICAgICAgICAgSWYgbm90aGluZyBhdCBhbGwgZXhpc3RzLCBpdCBhbGVydHMgd2l0aCB0cmFuc2xhdGVkOgogICAgICogICAgICAgICAgICAgICJQbGVhc2UgZW50ZXIgYXQgbGVhc3Qgb25lIHNlYXJjaCB2YWx1ZSBvciAqIHRvIGZpbmQgYW55dGhpbmciCiAgICAgKi8KICAgIGZ1bmN0aW9uIENoZWNrRm9yU2VhcmNoZWRWYWx1ZXMoKSB7CiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBTZWFyY2hGb3JtIGxhYmVscwogICAgICAgIHZhciBTZWFyY2hWYWx1ZUZsYWcgPSBmYWxzZTsKICAgICAgICAkKCcjU2VhcmNoRm9ybSBsYWJlbCcpLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgRWxlbWVudE5hbWUsCiAgICAgICAgICAgICAgICAkRWxlbWVudDsKCiAgICAgICAgICAgIC8vIHRob3NlIHdpdGggSUQncyBhcmUgdXNlZCBmb3Igc2VhcmNoaW5nCiAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ2lkJykpIHsKICAgICAgICAgICAgICAgICAgICAvLyBzdWJzdHJpbmcgIkxhYmVsIiAoZS5nLiBmaXJzdCBmaXZlIGNoYXJhY3RlcnMgKSBmcm9tIHRoZQogICAgICAgICAgICAgICAgICAgIC8vIGxhYmVsIGlkLCB1c2UgdGhlIHJlbWFpbmluZyBuYW1lIGFzIG5hbWUgc3RyaW5nIGZvciBhY2Nlc3NpbmcKICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZm9ybSBpbnB1dCdzIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgRWxlbWVudE5hbWUgPSAkKHRoaXMpLmF0dHIoJ2lkJykuc3Vic3RyaW5nKDUpOwogICAgICAgICAgICAgICAgICAgICRFbGVtZW50ID0gJCgnI1NlYXJjaEZvcm0gaW5wdXRbbmFtZT0nICsgRWxlbWVudE5hbWUgKyAnXScpOwogICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gaW5wdXQgZWxlbWVudCB3aXRoIHRoZSBzZWxlY3RlZCBuYW1lCiAgICAgICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgbmV4dCAic2VsZWN0IiBlbGVtZW50IGFuZCB1c2UgdGhhdCBvbmUgZm9yIGNoZWNraW5nCiAgICAgICAgICAgICAgICAgICAgaWYgKCEkRWxlbWVudC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEVsZW1lbnQgPSAkKHRoaXMpLm5leHQoKS5maW5kKCdzZWxlY3QnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCRFbGVtZW50Lmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJEVsZW1lbnQudmFsKCkgJiYgJEVsZW1lbnQudmFsKCkgIT09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWFyY2hWYWx1ZUZsYWcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFTZWFyY2hWYWx1ZUZsYWcpIHsKICAgICAgICAgICBhbGVydChDb3JlLkNvbmZpZy5HZXQoJ0VtcHR5U2VhcmNoTXNnJykpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gU2VhcmNoVmFsdWVGbGFnOwogICAgfQoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcHJpdmF0ZQogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiBAZGVzY3JpcHRpb24gU2hvd3Mgd2FpdGluZyBkaWFsb2cgdW50aWwgc2VhcmNoIHNjcmVlbiBpcyByZWFkeS4KICAgICAqLwogICAgZnVuY3Rpb24gU2hvd1dhaXRpbmdEaWFsb2coKXsKICAgICAgICBDb3JlLlVJLkRpYWxvZy5TaG93Q29udGVudERpYWxvZygnPGRpdiBjbGFzcz0iU3BhY2luZyBDZW50ZXIiPjxzcGFuIGNsYXNzPSJBSkFYTG9hZGVyIiB0aXRsZT0iJyArIENvcmUuQ29uZmlnLkdldCgnTG9hZGluZ01zZycpICsgJyI+PC9zcGFuPjwvZGl2PicsIENvcmUuQ29uZmlnLkdldCgnTG9hZGluZ01zZycpLCAnMTBweCcsICdDZW50ZXInLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtTdHJpbmd9IEFjdGlvbiB3aGljaCBpcyB1c2VkIGluIGZyYW1ld29yayByaWdodCBub3cuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gVXNlZCBwcm9maWxlIG5hbWUuCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBvcGVuIHRoZSBzZWFyY2ggZGlhbG9nIGFmdGVyIGNsaWNraW5nIG9uICJzZWFyY2giIGJ1dHRvbiBpbiBuYXYgYmFyLgogICAgICovCgogICAgVGFyZ2V0TlMuT3BlblNlYXJjaERpYWxvZyA9IGZ1bmN0aW9uIChBY3Rpb24sIFByb2ZpbGUsIEVtcHR5U2VhcmNoKSB7CgogICAgICAgIHZhciBSZWZlcnJlciA9IENvcmUuQ29uZmlnLkdldCgnQWN0aW9uJyksCiAgICAgICAgICAgIERhdGE7CgogICAgICAgIGlmICghQWN0aW9uKSB7CiAgICAgICAgICAgIEFjdGlvbiA9ICdBZ2VudFNlYXJjaCc7CiAgICAgICAgfQoKICAgICAgICBEYXRhID0gewogICAgICAgICAgICBBY3Rpb246IEFjdGlvbiwKICAgICAgICAgICAgUmVmZXJyZXI6IFJlZmVycmVyLAogICAgICAgICAgICBQcm9maWxlOiBQcm9maWxlLAogICAgICAgICAgICBFbXB0eVNlYXJjaDogRW1wdHlTZWFyY2gsCiAgICAgICAgICAgIFN1YmFjdGlvbjogJ0FKQVgnCiAgICAgICAgfTsKCiAgICAgICAgU2hvd1dhaXRpbmdEaWFsb2coKTsKCiAgICAgICAgQ29yZS5BSkFYLkZ1bmN0aW9uQ2FsbCgKICAgICAgICAgICAgQ29yZS5Db25maWcuR2V0KCdDR0lIYW5kbGUnKSwKICAgICAgICAgICAgRGF0YSwKICAgICAgICAgICAgZnVuY3Rpb24gKEhUTUwpIHsKICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB3YWl0aW5nIGRpYWxvZyB3YXMgY2FuY2VsbGVkLCBkbyBub3Qgc2hvdyB0aGUgc2VhcmNoCiAgICAgICAgICAgICAgICAvLyAgZGlhbG9nIGFzIHdlbGwKICAgICAgICAgICAgICAgIGlmICghJCgnLkRpYWxvZzp2aXNpYmxlJykubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIENvcmUuVUkuRGlhbG9nLlNob3dDb250ZW50RGlhbG9nKEhUTUwsIENvcmUuQ29uZmlnLkdldCgnU2VhcmNoTXNnJyksICcxMHB4JywgJ0NlbnRlcicsIHRydWUsIHVuZGVmaW5lZCwgdHJ1ZSk7CgogICAgICAgICAgICAgICAgLy8gaGlkZSBhZGQgdGVtcGxhdGUgYmxvY2sKICAgICAgICAgICAgICAgICQoJyNTZWFyY2hQcm9maWxlQWRkQmxvY2snKS5oaWRlKCk7CgogICAgICAgICAgICAgICAgLy8gaGlkZSBzYXZlIGNoYW5nZXMgaW4gdGVtcGxhdGUgYmxvY2sKICAgICAgICAgICAgICAgICQoJyNTYXZlUHJvZmlsZScpLnBhcmVudCgpLmhpZGUoKS5wcmV2KCkuaGlkZSgpLnByZXYoKS5oaWRlKCk7CgogICAgICAgICAgICAgICAgLy8gc2VhcmNoIHByb2ZpbGUgaXMgc2VsZWN0ZWQKICAgICAgICAgICAgICAgIGlmICgkKCcjU2VhcmNoUHJvZmlsZScpLnZhbCgpICYmICQoJyNTZWFyY2hQcm9maWxlJykudmFsKCkgIT09ICdsYXN0LXNlYXJjaCcpIHsKCiAgICAgICAgICAgICAgICAgICAgLy8gc2hvdyBkZWxldGUgYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVEZWxldGUnKS5zaG93KCk7CgogICAgICAgICAgICAgICAgICAgIC8vIHNob3cgcHJvZmlsZSBsaW5rCiAgICAgICAgICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVBc0xpbmsnKS5zaG93KCk7CgogICAgICAgICAgICAgICAgICAgIC8vIHNob3cgc2F2ZSBjaGFuZ2VzIGluIHRlbXBsYXRlIGJsb2NrCiAgICAgICAgICAgICAgICAgICAgJCgnI1NhdmVQcm9maWxlJykucGFyZW50KCkuc2hvdygpLnByZXYoKS5zaG93KCkucHJldigpLnNob3coKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IFNhdmVQcm9maWxlIHRvIDAKICAgICAgICAgICAgICAgICAgICAkKCcjU2F2ZVByb2ZpbGUnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIENvcmUuVUkuSW5wdXRGaWVsZHMuQWN0aXZhdGUoJCgnLkRpYWxvZzp2aXNpYmxlJykpOwoKICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIGFkZCBvZiBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICQoJy5BZGRCdXR0b24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgQXR0cmlidXRlID0gJCgnI0F0dHJpYnV0ZScpLnZhbCgpOwogICAgICAgICAgICAgICAgICAgIFRhcmdldE5TLlNlYXJjaEF0dHJpYnV0ZUFkZChBdHRyaWJ1dGUpOwogICAgICAgICAgICAgICAgICAgIFRhcmdldE5TLkFkZGl0aW9uYWxBdHRyaWJ1dGVTZWxlY3Rpb25SZWJ1aWxkKCk7CgogICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGV2ZW50IGZvciB0cmVlIHNlbGVjdGlvbiBkaWFsb2cKICAgICAgICAgICAgICAgICAgICAkKCcuU2hvd1RyZWVTZWxlY3Rpb24nKS51bmJpbmQoJ2NsaWNrJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIENvcmUuVUkuVHJlZVNlbGVjdGlvbi5TaG93VHJlZVNlbGVjdGlvbigkKHRoaXMpKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvLyByZWdpc3RlciByZXR1cm4ga2V5CiAgICAgICAgICAgICAgICAkKCcjU2VhcmNoRm9ybScpLnVuYmluZCgna2V5cHJlc3MuRmlsdGVySW5wdXQnKS5iaW5kKCdrZXlwcmVzcy5GaWx0ZXJJbnB1dCcsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgICAgICAgICAgICAgIGlmICgoRXZlbnQuY2hhckNvZGUgfHwgRXZlbnQua2V5Q29kZSkgPT09IDEzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQ2hlY2tGb3JTZWFyY2hlZFZhbHVlcygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjU2VhcmNoRm9ybVN1Ym1pdCcpLnRyaWdnZXIoJ2NsaWNrJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHN1Ym1pdAogICAgICAgICAgICAgICAgJCgnI1NlYXJjaEZvcm1TdWJtaXQnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgU2hvd25BdHRyaWJ1dGVzID0gJyc7CgogICAgICAgICAgICAgICAgICAgIC8vIHJlbWVtYmVyIHNob3duIGF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgICAgICAkKCcjU2VhcmNoSW5zZXJ0IGxhYmVsJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ2lkJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNob3duQXR0cmlidXRlcyA9IFNob3duQXR0cmlidXRlcyArICc7JyArICQodGhpcykuYXR0cignaWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICQoJyNTZWFyY2hGb3JtICNTaG93bkF0dHJpYnV0ZXMnKS52YWwoU2hvd25BdHRyaWJ1dGVzKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gTm9ybWFsIHJlc3VsdHMgbW9kZSB3aWxsIHJldHVybiBIVE1MIGluIHRoZSBzYW1lIHdpbmRvdwogICAgICAgICAgICAgICAgICAgIGlmICgkKCcjU2VhcmNoRm9ybSAjUmVzdWx0Rm9ybScpLnZhbCgpID09PSAnTm9ybWFsJykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUNoZWNrRm9yU2VhcmNoZWRWYWx1ZXMoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjU2VhcmNoRm9ybScpLnN1Ym1pdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93V2FpdGluZ0RpYWxvZygpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBQcmludCBhbmQgQ1NWIHNob3VsZCBvcGVuIGluIGEgbmV3IHdpbmRvdywgbm8gd2FpdGluZyBkaWFsb2cKICAgICAgICAgICAgICAgICAgICAgICAgJCgnI1NlYXJjaEZvcm0nKS5hdHRyKCd0YXJnZXQnLCAnU2VhcmNoUmVzdWx0UGFnZScpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUNoZWNrRm9yU2VhcmNoZWRWYWx1ZXMoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjU2VhcmNoRm9ybScpLnN1Ym1pdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjU2VhcmNoRm9ybScpLmF0dHIoJ3RhcmdldCcsICcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvLyBsb2FkIHByb2ZpbGUKICAgICAgICAgICAgICAgICQoJyNTZWFyY2hQcm9maWxlJykuYmluZCgnY2hhbmdlJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBQcm9maWxlID0gJCgnI1NlYXJjaFByb2ZpbGUnKS52YWwoKSwKICAgICAgICAgICAgICAgICAgICAgICAgRW1wdHlTZWFyY2ggPSAkKCcjRW1wdHlTZWFyY2gnKS52YWwoKSwKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uID0gJCgnI1NlYXJjaEFjdGlvbicpLnZhbCgpOwoKICAgICAgICAgICAgICAgICAgICBUYXJnZXROUy5PcGVuU2VhcmNoRGlhbG9nKEFjdGlvbiwgUHJvZmlsZSwgRW1wdHlTZWFyY2gpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vIHNob3cgYWRkIHByb2ZpbGUgYmxvY2sgb3Igbm90CiAgICAgICAgICAgICAgICAkKCcjU2VhcmNoUHJvZmlsZU5ldycpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVBZGRCbG9jaycpLnRvZ2dsZSgpOwogICAgICAgICAgICAgICAgICAgICQoJyNTZWFyY2hQcm9maWxlQWRkTmFtZScpLmZvY3VzKCk7CiAgICAgICAgICAgICAgICAgICAgRXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvLyBhZGQgbmV3IHByb2ZpbGUKICAgICAgICAgICAgICAgICQoJyNTZWFyY2hQcm9maWxlQWRkQWN0aW9uJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIE5hbWUsICRFbGVtZW50MTsKCiAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IG5hbWUKICAgICAgICAgICAgICAgICAgICBOYW1lID0gJCgnI1NlYXJjaFByb2ZpbGVBZGROYW1lJykudmFsKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vIGFkZCBuYW1lIHRvIHByb2ZpbGUgc2VsZWN0aW9uCiAgICAgICAgICAgICAgICAgICAgJEVsZW1lbnQxID0gJCgnI1NlYXJjaFByb2ZpbGUnKS5jaGlsZHJlbigpLmZpcnN0KCkuY2xvbmUoKTsKICAgICAgICAgICAgICAgICAgICAkRWxlbWVudDEudGV4dChOYW1lKTsKICAgICAgICAgICAgICAgICAgICAkRWxlbWVudDEuYXR0cigndmFsdWUnLCBOYW1lKTsKICAgICAgICAgICAgICAgICAgICAkRWxlbWVudDEucHJvcCgnc2VsZWN0ZWQnLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAkKCcjU2VhcmNoUHJvZmlsZScpLmFwcGVuZCgkRWxlbWVudDEpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJyk7OwoKICAgICAgICAgICAgICAgICAgICAvLyBzZXQgaW5wdXQgYm94IHRvIGVtcHR5CiAgICAgICAgICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVBZGROYW1lJykudmFsKCcnKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gaGlkZSBhZGQgdGVtcGxhdGUgYmxvY2sKICAgICAgICAgICAgICAgICAgICAkKCcjU2VhcmNoUHJvZmlsZUFkZEJsb2NrJykuaGlkZSgpOwoKICAgICAgICAgICAgICAgICAgICAvLyBoaWRlIHNhdmUgY2hhbmdlcyBpbiB0ZW1wbGF0ZSBibG9jawogICAgICAgICAgICAgICAgICAgICQoJyNTYXZlUHJvZmlsZScpLnBhcmVudCgpLmhpZGUoKS5wcmV2KCkuaGlkZSgpLnByZXYoKS5oaWRlKCk7CgogICAgICAgICAgICAgICAgICAgIC8vIHNldCBTYXZlUHJvZmlsZSB0byAxCiAgICAgICAgICAgICAgICAgICAgJCgnI1NhdmVQcm9maWxlJykucHJvcCgnY2hlY2tlZCcsIHRydWUpOwoKICAgICAgICAgICAgICAgICAgICAvLyBzaG93IGRlbGV0ZSBidXR0b24KICAgICAgICAgICAgICAgICAgICAkKCcjU2VhcmNoUHJvZmlsZURlbGV0ZScpLnNob3coKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gc2hvdyBwcm9maWxlIGxpbmsKICAgICAgICAgICAgICAgICAgICAkKCcjU2VhcmNoUHJvZmlsZUFzTGluaycpLnNob3coKTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy8gZGlyZWN0IGxpbmsgdG8gcHJvZmlsZQogICAgICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVBc0xpbmsnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgICAgICAgICAgICAgIHZhciBQcm9maWxlID0gJCgnI1NlYXJjaFByb2ZpbGUnKS52YWwoKSwKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uID0gJCgnI1NlYXJjaEFjdGlvbicpLnZhbCgpOwoKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSArICdBY3Rpb249JyArIEFjdGlvbiArCiAgICAgICAgICAgICAgICAgICAgJztTdWJhY3Rpb249U2VhcmNoO1Rha2VMYXN0U2VhcmNoPTE7U2F2ZVByb2ZpbGU9MTtQcm9maWxlPScgKyBlbmNvZGVVUklDb21wb25lbnQoUHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy8gZGVsZXRlIHByb2ZpbGUKICAgICAgICAgICAgICAgICQoJyNTZWFyY2hQcm9maWxlRGVsZXRlJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKCiAgICAgICAgICAgICAgICAgICAgLy8gc3RyaXAgYWxsIGFscmVhZHkgdXNlZCBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGUnKS5maW5kKCdvcHRpb246c2VsZWN0ZWQnKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cigndmFsdWUnKSAhPT0gJ2xhc3Qtc2VhcmNoJykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlYnVpbGQgYXR0cmlidXRlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI1NlYXJjaEluc2VydCcpLnRleHQoJycpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSByZW1vdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlYXJjaFByb2ZpbGVEZWxldGUoJCh0aGlzKS52YWwoKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGxvY2FsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3cgZnVsbHRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldE5TLlNlYXJjaEF0dHJpYnV0ZUFkZCgnRnVsbHRleHQnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWJ1aWxkIHNlbGVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0TlMuQWRkaXRpb25hbEF0dHJpYnV0ZVNlbGVjdGlvblJlYnVpbGQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJCgnI1NlYXJjaFByb2ZpbGUnKS52YWwoKSAmJiAkKCcjU2VhcmNoUHJvZmlsZScpLnZhbCgpID09PSAnbGFzdC1zZWFyY2gnKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBoaWRlIGRlbGV0ZSBsaW5rCiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNTZWFyY2hQcm9maWxlRGVsZXRlJykuaGlkZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGlkZSBwcm9maWxlIGxpbmsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnI1NlYXJjaFByb2ZpbGVBc0xpbmsnKS5oaWRlKCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBFdmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgfSwgJ2h0bWwnCiAgICAgICAgKTsKICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5TZWFyY2ggfHwge30pKTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTggT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoKLy8gVE9ETzoKLy9SZW1vdmUgdGhpcyBsaW5lIGFuZCBmaXggSlNEb2MKLy8gbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVFJTOjpKYXZhU2NyaXB0OjpFU0xpbnQpCgoKInVzZSBzdHJpY3QiOwoKdmFyIElUU00gPSBJVFNNIHx8IHt9OwpJVFNNLkFnZW50ID0gSVRTTS5BZ2VudCB8fCB7fTsKSVRTTS5BZ2VudC5DaGFuZ2VNYW5hZ2VtZW50ID0gSVRTTS5BZ2VudC5DaGFuZ2VNYW5hZ2VtZW50IHx8IHt9OwovLyBJVFNNLkFnZW50LkNoYW5nZU1hbmFnZW1lbnQuV29ya29yZGVyR3JhcGggPSBJVFNNLkFnZW50LkNoYW5nZU1hbmFnZW1lbnQuV29ya29yZGVyR3JhcGggfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBJVFNNLkFnZW50LkNoYW5nZU1hbmFnZW1lbnQuV29ya29yZGVyR3JhcGgKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlIHdvcmtvcmRlciBncmFwaC4KICovCklUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5Xb3Jrb3JkZXJHcmFwaCA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHdvcmtvcmRlciBncmFwaAogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIGZ1bmN0aW9uIEdldERldGFpbFBvc2l0aW9uKEVsZW1lbnQsIEV2ZW50KSB7CiAgICAgICAgICAgIHZhciAkRGV0YWlscyA9ICQoRWxlbWVudCkubmV4dCgnLldvcmtvcmRlckRldGFpbHMnKSwKICAgICAgICAgICAgICAgIE1vdXNlUG9zaXRpb25MZWZ0ID0gcGFyc2VJbnQoRXZlbnQucGFnZVgsIDEwKSwKICAgICAgICAgICAgICAgIE1vdXNlUG9zaXRpb25Ub3AgPSBwYXJzZUludChFdmVudC5wYWdlWSwgMTApLAogICAgICAgICAgICAgICAgQm94UG9zaXRpb24gPSAkKEVsZW1lbnQpLmNsb3Nlc3QoJ2Rpdi5Xb3Jrb3JkZXJHcmFwaCcpLm9mZnNldCgpLAogICAgICAgICAgICAgICAgQm94V2lkdGggPSAkKEVsZW1lbnQpLmNsb3Nlc3QoJ2Rpdi5Xb3Jrb3JkZXJHcmFwaCcpLndpZHRoKCksCiAgICAgICAgICAgICAgICBEZXRhaWxXaWR0aCA9ICREZXRhaWxzLndpZHRoKCksCiAgICAgICAgICAgICAgICBEZXRhaWxQb3NpdGlvbkxlZnQgPSBNb3VzZVBvc2l0aW9uTGVmdCAtIHBhcnNlSW50KEJveFBvc2l0aW9uLmxlZnQsIDEwKSArIDE1LAogICAgICAgICAgICAgICAgRGV0YWlsUG9zaXRpb25Ub3AgPSBNb3VzZVBvc2l0aW9uVG9wIC0gcGFyc2VJbnQoQm94UG9zaXRpb24udG9wLCAxMCkgKyAxNTsKCiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgdG8gdGhlIHJpZ2h0IHRvIHNob3cgdGhlIGRldGFpbCBib3gsCiAgICAgICAgICAgIC8vIHNob3cgaXQgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgbW91c2UgY3Vyc29yCiAgICAgICAgICAgIGlmIChEZXRhaWxQb3NpdGlvbkxlZnQgKyBEZXRhaWxXaWR0aCArIDE1ID4gQm94V2lkdGgpIHsKICAgICAgICAgICAgICAgIERldGFpbFBvc2l0aW9uTGVmdCA9IERldGFpbFBvc2l0aW9uTGVmdCAtIDQwMCAtIDMwOyAvLyAzMCBiZWNhdXNlIHdlIGFkZGVkIDE1IHRvIHRoZSByaWdodCBhbmQgbm93IHdhbnQgMTUgdG8gdGhlIGxlZnQKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIExlZnQ6IERldGFpbFBvc2l0aW9uTGVmdCwKICAgICAgICAgICAgICAgIFRvcDogRGV0YWlsUG9zaXRpb25Ub3AKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICQoJ2Rpdi5Xb3Jrb3JkZXIgYScpCiAgICAgICAgLnVuYmluZCgnbW91c2VlbnRlcicpLmJpbmQoJ21vdXNlZW50ZXInLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICAgICAgdmFyIERldGFpbFBvc2l0aW9uID0gR2V0RGV0YWlsUG9zaXRpb24odGhpcywgRXZlbnQpOwogICAgICAgICAgICAkKHRoaXMpLm5leHQoJy5Xb3Jrb3JkZXJEZXRhaWxzJykKICAgICAgICAgICAgICAgIC5jc3MoJ2xlZnQnLCBEZXRhaWxQb3NpdGlvbi5MZWZ0KQogICAgICAgICAgICAgICAgLmNzcygndG9wJywgRGV0YWlsUG9zaXRpb24uVG9wKQogICAgICAgICAgICAgICAgLnNob3coKTsKICAgICAgICB9KQogICAgICAgIC51bmJpbmQoJ21vdXNlbGVhdmUnKS5iaW5kKCdtb3VzZWxlYXZlJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgICAgICQodGhpcykubmV4dCgnLldvcmtvcmRlckRldGFpbHMnKS5oaWRlKCk7CiAgICAgICAgfSkKICAgICAgICAudW5iaW5kKCdtb3VzZW1vdmUnKS5iaW5kKCdtb3VzZW1vdmUnLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICAgICAgdmFyIERldGFpbFBvc2l0aW9uID0gR2V0RGV0YWlsUG9zaXRpb24odGhpcywgRXZlbnQpOwogICAgICAgICAgICAkKHRoaXMpLm5leHQoJy5Xb3Jrb3JkZXJEZXRhaWxzJykKICAgICAgICAgICAgICAgIC5jc3MoJ2xlZnQnLCBEZXRhaWxQb3NpdGlvbi5MZWZ0KQogICAgICAgICAgICAgICAgLmNzcygndG9wJywgRGV0YWlsUG9zaXRpb24uVG9wKTsKICAgICAgICB9KTsKICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5Xb3Jrb3JkZXJHcmFwaCB8fCB7fSkpOwo=
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTggT1RSUyBBRywgaHR0cDovL290cnMuY29tL1xuIjsKLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQovLyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgovLyAtLQoKCi8vIFRPRE86Ci8vUmVtb3ZlIHRoaXMgbGluZSBhbmQgZml4IEpTRG9jCi8vIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RSUzo6SmF2YVNjcmlwdDo6RVNMaW50KQoKCiJ1c2Ugc3RyaWN0IjsKCnZhciBJVFNNID0gSVRTTSB8fCB7fTsKSVRTTS5BZ2VudCA9IElUU00uQWdlbnQgfHwge307CklUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudCA9IElUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudCB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlCiAqIEBleHBvcnRzIFRhcmdldE5TIGFzIENvcmUuQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5ab29tCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIHRoZSBab29tIChjaGFuZ2UgYW5kIHdvcmtvcmRlciB6b29tKS4KICovCklUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5ab29tID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge2pRdWVyeU9iamVjdH0gJElmcmFtZSBUaGUgaWZyYW1lIHdoaWNoIHNob3VsZCBiZSBhdXRvLWhlaWdodGVkCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zCiAgICAgKi8KICAgIFRhcmdldE5TLklmcmFtZUF1dG9IZWlnaHQgPSBmdW5jdGlvbiAoJElmcmFtZSkgewoKICAgICAgICBpZiAoaXNKUXVlcnlPYmplY3QoJElmcmFtZSkpIHsKICAgICAgICAgICAgdmFyIE5ld0hlaWdodCA9ICRJZnJhbWUKICAgICAgICAgICAgICAgIC5jb250ZW50cygpCiAgICAgICAgICAgICAgICAuZmluZCgnaHRtbCcpCiAgICAgICAgICAgICAgICAuaGVpZ2h0KCk7CgogICAgICAgICAgICAvLyBJRTggbmVlZHMgc29tZSBtb3JlIHNwYWNlIGR1ZSB0byBpbmNvcnJlY3QgaGVpZ2h0IGNhbGN1bGF0aW9uCiAgICAgICAgICAgIGlmIChOZXdIZWlnaHQgPiAwICYmICQuYnJvd3Nlci5tc2llICYmICQuYnJvd3Nlci52ZXJzaW9uID09PSAnOC4wJykgewogICAgICAgICAgICAgICAgTmV3SGVpZ2h0ID0gTmV3SGVpZ2h0ICsgNDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gaWYgdGhlIGlGcmFtZXMgaGVpZ2h0IGlzIDAsIHdlIGNvbGxhcHNlIHRoZSB3aWRnZXQKICAgICAgICAgICAgaWYgKE5ld0hlaWdodCA9PT0gMCkgewogICAgICAgICAgICAgICAgJElmcmFtZS5jbG9zZXN0KCcuV2lkZ2V0U2ltcGxlJykucmVtb3ZlQ2xhc3MoJ0V4cGFuZGVkJykuYWRkQ2xhc3MoJ0NvbGxhcHNlZCcpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIU5ld0hlaWdodCB8fCBpc05hTihOZXdIZWlnaHQpKSB7CiAgICAgICAgICAgICAgICBOZXdIZWlnaHQgPSBDb3JlLkNvbmZpZy5HZXQoJ0lUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudEhUTUxGaWVsZEhlaWdodERlZmF1bHQnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChOZXdIZWlnaHQgPiBDb3JlLkNvbmZpZy5HZXQoJ0lUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudEhUTUxGaWVsZEhlaWdodE1heCcpKSB7CiAgICAgICAgICAgICAgICAgICAgTmV3SGVpZ2h0ID0gQ29yZS5Db25maWcuR2V0KCdJVFNNQ2hhbmdlOjpGcm9udGVuZDo6QWdlbnRIVE1MRmllbGRIZWlnaHRNYXgnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkSWZyYW1lLmhlaWdodChOZXdIZWlnaHQgKyAncHgnKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8vIGluaXQgYnJvd3NlciBsaW5rIG1lc3NhZ2UgY2xvc2UgYnV0dG9uCiAgICBpZiAoJCgnLklUU01NZXNzYWdlQnJvd3NlcicpLmxlbmd0aCkgewogICAgICAgICQoJy5JVFNNTWVzc2FnZUJyb3dzZXIgYS5DbG9zZScpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgJCgnLklUU01NZXNzYWdlQnJvd3NlcicpLmZhZGVPdXQoInNsb3ciKTsKICAgICAgICAgICAgQ29yZS5BZ2VudC5QcmVmZXJlbmNlc1VwZGF0ZSgnVXNlckFnZW50RG9Ob3RTaG93QnJvd3NlckxpbmtNZXNzYWdlJywgMSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKICAgIH0KCiAgICByZXR1cm4gVGFyZ2V0TlM7Cgp9KElUU00uQWdlbnQuQ2hhbmdlTWFuYWdlbWVudC5ab29tIHx8IHt9KSk7Cg==
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTggT1RSUyBBRywgaHR0cDovL290cnMuY29tLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoKCi8vIFRPRE86Ci8vUmVtb3ZlIHRoaXMgbGluZSBhbmQgZml4IEpTRG9jCi8vIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RSUzo6SmF2YVNjcmlwdDo6RVNMaW50KQoKCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UKICogQGV4cG9ydHMgVGFyZ2V0TlMgYXMgSVRTTS5BZ2VudC5Vc2VyU2VhcmNoCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIHRoZSB1c2VyIHNlYXJjaC4KICovCklUU00uQWdlbnQuVXNlclNlYXJjaCA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtqUXVlcnlPYmplY3R9ICRFbGVtZW50IFRoZSBqUXVlcnkgb2JqZWN0IG9mIHRoZSBpbnB1dCBmaWVsZCB3aXRoIGF1dG9jb21wbGV0ZQogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucwogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCRFbGVtZW50KSB7CgogICAgICAgIGlmIChpc0pRdWVyeU9iamVjdCgkRWxlbWVudCkpIHsKCiAgICAgICAgICAgIENvcmUuVUkuQXV0b2NvbXBsZXRlLkluaXQoCiAgICAgICAgICAgICAgICAkRWxlbWVudCwKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChSZXF1ZXN0LCBSZXNwb25zZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBVUkwgPSBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJyksIERhdGEgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbjogJ0FnZW50SVRTTVVzZXJTZWFyY2gnLAogICAgICAgICAgICAgICAgICAgICAgICBUZXJtOiBSZXF1ZXN0LnRlcm0gKyAnKicsCiAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwcyA6IENvcmUuQ29uZmlnLkdldCgnVXNlckF1dG9jb21wbGV0ZS5Hcm91cHMnKSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgTWF4UmVzdWx0czogQ29yZS5VSS5BdXRvY29tcGxldGUuR2V0Q29uZmlnKCdNYXhSZXN1bHRzRGlzcGxheWVkJykKICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAkRWxlbWVudC5kYXRhKCdBdXRvQ29tcGxldGVYSFInLCBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKFVSTCwgRGF0YSwgZnVuY3Rpb24gKFJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgRGF0YSA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2goUmVzdWx0LCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLlVzZXJWYWx1ZSArICIgKCIgKyB0aGlzLlVzZXJLZXkgKyAiKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuVXNlclZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlKERhdGEpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoRXZlbnQsIFVJKSB7CgogICAgICAgICAgICAgICAgICAgIHZhciBVc2VyS2V5ID0gVUkuaXRlbS5sYWJlbC5yZXBsYWNlKC8uKlwoKC4qKVwpJC8sICckMScpOwoKICAgICAgICAgICAgICAgICAgICAkRWxlbWVudC52YWwoVUkuaXRlbS52YWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIC8vIHNldCBoaWRkZW4gZmllbGQgU2VsZWN0ZWRVc2VyCiAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcigkRWxlbWVudC5hdHRyKCdpZCcpKSArICdTZWxlY3RlZCcpLnZhbChVc2VyS2V5KTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICdDdXN0b21lclNlYXJjaCcKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIC8vIE9uIHVubG9hZCByZW1vdmUgb2xkIHNlbGVjdGVkIGRhdGEuIElmIHRoZSBwYWdlIGlzIHJlbG9hZGVkICh3aXRoIEY1KSB0aGlzIGRhdGEgc3RheXMgaW4gdGhlIGZpZWxkIGFuZCBpbnZva2VzIGFuIGFqYXggcmVxdWVzdCBvdGhlcndpc2UKICAgICAgICAkKHdpbmRvdykub24oJ2JlZm9yZXVubG9hZC5Vc2VyU2VhcmNoJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAvLyBlc2NhcGUgcG9zc2libGUgY29sb25zICg6KSBpbiBlbGVtZW50IGlkIGJlY2F1c2UgalF1ZXJ5IGNhbiBub3QgaGFuZGxlIGl0IGluIGlkIGF0dHJpYnV0ZSBzZWxlY3RvcnMKICAgICAgICAgICAgJCgnIycgKyBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcigkRWxlbWVudC5hdHRyKCdpZCcpKSArICdTZWxlY3RlZCcpLnZhbCgnJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9KTsKICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuVXNlclNlYXJjaCB8fCB7fSkpOwo=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgSVRTTSBkZWZhdWx0CiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCi8qKgogKiBAc3Vic2VjdGlvbiAgU3RhbmRhcmQgV2lkdGhzCiAqLwoKLlczMDBweCB7CiAgICB3aWR0aDogMzAwcHg7Cn0KCi5TcGFjaW5nQm90dG9tU21hbGwgewogICAgbWFyZ2luLWJvdHRvbTogNXB4Owp9CgovKioKICogQHN1YnNlY3Rpb24gIExheW91dCBmaXgKICovCi8qKgogKiBAbm90ZSAgICAgQmVjYXVzZSBvZiBzb21lIG92ZXJmbG93IGhpZGRlbiwgd29ya29yZGVyIHRvb2x0aXBzIGFyZSBub3QgYWx3YXlzCiAqICAgICAgICAgICBjb21wbGV0ZWx5IHZpc2libGUuCiAqICAgICAgICAgICBUaGUgb3ZlcmZsb3cgaGlkZGVuIGlzIG5lY2Vzc2FyeSBpbiB0aGUgbGF5b3V0IGFuZCBjYW4ndCBiZSBjaGFuZ2VkLgogKiAgICAgICAgICAgVGhpcyBpcyBhIHdvcmthcm91bmQgdG8gZnVsbHkgc2hvdyB0aGUgd29ya29yZGVyIHRvb2x0aXAuCiAqLwouTGF5b3V0Rml4ZWRTaWRlYmFyID4gLkNvbnRlbnRDb2x1bW4gewogICAgbWluLWhlaWdodDogNDUwcHg7Cn0KCi5GaXhlZExhYmVsU21hbGwgaWZyYW1lLkZpZWxkIHsKICAgIHdpZHRoOiA4MCU7Cn0KCi5JVFNNTWVzc2FnZUJyb3dzZXIgewogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgIHBhZGRpbmc6IDBweDsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLklUU01NZXNzYWdlQnJvd3NlciBwIHsKICAgICBwYWRkaW5nOiA1cHg7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogI0U4RThFODsKICAgICBmb250LXNpemU6IDExcHg7CiAgICAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgouSVRTTU1lc3NhZ2VCcm93c2VyIGEuQ2xvc2UgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMTJweDsKICAgIGhlaWdodDogMTJweDsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHJpZ2h0OiA0cHg7CiAgICB0b3A6IDZweDsKICAgIGNvbG9yOiAjNUQ1RDVEOwp9CgouSVRTTU1lc3NhZ2VCcm93c2VyIGEuQ2xvc2U6aG92ZXIgewogICAgY29sb3I6ICMwMDA7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgVGFibGVTbWFsbAogKi8KCi5UYWJsZVNtYWxsIHRib2R5IHRyLkludmFsaWQgewogICAgY29sb3I6ICNDQ0M7Cn0KCn0gLyogZW5kIEBtZWRpYSAqLwo=
LyogIEFsbCBkZXZpY2VzIGNhcGFibGUgb2YgT1RSUyBtaW5pbXVtIHNvbHV0aW9uLiBVc2VkIHRvIGhpZGUgZWxlbWVudHMgZm9yIG1vYmlsZSBkZXZpY2VzLiAqLwpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDEwMjVweCkgewoKfQoKLyogIEFsbCBkZXZpY2VzIHdpdGggYSBzbWFsbGVyIHJlc29sdXRpb24gdGhhbiB0aGUgY3VycmVudCBPVFJTIG1pbmltdW0gc29sdXRpb24gKi8KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAwcHgpIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHsKCiAgICAuV29ya29yZGVyRGV0YWlscyB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQp9CgovKiAgfiBUYWJsZXQgbGFuZHNjYXBlICovCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiAxMDI0cHgpIHsKCn0KCi8qICBBbGwgZGV2aWNlcyBzbWFsbGVyIHRoYW4gdGFibGV0IGxhbmRzY2FwZSAqLwpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDBweCkgYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7Cgp9CgovKiAgfiBUYWJsZXQgcG9ydHJhaXQgKi8KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA0ODBweCkgYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7Cgp9CgovKiAgfiBTbWFydHBob25lIGxhbmRzY2FwZSAqLwpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDMyMHB4KSBhbmQgKG1heC13aWR0aDogNDc5cHgpIHsKCn0KCi8qICB+IFNtYXJ0cGhvbmUgcG9ydHJhaXQgKi8KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzMTlweCkgewoKfQo=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgSVRTTSBkZWZhdWx0CiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCi8qKgogKiBAc3Vic2VjdGlvbiAgVGFibGVzLCBsaXN0cwogKi8KCi5SVEVDb250ZW50LCAuUlRFQ29udGVudCAqIHsKICAgIGxpbmUtaGVpZ2h0OiAxMzAlICFpbXBvcnRhbnQ7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLFRhaG9tYSxWZXJkYW5hLFNhbnMtU2VyaWY7Cn0KCi5SVEVDb250ZW50IHRhYmxlIHsKICAgIGJvcmRlcjogMXB4IG91dHNldCAjMjIyOwogICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKICAgIGJvcmRlci1zcGFjaW5nOiAxcHg7Cn0KCi5SVEVDb250ZW50IHRhYmxlIHRkLCAuUlRFQ29udGVudCB0YWJsZSB0aCB7CiAgICBib3JkZXI6IDFweCBpbnNldCAjMDAwOwogICAgcGFkZGluZzogMXB4OwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKLlJURUNvbnRlbnQgdGFibGUgdGggewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkOwp9CgouUlRFQ29udGVudCBwIHsKICAgIG1hcmdpbjogMTBweCAwcHg7Cn0KCi5SVEVDb250ZW50IHVsIHsKICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYzsKICAgIG1hcmdpbjogMTBweCAwcHg7CiAgICBwYWRkaW5nLWxlZnQ6IDQ1cHg7Cn0KCi5SVEVDb250ZW50IG9sIHsKICAgIGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbDsKICAgIG1hcmdpbjogMTBweCAwcHg7CiAgICBwYWRkaW5nLWxlZnQ6IDQ1cHg7Cn0KCi5SVEVDb250ZW50IHN0cm9uZywgLlJURUNvbnRlbnQgZW0gIHsKICAgIGZvbnQtc2l6ZTogaW5oZXJpdCAhaW1wb3J0YW50Owp9CgoKfSAvKiBlbmQgQG1lZGlhICovCg==
LyoqCiAqIFRoaXMgZmlsZSBjb250YWludHMgdGhlIENTUyBTdHlsZXMgZm9yIHRoZSB3b3Jrb3JkZXIgZ3JhcGguCiAqIE90aGVyIHBhcnRzIG9mIHRoYXQgYXJlIGR5bmFtaWNhbGx5IGNyZWF0ZWQgd2l0aGluIHRoZSBkdGwuCiAqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgV29ya29yZGVyIEdyYXBoCiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCi8qKgogKiBAc3Vic2VjdGlvbiAgV29ya29yZGVyIEdyYXBoCiAqLwoKZGl2LldvcmtvcmRlckdyYXBoQm94IHsKICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAzMHB4OwogICAgcGFkZGluZzogMXB4OwogICAgei1pbmRleDogMTAwOwp9CgpkaXYuV29ya29yZGVyR3JhcGggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcGFkZGluZy1ib3R0b206IDVweDsKfQoKZGl2LkxpbmVzU2NhbGVCb3ggewogICAgcG9zaXRpb246YWJzb2x1dGU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIHRvcDogMHB4OwogICAgbGVmdDogMHB4Owp9CgpkaXYuTGluZXNTY2FsZSB7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCmRpdi5UaW1lbGluZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBmb250LXNpemU6IDFweDsKICAgIHotaW5kZXg6IDI7Cn0KCmRpdi5TY2FsZVZlcnRpY2FsTGluZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyZXk7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICB3aWR0aDogMXB4OwogICAgZm9udC1zaXplOiAxcHg7CiAgICB6LWluZGV4OiAxOwp9CgpkaXYuV29ya29yZGVyTGFiZWwgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWFyZ2luLXJpZ2h0OiAycHg7CiAgICBmbG9hdDogbGVmdDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBoZWlnaHQ6IDE1cHg7CiAgICBwYWRkaW5nLXRvcDogM3B4OwogICAgcGFkZGluZy1ib3R0b206IDNweDsKICAgIGxpbmUtaGVpZ2h0OiAxNHB4Owp9CgouUlRMIGRpdi5Xb3Jrb3JkZXJMYWJlbCB7CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87CiAgICBtYXJnaW4tbGVmdDogMnB4OwogICAgZmxvYXQ6IHJpZ2h0OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7Cn0KCmRpdi5Xb3Jrb3JkZXJMYWJlbCAuRmxhZyB7CiAgICBmbG9hdDogbGVmdDsKICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIG1hcmdpbi10b3A6IDJweDsKfQoKLlJUTCBkaXYuV29ya29yZGVyTGFiZWwgLkZsYWcgewogICAgZmxvYXQ6IHJpZ2h0Owp9CgpkaXYuV29ya29yZGVyTGFiZWwgLkZsYWcgc3BhbiB7CiAgICBjdXJzb3I6IGF1dG87Cn0KCmRpdi5Xb3Jrb3JkZXIgewogICAgbWFyZ2luLWJvdHRvbTogNXB4Owp9CgpkaXYuV29ya29yZGVyIGEgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBwYWRkaW5nLXRvcDogM3B4OwogICAgcGFkZGluZy1ib3R0b206IDNweDsKICAgIGhlaWdodDogMTVweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKZGl2LldvcmtvcmRlciBhIHNwYW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogNXB4OwogICAgbWFyZ2luOiAxcHggYXV0byAycHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCmRpdi5Xb3Jrb3JkZXIgYSBzcGFuID4gc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGhlaWdodDogNXB4OwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwcHg7CiAgICBmb250LXNpemU6IDNweDsKICAgIHotaW5kZXg6IDQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5Xb3Jrb3JkZXJJbmFjdGl2ZSB7CiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHkgPSA1MCk7CiAgICBvcGFjaXR5OiAwLjU7Cn0KCmRpdi5Xb3Jrb3JkZXJEZXRhaWxzIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDJweDsKICAgIGxlZnQ6IDJweDsKICAgIHotaW5kZXg6IDU7CiAgICB3aWR0aDogNDAwcHg7CiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDJweDsKICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMnB4OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgI0NDQzsKICAgIGJhY2tncm91bmQtY29sb3I6ICNFRUU7CiAgICBwYWRkaW5nOiA2cHg7CiAgICAtbW96LWJveC1zaGFkb3c6IDRweCA0cHggNHB4ICM2NjY7CiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDRweCA0cHggNHB4ICM2NjY7CiAgICBib3gtc2hhZG93OiA0cHggNHB4IDRweCAjNjY2Owp9CgpkaXYuU2NhbGVIb3Jpem9udGFsIHsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBsaWdodGdyZXk7CiAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7Cn0KCmRpdi5TY2FsZUVudHJ5IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogM3B4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiA4cHQ7CiAgICB3aWR0aDogMTAlOwp9CgpkaXYuU2NhbGVFbnRyeVRhaWwgewogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKZGl2LlNjYWxlRW50cnlUcmFpbCB7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKfQoKLlJUTCBkaXYuU2NhbGVFbnRyeVRhaWwgewogICAgdGV4dC1hbGlnbjogcmlnaHQ7Cn0KCi5SVEwgZGl2LlNjYWxlRW50cnlUcmFpbCB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpkaXYuU2NhbGUwIHsKICAgIGxlZnQ6IDAlOwp9CgpkaXYuU2NhbGUxNSB7CiAgICBsZWZ0OiAxNSU7Cn0KCmRpdi5TY2FsZTIwIHsKICAgIGxlZnQ6IDIwJTsKfQoKZGl2LlNjYWxlMzUgewogICAgbGVmdDogMzUlOwp9CgpkaXYuU2NhbGU0MCB7CiAgICBsZWZ0OiA0MCU7Cn0KCmRpdi5TY2FsZTU1IHsKICAgIGxlZnQ6IDU1JTsKfQoKZGl2LlNjYWxlNjAgewogICAgbGVmdDogNjAlOwp9CgpkaXYuU2NhbGU3NSB7CiAgICBsZWZ0OiA3NSU7Cn0KCmRpdi5TY2FsZTgwIHsKICAgIGxlZnQ6IDgwJTsKfQoKZGl2LlNjYWxlOTAgewogICAgbGVmdDogOTAlOwp9CgpkaXYuU2NhbGUxMDAgewogICAgbGVmdDogOTkuOSU7Cn0KCi5SVEwgZGl2LlNjYWxlMCB7CiAgICBsZWZ0OiBhdXRvOwogICAgcmlnaHQ6IDAlOwp9CgouUlRMIGRpdi5TY2FsZTE1IHsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogMTUlOwp9CgouUlRMIGRpdi5TY2FsZTIwIHsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogMjAlOwp9CgouUlRMIGRpdi5TY2FsZTM1IHsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogMzUlOwp9CgouUlRMIGRpdi5TY2FsZTQwIHsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogNDAlOwp9CgouUlRMIGRpdi5TY2FsZTU1IHsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogNTUlOwp9CgouUlRMIGRpdi5TY2FsZTYwIHsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogNjAlOwp9CgouUlRMIGRpdi5TY2FsZTc1IHsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogNzUlOwp9CgouUlRMIGRpdi5TY2FsZTgwIHsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogODAlOwp9CgouUlRMIGRpdi5TY2FsZTkwIHsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogOTAlOwp9CgouUlRMIGRpdi5TY2FsZTEwMCB7CiAgICBsZWZ0OiBhdXRvOwogICAgcmlnaHQ6IDk5LjklOwp9Cgp9IC8qIGVuZCBAbWVkaWEgKi8=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEN1c3RvbWVyIEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCi8qKgogKiBAcGFja2FnZSAgICAgT1RSUyBGcmFtZXdvcmsgLSBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgQ3VzdG9tZXIKICovCgp0YWJsZS5JVFNNT3ZlcnZpZXcgewogICAgdG9wOiAtMXB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBjb2xvcjogIzQ0NDsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwICNGRkY7CiAgICB6b29tOiAxOwogICAgY2xlYXI6IGJvdGg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KLklUU01PdmVydmlldyB0aGVhZCB7CiAgICBiYWNrZ3JvdW5kOiAjQTdBQUFBIHVybCgiLi4vaW1nL0dyYWRpZW50U21hbGwucG5nIikgcmVwZWF0LXggMCAtMzFweDsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLlNvcnRhYmxlIHRoZWFkIHsKICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsKfQouU2VhcmNoUmVzdWx0cyB0aGVhZCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC01NHB4Owp9Ci5JVFNNT3ZlcnZpZXcgdGhlYWQgdGggewogICAgcGFkZGluZzogMDsKICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207CiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjOTk5OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM5OTk7Cn0KLlJUTCAuSVRTTU92ZXJ2aWV3IHRoZWFkIHRoIHsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzY2NjsKfQouSVRTTU92ZXJ2aWV3IHRoZWFkIC5TdGF0dXMgewogICAgcGFkZGluZy1sZWZ0OiAwOwp9Ci5JVFNNT3ZlcnZpZXcgdGhlYWQgYSB7CiAgICBwYWRkaW5nOiAxcHggMTNweCA0cHggOHB4OwogICAgaGVpZ2h0OiAxMHB4OwogICAgY29sb3I6ICM0NDQ7CiAgICBmb250LXNpemU6IDExcHg7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgZGlzcGxheTogYmxvY2s7CiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjRUVFOwp9CgouSVRTTU92ZXJ2aWV3IHRoZWFkIHNwYW4gewogICAgcGFkZGluZzogMXB4IDEzcHggNHB4IDhweDsKICAgIGhlaWdodDogMTBweDsKICAgIGNvbG9yOiAjNzc3OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI0VFRTsKfQoKLklUU01PdmVydmlldyB0aGVhZCAuU29ydEFzY2VuZGluZyBhLAouSVRTTU92ZXJ2aWV3IHRoZWFkIC5Tb3J0RGVzY2VuZGluZyBhIHsKICAgIGNvbG9yOiAjMjIyOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL3NvcnRhYmxlX2JnLnBuZykgbm8tcmVwZWF0IHRvcCByaWdodDsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwICNCQkI7Cn0KLklUU01PdmVydmlldyB0aGVhZCAuU29ydERlc2NlbmRpbmcgYSB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBib3R0b20gcmlnaHQ7Cn0KCi5JVFNNT3ZlcnZpZXcgdGJvZHkgewogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cn0KLklUU01PdmVydmlldyB0Ym9keSB0ciB7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0ZGRjsKfQouSVRTTU92ZXJ2aWV3IHRib2R5IHRyOmFjdGl2ZSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjREREOwp9Ci5JVFNNT3ZlcnZpZXcgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgewogICAgYm9yZGVyLXRvcDogbm9uZTsKfQouSVRTTU92ZXJ2aWV3IHRib2R5IHRyLkV2ZW4gewogICAgYmFja2dyb3VuZC1jb2xvcjogI0YzRjNGMzsKfQouSVRTTU92ZXJ2aWV3IHRib2R5IHRkIHsKICAgIHBhZGRpbmc6IDZweCA4cHggM3B4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGJvcmRlcjogMHB4IHNvbGlkOwp9Ci5JVFNNT3ZlcnZpZXcgdGJvZHkgYSB7CiAgICBjb2xvcjogIzQ0NDsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIG91dGxpbmU6IG5vbmU7Cn0KLklUU01PdmVydmlldyB0YWJsZSBhOmhvdmVyIHsKICAgIGNvbG9yOiAjMDAwOwp9Ci8qKgogKiBAc3Vic2VjdGlvbiAgVGFibGVEYXRhIFN0eWxlcwogKi8KLkNoYW5nZVN0YXRlSUQgewogICAgcGFkZGluZy1sZWZ0OiA4cHg7Cn0KCi5PdmVydmlldyB0aGVhZCB0aC5BZ2UgewogICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9Ci5SVEwgLk92ZXJ2aWV3IHRoZWFkIHRoLkFnZSB7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKfQovKioKICogQHN1YnNlY3Rpb24gIFRhYmxlIFN0eWxlIEFjdGl2ZQogKi8KCi5JVFNNT3ZlcnZpZXcgdGJvZHkgdHI6YWN0aXZlIHRkIHsKICAgIHBhZGRpbmc6IDdweCA4cHggMnB4OwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogYm90dG9tOwp9Ci5JVFNNT3ZlcnZpZXcgdGJvZHkgdHI6Zm9jdXMgKyB0ciB0ZCwKLklUU01PdmVydmlldyB0Ym9keSB0cjphY3RpdmUgKyB0ciB0ZCB7CiAgICBiYWNrZ3JvdW5kOiBub25lCn0KCn0gLyogZW5kIEBtZWRpYSAqLw==
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEN1c3RvbWVyIEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRGVmYXVsdCBTZXR0aW5ncwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gIEZsYWcKICovCgouRmxhZyB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCB1cmwoLi4vaW1nL2ZsYWdfc2hhZG93LnBuZykgbm8tcmVwZWF0IHNjcm9sbCAwIDA7CiAgICBoZWlnaHQ6IDE4cHg7CiAgICB3aWR0aDogMjRweDsKfQoKLkZsYWcuU21hbGwgewogICAgd2lkdGg6IDE3cHg7CiAgICBoZWlnaHQ6IDEwcHg7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBib3R0b20gcmlnaHQ7Cn0KCi5GbGFnIHNwYW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBtYXJnaW4tcmlnaHQ6IDJweDsKICAgIHRleHQtaW5kZW50OiAtOTk5OXB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgLyogc2V0IGEgZGVmYXVsdCBjb2xvciBmb3IgcHJpb3JpdGllcyAqLwogICAgYmFja2dyb3VuZC1jb2xvcjogI2NkY2RjZDsKfQoKLkZsYWcuU21hbGwgc3BhbiB7CiAgICBoZWlnaHQ6IDhweDsKfQoKCgp1bC5JVFNNRmxhZyB7CiAgICBtYXJnaW4tdG9wOiA1cHg7Cn0KCnVsLklUU01GbGFnIGRpdi5WYWx1ZSAuRmxhZyB7CiAgICBmbG9hdDogbGVmdDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLXRvcDogM3B4Owp9CgouSVRTTU92ZXJ2aWV3IC5GbGFnIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7Cn0KCi5SVEwgZmllbGRzZXQuVGFibGVMaWtlIGRpdi5WYWx1ZSAuRmxhZyB7CiAgICBmbG9hdDogcmlnaHQ7CiAgICBtYXJnaW4tbGVmdDogNXB4Owp9CgouRmxhZyBzcGFuLmdyYXlsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojY2RjZGNkOwp9CgouRmxhZyBzcGFuLmdyZWVubGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICM4YmVmNGQ7Cn0KCi5GbGFnIHNwYW4ueWVsbG93bGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmRkNTA7Cn0KCi5GbGFnIHNwYW4ucmVkbGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6I2ZmNTA1ZTsKfQoKLkZsYWcgc3Bhbi5wdXJwbGVsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojYjIzYWVlOwp9CgouRmxhZyBzcGFuLm9yYW5nZWxlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNmZjhjMDA7Cn0KCi5GbGFnIHNwYW4uY3lhbmxlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiM3OWNkY2Q7Cn0KCi5GbGFnIHNwYW4ud2hpdGVsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmOwp9CgouRmxhZyBzcGFuLmJsYWNrbGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IzAwMDAwMDsKfQoKLyoqCiAqIEBub3RlICAgICBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIGZvciBhIExhYmVsIGFuZCBhIERpdiB3aXRoIGNsYXNzICdGaWVsZCcsCiAqICAgICAgICAgICB0aGF0IGFyZSBpbnNpZGUgYSBGaWVsZCBEaXYgLgogKi8KCmxhYmVsLlN1YkVsZW1lbnQgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMCU7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4Owp9CgpkaXYuU3ViRWxlbWVudCB7CiAgICB3aWR0aDozNSU7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiBOb0RvdWJsZUJvcmRlcnMKICovCgouQ29udGVudC5Ob0RvdWJsZUJvcmRlcnMgewogICAgYm9yZGVyLWxlZnQ6IDAgbm9uZSAjMDAwMDAwOwogICAgYm9yZGVyLXJpZ2h0OiAwIG5vbmUgIzAwMDAwMDsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uICBTdGFuZGFyZCBXaWR0aHMKICovCi5XNXBjIHsKICAgIHdpZHRoOiA1JTsKfQoKLlcxNXBjIHsKICAgIHdpZHRoOiAxNSU7Cn0KCi5XMzBwYyB7CiAgICB3aWR0aDogMzAlOwp9Cgp9LyogZW5kIG1lZGlhICovCgoK
iVBORw0KGgoAAAANSUhEUgAAABgAAAASBAMAAACzwgOtAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAASUExURf///wAAAAAAAAAAAAAAAAAAAGScwJoAAAAGdFJOUwAKHSZWc59IcHQAAAAfSURBVAhbY2BAAEUkNoMTMid46HBUQuHAiUHIGA4UAaNuCtd5VfraAAAAAElFTkSuQmCC
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgdmFyOjpwYWNrYWdlc2V0dXA6OklUU01DaGFuZ2VNYW5hZ2VtZW50OyAgICAjIyBubyBjcml0aWMKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Ok91dHB1dDo6VGVtcGxhdGU6OlByb3ZpZGVyOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZFZhbHVlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpIaXN0b3J5JywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNoYW5nZUNJUEFsbG9jYXRlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01TdGF0ZU1hY2hpbmUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6Tm90aWZpY2F0aW9uJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6VGVtcGxhdGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3RhdHMnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OlhNTCcsCik7Cgo9aGVhZDEgTkFNRQoKSVRTTUNoYW5nZU1hbmFnZW1lbnQucG0gLSBjb2RlIHRvIGV4Y2VjdXRlIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbgoKPWhlYWQxIFNZTk9QU0lTCgpGdW5jdGlvbnMgZm9yIGluc3RhbGxpbmcgdGhlIElUU01DaGFuZ2VNYW5hZ2VtZW50IHBhY2thZ2UuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRDb2RlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgndmFyOjpwYWNrYWdlc2V0dXA6OklUU01DaGFuZ2VNYW5hZ2VtZW50Jyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgcmVidWlsZCBaWloqIGZpbGVzCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyktPldyaXRlRGVmYXVsdCgpOwoKICAgICMgZGVmaW5lIHRoZSBaWlogZmlsZXMKICAgIG15IEBaWlpGaWxlcyA9ICgKICAgICAgICAnWlpaQUF1dG8ucG0nLAogICAgICAgICdaWlpBdXRvLnBtJywKICAgICk7CgogICAgIyByZWxvYWQgdGhlIFpaWiBmaWxlcyAobW9kX3Blcmwgd29ya2Fyb3VuZCkKICAgIGZvciBteSAkWlpaRmlsZSAoQFpaWkZpbGVzKSB7CgogICAgICAgIFBSRUZJWDoKICAgICAgICBmb3IgbXkgJFByZWZpeCAoQElOQykgewogICAgICAgICAgICBteSAkRmlsZSA9ICRQcmVmaXggLiAnL0tlcm5lbC9Db25maWcvRmlsZXMvJyAuICRaWlpGaWxlOwogICAgICAgICAgICBuZXh0IFBSRUZJWCBpZiAhLWYgJEZpbGU7CiAgICAgICAgICAgIGRvICRGaWxlOwogICAgICAgICAgICBsYXN0IFBSRUZJWDsKICAgICAgICB9CiAgICB9CgogICAgIyBhbHdheXMgZGlzY2FyZCB0aGUgY29uZmlnIG9iamVjdCBiZWZvcmUgcGFja2FnZSBjb2RlIGlzIGV4ZWN1dGVkLAogICAgIyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY29uZmlnIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQgbmV3bHksIHNvIHRoYXQgaXQKICAgICMgd2lsbCB1c2UgdGhlIHJlY2VudGx5IHdyaXR0ZW4gbmV3IGNvbmZpZyBmcm9tIHRoZSBwYWNrYWdlCiAgICAkS2VybmVsOjpPTS0+T2JqZWN0c0Rpc2NhcmQoCiAgICAgICAgT2JqZWN0cyA9PiBbJ0tlcm5lbDo6Q29uZmlnJ10sCiAgICApOwoKICAgICMgdGhlIHN0YXRzIG9iamVjdCBuZWVkcyBhIFVzZXJJRCBwYXJhbWV0ZXIgZm9yIHRoZSBjb25zdHJ1Y3RvcgogICAgIyB3ZSBuZWVkIHRvIGRpc2NhcmQgYW55IGV4aXN0aW5nIHN0YXRzIG9iamVjdCBiZWZvcmUKICAgICRLZXJuZWw6Ok9NLT5PYmplY3RzRGlzY2FyZCgKICAgICAgICBPYmplY3RzID0+IFsnS2VybmVsOjpTeXN0ZW06OlN0YXRzJ10sCiAgICApOwoKICAgICMgZGVmaW5lIFVzZXJJRCBwYXJhbWV0ZXIgZm9yIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgc3RhdHMgb2JqZWN0CiAgICAkS2VybmVsOjpPTS0+T2JqZWN0UGFyYW1BZGQoCiAgICAgICAgJ0tlcm5lbDo6U3lzdGVtOjpTdGF0cycgPT4gewogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGRlZmluZSBmaWxlIHByZWZpeCBmb3Igc3RhdHMKICAgICRTZWxmLT57RmlsZVByZWZpeH0gPSAnSVRTTVN0YXRzJzsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIENvZGVJbnN0YWxsKCkKCnJ1biB0aGUgY29kZSBpbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVJbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZUluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFkZCB0aGUgZ3JvdXAgaXRzbS1jaGFuZ2UKICAgICRTZWxmLT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2l0c20tY2hhbmdlJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnR3JvdXAgZm9yIElUU00gQ2hhbmdlIG1hc2sgYWNjZXNzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJywKICAgICk7CgogICAgIyBhZGQgdGhlIGdyb3VwIGl0c20tY2hhbmdlLWJ1aWxkZXIKICAgICRTZWxmLT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2l0c20tY2hhbmdlLWJ1aWxkZXInLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdHcm91cCBmb3IgSVRTTSBDaGFuZ2UgQnVpbGRlcnMuJywKICAgICk7CgogICAgIyBhZGQgdGhlIGdyb3VwIGl0c20tY2hhbmdlLW1hbmFnZXIKICAgICRTZWxmLT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2l0c20tY2hhbmdlLW1hbmFnZXInLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdHcm91cCBmb3IgSVRTTSBDaGFuZ2UgTWFuYWdlcnMuJywKICAgICk7CgogICAgIyBpbnN0YWxsIHN0YXRzCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdHMnKS0+U3RhdHNJbnN0YWxsKAogICAgICAgIEZpbGVQcmVmaXggPT4gJFNlbGYtPntGaWxlUHJlZml4fSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgICMgc2V0IGRlZmF1bHQgQ0lQIG1hdHJpeAogICAgJFNlbGYtPl9DSVBEZWZhdWx0TWF0cml4U2V0KCk7CgogICAgIyBzZXQgZGVmYXVsdCBTdGF0ZU1hY2hpbmUgc2V0dGluZ3MKICAgICRTZWxmLT5fU3RhdGVNYWNoaW5lRGVmYXVsdFNldCgpOwoKICAgICMgYWRkIG5vdGlmaWNhdGlvbnMKICAgICRTZWxmLT5fQWRkTm90aWZpY2F0aW9ucygpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlUmVpbnN0YWxsKCkKCnJ1biB0aGUgY29kZSByZWluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVJlaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVSZWluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFkZCB0aGUgZ3JvdXAgaXRzbS1jaGFuZ2UKICAgICRTZWxmLT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2l0c20tY2hhbmdlJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnR3JvdXAgZm9yIElUU00gQ2hhbmdlIG1hc2sgYWNjZXNzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJywKICAgICk7CgogICAgIyBhZGQgdGhlIGdyb3VwIGl0c20tY2hhbmdlLWJ1aWxkZXIKICAgICRTZWxmLT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2l0c20tY2hhbmdlLWJ1aWxkZXInLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdHcm91cCBmb3IgSVRTTSBDaGFuZ2UgQnVpbGRlcnMuJywKICAgICk7CgogICAgIyBhZGQgdGhlIGdyb3VwIGl0c20tY2hhbmdlLW1hbmFnZXIKICAgICRTZWxmLT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ2l0c20tY2hhbmdlLW1hbmFnZXInLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdHcm91cCBmb3IgSVRTTSBDaGFuZ2UgTWFuYWdlcnMuJywKICAgICk7CgogICAgIyBpbnN0YWxsIHN0YXRzCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdHMnKS0+U3RhdHNJbnN0YWxsKAogICAgICAgIEZpbGVQcmVmaXggPT4gJFNlbGYtPntGaWxlUHJlZml4fSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgICMgc2V0IGRlZmF1bHQgQ0lQIG1hdHJpeAogICAgJFNlbGYtPl9DSVBEZWZhdWx0TWF0cml4U2V0KCk7CgogICAgIyBzZXQgZGVmYXVsdCBTdGF0ZU1hY2hpbmUgc2V0dGluZ3MKICAgICRTZWxmLT5fU3RhdGVNYWNoaW5lRGVmYXVsdFNldCgpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVXBncmFkZSgpCgpydW4gdGhlIGNvZGUgdXBncmFkZSBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZSgpOwoKPWN1dAoKc3ViIENvZGVVcGdyYWRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBpbnN0YWxsIHN0YXRzCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdHMnKS0+U3RhdHNJbnN0YWxsKAogICAgICAgIEZpbGVQcmVmaXggPT4gJFNlbGYtPntGaWxlUHJlZml4fSwKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKICAgICMgc2V0IGRlZmF1bHQgQ0lQIG1hdHJpeCAodGhpcyBpcyBvbmx5IGRvbmUgaWYgbm8gbWF0cml4IGV4aXN0cykKICAgICRTZWxmLT5fQ0lQRGVmYXVsdE1hdHJpeFNldCgpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fM18zXzkxKCkKClRoaXMgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBpZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSB2ZXJzaW9uIGlzIHNtYWxsZXIgdGhhbiAzLjMuOTEgKDQuMC4wIEJldGEgMSkuCgpteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl8zXzNfOTEoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fM18zXzkxIHsgICAgIyMgbm8gY3JpdGljCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgTWlncmF0ZSBjaGFuZ2UgYW5kIHdvcmtvcmRlciBmcmVldGV4dCBmaWVsZHMgdG8gZHluYW1pYyBmaWVsZHMuCiAgICAkU2VsZi0+X01pZ3JhdGVGcmVlVGV4dFRvRHluYW1pY0ZpZWxkcygpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzIoKQoKVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGV4ZWN1dGVkIGlmIHRoZSBpbnN0YWxsZWQgbW9kdWxlIHZlcnNpb24gaXMgc21hbGxlciB0aGFuIDQuMC4yLgoKbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzIoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzIgeyAgICAjIyBubyBjcml0aWMKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBtaWdyYXRlIHRoZSBEVEwgQ29udGVudCBpbiB0aGUgU3lzQ29uZmlnCiAgICAkU2VsZi0+X01pZ3JhdGVEVExJblN5c0NvbmZpZygpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxKCkKClRoaXMgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBpZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSB2ZXJzaW9uIGlzIHNtYWxsZXIgdGhhbiA0LjAuOTEgKDUuMC4wIEJldGEgMSkuCgpteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl80XzBfOTEoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxIHsgICAgIyMgbm8gY3JpdGljCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgbWlncmF0ZSBub3RpZmljYXRpb25zCiAgICAkU2VsZi0+X01pZ3JhdGVOb3RpZmljYXRpb25zKCk7CgogICAgIyBjaGFuZ2UgY29uZmlndXJhdGlvbnMgdG8gbWF0Y2ggdGhlIG5ldyBtb2R1bGUgbG9jYXRpb24uCiAgICAkU2VsZi0+X01pZ3JhdGVDb25maWdzKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl81XzBfMTIoKQoKVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGV4ZWN1dGVkIGlmIHRoZSBpbnN0YWxsZWQgbW9kdWxlIHZlcnNpb24gaXMgc21hbGxlciB0aGFuIDUuMC4xMi4KCm15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzVfMF8xMigpOwoKPWN1dAoKc3ViIENvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl81XzBfMTIgeyAgICAjIyBubyBjcml0aWMKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGFuZ2UgY29uZmlndXJhdGlvbnMgdG8gbWF0Y2ggYSBuZXcgSmF2YVNjcmlwdCBmaWxlIGxvY2F0aW9uCiAgICAkU2VsZi0+X01pZ3JhdGVDb25maWdzRnJvbUxvd2VyVGhhbl81XzBfMTIoKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29kZVVuaW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgdW5pbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVbmluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlVW5pbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkZWxldGUgYWxsIGxpbmtzIHdpdGggY2hhbmdlIGFuZCB3b3Jrb3JkZXIgb2JqZWN0cwogICAgJFNlbGYtPl9MaW5rRGVsZXRlKCk7CgogICAgIyBkZWxldGUgYWxsIGV4aXN0aW5nIGF0dGFjaG1lbnRzIGZvciBjaGFuZ2VzIGFuZCB3b3Jrb3JkZXJzCiAgICAkU2VsZi0+X0F0dGFjaG1lbnREZWxldGUoKTsKCiAgICAjIGRlbGV0ZSBhbGwgZHluYW1pYyBmaWVsZHMgZm9yIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMKICAgICRTZWxmLT5fRHluYW1pY0ZpZWxkc0RlbGV0ZSgpOwoKICAgICMgZGVhY3RpdmF0ZSB0aGUgZ3JvdXAgaXRzbS1jaGFuZ2UKICAgICRTZWxmLT5fR3JvdXBEZWFjdGl2YXRlKAogICAgICAgIE5hbWUgPT4gJ2l0c20tY2hhbmdlJywKICAgICk7CgogICAgIyBkZWFjdGl2YXRlIHRoZSBncm91cCBpdHNtLWNoYW5nZS1idWlsZGVyCiAgICAkU2VsZi0+X0dyb3VwRGVhY3RpdmF0ZSgKICAgICAgICBOYW1lID0+ICdpdHNtLWNoYW5nZS1idWlsZGVyJywKICAgICk7CgogICAgIyBkZWFjdGl2YXRlIHRoZSBncm91cCBpdHNtLWNoYW5nZS1tYW5hZ2VyCiAgICAkU2VsZi0+X0dyb3VwRGVhY3RpdmF0ZSgKICAgICAgICBOYW1lID0+ICdpdHNtLWNoYW5nZS1tYW5hZ2VyJywKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1iZWdpbiBJbnRlcm5hbDoKCj1pdGVtIF9NaWdyYXRlRnJlZVRleHRUb0R5bmFtaWNGaWVsZHMoKQoKTWlncmF0ZXMgdGhlIGNoYW5nZSBhbmQgd29ya29yZGVyIGZyZWV0ZXh0IGZpZWxkcyB0byBkeW5hbWljIGZpZWxkcy4KCiAgICBteSAkU3VjY2VzcyA9ICRQYWNrYWdlU2V0dXAtPl9NaWdyYXRlRnJlZVRleHRUb0R5bmFtaWNGaWVsZHMoKTsKCj1jdXQKCnN1YiBfTWlncmF0ZUZyZWVUZXh0VG9EeW5hbWljRmllbGRzIHsKICAgIG15ICgkU2VsZikgPSBAXzsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBNaWdyYXRlIGZyZWVrZXkgYW5kIGZyZWV0ZXh0IGZpZWxkcyB0byBkeW5hbWljIGZpZWxkcyAoanVzdCB0aGUgZmllbGRzLCB0aGUgZGF0YSBjb21lcyBsYXRlcikKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgYWxsIGNvbmZpZ3VyZWQgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgZnJlZWtleSBhbmQgZnJlZXRleHQgbnVtYmVycyBmcm9tIHN5c2NvbmZpZwogICAgbXkgQER5bmFtaWNGaWVsZHM7CiAgICBmb3IgbXkgJFR5cGUgKHF3KENoYW5nZSBXb3JrT3JkZXIpKSB7CgogICAgICAgIEZSRUVURVhUTlVNQkVSOgogICAgICAgIGZvciBteSAkTnVtYmVyICggMSAuLiA1MDAgKSB7CgogICAgICAgICAgICAjIGdldCBmcmVla2V5IGFuZCBmcmVldGV4dCBjb25maWcKICAgICAgICAgICAgbXkgJEZyZWVLZXlDb25maWcgID0gJENvbmZpZ09iamVjdC0+R2V0KCAkVHlwZSAuICdGcmVlS2V5JyAuICROdW1iZXIgKTsKICAgICAgICAgICAgbXkgJEZyZWVUZXh0Q29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCAkVHlwZSAuICdGcmVlVGV4dCcgLiAkTnVtYmVyICk7CgogICAgICAgICAgICAjIG9ubHkgaWYgYSBLRVkgY29uZmlnIGV4aXN0cwogICAgICAgICAgICBuZXh0IEZSRUVURVhUTlVNQkVSIGlmICEkRnJlZUtleUNvbmZpZzsKCiAgICAgICAgICAgICMgZGVmYXVsdCBsYWJlbCwgc2FtZSBsaWtlIHRoZSBuYW1lCiAgICAgICAgICAgIG15ICRMYWJlbCA9ICRUeXBlIC4gJ0ZyZWVUZXh0JyAuICROdW1iZXI7CgogICAgICAgICAgICAjIHRoZSBmcmVla2V5IGhhcyBtb3JlIHRoYW4gb25lIGVudHJ5LCB0aGVuIHdlIHdhbnQgdG8gY3JlYXRlCiAgICAgICAgICAgICMgaXQgYXMgaXQncyBvd24gZHluYW1pYyBmaWVsZAogICAgICAgICAgICBpZiAoIHJlZiAkRnJlZUtleUNvbmZpZyBlcSAnSEFTSCcgJiYgc2NhbGFyIGtleXMgJXskRnJlZUtleUNvbmZpZ30gPiAxICkgewoKICAgICAgICAgICAgICAgICMgZmluZCBvdXQgaWYgcG9zc2libGUgbm9uZSBtdXN0IGJlIHNldCBvciBub3QKICAgICAgICAgICAgICAgIG15ICRQb3NzaWJsZU5vbmUgPSAwOwogICAgICAgICAgICAgICAgaWYgKCAkRnJlZUtleUNvbmZpZy0+eycnfSAmJiAkRnJlZUtleUNvbmZpZy0+eycnfSBlcSAnLScgKSB7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRGcmVlS2V5Q29uZmlnLT57Jyd9OwogICAgICAgICAgICAgICAgICAgICRQb3NzaWJsZU5vbmUgPSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHB1c2ggQER5bmFtaWNGaWVsZHMsIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICRUeXBlIC4gJ0ZyZWVLZXknIC4gJE51bWJlciwKICAgICAgICAgICAgICAgICAgICBMYWJlbCAgICAgID0+ICRUeXBlIC4gJ0ZyZWVLZXknIC4gJE51bWJlciwKICAgICAgICAgICAgICAgICAgICBGaWVsZFR5cGUgID0+ICdEcm9wZG93bicsCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiAnSVRTTScgLiAkVHlwZSwKICAgICAgICAgICAgICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZhbHVlID0+ICRDb25maWdPYmplY3QtPkdldCggJFR5cGUgLiAnRnJlZUtleScgLiAkTnVtYmVyIC4gJzo6RGVmYXVsdFNlbGVjdGlvbicgKSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgTGluayAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gJFBvc3NpYmxlTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgICAgID0+ICRGcmVlS2V5Q29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGVWYWx1ZXMgPT4gMSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiB0aGUga2V5IGhhcyBvbmx5IG9uZSBwb3NzaWJsZSB2YWx1ZSBmb3IgdGhpcyBlbnRyeSB3ZSB1c2UgaXQgYXMgdGhlIGxhYmVsCiAgICAgICAgICAgICMgYW5kIHdlIGRvIE5PVCBjcmVhdGUgYW4gb3duIEZyZWVLRVkgZmllbGQsIG9ubHkgdGhlIEZyZWVURVhUIGZpZWxkIQogICAgICAgICAgICBlbHNpZiAoIHJlZiAkRnJlZUtleUNvbmZpZyBlcSAnSEFTSCcgJiYgc2NhbGFyIGtleXMgJXskRnJlZUtleUNvbmZpZ30gPT0gMSApIHsKCiAgICAgICAgICAgICAgICAjIGJ1dCB3ZSB0cnkgdG8gdGFrZSB0aGUgb25seSBlbnRyeSBvZiB0aGUgS0VZIGFzIGxhYmVsIQogICAgICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXskRnJlZUtleUNvbmZpZ30gKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkRnJlZUtleUNvbmZpZy0+eyRLZXl9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkTGFiZWwgPSAkRnJlZUtleUNvbmZpZy0+eyRLZXl9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBmcmVldGV4dCBjb25maWcgaXMgYSBoYXNoIC0+IHdlIG5lZWQgYSBkcm9wZG93bgogICAgICAgICAgICBpZiAoICRGcmVlVGV4dENvbmZpZyAmJiByZWYgJEZyZWVUZXh0Q29uZmlnIGVxICdIQVNIJyAmJiAleyRGcmVlVGV4dENvbmZpZ30gKSB7CgogICAgICAgICAgICAgICAgIyBmaW5kIG91dCBpZiBwb3NzaWJsZSBub25lIG11c3QgYmUgc2V0IG9yIG5vdAogICAgICAgICAgICAgICAgbXkgJFBvc3NpYmxlTm9uZSA9IDA7CiAgICAgICAgICAgICAgICBpZiAoICRGcmVlVGV4dENvbmZpZy0+eycnfSAmJiAkRnJlZVRleHRDb25maWctPnsnJ30gZXEgJy0nICkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkRnJlZVRleHRDb25maWctPnsnJ307CiAgICAgICAgICAgICAgICAgICAgJFBvc3NpYmxlTm9uZSA9IDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcHVzaCBARHluYW1pY0ZpZWxkcywgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFR5cGUgLiAnRnJlZVRleHQnIC4gJE51bWJlciwKICAgICAgICAgICAgICAgICAgICBMYWJlbCAgICAgID0+ICRMYWJlbCwKICAgICAgICAgICAgICAgICAgICBGaWVsZFR5cGUgID0+ICdEcm9wZG93bicsCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiAnSVRTTScgLiAkVHlwZSwKICAgICAgICAgICAgICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZhbHVlID0+ICRDb25maWdPYmplY3QtPkdldCggJFR5cGUgLiAnRnJlZVRleHQnIC4gJE51bWJlciAuICc6OkRlZmF1bHRTZWxlY3Rpb24nICkgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCggJFR5cGUgLiAnRnJlZVRleHQnIC4gJE51bWJlciAuICc6OkxpbmsnICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgICAgICAgPT4gJFBvc3NpYmxlTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgICAgID0+ICRGcmVlVGV4dENvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxlVmFsdWVzID0+IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgbm8gZnJlZXRleHQgY29uZmlnIC0+IHdlIG5lZWQgYSB0ZXh0IGZpZWxkCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgIHB1c2ggQER5bmFtaWNGaWVsZHMsIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICRUeXBlIC4gJ0ZyZWVUZXh0JyAuICROdW1iZXIsCiAgICAgICAgICAgICAgICAgICAgTGFiZWwgICAgICA9PiAkTGFiZWwsCiAgICAgICAgICAgICAgICAgICAgRmllbGRUeXBlICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiAnSVRTTScgLiAkVHlwZSwKICAgICAgICAgICAgICAgICAgICBDb25maWcgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZhbHVlID0+ICRDb25maWdPYmplY3QtPkdldCggJFR5cGUgLiAnRnJlZVRleHQnIC4gJE51bWJlciAuICc6OkRlZmF1bHRTZWxlY3Rpb24nICkgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgICAgIExpbmsgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCggJFR5cGUgLiAnRnJlZVRleHQnIC4gJE51bWJlciAuICc6OkxpbmsnICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICcnLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGFsbCBjdXJyZW50IGR5bmFtaWMgZmllbGRzCiAgICBteSAkRHluYW1pY0ZpZWxkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICAjIGdldCB0aGUgbGlzdCBvZiBvcmRlciBudW1iZXJzIChpcyBhbHJlYWR5IHNvcnRlZCkuCiAgICBteSBARHluYW1pY2ZpZWxkT3JkZXJMaXN0OwogICAgZm9yIG15ICREeW5hbWljZmllbGQgKCBAeyREeW5hbWljRmllbGRMaXN0fSApIHsKICAgICAgICBwdXNoIEBEeW5hbWljZmllbGRPcmRlckxpc3QsICREeW5hbWljZmllbGQtPntGaWVsZE9yZGVyfTsKICAgIH0KCiAgICAjIGdldCB0aGUgbGFzdCBlbGVtZW50IGZyb20gdGhlIG9yZGVyIGxpc3QgYW5kIGFkZCAxCiAgICBteSAkTmV4dE9yZGVyTnVtYmVyID0gMTsKICAgIGlmIChARHluYW1pY2ZpZWxkT3JkZXJMaXN0KSB7CiAgICAgICAgJE5leHRPcmRlck51bWJlciA9ICREeW5hbWljZmllbGRPcmRlckxpc3RbLTFdICsgMTsKICAgIH0KCiAgICAjIGdldCB0aGUgdmFsaWQgaWQgZm9yICJ2YWxpZCIKICAgIG15ICRWYWxpZElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTG9va3VwKAogICAgICAgIFZhbGlkID0+ICd2YWxpZCcsCiAgICApOwoKICAgICMgcmVtZW1iZXIgY3VycmVudCBzZXR0aW5nIGZvciBldmVudCBtb2R1bGUgY29uZmlndXJhdGlvbQogICAgbXkgJEV2ZW50TW9kdWxlQ29uZmlnID0gJENvbmZpZ09iamVjdC0+eydEeW5hbWljRmllbGQ6OkV2ZW50TW9kdWxlUG9zdCd9LT57JzEwMC1VcGRhdGVJVFNNQ2hhbmdlQ29uZGl0aW9ucyd9OwoKICAgICMgdGVtcG9yYXJ5IGRlbGV0ZSBldmVudCBtb2R1bGUgY29uZmlndXJhdGlvbgogICAgZGVsZXRlICRDb25maWdPYmplY3QtPnsnRHluYW1pY0ZpZWxkOjpFdmVudE1vZHVsZVBvc3QnfS0+eycxMDAtVXBkYXRlSVRTTUNoYW5nZUNvbmRpdGlvbnMnfTsKCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoQER5bmFtaWNGaWVsZHMpIHsKCiAgICAgICAgIyBjcmVhdGUgYSBuZXcgZmllbGQKICAgICAgICBteSAkRmllbGRJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkQWRkKAogICAgICAgICAgICBOYW1lICAgICAgID0+ICREeW5hbWljRmllbGQtPntOYW1lfSwKICAgICAgICAgICAgTGFiZWwgICAgICA9PiAkRHluYW1pY0ZpZWxkLT57TGFiZWx9LAogICAgICAgICAgICBGaWVsZE9yZGVyID0+ICROZXh0T3JkZXJOdW1iZXIsCiAgICAgICAgICAgIEZpZWxkVHlwZSAgPT4gJER5bmFtaWNGaWVsZC0+e0ZpZWxkVHlwZX0sCiAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gJER5bmFtaWNGaWVsZC0+e09iamVjdFR5cGV9LAogICAgICAgICAgICBDb25maWcgICAgID0+ICREeW5hbWljRmllbGQtPntDb25maWd9LAogICAgICAgICAgICBWYWxpZElEICAgID0+ICRWYWxpZElELAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJEZpZWxkSUQ7CgogICAgICAgICMgaW5jcmVhc2UgdGhlIG9yZGVyIG51bWJlcgogICAgICAgICROZXh0T3JkZXJOdW1iZXIrKzsKICAgIH0KCiAgICAjIHJlLWFjdGl2YXRlIHRoZSBjb25maWcgc2V0dGluZyBhZ2FpbgogICAgJENvbmZpZ09iamVjdC0+eydEeW5hbWljRmllbGQ6OkV2ZW50TW9kdWxlUG9zdCd9LT57JzEwMC1VcGRhdGVJVFNNQ2hhbmdlQ29uZGl0aW9ucyd9ID0gJEV2ZW50TW9kdWxlQ29uZmlnOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIE1pZ3JhdGUgdGhlIGNoYW5nZSBhbmQgd29ya29yZGVyIGRhdGEgZnJvbSBmcmVla2V5IGFuZCBmcmVldGV4dCBmaWVsZHMgdG8gZHluYW1pYyBmaWVsZHMKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgIyBnZXQgdGhlIGxpc3Qgb2YgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMKICAgICREeW5hbWljRmllbGRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlID0+IFsgJ0lUU01DaGFuZ2UnLCAnSVRTTVdvcmtPcmRlcicgXSwKICAgICk7CgogICAgIyBtaWdyYXRlIHRoZSBmcmVla2V5IGFuZCBmcmVldGV4dCBkYXRhCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewoKICAgICAgICAjIGdldCB0aGUgdGFibGUgcHJlZml4IGFuZCBjb2x1bW4gbmFtZSBiYXNlZCBvbiBjaGFuZ2Ugb3Igd29ya29yZGVyCiAgICAgICAgbXkgJFRhYmxlUHJlZml4OwogICAgICAgIG15ICRDb2x1bW5OYW1lOwogICAgICAgIGlmICggJER5bmFtaWNGaWVsZC0+e09iamVjdFR5cGV9IGVxICdJVFNNQ2hhbmdlJyApIHsKICAgICAgICAgICAgJFRhYmxlUHJlZml4ID0gJ2NoYW5nZV9mcmVlJzsKICAgICAgICAgICAgJENvbHVtbk5hbWUgID0gJ2NoYW5nZV9pZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJER5bmFtaWNGaWVsZC0+e09iamVjdFR5cGV9IGVxICdJVFNNV29ya09yZGVyJyApIHsKICAgICAgICAgICAgJFRhYmxlUHJlZml4ID0gJ2NoYW5nZV93b19mcmVlJzsKICAgICAgICAgICAgJENvbHVtbk5hbWUgID0gJ3dvcmtvcmRlcl9pZCc7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB0aGUgdHlwZSAoa2V5IG9yIHRleHQpIGFuZCB0aGUgbnVtYmVyIGZyb20gdGhlIG5hbWUKICAgICAgICBteSAkTnVtYmVyOwogICAgICAgIG15ICRUYWJsZU5hbWU7CiAgICAgICAgaWYgKCAkRHluYW1pY0ZpZWxkLT57TmFtZX0gPX4gbXsgXEEgKENoYW5nZXxXb3JrT3JkZXIpRnJlZShLZXl8VGV4dCkoXGQrKSBceiB9eG1zICkgewogICAgICAgICAgICAkVGFibGVOYW1lID0gJFRhYmxlUHJlZml4IC4gbGMoJDIpOwogICAgICAgICAgICAkTnVtYmVyICAgID0gJDM7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRDsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHRoZSBvbGQgZGF0YQogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICJTRUxFQ1QgJENvbHVtbk5hbWUsIGZpZWxkX3ZhbHVlCiAgICAgICAgICAgICAgICAgICAgRlJPTSAkVGFibGVOYW1lCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgZmllbGRfaWQgPSA/IiwKICAgICAgICAgICAgQmluZCA9PiBbIFwkTnVtYmVyIF0sCiAgICAgICAgKTsKCiAgICAgICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICAgICAgbXkgQERhdGE7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgcHVzaCBARGF0YSwgewogICAgICAgICAgICAgICAgT2JqZWN0SUQgPT4gJFJvd1swXSwKICAgICAgICAgICAgICAgIFZhbHVlICAgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAjIGluc2VydCBkYXRhIGludG8gZHluYW1pY19maWVsZF92YWx1ZSB0YWJsZQogICAgICAgIFJFQ09SRDoKICAgICAgICBmb3IgbXkgJFJlY29yZCAoQERhdGEpIHsKCiAgICAgICAgICAgIG5leHQgUkVDT1JEIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGR5bmFtaWNfZmllbGRfdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkX2lkLCBvYmplY3RfaWQsIHZhbHVlX3RleHQpCiAgICAgICAgICAgICAgICAgICAgICAgIFZBTFVFUyAoPywgPywgPyknLAogICAgICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICAgICAgXCREeW5hbWljRmllbGQtPntJRH0sCiAgICAgICAgICAgICAgICAgICAgXCRSZWNvcmQtPntPYmplY3RJRH0sCiAgICAgICAgICAgICAgICAgICAgXCRSZWNvcmQtPntWYWx1ZX0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBEZWxldGUgb2Jzb2xldGUgZnJlZWtleSBhbmQgZnJlZXRleHQgZmllbGQgYXR0cmlidXRlcyBmcm9tIGNvbmRpdGlvbnMKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgIyBidWlsZCBhIGxvb2t1cCBoYXNoIGZvciBhbGwgbmV3IGNyZWF0ZWQgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMKICAgIG15ICVEeW5hbWljRmllbGROYW1lOwogICAgZm9yIG15ICREeW5hbWljRmllbGQgKEBEeW5hbWljRmllbGRzKSB7CiAgICAgICAgJER5bmFtaWNGaWVsZE5hbWV7ICREeW5hbWljRmllbGQtPntOYW1lfSB9ID0gMTsKICAgIH0KCiAgICAjIGdldCBhbGwgY29uZGl0aW9uIGF0dHJpYnV0ZXMKICAgIG15ICRDb25kaXRpb25BdHRyaWJ1dGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Db25kaXRpb24nKS0+QXR0cmlidXRlTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyByZXZlcnNlIHRoZSBsaXN0IHRvIGxvb2t1cCBhdHRyaWJ1dGUgbmFtZXMKICAgIG15ICVBdHRyaWJ1dGUySUQgPSByZXZlcnNlICV7JENvbmRpdGlvbkF0dHJpYnV0ZXN9OwoKICAgIEFUVFJJQlVURToKICAgIGZvciBteSAkQXR0cmlidXRlICggc29ydCBrZXlzICVBdHRyaWJ1dGUySUQgKSB7CgogICAgICAgICMgd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBvbGQgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgZnJlZWtleSBhbmQgZnJlZXRleHQgYXR0cmlidXRlcwogICAgICAgIG5leHQgQVRUUklCVVRFIGlmICRBdHRyaWJ1dGUgIX4gbXsgXEEgKENoYW5nZXxXb3JrT3JkZXIpRnJlZShLZXl8VGV4dCkoXGQrKSBceiB9eG1zOwoKICAgICAgICAjIHJlbmFtZSB0aGUgYXR0cmlidXRlIChhZGQgYSBwcmVmaXggdG8gdGhlIGF0dHJpYnV0ZSkKICAgICAgICBpZiAoICREeW5hbWljRmllbGROYW1leyRBdHRyaWJ1dGV9ICkgewoKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNvbmRpdGlvbicpLT5BdHRyaWJ1dGVVcGRhdGUoCiAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJRCA9PiAkQXR0cmlidXRlMklEeyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ0R5bmFtaWNGaWVsZF8nIC4gJEF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHRoaXMgYXR0cmlidXRlIGRvZXMgbm90IGV4aXN0IGFzIGR5bmFtaWMgZmllbGQKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgZGVsZXRlIHRoaXMgYXR0cmlidXRlIGZyb20gZXhwcmVzc2lvbiB0YWJsZQogICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICdERUxFVEUgRlJPTSBjb25kaXRpb25fZXhwcmVzc2lvbgogICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBhdHRyaWJ1dGVfaWQgPSA/JywKICAgICAgICAgICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICAgICAgICAgIFwkQXR0cmlidXRlMklEeyRBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZGVsZXRlIHRoaXMgYXR0cmlidXRlIGZyb20gYWN0aW9uIHRhYmxlCiAgICAgICAgICAgIG5leHQgQVRUUklCVVRFIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gJ0RFTEVURSBGUk9NIGNvbmRpdGlvbl9hY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgYXR0cmlidXRlX2lkID0gPycsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgICAgICBcJEF0dHJpYnV0ZTJJRHskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGRlbGV0ZSB0aGlzIGF0dHJpYnV0ZSBmcm9tIGF0dHJpYnV0ZSB0YWJsZQogICAgICAgICAgICBuZXh0IEFUVFJJQlVURSBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICdERUxFVEUgRlJPTSBjb25kaXRpb25fYXR0cmlidXRlCiAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgICAgICBcJEF0dHJpYnV0ZTJJRHskQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAjIE1pZ3JhdGUgZnJlZXRleHQgc2NyZWVuIGNvbmZpZwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAjIG1pZ3JhdGUgY2hhbmdlIGZyZWV0ZXh0IGZyb250ZW5kIGNvbmZpZwogICAgQ09ORklHTkFNRToKICAgIGZvciBteSAkQ29uZmlnTmFtZSAoCiAgICAgICAgcXcoCiAgICAgICAgSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZUFkZAogICAgICAgIElUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2VFZGl0CiAgICAgICAgSVRTTUNoYW5nZTo6RnJvbnRlbmQ6OkFnZW50SVRTTUNoYW5nZVNlYXJjaAogICAgICAgIElUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01Xb3JrT3JkZXJBZGQKICAgICAgICBJVFNNV29ya09yZGVyOjpGcm9udGVuZDo6QWdlbnRJVFNNV29ya09yZGVyRWRpdAogICAgICAgIElUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjpBZ2VudElUU01Xb3JrT3JkZXJSZXBvcnQKICAgICAgICApCiAgICAgICAgKQogICAgewoKICAgICAgICBteSAkRmllbGRUeXBlOwogICAgICAgIG15ICRDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJENvbmZpZ05hbWUpOwogICAgICAgIGlmICggJENvbmZpZ05hbWUgPX4gbXsgQWdlbnRJVFNNV29ya09yZGVyIH14bXMgKSB7CiAgICAgICAgICAgICRGaWVsZFR5cGUgPSAnV29ya09yZGVyRnJlZVRleHQnOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJEZpZWxkVHlwZSA9ICdDaGFuZ2VGcmVlVGV4dCc7CiAgICAgICAgfQogICAgICAgICRDb25maWcgPSAkQ29uZmlnLT57JEZpZWxkVHlwZX07CgogICAgICAgIG15ICVOZXdTZXR0aW5nOwogICAgICAgIE5VTUJFUjoKICAgICAgICBmb3IgbXkgJE51bWJlciAoIHNvcnQga2V5cyAleyRDb25maWd9ICkgewoKICAgICAgICAgICAgbXkgJFZhbHVlID0gJENvbmZpZy0+eyROdW1iZXJ9OwoKICAgICAgICAgICAgbmV4dCBOVU1CRVIgaWYgISRWYWx1ZTsKCiAgICAgICAgICAgICROZXdTZXR0aW5neyAkRmllbGRUeXBlIC4gJE51bWJlciB9ID0gJFZhbHVlOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBDT05GSUdOQU1FIGlmICElTmV3U2V0dGluZzsKCiAgICAgICAgIyB1cGRhdGUgdGhlIHN5c2NvbmZpZwogICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpLT5Db25maWdJdGVtVXBkYXRlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAkQ29uZmlnTmFtZSAuICcjIyNEeW5hbWljRmllbGQnLAogICAgICAgICAgICBWYWx1ZSA9PiBcJU5ld1NldHRpbmcsCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAlQ2hhbmdlRHluYW1pY0ZpZWxkQ29uZmlnOwogICAgbXkgJVdvcmtvcmRlckR5bmFtaWNGaWVsZENvbmZpZzsKCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZCAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewoKICAgICAgICBpZiAoICREeW5hbWljRmllbGQtPntPYmplY3RUeXBlfSBlcSAnSVRTTUNoYW5nZScgKSB7CiAgICAgICAgICAgICRDaGFuZ2VEeW5hbWljRmllbGRDb25maWd7ICREeW5hbWljRmllbGQtPntOYW1lfSB9ID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkRHluYW1pY0ZpZWxkLT57T2JqZWN0VHlwZX0gZXEgJ0lUU01Xb3JrT3JkZXInICkgewogICAgICAgICAgICAkV29ya29yZGVyRHluYW1pY0ZpZWxkQ29uZmlneyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgc2hvdyBhbGwgY2hhbmdlIGR5bmFtaWMgZmllbGRzIGluIHRoZSBjaGFuZ2Ugem9vbQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpLT5Db25maWdJdGVtVXBkYXRlKAogICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgS2V5ICAgPT4gJ0lUU01DaGFuZ2U6OkZyb250ZW5kOjpBZ2VudElUU01DaGFuZ2Vab29tIyMjRHluYW1pY0ZpZWxkJywKICAgICAgICBWYWx1ZSA9PiBcJUNoYW5nZUR5bmFtaWNGaWVsZENvbmZpZywKICAgICk7CgogICAgIyBzaG93IGFsbCB3b3Jrb3JkZXIgZHluYW1pYyBmaWVsZHMgaW4gdGhlIHdvcmtvcmRlciB6b29tCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyktPkNvbmZpZ0l0ZW1VcGRhdGUoCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICBLZXkgICA9PiAnSVRTTVdvcmtPcmRlcjo6RnJvbnRlbmQ6OkFnZW50SVRTTVdvcmtPcmRlclpvb20jIyNEeW5hbWljRmllbGQnLAogICAgICAgIFZhbHVlID0+IFwlV29ya29yZGVyRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgKTsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIyBEZWxldGUgY2hhbmdlIGFuZCB3b3Jrb3JkZXIgZnJlZWtleSBhbmQgZnJlZXRleHQgdGFibGVzCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgbXkgQERyb3AgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+U1FMUHJvY2Vzc29yKAogICAgICAgIERhdGFiYXNlID0+IFsKCiAgICAgICAgICAgICMgZHJvcCB0YWJsZSBjaGFuZ2VfZnJlZWtleQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUYWcgICAgID0+ICdUYWJsZURyb3AnLAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAnY2hhbmdlX2ZyZWVrZXknLAogICAgICAgICAgICAgICAgVGFnVHlwZSA9PiAnU3RhcnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUYWcgICAgID0+ICdUYWJsZURyb3AnLAogICAgICAgICAgICAgICAgVGFnVHlwZSA9PiAnRW5kJywKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICMgZHJvcCB0YWJsZSBjaGFuZ2VfZnJlZXRleHQKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGFnICAgICA9PiAnVGFibGVEcm9wJywKICAgICAgICAgICAgICAgIE5hbWUgICAgPT4gJ2NoYW5nZV9mcmVldGV4dCcsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdTdGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlRHJvcCcsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdFbmQnLAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgIyBkcm9wIHRhYmxlIGNoYW5nZV93b19mcmVla2V5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlRHJvcCcsCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICdjaGFuZ2Vfd29fZnJlZWtleScsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdTdGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlRHJvcCcsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdFbmQnLAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgIyBkcm9wIHRhYmxlIGNoYW5nZV93b19mcmVldGV4dAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUYWcgICAgID0+ICdUYWJsZURyb3AnLAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAnY2hhbmdlX3dvX2ZyZWV0ZXh0JywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ1N0YXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGFnICAgICA9PiAnVGFibGVEcm9wJywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ0VuZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgICk7CgogICAgZm9yIG15ICRTUUwgKEBEcm9wKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4gJFNRTCwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfR3JvdXBBZGQoKQoKYWRkIGEgZ3JvdXAKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAndGhlLWdyb3VwLW5hbWUnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdUaGUgZ3JvdXAgZGVzY3JpcHRpb24uJywKICAgICk7Cgo9Y3V0CgpzdWIgX0dyb3VwQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgRGVzY3JpcHRpb24pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgIG15ICVWYWxpZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgICMgZ2V0IGxpc3Qgb2YgYWxsIGdyb3VwcwogICAgbXkgJUdyb3VwTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExpc3QoKTsKCiAgICAjIHJldmVyc2UgdGhlIGdyb3VwIGxpc3QgZm9yIGVhc2llciBsb29rdXAKICAgIG15ICVHcm91cExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlR3JvdXBMaXN0OwoKICAgICMgY2hlY2sgaWYgZ3JvdXAgYWxyZWFkeSBleGlzdHMKICAgIG15ICRHcm91cElEID0gJEdyb3VwTGlzdFJldmVyc2V7ICRQYXJhbXtOYW1lfSB9OwoKICAgICMgcmVhY3RpdmF0ZSB0aGUgZ3JvdXAKICAgIGlmICgkR3JvdXBJRCkgewoKICAgICAgICAjIGdldCBjdXJyZW50IGdyb3VwIGRhdGEKICAgICAgICBteSAlR3JvdXBEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwR2V0KAogICAgICAgICAgICBJRCAgICAgPT4gJEdyb3VwSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgcmVhY3RpdmF0ZSBncm91cAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cFVwZGF0ZSgKICAgICAgICAgICAgJUdyb3VwRGF0YSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIGFkZCB0aGUgZ3JvdXAKICAgIGVsc2UgewogICAgICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwQWRkKAogICAgICAgICAgICBOYW1lICAgID0+ICRQYXJhbXtOYW1lfSwKICAgICAgICAgICAgQ29tbWVudCA9PiAkUGFyYW17RGVzY3JpcHRpb259LAogICAgICAgICAgICBWYWxpZElEID0+ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBsb29rdXAgdGhlIG5ldyBncm91cCBpZAogICAgbXkgJE5ld0dyb3VwSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMb29rdXAoCiAgICAgICAgR3JvdXAgID0+ICRQYXJhbXtOYW1lfSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBhZGQgdXNlciByb290IHRvIHRoZSBncm91cAogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTWVtYmVyQWRkKAogICAgICAgIEdJRCAgICAgICAgPT4gJE5ld0dyb3VwSUQsCiAgICAgICAgVUlEICAgICAgICA9PiAxLAogICAgICAgIFBlcm1pc3Npb24gPT4gewogICAgICAgICAgICBybyAgICAgICAgPT4gMSwKICAgICAgICAgICAgbW92ZV9pbnRvID0+IDEsCiAgICAgICAgICAgIGNyZWF0ZSAgICA9PiAxLAogICAgICAgICAgICBvd25lciAgICAgPT4gMSwKICAgICAgICAgICAgcHJpb3JpdHkgID0+IDEsCiAgICAgICAgICAgIHJ3ICAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfR3JvdXBEZWFjdGl2YXRlKCkKCmRlYWN0aXZhdGUgYSBncm91cAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0dyb3VwRGVhY3RpdmF0ZSgKICAgICAgICBOYW1lID0+ICd0aGUtZ3JvdXAtbmFtZScsCiAgICApOwoKPWN1dAoKc3ViIF9Hcm91cERlYWN0aXZhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte05hbWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBOYW1lIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBsb29rdXAgZ3JvdXAgaWQKICAgIG15ICRHcm91cElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTG9va3VwKAogICAgICAgIEdyb3VwID0+ICRQYXJhbXtOYW1lfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkR3JvdXBJRDsKCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAjIGdldCBjdXJyZW50IGdyb3VwIGRhdGEKICAgIG15ICVHcm91cERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBHZXQoCiAgICAgICAgSUQgICAgID0+ICRHcm91cElELAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGRlYWN0aXZhdGUgZ3JvdXAKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cFVwZGF0ZSgKICAgICAgICAlR3JvdXBEYXRhLAogICAgICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdFJldmVyc2V7aW52YWxpZH0sCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0NJUERlZmF1bHRNYXRyaXhTZXQoKQoKc2V0IHRoZSBkZWZhdWx0IENJUCBtYXRyaXgKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9DSVBEZWZhdWx0TWF0cml4U2V0KCk7Cgo9Y3V0CgpzdWIgX0NJUERlZmF1bHRNYXRyaXhTZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjdXJyZW50IGFsbG9jYXRpb24gbGlzdAogICAgbXkgJExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTUNoYW5nZUNJUEFsbG9jYXRlJyktPkFsbG9jYXRlTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkTGlzdDsKICAgIHJldHVybiBpZiByZWYgJExpc3QgbmUgJ0hBU0gnOwoKICAgICMgc2V0IG5vIG1hdHJpeCBpZiBhbHJlYWR5IGRlZmluZWQKICAgIHJldHVybiBpZiAleyRMaXN0fTsKCiAgICAjIGRlZmluZSB0aGUgYWxsb2NhdGlvbnMKICAgICMgJEFsbG9jYXRpb257SW1wYWN0fS0+e0NhdGVnb3J5fSA9IFByaW9yaXR5CiAgICBteSAlQWxsb2NhdGlvbjsKICAgICRBbGxvY2F0aW9ueycxIHZlcnkgbG93J30tPnsnMSB2ZXJ5IGxvdyd9ICAgPSAnMSB2ZXJ5IGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMSB2ZXJ5IGxvdyd9LT57JzIgbG93J30gICAgICAgID0gJzEgdmVyeSBsb3cnOwogICAgJEFsbG9jYXRpb257JzEgdmVyeSBsb3cnfS0+eyczIG5vcm1hbCd9ICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMSB2ZXJ5IGxvdyd9LT57JzQgaGlnaCd9ICAgICAgID0gJzIgbG93JzsKICAgICRBbGxvY2F0aW9ueycxIHZlcnkgbG93J30tPnsnNSB2ZXJ5IGhpZ2gnfSAgPSAnMyBub3JtYWwnOwogICAgJEFsbG9jYXRpb257JzIgbG93J30tPnsnMSB2ZXJ5IGxvdyd9ICAgICAgICA9ICcxIHZlcnkgbG93JzsKICAgICRBbGxvY2F0aW9ueycyIGxvdyd9LT57JzIgbG93J30gICAgICAgICAgICAgPSAnMiBsb3cnOwogICAgJEFsbG9jYXRpb257JzIgbG93J30tPnsnMyBub3JtYWwnfSAgICAgICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMiBsb3cnfS0+eyc0IGhpZ2gnfSAgICAgICAgICAgID0gJzMgbm9ybWFsJzsKICAgICRBbGxvY2F0aW9ueycyIGxvdyd9LT57JzUgdmVyeSBoaWdoJ30gICAgICAgPSAnNCBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyczIG5vcm1hbCd9LT57JzEgdmVyeSBsb3cnfSAgICAgPSAnMiBsb3cnOwogICAgJEFsbG9jYXRpb257JzMgbm9ybWFsJ30tPnsnMiBsb3cnfSAgICAgICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMyBub3JtYWwnfS0+eyczIG5vcm1hbCd9ICAgICAgID0gJzMgbm9ybWFsJzsKICAgICRBbGxvY2F0aW9ueyczIG5vcm1hbCd9LT57JzQgaGlnaCd9ICAgICAgICAgPSAnNCBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyczIG5vcm1hbCd9LT57JzUgdmVyeSBoaWdoJ30gICAgPSAnNCBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyc0IGhpZ2gnfS0+eycxIHZlcnkgbG93J30gICAgICAgPSAnMiBsb3cnOwogICAgJEFsbG9jYXRpb257JzQgaGlnaCd9LT57JzIgbG93J30gICAgICAgICAgICA9ICczIG5vcm1hbCc7CiAgICAkQWxsb2NhdGlvbnsnNCBoaWdoJ30tPnsnMyBub3JtYWwnfSAgICAgICAgID0gJzQgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnNCBoaWdoJ30tPnsnNCBoaWdoJ30gICAgICAgICAgID0gJzQgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnNCBoaWdoJ30tPnsnNSB2ZXJ5IGhpZ2gnfSAgICAgID0gJzUgdmVyeSBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyc1IHZlcnkgaGlnaCd9LT57JzEgdmVyeSBsb3cnfSAgPSAnMyBub3JtYWwnOwogICAgJEFsbG9jYXRpb257JzUgdmVyeSBoaWdoJ30tPnsnMiBsb3cnfSAgICAgICA9ICc0IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzUgdmVyeSBoaWdoJ30tPnsnMyBub3JtYWwnfSAgICA9ICc0IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzUgdmVyeSBoaWdoJ30tPnsnNCBoaWdoJ30gICAgICA9ICc1IHZlcnkgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnNSB2ZXJ5IGhpZ2gnfS0+eyc1IHZlcnkgaGlnaCd9ID0gJzUgdmVyeSBoaWdoJzsKCiAgICAjIGdldCBpbXBhY3QgbGlzdAogICAgbXkgJEltcGFjdExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkltcGFjdCcsCiAgICApOwogICAgbXkgJUltcGFjdExpc3RSZXZlcnNlID0gcmV2ZXJzZSAleyRJbXBhY3RMaXN0fTsKCiAgICAjIGdldCBjYXRlZ29yeSBsaXN0CiAgICBteSAkQ2F0ZWdvcnlMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDYXRlZ29yeScsCiAgICApOwogICAgbXkgJUNhdGVnb3J5TGlzdFJldmVyc2UgPSByZXZlcnNlICV7JENhdGVnb3J5TGlzdH07CgogICAgIyBnZXQgcHJpb3JpdHkgbGlzdAogICAgbXkgJFByaW9yaXR5TGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6UHJpb3JpdHknLAogICAgKTsKICAgIG15ICVQcmlvcml0eUxpc3RSZXZlcnNlID0gcmV2ZXJzZSAleyRQcmlvcml0eUxpc3R9OwoKICAgICMgY3JlYXRlIHRoZSBhbGxvY2F0aW9uIG1hdHJpeAogICAgbXkgJUFsbG9jYXRpb25NYXRyaXg7CiAgICBJTVBBQ1Q6CiAgICBmb3IgbXkgJEltcGFjdCAoIHNvcnQga2V5cyAlQWxsb2NhdGlvbiApIHsKCiAgICAgICAgbmV4dCBJTVBBQ1QgaWYgISRJbXBhY3RMaXN0UmV2ZXJzZXskSW1wYWN0fTsKCiAgICAgICAgIyBleHRyYWN0IGltcGFjdCBpZAogICAgICAgIG15ICRJbXBhY3RJRCA9ICRJbXBhY3RMaXN0UmV2ZXJzZXskSW1wYWN0fTsKCiAgICAgICAgQ0FURUdPUlk6CiAgICAgICAgZm9yIG15ICRDYXRlZ29yeSAoIHNvcnQga2V5cyAleyAkQWxsb2NhdGlvbnskSW1wYWN0fSB9ICkgewoKICAgICAgICAgICAgbmV4dCBDQVRFR09SWSBpZiAhJENhdGVnb3J5TGlzdFJldmVyc2V7JENhdGVnb3J5fTsKCiAgICAgICAgICAgICMgZXh0cmFjdCBwcmlvcml0eQogICAgICAgICAgICBteSAkUHJpb3JpdHkgPSAkQWxsb2NhdGlvbnskSW1wYWN0fS0+eyRDYXRlZ29yeX07CgogICAgICAgICAgICBuZXh0IENBVEVHT1JZIGlmICEkUHJpb3JpdHlMaXN0UmV2ZXJzZXskUHJpb3JpdHl9OwoKICAgICAgICAgICAgIyBleHRyYWN0IGNyaXRpY2FsaXR5IGlkIGFuZCBwcmlvcml0eSBpZAogICAgICAgICAgICBteSAkQ2F0ZWdvcnlJRCA9ICRDYXRlZ29yeUxpc3RSZXZlcnNleyRDYXRlZ29yeX07CiAgICAgICAgICAgIG15ICRQcmlvcml0eUlEID0gJFByaW9yaXR5TGlzdFJldmVyc2V7JFByaW9yaXR5fTsKCiAgICAgICAgICAgICRBbGxvY2F0aW9uTWF0cml4eyRJbXBhY3RJRH0tPnskQ2F0ZWdvcnlJRH0gPSAkUHJpb3JpdHlJRDsKICAgICAgICB9CiAgICB9CgogICAgIyBzYXZlIHRoZSBtYXRyaXgKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNQ2hhbmdlQ0lQQWxsb2NhdGUnKS0+QWxsb2NhdGVVcGRhdGUoCiAgICAgICAgQWxsb2NhdGVEYXRhID0+IFwlQWxsb2NhdGlvbk1hdHJpeCwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9TdGF0ZU1hY2hpbmVEZWZhdWx0U2V0KCkKCnNldCB0aGUgZGVmYXVsdCBzdGF0ZSBtYWNoaW5lCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fU3RhdGVNYWNoaW5lRGVmYXVsdFNldCgpOwoKPWN1dAoKc3ViIF9TdGF0ZU1hY2hpbmVEZWZhdWx0U2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgdGhlIGNoYW5nZSBzdGF0ZXMgZnJvbSB0aGUgZ2VuZXJhbCBjYXRhbG9nCiAgICBteSAlTmFtZTJDaGFuZ2VTdGF0ZUlEID0gcmV2ZXJzZSAlewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNoYW5nZU1hbmFnZW1lbnQ6OkNoYW5nZTo6U3RhdGUnLAogICAgICAgICAgICApCiAgICB9OwoKICAgICMgZ2V0IHRoZSB3b3Jrb3JkZXIgc3RhdGVzIGZyb20gdGhlIGdlbmVyYWwgY2F0YWxvZwogICAgbXkgJU5hbWUyV29ya09yZGVyU3RhdGVJRCA9IHJldmVyc2UgJXsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpXb3JrT3JkZXI6OlN0YXRlJywKICAgICAgICAgICAgKQogICAgfTsKCiAgICAjIGRlZmluZSBDaGFuZ2VTdGF0ZSB0cmFuc2l0aW9ucwogICAgbXkgJUNoYW5nZVN0YXRlVHJhbnNpdGlvbnMgPSAoCiAgICAgICAgMCAgICAgICAgICAgICAgICAgID0+IFsncmVxdWVzdGVkJ10sCiAgICAgICAgJ3JlcXVlc3RlZCcgICAgICAgID0+IFsgJ3JlamVjdGVkJywgJ3JldHJhY3RlZCcsICdwZW5kaW5nIGFwcHJvdmFsJywgJ2luIHByb2dyZXNzJyBdLAogICAgICAgICdwZW5kaW5nIGFwcHJvdmFsJyA9PiBbICdyZWplY3RlZCcsICdyZXRyYWN0ZWQnLCAnYXBwcm92ZWQnIF0sCiAgICAgICAgJ2FwcHJvdmVkJyAgICAgICAgID0+IFsgJ3JldHJhY3RlZCcsICdpbiBwcm9ncmVzcycgXSwKICAgICAgICAnaW4gcHJvZ3Jlc3MnICAgICAgPT4gWyAncGVuZGluZyBwaXInLCAncmV0cmFjdGVkJywgJ2ZhaWxlZCcsICdzdWNjZXNzZnVsJywgJ2NhbmNlbGVkJyBdLAogICAgICAgICdwZW5kaW5nIHBpcicgICAgICA9PiBbICdmYWlsZWQnLCAnc3VjY2Vzc2Z1bCcgXSwKICAgICAgICAncmVqZWN0ZWQnICAgICAgICAgPT4gWzBdLAogICAgICAgICdyZXRyYWN0ZWQnICAgICAgICA9PiBbMF0sCiAgICAgICAgJ2ZhaWxlZCcgICAgICAgICAgID0+IFswXSwKICAgICAgICAnc3VjY2Vzc2Z1bCcgICAgICAgPT4gWzBdLAogICAgICAgICdjYW5jZWxlZCcgICAgICAgICA9PiBbMF0sCiAgICApOwoKICAgICMgZGVmaW5lIFdvcmtPcmRlclN0YXRlIHRyYW5zaXRpb25zCiAgICBteSAlV29ya09yZGVyU3RhdGVUcmFuc2l0aW9ucyA9ICgKICAgICAgICAwICAgICAgICAgICAgID0+IFsnY3JlYXRlZCddLAogICAgICAgICdjcmVhdGVkJyAgICAgPT4gWyAnYWNjZXB0ZWQnLCAnY2FuY2VsZWQnIF0sCiAgICAgICAgJ2FjY2VwdGVkJyAgICA9PiBbICdyZWFkeScsICdjYW5jZWxlZCcgXSwKICAgICAgICAncmVhZHknICAgICAgID0+IFsgJ2luIHByb2dyZXNzJywgJ2NhbmNlbGVkJyBdLAogICAgICAgICdpbiBwcm9ncmVzcycgPT4gWyAnY2xvc2VkJywgJ2NhbmNlbGVkJyBdLAogICAgICAgICdjYW5jZWxlZCcgICAgPT4gWzBdLAogICAgICAgICdjbG9zZWQnICAgICAgPT4gWzBdLAogICAgKTsKCiAgICAjIGluc2VydCBDaGFuZ2VTdGF0ZSB0cmFuc2l0aW9ucyBpbnRvIGRhdGFiYXNlCiAgICBmb3IgbXkgJFN0YXRlICggc29ydCBrZXlzICVDaGFuZ2VTdGF0ZVRyYW5zaXRpb25zICkgewoKICAgICAgICBmb3IgbXkgJE5leHRTdGF0ZSAoIEB7ICRDaGFuZ2VTdGF0ZVRyYW5zaXRpb25zeyRTdGF0ZX0gfSApIHsKCiAgICAgICAgICAgICMgYWRkIHN0YXRlIHRyYW5zaXRpb24KICAgICAgICAgICAgbXkgJFRyYW5zaXRpb25JRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNU3RhdGVNYWNoaW5lJyktPlN0YXRlVHJhbnNpdGlvbkFkZCgKICAgICAgICAgICAgICAgIFN0YXRlSUQgICAgID0+ICROYW1lMkNoYW5nZVN0YXRlSUR7JFN0YXRlfSAgICAgfHwgMCwKICAgICAgICAgICAgICAgIE5leHRTdGF0ZUlEID0+ICROYW1lMkNoYW5nZVN0YXRlSUR7JE5leHRTdGF0ZX0gfHwgMCwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdJVFNNOjpDaGFuZ2VNYW5hZ2VtZW50OjpDaGFuZ2U6OlN0YXRlJywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBpbnNlcnQgV29ya09yZGVyU3RhdGUgdHJhbnNpdGlvbnMgaW50byBkYXRhYmFzZQogICAgZm9yIG15ICRTdGF0ZSAoIHNvcnQga2V5cyAlV29ya09yZGVyU3RhdGVUcmFuc2l0aW9ucyApIHsKCiAgICAgICAgZm9yIG15ICROZXh0U3RhdGUgKCBAeyAkV29ya09yZGVyU3RhdGVUcmFuc2l0aW9uc3skU3RhdGV9IH0gKSB7CgogICAgICAgICAgICAjIGFkZCBzdGF0ZSB0cmFuc2l0aW9uCiAgICAgICAgICAgIG15ICRUcmFuc2l0aW9uSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6SVRTTVN0YXRlTWFjaGluZScpLT5TdGF0ZVRyYW5zaXRpb25BZGQoCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICA9PiAkTmFtZTJXb3JrT3JkZXJTdGF0ZUlEeyRTdGF0ZX0gICAgIHx8IDAsCiAgICAgICAgICAgICAgICBOZXh0U3RhdGVJRCA9PiAkTmFtZTJXb3JrT3JkZXJTdGF0ZUlEeyROZXh0U3RhdGV9IHx8IDAsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnSVRTTTo6Q2hhbmdlTWFuYWdlbWVudDo6V29ya09yZGVyOjpTdGF0ZScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfTGlua0RlbGV0ZSgpCgpkZWxldGUgYWxsIGV4aXN0aW5nIGxpbmtzIHdpdGggY2hhbmdlIGFuZCB3b3Jrb3JkZXIgb2JqZWN0cwoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0xpbmtEZWxldGUoKTsKCj1jdXQKCnN1YiBfTGlua0RlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGFsbCBjaGFuZ2Ugb2JqZWN0IGlkcwogICAgbXkgJENoYW5nZUlEcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICMgZGVsZXRlIGFsbCBjaGFuZ2UgbGlua3MKICAgIGlmICggJENoYW5nZUlEcyAmJiByZWYgJENoYW5nZUlEcyBlcSAnQVJSQVknICkgewoKICAgICAgICBDSEFOR0VJRDoKICAgICAgICBmb3IgbXkgJENoYW5nZUlEICggQHskQ2hhbmdlSURzfSApIHsKCiAgICAgICAgICAgICMgZGVsZXRlIGFsbCBsaW5rcyB0byB0aGlzIGNoYW5nZQogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rRGVsZXRlQWxsKAogICAgICAgICAgICAgICAgT2JqZWN0ID0+ICdJVFNNQ2hhbmdlJywKICAgICAgICAgICAgICAgIEtleSAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IGFsbCB3b3Jrb3JkZXIgaWRzIGZvciB0aGlzIGNoYW5nZQogICAgICAgICAgICBteSAkV29ya09yZGVySURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyTGlzdCgKICAgICAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IENIQU5HRUlEIGlmICEkV29ya09yZGVySURzOwogICAgICAgICAgICBuZXh0IENIQU5HRUlEIGlmIHJlZiAkV29ya09yZGVySURzIG5lICdBUlJBWSc7CgogICAgICAgICAgICAjIGRlbGV0ZSBhbGwgd29ya29yZGVyIGxpbmtzCiAgICAgICAgICAgIGZvciBteSAkV29ya09yZGVySUQgKCBAeyRXb3JrT3JkZXJJRHN9ICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+TGlua0RlbGV0ZUFsbCgKICAgICAgICAgICAgICAgICAgICBPYmplY3QgPT4gJ0lUU01Xb3JrT3JkZXInLAogICAgICAgICAgICAgICAgICAgIEtleSAgICA9PiAkV29ya09yZGVySUQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfQXR0YWNobWVudERlbGV0ZSgpCgpkZWxldGUgYWxsIGV4aXN0aW5nIGF0dGFjaG1lbnRzIGZvciBjaGFuZ2VzIGFuZCB3b3Jrb3JkZXJzCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fQXR0YWNobWVudERlbGV0ZSgpOwoKPWN1dAoKc3ViIF9BdHRhY2htZW50RGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgYWxsIGNoYW5nZSBvYmplY3QgaWRzCiAgICBteSAkQ2hhbmdlSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2UnKS0+Q2hhbmdlTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgZm9yIG15ICRDaGFuZ2VJRCAoIEB7JENoYW5nZUlEc30gKSB7CgogICAgICAgICMgZ2V0IHRoZSBsaXN0IG9mIGFsbCBjaGFuZ2UgYXR0YWNobWVudHMKICAgICAgICBteSBAQ2hhbmdlQXR0YWNobWVudHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZScpLT5DaGFuZ2VBdHRhY2htZW50TGlzdCgKICAgICAgICAgICAgQ2hhbmdlSUQgPT4gJENoYW5nZUlELAogICAgICAgICk7CgogICAgICAgICMgZGVsZXRlIGFsbCBjaGFuZ2UgYXR0YWNobWVudHMKICAgICAgICBmb3IgbXkgJEZpbGVuYW1lIChAQ2hhbmdlQXR0YWNobWVudHMpIHsKCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlJyktPkNoYW5nZUF0dGFjaG1lbnREZWxldGUoCiAgICAgICAgICAgICAgICBDaGFuZ2VJRCA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICBGaWxlbmFtZSA9PiAkRmlsZW5hbWUsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYWxsIHdvcmtvcmRlciBpZHMgZm9yIHRoaXMgY2hhbmdlCiAgICAgICAgbXkgJFdvcmtPcmRlcklEcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlckxpc3QoCiAgICAgICAgICAgIENoYW5nZUlEID0+ICRDaGFuZ2VJRCwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJFdvcmtPcmRlcklEICggQHskV29ya09yZGVySURzfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBsaXN0IG9mIGFsbCB3b3Jrb3JkZXIgYXR0YWNobWVudHMKICAgICAgICAgICAgbXkgQFdvcmtPcmRlckF0dGFjaG1lbnRzCiAgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlckF0dGFjaG1lbnRMaXN0KAogICAgICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZGVsZXRlIGFsbCB3b3Jrb3JkZXIgYXR0YWNobWVudHMKICAgICAgICAgICAgZm9yIG15ICRGaWxlbmFtZSAoQFdvcmtPcmRlckF0dGFjaG1lbnRzKSB7CgogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OklUU01Xb3JrT3JkZXInKS0+V29ya09yZGVyQXR0YWNobWVudERlbGV0ZSgKICAgICAgICAgICAgICAgICAgICBDaGFuZ2VJRCAgICAgICA9PiAkQ2hhbmdlSUQsCiAgICAgICAgICAgICAgICAgICAgV29ya09yZGVySUQgICAgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgICAgIEZpbGVuYW1lICAgICAgID0+ICRGaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBBdHRhY2htZW50VHlwZSA9PiAnV29ya09yZGVyJywKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgdGhlIGxpc3Qgb2YgYWxsIHdvcmtvcmRlciByZXBvcnQgYXR0YWNobWVudHMKICAgICAgICAgICAgbXkgQFJlcG9ydEF0dGFjaG1lbnRzCiAgICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlclJlcG9ydEF0dGFjaG1lbnRMaXN0KAogICAgICAgICAgICAgICAgV29ya09yZGVySUQgPT4gJFdvcmtPcmRlcklELAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZGVsZXRlIGFsbCB3b3Jrb3JkZXIgcmVwb3J0IGF0dGFjaG1lbnRzCiAgICAgICAgICAgIGZvciBteSAkRmlsZW5hbWUgKEBSZXBvcnRBdHRhY2htZW50cykgewoKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpJVFNNV29ya09yZGVyJyktPldvcmtPcmRlckF0dGFjaG1lbnREZWxldGUoCiAgICAgICAgICAgICAgICAgICAgQ2hhbmdlSUQgICAgICAgPT4gJENoYW5nZUlELAogICAgICAgICAgICAgICAgICAgIFdvcmtPcmRlcklEICAgID0+ICRXb3JrT3JkZXJJRCwKICAgICAgICAgICAgICAgICAgICBGaWxlbmFtZSAgICAgICA9PiAkRmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgQXR0YWNobWVudFR5cGUgPT4gJ1dvcmtPcmRlclJlcG9ydCcsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9EeW5hbWljRmllbGRzRGVsZXRlKCkKCmRlbGV0ZSBhbGwgZXhpc3RpbmcgZHluYW1pYyBmaWVsZHMgZm9yIGNoYW5nZXMgYW5kIHdvcmtvcmRlcnMKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9EeW5hbWljRmllbGRzRGVsZXRlKCk7Cgo9Y3V0CgpzdWIgX0R5bmFtaWNGaWVsZHNEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CiAgICBteSAkRHluYW1pY0ZpZWxkVmFsdWVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkVmFsdWUnKTsKCiAgICAjIGdldCB0aGUgbGlzdCBvZiBjaGFuZ2UgYW5kIHdvcmtvcmRlciBkeW5hbWljIGZpZWxkcyAodmFsaWQgYW5kIGludmFsaWQgb25lcykKICAgIG15ICREeW5hbWljRmllbGRMaXN0ID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgID0+IDAsCiAgICAgICAgT2JqZWN0VHlwZSA9PiBbICdJVFNNQ2hhbmdlJywgJ0lUU01Xb3JrT3JkZXInIF0sCiAgICApOwoKICAgICMgZGVsZXRlIHRoZSBkeW5hbWljIGZpZWxkcwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCBAeyREeW5hbWljRmllbGRMaXN0fSApIHsKCiAgICAgICAgIyBkZWxldGUgYWxsIGZpZWxkIHZhbHVlcwogICAgICAgIG15ICRWYWx1ZXNEZWxldGVTdWNjZXNzID0gJER5bmFtaWNGaWVsZFZhbHVlT2JqZWN0LT5BbGxWYWx1ZXNEZWxldGUoCiAgICAgICAgICAgIEZpZWxkSUQgPT4gJER5bmFtaWNGaWVsZC0+e0lEfSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgdmFsdWVzIGNvdWxkIGJlIGRlbGV0ZWQKICAgICAgICBpZiAoJFZhbHVlc0RlbGV0ZVN1Y2Nlc3MpIHsKCiAgICAgICAgICAgICMgZGVsZXRlIGZpZWxkCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkRGVsZXRlKAogICAgICAgICAgICAgICAgSUQgICAgID0+ICREeW5hbWljRmllbGQtPntJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgZXJyb3IKICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgZGVsZXRlIGR5bmFtaWMgZmllbGQgJyREeW5hbWljRmllbGQtPntOYW1lfSchIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdmFsdWVzIGNvdWxkIG5vdCBiZSBkZWxldGVkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgZGVsZXRlIHZhbHVlcyBmb3IgZHluYW1pYyBmaWVsZCAnJER5bmFtaWNGaWVsZC0+e05hbWV9JyEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0FkZE5vdGlmaWNhdGlvbnMoKQoKQWRkIENoYW5nZU1hbmFnZW1lbnQgc3BlY2lmaWMgbm90aWZpY2F0aW9ucy4KCiAgICBteSAkU3VjY2VzcyA9ICRTZXR1cE9iamVjdC0+X0FkZE5vdGlmaWNhdGlvbnM7Cgo9Y3V0CgpzdWIgX0FkZE5vdGlmaWNhdGlvbnMgewogICAgbXkgKCRTZWxmKSA9IEBfOwoKICAgICMgU2V0IHVwIHNvbWUgc3RhbmRhcmQgdGV4dHMgZm9yIEVuZ2xpc2gsIEdlcm1hbiwgSHVuZ2FyaWFuIGFuZCBEdXRjaCwgQ2hhbmdlIGFuZCBXb3JrT3JkZXIsIGFnZW50IGFuZCBjdXN0b21lcgogICAgIyBUaGUgY3VzdG9tZXIgdGV4dHMgcHJvdmlkZSBubyBsaW5rLgoKICAgICMgQ2hhbmdlIGluZm8gZm9yIGFnZW50cyAoZW4pCiAgICBteSAkQ2hhbmdlSW5mb0FnZW50RW4gPSAiXG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiQ2hhbmdlIHRpdGxlOiA8T1RSU19DSEFOR0VfQ2hhbmdlVGl0bGU+XG4iCiAgICAgICAgLiAiQ2hhbmdlIGJ1aWxkZXI6IDxPVFJTX0NIQU5HRV9DaGFuZ2VCdWlsZGVyPlxuIgogICAgICAgIC4gIkNoYW5nZSBtYW5hZ2VyOiA8T1RSU19DSEFOR0VfQ2hhbmdlTWFuYWdlcj5cbiIKICAgICAgICAuICJDdXJyZW50IGNoYW5nZSBzdGF0ZTogPE9UUlNfQ0hBTkdFX0NoYW5nZVN0YXRlPlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIjxPVFJTX0NPTkZJR19IdHRwVHlwZT46Ly88T1RSU19DT05GSUdfRlFETj4vPE9UUlNfQ09ORklHX1NjcmlwdEFsaWFzPmluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2Vab29tO0NoYW5nZUlEPTxPVFJTX0NIQU5HRV9DaGFuZ2VJRD5cbiIKICAgICAgICAuICJcbiIKICAgICAgICAuICItLSA8T1RSU19DT05GSUdfTm90aWZpY2F0aW9uU2VuZGVyTmFtZT5cbiI7CgogICAgIyBDaGFuZ2UgaW5mbyBmb3IgY3VzdG9tZXJzIChlbikKICAgIG15ICRDaGFuZ2VJbmZvQ3VzdG9tZXJFbiA9ICJcbiIKICAgICAgICAuICJcbiIKICAgICAgICAuICJDaGFuZ2UgdGl0bGU6IDxPVFJTX0NIQU5HRV9DaGFuZ2VUaXRsZT5cbiIKICAgICAgICAuICJDdXJyZW50IGNoYW5nZSBzdGF0ZTogPE9UUlNfQ0hBTkdFX0NoYW5nZVN0YXRlPlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIi0tIDxPVFJTX0NPTkZJR19Ob3RpZmljYXRpb25TZW5kZXJOYW1lPlxuIjsKCiAgICAjIENoYW5nZSBpbmZvIGZvciBhZ2VudHMgKGRlKQogICAgbXkgJENoYW5nZUluZm9BZ2VudERlID0gIlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIkNoYW5nZSBUaXRlbDogPE9UUlNfQ0hBTkdFX0NoYW5nZVRpdGxlPlxuIgogICAgICAgIC4gIkNoYW5nZS1CdWlsZGVyOiA8T1RSU19DSEFOR0VfQ2hhbmdlQnVpbGRlcj5cbiIKICAgICAgICAuICJDaGFuZ2UtTWFuYWdlcjogPE9UUlNfQ0hBTkdFX0NoYW5nZU1hbmFnZXI+XG4iCiAgICAgICAgLiAiQWt0dWVsbGVyIENoYW5nZSBTdGF0dXM6IDxPVFJTX0NIQU5HRV9DaGFuZ2VTdGF0ZT5cbiIKICAgICAgICAuICJcbiIKICAgICAgICAuICI8T1RSU19DT05GSUdfSHR0cFR5cGU+Oi8vPE9UUlNfQ09ORklHX0ZRRE4+LzxPVFJTX0NPTkZJR19TY3JpcHRBbGlhcz5pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ2hhbmdlWm9vbTtDaGFuZ2VJRD08T1RSU19DSEFOR0VfQ2hhbmdlSUQ+XG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiLS0gPE9UUlNfQ09ORklHX05vdGlmaWNhdGlvblNlbmRlck5hbWU+XG4iOwoKICAgICMgQ2hhbmdlIGluZm8gZm9yIGN1c3RvbWVycyAoZGUpCiAgICBteSAkQ2hhbmdlSW5mb0N1c3RvbWVyRGUgPSAiXG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiQ2hhbmdlIFRpdGVsOiA8T1RSU19DSEFOR0VfQ2hhbmdlVGl0bGU+XG4iCiAgICAgICAgLiAiQWt0dWVsbGVyIENoYW5nZSBTdGF0dXM6IDxPVFJTX0NIQU5HRV9DaGFuZ2VTdGF0ZT5cbiIKICAgICAgICAuICJcbiIKICAgICAgICAuICItLSA8T1RSU19DT05GSUdfTm90aWZpY2F0aW9uU2VuZGVyTmFtZT5cbiI7CgogICAgIyBDaGFuZ2UgaW5mbyBmb3IgYWdlbnRzIChodSkKICAgIG15ICRDaGFuZ2VJbmZvQWdlbnRIdSA9ICJcbiIKICAgICAgICAuICJcbiIKICAgICAgICAuICJWw6FsdG96w6FzY8OtbTogPE9UUlNfQ0hBTkdFX0NoYW5nZVRpdGxlPlxuIgogICAgICAgIC4gIlbDoWx0b3rDoXMtw7Zzc3plw6FsbMOtdMOzOiA8T1RSU19DSEFOR0VfQ2hhbmdlQnVpbGRlcj5cbiIKICAgICAgICAuICJWw6FsdG96w6FzbWVuZWR6c2VyOiA8T1RSU19DSEFOR0VfQ2hhbmdlTWFuYWdlcj5cbiIKICAgICAgICAuICJKZWxlbmxlZ2kgdsOhbHRvesOhc8OhbGxhcG90OiA8T1RSU19DSEFOR0VfQ2hhbmdlU3RhdGU+XG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiPE9UUlNfQ09ORklHX0h0dHBUeXBlPjovLzxPVFJTX0NPTkZJR19GUUROPi88T1RSU19DT05GSUdfU2NyaXB0QWxpYXM+aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9PE9UUlNfQ0hBTkdFX0NoYW5nZUlEPlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIi0tIDxPVFJTX0NPTkZJR19Ob3RpZmljYXRpb25TZW5kZXJOYW1lPlxuIjsKCiAgICAjIENoYW5nZSBpbmZvIGZvciBjdXN0b21lcnMgKGh1KQogICAgbXkgJENoYW5nZUluZm9DdXN0b21lckh1ID0gIlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIlbDoWx0b3rDoXNjw61tOiA8T1RSU19DSEFOR0VfQ2hhbmdlVGl0bGU+XG4iCiAgICAgICAgLiAiSmVsZW5sZWdpIHbDoWx0b3rDoXPDoWxsYXBvdDogPE9UUlNfQ0hBTkdFX0NoYW5nZVN0YXRlPlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIi0tIDxPVFJTX0NPTkZJR19Ob3RpZmljYXRpb25TZW5kZXJOYW1lPlxuIjsKCiAgICAjIENoYW5nZSBpbmZvIGZvciBhZ2VudHMgKG5sKQogICAgbXkgJENoYW5nZUluZm9BZ2VudE5sID0gIlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIkNoYW5nZS10aXRlbDogPE9UUlNfQ0hBTkdFX0NoYW5nZVRpdGxlPlxuIgogICAgICAgIC4gIkNoYW5nZS1CdWlsZGVyOiA8T1RSU19DSEFOR0VfQ2hhbmdlQnVpbGRlcj5cbiIKICAgICAgICAuICJDaGFuZ2UtTWFuYWdlcjogPE9UUlNfQ0hBTkdFX0NoYW5nZU1hbmFnZXI+XG4iCiAgICAgICAgLiAiQWN0dWVsZSBjaGFuZ2Utc3RhdHVzOiA8T1RSU19DSEFOR0VfQ2hhbmdlU3RhdGU+XG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiPE9UUlNfQ09ORklHX0h0dHBUeXBlPjovLzxPVFJTX0NPTkZJR19GUUROPi88T1RSU19DT05GSUdfU2NyaXB0QWxpYXM+aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9PE9UUlNfQ0hBTkdFX0NoYW5nZUlEPlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIi0tIDxPVFJTX0NPTkZJR19Ob3RpZmljYXRpb25TZW5kZXJOYW1lPlxuIjsKCiAgICAjIENoYW5nZSBpbmZvIGZvciBjdXN0b21lcnMgKG5sKQogICAgbXkgJENoYW5nZUluZm9DdXN0b21lck5sID0gIlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIkNoYW5nZS10aXRlbDogPE9UUlNfQ0hBTkdFX0NoYW5nZVRpdGxlPlxuIgogICAgICAgIC4gIkFjdHVlbGUgY2hhbmdlLXN0YXR1czogPE9UUlNfQ0hBTkdFX0NoYW5nZVN0YXRlPlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIi0tIDxPVFJTX0NPTkZJR19Ob3RpZmljYXRpb25TZW5kZXJOYW1lPlxuIjsKCiAgICAjIFdvcmtvcmRlciBpbmZvIGZvciBjdXN0b21lcnMgKGVuKQogICAgbXkgJFdvcmtPcmRlckluZm9DdXN0b21lckVuID0gIlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIkNoYW5nZSB0aXRsZTogPE9UUlNfQ0hBTkdFX0NoYW5nZVRpdGxlPlxuIgogICAgICAgIC4gIkN1cnJlbnQgY2hhbmdlIHN0YXRlOiA8T1RSU19DSEFOR0VfQ2hhbmdlU3RhdGU+XG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiV29ya29yZGVyIHRpdGxlOiA8T1RSU19XT1JLT1JERVJfV29ya09yZGVyVGl0bGU+XG4iCiAgICAgICAgLiAiV29ya29yZGVyIHR5cGU6IDxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJUeXBlPlxuIgogICAgICAgIC4gIldvcmtvcmRlciBhZ2VudDogPE9UUlNfV09SS09SREVSX1dvcmtPcmRlckFnZW50PlxuIgogICAgICAgIC4gIkN1cnJlbnQgd29ya29yZGVyIHN0YXRlOiA8T1RSU19XT1JLT1JERVJfV29ya09yZGVyU3RhdGU+XG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiLS0gPE9UUlNfQ09ORklHX05vdGlmaWNhdGlvblNlbmRlck5hbWU+XG4iOwoKICAgICMgV29ya29yZGVyIGluZm8gZm9yIGFnZW50cyAoZW4pCiAgICBteSAkV29ya09yZGVySW5mb0FnZW50RW4gPSAiXG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiQ2hhbmdlIHRpdGxlOiA8T1RSU19DSEFOR0VfQ2hhbmdlVGl0bGU+XG4iCiAgICAgICAgLiAiQ3VycmVudCBjaGFuZ2Ugc3RhdGU6IDxPVFJTX0NIQU5HRV9DaGFuZ2VTdGF0ZT5cbiIKICAgICAgICAuICJcbiIKICAgICAgICAuICJXb3Jrb3JkZXIgdGl0bGU6IDxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJUaXRsZT5cbiIKICAgICAgICAuICJXb3Jrb3JkZXIgdHlwZTogPE9UUlNfV09SS09SREVSX1dvcmtPcmRlclR5cGU+XG4iCiAgICAgICAgLiAiQ3VycmVudCB3b3Jrb3JkZXIgc3RhdGU6IDxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJTdGF0ZT5cbiIKICAgICAgICAuICJcbiIKICAgICAgICAuICI8T1RSU19DT05GSUdfSHR0cFR5cGU+Oi8vPE9UUlNfQ09ORklHX0ZRRE4+LzxPVFJTX0NPTkZJR19TY3JpcHRBbGlhcz5pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNV29ya09yZGVyWm9vbTtXb3JrT3JkZXJJRD08T1RSU19XT1JLT1JERVJfV29ya09yZGVySUQ+XG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiLS0gPE9UUlNfQ09ORklHX05vdGlmaWNhdGlvblNlbmRlck5hbWU+XG4iOwoKICAgICMgV29ya29yZGVyIGluZm8gZm9yIGFnZW50cyAoZGUpCiAgICBteSAkV29ya09yZGVySW5mb0FnZW50RGUgPSAiXG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiQ2hhbmdlIFRpdGVsOiA8T1RSU19DSEFOR0VfQ2hhbmdlVGl0bGU+XG4iCiAgICAgICAgLiAiQWt0dWVsbGVyIENoYW5nZSBTdGF0dXM6IDxPVFJTX0NIQU5HRV9DaGFuZ2VTdGF0ZT5cbiIKICAgICAgICAuICJcbiIKICAgICAgICAuICJXb3Jrb3JkZXIgVGl0ZWw6IDxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJUaXRsZT5cbiIKICAgICAgICAuICJXb3Jrb3JkZXIgVHlwOiA8T1RSU19XT1JLT1JERVJfV29ya09yZGVyVHlwZT5cbiIKICAgICAgICAuICJXb3Jrb3JkZXIgQWdlbnQ6IDxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJBZ2VudD5cbiIKICAgICAgICAuICJBa3R1ZWxsZXIgV29ya29yZGVyIFN0YXR1czogPE9UUlNfV09SS09SREVSX1dvcmtPcmRlclN0YXRlPlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIjxPVFJTX0NPTkZJR19IdHRwVHlwZT46Ly88T1RSU19DT05GSUdfRlFETj4vPE9UUlNfQ09ORklHX1NjcmlwdEFsaWFzPmluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01Xb3JrT3JkZXJab29tO1dvcmtPcmRlcklEPTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJJRD5cbiIKICAgICAgICAuICJcbiIKICAgICAgICAuICItLSA8T1RSU19DT05GSUdfTm90aWZpY2F0aW9uU2VuZGVyTmFtZT5cbiI7CgogICAgIyBXb3Jrb3JkZXIgaW5mbyBmb3IgY3VzdG9tZXJzIChkZSkKICAgIG15ICRXb3JrT3JkZXJJbmZvQ3VzdG9tZXJEZSA9ICJcbiIKICAgICAgICAuICJcbiIKICAgICAgICAuICJDaGFuZ2UgVGl0ZWw6IDxPVFJTX0NIQU5HRV9DaGFuZ2VUaXRsZT5cbiIKICAgICAgICAuICJBa3R1ZWxsZXIgQ2hhbmdlIFN0YXR1czogPE9UUlNfQ0hBTkdFX0NoYW5nZVN0YXRlPlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIldvcmtvcmRlciBUaXRlbDogPE9UUlNfV09SS09SREVSX1dvcmtPcmRlclRpdGxlPlxuIgogICAgICAgIC4gIldvcmtvcmRlciBUeXA6IDxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJUeXBlPlxuIgogICAgICAgIC4gIkFrdHVlbGxlciBXb3Jrb3JkZXIgU3RhdHVzOiA8T1RSU19XT1JLT1JERVJfV29ya09yZGVyU3RhdGU+XG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiLS0gPE9UUlNfQ09ORklHX05vdGlmaWNhdGlvblNlbmRlck5hbWU+XG4iOwoKICAgICMgV29ya29yZGVyIGluZm8gZm9yIGN1c3RvbWVycyAoaHUpCiAgICBteSAkV29ya09yZGVySW5mb0N1c3RvbWVySHUgPSAiXG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiVsOhbHRvesOhc2PDrW06IDxPVFJTX0NIQU5HRV9DaGFuZ2VUaXRsZT5cbiIKICAgICAgICAuICJKZWxlbmxlZ2kgdsOhbHRvesOhc8OhbGxhcG90OiA8T1RSU19DSEFOR0VfQ2hhbmdlU3RhdGU+XG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiTXVua2FtZWdyZW5kZWzDqXMtY8OtbTogPE9UUlNfV09SS09SREVSX1dvcmtPcmRlclRpdGxlPlxuIgogICAgICAgIC4gIk11bmthbWVncmVuZGVsw6lzLXTDrXB1czogPE9UUlNfV09SS09SREVSX1dvcmtPcmRlclR5cGU+XG4iCiAgICAgICAgLiAiTXVua2FtZWdyZW5kZWzDqXMtw7xneWludMOpesWROiA8T1RSU19XT1JLT1JERVJfV29ya09yZGVyQWdlbnQ+XG4iCiAgICAgICAgLiAiSmVsZW5sZWdpIG11bmthbWVncmVuZGVsw6lzLcOhbGxhcG90OiA8T1RSU19XT1JLT1JERVJfV29ya09yZGVyU3RhdGU+XG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiLS0gPE9UUlNfQ09ORklHX05vdGlmaWNhdGlvblNlbmRlck5hbWU+XG4iOwoKICAgICMgV29ya29yZGVyIGluZm8gZm9yIGFnZW50cyAoaHUpCiAgICBteSAkV29ya09yZGVySW5mb0FnZW50SHUgPSAiXG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiVsOhbHRvesOhc2PDrW06IDxPVFJTX0NIQU5HRV9DaGFuZ2VUaXRsZT5cbiIKICAgICAgICAuICJKZWxlbmxlZ2kgdsOhbHRvesOhc8OhbGxhcG90OiA8T1RSU19DSEFOR0VfQ2hhbmdlU3RhdGU+XG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiTXVua2FtZWdyZW5kZWzDqXMtY8OtbTogPE9UUlNfV09SS09SREVSX1dvcmtPcmRlclRpdGxlPlxuIgogICAgICAgIC4gIk11bmthbWVncmVuZGVsw6lzLXTDrXB1czogPE9UUlNfV09SS09SREVSX1dvcmtPcmRlclR5cGU+XG4iCiAgICAgICAgLiAiSmVsZW5sZWdpIG11bmthbWVncmVuZGVsw6lzLcOhbGxhcG90OiA8T1RSU19XT1JLT1JERVJfV29ya09yZGVyU3RhdGU+XG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiPE9UUlNfQ09ORklHX0h0dHBUeXBlPjovLzxPVFJTX0NPTkZJR19GUUROPi88T1RSU19DT05GSUdfU2NyaXB0QWxpYXM+aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlclpvb207V29ya09yZGVySUQ9PE9UUlNfV09SS09SREVSX1dvcmtPcmRlcklEPlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIi0tIDxPVFJTX0NPTkZJR19Ob3RpZmljYXRpb25TZW5kZXJOYW1lPlxuIjsKCiAgICAjIFdvcmtvcmRlciBpbmZvIGZvciBhZ2VudHMgKG5sKQogICAgbXkgJFdvcmtPcmRlckluZm9BZ2VudE5sID0gIlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIkNoYW5nZS10aXRlbDogPE9UUlNfQ0hBTkdFX0NoYW5nZVRpdGxlPlxuIgogICAgICAgIC4gIkFjdHVlbGUgY2hhbmdlLXN0YXR1czogPE9UUlNfQ0hBTkdFX0NoYW5nZVN0YXRlPlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIldvcmsgT3JkZXItdGl0ZWw6IDxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJUaXRsZT5cbiIKICAgICAgICAuICJXb3JrIE9yZGVyLXR5cGU6IDxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJUeXBlPlxuIgogICAgICAgIC4gIldvcmsgT3JkZXItYWdlbnQ6IDxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJBZ2VudD5cbiIKICAgICAgICAuICJBY3R1ZWxlIFdvcmsgT3JkZXItc3RhdHVzOiA8T1RSU19XT1JLT1JERVJfV29ya09yZGVyU3RhdGU+XG4iCiAgICAgICAgLiAiXG4iCiAgICAgICAgLiAiPE9UUlNfQ09ORklHX0h0dHBUeXBlPjovLzxPVFJTX0NPTkZJR19GUUROPi88T1RSU19DT05GSUdfU2NyaXB0QWxpYXM+aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTVdvcmtPcmRlclpvb207V29ya09yZGVySUQ9PE9UUlNfV09SS09SREVSX1dvcmtPcmRlcklEPlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIi0tIDxPVFJTX0NPTkZJR19Ob3RpZmljYXRpb25TZW5kZXJOYW1lPlxuIjsKCiAgICAjIFdvcmtvcmRlciBpbmZvIGZvciBjdXN0b21lcnMgKG5sKQogICAgbXkgJFdvcmtPcmRlckluZm9DdXN0b21lck5sID0gIlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIkNoYW5nZS10aXRlbDogPE9UUlNfQ0hBTkdFX0NoYW5nZVRpdGxlPlxuIgogICAgICAgIC4gIkFjdHVlbGUgY2hhbmdlLXN0YXR1czogPE9UUlNfQ0hBTkdFX0NoYW5nZVN0YXRlPlxuIgogICAgICAgIC4gIlxuIgogICAgICAgIC4gIldvcmsgT3JkZXItdGl0ZWw6IDxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJUaXRsZT5cbiIKICAgICAgICAuICJXb3JrIE9yZGVyLXR5cGU6IDxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJUeXBlPlxuIgogICAgICAgIC4gIkFjdHVlbGUgV29yayBPcmRlci1zdGF0dXM6IDxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJTdGF0ZT5cbiIKICAgICAgICAuICJcbiIKICAgICAgICAuICItLSA8T1RSU19DT05GSUdfTm90aWZpY2F0aW9uU2VuZGVyTmFtZT5cbiI7CgogICAgIyBkZWZpbmUgbm90aWZpY2F0aW9ucyBhbmQgcmVjaXBpZW50cwogICAgbXkgQE5vdGlmaWNhdGlvbnMgPSAoCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgPT4gJ3JlcXVlc3RlZCBjaGFuZ2VzJywKICAgICAgICAgICAgQXR0cmlidXRlID0+ICcnLAogICAgICAgICAgICBFdmVudCAgICAgPT4gJ0NoYW5nZUFkZCcsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ2luZm9ybSByZWNpcGllbnRzIHRoYXQgYSBjaGFuZ2Ugd2FzIHJlcXVlc3RlZCcsCiAgICAgICAgICAgIFJ1bGUgICAgICA9PiAnJywKICAgICAgICAgICAgTWVzc2FnZSAgID0+IHsKICAgICAgICAgICAgICAgIEFnZW50ID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gbmV1IGVyc3RlbGx0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd3VyZGUgbmV1IGVyc3RlbGx0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudERlLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gY3JlYXRlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHdhcyBjcmVhdGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudEVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gbMOpdHJlaG96dmEnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTMOpdHJlasO2dHQgYSBrw7Z2ZXRrZXrFkSB2w6FsdG96w6FzOiA8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGFhbmdlbWFha3QnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBpcyBhYW5nZW1hYWt0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudE5sLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBDdXN0b21lciA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIG5ldSBlcnN0ZWxsdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHd1cmRlIG5ldSBlcnN0ZWxsdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJEZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGNyZWF0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3YXMgY3JlYXRlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGzDqXRyZWhvenZhJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0zDqXRyZWrDtnR0IGEga8O2dmV0a2V6xZEgdsOhbHRvesOhczogPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVySHUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIG5sID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBhYW5nZW1hYWt0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gaXMgYWFuZ2VtYWFrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZWNpcGllbnRzID0+IFsgJ0NoYW5nZU1hbmFnZXInLCAnQ2hhbmdlQnVpbGRlcicgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdwZW5kaW5nIGFwcHJvdmFsIGNoYW5nZXMnLAogICAgICAgICAgICBBdHRyaWJ1dGUgPT4gJ0NoYW5nZVN0YXRlJywKICAgICAgICAgICAgRXZlbnQgICAgID0+ICdDaGFuZ2VVcGRhdGUnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdpbmZvcm0gcmVjaXBpZW50cyB0aGF0IGEgY2hhbmdlIHdhaXRzIGZvciBhcHByb3ZhbCcsCiAgICAgICAgICAgIFJ1bGUgICAgICA9PiAncGVuZGluZyBhcHByb3ZhbCcsCiAgICAgICAgICAgIE1lc3NhZ2UgICA9PiB7CiAgICAgICAgICAgICAgICBBZ2VudCA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGFrdHVhbGlzaWVydCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHd1cmRlIGFrdHVhbGlzaWVydC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnREZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIHVwZGF0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3YXMgdXBkYXRlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGZyaXNzw610dmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJpc3PDvGx0IGEga8O2dmV0a2V6xZEgdsOhbHRvesOhczogPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50SHUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIG5sID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBiaWpnZXdlcmt0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gaXMgYmlqZ2V3ZXJrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXIgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBha3R1YWxpc2llcnQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3dXJkZSBha3R1YWxpc2llcnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyRGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSB1cGRhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd2FzIHVwZGF0ZWQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyRW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBmcmlzc8OtdHZlJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZyaXNzw7xsdCBhIGvDtnZldGtlesWRIHbDoWx0b3rDoXM6IDxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYmlqZ2V3ZXJrdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGlzIGJpamdld2Vya3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyTmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmVjaXBpZW50cyA9PiBbICdDaGFuZ2VNYW5hZ2VyJywgJ0NBQkN1c3RvbWVycycsICdDQUJBZ2VudHMnIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICA9PiAncGVuZGluZyBQSVIgY2hhbmdlcycsCiAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnQ2hhbmdlU3RhdGUnLAogICAgICAgICAgICBFdmVudCAgICAgPT4gJ0NoYW5nZVVwZGF0ZScsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ2luZm9ybSByZWNpcGllbnRzIHRoYXQgYSBjaGFuZ2Ugd2FpdHMgZm9yIFBJUicsCiAgICAgICAgICAgIFJ1bGUgICAgICA9PiAncGVuZGluZyBwaXInLAogICAgICAgICAgICBNZXNzYWdlICAgPT4gewogICAgICAgICAgICAgICAgQWdlbnQgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBha3R1YWxpc2llcnQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3dXJkZSBha3R1YWxpc2llcnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50RGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSB1cGRhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd2FzIHVwZGF0ZWQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50RW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBmcmlzc8OtdHZlJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZyaXNzw7xsdCBhIGvDtnZldGtlesWRIHbDoWx0b3rDoXM6IDxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudEh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYmlqZ2V3ZXJrdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGlzIGJpamdld2Vya3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50TmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYWt0dWFsaXNpZXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd3VyZGUgYWt0dWFsaXNpZXJ0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckRlLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gdXBkYXRlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHdhcyB1cGRhdGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gZnJpc3PDrXR2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGcmlzc8O8bHQgYSBrw7Z2ZXRrZXrFkSB2w6FsdG96w6FzOiA8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGJpamdld2Vya3QnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBpcyBiaWpnZXdlcmt0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lck5sLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlY2lwaWVudHMgPT4gWydDaGFuZ2VNYW5hZ2VyJ10sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICA9PiAncmVqZWN0ZWQgY2hhbmdlcycsCiAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnQ2hhbmdlU3RhdGUnLAogICAgICAgICAgICBFdmVudCAgICAgPT4gJ0NoYW5nZVVwZGF0ZScsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ2luZm9ybSByZWNpcGllbnRzIHRoYXQgYSBjaGFuZ2Ugd2FzIHJlamVjdGVkJywKICAgICAgICAgICAgUnVsZSAgICAgID0+ICdyZWplY3RlZCcsCiAgICAgICAgICAgIE1lc3NhZ2UgICA9PiB7CiAgICAgICAgICAgICAgICBBZ2VudCA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGFrdHVhbGlzaWVydCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHd1cmRlIGFrdHVhbGlzaWVydC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnREZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIHVwZGF0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3YXMgdXBkYXRlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGZyaXNzw610dmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJpc3PDvGx0IGEga8O2dmV0a2V6xZEgdsOhbHRvesOhczogPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50SHUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIG5sID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBiaWpnZXdlcmt0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gaXMgYmlqZ2V3ZXJrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXIgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBha3R1YWxpc2llcnQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3dXJkZSBha3R1YWxpc2llcnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyRGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSB1cGRhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd2FzIHVwZGF0ZWQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyRW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBmcmlzc8OtdHZlJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZyaXNzw7xsdCBhIGvDtnZldGtlesWRIHbDoWx0b3rDoXM6IDxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYmlqZ2V3ZXJrdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGlzIGJpamdld2Vya3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyTmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmVjaXBpZW50cyA9PiBbCiAgICAgICAgICAgICAgICAnQ2hhbmdlQnVpbGRlcicsICdDaGFuZ2VJbml0aWF0b3JzJywgJ0NBQkN1c3RvbWVycycsICdDQUJBZ2VudHMnLCAnV29ya09yZGVyQWdlbnRzJywKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdhcHByb3ZlZCBjaGFuZ2VzJywKICAgICAgICAgICAgQXR0cmlidXRlID0+ICdDaGFuZ2VTdGF0ZScsCiAgICAgICAgICAgIEV2ZW50ICAgICA9PiAnQ2hhbmdlVXBkYXRlJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBhIGNoYW5nZSB3YXMgYXBwcm92ZWQnLAogICAgICAgICAgICBSdWxlICAgICAgPT4gJ2FwcHJvdmVkJywKICAgICAgICAgICAgTWVzc2FnZSAgID0+IHsKICAgICAgICAgICAgICAgIEFnZW50ID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYWt0dWFsaXNpZXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd3VyZGUgYWt0dWFsaXNpZXJ0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudERlLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gdXBkYXRlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHdhcyB1cGRhdGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudEVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gZnJpc3PDrXR2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGcmlzc8O8bHQgYSBrw7Z2ZXRrZXrFkSB2w6FsdG96w6FzOiA8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGJpamdld2Vya3QnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBpcyBiaWpnZXdlcmt0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudE5sLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBDdXN0b21lciA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGFrdHVhbGlzaWVydCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHd1cmRlIGFrdHVhbGlzaWVydC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJEZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIHVwZGF0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3YXMgdXBkYXRlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGZyaXNzw610dmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJpc3PDvGx0IGEga8O2dmV0a2V6xZEgdsOhbHRvesOhczogPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVySHUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIG5sID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBiaWpnZXdlcmt0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gaXMgYmlqZ2V3ZXJrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZWNpcGllbnRzID0+IFsKICAgICAgICAgICAgICAgICdDaGFuZ2VCdWlsZGVyJywgJ0NoYW5nZUluaXRpYXRvcnMnLCAnQ0FCQ3VzdG9tZXJzJywgJ0NBQkFnZW50cycsCiAgICAgICAgICAgICAgICAnV29ya09yZGVyQWdlbnRzJywKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdjaGFuZ2VzIGluIHByb2dyZXNzJywKICAgICAgICAgICAgQXR0cmlidXRlID0+ICdDaGFuZ2VTdGF0ZScsCiAgICAgICAgICAgIEV2ZW50ICAgICA9PiAnQ2hhbmdlVXBkYXRlJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBhIGNoYW5nZSBpcyBpbiBwcm9ncmVzcycsCiAgICAgICAgICAgIFJ1bGUgICAgICA9PiAnaW4gcHJvZ3Jlc3MnLAogICAgICAgICAgICBNZXNzYWdlICAgPT4gewogICAgICAgICAgICAgICAgQWdlbnQgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBha3R1YWxpc2llcnQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3dXJkZSBha3R1YWxpc2llcnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50RGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSB1cGRhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd2FzIHVwZGF0ZWQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50RW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBmcmlzc8OtdHZlJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZyaXNzw7xsdCBhIGvDtnZldGtlesWRIHbDoWx0b3rDoXM6IDxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudEh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYmlqZ2V3ZXJrdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGlzIGJpamdld2Vya3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50TmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYWt0dWFsaXNpZXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd3VyZGUgYWt0dWFsaXNpZXJ0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckRlLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gdXBkYXRlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHdhcyB1cGRhdGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gZnJpc3PDrXR2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGcmlzc8O8bHQgYSBrw7Z2ZXRrZXrFkSB2w6FsdG96w6FzOiA8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGJpamdld2Vya3QnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBpcyBiaWpnZXdlcmt0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lck5sLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlY2lwaWVudHMgPT4gWyAnQ2hhbmdlTWFuYWdlcicsICdXb3JrT3JkZXJBZ2VudHMnIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICA9PiAnc3VjY2Vzc2Z1bCBjaGFuZ2VzJywKICAgICAgICAgICAgQXR0cmlidXRlID0+ICdDaGFuZ2VTdGF0ZScsCiAgICAgICAgICAgIEV2ZW50ICAgICA9PiAnQ2hhbmdlVXBkYXRlJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBhIGNoYW5nZSB3YXMgc3VjY2Vzc2Z1bCcsCiAgICAgICAgICAgIFJ1bGUgICAgICA9PiAnc3VjY2Vzc2Z1bCcsCiAgICAgICAgICAgIE1lc3NhZ2UgICA9PiB7CiAgICAgICAgICAgICAgICBBZ2VudCA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGFrdHVhbGlzaWVydCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHd1cmRlIGFrdHVhbGlzaWVydC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnREZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIHVwZGF0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3YXMgdXBkYXRlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGZyaXNzw610dmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJpc3PDvGx0IGEga8O2dmV0a2V6xZEgdsOhbHRvesOhczogPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50SHUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIG5sID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBiaWpnZXdlcmt0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gaXMgYmlqZ2V3ZXJrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXIgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBha3R1YWxpc2llcnQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3dXJkZSBha3R1YWxpc2llcnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyRGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSB1cGRhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd2FzIHVwZGF0ZWQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyRW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBmcmlzc8OtdHZlJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZyaXNzw7xsdCBhIGvDtnZldGtlesWRIHbDoWx0b3rDoXM6IDxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYmlqZ2V3ZXJrdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGlzIGJpamdld2Vya3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyTmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmVjaXBpZW50cyA9PiBbCiAgICAgICAgICAgICAgICAnQ2hhbmdlQnVpbGRlcicsICdDaGFuZ2VJbml0aWF0b3JzJywgJ0NBQkN1c3RvbWVycycsICdDQUJBZ2VudHMnLCAnV29ya09yZGVyQWdlbnRzJywKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdmYWlsZWQgY2hhbmdlcycsCiAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnQ2hhbmdlU3RhdGUnLAogICAgICAgICAgICBFdmVudCAgICAgPT4gJ0NoYW5nZVVwZGF0ZScsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ2luZm9ybSByZWNpcGllbnRzIHRoYXQgYSBjaGFuZ2UgZmFpbGVkJywKICAgICAgICAgICAgUnVsZSAgICAgID0+ICdmYWlsZWQnLAogICAgICAgICAgICBNZXNzYWdlICAgPT4gewogICAgICAgICAgICAgICAgQWdlbnQgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBha3R1YWxpc2llcnQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3dXJkZSBha3R1YWxpc2llcnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50RGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSB1cGRhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd2FzIHVwZGF0ZWQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50RW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBmcmlzc8OtdHZlJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZyaXNzw7xsdCBhIGvDtnZldGtlesWRIHbDoWx0b3rDoXM6IDxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudEh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYmlqZ2V3ZXJrdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGlzIGJpamdld2Vya3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50TmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYWt0dWFsaXNpZXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd3VyZGUgYWt0dWFsaXNpZXJ0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckRlLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gdXBkYXRlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHdhcyB1cGRhdGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gZnJpc3PDrXR2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGcmlzc8O8bHQgYSBrw7Z2ZXRrZXrFkSB2w6FsdG96w6FzOiA8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGJpamdld2Vya3QnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBpcyBiaWpnZXdlcmt0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lck5sLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlY2lwaWVudHMgPT4gWwogICAgICAgICAgICAgICAgJ0NoYW5nZUJ1aWxkZXInLCAnQ2hhbmdlSW5pdGlhdG9ycycsICdDQUJDdXN0b21lcnMnLCAnQ0FCQWdlbnRzJywgJ1dvcmtPcmRlckFnZW50cycsCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICA9PiAnY2FuY2VsZWQgY2hhbmdlcycsCiAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnQ2hhbmdlU3RhdGUnLAogICAgICAgICAgICBFdmVudCAgICAgPT4gJ0NoYW5nZVVwZGF0ZScsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ2luZm9ybSByZWNpcGllbnRzIHRoYXQgYSBjaGFuZ2Ugd2FzIGNhbmNlbGVkJywKICAgICAgICAgICAgUnVsZSAgICAgID0+ICdjYW5jZWxlZCcsCiAgICAgICAgICAgIE1lc3NhZ2UgICA9PiB7CiAgICAgICAgICAgICAgICBBZ2VudCA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGFrdHVhbGlzaWVydCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHd1cmRlIGFrdHVhbGlzaWVydC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnREZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIHVwZGF0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3YXMgdXBkYXRlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGZyaXNzw610dmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJpc3PDvGx0IGEga8O2dmV0a2V6xZEgdsOhbHRvesOhczogPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50SHUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIG5sID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBiaWpnZXdlcmt0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gaXMgYmlqZ2V3ZXJrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXIgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBha3R1YWxpc2llcnQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3dXJkZSBha3R1YWxpc2llcnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyRGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSB1cGRhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd2FzIHVwZGF0ZWQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyRW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBmcmlzc8OtdHZlJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZyaXNzw7xsdCBhIGvDtnZldGtlesWRIHbDoWx0b3rDoXM6IDxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYmlqZ2V3ZXJrdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGlzIGJpamdld2Vya3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyTmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmVjaXBpZW50cyA9PiBbICdDaGFuZ2VCdWlsZGVyJywgJ0NoYW5nZU1hbmFnZXInIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICA9PiAncmV0cmFjdGVkIGNoYW5nZXMnLAogICAgICAgICAgICBBdHRyaWJ1dGUgPT4gJ0NoYW5nZVN0YXRlJywKICAgICAgICAgICAgRXZlbnQgICAgID0+ICdDaGFuZ2VVcGRhdGUnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdpbmZvcm0gcmVjaXBpZW50cyB0aGF0IGEgY2hhbmdlIHdhcyByZXRyYWN0ZWQnLAogICAgICAgICAgICBSdWxlICAgICAgPT4gJ3JldHJhY3RlZCcsCiAgICAgICAgICAgIE1lc3NhZ2UgICA9PiB7CiAgICAgICAgICAgICAgICBBZ2VudCA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGFrdHVhbGlzaWVydCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHd1cmRlIGFrdHVhbGlzaWVydC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnREZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIHVwZGF0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3YXMgdXBkYXRlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGZyaXNzw610dmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJpc3PDvGx0IGEga8O2dmV0a2V6xZEgdsOhbHRvesOhczogPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50SHUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIG5sID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBiaWpnZXdlcmt0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gaXMgYmlqZ2V3ZXJrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXIgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBha3R1YWxpc2llcnQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3dXJkZSBha3R1YWxpc2llcnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyRGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSB1cGRhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd2FzIHVwZGF0ZWQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyRW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBmcmlzc8OtdHZlJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZyaXNzw7xsdCBhIGvDtnZldGtlesWRIHbDoWx0b3rDoXM6IDxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYmlqZ2V3ZXJrdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGlzIGJpamdld2Vya3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyTmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmVjaXBpZW50cyA9PiBbCiAgICAgICAgICAgICAgICAnQ2hhbmdlQnVpbGRlcicsICdDaGFuZ2VJbml0aWF0b3JzJywgJ0NBQkN1c3RvbWVycycsICdDQUJBZ2VudHMnLCAnV29ya09yZGVyQWdlbnRzJywKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdDaGFuZ2VNYW5hZ2VyIHVwZGF0ZScsCiAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnQ2hhbmdlTWFuYWdlcklEJywKICAgICAgICAgICAgRXZlbnQgICAgID0+ICdDaGFuZ2VVcGRhdGUnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdpbmZvcm0gcmVjaXBpZW50cyB0aGF0IHRoZSBjaGFuZ2VtYW5hZ2VyIHdhcyByZXBsYWNlZCcsCiAgICAgICAgICAgIFJ1bGUgICAgICA9PiAnLionLAogICAgICAgICAgICBNZXNzYWdlICAgPT4gewogICAgICAgICAgICAgICAgQWdlbnQgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBha3R1YWxpc2llcnQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3dXJkZSBha3R1YWxpc2llcnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50RGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSB1cGRhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd2FzIHVwZGF0ZWQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50RW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBmcmlzc8OtdHZlJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZyaXNzw7xsdCBhIGvDtnZldGtlesWRIHbDoWx0b3rDoXM6IDxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudEh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYmlqZ2V3ZXJrdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGlzIGJpamdld2Vya3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50TmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYWt0dWFsaXNpZXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd3VyZGUgYWt0dWFsaXNpZXJ0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckRlLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gdXBkYXRlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHdhcyB1cGRhdGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gZnJpc3PDrXR2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGcmlzc8O8bHQgYSBrw7Z2ZXRrZXrFkSB2w6FsdG96w6FzOiA8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGJpamdld2Vya3QnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBpcyBiaWpnZXdlcmt0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lck5sLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlY2lwaWVudHMgPT4gWwogICAgICAgICAgICAgICAgJ0NoYW5nZU1hbmFnZXInLCAnT2xkQ2hhbmdlTWFuYWdlcicsCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICA9PiAnQ2hhbmdlQnVpbGRlciB1cGRhdGUnLAogICAgICAgICAgICBBdHRyaWJ1dGUgPT4gJ0NoYW5nZUJ1aWxkZXJJRCcsCiAgICAgICAgICAgIEV2ZW50ICAgICA9PiAnQ2hhbmdlVXBkYXRlJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnaW5mb3JtIHJlY2lwaWVudHMgdGhhdCB0aGUgY2hhbmdlYnVpbGRlciB3YXMgcmVwbGFjZWQnLAogICAgICAgICAgICBSdWxlICAgICAgPT4gJy4qJywKICAgICAgICAgICAgTWVzc2FnZSAgID0+IHsKICAgICAgICAgICAgICAgIEFnZW50ID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYWt0dWFsaXNpZXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd3VyZGUgYWt0dWFsaXNpZXJ0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudERlLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gdXBkYXRlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHdhcyB1cGRhdGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudEVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gZnJpc3PDrXR2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGcmlzc8O8bHQgYSBrw7Z2ZXRrZXrFkSB2w6FsdG96w6FzOiA8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGJpamdld2Vya3QnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBpcyBiaWpnZXdlcmt0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudE5sLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBDdXN0b21lciA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGFrdHVhbGlzaWVydCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHd1cmRlIGFrdHVhbGlzaWVydC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJEZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIHVwZGF0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3YXMgdXBkYXRlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGZyaXNzw610dmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJpc3PDvGx0IGEga8O2dmV0a2V6xZEgdsOhbHRvesOhczogPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVySHUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIG5sID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBiaWpnZXdlcmt0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gaXMgYmlqZ2V3ZXJrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZWNpcGllbnRzID0+IFsKICAgICAgICAgICAgICAgICdDaGFuZ2VNYW5hZ2VyJywgJ0NoYW5nZUJ1aWxkZXInLCAnT2xkQ2hhbmdlQnVpbGRlcicsCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICA9PiAnbmV3IHdvcmtvcmRlcicsCiAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnJywKICAgICAgICAgICAgRXZlbnQgICAgID0+ICdXb3JrT3JkZXJBZGQnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdpbmZvcm0gcmVjaXBpZW50cyB0aGF0IGEgd29ya29yZGVyIHdhcyBhZGRlZCcsCiAgICAgICAgICAgIFJ1bGUgICAgICA9PiAnJywKICAgICAgICAgICAgTWVzc2FnZSAgID0+IHsKICAgICAgICAgICAgICAgIEFnZW50ID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIG5ldSBlcnN0ZWxsdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiB3dXJkZSBuZXUgZXJzdGVsbHQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkV29ya09yZGVySW5mb0FnZW50RGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gY3JlYXRlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiB3YXMgY3JlYXRlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQWdlbnRFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSBsw6l0cmVob3p2YScsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMw6l0cmVqw7Z0dCBhIGvDtnZldGtlesWRIG11bmthbWVncmVuZGVsw6lzOiA8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQWdlbnRIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSBhYW5nZW1hYWt0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IGlzIGFhbmdlbWFha3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkV29ya09yZGVySW5mb0FnZW50TmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIG5ldSBlcnN0ZWxsdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiB3dXJkZSBuZXUgZXJzdGVsbHQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkV29ya09yZGVySW5mb0N1c3RvbWVyRGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gY3JlYXRlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiB3YXMgY3JlYXRlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQ3VzdG9tZXJFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSBsw6l0cmVob3p2YScsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMw6l0cmVqw7Z0dCBhIGvDtnZldGtlesWRIG11bmthbWVncmVuZGVsw6lzOiA8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQ3VzdG9tZXJIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSBhYW5nZW1hYWt0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IGlzIGFhbmdlbWFha3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkV29ya09yZGVySW5mb0N1c3RvbWVyTmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmVjaXBpZW50cyA9PiBbCiAgICAgICAgICAgICAgICAnQ2hhbmdlQnVpbGRlcicsICdXb3JrT3JkZXJBZ2VudCcsCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICA9PiAndXBkYXRlZCBzdGF0ZSBmb3Igd29ya29yZGVyJywKICAgICAgICAgICAgQXR0cmlidXRlID0+ICdXb3JrT3JkZXJTdGF0ZScsCiAgICAgICAgICAgIEV2ZW50ICAgICA9PiAnV29ya09yZGVyVXBkYXRlJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBhIHRoZSBzdGF0ZSBvZiBhIHdvcmtvcmRlciB3YXMgY2hhbmdlZCcsCiAgICAgICAgICAgIFJ1bGUgICAgICA9PiAnLionLAogICAgICAgICAgICBNZXNzYWdlICAgPT4gewogICAgICAgICAgICAgICAgQWdlbnQgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gYWt0dWFsaXNpZXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IHd1cmRlIGFrdHVhbGlzaWVydC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQWdlbnREZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSB1cGRhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IHdhcyB1cGRhdGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9BZ2VudEVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIGZyaXNzw610dmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJpc3PDvGx0IGEga8O2dmV0a2V6xZEgbXVua2FtZWdyZW5kZWzDqXM6IDxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9BZ2VudEh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIGJpamdld2Vya3QnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj4gaXMgYmlqZ2V3ZXJrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQWdlbnRObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXIgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gYWt0dWFsaXNpZXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IHd1cmRlIGFrdHVhbGlzaWVydC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQ3VzdG9tZXJEZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSB1cGRhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IHdhcyB1cGRhdGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9DdXN0b21lckVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIGZyaXNzw610dmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJpc3PDvGx0IGEga8O2dmV0a2V6xZEgbXVua2FtZWdyZW5kZWzDqXM6IDxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9DdXN0b21lckh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIGJpamdld2Vya3QnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj4gaXMgYmlqZ2V3ZXJrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQ3VzdG9tZXJObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZWNpcGllbnRzID0+IFsKICAgICAgICAgICAgICAgICdDaGFuZ2VCdWlsZGVyJywgJ1dvcmtPcmRlckFnZW50cycsCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICA9PiAndXBkYXRlZCB3b3Jrb3JkZXIgYWdlbnQgZm9yIHdvcmtvcmRlcicsCiAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnV29ya09yZGVyQWdlbnRJRCcsCiAgICAgICAgICAgIEV2ZW50ICAgICA9PiAnV29ya09yZGVyVXBkYXRlJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnaW5mb3JtIHJlY2lwaWVudHMgdGhhdCB0aGUgd29ya29yZGVyIGFnZW50IHdhcyByZXBsYWNlZCcsCiAgICAgICAgICAgIFJ1bGUgICAgICA9PiAnLionLAogICAgICAgICAgICBNZXNzYWdlICAgPT4gewogICAgICAgICAgICAgICAgQWdlbnQgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gYWt0dWFsaXNpZXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IHd1cmRlIGFrdHVhbGlzaWVydC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQWdlbnREZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSB1cGRhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IHdhcyB1cGRhdGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9BZ2VudEVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIGZyaXNzw610dmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJpc3PDvGx0IGEga8O2dmV0a2V6xZEgbXVua2FtZWdyZW5kZWzDqXM6IDxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9BZ2VudEh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIGJpamdld2Vya3QnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj4gaXMgYmlqZ2V3ZXJrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQWdlbnRObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXIgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gYWt0dWFsaXNpZXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IHd1cmRlIGFrdHVhbGlzaWVydC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQ3VzdG9tZXJEZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSB1cGRhdGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IHdhcyB1cGRhdGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9DdXN0b21lckVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIGZyaXNzw610dmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJpc3PDvGx0IGEga8O2dmV0a2V6xZEgbXVua2FtZWdyZW5kZWzDqXM6IDxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9DdXN0b21lckh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIGJpamdld2Vya3QnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj4gaXMgYmlqZ2V3ZXJrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQ3VzdG9tZXJObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZWNpcGllbnRzID0+IFsKICAgICAgICAgICAgICAgICdDaGFuZ2VCdWlsZGVyJywgJ1dvcmtPcmRlckFnZW50JywgJ09sZFdvcmtPcmRlckFnZW50JywKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgID0+ICd0aWNrZXQgbGlua2VkIHRvIGNoYW5nZScsCiAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnJywKICAgICAgICAgICAgRXZlbnQgICAgID0+ICdDaGFuZ2VMaW5rQWRkJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBhIHRpY2tldCB3YXMgbGlua2VkIHRvIHRoZSBjaGFuZ2UnLAogICAgICAgICAgICBSdWxlICAgICAgPT4gJycsCiAgICAgICAgICAgIE1lc3NhZ2UgICA9PiB7CiAgICAgICAgICAgICAgICBBZ2VudCA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSA8T1RSU19MSU5LX09iamVjdD4gdmVya27DvHBmdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3dXJkZSBtaXQgZWluZW0gPE9UUlNfTElOS19PYmplY3Q+IHZlcmtuw7xwZnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50RGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gPE9UUlNfTElOS19PYmplY3Q+IGxpbmtlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3YXMgbGlua2VkIHRvIGEgPE9UUlNfTElOS19PYmplY3Q+IC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSA8T1RSU19MSU5LX09iamVjdD4gw7Zzc3pla2FwY3NvbHZhJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EoeikgPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gdsOhbHRvesOhc3Qgw7Zzc3pla2FwY3NvbHTDoWsgZWd5IDxPVFJTX0xJTktfT2JqZWN0PiBvYmpla3R1bW1hbC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSA8T1RSU19MSU5LX09iamVjdD4gbGlua2VkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGlzIGdla29wcGVsZCBhYW4gZWVuIDxPVFJTX0xJTktfT2JqZWN0PiAuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50TmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIDxPVFJTX0xJTktfT2JqZWN0PiB2ZXJrbsO8cGZ0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHd1cmRlIG1pdCBlaW5lbSA8T1RSU19MSU5LX09iamVjdD4gdmVya27DvHBmdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJEZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSA8T1RSU19MSU5LX09iamVjdD4gbGlua2VkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHdhcyBsaW5rZWQgdG8gYSA8T1RSU19MSU5LX09iamVjdD4gLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIDxPVFJTX0xJTktfT2JqZWN0PiDDtnNzemVrYXBjc29sdmEnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQSh6KSA8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB2w6FsdG96w6FzdCDDtnNzemVrYXBjc29sdMOhayBlZ3kgPE9UUlNfTElOS19PYmplY3Q+IG9iamVrdHVtbWFsLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIDxPVFJTX0xJTktfT2JqZWN0PiBnZWtvcHBlbGQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gaXMgZ2Vrb3BwZWxkIGFhbiBlZW4gPE9UUlNfTElOS19PYmplY3Q+IC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZWNpcGllbnRzID0+IFsKICAgICAgICAgICAgICAgICdDaGFuZ2VCdWlsZGVyJywgJ0NoYW5nZUluaXRpYXRvcnMnLAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgPT4gJ3BsYW5uZWQgc3RhcnQgdGltZSBvZiBjaGFuZ2UgcmVhY2hlZCcsCiAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnJywKICAgICAgICAgICAgRXZlbnQgICAgID0+ICdDaGFuZ2VQbGFubmVkU3RhcnRUaW1lUmVhY2hlZCcsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ2luZm9ybSByZWNpcGllbnRzIHRoYXQgYSBjaGFuZ2UgaGFzIHJlYWNoZWQgdGhlIHBsYW5uZWQgc3RhcnQgdGltZScsCiAgICAgICAgICAgIFJ1bGUgICAgICA9PiAnJywKICAgICAgICAgICAgTWVzc2FnZSAgID0+IHsKICAgICAgICAgICAgICAgIEFnZW50ID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGdlcGxhbnRlIFN0YXJ0emVpdCBlcnJlaWNodCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBoYXQgZGllIGdlcGxhbnRlIFN0YXJ0emVpdCBlcnJlaWNodC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnREZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBQbGFubmVkIFN0YXJ0IFRpbWUgcmVhY2hlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBoYXMgcmVhY2hlZCBpdHMgUGxhbm5lZCBTdGFydCBUaW1lLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudEVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIHRlcnZlemV0dCBrZXpkw6lzaSBpZMWRIGVsw6lydmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQSh6KSA8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB2w6FsdG96w6FzIGVsw6lydGUgYSB0ZXJ2ZXpldHQga2V6ZMOpc2kgaWRlasOpdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBnZXBsYW5kZSBzdGFydHRpamQgYmVyZWlrdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBoZWVmdCBkZSBnZXBsYW5kZSBzdGFydHRpamQgYmVyZWlrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXIgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gZ2VwbGFudGUgU3RhcnR6ZWl0IGVycmVpY2h0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGhhdCBkaWUgZ2VwbGFudGUgU3RhcnR6ZWl0IGVycmVpY2h0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckRlLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIFBsYW5uZWQgU3RhcnQgVGltZSByZWFjaGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGhhcyByZWFjaGVkIGl0cyBQbGFubmVkIFN0YXJ0IFRpbWUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyRW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gdGVydmV6ZXR0IGtlemTDqXNpIGlkxZEgZWzDqXJ2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBKHopIDxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHbDoWx0b3rDoXMgZWzDqXJ0ZSBhIHRlcnZlemV0dCBrZXpkw6lzaSBpZGVqw6l0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGdlcGxhbmRlIHN0YXJ0dGlqZCBiZXJlaWt0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGhlZWZ0IGRlIGdlcGxhbmRlIHN0YXJ0dGlqZCBiZXJlaWt0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lck5sLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlY2lwaWVudHMgPT4gWwogICAgICAgICAgICAgICAgJ0NoYW5nZUJ1aWxkZXInLCAnQ2hhbmdlTWFuYWdlcicsCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICA9PiAncGxhbm5lZCBlbmQgdGltZSBvZiBjaGFuZ2UgcmVhY2hlZCcsCiAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnJywKICAgICAgICAgICAgRXZlbnQgICAgID0+ICdDaGFuZ2VQbGFubmVkRW5kVGltZVJlYWNoZWQnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdpbmZvcm0gcmVjaXBpZW50cyB0aGF0IGEgY2hhbmdlIGhhcyByZWFjaGVkIHRoZSBwbGFubmVkIGVuZCB0aW1lJywKICAgICAgICAgICAgUnVsZSAgICAgID0+ICcnLAogICAgICAgICAgICBNZXNzYWdlICAgPT4gewogICAgICAgICAgICAgICAgQWdlbnQgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gZ2VwbGFudGUgRW5kemVpdCBlcnJlaWNodCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBoYXQgZGllIGdlcGxhbnRlIEVuZHplaXQgZXJyZWljaHQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50RGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gUGxhbm5lZCBFbmQgVGltZSByZWFjaGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGhhcyByZWFjaGVkIGl0cyBQbGFubmVkIEVuZCBUaW1lLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudEVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIHRlcnZlemV0dCBiZWZlamV6w6lzaSBpZMWRIGVsw6lydmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQSh6KSA8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB2w6FsdG96w6FzIGVsw6lydGUgYSB0ZXJ2ZXpldHQgYmVmZWplesOpc2kgaWRlasOpdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBnZXBsYW5kZSBlaW5kdHRpamQgYmVyZWlrdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBoZWVmdCBkZSBnZXBsYW5kZSBlaW5kdGlqZCBiZXJlaWt0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudE5sLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBDdXN0b21lciA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBnZXBsYW50ZSBFbmR6ZWl0IGVycmVpY2h0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGhhdCBkaWUgZ2VwbGFudGUgRW5kemVpdCBlcnJlaWNodC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJEZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBQbGFubmVkIEVuZCBUaW1lIHJlYWNoZWQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gaGFzIHJlYWNoZWQgaXRzIFBsYW5uZWQgRW5kIFRpbWUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyRW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gdGVydmV6ZXR0IGJlZmVqZXrDqXNpIGlkxZEgZWzDqXJ2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBKHopIDxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHbDoWx0b3rDoXMgZWzDqXJ0ZSBhIHRlcnZlemV0dCBiZWZlamV6w6lzaSBpZGVqw6l0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGdlcGxhbmRlIGVpbmR0aWpkIGJlcmVpa3QnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gaGVlZnQgZGUgZ2VwbGFuZGUgZWluZHRpamQgYmVyZWlrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZWNpcGllbnRzID0+IFsKICAgICAgICAgICAgICAgICdDaGFuZ2VCdWlsZGVyJywgJ0NoYW5nZU1hbmFnZXInLAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgPT4gJ2FjdHVhbCBzdGFydCB0aW1lIG9mIGNoYW5nZSByZWFjaGVkJywKICAgICAgICAgICAgQXR0cmlidXRlID0+ICcnLAogICAgICAgICAgICBFdmVudCAgICAgPT4gJ0NoYW5nZUFjdHVhbFN0YXJ0VGltZVJlYWNoZWQnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdpbmZvcm0gcmVjaXBpZW50cyB0aGF0IGEgY2hhbmdlIGhhcyByZWFjaGVkIHRoZSBhY3R1YWwgc3RhcnQgdGltZScsCiAgICAgICAgICAgIFJ1bGUgICAgICA9PiAnJywKICAgICAgICAgICAgTWVzc2FnZSAgID0+IHsKICAgICAgICAgICAgICAgIEFnZW50ID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYmVnb25uZW4nLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3dXJkZSBiZWdvbm5lbi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnREZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIHN0YXJ0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBoYXMgc3RhcnRlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGVsa2V6ZMWRZMO2dHQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRWxrZXpkxZFkw7Z0dCBhIGvDtnZldGtlesWRIHbDoWx0b3rDoXM6IDxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudEh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gZ2VzdGFydCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGlzIGdlc3RhcnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50TmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYmVnb25uZW4nLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3dXJkZSBiZWdvbm5lbi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJEZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIHN0YXJ0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBoYXMgc3RhcnRlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGVsa2V6ZMWRZMO2dHQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRWxrZXpkxZFkw7Z0dCBhIGvDtnZldGtlesWRIHbDoWx0b3rDoXM6IDxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gZ2VzdGFydCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgICAgPT4gJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGlzIGdlc3RhcnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyTmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmVjaXBpZW50cyA9PiBbCiAgICAgICAgICAgICAgICAnQ2hhbmdlQnVpbGRlcicsICdDaGFuZ2VNYW5hZ2VyJywKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdhY3R1YWwgZW5kIHRpbWUgb2YgY2hhbmdlIHJlYWNoZWQnLAogICAgICAgICAgICBBdHRyaWJ1dGUgPT4gJycsCiAgICAgICAgICAgIEV2ZW50ICAgICA9PiAnQ2hhbmdlQWN0dWFsRW5kVGltZVJlYWNoZWQnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdpbmZvcm0gcmVjaXBpZW50cyB0aGF0IGEgY2hhbmdlIGhhcyByZWFjaGVkIHRoZSBhY3R1YWwgZW5kIHRpbWUnLAogICAgICAgICAgICBSdWxlICAgICAgPT4gJycsCiAgICAgICAgICAgIE1lc3NhZ2UgICA9PiB7CiAgICAgICAgICAgICAgICBBZ2VudCA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGFiZ2VzY2hsb3NzZW4nLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3dXJkZSBhYmdlc2NobG9zc2VuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudERlLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gZmluaXNoZWQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB3YXMgZmluaXNoZWQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50RW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBiZWZlamV6xZFkw7Z0dCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCZWZlamV6xZFkw7Z0dCBhIGvDtnZldGtlesWRIHbDoWx0b3rDoXM6IDxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9BZ2VudEh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYWZnZXJvbmQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ICAgID0+ICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBpcyBhZmdlcm9uZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXIgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBhYmdlc2NobG9zc2VuJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd3VyZGUgYWJnZXNjaGxvc3Nlbi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJEZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGZpbmlzaGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gd2FzIGZpbmlzaGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYmVmZWplesWRZMO2dHQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmVmZWplesWRZMO2dHQgYSBrw7Z2ZXRrZXrFkSB2w6FsdG96w6FzOiA8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQ3VzdG9tZXJIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGFmZ2Vyb25kJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSAgICA9PiAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gaXMgYWZnZXJvbmQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyTmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUmVjaXBpZW50cyA9PiBbCiAgICAgICAgICAgICAgICAnQ2hhbmdlQnVpbGRlcicsICdDaGFuZ2VNYW5hZ2VyJywKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdyZXF1ZXN0ZWQgdGltZSBvZiBjaGFuZ2UgcmVhY2hlZCcsCiAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnJywKICAgICAgICAgICAgRXZlbnQgICAgID0+ICdDaGFuZ2VSZXF1ZXN0ZWRUaW1lUmVhY2hlZCcsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ2luZm9ybSByZWNpcGllbnRzIHRoYXQgYSBjaGFuZ2UgaGFzIHJlYWNoZWQgdGhlIHJlcXVlc3RlZCB0aW1lJywKICAgICAgICAgICAgUnVsZSAgICAgID0+ICcnLAogICAgICAgICAgICBNZXNzYWdlICAgPT4gewogICAgICAgICAgICAgICAgQWdlbnQgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gR2V3w7xuc2NodGUgRmVydGlnc3RlbGx1bmdzemVpdCBlcnJlaWNodCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBoYXQgZGllIGdld8O8bnNjaHRlIEZlcnRpZ3N0ZWxsdW5nc3plaXQgZXJyZWljaHQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50RGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSByZXF1ZXN0ZWQgdGltZSByZWFjaGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IGhhcyByZWFjaGVkIGl0cyByZXF1ZXN0ZWQgdGltZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRDaGFuZ2VJbmZvQWdlbnRFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGvDqXJ0IGlkxZEgZWzDqXJ2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBKHopIDxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IHbDoWx0b3rDoXMgZWzDqXJ0ZSBhIGvDqXJ0IGlkZWrDqXQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50SHUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIG5sID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gYWFuZ2V2cmFhZ2QgdGlqZHN0aXAgYmVyZWlrdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBoZWVmdCBoZXQgYWFuZ2V2cmFhZ2RlIHRpamRzdGlwIGJlcmVpa3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0FnZW50TmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIEdld8O8bnNjaHRlIEZlcnRpZ3N0ZWxsdW5nc3plaXQgZXJyZWljaHQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gaGF0IGRpZSBnZXfDvG5zY2h0ZSBGZXJ0aWdzdGVsbHVuZ3N6ZWl0IGVycmVpY2h0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckRlLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4gJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gcmVxdWVzdGVkIHRpbWUgcmVhY2hlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBoYXMgcmVhY2hlZCBpdHMgcmVxdWVzdGVkIHRpbWUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkQ2hhbmdlSW5mb0N1c3RvbWVyRW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBrw6lydCBpZMWRIGVsw6lydmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQSh6KSA8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiB2w6FsdG96w6FzIGVsw6lydGUgYSBrw6lydCBpZGVqw6l0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lckh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIGFhbmdldnJhYWdkIHRpamRzdGlwIGJlcmVpa3QnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gaGVlZnQgaGV0IGFhbmdldnJhYWdkZSB0aWpkc3RpcCBiZXJlaWt0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJENoYW5nZUluZm9DdXN0b21lck5sLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlY2lwaWVudHMgPT4gWwogICAgICAgICAgICAgICAgJ0NoYW5nZUJ1aWxkZXInLCAnQ2hhbmdlTWFuYWdlcicsCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICA9PiAncGxhbm5lZCBzdGFydCB0aW1lIG9mIHdvcmtvcmRlciByZWFjaGVkJywKICAgICAgICAgICAgQXR0cmlidXRlID0+ICcnLAogICAgICAgICAgICBFdmVudCAgICAgPT4gJ1dvcmtPcmRlclBsYW5uZWRTdGFydFRpbWVSZWFjaGVkJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBhIHdvcmtvcmRlciBoYXMgcmVhY2hlZCB0aGUgcGxhbm5lZCBzdGFydCB0aW1lJywKICAgICAgICAgICAgUnVsZSAgICAgID0+ICcnLAogICAgICAgICAgICBNZXNzYWdlICAgPT4gewogICAgICAgICAgICAgICAgQWdlbnQgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gZ2VwbGFudGUgU3RhcnR6ZWl0IGVycmVpY2h0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IGhhdCBkaWUgZ2VwbGFudGUgU3RhcnR6ZWl0IGVycmVpY2h0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9BZ2VudERlLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIFBsYW5uZWQgU3RhcnQgVGltZSByZWFjaGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IGhhcyByZWFjaGVkIHRoZSBQbGFubmVkIFN0YXJ0IFRpbWUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkV29ya09yZGVySW5mb0FnZW50RW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gdGVydmV6ZXR0IGtlemTDqXNpIGlkxZEgZWzDqXJ2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBKHopIDxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IG11bmthbWVncmVuZGVsw6lzIGVsw6lydGUgYSB0ZXJ2ZXpldHQga2V6ZMOpc2kgaWRlasOpdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQWdlbnRIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSBnZXBsYW5kZSBzdGFydHRpamQgYmVyZWlrdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiBoZWVmdCBkZSBnZXBsYW5kZSBzdGFydHRpamQgYmVyZWlrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQWdlbnRObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXIgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gZ2VwbGFudGUgU3RhcnR6ZWl0IGVycmVpY2h0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IGhhdCBkaWUgZ2VwbGFudGUgU3RhcnR6ZWl0IGVycmVpY2h0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9DdXN0b21lckRlLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIFBsYW5uZWQgU3RhcnQgVGltZSByZWFjaGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IGhhcyByZWFjaGVkIHRoZSBQbGFubmVkIFN0YXJ0IFRpbWUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkV29ya09yZGVySW5mb0N1c3RvbWVyRW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gdGVydmV6ZXR0IGtlemTDqXNpIGlkxZEgZWzDqXJ2ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBKHopIDxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IG11bmthbWVncmVuZGVsw6lzIGVsw6lydGUgYSB0ZXJ2ZXpldHQga2V6ZMOpc2kgaWRlasOpdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQ3VzdG9tZXJIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSBnZXBsYW5kZSBzdGFydHRpamQgYmVyZWlrdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiBoZWVmdCBkZSBnZXBsYW5kZSBzdGFydHRpamQgYmVyZWlrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQ3VzdG9tZXJObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZWNpcGllbnRzID0+IFsKICAgICAgICAgICAgICAgICdXb3JrT3JkZXJBZ2VudCcsCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICA9PiAncGxhbm5lZCBlbmQgdGltZSBvZiB3b3Jrb3JkZXIgcmVhY2hlZCcsCiAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnJywKICAgICAgICAgICAgRXZlbnQgICAgID0+ICdXb3JrT3JkZXJQbGFubmVkRW5kVGltZVJlYWNoZWQnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdpbmZvcm0gcmVjaXBpZW50cyB0aGF0IGEgd29ya29yZGVyIGhhcyByZWFjaGVkIHRoZSBwbGFubmVkIGVuZCB0aW1lJywKICAgICAgICAgICAgUnVsZSAgICAgID0+ICcnLAogICAgICAgICAgICBNZXNzYWdlICAgPT4gewogICAgICAgICAgICAgICAgQWdlbnQgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gZ2VwbGFudGUgRW5kemVpdCBlcnJlaWNodCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiBoYXQgZGllIGdlcGxhbnRlIEVuZHplaXQgZXJyZWljaHQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkV29ya09yZGVySW5mb0FnZW50RGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gUGxhbm5lZCBFbmQgVGltZSByZWFjaGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IGhhcyByZWFjaGVkIHRoZSBQbGFubmVkIEVuZCBUaW1lLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9BZ2VudEVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIHRlcnZlemV0dCBiZWZlamV6w6lzaSBpZMWRIGVsw6lydmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQSh6KSA8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiBtdW5rYW1lZ3JlbmRlbMOpcyBlbMOpcnRlIGEgdGVydmV6ZXR0IGJlZmVqZXrDqXNpIGlkZWrDqXQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkV29ya09yZGVySW5mb0FnZW50SHUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIG5sID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gZ2VwbGFuZGUgZWluZHR0aWpkIGJlcmVpa3QnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj4gaGVlZnQgZGUgZ2VwbGFuZGUgZWluZHRpamQgYmVyZWlrdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQWdlbnRObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXIgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gZ2VwbGFudGUgRW5kemVpdCBlcnJlaWNodCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiBoYXQgZGllIGdlcGxhbnRlIEVuZHplaXQgZXJyZWljaHQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkV29ya09yZGVySW5mb0N1c3RvbWVyRGUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gUGxhbm5lZCBFbmQgVGltZSByZWFjaGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IGhhcyByZWFjaGVkIHRoZSBQbGFubmVkIEVuZCBUaW1lLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9DdXN0b21lckVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIHRlcnZlemV0dCBiZWZlamV6w6lzaSBpZMWRIGVsw6lydmUnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQSh6KSA8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiBtdW5rYW1lZ3JlbmRlbMOpcyBlbMOpcnRlIGEgdGVydmV6ZXR0IGJlZmVqZXrDqXNpIGlkZWrDqXQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkV29ya09yZGVySW5mb0N1c3RvbWVySHUsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIG5sID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gZ2VwbGFuZGUgZWluZHRpamQgYmVyZWlrdCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiBoZWVmdCBkZSBnZXBsYW5kZSBlaW5kdGlqZCBiZXJlaWt0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9DdXN0b21lck5sLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlY2lwaWVudHMgPT4gWwogICAgICAgICAgICAgICAgJ1dvcmtPcmRlckFnZW50JywKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdhY3R1YWwgc3RhcnQgdGltZSBvZiB3b3Jrb3JkZXIgcmVhY2hlZCcsCiAgICAgICAgICAgIEF0dHJpYnV0ZSA9PiAnJywKICAgICAgICAgICAgRXZlbnQgICAgID0+ICdXb3JrT3JkZXJBY3R1YWxTdGFydFRpbWVSZWFjaGVkJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBhIHdvcmtvcmRlciBoYXMgcmVhY2hlZCB0aGUgYWN0dWFsIHN0YXJ0IHRpbWUnLAogICAgICAgICAgICBSdWxlICAgICAgPT4gJycsCiAgICAgICAgICAgIE1lc3NhZ2UgICA9PiB7CiAgICAgICAgICAgICAgICBBZ2VudCA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSBiZWdvbm5lbicsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiB3dXJkZSBiZWdvbm5lbi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQWdlbnREZSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSBzdGFydGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IGhhcyBzdGFydGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9BZ2VudEVuLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIGVsa2V6ZMWRZMO2dHQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRWxrZXpkxZFkw7Z0dCBhIGvDtnZldGtlesWRIG11bmthbWVncmVuZGVsw6lzOiA8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQWdlbnRIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSBnZXN0YXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IGlzIGdlc3RhcnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkV29ya09yZGVySW5mb0FnZW50TmwsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEN1c3RvbWVyID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIGJlZ29ubmVuJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IHd1cmRlIGJlZ29ubmVuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9DdXN0b21lckRlLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIHN0YXJ0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj4gaGFzIHN0YXJ0ZWQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkV29ya09yZGVySW5mb0N1c3RvbWVyRW4sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gZWxrZXpkxZFkw7Z0dCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFbGtlemTFkWTDtnR0IGEga8O2dmV0a2V6xZEgbXVua2FtZWdyZW5kZWzDqXM6IDxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9DdXN0b21lckh1LAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIGdlc3RhcnQnLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj4gaXMgZ2VzdGFydC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQ3VzdG9tZXJObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZWNpcGllbnRzID0+IFsKICAgICAgICAgICAgICAgICdXb3JrT3JkZXJBZ2VudCcsCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICA9PiAnYWN0dWFsIGVuZCB0aW1lIG9mIHdvcmtvcmRlciByZWFjaGVkJywKICAgICAgICAgICAgQXR0cmlidXRlID0+ICcnLAogICAgICAgICAgICBFdmVudCAgICAgPT4gJ1dvcmtPcmRlckFjdHVhbEVuZFRpbWVSZWFjaGVkJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBhIHdvcmtvcmRlciBoYXMgcmVhY2hlZCB0aGUgYWN0dWFsIGVuZCB0aW1lJywKICAgICAgICAgICAgUnVsZSAgICAgID0+ICcnLAogICAgICAgICAgICBNZXNzYWdlICAgPT4gewogICAgICAgICAgICAgICAgQWdlbnQgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gYWJnZXNjaGxvc3NlbicsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiB3dXJkZSBhYmdlc2NobG9zc2VuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9BZ2VudERlLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIGZpbmlzaGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IHdhcyBmaW5pc2hlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQWdlbnRFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSBiZWZlamV6xZFkw7Z0dCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCZWZlamV6xZFkw7Z0dCBhIGvDtnZldGtlesWRIG11bmthbWVncmVuZGVsw6lzOiA8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQWdlbnRIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSBhZmdlcm9uZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiBpcyBhZmdlcm9uZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQWdlbnRObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXIgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPl0gYWJnZXNjaGxvc3NlbicsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiB3dXJkZSBhYmdlc2NobG9zc2VuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJFdvcmtPcmRlckluZm9DdXN0b21lckRlLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01Xb3JrT3JkZXI6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4tPE9UUlNfV09SS09SREVSX1dvcmtPcmRlck51bWJlcj5dIGZpbmlzaGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+IHdhcyBmaW5pc2hlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQ3VzdG9tZXJFbiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSBiZWZlamV6xZFkw7Z0dCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCZWZlamV6xZFkw7Z0dCBhIGvDtnZldGtlesWRIG11bmthbWVncmVuZGVsw6lzOiA8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQ3VzdG9tZXJIdSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNV29ya09yZGVyOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+LTxPVFJTX1dPUktPUkRFUl9Xb3JrT3JkZXJOdW1iZXI+XSBhZmdlcm9uZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTVdvcmtPcmRlcjo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPi08T1RSU19XT1JLT1JERVJfV29ya09yZGVyTnVtYmVyPiBpcyBhZmdlcm9uZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRXb3JrT3JkZXJJbmZvQ3VzdG9tZXJObCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZWNpcGllbnRzID0+IFsKICAgICAgICAgICAgICAgICdXb3JrT3JkZXJBZ2VudCcsCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICA9PiAnYWN0aW9uIGV4ZWN1dGlvbiBzdWNjZXNzZnVsbHknLAogICAgICAgICAgICBBdHRyaWJ1dGUgPT4gJ0FjdGlvblJlc3VsdCcsCiAgICAgICAgICAgIEV2ZW50ICAgICA9PiAnQWN0aW9uRXhlY3V0ZScsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ2luZm9ybSByZWNpcGllbnRzIHRoYXQgYW4gYWN0aW9uIHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHknLAogICAgICAgICAgICBSdWxlICAgICAgPT4gJ3N1Y2Nlc3NmdWxseScsCiAgICAgICAgICAgIE1lc3NhZ2UgICA9PiB7CiAgICAgICAgICAgICAgICBBZ2VudCA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBBa3Rpb25zLUF1c2bDvGhydW5nIDxPVFJTX0NPTkRJVElPTl9BY3Rpb25SZXN1bHQ+JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IEFrdGlvbnMtQXVzZsO8aHJ1bmcgPE9UUlNfQ09ORElUSU9OX0FjdGlvblJlc3VsdD4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkNoYW5nZSBUaXRlbDogPE9UUlNfQ0hBTkdFX0NoYW5nZVRpdGxlPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQWt0dWVsbGVyIENoYW5nZSBTdGF0dXM6IDxPVFJTX0NIQU5HRV9DaGFuZ2VTdGF0ZT5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQ29uZGl0aW9uIElEOiA8T1RSU19DT05ESVRJT05fQ29uZGl0aW9uSUQ+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJDb25kaXRpb24gTmFtZTogPE9UUlNfQ09ORElUSU9OX0NvbmRpdGlvbk5hbWU+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkFjdGlvbiBJRDogPE9UUlNfQ09ORElUSU9OX0FjdGlvbklEPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQWt0aW9ucy1BdXNmw7xocnVuZzogPE9UUlNfQ09ORElUSU9OX0FjdGlvblJlc3VsdD5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiPE9UUlNfQ09ORklHX0h0dHBUeXBlPjovLzxPVFJTX0NPTkZJR19GUUROPi88T1RSU19DT05GSUdfU2NyaXB0QWxpYXM+aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9PE9UUlNfQ0hBTkdFX0NoYW5nZUlEPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICItLSA8T1RSU19DT05GSUdfTm90aWZpY2F0aW9uU2VuZGVyTmFtZT5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gQWN0aW9uIGV4ZWN1dGlvbiA8T1RSU19DT05ESVRJT05fQWN0aW9uUmVzdWx0PicsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBBY3Rpb24gZXhlY3V0aW9uIDxPVFJTX0NPTkRJVElPTl9BY3Rpb25SZXN1bHQ+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJDaGFuZ2UgdGl0bGU6IDxPVFJTX0NIQU5HRV9DaGFuZ2VUaXRsZT5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkN1cnJlbnQgY2hhbmdlIHN0YXRlOiA8T1RSU19DSEFOR0VfQ2hhbmdlU3RhdGU+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkNvbmRpdGlvbiBJRDogPE9UUlNfQ09ORElUSU9OX0NvbmRpdGlvbklEPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQ29uZGl0aW9uIG5hbWU6IDxPVFJTX0NPTkRJVElPTl9Db25kaXRpb25OYW1lPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJBY3Rpb24gSUQ6IDxPVFJTX0NPTkRJVElPTl9BY3Rpb25JRD5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkFjdGlvbiBleGVjdXRpb246IDxPVFJTX0NPTkRJVElPTl9BY3Rpb25SZXN1bHQ+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIjxPVFJTX0NPTkZJR19IdHRwVHlwZT46Ly88T1RSU19DT05GSUdfRlFETj4vPE9UUlNfQ09ORklHX1NjcmlwdEFsaWFzPmluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2Vab29tO0NoYW5nZUlEPTxPVFJTX0NIQU5HRV9DaGFuZ2VJRD5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiLS0gPE9UUlNfQ09ORklHX05vdGlmaWNhdGlvblNlbmRlck5hbWU+XG4iLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBodSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIG3FsXZlbGV0LXbDqWdyZWhhanTDoXM6IDxPVFJTX0NPTkRJVElPTl9BY3Rpb25SZXN1bHQ+JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IG3FsXZlbGV0LXbDqWdyZWhhanTDoXM6IDxPVFJTX0NPTkRJVElPTl9BY3Rpb25SZXN1bHQ+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJWw6FsdG96w6FzY8OtbTogPE9UUlNfQ0hBTkdFX0NoYW5nZVRpdGxlPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiSmVsZW5sZWdpIHbDoWx0b3rDoXPDoWxsYXBvdDogPE9UUlNfQ0hBTkdFX0NoYW5nZVN0YXRlPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJGZWx0w6l0ZWxhem9ub3PDrXTDszogPE9UUlNfQ09ORElUSU9OX0NvbmRpdGlvbklEPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiRmVsdMOpdGVsbsOpdjogPE9UUlNfQ09ORElUSU9OX0NvbmRpdGlvbk5hbWU+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIk3FsXZlbGV0YXpvbm9zw610w7M6IDxPVFJTX0NPTkRJVElPTl9BY3Rpb25JRD5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIk3FsXZlbGV0LXbDqWdyZWhhanTDoXM6IDxPVFJTX0NPTkRJVElPTl9BY3Rpb25SZXN1bHQ+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIjxPVFJTX0NPTkZJR19IdHRwVHlwZT46Ly88T1RSU19DT05GSUdfRlFETj4vPE9UUlNfQ09ORklHX1NjcmlwdEFsaWFzPmluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2Vab29tO0NoYW5nZUlEPTxPVFJTX0NIQU5HRV9DaGFuZ2VJRD5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiLS0gPE9UUlNfQ09ORklHX05vdGlmaWNhdGlvblNlbmRlck5hbWU+XG4iLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIEFjdGllIHVpdGdldm9lcmQgPE9UUlNfQ09ORElUSU9OX0FjdGlvblJlc3VsdD4nLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gQWN0aWUgdWl0Z2V2b2VyZCA8T1RSU19DT05ESVRJT05fQWN0aW9uUmVzdWx0Pi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQ2hhbmdlLXRpdGVsOiA8T1RSU19DSEFOR0VfQ2hhbmdlVGl0bGU+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJBY3R1ZWxlIGNoYW5nZS1zdGF0dXM6IDxPVFJTX0NIQU5HRV9DaGFuZ2VTdGF0ZT5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQ29uZGl0aWUtSUQ6IDxPVFJTX0NPTkRJVElPTl9Db25kaXRpb25JRD5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkNvbmRpdGllIG5hYW06IDxPVFJTX0NPTkRJVElPTl9Db25kaXRpb25OYW1lPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJBY3RpZS1JRDogPE9UUlNfQ09ORElUSU9OX0FjdGlvbklEPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQWN0aWUgcmVzdWx0YWF0OiA8T1RSU19DT05ESVRJT05fQWN0aW9uUmVzdWx0PlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICI8T1RSU19DT05GSUdfSHR0cFR5cGU+Oi8vPE9UUlNfQ09ORklHX0ZRRE4+LzxPVFJTX0NPTkZJR19TY3JpcHRBbGlhcz5pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ2hhbmdlWm9vbTtDaGFuZ2VJRD08T1RSU19DSEFOR0VfQ2hhbmdlSUQ+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIi0tIDxPVFJTX0NPTkZJR19Ob3RpZmljYXRpb25TZW5kZXJOYW1lPlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgQ3VzdG9tZXIgPT4gewogICAgICAgICAgICAgICAgICAgIGRlID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gQWt0aW9ucy1BdXNmw7xocnVuZyA8T1RSU19DT05ESVRJT05fQWN0aW9uUmVzdWx0PicsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBBa3Rpb25zLUF1c2bDvGhydW5nIDxPVFJTX0NPTkRJVElPTl9BY3Rpb25SZXN1bHQ+LicsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVuID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gQWN0aW9uIGV4ZWN1dGlvbiA8T1RSU19DT05ESVRJT05fQWN0aW9uUmVzdWx0PicsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBBY3Rpb24gZXhlY3V0aW9uIDxPVFJTX0NPTkRJVElPTl9BY3Rpb25SZXN1bHQ+LicsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gbcWxdmVsZXQtdsOpZ3JlaGFqdMOhczogPE9UUlNfQ09ORElUSU9OX0FjdGlvblJlc3VsdD4nLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gbcWxdmVsZXQtdsOpZ3JlaGFqdMOhczogPE9UUlNfQ09ORElUSU9OX0FjdGlvblJlc3VsdD4uJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBBY3RpZSB1aXRnZXZvZXJkIDxPVFJTX0NPTkRJVElPTl9BY3Rpb25SZXN1bHQ+JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IEFjdGllIHVpdGdldm9lcmQgPE9UUlNfQ09ORElUSU9OX0FjdGlvblJlc3VsdD4uJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBSZWNpcGllbnRzID0+IFsKICAgICAgICAgICAgICAgICdDaGFuZ2VCdWlsZGVyJywKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdhY3Rpb24gZXhlY3V0aW9uIHVuc3VjY2Vzc2Z1bGx5JywKICAgICAgICAgICAgQXR0cmlidXRlID0+ICdBY3Rpb25SZXN1bHQnLAogICAgICAgICAgICBFdmVudCAgICAgPT4gJ0FjdGlvbkV4ZWN1dGUnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdpbmZvcm0gcmVjaXBpZW50cyB0aGF0IGFuIGFjdGlvbiB3YXMgZXhlY3V0ZWQgdW5zdWNjZXNzZnVsbHknLAogICAgICAgICAgICBSdWxlICAgICAgPT4gJ3Vuc3VjY2Vzc2Z1bGx5JywKICAgICAgICAgICAgTWVzc2FnZSAgID0+IHsKICAgICAgICAgICAgICAgIEFnZW50ID0+IHsKICAgICAgICAgICAgICAgICAgICBkZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIEFrdGlvbnMtQXVzZsO8aHJ1bmcgPE9UUlNfQ09ORElUSU9OX0FjdGlvblJlc3VsdD4nLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gQWt0aW9ucy1BdXNmw7xocnVuZyA8T1RSU19DT05ESVRJT05fQWN0aW9uUmVzdWx0Pi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQ2hhbmdlIFRpdGVsOiA8T1RSU19DSEFOR0VfQ2hhbmdlVGl0bGU+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJBa3R1ZWxsZXIgQ2hhbmdlIFN0YXR1czogPE9UUlNfQ0hBTkdFX0NoYW5nZVN0YXRlPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJDb25kaXRpb24gSUQ6IDxPVFJTX0NPTkRJVElPTl9Db25kaXRpb25JRD5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkNvbmRpdGlvbiBOYW1lOiA8T1RSU19DT05ESVRJT05fQ29uZGl0aW9uTmFtZT5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQWN0aW9uIElEOiA8T1RSU19DT05ESVRJT05fQWN0aW9uSUQ+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJBa3Rpb25zLUF1c2bDvGhydW5nOiA8T1RSU19DT05ESVRJT05fQWN0aW9uUmVzdWx0PlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICI8T1RSU19DT05GSUdfSHR0cFR5cGU+Oi8vPE9UUlNfQ09ORklHX0ZRRE4+LzxPVFJTX0NPTkZJR19TY3JpcHRBbGlhcz5pbmRleC5wbD9BY3Rpb249QWdlbnRJVFNNQ2hhbmdlWm9vbTtDaGFuZ2VJRD08T1RSU19DSEFOR0VfQ2hhbmdlSUQ+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIi0tIDxPVFJTX0NPTkZJR19Ob3RpZmljYXRpb25TZW5kZXJOYW1lPlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBBY3Rpb24gZXhlY3V0aW9uIDxPVFJTX0NPTkRJVElPTl9BY3Rpb25SZXN1bHQ+JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IEFjdGlvbiBleGVjdXRpb24gPE9UUlNfQ09ORElUSU9OX0FjdGlvblJlc3VsdD4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkNoYW5nZSB0aXRsZTogPE9UUlNfQ0hBTkdFX0NoYW5nZVRpdGxlPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQ3VycmVudCBjaGFuZ2Ugc3RhdGU6IDxPVFJTX0NIQU5HRV9DaGFuZ2VTdGF0ZT5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQ29uZGl0aW9uIElEOiA8T1RSU19DT05ESVRJT05fQ29uZGl0aW9uSUQ+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJDb25kaXRpb24gbmFtZTogPE9UUlNfQ09ORElUSU9OX0NvbmRpdGlvbk5hbWU+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkFjdGlvbiBJRDogPE9UUlNfQ09ORElUSU9OX0FjdGlvbklEPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQWN0aW9uIGV4ZWN1dGlvbjogPE9UUlNfQ09ORElUSU9OX0FjdGlvblJlc3VsdD5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiPE9UUlNfQ09ORklHX0h0dHBUeXBlPjovLzxPVFJTX0NPTkZJR19GUUROPi88T1RSU19DT05GSUdfU2NyaXB0QWxpYXM+aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9PE9UUlNfQ0hBTkdFX0NoYW5nZUlEPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICItLSA8T1RSU19DT05GSUdfTm90aWZpY2F0aW9uU2VuZGVyTmFtZT5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGh1ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gbcWxdmVsZXQtdsOpZ3JlaGFqdMOhczogPE9UUlNfQ09ORElUSU9OX0FjdGlvblJlc3VsdD4nLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gbcWxdmVsZXQtdsOpZ3JlaGFqdMOhczogPE9UUlNfQ09ORElUSU9OX0FjdGlvblJlc3VsdD4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlbDoWx0b3rDoXNjw61tOiA8T1RSU19DSEFOR0VfQ2hhbmdlVGl0bGU+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJKZWxlbmxlZ2kgdsOhbHRvesOhc8OhbGxhcG90OiA8T1RSU19DSEFOR0VfQ2hhbmdlU3RhdGU+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkZlbHTDqXRlbGF6b25vc8OtdMOzOiA8T1RSU19DT05ESVRJT05fQ29uZGl0aW9uSUQ+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJGZWx0w6l0ZWxuw6l2OiA8T1RSU19DT05ESVRJT05fQ29uZGl0aW9uTmFtZT5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiTcWxdmVsZXRhem9ub3PDrXTDszogPE9UUlNfQ09ORElUSU9OX0FjdGlvbklEPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiTcWxdmVsZXQtdsOpZ3JlaGFqdMOhczogPE9UUlNfQ09ORElUSU9OX0FjdGlvblJlc3VsdD5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiPE9UUlNfQ09ORklHX0h0dHBUeXBlPjovLzxPVFJTX0NPTkZJR19GUUROPi88T1RSU19DT05GSUdfU2NyaXB0QWxpYXM+aW5kZXgucGw/QWN0aW9uPUFnZW50SVRTTUNoYW5nZVpvb207Q2hhbmdlSUQ9PE9UUlNfQ0hBTkdFX0NoYW5nZUlEPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICItLSA8T1RSU19DT05GSUdfTm90aWZpY2F0aW9uU2VuZGVyTmFtZT5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIG5sID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1s8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPl0gQWN0aWUgdWl0Z2V2b2VyZCA8T1RSU19DT05ESVRJT05fQWN0aW9uUmVzdWx0PicsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBBY3RpZSB1aXRnZXZvZXJkIDxPVFJTX0NPTkRJVElPTl9BY3Rpb25SZXN1bHQ+LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJDaGFuZ2UtdGl0ZWw6IDxPVFJTX0NIQU5HRV9DaGFuZ2VUaXRsZT5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkFjdHVlbGUgY2hhbmdlLXN0YXR1czogPE9UUlNfQ0hBTkdFX0NoYW5nZVN0YXRlPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJDb25kaXRpZS1JRDogPE9UUlNfQ09ORElUSU9OX0NvbmRpdGlvbklEPlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiQ29uZGl0aWUgbmFhbTogPE9UUlNfQ09ORElUSU9OX0NvbmRpdGlvbk5hbWU+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIkFjdGllLUlEOiA8T1RSU19DT05ESVRJT05fQWN0aW9uSUQ+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJBY3RpZSByZXN1bHRhYXQ6IDxPVFJTX0NPTkRJVElPTl9BY3Rpb25SZXN1bHQ+XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIjxPVFJTX0NPTkZJR19IdHRwVHlwZT46Ly88T1RSU19DT05GSUdfRlFETj4vPE9UUlNfQ09ORklHX1NjcmlwdEFsaWFzPmluZGV4LnBsP0FjdGlvbj1BZ2VudElUU01DaGFuZ2Vab29tO0NoYW5nZUlEPTxPVFJTX0NIQU5HRV9DaGFuZ2VJRD5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAiLS0gPE9UUlNfQ09ORklHX05vdGlmaWNhdGlvblNlbmRlck5hbWU+XG4iLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBDdXN0b21lciA9PiB7CiAgICAgICAgICAgICAgICAgICAgZGUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBBa3Rpb25zLUF1c2bDvGhydW5nIDxPVFJTX0NPTkRJVElPTl9BY3Rpb25SZXN1bHQ+JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IEFrdGlvbnMtQXVzZsO8aHJ1bmcgPE9UUlNfQ09ORElUSU9OX0FjdGlvblJlc3VsdD4uJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW4gPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBBY3Rpb24gZXhlY3V0aW9uIDxPVFJTX0NPTkRJVElPTl9BY3Rpb25SZXN1bHQ+JywKICAgICAgICAgICAgICAgICAgICAgICAgQm9keSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+IEFjdGlvbiBleGVjdXRpb24gPE9UUlNfQ09ORElUSU9OX0FjdGlvblJlc3VsdD4uJywKICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgaHUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzxPVFJTX0NPTkZJR19JVFNNQ2hhbmdlOjpIb29rPjxPVFJTX0NIQU5HRV9DaGFuZ2VOdW1iZXI+XSBtxbF2ZWxldC12w6lncmVoYWp0w6FzOiA8T1RSU19DT05ESVRJT05fQWN0aW9uUmVzdWx0PicsCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8T1RSU19DT05GSUdfSVRTTUNoYW5nZTo6SG9vaz48T1RSU19DSEFOR0VfQ2hhbmdlTnVtYmVyPiBtxbF2ZWxldC12w6lncmVoYWp0w6FzOiA8T1RSU19DT05ESVRJT05fQWN0aW9uUmVzdWx0Pi4nLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBubCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3QgPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj5dIEFjdGllIHVpdGdldm9lcmQgPE9UUlNfQ09ORElUSU9OX0FjdGlvblJlc3VsdD4nLAogICAgICAgICAgICAgICAgICAgICAgICBCb2R5ID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPE9UUlNfQ09ORklHX0lUU01DaGFuZ2U6Okhvb2s+PE9UUlNfQ0hBTkdFX0NoYW5nZU51bWJlcj4gQWN0aWUgdWl0Z2V2b2VyZCA8T1RSU19DT05ESVRJT05fQWN0aW9uUmVzdWx0Pi4nLAogICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJlY2lwaWVudHMgPT4gWwogICAgICAgICAgICAgICAgJ0NoYW5nZUJ1aWxkZXInLAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICApOwoKICAgICMgYWRkIG5vdGlmaWNhdGlvbnMKICAgIGZvciBteSAkTm90aWZpY2F0aW9uIChATm90aWZpY2F0aW9ucykgewoKICAgICAgICAjIGZpbmQgcmVjaXBpZW50cwogICAgICAgIG15IEBSZWNpcGllbnRJRHM7CiAgICAgICAgZm9yIG15ICRSZWNpcGllbnQgKCBAeyAkTm90aWZpY2F0aW9uLT57UmVjaXBpZW50c30gfSApIHsKICAgICAgICAgICAgbXkgJFJlY2lwaWVudElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6Ok5vdGlmaWNhdGlvbicpLT5SZWNpcGllbnRMb29rdXAoCiAgICAgICAgICAgICAgICBOYW1lID0+ICRSZWNpcGllbnQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJFJlY2lwaWVudElEKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBSZWNpcGllbnRJRHMsICRSZWNpcGllbnRJRDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBnZXQgZXZlbnQgaWQKICAgICAgICBteSAkRXZlbnRJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJVFNNQ2hhbmdlOjpIaXN0b3J5JyktPkhpc3RvcnlUeXBlTG9va3VwKAogICAgICAgICAgICBIaXN0b3J5VHlwZSA9PiAkTm90aWZpY2F0aW9uLT57RXZlbnR9LAogICAgICAgICk7CgogICAgICAgICMgaW5zZXJ0IG5vdGlmaWNhdGlvbgogICAgICAgIG15ICRSdWxlSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SVRTTUNoYW5nZTo6Tm90aWZpY2F0aW9uJyktPk5vdGlmaWNhdGlvblJ1bGVBZGQoCiAgICAgICAgICAgICV7JE5vdGlmaWNhdGlvbn0sCiAgICAgICAgICAgIEV2ZW50SUQgICAgICA9PiAkRXZlbnRJRCwKICAgICAgICAgICAgUmVjaXBpZW50SURzID0+IFxAUmVjaXBpZW50SURzLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9NaWdyYXRlTm90aWZpY2F0aW9ucygpCgpNaWdyYXRlIG9sZCBzeXN0ZW0gbm90aWZpY2F0aW9ucyBpbnRvIENoYW5nZU1hbmFnZW1lbnQgZXZlbnQgYmFzZWQgbm90aWZpY2F0aW9ucy4KCiAgICBteSAkU3VjY2VzcyA9ICRTZXR1cE9iamVjdC0+X01pZ3JhdGVOb3RpZmljYXRpb25zOwoKPWN1dAoKc3ViIF9NaWdyYXRlTm90aWZpY2F0aW9ucyB7CiAgICBteSAoJFNlbGYpID0gQF87CgogICAgIyBnZXQgYWxsIGNoYW5nZSBub3RpZmljYXRpb24gcnVsZXMKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgY24uaWQsIGNuLm5hbWUsIGl0ZW1fYXR0cmlidXRlLCBjaHQubmFtZQogICAgICAgICAgICBGUk9NIGNoYW5nZV9ub3RpZmljYXRpb24gY24sIGNoYW5nZV9oaXN0b3J5X3R5cGUgY2h0CiAgICAgICAgICAgIFdIRVJFIGV2ZW50X2lkID0gY2h0LmlkJywKICAgICk7CgogICAgIyBmZXRjaCBub3RpZmljYXRpb24gcnVsZXMKICAgIG15IEBOb3RpZmljYXRpb25SdWxlczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgIHB1c2ggQE5vdGlmaWNhdGlvblJ1bGVzLCB7CiAgICAgICAgICAgIElEICAgICAgICA9PiAkUm93WzBdLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFJvd1sxXSwKICAgICAgICAgICAgQXR0cmlidXRlID0+ICRSb3dbMl0gLy8gJycsCiAgICAgICAgICAgIEV2ZW50ICAgICA9PiAkUm93WzNdLAogICAgICAgIH07CiAgICB9CgogICAgZm9yIG15ICROb3RpZmljYXRpb25SdWxlIChATm90aWZpY2F0aW9uUnVsZXMpIHsKCiAgICAgICAgIyByZWFkIG5vdGlmaWNhdGlvbnMgZm9yIHRoaXMgbm90aWZpY2F0aW9uIHR5cGUKICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gIlNFTEVDVCBub3RpZmljYXRpb25fdHlwZSwgbm90aWZpY2F0aW9uX2xhbmd1YWdlLCBzdWJqZWN0LCB0ZXh0LCBjb250ZW50X3R5cGUKICAgICAgICAgICAgICAgIEZST00gbm90aWZpY2F0aW9ucwogICAgICAgICAgICAgICAgV0hFUkUgbm90aWZpY2F0aW9uX3R5cGUgPSAnQWdlbnQ6OkNoYW5nZTo6JE5vdGlmaWNhdGlvblJ1bGUtPntFdmVudH0nCiAgICAgICAgICAgICAgICBPUiBub3RpZmljYXRpb25fdHlwZSAgICA9ICdBZ2VudDo6V29ya09yZGVyOjokTm90aWZpY2F0aW9uUnVsZS0+e0V2ZW50fScKICAgICAgICAgICAgICAgIE9SIG5vdGlmaWNhdGlvbl90eXBlICAgID0gJ0N1c3RvbWVyOjpDaGFuZ2U6OiROb3RpZmljYXRpb25SdWxlLT57RXZlbnR9JwogICAgICAgICAgICAgICAgT1Igbm90aWZpY2F0aW9uX3R5cGUgICAgPSAnQ3VzdG9tZXI6OldvcmtPcmRlcjo6JE5vdGlmaWNhdGlvblJ1bGUtPntFdmVudH0nIiwKICAgICAgICApOwoKICAgICAgICBteSBATWVzc2FnZXM7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCB0aGUgaW5mb3JtYXRpb24gaWYgdGhlIG5vdGlmaWNhdGlvbiBpcyBmb3IgYWdlbnRzIG9yIGN1c3RvbWVycwogICAgICAgICAgICAkUm93WzBdID1+IHN7IFxBICggQWdlbnQgfCBDdXN0b21lciApIDo6IC4rIH17JDF9eG1zOwoKICAgICAgICAgICAgIyBnZXQgbWVzc2FnZSBhdHRyaWJ1dGVzCiAgICAgICAgICAgIHB1c2ggQE1lc3NhZ2VzLCB7CiAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25UeXBlID0+ICRSb3dbMF0sCiAgICAgICAgICAgICAgICBMYW5ndWFnZSAgICAgICAgID0+ICRSb3dbMV0sCiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICAgID0+ICRSb3dbMl0sCiAgICAgICAgICAgICAgICBCb2R5ICAgICAgICAgICAgID0+ICRSb3dbM10sCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSAgICAgID0+ICRSb3dbNF0sCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJE1lc3NhZ2UgKEBNZXNzYWdlcykgewoKICAgICAgICAgICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGNoYW5nZV9ub3RpZmljYXRpb25fbWVzc2FnZQogICAgICAgICAgICAgICAgICAgIChub3RpZmljYXRpb25faWQsIHN1YmplY3QsIHRleHQsIGNvbnRlbnRfdHlwZSwgbGFuZ3VhZ2UsIG5vdGlmaWNhdGlvbl90eXBlKQogICAgICAgICAgICAgICAgICAgIFZBTFVFUyAoPywgPywgPywgPywgPywgPyknLAogICAgICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICAgICAgXCROb3RpZmljYXRpb25SdWxlLT57SUR9LAogICAgICAgICAgICAgICAgICAgIFwkTWVzc2FnZS0+e1N1YmplY3R9LAogICAgICAgICAgICAgICAgICAgIFwkTWVzc2FnZS0+e0JvZHl9LAogICAgICAgICAgICAgICAgICAgIFwkTWVzc2FnZS0+e0NvbnRlbnRUeXBlfSwKICAgICAgICAgICAgICAgICAgICBcJE1lc3NhZ2UtPntMYW5ndWFnZX0sCiAgICAgICAgICAgICAgICAgICAgXCRNZXNzYWdlLT57Tm90aWZpY2F0aW9uVHlwZX0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlbGV0ZSBhbGwgb2xkIG5vdGlmaWNhdGlvbnMgZm9yIHRoZSBjaGFuZ2UgbWFuYWdlbWVudAogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICdERUxFVEUgRlJPTSBub3RpZmljYXRpb25zCiAgICAgICAgICAgIFdIRVJFIG5vdGlmaWNhdGlvbl90eXBlIExJS0UgIkFnZW50OjpDaGFuZ2U6OiUiCiAgICAgICAgICAgIE9SIG5vdGlmaWNhdGlvbl90eXBlIExJS0UgIkFnZW50OjpXb3JrT3JkZXI6OiUiCiAgICAgICAgICAgIE9SIG5vdGlmaWNhdGlvbl90eXBlIExJS0UgIkN1c3RvbWVyOjpDaGFuZ2U6OiUiCiAgICAgICAgICAgIE9SIG5vdGlmaWNhdGlvbl90eXBlIExJS0UgIkN1c3RvbWVyOjpXb3JrT3JkZXI6OiUiJywKICAgICk7CgogICAgIyBnZXQgbnVtYmVyIG9mIHJlbWFpbmluZyBlbnRyaWVzCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIENPVU5UKGlkKSBGUk9NIG5vdGlmaWNhdGlvbnMnLAogICAgKTsKCiAgICBteSAkQ291bnQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRDb3VudCA9ICRSb3dbMF07CiAgICB9CgogICAgIyBkZWxldGUgdGFibGUgYnV0IG9ubHkgaWYgdGFibGUgaXMgZW1wdHkKICAgICMgaWYgdGhlcmUgYXJlIHNvbWUgZW50cmllcyBsZWZ0LCB0aGVzZSBtdXN0IGJlIGRlbGV0ZWQgYnkgb3RoZXIgbW9kdWxlcwogICAgIyBzbyB3ZSBnaXZlIHRoZW0gYSBjaGFuY2UgdG8gYmUgbWlncmF0ZWQgZnJvbSB0aGVzZSBtb2R1bGVzCiAgICBpZiAoICEkQ291bnQgKSB7CgogICAgICAgICMgZHJvcCB0YWJsZSAnbm90aWZpY2F0aW9ucycKICAgICAgICBteSAkWE1MU3RyaW5nID0gJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiA/PgogICAgICAgICAgICA8ZGF0YWJhc2UgTmFtZT0ib3RycyI+CiAgICAgICAgICAgICAgICA8VGFibGVEcm9wIE5hbWU9Im5vdGlmaWNhdGlvbnMiLz4KICAgICAgICAgICAgPC9kYXRhYmFzZT4nOwoKICAgICAgICBteSBAU1FMOwogICAgICAgIG15IEBTUUxQb3N0OwoKICAgICAgICBteSAkWE1MT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlhNTCcpOwoKICAgICAgICAjIGNyZWF0ZSBkYXRhYmFzZSBzcGVjaWZpYyBTUUwgYW5kIFBvc3RTUUwgY29tbWFuZHMKICAgICAgICBteSBAWE1MQVJSQVkgPSAkWE1MT2JqZWN0LT5YTUxQYXJzZSggU3RyaW5nID0+ICRYTUxTdHJpbmcgKTsKCiAgICAgICAgIyBjcmVhdGUgZGF0YWJhc2Ugc3BlY2lmaWMgU1FMCiAgICAgICAgcHVzaCBAU1FMLCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+U1FMUHJvY2Vzc29yKAogICAgICAgICAgICBEYXRhYmFzZSA9PiBcQFhNTEFSUkFZLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGRhdGFiYXNlIHNwZWNpZmljIFBvc3RTUUwKICAgICAgICBwdXNoIEBTUUxQb3N0LCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+U1FMUHJvY2Vzc29yUG9zdCgpOwoKICAgICAgICAjIGV4ZWN1dGUgU1FMCiAgICAgICAgZm9yIG15ICRTUUwgKCBAU1FMLCBAU1FMUG9zdCApIHsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oIFNRTCA9PiAkU1FMICk7CiAgICAgICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiRXJyb3IgZHVyaW5nIGV4ZWN1dGlvbiBvZiAnJFNRTCchIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9EZWxldGVUZW1wbGF0ZXMoKQoKZGVsZXRlcyBhbGwgdGVtcGxhdGVzCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fRGVsZXRlVGVtcGxhdGVzKCk7Cgo9Y3V0CgpzdWIgX0RlbGV0ZVRlbXBsYXRlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGFsbCB0ZW1wbGF0ZXMsIGFsc28gaW52YWxpZCBvbmVzCiAgICBteSAkVGVtcGxhdGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlJyktPlRlbXBsYXRlTGlzdCgKICAgICAgICBWYWxpZCAgPT4gMCwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBkZWxldGUgYWxsIHRlbXBsYXRlcwogICAgZm9yIG15ICRUZW1wbGF0ZUlEICggc29ydCBrZXlzICV7JFRlbXBsYXRlc30gKSB7CgogICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DaGFuZ2U6OlRlbXBsYXRlJyktPlRlbXBsYXRlRGVsZXRlKAogICAgICAgICAgICBUZW1wbGF0ZUlEID0+ICRUZW1wbGF0ZUlELAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9NaWdyYXRlRFRMSW5TeXNDb25maWcoKQoKQ29udmVydHMgRFRMIHNldHRpbmdzIGluIHN5c2NvbmZpZyB0byBUVC4KCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9NaWdyYXRlRFRMSW5TeXNDb25maWcoKTsKCj1jdXQKCnN1YiBfTWlncmF0ZURUTEluU3lzQ29uZmlnIHsKCiAgICAjIGNyZWF0ZSBuZWVkZWQgb2JqZWN0cwogICAgbXkgJENvbmZpZ09iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkU3lzQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpOwogICAgbXkgJFByb3ZpZGVyT2JqZWN0ICA9IEtlcm5lbDo6T3V0cHV0OjpUZW1wbGF0ZTo6UHJvdmlkZXItPm5ldygpOwoKICAgICMgaGFuZGxlIGhhc2ggc2V0dGluZ3MKICAgIE5BTUU6CiAgICBmb3IgbXkgJE5hbWUgKAogICAgICAgIHF3KAogICAgICAgIFRpY2tldDo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUKICAgICAgICBJVFNNQ2hhbmdlOjpGcm9udGVuZDo6TWVudU1vZHVsZQogICAgICAgIElUU01Xb3JrT3JkZXI6OkZyb250ZW5kOjpNZW51TW9kdWxlCiAgICAgICAgKQogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBnZXQgc2V0dGluZydzIGNvbnRlbnQKICAgICAgICBteSAkU2V0dGluZyA9ICRDb25maWdPYmplY3QtPkdldCgkTmFtZSk7CiAgICAgICAgbmV4dCBOQU1FIGlmICEkU2V0dGluZzsKCiAgICAgICAgTUVOVU1PRFVMRToKICAgICAgICBmb3IgbXkgJE1lbnVNb2R1bGUgKCBzb3J0IGtleXMgJXskU2V0dGluZ30gKSB7CgogICAgICAgICAgICAjIHNldHRpbmcgaXMgYSBoYXNoCiAgICAgICAgICAgIFNFVFRJTkdJVEVNOgogICAgICAgICAgICBmb3IgbXkgJFNldHRpbmdJdGVtICggc29ydCBrZXlzICV7ICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9IH0gKSB7CgogICAgICAgICAgICAgICAgbXkgJFNldHRpbmdDb250ZW50ID0gJFNldHRpbmctPnskTWVudU1vZHVsZX0tPnskU2V0dGluZ0l0ZW19OwoKICAgICAgICAgICAgICAgICMgZG8gbm90aGluZyBpZiB0aGVyZSBpcyBubyB2YWx1ZSBmb3IgbWlncmF0aW5nCiAgICAgICAgICAgICAgICBuZXh0IFNFVFRJTkdJVEVNIGlmICEkU2V0dGluZ0NvbnRlbnQ7CgogICAgICAgICAgICAgICAgbXkgJFRUQ29udGVudDsKICAgICAgICAgICAgICAgIGV2YWwgewogICAgICAgICAgICAgICAgICAgICRUVENvbnRlbnQgPSAkUHJvdmlkZXJPYmplY3QtPk1pZ3JhdGVEVEx0b1RUKCBDb250ZW50ID0+ICRTZXR0aW5nQ29udGVudCApOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGlmICgkQCkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJE1lbnVNb2R1bGUtPiRTZXR0aW5nSXRlbSA6ICRAISIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9LT57JFNldHRpbmdJdGVtfSA9ICRUVENvbnRlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgdXBkYXRlIHRoZSBjb25maWcgaXRlbQogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTeXNDb25maWdPYmplY3QtPkNvbmZpZ0l0ZW1VcGRhdGUoCiAgICAgICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICAgICAgS2V5ICAgPT4gJE5hbWUsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkU2V0dGluZywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9NaWdyYXRlQ29uZmlncygpCgpjaGFuZ2UgY29uZmlndXJhdGlvbnMgdG8gbWF0Y2ggdGhlIG5ldyBtb2R1bGUgbG9jYXRpb24uCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fTWlncmF0ZUNvbmZpZ3MoKTsKCj1jdXQKCnN1YiBfTWlncmF0ZUNvbmZpZ3MgewoKICAgICMgY3JlYXRlIG5lZWRlZCBvYmplY3RzCiAgICBteSAkU3lzQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpOwogICAgbXkgJENvbmZpZ09iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBtaWdyYXRlIE5hdkJhciBtZW51IG1vZHVsZXMKICAgICMgZ2V0IHNldHRpbmcgY29udGVudCBmb3IgTmF2QmFyIG1lbnUgbW9kdWxlcwogICAgbXkgJFNldHRpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKTsKCiAgICBOQVZCQVJNT0RVTEU6CiAgICBmb3IgbXkgJE1vZHVsZUFkbWluICggc29ydCBrZXlzICV7JFNldHRpbmd9ICkgewoKICAgICAgICAjIHVwZGF0ZSBtb2R1bGUgbG9jYXRpb24KICAgICAgICBteSAkTW9kdWxlID0gJFNldHRpbmctPnskTW9kdWxlQWRtaW59LT57TmF2QmFyTW9kdWxlfS0+eydNb2R1bGUnfSAvLyAnJzsKCiAgICAgICAgaWYgKCAkTW9kdWxlICF+IG17S2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5hdkJhcihcdyspfSApIHsKICAgICAgICAgICAgbmV4dCBOQVZCQVJNT0RVTEU7CiAgICAgICAgfQogICAgICAgICRTZXR0aW5nLT57JE1vZHVsZUFkbWlufS0+e05hdkJhck1vZHVsZX0tPnsnTW9kdWxlJ30gPSAiS2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5hdkJhcjo6TW9kdWxlQWRtaW4iOwoKICAgICAgICAjIHNldCBuZXcgc2V0dGluZywKICAgICAgICBteSAkU3VjY2VzcyA9ICRTeXNDb25maWdPYmplY3QtPkNvbmZpZ0l0ZW1VcGRhdGUoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdGcm9udGVuZDo6TW9kdWxlIyMjJyAuICRNb2R1bGVBZG1pbiwKICAgICAgICAgICAgVmFsdWUgPT4gJFNldHRpbmctPnskTW9kdWxlQWRtaW59LAogICAgICAgICk7CiAgICB9CgogICAgIyBtaWdyYXRlIElUU00gbWVudSBtb2R1bGVzCiAgICAjIGdldCBzZXR0aW5nIGNvbnRlbnQgZm9yIElUU00gbWVudSBtb2R1bGVzCiAgICBmb3IgbXkgJFR5cGUgKHF3KElUU01DaGFuZ2UgSVRTTVdvcmtPcmRlcikpIHsKCiAgICAgICAgJFNldHRpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoICRUeXBlIC4gJzo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnICk7CgogICAgICAgIE1FTlVNT0RVTEU6CiAgICAgICAgZm9yIG15ICRNZW51TW9kdWxlICggc29ydCBrZXlzICV7JFNldHRpbmd9ICkgewoKICAgICAgICAgICAgIyB1cGRhdGUgbW9kdWxlIGxvY2F0aW9uCiAgICAgICAgICAgIG15ICRNb2R1bGUgPSAkU2V0dGluZy0+eyRNZW51TW9kdWxlfS0+eydNb2R1bGUnfTsKCiAgICAgICAgICAgIGlmICggJE1vZHVsZSAhfiBte0tlcm5lbDo6T3V0cHV0OjpIVE1MOjokVHlwZShcdyspfSApIHsKICAgICAgICAgICAgICAgIG5leHQgTUVOVU1PRFVMRTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJE5ld01lbnUgPSAkVHlwZSAuICI6OiQxIjsKICAgICAgICAgICAgJE1vZHVsZSA9fiBze0tlcm5lbDo6T3V0cHV0OjpIVE1MOjokVHlwZShcdyspfXtLZXJuZWw6Ok91dHB1dDo6SFRNTDo6JE5ld01lbnV9eG1zZzsKCiAgICAgICAgICAgICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9LT57J01vZHVsZSd9ID0gJE1vZHVsZTsKCiAgICAgICAgICAgICMgc2V0IG5ldyBzZXR0aW5nLAogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTeXNDb25maWdPYmplY3QtPkNvbmZpZ0l0ZW1VcGRhdGUoCiAgICAgICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICAgICAgS2V5ICAgPT4gJFR5cGUgLiAnOjpGcm9udGVuZDo6TWVudU1vZHVsZScgLiAnIyMjJyAuICRNZW51TW9kdWxlLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFNldHRpbmctPnskTWVudU1vZHVsZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgbWlncmF0ZSBJVFNNIHByZWZlcmVuY2VzCiAgICAjIGdldCBzZXR0aW5nIGNvbnRlbnQgZm9yIHByZWZlcmVuY2VzCiAgICAkU2V0dGluZyA9ICRDb25maWdPYmplY3QtPkdldCgnUHJlZmVyZW5jZXNHcm91cHMnKTsKCiAgICBQUkVGRVJFTkNFTU9EVUxFOgogICAgZm9yIG15ICRQcmVmZXJlbmNlTW9kdWxlICggc29ydCBrZXlzICV7JFNldHRpbmd9ICkgewoKICAgICAgICAjIHVwZGF0ZSBtb2R1bGUgbG9jYXRpb24KICAgICAgICBteSAkTW9kdWxlID0gJFNldHRpbmctPnskUHJlZmVyZW5jZU1vZHVsZX0tPnsnTW9kdWxlJ307CiAgICAgICAgaWYgKCAkTW9kdWxlICF+IG17S2VybmVsOjpPdXRwdXQ6OkhUTUw6OlByZWZlcmVuY2VzKFx3Kyl9ICkgewogICAgICAgICAgICBuZXh0IFBSRUZFUkVOQ0VNT0RVTEU7CiAgICAgICAgfQoKICAgICAgICAkTW9kdWxlID1+IHN7S2VybmVsOjpPdXRwdXQ6OkhUTUw6OlByZWZlcmVuY2VzKFx3Kyl9e0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpQcmVmZXJlbmNlczo6JDF9eG1zZzsKICAgICAgICAkU2V0dGluZy0+eyRQcmVmZXJlbmNlTW9kdWxlfS0+eydNb2R1bGUnfSA9ICRNb2R1bGU7CgogICAgICAgICMgc2V0IG5ldyBzZXR0aW5nLAogICAgICAgIG15ICRTdWNjZXNzID0gJFN5c0NvbmZpZ09iamVjdC0+Q29uZmlnSXRlbVVwZGF0ZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ1ByZWZlcmVuY2VzR3JvdXBzIyMjJyAuICRQcmVmZXJlbmNlTW9kdWxlLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2V0dGluZy0+eyRQcmVmZXJlbmNlTW9kdWxlfSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfTWlncmF0ZUNvbmZpZ3NGcm9tTG93ZXJUaGFuXzVfMF8xMigpCgpjaGFuZ2UgY29uZmlndXJhdGlvbnMgdG8gbWF0Y2ggdGhlIG5ldyBmaWxlIGxvY2F0aW9uLgoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X01pZ3JhdGVDb25maWdzRnJvbUxvd2VyVGhhbl81XzBfMTIoKTsKCj1jdXQKCnN1YiBfTWlncmF0ZUNvbmZpZ3NGcm9tTG93ZXJUaGFuXzVfMF8xMiB7ICAgICMjIG5vIGNyaXRpYwoKICAgICMgY3JlYXRlIG5lZWRlZCBvYmplY3RzCiAgICBteSAkU3lzQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpOwogICAgbXkgJENvbmZpZ09iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgc2V0dGluZyBjb250ZW50IGZvciBhbGwgZnJvbnRlbmQgbW9kdWxlcwogICAgbXkgJEZyb250ZW5kQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyk7CgogICAgRlJPTlRFTkRNT0RVTEU6CiAgICBmb3IgbXkgJE1vZHVsZSAoIHNvcnQga2V5cyAleyRGcm9udGVuZENvbmZpZ30gKSB7CgogICAgICAgIG5leHQgRlJPTlRFTkRNT0RVTEUgaWYgISRGcm9udGVuZENvbmZpZy0+eyRNb2R1bGV9LT57TG9hZGVyfTsKICAgICAgICBuZXh0IEZST05URU5ETU9EVUxFIGlmICEkRnJvbnRlbmRDb25maWctPnskTW9kdWxlfS0+e0xvYWRlcn0tPntKYXZhU2NyaXB0fTsKICAgICAgICBuZXh0IEZST05URU5ETU9EVUxFIGlmICFAeyAkRnJvbnRlbmRDb25maWctPnskTW9kdWxlfS0+e0xvYWRlcn0tPntKYXZhU2NyaXB0fSB9OwoKICAgICAgICAjIGNoZWNrIGlmIHNldHRpbmcgY29udGFpbnMgdGhlIGZpbGUgSVRTTS5BZ2VudC5Db25maXJtYXRpb25EaWFsb2cuanMKICAgICAgICBuZXh0IEZST05URU5ETU9EVUxFCiAgICAgICAgICAgIGlmICFncmVwIHsgJF8gZXEgJ0lUU00uQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nLmpzJyB9CiAgICAgICAgICAgIEB7ICRGcm9udGVuZENvbmZpZy0+eyRNb2R1bGV9LT57TG9hZGVyfS0+e0phdmFTY3JpcHR9IH07CgogICAgICAgICMgYnVpbGQgbmV3IHNldHRpbmdzIHdpdGggcmVuYW1lZCBKYXZhc2NyaXB0IGZpbGUKICAgICAgICBteSBATmV3SmF2YXNjcmlwdExvYWRlclNldHRpbmdzOwogICAgICAgIGZvciBteSAkTG9hZGVyU2V0dGluZyAoIEB7ICRGcm9udGVuZENvbmZpZy0+eyRNb2R1bGV9LT57TG9hZGVyfS0+e0phdmFTY3JpcHR9IH0gKSB7CiAgICAgICAgICAgIGlmICggJExvYWRlclNldHRpbmcgZXEgJ0lUU00uQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nLmpzJyApIHsKCiAgICAgICAgICAgICAgICAjIGNoYW5nZSB0aGUgc2V0dGluZyAocmVuYW1lIHRoZSBmaWxlKQogICAgICAgICAgICAgICAgcHVzaCBATmV3SmF2YXNjcmlwdExvYWRlclNldHRpbmdzLCAnSVRTTS5BZ2VudC5Db25maXJtRGlhbG9nLmpzJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICMgdXNlIHRoZSBvcmlnaW5hbCBzZXR0aW5nCiAgICAgICAgICAgICAgICBwdXNoIEBOZXdKYXZhc2NyaXB0TG9hZGVyU2V0dGluZ3MsICRMb2FkZXJTZXR0aW5nOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoYW5nZSB0aGUgSlMgbG9hZGVyIHNldHRpbmdzCiAgICAgICAgJEZyb250ZW5kQ29uZmlnLT57JE1vZHVsZX0tPntMb2FkZXJ9LT57SmF2YVNjcmlwdH0gPSBcQE5ld0phdmFzY3JpcHRMb2FkZXJTZXR0aW5nczsKCiAgICAgICAgIyBzZXQgbmV3IHNldHRpbmcKICAgICAgICBteSAkU3VjY2VzcyA9ICRTeXNDb25maWdPYmplY3QtPkNvbmZpZ0l0ZW1VcGRhdGUoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdGcm9udGVuZDo6TW9kdWxlIyMjJyAuICRNb2R1bGUsCiAgICAgICAgICAgIFZhbHVlID0+ICRGcm9udGVuZENvbmZpZy0+eyRNb2R1bGV9LAogICAgICAgICk7CiAgICB9CgogICAgIyBtaWdyYXRlIElUU00gbWVudSBtb2R1bGVzCiAgICAjIGdldCBzZXR0aW5nIGNvbnRlbnQgZm9yIElUU00gbWVudSBtb2R1bGVzCiAgICBmb3IgbXkgJFR5cGUgKHF3KElUU01DaGFuZ2UgSVRTTVdvcmtPcmRlcikpIHsKCiAgICAgICAgIyBnZXQgbWVudSBtb2R1bGUgc2V0dGluZwogICAgICAgIG15ICRTZXR0aW5nID0gJENvbmZpZ09iamVjdC0+R2V0KCAkVHlwZSAuICc6OkZyb250ZW5kOjpNZW51TW9kdWxlJyApOwoKICAgICAgICBNRU5VTU9EVUxFOgogICAgICAgIGZvciBteSAkTWVudU1vZHVsZSAoIHNvcnQga2V5cyAleyRTZXR0aW5nfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHRhcmdldCBzZXR0aW5nCiAgICAgICAgICAgIG15ICRUYXJnZXQgPSAkU2V0dGluZy0+eyRNZW51TW9kdWxlfS0+eydUYXJnZXQnfTsKCiAgICAgICAgICAgICMgY2hlY2sgZm9yIHRoZSBvbGQgbmFtZQogICAgICAgICAgICBuZXh0IE1FTlVNT0RVTEUgaWYgJFRhcmdldCBuZSAnQ29uZmlybWF0aW9uRGlhbG9nJzsKCiAgICAgICAgICAgICMgdXBkYXRlIHRvIG5ldyBuYW1lCiAgICAgICAgICAgICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9LT57J1RhcmdldCd9ID0gJ0NvbmZpcm1EaWFsb2cnOwoKICAgICAgICAgICAgIyBzZXQgbmV3IHNldHRpbmcKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU3lzQ29uZmlnT2JqZWN0LT5Db25maWdJdGVtVXBkYXRlKAogICAgICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgICAgIEtleSAgID0+ICRUeXBlIC4gJzo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnIC4gJyMjIycgLiAkTWVudU1vZHVsZSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKMTsKCj1lbmQgSW50ZXJuYWw6Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
ITSM::ChangeManagement::Category
1 very low
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Category
2 low
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Category
3 normal
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Category
4 high
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Category
5 very high
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Impact
1 very low
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Impact
2 low
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Impact
3 normal
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Impact
4 high
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Impact
5 very high
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Priority
1 very low
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Priority
2 low
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Priority
3 normal
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Priority
4 high
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Priority
5 very high
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Change::State
requested
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Change::State
pending approval
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Change::State
rejected
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Change::State
approved
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Change::State
in progress
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Change::State
pending pir
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Change::State
successful
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Change::State
failed
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Change::State
canceled
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::Change::State
retracted
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::WorkOrder::State
created
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::WorkOrder::State
accepted
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::WorkOrder::State
ready
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::WorkOrder::State
in progress
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::WorkOrder::State
closed
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::WorkOrder::State
canceled
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::WorkOrder::Type
approval
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::WorkOrder::Type
workorder
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::WorkOrder::Type
backout
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::WorkOrder::Type
decision
1
current_timestamp
1
current_timestamp
1
ITSM::ChangeManagement::WorkOrder::Type
pir
1
current_timestamp
1
current_timestamp
1
ChangeAdd
1
current_timestamp
1
current_timestamp
1
ChangeUpdate
1
current_timestamp
1
current_timestamp
1
ChangeDelete
1
current_timestamp
1
current_timestamp
1
ChangeCABUpdate
1
current_timestamp
1
current_timestamp
1
ChangeCABDelete
1
current_timestamp
1
current_timestamp
1
ChangeLinkAdd
1
current_timestamp
1
current_timestamp
1
ChangeLinkDelete
1
current_timestamp
1
current_timestamp
1
ChangeAttachmentAdd
1
current_timestamp
1
current_timestamp
1
ChangeAttachmentDelete
1
current_timestamp
1
current_timestamp
1
WorkOrderAdd
1
current_timestamp
1
current_timestamp
1
WorkOrderUpdate
1
current_timestamp
1
current_timestamp
1
WorkOrderDelete
1
current_timestamp
1
current_timestamp
1
WorkOrderLinkAdd
1
current_timestamp
1
current_timestamp
1
WorkOrderLinkDelete
1
current_timestamp
1
current_timestamp
1
WorkOrderAttachmentAdd
1
current_timestamp
1
current_timestamp
1
WorkOrderAttachmentDelete
1
current_timestamp
1
current_timestamp
1
WorkOrderReportAttachmentAdd
1
current_timestamp
1
current_timestamp
1
WorkOrderReportAttachmentDelete
1
current_timestamp
1
current_timestamp
1
ChangePlannedStartTimeReached
1
current_timestamp
1
current_timestamp
1
ChangePlannedEndTimeReached
1
current_timestamp
1
current_timestamp
1
ChangeActualStartTimeReached
1
current_timestamp
1
current_timestamp
1
ChangeActualEndTimeReached
1
current_timestamp
1
current_timestamp
1
WorkOrderPlannedStartTimeReached
1
current_timestamp
1
current_timestamp
1
WorkOrderPlannedEndTimeReached
1
current_timestamp
1
current_timestamp
1
WorkOrderActualStartTimeReached
1
current_timestamp
1
current_timestamp
1
WorkOrderActualEndTimeReached
1
current_timestamp
1
current_timestamp
1
ChangeRequestedTimeReached
1
current_timestamp
1
current_timestamp
1
ConditionAdd
1
current_timestamp
1
current_timestamp
1
ConditionUpdate
1
current_timestamp
1
current_timestamp
1
ConditionDelete
1
current_timestamp
1
current_timestamp
1
ConditionDeleteAll
1
current_timestamp
1
current_timestamp
1
ExpressionAdd
1
current_timestamp
1
current_timestamp
1
ExpressionUpdate
1
current_timestamp
1
current_timestamp
1
ExpressionDelete
1
current_timestamp
1
current_timestamp
1
ExpressionDeleteAll
1
current_timestamp
1
current_timestamp
1
ActionAdd
1
current_timestamp
1
current_timestamp
1
ActionUpdate
1
current_timestamp
1
current_timestamp
1
ActionDelete
1
current_timestamp
1
current_timestamp
1
ActionDeleteAll
1
current_timestamp
1
current_timestamp
1
ActionExecute
1
current_timestamp
1
current_timestamp
1
ChangeNotificationSent
1
current_timestamp
1
current_timestamp
1
WorkOrderNotificationSent
1
current_timestamp
1
current_timestamp
1
RfC
1
current_timestamp
1
current_timestamp
1
ITSMChange
ITSMWorkOrder
ChangeStateID
ChangeTitle
CategoryID
ImpactID
PriorityID
ChangeManagerID
ChangeBuilderID
RequestedTime
PlannedStartTime
PlannedEndTime
ActualStartTime
ActualEndTime
PlannedEffort
AccountedTime
WorkOrderNumber
WorkOrderStateID
WorkOrderTypeID
WorkOrderTitle
WorkOrderAgentID
is
is not
is empty
is not empty
is greater than
is less than
is before
is after
contains
not contains
begins with
ends with
set
lock
ChangeBuilder
OldChangeBuilder
ChangeManager
OldChangeManager
CABCustomers
CABAgents
WorkOrderAgents
WorkOrderAgent
OldWorkOrderAgent
ChangeInitiators
GroupITSMChange
GroupITSMChangeBuilder
GroupITSMChangeManager
ITSMChange
1
current_timestamp
1
current_timestamp
1
ITSMWorkOrder
1
current_timestamp
1
current_timestamp
1
CAB
1
current_timestamp
1
current_timestamp
1
ITSMCondition
1
current_timestamp
1
current_timestamp
1
ChangeNotificationSent
1
current_timestamp
1
current_timestamp
1
WorkOrderNotificationSent
1
current_timestamp
1
current_timestamp
1
WorkOrderReportAttachmentAdd
1
current_timestamp
1
current_timestamp
1
WorkOrderReportAttachmentDelete
1
current_timestamp
1
current_timestamp
1