Survey
2.0.94
OTRS AG
http://otrs.org/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
Bugfixes 7983, 8114, 8124, 8127.
Added polish translations.
Added delayed sending and maximum survey limit per customer and 30 days.
Build for Survey 2.1.0 beta1.
A customer survey tool.
Ein Kundenumfragen Werkzeug.
Una herramienta de encuestas a clientes.
3.1.x
<br>
<strong>WELCOME</strong>
<br>
<br>
You are about to install the OTRS package Survey.<br>
<br>
<br>
<strong>ATTENTION</strong>
<br>
<br>
Make sure your database accepts packages over 5 MB in size. A MySQL database for example accepts packages up to 1 MB by default. In this case, the value for max_allowed_packet must be increased. The recommended maximum size accepted is 20 MB.<br>
<br>
<br>
((enjoy))<br>
<br>
<br>
<strong>WILLKOMMEN</strong>
<br>
<br>
Sie sind im Begriff das OTRS-Paket Survey zu installieren.<br>
<br>
<br>
<strong>ACHTUNG</strong>
<br>
<br>
Vergewissern Sie sich, dass ihre Datenbank Pakete mit einer Größe von mehr als 5 MB akzeptiert. Eine MySQL Datenbank akzeptiert beispielsweise standardmäßig Pakete mit einer Größe von maximal 1 MB. In diesem Fall muss der Wert für max_allowed_packet erhöht werden. Empfohlen werden 20 MB.<br>
<br>
<br>
((enjoy))<br>
<br>
<br>
<strong>BIENVENIDO</strong>
<br>
<br>
Está apunto de instalar el módulo de encuestas de OTRS.<br>
<br>
<br>
<strong>ATENCIÓN</strong>
<br>
<br>
Asegúrese de que su base de datos acepta packetes de arriba de 5 MB de tamaño. Por ejemplo una base de datos MySQL acepta packetes de arriba de 1 MB por defecto. En este caso el valor max_allowed_packet debe ser incrementado. El tamaño máximo recomendado es de 20 MB.<br>
<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>
((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>
((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 serán irrevocablemente perdidos!.
<br>
<br>
((enjoy))<br>
<br>
<br>
<strong>WELCOME</strong>
<br>
<br>
You are about to upgrade the OTRS package Survey.<br>
<br>
<br>
<strong>ATTENTION</strong>
<br>
<br>
Make sure your database accepts packages over 5 MB in size. A MySQL database for example accepts packages up to 1 MB by default. In this case, the value for max_allowed_packet must be increased. The recommended maximum size accepted is 20 MB.<br>
<br>
<br>
((enjoy))<br>
<br>
<br>
<strong>WILLKOMMEN</strong>
<br>
<br>
Sie sind im Begriff das OTRS-Paket Survey zu aktualisieren.<br>
<br>
<br>
<strong>ACHTUNG</strong>
<br>
<br>
Vergewissern Sie sich, dass ihre Datenbank Pakete mit einer Größe von mehr als 5 MB akzeptiert. Eine MySQL Datenbank akzeptiert beispielsweise standardmäßig Pakete mit einer Größe von maximal 1 MB. In diesem Fall muss der Wert für max_allowed_packet erhöht werden. Empfohlen werden 20 MB.<br>
<br>
<br>
((enjoy))<br>
<br>
<br>
<strong>BIENVENIDO</strong>
<br>
<br>
Esta apunto de actualizar el módulo de encuestas de OTRS.<br>
<br>
<br>
<strong>ATENCIÓN</strong>
<br>
<br>
Asegúrese de que su base de datos acepta packetes de arriba de 5 MB de tamaño. Por ejemplo una base de datos MySQL acepta packetes de arriba de 1 MB por defecto. En este caso el valor max_allowed_packet debe ser incrementado. El tamaño máximo recomendado es de 20 MB.<br>
<br>
<br>
((enjoy))<br>
<br>
# define function name
my $FunctionName = 'CodeUpgradeFromLowerThan_2_0_92';
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# The code module has just recently been copied to it's location in the file system.
# In a persistent Perl environment an old version of the module might still be loaded,
# as watchdogs like Apache2::Reload haven't had a chance to reload it.
# So we need to make sure that the new version is being loaded.
# Kernel::System::Main::Require() checks the relative file path, so we need to remove that from %INC.
# This is only needed in persistent Perl environment, but does no harm in a CGI environment.
my $CodeModulePath = $CodeModule;
$CodeModulePath =~ s/::/\//g;
$CodeModulePath .= '.pm';
delete $INC{$CodeModulePath};
# load the module
if ( $Self->{MainObject}->Require($CodeModule) ) {
# create new instance
my $CodeObject = $CodeModule->new( %{$Self} );
if ($CodeObject) {
# start methode
if ( !$CodeObject->$FunctionName(%{$Self}) ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method $FunctionName() on $CodeModule.pm."
);
}
}
# error handling
else {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method new() on $CodeModule.pm."
);
}
}
2012-01-27 13:48:16
opms.otrs.com
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjEuMCIgaW5pdD0iQXBwbGljYXRpb24iPgogICAgPENWUz4kSWQ6IFN1cnZleS54bWwsdiAxLjMwIDIwMTIvMDEvMTkgMTQ6MzI6NDQgbWIgRXhwICQ8L0NWUz4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudFN1cnZleSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BbGwgcGFyYW1ldGVycyBmb3IgdGhlIFN1cnZleSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkEgU3VydmV5IE1vZHVsZS48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+U3VydmV5PC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlPlN1cnZleTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkEgU3VydmV5IE1vZHVsZS48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lIFRyYW5zbGF0YWJsZT0iMSI+U3VydmV5PC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPk1lbnU8L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPkl0ZW1BcmVhPC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRTdXJ2ZXk8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5TdXJ2ZXk8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PnU8L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz44MDAwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk92ZXJ2aWV3PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZSBUcmFuc2xhdGFibGU9IjEiPk92ZXJ2aWV3PC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudFN1cnZleTwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5TdXJ2ZXk8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5Pm88L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4xMDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TmV3PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZSBUcmFuc2xhdGFibGU9IjEiPk5ldzwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRTdXJ2ZXk7U3ViYWN0aW9uPVN1cnZleUFkZDwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5TdXJ2ZXk8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5Pm48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4yMDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5TdXJ2ZXkuQWdlbnQuRGVmYXVsdC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTX0lFNz5TdXJ2ZXkuQWdlbnQuRGVmYXVsdC5JRTcuY3NzPC9DU1NfSUU3PgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50U3VydmV5Wm9vbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciBzdXJ2ZXkgem9vbSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U3VydmV5IFpvb20gTW9kdWxlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5TdXJ2ZXk8L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+U3VydmV5LkFnZW50LkRlZmF1bHQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTU19JRTc+U3VydmV5LkFnZW50LkRlZmF1bHQuSUU3LmNzczwvQ1NTX0lFNz4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5TdXJ2ZXkuQWdlbnQuU3VydmV5Wm9vbS5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3Igc3VydmV5IHpvb20gaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkEgbW9kdWxlIHRvIGVkaXQgc3VydmV5IHF1ZXN0aW9ucy48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPlN1cnZleS5BZ2VudC5EZWZhdWx0LmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxDU1NfSUU3PlN1cnZleS5BZ2VudC5EZWZhdWx0LklFNy5jc3M8L0NTU19JRTc+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQdWJsaWNGcm9udGVuZDo6TW9kdWxlIyMjUHVibGljU3VydmV5IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBQdWJsaWNTdXJ2ZXkgb2JqZWN0IGluIHRoZSBwdWJsaWMgU3VydmV5IGFyZWEuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+U3VydmV5PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UHVibGljIFN1cnZleS48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+U3VydmV5PC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlPlN1cnZleTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+U3VydmV5LkN1c3RvbWVyLkRlZmF1bHQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTU19JRTc+U3VydmV5LkN1c3RvbWVyLkRlZmF1bHQuSUU3LmNzczwvQ1NTX0lFNz4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN1cnZleTo6U2hvd1ZvdGVEYXRhIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkVuYWJsZSBvciBkaXNhYmxlIHRoZSBTaG93Vm90ZURhdGEgc2NyZWVuIGluIHRoZSBwdWJsaWMgaW50ZXJmYWNlIHRvIHNob3cgZGF0YSBvZiBhIHNwZWNpZmljIHN1cnZleSByZXN1bHQgd2hlbiB0aGUgY3VzdG9tZXIgdHJpZXMgdG8gYW5zd2VyIGEgc3VydmV5IHRoZSBzZWNvbmQgdGltZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpTdXJ2ZXk8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjAiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJTdXJ2ZXk6OlNlbmRQZXJpb2QiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QW1vdW50IG9mIGRheXMgYWZ0ZXIgc2VuZGluZyBhIHN1cnZleSBtYWlsIGluIHdoaWNoIG5vIG5ldyBzdXJ2ZXkgcmVxdWVzdHMgYXJlIHNlbnQgdG8gdGhlIHNhbWUgY3VzdG9tZXIuIFNlbGVjdGluZyAwIHdpbGwgYWx3YXlzIHNlbmQgdGhlIHN1cnZleSBtYWlsLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OlN1cnZleTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+MzAwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iU3VydmV5OjpOb3RpZmljYXRpb25TZW5kZXIiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzZW5kZXIgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+U3VydmV5PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6U3VydmV5PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj5xdWFsaXR5QGV4YW1wbGUuY29tPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iU3VydmV5OjpOb3RpZmljYXRpb25TdWJqZWN0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgc3ViamVjdCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpTdXJ2ZXk8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPkhlbHAgdXMgd2l0aCB5b3VyIGZlZWRiYWNrITwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN1cnZleTo6Tm90aWZpY2F0aW9uQm9keSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZhdWx0IGJvZHkgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+U3VydmV5PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6U3VydmV5PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFRleHRBcmVhPkRlYXIgQ3VzdG9tZXIsCgpUaGFua3MgZm9yIHVzaW5nIG91ciBzZXJ2aWNlLiBIZWxwIHVzIHRvIGltcHJvdmUgdXMgYW5kIG91ciBzZXJ2aWNlcy4KClBsZWFzZSBnaXZlIHVzIGZlZWRiYWNrIG9uIGhvdyB0byBpbXByb3ZlIG91ciBzZXJ2aWNlczoKCiZsdDtPVFJTX0NPTkZJR19IdHRwVHlwZSZndDs6Ly8mbHQ7T1RSU19DT05GSUdfRlFETiZndDsvJmx0O09UUlNfQ09ORklHX1NjcmlwdEFsaWFzJmd0O3B1YmxpYy5wbD9BY3Rpb249UHVibGljU3VydmV5O1B1YmxpY1N1cnZleUtleT0mbHQ7T1RSU19QdWJsaWNTdXJ2ZXlLZXkmZ3Q7CgpUaGFua3MgZm9yIHlvdXIgaGVscCEKCllvdXIgT1RSUy1UZWFtCiAgICAgICAgICAgIDwvVGV4dEFyZWE+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iU3VydmV5OjpTZW5kTm9TdXJ2ZXlSZWdFeHAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SWYgdGhpcyByZWdleCBtYXRjaGVzLCBubyBjdXN0b21lciBzdXJ2ZXkgd2lsbCBiZSBzZW50LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OlN1cnZleTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+KE1BSUxFUi1EQUVNT058cG9zdG1hc3RlcnxhYnVzZSlALis/XC4uKz88L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaWNrZXQ6OkV2ZW50TW9kdWxlUG9zdCMjIzk5LVN1cnZleVNlbmRSZXF1ZXN0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRpY2tldCBldmVudCBtb2R1bGUgdG8gc2VuZCBhdXRvbWF0aWNhbGx5IHN1cnZleSBlbWFpbCByZXF1ZXN0cyB0byBjdXN0b21lcnMgaWYgYSB0aWNrZXQgaXMgY2xvc2VkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OlN1cnZleTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkV2ZW50OjpTdXJ2ZXlTZW5kUmVxdWVzdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXZlbnQiPihBcnRpY2xlQ3JlYXRlfFRpY2tldFN0YXRlVXBkYXRlKTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN1cnZleTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3IyMjU21hbGwiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHN1cnZleSBsaXN0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6U3VydmV5T3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6U3VydmV5T3ZlcnZpZXdTbWFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+U21hbGw8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBhZ2VTaG93biI+MjU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltYWdlIj5vdmVydmlld3NtYWxsLnBuZzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSW1hZ2VTZWxlY3RlZCI+b3ZlcnZpZXdzbWFsbC1zZWxlY3RlZC5wbmc8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJTdXJ2ZXk6OkZyb250ZW5kOjpBZ2VudFN1cnZleSMjI1Nob3dDb2x1bW5zIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIHN1cnZleSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbnMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+U3VydmV5PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpWaWV3U3VydmV5T3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTnVtYmVyIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSW50cm9kdWN0aW9uIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTm90aWZpY2F0aW9uU2VuZGVyIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOb3RpZmljYXRpb25TdWJqZWN0Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOb3RpZmljYXRpb25Cb2R5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTdGF0dXMiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyZWF0ZVRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNyZWF0ZUJ5Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VUaW1lIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VCeSI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN1cnZleTo6RnJvbnRlbmQ6OkhUTUxSaWNoVGV4dEhlaWdodERlZmF1bHQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBoZWlnaHQgZm9yIFJpY2h0ZXh0IHZpZXdzIGZvciBTdXJ2ZXlab29tIGVsZW1lbnRzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6U3VydmV5Wm9vbTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5bMC05XXsxLDR9JCI+ODA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJTdXJ2ZXk6OkZyb250ZW5kOjpIVE1MUmljaFRleHRIZWlnaHRNYXgiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCBoZWlnaHQgZm9yIFJpY2h0ZXh0IHZpZXdzIGZvciBTdXJ2ZXlab29tIGVsZW1lbnRzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6U3VydmV5Wm9vbTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9Il5bMC05XXsxLDR9JCI+MjUwMDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN1cnZleTo6U2VuZEluSG91cnNBZnRlckNsb3NlIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGFtb3VudCBpbiBob3VycyBhIHRpY2tldCBoYXMgdG8gYmUgY2xvc2VkIHRvIHRyaWdnZXIgdGhlIHNlbmRpbmcgb2YgYSBzdXJ2ZXksICggMCBtZWFucyBzZW5kIGltbWVkaWF0ZWx5IGFmdGVyIGNsb3NlICkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+U3VydmV5PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6U3VydmV5PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsNX0kIj4wPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iU3VydmV5OjpBbW91bnRPZlN1cnZleXNQZXIzMERheXMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBtYXhpbXVtIGFtb3VudCBvZiBzdXJ2ZXlzIHRoYXQgZ2V0IHNlbnQgdG8gYSBjdXN0b21lciBwZXIgMzAgZGF5cy4gKCAwIG1lYW5zIG5vIG1heGltdW0sIGFsbCBzdXJ2ZXkgcmVxdWVzdHMgd2lsbCBiZSBzZW50KS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpTdXJ2ZXk8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSw0fSQiPjA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJTdXJ2ZXk6Okhvb2siIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhlIGlkZW50aWZpZXIgZm9yIGEgc3VydmV5LCBlLmcuIFN1cnZleSMsIE15U3VydmV5Iy4gVGhlIGRlZmF1bHQgaXMgU3VydmV5Iy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpTdXJ2ZXk8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPlN1cnZleSM8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQcmVmZXJlbmNlc0dyb3VwcyMjI1N1cnZleU92ZXJ2aWV3U21hbGxQYWdlU2hvd24iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgc3VydmV5cyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBzdXJ2ZXkgb3ZlcnZpZXcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+U3VydmV5PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpQcmVmZXJlbmNlczwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpQcmVmZXJlbmNlc0dlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbHVtbiI+T3RoZXIgU2V0dGluZ3M8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIiBUcmFuc2xhdGFibGU9IjEiPlN1cnZleSBPdmVydmlldyAiU21hbGwiIExpbWl0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiIFRyYW5zbGF0YWJsZT0iMSI+U3VydmV5IGxpbWl0IHBlciBwYWdlIGZvciBTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGF0YSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMTAiPjEwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjE1Ij4xNTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIyMCI+MjA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMjUiPjI1PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjMwIj4zMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIzNSI+MzU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEYXRhU2VsZWN0ZWQiPjI1PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmVmS2V5Ij5Vc2VyU3VydmV5T3ZlcnZpZXdTbWFsbFBhZ2VTaG93bjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+ODAwMDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aXZlIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgo8L290cnNfY29uZmlnPgo=
iVBORw0KGgoAAAANSUhEUgAABA0AAAMSCAIAAACOOKp6AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAfQAAAH0AG5i+efAAAgAElEQVR4nOzdeUAUR9438OoZZpgBRBABcZBTRFSQPOAVj3hLDol4x9uVRI1G3TfigQLGe+OVRNB4RYzgEVlUxKhBYhLdFe8LgUFOHUBEQQ6Rud8/6tneeQZmGBDk8Pv5q6e6uqq6xe7+VVdXM2q1mgAAAAAAAGjgNHUDAAAAAACg2UGcAAAAAAAA2hAnAAAAAACANsQJAAAAAACgzUjzh0KhuHPnTkpKytOnT6VSKY/Hs7a27tq1q6+vr0AgoHmqqqo2b95sSNFjx4718vL64YcfiouL/1ufkVGbNm2cnJz69etnY2NT44ZPnz69du1aTk5OeXm5Wq02MTGxsrKyt7fv0aNHhw4d9NR49+7djIyMZ8+evXz5UqFQGBsb29ra9ujR43/+5384HIMiIrVaff369Tt37hQVFXE4nA4dOvTt27d79+6GbKu1p5pmzZrl5ORkSCHvMpVKtXbtWoFAsGLFiqZuCwD8H/U+LbdcarU6Nzc3LS0tNzf3xYsXSqXSzMzM0dGxX79+dnZ2BpZQ7wsKAEBz8N844dmzZ8ePH3/x4gUhxMrKqkOHDpWVlXl5eRKJJCkpacKECY6OjoQQDodjb2+vWURFRcXLly8FAkH79u01001MTNjlDh060J8ymaywsPDOnTsPHjyYPHly586dtRp069ats2fPqlQqgUDQsWNHLpdbXl6em5ubk5NTVlY2duxYPTvz119/FRcXCwQCS0tLLpdbVlaWk5OTk5Nz//79GTNmGBkZ6dmWEKJWq3/55ZfU1FQjIyNHR0elUvn48eMTJ048ffp02LBh+rdltW/fno2pWMbGxgZuDgDQ3LzJabnlevTo0ZEjRwghHA6nXbt2PB7vxYsX9+/fT05OHj169Hvvvad/8wa5oAAANK3/vXV++fJlZGRkZWVlp06dRo8ezfb0l5WV/frrr2lpaVFRUbNnz+7YsSOfzw8MDNQsIikp6fz58/b29tOmTdNVzfDhw9mQoKqqKiYmJiMjIy4ubvHixVwul81WXFz866+/qlSq4cOH9+vXj131+vXrtLS0169f69+ZESNGdOjQwdLSkk3JzMyMiYl5/PjxtWvX+vfvr3/zO3fu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gOEtKipK3S5vb+/x48c/uaE19M/j8ZKSkvrWra+v75w5c/o2br800XBIYRAahu9F/fe///36669nZmYuXbq0paXlq6++IoS88847169fP3PmjEAg+Oijj1555ZVbt25NmDCBaZKWlpabm3vhwoWKiopp06Z1advF119/7ejo2O3Qf/3rX8Vi8TfffMPhcN56662WlhbVvXPmzAkPD+/v6f7hxx9/DAkJKSwslMvlZmZm6r4iCQAAMBTl5ubOnj176tSpAznow4cP1e1yd3d/okM/6f77cdxeNdFwSGEQGoZ5wu+//04IWb58+dixYwkhtra2TU1N77777k8//TRt2jRCyI4dO/Lz83NzcwMDA5km69evd3V1JYR0dHR0afto/5WVlTNnzny0/P79+x9//PGlS5ccHBwIIampqcyGkrm5+b179zo6Ovh8fj/O9z//+c/mzZvz8/MpipLL5Tweb/To0S+//HI/DgEaKBSKlStX9tfqTVVVVX19fUdHB/MnUHstLS1VVVWHDx/ulzAAQJ2ff/7Z0NBQ11GMRM3Nze3t7aold+/ejYmJ4fP5zc3Nzs7OmZmZUVFR48aNEwqFcXFxDg4O586dO3r0aEBAwIsvvkgIuXfvXmJiIk3TMpnMzMwsIiKC+av7wYMHYWFhHA6HEFJdXR0VFTVr1iypVBoaGnr58uXt27cTQrhcbnx8PFO/uro6OTlZLBYzoyjjaW1t3b17t1QqpWna3Nx8586dLBarubl5/fr19vb2TU1NHA7HzMxMKBRqnqm6/qurq2NjY/l8vlQq9fLyUm0ilUptbGxmzZqVn5+vzcHMy8u7dOkSi8VSKBQxMTHGxsYaxq2qqoqLi9PX129sbLSwsCgtLd23b5+FhYW6JuqmrOGQwqA1DPMEOzu7559/3tra+uWXX3Zzc1u7dm1paalUKrWzs1Ot9vzzz6s2Udf20X8PHj58qK+v/+i4t27doml6wYIFzM/Zs2fr6empVmBatbe392+eMG7cuK1bt/7222+3bt1qb2+naXrChAkBAQH9OARoUFhY+Oabb/bXf9Py8vLff/+9vb29yx8ebVhZWfU2uwCA3vr000/xfMIgERUVdejQIeaf6f/7v/9zd3f38PAghGzatImpsHLlSuUbRwghIpEoMTGRyQdKSkrS09O3bdtGCDl//vymTZvmz59PCCkoKDAy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H/T09CZPnrx582Ytz1nC9QQAAAAAgD4llUpFIlFzc/Pt27ctLCx0nU7bsD4BAAAAAKBPxcfHNzQ0eHt799sigeB6AgAAAABA3/j999/3799fU1Pz7bffCoXCwsLCMWPG6DqpdmF9AgAAAABAX6iurj58+LC+vr6Dg8PevXv7c5FAcD0BAAAAAABaw/oEAAAAAADQhDoBAAAAAAA0oU4AAAAAAABNqBMAAAAAAEAT6gQAAAAAANCEOgEAAAAAADShTgAAAAAAAE2oEwAAAAAAQBPqBAAAAAAA0IQ6AQAAAAAANKFOAAAAAAAATagTAAAAAAB06dy5cyNGjDAxMZkyZUpVVdWDBw/c3NwGDRrk7OxcUVFRXl4+duxYPT29Tz75hBCisVU9jsZIjbDssF9++UUkEhkbeXqF8AAAAYZJREFUGzs4OJSWlmrsxUKdAAAAAACgS3Z2dsXFxbdv37558+ZXX32VlJRUWVn54MEDIyOjnTt3WlpalpSUmJub08EaW9XjaIzUCMsOe/HFF2/fvi2RSP7973//9ttvGnuxUCcAAAAAAOiSlZXVoEGDPvroI2tr66VLl5aXl1tZWfF4PGtr67KyMn19fX19fXawxlZCyNatW4cOHbp+/XqNkRph2WFCoTAqKsrGxsbS0nLmzJkae7FQJwAAAAAA6NLDhw8XLVp07dq1K1euDB06dPTo0VVVVQqFory8fMyYMRqDW2+NiIgoKiras2eP9rDssIcPH+7YsePevXsNDQ0a9xqp46hUqh4/VAAAAAAA6KTk5OSAgAA9PT1CSFRU1IYNG7y8vG7cuGFtbZ2ZmcnhcCZNmvTgwQNDQ8O33357x44d6lvVC4mKigr1kc8//7x62NDQUDrsk08+2blzZ3Nz85gxYz777DNDQ0P1vRITE+kw1AkAAAAAAKAJ9x0BAAAAAICm/wtvLFccLGpL7QAAAABJRU5ErkJggg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9jc19TdXJ2ZXkucG0gLSB0aGUgY3plY2ggbGFuZ3VhZ2UgZm9yIEFnZW50U3VydmV5CiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIENvcHlyaWdodCAoQykgMjAxMCBPMkJTLmNvbSwgcyByLm8uIEpha3ViIEhhbnVzCiMgLS0KIyAkSWQ6IGNzX1N1cnZleS5wbSx2IDEuMyAyMDEyLzAxLzIxIDIwOjU2OjMxIHNiIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmNzX0FnZW50U3VydmV5OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9IHF3KCRSZXZpc2lvbjogMS4zICQpIFsxXTsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXknfSA9ICdQcsO5emt1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbnMnfSA9ICdEb3RhenknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVlc3Rpb24nfSA9ICdEb3Rheic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaW5pc2gnfSA9ICdVa29uw6hpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydmaW5pc2hlZCd9ID0gJ3Vrb27DqGVubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIFN1cnZleS1LZXkgaXMgaW52YWxpZCEnfQogICAgPSAnVGVudG8ga2zDrcOoIGplIG5ldmhvZG7DvSBwcm8gcHLDuXprdW0hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoYW5rIHlvdSBmb3IgeW91ciBmZWVkYmFjay4nfQogICAgPSAnRMOsa3VqZW1lIFbDoW0gemEgenDDrHRub3UgdmF6YnUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCB0byBzZWxlY3QgcXVlc3Rpb246J30gPSAnTnV0bm8gdnlicmF0IGRvdGF6Oic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXknfSA9ICdQcsO5emt1bSwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNldCBuZXcgc3RhdHVzISBObyBxdWVzdGlvbnMgZGVmaW5lZC4nfQogICAgPSAnTmVsemUgbmFzdGF2aXQgbm92w70gc3RhdiEgTmVqc291IGRlZmlub3bDoW55IGRvdGF6eS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNldCBuZXcgc3RhdHVzISBRdWVzdGlvbnMgaW5jb21wbGV0ZS4nfQogICAgPSAnTmVsemUgbmFzdGF2aXQgbm92w70gc3RhdiEgRG90YXp5IG5lanNvdSBrb21wbGV0bsOtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0dXMgY2hhbmdlZC4nfSA9ICdOb3bDvSBha3Rpdm7DrSBzdGF2ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU3RhdHVzJ30gPSAnWm3DrG55IHN0YXZ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbnQgcmVxdWVzdHMnfSA9ICdaYXNsw6FueSBwb8W4YWRhdmt5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY2VpdmVkIHN1cnZleXMnfSA9ICdPYmRyxbhlbnkgaGxhc3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYW5zd2VyZWQnfSA9ICdPZHBvdsOsZGxpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBhbnN3ZXJlZCd9ID0gJ05lb2Rwb3bDrGRsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXlzJ30gPSAnUHLDuXprdW15JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQnfSA9ICdOZXBsYXRuw6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnw5p2b2QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJuYWwnfSA9ICdJbnRlcm7DrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbnMnfSA9ICdEb3RhenknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVlc3Rpb24nfSA9ICdEb3Rheic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQb3NpYmxlIEFuc3dlcnMnfSA9ICdQw7jDrXBhZG7DqSBvZHBvdsOsZHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWWVzTm8nfSA9ICdBbm8gYW5lYm8gTmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlzdCd9ID0gJ3Nlem5hbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXh0YXJlYSd9ID0gJ3RleHRvdsOpIHBvbGUnOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbnRyb2R1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcGxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jb21wbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkjJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUnfSA9ICcnOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBvciBkaXNhYmxlIHRoZSBTaG93Vm90ZURhdGEgc2NyZWVuIG9uIHB1YmxpYyBpbnRlcmZhY2UgdG8gc2hvdyBkYXRhIG9mIGFuIHNwZWNpZmljIHZvdGF0aW9uIHdoZW4gY3VzdG9tZXIgdHJpZXMgdG8gYW5zd2VyIGEgc3VydmV5IGJ5IHNlY29uZCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgcGFyYW1ldGVycyBmb3IgdGhlIFN1cnZleSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBoZWlnaHQgZm9yIFJpY2h0ZXh0IHZpZXdzIGZvciBTdXJ2ZXlab29tIGVsZW1lbnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgcGFyYW1ldGVycyBmb3IgdGhlIFN1cnZleSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ydV9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBydV9TdXJ2ZXkucG0sdiAxLjMgMjAxMS8xMS8yMSAxMjowOToyNCBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpydV9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcXVlc3Rpb25zIHNhdmVkIGZvciB0aGlzIHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFN0YXQgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIEJhY2snfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heC4gc2hvd24gU3VydmV5cyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU2VuZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTdWJqZWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBCb2R5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VkIEJ5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW50IHJlcXVlc3RzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY2VpdmVkIHN1cnZleXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBHZW5lcmFsIEluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUmVzdWx0cyBHcmFwaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdGF0IHJlc3VsdHMuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYW5zd2VyIHRoZSBuZXh0IHF1ZXN0aW9ucyd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgU3VydmV5IE1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBtb2R1bGUgdG8gZWRpdCBzdXJ2ZXkgcXVlc3Rpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIHN0YXJ0aW5nIGZyb20gdGhlIGxhdGVzdCBjdXN0b21lciBzdXJ2ZXkgZW1haWwgYmV0d2VlbiBubyBjdXN0b21lciBzdXJ2ZXkgZW1haWwgaXMgc2VudCwgKCAwIG1lYW5zIEFsd2F5cyBzZW5kIGl0ICkgLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJvZHkgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2VuZGVyIGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN1YmplY3QgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBzdXJ2ZXkgbGlzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgc3VydmV5IG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgcGFyYW1ldGVycyBmb3IgdGhlIFN1cnZleSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3Igc3VydmV5IHpvb20gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIFB1YmxpY1N1cnZleSBvYmplY3QgaW4gdGhlIHB1YmxpYyBTdXJ2ZXkgYXJlYS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhpcyByZWdleCBtYXRjaGVzLCBubyBjdXN0b21lciBzdXJ2ZXkgd2lsbCBiZSBzZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBzdXJ2ZXlzIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIHN1cnZleSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljIFN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFpvb20gTW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgbGltaXQgcGVyIHBhZ2UgZm9yIFN1cnZleSBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIHN1cnZleSwgZS5nLiBTdXJ2ZXkjLCBNeVN1cnZleSMuIFRoZSBkZWZhdWx0IGlzIFN1cnZleSMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBldmVudCBtb2R1bGUgdG8gc2VuZCBhdXRvbWF0aWNhbGx5IHN1cnZleSBlbWFpbCByZXF1ZXN0cyB0byBjdXN0b21lcnMgaWYgYSB0aWNrZXQgZ2V0cyBjbG9zZWQuJ30gPSAnJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbnRyb2R1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXBsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY29tcGxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5Iyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlJ30gPSAnJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgb3IgZGlzYWJsZSB0aGUgU2hvd1ZvdGVEYXRhIHNjcmVlbiBvbiBwdWJsaWMgaW50ZXJmYWNlIHRvIHNob3cgZGF0YSBvZiBhbiBzcGVjaWZpYyB2b3RhdGlvbiB3aGVuIGN1c3RvbWVyIHRyaWVzIHRvIGFuc3dlciBhIHN1cnZleSBieSBzZWNvbmQgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHBhcmFtZXRlcnMgZm9yIHRoZSBTdXJ2ZXkgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgaGVpZ2h0IGZvciBSaWNodGV4dCB2aWV3cyBmb3IgU3VydmV5Wm9vbSBlbGVtZW50cy4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ubF9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBubF9TdXJ2ZXkucG0sdiAxLjggMjAxMi8wMS8xOSAxMzozNjowMiBtYiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpubF9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57Jy0gQ2hhbmdlIFN0YXR1cyAtJ30gPSAnLSBTdGF0dXMgd2lqemlnZW4gLSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTmV3IFN1cnZleSd9ID0gJ05pZXV3ZSBlbnF1w6p0ZSB0b2V2b2VnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQnfSA9ICdCZXdlcmsgZW5xdcOqdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQgUXVlc3Rpb25zJ30gPSAnQmV3ZXJrIHZyYWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbiBFZGl0J30gPSAnQmV3ZXJrIHZyYWFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fuc3dlciBFZGl0J30gPSAnQmV3ZXJrIGFudHdvb3JkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzZXQgbmV3IHN0YXR1cyEgTm8gcXVlc3Rpb25zIGRlZmluZWQuJ30gPSAnS2FuIHN0YXR1cyBuaWV0IHdpanppZ2VuLCB2b2VnIGVlcnN0IHZyYWdlbiB0b2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXR1cyBjaGFuZ2VkLid9ID0gJ1N0YXR1cyBiaWpnZXdlcmt0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGFuayB5b3UgZm9yIHlvdXIgZmVlZGJhY2suJ30gPSAnQmVkYW5rdCB2b29yIHV3IGZlZWRiYWNrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgc3VydmV5IGlzIGZpbmlzaGVkLid9ID0gJ0RlIGVucXXDqnRlIGlzIGluZ2VzdHV1cmQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXBsZXRlJ30gPSAnVm9sbGVkaWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jb21wbGV0ZSd9ID0gJ09udm9sbGVkaWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2tib3gnfSA9ICdTZWxlY3RpZXZhayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVja2JveCAoTGlzdCknfSA9ICdTZWxlY3RpZXZhayAobGlqc3QpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhZGlvJ30gPSAnS2V1emVyb25kamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFkaW8gKExpc3QpJ30gPSAnS2V1emVyb25kamUgKGxpanN0KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJ1N0YXRpc3RpZWtlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGVzY3JpcHRpb24nfSA9ICdPbXNjaHJpanZpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJ0ludHJvZHVjdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RleHRhcmVhJ30gPSAnVGVrc3R2YWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWWVzL05vJ30gPSAnSmEvTmVlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1llc05vJ30gPSAnSmFOZWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYW5zd2VyZWQnfSA9ICdiZWFudHdvb3JkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBhbnN3ZXJlZCd9ID0gJ25pZXQgYmVhbnR3b29yZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBEZXRhaWwnfSA9ICdEZXRhaWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgYWxyZWFkeSBhbnN3ZXJlZCB0aGUgc3VydmV5Lid9ID0gJ1UgaGVlZnQgZGV6ZSBlbnF1w6p0ZSBhbCBiZWFudHdvb3JkLic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBOZXcgU3VydmV5J30gPSAnTmlldXdlIGVucXXDqnRlIGFhbm1ha2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludHJvZHVjdGlvbid9ID0gJ0ludHJvZHVjdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnSW50ZXJuZSBvbXNjaHJpanZpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBHZW5lcmFsIEluZm8nfSA9ICdCZXdlcmsgYWxnZW1lbmUgaW5mb3JtYXRpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkjJ30gPSAnRW5xdWV0ZSMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBJbmZvJ30gPSAnQWxnZW1lbmUgaW5mb3JtYXRpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyBvZid9ID0gJ0RldGFpbG92ZXJ6aWNodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJ1ZlcnpvZWtlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICdWZXJzdHV1cmQgb3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSBUaW1lJ30gPSAnSW5nZXZ1bGQgb3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyd9ID0gJ0RldGFpbHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFN0YXQgRGV0YWlscyd9ID0gJ0RldGFpbG92ZXJ6aWNodCBzdGF0aXN0aWVrZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBzdGF0cyBvdmVydmlldyd9ID0gJ2dhIHRlcnVnIG5hYXIgaGV0IG92ZXJ6aWNodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHbyBCYWNrJ30gPSAnR2EgdGVydWcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbnMnfSA9ICdCZXdlcmsgdnJhZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJ1ZyYWFnIHRvZXZvZWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJ1ZyYWFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBRdWVzdGlvbnMnfSA9ICdWcmFnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVlc3Rpb24nfSA9ICdWcmFhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBxdWVzdGlvbnMgc2F2ZWQgZm9yIHRoaXMgc3VydmV5Lid9ID0gJ0VyIHppam4gZ2VlbiB2cmFnZW4gb3BnZXNsYWdlbiB2b29yIGRlemUgZW5xdcOqdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbid9ID0gJ0Jld2VyayB2cmFhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHF1ZXN0aW9ucyd9ID0gJ2dhIHRlcnVnIG5hYXIgZGUgdnJhZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bvc3NpYmxlIEFuc3dlcnMgRm9yJ30gPSAnTW9nZWxpamtlIGFudHdvb3JkZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJ0FudHdvb3JkIHRvZXZvZWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJ0RlemUgaGVlZnQgbmlldCBtZWVyZGVyZSBhbnR3b29yZGVuLiBFciB6YWwgZWVuIHRla3N0dmFrIGdldG9vbmQgd29yZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJ0FudHdvb3JkIGJld2Vya2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIGJhY2sgdG8gZWRpdCBxdWVzdGlvbid9ID0gJ2dhIHRlcnVnIG5hYXIgZGUgdnJhYWcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heC4gc2hvd24gU3VydmV5cyBwZXIgcGFnZSd9ID0gJ01heGltYWFsIGFhbnRhbCBlbnF1w6p0ZXMgcGVyIHBhZ2luYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU2VuZGVyJ30gPSAnQWZ6ZW5kZXIgbm90aWZpY2F0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIFN1YmplY3QnfSA9ICdPbmRlcndlcnAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIEJvZHknfSA9ICdCb2R5IHRleHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlZCBCeSd9ID0gJ0dld2lqemlnZCBkb29yJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbmZvcm1hdGlvbid9ID0gJ0RldGFpbHMgZW5xdcOqdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VudCByZXF1ZXN0cyd9ID0gJ1ZlcnN0dXVyZGUgdmVyem9la2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY2VpdmVkIHN1cnZleXMnfSA9ICdPbnR2YW5nZW4gZW5xdcOqdGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRzIERldGFpbHMnfSA9ICdEZXRhaWxzIHN0YXRpc3RpZWtlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGV0YWlscyd9ID0gJ0RldGFpbHMgZW5xdcOqdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFJlc3VsdHMgR3JhcGgnfSA9ICdSZXN1bHRhdGVuIChncmFmaWVrKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdGF0IHJlc3VsdHMuJ30gPSAnR2VlbiByZXN1bHRhdGVuLic7CgogICAgIyBUZW1wbGF0ZTogUHVibGljU3VydmV5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXknfSA9ICdFbnF1w6p0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYW5zd2VyIHRoZSBuZXh0IHF1ZXN0aW9ucyd9ID0gJ0JlYW50d29vcmR0IHUgZGUgdm9sZ2VuZGUgdnJhZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbXkgYW5zd2Vycyd9ID0gJ1Rvb24gbWlqbiBhbnR3b29yZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBUaXRsZSd9ID0gJ0VucXXDqnRldGl0ZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlc2UgYXJlIHlvdXIgYW5zd2Vycy4nfSA9ICdEaXQgemlqbiB1dyBhbnR3b29yZGVuLic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgU3VydmV5IE1vZHVsZS4nfSA9ICdFZW4gbW9kdWxlIG9tIGVucXXDqnRlcyB0ZSBvbmRlcmhvdWRlbiBlbiB0ZSB2ZXJzdHVyZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBtb2R1bGUgdG8gZWRpdCBzdXJ2ZXkgcXVlc3Rpb25zLid9ID0gJ0VlbiBtb2R1bGUgb20gZW5xdcOqdGVzIHRlIG9uZGVyaG91ZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIHN0YXJ0aW5nIGZyb20gdGhlIGxhdGVzdCBjdXN0b21lciBzdXJ2ZXkgZW1haWwgYmV0d2VlbiBubyBjdXN0b21lciBzdXJ2ZXkgZW1haWwgaXMgc2VudCwgKCAwIG1lYW5zIEFsd2F5cyBzZW5kIGl0ICkgLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJvZHkgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2VuZGVyIGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN1YmplY3QgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBzdXJ2ZXkgbGlzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBoZWlnaHQgZm9yIFJpY2h0ZXh0IHZpZXdzIGZvciBTdXJ2ZXlab29tIGVsZW1lbnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBzdXJ2ZXkgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBvciBkaXNhYmxlIHRoZSBTaG93Vm90ZURhdGEgc2NyZWVuIG9uIHB1YmxpYyBpbnRlcmZhY2UgdG8gc2hvdyBkYXRhIG9mIGFuIHNwZWNpZmljIHZvdGF0aW9uIHdoZW4gY3VzdG9tZXIgdHJpZXMgdG8gYW5zd2VyIGEgc3VydmV5IGJ5IHNlY29uZCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgcGFyYW1ldGVycyBmb3IgdGhlIFN1cnZleSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3Igc3VydmV5IHpvb20gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIFB1YmxpY1N1cnZleSBvYmplY3QgaW4gdGhlIHB1YmxpYyBTdXJ2ZXkgYXJlYS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhpcyByZWdleCBtYXRjaGVzLCBubyBjdXN0b21lciBzdXJ2ZXkgd2lsbCBiZSBzZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBzdXJ2ZXlzIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIHN1cnZleSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljIFN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFpvb20gTW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgbGltaXQgcGVyIHBhZ2UgZm9yIFN1cnZleSBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIHN1cnZleSwgZS5nLiBTdXJ2ZXkjLCBNeVN1cnZleSMuIFRoZSBkZWZhdWx0IGlzIFN1cnZleSMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBldmVudCBtb2R1bGUgdG8gc2VuZCBhdXRvbWF0aWNhbGx5IHN1cnZleSBlbWFpbCByZXF1ZXN0cyB0byBjdXN0b21lcnMgaWYgYSB0aWNrZXQgZ2V0cyBjbG9zZWQuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kYV9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBkYV9TdXJ2ZXkucG0sdiAxLjUgMjAxMi8wMS8yMSAyMDo1NjozMSBzYiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpkYV9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57Jy0gQ2hhbmdlIFN0YXR1cyAtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOZXcgU3VydmV5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0IFF1ZXN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbiBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fuc3dlciBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzZXQgbmV3IHN0YXR1cyEgTm8gcXVlc3Rpb25zIGRlZmluZWQuJ30gPSAnS2FuIGlra2Ugc8OmdHRlIG55IHN0YXR1cyEgRGVyIGVyIGlra2UgZGVmaW5lcmV0IG5vZ2VuIHNww7hyZ3Ntw6VsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0dXMgY2hhbmdlZC4nfSA9ICdTdGF0dXMgw6ZuZHJldCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmsgeW91IGZvciB5b3VyIGZlZWRiYWNrLid9ID0gJ1RhayBmb3IgZGluIGJlc3ZhcmVsc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBzdXJ2ZXkgaXMgZmluaXNoZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXBsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY29tcGxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2tib3gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2tib3ggKExpc3QpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhZGlvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhZGlvIChMaXN0KSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXh0YXJlYSd9ID0gJ1Rla3N0b21yw6VkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZZXMvTm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWWVzTm8nfSA9ICdKYU5laic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbnN3ZXJlZCd9ID0gJ2Jlc3ZhcmV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBhbnN3ZXJlZCd9ID0gJ2lra2UgYmVzdmFyZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgRGV0YWlsJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgR2VuZXJhbCBJbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSMnfSA9ICdVbmRlcnPDuGdlbHNlIyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIEluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgT3ZlcnZpZXcgb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdHMgVGFibGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBTdGF0IERldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBzdGF0cyBvdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHbyBCYWNrJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHF1ZXN0aW9ucyBzYXZlZCBmb3IgdGhpcyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW5zd2VyJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heC4gc2hvd24gU3VydmV5cyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU2VuZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTdWJqZWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBCb2R5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgQnknfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbnQgcmVxdWVzdHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjZWl2ZWQgc3VydmV5cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBSZXN1bHRzIEdyYXBoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN0YXQgcmVzdWx0cy4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY1N1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5J30gPSAnVW5kZXJzw7hnZWxzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYW5zd2VyIHRoZSBuZXh0IHF1ZXN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG15IGFuc3dlcnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZXNlIGFyZSB5b3VyIGFuc3dlcnMuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBTdXJ2ZXkgTW9kdWxlLid9ID0gJ0V0IHVuZGVyc8O4Z2Vsc2VzbW9kdWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbW9kdWxlIHRvIGVkaXQgc3VydmV5IHF1ZXN0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyBzdGFydGluZyBmcm9tIHRoZSBsYXRlc3QgY3VzdG9tZXIgc3VydmV5IGVtYWlsIGJldHdlZW4gbm8gY3VzdG9tZXIgc3VydmV5IGVtYWlsIGlzIHNlbnQsICggMCBtZWFucyBBbHdheXMgc2VuZCBpdCApIC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBib2R5IGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNlbmRlciBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdWJqZWN0IGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgc3VydmV5IGxpc3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgaGVpZ2h0IGZvciBSaWNodGV4dCB2aWV3cyBmb3IgU3VydmV5Wm9vbSBlbGVtZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgc3VydmV5IG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgb3IgZGlzYWJsZSB0aGUgU2hvd1ZvdGVEYXRhIHNjcmVlbiBvbiBwdWJsaWMgaW50ZXJmYWNlIHRvIHNob3cgZGF0YSBvZiBhbiBzcGVjaWZpYyB2b3RhdGlvbiB3aGVuIGN1c3RvbWVyIHRyaWVzIHRvIGFuc3dlciBhIHN1cnZleSBieSBzZWNvbmQgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHBhcmFtZXRlcnMgZm9yIHRoZSBTdXJ2ZXkgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHN1cnZleSB6b29tIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBQdWJsaWNTdXJ2ZXkgb2JqZWN0IGluIHRoZSBwdWJsaWMgU3VydmV5IGFyZWEuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHRoaXMgcmVnZXggbWF0Y2hlcywgbm8gY3VzdG9tZXIgc3VydmV5IHdpbGwgYmUgc2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgc3VydmV5cyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBzdXJ2ZXkgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyBTdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBab29tIE1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IGxpbWl0IHBlciBwYWdlIGZvciBTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBzdXJ2ZXksIGUuZy4gU3VydmV5IywgTXlTdXJ2ZXkjLiBUaGUgZGVmYXVsdCBpcyBTdXJ2ZXkjLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZXZlbnQgbW9kdWxlIHRvIHNlbmQgYXV0b21hdGljYWxseSBzdXJ2ZXkgZW1haWwgcmVxdWVzdHMgdG8gY3VzdG9tZXJzIGlmIGEgdGlja2V0IGdldHMgY2xvc2VkLid9ID0gJyc7Cgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9mcl9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBmcl9TdXJ2ZXkucG0sdiAxLjMgMjAxMS8xMS8yMSAxMjowOToyNCBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpmcl9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcXVlc3Rpb25zIHNhdmVkIGZvciB0aGlzIHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFN0YXQgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIEJhY2snfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4LiBzaG93biBTdXJ2ZXlzIHBlciBwYWdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTZW5kZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIFN1YmplY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIEJvZHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgQnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgQnknfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbnQgcmVxdWVzdHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjZWl2ZWQgc3VydmV5cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEdlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFF1ZXN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBSZXN1bHRzIEdyYXBoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN0YXQgcmVzdWx0cy4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY1N1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBhbnN3ZXIgdGhlIG5leHQgcXVlc3Rpb25zJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBTdXJ2ZXkgTW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG1vZHVsZSB0byBlZGl0IHN1cnZleSBxdWVzdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgc3RhcnRpbmcgZnJvbSB0aGUgbGF0ZXN0IGN1c3RvbWVyIHN1cnZleSBlbWFpbCBiZXR3ZWVuIG5vIGN1c3RvbWVyIHN1cnZleSBlbWFpbCBpcyBzZW50LCAoIDAgbWVhbnMgQWx3YXlzIHNlbmQgaXQgKSAuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYm9keSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZW5kZXIgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3ViamVjdCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHN1cnZleSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBzdXJ2ZXkgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBwYXJhbWV0ZXJzIGZvciB0aGUgU3VydmV5IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciBzdXJ2ZXkgem9vbSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgUHVibGljU3VydmV5IG9iamVjdCBpbiB0aGUgcHVibGljIFN1cnZleSBhcmVhLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGlzIHJlZ2V4IG1hdGNoZXMsIG5vIGN1c3RvbWVyIHN1cnZleSB3aWxsIGJlIHNlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIHN1cnZleXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgc3VydmV5IG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMgU3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgWm9vbSBNb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBsaW1pdCBwZXIgcGFnZSBmb3IgU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgc3VydmV5LCBlLmcuIFN1cnZleSMsIE15U3VydmV5Iy4gVGhlIGRlZmF1bHQgaXMgU3VydmV5Iy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGV2ZW50IG1vZHVsZSB0byBzZW5kIGF1dG9tYXRpY2FsbHkgc3VydmV5IGVtYWlsIHJlcXVlc3RzIHRvIGN1c3RvbWVycyBpZiBhIHRpY2tldCBnZXRzIGNsb3NlZC4nfSA9ICcnOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbnRyb2R1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcGxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jb21wbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkjJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUnfSA9ICcnOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBvciBkaXNhYmxlIHRoZSBTaG93Vm90ZURhdGEgc2NyZWVuIG9uIHB1YmxpYyBpbnRlcmZhY2UgdG8gc2hvdyBkYXRhIG9mIGFuIHNwZWNpZmljIHZvdGF0aW9uIHdoZW4gY3VzdG9tZXIgdHJpZXMgdG8gYW5zd2VyIGEgc3VydmV5IGJ5IHNlY29uZCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgcGFyYW1ldGVycyBmb3IgdGhlIFN1cnZleSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBoZWlnaHQgZm9yIFJpY2h0ZXh0IHZpZXdzIGZvciBTdXJ2ZXlab29tIGVsZW1lbnRzLid9ID0gJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kZV9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBkZV9TdXJ2ZXkucG0sdiAxLjkgMjAxMi8wMS8yMSAyMDo1NjozMSBzYiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpkZV9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICdOZXVlIFVtZnJhZ2UgZXJzdGVsbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludHJvZHVjdGlvbid9ID0gJ0VpbmxlaXR1bmdzdGV4dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcm5hbCBEZXNjcmlwdGlvbid9ID0gJ0ludGVybmUgQmVzY2hyZWlidW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnVW1mcmFnZSBiZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJ0FsbGdlbWVpbmUgQW5nYWJlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJ1N0YXRpc3Rpay3DnGJlcnNpY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RzIFRhYmxlJ30gPSAnQW5mcmFnZW4tVGFiZWxsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICdTZW5kZXplaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSBUaW1lJ30gPSAnQWJzdGltbXVuZ3N6ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICdEZXRhaWxzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHF1ZXN0aW9ucyBzYXZlZCBmb3IgdGhpcyBzdXJ2ZXkuJ30gPSAnRsO8ciBkaWVzZSBVbWZyYWdlIHNpbmQga2VpbmUgRnJhZ2VuIGdlc3BlaWNoZXJ0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgU3RhdCBEZXRhaWxzJ30gPSAnRGV0YWlscyBVbWZyYWdlc3RhdGlzdGlrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIGJhY2sgdG8gc3RhdHMgb3ZlcnZpZXcnfSA9ICdadXLDvGNrIHp1ciDDnGJlcnNpY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIEJhY2snfSA9ICdadXLDvGNrJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0IFF1ZXN0aW9ucyd9ID0gJ0ZyYWdlbiBiZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJ0ZyYWdlIGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R5cGUgdGhlIHF1ZXN0aW9uJ30gPSAnRnJhZ2UgZWluZ2ViZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFF1ZXN0aW9ucyd9ID0gJ1VtZnJhZ2UtRnJhZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnRnJhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbid9ID0gJ0ZyYWdlIGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICdadXLDvGNrIHp1IGRlbiBGcmFnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICdNw7ZnbGljaGUgQW50d29ydGVuIGbDvHInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJ0FudHdvcnQgaGluenVmw7xnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBkb2VzblwndCBoYXZlIHNldmVyYWwgYW5zd2VycywgYSB0ZXh0YXJlYSB3aWxsIGJlIGRpc3BsYXllZC4nfSA9ICdEaWVzZSBGcmFnZSBoYXQgbmljaHQgbWVocmVyZSBBbnR3b3J0ZW4sIGVpbiBUZXh0ZWluZ2FiZWZlbGQgd2lyZCBoaW56dWdlZsO8Z3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQW5zd2VyJ30gPSAnQW50d29ydCBiZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIGJhY2sgdG8gZWRpdCBxdWVzdGlvbid9ID0gJ1p1csO8Y2sgenVtIEJlYXJiZWl0ZW4gZGVyIEZyYWdlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnS29udGV4dC1FaW5zdGVsbHVuZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heC4gc2hvd24gU3VydmV5cyBwZXIgcGFnZSd9ID0gJ01heGltYWxlIEFuemFobCBhbmdlemVpZ3RlciBVbWZyYWdlbiBwcm8gU2VpdGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIFNlbmRlcid9ID0gJ0JlbmFjaHJpY2h0aWd1bmcgQWJzZW5kZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIFN1YmplY3QnfSA9ICdCZW5hY2hyaWNodGlndW5nIEJldHJlZmYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIEJvZHknfSA9ICdCZW5hY2hyaWNodGlndW5nIFRleHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBUaW1lJ30gPSAnRXJzdGVsbC1aZWl0cHVua3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBCeSd9ID0gJ0Vyc3RlbGx0IHZvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VkIFRpbWUnfSA9ICfDhG5kZXJ1bmdzLVplaXRwdW5rdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VkIEJ5J30gPSAnR2XDpG5kZXJ0IHZvbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgSW5mb3JtYXRpb24nfSA9ICdVbWZyYWdlLUluZm9ybWF0aW9uZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VudCByZXF1ZXN0cyd9ID0gJ0dlc2VuZGV0ZSBBbmZyYWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNlaXZlZCBzdXJ2ZXlzJ30gPSAnRXJoYWx0ZW5lIFVtZnJhZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgR2VuZXJhbCBJbmZvJ30gPSAnQWxsZ2VtZWluZSBBbmdhYmVuIGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbnMnfSA9ICdGcmFnZW4gYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBEZXRhaWxzJ30gPSAnU3RhdGlzdGlrLURldGFpbHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IERldGFpbHMnfSA9ICdVbWZyYWdlLURldGFpbHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFJlc3VsdHMgR3JhcGgnfSA9ICdHcmFmaWsgVW1mcmFnZWVyZ2Vibmlzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3RhdCByZXN1bHRzLid9ID0gJ0tlaW5lIFN0YXRpc3Rpay1FcmdlYm5pc3NlLic7CgogICAgIyBUZW1wbGF0ZTogUHVibGljU3VydmV5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXknfSA9ICdVbWZyYWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBhbnN3ZXIgdGhlIG5leHQgcXVlc3Rpb25zJ30gPSAnQml0dGUgYmVhbnR3b3J0ZW4gU2llIGRpZSBmb2xnZW5kZW4gRnJhZ2VuJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBTdXJ2ZXkgTW9kdWxlLid9ID0gJ0VpbiBVbWZyYWdlLU1vZHVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbW9kdWxlIHRvIGVkaXQgc3VydmV5IHF1ZXN0aW9ucy4nfSA9ICdFaW4gTW9kdWwsIHVtIFVtZnJhZ2VuIHp1IGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyBzdGFydGluZyBmcm9tIHRoZSBsYXRlc3QgY3VzdG9tZXIgc3VydmV5IGVtYWlsIGJldHdlZW4gbm8gY3VzdG9tZXIgc3VydmV5IGVtYWlsIGlzIHNlbnQsICggMCBtZWFucyBBbHdheXMgc2VuZCBpdCApIC4nfSA9ICdBbnphaGwgVGFnZSwgdm9uIGRlciBsZXR6dGVuIFVtZnJhZ2UtRS1NYWlsIGFuIGRlbiBLdW5kZW4sIGluIGRlciBrZWluZSB3ZWl0ZXJlIFVtZnJhZ2UtRW1haWwgYW4gZGVuIEt1bmRlbiB2ZXJzZW5kZXQgd2lyZCAoMCBiZWRldXRldCwgZGFzcyBkaWUgRS1NYWlsIGltbWVyIHZlcnNlbmRldCB3aXJkKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBib2R5IGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJ1ZvcmVpbmdlc3RlbGx0ZXIgVGV4dCBmw7xyIEJlbmFjaHJpY2h0aWd1bmdzLU1haWxzIGFuIGRlbiBLdW5kZW4gw7xiZXIgbmV1ZSBVbWZyYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZW5kZXIgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnVm9yZWluZ2VzdGVsbHRlciBBYnNlbmRlciBmw7xyIEJlbmFjaHJpY2h0aWd1bmdzLU1haWxzIGFuIGRlbiBLdW5kZW4gw7xiZXIgbmV1ZSBVbWZyYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdWJqZWN0IGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJ1ZvcmVpbmdlc3RlbGx0ZXIgQmV0cmVmZiBmw7xyIEJlbmFjaHJpY2h0aWd1bmdzLU1haWxzIGFuIGRlbiBLdW5kZW4gw7xiZXIgbmV1ZSBVbWZyYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHN1cnZleSBsaXN0Lid9ID0gJ0RlZmluaWVydCBlaW4gw5xiZXJzaWNodHMtTW9kdWwsIGRhc3MgZWluZSBMaXN0ZSBhbGxlciBVbWZyYWdlbiBhbnplaWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBzdXJ2ZXkgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnRGVmaW5pZXJ0IGRpZSBhbmdlemVpZ3RlbiBTcGFsdGVuIGluIGRlciBVbWZyYWdlLcOcYmVyc2ljaHQuIERpZSBFaW5zdGVsbHVuZyBoYXQga2VpbmVuIEVmZmVrdCBhdWYgZGllIGFuZ2V6ZWlndGUgUmVpaGVuZm9sZ2UgZGVyIFNwYWx0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBwYXJhbWV0ZXJzIGZvciB0aGUgU3VydmV5IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ0FsbGUgUGFyYW1ldGVyIGRlcyBCZWZyYWd1bmdzLU9iamVrdHMgaW0gQWdlbnQtSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciBzdXJ2ZXkgem9vbSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ0Zyb250ZW5kLU1vZHVsLVJlZ2lzdHJpZXJ1bmcgZsO8ciBkaWUgVW1mcmFnZS1EZXRhaWxhbnNpY2h0IGltIEFnZW50ZW4tSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgUHVibGljU3VydmV5IG9iamVjdCBpbiB0aGUgcHVibGljIFN1cnZleSBhcmVhLid9ID0gJ0Zyb250ZW5kLU1vZHVsLVJlZ2lzdHJpZXJ1bmcgZsO8ciBkaWUgw7ZmZmVudGxpY2hlIFVtZnJhZ2Utw5xiZXJzaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhpcyByZWdleCBtYXRjaGVzLCBubyBjdXN0b21lciBzdXJ2ZXkgd2lsbCBiZSBzZW50Lid9ID0gJ1dlbm4gZGllc2VyIHJlZ3Vsw6RyZSBBdXNkcnVjayB6dXRyaWZmdCwgd2lyZCBrZWluZSBVbWZyYWdlIGFuIGRlbiBLdW5kZW4gZ2VzZW5kZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIHN1cnZleXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgc3VydmV5IG92ZXJ2aWV3Lid9ID0gJ1BhcmFtZXRlciBmw7xyIGRpZSBTZWl0ZW4gZGVyIFVtZnJhZ2Utw5xiZXJzaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljIFN1cnZleS4nfSA9ICfDlmZmZW50bGljaGUgVW1mcmFnZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdVbWZyYWdlLcOcYmVyc2ljaHQgTGltaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFpvb20gTW9kdWxlLid9ID0gJ01vZHVsIFVtZnJhZ2UtRGV0YWlsYW5zaWNodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgbGltaXQgcGVyIHBhZ2UgZm9yIFN1cnZleSBPdmVydmlldyAiU21hbGwiJ30gPSAnVW1mcmFnZS1MaW1pdCBwcm8gU2VpdGUgaW4gZGVyIFVtZnJhZ2Utw5xiZXJzaWNodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBzdXJ2ZXksIGUuZy4gU3VydmV5IywgTXlTdXJ2ZXkjLiBUaGUgZGVmYXVsdCBpcyBTdXJ2ZXkjLid9ID0gJ0RpZSBlaW5kZXV0aWdlIEJlemVpY2hudW5nIGbDvHIgZWluZSBVbWZyYWdlLCB6LiBCLiBTdXJ2ZXkjIG9kZXIgTXlTdXJ2ZXkjLiBTdGFuZGFyZCBpc3QgU3VydmV5Iy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGV2ZW50IG1vZHVsZSB0byBzZW5kIGF1dG9tYXRpY2FsbHkgc3VydmV5IGVtYWlsIHJlcXVlc3RzIHRvIGN1c3RvbWVycyBpZiBhIHRpY2tldCBnZXRzIGNsb3NlZC4nfSA9ICdUaWNrZXQtRXZlbnQtTW9kdWwsIHVtIGF1dG9tYXRpc2NoIFVtZnJhZ2UtRS1NYWlscyBhbiBLdW5kZW4genUgc2VuZGVuLCB3aGVuIGVpbiBUaWNrZXQgZ2VzY2hsb3NzZW4gd2lyZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgYW1vdW50IGluIGhvdXJzIGEgdGlja2V0IGhhcyB0byBiZSBjbG9zZWQgdG8gdHJpZ2dlciB0aGUgc2VuZGluZyBvZiBhIHN1cnZleSwgKCAwIG1lYW5zIHNlbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgY2xvc2UgKS4nfSA9ICdEZWZpbmllcnQgZGllIEFuemFobCBhbiBTdHVuZGVuIGbDvHIgZGllIGVpbiBUaWNrZXQgZ2VzY2hsb3NzZW4gc2VpbiBtdXNzIHVtIGRlbiBWZXJzYW5kIGVpbmVyIFVtZnJhZ2UgYXVzenVsw7ZzZW4gKCAwIGJlZGV1dGV0LCBkYXNzIFVtZnJhZ2Ugc29mb3J0IG5hY2ggU2NobGllw59lbiBlaW5lcyBUaWNrZXRzIHZlcnNhbmR0IHdpcmQgKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBtYXhpbXVtIGFtb3VudCBvZiBzdXJ2ZXlzIHRoYXQgZ2V0IHNlbnQgdG8gYSBjdXN0b21lciBwZXIgMzAgZGF5cywgKCAwIG1lYW5zIHNlbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgY2xvc2UgKS4nfSA9ICdEZWZpbmllcnQgZGllIG1heGltYWxlIEFuemFobCBhbiBVbWZyYWdlbiBkaWUgZWluIEt1bmRlIHBybyAzMCBUYWdlIGVyaMOkbHQgICggMCBiZWRldXRldCBrZWluIExpbWl0LCBhbGxlIFVtZnJhZ2VhbmZyYWdlbiB3ZXJkZW4gZ2VzZW5kZXQgKS4nOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbnRyb2R1Y3Rpb24nfSA9ICdVbWZyYWdlLUVpbmxlaXR1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IERlc2NyaXB0aW9uJ30gPSAnVW1mcmFnZS1CZXNjaHJlaWJ1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCd9ID0gJ0RpZXNlcyBGZWxkIHdpcmQgYmVuw7Z0aWd0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXBsZXRlJ30gPSAnVm9sbHN0w6RuZGlnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY29tcGxldGUnfSA9ICdVbnZvbGxzdMOkbmRpZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkjJ30gPSAnVW1mcmFnZSMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSd9ID0gJ1N0YW5kYXJkd2VydCc7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG9yIGRpc2FibGUgdGhlIFNob3dWb3RlRGF0YSBzY3JlZW4gb24gcHVibGljIGludGVyZmFjZSB0byBzaG93IGRhdGEgb2YgYW4gc3BlY2lmaWMgdm90YXRpb24gd2hlbiBjdXN0b21lciB0cmllcyB0byBhbnN3ZXIgYSBzdXJ2ZXkgYnkgc2Vjb25kIHRpbWUuJ30gPQogICAgICAgICdBa3RpdmllcmVuIG9kZXIgZGVha3RpdmllcmVuIGRlcyBTaG93Vm90ZURhdGEgc2NyZWVucyBpbSBQdWJsaWMgSW50ZXJmYWNlLCB1bSBBYnN0aW1tdW5ncy1EYXRlbiBhbnp1emVpZ2VuLCB3ZW5uIGVpbiBLdW5kZSB2ZXJzdWNodCBlaW4gendlaXRlcyBtYWwgYWJ6dXN0aW1tZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBwYXJhbWV0ZXJzIGZvciB0aGUgU3VydmV5IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ0FsbGUgUGFyYW1ldGVyIGbDvHIgZGFzIFVtZnJhZ2UtTW9kdWwgaW0gQWdlbnRlbi1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgaGVpZ2h0IGZvciBSaWNodGV4dCB2aWV3cyBmb3IgU3VydmV5Wm9vbSBlbGVtZW50cy4nfSA9ICdEZWZpbmllcnQgZGllICBTdGFuZGFyZGjDtmhlIGVpbmVzIFdZU0lXWUctQmVyZWljaHMgZsO8ciBkaWUgVW1mcmFnZS1EZXRhaWxhbnNpY2h0Lic7CgogICAgIyBUZW1wbGF0ZTogQUFBU3VydmV5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyctIENoYW5nZSBTdGF0dXMgLSd9ID0gJy0gU3RhdHVzIMOEbmRlcm4gLSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTmV3IFN1cnZleSd9ID0gJ05ldWUgVW1mcmFnZSBoaW56dWbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRWRpdCd9ID0gJ1VtZnJhZ2UgYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRWRpdCBRdWVzdGlvbnMnfSA9ICdGcmFnZW4gZGVyIFVtZnJhZ2UgYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbiBFZGl0J30gPSAnRnJhZ2UgYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbnN3ZXIgRWRpdCd9ID0gJ0FudHdvcnQgYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2V0IG5ldyBzdGF0dXMhIE5vIHF1ZXN0aW9ucyBkZWZpbmVkLid9ID0gJ1N0YXR1cyBrb25udGUgbmljaHQgZ2VzZXR6dCB3ZXJkZW4hIEtlaW5lIEZyYWdlbiBkZWZpbmllcnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXR1cyBjaGFuZ2VkLid9ID0gJ1N0YXR1cyBnZcOkbmRlcnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoYW5rIHlvdSBmb3IgeW91ciBmZWVkYmFjay4nfSA9ICdEYW5rZSBmw7xyIElociBGZWVkYmFjay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHN1cnZleSBpcyBmaW5pc2hlZC4nfSA9ICdEaWUgVW1mcmFnZSBpc3QgYmVlbmRldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcGxldGUnfSA9ICdWb2xsc3TDpG5kaWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jb21wbGV0ZSd9ID0gJ1Vudm9sbHN0w6RuZGlnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoZWNrYm94J30gPSAnS29udHJvbGxrw6RzdGNoZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2tib3ggKExpc3QpJ30gPSAnS29udHJvbGxrw6RzdGNoZW4gKExpc3RlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWRpbyd9ID0gJ09wdGlvbnNzY2hhbHRlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSYWRpbyAoTGlzdCknfSA9ICdPcHRpb25zc2NoYWx0ZXIgKExpc3RlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJ1N0YXRpc3RpayDDnGJlcnNpY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXNjcmlwdGlvbid9ID0gJ1VtZnJhZ2UgQmVzY2hyZWlidW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbnRyb2R1Y3Rpb24nfSA9ICdVbWZyYWdlIEVpbmxlaXR1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGV4dGFyZWEnfSA9ICdUZXh0YmVyZWljaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZZXMvTm8nfSA9ICdKYS9OZWluJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1llc05vJ30gPSAnSmFOZWluJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2Fuc3dlcmVkJ30gPSAnYmVhbnR3b3J0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGFuc3dlcmVkJ30gPSAnbmljaHQgYmVhbnR3b3J0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgRGV0YWlsJ30gPSAnU3RhdGlzdGlrIERldGFpbCc7CiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ydV9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBydV9TdXJ2ZXkucG0sdiAxLjMgMjAxMS8xMS8yMSAxMjowOToyNCBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpydV9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcXVlc3Rpb25zIHNhdmVkIGZvciB0aGlzIHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFN0YXQgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIEJhY2snfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heC4gc2hvd24gU3VydmV5cyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU2VuZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTdWJqZWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBCb2R5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VkIEJ5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW50IHJlcXVlc3RzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY2VpdmVkIHN1cnZleXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBHZW5lcmFsIEluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUmVzdWx0cyBHcmFwaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdGF0IHJlc3VsdHMuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYW5zd2VyIHRoZSBuZXh0IHF1ZXN0aW9ucyd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgU3VydmV5IE1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBtb2R1bGUgdG8gZWRpdCBzdXJ2ZXkgcXVlc3Rpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIHN0YXJ0aW5nIGZyb20gdGhlIGxhdGVzdCBjdXN0b21lciBzdXJ2ZXkgZW1haWwgYmV0d2VlbiBubyBjdXN0b21lciBzdXJ2ZXkgZW1haWwgaXMgc2VudCwgKCAwIG1lYW5zIEFsd2F5cyBzZW5kIGl0ICkgLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJvZHkgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2VuZGVyIGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN1YmplY3QgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBzdXJ2ZXkgbGlzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgc3VydmV5IG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgcGFyYW1ldGVycyBmb3IgdGhlIFN1cnZleSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3Igc3VydmV5IHpvb20gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIFB1YmxpY1N1cnZleSBvYmplY3QgaW4gdGhlIHB1YmxpYyBTdXJ2ZXkgYXJlYS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhpcyByZWdleCBtYXRjaGVzLCBubyBjdXN0b21lciBzdXJ2ZXkgd2lsbCBiZSBzZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBzdXJ2ZXlzIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIHN1cnZleSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljIFN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFpvb20gTW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgbGltaXQgcGVyIHBhZ2UgZm9yIFN1cnZleSBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIHN1cnZleSwgZS5nLiBTdXJ2ZXkjLCBNeVN1cnZleSMuIFRoZSBkZWZhdWx0IGlzIFN1cnZleSMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBldmVudCBtb2R1bGUgdG8gc2VuZCBhdXRvbWF0aWNhbGx5IHN1cnZleSBlbWFpbCByZXF1ZXN0cyB0byBjdXN0b21lcnMgaWYgYSB0aWNrZXQgZ2V0cyBjbG9zZWQuJ30gPSAnJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbnRyb2R1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXBsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY29tcGxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5Iyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlJ30gPSAnJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgb3IgZGlzYWJsZSB0aGUgU2hvd1ZvdGVEYXRhIHNjcmVlbiBvbiBwdWJsaWMgaW50ZXJmYWNlIHRvIHNob3cgZGF0YSBvZiBhbiBzcGVjaWZpYyB2b3RhdGlvbiB3aGVuIGN1c3RvbWVyIHRyaWVzIHRvIGFuc3dlciBhIHN1cnZleSBieSBzZWNvbmQgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHBhcmFtZXRlcnMgZm9yIHRoZSBTdXJ2ZXkgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgaGVpZ2h0IGZvciBSaWNodGV4dCB2aWV3cyBmb3IgU3VydmV5Wm9vbSBlbGVtZW50cy4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kYV9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBkYV9TdXJ2ZXkucG0sdiAxLjUgMjAxMi8wMS8yMSAyMDo1NjozMSBzYiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpkYV9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57Jy0gQ2hhbmdlIFN0YXR1cyAtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOZXcgU3VydmV5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0IFF1ZXN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbiBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fuc3dlciBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzZXQgbmV3IHN0YXR1cyEgTm8gcXVlc3Rpb25zIGRlZmluZWQuJ30gPSAnS2FuIGlra2Ugc8OmdHRlIG55IHN0YXR1cyEgRGVyIGVyIGlra2UgZGVmaW5lcmV0IG5vZ2VuIHNww7hyZ3Ntw6VsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0dXMgY2hhbmdlZC4nfSA9ICdTdGF0dXMgw6ZuZHJldCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmsgeW91IGZvciB5b3VyIGZlZWRiYWNrLid9ID0gJ1RhayBmb3IgZGluIGJlc3ZhcmVsc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBzdXJ2ZXkgaXMgZmluaXNoZWQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXBsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY29tcGxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2tib3gnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2tib3ggKExpc3QpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhZGlvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhZGlvIChMaXN0KSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUZXh0YXJlYSd9ID0gJ1Rla3N0b21yw6VkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZZXMvTm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWWVzTm8nfSA9ICdKYU5laic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbnN3ZXJlZCd9ID0gJ2Jlc3ZhcmV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBhbnN3ZXJlZCd9ID0gJ2lra2UgYmVzdmFyZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgRGV0YWlsJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgR2VuZXJhbCBJbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSMnfSA9ICdVbmRlcnPDuGdlbHNlIyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIEluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgT3ZlcnZpZXcgb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdHMgVGFibGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBTdGF0IERldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBzdGF0cyBvdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHbyBCYWNrJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHF1ZXN0aW9ucyBzYXZlZCBmb3IgdGhpcyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW5zd2VyJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heC4gc2hvd24gU3VydmV5cyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU2VuZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTdWJqZWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBCb2R5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgQnknfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbnQgcmVxdWVzdHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjZWl2ZWQgc3VydmV5cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBSZXN1bHRzIEdyYXBoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN0YXQgcmVzdWx0cy4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY1N1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5J30gPSAnVW5kZXJzw7hnZWxzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYW5zd2VyIHRoZSBuZXh0IHF1ZXN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG15IGFuc3dlcnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFRpdGxlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZXNlIGFyZSB5b3VyIGFuc3dlcnMuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBTdXJ2ZXkgTW9kdWxlLid9ID0gJ0V0IHVuZGVyc8O4Z2Vsc2VzbW9kdWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbW9kdWxlIHRvIGVkaXQgc3VydmV5IHF1ZXN0aW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyBzdGFydGluZyBmcm9tIHRoZSBsYXRlc3QgY3VzdG9tZXIgc3VydmV5IGVtYWlsIGJldHdlZW4gbm8gY3VzdG9tZXIgc3VydmV5IGVtYWlsIGlzIHNlbnQsICggMCBtZWFucyBBbHdheXMgc2VuZCBpdCApIC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBib2R5IGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNlbmRlciBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdWJqZWN0IGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgc3VydmV5IGxpc3QuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgaGVpZ2h0IGZvciBSaWNodGV4dCB2aWV3cyBmb3IgU3VydmV5Wm9vbSBlbGVtZW50cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgc3VydmV5IG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgb3IgZGlzYWJsZSB0aGUgU2hvd1ZvdGVEYXRhIHNjcmVlbiBvbiBwdWJsaWMgaW50ZXJmYWNlIHRvIHNob3cgZGF0YSBvZiBhbiBzcGVjaWZpYyB2b3RhdGlvbiB3aGVuIGN1c3RvbWVyIHRyaWVzIHRvIGFuc3dlciBhIHN1cnZleSBieSBzZWNvbmQgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHBhcmFtZXRlcnMgZm9yIHRoZSBTdXJ2ZXkgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHN1cnZleSB6b29tIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBQdWJsaWNTdXJ2ZXkgb2JqZWN0IGluIHRoZSBwdWJsaWMgU3VydmV5IGFyZWEuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHRoaXMgcmVnZXggbWF0Y2hlcywgbm8gY3VzdG9tZXIgc3VydmV5IHdpbGwgYmUgc2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgc3VydmV5cyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBzdXJ2ZXkgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyBTdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBab29tIE1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IGxpbWl0IHBlciBwYWdlIGZvciBTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBzdXJ2ZXksIGUuZy4gU3VydmV5IywgTXlTdXJ2ZXkjLiBUaGUgZGVmYXVsdCBpcyBTdXJ2ZXkjLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZXZlbnQgbW9kdWxlIHRvIHNlbmQgYXV0b21hdGljYWxseSBzdXJ2ZXkgZW1haWwgcmVxdWVzdHMgdG8gY3VzdG9tZXJzIGlmIGEgdGlja2V0IGdldHMgY2xvc2VkLid9ID0gJyc7Cgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9lc19TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBlc19TdXJ2ZXkucG0sdiAxLjUgMjAxMi8wMS8yMSAyMDo1NjozMSBzYiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplc19TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICdDcmVhciBOdWV2YSBFbmN1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRyb2R1Y3Rpb24nfSA9ICdJbnRyb2R1Y2Npw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnRGVzY3JpcGNpw7NuIEludGVybmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQnfSA9ICdFZGl0YXIgRW5jdWVzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBJbmZvJ30gPSAnSW5mb3JtYWNpw7NuIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgT3ZlcnZpZXcnfSA9ICdyZXPDum1lbiBFc3RhZGlzdGljYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdHMgVGFibGUnfSA9ICdUYWJsYSBkZSBTb2xpY2l0dWRlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICdUaWVtcG8gZGUgRW52w61vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgVGltZSd9ID0gJ1RpZW1wbyBkZSBWb3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICdEZXRhbGxlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBxdWVzdGlvbnMgc2F2ZWQgZm9yIHRoaXMgc3VydmV5Lid9ID0gJ05vIGhheSBwcmVndW50YXMgYWxtYWNlbmFkYXMgcGFyYSBlc3RhIGVuY3Vlc3RhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgU3RhdCBEZXRhaWxzJ30gPSAnRGV0YWxsZXMgZGUgRXN0YWRpc3RpY2FzIGRlIEVuY3Vlc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIGJhY2sgdG8gc3RhdHMgb3ZlcnZpZXcnfSA9ICdyZWdyZXNhciBhIHJlc8O6bWVuIGRlIGVzdGFkaXN0aWNhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHbyBCYWNrJ30gPSAnUmVncmVzYXInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQgUXVlc3Rpb25zJ30gPSAnRWRpdGFyIFByZWd1bnRhcyBkZSBFc3RhZMOtc3RpY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFF1ZXN0aW9uJ30gPSAnQWdyZWdhciBQcmVndW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJ0VzY3JpYmEgbGEgcHJlZ3VudGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFF1ZXN0aW9ucyd9ID0gJ1ByZWd1bnRhcyBkZSBFc3RhZGlzdGljYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbid9ID0gJ1ByZWd1bnRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICdFZGl0YXIgUHJlZ3VudGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICdyZWdyZXNhciBhIHByZWd1bnRhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQb3NzaWJsZSBBbnN3ZXJzIEZvcid9ID0gJ1Bvc2libGVzIHJlc3B1ZXN0YXMgcGFyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQW5zd2VyJ30gPSAnQWdyZWdhciBSZXNwdWVzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBkb2VzblwndCBoYXZlIHNldmVyYWwgYW5zd2VycywgYSB0ZXh0YXJlYSB3aWxsIGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJ0VzdGEgcHJlZ3VudGEgbm8gdGllbmUgdmFyaWFzIHJlc3B1ZXN0YXMsIHVuIGFyZWEgZGUgdGV4dG8gc2Vyw6EgbW9zdHJhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBBbnN3ZXInfSA9ICdFZGl0YXIgUmVzcHVlc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIGJhY2sgdG8gZWRpdCBxdWVzdGlvbid9ID0gJ3ZvbHZlciBhIGVkaXRhciBwcmVndW50YSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0NvbmZpZ3VyYWNpb25lcyBkZSBDb250ZXh0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXguIHNob3duIFN1cnZleXMgcGVyIHBhZ2UnfSA9ICdOdW1lcm8gbcOheGltbyBkZSBlbmN1ZXN0YXMgbW9zdHJhZGFzIHBvciBww6FnaW5hJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTZW5kZXInfSA9ICdSZW1pdGVudGUgZGUgTm90aWZpY2FjaW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTdWJqZWN0J30gPSAnQXN1bnRvIGRlIE5vdGlmaWNhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIEJvZHknfSA9ICdDdWVycG8gZGUgTm90aWZpY2FjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIFRpbWUnfSA9ICdUaWVtcG8gZGUgQ3JlYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgQnknfSA9ICdDcmVhZG8gcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgVGltZSd9ID0gJ1RpZW1wbyBkZSBtb2RpZmljYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgQnknfSA9ICdNb2RpZmljYWNvIHBvcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2nDs24gZGUgRW5jdWVzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VudCByZXF1ZXN0cyd9ID0gJ1NvbGljaXR1ZGVzIGVudmlhZGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY2VpdmVkIHN1cnZleXMnfSA9ICdTb2xpY2l0dWRlcyByZWNpYmlkYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBHZW5lcmFsIEluZm8nfSA9ICdFZGl0YXIgaW5mb3JtYWNpw7NuIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbnMnfSA9ICdFZGl0YXIgUHJlZ3VudGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRzIERldGFpbHMnfSA9ICdEZXRhbGxlIGRlIEVzdGFkw61zdGljYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IERldGFpbHMnfSA9ICdEZXRhbGxlcyBkZSBFbmN1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUmVzdWx0cyBHcmFwaCd9ID0gJ0dyYWZpY2EgZGUgUmVzdWx0YWRvcyBkZSBFbmN1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdGF0IHJlc3VsdHMuJ30gPSAnTm8gaGF5IGdyYWZpY2FzIGRlIHJlc3VsdGFkb3MuJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSd9ID0gJ0VuY3Vlc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBhbnN3ZXIgdGhlIG5leHQgcXVlc3Rpb25zJ30gPSAnUG9yIGZhdm9yIGNvbnRlc3RlIGxhcyBzaWd1aWVudGVzIHByZWd1bnRhcyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgU3VydmV5IE1vZHVsZS4nfSA9ICdVbiBNw7NkdWxvIGRlIEVuY3Vlc3Rhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBtb2R1bGUgdG8gZWRpdCBzdXJ2ZXkgcXVlc3Rpb25zLid9ID0gJ1VuIG3Ds2R1bG8gcGFyYSBlZGl0YXIgbGFzIHByZWd1bnRhcyBkZSB1bmEgZW5jdWVzdGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgc3RhcnRpbmcgZnJvbSB0aGUgbGF0ZXN0IGN1c3RvbWVyIHN1cnZleSBlbWFpbCBiZXR3ZWVuIG5vIGN1c3RvbWVyIHN1cnZleSBlbWFpbCBpcyBzZW50LCAoIDAgbWVhbnMgQWx3YXlzIHNlbmQgaXQgKSAuJ30gPQogICAgICAgICdEaWFzIGNvbWVuemFuZG8gZGVzZGUgbGEgw7psdGltYSBlbiBjdWVzdGEgZW52aWFkYSBhbCBjbGllbnRlICggMCBzaWduaWZpY2EgZW52aWFsYSBzaWVtcHJlICkgLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJvZHkgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPQogICAgICAgICdDdWVycG8gZGVmYXVsdCBwYXJhIGVsIGVtYWlsIGRlIG5vdGlmaWNhY2nDs24gYSBsb3MgY2xpZW50ZXMgc29icmUgbGEgZW5jdWVzdGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2VuZGVyIGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0KICAgICAgICAnUmVtaXRlbnRlIGRlZmF1bHQgcGFyYSBlbCBlbWFpbCBkZSBub3RpZmljYWNpw7NuIGEgbG9zIGNsaWVudGVzIHNvYnJlIGxhIGVuY3Vlc3RhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN1YmplY3QgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPQogICAgICAgICdBc3VudG8gZGVmYXVsdCBwYXJhIGVsIGVtYWlsIGRlIG5vdGlmaWNhY2nDs24gYSBsb3MgY2xpZW50ZXMgc29icmUgbGEgZW5jdWVzdGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBzdXJ2ZXkgbGlzdC4nfSA9CiAgICAgICAgJ0RlZmluZSB1bmEgbcOzZHVsbyByZXN1bWVuIHBhcmEgbW9zdHJhciBsYSB2aXN0YSBwZXF1ZcOxYSBkZSBsYSBsaXN0YSBkZSBlbmN1ZXN0YXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIHN1cnZleSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9CiAgICAgICAgJ0RlZmluZSBsYXMgY29sdW1uYXMgbW9zdHJhZGFzIGVuIGxhIHZpc3RhIFwnUmVzdW1lbiBkZSBFc3RhZGlzdGljYXNcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHBhcmFtZXRlcnMgZm9yIHRoZSBTdXJ2ZXkgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHN1cnZleSB6b29tIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZSBtw7NkdWxvIGZyb250ZW5kIFN1cnZleVpvb20gZW4gbGEgaW50ZXJmYWNlIGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBQdWJsaWNTdXJ2ZXkgb2JqZWN0IGluIHRoZSBwdWJsaWMgU3VydmV5IGFyZWEuJ30gPQogICAgICAgICdSZWdpc3RybyBkZSBtw7NkdWxvIGZyb250ZW5kIFB1YmxpY1N1cnZleSBlbiBsYSBpbnRlcmZhY2UgcMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHRoaXMgcmVnZXggbWF0Y2hlcywgbm8gY3VzdG9tZXIgc3VydmV5IHdpbGwgYmUgc2VudC4nfSA9CiAgICAgICAgJ1NpIGVzdGEgZXhwcmVzacOzbiByZWd1bGFyIGNvbmN1ZXJkYSwgbGEgZW5jdWVzdGEgbm8gc2Vyw6EgZW52aWFkYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgc3VydmV5cyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBzdXJ2ZXkgb3ZlcnZpZXcuJ30gPQogICAgICAgICdQYXJhbWV0cm9zIHBhcmEgbGFzIHDDoWdpbmFzIChlbiBxdWUgbGFzIGVuY3Vlc3RhcyBzb24gbW9zdHJhZGFzKSBkZSBsYSB2aXN0YSBkZSByZXN1bWVuIHBlcXVlw7FhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMgU3VydmV5Lid9ID0KICAgICAgICAnRW5jdWVzdGEgUMO6YmxpY2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnTGltaXRlIGRlIGxhIHZpc3RhIGRlIHJlc3VtZW4gcGVxdWXDsWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBab29tIE1vZHVsZS4nfSA9ICdNb2R1bG8gZGUgRGV0YWxsZSBkZSBFbmN1ZXN0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IGxpbWl0IHBlciBwYWdlIGZvciBTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIi4nfSA9CiAgICAgICAgJ0xpbWl0ZSBkZSBlbmN1ZXN0YXMgcG9yIHDDoWdpbmEgcGFyYSBsYSB2aXN0YSBkZSByZXN1bWVuIHBlcXVlw7FhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBzdXJ2ZXksIGUuZy4gU3VydmV5IywgTXlTdXJ2ZXkjLiBUaGUgZGVmYXVsdCBpcyBTdXJ2ZXkjLid9ID0KICAgICAgICAnRWwgaWRlbnRpZmljYWRvciBwYXJhIHVuYSBlbmN1ZXN0YSwgZWplbXBsbyBTdXJ2ZXkjLCBNeVN1cnZleSMuIFBvciBkZWZlY3RvIGVzIFN1cnZleSMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBldmVudCBtb2R1bGUgdG8gc2VuZCBhdXRvbWF0aWNhbGx5IHN1cnZleSBlbWFpbCByZXF1ZXN0cyB0byBjdXN0b21lcnMgaWYgYSB0aWNrZXQgZ2V0cyBjbG9zZWQuJ30gPQogICAgICAgICdNb2R1bG8gZGUgZXZlbnRvIGRlIFRpY2tldCBwYXJhIGVudmlhciBhdXRvbWF0aWNhbWVudGUgY29ycmVvcyBkZSBzb2xpY2l0dWRlcyBkZSBlbmN1ZXN0YSBhIGNsaWVudGVzIHNpIGVsIHRpY2tldCBzZSBoYSBjZXJyYWRvLic7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCd9ID0gJ0VzdGUgY2FtcG8gZXMgcmVxdWVyaWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbnRyb2R1Y3Rpb24nfSA9ICdJbnRyb2R1Y2Npw7NuIGRlIGxhIEVuY3Vlc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXNjcmlwdGlvbid9ID0gJ0Rlc2NyaXBjacOzbiBkZSBsYSBFbmN1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wbGV0ZSd9ID0gJ0NvbXBsZXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY29tcGxldGUnfSA9ICdJbmNvbXBsZXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSMnfSA9ICdFbmN1ZXN0YSMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSd9ID0gJ1ZhbG9yIHByZWRldGVybWluYWRvJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgb3IgZGlzYWJsZSB0aGUgU2hvd1ZvdGVEYXRhIHNjcmVlbiBvbiBwdWJsaWMgaW50ZXJmYWNlIHRvIHNob3cgZGF0YSBvZiBhbiBzcGVjaWZpYyB2b3RhdGlvbiB3aGVuIGN1c3RvbWVyIHRyaWVzIHRvIGFuc3dlciBhIHN1cnZleSBieSBzZWNvbmQgdGltZS4nfSA9CiAgICAgICAgJ0hhYmlsaXRhciBvIGRlc2hhYmlsaXRhciBsYSBwYW50YWxsYSBkZSBTaG93Vm90ZURhdGEgc2NyZWVuIGVuIGxhIGludGVyZmFzZSBwdWJsaWNhIHBhcmEgbW9zdHJhciBsb3MgZGF0b3MgZGUgdW4gdm90ZW8gJy4KICAgICAgICAnY3VhbmRvIGVsIGNsaWVudGUgaW50ZW50YSBjb250ZXN0YXIgbGEgZW5jdWVzdGEgcG9yIHNlZ3VuZGEgdmV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgcGFyYW1ldGVycyBmb3IgdGhlIFN1cnZleSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1RvZG9zIGxvcyBwYXJhbWV0cm9zIHBhcmEgZWwgb2JqZXRvIEVuY3Vlc3RhIGVuIGxhIGludGVyZmFzZSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgaGVpZ2h0IGZvciBSaWNodGV4dCB2aWV3cyBmb3IgU3VydmV5Wm9vbSBlbGVtZW50cy4nfSA9CiAgICAgICAgJ0RlZmluZSBsYSBhbHR1cmEgcHJlZGVmaW5pZGEgcGFyYSBsYSB2aXN0YSBkZSB0ZXh0byBlbnJpcXVlY2lkbyBwYXJhIGxvcyBlbGVtZW50b3MgZGUgbGEgcGFudGFsbCBkZSBkZXRhbGxlIGRlIGVzdGFkaXN0aWNhcy4nOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9iZ19TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBiZ19TdXJ2ZXkucG0sdiAxLjMgMjAxMS8xMS8yMSAxMjowOToyNCBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpiZ19TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcXVlc3Rpb25zIHNhdmVkIGZvciB0aGlzIHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFN0YXQgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIEJhY2snfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4LiBzaG93biBTdXJ2ZXlzIHBlciBwYWdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTZW5kZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIFN1YmplY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIEJvZHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgQnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgQnknfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbnQgcmVxdWVzdHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjZWl2ZWQgc3VydmV5cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEdlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFF1ZXN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBSZXN1bHRzIEdyYXBoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN0YXQgcmVzdWx0cy4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY1N1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBhbnN3ZXIgdGhlIG5leHQgcXVlc3Rpb25zJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBTdXJ2ZXkgTW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG1vZHVsZSB0byBlZGl0IHN1cnZleSBxdWVzdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBtZXNzYWdlIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLiBOT1RFLiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IHRoZXNlIGZpZWxkcyBhbHNvIGluIHRoZSB0aWNrZXQgem9vbSBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLCB5b3UgaGF2ZSB0byBlbmFibGUgdGhlbSBpbiBDdXN0b21lclRpY2tldFpvb20jIyNBdHRyaWJ1dGVzVmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlIHlvdXIgb3duIGxvZyB0ZXh0IGZvciBQR1AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbSB0ZXh0IGZvciB0aGUgcGFnZSBzaG93biB0byBjdXN0b21lcnMgdGhhdCBoYXZlIG5vIHRpY2tldHMgeWV0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIHN0YXJ0aW5nIGZyb20gdGhlIGxhdGVzdCBjdXN0b21lciBzdXJ2ZXkgZW1haWwgYmV0d2VlbiBubyBjdXN0b21lciBzdXJ2ZXkgZW1haWwgaXMgc2VudCwgKCAwIG1lYW5zIEFsd2F5cyBzZW5kIGl0ICkgLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJvZHkgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2VuZGVyIGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN1YmplY3QgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBzdXJ2ZXkgbGlzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgc3VydmV5IG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgcGFyYW1ldGVycyBmb3IgdGhlIFN1cnZleSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3Igc3VydmV5IHpvb20gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIFB1YmxpY1N1cnZleSBvYmplY3QgaW4gdGhlIHB1YmxpYyBTdXJ2ZXkgYXJlYS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhpcyByZWdleCBtYXRjaGVzLCBubyBjdXN0b21lciBzdXJ2ZXkgd2lsbCBiZSBzZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZ25vcmUgYXJ0aWNsZSB3aXRoIHN5c3RlbSBzZW5kZXIgdHlwZSBmb3IgbmV3IGFydGljbGUgZmVhdHVyZSAoZS4gZy4gYXV0byByZXNwb25zZXMgb3IgZW1haWwgbm90aWZpY2F0aW9ucykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIHN1cnZleXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgc3VydmV5IG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMgU3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhpcyB0byB5ZXMgaWYgeW91IHRydXN0IGluIGFsbCB5b3VyIHB1YmxpYyBhbmQgcHJpdmF0ZSBwZ3Aga2V5cywgZXZlbiBpZiB0aGV5IGFyZSBub3QgY2VydGlmaWVkIHdpdGggYSB0cnVzdGVkIHNpZ25hdHVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGltZSB1c2UgY29tcGxldGUgZGVzY3JpcHRpb24gKGRheXMsIGhvdXJzLCBtaW51dGVzKSwgaWYgc2V0IHRvICJZZXMiOyBvciBqdXN0IGZpcnN0IGxldHRlciAoZCwgaCwgbSksIGlmIHNldCB0byAiTm8iLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgWm9vbSBNb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBsaW1pdCBwZXIgcGFnZSBmb3IgU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgc3VydmV5LCBlLmcuIFN1cnZleSMsIE15U3VydmV5Iy4gVGhlIGRlZmF1bHQgaXMgU3VydmV5Iy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGV2ZW50IG1vZHVsZSB0byBzZW5kIGF1dG9tYXRpY2FsbHkgc3VydmV5IGVtYWlsIHJlcXVlc3RzIHRvIGN1c3RvbWVycyBpZiBhIHRpY2tldCBnZXRzIGNsb3NlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGV4dCBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgbWVzc2FnZSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4gTk9URS4gSWYgeW91IHdhbnQgdG8gZGlzcGxheSB0aGVzZSBmaWVsZHMgYWxzbyBpbiB0aGUgdGlja2V0IHpvb20gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZSwgeW91IGhhdmUgdG8gZW5hYmxlIHRoZW0gaW4gQ3VzdG9tZXJUaWNrZXRab29tIyMjQXR0cmlidXRlc1ZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBmcmVlIHRpbWUgb3B0aW9ucyBzaG93biBpbiB0aGUgdGlja2V0IG1lc3NhZ2Ugc2NyZWVuIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuIFBvc3NpYmxlIHNldHRpbmdzOiAwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkLCAyID0gRW5hYmxlZCBhbmQgcmVxdWlyZWQuIE5PVEUuIElmIHlvdSB3YW50IHRvIGRpc3BsYXkgdGhlc2UgZmllbGRzIGFsc28gaW4gdGhlIHRpY2tldCB6b29tIG9mIHRoZSBjdXN0b21lciBpbnRlcmZhY2UsIHlvdSBoYXZlIHRvIGVuYWJsZSB0aGVtIGluIEN1c3RvbWVyVGlja2V0Wm9vbSMjI0F0dHJpYnV0ZXNWaWV3Lid9ID0gJyc7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNvbXBsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSd9ID0gJyc7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG9yIGRpc2FibGUgdGhlIFNob3dWb3RlRGF0YSBzY3JlZW4gb24gcHVibGljIGludGVyZmFjZSB0byBzaG93IGRhdGEgb2YgYW4gc3BlY2lmaWMgdm90YXRpb24gd2hlbiBjdXN0b21lciB0cmllcyB0byBhbnN3ZXIgYSBzdXJ2ZXkgYnkgc2Vjb25kIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBwYXJhbWV0ZXJzIGZvciB0aGUgU3VydmV5IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGhlaWdodCBmb3IgUmljaHRleHQgdmlld3MgZm9yIFN1cnZleVpvb20gZWxlbWVudHMuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wbF9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgMjAxMS0xMTogT1RSUyAzIGFkYXB0YXRpb24gYnkgSW5mb3JtYXR5a2EgQm9ndXNsYXdza2kgc3AuIHogby5vLiBzcC5rLiwgaHR0cDovL3d3dy5pYi5wbC8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6cGxfU3VydmV5OwoKdXNlIHN0cmljdDsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBOZXcgU3VydmV5J30gPSAnVXR3w7NyeiBub3fCsSBhbmtpZXTDqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRyb2R1Y3Rpb24nfSA9ICdXcHJvd2FkemVuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJuYWwgRGVzY3JpcHRpb24nfSA9ICdXZXduw6p0cnpueSBvcGlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnRWR5Y2phIGFua2lldHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBJbmZvJ30gPSAnSW5mb3JtYWNqZSBvZ8OzbG5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRzIE92ZXJ2aWV3J30gPSAnU3RhdHlzdHlrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJ1RhYmVsYSDCv8KxZGHDsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICdDemFzIHd5c8KzYW5pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIFRpbWUnfSA9ICdDemFzIGfCs29zb3dhbmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICdTemN6ZWfDs8KzeSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBxdWVzdGlvbnMgc2F2ZWQgZm9yIHRoaXMgc3VydmV5Lid9ID0gJ0JyYWsgcHl0YcOxIHphcGlzYW55Y2ggdyB0ZWogYW5raWVjaWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBTdGF0IERldGFpbHMnfSA9ICdTemN6ZWfDs8KzeSBzdGF0eXN0eWtpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIGJhY2sgdG8gc3RhdHMgb3ZlcnZpZXcnfSA9ICdXc3RlY3ogZG8gcHJ6ZWdswrFkdSBzdGF0eXN0eWtpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIEJhY2snfSA9ICdXc3RlY3onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFN0YXR1cyd9ID0gJ1ptaWXDsSBzdGF0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHVzIGNoYW5nZWQnfSA9ICdTdGF0dXMgem1pZW5pb255JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0IFF1ZXN0aW9ucyd9ID0gJ0VkeWNqYSBweXRhw7EgYW5raWV0eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgUXVlc3Rpb24nfSA9ICdEb2RhaiBweXRhbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R5cGUgdGhlIHF1ZXN0aW9uJ30gPSAnV3Byb3dhZMWSIHB5dGFuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFF1ZXN0aW9ucyd9ID0gJ1B5dGFuaWEgYW5raWV0eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbid9ID0gJ1B5dGFuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbid9ID0gJ0VkeXR1aiBweXRhbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIGJhY2sgdG8gcXVlc3Rpb25zJ30gPSAncG93csOzdCBkbyBweXRhw7EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICdNb8K/bGl3ZSBvZHBvd2llZHppIGRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBBbnN3ZXInfSA9ICdEb2RhaiBvZHBvd2llZMWSJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgZG9lc25cJ3QgaGF2ZSBzZXZlcmFsIGFuc3dlcnMsIGEgdGV4dGFyZWEgd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPSAnTmllIHBvc2lhZGEgd2llbHUgb2Rwb3dpZWR6aSwgYsOqZHppZSB3ecK2d2lldGxhbmUgcG9sZSB0ZWtzdG93ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBBbnN3ZXInfSA9ICdFZHl0dWogb2Rwb3dpZWTFkic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICdwb3dyw7N0IGRvIGVkeWNqaSBweXRhbmlhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnVXN0YXdpZW5pYSBrb250ZWtzdG93ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXguIHNob3duIFN1cnZleXMgcGVyIHBhZ2UnfSA9ICdNYWtzLiBsaWN6YmEgd3nCtndpZXRsYW55Y2ggYW5raWV0IG5hIHN0cm9uw6onOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIFNlbmRlcid9ID0gJ05hZGF3Y2EgcG93aWFkb21pZW5pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU3ViamVjdCd9ID0gJ1RlbWF0IHBvd2lhZG9taWVuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIEJvZHknfSA9ICdUcmXCtsOmIHBvd2lhZG9taWVuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBUaW1lJ30gPSAnQ3phcyB1dHdvcnplbmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgQnknfSA9ICdVdHdvcnpvbmUgcHJ6ZXonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlZCBUaW1lJ30gPSAnQ3phcyB6bWlhbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlZCBCeSd9ID0gJ1ptaWVuaW9uZSBwcnpleic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hY2plIG8gYW5raWVjaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VudCByZXF1ZXN0cyd9ID0gJ1d5c8KzYW5lIMK/wrFkYW5pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNlaXZlZCBzdXJ2ZXlzJ30gPSAnT3RyenltYW5lIGFua2lldHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBHZW5lcmFsIEluZm8nfSA9ICdFZHl0dWogaW5mb3JtYWNqZSBvZ8OzbG5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb25zJ30gPSAnRWR5dHVqIHB5dGFuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgRGV0YWlscyd9ID0gJ1N6Y3plZ8OzwrN5IHN0YXR5c3R5ayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGV0YWlscyd9ID0gJ1N6Y3plZ8OzwrN5IGFua2lldHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFJlc3VsdHMgR3JhcGgnfSA9ICdXeWtyZXMgd3luaWvDs3cgYW5raWV0eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdGF0IHJlc3VsdHMuJ30gPSAnQnJhayB3eW5pa8OzdyBhbmtpZXR5Lic7CgogICAgIyBUZW1wbGF0ZTogUHVibGljU3VydmV5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXknfSA9ICdBbmtpZXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBhbnN3ZXIgdGhlIG5leHQgcXVlc3Rpb25zJ30gPSAnUHJvc2lteSwgb2Rwb3dpZWR6IG5hIG5hc3TDqnBuZSBweXRhbmlhJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBTdXJ2ZXkgTW9kdWxlLid9ID0gJ01vZHXCsyBhbmtpZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbW9kdWxlIHRvIGVkaXQgc3VydmV5IHF1ZXN0aW9ucy4nfSA9ICdFaW4gTW9kdWwsIHVtIFVtZnJhZ2VuIHp1IGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyBzdGFydGluZyBmcm9tIHRoZSBsYXRlc3QgY3VzdG9tZXIgc3VydmV5IGVtYWlsIGJldHdlZW4gbm8gY3VzdG9tZXIgc3VydmV5IGVtYWlsIGlzIHNlbnQsICggMCBtZWFucyBBbHdheXMgc2VuZCBpdCApIC4nfSA9ICdBbnphaGwgVGFnZSwgdm9uIGRlciBsZXR6dGVuIFVtZnJhZ2UtRS1NYWlsIGFuIGRlbiBLdW5kZW4sIGluIGRlciBrZWluZSB3ZWl0ZXJlIFVtZnJhZ2UtRW1haWwgYW4gZGVuIEt1bmRlbiB2ZXJzZW5kZXQgd2lyZCAoMCBiZWRldXRldCwgZGFzcyBkaWUgRS1NYWlsIGltbWVyIHZlcnNlbmRldCB3aXJkKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBib2R5IGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJ1ZvcmVpbmdlc3RlbGx0ZXIgVGV4dCBmw7xyIEJlbmFjaHJpY2h0aWd1bmdzLU1haWxzIGFuIGRlbiBLdW5kZW4gw7xiZXIgbmV1ZSBVbWZyYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZW5kZXIgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnVm9yZWluZ2VzdGVsbHRlciBBYnNlbmRlciBmw7xyIEJlbmFjaHJpY2h0aWd1bmdzLU1haWxzIGFuIGRlbiBLdW5kZW4gw7xiZXIgbmV1ZSBVbWZyYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdWJqZWN0IGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJ1ZvcmVpbmdlc3RlbGx0ZXIgQmV0cmVmZiBmw7xyIEJlbmFjaHJpY2h0aWd1bmdzLU1haWxzIGFuIGRlbiBLdW5kZW4gw7xiZXIgbmV1ZSBVbWZyYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHN1cnZleSBsaXN0Lid9ID0gJ0RlZmluaWVydCBlaW4gw5xiZXJzaWNodHMtTW9kdWwsIGRhc3MgZWluZSBMaXN0ZSBhbGxlciBVbWZyYWdlbiBhbnplaWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBzdXJ2ZXkgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnRGVmaW5pZXJ0IGRpZSBhbmdlemVpZ3RlbiBTcGFsdGVuIGluIGRlciBVbWZyYWdlLcOcYmVyc2ljaHQuIERpZSBFaW5zdGVsbHVuZyBoYXQga2VpbmVuIEVmZmVrdCBhdWYgZGllIGFuZ2V6ZWlndGUgUmVpaGVuZm9sZ2UgZGVyIFNwYWx0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHN1cnZleSB6b29tIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnRnJvbnRlbmQtTW9kdWwtUmVnaXN0cmllcnVuZyBmw7xyIGRpZSBVbWZyYWdlLURldGFpbGFuc2ljaHQgaW0gQWdlbnRlbi1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBQdWJsaWNTdXJ2ZXkgb2JqZWN0IGluIHRoZSBwdWJsaWMgU3VydmV5IGFyZWEuJ30gPSAnRnJvbnRlbmQtTW9kdWwtUmVnaXN0cmllcnVuZyBmw7xyIGRpZSDDtmZmZW50bGljaGUgVW1mcmFnZS3DnGJlcnNpY2h0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGlzIHJlZ2V4IG1hdGNoZXMsIG5vIGN1c3RvbWVyIHN1cnZleSB3aWxsIGJlIHNlbnQuJ30gPSAnV2VubiBkaWVzZXIgcmVndWzDpHJlIEF1c2RydWNrIHp1dHJpZmZ0LCB3aXJkIGtlaW5lIFVtZnJhZ2UgYW4gZGVuIEt1bmRlbiBnZXNlbmRldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgc3VydmV5cyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBzdXJ2ZXkgb3ZlcnZpZXcuJ30gPSAnUGFyYW1ldGVyIGbDvHIgZGllIFNlaXRlbiBkZXIgVW1mcmFnZS3DnGJlcnNpY2h0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMgU3VydmV5Lid9ID0gJ8OWZmZlbnRsaWNoZSBVbWZyYWdlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ1VtZnJhZ2Utw5xiZXJzaWNodCBMaW1pdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgWm9vbSBNb2R1bGUuJ30gPSAnTW9kdWwgVW1mcmFnZS1EZXRhaWxhbnNpY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBsaW1pdCBwZXIgcGFnZSBmb3IgU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCInfSA9ICdVbWZyYWdlLUxpbWl0IHBybyBTZWl0ZSBpbiBkZXIgVW1mcmFnZS3DnGJlcnNpY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIHN1cnZleSwgZS5nLiBTdXJ2ZXkjLCBNeVN1cnZleSMuIFRoZSBkZWZhdWx0IGlzIFN1cnZleSMuJ30gPSAnRGllIGVpbmRldXRpZ2UgQmV6ZWljaG51bmcgZsO8ciBlaW5lIFVtZnJhZ2UsIHouIEIuIFN1cnZleSMgb2RlciBNeVN1cnZleSMuIFN0YW5kYXJkIGlzdCBTdXJ2ZXkjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZXZlbnQgbW9kdWxlIHRvIHNlbmQgYXV0b21hdGljYWxseSBzdXJ2ZXkgZW1haWwgcmVxdWVzdHMgdG8gY3VzdG9tZXJzIGlmIGEgdGlja2V0IGdldHMgY2xvc2VkLid9ID0gJ1RpY2tldC1FdmVudC1Nb2R1bCwgdW0gYXV0b21hdGlzY2ggVW1mcmFnZS1FLU1haWxzIGFuIEt1bmRlbiB6dSBzZW5kZW4sIHdoZW4gZWluIFRpY2tldCBnZXNjaGxvc3NlbiB3aXJkLic7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJ1dzdMOqcCBhbmtpZXR5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXNjcmlwdGlvbid9ID0gJ09waXMgYW5raWV0eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJ30gPSAnVG8gcG9sZSBqZXN0IHd5bWFnYW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXBsZXRlJ30gPSAnS29tcGxldG5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY29tcGxldGUnfSA9ICdOaWVrb21wbGV0bmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5Iyd9ID0gJ0Fua2lldGEjJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUnfSA9ICdEb215wrZsbmEgd2FydG/CtsOmJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgb3IgZGlzYWJsZSB0aGUgU2hvd1ZvdGVEYXRhIHNjcmVlbiBvbiBwdWJsaWMgaW50ZXJmYWNlIHRvIHNob3cgZGF0YSBvZiBhbiBzcGVjaWZpYyB2b3RhdGlvbiB3aGVuIGN1c3RvbWVyIHRyaWVzIHRvIGFuc3dlciBhIHN1cnZleSBieSBzZWNvbmQgdGltZS4nfSA9CiAgICAgICAgJ0FrdGl2aWVyZW4gb2RlciBkZWFrdGl2aWVyZW4gZGVzIFNob3dWb3RlRGF0YSBzY3JlZW5zIGltIFB1YmxpYyBJbnRlcmZhY2UsIHVtIEFic3RpbW11bmdzLURhdGVuIGFuenV6ZWlnZW4sIHdlbm4gZWluIEt1bmRlIHZlcnN1Y2h0IGVpbiB6d2VpdGVzIG1hbCBhYnp1c3RpbW1lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHBhcmFtZXRlcnMgZm9yIHRoZSBTdXJ2ZXkgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnQWxsZSBQYXJhbWV0ZXIgZsO8ciBkYXMgVW1mcmFnZS1Nb2R1bCBpbSBBZ2VudGVuLUludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBoZWlnaHQgZm9yIFJpY2h0ZXh0IHZpZXdzIGZvciBTdXJ2ZXlab29tIGVsZW1lbnRzLid9ID0gJ0RlZmluaWVydCBkaWUgIFN0YW5kYXJkaMO2aGUgZWluZXMgV1lTSVdZRy1CZXJlaWNocyBmw7xyIGRpZSBVbWZyYWdlLURldGFpbGFuc2ljaHQuJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9uYl9OT19TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBuYl9OT19TdXJ2ZXkucG0sdiAxLjQgMjAxMi8wMS8yMSAyMDo1NjozMSBzYiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpuYl9OT19TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICdMYWcgbnkgc3DDuHJyZXVuZGVyc8O4a2Vsc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnSW50cm9kdWtzam9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnSW50ZXJuIGJlc2tyaXZlbHNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnUmVkaWdlciBzcMO4cnJldW5kZXJzw7hrZWxzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIEluZm8nfSA9ICdHZW5lcmVsbCBpbmZvcm1hc2pvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJ1N0YXRpc3Rpa2tvdmVyc2lrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJ1RhYmVsbGZvcmVzcMO4cnNlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICdUaWQgc2VuZHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSBUaW1lJ30gPSAnVGlkIHN2YXJ0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICdEZXRhbGplcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBxdWVzdGlvbnMgc2F2ZWQgZm9yIHRoaXMgc3VydmV5Lid9ID0gJ0luZ2VuIHNww7hyc23DpWwgbGFncmV0IGZvciBkZW5uZSBzcMO4cnJldW5kZXJzw7hrZWxzZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBTdGF0IERldGFpbHMnfSA9ICdEZXRhbGpzdGF0aXN0aWtrIGZvciBzcMO4cnJldW5kZXJzw7hrZWxzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3J30gPSAnZ8OlIHRpbGJha2UgdGlsIHN0YXRpc3Rpa2tvdmVyc2lrdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIEJhY2snfSA9ICdHw6UgdGlsYmFrZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlFZGl0UXVlc3Rpb25zCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRWRpdCBRdWVzdGlvbnMnfSA9ICdSZWRpZ2VyIHNww7hyc23DpWwgdGlsIHNww7hycmV1bmRlcnPDuGtlbHNlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgUXVlc3Rpb24nfSA9ICdMZWdnIHRpbCBzcMO4cnNtw6VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R5cGUgdGhlIHF1ZXN0aW9uJ30gPSAnU2tyaXYgaW5uIHNww7hyc23DpWxldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnU3DDuHJzbcOlbCB0aWwgc3DDuHJyZXVuZGVyc8O4a2Vsc2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnU3DDuHJzbcOlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFF1ZXN0aW9uJ30gPSAnUmVkaWdlciBzcMO4cnNtw6VsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIGJhY2sgdG8gcXVlc3Rpb25zJ30gPSAndGlsYmFrZSB0aWwgc3DDuHJzbcOlbGVuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQb3NzaWJsZSBBbnN3ZXJzIEZvcid9ID0gJ011bGlnZSBzdmFyYWx0ZXJuYXRpdmVyIGZvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQW5zd2VyJ30gPSAnTGVnZyB0aWwgc3ZhcmFsdGVybmF0aXZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJ0RldHRlIHNww7hyc23DpWxldCBoYXIgaWtrZSBtdWxpZ2hldCBmb3Igc3ZhcmFsdGVybmF0aXZlci4gSGVyIHZpbCBkZXQga3VuIGJsaSB2aXN0IGVuIHRla3N0Ym9rcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBBbnN3ZXInfSA9ICdSZWRpZ2VyIHN2YXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBlZGl0IHF1ZXN0aW9uJ30gPSAnZ8OlIHRpbGJha2UgZm9yIMOlIHJlZGlnZXJlIHNww7hyc23DpWwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4LiBzaG93biBTdXJ2ZXlzIHBlciBwYWdlJ30gPSAnTWF4IGFudGFsbCBzcMO4cnJldW5kZXJzw7hrZWxzZXIgcHIgc2lkZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU2VuZGVyJ30gPSAnQXZzZW5kZXIgYXYgdmFyc2VsLWUtcG9zdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU3ViamVjdCd9ID0gJ1RpdHRlbCBpIHZhcnNlbC1lLXBvc3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIEJvZHknfSA9ICdNZWxkaW5nIGkgdmFyc2VsLWUtcG9zdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIFRpbWUnfSA9ICdUaWQgb3BwcmV0dGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgQnknfSA9ICdPcHByZXR0ZXQgYXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlZCBUaW1lJ30gPSAnVGlkIGVuZHJldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VkIEJ5J30gPSAnRW5kcmV0IGF2JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFzam9uIG9tIHNww7hycmV1bmRlcnPDuGtlbHNlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW50IHJlcXVlc3RzJ30gPSAnU2VuZHRlIGZvcmVzcMO4cnNsZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjZWl2ZWQgc3VydmV5cyd9ID0gJ01vdHRhdHRlIHNww7hycmV1bmRlcnPDuGtlbHNlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEdlbmVyYWwgSW5mbyd9ID0gJ1JlZGlnZXIgZ2VuZXJlbGwgaW5mb3JtYXNqb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbnMnfSA9ICdSZWRpZ2VyIHNww7hyc23DpWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgRGV0YWlscyd9ID0gJ0RldGFsamVyIG9tIHN0YXRpc3Rpa2tlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGV0YWlscyd9ID0gJ0RldGFsamVyIG9tIHNww7hycmV1bmRlcnPDuGtlbHNlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUmVzdWx0cyBHcmFwaCd9ID0gJ0dyYWZpc2sgZnJlbXN0aWxsaW5nIGF2IHN2YXJlbmUgaSBzcMO4cnJldW5kZXJzw7hrZWxzZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3RhdCByZXN1bHRzLid9ID0gJ0luZ2VuIHJlc3VsdGF0ZXInOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY1N1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5J30gPSAnU3DDuHJyZXVuZGVyc8O4a2Vsc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGFuc3dlciB0aGUgbmV4dCBxdWVzdGlvbnMnfSA9ICdWZW5ubGlnc3Qgc3ZhciBww6UgZGUgbmVzdGUgc3DDuHJzbcOlbGVuZSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgU3VydmV5IE1vZHVsZS4nfSA9ICdFbiBtb2R1bCBmb3Igc3DDuHJyZXVuZGVyc8O4a2Vsc2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbW9kdWxlIHRvIGVkaXQgc3VydmV5IHF1ZXN0aW9ucy4nfSA9ICdFbiBtb2R1bCBmb3Igw6UgcmVkaWdlcmUgc3DDuHJyZXVuZGVyc8O4a2Vsc2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgc3RhcnRpbmcgZnJvbSB0aGUgbGF0ZXN0IGN1c3RvbWVyIHN1cnZleSBlbWFpbCBiZXR3ZWVuIG5vIGN1c3RvbWVyIHN1cnZleSBlbWFpbCBpcyBzZW50LCAoIDAgbWVhbnMgQWx3YXlzIHNlbmQgaXQgKSAuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYm9keSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICdTdGFuZGFyZCBtZWxkaW5nIGkgdmFyc2VsLWUtcG9zdCB0aWwga3VuZGVyIG9tIGVuIG55IHNww7hycmV1bmRlcnPDuGtlbHNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNlbmRlciBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICdTdGFuZGFyZCBhdnNlbmRlciBpIHZhcnNlbC1lLXBvc3QgdGlsIGt1bmRlciBvbSBlbiBueSBzcMO4cnJldW5kZXJzw7hrZWxzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdWJqZWN0IGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJ1N0YW5kYXJkIG92ZXJza3JpZnQgaSB2YXJzZWwtZS1wb3N0IHRpbCBrdW5kZXIgb20gZW4gbnkgc3DDuHJyZXVuZGVyc8O4a2Vsc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBzdXJ2ZXkgbGlzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgc3VydmV5IG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgcGFyYW1ldGVycyBmb3IgdGhlIFN1cnZleSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3Igc3VydmV5IHpvb20gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIFB1YmxpY1N1cnZleSBvYmplY3QgaW4gdGhlIHB1YmxpYyBTdXJ2ZXkgYXJlYS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhpcyByZWdleCBtYXRjaGVzLCBubyBjdXN0b21lciBzdXJ2ZXkgd2lsbCBiZSBzZW50Lid9ID0gJ0h2aXMgZGVubmUgcmVnZXhlbiBzdGVtbWVyLCB2aWwgZGV0IGlra2UgYmxpIHNlbmR0IHV0IGVuIHNww7hycmV1bmRlcnPDuGtlbHNlIHRpbCBrdW5kZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIHN1cnZleXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgc3VydmV5IG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMgU3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgWm9vbSBNb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBsaW1pdCBwZXIgcGFnZSBmb3IgU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgc3VydmV5LCBlLmcuIFN1cnZleSMsIE15U3VydmV5Iy4gVGhlIGRlZmF1bHQgaXMgU3VydmV5Iy4nfSA9ICdTdGFuZGFyZCBpZGVudGlmaWthdG9yIGZvciBlbiB1bmRlcnPDuGtsc2UsIGYuZWtzLiBTcMO4cnJldW5kZXJzw7hrZWxzZSMsIE1pblNww7hycmV1bmRlcnPDuGtlbHNlIy4gU3RhbmRhcmQgZXIgU3VydmV5Iy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGV2ZW50IG1vZHVsZSB0byBzZW5kIGF1dG9tYXRpY2FsbHkgc3VydmV5IGVtYWlsIHJlcXVlc3RzIHRvIGN1c3RvbWVycyBpZiBhIHRpY2tldCBnZXRzIGNsb3NlZC4nfSA9ICcnOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbnRyb2R1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcGxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jb21wbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkjJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUnfSA9ICcnOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBvciBkaXNhYmxlIHRoZSBTaG93Vm90ZURhdGEgc2NyZWVuIG9uIHB1YmxpYyBpbnRlcmZhY2UgdG8gc2hvdyBkYXRhIG9mIGFuIHNwZWNpZmljIHZvdGF0aW9uIHdoZW4gY3VzdG9tZXIgdHJpZXMgdG8gYW5zd2VyIGEgc3VydmV5IGJ5IHNlY29uZCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgcGFyYW1ldGVycyBmb3IgdGhlIFN1cnZleSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBoZWlnaHQgZm9yIFJpY2h0ZXh0IHZpZXdzIGZvciBTdXJ2ZXlab29tIGVsZW1lbnRzLid9ID0gJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vU3VydmV5LnBtIC0gYWxsIHN1cnZleSBmdW50aW9ucwojIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogU3VydmV5LnBtLHYgMS42NiAyMDEyLzAxLzE5IDE2OjEwOjA3IG1iIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTdXJ2ZXk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRGlnZXN0OjpNRDU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyOwp1c2UgS2VybmVsOjpTeXN0ZW06OkVtYWlsOwp1c2UgS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlsczsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ7CnVzZSBNYWlsOjpBZGRyZXNzOwoKdXNlIHZhcnMgcXcoQElTQSAkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjY2ICQpIFsxXTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6U3VydmV5IC0gc3VydmV5IGxpYgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgc3VydmV5IGZ1bmN0aW9ucy4gRS4gZy4gdG8gYWRkIHN1cnZleSBvciBhbmQgZnVuY3Rpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6Q29uZmlnOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpFbmNvZGU7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkxvZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6REI7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok1haW47CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OlVzZXI7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OlN1cnZleTsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgbXkgJEVuY29kZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICk7CiAgICBteSAkTG9nT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgKTsKICAgIG15ICRUaW1lT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlRpbWUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkTWFpbk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpNYWluLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICApOwogICAgbXkgJERCT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgIG15ICRVc2VyT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlVzZXItPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICAgICAgVGltZU9iamVjdCAgID0+ICRUaW1lT2JqZWN0LAogICAgICAgIERCT2JqZWN0ICAgICA9PiAkREJPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICApOwogICAgbXkgJFN1cnZleU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpTdXJ2ZXktPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBUaW1lT2JqZWN0ICAgPT4gJFRpbWVPYmplY3QsCiAgICAgICAgREJPYmplY3QgICAgID0+ICREQk9iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgVXNlck9iamVjdCAgID0+ICRVc2VyT2JqZWN0LAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgVGltZU9iamVjdCBEQk9iamVjdCBNYWluT2JqZWN0IEVuY29kZU9iamVjdCBVc2VyT2JqZWN0KQogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+eyRPYmplY3R9ID0gJFBhcmFteyRPYmplY3R9IHx8IGRpZSAiR290IG5vICRPYmplY3QhIjsKICAgIH0KCiAgICAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0gPSAkUGFyYW17SFRNTFV0aWxzT2JqZWN0fQogICAgICAgIHx8IEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMtPm5ldyggJXskU2VsZn0gKTsKCiAgICAkU2VsZi0+e1NlbmRtYWlsT2JqZWN0fSA9ICRQYXJhbXtTZW5kbWFpbE9iamVjdH0gfHwgS2VybmVsOjpTeXN0ZW06OkVtYWlsLT5uZXcoICV7JFNlbGZ9ICk7CgogICAgJFNlbGYtPntDdXN0b21lclVzZXJPYmplY3R9ID0gJFBhcmFte0N1c3RvbWVyVXNlck9iamVjdH0KICAgICAgICB8fCBLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyLT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e1RpY2tldE9iamVjdH0gPSAkUGFyYW17VGlja2V0T2JqZWN0fSB8fCBLZXJuZWw6OlN5c3RlbTo6VGlja2V0LT5uZXcoICV7JFNlbGZ9ICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBTdXJ2ZXlMaXN0KCkKCnRvIGdldCBhIGFycmF5IGxpc3Qgb2YgYWxsIHN1cnZleSBpdGVtcwoKICAgIG15IEBMaXN0ID0gJFN1cnZleU9iamVjdC0+U3VydmV5TGlzdCgpOwoKPWN1dAoKc3ViIFN1cnZleUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBzdXJ2ZXkgbGlzdAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBzdXJ2ZXkgT1JERVIgQlkgY3JlYXRlX3RpbWUgREVTQycsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdHMKICAgIG15IEBMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBMaXN0LCAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBATGlzdDsKfQoKPWl0ZW0gU3VydmV5R2V0KCkKCnRvIGdldCBhbGwgYXR0cmlidXRlcyBvZiBhIHN1cnZleQoKICAgIG15ICVTdXJ2ZXkgPSAkU3VydmV5T2JqZWN0LT5TdXJ2ZXlHZXQoCiAgICAgICAgU3VydmV5SUQgPT4gMTIzCiAgICApOwoKPWN1dAoKc3ViIFN1cnZleUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U3VydmV5SUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTdXJ2ZXlJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtTdXJ2ZXlJRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtTdXJ2ZXlJRH0sICdJbnRlZ2VyJyApOwoKICAgICMgZ2V0IGFsbCBhdHRyaWJ1dGVzIG9mIGEgc3VydmV5CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCwgc3VydmV5bnVtYmVyLCB0aXRsZSwgaW50cm9kdWN0aW9uLCBkZXNjcmlwdGlvbiwiCiAgICAgICAgICAgIC4gIiBub3RpZmljYXRpb25fc2VuZGVyLCBub3RpZmljYXRpb25fc3ViamVjdCwgbm90aWZpY2F0aW9uX2JvZHksICIKICAgICAgICAgICAgLiAiIHN0YXR1cywgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSAiCiAgICAgICAgICAgIC4gIiBGUk9NIHN1cnZleSBXSEVSRSBpZCA9ICRQYXJhbXtTdXJ2ZXlJRH0iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICREYXRhe1N1cnZleUlEfSAgICAgICAgICAgID0gJFJvd1swXTsKICAgICAgICAkRGF0YXtTdXJ2ZXlOdW1iZXJ9ICAgICAgICA9ICRSb3dbMV07CiAgICAgICAgJERhdGF7VGl0bGV9ICAgICAgICAgICAgICAgPSAkUm93WzJdOwogICAgICAgICREYXRhe0ludHJvZHVjdGlvbn0gICAgICAgID0gJFJvd1szXTsKICAgICAgICAkRGF0YXtEZXNjcmlwdGlvbn0gICAgICAgICA9ICRSb3dbNF07CiAgICAgICAgJERhdGF7Tm90aWZpY2F0aW9uU2VuZGVyfSAgPSAkUm93WzVdOwogICAgICAgICREYXRhe05vdGlmaWNhdGlvblN1YmplY3R9ID0gJFJvd1s2XTsKICAgICAgICAkRGF0YXtOb3RpZmljYXRpb25Cb2R5fSAgICA9ICRSb3dbN107CiAgICAgICAgJERhdGF7U3RhdHVzfSAgICAgICAgICAgICAgPSAkUm93WzhdOwogICAgICAgICREYXRhe0NyZWF0ZVRpbWV9ICAgICAgICAgID0gJFJvd1s5XTsKICAgICAgICAkRGF0YXtDcmVhdGVCeX0gICAgICAgICAgICA9ICRSb3dbMTBdOwogICAgICAgICREYXRhe0NoYW5nZVRpbWV9ICAgICAgICAgID0gJFJvd1sxMV07CiAgICAgICAgJERhdGF7Q2hhbmdlQnl9ICAgICAgICAgICAgPSAkUm93WzEyXTsKICAgIH0KCiAgICBpZiAoICElRGF0YSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHN1Y2ggU3VydmV5SUQgJFBhcmFte1N1cnZleUlEfSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgdmFsdWVzCiAgICAkRGF0YXtOb3RpZmljYXRpb25TZW5kZXJ9ICB8fD0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1N1cnZleTo6Tm90aWZpY2F0aW9uU2VuZGVyJyk7CiAgICAkRGF0YXtOb3RpZmljYXRpb25TdWJqZWN0fSB8fD0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1N1cnZleTo6Tm90aWZpY2F0aW9uU3ViamVjdCcpOwogICAgJERhdGF7Tm90aWZpY2F0aW9uQm9keX0gICAgfHw9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdTdXJ2ZXk6Ok5vdGlmaWNhdGlvbkJvZHknKTsKCiAgICAjIGdldCBxdWV1ZXMKICAgICREYXRhe1F1ZXVlc30gPSAkU2VsZi0+U3VydmV5UXVldWVHZXQoCiAgICAgICAgU3VydmV5SUQgPT4gJFBhcmFte1N1cnZleUlEfSwKICAgICk7CgogICAgIyBhZGRlZCBDcmVhdGVCeQogICAgaWYgKCAhJFBhcmFte1B1YmxpY30gKSB7CiAgICAgICAgbXkgJUNyZWF0ZVVzZXJJbmZvID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkRGF0YXtDcmVhdGVCeX0sCiAgICAgICAgICAgIENhY2hlZCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJERhdGF7Q3JlYXRlVXNlckxvZ2lufSAgICAgPSAkQ3JlYXRlVXNlckluZm97VXNlckxvZ2lufTsKICAgICAgICAkRGF0YXtDcmVhdGVVc2VyRmlyc3RuYW1lfSA9ICRDcmVhdGVVc2VySW5mb3tVc2VyRmlyc3RuYW1lfTsKICAgICAgICAkRGF0YXtDcmVhdGVVc2VyTGFzdG5hbWV9ICA9ICRDcmVhdGVVc2VySW5mb3tVc2VyTGFzdG5hbWV9OwoKICAgICAgICAjIGFkZGVkIENoYW5nZUJ5CiAgICAgICAgbXkgJUNoYW5nZVVzZXJJbmZvID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkRGF0YXtDaGFuZ2VCeX0sCiAgICAgICAgICAgIENhY2hlZCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJERhdGF7Q2hhbmdlVXNlckxvZ2lufSAgICAgPSAkQ2hhbmdlVXNlckluZm97VXNlckxvZ2lufTsKICAgICAgICAkRGF0YXtDaGFuZ2VVc2VyRmlyc3RuYW1lfSA9ICRDaGFuZ2VVc2VySW5mb3tVc2VyRmlyc3RuYW1lfTsKICAgICAgICAkRGF0YXtDaGFuZ2VVc2VyTGFzdG5hbWV9ICA9ICRDaGFuZ2VVc2VySW5mb3tVc2VyTGFzdG5hbWV9OwogICAgfQoKICAgIHJldHVybiAlRGF0YTsKfQoKPWl0ZW0gU3VydmV5U3RhdHVzU2V0KCkKCnRvIHNldCBhIG5ldyBzdXJ2ZXkgc3RhdHVzIChWYWxpZCwgSW52YWxpZCwgTWFzdGVyKQoKICAgICRTdGF0dXNTZXQgPSAkU3VydmV5T2JqZWN0LT5TdXJ2ZXlTdGF0dXNTZXQoCiAgICAgICAgU3VydmV5SUQgID0+IDEyMywKICAgICAgICBOZXdTdGF0dXMgPT4gJ01hc3RlcicKICAgICk7Cgo9Y3V0CgpzdWIgU3VydmV5U3RhdHVzU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFN1cnZleUlEIE5ld1N0YXR1cykpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte05ld1N0YXR1c30gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtOZXdTdGF0dXN9ICk7CiAgICAkUGFyYW17U3VydmV5SUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17U3VydmV5SUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGdldCBjdXJyZW50IHN0YXR1cwogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gIlNFTEVDVCBzdGF0dXMgRlJPTSBzdXJ2ZXkgV0hFUkUgaWQgPSAkUGFyYW17U3VydmV5SUR9IiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRTdGF0dXMgPSAnJzsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFN0YXR1cyA9ICRSb3dbMF07CiAgICB9CgogICAgIyB0aGUgY3VyZW50IHN0YXR1cwogICAgaWYgKCAkU3RhdHVzIGVxICdOZXcnIHx8ICRTdGF0dXMgZXEgJ0ludmFsaWQnICkgewoKICAgICAgICAjIGdldCB0aGUgcXVlc3Rpb24gaWRzCiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgID0+ICJTRUxFQ1QgaWQgRlJPTSBzdXJ2ZXlfcXVlc3Rpb24gV0hFUkUgc3VydmV5X2lkID0gJFBhcmFte1N1cnZleUlEfSIsCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICAgICAgbXkgJFF1ZXN0OwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRRdWVzdCA9ICRSb3dbMF07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJ05vUXVlc3Rpb24nIGlmICEkUXVlc3Q7CgogICAgICAgICMgZ2V0IGFsbCBxdWVzdGlvbnMgKHR5cGUgcmFkaW8gYW5kIGNoZWNrYm94KQogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCBGUk9NIHN1cnZleV9xdWVzdGlvbiIKICAgICAgICAgICAgICAgIC4gIiBXSEVSRSBzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9IEFORCAiCiAgICAgICAgICAgICAgICAuICIocXVlc3Rpb25fdHlwZSA9ICdSYWRpbycgT1IgcXVlc3Rpb25fdHlwZSA9ICdDaGVja2JveCcpIiwKICAgICAgICApOwoKICAgICAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgICAgICBteSBAUXVlc3Rpb25JRHM7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgcHVzaCggQFF1ZXN0aW9uSURzLCAkUm93WzBdICk7CiAgICAgICAgfQogICAgICAgIGZvciBteSAkT25lSUQgKEBRdWVzdGlvbklEcykgewoKICAgICAgICAgICAgIyBnZXQgYWxsIGFuc3dlciBpZHMgb2YgYSBxdWVzdGlvbgogICAgICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgICAgIFNRTCAgID0+ICJTRUxFQ1QgQ09VTlQoaWQpIEZST00gc3VydmV5X2Fuc3dlciBXSEVSRSBxdWVzdGlvbl9pZCA9ICRPbmVJRCIsCiAgICAgICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICAgICAgICAgIG15ICRDb3VudGVyOwogICAgICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAgICAgJENvdW50ZXIgPSAkUm93WzBdOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJ0luY29tcGxldGVRdWVzdGlvbicgaWYgJENvdW50ZXIgPCAyOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgbmV3IHN0YXR1cwogICAgICAgIGlmICggJFBhcmFte05ld1N0YXR1c30gZXEgJ01hc3RlcicgKSB7CiAgICAgICAgICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleSBTRVQgc3RhdHVzID0gJ1ZhbGlkJyBXSEVSRSBzdGF0dXMgPSAnTWFzdGVyJyIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGlmICggJFBhcmFte05ld1N0YXR1c30gZXEgJ1ZhbGlkJyB8fCAkUGFyYW17TmV3U3RhdHVzfSBlcSAnTWFzdGVyJyApIHsKICAgICAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5IFNFVCBzdGF0dXMgPSAnJFBhcmFte05ld1N0YXR1c30nICIKICAgICAgICAgICAgICAgICAgICAuICJXSEVSRSBpZCA9ICRQYXJhbXtTdXJ2ZXlJRH0iLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gJ1N0YXR1c1NldCc7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkU3RhdHVzIGVxICdWYWxpZCcgKSB7CgogICAgICAgICMgc2V0IHN0YXR1cyBNYXN0ZXIKICAgICAgICBpZiAoICRQYXJhbXtOZXdTdGF0dXN9IGVxICdNYXN0ZXInICkgewogICAgICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXkgU0VUIHN0YXR1cyA9ICdWYWxpZCcgV0hFUkUgc3RhdHVzID0gJ01hc3RlciciLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXkgU0VUIHN0YXR1cyA9ICdNYXN0ZXInIFdIRVJFIGlkID0gJFBhcmFte1N1cnZleUlEfSIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiAnU3RhdHVzU2V0JzsKICAgICAgICB9CgogICAgICAgICMgc2V0IHN0YXR1cyBJbnZhbGlkCiAgICAgICAgZWxzaWYgKCAkUGFyYW17TmV3U3RhdHVzfSBlcSAnSW52YWxpZCcgKSB7CiAgICAgICAgICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleSBTRVQgc3RhdHVzID0gJ0ludmFsaWQnIFdIRVJFIGlkID0gJFBhcmFte1N1cnZleUlEfSIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiAnU3RhdHVzU2V0JzsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRTdGF0dXMgZXEgJ01hc3RlcicgKSB7CgogICAgICAgICMgc2V0IHN0YXR1cyBWYWxpZAogICAgICAgIGlmICggJFBhcmFte05ld1N0YXR1c30gZXEgJ1ZhbGlkJyB8fCAkUGFyYW17TmV3U3RhdHVzfSBlcSAnSW52YWxpZCcgKSB7CiAgICAgICAgICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleSBTRVQgc3RhdHVzID0gJyRQYXJhbXtOZXdTdGF0dXN9JyAiCiAgICAgICAgICAgICAgICAgICAgLiAiV0hFUkUgaWQgPSAkUGFyYW17U3VydmV5SUR9IiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICdTdGF0dXNTZXQnOwogICAgICAgIH0KICAgIH0KfQoKPWl0ZW0gU3VydmV5U2F2ZSgpCgp0byB1cGRhdGUgYW4gZXhpc3Rpbmcgc3VydmV5CgogICAgJFN1cnZleU9iamVjdC0+U3VydmV5U2F2ZSgKICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgU3VydmV5SUQgICAgICAgICAgICA9PiA0LAogICAgICAgIFRpdGxlICAgICAgICAgICAgICAgPT4gJ0EgVGl0bGUnLAogICAgICAgIEludHJvZHVjdGlvbiAgICAgICAgPT4gJ1RoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIHN1cnZleScsCiAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICA9PiAnVGhlIGludGVybmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBzdXJ2ZXknLAogICAgICAgIE5vdGlmaWNhdGlvblNlbmRlciAgPT4gJ3F1YWxpdHlAZXhhbXBsZS5jb20nLAogICAgICAgIE5vdGlmaWNhdGlvblN1YmplY3QgPT4gJ0hlbHAgdXMgd2l0aCB5b3VyIGZlZWRiYWNrIScsCiAgICAgICAgTm90aWZpY2F0aW9uQm9keSAgICA9PiAnRGVhciBjdXN0b21lci4uLicsCiAgICAgICAgUXVldWVzICAgICAgICAgICAgICA9PiBbMiwgNSwgOV0sICAjIChvcHRpb25hbCkgc3VydmV5IGlzIHZhbGlkIGZvciB0aGVzZSBxdWV1ZXMKICAgICk7Cgo9Y3V0CgpzdWIgU3VydmV5U2F2ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50ICgKICAgICAgICBxdygKICAgICAgICBVc2VySUQgU3VydmV5SUQgVGl0bGUgSW50cm9kdWN0aW9uIERlc2NyaXB0aW9uCiAgICAgICAgTm90aWZpY2F0aW9uU2VuZGVyIE5vdGlmaWNhdGlvblN1YmplY3QgTm90aWZpY2F0aW9uQm9keQogICAgICAgICkKICAgICAgICApCiAgICB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgcXVldWVzCiAgICBpZiAoICRQYXJhbXtRdWV1ZXN9ICYmIHJlZiAkUGFyYW17UXVldWVzfSBuZSAnQVJSQVknICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnUXVldWVzIG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlLicsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZQogICAgJFBhcmFte1F1ZXVlc30gfHw9IFtdOwoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKAogICAgICAgIHF3KAogICAgICAgIFRpdGxlIEludHJvZHVjdGlvbiBEZXNjcmlwdGlvbgogICAgICAgIE5vdGlmaWNhdGlvblNlbmRlciBOb3RpZmljYXRpb25TdWJqZWN0IE5vdGlmaWNhdGlvbkJvZHkKICAgICAgICApCiAgICAgICAgKQogICAgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSApOwogICAgfQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIFN1cnZleUlEKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgIyB1cGRhdGUgdGhlIHN1cnZleQogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5IFNFVCAiCiAgICAgICAgICAgIC4gInRpdGxlID0gJyRQYXJhbXtUaXRsZX0nLCAiCiAgICAgICAgICAgIC4gImludHJvZHVjdGlvbiA9ICckUGFyYW17SW50cm9kdWN0aW9ufScsICIKICAgICAgICAgICAgLiAiZGVzY3JpcHRpb24gPSAnJFBhcmFte0Rlc2NyaXB0aW9ufScsICIKICAgICAgICAgICAgLiAibm90aWZpY2F0aW9uX3NlbmRlciA9ICckUGFyYW17Tm90aWZpY2F0aW9uU2VuZGVyfScsICIKICAgICAgICAgICAgLiAibm90aWZpY2F0aW9uX3N1YmplY3QgPSAnJFBhcmFte05vdGlmaWNhdGlvblN1YmplY3R9JywgIgogICAgICAgICAgICAuICJub3RpZmljYXRpb25fYm9keSA9ICckUGFyYW17Tm90aWZpY2F0aW9uQm9keX0nLCAiCiAgICAgICAgICAgIC4gImNoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsICIKICAgICAgICAgICAgLiAiY2hhbmdlX2J5ID0gJFBhcmFte1VzZXJJRH0gIgogICAgICAgICAgICAuICJXSEVSRSBpZCA9ICRQYXJhbXtTdXJ2ZXlJRH0iLAogICAgKTsKCiAgICAjIGluc2VydCBuZXcgc3VydmV5LXF1ZXVlIHJlbGF0aW9ucwogICAgcmV0dXJuICRTZWxmLT5TdXJ2ZXlRdWV1ZVNhdmUoCiAgICAgICAgU3VydmV5SUQgPT4gJFBhcmFte1N1cnZleUlEfSwKICAgICAgICBRdWV1ZUlEcyA9PiAkUGFyYW17UXVldWVzfSwKICAgICk7Cn0KCj1pdGVtIFN1cnZleU5ldygpCgp0byBhZGQgYSBuZXcgc3VydmV5CgogICAgbXkgJFN1cnZleUlEID0gJFN1cnZleU9iamVjdC0+U3VydmV5TmV3KAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBUaXRsZSAgICAgICAgICAgICAgID0+ICdBIFRpdGxlJywKICAgICAgICBJbnRyb2R1Y3Rpb24gICAgICAgID0+ICdUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBzdXJ2ZXknLAogICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgPT4gJ1RoZSBpbnRlcm5hbCBkZXNjcmlwdGlvbiBvZiB0aGUgc3VydmV5JywKICAgICAgICBOb3RpZmljYXRpb25TZW5kZXIgID0+ICdxdWFsaXR5QGV4YW1wbGUuY29tJywKICAgICAgICBOb3RpZmljYXRpb25TdWJqZWN0ID0+ICdIZWxwIHVzIHdpdGggeW91ciBmZWVkYmFjayEnLAogICAgICAgIE5vdGlmaWNhdGlvbkJvZHkgICAgPT4gJ0RlYXIgY3VzdG9tZXIuLi4nLAogICAgICAgIFF1ZXVlcyAgICAgICAgICAgICAgPT4gWzIsIDUsIDldLCAgIyAob3B0aW9uYWwpIHN1cnZleSBpcyB2YWxpZCBmb3IgdGhlc2UgcXVldWVzCiAgICApOwoKPWN1dAoKc3ViIFN1cnZleU5ldyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50ICgKICAgICAgICBxdygKICAgICAgICBVc2VySUQgVGl0bGUgSW50cm9kdWN0aW9uIERlc2NyaXB0aW9uCiAgICAgICAgTm90aWZpY2F0aW9uU2VuZGVyIE5vdGlmaWNhdGlvblN1YmplY3QgTm90aWZpY2F0aW9uQm9keQogICAgICAgICkKICAgICAgICApCiAgICB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKAogICAgICAgIHF3KAogICAgICAgIFRpdGxlIEludHJvZHVjdGlvbiBEZXNjcmlwdGlvbgogICAgICAgIE5vdGlmaWNhdGlvblNlbmRlciBOb3RpZmljYXRpb25TdWJqZWN0IE5vdGlmaWNhdGlvbkJvZHkKICAgICAgICApCiAgICAgICAgKQogICAgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSApOwogICAgfQogICAgJFBhcmFte1VzZXJJRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtVc2VySUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGluc2VydCBhIG5ldyBzdXJ2ZXkKICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIklOU0VSVCBJTlRPIHN1cnZleSAodGl0bGUsIGludHJvZHVjdGlvbiwgZGVzY3JpcHRpb24sIgogICAgICAgICAgICAuICIgbm90aWZpY2F0aW9uX3NlbmRlciwgbm90aWZpY2F0aW9uX3N1YmplY3QsIG5vdGlmaWNhdGlvbl9ib2R5LCIKICAgICAgICAgICAgLiAiIHN0YXR1cywgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSIKICAgICAgICAgICAgLiAiKSBWQUxVRVMgKCIKICAgICAgICAgICAgLiAiJyRQYXJhbXtUaXRsZX0nLCAiCiAgICAgICAgICAgIC4gIickUGFyYW17SW50cm9kdWN0aW9ufScsICIKICAgICAgICAgICAgLiAiJyRQYXJhbXtEZXNjcmlwdGlvbn0nLCAiCiAgICAgICAgICAgIC4gIickUGFyYW17Tm90aWZpY2F0aW9uU2VuZGVyfScsICIKICAgICAgICAgICAgLiAiJyRQYXJhbXtOb3RpZmljYXRpb25TdWJqZWN0fScsICIKICAgICAgICAgICAgLiAiJyRQYXJhbXtOb3RpZmljYXRpb25Cb2R5fScsICIKICAgICAgICAgICAgLiAiJ05ldycsICIKICAgICAgICAgICAgLiAiY3VycmVudF90aW1lc3RhbXAsICIKICAgICAgICAgICAgLiAiJFBhcmFte1VzZXJJRH0sICIKICAgICAgICAgICAgLiAiY3VycmVudF90aW1lc3RhbXAsICIKICAgICAgICAgICAgLiAiJFBhcmFte1VzZXJJRH0pIiwKICAgICk7CgogICAgIyBnZXQgdGhlIGlkIG9mIHRoZSBzdXJ2ZXkKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkIEZST00gc3VydmV5IFdIRVJFICIKICAgICAgICAgICAgLiAidGl0bGUgPSAnJFBhcmFte1RpdGxlfScgQU5EICIKICAgICAgICAgICAgLiAiaW50cm9kdWN0aW9uID0gJyRQYXJhbXtJbnRyb2R1Y3Rpb259JyBBTkQgIgogICAgICAgICAgICAuICJkZXNjcmlwdGlvbiA9ICckUGFyYW17RGVzY3JpcHRpb259JyAiCiAgICAgICAgICAgIC4gIk9SREVSIEJZIGlkIERFU0MiLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFN1cnZleUlEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU3VydmV5SUQgPSAkUm93WzBdOwogICAgfQoKICAgICMgc2V0IHRoZSBzdXJ2ZXkgbnVtYmVyCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5IFNFVCAiCiAgICAgICAgICAgIC4gInN1cnZleW51bWJlciA9ICciCiAgICAgICAgICAgIC4gKCAkU3VydmV5SUQgKyAxMDAwMCApIC4gIicgIgogICAgICAgICAgICAuICJXSEVSRSBpZCA9ICRTdXJ2ZXlJRCIKICAgICk7CgogICAgcmV0dXJuICRTdXJ2ZXlJRCBpZiAhJFBhcmFte1F1ZXVlc307CiAgICByZXR1cm4gJFN1cnZleUlEIGlmIHJlZiAkUGFyYW17UXVldWVzfSBuZSAnQVJSQVknOwoKICAgICMgaW5zZXJ0IG5ldyBzdXJ2ZXktcXVldWUgcmVsYXRpb25zCiAgICAkU2VsZi0+U3VydmV5UXVldWVTYXZlKAogICAgICAgIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCwKICAgICAgICBRdWV1ZUlEcyA9PiAkUGFyYW17UXVldWVzfSwKICAgICk7CgogICAgcmV0dXJuICRTdXJ2ZXlJRDsKfQoKPWl0ZW0gUXVlc3Rpb25MaXN0KCkKCnRvIGdldCBhIGFycmF5IGxpc3Qgb2YgYWxsIHF1ZXN0aW9uIGl0ZW1zCgogICAgbXkgQExpc3QgPSAkU3VydmV5T2JqZWN0LT5RdWVzdGlvbkxpc3QoCiAgICAgICAgU3VydmV5SUQgPT4gMQogICAgKTsKCj1jdXQKCnN1YiBRdWVzdGlvbkxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1N1cnZleUlEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU3VydmV5SUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17U3VydmV5SUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17U3VydmV5SUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGdldCBhbGwgcXVlc3Rpb25zIG9mIGEgc3VydmV5CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCwgc3VydmV5X2lkLCBxdWVzdGlvbiwgcXVlc3Rpb25fdHlwZSAiCiAgICAgICAgICAgIC4gIiBGUk9NIHN1cnZleV9xdWVzdGlvbiBXSEVSRSBzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9IE9SREVSIEJZIHBvc2l0aW9uIiwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBATGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJURhdGE7CiAgICAgICAgJERhdGF7UXVlc3Rpb25JRH0gPSAkUm93WzBdOwogICAgICAgICREYXRhe1N1cnZleUlEfSAgID0gJFJvd1sxXTsKICAgICAgICAkRGF0YXtRdWVzdGlvbn0gICA9ICRSb3dbMl07CiAgICAgICAgJERhdGF7VHlwZX0gICAgICAgPSAkUm93WzNdOwoKICAgICAgICBwdXNoIEBMaXN0LCBcJURhdGE7CiAgICB9CgogICAgcmV0dXJuIEBMaXN0Owp9Cgo9aXRlbSBRdWVzdGlvbkFkZCgpCgp0byBhZGQgYSBuZXcgcXVlc3Rpb24gdG8gYSBzdXJ2ZXkKCiAgICAkU3VydmV5T2JqZWN0LT5RdWVzdGlvbkFkZCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICBTdXJ2ZXlJRCA9PiAxMCwKICAgICAgICBRdWVzdGlvbiA9PiAnVGhlIFF1ZXN0aW9uJywKICAgICAgICBUeXBlID0+ICdSYWRpbycsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXN0aW9uQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBTdXJ2ZXlJRCBRdWVzdGlvbiBUeXBlKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFF1ZXN0aW9uIFR5cGUpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9ICk7CiAgICB9CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgU3VydmV5SUQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICByZXR1cm4gaWYgISRQYXJhbXtRdWVzdGlvbn07CgogICAgIyBpbnNlcnQgYSBuZXcgcXVlc3Rpb24KICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJJTlNFUlQgSU5UTyBzdXJ2ZXlfcXVlc3Rpb24gKHN1cnZleV9pZCwgcXVlc3Rpb24sIHF1ZXN0aW9uX3R5cGUsICIKICAgICAgICAgICAgLiAicG9zaXRpb24sIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpIFZBTFVFUyAoIgogICAgICAgICAgICAuICIkUGFyYW17U3VydmV5SUR9LCAiCiAgICAgICAgICAgIC4gIickUGFyYW17UXVlc3Rpb259JywgIgogICAgICAgICAgICAuICInJFBhcmFte1R5cGV9JywgMjU1LCAiCiAgICAgICAgICAgIC4gImN1cnJlbnRfdGltZXN0YW1wLCAiCiAgICAgICAgICAgIC4gIiRQYXJhbXtVc2VySUR9LCAiCiAgICAgICAgICAgIC4gImN1cnJlbnRfdGltZXN0YW1wLCAiCiAgICAgICAgICAgIC4gIiRQYXJhbXtVc2VySUR9KSIsCiAgICApOwp9Cgo9aXRlbSBRdWVzdGlvbkRlbGV0ZSgpCgp0byBkZWxldGUgYSBxdWVzdGlvbiBmcm9tIGEgc3VydmV5CgogICAgJFN1cnZleU9iamVjdC0+UXVlc3Rpb25EZWxldGUoCiAgICAgICAgU3VydmV5SUQgPT4gMSwKICAgICAgICBRdWVzdGlvbklEID0+IDEwLAogICAgKTsKCj1jdXQKCnN1YiBRdWVzdGlvbkRlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTdXJ2ZXlJRCBRdWVzdGlvbklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTdXJ2ZXlJRCBRdWVzdGlvbklEKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgIyBkZWxldGUgYWxsIGFuc3dlcnMgb2YgYSBxdWVzdGlvbgogICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc3VydmV5X2Fuc3dlciBXSEVSRSBxdWVzdGlvbl9pZCA9ICRQYXJhbXtRdWVzdGlvbklEfSIsCiAgICApOwoKICAgICMgZGVsZXRlIHRoZSBxdWVzdGlvbgogICAgcmV0dXJuICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHN1cnZleV9xdWVzdGlvbiBXSEVSRSAiCiAgICAgICAgICAgIC4gImlkID0gJFBhcmFte1F1ZXN0aW9uSUR9IEFORCAiCiAgICAgICAgICAgIC4gInN1cnZleV9pZCA9ICRQYXJhbXtTdXJ2ZXlJRH0iLAogICAgKTsKfQoKPWl0ZW0gUXVlc3Rpb25Tb3J0KCkKCnRvIHNvcnQgYWxsIHF1ZXN0aW9ucyBmcm9tIGEgc3VydmV5CgogICAgJFN1cnZleU9iamVjdC0+UXVlc3Rpb25Tb3J0KAogICAgICAgIFN1cnZleUlEID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXN0aW9uU29ydCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U3VydmV5SUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTdXJ2ZXlJRCEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte1N1cnZleUlEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1N1cnZleUlEfSwgJ0ludGVnZXInICk7CgogICAgIyBnZXQgYWxsIHF1ZXN0aW9uIG9mIGEgc3VydmV5IChzb3J0ZWQgYnkgcG9zaXRpb24pCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCBGUk9NIHN1cnZleV9xdWVzdGlvbiIKICAgICAgICAgICAgLiAiIFdIRVJFIHN1cnZleV9pZCA9ICRQYXJhbXtTdXJ2ZXlJRH0gT1JERVIgQlkgcG9zaXRpb24iLAogICAgKTsKCiAgICBteSBATGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBATGlzdCwgJFJvd1swXTsKICAgIH0KCiAgICBteSAkQ291bnRlciA9IDE7CiAgICBmb3IgbXkgJFF1ZXN0aW9uSUQgKEBMaXN0KSB7CiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXlfcXVlc3Rpb24gU0VUIHBvc2l0aW9uID0gJENvdW50ZXIgV0hFUkUgaWQgPSAkUXVlc3Rpb25JRCIsCiAgICAgICAgKTsKICAgIH0KICAgIGNvbnRpbnVlIHsKICAgICAgICAkQ291bnRlcisrOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBRdWVzdGlvblVwKCkKCnRvIG1vdmUgYSBxdWVzdGlvbiB1cAoKICAgICRTdXJ2ZXlPYmplY3QtPlF1ZXN0aW9uVXAoCiAgICAgICAgU3VydmV5SUQgPT4gMSwKICAgICAgICBRdWVzdGlvbklEID0+IDQsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXN0aW9uVXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU3VydmV5SUQgUXVlc3Rpb25JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU3VydmV5SUQgUXVlc3Rpb25JRCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0sICdJbnRlZ2VyJyApOwogICAgfQoKICAgICMgZ2V0IHBvc2l0aW9uCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBwb3NpdGlvbiBGUk9NIHN1cnZleV9xdWVzdGlvbiIKICAgICAgICAgICAgLiAiIFdIRVJFIGlkID0gJFBhcmFte1F1ZXN0aW9uSUR9IEFORCBzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9IiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRQb3NpdGlvbiA9IDA7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRQb3NpdGlvbiA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIGlmICRQb3NpdGlvbiA8IDI7CgogICAgbXkgJFBvc2l0aW9uVXAgPSAkUG9zaXRpb24gLSAxOwoKICAgICMgZ2V0IHF1ZXN0aW9uCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCBGUk9NIHN1cnZleV9xdWVzdGlvbiIKICAgICAgICAgICAgLiAiIFdIRVJFIHN1cnZleV9pZCA9ICRQYXJhbXtTdXJ2ZXlJRH0gQU5EIHBvc2l0aW9uID0gJFBvc2l0aW9uVXAiLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFF1ZXN0aW9uSUREb3duOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkUXVlc3Rpb25JRERvd24gPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBpZiAhJFF1ZXN0aW9uSUREb3duOwoKICAgICMgdXBkYXRlIHBvc2l0aW9uCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5X3F1ZXN0aW9uIFNFVCAiCiAgICAgICAgICAgIC4gInBvc2l0aW9uID0gJFBvc2l0aW9uICIKICAgICAgICAgICAgLiAiV0hFUkUgaWQgPSAkUXVlc3Rpb25JRERvd24iLAogICAgKTsKCiAgICAjIHVwZGF0ZSBwb3NpdGlvbgogICAgcmV0dXJuICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXlfcXVlc3Rpb24gU0VUICIKICAgICAgICAgICAgLiAicG9zaXRpb24gPSAkUG9zaXRpb25VcCAiCiAgICAgICAgICAgIC4gIldIRVJFIGlkID0gJFBhcmFte1F1ZXN0aW9uSUR9IiwKICAgICk7Cn0KCj1pdGVtIFF1ZXN0aW9uRG93bigpCgp0byBtb3ZlIGEgcXVlc3Rpb24gZG93bgoKICAgICRTdXJ2ZXlPYmplY3QtPlF1ZXN0aW9uRG93bigKICAgICAgICBTdXJ2ZXlJRCA9PiAxLAogICAgICAgIFF1ZXN0aW9uSUQgPT4gNCwKICAgICk7Cgo9Y3V0CgpzdWIgUXVlc3Rpb25Eb3duIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFN1cnZleUlEIFF1ZXN0aW9uSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFN1cnZleUlEIFF1ZXN0aW9uSUQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICAjIGdldCBwb3NpdGlvbgogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgcG9zaXRpb24gRlJPTSBzdXJ2ZXlfcXVlc3Rpb24iCiAgICAgICAgICAgIC4gIiBXSEVSRSBpZCA9ICRQYXJhbXtRdWVzdGlvbklEfSBBTkQgc3VydmV5X2lkID0gJFBhcmFte1N1cnZleUlEfSIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkUG9zaXRpb247CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRQb3NpdGlvbiA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIGlmICEkUG9zaXRpb247CgogICAgbXkgJFBvc2l0aW9uRG93biA9ICRQb3NpdGlvbiArIDE7CgogICAgIyBnZXQgcXVlc3Rpb24KICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkIEZST00gc3VydmV5X3F1ZXN0aW9uIgogICAgICAgICAgICAuICIgV0hFUkUgc3VydmV5X2lkID0gJFBhcmFte1N1cnZleUlEfSBBTkQgcG9zaXRpb24gPSAkUG9zaXRpb25Eb3duIiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRRdWVzdGlvbklEVXA7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRRdWVzdGlvbklEVXAgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBpZiAhJFF1ZXN0aW9uSURVcDsKCiAgICAjIHVwZGF0ZSBwb3NpdGlvbgogICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleV9xdWVzdGlvbiBTRVQgIgogICAgICAgICAgICAuICJwb3NpdGlvbiA9ICRQb3NpdGlvbiAiCiAgICAgICAgICAgIC4gIldIRVJFIGlkID0gJFF1ZXN0aW9uSURVcCIsCiAgICApOwoKICAgICMgdXBkYXRlIHBvc2l0aW9uCiAgICByZXR1cm4gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleV9xdWVzdGlvbiBTRVQgIgogICAgICAgICAgICAuICJwb3NpdGlvbiA9ICRQb3NpdGlvbkRvd24gIgogICAgICAgICAgICAuICJXSEVSRSBpZCA9ICRQYXJhbXtRdWVzdGlvbklEfSIsCiAgICApOwp9Cgo9aXRlbSBRdWVzdGlvbkdldCgpCgp0byBnZXQgYWxsIGF0dHJpYnV0ZXMgb2YgYSBxdWVzdGlvbgoKICAgIG15ICVRdWVzdGlvbiA9ICRTdXJ2ZXlPYmplY3QtPlF1ZXN0aW9uR2V0KAogICAgICAgIFF1ZXN0aW9uSUQgPT4gMTIzCiAgICApOwoKPWN1dAoKc3ViIFF1ZXN0aW9uR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtRdWVzdGlvbklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgUXVlc3Rpb25JRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtRdWVzdGlvbklEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1F1ZXN0aW9uSUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGdldCBxdWVzdGlvbgogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQsIHN1cnZleV9pZCwgcXVlc3Rpb24sIHF1ZXN0aW9uX3R5cGUsIHBvc2l0aW9uLCAiCiAgICAgICAgICAgIC4gImNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkgIgogICAgICAgICAgICAuICJGUk9NIHN1cnZleV9xdWVzdGlvbiBXSEVSRSBpZCA9ICRQYXJhbXtRdWVzdGlvbklEfSIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJERhdGF7UXVlc3Rpb25JRH0gPSAkUm93WzBdOwogICAgICAgICREYXRhe1N1cnZleUlEfSAgID0gJFJvd1sxXTsKICAgICAgICAkRGF0YXtRdWVzdGlvbn0gICA9ICRSb3dbMl07CiAgICAgICAgJERhdGF7VHlwZX0gICAgICAgPSAkUm93WzNdOwogICAgICAgICREYXRhe1Bvc2l0aW9ufSAgID0gJFJvd1s0XTsKICAgICAgICAkRGF0YXtDcmVhdGVUaW1lfSA9ICRSb3dbNV07CiAgICAgICAgJERhdGF7Q3JlYXRlQnl9ICAgPSAkUm93WzZdOwogICAgICAgICREYXRhe0NoYW5nZVRpbWV9ID0gJFJvd1s3XTsKICAgICAgICAkRGF0YXtDaGFuZ2VCeX0gICA9ICRSb3dbOF07CiAgICB9CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBRdWVzdGlvblNhdmUoKQoKdG8gdXBkYXRlIGFuIGV4aXN0aW5nIHF1ZXN0aW9uCgogICAgJFN1cnZleU9iamVjdC0+UXVlc3Rpb25TYXZlKAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgIFF1ZXN0aW9uSUQgPT4gNCwKICAgICAgICBTdXJ2ZXlJRCA9PiAzLAogICAgICAgIFF1ZXN0aW9uID0+ICdUaGUgUXVlc3Rpb24nLAogICAgKTsKCj1jdXQKCnN1YiBRdWVzdGlvblNhdmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIFF1ZXN0aW9uSUQgU3VydmV5SUQgUXVlc3Rpb24pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFF1ZXN0aW9uKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSApOwogICAgfQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIFF1ZXN0aW9uSUQgU3VydmV5SUQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICAjIHVwZGF0ZSBxdWVzdGlvbgogICAgcmV0dXJuICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXlfcXVlc3Rpb24gU0VUICIKICAgICAgICAgICAgLiAicXVlc3Rpb24gPSAnJFBhcmFte1F1ZXN0aW9ufScsICIKICAgICAgICAgICAgLiAiY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgIgogICAgICAgICAgICAuICJjaGFuZ2VfYnkgPSAkUGFyYW17VXNlcklEfSAiCiAgICAgICAgICAgIC4gIldIRVJFIGlkID0gJFBhcmFte1F1ZXN0aW9uSUR9ICIKICAgICAgICAgICAgLiAiQU5EIHN1cnZleV9pZCA9ICRQYXJhbXtTdXJ2ZXlJRH0iLAogICAgKTsKfQoKPWl0ZW0gUXVlc3Rpb25Db3VudCgpCgp0byBjb3VudCBhbGwgcXVlc3Rpb25zIG9mIGEgc3VydmV5CgogICAgbXkgJENvdW50UXVlc3Rpb24gPSAkU3VydmV5T2JqZWN0LT5RdWVzdGlvbkNvdW50KAogICAgICAgIFN1cnZleUlEID0+IDEyMwogICAgKTsKCj1jdXQKCnN1YiBRdWVzdGlvbkNvdW50IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtTdXJ2ZXlJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFN1cnZleUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte1N1cnZleUlEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1N1cnZleUlEfSwgJ0ludGVnZXInICk7CgogICAgIyBjb3VudCBxdWVzdGlvbnMKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICJTRUxFQ1QgQ09VTlQoaWQpIEZST00gc3VydmV5X3F1ZXN0aW9uIFdIRVJFIHN1cnZleV9pZCA9ICRQYXJhbXtTdXJ2ZXlJRH0iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJENvdW50UXVlc3Rpb247CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRDb3VudFF1ZXN0aW9uID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJENvdW50UXVlc3Rpb247Cn0KCj1pdGVtIEFuc3dlckxpc3QoKQoKdG8gZ2V0IGEgYXJyYXkgbGlzdCBvZiBhbGwgYW5zd2VyIGl0ZW1zCgogICAgbXkgQExpc3QgPSAkU3VydmV5T2JqZWN0LT5BbnN3ZXJMaXN0KAogICAgICAgIFF1ZXN0aW9uSUQgPT4gMQogICAgKTsKCj1jdXQKCnN1YiBBbnN3ZXJMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtRdWVzdGlvbklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgUXVlc3Rpb25JRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtRdWVzdGlvbklEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1F1ZXN0aW9uSUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGdldCBhbnN3ZXIgbGlzdAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQsIHF1ZXN0aW9uX2lkLCBhbnN3ZXIgIgogICAgICAgICAgICAuICIgRlJPTSBzdXJ2ZXlfYW5zd2VyIFdIRVJFIHF1ZXN0aW9uX2lkID0gJFBhcmFte1F1ZXN0aW9uSUR9IE9SREVSIEJZIHBvc2l0aW9uIiwKICAgICk7CgogICAgIyBmZXRjaHQgdGhlIHJlc3VsdAogICAgbXkgQExpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG15ICVEYXRhOwogICAgICAgICREYXRhe0Fuc3dlcklEfSAgID0gJFJvd1swXTsKICAgICAgICAkRGF0YXtRdWVzdGlvbklEfSA9ICRSb3dbMV07CiAgICAgICAgJERhdGF7QW5zd2VyfSAgICAgPSAkUm93WzJdOwoKICAgICAgICBwdXNoIEBMaXN0LCBcJURhdGE7CiAgICB9CgogICAgcmV0dXJuIEBMaXN0Owp9Cgo9aXRlbSBBbnN3ZXJBZGQoKQoKdG8gYWRkIGEgbmV3IGFuc3dlciB0byBhIHF1ZXN0aW9uCgogICAgJFN1cnZleU9iamVjdC0+QW5zd2VyQWRkKAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgIFF1ZXN0aW9uSUQgPT4gMTAsCiAgICAgICAgQW5zd2VyID0+ICdUaGUgQW5zd2VyJywKICAgICk7Cgo9Y3V0CgpzdWIgQW5zd2VyQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBRdWVzdGlvbklEIEFuc3dlcikpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhBbnN3ZXIpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9ICk7CiAgICB9CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgUXVlc3Rpb25JRCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0sICdJbnRlZ2VyJyApOwogICAgfQoKICAgIHJldHVybiBpZiAhJFBhcmFte0Fuc3dlcn07CgogICAgIyBpbnNlcnQgYW5zd2VyCiAgICByZXR1cm4gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiSU5TRVJUIElOVE8gc3VydmV5X2Fuc3dlciAocXVlc3Rpb25faWQsIGFuc3dlciwgcG9zaXRpb24sICIKICAgICAgICAgICAgLiAiY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgVkFMVUVTICgiCiAgICAgICAgICAgIC4gIiRQYXJhbXtRdWVzdGlvbklEfSwgIgogICAgICAgICAgICAuICInJFBhcmFte0Fuc3dlcn0nLCAyNTUsICIKICAgICAgICAgICAgLiAiY3VycmVudF90aW1lc3RhbXAsICIKICAgICAgICAgICAgLiAiJFBhcmFte1VzZXJJRH0sICIKICAgICAgICAgICAgLiAiY3VycmVudF90aW1lc3RhbXAsICIKICAgICAgICAgICAgLiAiJFBhcmFte1VzZXJJRH0pIiwKICAgICk7Cn0KCj1pdGVtIEFuc3dlckRlbGV0ZSgpCgp0byBkZWxldGUgYSBhbnN3ZXIgZnJvbSBhIHF1ZXN0aW9uCgogICAgJFN1cnZleU9iamVjdC0+QW5zd2VyRGVsZXRlKAogICAgICAgIFF1ZXN0aW9uSUQgPT4gMTAsCiAgICAgICAgQW5zd2VySUQgPT4gNCwKICAgICk7Cgo9Y3V0CgpzdWIgQW5zd2VyRGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFF1ZXN0aW9uSUQgQW5zd2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFF1ZXN0aW9uSUQgQW5zd2VySUQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICAjIGRlbGV0ZSBhbnN3ZXIKICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzdXJ2ZXlfYW5zd2VyIFdIRVJFICIKICAgICAgICAgICAgLiAiaWQgPSAkUGFyYW17QW5zd2VySUR9IEFORCBxdWVzdGlvbl9pZCA9ICRQYXJhbXtRdWVzdGlvbklEfSIsCiAgICApOwp9Cgo9aXRlbSBBbnN3ZXJTb3J0KCkKCnRvIHNvcnQgYWxsIGFuc3dlcnMgZnJvbSBhIHF1ZXN0aW9uCgogICAgJFN1cnZleU9iamVjdC0+QW5zd2VyU29ydCgKICAgICAgICBRdWVzdGlvbklEID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEFuc3dlclNvcnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1F1ZXN0aW9uSUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBRdWVzdGlvbklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte1F1ZXN0aW9uSUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17UXVlc3Rpb25JRH0sICdJbnRlZ2VyJyApOwoKICAgICMgZ2V0IGFuc3dlciBsaXN0CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCBGUk9NIHN1cnZleV9hbnN3ZXIiCiAgICAgICAgICAgIC4gIiBXSEVSRSBxdWVzdGlvbl9pZCA9ICRQYXJhbXtRdWVzdGlvbklEfSBPUkRFUiBCWSBwb3NpdGlvbiIsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQExpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQExpc3QsICRSb3dbMF07CiAgICB9CgogICAgbXkgJENvdW50ZXIgPSAxOwogICAgZm9yIG15ICRBbnN3ZXJJRCAoQExpc3QpIHsKCiAgICAgICAgIyB1cGRhdGUgcG9zaXRpb24KICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleV9hbnN3ZXIgU0VUIHBvc2l0aW9uID0gJENvdW50ZXIgV0hFUkUgaWQgPSAkQW5zd2VySUQiLAogICAgICAgICk7CiAgICB9CiAgICBjb250aW51ZSB7CiAgICAgICAgJENvdW50ZXIrKzsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQW5zd2VyVXAoKQoKdG8gbW92ZSBhIGFuc3dlciB1cAoKICAgICRTdXJ2ZXlPYmplY3QtPkFuc3dlclVwKAogICAgICAgIFF1ZXN0aW9uSUQgPT4gNCwKICAgICAgICBBbnN3ZXJJRCA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBBbnN3ZXJVcCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhRdWVzdGlvbklEIEFuc3dlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhRdWVzdGlvbklEIEFuc3dlcklEKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgIyBnZXQgcG9zaXRpb24KICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIHBvc2l0aW9uIEZST00gc3VydmV5X2Fuc3dlciIKICAgICAgICAgICAgLiAiIFdIRVJFIGlkID0gJFBhcmFte0Fuc3dlcklEfSBBTkQgcXVlc3Rpb25faWQgPSAkUGFyYW17UXVlc3Rpb25JRH0iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFBvc2l0aW9uOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkUG9zaXRpb24gPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBpZiAkUG9zaXRpb24gPCAyOwoKICAgIG15ICRQb3NpdGlvblVwID0gJFBvc2l0aW9uIC0gMTsKCiAgICAjIGdldCBhbnN3ZXIKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkIEZST00gc3VydmV5X2Fuc3dlciIKICAgICAgICAgICAgLiAiIFdIRVJFIHF1ZXN0aW9uX2lkID0gJFBhcmFte1F1ZXN0aW9uSUR9IEFORCBwb3NpdGlvbiA9ICRQb3NpdGlvblVwIiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRBbnN3ZXJJRERvd247CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRBbnN3ZXJJRERvd24gPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBpZiAhJEFuc3dlcklERG93bjsKCiAgICAjIHVwZGF0ZSBwb3NpdGlvbgogICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleV9hbnN3ZXIgU0VUIHBvc2l0aW9uID0gJFBvc2l0aW9uIFdIRVJFIGlkID0gJEFuc3dlcklERG93biIsCiAgICApOwoKICAgICMgdXBkYXRlIHBvc2l0aW9uCiAgICByZXR1cm4gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleV9hbnN3ZXIgU0VUICIKICAgICAgICAgICAgLiAicG9zaXRpb24gPSAkUG9zaXRpb25VcCAiCiAgICAgICAgICAgIC4gIldIRVJFIGlkID0gJFBhcmFte0Fuc3dlcklEfSIsCiAgICApOwp9Cgo9aXRlbSBBbnN3ZXJEb3duKCkKCnRvIG1vdmUgYSBhbnN3ZXIgZG93bgoKICAgICRTdXJ2ZXlPYmplY3QtPkFuc3dlckRvd24oCiAgICAgICAgUXVlc3Rpb25JRCA9PiA0LAogICAgICAgIEFuc3dlcklEID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEFuc3dlckRvd24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUXVlc3Rpb25JRCBBbnN3ZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUXVlc3Rpb25JRCBBbnN3ZXJJRCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0sICdJbnRlZ2VyJyApOwogICAgfQoKICAgICMgZ2V0IHBvc2l0aW9uCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBwb3NpdGlvbiBGUk9NIHN1cnZleV9hbnN3ZXIiCiAgICAgICAgICAgIC4gIiBXSEVSRSBpZCA9ICRQYXJhbXtBbnN3ZXJJRH0gQU5EIHF1ZXN0aW9uX2lkID0gJFBhcmFte1F1ZXN0aW9uSUR9IiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRQb3NpdGlvbjsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFBvc2l0aW9uID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gaWYgISRQb3NpdGlvbjsKCiAgICBteSAkUG9zaXRpb25Eb3duID0gJFBvc2l0aW9uICsgMTsKCiAgICAjIGdldCBhbnN3ZXIKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkIEZST00gc3VydmV5X2Fuc3dlciIKICAgICAgICAgICAgLiAiIFdIRVJFIHF1ZXN0aW9uX2lkID0gJFBhcmFte1F1ZXN0aW9uSUR9IEFORCBwb3NpdGlvbiA9ICRQb3NpdGlvbkRvd24iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJEFuc3dlcklEVXA7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRBbnN3ZXJJRFVwID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gaWYgISRBbnN3ZXJJRFVwOwoKICAgICMgdXBkYXRlIHBvc2l0aW9uCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5X2Fuc3dlciBTRVQgcG9zaXRpb24gPSAkUG9zaXRpb24gV0hFUkUgaWQgPSAkQW5zd2VySURVcCIsCiAgICApOwoKICAgICMgdXBkYXRlIHBvc2l0aW9uCiAgICByZXR1cm4gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleV9hbnN3ZXIgU0VUICIKICAgICAgICAgICAgLiAicG9zaXRpb24gPSAkUG9zaXRpb25Eb3duICIKICAgICAgICAgICAgLiAiV0hFUkUgaWQgPSAkUGFyYW17QW5zd2VySUR9IiwKICAgICk7Cn0KCj1pdGVtIEFuc3dlckdldCgpCgp0byBnZXQgYWxsIGF0dHJpYnV0ZXMgb2YgYSBhbnN3ZXIKCiAgICBteSAlQW5zd2VyID0gJFN1cnZleU9iamVjdC0+QW5zd2VyR2V0KAogICAgICAgIEFuc3dlcklEID0+IDEyMwogICAgKTsKCj1jdXQKCnN1YiBBbnN3ZXJHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0Fuc3dlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgUXVlc3Rpb25JRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtBbnN3ZXJJRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtBbnN3ZXJJRH0sICdJbnRlZ2VyJyApOwoKICAgICMgZ2V0IGFuc3dlcgogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+CiAgICAgICAgICAgICJTRUxFQ1QgaWQsIHF1ZXN0aW9uX2lkLCBhbnN3ZXIsIHBvc2l0aW9uLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5ICIKICAgICAgICAgICAgLiAiRlJPTSBzdXJ2ZXlfYW5zd2VyIFdIRVJFIGlkID0gJFBhcmFte0Fuc3dlcklEfSIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJERhdGF7QW5zd2VySUR9ICAgPSAkUm93WzBdOwogICAgICAgICREYXRhe1F1ZXN0aW9uSUR9ID0gJFJvd1sxXTsKICAgICAgICAkRGF0YXtBbnN3ZXJ9ICAgICA9ICRSb3dbMl07CiAgICAgICAgJERhdGF7UG9zaXRpb259ICAgPSAkUm93WzNdOwogICAgICAgICREYXRhe0NyZWF0ZVRpbWV9ID0gJFJvd1s0XTsKICAgICAgICAkRGF0YXtDcmVhdGVCeX0gICA9ICRSb3dbNV07CiAgICAgICAgJERhdGF7Q2hhbmdlVGltZX0gPSAkUm93WzZdOwogICAgICAgICREYXRhe0NoYW5nZUJ5fSAgID0gJFJvd1s3XTsKICAgIH0KCiAgICByZXR1cm4gJURhdGE7Cn0KCj1pdGVtIEFuc3dlclNhdmUoKQoKdG8gdXBkYXRlIGFuIGV4aXN0aW5nIGFuc3dlcgoKICAgICRTdXJ2ZXlPYmplY3QtPkFuc3dlclNhdmUoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgQW5zd2VySUQgPT4gNiwKICAgICAgICBRdWVzdGlvbklEID0+IDQsCiAgICAgICAgQW5zd2VyID0+ICdUaGUgQW5zd2VyJywKICAgICk7Cgo9Y3V0CgpzdWIgQW5zd2VyU2F2ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgQW5zd2VySUQgUXVlc3Rpb25JRCBBbnN3ZXIpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQW5zd2VyKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSApOwogICAgfQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIEFuc3dlcklEIFF1ZXN0aW9uSUQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICByZXR1cm4gaWYgISRQYXJhbXtBbnN3ZXJ9OwoKICAgICMgdXBkYXRlIGFuc3dlcgogICAgcmV0dXJuICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXlfYW5zd2VyIFNFVCAiCiAgICAgICAgICAgIC4gImFuc3dlciA9ICckUGFyYW17QW5zd2VyfScsICIKICAgICAgICAgICAgLiAiY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgIgogICAgICAgICAgICAuICJjaGFuZ2VfYnkgPSAkUGFyYW17VXNlcklEfSAiCiAgICAgICAgICAgIC4gIldIRVJFIGlkID0gJFBhcmFte0Fuc3dlcklEfSAiCiAgICAgICAgICAgIC4gIkFORCBxdWVzdGlvbl9pZCA9ICRQYXJhbXtRdWVzdGlvbklEfSIsCiAgICApOwp9Cgo9aXRlbSBBbnN3ZXJDb3VudCgpCgp0byBjb3VudCBhbGwgYW5zd2VycyBvZiBhIHF1ZXN0aW9uCgogICAgbXkgJENvdW50QW5zd2VyID0gJFN1cnZleU9iamVjdC0+QW5zd2VyQ291bnQoCiAgICAgICAgUXVlc3Rpb25JRCA9PiAxMjMKICAgICk7Cgo9Y3V0CgpzdWIgQW5zd2VyQ291bnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1F1ZXN0aW9uSUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBRdWVzdGlvbklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte1F1ZXN0aW9uSUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17UXVlc3Rpb25JRH0sICdJbnRlZ2VyJyApOwoKICAgICMgY291bnQgYW5zd2VycwogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gIlNFTEVDVCBDT1VOVChpZCkgRlJPTSBzdXJ2ZXlfYW5zd2VyIFdIRVJFIHF1ZXN0aW9uX2lkID0gJFBhcmFte1F1ZXN0aW9uSUR9IiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRDb3VudEFuc3dlcjsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJENvdW50QW5zd2VyID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJENvdW50QW5zd2VyOwp9Cgo9aXRlbSBWb3RlTGlzdCgpCgp0byBnZXQgYSBhcnJheSBsaXN0IG9mIGFsbCB2b3RlIGl0ZW1zCgogICAgbXkgQExpc3QgPSAkU3VydmV5T2JqZWN0LT5Wb3RlTGlzdCgKICAgICAgICBTdXJ2ZXlJRCA9PiAxCiAgICApOwoKPWN1dAoKc3ViIFZvdGVMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtTdXJ2ZXlJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFN1cnZleUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte1N1cnZleUlEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1N1cnZleUlEfSwgJ0ludGVnZXInICk7CgogICAgIyBnZXQgdm90ZSBsaXN0CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCwgdGlja2V0X2lkLCBzZW5kX3RpbWUsIHZvdGVfdGltZSAiCiAgICAgICAgICAgIC4gIkZST00gc3VydmV5X3JlcXVlc3QgV0hFUkUgc3VydmV5X2lkID0gJFBhcmFte1N1cnZleUlEfSAiCiAgICAgICAgICAgIC4gIkFORCB2YWxpZF9pZCA9IDAgT1JERVIgQlkgdm90ZV90aW1lIERFU0MiLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBteSAlRGF0YTsKICAgICAgICAkRGF0YXtSZXF1ZXN0SUR9ID0gJFJvd1swXTsKICAgICAgICAkRGF0YXtUaWNrZXRJRH0gID0gJFJvd1sxXTsKICAgICAgICAkRGF0YXtTZW5kVGltZX0gID0gJFJvd1syXTsKICAgICAgICAkRGF0YXtWb3RlVGltZX0gID0gJFJvd1szXTsKCiAgICAgICAgcHVzaCBATGlzdCwgXCVEYXRhOwogICAgfQoKICAgIHJldHVybiBATGlzdDsKfQoKPWl0ZW0gVm90ZUdldCgpCgp0byBnZXQgYWxsIGF0dHJpYnV0ZXMgb2YgYSB2b3RlCgogICAgbXkgQFZvdGUgPSAkU3VydmV5T2JqZWN0LT5Wb3RlR2V0KAogICAgICAgIFJlcXVlc3RJRCA9PiAxMywKICAgICAgICBRdWVzdGlvbklEID0+IDIzCiAgICApOwoKPWN1dAoKc3ViIFZvdGVHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUmVxdWVzdElEIFF1ZXN0aW9uSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFJlcXVlc3RJRCBRdWVzdGlvbklEKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgIyBnZXQgdm90ZQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQsIHZvdGVfdmFsdWUgRlJPTSBzdXJ2ZXlfdm90ZSIKICAgICAgICAgICAgLiAiIFdIRVJFIHJlcXVlc3RfaWQgPSAkUGFyYW17UmVxdWVzdElEfSBBTkQgcXVlc3Rpb25faWQgPSAkUGFyYW17UXVlc3Rpb25JRH0iLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBteSAlRGF0YTsKICAgICAgICAkRGF0YXtSZXF1ZXN0SUR9ID0gJFJvd1swXTsKICAgICAgICAkRGF0YXtWb3RlVmFsdWV9ID0gJFJvd1sxXSB8fCAnLSc7CgogICAgICAgIHB1c2ggQExpc3QsIFwlRGF0YTsKICAgIH0KCiAgICByZXR1cm4gQExpc3Q7Cn0KCj1pdGVtIFZvdGVBdHRyaWJ1dGVHZXQoKQoKdG8gZ2V0IGFsbCBhdHRyaWJ1dGVzIG9mIGEgdm90ZQoKICAgIG15ICRWb3RlQXR0cmlidXRlQ29udGVudCA9ICRTdXJ2ZXlPYmplY3QtPlZvdGVBdHRyaWJ1dGVHZXQoCiAgICAgICAgVm90ZUlEID0+IDEzLAogICAgKTsKCj1jdXQKCnN1YiBWb3RlQXR0cmlidXRlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFZvdGVJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVm90ZUlEKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgIyBnZXQgdm90ZSBhdHRyaWJ1dGUKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIHZvdGVfdmFsdWUgRlJPTSBzdXJ2ZXlfdm90ZSIKICAgICAgICAgICAgLiAiIFdIRVJFIGlkID0gJFBhcmFte1ZvdGVJRH0iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFZvdGVBdHRyaWJ1dGVDb250ZW50ID0gJHsgJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSB9WzBdOwogICAgcmV0dXJuICRWb3RlQXR0cmlidXRlQ29udGVudDsKfQoKPWl0ZW0gQ291bnRWb3RlKCkKCnRvIGNvdW50IGFsbCB2b3RlcyBvZiBhIHN1cnZleQoKICAgIG15ICRDb3VudFZvdGUgPSAkU3VydmV5T2JqZWN0LT5Db3VudFZvdGUoCiAgICAgICAgUXVlc3Rpb25JRCA9PiAxMjMsCiAgICAgICAgVm90ZVZhbHVlID0+ICdUaGUgVmFsdWUnLAogICAgKTsKCj1jdXQKCnN1YiBDb3VudFZvdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUXVlc3Rpb25JRCBWb3RlVmFsdWUpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte1ZvdGVWYWx1ZX0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtWb3RlVmFsdWV9ICk7CiAgICAkUGFyYW17UXVlc3Rpb25JRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtRdWVzdGlvbklEfSwgJ0ludGVnZXInICk7CgogICAgIyBjb3VudCB2b3RlcwogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgQ09VTlQodm90ZV92YWx1ZSkgRlJPTSBzdXJ2ZXlfdm90ZSBXSEVSRSAiCiAgICAgICAgICAgIC4gInF1ZXN0aW9uX2lkID0gJFBhcmFte1F1ZXN0aW9uSUR9IEFORCB2b3RlX3ZhbHVlID0gJyRQYXJhbXtWb3RlVmFsdWV9JyIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkQ291bnRWb3RlOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQ291bnRWb3RlID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJENvdW50Vm90ZTsKfQoKPWl0ZW0gQ291bnRSZXF1ZXN0KCkKCnRvIGNvdW50IGFsbCByZXF1ZXN0cyBvZiBhIHN1cnZleQoKICAgIG15ICRDb3VudFJlcXVlc3QgPSAkU3VydmV5T2JqZWN0LT5Db3VudFJlcXVlc3QoCiAgICAgICAgUXVlc3Rpb25JRCA9PiAxMjMsCiAgICAgICAgVmFsaWRJRCA9PiAwLCAgICAgICAjICgwfDF8YWxsKQogICAgKTsKCj1jdXQKCnN1YiBDb3VudFJlcXVlc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU3VydmV5SUQgVmFsaWRJRCkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17U3VydmV5SUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17U3VydmV5SUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGNvdW50IHJlcXVlc3RzCiAgICBteSAkU1FMID0gIlNFTEVDVCBDT1VOVChpZCkgRlJPTSBzdXJ2ZXlfcmVxdWVzdCBXSEVSRSBzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9IjsKCiAgICAjIGFkZCB2YWxpZCBwYXJ0CiAgICBpZiAoICEkUGFyYW17VmFsaWRJRH0gKSB7CiAgICAgICAgJFNRTCAuPSAiIEFORCB2YWxpZF9pZCA9IDAiOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17VmFsaWRJRH0gZXEgMSApIHsKICAgICAgICAkU1FMIC49ICIgQU5EIHZhbGlkX2lkID0gMSI7CiAgICB9CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkQ291bnRSZXF1ZXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQ291bnRSZXF1ZXN0ID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJENvdW50UmVxdWVzdDsKfQoKPWl0ZW0gRWxlbWVudEV4aXN0cygpCgpleGlzdHMgYW4gc3VydmV5LSwgcXVlc3Rpb24tLCBhbnN3ZXItIG9yIHJlcXVlc3QtZWxlbWVudAoKICAgIG15ICRDb3VudFJlcXVlc3QgPSAkU3VydmV5T2JqZWN0LT5FbGVtZW50RXhpc3RzKAogICAgICAgIElEID0+IDEyMywgICAgICAgICAgICMgU3VydmV5SUQsIFF1ZXN0aW9uSUQsIEFuc3dlcklELCBSZXF1ZXN0SUQKICAgICAgICBFbGVtZW50ID0+ICdTdXJ2ZXknICAjIFN1cnZleSwgUXVlc3Rpb24sIEFuc3dlciwgUmVxdWVzdAogICAgKTsKCj1jdXQKCnN1YiBFbGVtZW50RXhpc3RzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEVsZW1lbnRJRCBFbGVtZW50KSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtFbGVtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte0VsZW1lbnR9ICk7CiAgICAkUGFyYW17RWxlbWVudElEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte0VsZW1lbnRJRH0sICdJbnRlZ2VyJyApOwoKICAgIG15ICVMb29rdXBUYWJsZSA9ICgKICAgICAgICBTdXJ2ZXkgICA9PiAnc3VydmV5JywKICAgICAgICBRdWVzdGlvbiA9PiAnc3VydmV5X3F1ZXN0aW9uJywKICAgICAgICBBbnN3ZXIgICA9PiAnc3VydmV5X2Fuc3dlcicsCiAgICAgICAgUmVxdWVzdCAgPT4gJ3N1cnZleV9yZXF1ZXN0JywKICAgICk7CgogICAgIyBjb3VudCBlbGVtZW50CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAiU0VMRUNUIENPVU5UKGlkKSBGUk9NICRMb29rdXBUYWJsZXskUGFyYW17RWxlbWVudH19IFdIRVJFIGlkID0gJFBhcmFte0VsZW1lbnRJRH0iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJEVsZW1lbnRFeGlzdHMgPSAnTm8nOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBpZiAoICRSb3dbMF0gKSB7CiAgICAgICAgICAgICRFbGVtZW50RXhpc3RzID0gJ1llcyc7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkRWxlbWVudEV4aXN0czsKfQoKPWl0ZW0gUmVxdWVzdFNlbmQoKQoKdG8gc2VuZCBhIHJlcXVlc3QgdG8gYSBjdXN0b21lciAoaWYgbWFzdGVyIHN1cnZleSBpcyBzZXQpCgogICAgJFN1cnZleU9iamVjdC0+UmVxdWVzdFNlbmQoCiAgICAgICAgVGlja2V0SUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBSZXF1ZXN0U2VuZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VGlja2V0SUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBUaWNrZXRJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIFB1YmxpY1N1cnZleUtleQogICAgbXkgJG1kNSA9IERpZ2VzdDo6TUQ1LT5uZXcoKTsKICAgICRtZDUtPmFkZCggJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpIC4gaW50KCByYW5kKDk5OTk5OTk5OSkgKSApOwogICAgbXkgJFB1YmxpY1N1cnZleUtleSA9ICRtZDUtPmhleGRpZ2VzdDsKCiAgICAjIGZpbmQgbWFzdGVyIHN1cnZleQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gIlNFTEVDVCBpZCBGUk9NIHN1cnZleSBXSEVSRSBzdGF0dXMgPSAnTWFzdGVyJyIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkU3VydmV5SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRTdXJ2ZXlJRCA9ICRSb3dbMF07CiAgICB9CgogICAgIyByZXR1cm4sIG5vIG1hc3RlciBzdXJ2ZXkgZm91bmQKICAgIHJldHVybiBpZiAhJFN1cnZleUlEOwoKICAgICMgZ2V0IHRoZSBzdXJ2ZXkKICAgIG15ICVTdXJ2ZXkgPSAkU2VsZi0+U3VydmV5R2V0KAogICAgICAgIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCwKICAgICk7CiAgICBteSAkU3ViamVjdCA9ICRTdXJ2ZXl7Tm90aWZpY2F0aW9uU3ViamVjdH07CiAgICBteSAkQm9keSAgICA9ICRTdXJ2ZXl7Tm90aWZpY2F0aW9uQm9keX07CgogICAgIyBmaXggbmV3IGxpbmVzCiAgICAkQm9keSA9fiBzLyhcblxyfFxyXHJcbnxcclxuKS9cbi9nOwoKICAgICMgdGlja2V0IGRhdGEKICAgIG15ICVUaWNrZXQgPSAkU2VsZi0+e1RpY2tldE9iamVjdH0tPlRpY2tldEdldCgKICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGlmIHRpY2tldCBpcyBpbiBhIHNlbmQgcXVldWUKICAgIGlmICggJFN1cnZleXtRdWV1ZXN9ICYmIHJlZiAkU3VydmV5e1F1ZXVlc30gZXEgJ0FSUkFZJyAmJiBAeyAkU3VydmV5e1F1ZXVlc30gfSApIHsKICAgICAgICBteSAkRm91bmQ7CgogICAgICAgIFFVRVVFOgogICAgICAgIGZvciBteSAkUXVldWVJRCAoIEB7ICRTdXJ2ZXl7UXVldWVzfSB9ICkgewogICAgICAgICAgICBuZXh0IFFVRVVFIGlmICRUaWNrZXR7UXVldWVJRH0gIT0gJFF1ZXVlSUQ7CiAgICAgICAgICAgICRGb3VuZCA9IDE7CiAgICAgICAgICAgIGxhc3QgUVVFVUU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaWYgISRGb3VuZDsKICAgIH0KCiAgICBmb3IgbXkgJERhdGEgKCBrZXlzICVUaWNrZXQgKSB7CiAgICAgICAgaWYgKCBkZWZpbmVkICRUaWNrZXR7JERhdGF9ICkgewogICAgICAgICAgICAkU3ViamVjdCA9fiBzLzxPVFJTX1RJQ0tFVF8kRGF0YT4vJFRpY2tldHskRGF0YX0vZ2k7CiAgICAgICAgICAgICRCb2R5ICAgID1+IHMvPE9UUlNfVElDS0VUXyREYXRhPi8kVGlja2V0eyREYXRhfS9naTsKCiAgICAgICAgICAgICMgZmlsdGVyIGZvciBuZXcgcmljaCB0ZXh0IGNvbnRlbnQKICAgICAgICAgICAgJEJvZHkgPX4gcy8mbHQ7T1RSU19USUNLRVRfJERhdGEmZ3Q7LyRUaWNrZXR7JERhdGF9L2c7CiAgICAgICAgfQogICAgfQoKICAgICMgY2xlYW51cAogICAgJFN1YmplY3QgPX4gcy88T1RSU19USUNLRVRfLis/Pi8tL2dpOwogICAgJEJvZHkgICAgPX4gcy88T1RSU19USUNLRVRfLis/Pi8tL2dpOwoKICAgICMgcmVwbGFjZSBjb25maWcgb3B0aW9ucwogICAgJFN1YmplY3QgPX4gc3s8T1RSU19DT05GSUdfKC4rPyk+fXskU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgkMSl9ZWd4OwogICAgJEJvZHkgICAgPX4gc3s8T1RSU19DT05GSUdfKC4rPyk+fXskU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgkMSl9ZWd4OwoKICAgICMgZmlsdGVyIGZvciBuZXcgcmljaCB0ZXh0IGNvbnRlbnQKICAgICRCb2R5ID1+IHN7Jmx0O09UUlNfQ09ORklHXyguKz8pJmd0O317JFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJDEpfWVneDsKCiAgICAjIGNsZWFudXAKICAgICRTdWJqZWN0ID1+IHMvPE9UUlNfQ09ORklHXy4rPz4vLS9naTsKICAgICRCb2R5ICAgID1+IHMvPE9UUlNfQ09ORklHXy4rPz4vLS9naTsKCiAgICAjIGZpbHRlciBmb3IgbmV3IHJpY2ggdGV4dCBjb250ZW50CiAgICAkQm9keSA9fiBzLyZsdDtPVFJTX0NPTkZJR18uKz8mZ3Q7Ly0vZ2k7CgogICAgIyBnZXQgY3VzdG9tZXIgZGF0YSBhbmQgcmVwbGFjZSBpdCB3aXRoIDxPVFJTX0NVU1RPTUVSX0RBVEFfLi4uCiAgICBteSAlQ3VzdG9tZXJVc2VyOwogICAgaWYgKCAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAlQ3VzdG9tZXJVc2VyID0gJFNlbGYtPntDdXN0b21lclVzZXJPYmplY3R9LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICBVc2VyID0+ICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgcmVwbGFjZSBjdXN0b21lciBzdHVmZiB3aXRoIHRhZ3MKICAgICAgICBmb3IgbXkgJERhdGEgKCBrZXlzICVDdXN0b21lclVzZXIgKSB7CiAgICAgICAgICAgIG5leHQgaWYgISRDdXN0b21lclVzZXJ7JERhdGF9OwoKICAgICAgICAgICAgJFN1YmplY3QgPX4gcy88T1RSU19DVVNUT01FUl9EQVRBXyREYXRhPi8kQ3VzdG9tZXJVc2VyeyREYXRhfS9naTsKICAgICAgICAgICAgJEJvZHkgICAgPX4gcy88T1RSU19DVVNUT01FUl9EQVRBXyREYXRhPi8kQ3VzdG9tZXJVc2VyeyREYXRhfS9naTsKCiAgICAgICAgICAgICMgZmlsdGVyIGZvciBuZXcgcmljaCB0ZXh0IGNvbnRlbnQKICAgICAgICAgICAgJEJvZHkgPX4gcy8mbHQ7T1RSU19DVVNUT01FUl9EQVRBXyREYXRhJmd0Oy8kQ3VzdG9tZXJVc2VyeyREYXRhfS9naTsKICAgICAgICB9CiAgICB9CgogICAgIyBjbGVhbnVwIGFsbCBub3QgbmVlZGVkIDxPVFJTX0NVU1RPTUVSX0RBVEFfIHRhZ3MKICAgICRTdWJqZWN0ID1+IHMvPE9UUlNfQ1VTVE9NRVJfREFUQV8uKz8+Ly0vZ2k7CiAgICAkQm9keSAgICA9fiBzLzxPVFJTX0NVU1RPTUVSX0RBVEFfLis/Pi8tL2dpOwoKICAgICMgZmlsdGVyIGZvciBuZXcgcmljaCB0ZXh0IGNvbnRlbnQKICAgICRCb2R5ID1+IHMvJmx0O09UUlNfQ1VTVE9NRVJfREFUQV8uKz8mZ3Q7Ly0vZ2k7CgogICAgIyByZXBsYWNlIGtleQogICAgJFN1YmplY3QgPX4gcy88T1RSU19QdWJsaWNTdXJ2ZXlLZXk+LyRQdWJsaWNTdXJ2ZXlLZXkvZ2k7CiAgICAkQm9keSAgICA9fiBzLzxPVFJTX1B1YmxpY1N1cnZleUtleT4vJFB1YmxpY1N1cnZleUtleS9naTsKCiAgICAjIGZpbHRlciBmb3IgbmV3IHJpY2ggdGV4dCBjb250ZW50CiAgICAkQm9keSA9fiBzLyZsdDtPVFJTX1B1YmxpY1N1cnZleUtleSZndDsvJFB1YmxpY1N1cnZleUtleS9naTsKCiAgICBteSAkVG9TdHJpbmcgPSAkQ3VzdG9tZXJVc2Vye1VzZXJFbWFpbH07CgogICAgaWYgKCAhJFRvU3RyaW5nICkgewogICAgICAgIG15ICVBcnRpY2xlID0gJFNlbGYtPntUaWNrZXRPYmplY3R9LT5BcnRpY2xlTGFzdEN1c3RvbWVyQXJ0aWNsZSgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICApOwogICAgICAgIGlmICggJEFydGljbGV7U2VuZGVyVHlwZX0gZXEgJ2FnZW50JyApIHsKICAgICAgICAgICAgJFRvU3RyaW5nID0gJEFydGljbGV7VG99OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFRvU3RyaW5nID0gJEFydGljbGV7RnJvbX07CiAgICAgICAgfQogICAgfQoKICAgICMgcGFyc2UgdGhlIHRvIHN0cmluZwogICAgbXkgJFRvOwogICAgZm9yIG15ICRUb1BhcnNlciAoIE1haWw6OkFkZHJlc3MtPnBhcnNlKCRUb1N0cmluZykgKSB7CiAgICAgICAgJFRvID0gJFRvUGFyc2VyLT5hZGRyZXNzKCk7CiAgICB9CgogICAgIyByZXR1cm4gaWYgbm8gdG8gaXMgZm91bmQKICAgIHJldHVybiBpZiAhJFRvOwoKICAgICMgY2hlY2sgaWYgaXQncyBhIHZhbGlkIGVtYWlsIGFkZGVkc3MgKG1pbiBpcyBuZWVkZWQpCiAgICByZXR1cm4gaWYgJFRvICF+IC9ALzsKCiAgICAjIGNvbnZlcnQgdG8gbG93ZXIgY2FzZXMKICAgICRUbyA9IGxjICRUbzsKCiAgICAjIGNoZWNrIGlmIG5vdCBzdXJ2ZXkgc2hvdWxkIGJlIHNlbmQKICAgIG15ICRTZW5kTm9TdXJ2ZXlSZWdFeHAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU3VydmV5OjpTZW5kTm9TdXJ2ZXlSZWdFeHAnKTsKCiAgICByZXR1cm4gaWYgJFNlbmROb1N1cnZleVJlZ0V4cCAmJiAkVG8gPX4gLyRTZW5kTm9TdXJ2ZXlSZWdFeHAvaTsKCiAgICAjIHF1b3RlCiAgICAkVG8gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoJFRvKTsKCiAgICAjIE9ubHkgaWYgd2UgaGF2ZW4ndCBiZWVuIGNhbGxlZCBieSBjcm9uCiAgICBpZiAoICEkUGFyYW17VHJpZ2dlclNlbmRSZXF1ZXN0c30gKSB7CiAgICAgICAgbXkgJEFtb3VudE9mU3VydmV5c1BlcjMwRGF5cwogICAgICAgICAgICA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdTdXJ2ZXk6OkFtb3VudE9mU3VydmV5c1BlcjMwRGF5cycpOwoKICAgICAgICAjIGlmIHdlIHNob3VsZCBqdXN0IHNlbmQgYSBjZXJ0YWluIGFtb3VudCBvZiBzdXJ2ZXlzIHBlciAzMCBkYXlzICYgcmVjaXBpZW50CiAgICAgICAgaWYgKCRBbW91bnRPZlN1cnZleXNQZXIzMERheXMpIHsKICAgICAgICAgICAgbXkgJE5vdyA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKTsKCiAgICAgICAgICAgICMgRmluZCBhbGwgc3VydmV5cyB0aGF0IHdlcmUgY3JlYXRlZCBpbiB0aGUgbGFzdCAzMCBkYXlzCiAgICAgICAgICAgIG15ICRUaGlydHlEYXlzQWdvID0gJE5vdyAtIDMwICogODY0MDA7CiAgICAgICAgICAgICRUaGlydHlEYXlzQWdvCiAgICAgICAgICAgICAgICA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyVGltZVN0YW1wKCBTeXN0ZW1UaW1lID0+ICRUaGlydHlEYXlzQWdvICk7CiAgICAgICAgICAgIG15ICRMYXN0U2VudFRpbWUgPSAwOwoKICAgICAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgICAgICBTUUwgPT4gIlNFTEVDVCBjcmVhdGVfdGltZSBGUk9NIHN1cnZleV9yZXF1ZXN0IFdIRVJFIExPV0VSKHNlbmRfdG8pID0gJyRUbycgIgogICAgICAgICAgICAgICAgICAgIC4gIkFORCBjcmVhdGVfdGltZSA+PSAnJFRoaXJ0eURheXNBZ28nIE9SREVSIEJZIGNyZWF0ZV90aW1lIERFU0MiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgICAgICAgICAgbXkgQFJvd3M7CiAgICAgICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBSb3dzLCAkUm93WzBdOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIElmIHdlIGhhdmUgcmVhY2hlZCB0aGUgbWF4aW11bSBhbW91bnQgb2Ygc3VydmV5cyBwZXIgbW9udGgKICAgICAgICAgICAgaWYgKCBzY2FsYXIgQFJvd3MgPj0gJEFtb3VudE9mU3VydmV5c1BlcjMwRGF5cyApIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIGEgc3VydmV5IGlzIHNlbnQgaW4gdGhlIGxhc3QgdGltZQogICAgbXkgJFNlbmRQZXJpb2QgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU3VydmV5OjpTZW5kUGVyaW9kJyk7CiAgICBpZiAoJFNlbmRQZXJpb2QpIHsKICAgICAgICBteSAkTGFzdFNlbnRUaW1lID0gMDsKCiAgICAgICAgIyBnZXQgc2VuZCB0aW1lCiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAiU0VMRUNUIHNlbmRfdGltZSBGUk9NIHN1cnZleV9yZXF1ZXN0IFdIRVJFIExPV0VSKHNlbmRfdG8pID0gJyRUbycgIgogICAgICAgICAgICAgICAgLiAiT1JERVIgQlkgc2VuZF90aW1lIERFU0MiLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRMYXN0U2VudFRpbWUgPSAkUm93WzBdOwogICAgICAgIH0KICAgICAgICBpZiAoJExhc3RTZW50VGltZSkgewogICAgICAgICAgICBteSAkTm93ID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpOwogICAgICAgICAgICAkTGFzdFNlbnRUaW1lID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoIFN0cmluZyA9PiAkTGFzdFNlbnRUaW1lICk7CgogICAgICAgICAgICByZXR1cm4gaWYgKCAkTGFzdFNlbnRUaW1lICsgJFNlbmRQZXJpb2QgKiA2MCAqIDYwICogMjQgKSA+ICROb3c7CgogICAgICAgIH0KICAgIH0KICAgIG15ICRTZW5kSW5Ib3Vyc0FmdGVyQ2xvc2UgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU3VydmV5OjpTZW5kSW5Ib3Vyc0FmdGVyQ2xvc2UnKTsKICAgICRQYXJhbXtUaWNrZXRJRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtUaWNrZXRJRH0sICdJbnRlZ2VyJyApOwoKICAgICMgSWYgbm8gRGVsYXllZCBTZW5kaW5nIGlzIGNvbmZpZ3VyZWQKICAgICMgc2VuZCBpbW1lZGlhdGVseSwgbG9nIGl0IHRvIFRpY2tldCBIaXN0b3J5IGFuZCBpbnNlcnQgaXQgdG8gc3VydmV5X3JlcXVlc3RzCiAgICAjIGluY2x1ZGluZyBzZW50X3RpbWUKICAgIGlmICggISRTZW5kSW5Ib3Vyc0FmdGVyQ2xvc2UgJiYgISRQYXJhbXtUcmlnZ2VyU2VuZFJlcXVlc3RzfSApIHsKCiAgICAgICAgIyBpbnNlcnQgcmVxdWVzdAogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgU1FMID0+ICJJTlNFUlQgSU5UTyBzdXJ2ZXlfcmVxdWVzdCAiCiAgICAgICAgICAgICAgICAuICIgKHRpY2tldF9pZCwgc3VydmV5X2lkLCB2YWxpZF9pZCwgcHVibGljX3N1cnZleV9rZXksIHNlbmRfdG8sIHNlbmRfdGltZSwgY3JlYXRlX3RpbWUpICIKICAgICAgICAgICAgICAgIC4gIiBWQUxVRVMgKCRQYXJhbXtUaWNrZXRJRH0sICRTdXJ2ZXlJRCwgMSwgJyIKICAgICAgICAgICAgICAgIC4gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCRQdWJsaWNTdXJ2ZXlLZXkpIC4gIicsICIKICAgICAgICAgICAgICAgIC4gIickVG8nLCBjdXJyZW50X3RpbWVzdGFtcCwgY3VycmVudF90aW1lc3RhbXApIiwKICAgICAgICApOwoKICAgICAgICAjIGxvZyBhY3Rpb24gb24gdGlja2V0CiAgICAgICAgJFNlbGYtPntUaWNrZXRPYmplY3R9LT5IaXN0b3J5QWRkKAogICAgICAgICAgICBUaWNrZXRJRCAgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICAgICAgQ3JlYXRlVXNlcklEID0+IDEsCiAgICAgICAgICAgIEhpc3RvcnlUeXBlICA9PiAnTWlzYycsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAiU2VudCBjdXN0b21lciBzdXJ2ZXkgdG8gJyRUbycuIiwKICAgICAgICApOwogICAgfQoKICAgICMgSWYgd2Ugc2hvdWxkIHNlbmQgZGVsYXllZCBqdXN0IGNyb25qb2JzIGRlbGl2ZXIgIlRyaWdnZXJTZW5kUmVxdWVzdHMiLAogICAgIyBzbyB3ZSB3ZXJlIGNhbGxlZCBieSBhIGNsb3NlZCB0aWNrZXQKICAgICMgYW5kIGhhdmUgdG8gY3JlYXRlIHRoZSBzdXJ2ZXlfcmVxdWVzdCByZWNvcmQgd2l0aCBubyBzZW5kX3RpbWUKICAgICMgKHdpbGwgYmUgZmlsbGVkIGluIGJ5IGNyb25qb2IgYXMgc29vbiBhcyBpdCByZWFsbHkgZ290IGRlbGl2ZXJlZCkKICAgICMgYWRkaXRpb25hbGx5IG5vIFRpY2tldCBIaXN0b3J5IHlldCwgY2F1c2Ugbm8gc2VuZCBoYXMgaGFwcGVuZWQKICAgIGVsc2lmICggJFNlbmRJbkhvdXJzQWZ0ZXJDbG9zZSAmJiAhJFBhcmFte1RyaWdnZXJTZW5kUmVxdWVzdHN9ICkgewoKICAgICAgICAjIGluc2VydCByZXF1ZXN0CiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICBTUUwgPT4gIklOU0VSVCBJTlRPIHN1cnZleV9yZXF1ZXN0ICIKICAgICAgICAgICAgICAgIC4gIiAodGlja2V0X2lkLCBzdXJ2ZXlfaWQsIHZhbGlkX2lkLCBwdWJsaWNfc3VydmV5X2tleSwgc2VuZF90bywgY3JlYXRlX3RpbWUpICIKICAgICAgICAgICAgICAgIC4gIiBWQUxVRVMgKCRQYXJhbXtUaWNrZXRJRH0sICRTdXJ2ZXlJRCwgMSwgJyIKICAgICAgICAgICAgICAgIC4gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCRQdWJsaWNTdXJ2ZXlLZXkpIC4gIicsICIKICAgICAgICAgICAgICAgIC4gIickVG8nLCBjdXJyZW50X3RpbWVzdGFtcCkiLAogICAgICAgICk7CgogICAgfQoKICAgICMgaGVyZSB3ZSBnb3QgY2FsbGVkIGJ5IGNyb24sIGFuZCBubyBtYXR0ZXIgaWYgU2VuZEluSG91cnNBZnRlckNsb3NlIGlzIGNvbmZpZ3VyZWQKICAgICMgb3Igbm90LCB3ZSBoYXZlIHRvIHNlbmQgdGhlIHN1cnZleSByZXF1ZXN0cyB0aGF0IHdlcmVuJ3Qgc2VudCB5ZXQKICAgICMgdGhpcyB0aW1lIHdlIGhhdmUgdG8gdXBkYXRlIHRoZSBzdXJ2ZXlfcmVxdWVzdCBsaW5lCiAgICAjIHRvIGZpbGwgaW4gdGhlIHNlbmRfdGltZSBhbmQgY3JlYXRlIHRoZSBUaWNrZXQgSGlzdG9yeSBlbnRyeQogICAgZWxzaWYgKAogICAgICAgICRQYXJhbXtUcmlnZ2VyU2VuZFJlcXVlc3RzfQogICAgICAgICYmICRQYXJhbXtTdXJ2ZXlSZXF1ZXN0SUR9CiAgICAgICAgJiYgJFBhcmFte1N1cnZleVJlcXVlc3RJRH0gPX4gL15cZCskLwogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleV9yZXF1ZXN0ICIKICAgICAgICAgICAgICAgIC4gIlNFVCBzZW5kX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCBXSEVSRSBpZCA9ICRQYXJhbXtTdXJ2ZXlSZXF1ZXN0SUR9IiwKICAgICAgICApOwoKICAgICAgICAjIGxvZyBhY3Rpb24gb24gdGlja2V0CiAgICAgICAgJFNlbGYtPntUaWNrZXRPYmplY3R9LT5IaXN0b3J5QWRkKAogICAgICAgICAgICBUaWNrZXRJRCAgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICAgICAgQ3JlYXRlVXNlcklEID0+IDEsCiAgICAgICAgICAgIEhpc3RvcnlUeXBlICA9PiAnTWlzYycsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAiU2VudCBjdXN0b21lciBzdXJ2ZXkgdG8gJyRUbycuIiwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNoYXJzZXQKICAgIG15ICRDaGFyc2V0ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0RlZmF1bHRDaGFyc2V0JykgfHwgJ3VmdC04JzsKCiAgICAjIGNsZWFuIGh0bWwgYW5kIGNvbnZlcnQgdGhlIEZpZWxkIGluIGh0bWwgKFxuIC0tPjxicj4pCiAgICAkQm9keSA9fiBze1xBXCRodG1sXC90ZXh0XCRccyguKil9eyQxfXhtczsKICAgIGlmICggISQxICkgewoKICAgICAgICAjIGNvbnZlcnQgYm9keSB0byBodG1sCiAgICAgICAgJEJvZHkgPSAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0tPlRvSFRNTCgKICAgICAgICAgICAgU3RyaW5nID0+ICRCb2R5LAogICAgICAgICk7CiAgICB9CgogICAgIyBwcmVwYXJlIGh0bWwgbGlua3MKICAgICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fS0+TGlua1F1b3RlKAogICAgICAgIFN0cmluZyA9PiBcJEJvZHksCiAgICApOwoKICAgICMgY29tcGxldGUgaHRtbCBkb2N1bWVudAogICAgJEJvZHkgPSAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0tPkRvY3VtZW50Q29tcGxldGUoCiAgICAgICAgU3RyaW5nICA9PiAkQm9keSwKICAgICAgICBDaGFyc2V0ID0+ICRDaGFyc2V0LAogICAgKTsKCiAgICAjIHNlbmQgc3VydmV5CiAgICByZXR1cm4gJFNlbGYtPntTZW5kbWFpbE9iamVjdH0tPlNlbmQoCiAgICAgICAgRnJvbSAgICAgPT4gJFN1cnZleXtOb3RpZmljYXRpb25TZW5kZXJ9LAogICAgICAgIFRvICAgICAgID0+ICRUbywKICAgICAgICBTdWJqZWN0ICA9PiAkU3ViamVjdCwKICAgICAgICBNaW1lVHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICBDaGFyc2V0ICA9PiAkQ2hhcnNldCwKICAgICAgICBCb2R5ICAgICA9PiAkQm9keSwKICAgICkgaWYgKCAhJFNlbmRJbkhvdXJzQWZ0ZXJDbG9zZSB8fCAkUGFyYW17VHJpZ2dlclNlbmRSZXF1ZXN0c30gKTsKfQoKPWl0ZW0gUmVxdWVzdEdldCgpCgp0byBnZXQgYW4gYXJyYXkgbGlzdCBvZiByZXF1ZXN0IGVsZW1lbnRzCgogICAgbXkgJVJlcXVlc3REYXRhID0gJFN1cnZleU9iamVjdC0+UmVxdWVzdEdldCgKICAgICAgICBQdWJsaWNTdXJ2ZXlLZXkgPT4gJ0F3NWRlM1hmNXFBJywKICAgICk7Cgo9Y3V0CgpzdWIgUmVxdWVzdEdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17UHVibGljU3VydmV5S2V5fSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgUHVibGljU3VydmV5S2V5IScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte1B1YmxpY1N1cnZleUtleX0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtQdWJsaWNTdXJ2ZXlLZXl9ICk7CgogICAgIyBnZXQgdm90ZSBsaXN0CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4KICAgICAgICAgICAgIlNFTEVDVCBpZCwgdGlja2V0X2lkLCBzdXJ2ZXlfaWQsIHZhbGlkX2lkLCBwdWJsaWNfc3VydmV5X2tleSwgc2VuZF90bywgc2VuZF90aW1lLCB2b3RlX3RpbWUgIgogICAgICAgICAgICAuICJGUk9NIHN1cnZleV9yZXF1ZXN0IFdIRVJFIHB1YmxpY19zdXJ2ZXlfa2V5ID0gJyRQYXJhbXtQdWJsaWNTdXJ2ZXlLZXl9JyAiLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJVJlcXVlc3REYXRhOwoKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFJlcXVlc3REYXRhe1JlcXVlc3RJRH0gICAgICAgPSAkUm93WzBdOwogICAgICAgICRSZXF1ZXN0RGF0YXtUaWNrZXRJRH0gICAgICAgID0gJFJvd1sxXTsKICAgICAgICAkUmVxdWVzdERhdGF7U3VydmV5SUR9ICAgICAgICA9ICRSb3dbMl07CiAgICAgICAgJFJlcXVlc3REYXRhe1ZhbGlkSUR9ICAgICAgICAgPSAkUm93WzNdOwogICAgICAgICRSZXF1ZXN0RGF0YXtQdWJsaWNTdXJ2ZXlLZXl9ID0gJFJvd1s0XTsKICAgICAgICAkUmVxdWVzdERhdGF7U2VuZFRvfSAgICAgICAgICA9ICRSb3dbNV07CiAgICAgICAgJFJlcXVlc3REYXRhe1NlbmRUaW1lfSAgICAgICAgPSAkUm93WzZdOwogICAgICAgICRSZXF1ZXN0RGF0YXtWb3RlVGltZX0gICAgICAgID0gJFJvd1s3XTsKICAgIH0KCiAgICByZXR1cm4gJVJlcXVlc3REYXRhOwp9Cgo9aXRlbSBQdWJsaWNTdXJ2ZXlHZXQoKQoKdG8gZ2V0IGFsbCBwdWJsaWMgYXR0cmlidXRlcyBvZiBhIHN1cnZleQoKICAgIG15ICVQdWJsaWNTdXJ2ZXkgPSAkU3VydmV5T2JqZWN0LT5QdWJsaWNTdXJ2ZXlHZXQoCiAgICAgICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAnQXc1ZGUzWGY1cUEnLAogICAgICAgICAgICBJbnZhbGlkICAgICAgICAgPT4gMSwgIyBvcHRpb25hbCB0byBrbm93IGlmIG9uZSBrZXkgd2FzIGFscmVhZHkgdXNlZC4KICAgICk7Cgo9Y3V0CgpzdWIgUHVibGljU3VydmV5R2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1B1YmxpY1N1cnZleUtleX0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFN1cnZleUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte1B1YmxpY1N1cnZleUtleX0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtQdWJsaWNTdXJ2ZXlLZXl9ICk7CgogICAgbXkgJFZhbGlkSUQgPSAnQU5EIHZhbGlkX2lkID0gMSc7CgogICAgIyBpZiBub3QgaW52YWxpZCBzaG93IGp1c3QgdmFsaWQga2V5cwogICAgaWYgKCAkUGFyYW17SW52YWxpZH0gKSB7CiAgICAgICAgJFZhbGlkSUQgPSAnQU5EIHZhbGlkX2lkID0gMCc7CiAgICB9CgogICAgIyBnZXQgcmVxdWVzdAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1Qgc3VydmV5X2lkIEZST00gc3VydmV5X3JlcXVlc3QgIgogICAgICAgICAgICAuICJXSEVSRSBwdWJsaWNfc3VydmV5X2tleSA9ICckUGFyYW17UHVibGljU3VydmV5S2V5fScgJFZhbGlkSUQgIiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRTdXJ2ZXlJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFN1cnZleUlEID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gKCkgaWYgISRTdXJ2ZXlJRDsKCiAgICAjIGdldCBzdXJ2ZXkKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkLCBzdXJ2ZXludW1iZXIsIHRpdGxlLCBpbnRyb2R1Y3Rpb24gIgogICAgICAgICAgICAuICJGUk9NIHN1cnZleSBXSEVSRSBpZCA9ICRTdXJ2ZXlJRCBBTkQgKHN0YXR1cyA9ICdNYXN0ZXInIE9SIHN0YXR1cyA9ICdWYWxpZCcpIiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXtTdXJ2ZXlJRH0gICAgID0gJFJvd1swXTsKICAgICAgICAkRGF0YXtTdXJ2ZXlOdW1iZXJ9ID0gJFJvd1sxXTsKICAgICAgICAkRGF0YXtUaXRsZX0gICAgICAgID0gJFJvd1syXTsKICAgICAgICAkRGF0YXtJbnRyb2R1Y3Rpb259ID0gJFJvd1szXTsKICAgIH0KCiAgICByZXR1cm4gJURhdGE7Cn0KCj1pdGVtIFB1YmxpY0Fuc3dlclNhdmUoKQoKdG8gc2F2ZSBhIHB1YmxpYyB2b3RlCgogICAgJFN1cnZleU9iamVjdC0+UHVibGljQW5zd2VyU2F2ZSgKICAgICAgICBQdWJsaWNTdXJ2ZXlLZXkgPT4gJ2FWa2RFODJEdzJxdzZlckNkYScsCiAgICAgICAgUXVlc3Rpb25JRCA9PiA0LAogICAgICAgIFZvdGVWYWx1ZSA9PiAnVGhlIFZhbHVlJywKICAgICk7Cgo9Y3V0CgpzdWIgUHVibGljQW5zd2VyU2F2ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhQdWJsaWNTdXJ2ZXlLZXkgUXVlc3Rpb25JRCBWb3RlVmFsdWUpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUHVibGljU3VydmV5S2V5IFZvdGVWYWx1ZSkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0gKTsKICAgIH0KICAgICRQYXJhbXtRdWVzdGlvbklEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1F1ZXN0aW9uSUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGdldCByZXF1ZXN0CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCAiCiAgICAgICAgICAgIC4gIiBGUk9NIHN1cnZleV9yZXF1ZXN0IFdIRVJFIHB1YmxpY19zdXJ2ZXlfa2V5ID0gJyRQYXJhbXtQdWJsaWNTdXJ2ZXlLZXl9JyBBTkQgdmFsaWRfaWQgPSAxIiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRSZXF1ZXN0SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRSZXF1ZXN0SUQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBpZiAhJFJlcXVlc3RJRDsKCiAgICAjIGluc2VydCB2b3RlCiAgICByZXR1cm4gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiSU5TRVJUIElOVE8gc3VydmV5X3ZvdGUgKHJlcXVlc3RfaWQsIHF1ZXN0aW9uX2lkLCB2b3RlX3ZhbHVlLCBjcmVhdGVfdGltZSkgVkFMVUVTICgiCiAgICAgICAgICAgIC4gIiRSZXF1ZXN0SUQsICIKICAgICAgICAgICAgLiAiJFBhcmFte1F1ZXN0aW9uSUR9LCAiCiAgICAgICAgICAgIC4gIickUGFyYW17Vm90ZVZhbHVlfScsICIKICAgICAgICAgICAgLiAiY3VycmVudF90aW1lc3RhbXApIiwKICAgICk7Cn0KCj1pdGVtIFB1YmxpY1N1cnZleUludmFsaWRTZXQoKQoKdG8gc2V0IGEgcmVxdWVzdCBpbnZhbGlkCgogICAgJFN1cnZleU9iamVjdC0+UHVibGljU3VydmV5SW52YWxpZFNldCgKICAgICAgICBQdWJsaWNTdXJ2ZXlLZXkgPT4gJ2FWa2RFODJEdzJxdzZlckNkYScsCiAgICApOwoKPWN1dAoKc3ViIFB1YmxpY1N1cnZleUludmFsaWRTZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1B1YmxpY1N1cnZleUtleX0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFN1cnZleUlEIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17UHVibGljU3VydmV5S2V5fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1B1YmxpY1N1cnZleUtleX0gKTsKCiAgICAjIGdldCByZXF1ZXN0CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCAiCiAgICAgICAgICAgIC4gIiBGUk9NIHN1cnZleV9yZXF1ZXN0IFdIRVJFIHB1YmxpY19zdXJ2ZXlfa2V5ID0gJyRQYXJhbXtQdWJsaWNTdXJ2ZXlLZXl9JyIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkUmVxdWVzdElEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkUmVxdWVzdElEID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gaWYgISRSZXF1ZXN0SUQ7CgogICAgIyB1cGRhdGUgcmVxdWVzdAogICAgcmV0dXJuICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXlfcmVxdWVzdCBTRVQgIgogICAgICAgICAgICAuICJ2YWxpZF9pZCA9IDAsICIKICAgICAgICAgICAgLiAidm90ZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAgIgogICAgICAgICAgICAuICJXSEVSRSBpZCA9ICRSZXF1ZXN0SUQiLAogICAgKTsKfQoKPWl0ZW0gU3VydmV5UXVldWVTYXZlKCkKCmFkZCBhIHN1cnZleV9xdWV1ZSByZWxhdGlvbgoKbXkgJFJlc3VsdCA9ICRTdXJ2ZXlPYmplY3QtPlN1cnZleVF1ZXVlU2F2ZSgKICAgIFN1cnZleUlEID0+IDMsCiAgICBRdWV1ZUlEcyA9PiBbMSwgN10sCik7Cgo9Y3V0CgpzdWIgU3VydmV5UXVldWVTYXZlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFN1cnZleUlEIFF1ZXVlSURzKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyggUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAiTmVlZCAkQXJndW1lbnQhIiApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkUXVldWVJRCAoIEB7ICRQYXJhbXtRdWV1ZUlEc30gfSApIHsKICAgICAgICAkUXVldWVJRCA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFF1ZXVlSUQsICdJbnRlZ2VyJyApOwogICAgfQogICAgJFBhcmFte1N1cnZleUlEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1N1cnZleUlEfSwgJ0ludGVnZXInICk7CgogICAgIyByZW1vdmUgYWxsIGV4aXN0aW5nIHJlbGF0aW9ucwogICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc3VydmV5X3F1ZXVlIFdIRVJFIHN1cnZleV9pZCA9ICRQYXJhbXtTdXJ2ZXlJRH0iLAogICAgKTsKCiAgICAjIGFkZCBhbGwgc3VydmV5X3F1ZXVlIHJlbGF0aW9ucyB0byBkYXRhYmFzZQogICAgZm9yIG15ICRRdWV1ZUlEICggQHsgJFBhcmFte1F1ZXVlSURzfSB9ICkgewoKICAgICAgICAjIGFkZCBzdXJ2ZXlfcXVldWUgcmVsYXRpb24gdG8gZGF0YWJhc2UKICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgU1FMID0+ICJJTlNFUlQgSU5UTyBzdXJ2ZXlfcXVldWUiCiAgICAgICAgICAgICAgICAuICIgKHN1cnZleV9pZCwgcXVldWVfaWQpIFZBTFVFUyIKICAgICAgICAgICAgICAgIC4gIiAoJFBhcmFte1N1cnZleUlEfSwgJFF1ZXVlSUQpIiwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBTdXJ2ZXlRdWV1ZUdldCgpCgpnZXQgYSBzdXJ2ZXlfcXVldWUgcmVsYXRpb24gYXMgYW4gYXJyYXkgcmVmZXJlbmNlCgpteSAkUXVldWVzUmVmID0gJFN1cnZleU9iamVjdC0+U3VydmV5UXVldWVHZXQoCiAgICBTdXJ2ZXlJRCA9PiAzLAopOwoKPWN1dAoKc3ViIFN1cnZleVF1ZXVlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtTdXJ2ZXlJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFN1cnZleUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte1N1cnZleUlEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1N1cnZleUlEfSwgJ0ludGVnZXInICk7CgogICAgIyBnZXQgcXVldWUgaWRzIGZyb20gZGF0YWJhc2UKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIHF1ZXVlX2lkIEZST00gc3VydmV5X3F1ZXVlIgogICAgICAgICAgICAuICIgV0hFUkUgc3VydmV5X2lkID0gJFBhcmFte1N1cnZleUlEfSBPUkRFUiBCWSBxdWV1ZV9pZCBBU0MiLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBRdWV1ZUxpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQFF1ZXVlTGlzdCwgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gXEBRdWV1ZUxpc3Q7Cn0KCj1pdGVtIFN1cnZleVNlYXJjaCgpCgpzZWFyY2ggaW4gc3VydmV5cwoKICAgIG15IEBJRHMgPSAkU3VydmV5T2JqZWN0LT5TdXJ2ZXlTZWFyY2goCgogICAgICAgIE51bWJlciAgICAgICAgICAgICAgPT4gJzEzNCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBUaXRsZSAgICAgICAgICAgICAgID0+ICdzb21lIHRpdGxlJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSW50cm9kdWN0aW9uICAgICAgICA9PiAnc29tZSBpbnRyb2R1Y3Rpb24nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgPT4gJ3NvbWUgZGVzY3JpcHRpb24nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBOb3RpZmljYXRpb25TZW5kZXIgID0+ICd1c2VyQGRvbWFpbicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgTm90aWZpY2F0aW9uU3ViamVjdCA9PiAnc29tZSBub3RpZmljYXRpb24gc3ViamVjdCcsICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIE5vdGlmaWNhdGlvbkJvZHkgICAgPT4gJ3NvbWUgbm90aWZpY2F0aW9uIGJvZHknLCAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgIyBpcyBzZWFyY2hpbmcgaW4gTnVtYmVyLCBUaXRsZSwgSW50cm9kdWN0aW9uLCBEZXNjcmlwdGlvbiwgTm90aWZpY2F0aW9uU2VuZGVyLAogICAgICAgICMgTm90aWZpY2F0aW9uU3ViamVjdCBhbmQgTm90aWZpY2F0aW9uQm9keQogICAgICAgIFdoYXQgICA9PiAnc29tZSB0ZXh0JywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgU3RhdHVzID0+ICdzb21lIHN0YXR1cycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICBDcmVhdGVUaW1lTmV3ZXJEYXRlID0+ICcyMDEyLTAxLTAxIDEyOjAwOjAwJywKICAgICAgICBDcmVhdGVUaW1lT2xkZXJEYXRlID0+ICcyMDEyLTAxLTMxIDEyOjAwOjAwJywKICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+ICcxMjMnLCAgICAgICAgICAgICNVc2VySUQKICAgICAgICBDaGFuZ2VUaW1lTmV3ZXJEYXRlID0+ICcyMDEyLTAxLTAxIDEyOjAwOjAwJywKICAgICAgICBDaGFuZ2VUaW1lT2xkZXJEYXRlID0+ICcyMDEyLTEyLTMxIDEyOjAwOjAwJywKICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICcxMjMnLCAgICAgICAgICAgICNVc2VySUQKCiAgICAgICAgT3JkZXJCeSA9PiBbICdTdXJ2ZXlJRCcsICdUaXRsZScgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBkZWZhdWx0OiBbICdTdXJ2ZXlJRCcgXSwKICAgICAgICAjICgpU3VydmV5SUQsIE51bWJlciwgVGl0bGUsIEludHJvZHVjdGlvbiwgRGVzY3JpcHRpb24sCiAgICAgICAgIyBOb3RpZmljYXRpb25TZW5kZXIsIE5vdGlmaWNhdGlvblN1YmplY3QsIE5vdGlmaWNhdGlvbkJvZHksCiAgICAgICAgIyBTdGF0dXMsIENyZWF0ZVRpbWUsIENyZWF0ZUJ5LCBDaGFuZ2VUaW1lLCBDaGFuZ2VCeSkKCiAgICAgICAgIyBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBPcmRlckJ5OgogICAgICAgICMgVGhlIE9yZGVyQnlEaXJlY3Rpb24gY2FuIGJlIHNwZWNpZmllZCBmb3IgZWFjaCBPcmRlckJ5IGF0dHJpYnV0ZS4KICAgICAgICAjIFRoZSBwYWlyaW5nIGlzIG1hZGUgYnkgdGhlIGFycmF5IGluZGljZXMuCgogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWyAnRG93bicsICdVcCcgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgZGVmYXVsdDogWyAnRG93bicgXQogICAgICAgICMgKERvd24gfCBVcCkKCiAgICAgICAgTGltaXQgICAgID0+IDE1MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFN1cnZleVNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgVXNlcklEISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyB2ZXJpZnkgdGhhdCBhbGwgcGFzc2VkIGFycmF5IHBhcmFtZXRlcnMgY29udGFpbiBhbiBhcnJheXJlZgogICAgQVJHVU1FTlQ6CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhPcmRlckJ5IE9yZGVyQnlEaXJlY3Rpb24pKSB7CgogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRQYXJhbXskQXJndW1lbnR9IHx8PSBbXTsKCiAgICAgICAgICAgIG5leHQgQVJHVU1FTlQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoIHJlZiAkUGFyYW17JEFyZ3VtZW50fSBuZSAnQVJSQVknICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJEFyZ3VtZW50IG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWZpbmUgb3JkZXIgdGFibGUKICAgIG15ICVPcmRlckJ5VGFibGUgPSAoCgogICAgICAgICMgU3VydmV5IGl0ZW0gYXR0cmlidXRlcwogICAgICAgIFN1cnZleUlEICAgICAgICAgICAgPT4gJ3MuaWQnLAogICAgICAgIE51bWJlciAgICAgICAgICAgICAgPT4gJ3Muc3VydmV5bnVtYmVyJywKICAgICAgICBUaXRsZSAgICAgICAgICAgICAgID0+ICdzLnRpdGxlJywKICAgICAgICBJbnRyb2R1Y3Rpb24gICAgICAgID0+ICdzLmludHJvZHVjdGlvbicsCiAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICA9PiAncy5kZXNjcmlwdGlvbicsCiAgICAgICAgTm90aWZpY2F0aW9uU2VuZGVyICA9PiAncy5ub3RpZmljYXRpb25fc2VuZGVyJywKICAgICAgICBOb3RpZmljYXRpb25TdWJqZWN0ID0+ICdzLm5vdGlmaWNhdGlvbl9zdWJqZWN0JywKICAgICAgICBOb3RpZmljYXRpb25Cb2R5ICAgID0+ICdzLm5vdGlmaWNhdGlvbl9ib2R5JywKICAgICAgICBTdGF0dXMgICAgICAgICAgICAgID0+ICdzLnN0YXR1cycsCiAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAncy5jcmVhdGVfdGltZScsCiAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAncy5jcmVhdGVfYnknLAogICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJ3MuY2hhbmdlX3RpbWUnLAogICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJ3MuY2hhbmdlX2J5JywKICAgICk7CgogICAgIyBjaGVjayBpZiBPcmRlckJ5IGNvbnRhaW5zIG9ubHkgdW5pcXVlIHZhbGlkIHZhbHVlcwogICAgbXkgJU9yZGVyQnlTZWVuOwogICAgZm9yIG15ICRPcmRlckJ5ICggQHsgJFBhcmFte09yZGVyQnl9IH0gKSB7CgogICAgICAgIGlmICggISRPcmRlckJ5IHx8ICEkT3JkZXJCeVRhYmxleyRPcmRlckJ5fSB8fCAkT3JkZXJCeVNlZW57JE9yZGVyQnl9ICkgewoKICAgICAgICAgICAgIyBmb3VuZCBhbiBlcnJvcgogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiT3JkZXJCeSBjb250YWlucyBpbnZhbGlkIHZhbHVlICckT3JkZXJCeScgIgogICAgICAgICAgICAgICAgICAgIC4gJ29yIHRoZSB2YWx1ZSBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlIScsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgcmVtZW1iZXIgdGhlIHZhbHVlIHRvIGNoZWNrIGlmIGl0IGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UKICAgICAgICAkT3JkZXJCeVNlZW57JE9yZGVyQnl9ID0gMTsKCiAgICB9CgogICAgIyBjaGVjayBpZiBPcmRlckJ5RGlyZWN0aW9uIGFycmF5IGNvbnRhaW5zIG9ubHkgJ1VwJyBvciAnRG93bicKICAgIERJUkVDVElPTjoKICAgIGZvciBteSAkRGlyZWN0aW9uICggQHsgJFBhcmFte09yZGVyQnlEaXJlY3Rpb259IH0gKSB7CgogICAgICAgICMgb25seSAnVXAnIG9yICdEb3duJyBhbGxvd2VkCiAgICAgICAgbmV4dCBESVJFQ1RJT04gaWYgJERpcmVjdGlvbiBlcSAnVXAnOwogICAgICAgIG5leHQgRElSRUNUSU9OIGlmICREaXJlY3Rpb24gZXEgJ0Rvd24nOwoKICAgICAgICAjIGZvdW5kIGFuIGVycm9yCiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJPcmRlckJ5RGlyZWN0aW9uIGNhbiBvbmx5IGNvbnRhaW4gJ1VwJyBvciAnRG93bichIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGFzc2VtYmxlIHRoZSBPUkRFUiBCWSBjbGF1c2UKICAgIG15IEBTUUxPcmRlckJ5OwogICAgbXkgQE9yZGVyQnlGaWVsZHM7CiAgICBteSAkQ291bnQgPSAwOwogICAgZm9yIG15ICRPcmRlckJ5ICggQHsgJFBhcmFte09yZGVyQnl9IH0gKSB7CgogICAgICAgICMgc2V0IHRoZSBkZWZhdWx0IG9yZGVyIGRpcmVjdGlvbgogICAgICAgIG15ICREaXJlY3Rpb24gPSAnREVTQyc7CgogICAgICAgICMgYWRkIHRoZSBnaXZlbiBvcmRlciBkaXJlY3Rpb24KICAgICAgICBpZiAoICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufS0+WyRDb3VudF0gKSB7CiAgICAgICAgICAgIGlmICggJFBhcmFte09yZGVyQnlEaXJlY3Rpb259LT5bJENvdW50XSBlcSAnVXAnICkgewogICAgICAgICAgICAgICAgJERpcmVjdGlvbiA9ICdBU0MnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFBhcmFte09yZGVyQnlEaXJlY3Rpb259LT5bJENvdW50XSBlcSAnRG93bicgKSB7CiAgICAgICAgICAgICAgICAkRGlyZWN0aW9uID0gJ0RFU0MnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGFkZCBTUUwKICAgICAgICBwdXNoIEBTUUxPcmRlckJ5LCAgICAiJE9yZGVyQnlUYWJsZXskT3JkZXJCeX0gJERpcmVjdGlvbiI7CiAgICAgICAgcHVzaCBAT3JkZXJCeUZpZWxkcywgJE9yZGVyQnlUYWJsZXskT3JkZXJCeX07CiAgICB9CiAgICBjb250aW51ZSB7CiAgICAgICAgJENvdW50Kys7CiAgICB9CgogICAgIyBpZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIG9yZGVyaW5nIGlzIG5vdCBkZXRlcm1pbmVkCiAgICAjIHdlIGFkZCBhbiBkZXNjZW5kaW5nIG9yZGVyaW5nIGJ5IGlkCiAgICBpZiAoICFncmVwIHsgJF8gZXEgJ1N1cnZleUlEJyB9ICggQHsgJFBhcmFte09yZGVyQnl9IH0gKSApIHsKICAgICAgICBwdXNoIEBTUUxPcmRlckJ5LCAiJE9yZGVyQnlUYWJsZXtTdXJ2ZXlJRH0gREVTQyI7CiAgICB9CgogICAgIyBzcWwKICAgIG15ICRTUUwgPSAnU0VMRUNUIHMuaWQgJzsKCiAgICAjIGV4dGVuZGVkIFNRTAogICAgbXkgJEV4dCA9ICcnOwoKICAgICMgZnVsbHRleHQgc2VhcmNoCiAgICBpZiAoICRQYXJhbXtXaGF0fSAmJiAkUGFyYW17V2hhdH0gbmUgJyonICkgewoKICAgICAgICAjIGRlZmluZSB0aGUgc2VhcmNoIGZpZWxkcyBmb3IgZnVsbHRleHQgc2VhcmNoCiAgICAgICAgbXkgQFNlYXJjaEZpZWxkcyA9ICgKICAgICAgICAgICAgJ3Muc3VydmV5bnVtYmVyJywKICAgICAgICAgICAgJ3MudGl0bGUnLAogICAgICAgICAgICAncy5pbnRyb2R1Y3Rpb24nLAogICAgICAgICAgICAncy5kZXNjcmlwdGlvbicsCiAgICAgICAgICAgICdzLm5vdGlmaWNhdGlvbl9zZW5kZXInLAogICAgICAgICAgICAncy5ub3RpZmljYXRpb25fc3ViamVjdCcsCiAgICAgICAgICAgICdzLm5vdGlmaWNhdGlvbl9ib2R5JywKICAgICAgICAgICAgJ3Muc3RhdHVzJywKICAgICAgICApOwoKICAgICAgICAjIGFkZCB0aGUgU1FMIGZvciB0aGUgZnVsbHRleHQgc2VhcmNoCiAgICAgICAgJEV4dCAuPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVlcnlDb25kaXRpb24oCiAgICAgICAgICAgIEtleSAgICAgICAgICA9PiBcQFNlYXJjaEZpZWxkcywKICAgICAgICAgICAgVmFsdWUgICAgICAgID0+ICRQYXJhbXtXaGF0fSwKICAgICAgICAgICAgU2VhcmNoUHJlZml4ID0+ICcqJywKICAgICAgICAgICAgU2VhcmNoU3VmZml4ID0+ICcqJywKICAgICAgICApOwogICAgfQoKICAgICMgc2VhcmNoIGZvciB0aGUgbnVtYmVyCiAgICBpZiAoICRQYXJhbXtOdW1iZXJ9ICkgewogICAgICAgICRQYXJhbXtOdW1iZXJ9ID1+IHMvXCovJS9nOwogICAgICAgICRQYXJhbXtOdW1iZXJ9ID1+IHMvJSUvJS9nOwogICAgICAgICRQYXJhbXtOdW1iZXJ9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17TnVtYmVyfSwgJ0xpa2UnICk7CiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRFeHQgLj0gIiBMT1dFUihzLm51bWJlcikgTElLRSBMT1dFUignIiAuICRQYXJhbXtOdW1iZXJ9IC4gIicpICRTZWxmLT57TGlrZUVzY2FwZVN0cmluZ30iOwogICAgfQoKICAgICMgc2VhcmNoIGZvciB0aGUgdGl0bGUKICAgIGlmICggJFBhcmFte1RpdGxlfSApIHsKICAgICAgICAkUGFyYW17VGl0bGV9ID0gIlwlJFBhcmFte1RpdGxlfVwlIjsKICAgICAgICAkUGFyYW17VGl0bGV9ID1+IHMvXCovJS9nOwogICAgICAgICRQYXJhbXtUaXRsZX0gPX4gcy8lJS8lL2c7CiAgICAgICAgJFBhcmFte1RpdGxlfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1RpdGxlfSwgJ0xpa2UnICk7CiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRFeHQgLj0gIiBMT1dFUihzLnRpdGxlKSBMSUtFIExPV0VSKCciIC4gJFBhcmFte1RpdGxlfSAuICInKSAkU2VsZi0+e0xpa2VFc2NhcGVTdHJpbmd9IjsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgdGhlIGludHJvZHVjdGlvbgogICAgaWYgKCAkUGFyYW17SW50cm9kdWN0aW9ufSApIHsKICAgICAgICAkUGFyYW17SW50cm9kdWN0aW9ufSA9ICJcJSRQYXJhbXtJbnRyb2R1Y3Rpb259XCUiOwogICAgICAgICRQYXJhbXtJbnRyb2R1Y3Rpb259ID1+IHMvXCovJS9nOwogICAgICAgICRQYXJhbXtJbnRyb2R1Y3Rpb259ID1+IHMvJSUvJS9nOwogICAgICAgICRQYXJhbXtJbnRyb2R1Y3Rpb259ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17SW50cm9kdWN0aW9ufSwgJ0xpa2UnICk7CiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRFeHQKICAgICAgICAgICAgLj0gIiBMT1dFUihzLmludHJvZHVjdGlvbikgTElLRSBMT1dFUignIgogICAgICAgICAgICAuICRQYXJhbXtJbnRyb2R1Y3Rpb259CiAgICAgICAgICAgIC4gIicpICRTZWxmLT57TGlrZUVzY2FwZVN0cmluZ30iOwogICAgfQoKICAgICMgc2VhcmNoIGZvciB0aGUgZGVzY3JpcHRpb24KICAgIGlmICggJFBhcmFte0Rlc2NyaXB0aW9ufSApIHsKICAgICAgICAkUGFyYW17RGVzY3JpcHRpb259ID0gIlwlJFBhcmFte0Rlc2NyaXB0aW9ufVwlIjsKICAgICAgICAkUGFyYW17RGVzY3JpcHRpb259ID1+IHMvXCovJS9nOwogICAgICAgICRQYXJhbXtEZXNjcmlwdGlvbn0gPX4gcy8lJS8lL2c7CiAgICAgICAgJFBhcmFte0Rlc2NyaXB0aW9ufSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte0Rlc2NyaXB0aW9ufSwgJ0xpa2UnICk7CiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRFeHQKICAgICAgICAgICAgLj0gIiBMT1dFUihzLmRlc2NyaXB0aW9uKSBMSUtFIExPV0VSKCciCiAgICAgICAgICAgIC4gJFBhcmFte0Rlc2NyaXB0aW9ufQogICAgICAgICAgICAuICInKSAkU2VsZi0+e0xpa2VFc2NhcGVTdHJpbmd9IjsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBzZW5kZXIKICAgIGlmICggJFBhcmFte05vdGlmaWNhdGlvblNlbmRlcn0gKSB7CiAgICAgICAgJFBhcmFte05vdGlmaWNhdGlvblNlbmRlcn0gPSAiXCUkUGFyYW17Tm90aWZpY2F0aW9uU2VuZGVyfVwlIjsKICAgICAgICAkUGFyYW17Tm90aWZpY2F0aW9uU2VuZGVyfSA9fiBzL1wqLyUvZzsKICAgICAgICAkUGFyYW17Tm90aWZpY2F0aW9uU2VuZGVyfSA9fiBzLyUlLyUvZzsKICAgICAgICAkUGFyYW17Tm90aWZpY2F0aW9uU2VuZGVyfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte05vdGlmaWNhdGlvblNlbmRlcn0sICdMaWtlJyApOwogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0CiAgICAgICAgICAgIC49ICIgTE9XRVIocy5ub3RpZmljYXRpb25fc2VuZGVyKSBMSUtFIExPV0VSKCciCiAgICAgICAgICAgIC4gJFBhcmFte05vdGlmaWNhdGlvblNlbmRlcn0KICAgICAgICAgICAgLiAiJykgJFNlbGYtPntMaWtlRXNjYXBlU3RyaW5nfSI7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIHRoZSBub3RpZmljYXRpb24gc3ViamVjdAogICAgaWYgKCAkUGFyYW17Tm90aWZpY2F0aW9uU3ViamVjdH0gKSB7CiAgICAgICAgJFBhcmFte05vdGlmaWNhdGlvblN1YmplY3R9ID0gIlwlJFBhcmFte05vdGlmaWNhdGlvblN1YmplY3R9XCUiOwogICAgICAgICRQYXJhbXtOb3RpZmljYXRpb25TdWJqZWN0fSA9fiBzL1wqLyUvZzsKICAgICAgICAkUGFyYW17Tm90aWZpY2F0aW9uU3ViamVjdH0gPX4gcy8lJS8lL2c7CiAgICAgICAgJFBhcmFte05vdGlmaWNhdGlvblN1YmplY3R9CiAgICAgICAgICAgID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17Tm90aWZpY2F0aW9uU3ViamVjdH0sICdMaWtlJyApOwogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0CiAgICAgICAgICAgIC49ICIgTE9XRVIocy5ub3RpZmljYXRpb25fc3ViamVjdCkgTElLRSBMT1dFUignIgogICAgICAgICAgICAuICRQYXJhbXtOb3RpZmljYXRpb25TdWJqZWN0fQogICAgICAgICAgICAuICInKSAkU2VsZi0+e0xpa2VFc2NhcGVTdHJpbmd9IjsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBib2R5CiAgICBpZiAoICRQYXJhbXtOb3RpZmljYXRpb25Cb2R5fSApIHsKICAgICAgICAkUGFyYW17Tm90aWZpY2F0aW9uQm9keX0gPSAiXCUkUGFyYW17Tm90aWZpY2F0aW9uQm9keX1cJSI7CiAgICAgICAgJFBhcmFte05vdGlmaWNhdGlvbkJvZHl9ID1+IHMvXCovJS9nOwogICAgICAgICRQYXJhbXtOb3RpZmljYXRpb25Cb2R5fSA9fiBzLyUlLyUvZzsKICAgICAgICAkUGFyYW17Tm90aWZpY2F0aW9uQm9keX0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtOb3RpZmljYXRpb25Cb2R5fSwgJ0xpa2UnICk7CiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRFeHQKICAgICAgICAgICAgLj0gIiBMT1dFUihzLm5vdGlmaWNhdGlvbl9ib2R5KSBMSUtFIExPV0VSKCciCiAgICAgICAgICAgIC4gJFBhcmFte05vdGlmaWNhdGlvbkJvZHl9CiAgICAgICAgICAgIC4gIicpICRTZWxmLT57TGlrZUVzY2FwZVN0cmluZ30iOwogICAgfQoKICAgICMgc2VhcmNoIGZvciB0aGUgc3RhdHVzCiAgICBpZiAoICRQYXJhbXtTdGF0dXN9ICkgewogICAgICAgICRQYXJhbXtTdGF0dXN9ID0gIlwlJFBhcmFte1N0YXR1c31cJSI7CiAgICAgICAgJFBhcmFte1N0YXR1c30gPX4gcy9cKi8lL2c7CiAgICAgICAgJFBhcmFte1N0YXR1c30gPX4gcy8lJS8lL2c7CiAgICAgICAgJFBhcmFte1N0YXR1c30gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtTdGF0dXN9LCAnTGlrZScgKTsKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dCAuPSAiIExPV0VSKHMuc3RhdHVzKSBMSUtFIExPV0VSKCciIC4gJFBhcmFte1N0YXR1c30gLiAiJykgJFNlbGYtPntMaWtlRXNjYXBlU3RyaW5nfSI7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIHRoZSBjcmVhdGUgYnkKICAgIGlmICggJFBhcmFte0NyZWF0ZUJ5fSApIHsKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dCAuPSAiIHMuY3JlYXRlX2J5ID0gIiAuICRQYXJhbXtDcmVhdGVCeX07CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIHRoZSBjcmVhdGUgYnkKICAgIGlmICggJFBhcmFte0NoYW5nZUJ5fSApIHsKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dCAuPSAiIHMuY3JlYXRlX2J5ID0gIiAuICRQYXJhbXtDaGFuZ2VCeX07CiAgICB9CgogICAgIyBzZXQgdGltZSBwYXJhbXMKICAgIG15ICVUaW1lUGFyYW1zID0gKAoKICAgICAgICAjIHRpbWVzIGluIGNoYW5nZV9pdGVtCiAgICAgICAgQ3JlYXRlVGltZU5ld2VyRGF0ZSA9PiAncy5jcmVhdGVfdGltZSA+PScsCiAgICAgICAgQ3JlYXRlVGltZU9sZGVyRGF0ZSA9PiAncy5jcmVhdGVfdGltZSA8PScsCiAgICAgICAgQ2hhbmdlVGltZU5ld2VyRGF0ZSA9PiAncy5jaGFuZ2VfdGltZSA+PScsCiAgICAgICAgQ2hhbmdlVGltZU9sZGVyRGF0ZSA9PiAncy5jaGFuZ2VfdGltZSA8PScsCiAgICApOwoKICAgICMgY2hlY2sgYW5kIGFkZCB0aW1lIHBhcmFtcyB0byBXSEVSRQogICAgVElNRVBBUkFNOgogICAgZm9yIG15ICRUaW1lUGFyYW0gKCBrZXlzICVUaW1lUGFyYW1zICkgewoKICAgICAgICBuZXh0IFRJTUVQQVJBTSBpZiAhJFBhcmFteyRUaW1lUGFyYW19OwoKICAgICAgICAjIGNoZWNrIGZvcm1hdAogICAgICAgIGlmICggJFBhcmFteyRUaW1lUGFyYW19ICF+IG17IFxBIFxkXGRcZFxkLVxkXGQtXGRcZCBccyBcZFxkOlxkXGQ6XGRcZCBceiB9eG1zICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVGhlIHBhcmFtZXRlciAkVGltZVBhcmFtIGhhcyBhbiBpbnZhbGlkIGRhdGUgZm9ybWF0ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkUGFyYW17JFRpbWVQYXJhbX0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskVGltZVBhcmFtfSApOwoKICAgICAgICAjIGFkZCB0aW1lIHBhcmFtZXRlciB0byBXSEVSRQogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0IC49ICIkVGltZVBhcmFtc3skVGltZVBhcmFtfSAnJFBhcmFteyRUaW1lUGFyYW19JyI7CiAgICB9CgogICAgIyBhZGQgV0hFUkUgc3RhdGVtZW50CiAgICBpZiAoJEV4dCkgewogICAgICAgICRFeHQgPSAnIFdIRVJFICcgLiAkRXh0OwogICAgfQoKICAgICMgYWRkIHRoZSBPUkRFUiBCWSBjbGF1c2UKICAgIGlmIChAU1FMT3JkZXJCeSkgewogICAgICAgICRFeHQgLj0gJ09SREVSIEJZICc7CiAgICAgICAgJEV4dCAuPSBqb2luICcsICcsIEBTUUxPcmRlckJ5OwogICAgICAgICRFeHQgLj0gJyAnOwogICAgICAgIGlmIChAT3JkZXJCeUZpZWxkcykgewogICAgICAgICAgICAkU1FMIC49ICcsICcgLiBqb2luICcsICcsIEBPcmRlckJ5RmllbGRzOwogICAgICAgIH0KICAgIH0KCiAgICAjIGFkZCBleHRlbmRlZCBTUUwKICAgICRTUUwgLj0gJyBGUk9NIHN1cnZleSBzICc7CiAgICAkU1FMIC49ICRFeHQ7CgogICAgIyBhc2sgZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBMaW1pdCA9PiAkUGFyYW17TGltaXR9LAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBMaXN0LCAkUm93WzBdOwogICAgfQogICAgcmV0dXJuIEBMaXN0Owp9Cgo9aXRlbSBHZXRSaWNoVGV4dERvY3VtZW50Q29tcGxldGUoKQoKZ2V0IHNvbWUgdGV4dCByZWFkeSB0byBzaG93IGFzIHJpY2h0ZXh0IGF0dGFjaG1lbnQgaW5saW5lCgogICAgbXkgJFJpY2hUZXh0RG9jdW1lbnRDb21wbGV0ZSA9ICRTdXJ2ZXlPYmplY3QtPkdldFJpY2hUZXh0RG9jdW1lbnRDb21wbGV0ZSgKICAgICAgICBUZXh0ID0+ICRSaWNoVGV4dCwKICAgICk7Cgo9Y3V0CgpzdWIgR2V0UmljaFRleHREb2N1bWVudENvbXBsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRleHQpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50IHBhcmFtZXRlciEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2xlYW4gaHRtbCBzdHJpbmcKICAgIG15ICRUZXh0ID0gJFBhcmFte1RleHR9OwogICAgJFRleHQgPX4gc3tcQVwkaHRtbFwvdGV4dFwkXHMoLiopfXskMX14bXM7CgogICAgIyBnZXQgZG9jdW1lbnQgY29tcGxldGUKICAgIG15ICRIVE1MRG9jdW1lbnRDb21wbGV0ZSA9ICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fS0+RG9jdW1lbnRDb21wbGV0ZSgKICAgICAgICBTdHJpbmcgID0+ICRUZXh0LAogICAgICAgIENoYXJzZXQgPT4gJ3V0Zi04JywKICAgICk7CgogICAgcmV0dXJuICRIVE1MRG9jdW1lbnRDb21wbGV0ZTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1oZWFkMSBWRVJTSU9OCgokUmV2aXNpb246IDEuNjYgJCAkRGF0ZTogMjAxMi8wMS8xOSAxNjoxMDowNyAkCgo9Y3V0Cg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vVGlja2V0L0V2ZW50L1N1cnZleVNlbmRSZXF1ZXN0LnBtIC0gc2VuZCBzdXJ2ZXkgcmVxdWVzdHMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IFN1cnZleVNlbmRSZXF1ZXN0LnBtLHYgMS4xNCAyMDEwLzA1LzIxIDEyOjQ5OjUyIG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkV2ZW50OjpTdXJ2ZXlTZW5kUmVxdWVzdDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6U3VydmV5OwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9IHF3KCRSZXZpc2lvbjogMS4xNCAkKSBbMV07CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0ICgKICAgICAgICBxdyhDb25maWdPYmplY3QgVGlja2V0T2JqZWN0IExvZ09iamVjdCBVc2VyT2JqZWN0IERCT2JqZWN0IE1haW5PYmplY3QgVGltZU9iamVjdCBFbmNvZGVPYmplY3QpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQogICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OlN1cnZleS0+bmV3KCAleyRTZWxmfSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUaWNrZXRJRCBFdmVudCBDb25maWcpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHRpY2tldCBkYXRhCiAgICBteSAlVGlja2V0ID0gJFNlbGYtPntUaWNrZXRPYmplY3R9LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICk7CgogICAgcmV0dXJuIDEgaWYgJFRpY2tldHtTdGF0ZVR5cGV9IG5lICdjbG9zZWQnOwoKICAgICMgc2VuZCBhbHNvIHN1cnZleSByZXF1ZXN0IG9uIHRpY2tldCBjcmVhdGlvbiAob24gZmlyc3QgYXJ0aWNsZSkKICAgIGlmICggJFBhcmFte0V2ZW50fSBlcSAnQXJ0aWNsZUNyZWF0ZScgKSB7CgogICAgICAgIG15IEBBcnRpY2xlSW5kZXggPSAkU2VsZi0+e1RpY2tldE9iamVjdH0tPkFydGljbGVJbmRleCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gMSBpZiBzY2FsYXIgQEFydGljbGVJbmRleCAhPSAxOwogICAgfQoKICAgICMgc2VuZCByZXF1ZXN0CiAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlJlcXVlc3RTZW5kKAogICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIFN1cnZleS50IC0gU3VydmV5IHRlc3RzCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBTdXJ2ZXkudCx2IDEuMjEgMjAxMi8wMS8xOSAxNTo1NToyMyBtYiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIHF3KCRTZWxmKTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyOwp1c2UgS2VybmVsOjpTeXN0ZW06OkVtYWlsOwp1c2UgS2VybmVsOjpTeXN0ZW06OlN1cnZleTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VXNlcjsKCiMgY3JlYXRlIGxvY2FsIGNvbmZpZyBvYmplY3QKbXkgJENvbmZpZ09iamVjdCA9IEtlcm5lbDo6Q29uZmlnLT5uZXcoKTsKCiMgc2V0IGNvbmZpZyB0byBub3Qgc2VuZCBlbWFpbHMKJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ1NlbmRtYWlsTW9kdWxlJywKICAgIFZhbHVlID0+ICdLZXJuZWw6OlN5c3RlbTo6RW1haWw6OkRvTm90U2VuZEVtYWlsJywKKTsKCiMgY3JlYXRlIGxvY2FsIG9iamVjdHMKbXkgJFVzZXJPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6VXNlci0+bmV3KAogICAgJXskU2VsZn0sCiAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKKTsKbXkgJFRpY2tldE9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQtPm5ldygKICAgICV7JFNlbGZ9LAogICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCik7Cm15ICRTdXJ2ZXlPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6U3VydmV5LT5uZXcoCiAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgIExvZ09iamVjdCAgICA9PiAkU2VsZi0+e0xvZ09iamVjdH0sCiAgICBUaW1lT2JqZWN0ICAgPT4gJFNlbGYtPntUaW1lT2JqZWN0fSwKICAgIERCT2JqZWN0ICAgICA9PiAkU2VsZi0+e0RCT2JqZWN0fSwKICAgIE1haW5PYmplY3QgICA9PiAkU2VsZi0+e01haW5PYmplY3R9LAogICAgRW5jb2RlT2JqZWN0ID0+ICRTZWxmLT57RW5jb2RlT2JqZWN0fSwKICAgIFVzZXJPYmplY3QgICA9PiAkVXNlck9iamVjdCwKKTsKCiMgY2xlYW51cCBzeXN0ZW0KJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSBzdXJ2ZXlfcmVxdWVzdCBXSEVSRSBzZW5kX3RvIExJS0UgJ1wlXEB1bml0dGVzdC5jb21cJSciLAopOwoKIyBjcmVhdGUgc3VydmV5Cm15ICVTdXJ2ZXlEYXRhID0gKAogICAgVGl0bGUgICAgICAgICAgICAgICA9PiAnQSBUaXRsZScsCiAgICBJbnRyb2R1Y3Rpb24gICAgICAgID0+ICdUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBzdXJ2ZXknLAogICAgRGVzY3JpcHRpb24gICAgICAgICA9PiAnVGhlIGludGVybmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBzdXJ2ZXknLAogICAgTm90aWZpY2F0aW9uU2VuZGVyICA9PiAncXVhbGl0eUB1bml0dGVzdC5jb20nLAogICAgTm90aWZpY2F0aW9uU3ViamVjdCA9PiAnSGVscCB1cyB3aXRoIHlvdXIgZmVlZGJhY2shIMOEw5bDnCcsCiAgICBOb3RpZmljYXRpb25Cb2R5ICAgID0+ICdEZWFyIGN1c3RvbWVyLi4uIMOkw7bDvCcsCik7Cm15ICRTdXJ2ZXlJRCA9ICRTdXJ2ZXlPYmplY3QtPlN1cnZleU5ldygKICAgIFVzZXJJRCA9PiAxLAogICAgJVN1cnZleURhdGEsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1cnZleUlELAogICAgIlN1cnZleU5ldygpIiwKKTsKCmZvciAoIDEgLi4gMyApIHsKICAgIG15ICRRdWVzdGlvbkFkZCA9ICRTdXJ2ZXlPYmplY3QtPlF1ZXN0aW9uQWRkKAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgU3VydmV5SUQgPT4gJFN1cnZleUlELAogICAgICAgIFF1ZXN0aW9uID0+ICdUaGUgUXVlc3Rpb24nLAogICAgICAgIFR5cGUgICAgID0+ICdSYWRpbycsCiAgICApOwp9Cm15IEBMaXN0ID0gJFN1cnZleU9iamVjdC0+UXVlc3Rpb25MaXN0KAogICAgU3VydmV5SUQgPT4gJFN1cnZleUlELAopOwpmb3IgbXkgJFF1ZXN0aW9uIChATGlzdCkgewogICAgZm9yICggMSAuLiAzICkgewogICAgICAgICRTdXJ2ZXlPYmplY3QtPkFuc3dlckFkZCgKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICBBbnN3ZXIgICAgID0+ICdUaGUgQW5zd2VyJywKICAgICAgICApOwogICAgfQp9CgpteSAkU3RhdHVzU2V0ID0gJFN1cnZleU9iamVjdC0+U3VydmV5U3RhdHVzU2V0KAogICAgU3VydmV5SUQgID0+ICRTdXJ2ZXlJRCwKICAgIE5ld1N0YXR1cyA9PiAnTWFzdGVyJwopOwokU2VsZi0+SXMoCiAgICAkU3RhdHVzU2V0LAogICAgJ1N0YXR1c1NldCcsCiAgICAiU3VydmV5U3RhdHVzU2V0KCkiLAopOwoKbXkgJVN1cnZleUdldCA9ICRTdXJ2ZXlPYmplY3QtPlN1cnZleUdldCgKICAgIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCwKKTsKCmZvciBteSAkS2V5ICggc29ydCBrZXlzICVTdXJ2ZXlHZXQgKSB7CiAgICBuZXh0IGlmICFkZWZpbmVkICRTdXJ2ZXlEYXRheyRLZXl9OwogICAgJFNlbGYtPklzKAogICAgICAgICRTdXJ2ZXlHZXR7JEtleX0sCiAgICAgICAgJFN1cnZleURhdGF7JEtleX0sCiAgICAgICAgIlN1cnZleUdldCgpIiwKICAgICk7Cn0KCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnIzEgdHJ5JywKICAgICAgICAnU3VydmV5OjpTZW5kUGVyaW9kJyA9PiAxMDAsCiAgICAgICAgVGlja2V0ICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1NvbWUgVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ29wZW4nLAogICAgICAgICAgICBDdXN0b21lck5vICAgPT4gJzEyMzQ2NScsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJAdW5pdHRlc3QuY29tJywKICAgICAgICAgICAgT3duZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgIEFydGljbGVUeXBlICAgID0+ICdlbWFpbC1leHRlcm5hbCcsCiAgICAgICAgICAgIFNlbmRlclR5cGUgICAgID0+ICdjdXN0b21lcicsCiAgICAgICAgICAgIEZyb20gICAgICAgICAgID0+ICdTb21lIEN1c3RvbWVyIDxzb21lQHVuaXR0ZXN0LmNvbT4nLAogICAgICAgICAgICBUbyAgICAgICAgICAgICA9PiAnU29tZSBUbyA8dG9AdW5pdHRlc3QuY29tPicsCiAgICAgICAgICAgIFN1YmplY3QgICAgICAgID0+ICdTb21lIFN1YmplY3QnLAogICAgICAgICAgICBCb2R5ICAgICAgICAgICA9PiAndGhlIG1lc3NhZ2UgdGV4dCcsCiAgICAgICAgICAgIE1lc3NhZ2VJRCAgICAgID0+ICc8YXNkYXNkYXNkLjEyM0B1bml0dGVzdC5jb20+JywKICAgICAgICAgICAgQ29udGVudFR5cGUgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMTUnLAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgICA9PiAnT3duZXJVcGRhdGUnLAogICAgICAgICAgICBIaXN0b3J5Q29tbWVudCA9PiAnU29tZSBmcmVlIHRleHQhJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTm9BZ2VudE5vdGlmeSA9PiAxLCAgICAjIGlmIHlvdSBkb24ndCB3YW50IHRvIHNlbmQgYWdlbnQgbm90aWZpY2F0aW9ucwogICAgICAgIH0sCiAgICAgICAgUmVzdWx0ID0+IFsKICAgICAgICAgICAgMSwKICAgICAgICAgICAgMCwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnIzIgdHJ5JywKICAgICAgICAnU3VydmV5OjpTZW5kUGVyaW9kJyA9PiAxMDAsCiAgICAgICAgVGlja2V0ICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1NvbWUgVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ29wZW4nLAogICAgICAgICAgICBDdXN0b21lck5vICAgPT4gJzEyMzQ2NScsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJAdW5pdHRlc3QuY29tJywKICAgICAgICAgICAgT3duZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgIEFydGljbGVUeXBlICAgID0+ICdlbWFpbC1leHRlcm5hbCcsCiAgICAgICAgICAgIFNlbmRlclR5cGUgICAgID0+ICdjdXN0b21lcicsCiAgICAgICAgICAgIEZyb20gICAgICAgICAgID0+ICdTb21lIEN1c3RvbWVyIDxTT01FQHVuaXR0ZXN0LmNvbT4nLAogICAgICAgICAgICBUbyAgICAgICAgICAgICA9PiAnU29tZSBUbyA8dG9AdW5pdHRlc3QuY29tPicsCiAgICAgICAgICAgIFN1YmplY3QgICAgICAgID0+ICdTb21lIFN1YmplY3QnLAogICAgICAgICAgICBCb2R5ICAgICAgICAgICA9PiAndGhlIG1lc3NhZ2UgdGV4dCcsCiAgICAgICAgICAgIE1lc3NhZ2VJRCAgICAgID0+ICc8YXNkYXNkYXNkLjEyM0B1bml0dGVzdC5jb20+JywKICAgICAgICAgICAgQ29udGVudFR5cGUgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMTUnLAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgICA9PiAnT3duZXJVcGRhdGUnLAogICAgICAgICAgICBIaXN0b3J5Q29tbWVudCA9PiAnU29tZSBmcmVlIHRleHQhJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTm9BZ2VudE5vdGlmeSA9PiAxLCAgICAjIGlmIHlvdSBkb24ndCB3YW50IHRvIHNlbmQgYWdlbnQgbm90aWZpY2F0aW9ucwogICAgICAgIH0sCiAgICAgICAgUmVzdWx0ID0+IFsKICAgICAgICAgICAgMCwKICAgICAgICAgICAgMCwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnIzMgdHJ5JywKICAgICAgICAnU3VydmV5OjpTZW5kUGVyaW9kJyA9PiAxMDAsCiAgICAgICAgVGlja2V0ICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1NvbWUgVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ29wZW4nLAogICAgICAgICAgICBDdXN0b21lck5vICAgPT4gJzEyMzQ2NScsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJAdW5pdHRlc3QuY29tJywKICAgICAgICAgICAgT3duZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgIEFydGljbGVUeXBlICAgID0+ICdlbWFpbC1leHRlcm5hbCcsCiAgICAgICAgICAgIFNlbmRlclR5cGUgICAgID0+ICdjdXN0b21lcicsCiAgICAgICAgICAgIEZyb20gICAgICAgICAgID0+ICdTT01FQHVuaXR0ZXN0LmNvbScsCiAgICAgICAgICAgIFRvICAgICAgICAgICAgID0+ICdTb21lIFRvIDx0b0B1bml0dGVzdC5jb20+JywKICAgICAgICAgICAgU3ViamVjdCAgICAgICAgPT4gJ1NvbWUgU3ViamVjdCcsCiAgICAgICAgICAgIEJvZHkgICAgICAgICAgID0+ICd0aGUgbWVzc2FnZSB0ZXh0JywKICAgICAgICAgICAgTWVzc2FnZUlEICAgICAgPT4gJzxhc2Rhc2Rhc2QuMTIzQHVuaXR0ZXN0LmNvbT4nLAogICAgICAgICAgICBDb250ZW50VHlwZSAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xNScsCiAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgID0+ICdPd25lclVwZGF0ZScsCiAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ID0+ICdTb21lIGZyZWUgdGV4dCEnLAogICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICAgICBOb0FnZW50Tm90aWZ5ID0+IDEsICAgICMgaWYgeW91IGRvbid0IHdhbnQgdG8gc2VuZCBhZ2VudCBub3RpZmljYXRpb25zCiAgICAgICAgfSwKICAgICAgICBSZXN1bHQgPT4gWwogICAgICAgICAgICAwLAogICAgICAgICAgICAwLAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgICAgICAgID0+ICcjNCB0cnknLAogICAgICAgIFNsZWVwICAgICAgICAgICAgICAgID0+IDgwLAogICAgICAgICdTdXJ2ZXk6OlNlbmRQZXJpb2QnID0+IDEgLyAyNCAvIDYwLAogICAgICAgIFRpY2tldCAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdTb21lIFRpY2tldCBUaXRsZScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgICAgICAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICdvcGVuJywKICAgICAgICAgICAgQ3VzdG9tZXJObyAgID0+ICcxMjM0NjUnLAogICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyQHVuaXR0ZXN0LmNvbScsCiAgICAgICAgICAgIE93bmVySUQgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICBBcnRpY2xlVHlwZSAgICA9PiAnZW1haWwtZXh0ZXJuYWwnLAogICAgICAgICAgICBTZW5kZXJUeXBlICAgICA9PiAnY3VzdG9tZXInLAogICAgICAgICAgICBGcm9tICAgICAgICAgICA9PiAnU09NRUB1bml0dGVzdC5jb20nLAogICAgICAgICAgICBUbyAgICAgICAgICAgICA9PiAnU29tZSBUbyA8dG9AdW5pdHRlc3QuY29tPicsCiAgICAgICAgICAgIFN1YmplY3QgICAgICAgID0+ICdTb21lIFN1YmplY3QnLAogICAgICAgICAgICBCb2R5ICAgICAgICAgICA9PiAndGhlIG1lc3NhZ2UgdGV4dCcsCiAgICAgICAgICAgIE1lc3NhZ2VJRCAgICAgID0+ICc8YXNkYXNkYXNkLjEyM0B1bml0dGVzdC5jb20+JywKICAgICAgICAgICAgQ29udGVudFR5cGUgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMTUnLAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgICA9PiAnT3duZXJVcGRhdGUnLAogICAgICAgICAgICBIaXN0b3J5Q29tbWVudCA9PiAnU29tZSBmcmVlIHRleHQhJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTm9BZ2VudE5vdGlmeSA9PiAxLCAgICAjIGlmIHlvdSBkb24ndCB3YW50IHRvIHNlbmQgYWdlbnQgbm90aWZpY2F0aW9ucwogICAgICAgIH0sCiAgICAgICAgUmVzdWx0ID0+IFsKICAgICAgICAgICAgMSwKICAgICAgICAgICAgMCwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnIzUgdHJ5JywKICAgICAgICBTbGVlcCAgICAgICAgICAgICAgICA9PiAyMCwKICAgICAgICAnU3VydmV5OjpTZW5kUGVyaW9kJyA9PiAxIC8gMjQgLyA2MCwKICAgICAgICBUaWNrZXQgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnU29tZSBUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnb3BlbicsCiAgICAgICAgICAgIEN1c3RvbWVyTm8gICA9PiAnMTIzNDY1JywKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICdjdXN0b21lckB1bml0dGVzdC5jb20nLAogICAgICAgICAgICBPd25lcklEICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgQXJ0aWNsZVR5cGUgICAgPT4gJ2VtYWlsLWV4dGVybmFsJywKICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgPT4gJ2N1c3RvbWVyJywKICAgICAgICAgICAgRnJvbSAgICAgICAgICAgPT4gJ1NPTUVAdW5pdHRlc3QuY29tJywKICAgICAgICAgICAgVG8gICAgICAgICAgICAgPT4gJ1NvbWUgVG8gPHRvQHVuaXR0ZXN0LmNvbT4nLAogICAgICAgICAgICBTdWJqZWN0ICAgICAgICA9PiAnU29tZSBTdWJqZWN0JywKICAgICAgICAgICAgQm9keSAgICAgICAgICAgPT4gJ3RoZSBtZXNzYWdlIHRleHQnLAogICAgICAgICAgICBNZXNzYWdlSUQgICAgICA9PiAnPGFzZGFzZGFzZC4xMjNAdW5pdHRlc3QuY29tPicsCiAgICAgICAgICAgIENvbnRlbnRUeXBlICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTE1JywKICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgPT4gJ093bmVyVXBkYXRlJywKICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgPT4gJ1NvbWUgZnJlZSB0ZXh0IScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE5vQWdlbnROb3RpZnkgPT4gMSwgICAgIyBpZiB5b3UgZG9uJ3Qgd2FudCB0byBzZW5kIGFnZW50IG5vdGlmaWNhdGlvbnMKICAgICAgICB9LAogICAgICAgIFJlc3VsdCA9PiBbCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgIDAsCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICcjNiB0cnknLAogICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnU29tZSBUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnb3BlbicsCiAgICAgICAgICAgIEN1c3RvbWVyTm8gICA9PiAnMTIzNDY1JywKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICdjdXN0b21lckB1bml0dGVzdC5jb20nLAogICAgICAgICAgICBPd25lcklEICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgQXJ0aWNsZVR5cGUgICAgPT4gJ2VtYWlsLWV4dGVybmFsJywKICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgPT4gJ2N1c3RvbWVyJywKICAgICAgICAgICAgRnJvbSAgICAgICAgICAgPT4gJ015IE5hbWUnLAogICAgICAgICAgICBUbyAgICAgICAgICAgICA9PiAnU29tZSBUbyA8dG9AdW5pdHRlc3QuY29tPicsCiAgICAgICAgICAgIFN1YmplY3QgICAgICAgID0+ICdTb21lIFN1YmplY3QnLAogICAgICAgICAgICBCb2R5ICAgICAgICAgICA9PiAndGhlIG1lc3NhZ2UgdGV4dCcsCiAgICAgICAgICAgIE1lc3NhZ2VJRCAgICAgID0+ICc8YXNkYXNkYXNkLjEyM0B1bml0dGVzdC5jb20+JywKICAgICAgICAgICAgQ29udGVudFR5cGUgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMTUnLAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgICA9PiAnT3duZXJVcGRhdGUnLAogICAgICAgICAgICBIaXN0b3J5Q29tbWVudCA9PiAnU29tZSBmcmVlIHRleHQhJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTm9BZ2VudE5vdGlmeSA9PiAxLCAgICAjIGlmIHlvdSBkb24ndCB3YW50IHRvIHNlbmQgYWdlbnQgbm90aWZpY2F0aW9ucwogICAgICAgIH0sCiAgICAgICAgUmVzdWx0ID0+IFsKICAgICAgICAgICAgMCwKICAgICAgICAgICAgMCwKICAgICAgICBdLAogICAgfSwKKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgaWYgKCAkVGVzdC0+eydTdXJ2ZXk6OlNlbmRQZXJpb2QnfSApIHsKICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgIEtleSAgID0+ICdTdXJ2ZXk6OlNlbmRQZXJpb2QnLAogICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+eydTdXJ2ZXk6OlNlbmRQZXJpb2QnfSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFRlc3QtPntTbGVlcH0gKSB7CiAgICAgICAgc2xlZXAgJFRlc3QtPntTbGVlcH07CiAgICB9CgogICAgbXkgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgICAgICV7ICRUZXN0LT57VGlja2V0fSB9LAogICAgKTsKCiAgICBteSAkQXJ0aWNsZUlEID0gJFRpY2tldE9iamVjdC0+QXJ0aWNsZUNyZWF0ZSgKICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgJXsgJFRlc3QtPntBcnRpY2xlfSB9LAogICAgKTsKCiAgICAjIHNlbmQgc3VydmV5IGZpcnN0IHRpbWUKICAgIG15ICggJEhlYWRlclJlZiwgJEJvZHlSZWYgKSA9ICRTdXJ2ZXlPYmplY3QtPlJlcXVlc3RTZW5kKAogICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICk7CgogICAgIyBjaGVjayBpZiBzdXJ2ZXkgZ290IHNlbnQKICAgIGlmICggJFRlc3QtPntSZXN1bHR9LT5bMF0gKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkeyRIZWFkZXJSZWZ9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBSZXF1ZXN0U2VuZCgpIC0gc3VydmV5IGdvdCBzZW50IiwKICAgICAgICApOwoKICAgICAgICAkeyRIZWFkZXJSZWZ9ID1+IG17IF4gU3ViamVjdDogWyBdICggLis/ICkgXG4gXFMrOiBbIF0gfXhtczsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICQxLAogICAgICAgICAgICAnSGVscCB1cyB3aXRoIHlvdXIgZmVlZGJhY2shID0/VVRGLTg/UT89QzM9ODQ9QzM9OTY9QzM9OUM/PScsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IFRlc3Qgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGVtYWlsIHN1YmplY3QiLAogICAgICAgICk7CgogICAgICAgICMgZGVmaW5lIG1haWwgYm9keQogICAgICAgIG15ICRNYWlsYm9keTEgPSAiVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4uLgoKLS0tLS0tLS0tLS0tPV9NRVNTQUdFSUQKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVwidXRmLThcIgpDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQoKRGVhciBjdXN0b21lci4uLiA9QzM9QTQ9QzM9QjY9QzM9QkM9CgotLS0tLS0tLS0tLS09X01FU1NBR0VJRApDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1cInV0Zi04XCIKQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKCjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9M0RcIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9M0RcInRleHQvaHRtbDsgY2hhcnNldD0KPTNEdXRmLThcIi8+PC9oZWFkPjxib2R5IHN0eWxlPTNEXCJmb250LWZhbWlseTpHZW5ldmEsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2U9CnJpZjsgZm9udC1zaXplOiAxMnB4O1wiPkRlYXIgY3VzdG9tZXIuLi4gPUMzPUE0PUMzPUI2PUMzPUJDPC9ib2R5PjwvaHRtbD49CgotLS0tLS0tLS0tLS09X01FU1NBR0VJRC0tCiI7CgogICAgICAgICMgY29weSBtYWlsIGJvZHkKICAgICAgICBteSAkTWFpbGJvZHkyID0gJHskQm9keVJlZn07CgogICAgICAgICMgcHJlcGFyZSBtYWlsIGJvZHkKICAgICAgICAkTWFpbGJvZHkyID1+IHN7IFxkezgsMTJ9IC0gXGR7Myw2fSAtIFxkezEsM30gfXtNRVNTQUdFSUR9eG1zZzsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkTWFpbGJvZHkyLAogICAgICAgICAgICAkTWFpbGJvZHkxLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBUZXN0IHNwZWNpYWwgY2hhcmFjdGVycyBpbiBlbWFpbCBib2R5IiwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkeyRIZWFkZXJSZWZ9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBSZXF1ZXN0U2VuZCgpIC0gbm8gc3VydmV5IGdvdCBzZW50IiwKICAgICAgICApOwogICAgfQoKICAgICMgc2VuZCBzdXJ2ZXkgc2Vjb25kIHRpbWUKICAgICggJEhlYWRlclJlZiwgJEJvZHlSZWYgKSA9ICRTdXJ2ZXlPYmplY3QtPlJlcXVlc3RTZW5kKAogICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICk7CgogICAgIyBjaGVjayBpZiBzdXJ2ZXkgZ290IHNlbnQKICAgIGlmICggJFRlc3QtPntSZXN1bHR9LT5bMV0gKSB7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICR7JEhlYWRlclJlZn0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IDIgUmVxdWVzdFNlbmQoKSAtIHN1cnZleSBnb3Qgc2VudCIsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJHskSGVhZGVyUmVmfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gMiBSZXF1ZXN0U2VuZCgpIC0gbm8gc3VydmV5IGdvdCBzZW50IiwKICAgICAgICApOwogICAgfQoKICAgIG15ICREZWxldGUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwp9CgojIHRlc3QgR2V0UmljaFRleHREb2N1bWVudENvbXBsZXRlCnsKICAgIG15ICVUZXh0OwoKICAgICN0ZXN0cyBmb3IgcmljaCB0ZXh0CiAgICAkVGV4dHtSaWNoVGV4dH0gPSB7CiAgICAgICAgSW5wdXQgPT4KICAgICAgICAgICAgJyRodG1sL3RleHQkIDxlbT5UaGlzIGlzIHRoZSBpbnRyb2R1Y3Rpb24gdG8gdGhpcyBzdXJ2ZXksIGlmIHlvdSB3YW50IHRvIGFuc3dlciBpdCB5b3UgaGF2ZSB0bzxiciAvPgpyZWFkIHRoaXMgZmlyc3QsIHBsZWFzZSBsZXQgdXMgdGVsbCB5b3UgdGhhbmtzIGZvciB0aGUgb3Bwb3J0dW5pdHkgdG8gaW50ZXJhY3Q8YnIgLz4Kd2l0aCB5b3UuPC9lbT48YnIgLz4KPHVsPgogICAgPGxpPgogICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDEyOCk7Ij5QbGVhc2UgcmVhZCBhbGwgdGhlIGluc3RydWN0aW9uczwvc3Bhbj48L2xpPgogICAgPGxpPgogICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDEyOCk7Ij5QbGVhc2UgdGFrZSBhdHRlbnRpb24gaW4gZXZlcnkgcXVlc3Rpb248L3NwYW4+PC9saT4KICAgIDxsaT4KICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAxMjgpOyI+QW5zd2VyIGFzIGNsZWFyIGFzIHBvc3NpYmxlPC9zcGFuPjwvbGk+CjwvdWw+CjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDI1NSwgMTYwLCAxMjIpOyI+VGhpcyBpcyBhbGwgd2UgaGF2ZSB0byB0ZWxsIHlvdSBmb3Igbm93LCBwbGVhc2UgdGFrZSB0aGUgb3Bwb3J0dW5pdHkgbm93IHRvPGJyIC8+CmV4cHJlc3MgeW91ciBmZWVsaW5ncyBpbiBvdXIgc3VydmV5Ljwvc3Bhbj48YnIgLz4KPGJyIC8+CjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDI1NSwgMTYwLCAxMjIpOyI+IGdyZWV0aW5ncyw8YnIgLz4KPGJyIC8+CmRhbmllbHosPC9zcGFuPjxiciAvPicsCiAgICAgICAgT3V0cHV0ID0+CiAgICAgICAgICAgICc8aHRtbD48aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIvPjwvaGVhZD48Ym9keSBzdHlsZT0iZm9udC1mYW1pbHk6R2VuZXZhLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij48ZW0+VGhpcyBpcyB0aGUgaW50cm9kdWN0aW9uIHRvIHRoaXMgc3VydmV5LCBpZiB5b3Ugd2FudCB0byBhbnN3ZXIgaXQgeW91IGhhdmUgdG88YnIgLz4KcmVhZCB0aGlzIGZpcnN0LCBwbGVhc2UgbGV0IHVzIHRlbGwgeW91IHRoYW5rcyBmb3IgdGhlIG9wcG9ydHVuaXR5IHRvIGludGVyYWN0PGJyIC8+CndpdGggeW91LjwvZW0+PGJyIC8+Cjx1bD4KICAgIDxsaT4KICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAxMjgpOyI+UGxlYXNlIHJlYWQgYWxsIHRoZSBpbnN0cnVjdGlvbnM8L3NwYW4+PC9saT4KICAgIDxsaT4KICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAxMjgpOyI+UGxlYXNlIHRha2UgYXR0ZW50aW9uIGluIGV2ZXJ5IHF1ZXN0aW9uPC9zcGFuPjwvbGk+CiAgICA8bGk+CiAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMTI4KTsiPkFuc3dlciBhcyBjbGVhciBhcyBwb3NzaWJsZTwvc3Bhbj48L2xpPgo8L3VsPgo8c3BhbiBzdHlsZT0iY29sb3I6IHJnYigyNTUsIDE2MCwgMTIyKTsiPlRoaXMgaXMgYWxsIHdlIGhhdmUgdG8gdGVsbCB5b3UgZm9yIG5vdywgcGxlYXNlIHRha2UgdGhlIG9wcG9ydHVuaXR5IG5vdyB0bzxiciAvPgpleHByZXNzIHlvdXIgZmVlbGluZ3MgaW4gb3VyIHN1cnZleS48L3NwYW4+PGJyIC8+CjxiciAvPgo8c3BhbiBzdHlsZT0iY29sb3I6IHJnYigyNTUsIDE2MCwgMTIyKTsiPiBncmVldGluZ3MsPGJyIC8+CjxiciAvPgpkYW5pZWx6LDwvc3Bhbj48YnIgLz48L2JvZHk+PC9odG1sPicsCiAgICB9OwoKICAgICMgY3JlYXRlIHRlc3RzIGZvciBzaW1wbGUgdGV4dAogICAgJFRleHR7U2ltcGxlVGV4dH0gPSB7CiAgICAgICAgSW5wdXQgPT4gIlRoaXMgaXMgYW4gaW50ZXJuYWwgZGVzY3JpcHRpb24gZXhhbXBsZToKCiAtIE9uZQogLSBUd28KIC0gVGhyZWUKIC0gRm91cgogLSBGaXZlCgpUaGF0J3MgaXQuCi1kegoiLAogICAgICAgIE91dHB1dCA9PgogICAgICAgICAgICAnPGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz48L2hlYWQ+PGJvZHkgc3R5bGU9ImZvbnQtZmFtaWx5OkdlbmV2YSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyI+VGhpcyBpcyBhbiBpbnRlcm5hbCBkZXNjcmlwdGlvbiBleGFtcGxlOgoKIC0gT25lCiAtIFR3bwogLSBUaHJlZQogLSBGb3VyCiAtIEZpdmUKClRoYXRcJ3MgaXQuCi1kego8L2JvZHk+PC9odG1sPicsCiAgICB9OwoKICAgIG15ICREb2N1bWVudENvbXBsZXRlOwogICAgZm9yIG15ICRUZXh0VHlwZSAoIGtleXMgJVRleHQgKSB7CiAgICAgICAgJERvY3VtZW50Q29tcGxldGUKICAgICAgICAgICAgPSAkU3VydmV5T2JqZWN0LT5HZXRSaWNoVGV4dERvY3VtZW50Q29tcGxldGUoIFRleHQgPT4gJFRleHR7JFRleHRUeXBlfS0+e0lucHV0fSApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFRleHR7JFRleHRUeXBlfS0+e091dHB1dH0sCiAgICAgICAgICAgICREb2N1bWVudENvbXBsZXRlLAogICAgICAgICAgICAiR2V0UmljaFRleHREb2N1bWVudENvbXBsZXRlIFRlc3QgLSAkVGV4dFR5cGUiLAogICAgICAgICk7CiAgICB9Cn0KCiMgYWRkZWQgKHZlcnkgbGltaXRlZCkgU3VydmV5U2VhcmNoIHRlc3RzCgpteSBASURzID0gJFN1cnZleU9iamVjdC0+U3VydmV5U2VhcmNoKAogICAgTm90aWZpY2F0aW9uU2VuZGVyID0+ICdxdWFsaXR5QHVuaXR0ZXN0LmNvbScsCiAgICBMaW1pdCAgICAgICAgICAgICAgPT4gMTUwLCAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwoKJFNlbGYtPlRydWUoCiAgICBzY2FsYXIgQElEcywKICAgICJTdXJ2ZXlTZWFyY2goKSIsCik7CgpteSBAU29ydGVkSURzID0gJFN1cnZleU9iamVjdC0+U3VydmV5U2VhcmNoKAogICAgTm90aWZpY2F0aW9uU2VuZGVyID0+ICdxdWFsaXR5QHVuaXR0ZXN0LmNvbScsCiAgICBPcmRlckJ5ICAgICAgICAgICAgPT4gWyAnU3VydmV5SUQnLCAnVGl0bGUnIF0sICAgICMgKG9wdGlvbmFsKQogICAgT3JkZXJCeURpcmVjdGlvbiAgID0+IFsgJ0Rvd24nLCAnVXAnIF0sICAgICAgICAgICAjIChvcHRpb25hbCkKICAgIExpbWl0ICAgICAgICAgICAgICA9PiAxNTAsICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKCiRTZWxmLT5UcnVlKAogICAgc2NhbGFyIEBJRHMsCiAgICAiU3VydmV5U2VhcmNoKCkgd2l0aCBzb3J0IiwKKTsKCiMgY2xlYW51cCBzeXN0ZW0KJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSBzdXJ2ZXlfcmVxdWVzdCBXSEVSRSBzZW5kX3RvIExJS0UgJ1wlXEB1bml0dGVzdC5jb21cJSciLAopOwoKMTsK
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXRTdXJ2ZXkucG0gLSBwcm92aWRlcyBnZW5lcmljIEhUTUwgb3V0cHV0IGZvciBTdXJ2ZXkKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IExheW91dFN1cnZleS5wbSx2IDEuMiAyMDExLzA0LzExIDE5OjA4OjIyIG1iIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXRTdXJ2ZXk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dDsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OKTsKJFZFUlNJT04gPSBxdygkUmV2aXNpb246IDEuMiAkKSBbMV07Cgo9b3ZlciA0Cgo9aXRlbSBTdXJ2ZXlMaXN0U2hvdygpCgpSZXR1cm5zIGEgbGlzdCBvZiBzdXJ2ZXlzIGxpc3Qgd2l0aCBwYWdpbmF0aW9uLgoKVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIEw8S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dFRpY2tldDo6VGlja2V0TGlzdFNob3coKT4KaW4gRjxLZXJuZWwvT3V0cHV0L0hUTUwvTGF5b3V0VGlja2V0LnBtPi4KCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+U3VydmV5TGlzdFNob3coCiAgICAgICAgU3VydmV5SURzICA9PiAkU3VydmV5SURzUmVmLCAgICAgICAgICAgICAgICAgICAgICAjIHRvdGFsIGxpc3Qgb2Ygc3VydmV5cyBpZHMsIHRoYXQgY2FuIGJlIGxpc3RlZAogICAgICAgIFRvdGFsICAgICAgPT4gc2NhbGFyIEB7ICRTdXJ2ZXlJRHNSZWYgfSwgICAgICAgICAgIyB0b3RhbCBudW1iZXIgb2YgbGlzdCBpdGVtcywgY2hhbmdlcyBpbiB0aGlzIGNhc2UKICAgICAgICBWaWV3ICAgICAgID0+ICRTZWxmLT57Vmlld30sICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIHRoZSBkZWZhdWx0IHZhbHVlIGlzICdTbWFsbCcKICAgICAgICBGaWx0ZXIgICAgID0+ICdBbGwnLAogICAgICAgIEZpbHRlcnMgICAgPT4gXCVOYXZCYXJGaWx0ZXIsCiAgICAgICAgRmlsdGVyTGluayA9PiAkTGlua0ZpbHRlciwKICAgICAgICBUaXRsZU5hbWUgID0+ICdPdmVydmlldzogU3VydmV5JywKICAgICAgICBUaXRsZVZhbHVlID0+ICRTZWxmLT57RmlsdGVyfSwKICAgICAgICBFbnYgICAgICAgID0+ICRTZWxmLAogICAgICAgIExpbmtQYWdlICAgPT4gJExpbmtQYWdlLAogICAgKTsKCj1jdXQKCnN1YiBTdXJ2ZXlMaXN0U2hvdyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdGFrZSBvYmplY3QgcmVmIHRvIGxvY2FsLCByZW1vdmUgaXQgZnJvbSAlUGFyYW0gKHByZXZlbnQgbWVtb3J5IGxlYWspCiAgICBteSAkRW52ID0gZGVsZXRlICRQYXJhbXtFbnZ9OwoKICAgICMgbG9va3VwIGxhdGVzdCB1c2VkIHZpZXcgbW9kZQogICAgaWYgKCAhJFBhcmFte1ZpZXd9ICYmICRTZWxmLT57ICdVc2VyU3VydmV5T3ZlcnZpZXcnIC4gJEVudi0+e0FjdGlvbn0gfSApIHsKICAgICAgICAkUGFyYW17Vmlld30gPSAkU2VsZi0+eyAnVXNlclN1cnZleU92ZXJ2aWV3JyAuICRFbnYtPntBY3Rpb259IH07CiAgICB9CgogICAgIyBzZXQgZnJvbnRlbmQKICAgIG15ICRGcm9udGVuZCA9ICRQYXJhbXtGcm9udGVuZH0gfHwgJ0FnZW50JzsKCiAgICAjIHNldCBkZWZhdXQgdmlldyBtb2RlIHRvICdzbWFsbCcKICAgIG15ICRWaWV3ID0gJFBhcmFte1ZpZXd9IHx8ICdTbWFsbCc7CgogICAgIyBzdG9yZSBsYXRlc3QgdmlldyBtb2RlCiAgICAkU2VsZi0+e1Nlc3Npb25PYmplY3R9LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ1VzZXJTdXJ2ZXlPdmVydmlldycgLiAkRW52LT57QWN0aW9ufSwKICAgICAgICBWYWx1ZSAgICAgPT4gJFZpZXcsCiAgICApOwoKICAgICMgZ2V0IGJhY2tlbmQgZnJvbSBjb25maWcKICAgIG15ICRCYWNrZW5kcyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdTdXJ2ZXk6OkZyb250ZW5kOjpPdmVydmlldycpOwogICAgaWYgKCAhJEJhY2tlbmRzICkgewogICAgICAgIHJldHVybiAkRW52LT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnTmVlZCBjb25maWcgb3B0aW9uIFN1cnZleTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3JywKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgZm9yIGhhc2gtcmVmCiAgICBpZiAoIHJlZiAkQmFja2VuZHMgbmUgJ0hBU0gnICkgewogICAgICAgIHJldHVybiAkRW52LT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnQ29uZmlnIG9wdGlvbiBTdXJ2ZXk6OkZyb250ZW5kOjpPdmVydmlldyBuZWVkcyB0byBiZSBhIEhBU0ggcmVmIScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBjb25maWcga2V5CiAgICBpZiAoICEkQmFja2VuZHMtPnskVmlld30gKSB7CiAgICAgICAgcmV0dXJuICRFbnYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICJObyBjb25maWcgb3B0aW9uIGZvdW5kIGZvciB0aGUgdmlldyAnJFZpZXcnISIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG5hdiBiYXIKICAgIG15ICRTdGFydEhpdCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSgKICAgICAgICBQYXJhbSA9PiAnU3RhcnRIaXQnLAogICAgKSB8fCAxOwoKICAgICMgZ2V0IHBlcnNvbmFsIHBhZ2Ugc2hvd24gY291bnQKICAgIG15ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleSA9ICdVc2VyU3VydmV5T3ZlcnZpZXcnIC4gJFZpZXcgLiAnUGFnZVNob3duJzsKICAgIG15ICRQYWdlU2hvd24gICAgICAgICAgICAgICA9ICRTZWxmLT57JFBhZ2VTaG93blByZWZlcmVuY2VzS2V5fSB8fCAxMDsKICAgIG15ICRHcm91cCAgICAgICAgICAgICAgICAgICA9ICdTdXJ2ZXlPdmVydmlldycgLiAkVmlldyAuICdQYWdlU2hvd24nOwoKICAgICMgY2hlY2sgc3RhcnQgb3B0aW9uLCBpZiBoaWdoZXIgdGhlbiBlbGVtZW50cyBhdmFpbGFibGUsIHNldAogICAgIyBpdCB0byB0aGUgbGFzdCBvdmVydmlldyBwYWdlIChUaGFua3MgdG8gU3RlZmFuIFNjaG1pZHQhKQogICAgaWYgKCAkU3RhcnRIaXQgPiAkUGFyYW17VG90YWx9ICkgewogICAgICAgIG15ICRQYWdlcyA9IGludCggKCAkUGFyYW17VG90YWx9IC8gJFBhZ2VTaG93biApICsgMC45OTk5OSApOwogICAgICAgICRTdGFydEhpdCA9ICggKCAkUGFnZXMgLSAxICkgKiAkUGFnZVNob3duICkgKyAxOwogICAgfQoKICAgICMgZ2V0IGRhdGEgc2VsZWN0aW9uCiAgICBteSAlRGF0YTsKICAgIG15ICRDb25maWcgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUHJlZmVyZW5jZXNHcm91cHMnKTsKICAgIGlmICggJENvbmZpZyAmJiAkQ29uZmlnLT57JEdyb3VwfSAmJiAkQ29uZmlnLT57JEdyb3VwfS0+e0RhdGF9ICkgewogICAgICAgICVEYXRhID0gJXsgJENvbmZpZy0+eyRHcm91cH0tPntEYXRhfSB9OwogICAgfQoKICAgICMgc2V0IHBhZ2UgbGltaXQgYW5kIGJ1aWxkIHBhZ2UgbmF2CiAgICBteSAkTGltaXQgPSAkUGFyYW17TGltaXR9IHx8IDIwXzAwMDsKICAgIG15ICVQYWdlTmF2ID0gJEVudi0+e0xheW91dE9iamVjdH0tPlBhZ2VOYXZCYXIoCiAgICAgICAgTGltaXQgICAgID0+ICRMaW1pdCwKICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgIFBhZ2VTaG93biA9PiAkUGFnZVNob3duLAogICAgICAgIEFsbEhpdHMgICA9PiAkUGFyYW17VG90YWx9IHx8IDAsCiAgICAgICAgQWN0aW9uICAgID0+ICdBY3Rpb249JyAuICRFbnYtPntMYXlvdXRPYmplY3R9LT57QWN0aW9ufSwKICAgICAgICBMaW5rICAgICAgPT4gJFBhcmFte0xpbmtQYWdlfSwKICAgICk7CgogICAgIyBidWlsZCBzaG93biBzdXJ2ZXlzIHBlciBwYWdlCiAgICAkUGFyYW17UmVxdWVzdGVkVVJMfSAgICA9ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IjsKICAgICRQYXJhbXtHcm91cH0gICAgICAgICAgID0gJEdyb3VwOwogICAgJFBhcmFte1ByZWZlcmVuY2VzS2V5fSAgPSAkUGFnZVNob3duUHJlZmVyZW5jZXNLZXk7CiAgICAkUGFyYW17UGFnZVNob3duU3RyaW5nfSA9ICRTZWxmLT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAkUGFnZVNob3duUHJlZmVyZW5jZXNLZXksCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFBhZ2VTaG93biwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgIERhdGEgICAgICAgID0+IFwlRGF0YSwKICAgICk7CgogICAgIyBidWlsZCBuYXZiYXIgY29udGVudAogICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyJywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICMgYmFjayBsaW5rCiAgICBpZiAoICRQYXJhbXtMaW5rQmFja30gKSB7CiAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclBhZ2VCYWNrJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZmlsdGVycwogICAgaWYgKCAkUGFyYW17RmlsdGVyc30gKSB7CgogICAgICAgICMgZ2V0IGdpdmVuIGZpbHRlcnMKICAgICAgICBteSBATmF2QmFyRmlsdGVyczsKICAgICAgICBmb3IgbXkgJFByaW8gKCBzb3J0IGtleXMgJXsgJFBhcmFte0ZpbHRlcnN9IH0gKSB7CiAgICAgICAgICAgIHB1c2ggQE5hdkJhckZpbHRlcnMsICRQYXJhbXtGaWx0ZXJzfS0+eyRQcmlvfTsKICAgICAgICB9CgogICAgICAgICMgYnVpbGQgZmlsdGVyIGNvbnRlbnQKICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyRmlsdGVyJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBsb29wIG92ZXIgZmlsdGVycwogICAgICAgIG15ICRDb3VudCA9IDA7CiAgICAgICAgZm9yIG15ICRGaWx0ZXIgKEBOYXZCYXJGaWx0ZXJzKSB7CgogICAgICAgICAgICAjIGluY3JlbWVudCBmaWx0ZXIgY291bnQgYW5kIGJ1aWxkIGZpbHRlciBpdGVtCiAgICAgICAgICAgICRDb3VudCsrOwogICAgICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhckZpbHRlckl0ZW0nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICV7JEZpbHRlcn0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBmaWx0ZXIgaXMgc2VsZWN0ZWQKICAgICAgICAgICAgaWYgKCAkRmlsdGVyLT57RmlsdGVyfSBlcSAkUGFyYW17RmlsdGVyfSApIHsKICAgICAgICAgICAgICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhckZpbHRlckl0ZW1TZWxlY3RlZCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgJXskRmlsdGVyfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWROb3QnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgbG9vcCBvdmVyIGNvbmZpZ3VyZWQgYmFja2VuZHMKICAgIGZvciBteSAkQmFja2VuZCAoIGtleXMgJXskQmFja2VuZHN9ICkgewoKICAgICAgICAjIGJ1aWxkIG5hdmJhciB2aWV3IG1vZGUKICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyVmlld01vZGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICV7ICRCYWNrZW5kcy0+eyRCYWNrZW5kfSB9LAogICAgICAgICAgICAgICAgRmlsdGVyID0+ICRQYXJhbXtGaWx0ZXJ9LAogICAgICAgICAgICAgICAgVmlldyAgID0+ICRCYWNrZW5kLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgY3VycmVudCB2aWV3IGlzIGNvbmZpZ3VyZWQgaW4gYmFja2VuZAogICAgICAgIGlmICggJFZpZXcgZXEgJEJhY2tlbmQgKSB7CiAgICAgICAgICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyVmlld01vZGVTZWxlY3RlZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEJhY2tlbmRzLT57JEJhY2tlbmR9IH0sCiAgICAgICAgICAgICAgICAgICAgRmlsdGVyID0+ICRQYXJhbXtGaWx0ZXJ9LAogICAgICAgICAgICAgICAgICAgIFZpZXcgICA9PiAkQmFja2VuZCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclZpZXdNb2RlTm90U2VsZWN0ZWQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICV7ICRCYWNrZW5kcy0+eyRCYWNrZW5kfSB9LAogICAgICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkUGFyYW17RmlsdGVyfSwKICAgICAgICAgICAgICAgICAgICBWaWV3ICAgPT4gJEJhY2tlbmQsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIHBhZ2UgbmF2IGlzIGF2YWlsYWJsZQogICAgaWYgKCVQYWdlTmF2KSB7CiAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclBhZ2VOYXZCYXInLAogICAgICAgICAgICBEYXRhID0+IFwlUGFnZU5hdiwKICAgICAgICApOwoKICAgICAgICAjIGRvbid0IHNob3cgY29udGV4dCBzZXR0aW5ncyBpbiBBSkFYIGNhc2UgKGUuIGcuIGluIGN1c3RvbWVyIHRpY2tldCBoaXN0b3J5KSwKICAgICAgICAjICAgYmVjYXVzZSB0aGUgc3VibWl0IHdpdGggcGFnZSByZWxvYWQgd2lsbCBub3Qgd29yayB0aGVyZQogICAgICAgIGlmICggISRQYXJhbXtBSkFYfSApIHsKICAgICAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQ29udGV4dFNldHRpbmdzJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYWdlTmF2LAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgYnVpbGQgaHRtbCBjb250ZW50CiAgICBteSAkT3V0cHV0TmF2QmFyID0gJEVudi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXInLAogICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgIyBjcmVhdGUgb3V0cHV0CiAgICBteSAkT3V0cHV0UmF3ID0gJyc7CiAgICBpZiAoICEkUGFyYW17T3V0cHV0fSApIHsKICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+UHJpbnQoCiAgICAgICAgICAgIE91dHB1dCA9PiBcJE91dHB1dE5hdkJhciwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJE91dHB1dFJhdyAuPSAkT3V0cHV0TmF2QmFyOwogICAgfQoKICAgICMgbG9hZCBtb2R1bGUKICAgIGlmICggISRTZWxmLT57TWFpbk9iamVjdH0tPlJlcXVpcmUoICRCYWNrZW5kcy0+eyRWaWV3fS0+e01vZHVsZX0gKSApIHsKICAgICAgICByZXR1cm4gJEVudi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBiYWNrZW5kIG9iamVjdAogICAgbXkgJE9iamVjdCA9ICRCYWNrZW5kcy0+eyRWaWV3fS0+e01vZHVsZX0tPm5ldyggJXskRW52fSApOwogICAgcmV0dXJuIGlmICEkT2JqZWN0OwoKICAgICMgcnVuIG1vZHVsZQogICAgbXkgJE91dHB1dCA9ICRPYmplY3QtPlJ1bigKICAgICAgICAlUGFyYW0sCiAgICAgICAgTGltaXQgICAgID0+ICRMaW1pdCwKICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgIFBhZ2VTaG93biA9PiAkUGFnZVNob3duLAogICAgICAgIEFsbEhpdHMgICA9PiAkUGFyYW17VG90YWx9IHx8IDAsCiAgICAgICAgRnJvbnRlbmQgID0+ICRGcm9udGVuZCwKICAgICk7CgogICAgIyBjcmVhdGUgb3V0cHV0CiAgICBpZiAoICEkUGFyYW17T3V0cHV0fSApIHsKICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+UHJpbnQoCiAgICAgICAgICAgIE91dHB1dCA9PiBcJE91dHB1dCwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJE91dHB1dFJhdyAuPSAkT3V0cHV0OwogICAgfQoKICAgICMgY3JlYXRlIG92ZXJ2aWV3IG5hdiBiYXIKICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhcicsCiAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgIyByZXR1cm4gY29udGVudCBpZiBhdmFpbGFibGUKICAgIHJldHVybiAkT3V0cHV0UmF3Owp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWhlYWQxIFZFUlNJT04KCiRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMTEvMDQvMTEgMTk6MDg6MjIgJAoKPWN1dAo=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50U3VydmV5LnBtIC0gYSBzdXJ2ZXkgbW9kdWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBBZ2VudFN1cnZleS5wbSx2IDEuNTAgMjAxMi8wMS8yMCAxMzoyMDoyNyBqaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50U3VydmV5OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpTdXJ2ZXk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9IHF3KCRSZXZpc2lvbjogMS41MCAkKSBbMV07CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IGNvbW1vbiBvYmplY3RzCiAgICAleyRTZWxmfSA9ICVQYXJhbTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBDb25maWdPYmplY3QpKSB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9ICAgID0gS2VybmVsOjpTeXN0ZW06OlN1cnZleS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzLT5uZXcoJVBhcmFtKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiU3VydmV5OjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBnZXQgZGVmYXVsdCBwYXJhbWV0ZXJzCiAgICAkU2VsZi0+e0ZpbHRlcn0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdGaWx0ZXInICkgfHwgJyc7CiAgICAkU2VsZi0+e1ZpZXd9ICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdWaWV3JyApICAgfHwgJyc7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE91dHB1dDsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHN1cnZleSBlZGl0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU3VydmV5RWRpdCcgKSB7CiAgICAgICAgbXkgJFN1cnZleUlEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5SUQiICk7CgogICAgICAgICMgY2hlY2sgaWYgc3VydmV5IGV4aXN0cwogICAgICAgIGlmICgKICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKCBFbGVtZW50SUQgPT4gJFN1cnZleUlELCBFbGVtZW50ID0+ICdTdXJ2ZXknICkgbmUKICAgICAgICAgICAgJ1llcycKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fQogICAgICAgICAgICAgICAgLT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj1BZ2VudFN1cnZleSIgKTsKICAgICAgICB9CgogICAgICAgIG15ICVTdXJ2ZXkgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleUdldCggU3VydmV5SUQgPT4gJFN1cnZleUlEICk7CgogICAgICAgIHJldHVybiAkU2VsZi0+X1N1cnZleUFkZE1hc2soCiAgICAgICAgICAgICVTdXJ2ZXksCiAgICAgICAgKTsKCiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzdXJ2ZXkgc2F2ZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1N1cnZleVNhdmUnICkgewoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAkU3VydmV5SUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKCiAgICAgICAgaWYgKCAhJFN1cnZleUlEICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCByZXF1aWVyZWQgZm9ybSBlbGVtZW50cyBhbmQgZXJyb3JzCiAgICAgICAgbXkgJVNlcnZlckVycm9yOwogICAgICAgIG15ICVGb3JtRWxlbWVudHM7CiAgICAgICAgZm9yIG15ICRJdGVtICgKICAgICAgICAgICAgcXcoIFRpdGxlIEludHJvZHVjdGlvbiBEZXNjcmlwdGlvbiBOb3RpZmljYXRpb25TZW5kZXIgTm90aWZpY2F0aW9uU3ViamVjdCBOb3RpZmljYXRpb25Cb2R5ICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEZvcm1FbGVtZW50c3skSXRlbX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICIkSXRlbSIgKTsKCiAgICAgICAgICAgIGlmICggISRGb3JtRWxlbWVudHN7JEl0ZW19ICkgewogICAgICAgICAgICAgICAgJFNlcnZlckVycm9yeyAiJEl0ZW0iIC4gJ1NlcnZlckVycm9yJyB9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgQHsgJEZvcm1FbGVtZW50c3tRdWV1ZXN9IH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0QXJyYXkoIFBhcmFtID0+ICJRdWV1ZXMiICk7CgogICAgICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0Zyb250ZW5kOjpSaWNoVGV4dCcpICkgewogICAgICAgICAgICAkRm9ybUVsZW1lbnRze0ludHJvZHVjdGlvbn0KICAgICAgICAgICAgICAgID0gKCBsZW5ndGggJEZvcm1FbGVtZW50c3tJbnRyb2R1Y3Rpb259ICkKICAgICAgICAgICAgICAgID8gIlwkaHRtbC90ZXh0XCQgJEZvcm1FbGVtZW50c3tJbnRyb2R1Y3Rpb259IgogICAgICAgICAgICAgICAgOiAnJzsKICAgICAgICAgICAgJEZvcm1FbGVtZW50c3tOb3RpZmljYXRpb25Cb2R5fQogICAgICAgICAgICAgICAgPSAoIGxlbmd0aCAkRm9ybUVsZW1lbnRze05vdGlmaWNhdGlvbkJvZHl9ICkKICAgICAgICAgICAgICAgID8gIlwkaHRtbC90ZXh0XCQgJEZvcm1FbGVtZW50c3tOb3RpZmljYXRpb25Cb2R5fSIKICAgICAgICAgICAgICAgIDogJyc7CiAgICAgICAgICAgICRGb3JtRWxlbWVudHN7RGVzY3JpcHRpb259CiAgICAgICAgICAgICAgICA9ICggbGVuZ3RoICRGb3JtRWxlbWVudHN7RGVzY3JpcHRpb259ICkKICAgICAgICAgICAgICAgID8gIlwkaHRtbC90ZXh0XCQgJEZvcm1FbGVtZW50c3tEZXNjcmlwdGlvbn0iCiAgICAgICAgICAgICAgICA6ICcnOwogICAgICAgIH0KCiAgICAgICAgIyBzYXZlIGlmIG5vIGVycm9ycwogICAgICAgIGlmICggISVTZXJ2ZXJFcnJvciApIHsKICAgICAgICAgICAgbXkgJFNhdmVSZXN1bHQgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleVNhdmUoCiAgICAgICAgICAgICAgICAlRm9ybUVsZW1lbnRzLAogICAgICAgICAgICAgICAgU3VydmV5SUQgPT4gJFN1cnZleUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UG9wdXBDbG9zZSgKICAgICAgICAgICAgICAgIFVSTCA9PiAiQWN0aW9uPUFnZW50U3VydmV5Wm9vbTtTdXJ2ZXlJRD0kU3VydmV5SUQ7IiwKICAgICAgICAgICAgKTsKCiAgICAgICAgfQoKICAgICAgICAjIHJlbG9hZCBmb3JtIGlmIGVycm9yCiAgICAgICAgcmV0dXJuICRTZWxmLT5fU3VydmV5QWRkTWFzaygKICAgICAgICAgICAgRm9ybUVsZW1lbnRzID0+IFwlRm9ybUVsZW1lbnRzLAogICAgICAgICAgICBTZXJ2ZXJFcnJvciAgPT4gXCVTZXJ2ZXJFcnJvciwKICAgICAgICAgICAgU3VydmV5SUQgICAgID0+ICRTdXJ2ZXlJRCwKICAgICAgICApOwoKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHN1cnZleSBhZGQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTdXJ2ZXlBZGQnICkgewogICAgICAgIHJldHVybiAkU2VsZi0+X1N1cnZleUFkZE1hc2s7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzdXJ2ZXkgbmV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU3VydmV5TmV3JyApIHsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJFN1cnZleUlEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5SUQiICk7CgogICAgICAgICMgZ2V0IHJlcXVpZXJlZCBmb3JtIGVsZW1lbnRzIGFuZCBlcnJvcnMKICAgICAgICBteSAlU2VydmVyRXJyb3I7CiAgICAgICAgbXkgJUZvcm1FbGVtZW50czsKICAgICAgICBmb3IgbXkgJEl0ZW0gKAogICAgICAgICAgICBxdyggVGl0bGUgSW50cm9kdWN0aW9uIERlc2NyaXB0aW9uIE5vdGlmaWNhdGlvblNlbmRlciBOb3RpZmljYXRpb25TdWJqZWN0IE5vdGlmaWNhdGlvbkJvZHkgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkRm9ybUVsZW1lbnRzeyRJdGVtfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIiRJdGVtIiApOwoKICAgICAgICAgICAgaWYgKCAhJEZvcm1FbGVtZW50c3skSXRlbX0gKSB7CiAgICAgICAgICAgICAgICAkU2VydmVyRXJyb3J7ICIkSXRlbSIgLiAnU2VydmVyRXJyb3InIH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBAeyAkRm9ybUVsZW1lbnRze1F1ZXVlc30gfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRBcnJheSggUGFyYW0gPT4gIlF1ZXVlcyIgKTsKCiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJvbnRlbmQ6OlJpY2hUZXh0JykgKSB7CiAgICAgICAgICAgICRGb3JtRWxlbWVudHN7SW50cm9kdWN0aW9ufSAgICAgPSAiXCRodG1sL3RleHRcJCAkRm9ybUVsZW1lbnRze0ludHJvZHVjdGlvbn0iOwogICAgICAgICAgICAkRm9ybUVsZW1lbnRze05vdGlmaWNhdGlvbkJvZHl9ID0gIlwkaHRtbC90ZXh0XCQgJEZvcm1FbGVtZW50c3tOb3RpZmljYXRpb25Cb2R5fSI7CiAgICAgICAgICAgICRGb3JtRWxlbWVudHN7RGVzY3JpcHRpb259ICAgICAgPSAiXCRodG1sL3RleHRcJCAkRm9ybUVsZW1lbnRze0Rlc2NyaXB0aW9ufSI7CiAgICAgICAgfQoKICAgICAgICAjIHNhdmUgaWYgbm8gZXJyb3JzCiAgICAgICAgaWYgKCAhJVNlcnZlckVycm9yICkgewogICAgICAgICAgICBteSAkU3VydmV5SUQgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleU5ldygKICAgICAgICAgICAgICAgICVGb3JtRWxlbWVudHMsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50U3VydmV5Wm9vbTtTdXJ2ZXlJRD0kU3VydmV5SUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyByZWxvYWQgZm9ybSBpZiBlcnJvcgogICAgICAgIHJldHVybiAkU2VsZi0+X1N1cnZleUFkZE1hc2soCiAgICAgICAgICAgIEZvcm1FbGVtZW50cyA9PiBcJUZvcm1FbGVtZW50cywKICAgICAgICAgICAgU2VydmVyRXJyb3IgID0+IFwlU2VydmVyRXJyb3IsCiAgICAgICAgKTsKCiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzdXJ2ZXkgc3RhdHVzCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU3VydmV5U3RhdHVzJyApIHsKICAgICAgICBteSAkU3VydmV5SUQgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5SUQiICk7CiAgICAgICAgbXkgJE5ld1N0YXR1cyA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIk5ld1N0YXR1cyIgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzdXJ2ZXkgZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBhIG5ldyBzdGF0dXMKICAgICAgICBteSAkU3RhdHVzU2V0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5TdXJ2ZXlTdGF0dXNTZXQoCiAgICAgICAgICAgIFN1cnZleUlEICA9PiAkU3VydmV5SUQsCiAgICAgICAgICAgIE5ld1N0YXR1cyA9PiAkTmV3U3RhdHVzLAogICAgICAgICk7CiAgICAgICAgbXkgJE1lc3NhZ2UgPSAnJzsKICAgICAgICBpZiAoIGRlZmluZWQoJFN0YXR1c1NldCkgJiYgJFN0YXR1c1NldCBlcSAnTm9RdWVzdGlvbicgKSB7CiAgICAgICAgICAgICRNZXNzYWdlID0gJztNZXNzYWdlPU5vUXVlc3Rpb24nOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoIGRlZmluZWQoJFN0YXR1c1NldCkgJiYgJFN0YXR1c1NldCBlcSAnSW5jb21wbGV0ZVF1ZXN0aW9uJyApIHsKICAgICAgICAgICAgJE1lc3NhZ2UgPSAnO01lc3NhZ2U9SW5jb21wbGV0ZVF1ZXN0aW9uJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCBkZWZpbmVkKCRTdGF0dXNTZXQpICYmICRTdGF0dXNTZXQgZXEgJ1N0YXR1c1NldCcgKSB7CiAgICAgICAgICAgICRNZXNzYWdlID0gJztNZXNzYWdlPVN0YXR1c1NldCc7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50U3VydmV5Wm9vbTtTdXJ2ZXlJRD0kU3VydmV5SUQkTWVzc2FnZSIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHN0YXRzCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU3RhdHMnICkgewogICAgICAgIG15ICRTdXJ2ZXlJRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1cnZleUlEIiApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgICAgICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CiAgICAgICAgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKAogICAgICAgICAgICBUaXRsZSA9PiAnU3RhdHMgT3ZlcnZpZXcnLAogICAgICAgICAgICBUeXBlICA9PiAnU21hbGwnLAogICAgICAgICk7CgogICAgICAgIG15ICVTdXJ2ZXkgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleUdldCggU3VydmV5SUQgPT4gJFN1cnZleUlEICk7CgogICAgICAgICMgcHJpbnQgdGhlIG1haW4gdGFibGUuCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU3RhdHMnLAogICAgICAgICAgICBEYXRhID0+IHslU3VydmV5fSwKICAgICAgICApOwogICAgICAgIG15IEBMaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5Wb3RlTGlzdCggU3VydmV5SUQgPT4gJFN1cnZleUlEICk7CiAgICAgICAgZm9yIG15ICRWb3RlIChATGlzdCkgewogICAgICAgICAgICAkVm90ZS0+e1N1cnZleUlEfSA9ICRTdXJ2ZXlJRDsKICAgICAgICAgICAgbXkgJVRpY2tldCA9ICRTZWxmLT57VGlja2V0T2JqZWN0fS0+VGlja2V0R2V0KCBUaWNrZXRJRCA9PiAkVm90ZS0+e1RpY2tldElEfSApOwogICAgICAgICAgICAkVm90ZS0+e1RpY2tldE51bWJlcn0gPSAkVGlja2V0e1RpY2tldE51bWJlcn07CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTdGF0c1ZvdGUnLAogICAgICAgICAgICAgICAgRGF0YSA9PiAkVm90ZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFN1cnZleScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICAgICApOwoKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCBUeXBlID0+ICdTbWFsbCcgKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHN0YXRzIGRldGFpbHMKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTdGF0c0RldGFpbCcgKSB7CiAgICAgICAgbXkgJFN1cnZleUlEICAgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1cnZleUlEIiApOwogICAgICAgIG15ICRSZXF1ZXN0SUQgICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJSZXF1ZXN0SUQiICk7CiAgICAgICAgbXkgJFRpY2tldE51bWJlciA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlRpY2tldE51bWJlciIgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzdXJ2ZXkgZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICB8fCAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkUmVxdWVzdElELCBFbGVtZW50ID0+ICdSZXF1ZXN0JyApCiAgICAgICAgICAgIG5lICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CiAgICAgICAgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKAogICAgICAgICAgICBUaXRsZSA9PiAnU3RhdHMgRGV0YWlsJywKICAgICAgICAgICAgVHlwZSAgPT4gJ1NtYWxsJywKICAgICAgICApOwoKICAgICAgICBteSAlU3VydmV5ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5TdXJ2ZXlHZXQoIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCApOwoKICAgICAgICAjIHByaW50IHRoZSBtYWluIHRhYmxlLgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1N0YXRzRGV0YWlsJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlU3VydmV5LAogICAgICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+ICRUaWNrZXROdW1iZXIsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICBteSBAUXVlc3Rpb25MaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvbkxpc3QoIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCApOwogICAgICAgIGZvciBteSAkUXVlc3Rpb24gKEBRdWVzdGlvbkxpc3QpIHsKCiAgICAgICAgICAgIG15ICRDbGFzcyA9ICcnOwogICAgICAgICAgICBpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdUZXh0YXJlYScgKSB7CiAgICAgICAgICAgICAgICAkQ2xhc3MgPSAnVGV4dGFyZWEnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU3RhdHNEZXRhaWxRdWVzdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAleyRRdWVzdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbXkgQEFuc3dlcnM7CiAgICAgICAgICAgIGlmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1JhZGlvJyB8fCAkUXVlc3Rpb24tPntUeXBlfSBlcSAnQ2hlY2tib3gnICkgewogICAgICAgICAgICAgICAgbXkgQEFuc3dlckxpc3Q7CiAgICAgICAgICAgICAgICBAQW5zd2VyTGlzdCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+Vm90ZUdldCgKICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0SUQgID0+ICRSZXF1ZXN0SUQsCiAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb24tPntRdWVzdGlvbklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBmb3IgbXkgJFJvdyAoQEFuc3dlckxpc3QpIHsKICAgICAgICAgICAgICAgICAgICBteSAlQW5zd2VyID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5BbnN3ZXJHZXQoIEFuc3dlcklEID0+ICRSb3ctPntWb3RlVmFsdWV9ICk7CiAgICAgICAgICAgICAgICAgICAgbXkgJURhdGE7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7QW5zd2VyfSA9ICRBbnN3ZXJ7QW5zd2VyfTsKICAgICAgICAgICAgICAgICAgICBwdXNoKCBAQW5zd2VycywgXCVEYXRhICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUXVlc3Rpb24tPntUeXBlfSBlcSAnWWVzTm8nIHx8ICRRdWVzdGlvbi0+e1R5cGV9IGVxICdUZXh0YXJlYScgKSB7CiAgICAgICAgICAgICAgICBteSBATGlzdCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+Vm90ZUdldCgKICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0SUQgID0+ICRSZXF1ZXN0SUQsCiAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb24tPntRdWVzdGlvbklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgJURhdGE7CiAgICAgICAgICAgICAgICAkRGF0YXtBbnN3ZXJ9ID0gJExpc3RbMF0tPntWb3RlVmFsdWV9OwoKICAgICAgICAgICAgICAgICMgY2xlYW4gaHRtbAogICAgICAgICAgICAgICAgaWYgKCAkUXVlc3Rpb24tPntUeXBlfSBlcSAnVGV4dGFyZWEnICYmICREYXRhe0Fuc3dlcn0gKSB7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7QW5zd2VyfSA9fiBze1xBXCRodG1sXC90ZXh0XCRccyguKil9eyQxfXhtczsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtBbnN3ZXJ9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICAgICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkRGF0YXtBbnN3ZXJ9LAogICAgICAgICAgICAgICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7QW5zd2VyfSA9CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fS0+VG9Bc2NpaSggU3RyaW5nID0+ICREYXRhe0Fuc3dlcn0gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHB1c2goIEBBbnN3ZXJzLCBcJURhdGEgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgbXkgJFJvdyAoQEFuc3dlcnMpIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU3RhdHNEZXRhaWxBbnN3ZXInLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAleyRSb3d9LAogICAgICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFN1cnZleScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNob3cgb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiAgICAjIHN0b3JlIGxhc3Qgc2NyZWVuLCB1c2VkIGZvciBiYWNrbGlua3MKICAgICRTZWxmLT57U2Vzc2lvbk9iamVjdH0tPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlblZpZXcnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgZ2V0IHNvcnRpbmcgcGFyYW1ldGVycwogICAgbXkgJFNvcnRCeSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NvcnRCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydTb3J0Qnk6OkRlZmF1bHQnfQogICAgICAgIHx8ICdOdW1iZXInOwoKICAgICMgZ2V0IG9yZGVyaW5nIHBhcmFtZXRlcnMKICAgIG15ICRPcmRlckJ5ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnT3JkZXJCeScgKQogICAgICAgIHx8ICRTZWxmLT57Q29uZmlnfS0+eydPcmRlcjo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ0Rvd24nOwoKICAgICMgaW52ZXN0aWdhdGUgcmVmcmVzaAogICAgbXkgJFJlZnJlc2ggPSAkU2VsZi0+e1VzZXJSZWZyZXNoVGltZX0gPyA2MCAqICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA6IHVuZGVmOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKAogICAgICAgIFRpdGxlICAgPT4gJ092ZXJ2aWV3JywKICAgICAgICBSZWZyZXNoID0+ICRSZWZyZXNoLAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPlByaW50KCBPdXRwdXQgPT4gXCRPdXRwdXQgKTsKICAgICRPdXRwdXQgPSAnJzsKCiAgICAjIGdldCBzdXJ2ZXkgbGlzdAogICAgbXkgQFN1cnZleUlEcyA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+U3VydmV5U2VhcmNoKAogICAgICAgIE9yZGVyQnkgICAgICAgICAgPT4gWyRTb3J0QnldLAogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWyRPcmRlckJ5XSwKICAgICAgICBVc2VySUQgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBmaW5kIG91dCB3aGljaCBjb2x1bW5zIHNob3VsZCBiZSBzaG93bgogICAgbXkgQFNob3dDb2x1bW5zOwogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gKSB7CgogICAgICAgICMgZ2V0IGFsbCBwb3NzaWJsZSBjb2x1bW5zIGZyb20gY29uZmlnCiAgICAgICAgbXkgJVBvc3NpYmxlQ29sdW1uID0gJXsgJFNlbGYtPntDb25maWd9LT57U2hvd0NvbHVtbnN9IH07CgogICAgICAgICMgZ2V0IHRoZSBjb2x1bW4gbmFtZXMgdGhhdCBzaG91bGQgYmUgc2hvd24KICAgICAgICBDT0xVTU5OQU1FOgogICAgICAgIGZvciBteSAkTmFtZSAoIGtleXMgJVBvc3NpYmxlQ29sdW1uICkgewogICAgICAgICAgICBuZXh0IENPTFVNTk5BTUUgaWYgISRQb3NzaWJsZUNvbHVtbnskTmFtZX07CiAgICAgICAgICAgIHB1c2ggQFNob3dDb2x1bW5zLCAkTmFtZTsKICAgICAgICB9CiAgICB9CgogICAgIyBzaG93IHRoZSBsaXN0CiAgICBteSAkTGlua1BhZ2UgPQogICAgICAgICdGaWx0ZXI9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e0ZpbHRlcn0gKQogICAgICAgIC4gJztWaWV3PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntWaWV3fSApCiAgICAgICAgLiAnO1NvcnRCeT0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTb3J0QnkgKQogICAgICAgIC4gJztPcmRlckJ5PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoIFRleHQgPT4gJE9yZGVyQnkgKQogICAgICAgIC4gJzsnOwogICAgbXkgJExpbmtTb3J0ID0KICAgICAgICAnRmlsdGVyPScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntGaWx0ZXJ9ICkKICAgICAgICAuICc7Vmlldz0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57Vmlld30gKQogICAgICAgIC4gJzsnOwogICAgbXkgJExpbmtGaWx0ZXIgPQogICAgICAgICdTb3J0Qnk9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkU29ydEJ5ICkKICAgICAgICAuICc7T3JkZXJCeT0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRPcmRlckJ5ICkKICAgICAgICAuICc7Vmlldz0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57Vmlld30gKQogICAgICAgIC4gJzsnOwoKICAgICMgc2hvdyBjb25maWcgaXRlbSBsaXN0CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+U3VydmV5TGlzdFNob3coCiAgICAgICAgU3VydmV5SURzICAgPT4gW0BTdXJ2ZXlJRHNdLAogICAgICAgIFRvdGFsICAgICAgID0+IHNjYWxhciBAU3VydmV5SURzLAogICAgICAgIFZpZXcgICAgICAgID0+ICRTZWxmLT57Vmlld30sCiAgICAgICAgRmlsdGVyTGluayAgPT4gJExpbmtGaWx0ZXIsCiAgICAgICAgVGl0bGVOYW1lICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ092ZXJ2aWV3JyksCiAgICAgICAgVGl0bGVWYWx1ZSAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1N1cnZleScpLAogICAgICAgIEVudiAgICAgICAgID0+ICRTZWxmLAogICAgICAgIExpbmtQYWdlICAgID0+ICRMaW5rUGFnZSwKICAgICAgICBMaW5rU29ydCAgICA9PiAkTGlua1NvcnQsCiAgICAgICAgU2hvd0NvbHVtbnMgPT4gXEBTaG93Q29sdW1ucywKICAgICAgICBTb3J0QnkgICAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNvcnRCeSApLAogICAgICAgIE9yZGVyQnkgICAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkT3JkZXJCeSApLAogICAgKTsKCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9TdXJ2ZXlBZGRNYXNrIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJVNlcnZlckVycm9yOwogICAgaWYgKCAkUGFyYW17U2VydmVyRXJyb3J9ICkgewogICAgICAgICVTZXJ2ZXJFcnJvciA9ICV7ICRQYXJhbXtTZXJ2ZXJFcnJvcn0gfTsKICAgIH0KCiAgICBteSAlRm9ybUVsZW1lbnRzOwogICAgaWYgKCAkUGFyYW17Rm9ybUVsZW1lbnRzfSApIHsKICAgICAgICAlRm9ybUVsZW1lbnRzID0gJXsgJFBhcmFte0Zvcm1FbGVtZW50c30gfTsKICAgIH0KCiAgICBteSAkT3V0cHV0OwoKICAgICMgaWYgU3VydmV5SUQgdGhlIFN1cnZleUVkaXQgc2hvdWxkIGJlIGxvYWRlZCAocG9wdXApCiAgICBteSAkVGl0bGU7CiAgICBteSAkVHlwZTsKICAgIGlmICggJFBhcmFte1N1cnZleUlEfSApIHsKICAgICAgICAkVGl0bGUgPSAnU3VydmV5IEVkaXQnOwoKICAgICAgICAjIGZvciBoZWFkZXIgYW5kIGZvb3RlcgogICAgICAgICRUeXBlID0gJ1NtYWxsJzsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRUaXRsZSA9ICdBZGQgTmV3IFN1cnZleSc7CiAgICB9CgogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigKICAgICAgICBUaXRsZSA9PiAkVGl0bGUsCiAgICAgICAgVHlwZSAgPT4gJFR5cGUsCiAgICApOwoKICAgIG15ICRTZWxlY3RlZFF1ZXVlczsKICAgIGlmICggISRQYXJhbXtTdXJ2ZXlJRH0gKSB7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAlU3VydmV5ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5TdXJ2ZXlHZXQoIFN1cnZleUlEID0+ICRQYXJhbXtTdXJ2ZXlJRH0gKTsKCiAgICAgICAgIyBnZXQgc2VsZWN0ZWQgcXVldWVzCiAgICAgICAgJFNlbGVjdGVkUXVldWVzID0gJFN1cnZleXtRdWV1ZXN9OwogICAgfQoKICAgIG15ICVRdWV1ZXMgICAgICA9ICRTZWxmLT57UXVldWVPYmplY3R9LT5HZXRBbGxRdWV1ZXMoKTsKICAgIG15ICRRdWV1ZVN0cmluZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUXVldWVzLAogICAgICAgIE5hbWUgICAgICAgICA9PiAnUXVldWVzJywKICAgICAgICBTaXplICAgICAgICAgPT4gNiwKICAgICAgICBNdWx0aXBsZSAgICAgPT4gMSwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMCwKICAgICAgICBTb3J0ICAgICAgICAgPT4gJ0FscGhhbnVtZXJpY1ZhbHVlJywKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBTZWxlY3RlZElEICAgPT4gJEZvcm1FbGVtZW50c3tRdWV1ZXN9IHx8ICRTZWxlY3RlZFF1ZXVlcywKICAgICk7CgogICAgbXkgJEJsb2NrOwogICAgaWYgKCAhJFBhcmFte1N1cnZleUlEfSApIHsKICAgICAgICAkQmxvY2sgPSAnU3VydmV5QWRkJzsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRCbG9jayA9ICdTdXJ2ZXlFZGl0JzsKICAgIH0KCiAgICAjIHByaW50IHRoZSBmb3JtCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJEJsb2NrLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIFF1ZXVlU3RyaW5nICAgICAgICA9PiAkUXVldWVTdHJpbmcsCiAgICAgICAgICAgIE5vdGlmaWNhdGlvblNlbmRlciA9PiAkRm9ybUVsZW1lbnRze05vdGlmaWNhdGlvblNlbmRlcn0KICAgICAgICAgICAgICAgIHx8ICRQYXJhbXtOb3RpZmljYXRpb25TZW5kZXJ9CiAgICAgICAgICAgICAgICB8fCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU3VydmV5OjpOb3RpZmljYXRpb25TZW5kZXInKSwKICAgICAgICAgICAgTm90aWZpY2F0aW9uU3ViamVjdCA9PiAkRm9ybUVsZW1lbnRze05vdGlmaWNhdGlvblN1YmplY3R9CiAgICAgICAgICAgICAgICB8fCAkUGFyYW17Tm90aWZpY2F0aW9uU3ViamVjdH0KICAgICAgICAgICAgICAgIHx8ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdTdXJ2ZXk6Ok5vdGlmaWNhdGlvblN1YmplY3QnKSwKICAgICAgICAgICAgJVNlcnZlckVycm9yLAogICAgICAgICAgICAlRm9ybUVsZW1lbnRzLAogICAgICAgIH0sCiAgICApOwoKICAgICMgcmljaCB0ZXh0IGVsZW1lbnRzCiAgICBteSAlU3VydmV5RWxlbWVudHM7CgogICAgJFN1cnZleUVsZW1lbnRze0ludHJvZHVjdGlvbn0gPSAkRm9ybUVsZW1lbnRze0ludHJvZHVjdGlvbn0gfHwKICAgICAgICAkUGFyYW17SW50cm9kdWN0aW9ufTsKCiAgICAkU3VydmV5RWxlbWVudHN7Tm90aWZpY2F0aW9uQm9keX0gPSAkRm9ybUVsZW1lbnRze05vdGlmaWNhdGlvbkJvZHl9IHx8CiAgICAgICAgJFBhcmFte05vdGlmaWNhdGlvbkJvZHl9IHx8CiAgICAgICAgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1N1cnZleTo6Tm90aWZpY2F0aW9uQm9keScpOwoKICAgICRTdXJ2ZXlFbGVtZW50c3tEZXNjcmlwdGlvbn0gPSAkRm9ybUVsZW1lbnRze0Rlc2NyaXB0aW9ufSB8fAogICAgICAgICRQYXJhbXtEZXNjcmlwdGlvbn0gfHwKICAgICAgICAnJzsKCiAgICAjIGxvYWQgcmljaCB0ZXh0IGVkaXRvcgogICAgbXkgJFJpY2hUZXh0RWRpdG9yID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0Zyb250ZW5kOjpSaWNoVGV4dCcpOwogICAgaWYgKCRSaWNoVGV4dEVkaXRvcikgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gIiRCbG9jayIgLiAnUmljaFRleHQnICk7CiAgICB9CgogICAgIyBjb252ZXJ0IHJlcXVpcmVkIGVsZW1lbnRzIHRvIFJURQogICAgZm9yIG15ICRTdXJ2ZXlGaWVsZCAoIGtleXMgJVN1cnZleUVsZW1lbnRzICkgewogICAgICAgIG5leHQgaWYgISRTdXJ2ZXlFbGVtZW50c3skU3VydmV5RmllbGR9OwoKICAgICAgICAjIGNsZWFuIGh0bWwKICAgICAgICBteSAkSFRNTENvbnRlbnQgPQogICAgICAgICAgICAkU3VydmV5RWxlbWVudHN7JFN1cnZleUZpZWxkfSA9fiBze1xBXCRodG1sXC90ZXh0XCRccyguKil9eyQxfXhtczsKCiAgICAgICAgaWYgKCAhJEhUTUxDb250ZW50ICYmICRSaWNoVGV4dEVkaXRvciApIHsKICAgICAgICAgICAgJFN1cnZleUVsZW1lbnRzeyRTdXJ2ZXlGaWVsZH0gPQogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJFN1cnZleUVsZW1lbnRzeyRTdXJ2ZXlGaWVsZH0sCiAgICAgICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkSFRNTENvbnRlbnQgJiYgISRSaWNoVGV4dEVkaXRvciApIHsKICAgICAgICAgICAgJFN1cnZleUVsZW1lbnRzeyRTdXJ2ZXlGaWVsZH0gPQogICAgICAgICAgICAgICAgJFNlbGYtPntIVE1MVXRpbHNPYmplY3R9LT5Ub0FzY2lpKCBTdHJpbmcgPT4gJFN1cnZleUVsZW1lbnRzeyRTdXJ2ZXlGaWVsZH0gKTsKICAgICAgICB9CiAgICB9CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICIkQmxvY2siIC4gJ0ludHJvZHVjdGlvbicsCiAgICAgICAgRGF0YSA9PiB7IEludHJvZHVjdGlvbiA9PiAkU3VydmV5RWxlbWVudHN7SW50cm9kdWN0aW9ufSwgfSwKICAgICk7CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICIkQmxvY2siIC4gJ05vdGlmaWNhdGlvbkJvZHknLAogICAgICAgIERhdGEgPT4geyBOb3RpZmljYXRpb25Cb2R5ID0+ICRTdXJ2ZXlFbGVtZW50c3tOb3RpZmljYXRpb25Cb2R5fSwgfSwKICAgICk7CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICIkQmxvY2siIC4gJ0ludGVybmFsRGVzY3JpcHRpb24nLAogICAgICAgIERhdGEgPT4geyBEZXNjcmlwdGlvbiA9PiAkU3VydmV5RWxlbWVudHN7RGVzY3JpcHRpb259LCB9LAogICAgKTsKCiAgICAjIGdlbmVyYXRlcyBnZW5lcmljIGVycm9ycyBmb3IgamF2YXNjcmlwdAogICAgZm9yIG15ICROZWVkZWRJdGVtICgKICAgICAgICBxdyggVGl0bGUgSW50cm9kdWN0aW9uIERlc2NyaXB0aW9uIE5vdGlmaWNhdGlvblNlbmRlciBOb3RpZmljYXRpb25TdWJqZWN0IE5vdGlmaWNhdGlvbkJvZHkgKQogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICRCbG9jayAuICdHZW5lcmljRXJyb3InLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEl0ZW1OYW1lID0+ICROZWVkZWRJdGVtIC4gJ0Vycm9yJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIGZvciBteSAkSXRlbSAoIGtleXMgJVNlcnZlckVycm9yICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJEJsb2NrIC4gJ0dlbmVyaWNTZXJ2ZXJFcnJvcicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgSXRlbU5hbWUgPT4gJEl0ZW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KCBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50U3VydmV5JyApOwogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlciggVHlwZSA9PiAkVHlwZSApOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CjE7Cg==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50U3VydmV5RWRpdFF1ZXN0aW9ucy5wbSAtIGEgc3VydmV5IG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogQWdlbnRTdXJ2ZXlFZGl0UXVlc3Rpb25zLnBtLHYgMS45IDIwMTEvMDIvMDMgMjI6NDg6MjcgZHogRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlN1cnZleTsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OKTsKJFZFUlNJT04gPSBxdygkUmV2aXNpb246IDEuOSAkKSBbMV07CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IGNvbW1vbiBvYmplY3RzCiAgICAleyRTZWxmfSA9ICVQYXJhbTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBDb25maWdPYmplY3QpKSB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OlN1cnZleS0+bmV3KCVQYXJhbSk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE91dHB1dDsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHF1ZXN0aW9uIGFkZAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1F1ZXN0aW9uQWRkJyApIHsKICAgICAgICBteSAkU3VydmV5SUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKICAgICAgICBteSAkUXVlc3Rpb24gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJRdWVzdGlvbiIgKTsKICAgICAgICBteSAkVHlwZSAgICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJUeXBlIiApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgICAgICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CgogICAgICAgIG15ICVTZXJ2ZXJFcnJvcjsKICAgICAgICBpZiAoJFF1ZXN0aW9uKSB7CiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+UXVlc3Rpb25BZGQoCiAgICAgICAgICAgICAgICBTdXJ2ZXlJRCA9PiAkU3VydmV5SUQsCiAgICAgICAgICAgICAgICBRdWVzdGlvbiA9PiAkUXVlc3Rpb24sCiAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAkVHlwZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvblNvcnQoIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlcnZlckVycm9ye1F1ZXN0aW9ufSA9IDE7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJFNlbGYtPl9NYXNrUXVlc3Rpb25PdmVydmlldygKICAgICAgICAgICAgU3VydmV5SUQgICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICBTZXJ2ZXJFcnJvciA9PiBcJVNlcnZlckVycm9yLAogICAgICAgICk7CgogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgcXVlc3Rpb24gZGVsZXRlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnUXVlc3Rpb25EZWxldGUnICkgewogICAgICAgIG15ICRRdWVzdGlvbklEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiUXVlc3Rpb25JRCIgKTsKICAgICAgICBteSAkU3VydmV5SUQgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1cnZleUlEIiApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBhbmQgcXVlc3Rpb24gZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICB8fCAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoCiAgICAgICAgICAgICAgICBFbGVtZW50SUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBFbGVtZW50ICAgPT4gJ1F1ZXN0aW9uJwogICAgICAgICAgICApIG5lICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CiAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvbkRlbGV0ZSgKICAgICAgICAgICAgU3VydmV5SUQgICA9PiAkU3VydmV5SUQsCiAgICAgICAgICAgIFF1ZXN0aW9uSUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlF1ZXN0aW9uU29ydCggU3VydmV5SUQgPT4gJFN1cnZleUlEICk7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1TdXJ2ZXlFZGl0O1N1cnZleUlEPSRTdXJ2ZXlJRCNRdWVzdGlvbiIKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgcXVlc3Rpb24gdXAKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdRdWVzdGlvblVwJyApIHsKICAgICAgICBteSAkUXVlc3Rpb25JRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlF1ZXN0aW9uSUQiICk7CiAgICAgICAgbXkgJFN1cnZleUlEICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzdXJ2ZXkgYW5kIHF1ZXN0aW9uIGV4aXN0cwogICAgICAgIGlmICgKICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKCBFbGVtZW50SUQgPT4gJFN1cnZleUlELCBFbGVtZW50ID0+ICdTdXJ2ZXknICkgbmUKICAgICAgICAgICAgJ1llcycKICAgICAgICAgICAgfHwgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKAogICAgICAgICAgICAgICAgRWxlbWVudElEID0+ICRRdWVzdGlvbklELAogICAgICAgICAgICAgICAgRWxlbWVudCAgID0+ICdRdWVzdGlvbicKICAgICAgICAgICAgKSBuZSAnWWVzJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgfQogICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+UXVlc3Rpb25Tb3J0KCBTdXJ2ZXlJRCA9PiAkU3VydmV5SUQgKTsKICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlF1ZXN0aW9uVXAoCiAgICAgICAgICAgIFN1cnZleUlEICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbklELAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249U3VydmV5RWRpdDtTdXJ2ZXlJRD0kU3VydmV5SUQjUXVlc3Rpb24iCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHF1ZXN0aW9uIGRvd24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdRdWVzdGlvbkRvd24nICkgewogICAgICAgIG15ICRRdWVzdGlvbklEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiUXVlc3Rpb25JRCIgKTsKICAgICAgICBteSAkU3VydmV5SUQgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1cnZleUlEIiApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBhbmQgcXVlc3Rpb24gZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICB8fCAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoCiAgICAgICAgICAgICAgICBFbGVtZW50SUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBFbGVtZW50ICAgPT4gJ1F1ZXN0aW9uJwogICAgICAgICAgICApIG5lICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CiAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvblNvcnQoIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCApOwogICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+UXVlc3Rpb25Eb3duKAogICAgICAgICAgICBTdXJ2ZXlJRCAgID0+ICRTdXJ2ZXlJRCwKICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb25JRCwKICAgICAgICApOwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249U3VydmV5RWRpdDtTdXJ2ZXlJRD0kU3VydmV5SUQjUXVlc3Rpb24iCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHF1ZXN0aW9uIGVkaXQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdRdWVzdGlvbkVkaXQnICkgewogICAgICAgIG15ICRTdXJ2ZXlJRCAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU3VydmV5SUQnICk7CiAgICAgICAgbXkgJFF1ZXN0aW9uSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdRdWVzdGlvbklEJyApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBhbmQgcXVlc3Rpb24gZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICB8fCAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoCiAgICAgICAgICAgICAgICBFbGVtZW50SUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBFbGVtZW50ICAgPT4gJ1F1ZXN0aW9uJwogICAgICAgICAgICApIG5lICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkU2VsZi0+X01hc2tRdWVzdGlvbkVkaXQoCiAgICAgICAgICAgIFN1cnZleUlEICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbklELAogICAgICAgICk7CgogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgcXVlc3Rpb24gc2F2ZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1F1ZXN0aW9uU2F2ZScgKSB7CiAgICAgICAgbXkgJFF1ZXN0aW9uSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdRdWVzdGlvbklEJyApOwogICAgICAgIG15ICRTdXJ2ZXlJRCAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU3VydmV5SUQnICk7CiAgICAgICAgbXkgJFF1ZXN0aW9uICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdRdWVzdGlvbicgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzdXJ2ZXkgYW5kIHF1ZXN0aW9uIGV4aXN0cwogICAgICAgIGlmICgKICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKCBFbGVtZW50SUQgPT4gJFN1cnZleUlELCBFbGVtZW50ID0+ICdTdXJ2ZXknICkgbmUKICAgICAgICAgICAgJ1llcycKICAgICAgICAgICAgfHwgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKAogICAgICAgICAgICAgICAgRWxlbWVudElEID0+ICRRdWVzdGlvbklELAogICAgICAgICAgICAgICAgRWxlbWVudCAgID0+ICdRdWVzdGlvbicKICAgICAgICAgICAgKSBuZSAnWWVzJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgfQoKICAgICAgICBteSAlU2VydmVyRXJyb3I7CiAgICAgICAgaWYgKCRRdWVzdGlvbikgewogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlF1ZXN0aW9uU2F2ZSgKICAgICAgICAgICAgICAgIFF1ZXN0aW9uSUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBTdXJ2ZXlJRCAgID0+ICRTdXJ2ZXlJRCwKICAgICAgICAgICAgICAgIFF1ZXN0aW9uICAgPT4gJFF1ZXN0aW9uLAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9NYXNrUXVlc3Rpb25FZGl0KAogICAgICAgICAgICAgICAgU3VydmV5SUQgICA9PiAkU3VydmV5SUQsCiAgICAgICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbklELAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlcnZlckVycm9ye1F1ZXN0aW9uU2VydmVyRXJyb3J9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkU2VsZi0+X01hc2tRdWVzdGlvbkVkaXQoCiAgICAgICAgICAgIFN1cnZleUlEICAgID0+ICRTdXJ2ZXlJRCwKICAgICAgICAgICAgUXVlc3Rpb25JRCAgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgIFNlcnZlckVycm9yID0+IFwlU2VydmVyRXJyb3IsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFuc3dlciBhZGQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBbnN3ZXJBZGQnICkgewogICAgICAgIG15ICRTdXJ2ZXlJRCAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5SUQiICk7CiAgICAgICAgbXkgJFF1ZXN0aW9uSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJRdWVzdGlvbklEIiApOwogICAgICAgIG15ICRBbnN3ZXIgICAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiQW5zd2VyIiApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBhbmQgcXVlc3Rpb24gZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICB8fCAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoCiAgICAgICAgICAgICAgICBFbGVtZW50SUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBFbGVtZW50ICAgPT4gJ1F1ZXN0aW9uJwogICAgICAgICAgICApIG5lICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CgogICAgICAgIG15ICVTZXJ2ZXJFcnJvcjsKICAgICAgICBpZiAoJEFuc3dlcikgewogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkFuc3dlckFkZCgKICAgICAgICAgICAgICAgIFN1cnZleUlEICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb25JRCwKICAgICAgICAgICAgICAgIEFuc3dlciAgICAgPT4gJEFuc3dlciwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fTWFza1F1ZXN0aW9uRWRpdCgKICAgICAgICAgICAgICAgIFN1cnZleUlEICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb25JRCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZXJ2ZXJFcnJvcntBbnN3ZXJTZXJ2ZXJFcnJvcn0gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRTZWxmLT5fTWFza1F1ZXN0aW9uRWRpdCgKICAgICAgICAgICAgU3VydmV5SUQgICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICBRdWVzdGlvbklEICA9PiAkUXVlc3Rpb25JRCwKICAgICAgICAgICAgU2VydmVyRXJyb3IgPT4gXCVTZXJ2ZXJFcnJvciwKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgYW5zd2VyIGRlbGV0ZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0Fuc3dlckRlbGV0ZScgKSB7CiAgICAgICAgbXkgJEFuc3dlcklEICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJBbnN3ZXJJRCIgKTsKICAgICAgICBteSAkUXVlc3Rpb25JRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlF1ZXN0aW9uSUQiICk7CiAgICAgICAgbXkgJFN1cnZleUlEICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzdXJ2ZXksIHF1ZXN0aW9uIGFuZCBhbnN3ZXIgZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICB8fCAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoCiAgICAgICAgICAgICAgICBFbGVtZW50SUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBFbGVtZW50ICAgPT4gJ1F1ZXN0aW9uJwogICAgICAgICAgICApIG5lICdZZXMnCiAgICAgICAgICAgIHx8ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRBbnN3ZXJJRCwgRWxlbWVudCA9PiAnQW5zd2VyJyApCiAgICAgICAgICAgIG5lICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CiAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5BbnN3ZXJEZWxldGUoCiAgICAgICAgICAgIFF1ZXN0aW9uSUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgIEFuc3dlcklEICAgPT4gJEFuc3dlcklELAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5BbnN3ZXJTb3J0KCBRdWVzdGlvbklEID0+ICRRdWVzdGlvbklEICk7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+CiAgICAgICAgICAgICAgICAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249UXVlc3Rpb25FZGl0O1N1cnZleUlEPSRTdXJ2ZXlJRDtRdWVzdGlvbklEPSRRdWVzdGlvbklEI0Fuc3dlciIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFuc3dlciB1cAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0Fuc3dlclVwJyApIHsKICAgICAgICBteSAkQW5zd2VySUQgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIkFuc3dlcklEIiApOwogICAgICAgIG15ICRRdWVzdGlvbklEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiUXVlc3Rpb25JRCIgKTsKICAgICAgICBteSAkU3VydmV5SUQgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1cnZleUlEIiApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSwgcXVlc3Rpb24gYW5kIGFuc3dlciBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgICAgICdZZXMnCiAgICAgICAgICAgIHx8ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cygKICAgICAgICAgICAgICAgIEVsZW1lbnRJRCA9PiAkUXVlc3Rpb25JRCwKICAgICAgICAgICAgICAgIEVsZW1lbnQgICA9PiAnUXVlc3Rpb24nCiAgICAgICAgICAgICkgbmUgJ1llcycKICAgICAgICAgICAgfHwgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKCBFbGVtZW50SUQgPT4gJEFuc3dlcklELCBFbGVtZW50ID0+ICdBbnN3ZXInICkKICAgICAgICAgICAgbmUgJ1llcycKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgIH0KICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkFuc3dlclNvcnQoIFF1ZXN0aW9uSUQgPT4gJFF1ZXN0aW9uSUQgKTsKICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkFuc3dlclVwKAogICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbklELAogICAgICAgICAgICBBbnN3ZXJJRCAgID0+ICRBbnN3ZXJJRCwKICAgICAgICApOwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PgogICAgICAgICAgICAgICAgIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPVF1ZXN0aW9uRWRpdDtTdXJ2ZXlJRD0kU3VydmV5SUQ7UXVlc3Rpb25JRD0kUXVlc3Rpb25JRCNBbnN3ZXIiLAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhbnN3ZXIgZG93bgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0Fuc3dlckRvd24nICkgewogICAgICAgIG15ICRBbnN3ZXJJRCAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiQW5zd2VySUQiICk7CiAgICAgICAgbXkgJFF1ZXN0aW9uSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJRdWVzdGlvbklEIiApOwogICAgICAgIG15ICRTdXJ2ZXlJRCAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5SUQiICk7CgogICAgICAgICMgY2hlY2sgaWYgc3VydmV5LCBxdWVzdGlvbiBhbmQgYW5zd2VyIGV4aXN0cwogICAgICAgIGlmICgKICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKCBFbGVtZW50SUQgPT4gJFN1cnZleUlELCBFbGVtZW50ID0+ICdTdXJ2ZXknICkgbmUKICAgICAgICAgICAgJ1llcycKICAgICAgICAgICAgfHwgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKAogICAgICAgICAgICAgICAgRWxlbWVudElEID0+ICRRdWVzdGlvbklELAogICAgICAgICAgICAgICAgRWxlbWVudCAgID0+ICdRdWVzdGlvbicKICAgICAgICAgICAgKSBuZSAnWWVzJwogICAgICAgICAgICB8fCAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkQW5zd2VySUQsIEVsZW1lbnQgPT4gJ0Fuc3dlcicgKQogICAgICAgICAgICBuZSAnWWVzJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgfQogICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+QW5zd2VyU29ydCggUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb25JRCApOwogICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+QW5zd2VyRG93bigKICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb25JRCwKICAgICAgICAgICAgQW5zd2VySUQgICA9PiAkQW5zd2VySUQsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4KICAgICAgICAgICAgICAgICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1RdWVzdGlvbkVkaXQ7U3VydmV5SUQ9JFN1cnZleUlEO1F1ZXN0aW9uSUQ9JFF1ZXN0aW9uSUQjQW5zd2VyIiwKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgYW5zd2VyIGVkaXQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBbnN3ZXJFZGl0JyApIHsKICAgICAgICBteSAkU3VydmV5SUQgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1cnZleUlEJyApOwogICAgICAgIG15ICRRdWVzdGlvbklEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnUXVlc3Rpb25JRCcgKTsKICAgICAgICBteSAkQW5zd2VySUQgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Fuc3dlcklEJyApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSwgcXVlc3Rpb24gYW5kIGFuc3dlciBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgICAgICdZZXMnCiAgICAgICAgICAgIHx8ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cygKICAgICAgICAgICAgICAgIEVsZW1lbnRJRCA9PiAkUXVlc3Rpb25JRCwKICAgICAgICAgICAgICAgIEVsZW1lbnQgICA9PiAnUXVlc3Rpb24nCiAgICAgICAgICAgICkgbmUgJ1llcycKICAgICAgICAgICAgfHwgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKCBFbGVtZW50SUQgPT4gJEFuc3dlcklELCBFbGVtZW50ID0+ICdBbnN3ZXInICkKICAgICAgICAgICAgbmUgJ1llcycKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRTZWxmLT5fTWFza0Fuc3dlckVkaXQoCiAgICAgICAgICAgIFN1cnZleUlEICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbklELAogICAgICAgICAgICBBbnN3ZXJJRCAgID0+ICRBbnN3ZXJJRCwKICAgICAgICApOwoKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFuc3dlciBzYXZlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQW5zd2VyU2F2ZScgKSB7CiAgICAgICAgbXkgJEFuc3dlcklEICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJBbnN3ZXJJRCIgKTsKICAgICAgICBteSAkUXVlc3Rpb25JRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlF1ZXN0aW9uSUQiICk7CiAgICAgICAgbXkgJFN1cnZleUlEICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKICAgICAgICBteSAkQW5zd2VyICAgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIkFuc3dlciIgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzdXJ2ZXksIHF1ZXN0aW9uIGFuZCBhbnN3ZXIgZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICB8fCAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoCiAgICAgICAgICAgICAgICBFbGVtZW50SUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBFbGVtZW50ICAgPT4gJ1F1ZXN0aW9uJwogICAgICAgICAgICApIG5lICdZZXMnCiAgICAgICAgICAgIHx8ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRBbnN3ZXJJRCwgRWxlbWVudCA9PiAnQW5zd2VyJyApCiAgICAgICAgICAgIG5lICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CgogICAgICAgIG15ICVTZXJ2ZXJFcnJvcjsKICAgICAgICBpZiAoJEFuc3dlcikgewogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkFuc3dlclNhdmUoCiAgICAgICAgICAgICAgICBBbnN3ZXJJRCAgID0+ICRBbnN3ZXJJRCwKICAgICAgICAgICAgICAgIFF1ZXN0aW9uSUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBBbnN3ZXIgICAgID0+ICRBbnN3ZXIsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PgogICAgICAgICAgICAgICAgICAgICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1RdWVzdGlvbkVkaXQ7U3VydmV5SUQ9JFN1cnZleUlEO1F1ZXN0aW9uSUQ9JFF1ZXN0aW9uSUQjQW5zd2VyIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlcnZlckVycm9ye0Fuc3dlclNlcnZlckVycm9yfSA9ICdTZXZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkU2VsZi0+X01hc2tBbnN3ZXJFZGl0KAogICAgICAgICAgICBTdXJ2ZXlJRCAgICA9PiAkU3VydmV5SUQsCiAgICAgICAgICAgIFF1ZXN0aW9uSUQgID0+ICRRdWVzdGlvbklELAogICAgICAgICAgICBBbnN3ZXJJRCAgICA9PiAkQW5zd2VySUQsCiAgICAgICAgICAgIFNlcnZlckVycm9yID0+IFwlU2VydmVyRXJyb3IsCiAgICAgICAgICAgICkKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHF1ZXN0aW9uIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBteSAkU3VydmV5SUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdXJ2ZXlJRCcgKTsKCiAgICBpZiAoICEkU3VydmV5SUQgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249QWdlbnRTdXJ2ZXkiICk7CiAgICB9CgogICAgcmV0dXJuICRTZWxmLT5fTWFza1F1ZXN0aW9uT3ZlcnZpZXcoIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCApOwp9CgpzdWIgX01hc2tRdWVzdGlvbk92ZXJ2aWV3IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJVNlcnZlckVycm9yOwogICAgaWYgKCAkUGFyYW17U2VydmVyRXJyb3J9ICkgewogICAgICAgICVTZXJ2ZXJFcnJvciA9ICV7ICRQYXJhbXtTZXJ2ZXJFcnJvcn0gfTsKICAgIH0KCiAgICBteSAkT3V0cHV0OwoKICAgIGlmICggISRQYXJhbXtTdXJ2ZXlJRH0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249QWdlbnRTdXJ2ZXkiICk7CiAgICB9CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoCiAgICAgICAgVGl0bGUgPT4gJ1N1cnZleSBFZGl0IFF1ZXN0aW9ucycsCiAgICAgICAgVHlwZSAgPT4gJ1NtYWxsJywKICAgICk7CgogICAgIyBnZXQgYWxsIGF0dHJpYnV0ZXMgb2YgdGhlIHN1cnZleQogICAgbXkgJVN1cnZleSA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+U3VydmV5R2V0KCBTdXJ2ZXlJRCA9PiAkUGFyYW17U3VydmV5SUR9ICk7CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdTdXJ2ZXlFZGl0UXVlc3Rpb25zJywKICAgICAgICBEYXRhID0+IFwlU3VydmV5LAogICAgKTsKCiAgICBteSBATGlzdCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+UXVlc3Rpb25MaXN0KCBTdXJ2ZXlJRCA9PiAkUGFyYW17U3VydmV5SUR9ICk7CgogICAgaWYgKCAkU3VydmV5e1N0YXR1c30gJiYgJFN1cnZleXtTdGF0dXN9IGVxICdOZXcnICkgewoKICAgICAgICBteSAkQXJyYXlIYXNoUmVmID0gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICAgICA9PiAnWWVzTm8nLAogICAgICAgICAgICAgICAgVmFsdWUgICAgPT4gJ1llc05vJywKICAgICAgICAgICAgICAgIFNlbGVjdGVkID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICdSYWRpbycsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnUmFkaW8gKExpc3QpJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJ0NoZWNrYm94JywKICAgICAgICAgICAgICAgIFZhbHVlID0+ICdDaGVja2JveCAoTGlzdCknLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnVGV4dGFyZWEnLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJ1RleHRhcmVhJywKICAgICAgICAgICAgfSwKICAgICAgICBdOwoKICAgICAgICBteSAkU2VsZWN0aW9uVHlwZSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICAgPT4gJEFycmF5SGFzaFJlZiwKICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAnVHlwZScsCiAgICAgICAgICAgIElEICAgICAgICAgICAgPT4gJ1R5cGUnLAogICAgICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICdZZXMvTm8nLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFF1ZXN0aW9uRXJyb3JDbGFzcyA9ICcnOwogICAgICAgIGlmICggJFNlcnZlckVycm9ye1F1ZXN0aW9ufSApIHsKICAgICAgICAgICAgJFF1ZXN0aW9uRXJyb3JDbGFzcyA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTdXJ2ZXlBZGRRdWVzdGlvbicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgU3VydmV5SUQgICAgICAgICAgID0+ICRQYXJhbXtTdXJ2ZXlJRH0sCiAgICAgICAgICAgICAgICBTZWxlY3Rpb25UeXBlICAgICAgPT4gJFNlbGVjdGlvblR5cGUsCiAgICAgICAgICAgICAgICBRdWVzdGlvbkVycm9yQ2xhc3MgPT4gJFF1ZXN0aW9uRXJyb3JDbGFzcywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdTdXJ2ZXlEZWxldGVDb2x1bW4nICk7CiAgICAgICAgaWYgKCBzY2FsYXIgQExpc3QgKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1N1cnZleVN0YXR1c0NvbHVtbicgKTsKICAgICAgICAgICAgbXkgJENvdW50ZXIgPSAwOwoKICAgICAgICAgICAgZm9yIG15ICRRdWVzdGlvbiAoQExpc3QpIHsKICAgICAgICAgICAgICAgIG15ICRBbnN3ZXJDb3VudCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+QW5zd2VyQ291bnQoCiAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb24tPntRdWVzdGlvbklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgJENsYXNzOwogICAgICAgICAgICAgICAgbXkgJENsYXNzVXA7CiAgICAgICAgICAgICAgICBteSAkQ2xhc3NEb3duOwoKICAgICAgICAgICAgICAgIGlmICggISRDb3VudGVyICkgewogICAgICAgICAgICAgICAgICAgICRDbGFzc1VwID0gJ0Rpc2FibGVkJywKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICRDb3VudGVyID09ICQjTGlzdCApIHsKICAgICAgICAgICAgICAgICAgICAkQ2xhc3NEb3duID0gJ0Rpc2FibGVkJywKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAkU3RhdHVzID0gJ0NvbXBsZXRlJzsKICAgICAgICAgICAgICAgIGlmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1JhZGlvJyB8fCAkUXVlc3Rpb24tPntUeXBlfSBlcSAnQ2hlY2tib3gnICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJEFuc3dlckNvdW50IDwgMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJENsYXNzICA9ICdFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgICRTdGF0dXMgPSAnSW5jb21wbGV0ZSc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU3VydmV5UXVlc3Rpb25zUm93JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJXskUXVlc3Rpb259LAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgICAgPT4gJFN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICRDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NVcCAgID0+ICRDbGFzc1VwLAogICAgICAgICAgICAgICAgICAgICAgICBDbGFzc0Rvd24gPT4gJENsYXNzRG93biwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU3VydmV5UXVlc3Rpb25zRGVsZXRlQnV0dG9uJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRRdWVzdGlvbiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU3VydmV5Tm9RdWVzdGlvbnNTYXZlZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsgQ29sdW1ucyA9PiA1LCB9CiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgIH0KICAgIGVsc2UgewogICAgICAgIG15ICRDb3VudGVyOwogICAgICAgIGZvciBteSAkUXVlc3Rpb24gKEBMaXN0KSB7CgogICAgICAgICAgICBteSAkQ2xhc3NVcDsKICAgICAgICAgICAgbXkgJENsYXNzRG93bjsKCiAgICAgICAgICAgIGlmICggISRDb3VudGVyICkgewogICAgICAgICAgICAgICAgJENsYXNzVXAgPSAnRGlzYWJsZWQnLAogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRDb3VudGVyICYmICRDb3VudGVyID09ICQjTGlzdCApIHsKICAgICAgICAgICAgICAgICRDbGFzc0Rvd24gPSAnRGlzYWJsZWQnLAogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU3VydmV5UXVlc3Rpb25zU2F2ZWQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJXskUXVlc3Rpb259LAogICAgICAgICAgICAgICAgICAgIENsYXNzVXAgICA9PiAkQ2xhc3NVcCwKICAgICAgICAgICAgICAgICAgICBDbGFzc0Rvd24gPT4gJENsYXNzRG93biwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgIH0KICAgIH0KCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRTdXJ2ZXlFZGl0UXVlc3Rpb25zJywKICAgICAgICBEYXRhID0+IHsgU3VydmV5SUQgPT4gJFBhcmFte1N1cnZleUlEfSB9LAogICAgKTsKCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCBUeXBlID0+ICdTbWFsbCcgKTsKICAgIHJldHVybiAkT3V0cHV0Owp9CgpzdWIgX01hc2tRdWVzdGlvbkVkaXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlU2VydmVyRXJyb3I7CiAgICBpZiAoICRQYXJhbXtTZXJ2ZXJFcnJvcn0gKSB7CiAgICAgICAgJVNlcnZlckVycm9yID0gJXsgJFBhcmFte1NlcnZlckVycm9yfSB9OwogICAgfQoKICAgIG15ICRPdXRwdXQ7CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoCiAgICAgICAgVGl0bGUgPT4gJ1F1ZXN0aW9uIEVkaXQnLAogICAgICAgIFR5cGUgID0+ICdTbWFsbCcsCiAgICApOwogICAgbXkgJVN1cnZleSA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+U3VydmV5R2V0KCBTdXJ2ZXlJRCA9PiAkUGFyYW17U3VydmV5SUR9ICk7CiAgICBteSAlUXVlc3Rpb24gPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlF1ZXN0aW9uR2V0KCBRdWVzdGlvbklEID0+ICRQYXJhbXtRdWVzdGlvbklEfSApOwoKICAgICMgcHJpbnQgdGhlIG1haW4gYm9keQogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdRdWVzdGlvbkVkaXQnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUXVlc3Rpb24sCiAgICAgICAgICAgICVTZXJ2ZXJFcnJvciwKICAgICAgICB9LAogICAgKTsKCiAgICBpZiAoICRRdWVzdGlvbntUeXBlfSBlcSAnWWVzTm8nICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1F1ZXN0aW9uRWRpdFRhYmxlJyApOwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1F1ZXN0aW9uRWRpdFllc25vJyApOwogICAgfQogICAgZWxzaWYgKCAkUXVlc3Rpb257VHlwZX0gZXEgJ1JhZGlvJyB8fCAkUXVlc3Rpb257VHlwZX0gZXEgJ0NoZWNrYm94JyApIHsKCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnUXVlc3Rpb25FZGl0VGFibGUnICk7CgogICAgICAgIG15ICRUeXBlID0gJFF1ZXN0aW9ue1R5cGV9OwogICAgICAgIG15IEBMaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5BbnN3ZXJMaXN0KCBRdWVzdGlvbklEID0+ICRQYXJhbXtRdWVzdGlvbklEfSApOwogICAgICAgIGlmICggc2NhbGFyIEBMaXN0ICkgewoKICAgICAgICAgICAgaWYgKCAkU3VydmV5e1N0YXR1c30gZXEgJ05ldycgKSB7CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnUXVlc3Rpb25FZGl0VGFibGVEZWxldGUnICk7CgogICAgICAgICAgICAgICAgbXkgJENvdW50ZXIgPSAwOwogICAgICAgICAgICAgICAgZm9yIG15ICRBbnN3ZXIyIChATGlzdCkgewogICAgICAgICAgICAgICAgICAgICRBbnN3ZXIyLT57U3VydmV5SUR9ID0gJFBhcmFte1N1cnZleUlEfTsKCiAgICAgICAgICAgICAgICAgICAgbXkgJENsYXNzVXA7CiAgICAgICAgICAgICAgICAgICAgbXkgJENsYXNzRG93bjsKCiAgICAgICAgICAgICAgICAgICAgIyBkaXNhYmxlIHVwIGFjdGlvbiBvbiBmaXJzdCByb3cKICAgICAgICAgICAgICAgICAgICBpZiAoICEkQ291bnRlciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJENsYXNzVXAgPSAnRGlzYWJsZWQnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBkaXNhYmxlIGRvd24gYWN0aW9uIG9uIGxhc3Qgcm93CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ291bnRlciA9PSAkI0xpc3QgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDbGFzc0Rvd24gPSAnRGlzYWJsZWQnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAiUXVlc3Rpb25FZGl0IiAuICRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICV7JEFuc3dlcjJ9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NVcCAgID0+ICRDbGFzc1VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NEb3duID0+ICRDbGFzc0Rvd24sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdRdWVzdGlvbkVkaXQnIC4gJFR5cGUgLiAnRGVsZXRlJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkQW5zd2VyMiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICRDb3VudGVyKys7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdRdWVzdGlvbkVkaXRBZGRBbnN3ZXInLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUXVlc3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICVTZXJ2ZXJFcnJvciwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG15ICRDb3VudGVyOwogICAgICAgICAgICAgICAgZm9yIG15ICRBbnN3ZXIyIChATGlzdCkgewogICAgICAgICAgICAgICAgICAgICRBbnN3ZXIyLT57U3VydmV5SUR9ID0gJFBhcmFte1N1cnZleUlEfTsKCiAgICAgICAgICAgICAgICAgICAgbXkgJENsYXNzVXA7CiAgICAgICAgICAgICAgICAgICAgbXkgJENsYXNzRG93bjsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJENvdW50ZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDbGFzc1VwID0gJ0Rpc2FibGVkJywKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICggJENvdW50ZXIgJiYgJENvdW50ZXIgPT0gJCNMaXN0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ2xhc3NEb3duID0gJ0Rpc2FibGVkJywKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gIlF1ZXN0aW9uRWRpdCIgLiAkVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAleyRBbnN3ZXIyfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzVXAgICA9PiAkQ2xhc3NVcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzRG93biA9PiAkQ2xhc3NEb3duLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ05vQW5zd2Vyc1NhdmVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIENvbHVtbnMgPT4gMywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdRdWVzdGlvbkVkaXRBZGRBbnN3ZXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JVF1ZXN0aW9ufSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRRdWVzdGlvbntUeXBlfSBlcSAnVGV4dGFyZWEnICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1F1ZXN0aW9uRWRpdFRleHRBcmVhJyApOwogICAgfQogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50U3VydmV5RWRpdFF1ZXN0aW9ucycsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCnN1YiBfTWFza0Fuc3dlckVkaXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlU2VydmVyRXJyb3I7CiAgICBpZiAoICRQYXJhbXtTZXJ2ZXJFcnJvcn0gKSB7CiAgICAgICAgJVNlcnZlckVycm9yID0gJXsgJFBhcmFte1NlcnZlckVycm9yfSB9OwogICAgfQoKICAgIG15ICRPdXRwdXQ7CiAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoCiAgICAgICAgVGl0bGUgPT4gJ0Fuc3dlciBFZGl0JywKICAgICAgICBUeXBlICA9PiAnU21hbGwnLAogICAgKTsKICAgIG15ICVBbnN3ZXIgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkFuc3dlckdldCggQW5zd2VySUQgPT4gJFBhcmFte0Fuc3dlcklEfSApOwogICAgJEFuc3dlcntTdXJ2ZXlJRH0gPSAkUGFyYW17U3VydmV5SUR9OwoKICAgICMgcHJpbnQgdGhlIG1haW4gdGFibGUuCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0Fuc3dlckVkaXQnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlQW5zd2VyLAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICVTZXJ2ZXJFcnJvciwKICAgICAgICB9LAogICAgKTsKCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRTdXJ2ZXlFZGl0UXVlc3Rpb25zJywKICAgICAgICBEYXRhICAgICAgICAgPT4geyVQYXJhbX0sCiAgICApOwoKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwogICAgcmV0dXJuICRPdXRwdXQ7Cgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50U3VydmV5Wm9vbS5wbSAtIGEgc3VydmV5IG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogQWdlbnRTdXJ2ZXlab29tLnBtLHYgMS45IDIwMTEvMDQvMTMgMTA6NDU6MTkgbWIgRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFN1cnZleVpvb207Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlN1cnZleTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHM7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjkgJCkgWzFdOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBjb21tb24gb2JqZWN0cwogICAgJXskU2VsZn0gPSAlUGFyYW07CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgQ29uZmlnT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KICAgICRTZWxmLT57U3VydmV5T2JqZWN0fSAgICA9IEtlcm5lbDo6U3lzdGVtOjpTdXJ2ZXktPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntIVE1MVXRpbHNPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscy0+bmV3KCVQYXJhbSk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE91dHB1dDsKCiAgICAjIHZpZXcgYXR0YWNobWVudCBmb3IgaHRtbCBlbWFpbAogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0hUTUxWaWV3JyApIHsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJFN1cnZleUlEICAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5SUQiICk7CiAgICAgICAgbXkgJFN1cnZleUZpZWxkID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5RmllbGQiICk7CgogICAgICAgICMgbmVlZGVkIHBhcmFtcwogICAgICAgIGZvciBteSAkTmVlZGVkIChxdyggU3VydmV5SUQgU3VydmV5RmllbGQgKSkgewogICAgICAgICAgICBpZiAoICEkTmVlZGVkICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWRlZCBQYXJhbTogJE5lZWRlZCEiLAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICRTdXJ2ZXlGaWVsZCBuZSAnSW50cm9kdWN0aW9uJyAmJiAkU3VydmV5RmllbGQgbmUgJ0Rlc2NyaXB0aW9uJyApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiSW52YWxpZCBTdXJ2ZXlGaWVsZCBQYXJhbTogJFN1cnZleUZpZWxkISIsCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgICAgICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkludmFsaWQgU3VydmV5SUQ6ICRTdXJ2ZXlJRCEiLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYWxsIGF0dHJpYnV0ZXMgb2YgdGhlIHN1cnZleQogICAgICAgIG15ICVTdXJ2ZXkgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleUdldCggU3VydmV5SUQgPT4gJFN1cnZleUlEICk7CgogICAgICAgIGlmICggJFN1cnZleXskU3VydmV5RmllbGR9ICkgewoKICAgICAgICAgICAgIyBjbGVhbiBodG1sIGFuZCBjb252ZXJ0IHRoZSBGaWVsZCBpbiBodG1sIChcbiAtLT48YnI+KQogICAgICAgICAgICAkU3VydmV5eyRTdXJ2ZXlGaWVsZH0gPX4gc3tcQVwkaHRtbFwvdGV4dFwkXHMoLiopfXskMX14bXM7CiAgICAgICAgICAgICRTdXJ2ZXl7JFN1cnZleUZpZWxkfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICRTdXJ2ZXl7JFN1cnZleUZpZWxkfSwKICAgICAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGNvbnZlcnQgdGV4dCBhcmVhIGZpZWxkcyB0byBhc2NpaQogICAgICAgICRTdXJ2ZXl7JFN1cnZleUZpZWxkfQogICAgICAgICAgICA9ICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fS0+VG9Bc2NpaSggU3RyaW5nID0+ICRTdXJ2ZXl7JFN1cnZleUZpZWxkfSApOwoKICAgICAgICAkU3VydmV5eyRTdXJ2ZXlGaWVsZH0gPSAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0tPkRvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgIFN0cmluZyAgPT4gJFN1cnZleXskU3VydmV5RmllbGR9LAogICAgICAgICAgICBDaGFyc2V0ID0+ICd1dGYtOCcsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXR0YWNobWVudCgKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkU3VydmV5eyRTdXJ2ZXlGaWVsZH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHN1cnZleSB6b29tCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkU3VydmV5SUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKICAgIG15ICRNZXNzYWdlICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIk1lc3NhZ2UiICk7CgogICAgIyBjaGVjayBpZiBzdXJ2ZXkgZXhpc3RzCiAgICBpZiAoCiAgICAgICAgISRTdXJ2ZXlJRCB8fAogICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgJ1llcycKICAgICAgICApCiAgICB7CiAgICAgICAgJE1lc3NhZ2UgPSAnO01lc3NhZ2U9Tm9TdXJ2ZXlJRCc7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249QWdlbnRTdXJ2ZXkkTWVzc2FnZSIgKTsKICAgIH0KCiAgICAjIG91dHB1dCBoZWFkZXIKICAgICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVGl0bGUgPT4gJ1N1cnZleScgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBvdXRwdXQgbWVzYWdlcyBpZiBzdGF0dXMgd2FzIGNoYW5nZWQKICAgIGlmICggZGVmaW5lZCgkTWVzc2FnZSkgJiYgJE1lc3NhZ2UgZXEgJ05vUXVlc3Rpb24nICkgewogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgIEluZm8gICAgID0+ICdDYW5cJ3Qgc2V0IG5ldyBzdGF0dXMhIE5vIHF1ZXN0aW9ucyBkZWZpbmVkLicsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggZGVmaW5lZCgkTWVzc2FnZSkgJiYgJE1lc3NhZ2UgZXEgJ0luY29tcGxldGVRdWVzdGlvbicgKSB7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgSW5mbyAgICAgPT4gJ0NhblwndCBzZXQgbmV3IHN0YXR1cyEgUXVlc3Rpb25zIGluY29tcGxldGUuJywKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCBkZWZpbmVkKCRNZXNzYWdlKSAmJiAkTWVzc2FnZSBlcSAnU3RhdHVzU2V0JyApIHsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KAogICAgICAgICAgICBQcmlvcml0eSA9PiAnTm90aWNlJywKICAgICAgICAgICAgSW5mbyAgICAgPT4gJ1N0YXR1cyBjaGFuZ2VkLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBhbGwgYXR0cmlidXRlcyBvZiB0aGUgc3VydmV5CiAgICBteSAlU3VydmV5ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5TdXJ2ZXlHZXQoIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCApOwogICAgbXkgJUhUTUw7CgogICAgIyBjbGVhbiBodG1sIGFuZCBjb252ZXJ0IHRoZSB0ZXh0YXJlYXMgaW4gaHRtbCAoXG4gLS0+PGJyPikKICAgIGZvciBteSAkU3VydmV5RmllbGQgKHF3KCBJbnRyb2R1Y3Rpb24gRGVzY3JpcHRpb24gKSkgewogICAgICAgIG5leHQgaWYgISRTdXJ2ZXl7JFN1cnZleUZpZWxkfTsKCiAgICAgICAgJFN1cnZleXskU3VydmV5RmllbGR9ID1+IHN7XEFcJGh0bWxcL3RleHRcJFxzKC4qKX17JDF9eG1zOwoKICAgICAgICBpZiAoJDEpIHsKICAgICAgICAgICAgJEhUTUx7JFN1cnZleUZpZWxkfSA9IDE7CiAgICAgICAgfQoKICAgICAgICAkU3VydmV5eyRTdXJ2ZXlGaWVsZH0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICRTdXJ2ZXl7JFN1cnZleUZpZWxkfSwKICAgICAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IG51bWJlcnMgb2YgcmVxdWVzdHMgYW5kIHZvdGVzCiAgICBteSAkU2VuZFJlcXVlc3QgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkNvdW50UmVxdWVzdCgKICAgICAgICBTdXJ2ZXlJRCA9PiAkU3VydmV5SUQsCiAgICAgICAgVmFsaWRJRCAgPT4gJ2FsbCcsCiAgICApOwogICAgbXkgJFJlcXVlc3RDb21wbGV0ZSA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+Q291bnRSZXF1ZXN0KAogICAgICAgIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCwKICAgICAgICBWYWxpZElEICA9PiAwLAogICAgKTsKICAgICRTdXJ2ZXl7U2VuZFJlcXVlc3R9ICAgICA9ICRTZW5kUmVxdWVzdDsKICAgICRTdXJ2ZXl7UmVxdWVzdENvbXBsZXRlfSA9ICRSZXF1ZXN0Q29tcGxldGU7CgogICAgIyBnZXQgc2VsZWN0ZWQgcXVldWVzCiAgICBteSAlUXVldWVzID0gJFNlbGYtPntRdWV1ZU9iamVjdH0tPkdldEFsbFF1ZXVlcygpOwogICAgbXkgQFF1ZXVlTGlzdCA9IG1hcCB7ICRRdWV1ZXN7JF99IH0gQHsgJFN1cnZleXtRdWV1ZXN9IH07CiAgICBAUXVldWVMaXN0ID0gc29ydCB7IGxjICRhIGNtcCBsYyAkYiB9IEBRdWV1ZUxpc3Q7CiAgICBteSAkUXVldWVMaXN0U3RyaW5nID0gam9pbiBxeywgfSwgQFF1ZXVlTGlzdDsKCiAgICBteSAkTm9RdWV1ZU1lc3NhZ2UgPSAnJzsKICAgIGlmICggISRRdWV1ZUxpc3RTdHJpbmcgKSB7CiAgICAgICAgJFF1ZXVlTGlzdFN0cmluZyA9ICctIE5vIHF1ZXVlIHNlbGVjdGVkIC0nOwogICAgfQoKICAgICMgcHJpbnQgdGhlIG1haW4gdGFibGUuCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1N1cnZleVpvb20nLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlU3VydmV5LAogICAgICAgICAgICBOb1F1ZXVlTWVzc2FnZSAgPT4gJE5vUXVldWVNZXNzYWdlLAogICAgICAgICAgICBRdWV1ZUxpc3RTdHJpbmcgPT4gJFF1ZXVlTGlzdFN0cmluZywKICAgICAgICAgICAgSFRNTFJpY2hUZXh0SGVpZ2h0RGVmYXVsdCA9PgogICAgICAgICAgICAgICAgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1N1cnZleTo6RnJvbnRlbmQ6OkhUTUxSaWNoVGV4dEhlaWdodERlZmF1bHQnKSB8fCA4MCwKICAgICAgICAgICAgSFRNTFJpY2hUZXh0SGVpZ2h0TWF4ID0+CiAgICAgICAgICAgICAgICAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU3VydmV5OjpGcm9udGVuZDo6SFRNTFJpY2hUZXh0SGVpZ2h0TWF4JykgfHwgMjUwMCwKICAgICAgICB9LAogICAgKTsKCiAgICBmb3IgbXkgJEZpZWxkIChxdyggSW50cm9kdWN0aW9uIERlc2NyaXB0aW9uKSkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1N1cnZleUJsb2NrJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSA9PiAiU3VydmV5ICRGaWVsZCIsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgKTsKICAgICAgICBpZiAoICRIVE1MeyRGaWVsZH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdCb2R5SFRNTCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBTdXJ2ZXlGaWVsZCA9PiAkRmllbGQsCiAgICAgICAgICAgICAgICAgICAgU3VydmV5SUQgICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdCb2R5UGxhaW4nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTGFiZWwgICA9PiAkRmllbGQsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkU3VydmV5eyRGaWVsZH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRpc3BsYXkgc3RhdHMgaWYgc3RhdHVzIE1hc3RlciwgVmFsaWQgb3IgSW52YWxpZAogICAgaWYgKAogICAgICAgICRTdXJ2ZXl7U3RhdHVzfSAgICBlcSAnTWFzdGVyJwogICAgICAgIHx8ICRTdXJ2ZXl7U3RhdHVzfSBlcSAnVmFsaWQnCiAgICAgICAgfHwgJFN1cnZleXtTdGF0dXN9IGVxICdJbnZhbGlkJwogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTdXJ2ZXlFZGl0U3RhdHMnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBhbGwgcXVlc3Rpb25zIG9mIHRoZSBzdXJ2ZXkKICAgICAgICBteSBAUXVlc3Rpb25MaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvbkxpc3QoIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCApOwogICAgICAgIGZvciBteSAkUXVlc3Rpb24gKEBRdWVzdGlvbkxpc3QpIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N1cnZleUVkaXRTdGF0c1F1ZXN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgPT4gJFF1ZXN0aW9uLAogICAgICAgICAgICApOwogICAgICAgICAgICBteSBAQW5zd2VyczsKCiAgICAgICAgICAgICMgZ2VuZXJhdGUgdGhlIGFuc3dlcnMgb2YgdGhlIHF1ZXN0aW9uCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRRdWVzdGlvbi0+e1R5cGV9ICAgIGVxICdZZXNObycKICAgICAgICAgICAgICAgIHx8ICRRdWVzdGlvbi0+e1R5cGV9IGVxICdSYWRpbycKICAgICAgICAgICAgICAgIHx8ICRRdWVzdGlvbi0+e1R5cGV9IGVxICdDaGVja2JveCcKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgQEFuc3dlckxpc3Q7CgogICAgICAgICAgICAgICAgIyBzZXQgYW5zd2VycyB0byBZZXMgYW5kIE5vIGlmIHR5cGUgd2FzIFllc05vCiAgICAgICAgICAgICAgICBpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdZZXNObycgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJURhdGE7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7QW5zd2VyfSAgID0gIlllcyI7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7QW5zd2VySUR9ID0gIlllcyI7CiAgICAgICAgICAgICAgICAgICAgcHVzaCggQEFuc3dlckxpc3QsIFwlRGF0YSApOwogICAgICAgICAgICAgICAgICAgIG15ICVEYXRhMjsKICAgICAgICAgICAgICAgICAgICAkRGF0YTJ7QW5zd2VyfSAgID0gIk5vIjsKICAgICAgICAgICAgICAgICAgICAkRGF0YTJ7QW5zd2VySUR9ID0gIk5vIjsKICAgICAgICAgICAgICAgICAgICBwdXNoKCBAQW5zd2VyTGlzdCwgXCVEYXRhMiApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IGFsbCBhbnN3ZXJzIG9mIGEgcXVlc3Rpb24KICAgICAgICAgICAgICAgICAgICBAQW5zd2VyTGlzdCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+QW5zd2VyTGlzdCgKICAgICAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb24tPntRdWVzdGlvbklEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIG15ICRSb3cgKEBBbnN3ZXJMaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJENvdW50Vm90ZSA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+Q291bnRWb3RlKAogICAgICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBWb3RlVmFsdWUgID0+ICRSb3ctPntBbnN3ZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBteSAkUGVyY2VudCA9IDA7CgogICAgICAgICAgICAgICAgICAgICMgY2FsY3VsYXRlIHRoZSBwZXJjZW50cwogICAgICAgICAgICAgICAgICAgIGlmICgkUmVxdWVzdENvbXBsZXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQZXJjZW50ID0gMTAwIC8gJFJlcXVlc3RDb21wbGV0ZSAqICRDb3VudFZvdGU7CiAgICAgICAgICAgICAgICAgICAgICAgICRQZXJjZW50ID0gc3ByaW50ZiggIiUuMGYiLCAkUGVyY2VudCApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBteSAlRGF0YTsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtBbnN3ZXJ9ICAgICAgICA9ICRSb3ctPntBbnN3ZXJ9OwogICAgICAgICAgICAgICAgICAgICREYXRhe0Fuc3dlclBlcmNlbnR9ID0gJFBlcmNlbnQ7CiAgICAgICAgICAgICAgICAgICAgcHVzaCggQEFuc3dlcnMsIFwlRGF0YSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1RleHRhcmVhJyApIHsKICAgICAgICAgICAgICAgIG15ICRBbnN3ZXJObyA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+Q291bnRWb3RlKAogICAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uSUQgPT4gJFF1ZXN0aW9uLT57UXVlc3Rpb25JRH0sCiAgICAgICAgICAgICAgICAgICAgVm90ZVZhbHVlICA9PiAnJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSAkUGVyY2VudCA9IDA7CgogICAgICAgICAgICAgICAgIyBjYWxjdWxhdGUgdGhlIHBlcmNlbnRzCiAgICAgICAgICAgICAgICBpZiAoJFJlcXVlc3RDb21wbGV0ZSkgewogICAgICAgICAgICAgICAgICAgICRQZXJjZW50ID0gMTAwIC8gJFJlcXVlc3RDb21wbGV0ZSAqICRBbnN3ZXJObzsKICAgICAgICAgICAgICAgICAgICAkUGVyY2VudCA9IHNwcmludGYoICIlLjBmIiwgJFBlcmNlbnQgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG15ICVEYXRhOwogICAgICAgICAgICAgICAgJERhdGF7QW5zd2VyfSA9ICJhbnN3ZXJlZCI7CiAgICAgICAgICAgICAgICBpZiAoICEkUmVxdWVzdENvbXBsZXRlICkgewogICAgICAgICAgICAgICAgICAgICREYXRhe0Fuc3dlclBlcmNlbnR9ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICREYXRhe0Fuc3dlclBlcmNlbnR9ID0gMTAwIC0gJFBlcmNlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwdXNoKCBAQW5zd2VycywgXCVEYXRhICk7CiAgICAgICAgICAgICAgICBteSAlRGF0YTI7CiAgICAgICAgICAgICAgICAkRGF0YTJ7QW5zd2VyfSAgICAgICAgPSAibm90IGFuc3dlcmVkIjsKICAgICAgICAgICAgICAgICREYXRhMntBbnN3ZXJQZXJjZW50fSA9ICRQZXJjZW50OwogICAgICAgICAgICAgICAgcHVzaCggQEFuc3dlcnMsIFwlRGF0YTIgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBvdXRwdXQgYWxsIGFuc3dlcnMgb2YgdGhlIHN1cnZleQogICAgICAgICAgICBmb3IgbXkgJFJvdyAoQEFuc3dlcnMpIHsKICAgICAgICAgICAgICAgICRSb3ctPntBbnN3ZXJQZXJjZW50VGFibGV9ID0gJFJvdy0+e0Fuc3dlclBlcmNlbnR9OwogICAgICAgICAgICAgICAgaWYgKCAhJFJvdy0+e0Fuc3dlclBlcmNlbnR9ICkgewogICAgICAgICAgICAgICAgICAgICRSb3ctPntBbnN3ZXJQZXJjZW50VGFibGV9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU3VydmV5RWRpdFN0YXRzQW5zd2VyJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRSb3csCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkUmVxdWVzdENvbXBsZXRlKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTdXJ2ZXlFZGl0U3RhdHNEZXRhaWxzJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyBTdXJ2ZXlJRCA9PiAkU3VydmV5SUQgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkU3VydmV5e1N0YXR1c30gZXEgJ05ldycgKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnTm9TdGF0UmVzdWx0cycgKTsKICAgIH0KCiAgICAjIG91dHB1dCB0aGUgcG9zc2libGUgc3RhdHVzCiAgICBteSAlTmV3U3RhdHVzOwogICAgJE5ld1N0YXR1c3tDaGFuZ2VTdGF0dXN9ID0gJy0gQ2hhbmdlIFN0YXR1cyAtJzsKCiAgICBpZiAoICRTdXJ2ZXl7U3RhdHVzfSBlcSAnTmV3JyB8fCAkU3VydmV5e1N0YXR1c30gZXEgJ0ludmFsaWQnICkgewogICAgICAgICROZXdTdGF0dXN7TWFzdGVyfSA9ICdNYXN0ZXInOwogICAgICAgICROZXdTdGF0dXN7VmFsaWR9ICA9ICdWYWxpZCc7CiAgICB9CiAgICBlbHNpZiAoICRTdXJ2ZXl7U3RhdHVzfSBlcSAnVmFsaWQnICkgewogICAgICAgICROZXdTdGF0dXN7TWFzdGVyfSAgPSAnTWFzdGVyJzsKICAgICAgICAkTmV3U3RhdHVze0ludmFsaWR9ID0gJ0ludmFsaWQnOwogICAgfQogICAgZWxzaWYgKCAkU3VydmV5e1N0YXR1c30gZXEgJ01hc3RlcicgKSB7CiAgICAgICAgJE5ld1N0YXR1c3tWYWxpZH0gICA9ICdWYWxpZCc7CiAgICAgICAgJE5ld1N0YXR1c3tJbnZhbGlkfSA9ICdJbnZhbGlkJzsKICAgIH0KCiAgICBteSAkTmV3U3RhdHVzU3RyID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBOYW1lICAgICAgID0+ICdOZXdTdGF0dXMnLAogICAgICAgIElEICAgICAgICAgPT4gJ05ld1N0YXR1cycsCiAgICAgICAgRGF0YSAgICAgICA9PiBcJU5ld1N0YXR1cywKICAgICAgICBTZWxlY3RlZElEID0+ICdDaGFuZ2VTdGF0dXMnLAogICAgKTsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1N1cnZleVN0YXR1cycsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIE5ld1N0YXR1c1N0ciA9PiAkTmV3U3RhdHVzU3RyLAogICAgICAgICAgICBTdXJ2ZXlJRCAgICAgPT4gJFN1cnZleUlELAogICAgICAgIH0sCiAgICApOwogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50U3VydmV5Wm9vbScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgIHJldHVybiAkT3V0cHV0OwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL1B1YmxpY1N1cnZleS5wbSAtIGEgc3VydmV5IG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogUHVibGljU3VydmV5LnBtLHYgMS4yNSAyMDExLzExLzA0IDEyOjQwOjAxIGpoIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6UHVibGljU3VydmV5OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpTdXJ2ZXk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9IHF3KCRSZXZpc2lvbjogMS4yNSAkKSBbMV07CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IGNvbW1vbiBvYmplY3RzCiAgICAleyRTZWxmfSA9ICVQYXJhbTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBDb25maWdPYmplY3QgVXNlck9iamVjdCkpIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CiAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0gICAgPSBLZXJuZWw6OlN5c3RlbTo6U3VydmV5LT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMtPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRPdXRwdXQ7CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBwdWJsaWMgc3VydmV5IHZvdGUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdQdWJsaWNTdXJ2ZXlWb3RlJyApIHsKICAgICAgICBteSAkUHVibGljU3VydmV5S2V5ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnUHVibGljU3VydmV5S2V5JyApOwogICAgICAgIG15ICVTdXJ2ZXkgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlB1YmxpY1N1cnZleUdldCggUHVibGljU3VydmV5S2V5ID0+ICRQdWJsaWNTdXJ2ZXlLZXkgKTsKICAgICAgICBpZiAoICRTdXJ2ZXl7U3VydmV5SUR9ICkgewogICAgICAgICAgICBteSBAUXVlc3Rpb25MaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvbkxpc3QoIFN1cnZleUlEID0+ICRTdXJ2ZXl7U3VydmV5SUR9ICk7CiAgICAgICAgICAgIGZvciBteSAkUXVlc3Rpb24gKEBRdWVzdGlvbkxpc3QpIHsKICAgICAgICAgICAgICAgIGlmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1llc05vJyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkUHVibGljU3VydmV5Vm90ZTEgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oCiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtID0+ICJQdWJsaWNTdXJ2ZXlWb3RlMVskUXVlc3Rpb24tPntRdWVzdGlvbklEfV0iCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlB1YmxpY0Fuc3dlclNhdmUoCiAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAkUHVibGljU3VydmV5S2V5LAogICAgICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEICAgICAgPT4gJFF1ZXN0aW9uLT57UXVlc3Rpb25JRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFZvdGVWYWx1ZSAgICAgICA9PiAkUHVibGljU3VydmV5Vm90ZTEsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1JhZGlvJyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkUHVibGljU3VydmV5Vm90ZTIgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oCiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtID0+ICJQdWJsaWNTdXJ2ZXlWb3RlMlskUXVlc3Rpb24tPntRdWVzdGlvbklEfV0iCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlB1YmxpY0Fuc3dlclNhdmUoCiAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAkUHVibGljU3VydmV5S2V5LAogICAgICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEICAgICAgPT4gJFF1ZXN0aW9uLT57UXVlc3Rpb25JRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFZvdGVWYWx1ZSAgICAgICA9PiAkUHVibGljU3VydmV5Vm90ZTIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ0NoZWNrYm94JyApIHsKICAgICAgICAgICAgICAgICAgICBteSBAQW5zd2VyTGlzdCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+QW5zd2VyTGlzdCgKICAgICAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb24tPntRdWVzdGlvbklEfQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRBbnN3ZXIgKEBBbnN3ZXJMaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRQdWJsaWNTdXJ2ZXlWb3RlMyA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtID0+ICJQdWJsaWNTdXJ2ZXlWb3RlM1skQW5zd2VyLT57QW5zd2VySUR9XSIKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkUHVibGljU3VydmV5Vm90ZTMgJiYgJFB1YmxpY1N1cnZleVZvdGUzIGVxICdZZXMnICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5QdWJsaWNBbnN3ZXJTYXZlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAkUHVibGljU3VydmV5S2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uSUQgICAgICA9PiAkUXVlc3Rpb24tPntRdWVzdGlvbklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWb3RlVmFsdWUgICAgICAgPT4gJEFuc3dlci0+e0Fuc3dlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdUZXh0YXJlYScgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJFB1YmxpY1N1cnZleVZvdGU0ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKAogICAgICAgICAgICAgICAgICAgICAgICBQYXJhbSA9PiAiUHVibGljU3VydmV5Vm90ZTRbJFF1ZXN0aW9uLT57UXVlc3Rpb25JRH1dIgogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgcmljaCB0ZXh0IGlzIGVuYWJsZWQKICAgICAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQdWJsaWNTdXJ2ZXlWb3RlNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAoIGxlbmd0aCAkUHVibGljU3VydmV5Vm90ZTQgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAiXCRodG1sL3RleHRcJCAkUHVibGljU3VydmV5Vm90ZTQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5QdWJsaWNBbnN3ZXJTYXZlKAogICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNTdXJ2ZXlLZXkgPT4gJFB1YmxpY1N1cnZleUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb25JRCAgICAgID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBWb3RlVmFsdWUgICAgICAgPT4gJFB1YmxpY1N1cnZleVZvdGU0LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5QdWJsaWNTdXJ2ZXlJbnZhbGlkU2V0KCBQdWJsaWNTdXJ2ZXlLZXkgPT4gJFB1YmxpY1N1cnZleUtleSApOwogICAgICAgIH0KICAgICAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckhlYWRlciggVGl0bGUgPT4gJ1N1cnZleScgKTsKCiAgICAgICAgIyBwcmludCB0aGUgbWFpbiB0YWJsZS4KICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQdWJsaWNTdXJ2ZXlNZXNzYWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBNZXNzYWdlVHlwZSAgID0+ICdTdXJ2ZXkgSW5mb3JtYXRpb24nLAogICAgICAgICAgICAgICAgTWVzc2FnZUhlYWRlciA9PiAnVGhhbmsgeW91IGZvciB5b3VyIGZlZWRiYWNrLicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgICAgID0+ICdUaGUgc3VydmV5IGlzIGZpbmlzaGVkLicsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdQdWJsaWNTdXJ2ZXknLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4geyVQYXJhbX0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNob3cgc3VydmV5IHZvdGUgZGF0YQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1Nob3dWb3RlRGF0YScgKSB7CiAgICAgICAgbXkgJFB1YmxpY1N1cnZleUtleSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1B1YmxpY1N1cnZleUtleScgKTsKCiAgICAgICAgIyByZXR1cm4gaWYgZmVhdHVyZSBub3QgZW5hYmxlZAogICAgICAgIGlmICggISRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJTdXJ2ZXk6OlNob3dWb3RlRGF0YSIpICkgewogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJIZWFkZXIoKTsKCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdQdWJsaWNTdXJ2ZXlNZXNzYWdlJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VUeXBlICAgPT4gJ1N1cnZleSBNZXNzYWdlIScsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUhlYWRlciA9PiAnTW9kdWxlIG5vdCBlbmFibGVkLicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAnVGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBlbmFibGVkLCBwbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IuJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdQdWJsaWNTdXJ2ZXknLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyRm9vdGVyKCk7CiAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgIH0KCiAgICAgICAgIyBHZXQgdGhlIHJlcXVlc3QgZGF0YSBhbmQgc3RhcnQgc2hvd2luZyB0aGUgZGF0YQogICAgICAgIG15ICVSZXF1ZXN0RGF0YSA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+UmVxdWVzdEdldCgKICAgICAgICAgICAgUHVibGljU3VydmV5S2V5ID0+ICRQdWJsaWNTdXJ2ZXlLZXksCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFN1cnZleUlEICA9ICRSZXF1ZXN0RGF0YXtTdXJ2ZXlJRH07CiAgICAgICAgbXkgJFRpY2tldElEICA9ICRSZXF1ZXN0RGF0YXtUaWNrZXRJRH07CiAgICAgICAgbXkgJFJlcXVlc3RJRCA9ICRSZXF1ZXN0RGF0YXtSZXF1ZXN0SUR9OwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgICAgICdZZXMnCiAgICAgICAgICAgIHx8ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRSZXF1ZXN0SUQsIEVsZW1lbnQgPT4gJ1JlcXVlc3QnICkKICAgICAgICAgICAgbmUgJ1llcycKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiV3JvbmcgcHVibGljIHN1cnZleSBrZXk6ICRQdWJsaWNTdXJ2ZXlLZXkhIiwKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdpbmZvJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVySGVhZGVyKCBUaXRsZSA9PiAnU3VydmV5JyApOwoKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1B1YmxpY1N1cnZleU1lc3NhZ2UnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVR5cGUgICA9PiAnU3VydmV5IEVycm9yIScsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUhlYWRlciA9PiAnSW52YWxpZCBzdXJ2ZXkga2V5LicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAnVGhlIGluc2VydGVkIHN1cnZleSBrZXkgaXMgaW52YWxpZCwgaWYgeW91IGZvbGxvd2VkIGEgbGluayBtYXliZSB0aGlzIGlzIG9ic29sZXRlIG9yIGJyb2tlbi4nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ1B1YmxpY1N1cnZleScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGb290ZXIoKTsKICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgfQoKICAgICAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckhlYWRlciggVGl0bGUgPT4gJ1N1cnZleSBWb3RlJyApOwoKICAgICAgICBteSAlU3VydmV5ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5TdXJ2ZXlHZXQoCiAgICAgICAgICAgIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCwKICAgICAgICAgICAgUHVibGljICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGNsZWFuIGh0bWwKICAgICAgICBpZiAoICRTdXJ2ZXl7SW50cm9kdWN0aW9ufSApIHsKICAgICAgICAgICAgJFN1cnZleXtJbnRyb2R1Y3Rpb259ID1+IHN7XEFcJGh0bWxcL3RleHRcJFxzKC4qKX17JDF9eG1zOwogICAgICAgICAgICAkU3VydmV5e0ludHJvZHVjdGlvbn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkU3VydmV5e0ludHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoJDEpIHsKICAgICAgICAgICAgICAgICRTdXJ2ZXl7SW50cm9kdWN0aW9ufSA9CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntIVE1MVXRpbHNPYmplY3R9LT5Ub0FzY2lpKCBTdHJpbmcgPT4gJFN1cnZleXtJbnRyb2R1Y3Rpb259ICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgcHJpbnQgdGhlIG1haW4gdGFibGUuCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljU3VydmV5Vm90ZURhdGEnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVTdXJ2ZXksCiAgICAgICAgICAgICAgICBNZXNzYWdlVHlwZSA9PiAnU3VydmV5IFZvdGUgRGF0YScsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICBteSBAUXVlc3Rpb25MaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvbkxpc3QoIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCApOwogICAgICAgIGZvciBteSAkUXVlc3Rpb24gKEBRdWVzdGlvbkxpc3QpIHsKCiAgICAgICAgICAgIG15ICRDbGFzcyA9ICcnOwogICAgICAgICAgICBpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdUZXh0YXJlYScgKSB7CiAgICAgICAgICAgICAgICAkQ2xhc3MgPSAnVGV4dGFyZWEnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljU3VydmV5Vm90ZVF1ZXN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICV7JFF1ZXN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICBteSBAQW5zd2VyczsKICAgICAgICAgICAgaWYgKCAkUXVlc3Rpb24tPntUeXBlfSBlcSAnUmFkaW8nIHx8ICRRdWVzdGlvbi0+e1R5cGV9IGVxICdDaGVja2JveCcgKSB7CiAgICAgICAgICAgICAgICBteSBAQW5zd2VyTGlzdDsKICAgICAgICAgICAgICAgIEBBbnN3ZXJMaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5Wb3RlR2V0KAogICAgICAgICAgICAgICAgICAgIFJlcXVlc3RJRCAgPT4gJFJlcXVlc3RJRCwKICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGZvciBteSAkUm93IChAQW5zd2VyTGlzdCkgewogICAgICAgICAgICAgICAgICAgIG15ICVBbnN3ZXIgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkFuc3dlckdldCggQW5zd2VySUQgPT4gJFJvdy0+e1ZvdGVWYWx1ZX0gKTsKICAgICAgICAgICAgICAgICAgICBteSAlRGF0YTsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtBbnN3ZXJ9ID0gJEFuc3dlcntBbnN3ZXJ9OwogICAgICAgICAgICAgICAgICAgIHB1c2goIEBBbnN3ZXJzLCBcJURhdGEgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdZZXNObycgfHwgJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1RleHRhcmVhJyApIHsKICAgICAgICAgICAgICAgIG15IEBMaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5Wb3RlR2V0KAogICAgICAgICAgICAgICAgICAgIFJlcXVlc3RJRCAgPT4gJFJlcXVlc3RJRCwKICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAlRGF0YTsKICAgICAgICAgICAgICAgICREYXRhe0Fuc3dlcn0gPSAkTGlzdFswXS0+e1ZvdGVWYWx1ZX07CgogICAgICAgICAgICAgICAgIyBjbGVhbiBodG1sCiAgICAgICAgICAgICAgICBpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdUZXh0YXJlYScgJiYgJERhdGF7QW5zd2VyfSApIHsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtBbnN3ZXJ9ID1+IHN7XEFcJGh0bWxcL3RleHRcJFxzKC4qKX17JDF9eG1zOwogICAgICAgICAgICAgICAgICAgICREYXRhe0Fuc3dlcn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgICAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICREYXRhe0Fuc3dlcn0sCiAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCQxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRhe0Fuc3dlcn0gPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntIVE1MVXRpbHNPYmplY3R9LT5Ub0FzY2lpKCBTdHJpbmcgPT4gJERhdGF7QW5zd2VyfSApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHB1c2goIEBBbnN3ZXJzLCBcJURhdGEgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgbXkgJFJvdyAoQEFuc3dlcnMpIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljU3VydmV5Vm90ZUFuc3dlcicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICV7JFJvd30sCiAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzID0+ICRDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ1B1YmxpY1N1cnZleScsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNob3cgc3VydmV5CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBteSAkUHVibGljU3VydmV5S2V5ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnUHVibGljU3VydmV5S2V5JyApOwogICAgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJIZWFkZXIoIFRpdGxlID0+ICdTdXJ2ZXknICk7CgogICAgbXkgJFVzZWRTdXJ2ZXlLZXkgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlB1YmxpY1N1cnZleUdldCgKICAgICAgICBQdWJsaWNTdXJ2ZXlLZXkgPT4gJFB1YmxpY1N1cnZleUtleSwKICAgICAgICBJbnZhbGlkICAgICAgICAgPT4gMSwKICAgICk7CgogICAgbXkgJVN1cnZleSA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+UHVibGljU3VydmV5R2V0KCBQdWJsaWNTdXJ2ZXlLZXkgPT4gJFB1YmxpY1N1cnZleUtleSApOwoKICAgICRTdXJ2ZXl7UHVibGljU3VydmV5S2V5fSA9ICRQdWJsaWNTdXJ2ZXlLZXk7CgogICAgaWYgKCRVc2VkU3VydmV5S2V5KSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljU3VydmV5TWVzc2FnZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTWVzc2FnZVR5cGUgICA9PiAnU3VydmV5IEluZm9ybWF0aW9uJywKICAgICAgICAgICAgICAgIE1lc3NhZ2VIZWFkZXIgPT4gJ1RoYW5rIHlvdSBmb3IgeW91ciBmZWVkYmFjay4nLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgICAgICA9PiAnWW91IGhhdmUgYWxyZWFkeSBhbnN3ZXJlZCB0aGUgc3VydmV5LicsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiU3VydmV5OjpTaG93Vm90ZURhdGEiKSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1Nob3dBbnN3ZXJzQnV0dG9uJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAkUHVibGljU3VydmV5S2V5LAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRTdXJ2ZXl7U3VydmV5SUR9ICkgewoKICAgICAgICAjIGNsZWFuIGh0bWwgYW5kIHByb2NjZXNzIGludHJvZHVjdGlvbiB0ZXh0CiAgICAgICAgJFN1cnZleXtJbnRyb2R1Y3Rpb259ID1+IHN7XEFcJGh0bWxcL3RleHRcJFxzKC4qKX17JDF9eG1zOwogICAgICAgIG15ICRIVE1MQ29udGVudCA9ICQxOwogICAgICAgICRTdXJ2ZXl7SW50cm9kdWN0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJFN1cnZleXtJbnRyb2R1Y3Rpb259LAogICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICk7CgogICAgICAgIGlmICgkSFRNTENvbnRlbnQpIHsKICAgICAgICAgICAgJFN1cnZleXtJbnRyb2R1Y3Rpb259CiAgICAgICAgICAgICAgICA9ICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fS0+VG9Bc2NpaSggU3RyaW5nID0+ICRTdXJ2ZXl7SW50cm9kdWN0aW9ufSApOwogICAgICAgIH0KICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQdWJsaWNTdXJ2ZXknLAogICAgICAgICAgICBEYXRhID0+IHslU3VydmV5fSwKICAgICAgICApOwoKICAgICAgICBteSBAUXVlc3Rpb25MaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvbkxpc3QoIFN1cnZleUlEID0+ICRTdXJ2ZXl7U3VydmV5SUR9ICk7CiAgICAgICAgZm9yIG15ICRRdWVzdGlvbiAoQFF1ZXN0aW9uTGlzdCkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdQdWJsaWNRdWVzdGlvbnMnICk7CiAgICAgICAgICAgIGlmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1llc05vJyApIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljQW5zd2VyWWVzTm8nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJFF1ZXN0aW9uLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdSYWRpbycgKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1B1YmxpY0Fuc3dlclJhZGlvJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRRdWVzdGlvbiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSBAQW5zd2VyTGlzdCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+QW5zd2VyTGlzdCgKICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGZvciBteSAkQW5zd2VyIChAQW5zd2VyTGlzdCkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1B1YmxpY0Fuc3dlclJhZGlvYicsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJEFuc3dlciwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ0NoZWNrYm94JyApIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljQW5zd2VyQ2hlY2tib3gnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJFF1ZXN0aW9uLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15IEBBbnN3ZXJMaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5BbnN3ZXJMaXN0KAogICAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uSUQgPT4gJFF1ZXN0aW9uLT57UXVlc3Rpb25JRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgZm9yIG15ICRBbnN3ZXIgKEBBbnN3ZXJMaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljQW5zd2VyQ2hlY2tib3hiJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkQW5zd2VyLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUXVlc3Rpb24tPntUeXBlfSBlcSAnVGV4dGFyZWEnICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdQdWJsaWNBbnN3ZXJUZXh0YXJlYScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkUXVlc3Rpb24sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgcmljaCB0ZXh0IGlzIGVuYWJsZWQKICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntMYXlvdXRPYmplY3R9LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdSaWNoVGV4dCcgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1B1YmxpY1N1cnZleU1lc3NhZ2UnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE1lc3NhZ2VUeXBlICAgPT4gJ1N1cnZleSBFcnJvciEnLAogICAgICAgICAgICAgICAgTWVzc2FnZUhlYWRlciA9PiAnSW52YWxpZCBzdXJ2ZXkga2V5LicsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgJ1RoZSBpbnNlcnRlZCBzdXJ2ZXkga2V5IGlzIGludmFsaWQsIGlmIHlvdSBmb2xsb3dlZCBhIGxpbmsgbWF5YmUgdGhpcyBpcyBvYnNvbGV0ZSBvciBicm9rZW4uJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ1B1YmxpY1N1cnZleScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZvb3RlcigpOwogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9TdXJ2ZXlPdmVydmlld1NtYWxsLnBtLnBtCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBTdXJ2ZXlPdmVydmlld1NtYWxsLnBtLHYgMS4yIDIwMTIvMDEvMjAgMTE6NTk6MTggbWIgRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlN1cnZleU92ZXJ2aWV3U21hbGw7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjIgJCkgWzFdOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IFVzZXJJRCBVc2VyT2JqZWN0IE1haW5PYmplY3QpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUGFnZVNob3duIFN0YXJ0SGl0KSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbmVlZCBTdXJ2ZXlJRHMKICAgIGlmICggISRQYXJhbXtTdXJ2ZXlJRHN9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCB0aGUgU3VydmV5SURzIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzdG9yZSB0aGUgU3VydmV5SURzIGxvY2FsbHkKICAgIG15IEBJRHMgPSBAeyAkUGFyYW17U3VydmV5SURzfSB9OwoKICAgICMgY2hlY2sgU2hvd0NvbHVtbnMgcGFyYW1ldGVyCiAgICBteSBAU2hvd0NvbHVtbnM7CiAgICBpZiAoICRQYXJhbXtTaG93Q29sdW1uc30gJiYgcmVmICRQYXJhbXtTaG93Q29sdW1uc30gZXEgJ0FSUkFZJyApIHsKICAgICAgICBAU2hvd0NvbHVtbnMgPSBAeyAkUGFyYW17U2hvd0NvbHVtbnN9IH07CiAgICB9CgogICAgbXkgJE91dHB1dCA9ICcnOwoKICAgICMgc2hvdyBzdXJ2ZXlzIGlmIHRoZXJlIGFyZSBzb21lCiAgICBpZiAoQElEcykgewoKICAgICAgICAjIGJ1aWxkIGNvbHVtbiBoZWFkZXIgYmxvY2tzCiAgICAgICAgIyBjdXJyZW50bHkgc29ydGluZyBpcyBub3QgaW1wbGVtZW50ZWQgb24gc3VydmV5LCBsZWF2ZSB0aGUgY29kZSBmb3IgZnV0dXJlIGltcGxlbWVudGF0aW9uCiAgICAgICAgaWYgKEBTaG93Q29sdW1ucykgewogICAgICAgICAgICBmb3IgbXkgJENvbHVtbiAoQFNob3dDb2x1bW5zKSB7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgbmVlZGVkIHZhcmlhYmxlcwogICAgICAgICAgICAgICAgbXkgJENTUyA9ICcnOwogICAgICAgICAgICAgICAgbXkgJE9yZGVyQnk7CgogICAgICAgICAgICAgICAgIyBzZXQgdGhlIGNvcnJlY3QgU2V0IENTUyBjbGFzcyBhbmQgb3JkZXIgYnkgbGluawogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17U29ydEJ5fSAmJiAoICRQYXJhbXtTb3J0Qnl9IGVxICRDb2x1bW4gKSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRQYXJhbXtPcmRlckJ5fSAmJiAoICRQYXJhbXtPcmRlckJ5fSBlcSAnVXAnICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRPcmRlckJ5ID0gJ0Rvd24nOwogICAgICAgICAgICAgICAgICAgICAgICAkQ1NTIC49ICcgU29ydERlc2NlbmRpbmcnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE9yZGVyQnkgPSAnVXAnOwogICAgICAgICAgICAgICAgICAgICAgICAkQ1NTIC49ICcgU29ydEFzY2VuZGluZyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJE9yZGVyQnkgPSAnVXAnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgb3V0cHV0IGVhY2ggaGVhZGVyCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcgLiAkQ29sdW1uIC4gJ0hlYWRlcicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgQ1NTICAgICA9PiAkQ1NTLAogICAgICAgICAgICAgICAgICAgICAgICBPcmRlckJ5ID0+ICRPcmRlckJ5LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkQ291bnRlciA9IDA7CgogICAgICAgIElEOgogICAgICAgIGZvciBteSAkSUQgKEBJRHMpIHsKICAgICAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvdW50ZXIgPj0gJFBhcmFte1N0YXJ0SGl0fQogICAgICAgICAgICAgICAgJiYgJENvdW50ZXIgPCAoICRQYXJhbXtQYWdlU2hvd259ICsgJFBhcmFte1N0YXJ0SGl0fSApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGdldCBzdXJ2ZXkgZGF0YQogICAgICAgICAgICAgICAgbXkgJURhdGEgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleUdldCgKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgU3VydmV5SUQgPT4gJElELAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IElEIGlmICElRGF0YTsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIHJlY29yZCBibG9jawogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgY29sdW1uIHJlY29yZCBibG9ja3MKICAgICAgICAgICAgICAgIGlmIChAU2hvd0NvbHVtbnMpIHsKICAgICAgICAgICAgICAgICAgICBDT0xVTU46CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKEBTaG93Q29sdW1ucykgewogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBzaG93IGxpbmtzIGlmIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4gLiAnTGlua1N0YXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiAuICdMaW5rRW5kJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgaWYgdGhlcmUgYXJlIG5vIHN1cnZleXMgdG8gc2hvdywgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaXMgZGlzcGxheWVkIGluIHRoZSB0YWJsZQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRvdGFsQ29sdW1ucyA9PiBzY2FsYXIgQFNob3dDb2x1bW5zLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyB1c2UgdGVtcGxhdGUKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFN1cnZleU92ZXJ2aWV3U21hbGwnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJFNlbGYtPntWaWV3VHlwZX0sCiAgICAgICAgICAgIENvbHVtbkNvdW50ID0+IHNjYWxhciBAU2hvd0NvbHVtbnMsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIEFnZW50U3VydmV5LmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgQWdlbnRTdXJ2ZXkKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IEFnZW50U3VydmV5LmR0bCx2IDEuNTUgMjAxMS8wNC8xMSAyMTowODozNSBtYiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkIC0tPgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckxhc3QiPgoKICAgIDxoMT4kVGV4dHsiQ3JlYXRlIE5ldyBTdXJ2ZXkifTwvaDE+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0iU3VydmV5IiBpZD0iU3VydmV5IiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIgLz4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlN1cnZleU5ldyIgLz4KCiAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlRpdGxlIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiVGl0bGUifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJUaXRsZSIgbmFtZT0iVGl0bGUiIHR5cGU9InRleHQiIGNsYXNzPSJXNzVwYyBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7IlRpdGxlU2VydmVyRXJyb3IifSIgdmFsdWU9IiRRRGF0YXsiVGl0bGUifSIgLz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+Cgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlBZGRSaWNoVGV4dCAtLT4KJEluY2x1ZGV7IlJpY2hUZXh0RWRpdG9yIn0KPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkUmljaFRleHQgLS0+CgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkSW50cm9kdWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkludHJvZHVjdGlvbiI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IkludHJvZHVjdGlvbiJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0iSW50cm9kdWN0aW9uIiBuYW1lPSJJbnRyb2R1Y3Rpb24iIG5hbWU9IkludHJvZHVjdGlvbiIgY2xhc3M9IlJpY2hUZXh0IFZhbGlkYXRlX1JlcXVpcmVkICRRRGF0YXsiSW50cm9kdWN0aW9uU2VydmVyRXJyb3IifSIgdGl0bGU9IlN1cnZleSBJbnRyb2R1Y3Rpb24iIHJvd3M9IjE1IiBjb2xzPSIkQ29uZmlneyJUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUifSI+JERhdGF7IkludHJvZHVjdGlvbiJ9PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlN1cnZleUFkZEludHJvZHVjdGlvbiAtLT4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTm90aWZpY2F0aW9uU2VuZGVyIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiU2VuZGVyIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iTm90aWZpY2F0aW9uU2VuZGVyIiBuYW1lPSJOb3RpZmljYXRpb25TZW5kZXIiIHR5cGU9InRleHQiIGNsYXNzPSJXNzVwYyBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7Ik5vdGlmaWNhdGlvblNlbmRlclNlcnZlckVycm9yIn0iIHZhbHVlPSIkUURhdGF7Ik5vdGlmaWNhdGlvblNlbmRlciJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTm90aWZpY2F0aW9uU3ViamVjdCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IlN1YmplY3QifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJOb3RpZmljYXRpb25TdWJqZWN0IiBuYW1lPSJOb3RpZmljYXRpb25TdWJqZWN0IiB0eXBlPSJ0ZXh0IiBjbGFzcz0iVzc1cGMgVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJOb3RpZmljYXRpb25TdWJqZWN0U2VydmVyRXJyb3IifSIgdmFsdWU9IiRRRGF0YXsiTm90aWZpY2F0aW9uU3ViamVjdCJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleUFkZE5vdGlmaWNhdGlvbkJvZHkgLS0+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTm90aWZpY2F0aW9uQm9keSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IkJvZHkifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJpY2hUZXh0RmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9Ik5vdGlmaWNhdGlvbkJvZHkiIG5hbWU9Ik5vdGlmaWNhdGlvbkJvZHkiIGNsYXNzPSJSaWNoVGV4dCBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7Ik5vdGlmaWNhdGlvbkJvZHlTZXJ2ZXJFcnJvciJ9IiB0aXRsZT0iTm90aWZpY2F0aW9uIEJvZHkiIHJvd3M9IjE1IiBjb2xzPSIkQ29uZmlneyJUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUifSI+JFFEYXRheyJOb3RpZmljYXRpb25Cb2R5In08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkTm90aWZpY2F0aW9uQm9keSAtLT4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUXVldWVzIj4kVGV4dHsiUXVldWVzIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJRdWV1ZVN0cmluZyJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkSW50ZXJuYWxEZXNjcmlwdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJEZXNjcmlwdGlvbiI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IkludGVybmFsIERlc2NyaXB0aW9uIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSaWNoVGV4dEZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJEZXNjcmlwdGlvbiIgbmFtZT0iRGVzY3JpcHRpb24iIGNsYXNzPSJSaWNoVGV4dCBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7IkRlc2NyaXB0aW9uU2VydmVyRXJyb3IifSIgdGl0bGU9IkludGVybmFsIERlc2NyaXB0aW9uIiByb3dzPSIxNSIgY29scz0iJENvbmZpZ3siVGlja2V0OjpGcm9udGVuZDo6VGV4dEFyZWFOb3RlIn0iPiRRRGF0YXsiRGVzY3JpcHRpb24ifTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlBZGRJbnRlcm5hbERlc2NyaXB0aW9uIC0tPgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkR2VuZXJpY0Vycm9yIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IiRRRGF0YXsiSXRlbU5hbWUifSIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkR2VuZXJpY0Vycm9yIC0tPgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkR2VuZXJpY1NlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IiRRRGF0YXsiSXRlbU5hbWUifSIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkR2VuZXJpY1NlcnZlckVycm9yIC0tPgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTYXZlIn0iPiRUZXh0eyJTYXZlIn08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICA8L2Zvcm0+CgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlBZGQgLS0+Cgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0IC0tPgo8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9IlN1cnZleSIgaWQ9IlN1cnZleSIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTdXJ2ZXlTYXZlIiAvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VydmV5SUQiIHZhbHVlPSIkUURhdGF7IlN1cnZleUlEIn0iIC8+CgogICAgPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICA8aDE+JFRleHR7IkVkaXQgR2VuZXJhbCBJbmZvIn06ICRUZXh0eyIkQ29uZmlneyJTdXJ2ZXk6Okhvb2sifSJ9JFFEYXRheyJTdXJ2ZXlOdW1iZXIifSAtICRRRGF0YXsiVGl0bGUifTwvaDE+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgPGEgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiIGhyZWY9IiMiPiRUZXh0eyJDYW5jZWwgJiBjbG9zZSB3aW5kb3cifTwvYT4KICAgICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiR2VuZXJhbCBJbmZvIn08L2gyPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJUaXRsZSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IlRpdGxlIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9IlRpdGxlIiBuYW1lPSJUaXRsZSIgdHlwZT0idGV4dCIgY2xhc3M9Ilc3NXBjIFZhbGlkYXRlX1JlcXVpcmVkICRRRGF0YXsiVGl0bGVTZXJ2ZXJFcnJvciJ9IiB2YWx1ZT0iJFFEYXRheyJUaXRsZSJ9IiAvPgogICAgICAgICAgICAgICAgPC9kaXY+Cgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0UmljaFRleHQgLS0+CiRJbmNsdWRleyJSaWNoVGV4dEVkaXRvciJ9CjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRSaWNoVGV4dCAtLT4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRJbnRyb2R1Y3Rpb24gLS0+CiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJJbnRyb2R1Y3Rpb24iPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJJbnRyb2R1Y3Rpb24ifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJJbnRyb2R1Y3Rpb24iIG5hbWU9IkludHJvZHVjdGlvbiIgbmFtZT0iSW50cm9kdWN0aW9uIiBjbGFzcz0iUmljaFRleHQgVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJJbnRyb2R1Y3Rpb25TZXJ2ZXJFcnJvciJ9IiB0aXRsZT0iU3VydmV5IEludHJvZHVjdGlvbiIgcm93cz0iMTUiIGNvbHM9IiRDb25maWd7IlRpY2tldDo6RnJvbnRlbmQ6OlRleHRBcmVhTm90ZSJ9Ij4kRGF0YXsiSW50cm9kdWN0aW9uIn08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRJbnRyb2R1Y3Rpb24gLS0+CgogICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTm90aWZpY2F0aW9uU2VuZGVyIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiU2VuZGVyIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9Ik5vdGlmaWNhdGlvblNlbmRlciIgbmFtZT0iTm90aWZpY2F0aW9uU2VuZGVyIiB0eXBlPSJ0ZXh0IiBjbGFzcz0iVzc1cGMgVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJOb3RpZmljYXRpb25TZW5kZXJTZXJ2ZXJFcnJvciJ9IiB2YWx1ZT0iJFFEYXRheyJOb3RpZmljYXRpb25TZW5kZXIifSIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5vdGlmaWNhdGlvblN1YmplY3QiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJTdWJqZWN0In06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9Ik5vdGlmaWNhdGlvblN1YmplY3QiIG5hbWU9Ik5vdGlmaWNhdGlvblN1YmplY3QiIHR5cGU9InRleHQiIGNsYXNzPSJXNzVwYyBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7Ik5vdGlmaWNhdGlvblN1YmplY3RTZXJ2ZXJFcnJvciJ9IiB2YWx1ZT0iJFFEYXRheyJOb3RpZmljYXRpb25TdWJqZWN0In0iIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXROb3RpZmljYXRpb25Cb2R5IC0tPgogICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTm90aWZpY2F0aW9uQm9keSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IkJvZHkifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJOb3RpZmljYXRpb25Cb2R5IiBuYW1lPSJOb3RpZmljYXRpb25Cb2R5IiBjbGFzcz0iUmljaFRleHQgVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJOb3RpZmljYXRpb25Cb2R5U2VydmVyRXJyb3IifSIgdGl0bGU9Ik5vdGlmaWNhdGlvbiBCb2R5IiByb3dzPSIxNSIgY29scz0iJENvbmZpZ3siVGlja2V0OjpGcm9udGVuZDo6VGV4dEFyZWFOb3RlIn0iPiRRRGF0YXsiTm90aWZpY2F0aW9uQm9keSJ9PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0Tm90aWZpY2F0aW9uQm9keSAtLT4KCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJRdWV1ZXMiPiRUZXh0eyJRdWV1ZXMifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICREYXRheyJRdWV1ZVN0cmluZyJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRJbnRlcm5hbERlc2NyaXB0aW9uIC0tPgogICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iRGVzY3JpcHRpb24iPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJJbnRlcm5hbCBEZXNjcmlwdGlvbiJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSaWNoVGV4dEZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9IkRlc2NyaXB0aW9uIiBuYW1lPSJEZXNjcmlwdGlvbiIgY2xhc3M9IlJpY2hUZXh0IFZhbGlkYXRlX1JlcXVpcmVkICRRRGF0YXsiRGVzY3JpcHRpb25TZXJ2ZXJFcnJvciJ9IiB0aXRsZT0iSW50ZXJuYWwgRGVzY3JpcHRpb24iIHJvd3M9IjE1IiBjb2xzPSIkQ29uZmlneyJUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUifSI+JFFEYXRheyJEZXNjcmlwdGlvbiJ9PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0SW50ZXJuYWxEZXNjcmlwdGlvbiAtLT4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRHZW5lcmljRXJyb3IgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSIkUURhdGF7Ikl0ZW1OYW1lIn0iIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0R2VuZXJpY0Vycm9yIC0tPgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFNlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgPGRpdiBpZD0iJFFEYXRheyJJdGVtTmFtZSJ9IiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFNlcnZlckVycm9yIC0tPgoKICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJGb290ZXIiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiU2F2ZSJ9Ij4kVGV4dHsiU2F2ZSJ9PC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9mb3JtPgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0IC0tPgoKPCEtLSBkdGw6YmxvY2s6U3RhdHMgLS0+CjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CiAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgIDxoMT4kVGV4dHsiU3RhdHMgT3ZlcnZpZXcgb2YifSA6ICRUZXh0eyIkQ29uZmlneyJTdXJ2ZXk6Okhvb2sifSJ9JERhdGF7IlN1cnZleU51bWJlciJ9IC0gJERhdGF7IlRpdGxlIn0gPC9oMT4KICAgICAgICA8cD4KICAgICAgICAgICAgPGEgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiIGhyZWY9IiMiPiRUZXh0eyJDYW5jZWwgJiBjbG9zZSB3aW5kb3cifTwvYT4KICAgICAgICA8L3A+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICA8aDI+PC9oMj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tTWVkaXVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiUmVxdWVzdHMgVGFibGUifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiU2VuZCBUaW1lIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IlZvdGUgVGltZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJUaWNrZXQifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiRGV0YWlscyJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpTdGF0c1ZvdGUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGltZUxvbmd7IiREYXRheyJTZW5kVGltZSJ9In0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWVMb25neyIkRGF0YXsiVm90ZVRpbWUifSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJMaW5rWm9vbVZpZXcgQXNCbG9jayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9JExRRGF0YXsiVGlja2V0SUQifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiVGlja2V0TnVtYmVyIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVN0YXRzRGV0YWlsO1N1cnZleUlEPSRRRGF0YXsiU3VydmV5SUQifTtSZXF1ZXN0SUQ9JFFEYXRheyJSZXF1ZXN0SUQifTtUaWNrZXROdW1iZXI9JFFEYXRheyJUaWNrZXROdW1iZXIifSIgY2xhc3M9IlNlZURldGFpbHMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5TZWUgRGV0YWlsczwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpTdGF0c1ZvdGUgLS0+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iRm9vdGVyIj4KICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAgUHJpbWFyeSIgdmFsdWU9IiRUZXh0eyJDbG9zZSB3aW5kb3cifSI+JFRleHR7IkNsb3NlIHdpbmRvdyJ9PC9idXR0b24+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJ2EuTGlua1pvb21WaWV3JykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgd2luZG93Lm9wZW5lci5Db3JlLlVJLlBvcHVwLkZpcmVQb3B1cEV2ZW50KCdVUkwnLCB7IFVSTDogJCh0aGlzKS5hdHRyKCdocmVmJyl9KTsKICAgICAgICB3aW5kb3cuY2xvc2UoKTsKICAgIH0pOwoKICAgICQoJ2EuSGlzdG9yeUJhY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIGhpc3RvcnkuYmFjaygpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwogICAgJCgnYnV0dG9uLkhpc3RvcnlCYWNrJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBoaXN0b3J5LmJhY2soKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKCi8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgoKPCEtLSBkdGw6YmxvY2s6U3RhdHMgLS0+Cgo8IS0tIGR0bDpibG9jazpTdGF0c0RldGFpbCAtLT4KPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgPGgxPiRUZXh0eyJTdXJ2ZXkgU3RhdCBEZXRhaWxzIn0gOiAkVGV4dHsiVGlja2V0In0jJERhdGF7IlRpY2tldE51bWJlciJ9IDogJENvbmZpZ3siU3VydmV5OjpIb29rIn0kRGF0YXsiU3VydmV5TnVtYmVyIn0gLSAkRGF0YXsiVGl0bGUifSA6ICA8L2gxPgogICAgICAgIDxwPgogICAgICAgICAgICA8YSBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCIgaHJlZj0iIyI+JFRleHR7IkNhbmNlbCAmIGNsb3NlIHdpbmRvdyJ9PC9hPgogICAgICAgICAgICAkVGV4dHsib3IifQogICAgICAgICAgICA8YSBjbGFzcz0iSGlzdG9yeUJhY2siIGhyZWY9IiMiPiRUZXh0eyJnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3In08L2E+CiAgICAgICAgPC9wPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgPGgyPjwvaDI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AgU3BhY2luZ0JvdHRvbU1lZGl1bSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkRldGFpbHMifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KPCEtLSBkdGw6YmxvY2s6U3RhdHNEZXRhaWxRdWVzdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9IiREYXRheyJDbGFzcyJ9Ij4kUURhdGF7IlF1ZXN0aW9uIn06PC9sYWJlbD4KPCEtLSBkdGw6YmxvY2s6U3RhdHNEZXRhaWxBbnN3ZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgJERhdGF7IkNsYXNzIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiQW5zd2VyIn0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlN0YXRzRGV0YWlsQW5zd2VyIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3RhdHNEZXRhaWxRdWVzdGlvbiAtLT4KICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJGb290ZXIiPgogICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTdGF0cyIgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VydmV5SUQiIHZhbHVlPSIkUURhdGF7IlN1cnZleUlEIn0iIC8+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iUHJpbWFyeSIgdmFsdWU9IiRUZXh0eyJHbyBCYWNrIn0iPiRUZXh0eyJHbyBCYWNrIn08L2J1dHRvbj4KICAgICAgICA8L2Zvcm0+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJ2EuSGlzdG9yeUJhY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIGhpc3RvcnkuYmFjaygpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwovL11dPjwvc2NyaXB0Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPCEtLSBkdGw6YmxvY2s6U3RhdHNEZXRhaWwgLS0+Cg==
IyAtLQojIEFnZW50U3VydmV5Wm9vbS5kdGwgLSBwcm92aWRlcyBIVE1MIGZvcm0gZm9yIEFnZW50U3VydmV5CiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBBZ2VudFN1cnZleVpvb20uZHRsLHYgMS4xOSAyMDEyLzAxLzE5IDE2OjEyOjQ2IG1iIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlab29tIC0tPgo8ZGl2IGNsYXNzPSJNYWluQm94IEFyaWFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSI+CiAgICAgICAgPGgxPiRUZXh0eyIkQ29uZmlneyJTdXJ2ZXk6Okhvb2sifSJ9JFFEYXRheyJTdXJ2ZXlOdW1iZXIifSAtICRRRGF0YXsiVGl0bGUifTwvaDE+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckxhc3QiPgogICAgICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+JFRleHR7IlN1cnZleSBJbmZvcm1hdGlvbiJ9PC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiQ3JlYXRlZCJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+JFRpbWVTaG9ydHsiJFFEYXRheyJDcmVhdGVUaW1lIn0ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJDcmVhdGVkIGJ5In06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4kUURhdGF7IkNyZWF0ZVVzZXJGaXJzdG5hbWUifSAkUURhdGF7IkNyZWF0ZVVzZXJMYXN0bmFtZSJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IkNoYW5nZWQifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiID4kVGltZVNob3J0eyIkUURhdGF7IkNoYW5nZVRpbWUifSJ9PC9wPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJDaGFuZ2VkIGJ5In06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4kUURhdGF7IkNoYW5nZVVzZXJGaXJzdG5hbWUifSAkUURhdGF7IkNoYW5nZVVzZXJMYXN0bmFtZSJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IlN0YXR1cyJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+JFRleHR7IiREYXRheyJTdGF0dXMifSJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJTZW50IHJlcXVlc3RzIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4kUURhdGF7IlNlbmRSZXF1ZXN0In08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiUmVjZWl2ZWQgc3VydmV5cyJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+JFFEYXRheyJSZXF1ZXN0Q29tcGxldGUifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250cm9sUm93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFkZGl0aW9uYWxJbmZvcm1hdGlvbiI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbnMiPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIiBjbGFzcz0iSGlzdG9yeUJhY2siPiRUZXh0eyJCYWNrIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRTdXJ2ZXk7U3ViYWN0aW9uPVN1cnZleUVkaXQ7U3VydmV5SUQ9JExRRGF0YXsiU3VydmV5SUQifSIgY2xhc3M9IkFzUG9wdXAiPiRUZXh0eyJFZGl0IEdlbmVyYWwgSW5mbyJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPUFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucztTdXJ2ZXlJRD0kTFFEYXRheyJTdXJ2ZXlJRCJ9IiBjbGFzcz0iQXNQb3B1cCI+JFRleHR7IkVkaXQgUXVlc3Rpb25zIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFN0YXRzRGV0YWlscyAtLT4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRTdXJ2ZXk7U3ViYWN0aW9uPVN0YXRzO1N1cnZleUlEPSRMUURhdGF7IlN1cnZleUlEIn0iIGNsYXNzPSJBc1BvcHVwIj4kVGV4dHsiU3RhdHMgRGV0YWlscyJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRTdGF0c0RldGFpbHMgLS0+CjwhLS0gZHRsOmJsb2NrOlN1cnZleVN0YXR1cyAtLT4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IkFjdGlvbkZvcm0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWdlbnRTdXJ2ZXkiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTdXJ2ZXlTdGF0dXMiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdXJ2ZXlJRCIgdmFsdWU9IiRRRGF0YXsiU3VydmV5SUQifSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJOZXdTdGF0dXNTdHIifQogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6U3VydmV5U3RhdHVzIC0tPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiU3VydmV5IERldGFpbHMifTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7Ik51bWJlciJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4kUURhdGF7IlN1cnZleU51bWJlciJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiVGl0bGUifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+JFFEYXRheyJUaXRsZSIsIjgwIn08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJRdWV1ZXMifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCIgdGl0bGU9IiRRRGF0YXsiUXVldWVMaXN0U3RyaW5nIn0iPiRRRGF0YXsiUXVldWVMaXN0U3RyaW5nIiwiODAifSAkUURhdGF7Ik5vUXVldWVNZXNzYWdlIn08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5QmxvY2sgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIFRvZ2dsZSIgaWQ9IiREYXRheyJTdXJ2ZXlGaWVsZCJ9QmxvY2siPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj48YSBocmVmPSIjIiB0aXRsZT0iJFRleHR7IlNob3cgb3IgaGlkZSB0aGUgY29udGVudCJ9Ij48c3Bhbj48L3NwYW4+PC9hPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiJERhdGF7IlRpdGxlIn0ifTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgo8IS0tIGR0bDpibG9jazpCb2R5SFRNTCAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aWZyYW1lIHdpZHRoPSIxMDAlIiBmcmFtZWJvcmRlcj0iMCIgaWQ9IklmcmFtZVN1cnZleSRRRGF0YXsiU3VydmV5RmllbGQifSIgb25sb2FkPSJTdXJ2ZXkuQWdlbnQuU3VydmV5Wm9vbS5JZnJhbWVBdXRvSGVpZ2h0KCQoJyNJZnJhbWVTdXJ2ZXkkUURhdGF7IlN1cnZleUZpZWxkIn0nKSk7IiBzcmM9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRTdXJ2ZXlab29tO1N1YmFjdGlvbj1IVE1MVmlldztTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn07U3VydmV5RmllbGQ9JFFEYXRheyJTdXJ2ZXlGaWVsZCJ9OyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvaWZyYW1lPgogICAgICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpCb2R5SFRNTCAtLT4KPCEtLSBkdGw6YmxvY2s6Qm9keVBsYWluIC0tPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJUZXh0YXJlYSI+JFRleHR7IiREYXRheyJMYWJlbCJ9In06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgVGV4dGFyZWEiPiRRRGF0YXsiQ29udGVudCJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0Pgo8IS0tIGR0bDpibG9jazpCb2R5UGxhaW4gLS0+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlN1cnZleUJsb2NrIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tTWVkaXVtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IiRUZXh0eyJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQifSI+PHNwYW4+PC9zcGFuPjwvYT48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDI+JFRleHR7IlN1cnZleSBSZXN1bHRzIEdyYXBoIn08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCjwhLS0gZHRsOmJsb2NrOk5vU3RhdFJlc3VsdHMgLS0+CiAgICAgICAgICAgICAgICAgICAgJFRleHR7Ik5vIHN0YXQgcmVzdWx0cy4ifQo8IS0tIGR0bDpibG9jazpOb1N0YXRSZXN1bHRzIC0tPgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFN0YXRzIC0tPgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFN0YXRzUXVlc3Rpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJTcGFjaW5nVG9wIFN1cnZleUdyYXBocyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlF1ZXN0aW9uIiB0aXRsZT0iJERhdGF7IlF1ZXN0aW9uIn0iID4kUURhdGF7IlF1ZXN0aW9uIiwiMTAwIn06IDwvZGl2Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0U3RhdHNBbnN3ZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFuc3dlciI+JFRleHR7IiREYXRheyJBbnN3ZXIifSJ9PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTdXJ2ZXlHcmFwaCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTdXJ2ZXlHcmFwaENvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3VydmV5R3JhcGhCYXIiIHN0eWxlPSJ3aWR0aDokUURhdGF7IkFuc3dlclBlcmNlbnRUYWJsZSJ9JTsiPjwvZGl2ID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlN1cnZleUdyYXBoTGV5ZW5kIj4kUURhdGF7IkFuc3dlclBlcmNlbnQifSU8L3A+CjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRTdGF0c0Fuc3dlciAtLT4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0U3RhdHNRdWVzdGlvbiAtLT4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRTdGF0cyAtLT4KCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJ3VsLkFjdGlvbnMgYS5Bc1BvcHVwJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBDb3JlLlVJLlBvcHVwLk9wZW5Qb3B1cCAoJCh0aGlzKS5hdHRyKCdocmVmJyksICdBY3Rpb24nKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKCiAgICAkKCd1bC5BY3Rpb25zIGEuSGlzdG9yeUJhY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIGhpc3RvcnkuYmFjaygpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKICAgICQoJyNOZXdTdGF0dXMnKS5iaW5kKCdjaGFuZ2UnLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2Zvcm0nKS5zdWJtaXQoKTsKICAgIH0pOwoKICAgIENvcmUuQ29uZmlnLlNldCgnU3VydmV5LkhUTUxSaWNoVGV4dEhlaWdodERlZmF1bHQnLCAiJFFEYXRheyJIVE1MUmljaFRleHRIZWlnaHREZWZhdWx0In0iKTsKICAgIENvcmUuQ29uZmlnLlNldCgnU3VydmV5LkhUTUxSaWNoVGV4dEhlaWdodE1heCcsICIkUURhdGF7IkhUTUxSaWNoVGV4dEhlaWdodE1heCJ9Iik7CgovL11dPjwvc2NyaXB0Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPCEtLSBkdGw6YmxvY2s6U3VydmV5Wm9vbSAtLT4K
IyAtLQojIEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucy5kdGwgLSBwcm92aWRlcyBIVE1MIGZvcm0gZm9yIEFnZW50U3VydmV5CiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnMuZHRsLHYgMS4xNCAyMDEyLzAxLzIwIDEyOjA0OjU1IG1iIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRRdWVzdGlvbnMgLS0+CjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CiAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgIDxoMT4kVGV4dHsiRWRpdCBRdWVzdGlvbnMifTogJFRleHR7IiRDb25maWd7IlN1cnZleTo6SG9vayJ9In0kUURhdGF7IlN1cnZleU51bWJlciJ9IC0gJFFEYXRheyJUaXRsZSJ9PC9oMT4KICAgICAgICA8cD4KICAgICAgICAgICAgPGEgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiIGhyZWY9IiMiPiRUZXh0eyJDYW5jZWwgJiBjbG9zZSB3aW5kb3cifTwvYT4KICAgICAgICA8L3A+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgIDwvZGl2PgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkUXVlc3Rpb24gLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AgU3BhY2luZ0JvdHRvbU1lZGl1bSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkFkZCBRdWVzdGlvbiJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0iU3VydmV5UXVlc3Rpb25zIiBpZD0iU3VydmV5UXVlc3Rpb25zIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iUXVlc3Rpb25BZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VydmV5SUQiIHZhbHVlPSIkUURhdGF7IlN1cnZleUlEIn0iIC8+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJRdWVzdGlvbiI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IlR5cGUgdGhlIHF1ZXN0aW9uIn06Jm5ic3A7PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJRdWVzdGlvbiIgbmFtZT0iUXVlc3Rpb24iIGNsYXNzPSJWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7IlF1ZXN0aW9uRXJyb3JDbGFzcyJ9ICIgc2l6ZT0iNjAiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7IlNlbGVjdGlvblR5cGUifQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlF1ZXN0aW9uRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlF1ZXN0aW9uU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJBZGQifSI+JFRleHR7IkFkZCJ9PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlBZGRRdWVzdGlvbiAtLT4KCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AgU3BhY2luZ0JvdHRvbU1lZGl1bSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IlN1cnZleSBRdWVzdGlvbnMifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiUXVlc3Rpb24ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiVHlwZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlTdGF0dXNDb2x1bW4gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IlN0YXR1cyJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlTdGF0dXNDb2x1bW4gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IlVwIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IkRvd24ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6U3VydmV5RGVsZXRlQ29sdW1uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJEZWxldGUifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6U3VydmV5RGVsZXRlQ29sdW1uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlOb1F1ZXN0aW9uc1NhdmVkIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iJFFEYXRheyJDb2x1bW5zIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJObyBxdWVzdGlvbnMgc2F2ZWQgZm9yIHRoaXMgc3VydmV5LiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlOb1F1ZXN0aW9uc1NhdmVkIC0tPgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5UXVlc3Rpb25zU2F2ZWQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1RdWVzdGlvbkVkaXQ7U3VydmV5SUQ9JFFEYXRheyJTdXJ2ZXlJRCJ9O1F1ZXN0aW9uSUQ9JFFEYXRheyJRdWVzdGlvbklEIn0iID4kUURhdGF7IlF1ZXN0aW9uIiwiOTAifTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IiREYXRheyJUeXBlIn0ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1RdWVzdGlvblVwO1N1cnZleUlEPSRRRGF0YXsiU3VydmV5SUQifTtRdWVzdGlvbklEPSRRRGF0YXsiUXVlc3Rpb25JRCJ9IiBjbGFzcz0iQXJyb3dVcCRRRGF0YXsiQ2xhc3NVcCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IlVwIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1RdWVzdGlvbkRvd247U3VydmV5SUQ9JFFEYXRheyJTdXJ2ZXlJRCJ9O1F1ZXN0aW9uSUQ9JFFEYXRheyJRdWVzdGlvbklEIn0iIGNsYXNzPSJBcnJvd0Rvd24kUURhdGF7IkNsYXNzRG93biJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IkRvd24ifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlRdWVzdGlvbnNTYXZlZCAtLT4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleVF1ZXN0aW9uc1JvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVF1ZXN0aW9uRWRpdDtTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn07UXVlc3Rpb25JRD0kUURhdGF7IlF1ZXN0aW9uSUQifSIgY2xhc3M9IiRRRGF0YXsiQ2xhc3MifSI+JFFEYXRheyJRdWVzdGlvbiIsIjcwIn08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyIkRGF0YXsiVHlwZSJ9In0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IiREYXRheyJTdGF0dXMifSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVF1ZXN0aW9uVXA7U3VydmV5SUQ9JFFEYXRheyJTdXJ2ZXlJRCJ9O1F1ZXN0aW9uSUQ9JFFEYXRheyJRdWVzdGlvbklEIn0iIGNsYXNzPSJBcnJvd1VwJFFEYXRheyJDbGFzc1VwIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiVXAifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVF1ZXN0aW9uRG93bjtTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn07UXVlc3Rpb25JRD0kUURhdGF7IlF1ZXN0aW9uSUQifSIgY2xhc3M9IkFycm93RG93biRRRGF0YXsiQ2xhc3NEb3duIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiRG93biJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlN1cnZleVF1ZXN0aW9uc0RlbGV0ZUJ1dHRvbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iUXVlc3Rpb25EZWxldGUiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1cnZleUlEIiB2YWx1ZT0iJFFEYXRheyJTdXJ2ZXlJRCJ9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJRdWVzdGlvbklEIiB2YWx1ZT0iJFFEYXRheyJRdWVzdGlvbklEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iVHJhc2hDYW4iIHZhbHVlPSIkVGV4dHsiRGVsZXRlIn0iID4kVGV4dHsiRGVsZXRlIn08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlRdWVzdGlvbnNEZWxldGVCdXR0b24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlN1cnZleVF1ZXN0aW9uc1JvdyAtLT4KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJGb290ZXIiPgogICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCBQcmltYXJ5IiB2YWx1ZT0iJFRleHR7IkNsb3NlIHdpbmRvdyJ9Ij4kVGV4dHsiQ2xvc2Ugd2luZG93In08L2J1dHRvbj4KICAgIDwvZGl2Pgo8L2Rpdj4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgJCgnYS5IaXN0b3J5QmFjaycpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgaGlzdG9yeS5iYWNrKCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7CgogICAgJCgnYnV0dG9uLkNhbmNlbENsb3NlUG9wdXAnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIGhpc3RvcnkuYmFjaygpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRRdWVzdGlvbnMgLS0+CgoKPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0IC0tPgo8ZGl2IGNsYXNzPSJMYXlvdXRQb3B1cCBBUklBUm9sZU1haW4iPgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDE+JFRleHR7IkVkaXQgUXVlc3Rpb24ifTogJFRleHR7IiREYXRheyJRdWVzdGlvbiJ9In08L2gxPgogICAgICAgIDxwPgogICAgICAgICAgICA8YSBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCIgaHJlZj0iIyI+JFRleHR7IkNhbmNlbCAmIGNsb3NlIHdpbmRvdyJ9PC9hPgogICAgICAgICAgICAkVGV4dHsib3IifQogICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1cnZleUlEPSRMUURhdGF7IlN1cnZleUlEIn0iID4kVGV4dHsiZ28gYmFjayB0byBxdWVzdGlvbnMifTwvYT4KICAgICAgICA8L3A+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tTWVkaXVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiRWRpdCBRdWVzdGlvbiJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0iU3VydmV5UXVlc3Rpb24iIGlkPSJTdXJ2ZXlRdWVzdGlvbiIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlF1ZXN0aW9uU2F2ZSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJRdWVzdGlvbklEIiB2YWx1ZT0iJFFEYXRheyJRdWVzdGlvbklEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VydmV5SUQiIHZhbHVlPSIkUURhdGF7IlN1cnZleUlEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJRdWVzdGlvbiIgY2xhc3M9Ik1hbmRhdG9yeSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IlF1ZXN0aW9uIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjYwIiBuYW1lPSJRdWVzdGlvbiIgaWQ9IlF1ZXN0aW9uIiB2YWx1ZT0iJFFEYXRheyJRdWVzdGlvbiJ9IiBjbGFzcz0iVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJRdWVzdGlvblNlcnZlckVycm9yIn0iIC8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUXVlc3Rpb25FcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUXVlc3Rpb25TZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiU2F2ZSJ9Ij4kVGV4dHsiU2F2ZSJ9PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tTWVkaXVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiUG9zc2libGUgQW5zd2VycyBGb3IifTogJFRleHR7IiREYXRheyJUeXBlIn0ifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0QWRkQW5zd2VyIC0tPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJBbnN3ZXJBZGQiIGlkPSJBbnN3ZXJBZGQiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJBbnN3ZXJBZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUXVlc3Rpb25JRCIgdmFsdWU9IiRRRGF0YXsiUXVlc3Rpb25JRCJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1cnZleUlEIiB2YWx1ZT0iJFFEYXRheyJTdXJ2ZXlJRCJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQW5zd2VyIiBjbGFzcz0iTWFuZGF0b3J5Ij48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiQWRkIEFuc3dlciJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iQW5zd2VyIiBuYW1lPSJBbnN3ZXIiIHNpemU9IjYwIiBjbGFzcz0iVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJBbnN3ZXJTZXJ2ZXJFcnJvciJ9ICIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiQWRkIn0iPiRUZXh0eyJBZGQifTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkFuc3dlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBbnN3ZXJTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRBZGRBbnN3ZXIgLS0+Cgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRUYWJsZSAtLT4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4gJFRleHR7IkRlc2NyaXB0aW9uIn0gPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4gJFRleHR7IlVwIn0gPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4gJFRleHR7IkRvd24ifSA8L3RoPgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRUYWJsZURlbGV0ZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4gJFRleHR7IkRlbGV0ZSJ9IDwvdGg+CjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdFRhYmxlRGVsZXRlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpOb0Fuc3dlcnNTYXZlZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IiRRRGF0YXsiQ29sdW1ucyJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiTm8gcXVlc3Rpb25zIHNhdmVkIGZvciB0aGlzIHN1cnZleS4ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6Tm9BbnN3ZXJzU2F2ZWQgLS0+Cgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRSYWRpbyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPUFuc3dlckVkaXQ7U3VydmV5SUQ9JFFEYXRheyJTdXJ2ZXlJRCJ9O1F1ZXN0aW9uSUQ9JFFEYXRheyJRdWVzdGlvbklEIn07QW5zd2VySUQ9JFFEYXRheyJBbnN3ZXJJRCJ9Ij4gJFFEYXRheyJBbnN3ZXIiLCI5MCJ9IDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249QW5zd2VyVXA7U3VydmV5SUQ9JFFEYXRheyJTdXJ2ZXlJRCJ9O1F1ZXN0aW9uSUQ9JFFEYXRheyJRdWVzdGlvbklEIn07QW5zd2VySUQ9JFFEYXRheyJBbnN3ZXJJRCJ9IiBjbGFzcz0iQXJyb3dVcCRRRGF0YXsiQ2xhc3NVcCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IlVwIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1BbnN3ZXJEb3duO1N1cnZleUlEPSRRRGF0YXsiU3VydmV5SUQifTtRdWVzdGlvbklEPSRRRGF0YXsiUXVlc3Rpb25JRCJ9O0Fuc3dlcklEPSRRRGF0YXsiQW5zd2VySUQifSIgY2xhc3M9IkFycm93RG93biRRRGF0YXsiQ2xhc3NEb3duIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiRG93biJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdFJhZGlvRGVsZXRlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJBbnN3ZXJEZWxldGUiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1cnZleUlEIiB2YWx1ZT0iJFFEYXRheyJTdXJ2ZXlJRCJ9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJRdWVzdGlvbklEIiB2YWx1ZT0iJFFEYXRheyJRdWVzdGlvbklEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFuc3dlcklEIiB2YWx1ZT0iJFFEYXRheyJBbnN3ZXJJRCJ9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9IlRyYXNoQ2FuIiB2YWx1ZT0iJFRleHR7IkRlbGV0ZSJ9Ij4kVGV4dHsiRGVsZXRlIn08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRSYWRpb0RlbGV0ZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0UmFkaW8gLS0+Cgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRDaGVja2JveCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPUFuc3dlckVkaXQ7U3VydmV5SUQ9JFFEYXRheyJTdXJ2ZXlJRCJ9O1F1ZXN0aW9uSUQ9JFFEYXRheyJRdWVzdGlvbklEIn07QW5zd2VySUQ9JFFEYXRheyJBbnN3ZXJJRCJ9Ij4kUURhdGF7IkFuc3dlciJ9PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1BbnN3ZXJVcDtTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn07UXVlc3Rpb25JRD0kUURhdGF7IlF1ZXN0aW9uSUQifTtBbnN3ZXJJRD0kUURhdGF7IkFuc3dlcklEIn0iIGNsYXNzPSJBcnJvd1VwJFFEYXRheyJDbGFzc1VwIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiVXAifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPUFuc3dlckRvd247U3VydmV5SUQ9JFFEYXRheyJTdXJ2ZXlJRCJ9O1F1ZXN0aW9uSUQ9JFFEYXRheyJRdWVzdGlvbklEIn07QW5zd2VySUQ9JFFEYXRheyJBbnN3ZXJJRCJ9IiBjbGFzcz0iQXJyb3dEb3duJFFEYXRheyJDbGFzc0Rvd24ifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiRUZXh0eyJEb3duIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0Q2hlY2tib3hEZWxldGUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkFuc3dlckRlbGV0ZSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VydmV5SUQiIHZhbHVlPSIkUURhdGF7IlN1cnZleUlEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlF1ZXN0aW9uSUQiIHZhbHVlPSIkUURhdGF7IlF1ZXN0aW9uSUQifSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQW5zd2VySUQiIHZhbHVlPSIkUURhdGF7IkFuc3dlcklEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IkRlbGV0ZSJ9IiBjbGFzcz0iVHJhc2hDYW4iID4gJFRleHR7IkRlbGV0ZSJ9IDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdENoZWNrYm94RGVsZXRlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRDaGVja2JveCAtLT4KCjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdFllc25vIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+ICRUZXh0eyJZZXMifSA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9IiIgY2xhc3M9IkFycm93VXBEaXNhYmxlZCI+PHNwYW4+JFRleHR7IlVwIn08L3NwYW4+PC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0iIiBjbGFzcz0iQXJyb3dEb3duRGlzYWJsZWQiPjxzcGFuPiRUZXh0eyJEb3duIn08L3NwYW4+PC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gJFRleHR7Ik5vIn0gPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSIiIGNsYXNzPSJBcnJvd1VwRGlzYWJsZWQiID48c3Bhbj4kVGV4dHsiVXAifTwvc3Bhbj48L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSIiIGNsYXNzPSJBcnJvd0Rvd25EaXNhYmxlZCIgPjxzcGFuPiRUZXh0eyJEb3duIn08L3NwYW4+PC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdFllc25vIC0tPgoKICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0VGFibGUgLS0+CgoKPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0VGV4dEFyZWEgLS0+CiAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiVGhpcyBkb2Vzbid0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLiJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0Pgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRUZXh0QXJlYSAtLT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkZvb3RlciI+CiAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1cnZleUlEIiB2YWx1ZT0iJFFEYXRheyJTdXJ2ZXlJRCJ9IiAvPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9IlByaW1hcnkiIHZhbHVlPSIkVGV4dHsiR28gQmFjayJ9Ij4kVGV4dHsiR28gQmFjayJ9PC9idXR0b24+CiAgICAgICAgPC9mb3JtPgogICAgPC9kaXY+CjwvZGl2Pgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXQgLS0+Cgo8IS0tIGR0bDpibG9jazpBbnN3ZXJFZGl0IC0tPgo8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9IkFuc3dlckVkaXQiIGlkPSJBbnN3ZXJFZGl0IiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIgLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkFuc3dlclNhdmUiIC8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBbnN3ZXJJRCIgdmFsdWU9IiRRRGF0YXsiQW5zd2VySUQifSIgLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlF1ZXN0aW9uSUQiIHZhbHVlPSIkUURhdGF7IlF1ZXN0aW9uSUQifSIgLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1cnZleUlEIiB2YWx1ZT0iJFFEYXRheyJTdXJ2ZXlJRCJ9IiAvPgogICAgPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KCiAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgPGgxPiRUZXh0eyJFZGl0IEFuc3dlciJ9OiAkUURhdGF7IkFuc3dlciJ9IDwvaDE+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgPGEgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiIGhyZWY9IiMiPiRUZXh0eyJDYW5jZWwgJiBjbG9zZSB3aW5kb3cifTwvYT4KICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1RdWVzdGlvbkVkaXQ7UXVlc3Rpb25JRD0kTFFEYXRheyJRdWVzdGlvbklEIn07U3VydmV5SUQ9JExRRGF0YXsiU3VydmV5SUQifSI+JFRleHR7ImdvIGJhY2sgdG8gZWRpdCBxdWVzdGlvbiJ9PC9hPgogICAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AgU3BhY2luZ0JvdHRvbU1lZGl1bSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiRWRpdCBBbnN3ZXIifTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkFuc3dlciIgY2xhc3M9Ik1hbmRhdG9yeSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IkFuc3dlciJ9OjwvbGFiZWw+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNjAiIGlkPSJBbnN3ZXIiIG5hbWU9IkFuc3dlciIgdmFsdWU9IiRRRGF0YXsiQW5zd2VyIn0iIGNsYXNzPSJWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7IkFuc3dlclNlcnZlckVycm9yIn0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBbnN3ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQW5zd2VyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkZvb3RlciI+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iUHJpbWFyeSIgdmFsdWU9IiRUZXh0eyJTYXZlIn0iPiRUZXh0eyJTYXZlIn08L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Zvcm0+CjwhLS0gZHRsOmJsb2NrOkFuc3dlckVkaXQgLS0+Cg==
IyAtLQojIFB1YmxpY1N1cnZleS5kdGwgLSBwcm92aWRlcyBIVE1MIGZvcm0gZm9yIFB1YmxpY1N1cnZleQojIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogUHVibGljU3VydmV5LmR0bCx2IDEuMjQgMjAxMi8wMS8xOSAxNjoxNDo1MiBtYiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6UHVibGljU3VydmV5IC0tPgo8ZGl2IGNsYXNzPSJDb250ZW50IEFSSUFSb2xlTWFpbiIgaWQ9Ik1haW5Cb3giPgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDI+JFRleHR7IlN1cnZleSJ9OiAkUURhdGF7IlRpdGxlIn08L2gyPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iU3VydmV5QmxvY2siPgogICAgICAgIDxkaXYgY2xhc3M9IlN1cnZleUJsb2NrSGVhZGVyIj4KICAgICAgICAgICAgJFRleHR7IkludHJvZHVjdGlvbiJ9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICRRRGF0YXsiSW50cm9kdWN0aW9uIn0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlB1YmxpY1N1cnZleVZvdGUiIC8+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUHVibGljU3VydmV5S2V5IiB2YWx1ZT0iJFFEYXRheyJQdWJsaWNTdXJ2ZXlLZXkifSIgLz4KICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlN1cnZleSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IlN1cnZleUJsb2NrSGVhZGVyIj4KICAgICAgICAgICAgICAgICRUZXh0eyJQbGVhc2UgYW5zd2VyIHRoZXNlIHF1ZXN0aW9ucyJ9OgogICAgICAgICAgICA8L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOlB1YmxpY1F1ZXN0aW9ucyAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iUXVlc3Rpb25Db250YWluZXIiPgo8IS0tIGR0bDpibG9jazpQdWJsaWNBbnN3ZXJZZXNObyAtLT4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJRdWVzdGlvbiI+ICRRRGF0YXsiUXVlc3Rpb24ifSA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9IlB1YmxpY1N1cnZleVZvdGUxJFFEYXRheyJRdWVzdGlvbklEIn1ZZXMiIG5hbWU9IlB1YmxpY1N1cnZleVZvdGUxWyRRRGF0YXsiUXVlc3Rpb25JRCJ9XSIgdmFsdWU9IlllcyIgLz4KICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iQW5zd2VyIiBmb3I9IlB1YmxpY1N1cnZleVZvdGUxJFFEYXRheyJRdWVzdGlvbklEIn1ZZXMiPiRUZXh0eyJZZXMifTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0iUHVibGljU3VydmV5Vm90ZTEkUURhdGF7IlF1ZXN0aW9uSUQifU5vIiBuYW1lPSJQdWJsaWNTdXJ2ZXlWb3RlMVskUURhdGF7IlF1ZXN0aW9uSUQifV0iIHZhbHVlPSJObyIgLz4KICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iQW5zd2VyIiBmb3I9IlB1YmxpY1N1cnZleVZvdGUxJFFEYXRheyJRdWVzdGlvbklEIn1ObyI+JFRleHR7Ik5vIn08L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpQdWJsaWNBbnN3ZXJZZXNObyAtLT4KCjwhLS0gZHRsOmJsb2NrOlB1YmxpY0Fuc3dlclJhZGlvIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUXVlc3Rpb24iPiAkUURhdGF7IlF1ZXN0aW9uIn0gPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlB1YmxpY0Fuc3dlclJhZGlvYiAtLT4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9IlB1YmxpY1N1cnZleVZvdGUyJFFEYXRheyJRdWVzdGlvbklEIn0kUURhdGF7IkFuc3dlcklEIn0iIG5hbWU9IlB1YmxpY1N1cnZleVZvdGUyWyRRRGF0YXsiUXVlc3Rpb25JRCJ9XSIgdmFsdWU9IiRRRGF0YXsiQW5zd2VySUQifSIgLz4KICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iQW5zd2VyIiBmb3I9IlB1YmxpY1N1cnZleVZvdGUyJFFEYXRheyJRdWVzdGlvbklEIn0kUURhdGF7IkFuc3dlcklEIn0iPiRRRGF0YXsiQW5zd2VyIn08L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpQdWJsaWNBbnN3ZXJSYWRpb2IgLS0+CjwhLS0gZHRsOmJsb2NrOlB1YmxpY0Fuc3dlclJhZGlvIC0tPgoKPCEtLSBkdGw6YmxvY2s6UHVibGljQW5zd2VyQ2hlY2tib3ggLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJRdWVzdGlvbiI+ICRRRGF0YXsiUXVlc3Rpb24ifSA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UHVibGljQW5zd2VyQ2hlY2tib3hiIC0tPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iUHVibGljU3VydmV5Vm90ZTMkUURhdGF7IkFuc3dlcklEIn0iIG5hbWU9IlB1YmxpY1N1cnZleVZvdGUzWyRRRGF0YXsiQW5zd2VySUQifV0iIHZhbHVlPSJZZXMiLz4KICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iQW5zd2VyIiBmb3I9IlB1YmxpY1N1cnZleVZvdGUzJFFEYXRheyJBbnN3ZXJJRCJ9Ij4kUURhdGF7IkFuc3dlciJ9PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UHVibGljQW5zd2VyQ2hlY2tib3hiIC0tPgo8IS0tIGR0bDpibG9jazpQdWJsaWNBbnN3ZXJDaGVja2JveCAtLT4KCjwhLS0gZHRsOmJsb2NrOlB1YmxpY0Fuc3dlclRleHRhcmVhIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUXVlc3Rpb24iPiAkUURhdGF7IlF1ZXN0aW9uIn0gPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlJpY2hUZXh0LS0+CiAgICAgICAgICAgICAgICAkSW5jbHVkZXsiQ3VzdG9tZXJSaWNoVGV4dEVkaXRvciJ9CjwhLS0gZHRsOmJsb2NrOlJpY2hUZXh0LS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSaWNoVGV4dEFuc3dlciRRRGF0YXsiQW5zd2VySUQifSI+CiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHRpdGxlPSIkUURhdGF7IlF1ZXN0aW9uIn0iIGlkPSJSaWNoVGV4dCRRRGF0YXsiUXVlc3Rpb25JRCJ9IiBuYW1lPSJQdWJsaWNTdXJ2ZXlWb3RlNFskUURhdGF7IlF1ZXN0aW9uSUQifV0iIGNsYXNzPSJSaWNoVGV4dCBEb250UHJpbnQiIHJvd3M9IjE1IiBjb2xzPSIkQ29uZmlneyJUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUifSI+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpQdWJsaWNBbnN3ZXJUZXh0YXJlYSAtLT4KICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlB1YmxpY1F1ZXN0aW9ucyAtLT4KICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyIgaWQ9IkJvdHRvbUFjdGlvblJvdyI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJGaW5pc2gifSI+ICRUZXh0eyJGaW5pc2gifSA8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZm9ybT4KPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlB1YmxpY1N1cnZleSAtLT4KCjwhLS0gZHRsOmJsb2NrOlB1YmxpY1N1cnZleU1lc3NhZ2UgLS0+CjxkaXYgaWQ9Ik1haW5Cb3giIGNsYXNzPSJUaWNrZXRDb21wb3NlIEFSSUFSb2xlTWFpbiI+CiAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgIDxoMj4gJFRleHR7IiREYXRheyJNZXNzYWdlVHlwZSJ9In0gPC9oMj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgPGg0PiAkVGV4dHsiJERhdGF7Ik1lc3NhZ2VIZWFkZXIifSJ9IDwvaDQ+CiAgICAgICAgICAgIDxwIGNsYXNzPSJTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICRUZXh0eyIkRGF0YXsiTWVzc2FnZSJ9In0KICAgICAgICAgICAgPC9wPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlNob3dBbnN3ZXJzQnV0dG9uIC0tPgogICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTaG93Vm90ZURhdGEiIC8+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJQdWJsaWNTdXJ2ZXlLZXkiIHZhbHVlPSIkUURhdGF7IlB1YmxpY1N1cnZleUtleSJ9IiAvPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiID4kVGV4dHsiU2hvdyBteSBhbnN3ZXJzIn08L2J1dHRvbj4KICAgICAgICAgICAgPC9mb3JtPgo8IS0tIGR0bDpibG9jazpTaG93QW5zd2Vyc0J1dHRvbiAtLT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UHVibGljU3VydmV5TWVzc2FnZSAtLT4KCjwhLS0gZHRsOmJsb2NrOlB1YmxpY1N1cnZleVZvdGVEYXRhIC0tPgo8ZGl2IGNsYXNzPSJDb250ZW50IEFSSUFSb2xlTWFpbiIgaWQ9Ik1haW5Cb3giPgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDI+JFRleHR7IlRoZXNlIGFyZSB5b3VyIGFuc3dlcnMifTo8L2gyPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJTdXJ2ZXlCbG9jayI+CiAgICAgICAgPGRpdiBjbGFzcz0iU3VydmV5QmxvY2tIZWFkZXIiPgogICAgICAgICAgICAkVGV4dHsiU3VydmV5IFRpdGxlIn0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgPGgyPiRUZXh0eyJTdXJ2ZXkifTogJFFEYXRheyJUaXRsZSJ9PC9oMj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IlN1cnZleUJsb2NrIj4KICAgICAgICA8ZGl2IGNsYXNzPSJTdXJ2ZXlCbG9ja0hlYWRlciI+CiAgICAgICAgICAgICRUZXh0eyJJbnRyb2R1Y3Rpb24ifQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAkUURhdGF7IkludHJvZHVjdGlvbiJ9CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICA8ZmllbGRzZXQgY2xhc3M9IlN1cnZleSI+CiAgICAgICAgPGRpdiBjbGFzcz0iU3VydmV5QmxvY2tIZWFkZXIiPgogICAgICAgICAgICAkVGV4dHsiVGhlc2UgYXJlIHlvdXIgYW5zd2VycyJ9OgogICAgICAgIDwvZGl2PgoKPCEtLSBkdGw6YmxvY2s6UHVibGljU3VydmV5Vm90ZVF1ZXN0aW9uIC0tPgogICAgICAgIDxkaXYgY2xhc3M9IlF1ZXN0aW9uQ29udGFpbmVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iUXVlc3Rpb24iPiRRRGF0YXsiUXVlc3Rpb24ifTo8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UHVibGljU3VydmV5Vm90ZUFuc3dlciAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQW5zd2VyIj4KICAgICAgICAgICAgICAgICRRRGF0YXsiQW5zd2VyIn0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UHVibGljU3VydmV5Vm90ZUFuc3dlciAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpQdWJsaWNTdXJ2ZXlWb3RlUXVlc3Rpb24gLS0+CiAgICA8L2ZpZWxkc2V0Pgo8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UHVibGljU3VydmV5Vm90ZURhdGEgLS0+Cg==
IyAtLQojIEFnZW50U3VydmV5T3ZlcnZpZXdTbWFsbC5kdGwgLSBodG1sIGZvciBjaGFuZ2Ugb3ZlcnZpZXcgdGFibGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMiBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IEFnZW50U3VydmV5T3ZlcnZpZXdTbWFsbC5kdGwsdiAxLjUgMjAxMi8wMS8xOSAxNjoxMjozMiBtYiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICBDb3JlLlVJLkFjdGlvblJvdy5Jbml0KCk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgoKPGRpdiBpZD0iT3ZlcnZpZXdCb2R5IiBjbGFzcz0iT3ZlcnZpZXcgRml4ZWRIZWFkZXIiPgo8IS0tIGR0bDpibG9jazpOb0RhdGFGb3VuZE1zZyAtLT4KICAgIDxkaXYgaWQ9IkVtcHR5TWVzc2FnZVNtYWxsIj4KICAgICAgICAkVGV4dHsiTm8gZGF0YSBmb3VuZC4ifQogICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk5vRGF0YUZvdW5kTXNnIC0tPgoKICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0ibWF0cml4Ij4KICAgICAgICA8dGFibGUgaWQ9IkZpeGVkVGFibGUiIGNsYXNzPSJUYWJsZVNtYWxsIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgPHRyPgo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXJIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJOdW1iZXIgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U29ydEJ5PU51bWJlcjtPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IiRDb25maWd7IlN1cnZleTo6SG9vayJ9In08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTnVtYmVySGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRUaXRsZUhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlRpdGxlICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1NvcnRCeT1UaXRsZTtPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IlRpdGxlIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkVGl0bGVIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZEludHJvZHVjdGlvbkhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkludHJvZHVjdGlvbiAkUURhdGF7IkNTUyJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTb3J0Qnk9SW50cm9kdWN0aW9uO09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kVGV4dHsiSW50cm9kdWN0aW9uIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkSW50cm9kdWN0aW9uSGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmREZXNjcmlwdGlvbkhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkRlc2NyaXB0aW9uICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1NvcnRCeT1EZXNjcmlwdGlvbjtPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IkRlc2NyaXB0aW9uIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkRGVzY3JpcHRpb25IZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvblNlbmRlckhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ik5vdGlmaWNhdGlvblNlbmRlciAkUURhdGF7IkNTUyJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTb3J0Qnk9Tm90aWZpY2F0aW9uU2VuZGVyO09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kVGV4dHsiTm90aWZpY2F0aW9uIFNlbmRlciJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvblNlbmRlckhlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTm90aWZpY2F0aW9uU3ViamVjdEhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ik5vdGlmaWNhdGlvblN1YmplY3QgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U29ydEJ5PU5vdGlmaWNhdGlvblN1YmplY3Q7T3JkZXJCeT0kTFFEYXRheyJPcmRlckJ5In0iPiRUZXh0eyJOb3RpZmljYXRpb24gU3ViamVjdCJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvblN1YmplY3RIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvbkJvZHlIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJOb3RpZmljYXRpb25Cb2R5ICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1NvcnRCeT1Ob3RpZmljYXRpb25Cb2R5O09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kVGV4dHsiTm90aWZpY2F0aW9uIEJvZHkifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpSZWNvcmROb3RpZmljYXRpb25Cb2R5SGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRTdGF0dXNIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJTdGF0dXMgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U29ydEJ5PVN0YXR1cztPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IlN0YXR1cyJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZFN0YXR1c0hlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3JlYXRlVGltZUhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNyZWF0ZVRpbWUgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U29ydEJ5PUNyZWF0ZVRpbWU7T3JkZXJCeT0kTFFEYXRheyJPcmRlckJ5In0iPiRUZXh0eyJDcmVhdGVkIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3JlYXRlVGltZUhlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3JlYXRlQnlIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDcmVhdGVCeSAkUURhdGF7IkNTUyJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTb3J0Qnk9Q3JlYXRlQnk7T3JkZXJCeT0kTFFEYXRheyJPcmRlckJ5In0iPiRUZXh0eyJDcmVhdGVkIGJ5In08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3JlYXRlQnlIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENoYW5nZVRpbWVIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDaGFuZ2VUaW1lICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1NvcnRCeT1DaGFuZ2VUaW1lO09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kVGV4dHsiQ2hhbmdlZCJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENoYW5nZVRpbWVIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENoYW5nZUJ5SGVhZGVyIC0tPgogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2hhbmdlQnkgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U29ydEJ5PUNoYW5nZUJ5O09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kVGV4dHsiQ2hhbmdlZCBCeSJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENoYW5nZUJ5SGVhZGVyIC0tPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpSZWNvcmQgLS0+CiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9Ik1hc3RlckFjdGlvbiI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlckxpbmtTdGFydCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1BZ2VudFN1cnZleVpvb207U3VydmV5SUQ9JExRRGF0YXsiU3VydmV5SUQifSIgdGl0bGU9IiRMUURhdGF7IlN1cnZleU51bWJlciJ9IiBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlckxpbmtTdGFydCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiU3VydmV5TnVtYmVyIn0KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTnVtYmVyTGlua0VuZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXJMaW5rRW5kIC0tPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkVGl0bGUgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkUURhdGF7IlRpdGxlIn0iPiRRRGF0YXsiVGl0bGUiLCI0MCJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkVGl0bGUgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZEludHJvZHVjdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IiRRRGF0YXsiSW50cm9kdWN0aW9uIn0iPiRRRGF0YXsiSW50cm9kdWN0aW9uIiwiNDAifTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZEludHJvZHVjdGlvbiAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkRGVzY3JpcHRpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkUURhdGF7IkRlc2NyaXB0aW9uIn0iPiRRRGF0YXsiRGVzY3JpcHRpb24iLCI0MCJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkRGVzY3JpcHRpb24gLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvblNlbmRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+JFFEYXRheyJOb3RpZmljYXRpb25TZW5kZXIifTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvblNlbmRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTm90aWZpY2F0aW9uU3ViamVjdCAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IiRRRGF0YXsiTm90aWZpY2F0aW9uU3ViamVjdCJ9Ij4kUURhdGF7Ik5vdGlmaWNhdGlvblN1YmplY3QiLCI0MCJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTm90aWZpY2F0aW9uU3ViamVjdCAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTm90aWZpY2F0aW9uQm9keSAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IiRRRGF0YXsiTm90aWZpY2F0aW9uQm9keSJ9Ij4kUURhdGF7Ik5vdGlmaWNhdGlvbkJvZHkiLCI0MCJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTm90aWZpY2F0aW9uQm9keSAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkU3RhdHVzIC0tPgogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4kVGV4dHsiJERhdGF7IlN0YXR1cyJ9In08L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRTdGF0dXMgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENyZWF0ZVRpbWUgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PiRUaW1lTG9uZ3siJFFEYXRheyJDcmVhdGVUaW1lIn0ifTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENyZWF0ZVRpbWUgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENyZWF0ZUJ5IC0tPgogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4kUURhdGF7IkNyZWF0ZVVzZXJGaXJzdG5hbWUifSAkUURhdGF7IkNyZWF0ZVVzZXJMYXN0bmFtZSJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3JlYXRlQnkgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENoYW5nZVRpbWUgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PiRUaW1lTG9uZ3siJFFEYXRheyJDaGFuZ2VUaW1lIn0ifTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENoYW5nZVRpbWUgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENoYW5nZUJ5IC0tPgogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4kUURhdGF7IkNoYW5nZVVzZXJGaXJzdG5hbWUifSAkUURhdGF7IkNoYW5nZVVzZXJMYXN0bmFtZSJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ2hhbmdlQnkgLS0+CiAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpSZWNvcmQgLS0+CiAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgPC90YWJsZT4KICAgIDwvZm9ybT4KPC9kaXY+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIENvcmUuVUkuSW5pdFRhYmxlSGVhZCgkKCcjRml4ZWRUYWJsZSB0aGVhZCcpLCAkKCcjRml4ZWRUYWJsZSB0Ym9keScpKTsKICAgIENvcmUuVUkuU3RhdGljVGFibGVDb250cm9sKCQoJyNPdmVydmlld0NvbnRyb2wnKS5hZGQoJCgnI092ZXJ2aWV3Qm9keScpKSk7CiAgICAkKCcuTWFzdGVyQWN0aW9uJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAkKHRoaXMpLmZpbmQoJy5NYXN0ZXJBY3Rpb25MaW5rJykuYXR0cignaHJlZicpOwogICAgfSk7CiAgICAkKHdpbmRvdykucmVzaXplKGZ1bmN0aW9uKCkgewogICAgICAgIENvcmUuVUkuQWRqdXN0VGFibGVIZWFkKCQoJyNPdmVydmlld0hlYWRlciB0aGVhZCcpLCAkKCcjT3ZlcnZpZXdCb2R5IHRib2R5JykpOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo=
IyAtLQojIEFnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXIuZHRsIC0gaHRtbCBmb3IgY2hhbmdlIG92ZXJ2aWV3IHRhYmxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBBZ2VudFN1cnZleU92ZXJ2aWV3TmF2QmFyLmR0bCx2IDEuMyAyMDExLzA0LzEzIDEwOjQ0OjE1IG1iIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyIC0tPgo8ZGl2IGNsYXNzPSJPdmVydmlld0JveCBBUklBUm9sZU1haW4gJFFEYXRheyJWaWV3In0iPgogICAgPGgxPiRRRGF0YXsiVGl0bGVOYW1lIn06ICRRRGF0YXsiVGl0bGVWYWx1ZSJ9PC9oMT4KCiAgICAkRGF0YXsiRGF0YUluVGhlTWlkZGxlIn0KCiAgICA8ZGl2IGNsYXNzPSJPdmVydmlld0NvbnRyb2wiIGlkPSJPdmVydmlld0NvbnRyb2wiPgogICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhckZpbHRlciAtLT4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iVGFicyI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbSAtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWQgLS0+CiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJBY3RpdmUgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkZpbHRlckxpbmsifUZpbHRlcj0kTFFEYXRheyJGaWx0ZXIifSI+JFRleHR7IiREYXRheyJOYW1lIn0ifTxzcGFuPiRRRGF0YXsiQ291bnQifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWQgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkTm90IC0tPgogICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkZpbHRlckxpbmsifUZpbHRlcj0kTFFEYXRheyJGaWx0ZXIifSI+JFRleHR7IiREYXRheyJOYW1lIn0ifTxzcGFuPiRRRGF0YXsiQ291bnQifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWROb3QgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNwbGl0IC0tPgogICAgICAgICAgICAgICAgICAgIC0KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU3BsaXQgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbSAtLT4KICAgICAgICAgICAgICAgIDwvdWw+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVyIC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclBhZ2VCYWNrIC0tPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJUYWJzIj4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJTdXJ2ZXlTZWFyY2giIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtCYWNrIn0iPiRUZXh0eyJDaGFuZ2Ugc2VhcmNoIG9wdGlvbnMifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNTdXJ2ZXlTZWFyY2gnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuQWdlbnQuU2VhcmNoLk9wZW5TZWFyY2hEaWFsb2coICdBZ2VudFN1cnZleVNlYXJjaCcsICckUURhdGF7IlByb2ZpbGUifScgKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclBhZ2VCYWNrIC0tPgoKPCEtLSBkdGw6YmxvY2s6Q29udGV4dFNldHRpbmdzIC0tPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJDb250ZXh0RnVuY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IkNvbnRleHRTZXR0aW5ncyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJTaG93Q29udGV4dFNldHRpbmdzRGlhbG9nIiB0aXRsZT0iJFRleHR7IkNvbnRleHQgU2V0dGluZ3MifSI+PHNwYW4+JFRleHR7IkNvbnRleHQgU2V0dGluZ3MifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICAgICAgPGRpdiBpZD0iQ29udGV4dFNldHRpbmdzRGlhbG9nQ29udGFpbmVyIiBjbGFzcz0iSGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGlkPSJDb250ZXh0U2V0dGluZ3NEaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJBZ2VudFByZWZlcmVuY2VzIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlVwZGF0ZSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJHcm91cCIgdmFsdWU9IiRRRGF0YXsiR3JvdXAifSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJSZWRpcmVjdFVSTCIgdmFsdWU9IiRRRGF0YXsiUmVxdWVzdGVkVVJMIn0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iJFFEYXRheyJQcmVmZXJlbmNlc0tleSJ9Ij4kVGV4dHsiTWF4LiBzaG93biBTdXJ2ZXlzIHBlciBwYWdlIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiUGFnZVNob3duU3RyaW5nIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgIDwvZGl2PgoKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgLy8gYmluZCB0aGUgQ29udGV4dFNldHRpbmdzRGlhbG9nQ29udGFpbmVyCiAgICAkKCcjU2hvd0NvbnRleHRTZXR0aW5nc0RpYWxvZycpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coJCgnI0NvbnRleHRTZXR0aW5nc0RpYWxvZ0NvbnRhaW5lcicpLCAnJEpTVGV4dHsiU2V0dGluZ3MifScsICcyMCUnLCAnQ2VudGVyJywgdHJ1ZSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIExhYmVsOiAnJEpTVGV4dHsiU3VibWl0In0nLAogICAgICAgICAgICAgICAgICAgIFR5cGU6ICdTdWJtaXQnLAogICAgICAgICAgICAgICAgICAgIENsYXNzOiAnUHJpbWFyeScKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICk7CiAgICAgICAgRXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICBFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjwhLS0gZHRsOmJsb2NrOkNvbnRleHRTZXR0aW5ncyAtLT4KCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJBY3Rpb25Sb3ciPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iT3ZlcnZpZXdBY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICAkRGF0YXsiQWN0aW9uUm93In0KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Ik92ZXJ2aWV3Wm9vbSI+Cgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclZpZXdNb2RlIC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclZpZXdNb2RlU2VsZWN0ZWQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iQWN0aXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSIkUURhdGF7Ik5hbWUifSIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtGaWx0ZXI9JExRRGF0YXsiRmlsdGVyIn07Vmlldz0kTFFEYXRheyJWaWV3In07JERhdGF7IkxpbmtGaWx0ZXIifSIgdGl0bGU9IiRUZXh0eyIkRGF0YXsiTmFtZSJ9In0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbWFnZU1vZGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTmFtZVNob3J0Ij4kVGV4dHsiJERhdGF7Ik5hbWVTaG9ydCJ9In08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJOYW1lTG9uZyI+JFRleHR7IiREYXRheyJOYW1lIn0ifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyVmlld01vZGVTZWxlY3RlZCAtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJWaWV3TW9kZU5vdFNlbGVjdGVkIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iJFFEYXRheyJOYW1lIn0iIG5hbWU9Ik92ZXJ2aWV3Q29udHJvbCIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtGaWx0ZXI9JExRRGF0YXsiRmlsdGVyIn07Vmlldz0kTFFEYXRheyJWaWV3In07JERhdGF7IkxpbmtGaWx0ZXIifSIgdGl0bGU9IiRUZXh0eyIkRGF0YXsiTmFtZSJ9In0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbWFnZU1vZGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTmFtZVNob3J0Ij4kVGV4dHsiJERhdGF7Ik5hbWVTaG9ydCJ9In08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJOYW1lTG9uZyI+JFRleHR7IiREYXRheyJOYW1lIn0ifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyVmlld01vZGVOb3RTZWxlY3RlZCAtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJWaWV3TW9kZSAtLT4KICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJQYWdpbmF0aW9uIj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJQYWdlTmF2QmFyIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiUmVzdWx0TG9uZyJ9CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJTaXRlTmF2QmFyTG9uZyJ9CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyUGFnZU5hdkJhciAtLT4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXJMZWZ0Ij48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgojIHNvcnQgb3JkZXIgYmFyIGlmIG5lZWRlZAogICAgICAgICAgICAgICAgJERhdGF7IlNvcnRPcmRlckJhciJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhciAtLT4K
Ly8gLS0KLy8gU3VydmV5LkFnZW50LlN1cnZleVpvb20uanMgLSBwcm92aWRlcyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciBTdXJ2ZXlab29tCi8vIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy9cbiI7Ci8vIC0tCi8vICRJZDogU3VydmV5LkFnZW50LlN1cnZleVpvb20uanMsdiAxLjMgMjAxMS8wMi8wMyAyMjo0NjoxNSBkeiBFeHAgJAovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgU3VydmV5ID0gU3VydmV5IHx8IHt9OwpTdXJ2ZXkuQWdlbnQgPSBTdXJ2ZXkuQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBTdXJ2ZXkuQWdlbnQuU3VydmV5Wm9vbQogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciBTdXJ2ZXlab29tLgogKi8KU3VydmV5LkFnZW50LlN1cnZleVpvb20gPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtqUXVlcnlPYmplY3R9ICRJZnJhbWUgVGhlIGlmcmFtZSB3aGljaCBzaG91bGQgYmUgYXV0by1oZWlnaHRlZAogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucwogICAgICovCiAgICBUYXJnZXROUy5JZnJhbWVBdXRvSGVpZ2h0ID0gZnVuY3Rpb24gKCRJZnJhbWUpIHsKICAgICAgICBpZiAoaXNKUXVlcnlPYmplY3QoJElmcmFtZSkpIHsKICAgICAgICAgICAgdmFyIE5ld0hlaWdodCA9ICRJZnJhbWUuY29udGVudHMoKS5oZWlnaHQoKTsKICAgICAgICAgICAgaWYgKCFOZXdIZWlnaHQgfHwgaXNOYU4oTmV3SGVpZ2h0KSkgewogICAgICAgICAgICAgICAgTmV3SGVpZ2h0ID0gQ29yZS5Db25maWcuR2V0KCdTdXJ2ZXkuSFRNTFJpY2hUZXh0SGVpZ2h0RGVmYXVsdCcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKE5ld0hlaWdodCA+IENvcmUuQ29uZmlnLkdldCgnU3VydmV5LkhUTUxSaWNoVGV4dEhlaWdodE1heCcpKSB7CiAgICAgICAgICAgICAgICAgICAgTmV3SGVpZ2h0ID0gQ29yZS5Db25maWcuR2V0KCdTdXJ2ZXkuSFRNTFJpY2hUZXh0SGVpZ2h0TWF4Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJElmcmFtZS5oZWlnaHQoTmV3SGVpZ2h0ICsgJ3B4Jyk7CiAgICAgICAgfQogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oU3VydmV5LkFnZW50LlN1cnZleVpvb20gfHwge30pKTsK
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEB2ZXJzaW9uICAgICAkUmV2aXNpb246IDEuOCAkCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRGVmYXVsdCBTZXR0aW5ncwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gU3VydmV5IEdyYXBoCiAqLwoKZmllbGRzZXQuU3VydmV5R3JhcGhzIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luLWJvdHRvbTogMjBweDsKfQoKZmllbGRzZXQuU3VydmV5R3JhcGhzIC5RdWVzdGlvbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgd2lkdGg6IDI1JTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKfQoKZmllbGRzZXQuU3VydmV5R3JhcGhzIC5BbnN3ZXIgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaW5lLWhlaWdodDogMS4zZW07CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwICNGQUZBRkE7CiAgICB3aWR0aDogMjUlOwogICAgbWFyZ2luLWJvdHRvbTogNXB4Owp9CgpkaXYuU3VydmV5R3JhcGggewogICAgZmxvYXQ6IGxlZnQ7CiAgICB3aWR0aDogNTAlOwogICAgaGVpZ2h0OiAyMnB4OwogICAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgICBwYWRkaW5nLWJvdHRvbTogM3B4Owp9CgpkaXYuU3VydmV5R3JhcGhDb250YWluZXIgewogICAgd2lkdGg6IDk1JTsKICAgIGhlaWdodDogMjJweDsKfQoKZGl2LlN1cnZleUdyYXBoQmFyIHsKICAgIGhlaWdodDogMjJweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNGMkIxM0U7Cn0KCnAuU3VydmV5R3JhcGhMZXllbmQgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaW5lLWhlaWdodDogMS4zZW07CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI0ZBRkFGQTsKICAgIHdpZHRoOiAxMCU7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBoZWlnaHQ6IDIycHg7Cn0KCi5TdWJMYWJlbCB7CiAgICB3aWR0aDogMzUlOwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBmbG9hdDogbGVmdDsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgouU3ViRmllbGQgewogICAgbWFyZ2luLWxlZnQ6IDM1JTsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgphLkFycm93VXAsCmEuQXJyb3dVcERpc2FibGVkLAphLkFycm93RG93biwKYS5BcnJvd0Rvd25EaXNhYmxlZCB7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMTZweDsKICAgIHBhZGRpbmc6IDFweDsKICAgIG1hcmdpbi10b3A6IDA7CiAgICBtYXJnaW4tYm90dG9tOiAxcHg7CiAgICBib3JkZXItc3R5bGU6IG5vbmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgphLkFycm93VXA6YWN0aXZlLAphLkFycm93RG93bjphY3RpdmUgewogICAgbWFyZ2luLXRvcDogMXB4OwogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKYS5BcnJvd1VwRGlzYWJsZWQ6YWN0aXZlLAphLkFycm93RG93bkRpc2FibGVkOmFjdGl2ZSB7CiAgICBtYXJnaW4tdG9wOiAwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAxcHg7Cn0KCmEuQXJyb3dVcCB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL2ljb25zL3N1cnZleV9hcnJvd191cC5wbmcpOwp9CgphLkFycm93VXBEaXNhYmxlZCB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL2ljb25zL3N1cnZleV9hcnJvd191cF9kaXNhYmxlZC5wbmcpOwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgphLkFycm93RG93biB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL2ljb25zL3N1cnZleV9hcnJvd19kb3duLnBuZykgbm8tcmVwZWF0IDAgMDsKfQoKYS5BcnJvd0Rvd25EaXNhYmxlZCB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL2ljb25zL3N1cnZleV9hcnJvd19kb3duX2Rpc2FibGVkLnBuZyk7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCmEuQXJyb3dVcCBzcGFuLAphLkFycm93VXBEaXNhYmxlZCBzcGFuLAphLkFycm93RG93biBzcGFuLAphLkFycm93RG93bkRpc2FibGVkIHNwYW4sCmEuU2VlRGV0YWlscyBzcGFuIHsKICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICBkaXNwbGF5OiBub25lOwp9CgphLlNlZURldGFpbHMgewogICAgaGVpZ2h0OiAxNXB4OwogICAgd2lkdGg6IDE1cHg7CiAgICBwYWRkaW5nOiAxcHg7CiAgICBtYXJnaW4tdG9wOiAwOwogICAgbWFyZ2luLWJvdHRvbTogMXB4OwogICAgYm9yZGVyLXN0eWxlOiBub25lOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGJhY2tncm91bmQ6IHVybCguLi9pbWcvaWNvbnMvc3VydmV5X3NlZV9kZXRhaWxzLnBuZyk7Cn0KCmxhYmVsLlRleHRhcmVhLApkaXYuVGV4dGFyZWEgewogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgIG1hcmdpbi10b3A6IDEwcHg7Cn0KCi5GaWVsZCB1bCBsaXsKICAgIG1hcmdpbi1sZWZ0OiAzMHB4OwogICAgbGlzdC1zdHlsZTogZGlzYzsKfQoKLkZpZWxkIG9sIGxpewogICAgbWFyZ2luLWxlZnQ6IDMwcHg7CiAgICBsaXN0LXN0eWxlOiBkZWNpbWFsOwp9Cn0=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEB2ZXJzaW9uICAgICAkUmV2aXNpb246IDEuMSAkCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqIEBjc3MtZm9yICAgICBJRTcKICovCgovKioKICogQHBhY2thZ2UgICAgIFNraW4gIkRlZmF1bHQiCiAqIEBzZWN0aW9uICAgICBBZ2VudAogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7Cgpmb3JtLkFjdGlvbkZvcm0gewogICAgbWFyZ2luLXRvcDogNHB4Owp9CgpkaXYuRmllbGQgewogICBtYXJnaW4tdG9wOiA0cHg7Cn0KCn0gLyogZW5kIEBtZWRpYSAqLw==
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEN1c3RvbWVyIEZyb250ZW5kCiAqIEB2ZXJzaW9uICAgICAkUmV2aXNpb246IDEuNSAkCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTdXJ2ZXkgLSBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgQ3VzdG9tZXIKICovCgpkaXYuU3VydmV5QmxvY2sgewogICAgbWFyZ2luOiA4cHggMCAxM3B4OwogICAgcGFkZGluZy1ib3R0b206IDVweDsKICAgIGJhY2tncm91bmQ6ICNGOEY5Rjk7CiAgICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudChjZW50ZXIgdG9wICwgI0ZGRiwgI0Y4RjlGOSk7CiAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCNGRkYpLCB0bygjRjhGOUY5KSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjRUFFRUVFOwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKICAgIHdpZHRoOiA3MzhweDsKfQoKLlN1cnZleUJsb2NrSGVhZGVyIHsKICAgIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KGNlbnRlciB0b3AgLCAjRjlGOUY5LCAjRUNFRUVFKSByZXBlYXQgc2Nyb2xsIDAgMCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQ0NDQ0NDOwogICAgY29sb3I6ICMzMzMzMzM7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiA0cHggOXB4IDNweCA5cHg7CiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjRkZGRkZGOwp9CgpmaWVsZHNldC5TdXJ2ZXkgewogICAgd2lkdGg6IDczOHB4Owp9CgpkaXYuQWN0aW9uUm93IHsKICAgIHdpZHRoOiA3MjBweDsKfQoKZGl2LkludHJvIC5Db250ZW50ewogICAgYm9yZGVyLXRvcDogMDsKfQoKZGl2LlF1ZXN0aW9uewogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNDOUM5Qzk7CiAgICBjb2xvcjogIzMzMzMzMzsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIG1hcmdpbi1sZWZ0OiA0MHB4OwogICAgbWFyZ2luLXRvcDogMTVweDsKICAgIHdpZHRoOiA1MjBweDsKICAgIHBhZGRpbmc6IDRweCA5cHggM3B4IDlweDsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwICNFQ0VFRUU7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgpsYWJlbC5BbnN3ZXIgewogICAgYmFja2dyb3VuZDpub25lOwogICAgYm9yZGVyOiBub25lOwogICAgd2lkdGg6IDM2NXB4OwogICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgIG1hcmdpbi10b3A6IDNweDsKICAgIHRleHQtYWxpZ246bGVmdDsKfQoKZmllbGRzZXQgaW5wdXQsCmRpdi5BbnN3ZXIgewogICAgZmxvYXQ6bGVmdDsKfQoKZmllbGRzZXQgaW5wdXQsCmZpZWxkc2V0IHRleHRhcmVhLApkaXYuQW5zd2VyIHsKICAgIG1hcmdpbjogN3B4IDAgN3B4IDc1cHg7Cn0KCi5SaWNoVGV4dEFuc3dlciB7CiAgICBtYXJnaW46IDdweCAwIDdweCA3NXB4Owp9CgpkaXYuQW5zd2VyIHsKICAgIHBhZGRpbmc6MHB4Owp9CgouU3VydmV5QnV0dG9uIHsKICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjVweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo1cHg7CiAgICAtbW96LWJveC1zaGFkb3c6MCAwIDNweCAjRjZGOUY5OwogICAgYm9yZGVyLWNvbG9yOi1tb3otdXNlLXRleHQtY29sb3IgI0Q2RDZENiAjRDZENkQ2OwogICAgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjRDZENkQ2OwogICAgYm9yZGVyLXN0eWxlOm5vbmUgc29saWQgc29saWQ7CiAgICBib3JkZXItd2lkdGg6bWVkaXVtIDFweCAxcHg7CiAgICBib3R0b206LTIycHg7CiAgICBjb2xvcjojOTk5OTk5OwogICAgZGlzcGxheTpub25lOwogICAgaGVpZ2h0OjEwcHg7CiAgICBtYXJnaW46MCAxM3B4OwogICAgcGFkZGluZzo0cHggOHB4IDdweCAyNHB4OwogICAgcG9zaXRpb246YWJzb2x1dGU7Cn0K
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEN1c3RvbWVyIEZyb250ZW5kCiAqIEB2ZXJzaW9uICAgICAkUmV2aXNpb246IDEuMSAkCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTdXJ2ZXkgLSBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgQ3VzdG9tZXIKICovCgpsYWJlbC5BbnN3ZXIgewogICAgcGFkZGluZy10b3A6IDVweDsKfQoKZGl2LlF1ZXN0aW9uQ29udGFpbmVyIHsKICAgIG1hcmdpbi1sZWZ0OiA0MHB4Owp9Cg==
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZlJREFUeNqkUztLA0EQnr3bvEhhI9FC09gJInJiZbAQREHUWhTtbK8ULEWwFVLZaJE/YKWFgn2SQgxBgjYSIoYkEsxxuec6c/FxCXmAGZjbmdmZ7+a1TAgBw5AEQxL3K7OnjxAMhyEQCkEgGARJllfJ7jrOjWWaYBkGmM0mPBzOdAdoIyF2MFD9lkfxmxqYgT/Ysix1fzOukHp59apCq1epgT0QFGya6u56XMnnG0C8vTahkI3u+gJ4wYah7m1NKcWiBrregFqtArlcCTaWxhW66wRpKwEdEjTW5EUmS/riXEzhXMB9upSFdMnzYYwl/KXwjgwOsHEgXBds285oQgYHAQ1dB875PJMkmkz/Jjq2DbqmeXJFDoHDwAMwUI9Eo/0BtHod9EbjVy/zKDgugIkARHSy52uUFroDFM9WgI9NQ2T5qJUBj2AJfwD63QnY73mUznuPkRy022MwcfNsJnlMMtlawYMXadItP8Wst1yhmmz9SVQLBbTRUn0iv1CrfpyZ/zXiiOgYQY72WHDq5QfGuF0B/kNfAgwAlIbWNoRkTzIAAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAXNSR0IArs4c6QAAAAJiS0dEAP+Hj8y/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2goUEigB30KkogAAAMpJREFUKM+lkT0OAWEQhp/9ESJKF5FPK1oSCQfYXvvVDuAcCola5w5sKdkL6EQhYv+NYpddSyi8xUwxT2bemTGE7zJ/1LGzNKNBnRrWANJNTEjAvAzkclINtFm+dQAQJ9ZjBWstFIhZlCM9Uh4eQxVpcSqAOKGeqAM+J/b0VfhE8hFRT1i40FEWWxfA6GVjckCmKTeSXcoNH7trYlVNJlwBQQiAZhU4c8k6IfiAT+sVOD52AQJ4xsJk6VrRp1PHWXJXgOGWAePvb94BXKRFykgCmkUAAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZBJREFUeNrEU79Lw0AUfpemhZI4CIpCJ92cHE4HJ0HEQcFRQdShIJ0E/5SCOBSkgxZE7CS4iIt06NIMnVxUcKhWCJb+iPl1l/gu1ppKKkIHH1zu3r33ffnu3Tvi+z4MYxIMaXLYWcy/9taEkBxOtOtqqDTzFbtNT0QTeIyFXbq5kgoIzq9rf1PgOk5fsNVyQZTo5/5AgqauQ1JVe75puuB5AI5lfe91OvidiiYwms0gOakogd9ovYPjuuCY5ifYMMC17cEKhDEEGO02yLIMNYsB9wjYSMCwPh7nvx8BK51DzZSjbo5E9biCBBAQoFW6ORpOmegi2nYJEyhNr9EHPOo9qvXAB3V1iY4mAF7OrjS83tLARkJwwbWsbPmoqCkJCXQmwRuPQVyW4Clf1ERM5IQxJNzK6vwWSmcQm1nfxv2Dsb0dyjHcOD4Vf87yu8uCVb2AMKaPAJPEJK5gRF7Y3yCTs7uBsnr1hJUPi7gUd9j2Q6AognEcKRwxMr08FxA83lS6KaLXnxHjRRL8y2v8EGAAqEvNnH+aSSAAAAAASUVORK5CYII=
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAXNSR0IArs4c6QAAAAJiS0dEAP+Hj8y/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2goUEig6bklNhgAAAMlJREFUKM+lkT0KAjEQhb9IFEE9TToP4BU8gq2exG23FAKCYCmIra25iYL4w/6asVhddlW0cJo3yXy8CS9K+F6NH3N0IVMAVIgBnIwAJlXgVogZGNh8ckgfxzNS9jXgQAeACE8MwLUOnIjpACcyYuBa+uinVc4ZzQVPRI5/XSGhN54cQYhhB+IYVYBkK2ZojkR4+qbNyqltLSixSTBzLRIyNEuXBGJfkhSbBtb16LJwaTmuPBLEZszHoIKmfcvhieR70Ovqnfr7N++lLlCSshf+TwAAAABJRU5ErkJggg==
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmJJREFUeNqMUs9rE0EUnp2dZPPDbJvEUEtsSoiSRo1QFONBqaQFQUqhFYQeFg/+AbWpOeSsJ0Nz9KaIl95qT1ZQQpCiltQISrVpDlVLmiao+dFNstvdzDobY03SFXzw8ebtft97M+89auL2OtAys/kIMBqNQxDCMAmDBE6CLEEcYxyt1+sb1SoPEPiHKQqeFMV6zOtB+XM+Q8brYvL5H1h4+7HuT30Slsn/EKE9RYIgHBKTqkMYN2LXRnvSZ716k+uo0Q4pQA32Q/3AMYti65Uyi8vlmCQ3PiOe39O6QPjCsDV/0s0YrGZGp4oPkpNzwM+y6+mf31+vlcOoUqloJQj6fQNp4g07xZq4UwRiN2H4NCs/j38JkieIWgmcx/tNX/8EPifLdrfIgGiRaJ0QYwg0kM3l61JLbNGqkNutySoP6nRmoIF48n3ZRkNIS4TWLcZYoVbflXpVHnKK98kH3ISiKE1Iev/DN8npxfNnalmnzYh1bcOmIYXWPvBCYlWwMgwbpd1u94Hw9/yVQRoXrk6OX55aeAaRIOqEPptOsrLInN1t7C+95JnHS+UeAPQhsgsrqHN5lFNkA6dCofBdjpu+Zz0x8yJhunUzkeQ7NpGmTVFZrm6oGtQmvuhw9E3MzUUiHHdjvlgsPrHslzIURb863MIG2CskgZ1JAdR6/7jH4x2bnY3McNz1B9vb3xZIwsxWap4kpg7Jt1LRv4HL5QKBQODO5mZBGRkZfYQQGqMoCvyvqUyDw+G4RCpeKZVKOVmWV5p3BEBuQWrzUluschpUqw92dUJqK9qAW2h0+Q78EmAAX1InjmtLMukAAAAASUVORK5CYII=
IyAtLQojIFN1cnZleS5wbSAtIGNvZGUgdG8gZXhjZWN1dGUgZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBTdXJ2ZXkucG0sdiAxLjEgMjAxMS8xMi8xNSAxNTo0Mzo1MiBqaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSB2YXI6OnBhY2thZ2VzZXR1cDo6U3VydmV5OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHZhcnMgcXcoQElTQSAkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjEgJCkgWzFdOwoKPWhlYWQxIE5BTUUKClN1cnZleS5wbSAtIGNvZGUgdG8gZXhjZWN1dGUgZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBmdW5jdGlvbnMKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OkNvbmZpZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpMb2c7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok1haW47CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OlRpbWU7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkRCOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpYTUw7CiAgICB1c2UgdmFyOjpwYWNrYWdlc2V0dXA6OlN1cnZleTsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgbXkgJEVuY29kZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICk7CiAgICBteSAkTG9nT2JqZWN0ICAgID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgKTsKICAgIG15ICRNYWluT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06Ok1haW4tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkVGltZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICApOwogICAgbXkgJERCT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgIG15ICRYTUxPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6WE1MLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgREJPYmplY3QgICAgID0+ICREQk9iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgbXkgJENvZGVPYmplY3QgPSB2YXI6OnBhY2thZ2VzZXR1cDo6U3VydmV5LT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgICAgIFRpbWVPYmplY3QgICA9PiAkVGltZU9iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIFhNTE9iamVjdCAgICA9PiAkWE1MT2JqZWN0LAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgRW5jb2RlT2JqZWN0IE1haW5PYmplY3QgVGltZU9iamVjdCBEQk9iamVjdCBYTUxPYmplY3QpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gQ29kZUluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIGluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZUluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlSW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlUmVpbnN0YWxsKCkKCnJ1biB0aGUgY29kZSByZWluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVJlaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVSZWluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29kZVVwZ3JhZGUoKQoKcnVuIHRoZSBjb2RlIHVwZ3JhZGUgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVwZ3JhZGUoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVW5pbnN0YWxsKCkKCnJ1biB0aGUgY29kZSB1bmluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVuaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVVbmluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzJfMF85MigpCgpUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXhlY3V0ZWQgaWYgdGhlIGluc3RhbGxlZCBtb2R1bGUgdmVyc2lvbiBpcyBzbWFsbGVyIHRoYW4gMi4wLjkyLgoKbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZUZyb21Mb3dlclRoYW5fMl8wXzkyKCk7Cgo9Y3V0CgpzdWIgQ29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzJfMF85MiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgU0VMRUNUIGFsbCBmdW5jdGlvbmFsaXR5IHZhbHVlcwogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIHNlbmRfdGltZSBGUk9NIHN1cnZleV9yZXF1ZXN0JywKICAgICk7CgogICAgbXkgQExpc3Q7CiAgICBST1c6CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG5leHQgUk9XIGlmICEkUm93WzFdOwoKICAgICAgICBwdXNoIEBMaXN0LCBcQFJvdzsKICAgIH0KCiAgICAjIHNhdmUgZW50cmllcyBpbiBuZXcgdGFibGUKICAgIGZvciBteSAkRW50cnkgKEBMaXN0KSB7CiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICBTUUwgPT4KICAgICAgICAgICAgICAgICdVUERBVEUgc3VydmV5X3JlcXVlc3QgU0VUIGNyZWF0ZV90aW1lID0gPyBXSEVSRSAgaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkRW50cnktPlsxXSwgXCRFbnRyeS0+WzBdIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgU29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAudHh0LgoKPWN1dAoKPWhlYWQxIFZFUlNJT04KCiRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMTEvMTIvMTUgMTU6NDM6NTIgJAoKPWN1dAo=
IyAtLQojIGNyb24vc3VydmV5X3RyaWdnZXJfc2VuZF9yZXF1ZXN0cyAtIHNlbmQgZGVsYXllZCBzdXJ2ZXkgcmVxdWVzdHMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IHN1cnZleV90cmlnZ2VyX3NlbmRfcmVxdWVzdHMuZGlzdCx2IDEuMiAyMDExLzEyLzE1IDE2OjMwOjExIGpoIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgojIC0tCgojIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB3aXRoIHRoZSBleHRlbnN0aW9uICcuZGlzdCcuCiMgUGxlYXNlIHJlbW92ZSB0aGUgZXh0ZW5zaW9uIGFuZCB1bmNvbW1lbnQgdGhlIGxhc3QgbGluZSBmb3IgcHJvZHVjdGlvbi4KCiMgZXZlcnkgMjAgbWluCiMqLzIwICogKiAqICogJEhPTUUvYmluL290cnMuU3VydmV5VHJpZ2dlclNlbmRSZXF1ZXN0cy5wbCAtZSA+PiAvZGV2L251bGw=
IyEvdXNyL2Jpbi9wZXJsIC13CiMgLS0KIyBiaW4vb3Rycy5TdXJ2ZXlUcmlnZ2VyU2VuZFJlcXVlc3RzLnBsIC0gdHJpZ2dlciBzZW5kaW5nIGRlbGF5ZWQgc3VydmV5IHJlcXVlc3RzCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBvdHJzLlN1cnZleVRyaWdnZXJTZW5kUmVxdWVzdHMucGwsdiAxLjEgMjAxMS8xMi8xNSAxNTozNzoyOSBqaCBFeHAgJAojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBBRkZFUk8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgojIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQojIG9yIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgdXNlIC4uLyBhcyBsaWIgbG9jYXRpb24KdXNlIEZpbGU6OkJhc2VuYW1lOwp1c2UgRmluZEJpbiBxdygkUmVhbEJpbik7CnVzZSBsaWIgZGlybmFtZSgkUmVhbEJpbik7CnVzZSBsaWIgZGlybmFtZSgkUmVhbEJpbikgLiAiL0tlcm5lbC9jcGFuLWxpYiI7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjEgJCkgWzFdOwoKdXNlIEtlcm5lbDo6Q29uZmlnOwp1c2UgS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaW1lOwp1c2UgS2VybmVsOjpTeXN0ZW06OkxvZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpNYWluOwp1c2UgS2VybmVsOjpTeXN0ZW06OkRCOwp1c2UgS2VybmVsOjpTeXN0ZW06OlN0YXRlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlRpY2tldDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpVc2VyOwp1c2UgS2VybmVsOjpTeXN0ZW06OlN1cnZleTsKdXNlIEdldG9wdDo6U3RkOwoKbXkgJW9wdHM7CmdldG9wdHMoICdhZmhkZXYnLCBcJW9wdHMgKTsKCm15ICRPcHRzQ291bnQgPSBzY2FsYXIoIGtleXMgJW9wdHMgKTsKCmlmICgKICAgICRvcHRze2h9CiAgICB8fCAoICRPcHRzQ291bnQgPCAxICkKICAgIHx8ICggJG9wdHN7dn0gJiYgJE9wdHNDb3VudCAhPSAyICkKICAgICkKewogICAgcHJpbnQgU1RERVJSICJVc2FnZTogYmluLyQwIFstaF0gWy1kXSBbLWVdXG4iOwogICAgcHJpbnQgU1RERVJSICIkMCA8UmV2aXNpb24gJFZFUlNJT04+XG4iOwogICAgcHJpbnQgU1RERVJSICJUcmlnZ2VyIHNlbmRpbmcgZGVsYXllZCBzdXJ2ZXkgcmVxdWVzdHMuXG4iOwogICAgcHJpbnQgU1RERVJSICJVc2FnZTogJDAgLWggKERpc3BsYXkgdGhpcyBoZWxwIHRleHQpXG4iOwogICAgcHJpbnQgU1RERVJSICJVc2FnZTogJDAgLWQgKERvIGEgZHJ5IHJ1biwgaW1wbGllcyAtdilcbiI7CiAgICBwcmludCBTVERFUlIgIlVzYWdlOiAkMCAtZSAoRG8gYSByZWFsIHJ1bilcbiI7CiAgICBwcmludCBTVERFUlIgIlVzYWdlOiAkMCAtdiAoQmUgbW9yZSB2ZXJib3NlKVxuIjsKICAgIHByaW50IFNUREVSUiAiQ29uZmlndXJhdGlvbiBpcyBkb25lIHVzaW5nIFN5c0NvbmZpZyAoU3VydmV5LT5Db3JlKVxuIjsKICAgIHByaW50IFNUREVSUiAiU2hvcnQgZXhwbGFuYXRpb246XG4iOwogICAgcHJpbnQgU1RERVJSICIxLiBHbyB0byB5b3VyIFN5c0NvbmZpZyBhbmRcbiI7CiAgICBwcmludCBTVERFUlIgIiAgIC0gY29uZmlndXJlLCBTdXJ2ZXk6OlNlbmRJbkhvdXJzQWZ0ZXJDbG9zZSB0byBhIGhpZ2hlciB2YWx1ZSB0aGFuIDBcbiI7CiAgICBwcmludCBTVERFUlIgIjIuIENyZWF0ZSBhIHN1cnZleSwgbWFrZSBpdCBtYXN0ZXJcbiI7CiAgICBwcmludCBTVERFUlIgIjMuIENyZWF0ZSBhIHRpY2tldCwgY2xvc2UgaXRcbiI7CiAgICBwcmludCBTVERFUlIgIjQuIFdhaXQgdGhlIG5lY2Vzc2FyeSBhbW91bnQgb2YgaG91cnMgeW91J3ZlIGNvbmZpZ3VyZWRcbiI7CiAgICBwcmludCBTVERFUlIgIjUuIFlvdSBjYW4gZG8gYSBkcnkgcnVuIHRvIGdldCBhIGxpc3Qgb2Ygc3VydmV5cyB0aGF0IHdvdWxkIGJlIHNlbnQgKC1kKVxuIjsKICAgIHByaW50IFNUREVSUiAiNi4gSWYgeW91J3JlIGZpbmUgd2l0aCBpdCwgYWN0aXZhdGUgdmFyL2Nyb24vZ2VuZXJpY19hZ2VudF9zdXJ2ZXkuZGlzdFxuIjsKICAgIHByaW50IFNUREVSUiAiQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMuY29tL1xuIjsKICAgIGV4aXQ7Cn0KCiMgYSBkcnkgcnVuIGltcGxpZXMgdmVyYm9zaXR5CmlmICggJG9wdHN7ZH0gKSB7CiAgICAkb3B0c3t2fSA9IDE7Cn0KCiMgY29tbW9uIG9iamVjdHMKbXkgJUNvbW1vbk9iamVjdCA9ICgpOwokQ29tbW9uT2JqZWN0e0NvbmZpZ09iamVjdH0gPSBLZXJuZWw6OkNvbmZpZy0+bmV3KCk7CiRDb21tb25PYmplY3R7RW5jb2RlT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldyglQ29tbW9uT2JqZWN0KTsKJENvbW1vbk9iamVjdHtMb2dPYmplY3R9ICAgID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgTG9nUHJlZml4ID0+ICdPVFJTLW90cnMuU3VydmV5VHJpZ2dlclNlbmRSZXF1ZXN0JywKICAgICVDb21tb25PYmplY3QsCik7CiRDb21tb25PYmplY3R7VGltZU9iamVjdH0gICAgICA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lLT5uZXcoJUNvbW1vbk9iamVjdCk7CiRDb21tb25PYmplY3R7TWFpbk9iamVjdH0gICAgICA9IEtlcm5lbDo6U3lzdGVtOjpNYWluLT5uZXcoJUNvbW1vbk9iamVjdCk7CiRDb21tb25PYmplY3R7REJPYmplY3R9ICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpEQi0+bmV3KCVDb21tb25PYmplY3QpOwokQ29tbW9uT2JqZWN0e1N5c0NvbmZpZ09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnLT5uZXcoJUNvbW1vbk9iamVjdCk7CiRDb21tb25PYmplY3R7VGlja2V0T2JqZWN0fSAgICA9IEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQtPm5ldyglQ29tbW9uT2JqZWN0KTsKJENvbW1vbk9iamVjdHtVc2VyT2JqZWN0fSAgICAgID0gS2VybmVsOjpTeXN0ZW06OlVzZXItPm5ldyglQ29tbW9uT2JqZWN0KTsKJENvbW1vbk9iamVjdHtTdGF0ZU9iamVjdH0gICAgID0gS2VybmVsOjpTeXN0ZW06OlN0YXRlLT5uZXcoJUNvbW1vbk9iamVjdCk7CiRDb21tb25PYmplY3R7U3VydmV5T2JqZWN0fSAgICA9IEtlcm5lbDo6U3lzdGVtOjpTdXJ2ZXktPm5ldyglQ29tbW9uT2JqZWN0KTsKCm15ICRTZW5kSW5Ib3Vyc0FmdGVyQ2xvc2UgPSAkQ29tbW9uT2JqZWN0e0NvbmZpZ09iamVjdH0tPkdldCgnU3VydmV5OjpTZW5kSW5Ib3Vyc0FmdGVyQ2xvc2UnKTsKaWYgKCAhJFNlbmRJbkhvdXJzQWZ0ZXJDbG9zZSApIHsKICAgIGlmICggJG9wdHN7dn0gKSB7CiAgICAgICAgcHJpbnQgIk5vIGRheXMgY29uZmlndXJlZCBpbiBTdXJ2ZXk6OlNlbmRJbkhvdXJzQWZ0ZXJDbG9zZS5cbiI7CiAgICB9CiAgICBleGl0IDE7Cn0KCiMgRmluZCBzdXJ2ZXlfcmVxdWVzdHMgdGhhdCBoYXZlbid0IGJlZW4gc2VudCB5ZXQKJENvbW1vbk9iamVjdHtEQk9iamVjdH0tPlByZXBhcmUoCiAgICBTUUwgPT4gIlNFTEVDVCBpZCwgdGlja2V0X2lkLCBjcmVhdGVfdGltZSBGUk9NIHN1cnZleV9yZXF1ZXN0IFdIRVJFICIKICAgICAgICAuICIoc2VuZF90aW1lIElTIE5VTEwgT1Igc2VuZF90aW1lID0gJzAwMDAtMDAtMDAgMDA6MDA6MDAnKSBPUkRFUiBCWSBjcmVhdGVfdGltZSBERVNDIiwKKTsKCiMgZmV0Y2ggdGhlIHJlc3VsdApteSBAUm93czsKd2hpbGUgKCBteSBAUm93ID0gJENvbW1vbk9iamVjdHtEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgIHB1c2ggQFJvd3MsIHsKICAgICAgICBJRCAgICAgICAgID0+ICRSb3dbMF0sCiAgICAgICAgVGlja2V0SUQgICA9PiAkUm93WzFdLAogICAgICAgIENyZWF0ZVRpbWUgPT4gJFJvd1syXSwKICAgIH07Cn0KCiMgR2V0IFN5c3RlbVRpbWUgaW4gVW5peFRpbWUKbXkgJE5vdyA9ICRDb21tb25PYmplY3R7VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKTsKClNVUlZFWVJFUVVFU1Q6CmZvciBteSAkTGluZSAoQFJvd3MpIHsKICAgIGZvciBteSAkVmFsIHF3KElEIFRpY2tldElEIENyZWF0ZVRpbWUpIHsKICAgICAgICBpZiAoICEkTGluZS0+eyRWYWx9ICkgewogICAgICAgICAgICBpZiAoICRvcHRze3Z9ICkgewogICAgICAgICAgICAgICAgcHJpbnQgIiRWYWwgbWlzc2luZyBpbiBzZXJ2aWNlX3JlcXVlc3Qgcm93LlxuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBuZXh0IFNVUlZFWVJFUVVFU1Q7CiAgICAgICAgfQogICAgfQoKICAgICMgQ29udmVydCBjcmVhdGVfdGltZSB0byB1bml4dGltZQogICAgbXkgJENyZWF0ZVRpbWUKICAgICAgICA9ICRDb21tb25PYmplY3R7VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKCBTdHJpbmcgPT4gJExpbmUtPntDcmVhdGVUaW1lfSApOwoKICAgICMgZG9uJ3Qgc2VuZCBmb3Igc3VydmV5X3JlcXVlc3RzIHRoYXQgYXJlIHlvdW5nZXIgdGhhbiBDcmVhdGVUaW1lICsgJFNlbmRJTkhvdXJzQWZ0ZXJDbG9zZQogICAgaWYgKCAkU2VuZEluSG91cnNBZnRlckNsb3NlICogMzYwMCArICRDcmVhdGVUaW1lID4gJE5vdyApIHsKICAgICAgICBpZiAoICRvcHRze3Z9ICkgewogICAgICAgICAgICBwcmludAogICAgICAgICAgICAgICAgIkRpZCBub3Qgc2VuZCBmb3Igc3VydmV5X3JlcXVlc3Qgd2l0aCBpZCAkTGluZS0+e0lEfSBiZWNhdWUgc2VuZCB0aW1lIHdhcyd0IHJlYWNoZWQgeWV0LlxuIjsKICAgICAgICB9CiAgICAgICAgbmV4dCBTVVJWRVlSRVFVRVNUOwogICAgfQoKICAgIGlmICggJG9wdHN7dn0gKSB7CiAgICAgICAgcHJpbnQKICAgICAgICAgICAgIlNlbmRpbmcgc3VydmV5IGZvciBzdXJ2ZXlfcmVxdWVzdCB3aXRoIGlkICRMaW5lLT57SUR9IHRoYXQgYmVsb25ncyB0byBUaWNrZXRJRCAkTGluZS0+e1RpY2tldElEfS5cbiI7CiAgICB9CiAgICBpZiAoICEkb3B0c3tkfSAmJiAkTGluZS0+e0lEfSAmJiAkTGluZS0+e1RpY2tldElEfSApIHsKICAgICAgICAkQ29tbW9uT2JqZWN0e1N1cnZleU9iamVjdH0tPlJlcXVlc3RTZW5kKAogICAgICAgICAgICBUcmlnZ2VyU2VuZFJlcXVlc3RzID0+IDEsCiAgICAgICAgICAgIFN1cnZleVJlcXVlc3RJRCAgICAgPT4gJExpbmUtPntJRH0sCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgPT4gJExpbmUtPntUaWNrZXRJRH0sCiAgICAgICAgKTsKICAgIH0KfQoKZXhpdCAxOwoKMTsK