<?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>203149</bug_id>
          
          <creation_ts>2019-10-18 03:44:52 -0700</creation_ts>
          <short_desc>[GTK] Simplify the Input Method implementation</short_desc>
          <delta_ts>2019-10-28 02:25:04 -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>WebKitGTK</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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annulen</cc>
    
    <cc>aperez</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1581373</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-10-18 03:44:52 -0700</bug_when>
    <thetext>There&apos;s some dead code to remove and some things that can be simplified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581374</commentid>
    <comment_count>1</comment_count>
      <attachid>381294</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-10-18 03:54:32 -0700</bug_when>
    <thetext>Created attachment 381294
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581375</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-10-18 03:55:22 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582328</commentid>
    <comment_count>3</comment_count>
      <attachid>381294</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2019-10-22 04:29:58 -0700</bug_when>
    <thetext>Comment on attachment 381294
Patch

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

It&apos;s definitely pleasant to see this code being simplified, thanks
a lot. The patch looks good overall, with a couple of small comments,
which you may want to address before landing :] 

&gt; Source/WebCore/platform/PlatformKeyboardEvent.h:43
&gt;  #if PLATFORM(GTK)

This whole #if block can be removed, because there are no more uses
of GdkEventKey left.

&gt; Source/WebKit/UIProcess/gtk/InputMethodFilter.h:42
&gt; +    enum class EventFakedForComposition {

You could use

  enum class EventFakedForComposition : bool { No, Yes};

as you have used elsewhere in the patch.

&gt; Source/WebKit/UIProcess/gtk/InputMethodFilter.h:46
&gt; +    enum class EventHandledByInputMethod {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582761</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-10-23 00:35:58 -0700</bug_when>
    <thetext>(In reply to Adrian Perez from comment #3)
&gt; Comment on attachment 381294 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=381294&amp;action=review
&gt; 
&gt; It&apos;s definitely pleasant to see this code being simplified, thanks
&gt; a lot. The patch looks good overall, with a couple of small comments,
&gt; which you may want to address before landing :] 

Sure, thanks!

&gt; &gt; Source/WebCore/platform/PlatformKeyboardEvent.h:43
&gt; &gt;  #if PLATFORM(GTK)
&gt; 
&gt; This whole #if block can be removed, because there are no more uses
&gt; of GdkEventKey left.

Indeed.

&gt; &gt; Source/WebKit/UIProcess/gtk/InputMethodFilter.h:42
&gt; &gt; +    enum class EventFakedForComposition {
&gt; 
&gt; You could use
&gt; 
&gt;   enum class EventFakedForComposition : bool { No, Yes};
&gt; 
&gt; as you have used elsewhere in the patch.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/gtk/InputMethodFilter.h:46
&gt; &gt; +    enum class EventHandledByInputMethod {
&gt; 
&gt; Ditto.

Yes, I didn&apos;t do that because I&apos;m going to remove that enum in the next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1582773</commentid>
    <comment_count>5</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2019-10-23 02:18:13 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #4)
&gt; (In reply to Adrian Perez from comment #3)
&gt; &gt; Comment on attachment 381294 [details]
&gt; &gt;
&gt; &gt; &gt; [...]
&gt; &gt; &gt;
&gt; &gt; &gt; Source/WebKit/UIProcess/gtk/InputMethodFilter.h:42
&gt; &gt; &gt; +    enum class EventFakedForComposition {
&gt; &gt; 
&gt; &gt; You could use
&gt; &gt; 
&gt; &gt;   enum class EventFakedForComposition : bool { No, Yes};
&gt; &gt; 
&gt; &gt; [...]
&gt; 
&gt; Yes, I didn&apos;t do that because I&apos;m going to remove that enum in the next
&gt; patch.

That sounds even better ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584393</commentid>
    <comment_count>6</comment_count>
      <attachid>382051</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-10-28 02:15:50 -0700</bug_when>
    <thetext>Created attachment 382051
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584397</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-10-28 02:25:04 -0700</bug_when>
    <thetext>Committed r251650: &lt;https://trac.webkit.org/changeset/251650&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381294</attachid>
            <date>2019-10-18 03:54:32 -0700</date>
            <delta_ts>2019-10-28 02:15:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-input-methods.diff</filename>
            <type>text/plain</type>
            <size>42098</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNTY2NDY0N2MxMi4uZTdlOWRiNGVjYzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAxOS0xMC0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gU2ltcGxpZnkgdGhlIElucHV0IE1ldGhvZCBpbXBs
ZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjAzMTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVtb3ZlIENvbXBvc2l0aW9uUmVzdWx0cyBhbmQgcmVtb3ZlIGRlYWQgY29kZSBpbiBQbGF0
Zm9ybUtleWJvYXJkRXZlbnRHdGsuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEd0ay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmRpc2FtYmlndWF0ZUtleURvd25FdmVudCk6
CisKIDIwMTktMTAtMTYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtHVEtdW1dQRV0gQVNTRVJUSU9OIEZBSUxFRDogYmxvYiBpbiBTUUxpdGVT
dGF0ZW1lbnQuY3BwKDE2MykgOiBpbnQgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50OjpiaW5kQmxv
YigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDJmMGRhNWI3NmNlLi43ODdmNDljY2Uw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTQ4LDcgKzQ4LDYgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MveDExL1hVbmlxdWVQdHIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3gxMS9YVW5pcXVlUmVz
b3VyY2UuaAogCi0gICAgcGxhdGZvcm0vZ3RrL0NvbXBvc2l0aW9uUmVzdWx0cy5oCiAgICAgcGxh
dGZvcm0vZ3RrL0dSZWZQdHJHdGsuaAogICAgIHBsYXRmb3JtL2d0ay9HVW5pcXVlUHRyR3RrLmgK
ICAgICBwbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgKaW5kZXggMWEzODZjYzZkNDQuLjE3MGUxNjlm
NjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJk
RXZlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZl
bnQuaApAQCAtNDIsNyArNDIsNiBAQCBPQkpDX0NMQVNTIFdlYkV2ZW50OwogCiAjaWYgUExBVEZP
Uk0oR1RLKQogdHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50S2V5IEdka0V2ZW50S2V5OwotI2luY2x1
ZGUgIkNvbXBvc2l0aW9uUmVzdWx0cy5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTU2LDkgKzU1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX2F1
dG9SZXBlYXQoZmFsc2UpCiAgICAgICAgICAgICAsIG1faXNLZXlwYWQoZmFsc2UpCiAgICAgICAg
ICAgICAsIG1faXNTeXN0ZW1LZXkoZmFsc2UpCi0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICAg
ICAgLCBtX2dka0V2ZW50S2V5KDApCi0jZW5kaWYKICAgICAgICAgewogICAgICAgICB9CiAKQEAg
LTE1MCwxMCArMTQ2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShHVEspCi0gICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSosIGNv
bnN0IENvbXBvc2l0aW9uUmVzdWx0cyYpOwotICAgICAgICBHZGtFdmVudEtleSogZ2RrRXZlbnRL
ZXkoKSBjb25zdCB7IHJldHVybiBtX2dka0V2ZW50S2V5OyB9Ci0gICAgICAgIGNvbnN0IENvbXBv
c2l0aW9uUmVzdWx0cyYgY29tcG9zaXRpb25SZXN1bHRzKCkgY29uc3QgeyByZXR1cm4gbV9jb21w
b3NpdGlvblJlc3VsdHM7IH0KLQogICAgICAgICAvLyBVc2VkIGJ5IFdlYktpdDIKICAgICAgICAg
c3RhdGljIFN0cmluZyBrZXlWYWx1ZUZvckdka0tleUNvZGUodW5zaWduZWQpOwogICAgICAgICBz
dGF0aWMgU3RyaW5nIGtleUNvZGVGb3JIYXJkd2FyZUtleUNvZGUodW5zaWduZWQpOwpAQCAtMjAz
LDExICsxOTUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJldGFpblB0cjw6Oldl
YkV2ZW50PiBtX0V2ZW50OwogI2VuZGlmCiAjZW5kaWYKLSNpZiBQTEFURk9STShHVEspCi0gICAg
ICAgIEdka0V2ZW50S2V5KiBtX2dka0V2ZW50S2V5OwotICAgICAgICBDb21wb3NpdGlvblJlc3Vs
dHMgbV9jb21wb3NpdGlvblJlc3VsdHM7Ci0jZW5kaWYKLSAgICAgICAgCiAgICAgICAgIC8vIFRo
ZSBtb2RpZmllciBzdGF0ZSBpcyBvcHRpb25hbCwgc2luY2UgaXQgaXMgbm90IG5lZWRlZCBpbiB0
aGUgVUkgcHJvY2VzcyBvciBpbiBsZWdhY3kgV2ViS2l0LgogICAgICAgICBzdGF0aWMgT3B0aW9u
YWw8T3B0aW9uU2V0PE1vZGlmaWVyPj4gc19jdXJyZW50TW9kaWZpZXJzOwogICAgIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0MzZjYzM2YTNiLi4wMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ29tcG9zaXRpb25SZXN1bHRzLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBT
LkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IENvbXBvc2l0aW9uUmVzdWx0c19oCi0jZGVmaW5lIENvbXBvc2l0aW9uUmVzdWx0c19oCi0KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1z
dHJ1Y3QgQ29tcG9zaXRpb25SZXN1bHRzIHsKLSAgICBDb21wb3NpdGlvblJlc3VsdHMoKQotICAg
ICAgICA6IGFzc29jaWF0ZWRXaXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRlKGZhbHNlKQotICAg
IHsKLSAgICB9Ci0KLSAgICBDb21wb3NpdGlvblJlc3VsdHMoU3RyaW5nIHNpbXBsZVN0cmluZykK
LSAgICAgICAgOiBzaW1wbGVTdHJpbmcoc2ltcGxlU3RyaW5nKQotICAgICAgICAsIGFzc29jaWF0
ZWRXaXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBkYXRlKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBlbnVtIFJlc3VsdHNJbmRpY2F0b3IgeyBXaWxsU2VuZENvbXBvc2l0aW9uUmVzdWx0c1Nvb24g
fTsKLSAgICBDb21wb3NpdGlvblJlc3VsdHMoUmVzdWx0c0luZGljYXRvcikKLSAgICAgICAgOiBh
c3NvY2lhdGVkV2l0aFBlbmRpbmdDb21wb3NpdGlvblVwZGF0ZSh0cnVlKQotICAgIHsKLSAgICB9
Ci0KLSAgICBib29sIGNvbXBvc2l0aW9uVXBkYXRlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gYXNzb2NpYXRlZFdpdGhQZW5kaW5nQ29tcG9zaXRpb25VcGRhdGU7Ci0gICAgfQotCi0g
ICAgLy8gU29tZSBzaW1wbGUgaW5wdXQgbWV0aG9kcyByZXR1cm4gYSBzdHJpbmcgZm9yIGFsbCBr
ZXlib2FyZCBldmVudHMuIFRoaXMKLSAgICAvLyB2YWx1ZSBzaG91bGQgYmUgdHJlYXRlZCBhcyB0
aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBrZXljb2RlLgotICAgIFN0cmluZyBzaW1w
bGVTdHJpbmc7Ci0KLSAgICBib29sIGFzc29jaWF0ZWRXaXRoUGVuZGluZ0NvbXBvc2l0aW9uVXBk
YXRlOwotfTsKLQotfQotCi0jZW5kaWYgLy8gQ29tcG9zaXRpb25SZXN1bHRzX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEd0
ay5jcHAKaW5kZXggNWM1MmRmZGEzODAuLjM1NmIwOWYyZmJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcApA
QCAtMTMyMSw1OSArMTMyMSw2IEBAIFN0cmluZyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmds
ZUNoYXJhY3RlclN0cmluZyh1bnNpZ25lZCB2YWwpCiAgICAgfQogfQogCi1zdGF0aWMgUGxhdGZv
cm1FdmVudDo6VHlwZSBldmVudFR5cGVGb3JHZGtLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQp
Ci17Ci0gICAgcmV0dXJuIGdka19ldmVudF9nZXRfZXZlbnRfdHlwZShyZWludGVycHJldF9jYXN0
PEdka0V2ZW50Kj4oZXZlbnQpKSA9PSBHREtfS0VZX1JFTEVBU0UgPyBQbGF0Zm9ybUV2ZW50OjpL
ZXlVcCA6IFBsYXRmb3JtRXZlbnQ6OktleURvd247Ci19Ci0KLXN0YXRpYyBPcHRpb25TZXQ8UGxh
dGZvcm1FdmVudDo6TW9kaWZpZXI+IG1vZGlmaWVyc0Zvckdka0tleUV2ZW50KEdka0V2ZW50S2V5
KiBldmVudCkKLXsKLSAgICBHZGtNb2RpZmllclR5cGUgc3RhdGU7Ci0gICAgZ2RrX2V2ZW50X2dl
dF9zdGF0ZShyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCAmc3RhdGUpOwotICAg
IGd1aW50IGtleXZhbDsKLSAgICBnZGtfZXZlbnRfZ2V0X2tleXZhbChyZWludGVycHJldF9jYXN0
PEdka0V2ZW50Kj4oZXZlbnQpLCAma2V5dmFsKTsKLQotICAgIE9wdGlvblNldDxQbGF0Zm9ybUV2
ZW50OjpNb2RpZmllcj4gbW9kaWZpZXJzOwotICAgIGlmIChzdGF0ZSAmIEdES19TSElGVF9NQVNL
IHx8IGtleXZhbCA9PSBHREtfS0VZXzMyNzBfQmFja1RhYikKLSAgICAgICAgbW9kaWZpZXJzLmFk
ZChQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcjo6U2hpZnRLZXkpOwotICAgIGlmIChzdGF0ZSAmIEdE
S19DT05UUk9MX01BU0spCi0gICAgICAgIG1vZGlmaWVycy5hZGQoUGxhdGZvcm1FdmVudDo6TW9k
aWZpZXI6OkNvbnRyb2xLZXkpOwotICAgIGlmIChzdGF0ZSAmIEdES19NT0QxX01BU0spCi0gICAg
ICAgIG1vZGlmaWVycy5hZGQoUGxhdGZvcm1FdmVudDo6TW9kaWZpZXI6OkFsdEtleSk7Ci0gICAg
aWYgKHN0YXRlICYgR0RLX01FVEFfTUFTSykKLSAgICAgICAgbW9kaWZpZXJzLmFkZChQbGF0Zm9y
bUV2ZW50OjpNb2RpZmllcjo6TWV0YUtleSk7Ci0gICAgaWYgKHN0YXRlICYgR0RLX0xPQ0tfTUFT
SykKLSAgICAgICAgbW9kaWZpZXJzLmFkZChQbGF0Zm9ybUV2ZW50OjpNb2RpZmllcjo6Q2Fwc0xv
Y2tLZXkpOwotICAgIHJldHVybiBtb2RpZmllcnM7Ci19Ci0KLS8vIEtlZXAgdGhpcyBpbiBzeW5j
IHdpdGggdGhlIG90aGVyIHBsYXRmb3JtIGV2ZW50IGNvbnN0cnVjdG9ycwotUGxhdGZvcm1LZXli
b2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50LCBjb25z
dCBDb21wb3NpdGlvblJlc3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0cykKLSAgICA6IFBsYXRmb3Jt
RXZlbnQoZXZlbnRUeXBlRm9yR2RrS2V5RXZlbnQoZXZlbnQpLCBtb2RpZmllcnNGb3JHZGtLZXlF
dmVudChldmVudCksIHdhbGxUaW1lRm9yRXZlbnQoZXZlbnQpKQotICAgICwgbV9oYW5kbGVkQnlJ
bnB1dE1ldGhvZChmYWxzZSkKLSAgICAsIG1fYXV0b1JlcGVhdChmYWxzZSkKLSAgICAsIG1faXNT
eXN0ZW1LZXkoZmFsc2UpCi0gICAgLCBtX2dka0V2ZW50S2V5KGV2ZW50KQotICAgICwgbV9jb21w
b3NpdGlvblJlc3VsdHMoY29tcG9zaXRpb25SZXN1bHRzKQotewotICAgIGd1aW50IGtleXZhbDsK
LSAgICBnZGtfZXZlbnRfZ2V0X2tleXZhbChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZl
bnQpLCAma2V5dmFsKTsKLSAgICBndWludDE2IGtleWNvZGU7Ci0gICAgZ2RrX2V2ZW50X2dldF9r
ZXljb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihldmVudCksICZrZXljb2RlKTsKLQot
ICAgIG1fdGV4dCA9IGNvbXBvc2l0aW9uUmVzdWx0cy5zaW1wbGVTdHJpbmcubGVuZ3RoKCkgPyBj
b21wb3NpdGlvblJlc3VsdHMuc2ltcGxlU3RyaW5nIDogc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGtl
eXZhbCk7Ci0gICAgbV91bm1vZGlmaWVkVGV4dCA9IG1fdGV4dDsKLSAgICBtX2tleSA9IGtleVZh
bHVlRm9yR2RrS2V5Q29kZShrZXl2YWwpOwotICAgIG1fY29kZSA9IGtleUNvZGVGb3JIYXJkd2Fy
ZUtleUNvZGUoa2V5Y29kZSk7Ci0gICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckZv
ckdka0tleUNvZGUoa2V5dmFsKTsKLSAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IHdpbmRv
d3NLZXlDb2RlRm9yR2RrS2V5Q29kZShrZXl2YWwpOwotICAgIG1faXNLZXlwYWQgPSBrZXl2YWwg
Pj0gR0RLX0tFWV9LUF9TcGFjZSAmJiBrZXl2YWwgPD0gR0RLX0tFWV9LUF85OwotCi0gICAgLy8g
VG8gbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIElFLCB3ZSByZXR1cm4gVktfUFJPQ0VTU0tFWSBmb3Ig
a2V5cyB0aGF0IHRyaWdnZXJlZCBjb21wb3NpdGlvbiByZXN1bHRzLgotICAgIGlmIChjb21wb3Np
dGlvblJlc3VsdHMuY29tcG9zaXRpb25VcGRhdGVkKCkpCi0gICAgICAgIG1fd2luZG93c1ZpcnR1
YWxLZXlDb2RlID0gVktfUFJPQ0VTU0tFWTsKLX0KLQogdm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQ6OmRpc2FtYmlndWF0ZUtleURvd25FdmVudChUeXBlIHR5cGUsIGJvb2wgYmFja3dhcmRDb21w
YXRpYmlsaXR5TW9kZSkKIHsKICAgICAvLyBDYW4gb25seSBjaGFuZ2UgdHlwZSBmcm9tIEtleURv
d24gdG8gUmF3S2V5RG93biBvciBDaGFyLCBhcyB3ZSBsYWNrIGluZm9ybWF0aW9uIGZvciBvdGhl
ciBjb252ZXJzaW9ucy4KQEAgLTEzODYsNyArMTMzMyw3IEBAIHZvaWQgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBib29sIGJhY2t3YXJk
Q29tCiAgICAgaWYgKHR5cGUgPT0gUGxhdGZvcm1FdmVudDo6UmF3S2V5RG93bikgewogICAgICAg
ICBtX3RleHQgPSBTdHJpbmcoKTsKICAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9IFN0cmluZygp
OwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpDaGFyICYmIG1fY29tcG9z
aXRpb25SZXN1bHRzLmNvbXBvc2l0aW9uVXBkYXRlZCgpKSB7CisgICAgfSBlbHNlIGlmICh0eXBl
ID09IFBsYXRmb3JtRXZlbnQ6OkNoYXIgJiYgbV9oYW5kbGVkQnlJbnB1dE1ldGhvZCkgewogICAg
ICAgICAvLyBIYXZpbmcgZW1wdHkgdGV4dCwgcHJldmVudHMgdGhpcyBDaGFyICh3aGljaCBpcyBh
IERPTSBrZXlwcmVzcykgZXZlbnQKICAgICAgICAgLy8gZnJvbSBnb2luZyB0byB0aGUgRE9NLiBL
ZXlzIHRoYXQgdHJpZ2dlciBjb21wb3NpdGlvbiBldmVudHMgc2hvdWxkIG5vdAogICAgICAgICAv
LyBmaXJlIGtleXByZXNzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA5YWZiOGVlZjg0NC4uZjE3YjFiYmQ5ZDEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTktMTAtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFNpbXBsaWZ5IHRoZSBJbnB1
dCBNZXRob2QgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMzE0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaDogU3RvcCB1
c2luZyBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMuCisgICAgICAgIChXZWJLaXQ6Ok5hdGl2
ZVdlYktleWJvYXJkRXZlbnQ6OnRleHQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50OjpoYW5kbGVkQnlJbnB1dE1ldGhvZCBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6OmZha2VkRm9yQ29tcG9zaXRpb24gY29uc3Qp
OgorICAgICAgICAqIFNoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHA6IERp
dHRvLgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBTaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVu
dCk6IERpdHRvLgorICAgICAgICAqIFNoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhLZXlFdmVudCk6IFVwZGF0ZWQgdG8gdXNlIHRo
ZSBuZXcgbmFtZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZS5jcHA6IFN0b3AgdXNpbmcgV2ViQ29yZTo6Q29tcG9zaXRpb25SZXN1bHRzLgorICAgICAgICAo
d2Via2l0V2ViVmlld0Jhc2VLZXlQcmVzc0V2ZW50KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdC
YXNlS2V5UmVsZWFzZUV2ZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZVByaXZhdGUuaDogUmVtb3ZlIHVudXNlZCBmdW5jdGlvbi4KKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzZXRDb21wb3NpdGlvbik6IFVzZSBFZGl0aW5nUmFuZ2UgaW5zdGVhZCBvZiB0d28gaW50ZWdl
cnMgYW5kIHJlbW92ZSByZXBsYWNlbWVudCByYW5nZQorICAgICAgICB0aGF0IGlzIHVudXNlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb25maXJtQ29tcG9zaXRpb24pOiBSZW1v
dmUgdW51c2VkIHNlbGVjdGlvbiByYW5nZSBwYXJhbWV0ZXJzLgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9kRmls
dGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZUtleWJv
YXJkRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlS2V5
Ym9hcmRFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViS2l0OjpJbnB1
dE1ldGhvZEZpbHRlcjo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6SW5w
dXRNZXRob2RGaWx0ZXI6OnVwZGF0ZVByZWVkaXQpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1l
dGhvZEZpbHRlcjo6Y29uZmlybUN1cnJlbnRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OklucHV0TWV0aG9kRmlsdGVyOjpzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlF
dmVudHMpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6bG9nSGFuZGxlS2V5
Ym9hcmRFdmVudEZvclRlc3RpbmcpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRl
cjo6bG9nSGFuZGxlS2V5Ym9hcmRFdmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHNGb3JUZXN0aW5n
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0Ojp0YXJn
ZXRGcmFtZUZvckVkaXRpbmcpOiBSZWNlaXZlIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2lu
dGVyLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb25maXJtQ29tcG9zaXRpb24pOiBSZW1v
dmUgdGhlIHVudXNlZCBjb2RlIHRvIGhhbmRsZSB0aGUgc2VsZWN0aW9uIHJhbmdlLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRDb21wb3NpdGlvbik6IFJlbW92ZSB0aGUgdW51c2VkIGNv
ZGUgdG8gaGFuZGxlIHRoZSByZXBsYWNlbWVudCByYW5nZS4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluOgorCiAyMDE5LTEwLTE1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIEFkZCB1c2VyIG1lc3NhZ2VzIEFQ
SQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dC5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCmluZGV4
IGMwYTY0ZTM2Mjk2Li42ZjRlMjliN2M2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL05h
dGl2ZVdlYktleWJvYXJkRXZlbnQuaApAQCAtNDEsOCArNDEsNiBAQCBzdHJ1Y3QgS2V5cHJlc3ND
b21tYW5kOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCi0jaW5jbHVkZSAiSW5wdXRNZXRo
b2RGaWx0ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0NvbXBvc2l0aW9uUmVzdWx0cy5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvR1VuaXF1ZVB0ckd0ay5oPgogdHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQg
R2RrRXZlbnQ7CiAjZW5kaWYKQEAgLTY5LDcgKzY3LDkgQEAgcHVibGljOgogICAgIE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQoTlNFdmVudCAqLCBib29sIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBib29s
IHJlcGxhY2VzU29mdFNwYWNlLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5k
PiYpOwogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoY29u
c3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYpOwotICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQo
R2RrRXZlbnQqLCBjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMmLCBJbnB1dE1ldGhv
ZEZpbHRlcjo6RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uLCBWZWN0b3I8U3RyaW5nPiYmIGNvbW1h
bmRzKTsKKyAgICBlbnVtIGNsYXNzIEhhbmRsZWRCeUlucHV0TWV0aG9kIDogYm9vbCB7IE5vLCBZ
ZXMgfTsKKyAgICBlbnVtIGNsYXNzIEZha2VkRm9yQ29tcG9zaXRpb24gOiBib29sIHsgTm8sIFll
cyB9OworICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoR2RrRXZlbnQqLCBjb25zdCBTdHJpbmcm
LCBIYW5kbGVkQnlJbnB1dE1ldGhvZCwgRmFrZWRGb3JDb21wb3NpdGlvbiwgVmVjdG9yPFN0cmlu
Zz4mJiBjb21tYW5kcyk7CiAjZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGVudW0gY2xh
c3MgSGFuZGxlZEJ5SW5wdXRNZXRob2QgOiBib29sIHsgTm8sIFllcyB9OwogICAgIE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQoOjpXZWJFdmVudCAqLCBIYW5kbGVkQnlJbnB1dE1ldGhvZCk7CkBAIC04
Myw4ICs4Myw5IEBAIHB1YmxpYzoKICAgICBOU0V2ZW50ICpuYXRpdmVFdmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fbmF0aXZlRXZlbnQuZ2V0KCk7IH0KICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICBH
ZGtFdmVudCogbmF0aXZlRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUV2ZW50LmdldCgp
OyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6Q29tcG9zaXRpb25SZXN1bHRzJiBjb21wb3NpdGlvblJl
c3VsdHMoKSBjb25zdCAgeyByZXR1cm4gbV9jb21wb3NpdGlvblJlc3VsdHM7IH0KLSAgICBib29s
IGlzRmFrZUV2ZW50Rm9yQ29tcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Zha2VFdmVudEZv
ckNvbXBvc2l0aW9uOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZXh0KCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0OyB9CisgICAgYm9vbCBoYW5kbGVkQnlJbnB1dE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJu
IG1faGFuZGxlZEJ5SW5wdXRNZXRob2QgPT0gSGFuZGxlZEJ5SW5wdXRNZXRob2Q6OlllczsgfQor
ICAgIGJvb2wgZmFrZWRGb3JDb21wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmFrZWRGb3JD
b21wb3NpdGlvbiA9PSBGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXM7IH0KICNlbGlmIFBMQVRGT1JN
KElPU19GQU1JTFkpCiAgICAgOjpXZWJFdmVudCogbmF0aXZlRXZlbnQoKSBjb25zdCB7IHJldHVy
biBtX25hdGl2ZUV2ZW50LmdldCgpOyB9CiAjZWxpZiBQTEFURk9STShXSU4pCkBAIC05OCw4ICs5
OSw5IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPE5TRXZlbnQ+IG1fbmF0aXZlRXZlbnQ7CiAj
ZWxpZiBQTEFURk9STShHVEspCiAgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gbV9uYXRpdmVFdmVu
dDsKLSAgICBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMgbV9jb21wb3NpdGlvblJlc3VsdHM7
Ci0gICAgYm9vbCBtX2Zha2VFdmVudEZvckNvbXBvc2l0aW9uOworICAgIFN0cmluZyBtX3RleHQ7
CisgICAgSGFuZGxlZEJ5SW5wdXRNZXRob2QgbV9oYW5kbGVkQnlJbnB1dE1ldGhvZDsKKyAgICBG
YWtlZEZvckNvbXBvc2l0aW9uIG1fZmFrZWRGb3JDb21wb3NpdGlvbjsKICNlbGlmIFBMQVRGT1JN
KElPU19GQU1JTFkpCiAgICAgUmV0YWluUHRyPDo6V2ViRXZlbnQ+IG1fbmF0aXZlRXZlbnQ7CiAj
ZWxpZiBQTEFURk9STShXSU4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsv
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsv
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHAKaW5kZXggOTcwYmE0YzA2NmYuLjQ1YWE0NDk2
NDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL05hdGl2ZVdlYktl
eWJvYXJkRXZlbnRHdGsuY3BwCkBAIC0zMiwyMSArMzIsMjIgQEAKICNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLU5h
dGl2ZVdlYktleWJvYXJkRXZlbnQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQoR2RrRXZlbnQqIGV2
ZW50LCBjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0
cywgSW5wdXRNZXRob2RGaWx0ZXI6OkV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbiBmYWtlZCwgVmVj
dG9yPFN0cmluZz4mJiBjb21tYW5kcykKLSAgICA6IFdlYktleWJvYXJkRXZlbnQoV2ViRXZlbnRG
YWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KGV2ZW50LCBjb21wb3NpdGlvblJlc3VsdHMs
IFdURk1vdmUoY29tbWFuZHMpKSkKK05hdGl2ZVdlYktleWJvYXJkRXZlbnQ6Ok5hdGl2ZVdlYktl
eWJvYXJkRXZlbnQoR2RrRXZlbnQqIGV2ZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIEhhbmRsZWRC
eUlucHV0TWV0aG9kIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBGYWtlZEZvckNvbXBvc2l0aW9uIGZh
a2VkRm9yQ29tcG9zaXRpb24sIFZlY3RvcjxTdHJpbmc+JiYgY29tbWFuZHMpCisgICAgOiBXZWJL
ZXlib2FyZEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChldmVu
dCwgdGV4dCwgaGFuZGxlZEJ5SW5wdXRNZXRob2QgPT0gSGFuZGxlZEJ5SW5wdXRNZXRob2Q6Olll
cywgV1RGTW92ZShjb21tYW5kcykpKQogICAgICwgbV9uYXRpdmVFdmVudChnZGtfZXZlbnRfY29w
eShldmVudCkpCi0gICAgLCBtX2NvbXBvc2l0aW9uUmVzdWx0cyhjb21wb3NpdGlvblJlc3VsdHMp
Ci0gICAgLCBtX2Zha2VFdmVudEZvckNvbXBvc2l0aW9uKGZha2VkID09IElucHV0TWV0aG9kRmls
dGVyOjpFdmVudEZha2VkKQorICAgICwgbV90ZXh0KHRleHQpCisgICAgLCBtX2hhbmRsZWRCeUlu
cHV0TWV0aG9kKGhhbmRsZWRCeUlucHV0TWV0aG9kKQorICAgICwgbV9mYWtlZEZvckNvbXBvc2l0
aW9uKGZha2VkRm9yQ29tcG9zaXRpb24pCiB7CiB9CiAKIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6
Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZl
bnQpCi0gICAgOiBXZWJLZXlib2FyZEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5
Ym9hcmRFdmVudChldmVudC5uYXRpdmVFdmVudCgpLCBldmVudC5jb21wb3NpdGlvblJlc3VsdHMo
KSwgVmVjdG9yPFN0cmluZz4oZXZlbnQuY29tbWFuZHMoKSkpKQorICAgIDogV2ViS2V5Ym9hcmRF
dmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQubmF0aXZl
RXZlbnQoKSwgZXZlbnQudGV4dCgpLCBldmVudC5oYW5kbGVkQnlJbnB1dE1ldGhvZCgpLCBWZWN0
b3I8U3RyaW5nPihldmVudC5jb21tYW5kcygpKSkpCiAgICAgLCBtX25hdGl2ZUV2ZW50KGdka19l
dmVudF9jb3B5KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKQotICAgICwgbV9jb21wb3NpdGlvblJlc3Vs
dHMoZXZlbnQuY29tcG9zaXRpb25SZXN1bHRzKCkpCi0gICAgLCBtX2Zha2VFdmVudEZvckNvbXBv
c2l0aW9uKGV2ZW50LmlzRmFrZUV2ZW50Rm9yQ29tcG9zaXRpb24oKSkKKyAgICAsIG1fdGV4dChl
dmVudC50ZXh0KCkpCisgICAgLCBtX2hhbmRsZWRCeUlucHV0TWV0aG9kKGV2ZW50LmhhbmRsZWRC
eUlucHV0TWV0aG9kKCkgPyBIYW5kbGVkQnlJbnB1dE1ldGhvZDo6WWVzIDogSGFuZGxlZEJ5SW5w
dXRNZXRob2Q6Ok5vKQorICAgICwgbV9mYWtlZEZvckNvbXBvc2l0aW9uKGV2ZW50LmZha2VkRm9y
Q29tcG9zaXRpb24oKSA/IEZha2VkRm9yQ29tcG9zaXRpb246OlllcyA6IEZha2VkRm9yQ29tcG9z
aXRpb246Ok5vKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsv
V2ViRXZlbnRGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9XZWJFdmVudEZh
Y3RvcnkuY3BwCmluZGV4IDJjYWJhYjE5NmUyLi4wNDA0OGNlZTUwMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAKQEAgLTI0OSw3ICsyNDksNyBAQCBX
ZWJXaGVlbEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBH
ZGtFdmVudCogZXZlbnQsIFdlYldoZQogICAgICAgICB3YWxsVGltZUZvckV2ZW50KGV2ZW50KSk7
CiB9CiAKLVdlYktleWJvYXJkRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2Fy
ZEV2ZW50KGNvbnN0IEdka0V2ZW50KiBldmVudCwgY29uc3QgV2ViQ29yZTo6Q29tcG9zaXRpb25S
ZXN1bHRzJiBjb21wb3NpdGlvblJlc3VsdHMsIFZlY3RvcjxTdHJpbmc+JiYgY29tbWFuZHMpCitX
ZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChj
b25zdCBHZGtFdmVudCogZXZlbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBoYW5kbGVkQnlJ
bnB1dE1ldGhvZCwgVmVjdG9yPFN0cmluZz4mJiBjb21tYW5kcykKIHsKICAgICBndWludCBrZXl2
YWw7CiAgICAgZ2RrX2V2ZW50X2dldF9rZXl2YWwoZXZlbnQsICZrZXl2YWwpOwpAQCAtMjU5LDEz
ICsyNTksMTMgQEAgV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktl
eWJvYXJkRXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50LAogCiAgICAgcmV0dXJuIFdlYktleWJv
YXJkRXZlbnQoCiAgICAgICAgIHR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFID8gV2ViRXZlbnQ6Oktl
eVVwIDogV2ViRXZlbnQ6OktleURvd24sCi0gICAgICAgIGNvbXBvc2l0aW9uUmVzdWx0cy5zaW1w
bGVTdHJpbmcubGVuZ3RoKCkgPyBjb21wb3NpdGlvblJlc3VsdHMuc2ltcGxlU3RyaW5nIDogUGxh
dGZvcm1LZXlib2FyZEV2ZW50OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoa2V5dmFsKSwKKyAgICAg
ICAgdGV4dC5pc051bGwoKSA/IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6c2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKGtleXZhbCkgOiB0ZXh0LAogICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6Omtl
eVZhbHVlRm9yR2RrS2V5Q29kZShrZXl2YWwpLAogICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQ6OmtleUNvZGVGb3JIYXJkd2FyZUtleUNvZGUoa2V5Y29kZSksCiAgICAgICAgIFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckdka0tleUNvZGUoa2V5dmFsKSwKICAgICAg
ICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50Ojp3aW5kb3dzS2V5Q29kZUZvckdka0tleUNvZGUoa2V5
dmFsKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihrZXl2YWwpLAotICAgICAgICBjb21wb3Np
dGlvblJlc3VsdHMuY29tcG9zaXRpb25VcGRhdGVkKCksCisgICAgICAgIGhhbmRsZWRCeUlucHV0
TWV0aG9kLAogICAgICAgICBXVEZNb3ZlKGNvbW1hbmRzKSwKICAgICAgICAgaXNHZGtLZXlDb2Rl
RnJvbUtleVBhZChrZXl2YWwpLAogICAgICAgICBtb2RpZmllcnNGb3JFdmVudChldmVudCksCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmggYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmgKaW5kZXggOGZlN2NkY2U1
NmYuLjgwMDhmZjJmMmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvV2Vi
RXZlbnRGYWN0b3J5LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFj
dG9yeS5oCkBAIC0yNCwxMSArMjQsOSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgV2ViRXZlbnRGYWN0b3J5X2gKLSNkZWZpbmUgV2ViRXZlbnRG
YWN0b3J5X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0NvbXBvc2l0aW9uUmVzdWx0cy5oPgogCiB0eXBlZGVmIHVuaW9uIF9HZGtFdmVu
dCBHZGtFdmVudDsKIApAQCAtMzksMTIgKzM3LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgV2Vi
TW91c2VFdmVudCBjcmVhdGVXZWJNb3VzZUV2ZW50KGNvbnN0IEdka0V2ZW50KiwgaW50KTsKICAg
ICBzdGF0aWMgV2ViV2hlZWxFdmVudCBjcmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdka0V2ZW50
Kik7CiAgICAgc3RhdGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2ViV2hlZWxFdmVudChjb25zdCBH
ZGtFdmVudCosIFdlYldoZWVsRXZlbnQ6OlBoYXNlLCBXZWJXaGVlbEV2ZW50OjpQaGFzZSBtb21l
bnR1bVBoYXNlKTsKLSAgICBzdGF0aWMgV2ViS2V5Ym9hcmRFdmVudCBjcmVhdGVXZWJLZXlib2Fy
ZEV2ZW50KGNvbnN0IEdka0V2ZW50KiwgY29uc3QgV2ViQ29yZTo6Q29tcG9zaXRpb25SZXN1bHRz
JiwgVmVjdG9yPFN0cmluZz4mJiBjb21tYW5kcyk7CisgICAgc3RhdGljIFdlYktleWJvYXJkRXZl
bnQgY3JlYXRlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBHZGtFdmVudCosIGNvbnN0IFN0cmluZyYs
IGJvb2wgaGFuZGxlZEJ5SW5wdXRNZXRob2QsIFZlY3RvcjxTdHJpbmc+JiYgY29tbWFuZHMpOwog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgc3RhdGljIFdlYlRvdWNoRXZlbnQgY3JlYXRl
V2ViVG91Y2hFdmVudChjb25zdCBHZGtFdmVudCosIFZlY3RvcjxXZWJQbGF0Zm9ybVRvdWNoUG9p
bnQ+JiYpOwogI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IFdlYkV2ZW50RmFjdG9yeV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
dGsvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IDIyZTA2OWFiYzg0Li4wMGI3YzZiYmM0NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5j
cHAKQEAgLTIyNCw3ICsyMjQsNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aEtleUV2
ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBib29sCiB7CiAgICAgaWYg
KHdhc0V2ZW50SGFuZGxlZCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChldmVudC5pc0Zha2VF
dmVudEZvckNvbXBvc2l0aW9uKCkpCisgICAgaWYgKGV2ZW50LmZha2VkRm9yQ29tcG9zaXRpb24o
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZp
ZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5k
ZXggMjdkMWQxODUwZmYuLmE5ZDQ5ZDUyNjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtNzg0LDkgKzc4NCwx
MSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VLZXlQcmVzc0V2ZW50KEd0a1dp
ZGdldCogd2lkZ2V0LCBHZGtFdmVudEtleSogawogCiAgICAgLy8gV2UgbmVlZCB0byBjb3B5IHRo
ZSBldmVudCBhcyBvdGhlcndpc2UgaXQgY291bGQgYmUgZGVzdHJveWVkIGJlZm9yZSB3ZSByZWFj
aCB0aGUgbGFtYmRhIGJvZHkuCiAgICAgR1VuaXF1ZVB0cjxHZGtFdmVudD4gZXZlbnQoZ2RrX2V2
ZW50X2NvcHkocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGtleUV2ZW50KSkpOwotICAgIHBy
aXYtPmlucHV0TWV0aG9kRmlsdGVyLmZpbHRlcktleUV2ZW50KGtleUV2ZW50LCBbcHJpdiwgZXZl
bnQgPSBXVEZNb3ZlKGV2ZW50KV0oY29uc3QgV2ViQ29yZTo6Q29tcG9zaXRpb25SZXN1bHRzJiBj
b21wb3NpdGlvblJlc3VsdHMsIElucHV0TWV0aG9kRmlsdGVyOjpFdmVudEZha2VkRm9yQ29tcG9z
aXRpb24gZmFrZWQpIHsKLSAgICAgICAgcHJpdi0+cGFnZVByb3h5LT5oYW5kbGVLZXlib2FyZEV2
ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQuZ2V0KCksIGNvbXBvc2l0aW9uUmVzdWx0
cywgZmFrZWQsCi0gICAgICAgICAgICAhY29tcG9zaXRpb25SZXN1bHRzLmNvbXBvc2l0aW9uVXBk
YXRlZCgpID8gcHJpdi0+a2V5QmluZGluZ1RyYW5zbGF0b3IuY29tbWFuZHNGb3JLZXlFdmVudCgm
ZXZlbnQtPmtleSkgOiBWZWN0b3I8U3RyaW5nPigpKSk7CisgICAgcHJpdi0+aW5wdXRNZXRob2RG
aWx0ZXIuZmlsdGVyS2V5RXZlbnQoa2V5RXZlbnQsIFtwcml2LCBldmVudCA9IFdURk1vdmUoZXZl
bnQpXShjb25zdCBTdHJpbmcmIHRleHQsIElucHV0TWV0aG9kRmlsdGVyOjpFdmVudEhhbmRsZWRC
eUlucHV0TWV0aG9kIGhhbmRsZWQsIElucHV0TWV0aG9kRmlsdGVyOjpFdmVudEZha2VkRm9yQ29t
cG9zaXRpb24gZmFrZWQpIHsKKyAgICAgICAgYXV0byBoYW5kbGVkQnlJbnB1dE1ldGhvZCA9IGhh
bmRsZWQgPT0gSW5wdXRNZXRob2RGaWx0ZXI6OkV2ZW50SGFuZGxlZEJ5SW5wdXRNZXRob2Q6Olll
cyA/IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6OkhhbmRsZWRCeUlucHV0TWV0aG9kOjpZZXMgOiBO
YXRpdmVXZWJLZXlib2FyZEV2ZW50OjpIYW5kbGVkQnlJbnB1dE1ldGhvZDo6Tm87CisgICAgICAg
IGF1dG8gZmFrZWRGb3JDb21wb3NpdGlvbiA9IGZha2VkID09IElucHV0TWV0aG9kRmlsdGVyOjpF
dmVudEZha2VkRm9yQ29tcG9zaXRpb246OlllcyA/IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6OkZh
a2VkRm9yQ29tcG9zaXRpb246OlllcyA6IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6OkZha2VkRm9y
Q29tcG9zaXRpb246Ok5vOworICAgICAgICBhdXRvIGNvbW1hbmRzID0gaGFuZGxlZCA9PSBJbnB1
dE1ldGhvZEZpbHRlcjo6RXZlbnRIYW5kbGVkQnlJbnB1dE1ldGhvZDo6WWVzID8gVmVjdG9yPFN0
cmluZz4oKSA6IHByaXYtPmtleUJpbmRpbmdUcmFuc2xhdG9yLmNvbW1hbmRzRm9yS2V5RXZlbnQo
JmV2ZW50LT5rZXkpOworICAgICAgICBwcml2LT5wYWdlUHJveHktPmhhbmRsZUtleWJvYXJkRXZl
bnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChldmVudC5nZXQoKSwgdGV4dCwgaGFuZGxlZEJ5SW5w
dXRNZXRob2QsIGZha2VkRm9yQ29tcG9zaXRpb24sIFdURk1vdmUoY29tbWFuZHMpKSk7CiAgICAg
fSk7CiAKICAgICByZXR1cm4gR0RLX0VWRU5UX1NUT1A7CkBAIC04MDQsOCArODA2LDEwIEBAIHN0
YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUtleVJlbGVhc2VFdmVudChHdGtXaWRnZXQq
IHdpZGdldCwgR2RrRXZlbnRLZXkqCiAKICAgICAvLyBXZSBuZWVkIHRvIGNvcHkgdGhlIGV2ZW50
IGFzIG90aGVyd2lzZSBpdCBjb3VsZCBiZSBkZXN0cm95ZWQgYmVmb3JlIHdlIHJlYWNoIHRoZSBs
YW1iZGEgYm9keS4KICAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBldmVudChnZGtfZXZlbnRfY29w
eShyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oa2V5RXZlbnQpKSk7Ci0gICAgcHJpdi0+aW5w
dXRNZXRob2RGaWx0ZXIuZmlsdGVyS2V5RXZlbnQoa2V5RXZlbnQsIFtwcml2LCBldmVudCA9IFdU
Rk1vdmUoZXZlbnQpXShjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMmIGNvbXBvc2l0
aW9uUmVzdWx0cywgSW5wdXRNZXRob2RGaWx0ZXI6OkV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbiBm
YWtlZCkgewotICAgICAgICBwcml2LT5wYWdlUHJveHktPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudChldmVudC5nZXQoKSwgY29tcG9zaXRpb25SZXN1bHRzLCBmYWtl
ZCwgeyB9KSk7CisgICAgcHJpdi0+aW5wdXRNZXRob2RGaWx0ZXIuZmlsdGVyS2V5RXZlbnQoa2V5
RXZlbnQsIFtwcml2LCBldmVudCA9IFdURk1vdmUoZXZlbnQpXShjb25zdCBTdHJpbmcmIHRleHQs
IElucHV0TWV0aG9kRmlsdGVyOjpFdmVudEhhbmRsZWRCeUlucHV0TWV0aG9kIGhhbmRsZWQsIElu
cHV0TWV0aG9kRmlsdGVyOjpFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gZmFrZWQpIHsKKyAgICAg
ICAgYXV0byBoYW5kbGVkQnlJbnB1dE1ldGhvZCA9IGhhbmRsZWQgPT0gSW5wdXRNZXRob2RGaWx0
ZXI6OkV2ZW50SGFuZGxlZEJ5SW5wdXRNZXRob2Q6OlllcyA/IE5hdGl2ZVdlYktleWJvYXJkRXZl
bnQ6OkhhbmRsZWRCeUlucHV0TWV0aG9kOjpZZXMgOiBOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpI
YW5kbGVkQnlJbnB1dE1ldGhvZDo6Tm87CisgICAgICAgIGF1dG8gZmFrZWRGb3JDb21wb3NpdGlv
biA9IGZha2VkID09IElucHV0TWV0aG9kRmlsdGVyOjpFdmVudEZha2VkRm9yQ29tcG9zaXRpb246
OlllcyA/IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6OkZha2VkRm9yQ29tcG9zaXRpb246OlllcyA6
IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6OkZha2VkRm9yQ29tcG9zaXRpb246Ok5vOworICAgICAg
ICBwcml2LT5wYWdlUHJveHktPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudChldmVudC5nZXQoKSwgdGV4dCwgaGFuZGxlZEJ5SW5wdXRNZXRob2QsIGZha2VkRm9yQ29t
cG9zaXRpb24sIHsgfSkpOwogICAgIH0pOwogCiAgICAgcmV0dXJuIEdES19FVkVOVF9TVE9QOwpA
QCAtMTQ1NSwxMSArMTQ1OSw2IEBAIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFz
ZUNyZWF0ZShjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9uJiBjb25maWd1CiAgICAgcmV0dXJu
IHdlYmtpdFdlYlZpZXdCYXNlOwogfQogCi1HdGtJTUNvbnRleHQqIHdlYmtpdFdlYlZpZXdCYXNl
R2V0SU1Db250ZXh0KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKLXsKLSAg
ICByZXR1cm4gd2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPmlucHV0TWV0aG9kRmlsdGVyLmNvbnRl
eHQoKTsKLX0KLQogV2ViUGFnZVByb3h5KiB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV2ViS2l0
V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQogewogICAgIHJldHVybiB3ZWJraXRXZWJW
aWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKaW5kZXgg
YzZiZWQzZTMwYjMuLmY4NGEzYWI2NWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKQEAgLTM5LDcg
KzM5LDYgQEAKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKIAogV2ViS2l0V2ViVmlld0Jhc2Uq
IHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRlKGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mKTsK
LUd0a0lNQ29udGV4dCogd2Via2l0V2ViVmlld0Jhc2VHZXRJTUNvbnRleHQoV2ViS2l0V2ViVmll
d0Jhc2UqKTsKIFdlYktpdDo6V2ViUGFnZVByb3h5KiB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2Uo
V2ViS2l0V2ViVmlld0Jhc2UqKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDcmVhdGVXZWJQYWdl
KFdlYktpdFdlYlZpZXdCYXNlKiwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYpOwogdm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZVNldFRvb2x0aXBUZXh0KFdlYktpdFdlYlZpZXdCYXNlKiwgY29u
c3QgY2hhciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXgg
N2Y4OWZiOTc2YjkuLmQyZWUxOTQ1ZDczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAKQEAgLTgwMjksMjkgKzgwMjksMjEgQEAgUmVmUHRyPFZpZXdTbmFwc2hvdD4g
V2ViUGFnZVByb3h5Ojp0YWtlVmlld1NuYXBzaG90KCkKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
R1RLKQotdm9pZCBXZWJQYWdlUHJveHk6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4
dCwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxl
Y3Rpb25TdGFydCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRfdCByZXBsYWNlbWVudFJh
bmdlU3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQpCit2b2lkIFdlYlBhZ2VQcm94
eTo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8Q29tcG9zaXRpb25V
bmRlcmxpbmU+JiYgdW5kZXJsaW5lcywgY29uc3QgRWRpdGluZ1JhbmdlJiBzZWxlY3Rpb25SYW5n
ZSkKIHsKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBmaW5kIG91dCBob3cgdG8gcHJvcGVyIGhh
bmRsZSB0aGUgY3Jhc2hlcyBjYXNlLgogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNl
dENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25F
bmQsIHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgcmVwbGFjZW1lbnRSYW5nZUVuZCksIG1fd2ViUGFn
ZUlEKTsKKyAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q29tcG9zaXRp
b24odGV4dCwgV1RGTW92ZSh1bmRlcmxpbmVzKSwgc2VsZWN0aW9uUmFuZ2UpLCBtX3dlYlBhZ2VJ
RCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3Ry
aW5nJiBjb21wb3NpdGlvblN0cmluZywgaW50NjRfdCBzZWxlY3Rpb25TdGFydCwgaW50NjRfdCBz
ZWxlY3Rpb25MZW5ndGgpCit2b2lkIFdlYlBhZ2VQcm94eTo6Y29uZmlybUNvbXBvc2l0aW9uKGNv
bnN0IFN0cmluZyYgY29tcG9zaXRpb25TdHJpbmcpCiB7CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJv
Y2VzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6Q29uZmlybUNvbXBvc2l0aW9uKGNvbXBvc2l0aW9uU3RyaW5nLCBzZWxlY3Rpb25T
dGFydCwgc2VsZWN0aW9uTGVuZ3RoKSwgbV93ZWJQYWdlSUQpOwotfQotCi12b2lkIFdlYlBhZ2VQ
cm94eTo6Y2FuY2VsQ29tcG9zaXRpb24oKQotewotICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3Mo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkNhbmNlbENvbXBvc2l0aW9uKCksIG1fd2ViUGFnZUlEKTsKKyAgICBwcm9jZXNzKCkuc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6Q29uZmlybUNvbXBvc2l0aW9uKGNvbXBvc2l0aW9uU3RyaW5n
KSwgbV93ZWJQYWdlSUQpOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKEdUSykKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAwZWJmNzFiNmMwYi4uYmZlN2E2NGEwNWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC03NjUsOSArNzY1LDgg
QEAgcHVibGljOgogICAgIGJvb2wgdXBkYXRlTGF5b3V0Vmlld3BvcnRQYXJhbWV0ZXJzKGNvbnN0
IFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mKTsKIAogI2lmIFBMQVRGT1JNKEdU
SykKLSAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPFdl
YkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rp
b25TdGFydCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdl
U3RhcnQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQpOwotICAgIHZvaWQgY29uZmlybUNv
bXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29tcG9zaXRpb25TdHJpbmcsIGludDY0X3Qgc2VsZWN0
aW9uU3RhcnQsIGludDY0X3Qgc2VsZWN0aW9uTGVuZ3RoKTsKLSAgICB2b2lkIGNhbmNlbENvbXBv
c2l0aW9uKCk7CisgICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmLCBWZWN0b3I8
V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+JiYsIGNvbnN0IEVkaXRpbmdSYW5nZSYgc2Vs
ZWN0aW9uUmFuZ2UpOworICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYg
Y29tcG9zaXRpb25TdHJpbmcpOwogCiAgICAgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wg
ZW5hYmxlZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9JbnB1
dE1ldGhvZEZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvSW5wdXRNZXRo
b2RGaWx0ZXIuY3BwCmluZGV4IDQ4NDdlNjAyMTk0Li5mZTZhZjczYTcyOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuY3BwCkBAIC0yMyw3
ICsyMyw2IEBACiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0NvbXBvc2l0aW9uUmVzdWx0cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRWRpdG9yLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9HVW5pcXVlUHRyR3RrLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9J
bnRSZWN0Lmg+CkBAIC0xNDUsMTAgKzE0NCwxMiBAQCB2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpo
YW5kbGVLZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5KiBldmVudCwgY29uc3QgU3RyaW5nJiBzaQog
I2VuZGlmCiAKICAgICBpZiAobV9maWx0ZXJLZXlFdmVudENvbXBsZXRpb25IYW5kbGVyKSB7Ci0g
ICAgICAgIG1fZmlsdGVyS2V5RXZlbnRDb21wbGV0aW9uSGFuZGxlcihDb21wb3NpdGlvblJlc3Vs
dHMoc2ltcGxlU3RyaW5nKSwgZmFrZWQpOworICAgICAgICBtX2ZpbHRlcktleUV2ZW50Q29tcGxl
dGlvbkhhbmRsZXIoc2ltcGxlU3RyaW5nLCBFdmVudEhhbmRsZWRCeUlucHV0TWV0aG9kOjpObywg
ZmFrZWQpOwogICAgICAgICBtX2ZpbHRlcktleUV2ZW50Q29tcGxldGlvbkhhbmRsZXIgPSBudWxs
cHRyOwotICAgIH0gZWxzZQotICAgICAgICBtX3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCBD
b21wb3NpdGlvblJlc3VsdHMoc2ltcGxlU3RyaW5nKSwgZmFrZWQsIFZlY3RvcjxTdHJpbmc+KCkp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIGZha2VkRm9yQ29tcG9zaXRpb24gPSBmYWtl
ZCA9PSBJbnB1dE1ldGhvZEZpbHRlcjo6RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXMgPyBO
YXRpdmVXZWJLZXlib2FyZEV2ZW50OjpGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXMgOiBOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50OjpGYWtlZEZvckNvbXBvc2l0aW9uOjpObzsKKyAgICAgICAgbV9wYWdl
LT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQocmVpbnRlcnByZXRf
Y2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgc2ltcGxlU3RyaW5nLCBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50OjpIYW5kbGVkQnlJbnB1dE1ldGhvZDo6Tm8sIGZha2VkRm9yQ29tcG9zaXRpb24sIFZlY3Rv
cjxTdHJpbmc+KCkpKTsKKyAgICB9CiB9CiAKIHZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRs
ZUtleWJvYXJkRXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiBldmVudCwg
UmVzdWx0c1RvU2VuZCByZXN1bHRzVG9TZW5kLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gZmFr
ZWQpCkBAIC0xNjEsMTYgKzE2MiwxOSBAQCB2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVL
ZXlib2FyZEV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSogZQogI2VuZGlm
CiAKICAgICBpZiAobV9maWx0ZXJLZXlFdmVudENvbXBsZXRpb25IYW5kbGVyKSB7Ci0gICAgICAg
IG1fZmlsdGVyS2V5RXZlbnRDb21wbGV0aW9uSGFuZGxlcihDb21wb3NpdGlvblJlc3VsdHMoQ29t
cG9zaXRpb25SZXN1bHRzOjpXaWxsU2VuZENvbXBvc2l0aW9uUmVzdWx0c1Nvb24pLCBmYWtlZCk7
CisgICAgICAgIG1fZmlsdGVyS2V5RXZlbnRDb21wbGV0aW9uSGFuZGxlcih7IH0sIEV2ZW50SGFu
ZGxlZEJ5SW5wdXRNZXRob2Q6OlllcywgZmFrZWQpOwogICAgICAgICBtX2ZpbHRlcktleUV2ZW50
Q29tcGxldGlvbkhhbmRsZXIgPSBudWxscHRyOwotICAgIH0gZWxzZQotICAgICAgICBtX3BhZ2Ut
PmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChyZWludGVycHJldF9j
YXN0PEdka0V2ZW50Kj4oZXZlbnQpLCBDb21wb3NpdGlvblJlc3VsdHMoQ29tcG9zaXRpb25SZXN1
bHRzOjpXaWxsU2VuZENvbXBvc2l0aW9uUmVzdWx0c1Nvb24pLCBmYWtlZCwgVmVjdG9yPFN0cmlu
Zz4oKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8gZmFrZWRGb3JDb21wb3NpdGlvbiA9
IGZha2VkID09IElucHV0TWV0aG9kRmlsdGVyOjpFdmVudEZha2VkRm9yQ29tcG9zaXRpb246Olll
cyA/IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6OkZha2VkRm9yQ29tcG9zaXRpb246OlllcyA6IE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQ6OkZha2VkRm9yQ29tcG9zaXRpb246Ok5vOworICAgICAgICBt
X3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChyZWludGVy
cHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCB7IH0sIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6
OkhhbmRsZWRCeUlucHV0TWV0aG9kOjpZZXMsIGZha2VkRm9yQ29tcG9zaXRpb24sIFZlY3RvcjxT
dHJpbmc+KCkpKTsKKyAgICB9CisKICAgICBpZiAocmVzdWx0c1RvU2VuZCAmIENvbXBvc2l0aW9u
ICYmICFtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICBtX3BhZ2UtPmNv
bmZpcm1Db21wb3NpdGlvbihtX2NvbmZpcm1lZENvbXBvc2l0aW9uLCAtMSwgMCk7CisgICAgICAg
IG1fcGFnZS0+Y29uZmlybUNvbXBvc2l0aW9uKG1fY29uZmlybWVkQ29tcG9zaXRpb24pOwogCiAg
ICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBQcmVlZGl0ICYmICFtX3ByZWVkaXQuaXNOdWxsKCkpIHsK
ICAgICAgICAgbV9wYWdlLT5zZXRDb21wb3NpdGlvbihtX3ByZWVkaXQsIFZlY3RvcjxDb21wb3Np
dGlvblVuZGVybGluZT4geyBDb21wb3NpdGlvblVuZGVybGluZSgwLCBtX3ByZWVkaXQubGVuZ3Ro
KCksIENvbXBvc2l0aW9uVW5kZXJsaW5lQ29sb3I6OlRleHRDb2xvciwgQ29sb3IoQ29sb3I6OmJs
YWNrKSwgZmFsc2UpIH0sCi0gICAgICAgICAgICBtX2N1cnNvck9mZnNldCwgbV9jdXJzb3JPZmZz
ZXQsIDAgLyogcmVwbGFjZW1lbnQgc3RhcnQgKi8sIDAgLyogcmVwbGFjZW1lbnQgZW5kICovKTsK
KyAgICAgICAgICAgIEVkaXRpbmdSYW5nZShtX2N1cnNvck9mZnNldCwgMSkpOwogICAgIH0KIH0K
IApAQCAtMjY3LDcgKzI3MSw3IEBAIHZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6OmNvbmZpcm1Db21w
b3NpdGlvbigpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBtX3BhZ2UtPmNv
bmZpcm1Db21wb3NpdGlvbihtX2NvbmZpcm1lZENvbXBvc2l0aW9uLCAtMSwgMCk7CisgICAgbV9w
YWdlLT5jb25maXJtQ29tcG9zaXRpb24obV9jb25maXJtZWRDb21wb3NpdGlvbik7CiAgICAgbV9j
b25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwogfQogCkBAIC0yODEsNyArMjg1LDcgQEAg
dm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6dXBkYXRlUHJlZWRpdCgpCiAjZW5kaWYKICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHBhcnNlIHRoZSBQYW5nb0F0dHJMaXN0IHRoYXQgd2UgZ2V0IGZyb20g
dGhlIElNIGNvbnRleHQgaGVyZS4KICAgICBtX3BhZ2UtPnNldENvbXBvc2l0aW9uKG1fcHJlZWRp
dCwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB7IENvbXBvc2l0aW9uVW5kZXJsaW5lKDAs
IG1fcHJlZWRpdC5sZW5ndGgoKSwgQ29tcG9zaXRpb25VbmRlcmxpbmVDb2xvcjo6VGV4dENvbG9y
LCBDb2xvcihDb2xvcjo6YmxhY2spLCBmYWxzZSkgfSwKLSAgICAgICAgbV9jdXJzb3JPZmZzZXQs
IG1fY3Vyc29yT2Zmc2V0LCAwIC8qIHJlcGxhY2VtZW50IHN0YXJ0ICovLCAwIC8qIHJlcGxhY2Vt
ZW50IGVuZCAqLyk7CisgICAgICAgIEVkaXRpbmdSYW5nZShtX2N1cnNvck9mZnNldCwgMSkpOwog
ICAgIG1fcHJlZWRpdENoYW5nZWQgPSBmYWxzZTsKIH0KIApAQCAtMzQwLDcgKzM0NCw3IEBAIHZv
aWQgSW5wdXRNZXRob2RGaWx0ZXI6OmNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKQogICAgIH0K
ICNlbmRpZgogCi0gICAgbV9wYWdlLT5jb25maXJtQ29tcG9zaXRpb24oU3RyaW5nKCksIC0xLCAw
KTsKKyAgICBtX3BhZ2UtPmNvbmZpcm1Db21wb3NpdGlvbih7IH0pOwogICAgIG1fY29tcG9zaW5n
VGV4dEN1cnJlbnRseSA9IGZhbHNlOwogfQogCkBAIC0zNjgsMTQgKzM3MiwxNCBAQCB2b2lkIElu
cHV0TWV0aG9kRmlsdGVyOjpzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVu
dHMoUmVzdWx0c1RvU2VuZAogICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVu
dF9uZXcoR0RLX0tFWV9QUkVTUykpOwogICAgIGV2ZW50LT5rZXkudGltZSA9IEdES19DVVJSRU5U
X1RJTUU7CiAgICAgZXZlbnQtPmtleS5rZXl2YWwgPSBjb21wb3NpdGlvbkV2ZW50S2V5Q29kZTsK
LSAgICBoYW5kbGVLZXlib2FyZEV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cygmZXZlbnQtPmtl
eSwgcmVzdWx0c1RvU2VuZCwgRXZlbnRGYWtlZCk7CisgICAgaGFuZGxlS2V5Ym9hcmRFdmVudFdp
dGhDb21wb3NpdGlvblJlc3VsdHMoJmV2ZW50LT5rZXksIHJlc3VsdHNUb1NlbmQsIEV2ZW50RmFr
ZWRGb3JDb21wb3NpdGlvbjo6WWVzKTsKIAogICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBT
dHJpbmcoKTsKICAgICBpZiAocmVzdWx0c1RvU2VuZCAmIENvbXBvc2l0aW9uKQogICAgICAgICBt
X2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKIAogICAgIGV2ZW50LT50eXBlID0gR0RL
X0tFWV9SRUxFQVNFOwotICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoJmV2ZW50LT5rZXksIFN0cmlu
ZygpLCBFdmVudEZha2VkKTsKKyAgICBoYW5kbGVLZXlib2FyZEV2ZW50KCZldmVudC0+a2V5LCBT
dHJpbmcoKSwgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXMpOwogICAgIG1fanVzdFNlbnRG
YWtlS2V5VXAgPSB0cnVlOwogfQogCkBAIC00NTAsNyArNDU0LDcgQEAgdm9pZCBJbnB1dE1ldGhv
ZEZpbHRlcjo6bG9nSGFuZGxlS2V5Ym9hcmRFdmVudEZvclRlc3RpbmcoR2RrRXZlbnRLZXkqIGV2
ZW50LCBjb24KICAgICBndWludCBrZXl2YWw7CiAgICAgZ2RrX2V2ZW50X2dldF9rZXl2YWwocmVp
bnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgJmtleXZhbCk7CiAgICAgY29uc3QgY2hh
ciogZXZlbnRUeXBlID0gZ2RrX2V2ZW50X2dldF9ldmVudF90eXBlKHJlaW50ZXJwcmV0X2Nhc3Q8
R2RrRXZlbnQqPihldmVudCkpID09IEdES19LRVlfUkVMRUFTRSA/ICJyZWxlYXNlIiA6ICJwcmVz
cyI7Ci0gICAgY29uc3QgY2hhciogZmFrZWRTdHJpbmcgPSBmYWtlZCA9PSBFdmVudEZha2VkID8g
IiAoZmFrZWQpIiA6ICIiOworICAgIGNvbnN0IGNoYXIqIGZha2VkU3RyaW5nID0gZmFrZWQgPT0g
RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXMgPyAiIChmYWtlZCkiIDogIiI7CiAgICAgaWYg
KCFldmVudFN0cmluZy5pc051bGwoKSkKICAgICAgICAgbV9ldmVudHMuYXBwZW5kKG1ha2VTdHJp
bmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPSIsIGV2ZW50VHlwZSwgIiBrZXljb2RlPSIsIGhl
eChrZXl2YWwpLCAiIHRleHQ9JyIsIGV2ZW50U3RyaW5nLCAnXCcnLCBmYWtlZFN0cmluZykpOwog
ICAgIGVsc2UKQEAgLTQ2Miw3ICs0NjYsNyBAQCB2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpsb2dI
YW5kbGVLZXlib2FyZEV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0c0ZvclRlc3RpbmcoRwogICAg
IGd1aW50IGtleXZhbDsKICAgICBnZGtfZXZlbnRfZ2V0X2tleXZhbChyZWludGVycHJldF9jYXN0
PEdka0V2ZW50Kj4oZXZlbnQpLCAma2V5dmFsKTsKICAgICBjb25zdCBjaGFyKiBldmVudFR5cGUg
PSBnZGtfZXZlbnRfZ2V0X2V2ZW50X3R5cGUocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2
ZW50KSkgPT0gR0RLX0tFWV9SRUxFQVNFID8gInJlbGVhc2UiIDogInByZXNzIjsKLSAgICBjb25z
dCBjaGFyKiBmYWtlZFN0cmluZyA9IGZha2VkID09IEV2ZW50RmFrZWQgPyAiIChmYWtlZCkiIDog
IiI7CisgICAgY29uc3QgY2hhciogZmFrZWRTdHJpbmcgPSBmYWtlZCA9PSBFdmVudEZha2VkRm9y
Q29tcG9zaXRpb246OlllcyA/ICIgKGZha2VkKSIgOiAiIjsKICAgICBtX2V2ZW50cy5hcHBlbmQo
bWFrZVN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPSIsIGV2
ZW50VHlwZSwgIiBrZXljb2RlPSIsIGhleChrZXl2YWwpLCBmYWtlZFN0cmluZykpOwogCiAgICAg
aWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbiAmJiAhbV9jb25maXJtZWRDb21wb3NpdGlv
bi5pc051bGwoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9JbnB1
dE1ldGhvZEZpbHRlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9k
RmlsdGVyLmgKaW5kZXggMmE0YWY2YWMwM2MuLmFmYTY0OTc0YTAyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuaApAQCAtMTcsOCArMTcsNyBA
QAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBJbnB1dE1l
dGhvZEZpbHRlcl9oCi0jZGVmaW5lIElucHV0TWV0aG9kRmlsdGVyX2gKKyNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5o
PgpAQCAtMzAsNyArMjksNiBAQCB0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRL
ZXk7CiB0eXBlZGVmIHN0cnVjdCBfR3RrSU1Db250ZXh0IEd0a0lNQ29udGV4dDsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotc3RydWN0IENvbXBvc2l0aW9uUmVzdWx0czsKIGNsYXNzIEludFJlY3Q7
CiB9CiAKQEAgLTQxLDkgKzM5LDEzIEBAIGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNsYXNzIElucHV0
TWV0aG9kRmlsdGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnB1dE1ldGhvZEZpbHRl
cik7CiBwdWJsaWM6Ci0gICAgZW51bSBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gewotICAgICAg
ICBFdmVudEZha2VkLAotICAgICAgICBFdmVudE5vdEZha2VkCisgICAgZW51bSBjbGFzcyBFdmVu
dEZha2VkRm9yQ29tcG9zaXRpb24geworICAgICAgICBObywKKyAgICAgICAgWWVzCisgICAgfTsK
KyAgICBlbnVtIGNsYXNzIEV2ZW50SGFuZGxlZEJ5SW5wdXRNZXRob2QgeworICAgICAgICBObywK
KyAgICAgICAgWWVzCiAgICAgfTsKIAogICAgIElucHV0TWV0aG9kRmlsdGVyKCk7CkBAIC01Niw3
ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CiAgICAgdm9pZCBz
ZXRDdXJzb3JSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKIAotICAgIHVzaW5nIEZpbHRl
cktleUV2ZW50Q29tcGxldGlvbkhhbmRsZXIgPSBGdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6
OkNvbXBvc2l0aW9uUmVzdWx0cyYsIElucHV0TWV0aG9kRmlsdGVyOjpFdmVudEZha2VkRm9yQ29t
cG9zaXRpb24pPjsKKyAgICB1c2luZyBGaWx0ZXJLZXlFdmVudENvbXBsZXRpb25IYW5kbGVyID0g
RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmLCBFdmVudEhhbmRsZWRCeUlucHV0TWV0aG9kLCBF
dmVudEZha2VkRm9yQ29tcG9zaXRpb24pPjsKICAgICB2b2lkIGZpbHRlcktleUV2ZW50KEdka0V2
ZW50S2V5KiwgRmlsdGVyS2V5RXZlbnRDb21wbGV0aW9uSGFuZGxlciYmID0gbnVsbHB0cik7CiAg
ICAgdm9pZCBub3RpZnlGb2N1c2VkSW4oKTsKICAgICB2b2lkIG5vdGlmeUZvY3VzZWRPdXQoKTsK
QEAgLTg0LDggKzg2LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZVByZWVkaXRTdGFydCgp
OwogICAgIHZvaWQgaGFuZGxlUHJlZWRpdEVuZCgpOwogCi0gICAgdm9pZCBoYW5kbGVLZXlib2Fy
ZEV2ZW50KEdka0V2ZW50S2V5KiwgY29uc3QgU3RyaW5nJiBldmVudFN0cmluZyA9IFN0cmluZygp
LCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gPSBFdmVudE5vdEZha2VkKTsKLSAgICB2b2lkIGhh
bmRsZUtleWJvYXJkRXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiwgUmVz
dWx0c1RvU2VuZCA9IFByZWVkaXRBbmRDb21wb3NpdGlvbiwgRXZlbnRGYWtlZEZvckNvbXBvc2l0
aW9uID0gRXZlbnROb3RGYWtlZCk7CisgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEdka0V2
ZW50S2V5KiwgY29uc3QgU3RyaW5nJiBldmVudFN0cmluZyA9IFN0cmluZygpLCBFdmVudEZha2Vk
Rm9yQ29tcG9zaXRpb24gPSBFdmVudEZha2VkRm9yQ29tcG9zaXRpb246Ok5vKTsKKyAgICB2b2lk
IGhhbmRsZUtleWJvYXJkRXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5Kiwg
UmVzdWx0c1RvU2VuZCA9IFByZWVkaXRBbmRDb21wb3NpdGlvbiwgRXZlbnRGYWtlZEZvckNvbXBv
c2l0aW9uID0gRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uOjpObyk7CiAKICAgICB2b2lkIHNlbmRD
b21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50cyhSZXN1bHRzVG9TZW5kKTsKICAg
ICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbigpOwpAQCAtMTI2LDQgKzEyOCwzIEBAIHByaXZhdGU6
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLy8gSW5wdXRNZXRob2RGaWx0ZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA5
OGQ1MmIwMzU4ZC4uNzFlMWRmMzkwYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC01Mjg0LDkgKzUyODQsOSBAQCB2b2lkIFdlYlBhZ2U6OmNv
bmZpcm1Db21wb3NpdGlvbkFzeW5jKCkKICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKIAogI2lm
IFBMQVRGT1JNKEdUSykKLXN0YXRpYyBGcmFtZSogdGFyZ2V0RnJhbWVGb3JFZGl0aW5nKFdlYlBh
Z2UqIHBhZ2UpCitzdGF0aWMgRnJhbWUqIHRhcmdldEZyYW1lRm9yRWRpdGluZyhXZWJQYWdlJiBw
YWdlKQogewotICAgIEZyYW1lJiB0YXJnZXRGcmFtZSA9IHBhZ2UtPmNvcmVQYWdlKCktPmZvY3Vz
Q29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIEZyYW1lJiB0YXJnZXRGcmFt
ZSA9IHBhZ2UuY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCk7CiAKICAgICBFZGl0b3ImIGVkaXRvciA9IHRhcmdldEZyYW1lLmVkaXRvcigpOwogICAgIGlm
ICghZWRpdG9yLmNhbkVkaXQoKSkKQEAgLTUzMDUsNjIgKzUzMDUsMjAgQEAgc3RhdGljIEZyYW1l
KiB0YXJnZXRGcmFtZUZvckVkaXRpbmcoV2ViUGFnZSogcGFnZSkKICAgICByZXR1cm4gJnRhcmdl
dEZyYW1lOwogfQogCi12b2lkIFdlYlBhZ2U6OmNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJp
bmcmIGNvbXBvc2l0aW9uU3RyaW5nLCBpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCBpbnQ2NF90IHNl
bGVjdGlvbkxlbmd0aCkKK3ZvaWQgV2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0
cmluZyYgY29tcG9zaXRpb25TdHJpbmcpCiB7Ci0gICAgRnJhbWUqIHRhcmdldEZyYW1lID0gdGFy
Z2V0RnJhbWVGb3JFZGl0aW5nKHRoaXMpOwotICAgIGlmICghdGFyZ2V0RnJhbWUpIHsKLSAgICAg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFZGl0b3JTdGF0ZUNoYW5nZWQoZWRpdG9y
U3RhdGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdGFyZ2V0RnJhbWUtPmVk
aXRvcigpLmNvbmZpcm1Db21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZyk7Ci0KLSAgICBpZiAo
c2VsZWN0aW9uU3RhcnQgPT0gLTEpIHsKLSAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpFZGl0b3JTdGF0ZUNoYW5nZWQoZWRpdG9yU3RhdGUoKSkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgRWxlbWVudCogc2NvcGUgPSB0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0aW9uUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHNj
b3BlLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uTGVuZ3RoKTsKLSAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKHNlbGVjdGlvblJhbmdlLCAiSW52YWxpZCBzZWxlY3Rpb246IFslbGxkOiVsbGRdIGlu
IHRleHQgb2YgbGVuZ3RoICVkIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihzZWxlY3Rpb25TdGFy
dCksIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oc2VsZWN0aW9uTGVuZ3RoKSwgc2NvcGUtPmlubmVy
VGV4dCgpLmxlbmd0aCgpKTsKLQotICAgIGlmIChzZWxlY3Rpb25SYW5nZSkgewotICAgICAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbigqc2VsZWN0aW9uUmFuZ2UsIFNFTF9ERUZBVUxUX0FG
RklOSVRZKTsKLSAgICAgICAgdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihz
ZWxlY3Rpb24pOwotICAgIH0KLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkVkaXRv
clN0YXRlQ2hhbmdlZChlZGl0b3JTdGF0ZSgpKSk7CisgICAgaWYgKGF1dG8qIHRhcmdldEZyYW1l
ID0gdGFyZ2V0RnJhbWVGb3JFZGl0aW5nKCp0aGlzKSkKKyAgICAgICAgdGFyZ2V0RnJhbWUtPmVk
aXRvcigpLmNvbmZpcm1Db21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZyk7CiB9CiAKLXZvaWQg
V2ViUGFnZTo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8
Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFy
dCwgdWludDY0X3Qgc2VsZWN0aW9uTGVuZ3RoLCB1aW50NjRfdCByZXBsYWNlbWVudFN0YXJ0LCB1
aW50NjRfdCByZXBsYWNlbWVudExlbmd0aCkKK3ZvaWQgV2ViUGFnZTo6c2V0Q29tcG9zaXRpb24o
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1
bmRlcmxpbmVzLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHNlbGVjdGlvblJhbmdlKQogewotICAgIEZy
YW1lKiB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRm9yRWRpdGluZyh0aGlzKTsKLSAgICBpZiAo
IXRhcmdldEZyYW1lIHx8ICF0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50RWRpdGFibGUoKSkgewotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkVkaXRvclN0YXRlQ2hhbmdlZChlZGl0b3JTdGF0ZSgpKSk7CisgICAgRnJhbWUqIHRhcmdldEZy
YW1lID0gdGFyZ2V0RnJhbWVGb3JFZGl0aW5nKCp0aGlzKTsKKyAgICBpZiAoIXRhcmdldEZyYW1l
IHx8ICF0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFi
bGUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KCp0YXJnZXRGcmFtZSk7Ci0KLSAgICBpZiAocmVwbGFjZW1lbnRMZW5ndGggPiAwKSB7Ci0gICAg
ICAgIC8vIFRoZSBsYXlvdXQgbmVlZHMgdG8gYmUgdXB0b2RhdGUgYmVmb3JlIHNldHRpbmcgYSBz
ZWxlY3Rpb24KLSAgICAgICAgdGFyZ2V0RnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgp
OwotCi0gICAgICAgIEVsZW1lbnQqIHNjb3BlID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBy
ZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0
aChzY29wZSwgcmVwbGFjZW1lbnRTdGFydCwgcmVwbGFjZW1lbnRMZW5ndGgpOwotICAgICAgICB0
YXJnZXRGcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyh0cnVlKTsKLSAg
ICAgICAgdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKCpyZXBsYWNlbWVudFJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwotICAgICAgICB0
YXJnZXRGcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxzZSk7Ci0g
ICAgfQotCi0gICAgdGFyZ2V0RnJhbWUtPmVkaXRvcigpLnNldENvbXBvc2l0aW9uKHRleHQsIHVu
ZGVybGluZXMsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25TdGFydCArIHNlbGVjdGlvbkxlbmd0
aCk7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFZGl0b3JTdGF0ZUNoYW5nZWQo
ZWRpdG9yU3RhdGUoKSkpOwotfQotCi12b2lkIFdlYlBhZ2U6OmNhbmNlbENvbXBvc2l0aW9uKCkK
LXsKLSAgICBpZiAoRnJhbWUqIHRhcmdldEZyYW1lID0gdGFyZ2V0RnJhbWVGb3JFZGl0aW5nKHRo
aXMpKQotICAgICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuY2FuY2VsQ29tcG9zaXRpb24oKTsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkVkaXRvclN0YXRlQ2hhbmdlZChlZGl0
b3JTdGF0ZSgpKSk7CisgICAgdGFyZ2V0RnJhbWUtPmVkaXRvcigpLnNldENvbXBvc2l0aW9uKHRl
eHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblJhbmdlLmxvY2F0aW9uLCBzZWxlY3Rpb25SYW5nZS5s
b2NhdGlvbiArIHNlbGVjdGlvblJhbmdlLmxlbmd0aCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDIyYjM4NzU3MjBiLi43ZTEw
M2IzOTgxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApA
QCAtNzY5LDkgKzc2OSw4IEBAIHB1YmxpYzoKICAgICBTYW5kYm94RXh0ZW5zaW9uVHJhY2tlciYg
c2FuZGJveEV4dGVuc2lvblRyYWNrZXIoKSB7IHJldHVybiBtX3NhbmRib3hFeHRlbnNpb25UcmFj
a2VyOyB9CiAKICNpZiBQTEFURk9STShHVEspCi0gICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGlu
ZT4mIHVuZGVybGluZXMsIHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rp
b25FbmQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1l
bnRSYW5nZUxlbmd0aCk7Ci0gICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCBpbnQ2NF90IHNlbGVjdGlvbkxlbmd0aCk7
Ci0gICAgdm9pZCBjYW5jZWxDb21wb3NpdGlvbigpOworICAgIHZvaWQgc2V0Q29tcG9zaXRpb24o
Y29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5l
PiYsIGNvbnN0IEVkaXRpbmdSYW5nZSYgc2VsZWN0aW9uUmFuZ2UpOworICAgIHZvaWQgY29uZmly
bUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKICAgICB2b2lkIGNvbGxhcHNlU2Vs
ZWN0aW9uSW5GcmFtZShXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2hvd0Vt
b2ppUGlja2VyKFdlYkNvcmU6OkZyYW1lJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCBmNmMwMjY0MTIwOC4uMzk2
OGMxMTFmMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtNDExLDkgKzQxMSw4IEBAIEdlbmVyYXRlU3ludGhldGlj
RWRpdGluZ0NvbW1hbmQoZW51bTp1aW50OF90IFdlYktpdDo6U3ludGhldGljRWRpdGluZ0NvbW1h
bmRUeXBlCiAgICAgU2V0Q2FuUnVuTW9kYWwoYm9vbCBjYW5SdW5Nb2RhbCkKIAogI2lmIFBMQVRG
T1JNKEdUSykKLSAgICBTZXRDb21wb3NpdGlvbihTdHJpbmcgdGV4dCwgVmVjdG9yPFdlYkNvcmU6
OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFy
dCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQs
IHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQpCi0gICAgQ29uZmlybUNvbXBvc2l0aW9uKFN0
cmluZyB0ZXh0LCBpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCBpbnQ2NF90IHNlbGVjdGlvbkxlbmd0
aCkKLSAgICBDYW5jZWxDb21wb3NpdGlvbigpCisgICAgU2V0Q29tcG9zaXRpb24oU3RyaW5nIHRl
eHQsIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgc3Ry
dWN0IFdlYktpdDo6RWRpdGluZ1JhbmdlIHNlbGVjdGlvblJhbmdlKQorICAgIENvbmZpcm1Db21w
b3NpdGlvbihTdHJpbmcgdGV4dCkKIAogICAgIENvbGxhcHNlU2VsZWN0aW9uSW5GcmFtZShXZWJD
b3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCkKIAo=
</data>
<flag name="review"
          id="397048"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382051</attachid>
            <date>2019-10-28 02:15:50 -0700</date>
            <delta_ts>2019-10-28 02:15:50 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wk2-simply-ime.diff</filename>
            <type>text/plain</type>
            <size>42212</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkOTE3Yjc2ODAyNi4uYjU3YTU4YzcwZjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAxOS0xMC0yOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gU2ltcGxpZnkgdGhlIElucHV0IE1ldGhvZCBpbXBs
ZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjAzMTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRyaWFuIFBlcmV6IGRlIENhc3Ryby4K
KworICAgICAgICBSZW1vdmUgQ29tcG9zaXRpb25SZXN1bHRzIGFuZCByZW1vdmUgZGVhZCBjb2Rl
IGluIFBsYXRmb3JtS2V5Ym9hcmRFdmVudEd0ay4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNt
YWtlOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9Db21wb3NpdGlvblJlc3VsdHMuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6ZGlzYW1iaWd1YXRlS2V5RG93
bkV2ZW50KToKKwogMjAxOS0xMC0yNyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29t
PgogCiAgICAgICAgIFtXZWIgQW5pbWF0aW9uc10gZ2V0S2V5ZnJhbWVzKCkgZG9lc24ndCByZXR1
cm4gdGhlIHJpZ2h0IHRpbWluZyBmdW5jdGlvbiBmb3IgZGVjbGFyYXRpdmUgYW5pbWF0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCAyZjBkYTViNzZjZS4uNzg3ZjQ5Y2NlMDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC00OCw3ICs0OCw2IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3gx
MS9YVW5pcXVlUHRyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy94MTEvWFVuaXF1ZVJlc291cmNl
LmgKIAotICAgIHBsYXRmb3JtL2d0ay9Db21wb3NpdGlvblJlc3VsdHMuaAogICAgIHBsYXRmb3Jt
L2d0ay9HUmVmUHRyR3RrLmgKICAgICBwbGF0Zm9ybS9ndGsvR1VuaXF1ZVB0ckd0ay5oCiAgICAg
cGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCmluZGV4IDFhMzg2Y2M2ZDQ0Li40YWFmNWJkZTMyYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgK
QEAgLTQwLDExICs0MCw2IEBAIE9CSkNfQ0xBU1MgTlNFdmVudDsKIE9CSkNfQ0xBU1MgV2ViRXZl
bnQ7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEdUSykKLXR5cGVkZWYgc3RydWN0IF9HZGtFdmVu
dEtleSBHZGtFdmVudEtleTsKLSNpbmNsdWRlICJDb21wb3NpdGlvblJlc3VsdHMuaCIKLSNlbmRp
ZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQgOiBwdWJsaWMgUGxhdGZvcm1FdmVudCB7CkBAIC01Niw5ICs1MSw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9hdXRvUmVwZWF0KGZhbHNlKQogICAgICAgICAgICAg
LCBtX2lzS2V5cGFkKGZhbHNlKQogICAgICAgICAgICAgLCBtX2lzU3lzdGVtS2V5KGZhbHNlKQot
I2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgICAgICwgbV9nZGtFdmVudEtleSgwKQotI2VuZGlm
CiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xNTAsMTAgKzE0Miw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQotICAgICAgICBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqLCBjb25zdCBDb21wb3NpdGlvblJlc3VsdHMmKTsKLSAg
ICAgICAgR2RrRXZlbnRLZXkqIGdka0V2ZW50S2V5KCkgY29uc3QgeyByZXR1cm4gbV9nZGtFdmVu
dEtleTsgfQotICAgICAgICBjb25zdCBDb21wb3NpdGlvblJlc3VsdHMmIGNvbXBvc2l0aW9uUmVz
dWx0cygpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRpb25SZXN1bHRzOyB9Ci0KICAgICAgICAg
Ly8gVXNlZCBieSBXZWJLaXQyCiAgICAgICAgIHN0YXRpYyBTdHJpbmcga2V5VmFsdWVGb3JHZGtL
ZXlDb2RlKHVuc2lnbmVkKTsKICAgICAgICAgc3RhdGljIFN0cmluZyBrZXlDb2RlRm9ySGFyZHdh
cmVLZXlDb2RlKHVuc2lnbmVkKTsKQEAgLTIwMywxMSArMTkxLDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBSZXRhaW5QdHI8OjpXZWJFdmVudD4gbV9FdmVudDsKICNlbmRpZgogI2Vu
ZGlmCi0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICBHZGtFdmVudEtleSogbV9nZGtFdmVudEtl
eTsKLSAgICAgICAgQ29tcG9zaXRpb25SZXN1bHRzIG1fY29tcG9zaXRpb25SZXN1bHRzOwotI2Vu
ZGlmCi0gICAgICAgIAogICAgICAgICAvLyBUaGUgbW9kaWZpZXIgc3RhdGUgaXMgb3B0aW9uYWws
IHNpbmNlIGl0IGlzIG5vdCBuZWVkZWQgaW4gdGhlIFVJIHByb2Nlc3Mgb3IgaW4gbGVnYWN5IFdl
YktpdC4KICAgICAgICAgc3RhdGljIE9wdGlvbmFsPE9wdGlvblNldDxNb2RpZmllcj4+IHNfY3Vy
cmVudE1vZGlmaWVyczsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0NvbXBvc2l0aW9uUmVzdWx0cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0NvbXBvc2l0aW9uUmVzdWx0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDM2
Y2MzNmEzYi4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Nv
bXBvc2l0aW9uUmVzdWx0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDb21wb3NpdGlvblJlc3VsdHNfaAotI2RlZmlu
ZSBDb21wb3NpdGlvblJlc3VsdHNfaAotCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IENvbXBvc2l0aW9uUmVzdWx0cyB7Ci0g
ICAgQ29tcG9zaXRpb25SZXN1bHRzKCkKLSAgICAgICAgOiBhc3NvY2lhdGVkV2l0aFBlbmRpbmdD
b21wb3NpdGlvblVwZGF0ZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgQ29tcG9zaXRpb25S
ZXN1bHRzKFN0cmluZyBzaW1wbGVTdHJpbmcpCi0gICAgICAgIDogc2ltcGxlU3RyaW5nKHNpbXBs
ZVN0cmluZykKLSAgICAgICAgLCBhc3NvY2lhdGVkV2l0aFBlbmRpbmdDb21wb3NpdGlvblVwZGF0
ZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgZW51bSBSZXN1bHRzSW5kaWNhdG9yIHsgV2ls
bFNlbmRDb21wb3NpdGlvblJlc3VsdHNTb29uIH07Ci0gICAgQ29tcG9zaXRpb25SZXN1bHRzKFJl
c3VsdHNJbmRpY2F0b3IpCi0gICAgICAgIDogYXNzb2NpYXRlZFdpdGhQZW5kaW5nQ29tcG9zaXRp
b25VcGRhdGUodHJ1ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBjb21wb3NpdGlvblVwZGF0
ZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGFzc29jaWF0ZWRXaXRoUGVuZGluZ0Nv
bXBvc2l0aW9uVXBkYXRlOwotICAgIH0KLQotICAgIC8vIFNvbWUgc2ltcGxlIGlucHV0IG1ldGhv
ZHMgcmV0dXJuIGEgc3RyaW5nIGZvciBhbGwga2V5Ym9hcmQgZXZlbnRzLiBUaGlzCi0gICAgLy8g
dmFsdWUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0
aGUga2V5Y29kZS4KLSAgICBTdHJpbmcgc2ltcGxlU3RyaW5nOwotCi0gICAgYm9vbCBhc3NvY2lh
dGVkV2l0aFBlbmRpbmdDb21wb3NpdGlvblVwZGF0ZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIENv
bXBvc2l0aW9uUmVzdWx0c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUGxhdGZvcm1LZXlib2FyZEV2ZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9QbGF0Zm9ybUtleWJvYXJkRXZlbnRHdGsuY3BwCmluZGV4IDVjNTJkZmRhMzgwLi4zNTZi
MDlmMmZiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3Jt
S2V5Ym9hcmRFdmVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bs
YXRmb3JtS2V5Ym9hcmRFdmVudEd0ay5jcHAKQEAgLTEzMjEsNTkgKzEzMjEsNiBAQCBTdHJpbmcg
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodW5zaWduZWQgdmFs
KQogICAgIH0KIH0KIAotc3RhdGljIFBsYXRmb3JtRXZlbnQ6OlR5cGUgZXZlbnRUeXBlRm9yR2Rr
S2V5RXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50KQotewotICAgIHJldHVybiBnZGtfZXZlbnRfZ2V0
X2V2ZW50X3R5cGUocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSkgPT0gR0RLX0tF
WV9SRUxFQVNFID8gUGxhdGZvcm1FdmVudDo6S2V5VXAgOiBQbGF0Zm9ybUV2ZW50OjpLZXlEb3du
OwotfQotCi1zdGF0aWMgT3B0aW9uU2V0PFBsYXRmb3JtRXZlbnQ6Ok1vZGlmaWVyPiBtb2RpZmll
cnNGb3JHZGtLZXlFdmVudChHZGtFdmVudEtleSogZXZlbnQpCi17Ci0gICAgR2RrTW9kaWZpZXJU
eXBlIHN0YXRlOwotICAgIGdka19ldmVudF9nZXRfc3RhdGUocmVpbnRlcnByZXRfY2FzdDxHZGtF
dmVudCo+KGV2ZW50KSwgJnN0YXRlKTsKLSAgICBndWludCBrZXl2YWw7Ci0gICAgZ2RrX2V2ZW50
X2dldF9rZXl2YWwocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgJmtleXZhbCk7
Ci0KLSAgICBPcHRpb25TZXQ8UGxhdGZvcm1FdmVudDo6TW9kaWZpZXI+IG1vZGlmaWVyczsKLSAg
ICBpZiAoc3RhdGUgJiBHREtfU0hJRlRfTUFTSyB8fCBrZXl2YWwgPT0gR0RLX0tFWV8zMjcwX0Jh
Y2tUYWIpCi0gICAgICAgIG1vZGlmaWVycy5hZGQoUGxhdGZvcm1FdmVudDo6TW9kaWZpZXI6OlNo
aWZ0S2V5KTsKLSAgICBpZiAoc3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLKQotICAgICAgICBtb2Rp
ZmllcnMuYWRkKFBsYXRmb3JtRXZlbnQ6Ok1vZGlmaWVyOjpDb250cm9sS2V5KTsKLSAgICBpZiAo
c3RhdGUgJiBHREtfTU9EMV9NQVNLKQotICAgICAgICBtb2RpZmllcnMuYWRkKFBsYXRmb3JtRXZl
bnQ6Ok1vZGlmaWVyOjpBbHRLZXkpOwotICAgIGlmIChzdGF0ZSAmIEdES19NRVRBX01BU0spCi0g
ICAgICAgIG1vZGlmaWVycy5hZGQoUGxhdGZvcm1FdmVudDo6TW9kaWZpZXI6Ok1ldGFLZXkpOwot
ICAgIGlmIChzdGF0ZSAmIEdES19MT0NLX01BU0spCi0gICAgICAgIG1vZGlmaWVycy5hZGQoUGxh
dGZvcm1FdmVudDo6TW9kaWZpZXI6OkNhcHNMb2NrS2V5KTsKLSAgICByZXR1cm4gbW9kaWZpZXJz
OwotfQotCi0vLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSBvdGhlciBwbGF0Zm9ybSBldmVu
dCBjb25zdHJ1Y3RvcnMKLVBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2
ZW50KEdka0V2ZW50S2V5KiBldmVudCwgY29uc3QgQ29tcG9zaXRpb25SZXN1bHRzJiBjb21wb3Np
dGlvblJlc3VsdHMpCi0gICAgOiBQbGF0Zm9ybUV2ZW50KGV2ZW50VHlwZUZvckdka0tleUV2ZW50
KGV2ZW50KSwgbW9kaWZpZXJzRm9yR2RrS2V5RXZlbnQoZXZlbnQpLCB3YWxsVGltZUZvckV2ZW50
KGV2ZW50KSkKLSAgICAsIG1faGFuZGxlZEJ5SW5wdXRNZXRob2QoZmFsc2UpCi0gICAgLCBtX2F1
dG9SZXBlYXQoZmFsc2UpCi0gICAgLCBtX2lzU3lzdGVtS2V5KGZhbHNlKQotICAgICwgbV9nZGtF
dmVudEtleShldmVudCkKLSAgICAsIG1fY29tcG9zaXRpb25SZXN1bHRzKGNvbXBvc2l0aW9uUmVz
dWx0cykKLXsKLSAgICBndWludCBrZXl2YWw7Ci0gICAgZ2RrX2V2ZW50X2dldF9rZXl2YWwocmVp
bnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgJmtleXZhbCk7Ci0gICAgZ3VpbnQxNiBr
ZXljb2RlOwotICAgIGdka19ldmVudF9nZXRfa2V5Y29kZShyZWludGVycHJldF9jYXN0PEdka0V2
ZW50Kj4oZXZlbnQpLCAma2V5Y29kZSk7Ci0KLSAgICBtX3RleHQgPSBjb21wb3NpdGlvblJlc3Vs
dHMuc2ltcGxlU3RyaW5nLmxlbmd0aCgpID8gY29tcG9zaXRpb25SZXN1bHRzLnNpbXBsZVN0cmlu
ZyA6IHNpbmdsZUNoYXJhY3RlclN0cmluZyhrZXl2YWwpOwotICAgIG1fdW5tb2RpZmllZFRleHQg
PSBtX3RleHQ7Ci0gICAgbV9rZXkgPSBrZXlWYWx1ZUZvckdka0tleUNvZGUoa2V5dmFsKTsKLSAg
ICBtX2NvZGUgPSBrZXlDb2RlRm9ySGFyZHdhcmVLZXlDb2RlKGtleWNvZGUpOwotICAgIG1fa2V5
SWRlbnRpZmllciA9IGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGtleXZhbCk7Ci0gICAgbV93
aW5kb3dzVmlydHVhbEtleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvckdka0tleUNvZGUoa2V5dmFs
KTsKLSAgICBtX2lzS2V5cGFkID0ga2V5dmFsID49IEdES19LRVlfS1BfU3BhY2UgJiYga2V5dmFs
IDw9IEdES19LRVlfS1BfOTsKLQotICAgIC8vIFRvIG1hdGNoIHRoZSBiZWhhdmlvciBvZiBJRSwg
d2UgcmV0dXJuIFZLX1BST0NFU1NLRVkgZm9yIGtleXMgdGhhdCB0cmlnZ2VyZWQgY29tcG9zaXRp
b24gcmVzdWx0cy4KLSAgICBpZiAoY29tcG9zaXRpb25SZXN1bHRzLmNvbXBvc2l0aW9uVXBkYXRl
ZCgpKQotICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IFZLX1BST0NFU1NLRVk7Ci19
Ci0KIHZvaWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQo
VHlwZSB0eXBlLCBib29sIGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpCiB7CiAgICAgLy8gQ2Fu
IG9ubHkgY2hhbmdlIHR5cGUgZnJvbSBLZXlEb3duIHRvIFJhd0tleURvd24gb3IgQ2hhciwgYXMg
d2UgbGFjayBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgY29udmVyc2lvbnMuCkBAIC0xMzg2LDcgKzEz
MzMsNyBAQCB2b2lkIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6ZGlzYW1iaWd1YXRlS2V5RG93bkV2
ZW50KFR5cGUgdHlwZSwgYm9vbCBiYWNrd2FyZENvbQogICAgIGlmICh0eXBlID09IFBsYXRmb3Jt
RXZlbnQ6OlJhd0tleURvd24pIHsKICAgICAgICAgbV90ZXh0ID0gU3RyaW5nKCk7CiAgICAgICAg
IG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gUGxh
dGZvcm1FdmVudDo6Q2hhciAmJiBtX2NvbXBvc2l0aW9uUmVzdWx0cy5jb21wb3NpdGlvblVwZGF0
ZWQoKSkgeworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBQbGF0Zm9ybUV2ZW50OjpDaGFyICYmIG1f
aGFuZGxlZEJ5SW5wdXRNZXRob2QpIHsKICAgICAgICAgLy8gSGF2aW5nIGVtcHR5IHRleHQsIHBy
ZXZlbnRzIHRoaXMgQ2hhciAod2hpY2ggaXMgYSBET00ga2V5cHJlc3MpIGV2ZW50CiAgICAgICAg
IC8vIGZyb20gZ29pbmcgdG8gdGhlIERPTS4gS2V5cyB0aGF0IHRyaWdnZXIgY29tcG9zaXRpb24g
ZXZlbnRzIHNob3VsZCBub3QKICAgICAgICAgLy8gZmlyZSBrZXlwcmVzcy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
ODc0NWZkZjIzNTIuLmM3NzU4NGM5ZjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDE5
LTEwLTI4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbR1RLXSBTaW1wbGlmeSB0aGUgSW5wdXQgTWV0aG9kIGltcGxlbWVudGF0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMxNDkKKworICAg
ICAgICBSZXZpZXdlZCBieSBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvLgorCisgICAgICAgICogU2hh
cmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaDogU3RvcCB1c2luZyBXZWJDb3JlOjpDb21wb3Np
dGlvblJlc3VsdHMuCisgICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6OnRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpoYW5k
bGVkQnlJbnB1dE1ldGhvZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYktleWJv
YXJkRXZlbnQ6OmZha2VkRm9yQ29tcG9zaXRpb24gY29uc3QpOgorICAgICAgICAqIFNoYXJlZC9n
dGsvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudEd0ay5jcHA6IERpdHRvLgorICAgICAgICAoV2ViS2l0
OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50KToKKyAgICAg
ICAgKiBTaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudCk6IERpdHRvLgorICAgICAgICAq
IFNoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
ZG9uZVdpdGhLZXlFdmVudCk6IFVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgbmFtZS4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6IFN0b3AgdXNpbmcgV2Vi
Q29yZTo6Q29tcG9zaXRpb25SZXN1bHRzLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VLZXlQ
cmVzc0V2ZW50KToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlS2V5UmVsZWFzZUV2ZW50KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaDog
UmVtb3ZlIHVudXNlZCBmdW5jdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRDb21wb3NpdGlvbik6IFVz
ZSBFZGl0aW5nUmFuZ2UgaW5zdGVhZCBvZiB0d28gaW50ZWdlcnMgYW5kIHJlbW92ZSByZXBsYWNl
bWVudCByYW5nZQorICAgICAgICB0aGF0IGlzIHVudXNlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5Ojpjb25maXJtQ29tcG9zaXRpb24pOiBSZW1vdmUgdW51c2VkIHNlbGVjdGlvbiBy
YW5nZSBwYXJhbWV0ZXJzLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRsZUtleWJvYXJkRXZlbnQpOgorICAgICAgICAo
V2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6aGFuZGxlS2V5Ym9hcmRFdmVudFdpdGhDb21wb3Np
dGlvblJlc3VsdHMpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6Y29uZmly
bUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OnVwZGF0
ZVByZWVkaXQpOgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6Y29uZmlybUN1
cnJlbnRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OklucHV0TWV0aG9kRmlsdGVyOjpz
ZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVudHMpOgorICAgICAgICAoV2Vi
S2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6bG9nSGFuZGxlS2V5Ym9hcmRFdmVudEZvclRlc3Rpbmcp
OgorICAgICAgICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6bG9nSGFuZGxlS2V5Ym9hcmRF
dmVudFdpdGhDb21wb3NpdGlvblJlc3VsdHNGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0Ojp0YXJnZXRGcmFtZUZvckVkaXRpbmcpOiBS
ZWNlaXZlIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpjb25maXJtQ29tcG9zaXRpb24pOiBSZW1vdmUgdGhlIHVudXNlZCBjb2RlIHRv
IGhhbmRsZSB0aGUgc2VsZWN0aW9uIHJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpz
ZXRDb21wb3NpdGlvbik6IFJlbW92ZSB0aGUgdW51c2VkIGNvZGUgdG8gaGFuZGxlIHRoZSByZXBs
YWNlbWVudCByYW5nZS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorCiAyMDE5
LTEwLTI3ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGZvciAhRU5BQkxFKE1FRElBX1NUUkVBTSkgYnVpbGRz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50
LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKaW5kZXgg
YzBhNjRlMzYyOTYuLjZmNGUyOWI3YzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudC5oCkBAIC00MSw4ICs0MSw2IEBAIHN0cnVjdCBLZXlwcmVzc0Nv
bW1hbmQ7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKLSNpbmNsdWRlICJJbnB1dE1ldGhv
ZEZpbHRlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvQ29tcG9zaXRpb25SZXN1bHRzLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9HVW5pcXVlUHRyR3RrLmg+CiB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBH
ZGtFdmVudDsKICNlbmRpZgpAQCAtNjksNyArNjcsOSBAQCBwdWJsaWM6CiAgICAgTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudChOU0V2ZW50ICosIGJvb2wgaGFuZGxlZEJ5SW5wdXRNZXRob2QsIGJvb2wg
cmVwbGFjZXNTb2Z0U3BhY2UsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+
Jik7CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChjb25z
dCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50Jik7Ci0gICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChH
ZGtFdmVudCosIGNvbnN0IFdlYkNvcmU6OkNvbXBvc2l0aW9uUmVzdWx0cyYsIElucHV0TWV0aG9k
RmlsdGVyOjpFdmVudEZha2VkRm9yQ29tcG9zaXRpb24sIFZlY3RvcjxTdHJpbmc+JiYgY29tbWFu
ZHMpOworICAgIGVudW0gY2xhc3MgSGFuZGxlZEJ5SW5wdXRNZXRob2QgOiBib29sIHsgTm8sIFll
cyB9OworICAgIGVudW0gY2xhc3MgRmFrZWRGb3JDb21wb3NpdGlvbiA6IGJvb2wgeyBObywgWWVz
IH07CisgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudCosIGNvbnN0IFN0cmluZyYs
IEhhbmRsZWRCeUlucHV0TWV0aG9kLCBGYWtlZEZvckNvbXBvc2l0aW9uLCBWZWN0b3I8U3RyaW5n
PiYmIGNvbW1hbmRzKTsKICNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgZW51bSBjbGFz
cyBIYW5kbGVkQnlJbnB1dE1ldGhvZCA6IGJvb2wgeyBObywgWWVzIH07CiAgICAgTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudCg6OldlYkV2ZW50ICosIEhhbmRsZWRCeUlucHV0TWV0aG9kKTsKQEAgLTgz
LDggKzgzLDkgQEAgcHVibGljOgogICAgIE5TRXZlbnQgKm5hdGl2ZUV2ZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9uYXRpdmVFdmVudC5nZXQoKTsgfQogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIEdk
a0V2ZW50KiBuYXRpdmVFdmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlRXZlbnQuZ2V0KCk7
IH0KLSAgICBjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMmIGNvbXBvc2l0aW9uUmVz
dWx0cygpIGNvbnN0ICB7IHJldHVybiBtX2NvbXBvc2l0aW9uUmVzdWx0czsgfQotICAgIGJvb2wg
aXNGYWtlRXZlbnRGb3JDb21wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmFrZUV2ZW50Rm9y
Q29tcG9zaXRpb247IH0KKyAgICBjb25zdCBTdHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVybiBt
X3RleHQ7IH0KKyAgICBib29sIGhhbmRsZWRCeUlucHV0TWV0aG9kKCkgY29uc3QgeyByZXR1cm4g
bV9oYW5kbGVkQnlJbnB1dE1ldGhvZCA9PSBIYW5kbGVkQnlJbnB1dE1ldGhvZDo6WWVzOyB9Cisg
ICAgYm9vbCBmYWtlZEZvckNvbXBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mYWtlZEZvckNv
bXBvc2l0aW9uID09IEZha2VkRm9yQ29tcG9zaXRpb246OlllczsgfQogI2VsaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICA6OldlYkV2ZW50KiBuYXRpdmVFdmVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fbmF0aXZlRXZlbnQuZ2V0KCk7IH0KICNlbGlmIFBMQVRGT1JNKFdJTikKQEAgLTk4LDggKzk5
LDkgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8TlNFdmVudD4gbV9uYXRpdmVFdmVudDsKICNl
bGlmIFBMQVRGT1JNKEdUSykKICAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBtX25hdGl2ZUV2ZW50
OwotICAgIFdlYkNvcmU6OkNvbXBvc2l0aW9uUmVzdWx0cyBtX2NvbXBvc2l0aW9uUmVzdWx0czsK
LSAgICBib29sIG1fZmFrZUV2ZW50Rm9yQ29tcG9zaXRpb247CisgICAgU3RyaW5nIG1fdGV4dDsK
KyAgICBIYW5kbGVkQnlJbnB1dE1ldGhvZCBtX2hhbmRsZWRCeUlucHV0TWV0aG9kOworICAgIEZh
a2VkRm9yQ29tcG9zaXRpb24gbV9mYWtlZEZvckNvbXBvc2l0aW9uOwogI2VsaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBSZXRhaW5QdHI8OjpXZWJFdmVudD4gbV9uYXRpdmVFdmVudDsKICNl
bGlmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9O
YXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9O
YXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcAppbmRleCA5NzBiYTRjMDY2Zi4uNDVhYTQ0OTY0
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudEd0ay5jcHAKQEAgLTMyLDIxICszMiwyMiBAQAogI2luY2x1ZGUgPGdkay9nZGsu
aD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudCogZXZl
bnQsIGNvbnN0IFdlYkNvcmU6OkNvbXBvc2l0aW9uUmVzdWx0cyYgY29tcG9zaXRpb25SZXN1bHRz
LCBJbnB1dE1ldGhvZEZpbHRlcjo6RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZha2VkLCBWZWN0
b3I8U3RyaW5nPiYmIGNvbW1hbmRzKQotICAgIDogV2ViS2V5Ym9hcmRFdmVudChXZWJFdmVudEZh
Y3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQsIGNvbXBvc2l0aW9uUmVzdWx0cywg
V1RGTW92ZShjb21tYW5kcykpKQorTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5
Ym9hcmRFdmVudChHZGtFdmVudCogZXZlbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgSGFuZGxlZEJ5
SW5wdXRNZXRob2QgaGFuZGxlZEJ5SW5wdXRNZXRob2QsIEZha2VkRm9yQ29tcG9zaXRpb24gZmFr
ZWRGb3JDb21wb3NpdGlvbiwgVmVjdG9yPFN0cmluZz4mJiBjb21tYW5kcykKKyAgICA6IFdlYktl
eWJvYXJkRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KGV2ZW50
LCB0ZXh0LCBoYW5kbGVkQnlJbnB1dE1ldGhvZCA9PSBIYW5kbGVkQnlJbnB1dE1ldGhvZDo6WWVz
LCBXVEZNb3ZlKGNvbW1hbmRzKSkpCiAgICAgLCBtX25hdGl2ZUV2ZW50KGdka19ldmVudF9jb3B5
KGV2ZW50KSkKLSAgICAsIG1fY29tcG9zaXRpb25SZXN1bHRzKGNvbXBvc2l0aW9uUmVzdWx0cykK
LSAgICAsIG1fZmFrZUV2ZW50Rm9yQ29tcG9zaXRpb24oZmFrZWQgPT0gSW5wdXRNZXRob2RGaWx0
ZXI6OkV2ZW50RmFrZWQpCisgICAgLCBtX3RleHQodGV4dCkKKyAgICAsIG1faGFuZGxlZEJ5SW5w
dXRNZXRob2QoaGFuZGxlZEJ5SW5wdXRNZXRob2QpCisgICAgLCBtX2Zha2VkRm9yQ29tcG9zaXRp
b24oZmFrZWRGb3JDb21wb3NpdGlvbikKIHsKIH0KIAogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVu
dCkKLSAgICA6IFdlYktleWJvYXJkRXZlbnQoV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXli
b2FyZEV2ZW50KGV2ZW50Lm5hdGl2ZUV2ZW50KCksIGV2ZW50LmNvbXBvc2l0aW9uUmVzdWx0cygp
LCBWZWN0b3I8U3RyaW5nPihldmVudC5jb21tYW5kcygpKSkpCisgICAgOiBXZWJLZXlib2FyZEV2
ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChldmVudC5uYXRpdmVF
dmVudCgpLCBldmVudC50ZXh0KCksIGV2ZW50LmhhbmRsZWRCeUlucHV0TWV0aG9kKCksIFZlY3Rv
cjxTdHJpbmc+KGV2ZW50LmNvbW1hbmRzKCkpKSkKICAgICAsIG1fbmF0aXZlRXZlbnQoZ2RrX2V2
ZW50X2NvcHkoZXZlbnQubmF0aXZlRXZlbnQoKSkpCi0gICAgLCBtX2NvbXBvc2l0aW9uUmVzdWx0
cyhldmVudC5jb21wb3NpdGlvblJlc3VsdHMoKSkKLSAgICAsIG1fZmFrZUV2ZW50Rm9yQ29tcG9z
aXRpb24oZXZlbnQuaXNGYWtlRXZlbnRGb3JDb21wb3NpdGlvbigpKQorICAgICwgbV90ZXh0KGV2
ZW50LnRleHQoKSkKKyAgICAsIG1faGFuZGxlZEJ5SW5wdXRNZXRob2QoZXZlbnQuaGFuZGxlZEJ5
SW5wdXRNZXRob2QoKSA/IEhhbmRsZWRCeUlucHV0TWV0aG9kOjpZZXMgOiBIYW5kbGVkQnlJbnB1
dE1ldGhvZDo6Tm8pCisgICAgLCBtX2Zha2VkRm9yQ29tcG9zaXRpb24oZXZlbnQuZmFrZWRGb3JD
b21wb3NpdGlvbigpID8gRmFrZWRGb3JDb21wb3NpdGlvbjo6WWVzIDogRmFrZWRGb3JDb21wb3Np
dGlvbjo6Tm8pCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9X
ZWJFdmVudEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFj
dG9yeS5jcHAKaW5kZXggMmNhYmFiMTk2ZTIuLjA0MDQ4Y2VlNTAzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmNwcApAQCAtMjQ5LDcgKzI0OSw3IEBAIFdl
YldoZWVsRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdk
a0V2ZW50KiBldmVudCwgV2ViV2hlCiAgICAgICAgIHdhbGxUaW1lRm9yRXZlbnQoZXZlbnQpKTsK
IH0KIAotV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJk
RXZlbnQoY29uc3QgR2RrRXZlbnQqIGV2ZW50LCBjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJl
c3VsdHMmIGNvbXBvc2l0aW9uUmVzdWx0cywgVmVjdG9yPFN0cmluZz4mJiBjb21tYW5kcykKK1dl
YktleWJvYXJkRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KGNv
bnN0IEdka0V2ZW50KiBldmVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIGhhbmRsZWRCeUlu
cHV0TWV0aG9kLCBWZWN0b3I8U3RyaW5nPiYmIGNvbW1hbmRzKQogewogICAgIGd1aW50IGtleXZh
bDsKICAgICBnZGtfZXZlbnRfZ2V0X2tleXZhbChldmVudCwgJmtleXZhbCk7CkBAIC0yNTksMTMg
KzI1OSwxMyBAQCBXZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5
Ym9hcmRFdmVudChjb25zdCBHZGtFdmVudCogZXZlbnQsCiAKICAgICByZXR1cm4gV2ViS2V5Ym9h
cmRFdmVudCgKICAgICAgICAgdHlwZSA9PSBHREtfS0VZX1JFTEVBU0UgPyBXZWJFdmVudDo6S2V5
VXAgOiBXZWJFdmVudDo6S2V5RG93biwKLSAgICAgICAgY29tcG9zaXRpb25SZXN1bHRzLnNpbXBs
ZVN0cmluZy5sZW5ndGgoKSA/IGNvbXBvc2l0aW9uUmVzdWx0cy5zaW1wbGVTdHJpbmcgOiBQbGF0
Zm9ybUtleWJvYXJkRXZlbnQ6OnNpbmdsZUNoYXJhY3RlclN0cmluZyhrZXl2YWwpLAorICAgICAg
ICB0ZXh0LmlzTnVsbCgpID8gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpzaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoa2V5dmFsKSA6IHRleHQsCiAgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5
VmFsdWVGb3JHZGtLZXlDb2RlKGtleXZhbCksCiAgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDo6a2V5Q29kZUZvckhhcmR3YXJlS2V5Q29kZShrZXljb2RlKSwKICAgICAgICAgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50OjprZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShrZXl2YWwpLAogICAgICAg
ICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yR2RrS2V5Q29kZShrZXl2
YWwpLAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGtleXZhbCksCi0gICAgICAgIGNvbXBvc2l0
aW9uUmVzdWx0cy5jb21wb3NpdGlvblVwZGF0ZWQoKSwKKyAgICAgICAgaGFuZGxlZEJ5SW5wdXRN
ZXRob2QsCiAgICAgICAgIFdURk1vdmUoY29tbWFuZHMpLAogICAgICAgICBpc0dka0tleUNvZGVG
cm9tS2V5UGFkKGtleXZhbCksCiAgICAgICAgIG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuaAppbmRleCA4ZmU3Y2RjZTU2
Zi4uODAwOGZmMmYyZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2d0ay9XZWJF
dmVudEZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0
b3J5LmgKQEAgLTI0LDExICsyNCw5IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBXZWJFdmVudEZhY3RvcnlfaAotI2RlZmluZSBXZWJFdmVudEZh
Y3RvcnlfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJXZWJFdmVudC5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvQ29tcG9zaXRpb25SZXN1bHRzLmg+CiAKIHR5cGVkZWYgdW5pb24gX0dka0V2ZW50
IEdka0V2ZW50OwogCkBAIC0zOSwxMiArMzcsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBXZWJN
b3VzZUV2ZW50IGNyZWF0ZVdlYk1vdXNlRXZlbnQoY29uc3QgR2RrRXZlbnQqLCBpbnQpOwogICAg
IHN0YXRpYyBXZWJXaGVlbEV2ZW50IGNyZWF0ZVdlYldoZWVsRXZlbnQoY29uc3QgR2RrRXZlbnQq
KTsKICAgICBzdGF0aWMgV2ViV2hlZWxFdmVudCBjcmVhdGVXZWJXaGVlbEV2ZW50KGNvbnN0IEdk
a0V2ZW50KiwgV2ViV2hlZWxFdmVudDo6UGhhc2UsIFdlYldoZWVsRXZlbnQ6OlBoYXNlIG1vbWVu
dHVtUGhhc2UpOwotICAgIHN0YXRpYyBXZWJLZXlib2FyZEV2ZW50IGNyZWF0ZVdlYktleWJvYXJk
RXZlbnQoY29uc3QgR2RrRXZlbnQqLCBjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMm
LCBWZWN0b3I8U3RyaW5nPiYmIGNvbW1hbmRzKTsKKyAgICBzdGF0aWMgV2ViS2V5Ym9hcmRFdmVu
dCBjcmVhdGVXZWJLZXlib2FyZEV2ZW50KGNvbnN0IEdka0V2ZW50KiwgY29uc3QgU3RyaW5nJiwg
Ym9vbCBoYW5kbGVkQnlJbnB1dE1ldGhvZCwgVmVjdG9yPFN0cmluZz4mJiBjb21tYW5kcyk7CiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBzdGF0aWMgV2ViVG91Y2hFdmVudCBjcmVhdGVX
ZWJUb3VjaEV2ZW50KGNvbnN0IEdka0V2ZW50KiwgVmVjdG9yPFdlYlBsYXRmb3JtVG91Y2hQb2lu
dD4mJik7CiAjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
V2ViRXZlbnRGYWN0b3J5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0
ay9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggMjJlMDY5YWJjODQuLjAwYjdjNmJiYzQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNw
cApAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoS2V5RXZl
bnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQsIGJvb2wKIHsKICAgICBpZiAo
d2FzRXZlbnRIYW5kbGVkKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGV2ZW50LmlzRmFrZUV2
ZW50Rm9yQ29tcG9zaXRpb24oKSkKKyAgICBpZiAoZXZlbnQuZmFrZWRGb3JDb21wb3NpdGlvbigp
KQogICAgICAgICByZXR1cm47CiAKICAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2ViVmll
d0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3ZpZXdXaWRnZXQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRl
eCAyN2QxZDE4NTBmZi4uYTlkNDlkNTI2MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCkBAIC03ODQsOSArNzg0LDEx
IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZUtleVByZXNzRXZlbnQoR3RrV2lk
Z2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBrCiAKICAgICAvLyBXZSBuZWVkIHRvIGNvcHkgdGhl
IGV2ZW50IGFzIG90aGVyd2lzZSBpdCBjb3VsZCBiZSBkZXN0cm95ZWQgYmVmb3JlIHdlIHJlYWNo
IHRoZSBsYW1iZGEgYm9keS4KICAgICBHVW5pcXVlUHRyPEdka0V2ZW50PiBldmVudChnZGtfZXZl
bnRfY29weShyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oa2V5RXZlbnQpKSk7Ci0gICAgcHJp
di0+aW5wdXRNZXRob2RGaWx0ZXIuZmlsdGVyS2V5RXZlbnQoa2V5RXZlbnQsIFtwcml2LCBldmVu
dCA9IFdURk1vdmUoZXZlbnQpXShjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMmIGNv
bXBvc2l0aW9uUmVzdWx0cywgSW5wdXRNZXRob2RGaWx0ZXI6OkV2ZW50RmFrZWRGb3JDb21wb3Np
dGlvbiBmYWtlZCkgewotICAgICAgICBwcml2LT5wYWdlUHJveHktPmhhbmRsZUtleWJvYXJkRXZl
bnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChldmVudC5nZXQoKSwgY29tcG9zaXRpb25SZXN1bHRz
LCBmYWtlZCwKLSAgICAgICAgICAgICFjb21wb3NpdGlvblJlc3VsdHMuY29tcG9zaXRpb25VcGRh
dGVkKCkgPyBwcml2LT5rZXlCaW5kaW5nVHJhbnNsYXRvci5jb21tYW5kc0ZvcktleUV2ZW50KCZl
dmVudC0+a2V5KSA6IFZlY3RvcjxTdHJpbmc+KCkpKTsKKyAgICBwcml2LT5pbnB1dE1ldGhvZEZp
bHRlci5maWx0ZXJLZXlFdmVudChrZXlFdmVudCwgW3ByaXYsIGV2ZW50ID0gV1RGTW92ZShldmVu
dCldKGNvbnN0IFN0cmluZyYgdGV4dCwgSW5wdXRNZXRob2RGaWx0ZXI6OkV2ZW50SGFuZGxlZEJ5
SW5wdXRNZXRob2QgaGFuZGxlZCwgSW5wdXRNZXRob2RGaWx0ZXI6OkV2ZW50RmFrZWRGb3JDb21w
b3NpdGlvbiBmYWtlZCkgeworICAgICAgICBhdXRvIGhhbmRsZWRCeUlucHV0TWV0aG9kID0gaGFu
ZGxlZCA9PSBJbnB1dE1ldGhvZEZpbHRlcjo6RXZlbnRIYW5kbGVkQnlJbnB1dE1ldGhvZDo6WWVz
ID8gTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6SGFuZGxlZEJ5SW5wdXRNZXRob2Q6OlllcyA6IE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQ6OkhhbmRsZWRCeUlucHV0TWV0aG9kOjpObzsKKyAgICAgICAg
YXV0byBmYWtlZEZvckNvbXBvc2l0aW9uID0gZmFrZWQgPT0gSW5wdXRNZXRob2RGaWx0ZXI6OkV2
ZW50RmFrZWRGb3JDb21wb3NpdGlvbjo6WWVzID8gTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6RmFr
ZWRGb3JDb21wb3NpdGlvbjo6WWVzIDogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6RmFrZWRGb3JD
b21wb3NpdGlvbjo6Tm87CisgICAgICAgIGF1dG8gY29tbWFuZHMgPSBoYW5kbGVkID09IElucHV0
TWV0aG9kRmlsdGVyOjpFdmVudEhhbmRsZWRCeUlucHV0TWV0aG9kOjpZZXMgPyBWZWN0b3I8U3Ry
aW5nPigpIDogcHJpdi0+a2V5QmluZGluZ1RyYW5zbGF0b3IuY29tbWFuZHNGb3JLZXlFdmVudCgm
ZXZlbnQtPmtleSk7CisgICAgICAgIHByaXYtPnBhZ2VQcm94eS0+aGFuZGxlS2V5Ym9hcmRFdmVu
dChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGV2ZW50LmdldCgpLCB0ZXh0LCBoYW5kbGVkQnlJbnB1
dE1ldGhvZCwgZmFrZWRGb3JDb21wb3NpdGlvbiwgV1RGTW92ZShjb21tYW5kcykpKTsKICAgICB9
KTsKIAogICAgIHJldHVybiBHREtfRVZFTlRfU1RPUDsKQEAgLTgwNCw4ICs4MDYsMTAgQEAgc3Rh
dGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlS2V5UmVsZWFzZUV2ZW50KEd0a1dpZGdldCog
d2lkZ2V0LCBHZGtFdmVudEtleSoKIAogICAgIC8vIFdlIG5lZWQgdG8gY29weSB0aGUgZXZlbnQg
YXMgb3RoZXJ3aXNlIGl0IGNvdWxkIGJlIGRlc3Ryb3llZCBiZWZvcmUgd2UgcmVhY2ggdGhlIGxh
bWJkYSBib2R5LgogICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9jb3B5
KHJlaW50ZXJwcmV0X2Nhc3Q8R2RrRXZlbnQqPihrZXlFdmVudCkpKTsKLSAgICBwcml2LT5pbnB1
dE1ldGhvZEZpbHRlci5maWx0ZXJLZXlFdmVudChrZXlFdmVudCwgW3ByaXYsIGV2ZW50ID0gV1RG
TW92ZShldmVudCldKGNvbnN0IFdlYkNvcmU6OkNvbXBvc2l0aW9uUmVzdWx0cyYgY29tcG9zaXRp
b25SZXN1bHRzLCBJbnB1dE1ldGhvZEZpbHRlcjo6RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uIGZh
a2VkKSB7Ci0gICAgICAgIHByaXYtPnBhZ2VQcm94eS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRp
dmVXZWJLZXlib2FyZEV2ZW50KGV2ZW50LmdldCgpLCBjb21wb3NpdGlvblJlc3VsdHMsIGZha2Vk
LCB7IH0pKTsKKyAgICBwcml2LT5pbnB1dE1ldGhvZEZpbHRlci5maWx0ZXJLZXlFdmVudChrZXlF
dmVudCwgW3ByaXYsIGV2ZW50ID0gV1RGTW92ZShldmVudCldKGNvbnN0IFN0cmluZyYgdGV4dCwg
SW5wdXRNZXRob2RGaWx0ZXI6OkV2ZW50SGFuZGxlZEJ5SW5wdXRNZXRob2QgaGFuZGxlZCwgSW5w
dXRNZXRob2RGaWx0ZXI6OkV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbiBmYWtlZCkgeworICAgICAg
ICBhdXRvIGhhbmRsZWRCeUlucHV0TWV0aG9kID0gaGFuZGxlZCA9PSBJbnB1dE1ldGhvZEZpbHRl
cjo6RXZlbnRIYW5kbGVkQnlJbnB1dE1ldGhvZDo6WWVzID8gTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dDo6SGFuZGxlZEJ5SW5wdXRNZXRob2Q6OlllcyA6IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6Okhh
bmRsZWRCeUlucHV0TWV0aG9kOjpObzsKKyAgICAgICAgYXV0byBmYWtlZEZvckNvbXBvc2l0aW9u
ID0gZmFrZWQgPT0gSW5wdXRNZXRob2RGaWx0ZXI6OkV2ZW50RmFrZWRGb3JDb21wb3NpdGlvbjo6
WWVzID8gTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6RmFrZWRGb3JDb21wb3NpdGlvbjo6WWVzIDog
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6RmFrZWRGb3JDb21wb3NpdGlvbjo6Tm87CisgICAgICAg
IHByaXYtPnBhZ2VQcm94eS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2
ZW50KGV2ZW50LmdldCgpLCB0ZXh0LCBoYW5kbGVkQnlJbnB1dE1ldGhvZCwgZmFrZWRGb3JDb21w
b3NpdGlvbiwgeyB9KSk7CiAgICAgfSk7CiAKICAgICByZXR1cm4gR0RLX0VWRU5UX1NUT1A7CkBA
IC0xNDU1LDExICsxNDU5LDYgQEAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNl
Q3JlYXRlKGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3UKICAgICByZXR1cm4g
d2Via2l0V2ViVmlld0Jhc2U7CiB9CiAKLUd0a0lNQ29udGV4dCogd2Via2l0V2ViVmlld0Jhc2VH
ZXRJTUNvbnRleHQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQotewotICAg
IHJldHVybiB3ZWJraXRXZWJWaWV3QmFzZS0+cHJpdi0+aW5wdXRNZXRob2RGaWx0ZXIuY29udGV4
dCgpOwotfQotCiBXZWJQYWdlUHJveHkqIHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXZWJLaXRX
ZWJWaWV3QmFzZSogd2Via2l0V2ViVmlld0Jhc2UpCiB7CiAgICAgcmV0dXJuIHdlYmtpdFdlYlZp
ZXdCYXNlLT5wcml2LT5wYWdlUHJveHkuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAppbmRleCBj
NmJlZDNlMzBiMy4uZjg0YTNhYjY1ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaApAQCAtMzksNyAr
MzksNiBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogCiBXZWJLaXRXZWJWaWV3QmFzZSog
d2Via2l0V2ViVmlld0Jhc2VDcmVhdGUoY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYpOwot
R3RrSU1Db250ZXh0KiB3ZWJraXRXZWJWaWV3QmFzZUdldElNQ29udGV4dChXZWJLaXRXZWJWaWV3
QmFzZSopOwogV2ViS2l0OjpXZWJQYWdlUHJveHkqIHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShX
ZWJLaXRXZWJWaWV3QmFzZSopOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0ZVdlYlBhZ2Uo
V2ViS2l0V2ViVmlld0Jhc2UqLCBSZWY8QVBJOjpQYWdlQ29uZmlndXJhdGlvbj4mJik7CiB2b2lk
IHdlYmtpdFdlYlZpZXdCYXNlU2V0VG9vbHRpcFRleHQoV2ViS2l0V2ViVmlld0Jhc2UqLCBjb25z
dCBjaGFyKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA3
ZGY1NWRkNTZhZS4uMjcyZmNhYTJhY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcApAQCAtODAyMCwyOSArODAyMCwyMSBAQCBSZWZQdHI8Vmlld1NuYXBzaG90PiBX
ZWJQYWdlUHJveHk6OnRha2VWaWV3U25hcHNob3QoKQogI2VuZGlmCiAKICNpZiBQTEFURk9STShH
VEspCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0
LCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXMsIHVpbnQ2NF90IHNlbGVj
dGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rpb25FbmQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFu
Z2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZUVuZCkKK3ZvaWQgV2ViUGFnZVByb3h5
OjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3Np
dGlvblVuZGVybGluZT4mIHVuZGVybGluZXMsIGNvbnN0IEVkaXRpbmdSYW5nZSYgc2VsZWN0aW9u
UmFuZ2UpCiB7CiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZmluZCBvdXQgaG93IHRvIHByb3Bl
ciBoYW5kbGUgdGhlIGNyYXNoZXMgY2FzZS4KICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpTZXRDb21wb3NpdGlvbih0ZXh0LCB1bmRlcmxpbmVzLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0
aW9uRW5kLCByZXBsYWNlbWVudFJhbmdlU3RhcnQsIHJlcGxhY2VtZW50UmFuZ2VFbmQpLCBtX3dl
YlBhZ2VJRCk7CisgICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldENvbXBv
c2l0aW9uKHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblJhbmdlKSwgbV93ZWJQYWdlSUQpOwog
fQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYg
Y29tcG9zaXRpb25TdHJpbmcsIGludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIGludDY0X3Qgc2VsZWN0
aW9uTGVuZ3RoKQordm9pZCBXZWJQYWdlUHJveHk6OmNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBT
dHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nKQogewogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3Mo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OkNvbmZpcm1Db21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZywgc2VsZWN0aW9uU3RhcnQs
IHNlbGVjdGlvbkxlbmd0aCksIG1fd2ViUGFnZUlEKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6
OmNhbmNlbENvbXBvc2l0aW9uKCkKLXsKLSAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpD
YW5jZWxDb21wb3NpdGlvbigpLCBtX3dlYlBhZ2VJRCk7CisgICAgcHJvY2VzcygpLnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkNvbmZpcm1Db21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZyksIG1f
d2ViUGFnZUlEKTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShHVEspCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggNWE5OWQxMzkyODUuLmE3MWQyOGZiNmI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNzg3LDkgKzc4Nyw4IEBAIHB1
YmxpYzoKICAgICBib29sIHVwZGF0ZUxheW91dFZpZXdwb3J0UGFyYW1ldGVycyhjb25zdCBXZWJL
aXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJik7CiAKICNpZiBQTEFURk9STShHVEspCi0g
ICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJDb3Jl
OjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3Rh
cnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRSYW5nZVN0YXJ0
LCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlRW5kKTsKLSAgICB2b2lkIGNvbmZpcm1Db21wb3Np
dGlvbihjb25zdCBTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nLCBpbnQ2NF90IHNlbGVjdGlvblN0
YXJ0LCBpbnQ2NF90IHNlbGVjdGlvbkxlbmd0aCk7Ci0gICAgdm9pZCBjYW5jZWxDb21wb3NpdGlv
bigpOworICAgIHZvaWQgc2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9y
PFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYsIGNvbnN0IEVkaXRpbmdSYW5nZSYgc2Vs
ZWN0aW9uUmFuZ2UpOworICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYg
Y29tcG9zaXRpb25TdHJpbmcpOwogCiAgICAgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wg
ZW5hYmxlZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9JbnB1
dE1ldGhvZEZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvSW5wdXRNZXRo
b2RGaWx0ZXIuY3BwCmluZGV4IDQ4NDdlNjAyMTk0Li5mZTZhZjczYTcyOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9kRmlsdGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuY3BwCkBAIC0yMyw3
ICsyMyw2IEBACiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0NvbXBvc2l0aW9uUmVzdWx0cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRWRpdG9yLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9HVW5pcXVlUHRyR3RrLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9J
bnRSZWN0Lmg+CkBAIC0xNDUsMTAgKzE0NCwxMiBAQCB2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpo
YW5kbGVLZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5KiBldmVudCwgY29uc3QgU3RyaW5nJiBzaQog
I2VuZGlmCiAKICAgICBpZiAobV9maWx0ZXJLZXlFdmVudENvbXBsZXRpb25IYW5kbGVyKSB7Ci0g
ICAgICAgIG1fZmlsdGVyS2V5RXZlbnRDb21wbGV0aW9uSGFuZGxlcihDb21wb3NpdGlvblJlc3Vs
dHMoc2ltcGxlU3RyaW5nKSwgZmFrZWQpOworICAgICAgICBtX2ZpbHRlcktleUV2ZW50Q29tcGxl
dGlvbkhhbmRsZXIoc2ltcGxlU3RyaW5nLCBFdmVudEhhbmRsZWRCeUlucHV0TWV0aG9kOjpObywg
ZmFrZWQpOwogICAgICAgICBtX2ZpbHRlcktleUV2ZW50Q29tcGxldGlvbkhhbmRsZXIgPSBudWxs
cHRyOwotICAgIH0gZWxzZQotICAgICAgICBtX3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudChyZWludGVycHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCBD
b21wb3NpdGlvblJlc3VsdHMoc2ltcGxlU3RyaW5nKSwgZmFrZWQsIFZlY3RvcjxTdHJpbmc+KCkp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIGZha2VkRm9yQ29tcG9zaXRpb24gPSBmYWtl
ZCA9PSBJbnB1dE1ldGhvZEZpbHRlcjo6RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXMgPyBO
YXRpdmVXZWJLZXlib2FyZEV2ZW50OjpGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXMgOiBOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50OjpGYWtlZEZvckNvbXBvc2l0aW9uOjpObzsKKyAgICAgICAgbV9wYWdl
LT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQocmVpbnRlcnByZXRf
Y2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgc2ltcGxlU3RyaW5nLCBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50OjpIYW5kbGVkQnlJbnB1dE1ldGhvZDo6Tm8sIGZha2VkRm9yQ29tcG9zaXRpb24sIFZlY3Rv
cjxTdHJpbmc+KCkpKTsKKyAgICB9CiB9CiAKIHZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6OmhhbmRs
ZUtleWJvYXJkRXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiBldmVudCwg
UmVzdWx0c1RvU2VuZCByZXN1bHRzVG9TZW5kLCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gZmFr
ZWQpCkBAIC0xNjEsMTYgKzE2MiwxOSBAQCB2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpoYW5kbGVL
ZXlib2FyZEV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyhHZGtFdmVudEtleSogZQogI2VuZGlm
CiAKICAgICBpZiAobV9maWx0ZXJLZXlFdmVudENvbXBsZXRpb25IYW5kbGVyKSB7Ci0gICAgICAg
IG1fZmlsdGVyS2V5RXZlbnRDb21wbGV0aW9uSGFuZGxlcihDb21wb3NpdGlvblJlc3VsdHMoQ29t
cG9zaXRpb25SZXN1bHRzOjpXaWxsU2VuZENvbXBvc2l0aW9uUmVzdWx0c1Nvb24pLCBmYWtlZCk7
CisgICAgICAgIG1fZmlsdGVyS2V5RXZlbnRDb21wbGV0aW9uSGFuZGxlcih7IH0sIEV2ZW50SGFu
ZGxlZEJ5SW5wdXRNZXRob2Q6OlllcywgZmFrZWQpOwogICAgICAgICBtX2ZpbHRlcktleUV2ZW50
Q29tcGxldGlvbkhhbmRsZXIgPSBudWxscHRyOwotICAgIH0gZWxzZQotICAgICAgICBtX3BhZ2Ut
PmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChyZWludGVycHJldF9j
YXN0PEdka0V2ZW50Kj4oZXZlbnQpLCBDb21wb3NpdGlvblJlc3VsdHMoQ29tcG9zaXRpb25SZXN1
bHRzOjpXaWxsU2VuZENvbXBvc2l0aW9uUmVzdWx0c1Nvb24pLCBmYWtlZCwgVmVjdG9yPFN0cmlu
Zz4oKSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8gZmFrZWRGb3JDb21wb3NpdGlvbiA9
IGZha2VkID09IElucHV0TWV0aG9kRmlsdGVyOjpFdmVudEZha2VkRm9yQ29tcG9zaXRpb246Olll
cyA/IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6OkZha2VkRm9yQ29tcG9zaXRpb246OlllcyA6IE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQ6OkZha2VkRm9yQ29tcG9zaXRpb246Ok5vOworICAgICAgICBt
X3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChyZWludGVy
cHJldF9jYXN0PEdka0V2ZW50Kj4oZXZlbnQpLCB7IH0sIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ6
OkhhbmRsZWRCeUlucHV0TWV0aG9kOjpZZXMsIGZha2VkRm9yQ29tcG9zaXRpb24sIFZlY3RvcjxT
dHJpbmc+KCkpKTsKKyAgICB9CisKICAgICBpZiAocmVzdWx0c1RvU2VuZCAmIENvbXBvc2l0aW9u
ICYmICFtX2NvbmZpcm1lZENvbXBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICBtX3BhZ2UtPmNv
bmZpcm1Db21wb3NpdGlvbihtX2NvbmZpcm1lZENvbXBvc2l0aW9uLCAtMSwgMCk7CisgICAgICAg
IG1fcGFnZS0+Y29uZmlybUNvbXBvc2l0aW9uKG1fY29uZmlybWVkQ29tcG9zaXRpb24pOwogCiAg
ICAgaWYgKHJlc3VsdHNUb1NlbmQgJiBQcmVlZGl0ICYmICFtX3ByZWVkaXQuaXNOdWxsKCkpIHsK
ICAgICAgICAgbV9wYWdlLT5zZXRDb21wb3NpdGlvbihtX3ByZWVkaXQsIFZlY3RvcjxDb21wb3Np
dGlvblVuZGVybGluZT4geyBDb21wb3NpdGlvblVuZGVybGluZSgwLCBtX3ByZWVkaXQubGVuZ3Ro
KCksIENvbXBvc2l0aW9uVW5kZXJsaW5lQ29sb3I6OlRleHRDb2xvciwgQ29sb3IoQ29sb3I6OmJs
YWNrKSwgZmFsc2UpIH0sCi0gICAgICAgICAgICBtX2N1cnNvck9mZnNldCwgbV9jdXJzb3JPZmZz
ZXQsIDAgLyogcmVwbGFjZW1lbnQgc3RhcnQgKi8sIDAgLyogcmVwbGFjZW1lbnQgZW5kICovKTsK
KyAgICAgICAgICAgIEVkaXRpbmdSYW5nZShtX2N1cnNvck9mZnNldCwgMSkpOwogICAgIH0KIH0K
IApAQCAtMjY3LDcgKzI3MSw3IEBAIHZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6OmNvbmZpcm1Db21w
b3NpdGlvbigpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAgICBtX3BhZ2UtPmNv
bmZpcm1Db21wb3NpdGlvbihtX2NvbmZpcm1lZENvbXBvc2l0aW9uLCAtMSwgMCk7CisgICAgbV9w
YWdlLT5jb25maXJtQ29tcG9zaXRpb24obV9jb25maXJtZWRDb21wb3NpdGlvbik7CiAgICAgbV9j
b25maXJtZWRDb21wb3NpdGlvbiA9IFN0cmluZygpOwogfQogCkBAIC0yODEsNyArMjg1LDcgQEAg
dm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6dXBkYXRlUHJlZWRpdCgpCiAjZW5kaWYKICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHBhcnNlIHRoZSBQYW5nb0F0dHJMaXN0IHRoYXQgd2UgZ2V0IGZyb20g
dGhlIElNIGNvbnRleHQgaGVyZS4KICAgICBtX3BhZ2UtPnNldENvbXBvc2l0aW9uKG1fcHJlZWRp
dCwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB7IENvbXBvc2l0aW9uVW5kZXJsaW5lKDAs
IG1fcHJlZWRpdC5sZW5ndGgoKSwgQ29tcG9zaXRpb25VbmRlcmxpbmVDb2xvcjo6VGV4dENvbG9y
LCBDb2xvcihDb2xvcjo6YmxhY2spLCBmYWxzZSkgfSwKLSAgICAgICAgbV9jdXJzb3JPZmZzZXQs
IG1fY3Vyc29yT2Zmc2V0LCAwIC8qIHJlcGxhY2VtZW50IHN0YXJ0ICovLCAwIC8qIHJlcGxhY2Vt
ZW50IGVuZCAqLyk7CisgICAgICAgIEVkaXRpbmdSYW5nZShtX2N1cnNvck9mZnNldCwgMSkpOwog
ICAgIG1fcHJlZWRpdENoYW5nZWQgPSBmYWxzZTsKIH0KIApAQCAtMzQwLDcgKzM0NCw3IEBAIHZv
aWQgSW5wdXRNZXRob2RGaWx0ZXI6OmNvbmZpcm1DdXJyZW50Q29tcG9zaXRpb24oKQogICAgIH0K
ICNlbmRpZgogCi0gICAgbV9wYWdlLT5jb25maXJtQ29tcG9zaXRpb24oU3RyaW5nKCksIC0xLCAw
KTsKKyAgICBtX3BhZ2UtPmNvbmZpcm1Db21wb3NpdGlvbih7IH0pOwogICAgIG1fY29tcG9zaW5n
VGV4dEN1cnJlbnRseSA9IGZhbHNlOwogfQogCkBAIC0zNjgsMTQgKzM3MiwxNCBAQCB2b2lkIElu
cHV0TWV0aG9kRmlsdGVyOjpzZW5kQ29tcG9zaXRpb25BbmRQcmVlZGl0V2l0aEZha2VLZXlFdmVu
dHMoUmVzdWx0c1RvU2VuZAogICAgIEdVbmlxdWVQdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVu
dF9uZXcoR0RLX0tFWV9QUkVTUykpOwogICAgIGV2ZW50LT5rZXkudGltZSA9IEdES19DVVJSRU5U
X1RJTUU7CiAgICAgZXZlbnQtPmtleS5rZXl2YWwgPSBjb21wb3NpdGlvbkV2ZW50S2V5Q29kZTsK
LSAgICBoYW5kbGVLZXlib2FyZEV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cygmZXZlbnQtPmtl
eSwgcmVzdWx0c1RvU2VuZCwgRXZlbnRGYWtlZCk7CisgICAgaGFuZGxlS2V5Ym9hcmRFdmVudFdp
dGhDb21wb3NpdGlvblJlc3VsdHMoJmV2ZW50LT5rZXksIHJlc3VsdHNUb1NlbmQsIEV2ZW50RmFr
ZWRGb3JDb21wb3NpdGlvbjo6WWVzKTsKIAogICAgIG1fY29uZmlybWVkQ29tcG9zaXRpb24gPSBT
dHJpbmcoKTsKICAgICBpZiAocmVzdWx0c1RvU2VuZCAmIENvbXBvc2l0aW9uKQogICAgICAgICBt
X2NvbXBvc2luZ1RleHRDdXJyZW50bHkgPSBmYWxzZTsKIAogICAgIGV2ZW50LT50eXBlID0gR0RL
X0tFWV9SRUxFQVNFOwotICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoJmV2ZW50LT5rZXksIFN0cmlu
ZygpLCBFdmVudEZha2VkKTsKKyAgICBoYW5kbGVLZXlib2FyZEV2ZW50KCZldmVudC0+a2V5LCBT
dHJpbmcoKSwgRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXMpOwogICAgIG1fanVzdFNlbnRG
YWtlS2V5VXAgPSB0cnVlOwogfQogCkBAIC00NTAsNyArNDU0LDcgQEAgdm9pZCBJbnB1dE1ldGhv
ZEZpbHRlcjo6bG9nSGFuZGxlS2V5Ym9hcmRFdmVudEZvclRlc3RpbmcoR2RrRXZlbnRLZXkqIGV2
ZW50LCBjb24KICAgICBndWludCBrZXl2YWw7CiAgICAgZ2RrX2V2ZW50X2dldF9rZXl2YWwocmVp
bnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2ZW50KSwgJmtleXZhbCk7CiAgICAgY29uc3QgY2hh
ciogZXZlbnRUeXBlID0gZ2RrX2V2ZW50X2dldF9ldmVudF90eXBlKHJlaW50ZXJwcmV0X2Nhc3Q8
R2RrRXZlbnQqPihldmVudCkpID09IEdES19LRVlfUkVMRUFTRSA/ICJyZWxlYXNlIiA6ICJwcmVz
cyI7Ci0gICAgY29uc3QgY2hhciogZmFrZWRTdHJpbmcgPSBmYWtlZCA9PSBFdmVudEZha2VkID8g
IiAoZmFrZWQpIiA6ICIiOworICAgIGNvbnN0IGNoYXIqIGZha2VkU3RyaW5nID0gZmFrZWQgPT0g
RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uOjpZZXMgPyAiIChmYWtlZCkiIDogIiI7CiAgICAgaWYg
KCFldmVudFN0cmluZy5pc051bGwoKSkKICAgICAgICAgbV9ldmVudHMuYXBwZW5kKG1ha2VTdHJp
bmcoInNlbmRTaW1wbGVLZXlFdmVudCB0eXBlPSIsIGV2ZW50VHlwZSwgIiBrZXljb2RlPSIsIGhl
eChrZXl2YWwpLCAiIHRleHQ9JyIsIGV2ZW50U3RyaW5nLCAnXCcnLCBmYWtlZFN0cmluZykpOwog
ICAgIGVsc2UKQEAgLTQ2Miw3ICs0NjYsNyBAQCB2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpsb2dI
YW5kbGVLZXlib2FyZEV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0c0ZvclRlc3RpbmcoRwogICAg
IGd1aW50IGtleXZhbDsKICAgICBnZGtfZXZlbnRfZ2V0X2tleXZhbChyZWludGVycHJldF9jYXN0
PEdka0V2ZW50Kj4oZXZlbnQpLCAma2V5dmFsKTsKICAgICBjb25zdCBjaGFyKiBldmVudFR5cGUg
PSBnZGtfZXZlbnRfZ2V0X2V2ZW50X3R5cGUocmVpbnRlcnByZXRfY2FzdDxHZGtFdmVudCo+KGV2
ZW50KSkgPT0gR0RLX0tFWV9SRUxFQVNFID8gInJlbGVhc2UiIDogInByZXNzIjsKLSAgICBjb25z
dCBjaGFyKiBmYWtlZFN0cmluZyA9IGZha2VkID09IEV2ZW50RmFrZWQgPyAiIChmYWtlZCkiIDog
IiI7CisgICAgY29uc3QgY2hhciogZmFrZWRTdHJpbmcgPSBmYWtlZCA9PSBFdmVudEZha2VkRm9y
Q29tcG9zaXRpb246OlllcyA/ICIgKGZha2VkKSIgOiAiIjsKICAgICBtX2V2ZW50cy5hcHBlbmQo
bWFrZVN0cmluZygic2VuZEtleUV2ZW50V2l0aENvbXBvc2l0aW9uUmVzdWx0cyB0eXBlPSIsIGV2
ZW50VHlwZSwgIiBrZXljb2RlPSIsIGhleChrZXl2YWwpLCBmYWtlZFN0cmluZykpOwogCiAgICAg
aWYgKHJlc3VsdHNUb1NlbmQgJiBDb21wb3NpdGlvbiAmJiAhbV9jb25maXJtZWRDb21wb3NpdGlv
bi5pc051bGwoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9JbnB1
dE1ldGhvZEZpbHRlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0lucHV0TWV0aG9k
RmlsdGVyLmgKaW5kZXggMmE0YWY2YWMwM2MuLmFmYTY0OTc0YTAyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9ndGsvSW5wdXRNZXRob2RGaWx0ZXIuaApAQCAtMTcsOCArMTcsNyBA
QAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBJbnB1dE1l
dGhvZEZpbHRlcl9oCi0jZGVmaW5lIElucHV0TWV0aG9kRmlsdGVyX2gKKyNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5o
PgpAQCAtMzAsNyArMjksNiBAQCB0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRLZXkgR2RrRXZlbnRL
ZXk7CiB0eXBlZGVmIHN0cnVjdCBfR3RrSU1Db250ZXh0IEd0a0lNQ29udGV4dDsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotc3RydWN0IENvbXBvc2l0aW9uUmVzdWx0czsKIGNsYXNzIEludFJlY3Q7
CiB9CiAKQEAgLTQxLDkgKzM5LDEzIEBAIGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNsYXNzIElucHV0
TWV0aG9kRmlsdGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnB1dE1ldGhvZEZpbHRl
cik7CiBwdWJsaWM6Ci0gICAgZW51bSBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gewotICAgICAg
ICBFdmVudEZha2VkLAotICAgICAgICBFdmVudE5vdEZha2VkCisgICAgZW51bSBjbGFzcyBFdmVu
dEZha2VkRm9yQ29tcG9zaXRpb24geworICAgICAgICBObywKKyAgICAgICAgWWVzCisgICAgfTsK
KyAgICBlbnVtIGNsYXNzIEV2ZW50SGFuZGxlZEJ5SW5wdXRNZXRob2QgeworICAgICAgICBObywK
KyAgICAgICAgWWVzCiAgICAgfTsKIAogICAgIElucHV0TWV0aG9kRmlsdGVyKCk7CkBAIC01Niw3
ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CiAgICAgdm9pZCBz
ZXRDdXJzb3JSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKIAotICAgIHVzaW5nIEZpbHRl
cktleUV2ZW50Q29tcGxldGlvbkhhbmRsZXIgPSBGdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6
OkNvbXBvc2l0aW9uUmVzdWx0cyYsIElucHV0TWV0aG9kRmlsdGVyOjpFdmVudEZha2VkRm9yQ29t
cG9zaXRpb24pPjsKKyAgICB1c2luZyBGaWx0ZXJLZXlFdmVudENvbXBsZXRpb25IYW5kbGVyID0g
RnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmLCBFdmVudEhhbmRsZWRCeUlucHV0TWV0aG9kLCBF
dmVudEZha2VkRm9yQ29tcG9zaXRpb24pPjsKICAgICB2b2lkIGZpbHRlcktleUV2ZW50KEdka0V2
ZW50S2V5KiwgRmlsdGVyS2V5RXZlbnRDb21wbGV0aW9uSGFuZGxlciYmID0gbnVsbHB0cik7CiAg
ICAgdm9pZCBub3RpZnlGb2N1c2VkSW4oKTsKICAgICB2b2lkIG5vdGlmeUZvY3VzZWRPdXQoKTsK
QEAgLTg0LDggKzg2LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZVByZWVkaXRTdGFydCgp
OwogICAgIHZvaWQgaGFuZGxlUHJlZWRpdEVuZCgpOwogCi0gICAgdm9pZCBoYW5kbGVLZXlib2Fy
ZEV2ZW50KEdka0V2ZW50S2V5KiwgY29uc3QgU3RyaW5nJiBldmVudFN0cmluZyA9IFN0cmluZygp
LCBFdmVudEZha2VkRm9yQ29tcG9zaXRpb24gPSBFdmVudE5vdEZha2VkKTsKLSAgICB2b2lkIGhh
bmRsZUtleWJvYXJkRXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5KiwgUmVz
dWx0c1RvU2VuZCA9IFByZWVkaXRBbmRDb21wb3NpdGlvbiwgRXZlbnRGYWtlZEZvckNvbXBvc2l0
aW9uID0gRXZlbnROb3RGYWtlZCk7CisgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KEdka0V2
ZW50S2V5KiwgY29uc3QgU3RyaW5nJiBldmVudFN0cmluZyA9IFN0cmluZygpLCBFdmVudEZha2Vk
Rm9yQ29tcG9zaXRpb24gPSBFdmVudEZha2VkRm9yQ29tcG9zaXRpb246Ok5vKTsKKyAgICB2b2lk
IGhhbmRsZUtleWJvYXJkRXZlbnRXaXRoQ29tcG9zaXRpb25SZXN1bHRzKEdka0V2ZW50S2V5Kiwg
UmVzdWx0c1RvU2VuZCA9IFByZWVkaXRBbmRDb21wb3NpdGlvbiwgRXZlbnRGYWtlZEZvckNvbXBv
c2l0aW9uID0gRXZlbnRGYWtlZEZvckNvbXBvc2l0aW9uOjpObyk7CiAKICAgICB2b2lkIHNlbmRD
b21wb3NpdGlvbkFuZFByZWVkaXRXaXRoRmFrZUtleUV2ZW50cyhSZXN1bHRzVG9TZW5kKTsKICAg
ICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbigpOwpAQCAtMTI2LDQgKzEyOCwzIEBAIHByaXZhdGU6
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLy8gSW5wdXRNZXRob2RGaWx0ZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBh
MTVlMWQ0NjM3MC4uZmY4ZjIwNDEzM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC01MjkxLDkgKzUyOTEsOSBAQCB2b2lkIFdlYlBhZ2U6OmNv
bmZpcm1Db21wb3NpdGlvbkFzeW5jKCkKICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKIAogI2lm
IFBMQVRGT1JNKEdUSykKLXN0YXRpYyBGcmFtZSogdGFyZ2V0RnJhbWVGb3JFZGl0aW5nKFdlYlBh
Z2UqIHBhZ2UpCitzdGF0aWMgRnJhbWUqIHRhcmdldEZyYW1lRm9yRWRpdGluZyhXZWJQYWdlJiBw
YWdlKQogewotICAgIEZyYW1lJiB0YXJnZXRGcmFtZSA9IHBhZ2UtPmNvcmVQYWdlKCktPmZvY3Vz
Q29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIEZyYW1lJiB0YXJnZXRGcmFt
ZSA9IHBhZ2UuY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1l
KCk7CiAKICAgICBFZGl0b3ImIGVkaXRvciA9IHRhcmdldEZyYW1lLmVkaXRvcigpOwogICAgIGlm
ICghZWRpdG9yLmNhbkVkaXQoKSkKQEAgLTUzMTIsNjIgKzUzMTIsMjAgQEAgc3RhdGljIEZyYW1l
KiB0YXJnZXRGcmFtZUZvckVkaXRpbmcoV2ViUGFnZSogcGFnZSkKICAgICByZXR1cm4gJnRhcmdl
dEZyYW1lOwogfQogCi12b2lkIFdlYlBhZ2U6OmNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJp
bmcmIGNvbXBvc2l0aW9uU3RyaW5nLCBpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCBpbnQ2NF90IHNl
bGVjdGlvbkxlbmd0aCkKK3ZvaWQgV2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0
cmluZyYgY29tcG9zaXRpb25TdHJpbmcpCiB7Ci0gICAgRnJhbWUqIHRhcmdldEZyYW1lID0gdGFy
Z2V0RnJhbWVGb3JFZGl0aW5nKHRoaXMpOwotICAgIGlmICghdGFyZ2V0RnJhbWUpIHsKLSAgICAg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFZGl0b3JTdGF0ZUNoYW5nZWQoZWRpdG9y
U3RhdGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdGFyZ2V0RnJhbWUtPmVk
aXRvcigpLmNvbmZpcm1Db21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZyk7Ci0KLSAgICBpZiAo
c2VsZWN0aW9uU3RhcnQgPT0gLTEpIHsKLSAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpFZGl0b3JTdGF0ZUNoYW5nZWQoZWRpdG9yU3RhdGUoKSkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgRWxlbWVudCogc2NvcGUgPSB0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0aW9uUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHNj
b3BlLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uTGVuZ3RoKTsKLSAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKHNlbGVjdGlvblJhbmdlLCAiSW52YWxpZCBzZWxlY3Rpb246IFslbGxkOiVsbGRdIGlu
IHRleHQgb2YgbGVuZ3RoICVkIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihzZWxlY3Rpb25TdGFy
dCksIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oc2VsZWN0aW9uTGVuZ3RoKSwgc2NvcGUtPmlubmVy
VGV4dCgpLmxlbmd0aCgpKTsKLQotICAgIGlmIChzZWxlY3Rpb25SYW5nZSkgewotICAgICAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbigqc2VsZWN0aW9uUmFuZ2UsIFNFTF9ERUZBVUxUX0FG
RklOSVRZKTsKLSAgICAgICAgdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihz
ZWxlY3Rpb24pOwotICAgIH0KLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkVkaXRv
clN0YXRlQ2hhbmdlZChlZGl0b3JTdGF0ZSgpKSk7CisgICAgaWYgKGF1dG8qIHRhcmdldEZyYW1l
ID0gdGFyZ2V0RnJhbWVGb3JFZGl0aW5nKCp0aGlzKSkKKyAgICAgICAgdGFyZ2V0RnJhbWUtPmVk
aXRvcigpLmNvbmZpcm1Db21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZyk7CiB9CiAKLXZvaWQg
V2ViUGFnZTo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8
Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFy
dCwgdWludDY0X3Qgc2VsZWN0aW9uTGVuZ3RoLCB1aW50NjRfdCByZXBsYWNlbWVudFN0YXJ0LCB1
aW50NjRfdCByZXBsYWNlbWVudExlbmd0aCkKK3ZvaWQgV2ViUGFnZTo6c2V0Q29tcG9zaXRpb24o
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1
bmRlcmxpbmVzLCBjb25zdCBFZGl0aW5nUmFuZ2UmIHNlbGVjdGlvblJhbmdlKQogewotICAgIEZy
YW1lKiB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRm9yRWRpdGluZyh0aGlzKTsKLSAgICBpZiAo
IXRhcmdldEZyYW1lIHx8ICF0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50RWRpdGFibGUoKSkgewotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkVkaXRvclN0YXRlQ2hhbmdlZChlZGl0b3JTdGF0ZSgpKSk7CisgICAgRnJhbWUqIHRhcmdldEZy
YW1lID0gdGFyZ2V0RnJhbWVGb3JFZGl0aW5nKCp0aGlzKTsKKyAgICBpZiAoIXRhcmdldEZyYW1l
IHx8ICF0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFi
bGUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KCp0YXJnZXRGcmFtZSk7Ci0KLSAgICBpZiAocmVwbGFjZW1lbnRMZW5ndGggPiAwKSB7Ci0gICAg
ICAgIC8vIFRoZSBsYXlvdXQgbmVlZHMgdG8gYmUgdXB0b2RhdGUgYmVmb3JlIHNldHRpbmcgYSBz
ZWxlY3Rpb24KLSAgICAgICAgdGFyZ2V0RnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgp
OwotCi0gICAgICAgIEVsZW1lbnQqIHNjb3BlID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBy
ZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0
aChzY29wZSwgcmVwbGFjZW1lbnRTdGFydCwgcmVwbGFjZW1lbnRMZW5ndGgpOwotICAgICAgICB0
YXJnZXRGcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyh0cnVlKTsKLSAg
ICAgICAgdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKCpyZXBsYWNlbWVudFJhbmdlLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwotICAgICAgICB0
YXJnZXRGcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxzZSk7Ci0g
ICAgfQotCi0gICAgdGFyZ2V0RnJhbWUtPmVkaXRvcigpLnNldENvbXBvc2l0aW9uKHRleHQsIHVu
ZGVybGluZXMsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25TdGFydCArIHNlbGVjdGlvbkxlbmd0
aCk7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFZGl0b3JTdGF0ZUNoYW5nZWQo
ZWRpdG9yU3RhdGUoKSkpOwotfQotCi12b2lkIFdlYlBhZ2U6OmNhbmNlbENvbXBvc2l0aW9uKCkK
LXsKLSAgICBpZiAoRnJhbWUqIHRhcmdldEZyYW1lID0gdGFyZ2V0RnJhbWVGb3JFZGl0aW5nKHRo
aXMpKQotICAgICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuY2FuY2VsQ29tcG9zaXRpb24oKTsK
LSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkVkaXRvclN0YXRlQ2hhbmdlZChlZGl0
b3JTdGF0ZSgpKSk7CisgICAgdGFyZ2V0RnJhbWUtPmVkaXRvcigpLnNldENvbXBvc2l0aW9uKHRl
eHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblJhbmdlLmxvY2F0aW9uLCBzZWxlY3Rpb25SYW5nZS5s
b2NhdGlvbiArIHNlbGVjdGlvblJhbmdlLmxlbmd0aCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDcyYmI1NjI0M2ZjLi41YzJh
NjJhNWZhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApA
QCAtNzczLDkgKzc3Myw4IEBAIHB1YmxpYzoKICAgICBTYW5kYm94RXh0ZW5zaW9uVHJhY2tlciYg
c2FuZGJveEV4dGVuc2lvblRyYWNrZXIoKSB7IHJldHVybiBtX3NhbmRib3hFeHRlbnNpb25UcmFj
a2VyOyB9CiAKICNpZiBQTEFURk9STShHVEspCi0gICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGlu
ZT4mIHVuZGVybGluZXMsIHVpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCB1aW50NjRfdCBzZWxlY3Rp
b25FbmQsIHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgdWludDY0X3QgcmVwbGFjZW1l
bnRSYW5nZUxlbmd0aCk7Ci0gICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5n
JiB0ZXh0LCBpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCBpbnQ2NF90IHNlbGVjdGlvbkxlbmd0aCk7
Ci0gICAgdm9pZCBjYW5jZWxDb21wb3NpdGlvbigpOworICAgIHZvaWQgc2V0Q29tcG9zaXRpb24o
Y29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5l
PiYsIGNvbnN0IEVkaXRpbmdSYW5nZSYgc2VsZWN0aW9uUmFuZ2UpOworICAgIHZvaWQgY29uZmly
bUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKICAgICB2b2lkIGNvbGxhcHNlU2Vs
ZWN0aW9uSW5GcmFtZShXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIpOwogICAgIHZvaWQgc2hvd0Vt
b2ppUGlja2VyKFdlYkNvcmU6OkZyYW1lJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCAxOTgwMjhhMjE0NS4uZGMy
NWQ5MDI0YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtNDExLDkgKzQxMSw4IEBAIEdlbmVyYXRlU3ludGhldGlj
RWRpdGluZ0NvbW1hbmQoZW51bTp1aW50OF90IFdlYktpdDo6U3ludGhldGljRWRpdGluZ0NvbW1h
bmRUeXBlCiAgICAgU2V0Q2FuUnVuTW9kYWwoYm9vbCBjYW5SdW5Nb2RhbCkKIAogI2lmIFBMQVRG
T1JNKEdUSykKLSAgICBTZXRDb21wb3NpdGlvbihTdHJpbmcgdGV4dCwgVmVjdG9yPFdlYkNvcmU6
OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1aW50NjRfdCBzZWxlY3Rpb25TdGFy
dCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRfdCByZXBsYWNlbWVudFJhbmdlU3RhcnQs
IHVpbnQ2NF90IHJlcGxhY2VtZW50UmFuZ2VFbmQpCi0gICAgQ29uZmlybUNvbXBvc2l0aW9uKFN0
cmluZyB0ZXh0LCBpbnQ2NF90IHNlbGVjdGlvblN0YXJ0LCBpbnQ2NF90IHNlbGVjdGlvbkxlbmd0
aCkKLSAgICBDYW5jZWxDb21wb3NpdGlvbigpCisgICAgU2V0Q29tcG9zaXRpb24oU3RyaW5nIHRl
eHQsIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lcywgc3Ry
dWN0IFdlYktpdDo6RWRpdGluZ1JhbmdlIHNlbGVjdGlvblJhbmdlKQorICAgIENvbmZpcm1Db21w
b3NpdGlvbihTdHJpbmcgdGV4dCkKIAogICAgIENvbGxhcHNlU2VsZWN0aW9uSW5GcmFtZShXZWJD
b3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCkKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>