<?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>134667</bug_id>
          
          <creation_ts>2014-07-06 16:36:40 -0700</creation_ts>
          <short_desc>Store ViewSnapshots directly on the WebBackForwardListItem</short_desc>
          <delta_ts>2014-07-10 13:33:37 -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>WebKit2</component>
          <version>528+ (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="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mitz</cc>
    
    <cc>psolanki</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1020699</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-07-06 16:36:40 -0700</bug_when>
    <thetext>Recent back-forward changes mean that we can now avoid the UUID situation and instead store ViewSnapshots directly on the WebBackForwardListItem.

This also means we can make the memory management of snapshots much smarter.

&lt;rdar://problem/17082639&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021533</commentid>
    <comment_count>1</comment_count>
      <attachid>234683</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-07-09 20:07:40 -0700</bug_when>
    <thetext>Created attachment 234683
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021534</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-09 20:10:20 -0700</bug_when>
    <thetext>Attachment 234683 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:62:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:64:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:91:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:93:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:132:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:136:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:163:  Wrong number of spaces before statement. (expected: 4)  [whitespace/indent] [4]
Total errors found: 7 in 20 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>1021537</commentid>
    <comment_count>3</comment_count>
      <attachid>234683</attachid>
    <who name="">mitz</who>
    <bug_when>2014-07-09 20:19:41 -0700</bug_when>
    <thetext>Comment on attachment 234683
patch

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

&gt; Source/WebKit2/ChangeLog:13
&gt; +        prefering older snapshots. Additionally, we would not throw away snapshots when back forward items

typo: “prefering”

&gt; Source/WebKit2/ChangeLog:75
&gt; +        Add create methods which take a image (or slot ID), and relevant sizes.

typo: “methods”
typo: “a image”</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021539</commentid>
    <comment_count>4</comment_count>
      <attachid>234683</attachid>
    <who name="">mitz</who>
    <bug_when>2014-07-09 20:42:36 -0700</bug_when>
    <thetext>Comment on attachment 234683
patch

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

&gt; Source/WebKit2/Shared/WebBackForwardListItem.h:61
&gt; +    void setSnapshot(ViewSnapshot* snapshot) { m_itemState.snapshot = snapshot; }

Should this take a PassRefPtr?

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:-895
&gt; -    snapshot.imageSizeInBytes = snapshotSize.width * snapshotSize.height * 4;

It’s surprising that these images’ rowBytes can be any multiple of 4.

&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:46
&gt;  #define USE_RENDER_SERVER_VIEW_SNAPSHOTS true

We normally use 1, why not here?

&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:102
&gt; +    size_t m_imageSizeInBytes;

Any reason why you removed the = 0 here but not from m_slotID?

&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:133
&gt; +protected:
&gt; +    void didAddImageToSnapshot(ViewSnapshot&amp;);
&gt; +    void willRemoveImageFromSnapshot(ViewSnapshot&amp;);
&gt; +

Why protected?

&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:141
&gt; +    SnapshotSet m_allSnapshotsWithImages;

I think “all” is implied. We don’t call the GraphicsLayer member variable m_allChildren.

&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:86
&gt; +    m_allSnapshotsWithImages.add(&amp;snapshot);

Can you assert that the snapshot is not already in the set?

&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:92
&gt; +    m_allSnapshotsWithImages.remove(&amp;snapshot);

Can you assert that the snapshot is in the set?

&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:143
&gt; +    for (auto&amp; snapshot : m_allSnapshotsWithImages)
&gt; +        snapshot-&gt;clearImage();

Is this iterating a set that’s being mutated? Why is this OK?

&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:194
&gt; +    if (m_slotID)

How can this be false?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021540</commentid>
    <comment_count>5</comment_count>
    <who name="">mitz</who>
    <bug_when>2014-07-09 20:43:13 -0700</bug_when>
    <thetext>This looks good. I didn’t r+ because of my question about mutation during iteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021632</commentid>
    <comment_count>6</comment_count>
      <attachid>234683</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-07-10 09:29:13 -0700</bug_when>
    <thetext>Comment on attachment 234683
patch

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

&gt;&gt; Source/WebKit2/Shared/WebBackForwardListItem.h:61
&gt;&gt; +    void setSnapshot(ViewSnapshot* snapshot) { m_itemState.snapshot = snapshot; }
&gt; 
&gt; Should this take a PassRefPtr?

Certainly could!

&gt;&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:-895
&gt;&gt; -    snapshot.imageSizeInBytes = snapshotSize.width * snapshotSize.height * 4;
&gt; 
&gt; It’s surprising that these images’ rowBytes can be any multiple of 4.

We don&apos;t really have access to the image, so we can&apos;t tell its true size (at least, I don&apos;t know how). We could *assume* the same alignment properties as IOSurface, but since this &quot;size in bytes&quot; is just used for max cache size computation, it&apos;s OK that it&apos;s just an estimate.

&gt;&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:46
&gt;&gt;  #define USE_RENDER_SERVER_VIEW_SNAPSHOTS true
&gt; 
&gt; We normally use 1, why not here?

Fine with me.

&gt;&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:102
&gt;&gt; +    size_t m_imageSizeInBytes;
&gt; 
&gt; Any reason why you removed the = 0 here but not from m_slotID?

No, I meant to get that one too.

&gt;&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:141
&gt;&gt; +    SnapshotSet m_allSnapshotsWithImages;
&gt; 
&gt; I think “all” is implied. We don’t call the GraphicsLayer member variable m_allChildren.

Quite right.

&gt;&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:92
&gt;&gt; +    m_allSnapshotsWithImages.remove(&amp;snapshot);
&gt; 
&gt; Can you assert that the snapshot is in the set?

Both good plans.

&gt;&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:143
&gt;&gt; +        snapshot-&gt;clearImage();
&gt; 
&gt; Is this iterating a set that’s being mutated? Why is this OK?

It&apos;s not! Will fix.

&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:175
&gt; +    clearImage();

This needs to be conditional on whether we still have an image.

&gt;&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:194
&gt;&gt; +    if (m_slotID)
&gt; 
&gt; How can this be false?

createImageSlot is definitely not guaranteed to succeed, but we should probably check that in _takeViewSnapshot instead :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021683</commentid>
    <comment_count>7</comment_count>
      <attachid>234720</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-07-10 12:44:49 -0700</bug_when>
    <thetext>Created attachment 234720
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021684</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-10 12:47:13 -0700</bug_when>
    <thetext>Attachment 234720 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:156:  Wrong number of spaces before statement. (expected: 4)  [whitespace/indent] [4]
Total errors found: 1 in 20 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>1021687</commentid>
    <comment_count>9</comment_count>
      <attachid>234720</attachid>
    <who name="">mitz</who>
    <bug_when>2014-07-10 13:06:47 -0700</bug_when>
    <thetext>Comment on attachment 234720
patch

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

&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:168
&gt; +    clearImage();

You said this needed to be conditional on whether there was an image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021694</commentid>
    <comment_count>10</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-07-10 13:30:14 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 234720 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=234720&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:168
&gt; &gt; +    clearImage();
&gt; 
&gt; You said this needed to be conditional on whether there was an image.

I did, but then I put the condition inside it :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021696</commentid>
    <comment_count>11</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-07-10 13:33:37 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/170974</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234683</attachid>
            <date>2014-07-09 20:07:40 -0700</date>
            <delta_ts>2014-07-10 12:44:49 -0700</delta_ts>
            <desc>patch</desc>
            <filename>snapshots-on-bf.diff</filename>
            <type>text/plain</type>
            <size>37591</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4NjY0YjY3Li5mNjNiNDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTEz
IEBACiAyMDE0LTA3LTA5ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgog
CisgICAgICAgIFN0b3JlIFZpZXdTbmFwc2hvdHMgZGlyZWN0bHkgb24gdGhlIFdlYkJhY2tGb3J3
YXJkTGlzdEl0ZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNDY2NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTcwODI2Mzk+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBWaWV3U25hcHNob3Qg
YSByZWZjb3VudGVkIGNsYXNzLiBTdG9yZSBpdCBkaXJlY3RseSBvbiB0aGUgYmFjay1mb3J3YXJk
IGl0ZW0KKyAgICAgICAgaW5zdGVhZCBvZiBpbiBhIHNpZGUgbWFwIHJlZmVyZW5jZWQgYnkgVVVJ
RC4gU3dpdGNoIHRvIGEgdmVyeSBzaW1wbGUgTFJVIGV2aWN0aW9uIG1vZGVsIGZvciBub3cuCisg
ICAgICAgIFRoaXMgZml4ZXMgYSB0b24gb2Ygc25hcHNob3QgbWFuYWdlbWVudCBidWdzOyBmb3Ig
ZXhhbXBsZSwgd2Ugd291bGQgc3RhcnQgdGhyb3dpbmcgb3V0IHNuYXBzaG90cworICAgICAgICBp
biB0aGUgcGFnZSB0aGF0IHdhcyBhY3RpdmVseSBiZWluZyBpbnRlcmFjdGVkIHdpdGggKmZpcnN0
KiB3aGVuIGV2aWN0aW5nIHNuYXBzaG90cywgaW5zdGVhZCBvZgorICAgICAgICBwcmVmZXJpbmcg
b2xkZXIgc25hcHNob3RzLiBBZGRpdGlvbmFsbHksIHdlIHdvdWxkIG5vdCB0aHJvdyBhd2F5IHNu
YXBzaG90cyB3aGVuIGJhY2sgZm9yd2FyZCBpdGVtcworICAgICAgICBiZWNhbWUgdW5yZWFjaGFi
bGUuCisKKyAgICAgICAgVGhlcmUgaXMgZGVmaW5pdGVseSByb29tIGZvciBpbXByb3ZlbWVudCBv
ZiB0aGUgZXZpY3Rpb24gbWVjaGFuaXNtLCBidXQgdGhpcyBpcyBjbG9zZXIgdG8gYSB0aW1lLXRl
c3RlZCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFNoYXJlZC9TZXNzaW9uU3RhdGUuaDoK
KyAgICAgICAgS2VlcCBhIFZpZXdTbmFwc2hvdCBpbnN0ZWFkIG9mIGEgVVVJRCBvbiB0aGUgQmFj
a0ZvcndhcmRMaXN0SXRlbVN0YXRlLgorCisgICAgICAgICogU2hhcmVkL1dlYkJhY2tGb3J3YXJk
TGlzdEl0ZW0uaDoKKyAgICAgICAgRml4IHNvbWUgaW5kZW50ZWQgbmFtZXNwYWNlIGNvbnRlbnRz
LgorCisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OnNuYXBzaG90KToK
KyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0SXRlbTo6c2V0U25hcHNob3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpzZXRTbmFwc2hvdFVVSUQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpzbmFw
c2hvdFVVSUQpOiBEZWxldGVkLgorICAgICAgICBTd2l0Y2ggdGhlIHNuYXBzaG90IGdldHRlci9z
ZXR0ZXIgdG8gb3BlcmF0ZSBvbiBWaWV3U25hcHNob3RzIGluc3RlYWQgb2YgVVVJRHMuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF90YWtlVmlld1NuYXBzaG90XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmll
dy5tbToKKyAgICAgICAgKC1bV0tWaWV3IF90YWtlVmlld1NuYXBzaG90XSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
UGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnRha2VWaWV3U25hcHNob3QpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnRha2VWaWV3U25hcHNob3Qp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xp
ZW50SW1wbDo6dGFrZVZpZXdTbmFwc2hvdCk6CisgICAgICAgIEFkb3B0IFZpZXdTbmFwc2hvdDo6
Y3JlYXRlLCByZXR1cm4gYSBQYXNzUmVmUHRyLCBhbmQgY2xhc3MtaWZ5IFZpZXdTbmFwc2hvdC4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvVmlld0dlc3R1cmVDb250cm9sbGVySU9TLm1tOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJl
KToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjplbmRTd2lwZUdlc3R1
cmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW06CisgICAg
ICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2hvdWxkVXNlU25hcHNob3RGb3JT
aXplKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBl
R2VzdHVyZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZW5kU3dp
cGVHZXN0dXJlKToKKyAgICAgICAgR3JhYiB0aGUgVmlld1NuYXBzaG90IGRpcmVjdGx5IGZyb20g
dGhlIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0sIGFuZCBhZG9wdCB0aGUgbmV3IGZ1bmN0aW9ucy4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OldlYk1lbW9yeVBy
ZXNzdXJlSGFuZGxlcik6CisgICAgICAgIFJlbmFtZSBkaXNjYXJkU25hcHNob3RzIHRvIGRpc2Nh
cmRTbmFwc2hvdEltYWdlcywgYmVjYXVzZSB3ZSdyZSByZWFsbHkgb25seSBkaXNjYXJkaW5nCisg
ICAgICAgIHRoZSBpbWFnZXM7IHRoZSByZW5kZXIgdHJlZSBzaXplL2JhY2tncm91bmQgY29sb3Ig
InNuYXBzaG90IiByZW1haW5zIGFuZCBpcyB1c2VmdWwuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmg6CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdDo6
c2V0UmVuZGVyVHJlZVNpemUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OnJlbmRl
clRyZWVTaXplKToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90OjpzZXRCYWNrZ3JvdW5k
Q29sb3IpOgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmJhY2tncm91bmRDb2xvcik6
CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdDo6c2V0RGV2aWNlU2NhbGVGYWN0b3IpOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmRldmljZVNjYWxlRmFjdG9yKToKKyAgICAg
ICAgKFdlYktpdDo6Vmlld1NuYXBzaG90OjppbWFnZVNpemVJbkJ5dGVzKToKKyAgICAgICAgKFdl
YktpdDo6Vmlld1NuYXBzaG90OjpzdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBz
aG90OjpzaXplKToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90OjpjcmVhdGlvblRpbWUp
OgorICAgICAgICBNYWtlIFZpZXdTbmFwc2hvdCBhIHJlZmNvdW50ZWQgY2xhc3MuCisgICAgICAg
IEFkZCBjcmVhdGUgbWV0aG9kcyB3aGljaCB0YWtlIGEgaW1hZ2UgKG9yIHNsb3QgSUQpLCBhbmQg
cmVsZXZhbnQgc2l6ZXMuCisgICAgICAgIEl0IGlzIGV4cGVjdGVkIHRoYXQgYSBWaWV3U25hcHNo
b3QgaXMgY3JlYXRlZCB3aXRoIGFuIGltYWdlLCBhbmQgaXQgaXMgb25seSBwb3NzaWJsZQorICAg
ICAgICB0byByZW1vdmUgdGhhdCBpbWFnZSwgbmV2ZXIgdG8gcmVwbGFjZSBpdC4gQSBuZXcgVmll
d1NuYXBzaG90IGlzIHJlcXVpcmVkIGluIHRoYXQgY2FzZS4KKyAgICAgICAgQWRkIHNldHRlcnMg
Zm9yIHRoaW5ncyB0aGF0IFZpZXdTbmFwc2hvdFN0b3JlIHNldHMgb24gdGhlIHNuYXBzaG90IGFm
dGVyIHRoZSBQYWdlQ2xpZW50CisgICAgICAgIHJldHJpZXZlcyBpdCBmcm9tIHRoZSB2aWV3LiBB
ZGQgZ2V0dGVycyBmb3IgdGhpbmdzIHRoYXQgdGhlIFZpZXdHZXN0dXJlQ29udHJvbGxlcnMgbmVl
ZC4KKworICAgICAgICBSZW1vdmUgcmVtb3ZlU25hcHNob3RJbWFnZSwgZ2V0U25hcHNob3QsIGFu
ZCB0aGUgc25hcHNob3QgbWFwLgorCisgICAgICAgICogVUlQcm9jZXNzL21hYy9WaWV3U25hcHNo
b3RTdG9yZS5tbToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90U3RvcmU6On5WaWV3U25h
cHNob3RTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjpkaWRBZGRJ
bWFnZVRvU25hcHNob3QpOgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3RTdG9yZTo6d2ls
bFJlbW92ZUltYWdlRnJvbVNuYXBzaG90KToKKyAgICAgICAgTWFuYWdlIG1fc25hcHNob3RDYWNo
ZVNpemUgYW5kIG1fYWxsU25hcHNob3RzV2l0aEltYWdlcyB2aWEgZGlkQWRkSW1hZ2VUb1NuYXBz
aG90IGFuZCB3aWxsUmVtb3ZlSW1hZ2VGcm9tU25hcHNob3QuCisgICAgICAgIHdpbGxSZW1vdmVJ
bWFnZUZyb21TbmFwc2hvdCB3aWxsIC1hbHdheXMtIGJlIGNhbGxlZCBiZWZvcmUgdGhlIFZpZXdT
bmFwc2hvdCBpcyBkZXN0cm95ZWQuCisKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90U3Rv
cmU6OnBydW5lU25hcHNob3RzKToKKyAgICAgICAgU3dpdGNoIHRvIGEgc2ltcGxlIExSVSBldmlj
dGlvbiBtb2RlbC4gQXMgcHJldmlvdXNseSBtZW50aW9uZWQsIGl0J3MgcG9zc2libGUgdG8gZG8g
YmV0dGVyLCBidXQKKyAgICAgICAgdGhpcyBpcyBtdWNoIGxlc3MgYnJva2VuIHRoYW4gdGhlIHBy
ZXZpb3VzIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0
b3JlOjpyZWNvcmRTbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3Jl
OjpkaXNjYXJkU25hcHNob3RJbWFnZXMpOgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdDo6Vmlld1NuYXBzaG90KToK
KyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90Ojp+Vmlld1NuYXBzaG90KToKKyAgICAgICAg
KFdlYktpdDo6Vmlld1NuYXBzaG90OjpoYXNJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdT
bmFwc2hvdDo6Y2xlYXJJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdDo6YXNM
YXllckNvbnRlbnRzKToKKyAgICAgICAgSWYgYSBzdXJmYWNlIGlzIEVtcHR5IHdoZW4gaXQgY29t
ZXMgYmFjayBmcm9tIGJlaW5nIHZvbGF0aWxlLCB0aHJvdyBhd2F5IHRoZSBzdXJmYWNlCisgICAg
ICAgIGFuZCBub3RpZnkgdGhlIFN0b3JlIHRvIHJlbW92ZSBpdCBmcm9tIG1fc25hcHNob3RDYWNo
ZVNpemUgKHZpYSBjbGVhckltYWdlKCkpLgorCisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hv
dFN0b3JlOjpyZW1vdmVTbmFwc2hvdEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
Vmlld1NuYXBzaG90U3RvcmU6OmdldFNuYXBzaG90KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6Vmlld1NuYXBzaG90U3RvcmU6OmRpc2NhcmRTbmFwc2hvdHMpOiBEZWxldGVkLgorCisyMDE0
LTA3LTA5ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCiAgICAgICAg
IFVzZSBJT1N1cmZhY2UgVmlld1NuYXBzaG90cyBldmVyeXdoZXJlIG9uIE1hYywgcmVtb3ZlIEpQ
RUcgZW5jb2RpbmcgcGF0aAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM0NzczCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNz
aW9uU3RhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNzaW9uU3RhdGUuaAppbmRleCA3
NmU0MWMyLi44ZDE5YzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vzc2lv
blN0YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1Nlc3Npb25TdGF0ZS5oCkBAIC0y
Niw2ICsyNiw3IEBACiAjaWZuZGVmIFNlc3Npb25TdGF0ZV9oCiAjZGVmaW5lIFNlc3Npb25TdGF0
ZV9oCiAKKyNpbmNsdWRlICJWaWV3U25hcHNob3RTdG9yZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
RmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9VUkwuaD4KQEAgLTEyMCw4ICsxMjEsNyBAQCBzdHJ1Y3QgQmFja0ZvcndhcmRMaXN0SXRl
bVN0YXRlIHsKICAgICB1aW50NjRfdCBpZGVudGlmaWVyOwogCiAgICAgUGFnZVN0YXRlIHBhZ2VT
dGF0ZTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgaG9sZCB0aGUgc25hcHNob3QgaXRzZWxm
LCBub3QgaXRzIFVVSUQuCi0gICAgU3RyaW5nIHNuYXBzaG90VVVJRDsKKyAgICBSZWZQdHI8Vmll
d1NuYXBzaG90PiBzbmFwc2hvdDsKIH07CiAKIHN0cnVjdCBCYWNrRm9yd2FyZExpc3RTdGF0ZSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRl
bS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaAppbmRl
eCAwOTYwYzc5Li41YWU3MTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJCYWNr
Rm9yd2FyZExpc3RJdGVtLmgKQEAgLTM2LDggKzM2LDggQEAgY2xhc3MgRGF0YTsKIH0KIAogbmFt
ZXNwYWNlIElQQyB7Ci0gICAgY2xhc3MgQXJndW1lbnREZWNvZGVyOwotICAgIGNsYXNzIEFyZ3Vt
ZW50RW5jb2RlcjsKK2NsYXNzIEFyZ3VtZW50RGVjb2RlcjsKK2NsYXNzIEFyZ3VtZW50RW5jb2Rl
cjsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC01Niw5ICs1Niw5IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtU3RhdGUu
cGFnZVN0YXRlLm1haW5GcmFtZVN0YXRlLm9yaWdpbmFsVVJMU3RyaW5nOyB9CiAgICAgY29uc3Qg
U3RyaW5nJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1TdGF0ZS5wYWdlU3RhdGUubWFpbkZy
YW1lU3RhdGUudXJsU3RyaW5nOyB9CiAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXRlbVN0YXRlLnBhZ2VTdGF0ZS50aXRsZTsgfQotICAgIAotICAgIHZvaWQgc2V0
U25hcHNob3RVVUlEKGNvbnN0IFN0cmluZyYgdXVpZCkgeyBtX2l0ZW1TdGF0ZS5zbmFwc2hvdFVV
SUQgPSB1dWlkOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBzbmFwc2hvdFVVSUQoKSBjb25zdCB7IHJl
dHVybiBtX2l0ZW1TdGF0ZS5zbmFwc2hvdFVVSUQ7IH0KKworICAgIFZpZXdTbmFwc2hvdCogc25h
cHNob3QoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1TdGF0ZS5zbmFwc2hvdC5nZXQoKTsgfQorICAg
IHZvaWQgc2V0U25hcHNob3QoVmlld1NuYXBzaG90KiBzbmFwc2hvdCkgeyBtX2l0ZW1TdGF0ZS5z
bmFwc2hvdCA9IHNuYXBzaG90OyB9CiAKICAgICBzdGF0aWMgdWludDY0X3QgaGlnaGVkVXNlZEl0
ZW1JRCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tCmluZGV4IGIxNWY4NTguLmQ2Yjc3ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC04NzgsMjQgKzg3OCwyMCBAQCAtICh2
b2lkKV9yZXN0b3JlUGFnZVN0YXRlVG9Vbm9ic2N1cmVkQ2VudGVyOihXZWJDb3JlOjpGbG9hdFBv
aW50KWNlbnRlciBzY2FsZTooZAogICAgIF9zY2FsZVRvUmVzdG9yZSA9IHNjYWxlOwogfQogCi0t
IChXZWJLaXQ6OlZpZXdTbmFwc2hvdClfdGFrZVZpZXdTbmFwc2hvdAorLSAoUGFzc1JlZlB0cjxX
ZWJLaXQ6OlZpZXdTbmFwc2hvdD4pX3Rha2VWaWV3U25hcHNob3QKIHsKICAgICBmbG9hdCBkZXZp
Y2VTY2FsZSA9IFdLR2V0U2NyZWVuU2NhbGVGYWN0b3IoKTsKICAgICBDR1NpemUgc25hcHNob3RT
aXplID0gc2VsZi5ib3VuZHMuc2l6ZTsKICAgICBzbmFwc2hvdFNpemUud2lkdGggKj0gZGV2aWNl
U2NhbGU7CiAgICAgc25hcHNob3RTaXplLmhlaWdodCAqPSBkZXZpY2VTY2FsZTsKIAotICAgIFdl
YktpdDo6Vmlld1NuYXBzaG90IHNuYXBzaG90OwotICAgIHNuYXBzaG90LnNsb3RJRCA9IFtXZWJL
aXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjpzbmFwc2hvdHRpbmdDb250ZXh0KCkgY3JlYXRlSW1hZ2VT
bG90OnNuYXBzaG90U2l6ZSBoYXNBbHBoYTpZRVNdOworICAgIHVpbnQzMl90IHNsb3RJRCA9IFtX
ZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjpzbmFwc2hvdHRpbmdDb250ZXh0KCkgY3JlYXRlSW1h
Z2VTbG90OnNuYXBzaG90U2l6ZSBoYXNBbHBoYTpZRVNdOwogCiAgICAgQ0FUcmFuc2Zvcm0zRCB0
cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGRldmljZVNjYWxlLCBkZXZpY2VTY2Fs
ZSwgMSk7Ci0gICAgQ0FSZW5kZXJTZXJ2ZXJDYXB0dXJlTGF5ZXJXaXRoVHJhbnNmb3JtKE1BQ0hf
UE9SVF9OVUxMLCBzZWxmLmxheWVyLmNvbnRleHQuY29udGV4dElkLCAodWludDY0X3Qpc2VsZi5s
YXllciwgc25hcHNob3Quc2xvdElELCAwLCAwLCAmdHJhbnNmb3JtKTsKKyAgICBDQVJlbmRlclNl
cnZlckNhcHR1cmVMYXllcldpdGhUcmFuc2Zvcm0oTUFDSF9QT1JUX05VTEwsIHNlbGYubGF5ZXIu
Y29udGV4dC5jb250ZXh0SWQsICh1aW50NjRfdClzZWxmLmxheWVyLCBzbG90SUQsIDAsIDAsICZ0
cmFuc2Zvcm0pOwogCi0gICAgc25hcHNob3Quc2l6ZSA9IFdlYkNvcmU6OmV4cGFuZGVkSW50U2l6
ZShXZWJDb3JlOjpGbG9hdFNpemUoc25hcHNob3RTaXplKSk7Ci0gICAgc25hcHNob3QuaW1hZ2VT
aXplSW5CeXRlcyA9IHNuYXBzaG90U2l6ZS53aWR0aCAqIHNuYXBzaG90U2l6ZS5oZWlnaHQgKiA0
OwotICAgIHNuYXBzaG90LmJhY2tncm91bmRDb2xvciA9IF9wYWdlLT5wYWdlRXh0ZW5kZWRCYWNr
Z3JvdW5kQ29sb3IoKTsKLQotICAgIHJldHVybiBzbmFwc2hvdDsKKyAgICBXZWJDb3JlOjpJbnRT
aXplIGltYWdlU2l6ZSA9IFdlYkNvcmU6OmV4cGFuZGVkSW50U2l6ZShXZWJDb3JlOjpGbG9hdFNp
emUoc25hcHNob3RTaXplKSk7CisgICAgcmV0dXJuIFdlYktpdDo6Vmlld1NuYXBzaG90OjpjcmVh
dGUoc2xvdElELCBpbWFnZVNpemUsIGltYWdlU2l6ZS53aWR0aCgpICogaW1hZ2VTaXplLmhlaWdo
dCgpICogNCk7CiB9CiAKIC0gKHZvaWQpX3pvb21Ub1BvaW50OihXZWJDb3JlOjpGbG9hdFBvaW50
KXBvaW50IGF0U2NhbGU6KGRvdWJsZSlzY2FsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCmluZGV4IGNmOTBhMTUuLjRh
YTk3OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlld0ludGVybmFsLmgKQEAgLTUwLDkgKzUwLDkgQEAgc3RydWN0IEhpZ2hsaWdodDsK
IH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBWaWV3U25hcHNob3Q7CiBjbGFzcyBXZWJQ
YWdlUHJveHk7CiBzdHJ1Y3QgUHJpbnRJbmZvOwotc3RydWN0IFZpZXdTbmFwc2hvdDsKIH0KIAog
QGNsYXNzIF9XS0ZyYW1lSGFuZGxlOwpAQCAtNzgsNyArNzgsNyBAQCBzdHJ1Y3QgVmlld1NuYXBz
aG90OwogLSAodm9pZClfcmVzdG9yZVBhZ2VTdGF0ZVRvRXhwb3NlZFJlY3Q6KFdlYkNvcmU6OkZs
b2F0UmVjdClleHBvc2VkUmVjdCBzY2FsZTooZG91YmxlKXNjYWxlOwogLSAodm9pZClfcmVzdG9y
ZVBhZ2VTdGF0ZVRvVW5vYnNjdXJlZENlbnRlcjooV2ViQ29yZTo6RmxvYXRQb2ludCljZW50ZXIg
c2NhbGU6KGRvdWJsZSlzY2FsZTsKIAotLSAoV2ViS2l0OjpWaWV3U25hcHNob3QpX3Rha2VWaWV3
U25hcHNob3Q7CistIChQYXNzUmVmUHRyPFdlYktpdDo6Vmlld1NuYXBzaG90PilfdGFrZVZpZXdT
bmFwc2hvdDsKIAogLSAodm9pZClfc2Nyb2xsVG9Db250ZW50T2Zmc2V0OihXZWJDb3JlOjpGbG9h
dFBvaW50KWNvbnRlbnRPZmZzZXQ7CiAtIChCT09MKV9zY3JvbGxUb1JlY3Q6KFdlYkNvcmU6OkZs
b2F0UmVjdCl0YXJnZXRSZWN0IG9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2ludClvcmlnaW4gbWlu
aW11bVNjcm9sbERpc3RhbmNlOihmbG9hdCltaW5pbXVtU2Nyb2xsRGlzdGFuY2U7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KaW5kZXggZTU3OGEwNy4uNGU2YWMy
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQpAQCAtMzEw
MSwxNSArMzEwMSwxMyBAQCAtIChDQUxheWVyICopX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
Um9vdExheWVyCiAgICAgcmV0dXJuIF9kYXRhLT5fcm9vdExheWVyLmdldCgpOwogfQogCi0tIChW
aWV3U25hcHNob3QpX3Rha2VWaWV3U25hcHNob3QKKy0gKFBhc3NSZWZQdHI8Vmlld1NuYXBzaG90
PilfdGFrZVZpZXdTbmFwc2hvdAogewogICAgIE5TV2luZG93ICp3aW5kb3cgPSBzZWxmLndpbmRv
dzsKIAotICAgIFZpZXdTbmFwc2hvdCBzbmFwc2hvdDsKLQogICAgIENHU1dpbmRvd0lEIHdpbmRv
d0lEID0gKENHU1dpbmRvd0lEKVt3aW5kb3cgd2luZG93TnVtYmVyXTsKICAgICBpZiAoIXdpbmRv
d0lEKQotICAgICAgICByZXR1cm4gc25hcHNob3Q7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHdpbmRvd1NuYXBzaG90SW1hZ2UgPSBhZG9wdENG
KENHV2luZG93TGlzdENyZWF0ZUltYWdlKENHUmVjdE51bGwsIGtDR1dpbmRvd0xpc3RPcHRpb25J
bmNsdWRpbmdXaW5kb3csIHdpbmRvd0lELCBrQ0dXaW5kb3dJbWFnZUJvdW5kc0lnbm9yZUZyYW1p
bmcgfCBrQ0dXaW5kb3dJbWFnZVNob3VsZEJlT3BhcXVlKSk7CiAKQEAgLTMxNDEsMTUgKzMxMzks
MTAgQEAgLSAoVmlld1NuYXBzaG90KV90YWtlVmlld1NuYXBzaG90CiAKICAgICBhdXRvIGNyb3Bw
ZWRTbmFwc2hvdEltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KHdp
bmRvd1NuYXBzaG90SW1hZ2UuZ2V0KCksIE5TUmVjdFRvQ0dSZWN0KFt3aW5kb3cgY29udmVydFJl
Y3RUb0JhY2tpbmc6Y3JvcHBlZEltYWdlUmVjdF0pKSk7CiAKLSAgICBzbmFwc2hvdC5zdXJmYWNl
ID0gSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2UoY3JvcHBlZFNuYXBzaG90SW1hZ2UuZ2V0KCkp
OwotICAgIHNuYXBzaG90LnN1cmZhY2UtPnNldElzVm9sYXRpbGUodHJ1ZSk7Ci0KLSAgICBJbnRT
aXplIGltYWdlU2l6ZShDR0ltYWdlR2V0V2lkdGgoY3JvcHBlZFNuYXBzaG90SW1hZ2UuZ2V0KCkp
LCBDR0ltYWdlR2V0SGVpZ2h0KGNyb3BwZWRTbmFwc2hvdEltYWdlLmdldCgpKSk7Ci0gICAgc25h
cHNob3Quc2l6ZSA9IGltYWdlU2l6ZTsKLSAgICBzbmFwc2hvdC5pbWFnZVNpemVJbkJ5dGVzID0g
aW1hZ2VTaXplLndpZHRoKCkgKiBpbWFnZVNpemUuaGVpZ2h0KCkgKiA0OwotICAgIHNuYXBzaG90
LmJhY2tncm91bmRDb2xvciA9IF9kYXRhLT5fcGFnZS0+cGFnZUV4dGVuZGVkQmFja2dyb3VuZENv
bG9yKCk7CisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2UoY3Jv
cHBlZFNuYXBzaG90SW1hZ2UuZ2V0KCkpOworICAgIHN1cmZhY2UtPnNldElzVm9sYXRpbGUodHJ1
ZSk7CiAKLSAgICByZXR1cm4gc25hcHNob3Q7CisgICAgcmV0dXJuIFZpZXdTbmFwc2hvdDo6Y3Jl
YXRlKHN1cmZhY2UuZ2V0KCksIHN1cmZhY2UtPnNpemUoKSwgc3VyZmFjZS0+dG90YWxCeXRlcygp
KTsKIH0KIAogLSAodm9pZClfd2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmU6KE5TRXZl
bnQgKilldmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tWaWV3SW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmll
d0ludGVybmFsLmgKaW5kZXggMzFmMjU0MS4uN2ZmYTlkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCkBAIC00NywxMCArNDcsMTAg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5OwogY2xhc3MgRmlu
ZEluZGljYXRvcjsKIGNsYXNzIExheWVyVHJlZUNvbnRleHQ7CitjbGFzcyBWaWV3U25hcHNob3Q7
CiBjbGFzcyBXZWJDb250ZXh0Owogc3RydWN0IENvbG9yU3BhY2VEYXRhOwogc3RydWN0IEVkaXRv
clN0YXRlOwotc3RydWN0IFZpZXdTbmFwc2hvdDsKIHN0cnVjdCBXZWJQYWdlQ29uZmlndXJhdGlv
bjsKIH0KIApAQCAtODMsNyArODMsNyBAQCBzdHJ1Y3QgV2ViUGFnZUNvbmZpZ3VyYXRpb247CiAt
ICh2b2lkKV9zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZVJvb3RMYXllcjooQ0FMYXllciAq
KXJvb3RMYXllcjsKIC0gKENBTGF5ZXIgKilfYWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVSb290
TGF5ZXI7CiAKLS0gKFdlYktpdDo6Vmlld1NuYXBzaG90KV90YWtlVmlld1NuYXBzaG90OworLSAo
UGFzc1JlZlB0cjxXZWJLaXQ6OlZpZXdTbmFwc2hvdD4pX3Rha2VWaWV3U25hcHNob3Q7CiAtICh2
b2lkKV93aGVlbEV2ZW50V2FzTm90SGFuZGxlZEJ5V2ViQ29yZTooTlNFdmVudCAqKWV2ZW50Owog
CiAtICh2b2lkKV9zZXRBY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuOihOU0RhdGEgKilkYXRh
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXggN2NhNDZlNi4uMzllZWIx
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCkBAIC01NywxMCArNTcsMTAg
QEAgY2xhc3MgRHJhd2luZ0FyZWFQcm94eTsKIGNsYXNzIEZpbmRJbmRpY2F0b3I7CiBjbGFzcyBO
YXRpdmVXZWJLZXlib2FyZEV2ZW50OwogY2xhc3MgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb247
CitjbGFzcyBWaWV3U25hcHNob3Q7CiBjbGFzcyBXZWJDb250ZXh0TWVudVByb3h5OwogY2xhc3Mg
V2ViRWRpdENvbW1hbmRQcm94eTsKIGNsYXNzIFdlYlBvcHVwTWVudVByb3h5Owotc3RydWN0IFZp
ZXdTbmFwc2hvdDsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiBjbGFzcyBOYXRpdmVXZWJU
b3VjaEV2ZW50OwpAQCAtMTgwLDcgKzE4MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
bWFrZUZpcnN0UmVzcG9uZGVyKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nUm9vdExheWVyKExheWVyT3JWaWV3ICopID0gMDsKICAgICB2aXJ0dWFsIExh
eWVyT3JWaWV3ICphY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKCkgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgVmlld1NuYXBzaG90IHRha2VWaWV3U25hcHNob3QoKSA9IDA7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFZpZXdTbmFwc2hvdD4gdGFrZVZpZXdTbmFwc2hvdCgpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgd2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNvcmUoY29uc3QgTmF0
aXZlV2ViV2hlZWxFdmVudCYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDdXN0b21Td2lw
ZVZpZXdzKCkgPSAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCmluZGV4IDQzNzE1YTUuLmE2NmE0NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCkBAIC00OTE4LDcgKzQ5MTgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQsIFZlY3Rv
cjxTdHJpbgogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogI2lmIFBMQVRGT1JNKENPQ09BKQot
Vmlld1NuYXBzaG90IFdlYlBhZ2VQcm94eTo6dGFrZVZpZXdTbmFwc2hvdCgpCitQYXNzUmVmUHRy
PFZpZXdTbmFwc2hvdD4gV2ViUGFnZVByb3h5Ojp0YWtlVmlld1NuYXBzaG90KCkKIHsKICAgICBy
ZXR1cm4gbV9wYWdlQ2xpZW50LnRha2VWaWV3U25hcHNob3QoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCBiMWRjNjZiLi5jMGYyZTZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xNTIsNiArMTUyLDcgQEAgY2xhc3Mg
UGFnZUNsaWVudDsKIGNsYXNzIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOwogY2xhc3MgUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTsKIGNsYXNzIFN0cmluZ1BhaXJWZWN0b3I7Citj
bGFzcyBWaWV3U25hcHNob3Q7CiBjbGFzcyBWaXNpdGVkTGlua1Byb3ZpZGVyOwogY2xhc3MgV2Vi
QmFja0ZvcndhcmRMaXN0OwogY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0SXRlbTsKQEAgLTE3Myw3
ICsxNzQsNiBAQCBzdHJ1Y3QgRWRpdGluZ1JhbmdlOwogc3RydWN0IEVkaXRvclN0YXRlOwogc3Ry
dWN0IFBsYXRmb3JtUG9wdXBNZW51RGF0YTsKIHN0cnVjdCBQcmludEluZm87Ci1zdHJ1Y3QgVmll
d1NuYXBzaG90Owogc3RydWN0IFdlYlBvcHVwSXRlbTsKIAogI2lmIEVOQUJMRShWSUJSQVRJT04p
CkBAIC04ODQsNyArODg0LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVjb3JkTmF2aWdhdGlvblNu
YXBzaG90KCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBWaWV3U25hcHNob3QgdGFrZVZp
ZXdTbmFwc2hvdCgpOworICAgIFBhc3NSZWZQdHI8Vmlld1NuYXBzaG90PiB0YWtlVmlld1NuYXBz
aG90KCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCmluZGV4IDIyZWNkZjgu
LjNhMzE5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNs
aWVudEltcGxJT1MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLmgKQEAgLTEwNSw3ICsxMDUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgTGF5
ZXJPclZpZXcgKmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIExheWVySG9zdGluZ01vZGUgdmlld0xheWVySG9zdGluZ01vZGUoKSBv
dmVycmlkZSB7IHJldHVybiBMYXllckhvc3RpbmdNb2RlOjpPdXRPZlByb2Nlc3M7IH0KIAotICAg
IHZpcnR1YWwgVmlld1NuYXBzaG90IHRha2VWaWV3U25hcHNob3QoKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Vmlld1NuYXBzaG90PiB0YWtlVmlld1NuYXBzaG90KCkgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHdoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3JlKGNv
bnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJDdXN0b21Td2lwZVZpZXdzKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCmluZGV4IDJhMGNkZjYuLjY0ZmUwYzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJ
T1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5tbQpAQCAtNDcwLDcgKzQ3MCw3IEBAIExheWVyT3JWaWV3ICpQYWdlQ2xpZW50SW1wbDo6YWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcigpIGNvbnN0CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKLVZpZXdTbmFwc2hvdCBQYWdlQ2xpZW50SW1wbDo6dGFrZVZpZXdTbmFwc2hvdCgpCitQ
YXNzUmVmUHRyPFZpZXdTbmFwc2hvdD4gUGFnZUNsaWVudEltcGw6OnRha2VWaWV3U25hcHNob3Qo
KQogewogICAgIHJldHVybiBbbV93ZWJWaWV3IF90YWtlVmlld1NuYXBzaG90XTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvVmlld0dlc3R1cmVDb250cm9sbGVy
SU9TLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9WaWV3R2VzdHVyZUNvbnRyb2xs
ZXJJT1MubW0KaW5kZXggMjI0MjlmZC4uOTE0YTg0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW0KKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJJT1MubW0KQEAgLTE2
OCwxNCArMTY4LDEzIEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBlR2Vz
dHVyZShfVUlOYXZpZ2F0aW9uSW50ZXJhY3RpdmVUcmFuc2l0aW9uCiAgICAgbV9zbmFwc2hvdFZp
ZXcgPSBhZG9wdE5TKFtbVUlWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOmxpdmVTd2lwZVZpZXdG
cmFtZV0pOwogCiAgICAgUmV0YWluUHRyPFVJQ29sb3I+IGJhY2tncm91bmRDb2xvciA9IFtVSUNv
bG9yIHdoaXRlQ29sb3JdOwotICAgIFZpZXdTbmFwc2hvdCBzbmFwc2hvdDsKLSAgICBpZiAoVmll
d1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLmdldFNuYXBzaG90KHRhcmdldEl0ZW0sIHNuYXBzaG90
KSkgeworICAgIGlmIChWaWV3U25hcHNob3QqIHNuYXBzaG90ID0gdGFyZ2V0SXRlbS0+c25hcHNo
b3QoKSkgewogICAgICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IG1fd2ViUGFnZVByb3h5
LmRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgICAgIEZsb2F0U2l6ZSBzd2lwZUxheWVyU2l6ZUlu
RGV2aWNlQ29vcmRpbmF0ZXMobGl2ZVN3aXBlVmlld0ZyYW1lLnNpemUpOwogICAgICAgICBzd2lw
ZUxheWVyU2l6ZUluRGV2aWNlQ29vcmRpbmF0ZXMuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwot
ICAgICAgICBpZiAoc25hcHNob3QuaGFzSW1hZ2UoKSAmJiBzbmFwc2hvdC5zaXplID09IHN3aXBl
TGF5ZXJTaXplSW5EZXZpY2VDb29yZGluYXRlcyAmJiBkZXZpY2VTY2FsZUZhY3RvciA9PSBzbmFw
c2hvdC5kZXZpY2VTY2FsZUZhY3RvcikKLSAgICAgICAgICAgIFttX3NuYXBzaG90VmlldyBsYXll
cl0uY29udGVudHMgPSBzbmFwc2hvdC5hc0xheWVyQ29udGVudHMoKTsKLSAgICAgICAgQ29sb3Ig
Y29yZUNvbG9yID0gc25hcHNob3QuYmFja2dyb3VuZENvbG9yOworICAgICAgICBpZiAoc25hcHNo
b3QtPmhhc0ltYWdlKCkgJiYgc25hcHNob3QtPnNpemUoKSA9PSBzd2lwZUxheWVyU2l6ZUluRGV2
aWNlQ29vcmRpbmF0ZXMgJiYgZGV2aWNlU2NhbGVGYWN0b3IgPT0gc25hcHNob3QtPmRldmljZVNj
YWxlRmFjdG9yKCkpCisgICAgICAgICAgICBbbV9zbmFwc2hvdFZpZXcgbGF5ZXJdLmNvbnRlbnRz
ID0gc25hcHNob3QtPmFzTGF5ZXJDb250ZW50cygpOworICAgICAgICBDb2xvciBjb3JlQ29sb3Ig
PSBzbmFwc2hvdC0+YmFja2dyb3VuZENvbG9yKCk7CiAgICAgICAgIGlmIChjb3JlQ29sb3IuaXNW
YWxpZCgpKQogICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gYWRvcHROUyhbW1VJQ29sb3Ig
YWxsb2NdIGluaXRXaXRoQ0dDb2xvcjpjYWNoZWRDR0NvbG9yKGNvcmVDb2xvciwgQ29sb3JTcGFj
ZURldmljZVJHQildKTsKICAgICB9CkBAIC0yNDQsMTAgKzI0Myw5IEBAIHZvaWQgVmlld0dlc3R1
cmVDb250cm9sbGVyOjplbmRTd2lwZUdlc3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogdGFy
Z2V0SXRlbSwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFZpZXdTbmFwc2hvdCBzbmFw
c2hvdDsKICAgICBtX3NuYXBzaG90UmVtb3ZhbFRhcmdldFJlbmRlclRyZWVTaXplID0gMDsKLSAg
ICBpZiAoVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLmdldFNuYXBzaG90KHRhcmdldEl0ZW0s
IHNuYXBzaG90KSkKLSAgICAgICAgbV9zbmFwc2hvdFJlbW92YWxUYXJnZXRSZW5kZXJUcmVlU2l6
ZSA9IHNuYXBzaG90LnJlbmRlclRyZWVTaXplICogc3dpcGVTbmFwc2hvdFJlbW92YWxSZW5kZXJU
cmVlU2l6ZVRhcmdldEZyYWN0aW9uOworICAgIGlmIChWaWV3U25hcHNob3QqIHNuYXBzaG90ID0g
dGFyZ2V0SXRlbS0+c25hcHNob3QoKSkKKyAgICAgICAgbV9zbmFwc2hvdFJlbW92YWxUYXJnZXRS
ZW5kZXJUcmVlU2l6ZSA9IHNuYXBzaG90LT5yZW5kZXJUcmVlU2l6ZSgpICogc3dpcGVTbmFwc2hv
dFJlbW92YWxSZW5kZXJUcmVlU2l6ZVRhcmdldEZyYWN0aW9uOwogCiAgICAgLy8gV2UgZG9uJ3Qg
d2FudCB0byByZXBsYWNlIHRoZSBjdXJyZW50IGJhY2stZm9yd2FyZCBpdGVtJ3Mgc25hcHNob3QK
ICAgICAvLyBsaWtlIHdlIG5vcm1hbGx5IHdvdWxkIHdoZW4gZ29pbmcgYmFjayBvciBmb3J3YXJk
LCBiZWNhdXNlIHdlIGFyZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvaW9zL1dlYk1lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbQppbmRleCA3ZDQ5OTlhLi41MjNk
MGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYk1lbW9yeVBy
ZXNzdXJlSGFuZGxlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dl
Yk1lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbQpAQCAtNDgsNyArNDgsNyBAQCBXZWJNZW1vcnlQ
cmVzc3VyZUhhbmRsZXI6OldlYk1lbW9yeVByZXNzdXJlSGFuZGxlcigpCiAgICAgZGlzcGF0Y2hf
c291cmNlX3Qgc291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0Vf
VFlQRV9NRU1PUllTVEFUVVMsIDAsIERJU1BBVENIX01FTU9SWVNUQVRVU19QUkVTU1VSRV9XQVJO
LCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpKTsKICAgICBkaXNwYXRjaF9zZXRfY29udGV4dChz
b3VyY2UsIHRoaXMpOwogICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihzb3Vy
Y2UsIF57Ci0gICAgICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaGFyZWQoKS5kaXNjYXJkU25hcHNo
b3RzKCk7CisgICAgICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaGFyZWQoKS5kaXNjYXJkU25hcHNo
b3RJbWFnZXMoKTsKICAgICB9KTsKICAgICBkaXNwYXRjaF9yZXN1bWUoc291cmNlKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaAppbmRleCA2MTFm
YTk3Li5mNTdjODE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Bh
Z2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xp
ZW50SW1wbC5oCkBAIC0xMjQsNyArMTI0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKTsKIAot
ICAgIHZpcnR1YWwgVmlld1NuYXBzaG90IHRha2VWaWV3U25hcHNob3QoKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Vmlld1NuYXBzaG90PiB0YWtlVmlld1NuYXBzaG90KCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHdoZWVsRXZlbnRXYXNOb3RIYW5kbGVkQnlXZWJDb3Jl
KGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJDdXN0b21Td2lwZVZpZXdzKCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0gYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCmluZGV4IDQ3YTg3NDYuLmUxYjVhMDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0K
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQpAQCAt
NTA3LDcgKzUwNyw3IEBAIENBTGF5ZXIgKlBhZ2VDbGllbnRJbXBsOjphY2NlbGVyYXRlZENvbXBv
c2l0aW5nUm9vdExheWVyKCkgY29uc3QKICAgICByZXR1cm4gbV93a1ZpZXcuX2FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlUm9vdExheWVyOwogfQogCi1WaWV3U25hcHNob3QgUGFnZUNsaWVudElt
cGw6OnRha2VWaWV3U25hcHNob3QoKQorUGFzc1JlZlB0cjxWaWV3U25hcHNob3Q+IFBhZ2VDbGll
bnRJbXBsOjp0YWtlVmlld1NuYXBzaG90KCkKIHsKICAgICByZXR1cm4gW21fd2tWaWV3IF90YWtl
Vmlld1NuYXBzaG90XTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvVmlld0dlc3R1cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1ZpZXdHZXN0dXJlQ29udHJvbGxlci5oCmluZGV4IGI2MDg1YTIuLjhlMTJkMTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIu
aApAQCAtNTAsNyArNTAsNyBAQCBjbGFzcyBJT1N1cmZhY2U7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1zdHJ1Y3QgVmlld1NuYXBzaG90OworY2xhc3MgVmlld1NuYXBzaG90OwogY2xhc3MgV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbTsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5t
bQppbmRleCAxNTQ5MjkxLi5iOTZhNTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlck1hYy5tbQpAQCAtNDU0LDEyICs0
NTQsMTIgQEAgQ0FMYXllciAqVmlld0dlc3R1cmVDb250cm9sbGVyOjpkZXRlcm1pbmVMYXllckFk
amFjZW50VG9TbmFwc2hvdEZvclBhcmVudChTd2lwZUQKIGJvb2wgVmlld0dlc3R1cmVDb250cm9s
bGVyOjpzaG91bGRVc2VTbmFwc2hvdEZvclNpemUoVmlld1NuYXBzaG90JiBzbmFwc2hvdCwgRmxv
YXRTaXplIHN3aXBlTGF5ZXJTaXplLCBmbG9hdCB0b3BDb250ZW50SW5zZXQpCiB7CiAgICAgZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBtX3dlYlBhZ2VQcm94eS5kZXZpY2VTY2FsZUZhY3Rvcigp
OwotICAgIGlmIChzbmFwc2hvdC5kZXZpY2VTY2FsZUZhY3RvciAhPSBkZXZpY2VTY2FsZUZhY3Rv
cikKKyAgICBpZiAoc25hcHNob3QuZGV2aWNlU2NhbGVGYWN0b3IoKSAhPSBkZXZpY2VTY2FsZUZh
Y3RvcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRmxvYXRTaXplIHVub2JzY3VyZWRT
d2lwZUxheWVyU2l6ZUluRGV2aWNlQ29vcmRpbmF0ZXMgPSBzd2lwZUxheWVyU2l6ZSAtIEZsb2F0
U2l6ZSgwLCB0b3BDb250ZW50SW5zZXQpOwogICAgIHVub2JzY3VyZWRTd2lwZUxheWVyU2l6ZUlu
RGV2aWNlQ29vcmRpbmF0ZXMuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgIGlmIChzbmFw
c2hvdC5zaXplICE9IHVub2JzY3VyZWRTd2lwZUxheWVyU2l6ZUluRGV2aWNlQ29vcmRpbmF0ZXMp
CisgICAgaWYgKHNuYXBzaG90LnNpemUoKSAhPSB1bm9ic2N1cmVkU3dpcGVMYXllclNpemVJbkRl
dmljZUNvb3JkaW5hdGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTUyNiwxNiArNTI2LDE1IEBAIHZvaWQgVmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdp
blN3aXBlR2VzdHVyZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtCiAgICAgYm9v
bCBnZW9tZXRyeUlzRmxpcHBlZFRvUm9vdCA9IGxheWVyR2VvbWV0cnlGbGlwcGVkVG9Sb290KHNu
YXBzaG90TGF5ZXJQYXJlbnQpOwogCiAgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGJhY2tncm91
bmRDb2xvciA9IENHQ29sb3JHZXRDb25zdGFudENvbG9yKGtDR0NvbG9yV2hpdGUpOwotICAgIFZp
ZXdTbmFwc2hvdCBzbmFwc2hvdDsKLSAgICBpZiAoVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgp
LmdldFNuYXBzaG90KHRhcmdldEl0ZW0sIHNuYXBzaG90KSkgewotICAgICAgICBpZiAoc2hvdWxk
VXNlU25hcHNob3RGb3JTaXplKHNuYXBzaG90LCBzd2lwZUFyZWEuc2l6ZSgpLCB0b3BDb250ZW50
SW5zZXQpKQotICAgICAgICAgICAgW21fc3dpcGVTbmFwc2hvdExheWVyIHNldENvbnRlbnRzOnNu
YXBzaG90LmFzTGF5ZXJDb250ZW50cygpXTsKKyAgICBpZiAoVmlld1NuYXBzaG90KiBzbmFwc2hv
dCA9IHRhcmdldEl0ZW0tPnNuYXBzaG90KCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFVzZVNuYXBz
aG90Rm9yU2l6ZSgqc25hcHNob3QsIHN3aXBlQXJlYS5zaXplKCksIHRvcENvbnRlbnRJbnNldCkp
CisgICAgICAgICAgICBbbV9zd2lwZVNuYXBzaG90TGF5ZXIgc2V0Q29udGVudHM6c25hcHNob3Qt
PmFzTGF5ZXJDb250ZW50cygpXTsKIAotICAgICAgICBDb2xvciBjb3JlQ29sb3IgPSBzbmFwc2hv
dC5iYWNrZ3JvdW5kQ29sb3I7CisgICAgICAgIENvbG9yIGNvcmVDb2xvciA9IHNuYXBzaG90LT5i
YWNrZ3JvdW5kQ29sb3IoKTsKICAgICAgICAgaWYgKGNvcmVDb2xvci5pc1ZhbGlkKCkpCiAgICAg
ICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBjYWNoZWRDR0NvbG9yKGNvcmVDb2xvciwgQ29sb3JT
cGFjZURldmljZVJHQik7CiAjaWYgVVNFX0lPU1VSRkFDRV9WSUVXX1NOQVBTSE9UUwotICAgICAg
ICBtX2N1cnJlbnRTd2lwZVNuYXBzaG90U3VyZmFjZSA9IHNuYXBzaG90LnN1cmZhY2U7CisgICAg
ICAgIG1fY3VycmVudFN3aXBlU25hcHNob3RTdXJmYWNlID0gc25hcHNob3QtPnN1cmZhY2UoKTsK
ICNlbmRpZgogICAgIH0KIApAQCAtNjMwLDEwICs2MjksOSBAQCB2b2lkIFZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6ZW5kU3dpcGVHZXN0dXJlKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0
ZW0sCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWaWV3U25hcHNob3Qgc25hcHNob3Q7
CiAgICAgdWludDY0X3QgcmVuZGVyVHJlZVNpemUgPSAwOwotICAgIGlmIChWaWV3U25hcHNob3RT
dG9yZTo6c2hhcmVkKCkuZ2V0U25hcHNob3QodGFyZ2V0SXRlbSwgc25hcHNob3QpKQotICAgICAg
ICByZW5kZXJUcmVlU2l6ZSA9IHNuYXBzaG90LnJlbmRlclRyZWVTaXplOworICAgIGlmIChWaWV3
U25hcHNob3QqIHNuYXBzaG90ID0gdGFyZ2V0SXRlbS0+c25hcHNob3QoKSkKKyAgICAgICAgcmVu
ZGVyVHJlZVNpemUgPSBzbmFwc2hvdC0+cmVuZGVyVHJlZVNpemUoKTsKIAogICAgIG1fd2ViUGFn
ZVByb3h5LnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVj
dG9yOjpTZXRSZW5kZXJUcmVlU2l6ZU5vdGlmaWNhdGlvblRocmVzaG9sZChyZW5kZXJUcmVlU2l6
ZSAqIHN3aXBlU25hcHNob3RSZW1vdmFsUmVuZGVyVHJlZVNpemVUYXJnZXRGcmFjdGlvbiksIG1f
d2ViUGFnZVByb3h5LnBhZ2VJRCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9WaWV3U25hcHNob3RTdG9yZS5oCmluZGV4IDJiYzc3ZGYuLmI2MWFiYzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmgKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlIDxjaHJvbm8+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIApAQCAtNDUsMzMgKzQ2LDcwIEBAIE9CSkNfQ0xBU1MgQ0FDb250ZXh0OwogI2RlZmlu
ZSBVU0VfUkVOREVSX1NFUlZFUl9WSUVXX1NOQVBTSE9UUyB0cnVlCiAjZW5kaWYKIAorbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgSU9TdXJmYWNlOworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAorY2xhc3MgVmlld1NuYXBzaG90U3RvcmU7CiBjbGFzcyBXZWJCYWNrRm9yd2FyZExpc3RJdGVt
OwogY2xhc3MgV2ViUGFnZVByb3h5OwogCi1zdHJ1Y3QgVmlld1NuYXBzaG90IHsKK2NsYXNzIFZp
ZXdTbmFwc2hvdCA6IHB1YmxpYyBSZWZDb3VudGVkPFZpZXdTbmFwc2hvdD4geworcHVibGljOgog
I2lmIFVTRV9JT1NVUkZBQ0VfVklFV19TTkFQU0hPVFMKLSAgICBSZWZQdHI8V2ViQ29yZTo6SU9T
dXJmYWNlPiBzdXJmYWNlOwotI2VuZGlmCi0jaWYgVVNFX1JFTkRFUl9TRVJWRVJfVklFV19TTkFQ
U0hPVFMKLSAgICB1aW50MzJfdCBzbG90SUQgPSAwOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFZp
ZXdTbmFwc2hvdD4gY3JlYXRlKFdlYkNvcmU6OklPU3VyZmFjZSosIFdlYkNvcmU6OkludFNpemUg
c2l6ZSwgc2l6ZV90IGltYWdlU2l6ZUluQnl0ZXMpOworI2VsaWYgVVNFX1JFTkRFUl9TRVJWRVJf
VklFV19TTkFQU0hPVFMKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxWaWV3U25hcHNob3Q+IGNyZWF0
ZSh1aW50MzJfdCBzbG90SUQsIFdlYkNvcmU6OkludFNpemUgc2l6ZSwgc2l6ZV90IGltYWdlU2l6
ZUluQnl0ZXMpOwogI2VuZGlmCiAKLSAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1l
X3BvaW50IGNyZWF0aW9uVGltZTsKLSAgICB1aW50NjRfdCByZW5kZXJUcmVlU2l6ZTsKLSAgICBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvcjsKLSAgICBXZWJDb3JlOjpJbnRTaXplIHNpemU7Ci0gICAg
c2l6ZV90IGltYWdlU2l6ZUluQnl0ZXMgPSAwOwotICAgIFdlYkNvcmU6OkNvbG9yIGJhY2tncm91
bmRDb2xvcjsKKyAgICB+Vmlld1NuYXBzaG90KCk7CiAKICAgICB2b2lkIGNsZWFySW1hZ2UoKTsK
ICAgICBib29sIGhhc0ltYWdlKCkgY29uc3Q7CiAgICAgaWQgYXNMYXllckNvbnRlbnRzKCk7CisK
KyAgICB2b2lkIHNldFJlbmRlclRyZWVTaXplKHVpbnQ2NF90IHJlbmRlclRyZWVTaXplKSB7IG1f
cmVuZGVyVHJlZVNpemUgPSByZW5kZXJUcmVlU2l6ZTsgfQorICAgIHVpbnQ2NF90IHJlbmRlclRy
ZWVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJUcmVlU2l6ZTsgfQorCisgICAgdm9pZCBz
ZXRCYWNrZ3JvdW5kQ29sb3IoV2ViQ29yZTo6Q29sb3IgY29sb3IpIHsgbV9iYWNrZ3JvdW5kQ29s
b3IgPSBjb2xvcjsgfQorICAgIFdlYkNvcmU6OkNvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9CisKKyAgICB2b2lkIHNldERldmljZVNjYWxl
RmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKSB7IG1fZGV2aWNlU2NhbGVGYWN0b3IgPSBk
ZXZpY2VTY2FsZUZhY3RvcjsgfQorICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9kZXZpY2VTY2FsZUZhY3RvcjsgfQorCisgICAgc2l6ZV90IGltYWdlU2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlU2l6ZUluQnl0ZXM7IH0KKyNpZiBVU0VfSU9T
VVJGQUNFX1ZJRVdfU05BUFNIT1RTCisgICAgV2ViQ29yZTo6SU9TdXJmYWNlKiBzdXJmYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9CisjZW5kaWYKKyAgICBXZWJDb3JlOjpJ
bnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBzdGQ6OmNocm9ubzo6
c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IGNyZWF0aW9uVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3JlYXRpb25UaW1lOyB9CisKK3ByaXZhdGU6CisjaWYgVVNFX0lPU1VSRkFDRV9WSUVXX1NOQVBT
SE9UUworICAgIGV4cGxpY2l0IFZpZXdTbmFwc2hvdChXZWJDb3JlOjpJT1N1cmZhY2UqLCBXZWJD
b3JlOjpJbnRTaXplIHNpemUsIHNpemVfdCBpbWFnZVNpemVJbkJ5dGVzKTsKKyNlbGlmIFVTRV9S
RU5ERVJfU0VSVkVSX1ZJRVdfU05BUFNIT1RTCisgICAgZXhwbGljaXQgVmlld1NuYXBzaG90KHVp
bnQzMl90IHNsb3RJRCwgV2ViQ29yZTo6SW50U2l6ZSBzaXplLCBzaXplX3QgaW1hZ2VTaXplSW5C
eXRlcyk7CisjZW5kaWYKKworI2lmIFVTRV9JT1NVUkZBQ0VfVklFV19TTkFQU0hPVFMKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBtX3N1cmZhY2U7CisjZWxpZiBVU0VfUkVOREVSX1NF
UlZFUl9WSUVXX1NOQVBTSE9UUworICAgIHVpbnQzMl90IG1fc2xvdElEID0gMDsKKyNlbmRpZgor
CisgICAgc2l6ZV90IG1faW1hZ2VTaXplSW5CeXRlczsKKyAgICBzdGQ6OmNocm9ubzo6c3RlYWR5
X2Nsb2NrOjp0aW1lX3BvaW50IG1fY3JlYXRpb25UaW1lOworICAgIHVpbnQ2NF90IG1fcmVuZGVy
VHJlZVNpemU7CisgICAgZmxvYXQgbV9kZXZpY2VTY2FsZUZhY3RvcjsKKyAgICBXZWJDb3JlOjpJ
bnRTaXplIG1fc2l6ZTsKKyAgICBXZWJDb3JlOjpDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKIH07
CiAKIGNsYXNzIFZpZXdTbmFwc2hvdFN0b3JlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShW
aWV3U25hcHNob3RTdG9yZSk7CisgICAgZnJpZW5kIGNsYXNzIFZpZXdTbmFwc2hvdDsKIHB1Ymxp
YzoKICAgICBWaWV3U25hcHNob3RTdG9yZSgpOwogICAgIH5WaWV3U25hcHNob3RTdG9yZSgpOwpA
QCAtNzksMjUgKzExNywyOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFZpZXdTbmFwc2hvdFN0b3Jl
JiBzaGFyZWQoKTsKIAogICAgIHZvaWQgcmVjb3JkU25hcHNob3QoV2ViUGFnZVByb3h5Jik7Ci0g
ICAgYm9vbCBnZXRTbmFwc2hvdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiwgVmlld1NuYXBzaG90
Jik7CiAKICAgICB2b2lkIGRpc2FibGVTbmFwc2hvdHRpbmcoKSB7IG1fZW5hYmxlZCA9IGZhbHNl
OyB9CiAgICAgdm9pZCBlbmFibGVTbmFwc2hvdHRpbmcoKSB7IG1fZW5hYmxlZCA9IHRydWU7IH0K
IAotICAgIHZvaWQgZGlzY2FyZFNuYXBzaG90cygpOworICAgIHZvaWQgZGlzY2FyZFNuYXBzaG90
SW1hZ2VzKCk7CiAKLSNpZiBQTEFURk9STShJT1MpCisjaWYgVVNFX1JFTkRFUl9TRVJWRVJfVklF
V19TTkFQU0hPVFMKICAgICBzdGF0aWMgQ0FDb250ZXh0ICpzbmFwc2hvdHRpbmdDb250ZXh0KCk7
CiAjZW5kaWYKIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZGlkQWRkSW1hZ2VUb1NuYXBzaG90KFZp
ZXdTbmFwc2hvdCYpOworICAgIHZvaWQgd2lsbFJlbW92ZUltYWdlRnJvbVNuYXBzaG90KFZpZXdT
bmFwc2hvdCYpOworCiBwcml2YXRlOgogICAgIHZvaWQgcHJ1bmVTbmFwc2hvdHMoV2ViUGFnZVBy
b3h5Jik7Ci0gICAgdm9pZCByZW1vdmVTbmFwc2hvdEltYWdlKFZpZXdTbmFwc2hvdCYpOwotCi0g
ICAgSGFzaE1hcDxTdHJpbmcsIFZpZXdTbmFwc2hvdD4gbV9zbmFwc2hvdE1hcDsKIAogICAgIGJv
b2wgbV9lbmFibGVkOwogICAgIHNpemVfdCBtX3NuYXBzaG90Q2FjaGVTaXplOworCisgICAgdHlw
ZWRlZiBIYXNoU2V0PFZpZXdTbmFwc2hvdCo+IFNuYXBzaG90U2V0OworICAgIFNuYXBzaG90U2V0
IG1fYWxsU25hcHNob3RzV2l0aEltYWdlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9y
ZS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUubW0K
aW5kZXggOTcxYmZmNC4uN2Y5ZDVlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tCkBAIC0zMCw3ICszMCw2IEBACiAjaW1wb3J0ICJX
ZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNp
bXBvcnQgPFdlYkNvcmUvSU9TdXJmYWNlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1VVSUQuaD4KIAog
I2lmIFBMQVRGT1JNKElPUykKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZVByaXZhdGUu
aD4KQEAgLTU1LDcgKzU0LDcgQEAgVmlld1NuYXBzaG90U3RvcmU6OlZpZXdTbmFwc2hvdFN0b3Jl
KCkKIAogVmlld1NuYXBzaG90U3RvcmU6On5WaWV3U25hcHNob3RTdG9yZSgpCiB7Ci0gICAgZGlz
Y2FyZFNuYXBzaG90cygpOworICAgIGRpc2NhcmRTbmFwc2hvdEltYWdlcygpOwogfQogCiBWaWV3
U25hcHNob3RTdG9yZSYgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpCkBAIC02NCw3ICs2Myw3
IEBAIFZpZXdTbmFwc2hvdFN0b3JlJiBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkKICAgICBy
ZXR1cm4gc3RvcmU7CiB9CiAKLSNpZiBQTEFURk9STShJT1MpCisjaWYgVVNFX1JFTkRFUl9TRVJW
RVJfVklFV19TTkFQU0hPVFMKIENBQ29udGV4dCAqVmlld1NuYXBzaG90U3RvcmU6OnNuYXBzaG90
dGluZ0NvbnRleHQoKQogewogICAgIHN0YXRpYyBDQUNvbnRleHQgKmNvbnRleHQ7CkBAIC04Miwx
MyArODEsMTYgQEAgQ0FDb250ZXh0ICpWaWV3U25hcHNob3RTdG9yZTo6c25hcHNob3R0aW5nQ29u
dGV4dCgpCiB9CiAjZW5kaWYKIAotdm9pZCBWaWV3U25hcHNob3RTdG9yZTo6cmVtb3ZlU25hcHNo
b3RJbWFnZShWaWV3U25hcHNob3QmIHNuYXBzaG90KQordm9pZCBWaWV3U25hcHNob3RTdG9yZTo6
ZGlkQWRkSW1hZ2VUb1NuYXBzaG90KFZpZXdTbmFwc2hvdCYgc25hcHNob3QpCiB7Ci0gICAgaWYg
KCFzbmFwc2hvdC5oYXNJbWFnZSgpKQotICAgICAgICByZXR1cm47CisgICAgbV9hbGxTbmFwc2hv
dHNXaXRoSW1hZ2VzLmFkZCgmc25hcHNob3QpOworICAgIG1fc25hcHNob3RDYWNoZVNpemUgKz0g
c25hcHNob3QuaW1hZ2VTaXplSW5CeXRlcygpOworfQogCi0gICAgbV9zbmFwc2hvdENhY2hlU2l6
ZSAtPSBzbmFwc2hvdC5pbWFnZVNpemVJbkJ5dGVzOwotICAgIHNuYXBzaG90LmNsZWFySW1hZ2Uo
KTsKK3ZvaWQgVmlld1NuYXBzaG90U3RvcmU6OndpbGxSZW1vdmVJbWFnZUZyb21TbmFwc2hvdChW
aWV3U25hcHNob3QmIHNuYXBzaG90KQoreworICAgIG1fYWxsU25hcHNob3RzV2l0aEltYWdlcy5y
ZW1vdmUoJnNuYXBzaG90KTsKKyAgICBtX3NuYXBzaG90Q2FjaGVTaXplIC09IHNuYXBzaG90Lmlt
YWdlU2l6ZUluQnl0ZXMoKTsKIH0KIAogdm9pZCBWaWV3U25hcHNob3RTdG9yZTo6cHJ1bmVTbmFw
c2hvdHMoV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCkBAIC05Niw1NCArOTgsMjAgQEAgdm9p
ZCBWaWV3U25hcHNob3RTdG9yZTo6cHJ1bmVTbmFwc2hvdHMoV2ViUGFnZVByb3h5JiB3ZWJQYWdl
UHJveHkpCiAgICAgaWYgKG1fc25hcHNob3RDYWNoZVNpemUgPD0gbWF4aW11bVNuYXBzaG90Q2Fj
aGVTaXplKQogICAgICAgICByZXR1cm47CiAKLSAgICB1aW50MzJfdCBjdXJyZW50SW5kZXggPSB3
ZWJQYWdlUHJveHkuYmFja0ZvcndhcmRMaXN0KCkuY3VycmVudEluZGV4KCk7Ci0gICAgdWludDMy
X3QgbWF4RGlzdGFuY2UgPSAwOwotICAgIGF1dG8gbW9zdERpc3RhbnRTbmFwc2hvdEl0ZXIgPSBt
X3NuYXBzaG90TWFwLmVuZCgpOwotICAgIGF1dG8gYmFja0ZvcndhcmRFbnRyaWVzID0gd2ViUGFn
ZVByb3h5LmJhY2tGb3J3YXJkTGlzdCgpLmVudHJpZXMoKTsKLQotICAgIC8vIEZpcnN0LCB0cnkg
dG8gZXZpY3QgdGhlIHNuYXBzaG90IGZvciB0aGUgcGFnZSBmYXJ0aGVzdCBmcm9tIHRoZSBjdXJy
ZW50IGJhY2stZm9yd2FyZCBpdGVtLgotICAgIGZvciAodWludDMyX3QgaSA9IDAsIGVudHJ5Q291
bnQgPSB3ZWJQYWdlUHJveHkuYmFja0ZvcndhcmRMaXN0KCkuZW50cmllcygpLnNpemUoKTsgaSA8
IGVudHJ5Q291bnQ7IGkrKykgewotICAgICAgICB1aW50MzJfdCBkaXN0YW5jZSA9IHN0ZDo6bWF4
KGN1cnJlbnRJbmRleCwgaSkgLSBzdGQ6Om1pbihjdXJyZW50SW5kZXgsIGkpOwotCi0gICAgICAg
IGlmIChpID09IGN1cnJlbnRJbmRleCB8fCBkaXN0YW5jZSA8IG1heERpc3RhbmNlKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSA9
IGJhY2tGb3J3YXJkRW50cmllc1tpXS5nZXQoKTsKLSAgICAgICAgU3RyaW5nIHNuYXBzaG90VVVJ
RCA9IGl0ZW0tPnNuYXBzaG90VVVJRCgpOwotICAgICAgICBpZiAoc25hcHNob3RVVUlELmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNvbnN0IGF1dG8mIHNuYXBz
aG90SXRlciA9IG1fc25hcHNob3RNYXAuZmluZChzbmFwc2hvdFVVSUQpOwotICAgICAgICBpZiAo
c25hcHNob3RJdGVyID09IG1fc25hcHNob3RNYXAuZW5kKCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAvLyBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gZXZpY3Rpbmcgc25hcHNo
b3RzIHRoYXQgc3RpbGwgaGF2ZSBpbWFnZXMuCi0gICAgICAgIGlmICghc25hcHNob3RJdGVyLT52
YWx1ZS5oYXNJbWFnZSgpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgLy8gRklYTUU6IFdl
IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIHNtYXJ0ZXItdGhhbi1MUlUgZXZpY3Rpb24g
KG1ha2luZyB1c2Ugb2YgdGhlIGJhY2stZm9yd2FyZCBsaXN0cywgZXRjLikKIAotICAgICAgICBt
b3N0RGlzdGFudFNuYXBzaG90SXRlciA9IHNuYXBzaG90SXRlcjsKLSAgICAgICAgbWF4RGlzdGFu
Y2UgPSBkaXN0YW5jZTsKKyAgICBWaWV3U25hcHNob3QqIG9sZGVzdFNuYXBzaG90ID0gbnVsbHB0
cjsKKyAgICBmb3IgKGF1dG8mIHNuYXBzaG90IDogbV9hbGxTbmFwc2hvdHNXaXRoSW1hZ2VzKSB7
CisgICAgICAgIGlmICghb2xkZXN0U25hcHNob3QgfHwgc25hcHNob3QtPmNyZWF0aW9uVGltZSgp
IDwgb2xkZXN0U25hcHNob3QtPmNyZWF0aW9uVGltZSgpKSB7CisgICAgICAgICAgICBBU1NFUlQo
c25hcHNob3QtPmhhc0ltYWdlKCkpOworICAgICAgICAgICAgb2xkZXN0U25hcHNob3QgPSBzbmFw
c2hvdDsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtb3N0RGlzdGFudFNuYXBzaG90SXRl
ciAhPSBtX3NuYXBzaG90TWFwLmVuZCgpKSB7Ci0gICAgICAgIHJlbW92ZVNuYXBzaG90SW1hZ2Uo
bW9zdERpc3RhbnRTbmFwc2hvdEl0ZXItPnZhbHVlKTsKKyAgICBpZiAoIW9sZGVzdFNuYXBzaG90
KQogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgY2FuJ3QgZmluZCBhIG1v
c3QgZGlzdGFudCBpdGVtIChwZXJoYXBzIGJlY2F1c2UgYWxsIHRoZSBzbmFwc2hvdHMgYXJlIGZy
b20KLSAgICAvLyBhIGRpZmZlcmVudCBXZWJQYWdlUHJveHkncyBiYWNrLWZvcndhcmQgbGlzdCks
IHdlIHNob3VsZCBldmljdCB0aGUgdGhlIG9sZGVzdCBpdGVtLgotICAgIHN0ZDo6Y2hyb25vOjpz
dGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgb2xkZXN0U25hcHNob3RUaW1lID0gc3RkOjpjaHJvbm86
OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludDo6bWF4KCk7Ci0gICAgU3RyaW5nIG9sZGVzdFNuYXBz
aG90VVVJRDsKIAotICAgIGZvciAoY29uc3QgYXV0byYgdXVpZEFuZFNuYXBzaG90IDogbV9zbmFw
c2hvdE1hcCkgewotICAgICAgICBpZiAodXVpZEFuZFNuYXBzaG90LnZhbHVlLmNyZWF0aW9uVGlt
ZSA8IG9sZGVzdFNuYXBzaG90VGltZSAmJiB1dWlkQW5kU25hcHNob3QudmFsdWUuaGFzSW1hZ2Uo
KSkgewotICAgICAgICAgICAgb2xkZXN0U25hcHNob3RUaW1lID0gdXVpZEFuZFNuYXBzaG90LnZh
bHVlLmNyZWF0aW9uVGltZTsKLSAgICAgICAgICAgIG9sZGVzdFNuYXBzaG90VVVJRCA9IHV1aWRB
bmRTbmFwc2hvdC5rZXk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBhdXRvJiBzbmFw
c2hvdEl0ZXIgPSBtX3NuYXBzaG90TWFwLmZpbmQob2xkZXN0U25hcHNob3RVVUlEKTsKLSAgICBy
ZW1vdmVTbmFwc2hvdEltYWdlKHNuYXBzaG90SXRlci0+dmFsdWUpOworICAgIG9sZGVzdFNuYXBz
aG90LT5jbGVhckltYWdlKCk7CiB9CiAKIHZvaWQgVmlld1NuYXBzaG90U3RvcmU6OnJlY29yZFNu
YXBzaG90KFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5KQpAQCAtMTU4LDc3ICsxMjYsOTIgQEAg
dm9pZCBWaWV3U25hcHNob3RTdG9yZTo6cmVjb3JkU25hcHNob3QoV2ViUGFnZVByb3h5JiB3ZWJQ
YWdlUHJveHkpCiAKICAgICBwcnVuZVNuYXBzaG90cyh3ZWJQYWdlUHJveHkpOwogCi0gICAgVmll
d1NuYXBzaG90IHNuYXBzaG90ID0gd2ViUGFnZVByb3h5LnRha2VWaWV3U25hcHNob3QoKTsKLSAg
ICBpZiAoIXNuYXBzaG90Lmhhc0ltYWdlKCkpCisgICAgUmVmUHRyPFZpZXdTbmFwc2hvdD4gc25h
cHNob3QgPSB3ZWJQYWdlUHJveHkudGFrZVZpZXdTbmFwc2hvdCgpOworICAgIGlmICghc25hcHNo
b3QgfHwgIXNuYXBzaG90LT5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm47CisgIAorICAgIHNu
YXBzaG90LT5zZXRSZW5kZXJUcmVlU2l6ZSh3ZWJQYWdlUHJveHkucmVuZGVyVHJlZVNpemUoKSk7
CisgICAgc25hcHNob3QtPnNldERldmljZVNjYWxlRmFjdG9yKHdlYlBhZ2VQcm94eS5kZXZpY2VT
Y2FsZUZhY3RvcigpKTsKKyAgICBzbmFwc2hvdC0+c2V0QmFja2dyb3VuZENvbG9yKHdlYlBhZ2VQ
cm94eS5wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKSk7CisgIAorICAgIGl0ZW0tPnNldFNu
YXBzaG90KHNuYXBzaG90LmdldCgpKTsKK30KIAotICAgIFN0cmluZyBvbGRTbmFwc2hvdFVVSUQg
PSBpdGVtLT5zbmFwc2hvdFVVSUQoKTsKLSAgICBpZiAoIW9sZFNuYXBzaG90VVVJRC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgY29uc3QgYXV0byYgb2xkU25hcHNob3RJdGVyID0gbV9zbmFwc2hvdE1h
cC5maW5kKG9sZFNuYXBzaG90VVVJRCk7Ci0gICAgICAgIGlmIChvbGRTbmFwc2hvdEl0ZXIgIT0g
bV9zbmFwc2hvdE1hcC5lbmQoKSkgewotICAgICAgICAgICAgcmVtb3ZlU25hcHNob3RJbWFnZShv
bGRTbmFwc2hvdEl0ZXItPnZhbHVlKTsKLSAgICAgICAgICAgIG1fc25hcHNob3RNYXAucmVtb3Zl
KG9sZFNuYXBzaG90SXRlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzbmFwc2hvdC5jcmVh
dGlvblRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKLSAgICBzbmFwc2hv
dC5yZW5kZXJUcmVlU2l6ZSA9IHdlYlBhZ2VQcm94eS5yZW5kZXJUcmVlU2l6ZSgpOwotICAgIHNu
YXBzaG90LmRldmljZVNjYWxlRmFjdG9yID0gd2ViUGFnZVByb3h5LmRldmljZVNjYWxlRmFjdG9y
KCk7Cit2b2lkIFZpZXdTbmFwc2hvdFN0b3JlOjpkaXNjYXJkU25hcHNob3RJbWFnZXMoKQorewor
ICAgIGZvciAoYXV0byYgc25hcHNob3QgOiBtX2FsbFNuYXBzaG90c1dpdGhJbWFnZXMpCisgICAg
ICAgIHNuYXBzaG90LT5jbGVhckltYWdlKCk7Cit9CiAKLSAgICBpdGVtLT5zZXRTbmFwc2hvdFVV
SUQoY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKTsKIAotICAgIG1fc25hcHNob3RNYXAuYWRk
KGl0ZW0tPnNuYXBzaG90VVVJRCgpLCBzbmFwc2hvdCk7Ci0gICAgbV9zbmFwc2hvdENhY2hlU2l6
ZSArPSBzbmFwc2hvdC5pbWFnZVNpemVJbkJ5dGVzOworI2lmIFVTRV9JT1NVUkZBQ0VfVklFV19T
TkFQU0hPVFMKK1Bhc3NSZWZQdHI8Vmlld1NuYXBzaG90PiBWaWV3U25hcHNob3Q6OmNyZWF0ZShJ
T1N1cmZhY2UqIHN1cmZhY2UsIEludFNpemUgc2l6ZSwgc2l6ZV90IGltYWdlU2l6ZUluQnl0ZXMp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWaWV3U25hcHNob3Qoc3VyZmFjZSwgc2l6ZSwg
aW1hZ2VTaXplSW5CeXRlcykpOwogfQotCi1ib29sIFZpZXdTbmFwc2hvdFN0b3JlOjpnZXRTbmFw
c2hvdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtLCBWaWV3U25hcHNob3QmIHNuYXBzaG90
KQorI2VsaWYgVVNFX1JFTkRFUl9TRVJWRVJfVklFV19TTkFQU0hPVFMKK1Bhc3NSZWZQdHI8Vmll
d1NuYXBzaG90PiBWaWV3U25hcHNob3Q6OmNyZWF0ZSh1aW50MzJfdCBzbG90SUQsIEludFNpemUg
c2l6ZSwgc2l6ZV90IGltYWdlU2l6ZUluQnl0ZXMpCiB7Ci0gICAgaWYgKGl0ZW0tPnNuYXBzaG90
VVVJRCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVmlld1NuYXBzaG90KHNsb3RJRCwgc2l6ZSwgaW1hZ2VTaXplSW5CeXRlcykpOwor
fQorI2VuZGlmCiAKLSAgICBjb25zdCBhdXRvJiBzbmFwc2hvdEl0ZXJhdG9yID0gbV9zbmFwc2hv
dE1hcC5maW5kKGl0ZW0tPnNuYXBzaG90VVVJRCgpKTsKLSAgICBpZiAoc25hcHNob3RJdGVyYXRv
ciA9PSBtX3NuYXBzaG90TWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc25h
cHNob3QgPSBzbmFwc2hvdEl0ZXJhdG9yLT52YWx1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyNpZiBV
U0VfSU9TVVJGQUNFX1ZJRVdfU05BUFNIT1RTCitWaWV3U25hcHNob3Q6OlZpZXdTbmFwc2hvdChJ
T1N1cmZhY2UqIHN1cmZhY2UsIEludFNpemUgc2l6ZSwgc2l6ZV90IGltYWdlU2l6ZUluQnl0ZXMp
CisgICAgOiBtX3N1cmZhY2Uoc3VyZmFjZSkKKyNlbGlmIFVTRV9SRU5ERVJfU0VSVkVSX1ZJRVdf
U05BUFNIT1RTCitWaWV3U25hcHNob3Q6OlZpZXdTbmFwc2hvdCh1aW50MzJfdCBzbG90SUQsIElu
dFNpemUgc2l6ZSwgc2l6ZV90IGltYWdlU2l6ZUluQnl0ZXMpCisgICAgOiBtX3Nsb3RJRChzbG90
SUQpCisjZW5kaWYKKyAgICAsIG1faW1hZ2VTaXplSW5CeXRlcyhpbWFnZVNpemVJbkJ5dGVzKQor
ICAgICwgbV9jcmVhdGlvblRpbWUoc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkpCisg
ICAgLCBtX3NpemUoc2l6ZSkKK3sKKyAgICBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuZGlk
QWRkSW1hZ2VUb1NuYXBzaG90KCp0aGlzKTsKIH0KIAotdm9pZCBWaWV3U25hcHNob3RTdG9yZTo6
ZGlzY2FyZFNuYXBzaG90cygpCitWaWV3U25hcHNob3Q6On5WaWV3U25hcHNob3QoKQogewotICAg
IGZvciAoYXV0byYgc25hcHNob3QgOiBtX3NuYXBzaG90TWFwLnZhbHVlcygpKQotICAgICAgICBy
ZW1vdmVTbmFwc2hvdEltYWdlKHNuYXBzaG90KTsKKyAgICBjbGVhckltYWdlKCk7CiB9CiAKIGJv
b2wgVmlld1NuYXBzaG90OjpoYXNJbWFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGltYWdlU2l6
ZUluQnl0ZXM7CisjaWYgVVNFX0lPU1VSRkFDRV9WSUVXX1NOQVBTSE9UUworICAgIHJldHVybiBt
X3N1cmZhY2U7CisjZWxpZiBVU0VfUkVOREVSX1NFUlZFUl9WSUVXX1NOQVBTSE9UUworICAgIHJl
dHVybiBtX3Nsb3RJRDsKKyNlbmRpZgogfQogCiB2b2lkIFZpZXdTbmFwc2hvdDo6Y2xlYXJJbWFn
ZSgpCiB7CisgICAgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLndpbGxSZW1vdmVJbWFnZUZy
b21TbmFwc2hvdCgqdGhpcyk7CisKICNpZiBVU0VfSU9TVVJGQUNFX1ZJRVdfU05BUFNIT1RTCi0g
ICAgc3VyZmFjZSA9IG51bGxwdHI7CisgICAgbV9zdXJmYWNlID0gbnVsbHB0cjsKICNlbGlmIFVT
RV9SRU5ERVJfU0VSVkVSX1ZJRVdfU05BUFNIT1RTCi0gICAgaWYgKHNsb3RJRCkKLSAgICAgICAg
W1ZpZXdTbmFwc2hvdFN0b3JlOjpzbmFwc2hvdHRpbmdDb250ZXh0KCkgZGVsZXRlU2xvdDpzbG90
SURdOwotICAgIHNsb3RJRCA9IDA7CisgICAgaWYgKG1fc2xvdElEKQorICAgICAgICBbVmlld1Nu
YXBzaG90U3RvcmU6OnNuYXBzaG90dGluZ0NvbnRleHQoKSBkZWxldGVTbG90Om1fc2xvdElEXTsK
KyAgICBtX3Nsb3RJRCA9IDA7CiAjZW5kaWYKLSAgICBpbWFnZVNpemVJbkJ5dGVzID0gMDsKKyAg
ICBtX2ltYWdlU2l6ZUluQnl0ZXMgPSAwOwogfQogCiBpZCBWaWV3U25hcHNob3Q6OmFzTGF5ZXJD
b250ZW50cygpCiB7CiAjaWYgVVNFX0lPU1VSRkFDRV9WSUVXX1NOQVBTSE9UUwotICAgIGlmICgh
c3VyZmFjZSkKKyAgICBpZiAoIW1fc3VyZmFjZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZGVzdHJveSB0aGUgc3VyZmFjZSBhbmQgaW5mb3Jt
IHRoZSBWaWV3U25hcHNob3RTdG9yZSB0byByZWR1Y2UgbV9zbmFwc2hvdENhY2hlU2l6ZS4KLSAg
ICBpZiAoc3VyZmFjZS0+c2V0SXNWb2xhdGlsZShmYWxzZSkgIT0gSU9TdXJmYWNlOjpTdXJmYWNl
U3RhdGU6OlZhbGlkKQorICAgIGlmIChtX3N1cmZhY2UtPnNldElzVm9sYXRpbGUoZmFsc2UpICE9
IElPU3VyZmFjZTo6U3VyZmFjZVN0YXRlOjpWYWxpZCkgeworICAgICAgICBjbGVhckltYWdlKCk7
CiAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KIAotICAgIHJldHVybiAoaWQpc3VyZmFj
ZS0+c3VyZmFjZSgpOworICAgIHJldHVybiAoaWQpbV9zdXJmYWNlLT5zdXJmYWNlKCk7CiAjZWxp
ZiBVU0VfUkVOREVSX1NFUlZFUl9WSUVXX1NOQVBTSE9UUwotICAgIHJldHVybiBbQ0FDb250ZXh0
IG9iamVjdEZvclNsb3Q6c2xvdElEXTsKKyAgICByZXR1cm4gW0NBQ29udGV4dCBvYmplY3RGb3JT
bG90Om1fc2xvdElEXTsKICNlbmRpZgogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234720</attachid>
            <date>2014-07-10 12:44:49 -0700</date>
            <delta_ts>2014-07-10 13:06:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>snapshots-on-bf.diff</filename>
            <type>text/plain</type>
            <size>37748</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmMGM3MjcwLi45ZTdlMTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEx
IEBACisyMDE0LTA3LTEwICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIFN0b3JlIFZpZXdTbmFwc2hvdHMgZGlyZWN0bHkgb24gdGhlIFdlYkJhY2tGb3J3
YXJkTGlzdEl0ZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNDY2NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTcwODI2Mzk+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBWaWV3U25hcHNob3Qg
YSByZWZjb3VudGVkIGNsYXNzLiBTdG9yZSBpdCBkaXJlY3RseSBvbiB0aGUgYmFjay1mb3J3YXJk
IGl0ZW0KKyAgICAgICAgaW5zdGVhZCBvZiBpbiBhIHNpZGUgbWFwIHJlZmVyZW5jZWQgYnkgVVVJ
RC4gU3dpdGNoIHRvIGEgdmVyeSBzaW1wbGUgTFJVIGV2aWN0aW9uIG1vZGVsIGZvciBub3cuCisg
ICAgICAgIFRoaXMgZml4ZXMgYSB0b24gb2Ygc25hcHNob3QgbWFuYWdlbWVudCBidWdzOyBmb3Ig
ZXhhbXBsZSwgd2Ugd291bGQgc3RhcnQgdGhyb3dpbmcgb3V0IHNuYXBzaG90cworICAgICAgICBp
biB0aGUgcGFnZSB0aGF0IHdhcyBhY3RpdmVseSBiZWluZyBpbnRlcmFjdGVkIHdpdGggKmZpcnN0
KiB3aGVuIGV2aWN0aW5nIHNuYXBzaG90cywgaW5zdGVhZCBvZgorICAgICAgICBwcmVmZXJpbmcg
b2xkZXIgc25hcHNob3RzLiBBZGRpdGlvbmFsbHksIHdlIHdvdWxkIG5vdCB0aHJvdyBhd2F5IHNu
YXBzaG90cyB3aGVuIGJhY2sgZm9yd2FyZCBpdGVtcworICAgICAgICBiZWNhbWUgdW5yZWFjaGFi
bGUuCisKKyAgICAgICAgVGhlcmUgaXMgZGVmaW5pdGVseSByb29tIGZvciBpbXByb3ZlbWVudCBv
ZiB0aGUgZXZpY3Rpb24gbWVjaGFuaXNtLCBidXQgdGhpcyBpcyBjbG9zZXIgdG8gYSB0aW1lLXRl
c3RlZCBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFNoYXJlZC9TZXNzaW9uU3RhdGUuaDoK
KyAgICAgICAgS2VlcCBhIFZpZXdTbmFwc2hvdCBpbnN0ZWFkIG9mIGEgVVVJRCBvbiB0aGUgQmFj
a0ZvcndhcmRMaXN0SXRlbVN0YXRlLgorCisgICAgICAgICogU2hhcmVkL1dlYkJhY2tGb3J3YXJk
TGlzdEl0ZW0uaDoKKyAgICAgICAgRml4IHNvbWUgaW5kZW50ZWQgbmFtZXNwYWNlIGNvbnRlbnRz
LgorCisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OnNuYXBzaG90KToK
KyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0SXRlbTo6c2V0U25hcHNob3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpzZXRTbmFwc2hvdFVVSUQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpzbmFw
c2hvdFVVSUQpOiBEZWxldGVkLgorICAgICAgICBTd2l0Y2ggdGhlIHNuYXBzaG90IGdldHRlci9z
ZXR0ZXIgdG8gb3BlcmF0ZSBvbiBWaWV3U25hcHNob3RzIGluc3RlYWQgb2YgVVVJRHMuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IF90YWtlVmlld1NuYXBzaG90XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmll
dy5tbToKKyAgICAgICAgKC1bV0tWaWV3IF90YWtlVmlld1NuYXBzaG90XSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
UGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnRha2VWaWV3U25hcHNob3QpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1BhZ2VD
bGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnRha2VWaWV3U25hcHNob3Qp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xp
ZW50SW1wbDo6dGFrZVZpZXdTbmFwc2hvdCk6CisgICAgICAgIEFkb3B0IFZpZXdTbmFwc2hvdDo6
Y3JlYXRlLCByZXR1cm4gYSBQYXNzUmVmUHRyLCBhbmQgY2xhc3MtaWZ5IFZpZXdTbmFwc2hvdC4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvVmlld0dlc3R1cmVDb250cm9sbGVySU9TLm1tOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmJlZ2luU3dpcGVHZXN0dXJl
KToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjplbmRTd2lwZUdlc3R1
cmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVmlld0dlc3R1cmVDb250cm9sbGVyLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMubW06CisgICAg
ICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2hvdWxkVXNlU25hcHNob3RGb3JT
aXplKToKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVDb250cm9sbGVyOjpiZWdpblN3aXBl
R2VzdHVyZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZW5kU3dp
cGVHZXN0dXJlKToKKyAgICAgICAgR3JhYiB0aGUgVmlld1NuYXBzaG90IGRpcmVjdGx5IGZyb20g
dGhlIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0sIGFuZCBhZG9wdCB0aGUgbmV3IGZ1bmN0aW9ucy4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OldlYk1lbW9yeVBy
ZXNzdXJlSGFuZGxlcik6CisgICAgICAgIFJlbmFtZSBkaXNjYXJkU25hcHNob3RzIHRvIGRpc2Nh
cmRTbmFwc2hvdEltYWdlcywgYmVjYXVzZSB3ZSdyZSByZWFsbHkgb25seSBkaXNjYXJkaW5nCisg
ICAgICAgIHRoZSBpbWFnZXM7IHRoZSByZW5kZXIgdHJlZSBzaXplL2JhY2tncm91bmQgY29sb3Ig
InNuYXBzaG90IiByZW1haW5zIGFuZCBpcyB1c2VmdWwuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
bWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmg6CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdDo6
c2V0UmVuZGVyVHJlZVNpemUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OnJlbmRl
clRyZWVTaXplKToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90OjpzZXRCYWNrZ3JvdW5k
Q29sb3IpOgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmJhY2tncm91bmRDb2xvcik6
CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdDo6c2V0RGV2aWNlU2NhbGVGYWN0b3IpOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmRldmljZVNjYWxlRmFjdG9yKToKKyAgICAg
ICAgKFdlYktpdDo6Vmlld1NuYXBzaG90OjppbWFnZVNpemVJbkJ5dGVzKToKKyAgICAgICAgKFdl
YktpdDo6Vmlld1NuYXBzaG90OjpzdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBz
aG90OjpzaXplKToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90OjpjcmVhdGlvblRpbWUp
OgorICAgICAgICBNYWtlIFZpZXdTbmFwc2hvdCBhIHJlZmNvdW50ZWQgY2xhc3MuCisgICAgICAg
IEFkZCBjcmVhdGUgbWV0aG9kcyB3aGljaCB0YWtlIGEgaW1hZ2UgKG9yIHNsb3QgSUQpLCBhbmQg
cmVsZXZhbnQgc2l6ZXMuCisgICAgICAgIEl0IGlzIGV4cGVjdGVkIHRoYXQgYSBWaWV3U25hcHNo
b3QgaXMgY3JlYXRlZCB3aXRoIGFuIGltYWdlLCBhbmQgaXQgaXMgb25seSBwb3NzaWJsZQorICAg
ICAgICB0byByZW1vdmUgdGhhdCBpbWFnZSwgbmV2ZXIgdG8gcmVwbGFjZSBpdC4gQSBuZXcgVmll
d1NuYXBzaG90IGlzIHJlcXVpcmVkIGluIHRoYXQgY2FzZS4KKyAgICAgICAgQWRkIHNldHRlcnMg
Zm9yIHRoaW5ncyB0aGF0IFZpZXdTbmFwc2hvdFN0b3JlIHNldHMgb24gdGhlIHNuYXBzaG90IGFm
dGVyIHRoZSBQYWdlQ2xpZW50CisgICAgICAgIHJldHJpZXZlcyBpdCBmcm9tIHRoZSB2aWV3LiBB
ZGQgZ2V0dGVycyBmb3IgdGhpbmdzIHRoYXQgdGhlIFZpZXdHZXN0dXJlQ29udHJvbGxlcnMgbmVl
ZC4KKworICAgICAgICBSZW1vdmUgcmVtb3ZlU25hcHNob3RJbWFnZSwgZ2V0U25hcHNob3QsIGFu
ZCB0aGUgc25hcHNob3QgbWFwLgorCisgICAgICAgICogVUlQcm9jZXNzL21hYy9WaWV3U25hcHNo
b3RTdG9yZS5tbToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90U3RvcmU6On5WaWV3U25h
cHNob3RTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjpkaWRBZGRJ
bWFnZVRvU25hcHNob3QpOgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3RTdG9yZTo6d2ls
bFJlbW92ZUltYWdlRnJvbVNuYXBzaG90KToKKyAgICAgICAgTWFuYWdlIG1fc25hcHNob3RDYWNo
ZVNpemUgYW5kIG1fc25hcHNob3RzV2l0aEltYWdlcyB2aWEgZGlkQWRkSW1hZ2VUb1NuYXBzaG90
IGFuZCB3aWxsUmVtb3ZlSW1hZ2VGcm9tU25hcHNob3QuCisgICAgICAgIHdpbGxSZW1vdmVJbWFn
ZUZyb21TbmFwc2hvdCB3aWxsIC1hbHdheXMtIGJlIGNhbGxlZCBiZWZvcmUgdGhlIFZpZXdTbmFw
c2hvdCBpcyBkZXN0cm95ZWQuCisKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90U3RvcmU6
OnBydW5lU25hcHNob3RzKToKKyAgICAgICAgU3dpdGNoIHRvIGEgc2ltcGxlIExSVSBldmljdGlv
biBtb2RlbC4gQXMgcHJldmlvdXNseSBtZW50aW9uZWQsIGl0J3MgcG9zc2libGUgdG8gZG8gYmV0
dGVyLCBidXQKKyAgICAgICAgdGhpcyBpcyBtdWNoIGxlc3MgYnJva2VuIHRoYW4gdGhlIHByZXZp
b3VzIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3Jl
OjpyZWNvcmRTbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjpk
aXNjYXJkU25hcHNob3RJbWFnZXMpOgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdDo6Vmlld1NuYXBzaG90KToKKyAg
ICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90Ojp+Vmlld1NuYXBzaG90KToKKyAgICAgICAgKFdl
YktpdDo6Vmlld1NuYXBzaG90OjpoYXNJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFw
c2hvdDo6Y2xlYXJJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdDo6YXNMYXll
ckNvbnRlbnRzKToKKyAgICAgICAgSWYgYSBzdXJmYWNlIGlzIEVtcHR5IHdoZW4gaXQgY29tZXMg
YmFjayBmcm9tIGJlaW5nIHZvbGF0aWxlLCB0aHJvdyBhd2F5IHRoZSBzdXJmYWNlCisgICAgICAg
IGFuZCBub3RpZnkgdGhlIFN0b3JlIHRvIHJlbW92ZSBpdCBmcm9tIG1fc25hcHNob3RDYWNoZVNp
emUgKHZpYSBjbGVhckltYWdlKCkpLgorCisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0
b3JlOjpyZW1vdmVTbmFwc2hvdEltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Vmll
d1NuYXBzaG90U3RvcmU6OmdldFNuYXBzaG90KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
Vmlld1NuYXBzaG90U3RvcmU6OmRpc2NhcmRTbmFwc2hvdHMpOiBEZWxldGVkLgorCiAyMDE0LTA3
LTEwICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgaU9TIGJ1aWxk
IGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNzaW9uU3RhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNzaW9uU3RhdGUuaAppbmRleCA3NmU0MWMyLi44ZDE5
YzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vzc2lvblN0YXRlLmgKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1Nlc3Npb25TdGF0ZS5oCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaWZuZGVmIFNlc3Npb25TdGF0ZV9oCiAjZGVmaW5lIFNlc3Npb25TdGF0ZV9oCiAKKyNpbmNs
dWRlICJWaWV3U25hcHNob3RTdG9yZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4K
QEAgLTEyMCw4ICsxMjEsNyBAQCBzdHJ1Y3QgQmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlIHsKICAg
ICB1aW50NjRfdCBpZGVudGlmaWVyOwogCiAgICAgUGFnZVN0YXRlIHBhZ2VTdGF0ZTsKLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgaG9sZCB0aGUgc25hcHNob3QgaXRzZWxmLCBub3QgaXRzIFVV
SUQuCi0gICAgU3RyaW5nIHNuYXBzaG90VVVJRDsKKyAgICBSZWZQdHI8Vmlld1NuYXBzaG90PiBz
bmFwc2hvdDsKIH07CiAKIHN0cnVjdCBCYWNrRm9yd2FyZExpc3RTdGF0ZSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaAppbmRleCAwOTYwYzc5Li5m
ZWFjMTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQmFja0ZvcndhcmRM
aXN0SXRlbS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJCYWNrRm9yd2FyZExpc3RJ
dGVtLmgKQEAgLTM2LDggKzM2LDggQEAgY2xhc3MgRGF0YTsKIH0KIAogbmFtZXNwYWNlIElQQyB7
Ci0gICAgY2xhc3MgQXJndW1lbnREZWNvZGVyOwotICAgIGNsYXNzIEFyZ3VtZW50RW5jb2RlcjsK
K2NsYXNzIEFyZ3VtZW50RGVjb2RlcjsKK2NsYXNzIEFyZ3VtZW50RW5jb2RlcjsKIH0KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CkBAIC01Niw5ICs1Niw5IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJp
bmcmIG9yaWdpbmFsVVJMKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtU3RhdGUucGFnZVN0YXRlLm1h
aW5GcmFtZVN0YXRlLm9yaWdpbmFsVVJMU3RyaW5nOyB9CiAgICAgY29uc3QgU3RyaW5nJiB1cmwo
KSBjb25zdCB7IHJldHVybiBtX2l0ZW1TdGF0ZS5wYWdlU3RhdGUubWFpbkZyYW1lU3RhdGUudXJs
U3RyaW5nOyB9CiAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXRl
bVN0YXRlLnBhZ2VTdGF0ZS50aXRsZTsgfQotICAgIAotICAgIHZvaWQgc2V0U25hcHNob3RVVUlE
KGNvbnN0IFN0cmluZyYgdXVpZCkgeyBtX2l0ZW1TdGF0ZS5zbmFwc2hvdFVVSUQgPSB1dWlkOyB9
Ci0gICAgY29uc3QgU3RyaW5nJiBzbmFwc2hvdFVVSUQoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1T
dGF0ZS5zbmFwc2hvdFVVSUQ7IH0KKworICAgIFZpZXdTbmFwc2hvdCogc25hcHNob3QoKSBjb25z
dCB7IHJldHVybiBtX2l0ZW1TdGF0ZS5zbmFwc2hvdC5nZXQoKTsgfQorICAgIHZvaWQgc2V0U25h
cHNob3QoUGFzc1JlZlB0cjxWaWV3U25hcHNob3Q+IHNuYXBzaG90KSB7IG1faXRlbVN0YXRlLnNu
YXBzaG90ID0gc25hcHNob3Q7IH0KIAogICAgIHN0YXRpYyB1aW50NjRfdCBoaWdoZWRVc2VkSXRl
bUlEKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXcubW0KaW5kZXggMzdjZmU3Yi4uODVjNDllOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KQEAgLTg5OSwyNCArODk5LDIzIEBAIC0gKHZv
aWQpX3Jlc3RvcmVQYWdlU3RhdGVUb1Vub2JzY3VyZWRDZW50ZXI6KFdlYkNvcmU6OkZsb2F0UG9p
bnQpY2VudGVyIHNjYWxlOihkCiAgICAgX3NjYWxlVG9SZXN0b3JlID0gc2NhbGU7CiB9CiAKLS0g
KFdlYktpdDo6Vmlld1NuYXBzaG90KV90YWtlVmlld1NuYXBzaG90CistIChQYXNzUmVmUHRyPFdl
YktpdDo6Vmlld1NuYXBzaG90PilfdGFrZVZpZXdTbmFwc2hvdAogewogICAgIGZsb2F0IGRldmlj
ZVNjYWxlID0gV0tHZXRTY3JlZW5TY2FsZUZhY3RvcigpOwogICAgIENHU2l6ZSBzbmFwc2hvdFNp
emUgPSBzZWxmLmJvdW5kcy5zaXplOwogICAgIHNuYXBzaG90U2l6ZS53aWR0aCAqPSBkZXZpY2VT
Y2FsZTsKICAgICBzbmFwc2hvdFNpemUuaGVpZ2h0ICo9IGRldmljZVNjYWxlOwogCi0gICAgV2Vi
S2l0OjpWaWV3U25hcHNob3Qgc25hcHNob3Q7Ci0gICAgc25hcHNob3Quc2xvdElEID0gW1dlYktp
dDo6Vmlld1NuYXBzaG90U3RvcmU6OnNuYXBzaG90dGluZ0NvbnRleHQoKSBjcmVhdGVJbWFnZVNs
b3Q6c25hcHNob3RTaXplIGhhc0FscGhhOllFU107CisgICAgdWludDMyX3Qgc2xvdElEID0gW1dl
YktpdDo6Vmlld1NuYXBzaG90U3RvcmU6OnNuYXBzaG90dGluZ0NvbnRleHQoKSBjcmVhdGVJbWFn
ZVNsb3Q6c25hcHNob3RTaXplIGhhc0FscGhhOllFU107CiAKLSAgICBDQVRyYW5zZm9ybTNEIHRy
YW5zZm9ybSA9IENBVHJhbnNmb3JtM0RNYWtlU2NhbGUoZGV2aWNlU2NhbGUsIGRldmljZVNjYWxl
LCAxKTsKLSAgICBDQVJlbmRlclNlcnZlckNhcHR1cmVMYXllcldpdGhUcmFuc2Zvcm0oTUFDSF9Q
T1JUX05VTEwsIHNlbGYubGF5ZXIuY29udGV4dC5jb250ZXh0SWQsICh1aW50NjRfdClzZWxmLmxh
eWVyLCBzbmFwc2hvdC5zbG90SUQsIDAsIDAsICZ0cmFuc2Zvcm0pOworICAgIGlmICghc2xvdElE
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHNuYXBzaG90LnNpemUgPSBXZWJDb3Jl
OjpleHBhbmRlZEludFNpemUoV2ViQ29yZTo6RmxvYXRTaXplKHNuYXBzaG90U2l6ZSkpOwotICAg
IHNuYXBzaG90LmltYWdlU2l6ZUluQnl0ZXMgPSBzbmFwc2hvdFNpemUud2lkdGggKiBzbmFwc2hv
dFNpemUuaGVpZ2h0ICogNDsKLSAgICBzbmFwc2hvdC5iYWNrZ3JvdW5kQ29sb3IgPSBfcGFnZS0+
cGFnZUV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCk7CisgICAgQ0FUcmFuc2Zvcm0zRCB0cmFuc2Zv
cm0gPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxlKGRldmljZVNjYWxlLCBkZXZpY2VTY2FsZSwgMSk7
CisgICAgQ0FSZW5kZXJTZXJ2ZXJDYXB0dXJlTGF5ZXJXaXRoVHJhbnNmb3JtKE1BQ0hfUE9SVF9O
VUxMLCBzZWxmLmxheWVyLmNvbnRleHQuY29udGV4dElkLCAodWludDY0X3Qpc2VsZi5sYXllciwg
c2xvdElELCAwLCAwLCAmdHJhbnNmb3JtKTsKIAotICAgIHJldHVybiBzbmFwc2hvdDsKKyAgICBX
ZWJDb3JlOjpJbnRTaXplIGltYWdlU2l6ZSA9IFdlYkNvcmU6OmV4cGFuZGVkSW50U2l6ZShXZWJD
b3JlOjpGbG9hdFNpemUoc25hcHNob3RTaXplKSk7CisgICAgcmV0dXJuIFdlYktpdDo6Vmlld1Nu
YXBzaG90OjpjcmVhdGUoc2xvdElELCBpbWFnZVNpemUsIGltYWdlU2l6ZS53aWR0aCgpICogaW1h
Z2VTaXplLmhlaWdodCgpICogNCk7CiB9CiAKIC0gKHZvaWQpX3pvb21Ub1BvaW50OihXZWJDb3Jl
OjpGbG9hdFBvaW50KXBvaW50IGF0U2NhbGU6KGRvdWJsZSlzY2FsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCmluZGV4
IGNmOTBhMTUuLjRhYTk3OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgKQEAgLTUwLDkgKzUwLDkgQEAgc3RydWN0
IEhpZ2hsaWdodDsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBWaWV3U25hcHNob3Q7
CiBjbGFzcyBXZWJQYWdlUHJveHk7CiBzdHJ1Y3QgUHJpbnRJbmZvOwotc3RydWN0IFZpZXdTbmFw
c2hvdDsKIH0KIAogQGNsYXNzIF9XS0ZyYW1lSGFuZGxlOwpAQCAtNzgsNyArNzgsNyBAQCBzdHJ1
Y3QgVmlld1NuYXBzaG90OwogLSAodm9pZClfcmVzdG9yZVBhZ2VTdGF0ZVRvRXhwb3NlZFJlY3Q6
KFdlYkNvcmU6OkZsb2F0UmVjdClleHBvc2VkUmVjdCBzY2FsZTooZG91YmxlKXNjYWxlOwogLSAo
dm9pZClfcmVzdG9yZVBhZ2VTdGF0ZVRvVW5vYnNjdXJlZENlbnRlcjooV2ViQ29yZTo6RmxvYXRQ
b2ludCljZW50ZXIgc2NhbGU6KGRvdWJsZSlzY2FsZTsKIAotLSAoV2ViS2l0OjpWaWV3U25hcHNo
b3QpX3Rha2VWaWV3U25hcHNob3Q7CistIChQYXNzUmVmUHRyPFdlYktpdDo6Vmlld1NuYXBzaG90
PilfdGFrZVZpZXdTbmFwc2hvdDsKIAogLSAodm9pZClfc2Nyb2xsVG9Db250ZW50T2Zmc2V0OihX
ZWJDb3JlOjpGbG9hdFBvaW50KWNvbnRlbnRPZmZzZXQ7CiAtIChCT09MKV9zY3JvbGxUb1JlY3Q6
KFdlYkNvcmU6OkZsb2F0UmVjdCl0YXJnZXRSZWN0IG9yaWdpbjooV2ViQ29yZTo6RmxvYXRQb2lu
dClvcmlnaW4gbWluaW11bVNjcm9sbERpc3RhbmNlOihmbG9hdCltaW5pbXVtU2Nyb2xsRGlzdGFu
Y2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcu
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KaW5kZXggMTFk
ZDcxMS4uZDg5NTQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvV0tWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmll
dy5tbQpAQCAtMzEwMSwxNSArMzEwMSwxMyBAQCAtIChDQUxheWVyICopX2FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlUm9vdExheWVyCiAgICAgcmV0dXJuIF9kYXRhLT5fcm9vdExheWVyLmdldCgp
OwogfQogCi0tIChWaWV3U25hcHNob3QpX3Rha2VWaWV3U25hcHNob3QKKy0gKFBhc3NSZWZQdHI8
Vmlld1NuYXBzaG90PilfdGFrZVZpZXdTbmFwc2hvdAogewogICAgIE5TV2luZG93ICp3aW5kb3cg
PSBzZWxmLndpbmRvdzsKIAotICAgIFZpZXdTbmFwc2hvdCBzbmFwc2hvdDsKLQogICAgIENHU1dp
bmRvd0lEIHdpbmRvd0lEID0gKENHU1dpbmRvd0lEKVt3aW5kb3cgd2luZG93TnVtYmVyXTsKICAg
ICBpZiAoIXdpbmRvd0lEIHx8ICFbd2luZG93IGlzVmlzaWJsZV0pCi0gICAgICAgIHJldHVybiBz
bmFwc2hvdDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gd2luZG93U25hcHNob3RJbWFnZSA9IGFkb3B0Q0YoQ0dXaW5kb3dMaXN0Q3JlYXRlSW1h
Z2UoQ0dSZWN0TnVsbCwga0NHV2luZG93TGlzdE9wdGlvbkluY2x1ZGluZ1dpbmRvdywgd2luZG93
SUQsIGtDR1dpbmRvd0ltYWdlQm91bmRzSWdub3JlRnJhbWluZyB8IGtDR1dpbmRvd0ltYWdlU2hv
dWxkQmVPcGFxdWUpKTsKIApAQCAtMzE0MSwxNSArMzEzOSwxMiBAQCAtIChWaWV3U25hcHNob3Qp
X3Rha2VWaWV3U25hcHNob3QKIAogICAgIGF1dG8gY3JvcHBlZFNuYXBzaG90SW1hZ2UgPSBhZG9w
dENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3Qod2luZG93U25hcHNob3RJbWFnZS5nZXQo
KSwgTlNSZWN0VG9DR1JlY3QoW3dpbmRvdyBjb252ZXJ0UmVjdFRvQmFja2luZzpjcm9wcGVkSW1h
Z2VSZWN0XSkpKTsKIAotICAgIHNuYXBzaG90LnN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZUZy
b21JbWFnZShjcm9wcGVkU25hcHNob3RJbWFnZS5nZXQoKSk7Ci0gICAgc25hcHNob3Quc3VyZmFj
ZS0+c2V0SXNWb2xhdGlsZSh0cnVlKTsKLQotICAgIEludFNpemUgaW1hZ2VTaXplKENHSW1hZ2VH
ZXRXaWR0aChjcm9wcGVkU25hcHNob3RJbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoY3Jv
cHBlZFNuYXBzaG90SW1hZ2UuZ2V0KCkpKTsKLSAgICBzbmFwc2hvdC5zaXplID0gaW1hZ2VTaXpl
OwotICAgIHNuYXBzaG90LmltYWdlU2l6ZUluQnl0ZXMgPSBpbWFnZVNpemUud2lkdGgoKSAqIGlt
YWdlU2l6ZS5oZWlnaHQoKSAqIDQ7Ci0gICAgc25hcHNob3QuYmFja2dyb3VuZENvbG9yID0gX2Rh
dGEtPl9wYWdlLT5wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICBhdXRvIHN1cmZh
Y2UgPSBJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZShjcm9wcGVkU25hcHNob3RJbWFnZS5nZXQo
KSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBzdXJm
YWNlLT5zZXRJc1ZvbGF0aWxlKHRydWUpOwogCi0gICAgcmV0dXJuIHNuYXBzaG90OworICAgIHJl
dHVybiBWaWV3U25hcHNob3Q6OmNyZWF0ZShzdXJmYWNlLmdldCgpLCBzdXJmYWNlLT5zaXplKCks
IHN1cmZhY2UtPnRvdGFsQnl0ZXMoKSk7CiB9CiAKIC0gKHZvaWQpX3doZWVsRXZlbnRXYXNOb3RI
YW5kbGVkQnlXZWJDb3JlOihOU0V2ZW50ICopZXZlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCmluZGV4IDMxZjI1NDEuLjdmZmE5ZDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVy
bmFsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJu
YWwuaApAQCAtNDcsMTAgKzQ3LDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgRHJhd2lu
Z0FyZWFQcm94eTsKIGNsYXNzIEZpbmRJbmRpY2F0b3I7CiBjbGFzcyBMYXllclRyZWVDb250ZXh0
OworY2xhc3MgVmlld1NuYXBzaG90OwogY2xhc3MgV2ViQ29udGV4dDsKIHN0cnVjdCBDb2xvclNw
YWNlRGF0YTsKIHN0cnVjdCBFZGl0b3JTdGF0ZTsKLXN0cnVjdCBWaWV3U25hcHNob3Q7CiBzdHJ1
Y3QgV2ViUGFnZUNvbmZpZ3VyYXRpb247CiB9CiAKQEAgLTgzLDcgKzgzLDcgQEAgc3RydWN0IFdl
YlBhZ2VDb25maWd1cmF0aW9uOwogLSAodm9pZClfc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGVSb290TGF5ZXI6KENBTGF5ZXIgKilyb290TGF5ZXI7CiAtIChDQUxheWVyICopX2FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlUm9vdExheWVyOwogCi0tIChXZWJLaXQ6OlZpZXdTbmFwc2hvdClf
dGFrZVZpZXdTbmFwc2hvdDsKKy0gKFBhc3NSZWZQdHI8V2ViS2l0OjpWaWV3U25hcHNob3Q+KV90
YWtlVmlld1NuYXBzaG90OwogLSAodm9pZClfd2hlZWxFdmVudFdhc05vdEhhbmRsZWRCeVdlYkNv
cmU6KE5TRXZlbnQgKilldmVudDsKIAogLSAodm9pZClfc2V0QWNjZXNzaWJpbGl0eVdlYlByb2Nl
c3NUb2tlbjooTlNEYXRhICopZGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5o
CmluZGV4IDdjYTQ2ZTYuLjM5ZWViMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGll
bnQuaApAQCAtNTcsMTAgKzU3LDEwIEBAIGNsYXNzIERyYXdpbmdBcmVhUHJveHk7CiBjbGFzcyBG
aW5kSW5kaWNhdG9yOwogY2xhc3MgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFJlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uOworY2xhc3MgVmlld1NuYXBzaG90OwogY2xhc3MgV2ViQ29u
dGV4dE1lbnVQcm94eTsKIGNsYXNzIFdlYkVkaXRDb21tYW5kUHJveHk7CiBjbGFzcyBXZWJQb3B1
cE1lbnVQcm94eTsKLXN0cnVjdCBWaWV3U25hcHNob3Q7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQogY2xhc3MgTmF0aXZlV2ViVG91Y2hFdmVudDsKQEAgLTE4MCw3ICsxODAsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIG1ha2VGaXJzdFJlc3BvbmRlcigpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcihMYXllck9yVmlldyAq
KSA9IDA7CiAgICAgdmlydHVhbCBMYXllck9yVmlldyAqYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jv
b3RMYXllcigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFZpZXdTbmFwc2hvdCB0YWtlVmlld1Nu
YXBzaG90KCkgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxWaWV3U25hcHNob3Q+IHRha2VW
aWV3U25hcHNob3QoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHdoZWVsRXZlbnRXYXNOb3RIYW5k
bGVkQnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGNsZWFyQ3VzdG9tU3dpcGVWaWV3cygpID0gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAxZjE1NjQxLi4zZDk4NzE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNDk0NCw3ICs0OTQ0
LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpY3RhdGlvbkFsdGVybmF0aXZlcyh1aW50NjRfdCBk
aWN0YXRpb25Db250ZXh0LCBWZWN0b3I8U3RyaW4KICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAK
ICNpZiBQTEFURk9STShDT0NPQSkKLVZpZXdTbmFwc2hvdCBXZWJQYWdlUHJveHk6OnRha2VWaWV3
U25hcHNob3QoKQorUGFzc1JlZlB0cjxWaWV3U25hcHNob3Q+IFdlYlBhZ2VQcm94eTo6dGFrZVZp
ZXdTbmFwc2hvdCgpCiB7CiAgICAgcmV0dXJuIG1fcGFnZUNsaWVudC50YWtlVmlld1NuYXBzaG90
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggYmQ5NTZj
NS4uNDIxNzdjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAt
MTUyLDYgKzE1Miw3IEBAIGNsYXNzIFBhZ2VDbGllbnQ7CiBjbGFzcyBSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjsKIGNsYXNzIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHk7CiBjbGFz
cyBTdHJpbmdQYWlyVmVjdG9yOworY2xhc3MgVmlld1NuYXBzaG90OwogY2xhc3MgVmlzaXRlZExp
bmtQcm92aWRlcjsKIGNsYXNzIFdlYkJhY2tGb3J3YXJkTGlzdDsKIGNsYXNzIFdlYkJhY2tGb3J3
YXJkTGlzdEl0ZW07CkBAIC0xNzMsNyArMTc0LDYgQEAgc3RydWN0IEVkaXRpbmdSYW5nZTsKIHN0
cnVjdCBFZGl0b3JTdGF0ZTsKIHN0cnVjdCBQbGF0Zm9ybVBvcHVwTWVudURhdGE7CiBzdHJ1Y3Qg
UHJpbnRJbmZvOwotc3RydWN0IFZpZXdTbmFwc2hvdDsKIHN0cnVjdCBXZWJQb3B1cEl0ZW07CiAK
ICNpZiBFTkFCTEUoVklCUkFUSU9OKQpAQCAtODg0LDcgKzg4NCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHJlY29yZE5hdmlnYXRpb25TbmFwc2hvdCgpOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgVmlld1NuYXBzaG90IHRha2VWaWV3U25hcHNob3QoKTsKKyAgICBQYXNzUmVmUHRyPFZpZXdT
bmFwc2hvdD4gdGFrZVZpZXdTbmFwc2hvdCgpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU1VCVExF
X0NSWVBUTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNs
aWVudEltcGxJT1MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudElt
cGxJT1MuaAppbmRleCAyMmVjZGY4Li4zYTMxOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCkBAIC0xMDUsNyArMTA1LDcgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIExheWVyT3JWaWV3ICphY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9v
dExheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBMYXllckhvc3RpbmdNb2RlIHZp
ZXdMYXllckhvc3RpbmdNb2RlKCkgb3ZlcnJpZGUgeyByZXR1cm4gTGF5ZXJIb3N0aW5nTW9kZTo6
T3V0T2ZQcm9jZXNzOyB9CiAKLSAgICB2aXJ0dWFsIFZpZXdTbmFwc2hvdCB0YWtlVmlld1NuYXBz
aG90KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFZpZXdTbmFwc2hvdD4gdGFr
ZVZpZXdTbmFwc2hvdCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB3aGVlbEV2ZW50V2Fz
Tm90SGFuZGxlZEJ5V2ViQ29yZShjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50Jikgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQ3VzdG9tU3dpcGVWaWV3cygpIG92ZXJyaWRlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9T
Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQpp
bmRleCAyYTBjZGY2Li42NGZlMGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KQEAgLTQ3MCw3ICs0NzAsNyBAQCBMYXllck9yVmll
dyAqUGFnZUNsaWVudEltcGw6OmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdSb290TGF5ZXIoKSBjb25z
dAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1WaWV3U25hcHNob3QgUGFnZUNsaWVudEltcGw6
OnRha2VWaWV3U25hcHNob3QoKQorUGFzc1JlZlB0cjxWaWV3U25hcHNob3Q+IFBhZ2VDbGllbnRJ
bXBsOjp0YWtlVmlld1NuYXBzaG90KCkKIHsKICAgICByZXR1cm4gW21fd2ViVmlldyBfdGFrZVZp
ZXdTbmFwc2hvdF07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1ZpZXdHZXN0dXJlQ29udHJvbGxlcklPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvVmlld0dlc3R1cmVDb250cm9sbGVySU9TLm1tCmluZGV4IDIyNDI5ZmQuLjkxNGE4NDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvVmlld0dlc3R1cmVDb250cm9s
bGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvVmlld0dlc3R1cmVD
b250cm9sbGVySU9TLm1tCkBAIC0xNjgsMTQgKzE2OCwxMyBAQCB2b2lkIFZpZXdHZXN0dXJlQ29u
dHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUoX1VJTmF2aWdhdGlvbkludGVyYWN0aXZlVHJhbnNp
dGlvbgogICAgIG1fc25hcHNob3RWaWV3ID0gYWRvcHROUyhbW1VJVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpsaXZlU3dpcGVWaWV3RnJhbWVdKTsKIAogICAgIFJldGFpblB0cjxVSUNvbG9yPiBi
YWNrZ3JvdW5kQ29sb3IgPSBbVUlDb2xvciB3aGl0ZUNvbG9yXTsKLSAgICBWaWV3U25hcHNob3Qg
c25hcHNob3Q7Ci0gICAgaWYgKFZpZXdTbmFwc2hvdFN0b3JlOjpzaGFyZWQoKS5nZXRTbmFwc2hv
dCh0YXJnZXRJdGVtLCBzbmFwc2hvdCkpIHsKKyAgICBpZiAoVmlld1NuYXBzaG90KiBzbmFwc2hv
dCA9IHRhcmdldEl0ZW0tPnNuYXBzaG90KCkpIHsKICAgICAgICAgZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IgPSBtX3dlYlBhZ2VQcm94eS5kZXZpY2VTY2FsZUZhY3RvcigpOwogICAgICAgICBGbG9h
dFNpemUgc3dpcGVMYXllclNpemVJbkRldmljZUNvb3JkaW5hdGVzKGxpdmVTd2lwZVZpZXdGcmFt
ZS5zaXplKTsKICAgICAgICAgc3dpcGVMYXllclNpemVJbkRldmljZUNvb3JkaW5hdGVzLnNjYWxl
KGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgaWYgKHNuYXBzaG90Lmhhc0ltYWdlKCkgJiYg
c25hcHNob3Quc2l6ZSA9PSBzd2lwZUxheWVyU2l6ZUluRGV2aWNlQ29vcmRpbmF0ZXMgJiYgZGV2
aWNlU2NhbGVGYWN0b3IgPT0gc25hcHNob3QuZGV2aWNlU2NhbGVGYWN0b3IpCi0gICAgICAgICAg
ICBbbV9zbmFwc2hvdFZpZXcgbGF5ZXJdLmNvbnRlbnRzID0gc25hcHNob3QuYXNMYXllckNvbnRl
bnRzKCk7Ci0gICAgICAgIENvbG9yIGNvcmVDb2xvciA9IHNuYXBzaG90LmJhY2tncm91bmRDb2xv
cjsKKyAgICAgICAgaWYgKHNuYXBzaG90LT5oYXNJbWFnZSgpICYmIHNuYXBzaG90LT5zaXplKCkg
PT0gc3dpcGVMYXllclNpemVJbkRldmljZUNvb3JkaW5hdGVzICYmIGRldmljZVNjYWxlRmFjdG9y
ID09IHNuYXBzaG90LT5kZXZpY2VTY2FsZUZhY3RvcigpKQorICAgICAgICAgICAgW21fc25hcHNo
b3RWaWV3IGxheWVyXS5jb250ZW50cyA9IHNuYXBzaG90LT5hc0xheWVyQ29udGVudHMoKTsKKyAg
ICAgICAgQ29sb3IgY29yZUNvbG9yID0gc25hcHNob3QtPmJhY2tncm91bmRDb2xvcigpOwogICAg
ICAgICBpZiAoY29yZUNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgICAgIGJhY2tncm91bmRDb2xv
ciA9IGFkb3B0TlMoW1tVSUNvbG9yIGFsbG9jXSBpbml0V2l0aENHQ29sb3I6Y2FjaGVkQ0dDb2xv
cihjb3JlQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpXSk7CiAgICAgfQpAQCAtMjQ0LDEwICsy
NDMsOSBAQCB2b2lkIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6ZW5kU3dpcGVHZXN0dXJlKFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0qIHRhcmdldEl0ZW0sCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBWaWV3U25hcHNob3Qgc25hcHNob3Q7CiAgICAgbV9zbmFwc2hvdFJlbW92YWxUYXJnZXRS
ZW5kZXJUcmVlU2l6ZSA9IDA7Ci0gICAgaWYgKFZpZXdTbmFwc2hvdFN0b3JlOjpzaGFyZWQoKS5n
ZXRTbmFwc2hvdCh0YXJnZXRJdGVtLCBzbmFwc2hvdCkpCi0gICAgICAgIG1fc25hcHNob3RSZW1v
dmFsVGFyZ2V0UmVuZGVyVHJlZVNpemUgPSBzbmFwc2hvdC5yZW5kZXJUcmVlU2l6ZSAqIHN3aXBl
U25hcHNob3RSZW1vdmFsUmVuZGVyVHJlZVNpemVUYXJnZXRGcmFjdGlvbjsKKyAgICBpZiAoVmll
d1NuYXBzaG90KiBzbmFwc2hvdCA9IHRhcmdldEl0ZW0tPnNuYXBzaG90KCkpCisgICAgICAgIG1f
c25hcHNob3RSZW1vdmFsVGFyZ2V0UmVuZGVyVHJlZVNpemUgPSBzbmFwc2hvdC0+cmVuZGVyVHJl
ZVNpemUoKSAqIHN3aXBlU25hcHNob3RSZW1vdmFsUmVuZGVyVHJlZVNpemVUYXJnZXRGcmFjdGlv
bjsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVwbGFjZSB0aGUgY3VycmVudCBiYWNrLWZv
cndhcmQgaXRlbSdzIHNuYXBzaG90CiAgICAgLy8gbGlrZSB3ZSBub3JtYWxseSB3b3VsZCB3aGVu
IGdvaW5nIGJhY2sgb3IgZm9yd2FyZCwgYmVjYXVzZSB3ZSBhcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1Mu
bW0KaW5kZXggN2Q0OTk5YS4uNTIzZDBjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9XZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MubW0KKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9XZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MubW0KQEAgLTQ4
LDcgKzQ4LDcgQEAgV2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpXZWJNZW1vcnlQcmVzc3VyZUhh
bmRsZXIoKQogICAgIGRpc3BhdGNoX3NvdXJjZV90IHNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9j
cmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZUEVfTUVNT1JZU1RBVFVTLCAwLCBESVNQQVRDSF9NRU1P
UllTVEFUVVNfUFJFU1NVUkVfV0FSTiwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSk7CiAgICAg
ZGlzcGF0Y2hfc2V0X2NvbnRleHQoc291cmNlLCB0aGlzKTsKICAgICBkaXNwYXRjaF9zb3VyY2Vf
c2V0X2V2ZW50X2hhbmRsZXIoc291cmNlLCBeewotICAgICAgICBWaWV3U25hcHNob3RTdG9yZTo6
c2hhcmVkKCkuZGlzY2FyZFNuYXBzaG90cygpOworICAgICAgICBWaWV3U25hcHNob3RTdG9yZTo6
c2hhcmVkKCkuZGlzY2FyZFNuYXBzaG90SW1hZ2VzKCk7CiAgICAgfSk7CiAgICAgZGlzcGF0Y2hf
cmVzdW1lKHNvdXJjZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsLmgKaW5kZXggNjExZmE5Ny4uZjU3YzgxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwuaApAQCAtMTI0LDcgKzEyNCw3IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBM
YXllclRyZWVDb250ZXh0Jik7CiAKLSAgICB2aXJ0dWFsIFZpZXdTbmFwc2hvdCB0YWtlVmlld1Nu
YXBzaG90KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFZpZXdTbmFwc2hvdD4g
dGFrZVZpZXdTbmFwc2hvdCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB3aGVlbEV2ZW50
V2FzTm90SGFuZGxlZEJ5V2ViQ29yZShjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50Jikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQ3VzdG9tU3dpcGVWaWV3cygpIG92ZXJyaWRlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBs
Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQppbmRl
eCA0N2E4NzQ2Li5lMWI1YTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
UGFnZUNsaWVudEltcGwubW0KQEAgLTUwNyw3ICs1MDcsNyBAQCBDQUxheWVyICpQYWdlQ2xpZW50
SW1wbDo6YWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Jvb3RMYXllcigpIGNvbnN0CiAgICAgcmV0dXJu
IG1fd2tWaWV3Ll9hY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZVJvb3RMYXllcjsKIH0KIAotVmll
d1NuYXBzaG90IFBhZ2VDbGllbnRJbXBsOjp0YWtlVmlld1NuYXBzaG90KCkKK1Bhc3NSZWZQdHI8
Vmlld1NuYXBzaG90PiBQYWdlQ2xpZW50SW1wbDo6dGFrZVZpZXdTbmFwc2hvdCgpCiB7CiAgICAg
cmV0dXJuIFttX3drVmlldyBfdGFrZVZpZXdTbmFwc2hvdF07CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdHZXN0dXJlQ29udHJvbGxlci5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXIuaAppbmRleCBiNjA4
NWEyLi44ZTEyZDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Zp
ZXdHZXN0dXJlQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
Vmlld0dlc3R1cmVDb250cm9sbGVyLmgKQEAgLTUwLDcgKzUwLDcgQEAgY2xhc3MgSU9TdXJmYWNl
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RydWN0IFZpZXdTbmFwc2hvdDsKK2NsYXNzIFZp
ZXdTbmFwc2hvdDsKIGNsYXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07CiBjbGFzcyBXZWJQYWdl
UHJveHk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld0dl
c3R1cmVDb250cm9sbGVyTWFjLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3
R2VzdHVyZUNvbnRyb2xsZXJNYWMubW0KaW5kZXggMTU0OTI5MS4uYjk2YTU5ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xsZXJNYWMu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3R2VzdHVyZUNvbnRyb2xs
ZXJNYWMubW0KQEAgLTQ1NCwxMiArNDU0LDEyIEBAIENBTGF5ZXIgKlZpZXdHZXN0dXJlQ29udHJv
bGxlcjo6ZGV0ZXJtaW5lTGF5ZXJBZGphY2VudFRvU25hcHNob3RGb3JQYXJlbnQoU3dpcGVECiBi
b29sIFZpZXdHZXN0dXJlQ29udHJvbGxlcjo6c2hvdWxkVXNlU25hcHNob3RGb3JTaXplKFZpZXdT
bmFwc2hvdCYgc25hcHNob3QsIEZsb2F0U2l6ZSBzd2lwZUxheWVyU2l6ZSwgZmxvYXQgdG9wQ29u
dGVudEluc2V0KQogewogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gbV93ZWJQYWdlUHJv
eHkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICBpZiAoc25hcHNob3QuZGV2aWNlU2NhbGVGYWN0
b3IgIT0gZGV2aWNlU2NhbGVGYWN0b3IpCisgICAgaWYgKHNuYXBzaG90LmRldmljZVNjYWxlRmFj
dG9yKCkgIT0gZGV2aWNlU2NhbGVGYWN0b3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IEZsb2F0U2l6ZSB1bm9ic2N1cmVkU3dpcGVMYXllclNpemVJbkRldmljZUNvb3JkaW5hdGVzID0g
c3dpcGVMYXllclNpemUgLSBGbG9hdFNpemUoMCwgdG9wQ29udGVudEluc2V0KTsKICAgICB1bm9i
c2N1cmVkU3dpcGVMYXllclNpemVJbkRldmljZUNvb3JkaW5hdGVzLnNjYWxlKGRldmljZVNjYWxl
RmFjdG9yKTsKLSAgICBpZiAoc25hcHNob3Quc2l6ZSAhPSB1bm9ic2N1cmVkU3dpcGVMYXllclNp
emVJbkRldmljZUNvb3JkaW5hdGVzKQorICAgIGlmIChzbmFwc2hvdC5zaXplKCkgIT0gdW5vYnNj
dXJlZFN3aXBlTGF5ZXJTaXplSW5EZXZpY2VDb29yZGluYXRlcykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC01MjYsMTYgKzUyNiwxNSBAQCB2b2lkIFZpZXdH
ZXN0dXJlQ29udHJvbGxlcjo6YmVnaW5Td2lwZUdlc3R1cmUoV2ViQmFja0ZvcndhcmRMaXN0SXRl
bSogdGFyZ2V0SXRlbQogICAgIGJvb2wgZ2VvbWV0cnlJc0ZsaXBwZWRUb1Jvb3QgPSBsYXllckdl
b21ldHJ5RmxpcHBlZFRvUm9vdChzbmFwc2hvdExheWVyUGFyZW50KTsKIAogICAgIFJldGFpblB0
cjxDR0NvbG9yUmVmPiBiYWNrZ3JvdW5kQ29sb3IgPSBDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihr
Q0dDb2xvcldoaXRlKTsKLSAgICBWaWV3U25hcHNob3Qgc25hcHNob3Q7Ci0gICAgaWYgKFZpZXdT
bmFwc2hvdFN0b3JlOjpzaGFyZWQoKS5nZXRTbmFwc2hvdCh0YXJnZXRJdGVtLCBzbmFwc2hvdCkp
IHsKLSAgICAgICAgaWYgKHNob3VsZFVzZVNuYXBzaG90Rm9yU2l6ZShzbmFwc2hvdCwgc3dpcGVB
cmVhLnNpemUoKSwgdG9wQ29udGVudEluc2V0KSkKLSAgICAgICAgICAgIFttX3N3aXBlU25hcHNo
b3RMYXllciBzZXRDb250ZW50czpzbmFwc2hvdC5hc0xheWVyQ29udGVudHMoKV07CisgICAgaWYg
KFZpZXdTbmFwc2hvdCogc25hcHNob3QgPSB0YXJnZXRJdGVtLT5zbmFwc2hvdCgpKSB7CisgICAg
ICAgIGlmIChzaG91bGRVc2VTbmFwc2hvdEZvclNpemUoKnNuYXBzaG90LCBzd2lwZUFyZWEuc2l6
ZSgpLCB0b3BDb250ZW50SW5zZXQpKQorICAgICAgICAgICAgW21fc3dpcGVTbmFwc2hvdExheWVy
IHNldENvbnRlbnRzOnNuYXBzaG90LT5hc0xheWVyQ29udGVudHMoKV07CiAKLSAgICAgICAgQ29s
b3IgY29yZUNvbG9yID0gc25hcHNob3QuYmFja2dyb3VuZENvbG9yOworICAgICAgICBDb2xvciBj
b3JlQ29sb3IgPSBzbmFwc2hvdC0+YmFja2dyb3VuZENvbG9yKCk7CiAgICAgICAgIGlmIChjb3Jl
Q29sb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gY2FjaGVkQ0dD
b2xvcihjb3JlQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogI2lmIFVTRV9JT1NVUkZBQ0Vf
VklFV19TTkFQU0hPVFMKLSAgICAgICAgbV9jdXJyZW50U3dpcGVTbmFwc2hvdFN1cmZhY2UgPSBz
bmFwc2hvdC5zdXJmYWNlOworICAgICAgICBtX2N1cnJlbnRTd2lwZVNuYXBzaG90U3VyZmFjZSA9
IHNuYXBzaG90LT5zdXJmYWNlKCk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTYzMCwxMCArNjI5LDkg
QEAgdm9pZCBWaWV3R2VzdHVyZUNvbnRyb2xsZXI6OmVuZFN3aXBlR2VzdHVyZShXZWJCYWNrRm9y
d2FyZExpc3RJdGVtKiB0YXJnZXRJdGVtLAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Vmlld1NuYXBzaG90IHNuYXBzaG90OwogICAgIHVpbnQ2NF90IHJlbmRlclRyZWVTaXplID0gMDsK
LSAgICBpZiAoVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLmdldFNuYXBzaG90KHRhcmdldEl0
ZW0sIHNuYXBzaG90KSkKLSAgICAgICAgcmVuZGVyVHJlZVNpemUgPSBzbmFwc2hvdC5yZW5kZXJU
cmVlU2l6ZTsKKyAgICBpZiAoVmlld1NuYXBzaG90KiBzbmFwc2hvdCA9IHRhcmdldEl0ZW0tPnNu
YXBzaG90KCkpCisgICAgICAgIHJlbmRlclRyZWVTaXplID0gc25hcHNob3QtPnJlbmRlclRyZWVT
aXplKCk7CiAKICAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6Vmll
d0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvcjo6U2V0UmVuZGVyVHJlZVNpemVOb3RpZmljYXRpb25U
aHJlc2hvbGQocmVuZGVyVHJlZVNpemUgKiBzd2lwZVNuYXBzaG90UmVtb3ZhbFJlbmRlclRyZWVT
aXplVGFyZ2V0RnJhY3Rpb24pLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaAppbmRleCAyYmM3
N2RmLi5iZWQyZjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Zp
ZXdTbmFwc2hvdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3
U25hcHNob3RTdG9yZS5oCkBAIC0yOSw0OSArMjksODQgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0Nv
bG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9J
T1N1cmZhY2UuaD4KLSNpbmNsdWRlIDxjaHJvbm8+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogT0JKQ19DTEFTUyBDQUNvbnRl
eHQ7CiAKICNpZiBQTEFURk9STShNQUMpCi0jZGVmaW5lIFVTRV9JT1NVUkZBQ0VfVklFV19TTkFQ
U0hPVFMgdHJ1ZQotI2RlZmluZSBVU0VfUkVOREVSX1NFUlZFUl9WSUVXX1NOQVBTSE9UUyBmYWxz
ZQorI2RlZmluZSBVU0VfSU9TVVJGQUNFX1ZJRVdfU05BUFNIT1RTIDEKKyNkZWZpbmUgVVNFX1JF
TkRFUl9TRVJWRVJfVklFV19TTkFQU0hPVFMgMAogI2Vsc2UKLSNkZWZpbmUgVVNFX0lPU1VSRkFD
RV9WSUVXX1NOQVBTSE9UUyBmYWxzZQotI2RlZmluZSBVU0VfUkVOREVSX1NFUlZFUl9WSUVXX1NO
QVBTSE9UUyB0cnVlCisjZGVmaW5lIFVTRV9JT1NVUkZBQ0VfVklFV19TTkFQU0hPVFMgMAorI2Rl
ZmluZSBVU0VfUkVOREVSX1NFUlZFUl9WSUVXX1NOQVBTSE9UUyAxCiAjZW5kaWYKIAorbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgSU9TdXJmYWNlOworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAorY2xhc3MgVmlld1NuYXBzaG90U3RvcmU7CiBjbGFzcyBXZWJCYWNrRm9yd2FyZExpc3RJdGVt
OwogY2xhc3MgV2ViUGFnZVByb3h5OwogCi1zdHJ1Y3QgVmlld1NuYXBzaG90IHsKK2NsYXNzIFZp
ZXdTbmFwc2hvdCA6IHB1YmxpYyBSZWZDb3VudGVkPFZpZXdTbmFwc2hvdD4geworcHVibGljOgog
I2lmIFVTRV9JT1NVUkZBQ0VfVklFV19TTkFQU0hPVFMKLSAgICBSZWZQdHI8V2ViQ29yZTo6SU9T
dXJmYWNlPiBzdXJmYWNlOwotI2VuZGlmCi0jaWYgVVNFX1JFTkRFUl9TRVJWRVJfVklFV19TTkFQ
U0hPVFMKLSAgICB1aW50MzJfdCBzbG90SUQgPSAwOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFZp
ZXdTbmFwc2hvdD4gY3JlYXRlKFdlYkNvcmU6OklPU3VyZmFjZSosIFdlYkNvcmU6OkludFNpemUs
IHNpemVfdCBpbWFnZVNpemVJbkJ5dGVzKTsKKyNlbGlmIFVTRV9SRU5ERVJfU0VSVkVSX1ZJRVdf
U05BUFNIT1RTCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Vmlld1NuYXBzaG90PiBjcmVhdGUodWlu
dDMyX3Qgc2xvdElELCBXZWJDb3JlOjpJbnRTaXplLCBzaXplX3QgaW1hZ2VTaXplSW5CeXRlcyk7
CiAjZW5kaWYKIAotICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgY3Jl
YXRpb25UaW1lOwotICAgIHVpbnQ2NF90IHJlbmRlclRyZWVTaXplOwotICAgIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yOwotICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZTsKLSAgICBzaXplX3QgaW1h
Z2VTaXplSW5CeXRlcyA9IDA7Ci0gICAgV2ViQ29yZTo6Q29sb3IgYmFja2dyb3VuZENvbG9yOwor
ICAgIH5WaWV3U25hcHNob3QoKTsKIAogICAgIHZvaWQgY2xlYXJJbWFnZSgpOwogICAgIGJvb2wg
aGFzSW1hZ2UoKSBjb25zdDsKICAgICBpZCBhc0xheWVyQ29udGVudHMoKTsKKworICAgIHZvaWQg
c2V0UmVuZGVyVHJlZVNpemUodWludDY0X3QgcmVuZGVyVHJlZVNpemUpIHsgbV9yZW5kZXJUcmVl
U2l6ZSA9IHJlbmRlclRyZWVTaXplOyB9CisgICAgdWludDY0X3QgcmVuZGVyVHJlZVNpemUoKSBj
b25zdCB7IHJldHVybiBtX3JlbmRlclRyZWVTaXplOyB9CisKKyAgICB2b2lkIHNldEJhY2tncm91
bmRDb2xvcihXZWJDb3JlOjpDb2xvciBjb2xvcikgeyBtX2JhY2tncm91bmRDb2xvciA9IGNvbG9y
OyB9CisgICAgV2ViQ29yZTo6Q29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZ3JvdW5kQ29sb3I7IH0KKworICAgIHZvaWQgc2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IpIHsgbV9kZXZpY2VTY2FsZUZhY3RvciA9IGRldmljZVNjYWxl
RmFjdG9yOyB9CisgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBt
X2RldmljZVNjYWxlRmFjdG9yOyB9CisKKyAgICBzaXplX3QgaW1hZ2VTaXplSW5CeXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1faW1hZ2VTaXplSW5CeXRlczsgfQorI2lmIFVTRV9JT1NVUkZBQ0VfVklF
V19TTkFQU0hPVFMKKyAgICBXZWJDb3JlOjpJT1N1cmZhY2UqIHN1cmZhY2UoKSBjb25zdCB7IHJl
dHVybiBtX3N1cmZhY2UuZ2V0KCk7IH0KKyNlbmRpZgorICAgIFdlYkNvcmU6OkludFNpemUgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCitwcml2YXRlOgorI2lmIFVTRV9JT1NVUkZB
Q0VfVklFV19TTkFQU0hPVFMKKyAgICBleHBsaWNpdCBWaWV3U25hcHNob3QoV2ViQ29yZTo6SU9T
dXJmYWNlKiwgV2ViQ29yZTo6SW50U2l6ZSwgc2l6ZV90IGltYWdlU2l6ZUluQnl0ZXMpOworI2Vs
aWYgVVNFX1JFTkRFUl9TRVJWRVJfVklFV19TTkFQU0hPVFMKKyAgICBleHBsaWNpdCBWaWV3U25h
cHNob3QodWludDMyX3Qgc2xvdElELCBXZWJDb3JlOjpJbnRTaXplLCBzaXplX3QgaW1hZ2VTaXpl
SW5CeXRlcyk7CisjZW5kaWYKKworI2lmIFVTRV9JT1NVUkZBQ0VfVklFV19TTkFQU0hPVFMKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBtX3N1cmZhY2U7CisjZWxpZiBVU0VfUkVOREVS
X1NFUlZFUl9WSUVXX1NOQVBTSE9UUworICAgIHVpbnQzMl90IG1fc2xvdElEOworI2VuZGlmCisK
KyAgICBzaXplX3QgbV9pbWFnZVNpemVJbkJ5dGVzOworICAgIHVpbnQ2NF90IG1fcmVuZGVyVHJl
ZVNpemU7CisgICAgZmxvYXQgbV9kZXZpY2VTY2FsZUZhY3RvcjsKKyAgICBXZWJDb3JlOjpJbnRT
aXplIG1fc2l6ZTsKKyAgICBXZWJDb3JlOjpDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKIH07CiAK
IGNsYXNzIFZpZXdTbmFwc2hvdFN0b3JlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWaWV3
U25hcHNob3RTdG9yZSk7CisgICAgZnJpZW5kIGNsYXNzIFZpZXdTbmFwc2hvdDsKIHB1YmxpYzoK
ICAgICBWaWV3U25hcHNob3RTdG9yZSgpOwogICAgIH5WaWV3U25hcHNob3RTdG9yZSgpOwpAQCAt
NzksMjUgKzExNCwyNSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFZpZXdTbmFwc2hvdFN0b3JlJiBz
aGFyZWQoKTsKIAogICAgIHZvaWQgcmVjb3JkU25hcHNob3QoV2ViUGFnZVByb3h5Jik7Ci0gICAg
Ym9vbCBnZXRTbmFwc2hvdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiwgVmlld1NuYXBzaG90Jik7
CiAKICAgICB2b2lkIGRpc2FibGVTbmFwc2hvdHRpbmcoKSB7IG1fZW5hYmxlZCA9IGZhbHNlOyB9
CiAgICAgdm9pZCBlbmFibGVTbmFwc2hvdHRpbmcoKSB7IG1fZW5hYmxlZCA9IHRydWU7IH0KIAot
ICAgIHZvaWQgZGlzY2FyZFNuYXBzaG90cygpOworICAgIHZvaWQgZGlzY2FyZFNuYXBzaG90SW1h
Z2VzKCk7CiAKLSNpZiBQTEFURk9STShJT1MpCisjaWYgVVNFX1JFTkRFUl9TRVJWRVJfVklFV19T
TkFQU0hPVFMKICAgICBzdGF0aWMgQ0FDb250ZXh0ICpzbmFwc2hvdHRpbmdDb250ZXh0KCk7CiAj
ZW5kaWYKIAogcHJpdmF0ZToKKyAgICB2b2lkIGRpZEFkZEltYWdlVG9TbmFwc2hvdChWaWV3U25h
cHNob3QmKTsKKyAgICB2b2lkIHdpbGxSZW1vdmVJbWFnZUZyb21TbmFwc2hvdChWaWV3U25hcHNo
b3QmKTsKICAgICB2b2lkIHBydW5lU25hcHNob3RzKFdlYlBhZ2VQcm94eSYpOwotICAgIHZvaWQg
cmVtb3ZlU25hcHNob3RJbWFnZShWaWV3U25hcHNob3QmKTsKLQotICAgIEhhc2hNYXA8U3RyaW5n
LCBWaWV3U25hcHNob3Q+IG1fc25hcHNob3RNYXA7CiAKICAgICBib29sIG1fZW5hYmxlZDsKICAg
ICBzaXplX3QgbV9zbmFwc2hvdENhY2hlU2l6ZTsKKworICAgIExpc3RIYXNoU2V0PFZpZXdTbmFw
c2hvdCo+IG1fc25hcHNob3RzV2l0aEltYWdlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RT
dG9yZS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUu
bW0KaW5kZXggOTcxYmZmNC4uNTVjMTc0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tCkBAIC0zMCw3ICszMCw2IEBACiAjaW1wb3J0
ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSU9TdXJmYWNlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1VVSUQuaD4K
IAogI2lmIFBMQVRGT1JNKElPUykKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZVByaXZh
dGUuaD4KQEAgLTU1LDcgKzU0LDcgQEAgVmlld1NuYXBzaG90U3RvcmU6OlZpZXdTbmFwc2hvdFN0
b3JlKCkKIAogVmlld1NuYXBzaG90U3RvcmU6On5WaWV3U25hcHNob3RTdG9yZSgpCiB7Ci0gICAg
ZGlzY2FyZFNuYXBzaG90cygpOworICAgIGRpc2NhcmRTbmFwc2hvdEltYWdlcygpOwogfQogCiBW
aWV3U25hcHNob3RTdG9yZSYgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpCkBAIC02NCw3ICs2
Myw3IEBAIFZpZXdTbmFwc2hvdFN0b3JlJiBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkKICAg
ICByZXR1cm4gc3RvcmU7CiB9CiAKLSNpZiBQTEFURk9STShJT1MpCisjaWYgVVNFX1JFTkRFUl9T
RVJWRVJfVklFV19TTkFQU0hPVFMKIENBQ29udGV4dCAqVmlld1NuYXBzaG90U3RvcmU6OnNuYXBz
aG90dGluZ0NvbnRleHQoKQogewogICAgIHN0YXRpYyBDQUNvbnRleHQgKmNvbnRleHQ7CkBAIC04
MiwxMyArODEsMTggQEAgQ0FDb250ZXh0ICpWaWV3U25hcHNob3RTdG9yZTo6c25hcHNob3R0aW5n
Q29udGV4dCgpCiB9CiAjZW5kaWYKIAotdm9pZCBWaWV3U25hcHNob3RTdG9yZTo6cmVtb3ZlU25h
cHNob3RJbWFnZShWaWV3U25hcHNob3QmIHNuYXBzaG90KQordm9pZCBWaWV3U25hcHNob3RTdG9y
ZTo6ZGlkQWRkSW1hZ2VUb1NuYXBzaG90KFZpZXdTbmFwc2hvdCYgc25hcHNob3QpCiB7Ci0gICAg
aWYgKCFzbmFwc2hvdC5oYXNJbWFnZSgpKQotICAgICAgICByZXR1cm47CisgICAgYm9vbCBpc05l
d0VudHJ5ID0gbV9zbmFwc2hvdHNXaXRoSW1hZ2VzLmFkZCgmc25hcHNob3QpLmlzTmV3RW50cnk7
CisgICAgQVNTRVJUX1VOVVNFRChpc05ld0VudHJ5LCBpc05ld0VudHJ5KTsKKyAgICBtX3NuYXBz
aG90Q2FjaGVTaXplICs9IHNuYXBzaG90LmltYWdlU2l6ZUluQnl0ZXMoKTsKK30KIAotICAgIG1f
c25hcHNob3RDYWNoZVNpemUgLT0gc25hcHNob3QuaW1hZ2VTaXplSW5CeXRlczsKLSAgICBzbmFw
c2hvdC5jbGVhckltYWdlKCk7Cit2b2lkIFZpZXdTbmFwc2hvdFN0b3JlOjp3aWxsUmVtb3ZlSW1h
Z2VGcm9tU25hcHNob3QoVmlld1NuYXBzaG90JiBzbmFwc2hvdCkKK3sKKyAgICBib29sIHJlbW92
ZWQgPSBtX3NuYXBzaG90c1dpdGhJbWFnZXMucmVtb3ZlKCZzbmFwc2hvdCk7CisgICAgQVNTRVJU
X1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKKyAgICBtX3NuYXBzaG90Q2FjaGVTaXplIC09IHNu
YXBzaG90LmltYWdlU2l6ZUluQnl0ZXMoKTsKIH0KIAogdm9pZCBWaWV3U25hcHNob3RTdG9yZTo6
cHJ1bmVTbmFwc2hvdHMoV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCkBAIC05Niw1NCArMTAw
LDExIEBAIHZvaWQgVmlld1NuYXBzaG90U3RvcmU6OnBydW5lU25hcHNob3RzKFdlYlBhZ2VQcm94
eSYgd2ViUGFnZVByb3h5KQogICAgIGlmIChtX3NuYXBzaG90Q2FjaGVTaXplIDw9IG1heGltdW1T
bmFwc2hvdENhY2hlU2l6ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdWludDMyX3QgY3VycmVu
dEluZGV4ID0gd2ViUGFnZVByb3h5LmJhY2tGb3J3YXJkTGlzdCgpLmN1cnJlbnRJbmRleCgpOwot
ICAgIHVpbnQzMl90IG1heERpc3RhbmNlID0gMDsKLSAgICBhdXRvIG1vc3REaXN0YW50U25hcHNo
b3RJdGVyID0gbV9zbmFwc2hvdE1hcC5lbmQoKTsKLSAgICBhdXRvIGJhY2tGb3J3YXJkRW50cmll
cyA9IHdlYlBhZ2VQcm94eS5iYWNrRm9yd2FyZExpc3QoKS5lbnRyaWVzKCk7Ci0KLSAgICAvLyBG
aXJzdCwgdHJ5IHRvIGV2aWN0IHRoZSBzbmFwc2hvdCBmb3IgdGhlIHBhZ2UgZmFydGhlc3QgZnJv
bSB0aGUgY3VycmVudCBiYWNrLWZvcndhcmQgaXRlbS4KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAw
LCBlbnRyeUNvdW50ID0gd2ViUGFnZVByb3h5LmJhY2tGb3J3YXJkTGlzdCgpLmVudHJpZXMoKS5z
aXplKCk7IGkgPCBlbnRyeUNvdW50OyBpKyspIHsKLSAgICAgICAgdWludDMyX3QgZGlzdGFuY2Ug
PSBzdGQ6Om1heChjdXJyZW50SW5kZXgsIGkpIC0gc3RkOjptaW4oY3VycmVudEluZGV4LCBpKTsK
KyAgICBBU1NFUlQoIW1fc25hcHNob3RzV2l0aEltYWdlcy5pc0VtcHR5KCkpOwogCi0gICAgICAg
IGlmIChpID09IGN1cnJlbnRJbmRleCB8fCBkaXN0YW5jZSA8IG1heERpc3RhbmNlKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSA9
IGJhY2tGb3J3YXJkRW50cmllc1tpXS5nZXQoKTsKLSAgICAgICAgU3RyaW5nIHNuYXBzaG90VVVJ
RCA9IGl0ZW0tPnNuYXBzaG90VVVJRCgpOwotICAgICAgICBpZiAoc25hcHNob3RVVUlELmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNvbnN0IGF1dG8mIHNuYXBz
aG90SXRlciA9IG1fc25hcHNob3RNYXAuZmluZChzbmFwc2hvdFVVSUQpOwotICAgICAgICBpZiAo
c25hcHNob3RJdGVyID09IG1fc25hcHNob3RNYXAuZW5kKCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAvLyBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gZXZpY3Rpbmcgc25hcHNo
b3RzIHRoYXQgc3RpbGwgaGF2ZSBpbWFnZXMuCi0gICAgICAgIGlmICghc25hcHNob3RJdGVyLT52
YWx1ZS5oYXNJbWFnZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbW9zdERp
c3RhbnRTbmFwc2hvdEl0ZXIgPSBzbmFwc2hvdEl0ZXI7Ci0gICAgICAgIG1heERpc3RhbmNlID0g
ZGlzdGFuY2U7Ci0gICAgfQorICAgIC8vIEZJWE1FOiBXZSBoYXZlIGVub3VnaCBpbmZvcm1hdGlv
biB0byBkbyBzbWFydGVyLXRoYW4tTFJVIGV2aWN0aW9uIChtYWtpbmcgdXNlIG9mIHRoZSBiYWNr
LWZvcndhcmQgbGlzdHMsIGV0Yy4pCiAKLSAgICBpZiAobW9zdERpc3RhbnRTbmFwc2hvdEl0ZXIg
IT0gbV9zbmFwc2hvdE1hcC5lbmQoKSkgewotICAgICAgICByZW1vdmVTbmFwc2hvdEltYWdlKG1v
c3REaXN0YW50U25hcHNob3RJdGVyLT52YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBJZiB3ZSBjYW4ndCBmaW5kIGEgbW9zdCBkaXN0YW50IGl0ZW0gKHBlcmhhcHMgYmVj
YXVzZSBhbGwgdGhlIHNuYXBzaG90cyBhcmUgZnJvbQotICAgIC8vIGEgZGlmZmVyZW50IFdlYlBh
Z2VQcm94eSdzIGJhY2stZm9yd2FyZCBsaXN0KSwgd2Ugc2hvdWxkIGV2aWN0IHRoZSB0aGUgb2xk
ZXN0IGl0ZW0uCi0gICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBvbGRl
c3RTbmFwc2hvdFRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50Ojpt
YXgoKTsKLSAgICBTdHJpbmcgb2xkZXN0U25hcHNob3RVVUlEOwotCi0gICAgZm9yIChjb25zdCBh
dXRvJiB1dWlkQW5kU25hcHNob3QgOiBtX3NuYXBzaG90TWFwKSB7Ci0gICAgICAgIGlmICh1dWlk
QW5kU25hcHNob3QudmFsdWUuY3JlYXRpb25UaW1lIDwgb2xkZXN0U25hcHNob3RUaW1lICYmIHV1
aWRBbmRTbmFwc2hvdC52YWx1ZS5oYXNJbWFnZSgpKSB7Ci0gICAgICAgICAgICBvbGRlc3RTbmFw
c2hvdFRpbWUgPSB1dWlkQW5kU25hcHNob3QudmFsdWUuY3JlYXRpb25UaW1lOwotICAgICAgICAg
ICAgb2xkZXN0U25hcHNob3RVVUlEID0gdXVpZEFuZFNuYXBzaG90LmtleTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGNvbnN0IGF1dG8mIHNuYXBzaG90SXRlciA9IG1fc25hcHNob3RNYXAuZmlu
ZChvbGRlc3RTbmFwc2hvdFVVSUQpOwotICAgIHJlbW92ZVNuYXBzaG90SW1hZ2Uoc25hcHNob3RJ
dGVyLT52YWx1ZSk7CisgICAgbV9zbmFwc2hvdHNXaXRoSW1hZ2VzLmZpcnN0KCktPmNsZWFySW1h
Z2UoKTsKIH0KIAogdm9pZCBWaWV3U25hcHNob3RTdG9yZTo6cmVjb3JkU25hcHNob3QoV2ViUGFn
ZVByb3h5JiB3ZWJQYWdlUHJveHkpCkBAIC0xNTgsNzcgKzExOSw5NCBAQCB2b2lkIFZpZXdTbmFw
c2hvdFN0b3JlOjpyZWNvcmRTbmFwc2hvdChXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKIAog
ICAgIHBydW5lU25hcHNob3RzKHdlYlBhZ2VQcm94eSk7CiAKLSAgICBWaWV3U25hcHNob3Qgc25h
cHNob3QgPSB3ZWJQYWdlUHJveHkudGFrZVZpZXdTbmFwc2hvdCgpOwotICAgIGlmICghc25hcHNo
b3QuaGFzSW1hZ2UoKSkKKyAgICBSZWZQdHI8Vmlld1NuYXBzaG90PiBzbmFwc2hvdCA9IHdlYlBh
Z2VQcm94eS50YWtlVmlld1NuYXBzaG90KCk7CisgICAgaWYgKCFzbmFwc2hvdCB8fCAhc25hcHNo
b3QtPmhhc0ltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBvbGRTbmFwc2hv
dFVVSUQgPSBpdGVtLT5zbmFwc2hvdFVVSUQoKTsKLSAgICBpZiAoIW9sZFNuYXBzaG90VVVJRC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgY29uc3QgYXV0byYgb2xkU25hcHNob3RJdGVyID0gbV9zbmFw
c2hvdE1hcC5maW5kKG9sZFNuYXBzaG90VVVJRCk7Ci0gICAgICAgIGlmIChvbGRTbmFwc2hvdEl0
ZXIgIT0gbV9zbmFwc2hvdE1hcC5lbmQoKSkgewotICAgICAgICAgICAgcmVtb3ZlU25hcHNob3RJ
bWFnZShvbGRTbmFwc2hvdEl0ZXItPnZhbHVlKTsKLSAgICAgICAgICAgIG1fc25hcHNob3RNYXAu
cmVtb3ZlKG9sZFNuYXBzaG90SXRlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzbmFwc2hv
dC5jcmVhdGlvblRpbWUgPSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKLSAgICBz
bmFwc2hvdC5yZW5kZXJUcmVlU2l6ZSA9IHdlYlBhZ2VQcm94eS5yZW5kZXJUcmVlU2l6ZSgpOwot
ICAgIHNuYXBzaG90LmRldmljZVNjYWxlRmFjdG9yID0gd2ViUGFnZVByb3h5LmRldmljZVNjYWxl
RmFjdG9yKCk7CisgICAgc25hcHNob3QtPnNldFJlbmRlclRyZWVTaXplKHdlYlBhZ2VQcm94eS5y
ZW5kZXJUcmVlU2l6ZSgpKTsKKyAgICBzbmFwc2hvdC0+c2V0RGV2aWNlU2NhbGVGYWN0b3Iod2Vi
UGFnZVByb3h5LmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIHNuYXBzaG90LT5zZXRCYWNrZ3Jv
dW5kQ29sb3Iod2ViUGFnZVByb3h5LnBhZ2VFeHRlbmRlZEJhY2tncm91bmRDb2xvcigpKTsKIAot
ICAgIGl0ZW0tPnNldFNuYXBzaG90VVVJRChjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOwor
ICAgIGl0ZW0tPnNldFNuYXBzaG90KHNuYXBzaG90LnJlbGVhc2UoKSk7Cit9CiAKLSAgICBtX3Nu
YXBzaG90TWFwLmFkZChpdGVtLT5zbmFwc2hvdFVVSUQoKSwgc25hcHNob3QpOwotICAgIG1fc25h
cHNob3RDYWNoZVNpemUgKz0gc25hcHNob3QuaW1hZ2VTaXplSW5CeXRlczsKK3ZvaWQgVmlld1Nu
YXBzaG90U3RvcmU6OmRpc2NhcmRTbmFwc2hvdEltYWdlcygpCit7CisgICAgd2hpbGUgKCFtX3Nu
YXBzaG90c1dpdGhJbWFnZXMuaXNFbXB0eSgpKQorICAgICAgICBtX3NuYXBzaG90c1dpdGhJbWFn
ZXMuZmlyc3QoKS0+Y2xlYXJJbWFnZSgpOwogfQogCi1ib29sIFZpZXdTbmFwc2hvdFN0b3JlOjpn
ZXRTbmFwc2hvdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtLCBWaWV3U25hcHNob3QmIHNu
YXBzaG90KQorCisjaWYgVVNFX0lPU1VSRkFDRV9WSUVXX1NOQVBTSE9UUworUGFzc1JlZlB0cjxW
aWV3U25hcHNob3Q+IFZpZXdTbmFwc2hvdDo6Y3JlYXRlKElPU3VyZmFjZSogc3VyZmFjZSwgSW50
U2l6ZSBzaXplLCBzaXplX3QgaW1hZ2VTaXplSW5CeXRlcykKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFZpZXdTbmFwc2hvdChzdXJmYWNlLCBzaXplLCBpbWFnZVNpemVJbkJ5dGVzKSk7Cit9
CisjZWxpZiBVU0VfUkVOREVSX1NFUlZFUl9WSUVXX1NOQVBTSE9UUworUGFzc1JlZlB0cjxWaWV3
U25hcHNob3Q+IFZpZXdTbmFwc2hvdDo6Y3JlYXRlKHVpbnQzMl90IHNsb3RJRCwgSW50U2l6ZSBz
aXplLCBzaXplX3QgaW1hZ2VTaXplSW5CeXRlcykKIHsKLSAgICBpZiAoaXRlbS0+c25hcHNob3RV
VUlEKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBWaWV3U25hcHNob3Qoc2xvdElELCBzaXplLCBpbWFnZVNpemVJbkJ5dGVzKSk7Cit9
CisjZW5kaWYKIAotICAgIGNvbnN0IGF1dG8mIHNuYXBzaG90SXRlcmF0b3IgPSBtX3NuYXBzaG90
TWFwLmZpbmQoaXRlbS0+c25hcHNob3RVVUlEKCkpOwotICAgIGlmIChzbmFwc2hvdEl0ZXJhdG9y
ID09IG1fc25hcHNob3RNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzbmFw
c2hvdCA9IHNuYXBzaG90SXRlcmF0b3ItPnZhbHVlOwotICAgIHJldHVybiB0cnVlOworI2lmIFVT
RV9JT1NVUkZBQ0VfVklFV19TTkFQU0hPVFMKK1ZpZXdTbmFwc2hvdDo6Vmlld1NuYXBzaG90KElP
U3VyZmFjZSogc3VyZmFjZSwgSW50U2l6ZSBzaXplLCBzaXplX3QgaW1hZ2VTaXplSW5CeXRlcykK
KyAgICA6IG1fc3VyZmFjZShzdXJmYWNlKQorI2VsaWYgVVNFX1JFTkRFUl9TRVJWRVJfVklFV19T
TkFQU0hPVFMKK1ZpZXdTbmFwc2hvdDo6Vmlld1NuYXBzaG90KHVpbnQzMl90IHNsb3RJRCwgSW50
U2l6ZSBzaXplLCBzaXplX3QgaW1hZ2VTaXplSW5CeXRlcykKKyAgICA6IG1fc2xvdElEKHNsb3RJ
RCkKKyNlbmRpZgorICAgICwgbV9pbWFnZVNpemVJbkJ5dGVzKGltYWdlU2l6ZUluQnl0ZXMpCisg
ICAgLCBtX3NpemUoc2l6ZSkKK3sKKyAgICBpZiAoaGFzSW1hZ2UoKSkKKyAgICAgICAgVmlld1Nu
YXBzaG90U3RvcmU6OnNoYXJlZCgpLmRpZEFkZEltYWdlVG9TbmFwc2hvdCgqdGhpcyk7CiB9CiAK
LXZvaWQgVmlld1NuYXBzaG90U3RvcmU6OmRpc2NhcmRTbmFwc2hvdHMoKQorVmlld1NuYXBzaG90
Ojp+Vmlld1NuYXBzaG90KCkKIHsKLSAgICBmb3IgKGF1dG8mIHNuYXBzaG90IDogbV9zbmFwc2hv
dE1hcC52YWx1ZXMoKSkKLSAgICAgICAgcmVtb3ZlU25hcHNob3RJbWFnZShzbmFwc2hvdCk7Cisg
ICAgY2xlYXJJbWFnZSgpOwogfQogCiBib29sIFZpZXdTbmFwc2hvdDo6aGFzSW1hZ2UoKSBjb25z
dAogewotICAgIHJldHVybiBpbWFnZVNpemVJbkJ5dGVzOworI2lmIFVTRV9JT1NVUkZBQ0VfVklF
V19TTkFQU0hPVFMKKyAgICByZXR1cm4gbV9zdXJmYWNlOworI2VsaWYgVVNFX1JFTkRFUl9TRVJW
RVJfVklFV19TTkFQU0hPVFMKKyAgICByZXR1cm4gbV9zbG90SUQ7CisjZW5kaWYKIH0KIAogdm9p
ZCBWaWV3U25hcHNob3Q6OmNsZWFySW1hZ2UoKQogeworICAgIGlmICghaGFzSW1hZ2UoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLndpbGxSZW1v
dmVJbWFnZUZyb21TbmFwc2hvdCgqdGhpcyk7CisKICNpZiBVU0VfSU9TVVJGQUNFX1ZJRVdfU05B
UFNIT1RTCi0gICAgc3VyZmFjZSA9IG51bGxwdHI7CisgICAgbV9zdXJmYWNlID0gbnVsbHB0cjsK
ICNlbGlmIFVTRV9SRU5ERVJfU0VSVkVSX1ZJRVdfU05BUFNIT1RTCi0gICAgaWYgKHNsb3RJRCkK
LSAgICAgICAgW1ZpZXdTbmFwc2hvdFN0b3JlOjpzbmFwc2hvdHRpbmdDb250ZXh0KCkgZGVsZXRl
U2xvdDpzbG90SURdOwotICAgIHNsb3RJRCA9IDA7CisgICAgW1ZpZXdTbmFwc2hvdFN0b3JlOjpz
bmFwc2hvdHRpbmdDb250ZXh0KCkgZGVsZXRlU2xvdDptX3Nsb3RJRF07CisgICAgbV9zbG90SUQg
PSAwOwogI2VuZGlmCi0gICAgaW1hZ2VTaXplSW5CeXRlcyA9IDA7CisgICAgbV9pbWFnZVNpemVJ
bkJ5dGVzID0gMDsKIH0KIAogaWQgVmlld1NuYXBzaG90Ojphc0xheWVyQ29udGVudHMoKQogewog
I2lmIFVTRV9JT1NVUkZBQ0VfVklFV19TTkFQU0hPVFMKLSAgICBpZiAoIXN1cmZhY2UpCisgICAg
aWYgKCFtX3N1cmZhY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGRlc3Ryb3kgdGhlIHN1cmZhY2UgYW5kIGluZm9ybSB0aGUgVmlld1NuYXBz
aG90U3RvcmUgdG8gcmVkdWNlIG1fc25hcHNob3RDYWNoZVNpemUuCi0gICAgaWYgKHN1cmZhY2Ut
PnNldElzVm9sYXRpbGUoZmFsc2UpICE9IElPU3VyZmFjZTo6U3VyZmFjZVN0YXRlOjpWYWxpZCkK
KyAgICBpZiAobV9zdXJmYWNlLT5zZXRJc1ZvbGF0aWxlKGZhbHNlKSAhPSBJT1N1cmZhY2U6OlN1
cmZhY2VTdGF0ZTo6VmFsaWQpIHsKKyAgICAgICAgY2xlYXJJbWFnZSgpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CiAKLSAgICByZXR1cm4gKGlkKXN1cmZhY2UtPnN1cmZhY2UoKTsK
KyAgICByZXR1cm4gKGlkKW1fc3VyZmFjZS0+c3VyZmFjZSgpOwogI2VsaWYgVVNFX1JFTkRFUl9T
RVJWRVJfVklFV19TTkFQU0hPVFMKLSAgICByZXR1cm4gW0NBQ29udGV4dCBvYmplY3RGb3JTbG90
OnNsb3RJRF07CisgICAgcmV0dXJuIFtDQUNvbnRleHQgb2JqZWN0Rm9yU2xvdDptX3Nsb3RJRF07
CiAjZW5kaWYKIH0KIAo=
</data>
<flag name="review"
          id="259260"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>