<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>6138</bug_id>
          
          <creation_ts>2005-12-18 10:55:38 -0800</creation_ts>
          <short_desc>QString should be sent to pasture and replaced by DOMString/DOMStringImpl</short_desc>
          <delta_ts>2005-12-24 05:45:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>26124</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-18 10:55:38 -0800</bug_when>
    <thetext>QString should be sent to pasture and replaced by DOMString/DOMStringImpl

I&apos;m about 50% of the way through this in WebCore.  I&apos;m going to attach the patches in pieces as I get 
things back up and running.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26399</commentid>
    <comment_count>1</comment_count>
      <attachid>5234</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-22 19:50:37 -0800</bug_when>
    <thetext>Created attachment 5234
first patch, removing many uses of .qstring()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26400</commentid>
    <comment_count>2</comment_count>
      <attachid>5234</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-22 20:02:24 -0800</bug_when>
    <thetext>Comment on attachment 5234
first patch, removing many uses of .qstring()

removes KWQLabel (unused)
converts a bunch of QString to DOMString
adds DOMString::replace(QChar,QChar)
removes a bunch of .qstring() usage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26405</commentid>
    <comment_count>3</comment_count>
      <attachid>5234</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-12-22 22:57:17 -0800</bug_when>
    <thetext>Comment on attachment 5234
first patch, removing many uses of .qstring()

r=me assuming no performance regression and that layout tests pass.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5234</attachid>
            <date>2005-12-22 19:50:37 -0800</date>
            <delta_ts>2005-12-22 22:57:17 -0800</delta_ts>
            <desc>first patch, removing many uses of .qstring()</desc>
            <filename>qstring_removal.patch</filename>
            <type>text/plain</type>
            <size>95000</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IEZvcndhcmRpbmdIZWFkZXJzL3FsYWJlbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IEZv
cndhcmRpbmdIZWFkZXJzL3FsYWJlbC5oCmRpZmYgLU4gRm9yd2FyZGluZ0hlYWRlcnMvcWxhYmVs
LmgKLS0tIEZvcndhcmRpbmdIZWFkZXJzL3FsYWJlbC5oCTIzIFNlcCAyMDA0IDA2OjIxOjI3IC0w
MDAwCTEuMgorKysgRm9yd2FyZGluZ0hlYWRlcnMvcWxhYmVsLmgJMSBKYW4gMTk3MCAwMDowMDow
MCAtMDAwMApAQCAtMSArMCwwIEBACi0jaW1wb3J0ICJLV1FMYWJlbC5oIgpJbmRleDogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaix2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS42MApkaWZmIC1wIC11IC1yMS42MCBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKLS0tIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkyMiBEZWMgMjAw
NSAwMTo0MDo1MSAtMDAwMAkxLjYwCisrKyBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJMjMgRGVjIDIwMDUgMDM6Mjg6MzMgLTAwMDAKQEAgLTIyMCw3ICsyMjAsNiBAQAogCQk5M0Yx
OTk2NzA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRS1VSTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2MDIwMkRFMzgyMDAxRUE0MTIyIC8qIEtXUUtV
UkwuaCAqLzsgfTsKIAkJOTNGMTk5NjgwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUtXaW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NjA0MDJERTM4
MjAwMUVBNDEyMiAvKiBLV1FLV2luLmggKi87IH07CiAJCTkzRjE5OTY5MDgyNDVFNTkwMDFFOUFC
QyAvKiBLV1FLV2luTW9kdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTg3ODYwNTAyREUzODIwMDFFQTQxMjIgLyogS1dRS1dpbk1vZHVsZS5oICov
OyB9OwotCQk5M0YxOTk2QTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRTGFiZWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4Njk3MDJERTNCODYwMUVB
NDEyMiAvKiBLV1FMYWJlbC5oICovOyB9OwogCQk5M0YxOTk2QjA4MjQ1RTU5MDAxRTlBQkMgLyog
S1dRTGluZUVkaXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1ODc4Njk4MDJERTNCODYwMUVBNDEyMiAvKiBLV1FMaW5lRWRpdC5oICovOyB9OwogCQk5
M0YxOTk2QzA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRTGlzdEJveC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1MTMwMkRFMzc1OTAxRUE0MTIyIC8q
IEtXUUxpc3RCb3guaCAqLzsgfTsKIAkJOTNGMTk5NkQwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUxp
c3RJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTg3ODUxNTAyREUzNzU5MDFFQTQxMjIgLyogS1dRTGlzdEltcGwuaCAqLzsgfTsKQEAgLTQwOSw3
ICs0MDgsNiBAQAogCQk5M0YxOUEzNjA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRS1VSTC5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NTBFMDJERTM3
NTkwMUVBNDEyMiAvKiBLV1FLVVJMLm1tICovOyB9OwogCQk5M0YxOUEzNzA4MjQ1RTU5MDAxRTlB
QkMgLyogS1dRS1dpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY1ODc4NTBGMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FLV2luLm1tICovOyB9OwogCQk5
M0YxOUEzODA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRS1dpbk1vZHVsZS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NTEwMDJERTM3NTkwMUVBNDEy
MiAvKiBLV1FLV2luTW9kdWxlLm1tICovOyB9OwotCQk5M0YxOUEzOTA4MjQ1RTU5MDAxRTlBQkMg
LyogS1dRTGFiZWwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNTg3ODUxMTAyREUzNzU5MDFFQTQxMjIgLyogS1dRTGFiZWwubW0gKi87IH07CiAJCTkz
RjE5QTNBMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FMaW5lRWRpdC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NTEyMDJERTM3NTkwMUVBNDEyMiAv
KiBLV1FMaW5lRWRpdC5tbSAqLzsgfTsKIAkJOTNGMTlBM0IwODI0NUU1OTAwMUU5QUJDIC8qIEtX
UUxpc3RCb3gubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNTg3ODUxNDAyREUzNzU5MDFFQTQxMjIgLyogS1dRTGlzdEJveC5tbSAqLzsgfTsKIAkJOTNG
MTlBM0MwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUxpc3RJbXBsLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1MTYwMkRFMzc1OTAxRUE0MTIyIC8q
IEtXUUxpc3RJbXBsLm1tICovOyB9OwpAQCAtNzQ1LDcgKzc0Myw2IEBACiAJCUE4OEFEMUE5MDk1
MjQ4MEEwMDFERDE5NiAvKiBLV1FLVVJMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODYwMjAyREUzODIwMDFFQTQxMjIgLyogS1dRS1VSTC5oICov
OyB9OwogCQlBODhBRDFBQTA5NTI0ODBBMDAxREQxOTYgLyogS1dRS1dpbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2MDQwMkRFMzgyMDAxRUE0
MTIyIC8qIEtXUUtXaW4uaCAqLzsgfTsKIAkJQTg4QUQxQUIwOTUyNDgwQTAwMUREMTk2IC8qIEtX
UUtXaW5Nb2R1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1ODc4NjA1MDJERTM4MjAwMUVBNDEyMiAvKiBLV1FLV2luTW9kdWxlLmggKi87IH07Ci0J
CUE4OEFEMUFDMDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FMYWJlbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2OTcwMkRFM0I4NjAxRUE0MTIyIC8q
IEtXUUxhYmVsLmggKi87IH07CiAJCUE4OEFEMUFEMDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FMaW5l
RWRpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4
Nzg2OTgwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUUxpbmVFZGl0LmggKi87IH07CiAJCUE4OEFEMUFF
MDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FMaXN0Qm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODUxMzAyREUzNzU5MDFFQTQxMjIgLyogS1dRTGlz
dEJveC5oICovOyB9OwogCQlBODhBRDFBRjA5NTI0ODBBMDAxREQxOTYgLyogS1dRTGlzdEltcGwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NTE1
MDJERTM3NTkwMUVBNDEyMiAvKiBLV1FMaXN0SW1wbC5oICovOyB9OwpAQCAtOTc2LDcgKzk3Myw2
IEBACiAJCUE4OEFEMjkzMDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FLVVJMLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1MEUwMkRFMzc1OTAxRUE0
MTIyIC8qIEtXUUtVUkwubW0gKi87IH07CiAJCUE4OEFEMjk0MDk1MjQ4MEEwMDFERDE5NiAvKiBL
V1FLV2luLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjU4Nzg1MEYwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUtXaW4ubW0gKi87IH07CiAJCUE4OEFEMjk1
MDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FLV2luTW9kdWxlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1MTAwMkRFMzc1OTAxRUE0MTIyIC8qIEtX
UUtXaW5Nb2R1bGUubW0gKi87IH07Ci0JCUE4OEFEMjk2MDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FM
YWJlbC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1
ODc4NTExMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FMYWJlbC5tbSAqLzsgfTsKIAkJQTg4QUQyOTcw
OTUyNDgwQTAwMUREMTk2IC8qIEtXUUxpbmVFZGl0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1MTIwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUxp
bmVFZGl0Lm1tICovOyB9OwogCQlBODhBRDI5ODA5NTI0ODBBMDAxREQxOTYgLyogS1dRTGlzdEJv
eC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4
NTE0MDJERTM3NTkwMUVBNDEyMiAvKiBLV1FMaXN0Qm94Lm1tICovOyB9OwogCQlBODhBRDI5OTA5
NTI0ODBBMDAxREQxOTYgLyogS1dRTGlzdEltcGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTg3ODUxNjAyREUzNzU5MDFFQTQxMjIgLyogS1dRTGlz
dEltcGwubW0gKi87IH07CkBAIC0yNTcxLDcgKzI1NjcsNiBAQAogCQlGNTg3ODUwRTAyREUzNzU5
MDFFQTQxMjIgLyogS1dRS1VSTC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEtXUUtVUkwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODUwRjAyREUzNzU5MDFF
QTQxMjIgLyogS1dRS1dpbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IEtXUUtXaW4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODUxMDAyREUzNzU5MDFFQTQx
MjIgLyogS1dRS1dpbk1vZHVsZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEtXUUtXaW5Nb2R1bGUubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTg3ODUxMTAyREUz
NzU5MDFFQTQxMjIgLyogS1dRTGFiZWwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLV1FMYWJlbC5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NTEyMDJERTM3
NTkwMUVBNDEyMiAvKiBLV1FMaW5lRWRpdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEtXUUxpbmVFZGl0Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg1MTMw
MkRFMzc1OTAxRUE0MTIyIC8qIEtXUUxpc3RCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS1dRTGlzdEJveC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg1MTQwMkRFMzc1
OTAxRUE0MTIyIC8qIEtXUUxpc3RCb3gubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLV1FMaXN0Qm94Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTI2ODQsNyArMjY3
OSw2IEBACiAJCUY1ODc4NjkwMDJERTNCODYwMUVBNDEyMiAvKiBLV1FHdWFyZGVkUHRyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtXUUd1YXJk
ZWRQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CiAJCUY1ODc4NjkyMDJERTNCODYwMUVBNDEyMiAvKiBLV1FJbWFnZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLV1FJbWFnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJ
RjU4Nzg2OTYwMkRFM0I4NjAxRUE0MTIyIC8qIEtXUUlPRGV2aWNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtXUUlPRGV2aWNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTg3
ODY5NzAyREUzQjg2MDFFQTQxMjIgLyogS1dRTGFiZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS1dRTGFiZWwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4Njk4MDJERTNC
ODYwMUVBNDEyMiAvKiBLV1FMaW5lRWRpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBLV1FMaW5lRWRpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg2OTkwMkRFM0I4NjAx
RUE0MTIyIC8qIEtXUVB0ckxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gS1dRUHRyTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjU4Nzg2OUEwMkRFM0I4NjAxRUE0MTIy
IC8qIEtXUU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBLV1FNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CkBAIC00MTM5LDggKzQxMzMsNiBAQAogCQkJCUY1ODc4NEU2MDJERTM3
NTkwMUVBNDEyMiAvKiBLV1FHdWFyZGVkUHRyLm1tICovLAogCQkJCUY1ODc4NjkyMDJERTNCODYw
MUVBNDEyMiAvKiBLV1FJbWFnZS5oICovLAogCQkJCUY1ODc4Njk2MDJERTNCODYwMUVBNDEyMiAv
KiBLV1FJT0RldmljZS5oICovLAotCQkJCUY1ODc4Njk3MDJERTNCODYwMUVBNDEyMiAvKiBLV1FM
YWJlbC5oICovLAotCQkJCUY1ODc4NTExMDJERTM3NTkwMUVBNDEyMiAvKiBLV1FMYWJlbC5tbSAq
LywKIAkJCQlGNTg3ODY5ODAyREUzQjg2MDFFQTQxMjIgLyogS1dRTGluZUVkaXQuaCAqLywKIAkJ
CQlGNTg3ODUxMjAyREUzNzU5MDFFQTQxMjIgLyogS1dRTGluZUVkaXQubW0gKi8sCiAJCQkJRjU4
Nzg1MTMwMkRFMzc1OTAxRUE0MTIyIC8qIEtXUUxpc3RCb3guaCAqLywKQEAgLTQzODAsNyArNDM3
Miw2IEBACiAJCQkJOTNGMTk5NjcwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUtVUkwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzRjE5OTY4MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FLV2luLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5M0YxOTk2OTA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRS1dpbk1vZHVsZS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJOTNGMTk5NkEwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUxhYmVs
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk2QjA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRTGlu
ZUVkaXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTZDMDgyNDVFNTkwMDFFOUFCQyAvKiBL
V1FMaXN0Qm94LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk2RDA4MjQ1RTU5MDAxRTlBQkMg
LyogS1dRTGlzdEltcGwuaCBpbiBIZWFkZXJzICovLApAQCAtNDg4NCw3ICs0ODc1LDYgQEAKIAkJ
CQlBODhBRDFBOTA5NTI0ODBBMDAxREQxOTYgLyogS1dRS1VSTC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTg4QUQxQUEwOTUyNDgwQTAwMUREMTk2IC8qIEtXUUtXaW4uaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4OEFEMUFCMDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FLV2luTW9kdWxlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlBODhBRDFBQzA5NTI0ODBBMDAxREQxOTYgLyogS1dRTGFiZWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4OEFEMUFEMDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FMaW5lRWRpdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQxQUUwOTUyNDgwQTAwMUREMTk2IC8qIEtXUUxpc3RCb3gu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFEMUFGMDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FMaXN0
SW1wbC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTkyLDcgKzYxODIsNiBAQAogCQkJCTkzRjE5QTM2
MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FLVVJMLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlB
MzcwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUtXaW4ubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0Yx
OUEzODA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRS1dpbk1vZHVsZS5tbSBpbiBTb3VyY2VzICovLAot
CQkJCTkzRjE5QTM5MDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FMYWJlbC5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTkzRjE5QTNBMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FMaW5lRWRpdC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzRjE5QTNCMDgyNDVFNTkwMDFFOUFCQyAvKiBLV1FMaXN0Qm94Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBM0MwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUxpc3RJbXBs
Lm1tIGluIFNvdXJjZXMgKi8sCkBAIC02NjI0LDcgKzY2MTMsNiBAQAogCQkJCUE4OEFEMjkzMDk1
MjQ4MEEwMDFERDE5NiAvKiBLV1FLVVJMLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQyOTQw
OTUyNDgwQTAwMUREMTk2IC8qIEtXUUtXaW4ubW0gaW4gU291cmNlcyAqLywKIAkJCQlBODhBRDI5
NTA5NTI0ODBBMDAxREQxOTYgLyogS1dRS1dpbk1vZHVsZS5tbSBpbiBTb3VyY2VzICovLAotCQkJ
CUE4OEFEMjk2MDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FMYWJlbC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUE4OEFEMjk3MDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FMaW5lRWRpdC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUE4OEFEMjk4MDk1MjQ4MEEwMDFERDE5NiAvKiBLV1FMaXN0Qm94Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTg4QUQyOTkwOTUyNDgwQTAwMUREMTk2IC8qIEtXUUxpc3RJbXBsLm1t
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBraHRtbC9raHRtbF9wYXJ0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9raHRtbF9wYXJ0LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4zNzEKZGlmZiAtcCAtdSAtcjEuMzcxIGtodG1sL2todG1sX3BhcnQuY3Bw
Ci0tLSBraHRtbC9raHRtbF9wYXJ0LmNwcAkyMSBEZWMgMjAwNSAxNjo1MTowMCAtMDAwMAkxLjM3
MQorKysga2h0bWwva2h0bWxfcGFydC5jcHAJMjMgRGVjIDIwMDUgMDM6Mjg6MzUgLTAwMDAKQEAg
LTUxMCwxNCArNTEwLDggQEAgUVZhcmlhbnQgS0hUTUxQYXJ0OjpleGVjdXRlU2NyaXB0KCBjb25z
dAogICAgIHJldHVybiBleGVjdXRlU2NyaXB0KCAwLCBzY3JpcHQsIGZvcmNlVXNlckdlc3R1cmUg
KTsKIH0KIAotLy9FbmFibGUgdGhpcyB0byBzZWUgYWxsIEpTIHNjcmlwdHMgYmVpbmcgZXhlY3V0
ZWQKLS8vI2RlZmluZSBLSlNfVkVSQk9TRQotCiBRVmFyaWFudCBLSFRNTFBhcnQ6OmV4ZWN1dGVT
Y3JpcHQoIERPTTo6Tm9kZUltcGwgKm4sIGNvbnN0IFFTdHJpbmcgJnNjcmlwdCwgYm9vbCBmb3Jj
ZVVzZXJHZXN0dXJlICkKIHsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYwNzApIDw8
ICJLSFRNTFBhcnQ6OmV4ZWN1dGVTY3JpcHQgbj0iIDw8IG4ubm9kZU5hbWUoKS5xc3RyaW5nKCku
bGF0aW4xKCkgPDwgIigiIDw8IChuLmlzTnVsbCgpID8gMCA6IG4ubm9kZVR5cGUoKSkgPDwgIikg
IiA8PCBzY3JpcHQgPDwgZW5kbDsKLSNlbmRpZgogICBLSlNQcm94eUltcGwgKnByb3h5ID0galNj
cmlwdCgpOwogCiAgIGlmICghcHJveHkpCkBAIC01MzIsOSArNTI2LDYgQEAgUVZhcmlhbnQgS0hU
TUxQYXJ0OjpleGVjdXRlU2NyaXB0KCBET006OgogICAgICAgc3VibWl0Rm9ybUFnYWluKCk7CiAg
ICAgRG9jdW1lbnRJbXBsOjp1cGRhdGVEb2N1bWVudHNSZW5kZXJpbmcoKTsKIAotI2lmZGVmIEtK
U19WRVJCT1NFCi0gIGtkRGVidWcoNjA3MCkgPDwgIktIVE1MUGFydDo6ZXhlY3V0ZVNjcmlwdCAt
IGRvbmUiIDw8IGVuZGw7Ci0jZW5kaWYKICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMTE3MywyMiAr
MTE2NCwxNiBAQCB2b2lkIEtIVE1MUGFydDo6Y2hlY2tFbWl0TG9hZEV2ZW50KCkKICAgLy8gQWxs
IGZyYW1lcyBjb21wbGV0ZWQgLT4gc2V0IHRoZWlyIGRvbWFpbiB0byB0aGUgZnJhbWVzZXQncyBk
b21haW4KICAgLy8gVGhpcyBtdXN0IG9ubHkgYmUgZG9uZSB3aGVuIGxvYWRpbmcgdGhlIGZyYW1l
c2V0IGluaXRpYWxseSAoIzIyMDM5KSwKICAgLy8gbm90IHdoZW4gZm9sbG93aW5nIGEgbGluayBp
biBhIGZyYW1lICgjNDQxNjIpLgotICBpZiAoIGQtPm1fZG9jICkKLSAgeworICBpZiAoZC0+bV9k
b2MpIHsKICAgICBET01TdHJpbmcgZG9tYWluID0gZC0+bV9kb2MtPmRvbWFpbigpOwogICAgIENv
bnN0RnJhbWVJdCBpdCA9IGQtPm1fZnJhbWVzLmJlZ2luKCk7CiAgICAgQ29uc3RGcmFtZUl0IGVu
ZCA9IGQtPm1fZnJhbWVzLmVuZCgpOwotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQgKQotICAg
IHsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0ICkgewogICAgICAgS1BhcnRzOjpSZWFkT25s
eVBhcnQgKnAgPSAoKml0KS5tX3BhcnQ7Ci0gICAgICBpZiAoIHAgJiYgcC0+aW5oZXJpdHMoICJL
SFRNTFBhcnQiICkpCi0gICAgICB7CisgICAgICBpZiAocCAmJiBwLT5pbmhlcml0cygiS0hUTUxQ
YXJ0IikpIHsKICAgICAgICAgS0hUTUxQYXJ0KiBodG1sRnJhbWUgPSBzdGF0aWNfY2FzdDxLSFRN
TFBhcnQgKj4ocCk7CiAgICAgICAgIGlmIChodG1sRnJhbWUtPmQtPm1fZG9jKQotICAgICAgICB7
Ci0gICAgICAgICAga2REZWJ1ZygpIDw8ICJLSFRNTFBhcnQ6OmNoZWNrQ29tcGxldGVkIHNldHRp
bmcgZnJhbWUgZG9tYWluIHRvICIgPDwgZG9tYWluLnFzdHJpbmcoKSA8PCBlbmRsOwotICAgICAg
ICAgIGh0bWxGcmFtZS0+ZC0+bV9kb2MtPnNldERvbWFpbiggZG9tYWluICk7Ci0gICAgICAgIH0K
KyAgICAgICAgICBodG1sRnJhbWUtPmQtPm1fZG9jLT5zZXREb21haW4oZG9tYWluKTsKICAgICAg
IH0KICAgICB9CiAgIH0KSW5kZXg6IGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19iYXNlLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4yNApkaWZmIC1wIC11IC1yMS4yNCBraHRtbC9jc3MvY3NzX2Jhc2Uu
Y3BwCi0tLSBraHRtbC9jc3MvY3NzX2Jhc2UuY3BwCTEyIERlYyAyMDA1IDIyOjIyOjIxIC0wMDAw
CTEuMjQKKysrIGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAJMjMgRGVjIDIwMDUgMDM6Mjg6MzYgLTAw
MDAKQEAgLTI2OCwxNiArMjY4LDE2IEBAIERPTVN0cmluZyBDU1NTZWxlY3Rvcjo6c2VsZWN0b3JU
ZXh0KCkgY28KICAgICAgICAgc3RyID0gbG9jYWxOYW1lOwogICAgIGlmIChjcy0+bWF0Y2ggPT0g
Q1NTU2VsZWN0b3I6OklkKSB7CiAgICAgICAgIHN0ciArPSAiIyI7Ci0gICAgICAgIHN0ciArPSBj
cy0+dmFsdWUucXN0cmluZygpOworICAgICAgICBzdHIgKz0gY3MtPnZhbHVlOwogICAgIH0gZWxz
ZSBpZiAoY3MtPm1hdGNoID09IENTU1NlbGVjdG9yOjpDbGFzcykgewogICAgICAgICBzdHIgKz0g
Ii4iOwotICAgICAgICBzdHIgKz0gY3MtPnZhbHVlLnFzdHJpbmcoKTsKKyAgICAgICAgc3RyICs9
IGNzLT52YWx1ZTsKICAgICB9IGVsc2UgaWYgKGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3MpIHsKICAgICAgICAgc3RyICs9ICI6IjsKLSAgICAgICAgc3RyICs9IGNzLT52YWx1
ZS5xc3RyaW5nKCk7CisgICAgICAgIHN0ciArPSBjcy0+dmFsdWU7CiAgICAgfSBlbHNlIGlmIChj
cy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpIHsKICAgICAgICAgc3RyICs9
ICI6OiI7Ci0gICAgICAgIHN0ciArPSBjcy0+dmFsdWUucXN0cmluZygpOworICAgICAgICBzdHIg
Kz0gY3MtPnZhbHVlOwogICAgIH0gZWxzZSBpZiAoY3MtPmhhc0F0dHJpYnV0ZSgpKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgZHVtcGluZyBuYW1lc3BhY2VzLgogICAgICAg
ICBET01TdHJpbmcgYXR0ck5hbWUgPSBjcy0+YXR0ci5sb2NhbE5hbWUoKTsKQEAgLTMxMSw3ICsz
MTEsNyBAQCBET01TdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9yVGV4dCgpIGNvCiAgICAgICAg
IH0KICAgICAgICAgaWYgKGNzLT5tYXRjaCAhPSBDU1NTZWxlY3Rvcjo6U2V0KSB7CiAgICAgICAg
ICAgICBzdHIgKz0gIlwiIjsKLSAgICAgICAgICAgIHN0ciArPSBjcy0+dmFsdWUucXN0cmluZygp
OworICAgICAgICAgICAgc3RyICs9IGNzLT52YWx1ZTsKICAgICAgICAgICAgIHN0ciArPSAiXCJd
IjsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3Nf
c3R5bGVzaGVldGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIxCmRpZmYgLXAgLXUg
LXIxLjIxIGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuY3BwCi0tLSBraHRtbC9jc3MvY3Nz
X3N0eWxlc2hlZXRpbXBsLmNwcAkyMCBEZWMgMjAwNSAwOToxNjo0NCAtMDAwMAkxLjIxCisrKyBr
aHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAkyMyBEZWMgMjAwNSAwMzoyODozNiAtMDAw
MApAQCAtMzY4LDcgKzM2OCw2IEBAIERPTTo6RE9NU3RyaW5nIE1lZGlhTGlzdEltcGw6Om1lZGlh
VGV4dCgKIHZvaWQgTWVkaWFMaXN0SW1wbDo6c2V0TWVkaWFUZXh0KGNvbnN0IERPTTo6RE9NU3Ry
aW5nICZ2YWx1ZSkKIHsKICAgICBtX2xzdE1lZGlhLmNsZWFyKCk7Ci0gICAgUVN0cmluZyB2YWwg
PSB2YWx1ZS5xc3RyaW5nKCk7CiAgICAgUVN0cmluZ0xpc3QgbGlzdCA9IFFTdHJpbmdMaXN0Ojpz
cGxpdCggJywnLCB2YWx1ZS5xc3RyaW5nKCkgKTsKICAgICBmb3IgKCBRU3RyaW5nTGlzdDo6SXRl
cmF0b3IgaXQgPSBsaXN0LmJlZ2luKCk7IGl0ICE9IGxpc3QuZW5kKCk7ICsraXQgKQogICAgIHsK
SW5kZXg6IGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMjMxCmRpZmYgLXAgLXUgLXIxLjIzMSBraHRtbC9jc3MvY3Nzc3R5
bGVzZWxlY3Rvci5jcHAKLS0tIGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAkxNSBEZWMg
MjAwNSAyMjozMTozMyAtMDAwMAkxLjIzMQorKysga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3Iu
Y3BwCTIzIERlYyAyMDA1IDAzOjI4OjQwIC0wMDAwCkBAIC02MDIsNyArNjAyLDYgQEAgc3RhdGlj
IHZvaWQgY2hlY2tQc2V1ZG9TdGF0ZSggRWxlbWVudEltcAogICAgICAgICAgICAgdS5wcmVwZW5k
KGN1cnJlbnRFbmNvZGVkVVJMLT5wYXRoKTsKICAgICAgICAgY2xlYW5wYXRoKCB1ICk7CiAgICAg
fQotICAgIC8vY29tcGxldGVVUkwoIGF0dHIucXN0cmluZygpICk7CiAgICAgcHNldWRvU3RhdGUg
PSBLSFRNTEZhY3Rvcnk6OnZMaW5rcygpLT5jb250YWlucyggdSApID8gUHNldWRvVmlzaXRlZCA6
IFBzZXVkb0xpbms7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9kb21fc3RyaW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbV9zdHJpbmcuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC1wIC11IC1yMS4xNiBraHRtbC9kb20vZG9tX3N0
cmluZy5oCi0tLSBraHRtbC9kb20vZG9tX3N0cmluZy5oCTE2IERlYyAyMDA1IDIyOjI2OjEyIC0w
MDAwCTEuMTYKKysrIGtodG1sL2RvbS9kb21fc3RyaW5nLmgJMjMgRGVjIDIwMDUgMDM6Mjg6NDAg
LTAwMDAKQEAgLTczLDYgKzczLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFFDaGFyICZvcGVyYXRv
ciBbXSh1bnNpZ25lZCBpbnQgaSkgY29uc3Q7CiAKICAgICBpbnQgZmluZChjb25zdCBRQ2hhciBj
LCBpbnQgc3RhcnQgPSAwKSBjb25zdDsKKyAgICBET01TdHJpbmcgJnJlcGxhY2UoUUNoYXIgYSwg
UUNoYXIgYikgeyBtX2ltcGwgPSBtX2ltcGwtPnJlcGxhY2UoYSwgYik7IHJldHVybiAqdGhpczsg
fQogCiAgICAgdWludCBsZW5ndGgoKSBjb25zdDsKICAgICB2b2lkIHRydW5jYXRlKCB1bnNpZ25l
ZCBpbnQgbGVuICk7CkluZGV4OiBraHRtbC9lY21hL2tqc19jc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2Nzcy5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNDQKZGlmZiAtcCAtdSAtcjEuNDQga2h0bWwvZWNtYS9ranNfY3NzLmNw
cAotLS0ga2h0bWwvZWNtYS9ranNfY3NzLmNwcAkxMyBEZWMgMjAwNSAyMToyOToyOCAtMDAwMAkx
LjQ0CisrKyBraHRtbC9lY21hL2tqc19jc3MuY3BwCTIzIERlYyAyMDA1IDAzOjI4OjQxIC0wMDAw
CkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBET01DU1NTdHlsZURlY2xhcmF0aW9uOjpwdXQoRXhl
Y1N0YQogICAgIGlmIChpc0NTU1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICBi
b29sIHBpeGVsT3JQb3M7CiAgICAgICBET01TdHJpbmcgcHJvcCA9IGNzc1Byb3BlcnR5TmFtZShw
cm9wZXJ0eU5hbWUsICZwaXhlbE9yUG9zKTsKLSAgICAgIFFTdHJpbmcgcHJvcHZhbHVlID0gdmFs
dWUtPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsKKyAgICAgIERPTVN0cmluZyBwcm9wdmFsdWUg
PSB2YWx1ZS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCk7CiAgICAgICBpZiAocGl4ZWxPclBv
cykKIAlwcm9wdmFsdWUgKz0gInB4IjsKICNpZmRlZiBLSlNfVkVSQk9TRQpAQCAtMjMzLDcgKzIz
Myw3IEBAIHZvaWQgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjo6cHV0KEV4ZWNTdGEKICAgICAgICAg
Ly8gSXQgd291bGQgYmUgbmljZSB0byBmaXggdGhpcyBzb21lIGRheSwgcGVyaGFwcyB3aXRoIHNv
bWUga2luZCBvZiAicXVpcmtzIG1vZGUiLAogICAgICAgICAvLyBidXQgaXQncyBsaWtlbHkgdGhh
dCB0aGUgRGFzaGJvYXJkIHdpZGdldHMgYXJlIGFscmVhZHkgdXNpbmcgYSBzdHJpY3QgbW9kZSBE
T0NUWVBFLgogICAgICAgICBpbnQgaWdub3JlRXhjZXB0aW9uID0gMDsKLSAgICAgICAgc3R5bGVE
ZWNsLnNldFByb3BlcnR5KHByb3AsIERPTVN0cmluZyhwcm9wdmFsdWUpLCAiIiwgaWdub3JlRXhj
ZXB0aW9uKTsKKyAgICAgICAgc3R5bGVEZWNsLnNldFByb3BlcnR5KHByb3AsIHByb3B2YWx1ZSwg
IiIsIGlnbm9yZUV4Y2VwdGlvbik7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgIERPTU9i
amVjdDo6cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOwpJbmRleDoga2h0bWwv
ZWNtYS9ranNfZG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9lY21hL2tqc19kb20uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyMApkaWZmIC1w
IC11IC1yMS4xMjAga2h0bWwvZWNtYS9ranNfZG9tLmNwcAotLS0ga2h0bWwvZWNtYS9ranNfZG9t
LmNwcAkxNiBEZWMgMjAwNSAwODowODoxMiAtMDAwMAkxLjEyMAorKysga2h0bWwvZWNtYS9ranNf
ZG9tLmNwcAkyMyBEZWMgMjAwNSAwMzoyODo0MyAtMDAwMApAQCAtNDQxLDExICs0NDEsNyBAQCBK
U1ZhbHVlICpET01Ob2RlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTCiAKIHZvaWQgRE9NTm9kZTo6
cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlICp2YWx1ZSwgaW50IGF0dHIpCiB7Ci0jaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2
MDcwKSA8PCAiRE9NTm9kZTo6cHV0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRs
OwotI2VuZGlmCi0gIGxvb2t1cFB1dDxET01Ob2RlLERPTU9iamVjdD4oZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmRE9NTm9kZVRhYmxlLCB0aGlzICk7CisgICAgbG9va3VwUHV0PERPTU5vZGUsRE9NT2JqZWN0
PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmRE9NTm9kZVRhYmxlLCB0aGlzKTsK
IH0KIAogdm9pZCBET01Ob2RlOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBKU1ZhbHVlICp2YWx1ZSwgaW50IC8qYXR0ciovKQpAQCAtODUwLDExICs4NDYsNyBA
QCBKU1ZhbHVlICpET01BdHRyOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTCiAKIHZvaWQgRE9NQXR0
cjo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBK
U1ZhbHVlICp2YWx1ZSwgaW50IGF0dHIpCiB7Ci0jaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1
Zyg2MDcwKSA8PCAiRE9NQXR0cjo6cHV0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBl
bmRsOwotI2VuZGlmCi0gIGxvb2t1cFB1dDxET01BdHRyLERPTU5vZGU+KGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIGF0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZET01BdHRyVGFibGUsIHRoaXMgKTsKKyAgICBsb29rdXBQdXQ8RE9NQXR0cixET01Ob2RlPihl
eGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmRE9NQXR0clRhYmxlLCB0aGlzKTsKIH0K
IAogdm9pZCBET01BdHRyOjpwdXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBKU1ZhbHVlICp2YWx1ZSwgaW50IC8qYXR0ciovKQpAQCAtMTAwMiwxMCArOTk0LDcgQEAg
SlNWYWx1ZSAqRE9NRG9jdW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRQogCiB2b2lkIERPTURvY3Vt
ZW50OjpwdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgKnZhbHVlLCBpbnQgYXR0cikKIHsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERl
YnVnKDYwNzApIDw8ICJET01Eb2N1bWVudDo6cHV0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmco
KSA8PCBlbmRsOwotI2VuZGlmCi0gIGxvb2t1cFB1dDxET01Eb2N1bWVudCxET01Ob2RlPihleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmRE9NRG9jdW1lbnRUYWJsZSwgdGhpcyApOwor
ICAgIGxvb2t1cFB1dDxET01Eb2N1bWVudCxET01Ob2RlPihleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBhdHRyLCAmRE9NRG9jdW1lbnRUYWJsZSwgdGhpcyk7CiB9CiAKIHZvaWQgRE9NRG9jdW1l
bnQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIEpTVmFsdWUg
KnZhbHVlLCBpbnQgLyphdHRyKi8pCkluZGV4OiBraHRtbC9lY21hL2tqc19ldmVudHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50
cy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzkKZGlmZiAtcCAtdSAtcjEuNzkga2h0bWwv
ZWNtYS9ranNfZXZlbnRzLmNwcAotLS0ga2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcAkyMiBEZWMg
MjAwNSAwNDowNjo0NSAtMDAwMAkxLjc5CisrKyBraHRtbC9lY21hL2tqc19ldmVudHMuY3BwCTIz
IERlYyAyMDA1IDAzOjI4OjQ0IC0wMDAwCkBAIC0xMTcsMTEgKzExNywxMSBAQCB2b2lkIEpTQWJz
dHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVuCiAKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gZXhlYy0+ZXhj
ZXB0aW9uKCktPnRvT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgUVN0cmluZyBtZXNzYWdlID0g
ZXhjZXB0aW9uLT5nZXQoZXhlYywgbWVzc2FnZVByb3BlcnR5TmFtZSktPnRvU3RyaW5nKGV4ZWMp
LnFzdHJpbmcoKTsKKyAgICAgICAgICAgIERPTVN0cmluZyBtZXNzYWdlID0gZXhjZXB0aW9uLT5n
ZXQoZXhlYywgbWVzc2FnZVByb3BlcnR5TmFtZSktPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygp
OwogICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSBleGNlcHRpb24tPmdldChleGVjLCAibGlu
ZSIpLT50b0ludDMyKGV4ZWMpOwotICAgICAgICAgICAgUVN0cmluZyBzb3VyY2VVUkwgPSBleGNl
cHRpb24tPmdldChleGVjLCAic291cmNlVVJMIiktPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKTsK
KyAgICAgICAgICAgIERPTVN0cmluZyBzb3VyY2VVUkwgPSBleGNlcHRpb24tPmdldChleGVjLCAi
c291cmNlVVJMIiktPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpOwogICAgICAgICAgICAgaWYg
KEludGVycHJldGVyOjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkKLSAgICAgICAgICAgICAgICBw
cmludGYoIihldmVudCBoYW5kbGVyKTolc1xuIiwgbWVzc2FnZS5sb2NhbDhCaXQoKS5kYXRhKCkp
OworICAgICAgICAgICAgICAgIHByaW50ZigiKGV2ZW50IGhhbmRsZXIpOiVzXG4iLCBtZXNzYWdl
LnFzdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIEtXUShwYXJ0KS0+YWRkTWVz
c2FnZVRvQ29uc29sZShtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOwogICAgICAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgfSBlbHNlIHsKSW5kZXg6IGtodG1s
L2VjbWEva2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2VjbWEva2pzX2h0bWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1NwpkaWZm
IC1wIC11IC1yMS4xNTcga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAKLS0tIGtodG1sL2VjbWEva2pz
X2h0bWwuY3BwCTE2IERlYyAyMDA1IDA4OjA4OjEyIC0wMDAwCTEuMTU3CisrKyBraHRtbC9lY21h
L2tqc19odG1sLmNwcAkyMyBEZWMgMjAwNSAwMzoyODo1MCAtMDAwMApAQCAtMzk4LDEwICszOTgs
NyBAQCBib29sIEhUTUxEb2N1bWVudDo6Z2V0T3duUHJvcGVydHlTbG90KEV4CiAKIHZvaWQgS0pT
OjpIVE1MRG9jdW1lbnQ6OnB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSAqdmFsdWUsIGludCBhdHRyKQogewotI2lmZGVmIEtKU19WRVJC
T1NFCi0gIGtkRGVidWcoNjA3MCkgPDwgIktKUzo6SFRNTERvY3VtZW50OjpwdXQgIiA8PCBwcm9w
ZXJ0eU5hbWUucXN0cmluZygpIDw8IGVuZGw7Ci0jZW5kaWYKLSAgbG9va3VwUHV0PEhUTUxEb2N1
bWVudCwgRE9NRG9jdW1lbnQ+KCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmSFRN
TERvY3VtZW50VGFibGUsIHRoaXMgKTsKKyAgICBsb29rdXBQdXQ8SFRNTERvY3VtZW50LCBET01E
b2N1bWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwgJkhUTUxEb2N1bWVudFRh
YmxlLCB0aGlzKTsKIH0KIAogdm9pZCBLSlM6OkhUTUxEb2N1bWVudDo6cHV0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgSlNWYWx1ZSAqdmFsdWUsIGludCAvKmF0dHIq
LykKQEAgLTI1MDUsNyArMjUwMiw3IEBAIEpTVmFsdWUgKktKUzo6SFRNTEVsZW1lbnRGdW5jdGlv
bjo6Y2FsbEEKICAgICB9CiAgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoY2FudmFz
VGFnKSkgewogICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCkg
ewotICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDAgfHwgKGFyZ3Muc2l6ZSgpID09IDEg
JiYgYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCkgPT0gIjJkIikpIHsK
KyAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAwIHx8IChhcmdzLnNpemUoKSA9PSAxICYm
IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLmxvd2VyKCkgPT0gIjJkIikpIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnRleHQyRCgmZWxlbWVudCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTI1MTcsMTUgKzI1
MTQsNyBAQCBKU1ZhbHVlICpLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OmNhbGxBCiAKIHZvaWQg
S0pTOjpIVE1MRWxlbWVudDo6cHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAm
cHJvcGVydHlOYW1lLCBKU1ZhbHVlICp2YWx1ZSwgaW50IGF0dHIpCiB7Ci0jaWZkZWYgS0pTX1ZF
UkJPU0UKLSAgICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc051bGwoKSA/IERPTTo6RE9N
U3RyaW5nKCkgOiB2YWx1ZS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCk7Ci0jZW5kaWYKICAg
ICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBs
ICo+KGltcGwoKSk7Ci0jaWZkZWYgS0pTX1ZFUkJPU0UKLSAgICBrZERlYnVnKDYwNzApIDw8ICJL
SlM6OkhUTUxFbGVtZW50Ojp0cnlQdXQgIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpCi0gICAg
ICAgICAgICAgICAgICA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5xc3RyaW5n
KCkKLSAgICAgICAgICAgICAgICAgIDw8ICIgc3RyPSIgPDwgc3RyLnFzdHJpbmcoKSA8PCBlbmRs
OwotI2VuZGlmCiAgICAgLy8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRpZXMKICAgICBp
ZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoc2VsZWN0VGFnKSkgewogICAgICAgICBIVE1MU2VsZWN0
RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKQEAgLTM5MjUsNyArMzkxNCw3IEBAIEpTVmFsdWUgKktKUzo6Q29udGV4dDJE
RnVuY3Rpb246OmNhbGxBc0YKICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAxKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKICAgICAg
ICAgICAgIENHTGluZUNhcCBjYXAgPSBrQ0dMaW5lQ2FwQnV0dDsKLSAgICAgICAgICAgIFFTdHJp
bmcgY2FwU3RyaW5nID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7
CisgICAgICAgICAgICBET01TdHJpbmcgY2FwU3RyaW5nID0gYXJnc1swXS0+dG9TdHJpbmcoZXhl
YykuZG9tU3RyaW5nKCkubG93ZXIoKTsKICAgICAgICAgICAgIGlmIChjYXBTdHJpbmcgPT0gInJv
dW5kIikKICAgICAgICAgICAgICAgICBjYXAgPSBrQ0dMaW5lQ2FwUm91bmQ7CiAgICAgICAgICAg
ICBlbHNlIGlmIChjYXBTdHJpbmcgPT0gInNxdWFyZSIpCkBAIC0zOTM3LDcgKzM5MjYsNyBAQCBK
U1ZhbHVlICpLSlM6OkNvbnRleHQyREZ1bmN0aW9uOjpjYWxsQXNGCiAgICAgICAgICAgICBpZiAo
YXJncy5zaXplKCkgIT0gMSkKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBDR0xpbmVKb2luIGpvaW4gPSBrQ0dMaW5lSm9p
bk1pdGVyOwotICAgICAgICAgICAgUVN0cmluZyBqb2luU3RyaW5nID0gYXJnc1swXS0+dG9TdHJp
bmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7CisgICAgICAgICAgICBET01TdHJpbmcgam9pblN0
cmluZyA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpLmxvd2VyKCk7CiAgICAg
ICAgICAgICBpZiAoam9pblN0cmluZyA9PSAicm91bmQiKQogICAgICAgICAgICAgICAgIGpvaW4g
PSBrQ0dMaW5lSm9pblJvdW5kOwogICAgICAgICAgICAgZWxzZSBpZiAoam9pblN0cmluZyA9PSAi
YmV2ZWwiKQpAQCAtNDQ1NCw3ICs0NDQzLDcgQEAgSlNWYWx1ZSAqS0pTOjpDb250ZXh0MkRGdW5j
dGlvbjo6Y2FsbEFzRgogICAgICAgICAgICAgaWYgKCFvLT5pc09iamVjdCgpIHx8ICFvLT5pbmhl
cml0cygmSW1hZ2U6OmluZm8pKQogICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFR5cGVFcnJvcik7CiAgICAgICAgICAgICBpbnQgcmVwZXRpdGlvblR5cGUgPSBJbWFnZVBh
dHRlcm46OlJlcGVhdDsKLSAgICAgICAgICAgIFFTdHJpbmcgcmVwZXRpdGlvblN0cmluZyA9IGFy
Z3NbMV0tPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpOworICAgICAgICAgICAgRE9N
U3RyaW5nIHJlcGV0aXRpb25TdHJpbmcgPSBhcmdzWzFdLT50b1N0cmluZyhleGVjKS5kb21TdHJp
bmcoKS5sb3dlcigpOwogICAgICAgICAgICAgaWYgKHJlcGV0aXRpb25TdHJpbmcgPT0gInJlcGVh
dC14IikKICAgICAgICAgICAgICAgICByZXBldGl0aW9uVHlwZSA9IEltYWdlUGF0dGVybjo6UmVw
ZWF0WDsKICAgICAgICAgICAgIGVsc2UgaWYgKHJlcGV0aXRpb25TdHJpbmcgPT0gInJlcGVhdC15
IikKQEAgLTQ3NDEsNyArNDczMCw3IEBAIHZvaWQgQ29udGV4dDJEOjpwdXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGEKICAgICAgICAgICAgIF9saW5lQ2FwID0gdmFsdWU7CiAgICAgICAgIAogICAgICAg
ICAgICAgQ0dMaW5lQ2FwIGNhcCA9IGtDR0xpbmVDYXBCdXR0OwotICAgICAgICAgICAgUVN0cmlu
ZyBjYXBTdHJpbmcgPSB2YWx1ZS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7Cisg
ICAgICAgICAgICBET01TdHJpbmcgY2FwU3RyaW5nID0gdmFsdWUtPnRvU3RyaW5nKGV4ZWMpLmRv
bVN0cmluZygpLmxvd2VyKCk7CiAgICAgICAgICAgICBpZiAoY2FwU3RyaW5nID09ICJyb3VuZCIp
CiAgICAgICAgICAgICAgICAgY2FwID0ga0NHTGluZUNhcFJvdW5kOwogICAgICAgICAgICAgZWxz
ZSBpZiAoY2FwU3RyaW5nID09ICJzcXVhcmUiKQpAQCAtNDc1NCw3ICs0NzQzLDcgQEAgdm9pZCBD
b250ZXh0MkQ6OnB1dFZhbHVlUHJvcGVydHkoRXhlY1N0YQogICAgICAgICAgICAgX2xpbmVKb2lu
ID0gdmFsdWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIENHTGluZUpvaW4gam9pbiA9IGtD
R0xpbmVKb2luTWl0ZXI7Ci0gICAgICAgICAgICBRU3RyaW5nIGpvaW5TdHJpbmcgPSB2YWx1ZS0+
dG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2VyKCk7CisgICAgICAgICAgICBET01TdHJpbmcg
am9pblN0cmluZyA9IHZhbHVlLT50b1N0cmluZyhleGVjKS5kb21TdHJpbmcoKS5sb3dlcigpOwog
ICAgICAgICAgICAgaWYgKGpvaW5TdHJpbmcgPT0gInJvdW5kIikKICAgICAgICAgICAgICAgICBq
b2luID0ga0NHTGluZUpvaW5Sb3VuZDsKICAgICAgICAgICAgIGVsc2UgaWYgKGpvaW5TdHJpbmcg
PT0gImJldmVsIikKSW5kZXg6IGtodG1sL2VjbWEva2pzX3Byb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19wcm94eS5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMzEKZGlmZiAtcCAtdSAtcjEuMzEga2h0bWwvZWNtYS9ranNfcHJv
eHkuY3BwCi0tLSBraHRtbC9lY21hL2tqc19wcm94eS5jcHAJMTYgRGVjIDIwMDUgMDg6MDg6MTMg
LTAwMDAJMS4zMQorKysga2h0bWwvZWNtYS9ranNfcHJveHkuY3BwCTIzIERlYyAyMDA1IDAzOjI4
OjUwIC0wMDAwCkBAIC03Miw3ICs3Miw3IEBAIFFWYXJpYW50IEtKU1Byb3h5SW1wbDo6ZXZhbHVh
dGUoY29uc3QgRE8KICAgICBpbnQgbGluZU51bWJlciA9ICBjb21wLnZhbHVlKCktPnRvT2JqZWN0
KG1fc2NyaXB0LT5nbG9iYWxFeGVjKCkpLT5nZXQobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSwgImxp
bmUiKS0+dG9JbnQzMihtX3NjcmlwdC0+Z2xvYmFsRXhlYygpKTsKICAgICBVU3RyaW5nIHNvdXJj
ZVVSTCA9IGNvbXAudmFsdWUoKS0+dG9PYmplY3QobV9zY3JpcHQtPmdsb2JhbEV4ZWMoKSktPmdl
dChtX3NjcmlwdC0+Z2xvYmFsRXhlYygpLCAic291cmNlVVJMIiktPnRvU3RyaW5nKG1fc2NyaXB0
LT5nbG9iYWxFeGVjKCkpOwogCi0gICAgS1dRKG1fcGFydCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUo
ZXJyb3JNZXNzYWdlLnFzdHJpbmcoKSwgbGluZU51bWJlciwgc291cmNlVVJMLnFzdHJpbmcoKSk7
CisgICAgS1dRKG1fcGFydCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoZXJyb3JNZXNzYWdlLmRvbVN0
cmluZygpLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwuZG9tU3RyaW5nKCkpOwogICB9CiAgIHJldHVy
biBRVmFyaWFudCgpOwogfQpJbmRleDoga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwNApkaWZmIC1wIC11IC1yMS4yMDQga2h0bWwvZWNt
YS9ranNfd2luZG93LmNwcAotLS0ga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAkyMCBEZWMgMjAw
NSAxNzowNTo1MSAtMDAwMAkxLjIwNAorKysga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAkyMyBE
ZWMgMjAwNSAwMzoyODo1MiAtMDAwMApAQCAtMTMxOSw4ICsxMzE5LDcgQEAgYm9vbCBXaW5kb3c6
OmlzU2FmZVNjcmlwdChFeGVjU3RhdGUgKmV4ZQogICAgICAgdGhpc0RvbWFpbiA9IGFuY2VzdG9y
UGFydC0+eG1sRG9jSW1wbCgpLT5kb21haW4oKTsKICAgfQogCi0gIC8va2REZWJ1Zyg2MDcwKSA8
PCAiY3VycmVudCBkb21haW46IiA8PCBhY3REb21haW4ucXN0cmluZygpIDw8ICIsIGZyYW1lIGRv
bWFpbjoiIDw8IHRoaXNEb21haW4ucXN0cmluZygpIDw8IGVuZGw7Ci0gIGlmICggYWN0RG9tYWlu
ID09IHRoaXNEb21haW4gKQorICBpZiAoYWN0RG9tYWluID09IHRoaXNEb21haW4pCiAgICAgcmV0
dXJuIHRydWU7CiAKICAgaWYgKEludGVycHJldGVyOjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkg
ewpAQCAtMTMzMCw5ICsxMzI5LDggQEAgYm9vbCBXaW5kb3c6OmlzU2FmZVNjcmlwdChFeGVjU3Rh
dGUgKmV4ZQogICBRU3RyaW5nIG1lc3NhZ2U7CiAgIG1lc3NhZ2Uuc3ByaW50ZigiVW5zYWZlIEph
dmFTY3JpcHQgYXR0ZW1wdCB0byBhY2Nlc3MgZnJhbWUgd2l0aCBVUkwgJXMgZnJvbSBmcmFtZSB3
aXRoIFVSTCAlcy4gRG9tYWlucyBtdXN0IG1hdGNoLlxuIiwgCiAgICAgICAgICAgICAgICAgICB0
aGlzRG9jdW1lbnQtPlVSTCgpLmxhdGluMSgpLCBhY3REb2N1bWVudC0+VVJMKCkubGF0aW4xKCkp
OwotICBLV1EobV9wYXJ0KS0+YWRkTWVzc2FnZVRvQ29uc29sZShtZXNzYWdlLCAxLCBRU3RyaW5n
KCkpOworICBLV1EobV9wYXJ0KS0+YWRkTWVzc2FnZVRvQ29uc29sZShET01TdHJpbmcobWVzc2Fn
ZSksIDEsIERPTVN0cmluZygpKTsKICAgCi0gIGtkV2FybmluZyg2MDcwKSA8PCAiSmF2YXNjcmlw
dDogYWNjZXNzIGRlbmllZCBmb3IgY3VycmVudCBmcmFtZSAnIiA8PCBhY3REb21haW4ucXN0cmlu
ZygpIDw8ICInIHRvIGZyYW1lICciIDw8IHRoaXNEb21haW4ucXN0cmluZygpIDw8ICInIiA8PCBl
bmRsOwogICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE0MjUsOCArMTQyMyw2IEBAIEpTVmFsdWUg
KldpbmRvd0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWMKICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0
cygmV2luZG93OjppbmZvKSkKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwogICBXaW5kb3cgKndpbmRvdyA9IHN0YXRpY19jYXN0PFdpbmRvdyAqPih0aGlzT2JqKTsKLSAg
UVN0cmluZyBzdHIsIHN0cjI7Ci0KICAgS0hUTUxQYXJ0ICpwYXJ0ID0gd2luZG93LT5tX3BhcnQ7
CiAgIGlmICghcGFydCkKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTE0MzQsNyArMTQz
MCw4IEBAIEpTVmFsdWUgKldpbmRvd0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWMKICAgS0hUTUxW
aWV3ICp3aWRnZXQgPSBwYXJ0LT52aWV3KCk7CiAgIEpTVmFsdWUgKnYgPSBhcmdzWzBdOwogICBV
U3RyaW5nIHMgPSB2LT50b1N0cmluZyhleGVjKTsKLSAgc3RyID0gcy5xc3RyaW5nKCk7CisgIERP
TVN0cmluZyBzdHIgPSBzLmRvbVN0cmluZygpOworICBET01TdHJpbmcgc3RyMjsKIAogICBzd2l0
Y2ggKGlkKSB7CiAgIGNhc2UgV2luZG93OjpBbGVydDoKQEAgLTE0NDcsMTQgKzE0NDQsMTYgQEAg
SlNWYWx1ZSAqV2luZG93RnVuYzo6Y2FsbEFzRnVuY3Rpb24oRXhlYwogICAgICAgcGFydC0+eG1s
RG9jSW1wbCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKICAgICByZXR1cm4ganNCb29sZWFuKEtXUShw
YXJ0KS0+cnVuSmF2YVNjcmlwdENvbmZpcm0oc3RyKSk7CiAgIGNhc2UgV2luZG93OjpQcm9tcHQ6
CisgIHsKICAgICBpZiAocGFydCAmJiBwYXJ0LT54bWxEb2NJbXBsKCkpCiAgICAgICBwYXJ0LT54
bWxEb2NJbXBsKCktPnVwZGF0ZVJlbmRlcmluZygpOwotICAgIGJvb2wgb2s7Ci0gICAgb2sgPSBL
V1EocGFydCktPnJ1bkphdmFTY3JpcHRQcm9tcHQoc3RyLCBhcmdzLnNpemUoKSA+PSAyID8gYXJn
c1sxXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygpIDogUVN0cmluZzo6bnVsbCwgc3RyMik7Ci0g
ICAgaWYgKCBvayApCisgICAgRE9NU3RyaW5nIG1lc3NhZ2UgPSBhcmdzLnNpemUoKSA+PSAyID8g
YXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkgOiBET01TdHJpbmcoKTsKKyAgICBi
b29sIG9rID0gS1dRKHBhcnQpLT5ydW5KYXZhU2NyaXB0UHJvbXB0KHN0ciwgbWVzc2FnZSwgc3Ry
Mik7CisgICAgaWYgKG9rKQogICAgICAgICByZXR1cm4ganNTdHJpbmcoc3RyMik7CiAgICAgZWxz
ZQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgIH0KICAgY2FzZSBXaW5kb3c6Ok9wZW46CiAg
IHsKICAgICBLQ29uZmlnICpjb25maWcgPSBuZXcgS0NvbmZpZygia29ucXVlcm9ycmMiKTsKQEAg
LTE1ODIsMTAgKzE1ODEsOSBAQCBKU1ZhbHVlICpXaW5kb3dGdW5jOjpjYWxsQXNGdW5jdGlvbihF
eGVjCiAgICAgICAvLyBwcmVwYXJlIGFyZ3VtZW50cwogICAgICAgS1VSTCB1cmw7CiAgICAgICBL
SFRNTFBhcnQqIGFjdGl2ZVBhcnQgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5tX3Bh
cnQ7Ci0gICAgICBpZiAoIXN0ci5pc0VtcHR5KCkpCi0gICAgICB7CisgICAgICBpZiAoIXN0ci5p
c0VtcHR5KCkpIHsKICAgICAgICAgaWYgKGFjdGl2ZVBhcnQpCi0gICAgICAgICAgdXJsID0gYWN0
aXZlUGFydC0+eG1sRG9jSW1wbCgpLT5jb21wbGV0ZVVSTChzdHIpOworICAgICAgICAgIHVybCA9
IGFjdGl2ZVBhcnQtPnhtbERvY0ltcGwoKS0+Y29tcGxldGVVUkwoc3RyLnFzdHJpbmcoKSk7CiAg
ICAgICB9CiAKICAgICAgIEtQYXJ0czo6VVJMQXJncyB1YXJnczsKQEAgLTE4NzAsMTAgKzE4Njgs
MTAgQEAgdm9pZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUoV2luZG93ICp3aQogICAgICAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgSlNPYmplY3Qq
IGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpLT50b09iamVjdChleGVjKTsKICAgICAgICAg
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgIFFTdHJpbmcg
bWVzc2FnZSA9IGV4Y2VwdGlvbi0+Z2V0KGV4ZWMsIG1lc3NhZ2VQcm9wZXJ0eU5hbWUpLT50b1N0
cmluZyhleGVjKS5xc3RyaW5nKCk7CisgICAgICAgICAgICAgICAgRE9NU3RyaW5nIG1lc3NhZ2Ug
PSBleGNlcHRpb24tPmdldChleGVjLCBtZXNzYWdlUHJvcGVydHlOYW1lKS0+dG9TdHJpbmcoZXhl
YykuZG9tU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIgPSBleGNlcHRp
b24tPmdldChleGVjLCAibGluZSIpLT50b0ludDMyKGV4ZWMpOwogICAgICAgICAgICAgICAgIGlm
IChJbnRlcnByZXRlcjo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHByaW50ZigiKHRpbWVyKTolc1xuIiwgbWVzc2FnZS5sb2NhbDhCaXQoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgICAgICAgICBwcmludGYoIih0aW1lcik6JXNcbiIsIG1lc3NhZ2UucXN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgICAgIEtXUSh3aW5kb3ctPm1fcGFydCkt
PmFkZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgbGluZU51bWJlciwgUVN0cmluZygpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDoga2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS94bWxo
dHRwcmVxdWVzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTQKZGlmZiAtcCAtdSAtcjEu
NTQga2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5jcHAKLS0tIGtodG1sL2VjbWEveG1saHR0cHJl
cXVlc3QuY3BwCTIwIERlYyAyMDA1IDA4OjQ5OjQ3IC0wMDAwCTEuNTQKKysrIGtodG1sL2VjbWEv
eG1saHR0cHJlcXVlc3QuY3BwCTIzIERlYyAyMDA1IDAzOjI4OjUyIC0wMDAwCkBAIC00Miw5ICs0
Miw3IEBACiAKICNpbmNsdWRlICJ4bWxodHRwcmVxdWVzdC5sdXQuaCIKIAotdXNpbmcgRE9NOjpE
b2N1bWVudEltcGw7Ci11c2luZyBET006OkRPTUltcGxlbWVudGF0aW9uSW1wbDsKLXVzaW5nIERP
TTo6RXZlbnRJbXBsOwordXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5hbWVzcGFjZSBET006
OkV2ZW50TmFtZXM7CiAKIHVzaW5nIGtodG1sOjpEZWNvZGVyOwpAQCAtMzQxLDcgKzMzOSw3IEBA
IHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4oY29uc3QgUVN0cmluZyYKICAgY2hhbmdlU3RhdGUo
TG9hZGluZyk7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoY29uc3QgUVN0cmluZyYg
X2JvZHkpCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKGNvbnN0IERPTVN0cmluZyYgX2JvZHkp
CiB7CiAgIGlmICghZG9jKQogICAgIHJldHVybjsKQEAgLTM1MiwxOCArMzUwLDE0IEBAIHZvaWQg
WE1MSHR0cFJlcXVlc3Q6OnNlbmQoY29uc3QgUVN0cmluZyYKIAogICBhYm9ydGVkID0gZmFsc2U7
CiAKLQogICBpZiAobWV0aG9kLmxvd2VyKCkgPT0gInBvc3QiICYmICh1cmwucHJvdG9jb2woKS5s
b3dlcigpID09ICJodHRwIiB8fCB1cmwucHJvdG9jb2woKS5sb3dlcigpID09ICJodHRwcyIpICkg
ewogICAgICAgLy8gRklYTUU6IGRldGVybWluZSBwb3N0IGVuY29kaW5nIGNvcnJlY3RseSBieSBs
b29raW5nIGluIGhlYWRlcnMgZm9yIGNoYXJzZXQKLSAgICAgIGpvYiA9IEtJTzo6aHR0cF9wb3N0
KCB1cmwsIF9ib2R5LnV0ZjgoKSwgZmFsc2UgKTsKKyAgICAgIGpvYiA9IEtJTzo6aHR0cF9wb3N0
KCB1cmwsIF9ib2R5LnFzdHJpbmcoKS51dGY4KCksIGZhbHNlICk7CiAgIH0KICAgZWxzZQotICB7
CiAgICAgIGpvYiA9IEtJTzo6Z2V0KCB1cmwsIGZhbHNlLCBmYWxzZSApOwotICB9Ci0gIGlmIChy
ZXF1ZXN0SGVhZGVycy5sZW5ndGgoKSA+IDApIHsKKyAgaWYgKHJlcXVlc3RIZWFkZXJzLmxlbmd0
aCgpID4gMCkKICAgICBqb2ItPmFkZE1ldGFEYXRhKCJjdXN0b21IVFRQSGVhZGVyIiwgcmVxdWVz
dEhlYWRlcnMpOwotICB9CiAKICAgaWYgKCFhc3luYykgewogICAgIFFCeXRlQXJyYXkgZGF0YTsK
QEAgLTcyMSw3ICs3MTUsNyBAQCBKU1ZhbHVlICpYTUxIdHRwUmVxdWVzdFByb3RvRnVuYzo6Y2Fs
bEFzCiAJcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICB9CiAKLSAgICAgIFFTdHJpbmcgYm9k
eTsKKyAgICAgIERPTVN0cmluZyBib2R5OwogCiAgICAgICBpZiAoYXJncy5zaXplKCkgPj0gMSkg
ewogCWlmIChhcmdzWzBdLT50b09iamVjdChleGVjKS0+aW5oZXJpdHMoJkRPTURvY3VtZW50Ojpp
bmZvKSkgewpAQCAtNzMxLDcgKzcyNSw3IEBAIEpTVmFsdWUgKlhNTEh0dHBSZXF1ZXN0UHJvdG9G
dW5jOjpjYWxsQXMKIAl9IGVsc2UgewogCSAgLy8gY29udmVydGluZyBjZXJ0YWluIHZhbHVlcyAo
bGlrZSBudWxsKSB0byBvYmplY3QgY2FuIHNldCBhbiBleGNlcHRpb24KIAkgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7Ci0JICBib2R5ID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYykucXN0cmluZygp
OworCSAgYm9keSA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmRvbVN0cmluZygpOwogCX0KICAg
ICAgIH0KIApJbmRleDoga2h0bWwvZWNtYS94bWxodHRwcmVxdWVzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEveG1saHR0cHJlcXVlc3QuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4yNQpkaWZmIC1wIC11IC1yMS4yNSBraHRtbC9lY21hL3htbGh0
dHByZXF1ZXN0LmgKLS0tIGtodG1sL2VjbWEveG1saHR0cHJlcXVlc3QuaAkyMCBEZWMgMjAwNSAw
ODo0OTo0NyAtMDAwMAkxLjI1CisrKyBraHRtbC9lY21hL3htbGh0dHByZXF1ZXN0LmgJMjMgRGVj
IDIwMDUgMDM6Mjg6NTMgLTAwMDAKQEAgLTk3LDcgKzk3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgdm9pZCBwcm9jZXNzU3luY0xvYWRSZXN1bHRzKGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEsIGNv
bnN0IEtVUkwgJmZpbmFsVVJMLCBjb25zdCBRU3RyaW5nICZoZWFkZXJzKTsKIAogICAgIHZvaWQg
b3Blbihjb25zdCBRU3RyaW5nJiBfbWV0aG9kLCBjb25zdCBLVVJMJiBfdXJsLCBib29sIF9hc3lu
Yyk7Ci0gICAgdm9pZCBzZW5kKGNvbnN0IFFTdHJpbmcmIF9ib2R5KTsKKyAgICB2b2lkIHNlbmQo
Y29uc3QgRE9NOjpET01TdHJpbmcmIF9ib2R5KTsKICAgICB2b2lkIGFib3J0KCk7CiAgICAgdm9p
ZCBzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IFFTdHJpbmcmIG5hbWUsIGNvbnN0IFFTdHJpbmcgJnZh
bHVlKTsKICAgICBKU1ZhbHVlICpnZXRBbGxSZXNwb25zZUhlYWRlcnMoKSBjb25zdDsKSW5kZXg6
IGtodG1sL2VkaXRpbmcvanNlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2pzZWRpdGluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMzYKZGlmZiAtcCAtdSAtcjEuMzYga2h0bWwvZWRpdGluZy9qc2VkaXRpbmcuY3BwCi0t
LSBraHRtbC9lZGl0aW5nL2pzZWRpdGluZy5jcHAJMjIgRGVjIDIwMDUgMDQ6MTE6MzcgLTAwMDAJ
MS4zNgorKysga2h0bWwvZWRpdGluZy9qc2VkaXRpbmcuY3BwCTIzIERlYyAyMDA1IDAzOjI4OjUz
IC0wMDAwCkBAIC0xMTUsNyArMTE1LDcgQEAgYm9vbCBKU0VkaXRvcjo6cXVlcnlDb21tYW5kU3Rh
dGUoY29uc3QgRAogCiBib29sIEpTRWRpdG9yOjpxdWVyeUNvbW1hbmRTdXBwb3J0ZWQoY29uc3Qg
RE9NU3RyaW5nICZjb21tYW5kKQogewotICAgIGlmICghc3VwcG9ydHNQYXN0ZUNvbW1hbmQgJiYg
Y29tbWFuZC5xc3RyaW5nKCkubG93ZXIoKSA9PSAicGFzdGUiKQorICAgIGlmICghc3VwcG9ydHNQ
YXN0ZUNvbW1hbmQgJiYgY29tbWFuZC5sb3dlcigpID09ICJwYXN0ZSIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICByZXR1cm4gY29tbWFuZEltcChjb21tYW5kKSAhPSAwOwogfQpJbmRleDog
a2h0bWwvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VkaXRpbmcvbWFya3VwLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40
MwpkaWZmIC1wIC11IC1yMS40MyBraHRtbC9lZGl0aW5nL21hcmt1cC5jcHAKLS0tIGtodG1sL2Vk
aXRpbmcvbWFya3VwLmNwcAkyMiBEZWMgMjAwNSAwNDoxMTozNyAtMDAwMAkxLjQzCisrKyBraHRt
bC9lZGl0aW5nL21hcmt1cC5jcHAJMjMgRGVjIDIwMDUgMDM6Mjg6NTQgLTAwMDAKQEAgLTkxLDE5
ICs5MSwxNyBAQCBzdGF0aWMgUVN0cmluZyBlc2NhcGVIVE1MKGNvbnN0IFFTdHJpbmcgCiAgICAg
cmV0dXJuIHM7CiB9CiAKLXN0YXRpYyBRU3RyaW5nIHN0cmluZ1ZhbHVlRm9yUmFuZ2UoY29uc3Qg
Tm9kZUltcGwgKm5vZGUsIGNvbnN0IFJhbmdlSW1wbCAqcmFuZ2UpCitzdGF0aWMgRE9NU3RyaW5n
IHN0cmluZ1ZhbHVlRm9yUmFuZ2UoY29uc3QgTm9kZUltcGwgKm5vZGUsIGNvbnN0IFJhbmdlSW1w
bCAqcmFuZ2UpCiB7CiAgICAgRE9NU3RyaW5nIHN0ciA9IG5vZGUtPm5vZGVWYWx1ZSgpLmNvcHko
KTsKICAgICBpZiAocmFuZ2UpIHsKICAgICAgICAgaW50IGV4Y2VwdGlvbkNvZGU7Ci0gICAgICAg
IGlmIChub2RlID09IHJhbmdlLT5lbmRDb250YWluZXIoZXhjZXB0aW9uQ29kZSkpIHsKKyAgICAg
ICAgaWYgKG5vZGUgPT0gcmFuZ2UtPmVuZENvbnRhaW5lcihleGNlcHRpb25Db2RlKSkKICAgICAg
ICAgICAgIHN0ci50cnVuY2F0ZShyYW5nZS0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbkNvZGUpKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAobm9kZSA9PSByYW5nZS0+c3RhcnRDb250YWluZXIoZXhjZXB0
aW9uQ29kZSkpIHsKKyAgICAgICAgaWYgKG5vZGUgPT0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGV4
Y2VwdGlvbkNvZGUpKQogICAgICAgICAgICAgc3RyLnJlbW92ZSgwLCByYW5nZS0+c3RhcnRPZmZz
ZXQoZXhjZXB0aW9uQ29kZSkpOwotICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBzdHIucXN0
cmluZygpOworICAgIHJldHVybiBzdHI7CiB9CiAKIHN0YXRpYyBRU3RyaW5nIHJlbmRlcmVkVGV4
dChjb25zdCBOb2RlSW1wbCAqbm9kZSwgY29uc3QgUmFuZ2VJbXBsICpyYW5nZSkKQEAgLTE3OCw5
ICsxNzYsOSBAQCBzdGF0aWMgUVN0cmluZyBzdGFydE1hcmt1cChjb25zdCBOb2RlSW1wCiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShzY3JpcHRUYWcp
IHx8CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShz
dHlsZVRhZykgfHwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNU
YWdOYW1lKHRleHRhcmVhVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1Zh
bHVlRm9yUmFuZ2Uobm9kZSwgcmFuZ2UpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Ry
aW5nVmFsdWVGb3JSYW5nZShub2RlLCByYW5nZSkucXN0cmluZygpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgUVN0cmluZyBtYXJrdXAgPSBhbm5vdGF0ZSA/IGVzY2FwZUhUTUwocmVuZGVy
ZWRUZXh0KG5vZGUsIHJhbmdlKSkgOiBlc2NhcGVIVE1MKHN0cmluZ1ZhbHVlRm9yUmFuZ2Uobm9k
ZSwgcmFuZ2UpKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIFFTdHJpbmcgbWFya3VwID0gYW5u
b3RhdGUgPyBlc2NhcGVIVE1MKHJlbmRlcmVkVGV4dChub2RlLCByYW5nZSkpIDogZXNjYXBlSFRN
TChzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIHJhbmdlKS5xc3RyaW5nKCkpOyAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKGRlZmF1bHRTdHlsZSkgewogICAgICAgICAgICAgICAgIE5vZGVJ
bXBsICplbGVtZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgICAgIGlmIChl
bGVtZW50KSB7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODYKZGlmZiAtcCAtdSAtcjEuODYga2h0bWwvaHRtbC9o
dG1sX2Jhc2VpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAkxNiBEZWMg
MjAwNSAwODowODoxNiAtMDAwMAkxLjg2CisrKyBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3Bw
CTIzIERlYyAyMDA1IDAzOjI4OjU0IC0wMDAwCkBAIC05OCw3ICs5OCw3IEBAIGJvb2wgSFRNTEJv
ZHlFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShjb24KIHZvaWQgSFRNTEJvZHlFbGVtZW50SW1wbDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IGJhY2tncm91bmRBdHRyKSB7Ci0gICAgICAgIFFTdHJpbmcgdXJs
ID0ga2h0bWw6OnBhcnNlVVJMKGF0dHItPnZhbHVlKCkpLnFzdHJpbmcoKTsKKyAgICAgICAgRE9N
U3RyaW5nIHVybCA9IGtodG1sOjpwYXJzZVVSTChhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgaWYg
KCF1cmwuaXNFbXB0eSgpKQogICAgICAgICAgICAgYWRkQ1NTSW1hZ2VQcm9wZXJ0eShhdHRyLCBD
U1NfUFJPUF9CQUNLR1JPVU5EX0lNQUdFLCBnZXREb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwp
KTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtYXJnaW53aWR0aEF0dHIgfHwgYXR0
ci0+bmFtZSgpID09IGxlZnRtYXJnaW5BdHRyKSB7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfZWxl
bWVudGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTE0CmRp
ZmYgLXAgLXUgLXIxLjExNCBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCi0tLSBraHRt
bC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCTIyIERlYyAyMDA1IDA0OjExOjM5IC0wMDAwCTEu
MTE0CisrKyBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCTIzIERlYyAyMDA1IDAzOjI4
OjU1IC0wMDAwCkBAIC00MjUsNyArNDI1LDYgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldE91
dGVyVGV4dChjb25zdAogCiB2b2lkIEhUTUxFbGVtZW50SW1wbDo6YWRkSFRNTEFsaWdubWVudChN
YXBwZWRBdHRyaWJ1dGVJbXBsKiBhdHRyKQogewotICAgIC8vcURlYnVnKCJhbGlnbm1lbnQgaXMg
JXMiLCBhbGlnbm1lbnQucXN0cmluZygpLmxhdGluMSgpICk7CiAgICAgLy8gdmVydGljYWwgYWxp
Z25tZW50IHdpdGggcmVzcGVjdCB0byB0aGUgY3VycmVudCBiYXNlbGluZSBvZiB0aGUgdGV4dAog
ICAgIC8vIHJpZ2h0IG9yIGxlZnQgbWVhbnMgZmxvYXRpbmcgaW1hZ2VzCiAgICAgaW50IHByb3Bm
bG9hdCA9IC0xOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIxNApkaWZmIC1wIC11IC1yMS4yMTQga2h0bWwvaHRt
bC9odG1sX2Zvcm1pbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAkyMSBE
ZWMgMjAwNSAxNjo1MTowMSAtMDAwMAkxLjIxNAorKysga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBs
LmNwcAkyMyBEZWMgMjAwNSAwMzoyODo1OCAtMDAwMApAQCAtMzI5LDEzICszMjksOSBAQCBib29s
IEhUTUxGb3JtRWxlbWVudEltcGw6OmZvcm1EYXRhKEZvcm1ECiAgICAgICAgIEhUTUxHZW5lcmlj
Rm9ybUVsZW1lbnRJbXBsKiBjdXJyZW50ID0gZm9ybUVsZW1lbnRzW2ldOwogICAgICAgICBGb3Jt
RGF0YUxpc3QgbHN0KGNvZGVjKTsKIAotICAgICAgICBpZiAoIWN1cnJlbnQtPmRpc2FibGVkKCkg
JiYgY3VycmVudC0+YXBwZW5kRm9ybURhdGEobHN0LCBtX211bHRpcGFydCkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIC8va2REZWJ1Zyg2MDMwKSA8PCAiYWRkaW5nIG5hbWUgIiA8PCBjdXJyZW50
LT5uYW1lKCkucXN0cmluZygpIDw8IGVuZGw7Ci0gICAgICAgICAgICBmb3IoUVZhbHVlTGlzdENv
bnN0SXRlcmF0b3I8Rm9ybURhdGFMaXN0SXRlbT4gaXQgPSBsc3QuYmVnaW4oKTsgaXQgIT0gbHN0
LmVuZCgpOyArK2l0ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fbXVs
dGlwYXJ0KQotICAgICAgICAgICAgICAgIHsKKyAgICAgICAgaWYgKCFjdXJyZW50LT5kaXNhYmxl
ZCgpICYmIGN1cnJlbnQtPmFwcGVuZEZvcm1EYXRhKGxzdCwgbV9tdWx0aXBhcnQpKSB7CisgICAg
ICAgICAgICBmb3IgKFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPEZvcm1EYXRhTGlzdEl0ZW0+IGl0
ID0gbHN0LmJlZ2luKCk7IGl0ICE9IGxzdC5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgICAg
IGlmICghbV9tdWx0aXBhcnQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIElTSU5E
RVggLyA8aW5wdXQgbmFtZT1pc2luZGV4PiBzcGVjaWFsCiAgICAgICAgICAgICAgICAgICAgIC8v
IGJ1dCBvbmx5IGlmIGl0cyB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgICAgICAgICAgICAgaWYg
KCBlbmNfc3RyaW5nLmlzRW1wdHkoKSAmJiAoKml0KS5tX2RhdGEgPT0gImlzaW5kZXgiICkgewpA
QCAtMTgzMCwxMCArMTgyNiw5IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudEltcGw6OmFwcGVuZEZv
cm1EYXQKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjYXNlIElNQUdFOgot
ICAgICAgICAgICAgaWYgKG1fYWN0aXZlU3VibWl0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGVuY29kaW5nLmFwcGVuZERhdGEobmFtZSgpLmlzRW1wdHkoKSA/IFFTdHJpbmc6OmZy
b21MYXRpbjEoIngiKSA6IChuYW1lKCkucXN0cmluZygpICsgIi54IiksIGNsaWNrWCgpKTsKLSAg
ICAgICAgICAgICAgICBlbmNvZGluZy5hcHBlbmREYXRhKG5hbWUoKS5pc0VtcHR5KCkgPyBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCJ5IikgOiAobmFtZSgpLnFzdHJpbmcoKSArICIueSIpLCBjbGlja1ko
KSk7CisgICAgICAgICAgICBpZiAobV9hY3RpdmVTdWJtaXQpIHsKKyAgICAgICAgICAgICAgICBl
bmNvZGluZy5hcHBlbmREYXRhKG5hbWUoKS5pc0VtcHR5KCkgPyAieCIgOiAobmFtZSgpICsgIi54
IiksIGNsaWNrWCgpKTsKKyAgICAgICAgICAgICAgICBlbmNvZGluZy5hcHBlbmREYXRhKG5hbWUo
KS5pc0VtcHR5KCkgPyAieSIgOiAobmFtZSgpICsgIi55IiksIGNsaWNrWSgpKTsKICAgICAgICAg
ICAgICAgICBpZiAoIW5hbWUoKS5pc0VtcHR5KCkgJiYgIXZhbHVlKCkuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgICAgICAgICBlbmNvZGluZy5hcHBlbmREYXRhKG5hbWUoKSwgdmFsdWUoKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xODQxLDkgKzE4MzYsOCBAQCBib29sIEhU
TUxJbnB1dEVsZW1lbnRJbXBsOjphcHBlbmRGb3JtRGF0CiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICBjYXNlIFNVQk1JVDoKLSAgICAgICAgICAgIGlmIChtX2FjdGl2ZVN1Ym1pdCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBRU3RyaW5nIGVuY19zdHIgPSB2YWx1ZVdpdGhE
ZWZhdWx0KCkucXN0cmluZygpOworICAgICAgICAgICAgaWYgKG1fYWN0aXZlU3VibWl0KSB7Cisg
ICAgICAgICAgICAgICAgRE9NU3RyaW5nIGVuY19zdHIgPSB2YWx1ZVdpdGhEZWZhdWx0KCk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFlbmNfc3RyLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAg
ICAgICBlbmNvZGluZy5hcHBlbmREYXRhKG5hbWUoKSwgZW5jX3N0cik7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzM2Nyw3ICszMzYxLDcgQEAgdm9pZCBIVE1MVGV4dEFy
ZWFFbGVtZW50SW1wbDo6dXBkYXRlVmFsdQogewogICAgIGlmICggIW1fdmFsdWVJc1ZhbGlkICkg
ewogICAgICAgICBpZiAoIG1fcmVuZGVyICkgewotICAgICAgICAgICAgbV92YWx1ZSA9IHN0YXRp
Y19jYXN0PFJlbmRlclRleHRBcmVhKj4oIG1fcmVuZGVyICktPnRleHQoKTsKKyAgICAgICAgICAg
IG1fdmFsdWUgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0QXJlYSo+KCBtX3JlbmRlciApLT50ZXh0
KCkucXN0cmluZygpOwogICAgICAgICAgICAgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IHRydWU7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX3ZhbHVlID0gZGVmYXVsdFZhbHVlKCku
cXN0cmluZygpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaGVhZGltcGwuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYzCmRpZmYgLXAgLXUgLXIxLjYzIGtodG1sL2h0bWwv
aHRtbF9oZWFkaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAJMTYgRGVj
IDIwMDUgMDg6MDg6MTcgLTAwMDAJMS42MworKysga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNw
cAkyMyBEZWMgMjAwNSAwMzoyODo1OCAtMDAwMApAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgSFRN
TExpbmtFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHQKICAgICAgICAgdG9rZW5pemVSZWxBdHRy
aWJ1dGUoYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIHByb2Nlc3MoKTsKICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBocmVmQXR0cikgewotICAgICAgICBtX3VybCA9IGdldERvY3VtZW50
KCktPmNvbXBsZXRlVVJMKHBhcnNlVVJMKGF0dHItPnZhbHVlKCkpLnFzdHJpbmcoKSk7CisgICAg
ICAgIG1fdXJsID0gZ2V0RG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocGFyc2VVUkwoYXR0ci0+dmFs
dWUoKSkpOwogCXByb2Nlc3MoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBl
QXR0cikgewogICAgICAgICBtX3R5cGUgPSBhdHRyLT52YWx1ZSgpOwpJbmRleDoga2h0bWwvaHRt
bC9odG1sX2ltYWdlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NjEKZGlmZiAtcCAtdSAtcjEuNjEga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKLS0tIGto
dG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCTE2IERlYyAyMDA1IDA4OjA4OjE4IC0wMDAwCTEu
NjEKKysrIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCTIzIERlYyAyMDA1IDAzOjI4OjU5
IC0wMDAwCkBAIC0xOTksMTIgKzE5OSw4IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQXQKICAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IHVzZW1hcEF0dHIpIHsKICAg
ICAgICAgaWYgKGF0dHItPnZhbHVlKCkuZG9tU3RyaW5nKClbMF0gPT0gJyMnKQogICAgICAgICAg
ICAgdXNlbWFwID0gYXR0ci0+dmFsdWUoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBR
U3RyaW5nIHVybCA9IGdldERvY3VtZW50KCktPmNvbXBsZXRlVVJMKGtodG1sOjpwYXJzZVVSTChh
dHRyLT52YWx1ZSgpKS5xc3RyaW5nKCkpOwotICAgICAgICAgICAgLy8gIyMjIHdlIHJlbW92ZSB0
aGUgcGFydCBiZWZvcmUgdGhlIGFuY2hvciBhbmQgaG9wZQotICAgICAgICAgICAgLy8gdGhlIG1h
cCBpcyBvbiB0aGUgc2FtZSBodG1sIHBhZ2UuLi4uCi0gICAgICAgICAgICB1c2VtYXAgPSB1cmw7
Ci0gICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdXNlbWFwID0gZ2V0RG9jdW1l
bnQoKS0+Y29tcGxldGVVUkwoa2h0bWw6OnBhcnNlVVJMKGF0dHItPnZhbHVlKCkpKTsKICAgICAg
ICAgbV9pc0xpbmsgPSAhYXR0ci0+aXNOdWxsKCk7CiAgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9
PSBpc21hcEF0dHIpIHsKICAgICAgICAgaXNtYXAgPSB0cnVlOwpJbmRleDoga2h0bWwvaHRtbC9o
dG1sX29iamVjdGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45
MgpkaWZmIC1wIC11IC1yMS45MiBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAKLS0tIGto
dG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAkxNiBEZWMgMjAwNSAwODowODoxOCAtMDAwMAkx
LjkyCisrKyBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJMjMgRGVjIDIwMDUgMDM6Mjk6
MDAgLTAwMDAKQEAgLTU5MywxMCArNTkzLDEwIEBAIGJvb2wgSFRNTE9iamVjdEVsZW1lbnRJbXBs
OjptYXBUb0VudHJ5KGMKIAogdm9pZCBIVE1MT2JqZWN0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7Ci0gICAgUVN0cmluZyB2YWwg
PSBhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKTsKKyAgICBET01TdHJpbmcgdmFsID0gYXR0ci0+dmFs
dWUoKTsKICAgICBpbnQgcG9zOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsK
LSAgICAgICAgc2VydmljZVR5cGUgPSB2YWwubG93ZXIoKTsKKyAgICAgICAgc2VydmljZVR5cGUg
PSB2YWwucXN0cmluZygpLmxvd2VyKCk7CiAgICAgICAgIHBvcyA9IHNlcnZpY2VUeXBlLmZpbmQo
ICI7IiApOwogICAgICAgICBpZiAoIHBvcyE9LTEgKQogICAgICAgICAgIHNlcnZpY2VUeXBlID0g
c2VydmljZVR5cGUubGVmdCggcG9zICk7CkBAIC02MDcsNyArNjA3LDcgQEAgdm9pZCBIVE1MT2Jq
ZWN0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQQogICAgICAgICAgIG1faW1hZ2VMb2FkZXIgPSAw
OwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZGF0YUF0dHIpIHsK
LSAgICAgICAgdXJsID0ga2h0bWw6OnBhcnNlVVJMKCAgdmFsICkucXN0cmluZygpOworICAgICAg
ICB1cmwgPSBraHRtbDo6cGFyc2VVUkwodmFsKS5xc3RyaW5nKCk7CiAgICAgICAgIGlmIChtX3Jl
bmRlcikKICAgICAgICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKICAgICAgICAgaWYgKG1f
cmVuZGVyICYmIGlzSW1hZ2VUeXBlKCkpIHsKQEAgLTEwNTQsMTAgKzEwNTQsOSBAQCBib29sIEhU
TUxQYXJhbUVsZW1lbnRJbXBsOjppc1VSTEF0dHJpYnV0CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSB2YWx1ZUF0dHIpIHsKICAgICAgICAgQXR0cmlidXRlSW1wbCAqYXR0ciA9IGF0dHJpYnV0ZXMo
KS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lQXR0cik7CiAgICAgICAgIGlmIChhdHRyKSB7Ci0gICAg
ICAgICAgICBET01TdHJpbmcgdmFsdWUgPSBhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKS5sb3dlcigp
OwotICAgICAgICAgICAgaWYgKHZhbHVlID09ICJzcmMiIHx8IHZhbHVlID09ICJtb3ZpZSIgfHwg
dmFsdWUgPT0gImRhdGEiKSB7CisgICAgICAgICAgICBET01TdHJpbmcgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpLmRvbVN0cmluZygpLmxvd2VyKCk7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gInNy
YyIgfHwgdmFsdWUgPT0gIm1vdmllIiB8fCB2YWx1ZSA9PSAiZGF0YSIpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0
dXJuIGZhbHNlOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQxCmRpZmYgLXAgLXUgLXIxLjQxIGtodG1sL2h0bWwv
aHRtbF9vYmplY3RpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmgJMTUgRGVj
IDIwMDUgMjI6MzE6NDAgLTAwMDAJMS40MQorKysga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwu
aAkyMyBEZWMgMjAwNSAwMzoyOTowMCAtMDAwMApAQCAtMjMyLDcgKzIzMiw3IEBAIHB1YmxpYzoK
IAogICAgIFFTdHJpbmcgc2VydmljZVR5cGU7CiAgICAgUVN0cmluZyB1cmw7Ci0gICAgUVN0cmlu
ZyBjbGFzc0lkOworICAgIERPTTo6RE9NU3RyaW5nIGNsYXNzSWQ7CiAgICAgYm9vbCBuZWVkV2lk
Z2V0VXBkYXRlIDogMTsKICAgICBib29sIG1fdXNlRmFsbGJhY2tDb250ZW50IDogMTsKICAgICBI
VE1MSW1hZ2VMb2FkZXIqIG1faW1hZ2VMb2FkZXI7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfdGFi
bGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfdGFibGVpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MQpkaWZmIC1w
IC11IC1yMS43MSBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9o
dG1sX3RhYmxlaW1wbC5jcHAJMTQgRGVjIDIwMDUgMjM6MzE6NTEgLTAwMDAJMS43MQorKysga2h0
bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJMjMgRGVjIDIwMDUgMDM6Mjk6MDEgLTAwMDAKQEAg
LTMxNywxMCArMzE3LDYgQEAgdm9pZCBIVE1MVGFibGVFbGVtZW50SW1wbDo6ZGVsZXRlUm93KCBp
bgogCiBOb2RlSW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmFkZENoaWxkKE5vZGVJbXBsICpj
aGlsZCkKIHsKLSNpZmRlZiBERUJVR19MQVlPVVQKLSAgICBrZERlYnVnKCA2MDMwICkgPDwgbm9k
ZU5hbWUoKS5xc3RyaW5nKCkgPDwgIihUYWJsZSk6OmFkZENoaWxkKCAiIDw8IGNoaWxkLT5ub2Rl
TmFtZSgpLnFzdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7Ci0jZW5kaWYKLQogICAgIGlmIChjaGls
ZC0+aGFzVGFnTmFtZShmb3JtVGFnKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxk
LgogICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKQEAgLTQ1Nyw3ICs0
NTMsNyBAQCB2b2lkIEhUTUxUYWJsZUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0CiAgICAgICAg
ICAgICBtX3NvbGlkID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IGJhY2tncm91bmRBdHRyKSB7Ci0gICAgICAgIFFTdHJpbmcgdXJsID0ga2h0bWw6OnBh
cnNlVVJMKCBhdHRyLT52YWx1ZSgpICkucXN0cmluZygpOworICAgICAgICBET01TdHJpbmcgdXJs
ID0ga2h0bWw6OnBhcnNlVVJMKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAoIXVybC5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBhZGRDU1NJbWFnZVByb3BlcnR5KGF0dHIsIENTU19QUk9QX0JB
Q0tHUk9VTkRfSU1BR0UsIGdldERvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkpOwogICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGZyYW1lQXR0cikgewpAQCAtNjk2LDcgKzY5Miw3IEBA
IHZvaWQgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsOjpwYXJzZU1hcHAKICAgICBpZiAoYXR0ci0+
bmFtZSgpID09IGJnY29sb3JBdHRyKSB7CiAgICAgICAgIGFkZENTU0NvbG9yKGF0dHIsIENTU19Q
Uk9QX0JBQ0tHUk9VTkRfQ09MT1IsIGF0dHItPnZhbHVlKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGJhY2tncm91bmRBdHRyKSB7Ci0gICAgICAgIFFTdHJpbmcgdXJsID0ga2h0
bWw6OnBhcnNlVVJMKCBhdHRyLT52YWx1ZSgpICkucXN0cmluZygpOworICAgICAgICBET01TdHJp
bmcgdXJsID0ga2h0bWw6OnBhcnNlVVJMKGF0dHItPnZhbHVlKCkpOwogICAgICAgICBpZiAoIXVy
bC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBhZGRDU1NJbWFnZVByb3BlcnR5KGF0dHIsIENTU19Q
Uk9QX0JBQ0tHUk9VTkRfSU1BR0UsIGdldERvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkpOwog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGJvcmRlcmNvbG9yQXR0cikgewpAQCAtNzQ1
LDEwICs3NDEsNiBAQCBib29sIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6Y2hlY2tECiAK
IE5vZGVJbXBsICpIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6OmFkZENoaWxkKE5vZGVJbXBs
ICpjaGlsZCkKIHsKLSNpZmRlZiBERUJVR19MQVlPVVQKLSAgICBrZERlYnVnKCA2MDMwICkgPDwg
bm9kZU5hbWUoKS5xc3RyaW5nKCkgPDwgIihUYm9keSk6OmFkZENoaWxkKCAiIDw8IGNoaWxkLT5u
b2RlTmFtZSgpLnFzdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7Ci0jZW5kaWYKLQogICAgIGlmIChj
aGlsZC0+aGFzVGFnTmFtZShmb3JtVGFnKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNo
aWxkLgogICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKQEAgLTg2OSwx
MCArODYxLDYgQEAgYm9vbCBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6Y2hlY2tEVEQoYwogCiBO
b2RlSW1wbCAqSFRNTFRhYmxlUm93RWxlbWVudEltcGw6OmFkZENoaWxkKE5vZGVJbXBsICpjaGls
ZCkKIHsKLSNpZmRlZiBERUJVR19MQVlPVVQKLSAgICBrZERlYnVnKCA2MDMwICkgPDwgbm9kZU5h
bWUoKS5xc3RyaW5nKCkgPDwgIihUcm93KTo6YWRkQ2hpbGQoICIgPDwgY2hpbGQtPm5vZGVOYW1l
KCkucXN0cmluZygpIDw8ICIgKSIgPDwgZW5kbDsKLSNlbmRpZgotCiAgICAgaWYgKGNoaWxkLT5o
YXNUYWdOYW1lKGZvcm1UYWcpKSB7CiAgICAgICAgIC8vIEZpcnN0IGFkZCB0aGUgY2hpbGQuCiAg
ICAgICAgIEhUTUxFbGVtZW50SW1wbDo6YWRkQ2hpbGQoY2hpbGQpOwpJbmRleDoga2h0bWwvaHRt
bC9odG1sdG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEy
NwpkaWZmIC1wIC11IC1yMS4xMjcga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAotLS0ga2h0
bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAkxNCBEZWMgMjAwNSAyMzozMTo1MiAtMDAwMAkxLjEy
NworKysga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAkyMyBEZWMgMjAwNSAwMzoyOTowMiAt
MDAwMApAQCAtMTIyMCwxMyArMTIyMCwxMyBAQCBIVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9r
ZW5pemVyOjpwYXJzCiAgICAgICAgICAgICAgICAgICAgICB2aWV3IC8qIGFyZSB3ZSBhIHJlZ3Vs
YXIgdG9rZW5pemVyIG9yIGp1c3QgZm9yIGlubmVySFRNTCA/ICovCiAgICAgICAgICAgICAgICAg
ICAgICkgewogICAgICAgICAgICAgICAgICAgICBpZiAoKGEgPSBjdXJyVG9rZW4uYXR0cnMtPmdl
dEF0dHJpYnV0ZUl0ZW0oc3JjQXR0cikpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0
U3JjID0gcGFyc2VyLT5kb2MoKS0+Y29tcGxldGVVUkwocGFyc2VVUkwoIGEtPnZhbHVlKCkgKS5x
c3RyaW5nKCkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdFNyYyA9IHBhcnNlci0+
ZG9jKCktPmNvbXBsZXRlVVJMKHBhcnNlVVJMKGEtPnZhbHVlKCkpLnFzdHJpbmcoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICgoYSA9IGN1cnJUb2tlbi5hdHRycy0+Z2V0QXR0cmlidXRlSXRl
bShjaGFyc2V0QXR0cikpKQogICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0U3JjQ2hhcnNl
dCA9IGEtPnZhbHVlKCkucXN0cmluZygpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIHNjcmlwdFNyY0NoYXJzZXQuaXNFbXB0eSgpICkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjcmlwdFNyY0NoYXJzZXQgPSBwYXJzZXItPmRvYygpLT5wYXJ0KCktPmVuY29k
aW5nKCk7CiAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIHR5cGUgYmVmb3JlIGxhbmd1YWdl
LCBzaW5jZSBsYW5ndWFnZSBpcyBkZXByZWNhdGVkICovCi0gICAgICAgICAgICAgICAgICAgIGlm
ICgoYSA9IGN1cnJUb2tlbi5hdHRycy0+Z2V0QXR0cmlidXRlSXRlbSh0eXBlQXR0cikpICE9IDAg
JiYgIWEtPnZhbHVlKCkucXN0cmluZygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKChhID0gY3VyclRva2VuLmF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKHR5cGVBdHRyKSkgIT0g
MCAmJiAhYS0+dmFsdWUoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3Vu
ZFR5cGVBdHRyaWJ1dGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICBhID0gY3VyclRva2VuLmF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKGxh
bmd1YWdlQXR0cik7CkBAIC0xMjY1LDE5ICsxMjY1LDE4IEBAIEhUTUxUb2tlbml6ZXI6OlN0YXRl
IEhUTUxUb2tlbml6ZXI6OnBhcnMKICAgICAgICAgICAgICAgICAgICAgIE5laXRoZXIgTW96aWxs
YSAxLjUgbm9yIFdpbklFIDYgYWNjZXB0IGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZS4K
ICAgICAgICAgICAgICAgICAgICAgIFdlIHdhbnQgdG8gYWNjZXB0IGFsbCB0aGUgdmFsdWVzIHRo
YXQgZWl0aGVyIG9mIHRoZXNlIGJyb3dzZXJzIGFjY2VwdCwgYnV0IG5vdCBvdGhlciB2YWx1ZXMu
CiAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGxh
bmcgPSBhLT52YWx1ZSgpLnFzdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgbGFuZyA9IGxh
bmcubG93ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYoIGxhbmcuY29tcGFyZSgiIikgIT0g
MCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgbGFuZy5jb21wYXJlKCJqYXZhc2NyaXB0Iikg
IT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgbGFuZy5jb21wYXJlKCJqYXZhc2NyaXB0
MS4wIikgIT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgbGFuZy5jb21wYXJlKCJqYXZh
c2NyaXB0MS4xIikgIT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgbGFuZy5jb21wYXJl
KCJqYXZhc2NyaXB0MS4yIikgIT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgbGFuZy5j
b21wYXJlKCJqYXZhc2NyaXB0MS4zIikgIT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
bGFuZy5jb21wYXJlKCJqYXZhc2NyaXB0MS40IikgIT0gMCAmJgotICAgICAgICAgICAgICAgICAg
ICAgICAgbGFuZy5jb21wYXJlKCJqYXZhc2NyaXB0MS41IikgIT0gMCAmJgotICAgICAgICAgICAg
ICAgICAgICAgICAgbGFuZy5jb21wYXJlKCJlY21hc2NyaXB0IikgIT0gMCAmJgotICAgICAgICAg
ICAgICAgICAgICAgICAgbGFuZy5jb21wYXJlKCJsaXZlc2NyaXB0IikgIT0gMCAmJgotICAgICAg
ICAgICAgICAgICAgICAgICAgbGFuZy5jb21wYXJlKCJqc2NyaXB0IikgKQorICAgICAgICAgICAg
ICAgICAgICBET01TdHJpbmcgbGFuZyA9IGEtPnZhbHVlKCkuZG9tU3RyaW5nKCkubG93ZXIoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYoIGxhbmcgIT0gIiIgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxhbmcgIT0gImphdmFzY3JpcHQiICYmCisgICAgICAgICAgICAgICAgICAgICAgICBs
YW5nICE9ICJqYXZhc2NyaXB0MS4wIiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgbGFuZyAh
PSAiamF2YXNjcmlwdDEuMSIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhbmcgIT0gImph
dmFzY3JpcHQxLjIiICYmCisgICAgICAgICAgICAgICAgICAgICAgICBsYW5nICE9ICJqYXZhc2Ny
aXB0MS4zIiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgbGFuZyAhPSAiamF2YXNjcmlwdDEu
NCIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhbmcgIT0gImphdmFzY3JpcHQxLjUiICYm
CisgICAgICAgICAgICAgICAgICAgICAgICBsYW5nICE9ICJlY21hc2NyaXB0IiAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgbGFuZyAhPSAibGl2ZXNjcmlwdCIgJiYKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxhbmcgIT0gImpzY3JpcHQiKQogICAgICAgICAgICAgICAgICAgICAgICAgamF2
YXNjcmlwdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6
IGtodG1sL21pc2MvbG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9taXNjL2xvYWRlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODMKZGlm
ZiAtcCAtdSAtcjEuODMga2h0bWwvbWlzYy9sb2FkZXIuY3BwCi0tLSBraHRtbC9taXNjL2xvYWRl
ci5jcHAJMTUgRGVjIDIwMDUgMjI6MzE6NDMgLTAwMDAJMS44MworKysga2h0bWwvbWlzYy9sb2Fk
ZXIuY3BwCTIzIERlYyAyMDA1IDAzOjI5OjA0IC0wMDAwCkBAIC05MSwxNyArOTEsMTAgQEAgdm9p
ZCBDYWNoZWRPYmplY3Q6OmZpbmlzaCgpCiAgICAgZWxzZQogICAgICAgICBtX3N0YXR1cyA9IENh
Y2hlZDsKICAgICBLVVJMIHVybChtX3VybC5xc3RyaW5nKCkpOwotICAgIGlmIChtX2V4cGlyZURh
dGVDaGFuZ2VkICYmIHVybC5wcm90b2NvbCgpLnN0YXJ0c1dpdGgoImh0dHAiKSkKLSAgICB7Cisg
ICAgaWYgKG1fZXhwaXJlRGF0ZUNoYW5nZWQgJiYgdXJsLnByb3RvY29sKCkuc3RhcnRzV2l0aCgi
aHR0cCIpKSB7CiAgICAgICAgIG1fZXhwaXJlRGF0ZUNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAg
S0lPOjpodHRwX3VwZGF0ZV9jYWNoZSh1cmwsIGZhbHNlLCBtX2V4cGlyZURhdGUpOwotI2lmZGVm
IENBQ0hFX0RFQlVHCi0gICAgICAgIGtkRGVidWcoNjA2MCkgPDwgIiBTZXR0aW5nIGV4cGlyZSBk
YXRlIGZvciBpbWFnZSAiPDxtX3VybC5xc3RyaW5nKCk8PCIgdG8gIiA8PCBtX2V4cGlyZURhdGUg
PDwgZW5kbDsKLSNlbmRpZgogICAgIH0KLSNpZmRlZiBDQUNIRV9ERUJVRwotICAgIGVsc2Uga2RE
ZWJ1Zyg2MDYwKSA8PCAiIE5vIGV4cGlyZSBkYXRlIGZvciBpbWFnZSAiPDxtX3VybC5xc3RyaW5n
KCk8PGVuZGw7Ci0jZW5kaWYKIH0KIAogdm9pZCBDYWNoZWRPYmplY3Q6OnNldEV4cGlyZURhdGUo
dGltZV90IF9leHBpcmVEYXRlLCBib29sIGNoYW5nZUh0dHBDYWNoZSkKQEAgLTIzMiwxMSArMjI1
LDggQEAgdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpkYXRhKCBRQnVmZmVyIAogCiB2b2lkIENh
Y2hlZENTU1N0eWxlU2hlZXQ6OmNoZWNrTm90aWZ5KCkKIHsKLSAgICBpZihtX2xvYWRpbmcpIHJl
dHVybjsKLQotI2lmZGVmIENBQ0hFX0RFQlVHCi0gICAga2REZWJ1ZyggNjA2MCApIDw8ICJDYWNo
ZWRDU1NTdHlsZVNoZWV0OjogZmluaXNoZWRMb2FkaW5nICIgPDwgbV91cmwucXN0cmluZygpIDw8
IGVuZGw7Ci0jZW5kaWYKKyAgICBpZiAobV9sb2FkaW5nKQorICAgICAgICByZXR1cm47CiAKICAg
ICBDYWNoZWRPYmplY3RDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOwogICAgIHdoaWxlIChDYWNo
ZWRPYmplY3RDbGllbnQgKmMgPSB3Lm5leHQoKSkgewpAQCAtNjgzLDEwICs2NzMsNiBAQCB2b2lk
IENhY2hlZFhTTFN0eWxlU2hlZXQ6OmNoZWNrTm90aWZ5KCkKICAgICBpZiAobV9sb2FkaW5nKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0jaWZkZWYgQ0FDSEVfREVCVUcKLSAgICBrZERlYnVnKCA2
MDYwICkgPDwgIkNhY2hlZENTU1N0eWxlU2hlZXQ6OiBmaW5pc2hlZExvYWRpbmcgIiA8PCBtX3Vy
bC5xc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRpZgotICAgIAogICAgIENhY2hlZE9iamVjdENsaWVu
dFdhbGtlciB3KG1fY2xpZW50cyk7CiAgICAgd2hpbGUgKENhY2hlZE9iamVjdENsaWVudCAqYyA9
IHcubmV4dCgpKQogICAgICAgICBjLT5zZXRTdHlsZVNoZWV0KG1fdXJsLCBtX3NoZWV0KTsKQEAg
LTc2NCwxMSArNzUwLDggQEAgdm9pZCBDYWNoZWRYQkxEb2N1bWVudDo6ZGF0YSggUUJ1ZmZlciAm
YgogCiB2b2lkIENhY2hlZFhCTERvY3VtZW50OjpjaGVja05vdGlmeSgpCiB7Ci0gICAgaWYobV9s
b2FkaW5nKSByZXR1cm47Ci0gICAgCi0jaWZkZWYgQ0FDSEVfREVCVUcKLSAgICBrZERlYnVnKCA2
MDYwICkgPDwgIkNhY2hlZFhCTERvY3VtZW50OjogZmluaXNoZWRMb2FkaW5nICIgPDwgbV91cmwu
cXN0cmluZygpIDw8IGVuZGw7Ci0jZW5kaWYKKyAgICBpZihtX2xvYWRpbmcpCisgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBDYWNoZWRPYmplY3RDbGllbnRXYWxrZXIgdyhtX2NsaWVudHMpOwog
ICAgIHdoaWxlIChDYWNoZWRPYmplY3RDbGllbnQgKmMgPSB3Lm5leHQoKSkKQEAgLTg1OSw3ICs4
NDIsNyBAQCBib29sIERvY0xvYWRlcjo6bmVlZFJlbG9hZChjb25zdCBLVVJMICZmCiAKIENhY2hl
ZEltYWdlICpEb2NMb2FkZXI6OnJlcXVlc3RJbWFnZSggY29uc3QgRE9NOjpET01TdHJpbmcgJnVy
bCkKIHsKLSAgICBLVVJMIGZ1bGxVUkwgPSBtX2RvYy0+Y29tcGxldGVVUkwoIHVybC5xc3RyaW5n
KCkgKTsKKyAgICBLVVJMIGZ1bGxVUkwgPSBtX2RvYy0+Y29tcGxldGVVUkwodXJsLnFzdHJpbmco
KSk7CiAgICAgaWYgKCBtX3BhcnQgJiYgbV9wYXJ0LT5vbmx5TG9jYWxSZWZlcmVuY2VzKCkgJiYg
ZnVsbFVSTC5wcm90b2NvbCgpICE9ICJmaWxlIikgcmV0dXJuIDA7CiAKICAgICBpZiAoS1dRQ2hl
Y2tJZlJlbG9hZGluZyh0aGlzKSkgewpAQCAtODc1LDcgKzg1OCw3IEBAIENhY2hlZEltYWdlICpE
b2NMb2FkZXI6OnJlcXVlc3RJbWFnZSggY28KIAogQ2FjaGVkQ1NTU3R5bGVTaGVldCAqRG9jTG9h
ZGVyOjpyZXF1ZXN0U3R5bGVTaGVldCggY29uc3QgRE9NOjpET01TdHJpbmcgJnVybCwgY29uc3Qg
UVN0cmluZyYgY2hhcnNldCkKIHsKLSAgICBLVVJMIGZ1bGxVUkwgPSBtX2RvYy0+Y29tcGxldGVV
UkwoIHVybC5xc3RyaW5nKCkgKTsKKyAgICBLVVJMIGZ1bGxVUkwgPSBtX2RvYy0+Y29tcGxldGVV
UkwodXJsLnFzdHJpbmcoKSk7CiAgICAgaWYgKCBtX3BhcnQgJiYgbV9wYXJ0LT5vbmx5TG9jYWxS
ZWZlcmVuY2VzKCkgJiYgZnVsbFVSTC5wcm90b2NvbCgpICE9ICJmaWxlIikgcmV0dXJuIDA7CiAK
ICAgICBpZiAoS1dRQ2hlY2tJZlJlbG9hZGluZyh0aGlzKSkgewpAQCAtODkxLDcgKzg3NCw3IEBA
IENhY2hlZENTU1N0eWxlU2hlZXQgKkRvY0xvYWRlcjo6cmVxdWVzdFMKIAogQ2FjaGVkU2NyaXB0
ICpEb2NMb2FkZXI6OnJlcXVlc3RTY3JpcHQoIGNvbnN0IERPTTo6RE9NU3RyaW5nICZ1cmwsIGNv
bnN0IFFTdHJpbmcmIGNoYXJzZXQpCiB7Ci0gICAgS1VSTCBmdWxsVVJMID0gbV9kb2MtPmNvbXBs
ZXRlVVJMKCB1cmwucXN0cmluZygpICk7CisgICAgS1VSTCBmdWxsVVJMID0gbV9kb2MtPmNvbXBs
ZXRlVVJMKHVybC5xc3RyaW5nKCkpOwogICAgIGlmICggbV9wYXJ0ICYmIG1fcGFydC0+b25seUxv
Y2FsUmVmZXJlbmNlcygpICYmIGZ1bGxVUkwucHJvdG9jb2woKSAhPSAiZmlsZSIpIHJldHVybiAw
OwogCiAgICAgaWYgKEtXUUNoZWNrSWZSZWxvYWRpbmcodGhpcykpIHsKQEAgLTEwMjcsMTAgKzEw
MTAsNiBAQCB2b2lkIExvYWRlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoKQogICAvLyBnZXQgdGhl
IGZpcnN0IHBlbmRpbmcgcmVxdWVzdAogICBSZXF1ZXN0ICpyZXEgPSBtX3JlcXVlc3RzUGVuZGlu
Zy50YWtlKDApOwogCi0jaWZkZWYgQ0FDSEVfREVCVUcKLSAga2REZWJ1ZyggNjA2MCApIDw8ICJz
dGFydGluZyBMb2FkZXIgdXJsPSIgPDwgcmVxLT5vYmplY3QtPnVybCgpLnFzdHJpbmcoKSA8PCBl
bmRsOwotI2VuZGlmCi0KICAgS1VSTCB1KHJlcS0+b2JqZWN0LT51cmwoKS5xc3RyaW5nKCkpOwog
ICBLSU86OlRyYW5zZmVySm9iKiBqb2IgPSBLSU86OmdldCggdSwgZmFsc2UsIGZhbHNlIC8qbm8g
R1VJKi8sIHRydWUpOwogICAKQEAgLTExOTIsMTUgKzExNzEsMTAgQEAgaW50IExvYWRlcjo6bnVt
UmVxdWVzdHMoIERvY0xvYWRlciogZGwgKQogCiB2b2lkIExvYWRlcjo6Y2FuY2VsUmVxdWVzdHMo
IERvY0xvYWRlciogZGwgKQogewotICAgIC8va2REZWJ1ZyggNjA2MCApIDw8ICJ2b2lkIExvYWRl
cjo6Y2FuY2VsUmVxdWVzdHMoKSIgPDwgZW5kbDsKLSAgICAvL2tkRGVidWcoIDYwNjAgKSA8PCAi
Z290ICIgPDwgbV9yZXF1ZXN0c1BlbmRpbmcuY291bnQoKSA8PCAiIHBlbmRpbmcgcmVxdWVzdHMi
IDw8IGVuZGw7CiAgICAgUVB0ckxpc3RJdGVyYXRvcjxSZXF1ZXN0PiBwSXQoIG1fcmVxdWVzdHNQ
ZW5kaW5nICk7CiAgICAgd2hpbGUgKCBwSXQuY3VycmVudCgpICkKICAgICB7Ci0gICAgICAgIGlm
ICggcEl0LmN1cnJlbnQoKS0+bV9kb2NMb2FkZXIgPT0gZGwgKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBrZERlYnVnKCA2MDYwICkgPDwgImNhbmNlbGxpbmcgcGVuZGluZyByZXF1ZXN0IGZvciAi
IDw8IHBJdC5jdXJyZW50KCktPm9iamVjdC0+dXJsKCkucXN0cmluZygpIDw8IGVuZGw7Ci0gICAg
ICAgICAgICAvL2VtaXQgcmVxdWVzdEZhaWxlZCggZGwsIHBJdC5jdXJyZW50KCktPm9iamVjdCAp
OworICAgICAgICBpZiAocEl0LmN1cnJlbnQoKS0+bV9kb2NMb2FkZXIgPT0gZGwpIHsKICAgICAg
ICAgICAgIENhY2hlOjpyZW1vdmVDYWNoZUVudHJ5KCBwSXQuY3VycmVudCgpLT5vYmplY3QgKTsK
ICAgICAgICAgICAgIG1fcmVxdWVzdHNQZW5kaW5nLnJlbW92ZSggcEl0ICk7CiAgICAgICAgIH0K
QEAgLTEyMDgsMzEgKzExODIsMjIgQEAgdm9pZCBMb2FkZXI6OmNhbmNlbFJlcXVlc3RzKCBEb2NM
b2FkZXIqIAogICAgICAgICAgICAgKytwSXQ7CiAgICAgfQogCi0gICAgLy9rZERlYnVnKCA2MDYw
ICkgPDwgImdvdCAiIDw8IG1fcmVxdWVzdHNMb2FkaW5nLmNvdW50KCkgPDwgImxvYWRpbmcgcmVx
dWVzdHMiIDw8IGVuZGw7Ci0KICAgICBRUHRyRGljdEl0ZXJhdG9yPFJlcXVlc3Q+IGxJdCggbV9y
ZXF1ZXN0c0xvYWRpbmcgKTsKICAgICB3aGlsZSAoIGxJdC5jdXJyZW50KCkgKQogICAgIHsKLSAg
ICAgICAgaWYgKCBsSXQuY3VycmVudCgpLT5tX2RvY0xvYWRlciA9PSBkbCApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIC8va2REZWJ1ZyggNjA2MCApIDw8ICJjYW5jZWxsaW5nIGxvYWRpbmcgcmVx
dWVzdCBmb3IgIiA8PCBsSXQuY3VycmVudCgpLT5vYmplY3QtPnVybCgpLnFzdHJpbmcoKSA8PCBl
bmRsOworICAgICAgICBpZiAobEl0LmN1cnJlbnQoKS0+bV9kb2NMb2FkZXIgPT0gZGwpIHsKICAg
ICAgICAgICAgIEtJTzo6Sm9iICpqb2IgPSBzdGF0aWNfY2FzdDxLSU86OkpvYiAqPiggbEl0LmN1
cnJlbnRLZXkoKSApOwogICAgICAgICAgICAgQ2FjaGU6OnJlbW92ZUNhY2hlRW50cnkoIGxJdC5j
dXJyZW50KCktPm9iamVjdCApOwogICAgICAgICAgICAgbV9yZXF1ZXN0c0xvYWRpbmcucmVtb3Zl
KCBsSXQuY3VycmVudEtleSgpICk7CiAgICAgICAgICAgICBqb2ItPmtpbGwoKTsKLSAgICAgICAg
ICAgIC8vZW1pdCByZXF1ZXN0RmFpbGVkKCBkbCwgcEl0LmN1cnJlbnQoKS0+b2JqZWN0ICk7CiAg
ICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgKytsSXQ7CiAgICAgfQogCiAgICAg
UVB0ckxpc3RJdGVyYXRvcjxSZXF1ZXN0PiBiZEl0KCBtX3JlcXVlc3RzQmFja2dyb3VuZERlY29k
aW5nICk7Ci0gICAgd2hpbGUgKCBiZEl0LmN1cnJlbnQoKSApCi0gICAgewotICAgICAgICBpZiAo
IGJkSXQuY3VycmVudCgpLT5tX2RvY0xvYWRlciA9PSBkbCApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGtkRGVidWcoIDYwNjAgKSA8PCAiY2FuY2VsbGluZyBwZW5kaW5nIHJlcXVlc3QgZm9yICIg
PDwgYmRJdC5jdXJyZW50KCktPm9iamVjdC0+dXJsKCkucXN0cmluZygpIDw8IGVuZGw7Ci0gICAg
ICAgICAgICAvL2VtaXQgcmVxdWVzdEZhaWxlZCggZGwsIGJkSXQuY3VycmVudCgpLT5vYmplY3Qg
KTsKKyAgICB3aGlsZSAoYmRJdC5jdXJyZW50KCkpIHsKKyAgICAgICAgaWYgKGJkSXQuY3VycmVu
dCgpLT5tX2RvY0xvYWRlciA9PSBkbCkgewogICAgICAgICAgICAgQ2FjaGU6OnJlbW92ZUNhY2hl
RW50cnkoIGJkSXQuY3VycmVudCgpLT5vYmplY3QgKTsKICAgICAgICAgICAgIG1fcmVxdWVzdHNC
YWNrZ3JvdW5kRGVjb2RpbmcucmVtb3ZlKCBiZEl0ICk7CiAgICAgICAgIH0KSW5kZXg6IGtodG1s
L3JlbmRlcmluZy9yZW5kZXJfYXBwbGV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMzYKZGlmZiAtcCAtdSAtcjEuMzYga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9h
cHBsZXQuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAJMjEgTm92IDIw
MDUgMDE6MjA6MjIgLTAwMDAJMS4zNgorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQu
Y3BwCTIzIERlYyAyMDA1IDAzOjI5OjA0IC0wMDAwCkBAIC0zMSw4ICszMSw2IEBACiAjaW5jbHVk
ZSAia2h0bWx2aWV3LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgogCi0jaW5jbHVkZSA8cWxh
YmVsLmg+Ci0KICNpZm5kZWYgUV9XU19RV1MgLy8gV2UgZG9uJ3QgaGF2ZSBKYXZhIGluIFF0IEVt
YmVkZGVkCiAKICNpbmNsdWRlICJqYXZhL2tqYXZhYXBwbGV0d2lkZ2V0LmgiCkluZGV4OiBraHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4yMjAKZGlmZiAtcCAtdSAtcjEuMjIwIGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
YmxvY2suY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmNwcAkxOSBEZWMgMjAw
NSAxOTo0MTozOCAtMDAwMAkxLjIyMAorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5j
cHAJMjMgRGVjIDIwMDUgMDM6Mjk6MDcgLTAwMDAKQEAgLTMzNTksNyArMzM1OSw2IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnVwZGF0ZUZpcnN0TGV0dGVyKCkKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgLy8gYWNjb3VudCBmb3IgZmlyc3QgbGV0dGVyCiAgICAgICAgICAgICBsZW5ndGgrKzsKLSAg
ICAgICAgICAgIC8va2REZWJ1ZyggNjA0MCApIDw8ICJsZXR0ZXI9ICciIDw8IERPTVN0cmluZyhv
bGRUZXh0LT5zdWJzdHJpbmcoMCxsZW5ndGgpKS5xc3RyaW5nKCkgPDwgIiciIDw8IGVuZGw7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIC8vIGNvbnN0cnVjdCB0ZXh0IGZyYWdtZW50IGZvciB0
aGUgdGV4dCBhZnRlciB0aGUgZmlyc3QgbGV0dGVyCiAgICAgICAgICAgICAvLyBOT1RFOiB0aGlz
IG1pZ2h0IGVtcHR5CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9i
b3guY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE3OQpkaWZmIC1wIC11IC1yMS4xNzkga2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9ib3guY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Jv
eC5jcHAJMjEgRGVjIDIwMDUgMjI6NTE6MTEgLTAwMDAJMS4xNzkKKysrIGtodG1sL3JlbmRlcmlu
Zy9yZW5kZXJfYm94LmNwcAkyMyBEZWMgMjAwNSAwMzoyOTowOSAtMDAwMApAQCAtMTMzLDcgKzEz
Myw2IEBAIHZvaWQgUmVuZGVyQm94OjpzZXRTdHlsZShSZW5kZXJTdHlsZSAqX3MKIAogUmVuZGVy
Qm94Ojp+UmVuZGVyQm94KCkKIHsKLSAgICAvL2tkRGVidWcoIDYwNDAgKSA8PCAiRWxlbWVudCBk
ZXN0cnVjdG9yOiB0aGlzPSIgPDwgbm9kZU5hbWUoKS5xc3RyaW5nKCkgPDwgZW5kbDsKIH0KIAog
dm9pZCBSZW5kZXJCb3g6OmRlc3Ryb3koKQpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9m
b3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5k
ZXJpbmcvcmVuZGVyX2Zvcm0uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzNQpkaWZmIC1w
IC11IC1yMS4xMzUga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAotLS0ga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkxNSBEZWMgMjAwNSAyMjozMTo0NSAtMDAwMAkxLjEzNQor
Kysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkyMyBEZWMgMjAwNSAwMzoyOToxMCAt
MDAwMApAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgUmVuZGVyRm9ybUVsZW1lbnQ6OmFkZEludHJp
bnNpY01hcmcKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyRm9ybUVsZW1lbnQ6OnNsb3RUZXh0Q2hh
bmdlZChjb25zdCBRU3RyaW5nICYpCit2b2lkIFJlbmRlckZvcm1FbGVtZW50OjpzbG90VGV4dENo
YW5nZWQoY29uc3QgRE9NOjpET01TdHJpbmcmKQogewogICAgIC8vIGRvIG5vdGhpbmcKIH0KQEAg
LTI5Miw4ICsyOTIsOCBAQCB2b2lkIFJlbmRlckxpbmVFZGl0Ojp1cGRhdGVGcm9tRWxlbWVudCgp
CiAgICAgICAgIHctPnNldE1heExlbmd0aCggbWwgKTsKIAogICAgIGlmICghZS0+dmFsdWVNYXRj
aGVzUmVuZGVyZXIoKSkgewotICAgICAgICBRU3RyaW5nIHdpZGdldFRleHQgPSB3LT50ZXh0KCk7
Ci0gICAgICAgIFFTdHJpbmcgbmV3VGV4dCA9IGUtPnZhbHVlKCkucXN0cmluZygpOworICAgICAg
ICBET01TdHJpbmcgd2lkZ2V0VGV4dCA9IHctPnRleHQoKTsKKyAgICAgICAgRE9NU3RyaW5nIG5l
d1RleHQgPSBlLT52YWx1ZSgpOwogICAgICAgICBuZXdUZXh0LnJlcGxhY2UoUUNoYXIoJ1xcJyks
IGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CiAgICAgICAgIGlmICh3aWRnZXRUZXh0ICE9
IG5ld1RleHQpIHsKICAgICAgICAgICAgIHctPmJsb2NrU2lnbmFscyh0cnVlKTsKQEAgLTMxNyw3
ICszMTcsNyBAQCB2b2lkIFJlbmRlckxpbmVFZGl0Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAg
dy0+c2V0UGxhY2Vob2xkZXJTdHJpbmcoZS0+Z2V0QXR0cmlidXRlKHBsYWNlaG9sZGVyQXR0ciku
cXN0cmluZygpKTsKICAgICBpZiAody0+dHlwZSgpID09IFFMaW5lRWRpdDo6U2VhcmNoKSB7CiAg
ICAgICAgIHctPnNldExpdmVTZWFyY2goIWUtPmdldEF0dHJpYnV0ZShpbmNyZW1lbnRhbEF0dHIp
LmlzTnVsbCgpKTsKLSAgICAgICAgdy0+c2V0QXV0b1NhdmVOYW1lKGUtPmdldEF0dHJpYnV0ZShh
dXRvc2F2ZUF0dHIpLnFzdHJpbmcoKSk7CisgICAgICAgIHctPnNldEF1dG9TYXZlTmFtZShlLT5n
ZXRBdHRyaWJ1dGUoYXV0b3NhdmVBdHRyKSk7CiAgICAgICAgIHctPnNldE1heFJlc3VsdHMoZS0+
bWF4UmVzdWx0cygpKTsKICAgICB9CiAKQEAgLTEwNTcsOCArMTA1Nyw4IEBAIHZvaWQgUmVuZGVy
VGV4dEFyZWE6OnVwZGF0ZUZyb21FbGVtZW50KCkKIAogICAgIGUtPnVwZGF0ZVZhbHVlKCk7CiAg
ICAgaWYgKCFlLT52YWx1ZU1hdGNoZXNSZW5kZXJlcigpKSB7Ci0gICAgICAgIFFTdHJpbmcgd2lk
Z2V0VGV4dCA9IHRleHQoKTsKLSAgICAgICAgUVN0cmluZyB0ZXh0ID0gZS0+dmFsdWUoKS5xc3Ry
aW5nKCk7CisgICAgICAgIERPTVN0cmluZyB3aWRnZXRUZXh0ID0gdGV4dCgpOworICAgICAgICBE
T01TdHJpbmcgdGV4dCA9IGUtPnZhbHVlKCk7CiAgICAgICAgIHRleHQucmVwbGFjZShRQ2hhcign
XFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKICAgICAgICAgaWYgKHdpZGdldFRl
eHQgIT0gdGV4dCkgewogICAgICAgICAgICAgdy0+YmxvY2tTaWduYWxzKHRydWUpOwpAQCAtMTA3
NSwxOSArMTA3NSwxNyBAQCB2b2lkIFJlbmRlclRleHRBcmVhOjp1cGRhdGVGcm9tRWxlbWVudCgp
CiAgICAgUmVuZGVyRm9ybUVsZW1lbnQ6OnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKLVFTdHJp
bmcgUmVuZGVyVGV4dEFyZWE6OnRleHQoKQorRE9NU3RyaW5nIFJlbmRlclRleHRBcmVhOjp0ZXh0
KCkKIHsKLSAgICBRU3RyaW5nIHR4dDsKKyAgICBET01TdHJpbmcgdHh0OwogICAgIFFUZXh0RWRp
dCogdyA9IHN0YXRpY19jYXN0PFFUZXh0RWRpdCo+KG1fd2lkZ2V0KTsKIAotICAgIGlmIChlbGVt
ZW50KCktPndyYXAoKSA9PSBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6dGFfUGh5c2ljYWwpIHsK
KyAgICBpZiAoZWxlbWVudCgpLT53cmFwKCkgPT0gSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnRh
X1BoeXNpY2FsKQogICAgICAgICB0eHQgPSB3LT50ZXh0V2l0aEhhcmRMaW5lQnJlYWtzKCk7Ci0g
ICAgfQogICAgIGVsc2UKICAgICAgICAgdHh0ID0gdy0+dGV4dCgpOwogCi0gICAgdHh0LnJlcGxh
Y2UoYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpLCBRQ2hhcignXFwnKSk7Ci0gICAgcmV0dXJu
IHR4dDsKKyAgICByZXR1cm4gdHh0LnJlcGxhY2UoYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgp
LCBRQ2hhcignXFwnKSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dEFyZWE6OnNsb3RUZXh0Q2hhbmdl
ZCgpCkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS41OQpkaWZmIC1wIC11IC1yMS41OSBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX2Zvcm0uaAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmgJMTUgRGVjIDIw
MDUgMjI6MzE6NDYgLTAwMDAJMS41OQorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmgJ
MjMgRGVjIDIwMDUgMDM6Mjk6MTAgLTAwMDAKQEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWMgc2xv
dHM6CiAgICAgdmlydHVhbCB2b2lkIHNsb3RTZWxlY3Rpb25DaGFuZ2VkKCk7CiAgICAgCiAgICAg
Ly8gSGFjayB0byBtYWtlIEtXUVNsb3QgY29kZSB3b3JrLgotICAgIHZpcnR1YWwgdm9pZCBzbG90
VGV4dENoYW5nZWQoY29uc3QgUVN0cmluZyAmc3RyaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2xv
dFRleHRDaGFuZ2VkKGNvbnN0IERPTTo6RE9NU3RyaW5nICZzdHJpbmcpOwogCiBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCBib29sIGlzRWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpA
QCAtMzM4LDcgKzMzOCw3IEBAIHB1YmxpYzoKICAgICBET006OkhUTUxUZXh0QXJlYUVsZW1lbnRJ
bXBsKiBlbGVtZW50KCkgY29uc3QKICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxET006OkhUTUxU
ZXh0QXJlYUVsZW1lbnRJbXBsKj4oUmVuZGVyT2JqZWN0OjplbGVtZW50KCkpOyB9CiAKLSAgICBR
U3RyaW5nIHRleHQoKTsKKyAgICBET006OkRPTVN0cmluZyB0ZXh0KCk7CiAKICAgICBpbnQgc2Vs
ZWN0aW9uU3RhcnQoKTsKICAgICBpbnQgc2VsZWN0aW9uRW5kKCk7CkluZGV4OiBraHRtbC9yZW5k
ZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjg5CmRpZmYgLXAgLXUgLXIxLjg5IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVz
LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCTE4IERlYyAyMDA1IDIz
OjQwOjEyIC0wMDAwCTEuODkKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAky
MyBEZWMgMjAwNSAwMzoyOToxMSAtMDAwMApAQCAtODQzLDEwICs4NDMsOSBAQCB2b2lkIFJlbmRl
clBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAgICB3aGlsZSAoY2hpbGQgJiYgKHVybC5p
c0VtcHR5KCkgfHwgc2VydmljZVR5cGUuaXNFbXB0eSgpIHx8ICFlbWJlZCkpIHsKICAgICAgICAg
ICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUocGFyYW1UYWcpKSB7CiAgICAgICAgICAgICAgIEhUTUxQ
YXJhbUVsZW1lbnRJbXBsICpwID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudEltcGwgKj4o
IGNoaWxkICk7Ci0gICAgICAgICAgICAgIFFTdHJpbmcgbmFtZSA9IHAtPm5hbWUoKS5xc3RyaW5n
KCkubG93ZXIoKTsKLSAgICAgICAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkgJiYgKG5hbWUgPT0g
InNyYyIgfHwgbmFtZSA9PSAibW92aWUiIHx8IG5hbWUgPT0gImNvZGUiIHx8IG5hbWUgPT0gInVy
bCIpKSB7CisgICAgICAgICAgICAgIERPTVN0cmluZyBuYW1lID0gcC0+bmFtZSgpLmxvd2VyKCk7
CisgICAgICAgICAgICAgIGlmICh1cmwuaXNFbXB0eSgpICYmIChuYW1lID09ICJzcmMiIHx8IG5h
bWUgPT0gIm1vdmllIiB8fCBuYW1lID09ICJjb2RlIiB8fCBuYW1lID09ICJ1cmwiKSkKICAgICAg
ICAgICAgICAgICAgIHVybCA9IHAtPnZhbHVlKCkucXN0cmluZygpOwotICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlVHlwZS5pc0VtcHR5KCkgJiYgbmFtZSA9PSAidHlw
ZSIpIHsKICAgICAgICAgICAgICAgICAgIHNlcnZpY2VUeXBlID0gcC0+dmFsdWUoKS5xc3RyaW5n
KCk7CiAgICAgICAgICAgICAgICAgICBpbnQgcG9zID0gc2VydmljZVR5cGUuZmluZCggIjsiICk7
CkBAIC04ODksNyArODg4LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQo
KQogICAgICAgCiAgICAgICAvLyBJZiB3ZSBzdGlsbCBkb24ndCBoYXZlIGEgdHlwZSwgdHJ5IHRv
IG1hcCBmcm9tIGEgc3BlY2lmaWMgQ0xBU1NJRCB0byBhIHR5cGUuCiAgICAgICBpZiAoc2Vydmlj
ZVR5cGUuaXNFbXB0eSgpICYmICFvLT5jbGFzc0lkLmlzRW1wdHkoKSkKLSAgICAgICAgICBtYXBD
bGFzc0lkVG9TZXJ2aWNlVHlwZShvLT5jbGFzc0lkLCBzZXJ2aWNlVHlwZSk7CisgICAgICAgICAg
bWFwQ2xhc3NJZFRvU2VydmljZVR5cGUoby0+Y2xhc3NJZC5xc3RyaW5nKCksIHNlcnZpY2VUeXBl
KTsKICAgICAgIAogICAgICAgLy8gSWYgbm8gVVJMIGFuZCB0eXBlLCBhYm9ydC4KICAgICAgIGlm
ICh1cmwuaXNFbXB0eSgpICYmIHNlcnZpY2VUeXBlLmlzRW1wdHkoKSkKSW5kZXg6IGtodG1sL3Jl
bmRlcmluZy9yZW5kZXJfbGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS42MApkaWZmIC1wIC11IC1yMS42MCBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3Bw
Ci0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwCTE4IERlYyAyMDA1IDIzOjQwOjEy
IC0wMDAwCTEuNjAKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAJMjMgRGVjIDIw
MDUgMDM6Mjk6MTIgLTAwMDAKQEAgLTEwNzksNyArMTA3OSw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6
OnBhaW50KFJlbmRlck9iamVjdDo6UGEKICAgICAgICAgc2V0U2hhZG93ID0gdHJ1ZTsKICAgICB9
CiAgICAgCi0gICAgY29uc3QgRE9NU3RyaW5nJiBzdHIgPSBtX3N0ci5xc3RyaW5nKCk7CisgICAg
Y29uc3QgRE9NU3RyaW5nJiBzdHIgPSBtX3N0cjsKICAgICBmb250LT5kcmF3VGV4dChwLCBtX3gg
KyBfdHgsIAogICAgICAgICAgICAgICAgICAgICAgIG1feSArIF90eSArIG1fYmFzZWxpbmUsCiAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
bGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9saXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43NApkaWZmIC1w
IC11IC1yMS43NCBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCi0tLSBraHRtbC9yZW5k
ZXJpbmcvcmVuZGVyX2xpc3QuY3BwCTIxIERlYyAyMDA1IDIyOjUxOjExIC0wMDAwCTEuNzQKKysr
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJMjMgRGVjIDIwMDUgMDM6Mjk6MTMgLTAw
MDAKQEAgLTI4MSw5ICsyODEsNiBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjpwYWludChQYWludElu
Zm8mIGksCiAgICAgaWYgKCFtX2hlaWdodCkKICAgICAgICAgcmV0dXJuOwogCi0jaWZkZWYgREVC
VUdfTEFZT1VUCi0gICAga2REZWJ1ZyggNjA0MCApIDw8IG5vZGVOYW1lKCkucXN0cmluZygpIDw8
ICIoTEkpOjpwYWludCgpIiA8PCBlbmRsOwotI2VuZGlmCiAgICAgUmVuZGVyQmxvY2s6OnBhaW50
KGksIF90eCwgX3R5KTsKIH0KIApAQCAtMzc0LDEwICszNzEsNiBAQCB2b2lkIFJlbmRlckxpc3RN
YXJrZXI6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3VuZE9y
Qm9yZGVyKCkpIAogICAgICAgICBwYWludEJveERlY29yYXRpb25zKGksIF90eCwgX3R5KTsKIAot
I2lmZGVmIERFQlVHX0xBWU9VVAotICAgIGtkRGVidWcoIDYwNDAgKSA8PCBub2RlTmFtZSgpLnFz
dHJpbmcoKSA8PCAiKExpc3RNYXJrZXIpOjpwYWludE9iamVjdCgiIDw8IF90eCA8PCAiLCAiIDw8
IF90eSA8PCAiKSIgPDwgZW5kbDsKLSNlbmRpZgotCiAgICAgUVBhaW50ZXIqIHAgPSBpLnA7CiAg
ICAgcC0+c2V0Rm9udChzdHlsZSgpLT5mb250KCkpOwogICAgIGNvbnN0IFFGb250TWV0cmljcyBm
bSA9IHAtPmZvbnRNZXRyaWNzKCk7CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmlu
Zy9yZW5kZXJfdGV4dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEzCmRpZmYgLXAgLXUg
LXIxLjIxMyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RleHQuY3BwCi0tLSBraHRtbC9yZW5kZXJp
bmcvcmVuZGVyX3RleHQuY3BwCTE5IERlYyAyMDA1IDE5OjUyOjUwIC0wMDAwCTEuMjEzCisrKyBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RleHQuY3BwCTIzIERlYyAyMDA1IDAzOjI5OjE2IC0wMDAw
CkBAIC03ODAsMTMgKzc4MCw3IEBAIFJlbmRlclRleHQ6OlJlbmRlclRleHQoRE9NOjpOb2RlSW1w
bCogbm8KICAgICBLSFRNTEFzc2VydCghc3RyIHx8ICFzdHItPmwgfHwgc3RyLT5zKTsKIAogICAg
IG1fZmlyc3RUZXh0Qm94ID0gbV9sYXN0VGV4dEJveCA9IDA7Ci0gICAgCiAgICAgbV9zZWxlY3Rp
b25TdGF0ZSA9IFNlbGVjdGlvbk5vbmU7Ci0KLSNpZmRlZiBERUJVR19MQVlPVVQKLSAgICBRQ29u
c3RTdHJpbmcgY3N0cihzdHItPnMsIHN0ci0+bCk7Ci0gICAga2REZWJ1ZyggNjA0MCApIDw8ICJS
ZW5kZXJUZXh0IGN0ciggIjw8IGNzdHIucXN0cmluZygpLmxlbmd0aCgpIDw8ICIgKSAgJyIgPDwg
Y3N0ci5xc3RyaW5nKCkgPDwgIiciIDw8IGVuZGw7Ci0jZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJU
ZXh0OjpzZXRTdHlsZShSZW5kZXJTdHlsZSAqX3N0eWxlKQpAQCAtMTY1NSw3ICsxNjQ5LDcgQEAg
dm9pZCBSZW5kZXJUZXh0Ojpwb3NpdGlvbihJbmxpbmVCb3gqIGJveAogI2lmZGVmIERFQlVHX0xB
WU9VVAogICAgIFFDaGFyICpjaCA9IHN0ci0+cytmcm9tOwogICAgIFFDb25zdFN0cmluZyBjc3Ry
KGNoLCBsZW4pOwotICAgIHFEZWJ1Zygic2V0dGluZyBydW4gdGV4dCB0byAqJXMqLCBsZW49JWQs
IHcpPSVkIiAsIGNzdHIucXN0cmluZygpLmxhdGluMSgpLCBsZW4sIHdpZHRoICk7Ly8iIDw8IHkg
PDwgIikiIDw8ICIgaGVpZ2h0PSIgPDwgbGluZUhlaWdodChmYWxzZSkgPDwgIiBmb250SGVpZ2h0
PSIgPDwgbWV0cmljcyhmYWxzZSkuaGVpZ2h0KCkgPDwgIiBhc2NlbnQgPSIgPDwgbWV0cmljcyhm
YWxzZSkuYXNjZW50KCkgPDwgZW5kbDsKKyAgICBxRGVidWcoInNldHRpbmcgcnVuIHRleHQgdG8g
KiVzKiwgbGVuPSVkLCB3KT0lZCIgLCBjc3RyLnFzdHJpbmcoKS5sYXRpbjEoKSwgbGVuLCB3aWR0
aCApOwogI2VuZGlmCiAKICAgICBzLT5tX3JldmVyc2VkID0gcmV2ZXJzZTsKSW5kZXg6IGtodG1s
L3htbC9kb21fZG9jaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yODkK
ZGlmZiAtcCAtdSAtcjEuMjg5IGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAKLS0tIGtodG1sL3ht
bC9kb21fZG9jaW1wbC5jcHAJMjEgRGVjIDIwMDUgMTY6NTE6MDIgLTAwMDAJMS4yODkKKysrIGto
dG1sL3htbC9kb21fZG9jaW1wbC5jcHAJMjMgRGVjIDIwMDUgMDM6Mjk6MTkgLTAwMDAKQEAgLTIw
OCw3ICsyMDgsNyBAQCBET01JbXBsZW1lbnRhdGlvbkltcGw6On5ET01JbXBsZW1lbnRhdGlvCiAK
IGJvb2wgRE9NSW1wbGVtZW50YXRpb25JbXBsOjpoYXNGZWF0dXJlIChjb25zdCBET01TdHJpbmcg
JmZlYXR1cmUsIGNvbnN0IERPTVN0cmluZyAmdmVyc2lvbikgY29uc3QKIHsKLSAgICBRU3RyaW5n
IGxvd2VyID0gZmVhdHVyZS5xc3RyaW5nKCkubG93ZXIoKTsKKyAgICBET01TdHJpbmcgbG93ZXIg
PSBmZWF0dXJlLmxvd2VyKCk7CiAgICAgaWYgKGxvd2VyID09ICJjb3JlIiB8fCBsb3dlciA9PSAi
aHRtbCIgfHwgbG93ZXIgPT0gInhtbCIgfHwgbG93ZXIgPT0gInhodG1sIikKICAgICAgICAgcmV0
dXJuIHZlcnNpb24uaXNFbXB0eSgpIHx8IHZlcnNpb24gPT0gIjEuMCIgfHwgdmVyc2lvbiA9PSAi
Mi4wIjsKICAgICBpZiAobG93ZXIgPT0gImNzcyIKQEAgLTg3NywxMCArODc3LDkgQEAgdm9pZCBE
b2N1bWVudEltcGw6OnJlbW92ZUVsZW1lbnRCeUlkKGNvbgogCiBFbGVtZW50SW1wbCAqRG9jdW1l
bnRJbXBsOjpnZXRFbGVtZW50QnlBY2Nlc3NLZXkoIGNvbnN0IERPTVN0cmluZyAma2V5ICkKIHsK
LSAgICBpZiAoa2V5Lmxlbmd0aCgpID09IDApCisgICAgaWYgKCFrZXkubGVuZ3RoKCkpCiAJcmV0
dXJuIDA7CiAKLSAgICBRU3RyaW5nIGsoa2V5LnFzdHJpbmcoKSk7CiAgICAgaWYgKCFtX2FjY2Vz
c0tleURpY3RWYWxpZCkgewogICAgICAgICBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuY2xlYXIoKTsK
ICAgICAKQEAgLTg5OCw3ICs4OTcsNyBAQCBFbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpnZXRF
bGVtZW50QnlBCiAgICAgICAgIH0KICAgICAgICAgbV9hY2Nlc3NLZXlEaWN0VmFsaWQgPSB0cnVl
OwogICAgIH0KLSAgICByZXR1cm4gbV9lbGVtZW50c0J5QWNjZXNzS2V5LmZpbmQoayk7CisgICAg
cmV0dXJuIG1fZWxlbWVudHNCeUFjY2Vzc0tleS5maW5kKGtleS5xc3RyaW5nKCkpOwogfQogCiB2
b2lkIERvY3VtZW50SW1wbDo6dXBkYXRlVGl0bGUoKQpAQCAtMjE1MCw3ICsyMTQ5LDcgQEAgdm9p
ZCBEb2N1bWVudEltcGw6OnJlY2FsY1N0eWxlU2VsZWN0b3IoKQogICAgICAgICAgICAgaWYgKCFz
LT5pc0xvYWRpbmcoKSkgewogICAgICAgICAgICAgICAgIHNoZWV0ID0gcy0+c2hlZXQoKTsKICAg
ICAgICAgICAgICAgICBpZihzaGVldCkKLSAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBET006
OkRPTVN0cmluZyhzLT5nZXRBdHRyaWJ1dGUoS1NWRzo6U1ZHTmFtZXM6OnRpdGxlQXR0cikpLnFz
dHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBzLT5nZXRBdHRyaWJ1dGUoS1NW
Rzo6U1ZHTmFtZXM6OnRpdGxlQXR0cikucXN0cmluZygpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSAmJiBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXQu
aXNFbXB0eSgpKQpAQCAtMjQzMyw3ICsyNDMyLDcgQEAgdm9pZCBEb2N1bWVudEltcGw6OmRlZmF1
bHRFdmVudEhhbmRsZXIoRQogICAgICAgICBLZXlib2FyZEV2ZW50SW1wbCAqa2V2dCA9IHN0YXRp
Y19jYXN0PEtleWJvYXJkRXZlbnRJbXBsICo+KGV2dCk7CiAgICAgICAgIGlmIChrZXZ0LT5jdHJs
S2V5KCkpIHsKICAgICAgICAgICAgIFFLZXlFdmVudCAqcWV2dCA9IGtldnQtPnFLZXlFdmVudCgp
OwotICAgICAgICAgICAgUVN0cmluZyBrZXkgPSAocWV2dCA/IHFldnQtPnVubW9kaWZpZWRUZXh0
KCkgOiBrZXZ0LT5rZXlJZGVudGlmaWVyKCkucXN0cmluZygpKS5sb3dlcigpOworICAgICAgICAg
ICAgRE9NU3RyaW5nIGtleSA9IChxZXZ0ID8gcWV2dC0+dW5tb2RpZmllZFRleHQoKSA6IGtldnQt
PmtleUlkZW50aWZpZXIoKSkubG93ZXIoKTsKICAgICAgICAgICAgIEVsZW1lbnRJbXBsICplbGVt
ID0gZ2V0RWxlbWVudEJ5QWNjZXNzS2V5KGtleSk7CiAgICAgICAgICAgICBpZiAoZWxlbSkgewog
ICAgICAgICAgICAgICAgIGVsZW0tPmFjY2Vzc0tleUFjdGlvbihmYWxzZSk7CkluZGV4OiBraHRt
bC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xMDQKZGlmZiAtcCAtdSAtcjEuMTA0IGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuY3Bw
Ci0tLSBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAkyMSBEZWMgMjAwNSAxNjo1MTowMyAt
MDAwMAkxLjEwNAorKysga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJMjMgRGVjIDIwMDUg
MDM6Mjk6MjAgLTAwMDAKQEAgLTU2MiwxMiArNTYyLDkgQEAgdm9pZCBFbGVtZW50SW1wbDo6cmVj
YWxjU3R5bGUoIFN0eWxlQ2hhbgogICAgICAgICB9CiAgICAgfQogCi0gICAgTm9kZUltcGwgKm47
Ci0gICAgZm9yIChuID0gX2ZpcnN0OyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewotCS8vcURl
YnVnKCIgICAgKCVwKSBjYWxsaW5nIHJlY2FsY1N0eWxlIG9uIGNoaWxkICVzLyVwLCBjaGFuZ2U9
JWQiLCB0aGlzLCBuLCBuLT5pc0VsZW1lbnROb2RlKCkgPyAoKEVsZW1lbnRJbXBsICopbiktPnRh
Z05hbWUoKS5xc3RyaW5nKCkubGF0aW4xKCkgOiBuLT5pc1RleHROb2RlKCkgPyAidGV4dCIgOiAi
dW5rbm93biIsIGNoYW5nZSApOwotICAgICAgICBpZiAoIGNoYW5nZSA+PSBJbmhlcml0IHx8IG4t
PmlzVGV4dE5vZGUoKSB8fAotICAgICAgICAgICAgIG4tPmhhc0NoYW5nZWRDaGlsZCgpIHx8IG4t
PmNoYW5nZWQoKSApCi0gICAgICAgICAgICBuLT5yZWNhbGNTdHlsZSggY2hhbmdlICk7CisgICAg
Zm9yIChOb2RlSW1wbCAqbiA9IF9maXJzdDsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKKyAg
ICAgICAgaWYgKGNoYW5nZSA+PSBJbmhlcml0IHx8IG4tPmlzVGV4dE5vZGUoKSB8fCBuLT5oYXND
aGFuZ2VkQ2hpbGQoKSB8fCBuLT5jaGFuZ2VkKCkpCisgICAgICAgICAgICBuLT5yZWNhbGNTdHls
ZShjaGFuZ2UpOwogICAgIH0KIAogICAgIHNldENoYW5nZWQoIGZhbHNlICk7CkluZGV4OiBraHRt
bC94bWwvZG9tX25vZGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
MjUKZGlmZiAtcCAtdSAtcjEuMjI1IGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCi0tLSBraHRt
bC94bWwvZG9tX25vZGVpbXBsLmNwcAkxOSBEZWMgMjAwNSAyMDo0MTo0NyAtMDAwMAkxLjIyNQor
Kysga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAJMjMgRGVjIDIwMDUgMDM6Mjk6MjIgLTAwMDAK
QEAgLTEyMTUsOCArMTIxNSw3IEBAIHZvaWQgTm9kZUltcGw6OmR1bXAoUVRleHRTdHJlYW0gKnN0
cmVhbSwKICAgICAqc3RyZWFtIDw8IGVuZGw7CiAKICAgICBOb2RlSW1wbCAqY2hpbGQgPSBmaXJz
dENoaWxkKCk7Ci0gICAgd2hpbGUoIGNoaWxkICE9IDAgKQotICAgIHsKKyAgICB3aGlsZShjaGls
ZCkgewogCSpzdHJlYW0gPDwgaW5kIDw8IGNoaWxkLT5ub2RlTmFtZSgpLnFzdHJpbmcoKS5hc2Np
aSgpIDw8ICI6ICI7CiAgICAgICAgIGNoaWxkLT5kdW1wKHN0cmVhbSxpbmQrIiAgIik7CiAgICAg
ICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CkBAIC0xOTU4LDEzICsxOTU3LDEzIEBA
IEVsZW1lbnRJbXBsICpOb2RlSW1wbDo6Z2V0QW5jZXN0b3JFbGVtZW4KIAogI2lmbmRlZiBOREVC
VUcKIAotc3RhdGljIHZvaWQgYXBwZW5kQXR0cmlidXRlRGVzYyhjb25zdCBOb2RlSW1wbCAqbm9k
ZSwgUVN0cmluZyAmc3RyaW5nLCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBRU3RyaW5nIGF0
dHJEZXNjKQorc3RhdGljIHZvaWQgYXBwZW5kQXR0cmlidXRlRGVzYyhjb25zdCBOb2RlSW1wbCAq
bm9kZSwgRE9NU3RyaW5nICZzdHJpbmcsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIFFTdHJp
bmcgYXR0ckRlc2MpCiB7CiAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAg
ICBET01TdHJpbmcgYXR0ciA9IHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5vZGUp
LT5nZXRBdHRyaWJ1dGUobmFtZSk7CiAgICAgICAgIGlmICghYXR0ci5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgIHN0cmluZyArPSBhdHRyRGVzYzsKLSAgICAgICAgICAgIHN0cmluZyArPSBhdHRy
LnFzdHJpbmcoKTsKKyAgICAgICAgICAgIHN0cmluZyArPSBhdHRyOwogICAgICAgICB9CiAgICAg
fQogfQpAQCAtMTk3NywxMiArMTk3NiwxMiBAQCB2b2lkIE5vZGVJbXBsOjpzaG93Tm9kZShjb25z
dCBjaGFyICpwcmVmCiAgICAgICAgIFFTdHJpbmcgdmFsdWUgPSBub2RlVmFsdWUoKS5xc3RyaW5n
KCk7CiAgICAgICAgIHZhbHVlLnJlcGxhY2UoJ1xcJywgIlxcXFwiKTsKICAgICAgICAgdmFsdWUu
cmVwbGFjZSgnXG4nLCAiXFxuIik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMlc1x0JXAg
XCIlc1wiXG4iLCBwcmVmaXgsIG5vZGVOYW1lKCkucXN0cmluZygpLmxvY2FsOEJpdCgpLmRhdGEo
KSwgdGhpcywgdmFsdWUubG9jYWw4Qml0KCkuZGF0YSgpKTsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICIlcyVzXHQlcCBcIiVzXCJcbiIsIHByZWZpeCwgbm9kZU5hbWUoKS5xc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgdGhpcywgdmFsdWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgUVN0cmluZyBhdHRycyA9ICIiOworICAgICAgICBET01TdHJpbmcgYXR0cnMgPSAiIjsK
ICAgICAgICAgYXBwZW5kQXR0cmlidXRlRGVzYyh0aGlzLCBhdHRycywgY2xhc3NBdHRyLCAiIENM
QVNTPSIpOwogICAgICAgICBhcHBlbmRBdHRyaWJ1dGVEZXNjKHRoaXMsIGF0dHJzLCBzdHlsZUF0
dHIsICIgU1RZTEU9Iik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMlc1x0JXAlc1xuIiwg
cHJlZml4LCBub2RlTmFtZSgpLnFzdHJpbmcoKS5sb2NhbDhCaXQoKS5kYXRhKCksIHRoaXMsIGF0
dHJzLmFzY2lpKCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcdCVwJXNcbiIsIHBy
ZWZpeCwgbm9kZU5hbWUoKS5xc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGhpcywgYXR0cnMucXN0
cmluZygpLmFzY2lpKCkpOwogICAgIH0KIH0KIApJbmRleDoga2h0bWwveG1sL2RvbV9zdHJpbmdp
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwv
ZG9tX3N0cmluZ2ltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMzCmRpZmYgLXAgLXUg
LXIxLjMzIGtodG1sL3htbC9kb21fc3RyaW5naW1wbC5jcHAKLS0tIGtodG1sL3htbC9kb21fc3Ry
aW5naW1wbC5jcHAJMjEgTm92IDIwMDUgMDQ6MDE6NTggLTAwMDAJMS4zMworKysga2h0bWwveG1s
L2RvbV9zdHJpbmdpbXBsLmNwcAkyMyBEZWMgMjAwNSAwMzoyOToyMyAtMDAwMApAQCAtMzY1LDcg
KzM2NSw4IEBAIGJvb2wgRE9NU3RyaW5nSW1wbDo6aXNMb3dlcigpIGNvbnN0CiBET01TdHJpbmdJ
bXBsICpET01TdHJpbmdJbXBsOjpsb3dlcigpIGNvbnN0CiB7CiAgICAgRE9NU3RyaW5nSW1wbCAq
YyA9IG5ldyBET01TdHJpbmdJbXBsOwotICAgIGlmKCFsKSByZXR1cm4gYzsKKyAgICBpZiAoIWwp
CisgICAgICAgIHJldHVybiBjOwogCiAgICAgYy0+cyA9IFFUX0FMTE9DX1FDSEFSX1ZFQyhsKTsK
ICAgICBjLT5sID0gbDsKSW5kZXg6IGtodG1sL3htbC94bWxfdG9rZW5pemVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwveG1sX3Rva2VuaXplci5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTkKZGlmZiAtcCAtdSAtcjEuNTkga2h0bWwveG1s
L3htbF90b2tlbml6ZXIuY3BwCi0tLSBraHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAJMTYgRGVj
IDIwMDUgMDc6Mjg6MDIgLTAwMDAJMS41OQorKysga2h0bWwveG1sL3htbF90b2tlbml6ZXIuY3Bw
CTIzIERlYyAyMDA1IDAzOjI5OjI0IC0wMDAwCkBAIC03NzEsMTEgKzc3MSwxMCBAQCB2b2lkIFhN
TFRva2VuaXplcjo6ZXhlY3V0ZVNjcmlwdHMoKQogICAgICAgICBpZiAoc2NyaXB0RWxlbWVudC0+
aGFzVGFnTmFtZShLU1ZHOjpTVkdOYW1lczo6c2NyaXB0VGFnKSkKICAgICAgICAgICAgIHNjcmlw
dEhyZWYgPSBzY3JpcHRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIp
OwogI2VuZGlmCi0gICAgICAgIFFTdHJpbmcgY2hhcnNldCA9IHNjcmlwdEVsZW1lbnQtPmdldEF0
dHJpYnV0ZShjaGFyc2V0QXR0cikucXN0cmluZygpOwotCiAgICAgICAgIC8vIGRvbid0IGxvYWQg
ZXh0ZXJuYWwgc2NyaXB0cyBmb3Igc3RhbmRhbG9uZSBkb2N1bWVudHMgKGZvciBub3cpCiAgICAg
ICAgIGlmICghc2NyaXB0SHJlZi5pc0VtcHR5KCkgJiYgbV9kb2MtPnBhcnQoKSkgewogICAgICAg
ICAgICAgLy8gd2UgaGF2ZSBhIHNyYyBhdHRyaWJ1dGUKKyAgICAgICAgICAgIFFTdHJpbmcgY2hh
cnNldCA9IHNjcmlwdEVsZW1lbnQtPmdldEF0dHJpYnV0ZShjaGFyc2V0QXR0cikucXN0cmluZygp
OwogICAgICAgICAgICAgbV9jYWNoZWRTY3JpcHQgPSBtX2RvYy0+ZG9jTG9hZGVyKCktPnJlcXVl
c3RTY3JpcHQoc2NyaXB0SHJlZiwgY2hhcnNldCk7CiAgICAgICAgICAgICBtX2NhY2hlZFNjcmlw
dC0+cmVmKHRoaXMpOyAvLyB3aWxsIGNhbGwgZXhlY3V0ZVNjcmlwdHMoKSBhZ2FpbiBpZiBhbHJl
YWR5IGNhY2hlZAogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDoga2h0bWwveHNsL3hzbF9zdHls
ZXNoZWV0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwveHNsL3hzbF9zdHlsZXNoZWV0aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpk
aWZmIC1wIC11IC1yMS43IGtodG1sL3hzbC94c2xfc3R5bGVzaGVldGltcGwuY3BwCi0tLSBraHRt
bC94c2wveHNsX3N0eWxlc2hlZXRpbXBsLmNwcAkxNiBEZWMgMjAwNSAyMTo0Mzo0OCAtMDAwMAkx
LjcKKysrIGtodG1sL3hzbC94c2xfc3R5bGVzaGVldGltcGwuY3BwCTIzIERlYyAyMDA1IDAzOjI5
OjI0IC0wMDAwCkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBYU0xTdHlsZVNoZWV0SW1wbDo6bG9h
ZENoaWxkU2hlZXRzKAogICAgIGlmIChtX2VtYmVkZGVkKSB7CiAgICAgICAgIC8vIFdlIGhhdmUg
dG8gbG9jYXRlIChieSBJRCkgdGhlIGFwcHJvcHJpYXRlIGVtYmVkZGVkIHN0eWxlc2hlZXQgZWxl
bWVudCwgc28gdGhhdCB3ZSBjYW4gd2FsayB0aGUgCiAgICAgICAgIC8vIGltcG9ydC9pbmNsdWRl
IGxpc3QuCi0gICAgICAgIHhtbEF0dHJQdHIgaWROb2RlID0geG1sR2V0SUQobV9zdHlsZXNoZWV0
RG9jLCAoY29uc3QgeG1sQ2hhciopKGNvbnN0IGNoYXIqKShocmVmKCkucXN0cmluZygpLnV0Zjgo
KSkpOworICAgICAgICB4bWxBdHRyUHRyIGlkTm9kZSA9IHhtbEdldElEKG1fc3R5bGVzaGVldERv
YywgKGNvbnN0IHhtbENoYXIqKShocmVmKCkucXN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKICAg
ICAgICAgaWYgKGlkTm9kZSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBz
dHlsZXNoZWV0Um9vdCA9IGlkTm9kZS0+cGFyZW50OwpJbmRleDoga3dxL0tXUUtIVE1MUGFydC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMzgKZGlmZiAtcCAtdSAtcjEuMjM4IGt3cS9LV1FL
SFRNTFBhcnQuaAotLS0ga3dxL0tXUUtIVE1MUGFydC5oCTE5IERlYyAyMDA1IDE5OjUyOjU3IC0w
MDAwCTEuMjM4CisrKyBrd3EvS1dRS0hUTUxQYXJ0LmgJMjMgRGVjIDIwMDUgMDM6Mjk6MjUgLTAw
MDAKQEAgLTE5NCw5ICsxOTQsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0RG9jdW1l
bnRGb2N1cyhRV2lkZ2V0ICopOwogICAgIHN0YXRpYyB2b2lkIGNsZWFyRG9jdW1lbnRGb2N1cyhR
V2lkZ2V0ICopOwogICAgIAotICAgIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KGNvbnN0IFFTdHJp
bmcgJm1lc3NhZ2UpOwotICAgIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oY29uc3QgUVN0cmlu
ZyAmbWVzc2FnZSk7Ci0gICAgYm9vbCBydW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0IFFTdHJpbmcg
Jm1lc3NhZ2UsIGNvbnN0IFFTdHJpbmcgJmRlZmF1bHRWYWx1ZSwgUVN0cmluZyAmcmVzdWx0KTsK
KyAgICB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChjb25zdCBET006OkRPTVN0cmluZyYgbWVzc2Fn
ZSk7CisgICAgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBET006OkRPTVN0cmluZyYg
bWVzc2FnZSk7CisgICAgYm9vbCBydW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBET006OkRPTVN0cmluZyYgZGVmYXVsdFZhbHVlLCBET006OkRP
TVN0cmluZyYgcmVzdWx0KTsKICAgICBib29sIGxvY2F0aW9uYmFyVmlzaWJsZSgpOwogICAgIGJv
b2wgbWVudWJhclZpc2libGUoKTsKICAgICBib29sIHBlcnNvbmFsYmFyVmlzaWJsZSgpOwpAQCAt
MjA2LDcgKzIwNiw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2hvdWxkQ2xvc2UoKTsKIAotICAg
IHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBRU3RyaW5nICZtZXNzYWdlLCAgdW5zaWdu
ZWQgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFFTdHJpbmcgJnNvdXJjZUlEKTsKKyAgICB2b2lkIGFk
ZE1lc3NhZ2VUb0NvbnNvbGUoY29uc3QgRE9NOjpET01TdHJpbmcmIG1lc3NhZ2UsICB1bnNpZ25l
ZCBpbnQgbGluZU51bWJlciwgY29uc3QgRE9NOjpET01TdHJpbmcmIHNvdXJjZUlEKTsKICAgICBr
aHRtbDo6UmVuZGVyT2JqZWN0ICpyZW5kZXJlcigpIGNvbnN0OwogICAgIHZvaWQgZm9yY2VMYXlv
dXQoKTsKICAgICB2b2lkIGZvcmNlTGF5b3V0V2l0aFBhZ2VXaWR0aFJhbmdlKGZsb2F0IG1pblBh
Z2VXaWR0aCwgZmxvYXQgbWF4UGFnZVdpZHRoKTsKSW5kZXg6IGt3cS9LV1FLSFRNTFBhcnQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5t
bSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MTAKZGlmZiAtcCAtdSAtcjEuNzEwIGt3cS9LV1FL
SFRNTFBhcnQubW0KLS0tIGt3cS9LV1FLSFRNTFBhcnQubW0JMjEgRGVjIDIwMDUgMTY6NTE6MDQg
LTAwMDAJMS43MTAKKysrIGt3cS9LV1FLSFRNTFBhcnQubW0JMjMgRGVjIDIwMDUgMDM6Mjk6Mjkg
LTAwMDAKQEAgLTE2MTYsNyArMTYxNiw3IEBAIEtXUUtIVE1MUGFydCAqS1dRS0hUTUxQYXJ0Ojpw
YXJ0Rm9yTm9kZSgKICAgICByZXR1cm4gS1dRKG5vZGUtPmdldERvY3VtZW50KCktPnBhcnQoKSk7
CiB9CiAKLU5TVmlldyAqS1dRS0hUTUxQYXJ0Ojpkb2N1bWVudFZpZXdGb3JOb2RlKERPTTo6Tm9k
ZUltcGwgKm5vZGUpCitOU1ZpZXcgKktXUUtIVE1MUGFydDo6ZG9jdW1lbnRWaWV3Rm9yTm9kZShO
b2RlSW1wbCAqbm9kZSkKIHsKICAgICBXZWJDb3JlQnJpZGdlICpicmlkZ2UgPSBwYXJ0Rm9yTm9k
ZShub2RlKS0+YnJpZGdlKCk7CiAgICAgcmV0dXJuIFticmlkZ2UgZG9jdW1lbnRWaWV3XTsKQEAg
LTE3NzEsNDMgKzE3NzEsNDMgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OnNlbmRTY3JvbGxFdmVudCgp
CiAgICAgfQogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6cnVuSmF2YVNjcmlwdEFsZXJ0KGNvbnN0
IFFTdHJpbmcgJm1lc3NhZ2UpCit2b2lkIEtXUUtIVE1MUGFydDo6cnVuSmF2YVNjcmlwdEFsZXJ0
KGNvbnN0IERPTVN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBRU3RyaW5nIHRleHQgPSBtZXNzYWdl
OworICAgIERPTVN0cmluZyB0ZXh0ID0gbWVzc2FnZTsKICAgICB0ZXh0LnJlcGxhY2UoUUNoYXIo
J1xcJyksIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7CiAgICAgS1dRX0JMT0NLX0VYQ0VQ
VElPTlM7Ci0gICAgW19icmlkZ2UgcnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTp0
ZXh0LmdldE5TU3RyaW5nKCldOworICAgIFtfYnJpZGdlIHJ1bkphdmFTY3JpcHRBbGVydFBhbmVs
V2l0aE1lc3NhZ2U6dGV4dF07CiAgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKIH0KIAotYm9v
bCBLV1FLSFRNTFBhcnQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKGNvbnN0IFFTdHJpbmcgJm1lc3Nh
Z2UpCitib29sIEtXUUtIVE1MUGFydDo6cnVuSmF2YVNjcmlwdENvbmZpcm0oY29uc3QgRE9NU3Ry
aW5nJiBtZXNzYWdlKQogewotICAgIFFTdHJpbmcgdGV4dCA9IG1lc3NhZ2U7CisgICAgRE9NU3Ry
aW5nIHRleHQgPSBtZXNzYWdlOwogICAgIHRleHQucmVwbGFjZShRQ2hhcignXFwnKSwgYmFja3Ns
YXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKIAogICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwotICAg
IHJldHVybiBbX2JyaWRnZSBydW5KYXZhU2NyaXB0Q29uZmlybVBhbmVsV2l0aE1lc3NhZ2U6dGV4
dC5nZXROU1N0cmluZygpXTsKKyAgICByZXR1cm4gW19icmlkZ2UgcnVuSmF2YVNjcmlwdENvbmZp
cm1QYW5lbFdpdGhNZXNzYWdlOnRleHRdOwogICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7CiAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgS1dRS0hUTUxQYXJ0OjpydW5KYXZhU2NyaXB0
UHJvbXB0KGNvbnN0IFFTdHJpbmcgJnByb21wdCwgY29uc3QgUVN0cmluZyAmZGVmYXVsdFZhbHVl
LCBRU3RyaW5nICZyZXN1bHQpCitib29sIEtXUUtIVE1MUGFydDo6cnVuSmF2YVNjcmlwdFByb21w
dChjb25zdCBET01TdHJpbmcmIHByb21wdCwgY29uc3QgRE9NU3RyaW5nJiBkZWZhdWx0VmFsdWUs
IERPTVN0cmluZyYgcmVzdWx0KQogewotICAgIFFTdHJpbmcgcHJvbXB0VGV4dCA9IHByb21wdDsK
KyAgICBET01TdHJpbmcgcHJvbXB0VGV4dCA9IHByb21wdDsKICAgICBwcm9tcHRUZXh0LnJlcGxh
Y2UoUUNoYXIoJ1xcJyksIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7Ci0gICAgUVN0cmlu
ZyBkZWZhdWx0VmFsdWVUZXh0ID0gZGVmYXVsdFZhbHVlOworICAgIERPTVN0cmluZyBkZWZhdWx0
VmFsdWVUZXh0ID0gZGVmYXVsdFZhbHVlOwogICAgIGRlZmF1bHRWYWx1ZVRleHQucmVwbGFjZShR
Q2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKIAogICAgIGJvb2wgb2s7
CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CiAgICAgTlNTdHJpbmcgKnJldHVybmVkVGV4dCA9
IG5pbDsKIAotICAgIG9rID0gW19icmlkZ2UgcnVuSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsV2l0
aFByb21wdDpwcm9tcHQuZ2V0TlNTdHJpbmcoKQotCSAgICAgICBkZWZhdWx0VGV4dDpkZWZhdWx0
VmFsdWUuZ2V0TlNTdHJpbmcoKSByZXR1cm5pbmdUZXh0OiZyZXR1cm5lZFRleHRdOworICAgIG9r
ID0gW19icmlkZ2UgcnVuSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsV2l0aFByb21wdDpwcm9tcHQK
KwkgICAgICAgZGVmYXVsdFRleHQ6ZGVmYXVsdFZhbHVlIHJldHVybmluZ1RleHQ6JnJldHVybmVk
VGV4dF07CiAKICAgICBpZiAob2spIHsKLSAgICAgICAgcmVzdWx0ID0gUVN0cmluZzo6ZnJvbU5T
U3RyaW5nKHJldHVybmVkVGV4dCk7CisgICAgICAgIHJlc3VsdCA9IERPTVN0cmluZyhyZXR1cm5l
ZFRleHQpOwogICAgICAgICByZXN1bHQucmVwbGFjZShiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9s
KCksIFFDaGFyKCdcXCcpKTsKICAgICB9CiAKQEAgLTE4NTQsMTIgKzE4NTQsMTIgQEAgYm9vbCBL
V1FLSFRNTFBhcnQ6OnRvb2xiYXJWaXNpYmxlKCkKICAgICByZXR1cm4gW19icmlkZ2UgYXJlVG9v
bGJhcnNWaXNpYmxlXTsKIH0KIAotdm9pZCBLV1FLSFRNTFBhcnQ6OmFkZE1lc3NhZ2VUb0NvbnNv
bGUoY29uc3QgUVN0cmluZyAmbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgUVN0
cmluZyAmc291cmNlVVJMKQordm9pZCBLV1FLSFRNTFBhcnQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUo
Y29uc3QgRE9NU3RyaW5nICZtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBET01T
dHJpbmcgJnNvdXJjZVVSTCkKIHsKICAgICBOU0RpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBbTlNE
aWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6Ci0gICAgICAgIG1lc3NhZ2Uu
Z2V0TlNTdHJpbmcoKSwgQCJtZXNzYWdlIiwKKyAgICAgICAgKE5TU3RyaW5nICopbWVzc2FnZSwg
QCJtZXNzYWdlIiwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6IGxpbmVOdW1iZXJd
LCBAImxpbmVOdW1iZXIiLAotICAgICAgICBzb3VyY2VVUkwuZ2V0TlNTdHJpbmcoKSwgQCJzb3Vy
Y2VVUkwiLAorICAgICAgICAoTlNTdHJpbmcgKilzb3VyY2VVUkwsIEAic291cmNlVVJMIiwKICAg
ICAgICAgTlVMTF07CiAgICAgW19icmlkZ2UgYWRkTWVzc2FnZVRvQ29uc29sZTpkaWN0aW9uYXJ5
XTsKIH0KQEAgLTI1OTcsNyArMjU5Nyw3IEBAIGJvb2wgS1dRS0hUTUxQYXJ0OjpwYXNzU3ViZnJh
bWVFdmVudFRvU3UKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgS1dRS0hUTUxQYXJ0Ojpw
YXNzV2hlZWxFdmVudFRvQ2hpbGRXaWRnZXQoRE9NOjpOb2RlSW1wbCAqbm9kZSkKK2Jvb2wgS1dR
S0hUTUxQYXJ0OjpwYXNzV2hlZWxFdmVudFRvQ2hpbGRXaWRnZXQoTm9kZUltcGwgKm5vZGUpCiB7
CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CiAgICAgICAgIApAQCAtMjgwNyw3ICsyODA3LDcg
QEAgdm9pZCBLV1FLSFRNTFBhcnQ6Om1vdXNlTW92ZWQoTlNFdmVudCAqZQogfQogCiAvLyBDYWxs
ZWQgYXMgd2Ugd2FsayB1cCB0aGUgZWxlbWVudCBjaGFpbiBmb3Igbm9kZXMgd2l0aCBDU1MgcHJv
cGVydHkgLWtodG1sLXVzZXItZHJhZyA9PSBhdXRvCi1ib29sIEtXUUtIVE1MUGFydDo6c2hvdWxk
RHJhZ0F1dG9Ob2RlKERPTTo6Tm9kZUltcGwqIG5vZGUsIGludCB4LCBpbnQgeSkgY29uc3QKK2Jv
b2wgS1dRS0hUTUxQYXJ0OjpzaG91bGREcmFnQXV0b05vZGUoTm9kZUltcGwqIG5vZGUsIGludCB4
LCBpbnQgeSkgY29uc3QKIHsKICAgICAvLyBXZSBhc3N1bWUgdGhhdCBXZWJLaXQgb25seSBjYXJl
cyBhYm91dCBkcmFnZ2luZyB0aGluZ3MgdGhhdCBjYW4gYmUgbGVhZiBub2RlcyAodGV4dCwgaW1h
Z2VzLCB1cmxzKS4KICAgICAvLyBUaGlzIHNhdmVzIGEgYnVuY2ggb2YgZXhwZW5zaXZlIGNhbGxz
IChjcmVhdGluZyBXQyBhbmQgV0sgZWxlbWVudCBkaWN0cykgYXMgd2Ugd2FsayBmYXJ0aGVyIHVw
CkBAIC0zNDQ0LDcgKzM0NDQsNyBAQCBOU0ltYWdlICpLV1FLSFRNTFBhcnQ6OnNlbGVjdGlvbklt
YWdlKCkgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTlNJbWFnZSAqS1dRS0hUTUxQYXJ0Ojpz
bmFwc2hvdERyYWdJbWFnZShET006Ok5vZGVJbXBsICpub2RlLCBOU1JlY3QgKmltYWdlUmVjdCwg
TlNSZWN0ICplbGVtZW50UmVjdCkgY29uc3QKK05TSW1hZ2UgKktXUUtIVE1MUGFydDo6c25hcHNo
b3REcmFnSW1hZ2UoTm9kZUltcGwgKm5vZGUsIE5TUmVjdCAqaW1hZ2VSZWN0LCBOU1JlY3QgKmVs
ZW1lbnRSZWN0KSBjb25zdAogewogICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBub2RlLT5y
ZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpIHsKQEAgLTQxNjEsNyArNDE2MSw3IEBAIGJv
b2wgS1dRS0hUTUxQYXJ0OjpzaG91bGRFbmRFZGl0aW5nKGNvbnMKICAgICByZXR1cm4gW19icmlk
Z2Ugc2hvdWxkRW5kRWRpdGluZzpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6Y29uc3RfY2FzdDxS
YW5nZUltcGwgKj4ocmFuZ2UpXV07CiB9CiAKLXN0YXRpYyBRVmFsdWVMaXN0PEtXUUtIVE1MUGFy
dDo6TWFya2VkVGV4dFVuZGVybGluZT4gY29udmVydEF0dHJpYnV0ZXNUb1VuZGVybGluZXMoY29u
c3QgRE9NOjpSYW5nZUltcGwgKm1hcmtlZFRleHRSYW5nZSwgTlNBcnJheSAqYXR0cmlidXRlcywg
TlNBcnJheSAqcmFuZ2VzKQorc3RhdGljIFFWYWx1ZUxpc3Q8S1dRS0hUTUxQYXJ0OjpNYXJrZWRU
ZXh0VW5kZXJsaW5lPiBjb252ZXJ0QXR0cmlidXRlc1RvVW5kZXJsaW5lcyhjb25zdCBSYW5nZUlt
cGwgKm1hcmtlZFRleHRSYW5nZSwgTlNBcnJheSAqYXR0cmlidXRlcywgTlNBcnJheSAqcmFuZ2Vz
KQogewogICAgIFFWYWx1ZUxpc3Q8S1dRS0hUTUxQYXJ0OjpNYXJrZWRUZXh0VW5kZXJsaW5lPiBy
ZXN1bHQ7CiAKQEAgLTQxOTUsNyArNDE5NSw3IEBAIHN0YXRpYyBRVmFsdWVMaXN0PEtXUUtIVE1M
UGFydDo6TWFya2VkVGUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEtXUUtIVE1MUGFy
dDo6c2V0TWFya2VkVGV4dFJhbmdlKGNvbnN0IERPTTo6UmFuZ2VJbXBsICpyYW5nZSwgTlNBcnJh
eSAqYXR0cmlidXRlcywgTlNBcnJheSAqcmFuZ2VzKQordm9pZCBLV1FLSFRNTFBhcnQ6OnNldE1h
cmtlZFRleHRSYW5nZShjb25zdCBSYW5nZUltcGwgKnJhbmdlLCBOU0FycmF5ICphdHRyaWJ1dGVz
LCBOU0FycmF5ICpyYW5nZXMpCiB7CiAgICAgaW50IGV4Y2VwdGlvbiA9IDA7CiAKQEAgLTQzMTUs
NyArNDMxNSw3IEBAIGJvb2wgS1dRS0hUTUxQYXJ0Ojppc0tIVE1MUGFydCgpIGNvbnN0CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLURPTTo6Tm9kZUltcGwgKktXUUtIVE1MUGFydDo6bW91c2VQcmVz
c05vZGUoKQorTm9kZUltcGwgKktXUUtIVE1MUGFydDo6bW91c2VQcmVzc05vZGUoKQogewogICAg
IHJldHVybiBkLT5tX21vdXNlUHJlc3NOb2RlLmdldCgpOwogfQpJbmRleDoga3dxL0tXUUxhYmVs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZToga3dxL0tXUUxhYmVsLmgKZGlmZiAtTiBrd3EvS1dRTGFi
ZWwuaAotLS0ga3dxL0tXUUxhYmVsLmgJMjIgSmFuIDIwMDMgMDA6MTI6MzUgLTAwMDAJMS4xMgor
Kysga3dxL0tXUUxhYmVsLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSw0MSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFFMQUJFTF9IXwotI2RlZmluZSBRTEFC
RUxfSF8KLQotI2luY2x1ZGUgIktXUUZyYW1lLmgiCi0jaW5jbHVkZSAiS1dRV2lkZ2V0LmgiCi0j
aW5jbHVkZSAiS1dRU3RyaW5nLmgiCi0KLWNsYXNzIFFMYWJlbCA6IHB1YmxpYyBRRnJhbWUgewot
cHVibGljOgotICAgIFFMYWJlbChjb25zdCBRU3RyaW5nICYsIFFXaWRnZXQgKik7Ci0KLSAgICB2
b2lkIHNldFRleHQoY29uc3QgUVN0cmluZyAmKTsKLSAgICB2b2lkIHNldEFsaWdubWVudChpbnQp
OwotfTsKLQotI2VuZGlmCkluZGV4OiBrd3EvS1dRTGFiZWwubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZToga3dxL0tXUUxhYmVsLm1tCmRpZmYgLU4ga3dxL0tXUUxhYmVsLm1tCi0tLSBrd3EvS1dRTGFi
ZWwubW0JMyBPY3QgMjAwNSAyMToxMzowNiAtMDAwMAkxLjEwCisrKyBrd3EvS1dRTGFiZWwubW0J
MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW1wb3J0ICJLV1FMYWJlbC5oIgotCi1RTGFi
ZWw6OlFMYWJlbChjb25zdCBRU3RyaW5nICYsIFFXaWRnZXQgKikKLXsKLX0KLQotdm9pZCBRTGFi
ZWw6OnNldFRleHQoY29uc3QgUVN0cmluZyAmKQotewotfQotCi12b2lkIFFMYWJlbDo6c2V0QWxp
Z25tZW50KGludCkKLXsKLX0KSW5kZXg6IGt3cS9LV1FMaW5lRWRpdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FMaW5lRWRpdC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjM1CmRpZmYgLXAgLXUgLXIxLjM1IGt3cS9LV1FMaW5lRWRpdC5oCi0tLSBrd3Ev
S1dRTGluZUVkaXQuaAkyMSBPY3QgMjAwNSAyMToyNzo1MSAtMDAwMAkxLjM1CisrKyBrd3EvS1dR
TGluZUVkaXQuaAkyMyBEZWMgMjAwNSAwMzoyOToyOSAtMDAwMApAQCAtNjIsOCArNjIsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRSZWFkT25seShib29sKTsKICAgICBib29sIGlzUmVhZE9ubHko
KSBjb25zdDsKIAotICAgIHZvaWQgc2V0VGV4dChjb25zdCBRU3RyaW5nICYpOwotICAgIFFTdHJp
bmcgdGV4dCgpIGNvbnN0OworICAgIHZvaWQgc2V0VGV4dChjb25zdCBET006OkRPTVN0cmluZyYp
OworICAgIERPTTo6RE9NU3RyaW5nIHRleHQoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0V3JpdGlu
Z0RpcmVjdGlvbihRUGFpbnRlcjo6VGV4dERpcmVjdGlvbik7CiAgICAgCkBAIC05MCw5ICs5MCw5
IEBAIHB1YmxpYzoKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAg
ICAKICAgICB2b2lkIHNldExpdmVTZWFyY2goYm9vbCBsaXZlU2VhcmNoKTsKLSAgICB2b2lkIHNl
dEF1dG9TYXZlTmFtZShjb25zdCBRU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIHNldEF1dG9TYXZl
TmFtZShjb25zdCBET006OkRPTVN0cmluZyYgbmFtZSk7CiAgICAgdm9pZCBzZXRNYXhSZXN1bHRz
KGludCBtYXhSZXN1bHRzKTsKLSAgICB2b2lkIHNldFBsYWNlaG9sZGVyU3RyaW5nKGNvbnN0IFFT
dHJpbmcmIHBsYWNlaG9sZGVyKTsKKyAgICB2b2lkIHNldFBsYWNlaG9sZGVyU3RyaW5nKGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBwbGFjZWhvbGRlcik7CiAgICAgdm9pZCBhZGRTZWFyY2hSZXN1bHQo
KTsKIAogcHJpdmF0ZToKSW5kZXg6IGt3cS9LV1FMaW5lRWRpdC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRTGluZUVkaXQubW0sdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNzYKZGlmZiAtcCAtdSAtcjEuNzYga3dxL0tXUUxpbmVFZGl0Lm1tCi0tLSBrd3Ev
S1dRTGluZUVkaXQubW0JMjEgRGVjIDIwMDUgMDA6MDA6MjEgLTAwMDAJMS43NgorKysga3dxL0tX
UUxpbmVFZGl0Lm1tCTIzIERlYyAyMDA1IDAzOjI5OjI5IC0wMDAwCkBAIC0zNiw2ICszNiw4IEBA
CiAjaW1wb3J0ICJXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeS5oIgogI2ltcG9ydCAiV2ViQ29y
ZVZpZXdGYWN0b3J5LmgiCiAKK3VzaW5nIERPTTo6RE9NU3RyaW5nOworCiBAaW50ZXJmYWNlIE5T
U2VhcmNoRmllbGQgKFNlYXJjaEZpZWxkU2VjcmV0cykKIC0gKHZvaWQpX2FkZFN0cmluZ1RvUmVj
ZW50U2VhcmNoZXM6KE5TU3RyaW5nICopc3RyaW5nOwogQGVuZApAQCAtMTQzLDIwICsxNDUsMjAg
QEAgdm9pZCBRTGluZUVkaXQ6OnNldFBhbGV0dGUoY29uc3QgUVBhbGV0dAogICAgIEtXUV9VTkJM
T0NLX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgUUxpbmVFZGl0OjpzZXRUZXh0KGNvbnN0IFFTdHJp
bmcgJnMpCit2b2lkIFFMaW5lRWRpdDo6c2V0VGV4dChjb25zdCBET01TdHJpbmcmIHMpCiB7CiAg
ICAgTlNUZXh0RmllbGQgKnRleHRGaWVsZCA9IChOU1RleHRGaWVsZCAqKWdldFZpZXcoKTsKICAg
ICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKLSAgICBbdGV4dEZpZWxkIHNldFN0cmluZ1ZhbHVlOnMu
Z2V0TlNTdHJpbmcoKV07CisgICAgW3RleHRGaWVsZCBzZXRTdHJpbmdWYWx1ZTpzXTsKICAgICBL
V1FfVU5CTE9DS19FWENFUFRJT05TOwogfQogCi1RU3RyaW5nIFFMaW5lRWRpdDo6dGV4dCgpIGNv
bnN0CitET01TdHJpbmcgUUxpbmVFZGl0Ojp0ZXh0KCkgY29uc3QKIHsKICAgICBLV1FfQkxPQ0tf
RVhDRVBUSU9OUzsKLSAgICByZXR1cm4gUVN0cmluZzo6ZnJvbU5TU3RyaW5nKFttX2NvbnRyb2xs
ZXIgc3RyaW5nXSk7CisgICAgcmV0dXJuIERPTVN0cmluZyhbbV9jb250cm9sbGVyIHN0cmluZ10p
OwogICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFFTdHJpbmcoKTsKKyAg
ICByZXR1cm4gRE9NU3RyaW5nKCk7CiB9CiAKIHZvaWQgUUxpbmVFZGl0OjpzZXRNYXhMZW5ndGgo
aW50IGxlbikKQEAgLTM1OSwxNyArMzYxLDE3IEBAIHZvaWQgUUxpbmVFZGl0OjpzZXRMaXZlU2Vh
cmNoKGJvb2wgbGl2ZVMKICAgICBbW3NlYXJjaEZpZWxkIGNlbGxdIHNldFNlbmRzV2hvbGVTZWFy
Y2hTdHJpbmc6IWxpdmVTZWFyY2hdOwogfQogCi12b2lkIFFMaW5lRWRpdDo6c2V0QXV0b1NhdmVO
YW1lKGNvbnN0IFFTdHJpbmcmIG5hbWUpCit2b2lkIFFMaW5lRWRpdDo6c2V0QXV0b1NhdmVOYW1l
KGNvbnN0IERPTVN0cmluZyYgbmFtZSkKIHsKICAgICBpZiAobV90eXBlICE9IFNlYXJjaCkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIFFTdHJpbmcgYXV0b3NhdmU7CisgICAgRE9NU3RyaW5n
IGF1dG9zYXZlOwogICAgIGlmICghbmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIGF1dG9zYXZlID0g
ImNvbS5hcHBsZS5XZWJLaXQuc2VhcmNoRmllbGQ6IiArIG5hbWU7CiAgICAgCiAgICAgTlNTZWFy
Y2hGaWVsZCAqc2VhcmNoRmllbGQgPSAoTlNTZWFyY2hGaWVsZCAqKWdldFZpZXcoKTsKLSAgICBb
c2VhcmNoRmllbGQgc2V0UmVjZW50c0F1dG9zYXZlTmFtZTphdXRvc2F2ZS5nZXROU1N0cmluZygp
XTsKKyAgICBbc2VhcmNoRmllbGQgc2V0UmVjZW50c0F1dG9zYXZlTmFtZTphdXRvc2F2ZV07CiB9
CiAKIHZvaWQgUUxpbmVFZGl0OjpzZXRNYXhSZXN1bHRzKGludCBtYXhSZXN1bHRzKQpAQCAtMzk3
LDEwICszOTksMTAgQEAgdm9pZCBRTGluZUVkaXQ6OnNldE1heFJlc3VsdHMoaW50IG1heFJlcwog
ICAgIFtzZWFyY2hDZWxsIHNldE1heGltdW1SZWNlbnRzOm1heFJlc3VsdHNdOwogfQogCi12b2lk
IFFMaW5lRWRpdDo6c2V0UGxhY2Vob2xkZXJTdHJpbmcoY29uc3QgUVN0cmluZyYgcGxhY2Vob2xk
ZXIpCit2b2lkIFFMaW5lRWRpdDo6c2V0UGxhY2Vob2xkZXJTdHJpbmcoY29uc3QgRE9NOjpET01T
dHJpbmcmIHBsYWNlaG9sZGVyKQogewogICAgIE5TVGV4dEZpZWxkICp0ZXh0RmllbGQgPSAoTlNU
ZXh0RmllbGQgKilnZXRWaWV3KCk7Ci0gICAgW1t0ZXh0RmllbGQgY2VsbF0gc2V0UGxhY2Vob2xk
ZXJTdHJpbmc6cGxhY2Vob2xkZXIuZ2V0TlNTdHJpbmcoKV07CisgICAgW1t0ZXh0RmllbGQgY2Vs
bF0gc2V0UGxhY2Vob2xkZXJTdHJpbmc6cGxhY2Vob2xkZXJdOwogfQogCiB2b2lkIFFMaW5lRWRp
dDo6YWRkU2VhcmNoUmVzdWx0KCkKSW5kZXg6IGt3cS9LV1FQYWludGVyLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FQYWludGVyLm1tLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjE0OQpkaWZmIC1wIC11IC1yMS4xNDkga3dxL0tXUVBhaW50ZXIubW0KLS0t
IGt3cS9LV1FQYWludGVyLm1tCTggRGVjIDIwMDUgMDg6NDA6MjcgLTAwMDAJMS4xNDkKKysrIGt3
cS9LV1FQYWludGVyLm1tCTIzIERlYyAyMDA1IDAzOjI5OjMwIC0wMDAwCkBAIC01MDIsNyArNTAy
LDcgQEAgdm9pZCBRUGFpbnRlcjo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uIChDRwogICAgIFtbV2Vi
Q29yZUltYWdlUmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHNldENHQ29tcG9zaXRlT3Bl
cmF0aW9uOm9wIGluQ29udGV4dDpjb250ZXh0XTsKIH0KIAotaW50IFFQYWludGVyOjpjb21wb3Np
dGVPcGVyYXRvckZyb21TdHJpbmcgKGNvbnN0IFFTdHJpbmcgJmFTdHJpbmcpCitpbnQgUVBhaW50
ZXI6OmNvbXBvc2l0ZU9wZXJhdG9yRnJvbVN0cmluZyhjb25zdCBRU3RyaW5nICZhU3RyaW5nKQog
ewogICAgIE5TQ29tcG9zaXRpbmdPcGVyYXRpb24gb3AgPSBOU0NvbXBvc2l0ZVNvdXJjZU92ZXI7
CiAgICAgCkluZGV4OiBrd3EvS1dRU2lnbmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva3dxL0tXUVNpZ25hbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2CmRp
ZmYgLXAgLXUgLXIxLjE2IGt3cS9LV1FTaWduYWwuaAotLS0ga3dxL0tXUVNpZ25hbC5oCTE0IEp1
bCAyMDA1IDAyOjMyOjMzIC0wMDAwCTEuMTYKKysrIGt3cS9LV1FTaWduYWwuaAkyMyBEZWMgMjAw
NSAwMzoyOTozMCAtMDAwMApAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxs
KCkgY29uc3Q7IC8vIHNob3VsZCBiZSAiZW1pdCI7IGNhbid0IGJlIGR1ZSB0byBkZWZpbmUgaW4g
cW9iamVjdC5oCiAgICAgdm9pZCBjYWxsKGJvb2wpIGNvbnN0OwogICAgIHZvaWQgY2FsbChpbnQp
IGNvbnN0OwotICAgIHZvaWQgY2FsbChjb25zdCBRU3RyaW5nICYpIGNvbnN0OworICAgIHZvaWQg
Y2FsbChjb25zdCBET006OkRPTVN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgY2FsbChLSU86Okpv
YiAqKSBjb25zdDsKICAgICB2b2lkIGNhbGwoa2h0bWw6OkRvY0xvYWRlciAqLCBraHRtbDo6Q2Fj
aGVkT2JqZWN0ICopIGNvbnN0OwogICAgIHZvaWQgY2FsbChLSU86OkpvYiAqLCBjb25zdCBjaGFy
ICpkYXRhLCBpbnQgc2l6ZSkgY29uc3Q7CkluZGV4OiBrd3EvS1dRU2lnbmFsLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FTaWduYWwubW0sdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMjEKZGlmZiAtcCAtdSAtcjEuMjEga3dxL0tXUVNpZ25hbC5tbQotLS0g
a3dxL0tXUVNpZ25hbC5tbQkzIE9jdCAyMDA1IDIxOjEzOjA4IC0wMDAwCTEuMjEKKysrIGt3cS9L
V1FTaWduYWwubW0JMjMgRGVjIDIwMDUgMDM6Mjk6MzAgLTAwMDAKQEAgLTExNCw3ICsxMTQsNyBA
QCB2b2lkIEtXUVNpZ25hbDo6Y2FsbChpbnQgaSkgY29uc3QKICAgICB9CiB9CiAKLXZvaWQgS1dR
U2lnbmFsOjpjYWxsKGNvbnN0IFFTdHJpbmcgJnMpIGNvbnN0Cit2b2lkIEtXUVNpZ25hbDo6Y2Fs
bChjb25zdCBET006OkRPTVN0cmluZyAmcykgY29uc3QKIHsKICAgICBpZiAoIV9vYmplY3QtPl9z
aWduYWxzQmxvY2tlZCkgewogICAgICAgICBLV1FPYmplY3RTZW5kZXJTY29wZSBzZW5kZXJTY29w
ZShfb2JqZWN0KTsKSW5kZXg6IGt3cS9LV1FTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva3dxL0tXUVNsb3QuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNApk
aWZmIC1wIC11IC1yMS4xNCBrd3EvS1dRU2xvdC5oCi0tLSBrd3EvS1dRU2xvdC5oCTE0IEp1bCAy
MDA1IDAyOjMyOjMzIC0wMDAwCTEuMTQKKysrIGt3cS9LV1FTbG90LmgJMjMgRGVjIDIwMDUgMDM6
Mjk6MzAgLTAwMDAKQEAgLTQ4LDYgKzQ4LDEwIEBAIG5hbWVzcGFjZSBraHRtbCB7CiAgICAgY2xh
c3MgRG9jTG9hZGVyOwogfQogCituYW1lc3BhY2UgRE9NIHsKKyAgICBjbGFzcyBET01TdHJpbmc7
Cit9CisKIC8vIExpa2Ugc3RyY21wLCBidXQgaWdub3JlcyBzcGFjZXMuCiBib29sIEtXUU5hbWVz
TWF0Y2goY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYik7CiAKQEAgLTYyLDcgKzY2LDcgQEAg
cHVibGljOgogICAgIHZvaWQgY2FsbCgpIGNvbnN0OwogICAgIHZvaWQgY2FsbChib29sKSBjb25z
dDsKICAgICB2b2lkIGNhbGwoaW50KSBjb25zdDsKLSAgICB2b2lkIGNhbGwoY29uc3QgUVN0cmlu
ZyAmKSBjb25zdDsKKyAgICB2b2lkIGNhbGwoY29uc3QgRE9NOjpET01TdHJpbmcmKSBjb25zdDsK
ICAgICB2b2lkIGNhbGwoS0lPOjpKb2IgKikgY29uc3Q7CiAgICAgdm9pZCBjYWxsKGtodG1sOjpE
b2NMb2FkZXIgKiwga2h0bWw6OkNhY2hlZE9iamVjdCAqKSBjb25zdDsKICAgICB2b2lkIGNhbGwo
S0lPOjpKb2IgKiwgY29uc3QgY2hhciAqLCBpbnQpIGNvbnN0OwpJbmRleDoga3dxL0tXUVNsb3Qu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVNsb3QubW0s
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzYKZGlmZiAtcCAtdSAtcjEuMzYga3dxL0tXUVNsb3Qu
bW0KLS0tIGt3cS9LV1FTbG90Lm1tCTExIE9jdCAyMDA1IDA5OjExOjQ5IC0wMDAwCTEuMzYKKysr
IGt3cS9LV1FTbG90Lm1tCTIzIERlYyAyMDA1IDAzOjI5OjMxIC0wMDAwCkBAIC0yMzksMTEgKzIz
OSwxMCBAQCB2b2lkIEtXUVNsb3Q6OmNhbGwoaW50IGkpIGNvbnN0CiAgICAgY2FsbCgpOwogfQog
Ci12b2lkIEtXUVNsb3Q6OmNhbGwoY29uc3QgUVN0cmluZyAmc3RyaW5nKSBjb25zdAordm9pZCBL
V1FTbG90OjpjYWxsKGNvbnN0IERPTTo6RE9NU3RyaW5nICZzdHJpbmcpIGNvbnN0CiB7Ci0gICAg
aWYgKG1fb2JqZWN0LmlzTnVsbCgpKSB7CisgICAgaWYgKG1fb2JqZWN0LmlzTnVsbCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgfQogICAgIAogICAgIHN3aXRjaCAobV9mdW5jdGlvbikgewogICAg
ICAgICBjYXNlIHNsb3RUZXh0Q2hhbmdlZFdpdGhTdHJpbmc6CkluZGV4OiBrd3EvS1dRU3RyaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVN0cmluZy5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExOQpkaWZmIC1wIC11IC1yMS4xMTkga3dxL0tXUVN0
cmluZy5oCi0tLSBrd3EvS1dRU3RyaW5nLmgJMyBPY3QgMjAwNSAyMToxMzowOSAtMDAwMAkxLjEx
OQorKysga3dxL0tXUVN0cmluZy5oCTIzIERlYyAyMDA1IDAzOjI5OjMxIC0wMDAwCkBAIC00NDEs
NyArNDQxLDYgQEAgcHVibGljOgogICAgIHZvaWQgY29weUxhdGluMShjaGFyICpidWZmZXIsIHVp
bnQgcG9zaXRpb24gPSAwLCB1aW50IGxlbmd0aCA9IDB4ZmZmZmZmZmYpIGNvbnN0OwogICAgIFFD
U3RyaW5nIHV0ZjgoKSBjb25zdCB7IGludCBsZW5ndGg7IHJldHVybiB1dGY4KGxlbmd0aCk7IH0K
ICAgICBRQ1N0cmluZyB1dGY4KGludCAmbGVuZ3RoKSBjb25zdDsKLSAgICBRQ1N0cmluZyBsb2Nh
bDhCaXQoKSBjb25zdDsKIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3Q7CkluZGV4OiBrd3EvS1dRU3RyaW5nLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FTdHJpbmcubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTQzCmRpZmYgLXAgLXUgLXIxLjE0MyBrd3EvS1dRU3RyaW5nLm1tCi0tLSBrd3EvS1dRU3Ry
aW5nLm1tCTE5IE9jdCAyMDA1IDAwOjAzOjQ2IC0wMDAwCTEuMTQzCisrKyBrd3EvS1dRU3RyaW5n
Lm1tCTIzIERlYyAyMDA1IDAzOjI5OjMzIC0wMDAwCkBAIC0xMTU1LDExICsxMTU1LDYgQEAgUUNT
dHJpbmcgUVN0cmluZzo6dXRmOChpbnQgJmxlbmd0aCkgY29ucwogICAgIHJldHVybiBxY3M7CiB9
CiAKLVFDU3RyaW5nIFFTdHJpbmc6OmxvY2FsOEJpdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHV0
ZjgoKTsKLX0KLQogYm9vbCBRU3RyaW5nOjppc051bGwoKSBjb25zdAogewogICAgIHJldHVybiBk
YXRhSGFuZGxlID09IHNoYXJlZF9udWxsX2hhbmRsZTsKSW5kZXg6IGt3cS9LV1FUZXh0RWRpdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FUZXh0RWRpdC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI4CmRpZmYgLXAgLXUgLXIxLjI4IGt3cS9LV1FUZXh0
RWRpdC5oCi0tLSBrd3EvS1dRVGV4dEVkaXQuaAkzIE9jdCAyMDA1IDIwOjU1OjA0IC0wMDAwCTEu
MjgKKysrIGt3cS9LV1FUZXh0RWRpdC5oCTIzIERlYyAyMDA1IDAzOjI5OjM0IC0wMDAwCkBAIC02
NCw5ICs2NCw5IEBAIGNsYXNzIFFUZXh0RWRpdCA6IHB1YmxpYyBRU2Nyb2xsVmlldwogCiAgICAg
Ym9vbCBoYXNTZWxlY3RlZFRleHQoKSBjb25zdDsKICAgICAKLSAgICB2b2lkIHNldFRleHQoY29u
c3QgUVN0cmluZyAmKTsKLSAgICBRU3RyaW5nIHRleHQoKSBjb25zdDsKLSAgICBRU3RyaW5nIHRl
eHRXaXRoSGFyZExpbmVCcmVha3MoKSBjb25zdDsKKyAgICB2b2lkIHNldFRleHQoY29uc3QgRE9N
OjpET01TdHJpbmcmKTsKKyAgICBET006OkRPTVN0cmluZyB0ZXh0KCkgY29uc3Q7CisgICAgRE9N
OjpET01TdHJpbmcgdGV4dFdpdGhIYXJkTGluZUJyZWFrcygpIGNvbnN0OwogCiAgICAgdm9pZCBz
ZXRUZXh0Rm9ybWF0KFRleHRGb3JtYXQpIHsgfQogCkluZGV4OiBrd3EvS1dRVGV4dEVkaXQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVRleHRFZGl0Lm1t
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU1CmRpZmYgLXAgLXUgLXIxLjU1IGt3cS9LV1FUZXh0
RWRpdC5tbQotLS0ga3dxL0tXUVRleHRFZGl0Lm1tCTMgT2N0IDIwMDUgMjE6MTM6MTAgLTAwMDAJ
MS41NQorKysga3dxL0tXUVRleHRFZGl0Lm1tCTIzIERlYyAyMDA1IDAzOjI5OjM0IC0wMDAwCkBA
IC0zMiw2ICszMiw4IEBACiAjaW1wb3J0ICJLV1FQYWxldHRlLmgiCiAjaW1wb3J0ICJLV1FUZXh0
QXJlYS5oIgogCit1c2luZyBET006OkRPTVN0cmluZzsKKwogUVRleHRFZGl0OjpRVGV4dEVkaXQo
UVdpZGdldCAqcGFyZW50KQogICAgIDogX2NsaWNrZWQodGhpcywgU0lHTkFMKGNsaWNrZWQoKSkp
CiAgICAgLCBfdGV4dENoYW5nZWQodGhpcywgU0lHTkFMKHRleHRDaGFuZ2VkKCkpKQpAQCAtNTAs
MzQgKzUyLDM0IEBAIFFUZXh0RWRpdDo6flFUZXh0RWRpdCgpCiAgICAgW3RleHRBcmVhIGRldGFj
aFFUZXh0RWRpdF07IAogfQogCi12b2lkIFFUZXh0RWRpdDo6c2V0VGV4dChjb25zdCBRU3RyaW5n
ICZzdHJpbmcpCit2b2lkIFFUZXh0RWRpdDo6c2V0VGV4dChjb25zdCBET01TdHJpbmcmIHN0cmlu
ZykKIHsKICAgICBLV1FUZXh0QXJlYSAqdGV4dFZpZXcgPSAoS1dRVGV4dEFyZWEgKilnZXRWaWV3
KCk7CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0gICAgW3RleHRWaWV3IHNldFRleHQ6c3Ry
aW5nLmdldE5TU3RyaW5nKCldOworICAgIFt0ZXh0VmlldyBzZXRUZXh0OnN0cmluZ107CiAgICAg
S1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKIH0KIAotUVN0cmluZyBRVGV4dEVkaXQ6OnRleHQoKSBj
b25zdAorRE9NU3RyaW5nIFFUZXh0RWRpdDo6dGV4dCgpIGNvbnN0CiB7CiAgICAgS1dRVGV4dEFy
ZWEgKnRleHRWaWV3ID0gKEtXUVRleHRBcmVhICopZ2V0VmlldygpOwogCiAgICAgS1dRX0JMT0NL
X0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFFTdHJpbmc6OmZyb21OU1N0cmluZyhbdGV4dFZpZXcg
dGV4dF0pOworICAgIHJldHVybiBET01TdHJpbmcoW3RleHRWaWV3IHRleHRdKTsKICAgICBLV1Ff
VU5CTE9DS19FWENFUFRJT05TOwogCi0gICAgcmV0dXJuIFFTdHJpbmcoKTsKKyAgICByZXR1cm4g
RE9NU3RyaW5nKCk7CiB9CiAKLVFTdHJpbmcgUVRleHRFZGl0Ojp0ZXh0V2l0aEhhcmRMaW5lQnJl
YWtzKCkgY29uc3QKK0RPTVN0cmluZyBRVGV4dEVkaXQ6OnRleHRXaXRoSGFyZExpbmVCcmVha3Mo
KSBjb25zdAogewogICAgIEtXUVRleHRBcmVhICp0ZXh0VmlldyA9IChLV1FUZXh0QXJlYSAqKWdl
dFZpZXcoKTsKIAogICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwotICAgIHJldHVybiBRU3RyaW5n
Ojpmcm9tTlNTdHJpbmcoW3RleHRWaWV3IHRleHRXaXRoSGFyZExpbmVCcmVha3NdKTsKKyAgICBy
ZXR1cm4gRE9NU3RyaW5nKFt0ZXh0VmlldyB0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzXSk7CiAgICAg
S1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKICAgICAKLSAgICByZXR1cm4gUVN0cmluZygpOworICAg
IHJldHVybiBET01TdHJpbmcoKTsKIH0KIAogdm9pZCBRVGV4dEVkaXQ6OmdldEN1cnNvclBvc2l0
aW9uKGludCAqcGFyYWdyYXBoLCBpbnQgKmluZGV4KSBjb25zdAo=
</data>
<flag name="review"
          id="1072"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>