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

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

    <bug>
          <bug_id>46318</bug_id>
          
          <creation_ts>2023-05-31 01:07:53 +0300</creation_ts>
          <short_desc>unrar version update to 6.2.7</short_desc>
          <delta_ts>2023-06-06 22:33:53 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>unrar</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>NOTABUG</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>patch</keywords>
          <priority>P5</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>aleksandrkarpunin0889</reporter>
          <assigned_to name="Fr. Br. George">george</assigned_to>
          <cc>george</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>226736</commentid>
    <comment_count>0</comment_count>
      <attachid>13311</attachid>
    <who name="">aleksandrkarpunin0889</who>
    <bug_when>2023-05-31 01:07:53 +0300</bug_when>
    <thetext>Created attachment 13311
patch for spec</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226737</commentid>
    <comment_count>1</comment_count>
      <attachid>13312</attachid>
    <who name="">aleksandrkarpunin0889</who>
    <bug_when>2023-05-31 01:08:12 +0300</bug_when>
    <thetext>Created attachment 13312
unrar patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226829</commentid>
    <comment_count>2</comment_count>
      <attachid>13350</attachid>
    <who name="">aleksandrkarpunin0889</who>
    <bug_when>2023-05-31 21:12:51 +0300</bug_when>
    <thetext>Created attachment 13350
patch for spec (updated)

Ранее приложенный spec файл неправилен, обновленный patch прилагается</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227146</commentid>
    <comment_count>3</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2023-06-06 22:33:53 +0300</bug_when>
    <thetext>Передайте, пожалуйста, тем, кто предложил такой вариант участия, что от отправки такого рода патчей на спеки таким образом нет практической пользы ни для мантейнеров, ни для репозитория.  Процесс сопровождения пакетов в репозитории устроен совершенно иначе.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>13311</attachid>
            <date>2023-05-31 01:07:53 +0300</date>
            <delta_ts>2023-05-31 01:07:53 +0300</delta_ts>
            <desc>patch for spec</desc>
            <filename>unrar-6.2.7-spec.patch</filename>
            <type>text/plain</type>
            <size>552</size>
            <attacher>aleksandrkarpunin0889</attacher>
            
              <data encoding="base64">QEAgLTEsNSArMSw1IEBACiBOYW1lOiB1bnJhcgotVmVyc2lvbjogNi4xLjcKK1ZlcnNpb246IDYu
Mi43CiBSZWxlYXNlOiBhbHQxCiAKIFN1bW1hcnk6IFJBUiB1bmFyY2hpdmVyCkBAIC0xMiw2ICsx
Miw4IEBACiAjIEF1dG9tYXRpY2FsbHkgYWRkZWQgYnkgYnVpbGRyZXEgb24gTW9uIEZlYiAwNyAy
MDExCiBCdWlsZFJlcXVpcmVzOiBnY2MtYysrCiAKK1BhdGNoOiB1bnJhci02LjIuNy5wYXRjaAor
CiAlZGVzY3JpcHRpb24KIFRoZSB1bnJhciB1dGlsaXR5IGlzIGEgZnJlZXdhcmUgcHJvZ3JhbSwg
ZGlzdHJpYnV0ZWQgd2l0aCBzb3VyY2UgY29kZSBhbmQKIGRldmVsb3BlZCBmb3IgZXh0cmFjdGlu
ZywgdGVzdGluZyBhbmQgdmlld2luZyB0aGUgY29udGVudHMgb2YgYXJjaGl2ZXMgY3JlYXRlZApA
QCAtMzMsNiArMzUsNyBAQAogCiAlcHJlcAogJXNldHVwIC1uIHVucmFyCislcGF0Y2ggLXAxCiBz
ZWQgLXJpICdzL14obGliOltbc3BhY2U6XV0rKWNsZWFuW1s6c3BhY2U6XV0rL1wxLycgbWFrZWZp
bGUKIHNlZCAtaSAnMWkjZGVmaW5lIF9VTklYJyBkbGwuaHBwCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13312</attachid>
            <date>2023-05-31 01:08:12 +0300</date>
            <delta_ts>2023-05-31 01:08:12 +0300</delta_ts>
            <desc>unrar patch</desc>
            <filename>unrar-6.2.7.patch</filename>
            <type>text/plain</type>
            <size>132078</size>
            <attacher>aleksandrkarpunin0889</attacher>
            
              <data encoding="base64">ZGlmZiAtdXIgdW5yYXItNi4xLjcvVW5SQVJEbGwudmN4cHJvaiB1bnJhci02LjIuNy9VblJBUkRs
bC52Y3hwcm9qCi0tLSB1bnJhci02LjEuNy9VblJBUkRsbC52Y3hwcm9qCTIwMjItMTAtMTkgMjI6
MDU6MTIKKysrIHVucmFyLTYuMi43L1VuUkFSRGxsLnZjeHByb2oJMjAyMi0wNS0xNyAyMjowNDow
NQpAQCAtMTM4LDcgKzEzOCw3IEBACiAgICAgICA8RXhjZXB0aW9uSGFuZGxpbmc+U3luYzwvRXhj
ZXB0aW9uSGFuZGxpbmc+DQogICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hl
Y2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQogICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhy
ZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+DQotICAgICAgPFN0cnVjdE1lbWJlckFsaWdubWVu
dD40Qnl0ZXM8L1N0cnVjdE1lbWJlckFsaWdubWVudD4NCisgICAgICA8U3RydWN0TWVtYmVyQWxp
Z25tZW50PkRlZmF1bHQ8L1N0cnVjdE1lbWJlckFsaWdubWVudD4NCiAgICAgICA8UnVudGltZVR5
cGVJbmZvPmZhbHNlPC9SdW50aW1lVHlwZUluZm8+DQogICAgICAgPFByZWNvbXBpbGVkSGVhZGVy
PlVzZTwvUHJlY29tcGlsZWRIZWFkZXI+DQogICAgICAgPFByZWNvbXBpbGVkSGVhZGVyRmlsZT5y
YXIuaHBwPC9QcmVjb21waWxlZEhlYWRlckZpbGU+DQpAQCAtMTY4LDcgKzE2OCw3IEBACiAgICAg
ICA8RXhjZXB0aW9uSGFuZGxpbmc+U3luYzwvRXhjZXB0aW9uSGFuZGxpbmc+DQogICAgICAgPEJh
c2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQog
ICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+
DQotICAgICAgPFN0cnVjdE1lbWJlckFsaWdubWVudD40Qnl0ZXM8L1N0cnVjdE1lbWJlckFsaWdu
bWVudD4NCisgICAgICA8U3RydWN0TWVtYmVyQWxpZ25tZW50PkRlZmF1bHQ8L1N0cnVjdE1lbWJl
ckFsaWdubWVudD4NCiAgICAgICA8UnVudGltZVR5cGVJbmZvPmZhbHNlPC9SdW50aW1lVHlwZUlu
Zm8+DQogICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPlVzZTwvUHJlY29tcGlsZWRIZWFkZXI+DQog
ICAgICAgPFByZWNvbXBpbGVkSGVhZGVyRmlsZT5yYXIuaHBwPC9QcmVjb21waWxlZEhlYWRlckZp
bGU+DQpAQCAtMTk4LDcgKzE5OCw3IEBACiAgICAgICA8TWluaW1hbFJlYnVpbGQ+ZmFsc2U8L01p
bmltYWxSZWJ1aWxkPg0KICAgICAgIDxFeGNlcHRpb25IYW5kbGluZz5TeW5jPC9FeGNlcHRpb25I
YW5kbGluZz4NCiAgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxp
YnJhcnk+DQotICAgICAgPFN0cnVjdE1lbWJlckFsaWdubWVudD40Qnl0ZXM8L1N0cnVjdE1lbWJl
ckFsaWdubWVudD4NCisgICAgICA8U3RydWN0TWVtYmVyQWxpZ25tZW50PkRlZmF1bHQ8L1N0cnVj
dE1lbWJlckFsaWdubWVudD4NCiAgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz50cnVlPC9CdWZm
ZXJTZWN1cml0eUNoZWNrPg0KICAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5j
dGlvbkxldmVsTGlua2luZz4NCiAgICAgICA8RW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldD5O
b0V4dGVuc2lvbnM8L0VuYWJsZUVuaGFuY2VkSW5zdHJ1Y3Rpb25TZXQ+DQpAQCAtMjM5LDcgKzIz
OSw3IEBACiAgICAgICA8TWluaW1hbFJlYnVpbGQ+ZmFsc2U8L01pbmltYWxSZWJ1aWxkPg0KICAg
ICAgIDxFeGNlcHRpb25IYW5kbGluZz5TeW5jPC9FeGNlcHRpb25IYW5kbGluZz4NCiAgICAgICA8
UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQotICAgICAgPFN0
cnVjdE1lbWJlckFsaWdubWVudD40Qnl0ZXM8L1N0cnVjdE1lbWJlckFsaWdubWVudD4NCisgICAg
ICA8U3RydWN0TWVtYmVyQWxpZ25tZW50PkRlZmF1bHQ8L1N0cnVjdE1lbWJlckFsaWdubWVudD4N
CiAgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz50cnVlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0K
ICAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4N
CiAgICAgICA8UnVudGltZVR5cGVJbmZvPmZhbHNlPC9SdW50aW1lVHlwZUluZm8+DQpAQCAtMjc0
LDcgKzI3NCw3IEBACiAgICAgICA8TWluaW1hbFJlYnVpbGQ+ZmFsc2U8L01pbmltYWxSZWJ1aWxk
Pg0KICAgICAgIDxFeGNlcHRpb25IYW5kbGluZz5TeW5jPC9FeGNlcHRpb25IYW5kbGluZz4NCiAg
ICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQotICAg
ICAgPFN0cnVjdE1lbWJlckFsaWdubWVudD40Qnl0ZXM8L1N0cnVjdE1lbWJlckFsaWdubWVudD4N
CisgICAgICA8U3RydWN0TWVtYmVyQWxpZ25tZW50PkRlZmF1bHQ8L1N0cnVjdE1lbWJlckFsaWdu
bWVudD4NCiAgICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjaz50cnVlPC9CdWZmZXJTZWN1cml0eUNo
ZWNrPg0KICAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlu
a2luZz4NCiAgICAgICA8RW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldD5Ob0V4dGVuc2lvbnM8
L0VuYWJsZUVuaGFuY2VkSW5zdHJ1Y3Rpb25TZXQ+DQpAQCAtMzE1LDcgKzMxNSw3IEBACiAgICAg
ICA8TWluaW1hbFJlYnVpbGQ+ZmFsc2U8L01pbmltYWxSZWJ1aWxkPg0KICAgICAgIDxFeGNlcHRp
b25IYW5kbGluZz5TeW5jPC9FeGNlcHRpb25IYW5kbGluZz4NCiAgICAgICA8UnVudGltZUxpYnJh
cnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQotICAgICAgPFN0cnVjdE1lbWJlckFs
aWdubWVudD40Qnl0ZXM8L1N0cnVjdE1lbWJlckFsaWdubWVudD4NCisgICAgICA8U3RydWN0TWVt
YmVyQWxpZ25tZW50PkRlZmF1bHQ8L1N0cnVjdE1lbWJlckFsaWdubWVudD4NCiAgICAgICA8QnVm
ZmVyU2VjdXJpdHlDaGVjaz50cnVlPC9CdWZmZXJTZWN1cml0eUNoZWNrPg0KICAgICAgIDxGdW5j
dGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCiAgICAgICA8UnVu
dGltZVR5cGVJbmZvPmZhbHNlPC9SdW50aW1lVHlwZUluZm8+DQpkaWZmIC11ciB1bnJhci02LjEu
Ny9hcmNoaXZlLmNwcCB1bnJhci02LjIuNy9hcmNoaXZlLmNwcAotLS0gdW5yYXItNi4xLjcvYXJj
aGl2ZS5jcHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysgdW5yYXItNi4yLjcvYXJjaGl2ZS5jcHAJ
MjAyMy0wNS0xNCAxMzoxMDozMwpAQCAtMywxNSArMywxNSBAQAogI2luY2x1ZGUgImFyY2NtdC5j
cHAiCiAKIAotQXJjaGl2ZTo6QXJjaGl2ZShSQVJPcHRpb25zICpJbml0Q21kKQorQXJjaGl2ZTo6
QXJjaGl2ZShDb21tYW5kRGF0YSAqSW5pdENtZCkKIHsKICAgQ21kPU5VTEw7IC8vIEp1c3QgaW4g
Y2FzZSB3ZSdsbCBoYXZlIGFuIGV4Y2VwdGlvbiBpbiAnbmV3JyBiZWxvdy4KIAogICBEdW1teUNt
ZD0oSW5pdENtZD09TlVMTCk7Ci0gIENtZD1EdW1teUNtZCA/IChuZXcgUkFST3B0aW9ucyk6SW5p
dENtZDsKKyAgQ21kPUR1bW15Q21kID8gKG5ldyBDb21tYW5kRGF0YSk6SW5pdENtZDsKIAogICBP
cGVuU2hhcmVkPUNtZC0+T3BlblNoYXJlZDsKLSAgRm9ybWF0PVJBUkZNVDE1OworICBGb3JtYXQ9
UkFSRk1UX05PTkU7CiAgIFNvbGlkPWZhbHNlOwogICBWb2x1bWU9ZmFsc2U7CiAgIE1haW5Db21t
ZW50PWZhbHNlOwpAQCAtMzEsOSArMzEsOSBAQAogICBOZXh0QmxvY2tQb3M9MDsKIAogCi0gIG1l
bXNldCgmTWFpbkhlYWQsMCxzaXplb2YoTWFpbkhlYWQpKTsKLSAgbWVtc2V0KCZDcnlwdEhlYWQs
MCxzaXplb2YoQ3J5cHRIZWFkKSk7Ci0gIG1lbXNldCgmRW5kQXJjSGVhZCwwLHNpemVvZihFbmRB
cmNIZWFkKSk7CisgIE1haW5IZWFkLlJlc2V0KCk7CisgIENyeXB0SGVhZD17fTsKKyAgRW5kQXJj
SGVhZC5SZXNldCgpOwogCiAgIFZvbE51bWJlcj0wOwogICBWb2xXcml0ZT0wOwpkaWZmIC11ciB1
bnJhci02LjEuNy9hcmNoaXZlLmhwcCB1bnJhci02LjIuNy9hcmNoaXZlLmhwcAotLS0gdW5yYXIt
Ni4xLjcvYXJjaGl2ZS5ocHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysgdW5yYXItNi4yLjcvYXJj
aGl2ZS5ocHAJMjAyMy0wNS0xNCAxMzoxMDozMwpAQCAtMzIsOCArMzIsOCBAQAogICAgIHNpemVf
dCBSZWFkSGVhZGVyMTQoKTsKICAgICBzaXplX3QgUmVhZEhlYWRlcjE1KCk7CiAgICAgc2l6ZV90
IFJlYWRIZWFkZXI1MCgpOwotICAgIHZvaWQgUHJvY2Vzc0V4dHJhNTAoUmF3UmVhZCAqUmF3LHNp
emVfdCBFeHRyYVNpemUsQmFzZUJsb2NrICpiYik7Ci0gICAgdm9pZCBSZXF1ZXN0QXJjUGFzc3dv
cmQoKTsKKyAgICB2b2lkIFByb2Nlc3NFeHRyYTUwKFJhd1JlYWQgKlJhdyxzaXplX3QgRXh0cmFT
aXplLGNvbnN0IEJhc2VCbG9jayAqYmIpOworICAgIHZvaWQgUmVxdWVzdEFyY1Bhc3N3b3JkKFJh
ckNoZWNrUGFzc3dvcmQgKlNlbFB3ZCk7CiAgICAgdm9pZCBVbmV4cEVuZEFyY01zZygpOwogICAg
IHZvaWQgQnJva2VuSGVhZGVyTXNnKCk7CiAgICAgdm9pZCBVbmtFbmNWZXJNc2coY29uc3Qgd2No
YXIgKk5hbWUsY29uc3Qgd2NoYXIgKkluZm8pOwpAQCAtNDUsNyArNDUsNyBAQAogI2VuZGlmCiAg
ICAgQ29tcHJEYXRhSU8gU3ViRGF0YUlPOwogICAgIGJvb2wgRHVtbXlDbWQ7Ci0gICAgUkFST3B0
aW9ucyAqQ21kOworICAgIENvbW1hbmREYXRhICpDbWQ7CiAKIAogICAgIFJhclRpbWUgTGF0ZXN0
VGltZTsKQEAgLTU4LDcgKzU4LDcgQEAKICAgICBib29sIFByb2hpYml0UU9wZW47CiAjZW5kaWYK
ICAgcHVibGljOgotICAgIEFyY2hpdmUoUkFST3B0aW9ucyAqSW5pdENtZD1OVUxMKTsKKyAgICBB
cmNoaXZlKENvbW1hbmREYXRhICpJbml0Q21kPU5VTEwpOwogICAgIH5BcmNoaXZlKCk7CiAgICAg
c3RhdGljIFJBUkZPUk1BVCBJc1NpZ25hdHVyZShjb25zdCBieXRlICpELHNpemVfdCBTaXplKTsK
ICAgICBib29sIElzQXJjaGl2ZShib29sIEVuYWJsZUJyb2tlbik7CkBAIC04Myw3ICs4Myw3IEBA
CiAgICAgICAgICBjb25zdCB3Y2hhciAqTmFtZSx1aW50IEZsYWdzKTsKICAgICBib29sIFJlYWRT
dWJEYXRhKEFycmF5PGJ5dGU+ICpVbnBEYXRhLEZpbGUgKkRlc3RGaWxlLGJvb2wgVGVzdE1vZGUp
OwogICAgIEhFQURFUl9UWVBFIEdldEhlYWRlclR5cGUoKSB7cmV0dXJuIEN1ckhlYWRlclR5cGU7
fQotICAgIFJBUk9wdGlvbnMqIEdldFJBUk9wdGlvbnMoKSB7cmV0dXJuIENtZDt9CisgICAgQ29t
bWFuZERhdGEqIEdldENvbW1hbmREYXRhKCkge3JldHVybiBDbWQ7fQogICAgIHZvaWQgU2V0U2ls
ZW50T3Blbihib29sIE1vZGUpIHtTaWxlbnRPcGVuPU1vZGU7fQogI2lmIDAKICAgICB2b2lkIEdl
dFJlY292ZXJ5SW5mbyhib29sIFJlcXVpcmVkLGludDY0ICpTaXplLGludCAqUGVyY2VudCk7CmRp
ZmYgLXVyIHVucmFyLTYuMS43L2FyY3JlYWQuY3BwIHVucmFyLTYuMi43L2FyY3JlYWQuY3BwCi0t
LSB1bnJhci02LjEuNy9hcmNyZWFkLmNwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisrKyB1bnJhci02
LjIuNy9hcmNyZWFkLmNwcAkyMDIzLTA1LTE0IDEzOjEwOjM0CkBAIC0xMDAsNiArMTAwLDkgQEAK
ICAgLy8gSWYgYmxvY2sgcG9zaXRpb25zIGFyZSBlcXVhbCB0byBmaWxlIHNpemUsIHRoaXMgaXMg
bm90IGFuIGVycm9yLgogICAvLyBJdCBjYW4gaGFwcGVuIHdoZW4gd2UgcmVhY2hlZCB0aGUgZW5k
IG9mIG9sZGVyIFJBUiAxLjUgYXJjaGl2ZSwKICAgLy8gd2hpY2ggZGlkIG5vdCBoYXZlIHRoZSBl
bmQgb2YgYXJjaGl2ZSBibG9jay4KKyAgLy8gV2UgY2FuJ3QgcmVwbGFjZSB0aGlzIGNoZWNrIGJ5
IGNoZWNraW5nIHRoYXQgcmVhZCBzaXplIGlzIGV4YWN0bHkgMAorICAvLyBpbiB0aGUgYmVnaW5u
aW5nIG9mIGZpbGUgaGVhZGVyLCBiZWNhdXNlIGluIHRoaXMgY2FzZSB0aGUgcmVhZCBwb3NpdGlv
bgorICAvLyBzdGlsbCBjYW4gYmUgYmV5b25kIHRoZSBlbmQgb2YgYXJjaGl2ZS4KICAgaWYgKEN1
ckJsb2NrUG9zIT1BcmNTaXplIHx8IE5leHRCbG9ja1BvcyE9QXJjU2l6ZSkKICAgewogICAgIHVp
TXNnKFVJRVJST1JfVU5FWFBFT0YsRmlsZU5hbWUpOwpAQCAtMTQ1LDcgKzE0OCw3IEBACiAjaWZk
ZWYgUkFSX05PQ1JZUFQgLy8gRm9yIHJhcmV4dC5kbGwgYW5kIHVucmFyX25vY3J5cHQuZGxsLgog
ICAgIHJldHVybiAwOwogI2Vsc2UKLSAgICBSZXF1ZXN0QXJjUGFzc3dvcmQoKTsKKyAgICBSZXF1
ZXN0QXJjUGFzc3dvcmQoTlVMTCk7CiAKICAgICBieXRlIFNhbHRbU0laRV9TQUxUMzBdOwogICAg
IGlmIChSZWFkKFNhbHQsU0laRV9TQUxUMzApIT1TSVpFX1NBTFQzMCkKQEAgLTI1MSw3ICsyNTQs
MTEgQEAKICAgICAgICAgaGQtPlNwbGl0QWZ0ZXI9KGhkLT5GbGFncyAmIExIRF9TUExJVF9BRlRF
UikhPTA7CiAgICAgICAgIGhkLT5FbmNyeXB0ZWQ9KGhkLT5GbGFncyAmIExIRF9QQVNTV09SRCkh
PTA7CiAgICAgICAgIGhkLT5TYWx0U2V0PShoZC0+RmxhZ3MgJiBMSERfU0FMVCkhPTA7CisgICAg
ICAgIAorICAgICAgICAvLyBSQVIgdmVyc2lvbnMgZWFybGllciB0aGFuIDIuMCBkbyBub3Qgc2V0
IHRoZSBzb2xpZCBmbGFnCisgICAgICAgIC8vIGluIGZpbGUgaGVhZGVyLiBUaGV5IHVzZSBvbmx5
IGEgZ2xvYmFsIHNvbGlkIGFyY2hpdmUgZmxhZy4KICAgICAgICAgaGQtPlNvbGlkPUZpbGVCbG9j
ayAmJiAoaGQtPkZsYWdzICYgTEhEX1NPTElEKSE9MDsKKwogICAgICAgICBoZC0+U3ViQmxvY2s9
IUZpbGVCbG9jayAmJiAoaGQtPkZsYWdzICYgTEhEX1NPTElEKSE9MDsKICAgICAgICAgaGQtPkRp
cj0oaGQtPkZsYWdzICYgTEhEX1dJTkRPV01BU0spPT1MSERfRElSRUNUT1JZOwogICAgICAgICBo
ZC0+V2luU2l6ZT1oZC0+RGlyID8gMDoweDEwMDAwPDwoKGhkLT5GbGFncyAmIExIRF9XSU5ET1dN
QVNLKT4+NSk7CkBAIC01NzcsMTQgKzU4NCwyMCBAQAogICAgIC8vIGluIC1wPHB3ZD4gdG8gbm90
IHN0b3AgYmF0Y2ggcHJvY2Vzc2luZyBmb3IgZW5jcnlwdGVkIGFyY2hpdmVzLgogICAgIGJvb2wg
R2xvYmFsUGFzc3dvcmQ9Q21kLT5QYXNzd29yZC5Jc1NldCgpIHx8IHVpSXNHbG9iYWxQYXNzd29y
ZFNldCgpOwogCisgICAgUmFyQ2hlY2tQYXNzd29yZCBDaGVja1B3ZDsKKyAgICBpZiAoQ3J5cHRI
ZWFkLlVzZVBzd0NoZWNrICYmICFCcm9rZW5IZWFkZXIpCisgICAgICBDaGVja1B3ZC5TZXQoQ3J5
cHRIZWFkLlNhbHQsSGVhZGVyc0luaXRWLENyeXB0SGVhZC5MZzJDb3VudCxDcnlwdEhlYWQuUHN3
Q2hlY2spOworICAgIAogICAgIHdoaWxlICh0cnVlKSAvLyBSZXBlYXQgdGhlIHBhc3N3b3JkIHBy
b21wdCBmb3Igd3JvbmcgcGFzc3dvcmRzLgogICAgIHsKLSAgICAgIFJlcXVlc3RBcmNQYXNzd29y
ZCgpOworICAgICAgUmVxdWVzdEFyY1Bhc3N3b3JkKENoZWNrUHdkLklzU2V0KCkgPyAmQ2hlY2tQ
d2Q6TlVMTCk7CiAKICAgICAgIGJ5dGUgUHN3Q2hlY2tbU0laRV9QU1dDSEVDS107CiAgICAgICBI
ZWFkZXJzQ3J5cHQuU2V0Q3J5cHRLZXlzKGZhbHNlLENSWVBUX1JBUjUwLCZDbWQtPlBhc3N3b3Jk
LENyeXB0SGVhZC5TYWx0LEhlYWRlcnNJbml0VixDcnlwdEhlYWQuTGcyQ291bnQsTlVMTCxQc3dD
aGVjayk7Ci0gICAgICAvLyBWZXJpZnkgcGFzc3dvcmQgdmFsaWRpdHkuCi0gICAgICBpZiAoQ3J5
cHRIZWFkLlVzZVBzd0NoZWNrICYmIG1lbWNtcChQc3dDaGVjayxDcnlwdEhlYWQuUHN3Q2hlY2ss
U0laRV9QU1dDSEVDSykhPTApCisgICAgICAvLyBWZXJpZnkgcGFzc3dvcmQgdmFsaWRpdHkuIElm
IGhlYWRlciBpcyBkYW1hZ2VkLCB3ZSBjYW5ub3QgcmVseSBvbgorICAgICAgLy8gcGFzc3dvcmQg
Y2hlY2sgdmFsdWUsIGJlY2F1c2UgaXQgY2FuIGJlIGRhbWFnZWQgdG9vLgorICAgICAgaWYgKENy
eXB0SGVhZC5Vc2VQc3dDaGVjayAmJiAhQnJva2VuSGVhZGVyICYmCisgICAgICAgICAgbWVtY21w
KFBzd0NoZWNrLENyeXB0SGVhZC5Qc3dDaGVjayxTSVpFX1BTV0NIRUNLKSE9MCkKICAgICAgIHsK
ICAgICAgICAgaWYgKEdsb2JhbFBhc3N3b3JkKSAvLyBGb3IgLXA8cHdkPiBvciBDdHJsK1AuCiAg
ICAgICAgIHsKQEAgLTg1MCw4ICs4NjMsNiBAQAogICAgICAgICBoZC0+RGlyPShoZC0+RmlsZUZs
YWdzICYgRkhGTF9ESVJFQ1RPUlkpIT0wOwogICAgICAgICBoZC0+V2luU2l6ZT1oZC0+RGlyID8g
MDpzaXplX3QoMHgyMDAwMCk8PCgoQ29tcEluZm8+PjEwKSYweGYpOwogCi0gICAgICAgIGhkLT5D
cnlwdE1ldGhvZD1oZC0+RW5jcnlwdGVkID8gQ1JZUFRfUkFSNTA6Q1JZUFRfTk9ORTsKLQogICAg
ICAgICBjaGFyIEZpbGVOYW1lW05NKjRdOwogICAgICAgICBzaXplX3QgUmVhZE5hbWVTaXplPU1p
bihOYW1lU2l6ZSxBU0laRShGaWxlTmFtZSktMSk7CiAgICAgICAgIFJhdy5HZXRCKChieXRlICop
RmlsZU5hbWUsUmVhZE5hbWVTaXplKTsKQEAgLTg3NSwyNiArODg2LDcgQEAKICAgICAgICAgaWYg
KCFGaWxlQmxvY2sgJiYgaGQtPkNtcE5hbWUoU1VCSEVBRF9UWVBFX0NNVCkpCiAgICAgICAgICAg
TWFpbkNvbW1lbnQ9dHJ1ZTsKIAotI2lmIDAKLSAgICAgICAgLy8gRm9yIFJBUjUgZm9ybWF0IHdl
IHJlYWQgdGhlIHVzZXIgc3BlY2lmaWVkIHJlY292ZXJ5IHBlcmNlbnQgaGVyZS4KLSAgICAgICAg
Ly8gSXQgd291bGQgYmUgdXNlZnVsIHRvIGRvIGl0IGZvciBzaGVsbCBleHRlbnNpb24gdG9vLCBz
byB3ZSBkaXNwbGF5Ci0gICAgICAgIC8vIHRoZSBjb3JyZWN0IHJlY292ZXJ5IHJlY29yZCBzaXpl
IGluIGFyY2hpdmUgcHJvcGVydGllcy4gQnV0IHRoZW4KLSAgICAgICAgLy8gd2Ugd291bGQgbmVl
ZCB0byBpbmNsdWRlIHRoZSBlbnRpcmUgcmVjb3ZlcnkgcmVjb3JkIHByb2Nlc3NpbmcKLSAgICAg
ICAgLy8gY29kZSB0byBzaGVsbCBleHRlbnNpb24sIHdoaWNoIGlzIG5vdCBkb25lIG5vdy4KLSAg
ICAgICAgaWYgKCFGaWxlQmxvY2sgJiYgaGQtPkNtcE5hbWUoU1VCSEVBRF9UWVBFX1JSKSAmJiBo
ZC0+U3ViRGF0YS5TaXplKCk+MCkKLSAgICAgICAgewotICAgICAgICAgIC8vIEl0IGlzIHN0b3Jl
ZCBhcyBhIHNpbmdsZSBieXRlIHVwIHRvIFJBUiA2LjAyIGFuZCBhcyB2aW50IHNpbmNlCi0gICAg
ICAgICAgLy8gNi4xMCwgd2hlcmUgd2UgZXh0ZW5kZWQgdGhlIG1heGltdW0gUlIgc2l6ZSBmcm9t
IDk5JSB0byAxMDAwJS4KLSAgICAgICAgICBSYXdSZWFkIFJhd1BlcmNlbnQ7Ci0gICAgICAgICAg
UmF3UGVyY2VudC5SZWFkKCZoZC0+U3ViRGF0YVswXSxoZC0+U3ViRGF0YS5TaXplKCkpOwotICAg
ICAgICAgIFJlY292ZXJ5UGVyY2VudD0oaW50KVJhd1BlcmNlbnQuR2V0VigpOwogCi0gICAgICAg
ICAgUlNCbG9ja0hlYWRlciBIZWFkZXI7Ci0gICAgICAgICAgR2V0UlJJbmZvKHRoaXMsJkhlYWRl
cik7Ci0gICAgICAgICAgUmVjb3ZlcnlTaXplPUhlYWRlci5SZWNTZWN0aW9uU2l6ZSpIZWFkZXIu
UmVjQ291bnQ7Ci0gICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgIGlmIChCYWRDUkMpIC8vIEFk
ZCB0aGUgZmlsZSBuYW1lIHRvIGJyb2tlbiBoZWFkZXIgbWVzc2FnZSBkaXNwbGF5ZWQgYWJvdmUu
CiAgICAgICAgICAgdWlNc2coVUlFUlJPUl9GSEVBREVSQlJPS0VOLEFyY2hpdmU6OkZpbGVOYW1l
LGhkLT5GaWxlTmFtZSk7CiAgICAgICB9CkBAIC05MTYsNyArOTA4LDcgQEAKIAogCiAjaWYgIWRl
ZmluZWQoUkFSX05PQ1JZUFQpCi12b2lkIEFyY2hpdmU6OlJlcXVlc3RBcmNQYXNzd29yZCgpCit2
b2lkIEFyY2hpdmU6OlJlcXVlc3RBcmNQYXNzd29yZChSYXJDaGVja1Bhc3N3b3JkICpDaGVja1B3
ZCkKIHsKICAgaWYgKCFDbWQtPlBhc3N3b3JkLklzU2V0KCkpCiAgIHsKQEAgLTk0Niw3ICs5Mzgs
NyBAQAogICAgICAgRXJySGFuZGxlci5FeGl0KFJBUlhfVVNFUkJSRUFLKTsKICAgICB9CiAjZWxz
ZQotICAgIGlmICghdWlHZXRQYXNzd29yZChVSVBBU1NXT1JEX0FSQ0hJVkUsRmlsZU5hbWUsJkNt
ZC0+UGFzc3dvcmQpKQorICAgIGlmICghdWlHZXRQYXNzd29yZChVSVBBU1NXT1JEX0FSQ0hJVkUs
RmlsZU5hbWUsJkNtZC0+UGFzc3dvcmQsQ2hlY2tQd2QpKQogICAgIHsKICAgICAgIENsb3NlKCk7
CiAgICAgICB1aU1zZyhVSUVSUk9SX0lOQ0VSUkNPVU5UKTsgLy8gUHJldmVudCBhcmNoaXZlIGRl
bGV0aW5nIGlmIGRlbGV0ZSBhZnRlciBleHRyYWN0aW9uIGlzIG9uLgpAQCAtOTU5LDcgKzk1MSw3
IEBACiAjZW5kaWYKIAogCi12b2lkIEFyY2hpdmU6OlByb2Nlc3NFeHRyYTUwKFJhd1JlYWQgKlJh
dyxzaXplX3QgRXh0cmFTaXplLEJhc2VCbG9jayAqYmIpCit2b2lkIEFyY2hpdmU6OlByb2Nlc3NF
eHRyYTUwKFJhd1JlYWQgKlJhdyxzaXplX3QgRXh0cmFTaXplLGNvbnN0IEJhc2VCbG9jayAqYmIp
CiB7CiAgIC8vIFJlYWQgZXh0cmEgZGF0YSBmcm9tIHRoZSBlbmQgb2YgYmxvY2sgc2tpcHBpbmcg
YW55IGZpZWxkcyBiZWZvcmUgaXQuCiAgIHNpemVfdCBFeHRyYVN0YXJ0PVJhdy0+U2l6ZSgpLUV4
dHJhU2l6ZTsKQEAgLTk4MiwyMiArOTc0LDU3IEBACiAgICAgaWYgKGJiLT5IZWFkZXJUeXBlPT1I
RUFEX01BSU4pCiAgICAgewogICAgICAgTWFpbkhlYWRlciAqaGQ9KE1haW5IZWFkZXIgKiliYjsK
LSAgICAgIGlmIChGaWVsZFR5cGU9PU1IRVhUUkFfTE9DQVRPUikKKyAgICAgIHN3aXRjaChGaWVs
ZFR5cGUpCiAgICAgICB7Ci0gICAgICAgIGhkLT5Mb2NhdG9yPXRydWU7Ci0gICAgICAgIHVpbnQg
RmxhZ3M9KHVpbnQpUmF3LT5HZXRWKCk7Ci0gICAgICAgIGlmICgoRmxhZ3MgJiBNSEVYVFJBX0xP
Q0FUT1JfUUxJU1QpIT0wKQotICAgICAgICB7Ci0gICAgICAgICAgdWludDY0IE9mZnNldD1SYXct
PkdldFYoKTsKLSAgICAgICAgICBpZiAoT2Zmc2V0IT0wKSAvLyAwIG1lYW5zIHRoYXQgcmVzZXJ2
ZWQgc3BhY2Ugd2FzIG5vdCBlbm91Z2ggdG8gd3JpdGUgdGhlIG9mZnNldC4KLSAgICAgICAgICAg
IGhkLT5RT3Blbk9mZnNldD1PZmZzZXQrQ3VyQmxvY2tQb3M7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKChGbGFncyAmIE1IRVhUUkFfTE9DQVRPUl9SUikhPTApCi0gICAgICAgIHsKLSAgICAgICAg
ICB1aW50NjQgT2Zmc2V0PVJhdy0+R2V0VigpOwotICAgICAgICAgIGlmIChPZmZzZXQhPTApIC8v
IDAgbWVhbnMgdGhhdCByZXNlcnZlZCBzcGFjZSB3YXMgbm90IGVub3VnaCB0byB3cml0ZSB0aGUg
b2Zmc2V0LgotICAgICAgICAgICAgaGQtPlJST2Zmc2V0PU9mZnNldCtDdXJCbG9ja1BvczsKLSAg
ICAgICAgfQorICAgICAgICBjYXNlIE1IRVhUUkFfTE9DQVRPUjoKKyAgICAgICAgICB7CisgICAg
ICAgICAgICBoZC0+TG9jYXRvcj10cnVlOworICAgICAgICAgICAgdWludCBGbGFncz0odWludClS
YXctPkdldFYoKTsKKyAgICAgICAgICAgIGlmICgoRmxhZ3MgJiBNSEVYVFJBX0xPQ0FUT1JfUUxJ
U1QpIT0wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB1aW50NjQgT2Zmc2V0PVJhdy0+
R2V0VigpOworICAgICAgICAgICAgICBpZiAoT2Zmc2V0IT0wKSAvLyAwIG1lYW5zIHRoYXQgcmVz
ZXJ2ZWQgc3BhY2Ugd2FzIG5vdCBlbm91Z2ggdG8gd3JpdGUgdGhlIG9mZnNldC4KKyAgICAgICAg
ICAgICAgICBoZC0+UU9wZW5PZmZzZXQ9T2Zmc2V0K0N1ckJsb2NrUG9zOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKChGbGFncyAmIE1IRVhUUkFfTE9DQVRPUl9SUikhPTApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIHVpbnQ2NCBPZmZzZXQ9UmF3LT5HZXRWKCk7CisgICAg
ICAgICAgICAgIGlmIChPZmZzZXQhPTApIC8vIDAgbWVhbnMgdGhhdCByZXNlcnZlZCBzcGFjZSB3
YXMgbm90IGVub3VnaCB0byB3cml0ZSB0aGUgb2Zmc2V0LgorICAgICAgICAgICAgICAgIGhkLT5S
Uk9mZnNldD1PZmZzZXQrQ3VyQmxvY2tQb3M7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQor
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1IRVhUUkFfTUVUQURBVEE6CisgICAgICAg
ICAgeworICAgICAgICAgICAgdWludCBGbGFncz0odWludClSYXctPkdldFYoKTsKKyAgICAgICAg
ICAgIGlmICgoRmxhZ3MgJiBNSEVYVFJBX01FVEFEQVRBX05BTUUpIT0wKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICB1aW50NjQgTmFtZVNpemU9UmF3LT5HZXRWKCk7CisgICAgICAgICAg
ICAgIGlmIChOYW1lU2l6ZTwweDEwMDAwKSAvLyBQcmV2ZW50IGV4Y2Vzc2l2ZSBhbGxvY2F0aW9u
LgorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y2hhcj4gTmFt
ZVUoKHNpemVfdClOYW1lU2l6ZSk7IC8vIFVURi04IG5hbWUuCisgICAgICAgICAgICAgICAgUmF3
LT5HZXRCKCZOYW1lVVswXSwoc2l6ZV90KU5hbWVTaXplKTsKKyAgICAgICAgICAgICAgICAvLyBJ
ZiBzdGFydHMgZnJvbSAwLCB0aGUgbmFtZSB3YXMgbG9uZ2VyIHRoYW4gcmVzZXJ2ZWQgc3BhY2UK
KyAgICAgICAgICAgICAgICAvLyB3aGVuIHNhdmluZyB0aGlzIGV4dHJhIGZpZWxkLgorICAgICAg
ICAgICAgICAgIGlmIChOYW1lVVswXSE9MCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICBOYW1lVS5wdXNoX2JhY2soMCk7CisgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rv
cjx3Y2hhcj4gTmFtZVcoTmFtZVUuc2l6ZSgpKjQpOworICAgICAgICAgICAgICAgICAgVXRmVG9X
aWRlKCZOYW1lVVswXSwmTmFtZVdbMF0sTmFtZVcuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAg
IGhkLT5PcmlnTmFtZS5hc3NpZ24oJk5hbWVXWzBdKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoRmxhZ3MgJiBNSEVY
VFJBX01FVEFEQVRBX0NUSU1FKSE9MCkKKyAgICAgICAgICAgICAgaWYgKChGbGFncyAmIE1IRVhU
UkFfTUVUQURBVEFfVU5JWFRJTUUpIT0wKQorICAgICAgICAgICAgICAgIGlmICgoRmxhZ3MgJiBN
SEVYVFJBX01FVEFEQVRBX1VOSVhfTlMpIT0wKQorICAgICAgICAgICAgICAgICAgaGQtPk9yaWdU
aW1lLlNldFVuaXhOUyhSYXctPkdldDgoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgaGQtPk9yaWdUaW1lLlNldFVuaXgoKHRpbWVfdClSYXctPkdldDQoKSk7Cisg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBoZC0+T3JpZ1RpbWUuU2V0V2luKFJh
dy0+R2V0OCgpKTsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAg
fQogCkBAIC0xNDUzLDcgKzE0ODAsOSBAQAogICB7CiAgICAgaWYgKFN1YkhlYWQuVW5wU2l6ZT4w
eDEwMDAwMDApCiAgICAgewotICAgICAgLy8gU28gaHVnZSBhbGxvY2F0aW9uIG11c3QgbmV2ZXIg
aGFwcGVuIGluIHZhbGlkIGFyY2hpdmVzLgorICAgICAgLy8gUHJldmVudCB0aGUgZXhjZXNzaXZl
IGFsbG9jYXRpb24uIFdoZW4gcmVhZGluZyB0byBtZW1vcnksIG5vcm1hbGx5CisgICAgICAvLyB0
aGlzIGZ1bmN0aW9uIG9wZXJhdGVzIHdpdGggcmVhc29uYWJseSBzbWFsbCBibG9ja3MsIHN1Y2gg
YXMKKyAgICAgIC8vIHRoZSBhcmNoaXZlIGNvbW1lbnQsIE5URlMgQUNMIG9yICJab25lLklkZW50
aWZpZXIiIE5URlMgc3RyZWFtLgogICAgICAgdWlNc2coVUlFUlJPUl9TVUJIRUFERVJVTktOT1dO
LEZpbGVOYW1lKTsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CmRpZmYgLXVyIHVucmFyLTYu
MS43L2FycmF5LmhwcCB1bnJhci02LjIuNy9hcnJheS5ocHAKLS0tIHVucmFyLTYuMS43L2FycmF5
LmhwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisrKyB1bnJhci02LjIuNy9hcnJheS5ocHAJMjAyMy0w
NS0xNCAxMzoxMDozNApAQCAtMTAsNyArMTAsNiBAQAogICAgIHNpemVfdCBCdWZTaXplOwogICAg
IHNpemVfdCBBbGxvY1NpemU7CiAgICAgc2l6ZV90IE1heFNpemU7Ci0gICAgYm9vbCBTZWN1cmU7
IC8vIENsZWFuIG1lbW9yeSBpZiB0cnVlLgogICBwdWJsaWM6CiAgICAgQXJyYXkoKTsKICAgICBB
cnJheShzaXplX3QgU2l6ZSk7CkBAIC0yNCwxNCArMjMsMTMgQEAKICAgICB2b2lkIEFsbG9jKHNp
emVfdCBJdGVtcyk7CiAgICAgdm9pZCBSZXNldCgpOwogICAgIHZvaWQgU29mdFJlc2V0KCk7Ci0g
ICAgdm9pZCBvcGVyYXRvciA9IChBcnJheTxUPiAmU3JjKTsKKyAgICBBcnJheTxUPiYgb3BlcmF0
b3IgPSAoY29uc3QgQXJyYXk8VD4gJlNyYyk7CiAgICAgdm9pZCBQdXNoKFQgSXRlbSk7CiAgICAg
dm9pZCBBcHBlbmQoVCAqSXRlbSxzaXplX3QgQ291bnQpOwogICAgIFQqIEFkZHIoc2l6ZV90IEl0
ZW0pIHtyZXR1cm4gQnVmZmVyK0l0ZW07fQogICAgIHZvaWQgU2V0TWF4U2l6ZShzaXplX3QgU2l6
ZSkge01heFNpemU9U2l6ZTt9CiAgICAgVCogQmVnaW4oKSB7cmV0dXJuIEJ1ZmZlcjt9CiAgICAg
VCogRW5kKCkge3JldHVybiBCdWZmZXI9PU5VTEwgPyBOVUxMOkJ1ZmZlcitCdWZTaXplO30KLSAg
ICB2b2lkIFNldFNlY3VyZSgpIHtTZWN1cmU9dHJ1ZTt9CiB9OwogCiAKQEAgLTQxLDcgKzM5LDYg
QEAKICAgQnVmU2l6ZT0wOwogICBBbGxvY1NpemU9MDsKICAgTWF4U2l6ZT0wOwotICBTZWN1cmU9
ZmFsc2U7CiB9CiAKIApAQCAtNzEsMTEgKzY4LDcgQEAKIHRlbXBsYXRlIDxjbGFzcyBUPiBBcnJh
eTxUPjo6fkFycmF5KCkKIHsKICAgaWYgKEJ1ZmZlciE9TlVMTCkKLSAgewotICAgIGlmIChTZWN1
cmUpCi0gICAgICBjbGVhbmRhdGEoQnVmZmVyLEFsbG9jU2l6ZSpzaXplb2YoVCkpOwogICAgIGZy
ZWUoQnVmZmVyKTsKLSAgfQogfQogCiAKQEAgLTExMSwyNSArMTA0LDkgQEAKICAgICBzaXplX3Qg
U3VnZ2VzdGVkPUFsbG9jU2l6ZStBbGxvY1NpemUvNCszMjsKICAgICBzaXplX3QgTmV3U2l6ZT1N
YXgoQnVmU2l6ZSxTdWdnZXN0ZWQpOwogCi0gICAgVCAqTmV3QnVmZmVyOwotICAgIGlmIChTZWN1
cmUpCi0gICAgewotICAgICAgTmV3QnVmZmVyPShUICopbWFsbG9jKE5ld1NpemUqc2l6ZW9mKFQp
KTsKLSAgICAgIGlmIChOZXdCdWZmZXI9PU5VTEwpCi0gICAgICAgIEVyckhhbmRsZXIuTWVtb3J5
RXJyb3IoKTsKLSAgICAgIGlmIChCdWZmZXIhPU5VTEwpCi0gICAgICB7Ci0gICAgICAgIG1lbWNw
eShOZXdCdWZmZXIsQnVmZmVyLEFsbG9jU2l6ZSpzaXplb2YoVCkpOwotICAgICAgICBjbGVhbmRh
dGEoQnVmZmVyLEFsbG9jU2l6ZSpzaXplb2YoVCkpOwotICAgICAgICBmcmVlKEJ1ZmZlcik7Ci0g
ICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBOZXdCdWZmZXI9KFQgKilyZWFs
bG9jKEJ1ZmZlcixOZXdTaXplKnNpemVvZihUKSk7Ci0gICAgICBpZiAoTmV3QnVmZmVyPT1OVUxM
KQotICAgICAgICBFcnJIYW5kbGVyLk1lbW9yeUVycm9yKCk7Ci0gICAgfQorICAgIFQgKk5ld0J1
ZmZlcj0oVCAqKXJlYWxsb2MoQnVmZmVyLE5ld1NpemUqc2l6ZW9mKFQpKTsKKyAgICBpZiAoTmV3
QnVmZmVyPT1OVUxMKQorICAgICAgRXJySGFuZGxlci5NZW1vcnlFcnJvcigpOwogICAgIEJ1ZmZl
cj1OZXdCdWZmZXI7CiAgICAgQWxsb2NTaXplPU5ld1NpemU7CiAgIH0KQEAgLTE2NSwxMiArMTQy
LDEzIEBACiB9CiAKIAotdGVtcGxhdGUgPGNsYXNzIFQ+IHZvaWQgQXJyYXk8VD46Om9wZXJhdG9y
ID0oQXJyYXk8VD4gJlNyYykKK3RlbXBsYXRlIDxjbGFzcyBUPiBBcnJheTxUPiYgQXJyYXk8VD46
Om9wZXJhdG9yID0oY29uc3QgQXJyYXk8VD4gJlNyYykKIHsKICAgUmVzZXQoKTsKICAgQWxsb2Mo
U3JjLkJ1ZlNpemUpOwogICBpZiAoU3JjLkJ1ZlNpemUhPTApCiAgICAgbWVtY3B5KCh2b2lkICop
QnVmZmVyLCh2b2lkICopU3JjLkJ1ZmZlcixTcmMuQnVmU2l6ZSpzaXplb2YoVCkpOworICByZXR1
cm4gKnRoaXM7CiB9CiAKIApkaWZmIC11ciB1bnJhci02LjEuNy9ibGFrZTJzLmhwcCB1bnJhci02
LjIuNy9ibGFrZTJzLmhwcAotLS0gdW5yYXItNi4xLjcvYmxha2Uycy5ocHAJMjAyMi0xMC0xOSAy
MjowNToxMgorKysgdW5yYXItNi4yLjcvYmxha2Uycy5ocHAJMjAyMy0wNS0xNCAxMzoxMDozNApA
QCAtMjAsMTAgKzIwLDE1IEBACiAvLyAnbmV3JyBvcGVyYXRvci4KIHN0cnVjdCBibGFrZTJzX3N0
YXRlCiB7Ci0gIGVudW0geyBCTEFLRV9BTElHTk1FTlQgPSA2NCB9OworICAvLyBVc2UgY29uc3Rl
eHByIGluc3RlYWQgb2YgZW51bXMsIGJlY2F1c2Ugb3RoZXJ3aXNlIGNsYW5nIC1zdGQ9YysrMjAK
KyAgLy8gaXNzdWVzIGEgd2FybmluZyBhYm91dCAiYXJpdGhtZXRpYyBiZXR3ZWVuIGRpZmZlcmVu
dCBlbnVtZXJhdGlvbiB0eXBlcyIKKyAgLy8gaW4gdWJ1ZltCTEFLRV9EQVRBX1NJWkUgKyBCTEFL
RV9BTElHTk1FTlRdIGRlY2xhcmF0aW9uLgorICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBCTEFL
RV9BTElHTk1FTlQgPSA2NDsKIAogICAvLyBidWZmZXIgYW5kIHVpbnQzMiBoWzhdLCB0WzJdLCBm
WzJdOwotICBlbnVtIHsgQkxBS0VfREFUQV9TSVpFID0gNDggKyAyICogQkxBS0UyU19CTE9DS0JZ
VEVTIH07CisgIC8vIDIgKiBCTEFLRTJTX0JMT0NLQllURVMgaXMgdGhlIGJ1ZiBzaXplIGluIGJs
YWtlMl9jb2RlXzIwMTQwMTE0LnppcC4KKyAgLy8gSXQgbWlnaHQgZGlmZmVyIGluIGxhdGVyIHZl
cnNpb25zLgorICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBCTEFLRV9EQVRBX1NJWkUgPSA0OCAr
IDIgKiBCTEFLRTJTX0JMT0NLQllURVM7CiAKICAgYnl0ZSB1YnVmW0JMQUtFX0RBVEFfU0laRSAr
IEJMQUtFX0FMSUdOTUVOVF07CiAKZGlmZiAtdXIgdW5yYXItNi4xLjcvY21kZGF0YS5jcHAgdW5y
YXItNi4yLjcvY21kZGF0YS5jcHAKLS0tIHVucmFyLTYuMS43L2NtZGRhdGEuY3BwCTIwMjItMTAt
MTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L2NtZGRhdGEuY3BwCTIwMjMtMDUtMTQgMTM6MTA6
MzQKQEAgLTI2LDkgKzI2LDEwIEBACiAgIEZpbGVBcmdzLlJlc2V0KCk7CiAgIEV4Y2xBcmdzLlJl
c2V0KCk7CiAgIEluY2xBcmdzLlJlc2V0KCk7Ci0gIFN0b3JlQXJncy5SZXNldCgpOwogICBBcmNO
YW1lcy5SZXNldCgpOwotICBOZXh0Vm9sU2l6ZXMuUmVzZXQoKTsKKyAgU3RvcmVBcmdzLlJlc2V0
KCk7CisgIFBhc3N3b3JkLkNsZWFuKCk7CisgIE5leHRWb2xTaXplcy5jbGVhcigpOwogfQogCiAK
QEAgLTMxNCw2ICszMTUsMjEgQEAKICAgICAgICAgY2FzZSAnSSc6CiAgICAgICAgICAgSWdub3Jl
R2VuZXJhbEF0dHI9dHJ1ZTsKICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnTSc6Cisg
ICAgICAgICAgc3dpdGNoKHRvdXBwZXJ3KFN3aXRjaFsyXSkpCisgICAgICAgICAgeworICAgICAg
ICAgICAgY2FzZSAwOgorICAgICAgICAgICAgY2FzZSAnUyc6CisgICAgICAgICAgICAgIEFyY01l
dGFkYXRhPUFSQ01FVEFfU0FWRTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlICdSJzoKKyAgICAgICAgICAgICAgQXJjTWV0YWRhdGE9QVJDTUVUQV9SRVNUT1JFOworICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIEJh
ZFN3aXRjaChTd2l0Y2gpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgJ04nOiAvLyBSZXNlcnZlZCBmb3IgYXJjaGl2ZSBu
YW1lLgogICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlICdPJzoKQEAgLTQxNSw3ICs0MzEs
NyBAQAogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGlmICghUGFzc3dvcmQuSXNTZXQoKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdWlHZXRQYXNzd29yZChVSVBBU1NXT1JEX0dM
T0JBTCxOVUxMLCZQYXNzd29yZCk7CisgICAgICAgICAgICAgIHVpR2V0UGFzc3dvcmQoVUlQQVNT
V09SRF9HTE9CQUwsTlVMTCwmUGFzc3dvcmQsTlVMTCk7CiAgICAgICAgICAgICAgIGVwcmludGYo
TCJcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgIGJyZWFrOwpAQCAtNjg1LDcgKzcwMSw3
IEBACiAgICAgY2FzZSAnUCc6CiAgICAgICBpZiAoU3dpdGNoWzFdPT0wKQogICAgICAgewotICAg
ICAgICB1aUdldFBhc3N3b3JkKFVJUEFTU1dPUkRfR0xPQkFMLE5VTEwsJlBhc3N3b3JkKTsKKyAg
ICAgICAgdWlHZXRQYXNzd29yZChVSVBBU1NXT1JEX0dMT0JBTCxOVUxMLCZQYXNzd29yZCxOVUxM
KTsKICAgICAgICAgZXByaW50ZihMIlxuIik7CiAgICAgICB9CiAgICAgICBlbHNlCmRpZmYgLXVy
IHVucmFyLTYuMS43L2NtZGRhdGEuaHBwIHVucmFyLTYuMi43L2NtZGRhdGEuaHBwCi0tLSB1bnJh
ci02LjEuNy9jbWRkYXRhLmhwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisrKyB1bnJhci02LjIuNy9j
bWRkYXRhLmhwcAkyMDIzLTA1LTE0IDEzOjEwOjM0CkBAIC0yLDcgKzIsNyBAQAogI2RlZmluZSBf
UkFSX0NNRERBVEFfCiAKIAotI2RlZmluZSBEZWZhdWx0U3RvcmVMaXN0IEwiN3o7YWNlO2Fyajti
ejI7Y2FiO2d6O2pwZWc7anBnO2xoYTtsejtsemg7bXAzO3Jhcjt0YXo7dGd6O3h6O3o7emlwO3pp
cHgiCisjZGVmaW5lIERlZmF1bHRTdG9yZUxpc3QgTCI3ejthY2U7YXJqO2J6MjtjYWI7Z3o7anBl
ZztqcGc7bGhhO2x6O2x6aDttcDM7cmFyO3Rhejt0Yno7dGJ6Mjt0Z3o7dHh6O3h6O3o7emlwO3pp
cHg7enN0O3R6c3QiCiAKIGVudW0gUkFSX0NNRF9MSVNUX01PREUge1JDTE1fQVVUTyxSQ0xNX1JF
SkVDVF9MSVNUUyxSQ0xNX0FDQ0VQVF9MSVNUU307CiAKQEAgLTY1LDYgKzY1LDEwIEBACiAgICAg
U3RyaW5nTGlzdCBJbmNsQXJnczsKICAgICBTdHJpbmdMaXN0IEFyY05hbWVzOwogICAgIFN0cmlu
Z0xpc3QgU3RvcmVBcmdzOworCisgICAgU2VjUGFzc3dvcmQgUGFzc3dvcmQ7CisKKyAgICBzdGQ6
OnZlY3RvcjxpbnQ2ND4gTmV4dFZvbFNpemVzOwogfTsKIAogI2VuZGlmCmRpZmYgLXVyIHVucmFy
LTYuMS43L2NtZGZpbHRlci5jcHAgdW5yYXItNi4yLjcvY21kZmlsdGVyLmNwcAotLS0gdW5yYXIt
Ni4xLjcvY21kZmlsdGVyLmNwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisrKyB1bnJhci02LjIuNy9j
bWRmaWx0ZXIuY3BwCTIwMjMtMDUtMTQgMTM6MTA6MzQKQEAgLTI4OSw4ICsyODksOCBAQAogICAg
IHJldHVybiAwOwogICBpZiAoKEZpbGVIZWFkLkZpbGVBdHRyICYgRXhjbEZpbGVBdHRyKSE9MCB8
fCBGaWxlSGVhZC5EaXIgJiYgRXhjbERpcikKICAgICByZXR1cm4gMDsKLSAgaWYgKEluY2xBdHRy
U2V0ICYmICghRmlsZUhlYWQuRGlyICYmIChGaWxlSGVhZC5GaWxlQXR0ciAmIEluY2xGaWxlQXR0
cik9PTAgfHwKLSAgICAgIEZpbGVIZWFkLkRpciAmJiAhSW5jbERpcikpCisgIGlmIChJbmNsQXR0
clNldCAmJiAoRmlsZUhlYWQuRmlsZUF0dHIgJiBJbmNsRmlsZUF0dHIpPT0wICYmCisgICAgICAo
IUZpbGVIZWFkLkRpciB8fCAhSW5jbERpcikpCiAgICAgcmV0dXJuIDA7CiAgIGlmICghRGlyICYm
IFNpemVDaGVjayhGaWxlSGVhZC5VbnBTaXplKSkKICAgICByZXR1cm4gMDsKZGlmZiAtdXIgdW5y
YXItNi4xLjcvY21kbWl4LmNwcCB1bnJhci02LjIuNy9jbWRtaXguY3BwCi0tLSB1bnJhci02LjEu
Ny9jbWRtaXguY3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L2NtZG1peC5j
cHAJMjAyMy0wNS0xNCAxMzoxMDozNApAQCAtOTIsNiArOTIsMTMgQEAKICAgICBpZiAoRm91bmQp
CiAgICAgICBjb250aW51ZTsKICNlbmRpZgorI2lmZGVmIF9VTklYCisgICAgaWYgKENtcE1TR0lE
KEhlbHBbSV0sTVJBUlRpdGxlMikpCisgICAgeworICAgICAgbXByaW50ZihTdChNRndyU2xUaXRs
ZTIpKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyNlbmRpZgogI2lmICFkZWZpbmVkKF9VTklY
KSAmJiAhZGVmaW5lZChfV0lOX0FMTCkKICAgICBpZiAoQ21wTVNHSUQoSGVscFtJXSxNQ0hlbHBT
d09XKSkKICAgICAgIGNvbnRpbnVlOwpkaWZmIC11ciB1bnJhci02LjEuNy9jb21wcmVzcy5ocHAg
dW5yYXItNi4yLjcvY29tcHJlc3MuaHBwCi0tLSB1bnJhci02LjEuNy9jb21wcmVzcy5ocHAJMjAy
Mi0xMC0xOSAyMjowNToxMgorKysgdW5yYXItNi4yLjcvY29tcHJlc3MuaHBwCTIwMjMtMDUtMTQg
MTM6MTA6MzQKQEAgLTE3LDYgKzE3LDcgQEAKICAgICBzdGF0aWMgY29uc3QgdWludCBNQVhfSU5D
X0xaX01BVENIID0gTUFYX0xaX01BVENIICsgMzsKIAogICAgIHN0YXRpYyBjb25zdCB1aW50IE1B
WDNfTFpfTUFUQ0ggPSAweDEwMTsgLy8gTWF4aW11bSBtYXRjaCBsZW5ndGggZm9yIFJBUiB2My4K
KyAgICBzdGF0aWMgY29uc3QgdWludCBNQVgzX0lOQ19MWl9NQVRDSCA9IE1BWDNfTFpfTUFUQ0gg
KyAzOwogICAgIHN0YXRpYyBjb25zdCB1aW50IExPV19ESVNUX1JFUF9DT1VOVCA9IDE2OwogCiAg
ICAgc3RhdGljIGNvbnN0IHVpbnQgTkMgICAgPSAzMDY7IC8qIGFscGhhYmV0ID0gezAsIDEsIDIs
IC4uLiwgTkMgLSAxfSAqLwpkaWZmIC11ciB1bnJhci02LjEuNy9jcmMuY3BwIHVucmFyLTYuMi43
L2NyYy5jcHAKLS0tIHVucmFyLTYuMS43L2NyYy5jcHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysg
dW5yYXItNi4yLjcvY3JjLmNwcAkyMDIzLTA1LTE0IDEzOjEwOjM0CkBAIC0xMTAsMyArMTEwLDE2
NCBAQAogI2VuZGlmCiAKIAorI2lmIDAKK3N0YXRpYyB1aW50NjQgY3JjNjRfdGFibGVzWzhdWzI1
Nl07IC8vIFRhYmxlcyBmb3IgU2xpY2luZy1ieS04IGZvciBDUkM2NC4KKwordm9pZCBJbml0Q1JD
NjQodWludDY0ICpDUkNUYWIpCit7CisgIGNvbnN0IHVpbnQ2NCBwb2x5PUlOVDMyVE82NCgweEM5
NkM1Nzk1LCAweEQ3ODcwRjQyKTsgLy8gMHhDOTZDNTc5NUQ3ODcwRjQyOworICBmb3IgKHVpbnQg
ST0wO0k8MjU2O0krKykKKyAgeworICAgIHVpbnQ2NCBDPUk7CisgICAgZm9yICh1aW50IEo9MDtK
PDg7SisrKQorICAgICAgQz0oQyAmIDEpID8gKEM+PjEpXnBvbHk6IChDPj4xKTsKKyAgICBDUkNU
YWJbSV09QzsKKyAgfQorfQorCisKK3N0YXRpYyB2b2lkIEluaXRUYWJsZXM2NCgpCit7CisgIElu
aXRDUkM2NChjcmM2NF90YWJsZXNbMF0pOworCisgIGZvciAodWludCBJPTA7STwyNTY7SSsrKSAv
LyBCdWlsZCBhZGRpdGlvbmFsIGxvb2t1cCB0YWJsZXMuCisgIHsKKyAgICB1aW50NjQgQz1jcmM2
NF90YWJsZXNbMF1bSV07CisgICAgZm9yICh1aW50IEo9MTtKPDg7SisrKQorICAgIHsKKyAgICAg
IEM9Y3JjNjRfdGFibGVzWzBdWyhieXRlKUNdXihDPj44KTsKKyAgICAgIGNyYzY0X3RhYmxlc1tK
XVtJXT1DOworICAgIH0KKyAgfQorfQorCisKKy8vIFdlIGNhbm5vdCBwbGFjZSB0aGUgaW50aWFs
aXphdGlvbiB0byBDUkM2NCgpLCBiZWNhdXNlIHdlIHVzZSB0aGlzIGZ1bmN0aW9uCisvLyBpbiBt
dWx0aXRocmVhZGVkIG1vZGUgYW5kIGl0IGNvbmZsaWN0cyB3aXRoIG11bHRpdGhyZWFkaW5nLgor
c3RydWN0IENhbGxJbml0Q1JDNjQge0NhbGxJbml0Q1JDNjQoKSB7SW5pdFRhYmxlczY0KCk7fX0g
c3RhdGljIENhbGxJbml0NjQ7CisKK3VpbnQ2NCBDUkM2NCh1aW50NjQgU3RhcnRDUkMsY29uc3Qg
dm9pZCAqQWRkcixzaXplX3QgU2l6ZSkKK3sKKyAgYnl0ZSAqRGF0YT0oYnl0ZSAqKUFkZHI7CisK
KyAgLy8gQWxpZ24gRGF0YSB0byA4IGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgIGZvciAoO1Np
emU+MCAmJiAoKHNpemVfdClEYXRhICYgNykhPTA7U2l6ZS0tLERhdGErKykKKyAgICBTdGFydENS
Qz1jcmM2NF90YWJsZXNbMF1bKGJ5dGUpKFN0YXJ0Q1JDXkRhdGFbMF0pXV4oU3RhcnRDUkM+Pjgp
OworCisgIGZvciAoYnl0ZSAqRGF0YUVuZD1EYXRhK1NpemUvOCo4OyBEYXRhPERhdGFFbmQ7IERh
dGErPTggKQorICB7CisgICAgdWludDY0IEluZGV4PVN0YXJ0Q1JDOworI2lmZGVmIEJJR19FTkRJ
QU4KKyAgICBJbmRleCBePSAodWludDY0KERhdGFbMF0pfCh1aW50NjQoRGF0YVsxXSk8PDgpfCh1
aW50NjQoRGF0YVsyXSk8PDE2KXwodWludDY0KERhdGFbM10pPDwyNCkpfAorICAgICAgICAgICAg
ICh1aW50NjQoRGF0YVs0XSk8PDMyKXwodWludDY0KERhdGFbNV0pPDw0MCl8KHVpbnQ2NChEYXRh
WzZdKTw8NDgpfCh1aW50NjQoRGF0YVs3XSk8PDU2KTsKKyNlbHNlCisgICAgSW5kZXggXj0gKih1
aW50NjQgKilEYXRhOworI2VuZGlmCisgICAgU3RhcnRDUkMgPSBjcmM2NF90YWJsZXNbIDcgXSBb
ICggYnl0ZSApIChJbmRleCAgICAgICApIF0gXgorICAgICAgICAgICAgICAgY3JjNjRfdGFibGVz
WyA2IF0gWyAoIGJ5dGUgKSAoSW5kZXggPj4gIDggKSBdIF4KKyAgICAgICAgICAgICAgIGNyYzY0
X3RhYmxlc1sgNSBdIFsgKCBieXRlICkgKEluZGV4ID4+IDE2ICkgXSBeCisgICAgICAgICAgICAg
ICBjcmM2NF90YWJsZXNbIDQgXSBbICggYnl0ZSApIChJbmRleCA+PiAyNCApIF0gXgorICAgICAg
ICAgICAgICAgY3JjNjRfdGFibGVzWyAzIF0gWyAoIGJ5dGUgKSAoSW5kZXggPj4gMzIgKSBdIF4K
KyAgICAgICAgICAgICAgIGNyYzY0X3RhYmxlc1sgMiBdIFsgKCBieXRlICkgKEluZGV4ID4+IDQw
ICkgXSBeCisgICAgICAgICAgICAgICBjcmM2NF90YWJsZXNbIDEgXSBbICggYnl0ZSApIChJbmRl
eCA+PiA0OCApIF0gXgorICAgICAgICAgICAgICAgY3JjNjRfdGFibGVzWyAwIF0gWyAoIGJ5dGUg
KSAoSW5kZXggPj4gNTYgKSBdIDsKKyAgfQorCisgIGZvciAoU2l6ZSU9ODtTaXplPjA7U2l6ZS0t
LERhdGErKykgLy8gUHJvY2VzcyBsZWZ0IGRhdGEuCisgICAgU3RhcnRDUkM9Y3JjNjRfdGFibGVz
WzBdWyhieXRlKShTdGFydENSQ15EYXRhWzBdKV1eKFN0YXJ0Q1JDPj44KTsKKworICByZXR1cm4g
U3RhcnRDUkM7Cit9CisKKworI2lmIDAKK3N0YXRpYyB2b2lkIFRlc3RDUkMoKTsKK3N0cnVjdCBU
ZXN0Q1JDU3RydWN0IHtUZXN0Q1JDU3RydWN0KCkge1Rlc3RDUkMoKTtleGl0KDApO319IEdsb2Jh
bFRlc0NSQzsKKwordm9pZCBUZXN0Q1JDKCkKK3sKKyAgY29uc3QgdWludCBGaXJzdFNpemU9MzAw
OworICBieXRlIGJbRmlyc3RTaXplXTsKKworICBpZiAoKENSQzMyKDB4ZmZmZmZmZmYsKGJ5dGUq
KSJ0ZXN0dGVzdHRlc3QiLDEyKV4weGZmZmZmZmZmKT09MHg0NDYwOGU4NCkKKyAgICBtcHJpbnRm
KEwiXG5DUkMzMiB0ZXN0MSBPSyIpOworICBlbHNlCisgICAgbXByaW50ZihMIlxuQ1JDMzIgdGVz
dDEgRkFJTEVEIik7CisKKyAgaWYgKENSQzMyKDAsKGJ5dGUqKSJ0ZVx4ODBzdCIsNSk9PTB4QjJF
NUM1QUUpCisgICAgbXByaW50ZihMIlxuQ1JDMzIgdGVzdDIgT0siKTsKKyAgZWxzZQorICAgIG1w
cmludGYoTCJcbkNSQzMyIHRlc3QyIEZBSUxFRCIpOworCisgIGZvciAodWludCBJPTA7STwxNDtJ
KyspIC8vIENoZWNrIGZvciBwb3NzaWJsZSBpbnQgc2lnbiBleHRlbnNpb24uCisgICAgYltJXT0o
Ynl0ZSkweDdmK0k7CisgIGlmICgoQ1JDMzIoMHhmZmZmZmZmZixiLDE0KV4weGZmZmZmZmZmKT09
MHgxREZBNzVEQSkKKyAgICBtcHJpbnRmKEwiXG5DUkMzMiB0ZXN0MyBPSyIpOworICBlbHNlCisg
ICAgbXByaW50ZihMIlxuQ1JDMzIgdGVzdDMgRkFJTEVEIik7CisKKyAgZm9yICh1aW50IEk9MDtJ
PEZpcnN0U2l6ZTtJKyspCisgICAgYltJXT0oYnl0ZSlJOworICB1aW50IHIzMj1DUkMzMigweGZm
ZmZmZmZmLGIsRmlyc3RTaXplKTsKKyAgZm9yICh1aW50IEk9Rmlyc3RTaXplO0k8MTAyNDtJKysp
CisgIHsKKyAgICBiWzBdPShieXRlKUk7CisgICAgcjMyPUNSQzMyKHIzMixiLDEpOworICB9Cisg
IGlmICgocjMyXjB4ZmZmZmZmZmYpPT0weEI3MEI0QzI2KQorICAgIG1wcmludGYoTCJcbkNSQzMy
IHRlc3Q0IE9LIik7CisgIGVsc2UKKyAgICBtcHJpbnRmKEwiXG5DUkMzMiB0ZXN0NCBGQUlMRUQi
KTsKKworICBpZiAoKENSQzY0KDB4ZmZmZmZmZmZmZmZmZmZmZiwoYnl0ZSopInRlc3R0ZXN0dGVz
dCIsMTIpXjB4ZmZmZmZmZmZmZmZmZmZmZik9PTB4N0IxQzJEMjMwRURFQjQzNikKKyAgICBtcHJp
bnRmKEwiXG5DUkM2NCB0ZXN0MSBPSyIpOworICBlbHNlCisgICAgbXByaW50ZihMIlxuQ1JDNjQg
dGVzdDEgRkFJTEVEIik7CisKKyAgaWYgKENSQzY0KDAsKGJ5dGUqKSJ0ZVx4ODBzdCIsNSk9PTB4
QjVEQkY5NTgzQTZFRUQ0QSkKKyAgICBtcHJpbnRmKEwiXG5DUkM2NCB0ZXN0MiBPSyIpOworICBl
bHNlCisgICAgbXByaW50ZihMIlxuQ1JDNjQgdGVzdDIgRkFJTEVEIik7CisKKyAgZm9yICh1aW50
IEk9MDtJPDE0O0krKykgLy8gQ2hlY2sgZm9yIHBvc3NpYmxlIGludCBzaWduIGV4dGVuc2lvbi4K
KyAgICBiW0ldPShieXRlKTB4N2YrSTsKKyAgaWYgKChDUkM2NCgweGZmZmZmZmZmZmZmZmZmZmYs
YiwxNCleMHhmZmZmZmZmZmZmZmZmZmZmKT09MHhFMDE5OTQxQzA1QjI4MjBDKQorICAgIG1wcmlu
dGYoTCJcbkNSQzY0IHRlc3QzIE9LIik7CisgIGVsc2UKKyAgICBtcHJpbnRmKEwiXG5DUkM2NCB0
ZXN0MyBGQUlMRUQiKTsKKworICBmb3IgKHVpbnQgST0wO0k8Rmlyc3RTaXplO0krKykKKyAgICBi
W0ldPShieXRlKUk7CisgIHVpbnQ2NCByNjQ9Q1JDNjQoMHhmZmZmZmZmZmZmZmZmZmZmLGIsRmly
c3RTaXplKTsKKyAgZm9yICh1aW50IEk9Rmlyc3RTaXplO0k8MTAyNDtJKyspCisgIHsKKyAgICBi
WzBdPShieXRlKUk7CisgICAgcjY0PUNSQzY0KHI2NCxiLDEpOworICB9CisgIGlmICgocjY0XjB4
ZmZmZmZmZmZmZmZmZmZmZik9PTB4RDUxRkI1OERDNzg5QzQwMCkKKyAgICBtcHJpbnRmKEwiXG5D
UkM2NCB0ZXN0NCBPSyIpOworICBlbHNlCisgICAgbXByaW50ZihMIlxuQ1JDNjQgdGVzdDQgRkFJ
TEVEIik7CisKKyAgY29uc3Qgc2l6ZV90IEJ1ZlNpemU9MHgxMDAwMDA7CisgIGJ5dGUgKkJ1Zj1u
ZXcgYnl0ZVtCdWZTaXplXTsKKyAgbWVtc2V0KEJ1ZiwwLEJ1ZlNpemUpOworCisgIGNsb2NrX3Qg
U3RhcnRUaW1lPWNsb2NrKCk7CisgIHIzMj0weGZmZmZmZmZmOworICBjb25zdCB1aW50IEJ1ZkNv
dW50PTUwMDA7CisgIGZvciAodWludCBJPTA7STxCdWZDb3VudDtJKyspCisgICAgcjMyPUNSQzMy
KHIzMixCdWYsQnVmU2l6ZSk7CisgIGlmIChyMzIhPTApIC8vIE90aGVyd2lzZSBjb21waWxlciBv
cHRpbWl6ZXIgcmVtb3ZlcyBDUkMgY2FsY3VsYXRpb24uCisgICAgbXByaW50ZihMIlxuQ1JDMzIg
c3BlZWQ6ICVkIE1CL3MiLEJ1ZkNvdW50KjEwMDAvKGNsb2NrKCktU3RhcnRUaW1lKSk7CisKKyAg
U3RhcnRUaW1lPWNsb2NrKCk7CisgIHI2ND0weGZmZmZmZmZmZmZmZmZmZmY7CisgIGZvciAodWlu
dCBJPTA7STxCdWZDb3VudDtJKyspCisgICAgcjY0PUNSQzY0KHI2NCxCdWYsQnVmU2l6ZSk7Cisg
IGlmIChyNjQhPTApIC8vIE90aGVyd2lzZSBjb21waWxlciBvcHRpbWl6ZXIgcmVtb3ZlcyBDUkMg
Y2FsY3VsYXRpb24uCisgICAgbXByaW50ZihMIlxuQ1JDNjQgc3BlZWQ6ICVkIE1CL3MiLEJ1ZkNv
dW50KjEwMDAvKGNsb2NrKCktU3RhcnRUaW1lKSk7Cit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYg
LXVyIHVucmFyLTYuMS43L2NyYy5ocHAgdW5yYXItNi4yLjcvY3JjLmhwcAotLS0gdW5yYXItNi4x
LjcvY3JjLmhwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisrKyB1bnJhci02LjIuNy9jcmMuaHBwCTIw
MjMtMDUtMTQgMTM6MTA6MzQKQEAgLTExLDUgKzExLDkgQEAKIHVzaG9ydCBDaGVja3N1bTE0KHVz
aG9ydCBTdGFydENSQyxjb25zdCB2b2lkICpBZGRyLHNpemVfdCBTaXplKTsKICNlbmRpZgogCisj
aWYgMAordm9pZCBJbml0Q1JDNjQodWludDY0ICpDUkNUYWIpOwordWludDY0IENSQzY0KHVpbnQ2
NCBTdGFydENSQyxjb25zdCB2b2lkICpBZGRyLHNpemVfdCBTaXplKTsKKyNlbmRpZgogCiAjZW5k
aWYKZGlmZiAtdXIgdW5yYXItNi4xLjcvY3J5cHQuY3BwIHVucmFyLTYuMi43L2NyeXB0LmNwcAot
LS0gdW5yYXItNi4xLjcvY3J5cHQuY3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYu
Mi43L2NyeXB0LmNwcAkyMDIzLTA1LTE0IDEzOjEwOjM0CkBAIC0xMSwyMyArMTEsMTQgQEAKIENy
eXB0RGF0YTo6Q3J5cHREYXRhKCkKIHsKICAgTWV0aG9kPUNSWVBUX05PTkU7Ci0gIG1lbXNldChL
REYzQ2FjaGUsMCxzaXplb2YoS0RGM0NhY2hlKSk7Ci0gIG1lbXNldChLREY1Q2FjaGUsMCxzaXpl
b2YoS0RGNUNhY2hlKSk7CiAgIEtERjNDYWNoZVBvcz0wOwogICBLREY1Q2FjaGVQb3M9MDsKICAg
bWVtc2V0KENSQ1RhYiwwLHNpemVvZihDUkNUYWIpKTsKIH0KIAogCi1DcnlwdERhdGE6On5Dcnlw
dERhdGEoKQotewotICBjbGVhbmRhdGEoS0RGM0NhY2hlLHNpemVvZihLREYzQ2FjaGUpKTsKLSAg
Y2xlYW5kYXRhKEtERjVDYWNoZSxzaXplb2YoS0RGNUNhY2hlKSk7Ci19CiAKIAotCi0KIHZvaWQg
Q3J5cHREYXRhOjpEZWNyeXB0QmxvY2soYnl0ZSAqQnVmLHNpemVfdCBTaXplKQogewogICBzd2l0
Y2goTWV0aG9kKQpAQCAtNTYsMTUgKzQ3LDE4IEBACiAgICAgIFNlY1Bhc3N3b3JkICpQYXNzd29y
ZCxjb25zdCBieXRlICpTYWx0LAogICAgICBjb25zdCBieXRlICpJbml0Vix1aW50IExnMkNudCxi
eXRlICpIYXNoS2V5LGJ5dGUgKlBzd0NoZWNrKQogewotICBpZiAoIVBhc3N3b3JkLT5Jc1NldCgp
IHx8IE1ldGhvZD09Q1JZUFRfTk9ORSkKKyAgaWYgKE1ldGhvZD09Q1JZUFRfTk9ORSB8fCAhUGFz
c3dvcmQtPklzU2V0KCkpCiAgICAgcmV0dXJuIGZhbHNlOwogCiAgIENyeXB0RGF0YTo6TWV0aG9k
PU1ldGhvZDsKIAogICB3Y2hhciBQd2RXW01BWFBBU1NXT1JEXTsKICAgUGFzc3dvcmQtPkdldChQ
d2RXLEFTSVpFKFB3ZFcpKTsKKyAgUHdkV1tNaW4oTUFYUEFTU1dPUkRfUkFSLE1BWFBBU1NXT1JE
KS0xXT0wOyAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGFyY2hpdmVzLgorCiAg
IGNoYXIgUHdkQVtNQVhQQVNTV09SRF07CiAgIFdpZGVUb0NoYXIoUHdkVyxQd2RBLEFTSVpFKFB3
ZEEpKTsKKyAgUHdkQVtNaW4oTUFYUEFTU1dPUkRfUkFSLE1BWFBBU1NXT1JEKS0xXT0wOyAvLyBG
b3IgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGFyY2hpdmVzLgogCiAgIHN3aXRjaChNZXRo
b2QpCiAgIHsKZGlmZiAtdXIgdW5yYXItNi4xLjcvY3J5cHQuaHBwIHVucmFyLTYuMi43L2NyeXB0
LmhwcAotLS0gdW5yYXItNi4xLjcvY3J5cHQuaHBwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVu
cmFyLTYuMi43L2NyeXB0LmhwcAkyMDIzLTA1LTE0IDEzOjEwOjM0CkBAIC0zMCw2ICszMCwxOCBA
QAogICAgIHVpbnQgTGcyQ291bnQ7IC8vIExvZzIgb2YgUEJLREYyIHJlcGV0aXRpb24gY291bnQu
CiAgICAgYnl0ZSBQc3dDaGVja1ZhbHVlW1NIQTI1Nl9ESUdFU1RfU0laRV07CiAgICAgYnl0ZSBI
YXNoS2V5VmFsdWVbU0hBMjU2X0RJR0VTVF9TSVpFXTsKKworICAgIEtERjVDYWNoZUl0ZW0oKSB7
Q2xlYW4oKTt9CisgICAgfktERjVDYWNoZUl0ZW0oKSB7Q2xlYW4oKTt9CisKKyAgICB2b2lkIENs
ZWFuKCkKKyAgICB7CisgICAgICBjbGVhbmRhdGEoU2FsdCxzaXplb2YoU2FsdCkpOworICAgICAg
Y2xlYW5kYXRhKEtleSxzaXplb2YoS2V5KSk7CisgICAgICBjbGVhbmRhdGEoJkxnMkNvdW50LHNp
emVvZihMZzJDb3VudCkpOworICAgICAgY2xlYW5kYXRhKFBzd0NoZWNrVmFsdWUsc2l6ZW9mKFBz
d0NoZWNrVmFsdWUpKTsKKyAgICAgIGNsZWFuZGF0YShIYXNoS2V5VmFsdWUsc2l6ZW9mKEhhc2hL
ZXlWYWx1ZSkpOworICAgIH0KICAgfTsKIAogICBzdHJ1Y3QgS0RGM0NhY2hlSXRlbQpAQCAtMzks
NiArNTEsMTcgQEAKICAgICBieXRlIEtleVsxNl07CiAgICAgYnl0ZSBJbml0WzE2XTsKICAgICBi
b29sIFNhbHRQcmVzZW50OworCisgICAgS0RGM0NhY2hlSXRlbSgpIHtDbGVhbigpO30KKyAgICB+
S0RGM0NhY2hlSXRlbSgpIHtDbGVhbigpO30KKworICAgIHZvaWQgQ2xlYW4oKQorICAgIHsKKyAg
ICAgIGNsZWFuZGF0YShTYWx0LHNpemVvZihTYWx0KSk7CisgICAgICBjbGVhbmRhdGEoS2V5LHNp
emVvZihLZXkpKTsKKyAgICAgIGNsZWFuZGF0YShJbml0LHNpemVvZihJbml0KSk7CisgICAgICBj
bGVhbmRhdGEoJlNhbHRQcmVzZW50LHNpemVvZihTYWx0UHJlc2VudCkpOworICAgIH0KICAgfTsK
IAogCkBAIC03Nyw3ICsxMDAsNiBAQAogICAgIHVzaG9ydCBLZXkxNVs0XTsKICAgcHVibGljOgog
ICAgIENyeXB0RGF0YSgpOwotICAgIH5DcnlwdERhdGEoKTsKICAgICBib29sIFNldENyeXB0S2V5
cyhib29sIEVuY3J5cHQsQ1JZUFRfTUVUSE9EIE1ldGhvZCxTZWNQYXNzd29yZCAqUGFzc3dvcmQs
CiAgICAgICAgICBjb25zdCBieXRlICpTYWx0LGNvbnN0IGJ5dGUgKkluaXRWLHVpbnQgTGcyQ250
LAogICAgICAgICAgYnl0ZSAqSGFzaEtleSxieXRlICpQc3dDaGVjayk7CkBAIC04Niw2ICsxMDgs
NTQgQEAKICAgICB2b2lkIEVuY3J5cHRCbG9jayhieXRlICpCdWYsc2l6ZV90IFNpemUpOwogICAg
IHZvaWQgRGVjcnlwdEJsb2NrKGJ5dGUgKkJ1ZixzaXplX3QgU2l6ZSk7CiAgICAgc3RhdGljIHZv
aWQgU2V0U2FsdChieXRlICpTYWx0LHNpemVfdCBTYWx0U2l6ZSk7Cit9OworCisKK2NsYXNzIENo
ZWNrUGFzc3dvcmQKK3sKKyAgcHVibGljOgorICAgIGVudW0gQ09ORklERU5DRSB7Q09ORklERU5D
RV9ISUdILENPTkZJREVOQ0VfTUVESVVNLENPTkZJREVOQ0VfTE9XfTsKKyAgICB2aXJ0dWFsIENP
TkZJREVOQ0UgR2V0Q29uZmlkZW5jZSgpPTA7CisgICAgdmlydHVhbCBib29sIENoZWNrKFNlY1Bh
c3N3b3JkICpQYXNzd29yZCk9MDsKK307CisKK2NsYXNzIFJhckNoZWNrUGFzc3dvcmQ6cHVibGlj
IENoZWNrUGFzc3dvcmQKK3sKKyAgcHJpdmF0ZToKKyAgICBDcnlwdERhdGEgKkNyeXB0OworICAg
IHVpbnQgTGcyQ291bnQ7CisgICAgYnl0ZSBTYWx0W1NJWkVfU0FMVDUwXTsKKyAgICBieXRlIElu
aXRWW1NJWkVfSU5JVFZdOworICAgIGJ5dGUgUHN3Q2hlY2tbU0laRV9QU1dDSEVDS107CisgIHB1
YmxpYzoKKyAgICBSYXJDaGVja1Bhc3N3b3JkKCkKKyAgICB7CisgICAgICBDcnlwdD1OVUxMOwor
ICAgIH0KKyAgICB+UmFyQ2hlY2tQYXNzd29yZCgpCisgICAgeworICAgICAgZGVsZXRlIENyeXB0
OworICAgIH0KKyAgICB2b2lkIFNldChieXRlICpTYWx0LGJ5dGUgKkluaXRWLHVpbnQgTGcyQ291
bnQsYnl0ZSAqUHN3Q2hlY2spCisgICAgeworICAgICAgaWYgKENyeXB0PT1OVUxMKQorICAgICAg
ICBDcnlwdD1uZXcgQ3J5cHREYXRhOworICAgICAgbWVtY3B5KHRoaXMtPlNhbHQsU2FsdCxzaXpl
b2YodGhpcy0+U2FsdCkpOworICAgICAgbWVtY3B5KHRoaXMtPkluaXRWLEluaXRWLHNpemVvZih0
aGlzLT5Jbml0VikpOworICAgICAgdGhpcy0+TGcyQ291bnQ9TGcyQ291bnQ7CisgICAgICBtZW1j
cHkodGhpcy0+UHN3Q2hlY2ssUHN3Q2hlY2ssc2l6ZW9mKHRoaXMtPlBzd0NoZWNrKSk7CisgICAg
fQorICAgIGJvb2wgSXNTZXQoKSB7cmV0dXJuIENyeXB0IT1OVUxMO30KKworICAgIC8vIFJBUjUg
cHJvdmlkZXMgdGhlIGhpZ2x5IHJlbGlhYmxlIDY0IGJpdCBwYXNzd29yZCB2ZXJpZmljYXRpb24g
dmFsdWUuCisgICAgQ09ORklERU5DRSBHZXRDb25maWRlbmNlKCkge3JldHVybiBDT05GSURFTkNF
X0hJR0g7fQorCisgICAgYm9vbCBDaGVjayhTZWNQYXNzd29yZCAqUGFzc3dvcmQpCisgICAgewor
ICAgICAgYnl0ZSBQc3dDaGVja1tTSVpFX1BTV0NIRUNLXTsKKyAgICAgIENyeXB0LT5TZXRDcnlw
dEtleXMoZmFsc2UsQ1JZUFRfUkFSNTAsUGFzc3dvcmQsU2FsdCxJbml0VixMZzJDb3VudCxOVUxM
LFBzd0NoZWNrKTsKKyAgICAgIHJldHVybiBtZW1jbXAoUHN3Q2hlY2ssdGhpcy0+UHN3Q2hlY2ss
c2l6ZW9mKHRoaXMtPlBzd0NoZWNrKSk9PTA7CisgICAgfQogfTsKIAogdm9pZCBHZXRSbmQoYnl0
ZSAqUm5kQnVmLHNpemVfdCBCdWZTaXplKTsKZGlmZiAtdXIgdW5yYXItNi4xLjcvY3J5cHQzLmNw
cCB1bnJhci02LjIuNy9jcnlwdDMuY3BwCi0tLSB1bnJhci02LjEuNy9jcnlwdDMuY3BwCTIwMjIt
MTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L2NyeXB0My5jcHAJMjAyMy0wNS0xNCAxMzox
MDozNApAQCAtMTgsOCArMTgsOSBAQAogICBpZiAoIUNhY2hlZCkKICAgewogICAgIGJ5dGUgUmF3
UHN3WzIqTUFYUEFTU1dPUkQrU0laRV9TQUxUMzBdOwotICAgIFdpZGVUb1JhdyhQd2RXLFJhd1Bz
dyxBU0laRShSYXdQc3cpKTsKLSAgICBzaXplX3QgUmF3TGVuZ3RoPTIqd2NzbGVuKFB3ZFcpOwor
ICAgIHNpemVfdCBQc3dMZW5ndGg9d2NzbGVuKFB3ZFcpOworICAgIHNpemVfdCBSYXdMZW5ndGg9
MipQc3dMZW5ndGg7CisgICAgV2lkZVRvUmF3KFB3ZFcsUHN3TGVuZ3RoLFJhd1BzdyxSYXdMZW5n
dGgpOwogICAgIGlmIChTYWx0IT1OVUxMKQogICAgIHsKICAgICAgIG1lbWNweShSYXdQc3crUmF3
TGVuZ3RoLFNhbHQsU0laRV9TQUxUMzApOwpkaWZmIC11ciB1bnJhci02LjEuNy9jcnlwdDUuY3Bw
IHVucmFyLTYuMi43L2NyeXB0NS5jcHAKLS0tIHVucmFyLTYuMS43L2NyeXB0NS5jcHAJMjAyMi0x
MC0xOSAyMjowNToxMgorKysgdW5yYXItNi4yLjcvY3J5cHQ1LmNwcAkyMDIzLTA1LTE0IDEzOjEw
OjM0CkBAIC0yMSw3ICsyMSw3IEBACiAgIHNoYTI1Nl9jb250ZXh0IElDdHg7CiAKICAgaWYgKElD
dHhPcHQhPU5VTEwgJiYgKlNldElPcHQpCi0gICAgSUN0eD0qSUN0eE9wdDsgLy8gVXNlIGFscmVh
ZHkgY2FsY3VsYXRlZCBmaXJzdCBibG9jayBjb250ZXh0LgorICAgIElDdHg9KklDdHhPcHQ7IC8v
IFVzZSBhbHJlYWR5IGNhbGN1bGF0ZWQgdGhlIGZpcnN0IGJsb2NrIGNvbnRleHQuCiAgIGVsc2UK
ICAgewogICAgIC8vIFRoaXMgY2FsY3VsYXRpb24gaXMgdGhlIHNhbWUgZm9yIGFsbCBpdGVyYXRp
b25zIHdpdGggc2FtZSBwYXNzd29yZC4KQEAgLTkwLDEwICs5MCwxMCBAQAogICBieXRlIFNhbHRE
YXRhW01heFNhbHQrNF07CiAgIG1lbWNweShTYWx0RGF0YSwgU2FsdCwgTWluKFNhbHRMZW5ndGgs
TWF4U2FsdCkpOwogCi0gIFNhbHREYXRhW1NhbHRMZW5ndGggKyAwXSA9IDA7IC8vIFNhbHQgY29u
Y2F0ZW5hdGVkIHRvIDEuCi0gIFNhbHREYXRhW1NhbHRMZW5ndGggKyAxXSA9IDA7Ci0gIFNhbHRE
YXRhW1NhbHRMZW5ndGggKyAyXSA9IDA7Ci0gIFNhbHREYXRhW1NhbHRMZW5ndGggKyAzXSA9IDE7
CisgIFNhbHREYXRhW1NhbHRMZW5ndGggKyAwXSA9IDA7IC8vIEJsb2NrIGluZGV4IGFwcGVuZWQg
dG8gc2FsdC4KKyAgU2FsdERhdGFbU2FsdExlbmd0aCArIDFdID0gMDsgLy8KKyAgU2FsdERhdGFb
U2FsdExlbmd0aCArIDJdID0gMDsgLy8gU2luY2Ugd2UgZG8gbm90IHJlcXVlc3QgdGhlIGtleSB3
aWR0aAorICBTYWx0RGF0YVtTYWx0TGVuZ3RoICsgM10gPSAxOyAvLyBleGNlZWRpbmcgSE1BQyB3
aWR0aCwgaXQgaXMgYWx3YXlzIDEuCiAKICAgLy8gRmlyc3QgaXRlcmF0aW9uOiBITUFDIG9mIHBh
c3N3b3JkLCBzYWx0IGFuZCBibG9jayBpbmRleCAoMSkuCiAgIGJ5dGUgVTFbU0hBMjU2X0RJR0VT
VF9TSVpFXTsKQEAgLTE0MCw3ICsxNDAsNyBAQAogICBmb3IgKHVpbnQgST0wO0k8QVNJWkUoS0RG
NUNhY2hlKTtJKyspCiAgIHsKICAgICBLREY1Q2FjaGVJdGVtICpJdGVtPUtERjVDYWNoZStJOwot
ICAgIGlmIChJdGVtLT5MZzJDb3VudD09TGcyQ250ICYmIEl0ZW0tPlB3ZD09KlBhc3N3b3JkICYm
CisgICAgaWYgKEl0ZW0tPlB3ZD09KlBhc3N3b3JkICYmIEl0ZW0tPkxnMkNvdW50PT1MZzJDbnQg
JiYgCiAgICAgICAgIG1lbWNtcChJdGVtLT5TYWx0LFNhbHQsU0laRV9TQUxUNTApPT0wKQogICAg
IHsKICAgICAgIG1lbWNweShLZXksSXRlbS0+S2V5LHNpemVvZihLZXkpKTsKZGlmZiAtdXIgdW5y
YXItNi4xLjcvZGxsLnJjIHVucmFyLTYuMi43L2RsbC5yYwotLS0gdW5yYXItNi4xLjcvZGxsLnJj
CTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L2RsbC5yYwkyMDIzLTA1LTE0IDEz
OjA0OjUzCkBAIC0yLDggKzIsOCBAQAogI2luY2x1ZGUgPGNvbW1jdHJsLmg+DQogDQogVlNfVkVS
U0lPTl9JTkZPIFZFUlNJT05JTkZPDQotRklMRVZFUlNJT04gNiwgMTIsIDEwMCwgNDg5Ci1QUk9E
VUNUVkVSU0lPTiA2LCAxMiwgMTAwLCA0ODkKK0ZJTEVWRVJTSU9OIDYsIDIyLCAxLCA4NjUKK1BS
T0RVQ1RWRVJTSU9OIDYsIDIyLCAxLCA4NjUKIEZJTEVPUyBWT1NfX1dJTkRPV1MzMg0KIEZJTEVU
WVBFIFZGVF9BUFANCiB7DQpAQCAtMTQsOSArMTQsOSBAQAogICAgICAgVkFMVUUgIkNvbXBhbnlO
YW1lIiwgIkFsZXhhbmRlciBSb3NoYWxcMCINCiAgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAi
UkFSIGRlY29tcHJlc3Npb24gbGlicmFyeVwwIg0KICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRp
b24iLCAiUkFSIGRlY29tcHJlc3Npb24gbGlicmFyeVwwIg0KLSAgICAgIFZBTFVFICJGaWxlVmVy
c2lvbiIsICI2LjEyLjBcMCIKLSAgICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsICI2LjEyLjBc
MCIKLSAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJDb3B5cmlnaHQgqSBBbGV4YW5kZXIg
Um9zaGFsIDE5OTMtMjAyMlwwIgorICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgIjYuMjIuMVww
IgorICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgIjYuMjIuMVwwIgorICAgICAgVkFMVUUg
IkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCCpIEFsZXhhbmRlciBSb3NoYWwgMTk5My0yMDIz
XDAiCiAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJVbnJhci5kbGxcMCINCiAgICAg
fQ0KICAgfQ0KZGlmZiAtdXIgdW5yYXItNi4xLjcvZXJyaG5kLmNwcCB1bnJhci02LjIuNy9lcnJo
bmQuY3BwCi0tLSB1bnJhci02LjEuNy9lcnJobmQuY3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysr
IHVucmFyLTYuMi43L2VycmhuZC5jcHAJMjAyMy0wNS0xNCAxMzoxMDozNApAQCAtMTY5LDEwICsx
NjksMTMgQEAKIAogdm9pZCBFcnJvckhhbmRsZXI6Ok9wZW5FcnJvck1zZyhjb25zdCB3Y2hhciAq
QXJjTmFtZSxjb25zdCB3Y2hhciAqRmlsZU5hbWUpCiB7Ci0gIFdhaXQoKTsgLy8gS2VlcCBHVUkg
cmVzcG9uc2l2ZSBpZiBtYW55IGZpbGVzIGNhbm5vdCBiZSBvcGVuZWQgd2hlbiBhcmNoaXZpbmcu
CiAgIHVpTXNnKFVJRVJST1JfRklMRU9QRU4sQXJjTmFtZSxGaWxlTmFtZSk7CiAgIFN5c0Vyck1z
ZygpOwogICBTZXRFcnJvckNvZGUoUkFSWF9PUEVOKTsKKworICAvLyBLZWVwIEdVSSByZXNwb25z
aXZlIGlmIG1hbnkgZmlsZXMgY2Fubm90IGJlIG9wZW5lZCB3aGVuIGFyY2hpdmluZy4KKyAgLy8g
Q2FsbCBhZnRlciBTeXNFcnJNc2cgdG8gYXZvaWQgbW9kaWZ5aW5nIHRoZSBlcnJvciBjb2RlIGFu
ZCBTeXNFcnJNc2cgdGV4dC4KKyAgV2FpdCgpOwogfQogCiAKZGlmZiAtdXIgdW5yYXItNi4xLjcv
ZXh0aW5mby5jcHAgdW5yYXItNi4yLjcvZXh0aW5mby5jcHAKLS0tIHVucmFyLTYuMS43L2V4dGlu
Zm8uY3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L2V4dGluZm8uY3BwCTIw
MjMtMDUtMTQgMTM6MTA6MzQKQEAgLTExMiw2ICsxMTIsNjggQEAKIH0KIAogCisvLyBEZWxldGUg
c3ltYm9saWMgbGlua3MgaW4gZmlsZSBwYXRoLCBpZiBhbnksIGFuZCByZXBsYWNlIHRoZW0gYnkg
ZGlyZWN0b3JpZXMuCisvLyBQcmV2ZW50cyBleHRyYWN0aW5nIGZpbGVzIG91dHNpZGUgb2YgZGVz
dGluYXRpb24gZm9sZGVyIHdpdGggc3ltbGluayBjaGFpbnMuCitib29sIExpbmtzVG9EaXJzKGNv
bnN0IHdjaGFyICpTcmNOYW1lLGNvbnN0IHdjaGFyICpTa2lwUGFydCxzdGQ6OndzdHJpbmcgJkxh
c3RDaGVja2VkKQoreworICAvLyBVbmxpa2UgVW5peCwgV2luZG93cyBkb2Vzbid0IGV4cGFuZCBs
bmsxIGluIHN5bWxpbmsgdGFyZ2V0cyBsaWtlCisgIC8vICJsbmsxLy4uL2RpciIsIGJ1dCBjb252
ZXJ0cyB0aGUgcGF0aCB0byAiZGlyIi4gSW4gVW5peCB3ZSBuZWVkIHRvIGNhbGwKKyAgLy8gdGhp
cyBmdW5jdGlvbiB0byBwcmV2ZW50IHBsYWNpbmcgdW5wYWNrZWQgZmlsZXMgb3V0c2lkZSBvZiBk
ZXN0aW5hdGlvbgorICAvLyBmb2xkZXIgaWYgcHJldmlvdXNseSB3ZSB1bnBhY2tlZCAiZGlyL2xu
azEiIC0+ICIuLiIsCisgIC8vICJkaXIvbG5rMiIgLT4gImxuazEvLi4iIGFuZCAiZGlyL2xuazIv
YW55cGF0aC9wb2MudHh0Ii4KKyAgLy8gV2UgbWF5IHN0aWxsIG5lZWQgdGhpcyBmdW5jdGlvbiB0
byBwcmV2ZW50IGFidXNpbmcgc3ltbGluayBjaGFpbnMKKyAgLy8gaW4gbGluayBzb3VyY2UgcGF0
aCBpZiB3ZSByZW1vdmUgZGV0ZWN0aW9uIG9mIHN1Y2ggY2hhaW5zCisgIC8vIGluIElzUmVsYXRp
dmVTeW1saW5rU2FmZS4gVGhpcyBmdW5jdGlvbiBzZWVtcyB0byBtYWtlIG90aGVyIHN5bWxpbmsK
KyAgLy8gcmVsYXRlZCBzYWZldHkgY2hlY2tzIHJlZHVuZGFudCwgYnV0IGZvciBub3cgd2UgcHJl
ZmVyIHRvIGtlZXAgdGhlbSB0b28uCisgIC8vCisgIC8vIDIwMjIuMTIuMDE6IHRoZSBwZXJmb3Jt
YW5jZSBpbXBhY3QgaXMgbWluaW1pemVkIGFmdGVyIGFkZGluZyB0aGUgY2hlY2sKKyAgLy8gYWdh
aW5zdCB0aGUgcHJldmlvdXMgcGF0aCBhbmQgZW5hYmxpbmcgdGhpcyB2ZXJpZmljYXRpb24gb25s
eSBhZnRlcgorICAvLyBleHRyYWN0aW5nIGEgc3ltbGluayB3aXRoICIuLiIgaW4gdGFyZ2V0LiBT
byB3ZSBlbmFibGVkIGl0IGZvciBXaW5kb3dzCisgIC8vIGFzIHdlbGwgZm9yIGV4dHJhIHNhZmV0
eS4KKy8vI2lmZGVmIF9VTklYCisgIHdjaGFyIFBhdGhbTk1dOworICBpZiAod2NzbGVuKFNyY05h
bWUpPj1BU0laRShQYXRoKSkKKyAgICByZXR1cm4gZmFsc2U7ICAvLyBJdCBzaG91bGQgbm90IGJl
IHRoYXQgbG9uZywgc2tpcC4KKyAgd2NzbmNweXooUGF0aCxTcmNOYW1lLEFTSVpFKFBhdGgpKTsK
KworICBzaXplX3QgU2tpcExlbmd0aD13Y3NsZW4oU2tpcFBhcnQpOworCisgIGlmIChTa2lwTGVu
Z3RoPjAgJiYgd2NzbmNtcChQYXRoLFNraXBQYXJ0LFNraXBMZW5ndGgpIT0wKQorICAgIFNraXBM
ZW5ndGg9MDsgLy8gUGFyYW1ldGVyIHZhbGlkYXRpb24sIG5vdCByZWFsbHkgbmVlZGVkIG5vdy4K
KworICAvLyBEbyBub3QgY2hlY2sgcGFydHMgYWxyZWFkeSBjaGVja2VkIGluIHByZXZpb3VzIHBh
dGggdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4KKyAgZm9yICh1aW50IEk9MDtQYXRoW0ldIT0wICYm
IEk8TGFzdENoZWNrZWQuc2l6ZSgpICYmIFBhdGhbSV09PUxhc3RDaGVja2VkW0ldO0krKykKKyAg
ICBpZiAoSXNQYXRoRGl2KFBhdGhbSV0pICYmIEk+U2tpcExlbmd0aCkKKyAgICAgIFNraXBMZW5n
dGg9STsKKworICB3Y2hhciAqTmFtZT1QYXRoOworICBpZiAoU2tpcExlbmd0aD4wKQorICB7Cisg
ICAgLy8gQXZvaWQgY29udmVydGluZyBzeW1saW5rcyBpbiBkZXN0aW5hdGlvbiBwYXRoIHBhcnQg
c3BlY2lmaWVkIGJ5IHVzZXIuCisgICAgTmFtZSs9U2tpcExlbmd0aDsKKyAgICB3aGlsZSAoSXNQ
YXRoRGl2KCpOYW1lKSkKKyAgICAgIE5hbWUrKzsKKyAgfQorCisgIGZvciAod2NoYXIgKnM9UGF0
aCt3Y3NsZW4oUGF0aCktMTtzPk5hbWU7cy0tKQorICAgIGlmIChJc1BhdGhEaXYoKnMpKQorICAg
IHsKKyAgICAgICpzPTA7CisgICAgICBGaW5kRGF0YSBGRDsKKyAgICAgIGlmIChGaW5kRmlsZTo6
RmFzdEZpbmQoUGF0aCwmRkQsdHJ1ZSkgJiYgRkQuSXNMaW5rKQorI2lmZGVmIF9XSU5fQUxMCisg
ICAgICAgIGlmICghRGVsRGlyKFBhdGgpKQorI2Vsc2UKKyAgICAgICAgaWYgKCFEZWxGaWxlKFBh
dGgpKQorI2VuZGlmCisgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBDb3VsZG4ndCBkZWxldGUg
dGhlIHN5bWxpbmsgdG8gcmVwbGFjZSBpdCB3aXRoIGRpcmVjdG9yeS4KKyAgICB9CisgIExhc3RD
aGVja2VkPVNyY05hbWU7CisvLyNlbmRpZgorICByZXR1cm4gdHJ1ZTsKK30KKworCiBib29sIElz
UmVsYXRpdmVTeW1saW5rU2FmZShDb21tYW5kRGF0YSAqQ21kLGNvbnN0IHdjaGFyICpTcmNOYW1l
LGNvbnN0IHdjaGFyICpQcmVwU3JjTmFtZSxjb25zdCB3Y2hhciAqVGFyZ2V0TmFtZSkKIHsKICAg
Ly8gQ2F0Y2ggcm9vdCBkaXIgYmFzZWQgL3BhdGgvZmlsZSBwYXRocyBhbHNvIGFzIHN0dWZmIGxp
a2UgXFw/XC4KQEAgLTEzMSwxMCArMTkzLDE0IEBACiAgICAgICBVcExldmVscysrOwogICAgIFRh
cmdldE5hbWUrKzsKICAgfQotICAvLyBJZiBsaW5rIHRhcmdldCBpbmNsdWRlcyAiLi4iLCBpdCBt
dXN0IG5vdCBoYXZlIGFub3RoZXIgbGlua3MKLSAgLy8gaW4gdGhlIHBhdGgsIGJlY2F1c2UgdGhl
eSBjYW4gYnlwYXNzIG91ciBzYWZldHkgY2hlY2suIEZvciBleGFtcGxlLAorICAvLyBJZiBsaW5r
IHRhcmdldCBpbmNsdWRlcyAiLi4iLCBpdCBtdXN0IG5vdCBoYXZlIGFub3RoZXIgbGlua3MgaW4g
aXRzCisgIC8vIHNvdXJjZSBwYXRoLCBiZWNhdXNlIHRoZXkgY2FuIGJ5cGFzcyBvdXIgc2FmZXR5
IGNoZWNrLiBGb3IgZXhhbXBsZSwKICAgLy8gc3VwcG9zZSB3ZSBleHRyYWN0ZWQgImxuazEiIC0+
ICIuIiBmaXJzdCBhbmQgImxuazEvbG5rMiIgLT4gIi4uIiBuZXh0Ci0gIC8vIG9yICJkaXIvbG5r
MSIgLT4gIi4uIiBmaXJzdCBhbmQgImRpci9sbmsxL2xuazIiIC0+ICIuLiIgbmV4dC4KKyAgLy8g
b3IgImRpci9sbmsxIiAtPiAiLi4iIGZpcnN0LCAiZGlyL2xuazEvbG5rMiIgLT4gIi4uIiBuZXh0
IGFuZAorICAvLyBmaWxlICJkaXIvbG5rMS9sbmsyL3BvYy50eHQiIGxhc3QuCisgIC8vIERvIG5v
dCBjb25mdXNlIHdpdGggbGluayBjaGFpbnMgaW4gdGFyZ2V0LCB0aGlzIGlzIGluIGxpbmsgc291
cmNlIHBhdGguCisgIC8vIEl0IGlzIGltcG9ydGFudCBmb3IgV2luZG93cyB0b28sIHRob3VnaCB0
aGlzIGNoZWNrIGNhbiBiZSBvbWl0dGVkCisgIC8vIGlmIExpbmtzVG9EaXJzIGlzIGludm9rZWQg
aW4gV2luZG93cyBhcyB3ZWxsLgogICBpZiAoVXBMZXZlbHM+MCAmJiBMaW5rSW5QYXRoKFByZXBT
cmNOYW1lKSkKICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC0xNjAsMTUgKzIyNiwyNiBAQAog
fQogCiAKLWJvb2wgRXh0cmFjdFN5bWxpbmsoQ29tbWFuZERhdGEgKkNtZCxDb21wckRhdGFJTyAm
RGF0YUlPLEFyY2hpdmUgJkFyYyxjb25zdCB3Y2hhciAqTGlua05hbWUpCitib29sIEV4dHJhY3RT
eW1saW5rKENvbW1hbmREYXRhICpDbWQsQ29tcHJEYXRhSU8gJkRhdGFJTyxBcmNoaXZlICZBcmMs
Y29uc3Qgd2NoYXIgKkxpbmtOYW1lLGJvb2wgJlVwTGluaykKIHsKKyAgLy8gUmV0dXJuaW5nIHRy
dWUgaW4gVXBsaW5rIGluZGljYXRlcyB0aGF0IGxpbmsgdGFyZ2V0IG1pZ2h0IGluY2x1ZGUgIi4u
IgorICAvLyBhbmQgZW5hYmxlcyBhZGRpdGlvbmFsIGNoZWNrcy4gSXQgaXMgb2sgdG8gZmFsc2Vs
eSByZXR1cm4gdHJ1ZSBoZXJlLAorICAvLyBhcyBpdCBpbXBsaWVzIG9ubHkgdGhlIG1pbm9yIHBl
cmZvcm1hbmNlIHBlbmFsdHkuIEJ1dCB3ZSBzaGFsbCBhbHdheXMKKyAgLy8gcmV0dXJuIHRydWUg
Zm9yIGxpbmtzIHdpdGggIi4uIiBpbiB0YXJnZXQgZm9yIHNlY3VyaXR5IHJlYXNvbi4KKworICBV
cExpbms9dHJ1ZTsgLy8gQXNzdW1lIHRoZSB0YXJnZXQgbWlnaHQgaW5jbHVkZSBwb3RlbnRpYWxs
eSB1bnNhZmUgIi4uIi4KKyNpZiBkZWZpbmVkKFNBVkVfTElOS1MpICYmIGRlZmluZWQoX1VOSVgp
IHx8IGRlZmluZWQoX1dJTl9BTEwpCisgIGlmIChBcmMuRm9ybWF0PT1SQVJGTVQ1MCkgLy8gRm9y
IFJBUjUgYXJjaGl2ZXMgd2UgY2FuIGNoZWNrIFJlZGlyTmFtZSBmb3IgYm90aCBVbml4IGFuZCBX
aW5kb3dzLgorICAgIFVwTGluaz13Y3NzdHIoQXJjLkZpbGVIZWFkLlJlZGlyTmFtZSxMIi4uIikh
PU5VTEw7CisjZW5kaWYKKwogI2lmIGRlZmluZWQoU0FWRV9MSU5LUykgJiYgZGVmaW5lZChfVU5J
WCkKICAgLy8gRm9yIFJBUiAzLnggYXJjaGl2ZXMgd2UgcHJvY2VzcyBsaW5rcyBldmVuIGluIHRl
c3QgbW9kZSB0byBza2lwIGxpbmsgZGF0YS4KICAgaWYgKEFyYy5Gb3JtYXQ9PVJBUkZNVDE1KQot
ICAgIHJldHVybiBFeHRyYWN0VW5peExpbmszMChDbWQsRGF0YUlPLEFyYyxMaW5rTmFtZSk7Cisg
ICAgcmV0dXJuIEV4dHJhY3RVbml4TGluazMwKENtZCxEYXRhSU8sQXJjLExpbmtOYW1lLFVwTGlu
ayk7CiAgIGlmIChBcmMuRm9ybWF0PT1SQVJGTVQ1MCkKICAgICByZXR1cm4gRXh0cmFjdFVuaXhM
aW5rNTAoQ21kLExpbmtOYW1lLCZBcmMuRmlsZUhlYWQpOwotI2VsaWYgZGVmaW5lZCBfV0lOX0FM
TAorI2VsaWYgZGVmaW5lZChfV0lOX0FMTCkKICAgLy8gUkFSIDUuMCBhcmNoaXZlcyBzdG9yZSBs
aW5rIGluZm9ybWF0aW9uIGluIGZpbGUgaGVhZGVyLCBzbyB0aGVyZSBpcwogICAvLyBubyBuZWVk
IHRvIGFkZGl0aW9uYWxseSB0ZXN0IGl0IGlmIHdlIGRvIG5vdCBjcmVhdGUgYSBmaWxlLgogICBp
ZiAoQXJjLkZvcm1hdD09UkFSRk1UNTApCmRpZmYgLXVyIHVucmFyLTYuMS43L2V4dGluZm8uaHBw
IHVucmFyLTYuMi43L2V4dGluZm8uaHBwCi0tLSB1bnJhci02LjEuNy9leHRpbmZvLmhwcAkyMDIy
LTEwLTE5IDIyOjA1OjEyCisrKyB1bnJhci02LjIuNy9leHRpbmZvLmhwcAkyMDIzLTA1LTE0IDEz
OjEwOjM0CkBAIC0xLDggKzEsOSBAQAogI2lmbmRlZiBfUkFSX0VYVElORk9fCiAjZGVmaW5lIF9S
QVJfRVhUSU5GT18KIAorYm9vbCBMaW5rc1RvRGlycyhjb25zdCB3Y2hhciAqU3JjTmFtZSxjb25z
dCB3Y2hhciAqU2tpcFBhcnQsc3RkOjp3c3RyaW5nICZMYXN0Q2hlY2tlZCk7CiBib29sIElzUmVs
YXRpdmVTeW1saW5rU2FmZShDb21tYW5kRGF0YSAqQ21kLGNvbnN0IHdjaGFyICpTcmNOYW1lLGNv
bnN0IHdjaGFyICpQcmVwU3JjTmFtZSxjb25zdCB3Y2hhciAqVGFyZ2V0TmFtZSk7Ci1ib29sIEV4
dHJhY3RTeW1saW5rKENvbW1hbmREYXRhICpDbWQsQ29tcHJEYXRhSU8gJkRhdGFJTyxBcmNoaXZl
ICZBcmMsY29uc3Qgd2NoYXIgKkxpbmtOYW1lKTsKK2Jvb2wgRXh0cmFjdFN5bWxpbmsoQ29tbWFu
ZERhdGEgKkNtZCxDb21wckRhdGFJTyAmRGF0YUlPLEFyY2hpdmUgJkFyYyxjb25zdCB3Y2hhciAq
TGlua05hbWUsYm9vbCAmVXBMaW5rKTsKICNpZmRlZiBfVU5JWAogdm9pZCBTZXRVbml4T3duZXIo
QXJjaGl2ZSAmQXJjLGNvbnN0IHdjaGFyICpGaWxlTmFtZSk7CiAjZW5kaWYKZGlmZiAtdXIgdW5y
YXItNi4xLjcvZXh0cmFjdC5jcHAgdW5yYXItNi4yLjcvZXh0cmFjdC5jcHAKLS0tIHVucmFyLTYu
MS43L2V4dHJhY3QuY3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L2V4dHJh
Y3QuY3BwCTIwMjMtMDUtMTQgMTM6MTA6MzQKQEAgLTUsMTAgKzUsMzAgQEAKICAgQ21kRXh0cmFj
dDo6Q21kPUNtZDsKIAogICAqQXJjTmFtZT0wOwotCiAgICpEZXN0RmlsZU5hbWU9MDsKIAorICBB
cmNBbmFseXplZD1mYWxzZTsKKyAgQW5hbHl6ZT1uZXcgQW5hbHl6ZURhdGE7CisgIG1lbXNldChB
bmFseXplLDAsc2l6ZW9mKCpBbmFseXplKSk7CisKICAgVG90YWxGaWxlQ291bnQ9MDsKKworICAv
LyBDb21tb24gZm9yIGFsbCBhcmNoaXZlcyBpbnZvbHZlZC4gU2V0IGhlcmUgaW5zdGVhZCBvZiBE
b0V4dHJhY3QoKQorICAvLyB0byB1c2UgaW4gdW5yYXIuZGxsIHRvby4gQWxsb3dzIHRvIGF2b2lk
IExpbmtzVG9EaXJzKCkgY2FsbHMKKyAgLy8gYW5kIHNhdmUgQ1BVIHRpbWUgaW4gbm8gc3ltbGlu
a3MgaW5jbHVkaW5nICIuLiIgaW4gdGFyZ2V0IHdlcmUgZXh0cmFjdGVkLgorI2lmIGRlZmluZWQo
X1dJTl9BTEwpCisgIC8vIFdlIGNhbid0IGV4cGFuZCBzeW1saW5rIHBhdGggY29tcG9uZW50cyBp
biBhbm90aGVyIHN5bWxpbmsgdGFyZ2V0CisgIC8vIGluIFdpbmRvd3MuIFdlIGNhbid0IGNyZWF0
ZSBzeW1saW5rcyBpbiBBbmRyb2lkIG5vdy4gRXZlbiB0aG91Z2ggd2UgZG8gbm90CisgIC8vIHJl
YWxseSBuZWVkIExpbmtzVG9EaXJzKCkgY2FsbHMgaW4gdGhlc2Ugc3lzdGVtcywgd2Ugc3RpbGwg
Y2FsbCBpdAorICAvLyBmb3IgZXh0cmEgc2FmZXR5LCBidXQgb25seSBpZiBzeW1saW5rIHdpdGgg
Ii4uIiBpbiB0YXJnZXQgd2FzIGV4dHJhY3RlZC4KKyAgQ29udmVydFN5bWxpbmtQYXRocz1mYWxz
ZTsKKyNlbHNlCisgIC8vIFdlIGVuYWJsZSBpdCBieSBkZWZhdWx0IGluIFVuaXggdG8gY2FyZSBh
Ym91dCB0aGUgY2FzZSB3aGVuIHNldmVyYWwKKyAgLy8gYXJjaGl2ZXMgYXJlIHVucGFja2VkIHRv
IHNhbWUgZGlyZWN0b3J5IHdpdGggc2V2ZXJhbCBpbmRlcGVuZGVudCBSQVIgcnVucy4KKyAgLy8g
V29yc3QgY2FzZSBwZXJmb3JtYW5jZSBwZW5hbHR5IGZvciBhIGxvdCBvZiBzbWFsbCBmaWxlcyBz
ZWVtcyB0byBiZSB+MyUuCisgIENvbnZlcnRTeW1saW5rUGF0aHM9dHJ1ZTsKKyNlbmRpZgorCiAg
IFVucD1uZXcgVW5wYWNrKCZEYXRhSU8pOwogI2lmZGVmIFJBUl9TTVAKICAgVW5wLT5TZXRUaHJl
YWRzKENtZC0+VGhyZWFkcyk7CkBAIC0xOCwxMCArMzgsMjkgQEAKIAogQ21kRXh0cmFjdDo6fkNt
ZEV4dHJhY3QoKQogeworICBGcmVlQW5hbHl6ZURhdGEoKTsKICAgZGVsZXRlIFVucDsKKyAgZGVs
ZXRlIEFuYWx5emU7CiB9CiAKIAordm9pZCBDbWRFeHRyYWN0OjpGcmVlQW5hbHl6ZURhdGEoKQor
eworICBmb3IgKHNpemVfdCBJPTA7STxSZWZMaXN0LlNpemUoKTtJKyspCisgIHsKKyAgICAvLyBX
ZSBjYW4gaGF2ZSB1bmRlbGV0ZWQgdGVtcG9yYXJ5IHJlZmVyZW5jZSBzb3VyY2UgaGVyZSBpZiBl
eHRyYWN0aW9uCisgICAgLy8gd2FzIGludGVycnVwdGVkIGVhcmx5IG9yIGlmIHVzZXIgcmVmdXNl
ZCB0byBvdmVyd3JpdGUgcHJvbXB0LgorICAgIGlmIChSZWZMaXN0W0ldLlRtcE5hbWUhPU5VTEwp
CisgICAgICBEZWxGaWxlKFJlZkxpc3RbSV0uVG1wTmFtZSk7CisgICAgZnJlZShSZWZMaXN0W0ld
LlJlZk5hbWUpOworICAgIGZyZWUoUmVmTGlzdFtJXS5UbXBOYW1lKTsKKyAgfQorICBSZWZMaXN0
LlJlc2V0KCk7CisKKyAgbWVtc2V0KEFuYWx5emUsMCxzaXplb2YoKkFuYWx5emUpKTsKK30KKwor
CiB2b2lkIENtZEV4dHJhY3Q6OkRvRXh0cmFjdCgpCiB7CiAjaWYgZGVmaW5lZChfV0lOX0FMTCkg
JiYgIWRlZmluZWQoU0ZYX01PRFVMRSkgJiYgIWRlZmluZWQoU0lMRU5UKQpAQCAtMzAsMTAgKzY5
LDEzIEBACiAgIFBhc3N3b3JkQ2FuY2VsbGVkPWZhbHNlOwogICBEYXRhSU8uU2V0Q3VycmVudENv
bW1hbmQoQ21kLT5Db21tYW5kWzBdKTsKIAotICBGaW5kRGF0YSBGRDsKLSAgd2hpbGUgKENtZC0+
R2V0QXJjTmFtZShBcmNOYW1lLEFTSVpFKEFyY05hbWUpKSkKLSAgICBpZiAoRmluZEZpbGU6OkZh
c3RGaW5kKEFyY05hbWUsJkZEKSkKLSAgICAgIERhdGFJTy5Ub3RhbEFyY1NpemUrPUZELlNpemU7
CisgIGlmICgqQ21kLT5Vc2VTdGRpbj09MCkKKyAgeworICAgIEZpbmREYXRhIEZEOworICAgIHdo
aWxlIChDbWQtPkdldEFyY05hbWUoQXJjTmFtZSxBU0laRShBcmNOYW1lKSkpCisgICAgICBpZiAo
RmluZEZpbGU6OkZhc3RGaW5kKEFyY05hbWUsJkZEKSkKKyAgICAgICAgRGF0YUlPLlRvdGFsQXJj
U2l6ZSs9RkQuU2l6ZTsKKyAgfQogCiAgIENtZC0+QXJjTmFtZXMuUmV3aW5kKCk7CiAgIHdoaWxl
IChDbWQtPkdldEFyY05hbWUoQXJjTmFtZSxBU0laRShBcmNOYW1lKSkpCkBAIC05Nyw3ICsxMzks
MTEgQEAKICAgQWxsTWF0Y2hlc0V4YWN0PXRydWU7CiAgIEFueVNvbGlkRGF0YVVucGFja2VkV2Vs
bD1mYWxzZTsKIAorICBBcmNBbmFseXplZD1mYWxzZTsKKwogICBTdGFydFRpbWUuU2V0Q3VycmVu
dFRpbWUoKTsKKworICBMYXN0Q2hlY2tlZFN5bWxpbmsuY2xlYXIoKTsKIH0KIAogCkBAIC0xNjgs
MjAgKzIxNCwzMyBAQAogICB9CiAjZW5kaWYKIAorICBBcmMuVmlld0NvbW1lbnQoKTsgLy8gTXVz
dCBiZSBiZWZvcmUgcG9zc2libGUgRVhUUkFDVF9BUkNfUkVQRUFULgorCiAgIGludDY0IFZvbHVt
ZVNldFNpemU9MDsgLy8gVG90YWwgc2l6ZSBvZiB2b2x1bWVzIGFmdGVyIHRoZSBjdXJyZW50IHZv
bHVtZS4KIAorI2lmbmRlZiBTRlhfTU9EVUxFCisgIGlmICghQXJjQW5hbHl6ZWQgJiYgKkNtZC0+
VXNlU3RkaW49PTApCisgIHsKKyAgICBBbmFseXplQXJjaGl2ZShBcmMuRmlsZU5hbWUsQXJjLlZv
bHVtZSxBcmMuTmV3TnVtYmVyaW5nKTsKKyAgICBBcmNBbmFseXplZD10cnVlOyAvLyBBdm9pZCBy
ZXBlYXRlZCBhbmFseXNpcyBvbiBFWFRSQUNUX0FSQ19SRVBFQVQuCisgIH0KKyNlbmRpZgorCiAg
IGlmIChBcmMuVm9sdW1lKQogICB7CiAjaWZuZGVmIFNGWF9NT0RVTEUKICAgICAvLyBUcnkgdG8g
c3BlZWQgdXAgZXh0cmFjdGlvbiBmb3IgaW5kZXBlbmRlbnQgc29saWQgdm9sdW1lcyBieSBzdGFy
dGluZwogICAgIC8vIGV4dHJhY3Rpb24gZnJvbSBub24tZmlyc3Qgdm9sdW1lIGlmIHdlIGNhbi4K
LSAgICBpZiAoIVVzZUV4YWN0Vm9sTmFtZSAmJiBBcmMuU29saWQgJiYgRGV0ZWN0U3RhcnRWb2x1
bWUoQXJjLkZpbGVOYW1lLEFyYy5OZXdOdW1iZXJpbmcpKQorICAgIGlmICgqQW5hbHl6ZS0+U3Rh
cnROYW1lIT0wKQogICAgIHsKKyAgICAgIHdjc25jcHl6KEFyY05hbWUsQW5hbHl6ZS0+U3RhcnRO
YW1lLEFTSVpFKEFyY05hbWUpKTsKKyAgICAgICpBbmFseXplLT5TdGFydE5hbWU9MDsKKwogICAg
ICAgVXNlRXhhY3RWb2xOYW1lPXRydWU7CiAgICAgICByZXR1cm4gRVhUUkFDVF9BUkNfUkVQRUFU
OwogICAgIH0KICNlbmRpZgotCisgICAgCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0b3RhbCBzaXpl
IG9mIGFsbCBhY2Nlc3NpYmxlIHZvbHVtZXMuCiAgICAgLy8gVGhpcyBzaXplIGlzIG5lY2Vzc2Fy
eSB0byBkaXNwbGF5IHRoZSBjb3JyZWN0IHRvdGFsIHByb2dyZXNzIGluZGljYXRvci4KIApAQCAt
MjE2LDcgKzI3NSwxMyBAQAogICBlbHNlCiAgICAgdWlTdGFydEFyY2hpdmVFeHRyYWN0KCFDbWQt
PlRlc3QsQXJjTmFtZSk7CiAKLSAgQXJjLlZpZXdDb21tZW50KCk7CisjaWZuZGVmIFNGWF9NT0RV
TEUKKyAgaWYgKEFuYWx5emUtPlN0YXJ0UG9zIT0wKQorICB7CisgICAgQXJjLlNlZWsoQW5hbHl6
ZS0+U3RhcnRQb3MsU0VFS19TRVQpOworICAgIEFuYWx5emUtPlN0YXJ0UG9zPTA7CisgIH0KKyNl
bmRpZgogCiAKICAgd2hpbGUgKDEpCkBAIC0yNzIsOCArMzM3LDE1IEBACiAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgSEVBREVSX1RZUEUgSGVhZGVyVHlwZT1BcmMuR2V0SGVhZGVyVHlwZSgpOwot
ICBpZiAoSGVhZGVyVHlwZSE9SEVBRF9GSUxFKQorICBpZiAoSGVhZGVyVHlwZT09SEVBRF9GSUxF
KQogICB7CisgICAgLy8gVW5saWtlIEFyYy5GaWxlTmFtZSwgQXJjTmFtZSBtaWdodCBzdG9yZSBh
biBvbGQgdm9sdW1lIG5hbWUgaGVyZS4KKyAgICBpZiAoQW5hbHl6ZS0+RW5kUG9zIT0wICYmIEFu
YWx5emUtPkVuZFBvcz09QXJjLkN1ckJsb2NrUG9zICYmCisgICAgICAgICgqQW5hbHl6ZS0+RW5k
TmFtZT09MCB8fCB3Y3NjbXAoQW5hbHl6ZS0+RW5kTmFtZSxBcmMuRmlsZU5hbWUpPT0wKSkKKyAg
ICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBlbHNlCisgIHsKICNpZm5kZWYgU0ZYX01PRFVMRQog
ICAgIGlmIChBcmMuRm9ybWF0PT1SQVJGTVQxNSAmJiBIZWFkZXJUeXBlPT1IRUFEM19PTERTRVJW
SUNFICYmIFByZXZQcm9jZXNzZWQpCiAgICAgICBTZXRFeHRyYUluZm8yMChDbWQsQXJjLERlc3RG
aWxlTmFtZSk7CkBAIC0zMTUsNiArMzg3LDkgQEAKICAgaWYgKEFyYy5GaWxlSGVhZC5VbnBTaXpl
PDApCiAgICAgQXJjLkZpbGVIZWFkLlVucFNpemU9MDsKIAorICAvLyAyMDIyLjAzLjIwOiBXZSBt
aWdodCByZW1vdmUgdGhpcyBjaGVjayBpbiB0aGUgZnV0dXJlLgorICAvLyBJdCBkdXBsaWNhdGVz
IEFuYWx5emUtPkVuZFBvcyBhbmQgQW5hbHl6ZS0+RW5kTmFtZSBpbiBhbGwgY2FzZXMgZXhjZXB0
CisgIC8vIHZvbHVtZXMgb24gcmVtb3ZhYmxlIG1lZGlhLgogICBpZiAoIUNtZC0+UmVjdXJzZSAm
JiBNYXRjaGVkQXJncz49Q21kLT5GaWxlQXJncy5JdGVtc0NvdW50KCkgJiYgQWxsTWF0Y2hlc0V4
YWN0KQogICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDEzLDEzICs0ODgsMzkgQEAKICAgRmlyc3RG
aWxlPWZhbHNlOwogI2VuZGlmCiAKKyAgYm9vbCBSZWZUYXJnZXQ9ZmFsc2U7CisgIGlmICghTWF0
Y2hGb3VuZCkKKyAgICBmb3IgKHNpemVfdCBJPTA7STxSZWZMaXN0LlNpemUoKTtJKyspCisgICAg
ICBpZiAod2NzY21wKEFyY0ZpbGVOYW1lLFJlZkxpc3RbSV0uUmVmTmFtZSk9PTApCisgICAgICB7
CisgICAgICAgIEV4dHJhY3RSZWYgKk1hdGNoZWRSZWY9JlJlZkxpc3RbSV07CisgICAgICAKKyAg
ICAgICAgaWYgKCFDbWQtPlRlc3QpIC8vIFdoaWxlIGhhcm1sZXNzLCBpdCBpcyB1c2VsZXNzIGZv
ciAndCcuCisgICAgICAgIHsKKyAgICAgICAgICAvLyBJZiByZWZlcmVuY2Ugc291cmNlIGlzbid0
IHNlbGVjdGVkLCBidXQgdGFyZ2V0IGlzIHNlbGVjdGVkLAorICAgICAgICAgIC8vIHdlIHVucGFj
ayB0aGUgc291cmNlIHVuZGVyIHRoZSB0ZW1wb3JhcnkgbmFtZSBhbmQgdGhlbiByZW5hbWUKKyAg
ICAgICAgICAvLyBvciBjb3B5IGl0IHRvIHRhcmdldCBuYW1lLiBXZSBkbyBub3QgdW5wYWNrIGl0
IHVuZGVyIHRoZSB0YXJnZXQKKyAgICAgICAgICAvLyBuYW1lIGltbWVkaWF0ZWx5LCBiZWNhdXNl
IHRoZSBzYW1lIHNvdXJjZSBjYW4gYmUgdXNlZCBieSBtdWx0aXBsZQorICAgICAgICAgIC8vIHRh
cmdldHMgYW5kIGl0IGlzIHBvc3NpYmxlIHRoYXQgZmlyc3QgdGFyZ2V0IGlzbid0IHVucGFja2Vk
CisgICAgICAgICAgLy8gZm9yIHNvbWUgcmVhc29uLiBBbHNvIHRhcmdldHMgbWlnaHQgaGF2ZSBh
c3NvY2lhdGVkIHNlcnZpY2UgYmxvY2tzCisgICAgICAgICAgLy8gbGlrZSBBQ0xzLiBBbGwgdGhp
cyB3b3VsZCBjb21wbGljYXRlIHByb2Nlc3NpbmcgYSBsb3QuCisgICAgICAgICAgd2NzbmNweXoo
RGVzdEZpbGVOYW1lLCpDbWQtPlRlbXBQYXRoIT0wID8gQ21kLT5UZW1wUGF0aDpDbWQtPkV4dHJQ
YXRoLEFTSVpFKERlc3RGaWxlTmFtZSkpOworICAgICAgICAgIEFkZEVuZFNsYXNoKERlc3RGaWxl
TmFtZSxBU0laRShEZXN0RmlsZU5hbWUpKTsKKyAgICAgICAgICB3Y3NuY2F0eihEZXN0RmlsZU5h
bWUsTCJfX3RtcF9yZWZlcmVuY2Vfc291cmNlXyIsQVNJWkUoRGVzdEZpbGVOYW1lKSk7CisgICAg
ICAgICAgTWtUZW1wKERlc3RGaWxlTmFtZSxBU0laRShEZXN0RmlsZU5hbWUpKTsKKyAgICAgICAg
ICBNYXRjaGVkUmVmLT5UbXBOYW1lPXdjc2R1cChEZXN0RmlsZU5hbWUpOworICAgICAgICB9Cisg
ICAgICAgIFJlZlRhcmdldD10cnVlOyAvLyBOZWVkIGl0IGV2ZW4gZm9yICd0JyB0byB0ZXN0IHRo
ZSByZWZlcmVuY2Ugc291cmNlLgorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgCiAgIGlmIChB
cmMuRmlsZUhlYWQuRW5jcnlwdGVkICYmIENtZC0+U2tpcEVuY3J5cHRlZCkKICAgICBpZiAoQXJj
LlNvbGlkKQogICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBYm9ydCB0aGUgZW50aXJlIGV4dHJhY3Rp
b24gZm9yIHNvbGlkIGFyY2hpdmUuCiAgICAgZWxzZQogICAgICAgTWF0Y2hGb3VuZD1mYWxzZTsg
Ly8gU2tpcCBvbmx5IHRoZSBjdXJyZW50IGZpbGUgZm9yIG5vbi1zb2xpZCBhcmNoaXZlLgogICAK
LSAgaWYgKE1hdGNoRm91bmQgfHwgKFNraXBTb2xpZD1BcmMuU29saWQpIT0wKQorICBpZiAoTWF0
Y2hGb3VuZCB8fCBSZWZUYXJnZXQgfHwgKFNraXBTb2xpZD1BcmMuU29saWQpIT0wKQogICB7CiAg
ICAgLy8gRmlyc3QgY29tbW9uIGNhbGwgb2YgdWlTdGFydEZpbGVFeHRyYWN0LiBJdCBpcyBkb25l
IGJlZm9yZSBvdmVyd3JpdGUKICAgICAvLyBwcm9tcHRzLCBzbyBpZiBTa2lwU29saWQgc3RhdGUg
aXMgY2hhbmdlZCBiZWxvdywgd2UnbGwgbmVlZCB0byBtYWtlCkBAIC00MjcsNyArNTI4LDggQEAK
ICAgICBpZiAoIXVpU3RhcnRGaWxlRXh0cmFjdChBcmNGaWxlTmFtZSwhQ21kLT5UZXN0LENtZC0+
VGVzdCAmJiBDb21tYW5kIT0nSScsU2tpcFNvbGlkKSkKICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIEV4dHJQcmVwYXJlTmFtZShBcmMsQXJjRmlsZU5hbWUsRGVzdEZpbGVOYW1lLEFTSVpFKERl
c3RGaWxlTmFtZSkpOworICAgIGlmICghUmVmVGFyZ2V0KQorICAgICAgRXh0clByZXBhcmVOYW1l
KEFyYyxBcmNGaWxlTmFtZSxEZXN0RmlsZU5hbWUsQVNJWkUoRGVzdEZpbGVOYW1lKSk7CiAKICAg
ICAvLyBEZXN0RmlsZU5hbWUgY2FuIGJlIHNldCBlbXB0eSBpbiBjYXNlIG9mIGV4Y2Vzc2l2ZSAt
YXAgc3dpdGNoLgogICAgIEV4dHJGaWxlPSFTa2lwU29saWQgJiYgKkRlc3RGaWxlTmFtZSE9MCAm
JiAhQXJjLkZpbGVIZWFkLlNwbGl0QmVmb3JlOwpAQCAtNDY0LDkgKzU2NiwxMyBAQAogICAgICAg
cmV0dXJuICFBcmMuU29saWQ7IC8vIENhbiB0cnkgZXh0cmFjdGluZyBuZXh0IGZpbGUgb25seSBp
biBub24tc29saWQgYXJjaGl2ZS4KICAgICB9CiAKLSAgICB3aGlsZSAodHJ1ZSkgLy8gUmVwZWF0
IHRoZSBwYXNzd29yZCBwcm9tcHQgZm9yIHdyb25nIGFuZCBlbXB0eSBwYXNzd29yZHMuCisgICAg
aWYgKEFyYy5GaWxlSGVhZC5FbmNyeXB0ZWQpCiAgICAgewotICAgICAgaWYgKEFyYy5GaWxlSGVh
ZC5FbmNyeXB0ZWQpCisgICAgICBSYXJDaGVja1Bhc3N3b3JkIENoZWNrUHdkOworICAgICAgaWYg
KEFyYy5Gb3JtYXQ9PVJBUkZNVDUwICYmIEFyYy5GaWxlSGVhZC5Vc2VQc3dDaGVjayAmJiAhQXJj
LkJyb2tlbkhlYWRlcikKKyAgICAgICAgQ2hlY2tQd2QuU2V0KEFyYy5GaWxlSGVhZC5TYWx0LEFy
Yy5GaWxlSGVhZC5Jbml0VixBcmMuRmlsZUhlYWQuTGcyQ291bnQsQXJjLkZpbGVIZWFkLlBzd0No
ZWNrKTsKKworICAgICAgd2hpbGUgKHRydWUpIC8vIFJlcGVhdCB0aGUgcGFzc3dvcmQgcHJvbXB0
IGZvciB3cm9uZyBhbmQgZW1wdHkgcGFzc3dvcmRzLgogICAgICAgewogICAgICAgICAvLyBTdG9w
IGFyY2hpdmUgZXh0cmFjdGluZyBpZiB1c2VyIGNhbmNlbGxlZCBhIHBhc3N3b3JkIHByb21wdC4K
ICNpZmRlZiBSQVJETEwKQEAgLTQ3Niw3NyArNTgyLDgzIEBACiAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAjZWxzZQotICAgICAgICBpZiAoIUV4dHJHZXRQYXNzd29yZChBcmMs
QXJjRmlsZU5hbWUpKQorICAgICAgICBpZiAoIUV4dHJHZXRQYXNzd29yZChBcmMsQXJjRmlsZU5h
bWUsQ2hlY2tQd2QuSXNTZXQoKSA/ICZDaGVja1B3ZDpOVUxMKSkKICAgICAgICAgewogICAgICAg
ICAgIFBhc3N3b3JkQ2FuY2VsbGVkPXRydWU7CiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAjZW5kaWYKLSAgICAgIH0KIAotICAgICAgLy8gU2V0IGEgcGFzc3dvcmQgYmVmb3Jl
IGNyZWF0aW5nIHRoZSBmaWxlLCBzbyB3ZSBjYW4gc2tpcCBjcmVhdGluZwotICAgICAgLy8gaW4g
Y2FzZSBvZiB3cm9uZyBwYXNzd29yZC4KLSAgICAgIFNlY1Bhc3N3b3JkIEZpbGVQYXNzd29yZD1D
bWQtPlBhc3N3b3JkOwotI2lmIGRlZmluZWQoX1dJTl9BTEwpICYmICFkZWZpbmVkKFNGWF9NT0RV
TEUpCi0gICAgICBDb252ZXJ0RG9zUGFzc3dvcmQoQXJjLEZpbGVQYXNzd29yZCk7Ci0jZW5kaWYK
KyAgICAgICAgLy8gU2V0IGEgcGFzc3dvcmQgYmVmb3JlIGNyZWF0aW5nIHRoZSBmaWxlLCBzbyB3
ZSBjYW4gc2tpcCBjcmVhdGluZworICAgICAgICAvLyBpbiBjYXNlIG9mIHdyb25nIHBhc3N3b3Jk
LgorICAgICAgICBTZWNQYXNzd29yZCBGaWxlUGFzc3dvcmQ9Q21kLT5QYXNzd29yZDsKKyAgI2lm
IGRlZmluZWQoX1dJTl9BTEwpICYmICFkZWZpbmVkKFNGWF9NT0RVTEUpCisgICAgICAgIENvbnZl
cnREb3NQYXNzd29yZChBcmMsRmlsZVBhc3N3b3JkKTsKKyAgI2VuZGlmCiAKLSAgICAgIGJ5dGUg
UHN3Q2hlY2tbU0laRV9QU1dDSEVDS107Ci0gICAgICBEYXRhSU8uU2V0RW5jcnlwdGlvbihmYWxz
ZSxBcmMuRmlsZUhlYWQuQ3J5cHRNZXRob2QsJkZpbGVQYXNzd29yZCwKLSAgICAgICAgICAgICBB
cmMuRmlsZUhlYWQuU2FsdFNldCA/IEFyYy5GaWxlSGVhZC5TYWx0Ok5VTEwsCi0gICAgICAgICAg
ICAgQXJjLkZpbGVIZWFkLkluaXRWLEFyYy5GaWxlSGVhZC5MZzJDb3VudCwKLSAgICAgICAgICAg
ICBBcmMuRmlsZUhlYWQuSGFzaEtleSxQc3dDaGVjayk7CisgICAgICAgIGJ5dGUgUHN3Q2hlY2tb
U0laRV9QU1dDSEVDS107CisgICAgICAgIERhdGFJTy5TZXRFbmNyeXB0aW9uKGZhbHNlLEFyYy5G
aWxlSGVhZC5DcnlwdE1ldGhvZCwmRmlsZVBhc3N3b3JkLAorICAgICAgICAgICAgICAgQXJjLkZp
bGVIZWFkLlNhbHRTZXQgPyBBcmMuRmlsZUhlYWQuU2FsdDpOVUxMLAorICAgICAgICAgICAgICAg
QXJjLkZpbGVIZWFkLkluaXRWLEFyYy5GaWxlSGVhZC5MZzJDb3VudCwKKyAgICAgICAgICAgICAg
IEFyYy5GaWxlSGVhZC5IYXNoS2V5LFBzd0NoZWNrKTsKIAotICAgICAgLy8gSWYgaGVhZGVyIGlz
IGRhbWFnZWQsIHdlIGNhbm5vdCByZWx5IG9uIHBhc3N3b3JkIGNoZWNrIHZhbHVlLAotICAgICAg
Ly8gYmVjYXVzZSBpdCBjYW4gYmUgZGFtYWdlZCB0b28uCi0gICAgICBpZiAoQXJjLkZpbGVIZWFk
LkVuY3J5cHRlZCAmJiBBcmMuRmlsZUhlYWQuVXNlUHN3Q2hlY2sgJiYKLSAgICAgICAgICBtZW1j
bXAoQXJjLkZpbGVIZWFkLlBzd0NoZWNrLFBzd0NoZWNrLFNJWkVfUFNXQ0hFQ0spIT0wICYmCi0g
ICAgICAgICAgIUFyYy5Ccm9rZW5IZWFkZXIpCi0gICAgICB7Ci0gICAgICAgIGlmIChHbG9iYWxQ
YXNzd29yZCkgLy8gRm9yIC1wPHB3ZD4gb3IgQ3RybCtQIHRvIGF2b2lkIHRoZSBpbmZpbml0ZSBs
b29wLgorICAgICAgICAvLyBJZiBoZWFkZXIgaXMgZGFtYWdlZCwgd2UgY2Fubm90IHJlbHkgb24g
cGFzc3dvcmQgY2hlY2sgdmFsdWUsCisgICAgICAgIC8vIGJlY2F1c2UgaXQgY2FuIGJlIGRhbWFn
ZWQgdG9vLgorICAgICAgICBpZiAoQXJjLkZpbGVIZWFkLlVzZVBzd0NoZWNrICYmICFBcmMuQnJv
a2VuSGVhZGVyICYmCisgICAgICAgICAgICBtZW1jbXAoQXJjLkZpbGVIZWFkLlBzd0NoZWNrLFBz
d0NoZWNrLFNJWkVfUFNXQ0hFQ0spIT0wKQogICAgICAgICB7Ci0gICAgICAgICAgLy8gVGhpcyBt
ZXNzYWdlIGlzIHVzZWQgYnkgQW5kcm9pZCBHVUkgdG8gcmVzZXQgY2FjaGVkIHBhc3N3b3Jkcy4K
LSAgICAgICAgICAvLyBVcGRhdGUgYXBwcm9wcmlhdGUgY29kZSBpZiBjaGFuZ2VkLgotICAgICAg
ICAgIHVpTXNnKFVJRVJST1JfQkFEUFNXLEFyYy5GaWxlTmFtZSxBcmNGaWxlTmFtZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSAvLyBGb3IgcGFzc3dvcmRzIGVudGVyZWQgbWFudWFsbHkuCi0g
ICAgICAgIHsKLSAgICAgICAgICAvLyBUaGlzIG1lc3NhZ2UgaXMgdXNlZCBieSBBbmRyb2lkIEdV
SSBhbmQgV2luZG93cyBHVUkgYW5kIFNGWCB0bwotICAgICAgICAgIC8vIHJlc2V0IGNhY2hlZCBw
YXNzd29yZHMuIFVwZGF0ZSBhcHByb3ByaWF0ZSBjb2RlIGlmIGNoYW5nZWQuCi0gICAgICAgICAg
dWlNc2coVUlXQUlUX0JBRFBTVyxBcmMuRmlsZU5hbWUsQXJjRmlsZU5hbWUpOwotICAgICAgICAg
IENtZC0+UGFzc3dvcmQuQ2xlYW4oKTsKKyAgICAgICAgICBpZiAoR2xvYmFsUGFzc3dvcmQpIC8v
IEZvciAtcDxwd2Q+IG9yIEN0cmwrUCB0byBhdm9pZCB0aGUgaW5maW5pdGUgbG9vcC4KKyAgICAg
ICAgICB7CisgICAgICAgICAgICAvLyBUaGlzIG1lc3NhZ2UgaXMgdXNlZCBieSBBbmRyb2lkIEdV
SSB0byByZXNldCBjYWNoZWQgcGFzc3dvcmRzLgorICAgICAgICAgICAgLy8gVXBkYXRlIGFwcHJv
cHJpYXRlIGNvZGUgaWYgY2hhbmdlZC4KKyAgICAgICAgICAgIHVpTXNnKFVJRVJST1JfQkFEUFNX
LEFyYy5GaWxlTmFtZSxBcmNGaWxlTmFtZSk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2Ug
Ly8gRm9yIHBhc3N3b3JkcyBlbnRlcmVkIG1hbnVhbGx5LgorICAgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIFRoaXMgbWVzc2FnZSBpcyB1c2VkIGJ5IEFuZHJvaWQgR1VJIGFuZCBXaW5kb3dzIEdV
SSBhbmQgU0ZYIHRvCisgICAgICAgICAgICAvLyByZXNldCBjYWNoZWQgcGFzc3dvcmRzLiBVcGRh
dGUgYXBwcm9wcmlhdGUgY29kZSBpZiBjaGFuZ2VkLgorICAgICAgICAgICAgdWlNc2coVUlXQUlU
X0JBRFBTVyxBcmMuRmlsZU5hbWUsQXJjRmlsZU5hbWUpOworICAgICAgICAgICAgQ21kLT5QYXNz
d29yZC5DbGVhbigpOwogCi0gICAgICAgICAgLy8gQXZvaWQgbmV3IHJlcXVlc3RzIGZvciB1bnJh
ci5kbGwgdG8gcHJldmVudCB0aGUgaW5maW5pdGUgbG9vcAotICAgICAgICAgIC8vIGlmIGFwcCBh
bHdheXMgcmV0dXJucyB0aGUgc2FtZSBwYXNzd29yZC4KLSNpZm5kZWYgUkFSRExMCi0gICAgICAg
ICAgY29udGludWU7IC8vIFJlcXVlc3QgYSBwYXNzd29yZCBhZ2Fpbi4KLSNlbmRpZgorICAgICAg
ICAgICAgLy8gQXZvaWQgbmV3IHJlcXVlc3RzIGZvciB1bnJhci5kbGwgdG8gcHJldmVudCB0aGUg
aW5maW5pdGUgbG9vcAorICAgICAgICAgICAgLy8gaWYgYXBwIGFsd2F5cyByZXR1cm5zIHRoZSBz
YW1lIHBhc3N3b3JkLgorICAjaWZuZGVmIFJBUkRMTAorICAgICAgICAgICAgY29udGludWU7IC8v
IFJlcXVlc3QgYSBwYXNzd29yZCBhZ2Fpbi4KKyAgI2VuZGlmCisgICAgICAgICAgfQorICAjaWZk
ZWYgUkFSRExMCisgICAgICAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIEVSQVJfRU9QRU4gYXMg
cmVzdWx0IG9mIG1pc3Npbmcgdm9sdW1lLAorICAgICAgICAgIC8vIHdlIHNob3VsZCBub3QgcmVw
bGFjZSBpdCB3aXRoIGxlc3MgcHJlY2lzZSBFUkFSX0JBRF9QQVNTV09SRC4KKyAgICAgICAgICBp
ZiAoQ21kLT5EbGxFcnJvciE9RVJBUl9FT1BFTikKKyAgICAgICAgICAgIENtZC0+RGxsRXJyb3I9
RVJBUl9CQURfUEFTU1dPUkQ7CisgICNlbmRpZgorICAgICAgICAgIEVyckhhbmRsZXIuU2V0RXJy
b3JDb2RlKFJBUlhfQkFEUFdEKTsKKyAgICAgICAgICBFeHRyRmlsZT1mYWxzZTsKICAgICAgICAg
fQotI2lmZGVmIFJBUkRMTAotICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgRVJBUl9FT1BF
TiBhcyByZXN1bHQgb2YgbWlzc2luZyB2b2x1bWUsCi0gICAgICAgIC8vIHdlIHNob3VsZCBub3Qg
cmVwbGFjZSBpdCB3aXRoIGxlc3MgcHJlY2lzZSBFUkFSX0JBRF9QQVNTV09SRC4KLSAgICAgICAg
aWYgKENtZC0+RGxsRXJyb3IhPUVSQVJfRU9QRU4pCi0gICAgICAgICAgQ21kLT5EbGxFcnJvcj1F
UkFSX0JBRF9QQVNTV09SRDsKLSNlbmRpZgotICAgICAgICBFcnJIYW5kbGVyLlNldEVycm9yQ29k
ZShSQVJYX0JBRFBXRCk7Ci0gICAgICAgIEV4dHJGaWxlPWZhbHNlOworICAgICAgICBicmVhazsK
ICAgICAgIH0KLSAgICAgIGJyZWFrOwogICAgIH0KKyAgICBlbHNlCisgICAgICBEYXRhSU8uU2V0
RW5jcnlwdGlvbihmYWxzZSxDUllQVF9OT05FLE5VTEwsTlVMTCxOVUxMLDAsTlVMTCxOVUxMKTsK
IAogI2lmZGVmIFJBUkRMTAogICAgIGlmICgqQ21kLT5EbGxEZXN0TmFtZSE9MCkKICAgICAgIHdj
c25jcHl6KERlc3RGaWxlTmFtZSxDbWQtPkRsbERlc3ROYW1lLEFTSVpFKERlc3RGaWxlTmFtZSkp
OwogI2VuZGlmCiAKKyAgICBpZiAoRXh0ckZpbGUgJiYgQ29tbWFuZCE9J1AnICYmICFDbWQtPlRl
c3QgJiYgIUNtZC0+QWJzb2x1dGVMaW5rcyAmJgorICAgICAgICBDb252ZXJ0U3ltbGlua1BhdGhz
KQorICAgICAgRXh0ckZpbGU9TGlua3NUb0RpcnMoRGVzdEZpbGVOYW1lLENtZC0+RXh0clBhdGgs
TGFzdENoZWNrZWRTeW1saW5rKTsKKwogICAgIEZpbGUgQ3VyRmlsZTsKIAogICAgIGJvb2wgTGlu
a0VudHJ5PUFyYy5GaWxlSGVhZC5SZWRpclR5cGUhPUZTUkVESVJfTk9ORTsKLSAgICBpZiAoTGlu
a0VudHJ5ICYmIEFyYy5GaWxlSGVhZC5SZWRpclR5cGUhPUZTUkVESVJfRklMRUNPUFkpCisgICAg
aWYgKExpbmtFbnRyeSAmJiAoQXJjLkZpbGVIZWFkLlJlZGlyVHlwZSE9RlNSRURJUl9GSUxFQ09Q
WSkpCiAgICAgewogICAgICAgaWYgKEV4dHJGaWxlICYmIENvbW1hbmQhPSdQJyAmJiAhQ21kLT5U
ZXN0KQogICAgICAgewotICAgICAgICAvLyBPdmVyd3JpdGUgcHJvbXB0IGZvciBzeW1ib2xpYyBh
bmQgaGFyZCBsaW5rcy4KKyAgICAgICAgLy8gT3ZlcndyaXRlIHByb21wdCBmb3Igc3ltYm9saWMg
YW5kIGhhcmQgbGlua3MgYW5kIHdoZW4gd2UgbW92ZQorICAgICAgICAvLyBhIHRlbXBvcmFyeSBm
aWxlIHRvIHRoZSBmaWxlIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIGNvcHlpbmcgaXQuCiAgICAgICAg
IGJvb2wgVXNlclJlamVjdD1mYWxzZTsKICAgICAgICAgaWYgKEZpbGVFeGlzdChEZXN0RmlsZU5h
bWUpICYmICFVc2VyUmVqZWN0KQogICAgICAgICAgIEZpbGVDcmVhdGUoQ21kLE5VTEwsRGVzdEZp
bGVOYW1lLEFTSVpFKERlc3RGaWxlTmFtZSksJlVzZXJSZWplY3QsQXJjLkZpbGVIZWFkLlVucFNp
emUsJkFyYy5GaWxlSGVhZC5tdGltZSk7CkBAIC02NjcsMjUgKzc3OSw1MCBAQAogICAgICAgICBp
ZiAoVHlwZT09RlNSRURJUl9IQVJETElOSyB8fCBUeXBlPT1GU1JFRElSX0ZJTEVDT1BZKQogICAg
ICAgICB7CiAgICAgICAgICAgd2NoYXIgUmVkaXJOYW1lW05NXTsKLSAgICAgICAgICBDb252ZXJ0
UGF0aChBcmMuRmlsZUhlYWQuUmVkaXJOYW1lLFJlZGlyTmFtZSxBU0laRShSZWRpck5hbWUpKTsK
KyAgICAgICAgCisgICAgICAgICAgLy8gMjAyMi4xMS4xNTogTWlnaHQgYmUgbmVlZGVkIHdoZW4g
dW5wYWNraW5nIFdpblJBUiA1LjAgbGlua3Mgd2l0aAorICAgICAgICAgIC8vIFVuaXggUkFSLiBX
aW5SQVIgNS4wIHVzZWQgXCBwYXRoIHNlcGFyYXRvcnMgaGVyZSwgd2hlbiBiZWdpbm5pbmcKKyAg
ICAgICAgICAvLyBmcm9tIDUuMTAgZXZlbiBXaW5kb3dzIHZlcnNpb24gdXNlcyAvIGludGVybmFs
bHkgYW5kIGNvbnZlcnRzCisgICAgICAgICAgLy8gdGhlbSB0byBcIHdoZW4gcmVhZGluZyBGSEVY
VFJBX1JFRElSLgorICAgICAgICAgIC8vIFdlIG11c3QgcGVyZm9ybSB0aGlzIGNvbnZlcnNpb24g
YmVmb3JlIENvbnZlcnRQYXRoIGNhbGwsCisgICAgICAgICAgLy8gc28gcGF0aHMgbWl4aW5nIGRp
ZmZlcmVudCBzbGFzaGVzIGxpa2UgXGRpcjEvZGlyMlxmaWxlIGFyZQorICAgICAgICAgIC8vIHBy
b2Nlc3NlZCBjb3JyZWN0bHkuCisgICAgICAgICAgU2xhc2hUb05hdGl2ZShBcmMuRmlsZUhlYWQu
UmVkaXJOYW1lLFJlZGlyTmFtZSxBU0laRShSZWRpck5hbWUpKTsKIAorICAgICAgICAgIENvbnZl
cnRQYXRoKFJlZGlyTmFtZSxSZWRpck5hbWUsQVNJWkUoUmVkaXJOYW1lKSk7CisKICAgICAgICAg
ICB3Y2hhciBOYW1lRXhpc3RpbmdbTk1dOwogICAgICAgICAgIEV4dHJQcmVwYXJlTmFtZShBcmMs
UmVkaXJOYW1lLE5hbWVFeGlzdGluZyxBU0laRShOYW1lRXhpc3RpbmcpKTsKICAgICAgICAgICBp
ZiAoRmlsZUNyZWF0ZU1vZGUgJiYgKk5hbWVFeGlzdGluZyE9MCkgLy8gKk5hbWVFeGlzdGluZyBj
YW4gYmUgMCBpbiBjYXNlIG9mIGV4Y2Vzc2l2ZSAtYXAgc3dpdGNoLgogICAgICAgICAgICAgaWYg
KFR5cGU9PUZTUkVESVJfSEFSRExJTkspCiAgICAgICAgICAgICAgIExpbmtTdWNjZXNzPUV4dHJh
Y3RIYXJkbGluayhDbWQsRGVzdEZpbGVOYW1lLE5hbWVFeGlzdGluZyxBU0laRShOYW1lRXhpc3Rp
bmcpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgTGlua1N1Y2Nlc3M9RXh0cmFj
dEZpbGVDb3B5KEN1ckZpbGUsQXJjLkZpbGVOYW1lLERlc3RGaWxlTmFtZSxOYW1lRXhpc3Rpbmcs
QVNJWkUoTmFtZUV4aXN0aW5nKSk7CisgICAgICAgICAgICAgIExpbmtTdWNjZXNzPUV4dHJhY3RG
aWxlQ29weShDdXJGaWxlLEFyYy5GaWxlTmFtZSxSZWRpck5hbWUsRGVzdEZpbGVOYW1lLE5hbWVF
eGlzdGluZyxBU0laRShOYW1lRXhpc3RpbmcpLEFyYy5GaWxlSGVhZC5VbnBTaXplKTsKICAgICAg
ICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgaWYgKFR5cGU9PUZTUkVESVJfVU5JWFNZTUxJ
TksgfHwgVHlwZT09RlNSRURJUl9XSU5TWU1MSU5LIHx8IFR5cGU9PUZTUkVESVJfSlVOQ1RJT04p
CiAgICAgICAgICAgewogICAgICAgICAgICAgaWYgKEZpbGVDcmVhdGVNb2RlKQotICAgICAgICAg
ICAgICBMaW5rU3VjY2Vzcz1FeHRyYWN0U3ltbGluayhDbWQsRGF0YUlPLEFyYyxEZXN0RmlsZU5h
bWUpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICBib29sIFVwTGluazsKKyAgICAgICAg
ICAgICAgTGlua1N1Y2Nlc3M9RXh0cmFjdFN5bWxpbmsoQ21kLERhdGFJTyxBcmMsRGVzdEZpbGVO
YW1lLFVwTGluayk7CisgICAgICAgICAgICAgIENvbnZlcnRTeW1saW5rUGF0aHN8PUxpbmtTdWNj
ZXNzICYmIFVwTGluazsKKworICAgICAgICAgICAgICAvLyBXZSBkbyBub3QgYWN0dWFsbHkgbmVl
ZCB0byByZXNldCB0aGUgY2FjaGUgaGVyZSBpZiB3ZSBjYWNoZQorICAgICAgICAgICAgICAvLyBv
bmx5IHRoZSBzaW5nbGUgbGFzdCBjaGVja2VkIHBhdGgsIGJlY2F1c2UgYXQgdGhpcyBwb2ludAor
ICAgICAgICAgICAgICAvLyBpdCB3aWxsIGFsd2F5cyBjb250YWluIHRoZSBsaW5rIG93biBwYXRo
IGFuZCBsaW5rIGNhbid0CisgICAgICAgICAgICAgIC8vIG92ZXJ3cml0ZSBpdHMgcGFyZW50IGZv
bGRlci4gQnV0IGlmIHdlIGV2ZXIgZGVjaWRlIHRvIGNhY2hlCisgICAgICAgICAgICAgIC8vIHNl
dmVyYWwgYWxyZWFkeSBjaGVja2VkIHBhdGhzLCB3ZSdsbCBuZWVkIHRvIHJlc2V0IHRoZW0gaGVy
ZS4KKyAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGlmIG5vIGZpbGVzIHdlcmUgY3JlYXRlZCBp
biBvbmUgb2Ygc3VjaCBwYXRocywKKyAgICAgICAgICAgICAgLy8gbGV0J3Mgc2F5IGJlY2F1c2Ug
b2YgZmlsZSBjcmVhdGUgZXJyb3IsIGl0IG1pZ2h0IGJlIHBvc3NpYmxlCisgICAgICAgICAgICAg
IC8vIHRvIG92ZXJ3cml0ZSB0aGUgcGF0aCB3aXRoIGxpbmsgYW5kIGF2b2lkIGNoZWNrcy4gV2Ug
a2VlcCB0aGlzCisgICAgICAgICAgICAgIC8vIGNvZGUgaGVyZSBhcyBhIHJlbWluZGVyIGluIGNh
c2Ugb2YgcG9zc2libGUgbW9kaWZpY2F0aW9ucy4KKyAgICAgICAgICAgICAgTGFzdENoZWNrZWRT
eW1saW5rLmNsZWFyKCk7IC8vIFJlc2V0IGNhY2hlIGZvciBzYWZldHkgcmVhc29uLgorICAgICAg
ICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCiAgICAgICAgICAgewotICAgICAg
ICAgICAgdWlNc2coVUlFUlJPUl9VTktOT1dORVhUUkEsQXJjLkZpbGVOYW1lLERlc3RGaWxlTmFt
ZSk7CisgICAgICAgICAgICB1aU1zZyhVSUVSUk9SX1VOS05PV05FWFRSQSxBcmMuRmlsZU5hbWUs
QXJjRmlsZU5hbWUpOwogICAgICAgICAgICAgTGlua1N1Y2Nlc3M9ZmFsc2U7CiAgICAgICAgICAg
fQogICAgICAgICAgIApAQCAtNzA5LDYgKzg0Niw3IEBACiAgICAgICAgICAgICBVbnAtPkluaXQo
QXJjLkZpbGVIZWFkLldpblNpemUsQXJjLkZpbGVIZWFkLlNvbGlkKTsKICAgICAgICAgICAgIFVu
cC0+U2V0RGVzdFNpemUoQXJjLkZpbGVIZWFkLlVucFNpemUpOwogI2lmbmRlZiBTRlhfTU9EVUxF
CisgICAgICAgICAgICAvLyBSQVIgMS4zIC0gMS41IGFyY2hpdmVzIGRvIG5vdCBzZXQgcGVyIGZp
bGUgc29saWQgZmxhZy4KICAgICAgICAgICAgIGlmIChBcmMuRm9ybWF0IT1SQVJGTVQ1MCAmJiBB
cmMuRmlsZUhlYWQuVW5wVmVyPD0xNSkKICAgICAgICAgICAgICAgVW5wLT5Eb1VucGFjaygxNSxG
aWxlQ291bnQ+MSAmJiBBcmMuU29saWQpOwogICAgICAgICAgICAgZWxzZQpAQCAtODY2LDIyICsx
MDA0LDY0IEBACiB9CiAKIAotYm9vbCBDbWRFeHRyYWN0OjpFeHRyYWN0RmlsZUNvcHkoRmlsZSAm
TmV3LHdjaGFyICpBcmNOYW1lLHdjaGFyICpOYW1lTmV3LHdjaGFyICpOYW1lRXhpc3Rpbmcsc2l6
ZV90IE5hbWVFeGlzdGluZ1NpemUpCitib29sIENtZEV4dHJhY3Q6OkV4dHJhY3RGaWxlQ29weShG
aWxlICZOZXcsd2NoYXIgKkFyY05hbWUsY29uc3Qgd2NoYXIgKlJlZGlyTmFtZSx3Y2hhciAqTmFt
ZU5ldyx3Y2hhciAqTmFtZUV4aXN0aW5nLHNpemVfdCBOYW1lRXhpc3RpbmdTaXplLGludDY0IFVu
cFNpemUpCiB7Ci0gIFNsYXNoVG9OYXRpdmUoTmFtZUV4aXN0aW5nLE5hbWVFeGlzdGluZyxOYW1l
RXhpc3RpbmdTaXplKTsgLy8gTm90IG5lZWRlZCBmb3IgUkFSIDUuMSsgYXJjaGl2ZXMuCi0KICAg
RmlsZSBFeGlzdGluZzsKLSAgaWYgKCFFeGlzdGluZy5XT3BlbihOYW1lRXhpc3RpbmcpKQorICBp
ZiAoIUV4aXN0aW5nLk9wZW4oTmFtZUV4aXN0aW5nKSkKICAgewotICAgIHVpTXNnKFVJRVJST1Jf
RklMRUNPUFksQXJjTmFtZSxOYW1lRXhpc3RpbmcsTmFtZU5ldyk7Ci0gICAgdWlNc2coVUlFUlJP
Ul9GSUxFQ09QWUhJTlQsQXJjTmFtZSk7CisgICAgYm9vbCBPcGVuRmFpbGVkPXRydWU7CisgICAg
Ly8gSWYgd2UgY291bGRuJ3QgZmluZCB0aGUgZXhpc3RpbmcgZmlsZSwgY2hlY2sgaWYgbWF0Y2gg
aXMgcHJlc2VudAorICAgIC8vIGluIHRlbXBvcmFyeSByZWZlcmVuY2Ugc291cmNlcyBsaXN0Lgor
ICAgIGZvciAoc2l6ZV90IEk9MDtJPFJlZkxpc3QuU2l6ZSgpO0krKykKKyAgICAgIGlmICh3Y3Nj
bXAoUmVkaXJOYW1lLFJlZkxpc3RbSV0uUmVmTmFtZSk9PTAgJiYgUmVmTGlzdFtJXS5UbXBOYW1l
IT1OVUxMKQorICAgICAgeworICAgICAgICAvLyBJZiBvbmx5IG9uZSByZWZlcmVuY2UgbGVmdCB0
YXJnZXRpbmcgdG8gdGhpcyB0ZW1wb3JhcnkgZmlsZSwKKyAgICAgICAgLy8gaXQgaXMgZmFzdGVy
IHRvIG1vdmUgdGhlIGZpbGUgaW5zdGVhZCBvZiBjb3B5aW5nIGFuZCBkZWxldGluZyBpdC4KKyAg
ICAgICAgYm9vbCBSZWZNb3ZlPVJlZkxpc3RbSV0uUmVmQ291bnQtLSA9PSAxOworICAgICAgICBO
YW1lRXhpc3Rpbmc9UmVmTGlzdFtJXS5UbXBOYW1lOworICAgICAgICBpZiAoUmVmTW92ZSkgLy8g
T25seSBvbmUgcmVmZXJlbmNlIGxlZnQgZm9yIHRoaXMgdGVtcG9yYXJ5IGZpbGUuCisgICAgICAg
IHsKKyAgICAgICAgICBOZXcuRGVsZXRlKCk7IC8vIERlbGV0ZSB0aGUgcHJldmlvdXNseSBvcGVu
ZWQgZGVzdGluYXRpb24gZmlsZS4KKyAgICAgICAgICAvLyBUcnkgbW92aW5nIHRoZSBmaWxlIGZp
cnN0LgorICAgICAgICAgIGJvb2wgTW92ZUZhaWxlZD0hUmVuYW1lRmlsZShOYW1lRXhpc3Rpbmcs
TmFtZU5ldyk7CisgICAgICAgICAgaWYgKE1vdmVGYWlsZWQpCisgICAgICAgICAgeworICAgICAg
ICAgICAgLy8gSWYgbW92ZSBmYWlsZWQsIHJlLWNyZWF0ZSB0aGUgZGVzdGluYXRpb24gYW5kIHRy
eSBjb3BpbmcuCisgICAgICAgICAgICBpZiAoIU5ldy5XQ3JlYXRlKE5hbWVOZXcsRk1GX1dSSVRF
fEZNRl9TSEFSRVJFQUQpKQorICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBSZWZNb3ZlPWZhbHNlOyAvLyBUcnkgY29weWluZyBiZWxvdy4KKyAgICAgICAgICB9CisgICAg
ICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIG1vdmVkIHN1Y2Nlc3Nm
dWxseSwgcmVvcGVuIHRoZSBkZXN0aW5hdGlvbiBmaWxlIGFuZCBzZWVrIHRvCisgICAgICAgICAg
ICAvLyBlbmQgZm9yIFNldE9wZW5GaWxlVGltZSgpIGFuZCBwb3NzaWJsZSBUcnVuY2F0ZSgpIGNh
bGxzIGxhdGVyLgorICAgICAgICAgICAgaWYgKE5ldy5PcGVuKE5hbWVOZXcpKQorICAgICAgICAg
ICAgICBOZXcuU2VlaygwLFNFRUtfRU5EKTsKKyAgICAgICAgICAgIC8vIFdlIGFscmVhZHkgbW92
ZWQgdGhlIGZpbGUsIHNvIGNsZWFuIHRoZSBuYW1lIHRvIG5vdCB0cnkKKyAgICAgICAgICAgIC8v
IGRlbGV0aW5nIG5vbi1leGlzdGVudCB0ZW1wb3JhcnkgZmlsZSBsYXRlci4KKyAgICAgICAgICAg
IGZyZWUoUmVmTGlzdFtJXS5UbXBOYW1lKTsKKyAgICAgICAgICAgIFJlZkxpc3RbSV0uVG1wTmFt
ZT1OVUxMOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmICghUmVmTW92ZSkKKyAgICAgICAgICBPcGVuRmFpbGVkPSFFeGlzdGluZy5P
cGVuKE5hbWVFeGlzdGluZyk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgaWYgKE9w
ZW5GYWlsZWQpCisgICAgeworICAgICAgRXJySGFuZGxlci5PcGVuRXJyb3JNc2coTmFtZUV4aXN0
aW5nKTsKKyAgICAgIHVpTXNnKFVJRVJST1JfRklMRUNPUFksQXJjTmFtZSxOYW1lRXhpc3Rpbmcs
TmFtZU5ldyk7CisgICAgICB1aU1zZyhVSUVSUk9SX0ZJTEVDT1BZSElOVCxBcmNOYW1lKTsKICNp
ZmRlZiBSQVJETEwKLSAgICBDbWQtPkRsbEVycm9yPUVSQVJfRVJFRkVSRU5DRTsKKyAgICAgIENt
ZC0+RGxsRXJyb3I9RVJBUl9FUkVGRVJFTkNFOwogI2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgfQogCi0gIEFycmF5PGNoYXI+IEJ1ZmZlcigw
eDEwMDAwMCk7CisgIEFycmF5PGJ5dGU+IEJ1ZmZlcigweDEwMDAwMCk7CiAgIGludDY0IENvcHlT
aXplPTA7CiAKICAgd2hpbGUgKHRydWUpCkBAIC04OTAsNiArMTA3MCwxMCBAQAogICAgIGludCBS
ZWFkU2l6ZT1FeGlzdGluZy5SZWFkKCZCdWZmZXJbMF0sQnVmZmVyLlNpemUoKSk7CiAgICAgaWYg
KFJlYWRTaXplPT0wKQogICAgICAgYnJlYWs7CisgICAgLy8gVXBkYXRlIG9ubHkgdGhlIGN1cnJl
bnQgZmlsZSBwcm9ncmVzcyBpbiBXaW5SQVIsIHNldCB0aGUgdG90YWwgdG8gMAorICAgIC8vIHRv
IGtlZXAgaXQgYXMgaXMuIEl0IGxvb2tzIGJldHRlciBmb3IgV2luUkFSLgorICAgIHVpRXh0cmFj
dFByb2dyZXNzKENvcHlTaXplLFVucFNpemUsMCwwKTsKKwogICAgIE5ldy5Xcml0ZSgmQnVmZmVy
WzBdLFJlYWRTaXplKTsKICAgICBDb3B5U2l6ZSs9UmVhZFNpemU7CiAgIH0KQEAgLTkwMCw2ICsx
MDg0LDE2IEBACiAKIHZvaWQgQ21kRXh0cmFjdDo6RXh0clByZXBhcmVOYW1lKEFyY2hpdmUgJkFy
Yyxjb25zdCB3Y2hhciAqQXJjRmlsZU5hbWUsd2NoYXIgKkRlc3ROYW1lLHNpemVfdCBEZXN0U2l6
ZSkKIHsKKyAgaWYgKENtZC0+VGVzdCkKKyAgeworICAgIC8vIERlc3RpbmF0aW9uIG5hbWUgY29u
dmVyc2lvbiBpc24ndCBuZWVkZWQgZm9yIHNpbXBsZSBhcmNoaXZlIHRlc3QuCisgICAgLy8gVGhp
cyBjaGVjayBhbHNvIGFsbG93cyB0byBhdm9pZCBpc3N1aW5nICJBdHRlbXB0aW5nIHRvIGNvcnJl
Y3QuLi4KKyAgICAvLyBSZW5hbWluZy4uLiIgbWVzc2FnZXMgaW4gTWFrZU5hbWVDb21wYXRpYmxl
KCkgYmVsb3cgZm9yIHByb2JsZW1hdGljCisgICAgLy8gbmFtZXMgbGlrZSBhdXgudHh0IHdoZW4g
dGVzdGluZyBhbiBhcmNoaXZlLgorICAgIHdjc25jcHl6KERlc3ROYW1lLEFyY0ZpbGVOYW1lLERl
c3RTaXplKTsKKyAgICByZXR1cm47CisgIH0KKyAgCiAgIHdjc25jcHl6KERlc3ROYW1lLENtZC0+
RXh0clBhdGgsRGVzdFNpemUpOwogCiAgIGlmICgqQ21kLT5FeHRyUGF0aCE9MCkKQEAgLTEwMzMs
MTEgKzEyMjcsMTEgQEAKIAogCiAjaWZuZGVmIFJBUkRMTAotYm9vbCBDbWRFeHRyYWN0OjpFeHRy
R2V0UGFzc3dvcmQoQXJjaGl2ZSAmQXJjLGNvbnN0IHdjaGFyICpBcmNGaWxlTmFtZSkKK2Jvb2wg
Q21kRXh0cmFjdDo6RXh0ckdldFBhc3N3b3JkKEFyY2hpdmUgJkFyYyxjb25zdCB3Y2hhciAqQXJj
RmlsZU5hbWUsUmFyQ2hlY2tQYXNzd29yZCAqQ2hlY2tQd2QpCiB7CiAgIGlmICghQ21kLT5QYXNz
d29yZC5Jc1NldCgpKQogICB7Ci0gICAgaWYgKCF1aUdldFBhc3N3b3JkKFVJUEFTU1dPUkRfRklM
RSxBcmNGaWxlTmFtZSwmQ21kLT5QYXNzd29yZCkvKiB8fCAhQ21kLT5QYXNzd29yZC5Jc1NldCgp
Ki8pCisgICAgaWYgKCF1aUdldFBhc3N3b3JkKFVJUEFTU1dPUkRfRklMRSxBcmNGaWxlTmFtZSwm
Q21kLT5QYXNzd29yZCxDaGVja1B3ZCkvKiB8fCAhQ21kLT5QYXNzd29yZC5Jc1NldCgpKi8pCiAg
ICAgewogICAgICAgLy8gU3VwcHJlc3MgInRlc3QgaXMgb2siIG1lc3NhZ2UgaWYgdXNlciBjYW5j
ZWxsZWQgdGhlIHBhc3N3b3JkIHByb21wdC4KICAgICAgIHVpTXNnKFVJRVJST1JfSU5DRVJSQ09V
TlQpOwpAQCAtMTA1NSw3ICsxMjQ5LDcgQEAKICAgICAgICAgY2FzZSAtMToKICAgICAgICAgICBF
cnJIYW5kbGVyLkV4aXQoUkFSWF9VU0VSQlJFQUspOwogICAgICAgICBjYXNlIDI6Ci0gICAgICAg
ICAgaWYgKCF1aUdldFBhc3N3b3JkKFVJUEFTU1dPUkRfRklMRSxBcmNGaWxlTmFtZSwmQ21kLT5Q
YXNzd29yZCkpCisgICAgICAgICAgaWYgKCF1aUdldFBhc3N3b3JkKFVJUEFTU1dPUkRfRklMRSxB
cmNGaWxlTmFtZSwmQ21kLT5QYXNzd29yZCxDaGVja1B3ZCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMzoKQEAgLTExMzEsNiArMTMy
NSw4IEBACiAgICAgICAgIERpckV4aXN0PUZpbGVFeGlzdChEZXN0RmlsZU5hbWUpICYmIElzRGly
KEdldEZpbGVBdHRyKERlc3RGaWxlTmFtZSkpOwogICAgICAgICBpZiAoIURpckV4aXN0KQogICAg
ICAgICB7CisgICAgICAgICAgaWYgKCFDbWQtPkFic29sdXRlTGlua3MgJiYgQ29udmVydFN5bWxp
bmtQYXRocykKKyAgICAgICAgICAgIExpbmtzVG9EaXJzKERlc3RGaWxlTmFtZSxDbWQtPkV4dHJQ
YXRoLExhc3RDaGVja2VkU3ltbGluayk7CiAgICAgICAgICAgQ3JlYXRlUGF0aChEZXN0RmlsZU5h
bWUsdHJ1ZSxDbWQtPkRpc2FibGVOYW1lcyk7CiAgICAgICAgICAgTURDb2RlPU1ha2VEaXIoRGVz
dEZpbGVOYW1lLCFDbWQtPklnbm9yZUdlbmVyYWxBdHRyLEFyYy5GaWxlSGVhZC5GaWxlQXR0cik7
CiAgICAgICAgIH0KQEAgLTEyMTIsNiArMTQwOCw4IEBACiAKICAgICAgICAgICBNYWtlTmFtZVVz
YWJsZShEZXN0RmlsZU5hbWUsdHJ1ZSk7CiAKKyAgICAgICAgICBpZiAoIUNtZC0+QWJzb2x1dGVM
aW5rcyAmJiBDb252ZXJ0U3ltbGlua1BhdGhzKQorICAgICAgICAgICAgTGlua3NUb0RpcnMoRGVz
dEZpbGVOYW1lLENtZC0+RXh0clBhdGgsTGFzdENoZWNrZWRTeW1saW5rKTsKICAgICAgICAgICBD
cmVhdGVQYXRoKERlc3RGaWxlTmFtZSx0cnVlLENtZC0+RGlzYWJsZU5hbWVzKTsKICAgICAgICAg
ICBpZiAoRmlsZUNyZWF0ZShDbWQsJkN1ckZpbGUsRGVzdEZpbGVOYW1lLEFTSVpFKERlc3RGaWxl
TmFtZSksJlVzZXJSZWplY3QsQXJjLkZpbGVIZWFkLlVucFNpemUsJkFyYy5GaWxlSGVhZC5tdGlt
ZSx0cnVlKSkKICAgICAgICAgICB7CkBAIC0xMjU4LDMxICsxNDU2LDU5IEBACiAKIAogI2lmbmRl
ZiBTRlhfTU9EVUxFCi0vLyBUbyBzcGVlZCB1cCBzb2xpZCB2b2x1bWVzIGV4dHJhY3Rpb24sIHRy
eSB0byBmaW5kIGEgbm9uLWZpcnN0IHN0YXJ0IHZvbHVtZSwKLS8vIHdoaWNoIHN0aWxsIGFsbG93
cyB0byB1bnBhY2sgYWxsIGZpbGVzLiBJdCBpcyBwb3NzaWJsZSBmb3IgaW5kZXBlbmRlbnQKLS8v
IHNvbGlkIHZvbHVtZXMgd2l0aCBzb2xpZCBzdGF0aXN0aWNzIHJlc2V0IGluIHRoZSBiZWdpbm5p
bmcuCi1ib29sIENtZEV4dHJhY3Q6OkRldGVjdFN0YXJ0Vm9sdW1lKGNvbnN0IHdjaGFyICpWb2xO
YW1lLGJvb2wgTmV3TnVtYmVyaW5nKQorLy8gRmluZCBub24tbWF0Y2hlZCByZWZlcmVuY2Ugc291
cmNlcyBpbiBzb2xpZCBhbmQgbm9uLXNvbGlkIGFyY2hpdmVzLgorLy8gRGV0ZWN0IHRoZSBvcHRp
bWFsIHN0YXJ0IHBvc2l0aW9uIGZvciBzZW1pLXNvbGlkIGFyY2hpdmVzCisvLyBhbmQgb3B0aW1h
bCBzdGFydCB2b2x1bWUgZm9yIGluZGVwZW5kZW50IHNvbGlkIHZvbHVtZXMuCisvLyAKKy8vIEFs
dGVybmF0aXZlbHkgd2UgY291bGQgY29sbGVjdCByZWZlcmVuY2VzIHdoaWxlIGV4dHJhY3Rpbmcg
YW4gYXJjaGl2ZQorLy8gYW5kIHBlcmZvcm0gdGhlIHNlY29uZCBleHRyYWN0aW9uIHBhc3MgZm9y
IHJlZmVyZW5jZXMgb25seS4KKy8vIEJ1dCBpdCB3b3VsZCBiZSBzbG93ZXIgZm9yIHNvbGlkIGFy
Y2hpdmVzIHRoYW4gc2NhbmluZyBoZWFkZXJzCisvLyBpbiBmaXJzdCBwYXNzIGFuZCBleHRyYWN0
aW5nIGV2ZXJ5dGhpbmcgaW4gc2Vjb25kLCBhcyBpbXBsZW1lbnRlZCBub3cuCisvLyAKK3ZvaWQg
Q21kRXh0cmFjdDo6QW5hbHl6ZUFyY2hpdmUoY29uc3Qgd2NoYXIgKkFyY05hbWUsYm9vbCBWb2x1
bWUsYm9vbCBOZXdOdW1iZXJpbmcpCiB7CisgIEZyZWVBbmFseXplRGF0YSgpOyAvLyBJZiBwcm9j
ZXNzaW5nIG5vbi1maXJzdCBhcmNoaXZlIGluIG11bHRpcGxlIGFyY2hpdmVzIHNldC4KKwogICB3
Y2hhciAqQXJnTmFtZT1DbWQtPkZpbGVBcmdzLkdldFN0cmluZygpOwogICBDbWQtPkZpbGVBcmdz
LlJld2luZCgpOwogICBpZiAoQXJnTmFtZSE9TlVMTCAmJiAod2NzY21wKEFyZ05hbWUsTCIqIik9
PTAgfHwgd2NzY21wKEFyZ05hbWUsTCIqLioiKT09MCkpCi0gICAgcmV0dXJuIGZhbHNlOyAvLyBO
byBuZWVkIHRvIGNoZWNrIGZ1cnRoZXIgZm9yICogYW5kICouKiBtYXNrcy4KKyAgICByZXR1cm47
IC8vIE5vIG5lZWQgdG8gY2hlY2sgZnVydGhlciBmb3IgKiBhbmQgKi4qIG1hc2tzLgogCi0gIHdj
aGFyIFN0YXJ0TmFtZVtOTV07Ci0gICpTdGFydE5hbWU9MDsKLSAgCiAgIC8vIFN0YXJ0IHNlYXJj
aCBmcm9tIGZpcnN0IHZvbHVtZSBpZiBhbGwgdm9sdW1lcyBwcmVjZWRpbmcgY3VycmVudCBhcmUg
YXZhaWxhYmxlLgogICB3Y2hhciBOZXh0TmFtZVtOTV07Ci0gIEdldEZpcnN0Vm9sSWZGdWxsU2V0
KFZvbE5hbWUsTmV3TnVtYmVyaW5nLE5leHROYW1lLEFTSVpFKE5leHROYW1lKSk7CisgIGlmIChW
b2x1bWUpCisgICAgR2V0Rmlyc3RWb2xJZkZ1bGxTZXQoQXJjTmFtZSxOZXdOdW1iZXJpbmcsTmV4
dE5hbWUsQVNJWkUoTmV4dE5hbWUpKTsKKyAgZWxzZQorICAgIHdjc25jcHl6KE5leHROYW1lLEFy
Y05hbWUsQVNJWkUoTmV4dE5hbWUpKTsKKyAgCisgIGJvb2wgTWF0Y2hGb3VuZD1mYWxzZTsKKyAg
Ym9vbCBQcmV2TWF0Y2hlZD1mYWxzZTsKKyAgYm9vbCBPcGVuTmV4dD1mYWxzZTsKIAotICBib29s
IE1hdGNoZWQ9ZmFsc2U7Ci0gIHdoaWxlICghTWF0Y2hlZCkKKyAgYm9vbCBGaXJzdFZvbHVtZT10
cnVlOworICAKKyAgLy8gV2Ugc2hhbGwgc2V0IEZpcnN0RmlsZSBvbmNlIGZvciBhbGwgdm9sdW1l
cyBhbmQgbm90IGZvciBlYWNoIHZvbHVtZS4KKyAgLy8gU28gd2UgZG8gbm90IHJldXNlIHRoZSBv
dXRkYXRlZCBBbmFseXplLT5TdGFydFBvcyBmcm9tIHByZXZpb3VzIHZvbHVtZQorICAvLyBpZiBl
eHRyYWN0ZWQgZmlsZSByZXNpZGVzIGNvbXBsZXRlbHkgaW4gdGhlIGJlZ2lubmluZyBvZiBjdXJy
ZW50IG9uZS4KKyAgYm9vbCBGaXJzdEZpbGU9dHJ1ZTsKKworICB3aGlsZSAodHJ1ZSkKICAgewog
ICAgIEFyY2hpdmUgQXJjKENtZCk7Ci0gICAgaWYgKCFBcmMuT3BlbihOZXh0TmFtZSkgfHwgIUFy
Yy5Jc0FyY2hpdmUoZmFsc2UpIHx8ICFBcmMuVm9sdW1lKQorICAgIGlmICghQXJjLk9wZW4oTmV4
dE5hbWUpIHx8ICFBcmMuSXNBcmNoaXZlKGZhbHNlKSkKKyAgICB7CisgICAgICBpZiAoT3Blbk5l
eHQpCisgICAgICB7CisgICAgICAgIC8vIElmIHdlIGNvdWxkbid0IG9wZW4gdHJhaWxpbmcgdm9s
dW1lcywgd2UgY2FuJ3Qgc2V0IGVhcmx5IGV4aXQKKyAgICAgICAgLy8gcGFyYW1ldGVycy4gSXQg
aXMgcG9zc2libGUgdGhhdCBzb21lIHZvbHVtZSBhcmUgb24gcmVtb3ZhYmxlIG1lZGlhCisgICAg
ICAgIC8vIGFuZCB3aWxsIGJlIHByb3ZpZGVkIGJ5IHVzZXIgd2hlbiBleHRyYWN0aW5nLgorICAg
ICAgICAqQW5hbHl6ZS0+RW5kTmFtZT0wOworICAgICAgICBBbmFseXplLT5FbmRQb3M9MDsKKyAg
ICAgIH0KICAgICAgIGJyZWFrOworICAgIH0KIAotICAgIGJvb2wgT3Blbk5leHQ9ZmFsc2U7Cisg
ICAgT3Blbk5leHQ9ZmFsc2U7CiAgICAgd2hpbGUgKEFyYy5SZWFkSGVhZGVyKCk+MCkKICAgICB7
CiAgICAgICBXYWl0KCk7CkBAIC0xMjk1LDE3ICsxNTIxLDg4IEBACiAgICAgICB9CiAgICAgICBp
ZiAoSGVhZGVyVHlwZT09SEVBRF9GSUxFKQogICAgICAgeworICAgICAgICBpZiAoKEFyYy5Gb3Jt
YXQ9PVJBUkZNVDE0IHx8IEFyYy5Gb3JtYXQ9PVJBUkZNVDE1KSAmJiBBcmMuRmlsZUhlYWQuVW5w
VmVyPD0xNSkKKyAgICAgICAgeworICAgICAgICAgIC8vIFJBUiB2ZXJzaW9ucyBlYXJsaWVyIHRo
YW4gMi4wIGRvIG5vdCBzZXQgcGVyIGZpbGUgc29saWQgZmxhZy4KKyAgICAgICAgICAvLyBUaGV5
IGhhdmUgb25seSB0aGUgZ2xvYmFsIGFyY2hpdmUgc29saWQgZmxhZywgc28gd2UgY2FuJ3QKKyAg
ICAgICAgICAvLyByZWxpYWJseSBhbmFseXplIHRoZW0gaGVyZS4KKyAgICAgICAgICBPcGVuTmV4
dD1mYWxzZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICghQXJj
LkZpbGVIZWFkLlNwbGl0QmVmb3JlKQogICAgICAgICB7Ci0gICAgICAgICAgaWYgKCFBcmMuRmls
ZUhlYWQuU29saWQpIC8vIENhbiBzdGFydCBleHRyYWN0aW9uIGZyb20gaGVyZS4KLSAgICAgICAg
ICAgIHdjc25jcHl6KFN0YXJ0TmFtZSxOZXh0TmFtZSxBU0laRShTdGFydE5hbWUpKTsKKyAgICAg
ICAgICBpZiAoIU1hdGNoRm91bmQgJiYgIUFyYy5GaWxlSGVhZC5Tb2xpZCkgLy8gQ2FuIHN0YXJ0
IGV4dHJhY3Rpb24gZnJvbSBoZXJlLgorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIHdv
dWxkIGdhaW4gbm90aGluZyBhbmQgdW5uZWNlc3NhcmlseSBjb21wbGljYXRlIGV4dHJhY3Rpb24K
KyAgICAgICAgICAgIC8vIGlmIHdlIHNldCBTdGFydE5hbWUgZm9yIGZpcnN0IHZvbHVtZSBvciBT
dGFydFBvcyBmb3IgZmlyc3QKKyAgICAgICAgICAgIC8vIGFyY2hpdmVkIGZpbGUuCisgICAgICAg
ICAgICBpZiAoIUZpcnN0Vm9sdW1lKQorICAgICAgICAgICAgICB3Y3NuY3B5eihBbmFseXplLT5T
dGFydE5hbWUsTmV4dE5hbWUsQVNJWkUoQW5hbHl6ZS0+U3RhcnROYW1lKSk7CiAKKyAgICAgICAg
ICAgIC8vIFdlIHNoYWxsIHNldCBGaXJzdEZpbGUgb25jZSBmb3IgYWxsIHZvbHVtZXMgZm9yIHRo
aXMgY29kZQorICAgICAgICAgICAgLy8gdG8gd29yayBwcm9wZXJseS4gQWx0ZXJuYXRpdmVseSB3
ZSBjb3VsZCBhcHBlbmQgCisgICAgICAgICAgICAvLyAifHwgQW5hbHl6ZS0+U3RhcnRQb3MhPTAi
IHRvIHRoZSBjb25kaXRpb24sIHNvIHdlIGRvIG5vdCByZXVzZQorICAgICAgICAgICAgLy8gdGhl
IG91dGRhdGVkIEFuYWx5emUtPlN0YXJ0UG9zIHZhbHVlIGZyb20gcHJldmlvdXMgdm9sdW1lLgor
ICAgICAgICAgICAgaWYgKCFGaXJzdEZpbGUpCisgICAgICAgICAgICAgIEFuYWx5emUtPlN0YXJ0
UG9zPUFyYy5DdXJCbG9ja1BvczsKKyAgICAgICAgICB9CisKICAgICAgICAgICBpZiAoQ21kLT5J
c1Byb2Nlc3NGaWxlKEFyYy5GaWxlSGVhZCxOVUxMLE1BVENIX1dJTERTVUJQQVRILDAsTlVMTCww
KSE9MCkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBNYXRjaGVkPXRydWU7IC8vIEZpcnN0IG1h
dGNoZWQgZmlsZSBmb3VuZCwgbXVzdCBzdG9wIGZ1cnRoZXIgc2Nhbi4KLSAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgTWF0Y2hGb3VuZCA9IHRydWU7CisgICAgICAgICAgICBQcmV2TWF0
Y2hlZCA9IHRydWU7CisKKyAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBwcmV2aW91c2x5IHNldCBl
YXJseSBleGl0IHBvc2l0aW9uLCBpZiBhbnksIGJlY2F1c2UKKyAgICAgICAgICAgIC8vIHdlIGZv
dW5kIGEgbmV3IG1hdGNoZWQgZmlsZS4KKyAgICAgICAgICAgIEFuYWx5emUtPkVuZFBvcz0wOwor
CisgICAgICAgICAgICAvLyBNYXRjaGVkIGZpbGUgcmVmZXJlbmNlIHBvaW50aW5nIGF0IG1heWJl
IG5vbi1tYXRjaGVkIHNvdXJjZSBmaWxlLgorICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggd2Ug
a25vdyBSZWRpck5hbWUsIHdlIGNhbid0IGNoZWNrIGlmIHNvdXJjZSBmaWxlCisgICAgICAgICAg
ICAvLyBpcyBjZXJ0YWlubHkgbm9uLW1hdGNoZWQsIGJlY2F1c2UgaXQgY2FuIGJlIGZpbHRlcmVk
IG91dCBieQorICAgICAgICAgICAgLy8gZGF0ZSBvciBhdHRyaWJ1dGVzLCB3aGljaCB3ZSBkbyBu
b3Qga25vdyBoZXJlLgorICAgICAgICAgICAgaWYgKEFyYy5GaWxlSGVhZC5SZWRpclR5cGU9PUZT
UkVESVJfRklMRUNPUFkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJvb2wgQWxyZWFk
eUFkZGVkPWZhbHNlOworICAgICAgICAgICAgICBmb3IgKHNpemVfdCBJPTA7STxSZWZMaXN0LlNp
emUoKTtJKyspCisgICAgICAgICAgICAgICAgaWYgKHdjc2NtcChBcmMuRmlsZUhlYWQuUmVkaXJO
YW1lLFJlZkxpc3RbSV0uUmVmTmFtZSk9PTApCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgLy8gSW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgaWYgd2UgYWRkZWQgc3Vj
aCByZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgIC8vIHNvdXJjZSBlYXJsaWVyLgorICAgICAg
ICAgICAgICAgICAgUmVmTGlzdFtJXS5SZWZDb3VudCsrOworICAgICAgICAgICAgICAgICAgQWxy
ZWFkeUFkZGVkPXRydWU7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgLy8gTGltaXQgdGhlIG1heGltdW0gc2l6ZSBvZiByZWZlcmVu
Y2Ugc291cmNlcyBsaXN0IHRvIHNvbWUKKyAgICAgICAgICAgICAgLy8gc2Vuc2libGUgdmFsdWUg
dG8gcHJldmVudCB0aGUgZXhjZXNzaXZlIG1lbW9yeSBhbGxvY2F0aW9uLgorICAgICAgICAgICAg
ICBzaXplX3QgTWF4TGlzdFNpemU9MTAwMDAwMDsKKworICAgICAgICAgICAgICBpZiAoIUFscmVh
ZHlBZGRlZCAmJiBSZWZMaXN0LlNpemUoKTxNYXhMaXN0U2l6ZSkKKyAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEV4dHJhY3RSZWYgUmVmPXswfTsKKyAgICAgICAgICAgICAgICBSZWYu
UmVmTmFtZT13Y3NkdXAoQXJjLkZpbGVIZWFkLlJlZGlyTmFtZSk7CisgICAgICAgICAgICAgICAg
UmVmLlJlZkNvdW50PTE7CisgICAgICAgICAgICAgICAgUmVmTGlzdC5QdXNoKFJlZik7CisgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQor
ICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChQcmV2TWF0Y2hlZCkgLy8gRmlyc3Qgbm9uLW1h
dGNoZWQgaXRlbSBhZnRlciBtYXRjaGVkLgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAv
LyBXZSB3b3VsZCBwZXJmb3JtIHRoZSB1bm5lY2Vzc2FyaWx5IHN0cmluZyBjb21wYXJpc29uCisg
ICAgICAgICAgICAgIC8vIHdoZW4gZXh0cmFjdGluZyBpZiB3ZSBzZXQgdGhpcyB2YWx1ZSBmb3Ig
Zmlyc3Qgdm9sdW1lCisgICAgICAgICAgICAgIC8vIG9yIG5vbi12b2x1bWUgYXJjaGl2ZS4KKyAg
ICAgICAgICAgICAgaWYgKCFGaXJzdFZvbHVtZSkKKyAgICAgICAgICAgICAgICB3Y3NuY3B5eihB
bmFseXplLT5FbmROYW1lLE5leHROYW1lLEFTSVpFKEFuYWx5emUtPkVuZE5hbWUpKTsKKyAgICAg
ICAgICAgICAgQW5hbHl6ZS0+RW5kUG9zPUFyYy5DdXJCbG9ja1BvczsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIFByZXZNYXRjaGVkPWZhbHNlOworICAgICAgICAgIH0KICAgICAgICAgfQor
CisgICAgICAgIEZpcnN0RmlsZT1mYWxzZTsKICAgICAgICAgaWYgKEFyYy5GaWxlSGVhZC5TcGxp
dEFmdGVyKQogICAgICAgICB7CiAgICAgICAgICAgT3Blbk5leHQ9dHJ1ZTsgLy8gQWxsb3cgb3Bl
biBuZXh0IHZvbHVtZS4KQEAgLTEzMTYsMTYgKzE2MTMsMjUgQEAKICAgICB9CiAgICAgQXJjLkNs
b3NlKCk7CiAKLSAgICBpZiAoIU9wZW5OZXh0KQotICAgICAgYnJlYWs7CisgICAgaWYgKFZvbHVt
ZSAmJiBPcGVuTmV4dCkKKyAgICB7CisgICAgICBOZXh0Vm9sdW1lTmFtZShOZXh0TmFtZSxBU0la
RShOZXh0TmFtZSksIUFyYy5OZXdOdW1iZXJpbmcpOworICAgICAgRmlyc3RWb2x1bWU9ZmFsc2U7
CiAKLSAgICBOZXh0Vm9sdW1lTmFtZShOZXh0TmFtZSxBU0laRShOZXh0TmFtZSksIUFyYy5OZXdO
dW1iZXJpbmcpOworICAgICAgLy8gTmVlZGVkIGZvciBtdWx0aXZvbHVtZSBhcmNoaXZlcy4gQWRk
ZWQgaW4gY2FzZSBzb21lICdicmVhaycKKyAgICAgIC8vIHdpbGwgcXVpdCBlYXJseSBmcm9tIGxv
b3AgYWJvdmUsIHNvIHdlIGRvIG5vdCBzZXQgaXQgaW4gdGhlIGxvb3AuCisgICAgICAvLyBOb3cg
aXQgY2FuIGhhcHBlbiBmb3IgaHlwb3RoZXRpY2FsIGFyY2hpdmUgd2l0aG91dCBmaWxlIHJlY29y
ZHMKKyAgICAgIC8vIGFuZCB3aXRoIEhFQURfRU5EQVJDIHJlY29yZC4KKyAgICAgIEZpcnN0Rmls
ZT1mYWxzZTsKKyAgICB9CisgICAgZWxzZQorICAgICAgYnJlYWs7CiAgIH0KLSAgYm9vbCBOZXdT
dGFydEZvdW5kPXdjc2NtcChWb2xOYW1lLFN0YXJ0TmFtZSkhPTA7Ci0gIGlmIChOZXdTdGFydEZv
dW5kKSAvLyBGb3VuZCBhIG5ldyB2b2x1bWUgdG8gc3RhcnQgZXh0cmFjdGlvbi4KLSAgICB3Y3Nu
Y3B5eihBcmNOYW1lLFN0YXJ0TmFtZSxBU0laRShBcmNOYW1lKSk7Ci0gIAotICByZXR1cm4gTmV3
U3RhcnRGb3VuZDsKKworICAvLyBJZiBmaWxlIHJlZmVyZW5jZXMgYXJlIHByZXNlbnQsIHdlIGNh
bid0IHJlbGlhYmx5IHNraXAgaW4gc2VtaS1zb2xpZAorICAvLyBhcmNoaXZlcywgYmVjYXVzZSBy
ZWZlcmVuY2Ugc291cmNlIGNhbiBiZSBwcmVzZW50IGluIHNraXBwZWQgZGF0YS4KKyAgaWYgKFJl
Zkxpc3QuU2l6ZSgpIT0wKQorICAgIG1lbXNldChBbmFseXplLDAsc2l6ZW9mKCpBbmFseXplKSk7
CiB9CiAjZW5kaWYKIApkaWZmIC11ciB1bnJhci02LjEuNy9leHRyYWN0LmhwcCB1bnJhci02LjIu
Ny9leHRyYWN0LmhwcAotLS0gdW5yYXItNi4xLjcvZXh0cmFjdC5ocHAJMjAyMi0xMC0xOSAyMjow
NToxMgorKysgdW5yYXItNi4yLjcvZXh0cmFjdC5ocHAJMjAyMy0wNS0xNCAxMzoxMDozNApAQCAt
NiwxMyArNiwzMiBAQAogY2xhc3MgQ21kRXh0cmFjdAogewogICBwcml2YXRlOgorICAgIHN0cnVj
dCBFeHRyYWN0UmVmCisgICAgeworICAgICAgd2NoYXIgKlJlZk5hbWU7CisgICAgICB3Y2hhciAq
VG1wTmFtZTsKKyAgICAgIHVpbnQ2NCBSZWZDb3VudDsKKyAgICB9OworICAgIEFycmF5PEV4dHJh
Y3RSZWY+IFJlZkxpc3Q7CisKKyAgICBzdHJ1Y3QgQW5hbHl6ZURhdGEKKyAgICB7CisgICAgICB3
Y2hhciBTdGFydE5hbWVbTk1dOworICAgICAgdWludDY0IFN0YXJ0UG9zOworICAgICAgd2NoYXIg
RW5kTmFtZVtOTV07CisgICAgICB1aW50NjQgRW5kUG9zOworICAgIH0gKkFuYWx5emU7CisKKyAg
ICBib29sIEFyY0FuYWx5emVkOworCisgICAgdm9pZCBGcmVlQW5hbHl6ZURhdGEoKTsKICAgICBF
WFRSQUNUX0FSQ19DT0RFIEV4dHJhY3RBcmNoaXZlKCk7Ci0gICAgYm9vbCBFeHRyYWN0RmlsZUNv
cHkoRmlsZSAmTmV3LHdjaGFyICpBcmNOYW1lLHdjaGFyICpOYW1lTmV3LHdjaGFyICpOYW1lRXhp
c3Rpbmcsc2l6ZV90IE5hbWVFeGlzdGluZ1NpemUpOworICAgIGJvb2wgRXh0cmFjdEZpbGVDb3B5
KEZpbGUgJk5ldyx3Y2hhciAqQXJjTmFtZSxjb25zdCB3Y2hhciAqUmVkaXJOYW1lLHdjaGFyICpO
YW1lTmV3LHdjaGFyICpOYW1lRXhpc3Rpbmcsc2l6ZV90IE5hbWVFeGlzdGluZ1NpemUsaW50NjQg
VW5wU2l6ZSk7CiAgICAgdm9pZCBFeHRyUHJlcGFyZU5hbWUoQXJjaGl2ZSAmQXJjLGNvbnN0IHdj
aGFyICpBcmNGaWxlTmFtZSx3Y2hhciAqRGVzdE5hbWUsc2l6ZV90IERlc3RTaXplKTsKICNpZmRl
ZiBSQVJETEwKICAgICBib29sIEV4dHJEbGxHZXRQYXNzd29yZCgpOwogI2Vsc2UKLSAgICBib29s
IEV4dHJHZXRQYXNzd29yZChBcmNoaXZlICZBcmMsY29uc3Qgd2NoYXIgKkFyY0ZpbGVOYW1lKTsK
KyAgICBib29sIEV4dHJHZXRQYXNzd29yZChBcmNoaXZlICZBcmMsY29uc3Qgd2NoYXIgKkFyY0Zp
bGVOYW1lLFJhckNoZWNrUGFzc3dvcmQgKkNoZWNrUHdkKTsKICNlbmRpZgogI2lmIGRlZmluZWQo
X1dJTl9BTEwpICYmICFkZWZpbmVkKFNGWF9NT0RVTEUpCiAgICAgdm9pZCBDb252ZXJ0RG9zUGFz
c3dvcmQoQXJjaGl2ZSAmQXJjLFNlY1Bhc3N3b3JkICZEZXN0UHdkKTsKQEAgLTIxLDcgKzQwLDcg
QEAKICAgICBib29sIEV4dHJDcmVhdGVGaWxlKEFyY2hpdmUgJkFyYyxGaWxlICZDdXJGaWxlKTsK
ICAgICBib29sIENoZWNrVW5wVmVyKEFyY2hpdmUgJkFyYyxjb25zdCB3Y2hhciAqQXJjRmlsZU5h
bWUpOwogI2lmbmRlZiBTRlhfTU9EVUxFCi0gICAgYm9vbCBEZXRlY3RTdGFydFZvbHVtZShjb25z
dCB3Y2hhciAqVm9sTmFtZSxib29sIE5ld051bWJlcmluZyk7CisgICAgdm9pZCBBbmFseXplQXJj
aGl2ZShjb25zdCB3Y2hhciAqQXJjTmFtZSxib29sIFZvbHVtZSxib29sIE5ld051bWJlcmluZyk7
CiAgICAgdm9pZCBHZXRGaXJzdFZvbElmRnVsbFNldChjb25zdCB3Y2hhciAqU3JjTmFtZSxib29s
IE5ld051bWJlcmluZyx3Y2hhciAqRGVzdE5hbWUsc2l6ZV90IERlc3RTaXplKTsKICNlbmRpZgog
CkBAIC01Miw2ICs3MSwxNSBAQAogICAgIGJvb2wgUHJldlByb2Nlc3NlZDsgLy8gSWYgcHJldmlv
dXMgZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IGV4dHJhY3RlZCBvciB0ZXN0ZWQuCiAgICAgd2NoYXIg
RGVzdEZpbGVOYW1lW05NXTsKICAgICBib29sIFBhc3N3b3JkQ2FuY2VsbGVkOworCisgICAgLy8g
SW4gV2luZG93cyBpdCBpcyBzZXQgdG8gdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgc3ltbGluayB3aXRo
ICIuLiIKKyAgICAvLyBpbiB0YXJnZXQgd2FzIGV4dHJhY3RlZC4KKyAgICBib29sIENvbnZlcnRT
eW1saW5rUGF0aHM7CisKKyAgICAvLyBMYXN0IHBhdGggY2hlY2tlZCBmb3Igc3ltbGlua3MuIFdl
IHVzZSBpdCB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSwKKyAgICAvLyBzbyB3ZSBkbyBub3Qg
Y2hlY2sgcmVjZW50bHkgY2hlY2tlZCBmb2xkZXJzIGFnYWluLgorICAgIHN0ZDo6d3N0cmluZyBM
YXN0Q2hlY2tlZFN5bWxpbms7CisKICNpZiBkZWZpbmVkKF9XSU5fQUxMKSAmJiAhZGVmaW5lZChT
RlhfTU9EVUxFKSAmJiAhZGVmaW5lZChTSUxFTlQpCiAgICAgYm9vbCBGYXQzMixOb3RGYXQzMjsK
ICNlbmRpZgpkaWZmIC11ciB1bnJhci02LjEuNy9maWxjcmVhdC5jcHAgdW5yYXItNi4yLjcvZmls
Y3JlYXQuY3BwCi0tLSB1bnJhci02LjEuNy9maWxjcmVhdC5jcHAJMjAyMi0xMC0xOSAyMjowNTox
MgorKysgdW5yYXItNi4yLjcvZmlsY3JlYXQuY3BwCTIwMjMtMDUtMTQgMTM6MTA6MzQKQEAgLTMs
NyArMyw3IEBACiAvLyBJZiBOZXdGaWxlPT1OVUxMLCB3ZSBkZWxldGUgY3JlYXRlZCBmaWxlIGFm
dGVyIHVzZXIgY29uZmlybWF0aW9uLgogLy8gSXQgaXMgdXNlZnVsIGlmIHdlIG5lZWQgdG8gb3Zl
cndyaXRlIGFuIGV4aXN0aW5nIGZvbGRlciBvciBmaWxlLAogLy8gYnV0IG5lZWQgdXNlciBjb25m
aXJtYXRpb24gZm9yIHRoYXQuCi1ib29sIEZpbGVDcmVhdGUoUkFST3B0aW9ucyAqQ21kLEZpbGUg
Kk5ld0ZpbGUsd2NoYXIgKk5hbWUsc2l6ZV90IE1heE5hbWVTaXplLAorYm9vbCBGaWxlQ3JlYXRl
KENvbW1hbmREYXRhICpDbWQsRmlsZSAqTmV3RmlsZSx3Y2hhciAqTmFtZSxzaXplX3QgTWF4TmFt
ZVNpemUsCiAgICAgICAgICAgICAgICAgYm9vbCAqVXNlclJlamVjdCxpbnQ2NCBGaWxlU2l6ZSxS
YXJUaW1lICpGaWxlVGltZSxib29sIFdyaXRlT25seSkKIHsKICAgaWYgKFVzZXJSZWplY3QhPU5V
TEwpCmRpZmYgLXVyIHVucmFyLTYuMS43L2ZpbGNyZWF0LmhwcCB1bnJhci02LjIuNy9maWxjcmVh
dC5ocHAKLS0tIHVucmFyLTYuMS43L2ZpbGNyZWF0LmhwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisr
KyB1bnJhci02LjIuNy9maWxjcmVhdC5ocHAJMjAyMy0wNS0xNCAxMzoxMDozNApAQCAtMSw3ICsx
LDcgQEAKICNpZm5kZWYgX1JBUl9GSUxFQ1JFQVRFXwogI2RlZmluZSBfUkFSX0ZJTEVDUkVBVEVf
CiAKLWJvb2wgRmlsZUNyZWF0ZShSQVJPcHRpb25zICpDbWQsRmlsZSAqTmV3RmlsZSx3Y2hhciAq
TmFtZSxzaXplX3QgTWF4TmFtZVNpemUsCitib29sIEZpbGVDcmVhdGUoQ29tbWFuZERhdGEgKkNt
ZCxGaWxlICpOZXdGaWxlLHdjaGFyICpOYW1lLHNpemVfdCBNYXhOYW1lU2l6ZSwKICAgICAgICAg
ICAgICAgICBib29sICpVc2VyUmVqZWN0LGludDY0IEZpbGVTaXplPUlOVDY0TkRGLAogICAgICAg
ICAgICAgICAgIFJhclRpbWUgKkZpbGVUaW1lPU5VTEwsYm9vbCBXcml0ZU9ubHk9ZmFsc2UpOwog
CmRpZmYgLXVyIHVucmFyLTYuMS43L2ZpbGUuY3BwIHVucmFyLTYuMi43L2ZpbGUuY3BwCi0tLSB1
bnJhci02LjEuNy9maWxlLmNwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisrKyB1bnJhci02LjIuNy9m
aWxlLmNwcAkyMDIzLTA1LTE0IDEzOjEwOjM0CkBAIC01MjIsMjkgKzUyMiwzNSBAQAogewogICBp
ZiAoaEZpbGU9PUZJTEVfQkFEX0hBTkRMRSkKICAgICByZXR1cm4gdHJ1ZTsKLSAgaWYgKCFJc1Nl
ZWthYmxlKCkpCisgIGlmICghSXNTZWVrYWJsZSgpKSAvLyBUbyBleHRyYWN0IGFyY2hpdmVzIGZy
b20gc3RkaW4gd2l0aCAtc2kuCiAgIHsKLSAgICBpZiAoTWV0aG9kPT1TRUVLX0NVUikKKyAgICAv
LyBXZSB0cmllZCB0byBkeW5hbWljYWxseSBhbGxvY2F0ZSAzMiBLQiBidWZmZXIgaGVyZSwgYnV0
IGl0IGltcHJvdmVkCisgICAgLy8gc3BlZWQgaW4gV2luZG93cyAxMCBieSBtZXJlIH4xLjUlLgor
ICAgIGJ5dGUgQnVmWzQwOTZdOworICAgIGlmIChNZXRob2Q9PVNFRUtfQ1VSIHx8IE1ldGhvZD09
U0VFS19TRVQgJiYgT2Zmc2V0Pj1DdXJGaWxlUG9zKQogICAgIHsKLSAgICAgIE9mZnNldCs9Q3Vy
RmlsZVBvczsKLSAgICAgIE1ldGhvZD1TRUVLX1NFVDsKLSAgICB9Ci0gICAgaWYgKE1ldGhvZD09
U0VFS19TRVQgJiYgT2Zmc2V0Pj1DdXJGaWxlUG9zKSAvLyBSZWFkaW5nIGZvciBzZWVrIGZvcndh
cmQuCi0gICAgewotICAgICAgdWludDY0IFNraXBTaXplPU9mZnNldC1DdXJGaWxlUG9zOwotICAg
ICAgd2hpbGUgKFNraXBTaXplPjApCisgICAgICB1aW50NjQgU2tpcFNpemU9TWV0aG9kPT1TRUVL
X0NVUiA/IE9mZnNldDpPZmZzZXQtQ3VyRmlsZVBvczsKKyAgICAgIHdoaWxlIChTa2lwU2l6ZT4w
KSAvLyBSZWFkaW5nIHRvIGVtdWxhdGUgc2VlayBmb3J3YXJkLgogICAgICAgewotICAgICAgICBi
eXRlIEJ1Zls0MDk2XTsKICAgICAgICAgaW50IFJlYWRTaXplPVJlYWQoQnVmLChzaXplX3QpTWlu
KFNraXBTaXplLEFTSVpFKEJ1ZikpKTsKICAgICAgICAgaWYgKFJlYWRTaXplPD0wKQogICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgU2tpcFNpemUtPVJlYWRTaXplOworICAgICAgICBD
dXJGaWxlUG9zKz1SZWFkU2l6ZTsKICAgICAgIH0KLSAgICAgIEN1ckZpbGVQb3M9T2Zmc2V0Owog
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIC8vIE1heSBuZWVkIGl0IGluIEZpbGVMZW5n
dGgoKSBpbiBBcmNoaXZlOjpVbmV4cEVuZEFyY01zZygpIHdoZW4gdW5wYWNraW5nCisgICAgLy8g
UkFSIDQueCBhcmNoaXZlcyB3aXRob3V0IHRoZSBlbmQgb2YgYXJjaGl2ZSBibG9jayBjcmVhdGVk
IHdpdGggLWVuLgorICAgIGlmIChNZXRob2Q9PVNFRUtfRU5EKQorICAgIHsKKyAgICAgIGludCBS
ZWFkU2l6ZTsKKyAgICAgIHdoaWxlICgoUmVhZFNpemU9UmVhZChCdWYsQVNJWkUoQnVmKSkpPjAp
CisgICAgICAgIEN1ckZpbGVQb3MrPVJlYWRTaXplOworICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQogCi0gICAgcmV0dXJuIGZhbHNlOyAvLyBCYWNrd2FyZCBvciBlbmQgb2YgZmlsZSBzZWVrIG9u
IHVuc2Vla2FibGUgZmlsZS4KKyAgICByZXR1cm4gZmFsc2U7IC8vIEJhY2t3YXJkIHNlZWsgb24g
dW5zZWVrYWJsZSBmaWxlLgogICB9CiAgIGlmIChPZmZzZXQ8MCAmJiBNZXRob2QhPVNFRUtfU0VU
KQogICB7CkBAIC03MzIsMTcgKzczOCw0MCBAQAogfQogCiAKLXZvaWQgRmlsZTo6R2V0T3BlbkZp
bGVUaW1lKFJhclRpbWUgKmZ0KQorI2lmZGVmIF9VTklYCit2b2lkIEZpbGU6OlN0YXRUb1JhclRp
bWUoc3RydWN0IHN0YXQgJnN0LFJhclRpbWUgKmZ0bSxSYXJUaW1lICpmdGMsUmFyVGltZSAqZnRh
KQogewotI2lmZGVmIF9XSU5fQUxMCi0gIEZJTEVUSU1FIEZpbGVUaW1lOwotICBHZXRGaWxlVGlt
ZShoRmlsZSxOVUxMLE5VTEwsJkZpbGVUaW1lKTsKLSAgZnQtPlNldFdpbkZUKCZGaWxlVGltZSk7
CisjaWZkZWYgVU5JWF9USU1FX05TCisjaWYgZGVmaW5lZChfQVBQTEUpCisgIGlmIChmdG0hPU5V
TEwpIGZ0bS0+U2V0VW5peE5TKHN0LnN0X210aW1lc3BlYy50dl9zZWMqKHVpbnQ2NCkxMDAwMDAw
MDAwK3N0LnN0X210aW1lc3BlYy50dl9uc2VjKTsKKyAgaWYgKGZ0YyE9TlVMTCkgZnRjLT5TZXRV
bml4TlMoc3Quc3RfY3RpbWVzcGVjLnR2X3NlYyoodWludDY0KTEwMDAwMDAwMDArc3Quc3RfY3Rp
bWVzcGVjLnR2X25zZWMpOworICBpZiAoZnRhIT1OVUxMKSBmdGEtPlNldFVuaXhOUyhzdC5zdF9h
dGltZXNwZWMudHZfc2VjKih1aW50NjQpMTAwMDAwMDAwMCtzdC5zdF9hdGltZXNwZWMudHZfbnNl
Yyk7CisjZWxzZQorICBpZiAoZnRtIT1OVUxMKSBmdG0tPlNldFVuaXhOUyhzdC5zdF9tdGltLnR2
X3NlYyoodWludDY0KTEwMDAwMDAwMDArc3Quc3RfbXRpbS50dl9uc2VjKTsKKyAgaWYgKGZ0YyE9
TlVMTCkgZnRjLT5TZXRVbml4TlMoc3Quc3RfY3RpbS50dl9zZWMqKHVpbnQ2NCkxMDAwMDAwMDAw
K3N0LnN0X2N0aW0udHZfbnNlYyk7CisgIGlmIChmdGEhPU5VTEwpIGZ0YS0+U2V0VW5peE5TKHN0
LnN0X2F0aW0udHZfc2VjKih1aW50NjQpMTAwMDAwMDAwMCtzdC5zdF9hdGltLnR2X25zZWMpOwog
I2VuZGlmCi0jaWYgZGVmaW5lZChfVU5JWCkgfHwgZGVmaW5lZChfRU1YKQorI2Vsc2UKKyAgaWYg
KGZ0bSE9TlVMTCkgZnRtLT5TZXRVbml4KHN0LnN0X210aW1lKTsKKyAgaWYgKGZ0YyE9TlVMTCkg
ZnRjLT5TZXRVbml4KHN0LnN0X2N0aW1lKTsKKyAgaWYgKGZ0YSE9TlVMTCkgZnRhLT5TZXRVbml4
KHN0LnN0X2F0aW1lKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKwordm9pZCBGaWxlOjpHZXRPcGVu
RmlsZVRpbWUoUmFyVGltZSAqZnRtLFJhclRpbWUgKmZ0YyxSYXJUaW1lICpmdGEpCit7CisjaWZk
ZWYgX1dJTl9BTEwKKyAgRklMRVRJTUUgY3RpbWUsYXRpbWUsbXRpbWU7CisgIEdldEZpbGVUaW1l
KGhGaWxlLCZjdGltZSwmYXRpbWUsJm10aW1lKTsKKyAgaWYgKGZ0bSE9TlVMTCkgZnRtLT5TZXRX
aW5GVCgmbXRpbWUpOworICBpZiAoZnRjIT1OVUxMKSBmdGMtPlNldFdpbkZUKCZjdGltZSk7Cisg
IGlmIChmdGEhPU5VTEwpIGZ0YS0+U2V0V2luRlQoJmF0aW1lKTsKKyNlbGlmIGRlZmluZWQoX1VO
SVgpCiAgIHN0cnVjdCBzdGF0IHN0OwogICBmc3RhdChHZXRGRCgpLCZzdCk7Ci0gIGZ0LT5TZXRV
bml4KHN0LnN0X210aW1lKTsKKyAgU3RhdFRvUmFyVGltZShzdCxmdG0sZnRjLGZ0YSk7CiAjZW5k
aWYKIH0KIApkaWZmIC11ciB1bnJhci02LjEuNy9maWxlLmhwcCB1bnJhci02LjIuNy9maWxlLmhw
cAotLS0gdW5yYXItNi4xLjcvZmlsZS5ocHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysgdW5yYXIt
Ni4yLjcvZmlsZS5ocHAJMjAyMy0wNS0xNCAxMzoxMDozNApAQCAtMTQsOCArMTQsNiBAQAogICAj
ZGVmaW5lIEZJTEVfQkFEX0hBTkRMRSBOVUxMCiAjZW5kaWYKIAotY2xhc3MgUkFST3B0aW9uczsK
LQogZW51bSBGSUxFX0hBTkRMRVRZUEUge0ZJTEVfSEFORExFTk9STUFMLEZJTEVfSEFORExFU1RE
fTsKIAogZW51bSBGSUxFX0VSUk9SVFlQRSB7RklMRV9TVUNDRVNTLEZJTEVfTk9URk9VTkQsRklM
RV9SRUFERVJST1J9OwpAQCAtODgsNiArODYsOSBAQAogICAgIHdjaGFyIEZpbGVOYW1lW05NXTsK
IAogICAgIEZJTEVfRVJST1JUWVBFIEVycm9yVHlwZTsKKworICAgIGJ5dGUgKlNlZWtCdWY7IC8v
IFRvIHJlYWQgaW5zdGVhZCBvZiBzZWVrIGZvciBzdGRpbiBmaWxlcy4KKyAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IFNlZWtCdWZTaXplPTB4MTAwMDA7CiAgIHB1YmxpYzoKICAgICBGaWxlKCk7CiAg
ICAgdmlydHVhbCB+RmlsZSgpOwpAQCAtMTE4LDcgKzExOSwxMCBAQAogICAgIHZvaWQgU2V0T3Bl
bkZpbGVUaW1lKFJhclRpbWUgKmZ0bSxSYXJUaW1lICpmdGM9TlVMTCxSYXJUaW1lICpmdGE9TlVM
TCk7CiAgICAgdm9pZCBTZXRDbG9zZUZpbGVUaW1lKFJhclRpbWUgKmZ0bSxSYXJUaW1lICpmdGE9
TlVMTCk7CiAgICAgc3RhdGljIHZvaWQgU2V0Q2xvc2VGaWxlVGltZUJ5TmFtZShjb25zdCB3Y2hh
ciAqTmFtZSxSYXJUaW1lICpmdG0sUmFyVGltZSAqZnRhKTsKLSAgICB2b2lkIEdldE9wZW5GaWxl
VGltZShSYXJUaW1lICpmdCk7CisjaWZkZWYgX1VOSVgKKyAgICBzdGF0aWMgdm9pZCBTdGF0VG9S
YXJUaW1lKHN0cnVjdCBzdGF0ICZzdCxSYXJUaW1lICpmdG0sUmFyVGltZSAqZnRjLFJhclRpbWUg
KmZ0YSk7CisjZW5kaWYKKyAgICB2b2lkIEdldE9wZW5GaWxlVGltZShSYXJUaW1lICpmdG0sUmFy
VGltZSAqZnRjPU5VTEwsUmFyVGltZSAqZnRhPU5VTEwpOwogICAgIHZpcnR1YWwgYm9vbCBJc09w
ZW5lZCgpIHtyZXR1cm4gaEZpbGUhPUZJTEVfQkFEX0hBTkRMRTt9IC8vICd2aXJ0dWFsJyBmb3Ig
TXVsdGlGaWxlIGNsYXNzLgogICAgIGludDY0IEZpbGVMZW5ndGgoKTsKICAgICB2b2lkIFNldEhh
bmRsZVR5cGUoRklMRV9IQU5ETEVUWVBFIFR5cGUpIHtIYW5kbGVUeXBlPVR5cGU7fQpkaWZmIC11
ciB1bnJhci02LjEuNy9maWxlZm4uY3BwIHVucmFyLTYuMi43L2ZpbGVmbi5jcHAKLS0tIHVucmFy
LTYuMS43L2ZpbGVmbi5jcHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysgdW5yYXItNi4yLjcvZmls
ZWZuLmNwcAkyMDIzLTA1LTE0IDEzOjEwOjM0CkBAIC0zMjAsNyArMzIwLDYgQEAKIH0KIAogCi0j
aWYgMAogd2NoYXIgKk1rVGVtcCh3Y2hhciAqTmFtZSxzaXplX3QgTWF4U2l6ZSkKIHsKICAgc2l6
ZV90IExlbmd0aD13Y3NsZW4oTmFtZSk7CkBAIC0zNTQsNyArMzUzLDYgQEAKICAgfQogICByZXR1
cm4gTmFtZTsKIH0KLSNlbmRpZgogCiAKICNpZiAhZGVmaW5lZChTRlhfTU9EVUxFKQpAQCAtMzk5
LDcgKzM5Nyw3IEBACiAgICAgICBpZiAoKEZsYWdzICYgQ0FMQ0ZTVU1fU0hPV1BST0dSRVNTKSE9
MCkKICAgICAgIHsKICAgICAgICAgLy8gVXBkYXRlIG9ubHkgdGhlIGN1cnJlbnQgZmlsZSBwcm9n
cmVzcyBpbiBXaW5SQVIsIHNldCB0aGUgdG90YWwgdG8gMAotICAgICAgICAvLyB0byBrZWVwIGl0
IGFzIGlzLiBJdCBsb29rcyBiZXR0ZXIgZm9yIFdpblJBUiwKKyAgICAgICAgLy8gdG8ga2VlcCBp
dCBhcyBpcy4gSXQgbG9va3MgYmV0dGVyIGZvciBXaW5SQVIuCiAgICAgICAgIHVpRXh0cmFjdFBy
b2dyZXNzKFRvdGFsUmVhZCxGaWxlTGVuZ3RoLDAsMCk7CiAgICAgICB9CiAgICAgICBlbHNlCmRp
ZmYgLXVyIHVucmFyLTYuMS43L2ZpbGVmbi5ocHAgdW5yYXItNi4yLjcvZmlsZWZuLmhwcAotLS0g
dW5yYXItNi4xLjcvZmlsZWZuLmhwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisrKyB1bnJhci02LjIu
Ny9maWxlZm4uaHBwCTIwMjMtMDUtMTQgMTM6MTA6MzQKQEAgLTI3LDkgKzI3LDcgQEAKIHZvaWQg
UHJlcGFyZVRvRGVsZXRlKGNvbnN0IHdjaGFyICpOYW1lKTsKIHVpbnQgR2V0RmlsZUF0dHIoY29u
c3Qgd2NoYXIgKk5hbWUpOwogYm9vbCBTZXRGaWxlQXR0cihjb25zdCB3Y2hhciAqTmFtZSx1aW50
IEF0dHIpOwotI2lmIDAKIHdjaGFyKiBNa1RlbXAod2NoYXIgKk5hbWUsc2l6ZV90IE1heFNpemUp
OwotI2VuZGlmCiAKIGVudW0gQ0FMQ0ZTVU1fRkxBR1Mge0NBTENGU1VNX1NIT1dURVhUPTEsQ0FM
Q0ZTVU1fU0hPV1BFUkNFTlQ9MixDQUxDRlNVTV9TSE9XUFJPR1JFU1M9NCxDQUxDRlNVTV9DVVJQ
T1M9OH07CiAKZGlmZiAtdXIgdW5yYXItNi4xLjcvZmluZC5jcHAgdW5yYXItNi4yLjcvZmluZC5j
cHAKLS0tIHVucmFyLTYuMS43L2ZpbmQuY3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFy
LTYuMi43L2ZpbmQuY3BwCTIwMjMtMDUtMTQgMTM6MTA6MzQKQEAgLTExNyw3ICsxMTcsNyBAQAog
ICBpZiAoaEZpbmQ9PUlOVkFMSURfSEFORExFX1ZBTFVFKQogICAgIHJldHVybiBmYWxzZTsKICAg
RmluZENsb3NlKGhGaW5kKTsKLSNlbHNlCisjZWxpZiBkZWZpbmVkKF9VTklYKQogICBjaGFyIEZp
bmRNYXNrQVtOTV07CiAgIFdpZGVUb0NoYXIoRmluZE1hc2ssRmluZE1hc2tBLEFTSVpFKEZpbmRN
YXNrQSkpOwogCkBAIC0xNDMsMjEgKzE0Myw3IEBACiAgIGZkLT5GaWxlQXR0cj1zdC5zdF9tb2Rl
OwogICBmZC0+U2l6ZT1zdC5zdF9zaXplOwogCi0jaWZkZWYgVU5JWF9USU1FX05TCi0jaWYgZGVm
aW5lZChfQVBQTEUpCi0gIGZkLT5tdGltZS5TZXRVbml4TlMoc3Quc3RfbXRpbWVzcGVjLnR2X3Nl
YyoodWludDY0KTEwMDAwMDAwMDArc3Quc3RfbXRpbWVzcGVjLnR2X25zZWMpOwotICBmZC0+YXRp
bWUuU2V0VW5peE5TKHN0LnN0X2F0aW1lc3BlYy50dl9zZWMqKHVpbnQ2NCkxMDAwMDAwMDAwK3N0
LnN0X2F0aW1lc3BlYy50dl9uc2VjKTsKLSAgZmQtPmN0aW1lLlNldFVuaXhOUyhzdC5zdF9jdGlt
ZXNwZWMudHZfc2VjKih1aW50NjQpMTAwMDAwMDAwMCtzdC5zdF9jdGltZXNwZWMudHZfbnNlYyk7
Ci0jZWxzZQotICBmZC0+bXRpbWUuU2V0VW5peE5TKHN0LnN0X210aW0udHZfc2VjKih1aW50NjQp
MTAwMDAwMDAwMCtzdC5zdF9tdGltLnR2X25zZWMpOwotICBmZC0+YXRpbWUuU2V0VW5peE5TKHN0
LnN0X2F0aW0udHZfc2VjKih1aW50NjQpMTAwMDAwMDAwMCtzdC5zdF9hdGltLnR2X25zZWMpOwot
ICBmZC0+Y3RpbWUuU2V0VW5peE5TKHN0LnN0X2N0aW0udHZfc2VjKih1aW50NjQpMTAwMDAwMDAw
MCtzdC5zdF9jdGltLnR2X25zZWMpOwotI2VuZGlmCi0jZWxzZQotICBmZC0+bXRpbWUuU2V0VW5p
eChzdC5zdF9tdGltZSk7Ci0gIGZkLT5hdGltZS5TZXRVbml4KHN0LnN0X2F0aW1lKTsKLSAgZmQt
PmN0aW1lLlNldFVuaXgoc3Quc3RfY3RpbWUpOwotI2VuZGlmCisgIEZpbGU6OlN0YXRUb1JhclRp
bWUoc3QsJmZkLT5tdGltZSwmZmQtPmN0aW1lLCZmZC0+YXRpbWUpOwogCiAgIHdjc25jcHl6KGZk
LT5OYW1lLEZpbmRNYXNrLEFTSVpFKGZkLT5OYW1lKSk7CiAjZW5kaWYKZGlmZiAtdXIgdW5yYXIt
Ni4xLjcvZ2V0Yml0cy5jcHAgdW5yYXItNi4yLjcvZ2V0Yml0cy5jcHAKLS0tIHVucmFyLTYuMS43
L2dldGJpdHMuY3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L2dldGJpdHMu
Y3BwCTIwMjMtMDUtMTQgMTM6MTA6MzQKQEAgLTUsNyArNSw3IEBACiAgIEV4dGVybmFsQnVmZmVy
PWZhbHNlOwogICBpZiAoQWxsb2NCdWZmZXIpCiAgIHsKLSAgICAvLyBnZXRiaXRzMzIgYXR0ZW1w
dHMgdG8gcmVhZCBkYXRhIGZyb20gSW5BZGRyLCAuLi4gSW5BZGRyKzMgcG9zaXRpb25zLgorICAg
IC8vIGdldGJpdHMqKCkgYXR0ZW1wdCB0byByZWFkIGRhdGEgZnJvbSBJbkFkZHIsIC4uLiBJbkFk
ZHIrMyBwb3NpdGlvbnMuCiAgICAgLy8gU28gbGV0J3MgYWxsb2NhdGUgMyBhZGRpdGlvbmFsIGJ5
dGVzIGZvciBzaXR1YXRpb24sIHdoZW4gd2UgbmVlZCB0bwogICAgIC8vIHJlYWQgb25seSAxIGJ5
dGUgZnJvbSB0aGUgbGFzdCBwb3NpdGlvbiBvZiBidWZmZXIgYW5kIGF2b2lkIGEgY3Jhc2gKICAg
ICAvLyBmcm9tIGFjY2VzcyB0byBuZXh0IDMgYnl0ZXMsIHdoaWNoIGNvbnRlbnRzIHdlIGRvIG5v
dCBuZWVkLgpkaWZmIC11ciB1bnJhci02LjEuNy9nZXRiaXRzLmhwcCB1bnJhci02LjIuNy9nZXRi
aXRzLmhwcAotLS0gdW5yYXItNi4xLjcvZ2V0Yml0cy5ocHAJMjAyMi0xMC0xOSAyMjowNToxMgor
KysgdW5yYXItNi4yLjcvZ2V0Yml0cy5ocHAJMjAyMy0wNS0xNCAxMzoxMDozNApAQCAtMjgsMjYg
KzI4LDM4IEBACiAgICAgICBJbkFkZHIrPUJpdHM+PjM7CiAgICAgICBJbkJpdD1CaXRzJjc7CiAg
ICAgfQotICAgIAorCiAgICAgLy8gUmV0dXJuIDE2IGJpdHMgZnJvbSBjdXJyZW50IHBvc2l0aW9u
IGluIHRoZSBidWZmZXIuCiAgICAgLy8gQml0IGF0IChJbkFkZHIsSW5CaXQpIGhhcyB0aGUgaGln
aGVzdCBwb3NpdGlvbiBpbiByZXR1cm5pbmcgZGF0YS4KICAgICB1aW50IGdldGJpdHMoKQogICAg
IHsKKyNpZiBkZWZpbmVkKExJVFRMRV9FTkRJQU4pICYmIGRlZmluZWQoQUxMT1dfTUlTQUxJR05F
RCkKKyAgICAgIHVpbnQzMiBCaXRGaWVsZD0qKHVpbnQzMiopKEluQnVmK0luQWRkcik7CisgICAg
ICBCaXRGaWVsZD1CeXRlU3dhcDMyKEJpdEZpZWxkKTsKKyAgICAgIEJpdEZpZWxkID4+PSAoMTYt
SW5CaXQpOworI2Vsc2UKICAgICAgIHVpbnQgQml0RmllbGQ9KHVpbnQpSW5CdWZbSW5BZGRyXSA8
PCAxNjsKICAgICAgIEJpdEZpZWxkfD0odWludClJbkJ1ZltJbkFkZHIrMV0gPDwgODsKICAgICAg
IEJpdEZpZWxkfD0odWludClJbkJ1ZltJbkFkZHIrMl07CiAgICAgICBCaXRGaWVsZCA+Pj0gKDgt
SW5CaXQpOworI2VuZGlmCiAgICAgICByZXR1cm4gQml0RmllbGQgJiAweGZmZmY7CiAgICAgfQog
CisKICAgICAvLyBSZXR1cm4gMzIgYml0cyBmcm9tIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGJ1
ZmZlci4KICAgICAvLyBCaXQgYXQgKEluQWRkcixJbkJpdCkgaGFzIHRoZSBoaWdoZXN0IHBvc2l0
aW9uIGluIHJldHVybmluZyBkYXRhLgogICAgIHVpbnQgZ2V0Yml0czMyKCkKICAgICB7CisjaWYg
ZGVmaW5lZChMSVRUTEVfRU5ESUFOKSAmJiBkZWZpbmVkKEFMTE9XX01JU0FMSUdORUQpCisgICAg
ICB1aW50MzIgQml0RmllbGQ9Kih1aW50MzIqKShJbkJ1ZitJbkFkZHIpOworICAgICAgQml0Rmll
bGQ9Qnl0ZVN3YXAzMihCaXRGaWVsZCk7CisjZWxzZQogICAgICAgdWludCBCaXRGaWVsZD0odWlu
dClJbkJ1ZltJbkFkZHJdIDw8IDI0OwogICAgICAgQml0RmllbGR8PSh1aW50KUluQnVmW0luQWRk
cisxXSA8PCAxNjsKICAgICAgIEJpdEZpZWxkfD0odWludClJbkJ1ZltJbkFkZHIrMl0gPDwgODsK
ICAgICAgIEJpdEZpZWxkfD0odWludClJbkJ1ZltJbkFkZHIrM107CisjZW5kaWYKICAgICAgIEJp
dEZpZWxkIDw8PSBJbkJpdDsKICAgICAgIEJpdEZpZWxkfD0odWludClJbkJ1ZltJbkFkZHIrNF0g
Pj4gKDgtSW5CaXQpOwogICAgICAgcmV0dXJuIEJpdEZpZWxkICYgMHhmZmZmZmZmZjsKZGlmZiAt
dXIgdW5yYXItNi4xLjcvaGFyZGxpbmtzLmNwcCB1bnJhci02LjIuNy9oYXJkbGlua3MuY3BwCi0t
LSB1bnJhci02LjEuNy9oYXJkbGlua3MuY3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFy
LTYuMi43L2hhcmRsaW5rcy5jcHAJMjAyMy0wNS0xNCAxMzoxMDozNApAQCAtMSw3ICsxLDUgQEAK
IGJvb2wgRXh0cmFjdEhhcmRsaW5rKENvbW1hbmREYXRhICpDbWQsd2NoYXIgKk5hbWVOZXcsd2No
YXIgKk5hbWVFeGlzdGluZyxzaXplX3QgTmFtZUV4aXN0aW5nU2l6ZSkKIHsKLSAgU2xhc2hUb05h
dGl2ZShOYW1lRXhpc3RpbmcsTmFtZUV4aXN0aW5nLE5hbWVFeGlzdGluZ1NpemUpOyAvLyBOb3Qg
bmVlZGVkIGZvciBSQVIgNS4xKyBhcmNoaXZlcy4KLQogICBpZiAoIUZpbGVFeGlzdChOYW1lRXhp
c3RpbmcpKQogICB7CiAgICAgdWlNc2coVUlFUlJPUl9ITElOS0NSRUFURSxOYW1lTmV3KTsKZGlm
ZiAtdXIgdW5yYXItNi4xLjcvaGFzaC5jcHAgdW5yYXItNi4yLjcvaGFzaC5jcHAKLS0tIHVucmFy
LTYuMS43L2hhc2guY3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L2hhc2gu
Y3BwCTIwMjMtMDUtMTQgMTM6MTA6MzQKQEAgLTI2LDcgKzI2LDcgQEAKIH0KIAogCi1ib29sIEhh
c2hWYWx1ZTo6b3BlcmF0b3IgPT0gKGNvbnN0IEhhc2hWYWx1ZSAmY21wKQorYm9vbCBIYXNoVmFs
dWU6Om9wZXJhdG9yID09IChjb25zdCBIYXNoVmFsdWUgJmNtcCkgY29uc3QKIHsKICAgaWYgKFR5
cGU9PUhBU0hfTk9ORSB8fCBjbXAuVHlwZT09SEFTSF9OT05FKQogICAgIHJldHVybiB0cnVlOwpk
aWZmIC11ciB1bnJhci02LjEuNy9oYXNoLmhwcCB1bnJhci02LjIuNy9oYXNoLmhwcAotLS0gdW5y
YXItNi4xLjcvaGFzaC5ocHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysgdW5yYXItNi4yLjcvaGFz
aC5ocHAJMjAyMy0wNS0xNCAxMzoxMDozNApAQCAtNiw4ICs2LDE0IEBACiBzdHJ1Y3QgSGFzaFZh
bHVlCiB7CiAgIHZvaWQgSW5pdChIQVNIX1RZUEUgVHlwZSk7Ci0gIGJvb2wgb3BlcmF0b3IgPT0g
KGNvbnN0IEhhc2hWYWx1ZSAmY21wKTsKLSAgYm9vbCBvcGVyYXRvciAhPSAoY29uc3QgSGFzaFZh
bHVlICZjbXApIHtyZXR1cm4gISgqdGhpcz09Y21wKTt9CisKKyAgLy8gVXNlIHRoZSBjb25zdCBt
ZW1iZXIsIHNvIHR5cGVzIG9uIGJvdGggc2lkZXMgb2YgIj09IiBtYXRjaC4KKyAgLy8gT3RoZXJ3
aXNlIGNsYW5nIC1zdGQ9YysrMjAgaXNzdWVzICJhbWJpZ3VpdHkgaXMgYmV0d2VlbiBhIHJlZ3Vs
YXIgY2FsbAorICAvLyB0byB0aGlzIG9wZXJhdG9yIGFuZCBhIGNhbGwgd2l0aCB0aGUgYXJndW1l
bnQgb3JkZXIgcmV2ZXJzZWQiIHdhcm5pbmcuCisgIGJvb2wgb3BlcmF0b3IgPT0gKGNvbnN0IEhh
c2hWYWx1ZSAmY21wKSBjb25zdDsKKworICAvLyBOb3QgYWN0dWFsbHkgdXNlZCBub3cuIENvbnN0
IG1lbWJlciBmb3Igc2FtZSByZWFzb24gYXMgb3BlcmF0b3IgPT0gYWJvdmUuCisgIGJvb2wgb3Bl
cmF0b3IgIT0gKGNvbnN0IEhhc2hWYWx1ZSAmY21wKSBjb25zdCB7cmV0dXJuICEoKnRoaXM9PWNt
cCk7fQogCiAgIEhBU0hfVFlQRSBUeXBlOwogICB1bmlvbgpkaWZmIC11ciB1bnJhci02LjEuNy9o
ZWFkZXJzLmNwcCB1bnJhci02LjIuNy9oZWFkZXJzLmNwcAotLS0gdW5yYXItNi4xLjcvaGVhZGVy
cy5jcHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysgdW5yYXItNi4yLjcvaGVhZGVycy5jcHAJMjAy
My0wNS0xNCAxMzoxMDozNApAQCAtNDksMTMgKzQ5LDUgQEAKIAogdm9pZCBNYWluSGVhZGVyOjpS
ZXNldCgpCiB7Ci0gIEhpZ2hQb3NBVj0wOwotICBQb3NBVj0wOwotICBDb21tZW50SW5IZWFkZXI9
ZmFsc2U7Ci0gIFBhY2tDb21tZW50PWZhbHNlOwotICBMb2NhdG9yPWZhbHNlOwotICBRT3Blbk9m
ZnNldD0wOwotICBRT3Blbk1heFNpemU9MDsKLSAgUlJPZmZzZXQ9MDsKLSAgUlJNYXhTaXplPTA7
CisgICp0aGlzPXt9OwogfQpkaWZmIC11ciB1bnJhci02LjEuNy9oZWFkZXJzLmhwcCB1bnJhci02
LjIuNy9oZWFkZXJzLmhwcAotLS0gdW5yYXItNi4xLjcvaGVhZGVycy5ocHAJMjAyMi0xMC0xOSAy
MjowNToxMgorKysgdW5yYXItNi4yLjcvaGVhZGVycy5ocHAJMjAyMy0wNS0xNCAxMzoxMDozNApA
QCAtNiw3ICs2LDcgQEAKICNkZWZpbmUgIFNJWkVPRl9NQUlOSEVBRDMgICAgICAgMTMgLy8gU2l6
ZSBvZiBSQVIgNC54IG1haW4gYXJjaGl2ZSBoZWFkZXIuCiAjZGVmaW5lICBTSVpFT0ZfRklMRUhF
QUQxNCAgICAgIDIxIC8vIFNpemUgb2YgUkFSIDEuNCBmaWxlIGhlYWRlci4KICNkZWZpbmUgIFNJ
WkVPRl9GSUxFSEVBRDMgICAgICAgMzIgLy8gU2l6ZSBvZiBSQVIgMy4wIGZpbGUgaGVhZGVyLgot
I2RlZmluZSAgU0laRU9GX1NIT1JUQkxPQ0tIRUFEICAgNworI2RlZmluZSAgU0laRU9GX1NIT1JU
QkxPQ0tIRUFEICAgNyAvLyBTbWFsbGVzdCBSQVIgNC54IGJsb2NrIHNpemUuCiAjZGVmaW5lICBT
SVpFT0ZfTE9OR0JMT0NLSEVBRCAgIDExCiAjZGVmaW5lICBTSVpFT0ZfU1VCQkxPQ0tIRUFEICAg
IDE0CiAjZGVmaW5lICBTSVpFT0ZfQ09NTUhFQUQgICAgICAgIDEzCkBAIC0xNjIsMTIgKzE2Miwx
NiBAQAogICB1c2hvcnQgSGlnaFBvc0FWOwogICB1aW50IFBvc0FWOwogICBib29sIENvbW1lbnRJ
bkhlYWRlcjsKLSAgYm9vbCBQYWNrQ29tbWVudDsgLy8gRm9yIFJBUiAxLjQgYXJjaGl2ZSBmb3Jt
YXQgb25seS4KKyAgYm9vbCBQYWNrQ29tbWVudDsgICAgIC8vIEZvciBSQVIgMS40IGFyY2hpdmUg
Zm9ybWF0IG9ubHkuCiAgIGJvb2wgTG9jYXRvcjsKLSAgdWludDY0IFFPcGVuT2Zmc2V0OyAgLy8g
T2Zmc2V0IG9mIHF1aWNrIGxpc3QgcmVjb3JkLgotICB1aW50NjQgUU9wZW5NYXhTaXplOyAvLyBN
YXhpbXVtIHNpemUgb2YgUU9wZW4gb2Zmc2V0IGluIGxvY2F0b3IgZXh0cmEgZmllbGQuCi0gIHVp
bnQ2NCBSUk9mZnNldDsgICAgIC8vIE9mZnNldCBvZiByZWNvdmVyeSByZWNvcmQuCi0gIHVpbnQ2
NCBSUk1heFNpemU7ICAgIC8vIE1heGltdW0gc2l6ZSBvZiBSUiBvZmZzZXQgaW4gbG9jYXRvciBl
eHRyYSBmaWVsZC4KKyAgdWludDY0IFFPcGVuT2Zmc2V0OyAgIC8vIE9mZnNldCBvZiBxdWljayBs
aXN0IHJlY29yZC4KKyAgdWludDY0IFFPcGVuTWF4U2l6ZTsgIC8vIE1heGltdW0gc2l6ZSBvZiBR
T3BlbiBvZmZzZXQgaW4gbG9jYXRvciBleHRyYSBmaWVsZC4KKyAgdWludDY0IFJST2Zmc2V0OyAg
ICAgIC8vIE9mZnNldCBvZiByZWNvdmVyeSByZWNvcmQuCisgIHVpbnQ2NCBSUk1heFNpemU7ICAg
ICAvLyBNYXhpbXVtIHNpemUgb2YgUlIgb2Zmc2V0IGluIGxvY2F0b3IgZXh0cmEgZmllbGQuCisg
IHNpemVfdCBNZXRhTmFtZU1heFNpemU7IC8vIE1heGltdW0gc2l6ZSBvZiBhcmNoaXZlIG5hbWUg
aW4gbWV0YWRhdGEgZXh0cmEgZmllbGQuCisgIHN0ZDo6d3N0cmluZyBPcmlnTmFtZTsgIC8vIE9y
aWdpbmFsIGFyY2hpdmUgbmFtZS4KKyAgUmFyVGltZSBPcmlnVGltZTsgICAgICAgLy8gT3JpZ2lu
YWwgYXJjaGl2ZSB0aW1lLgorCiAgIHZvaWQgUmVzZXQoKTsKIH07CiAKQEAgLTIzMCw3ICsyMzQs
NyBAQAogICBib29sIExhcmdlRmlsZTsKICAgCiAgIC8vICd0cnVlJyBmb3IgSEVBRF9TRVJWSUNF
IGJsb2NrLCB3aGljaCBpcyBhIGNoaWxkIG9mIHByZWNlZGluZyBmaWxlIGJsb2NrLgotICAvLyBS
QVIgNC54IHVzZXMgJ3NvbGlkJyBmbGFnIHRvIGluZGljYXRlIGNoaWxkIHN1YmhlYWRlciBibG9j
a3MgaW4gYXJjaGl2ZXMuCisgIC8vIFJBUiA0LnggdXNlcyAnc29saWQnIGZsYWcgdG8gaW5kaWNh
dGUgY2hpbGRyZW4gc3ViaGVhZGVyIGJsb2NrcyBpbiBhcmNoaXZlcy4KICAgYm9vbCBTdWJCbG9j
azsKIAogICBIT1NUX1NZU1RFTV9UWVBFIEhTVHlwZTsKZGlmZiAtdXIgdW5yYXItNi4xLjcvaGVh
ZGVyczUuaHBwIHVucmFyLTYuMi43L2hlYWRlcnM1LmhwcAotLS0gdW5yYXItNi4xLjcvaGVhZGVy
czUuaHBwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L2hlYWRlcnM1LmhwcAky
MDIzLTA1LTE0IDEzOjEwOjM0CkBAIC01OSwxMCArNTksMTcgQEAKIAogLy8gTWFpbiBoZWFkZXIg
ZXh0cmEgZmllbGQgdmFsdWVzLgogI2RlZmluZSBNSEVYVFJBX0xPQ0FUT1IgICAgICAgMHgwMSAv
LyBQb3NpdGlvbiBvZiBxdWljayBsaXN0IGFuZCBvdGhlciBibG9ja3MuCisjZGVmaW5lIE1IRVhU
UkFfTUVUQURBVEEgICAgICAweDAyIC8vIEFyY2hpdmUgbWV0YWRhdGEuCiAKIC8vIEZsYWdzIGZv
ciBNSEVYVFJBX0xPQ0FUT1IuCiAjZGVmaW5lIE1IRVhUUkFfTE9DQVRPUl9RTElTVCAweDAxIC8v
IFF1aWNrIG9wZW4gb2Zmc2V0IGlzIHByZXNlbnQuCiAjZGVmaW5lIE1IRVhUUkFfTE9DQVRPUl9S
UiAgICAweDAyIC8vIFJlY292ZXJ5IHJlY29yZCBvZmZzZXQgaXMgcHJlc2VudC4KKworLy8gRmxh
Z3MgZm9yIE1IRVhUUkFfTUVUQURBVEEuCisjZGVmaW5lIE1IRVhUUkFfTUVUQURBVEFfTkFNRSAg
ICAgIDB4MDEgLy8gQXJjaGl2ZSBuYW1lIGlzIHByZXNlbnQuCisjZGVmaW5lIE1IRVhUUkFfTUVU
QURBVEFfQ1RJTUUgICAgIDB4MDIgLy8gQXJjaGl2ZSBjcmVhdGlvbiB0aW1lIGlzIHByZXNlbnQu
CisjZGVmaW5lIE1IRVhUUkFfTUVUQURBVEFfVU5JWFRJTUUgIDB4MDQgLy8gVXNlIFVuaXggbmFu
b3NlY29uZCB0aW1lIGZvcm1hdC4KKyNkZWZpbmUgTUhFWFRSQV9NRVRBREFUQV9VTklYX05TICAg
MHgwOCAvLyBVbml4IGZvcm1hdCB3aXRoIG5hbm9zZWNvbmQgcHJlY2lzaW9uLgogCiAvLyBGaWxl
IGFuZCBzZXJ2aWNlIGhlYWRlciBleHRyYSBmaWVsZCB2YWx1ZXMuCiAjZGVmaW5lIEZIRVhUUkFf
Q1JZUFQgICAgICAgICAweDAxIC8vIEVuY3J5cHRpb24gcGFyYW1ldGVycy4KZGlmZiAtdXIgdW5y
YXItNi4xLjcvaXNudC5jcHAgdW5yYXItNi4yLjcvaXNudC5jcHAKLS0tIHVucmFyLTYuMS43L2lz
bnQuY3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L2lzbnQuY3BwCTIwMjMt
MDUtMTQgMTM6MTA6MzQKQEAgLTQwLDcgKzQwLDcgQEAKIAogICBJV2JlbVNlcnZpY2VzICpwU3Zj
ID0gTlVMTDsKICAKLSAgaHJlcyA9IHBMb2MtPkNvbm5lY3RTZXJ2ZXIoX2JzdHJfdChMIlJPT1Rc
XENJTVYyIiksTlVMTCxOVUxMLDAsTlVMTCwwLDAsJnBTdmMpOworICBocmVzID0gcExvYy0+Q29u
bmVjdFNlcnZlcihfYnN0cl90KEwiUk9PVFxcQ0lNVjIiKSxOVUxMLE5VTEwsTlVMTCxOVUxMLDAs
MCwmcFN2Yyk7CiAgICAgCiAgIGlmIChGQUlMRUQoaHJlcykpCiAgIHsKZGlmZiAtdXIgdW5yYXIt
Ni4xLjcvbGlzdC5jcHAgdW5yYXItNi4yLjcvbGlzdC5jcHAKLS0tIHVucmFyLTYuMS43L2xpc3Qu
Y3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L2xpc3QuY3BwCTIwMjMtMDUt
MTQgMTM6MTA6MzQKQEAgLTM2LDYgKzM2LDcgQEAKICAgICAgICAgewogICAgICAgICAgIEFyYy5W
aWV3Q29tbWVudCgpOwogICAgICAgICAgIG1wcmludGYoTCJcbiVzOiAlcyIsU3QoTUxpc3RBcmNo
aXZlKSxBcmMuRmlsZU5hbWUpOworCiAgICAgICAgICAgbXByaW50ZihMIlxuJXM6ICIsU3QoTUxp
c3REZXRhaWxzKSk7CiAgICAgICAgICAgdWludCBTZXRDb3VudD0wOwogICAgICAgICAgIGNvbnN0
IHdjaGFyICpGbXQ9QXJjLkZvcm1hdD09UkFSRk1UMTQgPyBMIlJBUiAxLjQiOihBcmMuRm9ybWF0
PT1SQVJGTVQxNSA/IEwiUkFSIDQiOkwiUkFSIDUiKTsKQEAgLTYxLDYgKzYyLDE2IEBACiAgICAg
ICAgICAgICBtcHJpbnRmKEwiJXMlcyIsIFNldENvdW50KysgPiAwID8gTCIsICI6TCIiLCBTdChN
TGlzdExvY2spKTsKICAgICAgICAgICBpZiAoQXJjLkVuY3J5cHRlZCkKICAgICAgICAgICAgIG1w
cmludGYoTCIlcyVzIiwgU2V0Q291bnQrKyA+IDAgPyBMIiwgIjpMIiIsIFN0KE1MaXN0RW5jSGVh
ZCkpOworCisgICAgICAgICAgaWYgKCFBcmMuTWFpbkhlYWQuT3JpZ05hbWUuZW1wdHkoKSkKKyAg
ICAgICAgICAgIG1wcmludGYoTCJcbiVzOiAlcyIsU3QoTU9yaWdOYW1lKSxBcmMuTWFpbkhlYWQu
T3JpZ05hbWUuY19zdHIoKSk7CisgICAgICAgICAgaWYgKEFyYy5NYWluSGVhZC5PcmlnVGltZS5J
c1NldCgpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHdjaGFyIERhdGVTdHJbNTBdOworICAg
ICAgICAgICAgQXJjLk1haW5IZWFkLk9yaWdUaW1lLkdldFRleHQoRGF0ZVN0cixBU0laRShEYXRl
U3RyKSxUZWNobmljYWwpOworICAgICAgICAgICAgbXByaW50ZihMIlxuJXM6ICVzIixTdChNT3Jp
Z2luYWxUaW1lKSxEYXRlU3RyKTsKKyAgICAgICAgICB9CisKICAgICAgICAgICBtcHJpbnRmKEwi
XG4iKTsKICAgICAgICAgfQogCmRpZmYgLXVyIHVucmFyLTYuMS43L2xvY2xhbmcuaHBwIHVucmFy
LTYuMi43L2xvY2xhbmcuaHBwCi0tLSB1bnJhci02LjEuNy9sb2NsYW5nLmhwcAkyMDIyLTEwLTE5
IDIyOjA1OjEyCisrKyB1bnJhci02LjIuNy9sb2NsYW5nLmhwcAkyMDIzLTA1LTE0IDEzOjEwOjM0
CkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lICAgTVJBUlRpdGxlMSAgICAgICAgIEwiXG5Vc2Fn
ZTogICAgIHJhciA8Y29tbWFuZD4gLTxzd2l0Y2ggMT4gLTxzd2l0Y2ggTj4gPGFyY2hpdmU+IDxm
aWxlcy4uLj4iCiAjZGVmaW5lICAgTVVOUkFSVGl0bGUxICAgICAgIEwiXG5Vc2FnZTogICAgIHVu
cmFyIDxjb21tYW5kPiAtPHN3aXRjaCAxPiAtPHN3aXRjaCBOPiA8YXJjaGl2ZT4gPGZpbGVzLi4u
PiIKICNkZWZpbmUgICBNUkFSVGl0bGUyICAgICAgICAgTCJcbiAgICAgICAgICAgICAgIDxAbGlz
dGZpbGVzLi4uPiA8cGF0aF90b19leHRyYWN0XFw+IgorI2RlZmluZSAgIE1Gd3JTbFRpdGxlMiAg
ICAgICBMIlxuICAgICAgICAgICAgICAgPEBsaXN0ZmlsZXMuLi4+IDxwYXRoX3RvX2V4dHJhY3Qv
PiIKICNkZWZpbmUgICBNQ0hlbHBDbWQgICAgICAgICAgTCJcblxuPENvbW1hbmRzPiIKICNkZWZp
bmUgICBNQ0hlbHBDbWRBICAgICAgICAgTCJcbiAgYSAgICAgICAgICAgICBBZGQgZmlsZXMgdG8g
YXJjaGl2ZSIKICNkZWZpbmUgICBNQ0hlbHBDbWRDICAgICAgICAgTCJcbiAgYyAgICAgICAgICAg
ICBBZGQgYXJjaGl2ZSBjb21tZW50IgpAQCAtNTgsNiArNTksNyBAQAogI2RlZmluZSAgIE1DSGVs
cFN3QUQgICAgICAgICBMIlxuICBhZFsxLDJdICAgICAgIEFsdGVybmF0ZSBkZXN0aW5hdGlvbiBw
YXRoIgogI2RlZmluZSAgIE1DSGVscFN3QUcgICAgICAgICBMIlxuICBhZ1tmb3JtYXRdICAgIEdl
bmVyYXRlIGFyY2hpdmUgbmFtZSB1c2luZyB0aGUgY3VycmVudCBkYXRlIgogI2RlZmluZSAgIE1D
SGVscFN3QUkgICAgICAgICBMIlxuICBhaSAgICAgICAgICAgIElnbm9yZSBmaWxlIGF0dHJpYnV0
ZXMiCisjZGVmaW5lICAgTUNIZWxwU3dBTSAgICAgICAgIEwiXG4gIGFtW3Mscl0gICAgICAgQXJj
aGl2ZSBuYW1lIGFuZCB0aW1lIFtzYXZlLCByZXN0b3JlXSIKICNkZWZpbmUgICBNQ0hlbHBTd0FP
ICAgICAgICAgTCJcbiAgYW8gICAgICAgICAgICBBZGQgZmlsZXMgd2l0aCBBcmNoaXZlIGF0dHJp
YnV0ZSBzZXQiCiAjZGVmaW5lICAgTUNIZWxwU3dBUCAgICAgICAgIEwiXG4gIGFwPHBhdGg+ICAg
ICAgU2V0IHBhdGggaW5zaWRlIGFyY2hpdmUiCiAjZGVmaW5lICAgTUNIZWxwU3dBUyAgICAgICAg
IEwiXG4gIGFzICAgICAgICAgICAgU3luY2hyb25pemUgYXJjaGl2ZSBjb250ZW50cyIKQEAgLTM5
NCwzICszOTYsNiBAQAogI2RlZmluZSAgIE1BZGp1c3RWYWx1ZSAgICAgICBMIlxuQWRqdXN0aW5n
ICVzIHZhbHVlIHRvICVzLiIKICNkZWZpbmUgICBNT3BGYWlsZWQgICAgICAgICAgTCJcbk9wZXJh
dGlvbiBmYWlsZWQiCiAjZGVmaW5lICAgTVNraXBFbmNBcmMgICAgICAgIEwiXG5Ta2lwcGluZyB0
aGUgZW5jcnlwdGVkIGFyY2hpdmUgJXMiCisjZGVmaW5lICAgTU9yaWdOYW1lICAgICAgICAgIEwi
T3JpZ2luYWwgbmFtZSIKKyNkZWZpbmUgICBNT3JpZ2luYWxUaW1lICAgICAgTCJPcmlnaW5hbCB0
aW1lIgorI2RlZmluZSAgIE1GaWxlUmVuYW1lZCAgICAgICBMIlxuJXMgaXMgcmVuYW1lZCB0byAl
cyIKZGlmZiAtdXIgdW5yYXItNi4xLjcvbWFrZWZpbGUgdW5yYXItNi4yLjcvbWFrZWZpbGUKLS0t
IHVucmFyLTYuMS43L21ha2VmaWxlCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43
L21ha2VmaWxlCTIwMjMtMDItMDYgMTM6MzE6MzAKQEAgLTEyNiw3ICsxMjYsNyBAQAogCWFyY2hp
dmUubyBhcmNyZWFkLm8gdW5pY29kZS5vIHN5c3RlbS5vIGNyeXB0Lm8gY3JjLm8gcmF3cmVhZC5v
IGVuY25hbWUubyBcCiAJcmVzb3VyY2UubyBtYXRjaC5vIHRpbWVmbi5vIHJkd3Jmbi5vIGNvbnNp
by5vIG9wdGlvbnMubyBlcnJobmQubyByYXJ2bS5vIHNlY3Bhc3N3b3JkLm8gXAogCXJpam5kYWVs
Lm8gZ2V0Yml0cy5vIHNoYTEubyBzaGEyNTYubyBibGFrZTJzLm8gaGFzaC5vIGV4dGluZm8ubyBl
eHRyYWN0Lm8gdm9sdW1lLm8gXAotICBsaXN0Lm8gZmluZC5vIHVucGFjay5vIGhlYWRlcnMubyB0
aHJlYWRwb29sLm8gcnMxNi5vIGNtZGRhdGEubyB1aS5vCisJbGlzdC5vIGZpbmQubyB1bnBhY2su
byBoZWFkZXJzLm8gdGhyZWFkcG9vbC5vIHJzMTYubyBjbWRkYXRhLm8gdWkubwogCiAuY3BwLm86
CiAJJChDT01QSUxFKSAtRCQoV0hBVCkgLWMgJDwKQEAgLTE0MiwyMCArMTQyLDIzIEBACiAJQHJt
IC1mICQoT0JKRUNUUykgJChVTlJBUl9PQkopICQoTElCX09CSikKIAlAcm0gLWYgdW5yYXIgbGli
dW5yYXIuKgogCi11bnJhcjoJY2xlYW4gJChPQkpFQ1RTKSAkKFVOUkFSX09CSikKKyMgV2UgcmVt
b3ZlZCAnY2xlYW4nIGZyb20gZGVwZW5kZW5jaWVzLCBiZWNhdXNlIGl0IHByZXZlbnRlZCBwYXJh
bGxlbAorIyAnbWFrZSAtSm4nIGJ1aWxkcy4KKwordW5yYXI6CSQoT0JKRUNUUykgJChVTlJBUl9P
QkopCiAJQHJtIC1mIHVucmFyCiAJJChMSU5LKSAtbyB1bnJhciAkKExERkxBR1MpICQoT0JKRUNU
UykgJChVTlJBUl9PQkopICQoTElCUykJCiAJJChTVFJJUCkgdW5yYXIKIAogc2Z4OglXSEFUPVNG
WF9NT0RVTEUKLXNmeDoJY2xlYW4gJChPQkpFQ1RTKQorc2Z4OgkkKE9CSkVDVFMpCiAJQHJtIC1m
IGRlZmF1bHQuc2Z4CiAJJChMSU5LKSAtbyBkZWZhdWx0LnNmeCAkKExERkxBR1MpICQoT0JKRUNU
UykKIAkkKFNUUklQKSBkZWZhdWx0LnNmeAogCiBsaWI6CVdIQVQ9UkFSRExMCiBsaWI6CUNYWEZM
QUdTKz0kKExJQkZMQUdTKQotbGliOgljbGVhbiAkKE9CSkVDVFMpICQoTElCX09CSikKK2xpYjoJ
JChPQkpFQ1RTKSAkKExJQl9PQkopCiAJQHJtIC1mIGxpYnVucmFyLioKIAkkKExJTkspIC1zaGFy
ZWQgLW8gbGlidW5yYXIuc28gJChMREZMQUdTKSAkKE9CSkVDVFMpICQoTElCX09CSikKIAkkKEFS
KSByY3MgbGlidW5yYXIuYSAkKE9CSkVDVFMpICQoTElCX09CSikKZGlmZiAtdXIgdW5yYXItNi4x
LjcvbW9kZWwuY3BwIHVucmFyLTYuMi43L21vZGVsLmNwcAotLS0gdW5yYXItNi4xLjcvbW9kZWwu
Y3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L21vZGVsLmNwcAkyMDIzLTA1
LTE0IDEzOjEwOjM0CkBAIC01MzIsMTMgKzUzMiwxNSBAQAogICAgIE1vZGVsLT5Db2Rlci5TdWJS
YW5nZS5Mb3dDb3VudD1IaUNudDsKICAgICBNb2RlbC0+Q29kZXIuU3ViUmFuZ2UuSGlnaENvdW50
PU1vZGVsLT5Db2Rlci5TdWJSYW5nZS5zY2FsZTsKICAgICBpPU51bVN0YXRzLU1vZGVsLT5OdW1N
YXNrZWQ7Ci0gICAgcHBzLS07CisKKyAgICAvLyAyMDIyLjEyLjAyOiB3ZSByZW1vdmVkIHBwcy0t
IGhlcmUgYW5kIGNoYW5nZWQgdGhlIGNvZGUgYmVsb3cgdG8gYXZvaWQKKyAgICAvLyAiYXJyYXkg
c3Vic2NyaXB0IC0xIGlzIG91dHNpZGUgYXJyYXkgYm91bmRzIiB3YXJuaW5nIGluIHNvbWUgY29t
cGlsZXJzLgogICAgIGRvIAogICAgIHsgCi0gICAgICBwcHMrKzsKICAgICAgIGlmIChwcHM+PXBz
K0FTSVpFKHBzKSkgLy8gRXh0cmEgc2FmZXR5IGNoZWNrLgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICBNb2RlbC0+Q2hhck1hc2tbKCpwcHMpLT5TeW1ib2xdPU1vZGVsLT5Fc2NDb3VudDsg
CisgICAgICBwcHMrKzsKICAgICB9IHdoaWxlICggLS1pICk7CiAgICAgcHNlZTJjLT5TdW1tICs9
IE1vZGVsLT5Db2Rlci5TdWJSYW5nZS5zY2FsZTsKICAgICBNb2RlbC0+TnVtTWFza2VkID0gTnVt
U3RhdHM7CmRpZmYgLXVyIHVucmFyLTYuMS43L29wdGlvbnMuY3BwIHVucmFyLTYuMi43L29wdGlv
bnMuY3BwCi0tLSB1bnJhci02LjEuNy9vcHRpb25zLmNwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisr
KyB1bnJhci02LjIuNy9vcHRpb25zLmNwcAkyMDIzLTA1LTE0IDEzOjEwOjM0CkBAIC02LDE0ICs2
LDYgQEAKIH0KIAogCi1SQVJPcHRpb25zOjp+UkFST3B0aW9ucygpCi17Ci0gIC8vIEl0IGlzIGlt
cG9ydGFudCBmb3Igc2VjdXJpdHkgcmVhc29ucywgc28gd2UgZG8gbm90IGhhdmUgdGhlIHVubmVj
ZXNzYXJ5Ci0gIC8vIHBhc3N3b3JkIGRhdGEgbGVmdCBpbiBtZW1vcnkuCi0gIG1lbXNldCh0aGlz
LDAsc2l6ZW9mKFJBUk9wdGlvbnMpKTsKLX0KLQotCiB2b2lkIFJBUk9wdGlvbnM6OkluaXQoKQog
ewogICBtZW1zZXQodGhpcywwLHNpemVvZihSQVJPcHRpb25zKSk7CmRpZmYgLXVyIHVucmFyLTYu
MS43L29wdGlvbnMuaHBwIHVucmFyLTYuMi43L29wdGlvbnMuaHBwCi0tLSB1bnJhci02LjEuNy9v
cHRpb25zLmhwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisrKyB1bnJhci02LjIuNy9vcHRpb25zLmhw
cAkyMDIzLTA1LTE0IDEzOjEwOjM0CkBAIC00NSw2ICs0NSwxMiBAQAogICBPVkVSV1JJVEVfRk9S
Q0VfQVNLCiB9OwogCitlbnVtIEFSQ19NRVRBREFUQQoreworICBBUkNNRVRBX05PTkU9MCwKKyAg
QVJDTUVUQV9TQVZFLCAgICAvLyAtYW1zCisgIEFSQ01FVEFfUkVTVE9SRSAgLy8gLWFtcgorfTsK
IAogZW51bSBRT1BFTl9NT0RFIHsgUU9QRU5fTk9ORSwgUU9QRU5fQVVUTywgUU9QRU5fQUxXQVlT
IH07CiAKQEAgLTg0LDExICs5MCwxMiBAQAogI2RlZmluZSBNQVhfR0VORVJBVEVfTUFTSyAgMTI4
CiAKIAorLy8gSGVyZSB3ZSBzdG9yZSBzaW1wbGUgZGF0YSB0eXBlcywgd2hpY2ggd2UgY2FuIGNs
ZWFyIGFuZCBtb3ZlIGFsbCB0b2dldGhlcgorLy8gcXVpY2tseS4gUmVzdCBvZiBkYXRhIHR5cGVz
IGdvZXMgdG8gQ29tbWFuZERhdGEuCiBjbGFzcyBSQVJPcHRpb25zCiB7CiAgIHB1YmxpYzoKICAg
ICBSQVJPcHRpb25zKCk7Ci0gICAgflJBUk9wdGlvbnMoKTsKICAgICB2b2lkIEluaXQoKTsKIAog
ICAgIHVpbnQgRXhjbEZpbGVBdHRyOwpAQCAtMTE4LDcgKzEyNSw2IEBACiAKICAgICB3Y2hhciBB
cmNQYXRoW05NXTsgLy8gRm9yIC1hcDxwYXRoPi4KICAgICB3Y2hhciBFeGNsQXJjUGF0aFtOTV07
IC8vIEZvciAtZXA0PHBhdGg+IHN3aXRjaC4KLSAgICBTZWNQYXNzd29yZCBQYXNzd29yZDsKICAg
ICBib29sIEVuY3J5cHRIZWFkZXJzOwogICAgIGJvb2wgU2tpcEVuY3J5cHRlZDsKICAgICAKQEAg
LTEzMiw2ICsxMzgsNyBAQAogICAgIEhBU0hfVFlQRSBIYXNoVHlwZTsKICAgICBpbnQgUmVjb3Zl
cnk7CiAgICAgaW50IFJlY1ZvbE51bWJlcjsKKyAgICBBUkNfTUVUQURBVEEgQXJjTWV0YWRhdGE7
CiAgICAgYm9vbCBEaXNhYmxlUGVyY2VudGFnZTsKICAgICBib29sIERpc2FibGVDb3B5cmlnaHQ7
CiAgICAgYm9vbCBEaXNhYmxlRG9uZTsKQEAgLTE0Nyw3ICsxNTQsNiBAQAogICAgIFBBVEhfRVhD
TF9NT0RFIEV4Y2xQYXRoOwogICAgIFJFQ1VSU0VfTU9ERSBSZWN1cnNlOwogICAgIGludDY0IFZv
bFNpemU7Ci0gICAgQXJyYXk8aW50NjQ+IE5leHRWb2xTaXplczsKICAgICB1aW50IEN1clZvbE51
bTsKICAgICBib29sIEFsbFllczsKICAgICBib29sIFZlcmJvc2VPdXRwdXQ7IC8vIC1pdiwgZGlz
cGxheSB2ZXJib3NlIG91dHB1dCwgdXNlZCBvbmx5IGluICJXaW5SQVIgdCIgbm93LgpkaWZmIC11
ciB1bnJhci02LjEuNy9vcy5ocHAgdW5yYXItNi4yLjcvb3MuaHBwCi0tLSB1bnJhci02LjEuNy9v
cy5ocHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysgdW5yYXItNi4yLjcvb3MuaHBwCTIwMjMtMDUt
MTQgMTM6MTA6MzQKQEAgLTEzLDYgKzEzLDggQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8bmV3Pgor
I2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CiAKIAogI2lmIGRlZmluZWQoX1dJ
Tl9BTEwpIHx8IGRlZmluZWQoX0VNWCkKQEAgLTM5LDggKzQxLDE1IEBACiAjZGVmaW5lIF9VTklD
T0RFIC8vIFNldCBfVCgpIG1hY3JvIHRvIGNvbnZlcnQgZnJvbSBuYXJyb3cgdG8gd2lkZSBzdHJp
bmdzLgogI2VuZGlmCiAKKyNpZiAwCisvLyAyMDIxLjA5LjA1OiBBbGxvdyBuZXdlciBWaXN0YSsg
QVBJcyBsaWtlIElGaWxlT3BlbkRpYWxvZyBmb3IgV2luUkFSLAorLy8gYnV0IHN0aWxsIGtlZXAg
U0ZYIG1vZHVsZXMgWFAgY29tcGF0aWJsZS4KKyNkZWZpbmUgV0lOVkVSIF9XSU4zMl9XSU5OVF9W
SVNUQQorI2RlZmluZSBfV0lOMzJfV0lOTlQgX1dJTjMyX1dJTk5UX1ZJU1RBCisjZWxzZQogI2Rl
ZmluZSBXSU5WRVIgX1dJTjMyX1dJTk5UX1dJTlhQCiAjZGVmaW5lIF9XSU4zMl9XSU5OVCBfV0lO
MzJfV0lOTlRfV0lOWFAKKyNlbmRpZgogCiAjaWYgIWRlZmluZWQoWklQU0ZYKQogI2RlZmluZSBS
QVJfU01QCkBAIC03Miw5ICs4MSw2IEBACiAgICNpbmNsdWRlIDxkaXIuaD4KICNlbmRpZgogI2lm
ZGVmIF9NU0NfVkVSCi0gICNpZiBfTVNDX1ZFUjwxNTAwCi0gICAgI2RlZmluZSBmb3IgaWYgKDAp
IDsgZWxzZSBmb3IKLSAgI2VuZGlmCiAgICNpbmNsdWRlIDxkaXJlY3QuaD4KICAgI2luY2x1ZGUg
PGludHJpbi5oPgogCkBAIC05Nyw3ICsxMDMsNiBAQAogI2luY2x1ZGUgPGlvLmg+CiAjaW5jbHVk
ZSA8dGltZS5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgotCiAKICNkZWZpbmUgU0FWRV9MSU5LUwog
CmRpZmYgLXVyIHVucmFyLTYuMS43L3BhdGhmbi5jcHAgdW5yYXItNi4yLjcvcGF0aGZuLmNwcAot
LS0gdW5yYXItNi4xLjcvcGF0aGZuLmNwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisrKyB1bnJhci02
LjIuNy9wYXRoZm4uY3BwCTIwMjMtMDUtMTQgMTM6MTA6MzQKQEAgLTMxLDExICszMSwxNyBAQAog
ICAgIGNvbnN0IHdjaGFyICpzPURlc3RQdHI7CiAgICAgaWYgKHNbMF0hPTAgJiYgSXNEcml2ZURp
dihzWzFdKSkKICAgICAgIHMrPTI7Ci0gICAgaWYgKHNbMF09PSdcXCcgJiYgc1sxXT09J1xcJykK
KworICAgIC8vIFNraXAgVU5DIFdpbmRvd3MgXFxzZXJ2ZXJcc2hhcmVcIG9yIFVuaXggLy9zZXJ2
ZXIvc2hhcmUvCisgICAgaWYgKElzUGF0aERpdihzWzBdKSAmJiBJc1BhdGhEaXYoc1sxXSkpCiAg
ICAgewotICAgICAgY29uc3Qgd2NoYXIgKlNsYXNoPXdjc2NocihzKzIsJ1xcJyk7Ci0gICAgICBp
ZiAoU2xhc2ghPU5VTEwgJiYgKFNsYXNoPXdjc2NocihTbGFzaCsxLCdcXCcpKSE9TlVMTCkKLSAg
ICAgICAgcz1TbGFzaCsxOworICAgICAgdWludCBTbGFzaENvdW50PTA7CisgICAgICBmb3IgKGNv
bnN0IHdjaGFyICp0PXMrMjsqdCE9MDt0KyspCisgICAgICAgIGlmIChJc1BhdGhEaXYoKnQpICYm
ICsrU2xhc2hDb3VudD09MikKKyAgICAgICAgeworICAgICAgICAgIHM9dCsxOyAvLyBGb3VuZCB0
d28gbW9yZSBwYXRoIHNlcGFyYXRvcnMgYWZ0ZXIgbGVhZGluZyB0d28uCisgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICB9CiAgICAgZm9yIChjb25zdCB3Y2hhciAqdD1zOyp0IT0wO3Qr
KykKICAgICAgIGlmIChJc1BhdGhEaXYoKnQpKQpAQCAtNDIyLDUwICs0MjgsMzkgQEAKIAogYm9v
bCBJc05hbWVVc2FibGUoY29uc3Qgd2NoYXIgKk5hbWUpCiB7Ci0jaWZuZGVmIF9VTklYCi0gIGlm
IChOYW1lWzBdICYmIE5hbWVbMV0gJiYgd2NzY2hyKE5hbWUrMiwnOicpIT1OVUxMKQorICAvLyBX
ZSB3ZXJlIGFza2VkIHRvIGFwcGx5IFdpbmRvd3MtbGlrZSBjb252ZXJzaW9uIGluIExpbnV4IGlu
IGNhc2UKKyAgLy8gZmlsZXMgYXJlIHVucGFja2VkIHRvIFdpbmRvd3Mgc2hhcmUuIFRoaXMgY29k
ZSBpcyBpbnZva2VkIG9ubHkKKyAgLy8gaWYgZmlsZSBmYWlsZWQgdG8gYmUgY3JlYXRlZCwgc28g
aXQgZG9lc24ndCBhZmZlY3QgZXh0cmFjdGlvbgorICAvLyBvZiBVbml4IGNvbXBhdGlibGUgbmFt
ZXMgdG8gbmF0aXZlIFVuaXggZHJpdmVzLgorI2lmZGVmIF9VTklYCisgIC8vIFdpbmRvd3Mgc2hh
cmVzIGluIFVuaXggZG8gbm90IGFsbG93IHRoZSBkcml2ZSBsZXR0ZXIsCisgIC8vIHNvIHVubGlr
ZSBXaW5kb3dzIHZlcnNpb24sIHdlIGNoZWNrIGFsbCBjaGFyYWN0ZXJzIGhlcmUuCisgIGlmICh3
Y3NjaHIoTmFtZSwnOicpIT1OVUxMKQogICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgIGlmIChO
YW1lWzBdIT0wICYmIE5hbWVbMV0hPTAgJiYgd2NzY2hyKE5hbWUrMiwnOicpIT1OVUxMKQorICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgogICBmb3IgKGNvbnN0IHdjaGFyICpzPU5hbWU7KnMhPTA7
cysrKQogICB7CiAgICAgaWYgKCh1aW50KSpzPDMyKQogICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgIC8vIEl0IGlzIGZvciBXaW5kb3dzIHNoYXJlcyBpbiBVbml4LiBXZSBjYW4gY3JlYXRlIHN1
Y2ggbmFtZXMgaW4gV2luZG93cy4KKyNpZmRlZiBfVU5JWAorICAgIC8vIE5vIHNwYWNlcyBvciBk
b3RzIGJlZm9yZSB0aGUgcGF0aCBzZXBhcmF0b3IgYXJlIGFsbG93ZWQgaW4gV2luZG93cworICAg
IC8vIHNoYXJlcy4gQnV0IHRoZXkgYXJlIGFsbG93ZWQgYW5kIGF1dG9tdGljYWxseSByZW1vdmVk
IGF0IHRoZSBlbmQgb2YKKyAgICAvLyBmaWxlIG9yIGZvbGRlciBuYW1lLCBzbyBpdCBpcyB1c2Vs
ZXNzIHRvIHJlcGxhY2UgdGhlbSBoZXJlLgorICAgIC8vIFNpbmNlIHN1Y2ggZmlsZXMgb3IgZm9s
ZGVycyBhcmUgY3JlYXRlZCBzdWNjZXNzZnVsbHksIGEgc3VwcG9zZWQKKyAgICAvLyBjb252ZXJz
aW9uIGhlcmUgd291bGQgbmV2ZXIgYmUgaW52b2tlZC4KICAgICBpZiAoKCpzPT0nICcgfHwgKnM9
PScuJykgJiYgSXNQYXRoRGl2KHNbMV0pKQogICAgICAgcmV0dXJuIGZhbHNlOwotICB9CiAjZW5k
aWYKKyAgfQogICByZXR1cm4gKk5hbWUhPTAgJiYgd2NzcGJyayhOYW1lLEwiPyo8PnxcIiIpPT1O
VUxMOwogfQogCiAKLXZvaWQgTWFrZU5hbWVVc2FibGUoY2hhciAqTmFtZSxib29sIEV4dGVuZGVk
KQotewotI2lmZGVmIF9XSU5fQUxMCi0gIC8vIEluIFdpbmRvd3Mgd2UgYWxzbyBuZWVkIHRvIGNv
bnZlcnQgY2hhcmFjdGVycyBub3QgZGVmaW5lZCBpbiBjdXJyZW50Ci0gIC8vIGNvZGUgcGFnZS4g
VGhpcyBkb3VibGUgY29udmVyc2lvbiBjaGFuZ2VzIHRoZW0gdG8gJz8nLCB3aGljaCBpcwotICAv
LyBjYXRjaGVkIGJ5IGNvZGUgYmVsb3cuCi0gIHNpemVfdCBOYW1lTGVuZ3RoPXN0cmxlbihOYW1l
KTsKLSAgd2NoYXIgTmFtZVdbTk1dOwotICBDaGFyVG9XaWRlKE5hbWUsTmFtZVcsQVNJWkUoTmFt
ZVcpKTsKLSAgV2lkZVRvQ2hhcihOYW1lVyxOYW1lLE5hbWVMZW5ndGgrMSk7Ci0gIE5hbWVbTmFt
ZUxlbmd0aF09MDsKLSNlbmRpZgotICBmb3IgKGNoYXIgKnM9TmFtZTsqcyE9MDtzPWNoYXJuZXh0
KHMpKQotICB7Ci0gICAgaWYgKHN0cmNocihFeHRlbmRlZCA/ICI/Kjw+fFwiIjoiPyoiLCpzKSE9
TlVMTCB8fCBFeHRlbmRlZCAmJiAoYnl0ZSkqczwzMikKLSAgICAgICpzPSdfJzsKLSNpZmRlZiBf
RU1YCi0gICAgaWYgKCpzPT0nPScpCi0gICAgICAqcz0nXyc7Ci0jZW5kaWYKLSNpZm5kZWYgX1VO
SVgKLSAgICBpZiAocy1OYW1lPjEgJiYgKnM9PSc6JykKLSAgICAgICpzPSdfJzsKLSAgICAvLyBS
ZW1vdmUgJyAnIGFuZCAnLicgYmVmb3JlIHBhdGggc2VwYXJhdG9yLCBidXQgYWxsb3cgLlwgYW5k
IC4uXC4KLSAgICBpZiAoKCpzPT0nICcgfHwgKnM9PScuJyAmJiBzPk5hbWUgJiYgIUlzUGF0aERp
dihzWy0xXSkgJiYgc1stMV0hPScuJykgJiYgSXNQYXRoRGl2KHNbMV0pKQotICAgICAgKnM9J18n
OwotI2VuZGlmCi0gIH0KLX0KIAogCiB2b2lkIE1ha2VOYW1lVXNhYmxlKHdjaGFyICpOYW1lLGJv
b2wgRXh0ZW5kZWQpCkBAIC00NzQsNyArNDY5LDI3IEBACiAgIHsKICAgICBpZiAod2NzY2hyKEV4
dGVuZGVkID8gTCI/Kjw+fFwiIjpMIj8qIiwqcykhPU5VTEwgfHwgRXh0ZW5kZWQgJiYgKHVpbnQp
KnM8MzIpCiAgICAgICAqcz0nXyc7Ci0jaWZuZGVmIF9VTklYCisjaWZkZWYgX1VOSVgKKyAgICAv
LyBXZSB3ZXJlIGFza2VkIHRvIGFwcGx5IFdpbmRvd3MtbGlrZSBjb252ZXJzaW9uIGluIExpbnV4
IGluIGNhc2UKKyAgICAvLyBmaWxlcyBhcmUgdW5wYWNrZWQgdG8gV2luZG93cyBzaGFyZS4gVGhp
cyBjb2RlIGlzIGludm9rZWQgb25seQorICAgIC8vIGlmIGZpbGUgZmFpbGVkIHRvIGJlIGNyZWF0
ZWQsIHNvIGl0IGRvZXNuJ3QgYWZmZWN0IGV4dHJhY3Rpb24KKyAgICAvLyBvZiBVbml4IGNvbXBh
dGlibGUgbmFtZXMgdG8gbmF0aXZlIFVuaXggZHJpdmVzLgorICAgIGlmIChFeHRlbmRlZCkKKyAg
ICB7CisgICAgICAvLyBXaW5kb3dzIHNoYXJlcyBpbiBVbml4IGRvIG5vdCBhbGxvdyB0aGUgZHJp
dmUgbGV0dGVyLAorICAgICAgLy8gc28gdW5saWtlIFdpbmRvd3MgdmVyc2lvbiwgd2UgY2hlY2sg
YWxsIGNoYXJhY3RlcnMgaGVyZS4KKyAgICAgIGlmICgqcz09JzonKQorICAgICAgICAqcz0nXyc7
CisKKyAgICAgIC8vIE5vIHNwYWNlcyBvciBkb3RzIGJlZm9yZSB0aGUgcGF0aCBzZXBhcmF0b3Ig
YXJlIGFsbG93ZWQgb24gV2luZG93cworICAgICAgLy8gc2hhcmVzLiBCdXQgdGhleSBhcmUgYWxs
b3dlZCBhbmQgYXV0b210aWNhbGx5IHJlbW92ZWQgYXQgdGhlIGVuZCBvZgorICAgICAgLy8gZmls
ZSBvciBmb2xkZXIgbmFtZSwgc28gaXQgaXMgdXNlbGVzcyB0byByZXBsYWNlIHRoZW0gaGVyZS4K
KyAgICAgIC8vIFNpbmNlIHN1Y2ggZmlsZXMgb3IgZm9sZGVycyBhcmUgY3JlYXRlZCBzdWNjZXNz
ZnVsbHksIGEgc3VwcG9zZWQKKyAgICAgIC8vIGNvbnZlcnNpb24gaGVyZSB3b3VsZCBuZXZlciBi
ZSBpbnZva2VkLgorICAgICAgaWYgKCgqcz09JyAnIHx8ICpzPT0nLicpICYmIElzUGF0aERpdihz
WzFdKSkKKyAgICAgICAgKnM9J18nOworICAgIH0KKyNlbHNlCiAgICAgaWYgKHMtTmFtZT4xICYm
ICpzPT0nOicpCiAgICAgICAqcz0nXyc7CiAjaWYgMCAgLy8gV2UgYWxyZWFkeSBjYW4gY3JlYXRl
IHN1Y2ggZmlsZXMuCmRpZmYgLXVyIHVucmFyLTYuMS43L3BhdGhmbi5ocHAgdW5yYXItNi4yLjcv
cGF0aGZuLmhwcAotLS0gdW5yYXItNi4xLjcvcGF0aGZuLmhwcAkyMDIyLTEwLTE5IDIyOjA1OjEy
CisrKyB1bnJhci02LjIuNy9wYXRoZm4uaHBwCTIwMjMtMDUtMTQgMTM6MTA6MzQKQEAgLTI5LDcg
KzI5LDYgQEAKIHdjaGFyKiBHZXRWb2xOdW1QYXJ0KGNvbnN0IHdjaGFyICpBcmNOYW1lKTsKIHZv
aWQgTmV4dFZvbHVtZU5hbWUod2NoYXIgKkFyY05hbWUsdWludCBNYXhMZW5ndGgsYm9vbCBPbGRO
dW1iZXJpbmcpOwogYm9vbCBJc05hbWVVc2FibGUoY29uc3Qgd2NoYXIgKk5hbWUpOwotdm9pZCBN
YWtlTmFtZVVzYWJsZShjaGFyICpOYW1lLGJvb2wgRXh0ZW5kZWQpOwogdm9pZCBNYWtlTmFtZVVz
YWJsZSh3Y2hhciAqTmFtZSxib29sIEV4dGVuZGVkKTsKIAogdm9pZCBVbml4U2xhc2hUb0Rvcyhj
b25zdCBjaGFyICpTcmNOYW1lLGNoYXIgKkRlc3ROYW1lLHNpemVfdCBNYXhMZW5ndGgpOwpkaWZm
IC11ciB1bnJhci02LjEuNy9xb3Blbi5jcHAgdW5yYXItNi4yLjcvcW9wZW4uY3BwCi0tLSB1bnJh
ci02LjEuNy9xb3Blbi5jcHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysgdW5yYXItNi4yLjcvcW9w
ZW4uY3BwCTIwMjMtMDUtMTQgMTM6MTA6MzQKQEAgLTk3LDcgKzk3LDcgQEAKIAogICBpZiAoQXJj
LT5TdWJIZWFkLkVuY3J5cHRlZCkKICAgewotICAgIFJBUk9wdGlvbnMgKkNtZD1BcmMtPkdldFJB
Uk9wdGlvbnMoKTsKKyAgICBDb21tYW5kRGF0YSAqQ21kPUFyYy0+R2V0Q29tbWFuZERhdGEoKTsK
ICNpZm5kZWYgUkFSX05PQ1JZUFQKICAgICBpZiAoQ21kLT5QYXNzd29yZC5Jc1NldCgpKQogICAg
ICAgQ3J5cHQuU2V0Q3J5cHRLZXlzKGZhbHNlLENSWVBUX1JBUjUwLCZDbWQtPlBhc3N3b3JkLEFy
Yy0+U3ViSGVhZC5TYWx0LApkaWZmIC11ciB1bnJhci02LjEuNy9yYXIuaHBwIHVucmFyLTYuMi43
L3Jhci5ocHAKLS0tIHVucmFyLTYuMS43L3Jhci5ocHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysg
dW5yYXItNi4yLjcvcmFyLmhwcAkyMDIzLTA1LTE0IDEzOjEwOjM0CkBAIC0xMiw2ICsxMiw3IEBA
CiAjaW5jbHVkZSAidmVyc2lvbi5ocHAiCiAjaW5jbHVkZSAicmFyZGVmcy5ocHAiCiAjaW5jbHVk
ZSAicmFybGFuZy5ocHAiCisjaW5jbHVkZSAicmF3aW50LmhwcCIKICNpbmNsdWRlICJ1bmljb2Rl
LmhwcCIKICNpbmNsdWRlICJlcnJobmQuaHBwIgogI2luY2x1ZGUgInNlY3Bhc3N3b3JkLmhwcCIK
QEAgLTM0LDcgKzM1LDYgQEAKICNlbmRpZgogI2luY2x1ZGUgImZpbGUuaHBwIgogI2luY2x1ZGUg
ImNyYy5ocHAiCi0jaW5jbHVkZSAidWkuaHBwIgogI2luY2x1ZGUgImZpbGVmbi5ocHAiCiAjaW5j
bHVkZSAiZmlsZXN0ci5ocHAiCiAjaW5jbHVkZSAiZmluZC5ocHAiCkBAIC00NywxMSArNDcsMTEg
QEAKICNpbmNsdWRlICJhcmNoaXZlLmhwcCIKICNpbmNsdWRlICJtYXRjaC5ocHAiCiAjaW5jbHVk
ZSAiY21kZGF0YS5ocHAiCisjaW5jbHVkZSAidWkuaHBwIgogI2luY2x1ZGUgImZpbGNyZWF0Lmhw
cCIKICNpbmNsdWRlICJjb25zaW8uaHBwIgogI2luY2x1ZGUgInN5c3RlbS5ocHAiCiAjaW5jbHVk
ZSAibG9nLmhwcCIKLSNpbmNsdWRlICJyYXdpbnQuaHBwIgogI2luY2x1ZGUgInJhd3JlYWQuaHBw
IgogI2luY2x1ZGUgImVuY25hbWUuaHBwIgogI2luY2x1ZGUgInJlc291cmNlLmhwcCIKZGlmZiAt
dXIgdW5yYXItNi4xLjcvcmFyZGVmcy5ocHAgdW5yYXItNi4yLjcvcmFyZGVmcy5ocHAKLS0tIHVu
cmFyLTYuMS43L3JhcmRlZnMuaHBwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43
L3JhcmRlZnMuaHBwCTIwMjMtMDUtMTQgMTM6MTA6MzQKQEAgLTksOSArOSwxMyBAQAogCiAjZGVm
aW5lICBBU0laRSh4KSAoc2l6ZW9mKHgpL3NpemVvZih4WzBdKSkKIAotLy8gTUFYUEFTU1dPUkQg
aXMgZXhwZWN0ZWQgdG8gYmUgbXVsdGlwbGUgb2YgQ1JZUFRQUk9URUNUTUVNT1JZX0JMT0NLX1NJ
WkUgKDE2KQotLy8gZm9yIENyeXB0UHJvdGVjdE1lbW9yeSBpbiBTZWNQYXNzd29yZC4KLSNkZWZp
bmUgIE1BWFBBU1NXT1JEICAgICAgIDEyOAorLy8gTUFYUEFTU1dPUkQgYW5kIE1BWFBBU1NXT1JE
X1JBUiBhcmUgZXhwZWN0ZWQgdG8gYmUgbXVsdGlwbGUgb2YKKy8vIENSWVBUUFJPVEVDVE1FTU9S
WV9CTE9DS19TSVpFICgxNikgZm9yIENyeXB0UHJvdGVjdE1lbW9yeSBpbiBTZWNQYXNzd29yZC4K
Ky8vIFdlIGFsbG93IGEgbGFyZ2VyIE1BWFBBU1NXT1JEIHRvIHVucGFjayBhcmNoaXZlcyB3aXRo
IGxlbmd0aHkgcGFzc3dvcmRzCisvLyBpbiBub24tUkFSIGZvcm1hdHMgaW4gR1VJIHZlcnNpb25z
LiBGb3IgUkFSIGZvcm1hdCB3ZSBzZXQgTUFYUEFTU1dPUkRfUkFSCisvLyB0byAxMjggZm9yIGNv
bXBhdGliaWxpdHkgYW5kIGJlY2F1c2UgaXQgaXMgZW5vdWdoIGZvciBBRVMtMjU2LgorI2RlZmlu
ZSAgTUFYUEFTU1dPUkQgICAgICAgNTEyCisjZGVmaW5lICBNQVhQQVNTV09SRF9SQVIgICAxMjgK
IAogI2RlZmluZSAgTUFYU0ZYU0laRSAgICAgICAgMHgyMDAwMDAKIApkaWZmIC11ciB1bnJhci02
LjEuNy9yYXdpbnQuaHBwIHVucmFyLTYuMi43L3Jhd2ludC5ocHAKLS0tIHVucmFyLTYuMS43L3Jh
d2ludC5ocHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysgdW5yYXItNi4yLjcvcmF3aW50LmhwcAky
MDIzLTA1LTE0IDEzOjEwOjM1CkBAIC04NCw3ICs4NCw3IEBACiB7CiAjaWYgZGVmaW5lZChVU0Vf
TUVNX0JZVEVTV0FQKSAmJiBkZWZpbmVkKF9NU0NfVkVSKQogICByZXR1cm4gX2J5dGVzd2FwX3Vs
b25nKCoodWludDMyICopbSk7Ci0jZWxpZiBkZWZpbmVkKFVTRV9NRU1fQllURVNXQVApICYmIChf
X0dOVUNfXyA+IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+IDIpCisjZWxpZiBkZWZpbmVkKFVTRV9N
RU1fQllURVNXQVApICYmIChkZWZpbmVkKF9fY2xhbmdfXykgfHwgZGVmaW5lZChfX0dOVUNfXykp
CiAgIHJldHVybiBfX2J1aWx0aW5fYnN3YXAzMigqKHVpbnQzMiAqKW0pOwogI2Vsc2UKICAgcmV0
dXJuIHVpbnQzMihtWzBdPDwyNCkgfCB1aW50MzIobVsxXTw8MTYpIHwgdWludDMyKG1bMl08PDgp
IHwgbVszXTsKQEAgLTk3LDcgKzk3LDcgQEAKIHsKICNpZiBkZWZpbmVkKFVTRV9NRU1fQllURVNX
QVApICYmIGRlZmluZWQoX01TQ19WRVIpCiAgICoodWludDMyKiltZW0gPSBfYnl0ZXN3YXBfdWxv
bmcoaSk7Ci0jZWxpZiBkZWZpbmVkKFVTRV9NRU1fQllURVNXQVApICYmIChfX0dOVUNfXyA+IDMp
ICYmIChfX0dOVUNfTUlOT1JfXyA+IDIpCisjZWxpZiBkZWZpbmVkKFVTRV9NRU1fQllURVNXQVAp
ICYmIChkZWZpbmVkKF9fY2xhbmdfXykgfHwgZGVmaW5lZChfX0dOVUNfXykpCiAgICoodWludDMy
KiltZW0gPSBfX2J1aWx0aW5fYnN3YXAzMihpKTsKICNlbHNlCiAgIG1lbVswXT1ieXRlKGk+PjI0
KTsKQEAgLTExMiw3ICsxMTIsNyBAQAogewogI2lmZGVmIF9NU0NfVkVSCiAgIHJldHVybiBfYnl0
ZXN3YXBfdWxvbmcoaSk7Ci0jZWxpZiAoX19HTlVDX18gPiAzKSAmJiAoX19HTlVDX01JTk9SX18g
PiAyKQorI2VsaWYgZGVmaW5lZChfX2NsYW5nX18pIHx8IGRlZmluZWQoX19HTlVDX18pCiAgIHJl
dHVybiAgX19idWlsdGluX2Jzd2FwMzIoaSk7CiAjZWxzZQogICByZXR1cm4gKHJvdGwzMihpLDI0
KSYweEZGMDBGRjAwKXwocm90bDMyKGksOCkmMHgwMEZGMDBGRik7CmRpZmYgLXVyIHVucmFyLTYu
MS43L3Jkd3Jmbi5jcHAgdW5yYXItNi4yLjcvcmR3cmZuLmNwcAotLS0gdW5yYXItNi4xLjcvcmR3
cmZuLmNwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisrKyB1bnJhci02LjIuNy9yZHdyZm4uY3BwCTIw
MjMtMDUtMTQgMTM6MTA6MzUKQEAgLTE1NSw3ICsxNTUsNyBAQAogewogCiAjaWZkZWYgUkFSRExM
Ci0gIFJBUk9wdGlvbnMgKkNtZD0oKEFyY2hpdmUgKilTcmNGaWxlKS0+R2V0UkFST3B0aW9ucygp
OworICBDb21tYW5kRGF0YSAqQ21kPSgoQXJjaGl2ZSAqKVNyY0ZpbGUpLT5HZXRDb21tYW5kRGF0
YSgpOwogICBpZiAoQ21kLT5EbGxPcE1vZGUhPVJBUl9TS0lQKQogICB7CiAgICAgaWYgKENtZC0+
Q2FsbGJhY2shPU5VTEwgJiYKQEAgLTIwNCw3ICsyMDQsNyBAQAogICAgIEFyY1Bvcys9UHJvY2Vz
c2VkQXJjU2l6ZTsKIAogICAgIEFyY2hpdmUgKlNyY0FyYz0oQXJjaGl2ZSAqKVNyY0ZpbGU7Ci0g
ICAgUkFST3B0aW9ucyAqQ21kPVNyY0FyYy0+R2V0UkFST3B0aW9ucygpOworICAgIENvbW1hbmRE
YXRhICpDbWQ9U3JjQXJjLT5HZXRDb21tYW5kRGF0YSgpOwogCiAgICAgaW50IEN1clBlcmNlbnQ9
VG9QZXJjZW50KEFyY1BvcyxBcmNTaXplKTsKICAgICBpZiAoIUNtZC0+RGlzYWJsZVBlcmNlbnRh
Z2UgJiYgQ3VyUGVyY2VudCE9TGFzdFBlcmNlbnQpCmRpZmYgLXVyIHVucmFyLTYuMS43L3JlY3Zv
bC5jcHAgdW5yYXItNi4yLjcvcmVjdm9sLmNwcAotLS0gdW5yYXItNi4xLjcvcmVjdm9sLmNwcAky
MDIyLTEwLTE5IDIyOjA1OjEyCisrKyB1bnJhci02LjIuNy9yZWN2b2wuY3BwCTIwMjMtMDUtMTQg
MTM6MTA6MzUKQEAgLTUsNyArNSw3IEBACiAKIAogCi1ib29sIFJlY1ZvbHVtZXNSZXN0b3JlKFJB
Uk9wdGlvbnMgKkNtZCxjb25zdCB3Y2hhciAqTmFtZSxib29sIFNpbGVudCkKK2Jvb2wgUmVjVm9s
dW1lc1Jlc3RvcmUoQ29tbWFuZERhdGEgKkNtZCxjb25zdCB3Y2hhciAqTmFtZSxib29sIFNpbGVu
dCkKIHsKICAgQXJjaGl2ZSBBcmMoQ21kKTsKICAgaWYgKCFBcmMuT3BlbihOYW1lKSkKQEAgLTQy
LDcgKzQyLDcgQEAKIH0KIAogCi12b2lkIFJlY1ZvbHVtZXNUZXN0KFJBUk9wdGlvbnMgKkNtZCxB
cmNoaXZlICpBcmMsY29uc3Qgd2NoYXIgKk5hbWUpCit2b2lkIFJlY1ZvbHVtZXNUZXN0KENvbW1h
bmREYXRhICpDbWQsQXJjaGl2ZSAqQXJjLGNvbnN0IHdjaGFyICpOYW1lKQogewogICB3Y2hhciBS
ZXZOYW1lW05NXTsKICAgKlJldk5hbWU9MDsKZGlmZiAtdXIgdW5yYXItNi4xLjcvcmVjdm9sLmhw
cCB1bnJhci02LjIuNy9yZWN2b2wuaHBwCi0tLSB1bnJhci02LjEuNy9yZWN2b2wuaHBwCTIwMjIt
MTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L3JlY3ZvbC5ocHAJMjAyMy0wNS0xNCAxMzox
MDozNQpAQCAtMTQsMTEgKzE0LDExIEBACiAgICAgVGhyZWFkUG9vbCAqUlNUaHJlYWRQb29sOwog
I2VuZGlmCiAgIHB1YmxpYzoKLSAgICBSZWNWb2x1bWVzMyhSQVJPcHRpb25zICpDbWQsYm9vbCBU
ZXN0T25seSk7CisgICAgUmVjVm9sdW1lczMoQ29tbWFuZERhdGEgKkNtZCxib29sIFRlc3RPbmx5
KTsKICAgICB+UmVjVm9sdW1lczMoKTsKLSAgICB2b2lkIE1ha2UoUkFST3B0aW9ucyAqQ21kLHdj
aGFyICpBcmNOYW1lKTsKLSAgICBib29sIFJlc3RvcmUoUkFST3B0aW9ucyAqQ21kLGNvbnN0IHdj
aGFyICpOYW1lLGJvb2wgU2lsZW50KTsKLSAgICB2b2lkIFRlc3QoUkFST3B0aW9ucyAqQ21kLGNv
bnN0IHdjaGFyICpOYW1lKTsKKyAgICB2b2lkIE1ha2UoQ29tbWFuZERhdGEgKkNtZCx3Y2hhciAq
QXJjTmFtZSk7CisgICAgYm9vbCBSZXN0b3JlKENvbW1hbmREYXRhICpDbWQsY29uc3Qgd2NoYXIg
Kk5hbWUsYm9vbCBTaWxlbnQpOworICAgIHZvaWQgVGVzdChDb21tYW5kRGF0YSAqQ21kLGNvbnN0
IHdjaGFyICpOYW1lKTsKIH07CiAKIApAQCAtNDgsOCArNDgsOCBAQAogY2xhc3MgUmVjVm9sdW1l
czUKIHsKICAgcHJpdmF0ZToKLSAgICB2b2lkIFByb2Nlc3NSUyhSQVJPcHRpb25zICpDbWQsdWlu
dCBEYXRhTnVtLGNvbnN0IGJ5dGUgKkRhdGEsdWludCBNYXhSZWFkLGJvb2wgRW5jb2RlKTsKLSAg
ICB2b2lkIFByb2Nlc3NSUyhSQVJPcHRpb25zICpDbWQsdWludCBNYXhSZWFkLGJvb2wgRW5jb2Rl
KTsKKyAgICB2b2lkIFByb2Nlc3NSUyhDb21tYW5kRGF0YSAqQ21kLHVpbnQgRGF0YU51bSxjb25z
dCBieXRlICpEYXRhLHVpbnQgTWF4UmVhZCxib29sIEVuY29kZSk7CisgICAgdm9pZCBQcm9jZXNz
UlMoQ29tbWFuZERhdGEgKkNtZCx1aW50IE1heFJlYWQsYm9vbCBFbmNvZGUpOwogICAgIHVpbnQg
UmVhZEhlYWRlcihGaWxlICpSZWNGaWxlLGJvb2wgRmlyc3RSZXYpOwogCiAgICAgQXJyYXk8UmVj
Vm9sSXRlbT4gUmVjSXRlbXM7CkBAIC03NiwxMyArNzYsMTMgQEAKICAgcHVibGljOiAvLyAncHVi
bGljJyBvbmx5IGJlY2F1c2UgY2FsbGVkIGZyb20gdGhyZWFkIGZ1bmN0aW9ucy4KICAgICB2b2lk
IFByb2Nlc3NBcmVhUlMoUmVjUlNUaHJlYWREYXRhICp0ZCk7CiAgIHB1YmxpYzoKLSAgICBSZWNW
b2x1bWVzNShSQVJPcHRpb25zICpDbWQsYm9vbCBUZXN0T25seSk7CisgICAgUmVjVm9sdW1lczUo
Q29tbWFuZERhdGEgKkNtZCxib29sIFRlc3RPbmx5KTsKICAgICB+UmVjVm9sdW1lczUoKTsKLSAg
ICBib29sIFJlc3RvcmUoUkFST3B0aW9ucyAqQ21kLGNvbnN0IHdjaGFyICpOYW1lLGJvb2wgU2ls
ZW50KTsKLSAgICB2b2lkIFRlc3QoUkFST3B0aW9ucyAqQ21kLGNvbnN0IHdjaGFyICpOYW1lKTsK
KyAgICBib29sIFJlc3RvcmUoQ29tbWFuZERhdGEgKkNtZCxjb25zdCB3Y2hhciAqTmFtZSxib29s
IFNpbGVudCk7CisgICAgdm9pZCBUZXN0KENvbW1hbmREYXRhICpDbWQsY29uc3Qgd2NoYXIgKk5h
bWUpOwogfTsKIAotYm9vbCBSZWNWb2x1bWVzUmVzdG9yZShSQVJPcHRpb25zICpDbWQsY29uc3Qg
d2NoYXIgKk5hbWUsYm9vbCBTaWxlbnQpOwotdm9pZCBSZWNWb2x1bWVzVGVzdChSQVJPcHRpb25z
ICpDbWQsQXJjaGl2ZSAqQXJjLGNvbnN0IHdjaGFyICpOYW1lKTsKK2Jvb2wgUmVjVm9sdW1lc1Jl
c3RvcmUoQ29tbWFuZERhdGEgKkNtZCxjb25zdCB3Y2hhciAqTmFtZSxib29sIFNpbGVudCk7Cit2
b2lkIFJlY1ZvbHVtZXNUZXN0KENvbW1hbmREYXRhICpDbWQsQXJjaGl2ZSAqQXJjLGNvbnN0IHdj
aGFyICpOYW1lKTsKIAogI2VuZGlmCmRpZmYgLXVyIHVucmFyLTYuMS43L3JlY3ZvbDMuY3BwIHVu
cmFyLTYuMi43L3JlY3ZvbDMuY3BwCi0tLSB1bnJhci02LjEuNy9yZWN2b2wzLmNwcAkyMDIyLTEw
LTE5IDIyOjA1OjEyCisrKyB1bnJhci02LjIuNy9yZWN2b2wzLmNwcAkyMDIzLTA1LTE0IDEzOjEw
OjM1CkBAIC0zNiw3ICszNiw3IEBACiB9CiAjZW5kaWYKIAotUmVjVm9sdW1lczM6OlJlY1ZvbHVt
ZXMzKFJBUk9wdGlvbnMgKkNtZCxib29sIFRlc3RPbmx5KQorUmVjVm9sdW1lczM6OlJlY1ZvbHVt
ZXMzKENvbW1hbmREYXRhICpDbWQsYm9vbCBUZXN0T25seSkKIHsKICAgbWVtc2V0KFNyY0ZpbGUs
MCxzaXplb2YoU3JjRmlsZSkpOwogICBpZiAoVGVzdE9ubHkpCkBAIC05OSw3ICs5OSw3IEBACiB9
CiAKIAotYm9vbCBSZWNWb2x1bWVzMzo6UmVzdG9yZShSQVJPcHRpb25zICpDbWQsY29uc3Qgd2No
YXIgKk5hbWUsYm9vbCBTaWxlbnQpCitib29sIFJlY1ZvbHVtZXMzOjpSZXN0b3JlKENvbW1hbmRE
YXRhICpDbWQsY29uc3Qgd2NoYXIgKk5hbWUsYm9vbCBTaWxlbnQpCiB7CiAgIHdjaGFyIEFyY05h
bWVbTk1dOwogICB3Y3NuY3B5eihBcmNOYW1lLE5hbWUsQVNJWkUoQXJjTmFtZSkpOwpAQCAtNDk3
LDcgKzQ5Nyw3IEBACiB9CiAKIAotdm9pZCBSZWNWb2x1bWVzMzo6VGVzdChSQVJPcHRpb25zICpD
bWQsY29uc3Qgd2NoYXIgKk5hbWUpCit2b2lkIFJlY1ZvbHVtZXMzOjpUZXN0KENvbW1hbmREYXRh
ICpDbWQsY29uc3Qgd2NoYXIgKk5hbWUpCiB7CiAgIGlmICghSXNOZXdTdHlsZVJldihOYW1lKSkg
Ly8gUkFSIDMuMCBuYW1lI18jXyMucmV2IGRvIG5vdCBpbmNsdWRlIENSQzMyLgogICB7CmRpZmYg
LXVyIHVucmFyLTYuMS43L3JlY3ZvbDUuY3BwIHVucmFyLTYuMi43L3JlY3ZvbDUuY3BwCi0tLSB1
bnJhci02LjEuNy9yZWN2b2w1LmNwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisrKyB1bnJhci02LjIu
Ny9yZWN2b2w1LmNwcAkyMDIzLTA1LTE0IDEzOjEwOjM1CkBAIC00LDcgKzQsNyBAQAogLy8gcmV2
IGZpbGVzIGJ5IG1pc3Rha2UuCiAjZGVmaW5lIE1BWF9SRVZfVE9fREFUQV9SQVRJTyAxMCAvLyAx
MDAwJSBvZiByZXYgZmlsZXMuCiAKLVJlY1ZvbHVtZXM1OjpSZWNWb2x1bWVzNShSQVJPcHRpb25z
ICpDbWQsYm9vbCBUZXN0T25seSkKK1JlY1ZvbHVtZXM1OjpSZWNWb2x1bWVzNShDb21tYW5kRGF0
YSAqQ21kLGJvb2wgVGVzdE9ubHkpCiB7CiAgIFJlYWxCdWY9TlVMTDsKICAgUmVhbFJlYWRCdWZm
ZXI9TlVMTDsKQEAgLTcwLDcgKzcwLDcgQEAKICNlbmRpZgogCiAKLXZvaWQgUmVjVm9sdW1lczU6
OlByb2Nlc3NSUyhSQVJPcHRpb25zICpDbWQsdWludCBEYXRhTnVtLGNvbnN0IGJ5dGUgKkRhdGEs
dWludCBNYXhSZWFkLGJvb2wgRW5jb2RlKQordm9pZCBSZWNWb2x1bWVzNTo6UHJvY2Vzc1JTKENv
bW1hbmREYXRhICpDbWQsdWludCBEYXRhTnVtLGNvbnN0IGJ5dGUgKkRhdGEsdWludCBNYXhSZWFk
LGJvb2wgRW5jb2RlKQogewogLyoKICAgUlNDb2RlcjE2IFJTOwpAQCAtMTQxLDcgKzE0MSw3IEBA
CiAKIAogCi1ib29sIFJlY1ZvbHVtZXM1OjpSZXN0b3JlKFJBUk9wdGlvbnMgKkNtZCxjb25zdCB3
Y2hhciAqTmFtZSxib29sIFNpbGVudCkKK2Jvb2wgUmVjVm9sdW1lczU6OlJlc3RvcmUoQ29tbWFu
ZERhdGEgKkNtZCxjb25zdCB3Y2hhciAqTmFtZSxib29sIFNpbGVudCkKIHsKICAgd2NoYXIgQXJj
TmFtZVtOTV07CiAgIHdjc25jcHl6KEFyY05hbWUsTmFtZSxBU0laRShBcmNOYW1lKSk7CkBAIC00
OTQsNyArNDk0LDcgQEAKIH0KIAogCi12b2lkIFJlY1ZvbHVtZXM1OjpUZXN0KFJBUk9wdGlvbnMg
KkNtZCxjb25zdCB3Y2hhciAqTmFtZSkKK3ZvaWQgUmVjVm9sdW1lczU6OlRlc3QoQ29tbWFuZERh
dGEgKkNtZCxjb25zdCB3Y2hhciAqTmFtZSkKIHsKICAgd2NoYXIgVm9sTmFtZVtOTV07CiAgIHdj
c25jcHl6KFZvbE5hbWUsTmFtZSxBU0laRShWb2xOYW1lKSk7CmRpZmYgLXVyIHVucmFyLTYuMS43
L3Jpam5kYWVsLmNwcCB1bnJhci02LjIuNy9yaWpuZGFlbC5jcHAKLS0tIHVucmFyLTYuMS43L3Jp
am5kYWVsLmNwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisrKyB1bnJhci02LjIuNy9yaWpuZGFlbC5j
cHAJMjAyMy0wNS0xNCAxMzoxMDozNQpAQCAtOTAsMTggKzkwLDIwIEBACiAKIHZvaWQgUmlqbmRh
ZWw6OkluaXQoYm9vbCBFbmNyeXB0LGNvbnN0IGJ5dGUgKmtleSx1aW50IGtleUxlbixjb25zdCBi
eXRlICogaW5pdFZlY3RvcikKIHsKLSNpZmRlZiBVU0VfU1NFCi0gIC8vIENoZWNrIFNTRSBoZXJl
IGluc3RlYWQgb2YgY29uc3RydWN0b3IsIHNvIGlmIG9iamVjdCBpcyBhIHBhcnQgb2Ygc29tZQot
ICAvLyBzdHJ1Y3R1cmUgbWVtc2V0J2VkIGJlZm9yZSB1c2UsIHRoaXMgdmFyaWFibGUgaXMgbm90
IGxvc3QuCisgIC8vIENoZWNrIFNJTUQgaGVyZSBpbnN0ZWFkIG9mIGNvbnN0cnVjdG9yLCBzbyBp
ZiBvYmplY3QgaXMgYSBwYXJ0IG9mIHNvbWUKKyAgLy8gc3RydWN0dXJlIG1lbXNldCdlZCBiZWZv
cmUgdXNlLCB0aGVzZSB2YXJpYWJsZXMgYXJlIG5vdCBsb3N0LgorI2lmIGRlZmluZWQoVVNFX1NT
RSkKICAgaW50IENQVUluZm9bNF07Ci0gIF9fY3B1aWQoQ1BVSW5mbywgMHg4MDAwMDAwMCk7IC8v
IEdldCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQgY3B1aWQgZnVuY3Rpb24uCi0gIGlmICgoQ1BVSW5m
b1swXSAmIDB4N2ZmZmZmZmYpPj0xKQorICBfX2NwdWlkKENQVUluZm8sIDApOworICBpZiAoQ1BV
SW5mb1swXT49MSkgLy8gQ2hlY2sgdGhlIG1heGltdW0gc3VwcG9ydGVkIGNwdWlkIGZ1bmN0aW9u
LgogICB7CiAgICAgX19jcHVpZChDUFVJbmZvLCAxKTsKICAgICBBRVNfTkk9KENQVUluZm9bMl0g
JiAweDIwMDAwMDApIT0wOwogICB9CiAgIGVsc2UKICAgICBBRVNfTkk9ZmFsc2U7CisjZWxpZiBk
ZWZpbmVkKFVTRV9ORU9OKQorICBBRVNfTmVvbj0oZ2V0YXV4dmFsKEFUX0hXQ0FQKSAmIEhXQ0FQ
X0FFUykhPTA7CiAjZW5kaWYKIAogICAvLyBPdGhlciBkZXZlbG9wZXJzIGFza2VkIHVzIHRvIGlu
aXRpYWxpemUgaXQgdG8gc3VwcHJlc3MgIm1heSBiZSB1c2VkCkBAIC0xNDEsMTggKzE0MywyNSBA
QAogICAgIGtleUVuY1RvRGVjKCk7CiB9CiAKKwogdm9pZCBSaWpuZGFlbDo6YmxvY2tFbmNyeXB0
KGNvbnN0IGJ5dGUgKmlucHV0LHNpemVfdCBpbnB1dExlbixieXRlICpvdXRCdWZmZXIpCiB7CiAg
IGlmIChpbnB1dExlbiA8PSAwKQogICAgIHJldHVybjsKIAogICBzaXplX3QgbnVtQmxvY2tzID0g
aW5wdXRMZW4vMTY7Ci0jaWZkZWYgVVNFX1NTRQorI2lmIGRlZmluZWQoVVNFX1NTRSkKICAgaWYg
KEFFU19OSSkKICAgewogICAgIGJsb2NrRW5jcnlwdFNTRShpbnB1dCxudW1CbG9ja3Msb3V0QnVm
ZmVyKTsKICAgICByZXR1cm47CiAgIH0KKyNlbGlmIGRlZmluZWQoVVNFX05FT04pCisgIGlmIChB
RVNfTmVvbikKKyAgeworICAgIGJsb2NrRW5jcnlwdE5lb24oaW5wdXQsbnVtQmxvY2tzLG91dEJ1
ZmZlcik7CisgICAgcmV0dXJuOworICB9CiAjZW5kaWYKICAgCiAgIGJ5dGUgKnByZXZCbG9jayA9
IG1faW5pdFZlY3RvcjsKQEAgLTIzOSw2ICsyNDgsNDAgQEAKIH0KICNlbmRpZgogCisKKyNpZmRl
ZiBVU0VfTkVPTgordm9pZCBSaWpuZGFlbDo6YmxvY2tFbmNyeXB0TmVvbihjb25zdCBieXRlICpp
bnB1dCxzaXplX3QgbnVtQmxvY2tzLGJ5dGUgKm91dEJ1ZmZlcikKK3sKKyAgYnl0ZSAqcHJldkJs
b2NrID0gbV9pbml0VmVjdG9yOworICB3aGlsZSAobnVtQmxvY2tzID4gMCkKKyAgeworICAgIGJ5
dGUgYmxvY2tbMTZdOworICAgIGlmIChDQkNNb2RlKQorICAgICAgdnN0MXFfdTgoYmxvY2ssIHZl
b3JxX3U4KHZsZDFxX3U4KHByZXZCbG9jayksIHZsZDFxX3U4KGlucHV0KSkpOworICAgIGVsc2UK
KyAgICAgIHZzdDFxX3U4KGJsb2NrLCB2bGQxcV91OChpbnB1dCkpOworCisgICAgdWludDh4MTZf
dCBkYXRhID0gdmxkMXFfdTgoYmxvY2spOworICAgIGZvciAodWludCBpID0gMDsgaSA8IG1fdVJv
dW5kcy0xOyBpKyspCisgICAgeworICAgICAgZGF0YSA9IHZhZXNlcV91OChkYXRhLCB2bGQxcV91
OCgoYnl0ZSAqKW1fZXhwYW5kZWRLZXlbaV0pKTsKKyAgICAgIGRhdGEgPSB2YWVzbWNxX3U4KGRh
dGEpOworICAgIH0KKyAgICBkYXRhID0gdmFlc2VxX3U4KGRhdGEsIHZsZDFxX3U4KChieXRlICop
KG1fZXhwYW5kZWRLZXlbbV91Um91bmRzLTFdKSkpOworICAgIGRhdGEgPSB2ZW9ycV91OChkYXRh
LCB2bGQxcV91OCgoYnl0ZSAqKShtX2V4cGFuZGVkS2V5W21fdVJvdW5kc10pKSk7CisgICAgdnN0
MXFfdTgob3V0QnVmZmVyLCBkYXRhKTsKKworICAgIHByZXZCbG9jaz1vdXRCdWZmZXI7CisKKyAg
ICBvdXRCdWZmZXIgKz0gMTY7CisgICAgaW5wdXQgKz0gMTY7CisgICAgbnVtQmxvY2tzLS07Cisg
IH0KKyAgdnN0MXFfdTgobV9pbml0VmVjdG9yLCB2bGQxcV91OChwcmV2QmxvY2spKTsKKyAgcmV0
dXJuOworfQorI2VuZGlmCisKICAgCiB2b2lkIFJpam5kYWVsOjpibG9ja0RlY3J5cHQoY29uc3Qg
Ynl0ZSAqaW5wdXQsIHNpemVfdCBpbnB1dExlbiwgYnl0ZSAqb3V0QnVmZmVyKQogewpAQCAtMjQ2
LDEyICsyODksMTggQEAKICAgICByZXR1cm47CiAKICAgc2l6ZV90IG51bUJsb2Nrcz1pbnB1dExl
bi8xNjsKLSNpZmRlZiBVU0VfU1NFCisjaWYgZGVmaW5lZChVU0VfU1NFKQogICBpZiAoQUVTX05J
KQogICB7CiAgICAgYmxvY2tEZWNyeXB0U1NFKGlucHV0LG51bUJsb2NrcyxvdXRCdWZmZXIpOwog
ICAgIHJldHVybjsKICAgfQorI2VsaWYgZGVmaW5lZChVU0VfTkVPTikKKyAgaWYgKEFFU19OZW9u
KQorICB7CisgICAgYmxvY2tEZWNyeXB0TmVvbihpbnB1dCxudW1CbG9ja3Msb3V0QnVmZmVyKTsK
KyAgICByZXR1cm47CisgIH0KICNlbmRpZgogCiAgIGJ5dGUgYmxvY2tbMTZdLCBpdls0XVs0XTsK
QEAgLTMzOSw2ICszODgsNDEgQEAKICAgICBudW1CbG9ja3MtLTsKICAgfQogICBfbW1fc3RvcmV1
X3NpMTI4KChfX20xMjhpKiltX2luaXRWZWN0b3IsaW5pdFZlY3Rvcik7Cit9CisjZW5kaWYKKwor
CisjaWZkZWYgVVNFX05FT04KK3ZvaWQgUmlqbmRhZWw6OmJsb2NrRGVjcnlwdE5lb24oY29uc3Qg
Ynl0ZSAqaW5wdXQsIHNpemVfdCBudW1CbG9ja3MsIGJ5dGUgKm91dEJ1ZmZlcikKK3sKKyAgYnl0
ZSBpdlsxNl07CisgIG1lbWNweShpdixtX2luaXRWZWN0b3IsMTYpOworCisgIHdoaWxlIChudW1C
bG9ja3MgPiAwKQorICB7CisgICAgdWludDh4MTZfdCBkYXRhID0gdmxkMXFfdTgoaW5wdXQpOwor
CisgICAgZm9yIChpbnQgaT1tX3VSb3VuZHMtMTsgaT4wOyBpLS0pCisgICAgeworICAgICAgZGF0
YSA9IHZhZXNkcV91OChkYXRhLCB2bGQxcV91OCgoYnl0ZSAqKW1fZXhwYW5kZWRLZXlbaSsxXSkp
OworICAgICAgZGF0YSA9IHZhZXNpbWNxX3U4KGRhdGEpOworICAgIH0KKworICAgIGRhdGEgPSB2
YWVzZHFfdTgoZGF0YSwgdmxkMXFfdTgoKGJ5dGUgKiltX2V4cGFuZGVkS2V5WzFdKSk7CisgICAg
ZGF0YSA9IHZlb3JxX3U4KGRhdGEsIHZsZDFxX3U4KChieXRlICopbV9leHBhbmRlZEtleVswXSkp
OworCisgICAgaWYgKENCQ01vZGUpCisgICAgICBkYXRhID0gdmVvcnFfdTgoZGF0YSwgdmxkMXFf
dTgoaXYpKTsKKworICAgIHZzdDFxX3U4KGl2LCB2bGQxcV91OChpbnB1dCkpOworICAgIHZzdDFx
X3U4KG91dEJ1ZmZlciwgZGF0YSk7CisKKyAgICBpbnB1dCArPSAxNjsKKyAgICBvdXRCdWZmZXIg
Kz0gMTY7CisgICAgbnVtQmxvY2tzLS07CisgIH0KKworICBtZW1jcHkobV9pbml0VmVjdG9yLGl2
LDE2KTsKIH0KICNlbmRpZgogCmRpZmYgLXVyIHVucmFyLTYuMS43L3Jpam5kYWVsLmhwcCB1bnJh
ci02LjIuNy9yaWpuZGFlbC5ocHAKLS0tIHVucmFyLTYuMS43L3Jpam5kYWVsLmhwcAkyMDIyLTEw
LTE5IDIyOjA1OjEyCisrKyB1bnJhci02LjIuNy9yaWpuZGFlbC5ocHAJMjAyMy0wNS0xNCAxMzox
MDozNQpAQCAtMTgsNiArMTgsMTYgQEAKIAogICAgIGJvb2wgQUVTX05JOwogI2VuZGlmCisjaWZk
ZWYgVVNFX05FT04KKyAgICAvLyBTZXQgImNyeXB0byIgYXR0cmlidXRlIGFzIHJlcGxhY2VtZW50
IG9mIC1tYXJjaD1hcm12OC1hK2NyeXB0byBzd2l0Y2guCisgICAgX19hdHRyaWJ1dGVfXygodGFy
Z2V0KCJjcnlwdG8iKSkpCisgICAgdm9pZCBibG9ja0VuY3J5cHROZW9uKGNvbnN0IGJ5dGUgKmlu
cHV0LHNpemVfdCBudW1CbG9ja3MsYnl0ZSAqb3V0QnVmZmVyKTsKKyAgICBfX2F0dHJpYnV0ZV9f
KCh0YXJnZXQoImNyeXB0byIpKSkKKyAgICB2b2lkIGJsb2NrRGVjcnlwdE5lb24oY29uc3QgYnl0
ZSAqaW5wdXQsIHNpemVfdCBudW1CbG9ja3MsIGJ5dGUgKm91dEJ1ZmZlcik7CisKKyAgICBib29s
IEFFU19OZW9uOworI2VuZGlmCisKICAgICB2b2lkIGtleVNjaGVkKGJ5dGUga2V5W19NQVhfS0VZ
X0NPTFVNTlNdWzRdKTsKICAgICB2b2lkIGtleUVuY1RvRGVjKCk7CiAgICAgdm9pZCBHZW5lcmF0
ZVRhYmxlcygpOwpkaWZmIC11ciB1bnJhci02LjEuNy9zY2FudHJlZS5jcHAgdW5yYXItNi4yLjcv
c2NhbnRyZWUuY3BwCi0tLSB1bnJhci02LjEuNy9zY2FudHJlZS5jcHAJMjAyMi0xMC0xOSAyMjow
NToxMgorKysgdW5yYXItNi4yLjcvc2NhbnRyZWUuY3BwCTIwMjMtMDUtMTQgMTM6MTA6MzUKQEAg
LTIxNSwxMCArMjE1LDIxIEBACiAgIFVuaXhTbGFzaFRvRG9zKEN1ck1hc2ssQ3VyTWFzayxBU0la
RShDdXJNYXNrKSk7CiAjZW5kaWYKIAotICAvLyBXZSB3aXNoIHRvIHNjYW4gZW50aXJlIGRpc2sg
aWYgbWFzayBsaWtlIGM6XCBpcyBzcGVjaWZpZWQKLSAgLy8gcmVnYXJkbGVzcyBvZiByZWN1cnNp
b24gbW9kZS4gVXNlIGM6XCouKiBtYXNrIHdoZW4gbmVlZCB0byBzY2FuIG9ubHkgCi0gIC8vIHRo
ZSByb290IGRpcmVjdG9yeS4KLSAgU2NhbkVudGlyZURpc2s9SXNEcml2ZUxldHRlcihDdXJNYXNr
KSAmJiBJc1BhdGhEaXYoQ3VyTWFza1syXSkgJiYgQ3VyTWFza1szXT09MDsKKyAgLy8gV2UgcHJl
ZmVyIHRvIHNjYW4gZW50aXJlIGRpc2sgaWYgbWFzayBsaWtlIFxcc2VydmVyXHNoYXJlXCBvciBj
OlwKKyAgLy8gaXMgc3BlY2lmaWVkIHJlZ2FyZGxlc3Mgb2YgcmVjdXJzaW9uIG1vZGUuIFVzZSBc
XHNlcnZlclxzaGFyZVwqLioKKyAgLy8gb3IgYzpcKi4qIG1hc2sgdG8gc2NhbiBvbmx5IHRoZSBy
b290IGRpcmVjdG9yeS4KKyAgaWYgKEN1ck1hc2tbMF09PSdcXCcgJiYgQ3VyTWFza1sxXT09J1xc
JykKKyAgeworICAgIGNvbnN0IHdjaGFyICpTbGFzaD13Y3NjaHIoQ3VyTWFzaysyLCdcXCcpOwor
ICAgIGlmIChTbGFzaCE9TlVMTCkKKyAgICB7CisgICAgICBTbGFzaD13Y3NjaHIoU2xhc2grMSwn
XFwnKTsKKyAgICAgIFNjYW5FbnRpcmVEaXNrPVNsYXNoIT1OVUxMICYmICooU2xhc2grMSk9PTA7
CisgICAgfQorICB9CisgIGVsc2UKKyAgICBTY2FuRW50aXJlRGlzaz1Jc0RyaXZlTGV0dGVyKEN1
ck1hc2spICYmIElzUGF0aERpdihDdXJNYXNrWzJdKSAmJiBDdXJNYXNrWzNdPT0wOworCiAKICAg
d2NoYXIgKk5hbWU9UG9pbnRUb05hbWUoQ3VyTWFzayk7CiAgIGlmICgqTmFtZT09MCkKZGlmZiAt
dXIgdW5yYXItNi4xLjcvc2VjcGFzc3dvcmQuY3BwIHVucmFyLTYuMi43L3NlY3Bhc3N3b3JkLmNw
cAotLS0gdW5yYXItNi4xLjcvc2VjcGFzc3dvcmQuY3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysr
IHVucmFyLTYuMi43L3NlY3Bhc3N3b3JkLmNwcAkyMDIzLTA1LTE0IDEzOjEwOjM1CkBAIC01Niw3
ICs1Niw2IEBACiAKIFNlY1Bhc3N3b3JkOjpTZWNQYXNzd29yZCgpCiB7Ci0gIENyb3NzUHJvY2Vz
cz1mYWxzZTsKICAgU2V0KEwiIik7CiB9CiAKQEAgLTcwLDcgKzY5LDggQEAKIHZvaWQgU2VjUGFz
c3dvcmQ6OkNsZWFuKCkKIHsKICAgUGFzc3dvcmRTZXQ9ZmFsc2U7Ci0gIGNsZWFuZGF0YShQYXNz
d29yZCxzaXplb2YoUGFzc3dvcmQpKTsKKyAgaWYgKFBhc3N3b3JkLnNpemUoKT4wKQorICAgIGNs
ZWFuZGF0YSgmUGFzc3dvcmRbMF0sUGFzc3dvcmQuc2l6ZSgpKTsKIH0KICAKIApAQCAtMTA0LDcg
KzEwNCw3IEBACiAgIC8vIFNvdXJjZSBzdHJpbmcgY2FuIGJlIHNob3J0ZXIgdGhhbiBkZXN0aW5h
dGlvbiBhcyBpbiBjYXNlIHdoZW4gd2UgcHJvY2VzcwogICAvLyAtcDxwd2Q+IHBhcmFtZXRlciwg
c28gd2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCBib3RoIHNpemVzLgogICBtZW1jcHkoRHN0
LFNyYyxNaW4oU3JjU2l6ZSxEc3RTaXplKSpzaXplb2YoKkRzdCkpOwotICBTZWNIaWRlRGF0YShE
c3QsRHN0U2l6ZSpzaXplb2YoKkRzdCksRW5jb2RlLENyb3NzUHJvY2Vzcyk7CisgIFNlY0hpZGVE
YXRhKERzdCxEc3RTaXplKnNpemVvZigqRHN0KSxFbmNvZGUsZmFsc2UpOwogfQogCiAKQEAgLTEx
Miw3ICsxMTIsNyBAQAogewogICBpZiAoUGFzc3dvcmRTZXQpCiAgIHsKLSAgICBQcm9jZXNzKFBh
c3N3b3JkLEFTSVpFKFBhc3N3b3JkKSxQc3csTWF4U2l6ZSxmYWxzZSk7CisgICAgUHJvY2Vzcygm
UGFzc3dvcmRbMF0sUGFzc3dvcmQuc2l6ZSgpLFBzdyxNYXhTaXplLGZhbHNlKTsKICAgICBQc3db
TWF4U2l6ZS0xXT0wOwogICB9CiAgIGVsc2UKQEAgLTEyNCwxNSArMTI0LDE0IEBACiAKIHZvaWQg
U2VjUGFzc3dvcmQ6OlNldChjb25zdCB3Y2hhciAqUHN3KQogewotICBpZiAoKlBzdz09MCkKKyAg
Ly8gRWxpbWluYXRlIGFueSB0cmFjZXMgb2YgcHJldmlvdXNseSBzdG9yZWQgcGFzc3dvcmQgZm9y
IHNlY3VyaXR5IHJlYXNvbgorICAvLyBpbiBjYXNlIGl0IHdhcyBsb25nZXIgdGhhbiBuZXcgb25l
LgorICBDbGVhbigpOworCisgIGlmICgqUHN3IT0wKQogICB7Ci0gICAgUGFzc3dvcmRTZXQ9ZmFs
c2U7Ci0gICAgbWVtc2V0KFBhc3N3b3JkLDAsc2l6ZW9mKFBhc3N3b3JkKSk7Ci0gIH0KLSAgZWxz
ZQotICB7CiAgICAgUGFzc3dvcmRTZXQ9dHJ1ZTsKLSAgICBQcm9jZXNzKFBzdyx3Y3NsZW4oUHN3
KSsxLFBhc3N3b3JkLEFTSVpFKFBhc3N3b3JkKSx0cnVlKTsKKyAgICBQcm9jZXNzKFBzdyx3Y3Ns
ZW4oUHN3KSsxLCZQYXNzd29yZFswXSxQYXNzd29yZC5zaXplKCksdHJ1ZSk7CiAgIH0KIH0KIApA
QCAtMTYzLDYgKzE2Miw5IEBACiB9CiAKIAorLy8gU2V0IENyb3NzUHJvY2VzcyB0byB0cnVlIGlm
IHdlIG5lZWQgdG8gcGFzcyBhIHBhc3N3b3JkIHRvIGFub3RoZXIgcHJvY2Vzcy4KKy8vIFdlIHVz
ZSBDcm9zc1Byb2Nlc3Mgd2hlbiB0cmFuc2ZlcnJpbmcgcGFyYW1ldGVycyB0byBVQUMgZWxldmF0
ZWQgV2luUkFSCisvLyBhbmQgV2luZG93cyBHVUkgU0ZYIG1vZHVsZXMuCiB2b2lkIFNlY0hpZGVE
YXRhKHZvaWQgKkRhdGEsc2l6ZV90IERhdGFTaXplLGJvb2wgRW5jb2RlLGJvb2wgQ3Jvc3NQcm9j
ZXNzKQogewogICAvLyBDcnlwdFByb3RlY3RNZW1vcnkgaXMgbm90IGF2YWlsYWJsZSBpbiBVV1Ag
YW5kIENyeXB0UHJvdGVjdERhdGEKZGlmZiAtdXIgdW5yYXItNi4xLjcvc2VjcGFzc3dvcmQuaHBw
IHVucmFyLTYuMi43L3NlY3Bhc3N3b3JkLmhwcAotLS0gdW5yYXItNi4xLjcvc2VjcGFzc3dvcmQu
aHBwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L3NlY3Bhc3N3b3JkLmhwcAky
MDIzLTA1LTE0IDEzOjEwOjM1CkBAIC04LDEwICs4LDcgQEAKICAgcHJpdmF0ZToKICAgICB2b2lk
IFByb2Nlc3MoY29uc3Qgd2NoYXIgKlNyYyxzaXplX3QgU3JjU2l6ZSx3Y2hhciAqRHN0LHNpemVf
dCBEc3RTaXplLGJvb2wgRW5jb2RlKTsKIAotICAgIHdjaGFyIFBhc3N3b3JkW01BWFBBU1NXT1JE
XTsKLQotICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byBoYXZlIHRoaXMgJ2Jvb2wnIHZhbHVlLCBz
byBpZiBvdXIgb2JqZWN0IGlzIGNsZWFuZWQKLSAgICAvLyB3aXRoIG1lbXNldCBhcyBhIHBhcnQg
b2YgbGFyZ2VyIHN0cnVjdHVyZSwgaXQgaXMgaGFuZGxlZCBjb3JyZWN0bHkuCisgICAgc3RkOjp2
ZWN0b3I8d2NoYXI+IFBhc3N3b3JkID0gc3RkOjp2ZWN0b3I8d2NoYXI+KE1BWFBBU1NXT1JEKTsK
ICAgICBib29sIFBhc3N3b3JkU2V0OwogICBwdWJsaWM6CiAgICAgU2VjUGFzc3dvcmQoKTsKQEAg
LTIyLDEwICsxOSw2IEBACiAgICAgYm9vbCBJc1NldCgpIHtyZXR1cm4gUGFzc3dvcmRTZXQ7fQog
ICAgIHNpemVfdCBMZW5ndGgoKTsKICAgICBib29sIG9wZXJhdG9yID09IChTZWNQYXNzd29yZCAm
cHN3KTsKLQotICAgIC8vIFNldCB0byB0cnVlIGlmIHdlIG5lZWQgdG8gcGFzcyBhIHBhc3N3b3Jk
IHRvIGFub3RoZXIgcHJvY2Vzcy4KLSAgICAvLyBXZSB1c2UgaXQgd2hlbiB0cmFuc2ZlcnJpbmcg
cGFyYW1ldGVycyB0byBVQUMgZWxldmF0ZWQgV2luUkFSLgotICAgIGJvb2wgQ3Jvc3NQcm9jZXNz
OwogfTsKIAogCmRpZmYgLXVyIHVucmFyLTYuMS43L3N0cmZuLmNwcCB1bnJhci02LjIuNy9zdHJm
bi5jcHAKLS0tIHVucmFyLTYuMS43L3N0cmZuLmNwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisrKyB1
bnJhci02LjIuNy9zdHJmbi5jcHAJMjAyMy0wNS0xNCAxMzoxMDozNQpAQCAtMzU3LDYgKzM1Nywz
MiBAQAogfQogCiAKKy8vIENvbnZlcnQgdGhlIG51bWJlciB0byBzdHJpbmcgdXNpbmcgdGhvdXNh
bmQgc2VwYXJhdG9ycy4KK3ZvaWQgZm10aXRvYShpbnQ2NCBuLHdjaGFyICpTdHIsc2l6ZV90IE1h
eFNpemUpCit7CisgIHN0YXRpYyB3Y2hhciBUaFNlcD0wOyAvLyBUaG91c2FuZHMgc2VwYXJhdG9y
LgorI2lmZGVmIF9XSU5fQUxMCisgIHdjaGFyIEluZm9bMTBdOworICBpZiAoIVRoU2VwIT0wICYm
IEdldExvY2FsZUluZm8oTE9DQUxFX1VTRVJfREVGQVVMVCxMT0NBTEVfU1RIT1VTQU5ELEluZm8s
QVNJWkUoSW5mbykpPjApCisgICAgVGhTZXA9KkluZm87CisjZWxpZiBkZWZpbmVkKF9VTklYKQor
ICBUaFNlcD0qbG9jYWxlY29udigpLT50aG91c2FuZHNfc2VwOworI2VuZGlmCisgIGlmIChUaFNl
cD09MCkgLy8gSWYgZmFpbGVkIHRvIGRldGVjdCB0aGUgYWN0dWFsIHNlcGFyYXRvciB2YWx1ZS4K
KyAgICBUaFNlcD0nICc7CisgIHdjaGFyIFJhd1RleHRbMzBdOyAvLyAyMCBjaGFyYWN0ZXJzIGFy
ZSBlbm91Z2ggZm9yIGxhcmdlc3QgdW5zaWduZWQgNjQgYml0IGludC4KKyAgaXRvYShuLFJhd1Rl
eHQsQVNJWkUoUmF3VGV4dCkpOworICB1aW50IFM9MCxEPTAsTD13Y3NsZW4oUmF3VGV4dCklMzsK
KyAgd2hpbGUgKFJhd1RleHRbU10hPTAgJiYgRCsxPE1heFNpemUpCisgIHsKKyAgICBpZiAoUyE9
MCAmJiAoUyszLUwpJTM9PTApCisgICAgICBTdHJbRCsrXT1UaFNlcDsKKyAgICBTdHJbRCsrXT1S
YXdUZXh0W1MrK107CisgIH0KKyAgU3RyW0RdPTA7Cit9CisKKwogY29uc3Qgd2NoYXIqIEdldFdp
ZGUoY29uc3QgY2hhciAqU3JjKQogewogICBjb25zdCBzaXplX3QgTWF4TGVuZ3RoPU5NOwpkaWZm
IC11ciB1bnJhci02LjEuNy9zdHJmbi5ocHAgdW5yYXItNi4yLjcvc3RyZm4uaHBwCi0tLSB1bnJh
ci02LjEuNy9zdHJmbi5ocHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysgdW5yYXItNi4yLjcvc3Ry
Zm4uaHBwCTIwMjMtMDUtMTQgMTM6MTA6MzUKQEAgLTQyLDYgKzQyLDcgQEAKIAogdm9pZCBpdG9h
KGludDY0IG4sY2hhciAqU3RyLHNpemVfdCBNYXhTaXplKTsKIHZvaWQgaXRvYShpbnQ2NCBuLHdj
aGFyICpTdHIsc2l6ZV90IE1heFNpemUpOwordm9pZCBmbXRpdG9hKGludDY0IG4sd2NoYXIgKlN0
cixzaXplX3QgTWF4U2l6ZSk7CiBjb25zdCB3Y2hhciogR2V0V2lkZShjb25zdCBjaGFyICpTcmMp
OwogY29uc3Qgd2NoYXIqIEdldENtZFBhcmFtKGNvbnN0IHdjaGFyICpDbWRMaW5lLHdjaGFyICpQ
YXJhbSxzaXplX3QgTWF4U2l6ZSk7CiAjaWZuZGVmIFJBUkRMTApkaWZmIC11ciB1bnJhci02LjEu
Ny9zeXN0ZW0uY3BwIHVucmFyLTYuMi43L3N5c3RlbS5jcHAKLS0tIHVucmFyLTYuMS43L3N5c3Rl
bS5jcHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysgdW5yYXItNi4yLjcvc3lzdGVtLmNwcAkyMDIz
LTA1LTE0IDEzOjEwOjM1CkBAIC0xODcsMTAgKzE4NywxMCBAQAogU1NFX1ZFUlNJT04gR2V0U1NF
VmVyc2lvbigpCiB7CiAgIGludCBDUFVJbmZvWzRdOwotICBfX2NwdWlkKENQVUluZm8sIDB4ODAw
MDAwMDApOworICBfX2NwdWlkKENQVUluZm8sIDApOwogCi0gIC8vIE1heGltdW0gc3VwcG9ydGVk
IGNwdWlkIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSwgUGVudGl1bSBNIDc1NSByZXR1cm5zIDQgaGVy
ZS4KLSAgdWludCBNYXhTdXBwb3J0ZWQ9Q1BVSW5mb1swXSAmIDB4N2ZmZmZmZmY7CisgIC8vIE1h
eGltdW0gc3VwcG9ydGVkIGNwdWlkIGZ1bmN0aW9uLgorICB1aW50IE1heFN1cHBvcnRlZD1DUFVJ
bmZvWzBdOwogCiAgIGlmIChNYXhTdXBwb3J0ZWQ+PTcpCiAgIHsKZGlmZiAtdXIgdW5yYXItNi4x
LjcvdGhyZWFkbWlzYy5jcHAgdW5yYXItNi4yLjcvdGhyZWFkbWlzYy5jcHAKLS0tIHVucmFyLTYu
MS43L3RocmVhZG1pc2MuY3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L3Ro
cmVhZG1pc2MuY3BwCTIwMjMtMDUtMTQgMTM6MTA6MzUKQEAgLTE0OSwzICsxNDksNSBAQAogICBy
ZXR1cm4gTnVtQ1BVOwogfQogCisKKwpkaWZmIC11ciB1bnJhci02LjEuNy90aW1lZm4uaHBwIHVu
cmFyLTYuMi43L3RpbWVmbi5ocHAKLS0tIHVucmFyLTYuMS43L3RpbWVmbi5ocHAJMjAyMi0xMC0x
OSAyMjowNToxMgorKysgdW5yYXItNi4yLjcvdGltZWZuLmhwcAkyMDIzLTA1LTE0IDEzOjEwOjM1
CkBAIC0yMiw2ICsyMiwxNyBAQAogCiAgICAgLy8gSW50ZXJuYWwgdGltZSByZXByZXNlbnRhdGlv
biBpbiAxL1RJQ0tTX1BFUl9TRUNPTkQgc2luY2UgMDEuMDEuMTYwMS4KICAgICAvLyBXZSB1c2Ug
bmFub3NlY29uZHMgaGVyZSB0byBoYW5kbGUgdGhlIGhpZ2ggcHJlY2lzaW9uIFVuaXggdGltZS4K
KyAgICAvLyBJdCBhbGxvd3MgZGF0ZXMgdXAgdG8gSnVseSAyMTg1LgorICAgIC8vCisgICAgLy8g
SWYgd2UnbGwgZXZlciBuZWVkIHRvIGV4dGVuZCB0aGUgZGF0ZSByYW5nZSwgd2UgY2FuIGRlZmlu
ZSBhIGxvd2VyCisgICAgLy8gcHJlY2lzaW9uIFdpbmRvd3MgdmVyc2lvbiBvZiBUSUNLU19QRVJf
U0VDT05ELiBCdXQgdGhlbiBVbml4IGFuZCBXaW5kb3dzCisgICAgLy8gdmVyc2lvbnMgY2FuIGRp
ZmZlciBpbiBsZWFzdCBzaWduaWZpY2FudCBkaWdpdHMgb2YgImx0IiB0aW1lIG91dHB1dAorICAg
IC8vIGZvciBVbml4IGFyY2hpdmVzLgorICAgIC8vIEFsdGVybmF0aXZlbHkgd2UgY2FuIGludHJv
ZHVjZSAnYm9vbCBIaWdoUHJlY2lzaW9uJyBzZXQgdG8gdHJ1ZQorICAgIC8vIGluIFNldFVuaXhO
UygpIGFuZCBUaWNrc1BlclNlY29uZCgpIGluc3RlYWQgb2YgY29uc3RhbnQgYWJvdmUuCisgICAg
Ly8gSXQgbWlnaHQgYmUgbW9yZSByZWxpYWJsZSB0aGFuIGRlZmluaW5nIFRpY2tzUGVyU2Vjb25k
IHZhcmlhYmxlLAorICAgIC8vIHdoaWNoIHdvdWxkbid0IHN1cnZpdmUgbWVtc2V0IG9mIGFueSBz
dHJ1Y3R1cmUgaG9zdGluZyBSYXJUaW1lLgorICAgIC8vIFdlIHdvdWxkIG5lZWQgdG8gZWxpbWlu
YXRlIGFsbCBzdWNoIG1lbXNldHMgaW4gdGhlIGVudGlyZSBjb2RlIGZpcnN0LgogICAgIHVpbnQ2
NCBpdGltZTsKICAgcHVibGljOgogICAgIC8vIFJhckxvY2FsVGltZTo6UmVtaW5kZXIgcHJlY2lz
aW9uLiBNdXN0IGJlIGVxdWFsIHRvIFRJQ0tTX1BFUl9TRUNPTkQuCmRpZmYgLXVyIHVucmFyLTYu
MS43L3VpLmhwcCB1bnJhci02LjIuNy91aS5ocHAKLS0tIHVucmFyLTYuMS43L3VpLmhwcAkyMDIy
LTEwLTE5IDIyOjA1OjEyCisrKyB1bnJhci02LjIuNy91aS5ocHAJMjAyMy0wNS0xNCAxMzoxMDoz
NQpAQCAtNDksNyArNDksNyBAQAogICBVSU1TR19DT1JSRUNUSU5HTkFNRSwgVUlNU0dfQkFEQVJD
SElWRSwgVUlNU0dfQ1JFQVRJTkcsIFVJTVNHX1JFTkFNSU5HLAogICBVSU1TR19SRUNWT0xDQUxD
Q0hFQ0tTVU0sIFVJTVNHX1JFQ1ZPTEZPVU5ELCBVSU1TR19SRUNWT0xNSVNTSU5HLAogICBVSU1T
R19NSVNTSU5HVk9MLCBVSU1TR19SRUNPTlNUUlVDVElORywgVUlNU0dfQ0hFQ0tTVU0sIFVJTVNH
X0ZBVDMyU0laRSwKLSAgVUlNU0dfU0tJUEVOQ0FSQywKKyAgVUlNU0dfU0tJUEVOQ0FSQywgVUlN
U0dfRklMRVJFTkFNRSwKIAogICBVSVdBSVRfRklSU1QsCiAgIFVJV0FJVF9ESVNLRlVMTE5FWFQs
IFVJV0FJVF9GQ1JFQVRFRVJST1IsIFVJV0FJVF9CQURQU1csCkBAIC03Nyw3ICs3Nyw3IEBACiB9
OwogCiBVSUFTS1JFUF9SRVNVTFQgdWlBc2tSZXBsYWNlKHdjaGFyICpOYW1lLHNpemVfdCBNYXhO
YW1lU2l6ZSxpbnQ2NCBGaWxlU2l6ZSxSYXJUaW1lICpGaWxlVGltZSx1aW50IEZsYWdzKTsKLVVJ
QVNLUkVQX1JFU1VMVCB1aUFza1JlcGxhY2VFeChSQVJPcHRpb25zICpDbWQsd2NoYXIgKk5hbWUs
c2l6ZV90IE1heE5hbWVTaXplLGludDY0IEZpbGVTaXplLFJhclRpbWUgKkZpbGVUaW1lLHVpbnQg
RmxhZ3MpOworVUlBU0tSRVBfUkVTVUxUIHVpQXNrUmVwbGFjZUV4KENvbW1hbmREYXRhICpDbWQs
d2NoYXIgKk5hbWUsc2l6ZV90IE1heE5hbWVTaXplLGludDY0IEZpbGVTaXplLFJhclRpbWUgKkZp
bGVUaW1lLHVpbnQgRmxhZ3MpOwogCiB2b2lkIHVpSW5pdChTT1VORF9OT1RJRllfTU9ERSBTb3Vu
ZCk7CiAKQEAgLTg4LDcgKzg4LDcgQEAKIHZvaWQgdWlQcm9jZXNzUHJvZ3Jlc3MoY29uc3QgY2hh
ciAqQ29tbWFuZCxpbnQ2NCBDdXJTaXplLGludDY0IFRvdGFsU2l6ZSk7CiAKIGVudW0gVUlQQVNT
V09SRF9UWVBFIHtVSVBBU1NXT1JEX0dMT0JBTCxVSVBBU1NXT1JEX0ZJTEUsVUlQQVNTV09SRF9B
UkNISVZFfTsKLWJvb2wgdWlHZXRQYXNzd29yZChVSVBBU1NXT1JEX1RZUEUgVHlwZSxjb25zdCB3
Y2hhciAqRmlsZU5hbWUsU2VjUGFzc3dvcmQgKlBhc3N3b3JkKTsKK2Jvb2wgdWlHZXRQYXNzd29y
ZChVSVBBU1NXT1JEX1RZUEUgVHlwZSxjb25zdCB3Y2hhciAqRmlsZU5hbWUsU2VjUGFzc3dvcmQg
KlBhc3N3b3JkLENoZWNrUGFzc3dvcmQgKkNoZWNrUHdkKTsKIGJvb2wgdWlJc0dsb2JhbFBhc3N3
b3JkU2V0KCk7CiAKIGVudW0gVUlBTEFSTV9UWVBFIHtVSUFMQVJNX0VSUk9SLCBVSUFMQVJNX0lO
Rk8sIFVJQUxBUk1fUVVFU1RJT059OwpAQCAtMTQ1LDMwICsxNDUsMzEgQEAKIC8vIFRlbXBsYXRl
cyByZWNvZ25pemUgdXN1YWwgTlVMTCBhcyBpbnRlZ2VyLCBub3Qgd2NoYXIqLgogI2RlZmluZSBV
SU5VTEwgKCh3Y2hhciAqKU5VTEwpCiAKLWlubGluZSB2b2lkIHVpTXNnKFVJTUVTU0FHRV9DT0RF
IENvZGUpCitpbmxpbmUgdm9pZCB1aU1zZ0Jhc2UodWlNc2dTdG9yZSAmU3RvcmUpCiB7Ci0gIHVp
TXNnU3RvcmUgU3RvcmUoQ29kZSk7Ci0gIFN0b3JlLk1zZygpOworICAvLyBDYWxsZWQgbGFzdCwg
d2hlbiBubyBwYXJhbWV0ZXJzIGFyZSBsZWZ0LgogfQogCi10ZW1wbGF0ZTxjbGFzcyBUMT4gdm9p
ZCB1aU1zZyhVSU1FU1NBR0VfQ09ERSBDb2RlLFQxIGExKQordGVtcGxhdGU8Y2xhc3MgVDEsY2xh
c3MuLi4gVE4+IHZvaWQgdWlNc2dCYXNlKHVpTXNnU3RvcmUgJlN0b3JlLFQxJiYgYTEsVE4mJi4u
LiBhTikKIHsKLSAgdWlNc2dTdG9yZSBTdG9yZShDb2RlKTsKKyAgLy8gUHJvY2VzcyBmaXJzdCBw
YXJhbWV0ZXIgYW5kIHBhc3MgdGhlIHJlc3QgdG8gc2FtZSB1aU1zZ0Jhc2UuCiAgIFN0b3JlPDxh
MTsKLSAgU3RvcmUuTXNnKCk7CisgIHVpTXNnQmFzZShTdG9yZSxhTi4uLik7CiB9CiAKLXRlbXBs
YXRlPGNsYXNzIFQxLGNsYXNzIFQyPiB2b2lkIHVpTXNnKFVJTUVTU0FHRV9DT0RFIENvZGUsVDEg
YTEsVDIgYTIpCi17Ci0gIHVpTXNnU3RvcmUgU3RvcmUoQ29kZSk7Ci0gIFN0b3JlPDxhMTw8YTI7
Ci0gIFN0b3JlLk1zZygpOwotfQogCi10ZW1wbGF0ZTxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBU
Mz4gdm9pZCB1aU1zZyhVSU1FU1NBR0VfQ09ERSBjb2RlLFQxIGExLFQyIGEyLFQzIGEzKQorLy8g
VXNlIHZhcmlhZGljIHRlbXBsYXRlcy4KKy8vCisvLyBXZSBtdXN0IHBhc3MgdmFyaWFibGUgcGFy
YW1ldGVycyBieSByZWZlcmVuY2UsIHNvIG5vIHRlbXBvcmFyeSBjb3BpZXMgYXJlCisvLyBjcmVh
dGVkIGZvciBjdXN0b20gc3RyaW5nIG9iamVjdHMgbGlrZSBDU3RyaW5nQmFzZSBpbiA3LVppcCBk
ZWNvbXByZXNzaW9uCisvLyBjb2RlLiBTdWNoIHRlbXBvcmFyeSBjb3BpZXMgd291bGQgYmUgZGVz
dHJveWVkIGluc2lkZSBvZiByZWN1cnNpdmUKKy8vIHVpTXNnQmFzZSBjYWxscywgbGVhdmluZyB1
cyB3aXRoIFN0cltdIGl0ZW1zIHBvaW50aW5nIGF0IHJlbGVhc2VkIG1lbW9yeS4KKy8vIFNpbmNl
IHdlIHBhc3MgaW50ZWdlciB2YWx1ZXMgYXMgd2VsbCwgd2UgY2FuJ3QgdXNlICYgcmVmZXJlbmNl
cworLy8gYW5kIG11c3QgcmVzb3J0IHRvICYmIHJ2YWx1ZSByZWZlcmVuY2VzLgordGVtcGxhdGU8
Y2xhc3MuLi4gVE4+IHZvaWQgdWlNc2coVUlNRVNTQUdFX0NPREUgQ29kZSxUTiYmLi4uIGFOKQog
ewotICB1aU1zZ1N0b3JlIFN0b3JlKGNvZGUpOwotICBTdG9yZTw8YTE8PGEyPDxhMzsKKyAgdWlN
c2dTdG9yZSBTdG9yZShDb2RlKTsKKyAgdWlNc2dCYXNlKFN0b3JlLGFOLi4uKTsKICAgU3RvcmUu
TXNnKCk7CiB9CiAKZGlmZiAtdXIgdW5yYXItNi4xLjcvdWljb21tb24uY3BwIHVucmFyLTYuMi43
L3VpY29tbW9uLmNwcAotLS0gdW5yYXItNi4xLjcvdWljb21tb24uY3BwCTIwMjItMTAtMTkgMjI6
MDU6MTIKKysrIHVucmFyLTYuMi43L3VpY29tbW9uLmNwcAkyMDIzLTA1LTE0IDEzOjEwOjM1CkBA
IC04LDcgKzgsNyBAQAogCiAvLyBBZGRpdGlvbmFsbHkgdG8gaGFuZGxpbmcgdXNlciBpbnB1dCwg
aXQgYW5hbHl6ZXMgYW5kIHNldHMgY29tbWFuZCBvcHRpb25zLgogLy8gUmV0dXJucyBvbmx5ICdy
ZXBsYWNlJywgJ3NraXAnIGFuZCAnY2FuY2VsJyBjb2Rlcy4KLVVJQVNLUkVQX1JFU1VMVCB1aUFz
a1JlcGxhY2VFeChSQVJPcHRpb25zICpDbWQsd2NoYXIgKk5hbWUsc2l6ZV90IE1heE5hbWVTaXpl
LGludDY0IEZpbGVTaXplLFJhclRpbWUgKkZpbGVUaW1lLHVpbnQgRmxhZ3MpCitVSUFTS1JFUF9S
RVNVTFQgdWlBc2tSZXBsYWNlRXgoQ29tbWFuZERhdGEgKkNtZCx3Y2hhciAqTmFtZSxzaXplX3Qg
TWF4TmFtZVNpemUsaW50NjQgRmlsZVNpemUsUmFyVGltZSAqRmlsZVRpbWUsdWludCBGbGFncykK
IHsKICAgaWYgKENtZC0+T3ZlcndyaXRlPT1PVkVSV1JJVEVfTk9ORSkKICAgICByZXR1cm4gVUlB
U0tSRVBfUl9TS0lQOwpkaWZmIC11ciB1bnJhci02LjEuNy91aWNvbnNvbGUuY3BwIHVucmFyLTYu
Mi43L3VpY29uc29sZS5jcHAKLS0tIHVucmFyLTYuMS43L3VpY29uc29sZS5jcHAJMjAyMi0xMC0x
OSAyMjowNToxMgorKysgdW5yYXItNi4yLjcvdWljb25zb2xlLmNwcAkyMDIzLTA1LTE0IDEzOjEw
OjM1CkBAIC0yNjIsNiArMjYyLDcgQEAKICAgICAgIGJyZWFrOwogICAgIGNhc2UgVUlFUlJPUl9N
SVNTSU5HVk9MOgogICAgICAgTG9nKFN0clswXSxTdChNQWJzTmV4dFZvbCksU3RyWzBdKTsKKyAg
ICAgIG1wcmludGYoTCIgICAgICIpOyAvLyBGb3IgcHJvZ3Jlc3MgcGVyY2VudC4KICAgICAgIGJy
ZWFrOwogI2lmbmRlZiBTRlhfTU9EVUxFCiAgICAgY2FzZSBVSUVSUk9SX05FRURQUkVWVk9MOgpA
QCAtMzk1LDcgKzM5Niw4IEBACiB9CiAKIAotYm9vbCB1aUdldFBhc3N3b3JkKFVJUEFTU1dPUkRf
VFlQRSBUeXBlLGNvbnN0IHdjaGFyICpGaWxlTmFtZSxTZWNQYXNzd29yZCAqUGFzc3dvcmQpCiti
b29sIHVpR2V0UGFzc3dvcmQoVUlQQVNTV09SRF9UWVBFIFR5cGUsY29uc3Qgd2NoYXIgKkZpbGVO
YW1lLAorICAgICAgICAgICAgICAgICAgIFNlY1Bhc3N3b3JkICpQYXNzd29yZCxDaGVja1Bhc3N3
b3JkICpDaGVja1B3ZCkKIHsKICAgLy8gVW5saWtlIEdVSSB3ZSBjYW5ub3QgcHJvdmlkZSBDYW5j
ZWwgYnV0dG9uIGhlcmUsIHNvIHdlIHVzZSB0aGUgZW1wdHkKICAgLy8gcGFzc3dvcmQgdG8gYWJv
cnQuIE90aGVyd2lzZSB1c2VyIG5vdCBrbm93aW5nIGEgcGFzc3dvcmQgd291bGQgbmVlZCB0bwpk
aWZmIC11ciB1bnJhci02LjEuNy91aXNpbGVudC5jcHAgdW5yYXItNi4yLjcvdWlzaWxlbnQuY3Bw
Ci0tLSB1bnJhci02LjEuNy91aXNpbGVudC5jcHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysgdW5y
YXItNi4yLjcvdWlzaWxlbnQuY3BwCTIwMjMtMDUtMTQgMTM6MTA6MzUKQEAgLTMzLDcgKzMzLDgg
QEAKIH0KIAogCi1ib29sIHVpR2V0UGFzc3dvcmQoVUlQQVNTV09SRF9UWVBFIFR5cGUsY29uc3Qg
d2NoYXIgKkZpbGVOYW1lLFNlY1Bhc3N3b3JkICpQYXNzd29yZCkKK2Jvb2wgdWlHZXRQYXNzd29y
ZChVSVBBU1NXT1JEX1RZUEUgVHlwZSxjb25zdCB3Y2hhciAqRmlsZU5hbWUsCisgICAgICAgICAg
ICAgICAgICAgU2VjUGFzc3dvcmQgKlBhc3N3b3JkLENoZWNrUGFzc3dvcmQgKkNoZWNrUHdkKQog
ewogICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLXVyIHVucmFyLTYuMS43L3VsaW5rcy5jcHAgdW5y
YXItNi4yLjcvdWxpbmtzLmNwcAotLS0gdW5yYXItNi4xLjcvdWxpbmtzLmNwcAkyMDIyLTEwLTE5
IDIyOjA1OjEyCisrKyB1bnJhci02LjIuNy91bGlua3MuY3BwCTIwMjMtMDUtMTQgMTM6MTA6MzUK
QEAgLTcwLDcgKzcwLDggQEAKIH0KIAogCi1ib29sIEV4dHJhY3RVbml4TGluazMwKENvbW1hbmRE
YXRhICpDbWQsQ29tcHJEYXRhSU8gJkRhdGFJTyxBcmNoaXZlICZBcmMsY29uc3Qgd2NoYXIgKkxp
bmtOYW1lKQorc3RhdGljIGJvb2wgRXh0cmFjdFVuaXhMaW5rMzAoQ29tbWFuZERhdGEgKkNtZCxD
b21wckRhdGFJTyAmRGF0YUlPLEFyY2hpdmUgJkFyYywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHdjaGFyICpMaW5rTmFtZSxib29sICZVcExpbmspCiB7CiAgIGNoYXIgVGFy
Z2V0W05NXTsKICAgaWYgKElzTGluayhBcmMuRmlsZUhlYWQuRmlsZUF0dHIpKQpAQCAtMTAwLDEz
ICsxMDEsMTQgQEAKICAgICBpZiAoIUNtZC0+QWJzb2x1dGVMaW5rcyAmJiAoSXNGdWxsUGF0aChU
YXJnZXRXKSB8fAogICAgICAgICAhSXNSZWxhdGl2ZVN5bWxpbmtTYWZlKENtZCxBcmMuRmlsZUhl
YWQuRmlsZU5hbWUsTGlua05hbWUsVGFyZ2V0VykpKQogICAgICAgcmV0dXJuIGZhbHNlOworICAg
IFVwTGluaz1zdHJzdHIoVGFyZ2V0LCIuLiIpIT1OVUxMOwogICAgIHJldHVybiBVbml4U3ltbGlu
ayhDbWQsVGFyZ2V0LExpbmtOYW1lLCZBcmMuRmlsZUhlYWQubXRpbWUsJkFyYy5GaWxlSGVhZC5h
dGltZSk7CiAgIH0KICAgcmV0dXJuIGZhbHNlOwogfQogCiAKLWJvb2wgRXh0cmFjdFVuaXhMaW5r
NTAoQ29tbWFuZERhdGEgKkNtZCxjb25zdCB3Y2hhciAqTmFtZSxGaWxlSGVhZGVyICpoZCkKK3N0
YXRpYyBib29sIEV4dHJhY3RVbml4TGluazUwKENvbW1hbmREYXRhICpDbWQsY29uc3Qgd2NoYXIg
Kk5hbWUsRmlsZUhlYWRlciAqaGQpCiB7CiAgIGNoYXIgVGFyZ2V0W05NXTsKICAgV2lkZVRvQ2hh
cihoZC0+UmVkaXJOYW1lLFRhcmdldCxBU0laRShUYXJnZXQpKTsKQEAgLTEyNyw4ICsxMjksNiBA
QAogICAvLyBVc2UgaGQtPkZpbGVOYW1lIGluc3RlYWQgb2YgTGlua05hbWUsIHNpbmNlIExpbmtO
YW1lIGNhbiBpbmNsdWRlCiAgIC8vIHRoZSBkZXN0aW5hdGlvbiBwYXRoIGFzIGEgcHJlZml4LCB3
aGljaCBjYW4gY29uZnVzZQogICAvLyBJc1JlbGF0aXZlU3ltbGlua1NhZmUgYWxnb3JpdGhtLgot
ICAvLyAyMDIyLjA1LjA0OiBVc2UgVGFyZ2V0VyBpbnN0ZWFkIG9mIHByZXZpb3VzbHkgdXNlZCBo
ZC0+UmVkaXJOYW1lCi0gIC8vIGZvciBzZWN1cml0eSByZWFzb24uCiAgIGlmICghQ21kLT5BYnNv
bHV0ZUxpbmtzICYmIChJc0Z1bGxQYXRoKFRhcmdldFcpIHx8CiAgICAgICAhSXNSZWxhdGl2ZVN5
bWxpbmtTYWZlKENtZCxoZC0+RmlsZU5hbWUsTmFtZSxUYXJnZXRXKSkpCiAgICAgcmV0dXJuIGZh
bHNlOwpkaWZmIC11ciB1bnJhci02LjEuNy91bmljb2RlLmNwcCB1bnJhci02LjIuNy91bmljb2Rl
LmNwcAotLS0gdW5yYXItNi4xLjcvdW5pY29kZS5jcHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysg
dW5yYXItNi4yLjcvdW5pY29kZS5jcHAJMjAyMy0wNS0xNCAxMzoxMDozNQpAQCAtMjI5LDEwICsy
MjksMTEgQEAKICNlbmRpZgogCiAKLS8vIFNyY1NpemUgaXMgaW4gd2lkZSBjaGFyYWN0ZXJzLCBu
b3QgaW4gYnl0ZXMuCi1ieXRlKiBXaWRlVG9SYXcoY29uc3Qgd2NoYXIgKlNyYyxieXRlICpEZXN0
LHNpemVfdCBTcmNTaXplKQorLy8gU3JjU2l6ZSBpcyBzb3VyY2UgZGF0YSBzaXplIGluIHdpZGUg
Y2hhcmFjdGVycywgbm90IGluIGJ5dGVzLgorLy8gRGVzdFNpemUgaXMgdGhlIG1heGltdW0gYWxs
b3dlZCBkZXN0aW5hdGlvbiBzaXplLgorYnl0ZSogV2lkZVRvUmF3KGNvbnN0IHdjaGFyICpTcmMs
c2l6ZV90IFNyY1NpemUsYnl0ZSAqRGVzdCxzaXplX3QgRGVzdFNpemUpCiB7Ci0gIGZvciAoc2l6
ZV90IEk9MDtJPFNyY1NpemU7SSsrLFNyYysrKQorICBmb3IgKHNpemVfdCBJPTA7STxTcmNTaXpl
ICYmIEkqMisxPERlc3RTaXplO0krKyxTcmMrKykKICAgewogICAgIERlc3RbSSoyXT0oYnl0ZSkq
U3JjOwogICAgIERlc3RbSSoyKzFdPShieXRlKSgqU3JjPj44KTsKZGlmZiAtdXIgdW5yYXItNi4x
LjcvdW5pY29kZS5ocHAgdW5yYXItNi4yLjcvdW5pY29kZS5ocHAKLS0tIHVucmFyLTYuMS43L3Vu
aWNvZGUuaHBwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L3VuaWNvZGUuaHBw
CTIwMjMtMDUtMTQgMTM6MTA6MzUKQEAgLTcsNyArNyw3IEBACiAKIGJvb2wgV2lkZVRvQ2hhcihj
b25zdCB3Y2hhciAqU3JjLGNoYXIgKkRlc3Qsc2l6ZV90IERlc3RTaXplKTsKIGJvb2wgQ2hhclRv
V2lkZShjb25zdCBjaGFyICpTcmMsd2NoYXIgKkRlc3Qsc2l6ZV90IERlc3RTaXplKTsKLWJ5dGUq
IFdpZGVUb1Jhdyhjb25zdCB3Y2hhciAqU3JjLGJ5dGUgKkRlc3Qsc2l6ZV90IFNyY1NpemUpOwor
Ynl0ZSogV2lkZVRvUmF3KGNvbnN0IHdjaGFyICpTcmMsc2l6ZV90IFNyY1NpemUsYnl0ZSAqRGVz
dCxzaXplX3QgRGVzdFNpemUpOwogd2NoYXIqIFJhd1RvV2lkZShjb25zdCBieXRlICpTcmMsd2No
YXIgKkRlc3Qsc2l6ZV90IERlc3RTaXplKTsKIHZvaWQgV2lkZVRvVXRmKGNvbnN0IHdjaGFyICpT
cmMsY2hhciAqRGVzdCxzaXplX3QgRGVzdFNpemUpOwogc2l6ZV90IFdpZGVUb1V0ZlNpemUoY29u
c3Qgd2NoYXIgKlNyYyk7CmRpZmYgLXVyIHVucmFyLTYuMS43L3VucGFjay5jcHAgdW5yYXItNi4y
LjcvdW5wYWNrLmNwcAotLS0gdW5yYXItNi4xLjcvdW5wYWNrLmNwcAkyMDIyLTEwLTE5IDIyOjA1
OjEyCisrKyB1bnJhci02LjIuNy91bnBhY2suY3BwCTIwMjMtMDUtMTQgMTM6MTA6MzUKQEAgLTMw
OSw3ICszMDksNyBAQAogICAgICAgRGVjLT5RdWlja0JpdHM9TUFYX1FVSUNLX0RFQ09ERV9CSVRT
OwogICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgIERlYy0+UXVpY2tCaXRzPU1BWF9R
VUlDS19ERUNPREVfQklUUy0zOworICAgICAgRGVjLT5RdWlja0JpdHM9TUFYX1FVSUNLX0RFQ09E
RV9CSVRTPjMgPyBNQVhfUVVJQ0tfREVDT0RFX0JJVFMtMyA6IDA7CiAgICAgICBicmVhazsKICAg
fQogCmRpZmYgLXVyIHVucmFyLTYuMS43L3VucGFjay5ocHAgdW5yYXItNi4yLjcvdW5wYWNrLmhw
cAotLS0gdW5yYXItNi4xLjcvdW5wYWNrLmhwcAkyMDIyLTEwLTE5IDIyOjA1OjEyCisrKyB1bnJh
ci02LjIuNy91bnBhY2suaHBwCTIwMjMtMDUtMTQgMTM6MTA6MzUKQEAgLTkzLDE3ICs5MywxNyBA
QAogCiAjaWZkZWYgUkFSX1NNUAogZW51bSBVTlBfREVDX1RZUEUgewotICBVTlBEVF9MSVRFUkFM
LFVOUERUX01BVENILFVOUERUX0ZVTExSRVAsVU5QRFRfUkVQLFVOUERUX0ZJTFRFUgorICBVTlBE
VF9MSVRFUkFMPTAsVU5QRFRfTUFUQ0gsVU5QRFRfRlVMTFJFUCxVTlBEVF9SRVAsVU5QRFRfRklM
VEVSCiB9OwogCiBzdHJ1Y3QgVW5wYWNrRGVjb2RlZEl0ZW0KIHsKLSAgVU5QX0RFQ19UWVBFIFR5
cGU7CisgIGJ5dGUgVHlwZTsgLy8gJ2J5dGUnIGluc3RlYWQgb2YgZW51bSB0eXBlIHRvIHJlZHVj
ZSBtZW1vcnkgdXNlLgogICB1c2hvcnQgTGVuZ3RoOwogICB1bmlvbgogICB7CiAgICAgdWludCBE
aXN0YW5jZTsKLSAgICBieXRlIExpdGVyYWxbNF07CisgICAgYnl0ZSBMaXRlcmFsWzhdOyAvLyBT
dG9yZSB1cCB0byA4IGNoYXJzIGhlcmUgdG8gc3BlZWQgdXAgZXh0cmFjdGlvbi4KICAgfTsKIH07
CiAKZGlmZiAtdXIgdW5yYXItNi4xLjcvdW5wYWNrMzAuY3BwIHVucmFyLTYuMi43L3VucGFjazMw
LmNwcAotLS0gdW5yYXItNi4xLjcvdW5wYWNrMzAuY3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysr
IHVucmFyLTYuMi43L3VucGFjazMwLmNwcAkyMDIzLTA1LTE0IDEzOjEwOjM1CkBAIC01NSw3ICs1
NSw3IEBACiAgICAgICBpZiAoIVVucFJlYWRCdWYzMCgpKQogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgaWYgKCgoV3JQdHItVW5wUHRyKSAmIE1heFdpbk1hc2spPDI2MCAmJiBXclB0ciE9VW5w
UHRyKQorICAgIGlmICgoKFdyUHRyLVVucFB0cikgJiBNYXhXaW5NYXNrKTw9TUFYM19JTkNfTFpf
TUFUQ0ggJiYgV3JQdHIhPVVucFB0cikKICAgICB7CiAgICAgICBVbnBXcml0ZUJ1ZjMwKCk7CiAg
ICAgICBpZiAoV3JpdHRlbkZpbGVTaXplPkRlc3RVbnBTaXplKQpkaWZmIC11ciB1bnJhci02LjEu
Ny91bnBhY2s1MC5jcHAgdW5yYXItNi4yLjcvdW5wYWNrNTAuY3BwCi0tLSB1bnJhci02LjEuNy91
bnBhY2s1MC5jcHAJMjAyMi0xMC0xOSAyMjowNToxMgorKysgdW5yYXItNi4yLjcvdW5wYWNrNTAu
Y3BwCTIwMjMtMDUtMTQgMTM6MTA6MzUKQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgaWYgKCgoV3JpdGVCb3JkZXItVW5wUHRyKSAmIE1heFdpbk1hc2spPE1B
WF9JTkNfTFpfTUFUQ0ggJiYgV3JpdGVCb3JkZXIhPVVucFB0cikKKyAgICBpZiAoKChXcml0ZUJv
cmRlci1VbnBQdHIpICYgTWF4V2luTWFzayk8PU1BWF9JTkNfTFpfTUFUQ0ggJiYgV3JpdGVCb3Jk
ZXIhPVVucFB0cikKICAgICB7CiAgICAgICBVbnBXcml0ZUJ1ZigpOwogICAgICAgaWYgKFdyaXR0
ZW5GaWxlU2l6ZT5EZXN0VW5wU2l6ZSkKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgfQogICAg
ICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICBEaXN0YW5jZSs9SW5wLmdldGJpdHMzMigp
Pj4oMzItREJpdHMpOworICAgICAgICAgIERpc3RhbmNlKz1JbnAuZ2V0Yml0cygpPj4oMTYtREJp
dHMpOwogICAgICAgICAgIElucC5hZGRiaXRzKERCaXRzKTsKICAgICAgICAgfQogICAgICAgfQpk
aWZmIC11ciB1bnJhci02LjEuNy91bnBhY2s1MG10LmNwcCB1bnJhci02LjIuNy91bnBhY2s1MG10
LmNwcAotLS0gdW5yYXItNi4xLjcvdW5wYWNrNTBtdC5jcHAJMjAyMi0xMC0xOSAyMjowNToxMgor
KysgdW5yYXItNi4yLjcvdW5wYWNrNTBtdC5jcHAJMjAyMy0wNS0xNCAxMzoxMDozNQpAQCAtMzQ1
LDcgKzM0NSw3IEBACiAgICAgICBpZiAoRC5EZWNvZGVkU2l6ZT4xKQogICAgICAgewogICAgICAg
ICBVbnBhY2tEZWNvZGVkSXRlbSAqUHJldkl0ZW09Q3VySXRlbS0xOwotICAgICAgICBpZiAoUHJl
dkl0ZW0tPlR5cGU9PVVOUERUX0xJVEVSQUwgJiYgUHJldkl0ZW0tPkxlbmd0aDwzKQorICAgICAg
ICBpZiAoUHJldkl0ZW0tPlR5cGU9PVVOUERUX0xJVEVSQUwgJiYgUHJldkl0ZW0tPkxlbmd0aDxB
U0laRShQcmV2SXRlbS0+TGl0ZXJhbCktMSkKICAgICAgICAgewogICAgICAgICAgIFByZXZJdGVt
LT5MZW5ndGgrKzsKICAgICAgICAgICBQcmV2SXRlbS0+TGl0ZXJhbFtQcmV2SXRlbS0+TGVuZ3Ro
XT0oYnl0ZSlNYWluU2xvdDsKQEAgLTM4OCw3ICszODgsNyBAQAogICAgICAgICB9CiAgICAgICAg
IGVsc2UKICAgICAgICAgewotICAgICAgICAgIERpc3RhbmNlKz1ELklucC5nZXRiaXRzMzIoKT4+
KDMyLURCaXRzKTsKKyAgICAgICAgICBEaXN0YW5jZSs9RC5JbnAuZ2V0Yml0cygpPj4oMTYtREJp
dHMpOwogICAgICAgICAgIEQuSW5wLmFkZGJpdHMoREJpdHMpOwogICAgICAgICB9CiAgICAgICB9
CkBAIC00NTEsNyArNDUxLDcgQEAKICAgd2hpbGUgKEl0ZW08Qm9yZGVyKQogICB7CiAgICAgVW5w
UHRyJj1NYXhXaW5NYXNrOwotICAgIGlmICgoKFdyaXRlQm9yZGVyLVVucFB0cikgJiBNYXhXaW5N
YXNrKTxNQVhfSU5DX0xaX01BVENIICYmIFdyaXRlQm9yZGVyIT1VbnBQdHIpCisgICAgaWYgKCgo
V3JpdGVCb3JkZXItVW5wUHRyKSAmIE1heFdpbk1hc2spPD1NQVhfSU5DX0xaX01BVENIICYmIFdy
aXRlQm9yZGVyIT1VbnBQdHIpCiAgICAgewogICAgICAgVW5wV3JpdGVCdWYoKTsKICAgICAgIGlm
IChXcml0dGVuRmlsZVNpemU+RGVzdFVucFNpemUpCkBAIC00NjEsMTAgKzQ2MSwxMCBAQAogICAg
IGlmIChJdGVtLT5UeXBlPT1VTlBEVF9MSVRFUkFMKQogICAgIHsKICNpZiBkZWZpbmVkKExJVFRM
RV9FTkRJQU4pICYmIGRlZmluZWQoQUxMT1dfTUlTQUxJR05FRCkKLSAgICAgIGlmIChJdGVtLT5M
ZW5ndGg9PTMgJiYgVW5wUHRyPE1heFdpblNpemUtNCkKKyAgICAgIGlmIChJdGVtLT5MZW5ndGg9
PTcgJiYgVW5wUHRyPE1heFdpblNpemUtOCkKICAgICAgIHsKLSAgICAgICAgKih1aW50MzIgKiko
V2luZG93K1VucFB0cik9Kih1aW50MzIgKilJdGVtLT5MaXRlcmFsOwotICAgICAgICBVbnBQdHIr
PTQ7CisgICAgICAgICoodWludDY0ICopKFdpbmRvdytVbnBQdHIpPSoodWludDY0ICopKEl0ZW0t
PkxpdGVyYWwpOworICAgICAgICAgVW5wUHRyKz04OwogICAgICAgfQogICAgICAgZWxzZQogI2Vu
ZGlmCkBAIC01NTksNyArNTU5LDcgQEAKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgfQot
ICAgIGlmICgoKFdyaXRlQm9yZGVyLVVucFB0cikgJiBNYXhXaW5NYXNrKTxNQVhfSU5DX0xaX01B
VENIICYmIFdyaXRlQm9yZGVyIT1VbnBQdHIpCisgICAgaWYgKCgoV3JpdGVCb3JkZXItVW5wUHRy
KSAmIE1heFdpbk1hc2spPD1NQVhfSU5DX0xaX01BVENIICYmIFdyaXRlQm9yZGVyIT1VbnBQdHIp
CiAgICAgewogICAgICAgVW5wV3JpdGVCdWYoKTsKICAgICAgIGlmIChXcml0dGVuRmlsZVNpemU+
RGVzdFVucFNpemUpCmRpZmYgLXVyIHVucmFyLTYuMS43L3ZlcnNpb24uaHBwIHVucmFyLTYuMi43
L3ZlcnNpb24uaHBwCi0tLSB1bnJhci02LjEuNy92ZXJzaW9uLmhwcAkyMDIyLTEwLTE5IDIyOjA1
OjEyCisrKyB1bnJhci02LjIuNy92ZXJzaW9uLmhwcAkyMDIzLTA1LTE0IDEzOjEwOjM1CkBAIC0x
LDYgKzEsNiBAQAogI2RlZmluZSBSQVJWRVJfTUFKT1IgICAgIDYKLSNkZWZpbmUgUkFSVkVSX01J
Tk9SICAgIDEyCi0jZGVmaW5lIFJBUlZFUl9CRVRBICAgICAgMAotI2RlZmluZSBSQVJWRVJfREFZ
ICAgICAgIDQKKyNkZWZpbmUgUkFSVkVSX01JTk9SICAgIDIyCisjZGVmaW5lIFJBUlZFUl9CRVRB
ICAgICAgMQorI2RlZmluZSBSQVJWRVJfREFZICAgICAgMTQKICNkZWZpbmUgUkFSVkVSX01PTlRI
ICAgICA1Ci0jZGVmaW5lIFJBUlZFUl9ZRUFSICAgMjAyMgorI2RlZmluZSBSQVJWRVJfWUVBUiAg
IDIwMjMKZGlmZiAtdXIgdW5yYXItNi4xLjcvdm9sdW1lLmNwcCB1bnJhci02LjIuNy92b2x1bWUu
Y3BwCi0tLSB1bnJhci02LjEuNy92b2x1bWUuY3BwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVu
cmFyLTYuMi43L3ZvbHVtZS5jcHAJMjAyMy0wNS0xNCAxMzoxMDozNQpAQCAtMSwxNSArMSwxNSBA
QAogI2luY2x1ZGUgInJhci5ocHAiCiAKICNpZmRlZiBSQVJETEwKLXN0YXRpYyBib29sIERsbFZv
bENoYW5nZShSQVJPcHRpb25zICpDbWQsd2NoYXIgKk5leHROYW1lLHNpemVfdCBOYW1lU2l6ZSk7
Ci1zdGF0aWMgYm9vbCBEbGxWb2xOb3RpZnkoUkFST3B0aW9ucyAqQ21kLHdjaGFyICpOZXh0TmFt
ZSk7CitzdGF0aWMgYm9vbCBEbGxWb2xDaGFuZ2UoQ29tbWFuZERhdGEgKkNtZCx3Y2hhciAqTmV4
dE5hbWUsc2l6ZV90IE5hbWVTaXplKTsKK3N0YXRpYyBib29sIERsbFZvbE5vdGlmeShDb21tYW5k
RGF0YSAqQ21kLHdjaGFyICpOZXh0TmFtZSk7CiAjZW5kaWYKIAogCiAKIGJvb2wgTWVyZ2VBcmNo
aXZlKEFyY2hpdmUgJkFyYyxDb21wckRhdGFJTyAqRGF0YUlPLGJvb2wgU2hvd0ZpbGVOYW1lLHdj
aGFyIENvbW1hbmQpCiB7Ci0gIFJBUk9wdGlvbnMgKkNtZD1BcmMuR2V0UkFST3B0aW9ucygpOwor
ICBDb21tYW5kRGF0YSAqQ21kPUFyYy5HZXRDb21tYW5kRGF0YSgpOwogCiAgIEhFQURFUl9UWVBF
IEhlYWRlclR5cGU9QXJjLkdldEhlYWRlclR5cGUoKTsKICAgRmlsZUhlYWRlciAqaGQ9SGVhZGVy
VHlwZT09SEVBRF9TRVJWSUNFID8gJkFyYy5TdWJIZWFkOiZBcmMuRmlsZUhlYWQ7CkBAIC0xOTAs
NyArMTkwLDcgQEAKIAogCiAjaWZkZWYgUkFSRExMCi1ib29sIERsbFZvbENoYW5nZShSQVJPcHRp
b25zICpDbWQsd2NoYXIgKk5leHROYW1lLHNpemVfdCBOYW1lU2l6ZSkKK2Jvb2wgRGxsVm9sQ2hh
bmdlKENvbW1hbmREYXRhICpDbWQsd2NoYXIgKk5leHROYW1lLHNpemVfdCBOYW1lU2l6ZSkKIHsK
ICAgYm9vbCBEbGxWb2xDaGFuZ2VkPWZhbHNlLERsbFZvbEFib3J0ZWQ9ZmFsc2U7CiAKQEAgLTI0
Niw3ICsyNDYsNyBAQAogCiAKICNpZmRlZiBSQVJETEwKLWJvb2wgRGxsVm9sTm90aWZ5KFJBUk9w
dGlvbnMgKkNtZCx3Y2hhciAqTmV4dE5hbWUpCitib29sIERsbFZvbE5vdGlmeShDb21tYW5kRGF0
YSAqQ21kLHdjaGFyICpOZXh0TmFtZSkKIHsKICAgY2hhciBOZXh0TmFtZUFbTk1dOwogICBXaWRl
VG9DaGFyKE5leHROYW1lLE5leHROYW1lQSxBU0laRShOZXh0TmFtZUEpKTsKZGlmZiAtdXIgdW5y
YXItNi4xLjcvdm9sdW1lLmhwcCB1bnJhci02LjIuNy92b2x1bWUuaHBwCi0tLSB1bnJhci02LjEu
Ny92b2x1bWUuaHBwCTIwMjItMTAtMTkgMjI6MDU6MTIKKysrIHVucmFyLTYuMi43L3ZvbHVtZS5o
cHAJMjAyMy0wNS0xNCAxMzoxMDozNQpAQCAtMSwxMCArMSw3IEBACiAjaWZuZGVmIF9SQVJfVk9M
VU1FXwogI2RlZmluZSBfUkFSX1ZPTFVNRV8KIAotdm9pZCBTcGxpdEFyY2hpdmUoQXJjaGl2ZSAm
QXJjLEZpbGVIZWFkZXIgKmZoLGludDY0ICpIZWFkZXJQb3MsCi0gICAgICAgICAgICAgICAgICBD
b21wckRhdGFJTyAqRGF0YUlPKTsKIGJvb2wgTWVyZ2VBcmNoaXZlKEFyY2hpdmUgJkFyYyxDb21w
ckRhdGFJTyAqRGF0YUlPLGJvb2wgU2hvd0ZpbGVOYW1lLAogICAgICAgICAgICAgICAgICAgd2No
YXIgQ29tbWFuZCk7Ci12b2lkIFNldFZvbFdyaXRlKEFyY2hpdmUgJkRlc3QsaW50NjQgVm9sU2l6
ZSk7CiAKICNlbmRpZgpkaWZmIC11ciB1bnJhci02LjEuNy93aW4zMnN0bS5jcHAgdW5yYXItNi4y
Ljcvd2luMzJzdG0uY3BwCi0tLSB1bnJhci02LjEuNy93aW4zMnN0bS5jcHAJMjAyMi0xMC0xOSAy
MjowNToxMgorKysgdW5yYXItNi4yLjcvd2luMzJzdG0uY3BwCTIwMjMtMDUtMTQgMTM6MTA6MzUK
QEAgLTExMSwxNiArMTExLDIzIEBACiAKICAgd2NzbmNhdHooRnVsbE5hbWUsU3RyZWFtTmFtZSxB
U0laRShGdWxsTmFtZSkpOwogCisKICAgRmluZERhdGEgZmQ7Ci0gIGJvb2wgRm91bmQ9RmluZEZp
bGU6OkZhc3RGaW5kKEZpbGVOYW1lLCZmZCk7CisgIGJvb2wgSG9zdEZvdW5kPUZpbmRGaWxlOjpG
YXN0RmluZChGaWxlTmFtZSwmZmQpOwogCiAgIGlmICgoZmQuRmlsZUF0dHIgJiBGSUxFX0FUVFJJ
QlVURV9SRUFET05MWSkhPTApCiAgICAgU2V0RmlsZUF0dHIoRmlsZU5hbWUsZmQuRmlsZUF0dHIg
JiB+RklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpOwogICBGaWxlIEN1ckZpbGU7Ci0gIGlmIChDdXJG
aWxlLldDcmVhdGUoRnVsbE5hbWUpICYmIEFyYy5SZWFkU3ViRGF0YShOVUxMLCZDdXJGaWxlLGZh
bHNlKSkKLSAgICBDdXJGaWxlLkNsb3NlKCk7CisKKyAgaWYgKEN1ckZpbGUuV0NyZWF0ZShGdWxs
TmFtZSkpCisgIHsKKyAgICBpZiAoQXJjLlJlYWRTdWJEYXRhKE5VTEwsJkN1ckZpbGUsZmFsc2Up
KQorICAgICAgQ3VyRmlsZS5DbG9zZSgpOworICB9CisKKyAgLy8gUmVzdG9yaW5nIG9yaWdpbmFs
IGZpbGUgdGltZXN0YW1wcy4KICAgRmlsZSBIb3N0RmlsZTsKLSAgaWYgKEZvdW5kICYmIEhvc3RG
aWxlLk9wZW4oRmlsZU5hbWUsRk1GX09QRU5TSEFSRUR8Rk1GX1VQREFURSkpCisgIGlmIChIb3N0
Rm91bmQgJiYgSG9zdEZpbGUuT3BlbihGaWxlTmFtZSxGTUZfT1BFTlNIQVJFRHxGTUZfVVBEQVRF
KSkKICAgICBTZXRGaWxlVGltZShIb3N0RmlsZS5HZXRIYW5kbGUoKSwmZmQuZnRDcmVhdGlvblRp
bWUsJmZkLmZ0TGFzdEFjY2Vzc1RpbWUsCiAgICAgICAgICAgICAgICAgJmZkLmZ0TGFzdFdyaXRl
VGltZSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13350</attachid>
            <date>2023-05-31 21:12:51 +0300</date>
            <delta_ts>2023-05-31 21:12:51 +0300</delta_ts>
            <desc>patch for spec (updated)</desc>
            <filename>unrar-6.2.7-spec.patch</filename>
            <type>text/plain</type>
            <size>103</size>
            <attacher>aleksandrkarpunin0889</attacher>
            
              <data encoding="base64">QEAgLTEsNSArMSw1IEBACiBOYW1lOiB1bnJhcgotVmVyc2lvbjogNi4xLjcKK1ZlcnNpb246IDYu
Mi43CiBSZWxlYXNlOiBhbHQxCiAKIFN1bW1hcnk6IFJBUiB1bmFyY2hpdmVyCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>