<?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>176740</bug_id>
          
          <creation_ts>2017-09-11 14:32:27 -0700</creation_ts>
          <short_desc>[Cleanup] Follow up cleanup for DOMFormData implementation</short_desc>
          <delta_ts>2017-09-27 12:38:55 -0700</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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>achristensen</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1347626</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-11 14:32:27 -0700</bug_when>
    <thetext>[Cleanup] Follow up cleanup for DOMFormData implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347787</commentid>
    <comment_count>1</comment_count>
      <attachid>320513</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-11 21:11:36 -0700</bug_when>
    <thetext>Created attachment 320513
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347789</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-09-11 21:12:57 -0700</bug_when>
    <thetext>Attachment 320513 did not pass style-queue:


ERROR: Source/WebCore/platform/network/FormData.cpp:251:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 42 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347790</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-11 21:13:22 -0700</bug_when>
    <thetext>DOMFormData unfortunately needs to maintain its TextEncoding member, as it is used by HiddenInputType::appendFormData(...).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347791</commentid>
    <comment_count>4</comment_count>
      <attachid>320514</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-11 21:14:25 -0700</bug_when>
    <thetext>Created attachment 320514
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347806</commentid>
    <comment_count>5</comment_count>
      <attachid>320514</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-11 22:33:58 -0700</bug_when>
    <thetext>Comment on attachment 320514
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=320514&amp;action=review

&gt; Source/WTF/wtf/KeyValuePair.h:56
&gt; +    KeyType key;
&gt; +    ValueType value { };

Do we intentionally want to keep no default initializer list for key?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347889</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-12 07:24:41 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #5)
&gt; Comment on attachment 320514 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=320514&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/KeyValuePair.h:56
&gt; &gt; +    KeyType key;
&gt; &gt; +    ValueType value { };
&gt; 
&gt; Do we intentionally want to keep no default initializer list for key?

I found this really odd, but didn’t want to change it in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347897</commentid>
    <comment_count>7</comment_count>
      <attachid>320514</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-12 07:53:22 -0700</bug_when>
    <thetext>Comment on attachment 320514
Patch

Clearing flags on attachment: 320514

Committed r221914: &lt;http://trac.webkit.org/changeset/221914&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347898</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-12 07:53:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353565</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:38:55 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693683&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320513</attachid>
            <date>2017-09-11 21:11:36 -0700</date>
            <delta_ts>2017-09-11 21:14:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176740-20170911211135.patch</filename>
            <type>text/plain</type>
            <size>70538</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE3LTA5LTExICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgW0NsZWFudXBdIEZvbGxvdyB1cCBjbGVhbnVwIGZvciBET01G
b3JtRGF0YSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc2NzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiB3dGYvSGFzaFRyYWl0cy5oOgorICAgICAgICAoV1RGOjpLZXlWYWx1ZVBhaXI6OktleVZhbHVl
UGFpcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0tleVZhbHVlUGFpci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6S2V5VmFsdWVQYWlyOjpLZXlWYWx1ZVBhaXIpOgorICAgICAgICAoV1RGOjpt
YWtlS2V5VmFsdWVQYWlyKToKKworICAgICAgICAgICAgTW92ZSBLZXlWYWx1ZVBhaXIgdG8gaXRz
IG93biBoZWFkZXIgYW5kIGFkZCBhIG1ha2VLZXlWYWx1ZVBhaXIgaGVscGVyLgorCiAyMDE3LTA5
LTExICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMjE4NTQuCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw2ICszNDYsNyBA
QAogCQk3QUZFQzZBRTFFQjIyQUM2MDBEQURFMzYgLyogVVVJRC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVVUlELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdB
RkVDNkIwMUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFVVSUQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzNGNzIzOTFENzg4MTE5MDA2NzRFMjYgLyogQnJpZ2FuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCcmlnYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdD
OTY5Mjk0MUY2NjMwNkUwMDI2N0E5RSAvKiBLZXlWYWx1ZVBhaXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gS2V5VmFsdWVQYWlyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDQkJBMDczMTlCQjdGREMwMEJCRjAyNSAvKiBPU09iamVjdFB0ci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU09iamVjdFB0ci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3Q0QwRDVBNzFENTUzMjJBMDAwQ0M5RTEgLyogVmFyaWFudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDRDRDMjZGMUUyQzgyQjkwMDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRlbmF0
ZU51bWJlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nQ29uY2F0
ZW5hdGVOdW1iZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NDksNiArODUw
LDcgQEAKIAkJCQk1MTgyQzIyQzFGMkJDN0U2MDA1OUJBN0MgLyogSW5zdGFuY2VDb3VudGVkLmgg
Ki8sCiAJCQkJN0NERDdGRjcxODZEMjkxRTAwNzQzM0NEIC8qIEl0ZXJhdG9yQWRhcHRvcnMuaCAq
LywKIAkJCQk3Q0REN0ZGOTE4NkQyQTU0MDA3NDMzQ0QgLyogSXRlcmF0b3JSYW5nZS5oICovLAor
CQkJCTdDOTY5Mjk0MUY2NjMwNkUwMDI2N0E5RSAvKiBLZXlWYWx1ZVBhaXIuaCAqLywKIAkJCQlD
MkJDRkMzRTFGNjFEMTMwMDBDOTIyMkMgLyogTGFuZ3VhZ2UuY3BwICovLAogCQkJCUMyQkNGQzNG
MUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovLAogCQkJCTUzOUVCMDYyMUQ1NTI4NDIw
MEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJh
aXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCShyZXZpc2lv
biAyMjE5MDApCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8dXRpbGl0eT4K
ICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9LZXlWYWx1ZVBh
aXIuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAKQEAgLTI3OSwzMiArMjgwLDYgQEAgc3RydWN0IFR1cGxlSGFzaFRyYWl0cyA6IEdl
bmVyaWNIYXNoVHJhaQogdGVtcGxhdGU8dHlwZW5hbWUuLi4gVHJhaXRzPgogc3RydWN0IEhhc2hU
cmFpdHM8c3RkOjp0dXBsZTxUcmFpdHMuLi4+PiA6IHB1YmxpYyBUdXBsZUhhc2hUcmFpdHM8SGFz
aFRyYWl0czxUcmFpdHM+Li4uPiB7IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGVBcmcs
IHR5cGVuYW1lIFZhbHVlVHlwZUFyZz4KLXN0cnVjdCBLZXlWYWx1ZVBhaXIgewotICAgIHR5cGVk
ZWYgS2V5VHlwZUFyZyBLZXlUeXBlOwotCi0gICAgS2V5VmFsdWVQYWlyKCkKLSAgICB7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLSAgICBLZXlWYWx1ZVBh
aXIoSyYmIGtleSwgViYmIHZhbHVlKQotICAgICAgICA6IGtleShzdGQ6OmZvcndhcmQ8Sz4oa2V5
KSkKLSAgICAgICAgLCB2YWx1ZShzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKQotICAgIHsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3RoZXJLZXlUeXBlLCB0eXBlbmFtZSBPdGhlclZh
bHVlVHlwZT4KLSAgICBLZXlWYWx1ZVBhaXIoS2V5VmFsdWVQYWlyPE90aGVyS2V5VHlwZSwgT3Ro
ZXJWYWx1ZVR5cGU+JiYgb3RoZXIpCi0gICAgICAgIDoga2V5KHN0ZDo6Zm9yd2FyZDxPdGhlcktl
eVR5cGU+KG90aGVyLmtleSkpCi0gICAgICAgICwgdmFsdWUoc3RkOjpmb3J3YXJkPE90aGVyVmFs
dWVUeXBlPihvdGhlci52YWx1ZSkpCi0gICAgewotICAgIH0KLQotICAgIEtleVR5cGVBcmcga2V5
OwotICAgIFZhbHVlVHlwZUFyZyB2YWx1ZSB7IH07Ci19OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIFZhbHVlVHJhaXRzQXJnPgogc3RydWN0IEtleVZhbHVlUGFp
ckhhc2hUcmFpdHMgOiBHZW5lcmljSGFzaFRyYWl0czxLZXlWYWx1ZVBhaXI8dHlwZW5hbWUgS2V5
VHJhaXRzQXJnOjpUcmFpdFR5cGUsIHR5cGVuYW1lIFZhbHVlVHJhaXRzQXJnOjpUcmFpdFR5cGU+
PiB7CiAgICAgdHlwZWRlZiBLZXlUcmFpdHNBcmcgS2V5VHJhaXRzOwpJbmRleDogU291cmNlL1dU
Ri93dGYvS2V5VmFsdWVQYWlyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvS2V5VmFs
dWVQYWlyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvS2V5VmFsdWVQYWlyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlUeXBlQXJnLCB0eXBlbmFtZSBWYWx1ZVR5cGVBcmc+CitzdHJ1Y3QgS2V5
VmFsdWVQYWlyIHsKKyAgICB1c2luZyBLZXlUeXBlID0gS2V5VHlwZUFyZzsKKyAgICB1c2luZyBW
YWx1ZVR5cGUgPSBWYWx1ZVR5cGVBcmc7CisKKyAgICBLZXlWYWx1ZVBhaXIoKQorICAgIHsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgorICAgIEtleVZhbHVl
UGFpcihLJiYga2V5LCBWJiYgdmFsdWUpCisgICAgICAgIDoga2V5KHN0ZDo6Zm9yd2FyZDxLPihr
ZXkpKQorICAgICAgICAsIHZhbHVlKHN0ZDo6Zm9yd2FyZDxWPih2YWx1ZSkpCisgICAgeworICAg
IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgorICAgIEtleVZhbHVl
UGFpcihLZXlWYWx1ZVBhaXI8SywgVj4mJiBvdGhlcikKKyAgICAgICAgOiBrZXkoc3RkOjpmb3J3
YXJkPEs+KG90aGVyLmtleSkpCisgICAgICAgICwgdmFsdWUoc3RkOjpmb3J3YXJkPFY+KG90aGVy
LnZhbHVlKSkKKyAgICB7CisgICAgfQorCisgICAgS2V5VHlwZSBrZXk7CisgICAgVmFsdWVUeXBl
IHZhbHVlIHsgfTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Citpbmxp
bmUgS2V5VmFsdWVQYWlyPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8Sz46OnR5cGUsIHR5cGVuYW1lIHN0
ZDo6ZGVjYXk8Vj46OnR5cGU+IG1ha2VLZXlWYWx1ZVBhaXIoSyYmIGtleSwgViYmIHZhbHVlKQor
eworICAgIHJldHVybiBLZXlWYWx1ZVBhaXI8dHlwZW5hbWUgc3RkOjpkZWNheTxLPjo6dHlwZSwg
dHlwZW5hbWUgc3RkOjpkZWNheTxWPjo6dHlwZT4geyBzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3Rk
Ojpmb3J3YXJkPFY+KHZhbHVlKSB9OworfQorCit9CisKK3VzaW5nIFdURjo6S2V5VmFsdWVQYWly
OwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA0IEBACisyMDE3LTA5LTExICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NsZWFudXBdIEZvbGxvdyB1cCBj
bGVhbnVwIGZvciBET01Gb3JtRGF0YSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2NzQwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBNZXJnZXMgRm9ybURhdGFMaXN0IGludG8g
RE9NRm9ybURhdGEuCisgICAgICAgIC0gU3RyZWFtbGluZSAvIHJlZmFjdG9yIEZvcm1EYXRhIGNy
ZWF0aW9uIGZyb20gRE9NRm9ybURhdGEuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRt
bC9Gb3JtRGF0YUxpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0
Lmg6IFJlbW92ZWQuCisKKyAgICAgICAgICAgIFJlbW92ZSBGb3JtRGF0YUxpc3QuCisKKyAgICAg
ICAgKiBodG1sL0RPTUZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZvcm1EYXRh
OjpET01Gb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpET01Gb3JtRGF0YTo6Y3JlYXRlRmls
ZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZvcm1EYXRhOjphcHBlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NRm9ybURhdGE6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpET01Gb3Jt
RGF0YTo6SXRlcmF0b3I6Om5leHQpOgorICAgICAgICAqIGh0bWwvRE9NRm9ybURhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTUZvcm1EYXRhOjppdGVtcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpET01Gb3JtRGF0YTo6ZW5jb2RpbmcgY29uc3QpOgorCisgICAgICAgICAgICBNZXJnZSBG
b3JtRGF0YUxpc3QgaW50byBET01Gb3JtRGF0YS4gRm9ybURhdGFMaXN0J3MgYWRkaXRpb25hbAor
ICAgICAgICAgICAgYXBwZW5kRGF0YS9hcHBlbmRCbG9iIGZ1bmN0aW9ucyBoYXZlIGJlZW4gcmVt
b3ZlZCwgYW5kIHRoZWlyCisgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGlubGluZWQgaW50byBE
T01Gb3JtRGF0YSdzIGFwcGVuZCBmdW5jdGlvbnMuIAorCisgICAgICAgICAgICBBZG9wdGVkIG1h
a2VLZXlWYWx1ZVBhaXIgaW4gRE9NRm9ybURhdGE6Okl0ZXJhdG9yOjpuZXh0KCkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmNyZWF0ZU11bHRp
UGFydCk6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVTdHJpbmdEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRGaWxlVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZE11bHRpUGFydFN0cmluZ1ZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRLZXlWYWx1ZVBhaXJJdGVtcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kTm9uTXVsdGlQYXJ0S2V5VmFsdWVQYWly
SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEtleVZhbHVlUGFpckl0
ZW1zKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmg6CisK
KyAgICAgICAgICAgIFNwbGl0LXVwIGFwcGVuZEtleVZhbHVlUGFpckl0ZW1zIGludG8gc2VwYXJh
dGUgbXVsdGlwYXJ0IGFuZCBub24tbXVsdGlwYXJ0CisgICAgICAgICAgICBmdW5jdGlvbnMsIGFz
IHRoZSB0d28gZWRnZXMgb2YgdGhlIGJyYW5jaCBkaWRuJ3Qgc2hhcmUgbXVjaCBpbiBjb21tb24u
IEZ1cnRoZXIKKyAgICAgICAgICAgIHNwbGl0IG91dCBtdWx0aXBhcnQgZmlsZSBhbmQgbXVsdGlw
YXJ0IHN0cmluZyBhcHBlbmRpbmcsIHNpbmNlIHRoZXkgdG9vIGRpZCBub3QKKyAgICAgICAgICAg
IHNoYXJlIHRoYXQgbXVjaCBpbiBjb21tb24gYW5kIG1ha2VzIHRoZSBjb2RlIGVhc2llciB0byBm
b2xsb3cuIAorCisgICAgICAgICAgICBTdHJpbmcgdmFsdWUgbm9ybWFsaXphdGlvbiBoYXMgYmVl
biBtb3ZlZCBlbnRpcmVseSBoZXJlIChwcmV2aW91c2x5IGl0IHdhcyBhIG1lbWJlciAKKyAgICAg
ICAgICAgIGZ1bmN0aW9uIG9mIEZvcm1EYXRhTGlzdCkgYXMgRm9ybURhdGEgaXMgdGhlIG9ubHkg
dXNlci4KKworICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisgICAgICAgICogbG9hZGVyL0Zvcm1TdWJtaXNz
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpjcmVhdGUpOgorICAg
ICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZl
dGNoQm9keTo6ZXh0cmFjdCk6CisgICAgICAgIAorICAgICAgICAgICAgVXBkYXRlIGZvciBuZXcg
Rm9ybURhdGEgY3JlYXRlIGZ1bmN0aW9ucyB3aGljaCBkb24ndCBuZWVkIHRoZQorICAgICAgICAg
ICAgZW5jb2RpbmcgcGFzc2VkIGV4cGxpY2l0bHksIHNpbmNlIGl0IGlzIHBhcnQgb2YgdGhlIERP
TUZvcm1EYXRhLgorICAgICAgICAKKyAgICAgICAgKiBodG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUu
Y3BwOgorICAgICAgICAqIGh0bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5oOgorICAgICAgICAqIGh0
bWwvQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5jcHA6CisgICAgICAgICogaHRtbC9CYXNlQ2hlY2th
YmxlSW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9GaWxlSW5wdXRUeXBlLmNwcDoKKyAgICAg
ICAgKiBodG1sL0ZpbGVJbnB1dFR5cGUuaDoKKyAgICAgICAgKiBodG1sL0Zvcm1Bc3NvY2lhdGVk
RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwOgorICAgICAg
ICAqIGh0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAg
ICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEtleWdl
bkVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTEtleWdlbkVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTE9iamVj
dEVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxTZWxl
Y3RFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAg
ICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hpZGRl
bklucHV0VHlwZS5jcHA6CisgICAgICAgICogaHRtbC9IaWRkZW5JbnB1dFR5cGUuaDoKKyAgICAg
ICAgKiBodG1sL0ltYWdlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKiBodG1sL0ltYWdlSW5wdXRU
eXBlLmg6CisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuY3BwOgorICAgICAgICAqIGh0bWwvSW5w
dXRUeXBlLmg6CisgICAgICAgICogaHRtbC9TdWJtaXRJbnB1dFR5cGUuY3BwOgorICAgICAgICAq
IGh0bWwvU3VibWl0SW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5
cGUuY3BwOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmg6CisKKyAgICAgICAg
ICAgIFVwZGF0ZSB0byB1c2UgRE9NRm9ybURhdGEgZGlyZWN0bHksIHJhdGhlciB0aGFuIHRoZSBG
b3JtRGF0YUxpc3QsIHdoaWNoIAorICAgICAgICAgICAgaGFzIGJlZW4gcmVtb3ZlZC4KKworICAg
ICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHA6CisKKyAgICAgICAgICAg
IFJlbW92ZSB1bm5lY2Vzc2FyeSAjaW5jbHVkZSBvZiB1bnVzZWQgKGFuZCBub3cgcmVtb3ZlZCkg
Rm9ybURhdGFMaXN0LmgKKwogMjAxNy0wOS0xMSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVo
QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TIFdLMl0gU3VwcG9ydCB0YXBwaW5nIHRvIGFkZCBp
dGVtcyB0byB0aGUgY3VycmVudCBkcmFnIHNlc3Npb24gaW4gd2ViIGNvbnRlbnQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTc5Niw3ICsxNzk2LDYgQEAgc2V0KFdlYkNv
cmVfU09VUkNFUwogICAgIGh0bWwvRmlsZUlucHV0VHlwZS5jcHAKICAgICBodG1sL0Zvcm1Bc3Nv
Y2lhdGVkRWxlbWVudC5jcHAKICAgICBodG1sL0Zvcm1Db250cm9sbGVyLmNwcAotICAgIGh0bWwv
Rm9ybURhdGFMaXN0LmNwcAogICAgIGh0bWwvR2VuZXJpY0NhY2hlZEhUTUxDb2xsZWN0aW9uLmNw
cAogICAgIGh0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwCiAgICAgaHRtbC9IVE1MQW5jaG9yRWxl
bWVudC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5j
cHAJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0
Y2hCb2R5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBGZXRjaEJvZHkgRmV0
Y2hCb2R5OjpleHRyYWN0KFNjcmlwdEV4ZWN1CiAgICAgICAgIHJldHVybiBGZXRjaEJvZHkoV1RG
TW92ZShibG9iKSk7CiAgICAgfSwgWyZdKFJlZlB0cjxET01Gb3JtRGF0YT4mIHZhbHVlKSBtdXRh
YmxlIHsKICAgICAgICAgUmVmPERPTUZvcm1EYXRhPiBkb21Gb3JtRGF0YSA9IHZhbHVlLnJlbGVh
c2VOb25OdWxsKCk7Ci0gICAgICAgIGF1dG8gZm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlTXVs
dGlQYXJ0KGRvbUZvcm1EYXRhLmdldCgpLCBkb21Gb3JtRGF0YS0+ZW5jb2RpbmcoKSwgJnN0YXRp
Y19jYXN0PERvY3VtZW50Jj4oY29udGV4dCkpOworICAgICAgICBhdXRvIGZvcm1EYXRhID0gRm9y
bURhdGE6OmNyZWF0ZU11bHRpUGFydChkb21Gb3JtRGF0YS5nZXQoKSwgJnN0YXRpY19jYXN0PERv
Y3VtZW50Jj4oY29udGV4dCkpOwogICAgICAgICBjb250ZW50VHlwZSA9IG1ha2VTdHJpbmcoIm11
bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIsIGZvcm1EYXRhLT5ib3VuZGFyeSgpLmRhdGEo
KSk7CiAgICAgICAgIHJldHVybiBGZXRjaEJvZHkoV1RGTW92ZShmb3JtRGF0YSkpOwogICAgIH0s
IFsmXShSZWZQdHI8VVJMU2VhcmNoUGFyYW1zPiYgdmFsdWUpIG11dGFibGUgewpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NzU1LDggKzQ3NTUsNiBAQAogCQlBODEzNjlF
MzA5NzM3NEY2MDBENzQ0NjMgLyogSFRNTExhYmVsRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODEzNjlDNzA5NzM3NEY1MDBENzQ0NjMg
LyogSFRNTExhYmVsRWxlbWVudC5jcHAgKi87IH07CiAJCUE4MTM2OUU0MDk3Mzc0RjYwMEQ3NDQ2
MyAvKiBIVE1MS2V5Z2VuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTgxMzY5QzgwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxLZXlnZW5FbGVt
ZW50LmggKi87IH07CiAJCUE4MTM2OUU1MDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MS2V5Z2VuRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
ODEzNjlDOTA5NzM3NEY2MDBENzQ0NjMgLyogSFRNTEtleWdlbkVsZW1lbnQuY3BwICovOyB9Owot
CQlBODEzNkQzODA5NzNBOEU3MDBENzQ0NjMgLyogRm9ybURhdGFMaXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODEzNkQzNjA5NzNBOEU3MDBENzQ0
NjMgLyogRm9ybURhdGFMaXN0LmggKi87IH07Ci0JCUE4MTM2RDM5MDk3M0E4RTcwMEQ3NDQ2MyAv
KiBGb3JtRGF0YUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTgxMzZEMzcwOTczQThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5jcHAgKi87
IH07CiAJCUE4MTg1RjM5MDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVudFR5cGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg1RjMxMDk3NjU3NjUw
MDU4MjZEOSAvKiBEb2N1bWVudFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBODE4NUYzQTA5NzY1NzY2MDA1ODI2RDkgLyogRG9jdW1lbnRU
eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
MTg1RjMyMDk3NjU3NjUwMDU4MjZEOSAvKiBEb2N1bWVudFR5cGUuY3BwICovOyB9OwogCQlBODE4
NUYzQjA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg1RjMzMDk3NjU3NjUwMDU4MjZE
OSAvKiBET01JbXBsZW1lbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xMzIxNCw4ICsxMzIxMiw2IEBACiAJCUE4MTM2OUM3MDk3Mzc0
RjUwMEQ3NDQ2MyAvKiBIVE1MTGFiZWxFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBIVE1MTGFiZWxFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTgxMzY5QzgwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxLZXlnZW5FbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MS2V5Z2VuRWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODEzNjlDOTA5NzM3NEY2MDBENzQ0NjMg
LyogSFRNTEtleWdlbkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEhUTUxLZXlnZW5FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQTgxMzZEMzYwOTczQThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybURhdGFMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUE4MTM2RDM3MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1EYXRhTGlzdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MTg1RjMxMDk3NjU3NjUwMDU4MjZEOSAv
KiBEb2N1bWVudFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvY3Vt
ZW50VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE4NUYzMjA5NzY1NzY1
MDA1ODI2RDkgLyogRG9jdW1lbnRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEb2N1bWVudFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBODE4NUYzMzA5NzY1NzY1MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUltcGxlbWVudGF0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDU5MSw4ICsyMDU4Nyw2IEBACiAJCQkJNEEwREEyRkQx
MjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oICovLAogCQkJCUY1MDY2
NEY1MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJRjUwNjY0
RjYxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmggKi8sCi0JCQkJQTgxMzZEMzcw
OTczQThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5jcHAgKi8sCi0JCQkJQTgxMzZEMzYwOTcz
QThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5oICovLAogCQkJCTlCNTBCMURDMTdDRDRDMEYw
MDg3RjYzQyAvKiBGb3JtTmFtZWRJdGVtLmggKi8sCiAJCQkJOTcyMDVBQUQxMjM5MjhDQTAwQjE3
MzgwIC8qIEZUUERpcmVjdG9yeURvY3VtZW50LmNwcCAqLywKIAkJCQk5NzIwNUFBRTEyMzkyOENB
MDBCMTczODAgLyogRlRQRGlyZWN0b3J5RG9jdW1lbnQuaCAqLywKQEAgLTI3Nzg4LDcgKzI3Nzgy
LDYgQEAKIAkJCQlGNTA2NjRGODE1N0Y1MkRDMDBBQzIyNkYgLyogRm9ybUNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxNEM3NjcwMENFOTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1QjkyQkIwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRh
QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTgxMzZEMzgwOTczQThFNzAwRDc0NDYzIC8q
IEZvcm1EYXRhTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VFNjg0NjcxMkQyNkUzODAwRTc5
NDE1IC8qIEZvcm1EYXRhU3RyZWFtQ0ZOZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNEM3NjRF
MENFOTIzNEUwMDdFRjNDRCAvKiBGb3JtRGF0YVN0cmVhbU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOUI1MEIxREUxN0NENEMwRjAwODdGNjNDIC8qIEZvcm1OYW1lZEl0ZW0uaCBpbiBIZWFkZXJz
ICovLApAQCAtMzE4MjgsNyArMzE4MjEsNiBAQAogCQkJCUY1MDY2NEY3MTU3RjUyREMwMEFDMjI2
RiAvKiBGb3JtQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTRDNzY2RjBDRTky
M0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDg1QjkyQkEw
RUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlBODEzNkQzOTA5NzNBOEU3MDBENzQ0NjMgLyogRm9ybURhdGFMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdFRTY4NDY2MTJEMjZFMzgwMEU3OTQxNSAvKiBGb3JtRGF0YVN0cmVhbUNGTmV0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3NjRGMENFOTIzNEUwMDdFRjNDRCAvKiBGb3Jt
RGF0YVN0cmVhbU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTY1NkQzNzNCMEFEQkE1REUwMEE0
NTU0RCAvKiBGb3JtU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5jcHAJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgYm9vbCBCYXNlQnV0dG9uSW5wdXRUeXBlOjpzaG91bGRTYXZlQW5k
UgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBCYXNlQnV0dG9uSW5wdXRUeXBlOjphcHBl
bmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBib29sKSBjb25zdAorYm9vbCBCYXNlQnV0dG9uSW5w
dXRUeXBlOjphcHBlbmRGb3JtRGF0YShET01Gb3JtRGF0YSYsIGJvb2wpIGNvbnN0CiB7CiAgICAg
Ly8gQnV0dG9ucyBleGNlcHQgb3ZlcnJpZGRlbiB0eXBlcyBhcmUgbmV2ZXIgc3VjY2Vzc2Z1bC4K
ICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VCdXR0b25J
bnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VCdXR0b25J
bnB1dFR5cGUuaAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9CYXNl
QnV0dG9uSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHJvdGVj
dGVkOgogCiBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJv
bFN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0
YUxpc3QmLCBib29sKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGVuZEZvcm1EYXRhKERP
TUZvcm1EYXRhJiwgYm9vbCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVuZGVyUHRyPFJlbmRlckVs
ZW1lbnQ+IGNyZWF0ZUlucHV0UmVuZGVyZXIoUmVuZGVyU3R5bGUmJikgb3ZlcnJpZGU7CiAgICAg
Ym9vbCBzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpIG92ZXJyaWRlOwogICAgIHZv
aWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvcikg
b3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlu
cHV0VHlwZS5jcHAJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFz
ZUNoZWNrYWJsZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJCYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmgi
CiAKKyNpbmNsdWRlICJET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKQEAg
LTUzLDExICs1MywxMSBAQCB2b2lkIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OnJlc3RvcmVGb3Jt
CiAgICAgZWxlbWVudCgpLnNldENoZWNrZWQoc3RhdGVbMF0gPT0gIm9uIik7CiB9CiAKLWJvb2wg
QmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiBlbmNv
ZGluZywgYm9vbCkgY29uc3QKK2Jvb2wgQmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6YXBwZW5kRm9y
bURhdGEoRE9NRm9ybURhdGEmIGZvcm1EYXRhLCBib29sKSBjb25zdAogewogICAgIGlmICghZWxl
bWVudCgpLmNoZWNrZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVuY29kaW5nLmFw
cGVuZERhdGEoZWxlbWVudCgpLm5hbWUoKSwgZWxlbWVudCgpLnZhbHVlKCkpOworICAgIGZvcm1E
YXRhLmFwcGVuZChlbGVtZW50KCkubmFtZSgpLCBlbGVtZW50KCkudmFsdWUoKSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlu
cHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJs
ZUlucHV0VHlwZS5oCShyZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0Jh
c2VDaGVja2FibGVJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBw
cm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIEZvcm1Db250cm9sU3RhdGUgc2F2ZUZvcm1Db250cm9s
U3RhdGUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHJlc3RvcmVGb3JtQ29udHJvbFN0YXRl
KGNvbnN0IEZvcm1Db250cm9sU3RhdGUmKSBvdmVycmlkZTsKLSAgICBib29sIGFwcGVuZEZvcm1E
YXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwZW5k
Rm9ybURhdGEoRE9NRm9ybURhdGEmLCBib29sKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGhh
bmRsZUtleXByZXNzRXZlbnQoS2V5Ym9hcmRFdmVudCYpIG92ZXJyaWRlOwogICAgIGJvb2wgY2Fu
U2V0U3RyaW5nVmFsdWUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGFjY2Vzc0tleUFjdGlv
bihib29sIHNlbmRNb3VzZUV2ZW50cykgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0RPTUZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RP
TUZvcm1EYXRhLmNwcAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9E
T01Gb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEyICszNywxMiBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBET01Gb3JtRGF0YTo6RE9NRm9ybURhdGEoY29uc3QgVGV4dEVuY29k
aW5nJiBlbmNvZGluZykKLSAgICA6IEZvcm1EYXRhTGlzdChlbmNvZGluZykKKyAgICA6IG1fZW5j
b2RpbmcoZW5jb2RpbmcpCiB7CiB9CiAKIERPTUZvcm1EYXRhOjpET01Gb3JtRGF0YShIVE1MRm9y
bUVsZW1lbnQqIGZvcm0pCi0gICAgOiBGb3JtRGF0YUxpc3QoVVRGOEVuY29kaW5nKCkpCisgICAg
OiBtX2VuY29kaW5nKFVURjhFbmNvZGluZygpKQogewogICAgIGlmICghZm9ybSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNTMsMTQgKzUzLDI2IEBAIERPTUZvcm1EYXRhOjpET01Gb3JtRGF0YShIVE1M
Rm9ybUVsZW1lbnQKICAgICB9CiB9CiAKKy8vIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8j
Y3JlYXRlLWFuLWVudHJ5CithdXRvIERPTUZvcm1EYXRhOjpjcmVhdGVGaWxlRW50cnkoY29uc3Qg
U3RyaW5nJiBuYW1lLCBCbG9iJiBibG9iLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSAtPiBJdGVt
Cit7CisgICAgaWYgKCFibG9iLmlzRmlsZSgpKQorICAgICAgICByZXR1cm4geyBuYW1lLCBGaWxl
OjpjcmVhdGUoYmxvYiwgZmlsZW5hbWUuaXNOdWxsKCkgPyBBU0NJSUxpdGVyYWwoImJsb2IiKSA6
IGZpbGVuYW1lKSB9OworICAgIAorICAgIGlmICghZmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiB7IG5hbWUsIEZpbGU6OmNyZWF0ZShkb3duY2FzdDxGaWxlPihibG9iKSwgZmlsZW5h
bWUpIH07CisKKyAgICByZXR1cm4geyBuYW1lLCBSZWZQdHI8RmlsZT4geyAmZG93bmNhc3Q8Rmls
ZT4oYmxvYikgfSB9OworfQorCiB2b2lkIERPTUZvcm1EYXRhOjphcHBlbmQoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGFwcGVuZERhdGEobmFtZSwgdmFs
dWUpOworICAgIG1faXRlbXMuYXBwZW5kKHsgbmFtZSwgdmFsdWUgfSk7CiB9CiAKIHZvaWQgRE9N
Rm9ybURhdGE6OmFwcGVuZChjb25zdCBTdHJpbmcmIG5hbWUsIEJsb2ImIGJsb2IsIGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUpCiB7Ci0gICAgYXBwZW5kQmxvYihuYW1lLCBibG9iLCBmaWxlbmFtZSk7
CisgICAgbV9pdGVtcy5hcHBlbmQoY3JlYXRlRmlsZUVudHJ5KG5hbWUsIGJsb2IsIGZpbGVuYW1l
KSk7CiB9CiAKIHZvaWQgRE9NRm9ybURhdGE6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCkBA
IC0xMDQsMTIgKzExNiwzNiBAQCBib29sIERPTUZvcm1EYXRhOjpoYXMoY29uc3QgU3RyaW5nJiBu
YW1lCiAKIHZvaWQgRE9NRm9ybURhdGE6OnNldChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCiB7Ci0gICAgc2V0RGF0YShuYW1lLCB2YWx1ZSk7CisgICAgc2V0KG5hbWUs
IHsgbmFtZSwgdmFsdWUgfSk7CiB9CiAKIHZvaWQgRE9NRm9ybURhdGE6OnNldChjb25zdCBTdHJp
bmcmIG5hbWUsIEJsb2ImIGJsb2IsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCiB7Ci0gICAgc2V0
QmxvYihuYW1lLCBibG9iLCBmaWxlbmFtZSk7CisgICAgc2V0KG5hbWUsIGNyZWF0ZUZpbGVFbnRy
eShuYW1lLCBibG9iLCBmaWxlbmFtZSkpOworfQorCit2b2lkIERPTUZvcm1EYXRhOjpzZXQoY29u
c3QgU3RyaW5nJiBuYW1lLCBJdGVtJiYgaXRlbSkKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPHNpemVf
dD4gaW5pdGlhbE1hdGNoTG9jYXRpb247CisKKyAgICAvLyBGaW5kIGxvY2F0aW9uIG9mIHRoZSBm
aXJzdCBpdGVtIHdpdGggYSBtYXRjaGluZyBuYW1lLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9pdGVtcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobmFtZSA9PSBtX2l0ZW1zW2ld
Lm5hbWUpIHsKKyAgICAgICAgICAgIGluaXRpYWxNYXRjaExvY2F0aW9uID0gaTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluaXRpYWxNYXRjaExvY2F0
aW9uKSB7CisgICAgICAgIG1faXRlbXNbKmluaXRpYWxNYXRjaExvY2F0aW9uXSA9IFdURk1vdmUo
aXRlbSk7CisKKyAgICAgICAgbV9pdGVtcy5yZW1vdmVBbGxNYXRjaGluZyhbJm5hbWVdIChjb25z
dCBhdXRvJiBpdGVtKSB7CisgICAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lID09IG5hbWU7Cisg
ICAgICAgIH0sICppbml0aWFsTWF0Y2hMb2NhdGlvbiArIDEpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9pdGVtcy5hcHBlbmQoV1RGTW92ZShpdGVtKSk7CiB9CiAKIERPTUZvcm1E
YXRhOjpJdGVyYXRvcjo6SXRlcmF0b3IoRE9NRm9ybURhdGEmIHRhcmdldCkKQEAgLTExNywxNCAr
MTUzLDE0IEBAIERPTUZvcm1EYXRhOjpJdGVyYXRvcjo6SXRlcmF0b3IoRE9NRm9ybUQKIHsKIH0K
IAotc3RkOjpvcHRpb25hbDxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIERPTUZvcm1EYXRhOjpG
b3JtRGF0YUVudHJ5VmFsdWU+PiBET01Gb3JtRGF0YTo6SXRlcmF0b3I6Om5leHQoKQorc3RkOjpv
cHRpb25hbDxLZXlWYWx1ZVBhaXI8U3RyaW5nLCBET01Gb3JtRGF0YTo6Rm9ybURhdGFFbnRyeVZh
bHVlPj4gRE9NRm9ybURhdGE6Okl0ZXJhdG9yOjpuZXh0KCkKIHsKICAgICBhdXRvJiBpdGVtcyA9
IG1fdGFyZ2V0LT5pdGVtcygpOwogICAgIGlmIChtX2luZGV4ID49IGl0ZW1zLnNpemUoKSkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIGF1dG8mIGl0ZW0gPSBpdGVtc1ttX2lu
ZGV4KytdOwotICAgIHJldHVybiBXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIEZvcm1EYXRhRW50
cnlWYWx1ZT4geyBpdGVtLm5hbWUsIGl0ZW0uZGF0YSB9OworICAgIHJldHVybiBtYWtlS2V5VmFs
dWVQYWlyKGl0ZW0ubmFtZSwgaXRlbS5kYXRhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuaAkocmV2aXNpb24gMjIxOTAwKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwy
NCArMzAsMzIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIK
KyNpbmNsdWRlICJGaWxlLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQmxvYjsKIGNs
YXNzIEhUTUxGb3JtRWxlbWVudDsKLWNsYXNzIFRleHRFbmNvZGluZzsKIAotLy8gRklYTUU6IERv
IHdlIG5lZWQgdG8gaGF2ZSBzZXBhcmF0ZSBET01Gb3JtRGF0YSBhbmQgRm9ybURhdGFMaXN0IGNs
YXNzZXM/Ci1jbGFzcyBET01Gb3JtRGF0YSA6IHB1YmxpYyBGb3JtRGF0YUxpc3QsIHB1YmxpYyBS
ZWZDb3VudGVkPERPTUZvcm1EYXRhPiB7CitjbGFzcyBET01Gb3JtRGF0YSA6IHB1YmxpYyBSZWZD
b3VudGVkPERPTUZvcm1EYXRhPiB7CiBwdWJsaWM6CisgICAgdXNpbmcgRm9ybURhdGFFbnRyeVZh
bHVlID0gVmFyaWFudDxSZWZQdHI8RmlsZT4sIFN0cmluZz47CisKKyAgICBzdHJ1Y3QgSXRlbSB7
CisgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICBGb3JtRGF0YUVudHJ5VmFsdWUgZGF0YTsK
KyAgICB9OworCiAgICAgc3RhdGljIFJlZjxET01Gb3JtRGF0YT4gY3JlYXRlKEhUTUxGb3JtRWxl
bWVudCogZm9ybSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01Gb3JtRGF0YShmb3JtKSk7IH0K
ICAgICBzdGF0aWMgUmVmPERPTUZvcm1EYXRhPiBjcmVhdGUoY29uc3QgVGV4dEVuY29kaW5nJiBl
bmNvZGluZykgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01Gb3JtRGF0YShlbmNvZGluZykpOyB9
CiAKLSAgICB1c2luZyBGb3JtRGF0YUVudHJ5VmFsdWUgPSBJdGVtOjpEYXRhOworICAgIGNvbnN0
IFZlY3RvcjxJdGVtPiYgaXRlbXMoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1zOyB9CisgICAgY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2Rpbmc7IH0K
IAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSk7CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBuYW1lLCBCbG9iJiwgY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSA9IHsgfSk7CkBAIC02MSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICBjbGFz
cyBJdGVyYXRvciB7CiAgICAgcHVibGljOgogICAgICAgICBleHBsaWNpdCBJdGVyYXRvcihET01G
b3JtRGF0YSYpOwotICAgICAgICBzdGQ6Om9wdGlvbmFsPFdURjo6S2V5VmFsdWVQYWlyPFN0cmlu
ZywgRm9ybURhdGFFbnRyeVZhbHVlPj4gbmV4dCgpOworICAgICAgICBzdGQ6Om9wdGlvbmFsPEtl
eVZhbHVlUGFpcjxTdHJpbmcsIEZvcm1EYXRhRW50cnlWYWx1ZT4+IG5leHQoKTsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIFJlZjxET01Gb3JtRGF0YT4gbV90YXJnZXQ7CkBAIC03Miw2ICs4MCwx
MiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IERPTUZvcm1EYXRhKGNvbnN0IFRl
eHRFbmNvZGluZyYpOwogICAgIGV4cGxpY2l0IERPTUZvcm1EYXRhKEhUTUxGb3JtRWxlbWVudCop
OworCisgICAgSXRlbSBjcmVhdGVGaWxlRW50cnkoY29uc3QgU3RyaW5nJiBuYW1lLCBCbG9iJiwg
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7CisgICAgdm9pZCBzZXQoY29uc3QgU3RyaW5nJiBuYW1l
LCBJdGVtJiYpOworCisgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7CisgICAgVmVjdG9yPEl0
ZW0+IG1faXRlbXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIz
LDcgQEAKICNpbmNsdWRlICJGaWxlSW5wdXRUeXBlLmgiCiAKICNpbmNsdWRlICJDaHJvbWUuaCIK
KyNpbmNsdWRlICJET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUgIkRyYWdEYXRhLmgiCiAjaW5jbHVk
ZSAiRWxlbWVudENoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJFdmVudC5oIgpAQCAtMzEsNyAr
MzIsNiBAQAogI2luY2x1ZGUgIkZpbGVMaXN0Q3JlYXRvci5oIgogI2luY2x1ZGUgIkZpbGVTeXN0
ZW0uaCIKICNpbmNsdWRlICJGb3JtQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZvcm1EYXRhTGlz
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNzMsMTQgKzczLDE0IEBAIHByaXZhdGU6CiAKIFJl
ZjxVcGxvYWRCdXR0b25FbGVtZW50PiBVcGxvYWRCdXR0b25FbGVtZW50OjpjcmVhdGUoRG9jdW1l
bnQmIGRvY3VtZW50KQogewotICAgIFJlZjxVcGxvYWRCdXR0b25FbGVtZW50PiBidXR0b24gPSBh
ZG9wdFJlZigqbmV3IFVwbG9hZEJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKKyAgICBhdXRvIGJ1
dHRvbiA9IGFkb3B0UmVmKCpuZXcgVXBsb2FkQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwogICAg
IGJ1dHRvbi0+c2V0VmFsdWUoZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCgpKTsKICAgICByZXR1
cm4gYnV0dG9uOwogfQogCiBSZWY8VXBsb2FkQnV0dG9uRWxlbWVudD4gVXBsb2FkQnV0dG9uRWxl
bWVudDo6Y3JlYXRlRm9yTXVsdGlwbGUoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIFJlZjxV
cGxvYWRCdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJlZigqbmV3IFVwbG9hZEJ1dHRvbkVs
ZW1lbnQoZG9jdW1lbnQpKTsKKyAgICBhdXRvIGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgVXBsb2Fk
QnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwogICAgIGJ1dHRvbi0+c2V0VmFsdWUoZmlsZUJ1dHRv
bkNob29zZU11bHRpcGxlRmlsZXNMYWJlbCgpKTsKICAgICByZXR1cm4gYnV0dG9uOwogfQpAQCAt
MTQ3LDkgKzE0NywxMSBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6OnJlc3RvcmVGb3JtQ29udHJvbFN0
CiAgICAgZmlsZXNDaG9zZW4oZmlsZXNGcm9tRm9ybUNvbnRyb2xTdGF0ZShzdGF0ZSkpOwogfQog
Ci1ib29sIEZpbGVJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYgZW5jb2Rp
bmcsIGJvb2wgbXVsdGlwYXJ0KSBjb25zdAorYm9vbCBGaWxlSW5wdXRUeXBlOjphcHBlbmRGb3Jt
RGF0YShET01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wgbXVsdGlwYXJ0KSBjb25zdAogewotICAg
IEZpbGVMaXN0KiBmaWxlTGlzdCA9IGVsZW1lbnQoKS5maWxlcygpOworICAgIGF1dG8gbmFtZSA9
IGVsZW1lbnQoKS5uYW1lKCk7CisKKyAgICBhdXRvKiBmaWxlTGlzdCA9IGVsZW1lbnQoKS5maWxl
cygpOwogICAgIHVuc2lnbmVkIG51bUZpbGVzID0gZmlsZUxpc3QtPmxlbmd0aCgpOwogICAgIGlm
ICghbXVsdGlwYXJ0KSB7CiAgICAgICAgIC8vIFNlbmQgb25seSB0aGUgYmFzZW5hbWVzLgpAQCAt
MTYwLDE5ICsxNjIsMTkgQEAgYm9vbCBGaWxlSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShGb3Jt
RAogICAgICAgICAvLyBzdWJtaXNzaW9uIG9mIGZpbGUgaW5wdXRzLCBhbmQgRmlyZWZveCBkb2Vz
bid0IGFkZCAibmFtZT0iIHF1ZXJ5CiAgICAgICAgIC8vIHBhcmFtZXRlci4KICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZpbGVzOyArK2kpCi0gICAgICAgICAgICBlbmNvZGlu
Zy5hcHBlbmREYXRhKGVsZW1lbnQoKS5uYW1lKCksIGZpbGVMaXN0LT5pdGVtKGkpLT5uYW1lKCkp
OworICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIGZpbGVMaXN0LT5pdGVtKGkpLT5u
YW1lKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBJZiBubyBmaWxl
bmFtZSBhdCBhbGwgaXMgZW50ZXJlZCwgcmV0dXJuIHN1Y2Nlc3NmdWwgYnV0IGVtcHR5LgogICAg
IC8vIE51bGwgd291bGQgYmUgbW9yZSBsb2dpY2FsLCBidXQgTmV0c2NhcGUgcG9zdHMgYW4gZW1w
dHkgZmlsZS4gQXJnaC4KICAgICBpZiAoIW51bUZpbGVzKSB7Ci0gICAgICAgIGVuY29kaW5nLmFw
cGVuZEJsb2IoZWxlbWVudCgpLm5hbWUoKSwgRmlsZTo6Y3JlYXRlKGVtcHR5U3RyaW5nKCkpKTsK
KyAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIEZpbGU6OmNyZWF0ZShlbXB0eVN0cmluZygp
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1GaWxlczsgKytpKQotICAgICAgICBlbmNvZGluZy5hcHBlbmRCbG9iKGVsZW1l
bnQoKS5uYW1lKCksICpmaWxlTGlzdC0+aXRlbShpKSk7CisgICAgICAgIGZvcm1EYXRhLmFwcGVu
ZChuYW1lLCAqZmlsZUxpc3QtPml0ZW0oaSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAkocmV2aXNpb24gMjIxOTAwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcg
KzU0LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlw
ZSgpIGNvbnN0IGZpbmFsOwogICAgIEZvcm1Db250cm9sU3RhdGUgc2F2ZUZvcm1Db250cm9sU3Rh
dGUoKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIHJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKGNvbnN0
IEZvcm1Db250cm9sU3RhdGUmKSBmaW5hbDsKLSAgICBib29sIGFwcGVuZEZvcm1EYXRhKEZvcm1E
YXRhTGlzdCYsIGJvb2wpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgYXBwZW5kRm9ybURhdGEoRE9N
Rm9ybURhdGEmLCBib29sKSBjb25zdCBmaW5hbDsKICAgICBib29sIHZhbHVlTWlzc2luZyhjb25z
dCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKICAgICBTdHJpbmcgdmFsdWVNaXNzaW5nVGV4dCgpIGNv
bnN0IGZpbmFsOwogICAgIHZvaWQgaGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCYpIGZpbmFs
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oCShy
ZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw5IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIENvbnRhaW5lck5vZGU7CitjbGFzcyBET01Gb3JtRGF0YTsKIGNsYXNzIERv
Y3VtZW50OwogY2xhc3MgRm9ybUF0dHJpYnV0ZVRhcmdldE9ic2VydmVyOwotY2xhc3MgRm9ybURh
dGFMaXN0OwogY2xhc3MgSFRNTEVsZW1lbnQ7CiBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiBjbGFz
cyBOb2RlOwpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAKICAgICAvLyBPdmVycmlkZSBpbiBk
ZXJpdmVkIGNsYXNzZXMgdG8gZ2V0IHRoZSBlbmNvZGVkIG5hbWU9dmFsdWUgcGFpciBmb3Igc3Vi
bWl0dGluZy4KICAgICAvLyBSZXR1cm4gdHJ1ZSBmb3IgYSBzdWNjZXNzZnVsIGNvbnRyb2wgKHNl
ZSBIVE1MNC0xNy4xMy4yKS4KLSAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURh
dGFMaXN0JiwgYm9vbCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYXBwZW5k
Rm9ybURhdGEoRE9NRm9ybURhdGEmLCBib29sKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdm9p
ZCBmb3JtV2lsbEJlRGVzdHJveWVkKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9y
bURhdGFMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1EYXRh
TGlzdC5jcHAJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybURh
dGFMaXN0LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKLQotI2lu
Y2x1ZGUgIkxpbmVFbmRpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotRm9ybURhdGFMaXN0OjpGb3JtRGF0YUxpc3QoY29uc3QgVGV4
dEVuY29kaW5nJiBlbmNvZGluZykKLSAgICA6IG1fZW5jb2RpbmcoZW5jb2RpbmcpCi17Ci19Ci0K
LUNTdHJpbmcgRm9ybURhdGFMaXN0Ojpub3JtYWxpemVTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYobV9lbmNv
ZGluZy5lbmNvZGUodmFsdWUsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7Ci19Ci0KLS8vIGh0
dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jY3JlYXRlLWFuLWVudHJ5Ci1hdXRvIEZvcm1EYXRh
TGlzdDo6Y3JlYXRlRmlsZUVudHJ5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPEJsb2I+JiYgYmxv
YiwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkgLT4gSXRlbQotewotICAgIGlmICghYmxvYi0+aXNG
aWxlKCkpCi0gICAgICAgIHJldHVybiB7IG5hbWUsIEZpbGU6OmNyZWF0ZShibG9iLmdldCgpLCBm
aWxlbmFtZS5pc051bGwoKSA/IEFTQ0lJTGl0ZXJhbCgiYmxvYiIpIDogZmlsZW5hbWUpIH07Ci0g
ICAgCi0gICAgaWYgKCFmaWxlbmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIHsgbmFtZSwg
RmlsZTo6Y3JlYXRlKGRvd25jYXN0PEZpbGU+KGJsb2IuZ2V0KCkpLCBmaWxlbmFtZSkgfTsKLQot
ICAgIHJldHVybiB7IG5hbWUsIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxGaWxlPihXVEZNb3ZlKGJs
b2IpKSB9OwotfQotCi12b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgbV9pdGVtcy5hcHBlbmQoeyBuYW1l
LCB2YWx1ZSB9KTsKLX0KLQotdm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZERhdGEoY29uc3QgU3Ry
aW5nJiBuYW1lLCBpbnQgdmFsdWUpCi17Ci0gICAgbV9pdGVtcy5hcHBlbmQoeyBuYW1lLCBTdHJp
bmc6Om51bWJlcih2YWx1ZSkgfSk7Ci19Ci0KLXZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRCbG9i
KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPEJsb2I+JiYgYmxvYiwgY29uc3QgU3RyaW5nJiBmaWxl
bmFtZSkKLXsKLSAgICBtX2l0ZW1zLmFwcGVuZChjcmVhdGVGaWxlRW50cnkobmFtZSwgV1RGTW92
ZShibG9iKSwgZmlsZW5hbWUpKTsKLX0KLQotdm9pZCBGb3JtRGF0YUxpc3Q6OnNldChjb25zdCBT
dHJpbmcmIG5hbWUsIEl0ZW0mJiBpdGVtKQotewotICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBp
bml0aWFsTWF0Y2hMb2NhdGlvbjsKLQotICAgIC8vIEZpbmQgbG9jYXRpb24gb2YgdGhlIGZpcnN0
IGl0ZW0gd2l0aCBhIG1hdGNoaW5nIG5hbWUuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2l0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChuYW1lID09IG1faXRlbXNbaV0ubmFt
ZSkgewotICAgICAgICAgICAgaW5pdGlhbE1hdGNoTG9jYXRpb24gPSBpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaW5pdGlhbE1hdGNoTG9jYXRpb24p
IHsKLSAgICAgICAgbV9pdGVtc1sqaW5pdGlhbE1hdGNoTG9jYXRpb25dID0gV1RGTW92ZShpdGVt
KTsKLQotICAgICAgICBtX2l0ZW1zLnJlbW92ZUFsbE1hdGNoaW5nKFsmbmFtZV0gKGNvbnN0IGF1
dG8mIGl0ZW0pIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUgPT0gbmFtZTsKLSAgICAg
ICAgfSwgKmluaXRpYWxNYXRjaExvY2F0aW9uICsgMSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX2l0ZW1zLmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKLX0KLQotdm9pZCBGb3JtRGF0
YUxpc3Q6OnNldERhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIHNldChuYW1lLCB7IG5hbWUsIHZhbHVlIH0pOwotfQotCi12b2lkIEZvcm1EYXRhTGlz
dDo6c2V0QmxvYihjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxCbG9iPiYmIGJsb2IsIGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUpCi17Ci0gICAgc2V0KG5hbWUsIGNyZWF0ZUZpbGVFbnRyeShuYW1lLCBX
VEZNb3ZlKGJsb2IpLCBmaWxlbmFtZSkpOwotfQotCi19CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBz
dm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgJKHJldmlzaW9uIDIy
MTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgJKG5vbmV4aXN0ZW50
KQpAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiRmlsZS5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBGb3JtRGF0YUxpc3QgewotcHVibGljOgotICAgIHN0cnVjdCBJdGVtIHsKLSAg
ICAgICAgdXNpbmcgRGF0YSA9IFZhcmlhbnQ8UmVmUHRyPEZpbGU+LCBTdHJpbmc+OwotCi0gICAg
ICAgIFN0cmluZyBuYW1lOwotICAgICAgICBEYXRhIGRhdGE7Ci0gICAgfTsKLQotICAgIHZvaWQg
YXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAg
IHZvaWQgYXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGludCB2YWx1ZSk7Ci0gICAgdm9p
ZCBhcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPEJsb2I+JiYsIGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUgPSB7IH0pOwotICAgIHZvaWQgc2V0RGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgc2V0QmxvYihjb25zdCBTdHJpbmcmIG5h
bWUsIFJlZjxCbG9iPiYmLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lID0geyB9KTsKLQotICAgIGNv
bnN0IFZlY3RvcjxJdGVtPiYgaXRlbXMoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1zOyB9Ci0gICAg
Y29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2Rpbmc7
IH0KLQotICAgIENTdHJpbmcgbm9ybWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYpIGNvbnN0Owot
Ci1wcm90ZWN0ZWQ6Ci0gICAgRm9ybURhdGFMaXN0KGNvbnN0IFRleHRFbmNvZGluZyYpOwotCi0g
ICAgSXRlbSBjcmVhdGVGaWxlRW50cnkoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8QmxvYj4mJiwg
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7Ci0gICAgdm9pZCBzZXQoY29uc3QgU3RyaW5nJiBuYW1l
LCBJdGVtJiYpOwotCi0gICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7Ci0gICAgVmVjdG9yPEl0
ZW0+IG1faXRlbXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVs
ZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1
dHRvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTEJ1dHRvbkVsZW1lbnQuaCIKIAorI2luY2x1ZGUg
IkRPTUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZvcm1E
YXRhTGlzdC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKQEAgLTE4NCwxMSArMTg0LDExIEBA
IHZvaWQgSFRNTEJ1dHRvbkVsZW1lbnQ6OnNldEFjdGl2YXRlZFN1Ym0KICAgICBtX2lzQWN0aXZh
dGVkU3VibWl0ID0gZmxhZzsKIH0KIAotYm9vbCBIVE1MQnV0dG9uRWxlbWVudDo6YXBwZW5kRm9y
bURhdGEoRm9ybURhdGFMaXN0JiBmb3JtRGF0YSwgYm9vbCkKK2Jvb2wgSFRNTEJ1dHRvbkVsZW1l
bnQ6OmFwcGVuZEZvcm1EYXRhKERPTUZvcm1EYXRhJiBmb3JtRGF0YSwgYm9vbCkKIHsKICAgICBp
ZiAobV90eXBlICE9IFNVQk1JVCB8fCBuYW1lKCkuaXNFbXB0eSgpIHx8ICFtX2lzQWN0aXZhdGVk
U3VibWl0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9ybURhdGEuYXBwZW5kRGF0YShu
YW1lKCksIHZhbHVlKCkpOworICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lKCksIHZhbHVlKCkpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0
b25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9u
RWxlbWVudC5oCShyZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxC
dXR0b25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBj
b25zdCBmaW5hbDsKICAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBmaW5hbDsK
IAotICAgIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkgZmluYWw7Cisg
ICAgYm9vbCBhcHBlbmRGb3JtRGF0YShET01Gb3JtRGF0YSYsIGJvb2wpIGZpbmFsOwogCiAgICAg
Ym9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICBi
b29sIHN1cHBvcnRMYWJlbHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkocmV2aXNpb24g
MjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBGb3JtRGF0YUxpc3Q7CitjbGFzcyBET01Gb3JtRGF0YTsKIGNsYXNzIEhUTUxGaWVs
ZFNldEVsZW1lbnQ7CiBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiBjbGFzcyBIVE1MTGVnZW5kRWxl
bWVudDsKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGljOgogCiAgICAgLy8gT3ZlcnJpZGUgaW4gZGVy
aXZlZCBjbGFzc2VzIHRvIGdldCB0aGUgZW5jb2RlZCBuYW1lPXZhbHVlIHBhaXIgZm9yIHN1Ym1p
dHRpbmcuCiAgICAgLy8gUmV0dXJuIHRydWUgZm9yIGEgc3VjY2Vzc2Z1bCBjb250cm9sIChzZWUg
SFRNTDQtMTcuMTMuMikuCi0gICAgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBi
b29sKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgYXBwZW5kRm9ybURhdGEo
RE9NRm9ybURhdGEmLCBib29sKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmly
dHVhbCBib29sIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZhdGVkU3VibWl0KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAko
cmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcxLDkgKzg3MSw5IEBAIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6c2V0QWN0aXZhdGVkU3VibWkKICAgICBtX2lzQWN0aXZhdGVkU3VibWl0ID0gZmxhZzsK
IH0KIAotYm9vbCBIVE1MSW5wdXRFbGVtZW50OjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3Qm
IGVuY29kaW5nLCBib29sIG11bHRpcGFydCkKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6YXBwZW5k
Rm9ybURhdGEoRE9NRm9ybURhdGEmIGZvcm1EYXRhLCBib29sIG11bHRpcGFydCkKIHsKLSAgICBy
ZXR1cm4gbV9pbnB1dFR5cGUtPmlzRm9ybURhdGFBcHBlbmRhYmxlKCkgJiYgbV9pbnB1dFR5cGUt
PmFwcGVuZEZvcm1EYXRhKGVuY29kaW5nLCBtdWx0aXBhcnQpOworICAgIHJldHVybiBtX2lucHV0
VHlwZS0+aXNGb3JtRGF0YUFwcGVuZGFibGUoKSAmJiBtX2lucHV0VHlwZS0+YXBwZW5kRm9ybURh
dGEoZm9ybURhdGEsIG11bHRpcGFydCk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cmVz
ZXQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9u
IDIyMTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zODAsNyArMzgwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29weU5v
bkF0dHJpYnV0ZVByb3BlcnRpZXNGcm9tRWxlbWVudChjb25zdCBFbGVtZW50JikgZmluYWw7CiAK
LSAgICBib29sIGFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpIGZpbmFsOworICAg
IGJvb2wgYXBwZW5kRm9ybURhdGEoRE9NRm9ybURhdGEmLCBib29sKSBmaW5hbDsKIAogICAgIGJv
b2wgaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBtYXRj
aGVzRGVmYXVsdFBzZXVkb0NsYXNzKCkgY29uc3QgZmluYWw7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDkgKzI2LDkgQEAKICNpbmNsdWRlICJIVE1MS2V5Z2VuRWxlbWVudC5oIgogCiAjaW5jbHVkZSAi
QXR0cmlidXRlLmgiCisjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkVsZW1lbnRDaGlsZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiRm9ybURh
dGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgpAQCAtMTE1LDE1ICsxMTUs
MTUgQEAgU3RyaW5nIEhUTUxLZXlnZW5FbGVtZW50OjprZXl0eXBlKCkgY29ucwogICAgIHJldHVy
biBpc0tleXR5cGVSU0EoKSA/IEFTQ0lJTGl0ZXJhbCgicnNhIikgOiBlbXB0eVN0cmluZygpOwog
fQogCi1ib29sIEhUTUxLZXlnZW5FbGVtZW50OjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3Qm
IGVuY29kZWRfdmFsdWVzLCBib29sKQorYm9vbCBIVE1MS2V5Z2VuRWxlbWVudDo6YXBwZW5kRm9y
bURhdGEoRE9NRm9ybURhdGEmIGZvcm1EYXRhLCBib29sKQogewogICAgIC8vIE9ubHkgUlNBIGlz
IHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuCiAgICAgaWYgKCFpc0tleXR5cGVSU0EoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyB2YWx1ZSA9IHNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nZVN0cmluZyhzaGFkb3dTZWxlY3QoKS0+c2VsZWN0ZWRJbmRleCgpLCBhdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKGNoYWxsZW5nZUF0dHIpLCBkb2N1bWVudCgpLmJhc2VVUkwo
KSk7CisgICAgYXV0byB2YWx1ZSA9IHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhz
aGFkb3dTZWxlY3QoKS0+c2VsZWN0ZWRJbmRleCgpLCBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKGNoYWxsZW5nZUF0dHIpLCBkb2N1bWVudCgpLmJhc2VVUkwoKSk7CiAgICAgaWYgKHZh
bHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZW5jb2RlZF92YWx1ZXMu
YXBwZW5kRGF0YShuYW1lKCksIHZhbHVlKTsKKyAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSgpLCB2
YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEtleWdlbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxLZXlnZW5FbGVtZW50LmgJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEtleWdlbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgQXRvbWljU3RyaW5nJikgZmluYWw7CiAKLSAgICBib29sIGFwcGVuZEZvcm1EYXRhKEZv
cm1EYXRhTGlzdCYsIGJvb2wpIGZpbmFsOworICAgIGJvb2wgYXBwZW5kRm9ybURhdGEoRE9NRm9y
bURhdGEmLCBib29sKSBmaW5hbDsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9s
VHlwZSgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNPcHRpb25hbEZvcm1Db250cm9sKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWV0ZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZXRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBA
CiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIK
LSNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKICNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIy
MTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5j
bHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKLSNpbmNs
dWRlICJGb3JtRGF0YUxpc3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
TG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCkBAIC00OTEsNyArNDkxLDcgQEAg
dm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdQogICAgIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KG9sZERvY3VtZW50LCBuZXdEb2N1bWVu
dCk7CiB9CiAKLWJvb2wgSFRNTE9iamVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRh
TGlzdCYgZW5jb2RpbmcsIGJvb2wpCitib29sIEhUTUxPYmplY3RFbGVtZW50OjphcHBlbmRGb3Jt
RGF0YShET01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wpCiB7CiAgICAgaWYgKG5hbWUoKS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUwNCw3ICs1MDQsNyBAQCBib29sIEhU
TUxPYmplY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YShGCiAgICAgU3RyaW5nIHZhbHVlOwogICAg
IGlmICghZG93bmNhc3Q8UGx1Z2luVmlld0Jhc2U+KCp3aWRnZXQpLmdldEZvcm1WYWx1ZSh2YWx1
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbmNvZGluZy5hcHBlbmREYXRhKG5hbWUo
KSwgdmFsdWUpOworICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lKCksIHZhbHVlKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQu
aAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBpc0Zvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAK
ICAgICBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQot
ICAgIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkgZmluYWw7CisgICAg
Ym9vbCBhcHBlbmRGb3JtRGF0YShET01Gb3JtRGF0YSYsIGJvb2wpIGZpbmFsOwogCiAgICAgYm9v
bCBjYW5Db250YWluUmFuZ2VFbmRQb2ludCgpIGNvbnN0IGZpbmFsOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMjIxOTAwKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDExICsyOSwxMSBAQAogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAKICNp
bmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNs
dWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgiCi0jaW5jbHVk
ZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHZW5lcmlj
Q2FjaGVkSFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKQEAg
LTEwMzEsNyArMTAzMSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlTXVsdGlwbGVB
dHQKICAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSgpOwogfQog
Ci1ib29sIEhUTUxTZWxlY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmIGxp
c3QsIGJvb2wpCitib29sIEhUTUxTZWxlY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YShET01Gb3Jt
RGF0YSYgZm9ybURhdGEsIGJvb2wpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0g
dGhpcy0+bmFtZSgpOwogICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKQEAgLTEwNDAsNyArMTA0MCw3
IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEYKICAgICBib29sIHN1
Y2Nlc3NmdWwgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBsaXN0SXRlbXMoKSkg
ewogICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkgJiYgIWRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpIHsKLSAg
ICAgICAgICAgIGxpc3QuYXBwZW5kRGF0YShuYW1lLCBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dD4oKmVsZW1lbnQpLnZhbHVlKCkpOworICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUs
IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkudmFsdWUoKSk7CiAgICAgICAg
ICAgICBzdWNjZXNzZnVsID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMw
LDcgKzEzMCw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVy
ZXIoY29uc3QgTm9kZSYpIGNvbnN0IGZpbmFsOwogICAgIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50
PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBv
c2l0aW9uJikgZmluYWw7Ci0gICAgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBi
b29sKSBmaW5hbDsKKyAgICBib29sIGFwcGVuZEZvcm1EYXRhKERPTUZvcm1EYXRhJiwgYm9vbCkg
ZmluYWw7CiAKICAgICB2b2lkIHJlc2V0KCkgZmluYWw7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjIxOTAwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsMTMgKzI4LDEzIEBACiAKICNpbmNsdWRlICJCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJET01Gb3JtRGF0YS5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAi
RWxlbWVudENoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGb3JtQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZvcm1E
YXRhTGlzdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24u
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTIxNywxOSArMjE3LDE5IEBAIFJlbmRlclB0
cjxSZW5kZXJFbGVtZW50PiBIVE1MVGV4dEFyZWFFbGUKICAgICByZXR1cm4gY3JlYXRlUmVuZGVy
ZXI8UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CiB9
CiAKLWJvb2wgSFRNTFRleHRBcmVhRWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0
JiBlbmNvZGluZywgYm9vbCkKK2Jvb2wgSFRNTFRleHRBcmVhRWxlbWVudDo6YXBwZW5kRm9ybURh
dGEoRE9NRm9ybURhdGEmIGZvcm1EYXRhLCBib29sKQogewogICAgIGlmIChuYW1lKCkuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91
dCgpOwogCi0gICAgY29uc3QgU3RyaW5nJiB0ZXh0ID0gKG1fd3JhcCA9PSBIYXJkV3JhcCkgPyB2
YWx1ZVdpdGhIYXJkTGluZUJyZWFrcygpIDogdmFsdWUoKTsKLSAgICBlbmNvZGluZy5hcHBlbmRE
YXRhKG5hbWUoKSwgdGV4dCk7CisgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUoKSwgbV93cmFwID09
IEhhcmRXcmFwID8gdmFsdWVXaXRoSGFyZExpbmVCcmVha3MoKSA6IHZhbHVlKCkpOwogCi0gICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBkaXJuYW1lQXR0clZhbHVlID0gYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihkaXJuYW1lQXR0cik7CisgICAgYXV0byYgZGlybmFtZUF0dHJWYWx1ZSA9
IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZGlybmFtZUF0dHIpOwogICAgIGlmICgh
ZGlybmFtZUF0dHJWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgZW5jb2RpbmcuYXBwZW5kRGF0YShk
aXJuYW1lQXR0clZhbHVlLCBkaXJlY3Rpb25Gb3JGb3JtRGF0YSgpKTsKKyAgICAgICAgZm9ybURh
dGEuYXBwZW5kKGRpcm5hbWVBdHRyVmFsdWUsIGRpcmVjdGlvbkZvckZvcm1EYXRhKCkpOworCiAg
ICAgcmV0dXJuIHRydWU7ICAgIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuaAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgaXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgY29sbGVjdFN0eWxlRm9yUHJlc2VudGF0
aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJikgZmluYWw7CiAgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1l
bnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVl
UG9zaXRpb24mKSBmaW5hbDsKLSAgICBib29sIGFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYs
IGJvb2wpIGZpbmFsOworICAgIGJvb2wgYXBwZW5kRm9ybURhdGEoRE9NRm9ybURhdGEmLCBib29s
KSBmaW5hbDsKICAgICB2b2lkIHJlc2V0KCkgZmluYWw7CiAgICAgYm9vbCBoYXNDdXN0b21Gb2N1
c0xvZ2ljKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Qg
ZmluYWw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hpZGRlbklucHV0VHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IaWRkZW5JbnB1dFR5cGUuY3BwCShyZXZp
c2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hpZGRlbklucHV0VHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJIaWRkZW5JbnB1dFR5cGUuaCIKIAorI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCiAj
aW5jbHVkZSAiRm9ybUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKICNp
bmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSW5wdXRUeXBlTmFtZXMuaCIKQEAgLTk3LDEzICs5NywxNSBAQCBib29sIEhpZGRlbklu
cHV0VHlwZTo6aXNIaWRkZW5UeXBlKCkgY29uCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
SGlkZGVuSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmIGVuY29kaW5nLCBi
b29sIGlzTXVsdGlwYXJ0Rm9ybSkgY29uc3QKK2Jvb2wgSGlkZGVuSW5wdXRUeXBlOjphcHBlbmRG
b3JtRGF0YShET01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wgaXNNdWx0aXBhcnRGb3JtKSBjb25z
dAogewotICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGVsZW1lbnQoKS5uYW1lKCksICJf
Y2hhcnNldF8iKSkgewotICAgICAgICBlbmNvZGluZy5hcHBlbmREYXRhKGVsZW1lbnQoKS5uYW1l
KCksIFN0cmluZyhlbmNvZGluZy5lbmNvZGluZygpLm5hbWUoKSkpOworICAgIGF1dG8gbmFtZSA9
IGVsZW1lbnQoKS5uYW1lKCk7CisKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1l
LCAiX2NoYXJzZXRfIikpIHsKKyAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIFN0cmluZyB7
IGZvcm1EYXRhLmVuY29kaW5nKCkubmFtZSgpIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9Ci0gICAgcmV0dXJuIElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoZW5jb2RpbmcsIGlzTXVs
dGlwYXJ0Rm9ybSk7CisgICAgcmV0dXJuIElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoZm9ybURh
dGEsIGlzTXVsdGlwYXJ0Rm9ybSk7CiB9CiAKIGJvb2wgSGlkZGVuSW5wdXRUeXBlOjpzaG91bGRS
ZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRyaWJ1dGVzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSGlkZGVuSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
aWRkZW5JbnB1dFR5cGUuaAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IaWRkZW5JbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgc3VwcG9ydExhYmVscygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgYm9vbCBzaG91bGRSZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRyaWJ1dGVzKCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sLCBUZXh0Rmll
bGRFdmVudEJlaGF2aW9yKSBvdmVycmlkZTsKLSAgICBib29sIGFwcGVuZEZvcm1EYXRhKEZvcm1E
YXRhTGlzdCYsIGJvb2wpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwZW5kRm9ybURhdGEo
RE9NRm9ybURhdGEmLCBib29sKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCShyZXZp
c2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgIkltYWdlSW5wdXRUeXBl
LmgiCiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5o
IgorI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTEltYWdlTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVu
dC5oIgpAQCAtNTQsMjQgKzU0LDI1IEBAIGJvb2wgSW1hZ2VJbnB1dFR5cGU6OmlzRm9ybURhdGFB
cHBlbmRhYmwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbWFnZUlucHV0VHlwZTo6YXBw
ZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiBlbmNvZGluZywgYm9vbCkgY29uc3QKK2Jvb2wgSW1h
Z2VJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhKERPTUZvcm1EYXRhJiBmb3JtRGF0YSwgYm9vbCkg
Y29uc3QKIHsKICAgICBpZiAoIWVsZW1lbnQoKS5pc0FjdGl2YXRlZFN1Ym1pdCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gZWxlbWVudCgp
Lm5hbWUoKTsKKworICAgIGF1dG8mIG5hbWUgPSBlbGVtZW50KCkubmFtZSgpOwogICAgIGlmIChu
YW1lLmlzRW1wdHkoKSkgewotICAgICAgICBlbmNvZGluZy5hcHBlbmREYXRhKCJ4IiwgbV9jbGlj
a0xvY2F0aW9uLngoKSk7Ci0gICAgICAgIGVuY29kaW5nLmFwcGVuZERhdGEoInkiLCBtX2NsaWNr
TG9jYXRpb24ueSgpKTsKKyAgICAgICAgZm9ybURhdGEuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgieCIp
LCBTdHJpbmc6Om51bWJlcihtX2NsaWNrTG9jYXRpb24ueCgpKSk7CisgICAgICAgIGZvcm1EYXRh
LmFwcGVuZChBU0NJSUxpdGVyYWwoInkiKSwgU3RyaW5nOjpudW1iZXIobV9jbGlja0xvY2F0aW9u
LnkoKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U3RyaW5nPiBkb3RYU3RyaW5nKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCIueCIp
KTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBkb3RZU3RyaW5nKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCIueSIpKTsKLSAgICBlbmNvZGluZy5hcHBlbmREYXRhKG5hbWUgKyBk
b3RYU3RyaW5nLmdldCgpLCBtX2NsaWNrTG9jYXRpb24ueCgpKTsKLSAgICBlbmNvZGluZy5hcHBl
bmREYXRhKG5hbWUgKyBkb3RZU3RyaW5nLmdldCgpLCBtX2NsaWNrTG9jYXRpb24ueSgpKTsKKyAg
ICBmb3JtRGF0YS5hcHBlbmQobWFrZVN0cmluZyhuYW1lLCAiLngiKSwgU3RyaW5nOjpudW1iZXIo
bV9jbGlja0xvY2F0aW9uLngoKSkpOworICAgIGZvcm1EYXRhLmFwcGVuZChtYWtlU3RyaW5nKG5h
bWUsICIueSIpLCBTdHJpbmc6Om51bWJlcihtX2NsaWNrTG9jYXRpb24ueSgpKSk7CisKKyAgICBh
dXRvIHZhbHVlID0gZWxlbWVudCgpLnZhbHVlKCk7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkp
CisgICAgICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lLCB2YWx1ZSk7CiAKLSAgICBpZiAoIWVsZW1l
bnQoKS52YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgZW5jb2RpbmcuYXBwZW5kRGF0YShuYW1l
LCBlbGVtZW50KCkudmFsdWUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmgJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRy
b2xUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc0Zvcm1EYXRhQXBwZW5kYWJsZSgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0Jiwg
Ym9vbCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBlbmRGb3JtRGF0YShET01Gb3JtRGF0
YSYsIGJvb2wpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgc3VwcG9ydHNWYWxpZGF0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUlucHV0
UmVuZGVyZXIoUmVuZGVyU3R5bGUmJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBoYW5kbGVET01BY3Rp
dmF0ZUV2ZW50KEV2ZW50Jikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lu
cHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUu
Y3BwCShyZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJCdXR0b25JbnB1
dFR5cGUuaCIKICNpbmNsdWRlICJDaGVja2JveElucHV0VHlwZS5oIgogI2luY2x1ZGUgIkNvbG9y
SW5wdXRUeXBlLmgiCisjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJEYXRlQ29t
cG9uZW50cy5oIgogI2luY2x1ZGUgIkRhdGVJbnB1dFR5cGUuaCIKICNpbmNsdWRlICJEYXRlVGlt
ZUlucHV0VHlwZS5oIgpAQCAtNDIsNyArNDMsNiBAQAogI2luY2x1ZGUgIkZpbGVJbnB1dFR5cGUu
aCIKICNpbmNsdWRlICJGaWxlTGlzdC5oIgogI2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgiCi0j
aW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAt
MjExLDEwICsyMTEsMTAgQEAgYm9vbCBJbnB1dFR5cGU6OmlzRm9ybURhdGFBcHBlbmRhYmxlKCkg
YwogICAgIHJldHVybiAhZWxlbWVudCgpLm5hbWUoKS5pc0VtcHR5KCk7CiB9CiAKLWJvb2wgSW5w
dXRUeXBlOjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmIGVuY29kaW5nLCBib29sKSBjb25z
dAorYm9vbCBJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhKERPTUZvcm1EYXRhJiBmb3JtRGF0YSwg
Ym9vbCkgY29uc3QKIHsKICAgICAvLyBBbHdheXMgc3VjY2Vzc2Z1bC4KLSAgICBlbmNvZGluZy5h
cHBlbmREYXRhKGVsZW1lbnQoKS5uYW1lKCksIGVsZW1lbnQoKS52YWx1ZSgpKTsKKyAgICBmb3Jt
RGF0YS5hcHBlbmQoZWxlbWVudCgpLm5hbWUoKSwgZWxlbWVudCgpLnZhbHVlKCkpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgJKHJldmlzaW9uIDIy
MTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDExICs0NywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50OwogY2xhc3MgQ2hyb21lOworY2xhc3MgRE9NRm9ybURhdGE7CiBjbGFz
cyBEYXRlQ29tcG9uZW50czsKIGNsYXNzIERyYWdEYXRhOwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBG
aWxlTGlzdDsKLWNsYXNzIEZvcm1EYXRhTGlzdDsKIGNsYXNzIEhUTUxFbGVtZW50OwogY2xhc3Mg
SFRNTEZvcm1FbGVtZW50OwogY2xhc3MgSFRNTElucHV0RWxlbWVudDsKQEAgLTYwLDggKzYwLDgg
QEAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKIGNsYXNzIE1vdXNlRXZlbnQ7CiBjbGFzcyBOb2RlOwog
Y2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBUb3VjaEV2ZW50OwogY2xhc3MgVGV4dENvbnRyb2xJ
bm5lclRleHRFbGVtZW50OworY2xhc3MgVG91Y2hFdmVudDsKIAogc3RydWN0IElucHV0RWxlbWVu
dENsaWNrU3RhdGU7CiAKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBG
b3JtQ29udHJvbFN0YXRlIHNhdmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIHJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKGNvbnN0IEZvcm1Db250cm9sU3RhdGUmKTsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtRGF0YUFwcGVuZGFibGUoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCBtdWx0aXBhcnQpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRGb3JtRGF0YShET01Gb3JtRGF0YSYsIGJvb2wg
bXVsdGlwYXJ0KSBjb25zdDsKIAogICAgIC8vIERPTSBwcm9wZXJ0eSBmdW5jdGlvbnMuCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvU3VibWl0SW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL1N1Ym1pdElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDIyMTkw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvU3VibWl0SW5wdXRUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsOCArMzIsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN1
Ym1pdElucHV0VHlwZS5oIgogCisjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJF
dmVudC5oIgotI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnB1dFR5
cGVOYW1lcy5oIgpAQCAtNDYsMTEgKzQ2LDExIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU3VibWl0
SW5wdXRUeXBlOjpmb3IKICAgICByZXR1cm4gSW5wdXRUeXBlTmFtZXM6OnN1Ym1pdCgpOwogfQog
Ci1ib29sIFN1Ym1pdElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiBlbmNv
ZGluZywgYm9vbCkgY29uc3QKK2Jvb2wgU3VibWl0SW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShE
T01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wpIGNvbnN0CiB7CiAgICAgaWYgKCFlbGVtZW50KCku
aXNBY3RpdmF0ZWRTdWJtaXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVuY29kaW5n
LmFwcGVuZERhdGEoZWxlbWVudCgpLm5hbWUoKSwgZWxlbWVudCgpLnZhbHVlV2l0aERlZmF1bHQo
KSk7CisgICAgZm9ybURhdGEuYXBwZW5kKGVsZW1lbnQoKS5uYW1lKCksIGVsZW1lbnQoKS52YWx1
ZVdpdGhEZWZhdWx0KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL1N1Ym1pdElucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvU3VibWl0SW5wdXRUeXBlLmgJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvU3VibWl0SW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRy
b2xUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0
YUxpc3QmLCBib29sKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGVuZEZvcm1EYXRhKERP
TUZvcm1EYXRhJiwgYm9vbCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBzdXBwb3J0c1JlcXVp
cmVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2
ZW50Jikgb3ZlcnJpZGU7CiAgICAgYm9vbCBjYW5CZVN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSBv
dmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5j
cHAJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5w
dXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAogI2luY2x1ZGUgIkJl
Zm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJFZGl0
b3IuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRm9ybURhdGFMaXN0Lmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1
ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKQEAgLTUxMSwxMiArNTExLDEyIEBAIHZvaWQgVGV4dEZp
ZWxkSW5wdXRUeXBlOjp1cGRhdGVQbGFjZWhvbGQKICAgICBtX3BsYWNlaG9sZGVyLT5zZXRJbm5l
clRleHQocGxhY2Vob2xkZXJUZXh0KTsKIH0KIAotYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OmFw
cGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYgbGlzdCwgYm9vbCBtdWx0aXBhcnQpIGNvbnN0Citi
b29sIFRleHRGaWVsZElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRE9NRm9ybURhdGEmIGZvcm1E
YXRhLCBib29sIG11bHRpcGFydCkgY29uc3QKIHsKLSAgICBJbnB1dFR5cGU6OmFwcGVuZEZvcm1E
YXRhKGxpc3QsIG11bHRpcGFydCk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBkaXJuYW1lQXR0
clZhbHVlID0gZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZGlybmFt
ZUF0dHIpOworICAgIElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoZm9ybURhdGEsIG11bHRpcGFy
dCk7CisgICAgYXV0byYgZGlybmFtZUF0dHJWYWx1ZSA9IGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKGRpcm5hbWVBdHRyKTsKICAgICBpZiAoIWRpcm5hbWVBdHRyVmFs
dWUuaXNOdWxsKCkpCi0gICAgICAgIGxpc3QuYXBwZW5kRGF0YShkaXJuYW1lQXR0clZhbHVlLCBl
bGVtZW50KCkuZGlyZWN0aW9uRm9yRm9ybURhdGEoKSk7CisgICAgICAgIGZvcm1EYXRhLmFwcGVu
ZChkaXJuYW1lQXR0clZhbHVlLCBlbGVtZW50KCkuZGlyZWN0aW9uRm9yRm9ybURhdGEoKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxk
SW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJ
bnB1dFR5cGUuaAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0
RmllbGRJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvcm1EYXRhTGlzdDsKK2NsYXNzIERPTUZvcm1EYXRh
OwogY2xhc3MgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OwogCiAvLyBUaGUgY2xhc3MgcmVw
cmVzZW50cyB0eXBlcyBvZiB3aGljaCBVSSBjb250YWluIHRleHQgZmllbGRzLgpAQCAtODYsNyAr
ODYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUoKSBv
dmVycmlkZTsKICAgICBIVE1MRWxlbWVudCogcGxhY2Vob2xkZXJFbGVtZW50KCkgY29uc3QgZmlu
YWw7CiAgICAgdm9pZCB1cGRhdGVQbGFjZWhvbGRlclRleHQoKSBmaW5hbDsKLSAgICBib29sIGFw
cGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wgbXVsdGlwYXJ0KSBjb25zdCBmaW5hbDsK
KyAgICBib29sIGFwcGVuZEZvcm1EYXRhKERPTUZvcm1EYXRhJiwgYm9vbCBtdWx0aXBhcnQpIGNv
bnN0IGZpbmFsOwogICAgIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQoKSBmaW5hbDsKICAgICB2b2lk
IGNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZCgpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRlQXV0
b0ZpbGxCdXR0b24oKSBmaW5hbDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3Vi
bWlzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJt
aXNzaW9uLmNwcAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zv
cm1TdWJtaXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDEwICsyMTQsMTAgQEAgUmVm
PEZvcm1TdWJtaXNzaW9uPiBGb3JtU3VibWlzc2lvbjo6Y3JlYQogICAgIFN0cmluZyBib3VuZGFy
eTsKIAogICAgIGlmIChpc011bHRpUGFydEZvcm0pIHsKLSAgICAgICAgZm9ybURhdGEgPSBGb3Jt
RGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGRvbUZvcm1EYXRhLCBkb21Gb3JtRGF0YS0+ZW5jb2Rpbmco
KSwgJmRvY3VtZW50KTsKKyAgICAgICAgZm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQ
YXJ0KGRvbUZvcm1EYXRhLCAmZG9jdW1lbnQpOwogICAgICAgICBib3VuZGFyeSA9IGZvcm1EYXRh
LT5ib3VuZGFyeSgpLmRhdGEoKTsKICAgICB9IGVsc2UgewotICAgICAgICBmb3JtRGF0YSA9IEZv
cm1EYXRhOjpjcmVhdGUoZG9tRm9ybURhdGEsIGRvbUZvcm1EYXRhLT5lbmNvZGluZygpLCBhdHRy
aWJ1dGVzLm1ldGhvZCgpID09IE1ldGhvZDo6R2V0ID8gRm9ybURhdGE6OkZvcm1VUkxFbmNvZGVk
IDogRm9ybURhdGE6OnBhcnNlRW5jb2RpbmdUeXBlKGVuY29kaW5nVHlwZSkpOworICAgICAgICBm
b3JtRGF0YSA9IEZvcm1EYXRhOjpjcmVhdGUoZG9tRm9ybURhdGEsIGF0dHJpYnV0ZXMubWV0aG9k
KCkgPT0gTWV0aG9kOjpHZXQgPyBGb3JtRGF0YTo6Rm9ybVVSTEVuY29kZWQgOiBGb3JtRGF0YTo6
cGFyc2VFbmNvZGluZ1R5cGUoZW5jb2RpbmdUeXBlKSk7CiAgICAgICAgIGlmIChjb3BpZWRBdHRy
aWJ1dGVzLm1ldGhvZCgpID09IE1ldGhvZDo6UG9zdCAmJiBpc01haWx0b0Zvcm0pIHsKICAgICAg
ICAgICAgIC8vIENvbnZlcnQgdGhlIGZvcm0gZGF0YSBpbnRvIGEgc3RyaW5nIHRoYXQgd2UgcHV0
IGludG8gdGhlIFVSTC4KICAgICAgICAgICAgIGFwcGVuZE1haWx0b1Bvc3RGb3JtRGF0YVRvVVJM
KGFjdGlvblVSTCwgKmZvcm1EYXRhLCBlbmNvZGluZ1R5cGUpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCShyZXZpc2lvbiAy
MjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3ku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRM
b2FkZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRm9ybURhdGEuaCIK
LSNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3Bw
CShyZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDEyIEBACiAjaW5jbHVkZSAi
QmxvYlVSTC5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5o
IgorI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZvcm1EYXRh
QnVpbGRlci5oIgotI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgorI2luY2x1ZGUgIkxpbmVFbmRp
bmcuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5j
bHVkZSAiVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oIgpAQCAtOTIsMTcgKzkzLDE3IEBAIFJlZjxG
b3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBWZWMKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1SZWY8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgRm9ybURhdGFMaXN0JiBs
aXN0LCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBFbmNvZGluZ1R5cGUgZW5jb2RpbmdU
eXBlKQorUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IERPTUZvcm1EYXRhJiBm
b3JtRGF0YSwgRW5jb2RpbmdUeXBlIGVuY29kaW5nVHlwZSkKIHsKICAgICBhdXRvIHJlc3VsdCA9
IGNyZWF0ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMobGlzdCwgZW5j
b2RpbmcsIGZhbHNlLCBudWxscHRyLCBlbmNvZGluZ1R5cGUpOworICAgIHJlc3VsdC0+YXBwZW5k
Tm9uTXVsdGlQYXJ0S2V5VmFsdWVQYWlySXRlbXMoZm9ybURhdGEsIGVuY29kaW5nVHlwZSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlTXVs
dGlQYXJ0KGNvbnN0IEZvcm1EYXRhTGlzdCYgbGlzdCwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNv
ZGluZywgRG9jdW1lbnQqIGRvY3VtZW50KQorUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRl
TXVsdGlQYXJ0KGNvbnN0IERPTUZvcm1EYXRhJiBmb3JtRGF0YSwgRG9jdW1lbnQqIGRvY3VtZW50
KQogewogICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAgcmVzdWx0LT5hcHBlbmRLZXlW
YWx1ZVBhaXJJdGVtcyhsaXN0LCBlbmNvZGluZywgdHJ1ZSwgZG9jdW1lbnQpOworICAgIHJlc3Vs
dC0+YXBwZW5kTXVsdGlQYXJ0S2V5VmFsdWVQYWlySXRlbXMoZm9ybURhdGEsIGRvY3VtZW50KTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xODIsNzQgKzE4Myw5NSBAQCB2b2lkIEZvcm1E
YXRhOjphcHBlbmRCbG9iKGNvbnN0IFVSTCYgYmxvCiAgICAgbV9sZW5ndGhJbkJ5dGVzID0gc3Rk
OjpudWxsb3B0OwogfQogCi12b2lkIEZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhj
b25zdCBGb3JtRGF0YUxpc3QmIGxpc3QsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGJv
b2wgaXNNdWx0aVBhcnRGb3JtLCBEb2N1bWVudCogZG9jdW1lbnQsIEVuY29kaW5nVHlwZSBlbmNv
ZGluZ1R5cGUpCitzdGF0aWMgQ1N0cmluZyBub3JtYWxpemVTdHJpbmdEYXRhKFRleHRFbmNvZGlu
ZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKGlzTXVsdGlQYXJ0
Rm9ybSkKLSAgICAgICAgbV9ib3VuZGFyeSA9IEZvcm1EYXRhQnVpbGRlcjo6Z2VuZXJhdGVVbmlx
dWVCb3VuZGFyeVN0cmluZygpOworICAgIHJldHVybiBub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JM
RihlbmNvZGluZy5lbmNvZGUodmFsdWUsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7Cit9CisK
K3ZvaWQgRm9ybURhdGE6OmFwcGVuZE11bHRpUGFydEZpbGVWYWx1ZShjb25zdCBGaWxlJiBmaWxl
LCBWZWN0b3I8Y2hhcj4mIGhlYWRlciwgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgRG9jdW1lbnQq
IGRvY3VtZW50KQoreworICAgIGF1dG8gbmFtZSA9IGZpbGUubmFtZSgpOworCisgICAgLy8gTGV0
IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5l
cmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1cGxvYWQuCisgICAgYm9vbCBzaG91bGRH
ZW5lcmF0ZUZpbGUgPSBmYWxzZTsKKyAgICBhdXRvJiBwYXRoID0gZmlsZS5wYXRoKCk7CisgICAg
aWYgKCFwYXRoLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50
LT5wYWdlKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBnZW5lcmF0ZWRGaWxlTmFtZTsKKyAgICAg
ICAgICAgIHNob3VsZEdlbmVyYXRlRmlsZSA9IHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnNob3Vs
ZFJlcGxhY2VXaXRoR2VuZXJhdGVkRmlsZUZvclVwbG9hZChwYXRoLCBnZW5lcmF0ZWRGaWxlTmFt
ZSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkR2VuZXJhdGVGaWxlKQorICAgICAgICAgICAgICAg
IG5hbWUgPSBnZW5lcmF0ZWRGaWxlTmFtZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFdl
IGhhdmUgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWU9Ii4uIiBwYXJ0IGluIHRoZSBoZWFkZXIsIGV2
ZW4gaWYgdGhlIGZpbGVuYW1lIGlzIGVtcHR5CisgICAgRm9ybURhdGFCdWlsZGVyOjphZGRGaWxl
bmFtZVRvTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgZW5jb2RpbmcsIG5hbWUpOworCisgICAgLy8g
QWRkIHRoZSBjb250ZW50IHR5cGUgaWYgYXZhaWxhYmxlLCBvciAiYXBwbGljYXRpb24vb2N0ZXQt
c3RyZWFtIiBvdGhlcndpc2UgKFJGQyAxODY3KS4KKyAgICBhdXRvIGNvbnRlbnRUeXBlID0gZmls
ZS50eXBlKCk7CisgICAgaWYgKGNvbnRlbnRUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgY29udGVu
dFR5cGUgPSBBU0NJSUxpdGVyYWwoImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOworICAgIEFT
U0VSVChCbG9iOjppc05vcm1hbGl6ZWRDb250ZW50VHlwZShjb250ZW50VHlwZSkpOworCisgICAg
Rm9ybURhdGFCdWlsZGVyOjphZGRDb250ZW50VHlwZVRvTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwg
Y29udGVudFR5cGUuYXNjaWkoKSk7CisKKyAgICBGb3JtRGF0YUJ1aWxkZXI6OmZpbmlzaE11bHRp
UGFydEhlYWRlcihoZWFkZXIpOworICAgIGFwcGVuZERhdGEoaGVhZGVyLmRhdGEoKSwgaGVhZGVy
LnNpemUoKSk7CisKKyAgICBpZiAoIWZpbGUucGF0aCgpLmlzRW1wdHkoKSkKKyAgICAgICAgYXBw
ZW5kRmlsZShmaWxlLnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKKyAgICBlbHNlCisgICAg
ICAgIGFwcGVuZEJsb2IoZmlsZS51cmwoKSk7Cit9CisKK3ZvaWQgRm9ybURhdGE6OmFwcGVuZE11
bHRpUGFydFN0cmluZ1ZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBWZWN0b3I8Y2hhcj4mIGhl
YWRlciwgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKK3sKKyAgICBGb3JtRGF0YUJ1aWxkZXI6OmZp
bmlzaE11bHRpUGFydEhlYWRlcihoZWFkZXIpOworICAgIGFwcGVuZERhdGEoaGVhZGVyLmRhdGEo
KSwgaGVhZGVyLnNpemUoKSk7CisKKyAgICBhdXRvIG5vcm1hbGl6ZWRTdHJpbmdEYXRhID0gbm9y
bWFsaXplU3RyaW5nRGF0YShlbmNvZGluZywgc3RyaW5nKTsKKyAgICBhcHBlbmREYXRhKG5vcm1h
bGl6ZWRTdHJpbmdEYXRhLmRhdGEoKSwgbm9ybWFsaXplZFN0cmluZ0RhdGEubGVuZ3RoKCkpOwor
fQorCit2b2lkIEZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRLZXlWYWx1ZVBhaXJJdGVtcyhjb25z
dCBET01Gb3JtRGF0YSYgZm9ybURhdGEsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBtX2Jv
dW5kYXJ5ID0gRm9ybURhdGFCdWlsZGVyOjpnZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7
CisKKyAgICBhdXRvIGVuY29kaW5nID0gZm9ybURhdGEuZW5jb2RpbmcoKTsKIAogICAgIFZlY3Rv
cjxjaGFyPiBlbmNvZGVkRGF0YTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBsaXN0Lml0
ZW1zKCkpIHsKLSAgICAgICAgYXV0byBub3JtYWxpemVkTmFtZSA9IGxpc3Qubm9ybWFsaXplU3Ry
aW5nKGl0ZW0ubmFtZSk7CisgICAgZm9yIChhdXRvJiBpdGVtIDogZm9ybURhdGEuaXRlbXMoKSkg
eworICAgICAgICBhdXRvIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplU3RyaW5nRGF0YShlbmNv
ZGluZywgaXRlbS5uYW1lKTsKICAgICAKLSAgICAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkgewot
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGhlYWRlcjsKLSAgICAgICAgICAgIEZvcm1EYXRhQnVp
bGRlcjo6YmVnaW5NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBtX2JvdW5kYXJ5LmRhdGEoKSwgbm9y
bWFsaXplZE5hbWUpOwotCi0gICAgICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZh
bHNlOwotCi0gICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8Rmls
ZT4+KGl0ZW0uZGF0YSkpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCB0eXBl
IGlzIGEgZmlsZSwgdGhlbiB3ZSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWUKLSAg
ICAgICAgICAgICAgICBhdXRvJiBmaWxlID0gKldURjo6Z2V0PFJlZlB0cjxGaWxlPj4oaXRlbS5k
YXRhKTsKLSAgICAgICAgICAgICAgICBhdXRvIG5hbWUgPSBmaWxlLm5hbWUoKTsKLQotICAgICAg
ICAgICAgICAgIC8vIExldCB0aGUgYXBwbGljYXRpb24gc3BlY2lmeSBhIGZpbGVuYW1lIGlmIGl0
J3MgZ29pbmcgdG8gZ2VuZXJhdGUgYSByZXBsYWNlbWVudCBmaWxlIGZvciB0aGUgdXBsb2FkLgot
ICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHBhdGggPSBmaWxlLnBhdGgoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChQ
YWdlKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nIGdlbmVyYXRlZEZpbGVOYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxk
R2VuZXJhdGVGaWxlID0gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuc2hvdWxkUmVwbGFjZVdpdGhH
ZW5lcmF0ZWRGaWxlRm9yVXBsb2FkKHBhdGgsIGdlbmVyYXRlZEZpbGVOYW1lKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzaG91bGRHZW5lcmF0ZUZpbGUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZSA9IGdlbmVyYXRlZEZpbGVOYW1lOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBp
bmNsdWRlIHRoZSBmaWxlbmFtZT0iLi4iIHBhcnQgaW4gdGhlIGhlYWRlciwgZXZlbiBpZiB0aGUg
ZmlsZW5hbWUgaXMgZW1wdHkKLSAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmFkZEZp
bGVuYW1lVG9NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBlbmNvZGluZywgbmFtZSk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBBZGQgdGhlIGNvbnRlbnQgdHlwZSBpZiBhdmFpbGFibGUsIG9yICJhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0iIG90aGVyd2lzZSAoUkZDIDE4NjcpLgotICAgICAgICAgICAg
ICAgIGF1dG8gY29udGVudFR5cGUgPSBmaWxlLnR5cGUoKTsKLSAgICAgICAgICAgICAgICBpZiAo
Y29udGVudFR5cGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9
ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iOwotICAgICAgICAgICAgICAgIEFTU0VSVChCbG9i
Ojppc05vcm1hbGl6ZWRDb250ZW50VHlwZShjb250ZW50VHlwZSkpOwotICAgICAgICAgICAgICAg
IEZvcm1EYXRhQnVpbGRlcjo6YWRkQ29udGVudFR5cGVUb011bHRpUGFydEhlYWRlcihoZWFkZXIs
IGNvbnRlbnRUeXBlLmFzY2lpKCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBGb3Jt
RGF0YUJ1aWxkZXI6OmZpbmlzaE11bHRpUGFydEhlYWRlcihoZWFkZXIpOwotCi0gICAgICAgICAg
ICBhcHBlbmREYXRhKGhlYWRlci5kYXRhKCksIGhlYWRlci5zaXplKCkpOwotCi0gICAgICAgICAg
ICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmlsZT4+KGl0ZW0uZGF0YSkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvJiBmaWxlID0gKldURjo6Z2V0PFJlZlB0cjxGaWxlPj4oaXRl
bS5kYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAoIWZpbGUucGF0aCgpLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kRmlsZShmaWxlLnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVG
aWxlKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEJs
b2IoZmlsZS51cmwoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGF1
dG8gbm9ybWFsaXplZFN0cmluZ0RhdGEgPSBsaXN0Lm5vcm1hbGl6ZVN0cmluZyhXVEY6OmdldDxT
dHJpbmc+KGl0ZW0uZGF0YSkpOwotICAgICAgICAgICAgICAgIGFwcGVuZERhdGEobm9ybWFsaXpl
ZFN0cmluZ0RhdGEuZGF0YSgpLCBub3JtYWxpemVkU3RyaW5nRGF0YS5sZW5ndGgoKSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgIFZlY3RvcjxjaGFyPiBoZWFkZXI7CisgICAgICAgIEZvcm1EYXRh
QnVpbGRlcjo6YmVnaW5NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBtX2JvdW5kYXJ5LmRhdGEoKSwg
bm9ybWFsaXplZE5hbWUpOwogCi0gICAgICAgICAgICBhcHBlbmREYXRhKCJcclxuIiwgMik7Cisg
ICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGaWxlPj4oaXRlbS5kYXRh
KSkgeworICAgICAgICAgICAgYXBwZW5kTXVsdGlQYXJ0RmlsZVZhbHVlKCpXVEY6OmdldDxSZWZQ
dHI8RmlsZT4+KGl0ZW0uZGF0YSksIGhlYWRlciwgZW5jb2RpbmcsIGRvY3VtZW50KTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0
cmluZz4oaXRlbS5kYXRhKSk7Ci0KLSAgICAgICAgICAgIGF1dG8gbm9ybWFsaXplZFN0cmluZ0Rh
dGEgPSBsaXN0Lm5vcm1hbGl6ZVN0cmluZyhXVEY6OmdldDxTdHJpbmc+KGl0ZW0uZGF0YSkpOwot
ICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjphZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVu
Y29kZWREYXRhLCBub3JtYWxpemVkTmFtZSwgbm9ybWFsaXplZFN0cmluZ0RhdGEsIGVuY29kaW5n
VHlwZSk7CisgICAgICAgICAgICBhcHBlbmRNdWx0aVBhcnRTdHJpbmdWYWx1ZShXVEY6OmdldDxT
dHJpbmc+KGl0ZW0uZGF0YSksIGhlYWRlciwgZW5jb2RpbmcpOwogICAgICAgICB9CisKKyAgICAg
ICAgYXBwZW5kRGF0YSgiXHJcbiIsIDIpOwogICAgIH0KKyAgICAKKyAgICBGb3JtRGF0YUJ1aWxk
ZXI6OmFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoZW5jb2RlZERhdGEsIG1fYm91bmRhcnku
ZGF0YSgpLCB0cnVlKTsKIAotICAgIGlmIChpc011bHRpUGFydEZvcm0pCi0gICAgICAgIEZvcm1E
YXRhQnVpbGRlcjo6YWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihlbmNvZGVkRGF0YSwgbV9i
b3VuZGFyeS5kYXRhKCksIHRydWUpOworICAgIGFwcGVuZERhdGEoZW5jb2RlZERhdGEuZGF0YSgp
LCBlbmNvZGVkRGF0YS5zaXplKCkpOworfQorCit2b2lkIEZvcm1EYXRhOjphcHBlbmROb25NdWx0
aVBhcnRLZXlWYWx1ZVBhaXJJdGVtcyhjb25zdCBET01Gb3JtRGF0YSYgZm9ybURhdGEsIEVuY29k
aW5nVHlwZSBlbmNvZGluZ1R5cGUpCit7CisgICAgYXV0byBlbmNvZGluZyA9IGZvcm1EYXRhLmVu
Y29kaW5nKCk7CisKKyAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZERhdGE7CisgICAgZm9yIChhdXRv
JiBpdGVtIDogZm9ybURhdGEuaXRlbXMoKSkgeworICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxTdHJpbmc+KGl0ZW0uZGF0YSkpOworCisgICAgICAgIGF1dG8gbm9ybWFsaXpl
ZE5hbWUgPSBub3JtYWxpemVTdHJpbmdEYXRhKGVuY29kaW5nLCBpdGVtLm5hbWUpOworICAgICAg
ICBhdXRvIG5vcm1hbGl6ZWRTdHJpbmdEYXRhID0gbm9ybWFsaXplU3RyaW5nRGF0YShlbmNvZGlu
ZywgV1RGOjpnZXQ8U3RyaW5nPihpdGVtLmRhdGEpKTsKKyAgICAgICAgRm9ybURhdGFCdWlsZGVy
OjphZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCBub3JtYWxpemVkTmFtZSwg
bm9ybWFsaXplZFN0cmluZ0RhdGEsIGVuY29kaW5nVHlwZSk7CisgICAgfQogCiAgICAgYXBwZW5k
RGF0YShlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUoKSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCShyZXZpc2lvbiAyMjE5
MDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE3LDggKzE3LDcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgogICovCiAKLSNpZm5kZWYgRm9ybURhdGFfaAotI2RlZmluZSBGb3JtRGF0YV9oCisjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkJsb2JEYXRhLmgiCiAjaW5jbHVkZSAiVVJMLmgiCkBAIC0yOSw4
ICsyOCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRE9NRm9ybURhdGE7CiBj
bGFzcyBEb2N1bWVudDsKLWNsYXNzIEZvcm1EYXRhTGlzdDsKK2NsYXNzIEZpbGU7CiBjbGFzcyBU
ZXh0RW5jb2Rpbmc7CiAKIGNsYXNzIEZvcm1EYXRhRWxlbWVudCB7CkBAIC0yMDIsOCArMjAyLDgg
QEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8Rm9ybURhdGE+IGNyZWF0
ZShjb25zdCB2b2lkKiwgc2l6ZV90KTsKICAgICBzdGF0aWMgUmVmPEZvcm1EYXRhPiBjcmVhdGUo
Y29uc3QgQ1N0cmluZyYpOwogICAgIHN0YXRpYyBSZWY8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBW
ZWN0b3I8Y2hhcj4mKTsKLSAgICBzdGF0aWMgUmVmPEZvcm1EYXRhPiBjcmVhdGUoY29uc3QgRm9y
bURhdGFMaXN0JiwgY29uc3QgVGV4dEVuY29kaW5nJiwgRW5jb2RpbmdUeXBlID0gRm9ybVVSTEVu
Y29kZWQpOwotICAgIHN0YXRpYyBSZWY8Rm9ybURhdGE+IGNyZWF0ZU11bHRpUGFydChjb25zdCBG
b3JtRGF0YUxpc3QmLCBjb25zdCBUZXh0RW5jb2RpbmcmLCBEb2N1bWVudCopOworICAgIHN0YXRp
YyBSZWY8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBET01Gb3JtRGF0YSYsIEVuY29kaW5nVHlwZSA9
IEZvcm1VUkxFbmNvZGVkKTsKKyAgICBzdGF0aWMgUmVmPEZvcm1EYXRhPiBjcmVhdGVNdWx0aVBh
cnQoY29uc3QgRE9NRm9ybURhdGEmLCBEb2N1bWVudCopOwogICAgIFdFQkNPUkVfRVhQT1JUIH5G
b3JtRGF0YSgpOwogCiAgICAgLy8gRklYTUU6IEJvdGggdGhlc2UgZnVuY3Rpb25zIHBlcmZvcm0g
YSBkZWVwIGNvcHkgb2YgbV9lbGVtZW50cywgYnV0IGRpZmZlciBpbiBoYW5kbGluZyBvZiBvdGhl
ciBkYXRhIG1lbWJlcnMuCkBAIC0yNjIsNyArMjYyLDEwIEBAIHByaXZhdGU6CiAgICAgRm9ybURh
dGEoKTsKICAgICBGb3JtRGF0YShjb25zdCBGb3JtRGF0YSYpOwogCi0gICAgdm9pZCBhcHBlbmRL
ZXlWYWx1ZVBhaXJJdGVtcyhjb25zdCBGb3JtRGF0YUxpc3QmLCBjb25zdCBUZXh0RW5jb2Rpbmcm
LCBib29sIGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQqLCBFbmNvZGluZ1R5cGUgPSBGb3JtVVJM
RW5jb2RlZCk7CisgICAgdm9pZCBhcHBlbmRNdWx0aVBhcnRGaWxlVmFsdWUoY29uc3QgRmlsZSYs
IFZlY3RvcjxjaGFyPiYgaGVhZGVyLCBUZXh0RW5jb2RpbmcmLCBEb2N1bWVudCopOworICAgIHZv
aWQgYXBwZW5kTXVsdGlQYXJ0U3RyaW5nVmFsdWUoY29uc3QgU3RyaW5nJiwgVmVjdG9yPGNoYXI+
JiBoZWFkZXIsIFRleHRFbmNvZGluZyYpOworICAgIHZvaWQgYXBwZW5kTXVsdGlQYXJ0S2V5VmFs
dWVQYWlySXRlbXMoY29uc3QgRE9NRm9ybURhdGEmLCBEb2N1bWVudCopOworICAgIHZvaWQgYXBw
ZW5kTm9uTXVsdGlQYXJ0S2V5VmFsdWVQYWlySXRlbXMoY29uc3QgRE9NRm9ybURhdGEmLCBFbmNv
ZGluZ1R5cGUpOwogCiAgICAgYm9vbCBoYXNHZW5lcmF0ZWRGaWxlcygpIGNvbnN0OwogICAgIGJv
b2wgaGFzT3duZWRHZW5lcmF0ZWRGaWxlcygpIGNvbnN0OwpAQCAtMzE3LDQgKzMyMCwzIEBAIFJl
ZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmRlY29kZShEZWNvZGUKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNw
cAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ4LDcgKzY0OCw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IFhNTEh0dHBSZXF1ZXN0OjpzZW5kKEQKICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0LnZh
bHVlKCkpOwogCiAgICAgaWYgKG1fbWV0aG9kICE9ICJHRVQiICYmIG1fbWV0aG9kICE9ICJIRUFE
IiAmJiBtX3VybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0
RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoYm9keSwgYm9keS5lbmNvZGlu
ZygpLCBkb2N1bWVudCgpKTsKKyAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRh
OjpjcmVhdGVNdWx0aVBhcnQoYm9keSwgZG9jdW1lbnQoKSk7CiAgICAgICAgIG1fcmVxdWVzdEVu
dGl0eUJvZHktPmdlbmVyYXRlRmlsZXMoZG9jdW1lbnQoKSk7CiAgICAgICAgIGlmICghbV9yZXF1
ZXN0SGVhZGVycy5jb250YWlucyhIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpKQogICAgICAg
ICAgICAgbV9yZXF1ZXN0SGVhZGVycy5zZXQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlLCBt
YWtlU3RyaW5nKCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iLCBtX3JlcXVlc3RFbnRp
dHlCb2R5LT5ib3VuZGFyeSgpLmRhdGEoKSkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320514</attachid>
            <date>2017-09-11 21:14:25 -0700</date>
            <delta_ts>2017-09-12 07:53:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176740-20170911211424.patch</filename>
            <type>text/plain</type>
            <size>70550</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE3LTA5LTExICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgW0NsZWFudXBdIEZvbGxvdyB1cCBjbGVhbnVwIGZvciBET01G
b3JtRGF0YSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc2NzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiB3dGYvSGFzaFRyYWl0cy5oOgorICAgICAgICAoV1RGOjpLZXlWYWx1ZVBhaXI6OktleVZhbHVl
UGFpcik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0tleVZhbHVlUGFpci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6S2V5VmFsdWVQYWlyOjpLZXlWYWx1ZVBhaXIpOgorICAgICAgICAoV1RGOjpt
YWtlS2V5VmFsdWVQYWlyKToKKworICAgICAgICAgICAgTW92ZSBLZXlWYWx1ZVBhaXIgdG8gaXRz
IG93biBoZWFkZXIgYW5kIGFkZCBhIG1ha2VLZXlWYWx1ZVBhaXIgaGVscGVyLgorCiAyMDE3LTA5
LTExICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMjE4NTQuCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw2ICszNDYsNyBA
QAogCQk3QUZFQzZBRTFFQjIyQUM2MDBEQURFMzYgLyogVVVJRC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVVUlELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdB
RkVDNkIwMUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFVVSUQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzNGNzIzOTFENzg4MTE5MDA2NzRFMjYgLyogQnJpZ2FuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCcmlnYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdD
OTY5Mjk0MUY2NjMwNkUwMDI2N0E5RSAvKiBLZXlWYWx1ZVBhaXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gS2V5VmFsdWVQYWlyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDQkJBMDczMTlCQjdGREMwMEJCRjAyNSAvKiBPU09iamVjdFB0ci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU09iamVjdFB0ci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3Q0QwRDVBNzFENTUzMjJBMDAwQ0M5RTEgLyogVmFyaWFudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDRDRDMjZGMUUyQzgyQjkwMDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRlbmF0
ZU51bWJlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nQ29uY2F0
ZW5hdGVOdW1iZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NDksNiArODUw
LDcgQEAKIAkJCQk1MTgyQzIyQzFGMkJDN0U2MDA1OUJBN0MgLyogSW5zdGFuY2VDb3VudGVkLmgg
Ki8sCiAJCQkJN0NERDdGRjcxODZEMjkxRTAwNzQzM0NEIC8qIEl0ZXJhdG9yQWRhcHRvcnMuaCAq
LywKIAkJCQk3Q0REN0ZGOTE4NkQyQTU0MDA3NDMzQ0QgLyogSXRlcmF0b3JSYW5nZS5oICovLAor
CQkJCTdDOTY5Mjk0MUY2NjMwNkUwMDI2N0E5RSAvKiBLZXlWYWx1ZVBhaXIuaCAqLywKIAkJCQlD
MkJDRkMzRTFGNjFEMTMwMDBDOTIyMkMgLyogTGFuZ3VhZ2UuY3BwICovLAogCQkJCUMyQkNGQzNG
MUY2MUQxMzAwMEM5MjIyQyAvKiBMYW5ndWFnZS5oICovLAogCQkJCTUzOUVCMDYyMUQ1NTI4NDIw
MEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJh
aXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCShyZXZpc2lv
biAyMjE5MDApCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8dXRpbGl0eT4K
ICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9LZXlWYWx1ZVBh
aXIuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAKQEAgLTI3OSwzMiArMjgwLDYgQEAgc3RydWN0IFR1cGxlSGFzaFRyYWl0cyA6IEdl
bmVyaWNIYXNoVHJhaQogdGVtcGxhdGU8dHlwZW5hbWUuLi4gVHJhaXRzPgogc3RydWN0IEhhc2hU
cmFpdHM8c3RkOjp0dXBsZTxUcmFpdHMuLi4+PiA6IHB1YmxpYyBUdXBsZUhhc2hUcmFpdHM8SGFz
aFRyYWl0czxUcmFpdHM+Li4uPiB7IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGVBcmcs
IHR5cGVuYW1lIFZhbHVlVHlwZUFyZz4KLXN0cnVjdCBLZXlWYWx1ZVBhaXIgewotICAgIHR5cGVk
ZWYgS2V5VHlwZUFyZyBLZXlUeXBlOwotCi0gICAgS2V5VmFsdWVQYWlyKCkKLSAgICB7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4KLSAgICBLZXlWYWx1ZVBh
aXIoSyYmIGtleSwgViYmIHZhbHVlKQotICAgICAgICA6IGtleShzdGQ6OmZvcndhcmQ8Sz4oa2V5
KSkKLSAgICAgICAgLCB2YWx1ZShzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKQotICAgIHsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3RoZXJLZXlUeXBlLCB0eXBlbmFtZSBPdGhlclZh
bHVlVHlwZT4KLSAgICBLZXlWYWx1ZVBhaXIoS2V5VmFsdWVQYWlyPE90aGVyS2V5VHlwZSwgT3Ro
ZXJWYWx1ZVR5cGU+JiYgb3RoZXIpCi0gICAgICAgIDoga2V5KHN0ZDo6Zm9yd2FyZDxPdGhlcktl
eVR5cGU+KG90aGVyLmtleSkpCi0gICAgICAgICwgdmFsdWUoc3RkOjpmb3J3YXJkPE90aGVyVmFs
dWVUeXBlPihvdGhlci52YWx1ZSkpCi0gICAgewotICAgIH0KLQotICAgIEtleVR5cGVBcmcga2V5
OwotICAgIFZhbHVlVHlwZUFyZyB2YWx1ZSB7IH07Ci19OwotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlUcmFpdHNBcmcsIHR5cGVuYW1lIFZhbHVlVHJhaXRzQXJnPgogc3RydWN0IEtleVZhbHVlUGFp
ckhhc2hUcmFpdHMgOiBHZW5lcmljSGFzaFRyYWl0czxLZXlWYWx1ZVBhaXI8dHlwZW5hbWUgS2V5
VHJhaXRzQXJnOjpUcmFpdFR5cGUsIHR5cGVuYW1lIFZhbHVlVHJhaXRzQXJnOjpUcmFpdFR5cGU+
PiB7CiAgICAgdHlwZWRlZiBLZXlUcmFpdHNBcmcgS2V5VHJhaXRzOwpJbmRleDogU291cmNlL1dU
Ri93dGYvS2V5VmFsdWVQYWlyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvS2V5VmFs
dWVQYWlyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvS2V5VmFsdWVQYWlyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlUeXBlQXJnLCB0eXBlbmFtZSBWYWx1ZVR5cGVBcmc+CitzdHJ1Y3QgS2V5
VmFsdWVQYWlyIHsKKyAgICB1c2luZyBLZXlUeXBlID0gS2V5VHlwZUFyZzsKKyAgICB1c2luZyBW
YWx1ZVR5cGUgPSBWYWx1ZVR5cGVBcmc7CisKKyAgICBLZXlWYWx1ZVBhaXIoKQorICAgIHsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgorICAgIEtleVZhbHVl
UGFpcihLJiYga2V5LCBWJiYgdmFsdWUpCisgICAgICAgIDoga2V5KHN0ZDo6Zm9yd2FyZDxLPihr
ZXkpKQorICAgICAgICAsIHZhbHVlKHN0ZDo6Zm9yd2FyZDxWPih2YWx1ZSkpCisgICAgeworICAg
IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPgorICAgIEtleVZhbHVl
UGFpcihLZXlWYWx1ZVBhaXI8SywgVj4mJiBvdGhlcikKKyAgICAgICAgOiBrZXkoc3RkOjpmb3J3
YXJkPEs+KG90aGVyLmtleSkpCisgICAgICAgICwgdmFsdWUoc3RkOjpmb3J3YXJkPFY+KG90aGVy
LnZhbHVlKSkKKyAgICB7CisgICAgfQorCisgICAgS2V5VHlwZSBrZXk7CisgICAgVmFsdWVUeXBl
IHZhbHVlIHsgfTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+Citpbmxp
bmUgS2V5VmFsdWVQYWlyPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8Sz46OnR5cGUsIHR5cGVuYW1lIHN0
ZDo6ZGVjYXk8Vj46OnR5cGU+IG1ha2VLZXlWYWx1ZVBhaXIoSyYmIGtleSwgViYmIHZhbHVlKQor
eworICAgIHJldHVybiBLZXlWYWx1ZVBhaXI8dHlwZW5hbWUgc3RkOjpkZWNheTxLPjo6dHlwZSwg
dHlwZW5hbWUgc3RkOjpkZWNheTxWPjo6dHlwZT4geyBzdGQ6OmZvcndhcmQ8Sz4oa2V5KSwgc3Rk
Ojpmb3J3YXJkPFY+KHZhbHVlKSB9OworfQorCit9CisKK3VzaW5nIFdURjo6S2V5VmFsdWVQYWly
OwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA0IEBACisyMDE3LTA5LTExICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NsZWFudXBdIEZvbGxvdyB1cCBj
bGVhbnVwIGZvciBET01Gb3JtRGF0YSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2NzQwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBNZXJnZXMgRm9ybURhdGFMaXN0IGludG8g
RE9NRm9ybURhdGEuCisgICAgICAgIC0gU3RyZWFtbGluZSAvIHJlZmFjdG9yIEZvcm1EYXRhIGNy
ZWF0aW9uIGZyb20gRE9NRm9ybURhdGEuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRt
bC9Gb3JtRGF0YUxpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvRm9ybURhdGFMaXN0
Lmg6IFJlbW92ZWQuCisKKyAgICAgICAgICAgIFJlbW92ZSBGb3JtRGF0YUxpc3QuCisKKyAgICAg
ICAgKiBodG1sL0RPTUZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZvcm1EYXRh
OjpET01Gb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpET01Gb3JtRGF0YTo6Y3JlYXRlRmls
ZUVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZvcm1EYXRhOjphcHBlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NRm9ybURhdGE6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpET01Gb3Jt
RGF0YTo6SXRlcmF0b3I6Om5leHQpOgorICAgICAgICAqIGh0bWwvRE9NRm9ybURhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTUZvcm1EYXRhOjppdGVtcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpET01Gb3JtRGF0YTo6ZW5jb2RpbmcgY29uc3QpOgorCisgICAgICAgICAgICBNZXJnZSBG
b3JtRGF0YUxpc3QgaW50byBET01Gb3JtRGF0YS4gRm9ybURhdGFMaXN0J3MgYWRkaXRpb25hbAor
ICAgICAgICAgICAgYXBwZW5kRGF0YS9hcHBlbmRCbG9iIGZ1bmN0aW9ucyBoYXZlIGJlZW4gcmVt
b3ZlZCwgYW5kIHRoZWlyCisgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IGlubGluZWQgaW50byBE
T01Gb3JtRGF0YSdzIGFwcGVuZCBmdW5jdGlvbnMuIAorCisgICAgICAgICAgICBBZG9wdGVkIG1h
a2VLZXlWYWx1ZVBhaXIgaW4gRE9NRm9ybURhdGE6Okl0ZXJhdG9yOjpuZXh0KCkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmNyZWF0ZU11bHRp
UGFydCk6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVTdHJpbmdEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRGaWxlVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZE11bHRpUGFydFN0cmluZ1ZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRLZXlWYWx1ZVBhaXJJdGVtcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kTm9uTXVsdGlQYXJ0S2V5VmFsdWVQYWly
SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEtleVZhbHVlUGFpckl0
ZW1zKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmg6CisK
KyAgICAgICAgICAgIFNwbGl0LXVwIGFwcGVuZEtleVZhbHVlUGFpckl0ZW1zIGludG8gc2VwYXJh
dGUgbXVsdGlwYXJ0IGFuZCBub24tbXVsdGlwYXJ0CisgICAgICAgICAgICBmdW5jdGlvbnMsIGFz
IHRoZSB0d28gZWRnZXMgb2YgdGhlIGJyYW5jaCBkaWRuJ3Qgc2hhcmUgbXVjaCBpbiBjb21tb24u
IEZ1cnRoZXIKKyAgICAgICAgICAgIHNwbGl0IG91dCBtdWx0aXBhcnQgZmlsZSBhbmQgbXVsdGlw
YXJ0IHN0cmluZyBhcHBlbmRpbmcsIHNpbmNlIHRoZXkgdG9vIGRpZCBub3QKKyAgICAgICAgICAg
IHNoYXJlIHRoYXQgbXVjaCBpbiBjb21tb24gYW5kIG1ha2VzIHRoZSBjb2RlIGVhc2llciB0byBm
b2xsb3cuIAorCisgICAgICAgICAgICBTdHJpbmcgdmFsdWUgbm9ybWFsaXphdGlvbiBoYXMgYmVl
biBtb3ZlZCBlbnRpcmVseSBoZXJlIChwcmV2aW91c2x5IGl0IHdhcyBhIG1lbWJlciAKKyAgICAg
ICAgICAgIGZ1bmN0aW9uIG9mIEZvcm1EYXRhTGlzdCkgYXMgRm9ybURhdGEgaXMgdGhlIG9ubHkg
dXNlci4KKworICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisgICAgICAgICogbG9hZGVyL0Zvcm1TdWJtaXNz
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpjcmVhdGUpOgorICAg
ICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZl
dGNoQm9keTo6ZXh0cmFjdCk6CisgICAgICAgIAorICAgICAgICAgICAgVXBkYXRlIGZvciBuZXcg
Rm9ybURhdGEgY3JlYXRlIGZ1bmN0aW9ucyB3aGljaCBkb24ndCBuZWVkIHRoZQorICAgICAgICAg
ICAgZW5jb2RpbmcgcGFzc2VkIGV4cGxpY2l0bHksIHNpbmNlIGl0IGlzIHBhcnQgb2YgdGhlIERP
TUZvcm1EYXRhLgorICAgICAgICAKKyAgICAgICAgKiBodG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUu
Y3BwOgorICAgICAgICAqIGh0bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5oOgorICAgICAgICAqIGh0
bWwvQmFzZUNoZWNrYWJsZUlucHV0VHlwZS5jcHA6CisgICAgICAgICogaHRtbC9CYXNlQ2hlY2th
YmxlSW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9GaWxlSW5wdXRUeXBlLmNwcDoKKyAgICAg
ICAgKiBodG1sL0ZpbGVJbnB1dFR5cGUuaDoKKyAgICAgICAgKiBodG1sL0Zvcm1Bc3NvY2lhdGVk
RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwOgorICAgICAg
ICAqIGh0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAg
ICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEtleWdl
bkVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTEtleWdlbkVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTE9iamVj
dEVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxTZWxl
Y3RFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAg
ICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hpZGRl
bklucHV0VHlwZS5jcHA6CisgICAgICAgICogaHRtbC9IaWRkZW5JbnB1dFR5cGUuaDoKKyAgICAg
ICAgKiBodG1sL0ltYWdlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKiBodG1sL0ltYWdlSW5wdXRU
eXBlLmg6CisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuY3BwOgorICAgICAgICAqIGh0bWwvSW5w
dXRUeXBlLmg6CisgICAgICAgICogaHRtbC9TdWJtaXRJbnB1dFR5cGUuY3BwOgorICAgICAgICAq
IGh0bWwvU3VibWl0SW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5
cGUuY3BwOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmg6CisKKyAgICAgICAg
ICAgIFVwZGF0ZSB0byB1c2UgRE9NRm9ybURhdGEgZGlyZWN0bHksIHJhdGhlciB0aGFuIHRoZSBG
b3JtRGF0YUxpc3QsIHdoaWNoIAorICAgICAgICAgICAgaGFzIGJlZW4gcmVtb3ZlZC4KKworICAg
ICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHA6CisKKyAgICAgICAgICAg
IFJlbW92ZSB1bm5lY2Vzc2FyeSAjaW5jbHVkZSBvZiB1bnVzZWQgKGFuZCBub3cgcmVtb3ZlZCkg
Rm9ybURhdGFMaXN0LmgKKwogMjAxNy0wOS0xMSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVo
QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TIFdLMl0gU3VwcG9ydCB0YXBwaW5nIHRvIGFkZCBp
dGVtcyB0byB0aGUgY3VycmVudCBkcmFnIHNlc3Npb24gaW4gd2ViIGNvbnRlbnQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTc5Niw3ICsxNzk2LDYgQEAgc2V0KFdlYkNv
cmVfU09VUkNFUwogICAgIGh0bWwvRmlsZUlucHV0VHlwZS5jcHAKICAgICBodG1sL0Zvcm1Bc3Nv
Y2lhdGVkRWxlbWVudC5jcHAKICAgICBodG1sL0Zvcm1Db250cm9sbGVyLmNwcAotICAgIGh0bWwv
Rm9ybURhdGFMaXN0LmNwcAogICAgIGh0bWwvR2VuZXJpY0NhY2hlZEhUTUxDb2xsZWN0aW9uLmNw
cAogICAgIGh0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwCiAgICAgaHRtbC9IVE1MQW5jaG9yRWxl
bWVudC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5j
cHAJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0
Y2hCb2R5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBGZXRjaEJvZHkgRmV0
Y2hCb2R5OjpleHRyYWN0KFNjcmlwdEV4ZWN1CiAgICAgICAgIHJldHVybiBGZXRjaEJvZHkoV1RG
TW92ZShibG9iKSk7CiAgICAgfSwgWyZdKFJlZlB0cjxET01Gb3JtRGF0YT4mIHZhbHVlKSBtdXRh
YmxlIHsKICAgICAgICAgUmVmPERPTUZvcm1EYXRhPiBkb21Gb3JtRGF0YSA9IHZhbHVlLnJlbGVh
c2VOb25OdWxsKCk7Ci0gICAgICAgIGF1dG8gZm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlTXVs
dGlQYXJ0KGRvbUZvcm1EYXRhLmdldCgpLCBkb21Gb3JtRGF0YS0+ZW5jb2RpbmcoKSwgJnN0YXRp
Y19jYXN0PERvY3VtZW50Jj4oY29udGV4dCkpOworICAgICAgICBhdXRvIGZvcm1EYXRhID0gRm9y
bURhdGE6OmNyZWF0ZU11bHRpUGFydChkb21Gb3JtRGF0YS5nZXQoKSwgJnN0YXRpY19jYXN0PERv
Y3VtZW50Jj4oY29udGV4dCkpOwogICAgICAgICBjb250ZW50VHlwZSA9IG1ha2VTdHJpbmcoIm11
bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIsIGZvcm1EYXRhLT5ib3VuZGFyeSgpLmRhdGEo
KSk7CiAgICAgICAgIHJldHVybiBGZXRjaEJvZHkoV1RGTW92ZShmb3JtRGF0YSkpOwogICAgIH0s
IFsmXShSZWZQdHI8VVJMU2VhcmNoUGFyYW1zPiYgdmFsdWUpIG11dGFibGUgewpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NzU1LDggKzQ3NTUsNiBAQAogCQlBODEzNjlF
MzA5NzM3NEY2MDBENzQ0NjMgLyogSFRNTExhYmVsRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODEzNjlDNzA5NzM3NEY1MDBENzQ0NjMg
LyogSFRNTExhYmVsRWxlbWVudC5jcHAgKi87IH07CiAJCUE4MTM2OUU0MDk3Mzc0RjYwMEQ3NDQ2
MyAvKiBIVE1MS2V5Z2VuRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTgxMzY5QzgwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxLZXlnZW5FbGVt
ZW50LmggKi87IH07CiAJCUE4MTM2OUU1MDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MS2V5Z2VuRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
ODEzNjlDOTA5NzM3NEY2MDBENzQ0NjMgLyogSFRNTEtleWdlbkVsZW1lbnQuY3BwICovOyB9Owot
CQlBODEzNkQzODA5NzNBOEU3MDBENzQ0NjMgLyogRm9ybURhdGFMaXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODEzNkQzNjA5NzNBOEU3MDBENzQ0
NjMgLyogRm9ybURhdGFMaXN0LmggKi87IH07Ci0JCUE4MTM2RDM5MDk3M0E4RTcwMEQ3NDQ2MyAv
KiBGb3JtRGF0YUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTgxMzZEMzcwOTczQThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5jcHAgKi87
IH07CiAJCUE4MTg1RjM5MDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVudFR5cGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg1RjMxMDk3NjU3NjUw
MDU4MjZEOSAvKiBEb2N1bWVudFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBODE4NUYzQTA5NzY1NzY2MDA1ODI2RDkgLyogRG9jdW1lbnRU
eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
MTg1RjMyMDk3NjU3NjUwMDU4MjZEOSAvKiBEb2N1bWVudFR5cGUuY3BwICovOyB9OwogCQlBODE4
NUYzQjA5NzY1NzY2MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg1RjMzMDk3NjU3NjUwMDU4MjZE
OSAvKiBET01JbXBsZW1lbnRhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xMzIxNCw4ICsxMzIxMiw2IEBACiAJCUE4MTM2OUM3MDk3Mzc0
RjUwMEQ3NDQ2MyAvKiBIVE1MTGFiZWxFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBIVE1MTGFiZWxFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTgxMzY5QzgwOTczNzRGNTAwRDc0NDYzIC8qIEhUTUxLZXlnZW5FbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MS2V5Z2VuRWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODEzNjlDOTA5NzM3NEY2MDBENzQ0NjMg
LyogSFRNTEtleWdlbkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEhUTUxLZXlnZW5FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQTgxMzZEMzYwOTczQThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybURhdGFMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUE4MTM2RDM3MDk3M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1EYXRhTGlzdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MTg1RjMxMDk3NjU3NjUwMDU4MjZEOSAv
KiBEb2N1bWVudFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvY3Vt
ZW50VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE4NUYzMjA5NzY1NzY1
MDA1ODI2RDkgLyogRG9jdW1lbnRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEb2N1bWVudFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBODE4NUYzMzA5NzY1NzY1MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUltcGxlbWVudGF0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDU5MSw4ICsyMDU4Nyw2IEBACiAJCQkJNEEwREEyRkQx
MjlCMjQxOTAwQUI2MUUxIC8qIEZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oICovLAogCQkJCUY1MDY2
NEY1MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJRjUwNjY0
RjYxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmggKi8sCi0JCQkJQTgxMzZEMzcw
OTczQThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5jcHAgKi8sCi0JCQkJQTgxMzZEMzYwOTcz
QThFNzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5oICovLAogCQkJCTlCNTBCMURDMTdDRDRDMEYw
MDg3RjYzQyAvKiBGb3JtTmFtZWRJdGVtLmggKi8sCiAJCQkJOTcyMDVBQUQxMjM5MjhDQTAwQjE3
MzgwIC8qIEZUUERpcmVjdG9yeURvY3VtZW50LmNwcCAqLywKIAkJCQk5NzIwNUFBRTEyMzkyOENB
MDBCMTczODAgLyogRlRQRGlyZWN0b3J5RG9jdW1lbnQuaCAqLywKQEAgLTI3Nzg4LDcgKzI3Nzgy
LDYgQEAKIAkJCQlGNTA2NjRGODE1N0Y1MkRDMDBBQzIyNkYgLyogRm9ybUNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxNEM3NjcwMENFOTIzQTEwMDdFRjNDRCAvKiBGb3JtRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDg1QjkyQkIwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRh
QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTgxMzZEMzgwOTczQThFNzAwRDc0NDYzIC8q
IEZvcm1EYXRhTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VFNjg0NjcxMkQyNkUzODAwRTc5
NDE1IC8qIEZvcm1EYXRhU3RyZWFtQ0ZOZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNEM3NjRF
MENFOTIzNEUwMDdFRjNDRCAvKiBGb3JtRGF0YVN0cmVhbU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOUI1MEIxREUxN0NENEMwRjAwODdGNjNDIC8qIEZvcm1OYW1lZEl0ZW0uaCBpbiBIZWFkZXJz
ICovLApAQCAtMzE4MjgsNyArMzE4MjEsNiBAQAogCQkJCUY1MDY2NEY3MTU3RjUyREMwMEFDMjI2
RiAvKiBGb3JtQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTRDNzY2RjBDRTky
M0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDg1QjkyQkEw
RUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlBODEzNkQzOTA5NzNBOEU3MDBENzQ0NjMgLyogRm9ybURhdGFMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdFRTY4NDY2MTJEMjZFMzgwMEU3OTQxNSAvKiBGb3JtRGF0YVN0cmVhbUNGTmV0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3NjRGMENFOTIzNEUwMDdFRjNDRCAvKiBGb3Jt
RGF0YVN0cmVhbU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTY1NkQzNzNCMEFEQkE1REUwMEE0
NTU0RCAvKiBGb3JtU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0Jhc2VCdXR0b25JbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5jcHAJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvQmFzZUJ1dHRvbklucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgYm9vbCBCYXNlQnV0dG9uSW5wdXRUeXBlOjpzaG91bGRTYXZlQW5k
UgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBCYXNlQnV0dG9uSW5wdXRUeXBlOjphcHBl
bmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBib29sKSBjb25zdAorYm9vbCBCYXNlQnV0dG9uSW5w
dXRUeXBlOjphcHBlbmRGb3JtRGF0YShET01Gb3JtRGF0YSYsIGJvb2wpIGNvbnN0CiB7CiAgICAg
Ly8gQnV0dG9ucyBleGNlcHQgb3ZlcnJpZGRlbiB0eXBlcyBhcmUgbmV2ZXIgc3VjY2Vzc2Z1bC4K
ICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VCdXR0b25J
bnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VCdXR0b25J
bnB1dFR5cGUuaAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9CYXNl
QnV0dG9uSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHJvdGVj
dGVkOgogCiBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkU2F2ZUFuZFJlc3RvcmVGb3JtQ29udHJv
bFN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0
YUxpc3QmLCBib29sKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGVuZEZvcm1EYXRhKERP
TUZvcm1EYXRhJiwgYm9vbCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVuZGVyUHRyPFJlbmRlckVs
ZW1lbnQ+IGNyZWF0ZUlucHV0UmVuZGVyZXIoUmVuZGVyU3R5bGUmJikgb3ZlcnJpZGU7CiAgICAg
Ym9vbCBzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpIG92ZXJyaWRlOwogICAgIHZv
aWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvcikg
b3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VDaGVja2FibGVJbnB1dFR5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlu
cHV0VHlwZS5jcHAJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFz
ZUNoZWNrYWJsZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJCYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmgi
CiAKKyNpbmNsdWRlICJET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKQEAg
LTUzLDExICs1MywxMSBAQCB2b2lkIEJhc2VDaGVja2FibGVJbnB1dFR5cGU6OnJlc3RvcmVGb3Jt
CiAgICAgZWxlbWVudCgpLnNldENoZWNrZWQoc3RhdGVbMF0gPT0gIm9uIik7CiB9CiAKLWJvb2wg
QmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiBlbmNv
ZGluZywgYm9vbCkgY29uc3QKK2Jvb2wgQmFzZUNoZWNrYWJsZUlucHV0VHlwZTo6YXBwZW5kRm9y
bURhdGEoRE9NRm9ybURhdGEmIGZvcm1EYXRhLCBib29sKSBjb25zdAogewogICAgIGlmICghZWxl
bWVudCgpLmNoZWNrZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVuY29kaW5nLmFw
cGVuZERhdGEoZWxlbWVudCgpLm5hbWUoKSwgZWxlbWVudCgpLnZhbHVlKCkpOworICAgIGZvcm1E
YXRhLmFwcGVuZChlbGVtZW50KCkubmFtZSgpLCBlbGVtZW50KCkudmFsdWUoKSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJsZUlu
cHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQmFzZUNoZWNrYWJs
ZUlucHV0VHlwZS5oCShyZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0Jh
c2VDaGVja2FibGVJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBw
cm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIEZvcm1Db250cm9sU3RhdGUgc2F2ZUZvcm1Db250cm9s
U3RhdGUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHJlc3RvcmVGb3JtQ29udHJvbFN0YXRl
KGNvbnN0IEZvcm1Db250cm9sU3RhdGUmKSBvdmVycmlkZTsKLSAgICBib29sIGFwcGVuZEZvcm1E
YXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwZW5k
Rm9ybURhdGEoRE9NRm9ybURhdGEmLCBib29sKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGhh
bmRsZUtleXByZXNzRXZlbnQoS2V5Ym9hcmRFdmVudCYpIG92ZXJyaWRlOwogICAgIGJvb2wgY2Fu
U2V0U3RyaW5nVmFsdWUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGFjY2Vzc0tleUFjdGlv
bihib29sIHNlbmRNb3VzZUV2ZW50cykgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0RPTUZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RP
TUZvcm1EYXRhLmNwcAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9E
T01Gb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEyICszNywxMiBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBET01Gb3JtRGF0YTo6RE9NRm9ybURhdGEoY29uc3QgVGV4dEVuY29k
aW5nJiBlbmNvZGluZykKLSAgICA6IEZvcm1EYXRhTGlzdChlbmNvZGluZykKKyAgICA6IG1fZW5j
b2RpbmcoZW5jb2RpbmcpCiB7CiB9CiAKIERPTUZvcm1EYXRhOjpET01Gb3JtRGF0YShIVE1MRm9y
bUVsZW1lbnQqIGZvcm0pCi0gICAgOiBGb3JtRGF0YUxpc3QoVVRGOEVuY29kaW5nKCkpCisgICAg
OiBtX2VuY29kaW5nKFVURjhFbmNvZGluZygpKQogewogICAgIGlmICghZm9ybSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNTMsMTQgKzUzLDI2IEBAIERPTUZvcm1EYXRhOjpET01Gb3JtRGF0YShIVE1M
Rm9ybUVsZW1lbnQKICAgICB9CiB9CiAKKy8vIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8j
Y3JlYXRlLWFuLWVudHJ5CithdXRvIERPTUZvcm1EYXRhOjpjcmVhdGVGaWxlRW50cnkoY29uc3Qg
U3RyaW5nJiBuYW1lLCBCbG9iJiBibG9iLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSAtPiBJdGVt
Cit7CisgICAgaWYgKCFibG9iLmlzRmlsZSgpKQorICAgICAgICByZXR1cm4geyBuYW1lLCBGaWxl
OjpjcmVhdGUoYmxvYiwgZmlsZW5hbWUuaXNOdWxsKCkgPyBBU0NJSUxpdGVyYWwoImJsb2IiKSA6
IGZpbGVuYW1lKSB9OworICAgIAorICAgIGlmICghZmlsZW5hbWUuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiB7IG5hbWUsIEZpbGU6OmNyZWF0ZShkb3duY2FzdDxGaWxlPihibG9iKSwgZmlsZW5h
bWUpIH07CisKKyAgICByZXR1cm4geyBuYW1lLCBSZWZQdHI8RmlsZT4geyAmZG93bmNhc3Q8Rmls
ZT4oYmxvYikgfSB9OworfQorCiB2b2lkIERPTUZvcm1EYXRhOjphcHBlbmQoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGFwcGVuZERhdGEobmFtZSwgdmFs
dWUpOworICAgIG1faXRlbXMuYXBwZW5kKHsgbmFtZSwgdmFsdWUgfSk7CiB9CiAKIHZvaWQgRE9N
Rm9ybURhdGE6OmFwcGVuZChjb25zdCBTdHJpbmcmIG5hbWUsIEJsb2ImIGJsb2IsIGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUpCiB7Ci0gICAgYXBwZW5kQmxvYihuYW1lLCBibG9iLCBmaWxlbmFtZSk7
CisgICAgbV9pdGVtcy5hcHBlbmQoY3JlYXRlRmlsZUVudHJ5KG5hbWUsIGJsb2IsIGZpbGVuYW1l
KSk7CiB9CiAKIHZvaWQgRE9NRm9ybURhdGE6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCkBA
IC0xMDQsMTIgKzExNiwzNiBAQCBib29sIERPTUZvcm1EYXRhOjpoYXMoY29uc3QgU3RyaW5nJiBu
YW1lCiAKIHZvaWQgRE9NRm9ybURhdGE6OnNldChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCiB7Ci0gICAgc2V0RGF0YShuYW1lLCB2YWx1ZSk7CisgICAgc2V0KG5hbWUs
IHsgbmFtZSwgdmFsdWUgfSk7CiB9CiAKIHZvaWQgRE9NRm9ybURhdGE6OnNldChjb25zdCBTdHJp
bmcmIG5hbWUsIEJsb2ImIGJsb2IsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCiB7Ci0gICAgc2V0
QmxvYihuYW1lLCBibG9iLCBmaWxlbmFtZSk7CisgICAgc2V0KG5hbWUsIGNyZWF0ZUZpbGVFbnRy
eShuYW1lLCBibG9iLCBmaWxlbmFtZSkpOworfQorCit2b2lkIERPTUZvcm1EYXRhOjpzZXQoY29u
c3QgU3RyaW5nJiBuYW1lLCBJdGVtJiYgaXRlbSkKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPHNpemVf
dD4gaW5pdGlhbE1hdGNoTG9jYXRpb247CisKKyAgICAvLyBGaW5kIGxvY2F0aW9uIG9mIHRoZSBm
aXJzdCBpdGVtIHdpdGggYSBtYXRjaGluZyBuYW1lLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9pdGVtcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobmFtZSA9PSBtX2l0ZW1zW2ld
Lm5hbWUpIHsKKyAgICAgICAgICAgIGluaXRpYWxNYXRjaExvY2F0aW9uID0gaTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluaXRpYWxNYXRjaExvY2F0
aW9uKSB7CisgICAgICAgIG1faXRlbXNbKmluaXRpYWxNYXRjaExvY2F0aW9uXSA9IFdURk1vdmUo
aXRlbSk7CisKKyAgICAgICAgbV9pdGVtcy5yZW1vdmVBbGxNYXRjaGluZyhbJm5hbWVdIChjb25z
dCBhdXRvJiBpdGVtKSB7CisgICAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lID09IG5hbWU7Cisg
ICAgICAgIH0sICppbml0aWFsTWF0Y2hMb2NhdGlvbiArIDEpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9pdGVtcy5hcHBlbmQoV1RGTW92ZShpdGVtKSk7CiB9CiAKIERPTUZvcm1E
YXRhOjpJdGVyYXRvcjo6SXRlcmF0b3IoRE9NRm9ybURhdGEmIHRhcmdldCkKQEAgLTExNywxNCAr
MTUzLDE0IEBAIERPTUZvcm1EYXRhOjpJdGVyYXRvcjo6SXRlcmF0b3IoRE9NRm9ybUQKIHsKIH0K
IAotc3RkOjpvcHRpb25hbDxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIERPTUZvcm1EYXRhOjpG
b3JtRGF0YUVudHJ5VmFsdWU+PiBET01Gb3JtRGF0YTo6SXRlcmF0b3I6Om5leHQoKQorc3RkOjpv
cHRpb25hbDxLZXlWYWx1ZVBhaXI8U3RyaW5nLCBET01Gb3JtRGF0YTo6Rm9ybURhdGFFbnRyeVZh
bHVlPj4gRE9NRm9ybURhdGE6Okl0ZXJhdG9yOjpuZXh0KCkKIHsKICAgICBhdXRvJiBpdGVtcyA9
IG1fdGFyZ2V0LT5pdGVtcygpOwogICAgIGlmIChtX2luZGV4ID49IGl0ZW1zLnNpemUoKSkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIGF1dG8mIGl0ZW0gPSBpdGVtc1ttX2lu
ZGV4KytdOwotICAgIHJldHVybiBXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIEZvcm1EYXRhRW50
cnlWYWx1ZT4geyBpdGVtLm5hbWUsIGl0ZW0uZGF0YSB9OworICAgIHJldHVybiBtYWtlS2V5VmFs
dWVQYWlyKGl0ZW0ubmFtZSwgaXRlbS5kYXRhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuaAkocmV2aXNpb24gMjIxOTAwKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwy
NCArMzAsMzIgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIK
KyNpbmNsdWRlICJGaWxlLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQmxvYjsKIGNs
YXNzIEhUTUxGb3JtRWxlbWVudDsKLWNsYXNzIFRleHRFbmNvZGluZzsKIAotLy8gRklYTUU6IERv
IHdlIG5lZWQgdG8gaGF2ZSBzZXBhcmF0ZSBET01Gb3JtRGF0YSBhbmQgRm9ybURhdGFMaXN0IGNs
YXNzZXM/Ci1jbGFzcyBET01Gb3JtRGF0YSA6IHB1YmxpYyBGb3JtRGF0YUxpc3QsIHB1YmxpYyBS
ZWZDb3VudGVkPERPTUZvcm1EYXRhPiB7CitjbGFzcyBET01Gb3JtRGF0YSA6IHB1YmxpYyBSZWZD
b3VudGVkPERPTUZvcm1EYXRhPiB7CiBwdWJsaWM6CisgICAgdXNpbmcgRm9ybURhdGFFbnRyeVZh
bHVlID0gVmFyaWFudDxSZWZQdHI8RmlsZT4sIFN0cmluZz47CisKKyAgICBzdHJ1Y3QgSXRlbSB7
CisgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICBGb3JtRGF0YUVudHJ5VmFsdWUgZGF0YTsK
KyAgICB9OworCiAgICAgc3RhdGljIFJlZjxET01Gb3JtRGF0YT4gY3JlYXRlKEhUTUxGb3JtRWxl
bWVudCogZm9ybSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01Gb3JtRGF0YShmb3JtKSk7IH0K
ICAgICBzdGF0aWMgUmVmPERPTUZvcm1EYXRhPiBjcmVhdGUoY29uc3QgVGV4dEVuY29kaW5nJiBl
bmNvZGluZykgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01Gb3JtRGF0YShlbmNvZGluZykpOyB9
CiAKLSAgICB1c2luZyBGb3JtRGF0YUVudHJ5VmFsdWUgPSBJdGVtOjpEYXRhOworICAgIGNvbnN0
IFZlY3RvcjxJdGVtPiYgaXRlbXMoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1zOyB9CisgICAgY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2Rpbmc7IH0K
IAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSk7CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBuYW1lLCBCbG9iJiwgY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSA9IHsgfSk7CkBAIC02MSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICBjbGFz
cyBJdGVyYXRvciB7CiAgICAgcHVibGljOgogICAgICAgICBleHBsaWNpdCBJdGVyYXRvcihET01G
b3JtRGF0YSYpOwotICAgICAgICBzdGQ6Om9wdGlvbmFsPFdURjo6S2V5VmFsdWVQYWlyPFN0cmlu
ZywgRm9ybURhdGFFbnRyeVZhbHVlPj4gbmV4dCgpOworICAgICAgICBzdGQ6Om9wdGlvbmFsPEtl
eVZhbHVlUGFpcjxTdHJpbmcsIEZvcm1EYXRhRW50cnlWYWx1ZT4+IG5leHQoKTsKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIFJlZjxET01Gb3JtRGF0YT4gbV90YXJnZXQ7CkBAIC03Miw2ICs4MCwx
MiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGV4cGxpY2l0IERPTUZvcm1EYXRhKGNvbnN0IFRl
eHRFbmNvZGluZyYpOwogICAgIGV4cGxpY2l0IERPTUZvcm1EYXRhKEhUTUxGb3JtRWxlbWVudCop
OworCisgICAgSXRlbSBjcmVhdGVGaWxlRW50cnkoY29uc3QgU3RyaW5nJiBuYW1lLCBCbG9iJiwg
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7CisgICAgdm9pZCBzZXQoY29uc3QgU3RyaW5nJiBuYW1l
LCBJdGVtJiYpOworCisgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7CisgICAgVmVjdG9yPEl0
ZW0+IG1faXRlbXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIz
LDcgQEAKICNpbmNsdWRlICJGaWxlSW5wdXRUeXBlLmgiCiAKICNpbmNsdWRlICJDaHJvbWUuaCIK
KyNpbmNsdWRlICJET01Gb3JtRGF0YS5oIgogI2luY2x1ZGUgIkRyYWdEYXRhLmgiCiAjaW5jbHVk
ZSAiRWxlbWVudENoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJFdmVudC5oIgpAQCAtMzEsNyAr
MzIsNiBAQAogI2luY2x1ZGUgIkZpbGVMaXN0Q3JlYXRvci5oIgogI2luY2x1ZGUgIkZpbGVTeXN0
ZW0uaCIKICNpbmNsdWRlICJGb3JtQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZvcm1EYXRhTGlz
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNzMsMTQgKzczLDE0IEBAIHByaXZhdGU6CiAKIFJl
ZjxVcGxvYWRCdXR0b25FbGVtZW50PiBVcGxvYWRCdXR0b25FbGVtZW50OjpjcmVhdGUoRG9jdW1l
bnQmIGRvY3VtZW50KQogewotICAgIFJlZjxVcGxvYWRCdXR0b25FbGVtZW50PiBidXR0b24gPSBh
ZG9wdFJlZigqbmV3IFVwbG9hZEJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKKyAgICBhdXRvIGJ1
dHRvbiA9IGFkb3B0UmVmKCpuZXcgVXBsb2FkQnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwogICAg
IGJ1dHRvbi0+c2V0VmFsdWUoZmlsZUJ1dHRvbkNob29zZUZpbGVMYWJlbCgpKTsKICAgICByZXR1
cm4gYnV0dG9uOwogfQogCiBSZWY8VXBsb2FkQnV0dG9uRWxlbWVudD4gVXBsb2FkQnV0dG9uRWxl
bWVudDo6Y3JlYXRlRm9yTXVsdGlwbGUoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIFJlZjxV
cGxvYWRCdXR0b25FbGVtZW50PiBidXR0b24gPSBhZG9wdFJlZigqbmV3IFVwbG9hZEJ1dHRvbkVs
ZW1lbnQoZG9jdW1lbnQpKTsKKyAgICBhdXRvIGJ1dHRvbiA9IGFkb3B0UmVmKCpuZXcgVXBsb2Fk
QnV0dG9uRWxlbWVudChkb2N1bWVudCkpOwogICAgIGJ1dHRvbi0+c2V0VmFsdWUoZmlsZUJ1dHRv
bkNob29zZU11bHRpcGxlRmlsZXNMYWJlbCgpKTsKICAgICByZXR1cm4gYnV0dG9uOwogfQpAQCAt
MTQ3LDkgKzE0NywxMSBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6OnJlc3RvcmVGb3JtQ29udHJvbFN0
CiAgICAgZmlsZXNDaG9zZW4oZmlsZXNGcm9tRm9ybUNvbnRyb2xTdGF0ZShzdGF0ZSkpOwogfQog
Ci1ib29sIEZpbGVJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYgZW5jb2Rp
bmcsIGJvb2wgbXVsdGlwYXJ0KSBjb25zdAorYm9vbCBGaWxlSW5wdXRUeXBlOjphcHBlbmRGb3Jt
RGF0YShET01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wgbXVsdGlwYXJ0KSBjb25zdAogewotICAg
IEZpbGVMaXN0KiBmaWxlTGlzdCA9IGVsZW1lbnQoKS5maWxlcygpOworICAgIGF1dG8gbmFtZSA9
IGVsZW1lbnQoKS5uYW1lKCk7CisKKyAgICBhdXRvKiBmaWxlTGlzdCA9IGVsZW1lbnQoKS5maWxl
cygpOwogICAgIHVuc2lnbmVkIG51bUZpbGVzID0gZmlsZUxpc3QtPmxlbmd0aCgpOwogICAgIGlm
ICghbXVsdGlwYXJ0KSB7CiAgICAgICAgIC8vIFNlbmQgb25seSB0aGUgYmFzZW5hbWVzLgpAQCAt
MTYwLDE5ICsxNjIsMTkgQEAgYm9vbCBGaWxlSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShGb3Jt
RAogICAgICAgICAvLyBzdWJtaXNzaW9uIG9mIGZpbGUgaW5wdXRzLCBhbmQgRmlyZWZveCBkb2Vz
bid0IGFkZCAibmFtZT0iIHF1ZXJ5CiAgICAgICAgIC8vIHBhcmFtZXRlci4KICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZpbGVzOyArK2kpCi0gICAgICAgICAgICBlbmNvZGlu
Zy5hcHBlbmREYXRhKGVsZW1lbnQoKS5uYW1lKCksIGZpbGVMaXN0LT5pdGVtKGkpLT5uYW1lKCkp
OworICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIGZpbGVMaXN0LT5pdGVtKGkpLT5u
YW1lKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICAvLyBJZiBubyBmaWxl
bmFtZSBhdCBhbGwgaXMgZW50ZXJlZCwgcmV0dXJuIHN1Y2Nlc3NmdWwgYnV0IGVtcHR5LgogICAg
IC8vIE51bGwgd291bGQgYmUgbW9yZSBsb2dpY2FsLCBidXQgTmV0c2NhcGUgcG9zdHMgYW4gZW1w
dHkgZmlsZS4gQXJnaC4KICAgICBpZiAoIW51bUZpbGVzKSB7Ci0gICAgICAgIGVuY29kaW5nLmFw
cGVuZEJsb2IoZWxlbWVudCgpLm5hbWUoKSwgRmlsZTo6Y3JlYXRlKGVtcHR5U3RyaW5nKCkpKTsK
KyAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIEZpbGU6OmNyZWF0ZShlbXB0eVN0cmluZygp
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1GaWxlczsgKytpKQotICAgICAgICBlbmNvZGluZy5hcHBlbmRCbG9iKGVsZW1l
bnQoKS5uYW1lKCksICpmaWxlTGlzdC0+aXRlbShpKSk7CisgICAgICAgIGZvcm1EYXRhLmFwcGVu
ZChuYW1lLCAqZmlsZUxpc3QtPml0ZW0oaSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAkocmV2aXNpb24gMjIxOTAwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcg
KzU0LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlw
ZSgpIGNvbnN0IGZpbmFsOwogICAgIEZvcm1Db250cm9sU3RhdGUgc2F2ZUZvcm1Db250cm9sU3Rh
dGUoKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIHJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKGNvbnN0
IEZvcm1Db250cm9sU3RhdGUmKSBmaW5hbDsKLSAgICBib29sIGFwcGVuZEZvcm1EYXRhKEZvcm1E
YXRhTGlzdCYsIGJvb2wpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgYXBwZW5kRm9ybURhdGEoRE9N
Rm9ybURhdGEmLCBib29sKSBjb25zdCBmaW5hbDsKICAgICBib29sIHZhbHVlTWlzc2luZyhjb25z
dCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKICAgICBTdHJpbmcgdmFsdWVNaXNzaW5nVGV4dCgpIGNv
bnN0IGZpbmFsOwogICAgIHZvaWQgaGFuZGxlRE9NQWN0aXZhdGVFdmVudChFdmVudCYpIGZpbmFs
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5oCShy
ZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw5IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIENvbnRhaW5lck5vZGU7CitjbGFzcyBET01Gb3JtRGF0YTsKIGNsYXNzIERv
Y3VtZW50OwogY2xhc3MgRm9ybUF0dHJpYnV0ZVRhcmdldE9ic2VydmVyOwotY2xhc3MgRm9ybURh
dGFMaXN0OwogY2xhc3MgSFRNTEVsZW1lbnQ7CiBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiBjbGFz
cyBOb2RlOwpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAKICAgICAvLyBPdmVycmlkZSBpbiBk
ZXJpdmVkIGNsYXNzZXMgdG8gZ2V0IHRoZSBlbmNvZGVkIG5hbWU9dmFsdWUgcGFpciBmb3Igc3Vi
bWl0dGluZy4KICAgICAvLyBSZXR1cm4gdHJ1ZSBmb3IgYSBzdWNjZXNzZnVsIGNvbnRyb2wgKHNl
ZSBIVE1MNC0xNy4xMy4yKS4KLSAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURh
dGFMaXN0JiwgYm9vbCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYXBwZW5k
Rm9ybURhdGEoRE9NRm9ybURhdGEmLCBib29sKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdm9p
ZCBmb3JtV2lsbEJlRGVzdHJveWVkKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9y
bURhdGFMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1EYXRh
TGlzdC5jcHAJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybURh
dGFMaXN0LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKLQotI2lu
Y2x1ZGUgIkxpbmVFbmRpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotRm9ybURhdGFMaXN0OjpGb3JtRGF0YUxpc3QoY29uc3QgVGV4
dEVuY29kaW5nJiBlbmNvZGluZykKLSAgICA6IG1fZW5jb2RpbmcoZW5jb2RpbmcpCi17Ci19Ci0K
LUNTdHJpbmcgRm9ybURhdGFMaXN0Ojpub3JtYWxpemVTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYobV9lbmNv
ZGluZy5lbmNvZGUodmFsdWUsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7Ci19Ci0KLS8vIGh0
dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jY3JlYXRlLWFuLWVudHJ5Ci1hdXRvIEZvcm1EYXRh
TGlzdDo6Y3JlYXRlRmlsZUVudHJ5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPEJsb2I+JiYgYmxv
YiwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkgLT4gSXRlbQotewotICAgIGlmICghYmxvYi0+aXNG
aWxlKCkpCi0gICAgICAgIHJldHVybiB7IG5hbWUsIEZpbGU6OmNyZWF0ZShibG9iLmdldCgpLCBm
aWxlbmFtZS5pc051bGwoKSA/IEFTQ0lJTGl0ZXJhbCgiYmxvYiIpIDogZmlsZW5hbWUpIH07Ci0g
ICAgCi0gICAgaWYgKCFmaWxlbmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIHsgbmFtZSwg
RmlsZTo6Y3JlYXRlKGRvd25jYXN0PEZpbGU+KGJsb2IuZ2V0KCkpLCBmaWxlbmFtZSkgfTsKLQot
ICAgIHJldHVybiB7IG5hbWUsIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxGaWxlPihXVEZNb3ZlKGJs
b2IpKSB9OwotfQotCi12b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgbV9pdGVtcy5hcHBlbmQoeyBuYW1l
LCB2YWx1ZSB9KTsKLX0KLQotdm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZERhdGEoY29uc3QgU3Ry
aW5nJiBuYW1lLCBpbnQgdmFsdWUpCi17Ci0gICAgbV9pdGVtcy5hcHBlbmQoeyBuYW1lLCBTdHJp
bmc6Om51bWJlcih2YWx1ZSkgfSk7Ci19Ci0KLXZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRCbG9i
KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPEJsb2I+JiYgYmxvYiwgY29uc3QgU3RyaW5nJiBmaWxl
bmFtZSkKLXsKLSAgICBtX2l0ZW1zLmFwcGVuZChjcmVhdGVGaWxlRW50cnkobmFtZSwgV1RGTW92
ZShibG9iKSwgZmlsZW5hbWUpKTsKLX0KLQotdm9pZCBGb3JtRGF0YUxpc3Q6OnNldChjb25zdCBT
dHJpbmcmIG5hbWUsIEl0ZW0mJiBpdGVtKQotewotICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBp
bml0aWFsTWF0Y2hMb2NhdGlvbjsKLQotICAgIC8vIEZpbmQgbG9jYXRpb24gb2YgdGhlIGZpcnN0
IGl0ZW0gd2l0aCBhIG1hdGNoaW5nIG5hbWUuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2l0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChuYW1lID09IG1faXRlbXNbaV0ubmFt
ZSkgewotICAgICAgICAgICAgaW5pdGlhbE1hdGNoTG9jYXRpb24gPSBpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaW5pdGlhbE1hdGNoTG9jYXRpb24p
IHsKLSAgICAgICAgbV9pdGVtc1sqaW5pdGlhbE1hdGNoTG9jYXRpb25dID0gV1RGTW92ZShpdGVt
KTsKLQotICAgICAgICBtX2l0ZW1zLnJlbW92ZUFsbE1hdGNoaW5nKFsmbmFtZV0gKGNvbnN0IGF1
dG8mIGl0ZW0pIHsKLSAgICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUgPT0gbmFtZTsKLSAgICAg
ICAgfSwgKmluaXRpYWxNYXRjaExvY2F0aW9uICsgMSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX2l0ZW1zLmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsKLX0KLQotdm9pZCBGb3JtRGF0
YUxpc3Q6OnNldERhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIHNldChuYW1lLCB7IG5hbWUsIHZhbHVlIH0pOwotfQotCi12b2lkIEZvcm1EYXRhTGlz
dDo6c2V0QmxvYihjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxCbG9iPiYmIGJsb2IsIGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUpCi17Ci0gICAgc2V0KG5hbWUsIGNyZWF0ZUZpbGVFbnRyeShuYW1lLCBX
VEZNb3ZlKGJsb2IpLCBmaWxlbmFtZSkpOwotfQotCi19CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBz
dm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgJKHJldmlzaW9uIDIy
MTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgJKG5vbmV4aXN0ZW50
KQpAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiRmlsZS5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBGb3JtRGF0YUxpc3QgewotcHVibGljOgotICAgIHN0cnVjdCBJdGVtIHsKLSAg
ICAgICAgdXNpbmcgRGF0YSA9IFZhcmlhbnQ8UmVmUHRyPEZpbGU+LCBTdHJpbmc+OwotCi0gICAg
ICAgIFN0cmluZyBuYW1lOwotICAgICAgICBEYXRhIGRhdGE7Ci0gICAgfTsKLQotICAgIHZvaWQg
YXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAg
IHZvaWQgYXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGludCB2YWx1ZSk7Ci0gICAgdm9p
ZCBhcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPEJsb2I+JiYsIGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUgPSB7IH0pOwotICAgIHZvaWQgc2V0RGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHZvaWQgc2V0QmxvYihjb25zdCBTdHJpbmcmIG5h
bWUsIFJlZjxCbG9iPiYmLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lID0geyB9KTsKLQotICAgIGNv
bnN0IFZlY3RvcjxJdGVtPiYgaXRlbXMoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1zOyB9Ci0gICAg
Y29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2Rpbmc7
IH0KLQotICAgIENTdHJpbmcgbm9ybWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYpIGNvbnN0Owot
Ci1wcm90ZWN0ZWQ6Ci0gICAgRm9ybURhdGFMaXN0KGNvbnN0IFRleHRFbmNvZGluZyYpOwotCi0g
ICAgSXRlbSBjcmVhdGVGaWxlRW50cnkoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8QmxvYj4mJiwg
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7Ci0gICAgdm9pZCBzZXQoY29uc3QgU3RyaW5nJiBuYW1l
LCBJdGVtJiYpOwotCi0gICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7Ci0gICAgVmVjdG9yPEl0
ZW0+IG1faXRlbXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5oCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVs
ZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1
dHRvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTEJ1dHRvbkVsZW1lbnQuaCIKIAorI2luY2x1ZGUg
IkRPTUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZvcm1E
YXRhTGlzdC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKQEAgLTE4NCwxMSArMTg0LDExIEBA
IHZvaWQgSFRNTEJ1dHRvbkVsZW1lbnQ6OnNldEFjdGl2YXRlZFN1Ym0KICAgICBtX2lzQWN0aXZh
dGVkU3VibWl0ID0gZmxhZzsKIH0KIAotYm9vbCBIVE1MQnV0dG9uRWxlbWVudDo6YXBwZW5kRm9y
bURhdGEoRm9ybURhdGFMaXN0JiBmb3JtRGF0YSwgYm9vbCkKK2Jvb2wgSFRNTEJ1dHRvbkVsZW1l
bnQ6OmFwcGVuZEZvcm1EYXRhKERPTUZvcm1EYXRhJiBmb3JtRGF0YSwgYm9vbCkKIHsKICAgICBp
ZiAobV90eXBlICE9IFNVQk1JVCB8fCBuYW1lKCkuaXNFbXB0eSgpIHx8ICFtX2lzQWN0aXZhdGVk
U3VibWl0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9ybURhdGEuYXBwZW5kRGF0YShu
YW1lKCksIHZhbHVlKCkpOworICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lKCksIHZhbHVlKCkpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0
b25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9u
RWxlbWVudC5oCShyZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxC
dXR0b25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBj
b25zdCBmaW5hbDsKICAgICB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQmKSBmaW5hbDsK
IAotICAgIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkgZmluYWw7Cisg
ICAgYm9vbCBhcHBlbmRGb3JtRGF0YShET01Gb3JtRGF0YSYsIGJvb2wpIGZpbmFsOwogCiAgICAg
Ym9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICBi
b29sIHN1cHBvcnRMYWJlbHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkocmV2aXNpb24g
MjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBGb3JtRGF0YUxpc3Q7CitjbGFzcyBET01Gb3JtRGF0YTsKIGNsYXNzIEhUTUxGaWVs
ZFNldEVsZW1lbnQ7CiBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiBjbGFzcyBIVE1MTGVnZW5kRWxl
bWVudDsKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGljOgogCiAgICAgLy8gT3ZlcnJpZGUgaW4gZGVy
aXZlZCBjbGFzc2VzIHRvIGdldCB0aGUgZW5jb2RlZCBuYW1lPXZhbHVlIHBhaXIgZm9yIHN1Ym1p
dHRpbmcuCiAgICAgLy8gUmV0dXJuIHRydWUgZm9yIGEgc3VjY2Vzc2Z1bCBjb250cm9sIChzZWUg
SFRNTDQtMTcuMTMuMikuCi0gICAgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBi
b29sKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgYXBwZW5kRm9ybURhdGEo
RE9NRm9ybURhdGEmLCBib29sKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmly
dHVhbCBib29sIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZhdGVkU3VibWl0KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAko
cmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcxLDkgKzg3MSw5IEBAIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6c2V0QWN0aXZhdGVkU3VibWkKICAgICBtX2lzQWN0aXZhdGVkU3VibWl0ID0gZmxhZzsK
IH0KIAotYm9vbCBIVE1MSW5wdXRFbGVtZW50OjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3Qm
IGVuY29kaW5nLCBib29sIG11bHRpcGFydCkKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6YXBwZW5k
Rm9ybURhdGEoRE9NRm9ybURhdGEmIGZvcm1EYXRhLCBib29sIG11bHRpcGFydCkKIHsKLSAgICBy
ZXR1cm4gbV9pbnB1dFR5cGUtPmlzRm9ybURhdGFBcHBlbmRhYmxlKCkgJiYgbV9pbnB1dFR5cGUt
PmFwcGVuZEZvcm1EYXRhKGVuY29kaW5nLCBtdWx0aXBhcnQpOworICAgIHJldHVybiBtX2lucHV0
VHlwZS0+aXNGb3JtRGF0YUFwcGVuZGFibGUoKSAmJiBtX2lucHV0VHlwZS0+YXBwZW5kRm9ybURh
dGEoZm9ybURhdGEsIG11bHRpcGFydCk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cmVz
ZXQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9u
IDIyMTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zODAsNyArMzgwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29weU5v
bkF0dHJpYnV0ZVByb3BlcnRpZXNGcm9tRWxlbWVudChjb25zdCBFbGVtZW50JikgZmluYWw7CiAK
LSAgICBib29sIGFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wpIGZpbmFsOworICAg
IGJvb2wgYXBwZW5kRm9ybURhdGEoRE9NRm9ybURhdGEmLCBib29sKSBmaW5hbDsKIAogICAgIGJv
b2wgaXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBtYXRj
aGVzRGVmYXVsdFBzZXVkb0NsYXNzKCkgY29uc3QgZmluYWw7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDkgKzI2LDkgQEAKICNpbmNsdWRlICJIVE1MS2V5Z2VuRWxlbWVudC5oIgogCiAjaW5jbHVkZSAi
QXR0cmlidXRlLmgiCisjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkVsZW1lbnRDaGlsZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiRm9ybURh
dGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgpAQCAtMTE1LDE1ICsxMTUs
MTUgQEAgU3RyaW5nIEhUTUxLZXlnZW5FbGVtZW50OjprZXl0eXBlKCkgY29ucwogICAgIHJldHVy
biBpc0tleXR5cGVSU0EoKSA/IEFTQ0lJTGl0ZXJhbCgicnNhIikgOiBlbXB0eVN0cmluZygpOwog
fQogCi1ib29sIEhUTUxLZXlnZW5FbGVtZW50OjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3Qm
IGVuY29kZWRfdmFsdWVzLCBib29sKQorYm9vbCBIVE1MS2V5Z2VuRWxlbWVudDo6YXBwZW5kRm9y
bURhdGEoRE9NRm9ybURhdGEmIGZvcm1EYXRhLCBib29sKQogewogICAgIC8vIE9ubHkgUlNBIGlz
IHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUuCiAgICAgaWYgKCFpc0tleXR5cGVSU0EoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyB2YWx1ZSA9IHNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nZVN0cmluZyhzaGFkb3dTZWxlY3QoKS0+c2VsZWN0ZWRJbmRleCgpLCBhdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKGNoYWxsZW5nZUF0dHIpLCBkb2N1bWVudCgpLmJhc2VVUkwo
KSk7CisgICAgYXV0byB2YWx1ZSA9IHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhz
aGFkb3dTZWxlY3QoKS0+c2VsZWN0ZWRJbmRleCgpLCBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKGNoYWxsZW5nZUF0dHIpLCBkb2N1bWVudCgpLmJhc2VVUkwoKSk7CiAgICAgaWYgKHZh
bHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZW5jb2RlZF92YWx1ZXMu
YXBwZW5kRGF0YShuYW1lKCksIHZhbHVlKTsKKyAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSgpLCB2
YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEtleWdlbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxLZXlnZW5FbGVtZW50LmgJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEtleWdlbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgQXRvbWljU3RyaW5nJikgZmluYWw7CiAKLSAgICBib29sIGFwcGVuZEZvcm1EYXRhKEZv
cm1EYXRhTGlzdCYsIGJvb2wpIGZpbmFsOworICAgIGJvb2wgYXBwZW5kRm9ybURhdGEoRE9NRm9y
bURhdGEmLCBib29sKSBmaW5hbDsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9s
VHlwZSgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNPcHRpb25hbEZvcm1Db250cm9sKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWV0ZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZXRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBA
CiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIK
LSNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKICNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIy
MTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5j
bHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3IuaCIKLSNpbmNs
dWRlICJGb3JtRGF0YUxpc3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1l
TG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCkBAIC00OTEsNyArNDkxLDcgQEAg
dm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdQogICAgIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KG9sZERvY3VtZW50LCBuZXdEb2N1bWVu
dCk7CiB9CiAKLWJvb2wgSFRNTE9iamVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRh
TGlzdCYgZW5jb2RpbmcsIGJvb2wpCitib29sIEhUTUxPYmplY3RFbGVtZW50OjphcHBlbmRGb3Jt
RGF0YShET01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wpCiB7CiAgICAgaWYgKG5hbWUoKS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUwNCw3ICs1MDQsNyBAQCBib29sIEhU
TUxPYmplY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YShGCiAgICAgU3RyaW5nIHZhbHVlOwogICAg
IGlmICghZG93bmNhc3Q8UGx1Z2luVmlld0Jhc2U+KCp3aWRnZXQpLmdldEZvcm1WYWx1ZSh2YWx1
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbmNvZGluZy5hcHBlbmREYXRhKG5hbWUo
KSwgdmFsdWUpOworICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lKCksIHZhbHVlKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQu
aAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBpc0Zvcm1Db250cm9sRWxlbWVudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CiAK
ICAgICBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQot
ICAgIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCkgZmluYWw7CisgICAg
Ym9vbCBhcHBlbmRGb3JtRGF0YShET01Gb3JtRGF0YSYsIGJvb2wpIGZpbmFsOwogCiAgICAgYm9v
bCBjYW5Db250YWluUmFuZ2VFbmRQb2ludCgpIGNvbnN0IGZpbmFsOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMjIxOTAwKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDExICsyOSwxMSBAQAogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAKICNp
bmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNs
dWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgiCi0jaW5jbHVk
ZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHZW5lcmlj
Q2FjaGVkSFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKQEAg
LTEwMzEsNyArMTAzMSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlTXVsdGlwbGVB
dHQKICAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kUmVuZGVyZXJzRm9yU3VidHJlZSgpOwogfQog
Ci1ib29sIEhUTUxTZWxlY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmIGxp
c3QsIGJvb2wpCitib29sIEhUTUxTZWxlY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YShET01Gb3Jt
RGF0YSYgZm9ybURhdGEsIGJvb2wpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0g
dGhpcy0+bmFtZSgpOwogICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKQEAgLTEwNDAsNyArMTA0MCw3
IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEYKICAgICBib29sIHN1
Y2Nlc3NmdWwgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBsaXN0SXRlbXMoKSkg
ewogICAgICAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3duY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVkKCkgJiYgIWRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuaXNEaXNhYmxlZEZvcm1Db250cm9sKCkpIHsKLSAg
ICAgICAgICAgIGxpc3QuYXBwZW5kRGF0YShuYW1lLCBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dD4oKmVsZW1lbnQpLnZhbHVlKCkpOworICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUs
IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkudmFsdWUoKSk7CiAgICAgICAg
ICAgICBzdWNjZXNzZnVsID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMw
LDcgKzEzMCw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVy
ZXIoY29uc3QgTm9kZSYpIGNvbnN0IGZpbmFsOwogICAgIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50
PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVuZGVyU3R5bGUmJiwgY29uc3QgUmVuZGVyVHJlZVBv
c2l0aW9uJikgZmluYWw7Ci0gICAgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBi
b29sKSBmaW5hbDsKKyAgICBib29sIGFwcGVuZEZvcm1EYXRhKERPTUZvcm1EYXRhJiwgYm9vbCkg
ZmluYWw7CiAKICAgICB2b2lkIHJlc2V0KCkgZmluYWw7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjIxOTAwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsMTMgKzI4LDEzIEBACiAKICNpbmNsdWRlICJCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJET01Gb3JtRGF0YS5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAi
RWxlbWVudENoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGb3JtQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZvcm1E
YXRhTGlzdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24u
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTIxNywxOSArMjE3LDE5IEBAIFJlbmRlclB0
cjxSZW5kZXJFbGVtZW50PiBIVE1MVGV4dEFyZWFFbGUKICAgICByZXR1cm4gY3JlYXRlUmVuZGVy
ZXI8UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CiB9
CiAKLWJvb2wgSFRNTFRleHRBcmVhRWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0
JiBlbmNvZGluZywgYm9vbCkKK2Jvb2wgSFRNTFRleHRBcmVhRWxlbWVudDo6YXBwZW5kRm9ybURh
dGEoRE9NRm9ybURhdGEmIGZvcm1EYXRhLCBib29sKQogewogICAgIGlmIChuYW1lKCkuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91
dCgpOwogCi0gICAgY29uc3QgU3RyaW5nJiB0ZXh0ID0gKG1fd3JhcCA9PSBIYXJkV3JhcCkgPyB2
YWx1ZVdpdGhIYXJkTGluZUJyZWFrcygpIDogdmFsdWUoKTsKLSAgICBlbmNvZGluZy5hcHBlbmRE
YXRhKG5hbWUoKSwgdGV4dCk7CisgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUoKSwgbV93cmFwID09
IEhhcmRXcmFwID8gdmFsdWVXaXRoSGFyZExpbmVCcmVha3MoKSA6IHZhbHVlKCkpOwogCi0gICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBkaXJuYW1lQXR0clZhbHVlID0gYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihkaXJuYW1lQXR0cik7CisgICAgYXV0byYgZGlybmFtZUF0dHJWYWx1ZSA9
IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZGlybmFtZUF0dHIpOwogICAgIGlmICgh
ZGlybmFtZUF0dHJWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgZW5jb2RpbmcuYXBwZW5kRGF0YShk
aXJuYW1lQXR0clZhbHVlLCBkaXJlY3Rpb25Gb3JGb3JtRGF0YSgpKTsKKyAgICAgICAgZm9ybURh
dGEuYXBwZW5kKGRpcm5hbWVBdHRyVmFsdWUsIGRpcmVjdGlvbkZvckZvcm1EYXRhKCkpOworCiAg
ICAgcmV0dXJuIHRydWU7ICAgIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuaAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgaXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgY29sbGVjdFN0eWxlRm9yUHJlc2VudGF0
aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzJikgZmluYWw7CiAgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1l
bnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJlcihSZW5kZXJTdHlsZSYmLCBjb25zdCBSZW5kZXJUcmVl
UG9zaXRpb24mKSBmaW5hbDsKLSAgICBib29sIGFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYs
IGJvb2wpIGZpbmFsOworICAgIGJvb2wgYXBwZW5kRm9ybURhdGEoRE9NRm9ybURhdGEmLCBib29s
KSBmaW5hbDsKICAgICB2b2lkIHJlc2V0KCkgZmluYWw7CiAgICAgYm9vbCBoYXNDdXN0b21Gb2N1
c0xvZ2ljKCkgY29uc3QgZmluYWw7CiAgICAgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Qg
ZmluYWw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hpZGRlbklucHV0VHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IaWRkZW5JbnB1dFR5cGUuY3BwCShyZXZp
c2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hpZGRlbklucHV0VHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJIaWRkZW5JbnB1dFR5cGUuaCIKIAorI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCiAj
aW5jbHVkZSAiRm9ybUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKICNp
bmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSW5wdXRUeXBlTmFtZXMuaCIKQEAgLTk3LDEzICs5NywxNSBAQCBib29sIEhpZGRlbklu
cHV0VHlwZTo6aXNIaWRkZW5UeXBlKCkgY29uCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
SGlkZGVuSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmIGVuY29kaW5nLCBi
b29sIGlzTXVsdGlwYXJ0Rm9ybSkgY29uc3QKK2Jvb2wgSGlkZGVuSW5wdXRUeXBlOjphcHBlbmRG
b3JtRGF0YShET01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wgaXNNdWx0aXBhcnRGb3JtKSBjb25z
dAogewotICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGVsZW1lbnQoKS5uYW1lKCksICJf
Y2hhcnNldF8iKSkgewotICAgICAgICBlbmNvZGluZy5hcHBlbmREYXRhKGVsZW1lbnQoKS5uYW1l
KCksIFN0cmluZyhlbmNvZGluZy5lbmNvZGluZygpLm5hbWUoKSkpOworICAgIGF1dG8gbmFtZSA9
IGVsZW1lbnQoKS5uYW1lKCk7CisKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShuYW1l
LCAiX2NoYXJzZXRfIikpIHsKKyAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIFN0cmluZyB7
IGZvcm1EYXRhLmVuY29kaW5nKCkubmFtZSgpIH0pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9Ci0gICAgcmV0dXJuIElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoZW5jb2RpbmcsIGlzTXVs
dGlwYXJ0Rm9ybSk7CisgICAgcmV0dXJuIElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoZm9ybURh
dGEsIGlzTXVsdGlwYXJ0Rm9ybSk7CiB9CiAKIGJvb2wgSGlkZGVuSW5wdXRUeXBlOjpzaG91bGRS
ZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRyaWJ1dGVzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSGlkZGVuSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
aWRkZW5JbnB1dFR5cGUuaAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IaWRkZW5JbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgc3VwcG9ydExhYmVscygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgYm9vbCBzaG91bGRSZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRyaWJ1dGVzKCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sLCBUZXh0Rmll
bGRFdmVudEJlaGF2aW9yKSBvdmVycmlkZTsKLSAgICBib29sIGFwcGVuZEZvcm1EYXRhKEZvcm1E
YXRhTGlzdCYsIGJvb2wpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgYXBwZW5kRm9ybURhdGEo
RE9NRm9ybURhdGEmLCBib29sKSBjb25zdCBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCShyZXZp
c2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgIkltYWdlSW5wdXRUeXBl
LmgiCiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5o
IgorI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTEltYWdlTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVu
dC5oIgpAQCAtNTQsMjQgKzU0LDI1IEBAIGJvb2wgSW1hZ2VJbnB1dFR5cGU6OmlzRm9ybURhdGFB
cHBlbmRhYmwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbWFnZUlucHV0VHlwZTo6YXBw
ZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiBlbmNvZGluZywgYm9vbCkgY29uc3QKK2Jvb2wgSW1h
Z2VJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhKERPTUZvcm1EYXRhJiBmb3JtRGF0YSwgYm9vbCkg
Y29uc3QKIHsKICAgICBpZiAoIWVsZW1lbnQoKS5pc0FjdGl2YXRlZFN1Ym1pdCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gZWxlbWVudCgp
Lm5hbWUoKTsKKworICAgIGF1dG8mIG5hbWUgPSBlbGVtZW50KCkubmFtZSgpOwogICAgIGlmIChu
YW1lLmlzRW1wdHkoKSkgewotICAgICAgICBlbmNvZGluZy5hcHBlbmREYXRhKCJ4IiwgbV9jbGlj
a0xvY2F0aW9uLngoKSk7Ci0gICAgICAgIGVuY29kaW5nLmFwcGVuZERhdGEoInkiLCBtX2NsaWNr
TG9jYXRpb24ueSgpKTsKKyAgICAgICAgZm9ybURhdGEuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgieCIp
LCBTdHJpbmc6Om51bWJlcihtX2NsaWNrTG9jYXRpb24ueCgpKSk7CisgICAgICAgIGZvcm1EYXRh
LmFwcGVuZChBU0NJSUxpdGVyYWwoInkiKSwgU3RyaW5nOjpudW1iZXIobV9jbGlja0xvY2F0aW9u
LnkoKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U3RyaW5nPiBkb3RYU3RyaW5nKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCIueCIp
KTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBkb3RZU3RyaW5nKE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCIueSIpKTsKLSAgICBlbmNvZGluZy5hcHBlbmREYXRhKG5hbWUgKyBk
b3RYU3RyaW5nLmdldCgpLCBtX2NsaWNrTG9jYXRpb24ueCgpKTsKLSAgICBlbmNvZGluZy5hcHBl
bmREYXRhKG5hbWUgKyBkb3RZU3RyaW5nLmdldCgpLCBtX2NsaWNrTG9jYXRpb24ueSgpKTsKKyAg
ICBmb3JtRGF0YS5hcHBlbmQobWFrZVN0cmluZyhuYW1lLCAiLngiKSwgU3RyaW5nOjpudW1iZXIo
bV9jbGlja0xvY2F0aW9uLngoKSkpOworICAgIGZvcm1EYXRhLmFwcGVuZChtYWtlU3RyaW5nKG5h
bWUsICIueSIpLCBTdHJpbmc6Om51bWJlcihtX2NsaWNrTG9jYXRpb24ueSgpKSk7CisKKyAgICBh
dXRvIHZhbHVlID0gZWxlbWVudCgpLnZhbHVlKCk7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkp
CisgICAgICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lLCB2YWx1ZSk7CiAKLSAgICBpZiAoIWVsZW1l
bnQoKS52YWx1ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgZW5jb2RpbmcuYXBwZW5kRGF0YShuYW1l
LCBlbGVtZW50KCkudmFsdWUoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlSW5wdXRUeXBlLmgJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRy
b2xUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc0Zvcm1EYXRhQXBwZW5kYWJsZSgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0Jiwg
Ym9vbCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBhcHBlbmRGb3JtRGF0YShET01Gb3JtRGF0
YSYsIGJvb2wpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgc3VwcG9ydHNWYWxpZGF0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUlucHV0
UmVuZGVyZXIoUmVuZGVyU3R5bGUmJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBoYW5kbGVET01BY3Rp
dmF0ZUV2ZW50KEV2ZW50Jikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lu
cHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUu
Y3BwCShyZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJCdXR0b25JbnB1
dFR5cGUuaCIKICNpbmNsdWRlICJDaGVja2JveElucHV0VHlwZS5oIgogI2luY2x1ZGUgIkNvbG9y
SW5wdXRUeXBlLmgiCisjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJEYXRlQ29t
cG9uZW50cy5oIgogI2luY2x1ZGUgIkRhdGVJbnB1dFR5cGUuaCIKICNpbmNsdWRlICJEYXRlVGlt
ZUlucHV0VHlwZS5oIgpAQCAtNDIsNyArNDMsNiBAQAogI2luY2x1ZGUgIkZpbGVJbnB1dFR5cGUu
aCIKICNpbmNsdWRlICJGaWxlTGlzdC5oIgogI2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgiCi0j
aW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAt
MjExLDEwICsyMTEsMTAgQEAgYm9vbCBJbnB1dFR5cGU6OmlzRm9ybURhdGFBcHBlbmRhYmxlKCkg
YwogICAgIHJldHVybiAhZWxlbWVudCgpLm5hbWUoKS5pc0VtcHR5KCk7CiB9CiAKLWJvb2wgSW5w
dXRUeXBlOjphcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmIGVuY29kaW5nLCBib29sKSBjb25z
dAorYm9vbCBJbnB1dFR5cGU6OmFwcGVuZEZvcm1EYXRhKERPTUZvcm1EYXRhJiBmb3JtRGF0YSwg
Ym9vbCkgY29uc3QKIHsKICAgICAvLyBBbHdheXMgc3VjY2Vzc2Z1bC4KLSAgICBlbmNvZGluZy5h
cHBlbmREYXRhKGVsZW1lbnQoKS5uYW1lKCksIGVsZW1lbnQoKS52YWx1ZSgpKTsKKyAgICBmb3Jt
RGF0YS5hcHBlbmQoZWxlbWVudCgpLm5hbWUoKSwgZWxlbWVudCgpLnZhbHVlKCkpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgJKHJldmlzaW9uIDIy
MTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDExICs0NywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50OwogY2xhc3MgQ2hyb21lOworY2xhc3MgRE9NRm9ybURhdGE7CiBjbGFz
cyBEYXRlQ29tcG9uZW50czsKIGNsYXNzIERyYWdEYXRhOwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBG
aWxlTGlzdDsKLWNsYXNzIEZvcm1EYXRhTGlzdDsKIGNsYXNzIEhUTUxFbGVtZW50OwogY2xhc3Mg
SFRNTEZvcm1FbGVtZW50OwogY2xhc3MgSFRNTElucHV0RWxlbWVudDsKQEAgLTYwLDggKzYwLDgg
QEAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKIGNsYXNzIE1vdXNlRXZlbnQ7CiBjbGFzcyBOb2RlOwog
Y2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBUb3VjaEV2ZW50OwogY2xhc3MgVGV4dENvbnRyb2xJ
bm5lclRleHRFbGVtZW50OworY2xhc3MgVG91Y2hFdmVudDsKIAogc3RydWN0IElucHV0RWxlbWVu
dENsaWNrU3RhdGU7CiAKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBG
b3JtQ29udHJvbFN0YXRlIHNhdmVGb3JtQ29udHJvbFN0YXRlKCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIHJlc3RvcmVGb3JtQ29udHJvbFN0YXRlKGNvbnN0IEZvcm1Db250cm9sU3RhdGUmKTsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNGb3JtRGF0YUFwcGVuZGFibGUoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgYXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiwgYm9vbCBtdWx0aXBhcnQpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRGb3JtRGF0YShET01Gb3JtRGF0YSYsIGJvb2wg
bXVsdGlwYXJ0KSBjb25zdDsKIAogICAgIC8vIERPTSBwcm9wZXJ0eSBmdW5jdGlvbnMuCiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvU3VibWl0SW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL1N1Ym1pdElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDIyMTkw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvU3VibWl0SW5wdXRUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsOCArMzIsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN1
Ym1pdElucHV0VHlwZS5oIgogCisjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJF
dmVudC5oIgotI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnB1dFR5
cGVOYW1lcy5oIgpAQCAtNDYsMTEgKzQ2LDExIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU3VibWl0
SW5wdXRUeXBlOjpmb3IKICAgICByZXR1cm4gSW5wdXRUeXBlTmFtZXM6OnN1Ym1pdCgpOwogfQog
Ci1ib29sIFN1Ym1pdElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRm9ybURhdGFMaXN0JiBlbmNv
ZGluZywgYm9vbCkgY29uc3QKK2Jvb2wgU3VibWl0SW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShE
T01Gb3JtRGF0YSYgZm9ybURhdGEsIGJvb2wpIGNvbnN0CiB7CiAgICAgaWYgKCFlbGVtZW50KCku
aXNBY3RpdmF0ZWRTdWJtaXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVuY29kaW5n
LmFwcGVuZERhdGEoZWxlbWVudCgpLm5hbWUoKSwgZWxlbWVudCgpLnZhbHVlV2l0aERlZmF1bHQo
KSk7CisgICAgZm9ybURhdGEuYXBwZW5kKGVsZW1lbnQoKS5uYW1lKCksIGVsZW1lbnQoKS52YWx1
ZVdpdGhEZWZhdWx0KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL1N1Ym1pdElucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvU3VibWl0SW5wdXRUeXBlLmgJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvU3VibWl0SW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRy
b2xUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0
YUxpc3QmLCBib29sKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGFwcGVuZEZvcm1EYXRhKERP
TUZvcm1EYXRhJiwgYm9vbCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBzdXBwb3J0c1JlcXVp
cmVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBoYW5kbGVET01BY3RpdmF0ZUV2ZW50KEV2
ZW50Jikgb3ZlcnJpZGU7CiAgICAgYm9vbCBjYW5CZVN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSBv
dmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5j
cHAJKHJldmlzaW9uIDIyMTkwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5w
dXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAogI2luY2x1ZGUgIkJl
Zm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKICNpbmNsdWRlICJFZGl0
b3IuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRm9ybURhdGFMaXN0Lmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1
ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKQEAgLTUxMSwxMiArNTExLDEyIEBAIHZvaWQgVGV4dEZp
ZWxkSW5wdXRUeXBlOjp1cGRhdGVQbGFjZWhvbGQKICAgICBtX3BsYWNlaG9sZGVyLT5zZXRJbm5l
clRleHQocGxhY2Vob2xkZXJUZXh0KTsKIH0KIAotYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OmFw
cGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYgbGlzdCwgYm9vbCBtdWx0aXBhcnQpIGNvbnN0Citi
b29sIFRleHRGaWVsZElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoRE9NRm9ybURhdGEmIGZvcm1E
YXRhLCBib29sIG11bHRpcGFydCkgY29uc3QKIHsKLSAgICBJbnB1dFR5cGU6OmFwcGVuZEZvcm1E
YXRhKGxpc3QsIG11bHRpcGFydCk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBkaXJuYW1lQXR0
clZhbHVlID0gZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZGlybmFt
ZUF0dHIpOworICAgIElucHV0VHlwZTo6YXBwZW5kRm9ybURhdGEoZm9ybURhdGEsIG11bHRpcGFy
dCk7CisgICAgYXV0byYgZGlybmFtZUF0dHJWYWx1ZSA9IGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKGRpcm5hbWVBdHRyKTsKICAgICBpZiAoIWRpcm5hbWVBdHRyVmFs
dWUuaXNOdWxsKCkpCi0gICAgICAgIGxpc3QuYXBwZW5kRGF0YShkaXJuYW1lQXR0clZhbHVlLCBl
bGVtZW50KCkuZGlyZWN0aW9uRm9yRm9ybURhdGEoKSk7CisgICAgICAgIGZvcm1EYXRhLmFwcGVu
ZChkaXJuYW1lQXR0clZhbHVlLCBlbGVtZW50KCkuZGlyZWN0aW9uRm9yRm9ybURhdGEoKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxk
SW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJ
bnB1dFR5cGUuaAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0
RmllbGRJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZvcm1EYXRhTGlzdDsKK2NsYXNzIERPTUZvcm1EYXRh
OwogY2xhc3MgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OwogCiAvLyBUaGUgY2xhc3MgcmVw
cmVzZW50cyB0eXBlcyBvZiB3aGljaCBVSSBjb250YWluIHRleHQgZmllbGRzLgpAQCAtODYsNyAr
ODYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUoKSBv
dmVycmlkZTsKICAgICBIVE1MRWxlbWVudCogcGxhY2Vob2xkZXJFbGVtZW50KCkgY29uc3QgZmlu
YWw7CiAgICAgdm9pZCB1cGRhdGVQbGFjZWhvbGRlclRleHQoKSBmaW5hbDsKLSAgICBib29sIGFw
cGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYsIGJvb2wgbXVsdGlwYXJ0KSBjb25zdCBmaW5hbDsK
KyAgICBib29sIGFwcGVuZEZvcm1EYXRhKERPTUZvcm1EYXRhJiwgYm9vbCBtdWx0aXBhcnQpIGNv
bnN0IGZpbmFsOwogICAgIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQoKSBmaW5hbDsKICAgICB2b2lk
IGNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZCgpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRlQXV0
b0ZpbGxCdXR0b24oKSBmaW5hbDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3Vi
bWlzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJt
aXNzaW9uLmNwcAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zv
cm1TdWJtaXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDEwICsyMTQsMTAgQEAgUmVm
PEZvcm1TdWJtaXNzaW9uPiBGb3JtU3VibWlzc2lvbjo6Y3JlYQogICAgIFN0cmluZyBib3VuZGFy
eTsKIAogICAgIGlmIChpc011bHRpUGFydEZvcm0pIHsKLSAgICAgICAgZm9ybURhdGEgPSBGb3Jt
RGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGRvbUZvcm1EYXRhLCBkb21Gb3JtRGF0YS0+ZW5jb2Rpbmco
KSwgJmRvY3VtZW50KTsKKyAgICAgICAgZm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQ
YXJ0KGRvbUZvcm1EYXRhLCAmZG9jdW1lbnQpOwogICAgICAgICBib3VuZGFyeSA9IGZvcm1EYXRh
LT5ib3VuZGFyeSgpLmRhdGEoKTsKICAgICB9IGVsc2UgewotICAgICAgICBmb3JtRGF0YSA9IEZv
cm1EYXRhOjpjcmVhdGUoZG9tRm9ybURhdGEsIGRvbUZvcm1EYXRhLT5lbmNvZGluZygpLCBhdHRy
aWJ1dGVzLm1ldGhvZCgpID09IE1ldGhvZDo6R2V0ID8gRm9ybURhdGE6OkZvcm1VUkxFbmNvZGVk
IDogRm9ybURhdGE6OnBhcnNlRW5jb2RpbmdUeXBlKGVuY29kaW5nVHlwZSkpOworICAgICAgICBm
b3JtRGF0YSA9IEZvcm1EYXRhOjpjcmVhdGUoZG9tRm9ybURhdGEsIGF0dHJpYnV0ZXMubWV0aG9k
KCkgPT0gTWV0aG9kOjpHZXQgPyBGb3JtRGF0YTo6Rm9ybVVSTEVuY29kZWQgOiBGb3JtRGF0YTo6
cGFyc2VFbmNvZGluZ1R5cGUoZW5jb2RpbmdUeXBlKSk7CiAgICAgICAgIGlmIChjb3BpZWRBdHRy
aWJ1dGVzLm1ldGhvZCgpID09IE1ldGhvZDo6UG9zdCAmJiBpc01haWx0b0Zvcm0pIHsKICAgICAg
ICAgICAgIC8vIENvbnZlcnQgdGhlIGZvcm0gZGF0YSBpbnRvIGEgc3RyaW5nIHRoYXQgd2UgcHV0
IGludG8gdGhlIFVSTC4KICAgICAgICAgICAgIGFwcGVuZE1haWx0b1Bvc3RGb3JtRGF0YVRvVVJM
KGFjdGlvblVSTCwgKmZvcm1EYXRhLCBlbmNvZGluZ1R5cGUpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCShyZXZpc2lvbiAy
MjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3ku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRM
b2FkZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRm9ybURhdGEuaCIK
LSNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3Bw
CShyZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTEgKzI2LDEyIEBACiAjaW5jbHVkZSAi
QmxvYlVSTC5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5o
IgorI2luY2x1ZGUgIkRPTUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJGaWxlLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZvcm1EYXRh
QnVpbGRlci5oIgotI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgorI2luY2x1ZGUgIkxpbmVFbmRp
bmcuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAjaW5j
bHVkZSAiVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oIgpAQCAtOTIsMTcgKzkzLDE3IEBAIFJlZjxG
b3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBWZWMKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1SZWY8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgRm9ybURhdGFMaXN0JiBs
aXN0LCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBFbmNvZGluZ1R5cGUgZW5jb2RpbmdU
eXBlKQorUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IERPTUZvcm1EYXRhJiBm
b3JtRGF0YSwgRW5jb2RpbmdUeXBlIGVuY29kaW5nVHlwZSkKIHsKICAgICBhdXRvIHJlc3VsdCA9
IGNyZWF0ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMobGlzdCwgZW5j
b2RpbmcsIGZhbHNlLCBudWxscHRyLCBlbmNvZGluZ1R5cGUpOworICAgIHJlc3VsdC0+YXBwZW5k
Tm9uTXVsdGlQYXJ0S2V5VmFsdWVQYWlySXRlbXMoZm9ybURhdGEsIGVuY29kaW5nVHlwZSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlTXVs
dGlQYXJ0KGNvbnN0IEZvcm1EYXRhTGlzdCYgbGlzdCwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNv
ZGluZywgRG9jdW1lbnQqIGRvY3VtZW50KQorUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRl
TXVsdGlQYXJ0KGNvbnN0IERPTUZvcm1EYXRhJiBmb3JtRGF0YSwgRG9jdW1lbnQqIGRvY3VtZW50
KQogewogICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlKCk7Ci0gICAgcmVzdWx0LT5hcHBlbmRLZXlW
YWx1ZVBhaXJJdGVtcyhsaXN0LCBlbmNvZGluZywgdHJ1ZSwgZG9jdW1lbnQpOworICAgIHJlc3Vs
dC0+YXBwZW5kTXVsdGlQYXJ0S2V5VmFsdWVQYWlySXRlbXMoZm9ybURhdGEsIGRvY3VtZW50KTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xODIsNzQgKzE4Myw5NCBAQCB2b2lkIEZvcm1E
YXRhOjphcHBlbmRCbG9iKGNvbnN0IFVSTCYgYmxvCiAgICAgbV9sZW5ndGhJbkJ5dGVzID0gc3Rk
OjpudWxsb3B0OwogfQogCi12b2lkIEZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhj
b25zdCBGb3JtRGF0YUxpc3QmIGxpc3QsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGJv
b2wgaXNNdWx0aVBhcnRGb3JtLCBEb2N1bWVudCogZG9jdW1lbnQsIEVuY29kaW5nVHlwZSBlbmNv
ZGluZ1R5cGUpCitzdGF0aWMgQ1N0cmluZyBub3JtYWxpemVTdHJpbmdEYXRhKFRleHRFbmNvZGlu
ZyYgZW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKGlzTXVsdGlQYXJ0
Rm9ybSkKLSAgICAgICAgbV9ib3VuZGFyeSA9IEZvcm1EYXRhQnVpbGRlcjo6Z2VuZXJhdGVVbmlx
dWVCb3VuZGFyeVN0cmluZygpOworICAgIHJldHVybiBub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JM
RihlbmNvZGluZy5lbmNvZGUodmFsdWUsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7Cit9CisK
K3ZvaWQgRm9ybURhdGE6OmFwcGVuZE11bHRpUGFydEZpbGVWYWx1ZShjb25zdCBGaWxlJiBmaWxl
LCBWZWN0b3I8Y2hhcj4mIGhlYWRlciwgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgRG9jdW1lbnQq
IGRvY3VtZW50KQoreworICAgIGF1dG8gbmFtZSA9IGZpbGUubmFtZSgpOworCisgICAgLy8gTGV0
IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5l
cmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1cGxvYWQuCisgICAgYm9vbCBzaG91bGRH
ZW5lcmF0ZUZpbGUgPSBmYWxzZTsKKyAgICBhdXRvJiBwYXRoID0gZmlsZS5wYXRoKCk7CisgICAg
aWYgKCFwYXRoLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50
LT5wYWdlKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBnZW5lcmF0ZWRGaWxlTmFtZTsKKyAgICAg
ICAgICAgIHNob3VsZEdlbmVyYXRlRmlsZSA9IHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnNob3Vs
ZFJlcGxhY2VXaXRoR2VuZXJhdGVkRmlsZUZvclVwbG9hZChwYXRoLCBnZW5lcmF0ZWRGaWxlTmFt
ZSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkR2VuZXJhdGVGaWxlKQorICAgICAgICAgICAgICAg
IG5hbWUgPSBnZW5lcmF0ZWRGaWxlTmFtZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFdl
IGhhdmUgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWU9Ii4uIiBwYXJ0IGluIHRoZSBoZWFkZXIsIGV2
ZW4gaWYgdGhlIGZpbGVuYW1lIGlzIGVtcHR5CisgICAgRm9ybURhdGFCdWlsZGVyOjphZGRGaWxl
bmFtZVRvTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgZW5jb2RpbmcsIG5hbWUpOworCisgICAgLy8g
QWRkIHRoZSBjb250ZW50IHR5cGUgaWYgYXZhaWxhYmxlLCBvciAiYXBwbGljYXRpb24vb2N0ZXQt
c3RyZWFtIiBvdGhlcndpc2UgKFJGQyAxODY3KS4KKyAgICBhdXRvIGNvbnRlbnRUeXBlID0gZmls
ZS50eXBlKCk7CisgICAgaWYgKGNvbnRlbnRUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgY29udGVu
dFR5cGUgPSBBU0NJSUxpdGVyYWwoImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOworICAgIEFT
U0VSVChCbG9iOjppc05vcm1hbGl6ZWRDb250ZW50VHlwZShjb250ZW50VHlwZSkpOworCisgICAg
Rm9ybURhdGFCdWlsZGVyOjphZGRDb250ZW50VHlwZVRvTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwg
Y29udGVudFR5cGUuYXNjaWkoKSk7CisKKyAgICBGb3JtRGF0YUJ1aWxkZXI6OmZpbmlzaE11bHRp
UGFydEhlYWRlcihoZWFkZXIpOworICAgIGFwcGVuZERhdGEoaGVhZGVyLmRhdGEoKSwgaGVhZGVy
LnNpemUoKSk7CisKKyAgICBpZiAoIWZpbGUucGF0aCgpLmlzRW1wdHkoKSkKKyAgICAgICAgYXBw
ZW5kRmlsZShmaWxlLnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKKyAgICBlbHNlCisgICAg
ICAgIGFwcGVuZEJsb2IoZmlsZS51cmwoKSk7Cit9CisKK3ZvaWQgRm9ybURhdGE6OmFwcGVuZE11
bHRpUGFydFN0cmluZ1ZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBWZWN0b3I8Y2hhcj4mIGhl
YWRlciwgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKK3sKKyAgICBGb3JtRGF0YUJ1aWxkZXI6OmZp
bmlzaE11bHRpUGFydEhlYWRlcihoZWFkZXIpOworICAgIGFwcGVuZERhdGEoaGVhZGVyLmRhdGEo
KSwgaGVhZGVyLnNpemUoKSk7CisKKyAgICBhdXRvIG5vcm1hbGl6ZWRTdHJpbmdEYXRhID0gbm9y
bWFsaXplU3RyaW5nRGF0YShlbmNvZGluZywgc3RyaW5nKTsKKyAgICBhcHBlbmREYXRhKG5vcm1h
bGl6ZWRTdHJpbmdEYXRhLmRhdGEoKSwgbm9ybWFsaXplZFN0cmluZ0RhdGEubGVuZ3RoKCkpOwor
fQorCit2b2lkIEZvcm1EYXRhOjphcHBlbmRNdWx0aVBhcnRLZXlWYWx1ZVBhaXJJdGVtcyhjb25z
dCBET01Gb3JtRGF0YSYgZm9ybURhdGEsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBtX2Jv
dW5kYXJ5ID0gRm9ybURhdGFCdWlsZGVyOjpnZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7
CisKKyAgICBhdXRvIGVuY29kaW5nID0gZm9ybURhdGEuZW5jb2RpbmcoKTsKIAogICAgIFZlY3Rv
cjxjaGFyPiBlbmNvZGVkRGF0YTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBsaXN0Lml0
ZW1zKCkpIHsKLSAgICAgICAgYXV0byBub3JtYWxpemVkTmFtZSA9IGxpc3Qubm9ybWFsaXplU3Ry
aW5nKGl0ZW0ubmFtZSk7CisgICAgZm9yIChhdXRvJiBpdGVtIDogZm9ybURhdGEuaXRlbXMoKSkg
eworICAgICAgICBhdXRvIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplU3RyaW5nRGF0YShlbmNv
ZGluZywgaXRlbS5uYW1lKTsKICAgICAKLSAgICAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkgewot
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGhlYWRlcjsKLSAgICAgICAgICAgIEZvcm1EYXRhQnVp
bGRlcjo6YmVnaW5NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBtX2JvdW5kYXJ5LmRhdGEoKSwgbm9y
bWFsaXplZE5hbWUpOwotCi0gICAgICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZh
bHNlOwotCi0gICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8Rmls
ZT4+KGl0ZW0uZGF0YSkpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCB0eXBl
IGlzIGEgZmlsZSwgdGhlbiB3ZSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWUKLSAg
ICAgICAgICAgICAgICBhdXRvJiBmaWxlID0gKldURjo6Z2V0PFJlZlB0cjxGaWxlPj4oaXRlbS5k
YXRhKTsKLSAgICAgICAgICAgICAgICBhdXRvIG5hbWUgPSBmaWxlLm5hbWUoKTsKLQotICAgICAg
ICAgICAgICAgIC8vIExldCB0aGUgYXBwbGljYXRpb24gc3BlY2lmeSBhIGZpbGVuYW1lIGlmIGl0
J3MgZ29pbmcgdG8gZ2VuZXJhdGUgYSByZXBsYWNlbWVudCBmaWxlIGZvciB0aGUgdXBsb2FkLgot
ICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHBhdGggPSBmaWxlLnBhdGgoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChQ
YWdlKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nIGdlbmVyYXRlZEZpbGVOYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxk
R2VuZXJhdGVGaWxlID0gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuc2hvdWxkUmVwbGFjZVdpdGhH
ZW5lcmF0ZWRGaWxlRm9yVXBsb2FkKHBhdGgsIGdlbmVyYXRlZEZpbGVOYW1lKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzaG91bGRHZW5lcmF0ZUZpbGUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZSA9IGdlbmVyYXRlZEZpbGVOYW1lOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBp
bmNsdWRlIHRoZSBmaWxlbmFtZT0iLi4iIHBhcnQgaW4gdGhlIGhlYWRlciwgZXZlbiBpZiB0aGUg
ZmlsZW5hbWUgaXMgZW1wdHkKLSAgICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmFkZEZp
bGVuYW1lVG9NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBlbmNvZGluZywgbmFtZSk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBBZGQgdGhlIGNvbnRlbnQgdHlwZSBpZiBhdmFpbGFibGUsIG9yICJhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0iIG90aGVyd2lzZSAoUkZDIDE4NjcpLgotICAgICAgICAgICAg
ICAgIGF1dG8gY29udGVudFR5cGUgPSBmaWxlLnR5cGUoKTsKLSAgICAgICAgICAgICAgICBpZiAo
Y29udGVudFR5cGUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9
ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iOwotICAgICAgICAgICAgICAgIEFTU0VSVChCbG9i
Ojppc05vcm1hbGl6ZWRDb250ZW50VHlwZShjb250ZW50VHlwZSkpOwotICAgICAgICAgICAgICAg
IEZvcm1EYXRhQnVpbGRlcjo6YWRkQ29udGVudFR5cGVUb011bHRpUGFydEhlYWRlcihoZWFkZXIs
IGNvbnRlbnRUeXBlLmFzY2lpKCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBGb3Jt
RGF0YUJ1aWxkZXI6OmZpbmlzaE11bHRpUGFydEhlYWRlcihoZWFkZXIpOwotCi0gICAgICAgICAg
ICBhcHBlbmREYXRhKGhlYWRlci5kYXRhKCksIGhlYWRlci5zaXplKCkpOwotCi0gICAgICAgICAg
ICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmlsZT4+KGl0ZW0uZGF0YSkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvJiBmaWxlID0gKldURjo6Z2V0PFJlZlB0cjxGaWxlPj4oaXRl
bS5kYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAoIWZpbGUucGF0aCgpLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kRmlsZShmaWxlLnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVG
aWxlKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEJs
b2IoZmlsZS51cmwoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGF1
dG8gbm9ybWFsaXplZFN0cmluZ0RhdGEgPSBsaXN0Lm5vcm1hbGl6ZVN0cmluZyhXVEY6OmdldDxT
dHJpbmc+KGl0ZW0uZGF0YSkpOwotICAgICAgICAgICAgICAgIGFwcGVuZERhdGEobm9ybWFsaXpl
ZFN0cmluZ0RhdGEuZGF0YSgpLCBub3JtYWxpemVkU3RyaW5nRGF0YS5sZW5ndGgoKSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGFwcGVuZERhdGEoIlxyXG4iLCAyKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmlu
Zz4oaXRlbS5kYXRhKSk7CisgICAgICAgIFZlY3RvcjxjaGFyPiBoZWFkZXI7CisgICAgICAgIEZv
cm1EYXRhQnVpbGRlcjo6YmVnaW5NdWx0aVBhcnRIZWFkZXIoaGVhZGVyLCBtX2JvdW5kYXJ5LmRh
dGEoKSwgbm9ybWFsaXplZE5hbWUpOwogCi0gICAgICAgICAgICBhdXRvIG5vcm1hbGl6ZWRTdHJp
bmdEYXRhID0gbGlzdC5ub3JtYWxpemVTdHJpbmcoV1RGOjpnZXQ8U3RyaW5nPihpdGVtLmRhdGEp
KTsKLSAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6YWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0
YShlbmNvZGVkRGF0YSwgbm9ybWFsaXplZE5hbWUsIG5vcm1hbGl6ZWRTdHJpbmdEYXRhLCBlbmNv
ZGluZ1R5cGUpOwotICAgICAgICB9CisgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFJlZlB0cjxGaWxlPj4oaXRlbS5kYXRhKSkKKyAgICAgICAgICAgIGFwcGVuZE11bHRpUGFydEZp
bGVWYWx1ZSgqV1RGOjpnZXQ8UmVmUHRyPEZpbGU+PihpdGVtLmRhdGEpLCBoZWFkZXIsIGVuY29k
aW5nLCBkb2N1bWVudCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFwcGVuZE11bHRpUGFy
dFN0cmluZ1ZhbHVlKFdURjo6Z2V0PFN0cmluZz4oaXRlbS5kYXRhKSwgaGVhZGVyLCBlbmNvZGlu
Zyk7CisKKyAgICAgICAgYXBwZW5kRGF0YSgiXHJcbiIsIDIpOwogICAgIH0KKyAgICAKKyAgICBG
b3JtRGF0YUJ1aWxkZXI6OmFkZEJvdW5kYXJ5VG9NdWx0aVBhcnRIZWFkZXIoZW5jb2RlZERhdGEs
IG1fYm91bmRhcnkuZGF0YSgpLCB0cnVlKTsKIAotICAgIGlmIChpc011bHRpUGFydEZvcm0pCi0g
ICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6YWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihlbmNv
ZGVkRGF0YSwgbV9ib3VuZGFyeS5kYXRhKCksIHRydWUpOworICAgIGFwcGVuZERhdGEoZW5jb2Rl
ZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5zaXplKCkpOworfQorCit2b2lkIEZvcm1EYXRhOjph
cHBlbmROb25NdWx0aVBhcnRLZXlWYWx1ZVBhaXJJdGVtcyhjb25zdCBET01Gb3JtRGF0YSYgZm9y
bURhdGEsIEVuY29kaW5nVHlwZSBlbmNvZGluZ1R5cGUpCit7CisgICAgYXV0byBlbmNvZGluZyA9
IGZvcm1EYXRhLmVuY29kaW5nKCk7CisKKyAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZERhdGE7Cisg
ICAgZm9yIChhdXRvJiBpdGVtIDogZm9ybURhdGEuaXRlbXMoKSkgeworICAgICAgICBBU1NFUlQo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGl0ZW0uZGF0YSkpOworCisgICAgICAgIGF1
dG8gbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemVTdHJpbmdEYXRhKGVuY29kaW5nLCBpdGVtLm5h
bWUpOworICAgICAgICBhdXRvIG5vcm1hbGl6ZWRTdHJpbmdEYXRhID0gbm9ybWFsaXplU3RyaW5n
RGF0YShlbmNvZGluZywgV1RGOjpnZXQ8U3RyaW5nPihpdGVtLmRhdGEpKTsKKyAgICAgICAgRm9y
bURhdGFCdWlsZGVyOjphZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCBub3Jt
YWxpemVkTmFtZSwgbm9ybWFsaXplZFN0cmluZ0RhdGEsIGVuY29kaW5nVHlwZSk7CisgICAgfQog
CiAgICAgYXBwZW5kRGF0YShlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLnNpemUoKSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCShy
ZXZpc2lvbiAyMjE5MDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1E
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3LDggKzE3LDcgQEAKICAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgRm9ybURhdGFfaAotI2RlZmluZSBGb3JtRGF0
YV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkJsb2JEYXRhLmgiCiAjaW5jbHVkZSAiVVJM
LmgiCkBAIC0yOSw4ICsyOCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRE9N
Rm9ybURhdGE7CiBjbGFzcyBEb2N1bWVudDsKLWNsYXNzIEZvcm1EYXRhTGlzdDsKK2NsYXNzIEZp
bGU7CiBjbGFzcyBUZXh0RW5jb2Rpbmc7CiAKIGNsYXNzIEZvcm1EYXRhRWxlbWVudCB7CkBAIC0y
MDIsOCArMjAyLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8Rm9y
bURhdGE+IGNyZWF0ZShjb25zdCB2b2lkKiwgc2l6ZV90KTsKICAgICBzdGF0aWMgUmVmPEZvcm1E
YXRhPiBjcmVhdGUoY29uc3QgQ1N0cmluZyYpOwogICAgIHN0YXRpYyBSZWY8Rm9ybURhdGE+IGNy
ZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mKTsKLSAgICBzdGF0aWMgUmVmPEZvcm1EYXRhPiBjcmVh
dGUoY29uc3QgRm9ybURhdGFMaXN0JiwgY29uc3QgVGV4dEVuY29kaW5nJiwgRW5jb2RpbmdUeXBl
ID0gRm9ybVVSTEVuY29kZWQpOwotICAgIHN0YXRpYyBSZWY8Rm9ybURhdGE+IGNyZWF0ZU11bHRp
UGFydChjb25zdCBGb3JtRGF0YUxpc3QmLCBjb25zdCBUZXh0RW5jb2RpbmcmLCBEb2N1bWVudCop
OworICAgIHN0YXRpYyBSZWY8Rm9ybURhdGE+IGNyZWF0ZShjb25zdCBET01Gb3JtRGF0YSYsIEVu
Y29kaW5nVHlwZSA9IEZvcm1VUkxFbmNvZGVkKTsKKyAgICBzdGF0aWMgUmVmPEZvcm1EYXRhPiBj
cmVhdGVNdWx0aVBhcnQoY29uc3QgRE9NRm9ybURhdGEmLCBEb2N1bWVudCopOwogICAgIFdFQkNP
UkVfRVhQT1JUIH5Gb3JtRGF0YSgpOwogCiAgICAgLy8gRklYTUU6IEJvdGggdGhlc2UgZnVuY3Rp
b25zIHBlcmZvcm0gYSBkZWVwIGNvcHkgb2YgbV9lbGVtZW50cywgYnV0IGRpZmZlciBpbiBoYW5k
bGluZyBvZiBvdGhlciBkYXRhIG1lbWJlcnMuCkBAIC0yNjIsNyArMjYyLDEwIEBAIHByaXZhdGU6
CiAgICAgRm9ybURhdGEoKTsKICAgICBGb3JtRGF0YShjb25zdCBGb3JtRGF0YSYpOwogCi0gICAg
dm9pZCBhcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjb25zdCBGb3JtRGF0YUxpc3QmLCBjb25zdCBU
ZXh0RW5jb2RpbmcmLCBib29sIGlzTXVsdGlQYXJ0Rm9ybSwgRG9jdW1lbnQqLCBFbmNvZGluZ1R5
cGUgPSBGb3JtVVJMRW5jb2RlZCk7CisgICAgdm9pZCBhcHBlbmRNdWx0aVBhcnRGaWxlVmFsdWUo
Y29uc3QgRmlsZSYsIFZlY3RvcjxjaGFyPiYgaGVhZGVyLCBUZXh0RW5jb2RpbmcmLCBEb2N1bWVu
dCopOworICAgIHZvaWQgYXBwZW5kTXVsdGlQYXJ0U3RyaW5nVmFsdWUoY29uc3QgU3RyaW5nJiwg
VmVjdG9yPGNoYXI+JiBoZWFkZXIsIFRleHRFbmNvZGluZyYpOworICAgIHZvaWQgYXBwZW5kTXVs
dGlQYXJ0S2V5VmFsdWVQYWlySXRlbXMoY29uc3QgRE9NRm9ybURhdGEmLCBEb2N1bWVudCopOwor
ICAgIHZvaWQgYXBwZW5kTm9uTXVsdGlQYXJ0S2V5VmFsdWVQYWlySXRlbXMoY29uc3QgRE9NRm9y
bURhdGEmLCBFbmNvZGluZ1R5cGUpOwogCiAgICAgYm9vbCBoYXNHZW5lcmF0ZWRGaWxlcygpIGNv
bnN0OwogICAgIGJvb2wgaGFzT3duZWRHZW5lcmF0ZWRGaWxlcygpIGNvbnN0OwpAQCAtMzE3LDQg
KzMyMCwzIEBAIFJlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmRlY29kZShEZWNvZGUKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMjIxOTAwKQorKysgU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ4LDcgKzY0OCw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFhNTEh0dHBSZXF1ZXN0OjpzZW5kKEQKICAgICAgICAgcmV0dXJuIFdURk1v
dmUocmVzdWx0LnZhbHVlKCkpOwogCiAgICAgaWYgKG1fbWV0aG9kICE9ICJHRVQiICYmIG1fbWV0
aG9kICE9ICJIRUFEIiAmJiBtX3VybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKLSAgICAg
ICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoYm9keSwg
Ym9keS5lbmNvZGluZygpLCBkb2N1bWVudCgpKTsKKyAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9k
eSA9IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoYm9keSwgZG9jdW1lbnQoKSk7CiAgICAgICAg
IG1fcmVxdWVzdEVudGl0eUJvZHktPmdlbmVyYXRlRmlsZXMoZG9jdW1lbnQoKSk7CiAgICAgICAg
IGlmICghbV9yZXF1ZXN0SGVhZGVycy5jb250YWlucyhIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5
cGUpKQogICAgICAgICAgICAgbV9yZXF1ZXN0SGVhZGVycy5zZXQoSFRUUEhlYWRlck5hbWU6OkNv
bnRlbnRUeXBlLCBtYWtlU3RyaW5nKCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iLCBt
X3JlcXVlc3RFbnRpdHlCb2R5LT5ib3VuZGFyeSgpLmRhdGEoKSkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>