<?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>175013</bug_id>
          
          <creation_ts>2017-08-01 01:53:34 -0700</creation_ts>
          <short_desc>Merge ThreadHolder to WTF::Thread itself</short_desc>
          <delta_ts>2017-08-03 11:59:50 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>buildbot</cc>
    
    <cc>mark.lam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1333688</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-01 01:53:34 -0700</bug_when>
    <thetext>By doing so, we can put WTF::Thread* directly to TLS (instead of putting ThreadHolder*, which holds Ref&lt;Thread&gt;).
It reduces one level indirection. Yeah, ThreadHolder design is clean and great, but if this is important part, we should take more efficient design.
Actually, we use fast TLS in some platforms (which is pre-allocated TLS by the system, and we can access it with super fast operation, like using segment registers).
If we can drop one level indirection here, it would be awesome.

TLS -&gt; ThreadHolder* -&gt; Thread*
TLS -&gt; Thread*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334694</commentid>
    <comment_count>1</comment_count>
      <attachid>317098</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-03 00:46:18 -0700</bug_when>
    <thetext>Created attachment 317098
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334696</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-03 00:49:23 -0700</bug_when>
    <thetext>Attachment 317098 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadingWin.cpp:353:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334739</commentid>
    <comment_count>3</comment_count>
      <attachid>317110</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-03 04:23:04 -0700</bug_when>
    <thetext>Created attachment 317110
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334740</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-03 04:24:27 -0700</bug_when>
    <thetext>Attachment 317110 did not pass style-queue:


ERROR: Source/WTF/wtf/ThreadingWin.cpp:350:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334786</commentid>
    <comment_count>5</comment_count>
      <attachid>317110</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-08-03 08:30:44 -0700</bug_when>
    <thetext>Comment on attachment 317110
Patch

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

r=me with issues resolved (including broken windows build) and EWS bots are green.

&gt; Source/WTF/wtf/Threading.h:69
&gt;  class Thread : public ThreadSafeRefCounted&lt;Thread&gt; {

I didn&apos;t think of this before but we need to double check something here: ThreadHolder is not allocated with bmalloc, but ThreadSafeRefCounted is.  Therefore, Thread is also allocated with bmalloc.  We need to make sure that there&apos;s no unsafe interaction between bmalloc and TLS (basically, does bmalloc also depend on TLS ... if so, we need to make sure thread TLS clean up happens before bmalloc TLS clean up).  Otherwise, we need to use a non-bmalloc ThreadSafeRefCounted.

But since this is not an issue introduced in this patch, we can consider fixing it in a subsequent patch (if needed).

&gt; Source/WTF/wtf/Threading.h:240
&gt; +    // Holds Thread in the thread-specific storage. The destructor of current thread TLS reliably destroy Thread.

I would rephrase this as:
The Thread instance is ref&apos;ed and held in thread-specific storage. It will be deref&apos;ed by destructTLS at thread destruction time.

&gt; Source/WTF/wtf/ThreadingPthreads.cpp:477
&gt; +    auto&amp; threadInTLS = thread.leakRef();

I suggest adding a comment before this to say something like:
We leak the ref to keep the Thread alive while it is held in TLS. destructTLS will deref it later at thread destruction time.

&gt; Source/WTF/wtf/ThreadingWin.cpp:314
&gt; +    auto&amp; threadInTLS = thread.leakRef();

Please add the comment here as suggested in ThreadingPthreads about why we leakRef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334844</commentid>
    <comment_count>6</comment_count>
      <attachid>317110</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-03 11:16:53 -0700</bug_when>
    <thetext>Comment on attachment 317110
Patch

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

&gt;&gt; Source/WTF/wtf/Threading.h:69
&gt;&gt;  class Thread : public ThreadSafeRefCounted&lt;Thread&gt; {
&gt; 
&gt; I didn&apos;t think of this before but we need to double check something here: ThreadHolder is not allocated with bmalloc, but ThreadSafeRefCounted is.  Therefore, Thread is also allocated with bmalloc.  We need to make sure that there&apos;s no unsafe interaction between bmalloc and TLS (basically, does bmalloc also depend on TLS ... if so, we need to make sure thread TLS clean up happens before bmalloc TLS clean up).  Otherwise, we need to use a non-bmalloc ThreadSafeRefCounted.
&gt; 
&gt; But since this is not an issue introduced in this patch, we can consider fixing it in a subsequent patch (if needed).

Sounds reasonable. I think bmalloc should do well even in the face of TLS. Otherwise, we cannnot use any values allocated in bmalloc in TLS.
And I think this issue remains even before introducing WTF::Thread. Before that, we used HashMap to manage thread handle and id.
If we remove id from the hash map, the hash map could call delete to the bucket. And since the hash map and its buckets are allocated in bmalloc, yeah, it causes issues.

I&apos;ve checked it in the current macOS. And it turns out that macOS FastTLS is ok because bmalloc&apos;s FastTLS number is smaller than this TLS. (I&apos;ve tested it in my macOS laptop).
But anyway, it&apos;s safer to use non bmalloc things in TLS destroyed related things. I&apos;ll file it separately.

&gt;&gt; Source/WTF/wtf/Threading.h:240
&gt;&gt; +    // Holds Thread in the thread-specific storage. The destructor of current thread TLS reliably destroy Thread.
&gt; 
&gt; I would rephrase this as:
&gt; The Thread instance is ref&apos;ed and held in thread-specific storage. It will be deref&apos;ed by destructTLS at thread destruction time.

OK, fixed.

&gt;&gt; Source/WTF/wtf/ThreadingPthreads.cpp:477
&gt;&gt; +    auto&amp; threadInTLS = thread.leakRef();
&gt; 
&gt; I suggest adding a comment before this to say something like:
&gt; We leak the ref to keep the Thread alive while it is held in TLS. destructTLS will deref it later at thread destruction time.

Sounds fine. Fixed.

&gt;&gt; Source/WTF/wtf/ThreadingWin.cpp:314
&gt;&gt; +    auto&amp; threadInTLS = thread.leakRef();
&gt; 
&gt; Please add the comment here as suggested in ThreadingPthreads about why we leakRef.

OK, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334851</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-03 11:29:21 -0700</bug_when>
    <thetext>Committed r220214: &lt;http://trac.webkit.org/changeset/220214&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334852</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-03 11:30:59 -0700</bug_when>
    <thetext>&lt;rdar://problem/33704658&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334862</commentid>
    <comment_count>9</comment_count>
      <attachid>317110</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-03 11:40:46 -0700</bug_when>
    <thetext>Comment on attachment 317110
Patch

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

&gt;&gt;&gt; Source/WTF/wtf/Threading.h:69
&gt;&gt;&gt;  class Thread : public ThreadSafeRefCounted&lt;Thread&gt; {
&gt;&gt; 
&gt;&gt; I didn&apos;t think of this before but we need to double check something here: ThreadHolder is not allocated with bmalloc, but ThreadSafeRefCounted is.  Therefore, Thread is also allocated with bmalloc.  We need to make sure that there&apos;s no unsafe interaction between bmalloc and TLS (basically, does bmalloc also depend on TLS ... if so, we need to make sure thread TLS clean up happens before bmalloc TLS clean up).  Otherwise, we need to use a non-bmalloc ThreadSafeRefCounted.
&gt;&gt; 
&gt;&gt; But since this is not an issue introduced in this patch, we can consider fixing it in a subsequent patch (if needed).
&gt; 
&gt; Sounds reasonable. I think bmalloc should do well even in the face of TLS. Otherwise, we cannnot use any values allocated in bmalloc in TLS.
&gt; And I think this issue remains even before introducing WTF::Thread. Before that, we used HashMap to manage thread handle and id.
&gt; If we remove id from the hash map, the hash map could call delete to the bucket. And since the hash map and its buckets are allocated in bmalloc, yeah, it causes issues.
&gt; 
&gt; I&apos;ve checked it in the current macOS. And it turns out that macOS FastTLS is ok because bmalloc&apos;s FastTLS number is smaller than this TLS. (I&apos;ve tested it in my macOS laptop).
&gt; But anyway, it&apos;s safer to use non bmalloc things in TLS destroyed related things. I&apos;ll file it separately.

It seems that the current bmalloc is OK with this. Even if bmalloc Cache in TLS is destroyed, it will be re-generated if it becomes necessary (when destroying bmalloc things). And it will be re-destroyed after that.
In the case of macOS, currently, bmalloc TLS is destroyed after the other TLS things are destroyed. I&apos;m not sure it is ensured. But even if it is not ensured, the above mechanism makes it safe.

But this design potentially has several issues.
1. In Windows, TLS revival is not supported. Thus, when porting bmalloc to Windows, we need to do it extra-carefully.
2. If bmalloc Cache is constantly revived, it is simply not efficient. We need to investigate what actually happens especially in Linux platforms. (since macOS uses fast TLS and I ensured it works fine).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334866</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-03 11:59:50 -0700</bug_when>
    <thetext>Committed r220217: &lt;http://trac.webkit.org/changeset/220217&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317098</attachid>
            <date>2017-08-03 00:46:18 -0700</date>
            <delta_ts>2017-08-03 04:23:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175013-20170803164617.patch</filename>
            <type>text/plain</type>
            <size>40867</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwMTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGE1OGU1ZGE4M2M5MWM3N2Q1YWU1YjJl
NmZmNjNiY2VmNWViODM5NjYuLmE5NDI4ODZiMTFkMmYxNjNlZDMzZTYxZDJiNzNiZmE3NWQ5ZWJj
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTctMDgtMDMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgTWVyZ2UgVGhyZWFkSG9sZGVyIHRvIFdURjo6
VGhyZWFkIGl0c2VsZgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc1MDEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ3VycmVudGx5LCB3ZSBzdG9yZSBUaHJlYWRIb2xkZXIqIHRvIHRoZSBUTFMsIGFuZCBU
aHJlYWRIb2xkZXIqIGhvbGRzIFJlZjxUaHJlYWQ+LgorICAgICAgICBXaGVuIHdlIGdldCBUaHJl
YWQmIGZyb20gdGhlIGN1cnJlbnQgdGhyZWFkIFRMUywgd2UgbmVlZCB0byBkZXJlZmVyZW5jZSB0
aGUgVGhyZWFkSG9sZGVyKi4KKyAgICAgICAgSG93ZXZlciwgaWRlYWxseSwgd2UgY2FuIHN0b3Jl
IFRocmVhZCogZGlyZWN0bHkgdG8gdGhlIGN1cnJlbnQgdGhyZWFkIFRMUy4KKyAgICAgICAgV2hp
bGUgdGhlIFRocmVhZEhvbGRlciBkZXNpZ24gaXMgYmVhdXRpZnVsLCBpdCdzIHdvcnRoIG9wdGlt
aXppbmcgYnkgc3RvcmluZyBUaHJlYWQqIGRpcmVjdGx5CisgICAgICAgIHNpbmNlIFRocmVhZDo6
Y3VycmVudCgpIGlzIHNvIGZyZXF1ZW50bHkgZXhlY3V0ZWQuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBtZXJnZXMgVGhyZWFkSG9sZGVyIHRvIFRocmVhZC4gQW5kIHdlIG5vdyBzdG9yZSBUaHJlYWQq
IGRpcmVjdGx5IGluIHRoZSBUTFMuCisgICAgICAgIFdoZW4gc3RvcmluZyBpdCB0byBUTFMsIHdl
IGNhbGwgbGVha1JlZigpIHRvIGtlZXAgVGhyZWFkIHJlZiBjb3VudCBpbmNyZW1lbnRlZCBieSB0
aGUgVExTLgorICAgICAgICBBbmQgd2hlbiBkZXN0cm95aW5nIHRoZSBUTFMsIHdlIGNhbGwgYGRl
cmVmKClgIHRvIGVuc3VyZSB0aGF0IFRocmVhZCogaXMgZGVyZWZlcmVuY2VkIGZyb20KKyAgICAg
ICAgdGhlIFRMUy4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVy
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiB3dGYvVGhyZWFkSG9sZGVyV2luLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFk
aW5nLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjplbnRyeVBvaW50KToKKyAgICAgICAgKFdU
Rjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAg
ICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnRNYXlCZU51bGwpOgorICAgICAgICAoV1RGOjpUaHJl
YWQ6OmN1cnJlbnQpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHA6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpUaHJl
YWQ6OmluaXRpYWxpemVDdXJyZW50VExTKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFs
aXplVExTS2V5KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFsaXplVExTKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpkZXN0cnVjdFRMUyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3Jl
YXRlQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1RocmVhZGluZ1dpbi5j
cHA6CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUTFMpOgorICAgICAg
ICAoV1RGOjp0aHJlYWRNYXBNdXRleCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6
ZVRMU0tleSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudER5aW5nKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpnZXQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmluaXRpYWxpemVUTFMp
OgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRlc3RydWN0VExTKToKKyAgICAgICAgKFdURjo6d2Fp
dEZvclRocmVhZENvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZUN1cnJl
bnRUaHJlYWQpOiBEZWxldGVkLgorCiAyMDE3LTA4LTAyICBZdXN1a2UgU3V6dWtpICA8dXRhdGFu
ZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeCBmb3IgV2lu
ZG93cyBwb3J0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0
YmMyMzc3NWIyMWRlOGE5MmU1OGQ3MzE5YjgwOGZmNjIzZTc5ZWRiLi5jYTllMzc1MmI3YzkxNmVm
MWU4MWM2N2NkZjA2ZDYxY2RlOWVkMTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTExNyw3ICsxMTcsNiBAQAogCQlBOEE0NzQzQzE1MUE4MjVCMDA0MTIz
RkYgLyogU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOEE0NzMyNDE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nQnVpbGRlci5j
cHAgKi87IH07CiAJCUE4QTQ3NDQwMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzI4MTUx
QTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdJbXBsLmNwcCAqLzsgfTsKIAkJQThBNDc0NDUxNTFBODI1
QjAwNDEyM0ZGIC8qIFdURlN0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMyRDE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5nLmNw
cCAqLzsgfTsKLQkJQThBNDc0NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJl
YWRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
QTQ3MzMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgKi87IH07
CiAJCUE4QTQ3NDRBMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzIxNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZGluZy5jcHAgKi87IH07CiAJCUE4QTQ3NDRFMTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOEE0NzMzNjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHRocmVh
ZHMuY3BwICovOyB9OwogCQlBOEE0NzQ1MTE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBo
b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
QTQ3MzNBMTUxQTgyNUIwMDQxMjNGRiAvKiBCaW5hcnlTZW1hcGhvcmUuY3BwICovOyB9OwpAQCAt
MTMyLDcgKzEzMSw2IEBACiAJCURDRUUyMjAzMUNFQTc1NTEwMDBDMjM5NiAvKiBQbGF0Zm9ybVVz
ZXJQcmVmZXJyZWRMYW5ndWFnZXNNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBEQ0VFMjFGRjFDRUE3NTUxMDAwQzIzOTYgLyogUGxhdGZvcm1Vc2Vy
UHJlZmVycmVkTGFuZ3VhZ2VzTWFjLm1tICovOyB9OwogCQlFMTU1NTZGNTE4QTBDQzE4MDA2RjQ4
RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTU1NTZGMzE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRv
Z3JhcGhpY1V0aWxpdGllcy5jcHAgKi87IH07CiAJCUUzMTFGQjE3MUYwQTU2OEIwMDNDMDhERSAv
KiBUaHJlYWRHcm91cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMzExRkIxNTFGMEE1NjhCMDAzQzA4REUgLyogVGhyZWFkR3JvdXAuY3BwICovOyB9
OwotCQlFMzIwMEFCODFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMjAwQUI1MUU5QTUzNkQw
MDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3BwICovOyB9OwogCQlFMzhDNDEyNTFFQjRFMDRDMDA0
Mjk1N0QgLyogQ1BVVGltZUNvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTM4QzQxMjQxRUI0RTA0QzAwNDI5NTdEIC8qIENQVVRpbWVDb2NvYS5t
bSAqLzsgfTsKIAkJRTM4QzQxMjgxRUI0RTA2ODAwNDI5NTdEIC8qIENQVVRpbWUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM4QzQxMjYxRUI0RTA2
ODAwNDI5NTdEIC8qIENQVVRpbWUuY3BwICovOyB9OwogCQlFNDNBNDY5NzFFMjI4QjkxMDAyNzZC
MDUgLyogRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDNBNDY5MjFFMjI4QjkxMDAyNzZCMDUgLyogRGVjb2Rlci5jcHAgKi87IH07CkBA
IC00OTgsNyArNDk2LDYgQEAKIAkJQThBNDczMkMxNTFBODI1QjAwNDEyM0ZGIC8qIFRleHRQb3Np
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0UG9zaXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMkQxNTFBODI1QjAwNDEyM0ZGIC8q
IFdURlN0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXVEZT
dHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMyRTE1MUE4MjVC
MDA0MTIzRkYgLyogV1RGU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdURlN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBOEE0NzMzMDE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMzMjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVhZGluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzMzMTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkaW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzM1MTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRocmVhZGluZ1ByaW1pdGl2ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTU0Niw4ICs1NDMsNiBAQAogCQlFMzExRkIxNTFGMEE1NjhCMDAzQzA4REUgLyogVGhyZWFkR3Jv
dXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkR3JvdXAu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzExRkIxNjFGMEE1NjhCMDAzQzA4
REUgLyogVGhyZWFkR3JvdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhy
ZWFkR3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyMDBBQjQxRTlBNTM2
RDAwM0I1OUQyIC8qIFBsYXRmb3JtUmVnaXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBsYXRmb3JtUmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUUzMjAwQUI1MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkSG9sZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTMyMDBBQjYxRTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhv
bGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRIb2xkZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM4QzQxMjQxRUI0RTA0QzAwNDI5NTdEIC8q
IENQVVRpbWVDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IENQVVRpbWVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM4QzQxMjYx
RUI0RTA2ODAwNDI5NTdEIC8qIENQVVRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ1BVVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUz
OEM0MTI3MUVCNEUwNjgwMDQyOTU3RCAvKiBDUFVUaW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENQVVRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2
OSw5ICs5NjQsNiBAQAogCQkJCTBGQjMxN0MzMUM0ODgwMDEwMDdFMzk1QSAvKiBTeXN0ZW1UcmFj
aW5nLmggKi8sCiAJCQkJRTMxMUZCMTUxRjBBNTY4QjAwM0MwOERFIC8qIFRocmVhZEdyb3VwLmNw
cCAqLywKIAkJCQlFMzExRkIxNjFGMEE1NjhCMDAzQzA4REUgLyogVGhyZWFkR3JvdXAuaCAqLywK
LQkJCQlFMzIwMEFCNTFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmNwcCAqLywKLQkJ
CQlFMzIwMEFCNjFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmggKi8sCi0JCQkJQThB
NDczMzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCAqLywKIAkJ
CQlBOEE0NzMzMjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCAqLywKIAkJCQlBOEE0
NzMzMzE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggKi8sCiAJCQkJQThBNDczMzUxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCAqLywKQEAgLTEzOTYsOCArMTM4
OCw2IEBACiAJCQkJNzBBOTkzRkUxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFDMTgxQzdGMUQzMDc4REEwMEY1RkExNiAvKiBUZXh0QnJl
YWtJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzE4MUM5NjFEMzA4MDBBMDBGNUZB
MTYgLyogVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVU1hYy5tbSBpbiBTb3VyY2VzICovLAot
CQkJCUUzMjAwQUI4MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQThBNDc0NDgxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJl
YWRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDRBMTUxQTgyNUIwMDQxMjNGRiAvKiBU
aHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NEUxNTFBODI1QjAwNDEyM0ZG
IC8qIFRocmVhZGluZ1B0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzMTFGQjE3MUYw
QTU2OEIwMDNDMDhERSAvKiBUaHJlYWRHcm91cC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQKaW5kZXggZWU3NjliNTU3ZTQ3OThiNDBmZjkyMzlhZmJmMjU0MWE4NTZkNjc3Mi4u
N2Y4ZmI3Yzk1Y2Y5ZDk1YWFmMWNjZWVkNzRkYjQ0M2Q4NDU5MmMxNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKQEAgLTEzNyw3ICsxMzcsNiBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBTeXN0ZW1GcmVl
LmgKICAgICBTeXN0ZW1UcmFjaW5nLmgKICAgICBUaHJlYWRHcm91cC5oCi0gICAgVGhyZWFkSG9s
ZGVyLmNwcAogICAgIFRocmVhZE1lc3NhZ2UuaAogICAgIFRocmVhZFNhZmVSZWZDb3VudGVkLmgK
ICAgICBUaHJlYWRTcGVjaWZpYy5oCkBAIC0zNDcsNyArMzQ2LDYgQEAgbGlzdChBUFBFTkQgV1RG
X0xJQlJBUklFUwogaWYgKFdJTjMyKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VSQ0VTCiAgICAg
ICAgIE9TQWxsb2NhdG9yV2luLmNwcAotICAgICAgICBUaHJlYWRIb2xkZXJXaW4uY3BwCiAgICAg
ICAgIFRocmVhZFNwZWNpZmljV2luLmNwcAogICAgICAgICBUaHJlYWRpbmdXaW4uY3BwCiAgICAg
KQpAQCAtMzU3LDcgKzM1NSw2IEBAIGlmIChXSU4zMikKIGVsc2UgKCkKICAgICBsaXN0KEFQUEVO
RCBXVEZfU09VUkNFUwogICAgICAgICBPU0FsbG9jYXRvclBvc2l4LmNwcAotICAgICAgICBUaHJl
YWRIb2xkZXJQdGhyZWFkcy5jcHAKICAgICAgICAgVGhyZWFkaW5nUHRocmVhZHMuY3BwCiAgICAg
KQogZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2YWNiYjFiNmE2M2JiNzgxMzVhN2U4YmRhM2U0OTUwNjc2NDFjMTRmLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZEhvbGRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29t
Pi4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGhyZWFkSG9sZGVyLmgiCi0KLSNpbmNsdWRl
ICJUaHJlYWRpbmcuaCIKLQotbmFtZXNwYWNlIFdURiB7Ci0KLSNpZiAhSEFWRShGQVNUX1RMUykK
LVRocmVhZFNwZWNpZmljS2V5IFRocmVhZEhvbGRlcjo6bV9rZXkgPSBJbnZhbGlkVGhyZWFkU3Bl
Y2lmaWNLZXk7Ci0jZW5kaWYKLQotVGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKCkKLXsKLSAg
ICBtX3RocmVhZC0+ZGlkRXhpdCgpOwotfQotCi1UaHJlYWRIb2xkZXImIFRocmVhZEhvbGRlcjo6
aW5pdGlhbGl6ZUN1cnJlbnQoKQotewotICAgIHJldHVybiBpbml0aWFsaXplKFRocmVhZDo6Y3Jl
YXRlQ3VycmVudFRocmVhZCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhv
bGRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGY4MDA0Yzk1MmUyNDRjYTZi
NWQ2NmQzYTg1YjVhNTU0Mjg2ZTFmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBZdXN1a2UgU3V6dWtp
IDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLS8vIEZJWE1FOiBXZSBpbnRlbnRpb25hbGx5IHVzZSBpZm5k
ZWYgZ3VhcmRzIGluc3RlYWQgb2YgYCNwcmFnbWEgb25jZWAgaGVyZSB0byBhdm9pZCBidWlsZCBm
YWlsdXJlcy4KLS8vIFdURiBoZWFkZXJzIGFyZSBjb3BpZWQgdG8gYnVpbGQgZGlyZWN0b3J5LiBC
YXNlZCBvbiBob3cgd2UgaW5jbHVkZSBoZWFkZXJzLCBXVEYgaGVhZGVycyBtYXkgYmUKLS8vIGlu
Y2x1ZGVkIGZyb20gZWl0aGVyIHNvdXJjZSBkaXJlY3Rvcnkgb3IgYnVpbGQgZGlyZWN0b3J5LiBD
b21waWxlcnMgYXJlIGNvbmZ1c2VkIHdpdGggdGhlaXIKLS8vIHR3byBkaWZmZXJlbnQgcGF0aHMg
YW5kIGluY2x1ZGUgdGhlIHNhbWUgZmlsZSB0d2ljZS4KLS8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQ5ODYKLSNpZm5kZWYgVGhyZWFkSG9sZGVyX2gKLSNkZWZp
bmUgVGhyZWFkSG9sZGVyX2gKLQotI2luY2x1ZGUgPHd0Zi9GYXN0VExTLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZi5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFk
U3BlY2lmaWMuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIFRocmVhZDsKLQotLy8gVGhp
cyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZHMuCi1XVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0KLS8vIEhvbGRzIFRocmVhZCBpbiB0
aGUgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2UuIFRoZSBkZXN0cnVjdG9yIG9mIHRoaXMgaG9sZGVy
IHJlbGlhYmx5IGRlc3Ryb3kgVGhyZWFkLgotLy8gRm9yIHB0aHJlYWQsIGl0IGVtcGxveXMgcHRo
cmVhZHMtc3BlY2lmaWMgMi1wYXNzIGRlc3RydWN0aW9uIHRvIHJlbGlhYmx5IHJlbW92ZSBUaHJl
YWQuCi0vLyBGb3IgV2luZG93cywgd2UgdXNlIHRocmVhZF9sb2NhbCB0byBkZWZlciB0aHJlYWQg
aG9sZGVyIGRlc3RydWN0aW9uLiBJdCBhc3N1bWVzIHJlZ3VsYXIgVGhyZWFkU3BlY2lmaWMKLS8v
IHR5cGVzIGRvbid0IHVzZSBtdWx0aXBsZS1wYXNzIGRlc3RydWN0aW9uLgotY2xhc3MgVGhyZWFk
SG9sZGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRIb2xkZXIpOwotcHVibGlj
OgotICAgIGZyaWVuZCBjbGFzcyBUaHJlYWQ7Ci0gICAgZnJpZW5kIHZvaWQgV1RGOjppbml0aWFs
aXplVGhyZWFkaW5nKCk7Ci0gICAgflRocmVhZEhvbGRlcigpOwotCi0gICAgc3RhdGljIFRocmVh
ZEhvbGRlciYgY3VycmVudCgpOwotCi0gICAgVGhyZWFkJiB0aHJlYWQoKSB7IHJldHVybiBtX3Ro
cmVhZC5nZXQoKTsgfQotCi0jaWYgT1MoV0lORE9XUykKLSAgICBzdGF0aWMgUmVmUHRyPFRocmVh
ZD4gZ2V0KFRocmVhZElkZW50aWZpZXIpOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgVGhyZWFk
SG9sZGVyKFJlZjxUaHJlYWQ+JiYgdGhyZWFkKQotICAgICAgICA6IG1fdGhyZWFkKFdURk1vdmUo
dGhyZWFkKSkKLSAgICAgICAgLCBtX2lzRGVzdHJveWVkT25jZShmYWxzZSkKLSAgICB7Ci0gICAg
fQotCi0gICAgLy8gQ3JlYXRlcyBhbmQgcHV0cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWRIb2xkZXIg
aW50byB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZS4KLSAgICBzdGF0aWMgVGhyZWFkSG9sZGVyJiBp
bml0aWFsaXplKFJlZjxUaHJlYWQ+JiYpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMg
VGhyZWFkSG9sZGVyJiBpbml0aWFsaXplQ3VycmVudCgpOwotCi0jaWYgIUhBVkUoRkFTVF9UTFMp
Ci0gICAgLy8gT25lIHRpbWUgaW5pdGlhbGl6YXRpb24gZm9yIHRoaXMgY2xhc3MgYXMgYSB3aG9s
ZS4KLSAgICAvLyBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaW5pdGlhbGl6ZSgp
IGFuZCBpdCBpcyBub3QgdGhyZWFkLXNhZmUuCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGluaXRpYWxpemVLZXkoKTsKLSNlbmRpZgotCi0gICAgLy8gUmV0dXJucyAwIGlmIHRo
cmVhZC1zcGVjaWZpYyBzdG9yYWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQuCi0gICAgc3RhdGljIFRo
cmVhZEhvbGRlciogY3VycmVudE1heUJlTnVsbCgpOwotCi0jaWYgT1MoV0lORE9XUykKLSAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRocmVhZEhvbGRlciogY3VycmVudER5aW5nKCk7Ci0j
ZW5kaWYKLQotICAgIC8vIFRoaXMgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3IgaXMgY2FsbGVk
IDIgdGltZXMgd2hlbiB0aHJlYWQgdGVybWluYXRlczoKLSAgICAvLyAtIGZpcnN0LCB3aGVuIGFs
bCB0aGUgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIGFyZSBjYWxsZWQsIGl0IHNp
bXBseSByZW1lbWJlcnMgaXQgd2FzICdkZXN0cm95ZWQgb25jZScKLSAgICAvLyBhbmQgKDEpIHJl
LXNldHMgaXRzZWxmIGludG8gdGhlIHRocmVhZC1zcGVjaWZpYyBzbG90IG9yICgyKSBjb25zdHJ1
Y3RzIHRocmVhZCBsb2NhbCB2YWx1ZSB0byBjYWxsIGl0IGFnYWluIGxhdGVyLgotICAgIC8vIC0g
c2Vjb25kLCBhZnRlciBhbGwgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgaW52b2tl
ZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4gLSB0aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUKLSAgICAv
LyBUaHJlYWQgZnJvbSB0aGUgdGhyZWFkTWFwLCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgotICAg
IHN0YXRpYyB2b2lkIFRIUkVBRF9TUEVDSUZJQ19DQUxMIGRlc3RydWN0KHZvaWQqIGRhdGEpOwot
Ci0gICAgUmVmPFRocmVhZD4gbV90aHJlYWQ7Ci0gICAgYm9vbCBtX2lzRGVzdHJveWVkT25jZTsK
LSNpZiAhSEFWRShGQVNUX1RMUykKLSAgICBzdGF0aWMgV1RGX0VYUE9SVERBVEEgVGhyZWFkU3Bl
Y2lmaWNLZXkgbV9rZXk7Ci0jZW5kaWYKLX07Ci0KLWlubGluZSBUaHJlYWRIb2xkZXIqIFRocmVh
ZEhvbGRlcjo6Y3VycmVudE1heUJlTnVsbCgpCi17Ci0jaWYgIUhBVkUoRkFTVF9UTFMpCi0gICAg
QVNTRVJUKG1fa2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KHRocmVhZFNwZWNpZmljR2V0KG1fa2V5KSk7Ci0jZWxz
ZQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUaHJlYWRIb2xkZXIqPihfcHRocmVhZF9nZXRzcGVj
aWZpY19kaXJlY3QoV1RGX1RIUkVBRF9EQVRBX0tFWSkpOwotI2VuZGlmCi19Ci0KLWlubGluZSBU
aHJlYWRIb2xkZXImIFRocmVhZEhvbGRlcjo6Y3VycmVudCgpCi17Ci0gICAgLy8gV1JUIFdlYkNv
cmU6Ci0gICAgLy8gICAgVGhyZWFkSG9sZGVyIGlzIHVzZWQgb24gbWFpbiB0aHJlYWQgYmVmb3Jl
IGl0IGNvdWxkIHBvc3NpYmx5IGJlIHVzZWQKLSAgICAvLyAgICBvbiBzZWNvbmRhcnkgb25lcywg
c28gdGhlcmUgaXMgbm8gbmVlZCBmb3Igc3luY2hyb25pemF0aW9uIGhlcmUuCi0gICAgLy8gV1JU
IEphdmFTY3JpcHRDb3JlOgotICAgIC8vICAgIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZUtleSgp
IGlzIGluaXRpYWxseSBjYWxsZWQgZnJvbSBpbml0aWFsaXplVGhyZWFkaW5nKCksIGVuc3VyaW5n
Ci0gICAgLy8gICAgdGhpcyBpcyBpbml0aWFsbHkgY2FsbGVkIGluIGEgcHRocmVhZF9vbmNlIGxv
Y2tlZCBjb250ZXh0LgotI2lmICFIQVZFKEZBU1RfVExTKQotICAgIGlmIChVTkxJS0VMWShUaHJl
YWRIb2xkZXI6Om1fa2V5ID09IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSkpCi0gICAgICAgIFdU
Rjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotI2VuZGlmCi0gICAgaWYgKGF1dG8qIGhvbGRlciA9
IGN1cnJlbnRNYXlCZU51bGwoKSkKLSAgICAgICAgcmV0dXJuICpob2xkZXI7Ci0jaWYgT1MoV0lO
RE9XUykKLSAgICBpZiAoYXV0byogaG9sZGVyID0gY3VycmVudER5aW5nKCkpCi0gICAgICAgIHJl
dHVybiAqaG9sZGVyOwotI2VuZGlmCi0gICAgcmV0dXJuIGluaXRpYWxpemVDdXJyZW50KCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotI2VuZGlmIC8vIFRocmVhZEhvbGRlcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDY4OGY5ZTU2ZWY0MjcyOTNkNjBjMzg3MjVkYjY5YzViYTEyMmUzNTIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFk
SG9sZGVyUHRocmVhZHMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRocmVhZEhvbGRlci5oIgotCi0jaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotI2lmICFIQVZFKEZB
U1RfVExTKQotdm9pZCBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemVLZXkoKQotewotICAgIHRocmVh
ZFNwZWNpZmljS2V5Q3JlYXRlKCZtX2tleSwgZGVzdHJ1Y3QpOwotfQotI2VuZGlmCi0KLVRocmVh
ZEhvbGRlciYgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKFJlZjxUaHJlYWQ+JiYgdGhyZWFkKQot
ewotICAgIGF1dG8qIGhvbGRlciA9IG5ldyBUaHJlYWRIb2xkZXIoV1RGTW92ZSh0aHJlYWQpKTsK
LSNpZiAhSEFWRShGQVNUX1RMUykKLSAgICBBU1NFUlQobV9rZXkgIT0gSW52YWxpZFRocmVhZFNw
ZWNpZmljS2V5KTsKLSAgICB0aHJlYWRTcGVjaWZpY1NldChtX2tleSwgaG9sZGVyKTsKLSNlbHNl
Ci0gICAgX3B0aHJlYWRfc2V0c3BlY2lmaWNfZGlyZWN0KFdURl9USFJFQURfREFUQV9LRVksIGhv
bGRlcik7Ci0gICAgcHRocmVhZF9rZXlfaW5pdF9ucChXVEZfVEhSRUFEX0RBVEFfS0VZLCAmZGVz
dHJ1Y3QpOwotI2VuZGlmCi0gICAgcmV0dXJuICpob2xkZXI7Ci19Ci0KLXZvaWQgVGhyZWFkSG9s
ZGVyOjpkZXN0cnVjdCh2b2lkKiBkYXRhKQotewotICAgIFRocmVhZEhvbGRlciogaG9sZGVyID0g
c3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4oZGF0YSk7Ci0gICAgQVNTRVJUKGhvbGRlcik7Ci0K
LSAgICBpZiAoaG9sZGVyLT5tX2lzRGVzdHJveWVkT25jZSkgewotICAgICAgICBkZWxldGUgaG9s
ZGVyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaG9sZGVyLT5tX2lzRGVzdHJveWVk
T25jZSA9IHRydWU7Ci0gICAgLy8gUmUtc2V0dGluZyB0aGUgdmFsdWUgZm9yIGtleSBjYXVzZXMg
YW5vdGhlciBkZXN0cnVjdCgpIGNhbGwgYWZ0ZXIgYWxsIG90aGVyIHRocmVhZC1zcGVjaWZpYyBk
ZXN0cnVjdG9ycyB3ZXJlIGNhbGxlZC4KLSNpZiAhSEFWRShGQVNUX1RMUykKLSAgICBBU1NFUlQo
bV9rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5KTsKLSAgICB0aHJlYWRTcGVjaWZpY1Nl
dChtX2tleSwgaG9sZGVyKTsKLSNlbHNlCi0gICAgX3B0aHJlYWRfc2V0c3BlY2lmaWNfZGlyZWN0
KFdURl9USFJFQURfREFUQV9LRVksIGhvbGRlcik7Ci0gICAgcHRocmVhZF9rZXlfaW5pdF9ucChX
VEZfVEhSRUFEX0RBVEFfS0VZLCAmZGVzdHJ1Y3QpOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyV2luLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlcldpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAzNDEzMTNmODY2NjFmMzBlMTY2ZTU3M2UyOWQyMjQ3OWZjZDg5ODMuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYv
VGhyZWFkSG9sZGVyV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJUaHJlYWRIb2xkZXIuaCIKLQotI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotI2RlZmluZSBJbnZhbGlkVGhyZWFk
SG9sZGVyICgoVGhyZWFkSG9sZGVyKikoMHhiYmFkYmVlZikpCi0KLXN0YXRpYyBzdGQ6Om11dGV4
JiB0aHJlYWRNYXBNdXRleCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6bXV0
ZXg+IG11dGV4OwotICAgIHJldHVybiBtdXRleC5nZXQoKTsKLX0KLQotc3RhdGljIEhhc2hNYXA8
VGhyZWFkSWRlbnRpZmllciwgVGhyZWFkSG9sZGVyKj4mIHRocmVhZE1hcCgpCi17Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8VGhyZWFkSWRlbnRpZmllciwgVGhyZWFkSG9sZGVy
Kj4+IG1hcDsKLSAgICByZXR1cm4gbWFwLmdldCgpOwotfQotCi12b2lkIFRocmVhZEhvbGRlcjo6
aW5pdGlhbGl6ZUtleSgpCi17Ci0gICAgdGhyZWFkTWFwTXV0ZXgoKTsKLSAgICB0aHJlYWRNYXAo
KTsKLSAgICB0aHJlYWRTcGVjaWZpY0tleUNyZWF0ZSgmbV9rZXksIGRlc3RydWN0KTsKLX0KLQot
VGhyZWFkSG9sZGVyKiBUaHJlYWRIb2xkZXI6OmN1cnJlbnREeWluZygpCi17Ci0gICAgQVNTRVJU
KG1fa2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSk7Ci0gICAgLy8gQWZ0ZXIgRkxTIGlz
IGRlc3Ryb3llZCwgdGhpcyBtYXAgb2ZmZXJzIHRoZSB2YWx1ZSB1bnRpbCB0aGUgc2Vjb25kIHRo
cmVhZCBleGl0IGNhbGxiYWNrIGlzIGNhbGxlZC4KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwotICAgIHJldHVybiB0aHJlYWRNYXAoKS5n
ZXQoY3VycmVudFRocmVhZCgpKTsKLX0KLQotLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdvcmthcm91
bmQgY29kZSBvbmNlIDxyZGFyOi8vcHJvYmxlbS8zMTc5MzIxMz4gaXMgZml4ZWQuCi1SZWZQdHI8
VGhyZWFkPiBUaHJlYWRIb2xkZXI6OmdldChUaHJlYWRJZGVudGlmaWVyIGlkKQotewotICAgIHN0
ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAg
VGhyZWFkSG9sZGVyKiBob2xkZXIgPSB0aHJlYWRNYXAoKS5nZXQoaWQpOwotICAgIGlmIChob2xk
ZXIpCi0gICAgICAgIHJldHVybiAmaG9sZGVyLT50aHJlYWQoKTsKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotVGhyZWFkSG9sZGVyJiBUaHJlYWRIb2xkZXI6OmluaXRpYWxpemUoUmVmPFRocmVh
ZD4mJiB0aHJlYWQpCi17Ci0gICAgQVNTRVJUKG1fa2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZp
Y0tleSk7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdvcmthcm91bmQgY29kZSBvbmNlIDxy
ZGFyOi8vcHJvYmxlbS8zMTc5MzIxMz4gaXMgZml4ZWQuCi0gICAgYXV0byBpZCA9IHRocmVhZC0+
aWQoKTsKLSAgICBhdXRvKiBob2xkZXIgPSBuZXcgVGhyZWFkSG9sZGVyKFdURk1vdmUodGhyZWFk
KSk7Ci0gICAgdGhyZWFkU3BlY2lmaWNTZXQobV9rZXksIGhvbGRlcik7Ci0gICAgewotICAgICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOwot
ICAgICAgICB0aHJlYWRNYXAoKS5hZGQoaWQsIGhvbGRlcik7Ci0gICAgfQotICAgIHJldHVybiAq
aG9sZGVyOwotfQotCi12b2lkIFRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3Qodm9pZCogZGF0YSkKLXsK
LSAgICBpZiAoZGF0YSA9PSBJbnZhbGlkVGhyZWFkSG9sZGVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBUaHJlYWRIb2xkZXIqIGhvbGRlciA9IHN0YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KGRh
dGEpOwotICAgIEFTU0VSVChob2xkZXIpOwotCi0gICAgLy8gRGVsYXkgdGhlIGRlYWxsb2NhdGlv
biBvZiBUaHJlYWRIb2xkZXIgbW9yZS4KLSAgICAvLyBJdCBkZWZlcnMgVGhyZWFkSG9sZGVyIGRl
YWxsb2NhdGlvbiBhZnRlciB0aGUgb3RoZXIgVGhyZWFkU3BlY2lmaWMgdmFsdWVzIGFyZSBkZWFs
bG9jYXRlZC4KLSAgICBzdGF0aWMgdGhyZWFkX2xvY2FsIGNsYXNzIFRocmVhZEV4aXRDYWxsYmFj
ayB7Ci0gICAgcHVibGljOgotICAgICAgICBUaHJlYWRFeGl0Q2FsbGJhY2soVGhyZWFkSG9sZGVy
KiBob2xkZXIpCi0gICAgICAgICAgICA6IG1faG9sZGVyKGhvbGRlcikKLSAgICAgICAgewotICAg
ICAgICB9Ci0KLSAgICAgICAgflRocmVhZEV4aXRDYWxsYmFjaygpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3QobV9ob2xkZXIpOwotICAgICAgICB9Ci0KLSAg
ICBwcml2YXRlOgotICAgICAgICBUaHJlYWRIb2xkZXIqIG1faG9sZGVyOwotICAgIH0gY2FsbGJh
Y2soaG9sZGVyKTsKLQotICAgIGlmIChob2xkZXItPm1faXNEZXN0cm95ZWRPbmNlKSB7Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIodGhy
ZWFkTWFwTXV0ZXgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQodGhyZWFkTWFwKCkuY29udGFpbnMo
aG9sZGVyLT5tX3RocmVhZC0+aWQoKSkpOwotICAgICAgICAgICAgdGhyZWFkTWFwKCkucmVtb3Zl
KGhvbGRlci0+bV90aHJlYWQtPmlkKCkpOwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZSBob2xk
ZXI7Ci0KLSAgICAgICAgLy8gRmlsbCB0aGUgRkxTIHdpdGggdGhlIG5vbi1udWxscHRyIHZhbHVl
LiBXaGlsZSBGTFMgZGVzdHJ1Y3RvciB3b24ndCBiZSBjYWxsZWQgZm9yIHRoYXQsCi0gICAgICAg
IC8vIG5vbi1udWxscHRyIHZhbHVlIHRlbGxzIHVzIHRoYXQgd2UgYWxyZWFkeSBkZXN0cnVjdGVk
IFRocmVhZEhvbGRlci4gVGhpcyBhbGxvd3MgdXMgdG8KLSAgICAgICAgLy8gZGV0ZWN0IGluY29y
cmVjdCB1c2Ugb2YgVGhyZWFkOjpjdXJyZW50KCkgYWZ0ZXIgdGhpcyBwb2ludCBiZWNhdXNlIGl0
IHdpbGwgY3Jhc2guCi0gICAgICAgIHRocmVhZFNwZWNpZmljU2V0KG1fa2V5LCBJbnZhbGlkVGhy
ZWFkSG9sZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB0aHJlYWRTcGVjaWZpY1Nl
dChtX2tleSwgSW52YWxpZFRocmVhZEhvbGRlcik7Ci0gICAgaG9sZGVyLT5tX2lzRGVzdHJveWVk
T25jZSA9IHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKaW5k
ZXggZGM4MDM4NmJmYjgzNGQyZDc2ZGY0M2U1M2ZhOTcwNzQyMGM0ZWYxYS4uMGJlNWExMGVkMGY3
MjVmOGQzZTE3ZTFjZjE5YWIyMDlhOTAwYTgyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
VGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuY3BwCkBAIC0zNCw3
ICszNCw2IEBACiAjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1Jh
bmRvbU51bWJlclNlZWQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkR3JvdXAuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkSG9sZGVyLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZE1lc3NhZ2UuaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZ1RhYmxlLmg+CkBAIC0xMTMsMTMgKzExMiwxMiBAQCB2b2lkIFRocmVhZDo6ZW50
cnlQb2ludChOZXdUaHJlYWRDb250ZXh0KiBuZXdUaHJlYWRDb250ZXh0KQogICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIoY29udGV4dC0+bXV0ZXgpOwogICAgICAgICBBU1NFUlQoY29udGV4dC0+
c3RhZ2UgPT0gTmV3VGhyZWFkQ29udGV4dDo6U3RhZ2U6OkVzdGFibGlzaGVkSGFuZGxlKTsKIAot
ICAgICAgICAvLyBJbml0aWFsaXplIHRocmVhZCBob2xkZXIgd2l0aCBlc3RhYmxpc2hlZCBJRC4K
LSAgICAgICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplKGNvbnRleHQtPnRocmVhZC5jb3B5UmVm
KCkpOwotCiAgICAgICAgIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRJbnRlcm5hbChj
b250ZXh0LT5uYW1lKTsKICAgICAgICAgZnVuY3Rpb24gPSBXVEZNb3ZlKGNvbnRleHQtPmVudHJ5
UG9pbnQpOwogICAgICAgICBjb250ZXh0LT50aHJlYWQtPmluaXRpYWxpemVJblRocmVhZCgpOwog
CisgICAgICAgIFRocmVhZDo6aW5pdGlhbGl6ZVRMUyhXVEZNb3ZlKGNvbnRleHQtPnRocmVhZCkp
OworCiAjaWYgIUhBVkUoU1RBQ0tfQk9VTkRTX0ZPUl9ORVdfVEhSRUFEKQogICAgICAgICAvLyBB
Y2sgY29tcGxldGlvbiBvZiBpbml0aWFsaXphdGlvbiB0byB0aGUgY3JlYXRpbmcgdGhyZWFkLgog
ICAgICAgICBjb250ZXh0LT5zdGFnZSA9IE5ld1RocmVhZENvbnRleHQ6OlN0YWdlOjpJbml0aWFs
aXplZDsKQEAgLTI3OCwxMyArMjc2LDE3IEBAIHZvaWQgVGhyZWFkOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CiAgICAgb3V0LnByaW50KG1faWQpOwogfQogCisjaWYgIUhBVkUoRkFTVF9U
TFMpCitUaHJlYWRTcGVjaWZpY0tleSBUaHJlYWQ6OnNfa2V5ID0gSW52YWxpZFRocmVhZFNwZWNp
ZmljS2V5OworI2VuZGlmCisKIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiB7Ci0gICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVLZXk7Ci0gICAgc3RkOjpjYWxsX29uY2UoaW5p
dGlhbGl6ZUtleSwgW10geworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAg
IHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKICAgICAgICAgaW5pdGlhbGl6ZVJhbmRvbU51
bWJlckdlbmVyYXRvcigpOwogI2lmICFIQVZFKEZBU1RfVExTKQotICAgICAgICBUaHJlYWRIb2xk
ZXI6OmluaXRpYWxpemVLZXkoKTsKKyAgICAgICAgVGhyZWFkOjppbml0aWFsaXplVExTS2V5KCk7
CiAjZW5kaWYKICAgICAgICAgaW5pdGlhbGl6ZURhdGVzKCk7CiAgICAgICAgIFRocmVhZDo6aW5p
dGlhbGl6ZVBsYXRmb3JtVGhyZWFkaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IDg4MDQ3NjU2MDFm
OWNlZWY4NWM4OGZmN2NiMGJjNzE4OGYyMWZlN2IuLjU3ZWZhYmQyMjI2NGZkMzU1ZWI4ODQ4ODE0
OTI2Y2RlYmNjZWFlYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCkBAIC0zNSwxMyArMzUsMTUgQEAKICNpbmNs
dWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9F
eHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0VExTLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0
aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvU3RhY2tCb3Vu
ZHMuaD4KICNpbmNsdWRlIDx3dGYvU3RhY2tTdGF0cy5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRI
b2xkZXIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZiBV
U0UoUFRIUkVBRFMpICYmICFPUyhEQVJXSU4pCkBAIC02MCwxNCArNjIsMTYgQEAgdXNpbmcgQXRv
bWljU3RyaW5nVGFibGVEZXN0cnVjdG9yID0gdm9pZCAoKikoQXRvbWljU3RyaW5nVGFibGUqKTsK
IGVudW0gY2xhc3MgVGhyZWFkR3JvdXBBZGRSZXN1bHQ7CiAKIGNsYXNzIFRocmVhZEdyb3VwOwot
Y2xhc3MgVGhyZWFkSG9sZGVyOwogY2xhc3MgUHJpbnRTdHJlYW07CiAKKy8vIFRoaXMgZnVuY3Rp
b24gY2FuIGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWRzLgorV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgaW5pdGlhbGl6ZVRocmVhZGluZygpOworCiBjbGFzcyBUaHJlYWQgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8VGhyZWFkPiB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFRocmVh
ZEdyb3VwOwotICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRIb2xkZXI7CiAgICAgZnJpZW5kIGNsYXNz
IEF0b21pY1N0cmluZ1RhYmxlOworICAgIGZyaWVuZCB2b2lkIFdURjo6aW5pdGlhbGl6ZVRocmVh
ZGluZygpOwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5UaHJlYWQoKTsKIApAQCAtNzYsNyAr
ODAsNyBAQCBjbGFzcyBUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFk
PiB7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBjcmVhdGUo
Y29uc3QgY2hhciogdGhyZWFkTmFtZSwgRnVuY3Rpb248dm9pZCgpPiYmKTsKIAogICAgIC8vIFJl
dHVybnMgVGhyZWFkIG9iamVjdC4KLSAgICBzdGF0aWMgVGhyZWFkJiBjdXJyZW50KCkgeyByZXR1
cm4gVGhyZWFkSG9sZGVyOjpjdXJyZW50KCkudGhyZWFkKCk7IH0KKyAgICBzdGF0aWMgVGhyZWFk
JiBjdXJyZW50KCk7CiAKICAgICAvLyBSZXR1cm5zIFRocmVhZElkZW50aWZpZXIgZGlyZWN0bHku
IEl0IGlzIHVzZWZ1bCBpZiB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IGlkZW50aXR5CiAgICAg
Ly8gb2YgdGhyZWFkcy4gQXQgdGhhdCB0aW1lLCB1c2VycyBzaG91bGQga25vdyB0aGF0IGhvbGRp
bmcgdGhpcyBUaHJlYWRJZGVudGlmaWVyIGRvZXMgbm90IGVuc3VyZQpAQCAtMTkzLDcgKzE5Nyw2
IEBAIGNsYXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsK
IHByb3RlY3RlZDoKICAgICBUaHJlYWQoKTsKIAotICAgIHN0YXRpYyBSZWY8VGhyZWFkPiBjcmVh
dGVDdXJyZW50VGhyZWFkKCk7CiAgICAgdm9pZCBpbml0aWFsaXplSW5UaHJlYWQoKTsKIAogICAg
IC8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNpZmljIFRocmVhZCBlc3RhYmxpc2htZW50IGltcGxl
bWVudGF0aW9uLgpAQCAtMjM1LDYgKzIzOCwzNyBAQCBjbGFzcyBUaHJlYWQgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8VGhyZWFkPiB7CiAgICAgVGhyZWFkR3JvdXBBZGRSZXN1bHQgYWRk
VG9UaHJlYWRHcm91cChjb25zdCBBYnN0cmFjdExvY2tlciYgdGhyZWFkR3JvdXBMb2NrZXIsIFRo
cmVhZEdyb3VwJik7CiAgICAgdm9pZCByZW1vdmVGcm9tVGhyZWFkR3JvdXAoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIHRocmVhZEdyb3VwTG9ja2VyLCBUaHJlYWRHcm91cCYpOwogCisgICAgLy8gSG9s
ZHMgVGhyZWFkIGluIHRoZSB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZS4gVGhlIGRlc3RydWN0b3Ig
b2YgY3VycmVudCB0aHJlYWQgVExTIHJlbGlhYmx5IGRlc3Ryb3kgVGhyZWFkLgorICAgIC8vIEZv
ciBwdGhyZWFkLCBpdCBlbXBsb3lzIHB0aHJlYWRzLXNwZWNpZmljIDItcGFzcyBkZXN0cnVjdGlv
biB0byByZWxpYWJseSByZW1vdmUgVGhyZWFkLgorICAgIC8vIEZvciBXaW5kb3dzLCB3ZSB1c2Ug
dGhyZWFkX2xvY2FsIHRvIGRlZmVyIHRocmVhZCBUTFMgZGVzdHJ1Y3Rpb24uIEl0IGFzc3VtZXMg
cmVndWxhciBUaHJlYWRTcGVjaWZpYworICAgIC8vIHR5cGVzIGRvbid0IHVzZSBtdWx0aXBsZS1w
YXNzIGRlc3RydWN0aW9uLgorCisjaWYgIUhBVkUoRkFTVF9UTFMpCisgICAgc3RhdGljIFdURl9F
WFBPUlREQVRBIFRocmVhZFNwZWNpZmljS2V5IHNfa2V5OworICAgIC8vIE9uZSB0aW1lIGluaXRp
YWxpemF0aW9uIGZvciB0aGlzIGNsYXNzIGFzIGEgd2hvbGUuCisgICAgLy8gVGhpcyBtZXRob2Qg
bXVzdCBiZSBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemVUTFMoKSBhbmQgaXQgaXMgbm90IHRocmVh
ZC1zYWZlLgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUTFNLZXkoKTsKKyNlbmRpZgorCisg
ICAgLy8gQ3JlYXRlcyBhbmQgcHV0cyBhbiBpbnN0YW5jZSBvZiBUaHJlYWQgaW50byB0aHJlYWQt
c3BlY2lmaWMgc3RvcmFnZS4KKyAgICBzdGF0aWMgVGhyZWFkJiBpbml0aWFsaXplVExTKFJlZjxU
aHJlYWQ+JiYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgVGhyZWFkJiBpbml0aWFs
aXplQ3VycmVudFRMUygpOworCisgICAgLy8gUmV0dXJucyBudWxscHRyIGlmIHRocmVhZC1zcGVj
aWZpYyBzdG9yYWdlIHdhcyBub3QgaW5pdGlhbGl6ZWQuCisgICAgc3RhdGljIFRocmVhZCogY3Vy
cmVudE1heUJlTnVsbCgpOworCisjaWYgT1MoV0lORE9XUykKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFRocmVhZCogY3VycmVudER5aW5nKCk7CisgICAgc3RhdGljIFJlZlB0cjxUaHJl
YWQ+IGdldChUaHJlYWRJZGVudGlmaWVyKTsKKyNlbmRpZgorCisgICAgLy8gVGhpcyB0aHJlYWQt
c3BlY2lmaWMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3aGVuIHRocmVhZCB0ZXJtaW5h
dGVzOgorICAgIC8vIC0gZmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhlciB0aHJlYWQtc3BlY2lmaWMg
ZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVtYmVycyBpdCB3YXMgJ2Rlc3Ry
b3llZCBvbmNlJworICAgIC8vIGFuZCAoMSkgcmUtc2V0cyBpdHNlbGYgaW50byB0aGUgdGhyZWFk
LXNwZWNpZmljIHNsb3Qgb3IgKDIpIGNvbnN0cnVjdHMgdGhyZWFkIGxvY2FsIHZhbHVlIHRvIGNh
bGwgaXQgYWdhaW4gbGF0ZXIuCisgICAgLy8gLSBzZWNvbmQsIGFmdGVyIGFsbCB0aHJlYWQtc3Bl
Y2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBpbnZva2VkLCBpdCBnZXRzIGNhbGxlZCBhZ2FpbiAtIHRo
aXMgdGltZSwgd2UgcmVtb3ZlIHRoZQorICAgIC8vIFRocmVhZCBmcm9tIHRoZSB0aHJlYWRNYXAs
IGNvbXBsZXRpbmcgdGhlIGNsZWFudXAuCisgICAgc3RhdGljIHZvaWQgVEhSRUFEX1NQRUNJRklD
X0NBTEwgZGVzdHJ1Y3RUTFModm9pZCogZGF0YSk7CisKICAgICAvLyBXb3JkTG9jayAmIExvY2sg
cmVseSBvbiBUaHJlYWRTcGVjaWZpYy4gQnV0IFRocmVhZCBvYmplY3QgY2FuIGJlIGRlc3Ryb3ll
ZCBldmVuIGFmdGVyIFRocmVhZFNwZWNpZmljIHRoaW5ncyBhcmUgZGVzdHJveWVkLgogICAgIHN0
ZDo6bXV0ZXggbV9tdXRleDsKICAgICBUaHJlYWRJZGVudGlmaWVyIG1faWQgeyAwIH07CkBAIC0y
NDMsNiArMjc3LDcgQEAgY2xhc3MgVGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFRocmVhZD4gewogICAgIFZlY3RvcjxzdGQ6OndlYWtfcHRyPFRocmVhZEdyb3VwPj4gbV90aHJl
YWRHcm91cHM7CiAgICAgYm9vbCBtX2lzU2h1dHRpbmdEb3duIHsgZmFsc2UgfTsKICAgICBib29s
IG1fZGlkRXhpdCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzRGVzdHJveWVkT25jZSB7IGZhbHNl
IH07CiAgICAgUGxhdGZvcm1UaHJlYWRIYW5kbGUgbV9oYW5kbGU7CiAjaWYgT1MoREFSV0lOKQog
ICAgIG1hY2hfcG9ydF90IG1fcGxhdGZvcm1UaHJlYWQ7CkBAIC0yNjksNiArMzA0LDM3IEBAIGlu
bGluZSBUaHJlYWRJZGVudGlmaWVyIGN1cnJlbnRUaHJlYWQoKQogICAgIHJldHVybiBUaHJlYWQ6
OmN1cnJlbnRJRCgpOwogfQogCitpbmxpbmUgVGhyZWFkKiBUaHJlYWQ6OmN1cnJlbnRNYXlCZU51
bGwoKQoreworI2lmICFIQVZFKEZBU1RfVExTKQorICAgIEFTU0VSVChzX2tleSAhPSBJbnZhbGlk
VGhyZWFkU3BlY2lmaWNLZXkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUaHJlYWQqPih0aHJl
YWRTcGVjaWZpY0dldChzX2tleSkpOworI2Vsc2UKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhy
ZWFkKj4oX3B0aHJlYWRfZ2V0c3BlY2lmaWNfZGlyZWN0KFdURl9USFJFQURfREFUQV9LRVkpKTsK
KyNlbmRpZgorfQorCitpbmxpbmUgVGhyZWFkJiBUaHJlYWQ6OmN1cnJlbnQoKQoreworICAgIC8v
IFdSVCBXZWJDb3JlOgorICAgIC8vICAgIFRocmVhZDo6Y3VycmVudCgpIGlzIHVzZWQgb24gbWFp
biB0aHJlYWQgYmVmb3JlIGl0IGNvdWxkIHBvc3NpYmx5IGJlIHVzZWQKKyAgICAvLyAgICBvbiBz
ZWNvbmRhcnkgb25lcywgc28gdGhlcmUgaXMgbm8gbmVlZCBmb3Igc3luY2hyb25pemF0aW9uIGhl
cmUuCisgICAgLy8gV1JUIEphdmFTY3JpcHRDb3JlOgorICAgIC8vICAgIFRocmVhZDo6aW5pdGlh
bGl6ZVRMU0tleSgpIGlzIGluaXRpYWxseSBjYWxsZWQgZnJvbSBpbml0aWFsaXplVGhyZWFkaW5n
KCksIGVuc3VyaW5nCisgICAgLy8gICAgdGhpcyBpcyBpbml0aWFsbHkgY2FsbGVkIGluIGEgcHRo
cmVhZF9vbmNlIGxvY2tlZCBjb250ZXh0LgorI2lmICFIQVZFKEZBU1RfVExTKQorICAgIGlmIChV
TkxJS0VMWShUaHJlYWQ6OnNfa2V5ID09IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSkpCisgICAg
ICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworI2VuZGlmCisgICAgaWYgKGF1dG8qIHRo
cmVhZCA9IGN1cnJlbnRNYXlCZU51bGwoKSkKKyAgICAgICAgcmV0dXJuICp0aHJlYWQ7CisjaWYg
T1MoV0lORE9XUykKKyAgICBpZiAoYXV0byogdGhyZWFkID0gY3VycmVudER5aW5nKCkpCisgICAg
ICAgIHJldHVybiAqdGhyZWFkOworI2VuZGlmCisgICAgcmV0dXJuIGluaXRpYWxpemVDdXJyZW50
VExTKCk7Cit9CisKIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyByZW1haW4gYmVj
YXVzZSB0aGV5IGFyZSB1c2VkIGZyb20gV2ViS2l0IFdpbmRvd3Mgc3VwcG9ydCBsaWJyYXJ5LAog
Ly8gV2ViS2l0UXVhcnR6Q29yZUFkZGl0aW9ucy5kbGwuIFdoZW4gdXBkYXRpbmcgdGhlIHN1cHBv
cnQgbGlicmFyeSwgd2Ugc2hvdWxkIHVzZSBuZXcgQVBJIGluc3RlYWQKIC8vIGFuZCB0aGUgZm9s
bG93aW5nIHdvcmthb3VuZCBzaG91bGQgYmUgcmVtb3ZlZC4gQW5kIG5ldyBjb2RlIHNob3VsZCBu
b3QgdXNlIHRoZSBmb2xsb3dpbmcgQVBJcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNw
cAppbmRleCAyZTBmYmNlYTY2ODczNmRjMDg2ZTNiZjRiYTBjYTZiZmU5NzFmOWJmLi4xNzMzM2Fh
MTc5ZTFkM2E3OTMxMTdhNjZmYjg5OGZkMjZhNTU5ZDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5n
UHRocmVhZHMuY3BwCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSA8d3RmL1Jhd1BvaW50ZXIu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZEdy
b3VwLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZEhvbGRlci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmdQcmltaXRpdmVzLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmRMb2NrLmg+CiAKQEAgLTI2OCw3
ICsyNjcsNyBAQCBpbnQgVGhyZWFkOjp3YWl0Rm9yQ29tcGxldGlvbigpCiAgICAgQVNTRVJUKGpv
aW5hYmxlU3RhdGUoKSA9PSBKb2luYWJsZSk7CiAKICAgICAvLyBJZiB0aGUgdGhyZWFkIGhhcyBh
bHJlYWR5IGV4aXRlZCwgdGhlbiBkbyBub3RoaW5nLiBJZiB0aGUgdGhyZWFkIGhhc24ndCBleGl0
ZWQgeWV0LCB0aGVuIGp1c3Qgc2lnbmFsIHRoYXQgd2UndmUgYWxyZWFkeSBqb2luZWQgb24gaXQu
Ci0gICAgLy8gSW4gYm90aCBjYXNlcywgVGhyZWFkSG9sZGVyOjpkZXN0cnVjdCgpIHdpbGwgdGFr
ZSBjYXJlIG9mIGRlc3Ryb3lpbmcgVGhyZWFkLgorICAgIC8vIEluIGJvdGggY2FzZXMsIFRocmVh
ZDo6ZGVzdHJ1Y3RUTFMoKSB3aWxsIHRha2UgY2FyZSBvZiBkZXN0cm95aW5nIFRocmVhZC4KICAg
ICBpZiAoIWhhc0V4aXRlZCgpKQogICAgICAgICBkaWRKb2luKCk7CiAKQEAgLTI4NiwxNSArMjg1
LDE1IEBAIHZvaWQgVGhyZWFkOjpkZXRhY2goKQogICAgICAgICBkaWRCZWNvbWVEZXRhY2hlZCgp
OwogfQogCi0KLVJlZjxUaHJlYWQ+IFRocmVhZDo6Y3JlYXRlQ3VycmVudFRocmVhZCgpCitUaHJl
YWQmIFRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUTFMoKQogewogICAgIC8vIE5vdCBhIFdURi1j
cmVhdGVkIHRocmVhZCwgVGhyZWFkSWRlbnRpZmllciBpcyBub3QgZXN0YWJsaXNoZWQgeWV0Lgog
ICAgIFJlZjxUaHJlYWQ+IHRocmVhZCA9IGFkb3B0UmVmKCpuZXcgVGhyZWFkKCkpOwogICAgIHRo
cmVhZC0+ZXN0YWJsaXNoUGxhdGZvcm1TcGVjaWZpY0hhbmRsZShwdGhyZWFkX3NlbGYoKSk7CiAg
ICAgdGhyZWFkLT5pbml0aWFsaXplSW5UaHJlYWQoKTsKICAgICBpbml0aWFsaXplQ3VycmVudFRo
cmVhZEV2ZW5JZk5vbldURkNyZWF0ZWQoKTsKLSAgICByZXR1cm4gdGhyZWFkOworCisgICAgcmV0
dXJuIGluaXRpYWxpemVUTFMoV1RGTW92ZSh0aHJlYWQpKTsKIH0KIAogVGhyZWFkSWRlbnRpZmll
ciBUaHJlYWQ6OmN1cnJlbnRJRCgpCkBAIC00MzksNiArNDM4LDQ4IEBAIHZvaWQgVGhyZWFkOjpl
c3RhYmxpc2hQbGF0Zm9ybVNwZWNpZmljSGFuZGxlKHB0aHJlYWRfdCBoYW5kbGUpCiAgICAgfQog
fQogCisjaWYgIUhBVkUoRkFTVF9UTFMpCit2b2lkIFRocmVhZDo6aW5pdGlhbGl6ZVRMU0tleSgp
Cit7CisgICAgdGhyZWFkU3BlY2lmaWNLZXlDcmVhdGUoJnNfa2V5LCBkZXN0cnVjdFRMUyk7Cit9
CisjZW5kaWYKKworVGhyZWFkJiBUaHJlYWQ6OmluaXRpYWxpemVUTFMoUmVmPFRocmVhZD4mJiB0
aHJlYWQpCit7CisgICAgYXV0byYgdGhyZWFkSW5UTFMgPSB0aHJlYWQubGVha1JlZigpOworI2lm
ICFIQVZFKEZBU1RfVExTKQorICAgIEFTU0VSVChzX2tleSAhPSBJbnZhbGlkVGhyZWFkU3BlY2lm
aWNLZXkpOworICAgIHRocmVhZFNwZWNpZmljU2V0KHNfa2V5LCAmdGhyZWFkSW5UTFMpOworI2Vs
c2UKKyAgICBfcHRocmVhZF9zZXRzcGVjaWZpY19kaXJlY3QoV1RGX1RIUkVBRF9EQVRBX0tFWSwg
JnRocmVhZEluVExTKTsKKyAgICBwdGhyZWFkX2tleV9pbml0X25wKFdURl9USFJFQURfREFUQV9L
RVksICZkZXN0cnVjdFRMUyk7CisjZW5kaWYKKyAgICByZXR1cm4gdGhyZWFkSW5UTFM7Cit9CisK
K3ZvaWQgVGhyZWFkOjpkZXN0cnVjdFRMUyh2b2lkKiBkYXRhKQoreworICAgIFRocmVhZCogdGhy
ZWFkID0gc3RhdGljX2Nhc3Q8VGhyZWFkKj4oZGF0YSk7CisgICAgQVNTRVJUKHRocmVhZCk7CisK
KyAgICBpZiAodGhyZWFkLT5tX2lzRGVzdHJveWVkT25jZSkgeworICAgICAgICB0aHJlYWQtPmRp
ZEV4aXQoKTsKKyAgICAgICAgdGhyZWFkLT5kZXJlZigpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgdGhyZWFkLT5tX2lzRGVzdHJveWVkT25jZSA9IHRydWU7CisgICAgLy8gUmUtc2V0
dGluZyB0aGUgdmFsdWUgZm9yIGtleSBjYXVzZXMgYW5vdGhlciBkZXN0cnVjdFRMUygpIGNhbGwg
YWZ0ZXIgYWxsIG90aGVyIHRocmVhZC1zcGVjaWZpYyBkZXN0cnVjdG9ycyB3ZXJlIGNhbGxlZC4K
KyNpZiAhSEFWRShGQVNUX1RMUykKKyAgICBBU1NFUlQoc19rZXkgIT0gSW52YWxpZFRocmVhZFNw
ZWNpZmljS2V5KTsKKyAgICB0aHJlYWRTcGVjaWZpY1NldChzX2tleSwgdGhyZWFkKTsKKyNlbHNl
CisgICAgX3B0aHJlYWRfc2V0c3BlY2lmaWNfZGlyZWN0KFdURl9USFJFQURfREFUQV9LRVksIHRo
cmVhZCk7CisgICAgcHRocmVhZF9rZXlfaW5pdF9ucChXVEZfVEhSRUFEX0RBVEFfS0VZLCAmZGVz
dHJ1Y3RUTFMpOworI2VuZGlmCit9CisKIE11dGV4OjpNdXRleCgpCiB7CiAgICAgcHRocmVhZF9t
dXRleGF0dHJfdCBhdHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2lu
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKaW5kZXggNTVhYmIzZDYzYjRl
YzI0ZmJlZDFiODZjMzMyOTlmODBiMjQyOTUzNS4uY2EwMmMxMDE0MWM4MjZjYmQxM2RlMDVhMzM5
NmZjNDA4YWZmYjRhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCkBAIC05Niw3ICs5Niw2IEBA
CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRI
b2xkZXIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCiBuYW1lc3Bh
Y2UgV1RGIHsKQEAgLTI0Myw3ICsyNDIsNyBAQCBzaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMo
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykKICAgICByZXR1cm4gc2l6ZW9mKENPTlRFWFQp
OwogfQogCi1SZWY8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUN1cnJlbnRUaHJlYWQoKQorVGhyZWFk
JiBUaHJlYWQ6OmluaXRpYWxpemVDdXJyZW50VExTKCkKIHsKICAgICAvLyBOb3QgYSBXVEYtY3Jl
YXRlZCB0aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHlldC4KICAg
ICBSZWY8VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZigqbmV3IFRocmVhZCgpKTsKQEAgLTI1NSw3
ICsyNTQsOCBAQCBSZWY8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUN1cnJlbnRUaHJlYWQoKQogICAg
IHRocmVhZC0+ZXN0YWJsaXNoUGxhdGZvcm1TcGVjaWZpY0hhbmRsZShoYW5kbGUsIGN1cnJlbnRJ
RCgpKTsKICAgICB0aHJlYWQtPmluaXRpYWxpemVJblRocmVhZCgpOwogICAgIGluaXRpYWxpemVD
dXJyZW50VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpOwotICAgIHJldHVybiB0aHJlYWQ7CisK
KyAgICByZXR1cm4gaW5pdGlhbGl6ZVRMUyhXVEZNb3ZlKHRocmVhZCkpOwogfQogCiBUaHJlYWRJ
ZGVudGlmaWVyIFRocmVhZDo6Y3VycmVudElEKCkKQEAgLTI3MCw2ICsyNzAsMTA0IEBAIHZvaWQg
VGhyZWFkOjplc3RhYmxpc2hQbGF0Zm9ybVNwZWNpZmljSGFuZGxlKEhBTkRMRSBoYW5kbGUsIFRo
cmVhZElkZW50aWZpZXIgdGhyCiAgICAgbV9pZCA9IHRocmVhZElEOwogfQogCisjZGVmaW5lIElu
dmFsaWRUaHJlYWQgKChUaHJlYWQqKSgweGJiYWRiZWVmKSkKKworc3RhdGljIHN0ZDo6bXV0ZXgm
IHRocmVhZE1hcE11dGV4KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjptdXRl
eD4gbXV0ZXg7CisgICAgcmV0dXJuIG11dGV4LmdldCgpOworfQorCitzdGF0aWMgSGFzaE1hcDxU
aHJlYWRJZGVudGlmaWVyLCBUaHJlYWQqPiYgdGhyZWFkTWFwKCkKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBUaHJlYWQqPj4gbWFwOworICAg
IHJldHVybiBtYXAuZ2V0KCk7Cit9CisKK3ZvaWQgVGhyZWFkOjppbml0aWFsaXplVExTS2V5KCkK
K3sKKyAgICB0aHJlYWRNYXBNdXRleCgpOworICAgIHRocmVhZE1hcCgpOworICAgIHRocmVhZFNw
ZWNpZmljS2V5Q3JlYXRlKCZzX2tleSwgZGVzdHJ1Y3RUTFMpOworfQorCitUaHJlYWQqIFRocmVh
ZDo6Y3VycmVudER5aW5nKCkKK3sKKyAgICBBU1NFUlQoc19rZXkgIT0gSW52YWxpZFRocmVhZFNw
ZWNpZmljS2V5KTsKKyAgICAvLyBBZnRlciBGTFMgaXMgZGVzdHJveWVkLCB0aGlzIG1hcCBvZmZl
cnMgdGhlIHZhbHVlIHVudGlsIHRoZSBzZWNvbmQgdGhyZWFkIGV4aXQgY2FsbGJhY2sgaXMgY2Fs
bGVkLgorICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIodGhyZWFkTWFwTXV0
ZXgoKSk7CisgICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChjdXJyZW50VGhyZWFkKCkpOworfQor
CisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd29ya2Fyb3VuZCBjb2RlIG9uY2UgPHJkYXI6Ly9wcm9i
bGVtLzMxNzkzMjEzPiBpcyBmaXhlZC4KK1JlZlB0cjxUaHJlYWQ+IFRocmVhZDo6Z2V0KFRocmVh
ZElkZW50aWZpZXIgaWQpCit7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tl
cih0aHJlYWRNYXBNdXRleCgpKTsKKyAgICBUaHJlYWQqIHRocmVhZCA9IHRocmVhZE1hcCgpLmdl
dChpZCk7CisgICAgaWYgKHRocmVhZCkKKyAgICAgICAgcmV0dXJuIHRocmVhZDsKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmluaXRpYWxpemVUTFMoUmVmPFRocmVh
ZD4mJiB0aHJlYWQpCit7CisgICAgQVNTRVJUKHNfa2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZp
Y0tleSk7CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdvcmthcm91bmQgY29kZSBvbmNlIDxy
ZGFyOi8vcHJvYmxlbS8zMTc5MzIxMz4gaXMgZml4ZWQuCisgICAgYXV0byBpZCA9IHRocmVhZC0+
aWQoKTsKKyAgICBhdXRvJiB0aHJlYWRJblRMUyA9IHRocmVhZC5sZWFrUmVmKCk7CisgICAgdGhy
ZWFkU3BlY2lmaWNTZXQoc19rZXksICZ0aHJlYWRJblRMUyk7CisgICAgeworICAgICAgICBzdGQ6
OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOworICAgICAg
ICB0aHJlYWRNYXAoKS5hZGQoaWQsICZ0aHJlYWRJblRMUyk7CisgICAgfQorICAgIHJldHVybiB0
aHJlYWRJblRMUzsKK30KKwordm9pZCBUaHJlYWQ6OmRlc3RydWN0VExTKHZvaWQqIGRhdGEpCit7
CisgICAgaWYgKGRhdGEgPT0gSW52YWxpZFRocmVhZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
VGhyZWFkKiB0aHJlYWQgPSBzdGF0aWNfY2FzdDxUaHJlYWQqPihkYXRhKTsKKyAgICBBU1NFUlQo
dGhyZWFkKTsKKworICAgIC8vIERlbGF5IHRoZSBkZWFsbG9jYXRpb24gb2YgVGhyZWFkIG1vcmUu
CisgICAgLy8gSXQgZGVmZXJzIFRocmVhZCBkZWFsbG9jYXRpb24gYWZ0ZXIgdGhlIG90aGVyIFRo
cmVhZFNwZWNpZmljIHZhbHVlcyBhcmUgZGVhbGxvY2F0ZWQuCisgICAgc3RhdGljIHRocmVhZF9s
b2NhbCBjbGFzcyBUaHJlYWRFeGl0Q2FsbGJhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGhy
ZWFkRXhpdENhbGxiYWNrKFRocmVhZCogdGhyZWFkKQorICAgICAgICAgICAgOiBtX3RocmVhZCh0
aHJlYWQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5UaHJlYWRFeGl0Q2FsbGJh
Y2soKQorICAgICAgICB7CisgICAgICAgICAgICBUaHJlYWQ6OmRlc3RydWN0VExTKG1fdGhyZWFk
KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVGhyZWFkKiBtX3RocmVhZDsK
KyAgICB9IGNhbGxiYWNrKHRocmVhZCk7CisKKyAgICBpZiAodGhyZWFkLT5tX2lzRGVzdHJveWVk
T25jZSkgeworICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRl
eD4gbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOworICAgICAgICAgICAgQVNTRVJUKHRocmVhZE1h
cCgpLmNvbnRhaW5zKHRocmVhZC0+bV90aHJlYWQtPmlkKCkpKTsKKyAgICAgICAgICAgIHRocmVh
ZE1hcCgpLnJlbW92ZSh0aHJlYWQtPm1fdGhyZWFkLT5pZCgpKTsKKyAgICAgICAgfQorICAgICAg
ICB0aHJlYWQtPmRpZEV4aXQoKTsKKyAgICAgICAgdGhyZWFkLT5kZXJlZigpOworCisgICAgICAg
IC8vIEZpbGwgdGhlIEZMUyB3aXRoIHRoZSBub24tbnVsbHB0ciB2YWx1ZS4gV2hpbGUgRkxTIGRl
c3RydWN0b3Igd29uJ3QgYmUgY2FsbGVkIGZvciB0aGF0LAorICAgICAgICAvLyBub24tbnVsbHB0
ciB2YWx1ZSB0ZWxscyB1cyB0aGF0IHdlIGFscmVhZHkgZGVzdHJ1Y3RlZCBUaHJlYWQuIFRoaXMg
YWxsb3dzIHVzIHRvCisgICAgICAgIC8vIGRldGVjdCBpbmNvcnJlY3QgdXNlIG9mIFRocmVhZDo6
Y3VycmVudCgpIGFmdGVyIHRoaXMgcG9pbnQgYmVjYXVzZSBpdCB3aWxsIGNyYXNoLgorICAgICAg
ICB0aHJlYWRTcGVjaWZpY1NldChzX2tleSwgSW52YWxpZFRocmVhZCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgdGhyZWFkU3BlY2lmaWNTZXQoc19rZXksIEludmFsaWRUaHJlYWQpOwor
ICAgIHRocmVhZC0+bV9pc0Rlc3Ryb3llZE9uY2UgPSB0cnVlOworfQorCiBNdXRleDo6TXV0ZXgo
KQogewogICAgIG1fbXV0ZXgubV9yZWN1cnNpb25Db3VudCA9IDA7CkBAIC01MDksNyArNjA3LDcg
QEAgaW50IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQp
CiAgICAgLy8gaXQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG5ldyBjb2RlLgogICAgIEFTU0VSVCh0
aHJlYWRJRCk7CiAKLSAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWRIb2xkZXI6Omdl
dCh0aHJlYWRJRCk7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpnZXQodGhy
ZWFkSUQpOwogICAgIGlmICghdGhyZWFkKSB7CiAgICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRl
bnRpZmllciAldSBkaWQgbm90IGNvcnJlc3BvbmQgdG8gYW4gYWN0aXZlIHRocmVhZCB3aGVuIHRy
eWluZyB0byBxdWl0IiwgdGhyZWFkSUQpOwogICAgICAgICByZXR1cm4gV0FJVF9GQUlMRUQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317110</attachid>
            <date>2017-08-03 04:23:04 -0700</date>
            <delta_ts>2017-08-03 08:30:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175013-20170803202303.patch</filename>
            <type>text/plain</type>
            <size>41089</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwMjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDAxYTE3NzUwNTA5ZDgwODkyYzU4Y2Y4
NzNlZjgxODcwOThmMDYxOTAuLmZiYzgyMDc4NTUyMzljYzI1MmRmMjlhMWE3MDM1YzU2NzQ1MGI4
M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDUgKzEsNTMgQEAKIDIwMTctMDgtMDMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CiAKKyAgICAgICAgTWVyZ2UgVGhyZWFkSG9sZGVyIHRvIFdURjo6
VGhyZWFkIGl0c2VsZgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTc1MDEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ3VycmVudGx5LCB3ZSBzdG9yZSBUaHJlYWRIb2xkZXIqIHRvIHRoZSBUTFMsIGFuZCBU
aHJlYWRIb2xkZXIqIGhvbGRzIFJlZjxUaHJlYWQ+LgorICAgICAgICBXaGVuIHdlIGdldCBUaHJl
YWQmIGZyb20gdGhlIGN1cnJlbnQgdGhyZWFkIFRMUywgd2UgbmVlZCB0byBkZXJlZmVyZW5jZSB0
aGUgVGhyZWFkSG9sZGVyKi4KKyAgICAgICAgSG93ZXZlciwgaWRlYWxseSwgd2UgY2FuIHN0b3Jl
IFRocmVhZCogZGlyZWN0bHkgdG8gdGhlIGN1cnJlbnQgdGhyZWFkIFRMUy4KKyAgICAgICAgV2hp
bGUgdGhlIFRocmVhZEhvbGRlciBkZXNpZ24gaXMgYmVhdXRpZnVsLCBpdCdzIHdvcnRoIG9wdGlt
aXppbmcgYnkgc3RvcmluZyBUaHJlYWQqIGRpcmVjdGx5CisgICAgICAgIHNpbmNlIFRocmVhZDo6
Y3VycmVudCgpIGlzIHNvIGZyZXF1ZW50bHkgZXhlY3V0ZWQuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBtZXJnZXMgVGhyZWFkSG9sZGVyIHRvIFRocmVhZC4gQW5kIHdlIG5vdyBzdG9yZSBUaHJlYWQq
IGRpcmVjdGx5IGluIHRoZSBUTFMuCisgICAgICAgIFdoZW4gc3RvcmluZyBpdCB0byBUTFMsIHdl
IGNhbGwgbGVha1JlZigpIHRvIGtlZXAgVGhyZWFkIHJlZiBjb3VudCBpbmNyZW1lbnRlZCBieSB0
aGUgVExTLgorICAgICAgICBBbmQgd2hlbiBkZXN0cm95aW5nIHRoZSBUTFMsIHdlIGNhbGwgYGRl
cmVmKClgIHRvIGVuc3VyZSB0aGF0IFRocmVhZCogaXMgZGVyZWZlcmVuY2VkIGZyb20KKyAgICAg
ICAgdGhlIFRMUy4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVy
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiB3dGYvVGhyZWFkSG9sZGVyV2luLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvVGhyZWFk
aW5nLmNwcDoKKyAgICAgICAgKFdURjo6VGhyZWFkOjplbnRyeVBvaW50KToKKyAgICAgICAgKFdU
Rjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAg
ICAgICAoV1RGOjpUaHJlYWQ6OmN1cnJlbnRNYXlCZU51bGwpOgorICAgICAgICAoV1RGOjpUaHJl
YWQ6OmN1cnJlbnQpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHA6CisgICAg
ICAgIChXVEY6OlRocmVhZDo6d2FpdEZvckNvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpUaHJl
YWQ6OmluaXRpYWxpemVDdXJyZW50VExTKToKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFs
aXplVExTS2V5KToKKyAgICAgICAgKFdURjo6VGhyZWFkOjppbml0aWFsaXplVExTKToKKyAgICAg
ICAgKFdURjo6VGhyZWFkOjpkZXN0cnVjdFRMUyk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3Jl
YXRlQ3VycmVudFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1RocmVhZGluZ1dpbi5j
cHA6CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6ZUN1cnJlbnRUTFMpOgorICAgICAg
ICAoV1RGOjp0aHJlYWRNYXBNdXRleCk6CisgICAgICAgIChXVEY6OlRocmVhZDo6aW5pdGlhbGl6
ZVRMU0tleSk6CisgICAgICAgIChXVEY6OlRocmVhZDo6Y3VycmVudER5aW5nKToKKyAgICAgICAg
KFdURjo6VGhyZWFkOjpnZXQpOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmluaXRpYWxpemVUTFMp
OgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmRlc3RydWN0VExTKToKKyAgICAgICAgKFdURjo6d2Fp
dEZvclRocmVhZENvbXBsZXRpb24pOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OmNyZWF0ZUN1cnJl
bnRUaHJlYWQpOiBEZWxldGVkLgorCisyMDE3LTA4LTAzICBZdXN1a2UgU3V6dWtpICA8dXRhdGFu
ZS50ZWFAZ21haWwuY29tPgorCiAgICAgICAgIFtMaW51eF1bV1RGXSBVc2Ugb25lIGdsb2JhbCBz
ZW1hcGhvcmUgdG8gbm90aWZ5IHRocmVhZCBzdXNwZW5kIGFuZCByZXN1bWUgY29tcGxldGlvbgog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MTI0CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDRiYzIzNzc1YjIx
ZGU4YTkyZTU4ZDczMTliODA4ZmY2MjNlNzllZGIuLmNhOWUzNzUyYjdjOTE2ZWYxZTgxYzY3Y2Rm
MDZkNjFjZGU5ZWQxNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTE3LDcgKzExNyw2IEBACiAJCUE4QTQ3NDNDMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJp
bmdCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4QTQ3MzI0MTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdCdWlsZGVyLmNwcCAqLzsgfTsK
IAkJQThBNDc0NDAxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMjgxNTFBODI1QjAwNDEy
M0ZGIC8qIFN0cmluZ0ltcGwuY3BwICovOyB9OwogCQlBOEE0NzQ0NTE1MUE4MjVCMDA0MTIzRkYg
LyogV1RGU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzJEMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZTdHJpbmcuY3BwICovOyB9Owot
CQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMzAxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZEhvbGRlclB0aHJlYWRzLmNwcCAqLzsgfTsKIAkJQThBNDc0
NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMzMjE1MUE4MjVCMDA0MTIzRkYgLyogVGhy
ZWFkaW5nLmNwcCAqLzsgfTsKIAkJQThBNDc0NEUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGlu
Z1B0aHJlYWRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4QTQ3MzM2MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgKi87
IH07CiAJCUE4QTQ3NDUxMTUxQTgyNUIwMDQxMjNGRiAvKiBCaW5hcnlTZW1hcGhvcmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczM0ExNTFB
ODI1QjAwNDEyM0ZGIC8qIEJpbmFyeVNlbWFwaG9yZS5jcHAgKi87IH07CkBAIC0xMzIsNyArMTMx
LDYgQEAKIAkJRENFRTIyMDMxQ0VBNzU1MTAwMEMyMzk2IC8qIFBsYXRmb3JtVXNlclByZWZlcnJl
ZExhbmd1YWdlc01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IERDRUUyMUZGMUNFQTc1NTEwMDBDMjM5NiAvKiBQbGF0Zm9ybVVzZXJQcmVmZXJyZWRM
YW5ndWFnZXNNYWMubW0gKi87IH07CiAJCUUxNTU1NkY1MThBMENDMTgwMDZGNDhGQiAvKiBDcnlw
dG9ncmFwaGljVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxNTU1NkYzMThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRp
bGl0aWVzLmNwcCAqLzsgfTsKIAkJRTMxMUZCMTcxRjBBNTY4QjAwM0MwOERFIC8qIFRocmVhZEdy
b3VwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
MTFGQjE1MUYwQTU2OEIwMDNDMDhERSAvKiBUaHJlYWRHcm91cC5jcHAgKi87IH07Ci0JCUUzMjAw
QUI4MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMyMDBBQjUxRTlBNTM2RDAwM0I1OUQyIC8q
IFRocmVhZEhvbGRlci5jcHAgKi87IH07CiAJCUUzOEM0MTI1MUVCNEUwNEMwMDQyOTU3RCAvKiBD
UFVUaW1lQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMzhDNDEyNDFFQjRFMDRDMDA0Mjk1N0QgLyogQ1BVVGltZUNvY29hLm1tICovOyB9Owog
CQlFMzhDNDEyODFFQjRFMDY4MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzhDNDEyNjFFQjRFMDY4MDA0Mjk1N0Qg
LyogQ1BVVGltZS5jcHAgKi87IH07CiAJCUU0M0E0Njk3MUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNv
ZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
M0E0NjkyMUUyMjhCOTEwMDI3NkIwNSAvKiBEZWNvZGVyLmNwcCAqLzsgfTsKQEAgLTQ5OCw3ICs0
OTYsNiBAQAogCQlBOEE0NzMyQzE1MUE4MjVCMDA0MTIzRkYgLyogVGV4dFBvc2l0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRQb3NpdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMyRDE1MUE4MjVCMDA0MTIzRkYgLyogV1RGU3RyaW5n
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdURlN0cmluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzJFMTUxQTgyNUIwMDQxMjNGRiAv
KiBXVEZTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV1RGU3RyaW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzMwMTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUaHJlYWRIb2xkZXJQdGhyZWFkcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE4QTQ3MzMyMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkaW5nLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzMxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGlu
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMzUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZGluZ1ByaW1pdGl2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFk
aW5nUHJpbWl0aXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ2LDggKzU0
Myw2IEBACiAJCUUzMTFGQjE1MUYwQTU2OEIwMDNDMDhERSAvKiBUaHJlYWRHcm91cC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRHcm91cC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMTFGQjE2MUYwQTU2OEIwMDNDMDhERSAvKiBUaHJl
YWRHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRHcm91cC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzIwMEFCNDFFOUE1MzZEMDAzQjU5RDIg
LyogUGxhdGZvcm1SZWdpc3RlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGxhdGZvcm1SZWdpc3RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTMyMDBB
QjUxRTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRIb2xkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlFMzIwMEFCNjFFOUE1MzZEMDAzQjU5RDIgLyogVGhyZWFkSG9sZGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZEhvbGRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFMzhDNDEyNDFFQjRFMDRDMDA0Mjk1N0QgLyogQ1BVVGltZUNv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ1BVVGltZUNv
Y29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzhDNDEyNjFFQjRFMDY4MDA0
Mjk1N0QgLyogQ1BVVGltZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDUFVUaW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM4QzQxMjcxRUI0
RTA2ODAwNDI5NTdEIC8qIENQVVRpbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ1BVVGltZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTY5LDkgKzk2NCw2
IEBACiAJCQkJMEZCMzE3QzMxQzQ4ODAwMTAwN0UzOTVBIC8qIFN5c3RlbVRyYWNpbmcuaCAqLywK
IAkJCQlFMzExRkIxNTFGMEE1NjhCMDAzQzA4REUgLyogVGhyZWFkR3JvdXAuY3BwICovLAogCQkJ
CUUzMTFGQjE2MUYwQTU2OEIwMDNDMDhERSAvKiBUaHJlYWRHcm91cC5oICovLAotCQkJCUUzMjAw
QUI1MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuY3BwICovLAotCQkJCUUzMjAwQUI2
MUU5QTUzNkQwMDNCNTlEMiAvKiBUaHJlYWRIb2xkZXIuaCAqLywKLQkJCQlBOEE0NzMzMDE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwICovLAogCQkJCUE4QTQ3MzMy
MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuY3BwICovLAogCQkJCUE4QTQ3MzMzMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCAqLywKIAkJCQlBOEE0NzMzNTE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oICovLApAQCAtMTM5Niw4ICsxMzg4LDYgQEAKIAkJ
CQk3MEE5OTNGRTFBRDcxNTEzMDBGQTYxNUIgLyogU3ltYm9sUmVnaXN0cnkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUMxODFDN0YxRDMwNzhEQTAwRjVGQTE2IC8qIFRleHRCcmVha0l0ZXJhdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDMTgxQzk2MUQzMDgwMEEwMEY1RkExNiAvKiBUZXh0
QnJlYWtJdGVyYXRvckludGVybmFsSUNVTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJRTMyMDBB
QjgxRTlBNTM2RDAwM0I1OUQyIC8qIFRocmVhZEhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSG9sZGVyUHRocmVhZHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NEExNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0RTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
aW5nUHRocmVhZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMxMUZCMTcxRjBBNTY4QjAwM0Mw
OERFIC8qIFRocmVhZEdyb3VwLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApp
bmRleCBlZTc2OWI1NTdlNDc5OGI0MGZmOTIzOWFmYmYyNTQxYTg1NmQ2NzcyLi43ZjhmYjdjOTVj
ZjlkOTVhYWYxY2NlZWQ3NGRiNDQzZDg0NTkyYzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAt
MTM3LDcgKzEzNyw2IEBAIHNldChXVEZfSEVBREVSUwogICAgIFN5c3RlbUZyZWUuaAogICAgIFN5
c3RlbVRyYWNpbmcuaAogICAgIFRocmVhZEdyb3VwLmgKLSAgICBUaHJlYWRIb2xkZXIuY3BwCiAg
ICAgVGhyZWFkTWVzc2FnZS5oCiAgICAgVGhyZWFkU2FmZVJlZkNvdW50ZWQuaAogICAgIFRocmVh
ZFNwZWNpZmljLmgKQEAgLTM0Nyw3ICszNDYsNiBAQCBsaXN0KEFQUEVORCBXVEZfTElCUkFSSUVT
CiBpZiAoV0lOMzIpCiAgICAgbGlzdChBUFBFTkQgV1RGX1NPVVJDRVMKICAgICAgICAgT1NBbGxv
Y2F0b3JXaW4uY3BwCi0gICAgICAgIFRocmVhZEhvbGRlcldpbi5jcHAKICAgICAgICAgVGhyZWFk
U3BlY2lmaWNXaW4uY3BwCiAgICAgICAgIFRocmVhZGluZ1dpbi5jcHAKICAgICApCkBAIC0zNTcs
NyArMzU1LDYgQEAgaWYgKFdJTjMyKQogZWxzZSAoKQogICAgIGxpc3QoQVBQRU5EIFdURl9TT1VS
Q0VTCiAgICAgICAgIE9TQWxsb2NhdG9yUG9zaXguY3BwCi0gICAgICAgIFRocmVhZEhvbGRlclB0
aHJlYWRzLmNwcAogICAgICAgICBUaHJlYWRpbmdQdGhyZWFkcy5jcHAKICAgICApCiBlbmRpZiAo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmNwcCBiL1NvdXJjZS9X
VEYvd3RmL1RocmVhZEhvbGRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZh
Y2JiMWI2YTYzYmI3ODEzNWE3ZThiZGEzZTQ5NTA2NzY0MWMxNGYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVy
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUaHJlYWRIb2xkZXIuaCIKLQotI2luY2x1ZGUgIlRocmVhZGlu
Zy5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLQotI2lmICFIQVZFKEZBU1RfVExTKQotVGhyZWFkU3Bl
Y2lmaWNLZXkgVGhyZWFkSG9sZGVyOjptX2tleSA9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleTsK
LSNlbmRpZgotCi1UaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQotewotICAgIG1fdGhyZWFk
LT5kaWRFeGl0KCk7Ci19Ci0KLVRocmVhZEhvbGRlciYgVGhyZWFkSG9sZGVyOjppbml0aWFsaXpl
Q3VycmVudCgpCi17Ci0gICAgcmV0dXJuIGluaXRpYWxpemUoVGhyZWFkOjpjcmVhdGVDdXJyZW50
VGhyZWFkKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZEhvbGRlci5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZjgwMDRjOTUyZTI0NGNhNmI1ZDY2ZDNhODVi
NWE1NTQyODZlMWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gRklYTUU6IFdlIGludGVudGlvbmFsbHkgdXNlIGlmbmRlZiBndWFyZHMg
aW5zdGVhZCBvZiBgI3ByYWdtYSBvbmNlYCBoZXJlIHRvIGF2b2lkIGJ1aWxkIGZhaWx1cmVzLgot
Ly8gV1RGIGhlYWRlcnMgYXJlIGNvcGllZCB0byBidWlsZCBkaXJlY3RvcnkuIEJhc2VkIG9uIGhv
dyB3ZSBpbmNsdWRlIGhlYWRlcnMsIFdURiBoZWFkZXJzIG1heSBiZQotLy8gaW5jbHVkZWQgZnJv
bSBlaXRoZXIgc291cmNlIGRpcmVjdG9yeSBvciBidWlsZCBkaXJlY3RvcnkuIENvbXBpbGVycyBh
cmUgY29uZnVzZWQgd2l0aCB0aGVpcgotLy8gdHdvIGRpZmZlcmVudCBwYXRocyBhbmQgaW5jbHVk
ZSB0aGUgc2FtZSBmaWxlIHR3aWNlLgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NDk4NgotI2lmbmRlZiBUaHJlYWRIb2xkZXJfaAotI2RlZmluZSBUaHJlYWRI
b2xkZXJfaAotCi0jaW5jbHVkZSA8d3RmL0Zhc3RUTFMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5o
PgotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgVGhyZWFkOwotCi0vLyBUaGlzIGZ1bmN0aW9u
IGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkcy4KLVdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGluaXRpYWxpemVUaHJlYWRpbmcoKTsKLQotLy8gSG9sZHMgVGhyZWFkIGluIHRoZSB0aHJlYWQt
c3BlY2lmaWMgc3RvcmFnZS4gVGhlIGRlc3RydWN0b3Igb2YgdGhpcyBob2xkZXIgcmVsaWFibHkg
ZGVzdHJveSBUaHJlYWQuCi0vLyBGb3IgcHRocmVhZCwgaXQgZW1wbG95cyBwdGhyZWFkcy1zcGVj
aWZpYyAyLXBhc3MgZGVzdHJ1Y3Rpb24gdG8gcmVsaWFibHkgcmVtb3ZlIFRocmVhZC4KLS8vIEZv
ciBXaW5kb3dzLCB3ZSB1c2UgdGhyZWFkX2xvY2FsIHRvIGRlZmVyIHRocmVhZCBob2xkZXIgZGVz
dHJ1Y3Rpb24uIEl0IGFzc3VtZXMgcmVndWxhciBUaHJlYWRTcGVjaWZpYwotLy8gdHlwZXMgZG9u
J3QgdXNlIG11bHRpcGxlLXBhc3MgZGVzdHJ1Y3Rpb24uCi1jbGFzcyBUaHJlYWRIb2xkZXIgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRocmVhZEhvbGRlcik7Ci1wdWJsaWM6Ci0gICAgZnJp
ZW5kIGNsYXNzIFRocmVhZDsKLSAgICBmcmllbmQgdm9pZCBXVEY6OmluaXRpYWxpemVUaHJlYWRp
bmcoKTsKLSAgICB+VGhyZWFkSG9sZGVyKCk7Ci0KLSAgICBzdGF0aWMgVGhyZWFkSG9sZGVyJiBj
dXJyZW50KCk7Ci0KLSAgICBUaHJlYWQmIHRocmVhZCgpIHsgcmV0dXJuIG1fdGhyZWFkLmdldCgp
OyB9Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIHN0YXRpYyBSZWZQdHI8VGhyZWFkPiBnZXQoVGhy
ZWFkSWRlbnRpZmllcik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBUaHJlYWRIb2xkZXIoUmVm
PFRocmVhZD4mJiB0aHJlYWQpCi0gICAgICAgIDogbV90aHJlYWQoV1RGTW92ZSh0aHJlYWQpKQot
ICAgICAgICAsIG1faXNEZXN0cm95ZWRPbmNlKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICAv
LyBDcmVhdGVzIGFuZCBwdXRzIGFuIGluc3RhbmNlIG9mIFRocmVhZEhvbGRlciBpbnRvIHRocmVh
ZC1zcGVjaWZpYyBzdG9yYWdlLgotICAgIHN0YXRpYyBUaHJlYWRIb2xkZXImIGluaXRpYWxpemUo
UmVmPFRocmVhZD4mJik7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBUaHJlYWRIb2xk
ZXImIGluaXRpYWxpemVDdXJyZW50KCk7Ci0KLSNpZiAhSEFWRShGQVNUX1RMUykKLSAgICAvLyBP
bmUgdGltZSBpbml0aWFsaXphdGlvbiBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xlLgotICAgIC8v
IFRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXplKCkgYW5kIGl0IGlz
IG5vdCB0aHJlYWQtc2FmZS4KLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZUtleSgpOwotI2VuZGlmCi0KLSAgICAvLyBSZXR1cm5zIDAgaWYgdGhyZWFkLXNwZWNp
ZmljIHN0b3JhZ2Ugd2FzIG5vdCBpbml0aWFsaXplZC4KLSAgICBzdGF0aWMgVGhyZWFkSG9sZGVy
KiBjdXJyZW50TWF5QmVOdWxsKCk7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIFdURl9FWFBPUlRf
UFJJVkFURSBzdGF0aWMgVGhyZWFkSG9sZGVyKiBjdXJyZW50RHlpbmcoKTsKLSNlbmRpZgotCi0g
ICAgLy8gVGhpcyB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgMiB0aW1lcyB3
aGVuIHRocmVhZCB0ZXJtaW5hdGVzOgotICAgIC8vIC0gZmlyc3QsIHdoZW4gYWxsIHRoZSBvdGhl
ciB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgYXJlIGNhbGxlZCwgaXQgc2ltcGx5IHJlbWVt
YmVycyBpdCB3YXMgJ2Rlc3Ryb3llZCBvbmNlJwotICAgIC8vIGFuZCAoMSkgcmUtc2V0cyBpdHNl
bGYgaW50byB0aGUgdGhyZWFkLXNwZWNpZmljIHNsb3Qgb3IgKDIpIGNvbnN0cnVjdHMgdGhyZWFk
IGxvY2FsIHZhbHVlIHRvIGNhbGwgaXQgYWdhaW4gbGF0ZXIuCi0gICAgLy8gLSBzZWNvbmQsIGFm
dGVyIGFsbCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBpbnZva2VkLCBpdCBnZXRz
IGNhbGxlZCBhZ2FpbiAtIHRoaXMgdGltZSwgd2UgcmVtb3ZlIHRoZQotICAgIC8vIFRocmVhZCBm
cm9tIHRoZSB0aHJlYWRNYXAsIGNvbXBsZXRpbmcgdGhlIGNsZWFudXAuCi0gICAgc3RhdGljIHZv
aWQgVEhSRUFEX1NQRUNJRklDX0NBTEwgZGVzdHJ1Y3Qodm9pZCogZGF0YSk7Ci0KLSAgICBSZWY8
VGhyZWFkPiBtX3RocmVhZDsKLSAgICBib29sIG1faXNEZXN0cm95ZWRPbmNlOwotI2lmICFIQVZF
KEZBU1RfVExTKQotICAgIHN0YXRpYyBXVEZfRVhQT1JUREFUQSBUaHJlYWRTcGVjaWZpY0tleSBt
X2tleTsKLSNlbmRpZgotfTsKLQotaW5saW5lIFRocmVhZEhvbGRlciogVGhyZWFkSG9sZGVyOjpj
dXJyZW50TWF5QmVOdWxsKCkKLXsKLSNpZiAhSEFWRShGQVNUX1RMUykKLSAgICBBU1NFUlQobV9r
ZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VGhyZWFkSG9sZGVyKj4odGhyZWFkU3BlY2lmaWNHZXQobV9rZXkpKTsKLSNlbHNlCi0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRocmVhZEhvbGRlcio+KF9wdGhyZWFkX2dldHNwZWNpZmljX2RpcmVj
dChXVEZfVEhSRUFEX0RBVEFfS0VZKSk7Ci0jZW5kaWYKLX0KLQotaW5saW5lIFRocmVhZEhvbGRl
ciYgVGhyZWFkSG9sZGVyOjpjdXJyZW50KCkKLXsKLSAgICAvLyBXUlQgV2ViQ29yZToKLSAgICAv
LyAgICBUaHJlYWRIb2xkZXIgaXMgdXNlZCBvbiBtYWluIHRocmVhZCBiZWZvcmUgaXQgY291bGQg
cG9zc2libHkgYmUgdXNlZAotICAgIC8vICAgIG9uIHNlY29uZGFyeSBvbmVzLCBzbyB0aGVyZSBp
cyBubyBuZWVkIGZvciBzeW5jaHJvbml6YXRpb24gaGVyZS4KLSAgICAvLyBXUlQgSmF2YVNjcmlw
dENvcmU6Ci0gICAgLy8gICAgVGhyZWFkSG9sZGVyOjppbml0aWFsaXplS2V5KCkgaXMgaW5pdGlh
bGx5IGNhbGxlZCBmcm9tIGluaXRpYWxpemVUaHJlYWRpbmcoKSwgZW5zdXJpbmcKLSAgICAvLyAg
ICB0aGlzIGlzIGluaXRpYWxseSBjYWxsZWQgaW4gYSBwdGhyZWFkX29uY2UgbG9ja2VkIGNvbnRl
eHQuCi0jaWYgIUhBVkUoRkFTVF9UTFMpCi0gICAgaWYgKFVOTElLRUxZKFRocmVhZEhvbGRlcjo6
bV9rZXkgPT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5KSkKLSAgICAgICAgV1RGOjppbml0aWFs
aXplVGhyZWFkaW5nKCk7Ci0jZW5kaWYKLSAgICBpZiAoYXV0byogaG9sZGVyID0gY3VycmVudE1h
eUJlTnVsbCgpKQotICAgICAgICByZXR1cm4gKmhvbGRlcjsKLSNpZiBPUyhXSU5ET1dTKQotICAg
IGlmIChhdXRvKiBob2xkZXIgPSBjdXJyZW50RHlpbmcoKSkKLSAgICAgICAgcmV0dXJuICpob2xk
ZXI7Ci0jZW5kaWYKLSAgICByZXR1cm4gaW5pdGlhbGl6ZUN1cnJlbnQoKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV1RGCi0jZW5kaWYgLy8gVGhyZWFkSG9sZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZEhvbGRlclB0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZEhvbGRlclB0aHJlYWRzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg4Zjll
NTZlZjQyNzI5M2Q2MGMzODcyNWRiNjljNWJhMTIyZTM1Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJQdGhy
ZWFkcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGhyZWFkSG9sZGVyLmgiCi0KLSNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0jaWYgIUhBVkUoRkFTVF9UTFMpCi12
b2lkIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZUtleSgpCi17Ci0gICAgdGhyZWFkU3BlY2lmaWNL
ZXlDcmVhdGUoJm1fa2V5LCBkZXN0cnVjdCk7Ci19Ci0jZW5kaWYKLQotVGhyZWFkSG9sZGVyJiBU
aHJlYWRIb2xkZXI6OmluaXRpYWxpemUoUmVmPFRocmVhZD4mJiB0aHJlYWQpCi17Ci0gICAgYXV0
byogaG9sZGVyID0gbmV3IFRocmVhZEhvbGRlcihXVEZNb3ZlKHRocmVhZCkpOwotI2lmICFIQVZF
KEZBU1RfVExTKQotICAgIEFTU0VSVChtX2tleSAhPSBJbnZhbGlkVGhyZWFkU3BlY2lmaWNLZXkp
OwotICAgIHRocmVhZFNwZWNpZmljU2V0KG1fa2V5LCBob2xkZXIpOwotI2Vsc2UKLSAgICBfcHRo
cmVhZF9zZXRzcGVjaWZpY19kaXJlY3QoV1RGX1RIUkVBRF9EQVRBX0tFWSwgaG9sZGVyKTsKLSAg
ICBwdGhyZWFkX2tleV9pbml0X25wKFdURl9USFJFQURfREFUQV9LRVksICZkZXN0cnVjdCk7Ci0j
ZW5kaWYKLSAgICByZXR1cm4gKmhvbGRlcjsKLX0KLQotdm9pZCBUaHJlYWRIb2xkZXI6OmRlc3Ry
dWN0KHZvaWQqIGRhdGEpCi17Ci0gICAgVGhyZWFkSG9sZGVyKiBob2xkZXIgPSBzdGF0aWNfY2Fz
dDxUaHJlYWRIb2xkZXIqPihkYXRhKTsKLSAgICBBU1NFUlQoaG9sZGVyKTsKLQotICAgIGlmICho
b2xkZXItPm1faXNEZXN0cm95ZWRPbmNlKSB7Ci0gICAgICAgIGRlbGV0ZSBob2xkZXI7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBob2xkZXItPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1
ZTsKLSAgICAvLyBSZS1zZXR0aW5nIHRoZSB2YWx1ZSBmb3Iga2V5IGNhdXNlcyBhbm90aGVyIGRl
c3RydWN0KCkgY2FsbCBhZnRlciBhbGwgb3RoZXIgdGhyZWFkLXNwZWNpZmljIGRlc3RydWN0b3Jz
IHdlcmUgY2FsbGVkLgotI2lmICFIQVZFKEZBU1RfVExTKQotICAgIEFTU0VSVChtX2tleSAhPSBJ
bnZhbGlkVGhyZWFkU3BlY2lmaWNLZXkpOwotICAgIHRocmVhZFNwZWNpZmljU2V0KG1fa2V5LCBo
b2xkZXIpOwotI2Vsc2UKLSAgICBfcHRocmVhZF9zZXRzcGVjaWZpY19kaXJlY3QoV1RGX1RIUkVB
RF9EQVRBX0tFWSwgaG9sZGVyKTsKLSAgICBwdGhyZWFkX2tleV9pbml0X25wKFdURl9USFJFQURf
REFUQV9LRVksICZkZXN0cnVjdCk7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXJXaW4uY3BwIGIvU291cmNlL1dU
Ri93dGYvVGhyZWFkSG9sZGVyV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDM0MTMxM2Y4NjY2MWYzMGUxNjZlNTczZTI5ZDIyNDc5ZmNkODk4My4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xk
ZXJXaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRocmVh
ZEhvbGRlci5oIgotCi0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi0jZGVmaW5lIEludmFsaWRUaHJlYWRIb2xkZXIgKChU
aHJlYWRIb2xkZXIqKSgweGJiYWRiZWVmKSkKLQotc3RhdGljIHN0ZDo6bXV0ZXgmIHRocmVhZE1h
cE11dGV4KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjptdXRleD4gbXV0ZXg7
Ci0gICAgcmV0dXJuIG11dGV4LmdldCgpOwotfQotCi1zdGF0aWMgSGFzaE1hcDxUaHJlYWRJZGVu
dGlmaWVyLCBUaHJlYWRIb2xkZXIqPiYgdGhyZWFkTWFwKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8SGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBUaHJlYWRIb2xkZXIqPj4gbWFwOwot
ICAgIHJldHVybiBtYXAuZ2V0KCk7Ci19Ci0KLXZvaWQgVGhyZWFkSG9sZGVyOjppbml0aWFsaXpl
S2V5KCkKLXsKLSAgICB0aHJlYWRNYXBNdXRleCgpOwotICAgIHRocmVhZE1hcCgpOwotICAgIHRo
cmVhZFNwZWNpZmljS2V5Q3JlYXRlKCZtX2tleSwgZGVzdHJ1Y3QpOwotfQotCi1UaHJlYWRIb2xk
ZXIqIFRocmVhZEhvbGRlcjo6Y3VycmVudER5aW5nKCkKLXsKLSAgICBBU1NFUlQobV9rZXkgIT0g
SW52YWxpZFRocmVhZFNwZWNpZmljS2V5KTsKLSAgICAvLyBBZnRlciBGTFMgaXMgZGVzdHJveWVk
LCB0aGlzIG1hcCBvZmZlcnMgdGhlIHZhbHVlIHVudGlsIHRoZSBzZWNvbmQgdGhyZWFkIGV4aXQg
Y2FsbGJhY2sgaXMgY2FsbGVkLgotICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2Nr
ZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChjdXJyZW50
VGhyZWFkKCkpOwotfQotCi0vLyBGSVhNRTogUmVtb3ZlIHRoaXMgd29ya2Fyb3VuZCBjb2RlIG9u
Y2UgPHJkYXI6Ly9wcm9ibGVtLzMxNzkzMjEzPiBpcyBmaXhlZC4KLVJlZlB0cjxUaHJlYWQ+IFRo
cmVhZEhvbGRlcjo6Z2V0KFRocmVhZElkZW50aWZpZXIgaWQpCi17Ci0gICAgc3RkOjpsb2NrX2d1
YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWRNYXBNdXRleCgpKTsKLSAgICBUaHJlYWRIb2xk
ZXIqIGhvbGRlciA9IHRocmVhZE1hcCgpLmdldChpZCk7Ci0gICAgaWYgKGhvbGRlcikKLSAgICAg
ICAgcmV0dXJuICZob2xkZXItPnRocmVhZCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1U
aHJlYWRIb2xkZXImIFRocmVhZEhvbGRlcjo6aW5pdGlhbGl6ZShSZWY8VGhyZWFkPiYmIHRocmVh
ZCkKLXsKLSAgICBBU1NFUlQobV9rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5KTsKLSAg
ICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgd29ya2Fyb3VuZCBjb2RlIG9uY2UgPHJkYXI6Ly9wcm9i
bGVtLzMxNzkzMjEzPiBpcyBmaXhlZC4KLSAgICBhdXRvIGlkID0gdGhyZWFkLT5pZCgpOwotICAg
IGF1dG8qIGhvbGRlciA9IG5ldyBUaHJlYWRIb2xkZXIoV1RGTW92ZSh0aHJlYWQpKTsKLSAgICB0
aHJlYWRTcGVjaWZpY1NldChtX2tleSwgaG9sZGVyKTsKLSAgICB7Ci0gICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7Ci0gICAgICAgIHRo
cmVhZE1hcCgpLmFkZChpZCwgaG9sZGVyKTsKLSAgICB9Ci0gICAgcmV0dXJuICpob2xkZXI7Ci19
Ci0KLXZvaWQgVGhyZWFkSG9sZGVyOjpkZXN0cnVjdCh2b2lkKiBkYXRhKQotewotICAgIGlmIChk
YXRhID09IEludmFsaWRUaHJlYWRIb2xkZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRocmVh
ZEhvbGRlciogaG9sZGVyID0gc3RhdGljX2Nhc3Q8VGhyZWFkSG9sZGVyKj4oZGF0YSk7Ci0gICAg
QVNTRVJUKGhvbGRlcik7Ci0KLSAgICAvLyBEZWxheSB0aGUgZGVhbGxvY2F0aW9uIG9mIFRocmVh
ZEhvbGRlciBtb3JlLgotICAgIC8vIEl0IGRlZmVycyBUaHJlYWRIb2xkZXIgZGVhbGxvY2F0aW9u
IGFmdGVyIHRoZSBvdGhlciBUaHJlYWRTcGVjaWZpYyB2YWx1ZXMgYXJlIGRlYWxsb2NhdGVkLgot
ICAgIHN0YXRpYyB0aHJlYWRfbG9jYWwgY2xhc3MgVGhyZWFkRXhpdENhbGxiYWNrIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIFRocmVhZEV4aXRDYWxsYmFjayhUaHJlYWRIb2xkZXIqIGhvbGRlcikK
LSAgICAgICAgICAgIDogbV9ob2xkZXIoaG9sZGVyKQotICAgICAgICB7Ci0gICAgICAgIH0KLQot
ICAgICAgICB+VGhyZWFkRXhpdENhbGxiYWNrKCkKLSAgICAgICAgewotICAgICAgICAgICAgVGhy
ZWFkSG9sZGVyOjpkZXN0cnVjdChtX2hvbGRlcik7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIFRocmVhZEhvbGRlciogbV9ob2xkZXI7Ci0gICAgfSBjYWxsYmFjayhob2xkZXIp
OwotCi0gICAgaWYgKGhvbGRlci0+bV9pc0Rlc3Ryb3llZE9uY2UpIHsKLSAgICAgICAgewotICAg
ICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWRNYXBNdXRl
eCgpKTsKLSAgICAgICAgICAgIEFTU0VSVCh0aHJlYWRNYXAoKS5jb250YWlucyhob2xkZXItPm1f
dGhyZWFkLT5pZCgpKSk7Ci0gICAgICAgICAgICB0aHJlYWRNYXAoKS5yZW1vdmUoaG9sZGVyLT5t
X3RocmVhZC0+aWQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIGhvbGRlcjsKLQotICAg
ICAgICAvLyBGaWxsIHRoZSBGTFMgd2l0aCB0aGUgbm9uLW51bGxwdHIgdmFsdWUuIFdoaWxlIEZM
UyBkZXN0cnVjdG9yIHdvbid0IGJlIGNhbGxlZCBmb3IgdGhhdCwKLSAgICAgICAgLy8gbm9uLW51
bGxwdHIgdmFsdWUgdGVsbHMgdXMgdGhhdCB3ZSBhbHJlYWR5IGRlc3RydWN0ZWQgVGhyZWFkSG9s
ZGVyLiBUaGlzIGFsbG93cyB1cyB0bwotICAgICAgICAvLyBkZXRlY3QgaW5jb3JyZWN0IHVzZSBv
ZiBUaHJlYWQ6OmN1cnJlbnQoKSBhZnRlciB0aGlzIHBvaW50IGJlY2F1c2UgaXQgd2lsbCBjcmFz
aC4KLSAgICAgICAgdGhyZWFkU3BlY2lmaWNTZXQobV9rZXksIEludmFsaWRUaHJlYWRIb2xkZXIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHRocmVhZFNwZWNpZmljU2V0KG1fa2V5LCBJ
bnZhbGlkVGhyZWFkSG9sZGVyKTsKLSAgICBob2xkZXItPm1faXNEZXN0cm95ZWRPbmNlID0gdHJ1
ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRpbmcuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmNwcAppbmRleCBkYzgwMzg2
YmZiODM0ZDJkNzZkZjQzZTUzZmE5NzA3NDIwYzRlZjFhLi4wYmU1YTEwZWQwZjcyNWY4ZDNlMTdl
MWNmMTlhYjIwOWE5MDBhODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
Y3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5jcHAKQEAgLTM0LDcgKzM0LDYgQEAK
ICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVy
U2VlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRHcm91cC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRIb2xkZXIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkTWVzc2FnZS5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5n
VGFibGUuaD4KQEAgLTExMywxMyArMTEyLDEyIEBAIHZvaWQgVGhyZWFkOjplbnRyeVBvaW50KE5l
d1RocmVhZENvbnRleHQqIG5ld1RocmVhZENvbnRleHQpCiAgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihjb250ZXh0LT5tdXRleCk7CiAgICAgICAgIEFTU0VSVChjb250ZXh0LT5zdGFnZSA9PSBO
ZXdUaHJlYWRDb250ZXh0OjpTdGFnZTo6RXN0YWJsaXNoZWRIYW5kbGUpOwogCi0gICAgICAgIC8v
IEluaXRpYWxpemUgdGhyZWFkIGhvbGRlciB3aXRoIGVzdGFibGlzaGVkIElELgotICAgICAgICBU
aHJlYWRIb2xkZXI6OmluaXRpYWxpemUoY29udGV4dC0+dGhyZWFkLmNvcHlSZWYoKSk7Ci0KICAg
ICAgICAgVGhyZWFkOjppbml0aWFsaXplQ3VycmVudFRocmVhZEludGVybmFsKGNvbnRleHQtPm5h
bWUpOwogICAgICAgICBmdW5jdGlvbiA9IFdURk1vdmUoY29udGV4dC0+ZW50cnlQb2ludCk7CiAg
ICAgICAgIGNvbnRleHQtPnRocmVhZC0+aW5pdGlhbGl6ZUluVGhyZWFkKCk7CiAKKyAgICAgICAg
VGhyZWFkOjppbml0aWFsaXplVExTKFdURk1vdmUoY29udGV4dC0+dGhyZWFkKSk7CisKICNpZiAh
SEFWRShTVEFDS19CT1VORFNfRk9SX05FV19USFJFQUQpCiAgICAgICAgIC8vIEFjayBjb21wbGV0
aW9uIG9mIGluaXRpYWxpemF0aW9uIHRvIHRoZSBjcmVhdGluZyB0aHJlYWQuCiAgICAgICAgIGNv
bnRleHQtPnN0YWdlID0gTmV3VGhyZWFkQ29udGV4dDo6U3RhZ2U6OkluaXRpYWxpemVkOwpAQCAt
Mjc4LDEzICsyNzYsMTcgQEAgdm9pZCBUaHJlYWQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKICAgICBvdXQucHJpbnQobV9pZCk7CiB9CiAKKyNpZiAhSEFWRShGQVNUX1RMUykKK1RocmVh
ZFNwZWNpZmljS2V5IFRocmVhZDo6c19rZXkgPSBJbnZhbGlkVGhyZWFkU3BlY2lmaWNLZXk7Cisj
ZW5kaWYKKwogdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKIHsKLSAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgaW5pdGlhbGl6ZUtleTsKLSAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplS2V5
LCBbXSB7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CisgICAgc3RkOjpjYWxs
X29uY2Uob25jZUtleSwgW10gewogICAgICAgICBpbml0aWFsaXplUmFuZG9tTnVtYmVyR2VuZXJh
dG9yKCk7CiAjaWYgIUhBVkUoRkFTVF9UTFMpCi0gICAgICAgIFRocmVhZEhvbGRlcjo6aW5pdGlh
bGl6ZUtleSgpOworICAgICAgICBUaHJlYWQ6OmluaXRpYWxpemVUTFNLZXkoKTsKICNlbmRpZgog
ICAgICAgICBpbml0aWFsaXplRGF0ZXMoKTsKICAgICAgICAgVGhyZWFkOjppbml0aWFsaXplUGxh
dGZvcm1UaHJlYWRpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5o
IGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKaW5kZXggMzI1ZTZhYjczZjg2ZmYyYjhmMWJm
NjVhYWFlNmYyNjE4N2FhMzdiOS4uYzJhMmIwM2ZhZGZjNjg0ZWY4ZmMyMTBjMWExOTdmYmRlYWVl
NjM3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKKysrIGIvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nLmgKQEAgLTM1LDEzICszNSwxNSBAQAogI2luY2x1ZGUgPHN0ZGlu
dC5oPgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+
CisjaW5jbHVkZSA8d3RmL0Zhc3RUTFMuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNp
bmNsdWRlIDx3dGYvUGxhdGZvcm1SZWdpc3RlcnMuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja0JvdW5kcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZEhvbGRlci5oPgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTcGVjaWZpYy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFVTRShQVEhSRUFE
UykgJiYgIU9TKERBUldJTikKQEAgLTU5LDE0ICs2MSwxNiBAQCB1c2luZyBBdG9taWNTdHJpbmdU
YWJsZURlc3RydWN0b3IgPSB2b2lkICgqKShBdG9taWNTdHJpbmdUYWJsZSopOwogZW51bSBjbGFz
cyBUaHJlYWRHcm91cEFkZFJlc3VsdDsKIAogY2xhc3MgVGhyZWFkR3JvdXA7Ci1jbGFzcyBUaHJl
YWRIb2xkZXI7CiBjbGFzcyBQcmludFN0cmVhbTsKIAorLy8gVGhpcyBmdW5jdGlvbiBjYW4gYmUg
Y2FsbGVkIGZyb20gYW55IHRocmVhZHMuCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFs
aXplVGhyZWFkaW5nKCk7CisKIGNsYXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxUaHJlYWQ+IHsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgVGhyZWFkR3JvdXA7Ci0g
ICAgZnJpZW5kIGNsYXNzIFRocmVhZEhvbGRlcjsKICAgICBmcmllbmQgY2xhc3MgQXRvbWljU3Ry
aW5nVGFibGU7CisgICAgZnJpZW5kIHZvaWQgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgflRocmVhZCgpOwogCkBAIC03NSw3ICs3OSw3IEBAIGNs
YXNzIFRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWQ+IHsKICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZlB0cjxUaHJlYWQ+IGNyZWF0ZShjb25zdCBjaGFy
KiB0aHJlYWROYW1lLCBGdW5jdGlvbjx2b2lkKCk+JiYpOwogCiAgICAgLy8gUmV0dXJucyBUaHJl
YWQgb2JqZWN0LgotICAgIHN0YXRpYyBUaHJlYWQmIGN1cnJlbnQoKSB7IHJldHVybiBUaHJlYWRI
b2xkZXI6OmN1cnJlbnQoKS50aHJlYWQoKTsgfQorICAgIHN0YXRpYyBUaHJlYWQmIGN1cnJlbnQo
KTsKIAogICAgIC8vIFJldHVybnMgVGhyZWFkSWRlbnRpZmllciBkaXJlY3RseS4gSXQgaXMgdXNl
ZnVsIGlmIHRoZSB1c2VyIG9ubHkgY2FyZXMgYWJvdXQgaWRlbnRpdHkKICAgICAvLyBvZiB0aHJl
YWRzLiBBdCB0aGF0IHRpbWUsIHVzZXJzIHNob3VsZCBrbm93IHRoYXQgaG9sZGluZyB0aGlzIFRo
cmVhZElkZW50aWZpZXIgZG9lcyBub3QgZW5zdXJlCkBAIC0xOTIsNyArMTk2LDYgQEAgY2xhc3Mg
VGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4gewogcHJvdGVjdGVk
OgogICAgIFRocmVhZCgpID0gZGVmYXVsdDsKIAotICAgIHN0YXRpYyBSZWY8VGhyZWFkPiBjcmVh
dGVDdXJyZW50VGhyZWFkKCk7CiAgICAgdm9pZCBpbml0aWFsaXplSW5UaHJlYWQoKTsKIAogICAg
IC8vIEludGVybmFsIHBsYXRmb3JtLXNwZWNpZmljIFRocmVhZCBlc3RhYmxpc2htZW50IGltcGxl
bWVudGF0aW9uLgpAQCAtMjM0LDEyICsyMzcsNDQgQEAgY2xhc3MgVGhyZWFkIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPFRocmVhZD4gewogICAgIFRocmVhZEdyb3VwQWRkUmVzdWx0IGFk
ZFRvVGhyZWFkR3JvdXAoY29uc3QgQWJzdHJhY3RMb2NrZXImIHRocmVhZEdyb3VwTG9ja2VyLCBU
aHJlYWRHcm91cCYpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVRocmVhZEdyb3VwKGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiB0aHJlYWRHcm91cExvY2tlciwgVGhyZWFkR3JvdXAmKTsKIAorICAgIC8vIEhv
bGRzIFRocmVhZCBpbiB0aGUgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2UuIFRoZSBkZXN0cnVjdG9y
IG9mIGN1cnJlbnQgdGhyZWFkIFRMUyByZWxpYWJseSBkZXN0cm95IFRocmVhZC4KKyAgICAvLyBG
b3IgcHRocmVhZCwgaXQgZW1wbG95cyBwdGhyZWFkcy1zcGVjaWZpYyAyLXBhc3MgZGVzdHJ1Y3Rp
b24gdG8gcmVsaWFibHkgcmVtb3ZlIFRocmVhZC4KKyAgICAvLyBGb3IgV2luZG93cywgd2UgdXNl
IHRocmVhZF9sb2NhbCB0byBkZWZlciB0aHJlYWQgVExTIGRlc3RydWN0aW9uLiBJdCBhc3N1bWVz
IHJlZ3VsYXIgVGhyZWFkU3BlY2lmaWMKKyAgICAvLyB0eXBlcyBkb24ndCB1c2UgbXVsdGlwbGUt
cGFzcyBkZXN0cnVjdGlvbi4KKworI2lmICFIQVZFKEZBU1RfVExTKQorICAgIHN0YXRpYyBXVEZf
RVhQT1JUREFUQSBUaHJlYWRTcGVjaWZpY0tleSBzX2tleTsKKyAgICAvLyBPbmUgdGltZSBpbml0
aWFsaXphdGlvbiBmb3IgdGhpcyBjbGFzcyBhcyBhIHdob2xlLgorICAgIC8vIFRoaXMgbWV0aG9k
IG11c3QgYmUgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXplVExTKCkgYW5kIGl0IGlzIG5vdCB0aHJl
YWQtc2FmZS4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplVExTS2V5KCk7CisjZW5kaWYKKwor
ICAgIC8vIENyZWF0ZXMgYW5kIHB1dHMgYW4gaW5zdGFuY2Ugb2YgVGhyZWFkIGludG8gdGhyZWFk
LXNwZWNpZmljIHN0b3JhZ2UuCisgICAgc3RhdGljIFRocmVhZCYgaW5pdGlhbGl6ZVRMUyhSZWY8
VGhyZWFkPiYmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFRocmVhZCYgaW5pdGlh
bGl6ZUN1cnJlbnRUTFMoKTsKKworICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiB0aHJlYWQtc3Bl
Y2lmaWMgc3RvcmFnZSB3YXMgbm90IGluaXRpYWxpemVkLgorICAgIHN0YXRpYyBUaHJlYWQqIGN1
cnJlbnRNYXlCZU51bGwoKTsKKworI2lmIE9TKFdJTkRPV1MpCisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBUaHJlYWQqIGN1cnJlbnREeWluZygpOworICAgIHN0YXRpYyBSZWZQdHI8VGhy
ZWFkPiBnZXQoVGhyZWFkSWRlbnRpZmllcik7CisjZW5kaWYKKworICAgIC8vIFRoaXMgdGhyZWFk
LXNwZWNpZmljIGRlc3RydWN0b3IgaXMgY2FsbGVkIDIgdGltZXMgd2hlbiB0aHJlYWQgdGVybWlu
YXRlczoKKyAgICAvLyAtIGZpcnN0LCB3aGVuIGFsbCB0aGUgb3RoZXIgdGhyZWFkLXNwZWNpZmlj
IGRlc3RydWN0b3JzIGFyZSBjYWxsZWQsIGl0IHNpbXBseSByZW1lbWJlcnMgaXQgd2FzICdkZXN0
cm95ZWQgb25jZScKKyAgICAvLyBhbmQgKDEpIHJlLXNldHMgaXRzZWxmIGludG8gdGhlIHRocmVh
ZC1zcGVjaWZpYyBzbG90IG9yICgyKSBjb25zdHJ1Y3RzIHRocmVhZCBsb2NhbCB2YWx1ZSB0byBj
YWxsIGl0IGFnYWluIGxhdGVyLgorICAgIC8vIC0gc2Vjb25kLCBhZnRlciBhbGwgdGhyZWFkLXNw
ZWNpZmljIGRlc3RydWN0b3JzIHdlcmUgaW52b2tlZCwgaXQgZ2V0cyBjYWxsZWQgYWdhaW4gLSB0
aGlzIHRpbWUsIHdlIHJlbW92ZSB0aGUKKyAgICAvLyBUaHJlYWQgZnJvbSB0aGUgdGhyZWFkTWFw
LCBjb21wbGV0aW5nIHRoZSBjbGVhbnVwLgorICAgIHN0YXRpYyB2b2lkIFRIUkVBRF9TUEVDSUZJ
Q19DQUxMIGRlc3RydWN0VExTKHZvaWQqIGRhdGEpOworCiAgICAgLy8gV29yZExvY2sgJiBMb2Nr
IHJlbHkgb24gVGhyZWFkU3BlY2lmaWMuIEJ1dCBUaHJlYWQgb2JqZWN0IGNhbiBiZSBkZXN0cm95
ZWQgZXZlbiBhZnRlciBUaHJlYWRTcGVjaWZpYyB0aGluZ3MgYXJlIGRlc3Ryb3llZC4KICAgICBz
dGQ6Om11dGV4IG1fbXV0ZXg7CiAgICAgVGhyZWFkSWRlbnRpZmllciBtX2lkIHsgMCB9OwogICAg
IEpvaW5hYmxlU3RhdGUgbV9qb2luYWJsZVN0YXRlIHsgSm9pbmFibGUgfTsKICAgICBib29sIG1f
aXNTaHV0dGluZ0Rvd24geyBmYWxzZSB9OwogICAgIGJvb2wgbV9kaWRFeGl0IHsgZmFsc2UgfTsK
KyAgICBib29sIG1faXNEZXN0cm95ZWRPbmNlIHsgZmFsc2UgfTsKICAgICBTdGFja0JvdW5kcyBt
X3N0YWNrIHsgU3RhY2tCb3VuZHM6OmVtcHR5Qm91bmRzKCkgfTsKICAgICBWZWN0b3I8c3RkOjp3
ZWFrX3B0cjxUaHJlYWRHcm91cD4+IG1fdGhyZWFkR3JvdXBzOwogICAgIFBsYXRmb3JtVGhyZWFk
SGFuZGxlIG1faGFuZGxlOwpAQCAtMjY3LDYgKzMwMiwzNyBAQCBpbmxpbmUgVGhyZWFkSWRlbnRp
ZmllciBjdXJyZW50VGhyZWFkKCkKICAgICByZXR1cm4gVGhyZWFkOjpjdXJyZW50SUQoKTsKIH0K
IAoraW5saW5lIFRocmVhZCogVGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKCkKK3sKKyNpZiAhSEFW
RShGQVNUX1RMUykKKyAgICBBU1NFUlQoc19rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhyZWFkKj4odGhyZWFkU3BlY2lmaWNHZXQoc19r
ZXkpKTsKKyNlbHNlCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRocmVhZCo+KF9wdGhyZWFkX2dl
dHNwZWNpZmljX2RpcmVjdChXVEZfVEhSRUFEX0RBVEFfS0VZKSk7CisjZW5kaWYKK30KKworaW5s
aW5lIFRocmVhZCYgVGhyZWFkOjpjdXJyZW50KCkKK3sKKyAgICAvLyBXUlQgV2ViQ29yZToKKyAg
ICAvLyAgICBUaHJlYWQ6OmN1cnJlbnQoKSBpcyB1c2VkIG9uIG1haW4gdGhyZWFkIGJlZm9yZSBp
dCBjb3VsZCBwb3NzaWJseSBiZSB1c2VkCisgICAgLy8gICAgb24gc2Vjb25kYXJ5IG9uZXMsIHNv
IHRoZXJlIGlzIG5vIG5lZWQgZm9yIHN5bmNocm9uaXphdGlvbiBoZXJlLgorICAgIC8vIFdSVCBK
YXZhU2NyaXB0Q29yZToKKyAgICAvLyAgICBUaHJlYWQ6OmluaXRpYWxpemVUTFNLZXkoKSBpcyBp
bml0aWFsbHkgY2FsbGVkIGZyb20gaW5pdGlhbGl6ZVRocmVhZGluZygpLCBlbnN1cmluZworICAg
IC8vICAgIHRoaXMgaXMgaW5pdGlhbGx5IGNhbGxlZCBpbiBhIHB0aHJlYWRfb25jZSBsb2NrZWQg
Y29udGV4dC4KKyNpZiAhSEFWRShGQVNUX1RMUykKKyAgICBpZiAoVU5MSUtFTFkoVGhyZWFkOjpz
X2tleSA9PSBJbnZhbGlkVGhyZWFkU3BlY2lmaWNLZXkpKQorICAgICAgICBXVEY6OmluaXRpYWxp
emVUaHJlYWRpbmcoKTsKKyNlbmRpZgorICAgIGlmIChhdXRvKiB0aHJlYWQgPSBjdXJyZW50TWF5
QmVOdWxsKCkpCisgICAgICAgIHJldHVybiAqdGhyZWFkOworI2lmIE9TKFdJTkRPV1MpCisgICAg
aWYgKGF1dG8qIHRocmVhZCA9IGN1cnJlbnREeWluZygpKQorICAgICAgICByZXR1cm4gKnRocmVh
ZDsKKyNlbmRpZgorICAgIHJldHVybiBpbml0aWFsaXplQ3VycmVudFRMUygpOworfQorCiAvLyBG
SVhNRTogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcmVtYWluIGJlY2F1c2UgdGhleSBhcmUgdXNl
ZCBmcm9tIFdlYktpdCBXaW5kb3dzIHN1cHBvcnQgbGlicmFyeSwKIC8vIFdlYktpdFF1YXJ0ekNv
cmVBZGRpdGlvbnMuZGxsLiBXaGVuIHVwZGF0aW5nIHRoZSBzdXBwb3J0IGxpYnJhcnksIHdlIHNo
b3VsZCB1c2UgbmV3IEFQSSBpbnN0ZWFkCiAvLyBhbmQgdGhlIGZvbGxvd2luZyB3b3JrYW91bmQg
c2hvdWxkIGJlIHJlbW92ZWQuIEFuZCBuZXcgY29kZSBzaG91bGQgbm90IHVzZSB0aGUgZm9sbG93
aW5nIEFQSXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKaW5kZXggN2Y3OThjZjA2
Y2NhMWU5MTFmNWRmYmJlNzZkOWJiN2I4Y2M2MDJkMi4uNzcxYWQ5MGY0OTQ1YWIxZDY5YzNjYWFm
NDQ3NjRlZTQ0NGI1YzAxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRo
cmVhZHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcApAQCAt
NDEsNyArNDEsNiBAQAogI2luY2x1ZGUgPHd0Zi9SYXdQb2ludGVyLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRHcm91cC5oPgotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRIb2xkZXIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5o
PgogI2luY2x1ZGUgPHd0Zi9Xb3JkTG9jay5oPgogCkBAIC0yOTQsNyArMjkzLDcgQEAgaW50IFRo
cmVhZDo6d2FpdEZvckNvbXBsZXRpb24oKQogICAgIEFTU0VSVChqb2luYWJsZVN0YXRlKCkgPT0g
Sm9pbmFibGUpOwogCiAgICAgLy8gSWYgdGhlIHRocmVhZCBoYXMgYWxyZWFkeSBleGl0ZWQsIHRo
ZW4gZG8gbm90aGluZy4gSWYgdGhlIHRocmVhZCBoYXNuJ3QgZXhpdGVkIHlldCwgdGhlbiBqdXN0
IHNpZ25hbCB0aGF0IHdlJ3ZlIGFscmVhZHkgam9pbmVkIG9uIGl0LgotICAgIC8vIEluIGJvdGgg
Y2FzZXMsIFRocmVhZEhvbGRlcjo6ZGVzdHJ1Y3QoKSB3aWxsIHRha2UgY2FyZSBvZiBkZXN0cm95
aW5nIFRocmVhZC4KKyAgICAvLyBJbiBib3RoIGNhc2VzLCBUaHJlYWQ6OmRlc3RydWN0VExTKCkg
d2lsbCB0YWtlIGNhcmUgb2YgZGVzdHJveWluZyBUaHJlYWQuCiAgICAgaWYgKCFoYXNFeGl0ZWQo
KSkKICAgICAgICAgZGlkSm9pbigpOwogCkBAIC0zMTIsMTUgKzMxMSwxNSBAQCB2b2lkIFRocmVh
ZDo6ZGV0YWNoKCkKICAgICAgICAgZGlkQmVjb21lRGV0YWNoZWQoKTsKIH0KIAotCi1SZWY8VGhy
ZWFkPiBUaHJlYWQ6OmNyZWF0ZUN1cnJlbnRUaHJlYWQoKQorVGhyZWFkJiBUaHJlYWQ6OmluaXRp
YWxpemVDdXJyZW50VExTKCkKIHsKICAgICAvLyBOb3QgYSBXVEYtY3JlYXRlZCB0aHJlYWQsIFRo
cmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHlldC4KICAgICBSZWY8VGhyZWFkPiB0
aHJlYWQgPSBhZG9wdFJlZigqbmV3IFRocmVhZCgpKTsKICAgICB0aHJlYWQtPmVzdGFibGlzaFBs
YXRmb3JtU3BlY2lmaWNIYW5kbGUocHRocmVhZF9zZWxmKCkpOwogICAgIHRocmVhZC0+aW5pdGlh
bGl6ZUluVGhyZWFkKCk7CiAgICAgaW5pdGlhbGl6ZUN1cnJlbnRUaHJlYWRFdmVuSWZOb25XVEZD
cmVhdGVkKCk7Ci0gICAgcmV0dXJuIHRocmVhZDsKKworICAgIHJldHVybiBpbml0aWFsaXplVExT
KFdURk1vdmUodGhyZWFkKSk7CiB9CiAKIFRocmVhZElkZW50aWZpZXIgVGhyZWFkOjpjdXJyZW50
SUQoKQpAQCAtNDY2LDYgKzQ2NSw0OCBAQCB2b2lkIFRocmVhZDo6ZXN0YWJsaXNoUGxhdGZvcm1T
cGVjaWZpY0hhbmRsZShwdGhyZWFkX3QgaGFuZGxlKQogICAgIH0KIH0KIAorI2lmICFIQVZFKEZB
U1RfVExTKQordm9pZCBUaHJlYWQ6OmluaXRpYWxpemVUTFNLZXkoKQoreworICAgIHRocmVhZFNw
ZWNpZmljS2V5Q3JlYXRlKCZzX2tleSwgZGVzdHJ1Y3RUTFMpOworfQorI2VuZGlmCisKK1RocmVh
ZCYgVGhyZWFkOjppbml0aWFsaXplVExTKFJlZjxUaHJlYWQ+JiYgdGhyZWFkKQoreworICAgIGF1
dG8mIHRocmVhZEluVExTID0gdGhyZWFkLmxlYWtSZWYoKTsKKyNpZiAhSEFWRShGQVNUX1RMUykK
KyAgICBBU1NFUlQoc19rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5KTsKKyAgICB0aHJl
YWRTcGVjaWZpY1NldChzX2tleSwgJnRocmVhZEluVExTKTsKKyNlbHNlCisgICAgX3B0aHJlYWRf
c2V0c3BlY2lmaWNfZGlyZWN0KFdURl9USFJFQURfREFUQV9LRVksICZ0aHJlYWRJblRMUyk7Cisg
ICAgcHRocmVhZF9rZXlfaW5pdF9ucChXVEZfVEhSRUFEX0RBVEFfS0VZLCAmZGVzdHJ1Y3RUTFMp
OworI2VuZGlmCisgICAgcmV0dXJuIHRocmVhZEluVExTOworfQorCit2b2lkIFRocmVhZDo6ZGVz
dHJ1Y3RUTFModm9pZCogZGF0YSkKK3sKKyAgICBUaHJlYWQqIHRocmVhZCA9IHN0YXRpY19jYXN0
PFRocmVhZCo+KGRhdGEpOworICAgIEFTU0VSVCh0aHJlYWQpOworCisgICAgaWYgKHRocmVhZC0+
bV9pc0Rlc3Ryb3llZE9uY2UpIHsKKyAgICAgICAgdGhyZWFkLT5kaWRFeGl0KCk7CisgICAgICAg
IHRocmVhZC0+ZGVyZWYoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRocmVhZC0+
bV9pc0Rlc3Ryb3llZE9uY2UgPSB0cnVlOworICAgIC8vIFJlLXNldHRpbmcgdGhlIHZhbHVlIGZv
ciBrZXkgY2F1c2VzIGFub3RoZXIgZGVzdHJ1Y3RUTFMoKSBjYWxsIGFmdGVyIGFsbCBvdGhlciB0
aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvcnMgd2VyZSBjYWxsZWQuCisjaWYgIUhBVkUoRkFTVF9U
TFMpCisgICAgQVNTRVJUKHNfa2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSk7CisgICAg
dGhyZWFkU3BlY2lmaWNTZXQoc19rZXksIHRocmVhZCk7CisjZWxzZQorICAgIF9wdGhyZWFkX3Nl
dHNwZWNpZmljX2RpcmVjdChXVEZfVEhSRUFEX0RBVEFfS0VZLCB0aHJlYWQpOworICAgIHB0aHJl
YWRfa2V5X2luaXRfbnAoV1RGX1RIUkVBRF9EQVRBX0tFWSwgJmRlc3RydWN0VExTKTsKKyNlbmRp
ZgorfQorCiBNdXRleDo6TXV0ZXgoKQogewogICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgYXR0cjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRpbmdXaW4uY3BwCmluZGV4IGNkZmVjMzBhOWJjM2JlZGI0YjI5OTk1YmY4MmQ0
NTNkZjc4OWQ4YzUuLmFmYTJjYjc0NmRiOTk3ZjdmZGQ1NDlmYTZkYWU0N2QwYWI2ODQ2N2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nV2luLmNwcApAQCAtOTIsMTEgKzkyLDExIEBACiAjaW5jbHVkZSA8cHJv
Y2Vzcy5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRIb2xkZXIu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTIzOSw3ICsyMzksNyBAQCBzaXplX3QgVGhyZWFkOjpnZXRSZWdpc3RlcnMoUGxhdGZv
cm1SZWdpc3RlcnMmIHJlZ2lzdGVycykKICAgICByZXR1cm4gc2l6ZW9mKENPTlRFWFQpOwogfQog
Ci1SZWY8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUN1cnJlbnRUaHJlYWQoKQorVGhyZWFkJiBUaHJl
YWQ6OmluaXRpYWxpemVDdXJyZW50VExTKCkKIHsKICAgICAvLyBOb3QgYSBXVEYtY3JlYXRlZCB0
aHJlYWQsIFRocmVhZElkZW50aWZpZXIgaXMgbm90IGVzdGFibGlzaGVkIHlldC4KICAgICBSZWY8
VGhyZWFkPiB0aHJlYWQgPSBhZG9wdFJlZigqbmV3IFRocmVhZCgpKTsKQEAgLTI1MSw3ICsyNTEs
OCBAQCBSZWY8VGhyZWFkPiBUaHJlYWQ6OmNyZWF0ZUN1cnJlbnRUaHJlYWQoKQogICAgIHRocmVh
ZC0+ZXN0YWJsaXNoUGxhdGZvcm1TcGVjaWZpY0hhbmRsZShoYW5kbGUsIGN1cnJlbnRJRCgpKTsK
ICAgICB0aHJlYWQtPmluaXRpYWxpemVJblRocmVhZCgpOwogICAgIGluaXRpYWxpemVDdXJyZW50
VGhyZWFkRXZlbklmTm9uV1RGQ3JlYXRlZCgpOwotICAgIHJldHVybiB0aHJlYWQ7CisKKyAgICBy
ZXR1cm4gaW5pdGlhbGl6ZVRMUyhXVEZNb3ZlKHRocmVhZCkpOwogfQogCiBUaHJlYWRJZGVudGlm
aWVyIFRocmVhZDo6Y3VycmVudElEKCkKQEAgLTI2Niw2ICsyNjcsMTA0IEBAIHZvaWQgVGhyZWFk
Ojplc3RhYmxpc2hQbGF0Zm9ybVNwZWNpZmljSGFuZGxlKEhBTkRMRSBoYW5kbGUsIFRocmVhZElk
ZW50aWZpZXIgdGhyCiAgICAgbV9pZCA9IHRocmVhZElEOwogfQogCisjZGVmaW5lIEludmFsaWRU
aHJlYWQgKChUaHJlYWQqKSgweGJiYWRiZWVmKSkKKworc3RhdGljIHN0ZDo6bXV0ZXgmIHRocmVh
ZE1hcE11dGV4KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjptdXRleD4gbXV0
ZXg7CisgICAgcmV0dXJuIG11dGV4LmdldCgpOworfQorCitzdGF0aWMgSGFzaE1hcDxUaHJlYWRJ
ZGVudGlmaWVyLCBUaHJlYWQqPiYgdGhyZWFkTWFwKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SGFzaE1hcDxUaHJlYWRJZGVudGlmaWVyLCBUaHJlYWQqPj4gbWFwOworICAgIHJldHVy
biBtYXAuZ2V0KCk7Cit9CisKK3ZvaWQgVGhyZWFkOjppbml0aWFsaXplVExTS2V5KCkKK3sKKyAg
ICB0aHJlYWRNYXBNdXRleCgpOworICAgIHRocmVhZE1hcCgpOworICAgIHRocmVhZFNwZWNpZmlj
S2V5Q3JlYXRlKCZzX2tleSwgZGVzdHJ1Y3RUTFMpOworfQorCitUaHJlYWQqIFRocmVhZDo6Y3Vy
cmVudER5aW5nKCkKK3sKKyAgICBBU1NFUlQoc19rZXkgIT0gSW52YWxpZFRocmVhZFNwZWNpZmlj
S2V5KTsKKyAgICAvLyBBZnRlciBGTFMgaXMgZGVzdHJveWVkLCB0aGlzIG1hcCBvZmZlcnMgdGhl
IHZhbHVlIHVudGlsIHRoZSBzZWNvbmQgdGhyZWFkIGV4aXQgY2FsbGJhY2sgaXMgY2FsbGVkLgor
ICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIodGhyZWFkTWFwTXV0ZXgoKSk7
CisgICAgcmV0dXJuIHRocmVhZE1hcCgpLmdldChjdXJyZW50VGhyZWFkKCkpOworfQorCisvLyBG
SVhNRTogUmVtb3ZlIHRoaXMgd29ya2Fyb3VuZCBjb2RlIG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzMx
NzkzMjEzPiBpcyBmaXhlZC4KK1JlZlB0cjxUaHJlYWQ+IFRocmVhZDo6Z2V0KFRocmVhZElkZW50
aWZpZXIgaWQpCit7CisgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJl
YWRNYXBNdXRleCgpKTsKKyAgICBUaHJlYWQqIHRocmVhZCA9IHRocmVhZE1hcCgpLmdldChpZCk7
CisgICAgaWYgKHRocmVhZCkKKyAgICAgICAgcmV0dXJuIHRocmVhZDsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworVGhyZWFkJiBUaHJlYWQ6OmluaXRpYWxpemVUTFMoUmVmPFRocmVhZD4mJiB0
aHJlYWQpCit7CisgICAgQVNTRVJUKHNfa2V5ICE9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleSk7
CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIHdvcmthcm91bmQgY29kZSBvbmNlIDxyZGFyOi8v
cHJvYmxlbS8zMTc5MzIxMz4gaXMgZml4ZWQuCisgICAgYXV0byBpZCA9IHRocmVhZC0+aWQoKTsK
KyAgICBhdXRvJiB0aHJlYWRJblRMUyA9IHRocmVhZC5sZWFrUmVmKCk7CisgICAgdGhyZWFkU3Bl
Y2lmaWNTZXQoc19rZXksICZ0aHJlYWRJblRMUyk7CisgICAgeworICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZE1hcE11dGV4KCkpOworICAgICAgICB0aHJl
YWRNYXAoKS5hZGQoaWQsICZ0aHJlYWRJblRMUyk7CisgICAgfQorICAgIHJldHVybiB0aHJlYWRJ
blRMUzsKK30KKwordm9pZCBUaHJlYWQ6OmRlc3RydWN0VExTKHZvaWQqIGRhdGEpCit7CisgICAg
aWYgKGRhdGEgPT0gSW52YWxpZFRocmVhZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVGhyZWFk
KiB0aHJlYWQgPSBzdGF0aWNfY2FzdDxUaHJlYWQqPihkYXRhKTsKKyAgICBBU1NFUlQodGhyZWFk
KTsKKworICAgIC8vIERlbGF5IHRoZSBkZWFsbG9jYXRpb24gb2YgVGhyZWFkIG1vcmUuCisgICAg
Ly8gSXQgZGVmZXJzIFRocmVhZCBkZWFsbG9jYXRpb24gYWZ0ZXIgdGhlIG90aGVyIFRocmVhZFNw
ZWNpZmljIHZhbHVlcyBhcmUgZGVhbGxvY2F0ZWQuCisgICAgc3RhdGljIHRocmVhZF9sb2NhbCBj
bGFzcyBUaHJlYWRFeGl0Q2FsbGJhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgVGhyZWFkRXhp
dENhbGxiYWNrKFRocmVhZCogdGhyZWFkKQorICAgICAgICAgICAgOiBtX3RocmVhZCh0aHJlYWQp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIH5UaHJlYWRFeGl0Q2FsbGJhY2soKQor
ICAgICAgICB7CisgICAgICAgICAgICBUaHJlYWQ6OmRlc3RydWN0VExTKG1fdGhyZWFkKTsKKyAg
ICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVGhyZWFkKiBtX3RocmVhZDsKKyAgICB9
IGNhbGxiYWNrKHRocmVhZCk7CisKKyAgICBpZiAodGhyZWFkLT5tX2lzRGVzdHJveWVkT25jZSkg
eworICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9j
a2VyKHRocmVhZE1hcE11dGV4KCkpOworICAgICAgICAgICAgQVNTRVJUKHRocmVhZE1hcCgpLmNv
bnRhaW5zKHRocmVhZC0+bV90aHJlYWQtPmlkKCkpKTsKKyAgICAgICAgICAgIHRocmVhZE1hcCgp
LnJlbW92ZSh0aHJlYWQtPm1fdGhyZWFkLT5pZCgpKTsKKyAgICAgICAgfQorICAgICAgICB0aHJl
YWQtPmRpZEV4aXQoKTsKKyAgICAgICAgdGhyZWFkLT5kZXJlZigpOworCisgICAgICAgIC8vIEZp
bGwgdGhlIEZMUyB3aXRoIHRoZSBub24tbnVsbHB0ciB2YWx1ZS4gV2hpbGUgRkxTIGRlc3RydWN0
b3Igd29uJ3QgYmUgY2FsbGVkIGZvciB0aGF0LAorICAgICAgICAvLyBub24tbnVsbHB0ciB2YWx1
ZSB0ZWxscyB1cyB0aGF0IHdlIGFscmVhZHkgZGVzdHJ1Y3RlZCBUaHJlYWQuIFRoaXMgYWxsb3dz
IHVzIHRvCisgICAgICAgIC8vIGRldGVjdCBpbmNvcnJlY3QgdXNlIG9mIFRocmVhZDo6Y3VycmVu
dCgpIGFmdGVyIHRoaXMgcG9pbnQgYmVjYXVzZSBpdCB3aWxsIGNyYXNoLgorICAgICAgICB0aHJl
YWRTcGVjaWZpY1NldChzX2tleSwgSW52YWxpZFRocmVhZCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgdGhyZWFkU3BlY2lmaWNTZXQoc19rZXksIEludmFsaWRUaHJlYWQpOworICAgIHRo
cmVhZC0+bV9pc0Rlc3Ryb3llZE9uY2UgPSB0cnVlOworfQorCiBNdXRleDo6TXV0ZXgoKQogewog
ICAgIG1fbXV0ZXgubV9yZWN1cnNpb25Db3VudCA9IDA7CkBAIC01MDUsNyArNjA0LDcgQEAgaW50
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCiAgICAg
Ly8gaXQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG5ldyBjb2RlLgogICAgIEFTU0VSVCh0aHJlYWRJ
RCk7CiAKLSAgICBSZWZQdHI8VGhyZWFkPiB0aHJlYWQgPSBUaHJlYWRIb2xkZXI6OmdldCh0aHJl
YWRJRCk7CisgICAgUmVmUHRyPFRocmVhZD4gdGhyZWFkID0gVGhyZWFkOjpnZXQodGhyZWFkSUQp
OwogICAgIGlmICghdGhyZWFkKSB7CiAgICAgICAgIExPR19FUlJPUigiVGhyZWFkSWRlbnRpZmll
ciAldSBkaWQgbm90IGNvcnJlc3BvbmQgdG8gYW4gYWN0aXZlIHRocmVhZCB3aGVuIHRyeWluZyB0
byBxdWl0IiwgdGhyZWFkSUQpOwogICAgICAgICByZXR1cm4gV0FJVF9GQUlMRUQ7Cg==
</data>
<flag name="review"
          id="337705"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
    <flag name="commit-queue"
          id="337718"
          type_id="3"
          status="-"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>