<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>60480</bug_id>
          
          <creation_ts>2026-09-09 23:36:23 +0300</creation_ts>
          <short_desc>CVE-2023-54391: обход аутентификации в pve-access-control, неаутентифицированный доступ как root@pam</short_desc>
          <delta_ts>2026-10-30 16:04:29 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Branch p10</product>
          <component>pve-access-control</component>
          <version>не указана</version>
          <rep_platform>x86</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>blocker</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Denis">den_k26</reporter>
          <assigned_to name="darisishe@altlinux.org">darisishe</assigned_to>
          <cc>amakeenk</cc>
    
    <cc>andy</cc>
    
    <cc>rider</cc>
          
          <qa_contact name="qa-p10@altlinux.org">qa-p10</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>297729</commentid>
    <comment_count>0</comment_count>
    <who name="Denis">den_k26</who>
    <bug_when>2026-09-09 23:36:23 +0300</bug_when>
    <thetext>**Версия:** pve-access-control 7.4.3-alt5 (p10), 7.4.3-alt3 (c10f2)
**CVE-2023-54391**, CVSS 9.3 CRITICAL, CWE-304
**Адвайзори вендора:** PSA-2026-00043-1 от 2026-09-01 — https://forum.proxmox.com/threads/proxmox-virtual-environment-security-advisories.149331/page-4#post-867929

## Суть

Эндпоинт логина `POST /api2/json/access/ticket` принимает параметр `tfa-challenge`. Его наличие отключает проверку пароля, а само значение не валидируется для пользователей без настроенного второго фактора. Один запрос без учётных данных возвращает полноценный тикет `root@pam` с полной картой прав. Далее доступен весь API, включая терминал на ноде.

Эксплуатируется в дикой природе, PoC публичный.

## Где

`/usr/share/perl5/PVE/AccessControl.pm`, нумерация по 7.4.3-alt5. Файл совпадает с апстримным 7.4.3, ALT-патчей в этом коде нет.

Строка 2021, `user_get_tfa` — ранний выход:

```perl
if (!$keys) {
    return if !$realm_tfa;
    die &quot;missing required 2nd keys\n&quot;;
}
```

Для пользователя с пустым `keys` в `user.cfg` (по умолчанию `root@pam` и все LDAP/AD-синхронизированные) в реалме без `tfa` возвращает `undef`.

Строка 793, `authenticate_2nd_new_do` — `if (!defined($tfa_cfg)) { return undef; }`, выход до строки 839, где стоит `verify_ticket($tfa_challenge, 0, $username)`. Челлендж не проверяется.

Строка 739, `authenticate_user` — ветка `if ($tfa_challenge)` возвращает результат до `$plugin-&gt;authenticate_user()` на строке 745, то есть пароль не проверяется.

## Апстрим

Исправлено в libpve-access-control 8.0.4 (2023-07-20), коммит `032e7d6d441f89a48cadfd7f47e957c8a561c022`. Блок `if (!$keys)` удалён из `user_get_tfa`, проверка перенесена в `authenticate_2nd_new_do`. Тогда это прошло как функциональный багфикс, поэтому бэкпорта в ветку 7 не было.

Прямой cherry-pick может не встать: в alt3 сделан `revert &apos;use TFA authentication api v2&apos;` (#48619), затронувший эту же подсистему. В файле остались трёхаргументный `user_get_tfa($username, $realm, $new_format)`, ветвление `if ($new_format)` и `authenticate_2nd_old` — апстрим удалил их в 8.x.

## Патч

Stop-gap из адвайзори — проверка в начало ветки второго фактора, до всех ранних выходов:

```diff
     if ($tfa_challenge) {
+	verify_ticket($tfa_challenge, 0, $username);
 	# This is the 2nd factor, use the password for the OTP response.
 	my $tfa_challenge = authenticate_2nd_new($username, $realm, $password, $tfa_challenge);
```

Вызов `verify_ticket($tfa_challenge, 0, $username)` в файле уже есть на строках 839 и 885, сигнатура `prototype($;$$)` третий аргумент поддерживает — на 2FA-логины не влияет.

## Проверка затронутости

```bash
grep -c &apos;verify_ticket($tfa_challenge, 0, $username)&apos; /usr/share/perl5/PVE/AccessControl.pm
# 2 = уязвимо, 3 = исправлено
```

## Просьба

1. Выпустить исправленный пакет для p10 и c10f2.
2. Завести errata на packages.altlinux.org.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297730</commentid>
    <comment_count>1</comment_count>
      <attachid>22159</attachid>
    <who name="Denis">den_k26</who>
    <bug_when>2026-09-09 23:49:12 +0300</bug_when>
    <thetext>Created attachment 22159
Stop-gap из PSA-2026-00043-1: валидация tfa-challenge перед ранними выходами</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297731</commentid>
    <comment_count>2</comment_count>
      <attachid>22160</attachid>
    <who name="Denis">den_k26</who>
    <bug_when>2026-09-09 23:50:28 +0300</bug_when>
    <thetext>Created attachment 22160
AccessControl.pm из pve-access-control-7.4.3-alt5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297732</commentid>
    <comment_count>3</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2026-09-10 07:55:08 +0300</bug_when>
    <thetext>Перевешиваю с qa-team на ментейнера (в p10 пакет фактически ведёт darisishe@: 7.4.3-alt4/alt5).

Проверил приложенный stop-gap патч (attachment 22159): он корректный — дословно совпадает с официальным из PSA-2026-00043-1 (вызов verify_ticket($tfa_challenge, 0, $username) перед ранними выходами в ветке tfa-challenge). Готового пакетного фикса для ветки 7.x у вендора нет и не будет (PVE 7 EOL), фикс только в libpve-access-control 8.0.4+, поэтому для p10 и c10f2 правильный путь — пересборка именно с этим stop-gap, а не cherry-pick апстримного 8.0.4 (мешает revert TFA api v2 из alt3).

После применения контроль: grep -c &apos;verify_ticket($tfa_challenge, 0, $username)&apos; /usr/share/perl5/PVE/AccessControl.pm должен выдать 3.

Sisyphus/p11 (9.1.1) не уязвимы.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298933</commentid>
    <comment_count>4</comment_count>
    <who name="Denis">den_k26</who>
    <bug_when>2026-09-15 17:04:58 +0300</bug_when>
    <thetext>Добрый день я правильно понял что вы возьмете в работу? надо чуть подождать пока фикс будет?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298935</commentid>
    <comment_count>5</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2026-09-15 17:19:13 +0300</bug_when>
    <thetext>не уверен - p10 EOL и зависит от ментейнера</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299363</commentid>
    <comment_count>6</comment_count>
    <who name="Vera Blagoveschenskaya">vercha</who>
    <bug_when>2026-09-17 10:51:56 +0300</bug_when>
    <thetext>Результат проверки актуальности

Состояние:
CVE-2023-54391: обход аутентификации в pve-access-control-7.4.3-alt5 (p10). Sisyphus и p11 (9.1.1) не уязвимы. Stop-gap патч из PSA-2026-00043-1 для ветки 7.x ещё не выпущен.

Рекомендация:
оставить открытым в Branch p10.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303679</commentid>
    <comment_count>7</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2026-10-30 16:04:29 +0300</bug_when>
    <thetext>pve-access-control-7.4.3-alt6 -&gt; p10:

Tue Oct 27 2026 Sergey Konev &lt;darisishe@altlinux&gt; 7.4.3-alt6
- CVE-2023-54391: validate TFA challenge before authentication (Closes: #60480)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22159</attachid>
            <date>2026-09-09 23:49:12 +0300</date>
            <delta_ts>2026-09-09 23:49:12 +0300</delta_ts>
            <desc>Stop-gap из PSA-2026-00043-1: валидация tfa-challenge перед ранними выходами</desc>
            <filename>cve-2023-54391.patch</filename>
            <type>text/plain</type>
            <size>436</size>
            <attacher name="Denis">den_k26</attacher>
            
              <data encoding="base64">LS0tIGEvc3JjL1BWRS9BY2Nlc3NDb250cm9sLnBtCisrKyBiL3NyYy9QVkUvQWNjZXNzQ29udHJv
bC5wbQpAQCAtNzM3LDYgKzczNyw3IEBACiAgICAgbXkgJHBsdWdpbiA9IFBWRTo6QXV0aDo6UGx1
Z2luLT5sb29rdXAoJGNmZy0+e3R5cGV9KTsKIAogICAgIGlmICgkdGZhX2NoYWxsZW5nZSkgewor
CXZlcmlmeV90aWNrZXQoJHRmYV9jaGFsbGVuZ2UsIDAsICR1c2VybmFtZSk7CiAJIyBUaGlzIGlz
IHRoZSAybmQgZmFjdG9yLCB1c2UgdGhlIHBhc3N3b3JkIGZvciB0aGUgT1RQIHJlc3BvbnNlLgog
CW15ICR0ZmFfY2hhbGxlbmdlID0gYXV0aGVudGljYXRlXzJuZF9uZXcoJHVzZXJuYW1lLCAkcmVh
bG0sICRwYXNzd29yZCwgJHRmYV9jaGFsbGVuZ2UpOwogCXJldHVybiB3YW50YXJyYXkgPyAoJHVz
ZXJuYW1lLCAkdGZhX2NoYWxsZW5nZSkgOiAkdXNlcm5hbWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>22160</attachid>
            <date>2026-09-09 23:50:28 +0300</date>
            <delta_ts>2026-09-09 23:50:28 +0300</delta_ts>
            <desc>AccessControl.pm из pve-access-control-7.4.3-alt5</desc>
            <filename>AccessControl.pm</filename>
            <type>text/x-perl-script</type>
            <size>55342</size>
            <attacher name="Denis">den_k26</attacher>
            
              <data encoding="base64">cGFja2FnZSBQVkU6OkFjY2Vzc0NvbnRyb2w7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVz
ZSBDcnlwdDo6T3BlblNTTDo6UmFuZG9tOwp1c2UgQ3J5cHQ6Ok9wZW5TU0w6OlJTQTsKdXNlIE5l
dDo6U1NMZWF5Owp1c2UgTmV0OjpJUDsKdXNlIE1JTUU6OkJhc2UzMjsKdXNlIE1JTUU6OkJhc2U2
NDsKdXNlIERpZ2VzdDo6U0hBOwp1c2UgSU86OkZpbGU7CnVzZSBGaWxlOjpzdGF0Owp1c2UgSlNP
TjsKdXNlIFNjYWxhcjo6VXRpbCAnd2Vha2VuJzsKdXNlIFVSSTo6RXNjYXBlOwp1c2UgRW5jb2Rl
OwoKdXNlIFBWRTo6T1RQOwp1c2UgUFZFOjpUaWNrZXQ7CnVzZSBQVkU6OlRvb2xzIHF3KHJ1bl9j
b21tYW5kIGxvY2tfZmlsZSBmaWxlX2dldF9jb250ZW50cyBzcGxpdF9saXN0IHNhZmVfcHJpbnQp
Owp1c2UgUFZFOjpDbHVzdGVyIHF3KGNmc19yZWdpc3Rlcl9maWxlIGNmc19yZWFkX2ZpbGUgY2Zz
X3dyaXRlX2ZpbGUgY2ZzX2xvY2tfZmlsZSk7CnVzZSBQVkU6OkpTT05TY2hlbWEgcXcocmVnaXN0
ZXJfc3RhbmRhcmRfb3B0aW9uIGdldF9zdGFuZGFyZF9vcHRpb24pOwoKdXNlIFBWRTo6UlM6OlRG
QTsKCnVzZSBQVkU6OkF1dGg6OlBsdWdpbjsKdXNlIFBWRTo6QXV0aDo6QUQ7CnVzZSBQVkU6OkF1
dGg6OkxEQVA7CnVzZSBQVkU6OkF1dGg6OlBWRTsKdXNlIFBWRTo6QXV0aDo6UEFNOwp1c2UgUFZF
OjpBdXRoOjpPcGVuSWQ7CgojIGxvYWQgYW5kIGluaXRpYWxpemUgYWxsIHBsdWdpbnMKClBWRTo6
QXV0aDo6QUQtPnJlZ2lzdGVyKCk7ClBWRTo6QXV0aDo6TERBUC0+cmVnaXN0ZXIoKTsKUFZFOjpB
dXRoOjpQVkUtPnJlZ2lzdGVyKCk7ClBWRTo6QXV0aDo6UEFNLT5yZWdpc3RlcigpOwpQVkU6OkF1
dGg6Ok9wZW5JZC0+cmVnaXN0ZXIoKTsKUFZFOjpBdXRoOjpQbHVnaW4tPmluaXQoKTsKCiMgJGF1
dGhkaXIgbXVzdCBiZSB3cml0YWJsZSBieSByb290IG9ubHkhCm15ICRjb25mZGlyID0gIi9ldGMv
cHZlIjsKbXkgJGF1dGhkaXIgPSAiJGNvbmZkaXIvcHJpdiI7CgpteSAkcHZlX3d3d19rZXlfZm4g
PSAiJGNvbmZkaXIvcHZlLXd3dy5rZXkiOwoKbXkgJHB2ZV9hdXRoX2tleV9maWxlcyA9IHsKICAg
IHByaXYgPT4gIiRhdXRoZGlyL2F1dGhrZXkua2V5IiwKICAgIHB1YiA9PiAgIiRjb25mZGlyL2F1
dGhrZXkucHViIiwKICAgIHB1Ym9sZCA9PiAiJGNvbmZkaXIvYXV0aGtleS5wdWIub2xkIiwKfTsK
Cm15ICRwdmVfYXV0aF9rZXlfY2FjaGUgPSB7fTsKCm15ICR0aWNrZXRfbGlmZXRpbWUgPSAzNjAw
ICogMjsgIyAyIGhvdXJzCm15ICRhdXRoX2dyYWNlcGVyaW9kID0gNjAgKiA1OyAjIDUgbWludXRl
cwpteSAkYXV0aGtleV9saWZldGltZSA9IDM2MDAgKiAyNDsgIyByb3RhdGUgZXZlcnkgMjQgaG91
cnMKCkNyeXB0OjpPcGVuU1NMOjpSU0EtPmltcG9ydF9yYW5kb21fc2VlZCgpOwoKY2ZzX3JlZ2lz
dGVyX2ZpbGUoJ3VzZXIuY2ZnJywgXCZwYXJzZV91c2VyX2NvbmZpZywgXCZ3cml0ZV91c2VyX2Nv
bmZpZyk7CmNmc19yZWdpc3Rlcl9maWxlKCdwcml2L3RmYS5jZmcnLCBcJnBhcnNlX3ByaXZfdGZh
X2NvbmZpZywgXCZ3cml0ZV9wcml2X3RmYV9jb25maWcpOwoKc3ViIHZlcmlmeV91c2VybmFtZSB7
CiAgICBQVkU6OkF1dGg6OlBsdWdpbjo6dmVyaWZ5X3VzZXJuYW1lKEBfKTsKfQoKc3ViIHB2ZV92
ZXJpZnlfcmVhbG0gewogICAgUFZFOjpBdXRoOjpQbHVnaW46OnB2ZV92ZXJpZnlfcmVhbG0oQF8p
Owp9CgojIExvY2tpbmcgYm90aCBjb25maWcgZmlsZXMgdG9nZXRoZXIgaXMgb25seSBldmVyIGFs
bG93ZWQgaW4gb25lIG9yZGVyOgojICAxKSB0ZmEgY29uZmlnCiMgIDIpIHVzZXIgY29uZmlnCiMg
SWYgd2UgcGVybWl0IHRoZSBvdGhlciB3YXkgcm91bmQsIHRvbywgd2UgbWlnaHQgZW5kIHVwIGRl
YWRsb2NraW5nIQpteSAkdXNlcl9jb25maWdfbG9ja2VkOwpzdWIgbG9ja191c2VyX2NvbmZpZyB7
CiAgICBteSAoJGNvZGUsICRlcnJtc2cpID0gQF87CgogICAgbXkgJGxvY2tlZCA9IDE7CiAgICAk
dXNlcl9jb25maWdfbG9ja2VkID0gXCRsb2NrZWQ7CiAgICB3ZWFrZW4gJHVzZXJfY29uZmlnX2xv
Y2tlZDsgIyBtYWtlIHRoaXMgc2NvcGUgZ3VhcmQgc2lnbmFsIHNhZmUuLi4KCiAgICBjZnNfbG9j
a19maWxlKCJ1c2VyLmNmZyIsIHVuZGVmLCAkY29kZSk7CiAgICAkdXNlcl9jb25maWdfbG9ja2Vk
ID0gdW5kZWY7CiAgICBpZiAobXkgJGVyciA9ICRAKSB7CgkkZXJybXNnID8gZGllICIkZXJybXNn
OiAkZXJyIiA6IGRpZSAkZXJyOwogICAgfQp9CgpzdWIgbG9ja190ZmFfY29uZmlnIHsKICAgIG15
ICgkY29kZSwgJGVycm1zZykgPSBAXzsKCiAgICBkaWUgInRmYSBjb25maWcgbG9jayBjYW5ub3Qg
YmUgYWNxdWlyZWQgd2hpbGUgaG9sZGluZyB1c2VyIGNvbmZpZyBsb2NrXG4iCglpZiAoJHVzZXJf
Y29uZmlnX2xvY2tlZCAmJiAkJHVzZXJfY29uZmlnX2xvY2tlZCk7CgogICAgbXkgJHJlcyA9IGNm
c19sb2NrX2ZpbGUoInByaXYvdGZhLmNmZyIsIHVuZGVmLCAkY29kZSk7CiAgICBpZiAobXkgJGVy
ciA9ICRAKSB7CgkkZXJybXNnID8gZGllICIkZXJybXNnOiAkZXJyIiA6IGRpZSAkZXJyOwogICAg
fQoKICAgIHJldHVybiAkcmVzOwp9CgpteSAkY2FjaGVfcmVhZF9rZXkgPSBzdWIgewogICAgbXkg
KCR0eXBlKSA9IEBfOwoKICAgIG15ICRwYXRoID0gJHB2ZV9hdXRoX2tleV9maWxlcy0+eyR0eXBl
fTsKCiAgICBteSAkcmVhZF9rZXlfYW5kX210aW1lID0gc3ViIHsKCW15ICRmaCA9IElPOjpGaWxl
LT5uZXcoJHBhdGgsICJyIik7CgoJcmV0dXJuIHVuZGVmIGlmICFkZWZpbmVkKCRmaCk7CgoJbXkg
JHN0ID0gc3RhdCgkZmgpOwoJbXkgJHBlbSA9IFBWRTo6VG9vbHM6OnNhZmVfcmVhZF9mcm9tKCRm
aCwgMCwgMCwgJHBhdGgpOwoKCWNsb3NlICRmaDsKCglteSAka2V5OwoJaWYgKCR0eXBlIGVxICdw
dWInIHx8ICR0eXBlIGVxICdwdWJvbGQnKSB7CgkgICAgJGtleSA9IGV2YWwgeyBDcnlwdDo6T3Bl
blNTTDo6UlNBLT5uZXdfcHVibGljX2tleSgkcGVtKTsgfTsKCX0gZWxzaWYgKCR0eXBlIGVxICdw
cml2JykgewoJICAgICRrZXkgPSBldmFsIHsgQ3J5cHQ6Ok9wZW5TU0w6OlJTQS0+bmV3X3ByaXZh
dGVfa2V5KCRwZW0pOyB9OwoJfSBlbHNlIHsKCSAgICBkaWUgIkludmFsaWQgYXV0aGtleSB0eXBl
ICckdHlwZSdcbiI7Cgl9CgoJcmV0dXJuIHsga2V5ID0+ICRrZXksIG10aW1lID0+ICRzdC0+bXRp
bWUgfTsKICAgIH07CgogICAgaWYgKCFkZWZpbmVkKCRwdmVfYXV0aF9rZXlfY2FjaGUtPnskdHlw
ZX0pKSB7CgkkcHZlX2F1dGhfa2V5X2NhY2hlLT57JHR5cGV9ID0gJHJlYWRfa2V5X2FuZF9tdGlt
ZS0+KCk7CiAgICB9IGVsc2UgewoJbXkgJHN0ID0gc3RhdCgkcGF0aCk7CglpZiAoISRzdCB8fCAk
c3QtPm10aW1lICE9ICRwdmVfYXV0aF9rZXlfY2FjaGUtPnskdHlwZX0tPnttdGltZX0pIHsKCSAg
ICAkcHZlX2F1dGhfa2V5X2NhY2hlLT57JHR5cGV9ID0gJHJlYWRfa2V5X2FuZF9tdGltZS0+KCk7
Cgl9CiAgICB9CgogICAgcmV0dXJuICRwdmVfYXV0aF9rZXlfY2FjaGUtPnskdHlwZX07Cn07Cgpz
dWIgZ2V0X3B1YmtleSB7CiAgICBteSAoJG9sZCkgPSBAXzsKCiAgICBteSAkdHlwZSA9ICRvbGQg
PyAncHVib2xkJyA6ICdwdWInOwoKICAgIG15ICRyZXMgPSAkY2FjaGVfcmVhZF9rZXktPigkdHlw
ZSk7CiAgICByZXR1cm4gdW5kZWYgaWYgIWRlZmluZWQoJHJlcyk7CgogICAgcmV0dXJuIHdhbnRh
cnJheSA/ICgkcmVzLT57a2V5fSwgJHJlcy0+e210aW1lfSkgOiAkcmVzLT57a2V5fTsKfQoKc3Vi
IGdldF9wcml2a2V5IHsKICAgIG15ICRyZXMgPSAkY2FjaGVfcmVhZF9rZXktPigncHJpdicpOwoK
ICAgIGlmICghZGVmaW5lZCgkcmVzKSB8fCAhY2hlY2tfYXV0aGtleSgxKSkgewoJcm90YXRlX2F1
dGhrZXkoKTsKCSRyZXMgPSAkY2FjaGVfcmVhZF9rZXktPigncHJpdicpOwogICAgfQoKICAgIHJl
dHVybiB3YW50YXJyYXkgPyAoJHJlcy0+e2tleX0sICRyZXMtPnttdGltZX0pIDogJHJlcy0+e2tl
eX07Cn0KCnN1YiBjaGVja19hdXRoa2V5IHsKICAgIG15ICgkcXVpZXQpID0gQF87CgogICAgIyBz
a2lwIGNoZWNrIGlmIG5vbi1xdW9yYXRlLCBhcyByb3RhdGlvbiBpcyBub3QgcG9zc2libGUgYW55
d2F5CiAgICByZXR1cm4gMSBpZiAhUFZFOjpDbHVzdGVyOjpjaGVja19jZnNfcXVvcnVtKDEpOwoK
ICAgIG15ICgkcHViX2tleSwgJG10aW1lKSA9IGdldF9wdWJrZXkoKTsKICAgIGlmICghJHB1Yl9r
ZXkpIHsKCXdhcm4gImF1dGgga2V5IHBhaXIgbWlzc2luZywgZ2VuZXJhdGluZyBuZXcgb25lLi5c
biIgIGlmICEkcXVpZXQ7CglyZXR1cm4gMDsKICAgIH0gZWxzZSB7CglteSAkbm93ID0gdGltZSgp
OwoJaWYgKCRub3cgLSAkbXRpbWUgPj0gJGF1dGhrZXlfbGlmZXRpbWUpIHsKCSAgICB3YXJuICJh
dXRoIGtleSBwYWlyIHRvbyBvbGQsIHJvdGF0aW5nLi5cbiIgaWYgISRxdWlldDs7CgkgICAgcmV0
dXJuIDA7Cgl9IGVsc2lmICgkbXRpbWUgPiAkbm93ICsgJGF1dGhfZ3JhY2VwZXJpb2QpIHsKCSAg
ICAjIGEgbm9kZXMgUlRDIGhhZCBhIHRpbWUgc2V0IGluIHRoZSBmdXR1cmUgZHVyaW5nIGtleSBn
ZW5lcmF0aW9uIC0+IHRpY2tldAoJICAgICMgdmFsaWRpdHkgaXMgY2xhbXBlZCB0byAwKzUgbWlu
IGdyYWNlIHBlcmlvZCB1bnRpbCBub3cgPj0gbXRpbWUgYWdhaW4KCSAgICBteSAodW5kZWYsICRv
bGRfbXRpbWUpID0gZ2V0X3B1YmtleSgxKTsKCSAgICBpZiAoJG9sZF9tdGltZSAmJiAkbXRpbWUg
Pj0gJG9sZF9tdGltZSAmJiAkbXRpbWUgLSAkb2xkX210aW1lIDwgJHRpY2tldF9saWZldGltZSkg
ewoJCXdhcm4gImF1dGgga2V5IHBhaXIgZ2VuZXJhdGVkIGluIHRoZSBmdXR1cmUgKGtleSAkbXRp
bWUgPiBob3N0ICRub3cpLCIKCQkgICAgLiIgYnV0IG9sZCBrZXkgc3RpbGwgZXhpc3RzIGFuZCBp
biB2YWxpZCBncmFjZSBwZXJpb2Qgc28gYXZvaWQgYXV0b21hdGljIgoJCSAgICAuIiBmaXh1cC4g
Q2x1c3RlciB0aW1lIG5vdCBpbiBzeW5jP1xuIiBpZiAhJHF1aWV0OwoJCXJldHVybiAxOwoJICAg
IH0KCSAgICB3YXJuICJhdXRoIGtleSBwYWlyIGdlbmVyYXRlZCBpbiB0aGUgZnV0dXJlIChrZXkg
JG10aW1lID4gaG9zdCAkbm93KSwgcm90YXRpbmcuLlxuIiBpZiAhJHF1aWV0OwoJICAgIHJldHVy
biAwOwoJfSBlbHNlIHsKCSAgICB3YXJuICJhdXRoIGtleSBuZXcgZW5vdWdoLCBza2lwcGluZyBy
b3RhdGlvblxuIiBpZiAhJHF1aWV0OzsKCSAgICByZXR1cm4gMTsKCX0KICAgIH0KfQoKc3ViIHJv
dGF0ZV9hdXRoa2V5IHsKICAgIHJldHVybiBpZiAkYXV0aGtleV9saWZldGltZSA9PSAwOwoKICAg
IFBWRTo6Q2x1c3Rlcjo6Y2ZzX2xvY2tfYXV0aGtleSh1bmRlZiwgc3ViIHsKCSMgc3RhdCgpIGNh
bGxzIG1pZ2h0IGJlIGFuc3dlcmVkIGZyb20gdGhlIGtlcm5lbCBwYWdlIGNhY2hlIGZvciB1cCB0
bwoJIyAxcywgc28gdGhpcyBzcGVjaWFsIGRhbmNlIGlzIG5lZWRlZCB0byBhdm9pZCBhIGRvdWJs
ZSByb3RhdGlvbiBpbgoJIyBjbHVzdGVycyAqZGVzcGl0ZSogdGhlIGNmc19sb2NrIGNvbnRleHQu
LgoKCSMgZHJvcCBpbi1wcm9jZXNzIGNhY2hlIGhhc2gKCSRwdmVfYXV0aF9rZXlfY2FjaGUgPSB7
fTsKCSMgZm9yY2Ugb3Blbi9jbG9zZSBvZiBmaWxlIHRvIGludmFsaWRhdGUgcGFnZSBjYWNoZSBl
bnRyeQoJZ2V0X3B1YmtleSgpOwoJIyBub3cgcmUtY2hlY2sgd2l0aCBsb2NrIGhlbGQgYW5kIHBh
Z2UgY2FjaGUgaW52YWxpZGF0ZWQgc28gdGhhdCBzdGF0KCkKCSMgZG9lcyB0aGUgcmlnaHQgdGhp
bmcsIGFuZCBhbnkga2V5IHVwZGF0ZXMgYnkgb3RoZXIgbm9kZXMgYXJlIHZpc2libGUuCglyZXR1
cm4gaWYgY2hlY2tfYXV0aGtleSgpOwoKCW15ICRvbGQgPSBnZXRfcHVia2V5KCk7CglteSAkbmV3
ID0gQ3J5cHQ6Ok9wZW5TU0w6OlJTQS0+Z2VuZXJhdGVfa2V5KDIwNDgpOwoKCWlmICgkb2xkKSB7
CgkgICAgZXZhbCB7CgkJbXkgJHBlbSA9ICRvbGQtPmdldF9wdWJsaWNfa2V5X3g1MDlfc3RyaW5n
KCk7CgkJIyBtdGltZSBpcyB1c2VkIGZvciBjYWNoaW5nIGFuZCB0aWNrZXQgYWdlIHJhbmdlIGNh
bGN1bGF0aW9uCgkJUFZFOjpUb29sczo6ZmlsZV9zZXRfY29udGVudHMoJHB2ZV9hdXRoX2tleV9m
aWxlcy0+e3B1Ym9sZH0sICRwZW0pOwoJICAgIH07CgkgICAgZGllICJGYWlsZWQgdG8gc3RvcmUg
b2xkIGF1dGgga2V5OiAkQFxuIiBpZiAkQDsKCX0KCglldmFsIHsKCSAgICBteSAkcGVtID0gJG5l
dy0+Z2V0X3B1YmxpY19rZXlfeDUwOV9zdHJpbmcoKTsKCSAgICAjIG10aW1lIGlzIHVzZWQgZm9y
IGNhY2hpbmcgYW5kIHRpY2tldCBhZ2UgcmFuZ2UgY2FsY3VsYXRpb24sCgkgICAgIyBzaG91bGQg
YmUgY2xvc2UgdG8gdGhhdCBvZiBwdWJvbGQgYWJvdmUKCSAgICBQVkU6OlRvb2xzOjpmaWxlX3Nl
dF9jb250ZW50cygkcHZlX2F1dGhfa2V5X2ZpbGVzLT57cHVifSwgJHBlbSk7Cgl9OwoJaWYgKCRA
KSB7CgkgICAgaWYgKCRvbGQpIHsKCQl3YXJuICJGYWlsZWQgdG8gc3RvcmUgbmV3IGF1dGgga2V5
IC0gJEBcbiI7CgkJd2FybiAiUmV2ZXJ0aW5nIHRvIHByZXZpb3VzIGF1dGgga2V5XG4iOwoJCWV2
YWwgewoJCSAgICBteSAkcGVtID0gJG9sZC0+Z2V0X3B1YmxpY19rZXlfeDUwOV9zdHJpbmcoKTsK
CQkgICAgUFZFOjpUb29sczo6ZmlsZV9zZXRfY29udGVudHMoJHB2ZV9hdXRoX2tleV9maWxlcy0+
e3B1Yn0sICRwZW0pOwoJCX07CgkJZGllICJGYWlsZWQgdG8gcmVzdG9yZSBvbGQgYXV0aCBrZXk6
ICRAXG4iIGlmICRAOwoJICAgIH0gZWxzZSB7CgkJZGllICJGYWlsZWQgdG8gc3RvcmUgbmV3IGF1
dGgga2V5IC0gJEBcbiI7CgkgICAgfQoJfQoKCWV2YWwgewoJICAgIG15ICRwZW0gPSAkbmV3LT5n
ZXRfcHJpdmF0ZV9rZXlfc3RyaW5nKCk7CgkgICAgUFZFOjpUb29sczo6ZmlsZV9zZXRfY29udGVu
dHMoJHB2ZV9hdXRoX2tleV9maWxlcy0+e3ByaXZ9LCAkcGVtKTsKCX07CglpZiAoJEApIHsKCSAg
ICB3YXJuICJGYWlsZWQgdG8gc3RvcmUgbmV3IGF1dGgga2V5IC0gJEBcbiI7CgkgICAgd2FybiAi
RGVsZXRpbmcgYXV0aCBrZXkgdG8gZm9yY2UgcmVnZW5lcmF0aW9uXG4iOwoJICAgIHVubGluayAk
cHZlX2F1dGhfa2V5X2ZpbGVzLT57cHVifTsKCSAgICB1bmxpbmsgJHB2ZV9hdXRoX2tleV9maWxl
cy0+e3ByaXZ9OwoJfQogICAgfSk7CiAgICBkaWUgJEAgaWYgJEA7Cn0KClBWRTo6SlNPTlNjaGVt
YTo6cmVnaXN0ZXJfc3RhbmRhcmRfb3B0aW9uKCd0b2tlbmlkJywgewogICAgZGVzY3JpcHRpb24g
PT4gIkFQSSB0b2tlbiBpZGVudGlmaWVyLiIsCiAgICB0eXBlID0+ICJzdHJpbmciLAogICAgZm9y
bWF0ID0+ICJwdmUtdG9rZW5pZCIsCn0pOwoKb3VyICR0b2tlbl9zdWJpZF9yZWdleCA9ICRQVkU6
OkF1dGg6OlBsdWdpbjo6cmVhbG1fcmVnZXg7CgojIHVzZXJuYW1lQHJlYWxtIHVzZXJuYW1lIHJl
YWxtIHRva2VuaWQKb3VyICR0b2tlbl9mdWxsX3JlZ2V4ID0gcXIvKCgke1BWRTo6QXV0aDo6UGx1
Z2luOjp1c2VyX3JlZ2V4fSlcQCgke1BWRTo6QXV0aDo6UGx1Z2luOjpyZWFsbV9yZWdleH0pKSEo
JHt0b2tlbl9zdWJpZF9yZWdleH0pLzsKCm91ciAkdXNlcmlkX29yX3Rva2VuX3JlZ2V4ID0gcXIv
XiRQVkU6OkF1dGg6OlBsdWdpbjo6dXNlcl9yZWdleFxAJFBWRTo6QXV0aDo6UGx1Z2luOjpyZWFs
bV9yZWdleCg/OiEkdG9rZW5fc3ViaWRfcmVnZXgpPyQvOwoKc3ViIHNwbGl0X3Rva2VuaWQgewog
ICAgbXkgKCR0b2tlbmlkLCAkbm9lcnIpID0gQF87CgogICAgaWYgKCR0b2tlbmlkID1+IC9eJHt0
b2tlbl9mdWxsX3JlZ2V4fSQvKSB7CglyZXR1cm4gKCQxLCAkNCk7CiAgICB9CgogICAgZGllICIn
JHRva2VuaWQnIGlzIG5vdCBhIHZhbGlkIHRva2VuIElEIC0gbm90IGFibGUgdG8gc3BsaXQgaW50
byB1c2VyIGFuZCB0b2tlbiBwYXJ0c1xuIiBpZiAhJG5vZXJyOwoKICAgIHJldHVybiB1bmRlZjsK
fQoKc3ViIGpvaW5fdG9rZW5pZCB7CiAgICBteSAoJHVzZXJuYW1lLCAkdG9rZW5zdWJpZCkgPSBA
XzsKCiAgICBteSAkam9pbmVkID0gIiR7dXNlcm5hbWV9ISR7dG9rZW5zdWJpZH0iOwoKICAgIHJl
dHVybiBwdmVfdmVyaWZ5X3Rva2VuaWQoJGpvaW5lZCk7Cn0KClBWRTo6SlNPTlNjaGVtYTo6cmVn
aXN0ZXJfZm9ybWF0KCdwdmUtdG9rZW5pZCcsIFwmcHZlX3ZlcmlmeV90b2tlbmlkKTsKc3ViIHB2
ZV92ZXJpZnlfdG9rZW5pZCB7CiAgICBteSAoJHRva2VuaWQsICRub2VycikgPSBAXzsKCiAgICBp
ZiAoJHRva2VuaWQgPX4gL14ke3Rva2VuX2Z1bGxfcmVnZXh9JC8pIHsKCXJldHVybiB3YW50YXJy
YXkgPyAoJHRva2VuaWQsICQyLCAkMywgJDQpIDogJHRva2VuaWQ7CiAgICB9CgogICAgZGllICJ2
YWx1ZSAnJHRva2VuaWQnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHZhbGlkIHRva2VuIElEXG4iIGlm
ICEkbm9lcnI7CgogICAgcmV0dXJuIHVuZGVmOwp9CgoKbXkgJGNzcmZfcHJldmVudGlvbl9zZWNy
ZXQ7Cm15ICRjc3JmX3ByZXZlbnRpb25fc2VjcmV0X2xlZ2FjeTsKbXkgJGdldF9jc3Jmcl9zZWNy
ZXQgPSBzdWIgewogICAgaWYgKCEkY3NyZl9wcmV2ZW50aW9uX3NlY3JldCkgewoJbXkgJGlucHV0
ID0gUFZFOjpUb29sczo6ZmlsZV9nZXRfY29udGVudHMoJHB2ZV93d3dfa2V5X2ZuKTsKCSRjc3Jm
X3ByZXZlbnRpb25fc2VjcmV0ID0gRGlnZXN0OjpTSEE6OmhtYWNfc2hhMjU2X2Jhc2U2NCgkaW5w
dXQpOwoJJGNzcmZfcHJldmVudGlvbl9zZWNyZXRfbGVnYWN5ID0gRGlnZXN0OjpTSEE6OnNoYTFf
YmFzZTY0KCRpbnB1dCk7CiAgICB9CiAgICByZXR1cm4gJGNzcmZfcHJldmVudGlvbl9zZWNyZXQ7
Cn07CgpzdWIgYXNzZW1ibGVfY3NyZl9wcmV2ZW50aW9uX3Rva2VuIHsKICAgIG15ICgkdXNlcm5h
bWUpID0gQF87CgogICAgbXkgJHNlY3JldCA9ICAmJGdldF9jc3Jmcl9zZWNyZXQoKTsKCiAgICBy
ZXR1cm4gUFZFOjpUaWNrZXQ6OmFzc2VtYmxlX2NzcmZfcHJldmVudGlvbl90b2tlbiAoJHNlY3Jl
dCwgJHVzZXJuYW1lKTsKfQoKc3ViIHZlcmlmeV9jc3JmX3ByZXZlbnRpb25fdG9rZW4gewogICAg
bXkgKCR1c2VybmFtZSwgJHRva2VuLCAkbm9lcnIpID0gQF87CgogICAgbXkgJHNlY3JldCA9ICRn
ZXRfY3NyZnJfc2VjcmV0LT4oKTsKCiAgICAjIEZJWE1FOiByZW1vdmUgd2l0aCBQVkUgNyBhbmQv
b3IgcmVmYWN0b3IgYWxsIGludG8gUFZFOjpUaWNrZXQgPwogICAgaWYgKCR0b2tlbiA9fiBtL14o
W0EtWjAtOV17OH0pOihcUyspJC8pIHsKCW15ICRzaWcgPSAkMjsKCWlmIChsZW5ndGgoJHNpZykg
PT0gMjcpIHsKCSAgICAjIHRoZSBsZWdhY3kgc2VjcmV0IGdvdCBwb3B1bGF0ZWQgYnkgYWJvdmUg
Z2V0X2NzcmZyX3NlY3JldCBjYWxsCgkgICAgJHNlY3JldCA9ICRjc3JmX3ByZXZlbnRpb25fc2Vj
cmV0X2xlZ2FjeTsKCX0KICAgIH0KCiAgICByZXR1cm4gUFZFOjpUaWNrZXQ6OnZlcmlmeV9jc3Jm
X3ByZXZlbnRpb25fdG9rZW4oCgkkc2VjcmV0LCAkdXNlcm5hbWUsICR0b2tlbiwgLSRhdXRoX2dy
YWNlcGVyaW9kLCAkdGlja2V0X2xpZmV0aW1lLCAkbm9lcnIpOwp9CgpteSAkZ2V0X3RpY2tldF9h
Z2VfcmFuZ2UgPSBzdWIgewogICAgbXkgKCRub3csICRtdGltZSwgJHJvdGF0ZWQpID0gQF87Cgog
ICAgbXkgJGtleV9hZ2UgPSAkbm93IC0gJG10aW1lOwogICAgJGtleV9hZ2UgPSAwIGlmICRrZXlf
YWdlIDwgMDsKCiAgICBteSAkbWluID0gLSRhdXRoX2dyYWNlcGVyaW9kOwogICAgbXkgJG1heCA9
ICR0aWNrZXRfbGlmZXRpbWU7CgogICAgaWYgKCRyb3RhdGVkKSB7CgkjIHRpY2tldCBjcmVhdGlv
biBhZnRlciByb3RhdGlvbiBpcyBub3QgYWxsb3dlZAoJJG1pbiA9ICRrZXlfYWdlIC0gJGF1dGhf
Z3JhY2VwZXJpb2Q7CiAgICB9IGVsc2UgewoJaWYgKCRrZXlfYWdlID4gJGF1dGhrZXlfbGlmZXRp
bWUgJiYgJGF1dGhrZXlfbGlmZXRpbWUgPiAwKSB7CgkgICAgaWYgKFBWRTo6Q2x1c3Rlcjo6Y2hl
Y2tfY2ZzX3F1b3J1bSgxKSkgewoJCSMga2V5IHNob3VsZCBoYXZlIGJlZW4gcm90YXRlZCwgY2xh
bXAgcmFuZ2UgYWNjb3JkaW5nbHkKCQkkbWluID0gJGtleV9hZ2UgLSAkYXV0aGtleV9saWZldGlt
ZTsKCSAgICB9IGVsc2UgewoJCXdhcm4gIkNsdXN0ZXIgbm90IHF1b3JhdGUgLSBleHRlbmRpbmcg
YXV0aCBrZXkgbGlmZXRpbWUhXG4iOwoJICAgIH0KCX0KCgkkbWF4ID0gJGtleV9hZ2UgKyAkYXV0
aF9ncmFjZXBlcmlvZCBpZiAka2V5X2FnZSA8ICR0aWNrZXRfbGlmZXRpbWU7CiAgICB9CgogICAg
cmV0dXJuIHVuZGVmIGlmICRtaW4gPiAkdGlja2V0X2xpZmV0aW1lOwogICAgcmV0dXJuICgkbWlu
LCAkbWF4KTsKfTsKCnN1YiBhc3NlbWJsZV90aWNrZXQgOiBwcm90b3R5cGUoJDskKSB7CiAgICBt
eSAoJGRhdGEsICRhYWQpID0gQF87CgogICAgbXkgJHJzYV9wcml2ID0gZ2V0X3ByaXZrZXkoKTsK
CiAgICByZXR1cm4gUFZFOjpUaWNrZXQ6OmFzc2VtYmxlX3JzYV90aWNrZXQoJHJzYV9wcml2LCAn
UFZFJywgJGRhdGEsICRhYWQpOwp9CgojIFJldHVybnMgdGhlIHVzZXJuYW1lLCAiYWdlIiBhbmQg
dGZhIGluZm8uCiMKIyBOb3RlIHRoYXQgZm9yIHRoZSBuZXctc3R5bGUgb3V0aCwgdGZhIGluZm8g
aXMgbmV2ZXIgc2V0LCBhcyBpdCBvbmx5IHVzZXMgdGhlIGAvdGlja2V0YCBhcGkgY2FsbAojIHZp
YSB0aGUgbmV3ICd0ZmEtY2hhbGxlbmdlJyBwYXJhbWV0ZXIsIHNvIHRoaXMgcGFydCBjYW4gZ28g
d2l0aCBQVkUtOC4KIwojIE5ldy1zdHlsZSBhdXRoIHN0aWxsIHVzZXMgdGhpcyBmdW5jdGlvbiwg
YnV0IHNldHMgYCR0ZmFfdGlja2V0YCB0byB0cnVlIHdoZW4gdmFsaWRhdGluZyB0aGUgdGZhCiMg
dGlja2V0LgpzdWIgdmVyaWZ5X3RpY2tldCA6IHByb3RvdHlwZSgkOyQkKSB7CiAgICBteSAoJHRp
Y2tldCwgJG5vZXJyLCAkdGZhX3RpY2tldF9hYWQpID0gQF87CgogICAgbXkgJG5vdyA9IHRpbWUo
KTsKCiAgICBteSAkY2hlY2sgPSBzdWIgewoJbXkgKCRvbGQpID0gQF87CgoJbXkgKCRyc2FfcHVi
LCAkcnNhX210aW1lKSA9IGdldF9wdWJrZXkoJG9sZCk7CglyZXR1cm4gdW5kZWYgaWYgISRyc2Ff
cHViOwoKCW15ICgkbWluLCAkbWF4KSA9ICRnZXRfdGlja2V0X2FnZV9yYW5nZS0+KCRub3csICRy
c2FfbXRpbWUsICRvbGQpOwoJcmV0dXJuIHVuZGVmIGlmICFkZWZpbmVkKCRtaW4pOwoKCXJldHVy
biBQVkU6OlRpY2tldDo6dmVyaWZ5X3JzYV90aWNrZXQoCgkgICAgJHJzYV9wdWIsICdQVkUnLCAk
dGlja2V0LCAkdGZhX3RpY2tldF9hYWQsICRtaW4sICRtYXgsIDEpOwogICAgfTsKCiAgICBteSAo
JGRhdGEsICRhZ2UpID0gJGNoZWNrLT4oKTsKCiAgICAjIGNoZWNrIHdpdGggb2xkLCByb3RhdGVk
IGtleSBpZiBjdXJyZW50IGtleSBmYWlsZWQKICAgICgkZGF0YSwgJGFnZSkgPSAkY2hlY2stPigx
KSBpZiAhZGVmaW5lZCgkZGF0YSk7CgogICAgbXkgJGF1dGhfZmFpbHVyZSA9IHN1YiB7CglpZiAo
JG5vZXJyKSB7CgkgICAgcmV0dXJuIHVuZGVmOwoJfSBlbHNlIHsKCSAgICAjIHJhaXNlIGVycm9y
IHZpYSB1bmRlZiB0aWNrZXQKCSAgICBQVkU6OlRpY2tldDo6dmVyaWZ5X3JzYV90aWNrZXQodW5k
ZWYsICdQVkUnKTsKCX0KICAgIH07CgogICAgaWYgKCFkZWZpbmVkKCRkYXRhKSkgewoJcmV0dXJu
ICRhdXRoX2ZhaWx1cmUtPigpOwogICAgfQoKICAgIGlmICgkdGZhX3RpY2tldF9hYWQpIHsKCSMg
V2UncmUgdmFsaWRhdGluZyBhIHRpY2tldC1jYWxsJ3MgJ3RmYS1jaGFsbGVuZ2UnIHBhcmFtZXRl
ciwgc28ganVzdCByZXR1cm4gaXRzIGRhdGEuCglpZiAoJGRhdGEgPX4gL14hdGZhISguKikkLykg
ewoJICAgIHJldHVybiAkMTsKCX0KCWRpZSAiYmFkIHRpY2tldFxuIjsKICAgIH0KCiAgICBteSAo
JHVzZXJuYW1lLCAkdGZhX2luZm8pOwogICAgaWYgKCRkYXRhID1+IC9eIXRmYSEoLiopJC8pIHsK
CSMgUEJTIHN0eWxlIGhhbGYtYXV0aGVudGljYXRlZCB0aWNrZXQsIGNvbnRhaW5zIGEganNvbiBz
dHJpbmcgZm9ybSBvZiBhIGBUZmFDaGFsbGVuZ2VgCgkjIG9iamVjdC4KCSMgVGhpcyB0eXBlIG9m
IHRpY2tldCBkb2VzIG5vdCBjb250YWluIHRoZSB1c2VyIG5hbWUuCglyZXR1cm4geyB0eXBlID0+
ICduZXcnLCBkYXRhID0+ICQxIH07CiAgICB9CiAgICBpZiAoJGRhdGEgPX4gbXtedTJmIShbXiFd
KykhKFswLTlhLXpBLVovLj1fXC0rXSspJH0pIHsKCSMgVGlja2V0IGZvciB1MmYtdXNlcnM6Cgko
JHVzZXJuYW1lLCBteSAkY2hhbGxlbmdlKSA9ICgkMSwgJDIpOwoJaWYgKCRjaGFsbGVuZ2UgZXEg
J3ZlcmlmaWVkJykgewoJICAgICMgdTJmIGNoYWxsZW5nZSB3YXMgY29tcGxldGVkCgkgICAgJGNo
YWxsZW5nZSA9IHVuZGVmOwoJfSBlbHNpZiAoIXdhbnRhcnJheSkgewoJICAgICMgVGhlIGNhbGxl
ciBpcyBub3QgYXdhcmUgdGhlcmUgY291bGQgYmUgYW4gb25nb2luZyBjaGFsbGVuZ2UsCgkgICAg
IyBzbyB3ZSB0cmVhdCB0aGlzIHRpY2tldCBhcyBpbnZhbGlkOgoJICAgIHJldHVybiAkYXV0aF9m
YWlsdXJlLT4oKTsKCX0KCSR0ZmFfaW5mbyA9IHsKCSAgICB0eXBlID0+ICd1MmYnLAoJICAgIGNo
YWxsZW5nZSA9PiAkY2hhbGxlbmdlLAoJfTsKICAgIH0gZWxzaWYgKCRkYXRhID1+IC9edGZhISgu
KikkLykgewoJIyBUT1RQIGFuZCBZdWJpY28gZG9uJ3QgcmVxdWlyZSBhIGNoYWxsZW5nZSBzbyB0
aGlzIGlzIHRoZSBnZW5lcmljCgkjICdtaXNzaW5nIDJuZCBmYWN0b3IgdGlja2V0JwoJJHVzZXJu
YW1lID0gJDE7CgkkdGZhX2luZm8gPSB7IHR5cGUgPT4gJ3RmYScgfTsKICAgIH0gZWxzZSB7Cgkj
IFJlZ3VsYXIgdGlja2V0IChmdWxsIGFjY2VzcykKCSR1c2VybmFtZSA9ICRkYXRhOwogICAgfQoK
ICAgIHJldHVybiB1bmRlZiBpZiAhUFZFOjpBdXRoOjpQbHVnaW46OnZlcmlmeV91c2VybmFtZSgk
dXNlcm5hbWUsICRub2Vycik7CgogICAgcmV0dXJuIHdhbnRhcnJheSA/ICgkdXNlcm5hbWUsICRh
Z2UsICR0ZmFfaW5mbykgOiAkdXNlcm5hbWU7Cn0KCnN1YiB2ZXJpZnlfdG9rZW4gewogICAgbXkg
KCRhcGlfdG9rZW4pID0gQF87CgogICAgZGllICJubyBBUEkgdG9rZW4gc3BlY2lmaWVkXG4iIGlm
ICEkYXBpX3Rva2VuOwoKICAgIG15ICgkdG9rZW5pZCwgJHZhbHVlKTsKICAgIGlmICgkYXBpX3Rv
a2VuID1+IC9eKC4qKT0oLiopJC8pIHsKCSR0b2tlbmlkID0gJDE7CgkkdmFsdWUgPSAkMjsKICAg
IH0gZWxzZSB7CglkaWUgIm5vIHRva2VuaWQgc3BlY2lmaWVkXG4iOwogICAgfQoKICAgIG15ICgk
dXNlcm5hbWUsICR0b2tlbikgPSBzcGxpdF90b2tlbmlkKCR0b2tlbmlkKTsKCiAgICBteSAkdXNl
cmNmZyA9IGNmc19yZWFkX2ZpbGUoJ3VzZXIuY2ZnJyk7CiAgICBjaGVja191c2VyX2VuYWJsZWQo
JHVzZXJjZmcsICR1c2VybmFtZSk7CiAgICBjaGVja190b2tlbl9leGlzdCgkdXNlcmNmZywgJHVz
ZXJuYW1lLCAkdG9rZW4pOwoKICAgIG15ICR1c2VyID0gJHVzZXJjZmctPnt1c2Vyc30tPnskdXNl
cm5hbWV9OwogICAgbXkgJHRva2VuX2luZm8gPSAkdXNlci0+e3Rva2Vuc30tPnskdG9rZW59OwoK
ICAgIG15ICRjdGltZSA9IHRpbWUoKTsKICAgIGRpZSAidG9rZW4gJyR0b2tlbicgYWNjZXNzIGV4
cGlyZWRcbiIgaWYgJHRva2VuX2luZm8tPntleHBpcmV9ICYmICgkdG9rZW5faW5mby0+e2V4cGly
ZX0gPCAkY3RpbWUpOwoKICAgIGRpZSAiaW52YWxpZCB0b2tlbiB2YWx1ZSFcbiIgaWYgIVBWRTo6
Q2x1c3Rlcjo6dmVyaWZ5X3Rva2VuKCR0b2tlbmlkLCAkdmFsdWUpOwoKICAgIHJldHVybiB3YW50
YXJyYXkgPyAoJHRva2VuaWQpIDogJHRva2VuaWQ7Cn0KCm15ICRhc3NlbWJsZV9zaG9ydF9saXZl
ZF90aWNrZXQgPSBzdWIgewogICAgbXkgKCRwcmVmaXgsICR1c2VybmFtZSwgJHBhdGgpID0gQF87
CgogICAgbXkgJHJzYV9wcml2ID0gZ2V0X3ByaXZrZXkoKTsKCiAgICAkcGF0aCA9IG5vcm1hbGl6
ZV9wYXRoKCRwYXRoKTsKCiAgICBkaWUgImludmFsaWQgdGlja2V0IHBhdGhcbiIgaWYgIWRlZmlu
ZWQoJHBhdGgpOwoKICAgIG15ICRzZWNyZXRfZGF0YSA9ICIkdXNlcm5hbWU6JHBhdGgiOwoKICAg
IHJldHVybiBQVkU6OlRpY2tldDo6YXNzZW1ibGVfcnNhX3RpY2tldCgKCSRyc2FfcHJpdiwgJHBy
ZWZpeCwgdW5kZWYsICRzZWNyZXRfZGF0YSk7Cn07CgpteSAkdmVyaWZ5X3Nob3J0X2xpdmVkX3Rp
Y2tldCA9IHN1YiB7CiAgICBteSAoJHRpY2tldCwgJHByZWZpeCwgJHVzZXJuYW1lLCAkcGF0aCwg
JG5vZXJyKSA9IEBfOwoKICAgICRwYXRoID0gbm9ybWFsaXplX3BhdGgoJHBhdGgpOwoKICAgIGRp
ZSAiaW52YWxpZCB0aWNrZXQgcGF0aFxuIiBpZiAhZGVmaW5lZCgkcGF0aCk7CgogICAgbXkgJHNl
Y3JldF9kYXRhID0gIiR1c2VybmFtZTokcGF0aCI7CgogICAgbXkgKCRyc2FfcHViLCAkcnNhX210
aW1lKSA9IGdldF9wdWJrZXkoKTsKICAgIGlmICghJHJzYV9wdWIgfHwgKHRpbWUoKSAtICRyc2Ff
bXRpbWUgPiAkYXV0aGtleV9saWZldGltZSAmJiAkYXV0aGtleV9saWZldGltZSA+IDApKSB7Cglp
ZiAoJG5vZXJyKSB7CgkgICAgcmV0dXJuIHVuZGVmOwoJfSBlbHNlIHsKCSAgICAjIHJhaXNlIGVy
cm9yIHZpYSB1bmRlZiB0aWNrZXQKCSAgICBQVkU6OlRpY2tldDo6dmVyaWZ5X3JzYV90aWNrZXQo
JHJzYV9wdWIsICRwcmVmaXgpOwoJfQogICAgfQoKICAgIHJldHVybiBQVkU6OlRpY2tldDo6dmVy
aWZ5X3JzYV90aWNrZXQoCgkkcnNhX3B1YiwgJHByZWZpeCwgJHRpY2tldCwgJHNlY3JldF9kYXRh
LCAtMjAsIDQwLCAkbm9lcnIpOwp9OwoKIyBWTkMgdGlja2V0cwojIC0gdGhleSBkbyBub3QgY29u
dGFpbiB0aGUgdXNlcm5hbWUgaW4gcGxhaW4gdGV4dAojIC0gdGhleSBhcmUgcmVzdHJpY3RlZCB0
byBhIHNwZWNpZmljIHJlc291cmNlIHBhdGggKGV4YW1wbGU6ICcvdm1zLzEwMCcpCnN1YiBhc3Nl
bWJsZV92bmNfdGlja2V0IHsKICAgIG15ICgkdXNlcm5hbWUsICRwYXRoKSA9IEBfOwoKICAgIHJl
dHVybiAkYXNzZW1ibGVfc2hvcnRfbGl2ZWRfdGlja2V0LT4oJ1BWRVZOQycsICR1c2VybmFtZSwg
JHBhdGgpOwp9CgpzdWIgdmVyaWZ5X3ZuY190aWNrZXQgewogICAgbXkgKCR0aWNrZXQsICR1c2Vy
bmFtZSwgJHBhdGgsICRub2VycikgPSBAXzsKCiAgICByZXR1cm4gJHZlcmlmeV9zaG9ydF9saXZl
ZF90aWNrZXQtPigkdGlja2V0LCAnUFZFVk5DJywgJHVzZXJuYW1lLCAkcGF0aCwgJG5vZXJyKTsK
fQoKIyBUdW5uZWwgdGlja2V0cwojIC0gdGhleSBkbyBub3QgY29udGFpbiB0aGUgdXNlcm5hbWUg
aW4gcGxhaW4gdGV4dAojIC0gdGhleSBhcmUgcmVzdHJpY3RlZCB0byBhIHNwZWNpZmljIHJlc291
cmNlIHBhdGggKGV4YW1wbGU6ICcvdm1zLzEwMCcsICcvc29ja2V0L3J1bi9xZW11LXNlcnZlci8x
MjMuc3RvcmFnZScpCnN1YiBhc3NlbWJsZV90dW5uZWxfdGlja2V0IHsKICAgIG15ICgkdXNlcm5h
bWUsICRwYXRoKSA9IEBfOwoKICAgIHJldHVybiAkYXNzZW1ibGVfc2hvcnRfbGl2ZWRfdGlja2V0
LT4oJ1BWRVRVTk5FTCcsICR1c2VybmFtZSwgJHBhdGgpOwp9CgpzdWIgdmVyaWZ5X3R1bm5lbF90
aWNrZXQgewogICAgbXkgKCR0aWNrZXQsICR1c2VybmFtZSwgJHBhdGgsICRub2VycikgPSBAXzsK
CiAgICByZXR1cm4gJHZlcmlmeV9zaG9ydF9saXZlZF90aWNrZXQtPigkdGlja2V0LCAnUFZFVFVO
TkVMJywgJHVzZXJuYW1lLCAkcGF0aCwgJG5vZXJyKTsKfQoKc3ViIGFzc2VtYmxlX3NwaWNlX3Rp
Y2tldCB7CiAgICBteSAoJHVzZXJuYW1lLCAkdm1pZCwgJG5vZGUpID0gQF87CgogICAgbXkgJHNl
Y3JldCA9ICYkZ2V0X2NzcmZyX3NlY3JldCgpOwoKICAgIHJldHVybiBQVkU6OlRpY2tldDo6YXNz
ZW1ibGVfc3BpY2VfdGlja2V0KAoJJHNlY3JldCwgJHVzZXJuYW1lLCAkdm1pZCwgJG5vZGUpOwp9
CgpzdWIgdmVyaWZ5X3NwaWNlX2Nvbm5lY3RfdXJsIHsKICAgIG15ICgkY29ubmVjdF9zdHIpID0g
QF87CgogICAgbXkgJHNlY3JldCA9ICYkZ2V0X2NzcmZyX3NlY3JldCgpOwoKICAgIHJldHVybiBQ
VkU6OlRpY2tldDo6dmVyaWZ5X3NwaWNlX2Nvbm5lY3RfdXJsKCRzZWNyZXQsICRjb25uZWN0X3N0
cik7Cn0KCnN1YiByZWFkX3g1MDlfc3ViamVjdF9zcGljZSB7CiAgICBteSAoJGZpbGVuYW1lKSA9
IEBfOwoKICAgICMgcmVhZCB4NTA5IHN1YmplY3QKICAgIG15ICRiaW8gPSBOZXQ6OlNTTGVheTo6
QklPX25ld19maWxlKCRmaWxlbmFtZSwgJ3InKTsKICAgIGRpZSAiQ291bGQgbm90IG9wZW4gJGZp
bGVuYW1lIHVzaW5nIE9wZW5TU0xcbiIKCWlmICEkYmlvOwoKICAgIG15ICR4NTA5ID0gTmV0OjpT
U0xlYXk6OlBFTV9yZWFkX2Jpb19YNTA5KCRiaW8pOwogICAgTmV0OjpTU0xlYXk6OkJJT19mcmVl
KCRiaW8pOwoKICAgIGRpZSAiQ291bGQgbm90IHBhcnNlIFg1MDkgY2VydGlmaWNhdGUgaW4gJGZp
bGVuYW1lXG4iCglpZiAhJHg1MDk7CgogICAgbXkgJG5hbWVvYmogPSBOZXQ6OlNTTGVheTo6WDUw
OV9nZXRfc3ViamVjdF9uYW1lKCR4NTA5KTsKICAgIG15ICRzdWJqZWN0ID0gTmV0OjpTU0xlYXk6
Olg1MDlfTkFNRV9vbmVsaW5lKCRuYW1lb2JqKTsKICAgIE5ldDo6U1NMZWF5OjpYNTA5X2ZyZWUo
JHg1MDkpOwoKICAgICMgcmVtb3RlLXZpZXdlciB3YW50cyBjb21tYSBhcyBzZXBhcmF0b3IgKG5v
dCAnLycpCiAgICAkc3ViamVjdCA9fiBzIV4vISE7CiAgICAkc3ViamVjdCA9fiBzIS8oXHcrPSkh
LCQxIWc7CgogICAgcmV0dXJuICRzdWJqZWN0Owp9CgojIGhlbHBlciB0byBnZW5lcmF0ZSBTUElD
RSByZW1vdGUtdmlld2VyIGNvbmZpZ3VyYXRpb24Kc3ViIHJlbW90ZV92aWV3ZXJfY29uZmlnIHsK
ICAgIG15ICgkYXV0aHVzZXIsICR2bWlkLCAkbm9kZSwgJHByb3h5LCAkdGl0bGUsICRwb3J0KSA9
IEBfOwoKICAgIGlmICghJHByb3h5KSB7CglteSAkaG9zdCA9IGBob3N0bmFtZSAtZmAgfHwgUFZF
OjpJTm90aWZ5Ojpub2RlbmFtZSgpOwoJY2hvbXAgJGhvc3Q7CgkkcHJveHkgPSAkaG9zdDsKICAg
IH0KCiAgICBteSAoJHRpY2tldCwgJHByb3h5dGlja2V0KSA9IGFzc2VtYmxlX3NwaWNlX3RpY2tl
dCgkYXV0aHVzZXIsICR2bWlkLCAkbm9kZSk7CgogICAgbXkgJGZpbGVuYW1lID0gIi9ldGMvcHZl
L2xvY2FsL3B2ZS1zc2wucGVtIjsKICAgIG15ICRzdWJqZWN0ID0gcmVhZF94NTA5X3N1YmplY3Rf
c3BpY2UoJGZpbGVuYW1lKTsKCiAgICBteSAkY2FjZXJ0ID0gUFZFOjpUb29sczo6ZmlsZV9nZXRf
Y29udGVudHMoIi9ldGMvcHZlL3B2ZS1yb290LWNhLnBlbSIsIDgxOTIpOwogICAgJGNhY2VydCA9
fiBzL1xuL1xcbi9nOwoKICAgICRwcm94eSA9ICJbJHByb3h5XSIgaWYgTmV0OjpJUDo6aXBfaXNf
aXB2NigkcHJveHkpOwogICAgbXkgJGNvbmZpZyA9IHsKCSdzZWN1cmUtYXR0ZW50aW9uJyA9PiAi
Q3RybCtBbHQrSW5zIiwKCSd0b2dnbGUtZnVsbHNjcmVlbicgPT4gIlNoaWZ0K0YxMSIsCgkncmVs
ZWFzZS1jdXJzb3InID0+ICJDdHJsK0FsdCtSIiwKCXR5cGUgPT4gJ3NwaWNlJywKCXRpdGxlID0+
ICR0aXRsZSwKCWhvc3QgPT4gJHByb3h5dGlja2V0LCAjIHRoaXMgYnJlYWtzIHRscyBob3N0bmFt
ZSB2ZXJpZmljYXRpb24sIHNvIHdlIG5lZWQgdG8gdXNlICdob3N0LXN1YmplY3QnCglwcm94eSA9
PiAiaHR0cDovLyRwcm94eTozMTI4IiwKCSd0bHMtcG9ydCcgPT4gJHBvcnQsCgknaG9zdC1zdWJq
ZWN0JyA9PiAkc3ViamVjdCwKCWNhID0+ICRjYWNlcnQsCglwYXNzd29yZCA9PiAkdGlja2V0LAoJ
J2RlbGV0ZS10aGlzLWZpbGUnID0+IDEsCiAgICB9OwoKICAgIHJldHVybiAoJHRpY2tldCwgJHBy
b3h5dGlja2V0LCAkY29uZmlnKTsKfQoKc3ViIGNoZWNrX3VzZXJfZXhpc3QgewogICAgbXkgKCR1
c2VyY2ZnLCAkdXNlcm5hbWUsICRub2VycikgPSBAXzsKCiAgICAkdXNlcm5hbWUgPSBQVkU6OkF1
dGg6OlBsdWdpbjo6dmVyaWZ5X3VzZXJuYW1lKCR1c2VybmFtZSwgJG5vZXJyKTsKCiAgICByZXR1
cm4gdW5kZWYgaWYgISR1c2VybmFtZTsKICAgIHJldHVybiAkdXNlcmNmZy0+e3VzZXJzfS0+eyR1
c2VybmFtZX0gaWYgJHVzZXJjZmcgJiYgJHVzZXJjZmctPnt1c2Vyc30tPnskdXNlcm5hbWV9OwoK
ICAgIGRpZSAibm8gc3VjaCB1c2VyICgnJHVzZXJuYW1lJylcbiIgaWYgISRub2VycjsKCiAgICBy
ZXR1cm4gdW5kZWY7Cn0KCnN1YiBjaGVja191c2VyX2VuYWJsZWQgewogICAgbXkgKCR1c2VyY2Zn
LCAkdXNlcm5hbWUsICRub2VycikgPSBAXzsKCiAgICBteSAkZGF0YSA9IGNoZWNrX3VzZXJfZXhp
c3QoJHVzZXJjZmcsICR1c2VybmFtZSwgJG5vZXJyKTsKICAgIHJldHVybiB1bmRlZiBpZiAhJGRh
dGE7CgogICAgaWYgKCEkZGF0YS0+e2VuYWJsZX0pIHsKCWRpZSAidXNlciAnJHVzZXJuYW1lJyBp
cyBkaXNhYmxlZFxuIiBpZiAhJG5vZXJyOwoJcmV0dXJuIHVuZGVmOwogICAgfQoKICAgIG15ICRj
dGltZSA9IHRpbWUoKTsKICAgIG15ICRleHBpcmUgPSAkdXNlcmNmZy0+e3VzZXJzfS0+eyR1c2Vy
bmFtZX0tPntleHBpcmV9OwoKICAgIGlmICgkZXhwaXJlICYmICRleHBpcmUgPCAkY3RpbWUpIHsK
CWRpZSAidXNlciAnJHVzZXJuYW1lJyBhY2Nlc3MgZXhwaXJlZFxuIiBpZiAhJG5vZXJyOwoJcmV0
dXJuIHVuZGVmOwogICAgfQoKICAgIHJldHVybiAxOyAjIGVuYWJsZWQgYW5kIG5vdCBleHBpcmVk
Cn0KCnN1YiBjaGVja190b2tlbl9leGlzdCB7CiAgICBteSAoJHVzZXJjZmcsICR1c2VybmFtZSwg
JHRva2VuaWQsICRub2VycikgPSBAXzsKCiAgICBteSAkdXNlciA9IGNoZWNrX3VzZXJfZXhpc3Qo
JHVzZXJjZmcsICR1c2VybmFtZSwgJG5vZXJyKTsKICAgIHJldHVybiB1bmRlZiBpZiAhJHVzZXI7
CgogICAgcmV0dXJuICR1c2VyLT57dG9rZW5zfS0+eyR0b2tlbmlkfQoJaWYgZGVmaW5lZCgkdXNl
ci0+e3Rva2Vuc30pICYmICR1c2VyLT57dG9rZW5zfS0+eyR0b2tlbmlkfTsKCiAgICBkaWUgIm5v
IHN1Y2ggdG9rZW4gJyR0b2tlbmlkJyBmb3IgdXNlciAnJHVzZXJuYW1lJ1xuIiBpZiAhJG5vZXJy
OwoKICAgIHJldHVybiB1bmRlZjsKfQoKIyBkZXByZWNhdGVkCnN1YiB2ZXJpZnlfb25lX3RpbWVf
cHcgewogICAgbXkgKCR0eXBlLCAkdXNlcm5hbWUsICRrZXlzLCAkdGZhX2NmZywgJG90cCkgPSBA
XzsKCiAgICBkaWUgIm1pc3Npbmcgb25lIHRpbWUgcGFzc3dvcmQgZm9yIHR3by1mYWN0b3IgYXV0
aGVudGljYXRpb24gJyR0eXBlJ1xuIiBpZiAhJG90cDsKCiAgICAjIGZpeG1lOiBwcm94eSBzdXBw
b3J0PwogICAgbXkgJHByb3h5OwoKICAgIGlmICgkdHlwZSBlcSAneXViaWNvJykgewoJUFZFOjpP
VFA6Onl1Ymljb192ZXJpZnlfb3RwKCRvdHAsICRrZXlzLCAkdGZhX2NmZy0+e3VybH0sCgkJCQkg
ICAgJHRmYV9jZmctPntpZH0sICR0ZmFfY2ZnLT57a2V5fSwgJHByb3h5KTsKICAgIH0gZWxzaWYg
KCR0eXBlIGVxICdvYXRoJykgewoJUFZFOjpPVFA6Om9hdGhfdmVyaWZ5X290cCgkb3RwLCAka2V5
cywgJHRmYV9jZmctPntzdGVwfSwgJHRmYV9jZmctPntkaWdpdHN9KTsKICAgIH0gZWxzZSB7Cglk
aWUgInVua25vd24gdGZhIHR5cGUgJyR0eXBlJ1xuIjsKICAgIH0KfQoKIyBwYXNzd29yZCBzaG91
bGQgYmUgdXRmOCBlbmNvZGVkCiMgTm90ZTogc29tZSBwbHVnaW5zIGRlbGF5L3NsZWVwIGlmIGF1
dGggZmFpbHMKc3ViIGF1dGhlbnRpY2F0ZV91c2VyIDogcHJvdG90eXBlKCQkJCQ7JCkgewogICAg
bXkgKCR1c2VybmFtZSwgJHBhc3N3b3JkLCAkb3RwLCAkbmV3X2Zvcm1hdCwgJHRmYV9jaGFsbGVu
Z2UpID0gQF87CgogICAgZGllICJubyB1c2VybmFtZSBzcGVjaWZpZWRcbiIgaWYgISR1c2VybmFt
ZTsKCiAgICBteSAoJHJ1aWQsICRyZWFsbSk7CgogICAgKCR1c2VybmFtZSwgJHJ1aWQsICRyZWFs
bSkgPSBQVkU6OkF1dGg6OlBsdWdpbjo6dmVyaWZ5X3VzZXJuYW1lKCR1c2VybmFtZSk7CgogICAg
bXkgJHVzZXJjZmcgPSBQVkU6OlRvb2xzOjp1c2VyX2NmZ19lbmNvZGVfdXRmOChjZnNfcmVhZF9m
aWxlKCd1c2VyLmNmZycpKTsKCiAgICBjaGVja191c2VyX2VuYWJsZWQoJHVzZXJjZmcsICR1c2Vy
bmFtZSk7CgogICAgbXkgJGRvbWFpbl9jZmcgPSBjZnNfcmVhZF9maWxlKCdkb21haW5zLmNmZycp
OwoKICAgIG15ICRjZmcgPSAkZG9tYWluX2NmZy0+e2lkc30tPnskcmVhbG19OwogICAgZGllICJh
dXRoIGRvbWFpbiAnJHJlYWxtJyBkb2VzIG5vdCBleGlzdFxuIiBpZiAhJGNmZzsKICAgIG15ICRw
bHVnaW4gPSBQVkU6OkF1dGg6OlBsdWdpbi0+bG9va3VwKCRjZmctPnt0eXBlfSk7CgogICAgaWYg
KCR0ZmFfY2hhbGxlbmdlKSB7CgkjIFRoaXMgaXMgdGhlIDJuZCBmYWN0b3IsIHVzZSB0aGUgcGFz
c3dvcmQgZm9yIHRoZSBPVFAgcmVzcG9uc2UuCglteSAkdGZhX2NoYWxsZW5nZSA9IGF1dGhlbnRp
Y2F0ZV8ybmRfbmV3KCR1c2VybmFtZSwgJHJlYWxtLCAkcGFzc3dvcmQsICR0ZmFfY2hhbGxlbmdl
KTsKCXJldHVybiB3YW50YXJyYXkgPyAoJHVzZXJuYW1lLCAkdGZhX2NoYWxsZW5nZSkgOiAkdXNl
cm5hbWU7CiAgICB9CgogICAgJHBsdWdpbi0+YXV0aGVudGljYXRlX3VzZXIoJGNmZywgJHJlYWxt
LCAkcnVpZCwgJHBhc3N3b3JkKTsKCiAgICBpZiAoJG5ld19mb3JtYXQpIHsKCSMgVGhpcyBpcyB0
aGUgZmlyc3QgZmFjdG9yIHdpdGggYW4gb3B0aW9uYWwgaW1tZWRpYXRlIDJuZCBmYWN0b3IgZm9y
IFRPVFA6CglteSAkdGZhX2NoYWxsZW5nZSA9IGF1dGhlbnRpY2F0ZV8ybmRfbmV3KCR1c2VybmFt
ZSwgJHJlYWxtLCAkb3RwLCB1bmRlZik7CglyZXR1cm4gd2FudGFycmF5ID8gKCR1c2VybmFtZSwg
JHRmYV9jaGFsbGVuZ2UpIDogJHVzZXJuYW1lOwogICAgfSBlbHNlIHsKCXJldHVybiBhdXRoZW50
aWNhdGVfMm5kX29sZCgkdXNlcm5hbWUsICRyZWFsbSwgJG90cCk7CiAgICB9Cn0KCnN1YiBhdXRo
ZW50aWNhdGVfMm5kX29sZCA6IHByb3RvdHlwZSgkJCQpIHsKICAgIG15ICgkdXNlcm5hbWUsICRy
ZWFsbSwgJG90cCkgPSBAXzsKCiAgICBteSAoJHR5cGUsICR0ZmFfZGF0YSkgPSB1c2VyX2dldF90
ZmEoJHVzZXJuYW1lLCAkcmVhbG0sIDApOwogICAgaWYgKCR0eXBlKSB7CglpZiAoJHR5cGUgZXEg
J2luY29tcGF0aWJsZScpIHsKCSAgICBkaWUgIm9sZCBsb2dpbiBhcGkgZGlzYWJsZWQsIHVzZXIg
aGFzIGluY29tcGF0aWJsZSBURkEgZW50cmllc1xuIjsKCX0gZWxzaWYgKCR0eXBlIGVxICd1MmYn
KSB7CgkgICAgIyBOb3RlIHRoYXQgaWYgdGhlIHVzZXIgZGlkIG5vdCBtYW5hZ2UgdG8gY29tcGxl
dGUgdGhlIGluaXRpYWwgdTJmIHJlZ2lzdHJhdGlvbgoJICAgICMgY2hhbGxlbmdlIHdlIGhhdmUg
YSBoYXNoIGNvbnRhaW5pbmcgYSAnY2hhbGxlbmdlJyBlbnRyeSBpbiB0aGUgdXNlcidzIHRmYS5j
ZmcgZW50cnk6CgkgICAgJHRmYV9kYXRhID0gdW5kZWYgaWYgZXhpc3RzICR0ZmFfZGF0YS0+e2No
YWxsZW5nZX07Cgl9IGVsc2lmICghZGVmaW5lZCgkb3RwKSkgewoJICAgICMgVGhlIHVzZXIgcmVx
dWlyZXMgYSAybmQgZmFjdG9yIGJ1dCBoYXMgbm90IHByb3ZpZGVkIG9uZS4gUmV0dXJuIHN1Y2Nl
c3MgYnV0CgkgICAgIyBkb24ndCBjbGVhciAkdGZhX2RhdGEuCgl9IGVsc2UgewoJICAgIG15ICRr
ZXlzID0gJHRmYV9kYXRhLT57a2V5c307CgkgICAgbXkgJHRmYV9jZmcgPSAkdGZhX2RhdGEtPntj
b25maWd9OwoJICAgIHZlcmlmeV9vbmVfdGltZV9wdygkdHlwZSwgJHVzZXJuYW1lLCAka2V5cywg
JHRmYV9jZmcsICRvdHApOwoJICAgICR0ZmFfZGF0YSA9IHVuZGVmOwoJfQoKCSMgUmV0dXJuIHRo
ZSB0eXBlIGFsb25nIHdpdGggdGhlIHJlc3Q6CglpZiAoJHRmYV9kYXRhKSB7CgkgICAgJHRmYV9k
YXRhID0gewoJCXR5cGUgPT4gJHR5cGUsCgkJZGF0YSA9PiAkdGZhX2RhdGEsCgkgICAgfTsKCX0K
ICAgIH0KCiAgICByZXR1cm4gd2FudGFycmF5ID8gKCR1c2VybmFtZSwgJHRmYV9kYXRhKSA6ICR1
c2VybmFtZTsKfQoKc3ViIGF1dGhlbnRpY2F0ZV8ybmRfbmV3X2RvIDogcHJvdG90eXBlKCQkJCQp
IHsKICAgIG15ICgkdXNlcm5hbWUsICRyZWFsbSwgJHRmYV9yZXNwb25zZSwgJHRmYV9jaGFsbGVu
Z2UpID0gQF87CiAgICBteSAoJHRmYV9jZmcsICRyZWFsbV90ZmEpID0gdXNlcl9nZXRfdGZhKCR1
c2VybmFtZSwgJHJlYWxtLCAxKTsKCiAgICBpZiAoIWRlZmluZWQoJHRmYV9jZmcpKSB7CglyZXR1
cm4gdW5kZWY7CiAgICB9CgogICAgbXkgJHJlYWxtX3R5cGUgPSAkcmVhbG1fdGZhICYmICRyZWFs
bV90ZmEtPnt0eXBlfTsKICAgICMgdmVyaWZ5IHJlYWxtIHR5cGUgdW5sZXNzIHVzaW5nIHJlY292
ZXJ5IGtleXM6CiAgICBpZiAoZGVmaW5lZCgkcmVhbG1fdHlwZSkpIHsKCSRyZWFsbV90eXBlID0g
J3RvdHAnIGlmICRyZWFsbV90eXBlIGVxICdvYXRoJzsgIyB3ZSB1c2VkIHRvIGNhbGwgaXQgdGhh
dAoJaWYgKCRyZWFsbV90eXBlIGVxICd5dWJpY28nKSB7CgkgICAgIyBZdWJpY28gYXV0aCB3aWxs
IG5vdCBiZSBzdXBwb3J0ZWQgaW4gcnVzdCBmb3Igbm93Li4uCgkgICAgaWYgKCFkZWZpbmVkKCR0
ZmFfY2hhbGxlbmdlKSkgewoJCW15ICRjaGFsbGVuZ2UgPSB7IHl1YmljbyA9PiBKU09OOjp0cnVl
IH07CgkJIyBFdmVuIHdpdGggeXViaWNvIGF1dGggd2UgZG8gYWxsb3cgcmVjb3Zlcnkga2V5cyB0
byBiZSB1c2VkOgoJCWlmIChteSAkcmVjb3ZlcnkgPSAkdGZhX2NmZy0+cmVjb3Zlcnlfc3RhdGUo
JHVzZXJuYW1lKSkgewoJCSAgICAkY2hhbGxlbmdlLT57cmVjb3Zlcnl9ID0gJHJlY292ZXJ5OwoJ
CX0KCQlyZXR1cm4gdG9fanNvbigkY2hhbGxlbmdlKTsKCSAgICB9CgoJICAgIGlmICgkdGZhX3Jl
c3BvbnNlID1+IC9eeXViaWNvOiguKikkLykgewoJCSR0ZmFfcmVzcG9uc2UgPSAkMTsKCQkjIERl
ZmVyIHRvIGFmdGVyIHVubG9ja2luZyB0aGUgVEZBIGNvbmZpZzoKCQlyZXR1cm4gc3ViIHsKCQkg
ICAgYXV0aGVudGljYXRlX3l1Ymljb19uZXcoCgkJCSR0ZmFfY2ZnLCAkdXNlcm5hbWUsICRyZWFs
bV90ZmEsICR0ZmFfY2hhbGxlbmdlLCAkdGZhX3Jlc3BvbnNlLAoJCSAgICApOwoJCX07CgkgICAg
fQoJfQoKCW15ICRyZXNwb25zZV90eXBlOwoJaWYgKGRlZmluZWQoJHRmYV9yZXNwb25zZSkpIHsK
CSAgICBpZiAoJHRmYV9yZXNwb25zZSAhfiAvXihbXjpdKyk6LykgewoJCWRpZSAiYmFkIG90cCBy
ZXNwb25zZVxuIjsKCSAgICB9CgkgICAgJHJlc3BvbnNlX3R5cGUgPSAkMTsKCX0KCglkaWUgInJl
YWxtIHJlcXVpcmVzICRyZWFsbV90eXBlIGF1dGhlbnRpY2F0aW9uXG4iCgkgICAgaWYgJHJlc3Bv
bnNlX3R5cGUgJiYgJHJlc3BvbnNlX3R5cGUgbmUgJ3JlY292ZXJ5JyAmJiAkcmVzcG9uc2VfdHlw
ZSBuZSAkcmVhbG1fdHlwZTsKICAgIH0KCiAgICBjb25maWd1cmVfdTJmX2FuZF93YSgkdGZhX2Nm
Zyk7CgogICAgbXkgJG11c3Rfc2F2ZSA9IDA7CiAgICBpZiAoZGVmaW5lZCgkdGZhX2NoYWxsZW5n
ZSkpIHsKCSR0ZmFfY2hhbGxlbmdlID0gdmVyaWZ5X3RpY2tldCgkdGZhX2NoYWxsZW5nZSwgMCwg
JHVzZXJuYW1lKTsKCSRtdXN0X3NhdmUgPSAkdGZhX2NmZy0+YXV0aGVudGljYXRpb25fdmVyaWZ5
KCR1c2VybmFtZSwgJHRmYV9jaGFsbGVuZ2UsICR0ZmFfcmVzcG9uc2UpOwoJJHRmYV9jaGFsbGVu
Z2UgPSB1bmRlZjsKICAgIH0gZWxzZSB7CgkkdGZhX2NoYWxsZW5nZSA9ICR0ZmFfY2ZnLT5hdXRo
ZW50aWNhdGlvbl9jaGFsbGVuZ2UoJHVzZXJuYW1lKTsKCWlmIChkZWZpbmVkKCR0ZmFfcmVzcG9u
c2UpKSB7CgkgICAgaWYgKGRlZmluZWQoJHRmYV9jaGFsbGVuZ2UpKSB7CgkJJG11c3Rfc2F2ZSA9
ICR0ZmFfY2ZnLT5hdXRoZW50aWNhdGlvbl92ZXJpZnkoJHVzZXJuYW1lLCAkdGZhX2NoYWxsZW5n
ZSwgJHRmYV9yZXNwb25zZSk7CgkgICAgfSBlbHNlIHsKCQlkaWUgIm5vIHN1Y2ggY2hhbGxlbmdl
XG4iOwoJICAgIH0KCX0KICAgIH0KCiAgICBpZiAoJG11c3Rfc2F2ZSkgewoJY2ZzX3dyaXRlX2Zp
bGUoJ3ByaXYvdGZhLmNmZycsICR0ZmFfY2ZnKTsKICAgIH0KCiAgICByZXR1cm4gJHRmYV9jaGFs
bGVuZ2U7Cn0KCiMgUmV0dXJucyBhIHRmYSBjaGFsbGVuZ2Ugb3IgdW5kZWYuCnN1YiBhdXRoZW50
aWNhdGVfMm5kX25ldyA6IHByb3RvdHlwZSgkJCQkKSB7CiAgICBteSAoJHVzZXJuYW1lLCAkcmVh
bG0sICR0ZmFfcmVzcG9uc2UsICR0ZmFfY2hhbGxlbmdlKSA9IEBfOwoKICAgIG15ICRyZXN1bHQ7
CgogICAgaWYgKGRlZmluZWQoJHRmYV9yZXNwb25zZSkgJiYgJHRmYV9yZXNwb25zZSA9fiBtL15y
ZWNvdmVyeTovKSB7CgkkcmVzdWx0ID0gbG9ja190ZmFfY29uZmlnKHN1YiB7CgkgICAgYXV0aGVu
dGljYXRlXzJuZF9uZXdfZG8oJHVzZXJuYW1lLCAkcmVhbG0sICR0ZmFfcmVzcG9uc2UsICR0ZmFf
Y2hhbGxlbmdlKTsKCX0pOwogICAgfSBlbHNlIHsKCSRyZXN1bHQgPSBhdXRoZW50aWNhdGVfMm5k
X25ld19kbygkdXNlcm5hbWUsICRyZWFsbSwgJHRmYV9yZXNwb25zZSwgJHRmYV9jaGFsbGVuZ2Up
OwogICAgfQoKICAgICMgWXViaWNvIGF1dGggcmV0dXJucyB0aGUgYXV0aGVudGljYXRpb24gc3Vi
OgogICAgaWYgKHJlZigkcmVzdWx0KSBlcSAnQ09ERScpIHsKCSRyZXN1bHQgPSAkcmVzdWx0LT4o
KTsKICAgIH0KCiAgICByZXR1cm4gJHJlc3VsdDsKfQoKc3ViIGF1dGhlbnRpY2F0ZV95dWJpY29f
bmV3IDogcHJvdG90eXBlKCQkJCkgewogICAgbXkgKCR0ZmFfY2ZnLCAkdXNlcm5hbWUsICRyZWFs
bSwgJHRmYV9jaGFsbGVuZ2UsICRvdHApID0gQF87CgogICAgJHRmYV9jaGFsbGVuZ2UgPSB2ZXJp
ZnlfdGlja2V0KCR0ZmFfY2hhbGxlbmdlLCAwLCAkdXNlcm5hbWUpOwogICAgJHRmYV9jaGFsbGVu
Z2UgPSBmcm9tX2pzb24oJHRmYV9jaGFsbGVuZ2UpOwoKICAgIGlmICghJHRmYV9jaGFsbGVuZ2Ut
Pnt5dWJpY299KSB7CglkaWUgIm5vIHN1Y2ggY2hhbGxlbmdlXG4iOwogICAgfQoKICAgIG15ICRr
ZXlzID0gJHRmYV9jZmctPmdldF95dWJpY29fa2V5cygkdXNlcm5hbWUpOwogICAgZGllICJubyBr
ZXlzIGNvbmZpZ3VyZWRcbiIgaWYgIWRlZmluZWQoJGtleXMpIHx8ICFsZW5ndGgoJGtleXMpOwoK
ICAgIGF1dGhlbnRpY2F0ZV95dWJpY29fZG8oJG90cCwgJGtleXMsICRyZWFsbSk7CgogICAgIyBy
ZXR1cm4gYHVuZGVmYCB0byBjbGVhciB0aGUgdGZhIGNoYWxsZW5nZS4KICAgIHJldHVybiB1bmRl
ZjsKfQoKc3ViIGF1dGhlbnRpY2F0ZV95dWJpY29fZG8gOiBwcm90b3R5cGUoJCQkKSB7CiAgICBt
eSAoJHZhbHVlLCAka2V5cywgJHJlYWxtKSA9IEBfOwoKICAgICMgZml4bWU6IHByb3h5IHN1cHBv
cnQ/CiAgICBteSAkcHJveHkgPSB1bmRlZjsKCiAgICBQVkU6Ok9UUDo6eXViaWNvX3ZlcmlmeV9v
dHAoJHZhbHVlLCAka2V5cywgJHJlYWxtLT57dXJsfSwgJHJlYWxtLT57aWR9LCAkcmVhbG0tPntr
ZXl9LCAkcHJveHkpOwp9CgpzdWIgY29uZmlndXJlX3UyZl9hbmRfd2EgOiBwcm90b3R5cGUoJCkg
ewogICAgbXkgKCR0ZmFfY2ZnKSA9IEBfOwoKICAgIG15ICRycGNfb3JpZ2luOwogICAgbXkgJGdl
dF9vcmlnaW4gPSBzdWIgewoJcmV0dXJuICRycGNfb3JpZ2luIGlmIGRlZmluZWQoJHJwY19vcmln
aW4pOwoJbXkgJHJwY2VudiA9IFBWRTo6UlBDRW52aXJvbm1lbnQ6OmdldCgpOwoJaWYgKG15ICRv
cmlnaW4gPSAkcnBjZW52LT5nZXRfcmVxdWVzdF9ob3N0KDEpKSB7CgkgICAgJHJwY19vcmlnaW4g
PSAiaHR0cHM6Ly8kb3JpZ2luIjsKCSAgICByZXR1cm4gJHJwY19vcmlnaW47Cgl9CglkaWUgImZh
aWxlZCB0byBmaWd1cmUgb3V0IG9yaWdpblxuIjsKICAgIH07CgogICAgbXkgJGRjID0gY2ZzX3Jl
YWRfZmlsZSgnZGF0YWNlbnRlci5jZmcnKTsKICAgIGlmIChteSAkdTJmID0gJGRjLT57dTJmfSkg
ewoJZXZhbCB7CgkgICAgJHRmYV9jZmctPnNldF91MmZfY29uZmlnKHsKCQlvcmlnaW4gPT4gJHUy
Zi0+e29yaWdpbn0gLy8gJGdldF9vcmlnaW4tPigpLAoJCWFwcGlkID0+ICR1MmYtPnthcHBpZH0s
CgkgICAgfSk7Cgl9OwoJd2FybiAidTJmIHVuYXZhaWxhYmxlLCBjb25maWd1cmF0aW9uIGVycm9y
OiAkQFxuIiBpZiAkQDsKICAgIH0KICAgIGlmIChteSAkd2EgPSAkZGMtPnt3ZWJhdXRobn0pIHsK
CSR3YS0+e29yaWdpbn0gLy89ICRnZXRfb3JpZ2luLT4oKTsKCWV2YWwgeyAkdGZhX2NmZy0+c2V0
X3dlYmF1dGhuX2NvbmZpZyh7JSR3YX0pIH07Cgl3YXJuICJ3ZWJhdXRobiB1bmF2YWlsYWJsZSwg
Y29uZmlndXJhdGlvbiBlcnJvcjogJEBcbiIgaWYgJEA7CiAgICB9Cn0KCnN1YiBkb21haW5fc2V0
X3Bhc3N3b3JkIHsKICAgIG15ICgkcmVhbG0sICR1c2VybmFtZSwgJHBhc3N3b3JkKSA9IEBfOwoK
ICAgIGRpZSAibm8gYXV0aCBkb21haW4gc3BlY2lmaWVkIiBpZiAhJHJlYWxtOwoKICAgIG15ICRk
b21haW5fY2ZnID0gY2ZzX3JlYWRfZmlsZSgnZG9tYWlucy5jZmcnKTsKCiAgICBteSAkY2ZnID0g
JGRvbWFpbl9jZmctPntpZHN9LT57JHJlYWxtfTsKICAgIGRpZSAiYXV0aCBkb21haW4gJyRyZWFs
bScgZG9lcyBub3QgZXhpc3RcbiIgaWYgISRjZmc7CiAgICBteSAkcGx1Z2luID0gUFZFOjpBdXRo
OjpQbHVnaW4tPmxvb2t1cCgkY2ZnLT57dHlwZX0pOwogICAgJHBsdWdpbi0+c3RvcmVfcGFzc3dv
cmQoJGNmZywgJHJlYWxtLCAkdXNlcm5hbWUsICRwYXNzd29yZCk7Cn0KCnN1YiBpdGVyYXRlX2Fj
bF90cmVlIHsKICAgIG15ICgkcGF0aCwgJG5vZGUsICRjb2RlKSA9IEBfOwoKICAgICRjb2RlLT4o
JHBhdGgsICRub2RlKTsKCiAgICAkcGF0aCA9ICcnIGlmICRwYXRoIGVxICcvJzsgIyBhdm9pZCBs
ZWFkaW5nICcvLycKCiAgICBteSAkY2hpbGRyZW4gPSAkbm9kZS0+e2NoaWxkcmVufTsKCiAgICBm
b3JlYWNoIG15ICRjaGlsZCAoa2V5cyAlJGNoaWxkcmVuKSB7CglpdGVyYXRlX2FjbF90cmVlKCIk
cGF0aC8kY2hpbGQiLCAkY2hpbGRyZW4tPnskY2hpbGR9LCAkY29kZSk7CiAgICB9Cn0KCiMgZmlu
ZCBBQ0wgbm9kZSBjb3JyZXNwb25kaW5nIHRvIG5vcm1hbGl6ZWQgJHBhdGggdW5kZXIgJHJvb3QK
c3ViIGZpbmRfYWNsX3RyZWVfbm9kZSB7CiAgICBteSAoJHJvb3QsICRwYXRoKSA9IEBfOwoKICAg
IG15ICRzcGxpdF9wYXRoID0gWyBzcGxpdCgiLyIsICRwYXRoKSBdOwoKICAgIGlmICghJHNwbGl0
X3BhdGgpIHsKCXJldHVybiAkcm9vdDsKICAgIH0KCiAgICBteSAkbm9kZSA9ICRyb290OwogICAg
Zm9yIG15ICRwIChAJHNwbGl0X3BhdGgpIHsKCW5leHQgaWYgISRwOwoKCSRub2RlLT57Y2hpbGRy
ZW59ID0ge30gaWYgISRub2RlLT57Y2hpbGRyZW59OwoJJG5vZGUtPntjaGlsZHJlbn0tPnskcH0g
PSB7fSBpZiAhJG5vZGUtPntjaGlsZHJlbn0tPnskcH07CgoJJG5vZGUgPSAkbm9kZS0+e2NoaWxk
cmVufS0+eyRwfTsKICAgIH0KCiAgICByZXR1cm4gJG5vZGU7Cn0KCnN1YiBhZGRfdXNlcl9ncm91
cCB7CiAgICBteSAoJHVzZXJuYW1lLCAkdXNlcmNmZywgJGdyb3VwKSA9IEBfOwoKICAgICR1c2Vy
Y2ZnLT57dXNlcnN9LT57JHVzZXJuYW1lfS0+e2dyb3Vwc30tPnskZ3JvdXB9ID0gMTsKICAgICR1
c2VyY2ZnLT57Z3JvdXBzfS0+eyRncm91cH0tPnt1c2Vyc30tPnskdXNlcm5hbWV9ID0gMTsKfQoK
c3ViIGRlbGV0ZV91c2VyX2dyb3VwIHsKICAgIG15ICgkdXNlcm5hbWUsICR1c2VyY2ZnKSA9IEBf
OwoKICAgIGZvcmVhY2ggbXkgJGdyb3VwIChrZXlzICV7JHVzZXJjZmctPntncm91cHN9fSkgewoK
CWRlbGV0ZSAoJHVzZXJjZmctPntncm91cHN9LT57JGdyb3VwfS0+e3VzZXJzfS0+eyR1c2VybmFt
ZX0pCgkgICAgaWYgJHVzZXJjZmctPntncm91cHN9LT57JGdyb3VwfS0+e3VzZXJzfS0+eyR1c2Vy
bmFtZX07CiAgICB9Cn0KCnN1YiBkZWxldGVfdXNlcl9hY2wgewogICAgbXkgKCR1c2VybmFtZSwg
JHVzZXJjZmcpID0gQF87CgogICAgbXkgJGNvZGUgPSBzdWIgewoJbXkgKCRwYXRoLCAkYWNsX25v
ZGUpID0gQF87CgoJZGVsZXRlICgkYWNsX25vZGUtPnt1c2Vyc30tPnskdXNlcm5hbWV9KQoJICAg
IGlmICRhY2xfbm9kZS0+e3VzZXJzfS0+eyR1c2VybmFtZX07CiAgICB9OwoKICAgIGl0ZXJhdGVf
YWNsX3RyZWUoIi8iLCAkdXNlcmNmZy0+e2FjbF9yb290fSwgJGNvZGUpOwp9CgpzdWIgZGVsZXRl
X2dyb3VwX2FjbCB7CiAgICBteSAoJGdyb3VwLCAkdXNlcmNmZykgPSBAXzsKCiAgICBteSAkY29k
ZSA9IHN1YiB7CglteSAoJHBhdGgsICRhY2xfbm9kZSkgPSBAXzsKCglkZWxldGUgKCRhY2xfbm9k
ZS0+e2dyb3Vwc30tPnskZ3JvdXB9KQoJICAgIGlmICRhY2xfbm9kZS0+e2dyb3Vwc30tPnskZ3Jv
dXB9OwogICAgfTsKCiAgICBpdGVyYXRlX2FjbF90cmVlKCIvIiwgJHVzZXJjZmctPnthY2xfcm9v
dH0sICRjb2RlKTsKfQoKc3ViIGRlbGV0ZV9wb29sX2FjbCB7CiAgICBteSAoJHBvb2wsICR1c2Vy
Y2ZnKSA9IEBfOwoKICAgIGRlbGV0ZSAoJHVzZXJjZmctPnthY2xfcm9vdH0tPntjaGlsZHJlbn0t
Pntwb29sfS0+e2NoaWxkcmVufS0+eyRwb29sfSk7Cn0KCiMgd2UgYXV0b21hdGljYWxseSBjcmVh
dGUgc29tZSBwcmVkZWZpbmVkIHJvbGVzIGJ5IHNwbGl0dGluZyBwcml2cwojIGludG8gMyBncm91
cHMgKHBlciBjYXRlZ29yeSkKIyByb290OiBvbmx5IHJvb3QgaXMgYWxsb3dlZCB0byBkbyB0aGF0
CiMgYWRtaW46IGFuIGFkbWluaXN0cmF0b3IgY2FuIHRvIHRoYXQKIyB1c2VyOiBhIG5vcm1hbCB1
c2VyL2N1c3RvbWVyIGNhbiB0byB0aGF0Cm15ICRwcml2Z3JvdXBzID0gewogICAgVk0gPT4gewoJ
cm9vdCA9PiBbXSwKCWFkbWluID0+IFsKCSAgICAnVk0uQ29uZmlnLkRpc2snLAoJICAgICdWTS5D
b25maWcuQ1BVJywKCSAgICAnVk0uQ29uZmlnLk1lbW9yeScsCgkgICAgJ1ZNLkNvbmZpZy5OZXR3
b3JrJywKCSAgICAnVk0uQ29uZmlnLkhXVHlwZScsCgkgICAgJ1ZNLkNvbmZpZy5PcHRpb25zJywg
IyBjb3ZlcnMgYWxsIG90aGVyIHRoaW5ncwoJICAgICdWTS5BbGxvY2F0ZScsCgkgICAgJ1ZNLkNs
b25lJywKCSAgICAnVk0uTWlncmF0ZScsCgkgICAgJ1ZNLk1vbml0b3InLAoJICAgICdWTS5TbmFw
c2hvdCcsCgkgICAgJ1ZNLlNuYXBzaG90LlJvbGxiYWNrJywKCV0sCgl1c2VyID0+IFsKCSAgICAn
Vk0uQ29uZmlnLkNEUk9NJywgIyBjaGFuZ2UgQ0RST00gbWVkaWEKCSAgICAnVk0uQ29uZmlnLkNs
b3VkaW5pdCcsCgkgICAgJ1ZNLkNvbnNvbGUnLAoJICAgICdWTS5CYWNrdXAnLAoJICAgICdWTS5Q
b3dlck1nbXQnLAoJXSwKCWF1ZGl0ID0+IFsKCSAgICAnVk0uQXVkaXQnLAoJXSwKICAgIH0sCiAg
ICBTeXMgPT4gewoJcm9vdCA9PiBbCgkgICAgJ1N5cy5Qb3dlck1nbXQnLAoJICAgICdTeXMuTW9k
aWZ5JywgIyBlZGl0L2NoYW5nZSBub2RlIHNldHRpbmdzCgkgICAgJ1N5cy5JbmNvbWluZycsICMg
aW5jb21pbmcgc3RvcmFnZS9ndWVzdCBtaWdyYXRpb25zCgldLAoJYWRtaW4gPT4gWwoJICAgICdQ
ZXJtaXNzaW9ucy5Nb2RpZnknLAoJICAgICdTeXMuQ29uc29sZScsCgkgICAgJ1N5cy5TeXNsb2cn
LAoJXSwKCXVzZXIgPT4gW10sCglhdWRpdCA9PiBbCgkgICAgJ1N5cy5BdWRpdCcsCgldLAogICAg
fSwKICAgIERhdGFzdG9yZSA9PiB7Cglyb290ID0+IFtdLAoJYWRtaW4gPT4gWwoJICAgICdEYXRh
c3RvcmUuQWxsb2NhdGUnLAoJICAgICdEYXRhc3RvcmUuQWxsb2NhdGVUZW1wbGF0ZScsCgldLAoJ
dXNlciA9PiBbCgkgICAgJ0RhdGFzdG9yZS5BbGxvY2F0ZVNwYWNlJywKCV0sCglhdWRpdCA9PiBb
CgkgICAgJ0RhdGFzdG9yZS5BdWRpdCcsCgldLAogICAgfSwKICAgIFNETiA9PiB7Cglyb290ID0+
IFtdLAoJYWRtaW4gPT4gWwoJICAgICdTRE4uQWxsb2NhdGUnLAoJICAgICdTRE4uQXVkaXQnLAoJ
XSwKCWF1ZGl0ID0+IFsKCSAgICAnU0ROLkF1ZGl0JywKCV0sCiAgICB9LAogICAgVXNlciA9PiB7
Cglyb290ID0+IFsKCSAgICAnUmVhbG0uQWxsb2NhdGUnLAoJXSwKCWFkbWluID0+IFsKCSAgICAn
VXNlci5Nb2RpZnknLAoJICAgICdHcm91cC5BbGxvY2F0ZScsICMgZWRpdC9jaGFuZ2UgZ3JvdXAg
c2V0dGluZ3MKCSAgICAnUmVhbG0uQWxsb2NhdGVVc2VyJywKCV0sCgl1c2VyID0+IFtdLAoJYXVk
aXQgPT4gW10sCiAgICB9LAogICAgUG9vbCA9PiB7Cglyb290ID0+IFtdLAoJYWRtaW4gPT4gWwoJ
ICAgICdQb29sLkFsbG9jYXRlJywgIyBjcmVhdGUvZGVsZXRlIHBvb2xzCgldLAoJdXNlciA9PiBb
CgkgICAgJ1Bvb2wuQXVkaXQnLAoJXSwKCWF1ZGl0ID0+IFsKCSAgICAnUG9vbC5BdWRpdCcsCgld
LAogICAgfSwKfTsKCm15ICR2YWxpZF9wcml2cyA9IHt9OwoKbXkgJHNwZWNpYWxfcm9sZXMgPSB7
CiAgICAnTm9BY2Nlc3MnID0+IHt9LCAjIG5vIHByaXZpbGVnZXMKICAgICdBZG1pbmlzdHJhdG9y
JyA9PiAkdmFsaWRfcHJpdnMsICMgYWxsIHByaXZpbGVnZXMKfTsKCnN1YiBjcmVhdGVfcm9sZXMg
ewoKICAgIGZvcmVhY2ggbXkgJGNhdCAoa2V5cyAlJHByaXZncm91cHMpIHsKCW15ICRjZCA9ICRw
cml2Z3JvdXBzLT57JGNhdH07Cglmb3JlYWNoIG15ICRwIChAeyRjZC0+e3Jvb3R9fSwgQHskY2Qt
PnthZG1pbn19LAoJCSAgICAgICBAeyRjZC0+e3VzZXJ9fSwgQHskY2QtPnthdWRpdH19KSB7Cgkg
ICAgJHZhbGlkX3ByaXZzLT57JHB9ID0gMTsKCX0KCWZvcmVhY2ggbXkgJHAgKEB7JGNkLT57YWRt
aW59fSwgQHskY2QtPnt1c2VyfX0sIEB7JGNkLT57YXVkaXR9fSkgewoKCSAgICAkc3BlY2lhbF9y
b2xlcy0+eyJQVkUke2NhdH1BZG1pbiJ9LT57JHB9ID0gMTsKCSAgICAkc3BlY2lhbF9yb2xlcy0+
eyJQVkVBZG1pbiJ9LT57JHB9ID0gMTsKCX0KCWlmIChzY2FsYXIoQHskY2QtPnt1c2VyfX0pKSB7
CgkgICAgZm9yZWFjaCBteSAkcCAoQHskY2QtPnt1c2VyfX0sIEB7JGNkLT57YXVkaXR9fSkgewoJ
CSRzcGVjaWFsX3JvbGVzLT57IlBWRSR7Y2F0fVVzZXIifS0+eyRwfSA9IDE7CgkgICAgfQoJfQoJ
Zm9yZWFjaCBteSAkcCAoQHskY2QtPnthdWRpdH19KSB7CgkgICAgJHNwZWNpYWxfcm9sZXMtPnsi
UFZFQXVkaXRvciJ9LT57JHB9ID0gMTsKCX0KICAgIH0KCiAgICAkc3BlY2lhbF9yb2xlcy0+eyJQ
VkVUZW1wbGF0ZVVzZXIifSA9IHsgJ1ZNLkNsb25lJyA9PiAxLCAnVk0uQXVkaXQnID0+IDEgfTsK
fTsKCmNyZWF0ZV9yb2xlcygpOwoKc3ViIGNyZWF0ZV9wcml2X3Byb3BlcnRpZXMgewogICAgbXkg
JHByb3BlcnRpZXMgPSB7fTsKICAgIGZvcmVhY2ggbXkgJHByaXYgKGtleXMgJSR2YWxpZF9wcml2
cykgewoJJHByb3BlcnRpZXMtPnskcHJpdn0gPSB7CgkgICAgdHlwZSA9PiAnYm9vbGVhbicsCgkg
ICAgb3B0aW9uYWwgPT4gMSwKCX07CiAgICB9CiAgICByZXR1cm4gJHByb3BlcnRpZXM7Cn0KCnN1
YiByb2xlX2lzX3NwZWNpYWwgewogICAgbXkgKCRyb2xlKSA9IEBfOwogICAgcmV0dXJuIChleGlz
dHMgJHNwZWNpYWxfcm9sZXMtPnskcm9sZX0pID8gMSA6IDA7Cn0KCnN1YiBhZGRfcm9sZV9wcml2
cyB7CiAgICBteSAoJHJvbGUsICR1c2VyY2ZnLCAkcHJpdnMpID0gQF87CgogICAgcmV0dXJuIGlm
ICEkcHJpdnM7CgogICAgZGllICJyb2xlICckcm9sZScgZG9lcyBub3QgZXhpc3RcbiIgaWYgISR1
c2VyY2ZnLT57cm9sZXN9LT57JHJvbGV9OwoKICAgIGZvcmVhY2ggbXkgJHByaXYgKHNwbGl0X2xp
c3QoJHByaXZzKSkgewoJaWYgKGRlZmluZWQgKCR2YWxpZF9wcml2cy0+eyRwcml2fSkpIHsKCSAg
ICAkdXNlcmNmZy0+e3JvbGVzfS0+eyRyb2xlfS0+eyRwcml2fSA9IDE7Cgl9IGVsc2UgewoJICAg
IGRpZSAiaW52YWxpZCBwcml2aWxlZ2UgJyRwcml2J1xuIjsKCX0KICAgIH0KfQoKc3ViIGxvb2t1
cF91c2VybmFtZSB7CiAgICBteSAoJHVzZXJuYW1lLCAkbm9lcnIpID0gQF87CgogICAgJHVzZXJu
YW1lID1+IG0hXigke1BWRTo6QXV0aDo6UGx1Z2luOjp1c2VyX3JlZ2V4fSlcQCgke1BWRTo6QXV0
aDo6UGx1Z2luOjpyZWFsbV9yZWdleH0pJCE7CgogICAgbXkgJHJlYWxtID0gJDI7CiAgICBteSAk
ZG9tYWluX2NmZyA9IGNmc19yZWFkX2ZpbGUoImRvbWFpbnMuY2ZnIik7CiAgICBteSAkY2FzZXNl
bnNpdGl2ZSA9ICRkb21haW5fY2ZnLT57aWRzfS0+eyRyZWFsbX0tPnsnY2FzZS1zZW5zaXRpdmUn
fSAvLyAxOwogICAgbXkgJHVzZXJjZmcgPSBjZnNfcmVhZF9maWxlKCd1c2VyLmNmZycpOwoKICAg
IGlmICghJGNhc2VzZW5zaXRpdmUpIHsKCW15IEBtYXRjaGVzID0gZ3JlcCB7IGxjICR1c2VybmFt
ZSBlcSBsYyAkXyB9IChrZXlzICV7JHVzZXJjZmctPnt1c2Vyc319KTsKCglkaWUgImFtYmlndW91
cyBjYXNlIGluc2Vuc2l0aXZlIG1hdGNoIG9mIHVzZXJuYW1lICckdXNlcm5hbWUnLCBjYW5ub3Qg
c2FmZWx5IGdyYW50IGFjY2VzcyFcbiIKCSAgICBpZiBzY2FsYXIgQG1hdGNoZXMgPiAxICYmICEk
bm9lcnI7CgoJcmV0dXJuICRtYXRjaGVzWzBdCiAgICB9CgogICAgcmV0dXJuICR1c2VybmFtZTsK
fQoKc3ViIG5vcm1hbGl6ZV9wYXRoIHsKICAgIG15ICRwYXRoID0gc2hpZnQ7CgogICAgcmV0dXJu
IHVuZGVmIGlmICEkcGF0aDsKCiAgICAkcGF0aCA9fiBzfC8rfC98ZzsKCiAgICAkcGF0aCA9fiBz
fC8kfHw7CgogICAgJHBhdGggPSAnLycgaWYgISRwYXRoOwoKICAgICRwYXRoID0gIi8kcGF0aCIg
aWYgJHBhdGggIX4gbXxeL3w7CgogICAgcmV0dXJuIHVuZGVmIGlmICRwYXRoICF+IG18XltbOmFs
bnVtOl1cLlwtXF9cL10rJHw7CgogICAgcmV0dXJuICRwYXRoOwp9CgpzdWIgY2hlY2tfcGF0aCB7
CiAgICBteSAoJHBhdGgpID0gQF87CiAgICByZXR1cm4gJHBhdGggPX4gbSFeKAoJLwoJfC9hY2Nl
c3MKCXwvYWNjZXNzL2dyb3VwcwoJfC9hY2Nlc3MvZ3JvdXBzL1tbOmFsbnVtOl1cLlwtXF9dKwoJ
fC9hY2Nlc3MvcmVhbG0KCXwvYWNjZXNzL3JlYWxtL1tbOmFsbnVtOl1cLlwtXF9dKwoJfC9ub2Rl
cwoJfC9ub2Rlcy9bWzphbG51bTpdXC5cLVxfXSsKCXwvcG9vbAoJfC9wb29sL1tbOmFsbnVtOl1c
LlwtXF9dKwoJfC9zZG4KCXwvc2RuL3pvbmVzL1tbOmFsbnVtOl1cLlwtXF9dKwoJfC9zZG4vdm5l
dHMvW1s6YWxudW06XVwuXC1cX10rCgl8L3N0b3JhZ2UKCXwvc3RvcmFnZS9bWzphbG51bTpdXC5c
LVxfXSsKCXwvdm1zCgl8L3Ztcy9bMS05XVswLTldezIsfQogICAgKSQheHM7Cn0KClBWRTo6SlNP
TlNjaGVtYTo6cmVnaXN0ZXJfZm9ybWF0KCdwdmUtZ3JvdXBpZCcsIFwmdmVyaWZ5X2dyb3VwbmFt
ZSk7CnN1YiB2ZXJpZnlfZ3JvdXBuYW1lIHsKICAgIG15ICgkZ3JvdXBuYW1lLCAkbm9lcnIpID0g
QF87CgogICAgbXkgJHJ1cyA9IGRlY29kZSgndXRmOCcsICfQkNCw0JHQsdCS0LLQk9Cz0JTQtNCV
0LXQgdGR0JbQttCX0LfQmNC40JnQudCa0LrQm9C70JzQvNCd0L3QntC+0J/Qv9Cg0YDQodGB0KLR
gtCj0YPQpNGE0KXRhdCm0YbQp9GH0KjRiNCp0YnRitGM0YvQq9Ct0Y3QrtGO0K/RjycpOwogICAg
bXkgJHJhID0gJ0EtWmEtejAtOScuJHJ1cy4nXFwuXFxfXFwtJzsKICAgIGlmICgkZ3JvdXBuYW1l
ICF+IG0vXlskcmFdKyQvKSB7CgoJZGllICJncm91cCBuYW1lICckZ3JvdXBuYW1lJyBjb250YWlu
cyBpbnZhbGlkIGNoYXJhY3RlcnNcbiIgaWYgISRub2VycjsKCglyZXR1cm4gdW5kZWY7CiAgICB9
CgogICAgcmV0dXJuICRncm91cG5hbWU7Cn0KClBWRTo6SlNPTlNjaGVtYTo6cmVnaXN0ZXJfZm9y
bWF0KCdwdmUtcm9sZWlkJywgXCZ2ZXJpZnlfcm9sZW5hbWUpOwpzdWIgdmVyaWZ5X3JvbGVuYW1l
IHsKICAgIG15ICgkcm9sZW5hbWUsICRub2VycikgPSBAXzsKCiAgICBpZiAoJHJvbGVuYW1lICF+
IG0vXltBLVphLXowLTlcLlwtX10rJC8pIHsKCglkaWUgInJvbGUgbmFtZSAnJHJvbGVuYW1lJyBj
b250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnNcbiIgaWYgISRub2VycjsKCglyZXR1cm4gdW5kZWY7
CiAgICB9CgogICAgcmV0dXJuICRyb2xlbmFtZTsKfQoKUFZFOjpKU09OU2NoZW1hOjpyZWdpc3Rl
cl9mb3JtYXQoJ3B2ZS1wb29saWQnLCBcJnZlcmlmeV9wb29sbmFtZSk7CnN1YiB2ZXJpZnlfcG9v
bG5hbWUgewogICAgbXkgKCRwb29sbmFtZSwgJG5vZXJyKSA9IEBfOwoKICAgIGlmICgkcG9vbG5h
bWUgIX4gbS9eW0EtWmEtejAtOVwuXC1fXSskLykgewoKCWRpZSAicG9vbCBuYW1lICckcG9vbG5h
bWUnIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyc1xuIiBpZiAhJG5vZXJyOwoKCXJldHVybiB1
bmRlZjsKICAgIH0KCiAgICByZXR1cm4gJHBvb2xuYW1lOwp9CgpQVkU6OkpTT05TY2hlbWE6OnJl
Z2lzdGVyX2Zvcm1hdCgncHZlLXByaXYnLCBcJnZlcmlmeV9wcml2bmFtZSk7CnN1YiB2ZXJpZnlf
cHJpdm5hbWUgewogICAgbXkgKCRwcml2LCAkbm9lcnIpID0gQF87CgogICAgaWYgKCEkdmFsaWRf
cHJpdnMtPnskcHJpdn0pIHsKCWRpZSAiaW52YWxpZCBwcml2aWxlZ2UgJyRwcml2J1xuIiBpZiAh
JG5vZXJyOwoKCXJldHVybiB1bmRlZjsKICAgIH0KCiAgICByZXR1cm4gJHByaXY7Cn0KCnN1YiB1
c2VyY29uZmlnX2ZvcmNlX2RlZmF1bHRzIHsKICAgIG15ICgkY2ZnKSA9IEBfOwoKICAgIGZvcmVh
Y2ggbXkgJHIgKGtleXMgJSRzcGVjaWFsX3JvbGVzKSB7CgkkY2ZnLT57cm9sZXN9LT57JHJ9ID0g
JHNwZWNpYWxfcm9sZXMtPnskcn07CiAgICB9CgogICAgIyBhZGQgcm9vdCB1c2VyIGlmIG5vdCBl
eGlzdHMKICAgIGlmICghJGNmZy0+e3VzZXJzfS0+eydyb290QHBhbSd9KSB7CgkkY2ZnLT57dXNl
cnN9LT57J3Jvb3RAcGFtJ30tPntlbmFibGV9ID0gMTsKICAgIH0KCiAgICAjIGFkZCAoZW1wdHkp
IEFDTCB0cmVlIHJvb3Qgbm9kZQogICAgaWYgKCEkY2ZnLT57YWNsX3Jvb3R9KSB7CgkkY2ZnLT57
YWNsX3Jvb3R9ID0ge307CiAgICB9Cn0KCnN1YiBwYXJzZV91c2VyX2NvbmZpZyB7CiAgICBteSAo
JGZpbGVuYW1lLCAkcmF3KSA9IEBfOwoKICAgIG15ICRjZmcgPSB7fTsKCiAgICB1c2VyY29uZmln
X2ZvcmNlX2RlZmF1bHRzKCRjZmcpOwoKICAgICRyYXcgPSAnJyBpZiAhZGVmaW5lZCgkcmF3KTsK
ICAgIHdoaWxlICgkcmF3ID1+IC9eXHMqKC4rPylccyokL2dtKSB7CglteSAkbGluZSA9ICQxOwoJ
bXkgQGRhdGE7CgoJZm9yZWFjaCBteSAkZCAoc3BsaXQgKC86LywgJGxpbmUpKSB7CgkgICAgJGQg
PX4gcy9eXHMrLy87CgkgICAgJGQgPX4gcy9ccyskLy87CgkgICAgcHVzaCBAZGF0YSwgJGQKCX0K
CglteSAkZXQgPSBzaGlmdCBAZGF0YTsKCglpZiAoJGV0IGVxICd1c2VyJykgewoJICAgIG15ICgk
dXNlciwgJGVuYWJsZSwgJGV4cGlyZSwgJGZpcnN0bmFtZSwgJGxhc3RuYW1lLCAkZW1haWwsICRj
b21tZW50LCAka2V5cykgPSBAZGF0YTsKCgkgICAgbXkgKHVuZGVmLCB1bmRlZiwgJHJlYWxtKSA9
IFBWRTo6QXV0aDo6UGx1Z2luOjp2ZXJpZnlfdXNlcm5hbWUoJHVzZXIsIDEpOwoJICAgIGlmICgh
JHJlYWxtKSB7CgkJd2FybiAidXNlciBjb25maWcgLSBpZ25vcmUgdXNlciAnJHVzZXInIC0gaW52
YWxpZCB1c2VyIG5hbWVcbiI7CgkJbmV4dDsKCSAgICB9CgoJICAgICRlbmFibGUgPSAkZW5hYmxl
ID8gMSA6IDA7CgoJICAgICRleHBpcmUgPSAwIGlmICEkZXhwaXJlOwoKCSAgICBpZiAoJGV4cGly
ZSAhfiBtL15cZCskLykgewoJCXdhcm4gInVzZXIgY29uZmlnIC0gaWdub3JlIHVzZXIgJyR1c2Vy
JyAtIChpbGxlZ2FsIGNoYXJhY3RlcnMgaW4gZXhwaXJlICckZXhwaXJlJylcbiI7CgkJbmV4dDsK
CSAgICB9CgkgICAgJGV4cGlyZSA9IGludCgkZXhwaXJlKTsKCgkgICAgI2lmICghdmVyaWZ5X2dy
b3VwbmFtZSAoJGdyb3VwLCAxKSkgewoJICAgICMgICAgd2FybiAidXNlciBjb25maWcgLSBpZ25v
cmUgdXNlciAnJHVzZXInIC0gaW52YWxpZCBjaGFyYWN0ZXJzIGluIGdyb3VwIG5hbWVcbiI7Cgkg
ICAgIyAgICBuZXh0OwoJICAgICN9CgoJICAgICRjZmctPnt1c2Vyc30tPnskdXNlcn0gPSB7CgkJ
ZW5hYmxlID0+ICRlbmFibGUsCgkJIyBncm91cCA9PiAkZ3JvdXAsCgkgICAgfTsKCSAgICAkY2Zn
LT57dXNlcnN9LT57JHVzZXJ9LT57Zmlyc3RuYW1lfSA9IFBWRTo6VG9vbHM6OmRlY29kZV90ZXh0
KCRmaXJzdG5hbWUpIGlmICRmaXJzdG5hbWU7CgkgICAgJGNmZy0+e3VzZXJzfS0+eyR1c2VyfS0+
e2xhc3RuYW1lfSA9IFBWRTo6VG9vbHM6OmRlY29kZV90ZXh0KCRsYXN0bmFtZSkgaWYgJGxhc3Ru
YW1lOwoJICAgICRjZmctPnt1c2Vyc30tPnskdXNlcn0tPntlbWFpbH0gPSAkZW1haWw7CgkgICAg
JGNmZy0+e3VzZXJzfS0+eyR1c2VyfS0+e2NvbW1lbnR9ID0gUFZFOjpUb29sczo6ZGVjb2RlX3Rl
eHQoJGNvbW1lbnQpIGlmICRjb21tZW50OwoJICAgICRjZmctPnt1c2Vyc30tPnskdXNlcn0tPntl
eHBpcmV9ID0gJGV4cGlyZTsKCSAgICAjIGtleXM6IGFsbG93ZWQgeXViaWNvIGtleSBpZHMgb3Ig
b2F0aCBzZWNyZXRzIChiYXNlMzIgZW5jb2RlZCkKCSAgICAkY2ZnLT57dXNlcnN9LT57JHVzZXJ9
LT57a2V5c30gPSAka2V5cyBpZiAka2V5czsKCgkgICAgIyRjZmctPnt1c2Vyc30tPnskdXNlcn0t
Pntncm91cHN9LT57JGdyb3VwfSA9IDE7CgkgICAgIyRjZmctPntncm91cHN9LT57JGdyb3VwfS0+
eyR1c2VyfSA9IDE7CgoJfSBlbHNpZiAoJGV0IGVxICdncm91cCcpIHsKCSAgICBteSAoJGdyb3Vw
LCAkdXNlcmxpc3QsICRjb21tZW50KSA9IEBkYXRhOwoKCSAgICBpZiAoIXZlcmlmeV9ncm91cG5h
bWUoJGdyb3VwLCAxKSkgewoJCXdhcm4gInVzZXIgY29uZmlnIC0gaWdub3JlIGdyb3VwICckZ3Jv
dXAnIC0gaW52YWxpZCBjaGFyYWN0ZXJzIGluIGdyb3VwIG5hbWVcbiI7CgkJbmV4dDsKCSAgICB9
CgoJICAgICMgbWFrZSBzdXJlIHRvIGFkZCB0aGUgZ3JvdXAgKGV2ZW4gaWYgdGhlcmUgYXJlIG5v
IG1lbWJlcnMpCgkgICAgJGNmZy0+e2dyb3Vwc30tPnskZ3JvdXB9ID0geyB1c2VycyA9PiB7fSB9
IGlmICEkY2ZnLT57Z3JvdXBzfS0+eyRncm91cH07CgoJICAgICRjZmctPntncm91cHN9LT57JGdy
b3VwfS0+e2NvbW1lbnR9ID0gUFZFOjpUb29sczo6ZGVjb2RlX3RleHQoJGNvbW1lbnQpIGlmICRj
b21tZW50OwoKCSAgICBmb3JlYWNoIG15ICR1c2VyIChzcGxpdF9saXN0KCR1c2VybGlzdCkpIHsK
CgkJaWYgKCFQVkU6OkF1dGg6OlBsdWdpbjo6dmVyaWZ5X3VzZXJuYW1lKCR1c2VyLCAxKSkgewoJ
CSAgICB3YXJuICJ1c2VyIGNvbmZpZyAtIGlnbm9yZSBpbnZhbGlkIGdyb3VwIG1lbWJlciAnJHVz
ZXInXG4iOwoJCSAgICBuZXh0OwoJCX0KCgkJaWYgKCRjZmctPnt1c2Vyc30tPnskdXNlcn0pIHsg
IyB1c2VyIGV4aXN0cwoJCSAgICAkY2ZnLT57dXNlcnN9LT57JHVzZXJ9LT57Z3JvdXBzfS0+eyRn
cm91cH0gPSAxOwoJCX0gZWxzZSB7CgkJICAgIHdhcm4gInVzZXIgY29uZmlnIC0gaWdub3JlIGlu
dmFsaWQgZ3JvdXAgbWVtYmVyICckdXNlcidcbiI7CgkJfQoJCSRjZmctPntncm91cHN9LT57JGdy
b3VwfS0+e3VzZXJzfS0+eyR1c2VyfSA9IDE7CgkgICAgfQoKCX0gZWxzaWYgKCRldCBlcSAncm9s
ZScpIHsKCSAgICBteSAoJHJvbGUsICRwcml2bGlzdCkgPSBAZGF0YTsKCgkgICAgaWYgKCF2ZXJp
Znlfcm9sZW5hbWUoJHJvbGUsIDEpKSB7CgkJd2FybiAidXNlciBjb25maWcgLSBpZ25vcmUgcm9s
ZSAnJHJvbGUnIC0gaW52YWxpZCBjaGFyYWN0ZXJzIGluIHJvbGUgbmFtZVxuIjsKCQluZXh0OwoJ
ICAgIH0KCgkgICAgIyBtYWtlIHN1cmUgdG8gYWRkIHRoZSByb2xlIChldmVuIGlmIHRoZXJlIGFy
ZSBubyBwcml2aWxlZ2VzKQoJICAgICRjZmctPntyb2xlc30tPnskcm9sZX0gPSB7fSBpZiAhJGNm
Zy0+e3JvbGVzfS0+eyRyb2xlfTsKCgkgICAgZm9yZWFjaCBteSAkcHJpdiAoc3BsaXRfbGlzdCgk
cHJpdmxpc3QpKSB7CgkJaWYgKGRlZmluZWQgKCR2YWxpZF9wcml2cy0+eyRwcml2fSkpIHsKCQkg
ICAgJGNmZy0+e3JvbGVzfS0+eyRyb2xlfS0+eyRwcml2fSA9IDE7CgkJfSBlbHNlIHsKCQkgICAg
d2FybiAidXNlciBjb25maWcgLSBpZ25vcmUgaW52YWxpZCBwcml2aWxlZ2UgJyRwcml2J1xuIjsK
CQl9CgkgICAgfQoKCX0gZWxzaWYgKCRldCBlcSAnYWNsJykgewoJICAgIG15ICgkcHJvcGFnYXRl
LCAkcGF0aHR4dCwgJHVnbGlzdCwgJHJvbGVsaXN0KSA9IEBkYXRhOwoKCSAgICAkcHJvcGFnYXRl
ID0gJHByb3BhZ2F0ZSA/IDEgOiAwOwoKCSAgICBpZiAobXkgJHBhdGggPSBub3JtYWxpemVfcGF0
aCgkcGF0aHR4dCkpIHsKCQlteSAkYWNsX25vZGU7CgkJZm9yZWFjaCBteSAkcm9sZSAoc3BsaXRf
bGlzdCgkcm9sZWxpc3QpKSB7CgoJCSAgICBpZiAoIXZlcmlmeV9yb2xlbmFtZSgkcm9sZSwgMSkp
IHsKCQkJd2FybiAidXNlciBjb25maWcgLSBpZ25vcmUgaW52YWxpZCByb2xlIG5hbWUgJyRyb2xl
JyBpbiBhY2xcbiI7CgkJCW5leHQ7CgkJICAgIH0KCgkJICAgIGlmICghJGNmZy0+e3JvbGVzfS0+
eyRyb2xlfSkgewoJCQl3YXJuICJ1c2VyIGNvbmZpZyAtIGlnbm9yZSBpbnZhbGlkIGFjbCByb2xl
ICckcm9sZSdcbiI7CgkJCW5leHQ7CgkJICAgIH0KCgkJICAgIGZvcmVhY2ggbXkgJHVnIChzcGxp
dF9saXN0KCR1Z2xpc3QpKSB7CgkJCW15ICgkZ3JvdXApID0gJHVnID1+IG0vXkAoXFMrKSQvOwoK
CQkJaWYgKCRncm91cCAmJiB2ZXJpZnlfZ3JvdXBuYW1lKCRncm91cCwgMSkpIHsKCQkJICAgIGlm
ICghJGNmZy0+e2dyb3Vwc30tPnskZ3JvdXB9KSB7ICMgZ3JvdXAgZG9lcyBub3QgZXhpc3QKCQkJ
CXdhcm4gInVzZXIgY29uZmlnIC0gaWdub3JlIGludmFsaWQgYWNsIGdyb3VwICckZ3JvdXAnXG4i
OwoJCQkgICAgfQoJCQkgICAgJGFjbF9ub2RlID0gZmluZF9hY2xfdHJlZV9ub2RlKCRjZmctPnth
Y2xfcm9vdH0sICRwYXRoKSBpZiAhJGFjbF9ub2RlOwoJCQkgICAgJGFjbF9ub2RlLT57Z3JvdXBz
fS0+eyRncm91cH0tPnskcm9sZX0gPSAkcHJvcGFnYXRlOwoJCQl9IGVsc2lmIChQVkU6OkF1dGg6
OlBsdWdpbjo6dmVyaWZ5X3VzZXJuYW1lKCR1ZywgMSkpIHsKCQkJICAgIGlmICghJGNmZy0+e3Vz
ZXJzfS0+eyR1Z30pIHsgIyB1c2VyIGRvZXMgbm90IGV4aXN0CgkJCQl3YXJuICJ1c2VyIGNvbmZp
ZyAtIGlnbm9yZSBpbnZhbGlkIGFjbCBtZW1iZXIgJyR1ZydcbiI7CgkJCSAgICB9CgkJCSAgICAk
YWNsX25vZGUgPSBmaW5kX2FjbF90cmVlX25vZGUoJGNmZy0+e2FjbF9yb290fSwgJHBhdGgpIGlm
ICEkYWNsX25vZGU7CgkJCSAgICAkYWNsX25vZGUtPnt1c2Vyc30tPnskdWd9LT57JHJvbGV9ID0g
JHByb3BhZ2F0ZTsKCQkJfSBlbHNpZiAobXkgKCR1c2VyLCAkdG9rZW4pID0gc3BsaXRfdG9rZW5p
ZCgkdWcsIDEpKSB7CgkJCSAgICBpZiAoY2hlY2tfdG9rZW5fZXhpc3QoJGNmZywgJHVzZXIsICR0
b2tlbiwgMSkpIHsKCQkJCSRhY2xfbm9kZSA9IGZpbmRfYWNsX3RyZWVfbm9kZSgkY2ZnLT57YWNs
X3Jvb3R9LCAkcGF0aCkgaWYgISRhY2xfbm9kZTsKCQkJCSRhY2xfbm9kZS0+e3Rva2Vuc30tPnsk
dWd9LT57JHJvbGV9ID0gJHByb3BhZ2F0ZTsKCQkJICAgIH0gZWxzZSB7CgkJCQl3YXJuICJ1c2Vy
IGNvbmZpZyAtIGlnbm9yZSBpbnZhbGlkIGFjbCB0b2tlbiAnJHVnJ1xuIjsKCQkJICAgIH0KCQkJ
fSBlbHNlIHsKCQkJICAgIHdhcm4gInVzZXIgY29uZmlnIC0gaW52YWxpZCB1c2VyL2dyb3VwICck
dWcnIGluIGFjbFxuIjsKCQkJfQoJCSAgICB9CgkJfQoJICAgIH0gZWxzZSB7CgkJd2FybiAidXNl
ciBjb25maWcgLSBpZ25vcmUgaW52YWxpZCBwYXRoIGluIGFjbCAnJHBhdGh0eHQnXG4iOwoJICAg
IH0KCX0gZWxzaWYgKCRldCBlcSAncG9vbCcpIHsKCSAgICBteSAoJHBvb2wsICRjb21tZW50LCAk
dm1saXN0LCAkc3RvcmVsaXN0KSA9IEBkYXRhOwoKCSAgICBpZiAoIXZlcmlmeV9wb29sbmFtZSgk
cG9vbCwgMSkpIHsKCQl3YXJuICJ1c2VyIGNvbmZpZyAtIGlnbm9yZSBwb29sICckcG9vbCcgLSBp
bnZhbGlkIGNoYXJhY3RlcnMgaW4gcG9vbCBuYW1lXG4iOwoJCW5leHQ7CgkgICAgfQoKCSAgICAj
IG1ha2Ugc3VyZSB0byBhZGQgdGhlIHBvb2wgKGV2ZW4gaWYgdGhlcmUgYXJlIG5vIG1lbWJlcnMp
CgkgICAgJGNmZy0+e3Bvb2xzfS0+eyRwb29sfSA9IHsgdm1zID0+IHt9LCBzdG9yYWdlID0+IHt9
IH0gaWYgISRjZmctPntwb29sc30tPnskcG9vbH07CgoJICAgICRjZmctPntwb29sc30tPnskcG9v
bH0tPntjb21tZW50fSA9IFBWRTo6VG9vbHM6OmRlY29kZV90ZXh0KCRjb21tZW50KSBpZiAkY29t
bWVudDsKCgkgICAgZm9yZWFjaCBteSAkdm1pZCAoc3BsaXRfbGlzdCgkdm1saXN0KSkgewoJCWlm
ICgkdm1pZCAhfiBtL15cZCskLykgewoJCSAgICB3YXJuICJ1c2VyIGNvbmZpZyAtIGlnbm9yZSBp
bnZhbGlkIHZtaWQgJyR2bWlkJyBpbiBwb29sICckcG9vbCdcbiI7CgkJICAgIG5leHQ7CgkJfQoJ
CSR2bWlkID0gaW50KCR2bWlkKTsKCgkJaWYgKCRjZmctPnt2bXN9LT57JHZtaWR9KSB7CgkJICAg
IHdhcm4gInVzZXIgY29uZmlnIC0gaWdub3JlIGR1cGxpY2F0ZSB2bWlkICckdm1pZCcgaW4gcG9v
bCAnJHBvb2wnXG4iOwoJCSAgICBuZXh0OwoJCX0KCgkJJGNmZy0+e3Bvb2xzfS0+eyRwb29sfS0+
e3Ztc30tPnskdm1pZH0gPSAxOwoKCQkjIHJlY29yZCB2bWlkID09PiBwb29sIHJlbGF0aW9uCgkJ
JGNmZy0+e3Ztc30tPnskdm1pZH0gPSAkcG9vbDsKCSAgICB9CgoJICAgIGZvcmVhY2ggbXkgJHN0
b3JlaWQgKHNwbGl0X2xpc3QoJHN0b3JlbGlzdCkpIHsKCQlpZiAoJHN0b3JlaWQgIX4gbS9eW2Et
el1bYS16MC05XC1cX1wuXSpbYS16MC05XSQvaSkgewoJCSAgICB3YXJuICJ1c2VyIGNvbmZpZyAt
IGlnbm9yZSBpbnZhbGlkIHN0b3JhZ2UgJyRzdG9yZWlkJyBpbiBwb29sICckcG9vbCdcbiI7CgkJ
ICAgIG5leHQ7CgkJfQoJCSRjZmctPntwb29sc30tPnskcG9vbH0tPntzdG9yYWdlfS0+eyRzdG9y
ZWlkfSA9IDE7CgkgICAgfQoJfSBlbHNpZiAoJGV0IGVxICd0b2tlbicpIHsKCSAgICBteSAoJHRv
a2VuaWQsICRleHBpcmUsICRwcml2c2VwLCAkY29tbWVudCkgPSBAZGF0YTsKCgkgICAgbXkgKCR1
c2VyLCAkdG9rZW4pID0gc3BsaXRfdG9rZW5pZCgkdG9rZW5pZCwgMSk7CgkgICAgaWYgKCEoJHVz
ZXIgJiYgJHRva2VuKSkgewoJCXdhcm4gInVzZXIgY29uZmlnIC0gaWdub3JlIGludmFsaWQgdG9r
ZW5pZCAnJHRva2VuaWQnXG4iOwoJCW5leHQ7CgkgICAgfQoKCSAgICAkcHJpdnNlcCA9ICRwcml2
c2VwID8gMSA6IDA7CgoJICAgICRleHBpcmUgPSAwIGlmICEkZXhwaXJlOwoKCSAgICBpZiAoJGV4
cGlyZSAhfiBtL15cZCskLykgewoJCXdhcm4gInVzZXIgY29uZmlnIC0gaWdub3JlIHRva2VuICck
dG9rZW5pZCcgLSAoaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGV4cGlyZSAnJGV4cGlyZScpXG4iOwoJ
CW5leHQ7CgkgICAgfQoJICAgICRleHBpcmUgPSBpbnQoJGV4cGlyZSk7CgoJICAgIGlmIChteSAk
dXNlcl9jZmcgPSAkY2ZnLT57dXNlcnN9LT57JHVzZXJ9KSB7ICMgdXNlciBleGlzdHMKCQkkdXNl
cl9jZmctPnt0b2tlbnN9LT57JHRva2VufSA9IHt9IGlmICEkdXNlcl9jZmctPnt0b2tlbnN9LT57
JHRva2VufTsKCQlteSAkdG9rZW5fY2ZnID0gJHVzZXJfY2ZnLT57dG9rZW5zfS0+eyR0b2tlbn07
CgkJJHRva2VuX2NmZy0+e3ByaXZzZXB9ID0gJHByaXZzZXA7CgkJJHRva2VuX2NmZy0+e2V4cGly
ZX0gPSAkZXhwaXJlOwoJCSR0b2tlbl9jZmctPntjb21tZW50fSA9IFBWRTo6VG9vbHM6OmRlY29k
ZV90ZXh0KCRjb21tZW50KSBpZiAkY29tbWVudDsKCSAgICB9IGVsc2UgewoJCXdhcm4gInVzZXIg
Y29uZmlnIC0gaWdub3JlIHRva2VuICckdG9rZW5pZCcgLSB1c2VyIGRvZXMgbm90IGV4aXN0XG4i
OwoJICAgIH0KCX0gZWxzZSB7CgkgICAgd2FybiAidXNlciBjb25maWcgLSBpZ25vcmUgY29uZmln
IGxpbmU6ICRsaW5lXG4iOwoJfQogICAgfQoKICAgIHVzZXJjb25maWdfZm9yY2VfZGVmYXVsdHMo
JGNmZyk7CgogICAgcmV0dXJuICRjZmc7Cn0KCnN1YiB3cml0ZV91c2VyX2NvbmZpZyB7CiAgICBt
eSAoJGZpbGVuYW1lLCAkY2ZnKSA9IEBfOwoKICAgIG15ICRkYXRhID0gJyc7CgogICAgZm9yZWFj
aCBteSAkdXNlciAoc29ydCBrZXlzICV7JGNmZy0+e3VzZXJzfX0pIHsKCW15ICRkID0gJGNmZy0+
e3VzZXJzfS0+eyR1c2VyfTsKCW15ICRmaXJzdG5hbWUgPSAkZC0+e2ZpcnN0bmFtZX0gPyBQVkU6
OlRvb2xzOjplbmNvZGVfdGV4dCgkZC0+e2ZpcnN0bmFtZX0pIDogJyc7CglteSAkbGFzdG5hbWUg
PSAkZC0+e2xhc3RuYW1lfSA/IFBWRTo6VG9vbHM6OmVuY29kZV90ZXh0KCRkLT57bGFzdG5hbWV9
KSA6ICcnOwoJbXkgJGVtYWlsID0gJGQtPntlbWFpbH0gfHwgJyc7CglteSAkY29tbWVudCA9ICRk
LT57Y29tbWVudH0gPyBQVkU6OlRvb2xzOjplbmNvZGVfdGV4dCgkZC0+e2NvbW1lbnR9KSA6ICcn
OwoJbXkgJGV4cGlyZSA9IGludCgkZC0+e2V4cGlyZX0gfHwgMCk7CglteSAkZW5hYmxlID0gJGQt
PntlbmFibGV9ID8gMSA6IDA7CglteSAka2V5cyA9ICRkLT57a2V5c30gPyAkZC0+e2tleXN9IDog
Jyc7CgkkZGF0YSAuPSAidXNlcjokdXNlcjokZW5hYmxlOiRleHBpcmU6JGZpcnN0bmFtZTokbGFz
dG5hbWU6JGVtYWlsOiRjb21tZW50OiRrZXlzOlxuIjsKCglteSAkdXNlcl90b2tlbnMgPSAkZC0+
e3Rva2Vuc307Cglmb3JlYWNoIG15ICR0b2tlbiAoc29ydCBrZXlzICUkdXNlcl90b2tlbnMpIHsK
CSAgICBteSAkdGQgPSAkdXNlcl90b2tlbnMtPnskdG9rZW59OwoJICAgIG15ICRmdWxsX3Rva2Vu
aWQgPSBqb2luX3Rva2VuaWQoJHVzZXIsICR0b2tlbik7CgkgICAgbXkgJGNvbW1lbnQgPSAkdGQt
Pntjb21tZW50fSA/IFBWRTo6VG9vbHM6OmVuY29kZV90ZXh0KCR0ZC0+e2NvbW1lbnR9KSA6ICcn
OwoJICAgIG15ICRleHBpcmUgPSBpbnQoJHRkLT57ZXhwaXJlfSB8fCAwKTsKCSAgICBteSAkcHJp
dnNlcCA9ICR0ZC0+e3ByaXZzZXB9ID8gMSA6IDA7CgkgICAgJGRhdGEgLj0gInRva2VuOiRmdWxs
X3Rva2VuaWQ6JGV4cGlyZTokcHJpdnNlcDokY29tbWVudDpcbiI7Cgl9CiAgICB9CgogICAgJGRh
dGEgLj0gIlxuIjsKCiAgICBmb3JlYWNoIG15ICRncm91cCAoc29ydCBrZXlzICV7JGNmZy0+e2dy
b3Vwc319KSB7CglteSAkZCA9ICRjZmctPntncm91cHN9LT57JGdyb3VwfTsKCW15ICRsaXN0ID0g
am9pbiAoJywnLCBzb3J0IGtleXMgJXskZC0+e3VzZXJzfX0pOwoJbXkgJGNvbW1lbnQgPSAkZC0+
e2NvbW1lbnR9ID8gUFZFOjpUb29sczo6ZW5jb2RlX3RleHQoJGQtPntjb21tZW50fSkgOiAnJzsK
CSRkYXRhIC49ICJncm91cDokZ3JvdXA6JGxpc3Q6JGNvbW1lbnQ6XG4iOwogICAgfQoKICAgICRk
YXRhIC49ICJcbiI7CgogICAgZm9yZWFjaCBteSAkcG9vbCAoc29ydCBrZXlzICV7JGNmZy0+e3Bv
b2xzfX0pIHsKCW15ICRkID0gJGNmZy0+e3Bvb2xzfS0+eyRwb29sfTsKCW15ICR2bWxpc3QgPSBq
b2luICgnLCcsIHNvcnQga2V5cyAleyRkLT57dm1zfX0pOwoJbXkgJHN0b3JlbGlzdCA9IGpvaW4g
KCcsJywgc29ydCBrZXlzICV7JGQtPntzdG9yYWdlfX0pOwoJbXkgJGNvbW1lbnQgPSAkZC0+e2Nv
bW1lbnR9ID8gUFZFOjpUb29sczo6ZW5jb2RlX3RleHQoJGQtPntjb21tZW50fSkgOiAnJzsKCSRk
YXRhIC49ICJwb29sOiRwb29sOiRjb21tZW50OiR2bWxpc3Q6JHN0b3JlbGlzdDpcbiI7CiAgICB9
CgogICAgJGRhdGEgLj0gIlxuIjsKCiAgICBmb3JlYWNoIG15ICRyb2xlIChzb3J0IGtleXMgJXsk
Y2ZnLT57cm9sZXN9fSkgewoJbmV4dCBpZiAkc3BlY2lhbF9yb2xlcy0+eyRyb2xlfTsKCglteSAk
ZCA9ICRjZmctPntyb2xlc30tPnskcm9sZX07CglteSAkbGlzdCA9IGpvaW4gKCcsJywgc29ydCBr
ZXlzICUkZCk7CgkkZGF0YSAuPSAicm9sZTokcm9sZTokbGlzdDpcbiI7CiAgICB9CgogICAgJGRh
dGEgLj0gIlxuIjsKCiAgICBteSAkY29sbGVjdF9yb2xlbGlzdF9tZW1iZXJzID0gc3ViIHsKCW15
ICgkYWNsX21lbWJlcnMsICRyZXN1bHQsICRwcmVmaXgsICRleGNsdWRlKSA9IEBfOwoKCWZvcmVh
Y2ggbXkgJG1lbWJlciAoa2V5cyAlJGFjbF9tZW1iZXJzKSB7CgkgICAgbmV4dCBpZiAkZXhjbHVk
ZSAmJiAkbWVtYmVyIGVxICRleGNsdWRlOwoKCSAgICBteSAkbDAgPSAnJzsKCSAgICBteSAkbDEg
PSAnJzsKCSAgICBmb3JlYWNoIG15ICRyb2xlIChzb3J0IGtleXMgJXskYWNsX21lbWJlcnMtPnsk
bWVtYmVyfX0pIHsKCQlteSAkcHJvcGFnYXRlID0gJGFjbF9tZW1iZXJzLT57JG1lbWJlcn0tPnsk
cm9sZX07CgkJaWYgKCRwcm9wYWdhdGUpIHsKCQkgICAgJGwxIC49ICcsJyBpZiAkbDE7CgkJICAg
ICRsMSAuPSAkcm9sZTsKCQl9IGVsc2UgewoJCSAgICAkbDAgLj0gJywnIGlmICRsMDsKCQkgICAg
JGwwIC49ICRyb2xlOwoJCX0KCSAgICB9CgkgICAgJHJlc3VsdC0+ezB9LT57JGwwfS0+eyIke3By
ZWZpeH0ke21lbWJlcn0ifSA9IDEgaWYgJGwwOwoJICAgICRyZXN1bHQtPnsxfS0+eyRsMX0tPnsi
JHtwcmVmaXh9JHttZW1iZXJ9In0gPSAxIGlmICRsMTsKCX0KICAgIH07CgogICAgaXRlcmF0ZV9h
Y2xfdHJlZSgiLyIsICRjZmctPnthY2xfcm9vdH0sIHN1YiB7CglteSAoJHBhdGgsICRkKSA9IEBf
OwoKCW15ICRyb2xlbGlzdF9tZW1iZXJzID0ge307CgoJJGNvbGxlY3Rfcm9sZWxpc3RfbWVtYmVy
cy0+KCRkLT57J2dyb3Vwcyd9LCAkcm9sZWxpc3RfbWVtYmVycywgJ0AnKTsKCgkjIG5vIG5lZWQg
dG8gc2F2ZSAncm9vdEBwYW0nLCBpdCBpcyBhbHdheXMgJ0FkbWluaXN0cmF0b3InCgkkY29sbGVj
dF9yb2xlbGlzdF9tZW1iZXJzLT4oJGQtPnsndXNlcnMnfSwgJHJvbGVsaXN0X21lbWJlcnMsICcn
LCAncm9vdEBwYW0nKTsKCgkkY29sbGVjdF9yb2xlbGlzdF9tZW1iZXJzLT4oJGQtPnsndG9rZW5z
J30sICRyb2xlbGlzdF9tZW1iZXJzLCAnJyk7CgoJZm9yZWFjaCBteSAkcHJvcGFnYXRlICgwLDEp
IHsKCSAgICBteSAkZmlsdGVyZWQgPSAkcm9sZWxpc3RfbWVtYmVycy0+eyRwcm9wYWdhdGV9OwoJ
ICAgIGZvcmVhY2ggbXkgJHJvbGVsaXN0IChzb3J0IGtleXMgJSRmaWx0ZXJlZCkgewoJCW15ICR1
Z2xpc3QgPSBqb2luICgnLCcsIHNvcnQga2V5cyAleyRmaWx0ZXJlZC0+eyRyb2xlbGlzdH19KTsK
CQkkZGF0YSAuPSAiYWNsOiRwcm9wYWdhdGU6JHBhdGg6JHVnbGlzdDokcm9sZWxpc3Q6XG4iOwoJ
ICAgIH0KCgl9CiAgICB9KTsKCiAgICByZXR1cm4gJGRhdGE7Cn0KCiMgQ3JlYXRlcyBhIGBQVkU6
OlJTOjpURkFgIGluc3RhbmNlIGZyb20gdGhlIHJhdyBjb25maWcgZGF0YS4KIyBJdHMgY29udGFp
bmVkIGhhc2ggd2lsbCBhbHNvIHN1cHBvcnQgdGhlIGxlZ2FjeSBmdW5jdGlvbmFsaXR5LgpzdWIg
cGFyc2VfcHJpdl90ZmFfY29uZmlnIHsKICAgIG15ICgkZmlsZW5hbWUsICRyYXcpID0gQF87Cgog
ICAgJHJhdyA9ICcnIGlmICFkZWZpbmVkKCRyYXcpOwogICAgbXkgJGNmZyA9IFBWRTo6UlM6OlRG
QS0+bmV3KCRyYXcpOwoKICAgICMgUHVyZ2UgaW52YWxpZCB1c2VyczoKICAgIGZvcmVhY2ggbXkg
JHVzZXIgKCRjZmctPnVzZXJzKCktPkAqKSB7CglteSAodW5kZWYsIHVuZGVmLCAkcmVhbG0pID0g
UFZFOjpBdXRoOjpQbHVnaW46OnZlcmlmeV91c2VybmFtZSgkdXNlciwgMSk7CglpZiAoISRyZWFs
bSkgewoJICAgIHdhcm4gInVzZXIgdGZhIGNvbmZpZyAtIGlnbm9yZSB1c2VyICckdXNlcicgLSBp
bnZhbGlkIHVzZXIgbmFtZVxuIjsKCSAgICAkY2ZnLT5yZW1vdmVfdXNlcigkdXNlcik7Cgl9CiAg
ICB9CgogICAgcmV0dXJuICRjZmc7Cn0KCnN1YiB3cml0ZV9wcml2X3RmYV9jb25maWcgewogICAg
bXkgKCRmaWxlbmFtZSwgJGNmZykgPSBAXzsKCiAgICBhc3NlcnRfbmV3X3RmYV9jb25maWdfYXZh
aWxhYmxlKCk7CgogICAgcmV0dXJuICRjZmctPndyaXRlKCk7Cn0KCnN1YiByb2xlcyB7CiAgICBt
eSAoJGNmZywgJHVzZXIsICRwYXRoKSA9IEBfOwoKICAgICMgTk9URTogd2UgZG8gbm90IGNvbnNp
ZGVyIHBvb2xzIGhlcmUuCiAgICAjIE5PVEU6IGZvciBwcml2c2VwIHRva2VucywgdGhpcyBkb2Vz
IG5vdCBmaWx0ZXIgcm9sZXMgYnkgdGhvc2UgdGhhdCB0aGUKICAgICMgY29ycmVzcG9uZGluZyB1
c2VyIGhhcy4KICAgICMgVXNlICRycGNlbnYtPnBlcm1pc3Npb24oKSBmb3IgYW55IGFjdHVhbCBw
ZXJtaXNzaW9uIGNoZWNrcyEKCiAgICByZXR1cm4gJ0FkbWluaXN0cmF0b3InIGlmICR1c2VyIGVx
ICdyb290QHBhbSc7ICMgcm9vdCBjYW4gZG8gYW55dGhpbmcKCiAgICBpZiAoIWRlZmluZWQoJHBh
dGgpKSB7CgkjIHRoaXMgc2hvdWxkbid0IGhhcHBlbiEKCXdhcm4gImludGVybmFsIGVycm9yOiBB
Q0wgY2hlY2sgY2FsbGVkIGZvciB1bmRlZmluZWQgQUNMIHBhdGghXG4iOwoJcmV0dXJuIHt9Owog
ICAgfQoKICAgIGlmIChwdmVfdmVyaWZ5X3Rva2VuaWQoJHVzZXIsIDEpKSB7CglteSAkdG9rZW5p
ZCA9ICR1c2VyOwoJbXkgKCR1c2VybmFtZSwgJHRva2VuKSA9IHNwbGl0X3Rva2VuaWQoJHRva2Vu
aWQpOwoKCW15ICR0b2tlbl9pbmZvID0gJGNmZy0+e3VzZXJzfS0+eyR1c2VybmFtZX0tPnt0b2tl
bnN9LT57JHRva2VufTsKCXJldHVybiAoKSBpZiAhJHRva2VuX2luZm87CgoJbXkgJHVzZXJfcm9s
ZXMgPSByb2xlcygkY2ZnLCAkdXNlcm5hbWUsICRwYXRoKTsKCgkjIHJldHVybiBmdWxsIHVzZXIg
cHJpdmlsZWdlcwoJcmV0dXJuICR1c2VyX3JvbGVzIGlmICEkdG9rZW5faW5mby0+e3ByaXZzZXB9
OwogICAgfQoKICAgIG15ICRyb2xlcyA9IHt9OwoKICAgIG15ICRzcGxpdCA9IFsgc3BsaXQoIi8i
LCAkcGF0aCkgXTsKICAgIGlmICgkcGF0aCBlcSAnLycpIHsKCSRzcGxpdCA9IFsgJycgXTsKICAg
IH0KCiAgICBteSAkYWNsID0gJGNmZy0+e2FjbF9yb290fTsKICAgIG15ICRpID0gMDsKCiAgICB3
aGlsZSAoQCRzcGxpdCkgewoJbXkgJHAgPSBzaGlmdCBAJHNwbGl0OwoJbXkgJGZpbmFsID0gIUAk
c3BsaXQ7CglpZiAoJHAgbmUgJycpIHsKCSAgICAkYWNsID0gJGFjbC0+e2NoaWxkcmVufS0+eyRw
fTsKCX0KCglpZiAobXkgJHJpID0gJGFjbC0+e3Rva2Vuc30tPnskdXNlcn0pIHsKCSAgICBteSAk
bmV3OwoJICAgIGZvcmVhY2ggbXkgJHJvbGUgKGtleXMgJSRyaSkgewoJCW15ICRwcm9wYWdhdGUg
PSAkcmktPnskcm9sZX07CgkJaWYgKCRmaW5hbCB8fCAkcHJvcGFnYXRlKSB7CgkJICAgICNwcmlu
dCAiQVBQTFkgUk9MRSAkcCAkdXNlciAkcm9sZVxuIjsKCQkgICAgJG5ldyA9IHt9IGlmICEkbmV3
OwoJCSAgICAkbmV3LT57JHJvbGV9ID0gJHByb3BhZ2F0ZTsKCQl9CgkgICAgfQoJICAgIGlmICgk
bmV3KSB7CgkJJHJvbGVzID0gJG5ldzsgIyBvdmVyd3JpdGUgcHJldmlvdXMgc2V0dGluZ3MKCQlu
ZXh0OwoJICAgIH0KCX0KCglpZiAobXkgJHJpID0gJGFjbC0+e3VzZXJzfS0+eyR1c2VyfSkgewoJ
ICAgIG15ICRuZXc7CgkgICAgZm9yZWFjaCBteSAkcm9sZSAoa2V5cyAlJHJpKSB7CgkJbXkgJHBy
b3BhZ2F0ZSA9ICRyaS0+eyRyb2xlfTsKCQlpZiAoJGZpbmFsIHx8ICRwcm9wYWdhdGUpIHsKCQkg
ICAgI3ByaW50ICJBUFBMWSBST0xFICRwICR1c2VyICRyb2xlXG4iOwoJCSAgICAkbmV3ID0ge30g
aWYgISRuZXc7CgkJICAgICRuZXctPnskcm9sZX0gPSAkcHJvcGFnYXRlOwoJCX0KCSAgICB9Cgkg
ICAgaWYgKCRuZXcpIHsKCQkkcm9sZXMgPSAkbmV3OyAjIG92ZXJ3cml0ZSBwcmV2aW91cyBzZXR0
aW5ncwoJCW5leHQ7ICMgdXNlciBwcml2cyBhbHdheXMgb3ZlcnJpZGUgZ3JvdXAgcHJpdnMKCSAg
ICB9Cgl9CgoJbXkgJG5ldzsKCWZvcmVhY2ggbXkgJGcgKGtleXMgJXskYWNsLT57Z3JvdXBzfX0p
IHsKCSAgICBuZXh0IGlmICEkY2ZnLT57Z3JvdXBzfS0+eyRnfS0+e3VzZXJzfS0+eyR1c2VyfTsK
CSAgICBpZiAobXkgJHJpID0gJGFjbC0+e2dyb3Vwc30tPnskZ30pIHsKCQlmb3JlYWNoIG15ICRy
b2xlIChrZXlzICUkcmkpIHsKCQkgICAgbXkgJHByb3BhZ2F0ZSA9ICRyaS0+eyRyb2xlfTsKCQkg
ICAgaWYgKCRmaW5hbCB8fCAkcHJvcGFnYXRlKSB7CgkJCSNwcmludCAiQVBQTFkgUk9MRSAkcCBc
QCRnICRyb2xlXG4iOwoJCQkkbmV3ID0ge30gaWYgISRuZXc7CgkJCSRuZXctPnskcm9sZX0gPSAk
cHJvcGFnYXRlOwoJCSAgICB9CgkJfQoJICAgIH0KCX0KCWlmICgkbmV3KSB7CgkgICAgJHJvbGVz
ID0gJG5ldzsgIyBvdmVyd3JpdGUgcHJldmlvdXMgc2V0dGluZ3MKCSAgICBuZXh0OwoJfQogICAg
fQoKICAgIHJldHVybiB7ICdOb0FjY2VzcycgPT4gJHJvbGVzLT57Tm9BY2Nlc3N9IH0gaWYgZGVm
aW5lZCAoJHJvbGVzLT57Tm9BY2Nlc3N9KTsKCiAgICByZXR1cm4gJHJvbGVzOwp9CgpzdWIgcmVt
b3ZlX3ZtX2FjY2VzcyB7CiAgICBteSAoJHZtaWQpID0gQF87CiAgICBteSAkZGVsVk1hY2Nlc3NG
biA9IHN1YiB7CglteSAkdXNlcmNmZyA9IGNmc19yZWFkX2ZpbGUoInVzZXIuY2ZnIik7CglteSAk
bW9kaWZpZWQ7CgoJaWYgKG15ICRhY2wgPSAkdXNlcmNmZy0+e2FjbF9yb290fS0+e2NoaWxkcmVu
fS0+e3Ztc30tPntjaGlsZHJlbn0tPnskdm1pZH0pIHsKCSAgICBkZWxldGUgJHVzZXJjZmctPnth
Y2xfcm9vdH0tPntjaGlsZHJlbn0tPnt2bXN9LT57Y2hpbGRyZW59LT57JHZtaWR9OwoJICAgICRt
b2RpZmllZCA9IDE7Cgl9CglpZiAobXkgJHBvb2wgPSAkdXNlcmNmZy0+e3Ztc30tPnskdm1pZH0p
IHsKCSAgICBpZiAobXkgJGRhdGEgPSAkdXNlcmNmZy0+e3Bvb2xzfS0+eyRwb29sfSkgewoJCWRl
bGV0ZSAkZGF0YS0+e3Ztc30tPnskdm1pZH07CgkJZGVsZXRlICR1c2VyY2ZnLT57dm1zfS0+eyR2
bWlkfTsKCQkkbW9kaWZpZWQgPSAxOwoJICAgIH0KCX0KCWNmc193cml0ZV9maWxlKCJ1c2VyLmNm
ZyIsICR1c2VyY2ZnKSBpZiAkbW9kaWZpZWQ7CiAgICB9OwoKICAgIGxvY2tfdXNlcl9jb25maWco
JGRlbFZNYWNjZXNzRm4sICJhY2Nlc3MgcGVybWlzc2lvbnMgY2xlYW51cCBmb3IgVk0gJHZtaWQg
ZmFpbGVkIik7Cn0KCnN1YiByZW1vdmVfc3RvcmFnZV9hY2Nlc3MgewogICAgbXkgKCRzdG9yZWlk
KSA9IEBfOwoKICAgIG15ICRkZWxldGVTdG9yYWdlQWNjZXNzRm4gPSBzdWIgewoJbXkgJHVzZXJj
ZmcgPSBjZnNfcmVhZF9maWxlKCJ1c2VyLmNmZyIpOwoJbXkgJG1vZGlmaWVkOwoKCWlmIChteSAk
YWNsID0gJHVzZXJjZmctPnthY2xfcm9vdH0tPntjaGlsZHJlbn0tPntzdG9yYWdlfS0+e2NoaWxk
cmVufS0+eyRzdG9yZWlkfSkgewoJICAgIGRlbGV0ZSAkdXNlcmNmZy0+e2FjbF9yb290fS0+e2No
aWxkcmVufS0+e3N0b3JhZ2V9LT57Y2hpbGRyZW59LT57JHN0b3JlaWR9OwoJICAgICRtb2RpZmll
ZCA9IDE7Cgl9Cglmb3JlYWNoIG15ICRwb29sIChrZXlzICV7JHVzZXJjZmctPntwb29sc319KSB7
CgkgICAgZGVsZXRlICR1c2VyY2ZnLT57cG9vbHN9LT57JHBvb2x9LT57c3RvcmFnZX0tPnskc3Rv
cmVpZH07CgkgICAgJG1vZGlmaWVkID0gMTsKCX0KCWNmc193cml0ZV9maWxlKCJ1c2VyLmNmZyIs
ICR1c2VyY2ZnKSBpZiAkbW9kaWZpZWQ7CiAgICB9OwoKICAgIGxvY2tfdXNlcl9jb25maWcoJGRl
bGV0ZVN0b3JhZ2VBY2Nlc3NGbiwKCQkgICAgICJhY2Nlc3MgcGVybWlzc2lvbnMgY2xlYW51cCBm
b3Igc3RvcmFnZSAkc3RvcmVpZCBmYWlsZWQiKTsKfQoKc3ViIGFkZF92bV90b19wb29sIHsKICAg
IG15ICgkdm1pZCwgJHBvb2wpID0gQF87CgogICAgbXkgJGFkZFZNdG9Qb29sRm4gPSBzdWIgewoJ
bXkgJHVzZXJjZmcgPSBjZnNfcmVhZF9maWxlKCJ1c2VyLmNmZyIpOwoJaWYgKG15ICRkYXRhID0g
JHVzZXJjZmctPntwb29sc30tPnskcG9vbH0pIHsKCSAgICAkZGF0YS0+e3Ztc30tPnskdm1pZH0g
PSAxOwoJICAgICR1c2VyY2ZnLT57dm1zfS0+eyR2bWlkfSA9ICRwb29sOwoJICAgIGNmc193cml0
ZV9maWxlKCJ1c2VyLmNmZyIsICR1c2VyY2ZnKTsKCX0KICAgIH07CgogICAgbG9ja191c2VyX2Nv
bmZpZygkYWRkVk10b1Bvb2xGbiwgImNhbid0IGFkZCBWTSAkdm1pZCB0byBwb29sICckcG9vbCci
KTsKfQoKc3ViIHJlbW92ZV92bV9mcm9tX3Bvb2wgewogICAgbXkgKCR2bWlkKSA9IEBfOwoKICAg
IG15ICRkZWxWTWZyb21Qb29sRm4gPSBzdWIgewoJbXkgJHVzZXJjZmcgPSBjZnNfcmVhZF9maWxl
KCJ1c2VyLmNmZyIpOwoJaWYgKG15ICRwb29sID0gJHVzZXJjZmctPnt2bXN9LT57JHZtaWR9KSB7
CgkgICAgaWYgKG15ICRkYXRhID0gJHVzZXJjZmctPntwb29sc30tPnskcG9vbH0pIHsKCQlkZWxl
dGUgJGRhdGEtPnt2bXN9LT57JHZtaWR9OwoJCWRlbGV0ZSAkdXNlcmNmZy0+e3Ztc30tPnskdm1p
ZH07CgkJY2ZzX3dyaXRlX2ZpbGUoInVzZXIuY2ZnIiwgJHVzZXJjZmcpOwoJICAgIH0KCX0KICAg
IH07CgogICAgbG9ja191c2VyX2NvbmZpZygkZGVsVk1mcm9tUG9vbEZuLCAicG9vbCBjbGVhbnVw
IGZvciBWTSAkdm1pZCBmYWlsZWQiKTsKfQoKbXkgJFVTRVJfQ09OVFJPTExFRF9URkFfVFlQRVMg
PSB7CiAgICB1MmYgPT4gMSwKICAgIG9hdGggPT4gMSwKfTsKCnN1YiBhc3NlcnRfbmV3X3RmYV9j
b25maWdfYXZhaWxhYmxlKCkgewogICAgUFZFOjpDbHVzdGVyOjpjZnNfdXBkYXRlKCk7CiAgICBt
eSAkdmVyc2lvbl9pbmZvID0gUFZFOjpDbHVzdGVyOjpnZXRfbm9kZV9rdigndmVyc2lvbi1pbmZv
Jyk7CiAgICBkaWUgImNhbm5vdCB1cGRhdGUgdGZhIGNvbmZpZywgcGxlYXNlIG1ha2Ugc3VyZSBh
bGwgY2x1c3RlciBub2RlcyBhcmUgdXAgdG8gZGF0ZVxuIgoJaWYgISR2ZXJzaW9uX2luZm87CiAg
ICBteSAkbWVtYmVycyA9IFBWRTo6Q2x1c3Rlcjo6Z2V0X21lbWJlcnMoKSBvciByZXR1cm47ICMg
Z2V0X21lbWJlcnMgcmV0dXJucyB1bmRlZiBvbiBubyBjbHVzdGVyCiAgICBteSAkb2xkID0gJyc7
CiAgICBmb3JlYWNoIG15ICRub2RlIChrZXlzICRtZW1iZXJzLT4lKikgewoJbXkgJGluZm8gPSAk
dmVyc2lvbl9pbmZvLT57JG5vZGV9OwoJaWYgKCEkaW5mbykgewoJICAgICRvbGQgLj0gIiAgY2x1
c3RlciBub2RlICckbm9kZScgaXMgdG9vIG9sZCwgZGlkIG5vdCBicm9hZGNhc3QgaXRzIHZlcnNp
b24gaW5mb1xuIjsKCSAgICBuZXh0OwoJfQoJJGluZm8gPSBmcm9tX2pzb24oJGluZm8pOwoJbXkg
JHZlciA9ICRpbmZvLT57dmVyc2lvbn07CglpZiAoJHZlciAhfiAvXihcZCtcLlxkKyktKFxkKykv
KSB7CgkgICAgJG9sZCAuPSAiICBjbHVzdGVyIG5vZGUgJyRub2RlJyBwcm92aWRlZCBhbiBpbnZh
bGlkIHZlcnNpb24gc3RyaW5nOiAnJHZlcidcbiI7CgkgICAgbmV4dDsKCX0KCW15ICgkbWFqLCAk
cmVsKSA9ICgkMSwgJDIpOwoJaWYgKCEoJG1haiA+IDcuMCB8fCAoJG1haiA9PSA3LjAgJiYgJHJl
bCA+PSAxNSkpKSB7CgkgICAgJG9sZCAuPSAiICBjbHVzdGVyIG5vZGUgJyRub2RlJyBpcyB0b28g
b2xkICgkdmVyIDwgNy4wLTE1KVxuIjsKCSAgICBuZXh0OwoJfQogICAgfQogICAgZGllICJjYW5u
b3QgdXBkYXRlIHRmYSBjb25maWcsIGZvbGxvd2luZyBub2RlcyBhcmUgbm90IHVwIHRvIGRhdGU6
XG4kb2xkIiBpZiBsZW5ndGgoJG9sZCk7Cn0KCnN1YiB1c2VyX3JlbW92ZV90ZmEgOiBwcm90b3R5
cGUoJCkgewogICAgbXkgKCR1c2VyaWQpID0gQF87CgogICAgYXNzZXJ0X25ld190ZmFfY29uZmln
X2F2YWlsYWJsZSgpOwoKICAgIG15ICR0ZmFfY2ZnID0gY2ZzX3JlYWRfZmlsZSgncHJpdi90ZmEu
Y2ZnJyk7CiAgICAkdGZhX2NmZy0+cmVtb3ZlX3VzZXIoJHVzZXJpZCk7CiAgICBjZnNfd3JpdGVf
ZmlsZSgncHJpdi90ZmEuY2ZnJywgJHRmYV9jZmcpOwp9CgpteSBzdWIgYWRkX29sZF95dWJpY29f
a2V5cyA6IHByb3RvdHlwZSgkJCQpIHsKICAgIG15ICgkdXNlcmlkLCAkdGZhX2NmZywgJGtleXMp
ID0gQF87CgogICAgbXkgJGNvdW50ID0gMDsKICAgIGZvcmVhY2ggbXkgJGtleSAoc3BsaXRfbGlz
dCgka2V5cykpIHsKCW15ICRkZXNjcmlwdGlvbiA9ICI8b2xkIHVzZXJjb25maWcga2V5ICRjb3Vu
dD4iOwoJKyskY291bnQ7CgkkdGZhX2NmZy0+YWRkX3l1Ymljb19lbnRyeSgkdXNlcmlkLCAkZGVz
Y3JpcHRpb24sICRrZXkpOwogICAgfQp9CgpteSBzdWIgbm9ybWFsaXplX3RvdHBfc2VjcmV0IDog
cHJvdG90eXBlKCQpIHsKICAgIG15ICgka2V5KSA9IEBfOwoKICAgIG15ICRiaW5rZXk7CiAgICAj
IFNlZSBQVkU6Ok9UUDo6b2F0aF92ZXJpZnlfb3RwOgogICAgaWYgKCRrZXkgPX4gL152Mi0weChb
MC05YS1mQS1GXSspJC8pIHsKCSMgdjIsIGhleAoJJGJpbmtleSA9IHBhY2soJ0gqJywgJDEpOwog
ICAgfSBlbHNpZiAoJGtleSA9fiAvXnYyLShbQS1aMi03PV0rKSQvKSB7CgkjIHYyLCBiYXNlMzIK
CSRiaW5rZXkgPSBNSU1FOjpCYXNlMzI6OmRlY29kZV9yZmMzNTQ4KCQxKTsKICAgIH0gZWxzaWYg
KCRrZXkgPX4gL15bQS1aMi03PV17MTZ9JC8pIHsKCSRiaW5rZXkgPSBNSU1FOjpCYXNlMzI6OmRl
Y29kZV9yZmMzNTQ4KCRrZXkpOwogICAgfSBlbHNpZiAoJGtleSA9fiAvXltBLUZhLWYwLTldezQw
fSQvKSB7CgkkYmlua2V5ID0gcGFjaygnSConLCAka2V5KTsKICAgIH0gZWxzZSB7CglyZXR1cm4g
dW5kZWY7CiAgICB9CgogICAgcmV0dXJuIE1JTUU6OkJhc2UzMjo6ZW5jb2RlX3JmYzM1NDgoJGJp
bmtleSk7Cn0KCm15IHN1YiBhZGRfb2xkX3RvdHBfa2V5cyA6IHByb3RvdHlwZSgkJCQkKSB7CiAg
ICBteSAoJHVzZXJpZCwgJHRmYV9jZmcsICRyZWFsbV90ZmEsICRrZXlzKSA9IEBfOwoKICAgIG15
ICRpc3N1ZXIgPSAnUHJveG1veCUyMFZFJzsKICAgIG15ICRhY2NvdW50ID0gdXJpX2VzY2FwZSgi
T2xkIGtleSBmb3IgJHVzZXJpZCIpOwogICAgbXkgJGRpZ2l0cyA9ICRyZWFsbV90ZmEtPntkaWdp
dHN9IHx8IDY7CiAgICBteSAkc3RlcCA9ICRyZWFsbV90ZmEtPntzdGVwfSB8fCAzMDsKICAgIG15
ICR1cmkgPSAib3RwYXV0aDovL3RvdHAvJGlzc3VlcjokYWNjb3VudD9kaWdpdHM9JGRpZ2l0cyZw
ZXJpb2Q9JHN0ZXAmYWxnb3JpdGhtPVNIQTEmc2VjcmV0PSI7CgogICAgbXkgJGNvdW50ID0gMDsK
ICAgIGZvcmVhY2ggbXkgJGtleSAoc3BsaXRfbGlzdCgka2V5cykpIHsKCSRrZXkgPSBub3JtYWxp
emVfdG90cF9zZWNyZXQoJGtleSk7CgkjIGFuZCBqdXN0IHNraXAgaW52YWxpZCBrZXlzOgoJbmV4
dCBpZiAhZGVmaW5lZCgka2V5KTsKCglteSAkZGVzY3JpcHRpb24gPSAiPG9sZCB1c2VyY29uZmln
IGtleSAkY291bnQ+IjsKCSsrJGNvdW50OwoJZXZhbCB7ICR0ZmFfY2ZnLT5hZGRfdG90cF9lbnRy
eSgkdXNlcmlkLCAkZGVzY3JpcHRpb24sICR1cmkgLiAka2V5KSB9OwoJd2FybiAkQCBpZiAkQDsK
ICAgIH0KfQoKc3ViIGFkZF9vbGRfa2V5c190b19yZWFsbV90ZmEgOiBwcm90b3R5cGUoJCQkJCkg
ewogICAgbXkgKCR1c2VyaWQsICR0ZmFfY2ZnLCAkcmVhbG1fdGZhLCAka2V5cykgPSBAXzsKCiAg
ICAjIGlmIHRoZXJlJ3Mgbm8gcmVhbG0gdGZhIGNvbmZpZ3VyZWQsIHdlIGRvbid0IGtub3cgd2hh
dCB0aGUga2V5cyBtZWFuLCBzbyB3ZSBqdXN0IGlnbm9yZQogICAgIyB0aGVtLi4uCiAgICByZXR1
cm4gaWYgISRyZWFsbV90ZmE7CgogICAgbXkgJHR5cGUgPSAkcmVhbG1fdGZhLT57dHlwZX07CiAg
ICBpZiAoJHR5cGUgZXEgJ29hdGgnKSB7CglhZGRfb2xkX3RvdHBfa2V5cygkdXNlcmlkLCAkdGZh
X2NmZywgJHJlYWxtX3RmYSwgJGtleXMpOwogICAgfSBlbHNpZiAoJHR5cGUgZXEgJ3l1Ymljbycp
IHsKCWFkZF9vbGRfeXViaWNvX2tleXMoJHVzZXJpZCwgJHRmYV9jZmcsICRrZXlzKTsKICAgIH0g
ZWxzZSB7CgkjIGludmFsaWQga2V5cywgd2UnbGwganVzdCBkcm9wIHRoZW0gbm93Li4uCiAgICB9
Cn0KCnN1YiB1c2VyX2dldF90ZmEgOiBwcm90b3R5cGUoJCQkKSB7CiAgICBteSAoJHVzZXJuYW1l
LCAkcmVhbG0sICRuZXdfZm9ybWF0KSA9IEBfOwoKICAgIG15ICR1c2VyX2NmZyA9IFBWRTo6VG9v
bHM6OnVzZXJfY2ZnX2VuY29kZV91dGY4KGNmc19yZWFkX2ZpbGUoJ3VzZXIuY2ZnJykpOwoKICAg
IG15ICR1c2VyID0gJHVzZXJfY2ZnLT57dXNlcnN9LT57JHVzZXJuYW1lfQoJb3IgZGllICJ1c2Vy
ICckdXNlcm5hbWUnIG5vdCBmb3VuZFxuIjsKCiAgICBteSAka2V5cyA9ICR1c2VyLT57a2V5c307
CgogICAgbXkgJGRvbWFpbl9jZmcgPSBjZnNfcmVhZF9maWxlKCdkb21haW5zLmNmZycpOwogICAg
bXkgJHJlYWxtX2NmZyA9ICRkb21haW5fY2ZnLT57aWRzfS0+eyRyZWFsbX07CiAgICBkaWUgImF1
dGggZG9tYWluICckcmVhbG0nIGRvZXMgbm90IGV4aXN0XG4iIGlmICEkcmVhbG1fY2ZnOwoKICAg
IG15ICRyZWFsbV90ZmEgPSAkcmVhbG1fY2ZnLT57dGZhfTsKICAgICRyZWFsbV90ZmEgPSBQVkU6
OkF1dGg6OlBsdWdpbjo6cGFyc2VfdGZhX2NvbmZpZygkcmVhbG1fdGZhKQoJaWYgJHJlYWxtX3Rm
YTsKCiAgICBpZiAoISRrZXlzKSB7CglyZXR1cm4gaWYgISRyZWFsbV90ZmE7CglkaWUgIm1pc3Np
bmcgcmVxdWlyZWQgMm5kIGtleXNcbiI7CiAgICB9CgogICAgaWYgKCRuZXdfZm9ybWF0KSB7Cglt
eSAkdGZhX2NmZyA9IGNmc19yZWFkX2ZpbGUoJ3ByaXYvdGZhLmNmZycpOwoJaWYgKGRlZmluZWQo
JGtleXMpICYmICRrZXlzICF+IC9eeCg/OiEuKikkLykgewoJICAgIGFkZF9vbGRfa2V5c190b19y
ZWFsbV90ZmEoJHVzZXJuYW1lLCAkdGZhX2NmZywgJHJlYWxtX3RmYSwgJGtleXMpOwoJfQoJcmV0
dXJuICgkdGZhX2NmZywgJHJlYWxtX3RmYSk7CiAgICB9CgogICAgIyBuZXcgc3R5bGUgY29uZmln
IHN0YXJ0cyB3aXRoIGFuICd4JyBhbmQgb3B0aW9uYWxseSBjb250YWlucyBhICE8dHlwZT4gc3Vm
Zml4CiAgICBpZiAoJGtleXMgIX4gL154KD86IS4qKT8kLykgewoJIyBvbGQgc3R5bGUgY29uZmln
LCBmaW5kIHRoZSB0eXBlIHZpYSB0aGUgcmVhbG0KCXJldHVybiBpZiAhJHJlYWxtX3RmYTsKCXJl
dHVybiAoJHJlYWxtX3RmYS0+e3R5cGV9LCB7CgkgICAga2V5cyA9PiAka2V5cywKCSAgICBjb25m
aWcgPT4gJHJlYWxtX3RmYSwKCX0pOwogICAgfSBlbHNlIHsKCW15ICR0ZmFfY2ZnID0gY2ZzX3Jl
YWRfZmlsZSgncHJpdi90ZmEuY2ZnJyk7CglteSAkdGZhID0gJHRmYV9jZmctPnt1c2Vyc30tPnsk
dXNlcm5hbWV9OwoJcmV0dXJuIGlmICEkdGZhOyAjIHNob3VsZCBub3QgaGFwcGVuICh1c2VyLmNm
ZyB3YXNuJ3QgY2xlYW5lZCB1cD8pCgoJaWYgKCRyZWFsbV90ZmEpIHsKCSAgICAjIGlmIHRoZSBy
ZWFsbSBoYXMgYSB0ZmEgc2V0dGluZyB3ZSBuZWVkIHRvIHZlcmlmeSB0aGUgdHlwZToKCSAgICBk
aWUgImF1dGggZG9tYWluICckcmVhbG0nIGFuZCB1c2VyIGhhdmUgbWlzbWF0Y2hpbmcgVEZBIHNl
dHRpbmdzXG4iCgkJaWYgJHJlYWxtX3RmYSAmJiAkcmVhbG1fdGZhLT57dHlwZX0gbmUgJHRmYS0+
e3R5cGV9OwoJfQoKCXJldHVybiAoJHRmYS0+e3R5cGV9LCAkdGZhLT57ZGF0YX0pOwogICAgfQp9
CgojIGJhc2ggY29tcGxldGlvbiBoZWxwZXJzCgpyZWdpc3Rlcl9zdGFuZGFyZF9vcHRpb24oJ3Vz
ZXJpZC1jb21wbGV0ZWQnLAogICAgZ2V0X3N0YW5kYXJkX29wdGlvbigndXNlcmlkJywgeyBjb21w
bGV0aW9uID0+IFwmY29tcGxldGVfdXNlcm5hbWV9KSwKKTsKCnN1YiBjb21wbGV0ZV91c2VybmFt
ZSB7CgogICAgbXkgJHVzZXJfY2ZnID0gY2ZzX3JlYWRfZmlsZSgndXNlci5jZmcnKTsKCiAgICBy
ZXR1cm4gWyBrZXlzICV7JHVzZXJfY2ZnLT57dXNlcnN9fSBdOwp9CgpzdWIgY29tcGxldGVfZ3Jv
dXAgewoKICAgIG15ICR1c2VyX2NmZyA9IGNmc19yZWFkX2ZpbGUoJ3VzZXIuY2ZnJyk7CgogICAg
cmV0dXJuIFsga2V5cyAleyR1c2VyX2NmZy0+e2dyb3Vwc319IF07Cn0KCnN1YiBjb21wbGV0ZV9y
ZWFsbSB7CgogICAgbXkgJGRvbWFpbl9jZmcgPSBjZnNfcmVhZF9maWxlKCdkb21haW5zLmNmZycp
OwoKICAgIHJldHVybiBbIGtleXMgJXskZG9tYWluX2NmZy0+e2lkc319IF07Cn0KCjE7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>