<?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>55881</bug_id>
          
          <creation_ts>2011-03-07 09:10:27 -0800</creation_ts>
          <short_desc>Split JNIBridgeJSC.cpp/h into JavaArrayJSC.cpp/h and JavaFieldJSC.cpp/h</short_desc>
          <delta_ts>2011-03-07 13:24:41 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>55774</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Steve Block">steveblock</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>jorlow</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>363367</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-03-07 09:10:27 -0800</bug_when>
    <thetext>Split JNIBridgeJSC.cpp/h into JavaArrayJSC.cpp/h and JavaFieldJSC.cpp/h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363371</commentid>
    <comment_count>1</comment_count>
      <attachid>84951</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-03-07 09:19:13 -0800</bug_when>
    <thetext>Created attachment 84951
Patch 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363392</commentid>
    <comment_count>2</comment_count>
      <attachid>84954</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-03-07 10:17:46 -0800</bug_when>
    <thetext>Created attachment 84954
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363396</commentid>
    <comment_count>3</comment_count>
      <attachid>84954</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-03-07 10:21:25 -0800</bug_when>
    <thetext>Comment on attachment 84954
Patch 2

rubber stamp = me  (only skimmed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363405</commentid>
    <comment_count>4</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-03-07 10:50:58 -0800</bug_when>
    <thetext>Committed r80476: &lt;http://trac.webkit.org/changeset/80476&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363420</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-07 11:10:44 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/80476 might have broken Qt Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363538</commentid>
    <comment_count>6</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-03-07 13:24:41 -0800</bug_when>
    <thetext>Looks like the Qt build break was due to a later change - http://trac.webkit.org/changeset/80478 - not sure why my change was on the blame list. In any case, the break was fixed in http://trac.webkit.org/changeset/80480.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84951</attachid>
            <date>2011-03-07 09:19:13 -0800</date>
            <delta_ts>2011-03-07 10:17:46 -0800</delta_ts>
            <desc>Patch 1</desc>
            <filename>splitJniBridgeJSC.txt</filename>
            <type>text/plain</type>
            <size>55506</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">Y29tbWl0IGIyMGUyZTE4MzYyNmYyZTcxM2RlMTBkZDNjM2RiOTNjNzZhMTg2MzQKQXV0aG9yOiBT
dGV2ZSBCbG9jayA8c3RldmVibG9ja0Bnb29nbGUuY29tPgpEYXRlOiAgIE1vbiBNYXIgNyAxNzox
NToxMSAyMDExICswMDAwCgogICAgU3BsaXQgdXAgSk5JQnJpZGdlSlNDCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tayBiL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQuanNjYmluZGluZ3MubWsKaW5kZXggOWEyZTE3Zi4uNGZmODg0YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5taworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9BbmRyb2lkLmpzY2JpbmRpbmdzLm1rCkBAIC0yMDEsOSArMjAxLDEwIEBAIExPQ0FMX1NSQ19G
SUxFUyArPSBcCiAJYnJpZGdlL2puaS9KTklVdGlsaXR5LmNwcCBcCiAJYnJpZGdlL2puaS9KYXZh
TWV0aG9kLmNwcCBcCiAJYnJpZGdlL2puaS9Kb2JqZWN0V3JhcHBlci5jcHAgXAotCWJyaWRnZS9q
bmkvanNjL0pOSUJyaWRnZUpTQy5jcHAgXAogCWJyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2
YXRlLmNwcCBcCisJYnJpZGdlL2puaS9qc2MvSmF2YUFycmF5SlNDLmNwcCBcCiAJYnJpZGdlL2pu
aS9qc2MvSmF2YUNsYXNzSlNDLmNwcCBcCisJYnJpZGdlL2puaS9qc2MvSmF2YUZpZWxkSlNDLmNw
cCBcCiAJYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcCBcCiAJYnJpZGdlL2pzYy9C
cmlkZ2VKU0MuY3BwIFwKIAlicmlkZ2UvbnBydW50aW1lLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzUw
YzYxNy4uMzM2ZWJlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMiw2ICsyLDI1IEBACiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgU3BsaXQgSk5JQnJpZGdlSlNDLmNw
cC9oIGludG8gSmF2YUFycmF5SlNDLmNwcC9oIGFuZCBKYXZhRmllbGRKU0MuY3BwL2gKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1ODgxCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCByZWZhY3RvcmluZyBvbmx5LgorCisgICAgICAgICogQW5kcm9pZC5q
c2NiaW5kaW5ncy5tazoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnJpZGdlL2puaS9qc2Mv
Sk5JQnJpZGdlSlNDLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KTklC
cmlkZ2VKU0MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5
UHJpdmF0ZS5jcHA6CisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcDoK
KyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuaDoKKyAgICAgICAgKiBicmlk
Z2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwOgorCisyMDExLTAzLTA3ICBTdGV2ZSBCbG9j
ayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKwogICAgICAgICBSZW5hbWUgSk5JQnJpZGdlVjguY3BwL2ggdG8gSmF2YUZpZWxk
VjguY3BwL2gKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU1ODc5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYzE4ZTdiMS4uNDk5M2JiYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KQEAgLTk0MSw5ICs5NDEsMTAgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL0phdmFNZXRob2QuaCBcCiAJU291cmNlL1dlYkNv
cmUvYnJpZGdlL2puaS9KYXZhU3RyaW5nLmggXAogCVNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
am5pX2pzb2JqZWN0LmggXAorCVNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFBcnJh
eUpTQy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuaCBc
CisJU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUZpZWxkSlNDLmggXAogCVNvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvam5pL2pzYy9KTklCcmlkZ2VKU0MuaCBcCiAJU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2pzYy9CcmlkZ2VKU0MuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRn
ZUpTQy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9icmlkZ2UvbnBhcGkuaCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDMwMjdjOS4u
MGM1MDAxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTM4NCw2ICsxMzg0LDEwIEBACiAJCTU5NjIyOTdBMTEzM0VGRTIwMERD
NENCQiAvKiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5NjIyOTc5MTEzM0VGRTIwMERDNENCQiAvKiBHZW9s
b2NhdGlvblBvc2l0aW9uQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1OTY5NTA4MjEzMjEwNTk5MDBDM0VEMTggLyogSm9iamVjdFdyYXBw
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5Njk1
MDgxMTMyMTA1OTkwMEMzRUQxOCAvKiBKb2JqZWN0V3JhcHBlci5oICovOyB9OwogCQk1OTY5NTA4
NDEzMjEwNUE1MDBDM0VEMTggLyogSm9iamVjdFdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk2OTUwODMxMzIxMDVBNTAwQzNFRDE4IC8q
IEpvYmplY3RXcmFwcGVyLmNwcCAqLzsgfTsKKwkJNTk4RDc3REQxMzI1NDFFRTAwNzYxQjIyIC8q
IEphdmFBcnJheUpTQy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1OThENzdEQzEzMjU0MUVFMDA3NjFCMjIgLyogSmF2YUFycmF5SlNDLmNwcCAqLzsg
fTsKKwkJNTk4RDc3REYxMzI1NDFGQTAwNzYxQjIyIC8qIEphdmFBcnJheUpTQy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk4RDc3REUxMzI1NDFGQTAw
NzYxQjIyIC8qIEphdmFBcnJheUpTQy5oICovOyB9OworCQk1OThENzdFMTEzMjU0MjA0MDA3NjFC
MjIgLyogSmF2YUZpZWxkSlNDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU5OEQ3N0UwMTMyNTQyMDQwMDc2MUIyMiAvKiBKYXZhRmllbGRKU0MuY3Bw
ICovOyB9OworCQk1OThENzdFMzEzMjU0MjBFMDA3NjFCMjIgLyogSmF2YUZpZWxkSlNDLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OThENzdFMjEzMjU0
MjBFMDA3NjFCMjIgLyogSmF2YUZpZWxkSlNDLmggKi87IH07CiAJCTU5OUU3NTkwMTEwNTVBMUYw
MEQ5MDRGQSAvKiBCcmlkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU5OUU3NThGMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1OUE4NUVBMjExOUQ2OEQ5
MDBERUYxRUYgLyogRGV2aWNlT3JpZW50YXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OUE4NUVBMTExOUQ2OEQ5MDBERUYxRUYgLyog
RGV2aWNlT3JpZW50YXRpb25FdmVudC5jcHAgKi87IH07CiAJCTU5QTg1RUE0MTE5RDY4RUMwMERF
RjFFRiAvKiBEZXZpY2VPcmllbnRhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OUE4NUVBMzExOUQ2OEVDMDBERUYxRUYgLyogRGV2aWNl
T3JpZW50YXRpb25FdmVudC5oICovOyB9OwpAQCAtMTQwMCw4ICsxNDA0LDYgQEAKIAkJNTlEMUMx
MDQxMUVCNURDRjAwQjYzOEM4IC8qIERldmljZU9yaWVudGF0aW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5RDFDMTAzMTFFQjVEQ0YwMEI2MzhD
OCAvKiBEZXZpY2VPcmllbnRhdGlvbi5jcHAgKi87IH07CiAJCTU5RTU2MEE3MTEwNTMzNjYwMEFB
MTI1OCAvKiBKYXZhQ2xhc3NKU0MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU5RTU2MEE2MTEwNTMzNjYwMEFBMTI1OCAvKiBKYXZhQ2xhc3NKU0MuaCAq
LzsgfTsKIAkJNTlFNTYwQTkxMTA1MzM2RjAwQUExMjU4IC8qIEphdmFDbGFzc0pTQy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OUU1NjBBODExMDUz
MzZGMDBBQTEyNTggLyogSmF2YUNsYXNzSlNDLmNwcCAqLzsgfTsKLQkJNTlFODQyNjYxMTA5RTVB
MjAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTlFODQyNjUxMTA5RTVBMjAwMDMwNUFEIC8qIEpOSUJyaWRnZUpT
Qy5oICovOyB9OwotCQk1OUU4NDI2ODExMDlFNUFFMDAwMzA1QUQgLyogSk5JQnJpZGdlSlNDLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5RTg0MjY3
MTEwOUU1QUUwMDAzMDVBRCAvKiBKTklCcmlkZ2VKU0MuY3BwICovOyB9OwogCQk1OUVFMTIyQzEx
MDYwODA1MDA4ODUxMTYgLyogSk5JVXRpbGl0eVByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlFRTEyMkIxMTA2MDgwNTAwODg1MTE2IC8q
IEpOSVV0aWxpdHlQcml2YXRlLmNwcCAqLzsgfTsKIAkJNTlFRTEyMkUxMTA2MDgwRjAwODg1MTE2
IC8qIEpOSVV0aWxpdHlQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1OUVFMTIyRDExMDYwODBGMDA4ODUxMTYgLyogSk5JVXRpbGl0eVByaXZh
dGUuaCAqLzsgfTsKIAkJNTlFRTEyMzAxMTA2MDgxRjAwODg1MTE2IC8qIEpOSVV0aWxpdHkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlFRTEyMkYx
MTA2MDgxRjAwODg1MTE2IC8qIEpOSVV0aWxpdHkuY3BwICovOyB9OwpAQCAtNzg1Myw2ICs3ODU1
LDEwIEBACiAJCTU5Njk1MDgxMTMyMTA1OTkwMEMzRUQxOCAvKiBKb2JqZWN0V3JhcHBlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKb2JqZWN0V3JhcHBlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1OTY5NTA4MzEzMjEwNUE1MDBDM0VEMTggLyogSm9iamVj
dFdyYXBwZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSm9iamVj
dFdyYXBwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OTgwQjAzMzEyRUYz
RDg0MDBERjVGODUgLyogWE1MVmlld2VyLnhzbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0g
WE1MVmlld2VyLnhzbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTk4RDc3REMxMzI1
NDFFRTAwNzYxQjIyIC8qIEphdmFBcnJheUpTQy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBKYXZhQXJyYXlKU0MuY3BwOyBwYXRoID0ganNjL0phdmFBcnJheUpTQy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU5OEQ3N0RFMTMyNTQxRkEwMDc2MUIy
MiAvKiBKYXZhQXJyYXlKU0MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSmF2
YUFycmF5SlNDLmg7IHBhdGggPSBqc2MvSmF2YUFycmF5SlNDLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTU5OEQ3N0UwMTMyNTQyMDQwMDc2MUIyMiAvKiBKYXZhRmllbGRKU0MuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSmF2YUZpZWxkSlNDLmNwcDsg
cGF0aCA9IGpzYy9KYXZhRmllbGRKU0MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1OThENzdFMjEzMjU0MjBFMDA3NjFCMjIgLyogSmF2YUZpZWxkSlNDLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEphdmFGaWVsZEpTQy5oOyBwYXRoID0ganNjL0phdmFGaWVs
ZEpTQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OTlFNzU4RjExMDU1QTFGMDBE
OTA0RkEgLyogQnJpZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJyaWRn
ZS5oOyBwYXRoID0gYnJpZGdlL0JyaWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1OUE4NUVBMTExOUQ2OEQ5MDBERUYxRUYgLyogRGV2aWNlT3JpZW50YXRpb25FdmVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXZpY2VPcmllbnRhdGlvbkV2
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTlBODVFQTMxMTlENjhFQzAw
REVGMUVGIC8qIERldmljZU9yaWVudGF0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGV2aWNlT3JpZW50YXRpb25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNzg3MCw4ICs3ODc2LDYgQEAKIAkJNTlEMUMxMDMxMUVCNURDRjAwQjYzOEM4
IC8qIERldmljZU9yaWVudGF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IERldmljZU9yaWVudGF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTlFNTYwQTYxMTA1MzM2NjAwQUExMjU4IC8qIEphdmFDbGFzc0pTQy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBKYXZhQ2xhc3NKU0MuaDsgcGF0aCA9IGpzYy9KYXZhQ2xh
c3NKU0MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTlFNTYwQTgxMTA1MzM2RjAw
QUExMjU4IC8qIEphdmFDbGFzc0pTQy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBKYXZhQ2xhc3NKU0MuY3BwOyBwYXRoID0ganNjL0phdmFDbGFzc0pTQy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU5RTg0MjY1MTEwOUU1QTIwMDAzMDVBRCAvKiBK
TklCcmlkZ2VKU0MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSk5JQnJpZGdl
SlNDLmg7IHBhdGggPSBqc2MvSk5JQnJpZGdlSlNDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTU5RTg0MjY3MTEwOUU1QUUwMDAzMDVBRCAvKiBKTklCcmlkZ2VKU0MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSk5JQnJpZGdlSlNDLmNwcDsgcGF0aCA9
IGpzYy9KTklCcmlkZ2VKU0MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OUVF
MTIyQjExMDYwODA1MDA4ODUxMTYgLyogSk5JVXRpbGl0eVByaXZhdGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSk5JVXRpbGl0eVByaXZhdGUuY3BwOyBwYXRoID0g
anNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTlFRTEyMkQxMTA2MDgwRjAwODg1MTE2IC8qIEpOSVV0aWxpdHlQcml2YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpOSVV0aWxpdHlQcml2YXRlLmg7IHBhdGggPSBqc2Mv
Sk5JVXRpbGl0eVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTlFRTEy
MkYxMTA2MDgxRjAwODg1MTE2IC8qIEpOSVV0aWxpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSk5JVXRpbGl0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMzcwNyw2ICsxMzcxMSwxMCBAQAogCQk1OTlEMUUyRjEwQzk3RDRDMDBFMEVGMTIg
LyoganNjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1
OThENzdFMjEzMjU0MjBFMDA3NjFCMjIgLyogSmF2YUZpZWxkSlNDLmggKi8sCisJCQkJNTk4RDc3
RTAxMzI1NDIwNDAwNzYxQjIyIC8qIEphdmFGaWVsZEpTQy5jcHAgKi8sCisJCQkJNTk4RDc3REUx
MzI1NDFGQTAwNzYxQjIyIC8qIEphdmFBcnJheUpTQy5oICovLAorCQkJCTU5OEQ3N0RDMTMyNTQx
RUUwMDc2MUIyMiAvKiBKYXZhQXJyYXlKU0MuY3BwICovLAogCQkJCTU5RTU2MEE4MTEwNTMzNkYw
MEFBMTI1OCAvKiBKYXZhQ2xhc3NKU0MuY3BwICovLAogCQkJCTU5RTU2MEE2MTEwNTMzNjYwMEFB
MTI1OCAvKiBKYXZhQ2xhc3NKU0MuaCAqLywKIAkJCQk1OUE5RTdBRjExMDQ3NTg4MDBERkI0QzEg
LyogSmF2YUluc3RhbmNlSlNDLmNwcCAqLywKQEAgLTEzNzE0LDggKzEzNzIyLDYgQEAKIAkJCQlF
MTY5ODI2MzExMzQ2N0YzMDA4OTQxMTUgLyogSmF2YVJ1bnRpbWVPYmplY3QuY3BwICovLAogCQkJ
CUUxNjk4MjY3MTEzNDY4MDcwMDg5NDExNSAvKiBKYXZhUnVudGltZU9iamVjdC5oICovLAogCQkJ
CTU5QkMzOTNFMTEwNTRBMTMwMEZEODVEQiAvKiBKYXZhU3RyaW5nSlNDLmggKi8sCi0JCQkJNTlF
ODQyNjcxMTA5RTVBRTAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5jcHAgKi8sCi0JCQkJNTlFODQy
NjUxMTA5RTVBMjAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5oICovLAogCQkJCTU5RUUxMjJCMTEw
NjA4MDUwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5jcHAgKi8sCiAJCQkJNTlFRTEyMkQx
MTA2MDgwRjAwODg1MTE2IC8qIEpOSVV0aWxpdHlQcml2YXRlLmggKi8sCiAJCQkpOwpAQCAtMjEw
MjgsNyArMjEwMzQsNiBAQAogCQkJCTFDODFCQTBBMEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OUJDMzkzRjExMDU0QTEzMDBGRDg1
REIgLyogSmF2YVN0cmluZ0pTQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMDQwRDdFMkI4
MjAwN0MzOTgzIC8qIGpuaV9qc29iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTlFODQyNjYx
MTA5RTVBMjAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTlF
RTEyMzIxMTA2MDgyOTAwODg1MTE2IC8qIEpOSVV0aWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTU5RUUxMjJFMTEwNjA4MEYwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTMzMDlERjQwOTlFNjQ5MjAwNTZFNTgxIC8qIEpvaW5UZXh0Tm9kZXNDb21t
YW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNTM3LDYgKzIyNTQyLDggQEAKIAkJCQk1OTY5NTA4
MjEzMjEwNTk5MDBDM0VEMTggLyogSm9iamVjdFdyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTU5M0QzRUFGMTMyNTMyOEMwMDU3RTdFRSAvKiBKYXZhTWV0aG9kLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1OTNEM0VCMTEzMjUzMjk1MDA1N0U3RUUgLyogSmF2YVN0cmluZy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTk4RDc3REYxMzI1NDFGQTAwNzYxQjIyIC8qIEphdmFBcnJheUpTQy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTk4RDc3RTMxMzI1NDIwRTAwNzYxQjIyIC8qIEphdmFGaWVsZEpTQy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0yMzc3Niw3ICsyMzc4Myw2IEBACiAJCQkJMUM4MUJBMDkwRTk3
MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUE1NjlEMDMwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVjdC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBNTY5RDA1MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfb2JqYy5tbSBpbiBTb3Vy
Y2VzICovLAotCQkJCTU5RTg0MjY4MTEwOUU1QUUwMDAzMDVBRCAvKiBKTklCcmlkZ2VKU0MuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTlFRTEyMzAxMTA2MDgxRjAwODg1MTE2IC8qIEpOSVV0aWxp
dHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTlFRTEyMkMxMTA2MDgwNTAwODg1MTE2IC8qIEpO
SVV0aWxpdHlQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REYzMDk5RTY0OTIw
MDU2RTU4MSAvKiBKb2luVGV4dE5vZGVzQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1
MTg3LDYgKzI1MTkzLDggQEAKIAkJCQk1QTU3NEYyODEzMURCOTZEMDA0NzFCODggLyogUXVvdGVz
RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1OTY5NTA4NDEzMjEwNUE1MDBDM0VEMTggLyog
Sm9iamVjdFdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTkzRDNFQUQxMzI1MzI4NDAw
NTdFN0VFIC8qIEphdmFNZXRob2QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTk4RDc3REQxMzI1
NDFFRTAwNzYxQjIyIC8qIEphdmFBcnJheUpTQy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1OThE
NzdFMTEzMjU0MjA0MDA3NjFCMjIgLyogSmF2YUZpZWxkSlNDLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JQnJpZGdlSlNDLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSUJyaWRnZUpTQy5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNDViNWEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JQnJpZGdlSlNDLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDQ0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDEw
LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkpOSUJyaWRnZUpTQy5oIgotCi0jaWYgRU5BQkxFKEpBVkFfQlJJREdF
KQotCi0jaW5jbHVkZSAiSk5JVXRpbGl0eVByaXZhdGUuaCIKLSNpbmNsdWRlICJKb2JqZWN0V3Jh
cHBlci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJydW50aW1lX2FycmF5Lmgi
Ci0jaW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci11c2luZyBuYW1lc3BhY2UgSlNDOjpCaW5kaW5nczsK
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1KYXZhRmllbGQ6OkphdmFGaWVsZChKTklFbnYq
IGVudiwgam9iamVjdCBhRmllbGQpCi17Ci0gICAgLy8gR2V0IGZpZWxkIHR5cGUgbmFtZQotICAg
IGpzdHJpbmcgZmllbGRUeXBlTmFtZSA9IDA7Ci0gICAgaWYgKGpvYmplY3QgZmllbGRUeXBlID0g
Y2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhRmllbGQsICJnZXRUeXBlIiwgIigpTGphdmEvbGFuZy9D
bGFzczsiKSkKLSAgICAgICAgZmllbGRUeXBlTmFtZSA9IHN0YXRpY19jYXN0PGpzdHJpbmc+KGNh
bGxKTklNZXRob2Q8am9iamVjdD4oZmllbGRUeXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcv
U3RyaW5nOyIpKTsKLSAgICBpZiAoIWZpZWxkVHlwZU5hbWUpCi0gICAgICAgIGZpZWxkVHlwZU5h
bWUgPSBlbnYtPk5ld1N0cmluZ1VURigiPFVua25vd24+Iik7Ci0gICAgbV90eXBlID0gSmF2YVN0
cmluZyhlbnYsIGZpZWxkVHlwZU5hbWUpOwotCi0gICAgbV9KTklUeXBlID0gSk5JVHlwZUZyb21D
bGFzc05hbWUobV90eXBlLnV0ZjgoKSk7Ci0KLSAgICAvLyBHZXQgZmllbGQgbmFtZQotICAgIGpz
dHJpbmcgZmllbGROYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4oY2FsbEpOSU1ldGhvZDxqb2Jq
ZWN0PihhRmllbGQsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IikpOwotICAgIGlm
ICghZmllbGROYW1lKQotICAgICAgICBmaWVsZE5hbWUgPSBlbnYtPk5ld1N0cmluZ1VURigiPFVu
a25vd24+Iik7Ci0gICAgbV9uYW1lID0gSmF2YVN0cmluZyhlbnYsIGZpZWxkTmFtZSk7Ci0KLSAg
ICBtX2ZpZWxkID0gbmV3IEpvYmplY3RXcmFwcGVyKGFGaWVsZCk7Ci19Ci0KLUpTVmFsdWUgSmF2
YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBqb2JqZWN0IGFu
T2JqZWN0LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmpl
Y3QpCi17Ci0gICAgaWYgKHR5cGVbMF0gIT0gJ1snKQotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLQotICAgIHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVBcnJheShleGVjLCBuZXcgSmF2
YUFycmF5KGFuT2JqZWN0LCB0eXBlLCByb290T2JqZWN0KSk7Ci19Ci0KLWp2YWx1ZSBKYXZhRmll
bGQ6OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBKYXZh
SW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBzaWcsIEpO
SVR5cGUgcmV0dXJuVHlwZSkgY29uc3QKLXsKLSAgICBqb2JqZWN0IGppbnN0YW5jZSA9IGluc3Rh
bmNlLT5qYXZhSW5zdGFuY2UoKTsKLSAgICBqb2JqZWN0IGZpZWxkSkluc3RhbmNlID0gbV9maWVs
ZC0+bV9pbnN0YW5jZTsKLSAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOwotICAgIGp2YWx1
ZSByZXN1bHQ7Ci0KLSAgICBtZW1zZXQoJnJlc3VsdCwgMCwgc2l6ZW9mKGp2YWx1ZSkpOwotICAg
IGpjbGFzcyBjbHMgPSBlbnYtPkdldE9iamVjdENsYXNzKGZpZWxkSkluc3RhbmNlKTsKLSAgICBp
ZiAoY2xzKSB7Ci0gICAgICAgIGptZXRob2RJRCBtaWQgPSBlbnYtPkdldE1ldGhvZElEKGNscywg
bmFtZSwgc2lnKTsKLSAgICAgICAgaWYgKG1pZCkgewotICAgICAgICAgICAgUm9vdE9iamVjdCog
cm9vdE9iamVjdCA9IGluc3RhbmNlLT5yb290T2JqZWN0KCk7Ci0gICAgICAgICAgICBpZiAocm9v
dE9iamVjdCAmJiByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkgewotICAgICAgICAgICAgICAg
IEpTVmFsdWUgZXhjZXB0aW9uRGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAganZhbHVlIGFy
Z3NbMV07Ci0KLSAgICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7Ci0gICAgICAg
ICAgICAgICAgZGlzcGF0Y2hKTklDYWxsKGV4ZWMsIHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgp
LCBmaWVsZEpJbnN0YW5jZSwgZmFsc2UsIHJldHVyblR5cGUsIG1pZCwgYXJncywgcmVzdWx0LCAw
LCBleGNlcHRpb25EZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRl
c2NyaXB0aW9uKQotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVy
cm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSlNWYWx1
ZSBKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5z
dGFuY2UqIGkpIGNvbnN0Ci17Ci0gICAgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSA9IHN0
YXRpY19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSo+KGkpOwotCi0gICAgSlNWYWx1ZSBqc3Jlc3Vs
dCA9IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBzd2l0Y2ggKG1fSk5JVHlwZSkgewotICAgIGNhc2Ug
YXJyYXlfdHlwZToKLSAgICBjYXNlIG9iamVjdF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShleGVjLCBpbnN0YW5j
ZSwgImdldCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIsIG9iamVj
dF90eXBlKTsKLSAgICAgICAgICAgIGpvYmplY3QgYW5PYmplY3QgPSByZXN1bHQubDsKLQotICAg
ICAgICAgICAgaWYgKCFhbk9iamVjdCkKLSAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7
Ci0KLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFycmF5VHlwZSA9IHR5cGUoKTsKLSAgICAgICAg
ICAgIGlmIChhcnJheVR5cGVbMF0gPT0gJ1snKQotICAgICAgICAgICAgICAgIGpzcmVzdWx0ID0g
SmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywgYW5PYmplY3QsIGFycmF5VHlw
ZSwgaW5zdGFuY2UtPnJvb3RPYmplY3QoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChhbk9iamVj
dCkKLSAgICAgICAgICAgICAgICBqc3Jlc3VsdCA9IEphdmFJbnN0YW5jZTo6Y3JlYXRlKGFuT2Jq
ZWN0LCBpbnN0YW5jZS0+cm9vdE9iamVjdCgpKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgYm9vbGVhbl90eXBlOgotICAg
ICAgICBqc3Jlc3VsdCA9IGpzQm9vbGVhbihkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4ZWMs
IGluc3RhbmNlLCAiZ2V0Qm9vbGVhbiIsICIoTGphdmEvbGFuZy9PYmplY3Q7KVoiLCBib29sZWFu
X3R5cGUpLnopOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgYnl0ZV90eXBlOgotICAgIGNh
c2UgY2hhcl90eXBlOgotICAgIGNhc2Ugc2hvcnRfdHlwZToKLQotICAgIGNhc2UgaW50X3R5cGU6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGppbnQgdmFsdWU7Ci0gICAgICAgICAgICBqdmFsdWUg
cmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgImdldElu
dCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUkiLCBpbnRfdHlwZSk7Ci0gICAgICAgICAgICB2YWx1
ZSA9IHJlc3VsdC5pOwotICAgICAgICAgICAganNyZXN1bHQgPSBqc051bWJlcihzdGF0aWNfY2Fz
dDxpbnQ+KHZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGxv
bmdfdHlwZToKLSAgICBjYXNlIGZsb2F0X3R5cGU6Ci0gICAgY2FzZSBkb3VibGVfdHlwZToKLSAg
ICAgICAgewotICAgICAgICAgICAgamRvdWJsZSB2YWx1ZTsKLSAgICAgICAgICAgIGp2YWx1ZSBy
ZXN1bHQgPSBkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCAiZ2V0RG91
YmxlIiwgIihMamF2YS9sYW5nL09iamVjdDspRCIsIGRvdWJsZV90eXBlKTsKLSAgICAgICAgICAg
IHZhbHVlID0gcmVzdWx0Lmk7Ci0gICAgICAgICAgICBqc3Jlc3VsdCA9IGpzTnVtYmVyKHN0YXRp
Y19jYXN0PGRvdWJsZT4odmFsdWUpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBMT0coTGl2ZUNvbm5lY3QsICJK
YXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlIGdldHRpbmcgJXMgPSAlcyIsIFVTdHJpbmcobmFt
ZSgpLmltcGwoKSkudXRmOCgpLmRhdGEoKSwganNyZXN1bHQudG9TdHJpbmcoZXhlYykuYXNjaWko
KS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIGpzcmVzdWx0OwotfQotCi12b2lkIEphdmFGaWVsZDo6
ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBKYXZhSW5z
dGFuY2UqIGluc3RhbmNlLCBqdmFsdWUgamF2YVZhbHVlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25z
dCBjaGFyKiBzaWcpIGNvbnN0Ci17Ci0gICAgam9iamVjdCBqaW5zdGFuY2UgPSBpbnN0YW5jZS0+
amF2YUluc3RhbmNlKCk7Ci0gICAgam9iamVjdCBmaWVsZEpJbnN0YW5jZSA9IG1fZmllbGQtPm1f
aW5zdGFuY2U7Ci0gICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKLQotICAgIGpjbGFzcyBj
bHMgPSBlbnYtPkdldE9iamVjdENsYXNzKGZpZWxkSkluc3RhbmNlKTsKLSAgICBpZiAoY2xzKSB7
Ci0gICAgICAgIGptZXRob2RJRCBtaWQgPSBlbnYtPkdldE1ldGhvZElEKGNscywgbmFtZSwgc2ln
KTsKLSAgICAgICAgaWYgKG1pZCkgewotICAgICAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVj
dCA9IGluc3RhbmNlLT5yb290T2JqZWN0KCk7Ci0gICAgICAgICAgICBpZiAocm9vdE9iamVjdCAm
JiByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUg
ZXhjZXB0aW9uRGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAganZhbHVlIGFyZ3NbMl07Ci0g
ICAgICAgICAgICAgICAganZhbHVlIHJlc3VsdDsKLQotICAgICAgICAgICAgICAgIGFyZ3NbMF0u
bCA9IGppbnN0YW5jZTsKLSAgICAgICAgICAgICAgICBhcmdzWzFdID0gamF2YVZhbHVlOwotICAg
ICAgICAgICAgICAgIGRpc3BhdGNoSk5JQ2FsbChleGVjLCByb290T2JqZWN0LT5uYXRpdmVIYW5k
bGUoKSwgZmllbGRKSW5zdGFuY2UsIGZhbHNlLCB2b2lkX3R5cGUsIG1pZCwgYXJncywgcmVzdWx0
LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlv
bkRlc2NyaXB0aW9uKQotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSmF2YUZpZWxkOjpzZXRWYWx1
ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaSwgSlNWYWx1ZSBh
VmFsdWUpIGNvbnN0Ci17Ci0gICAgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSo+KGkpOwotICAgIGp2YWx1ZSBqYXZhVmFsdWUgPSBj
b252ZXJ0VmFsdWVUb0pWYWx1ZShleGVjLCBpLT5yb290T2JqZWN0KCksIGFWYWx1ZSwgbV9KTklU
eXBlLCB0eXBlKCkpOwotCi0gICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUZpZWxkOjpzZXRWYWx1
ZVRvSW5zdGFuY2Ugc2V0dGluZyB2YWx1ZSAlcyB0byAlcyIsIFVTdHJpbmcobmFtZSgpLmltcGwo
KSkudXRmOCgpLmRhdGEoKSwgYVZhbHVlLnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkuZGF0YSgpKTsK
LQotICAgIHN3aXRjaCAobV9KTklUeXBlKSB7Ci0gICAgY2FzZSBhcnJheV90eXBlOgotICAgIGNh
c2Ugb2JqZWN0X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVU
b0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXQiLCAiKExqYXZhL2xhbmcv
T2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylWIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0KLSAgICBjYXNlIGJvb2xlYW5fdHlwZToKLSAgICAgICAgewotICAgICAgICAgICAgZGlzcGF0
Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNldEJvb2xl
YW4iLCAiKExqYXZhL2xhbmcvT2JqZWN0O1opViIpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBieXRlX3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRpc3BhdGNo
U2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRCeXRlIiwg
IihMamF2YS9sYW5nL09iamVjdDtCKVYiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQot
ICAgIGNhc2UgY2hhcl90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZh
bHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0Q2hhciIsICIoTGph
dmEvbGFuZy9PYmplY3Q7QylWIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIHNob3J0X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVU
b0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRTaG9ydCIsICIoTGphdmEv
bGFuZy9PYmplY3Q7UylWIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IGludF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0
YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0SW50IiwgIihMamF2YS9sYW5nL09i
amVjdDtJKVYiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgbG9uZ190
eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShl
eGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0TG9uZyIsICIoTGphdmEvbGFuZy9PYmplY3Q7
SilWIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGZsb2F0X3R5cGU6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMs
IGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRGbG9hdCIsICIoTGphdmEvbGFuZy9PYmplY3Q7RilW
Iik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGRvdWJsZV90eXBlOgot
ICAgICAgICB7Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBp
bnN0YW5jZSwgamF2YVZhbHVlLCAic2V0RG91YmxlIiwgIihMamF2YS9sYW5nL09iamVjdDtEKVYi
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLUphdmFBcnJheTo6SmF2YUFycmF5KGpvYmplY3QgYXJyYXksIGNvbnN0
IGNoYXIqIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCkKLSAgICA6IEFy
cmF5KHJvb3RPYmplY3QpCi17Ci0gICAgbV9hcnJheSA9IG5ldyBKb2JqZWN0V3JhcHBlcihhcnJh
eSk7Ci0gICAgLy8gSmF2YSBhcnJheSBhcmUgZml4ZWQgbGVuZ3RoLCBzbyB3ZSBjYW4gY2FjaGUg
bGVuZ3RoLgotICAgIEpOSUVudiogZW52ID0gZ2V0Sk5JRW52KCk7Ci0gICAgbV9sZW5ndGggPSBl
bnYtPkdldEFycmF5TGVuZ3RoKHN0YXRpY19jYXN0PGphcnJheT4obV9hcnJheS0+bV9pbnN0YW5j
ZSkpOwotICAgIG1fdHlwZSA9IHN0cmR1cCh0eXBlKTsKLX0KLQotSmF2YUFycmF5Ojp+SmF2YUFy
cmF5KCkKLXsKLSAgICBmcmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fdHlwZSkpOwotfQotCi1Sb290
T2JqZWN0KiBKYXZhQXJyYXk6OnJvb3RPYmplY3QoKSBjb25zdAotewotICAgIHJldHVybiBtX3Jv
b3RPYmplY3QgJiYgbV9yb290T2JqZWN0LT5pc1ZhbGlkKCkgPyBtX3Jvb3RPYmplY3QuZ2V0KCkg
OiAwOwotfQotCi12b2lkIEphdmFBcnJheTo6c2V0VmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGluZGV4LCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3QKLXsKLSAgICBKTklFbnYqIGVudiA9
IGdldEpOSUVudigpOwotICAgIGNoYXIqIGphdmFDbGFzc05hbWUgPSAwOwotCi0gICAgSk5JVHlw
ZSBhcnJheVR5cGUgPSBKTklUeXBlRnJvbVByaW1pdGl2ZVR5cGUobV90eXBlWzFdKTsKLSAgICBp
ZiAobV90eXBlWzFdID09ICdMJykgewotICAgICAgICAvLyBUaGUgdHlwZSBvZiB0aGUgYXJyYXkg
d2lsbCBiZSBzb21ldGhpbmcgbGlrZToKLSAgICAgICAgLy8gIltMamF2YS5sYW5nLnN0cmluZzsi
LiAgVGhpcyBpcyBndWFyYW50ZWVkLCBzbyBubyBuZWVkCi0gICAgICAgIC8vIGZvciBleHRyYSBz
YW5pdHkgY2hlY2tzLgotICAgICAgICBqYXZhQ2xhc3NOYW1lID0gc3RyZHVwKCZtX3R5cGVbMl0p
OwotICAgICAgICBqYXZhQ2xhc3NOYW1lW3N0cmNocihqYXZhQ2xhc3NOYW1lLCAnOycpLWphdmFD
bGFzc05hbWVdID0gMDsKLSAgICB9Ci0gICAganZhbHVlIGFKVmFsdWUgPSBjb252ZXJ0VmFsdWVU
b0pWYWx1ZShleGVjLCBtX3Jvb3RPYmplY3QuZ2V0KCksIGFWYWx1ZSwgYXJyYXlUeXBlLCBqYXZh
Q2xhc3NOYW1lKTsKLQotICAgIHN3aXRjaCAoYXJyYXlUeXBlKSB7Ci0gICAgY2FzZSBvYmplY3Rf
dHlwZToKLSAgICAgICAgewotICAgICAgICAgICAgZW52LT5TZXRPYmplY3RBcnJheUVsZW1lbnQo
c3RhdGljX2Nhc3Q8am9iamVjdEFycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCBhSlZhbHVlLmwp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgYm9vbGVhbl90eXBl
OgotICAgICAgICB7Ci0gICAgICAgICAgICBlbnYtPlNldEJvb2xlYW5BcnJheVJlZ2lvbihzdGF0
aWNfY2FzdDxqYm9vbGVhbkFycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCAxLCAmYUpWYWx1ZS56
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBjYXNlIGJ5dGVfdHlwZToK
LSAgICAgICAgewotICAgICAgICAgICAgZW52LT5TZXRCeXRlQXJyYXlSZWdpb24oc3RhdGljX2Nh
c3Q8amJ5dGVBcnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuYik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgY2FzZSBjaGFyX3R5cGU6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGVudi0+U2V0Q2hhckFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpjaGFy
QXJyYXk+KGphdmFBcnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmMpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGNhc2Ugc2hvcnRfdHlwZToKLSAgICAgICAgewotICAg
ICAgICAgICAgZW52LT5TZXRTaG9ydEFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpzaG9ydEFycmF5
PihqYXZhQXJyYXkoKSksIGluZGV4LCAxLCAmYUpWYWx1ZS5zKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICBjYXNlIGludF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBlbnYtPlNldEludEFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGppbnRBcnJheT4oamF2YUFycmF5
KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuaSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgY2FzZSBsb25nX3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGVudi0+U2V0
TG9uZ0FycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpsb25nQXJyYXk+KGphdmFBcnJheSgpKSwgaW5k
ZXgsIDEsICZhSlZhbHVlLmopOwotICAgICAgICB9Ci0KLSAgICBjYXNlIGZsb2F0X3R5cGU6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGVudi0+U2V0RmxvYXRBcnJheVJlZ2lvbihzdGF0aWNfY2Fz
dDxqZmxvYXRBcnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuZik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgY2FzZSBkb3VibGVfdHlwZToKLSAgICAg
ICAgewotICAgICAgICAgICAgZW52LT5TZXREb3VibGVBcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxq
ZG91YmxlQXJyYXk+KGphdmFBcnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBpZiAoamF2YUNsYXNzTmFtZSkKLSAgICAgICAgZnJlZShjb25zdF9jYXN0PGNo
YXIqPihqYXZhQ2xhc3NOYW1lKSk7Ci19Ci0KLQotSlNWYWx1ZSBKYXZhQXJyYXk6OnZhbHVlQXQo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAgICBKTklFbnYqIGVu
diA9IGdldEpOSUVudigpOwotICAgIEpOSVR5cGUgYXJyYXlUeXBlID0gSk5JVHlwZUZyb21Qcmlt
aXRpdmVUeXBlKG1fdHlwZVsxXSk7Ci0gICAgc3dpdGNoIChhcnJheVR5cGUpIHsKLSAgICBjYXNl
IG9iamVjdF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBqb2JqZWN0QXJyYXkgb2JqZWN0
QXJyYXkgPSBzdGF0aWNfY2FzdDxqb2JqZWN0QXJyYXk+KGphdmFBcnJheSgpKTsKLSAgICAgICAg
ICAgIGpvYmplY3QgYW5PYmplY3Q7Ci0gICAgICAgICAgICBhbk9iamVjdCA9IGVudi0+R2V0T2Jq
ZWN0QXJyYXlFbGVtZW50KG9iamVjdEFycmF5LCBpbmRleCk7Ci0KLSAgICAgICAgICAgIC8vIE5v
IG9iamVjdD8KLSAgICAgICAgICAgIGlmICghYW5PYmplY3QpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwotCi0gICAgICAgICAgICAvLyBOZXN0ZWQgYXJyYXk/Ci0gICAgICAgICAg
ICBpZiAobV90eXBlWzFdID09ICdbJykKLSAgICAgICAgICAgICAgICByZXR1cm4gSmF2YUFycmF5
Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywgYW5PYmplY3QsIG1fdHlwZSArIDEsIHJvb3RP
YmplY3QoKSk7Ci0gICAgICAgICAgICAvLyBvciBhcnJheSBvZiBvdGhlciBvYmplY3QgdHlwZT8K
LSAgICAgICAgICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0ZShhbk9iamVjdCwgcm9vdE9i
amVjdCgpKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKLSAgICAgICAgfQotCi0gICAgY2Fz
ZSBib29sZWFuX3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGpib29sZWFuQXJyYXkgYm9v
bGVhbkFycmF5ID0gc3RhdGljX2Nhc3Q8amJvb2xlYW5BcnJheT4oamF2YUFycmF5KCkpOwotICAg
ICAgICAgICAgamJvb2xlYW4gYUJvb2xlYW47Ci0gICAgICAgICAgICBlbnYtPkdldEJvb2xlYW5B
cnJheVJlZ2lvbihib29sZWFuQXJyYXksIGluZGV4LCAxLCAmYUJvb2xlYW4pOwotICAgICAgICAg
ICAgcmV0dXJuIGpzQm9vbGVhbihhQm9vbGVhbik7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgYnl0
ZV90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBqYnl0ZUFycmF5IGJ5dGVBcnJheSA9IHN0
YXRpY19jYXN0PGpieXRlQXJyYXk+KGphdmFBcnJheSgpKTsKLSAgICAgICAgICAgIGpieXRlIGFC
eXRlOwotICAgICAgICAgICAgZW52LT5HZXRCeXRlQXJyYXlSZWdpb24oYnl0ZUFycmF5LCBpbmRl
eCwgMSwgJmFCeXRlKTsKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihhQnl0ZSk7Ci0gICAg
ICAgIH0KLQotICAgIGNhc2UgY2hhcl90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBqY2hh
ckFycmF5IGNoYXJBcnJheSA9IHN0YXRpY19jYXN0PGpjaGFyQXJyYXk+KGphdmFBcnJheSgpKTsK
LSAgICAgICAgICAgIGpjaGFyIGFDaGFyOwotICAgICAgICAgICAgZW52LT5HZXRDaGFyQXJyYXlS
ZWdpb24oY2hhckFycmF5LCBpbmRleCwgMSwgJmFDaGFyKTsKLSAgICAgICAgICAgIHJldHVybiBq
c051bWJlcihhQ2hhcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgY2Fz
ZSBzaG9ydF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBqc2hvcnRBcnJheSBzaG9ydEFy
cmF5ID0gc3RhdGljX2Nhc3Q8anNob3J0QXJyYXk+KGphdmFBcnJheSgpKTsKLSAgICAgICAgICAg
IGpzaG9ydCBhU2hvcnQ7Ci0gICAgICAgICAgICBlbnYtPkdldFNob3J0QXJyYXlSZWdpb24oc2hv
cnRBcnJheSwgaW5kZXgsIDEsICZhU2hvcnQpOwotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KGFTaG9ydCk7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgaW50X3R5cGU6Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIGppbnRBcnJheSBpbnRBcnJheSA9IHN0YXRpY19jYXN0PGppbnRBcnJheT4oamF2
YUFycmF5KCkpOwotICAgICAgICAgICAgamludCBhbkludDsKLSAgICAgICAgICAgIGVudi0+R2V0
SW50QXJyYXlSZWdpb24oaW50QXJyYXksIGluZGV4LCAxLCAmYW5JbnQpOwotICAgICAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKGFuSW50KTsKLSAgICAgICAgfQotCi0gICAgY2FzZSBsb25nX3R5cGU6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGpsb25nQXJyYXkgbG9uZ0FycmF5ID0gc3RhdGljX2Nh
c3Q8amxvbmdBcnJheT4oamF2YUFycmF5KCkpOwotICAgICAgICAgICAgamxvbmcgYUxvbmc7Ci0g
ICAgICAgICAgICBlbnYtPkdldExvbmdBcnJheVJlZ2lvbihsb25nQXJyYXksIGluZGV4LCAxLCAm
YUxvbmcpOwotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGFMb25nKTsKLSAgICAgICAgfQot
Ci0gICAgY2FzZSBmbG9hdF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBqZmxvYXRBcnJh
eSBmbG9hdEFycmF5ID0gc3RhdGljX2Nhc3Q8amZsb2F0QXJyYXk+KGphdmFBcnJheSgpKTsKLSAg
ICAgICAgICAgIGpmbG9hdCBhRmxvYXQ7Ci0gICAgICAgICAgICBlbnYtPkdldEZsb2F0QXJyYXlS
ZWdpb24oZmxvYXRBcnJheSwgaW5kZXgsIDEsICZhRmxvYXQpOwotICAgICAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKGFGbG9hdCk7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgZG91YmxlX3R5cGU6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGpkb3VibGVBcnJheSBkb3VibGVBcnJheSA9IHN0YXRpY19j
YXN0PGpkb3VibGVBcnJheT4oamF2YUFycmF5KCkpOwotICAgICAgICAgICAgamRvdWJsZSBhRG91
YmxlOwotICAgICAgICAgICAgZW52LT5HZXREb3VibGVBcnJheVJlZ2lvbihkb3VibGVBcnJheSwg
aW5kZXgsIDEsICZhRG91YmxlKTsKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihhRG91Ymxl
KTsKLSAgICAgICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotdW5zaWduZWQgaW50IEphdmFBcnJheTo6Z2V0TGVu
Z3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sZW5ndGg7Ci19Ci0KLSNlbmRpZiAvLyBFTkFC
TEUoSkFWQV9CUklER0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pz
Yy9KTklCcmlkZ2VKU0MuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSUJyaWRn
ZUpTQy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDY5ZDFkLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSUJyaWRnZUpTQy5oCisrKyAvZGV2
L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNywgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgSk5JQnJpZGdlSlNDX2gKLSNkZWZpbmUgSk5JQnJpZGdlSlNDX2gKLQotI2lmIEVO
QUJMRShKQVZBX0JSSURHRSkKLQotI2luY2x1ZGUgIkJyaWRnZUpTQy5oIgotI2luY2x1ZGUgIkpO
SVV0aWxpdHkuaCIKLSNpbmNsdWRlICJKYXZhTWV0aG9kLmgiCi0jaW5jbHVkZSAiSmF2YVN0cmlu
Zy5oIgotI2luY2x1ZGUgIkpvYmplY3RXcmFwcGVyLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1u
YW1lc3BhY2UgQmluZGluZ3MgewotCi1jbGFzcyBKYXZhRmllbGQgOiBwdWJsaWMgRmllbGQgewot
cHVibGljOgotICAgIEphdmFGaWVsZChKTklFbnYqLCBqb2JqZWN0IGFGaWVsZCk7Ci0KLSAgICB2
aXJ0dWFsIEpTVmFsdWUgdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFu
Y2UqKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0
ZSosIGNvbnN0IEluc3RhbmNlKiwgSlNWYWx1ZSkgY29uc3Q7Ci0KLSAgICBjb25zdCBKYXZhU3Ry
aW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgdmlydHVhbCBSdW50aW1l
VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlLnV0ZjgoKTsgfQotCi0gICAgSk5JVHlw
ZSBnZXRKTklUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9KTklUeXBlOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgdm9pZCBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBKYXZh
SW5zdGFuY2UqLCBqdmFsdWUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHNpZykgY29u
c3Q7Ci0gICAganZhbHVlIGRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29u
c3QgSmF2YUluc3RhbmNlKiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2lnLCBKTklU
eXBlIHJldHVyblR5cGUpIGNvbnN0OwotCi0gICAgSmF2YVN0cmluZyBtX25hbWU7Ci0gICAgSmF2
YVN0cmluZyBtX3R5cGU7Ci0gICAgSk5JVHlwZSBtX0pOSVR5cGU7Ci0gICAgUmVmUHRyPEpvYmpl
Y3RXcmFwcGVyPiBtX2ZpZWxkOwotfTsKLQotY2xhc3MgSmF2YUFycmF5IDogcHVibGljIEFycmF5
IHsKLXB1YmxpYzoKLSAgICBKYXZhQXJyYXkoam9iamVjdCBhcnJheSwgY29uc3QgY2hhciogdHlw
ZSwgUGFzc1JlZlB0cjxSb290T2JqZWN0Pik7Ci0gICAgdmlydHVhbCB+SmF2YUFycmF5KCk7Ci0K
LSAgICBSb290T2JqZWN0KiByb290T2JqZWN0KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0VmFsdWVBdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbnQgaW5kZXgsIEpTVmFsdWUpIGNvbnN0
OwotICAgIHZpcnR1YWwgSlNWYWx1ZSB2YWx1ZUF0KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGludCBp
bmRleCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TGVuZ3RoKCkgY29uc3Q7
Ci0KLSAgICBqb2JqZWN0IGphdmFBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXktPm1faW5z
dGFuY2U7IH0KLQotICAgIHN0YXRpYyBKU1ZhbHVlIGNvbnZlcnRKT2JqZWN0VG9BcnJheShFeGVj
U3RhdGUqLCBqb2JqZWN0LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
KTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8Sm9iamVjdFdyYXBwZXI+IG1fYXJyYXk7Ci0gICAg
dW5zaWduZWQgaW50IG1fbGVuZ3RoOwotICAgIGNvbnN0IGNoYXIqIG1fdHlwZTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIEJpbmRpbmdzCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8g
RU5BQkxFKEpBVkFfQlJJREdFKQotCi0jZW5kaWYgLy8gSk5JQnJpZGdlSlNDX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcAppbmRl
eCBlNzQwNWU3Li5hOGJlMGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5p
L2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2pu
aS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCkBAIC0yOSwxMSArMjksMTMgQEAKIAogI2lmIEVO
QUJMRShKQVZBX0JSSURHRSkKIAorI2luY2x1ZGUgIkphdmFBcnJheUpTQy5oIgorI2luY2x1ZGUg
IkphdmFJbnN0YW5jZUpTQy5oIgogI2luY2x1ZGUgIkphdmFSdW50aW1lT2JqZWN0LmgiCi0jaW5j
bHVkZSAiSk5JQnJpZGdlSlNDLmgiCiAjaW5jbHVkZSAiam5pX2pzb2JqZWN0LmgiCiAjaW5jbHVk
ZSAicnVudGltZV9hcnJheS5oIgogI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCisjaW5jbHVk
ZSAicnVudGltZV9yb290LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9KU0xvY2suaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdl
L2puaS9qc2MvSmF2YUFycmF5SlNDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNj
L0phdmFBcnJheUpTQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI4
N2JhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0ph
dmFBcnJheUpTQy5jcHAKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSmF2YUFycmF5SlNDLmgiCisKKyNp
ZiBFTkFCTEUoSkFWQV9CUklER0UpCisKKyNpbmNsdWRlICJKTklVdGlsaXR5UHJpdmF0ZS5oIgor
I2luY2x1ZGUgIkphdmFJbnN0YW5jZUpTQy5oIgorI2luY2x1ZGUgIkpvYmplY3RXcmFwcGVyLmgi
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgInJ1bnRpbWVfYXJyYXkuaCIKKyNpbmNs
dWRlICJydW50aW1lX29iamVjdC5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgorI2luY2x1
ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKK3VzaW5nIG5hbWVz
cGFjZSBKU0M6OkJpbmRpbmdzOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0pTVmFsdWUg
SmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBqb2JqZWN0
IGFuT2JqZWN0LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RP
YmplY3QpCit7CisgICAgaWYgKHR5cGVbMF0gIT0gJ1snKQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKworICAgIHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVBcnJheShleGVjLCBuZXcg
SmF2YUFycmF5KGFuT2JqZWN0LCB0eXBlLCByb290T2JqZWN0KSk7Cit9CisKK0phdmFBcnJheTo6
SmF2YUFycmF5KGpvYmplY3QgYXJyYXksIGNvbnN0IGNoYXIqIHR5cGUsIFBhc3NSZWZQdHI8Um9v
dE9iamVjdD4gcm9vdE9iamVjdCkKKyAgICA6IEFycmF5KHJvb3RPYmplY3QpCit7CisgICAgbV9h
cnJheSA9IG5ldyBKb2JqZWN0V3JhcHBlcihhcnJheSk7CisgICAgLy8gSmF2YSBhcnJheSBhcmUg
Zml4ZWQgbGVuZ3RoLCBzbyB3ZSBjYW4gY2FjaGUgbGVuZ3RoLgorICAgIEpOSUVudiogZW52ID0g
Z2V0Sk5JRW52KCk7CisgICAgbV9sZW5ndGggPSBlbnYtPkdldEFycmF5TGVuZ3RoKHN0YXRpY19j
YXN0PGphcnJheT4obV9hcnJheS0+bV9pbnN0YW5jZSkpOworICAgIG1fdHlwZSA9IHN0cmR1cCh0
eXBlKTsKK30KKworSmF2YUFycmF5Ojp+SmF2YUFycmF5KCkKK3sKKyAgICBmcmVlKGNvbnN0X2Nh
c3Q8Y2hhcio+KG1fdHlwZSkpOworfQorCitSb290T2JqZWN0KiBKYXZhQXJyYXk6OnJvb3RPYmpl
Y3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3Jvb3RPYmplY3QgJiYgbV9yb290T2JqZWN0LT5p
c1ZhbGlkKCkgPyBtX3Jvb3RPYmplY3QuZ2V0KCkgOiAwOworfQorCit2b2lkIEphdmFBcnJheTo6
c2V0VmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIGFWYWx1
ZSkgY29uc3QKK3sKKyAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOworICAgIGNoYXIqIGph
dmFDbGFzc05hbWUgPSAwOworCisgICAgSk5JVHlwZSBhcnJheVR5cGUgPSBKTklUeXBlRnJvbVBy
aW1pdGl2ZVR5cGUobV90eXBlWzFdKTsKKyAgICBpZiAobV90eXBlWzFdID09ICdMJykgeworICAg
ICAgICAvLyBUaGUgdHlwZSBvZiB0aGUgYXJyYXkgd2lsbCBiZSBzb21ldGhpbmcgbGlrZToKKyAg
ICAgICAgLy8gIltMamF2YS5sYW5nLnN0cmluZzsiLiBUaGlzIGlzIGd1YXJhbnRlZWQsIHNvIG5v
IG5lZWQKKyAgICAgICAgLy8gZm9yIGV4dHJhIHNhbml0eSBjaGVja3MuCisgICAgICAgIGphdmFD
bGFzc05hbWUgPSBzdHJkdXAoJm1fdHlwZVsyXSk7CisgICAgICAgIGphdmFDbGFzc05hbWVbc3Ry
Y2hyKGphdmFDbGFzc05hbWUsICc7JyktamF2YUNsYXNzTmFtZV0gPSAwOworICAgIH0KKyAgICBq
dmFsdWUgYUpWYWx1ZSA9IGNvbnZlcnRWYWx1ZVRvSlZhbHVlKGV4ZWMsIG1fcm9vdE9iamVjdC5n
ZXQoKSwgYVZhbHVlLCBhcnJheVR5cGUsIGphdmFDbGFzc05hbWUpOworCisgICAgc3dpdGNoIChh
cnJheVR5cGUpIHsKKyAgICBjYXNlIG9iamVjdF90eXBlOgorICAgICAgICB7CisgICAgICAgICAg
ICBlbnYtPlNldE9iamVjdEFycmF5RWxlbWVudChzdGF0aWNfY2FzdDxqb2JqZWN0QXJyYXk+KGph
dmFBcnJheSgpKSwgaW5kZXgsIGFKVmFsdWUubCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgY2FzZSBib29sZWFuX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGVu
di0+U2V0Qm9vbGVhbkFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpib29sZWFuQXJyYXk+KGphdmFB
cnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLnopOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgIGNhc2UgYnl0ZV90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBlbnYt
PlNldEJ5dGVBcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqYnl0ZUFycmF5PihqYXZhQXJyYXkoKSks
IGluZGV4LCAxLCAmYUpWYWx1ZS5iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICBjYXNlIGNoYXJfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgZW52LT5TZXRDaGFy
QXJyYXlSZWdpb24oc3RhdGljX2Nhc3Q8amNoYXJBcnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwg
MSwgJmFKVmFsdWUuYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgY2Fz
ZSBzaG9ydF90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBlbnYtPlNldFNob3J0QXJyYXlS
ZWdpb24oc3RhdGljX2Nhc3Q8anNob3J0QXJyYXk+KGphdmFBcnJheSgpKSwgaW5kZXgsIDEsICZh
SlZhbHVlLnMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGNhc2UgaW50
X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGVudi0+U2V0SW50QXJyYXlSZWdpb24oc3Rh
dGljX2Nhc3Q8amludEFycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCAxLCAmYUpWYWx1ZS5pKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICBjYXNlIGxvbmdfdHlwZToKKyAg
ICAgICAgeworICAgICAgICAgICAgZW52LT5TZXRMb25nQXJyYXlSZWdpb24oc3RhdGljX2Nhc3Q8
amxvbmdBcnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuaik7CisgICAgICAg
IH0KKworICAgIGNhc2UgZmxvYXRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgZW52LT5T
ZXRGbG9hdEFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpmbG9hdEFycmF5PihqYXZhQXJyYXkoKSks
IGluZGV4LCAxLCAmYUpWYWx1ZS5mKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICBjYXNlIGRvdWJsZV90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBlbnYtPlNldERv
dWJsZUFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpkb3VibGVBcnJheT4oamF2YUFycmF5KCkpLCBp
bmRleCwgMSwgJmFKVmFsdWUuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChqYXZhQ2xhc3NOYW1l
KQorICAgICAgICBmcmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KGphdmFDbGFzc05hbWUpKTsKK30KKwor
SlNWYWx1ZSBKYXZhQXJyYXk6OnZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRl
eCkgY29uc3QKK3sKKyAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOworICAgIEpOSVR5cGUg
YXJyYXlUeXBlID0gSk5JVHlwZUZyb21QcmltaXRpdmVUeXBlKG1fdHlwZVsxXSk7CisgICAgc3dp
dGNoIChhcnJheVR5cGUpIHsKKyAgICBjYXNlIG9iamVjdF90eXBlOgorICAgICAgICB7CisgICAg
ICAgICAgICBqb2JqZWN0QXJyYXkgb2JqZWN0QXJyYXkgPSBzdGF0aWNfY2FzdDxqb2JqZWN0QXJy
YXk+KGphdmFBcnJheSgpKTsKKyAgICAgICAgICAgIGpvYmplY3QgYW5PYmplY3Q7CisgICAgICAg
ICAgICBhbk9iamVjdCA9IGVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KG9iamVjdEFycmF5LCBp
bmRleCk7CisKKyAgICAgICAgICAgIC8vIE5vIG9iamVjdD8KKyAgICAgICAgICAgIGlmICghYW5P
YmplY3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworCisgICAgICAgICAgICAv
LyBOZXN0ZWQgYXJyYXk/CisgICAgICAgICAgICBpZiAobV90eXBlWzFdID09ICdbJykKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywg
YW5PYmplY3QsIG1fdHlwZSArIDEsIHJvb3RPYmplY3QoKSk7CisgICAgICAgICAgICAvLyBvciBh
cnJheSBvZiBvdGhlciBvYmplY3QgdHlwZT8KKyAgICAgICAgICAgIHJldHVybiBKYXZhSW5zdGFu
Y2U6OmNyZWF0ZShhbk9iamVjdCwgcm9vdE9iamVjdCgpKS0+Y3JlYXRlUnVudGltZU9iamVjdChl
eGVjKTsKKyAgICAgICAgfQorCisgICAgY2FzZSBib29sZWFuX3R5cGU6CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGpib29sZWFuQXJyYXkgYm9vbGVhbkFycmF5ID0gc3RhdGljX2Nhc3Q8amJvb2xl
YW5BcnJheT4oamF2YUFycmF5KCkpOworICAgICAgICAgICAgamJvb2xlYW4gYUJvb2xlYW47Cisg
ICAgICAgICAgICBlbnYtPkdldEJvb2xlYW5BcnJheVJlZ2lvbihib29sZWFuQXJyYXksIGluZGV4
LCAxLCAmYUJvb2xlYW4pOworICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihhQm9vbGVhbik7
CisgICAgICAgIH0KKworICAgIGNhc2UgYnl0ZV90eXBlOgorICAgICAgICB7CisgICAgICAgICAg
ICBqYnl0ZUFycmF5IGJ5dGVBcnJheSA9IHN0YXRpY19jYXN0PGpieXRlQXJyYXk+KGphdmFBcnJh
eSgpKTsKKyAgICAgICAgICAgIGpieXRlIGFCeXRlOworICAgICAgICAgICAgZW52LT5HZXRCeXRl
QXJyYXlSZWdpb24oYnl0ZUFycmF5LCBpbmRleCwgMSwgJmFCeXRlKTsKKyAgICAgICAgICAgIHJl
dHVybiBqc051bWJlcihhQnl0ZSk7CisgICAgICAgIH0KKworICAgIGNhc2UgY2hhcl90eXBlOgor
ICAgICAgICB7CisgICAgICAgICAgICBqY2hhckFycmF5IGNoYXJBcnJheSA9IHN0YXRpY19jYXN0
PGpjaGFyQXJyYXk+KGphdmFBcnJheSgpKTsKKyAgICAgICAgICAgIGpjaGFyIGFDaGFyOworICAg
ICAgICAgICAgZW52LT5HZXRDaGFyQXJyYXlSZWdpb24oY2hhckFycmF5LCBpbmRleCwgMSwgJmFD
aGFyKTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihhQ2hhcik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgY2FzZSBzaG9ydF90eXBlOgorICAgICAgICB7CisgICAg
ICAgICAgICBqc2hvcnRBcnJheSBzaG9ydEFycmF5ID0gc3RhdGljX2Nhc3Q8anNob3J0QXJyYXk+
KGphdmFBcnJheSgpKTsKKyAgICAgICAgICAgIGpzaG9ydCBhU2hvcnQ7CisgICAgICAgICAgICBl
bnYtPkdldFNob3J0QXJyYXlSZWdpb24oc2hvcnRBcnJheSwgaW5kZXgsIDEsICZhU2hvcnQpOwor
ICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGFTaG9ydCk7CisgICAgICAgIH0KKworICAgIGNh
c2UgaW50X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGppbnRBcnJheSBpbnRBcnJheSA9
IHN0YXRpY19jYXN0PGppbnRBcnJheT4oamF2YUFycmF5KCkpOworICAgICAgICAgICAgamludCBh
bkludDsKKyAgICAgICAgICAgIGVudi0+R2V0SW50QXJyYXlSZWdpb24oaW50QXJyYXksIGluZGV4
LCAxLCAmYW5JbnQpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGFuSW50KTsKKyAgICAg
ICAgfQorCisgICAgY2FzZSBsb25nX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGpsb25n
QXJyYXkgbG9uZ0FycmF5ID0gc3RhdGljX2Nhc3Q8amxvbmdBcnJheT4oamF2YUFycmF5KCkpOwor
ICAgICAgICAgICAgamxvbmcgYUxvbmc7CisgICAgICAgICAgICBlbnYtPkdldExvbmdBcnJheVJl
Z2lvbihsb25nQXJyYXksIGluZGV4LCAxLCAmYUxvbmcpOworICAgICAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGFMb25nKTsKKyAgICAgICAgfQorCisgICAgY2FzZSBmbG9hdF90eXBlOgorICAgICAg
ICB7CisgICAgICAgICAgICBqZmxvYXRBcnJheSBmbG9hdEFycmF5ID0gc3RhdGljX2Nhc3Q8amZs
b2F0QXJyYXk+KGphdmFBcnJheSgpKTsKKyAgICAgICAgICAgIGpmbG9hdCBhRmxvYXQ7CisgICAg
ICAgICAgICBlbnYtPkdldEZsb2F0QXJyYXlSZWdpb24oZmxvYXRBcnJheSwgaW5kZXgsIDEsICZh
RmxvYXQpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGFGbG9hdCk7CisgICAgICAgIH0K
KworICAgIGNhc2UgZG91YmxlX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGpkb3VibGVB
cnJheSBkb3VibGVBcnJheSA9IHN0YXRpY19jYXN0PGpkb3VibGVBcnJheT4oamF2YUFycmF5KCkp
OworICAgICAgICAgICAgamRvdWJsZSBhRG91YmxlOworICAgICAgICAgICAgZW52LT5HZXREb3Vi
bGVBcnJheVJlZ2lvbihkb3VibGVBcnJheSwgaW5kZXgsIDEsICZhRG91YmxlKTsKKyAgICAgICAg
ICAgIHJldHVybiBqc051bWJlcihhRG91YmxlKTsKKyAgICAgICAgfQorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKwordW5z
aWduZWQgaW50IEphdmFBcnJheTo6Z2V0TGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9s
ZW5ndGg7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQXJyYXlKU0MuaCBiL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvanNjL0phdmFBcnJheUpTQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjkwMGM3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvam5pL2pzYy9KYXZhQXJyYXlKU0MuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVu
IFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKYXZhQXJyYXlKU0NfaAorI2RlZmluZSBK
YXZhQXJyYXlKU0NfaAorCisjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQorCisjaW5jbHVkZSAiQnJp
ZGdlSlNDLmgiCisjaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgorI2luY2x1ZGUgIkpvYmplY3RXcmFw
cGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQmluZGluZ3MgeworCitjbGFz
cyBKYXZhQXJyYXkgOiBwdWJsaWMgQXJyYXkgeworcHVibGljOgorICAgIEphdmFBcnJheShqb2Jq
ZWN0IGFycmF5LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KTsKKyAg
ICB2aXJ0dWFsIH5KYXZhQXJyYXkoKTsKKworICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IGludCBpbmRleCwgSlNWYWx1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlQXQo
RXhlY1N0YXRlKiwgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRMZW5ndGgoKSBjb25zdDsKKworICAgIGpvYmplY3QgamF2YUFycmF5KCkgY29u
c3QgeyByZXR1cm4gbV9hcnJheS0+bV9pbnN0YW5jZTsgfQorCisgICAgc3RhdGljIEpTVmFsdWUg
Y29udmVydEpPYmplY3RUb0FycmF5KEV4ZWNTdGF0ZSosIGpvYmplY3QsIGNvbnN0IGNoYXIqIHR5
cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4pOworCitwcml2YXRlOgorICAgIFJlZlB0cjxKb2Jq
ZWN0V3JhcHBlcj4gbV9hcnJheTsKKyAgICB1bnNpZ25lZCBpbnQgbV9sZW5ndGg7CisgICAgY29u
c3QgY2hhciogbV90eXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCisKKyNlbmRpZiAv
LyBKYXZhQXJyYXlKU0NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9q
c2MvSmF2YUNsYXNzSlNDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFD
bGFzc0pTQy5jcHAKaW5kZXggY2Q2MDhhYy4uMThjZDFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCkBAIC0zMCw2ICszMCw4IEBACiAKICNp
bmNsdWRlICJKTklVdGlsaXR5LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRl
ICJKYXZhRmllbGRKU0MuaCIKKyNpbmNsdWRlICJKYXZhTWV0aG9kLmgiCiAjaW5jbHVkZSA8cnVu
dGltZS9JZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuaAppbmRleCAwNTI3MTYyLi40
OGM5Y2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xh
c3NKU0MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0Mu
aApAQCAtMjgsNyArMjgsOCBAQAogCiAjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQogCi0jaW5jbHVk
ZSAiSk5JQnJpZGdlSlNDLmgiCisjaW5jbHVkZSAiQnJpZGdlSlNDLmgiCisjaW5jbHVkZSAiSk5J
VXRpbGl0eS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUZpZWxkSlNDLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFGaWVsZEpTQy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNiYTA2YQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFGaWVsZEpTQy5jcHAKQEAgLTAsMCAr
MSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMTAsIFRo
ZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSmF2YUZpZWxkSlNDLmgiCisKKyNpZiBFTkFCTEUoSkFWQV9CUklER0UpCisK
KyNpbmNsdWRlICJKTklVdGlsaXR5UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkphdmFBcnJheUpTQy5o
IgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJydW50aW1lX2FycmF5LmgiCisjaW5j
bHVkZSAicnVudGltZV9vYmplY3QuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBKU0M7Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCaW5kaW5nczsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitKYXZhRmllbGQ6OkphdmFGaWVsZChKTklFbnYqIGVudiwg
am9iamVjdCBhRmllbGQpCit7CisgICAgLy8gR2V0IGZpZWxkIHR5cGUgbmFtZQorICAgIGpzdHJp
bmcgZmllbGRUeXBlTmFtZSA9IDA7CisgICAgaWYgKGpvYmplY3QgZmllbGRUeXBlID0gY2FsbEpO
SU1ldGhvZDxqb2JqZWN0PihhRmllbGQsICJnZXRUeXBlIiwgIigpTGphdmEvbGFuZy9DbGFzczsi
KSkKKyAgICAgICAgZmllbGRUeXBlTmFtZSA9IHN0YXRpY19jYXN0PGpzdHJpbmc+KGNhbGxKTklN
ZXRob2Q8am9iamVjdD4oZmllbGRUeXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5n
OyIpKTsKKyAgICBpZiAoIWZpZWxkVHlwZU5hbWUpCisgICAgICAgIGZpZWxkVHlwZU5hbWUgPSBl
bnYtPk5ld1N0cmluZ1VURigiPFVua25vd24+Iik7CisgICAgbV90eXBlID0gSmF2YVN0cmluZyhl
bnYsIGZpZWxkVHlwZU5hbWUpOworCisgICAgbV9KTklUeXBlID0gSk5JVHlwZUZyb21DbGFzc05h
bWUobV90eXBlLnV0ZjgoKSk7CisKKyAgICAvLyBHZXQgZmllbGQgbmFtZQorICAgIGpzdHJpbmcg
ZmllbGROYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0Pihh
RmllbGQsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IikpOworICAgIGlmICghZmll
bGROYW1lKQorICAgICAgICBmaWVsZE5hbWUgPSBlbnYtPk5ld1N0cmluZ1VURigiPFVua25vd24+
Iik7CisgICAgbV9uYW1lID0gSmF2YVN0cmluZyhlbnYsIGZpZWxkTmFtZSk7CisKKyAgICBtX2Zp
ZWxkID0gbmV3IEpvYmplY3RXcmFwcGVyKGFGaWVsZCk7Cit9CisKK2p2YWx1ZSBKYXZhRmllbGQ6
OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBKYXZhSW5z
dGFuY2UqIGluc3RhbmNlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBzaWcsIEpOSVR5
cGUgcmV0dXJuVHlwZSkgY29uc3QKK3sKKyAgICBqb2JqZWN0IGppbnN0YW5jZSA9IGluc3RhbmNl
LT5qYXZhSW5zdGFuY2UoKTsKKyAgICBqb2JqZWN0IGZpZWxkSkluc3RhbmNlID0gbV9maWVsZC0+
bV9pbnN0YW5jZTsKKyAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOworICAgIGp2YWx1ZSBy
ZXN1bHQ7CisKKyAgICBtZW1zZXQoJnJlc3VsdCwgMCwgc2l6ZW9mKGp2YWx1ZSkpOworICAgIGpj
bGFzcyBjbHMgPSBlbnYtPkdldE9iamVjdENsYXNzKGZpZWxkSkluc3RhbmNlKTsKKyAgICBpZiAo
Y2xzKSB7CisgICAgICAgIGptZXRob2RJRCBtaWQgPSBlbnYtPkdldE1ldGhvZElEKGNscywgbmFt
ZSwgc2lnKTsKKyAgICAgICAgaWYgKG1pZCkgeworICAgICAgICAgICAgUm9vdE9iamVjdCogcm9v
dE9iamVjdCA9IGluc3RhbmNlLT5yb290T2JqZWN0KCk7CisgICAgICAgICAgICBpZiAocm9vdE9i
amVjdCAmJiByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkgeworICAgICAgICAgICAgICAgIEpT
VmFsdWUgZXhjZXB0aW9uRGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAganZhbHVlIGFyZ3Nb
MV07CisKKyAgICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7CisgICAgICAgICAg
ICAgICAgZGlzcGF0Y2hKTklDYWxsKGV4ZWMsIHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpLCBm
aWVsZEpJbnN0YW5jZSwgZmFsc2UsIHJldHVyblR5cGUsIG1pZCwgYXJncywgcmVzdWx0LCAwLCBl
eGNlcHRpb25EZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRlc2Ny
aXB0aW9uKQorICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9y
KGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNWYWx1ZSBK
YXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFu
Y2UqIGkpIGNvbnN0Cit7CisgICAgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSo+KGkpOworCisgICAgSlNWYWx1ZSBqc3Jlc3VsdCA9
IGpzVW5kZWZpbmVkKCk7CisKKyAgICBzd2l0Y2ggKG1fSk5JVHlwZSkgeworICAgIGNhc2UgYXJy
YXlfdHlwZToKKyAgICBjYXNlIG9iamVjdF90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBq
dmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwg
ImdldCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIsIG9iamVjdF90
eXBlKTsKKyAgICAgICAgICAgIGpvYmplY3QgYW5PYmplY3QgPSByZXN1bHQubDsKKworICAgICAg
ICAgICAgaWYgKCFhbk9iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CisK
KyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFycmF5VHlwZSA9IHR5cGUoKTsKKyAgICAgICAgICAg
IGlmIChhcnJheVR5cGVbMF0gPT0gJ1snKQorICAgICAgICAgICAgICAgIGpzcmVzdWx0ID0gSmF2
YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywgYW5PYmplY3QsIGFycmF5VHlwZSwg
aW5zdGFuY2UtPnJvb3RPYmplY3QoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChhbk9iamVjdCkK
KyAgICAgICAgICAgICAgICBqc3Jlc3VsdCA9IEphdmFJbnN0YW5jZTo6Y3JlYXRlKGFuT2JqZWN0
LCBpbnN0YW5jZS0+cm9vdE9iamVjdCgpKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgYm9vbGVhbl90eXBlOgorICAgICAg
ICBqc3Jlc3VsdCA9IGpzQm9vbGVhbihkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4ZWMsIGlu
c3RhbmNlLCAiZ2V0Qm9vbGVhbiIsICIoTGphdmEvbGFuZy9PYmplY3Q7KVoiLCBib29sZWFuX3R5
cGUpLnopOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgYnl0ZV90eXBlOgorICAgIGNhc2Ug
Y2hhcl90eXBlOgorICAgIGNhc2Ugc2hvcnRfdHlwZToKKworICAgIGNhc2UgaW50X3R5cGU6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGppbnQgdmFsdWU7CisgICAgICAgICAgICBqdmFsdWUgcmVz
dWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgImdldEludCIs
ICIoTGphdmEvbGFuZy9PYmplY3Q7KUkiLCBpbnRfdHlwZSk7CisgICAgICAgICAgICB2YWx1ZSA9
IHJlc3VsdC5pOworICAgICAgICAgICAganNyZXN1bHQgPSBqc051bWJlcihzdGF0aWNfY2FzdDxp
bnQ+KHZhbHVlKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGxvbmdf
dHlwZToKKyAgICBjYXNlIGZsb2F0X3R5cGU6CisgICAgY2FzZSBkb3VibGVfdHlwZToKKyAgICAg
ICAgeworICAgICAgICAgICAgamRvdWJsZSB2YWx1ZTsKKyAgICAgICAgICAgIGp2YWx1ZSByZXN1
bHQgPSBkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCAiZ2V0RG91Ymxl
IiwgIihMamF2YS9sYW5nL09iamVjdDspRCIsIGRvdWJsZV90eXBlKTsKKyAgICAgICAgICAgIHZh
bHVlID0gcmVzdWx0Lmk7CisgICAgICAgICAgICBqc3Jlc3VsdCA9IGpzTnVtYmVyKHN0YXRpY19j
YXN0PGRvdWJsZT4odmFsdWUpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBMT0coTGl2ZUNvbm5lY3QsICJKYXZh
RmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlIGdldHRpbmcgJXMgPSAlcyIsIFVTdHJpbmcobmFtZSgp
LmltcGwoKSkudXRmOCgpLmRhdGEoKSwganNyZXN1bHQudG9TdHJpbmcoZXhlYykuYXNjaWkoKS5k
YXRhKCkpOworCisgICAgcmV0dXJuIGpzcmVzdWx0OworfQorCit2b2lkIEphdmFGaWVsZDo6ZGlz
cGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBKYXZhSW5zdGFu
Y2UqIGluc3RhbmNlLCBqdmFsdWUgamF2YVZhbHVlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBj
aGFyKiBzaWcpIGNvbnN0Cit7CisgICAgam9iamVjdCBqaW5zdGFuY2UgPSBpbnN0YW5jZS0+amF2
YUluc3RhbmNlKCk7CisgICAgam9iamVjdCBmaWVsZEpJbnN0YW5jZSA9IG1fZmllbGQtPm1faW5z
dGFuY2U7CisgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKKworICAgIGpjbGFzcyBjbHMg
PSBlbnYtPkdldE9iamVjdENsYXNzKGZpZWxkSkluc3RhbmNlKTsKKyAgICBpZiAoY2xzKSB7Cisg
ICAgICAgIGptZXRob2RJRCBtaWQgPSBlbnYtPkdldE1ldGhvZElEKGNscywgbmFtZSwgc2lnKTsK
KyAgICAgICAgaWYgKG1pZCkgeworICAgICAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9
IGluc3RhbmNlLT5yb290T2JqZWN0KCk7CisgICAgICAgICAgICBpZiAocm9vdE9iamVjdCAmJiBy
b290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgZXhj
ZXB0aW9uRGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAganZhbHVlIGFyZ3NbMl07CisgICAg
ICAgICAgICAgICAganZhbHVlIHJlc3VsdDsKKworICAgICAgICAgICAgICAgIGFyZ3NbMF0ubCA9
IGppbnN0YW5jZTsKKyAgICAgICAgICAgICAgICBhcmdzWzFdID0gamF2YVZhbHVlOworICAgICAg
ICAgICAgICAgIGRpc3BhdGNoSk5JQ2FsbChleGVjLCByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUo
KSwgZmllbGRKSW5zdGFuY2UsIGZhbHNlLCB2b2lkX3R5cGUsIG1pZCwgYXJncywgcmVzdWx0LCAw
LCBleGNlcHRpb25EZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRl
c2NyaXB0aW9uKQorICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVy
cm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSmF2YUZpZWxkOjpzZXRWYWx1ZVRv
SW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaSwgSlNWYWx1ZSBhVmFs
dWUpIGNvbnN0Cit7CisgICAgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSA9IHN0YXRpY19j
YXN0PGNvbnN0IEphdmFJbnN0YW5jZSo+KGkpOworICAgIGp2YWx1ZSBqYXZhVmFsdWUgPSBjb252
ZXJ0VmFsdWVUb0pWYWx1ZShleGVjLCBpLT5yb290T2JqZWN0KCksIGFWYWx1ZSwgbV9KTklUeXBl
LCB0eXBlKCkpOworCisgICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUZpZWxkOjpzZXRWYWx1ZVRv
SW5zdGFuY2Ugc2V0dGluZyB2YWx1ZSAlcyB0byAlcyIsIFVTdHJpbmcobmFtZSgpLmltcGwoKSku
dXRmOCgpLmRhdGEoKSwgYVZhbHVlLnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkuZGF0YSgpKTsKKwor
ICAgIHN3aXRjaCAobV9KTklUeXBlKSB7CisgICAgY2FzZSBhcnJheV90eXBlOgorICAgIGNhc2Ug
b2JqZWN0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0lu
c3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXQiLCAiKExqYXZhL2xhbmcvT2Jq
ZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIGJvb2xlYW5fdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgZGlzcGF0Y2hT
ZXRWYWx1ZVRvSW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNldEJvb2xlYW4i
LCAiKExqYXZhL2xhbmcvT2JqZWN0O1opViIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBieXRlX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3BhdGNoU2V0
VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRCeXRlIiwgIihM
amF2YS9sYW5nL09iamVjdDtCKVYiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAg
IGNhc2UgY2hhcl90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVl
VG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0Q2hhciIsICIoTGphdmEv
bGFuZy9PYmplY3Q7QylWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IHNob3J0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0lu
c3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRTaG9ydCIsICIoTGphdmEvbGFu
Zy9PYmplY3Q7UylWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGlu
dF90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5j
ZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0SW50IiwgIihMamF2YS9sYW5nL09iamVj
dDtJKVYiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgbG9uZ190eXBl
OgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVj
LCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0TG9uZyIsICIoTGphdmEvbGFuZy9PYmplY3Q7SilW
Iik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGZsb2F0X3R5cGU6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGlu
c3RhbmNlLCBqYXZhVmFsdWUsICJzZXRGbG9hdCIsICIoTGphdmEvbGFuZy9PYmplY3Q7RilWIik7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGRvdWJsZV90eXBlOgorICAg
ICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0
YW5jZSwgamF2YVZhbHVlLCAic2V0RG91YmxlIiwgIihMamF2YS9sYW5nL09iamVjdDtEKVYiKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhRmllbGRKU0MuaCBiL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvanNjL0phdmFGaWVsZEpTQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmE2NzI2NGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvam5pL2pzYy9KYXZhRmllbGRKU0MuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVu
IFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKYXZhRmllbGRKU0NfaAorI2RlZmluZSBK
YXZhRmllbGRKU0NfaAorCisjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQorCisjaW5jbHVkZSAiQnJp
ZGdlSlNDLmgiCisjaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgorI2luY2x1ZGUgIkphdmFNZXRob2Qu
aCIKKyNpbmNsdWRlICJKYXZhU3RyaW5nLmgiCisjaW5jbHVkZSAiSm9iamVjdFdyYXBwZXIuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBCaW5kaW5ncyB7CisKK2NsYXNzIEphdmFG
aWVsZCA6IHB1YmxpYyBGaWVsZCB7CitwdWJsaWM6CisgICAgSmF2YUZpZWxkKEpOSUVudiosIGpv
YmplY3QgYUZpZWxkKTsKKworICAgIHZpcnR1YWwgSlNWYWx1ZSB2YWx1ZUZyb21JbnN0YW5jZShF
eGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRW
YWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKSBjb25z
dDsKKworICAgIGNvbnN0IEphdmFTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7
IH0KKyAgICB2aXJ0dWFsIFJ1bnRpbWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGUu
dXRmOCgpOyB9CisKKyAgICBKTklUeXBlIGdldEpOSVR5cGUoKSBjb25zdCB7IHJldHVybiBtX0pO
SVR5cGU7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNl
KEV4ZWNTdGF0ZSosIGNvbnN0IEphdmFJbnN0YW5jZSosIGp2YWx1ZSwgY29uc3QgY2hhciogbmFt
ZSwgY29uc3QgY2hhciogc2lnKSBjb25zdDsKKyAgICBqdmFsdWUgZGlzcGF0Y2hWYWx1ZUZyb21J
bnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBKYXZhSW5zdGFuY2UqLCBjb25zdCBjaGFyKiBuYW1l
LCBjb25zdCBjaGFyKiBzaWcsIEpOSVR5cGUgcmV0dXJuVHlwZSkgY29uc3Q7CisKKyAgICBKYXZh
U3RyaW5nIG1fbmFtZTsKKyAgICBKYXZhU3RyaW5nIG1fdHlwZTsKKyAgICBKTklUeXBlIG1fSk5J
VHlwZTsKKyAgICBSZWZQdHI8Sm9iamVjdFdyYXBwZXI+IG1fZmllbGQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBCaW5kaW5ncworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShKQVZBX0JSSURHRSkKKworI2VuZGlmIC8vIEphdmFGaWVsZEpTQ19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwIGIvU291cmNl
L1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAppbmRleCBkZjcyMGFk
Li45ZDlhNDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZh
SW5zdGFuY2VKU0MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJ
bnN0YW5jZUpTQy5jcHAKQEAgLTI5LDExICsyOSwxMyBAQAogI2lmIEVOQUJMRShKQVZBX0JSSURH
RSkKIAogI2luY2x1ZGUgIkphdmFSdW50aW1lT2JqZWN0LmgiCi0jaW5jbHVkZSAiSk5JQnJpZGdl
SlNDLmgiCiAjaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgogI2luY2x1ZGUgIkpOSVV0aWxpdHlQcml2
YXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSmF2YUFycmF5SlND
LmgiCiAjaW5jbHVkZSAiSmF2YUNsYXNzSlNDLmgiCisjaW5jbHVkZSAiSmF2YU1ldGhvZC5oIgor
I2luY2x1ZGUgIkphdmFTdHJpbmcuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
am5pX2pzb2JqZWN0LmgiCiAjaW5jbHVkZSAicnVudGltZV9tZXRob2QuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84954</attachid>
            <date>2011-03-07 10:17:46 -0800</date>
            <delta_ts>2011-03-07 10:21:25 -0800</delta_ts>
            <desc>Patch 2</desc>
            <filename>splitJniBridgeJSC.txt</filename>
            <type>text/plain</type>
            <size>55512</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">Y29tbWl0IDU1ZDAyNzZmMWQxZWQyODZmMjQwOGFhZWQ4YzdlNDg1Y2RhZjJkZDYKQXV0aG9yOiBT
dGV2ZSBCbG9jayA8c3RldmVibG9ja0Bnb29nbGUuY29tPgpEYXRlOiAgIE1vbiBNYXIgNyAxNzox
NToxMSAyMDExICswMDAwCgogICAgU3BsaXQgdXAgSk5JQnJpZGdlSlNDCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tayBiL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQuanNjYmluZGluZ3MubWsKaW5kZXggOWEyZTE3Zi4uNGZmODg0YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5taworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9BbmRyb2lkLmpzY2JpbmRpbmdzLm1rCkBAIC0yMDEsOSArMjAxLDEwIEBAIExPQ0FMX1NSQ19G
SUxFUyArPSBcCiAJYnJpZGdlL2puaS9KTklVdGlsaXR5LmNwcCBcCiAJYnJpZGdlL2puaS9KYXZh
TWV0aG9kLmNwcCBcCiAJYnJpZGdlL2puaS9Kb2JqZWN0V3JhcHBlci5jcHAgXAotCWJyaWRnZS9q
bmkvanNjL0pOSUJyaWRnZUpTQy5jcHAgXAogCWJyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2
YXRlLmNwcCBcCisJYnJpZGdlL2puaS9qc2MvSmF2YUFycmF5SlNDLmNwcCBcCiAJYnJpZGdlL2pu
aS9qc2MvSmF2YUNsYXNzSlNDLmNwcCBcCisJYnJpZGdlL2puaS9qc2MvSmF2YUZpZWxkSlNDLmNw
cCBcCiAJYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcCBcCiAJYnJpZGdlL2pzYy9C
cmlkZ2VKU0MuY3BwIFwKIAlicmlkZ2UvbnBydW50aW1lLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGMw
NzljMS4uMDg5Y2U4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI0IEBACiAyMDExLTAzLTA3ICBT
dGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdCBKTklCcmlkZ2VKU0MuY3BwL2ggaW50
byBKYXZhQXJyYXlKU0MuY3BwL2ggYW5kIEphdmFGaWVsZEpTQy5jcHAvaAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU4ODEKKworICAgICAgICBObyBu
ZXcgdGVzdHMsIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBBbmRyb2lkLmpzY2JpbmRp
bmdzLm1rOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KTklCcmlk
Z2VKU0MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0pOSUJyaWRnZUpT
Qy5oOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRl
LmNwcDoKKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwOgorICAgICAg
ICAqIGJyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5oOgorICAgICAgICAqIGJyaWRnZS9qbmkv
anNjL0phdmFJbnN0YW5jZUpTQy5jcHA6CisKKzIwMTEtMDMtMDcgIFN0ZXZlIEJsb2NrICA8c3Rl
dmVibG9ja0Bnb29nbGUuY29tPgorCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVteSBPcmxvdy4K
IAogICAgICAgICBTcGxpdCBKTklCcmlkZ2UuY3BwL2ggaW50byBKYXZhU3RyaW5nLmggYW5kIEph
dmFNZXRob2QuY3BwL2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYzE4ZTdiMS4uNDk5M2JiYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTk0MSw5ICs5NDEsMTAgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL0phdmFNZXRob2QuaCBcCiAJU291cmNl
L1dlYkNvcmUvYnJpZGdlL2puaS9KYXZhU3RyaW5nLmggXAogCVNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9qbmkvam5pX2pzb2JqZWN0LmggXAorCVNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0ph
dmFBcnJheUpTQy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NK
U0MuaCBcCisJU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUZpZWxkSlNDLmggXAog
CVNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklCcmlkZ2VKU0MuaCBcCiAJU291cmNlL1dlYkNv
cmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNj
L0JyaWRnZUpTQy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9icmlkZ2UvbnBhcGkuaCBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOWI4
MmUyNC4uNDAzYTYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTM4NCw2ICsxMzg0LDEwIEBACiAJCTU5NjIyOTdBMTEzM0VG
RTIwMERDNENCQiAvKiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5NjIyOTc5MTEzM0VGRTIwMERDNENCQiAv
KiBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1OTY5NTA4MjEzMjEwNTk5MDBDM0VEMTggLyogSm9iamVj
dFdyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU5Njk1MDgxMTMyMTA1OTkwMEMzRUQxOCAvKiBKb2JqZWN0V3JhcHBlci5oICovOyB9OwogCQk1
OTY5NTA4NDEzMjEwNUE1MDBDM0VEMTggLyogSm9iamVjdFdyYXBwZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk2OTUwODMxMzIxMDVBNTAwQzNF
RDE4IC8qIEpvYmplY3RXcmFwcGVyLmNwcCAqLzsgfTsKKwkJNTk4RDc3REQxMzI1NDFFRTAwNzYx
QjIyIC8qIEphdmFBcnJheUpTQy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1OThENzdEQzEzMjU0MUVFMDA3NjFCMjIgLyogSmF2YUFycmF5SlNDLmNw
cCAqLzsgfTsKKwkJNTk4RDc3REYxMzI1NDFGQTAwNzYxQjIyIC8qIEphdmFBcnJheUpTQy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk4RDc3REUxMzI1
NDFGQTAwNzYxQjIyIC8qIEphdmFBcnJheUpTQy5oICovOyB9OworCQk1OThENzdFMTEzMjU0MjA0
MDA3NjFCMjIgLyogSmF2YUZpZWxkSlNDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU5OEQ3N0UwMTMyNTQyMDQwMDc2MUIyMiAvKiBKYXZhRmllbGRK
U0MuY3BwICovOyB9OworCQk1OThENzdFMzEzMjU0MjBFMDA3NjFCMjIgLyogSmF2YUZpZWxkSlND
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OThENzdF
MjEzMjU0MjBFMDA3NjFCMjIgLyogSmF2YUZpZWxkSlNDLmggKi87IH07CiAJCTU5OUU3NTkwMTEw
NTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU5OUU3NThGMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1OUE4NUVBMjEx
OUQ2OEQ5MDBERUYxRUYgLyogRGV2aWNlT3JpZW50YXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OUE4NUVBMTExOUQ2OEQ5MDBERUYx
RUYgLyogRGV2aWNlT3JpZW50YXRpb25FdmVudC5jcHAgKi87IH07CiAJCTU5QTg1RUE0MTE5RDY4
RUMwMERFRjFFRiAvKiBEZXZpY2VPcmllbnRhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OUE4NUVBMzExOUQ2OEVDMDBERUYxRUYgLyog
RGV2aWNlT3JpZW50YXRpb25FdmVudC5oICovOyB9OwpAQCAtMTQwMCw4ICsxNDA0LDYgQEAKIAkJ
NTlEMUMxMDQxMUVCNURDRjAwQjYzOEM4IC8qIERldmljZU9yaWVudGF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5RDFDMTAzMTFFQjVEQ0Yw
MEI2MzhDOCAvKiBEZXZpY2VPcmllbnRhdGlvbi5jcHAgKi87IH07CiAJCTU5RTU2MEE3MTEwNTMz
NjYwMEFBMTI1OCAvKiBKYXZhQ2xhc3NKU0MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU5RTU2MEE2MTEwNTMzNjYwMEFBMTI1OCAvKiBKYXZhQ2xhc3NK
U0MuaCAqLzsgfTsKIAkJNTlFNTYwQTkxMTA1MzM2RjAwQUExMjU4IC8qIEphdmFDbGFzc0pTQy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OUU1NjBB
ODExMDUzMzZGMDBBQTEyNTggLyogSmF2YUNsYXNzSlNDLmNwcCAqLzsgfTsKLQkJNTlFODQyNjYx
MTA5RTVBMjAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlFODQyNjUxMTA5RTVBMjAwMDMwNUFEIC8qIEpOSUJy
aWRnZUpTQy5oICovOyB9OwotCQk1OUU4NDI2ODExMDlFNUFFMDAwMzA1QUQgLyogSk5JQnJpZGdl
SlNDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5
RTg0MjY3MTEwOUU1QUUwMDAzMDVBRCAvKiBKTklCcmlkZ2VKU0MuY3BwICovOyB9OwogCQk1OUVF
MTIyQzExMDYwODA1MDA4ODUxMTYgLyogSk5JVXRpbGl0eVByaXZhdGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlFRTEyMkIxMTA2MDgwNTAwODg1
MTE2IC8qIEpOSVV0aWxpdHlQcml2YXRlLmNwcCAqLzsgfTsKIAkJNTlFRTEyMkUxMTA2MDgwRjAw
ODg1MTE2IC8qIEpOSVV0aWxpdHlQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1OUVFMTIyRDExMDYwODBGMDA4ODUxMTYgLyogSk5JVXRpbGl0
eVByaXZhdGUuaCAqLzsgfTsKIAkJNTlFRTEyMzAxMTA2MDgxRjAwODg1MTE2IC8qIEpOSVV0aWxp
dHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlF
RTEyMkYxMTA2MDgxRjAwODg1MTE2IC8qIEpOSVV0aWxpdHkuY3BwICovOyB9OwpAQCAtNzg1Myw2
ICs3ODU1LDEwIEBACiAJCTU5Njk1MDgxMTMyMTA1OTkwMEMzRUQxOCAvKiBKb2JqZWN0V3JhcHBl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKb2JqZWN0V3JhcHBlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OTY5NTA4MzEzMjEwNUE1MDBDM0VEMTggLyog
Sm9iamVjdFdyYXBwZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Sm9iamVjdFdyYXBwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OTgwQjAz
MzEyRUYzRDg0MDBERjVGODUgLyogWE1MVmlld2VyLnhzbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBw
YXRoID0gWE1MVmlld2VyLnhzbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTk4RDc3
REMxMzI1NDFFRTAwNzYxQjIyIC8qIEphdmFBcnJheUpTQy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBKYXZhQXJyYXlKU0MuY3BwOyBwYXRoID0ganNjL0phdmFBcnJh
eUpTQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU5OEQ3N0RFMTMyNTQxRkEw
MDc2MUIyMiAvKiBKYXZhQXJyYXlKU0MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gSmF2YUFycmF5SlNDLmg7IHBhdGggPSBqc2MvSmF2YUFycmF5SlNDLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTU5OEQ3N0UwMTMyNTQyMDQwMDc2MUIyMiAvKiBKYXZhRmllbGRK
U0MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSmF2YUZpZWxkSlND
LmNwcDsgcGF0aCA9IGpzYy9KYXZhRmllbGRKU0MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1OThENzdFMjEzMjU0MjBFMDA3NjFCMjIgLyogSmF2YUZpZWxkSlNDLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEphdmFGaWVsZEpTQy5oOyBwYXRoID0ganNjL0ph
dmFGaWVsZEpTQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OTlFNzU4RjExMDU1
QTFGMDBEOTA0RkEgLyogQnJpZGdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEJyaWRnZS5oOyBwYXRoID0gYnJpZGdlL0JyaWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1OUE4NUVBMTExOUQ2OEQ5MDBERUYxRUYgLyogRGV2aWNlT3JpZW50YXRpb25FdmVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXZpY2VPcmllbnRh
dGlvbkV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTlBODVFQTMxMTlE
NjhFQzAwREVGMUVGIC8qIERldmljZU9yaWVudGF0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGV2aWNlT3JpZW50YXRpb25FdmVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNzg3MCw4ICs3ODc2LDYgQEAKIAkJNTlEMUMxMDMxMUVCNURDRjAw
QjYzOEM4IC8qIERldmljZU9yaWVudGF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IERldmljZU9yaWVudGF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTlFNTYwQTYxMTA1MzM2NjAwQUExMjU4IC8qIEphdmFDbGFzc0pTQy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKYXZhQ2xhc3NKU0MuaDsgcGF0aCA9IGpzYy9K
YXZhQ2xhc3NKU0MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTlFNTYwQTgxMTA1
MzM2RjAwQUExMjU4IC8qIEphdmFDbGFzc0pTQy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBKYXZhQ2xhc3NKU0MuY3BwOyBwYXRoID0ganNjL0phdmFDbGFzc0pTQy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU5RTg0MjY1MTEwOUU1QTIwMDAzMDVB
RCAvKiBKTklCcmlkZ2VKU0MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSk5J
QnJpZGdlSlNDLmg7IHBhdGggPSBqc2MvSk5JQnJpZGdlSlNDLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTU5RTg0MjY3MTEwOUU1QUUwMDAzMDVBRCAvKiBKTklCcmlkZ2VKU0MuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSk5JQnJpZGdlSlNDLmNwcDsg
cGF0aCA9IGpzYy9KTklCcmlkZ2VKU0MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1OUVFMTIyQjExMDYwODA1MDA4ODUxMTYgLyogSk5JVXRpbGl0eVByaXZhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSk5JVXRpbGl0eVByaXZhdGUuY3BwOyBw
YXRoID0ganNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTlFRTEyMkQxMTA2MDgwRjAwODg1MTE2IC8qIEpOSVV0aWxpdHlQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpOSVV0aWxpdHlQcml2YXRlLmg7IHBhdGgg
PSBqc2MvSk5JVXRpbGl0eVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTlFRTEyMkYxMTA2MDgxRjAwODg1MTE2IC8qIEpOSVV0aWxpdHkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSk5JVXRpbGl0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMzcwNyw2ICsxMzcxMSwxMCBAQAogCQk1OTlEMUUyRjEwQzk3RDRDMDBF
MEVGMTIgLyoganNjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk1OThENzdFMjEzMjU0MjBFMDA3NjFCMjIgLyogSmF2YUZpZWxkSlNDLmggKi8sCisJCQkJ
NTk4RDc3RTAxMzI1NDIwNDAwNzYxQjIyIC8qIEphdmFGaWVsZEpTQy5jcHAgKi8sCisJCQkJNTk4
RDc3REUxMzI1NDFGQTAwNzYxQjIyIC8qIEphdmFBcnJheUpTQy5oICovLAorCQkJCTU5OEQ3N0RD
MTMyNTQxRUUwMDc2MUIyMiAvKiBKYXZhQXJyYXlKU0MuY3BwICovLAogCQkJCTU5RTU2MEE4MTEw
NTMzNkYwMEFBMTI1OCAvKiBKYXZhQ2xhc3NKU0MuY3BwICovLAogCQkJCTU5RTU2MEE2MTEwNTMz
NjYwMEFBMTI1OCAvKiBKYXZhQ2xhc3NKU0MuaCAqLywKIAkJCQk1OUE5RTdBRjExMDQ3NTg4MDBE
RkI0QzEgLyogSmF2YUluc3RhbmNlSlNDLmNwcCAqLywKQEAgLTEzNzE0LDggKzEzNzIyLDYgQEAK
IAkJCQlFMTY5ODI2MzExMzQ2N0YzMDA4OTQxMTUgLyogSmF2YVJ1bnRpbWVPYmplY3QuY3BwICov
LAogCQkJCUUxNjk4MjY3MTEzNDY4MDcwMDg5NDExNSAvKiBKYXZhUnVudGltZU9iamVjdC5oICov
LAogCQkJCTU5QkMzOTNFMTEwNTRBMTMwMEZEODVEQiAvKiBKYXZhU3RyaW5nSlNDLmggKi8sCi0J
CQkJNTlFODQyNjcxMTA5RTVBRTAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5jcHAgKi8sCi0JCQkJ
NTlFODQyNjUxMTA5RTVBMjAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5oICovLAogCQkJCTU5RUUx
MjJCMTEwNjA4MDUwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5jcHAgKi8sCiAJCQkJNTlF
RTEyMkQxMTA2MDgwRjAwODg1MTE2IC8qIEpOSVV0aWxpdHlQcml2YXRlLmggKi8sCiAJCQkpOwpA
QCAtMjEwMjgsNyArMjEwMzQsNiBAQAogCQkJCTFDODFCQTBBMEU5NzM0ODMwMDI2NkUwNyAvKiBK
YXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OUJDMzkzRjExMDU0QTEz
MDBGRDg1REIgLyogSmF2YVN0cmluZ0pTQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMDQw
RDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTlF
ODQyNjYxMTA5RTVBMjAwMDMwNUFEIC8qIEpOSUJyaWRnZUpTQy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTlFRTEyMzIxMTA2MDgyOTAwODg1MTE2IC8qIEpOSVV0aWxpdHkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTU5RUUxMjJFMTEwNjA4MEYwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERjQwOTlFNjQ5MjAwNTZFNTgxIC8qIEpvaW5UZXh0Tm9k
ZXNDb21tYW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNTM3LDYgKzIyNTQyLDggQEAKIAkJCQk1
OTY5NTA4MjEzMjEwNTk5MDBDM0VEMTggLyogSm9iamVjdFdyYXBwZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTU5M0QzRUFGMTMyNTMyOEMwMDU3RTdFRSAvKiBKYXZhTWV0aG9kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1OTNEM0VCMTEzMjUzMjk1MDA1N0U3RUUgLyogSmF2YVN0cmluZy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTk4RDc3REYxMzI1NDFGQTAwNzYxQjIyIC8qIEphdmFBcnJheUpTQy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTk4RDc3RTMxMzI1NDIwRTAwNzYxQjIyIC8qIEphdmFGaWVs
ZEpTQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMzc3Nyw3ICsyMzc4NCw2IEBACiAJCQkJMUM4MUJB
MDkwRTk3MzQ4MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUE1NjlEMDMwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVjdC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTFBNTY5RDA1MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfb2JqYy5tbSBp
biBTb3VyY2VzICovLAotCQkJCTU5RTg0MjY4MTEwOUU1QUUwMDAzMDVBRCAvKiBKTklCcmlkZ2VK
U0MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTlFRTEyMzAxMTA2MDgxRjAwODg1MTE2IC8qIEpO
SVV0aWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTlFRTEyMkMxMTA2MDgwNTAwODg1MTE2
IC8qIEpOSVV0aWxpdHlQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REYzMDk5
RTY0OTIwMDU2RTU4MSAvKiBKb2luVGV4dE5vZGVzQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTI1MTg4LDYgKzI1MTk0LDggQEAKIAkJCQk1QTU3NEYyODEzMURCOTZEMDA0NzFCODggLyog
UXVvdGVzRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1OTY5NTA4NDEzMjEwNUE1MDBDM0VE
MTggLyogSm9iamVjdFdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTkzRDNFQUQxMzI1
MzI4NDAwNTdFN0VFIC8qIEphdmFNZXRob2QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTk4RDc3
REQxMzI1NDFFRTAwNzYxQjIyIC8qIEphdmFBcnJheUpTQy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk1OThENzdFMTEzMjU0MjA0MDA3NjFCMjIgLyogSmF2YUZpZWxkSlNDLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JQnJpZGdl
SlNDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSUJyaWRnZUpTQy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNDViNWEuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JQnJpZGdlSlNDLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQ0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkpOSUJyaWRnZUpTQy5oIgotCi0jaWYgRU5BQkxFKEpBVkFf
QlJJREdFKQotCi0jaW5jbHVkZSAiSk5JVXRpbGl0eVByaXZhdGUuaCIKLSNpbmNsdWRlICJKb2Jq
ZWN0V3JhcHBlci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJydW50aW1lX2Fy
cmF5LmgiCi0jaW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKLSNpbmNsdWRlIDxydW50aW1lL0Vy
cm9yLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci11c2luZyBuYW1lc3BhY2UgSlNDOjpCaW5k
aW5nczsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1KYXZhRmllbGQ6OkphdmFGaWVsZChK
TklFbnYqIGVudiwgam9iamVjdCBhRmllbGQpCi17Ci0gICAgLy8gR2V0IGZpZWxkIHR5cGUgbmFt
ZQotICAgIGpzdHJpbmcgZmllbGRUeXBlTmFtZSA9IDA7Ci0gICAgaWYgKGpvYmplY3QgZmllbGRU
eXBlID0gY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhRmllbGQsICJnZXRUeXBlIiwgIigpTGphdmEv
bGFuZy9DbGFzczsiKSkKLSAgICAgICAgZmllbGRUeXBlTmFtZSA9IHN0YXRpY19jYXN0PGpzdHJp
bmc+KGNhbGxKTklNZXRob2Q8am9iamVjdD4oZmllbGRUeXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZh
L2xhbmcvU3RyaW5nOyIpKTsKLSAgICBpZiAoIWZpZWxkVHlwZU5hbWUpCi0gICAgICAgIGZpZWxk
VHlwZU5hbWUgPSBlbnYtPk5ld1N0cmluZ1VURigiPFVua25vd24+Iik7Ci0gICAgbV90eXBlID0g
SmF2YVN0cmluZyhlbnYsIGZpZWxkVHlwZU5hbWUpOwotCi0gICAgbV9KTklUeXBlID0gSk5JVHlw
ZUZyb21DbGFzc05hbWUobV90eXBlLnV0ZjgoKSk7Ci0KLSAgICAvLyBHZXQgZmllbGQgbmFtZQot
ICAgIGpzdHJpbmcgZmllbGROYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4oY2FsbEpOSU1ldGhv
ZDxqb2JqZWN0PihhRmllbGQsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IikpOwot
ICAgIGlmICghZmllbGROYW1lKQotICAgICAgICBmaWVsZE5hbWUgPSBlbnYtPk5ld1N0cmluZ1VU
RigiPFVua25vd24+Iik7Ci0gICAgbV9uYW1lID0gSmF2YVN0cmluZyhlbnYsIGZpZWxkTmFtZSk7
Ci0KLSAgICBtX2ZpZWxkID0gbmV3IEpvYmplY3RXcmFwcGVyKGFGaWVsZCk7Ci19Ci0KLUpTVmFs
dWUgSmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBqb2Jq
ZWN0IGFuT2JqZWN0LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJv
b3RPYmplY3QpCi17Ci0gICAgaWYgKHR5cGVbMF0gIT0gJ1snKQotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLQotICAgIHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVBcnJheShleGVjLCBu
ZXcgSmF2YUFycmF5KGFuT2JqZWN0LCB0eXBlLCByb290T2JqZWN0KSk7Ci19Ci0KLWp2YWx1ZSBK
YXZhRmllbGQ6OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBKYXZhSW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBz
aWcsIEpOSVR5cGUgcmV0dXJuVHlwZSkgY29uc3QKLXsKLSAgICBqb2JqZWN0IGppbnN0YW5jZSA9
IGluc3RhbmNlLT5qYXZhSW5zdGFuY2UoKTsKLSAgICBqb2JqZWN0IGZpZWxkSkluc3RhbmNlID0g
bV9maWVsZC0+bV9pbnN0YW5jZTsKLSAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOwotICAg
IGp2YWx1ZSByZXN1bHQ7Ci0KLSAgICBtZW1zZXQoJnJlc3VsdCwgMCwgc2l6ZW9mKGp2YWx1ZSkp
OwotICAgIGpjbGFzcyBjbHMgPSBlbnYtPkdldE9iamVjdENsYXNzKGZpZWxkSkluc3RhbmNlKTsK
LSAgICBpZiAoY2xzKSB7Ci0gICAgICAgIGptZXRob2RJRCBtaWQgPSBlbnYtPkdldE1ldGhvZElE
KGNscywgbmFtZSwgc2lnKTsKLSAgICAgICAgaWYgKG1pZCkgewotICAgICAgICAgICAgUm9vdE9i
amVjdCogcm9vdE9iamVjdCA9IGluc3RhbmNlLT5yb290T2JqZWN0KCk7Ci0gICAgICAgICAgICBp
ZiAocm9vdE9iamVjdCAmJiByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkgewotICAgICAgICAg
ICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uRGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAganZh
bHVlIGFyZ3NbMV07Ci0KLSAgICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7Ci0g
ICAgICAgICAgICAgICAgZGlzcGF0Y2hKTklDYWxsKGV4ZWMsIHJvb3RPYmplY3QtPm5hdGl2ZUhh
bmRsZSgpLCBmaWVsZEpJbnN0YW5jZSwgZmFsc2UsIHJldHVyblR5cGUsIG1pZCwgYXJncywgcmVz
dWx0LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICAgICAgaWYgKGV4Y2Vw
dGlvbkRlc2NyaXB0aW9uKQotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNy
ZWF0ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
SlNWYWx1ZSBKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSW5zdGFuY2UqIGkpIGNvbnN0Ci17Ci0gICAgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5j
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSo+KGkpOwotCi0gICAgSlNWYWx1ZSBq
c3Jlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBzd2l0Y2ggKG1fSk5JVHlwZSkgewotICAg
IGNhc2UgYXJyYXlfdHlwZToKLSAgICBjYXNlIG9iamVjdF90eXBlOgotICAgICAgICB7Ci0gICAg
ICAgICAgICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShleGVjLCBp
bnN0YW5jZSwgImdldCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIs
IG9iamVjdF90eXBlKTsKLSAgICAgICAgICAgIGpvYmplY3QgYW5PYmplY3QgPSByZXN1bHQubDsK
LQotICAgICAgICAgICAgaWYgKCFhbk9iamVjdCkKLSAgICAgICAgICAgICAgICByZXR1cm4ganNO
dWxsKCk7Ci0KLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFycmF5VHlwZSA9IHR5cGUoKTsKLSAg
ICAgICAgICAgIGlmIChhcnJheVR5cGVbMF0gPT0gJ1snKQotICAgICAgICAgICAgICAgIGpzcmVz
dWx0ID0gSmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywgYW5PYmplY3QsIGFy
cmF5VHlwZSwgaW5zdGFuY2UtPnJvb3RPYmplY3QoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChh
bk9iamVjdCkKLSAgICAgICAgICAgICAgICBqc3Jlc3VsdCA9IEphdmFJbnN0YW5jZTo6Y3JlYXRl
KGFuT2JqZWN0LCBpbnN0YW5jZS0+cm9vdE9iamVjdCgpKS0+Y3JlYXRlUnVudGltZU9iamVjdChl
eGVjKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgYm9vbGVhbl90eXBl
OgotICAgICAgICBqc3Jlc3VsdCA9IGpzQm9vbGVhbihkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNl
KGV4ZWMsIGluc3RhbmNlLCAiZ2V0Qm9vbGVhbiIsICIoTGphdmEvbGFuZy9PYmplY3Q7KVoiLCBi
b29sZWFuX3R5cGUpLnopOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgYnl0ZV90eXBlOgot
ICAgIGNhc2UgY2hhcl90eXBlOgotICAgIGNhc2Ugc2hvcnRfdHlwZToKLQotICAgIGNhc2UgaW50
X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGppbnQgdmFsdWU7Ci0gICAgICAgICAgICBq
dmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwg
ImdldEludCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUkiLCBpbnRfdHlwZSk7Ci0gICAgICAgICAg
ICB2YWx1ZSA9IHJlc3VsdC5pOwotICAgICAgICAgICAganNyZXN1bHQgPSBqc051bWJlcihzdGF0
aWNfY2FzdDxpbnQ+KHZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIGxvbmdfdHlwZToKLSAgICBjYXNlIGZsb2F0X3R5cGU6Ci0gICAgY2FzZSBkb3VibGVfdHlw
ZToKLSAgICAgICAgewotICAgICAgICAgICAgamRvdWJsZSB2YWx1ZTsKLSAgICAgICAgICAgIGp2
YWx1ZSByZXN1bHQgPSBkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCAi
Z2V0RG91YmxlIiwgIihMamF2YS9sYW5nL09iamVjdDspRCIsIGRvdWJsZV90eXBlKTsKLSAgICAg
ICAgICAgIHZhbHVlID0gcmVzdWx0Lmk7Ci0gICAgICAgICAgICBqc3Jlc3VsdCA9IGpzTnVtYmVy
KHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBMT0coTGl2ZUNvbm5l
Y3QsICJKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlIGdldHRpbmcgJXMgPSAlcyIsIFVTdHJp
bmcobmFtZSgpLmltcGwoKSkudXRmOCgpLmRhdGEoKSwganNyZXN1bHQudG9TdHJpbmcoZXhlYyku
YXNjaWkoKS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIGpzcmVzdWx0OwotfQotCi12b2lkIEphdmFG
aWVsZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBK
YXZhSW5zdGFuY2UqIGluc3RhbmNlLCBqdmFsdWUgamF2YVZhbHVlLCBjb25zdCBjaGFyKiBuYW1l
LCBjb25zdCBjaGFyKiBzaWcpIGNvbnN0Ci17Ci0gICAgam9iamVjdCBqaW5zdGFuY2UgPSBpbnN0
YW5jZS0+amF2YUluc3RhbmNlKCk7Ci0gICAgam9iamVjdCBmaWVsZEpJbnN0YW5jZSA9IG1fZmll
bGQtPm1faW5zdGFuY2U7Ci0gICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKLQotICAgIGpj
bGFzcyBjbHMgPSBlbnYtPkdldE9iamVjdENsYXNzKGZpZWxkSkluc3RhbmNlKTsKLSAgICBpZiAo
Y2xzKSB7Ci0gICAgICAgIGptZXRob2RJRCBtaWQgPSBlbnYtPkdldE1ldGhvZElEKGNscywgbmFt
ZSwgc2lnKTsKLSAgICAgICAgaWYgKG1pZCkgewotICAgICAgICAgICAgUm9vdE9iamVjdCogcm9v
dE9iamVjdCA9IGluc3RhbmNlLT5yb290T2JqZWN0KCk7Ci0gICAgICAgICAgICBpZiAocm9vdE9i
amVjdCAmJiByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkgewotICAgICAgICAgICAgICAgIEpT
VmFsdWUgZXhjZXB0aW9uRGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAganZhbHVlIGFyZ3Nb
Ml07Ci0gICAgICAgICAgICAgICAganZhbHVlIHJlc3VsdDsKLQotICAgICAgICAgICAgICAgIGFy
Z3NbMF0ubCA9IGppbnN0YW5jZTsKLSAgICAgICAgICAgICAgICBhcmdzWzFdID0gamF2YVZhbHVl
OwotICAgICAgICAgICAgICAgIGRpc3BhdGNoSk5JQ2FsbChleGVjLCByb290T2JqZWN0LT5uYXRp
dmVIYW5kbGUoKSwgZmllbGRKSW5zdGFuY2UsIGZhbHNlLCB2b2lkX3R5cGUsIG1pZCwgYXJncywg
cmVzdWx0LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7Ci0gICAgICAgICAgICAgICAgaWYgKGV4
Y2VwdGlvbkRlc2NyaXB0aW9uKQotICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMs
IGNyZWF0ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSmF2YUZpZWxkOjpz
ZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaSwgSlNW
YWx1ZSBhVmFsdWUpIGNvbnN0Ci17Ci0gICAgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSA9
IHN0YXRpY19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSo+KGkpOwotICAgIGp2YWx1ZSBqYXZhVmFs
dWUgPSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShleGVjLCBpLT5yb290T2JqZWN0KCksIGFWYWx1ZSwg
bV9KTklUeXBlLCB0eXBlKCkpOwotCi0gICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUZpZWxkOjpz
ZXRWYWx1ZVRvSW5zdGFuY2Ugc2V0dGluZyB2YWx1ZSAlcyB0byAlcyIsIFVTdHJpbmcobmFtZSgp
LmltcGwoKSkudXRmOCgpLmRhdGEoKSwgYVZhbHVlLnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkuZGF0
YSgpKTsKLQotICAgIHN3aXRjaCAobV9KTklUeXBlKSB7Ci0gICAgY2FzZSBhcnJheV90eXBlOgot
ICAgIGNhc2Ugb2JqZWN0X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRpc3BhdGNoU2V0
VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXQiLCAiKExqYXZh
L2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylWIik7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIGJvb2xlYW5fdHlwZToKLSAgICAgICAgewotICAgICAgICAgICAg
ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNl
dEJvb2xlYW4iLCAiKExqYXZhL2xhbmcvT2JqZWN0O1opViIpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgY2FzZSBieXRlX3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRp
c3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRC
eXRlIiwgIihMamF2YS9sYW5nL09iamVjdDtCKVYiKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgY2hhcl90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBkaXNwYXRj
aFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0Q2hhciIs
ICIoTGphdmEvbGFuZy9PYmplY3Q7QylWIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIHNob3J0X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRpc3BhdGNoU2V0
VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRTaG9ydCIsICIo
TGphdmEvbGFuZy9PYmplY3Q7UylWIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICBjYXNlIGludF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVl
VG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0SW50IiwgIihMamF2YS9s
YW5nL09iamVjdDtJKVYiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
bG9uZ190eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0
YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0TG9uZyIsICIoTGphdmEvbGFuZy9P
YmplY3Q7SilWIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGZsb2F0
X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNl
KGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRGbG9hdCIsICIoTGphdmEvbGFuZy9PYmpl
Y3Q7RilWIik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGRvdWJsZV90
eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShl
eGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0RG91YmxlIiwgIihMamF2YS9sYW5nL09iamVj
dDtEKVYiKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLUphdmFBcnJheTo6SmF2YUFycmF5KGpvYmplY3QgYXJyYXks
IGNvbnN0IGNoYXIqIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCkKLSAg
ICA6IEFycmF5KHJvb3RPYmplY3QpCi17Ci0gICAgbV9hcnJheSA9IG5ldyBKb2JqZWN0V3JhcHBl
cihhcnJheSk7Ci0gICAgLy8gSmF2YSBhcnJheSBhcmUgZml4ZWQgbGVuZ3RoLCBzbyB3ZSBjYW4g
Y2FjaGUgbGVuZ3RoLgotICAgIEpOSUVudiogZW52ID0gZ2V0Sk5JRW52KCk7Ci0gICAgbV9sZW5n
dGggPSBlbnYtPkdldEFycmF5TGVuZ3RoKHN0YXRpY19jYXN0PGphcnJheT4obV9hcnJheS0+bV9p
bnN0YW5jZSkpOwotICAgIG1fdHlwZSA9IHN0cmR1cCh0eXBlKTsKLX0KLQotSmF2YUFycmF5Ojp+
SmF2YUFycmF5KCkKLXsKLSAgICBmcmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KG1fdHlwZSkpOwotfQot
Ci1Sb290T2JqZWN0KiBKYXZhQXJyYXk6OnJvb3RPYmplY3QoKSBjb25zdAotewotICAgIHJldHVy
biBtX3Jvb3RPYmplY3QgJiYgbV9yb290T2JqZWN0LT5pc1ZhbGlkKCkgPyBtX3Jvb3RPYmplY3Qu
Z2V0KCkgOiAwOwotfQotCi12b2lkIEphdmFBcnJheTo6c2V0VmFsdWVBdChFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3QKLXsKLSAgICBKTklFbnYq
IGVudiA9IGdldEpOSUVudigpOwotICAgIGNoYXIqIGphdmFDbGFzc05hbWUgPSAwOwotCi0gICAg
Sk5JVHlwZSBhcnJheVR5cGUgPSBKTklUeXBlRnJvbVByaW1pdGl2ZVR5cGUobV90eXBlWzFdKTsK
LSAgICBpZiAobV90eXBlWzFdID09ICdMJykgewotICAgICAgICAvLyBUaGUgdHlwZSBvZiB0aGUg
YXJyYXkgd2lsbCBiZSBzb21ldGhpbmcgbGlrZToKLSAgICAgICAgLy8gIltMamF2YS5sYW5nLnN0
cmluZzsiLiAgVGhpcyBpcyBndWFyYW50ZWVkLCBzbyBubyBuZWVkCi0gICAgICAgIC8vIGZvciBl
eHRyYSBzYW5pdHkgY2hlY2tzLgotICAgICAgICBqYXZhQ2xhc3NOYW1lID0gc3RyZHVwKCZtX3R5
cGVbMl0pOwotICAgICAgICBqYXZhQ2xhc3NOYW1lW3N0cmNocihqYXZhQ2xhc3NOYW1lLCAnOycp
LWphdmFDbGFzc05hbWVdID0gMDsKLSAgICB9Ci0gICAganZhbHVlIGFKVmFsdWUgPSBjb252ZXJ0
VmFsdWVUb0pWYWx1ZShleGVjLCBtX3Jvb3RPYmplY3QuZ2V0KCksIGFWYWx1ZSwgYXJyYXlUeXBl
LCBqYXZhQ2xhc3NOYW1lKTsKLQotICAgIHN3aXRjaCAoYXJyYXlUeXBlKSB7Ci0gICAgY2FzZSBv
YmplY3RfdHlwZToKLSAgICAgICAgewotICAgICAgICAgICAgZW52LT5TZXRPYmplY3RBcnJheUVs
ZW1lbnQoc3RhdGljX2Nhc3Q8am9iamVjdEFycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCBhSlZh
bHVlLmwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgYm9vbGVh
bl90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBlbnYtPlNldEJvb2xlYW5BcnJheVJlZ2lv
bihzdGF0aWNfY2FzdDxqYm9vbGVhbkFycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCAxLCAmYUpW
YWx1ZS56KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBjYXNlIGJ5dGVf
dHlwZToKLSAgICAgICAgewotICAgICAgICAgICAgZW52LT5TZXRCeXRlQXJyYXlSZWdpb24oc3Rh
dGljX2Nhc3Q8amJ5dGVBcnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuYik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgY2FzZSBjaGFyX3R5cGU6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGVudi0+U2V0Q2hhckFycmF5UmVnaW9uKHN0YXRpY19jYXN0
PGpjaGFyQXJyYXk+KGphdmFBcnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmMpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGNhc2Ugc2hvcnRfdHlwZToKLSAgICAgICAg
ewotICAgICAgICAgICAgZW52LT5TZXRTaG9ydEFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpzaG9y
dEFycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCAxLCAmYUpWYWx1ZS5zKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBjYXNlIGludF90eXBlOgotICAgICAgICB7Ci0gICAg
ICAgICAgICBlbnYtPlNldEludEFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGppbnRBcnJheT4oamF2
YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuaSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgY2FzZSBsb25nX3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGVu
di0+U2V0TG9uZ0FycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpsb25nQXJyYXk+KGphdmFBcnJheSgp
KSwgaW5kZXgsIDEsICZhSlZhbHVlLmopOwotICAgICAgICB9Ci0KLSAgICBjYXNlIGZsb2F0X3R5
cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGVudi0+U2V0RmxvYXRBcnJheVJlZ2lvbihzdGF0
aWNfY2FzdDxqZmxvYXRBcnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuZik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgY2FzZSBkb3VibGVfdHlwZToK
LSAgICAgICAgewotICAgICAgICAgICAgZW52LT5TZXREb3VibGVBcnJheVJlZ2lvbihzdGF0aWNf
Y2FzdDxqZG91YmxlQXJyYXk+KGphdmFBcnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBpZiAoamF2YUNsYXNzTmFtZSkKLSAgICAgICAgZnJlZShjb25zdF9j
YXN0PGNoYXIqPihqYXZhQ2xhc3NOYW1lKSk7Ci19Ci0KLQotSlNWYWx1ZSBKYXZhQXJyYXk6OnZh
bHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAgICBKTklF
bnYqIGVudiA9IGdldEpOSUVudigpOwotICAgIEpOSVR5cGUgYXJyYXlUeXBlID0gSk5JVHlwZUZy
b21QcmltaXRpdmVUeXBlKG1fdHlwZVsxXSk7Ci0gICAgc3dpdGNoIChhcnJheVR5cGUpIHsKLSAg
ICBjYXNlIG9iamVjdF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBqb2JqZWN0QXJyYXkg
b2JqZWN0QXJyYXkgPSBzdGF0aWNfY2FzdDxqb2JqZWN0QXJyYXk+KGphdmFBcnJheSgpKTsKLSAg
ICAgICAgICAgIGpvYmplY3QgYW5PYmplY3Q7Ci0gICAgICAgICAgICBhbk9iamVjdCA9IGVudi0+
R2V0T2JqZWN0QXJyYXlFbGVtZW50KG9iamVjdEFycmF5LCBpbmRleCk7Ci0KLSAgICAgICAgICAg
IC8vIE5vIG9iamVjdD8KLSAgICAgICAgICAgIGlmICghYW5PYmplY3QpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwotCi0gICAgICAgICAgICAvLyBOZXN0ZWQgYXJyYXk/Ci0gICAg
ICAgICAgICBpZiAobV90eXBlWzFdID09ICdbJykKLSAgICAgICAgICAgICAgICByZXR1cm4gSmF2
YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywgYW5PYmplY3QsIG1fdHlwZSArIDEs
IHJvb3RPYmplY3QoKSk7Ci0gICAgICAgICAgICAvLyBvciBhcnJheSBvZiBvdGhlciBvYmplY3Qg
dHlwZT8KLSAgICAgICAgICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0ZShhbk9iamVjdCwg
cm9vdE9iamVjdCgpKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKLSAgICAgICAgfQotCi0g
ICAgY2FzZSBib29sZWFuX3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGpib29sZWFuQXJy
YXkgYm9vbGVhbkFycmF5ID0gc3RhdGljX2Nhc3Q8amJvb2xlYW5BcnJheT4oamF2YUFycmF5KCkp
OwotICAgICAgICAgICAgamJvb2xlYW4gYUJvb2xlYW47Ci0gICAgICAgICAgICBlbnYtPkdldEJv
b2xlYW5BcnJheVJlZ2lvbihib29sZWFuQXJyYXksIGluZGV4LCAxLCAmYUJvb2xlYW4pOwotICAg
ICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihhQm9vbGVhbik7Ci0gICAgICAgIH0KLQotICAgIGNh
c2UgYnl0ZV90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBqYnl0ZUFycmF5IGJ5dGVBcnJh
eSA9IHN0YXRpY19jYXN0PGpieXRlQXJyYXk+KGphdmFBcnJheSgpKTsKLSAgICAgICAgICAgIGpi
eXRlIGFCeXRlOwotICAgICAgICAgICAgZW52LT5HZXRCeXRlQXJyYXlSZWdpb24oYnl0ZUFycmF5
LCBpbmRleCwgMSwgJmFCeXRlKTsKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihhQnl0ZSk7
Ci0gICAgICAgIH0KLQotICAgIGNhc2UgY2hhcl90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBqY2hhckFycmF5IGNoYXJBcnJheSA9IHN0YXRpY19jYXN0PGpjaGFyQXJyYXk+KGphdmFBcnJh
eSgpKTsKLSAgICAgICAgICAgIGpjaGFyIGFDaGFyOwotICAgICAgICAgICAgZW52LT5HZXRDaGFy
QXJyYXlSZWdpb24oY2hhckFycmF5LCBpbmRleCwgMSwgJmFDaGFyKTsKLSAgICAgICAgICAgIHJl
dHVybiBqc051bWJlcihhQ2hhcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgY2FzZSBzaG9ydF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBqc2hvcnRBcnJheSBz
aG9ydEFycmF5ID0gc3RhdGljX2Nhc3Q8anNob3J0QXJyYXk+KGphdmFBcnJheSgpKTsKLSAgICAg
ICAgICAgIGpzaG9ydCBhU2hvcnQ7Ci0gICAgICAgICAgICBlbnYtPkdldFNob3J0QXJyYXlSZWdp
b24oc2hvcnRBcnJheSwgaW5kZXgsIDEsICZhU2hvcnQpOwotICAgICAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGFTaG9ydCk7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgaW50X3R5cGU6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGppbnRBcnJheSBpbnRBcnJheSA9IHN0YXRpY19jYXN0PGppbnRBcnJh
eT4oamF2YUFycmF5KCkpOwotICAgICAgICAgICAgamludCBhbkludDsKLSAgICAgICAgICAgIGVu
di0+R2V0SW50QXJyYXlSZWdpb24oaW50QXJyYXksIGluZGV4LCAxLCAmYW5JbnQpOwotICAgICAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGFuSW50KTsKLSAgICAgICAgfQotCi0gICAgY2FzZSBsb25n
X3R5cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGpsb25nQXJyYXkgbG9uZ0FycmF5ID0gc3Rh
dGljX2Nhc3Q8amxvbmdBcnJheT4oamF2YUFycmF5KCkpOwotICAgICAgICAgICAgamxvbmcgYUxv
bmc7Ci0gICAgICAgICAgICBlbnYtPkdldExvbmdBcnJheVJlZ2lvbihsb25nQXJyYXksIGluZGV4
LCAxLCAmYUxvbmcpOwotICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGFMb25nKTsKLSAgICAg
ICAgfQotCi0gICAgY2FzZSBmbG9hdF90eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBqZmxv
YXRBcnJheSBmbG9hdEFycmF5ID0gc3RhdGljX2Nhc3Q8amZsb2F0QXJyYXk+KGphdmFBcnJheSgp
KTsKLSAgICAgICAgICAgIGpmbG9hdCBhRmxvYXQ7Ci0gICAgICAgICAgICBlbnYtPkdldEZsb2F0
QXJyYXlSZWdpb24oZmxvYXRBcnJheSwgaW5kZXgsIDEsICZhRmxvYXQpOwotICAgICAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKGFGbG9hdCk7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgZG91YmxlX3R5
cGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGpkb3VibGVBcnJheSBkb3VibGVBcnJheSA9IHN0
YXRpY19jYXN0PGpkb3VibGVBcnJheT4oamF2YUFycmF5KCkpOwotICAgICAgICAgICAgamRvdWJs
ZSBhRG91YmxlOwotICAgICAgICAgICAgZW52LT5HZXREb3VibGVBcnJheVJlZ2lvbihkb3VibGVB
cnJheSwgaW5kZXgsIDEsICZhRG91YmxlKTsKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihh
RG91YmxlKTsKLSAgICAgICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotdW5zaWduZWQgaW50IEphdmFBcnJheTo6
Z2V0TGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sZW5ndGg7Ci19Ci0KLSNlbmRpZiAv
LyBFTkFCTEUoSkFWQV9CUklER0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
am5pL2pzYy9KTklCcmlkZ2VKU0MuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pO
SUJyaWRnZUpTQy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDY5ZDFkLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSUJyaWRnZUpTQy5oCisr
KyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNywgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgSk5JQnJpZGdlSlNDX2gKLSNkZWZpbmUgSk5JQnJpZGdlSlNDX2gKLQot
I2lmIEVOQUJMRShKQVZBX0JSSURHRSkKLQotI2luY2x1ZGUgIkJyaWRnZUpTQy5oIgotI2luY2x1
ZGUgIkpOSVV0aWxpdHkuaCIKLSNpbmNsdWRlICJKYXZhTWV0aG9kLmgiCi0jaW5jbHVkZSAiSmF2
YVN0cmluZy5oIgotI2luY2x1ZGUgIkpvYmplY3RXcmFwcGVyLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1uYW1lc3BhY2UgQmluZGluZ3MgewotCi1jbGFzcyBKYXZhRmllbGQgOiBwdWJsaWMgRmll
bGQgewotcHVibGljOgotICAgIEphdmFGaWVsZChKTklFbnYqLCBqb2JqZWN0IGFGaWVsZCk7Ci0K
LSAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3Qg
SW5zdGFuY2UqKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4
ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNlKiwgSlNWYWx1ZSkgY29uc3Q7Ci0KLSAgICBjb25zdCBK
YXZhU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgdmlydHVhbCBS
dW50aW1lVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlLnV0ZjgoKTsgfQotCi0gICAg
Sk5JVHlwZSBnZXRKTklUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9KTklUeXBlOyB9Ci0KLXByaXZh
dGU6Ci0gICAgdm9pZCBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25z
dCBKYXZhSW5zdGFuY2UqLCBqdmFsdWUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHNp
ZykgY29uc3Q7Ci0gICAganZhbHVlIGRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRl
KiwgY29uc3QgSmF2YUluc3RhbmNlKiwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2ln
LCBKTklUeXBlIHJldHVyblR5cGUpIGNvbnN0OwotCi0gICAgSmF2YVN0cmluZyBtX25hbWU7Ci0g
ICAgSmF2YVN0cmluZyBtX3R5cGU7Ci0gICAgSk5JVHlwZSBtX0pOSVR5cGU7Ci0gICAgUmVmUHRy
PEpvYmplY3RXcmFwcGVyPiBtX2ZpZWxkOwotfTsKLQotY2xhc3MgSmF2YUFycmF5IDogcHVibGlj
IEFycmF5IHsKLXB1YmxpYzoKLSAgICBKYXZhQXJyYXkoam9iamVjdCBhcnJheSwgY29uc3QgY2hh
ciogdHlwZSwgUGFzc1JlZlB0cjxSb290T2JqZWN0Pik7Ci0gICAgdmlydHVhbCB+SmF2YUFycmF5
KCk7Ci0KLSAgICBSb290T2JqZWN0KiByb290T2JqZWN0KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgc2V0VmFsdWVBdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbnQgaW5kZXgsIEpTVmFsdWUp
IGNvbnN0OwotICAgIHZpcnR1YWwgSlNWYWx1ZSB2YWx1ZUF0KEV4ZWNTdGF0ZSosIHVuc2lnbmVk
IGludCBpbmRleCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TGVuZ3RoKCkg
Y29uc3Q7Ci0KLSAgICBqb2JqZWN0IGphdmFBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJyYXkt
Pm1faW5zdGFuY2U7IH0KLQotICAgIHN0YXRpYyBKU1ZhbHVlIGNvbnZlcnRKT2JqZWN0VG9BcnJh
eShFeGVjU3RhdGUqLCBqb2JqZWN0LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RP
YmplY3Q+KTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8Sm9iamVjdFdyYXBwZXI+IG1fYXJyYXk7
Ci0gICAgdW5zaWduZWQgaW50IG1fbGVuZ3RoOwotICAgIGNvbnN0IGNoYXIqIG1fdHlwZTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5k
aWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQotCi0jZW5kaWYgLy8gSk5JQnJpZGdlSlNDX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNw
cAppbmRleCBlNzQwNWU3Li5hOGJlMGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCkBAIC0yOSwxMSArMjksMTMgQEAKIAog
I2lmIEVOQUJMRShKQVZBX0JSSURHRSkKIAorI2luY2x1ZGUgIkphdmFBcnJheUpTQy5oIgorI2lu
Y2x1ZGUgIkphdmFJbnN0YW5jZUpTQy5oIgogI2luY2x1ZGUgIkphdmFSdW50aW1lT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiSk5JQnJpZGdlSlNDLmgiCiAjaW5jbHVkZSAiam5pX2pzb2JqZWN0LmgiCiAj
aW5jbHVkZSAicnVudGltZV9hcnJheS5oIgogI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCisj
aW5jbHVkZSAicnVudGltZV9yb290LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CiAj
aW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YnJpZGdlL2puaS9qc2MvSmF2YUFycmF5SlNDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvanNjL0phdmFBcnJheUpTQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZGI4N2JhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
anNjL0phdmFBcnJheUpTQy5jcHAKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2pl
Y3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSmF2YUFycmF5SlNDLmgi
CisKKyNpZiBFTkFCTEUoSkFWQV9CUklER0UpCisKKyNpbmNsdWRlICJKTklVdGlsaXR5UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIkphdmFJbnN0YW5jZUpTQy5oIgorI2luY2x1ZGUgIkpvYmplY3RXcmFw
cGVyLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgInJ1bnRpbWVfYXJyYXkuaCIK
KyNpbmNsdWRlICJydW50aW1lX29iamVjdC5oIgorI2luY2x1ZGUgInJ1bnRpbWVfcm9vdC5oIgor
I2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKK3VzaW5n
IG5hbWVzcGFjZSBKU0M6OkJpbmRpbmdzOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0pT
VmFsdWUgSmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBq
b2JqZWN0IGFuT2JqZWN0LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
IHJvb3RPYmplY3QpCit7CisgICAgaWYgKHR5cGVbMF0gIT0gJ1snKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKworICAgIHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVBcnJheShleGVj
LCBuZXcgSmF2YUFycmF5KGFuT2JqZWN0LCB0eXBlLCByb290T2JqZWN0KSk7Cit9CisKK0phdmFB
cnJheTo6SmF2YUFycmF5KGpvYmplY3QgYXJyYXksIGNvbnN0IGNoYXIqIHR5cGUsIFBhc3NSZWZQ
dHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCkKKyAgICA6IEFycmF5KHJvb3RPYmplY3QpCit7Cisg
ICAgbV9hcnJheSA9IG5ldyBKb2JqZWN0V3JhcHBlcihhcnJheSk7CisgICAgLy8gSmF2YSBhcnJh
eSBhcmUgZml4ZWQgbGVuZ3RoLCBzbyB3ZSBjYW4gY2FjaGUgbGVuZ3RoLgorICAgIEpOSUVudiog
ZW52ID0gZ2V0Sk5JRW52KCk7CisgICAgbV9sZW5ndGggPSBlbnYtPkdldEFycmF5TGVuZ3RoKHN0
YXRpY19jYXN0PGphcnJheT4obV9hcnJheS0+bV9pbnN0YW5jZSkpOworICAgIG1fdHlwZSA9IHN0
cmR1cCh0eXBlKTsKK30KKworSmF2YUFycmF5Ojp+SmF2YUFycmF5KCkKK3sKKyAgICBmcmVlKGNv
bnN0X2Nhc3Q8Y2hhcio+KG1fdHlwZSkpOworfQorCitSb290T2JqZWN0KiBKYXZhQXJyYXk6OnJv
b3RPYmplY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3Jvb3RPYmplY3QgJiYgbV9yb290T2Jq
ZWN0LT5pc1ZhbGlkKCkgPyBtX3Jvb3RPYmplY3QuZ2V0KCkgOiAwOworfQorCit2b2lkIEphdmFB
cnJheTo6c2V0VmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVl
IGFWYWx1ZSkgY29uc3QKK3sKKyAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOworICAgIGNo
YXIqIGphdmFDbGFzc05hbWUgPSAwOworCisgICAgSk5JVHlwZSBhcnJheVR5cGUgPSBKTklUeXBl
RnJvbVByaW1pdGl2ZVR5cGUobV90eXBlWzFdKTsKKyAgICBpZiAobV90eXBlWzFdID09ICdMJykg
eworICAgICAgICAvLyBUaGUgdHlwZSBvZiB0aGUgYXJyYXkgd2lsbCBiZSBzb21ldGhpbmcgbGlr
ZToKKyAgICAgICAgLy8gIltMamF2YS5sYW5nLnN0cmluZzsiLiBUaGlzIGlzIGd1YXJhbnRlZWQs
IHNvIG5vIG5lZWQKKyAgICAgICAgLy8gZm9yIGV4dHJhIHNhbml0eSBjaGVja3MuCisgICAgICAg
IGphdmFDbGFzc05hbWUgPSBzdHJkdXAoJm1fdHlwZVsyXSk7CisgICAgICAgIGphdmFDbGFzc05h
bWVbc3RyY2hyKGphdmFDbGFzc05hbWUsICc7JyktamF2YUNsYXNzTmFtZV0gPSAwOworICAgIH0K
KyAgICBqdmFsdWUgYUpWYWx1ZSA9IGNvbnZlcnRWYWx1ZVRvSlZhbHVlKGV4ZWMsIG1fcm9vdE9i
amVjdC5nZXQoKSwgYVZhbHVlLCBhcnJheVR5cGUsIGphdmFDbGFzc05hbWUpOworCisgICAgc3dp
dGNoIChhcnJheVR5cGUpIHsKKyAgICBjYXNlIG9iamVjdF90eXBlOgorICAgICAgICB7CisgICAg
ICAgICAgICBlbnYtPlNldE9iamVjdEFycmF5RWxlbWVudChzdGF0aWNfY2FzdDxqb2JqZWN0QXJy
YXk+KGphdmFBcnJheSgpKSwgaW5kZXgsIGFKVmFsdWUubCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgY2FzZSBib29sZWFuX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVudi0+U2V0Qm9vbGVhbkFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpib29sZWFuQXJyYXk+
KGphdmFBcnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLnopOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgIGNhc2UgYnl0ZV90eXBlOgorICAgICAgICB7CisgICAgICAgICAg
ICBlbnYtPlNldEJ5dGVBcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqYnl0ZUFycmF5PihqYXZhQXJy
YXkoKSksIGluZGV4LCAxLCAmYUpWYWx1ZS5iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICBjYXNlIGNoYXJfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgZW52LT5T
ZXRDaGFyQXJyYXlSZWdpb24oc3RhdGljX2Nhc3Q8amNoYXJBcnJheT4oamF2YUFycmF5KCkpLCBp
bmRleCwgMSwgJmFKVmFsdWUuYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgY2FzZSBzaG9ydF90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBlbnYtPlNldFNob3J0
QXJyYXlSZWdpb24oc3RhdGljX2Nhc3Q8anNob3J0QXJyYXk+KGphdmFBcnJheSgpKSwgaW5kZXgs
IDEsICZhSlZhbHVlLnMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGNh
c2UgaW50X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGVudi0+U2V0SW50QXJyYXlSZWdp
b24oc3RhdGljX2Nhc3Q8amludEFycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCAxLCAmYUpWYWx1
ZS5pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICBjYXNlIGxvbmdfdHlw
ZToKKyAgICAgICAgeworICAgICAgICAgICAgZW52LT5TZXRMb25nQXJyYXlSZWdpb24oc3RhdGlj
X2Nhc3Q8amxvbmdBcnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuaik7Cisg
ICAgICAgIH0KKworICAgIGNhc2UgZmxvYXRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAg
ZW52LT5TZXRGbG9hdEFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpmbG9hdEFycmF5PihqYXZhQXJy
YXkoKSksIGluZGV4LCAxLCAmYUpWYWx1ZS5mKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICBjYXNlIGRvdWJsZV90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBlbnYt
PlNldERvdWJsZUFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpkb3VibGVBcnJheT4oamF2YUFycmF5
KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChqYXZhQ2xh
c3NOYW1lKQorICAgICAgICBmcmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KGphdmFDbGFzc05hbWUpKTsK
K30KKworSlNWYWx1ZSBKYXZhQXJyYXk6OnZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBpbmRleCkgY29uc3QKK3sKKyAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOworICAgIEpO
SVR5cGUgYXJyYXlUeXBlID0gSk5JVHlwZUZyb21QcmltaXRpdmVUeXBlKG1fdHlwZVsxXSk7Cisg
ICAgc3dpdGNoIChhcnJheVR5cGUpIHsKKyAgICBjYXNlIG9iamVjdF90eXBlOgorICAgICAgICB7
CisgICAgICAgICAgICBqb2JqZWN0QXJyYXkgb2JqZWN0QXJyYXkgPSBzdGF0aWNfY2FzdDxqb2Jq
ZWN0QXJyYXk+KGphdmFBcnJheSgpKTsKKyAgICAgICAgICAgIGpvYmplY3QgYW5PYmplY3Q7Cisg
ICAgICAgICAgICBhbk9iamVjdCA9IGVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KG9iamVjdEFy
cmF5LCBpbmRleCk7CisKKyAgICAgICAgICAgIC8vIE5vIG9iamVjdD8KKyAgICAgICAgICAgIGlm
ICghYW5PYmplY3QpCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworCisgICAgICAg
ICAgICAvLyBOZXN0ZWQgYXJyYXk/CisgICAgICAgICAgICBpZiAobV90eXBlWzFdID09ICdbJykK
KyAgICAgICAgICAgICAgICByZXR1cm4gSmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXko
ZXhlYywgYW5PYmplY3QsIG1fdHlwZSArIDEsIHJvb3RPYmplY3QoKSk7CisgICAgICAgICAgICAv
LyBvciBhcnJheSBvZiBvdGhlciBvYmplY3QgdHlwZT8KKyAgICAgICAgICAgIHJldHVybiBKYXZh
SW5zdGFuY2U6OmNyZWF0ZShhbk9iamVjdCwgcm9vdE9iamVjdCgpKS0+Y3JlYXRlUnVudGltZU9i
amVjdChleGVjKTsKKyAgICAgICAgfQorCisgICAgY2FzZSBib29sZWFuX3R5cGU6CisgICAgICAg
IHsKKyAgICAgICAgICAgIGpib29sZWFuQXJyYXkgYm9vbGVhbkFycmF5ID0gc3RhdGljX2Nhc3Q8
amJvb2xlYW5BcnJheT4oamF2YUFycmF5KCkpOworICAgICAgICAgICAgamJvb2xlYW4gYUJvb2xl
YW47CisgICAgICAgICAgICBlbnYtPkdldEJvb2xlYW5BcnJheVJlZ2lvbihib29sZWFuQXJyYXks
IGluZGV4LCAxLCAmYUJvb2xlYW4pOworICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihhQm9v
bGVhbik7CisgICAgICAgIH0KKworICAgIGNhc2UgYnl0ZV90eXBlOgorICAgICAgICB7CisgICAg
ICAgICAgICBqYnl0ZUFycmF5IGJ5dGVBcnJheSA9IHN0YXRpY19jYXN0PGpieXRlQXJyYXk+KGph
dmFBcnJheSgpKTsKKyAgICAgICAgICAgIGpieXRlIGFCeXRlOworICAgICAgICAgICAgZW52LT5H
ZXRCeXRlQXJyYXlSZWdpb24oYnl0ZUFycmF5LCBpbmRleCwgMSwgJmFCeXRlKTsKKyAgICAgICAg
ICAgIHJldHVybiBqc051bWJlcihhQnl0ZSk7CisgICAgICAgIH0KKworICAgIGNhc2UgY2hhcl90
eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBqY2hhckFycmF5IGNoYXJBcnJheSA9IHN0YXRp
Y19jYXN0PGpjaGFyQXJyYXk+KGphdmFBcnJheSgpKTsKKyAgICAgICAgICAgIGpjaGFyIGFDaGFy
OworICAgICAgICAgICAgZW52LT5HZXRDaGFyQXJyYXlSZWdpb24oY2hhckFycmF5LCBpbmRleCwg
MSwgJmFDaGFyKTsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihhQ2hhcik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgY2FzZSBzaG9ydF90eXBlOgorICAgICAgICB7
CisgICAgICAgICAgICBqc2hvcnRBcnJheSBzaG9ydEFycmF5ID0gc3RhdGljX2Nhc3Q8anNob3J0
QXJyYXk+KGphdmFBcnJheSgpKTsKKyAgICAgICAgICAgIGpzaG9ydCBhU2hvcnQ7CisgICAgICAg
ICAgICBlbnYtPkdldFNob3J0QXJyYXlSZWdpb24oc2hvcnRBcnJheSwgaW5kZXgsIDEsICZhU2hv
cnQpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGFTaG9ydCk7CisgICAgICAgIH0KKwor
ICAgIGNhc2UgaW50X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGppbnRBcnJheSBpbnRB
cnJheSA9IHN0YXRpY19jYXN0PGppbnRBcnJheT4oamF2YUFycmF5KCkpOworICAgICAgICAgICAg
amludCBhbkludDsKKyAgICAgICAgICAgIGVudi0+R2V0SW50QXJyYXlSZWdpb24oaW50QXJyYXks
IGluZGV4LCAxLCAmYW5JbnQpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGFuSW50KTsK
KyAgICAgICAgfQorCisgICAgY2FzZSBsb25nX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAg
IGpsb25nQXJyYXkgbG9uZ0FycmF5ID0gc3RhdGljX2Nhc3Q8amxvbmdBcnJheT4oamF2YUFycmF5
KCkpOworICAgICAgICAgICAgamxvbmcgYUxvbmc7CisgICAgICAgICAgICBlbnYtPkdldExvbmdB
cnJheVJlZ2lvbihsb25nQXJyYXksIGluZGV4LCAxLCAmYUxvbmcpOworICAgICAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKGFMb25nKTsKKyAgICAgICAgfQorCisgICAgY2FzZSBmbG9hdF90eXBlOgor
ICAgICAgICB7CisgICAgICAgICAgICBqZmxvYXRBcnJheSBmbG9hdEFycmF5ID0gc3RhdGljX2Nh
c3Q8amZsb2F0QXJyYXk+KGphdmFBcnJheSgpKTsKKyAgICAgICAgICAgIGpmbG9hdCBhRmxvYXQ7
CisgICAgICAgICAgICBlbnYtPkdldEZsb2F0QXJyYXlSZWdpb24oZmxvYXRBcnJheSwgaW5kZXgs
IDEsICZhRmxvYXQpOworICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGFGbG9hdCk7CisgICAg
ICAgIH0KKworICAgIGNhc2UgZG91YmxlX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGpk
b3VibGVBcnJheSBkb3VibGVBcnJheSA9IHN0YXRpY19jYXN0PGpkb3VibGVBcnJheT4oamF2YUFy
cmF5KCkpOworICAgICAgICAgICAgamRvdWJsZSBhRG91YmxlOworICAgICAgICAgICAgZW52LT5H
ZXREb3VibGVBcnJheVJlZ2lvbihkb3VibGVBcnJheSwgaW5kZXgsIDEsICZhRG91YmxlKTsKKyAg
ICAgICAgICAgIHJldHVybiBqc051bWJlcihhRG91YmxlKTsKKyAgICAgICAgfQorICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30K
KwordW5zaWduZWQgaW50IEphdmFBcnJheTo6Z2V0TGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9sZW5ndGg7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQXJyYXlKU0MuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFBcnJheUpTQy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjkwMGM3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQXJyYXlKU0MuaApAQCAtMCwwICsxLDY3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5LCAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDEwLCBUaGUgQW5kcm9p
ZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKYXZhQXJyYXlKU0NfaAorI2Rl
ZmluZSBKYXZhQXJyYXlKU0NfaAorCisjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQorCisjaW5jbHVk
ZSAiQnJpZGdlSlNDLmgiCisjaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgorI2luY2x1ZGUgIkpvYmpl
Y3RXcmFwcGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQmluZGluZ3Mgewor
CitjbGFzcyBKYXZhQXJyYXkgOiBwdWJsaWMgQXJyYXkgeworcHVibGljOgorICAgIEphdmFBcnJh
eShqb2JqZWN0IGFycmF5LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
KTsKKyAgICB2aXJ0dWFsIH5KYXZhQXJyYXkoKTsKKworICAgIFJvb3RPYmplY3QqIHJvb3RPYmpl
Y3QoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIGludCBpbmRleCwgSlNWYWx1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlIHZh
bHVlQXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGludCBnZXRMZW5ndGgoKSBjb25zdDsKKworICAgIGpvYmplY3QgamF2YUFycmF5
KCkgY29uc3QgeyByZXR1cm4gbV9hcnJheS0+bV9pbnN0YW5jZTsgfQorCisgICAgc3RhdGljIEpT
VmFsdWUgY29udmVydEpPYmplY3RUb0FycmF5KEV4ZWNTdGF0ZSosIGpvYmplY3QsIGNvbnN0IGNo
YXIqIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4pOworCitwcml2YXRlOgorICAgIFJlZlB0
cjxKb2JqZWN0V3JhcHBlcj4gbV9hcnJheTsKKyAgICB1bnNpZ25lZCBpbnQgbV9sZW5ndGg7Cisg
ICAgY29uc3QgY2hhciogbV90eXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCisKKyNl
bmRpZiAvLyBKYXZhQXJyYXlKU0NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdl
L2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNj
L0phdmFDbGFzc0pTQy5jcHAKaW5kZXggY2Q2MDhhYy4uMThjZDFhZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCkBAIC0zMCw2ICszMCw4IEBA
CiAKICNpbmNsdWRlICJKTklVdGlsaXR5LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNp
bmNsdWRlICJKYXZhRmllbGRKU0MuaCIKKyNpbmNsdWRlICJKYXZhTWV0aG9kLmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9JZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuaAppbmRleCAwNTI3
MTYyLi40OGM5Y2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9K
YXZhQ2xhc3NKU0MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xh
c3NKU0MuaApAQCAtMjgsNyArMjgsOCBAQAogCiAjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQogCi0j
aW5jbHVkZSAiSk5JQnJpZGdlSlNDLmgiCisjaW5jbHVkZSAiQnJpZGdlSlNDLmgiCisjaW5jbHVk
ZSAiSk5JVXRpbGl0eS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUZpZWxk
SlNDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFGaWVsZEpTQy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNiYTA2YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFGaWVsZEpTQy5jcHAKQEAg
LTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIw
MDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IDIw
MTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSmF2YUZpZWxkSlNDLmgiCisKKyNpZiBFTkFCTEUoSkFWQV9CUklE
R0UpCisKKyNpbmNsdWRlICJKTklVdGlsaXR5UHJpdmF0ZS5oIgorI2luY2x1ZGUgIkphdmFBcnJh
eUpTQy5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJydW50aW1lX2FycmF5Lmgi
CisjaW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCaW5kaW5nczsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitKYXZhRmllbGQ6OkphdmFGaWVsZChKTklFbnYq
IGVudiwgam9iamVjdCBhRmllbGQpCit7CisgICAgLy8gR2V0IGZpZWxkIHR5cGUgbmFtZQorICAg
IGpzdHJpbmcgZmllbGRUeXBlTmFtZSA9IDA7CisgICAgaWYgKGpvYmplY3QgZmllbGRUeXBlID0g
Y2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhRmllbGQsICJnZXRUeXBlIiwgIigpTGphdmEvbGFuZy9D
bGFzczsiKSkKKyAgICAgICAgZmllbGRUeXBlTmFtZSA9IHN0YXRpY19jYXN0PGpzdHJpbmc+KGNh
bGxKTklNZXRob2Q8am9iamVjdD4oZmllbGRUeXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcv
U3RyaW5nOyIpKTsKKyAgICBpZiAoIWZpZWxkVHlwZU5hbWUpCisgICAgICAgIGZpZWxkVHlwZU5h
bWUgPSBlbnYtPk5ld1N0cmluZ1VURigiPFVua25vd24+Iik7CisgICAgbV90eXBlID0gSmF2YVN0
cmluZyhlbnYsIGZpZWxkVHlwZU5hbWUpOworCisgICAgbV9KTklUeXBlID0gSk5JVHlwZUZyb21D
bGFzc05hbWUobV90eXBlLnV0ZjgoKSk7CisKKyAgICAvLyBHZXQgZmllbGQgbmFtZQorICAgIGpz
dHJpbmcgZmllbGROYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4oY2FsbEpOSU1ldGhvZDxqb2Jq
ZWN0PihhRmllbGQsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IikpOworICAgIGlm
ICghZmllbGROYW1lKQorICAgICAgICBmaWVsZE5hbWUgPSBlbnYtPk5ld1N0cmluZ1VURigiPFVu
a25vd24+Iik7CisgICAgbV9uYW1lID0gSmF2YVN0cmluZyhlbnYsIGZpZWxkTmFtZSk7CisKKyAg
ICBtX2ZpZWxkID0gbmV3IEpvYmplY3RXcmFwcGVyKGFGaWVsZCk7Cit9CisKK2p2YWx1ZSBKYXZh
RmllbGQ6OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBK
YXZhSW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBzaWcs
IEpOSVR5cGUgcmV0dXJuVHlwZSkgY29uc3QKK3sKKyAgICBqb2JqZWN0IGppbnN0YW5jZSA9IGlu
c3RhbmNlLT5qYXZhSW5zdGFuY2UoKTsKKyAgICBqb2JqZWN0IGZpZWxkSkluc3RhbmNlID0gbV9m
aWVsZC0+bV9pbnN0YW5jZTsKKyAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOworICAgIGp2
YWx1ZSByZXN1bHQ7CisKKyAgICBtZW1zZXQoJnJlc3VsdCwgMCwgc2l6ZW9mKGp2YWx1ZSkpOwor
ICAgIGpjbGFzcyBjbHMgPSBlbnYtPkdldE9iamVjdENsYXNzKGZpZWxkSkluc3RhbmNlKTsKKyAg
ICBpZiAoY2xzKSB7CisgICAgICAgIGptZXRob2RJRCBtaWQgPSBlbnYtPkdldE1ldGhvZElEKGNs
cywgbmFtZSwgc2lnKTsKKyAgICAgICAgaWYgKG1pZCkgeworICAgICAgICAgICAgUm9vdE9iamVj
dCogcm9vdE9iamVjdCA9IGluc3RhbmNlLT5yb290T2JqZWN0KCk7CisgICAgICAgICAgICBpZiAo
cm9vdE9iamVjdCAmJiByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkgeworICAgICAgICAgICAg
ICAgIEpTVmFsdWUgZXhjZXB0aW9uRGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAganZhbHVl
IGFyZ3NbMV07CisKKyAgICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7CisgICAg
ICAgICAgICAgICAgZGlzcGF0Y2hKTklDYWxsKGV4ZWMsIHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRs
ZSgpLCBmaWVsZEpJbnN0YW5jZSwgZmFsc2UsIHJldHVyblR5cGUsIG1pZCwgYXJncywgcmVzdWx0
LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlv
bkRlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNW
YWx1ZSBKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SW5zdGFuY2UqIGkpIGNvbnN0Cit7CisgICAgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSA9
IHN0YXRpY19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSo+KGkpOworCisgICAgSlNWYWx1ZSBqc3Jl
c3VsdCA9IGpzVW5kZWZpbmVkKCk7CisKKyAgICBzd2l0Y2ggKG1fSk5JVHlwZSkgeworICAgIGNh
c2UgYXJyYXlfdHlwZToKKyAgICBjYXNlIG9iamVjdF90eXBlOgorICAgICAgICB7CisgICAgICAg
ICAgICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShleGVjLCBpbnN0
YW5jZSwgImdldCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIsIG9i
amVjdF90eXBlKTsKKyAgICAgICAgICAgIGpvYmplY3QgYW5PYmplY3QgPSByZXN1bHQubDsKKwor
ICAgICAgICAgICAgaWYgKCFhbk9iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxs
KCk7CisKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFycmF5VHlwZSA9IHR5cGUoKTsKKyAgICAg
ICAgICAgIGlmIChhcnJheVR5cGVbMF0gPT0gJ1snKQorICAgICAgICAgICAgICAgIGpzcmVzdWx0
ID0gSmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywgYW5PYmplY3QsIGFycmF5
VHlwZSwgaW5zdGFuY2UtPnJvb3RPYmplY3QoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChhbk9i
amVjdCkKKyAgICAgICAgICAgICAgICBqc3Jlc3VsdCA9IEphdmFJbnN0YW5jZTo6Y3JlYXRlKGFu
T2JqZWN0LCBpbnN0YW5jZS0+cm9vdE9iamVjdCgpKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVj
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgYm9vbGVhbl90eXBlOgor
ICAgICAgICBqc3Jlc3VsdCA9IGpzQm9vbGVhbihkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4
ZWMsIGluc3RhbmNlLCAiZ2V0Qm9vbGVhbiIsICIoTGphdmEvbGFuZy9PYmplY3Q7KVoiLCBib29s
ZWFuX3R5cGUpLnopOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgYnl0ZV90eXBlOgorICAg
IGNhc2UgY2hhcl90eXBlOgorICAgIGNhc2Ugc2hvcnRfdHlwZToKKworICAgIGNhc2UgaW50X3R5
cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGppbnQgdmFsdWU7CisgICAgICAgICAgICBqdmFs
dWUgcmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgImdl
dEludCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUkiLCBpbnRfdHlwZSk7CisgICAgICAgICAgICB2
YWx1ZSA9IHJlc3VsdC5pOworICAgICAgICAgICAganNyZXN1bHQgPSBqc051bWJlcihzdGF0aWNf
Y2FzdDxpbnQ+KHZhbHVlKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IGxvbmdfdHlwZToKKyAgICBjYXNlIGZsb2F0X3R5cGU6CisgICAgY2FzZSBkb3VibGVfdHlwZToK
KyAgICAgICAgeworICAgICAgICAgICAgamRvdWJsZSB2YWx1ZTsKKyAgICAgICAgICAgIGp2YWx1
ZSByZXN1bHQgPSBkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCAiZ2V0
RG91YmxlIiwgIihMamF2YS9sYW5nL09iamVjdDspRCIsIGRvdWJsZV90eXBlKTsKKyAgICAgICAg
ICAgIHZhbHVlID0gcmVzdWx0Lmk7CisgICAgICAgICAgICBqc3Jlc3VsdCA9IGpzTnVtYmVyKHN0
YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBMT0coTGl2ZUNvbm5lY3Qs
ICJKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlIGdldHRpbmcgJXMgPSAlcyIsIFVTdHJpbmco
bmFtZSgpLmltcGwoKSkudXRmOCgpLmRhdGEoKSwganNyZXN1bHQudG9TdHJpbmcoZXhlYykuYXNj
aWkoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIGpzcmVzdWx0OworfQorCit2b2lkIEphdmFGaWVs
ZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBKYXZh
SW5zdGFuY2UqIGluc3RhbmNlLCBqdmFsdWUgamF2YVZhbHVlLCBjb25zdCBjaGFyKiBuYW1lLCBj
b25zdCBjaGFyKiBzaWcpIGNvbnN0Cit7CisgICAgam9iamVjdCBqaW5zdGFuY2UgPSBpbnN0YW5j
ZS0+amF2YUluc3RhbmNlKCk7CisgICAgam9iamVjdCBmaWVsZEpJbnN0YW5jZSA9IG1fZmllbGQt
Pm1faW5zdGFuY2U7CisgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKKworICAgIGpjbGFz
cyBjbHMgPSBlbnYtPkdldE9iamVjdENsYXNzKGZpZWxkSkluc3RhbmNlKTsKKyAgICBpZiAoY2xz
KSB7CisgICAgICAgIGptZXRob2RJRCBtaWQgPSBlbnYtPkdldE1ldGhvZElEKGNscywgbmFtZSwg
c2lnKTsKKyAgICAgICAgaWYgKG1pZCkgeworICAgICAgICAgICAgUm9vdE9iamVjdCogcm9vdE9i
amVjdCA9IGluc3RhbmNlLT5yb290T2JqZWN0KCk7CisgICAgICAgICAgICBpZiAocm9vdE9iamVj
dCAmJiByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSkgeworICAgICAgICAgICAgICAgIEpTVmFs
dWUgZXhjZXB0aW9uRGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAganZhbHVlIGFyZ3NbMl07
CisgICAgICAgICAgICAgICAganZhbHVlIHJlc3VsdDsKKworICAgICAgICAgICAgICAgIGFyZ3Nb
MF0ubCA9IGppbnN0YW5jZTsKKyAgICAgICAgICAgICAgICBhcmdzWzFdID0gamF2YVZhbHVlOwor
ICAgICAgICAgICAgICAgIGRpc3BhdGNoSk5JQ2FsbChleGVjLCByb290T2JqZWN0LT5uYXRpdmVI
YW5kbGUoKSwgZmllbGRKSW5zdGFuY2UsIGZhbHNlLCB2b2lkX3R5cGUsIG1pZCwgYXJncywgcmVz
dWx0LCAwLCBleGNlcHRpb25EZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKGV4Y2Vw
dGlvbkRlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNy
ZWF0ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSmF2YUZpZWxkOjpzZXRW
YWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaSwgSlNWYWx1
ZSBhVmFsdWUpIGNvbnN0Cit7CisgICAgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSA9IHN0
YXRpY19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSo+KGkpOworICAgIGp2YWx1ZSBqYXZhVmFsdWUg
PSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShleGVjLCBpLT5yb290T2JqZWN0KCksIGFWYWx1ZSwgbV9K
TklUeXBlLCB0eXBlKCkpOworCisgICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUZpZWxkOjpzZXRW
YWx1ZVRvSW5zdGFuY2Ugc2V0dGluZyB2YWx1ZSAlcyB0byAlcyIsIFVTdHJpbmcobmFtZSgpLmlt
cGwoKSkudXRmOCgpLmRhdGEoKSwgYVZhbHVlLnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkuZGF0YSgp
KTsKKworICAgIHN3aXRjaCAobV9KTklUeXBlKSB7CisgICAgY2FzZSBhcnJheV90eXBlOgorICAg
IGNhc2Ugb2JqZWN0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFs
dWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXQiLCAiKExqYXZhL2xh
bmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIGJvb2xlYW5fdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgZGlz
cGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNldEJv
b2xlYW4iLCAiKExqYXZhL2xhbmcvT2JqZWN0O1opViIpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBieXRlX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3Bh
dGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRCeXRl
IiwgIihMamF2YS9sYW5nL09iamVjdDtCKVYiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KworICAgIGNhc2UgY2hhcl90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNl
dFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0Q2hhciIsICIo
TGphdmEvbGFuZy9PYmplY3Q7QylWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIHNob3J0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFs
dWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRTaG9ydCIsICIoTGph
dmEvbGFuZy9PYmplY3Q7UylWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIGludF90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9J
bnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0SW50IiwgIihMamF2YS9sYW5n
L09iamVjdDtJKVYiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgbG9u
Z190eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5j
ZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0TG9uZyIsICIoTGphdmEvbGFuZy9PYmpl
Y3Q7SilWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGZsb2F0X3R5
cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4
ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRGbG9hdCIsICIoTGphdmEvbGFuZy9PYmplY3Q7
RilWIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGRvdWJsZV90eXBl
OgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVj
LCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0RG91YmxlIiwgIihMamF2YS9sYW5nL09iamVjdDtE
KVYiKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhRmllbGRKU0MuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFGaWVsZEpTQy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmE2NzI2NGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhRmllbGRKU0MuaApAQCAtMCwwICsxLDcwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5LCAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDEwLCBUaGUgQW5kcm9p
ZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKYXZhRmllbGRKU0NfaAorI2Rl
ZmluZSBKYXZhRmllbGRKU0NfaAorCisjaWYgRU5BQkxFKEpBVkFfQlJJREdFKQorCisjaW5jbHVk
ZSAiQnJpZGdlSlNDLmgiCisjaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgorI2luY2x1ZGUgIkphdmFN
ZXRob2QuaCIKKyNpbmNsdWRlICJKYXZhU3RyaW5nLmgiCisjaW5jbHVkZSAiSm9iamVjdFdyYXBw
ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBCaW5kaW5ncyB7CisKK2NsYXNz
IEphdmFGaWVsZCA6IHB1YmxpYyBGaWVsZCB7CitwdWJsaWM6CisgICAgSmF2YUZpZWxkKEpOSUVu
diosIGpvYmplY3QgYUZpZWxkKTsKKworICAgIHZpcnR1YWwgSlNWYWx1ZSB2YWx1ZUZyb21JbnN0
YW5jZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVl
KSBjb25zdDsKKworICAgIGNvbnN0IEphdmFTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KKyAgICB2aXJ0dWFsIFJ1bnRpbWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUudXRmOCgpOyB9CisKKyAgICBKTklUeXBlIGdldEpOSVR5cGUoKSBjb25zdCB7IHJldHVy
biBtX0pOSVR5cGU7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGRpc3BhdGNoU2V0VmFsdWVUb0lu
c3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEphdmFJbnN0YW5jZSosIGp2YWx1ZSwgY29uc3QgY2hh
ciogbmFtZSwgY29uc3QgY2hhciogc2lnKSBjb25zdDsKKyAgICBqdmFsdWUgZGlzcGF0Y2hWYWx1
ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBKYXZhSW5zdGFuY2UqLCBjb25zdCBjaGFy
KiBuYW1lLCBjb25zdCBjaGFyKiBzaWcsIEpOSVR5cGUgcmV0dXJuVHlwZSkgY29uc3Q7CisKKyAg
ICBKYXZhU3RyaW5nIG1fbmFtZTsKKyAgICBKYXZhU3RyaW5nIG1fdHlwZTsKKyAgICBKTklUeXBl
IG1fSk5JVHlwZTsKKyAgICBSZWZQdHI8Sm9iamVjdFdyYXBwZXI+IG1fZmllbGQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBCaW5kaW5ncworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShKQVZBX0JSSURHRSkKKworI2VuZGlmIC8vIEphdmFGaWVsZEpTQ19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwIGIv
U291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAppbmRleCBk
ZjcyMGFkLi45ZDlhNDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pz
Yy9KYXZhSW5zdGFuY2VKU0MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNj
L0phdmFJbnN0YW5jZUpTQy5jcHAKQEAgLTI5LDExICsyOSwxMyBAQAogI2lmIEVOQUJMRShKQVZB
X0JSSURHRSkKIAogI2luY2x1ZGUgIkphdmFSdW50aW1lT2JqZWN0LmgiCi0jaW5jbHVkZSAiSk5J
QnJpZGdlSlNDLmgiCiAjaW5jbHVkZSAiSk5JVXRpbGl0eS5oIgogI2luY2x1ZGUgIkpOSVV0aWxp
dHlQcml2YXRlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSmF2YUFy
cmF5SlNDLmgiCiAjaW5jbHVkZSAiSmF2YUNsYXNzSlNDLmgiCisjaW5jbHVkZSAiSmF2YU1ldGhv
ZC5oIgorI2luY2x1ZGUgIkphdmFTdHJpbmcuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiam5pX2pzb2JqZWN0LmgiCiAjaW5jbHVkZSAicnVudGltZV9tZXRob2QuaCIK
</data>
<flag name="review"
          id="77010"
          type_id="1"
          status="+"
          setter="jorlow"
    />
          </attachment>
      

    </bug>

</bugzilla>