ITSMCore
1.0.94
OTRS AG
http://otrs.org/
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
Build for OTRS::ITSM 1.1.0 beta4.
Build for OTRS::ITSM 1.1.0 beta3.
Build for OTRS::ITSM 1.1.0 beta2.
Build for OTRS::ITSM 1.1.0 beta1.
Testbuild for OTRS::ITSM 1.1.0 beta1.
The OTRS::ITSM core package.
Das OTRS::ITSM Core Paket.
2.2.6
2.2.x CVS
<br>
WELCOME<br>
<br>
You are about to install the OTRS module ITSMCore.<br>
<br>
<br>
REQUIRED OTRS PACKAGES
<ul>
<li>GeneralCatalog 1.0.94</li>
<li>LinkObject 1.0.94</li>
</ul>
<br>
ATTENTION<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>
WILLKOMMEN<br>
<br>
Sie sind im Begriff das OTRS-Modul ITSMCore zu installieren.<br>
<br>
<br>
BENÖTIGTE OTRS-PAKETE
<ul>
<li>GeneralCatalog 1.0.94</li>
<li>LinkObject 1.0.94</li>
</ul>
<br>
ACHTUNG<br>
<br>
Vergewissern Sie sich, dass ihre Datenbank Pakete mit einer Größe von mehr als 5 MB akzeptiert. Eine MySQL Datenbank akzeptiert beispielsweise standartmäß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>
WELCOME<br>
<br>
You are about to upgrade the OTRS module ITSMCore.<br>
<br>
<br>
REQUIRED OTRS PACKAGES
<ul>
<li>GeneralCatalog 1.0.94</li>
<li>LinkObject 1.0.94</li>
</ul>
<br>
ATTENTION<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>
WILLKOMMEN<br>
<br>
Sie sind im Begriff das OTRS-Modul ITSMCore zu aktualisieren.<br>
<br>
<br>
BENÖTIGTE OTRS-PAKETE
<ul>
<li>GeneralCatalog 1.0.94</li>
<li>LinkObject 1.0.94</li>
</ul>
<br>
ACHTUNG<br>
<br>
Vergewissern Sie sich, dass ihre Datenbank Pakete mit einer Größe von mehr als 5 MB akzeptiert. Eine MySQL Datenbank akzeptiert beispielsweise standartmäß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>
GeneralCatalog
LinkObject2
# change background color of standard theme
my $CssFile = $Self->{ConfigObject}->Get('Home') . "/Kernel/Output/HTML/Standard/css.dtl";
if (!-e $CssFile . ".save" && open (IN, "< $CssFile")) {
my $Content = '';
while (<IN>) {
if ($_ =~ /^body /) {
$_ =~ s/background-color\:\#bbddff\;/background-color\:\#003399\;/;
}
$Content .= $_;
}
close (IN);
if (open (OUT, "> $CssFile")) {
binmode(OUT);
print OUT $Content;
close (OUT);
}
}
# change background color of standard theme
my $CssFile = $Self->{ConfigObject}->Get('Home') . "/Kernel/Output/HTML/Standard/css.dtl";
if (!-e $CssFile . ".save" && open (IN, "< $CssFile")) {
my $Content = '';
while (<IN>) {
if ($_ =~ /^body /) {
$_ =~ s/background-color\:\#bbddff\;/background-color\:\#003399\;/;
}
$Content .= $_;
}
close (IN);
if (open (OUT, "> $CssFile")) {
binmode(OUT);
print OUT $Content;
close (OUT);
}
}
# change background color of standard theme back to original
my $CssFile = $Self->{ConfigObject}->Get('Home') . "/Kernel/Output/HTML/Standard/css.dtl";
if (!-e $CssFile . ".save" && open (IN, "< $CssFile")) {
my $Content = '';
while (<IN>) {
if ($_ =~ /^body /) {
$_ =~ s/background-color\:\#003399\;/background-color\:\#bbddff\;/;
}
$Content .= $_;
}
close (IN);
if (open (OUT, "> $CssFile")) {
binmode(OUT);
print OUT $Content;
close (OUT);
}
}
# change background color of standard theme
my $CssFile = $Self->{ConfigObject}->Get('Home') . "/Kernel/Output/HTML/Standard/css.dtl";
if (!-e $CssFile . ".save" && open (IN, "< $CssFile")) {
my $Content = '';
while (<IN>) {
if ($_ =~ /^body /) {
$_ =~ s/background-color\:\#bbddff\;/background-color\:\#003399\;/;
}
$Content .= $_;
}
close (IN);
if (open (OUT, "> $CssFile")) {
binmode(OUT);
print OUT $Content;
close (OUT);
}
}
2008-04-14 09:36:20
opms.otrs.com
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjEuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxDVlM+JElkOiBGcmFtZXdvcmtJVFNNQ29yZS54bWwsdiAxLjE1IDIwMDgvMDQvMTIgMTQ6MzE6MzcgbWggRXhwICQ8L0NWUz4KICAgIDxDVlM+JE9sZElkOiBGcmFtZXdvcmsueG1sLHYgMS4xNDkuMi4xIDIwMDgvMDEvMTMgMjI6MDE6MjUgbWFydGluIEV4cCAkPC9DVlM+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQcm9kdWN0TmFtZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPlRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IGlzIHNob3duIGluIHRoZSBmcm9udGVuZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJkZSI+SW0gV2ViRnJvbnRlbmQgYW5nZXplaWd0ZXIgTmFtZSBkZXIgU29mdHdhcmUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+T1RSUzo6SVRTTSAxLjEuMCBCZXRhIDQ8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQYWNrYWdlOjpSZXBvc2l0b3J5TGlzdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPkxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcyAoZm9yIGV4YW1wbGUgeW91IGFsc28gY2FuIHVzZSBvdGhlciBpbnN0YWxsYXRpb25zIGFzIHJlcG9zaXRvcml5IGJ5IHVzaW5nIEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290cnMvcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5JmFtcDtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIpLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5MaXN0ZSBkZXIgenVyIFZlcmb8Z3VuZyBzdGVoZW5kZW4gT25saW5lLVF1ZWxsZW4gKGVzIGtvZW5uZW4gei4gQi4gYXVjaCBhbmRlcmUgSW5zdGFsbGF0aW9uZW4gYWxzIE9ubGluZS1RdWVsbGVuIHZlcndlbmRldCB3ZXJkZW4gbWl0IGRlciBWZXJ3ZW5kdW5nIHZvbiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdHJzL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeSZhbXA7RmlsZT0iIGFuZCBDb250ZW50PSJFaW4gTmFtZSIpLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OlBhY2thZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaHR0cDovL2Z0cC5vdHJzLm9yZy9wdWIvb3Rycy9pdHNtL3BhY2thZ2VzLyI+Wy0tT1RSUzo6SVRTTSBNYXN0ZXItLV0gaHR0cDovL2Z0cC5vdHJzLm9yZy88L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjEuMCIgaW5pdD0iQ29uZmlnIj4KICAgIDxDVlM+JElkOiBJVFNNQ29yZS54bWwsdiAxLjYgMjAwOC8wMi8yMSAxMjozMzo0MiBtaCBFeHAgJDwvQ1ZTPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FkbWluVGlja2V0UHJpb3JpdHkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5UaWNrZXRQcmlvcml0eSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5Gcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXIgQWRtaW5UaWNrZXRQcmlvcml0eSBLb25maWd1cmF0aW9uIGltIEFkbWluLUJlcmVpY2guPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGlja2V0PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+YWRtaW48L0dyb3VwPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkFkbWluPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5Qcmlvcml0eTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5BZG1pbjwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJNb2R1bGU+CiAgICAgICAgICAgICAgICAgICAgPE1vZHVsZT5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyTW9kdWxlQWRtaW48L01vZHVsZT4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5Qcmlvcml0eTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+QmxvY2szPC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8UHJpbz40MjA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhck1vZHVsZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5JVFNNQ0lQQWxsb2NhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJkZSI+RnJvbnRlbmRtb2R1bC1SZWdpc3RyYXRpb24gZGVyIEFkbWluSVRTTUNJUEFsbG9jYXRlIEtvbmZpZ3VyYXRpb24gaW0gQWRtaW4tQmVyZWljaC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+YWRtaW48L0dyb3VwPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkFkbWluPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5Dcml0aWNhbGl0eSAmbHQ7LSZndDsgSW1wYWN0ICZsdDstJmd0OyBQcmlvcml0eTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5BZG1pbjwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJNb2R1bGU+CiAgICAgICAgICAgICAgICAgICAgPE1vZHVsZT5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyTW9kdWxlQWRtaW48L01vZHVsZT4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5Dcml0aWNhbGl0eSAmbHQ7LSZndDsgSW1wYWN0ICZsdDstJmd0OyBQcmlvcml0eTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+QmxvY2szPC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8UHJpbz40MzA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhck1vZHVsZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0Mjo6VHlwZSMjI1JlbGV2YW50VG8iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5MaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZGUiPkxpbmsgVHlwLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3QyOjpUeXBlczwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOb3JtYWxOYW1lIj5SZWxldmFudCB0bzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmV2ZXJzZU5hbWUiPlJlbGV2YW50IHRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDI6OlR5cGUjIyNJbmNsdWRlcyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPkxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJkZSI+TGluayBUeXAuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDI6OlR5cGVzPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5vcm1hbE5hbWUiPkluY2x1ZGVzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXZlcnNlTmFtZSI+UGFydCBvZjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3QyOjpUeXBlIyMjRGVwZW5kc09uIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+TGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5MaW5rIFR5cC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0Mjo6VHlwZXM8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTm9ybWFsTmFtZSI+RGVwZW5kcyBvbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmV2ZXJzZU5hbWUiPlJlcXVpcmVkIGZvcjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3QyOjpUeXBlIyMjQ29ubmVjdGVkVG8iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5MaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZGUiPkxpbmsgVHlwLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3QyOjpUeXBlczwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOb3JtYWxOYW1lIj5Db25uZWN0ZWQgdG88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJldmVyc2VOYW1lIj5Db25uZWN0ZWQgdG88L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0Mjo6VHlwZSMjI0FsdGVybmF0aXZlVG8iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5MaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZGUiPkxpbmsgVHlwLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3QyOjpUeXBlczwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOb3JtYWxOYW1lIj5BbHRlcm5hdGl2ZSB0bzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmV2ZXJzZU5hbWUiPkFsdGVybmF0aXZlIHRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTUNvcmU6OkluY2lkZW50TGlua1R5cGUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5TZXQgdGhlIHR5cGUgb2YgbGluayB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZGUiPkxlZ3QgZGVuIExpbmt0eXAgZmVzdCwgZGVyIHp1ciBCZXJlY2hudW5nIGRlcyBWb3JmYWxsc3RhdHVzIHZlcndlbmRldCB3aXJkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU008L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpJVFNNQ29yZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+RGVwZW5kc09uPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgo8L290cnNfY29uZmlnPg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9iZ19JVFNNQ29yZS5wbSAtIHRoZSBidWxnYXJpYW4gdHJhbnNsYXRpb24gb2YgSVRTTUNvcmUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IGJnX0lUU01Db3JlLnBtLHYgMS42IDIwMDgvMDMvMTkgMTU6MTk6NDAgbWggRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpiZ19JVFNNQ29yZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OKTsKJFZFUlNJT04gPSBxdygkUmV2aXNpb246IDEuNiAkKSBbMV07CgpzdWIgRGF0YSB7CiAgICBteSAoJFNlbGYpID0gQF87CiAgICBteSAkTGFuZyA9ICRTZWxmLT57VHJhbnNsYXRpb259OwoKICAgIHJldHVybiBpZiByZWYgJExhbmcgbmUgJ0hBU0gnOwoKICAgICRMYW5nLT57J1ByaW9yaXR5IE1hbmFnZW1lbnQnfSAgICAgICAgICAgICAgICAgPSAn0+/w4OLr5e3o5SDt4CDv8Oju8Ojy5fLo8uUnOwogICAgJExhbmctPnsnQWRkIGEgbmV3IFByaW9yaXR5Lid9ICAgICAgICAgICAgICAgICA9ICfE7uHg4ugg7e7iIO/w6O7w6PLl8i4nOwogICAgJExhbmctPnsnQWRkIFByaW9yaXR5J30gICAgICAgICAgICAgICAgICAgICAgICA9ICfE7uHg4ugg7/Do7vDo8uXyJzsKICAgICRMYW5nLT57J0NyaXRpY2FsaXR5J30gICAgICAgICAgICAgICAgICAgICAgICAgPSAnyvDo8uj37e7x8ic7CiAgICAkTGFuZy0+eydJbXBhY3QnfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ8Lr6P/t6OUnOwogICAgJExhbmctPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICfK8Ojy6Pft7vHyPC0+wuvo/+3o5TwtPs/w6O7y6PLl8ic7CiAgICAkTGFuZy0+eydhbGxvY2F0ZSd9ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ+7v8OXk5evl7Sc7CiAgICAkTGFuZy0+eydSZWxldmFudCB0byd9ICAgICAgICAgICAgICAgICAgICAgICAgID0gJ9H67vLi5fLl7SDxJzsKICAgICRMYW5nLT57J0luY2x1ZGVzJ30gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnwurr/vfl7egnOwogICAgJExhbmctPnsnUGFydCBvZid9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICfX4PHyIO7yJzsKICAgICRMYW5nLT57J0RlcGVuZHMgb24nfSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnx+Di6PHoIO7yJzsKICAgICRMYW5nLT57J1JlcXVpcmVkIGZvcid9ICAgICAgICAgICAgICAgICAgICAgICAgPSAnzeXu4fXu5OjsIOfgJzsKICAgICRMYW5nLT57J0Nvbm5lY3RlZCB0byd9ICAgICAgICAgICAgICAgICAgICAgICAgPSAn0eL68Ofg7SDxJzsKICAgICRMYW5nLT57J0FsdGVybmF0aXZlIHRvJ30gICAgICAgICAgICAgICAgICAgICAgPSAnwOvy5fDt4PLo4uXtIO3gJzsKCiAgICByZXR1cm4gMTsKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9jel9JVFNNQ29yZS5wbSAtIHRoZSBjemVjaCB0cmFuc2xhdGlvbiBvZiBJVFNNQ29yZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDA4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogY3pfSVRTTUNvcmUucG0sdiAxLjUgMjAwOC8wMy8xOSAxNToxOTo0MCBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmN6X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9IHF3KCRSZXZpc2lvbjogMS41ICQpIFsxXTsKCnN1YiBEYXRhIHsKICAgIG15ICgkU2VsZikgPSBAXzsKICAgIG15ICRMYW5nID0gJFNlbGYtPntUcmFuc2xhdGlvbn07CgogICAgcmV0dXJuIGlmIHJlZiAkTGFuZyBuZSAnSEFTSCc7CgogICAgJExhbmctPnsnUHJpb3JpdHkgTWFuYWdlbWVudCd9ICAgICAgICAgICAgICAgICA9ICfFmMOtemVuw60gcHJpb3JpdCc7CiAgICAkTGFuZy0+eydBZGQgYSBuZXcgUHJpb3JpdHkuJ30gICAgICAgICAgICAgICAgID0gJ0RvZGF0IG5vdm91IHByaW9yaXRvdSc7CiAgICAkTGFuZy0+eydBZGQgUHJpb3JpdHknfSAgICAgICAgICAgICAgICAgICAgICAgID0gJ0RvZGF0IHByaW9yaXRvdSc7CiAgICAkTGFuZy0+eydDcml0aWNhbGl0eSd9ICAgICAgICAgICAgICAgICAgICAgICAgID0gJ0tyaXRpxI1ub3N0JzsKICAgICRMYW5nLT57J0ltcGFjdCd9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnVmxpdic7CiAgICAkTGFuZy0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ0tyaXRpxI1ub3N0PC0+VmxpdjwtPlByaW9yaXRhJzsKICAgICRMYW5nLT57J2FsbG9jYXRlJ30gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnVXLEjWVuJzsKICAgICRMYW5nLT57J1JlbGV2YW50IHRvJ30gICAgICAgICAgICAgICAgICAgICAgICAgPSAnUmVsZXZhbnRuw60nOwogICAgJExhbmctPnsnSW5jbHVkZXMnfSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICd6YWhybnV0w6knOwogICAgJExhbmctPnsnUGFydCBvZid9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICfEjcOhc3QnOwogICAgJExhbmctPnsnRGVwZW5kcyBvbid9ICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdaYWxlxb7DrSc7CiAgICAkTGFuZy0+eydSZXF1aXJlZCBmb3InfSAgICAgICAgICAgICAgICAgICAgICAgID0gJyBQb8W+YWRvdmFuw70nOwogICAgJExhbmctPnsnQ29ubmVjdGVkIHRvJ30gICAgICAgICAgICAgICAgICAgICAgICA9ICdTcG9qZW4gcyc7CiAgICAkTGFuZy0+eydBbHRlcm5hdGl2ZSB0byd9ICAgICAgICAgICAgICAgICAgICAgID0gJ0FsdGVybmF0aXZuw60nOwoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kZV9JVFNNQ29yZS5wbSAtIHRoZSBnZXJtYW4gdHJhbnNsYXRpb24gb2YgSVRTTUNvcmUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IGRlX0lUU01Db3JlLnBtLHYgMS4xMCAyMDA4LzAzLzE5IDE1OjE5OjQwIG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGVfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjEwICQpIFsxXTsKCnN1YiBEYXRhIHsKICAgIG15ICgkU2VsZikgPSBAXzsKICAgIG15ICRMYW5nID0gJFNlbGYtPntUcmFuc2xhdGlvbn07CgogICAgcmV0dXJuIGlmIHJlZiAkTGFuZyBuZSAnSEFTSCc7CgogICAgJExhbmctPnsnUHJpb3JpdHkgTWFuYWdlbWVudCd9ICAgICAgICAgICAgICAgICA9ICdQcmlvcml05HQgVmVyd2FsdHVuZyc7CiAgICAkTGFuZy0+eydBZGQgYSBuZXcgUHJpb3JpdHkuJ30gICAgICAgICAgICAgICAgID0gJ0VpbmUgbmV1ZSBQcmlvcml05HQgaGluenVm/Gdlbi4nOwogICAgJExhbmctPnsnQWRkIFByaW9yaXR5J30gICAgICAgICAgICAgICAgICAgICAgICA9ICdQcmlvcml05HQgaGluenVm/Gdlbic7CiAgICAkTGFuZy0+eydDcml0aWNhbGl0eSd9ICAgICAgICAgICAgICAgICAgICAgICAgID0gJ0tyaXRpa2FsaXTkdCc7CiAgICAkTGFuZy0+eydJbXBhY3QnfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ0F1c3dpcmt1bmcnOwogICAgJExhbmctPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLcml0aWthbGl05HQgPC0+IEF1c3dpcmt1bmcgPC0+IFByaW9yaXTkdCc7CiAgICAkTGFuZy0+eydhbGxvY2F0ZSd9ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ3p1b3JkbmVuJzsKICAgICRMYW5nLT57J1JlbGV2YW50IHRvJ30gICAgICAgICAgICAgICAgICAgICAgICAgPSAnUmVsZXZhbnQgZvxyJzsKICAgICRMYW5nLT57J0luY2x1ZGVzJ30gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnQmVpbmhhbHRldCc7CiAgICAkTGFuZy0+eydQYXJ0IG9mJ30gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ1RlaWwgdm9uJzsKICAgICRMYW5nLT57J0RlcGVuZHMgb24nfSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnSORuZ3QgYWIgdm9uJzsKICAgICRMYW5nLT57J1JlcXVpcmVkIGZvcid9ICAgICAgICAgICAgICAgICAgICAgICAgPSAnQmVu9nRpZ3QgZvxyJzsKICAgICRMYW5nLT57J0Nvbm5lY3RlZCB0byd9ICAgICAgICAgICAgICAgICAgICAgICAgPSAnVmVyYnVuZGVuIG1pdCc7CiAgICAkTGFuZy0+eydBbHRlcm5hdGl2ZSB0byd9ICAgICAgICAgICAgICAgICAgICAgID0gJ0FsdGVybmF0aXYgenUnOwoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtIC0gYWRtaW4gZnJvbnRlbmQgb2YgY3JpdGljYWxpdHksIGltcGFjdCBhbmQgcHJpb3JpdHkKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IEFkbWluSVRTTUNJUEFsbG9jYXRlLnBtLHYgMS4xMCAyMDA4LzAzLzA2IDE3OjAyOjI0IG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pbklUU01DSVBBbGxvY2F0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7CnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5Owp1c2UgS2VybmVsOjpTeXN0ZW06OlZhbGlkOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9IHF3KCRSZXZpc2lvbjogMS4xMCAkKSBbMV07CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhDb25maWdPYmplY3QgUGFyYW1PYmplY3QgTG9nT2JqZWN0IExheW91dE9iamVjdCkpIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CiAgICAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZy0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e0NJUEFsbG9jYXRlT2JqZWN0fSAgICA9IEtlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGUtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntQcmlvcml0eU9iamVjdH0gICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHktPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntWYWxpZE9iamVjdH0gICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQtPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY3JpdGljYWxpdHksIGltcGFjdCBhbmQgcHJpb3JpdHkgYWxsb2NhdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NJUEFsbG9jYXRlJyApIHsKCiAgICAgICAgIyBnZXQgb3B0aW9uIGxpc3RzCiAgICAgICAgbXkgJU9iamVjdE9wdGlvbjsKICAgICAgICAkT2JqZWN0T3B0aW9ue0NyaXRpY2FsaXR5TGlzdH0gPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpDcml0aWNhbGl0eScsCiAgICAgICAgKTsKICAgICAgICAkT2JqZWN0T3B0aW9ue0ltcGFjdExpc3R9ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW1wYWN0JywKICAgICAgICApOwogICAgICAgIG15ICVPcHRpb25Qcmlvcml0eUxpc3QgPSAkU2VsZi0+e1ByaW9yaXR5T2JqZWN0fS0+UHJpb3JpdHlMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgICAgICRPYmplY3RPcHRpb257UHJpb3JpdHlMaXN0fSA9IFwlT3B0aW9uUHJpb3JpdHlMaXN0OwoKICAgICAgICAjIGdldCBhbGwgUHJpb3JpdHlJRHMgb2YgdGhlIG1hdHJpeAogICAgICAgIG15ICRBbGxvY2F0ZURhdGE7CiAgICAgICAgZm9yIG15ICRJbXBhY3RJRCAoIGtleXMgJXsgJE9iamVjdE9wdGlvbntJbXBhY3RMaXN0fSB9ICkgewoKICAgICAgICAgICAgQ1JJVElDQUxJVFlJRDoKICAgICAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eUlEICgga2V5cyAleyAkT2JqZWN0T3B0aW9ue0NyaXRpY2FsaXR5TGlzdH0gfSApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBmb3JtIHBhcmFtCiAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHlJRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSgKICAgICAgICAgICAgICAgICAgICBQYXJhbSA9PiAiUHJpb3JpdHlJRCIgLiAkSW1wYWN0SUQgLiAnLScgLiAkQ3JpdGljYWxpdHlJRAogICAgICAgICAgICAgICAgKSB8fCAnJzsKCiAgICAgICAgICAgICAgICBuZXh0IENSSVRJQ0FMSVRZSUQgaWYgISRQcmlvcml0eUlEOwoKICAgICAgICAgICAgICAgICRBbGxvY2F0ZURhdGEtPnskSW1wYWN0SUR9LT57JENyaXRpY2FsaXR5SUR9ID0gJFByaW9yaXR5SUQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIGFsbG9jYXRpb25zCiAgICAgICAgJFNlbGYtPntDSVBBbGxvY2F0ZU9iamVjdH0tPkFsbG9jYXRlVXBkYXRlKAogICAgICAgICAgICBBbGxvY2F0ZURhdGEgPT4gJEFsbG9jYXRlRGF0YSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2UgewoKICAgICAgICAjIGdldCBvcHRpb24gbGlzdHMKICAgICAgICBteSAlT2JqZWN0T3B0aW9uOwogICAgICAgICRPYmplY3RPcHRpb257Q3JpdGljYWxpdHlMaXN0fSA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkNyaXRpY2FsaXR5JywKICAgICAgICApOwogICAgICAgICRPYmplY3RPcHRpb257SW1wYWN0TGlzdH0gPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpJbXBhY3QnLAogICAgICAgICk7CiAgICAgICAgbXkgJU9wdGlvblByaW9yaXR5TGlzdCA9ICRTZWxmLT57UHJpb3JpdHlPYmplY3R9LT5Qcmlvcml0eUxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJE9iamVjdE9wdGlvbntQcmlvcml0eUxpc3R9ID0gXCVPcHRpb25Qcmlvcml0eUxpc3Q7CgogICAgICAgICMgZ2V0IGFsbG9jYXRpb24gZGF0YQogICAgICAgIG15ICRBbGxvY2F0ZURhdGEgPSAkU2VsZi0+e0NJUEFsbG9jYXRlT2JqZWN0fS0+QWxsb2NhdGVMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSAkQWxsb2NhdGVNYXRyaXg7CiAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlswXS0+e0NsYXNzfSA9ICdEZXNjcmlwdGlvbic7CgogICAgICAgICMgZ2VuZXJhdGUgdGFibGUgZGVzY3JpcHRpb24gKEltcGFjdCkKICAgICAgICBteSAkQ291bnRlcjEgPSAxOwogICAgICAgIGZvciBteSAkSW1wYWN0ICgKICAgICAgICAgICAgc29ydCB7ICRPYmplY3RPcHRpb257SW1wYWN0TGlzdH0tPnskYX0gY21wICRPYmplY3RPcHRpb257SW1wYWN0TGlzdH0tPnskYn0gfQogICAgICAgICAgICBrZXlzICV7ICRPYmplY3RPcHRpb257SW1wYWN0TGlzdH0gfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskQ291bnRlcjFdLT5bMF0tPntPYmplY3RUeXBlfSAgID0gJ0ltcGFjdCc7CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRDb3VudGVyMV0tPlswXS0+e0ltcGFjdEtleX0gICAgPSAkSW1wYWN0OwogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskQ291bnRlcjFdLT5bMF0tPntPYmplY3RPcHRpb259ID0gJE9iamVjdE9wdGlvbntJbXBhY3RMaXN0fXskSW1wYWN0fTsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJENvdW50ZXIxXS0+WzBdLT57Q2xhc3N9ICAgICAgICA9ICdEZXNjcmlwdGlvbic7CiAgICAgICAgICAgICRDb3VudGVyMSsrOwogICAgICAgIH0KCiAgICAgICAgIyBnZW5lcmF0ZSB0YWJsZSBkZXNjcmlwdGlvbiAoQ3JpdGljYWxpdHkpCiAgICAgICAgbXkgJENvdW50ZXIyID0gMTsKICAgICAgICBmb3IgbXkgJENyaXRpY2FsaXR5ICgKICAgICAgICAgICAgc29ydCB7ICRPYmplY3RPcHRpb257Q3JpdGljYWxpdHlMaXN0fS0+eyRhfSBjbXAgJE9iamVjdE9wdGlvbntDcml0aWNhbGl0eUxpc3R9LT57JGJ9IH0KICAgICAgICAgICAga2V5cyAleyAkT2JqZWN0T3B0aW9ue0NyaXRpY2FsaXR5TGlzdH0gfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlswXS0+WyRDb3VudGVyMl0tPntPYmplY3RUeXBlfSAgICAgPSAnQ3JpdGljYWxpdHknOwogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlswXS0+WyRDb3VudGVyMl0tPntDcml0aWNhbGl0eUtleX0gPSAkQ3JpdGljYWxpdHk7CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvdW50ZXIyXS0+e09iamVjdE9wdGlvbn0KICAgICAgICAgICAgICAgID0gJE9iamVjdE9wdGlvbntDcml0aWNhbGl0eUxpc3R9eyRDcml0aWNhbGl0eX07CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvdW50ZXIyXS0+e0NsYXNzfSA9ICdEZXNjcmlwdGlvbic7CiAgICAgICAgICAgICRDb3VudGVyMisrOwogICAgICAgIH0KCiAgICAgICAgIyBnZW5lcmF0ZSBjb250ZW50CiAgICAgICAgZm9yIG15ICRSb3cgKCAxIC4uICggJENvdW50ZXIxIC0gMSApICkgewogICAgICAgICAgICBmb3IgbXkgJENvbHVtbiAoIDEgLi4gKCAkQ291bnRlcjIgLSAxICkgKSB7CgogICAgICAgICAgICAgICAgIyBleHRyYWN0IGtleXMKICAgICAgICAgICAgICAgIG15ICRJbXBhY3RLZXkgICAgICA9ICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bMF0tPntJbXBhY3RLZXl9OwogICAgICAgICAgICAgICAgbXkgJENyaXRpY2FsaXR5S2V5ID0gJEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ29sdW1uXS0+e0NyaXRpY2FsaXR5S2V5fTsKCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBvcHRpb24gc3RyaW5nCiAgICAgICAgICAgICAgICBteSAkT3B0aW9uU3RyZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnUHJpb3JpdHlJRCcgLiAkSW1wYWN0S2V5IC4gJy0nIC4gJENyaXRpY2FsaXR5S2V5LAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgPT4gJE9iamVjdE9wdGlvbntQcmlvcml0eUxpc3R9LAogICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJEFsbG9jYXRlRGF0YS0+eyRJbXBhY3RLZXl9eyRDcml0aWNhbGl0eUtleX0gfHwgJycsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0tPntPcHRpb25TdHJnfSA9ICRPcHRpb25TdHJnOwogICAgICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJFJvd10tPlskQ29sdW1uXS0+e0NsYXNzfSAgICAgID0gJ0NvbnRlbnQnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBhbGxvY2F0aW9uIG1hdHJpeAogICAgICAgIGZvciBteSAkUm93UmVmICggQHskQWxsb2NhdGVNYXRyaXh9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQ0lQQWxsb2NhdGVSb3cnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgZm9yIG15ICRDZWxsICggQHskUm93UmVmfSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQ0lQQWxsb2NhdGVSb3dDb2x1bW4nIC4gJENlbGwtPntDbGFzc30sCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkQ2VsbCwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGhlYWRlciBhbmQgbmF2YmFyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluSVRTTUNJUEFsbG9jYXRlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgoxOwo=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluVGlja2V0UHJpb3JpdHkucG0gLSBhZG1pbiBmcm9udGVuZCBvZiB0aWNrZXQgcHJpb3JpdHkKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IEFkbWluVGlja2V0UHJpb3JpdHkucG0sdiAxLjEyIDIwMDgvMDMvMDYgMTc6MDI6MjQgbWggRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluVGlja2V0UHJpb3JpdHk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5Owp1c2UgS2VybmVsOjpTeXN0ZW06OlZhbGlkOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9IHF3KCRSZXZpc2lvbjogMS4xMiAkKSBbMV07CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhDb25maWdPYmplY3QgUGFyYW1PYmplY3QgTG9nT2JqZWN0IExheW91dE9iamVjdCkpIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CiAgICAkU2VsZi0+e1ByaW9yaXR5T2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpQcmlvcml0eS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1ZhbGlkT2JqZWN0fSAgICA9IEtlcm5lbDo6U3lzdGVtOjpWYWxpZC0+bmV3KCVQYXJhbSk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBwcmlvcml0eSBlZGl0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnUHJpb3JpdHlFZGl0JyApIHsKICAgICAgICBteSAlUHJpb3JpdHlEYXRhOwoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICAkUHJpb3JpdHlEYXRhe1ByaW9yaXR5SUR9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiUHJpb3JpdHlJRCIgKTsKICAgICAgICBpZiAoICRQcmlvcml0eURhdGF7UHJpb3JpdHlJRH0gbmUgJ05FVycgKSB7CgogICAgICAgICAgICAjIGdldCBwcmlvcml0eQogICAgICAgICAgICAlUHJpb3JpdHlEYXRhID0gJFNlbGYtPntQcmlvcml0eU9iamVjdH0tPlByaW9yaXR5R2V0KAogICAgICAgICAgICAgICAgUHJpb3JpdHlJRCA9PiAkUHJpb3JpdHlEYXRhe1ByaW9yaXR5SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQcmlvcml0eURhdGF7UHJpb3JpdHlJRH0gPSAkUHJpb3JpdHlEYXRhe0lEfTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdlbmVyYXRlIFZhbGlkT3B0aW9uU3RyZwogICAgICAgIG15ICVWYWxpZExpc3QgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRMaXN0KCk7CiAgICAgICAgJFByaW9yaXR5RGF0YXtWYWxpZE9wdGlvblN0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnVmFsaWRJRCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJFByaW9yaXR5RGF0YXtWYWxpZElEfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBzZXJ2aWNlIGVkaXQKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQcmlvcml0eUVkaXQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICVQcmlvcml0eURhdGEsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluVGlja2V0UHJpb3JpdHknLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBwcmlvcml0eSBzYXZlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnUHJpb3JpdHlTYXZlJyApIHsKICAgICAgICBteSAlUHJpb3JpdHlEYXRhOwoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBmb3IgbXkgJEZvcm1QYXJhbSAocXcoUHJpb3JpdHlJRCBOYW1lIFZhbGlkSUQpKSB7CiAgICAgICAgICAgICRQcmlvcml0eURhdGF7JEZvcm1QYXJhbX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRGb3JtUGFyYW0gKSB8fCAnJzsKICAgICAgICB9CiAgICAgICAgJFByaW9yaXR5RGF0YXtJRH0gPSAkUHJpb3JpdHlEYXRhe1ByaW9yaXR5SUR9OwoKICAgICAgICAjIHNhdmUgdG8gZGF0YWJhc2UKICAgICAgICBteSAkU3VjY2VzczsKICAgICAgICBpZiAoICRQcmlvcml0eURhdGF7UHJpb3JpdHlJRH0gZXEgJ05FVycgKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJFNlbGYtPntQcmlvcml0eU9iamVjdH0tPlByaW9yaXR5QWRkKAogICAgICAgICAgICAgICAgJVByaW9yaXR5RGF0YSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU3VjY2VzcyA9ICRTZWxmLT57UHJpb3JpdHlPYmplY3R9LT5Qcmlvcml0eVVwZGF0ZSgKICAgICAgICAgICAgICAgICVQcmlvcml0eURhdGEsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKSBpZiAhJFN1Y2Nlc3M7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2UgewoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcgcmVzdWx0CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgcHJpb3JpdHkgbGlzdAogICAgICAgIG15ICVQcmlvcml0eUxpc3QgPSAkU2VsZi0+e1ByaW9yaXR5T2JqZWN0fS0+UHJpb3JpdHlMaXN0KAogICAgICAgICAgICBWYWxpZCAgPT4gMCwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCB2YWxpZCBsaXN0CiAgICAgICAgbXkgJVZhbGlkTGlzdCA9ICRTZWxmLT57VmFsaWRPYmplY3R9LT5WYWxpZExpc3QoKTsKCiAgICAgICAgbXkgJENzc0NsYXNzID0gJyc7CiAgICAgICAgZm9yIG15ICRQcmlvcml0eUlEICggc29ydCB7ICRQcmlvcml0eUxpc3R7JGF9IGNtcCAkUHJpb3JpdHlMaXN0eyRifSB9IGtleXMgJVByaW9yaXR5TGlzdCApIHsKCiAgICAgICAgICAgICMgc2V0IG91dHB1dCBvYmplY3QKICAgICAgICAgICAgJENzc0NsYXNzID0gJENzc0NsYXNzIGVxICdzZWFyY2hhY3RpdmUnID8gJ3NlYXJjaHBhc3NpdmUnIDogJ3NlYXJjaGFjdGl2ZSc7CgogICAgICAgICAgICAjIGdldCBwcmlvcml0eSBkYXRhCiAgICAgICAgICAgIG15ICVQcmlvcml0eURhdGEgPSAkU2VsZi0+e1ByaW9yaXR5T2JqZWN0fS0+UHJpb3JpdHlHZXQoCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEID0+ICRQcmlvcml0eUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0Um93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQcmlvcml0eURhdGEsCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHlJRCA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgICAgICBDc3NDbGFzcyAgID0+ICRDc3NDbGFzcywKICAgICAgICAgICAgICAgICAgICBWYWxpZCAgICAgID0+ICRWYWxpZExpc3R7ICRQcmlvcml0eURhdGF7VmFsaWRJRH0gfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblRpY2tldFByaW9yaXR5JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgoxOwo=
IyAtLQojIEFkbWluSVRTTUNJUEFsbG9jYXRlLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgQWRtaW5JVFNNQ0lQQWxsb2NhdGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IEFkbWluSVRTTUNJUEFsbG9jYXRlLmR0bCx2IDEuMyAyMDA4LzAxLzI4IDE1OjA0OjMwIG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC50eHQuCiMgLS0KCjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiPgogIDx0cj4KICAgIDx0ZCBjb2xzcGFuPSIyIiBjbGFzcz0ibWFpbmhlYWQiPgogICAgICAkRW52eyJCb3gwIn0kVGV4dHsiQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHkifSRFbnZ7IkJveDEifQogICAgPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCBjbGFzcz0ibWFpbmJvZHkiIGFsaWduPSJjZW50ZXIiPgogICAgICA8YnI+CiAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkNJUEFsbG9jYXRlIj4KICAgICAgICA8dGFibGUgd2lkdGg9IjgwMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0Ij4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50aGVhZCI+CiAgICAgICAgICAgICAgJFRleHR7IlByaW9yaXR5In0gJFRleHR7ImFsbG9jYXRlIn06CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRib2R5Ij4KICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiIHdpZHRoPSIxMDAlIj4KPCEtLSBkdGw6YmxvY2s6Q0lQQWxsb2NhdGVSb3cgLS0+CiAgICAgICAgICAgICAgICA8dHI+CjwhLS0gZHRsOmJsb2NrOkNJUEFsbG9jYXRlUm93Q29sdW1uRGVzY3JpcHRpb24gLS0+CiAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIj4KICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5IiBhbGlnbj0iY2VudGVyIj4kVGV4dHsiJFFEYXRheyJPYmplY3RUeXBlIn0ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiIGFsaWduPSJjZW50ZXIiPiRUZXh0eyIkUURhdGF7Ik9iamVjdE9wdGlvbiJ9In08L3RkPgogICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpDSVBBbGxvY2F0ZVJvd0NvbHVtbkRlc2NyaXB0aW9uIC0tPgo8IS0tIGR0bDpibG9jazpDSVBBbGxvY2F0ZVJvd0NvbHVtbkNvbnRlbnQgLS0+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIiBhbGlnbj0iY2VudGVyIj4kRGF0YXsiT3B0aW9uU3RyZyJ9PC90ZD4KPCEtLSBkdGw6YmxvY2s6Q0lQQWxsb2NhdGVSb3dDb2x1bW5Db250ZW50IC0tPgogICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6Q0lQQWxsb2NhdGVSb3cgLS0+CiAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGZvb3RlciI+CiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJidXR0b24iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTYXZlIn0iPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICA8L3RhYmxlPgogICAgICA8L2Zvcm0+CiAgICAgIDxicj4KICAgIDwvdGQ+CiAgPC90cj4KPC90YWJsZT4K
IyAtLQojIEFkbWluVGlja2V0UHJpb3JpdHkuZHRsIC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBBZG1pblRpY2tldFByaW9yaXR5CiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDggT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBBZG1pblRpY2tldFByaW9yaXR5LmR0bCx2IDEuNSAyMDA4LzAxLzI4IDE1OjA0OjMwIG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC50eHQuCiMgLS0KCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3IC0tPgo8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIj4KICA8dHI+CiAgICA8dGQgY29sc3Bhbj0iMiIgY2xhc3M9Im1haW5oZWFkIj4KICAgICAgJEVudnsiQm94MCJ9JFRleHR7IlByaW9yaXR5IE1hbmFnZW1lbnQifSRFbnZ7IkJveDEifQogICAgPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCB3aWR0aD0iMzAlIiBjbGFzcz0ibWFpbmJvZHkiPgogICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9ImdldCI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlByaW9yaXR5RWRpdCI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUHJpb3JpdHlJRCIgdmFsdWU9Ik5FVyI+CiAgICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRoZWFkIj4kVGV4dHsiQWRkIFByaW9yaXR5In06PC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGJvZHkiPiRUZXh0eyJBZGQgYSBuZXcgUHJpb3JpdHkuIn08L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50Zm9vdGVyIj4KICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImJ1dHRvbiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IkFkZCJ9Ij4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90YWJsZT4KICAgICAgPC9mb3JtPgogICAgPC90ZD4KICAgIDx0ZCB3aWR0aD0iNzAlIiBjbGFzcz0ibWFpbmJvZHkiPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3QgLS0+CiAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0Ij4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRoZWFkIj4kVGV4dHsiTGlzdCJ9OjwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRib2R5Ij4KICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMyI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5IiB3aWR0aD0iNjAlIj4kVGV4dHsiUHJpb3JpdHkifTwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciIgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJ2YWxpZCJ9LyRUZXh0eyJpbnZhbGlkIn08L3RkPgogICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TGlzdFJvdyAtLT4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IiRRRGF0YXsiQ3NzQ2xhc3MifSI+CiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn0mU3ViYWN0aW9uPVByaW9yaXR5RWRpdCZQcmlvcml0eUlEPSRRRGF0YXsiUHJpb3JpdHlJRCJ9Ij4KICAgICAgICAgICAgICAgICAgJFFEYXRheyJOYW1lIn0KICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiBjbGFzcz0iJFFEYXRheyJDc3NDbGFzcyJ9Ij4KICAgICAgICAgICAgICAgICAgJFRleHR7IiRRRGF0YXsiVmFsaWQifSJ9CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TGlzdFJvdyAtLT4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRmb290ZXIiPgogICAgICAgICAgICAmbmJzcDsKICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgPC90YWJsZT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdMaXN0IC0tPgo8IS0tIGR0bDpibG9jazpQcmlvcml0eUVkaXQgLS0+CiAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0iZ2V0Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iUHJpb3JpdHlTYXZlIj4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJQcmlvcml0eUlEIiB2YWx1ZT0iJFFEYXRheyJQcmlvcml0eUlEIn0iPgogICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0Ij4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50aGVhZCI+JFRleHR7IkVkaXQifTo8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50Ym9keSI+CiAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiUHJpb3JpdHkifTogPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiB2YWx1ZT0iJFFEYXRheyJOYW1lIn0iIHNpemU9IjQ1IiBtYXhsZW5ndGg9IjIwMCI+CiAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJWYWxpZCJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JERhdGF7IlZhbGlkT3B0aW9uU3RyZyJ9PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGZvb3RlciI+CiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJidXR0b24iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTdWJtaXQifSI+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CiAgICAgIDwvZm9ybT4KPCEtLSBkdGw6YmxvY2s6UHJpb3JpdHlFZGl0IC0tPgogICAgPC90ZD4KICA8L3RyPgo8L3RhYmxlPgo8IS0tIGR0bDpibG9jazpPdmVydmlldyAtLT4K
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNJUEFsbG9jYXRlLnBtIC0gYWxsIGNyaXRpY2FsaXR5LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24gZnVuY3Rpb25zCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDggT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBJVFNNQ0lQQWxsb2NhdGUucG0sdiAxLjkgMjAwOC8wNC8wNCAxMDoyMzowMyBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjkgJCkgWzFdOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpDSVBBbGxvY2F0ZSAtIGNyaXRpY2FsaXR5LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24gbGliCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBjcml0aWNhbGl0eSwgaW1wYWN0IGFuZCBwcmlvcml0eSBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OkNvbmZpZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TG9nOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpEQjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHk7CgogICAgbXkgJENvbmZpZ09iamVjdCA9IEtlcm5lbDo6Q29uZmlnLT5uZXcoKTsKICAgIG15ICRMb2dPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6TG9nLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICApOwogICAgbXkgJERCT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgIG15ICRDSVBBbGxvY2F0ZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpDSVBBbGxvY2F0ZS0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgICAgIERCT2JqZWN0ICAgICA9PiAkREJPYmplY3QsCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoREJPYmplY3QgQ29uZmlnT2JqZWN0IExvZ09iamVjdCkpIHsKICAgICAgICAkU2VsZi0+eyRPYmplY3R9ID0gJFBhcmFteyRPYmplY3R9IHx8IGRpZSAiR290IG5vICRPYmplY3QhIjsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIEFsbG9jYXRlTGlzdCgpCgpyZXR1cm4gYSAyZCBoYXNoIHJlZmVyZW5jZSBvZiBhbGxvY2F0aW9ucwoKICAgIG15ICRMaXN0UmVmID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEFsbG9jYXRlTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17VXNlcklEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1VzZXJJRH0sICdJbnRlZ2VyJyApOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBjcml0aWNhbGl0eV9pZCwgaW1wYWN0X2lkLCBwcmlvcml0eV9pZCBGUk9NIGNpcF9hbGxvY2F0ZScsCiAgICApOwoKICAgICMgcmVzdWx0IGxpc3QKICAgIG15ICVBbGxvY2F0ZURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRBbGxvY2F0ZURhdGF7ICRSb3dbMV0gfXsgJFJvd1swXSB9ID0gJFJvd1syXTsKICAgIH0KCiAgICByZXR1cm4gXCVBbGxvY2F0ZURhdGE7Cn0KCj1pdGVtIEFsbG9jYXRlVXBkYXRlKCkKCnVwZGF0ZSB0aGUgYWxsb2NhdGlvbiBvZiBjcml0aWNhbGl0eSwgaW1wYWN0IGFuZCBwcmlvcml0eQoKICAgIG15ICRUcnVlID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgICAgICBBbGxvY2F0ZURhdGEgPT4gJERhdGFSZWYsICAjIDJEIGhhc2ggcmVmZXJlbmNlCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEFsbG9jYXRlVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEFsbG9jYXRlRGF0YSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiBhbGxvY2F0ZSBkYXRhIGlzIGEgaGFzaCByZWZlcmVuY2UKICAgIGlmICggcmVmICRQYXJhbXtBbGxvY2F0ZURhdGF9IG5lICdIQVNIJyApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0FsbG9jYXRlRGF0YSBtdXN0IGJlIGEgMkQgaGFzaCByZWZlcmVuY2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGlmIGFsbG9jYXRlIGRhdGEgaXMgYSAyRCBoYXNoIHJlZmVyZW5jZQogICAgSU1QQUNUSUQ6CiAgICBmb3IgbXkgJEltcGFjdElEICgga2V5cyAleyAkUGFyYW17QWxsb2NhdGVEYXRhfSB9ICkgewoKICAgICAgICBuZXh0IElNUEFDVElEIGlmIHJlZiAkUGFyYW17QWxsb2NhdGVEYXRhfS0+eyRJbXBhY3RJRH0gZXEgJ0hBU0gnOwoKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0FsbG9jYXRlRGF0YSBtdXN0IGJlIGEgMkQgaGFzaCByZWZlcmVuY2UhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtVc2VySUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17VXNlcklEfSwgJ0ludGVnZXInICk7CgogICAgIyBkZWxldGUgb2xkIGFsbG9jYXRpb25zCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oIFNRTCA9PiAnREVMRVRFIEZST00gY2lwX2FsbG9jYXRlJyApOwoKICAgICMgaW5zZXJ0IG5ldyBhbGxvY2F0aW9ucwogICAgZm9yIG15ICRJbXBhY3RJRCAoIGtleXMgJXsgJFBhcmFte0FsbG9jYXRlRGF0YX0gfSApIHsKCiAgICAgICAgIyBxdW90ZQogICAgICAgICRJbXBhY3RJRCA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJEltcGFjdElELCAnSW50ZWdlcicgKTsKCiAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eUlEICgga2V5cyAleyAkUGFyYW17QWxsb2NhdGVEYXRhfS0+eyRJbXBhY3RJRH0gfSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCBwcmlvcml0eQogICAgICAgICAgICBteSAkUHJpb3JpdHlJRCA9ICRQYXJhbXtBbGxvY2F0ZURhdGF9LT57JEltcGFjdElEfS0+eyRDcml0aWNhbGl0eUlEfTsKCiAgICAgICAgICAgICMgcXVvdGUKICAgICAgICAgICAgJENyaXRpY2FsaXR5SUQgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRDcml0aWNhbGl0eUlELCAnSW50ZWdlcicgKTsKICAgICAgICAgICAgJFByaW9yaXR5SUQgICAgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQcmlvcml0eUlELCAgICAnSW50ZWdlcicgKTsKCiAgICAgICAgICAgICMgaW5zZXJ0IG5ldyBhbGxvY2F0aW9uCiAgICAgICAgICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiSU5TRVJUIElOVE8gY2lwX2FsbG9jYXRlICIKICAgICAgICAgICAgICAgICAgICAuICIoY3JpdGljYWxpdHlfaWQsIGltcGFjdF9pZCwgcHJpb3JpdHlfaWQsICIKICAgICAgICAgICAgICAgICAgICAuICJjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KSBWQUxVRVMgIgogICAgICAgICAgICAgICAgICAgIC4gIigkQ3JpdGljYWxpdHlJRCwgJEltcGFjdElELCAkUHJpb3JpdHlJRCwgIgogICAgICAgICAgICAgICAgICAgIC4gImN1cnJlbnRfdGltZXN0YW1wLCAkUGFyYW17VXNlcklEfSwgY3VycmVudF90aW1lc3RhbXAsICRQYXJhbXtVc2VySUR9KSIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIFByaW9yaXR5QWxsb2NhdGlvbkdldCgpCgpyZXR1cm4gdGhlIHByaW9yaXR5IGlkIG9mIGEgY3JpdGljYWxpdHkgYW5kIGFuIGltcGFjdAoKICAgIG15ICRQcmlvcml0eUlEID0gJENJUEFsbG9jYXRlT2JqZWN0LT5Qcmlvcml0eUFsbG9jYXRpb25HZXQoCiAgICAgICAgQ3JpdGljYWxpdHlJRCA9PiAzMjEsCiAgICAgICAgSW1wYWN0SUQgICAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIFByaW9yaXR5QWxsb2NhdGlvbkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDcml0aWNhbGl0eUlEIEltcGFjdElEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENyaXRpY2FsaXR5SUQgSW1wYWN0SUQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICAjIGdldCBwcmlvcml0eSBpZCBmcm9tIGRiCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBwcmlvcml0eV9pZCBGUk9NIGNpcF9hbGxvY2F0ZSAiCiAgICAgICAgICAgIC4gIldIRVJFIGNyaXRpY2FsaXR5X2lkID0gJFBhcmFte0NyaXRpY2FsaXR5SUR9IEFORCBpbXBhY3RfaWQgPSAkUGFyYW17SW1wYWN0SUR9IiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHJlc3VsdAogICAgbXkgJFByaW9yaXR5SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRQcmlvcml0eUlEID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJFByaW9yaXR5SUQ7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIFNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLnR4dC4KCj1jdXQKCj1oZWFkMSBWRVJTSU9OCgokUmV2aXNpb246IDEuOSAkICREYXRlOiAyMDA4LzA0LzA0IDEwOjIzOjAzICQKCj1jdXQK
IyAtLQojIElUU01DSVBBbGxvY2F0ZS50IC0gZ2VuZXJhbCBjYXRhbG9nIHRlc3RzCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDggT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBJVFNNQ0lQQWxsb2NhdGUudCx2IDEuNiAyMDA4LzAzLzA2IDE3OjAyOjI0IG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSB2YXJzIHF3KCRTZWxmKTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlOwoKJFNlbGYtPntDSVBBbGxvY2F0ZU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlLT5uZXcoICV7JFNlbGZ9ICk7CgojIGdldCBjdXJyZW50IGFsbG9jYXRpb24gbGlzdCAoVXNlcklEIGlzIG5lZWRlZCkKbXkgJEFsbG9jYXRlRGF0YTEgPSAkU2VsZi0+e0NJUEFsbG9jYXRlT2JqZWN0fS0+QWxsb2NhdGVMaXN0KCk7CgojIGNoZWNrIHRoZSByZXN1bHQKJFNlbGYtPkZhbHNlKCAkQWxsb2NhdGVEYXRhMSwgJ0FsbG9jYXRlTGlzdCgpJyApOwoKIyBnZXQgY3VycmVudCBhbGxvY2F0aW9uIGxpc3QKbXkgJEFsbG9jYXRlRGF0YTIgPSAkU2VsZi0+e0NJUEFsbG9jYXRlT2JqZWN0fS0+QWxsb2NhdGVMaXN0KAogICAgVXNlcklEID0+IDEsCik7CgojIGNoZWNrIHRoZSByZXN1bHQKJFNlbGYtPlRydWUoICRBbGxvY2F0ZURhdGEyLCAnQWxsb2NhdGVMaXN0KCknICk7CgojIGNoZWNrIHRoZSBhbGxvY2F0aW9uIGhhc2gKbXkgJEhhc2hPSyA9IDE7CmlmICggcmVmICRBbGxvY2F0ZURhdGEyIG5lICdIQVNIJyApIHsKICAgICRIYXNoT0sgPSAwOwp9CgojIGNoZWNrIHRoZSBhbGxvY2F0aW9uIDJkIGhhc2gKaWYgKCRIYXNoT0spIHsKCiAgICBJTVBBQ1RJRDoKICAgIGZvciBteSAkSW1wYWN0SUQgKCBrZXlzICV7JEFsbG9jYXRlRGF0YTJ9ICkgewoKICAgICAgICBpZiAoIHJlZiAkQWxsb2NhdGVEYXRhMi0+eyRJbXBhY3RJRH0gbmUgJ0hBU0gnICkgewogICAgICAgICAgICAkSGFzaE9LID0gMDsKICAgICAgICAgICAgbGFzdCBJTVBBQ1RJRDsKICAgICAgICB9CgogICAgICAgIENSSVRJQ0FMSVRZSUQ6CiAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eUlEICgga2V5cyAleyAkQWxsb2NhdGVEYXRhMi0+eyRJbXBhY3RJRH0gfSApIHsKCiAgICAgICAgICAgIGlmICggISRDcml0aWNhbGl0eUlEIHx8ICEkQWxsb2NhdGVEYXRhMi0+eyRJbXBhY3RJRH0tPnskQ3JpdGljYWxpdHlJRH0gKSB7CiAgICAgICAgICAgICAgICAkSGFzaE9LID0gMDsKICAgICAgICAgICAgICAgIGxhc3QgSU1QQUNUSUQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCiMgY2hlY2sgSGFzaE9LCiRTZWxmLT5UcnVlKCAkSGFzaE9LLCAnQWxsb2NhdGVMaXN0KCknICk7CgojIHVwZGF0ZSB0aGUgYWxsb2NhdGlvbiBoYXNoIChub3QgYWxsIG5lZWRlZCBhcmd1bWVudHMgZ2l2ZW4pCm15ICRTdWNjZXNzMSA9ICRTZWxmLT57Q0lQQWxsb2NhdGVPYmplY3R9LT5BbGxvY2F0ZVVwZGF0ZSgKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5GYWxzZSggJFN1Y2Nlc3MxLCAnQWxsb2NhdGVVcGRhdGUoKScgKTsKCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2ggKG5vdCBhbGwgbmVlZGVkIGFyZ3VtZW50cyBnaXZlbikKbXkgJFN1Y2Nlc3MyID0gJFNlbGYtPntDSVBBbGxvY2F0ZU9iamVjdH0tPkFsbG9jYXRlVXBkYXRlKAogICAgQWxsb2NhdGVEYXRhID0+ICRBbGxvY2F0ZURhdGEyLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5GYWxzZSggJFN1Y2Nlc3MyLCAnQWxsb2NhdGVVcGRhdGUoKScgKTsKCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2ggKGFsbG9jYXRpb24gaGFzaCkKbXkgJFN1Y2Nlc3MzID0gJFNlbGYtPntDSVBBbGxvY2F0ZU9iamVjdH0tPkFsbG9jYXRlVXBkYXRlKAogICAgQWxsb2NhdGVEYXRhID0+IHsKICAgICAgICBUZXN0ICA9PiAnYWFhJywKICAgICAgICBUZXN0MiA9PiAnYmJiJywKICAgIH0sCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgY2hlY2sgdGhlIHJlc3VsdAokU2VsZi0+RmFsc2UoICRTdWNjZXNzMywgJ0FsbG9jYXRlVXBkYXRlKCknICk7CgojIHVwZGF0ZSB0aGUgYWxsb2NhdGlvbiBoYXNoCm15ICRTdWNjZXNzNCA9ICRTZWxmLT57Q0lQQWxsb2NhdGVPYmplY3R9LT5BbGxvY2F0ZVVwZGF0ZSgKICAgIEFsbG9jYXRlRGF0YSA9PiAkQWxsb2NhdGVEYXRhMiwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5UcnVlKCAkU3VjY2VzczQsICdBbGxvY2F0ZVVwZGF0ZSgpJyApOwoKMTsK
iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAACXBIWXMAAAsSAAALEgHS3X78AAABlUlEQVR4nJ2S30rCUBzHf8u1ZWU6walZBpJEITLrylCYT9AjKPUAPkE39Qh1G+gj9ATeeNFNOEZRUq4MRB0U1nT+2eba0bY02E1fODv8xvfD93fO+eG6rsN/hKMPhmHWD/+RP0cH6KxrxcWgWupJnNgSi+3rdsH0oDDcLBwphycej5cOk0kmlt4DKuwGWZGhVhXY2s0LWw095Xmez2hlrWMlIiHo+CTHePc9IHwKUBfrIA9l6JEyECkCot5t1EGpUq4kLBC1h5JMqDeQp5C5G0sJqeCP0gzyGkhhAgY36GwsvWsLyYM+jNQRLG7iE68FUpSLcYfXjPbebCGkMaVPvFarDgJAVu2TTGkLGhDEzHP0VYmrCwLbw+yhSYA09Vrg+4dYbD68ssoOaQshLX0BNA2vBT5etgtbked8cC3CKE7FFhqLEoe8cDHzjnf3fAYnoESt+xhs2QEDUgcVxkAOAZxd43wtieMMz9zIITWutE4DKomDU38uEKSzvtXp7XW7EtdoisXb89+Rs8A/g174WfM6my+/AQ3q/BFcjIyOAAAAAElFTkSuQmCC
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
ITSM::Core::Criticality
1 very low
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Criticality
2 low
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Criticality
3 normal
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Criticality
4 high
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Criticality
5 very high
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Impact
1 very low
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Impact
2 low
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Impact
3 normal
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Impact
4 high
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Impact
5 very high
1
current_timestamp
1
current_timestamp
1
1
6
1
current_timestamp
1
current_timestamp
1
1
7
1
current_timestamp
1
current_timestamp
1
1
8
2
current_timestamp
1
current_timestamp
1
1
9
2
current_timestamp
1
current_timestamp
1
1
10
3
current_timestamp
1
current_timestamp
1
2
6
1
current_timestamp
1
current_timestamp
1
2
7
2
current_timestamp
1
current_timestamp
1
2
8
2
current_timestamp
1
current_timestamp
1
2
9
3
current_timestamp
1
current_timestamp
1
2
10
4
current_timestamp
1
current_timestamp
1
3
6
2
current_timestamp
1
current_timestamp
1
3
7
2
current_timestamp
1
current_timestamp
1
3
8
3
current_timestamp
1
current_timestamp
1
3
9
4
current_timestamp
1
current_timestamp
1
3
10
4
current_timestamp
1
current_timestamp
1
4
6
2
current_timestamp
1
current_timestamp
1
4
7
3
current_timestamp
1
current_timestamp
1
4
8
4
current_timestamp
1
current_timestamp
1
4
9
4
current_timestamp
1
current_timestamp
1
4
10
5
current_timestamp
1
current_timestamp
1
5
6
3
current_timestamp
1
current_timestamp
1
5
7
4
current_timestamp
1
current_timestamp
1
5
8
4
current_timestamp
1
current_timestamp
1
5
9
5
current_timestamp
1
current_timestamp
1
5
10
5
current_timestamp
1
current_timestamp
1