<?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>151987</bug_id>
          
          <creation_ts>2015-12-08 02:48:25 -0800</creation_ts>
          <short_desc>[CoordinatedGraphics] layerTreeHost always exist in CoordinatedDrawingArea</short_desc>
          <delta_ts>2015-12-09 01:43:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryuan Choi">ryuan.choi</reporter>
          <assigned_to name="Ryuan Choi">ryuan.choi</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>yoon</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1147241</commentid>
    <comment_count>0</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2015-12-08 02:48:25 -0800</bug_when>
    <thetext>Clean up the unnecessary check routine and dead code in CoordinatedDrawingArea.
CoordinatedGraphics using UI side compositor always forces accelerated compositing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147242</commentid>
    <comment_count>1</comment_count>
      <attachid>266874</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2015-12-08 02:51:47 -0800</bug_when>
    <thetext>Created attachment 266874
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147253</commentid>
    <comment_count>2</comment_count>
      <attachid>266874</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2015-12-08 05:41:23 -0800</bug_when>
    <thetext>Comment on attachment 266874
Patch

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

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.cpp:58
&gt;      , m_discardBackingStoreTimer(RunLoop::current(), this, &amp;CoordinatedDrawingAreaProxy::discardBackingStore)

Because we are not going into the non-accelerated code path anymore, you can remove all codes related with backing store states and updates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147268</commentid>
    <comment_count>3</comment_count>
      <attachid>266874</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2015-12-08 06:50:06 -0800</bug_when>
    <thetext>Comment on attachment 266874
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.cpp:58
&gt;&gt;      , m_discardBackingStoreTimer(RunLoop::current(), this, &amp;CoordinatedDrawingAreaProxy::discardBackingStore)
&gt; 
&gt; Because we are not going into the non-accelerated code path anymore, you can remove all codes related with backing store states and updates.

I agree. but I am little bit worried that patch become difficult to be reviewed.
How about separating it from this patch?

If it doesn&apos;t matter, I will update the patch with more cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147270</commentid>
    <comment_count>4</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2015-12-08 07:05:55 -0800</bug_when>
    <thetext>I prefer to remove all codes related with backing store updates. 
And I think it would be easier to review :)

(In reply to comment #3)
&gt; Comment on attachment 266874 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=266874&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.cpp:58
&gt; &gt;&gt;      , m_discardBackingStoreTimer(RunLoop::current(), this, &amp;CoordinatedDrawingAreaProxy::discardBackingStore)
&gt; &gt; 
&gt; &gt; Because we are not going into the non-accelerated code path anymore, you can remove all codes related with backing store states and updates.
&gt; 
&gt; I agree. but I am little bit worried that patch become difficult to be
&gt; reviewed.
&gt; How about separating it from this patch?
&gt; 
&gt; If it doesn&apos;t matter, I will update the patch with more cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147291</commentid>
    <comment_count>5</comment_count>
      <attachid>266888</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2015-12-08 08:43:28 -0800</bug_when>
    <thetext>Created attachment 266888
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147305</commentid>
    <comment_count>6</comment_count>
      <attachid>266895</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2015-12-08 09:14:25 -0800</bug_when>
    <thetext>Created attachment 266895
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147630</commentid>
    <comment_count>7</comment_count>
      <attachid>266895</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2015-12-09 01:33:51 -0800</bug_when>
    <thetext>Comment on attachment 266895
Patch

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

It looks good to me except some nitpics. nice work.

&gt; Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedDrawingAreaProxy.h:69
&gt; +    virtual void setBackingStoreIsDiscardable(bool) { }

You can delete this line because it is already defined at DrawingAreaProxy

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:85
&gt; +    ASSERT(m_dirtyRegion.isEmpty());

I think you can remove m_dirtyRegion as well because we are not going to update this anymore after this patch.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:94
&gt; +    ASSERT(m_dirtyRegion.isEmpty());

ditto.

&gt; Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedDrawingArea.cpp:104
&gt; +    ASSERT(m_scrollOffset.isEmpty());

We can remove m_scrollRect and m_scrollOffset as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147633</commentid>
    <comment_count>8</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2015-12-09 01:43:04 -0800</bug_when>
    <thetext>Committed r193811: &lt;http://trac.webkit.org/changeset/193811&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147634</commentid>
    <comment_count>9</comment_count>
      <attachid>266895</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2015-12-09 01:43:49 -0800</bug_when>
    <thetext>Comment on attachment 266895
Patch

Clearing flags after landed manually with following yoon&apos;s comments.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266874</attachid>
            <date>2015-12-08 02:51:47 -0800</date>
            <delta_ts>2015-12-08 08:43:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151987-20151208195117.patch</filename>
            <type>text/plain</type>
            <size>26240</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkzNzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjFmZDEzZDRiMDcyZDQ5
ODQ4MGQ0ZDM0M2M3OWY1N2UwMzBjY2Q0ZC4uZTlmYWViNjRkZGJmNGRiNTI0ODBjOTc4MWY5ZWIz
N2U5ZDJjNDBjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE1LTEyLTA4ICBSeXVh
biBDaG9pICA8cnl1YW4uY2hvaUBuYXZlcmNvcnAuY29tPgorCisgICAgICAgIFtDb29yZGluYXRl
ZEdyYXBoaWNzXSBsYXllclRyZWVIb3N0IGFsd2F5cyBleGlzdCBpbiBDb29yZGluYXRlZERyYXdp
bmdBcmVhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTE5ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
b29yZGluYXRlZEdyYXBoaWNzIHVzaW5nIFVJIHNpZGUgY29tcG9zaXRvciBhbHdheXMgZm9yY2Vz
IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLgorICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCBk
ZWFkIGNvZGUgZm9yIGxheWVyVHJlZUhvc3Qgd2hpY2ggYWx3YXlzIGV4aXN0cy4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWFQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWREcmF3aW5nQXJlYVByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5OjplbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmxheWVySG9zdERp
ZEZsdXNoTGF5ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWREcmF3
aW5nQXJlYTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2gpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdBcmVhOjpkaWRVcGRhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdBcmVhOjplbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRE
cmF3aW5nQXJlYTo6c2NoZWR1bGVEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6ZGlzcGxheVRpbWVyRmlyZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdBcmVhOjpkaXNwbGF5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6c2hvdWxkUGFpbnRCb3VuZHNSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6YXR0YWNoVmlld092ZXJsYXlHcmFw
aGljc0xheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhLmg6CisKIDIwMTUtMTItMDcgIEd1
c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKICAgICAgICAgW0dUS10gTm90
aWZ5IFdlYkNvcmUgd2hlbiBub3RpZmljYXRpb24gaXMgY2xpY2tlZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3
aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eS5jcHAKaW5kZXggYzg0MmIxYjAwODBh
MGUwNWYyZTljNGRjOGJjNjY2YzE1ODg3OTcwOS4uM2Q2NjE4MjExM2JlZTdmNjkyMWY5YWZjOTg5
ODc1MWI5ZTRjZDlkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdp
bmdBcmVhUHJveHkuY3BwCkBAIC01OCw4ICs1OCw3IEBAIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQ
cm94eTo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5KFdlYlBhZ2VQcm94eSYgd2ViUGFnZVBy
CiAgICAgLCBtX2Rpc2NhcmRCYWNraW5nU3RvcmVUaW1lcihSdW5Mb29wOjpjdXJyZW50KCksIHRo
aXMsICZDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmRpc2NhcmRCYWNraW5nU3RvcmUpCiB7
CiAgICAgLy8gQ29uc3RydWN0IHRoZSBwcm94eSBlYXJseSB0byBhbGxvdyBtZXNzYWdlcyB0byBi
ZSBzZW50IHRvIHRoZSB3ZWIgcHJvY2VzcyB3aGlsZSBBQyBpcyBlbnRlcmVkIHRoZXJlLgotICAg
IGlmICh3ZWJQYWdlUHJveHkucGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5mb3JjZUNvbXBvc2l0
aW5nTW9kZSgpKQotICAgICAgICBtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5ID0gc3Rk
OjptYWtlX3VuaXF1ZTxDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eT4odGhpcyk7CisgICAg
bV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk+KHRoaXMpOwogfQogCiBDb29yZGluYXRlZERyYXdpbmdB
cmVhUHJveHk6On5Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkoKQpAQCAtMzI3LDE0ICszMjYs
MTEgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmUKICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxw
dHI7CiAgICAgbV9sYXllclRyZWVDb250ZXh0ID0gbGF5ZXJUcmVlQ29udGV4dDsKICAgICBtX3dl
YlBhZ2VQcm94eS5lbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVyVHJlZUNvbnRl
eHQpOwotICAgIGlmICghbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAg
bV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk+KHRoaXMpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkRHJh
d2luZ0FyZWFQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRy
YWplY3RvcnlWZWN0b3IpCiB7Ci0gICAgaWYgKG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkpCi0gICAgICAgIG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHktPnNldFZpc2libGVD
b250ZW50c1JlY3QodmlzaWJsZUNvbnRlbnRzUmVjdCwgdHJhamVjdG9yeVZlY3Rvcik7CisgICAg
bV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCh2
aXNpYmxlQ29udGVudHNSZWN0LCB0cmFqZWN0b3J5VmVjdG9yKTsKIH0KIAogdm9pZCBDb29yZGlu
YXRlZERyYXdpbmdBcmVhUHJveHk6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWEu
Y3BwCmluZGV4IGU1NTE3MjgzZjNhM2NmNTkyN2RlOTMwYjNmYmNhZDlkZWE5YjhmODYuLmRhN2Yy
NGE1NWEzMzE5NWFkZWEyOGZkMmUwZDE3OTc5MmFiMjU4NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
RHJhd2luZ0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWEuY3BwCkBAIC01MSw4ICs1
MSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBDb29yZGluYXRlZERyYXdpbmdBcmVhOjp+Q29v
cmRpbmF0ZWREcmF3aW5nQXJlYSgpCiB7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5pbnZhbGlkYXRlKCk7CisgICAgbV9sYXllclRyZWVIb3N0LT5p
bnZhbGlkYXRlKCk7CiB9CiAKIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OkNvb3JkaW5hdGVkRHJh
d2luZ0FyZWEoV2ViUGFnZSYgd2ViUGFnZSwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVy
cyYgcGFyYW1ldGVycykKQEAgLTY1LDEyICs2NCwxMCBAQCBDb29yZGluYXRlZERyYXdpbmdBcmVh
OjpDb29yZGluYXRlZERyYXdpbmdBcmVhKFdlYlBhZ2UmIHdlYlBhZ2UsIGNvbnN0IFdlYlBhZ2VD
cgogICAgICwgbV9pc1BhaW50aW5nRW5hYmxlZCh0cnVlKQogICAgICwgbV9pblVwZGF0ZUJhY2tp
bmdTdG9yZVN0YXRlKGZhbHNlKQogICAgICwgbV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0
b3JlU3RhdGUoZmFsc2UpCi0gICAgLCBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZShmYWxzZSkKICAg
ICAsIG1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXMoZmFsc2UpCiAgICAgLCBt
X2xheWVyVHJlZVN0YXRlSXNGcm96ZW4oZmFsc2UpCiAgICAgLCBtX3dhbnRzVG9FeGl0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoZmFsc2UpCiAgICAgLCBtX2lzUGFpbnRpbmdTdXNwZW5kZWQo
ZmFsc2UpCi0gICAgLCBtX2Rpc3BsYXlUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZDb29y
ZGluYXRlZERyYXdpbmdBcmVhOjpkaXNwbGF5VGltZXJGaXJlZCkKICAgICAsIG1fZXhpdENvbXBv
c2l0aW5nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmQ29vcmRpbmF0ZWREcmF3aW5nQXJl
YTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKQogewogICAgIC8vIEFsd2F5cyB1c2Ug
Y29tcG9zaXRpbmcgaW4gQ29vcmRpbmF0ZWRHcmFwaGljcwpAQCAtODUsMTMgKzgyLDggQEAgdm9p
ZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rpc3BsYXkoKQogICAgIGlmICghbV9p
c1BhaW50aW5nRW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fbGF5ZXJUcmVl
SG9zdCkgewotICAgICAgICBBU1NFUlQobV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkpOwotICAgICAg
ICBtX2xheWVyVHJlZUhvc3QtPnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QobV93
ZWJQYWdlLmJvdW5kcygpKTsKKyAgICBBU1NFUlQobV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkpOwor
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXko
KTsKIH0KIAogdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rpc3BsYXlJblJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTk5LDIwICs5MSw4IEBAIHZvaWQgQ29vcmRpbmF0
ZWREcmF3aW5nQXJlYTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qp
CiAgICAgaWYgKCFtX2lzUGFpbnRpbmdFbmFibGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobV9sYXllclRyZWVIb3N0KSB7Ci0gICAgICAgIEFTU0VSVChtX2RpcnR5UmVnaW9uLmlzRW1w
dHkoKSk7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRz
TmVlZERpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJ
bnRSZWN0IGRpcnR5UmVjdCA9IHJlY3Q7Ci0gICAgZGlydHlSZWN0LmludGVyc2VjdChtX3dlYlBh
Z2UuYm91bmRzKCkpOwotCi0gICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fZGlydHlSZWdpb24udW5pdGUoZGlydHlSZWN0KTsKLSAgICBzY2hlZHVs
ZURpc3BsYXkoKTsKKyAgICBBU1NFUlQobV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkpOworICAgIG1f
bGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3Qo
cmVjdCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2Nyb2xsKGNvbnN0IElu
dFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQpAQCAtMTIwLDYz
ICsxMDAsMTYgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzY3JvbGwoY29uc3QgSW50
UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2MKICAgICBpZiAoIW1faXNQYWludGlu
Z0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpIHsK
LSAgICAgICAgQVNTRVJUKG1fc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOwotICAgICAgICBBU1NFUlQo
bV9zY3JvbGxPZmZzZXQuaXNFbXB0eSgpKTsKLSAgICAgICAgQVNTRVJUKG1fZGlydHlSZWdpb24u
aXNFbXB0eSgpKTsKLQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNjcm9sbE5vbkNvbXBvc2l0
ZWRDb250ZW50cyhzY3JvbGxSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChzY3JvbGxSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Nj
cm9sbFJlY3QuaXNFbXB0eSgpICYmIHNjcm9sbFJlY3QgIT0gbV9zY3JvbGxSZWN0KSB7Ci0gICAg
ICAgIHVuc2lnbmVkIHNjcm9sbEFyZWEgPSBzY3JvbGxSZWN0LndpZHRoKCkgKiBzY3JvbGxSZWN0
LmhlaWdodCgpOwotICAgICAgICB1bnNpZ25lZCBjdXJyZW50U2Nyb2xsQXJlYSA9IG1fc2Nyb2xs
UmVjdC53aWR0aCgpICogbV9zY3JvbGxSZWN0LmhlaWdodCgpOworICAgIEFTU0VSVChtX3Njcm9s
bFJlY3QuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9zY3JvbGxPZmZzZXQuaXNFbXB0eSgpKTsK
KyAgICBBU1NFUlQobV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkpOwogCi0gICAgICAgIGlmIChjdXJy
ZW50U2Nyb2xsQXJlYSA+PSBzY3JvbGxBcmVhKSB7Ci0gICAgICAgICAgICAvLyBUaGUgcmVjdCBi
ZWluZyBzY3JvbGxlZCBpcyBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgcmVjdCB3ZSdkIGxpa2Ug
dG8gc2Nyb2xsLgotICAgICAgICAgICAgLy8gR28gYWhlYWQgYW5kIGp1c3QgaW52YWxpZGF0ZSB0
aGUgc2Nyb2xsIHJlY3QuCi0gICAgICAgICAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3Qoc2Nyb2xs
UmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBKdXN0
IHJlcGFpbnQgdGhlIGVudGlyZSBjdXJyZW50IHNjcm9sbCByZWN0LCB3ZSdsbCBzY3JvbGwgdGhl
IG5ldyByZWN0IGluc3RlYWQuCi0gICAgICAgIHNldE5lZWRzRGlzcGxheUluUmVjdChtX3Njcm9s
bFJlY3QpOwotICAgICAgICBtX3Njcm9sbFJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgICAgIG1fc2Ny
b2xsT2Zmc2V0ID0gSW50U2l6ZSgpOwotICAgIH0KLQotICAgIC8vIEdldCB0aGUgcGFydCBvZiB0
aGUgZGlydHkgcmVnaW9uIHRoYXQgaXMgaW4gdGhlIHNjcm9sbCByZWN0LgotICAgIFJlZ2lvbiBk
aXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCA9IGludGVyc2VjdChzY3JvbGxSZWN0LCBtX2RpcnR5UmVn
aW9uKTsKLSAgICBpZiAoIWRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0LmlzRW1wdHkoKSkgewotICAg
ICAgICAvLyBUaGVyZSBhcmUgcGFydHMgb2YgdGhlIGRpcnR5IHJlZ2lvbiB0aGF0IGFyZSBpbnNp
ZGUgdGhlIHNjcm9sbCByZWN0LgotICAgICAgICAvLyBXZSBuZWVkIHRvIHN1YnRyYWN0IHRoZW0g
ZnJvbSB0aGUgcmVnaW9uLCBtb3ZlIHRoZW0gYW5kIHJlLWFkZCB0aGVtLgotICAgICAgICBtX2Rp
cnR5UmVnaW9uLnN1YnRyYWN0KHNjcm9sbFJlY3QpOwotCi0gICAgICAgIC8vIE1vdmUgdGhlIGRp
cnR5IHBhcnRzLgotICAgICAgICBSZWdpb24gbW92ZWREaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCA9
IGludGVyc2VjdCh0cmFuc2xhdGUoZGlydHlSZWdpb25JblNjcm9sbFJlY3QsIHNjcm9sbERlbHRh
KSwgc2Nyb2xsUmVjdCk7Ci0KLSAgICAgICAgLy8gQW5kIGFkZCB0aGVtIGJhY2suCi0gICAgICAg
IG1fZGlydHlSZWdpb24udW5pdGUobW92ZWREaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCk7Ci0gICAg
fQotCi0gICAgLy8gQ29tcHV0ZSB0aGUgc2Nyb2xsIHJlcGFpbnQgcmVnaW9uLgotICAgIFJlZ2lv
biBzY3JvbGxSZXBhaW50UmVnaW9uID0gc3VidHJhY3Qoc2Nyb2xsUmVjdCwgdHJhbnNsYXRlKHNj
cm9sbFJlY3QsIHNjcm9sbERlbHRhKSk7Ci0KLSAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKHNjcm9s
bFJlcGFpbnRSZWdpb24pOwotICAgIHNjaGVkdWxlRGlzcGxheSgpOwotCi0gICAgbV9zY3JvbGxS
ZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICBtX3Njcm9sbE9mZnNldCArPSBzY3JvbGxEZWx0YTsKKyAg
ICBtX2xheWVyVHJlZUhvc3QtPnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhzY3JvbGxSZWN0
KTsKIH0KIAogdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpwYWdlQmFja2dyb3VuZFRyYW5z
cGFyZW5jeUNoYW5nZWQoKQogewotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+cGFnZUJhY2tncm91bmRUcmFuc3BhcmVuY3lDaGFuZ2VkKCk7CisgICAg
bV9sYXllclRyZWVIb3N0LT5wYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKTsKIH0K
IAogdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVu
KGJvb2wgaXNGcm96ZW4pCkBAIC0xODYsOCArMTE5LDcgQEAgdm9pZCBDb29yZGluYXRlZERyYXdp
bmdBcmVhOjpzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wgaXNGcm96ZW4pCiAKICAgICBt
X2xheWVyVHJlZVN0YXRlSXNGcm96ZW4gPSBpc0Zyb3plbjsKIAotICAgIGlmIChtX2xheWVyVHJl
ZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdF
bmFibGVkKCFpc0Zyb3plbik7CisgICAgbV9sYXllclRyZWVIb3N0LT5zZXRMYXllckZsdXNoU2No
ZWR1bGluZ0VuYWJsZWQoIWlzRnJvemVuKTsKIAogICAgIGlmIChpc0Zyb3plbikKICAgICAgICAg
bV9leGl0Q29tcG9zaXRpbmdUaW1lci5zdG9wKCk7CkBAIC0yMDEsMjggKzEzMywyMiBAQCB2b2lk
IENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmZvcmNlUmVwYWludCgpCiAKICAgICBtX3dlYlBhZ2Uu
bGF5b3V0SWZOZWVkZWQoKTsKIAotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpIHsKLSAgICAgICAg
Ly8gRklYTUU6IFdlIG5lZWQgdG8gZG8gdGhlIHNhbWUgd29yayBhcyB0aGUgbGF5ZXJIb3N0RGlk
Rmx1c2hMYXllcnMgZnVuY3Rpb24gaGVyZSwKLSAgICAgICAgLy8gYnV0IGNsZWFybHkgaXQgZG9l
c24ndCBtYWtlIHNlbnNlIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhhdCBuYW1lLgotICAg
ICAgICAvLyBDb25zaWRlciByZWZhY3RvcmluZyBhbmQgcmVuYW1pbmcgaXQuCi0gICAgICAgIGlm
IChtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2VzKQotICAgICAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5mb3JjZVJlcGFpbnQoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAvLyBDYWxsIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goZmFs
c2UpIGhlcmUgdG8KLSAgICAgICAgICAgIC8vIHByZXZlbnQgbGF5ZXJIb3N0RGlkRmx1c2hMYXll
cnMoKSBmcm9tIGJlaW5nIGNhbGxlZCBhIHNlY29uZCB0aW1lLgotICAgICAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5zZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGZh
bHNlKTsKLSAgICAgICAgICAgIGxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGRvIHRoZSBzYW1lIHdv
cmsgYXMgdGhlIGxheWVySG9zdERpZEZsdXNoTGF5ZXJzIGZ1bmN0aW9uIGhlcmUsCisgICAgLy8g
YnV0IGNsZWFybHkgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHdp
dGggdGhhdCBuYW1lLgorICAgIC8vIENvbnNpZGVyIHJlZmFjdG9yaW5nIGFuZCByZW5hbWluZyBp
dC4KKyAgICBpZiAobV9jb21wb3NpdGluZ0FjY29yZGluZ1RvUHJveHlNZXNzYWdlcykKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5mb3JjZVJlcGFpbnQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
Ly8gQ2FsbCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNl
KSBoZXJlIHRvCisgICAgICAgIC8vIHByZXZlbnQgbGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKSBm
cm9tIGJlaW5nIGNhbGxlZCBhIHNlY29uZCB0aW1lLgorICAgICAgICBtX2xheWVyVHJlZUhvc3Qt
PnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpOworICAg
ICAgICBsYXllckhvc3REaWRGbHVzaExheWVycygpOwogICAgIH0KLQotICAgIG1faXNXYWl0aW5n
Rm9yRGlkVXBkYXRlID0gZmFsc2U7Ci0gICAgZGlzcGxheSgpOwogfQogCiBib29sIENvb3JkaW5h
dGVkRHJhd2luZ0FyZWE6OmZvcmNlUmVwYWludEFzeW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7
Ci0gICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdCAmJiBtX2xheWVyVHJlZUhvc3QtPmZvcmNlUmVw
YWludEFzeW5jKGNhbGxiYWNrSUQpOworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3QtPmZvcmNl
UmVwYWludEFzeW5jKGNhbGxiYWNrSUQpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0Fy
ZWE6OnNldFBhaW50aW5nRW5hYmxlZChib29sIHBhaW50aW5nRW5hYmxlZCkKQEAgLTI0Miw4ICsx
NjgsNiBAQCB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6Om1haW5GcmFtZUNvbnRlbnRTaXpl
Q2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJgogCiB2b2lkIENvb3JkaW5hdGVkRHJhd2lu
Z0FyZWE6OmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCkKIHsKLSAgICBBU1NFUlQobV9sYXllclRy
ZWVIb3N0KTsKLQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+Zm9yY2VSZXBhaW50KCk7CiAKICAgICBp
ZiAobV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgJiYgIWV4aXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZVBlbmRpbmcoKSkgewpAQCAtMjUxLDkgKzE3NSw2IEBAIHZvaWQg
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIEFTU0VSVCghbV9jb21wb3NpdGluZ0FjY29yZGluZ1RvUHJveHlNZXNzYWdl
cyk7CiAgICAgaWYgKCFleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVQZW5kaW5nKCkpIHsK
ICAgICAgICAgbV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJveHk6OkVudGVy
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobV9iYWNraW5nU3RvcmVTdGF0ZUlELCBtX2xheWVy
VHJlZUhvc3QtPmxheWVyVHJlZUNvbnRleHQoKSkpOwpAQCAtMjYzLDEwICsxODQsNyBAQCB2b2lk
IENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCkKIAogR3Jh
cGhpY3NMYXllckZhY3RvcnkqIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmdyYXBoaWNzTGF5ZXJG
YWN0b3J5KCkKIHsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICByZXR1cm4gbV9s
YXllclRyZWVIb3N0LT5ncmFwaGljc0xheWVyRmFjdG9yeSgpOwotCi0gICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdC0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKTsKIH0KIAog
dm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFw
aGljc0xheWVyKiBncmFwaGljc0xheWVyKQpAQCAtMjc2LDMyICsxOTQsMjEgQEAgdm9pZCBDb29y
ZGluYXRlZERyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFwaGljc0xheWVy
KiBncmFwaGljc0xheWUKICAgICAvLyB0aGF0IHRha2VzIHRoZSBuZXcgc3RhdGUuCiAKICAgICBp
ZiAoZ3JhcGhpY3NMYXllcikgewotICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkgewotICAg
ICAgICAgICAgLy8gV2UncmUgYWN0dWFsbHkgZW50ZXJpbmcgYWNjZWxlcmF0ZWQgY29tcG9zaXRp
bmcgbW9kZS4KLSAgICAgICAgICAgIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoZ3Jh
cGhpY3NMYXllcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSdyZSBhbHJl
YWR5IGluIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUsIGJ1dCB0aGUgcm9vdCBjb21wb3Np
dGluZyBsYXllciBjaGFuZ2VkLgorICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IGluIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nIG1vZGUsIGJ1dCB0aGUgcm9vdCBjb21wb3NpdGluZyBsYXllciBjaGFu
Z2VkLgogCi0gICAgICAgICAgICBtX2V4aXRDb21wb3NpdGluZ1RpbWVyLnN0b3AoKTsKLSAgICAg
ICAgICAgIG1fd2FudHNUb0V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSA9IGZhbHNlOwot
Ci0gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IHNlbnQgdGhlIEVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUgbWVzc2FnZSwgbWFrZSBzdXJlIHRoYXQgdGhlCi0gICAgICAgICAgICAv
LyBsYXllciB0cmVlIGhvc3QgY2FsbHMgdXMgYmFjayBhZnRlciB0aGUgbmV4dCBsYXllciBmbHVz
aCBzbyB3ZSBjYW4gc2VuZCBpdCB0aGVuLgotICAgICAgICAgICAgaWYgKCFtX2NvbXBvc2l0aW5n
QWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2VzKQotICAgICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaCh0cnVlKTsKKyAg
ICAgICAgbV9leGl0Q29tcG9zaXRpbmdUaW1lci5zdG9wKCk7CisgICAgICAgIG1fd2FudHNUb0V4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSA9IGZhbHNlOwogCi0gICAgICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldFJvb3RDb21wb3NpdGluZ0xheWVyKGdyYXBoaWNzTGF5ZXIpOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoMCk7CisgICAg
ICAgIC8vIElmIHdlIGhhdmVuJ3Qgc2VudCB0aGUgRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZSBtZXNzYWdlLCBtYWtlIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgLy8gbGF5ZXIgdHJlZSBo
b3N0IGNhbGxzIHVzIGJhY2sgYWZ0ZXIgdGhlIG5leHQgbGF5ZXIgZmx1c2ggc28gd2UgY2FuIHNl
bmQgaXQgdGhlbi4KKyAgICAgICAgaWYgKCFtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1l
c3NhZ2VzKQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRTaG91bGROb3RpZnlBZnRl
ck5leHRTY2hlZHVsZWRMYXllckZsdXNoKHRydWUpOwogICAgIH0KKyAgICBtX2xheWVyVHJlZUhv
c3QtPnNldFJvb3RDb21wb3NpdGluZ0xheWVyKGdyYXBoaWNzTGF5ZXIpOwogfQogCiB2b2lkIENv
b3JkaW5hdGVkRHJhd2luZ0FyZWE6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkKIHsK
LSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgcmV0dXJuOwogICAgIG1fbGF5ZXJU
cmVlSG9zdC0+c2NoZWR1bGVMYXllckZsdXNoKCk7CiB9CiAKQEAgLTMyNSwxMiArMjMyLDkgQEAg
dm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjp1cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50
NjRfdCBzdGF0ZUlELCBib29sIHJlc3AKICAgICAgICAgbV93ZWJQYWdlLmxheW91dElmTmVlZGVk
KCk7CiAgICAgICAgIG1fd2ViUGFnZS5zY3JvbGxNYWluRnJhbWVJZk5vdEF0TWF4U2Nyb2xsUG9z
aXRpb24oc2Nyb2xsT2Zmc2V0KTsKIAotICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7Ci0g
ICAgICAgICAgICAvLyBDb29yZGluYXRlZCBHcmFwaGljcyBzZXRzIHRoZSBzaXplIG9mIHRoZSBy
b290IGxheWVyIHRvIGNvbnRlbnRzIHNpemUuCi0gICAgICAgICAgICBpZiAoIW1fd2ViUGFnZS51
c2VGaXhlZExheW91dCgpKQotICAgICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2l6ZURp
ZENoYW5nZShtX3dlYlBhZ2Uuc2l6ZSgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBt
X2RpcnR5UmVnaW9uID0gbV93ZWJQYWdlLmJvdW5kcygpOworICAgICAgICAvLyBDb29yZGluYXRl
ZCBHcmFwaGljcyBzZXRzIHRoZSBzaXplIG9mIHRoZSByb290IGxheWVyIHRvIGNvbnRlbnRzIHNp
emUuCisgICAgICAgIGlmICghbV93ZWJQYWdlLnVzZUZpeGVkTGF5b3V0KCkpCisgICAgICAgICAg
ICBtX2xheWVyVHJlZUhvc3QtPnNpemVEaWRDaGFuZ2UobV93ZWJQYWdlLnNpemUoKSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgQVNTRVJUKHNpemUgPT0gbV93ZWJQYWdlLnNpemUoKSk7CiAgICAg
ICAgIGlmICghbV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpIHsKQEAgLTM0
MCwxMyArMjQ0LDYgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjp1cGRhdGVCYWNraW5n
U3RvcmVTdGF0ZSh1aW50NjRfdCBzdGF0ZUlELCBib29sIHJlc3AKICAgICAgICAgfQogICAgIH0K
IAotICAgIC8vIFRoZSBVSSBwcm9jZXNzIGhhcyB1cGRhdGVkIHRvIGEgbmV3IGJhY2tpbmcgc3Rv
cmUgc3RhdGUuIEFueSBVcGRhdGUgbWVzc2FnZXMgd2Ugc2VudCBiZWZvcmUKLSAgICAvLyB0aGlz
IHBvaW50IHdpbGwgYmUgaWdub3JlZC4gV2Ugd2FpdCB0byBzZXQgdGhpcyB0byBmYWxzZSB1bnRp
bCBhZnRlciB1cGRhdGluZyB0aGUgcGFnZSdzCi0gICAgLy8gc2l6ZSBzbyB0aGF0IGFueSBkaXNw
bGF5cyB0cmlnZ2VyZWQgYnkgdGhlIHJlbGF5b3V0IHdpbGwgYmUgaWdub3JlZC4gSWYgd2UncmUg
c3VwcG9zZWQgdG8KLSAgICAvLyByZXNwb25kIHRvIHRoZSBVcGRhdGVCYWNraW5nU3RvcmVTdGF0
ZSBtZXNzYWdlIGltbWVkaWF0ZWx5LCB3ZSdsbCBkbyBhIGRpc3BsYXkgYW55d2F5IGluCi0gICAg
Ly8gc2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlOyBvdGhlcndpc2Ugd2Ugc2hvdWxkbid0
IGRvIG9uZSByaWdodCBub3cuCi0gICAgbV9pc1dhaXRpbmdGb3JEaWRVcGRhdGUgPSBmYWxzZTsK
LQogICAgIGlmIChyZXNwb25kSW1tZWRpYXRlbHkpIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRv
IHJlc3VtZSBwYWludGluZyBpZiB3ZSdyZSBzdXBwb3NlZCB0byByZXNwb25kIGltbWVkaWF0ZWx5
LCBvdGhlcndpc2Ugd2UnbGwganVzdAogICAgICAgICAvLyBzZW5kIGJhY2sgYW4gZW1wdHkgVXBk
YXRlSW5mbyBzdHJ1Y3QuCkBAIC0zNjEsMzMgKzI1OCwyNSBAQCB2b2lkIENvb3JkaW5hdGVkRHJh
d2luZ0FyZWE6OnVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IHN0YXRlSUQsIGJvb2wg
cmVzcAogCiB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OnNlbmREaWRVcGRhdGVCYWNraW5n
U3RvcmVTdGF0ZSgpCiB7Ci0gICAgQVNTRVJUKCFtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZSk7CiAg
ICAgQVNTRVJUKG1fc2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKTsKIAogICAg
IG1fc2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlID0gZmFsc2U7CiAKICAgICBV
cGRhdGVJbmZvIHVwZGF0ZUluZm87CiAKLSAgICBpZiAoIW1faXNQYWludGluZ1N1c3BlbmRlZCAm
JiAhbV9sYXllclRyZWVIb3N0KQotICAgICAgICBkaXNwbGF5KHVwZGF0ZUluZm8pOwotCiAgICAg
TGF5ZXJUcmVlQ29udGV4dCBsYXllclRyZWVDb250ZXh0OwogCi0gICAgaWYgKG1faXNQYWludGlu
Z1N1c3BlbmRlZCB8fCBtX2xheWVyVHJlZUhvc3QpIHsKLSAgICAgICAgdXBkYXRlSW5mby52aWV3
U2l6ZSA9IG1fd2ViUGFnZS5zaXplKCk7Ci0gICAgICAgIHVwZGF0ZUluZm8uZGV2aWNlU2NhbGVG
YWN0b3IgPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICB1
cGRhdGVJbmZvLnZpZXdTaXplID0gbV93ZWJQYWdlLnNpemUoKTsKKyAgICB1cGRhdGVJbmZvLmRl
dmljZVNjYWxlRmFjdG9yID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9y
KCk7CiAKLSAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgewotICAgICAgICAgICAgbGF5ZXJU
cmVlQ29udGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+bGF5ZXJUcmVlQ29udGV4dCgpOworICAgIGxh
eWVyVHJlZUNvbnRleHQgPSBtX2xheWVyVHJlZUhvc3QtPmxheWVyVHJlZUNvbnRleHQoKTsKIAot
ICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgbGF5ZXIgdHJlZSBob3N0IHRvIG5vdGlm
eSBhZnRlciB0aGUgbmV4dCBzY2hlZHVsZWQKLSAgICAgICAgICAgIC8vIGxheWVyIGZsdXNoIGJl
Y2F1c2UgdGhhdCBtaWdodCBlbmQgdXAgc2VuZGluZyBhbiBFbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlCi0gICAgICAgICAgICAvLyBtZXNzYWdlIGJhY2sgdG8gdGhlIFVJIHByb2Nlc3Ms
IGJ1dCB0aGUgdXBkYXRlZCBsYXllciB0cmVlIGNvbnRleHQKLSAgICAgICAgICAgIC8vIHdpbGwg
YmUgc2VudCBiYWNrIGluIHRoZSBEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlLgot
ICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hl
ZHVsZWRMYXllckZsdXNoKGZhbHNlKTsKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Zm9y
Y2VSZXBhaW50KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUg
bGF5ZXIgdHJlZSBob3N0IHRvIG5vdGlmeSBhZnRlciB0aGUgbmV4dCBzY2hlZHVsZWQKKyAgICAv
LyBsYXllciBmbHVzaCBiZWNhdXNlIHRoYXQgbWlnaHQgZW5kIHVwIHNlbmRpbmcgYW4gRW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZQorICAgIC8vIG1lc3NhZ2UgYmFjayB0byB0aGUgVUkg
cHJvY2VzcywgYnV0IHRoZSB1cGRhdGVkIGxheWVyIHRyZWUgY29udGV4dAorICAgIC8vIHdpbGwg
YmUgc2VudCBiYWNrIGluIHRoZSBEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlLgor
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5
ZXJGbHVzaChmYWxzZSk7CisgICAgbV9sYXllclRyZWVIb3N0LT5mb3JjZVJlcGFpbnQoKTsKIAog
ICAgIG1fd2ViUGFnZS5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVC
YWNraW5nU3RvcmVTdGF0ZShtX2JhY2tpbmdTdG9yZVN0YXRlSUQsIHVwZGF0ZUluZm8sIGxheWVy
VHJlZUNvbnRleHQpKTsKICAgICBtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2Vz
ID0gIWxheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpOwpAQCAtMzk1LDI2ICsyODQsMTUgQEAgdm9p
ZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUo
KQogCiB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZSgpCiB7Ci0gICAgLy8g
V2UgbWlnaHQgZ2V0IGRpZFVwZGF0ZSBtZXNzYWdlcyBmcm9tIHRoZSBVSSBwcm9jZXNzIGV2ZW4g
YWZ0ZXIgd2UndmUKLSAgICAvLyBlbnRlcmVkIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUu
IElnbm9yZSB0aGVtLgotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlID0gZmFsc2U7Ci0KLSAgICAvLyBEaXNwbGF5
IGlmIG5lZWRlZC4gV2UgY2FsbCBkaXNwbGF5VGltZXJGaXJlZCBoZXJlIHNpbmNlIGl0IHdpbGwg
dGhyb3R0bGUgdXBkYXRlcyB0byA2MGZwcy4KLSAgICBkaXNwbGF5VGltZXJGaXJlZCgpOwogfQog
CiB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OnN1c3BlbmRQYWludGluZygpCiB7CiAgICAg
QVNTRVJUKCFtX2lzUGFpbnRpbmdTdXNwZW5kZWQpOwogCi0gICAgaWYgKG1fbGF5ZXJUcmVlSG9z
dCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5wYXVzZVJlbmRlcmluZygpOworICAgIG1fbGF5
ZXJUcmVlSG9zdC0+cGF1c2VSZW5kZXJpbmcoKTsKIAogICAgIG1faXNQYWludGluZ1N1c3BlbmRl
ZCA9IHRydWU7Ci0gICAgbV9kaXNwbGF5VGltZXIuc3RvcCgpOwogCiAgICAgbV93ZWJQYWdlLmNv
cmVQYWdlKCktPnN1c3BlbmRTY3JpcHRlZEFuaW1hdGlvbnMoKTsKIH0KQEAgLTQyNyw4ICszMDUs
NyBAQCB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OnJlc3VtZVBhaW50aW5nKCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+cmVzdW1lUmVuZGVyaW5nKCk7CisgICAgbV9sYXllclRyZWVIb3N0LT5y
ZXN1bWVSZW5kZXJpbmcoKTsKIAogICAgIG1faXNQYWludGluZ1N1c3BlbmRlZCA9IGZhbHNlOwog
CkBAIC00NDMsOCArMzIwLDYgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjplbnRlckFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKEdyYXBoaWNzTGF5ZXIqIGdyYXAKICAgICBtX2V4aXRD
b21wb3NpdGluZ1RpbWVyLnN0b3AoKTsKICAgICBtX3dhbnRzVG9FeGl0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUgPSBmYWxzZTsKIAotICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0KTsKLQog
ICAgIG1fbGF5ZXJUcmVlSG9zdCA9IExheWVyVHJlZUhvc3Q6OmNyZWF0ZSgmbV93ZWJQYWdlKTsK
ICAgICBpZiAoIW1faW5VcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSkKICAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5zZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKHRydWUp
OwpAQCAtNDU1LDggKzMzMCw2IEBAIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShHcmFwaGljc0xheWVyKiBncmFwCiAgICAgbV9kaXJ0
eVJlZ2lvbiA9IFJlZ2lvbigpOwogICAgIG1fc2Nyb2xsUmVjdCA9IEludFJlY3QoKTsKICAgICBt
X3Njcm9sbE9mZnNldCA9IEludFNpemUoKTsKLSAgICBtX2Rpc3BsYXlUaW1lci5zdG9wKCk7Ci0g
ICAgbV9pc1dhaXRpbmdGb3JEaWRVcGRhdGUgPSBmYWxzZTsKIH0KIAogdm9pZCBDb29yZGluYXRl
ZERyYXdpbmdBcmVhOjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVTb29uKCkKQEAgLTQ3
MiwxNDYgKzM0NSwxMCBAQCB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmV4aXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZVNvb24oKQogICAgIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuc3Rh
cnRPbmVTaG90KDApOwogfQogCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OnNjaGVkdWxl
RGlzcGxheSgpCi17Ci0gICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3QpOwotCi0gICAgaWYgKG1f
aXNXYWl0aW5nRm9yRGlkVXBkYXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pc1Bh
aW50aW5nU3VzcGVuZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kaXJ0eVJlZ2lv
bi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2Rpc3BsYXlUaW1lci5p
c0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Rpc3BsYXlUaW1lci5zdGFydE9u
ZVNob3QoMCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6ZGlzcGxheVRpbWVy
RmlyZWQoKQotewotICAgIGRpc3BsYXkoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdB
cmVhOjpkaXNwbGF5KCkKLXsKLSAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdCk7Ci0gICAgQVNT
RVJUKCFtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZSk7Ci0gICAgQVNTRVJUKCFtX2luVXBkYXRlQmFj
a2luZ1N0b3JlU3RhdGUpOwotCi0gICAgaWYgKG1faXNQYWludGluZ1N1c3BlbmRlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGlydHlSZWdpb24uaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUp
IHsKLSAgICAgICAgc2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBVcGRhdGVJbmZvIHVwZGF0ZUluZm87Ci0gICAgZGlzcGxheSh1
cGRhdGVJbmZvKTsKLQotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpIHsKLSAgICAgICAgLy8gVGhl
IGNhbGwgdG8gdXBkYXRlIGNhdXNlZCBsYXlvdXQgd2hpY2ggdHVybmVkIG9uIGFjY2VsZXJhdGVk
IGNvbXBvc2l0aW5nLgotICAgICAgICAvLyBEb24ndCBzZW5kIGFuIFVwZGF0ZSBtZXNzYWdlIGlu
IHRoaXMgY2FzZS4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fd2ViUGFnZS5zZW5k
KE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpVcGRhdGUobV9iYWNraW5nU3RvcmVTdGF0ZUlE
LCB1cGRhdGVJbmZvKSk7Ci0gICAgbV9pc1dhaXRpbmdGb3JEaWRVcGRhdGUgPSB0cnVlOwotfQot
Ci1zdGF0aWMgYm9vbCBzaG91bGRQYWludEJvdW5kc1JlY3QoY29uc3QgSW50UmVjdCYgYm91bmRz
LCBjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzKQotewotICAgIGNvbnN0IHNpemVfdCByZWN0
VGhyZXNob2xkID0gMTA7Ci0gICAgY29uc3QgZG91YmxlIHdhc3RlZFNwYWNlVGhyZXNob2xkID0g
MC43NTsKLQotICAgIGlmIChyZWN0cy5zaXplKCkgPD0gMSB8fCByZWN0cy5zaXplKCkgPiByZWN0
VGhyZXNob2xkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEF0dGVtcHQgdG8gZ3Vl
c3Mgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIHVzZSB0aGUgcmVnaW9uIGJvdW5kcyByZWN0IG9y
IHRoZSBpbmRpdmlkdWFsIHJlY3RzLgotICAgIC8vIFdlIGRvIHRoaXMgYnkgY29tcHV0aW5nIHRo
ZSBwZXJjZW50YWdlIG9mICJ3YXN0ZWQgc3BhY2UiIGluIHRoZSBib3VuZHMuIElmIHRoYXQgd2Fz
dGVkIHNwYWNlCi0gICAgLy8gaXMgdG9vIGxhcmdlLCB0aGVuIHdlIHdpbGwgZG8gaW5kaXZpZHVh
bCByZWN0IHBhaW50aW5nIGluc3RlYWQuCi0gICAgdW5zaWduZWQgYm91bmRzQXJlYSA9IGJvdW5k
cy53aWR0aCgpICogYm91bmRzLmhlaWdodCgpOwotICAgIHVuc2lnbmVkIHJlY3RzQXJlYSA9IDA7
Ci0gICAgZm9yIChhdXRvJiByZWN0IDogcmVjdHMpCi0gICAgICAgIHJlY3RzQXJlYSArPSByZWN0
LndpZHRoKCkgKiByZWN0LmhlaWdodCgpOwotCi0gICAgZG91YmxlIHdhc3RlZFNwYWNlID0gMSAt
IChzdGF0aWNfY2FzdDxkb3VibGU+KHJlY3RzQXJlYSkgLyBib3VuZHNBcmVhKTsKLQotICAgIHJl
dHVybiB3YXN0ZWRTcGFjZSA8PSB3YXN0ZWRTcGFjZVRocmVzaG9sZDsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZERyYXdpbmdBcmVhOjpkaXNwbGF5KFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0g
ICAgQVNTRVJUKCFtX2lzUGFpbnRpbmdTdXNwZW5kZWQpOwotICAgIEFTU0VSVCghbV9sYXllclRy
ZWVIb3N0KTsKLSAgICBBU1NFUlQoIW1fd2ViUGFnZS5zaXplKCkuaXNFbXB0eSgpKTsKLQotICAg
IG1fd2ViUGFnZS5sYXlvdXRJZk5lZWRlZCgpOwotCi0gICAgLy8gVGhlIGxheW91dCBtYXkgaGF2
ZSBwdXQgdGhlIHBhZ2UgaW50byBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLiBJZiB0aGUg
TGF5ZXJUcmVlSG9zdCBpcwotICAgIC8vIGluIGNoYXJnZSBvZiBkaXNwbGF5aW5nLCB3ZSBoYXZl
IG5vdGhpbmcgbW9yZSB0byBkby4KLSAgICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB1cGRhdGVJbmZvLnZpZXdTaXplID0gbV93ZWJQYWdlLnNpemUoKTsKLSAg
ICB1cGRhdGVJbmZvLmRldmljZVNjYWxlRmFjdG9yID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRl
dmljZVNjYWxlRmFjdG9yKCk7Ci0KLSAgICBJbnRSZWN0IGJvdW5kcyA9IG1fZGlydHlSZWdpb24u
Ym91bmRzKCk7Ci0gICAgQVNTRVJUKG1fd2ViUGFnZS5ib3VuZHMoKS5jb250YWlucyhib3VuZHMp
KTsKLQotICAgIEludFNpemUgYml0bWFwU2l6ZSA9IGJvdW5kcy5zaXplKCk7Ci0gICAgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IgPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKTsKLSAgICBiaXRtYXBTaXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJl
YWJsZShiaXRtYXBTaXplLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwotICAgIGlm
ICghYml0bWFwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWJpdG1hcC0+Y3JlYXRlSGFu
ZGxlKHVwZGF0ZUluZm8uYml0bWFwSGFuZGxlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVj
dG9yPEludFJlY3Q+IHJlY3RzID0gbV9kaXJ0eVJlZ2lvbi5yZWN0cygpOwotCi0gICAgaWYgKHNo
b3VsZFBhaW50Qm91bmRzUmVjdChib3VuZHMsIHJlY3RzKSkgewotICAgICAgICByZWN0cy5jbGVh
cigpOwotICAgICAgICByZWN0cy5hcHBlbmQoYm91bmRzKTsKLSAgICB9Ci0KLSAgICB1cGRhdGVJ
bmZvLnNjcm9sbFJlY3QgPSBtX3Njcm9sbFJlY3Q7Ci0gICAgdXBkYXRlSW5mby5zY3JvbGxPZmZz
ZXQgPSBtX3Njcm9sbE9mZnNldDsKLQotICAgIG1fZGlydHlSZWdpb24gPSBSZWdpb24oKTsKLSAg
ICBtX3Njcm9sbFJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgbV9zY3JvbGxPZmZzZXQgPSBJbnRTaXpl
KCk7Ci0KLSAgICBhdXRvIGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3ND
b250ZXh0KCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5hcHBseURldmljZVNjYWxlRmFjdG9yKGRl
dmljZVNjYWxlRmFjdG9yKTsKLQotICAgIHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcyA9IGJv
dW5kczsKLQotICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1ib3VuZHMueCgpLCAtYm91
bmRzLnkoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0cykgewotICAgICAgICBtX3dl
YlBhZ2UuZHJhd1JlY3QoKmdyYXBoaWNzQ29udGV4dCwgcmVjdCk7Ci0gICAgICAgIHVwZGF0ZUlu
Zm8udXBkYXRlUmVjdHMuYXBwZW5kKHJlY3QpOwotICAgIH0KLQotICAgIC8vIExheW91dCBjYW4g
dHJpZ2dlciBtb3JlIGNhbGxzIHRvIHNldE5lZWRzRGlzcGxheSBhbmQgd2UgZG9uJ3Qgd2FudCB0
byBwcm9jZXNzIHRoZW0KLSAgICAvLyB1bnRpbCB0aGUgVUkgcHJvY2VzcyBoYXMgcGFpbnRlZCB0
aGUgdXBkYXRlLCBzbyB3ZSBzdG9wIHRoZSB0aW1lciBoZXJlLgotICAgIG1fZGlzcGxheVRpbWVy
LnN0b3AoKTsKLX0KLQogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19NVUxUSVBST0NFU1Mp
CiB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmRpZFJlY2VpdmVDb29yZGluYXRlZExheWVy
VHJlZUhvc3RNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdl
RGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPmRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkUmVjZWl2ZUNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAj
ZW5kaWYKIApAQCAtNjMwLDkgKzM2Nyw2IEBAIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6
YXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiBmcmFtCiAgICAg
aWYgKCFmcmFtZS0+aXNNYWluRnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFt
X2xheWVyVHJlZUhvc3QpCi0gICAgICAgIHJldHVybjsKLQogICAgIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdCogY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0ID0gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0Kj4obV9sYXllclRyZWVIb3N0LmdldCgpKTsKICAgICBjb29yZGluYXRl
ZExheWVyVHJlZUhvc3QtPnNldFZpZXdPdmVybGF5Um9vdExheWVyKHZpZXdPdmVybGF5Um9vdExh
eWVyKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJh
d2luZ0FyZWEuaAppbmRleCA4MjA0ZDNhM2VlYTcyYjE0NjVlZjM4OGMwZjcyZjUyYzkyZDIzYjk5
Li5iYWE3MDNjYWNiMmUwOTExYzE0Yjg4YWI5N2QwMTZkMjJkZmFjNTcyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZERyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYS5oCkBAIC04OCwx
MSArODgsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlUGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuaXNBY3Rp
dmUoKTsgfQogICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgeyB9CiAK
LSAgICB2b2lkIHNjaGVkdWxlRGlzcGxheSgpOwotICAgIHZvaWQgZGlzcGxheVRpbWVyRmlyZWQo
KTsKLSAgICB2b2lkIGRpc3BsYXkoKTsKLSAgICB2b2lkIGRpc3BsYXkoVXBkYXRlSW5mbyYpOwot
CiAgICAgdWludDY0X3QgbV9iYWNraW5nU3RvcmVTdGF0ZUlEOwogCiAgICAgV2ViQ29yZTo6UmVn
aW9uIG1fZGlydHlSZWdpb247CkBAIC0xMDksMTAgKzEwNCw2IEBAIHByaXZhdGU6CiAgICAgLy8g
d2Ugbm9ybWFsbHkgc2VuZCB0byB0aGUgVUkgcHJvY2Vzcy4KICAgICBib29sIG1fc2hvdWxkU2Vu
ZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlOwogCi0gICAgLy8gV2hldGhlciB3ZSdyZSB3YWl0
aW5nIGZvciBhIERpZFVwZGF0ZSBtZXNzYWdlLiBVc2VkIGZvciB0aHJvdHRsaW5nIHBhaW50cyBz
byB0aGF0IHRoZQotICAgIC8vIHdlYiBwcm9jZXNzIHdvbid0IHBhaW50IG1vcmUgZnJlcXVlbnQg
dGhhbiB0aGUgVUkgcHJvY2VzcyBjYW4gaGFuZGxlLgotICAgIGJvb2wgbV9pc1dhaXRpbmdGb3JE
aWRVcGRhdGU7Ci0KICAgICAvLyBUcnVlIGJldHdlZW4gc2VuZGluZyB0aGUgJ2VudGVyIGNvbXBv
c2l0aW5nJyBtZXNzYWdlcywgYW5kIHRoZSAnZXhpdCBjb21wb3NpdGluZycgbWVzc2FnZS4KICAg
ICBib29sIG1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXM7CiAKQEAgLTEyOCw3
ICsxMTksNiBAQCBwcml2YXRlOgogICAgIC8vIHdvbid0IHBhaW50IHVudGlsIHBhaW50aW5nIGhh
cyByZXN1bWVkIGFnYWluLgogICAgIGJvb2wgbV9pc1BhaW50aW5nU3VzcGVuZGVkOwogCi0gICAg
UnVuTG9vcDo6VGltZXI8Q29vcmRpbmF0ZWREcmF3aW5nQXJlYT4gbV9kaXNwbGF5VGltZXI7CiAg
ICAgUnVuTG9vcDo6VGltZXI8Q29vcmRpbmF0ZWREcmF3aW5nQXJlYT4gbV9leGl0Q29tcG9zaXRp
bmdUaW1lcjsKIAogICAgIC8vIFRoZSBsYXllciB0cmVlIGhvc3QgdGhhdCBoYW5kbGVzIGFjY2Vs
ZXJhdGVkIGNvbXBvc2l0aW5nLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266888</attachid>
            <date>2015-12-08 08:43:28 -0800</date>
            <delta_ts>2015-12-08 09:12:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151987-20151209014257.patch</filename>
            <type>text/plain</type>
            <size>35885</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkzNzQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZGM1Nzk4OGJkYTljMWZl
MjQyYTk0MTcwMTY3NTY1MDAxMjFhNzljMi4uYjM4MDcxMTM4ZWUwYTg4YzYyZmJkZGY4YjQ1ZTQ3
OTJmYTM5YTI5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQwIEBACiAyMDE1LTEyLTA4ICBSeXVh
biBDaG9pICA8cnl1YW4uY2hvaUBuYXZlcmNvcnAuY29tPgogCisgICAgICAgIFtDb29yZGluYXRl
ZEdyYXBoaWNzXSBsYXllclRyZWVIb3N0IGFsd2F5cyBleGlzdCBpbiBDb29yZGluYXRlZERyYXdp
bmdBcmVhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTE5ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
b29yZGluYXRlZEdyYXBoaWNzIHVzaW5nIFVJIHNpZGUgY29tcG9zaXRvciBhbHdheXMgZm9yY2Vz
IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLgorICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCBk
ZWFkIGNvZGUgZm9yIGxheWVyVHJlZUhvc3Qgd2hpY2ggYWx3YXlzIGV4aXN0cy4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWFQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6
cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdBcmVh
UHJveHk6OnNldEJhY2tpbmdTdG9yZUlzRGlzY2FyZGFibGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6ZGlkVXBkYXRlQmFj
a2luZ1N0b3JlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZERy
YXdpbmdBcmVhUHJveHk6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6aW5jb3Jwb3Jh
dGVVcGRhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdB
cmVhUHJveHk6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmRpc2NhcmRCYWNraW5n
U3RvcmVTb29uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWREcmF3aW5n
QXJlYVByb3h5OjpkaXNjYXJkQmFja2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaDoK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5OjpzZXRCYWNraW5n
U3RvcmVJc0Rpc2NhcmRhYmxlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmxheWVySG9zdERp
ZEZsdXNoTGF5ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWREcmF3
aW5nQXJlYTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2gpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdBcmVhOjpkaWRVcGRhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdBcmVhOjplbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRE
cmF3aW5nQXJlYTo6c2NoZWR1bGVEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6ZGlzcGxheVRpbWVyRmlyZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdBcmVhOjpkaXNwbGF5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6c2hvdWxkUGFpbnRCb3VuZHNSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6YXR0YWNoVmlld092ZXJsYXlHcmFw
aGljc0xheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhLmg6CisKKzIwMTUtMTItMDggIFJ5
dWFuIENob2kgIDxyeXVhbi5jaG9pQG5hdmVyY29ycC5jb20+CisKICAgICAgICAgW0VGTF0gQWRk
IEFQSSB0byBwcm92aWRlIHByZWZlcmVuY2VzIGJlZm9yZSBjcmVhdGluZyBld2tfdmlldwogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNTg3CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4
IGM4NDJiMWIwMDgwYTBlMDVmMmU5YzRkYzhiYzY2NmMxNTg4Nzk3MDkuLmY1YTZhNTIyZThmNDQ0
ODkyODI1ZTUzZWEwYTYyZGZlZTgwYjA2M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmNwcApAQCAtNTQsMTIgKzU0LDkgQEAgQ29vcmRpbmF0
ZWREcmF3aW5nQXJlYVByb3h5OjpDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkoV2ViUGFnZVBy
b3h5JiB3ZWJQYWdlUHIKICAgICAsIG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQoMCkKICAgICAs
IG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoZmFsc2UpCiAgICAgLCBt
X2hhc1JlY2VpdmVkRmlyc3RVcGRhdGUoZmFsc2UpCi0gICAgLCBtX2lzQmFja2luZ1N0b3JlRGlz
Y2FyZGFibGUodHJ1ZSkKLSAgICAsIG1fZGlzY2FyZEJhY2tpbmdTdG9yZVRpbWVyKFJ1bkxvb3A6
OmN1cnJlbnQoKSwgdGhpcywgJkNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6ZGlzY2FyZEJh
Y2tpbmdTdG9yZSkKIHsKICAgICAvLyBDb25zdHJ1Y3QgdGhlIHByb3h5IGVhcmx5IHRvIGFsbG93
IG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhlIHdlYiBwcm9jZXNzIHdoaWxlIEFDIGlzIGVudGVy
ZWQgdGhlcmUuCi0gICAgaWYgKHdlYlBhZ2VQcm94eS5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygp
LmZvcmNlQ29tcG9zaXRpbmdNb2RlKCkpCi0gICAgICAgIG1fY29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkgPSBzdGQ6Om1ha2VfdW5pcXVlPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
Pih0aGlzKTsKKyAgICBtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5ID0gc3RkOjptYWtl
X3VuaXF1ZTxDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eT4odGhpcyk7CiB9CiAKIENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6fkNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eSgpCkBA
IC02OSw0OSArNjYsNiBAQCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6On5Db29yZGluYXRl
ZERyYXdpbmdBcmVhUHJveHkoKQogICAgICAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUoKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50KEJhY2tp
bmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCwgUmVnaW9uJiB1bnBhaW50ZWRSZWdpb24pCi17Ci0gICAgdW5wYWludGVkUmVnaW9uID0g
cmVjdDsKLQotICAgIGlmIChpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQgPD0g
bV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRCk7Ci0gICAgaWYgKG1fY3VycmVudEJhY2tpbmdTdG9y
ZVN0YXRlSUQgPCBtX25leHRCYWNraW5nU3RvcmVTdGF0ZUlEKSB7Ci0gICAgICAgIC8vIFRlbGwg
dGhlIHdlYiBwcm9jZXNzIHRvIGRvIGEgZnVsbCBiYWNraW5nIHN0b3JlIHVwZGF0ZSBub3csIGlu
IGNhc2Ugd2UgcHJldmlvdXNseSB0b2xkCi0gICAgICAgIC8vIGl0IGFib3V0IG91ciBuZXh0IHN0
YXRlIGJ1dCBkaWRuJ3QgcmVxdWVzdCBhbiBpbW1lZGlhdGUgdXBkYXRlLgotICAgICAgICBzZW5k
VXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoUmVzcG9uZEltbWVkaWF0ZWx5KTsKLQotICAgICAgICAv
LyBJZiB3ZSBoYXZlbid0IHlldCByZWNlaXZlZCBvdXIgZmlyc3QgYml0cyBmcm9tIHRoZSBXZWJQ
cm9jZXNzIHRoZW4gZG9uJ3QgcGFpbnQgYW55dGhpbmcuCi0gICAgICAgIGlmICghbV9oYXNSZWNl
aXZlZEZpcnN0VXBkYXRlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtX2lz
V2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKSB7Ci0gICAgICAgICAgICAvLyBX
YWl0IGZvciBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UgdGhhdCBjb250YWlu
cyB0aGUgbmV3IGJpdHMgYmVmb3JlIHdlIHBhaW50Ci0gICAgICAgICAgICAvLyB3aGF0J3MgY3Vy
cmVudGx5IGluIHRoZSBiYWNraW5nIHN0b3JlLgotICAgICAgICAgICAgd2FpdEZvckFuZERpc3Bh
dGNoRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IERpc3BhdGNoaW5nIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIChlaXRoZXIgYmVuZWF0aCBz
ZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgb3IKLSAgICAgICAgLy8gYmVuZWF0aCB3YWl0Rm9y
QW5kRGlzcGF0Y2hEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSkgY291bGQgZGVzdHJveSBvdXIg
YmFja2luZyBzdG9yZSBvcgotICAgICAgICAvLyBjaGFuZ2UgdGhlIGNvbXBvc2l0aW5nIG1vZGUu
Ci0gICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUgfHwgaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNT
RVJUKCFtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKTsKLSAgICAgICAg
aWYgKCFtX2JhY2tpbmdTdG9yZSkgewotICAgICAgICAgICAgLy8gVGhlIHZpZXcgaGFzIGFza2Vk
IHVzIHRvIHBhaW50IGJlZm9yZSB0aGUgd2ViIHByb2Nlc3MgaGFzIHBhaW50ZWQgYW55dGhpbmcu
IFRoZXJlJ3MKLSAgICAgICAgICAgIC8vIG5vdGhpbmcgd2UgY2FuIGRvLgotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9iYWNraW5nU3RvcmUtPnBhaW50KGNv
bnRleHQsIHJlY3QpOwotICAgIHVucGFpbnRlZFJlZ2lvbi5zdWJ0cmFjdChJbnRSZWN0KEludFBv
aW50KCksIG1fYmFja2luZ1N0b3JlLT5zaXplKCkpKTsKLQotICAgIGRpc2NhcmRCYWNraW5nU3Rv
cmVTb29uKCk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVW
aWV3cG9ydCgpCiB7CiAgICAgbV93ZWJQYWdlUHJveHkuc2V0Vmlld05lZWRzRGlzcGxheSh2aWV3
cG9ydFZpc2libGVSZWN0KCkpOwpAQCAtMTM2LDIyICs5MCwxMCBAQCB2b2lkIENvb3JkaW5hdGVk
RHJhd2luZ0FyZWFQcm94eTo6dmlzaWJpbGl0eURpZENoYW5nZSgpCiB7CiAgICAgLy8gSWYgd2Ug
ZG9uJ3QgaGF2ZSBhIGJhY2tpbmcgc3RvcmUsIGdvIGFoZWFkIGFuZCBtYXJrIHRoZSBiYWNraW5n
IHN0b3JlIGFzIGJlaW5nIGNoYW5nZWQgc28KICAgICAvLyB0aGF0IHdoZW4gcGFpbnQgd2UnbGwg
YWN0dWFsbHkgd2FpdCBmb3Igc29tZXRoaW5nIHRvIHBhaW50IGFuZCBub3QgZmxhc2ggd2hpdGUu
Ci0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZSAmJiBtX2xheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgp
KQorICAgIGlmIChtX2xheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKQogICAgICAgICBiYWNraW5n
U3RvcmVTdGF0ZURpZENoYW5nZShEb05vdFJlc3BvbmRJbW1lZGlhdGVseSk7CiB9CiAKLXZvaWQg
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5OjpzZXRCYWNraW5nU3RvcmVJc0Rpc2NhcmRhYmxl
KGJvb2wgaXNCYWNraW5nU3RvcmVEaXNjYXJkYWJsZSkKLXsKLSAgICBpZiAobV9pc0JhY2tpbmdT
dG9yZURpc2NhcmRhYmxlID09IGlzQmFja2luZ1N0b3JlRGlzY2FyZGFibGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1faXNCYWNraW5nU3RvcmVEaXNjYXJkYWJsZSA9IGlzQmFja2luZ1N0b3Jl
RGlzY2FyZGFibGU7Ci0gICAgaWYgKG1faXNCYWNraW5nU3RvcmVEaXNjYXJkYWJsZSkKLSAgICAg
ICAgZGlzY2FyZEJhY2tpbmdTdG9yZVNvb24oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZGlzY2Fy
ZEJhY2tpbmdTdG9yZVRpbWVyLnN0b3AoKTsKLX0KLQogdm9pZCBDb29yZGluYXRlZERyYXdpbmdB
cmVhUHJveHk6OndhaXRGb3JCYWNraW5nU3RvcmVVcGRhdGVPbk5leHRQYWludCgpCiB7CiAgICAg
bV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlID0gdHJ1ZTsKQEAgLTE2NSw3ICsxMDcsNiBAQCB2b2lk
IENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9y
ZVN0YXRlSUQsIGNvbnN0IFVwZAogCiAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgY2FzZSB3aGVy
ZSB0aGUgdmlldyBpcyBoaWRkZW4uCiAKLSAgICBpbmNvcnBvcmF0ZVVwZGF0ZSh1cGRhdGVJbmZv
KTsKICAgICBtX3dlYlBhZ2VQcm94eS5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6RHJhd2luZ0Fy
ZWE6OkRpZFVwZGF0ZSgpLCBtX3dlYlBhZ2VQcm94eS5wYWdlSUQoKSk7CiB9CiAKQEAgLTE5Niwx
NiArMTM3LDYgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmRpZFVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG8KICAgICAgICAgc2VuZFVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlKFJlc3BvbmRJbW1lZGlhdGVseSk7CiAgICAgZWxzZQogICAgICAgICBt
X2hhc1JlY2VpdmVkRmlyc3RVcGRhdGUgPSB0cnVlOwotCi0gICAgaWYgKGlzSW5BY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9iYWNraW5nU3RvcmUpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgaGF2ZSBhIGJhY2tpbmcgc3Rv
cmUgdGhlIHJpZ2h0IHNpemUsIHJldXNlIGl0LgotICAgIGlmIChtX2JhY2tpbmdTdG9yZSAmJiAo
bV9iYWNraW5nU3RvcmUtPnNpemUoKSAhPSB1cGRhdGVJbmZvLnZpZXdTaXplIHx8IG1fYmFja2lu
Z1N0b3JlLT5kZXZpY2VTY2FsZUZhY3RvcigpICE9IHVwZGF0ZUluZm8uZGV2aWNlU2NhbGVGYWN0
b3IpKQotICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7Ci0gICAgaW5jb3Jwb3JhdGVV
cGRhdGUodXBkYXRlSW5mbyk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5
OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0
YXRlSUQsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCkBAIC0yMjQs
OCArMTU1LDYgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmV4aXRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW4KICAgICAgICAgcmV0dXJuOwogCiAg
ICAgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7Ci0KLSAgICBpbmNvcnBvcmF0ZVVw
ZGF0ZSh1cGRhdGVJbmZvKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6
OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0
YXRlSUQsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCkBAIC0yMzcs
MzQgKzE2Niw2IEBAIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNrCiAgICAgdXBkYXRlQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0
ZWREcmF3aW5nQXJlYVByb3h5OjppbmNvcnBvcmF0ZVVwZGF0ZShjb25zdCBVcGRhdGVJbmZvJiB1
cGRhdGVJbmZvKQotewotICAgIEFTU0VSVCghaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KCkpOwotCi0gICAgaWYgKHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9iYWNraW5nU3RvcmUpCi0gICAgICAgIG1fYmFj
a2luZ1N0b3JlID0gc3RkOjptYWtlX3VuaXF1ZTxCYWNraW5nU3RvcmU+KHVwZGF0ZUluZm8udmll
d1NpemUsIHVwZGF0ZUluZm8uZGV2aWNlU2NhbGVGYWN0b3IsIG1fd2ViUGFnZVByb3h5KTsKLQot
ICAgIG1fYmFja2luZ1N0b3JlLT5pbmNvcnBvcmF0ZVVwZGF0ZSh1cGRhdGVJbmZvKTsKLQotICAg
IGJvb2wgc2hvdWxkU2Nyb2xsID0gIXVwZGF0ZUluZm8uc2Nyb2xsUmVjdC5pc0VtcHR5KCk7Ci0K
LSAgICBpZiAoc2hvdWxkU2Nyb2xsKQotICAgICAgICBtX3dlYlBhZ2VQcm94eS5zY3JvbGxWaWV3
KHVwZGF0ZUluZm8uc2Nyb2xsUmVjdCwgdXBkYXRlSW5mby5zY3JvbGxPZmZzZXQpOwotCi0gICAg
aWYgKHNob3VsZFNjcm9sbCAmJiAhbV93ZWJQYWdlUHJveHkuY2FuU2Nyb2xsVmlldygpKQotICAg
ICAgICBtX3dlYlBhZ2VQcm94eS5zZXRWaWV3TmVlZHNEaXNwbGF5KEludFJlY3QoSW50UG9pbnQo
KSwgbV93ZWJQYWdlUHJveHkudmlld1NpemUoKSkpOwotICAgIGVsc2UgewotICAgICAgICBmb3Ig
KGF1dG8mIHVwZGF0ZVJlY3QgOiB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RzKQotICAgICAgICAgICAg
bV93ZWJQYWdlUHJveHkuc2V0Vmlld05lZWRzRGlzcGxheSh1cGRhdGVSZWN0KTsKLSAgICB9Ci0K
LSAgICBpZiAoc2hvdWxkU2Nyb2xsKQotICAgICAgICBtX3dlYlBhZ2VQcm94eS5kaXNwbGF5Vmll
dygpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6YmFja2luZ1N0b3Jl
U3RhdGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QgcmVzcG9uZEltbWVkaWF0ZWx5
T3JOb3QpCiB7CiAgICAgKyttX25leHRCYWNraW5nU3RvcmVTdGF0ZUlEOwpAQCAtMzI0LDE3ICsy
MjUsMTMgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmUKIHsKICAgICBBU1NFUlQoIWlzSW5BY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKTsKIAotICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0
cjsKICAgICBtX2xheWVyVHJlZUNvbnRleHQgPSBsYXllclRyZWVDb250ZXh0OwogICAgIG1fd2Vi
UGFnZVByb3h5LmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4
dCk7Ci0gICAgaWYgKCFtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KQotICAgICAgICBt
X2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5ID0gc3RkOjptYWtlX3VuaXF1ZTxDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eT4odGhpcyk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWREcmF3
aW5nQXJlYVByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJh
amVjdG9yeVZlY3RvcikKIHsKLSAgICBpZiAobV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eSkKLSAgICAgICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS0+c2V0VmlzaWJsZUNv
bnRlbnRzUmVjdCh2aXNpYmxlQ29udGVudHNSZWN0LCB0cmFqZWN0b3J5VmVjdG9yKTsKKyAgICBt
X2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZp
c2libGVDb250ZW50c1JlY3QsIHRyYWplY3RvcnlWZWN0b3IpOwogfQogCiB2b2lkIENvb3JkaW5h
dGVkRHJhd2luZ0FyZWFQcm94eTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKQEAg
LTM1MywyMyArMjUwLDUgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHIKICAgICBtX3dlYlBhZ2VQ
cm94eS51cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsK
IH0KIAotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmRpc2NhcmRCYWNraW5nU3Rv
cmVTb29uKCkKLXsKLSAgICBpZiAoIW1faXNCYWNraW5nU3RvcmVEaXNjYXJkYWJsZSB8fCBtX2Rp
c2NhcmRCYWNraW5nU3RvcmVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBXZSdsbCB3YWl0IHRoaXMgbWFueSBzZWNvbmRzIGFmdGVyIHRoZSBsYXN0IHBhaW50IGJl
Zm9yZSB0aHJvd2luZyBhd2F5IG91ciBiYWNraW5nIHN0b3JlIHRvIHNhdmUgbWVtb3J5LgotICAg
IC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBzbWFydGVyIHRvIG1ha2UgdGhpcyBkZWxheSBiYXNlZCBv
biBob3cgZXhwZW5zaXZlIHBhaW50aW5nIGlzLiBTZWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvNTU3
MzM+LgotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZGlzY2FyZEJhY2tpbmdTdG9yZURlbGF5ID0g
MjsKLQotICAgIG1fZGlzY2FyZEJhY2tpbmdTdG9yZVRpbWVyLnN0YXJ0T25lU2hvdChkaXNjYXJk
QmFja2luZ1N0b3JlRGVsYXkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94
eTo6ZGlzY2FyZEJhY2tpbmdTdG9yZSgpCi17Ci0gICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRy
OwotICAgIGJhY2tpbmdTdG9yZVN0YXRlRGlkQ2hhbmdlKERvTm90UmVzcG9uZEltbWVkaWF0ZWx5
KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhUHJv
eHkuaAppbmRleCA3YjU0ZGUxZDc5ZjE3NmRiMWIxZTdjMzE1Y2I3ZjI3YjIwNWQxYzA4Li42YThm
N2YxYzAxNGNhMzcwYWJmOTBjYWY4ZDIyYTM2ZTQ0ZmEwZTU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdB
cmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaApAQCAtNDcsOCArNDcsNiBAQCBwdWJs
aWM6CiAgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5KFdlYlBhZ2VQcm94
eSYpOwogICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eSgpOwogCi0gICAg
dm9pZCBwYWludChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6UmVnaW9uJiB1bnBhaW50ZWRSZWdpb24pOwotCiAg
ICAgYm9vbCBpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBjb25zdCB7IHJldHVybiAh
bV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKTsgfQogICAgIHZvaWQgdmlzaWJpbGl0eURpZENo
YW5nZSgpOwogCkBAIC02OCw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNp
emVEaWRDaGFuZ2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFu
Z2UoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNraW5nU3RvcmVJc0Rpc2NhcmRhYmxlKGJv
b2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNraW5nU3RvcmVJc0Rpc2NhcmRhYmxlKGJvb2wp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCB3YWl0Rm9yQmFja2luZ1N0b3JlVXBkYXRlT25OZXh0UGFp
bnQoKTsKIAogICAgIC8vIElQQyBtZXNzYWdlIGhhbmRsZXJzCkBAIC04OSw5ICs4Nyw2IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKICAgICB2
b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRl
eHQmKTsKIAotICAgIHZvaWQgZGlzY2FyZEJhY2tpbmdTdG9yZVNvb24oKTsKLSAgICB2b2lkIGRp
c2NhcmRCYWNraW5nU3RvcmUoKTsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eT4gbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTsKIAogICAg
IC8vIFRoZSBzdGF0ZSBJRCBjb3JyZXNwb25kaW5nIHRvIG91ciBjdXJyZW50IGJhY2tpbmcgc3Rv
cmUuIFVwZGF0ZWQgd2hlbmV2ZXIgd2UgYWxsb2NhdGUKQEAgLTExMiwxMSArMTA3LDYgQEAgcHJp
dmF0ZToKIAogICAgIC8vIEZvciBhIG5ldyBEcmF3aW5nIEFyZWEgZG9uJ3QgZHJhdyBhbnl0aGlu
ZyB1bnRpbCB0aGUgV2ViUHJvY2VzcyBoYXMgc2VudCBvdmVyIHRoZSBmaXJzdCBjb250ZW50Lgog
ICAgIGJvb2wgbV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlOwotCi0gICAgYm9vbCBtX2lzQmFja2lu
Z1N0b3JlRGlzY2FyZGFibGU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tpbmdTdG9yZT4gbV9i
YWNraW5nU3RvcmU7Ci0KLSAgICBSdW5Mb29wOjpUaW1lcjxDb29yZGluYXRlZERyYXdpbmdBcmVh
UHJveHk+IG1fZGlzY2FyZEJhY2tpbmdTdG9yZVRpbWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJh
d2luZ0FyZWEuY3BwCmluZGV4IGU1NTE3MjgzZjNhM2NmNTkyN2RlOTMwYjNmYmNhZDlkZWE5Yjhm
ODYuLjQ5Y2U5MWVkODY0ZDg1YmYwNDgxYTdhODQ4MGYyMzE5ZDUzZDg5NGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkRHJhd2luZ0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWEuY3BwCkBA
IC01MSw4ICs1MSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBDb29yZGluYXRlZERyYXdpbmdB
cmVhOjp+Q29vcmRpbmF0ZWREcmF3aW5nQXJlYSgpCiB7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9z
dCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5pbnZhbGlkYXRlKCk7CisgICAgbV9sYXllclRy
ZWVIb3N0LT5pbnZhbGlkYXRlKCk7CiB9CiAKIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OkNvb3Jk
aW5hdGVkRHJhd2luZ0FyZWEoV2ViUGFnZSYgd2ViUGFnZSwgY29uc3QgV2ViUGFnZUNyZWF0aW9u
UGFyYW1ldGVycyYgcGFyYW1ldGVycykKQEAgLTY1LDEyICs2NCwxMCBAQCBDb29yZGluYXRlZERy
YXdpbmdBcmVhOjpDb29yZGluYXRlZERyYXdpbmdBcmVhKFdlYlBhZ2UmIHdlYlBhZ2UsIGNvbnN0
IFdlYlBhZ2VDcgogICAgICwgbV9pc1BhaW50aW5nRW5hYmxlZCh0cnVlKQogICAgICwgbV9pblVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKGZhbHNlKQogICAgICwgbV9zaG91bGRTZW5kRGlkVXBkYXRl
QmFja2luZ1N0b3JlU3RhdGUoZmFsc2UpCi0gICAgLCBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZShm
YWxzZSkKICAgICAsIG1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXMoZmFsc2Up
CiAgICAgLCBtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4oZmFsc2UpCiAgICAgLCBtX3dhbnRzVG9F
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoZmFsc2UpCiAgICAgLCBtX2lzUGFpbnRpbmdT
dXNwZW5kZWQoZmFsc2UpCi0gICAgLCBtX2Rpc3BsYXlUaW1lcihSdW5Mb29wOjptYWluKCksIHRo
aXMsICZDb29yZGluYXRlZERyYXdpbmdBcmVhOjpkaXNwbGF5VGltZXJGaXJlZCkKICAgICAsIG1f
ZXhpdENvbXBvc2l0aW5nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmQ29vcmRpbmF0ZWRE
cmF3aW5nQXJlYTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKQogewogICAgIC8vIEFs
d2F5cyB1c2UgY29tcG9zaXRpbmcgaW4gQ29vcmRpbmF0ZWRHcmFwaGljcwpAQCAtODUsMTMgKzgy
LDggQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rpc3BsYXkoKQogICAg
IGlmICghbV9pc1BhaW50aW5nRW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
bGF5ZXJUcmVlSG9zdCkgewotICAgICAgICBBU1NFUlQobV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkp
OwotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWRE
aXNwbGF5KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXROZWVkc0Rpc3BsYXlJ
blJlY3QobV93ZWJQYWdlLmJvdW5kcygpKTsKKyAgICBBU1NFUlQobV9kaXJ0eVJlZ2lvbi5pc0Vt
cHR5KCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVl
ZERpc3BsYXkoKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZXROZWVkc0Rp
c3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTk5LDIwICs5MSw4IEBAIHZvaWQg
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCiAgICAgaWYgKCFtX2lzUGFpbnRpbmdFbmFibGVkKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7Ci0gICAgICAgIEFTU0VSVChtX2RpcnR5UmVn
aW9uLmlzRW1wdHkoKSk7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRl
ZENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IHJlY3Q7Ci0gICAgZGlydHlSZWN0LmludGVyc2Vj
dChtX3dlYlBhZ2UuYm91bmRzKCkpOwotCi0gICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fZGlydHlSZWdpb24udW5pdGUoZGlydHlSZWN0KTsKLSAg
ICBzY2hlZHVsZURpc3BsYXkoKTsKKyAgICBBU1NFUlQobV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkp
OworICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3Bs
YXlJblJlY3QocmVjdCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2Nyb2xs
KGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQpA
QCAtMTIwLDYzICsxMDAsMTYgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzY3JvbGwo
Y29uc3QgSW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2MKICAgICBpZiAoIW1f
aXNQYWludGluZ0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2xheWVyVHJl
ZUhvc3QpIHsKLSAgICAgICAgQVNTRVJUKG1fc2Nyb2xsUmVjdC5pc0VtcHR5KCkpOwotICAgICAg
ICBBU1NFUlQobV9zY3JvbGxPZmZzZXQuaXNFbXB0eSgpKTsKLSAgICAgICAgQVNTRVJUKG1fZGly
dHlSZWdpb24uaXNFbXB0eSgpKTsKLQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNjcm9sbE5v
bkNvbXBvc2l0ZWRDb250ZW50cyhzY3JvbGxSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChzY3JvbGxSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCFtX3Njcm9sbFJlY3QuaXNFbXB0eSgpICYmIHNjcm9sbFJlY3QgIT0gbV9zY3JvbGxSZWN0
KSB7Ci0gICAgICAgIHVuc2lnbmVkIHNjcm9sbEFyZWEgPSBzY3JvbGxSZWN0LndpZHRoKCkgKiBz
Y3JvbGxSZWN0LmhlaWdodCgpOwotICAgICAgICB1bnNpZ25lZCBjdXJyZW50U2Nyb2xsQXJlYSA9
IG1fc2Nyb2xsUmVjdC53aWR0aCgpICogbV9zY3JvbGxSZWN0LmhlaWdodCgpOwotCi0gICAgICAg
IGlmIChjdXJyZW50U2Nyb2xsQXJlYSA+PSBzY3JvbGxBcmVhKSB7Ci0gICAgICAgICAgICAvLyBU
aGUgcmVjdCBiZWluZyBzY3JvbGxlZCBpcyBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgcmVjdCB3
ZSdkIGxpa2UgdG8gc2Nyb2xsLgotICAgICAgICAgICAgLy8gR28gYWhlYWQgYW5kIGp1c3QgaW52
YWxpZGF0ZSB0aGUgc2Nyb2xsIHJlY3QuCi0gICAgICAgICAgICBzZXROZWVkc0Rpc3BsYXlJblJl
Y3Qoc2Nyb2xsUmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBKdXN0IHJlcGFpbnQgdGhlIGVudGlyZSBjdXJyZW50IHNjcm9sbCByZWN0LCB3ZSdsbCBz
Y3JvbGwgdGhlIG5ldyByZWN0IGluc3RlYWQuCi0gICAgICAgIHNldE5lZWRzRGlzcGxheUluUmVj
dChtX3Njcm9sbFJlY3QpOwotICAgICAgICBtX3Njcm9sbFJlY3QgPSBJbnRSZWN0KCk7Ci0gICAg
ICAgIG1fc2Nyb2xsT2Zmc2V0ID0gSW50U2l6ZSgpOwotICAgIH0KLQotICAgIC8vIEdldCB0aGUg
cGFydCBvZiB0aGUgZGlydHkgcmVnaW9uIHRoYXQgaXMgaW4gdGhlIHNjcm9sbCByZWN0LgotICAg
IFJlZ2lvbiBkaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCA9IGludGVyc2VjdChzY3JvbGxSZWN0LCBt
X2RpcnR5UmVnaW9uKTsKLSAgICBpZiAoIWRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0LmlzRW1wdHko
KSkgewotICAgICAgICAvLyBUaGVyZSBhcmUgcGFydHMgb2YgdGhlIGRpcnR5IHJlZ2lvbiB0aGF0
IGFyZSBpbnNpZGUgdGhlIHNjcm9sbCByZWN0LgotICAgICAgICAvLyBXZSBuZWVkIHRvIHN1YnRy
YWN0IHRoZW0gZnJvbSB0aGUgcmVnaW9uLCBtb3ZlIHRoZW0gYW5kIHJlLWFkZCB0aGVtLgotICAg
ICAgICBtX2RpcnR5UmVnaW9uLnN1YnRyYWN0KHNjcm9sbFJlY3QpOwotCi0gICAgICAgIC8vIE1v
dmUgdGhlIGRpcnR5IHBhcnRzLgotICAgICAgICBSZWdpb24gbW92ZWREaXJ0eVJlZ2lvbkluU2Ny
b2xsUmVjdCA9IGludGVyc2VjdCh0cmFuc2xhdGUoZGlydHlSZWdpb25JblNjcm9sbFJlY3QsIHNj
cm9sbERlbHRhKSwgc2Nyb2xsUmVjdCk7Ci0KLSAgICAgICAgLy8gQW5kIGFkZCB0aGVtIGJhY2su
Ci0gICAgICAgIG1fZGlydHlSZWdpb24udW5pdGUobW92ZWREaXJ0eVJlZ2lvbkluU2Nyb2xsUmVj
dCk7Ci0gICAgfQorICAgIEFTU0VSVChtX3Njcm9sbFJlY3QuaXNFbXB0eSgpKTsKKyAgICBBU1NF
UlQobV9zY3JvbGxPZmZzZXQuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9kaXJ0eVJlZ2lvbi5p
c0VtcHR5KCkpOwogCi0gICAgLy8gQ29tcHV0ZSB0aGUgc2Nyb2xsIHJlcGFpbnQgcmVnaW9uLgot
ICAgIFJlZ2lvbiBzY3JvbGxSZXBhaW50UmVnaW9uID0gc3VidHJhY3Qoc2Nyb2xsUmVjdCwgdHJh
bnNsYXRlKHNjcm9sbFJlY3QsIHNjcm9sbERlbHRhKSk7Ci0KLSAgICBtX2RpcnR5UmVnaW9uLnVu
aXRlKHNjcm9sbFJlcGFpbnRSZWdpb24pOwotICAgIHNjaGVkdWxlRGlzcGxheSgpOwotCi0gICAg
bV9zY3JvbGxSZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICBtX3Njcm9sbE9mZnNldCArPSBzY3JvbGxE
ZWx0YTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhz
Y3JvbGxSZWN0KTsKIH0KIAogdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpwYWdlQmFja2dy
b3VuZFRyYW5zcGFyZW5jeUNoYW5nZWQoKQogewotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0g
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cGFnZUJhY2tncm91bmRUcmFuc3BhcmVuY3lDaGFuZ2Vk
KCk7CisgICAgbV9sYXllclRyZWVIb3N0LT5wYWdlQmFja2dyb3VuZFRyYW5zcGFyZW5jeUNoYW5n
ZWQoKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZXRMYXllclRyZWVTdGF0
ZUlzRnJvemVuKGJvb2wgaXNGcm96ZW4pCkBAIC0xODYsOCArMTE5LDcgQEAgdm9pZCBDb29yZGlu
YXRlZERyYXdpbmdBcmVhOjpzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wgaXNGcm96ZW4p
CiAKICAgICBtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4gPSBpc0Zyb3plbjsKIAotICAgIGlmICht
X2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TGF5ZXJGbHVzaFNj
aGVkdWxpbmdFbmFibGVkKCFpc0Zyb3plbik7CisgICAgbV9sYXllclRyZWVIb3N0LT5zZXRMYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoIWlzRnJvemVuKTsKIAogICAgIGlmIChpc0Zyb3plbikK
ICAgICAgICAgbV9leGl0Q29tcG9zaXRpbmdUaW1lci5zdG9wKCk7CkBAIC0yMDEsMjggKzEzMywy
MiBAQCB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmZvcmNlUmVwYWludCgpCiAKICAgICBt
X3dlYlBhZ2UubGF5b3V0SWZOZWVkZWQoKTsKIAotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpIHsK
LSAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZG8gdGhlIHNhbWUgd29yayBhcyB0aGUgbGF5
ZXJIb3N0RGlkRmx1c2hMYXllcnMgZnVuY3Rpb24gaGVyZSwKLSAgICAgICAgLy8gYnV0IGNsZWFy
bHkgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhhdCBu
YW1lLgotICAgICAgICAvLyBDb25zaWRlciByZWZhY3RvcmluZyBhbmQgcmVuYW1pbmcgaXQuCi0g
ICAgICAgIGlmIChtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2VzKQotICAgICAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5mb3JjZVJlcGFpbnQoKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBDYWxsIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVy
Rmx1c2goZmFsc2UpIGhlcmUgdG8KLSAgICAgICAgICAgIC8vIHByZXZlbnQgbGF5ZXJIb3N0RGlk
Rmx1c2hMYXllcnMoKSBmcm9tIGJlaW5nIGNhbGxlZCBhIHNlY29uZCB0aW1lLgotICAgICAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5zZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXll
ckZsdXNoKGZhbHNlKTsKLSAgICAgICAgICAgIGxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGRvIHRo
ZSBzYW1lIHdvcmsgYXMgdGhlIGxheWVySG9zdERpZEZsdXNoTGF5ZXJzIGZ1bmN0aW9uIGhlcmUs
CisgICAgLy8gYnV0IGNsZWFybHkgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGNhbGwgdGhlIGZ1
bmN0aW9uIHdpdGggdGhhdCBuYW1lLgorICAgIC8vIENvbnNpZGVyIHJlZmFjdG9yaW5nIGFuZCBy
ZW5hbWluZyBpdC4KKyAgICBpZiAobV9jb21wb3NpdGluZ0FjY29yZGluZ1RvUHJveHlNZXNzYWdl
cykKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5mb3JjZVJlcGFpbnQoKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgLy8gQ2FsbCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZs
dXNoKGZhbHNlKSBoZXJlIHRvCisgICAgICAgIC8vIHByZXZlbnQgbGF5ZXJIb3N0RGlkRmx1c2hM
YXllcnMoKSBmcm9tIGJlaW5nIGNhbGxlZCBhIHNlY29uZCB0aW1lLgorICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goZmFs
c2UpOworICAgICAgICBsYXllckhvc3REaWRGbHVzaExheWVycygpOwogICAgIH0KLQotICAgIG1f
aXNXYWl0aW5nRm9yRGlkVXBkYXRlID0gZmFsc2U7Ci0gICAgZGlzcGxheSgpOwogfQogCiBib29s
IENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmZvcmNlUmVwYWludEFzeW5jKHVpbnQ2NF90IGNhbGxi
YWNrSUQpCiB7Ci0gICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdCAmJiBtX2xheWVyVHJlZUhvc3Qt
PmZvcmNlUmVwYWludEFzeW5jKGNhbGxiYWNrSUQpOworICAgIHJldHVybiBtX2xheWVyVHJlZUhv
c3QtPmZvcmNlUmVwYWludEFzeW5jKGNhbGxiYWNrSUQpOwogfQogCiB2b2lkIENvb3JkaW5hdGVk
RHJhd2luZ0FyZWE6OnNldFBhaW50aW5nRW5hYmxlZChib29sIHBhaW50aW5nRW5hYmxlZCkKQEAg
LTI0Miw4ICsxNjgsNiBAQCB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6Om1haW5GcmFtZUNv
bnRlbnRTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJgogCiB2b2lkIENvb3JkaW5h
dGVkRHJhd2luZ0FyZWE6OmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCkKIHsKLSAgICBBU1NFUlQo
bV9sYXllclRyZWVIb3N0KTsKLQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+Zm9yY2VSZXBhaW50KCk7
CiAKICAgICBpZiAobV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgJiYgIWV4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZVBlbmRpbmcoKSkgewpAQCAtMjUxLDkgKzE3NSw2
IEBAIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMo
KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIEFTU0VSVCghbV9jb21wb3NpdGluZ0FjY29yZGluZ1RvUHJv
eHlNZXNzYWdlcyk7CiAgICAgaWYgKCFleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVQZW5k
aW5nKCkpIHsKICAgICAgICAgbV93ZWJQYWdlLnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhUHJv
eHk6OkVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobV9iYWNraW5nU3RvcmVTdGF0ZUlE
LCBtX2xheWVyVHJlZUhvc3QtPmxheWVyVHJlZUNvbnRleHQoKSkpOwpAQCAtMjYzLDEwICsxODQs
NyBAQCB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmxheWVySG9zdERpZEZsdXNoTGF5ZXJz
KCkKIAogR3JhcGhpY3NMYXllckZhY3RvcnkqIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmdyYXBo
aWNzTGF5ZXJGYWN0b3J5KCkKIHsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICBy
ZXR1cm4gbV9sYXllclRyZWVIb3N0LT5ncmFwaGljc0xheWVyRmFjdG9yeSgpOwotCi0gICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdC0+Z3JhcGhpY3NMYXllckZhY3Rvcnko
KTsKIH0KIAogdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdM
YXllcihHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQpAQCAtMjc2LDMyICsxOTQsMjEgQEAg
dm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihHcmFw
aGljc0xheWVyKiBncmFwaGljc0xheWUKICAgICAvLyB0aGF0IHRha2VzIHRoZSBuZXcgc3RhdGUu
CiAKICAgICBpZiAoZ3JhcGhpY3NMYXllcikgewotICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9z
dCkgewotICAgICAgICAgICAgLy8gV2UncmUgYWN0dWFsbHkgZW50ZXJpbmcgYWNjZWxlcmF0ZWQg
Y29tcG9zaXRpbmcgbW9kZS4KLSAgICAgICAgICAgIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoZ3JhcGhpY3NMYXllcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBX
ZSdyZSBhbHJlYWR5IGluIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUsIGJ1dCB0aGUgcm9v
dCBjb21wb3NpdGluZyBsYXllciBjaGFuZ2VkLgotCi0gICAgICAgICAgICBtX2V4aXRDb21wb3Np
dGluZ1RpbWVyLnN0b3AoKTsKLSAgICAgICAgICAgIG1fd2FudHNUb0V4aXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZSA9IGZhbHNlOworICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IGluIGFjY2Vs
ZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUsIGJ1dCB0aGUgcm9vdCBjb21wb3NpdGluZyBsYXllciBj
aGFuZ2VkLgogCi0gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IHNlbnQgdGhlIEVudGVyQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUgbWVzc2FnZSwgbWFrZSBzdXJlIHRoYXQgdGhlCi0gICAg
ICAgICAgICAvLyBsYXllciB0cmVlIGhvc3QgY2FsbHMgdXMgYmFjayBhZnRlciB0aGUgbmV4dCBs
YXllciBmbHVzaCBzbyB3ZSBjYW4gc2VuZCBpdCB0aGVuLgotICAgICAgICAgICAgaWYgKCFtX2Nv
bXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2VzKQotICAgICAgICAgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC0+c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaCh0
cnVlKTsKKyAgICAgICAgbV9leGl0Q29tcG9zaXRpbmdUaW1lci5zdG9wKCk7CisgICAgICAgIG1f
d2FudHNUb0V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSA9IGZhbHNlOwogCi0gICAgICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RDb21wb3NpdGluZ0xheWVyKGdyYXBoaWNzTGF5
ZXIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9z
dCkKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
MCk7CisgICAgICAgIC8vIElmIHdlIGhhdmVuJ3Qgc2VudCB0aGUgRW50ZXJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZSBtZXNzYWdlLCBtYWtlIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgLy8gbGF5
ZXIgdHJlZSBob3N0IGNhbGxzIHVzIGJhY2sgYWZ0ZXIgdGhlIG5leHQgbGF5ZXIgZmx1c2ggc28g
d2UgY2FuIHNlbmQgaXQgdGhlbi4KKyAgICAgICAgaWYgKCFtX2NvbXBvc2l0aW5nQWNjb3JkaW5n
VG9Qcm94eU1lc3NhZ2VzKQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRTaG91bGRO
b3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKHRydWUpOwogICAgIH0KKyAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldFJvb3RDb21wb3NpdGluZ0xheWVyKGdyYXBoaWNzTGF5ZXIpOwogfQog
CiB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZs
dXNoKCkKIHsKLSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgcmV0dXJuOwogICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2NoZWR1bGVMYXllckZsdXNoKCk7CiB9CiAKQEAgLTMyNSwxMiAr
MjMyLDkgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjp1cGRhdGVCYWNraW5nU3RvcmVT
dGF0ZSh1aW50NjRfdCBzdGF0ZUlELCBib29sIHJlc3AKICAgICAgICAgbV93ZWJQYWdlLmxheW91
dElmTmVlZGVkKCk7CiAgICAgICAgIG1fd2ViUGFnZS5zY3JvbGxNYWluRnJhbWVJZk5vdEF0TWF4
U2Nyb2xsUG9zaXRpb24oc2Nyb2xsT2Zmc2V0KTsKIAotICAgICAgICBpZiAobV9sYXllclRyZWVI
b3N0KSB7Ci0gICAgICAgICAgICAvLyBDb29yZGluYXRlZCBHcmFwaGljcyBzZXRzIHRoZSBzaXpl
IG9mIHRoZSByb290IGxheWVyIHRvIGNvbnRlbnRzIHNpemUuCi0gICAgICAgICAgICBpZiAoIW1f
d2ViUGFnZS51c2VGaXhlZExheW91dCgpKQotICAgICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+c2l6ZURpZENoYW5nZShtX3dlYlBhZ2Uuc2l6ZSgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBtX2RpcnR5UmVnaW9uID0gbV93ZWJQYWdlLmJvdW5kcygpOworICAgICAgICAvLyBD
b29yZGluYXRlZCBHcmFwaGljcyBzZXRzIHRoZSBzaXplIG9mIHRoZSByb290IGxheWVyIHRvIGNv
bnRlbnRzIHNpemUuCisgICAgICAgIGlmICghbV93ZWJQYWdlLnVzZUZpeGVkTGF5b3V0KCkpCisg
ICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNpemVEaWRDaGFuZ2UobV93ZWJQYWdlLnNpemUo
KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKHNpemUgPT0gbV93ZWJQYWdlLnNpemUo
KSk7CiAgICAgICAgIGlmICghbV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUp
IHsKQEAgLTM0MCwxMyArMjQ0LDYgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjp1cGRh
dGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBzdGF0ZUlELCBib29sIHJlc3AKICAgICAgICAg
fQogICAgIH0KIAotICAgIC8vIFRoZSBVSSBwcm9jZXNzIGhhcyB1cGRhdGVkIHRvIGEgbmV3IGJh
Y2tpbmcgc3RvcmUgc3RhdGUuIEFueSBVcGRhdGUgbWVzc2FnZXMgd2Ugc2VudCBiZWZvcmUKLSAg
ICAvLyB0aGlzIHBvaW50IHdpbGwgYmUgaWdub3JlZC4gV2Ugd2FpdCB0byBzZXQgdGhpcyB0byBm
YWxzZSB1bnRpbCBhZnRlciB1cGRhdGluZyB0aGUgcGFnZSdzCi0gICAgLy8gc2l6ZSBzbyB0aGF0
IGFueSBkaXNwbGF5cyB0cmlnZ2VyZWQgYnkgdGhlIHJlbGF5b3V0IHdpbGwgYmUgaWdub3JlZC4g
SWYgd2UncmUgc3VwcG9zZWQgdG8KLSAgICAvLyByZXNwb25kIHRvIHRoZSBVcGRhdGVCYWNraW5n
U3RvcmVTdGF0ZSBtZXNzYWdlIGltbWVkaWF0ZWx5LCB3ZSdsbCBkbyBhIGRpc3BsYXkgYW55d2F5
IGluCi0gICAgLy8gc2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlOyBvdGhlcndpc2Ugd2Ug
c2hvdWxkbid0IGRvIG9uZSByaWdodCBub3cuCi0gICAgbV9pc1dhaXRpbmdGb3JEaWRVcGRhdGUg
PSBmYWxzZTsKLQogICAgIGlmIChyZXNwb25kSW1tZWRpYXRlbHkpIHsKICAgICAgICAgLy8gTWFr
ZSBzdXJlIHRvIHJlc3VtZSBwYWludGluZyBpZiB3ZSdyZSBzdXBwb3NlZCB0byByZXNwb25kIGlt
bWVkaWF0ZWx5LCBvdGhlcndpc2Ugd2UnbGwganVzdAogICAgICAgICAvLyBzZW5kIGJhY2sgYW4g
ZW1wdHkgVXBkYXRlSW5mbyBzdHJ1Y3QuCkBAIC0zNjEsNjAgKzI1OCwzNyBAQCB2b2lkIENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWE6OnVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IHN0YXRl
SUQsIGJvb2wgcmVzcAogCiB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OnNlbmREaWRVcGRh
dGVCYWNraW5nU3RvcmVTdGF0ZSgpCiB7Ci0gICAgQVNTRVJUKCFtX2lzV2FpdGluZ0ZvckRpZFVw
ZGF0ZSk7CiAgICAgQVNTRVJUKG1fc2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
KTsKIAogICAgIG1fc2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlID0gZmFsc2U7
CiAKICAgICBVcGRhdGVJbmZvIHVwZGF0ZUluZm87CiAKLSAgICBpZiAoIW1faXNQYWludGluZ1N1
c3BlbmRlZCAmJiAhbV9sYXllclRyZWVIb3N0KQotICAgICAgICBkaXNwbGF5KHVwZGF0ZUluZm8p
OwotCiAgICAgTGF5ZXJUcmVlQ29udGV4dCBsYXllclRyZWVDb250ZXh0OwogCi0gICAgaWYgKG1f
aXNQYWludGluZ1N1c3BlbmRlZCB8fCBtX2xheWVyVHJlZUhvc3QpIHsKLSAgICAgICAgdXBkYXRl
SW5mby52aWV3U2l6ZSA9IG1fd2ViUGFnZS5zaXplKCk7Ci0gICAgICAgIHVwZGF0ZUluZm8uZGV2
aWNlU2NhbGVGYWN0b3IgPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3Io
KTsKKyAgICB1cGRhdGVJbmZvLnZpZXdTaXplID0gbV93ZWJQYWdlLnNpemUoKTsKKyAgICB1cGRh
dGVJbmZvLmRldmljZVNjYWxlRmFjdG9yID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNj
YWxlRmFjdG9yKCk7CiAKLSAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgewotICAgICAgICAg
ICAgbGF5ZXJUcmVlQ29udGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+bGF5ZXJUcmVlQ29udGV4dCgp
OworICAgIGxheWVyVHJlZUNvbnRleHQgPSBtX2xheWVyVHJlZUhvc3QtPmxheWVyVHJlZUNvbnRl
eHQoKTsKIAotICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgbGF5ZXIgdHJlZSBob3N0
IHRvIG5vdGlmeSBhZnRlciB0aGUgbmV4dCBzY2hlZHVsZWQKLSAgICAgICAgICAgIC8vIGxheWVy
IGZsdXNoIGJlY2F1c2UgdGhhdCBtaWdodCBlbmQgdXAgc2VuZGluZyBhbiBFbnRlckFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlCi0gICAgICAgICAgICAvLyBtZXNzYWdlIGJhY2sgdG8gdGhlIFVJ
IHByb2Nlc3MsIGJ1dCB0aGUgdXBkYXRlZCBsYXllciB0cmVlIGNvbnRleHQKLSAgICAgICAgICAg
IC8vIHdpbGwgYmUgc2VudCBiYWNrIGluIHRoZSBEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBt
ZXNzYWdlLgotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRTaG91bGROb3RpZnlBZnRl
ck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNlKTsKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+Zm9yY2VSZXBhaW50KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgLy8gV2UgZG9uJ3Qg
d2FudCB0aGUgbGF5ZXIgdHJlZSBob3N0IHRvIG5vdGlmeSBhZnRlciB0aGUgbmV4dCBzY2hlZHVs
ZWQKKyAgICAvLyBsYXllciBmbHVzaCBiZWNhdXNlIHRoYXQgbWlnaHQgZW5kIHVwIHNlbmRpbmcg
YW4gRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZQorICAgIC8vIG1lc3NhZ2UgYmFjayB0
byB0aGUgVUkgcHJvY2VzcywgYnV0IHRoZSB1cGRhdGVkIGxheWVyIHRyZWUgY29udGV4dAorICAg
IC8vIHdpbGwgYmUgc2VudCBiYWNrIGluIHRoZSBEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBt
ZXNzYWdlLgorICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2No
ZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSk7CisgICAgbV9sYXllclRyZWVIb3N0LT5mb3JjZVJlcGFp
bnQoKTsKIAogICAgIG1fd2ViUGFnZS5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpE
aWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShtX2JhY2tpbmdTdG9yZVN0YXRlSUQsIHVwZGF0ZUlu
Zm8sIGxheWVyVHJlZUNvbnRleHQpKTsKICAgICBtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94
eU1lc3NhZ2VzID0gIWxheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpOwogfQogCi12b2lkIENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWE6OmRpZFVwZGF0ZSgpCi17Ci0gICAgLy8gV2UgbWlnaHQgZ2V0IGRp
ZFVwZGF0ZSBtZXNzYWdlcyBmcm9tIHRoZSBVSSBwcm9jZXNzIGV2ZW4gYWZ0ZXIgd2UndmUKLSAg
ICAvLyBlbnRlcmVkIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUuIElnbm9yZSB0aGVtLgot
ICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNXYWl0
aW5nRm9yRGlkVXBkYXRlID0gZmFsc2U7Ci0KLSAgICAvLyBEaXNwbGF5IGlmIG5lZWRlZC4gV2Ug
Y2FsbCBkaXNwbGF5VGltZXJGaXJlZCBoZXJlIHNpbmNlIGl0IHdpbGwgdGhyb3R0bGUgdXBkYXRl
cyB0byA2MGZwcy4KLSAgICBkaXNwbGF5VGltZXJGaXJlZCgpOwotfQotCiB2b2lkIENvb3JkaW5h
dGVkRHJhd2luZ0FyZWE6OnN1c3BlbmRQYWludGluZygpCiB7CiAgICAgQVNTRVJUKCFtX2lzUGFp
bnRpbmdTdXNwZW5kZWQpOwogCi0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5wYXVzZVJlbmRlcmluZygpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+cGF1
c2VSZW5kZXJpbmcoKTsKIAogICAgIG1faXNQYWludGluZ1N1c3BlbmRlZCA9IHRydWU7Ci0gICAg
bV9kaXNwbGF5VGltZXIuc3RvcCgpOwogCiAgICAgbV93ZWJQYWdlLmNvcmVQYWdlKCktPnN1c3Bl
bmRTY3JpcHRlZEFuaW1hdGlvbnMoKTsKIH0KQEAgLTQyNyw4ICszMDEsNyBAQCB2b2lkIENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWE6OnJlc3VtZVBhaW50aW5nKCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
cmVzdW1lUmVuZGVyaW5nKCk7CisgICAgbV9sYXllclRyZWVIb3N0LT5yZXN1bWVSZW5kZXJpbmco
KTsKIAogICAgIG1faXNQYWludGluZ1N1c3BlbmRlZCA9IGZhbHNlOwogCkBAIC00NDMsOCArMzE2
LDYgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjplbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKEdyYXBoaWNzTGF5ZXIqIGdyYXAKICAgICBtX2V4aXRDb21wb3NpdGluZ1RpbWVy
LnN0b3AoKTsKICAgICBtX3dhbnRzVG9FeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUgPSBm
YWxzZTsKIAotICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0KTsKLQogICAgIG1fbGF5ZXJUcmVl
SG9zdCA9IExheWVyVHJlZUhvc3Q6OmNyZWF0ZSgmbV93ZWJQYWdlKTsKICAgICBpZiAoIW1faW5V
cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSkKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRTaG91
bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKHRydWUpOwpAQCAtNDU1LDggKzMy
Niw2IEBAIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZShHcmFwaGljc0xheWVyKiBncmFwCiAgICAgbV9kaXJ0eVJlZ2lvbiA9IFJlZ2lv
bigpOwogICAgIG1fc2Nyb2xsUmVjdCA9IEludFJlY3QoKTsKICAgICBtX3Njcm9sbE9mZnNldCA9
IEludFNpemUoKTsKLSAgICBtX2Rpc3BsYXlUaW1lci5zdG9wKCk7Ci0gICAgbV9pc1dhaXRpbmdG
b3JEaWRVcGRhdGUgPSBmYWxzZTsKIH0KIAogdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVTb29uKCkKQEAgLTQ3MiwxNDYgKzM0MSwxMCBA
QCB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZVNvb24oKQogICAgIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuc3RhcnRPbmVTaG90KDApOwog
fQogCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OnNjaGVkdWxlRGlzcGxheSgpCi17Ci0g
ICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3QpOwotCi0gICAgaWYgKG1faXNXYWl0aW5nRm9yRGlk
VXBkYXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pc1BhaW50aW5nU3VzcGVuZGVk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2Rpc3BsYXlUaW1lci5pc0FjdGl2ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2Rpc3BsYXlUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6ZGlzcGxheVRpbWVyRmlyZWQoKQotewotICAg
IGRpc3BsYXkoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpkaXNwbGF5KCkK
LXsKLSAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdCk7Ci0gICAgQVNTRVJUKCFtX2lzV2FpdGlu
Z0ZvckRpZFVwZGF0ZSk7Ci0gICAgQVNTRVJUKCFtX2luVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUp
OwotCi0gICAgaWYgKG1faXNQYWludGluZ1N1c3BlbmRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1fZGlydHlSZWdpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpIHsKLSAgICAgICAgc2Vu
ZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBVcGRhdGVJbmZvIHVwZGF0ZUluZm87Ci0gICAgZGlzcGxheSh1cGRhdGVJbmZvKTsKLQot
ICAgIGlmIChtX2xheWVyVHJlZUhvc3QpIHsKLSAgICAgICAgLy8gVGhlIGNhbGwgdG8gdXBkYXRl
IGNhdXNlZCBsYXlvdXQgd2hpY2ggdHVybmVkIG9uIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLgot
ICAgICAgICAvLyBEb24ndCBzZW5kIGFuIFVwZGF0ZSBtZXNzYWdlIGluIHRoaXMgY2FzZS4KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fd2ViUGFnZS5zZW5kKE1lc3NhZ2VzOjpEcmF3
aW5nQXJlYVByb3h5OjpVcGRhdGUobV9iYWNraW5nU3RvcmVTdGF0ZUlELCB1cGRhdGVJbmZvKSk7
Ci0gICAgbV9pc1dhaXRpbmdGb3JEaWRVcGRhdGUgPSB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBz
aG91bGRQYWludEJvdW5kc1JlY3QoY29uc3QgSW50UmVjdCYgYm91bmRzLCBjb25zdCBWZWN0b3I8
SW50UmVjdD4mIHJlY3RzKQotewotICAgIGNvbnN0IHNpemVfdCByZWN0VGhyZXNob2xkID0gMTA7
Ci0gICAgY29uc3QgZG91YmxlIHdhc3RlZFNwYWNlVGhyZXNob2xkID0gMC43NTsKLQotICAgIGlm
IChyZWN0cy5zaXplKCkgPD0gMSB8fCByZWN0cy5zaXplKCkgPiByZWN0VGhyZXNob2xkKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEF0dGVtcHQgdG8gZ3Vlc3Mgd2hldGhlciBvciBu
b3Qgd2Ugc2hvdWxkIHVzZSB0aGUgcmVnaW9uIGJvdW5kcyByZWN0IG9yIHRoZSBpbmRpdmlkdWFs
IHJlY3RzLgotICAgIC8vIFdlIGRvIHRoaXMgYnkgY29tcHV0aW5nIHRoZSBwZXJjZW50YWdlIG9m
ICJ3YXN0ZWQgc3BhY2UiIGluIHRoZSBib3VuZHMuIElmIHRoYXQgd2FzdGVkIHNwYWNlCi0gICAg
Ly8gaXMgdG9vIGxhcmdlLCB0aGVuIHdlIHdpbGwgZG8gaW5kaXZpZHVhbCByZWN0IHBhaW50aW5n
IGluc3RlYWQuCi0gICAgdW5zaWduZWQgYm91bmRzQXJlYSA9IGJvdW5kcy53aWR0aCgpICogYm91
bmRzLmhlaWdodCgpOwotICAgIHVuc2lnbmVkIHJlY3RzQXJlYSA9IDA7Ci0gICAgZm9yIChhdXRv
JiByZWN0IDogcmVjdHMpCi0gICAgICAgIHJlY3RzQXJlYSArPSByZWN0LndpZHRoKCkgKiByZWN0
LmhlaWdodCgpOwotCi0gICAgZG91YmxlIHdhc3RlZFNwYWNlID0gMSAtIChzdGF0aWNfY2FzdDxk
b3VibGU+KHJlY3RzQXJlYSkgLyBib3VuZHNBcmVhKTsKLQotICAgIHJldHVybiB3YXN0ZWRTcGFj
ZSA8PSB3YXN0ZWRTcGFjZVRocmVzaG9sZDsKLX0KLQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdB
cmVhOjpkaXNwbGF5KFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgQVNTRVJUKCFtX2lz
UGFpbnRpbmdTdXNwZW5kZWQpOwotICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0KTsKLSAgICBB
U1NFUlQoIW1fd2ViUGFnZS5zaXplKCkuaXNFbXB0eSgpKTsKLQotICAgIG1fd2ViUGFnZS5sYXlv
dXRJZk5lZWRlZCgpOwotCi0gICAgLy8gVGhlIGxheW91dCBtYXkgaGF2ZSBwdXQgdGhlIHBhZ2Ug
aW50byBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLiBJZiB0aGUgTGF5ZXJUcmVlSG9zdCBp
cwotICAgIC8vIGluIGNoYXJnZSBvZiBkaXNwbGF5aW5nLCB3ZSBoYXZlIG5vdGhpbmcgbW9yZSB0
byBkby4KLSAgICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICByZXR1cm47Ci0KLSAgICB1
cGRhdGVJbmZvLnZpZXdTaXplID0gbV93ZWJQYWdlLnNpemUoKTsKLSAgICB1cGRhdGVJbmZvLmRl
dmljZVNjYWxlRmFjdG9yID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9y
KCk7Ci0KLSAgICBJbnRSZWN0IGJvdW5kcyA9IG1fZGlydHlSZWdpb24uYm91bmRzKCk7Ci0gICAg
QVNTRVJUKG1fd2ViUGFnZS5ib3VuZHMoKS5jb250YWlucyhib3VuZHMpKTsKLQotICAgIEludFNp
emUgYml0bWFwU2l6ZSA9IGJvdW5kcy5zaXplKCk7Ci0gICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IgPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICBiaXRt
YXBTaXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShiaXRtYXBTaXpl
LCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwotICAgIGlmICghYml0bWFwKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWJpdG1hcC0+Y3JlYXRlSGFuZGxlKHVwZGF0ZUluZm8u
Yml0bWFwSGFuZGxlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPEludFJlY3Q+IHJl
Y3RzID0gbV9kaXJ0eVJlZ2lvbi5yZWN0cygpOwotCi0gICAgaWYgKHNob3VsZFBhaW50Qm91bmRz
UmVjdChib3VuZHMsIHJlY3RzKSkgewotICAgICAgICByZWN0cy5jbGVhcigpOwotICAgICAgICBy
ZWN0cy5hcHBlbmQoYm91bmRzKTsKLSAgICB9Ci0KLSAgICB1cGRhdGVJbmZvLnNjcm9sbFJlY3Qg
PSBtX3Njcm9sbFJlY3Q7Ci0gICAgdXBkYXRlSW5mby5zY3JvbGxPZmZzZXQgPSBtX3Njcm9sbE9m
ZnNldDsKLQotICAgIG1fZGlydHlSZWdpb24gPSBSZWdpb24oKTsKLSAgICBtX3Njcm9sbFJlY3Qg
PSBJbnRSZWN0KCk7Ci0gICAgbV9zY3JvbGxPZmZzZXQgPSBJbnRTaXplKCk7Ci0KLSAgICBhdXRv
IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Ci0gICAg
Z3JhcGhpY3NDb250ZXh0LT5hcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9y
KTsKLQotICAgIHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcyA9IGJvdW5kczsKLQotICAgIGdy
YXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1ib3VuZHMueCgpLCAtYm91bmRzLnkoKSk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0cykgewotICAgICAgICBtX3dlYlBhZ2UuZHJhd1JlY3Qo
KmdyYXBoaWNzQ29udGV4dCwgcmVjdCk7Ci0gICAgICAgIHVwZGF0ZUluZm8udXBkYXRlUmVjdHMu
YXBwZW5kKHJlY3QpOwotICAgIH0KLQotICAgIC8vIExheW91dCBjYW4gdHJpZ2dlciBtb3JlIGNh
bGxzIHRvIHNldE5lZWRzRGlzcGxheSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBwcm9jZXNzIHRoZW0K
LSAgICAvLyB1bnRpbCB0aGUgVUkgcHJvY2VzcyBoYXMgcGFpbnRlZCB0aGUgdXBkYXRlLCBzbyB3
ZSBzdG9wIHRoZSB0aW1lciBoZXJlLgotICAgIG1fZGlzcGxheVRpbWVyLnN0b3AoKTsKLX0KLQog
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19NVUxUSVBST0NFU1MpCiB2b2lkIENvb3JkaW5h
dGVkRHJhd2luZ0FyZWE6OmRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2Rl
cikKIHsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICBtX2xheWVyVHJlZUhvc3Qt
PmRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKGNvbm5lY3Rpb24sIGRl
Y29kZXIpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAjZW5kaWYKIApAQCAtNjMw
LDkgKzM2Myw2IEBAIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6YXR0YWNoVmlld092ZXJs
YXlHcmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiBmcmFtCiAgICAgaWYgKCFmcmFtZS0+aXNN
YWluRnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3Qp
Ci0gICAgICAgIHJldHVybjsKLQogICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCogY29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0ID0gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
Kj4obV9sYXllclRyZWVIb3N0LmdldCgpKTsKICAgICBjb29yZGluYXRlZExheWVyVHJlZUhvc3Qt
PnNldFZpZXdPdmVybGF5Um9vdExheWVyKHZpZXdPdmVybGF5Um9vdExheWVyKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWEuaAppbmRl
eCA4MjA0ZDNhM2VlYTcyYjE0NjVlZjM4OGMwZjcyZjUyYzkyZDIzYjk5Li44ODYzOGE5YTVhMTBh
YzczYzdkMmE5NDJkNTQzMjEyY2RhNDcxOGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdB
cmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYS5oCkBAIC03Nyw3ICs3Nyw2IEBAIHByaXZh
dGU6CiAKICAgICAvLyBJUEMgbWVzc2FnZSBoYW5kbGVycy4KICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgYm9vbCBy
ZXNwb25kSW1tZWRpYXRlbHksIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIHN1c3BlbmRQYWludGluZygpOwogICAgIHZpcnR1YWwgdm9pZCByZXN1bWVQYWludGluZygp
OwogCkBAIC04OCwxMSArODcsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgZXhpdEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlUGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZXhpdENvbXBvc2l0aW5n
VGltZXIuaXNBY3RpdmUoKTsgfQogICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKCkgeyB9CiAKLSAgICB2b2lkIHNjaGVkdWxlRGlzcGxheSgpOwotICAgIHZvaWQgZGlzcGxh
eVRpbWVyRmlyZWQoKTsKLSAgICB2b2lkIGRpc3BsYXkoKTsKLSAgICB2b2lkIGRpc3BsYXkoVXBk
YXRlSW5mbyYpOwotCiAgICAgdWludDY0X3QgbV9iYWNraW5nU3RvcmVTdGF0ZUlEOwogCiAgICAg
V2ViQ29yZTo6UmVnaW9uIG1fZGlydHlSZWdpb247CkBAIC0xMDksMTAgKzEwMyw2IEBAIHByaXZh
dGU6CiAgICAgLy8gd2Ugbm9ybWFsbHkgc2VuZCB0byB0aGUgVUkgcHJvY2Vzcy4KICAgICBib29s
IG1fc2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlOwogCi0gICAgLy8gV2hldGhl
ciB3ZSdyZSB3YWl0aW5nIGZvciBhIERpZFVwZGF0ZSBtZXNzYWdlLiBVc2VkIGZvciB0aHJvdHRs
aW5nIHBhaW50cyBzbyB0aGF0IHRoZQotICAgIC8vIHdlYiBwcm9jZXNzIHdvbid0IHBhaW50IG1v
cmUgZnJlcXVlbnQgdGhhbiB0aGUgVUkgcHJvY2VzcyBjYW4gaGFuZGxlLgotICAgIGJvb2wgbV9p
c1dhaXRpbmdGb3JEaWRVcGRhdGU7Ci0KICAgICAvLyBUcnVlIGJldHdlZW4gc2VuZGluZyB0aGUg
J2VudGVyIGNvbXBvc2l0aW5nJyBtZXNzYWdlcywgYW5kIHRoZSAnZXhpdCBjb21wb3NpdGluZycg
bWVzc2FnZS4KICAgICBib29sIG1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXM7
CiAKQEAgLTEyOCw3ICsxMTgsNiBAQCBwcml2YXRlOgogICAgIC8vIHdvbid0IHBhaW50IHVudGls
IHBhaW50aW5nIGhhcyByZXN1bWVkIGFnYWluLgogICAgIGJvb2wgbV9pc1BhaW50aW5nU3VzcGVu
ZGVkOwogCi0gICAgUnVuTG9vcDo6VGltZXI8Q29vcmRpbmF0ZWREcmF3aW5nQXJlYT4gbV9kaXNw
bGF5VGltZXI7CiAgICAgUnVuTG9vcDo6VGltZXI8Q29vcmRpbmF0ZWREcmF3aW5nQXJlYT4gbV9l
eGl0Q29tcG9zaXRpbmdUaW1lcjsKIAogICAgIC8vIFRoZSBsYXllciB0cmVlIGhvc3QgdGhhdCBo
YW5kbGVzIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266895</attachid>
            <date>2015-12-08 09:14:25 -0800</date>
            <delta_ts>2015-12-09 01:43:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151987-20151209021224.patch</filename>
            <type>text/plain</type>
            <size>37089</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkzNzQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZGM1Nzk4OGJkYTljMWZl
MjQyYTk0MTcwMTY3NTY1MDAxMjFhNzljMi4uYjM4MDcxMTM4ZWUwYTg4YzYyZmJkZGY4YjQ1ZTQ3
OTJmYTM5YTI5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQwIEBACiAyMDE1LTEyLTA4ICBSeXVh
biBDaG9pICA8cnl1YW4uY2hvaUBuYXZlcmNvcnAuY29tPgogCisgICAgICAgIFtDb29yZGluYXRl
ZEdyYXBoaWNzXSBsYXllclRyZWVIb3N0IGFsd2F5cyBleGlzdCBpbiBDb29yZGluYXRlZERyYXdp
bmdBcmVhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTE5ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
b29yZGluYXRlZEdyYXBoaWNzIHVzaW5nIFVJIHNpZGUgY29tcG9zaXRvciBhbHdheXMgZm9yY2Vz
IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLgorICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCBk
ZWFkIGNvZGUgZm9yIGxheWVyVHJlZUhvc3Qgd2hpY2ggYWx3YXlzIGV4aXN0cy4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWFQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6
cGFpbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdBcmVh
UHJveHk6OnNldEJhY2tpbmdTdG9yZUlzRGlzY2FyZGFibGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6ZGlkVXBkYXRlQmFj
a2luZ1N0b3JlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZERy
YXdpbmdBcmVhUHJveHk6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6aW5jb3Jwb3Jh
dGVVcGRhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdB
cmVhUHJveHk6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmRpc2NhcmRCYWNraW5n
U3RvcmVTb29uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWREcmF3aW5n
QXJlYVByb3h5OjpkaXNjYXJkQmFja2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaDoK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5OjpzZXRCYWNraW5n
U3RvcmVJc0Rpc2NhcmRhYmxlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmxheWVySG9zdERp
ZEZsdXNoTGF5ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWREcmF3
aW5nQXJlYTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2gpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdBcmVhOjpkaWRVcGRhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdBcmVhOjplbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRE
cmF3aW5nQXJlYTo6c2NoZWR1bGVEaXNwbGF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6ZGlzcGxheVRpbWVyRmlyZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZERyYXdpbmdBcmVhOjpkaXNwbGF5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6c2hvdWxkUGFpbnRCb3VuZHNSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6YXR0YWNoVmlld092ZXJsYXlHcmFw
aGljc0xheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhLmg6CisKKzIwMTUtMTItMDggIFJ5
dWFuIENob2kgIDxyeXVhbi5jaG9pQG5hdmVyY29ycC5jb20+CisKICAgICAgICAgW0VGTF0gQWRk
IEFQSSB0byBwcm92aWRlIHByZWZlcmVuY2VzIGJlZm9yZSBjcmVhdGluZyBld2tfdmlldwogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNTg3CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4
IGM4NDJiMWIwMDgwYTBlMDVmMmU5YzRkYzhiYzY2NmMxNTg4Nzk3MDkuLmRjMWJiNzlmZmZhMTFh
OGRkZWM2NmVjNzZkYTgxNzgxZDFkYmE0ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmNwcApAQCAtNTQsMTIgKzU0LDkgQEAgQ29vcmRpbmF0
ZWREcmF3aW5nQXJlYVByb3h5OjpDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkoV2ViUGFnZVBy
b3h5JiB3ZWJQYWdlUHIKICAgICAsIG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQoMCkKICAgICAs
IG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoZmFsc2UpCiAgICAgLCBt
X2hhc1JlY2VpdmVkRmlyc3RVcGRhdGUoZmFsc2UpCi0gICAgLCBtX2lzQmFja2luZ1N0b3JlRGlz
Y2FyZGFibGUodHJ1ZSkKLSAgICAsIG1fZGlzY2FyZEJhY2tpbmdTdG9yZVRpbWVyKFJ1bkxvb3A6
OmN1cnJlbnQoKSwgdGhpcywgJkNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6ZGlzY2FyZEJh
Y2tpbmdTdG9yZSkKIHsKICAgICAvLyBDb25zdHJ1Y3QgdGhlIHByb3h5IGVhcmx5IHRvIGFsbG93
IG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhlIHdlYiBwcm9jZXNzIHdoaWxlIEFDIGlzIGVudGVy
ZWQgdGhlcmUuCi0gICAgaWYgKHdlYlBhZ2VQcm94eS5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygp
LmZvcmNlQ29tcG9zaXRpbmdNb2RlKCkpCi0gICAgICAgIG1fY29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkgPSBzdGQ6Om1ha2VfdW5pcXVlPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
Pih0aGlzKTsKKyAgICBtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5ID0gc3RkOjptYWtl
X3VuaXF1ZTxDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eT4odGhpcyk7CiB9CiAKIENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6fkNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eSgpCkBA
IC02OSw0OSArNjYsNiBAQCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6On5Db29yZGluYXRl
ZERyYXdpbmdBcmVhUHJveHkoKQogICAgICAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUoKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OnBhaW50KEJhY2tp
bmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCwgUmVnaW9uJiB1bnBhaW50ZWRSZWdpb24pCi17Ci0gICAgdW5wYWludGVkUmVnaW9uID0g
cmVjdDsKLQotICAgIGlmIChpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQgPD0g
bV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRCk7Ci0gICAgaWYgKG1fY3VycmVudEJhY2tpbmdTdG9y
ZVN0YXRlSUQgPCBtX25leHRCYWNraW5nU3RvcmVTdGF0ZUlEKSB7Ci0gICAgICAgIC8vIFRlbGwg
dGhlIHdlYiBwcm9jZXNzIHRvIGRvIGEgZnVsbCBiYWNraW5nIHN0b3JlIHVwZGF0ZSBub3csIGlu
IGNhc2Ugd2UgcHJldmlvdXNseSB0b2xkCi0gICAgICAgIC8vIGl0IGFib3V0IG91ciBuZXh0IHN0
YXRlIGJ1dCBkaWRuJ3QgcmVxdWVzdCBhbiBpbW1lZGlhdGUgdXBkYXRlLgotICAgICAgICBzZW5k
VXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoUmVzcG9uZEltbWVkaWF0ZWx5KTsKLQotICAgICAgICAv
LyBJZiB3ZSBoYXZlbid0IHlldCByZWNlaXZlZCBvdXIgZmlyc3QgYml0cyBmcm9tIHRoZSBXZWJQ
cm9jZXNzIHRoZW4gZG9uJ3QgcGFpbnQgYW55dGhpbmcuCi0gICAgICAgIGlmICghbV9oYXNSZWNl
aXZlZEZpcnN0VXBkYXRlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtX2lz
V2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKSB7Ci0gICAgICAgICAgICAvLyBX
YWl0IGZvciBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UgdGhhdCBjb250YWlu
cyB0aGUgbmV3IGJpdHMgYmVmb3JlIHdlIHBhaW50Ci0gICAgICAgICAgICAvLyB3aGF0J3MgY3Vy
cmVudGx5IGluIHRoZSBiYWNraW5nIHN0b3JlLgotICAgICAgICAgICAgd2FpdEZvckFuZERpc3Bh
dGNoRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IERpc3BhdGNoaW5nIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIChlaXRoZXIgYmVuZWF0aCBz
ZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgb3IKLSAgICAgICAgLy8gYmVuZWF0aCB3YWl0Rm9y
QW5kRGlzcGF0Y2hEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSkgY291bGQgZGVzdHJveSBvdXIg
YmFja2luZyBzdG9yZSBvcgotICAgICAgICAvLyBjaGFuZ2UgdGhlIGNvbXBvc2l0aW5nIG1vZGUu
Ci0gICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUgfHwgaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNT
RVJUKCFtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKTsKLSAgICAgICAg
aWYgKCFtX2JhY2tpbmdTdG9yZSkgewotICAgICAgICAgICAgLy8gVGhlIHZpZXcgaGFzIGFza2Vk
IHVzIHRvIHBhaW50IGJlZm9yZSB0aGUgd2ViIHByb2Nlc3MgaGFzIHBhaW50ZWQgYW55dGhpbmcu
IFRoZXJlJ3MKLSAgICAgICAgICAgIC8vIG5vdGhpbmcgd2UgY2FuIGRvLgotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9iYWNraW5nU3RvcmUtPnBhaW50KGNv
bnRleHQsIHJlY3QpOwotICAgIHVucGFpbnRlZFJlZ2lvbi5zdWJ0cmFjdChJbnRSZWN0KEludFBv
aW50KCksIG1fYmFja2luZ1N0b3JlLT5zaXplKCkpKTsKLQotICAgIGRpc2NhcmRCYWNraW5nU3Rv
cmVTb29uKCk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVW
aWV3cG9ydCgpCiB7CiAgICAgbV93ZWJQYWdlUHJveHkuc2V0Vmlld05lZWRzRGlzcGxheSh2aWV3
cG9ydFZpc2libGVSZWN0KCkpOwpAQCAtMTM2LDM5ICs5MCwxNSBAQCB2b2lkIENvb3JkaW5hdGVk
RHJhd2luZ0FyZWFQcm94eTo6dmlzaWJpbGl0eURpZENoYW5nZSgpCiB7CiAgICAgLy8gSWYgd2Ug
ZG9uJ3QgaGF2ZSBhIGJhY2tpbmcgc3RvcmUsIGdvIGFoZWFkIGFuZCBtYXJrIHRoZSBiYWNraW5n
IHN0b3JlIGFzIGJlaW5nIGNoYW5nZWQgc28KICAgICAvLyB0aGF0IHdoZW4gcGFpbnQgd2UnbGwg
YWN0dWFsbHkgd2FpdCBmb3Igc29tZXRoaW5nIHRvIHBhaW50IGFuZCBub3QgZmxhc2ggd2hpdGUu
Ci0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZSAmJiBtX2xheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgp
KQorICAgIGlmIChtX2xheWVyVHJlZUNvbnRleHQuaXNFbXB0eSgpKQogICAgICAgICBiYWNraW5n
U3RvcmVTdGF0ZURpZENoYW5nZShEb05vdFJlc3BvbmRJbW1lZGlhdGVseSk7CiB9CiAKLXZvaWQg
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5OjpzZXRCYWNraW5nU3RvcmVJc0Rpc2NhcmRhYmxl
KGJvb2wgaXNCYWNraW5nU3RvcmVEaXNjYXJkYWJsZSkKLXsKLSAgICBpZiAobV9pc0JhY2tpbmdT
dG9yZURpc2NhcmRhYmxlID09IGlzQmFja2luZ1N0b3JlRGlzY2FyZGFibGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1faXNCYWNraW5nU3RvcmVEaXNjYXJkYWJsZSA9IGlzQmFja2luZ1N0b3Jl
RGlzY2FyZGFibGU7Ci0gICAgaWYgKG1faXNCYWNraW5nU3RvcmVEaXNjYXJkYWJsZSkKLSAgICAg
ICAgZGlzY2FyZEJhY2tpbmdTdG9yZVNvb24oKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZGlzY2Fy
ZEJhY2tpbmdTdG9yZVRpbWVyLnN0b3AoKTsKLX0KLQogdm9pZCBDb29yZGluYXRlZERyYXdpbmdB
cmVhUHJveHk6OndhaXRGb3JCYWNraW5nU3RvcmVVcGRhdGVPbk5leHRQYWludCgpCiB7CiAgICAg
bV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlID0gdHJ1ZTsKIH0KIAotdm9pZCBDb29yZGluYXRlZERy
YXdpbmdBcmVhUHJveHk6OnVwZGF0ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25z
dCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewotICAgIEFTU0VSVF9BUkcoYmFja2luZ1N0b3Jl
U3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJRCA8PSBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0
ZUlEKTsKLSAgICBpZiAoYmFja2luZ1N0b3JlU3RhdGVJRCA8IG1fY3VycmVudEJhY2tpbmdTdG9y
ZVN0YXRlSUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGNh
c2Ugd2hlcmUgdGhlIHZpZXcgaXMgaGlkZGVuLgotCi0gICAgaW5jb3Jwb3JhdGVVcGRhdGUodXBk
YXRlSW5mbyk7Ci0gICAgbV93ZWJQYWdlUHJveHkucHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OkRy
YXdpbmdBcmVhOjpEaWRVcGRhdGUoKSwgbV93ZWJQYWdlUHJveHkucGFnZUlEKCkpOwotfQotCiB2
b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6ZGlkVXBkYXRlQmFja2luZ1N0b3JlU3Rh
dGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRl
SW5mbywgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKIHsKICAgICBB
U1NFUlRfQVJHKGJhY2tpbmdTdG9yZVN0YXRlSUQsIGJhY2tpbmdTdG9yZVN0YXRlSUQgPD0gbV9u
ZXh0QmFja2luZ1N0b3JlU3RhdGVJRCk7CkBAIC0xOTYsMTYgKzEyNiw2IEBAIHZvaWQgQ29vcmRp
bmF0ZWREcmF3aW5nQXJlYVByb3h5OjpkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50NjRf
dCBiYWNraW5nU3RvCiAgICAgICAgIHNlbmRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShSZXNwb25k
SW1tZWRpYXRlbHkpOwogICAgIGVsc2UKICAgICAgICAgbV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRl
ID0gdHJ1ZTsKLQotICAgIGlmIChpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSkgewot
ICAgICAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIElmIHdlIGhhdmUgYSBiYWNraW5nIHN0b3JlIHRoZSByaWdodCBzaXplLCByZXVz
ZSBpdC4KLSAgICBpZiAobV9iYWNraW5nU3RvcmUgJiYgKG1fYmFja2luZ1N0b3JlLT5zaXplKCkg
IT0gdXBkYXRlSW5mby52aWV3U2l6ZSB8fCBtX2JhY2tpbmdTdG9yZS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKSAhPSB1cGRhdGVJbmZvLmRldmljZVNjYWxlRmFjdG9yKSkKLSAgICAgICAgbV9iYWNraW5n
U3RvcmUgPSBudWxscHRyOwotICAgIGluY29ycG9yYXRlVXBkYXRlKHVwZGF0ZUluZm8pOwogfQog
CiB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6ZW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBMYXllclRyZWVD
b250ZXh0JiBsYXllclRyZWVDb250ZXh0KQpAQCAtMjI0LDggKzE0NCw2IEBAIHZvaWQgQ29vcmRp
bmF0ZWREcmF3aW5nQXJlYVByb3h5OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWlu
dDY0X3QgYmFja2luCiAgICAgICAgIHJldHVybjsKIAogICAgIGV4aXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSgpOwotCi0gICAgaW5jb3Jwb3JhdGVVcGRhdGUodXBkYXRlSW5mbyk7CiB9CiAK
IHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBMYXllclRyZWVD
b250ZXh0JiBsYXllclRyZWVDb250ZXh0KQpAQCAtMjM3LDM0ICsxNTUsNiBAQCB2b2lkIENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
dWludDY0X3QgYmFjawogICAgIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVy
VHJlZUNvbnRleHQpOwogfQogCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6aW5j
b3Jwb3JhdGVVcGRhdGUoY29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKLXsKLSAgICBBU1NF
UlQoIWlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKTsKLQotICAgIGlmICh1cGRhdGVJ
bmZvLnVwZGF0ZVJlY3RCb3VuZHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIW1fYmFja2luZ1N0b3JlKQotICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IHN0ZDo6bWFrZV91
bmlxdWU8QmFja2luZ1N0b3JlPih1cGRhdGVJbmZvLnZpZXdTaXplLCB1cGRhdGVJbmZvLmRldmlj
ZVNjYWxlRmFjdG9yLCBtX3dlYlBhZ2VQcm94eSk7Ci0KLSAgICBtX2JhY2tpbmdTdG9yZS0+aW5j
b3Jwb3JhdGVVcGRhdGUodXBkYXRlSW5mbyk7Ci0KLSAgICBib29sIHNob3VsZFNjcm9sbCA9ICF1
cGRhdGVJbmZvLnNjcm9sbFJlY3QuaXNFbXB0eSgpOwotCi0gICAgaWYgKHNob3VsZFNjcm9sbCkK
LSAgICAgICAgbV93ZWJQYWdlUHJveHkuc2Nyb2xsVmlldyh1cGRhdGVJbmZvLnNjcm9sbFJlY3Qs
IHVwZGF0ZUluZm8uc2Nyb2xsT2Zmc2V0KTsKLQotICAgIGlmIChzaG91bGRTY3JvbGwgJiYgIW1f
d2ViUGFnZVByb3h5LmNhblNjcm9sbFZpZXcoKSkKLSAgICAgICAgbV93ZWJQYWdlUHJveHkuc2V0
Vmlld05lZWRzRGlzcGxheShJbnRSZWN0KEludFBvaW50KCksIG1fd2ViUGFnZVByb3h5LnZpZXdT
aXplKCkpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZm9yIChhdXRvJiB1cGRhdGVSZWN0IDogdXBk
YXRlSW5mby51cGRhdGVSZWN0cykKLSAgICAgICAgICAgIG1fd2ViUGFnZVByb3h5LnNldFZpZXdO
ZWVkc0Rpc3BsYXkodXBkYXRlUmVjdCk7Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZFNjcm9sbCkK
LSAgICAgICAgbV93ZWJQYWdlUHJveHkuZGlzcGxheVZpZXcoKTsKLX0KLQogdm9pZCBDb29yZGlu
YXRlZERyYXdpbmdBcmVhUHJveHk6OmJhY2tpbmdTdG9yZVN0YXRlRGlkQ2hhbmdlKFJlc3BvbmRJ
bW1lZGlhdGVseU9yTm90IHJlc3BvbmRJbW1lZGlhdGVseU9yTm90KQogewogICAgICsrbV9uZXh0
QmFja2luZ1N0b3JlU3RhdGVJRDsKQEAgLTMyNCwxNyArMjE0LDEzIEBAIHZvaWQgQ29vcmRpbmF0
ZWREcmF3aW5nQXJlYVByb3h5OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0
IExheWVyVHJlCiB7CiAgICAgQVNTRVJUKCFpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
KSk7CiAKLSAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAgbV9sYXllclRyZWVDb250
ZXh0ID0gbGF5ZXJUcmVlQ29udGV4dDsKICAgICBtX3dlYlBhZ2VQcm94eS5lbnRlckFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOwotICAgIGlmICghbV9jb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk+
KHRoaXMpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6c2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVDb250ZW50c1Jl
Y3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7Ci0gICAg
aWYgKG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIG1fY29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHktPnNldFZpc2libGVDb250ZW50c1JlY3QodmlzaWJsZUNvbnRl
bnRzUmVjdCwgdHJhamVjdG9yeVZlY3Rvcik7CisgICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCh2aXNpYmxlQ29udGVudHNSZWN0LCB0cmFq
ZWN0b3J5VmVjdG9yKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmV4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCkBAIC0zNTMsMjMgKzIzOSw1IEBAIHZvaWQg
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZShjb25zdCBMYXllclRyCiAgICAgbV93ZWJQYWdlUHJveHkudXBkYXRlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRE
cmF3aW5nQXJlYVByb3h5OjpkaXNjYXJkQmFja2luZ1N0b3JlU29vbigpCi17Ci0gICAgaWYgKCFt
X2lzQmFja2luZ1N0b3JlRGlzY2FyZGFibGUgfHwgbV9kaXNjYXJkQmFja2luZ1N0b3JlVGltZXIu
aXNBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UnbGwgd2FpdCB0aGlzIG1h
bnkgc2Vjb25kcyBhZnRlciB0aGUgbGFzdCBwYWludCBiZWZvcmUgdGhyb3dpbmcgYXdheSBvdXIg
YmFja2luZyBzdG9yZSB0byBzYXZlIG1lbW9yeS4KLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUg
c21hcnRlciB0byBtYWtlIHRoaXMgZGVsYXkgYmFzZWQgb24gaG93IGV4cGVuc2l2ZSBwYWludGlu
ZyBpcy4gU2VlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzU1NzMzPi4KLSAgICBzdGF0aWMgY29uc3Qg
ZG91YmxlIGRpc2NhcmRCYWNraW5nU3RvcmVEZWxheSA9IDI7Ci0KLSAgICBtX2Rpc2NhcmRCYWNr
aW5nU3RvcmVUaW1lci5zdGFydE9uZVNob3QoZGlzY2FyZEJhY2tpbmdTdG9yZURlbGF5KTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OmRpc2NhcmRCYWNraW5nU3RvcmUo
KQotewotICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKLSAgICBiYWNraW5nU3RvcmVTdGF0
ZURpZENoYW5nZShEb05vdFJlc3BvbmRJbW1lZGlhdGVseSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAogI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
RHJhd2luZ0FyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmgKaW5kZXggN2I1NGRlMWQ3OWYx
NzZkYjFiMWU3YzMxNWNiN2YyN2IyMDVkMWMwOC4uMmJjNGZiY2E4YWQ2ZWYzOGU2ODUxZTc2MTNi
YmNiYTg4YmJkYTdjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYVByb3h5LmgKQEAgLTQ3LDggKzQ3LDYgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWFQcm94eShXZWJQYWdlUHJveHkmKTsKICAgICB2aXJ0dWFsIH5Db29y
ZGluYXRlZERyYXdpbmdBcmVhUHJveHkoKTsKIAotICAgIHZvaWQgcGFpbnQoQmFja2luZ1N0b3Jl
OjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFdlYkNv
cmU6OlJlZ2lvbiYgdW5wYWludGVkUmVnaW9uKTsKLQogICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gIW1fbGF5ZXJUcmVlQ29udGV4dC5pc0Vt
cHR5KCk7IH0KICAgICB2b2lkIHZpc2liaWxpdHlEaWRDaGFuZ2UoKTsKIApAQCAtNjgsMTggKzY2
LDE1IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoKTsKICAgICB2
aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBzZXRCYWNraW5nU3RvcmVJc0Rpc2NhcmRhYmxlKGJvb2wpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRCYWNraW5nU3RvcmVJc0Rpc2NhcmRhYmxlKGJvb2wpIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCB3YWl0Rm9yQmFja2luZ1N0b3JlVXBkYXRlT25OZXh0UGFpbnQoKTsKIAogICAgIC8vIElQQyBt
ZXNzYWdlIGhhbmRsZXJzCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZSh1aW50NjRfdCBiYWNraW5n
U3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJbmZvJik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0
IFVwZGF0ZUluZm8mLCBjb25zdCBMYXllclRyZWVDb250ZXh0Jik7CiAgICAgdmlydHVhbCB2b2lk
IGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3Rh
dGVJRCwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpOwogICAgIHZpcnR1YWwgdm9pZCBleGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29u
c3QgVXBkYXRlSW5mbyYpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBMYXllclRyZWVD
b250ZXh0Jik7CiAKLSAgICB2b2lkIGluY29ycG9yYXRlVXBkYXRlKGNvbnN0IFVwZGF0ZUluZm8m
KTsKLQogICAgIGVudW0gUmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QgeyBEb05vdFJlc3BvbmRJbW1l
ZGlhdGVseSwgUmVzcG9uZEltbWVkaWF0ZWx5IH07CiAgICAgdm9pZCBiYWNraW5nU3RvcmVTdGF0
ZURpZENoYW5nZShSZXNwb25kSW1tZWRpYXRlbHlPck5vdCk7CiAgICAgdm9pZCBzZW5kVXBkYXRl
QmFja2luZ1N0b3JlU3RhdGUoUmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QpOwpAQCAtODksOSArODQs
NiBAQCBwcml2YXRlOgogICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7
CiAgICAgdm9pZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRy
ZWVDb250ZXh0Jik7CiAKLSAgICB2b2lkIGRpc2NhcmRCYWNraW5nU3RvcmVTb29uKCk7Ci0gICAg
dm9pZCBkaXNjYXJkQmFja2luZ1N0b3JlKCk7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk+IG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk7
CiAKICAgICAvLyBUaGUgc3RhdGUgSUQgY29ycmVzcG9uZGluZyB0byBvdXIgY3VycmVudCBiYWNr
aW5nIHN0b3JlLiBVcGRhdGVkIHdoZW5ldmVyIHdlIGFsbG9jYXRlCkBAIC0xMTIsMTEgKzEwNCw2
IEBAIHByaXZhdGU6CiAKICAgICAvLyBGb3IgYSBuZXcgRHJhd2luZyBBcmVhIGRvbid0IGRyYXcg
YW55dGhpbmcgdW50aWwgdGhlIFdlYlByb2Nlc3MgaGFzIHNlbnQgb3ZlciB0aGUgZmlyc3QgY29u
dGVudC4KICAgICBib29sIG1faGFzUmVjZWl2ZWRGaXJzdFVwZGF0ZTsKLQotICAgIGJvb2wgbV9p
c0JhY2tpbmdTdG9yZURpc2NhcmRhYmxlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNraW5nU3Rv
cmU+IG1fYmFja2luZ1N0b3JlOwotCi0gICAgUnVuTG9vcDo6VGltZXI8Q29vcmRpbmF0ZWREcmF3
aW5nQXJlYVByb3h5PiBtX2Rpc2NhcmRCYWNraW5nU3RvcmVUaW1lcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZERyYXdpbmdBcmVhLmNwcAppbmRleCBlNTUxNzI4M2YzYTNjZjU5MjdkZTkzMGIzZmJjYWQ5
ZGVhOWI4Zjg2Li40OWNlOTFlZDg2NGQ4NWJmMDQ4MWE3YTg0ODBmMjMxOWQ1M2Q4OTRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVh
LmNwcApAQCAtNTEsOCArNTEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogQ29vcmRpbmF0ZWRE
cmF3aW5nQXJlYTo6fkNvb3JkaW5hdGVkRHJhd2luZ0FyZWEoKQogewotICAgIGlmIChtX2xheWVy
VHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+aW52YWxpZGF0ZSgpOworICAgIG1f
bGF5ZXJUcmVlSG9zdC0+aW52YWxpZGF0ZSgpOwogfQogCiBDb29yZGluYXRlZERyYXdpbmdBcmVh
OjpDb29yZGluYXRlZERyYXdpbmdBcmVhKFdlYlBhZ2UmIHdlYlBhZ2UsIGNvbnN0IFdlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCkBAIC02NSwxMiArNjQsMTAgQEAgQ29vcmRp
bmF0ZWREcmF3aW5nQXJlYTo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYShXZWJQYWdlJiB3ZWJQYWdl
LCBjb25zdCBXZWJQYWdlQ3IKICAgICAsIG1faXNQYWludGluZ0VuYWJsZWQodHJ1ZSkKICAgICAs
IG1faW5VcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShmYWxzZSkKICAgICAsIG1fc2hvdWxkU2VuZERp
ZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKGZhbHNlKQotICAgICwgbV9pc1dhaXRpbmdGb3JEaWRV
cGRhdGUoZmFsc2UpCiAgICAgLCBtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2Vz
KGZhbHNlKQogICAgICwgbV9sYXllclRyZWVTdGF0ZUlzRnJvemVuKGZhbHNlKQogICAgICwgbV93
YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGZhbHNlKQogICAgICwgbV9pc1Bh
aW50aW5nU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9kaXNwbGF5VGltZXIoUnVuTG9vcDo6bWFp
bigpLCB0aGlzLCAmQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6ZGlzcGxheVRpbWVyRmlyZWQpCiAg
ICAgLCBtX2V4aXRDb21wb3NpdGluZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkNvb3Jk
aW5hdGVkRHJhd2luZ0FyZWE6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSkKIHsKICAg
ICAvLyBBbHdheXMgdXNlIGNvbXBvc2l0aW5nIGluIENvb3JkaW5hdGVkR3JhcGhpY3MKQEAgLTg1
LDEzICs4Miw4IEBAIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2V0TmVlZHNEaXNwbGF5
KCkKICAgICBpZiAoIW1faXNQYWludGluZ0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX2xheWVyVHJlZUhvc3QpIHsKLSAgICAgICAgQVNTRVJUKG1fZGlydHlSZWdpb24uaXNF
bXB0eSgpKTsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROb25Db21wb3NpdGVkQ29udGVu
dHNOZWVkRGlzcGxheSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0TmVlZHNE
aXNwbGF5SW5SZWN0KG1fd2ViUGFnZS5ib3VuZHMoKSk7CisgICAgQVNTRVJUKG1fZGlydHlSZWdp
b24uaXNFbXB0eSgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5vbkNvbXBvc2l0ZWRDb250
ZW50c05lZWREaXNwbGF5KCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC05OSwyMCArOTEsOCBA
QCB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQogICAgIGlmICghbV9pc1BhaW50aW5nRW5hYmxlZCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgewotICAgICAgICBBU1NFUlQobV9k
aXJ0eVJlZ2lvbi5pc0VtcHR5KCkpOwotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5vbkNv
bXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0OwotICAgIGRpcnR5UmVjdC5p
bnRlcnNlY3QobV93ZWJQYWdlLmJvdW5kcygpKTsKLQotICAgIGlmIChkaXJ0eVJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKGRpcnR5UmVj
dCk7Ci0gICAgc2NoZWR1bGVEaXNwbGF5KCk7CisgICAgQVNTRVJUKG1fZGlydHlSZWdpb24uaXNF
bXB0eSgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05l
ZWREaXNwbGF5SW5SZWN0KHJlY3QpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6
OnNjcm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxE
ZWx0YSkKQEAgLTEyMCw2MyArMTAwLDE2IEBAIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6
c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNjCiAgICAg
aWYgKCFtX2lzUGFpbnRpbmdFbmFibGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9s
YXllclRyZWVIb3N0KSB7Ci0gICAgICAgIEFTU0VSVChtX3Njcm9sbFJlY3QuaXNFbXB0eSgpKTsK
LSAgICAgICAgQVNTRVJUKG1fc2Nyb2xsT2Zmc2V0LmlzRW1wdHkoKSk7Ci0gICAgICAgIEFTU0VS
VChtX2RpcnR5UmVnaW9uLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
Y3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoc2Nyb2xsUmVjdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoc2Nyb2xsUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICghbV9zY3JvbGxSZWN0LmlzRW1wdHkoKSAmJiBzY3JvbGxSZWN0ICE9IG1fc2Ny
b2xsUmVjdCkgewotICAgICAgICB1bnNpZ25lZCBzY3JvbGxBcmVhID0gc2Nyb2xsUmVjdC53aWR0
aCgpICogc2Nyb2xsUmVjdC5oZWlnaHQoKTsKLSAgICAgICAgdW5zaWduZWQgY3VycmVudFNjcm9s
bEFyZWEgPSBtX3Njcm9sbFJlY3Qud2lkdGgoKSAqIG1fc2Nyb2xsUmVjdC5oZWlnaHQoKTsKLQot
ICAgICAgICBpZiAoY3VycmVudFNjcm9sbEFyZWEgPj0gc2Nyb2xsQXJlYSkgewotICAgICAgICAg
ICAgLy8gVGhlIHJlY3QgYmVpbmcgc2Nyb2xsZWQgaXMgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhl
IHJlY3Qgd2UnZCBsaWtlIHRvIHNjcm9sbC4KLSAgICAgICAgICAgIC8vIEdvIGFoZWFkIGFuZCBq
dXN0IGludmFsaWRhdGUgdGhlIHNjcm9sbCByZWN0LgotICAgICAgICAgICAgc2V0TmVlZHNEaXNw
bGF5SW5SZWN0KHNjcm9sbFJlY3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gSnVzdCByZXBhaW50IHRoZSBlbnRpcmUgY3VycmVudCBzY3JvbGwgcmVjdCwg
d2UnbGwgc2Nyb2xsIHRoZSBuZXcgcmVjdCBpbnN0ZWFkLgotICAgICAgICBzZXROZWVkc0Rpc3Bs
YXlJblJlY3QobV9zY3JvbGxSZWN0KTsKLSAgICAgICAgbV9zY3JvbGxSZWN0ID0gSW50UmVjdCgp
OwotICAgICAgICBtX3Njcm9sbE9mZnNldCA9IEludFNpemUoKTsKLSAgICB9Ci0KLSAgICAvLyBH
ZXQgdGhlIHBhcnQgb2YgdGhlIGRpcnR5IHJlZ2lvbiB0aGF0IGlzIGluIHRoZSBzY3JvbGwgcmVj
dC4KLSAgICBSZWdpb24gZGlydHlSZWdpb25JblNjcm9sbFJlY3QgPSBpbnRlcnNlY3Qoc2Nyb2xs
UmVjdCwgbV9kaXJ0eVJlZ2lvbik7Ci0gICAgaWYgKCFkaXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgLy8gVGhlcmUgYXJlIHBhcnRzIG9mIHRoZSBkaXJ0eSByZWdp
b24gdGhhdCBhcmUgaW5zaWRlIHRoZSBzY3JvbGwgcmVjdC4KLSAgICAgICAgLy8gV2UgbmVlZCB0
byBzdWJ0cmFjdCB0aGVtIGZyb20gdGhlIHJlZ2lvbiwgbW92ZSB0aGVtIGFuZCByZS1hZGQgdGhl
bS4KLSAgICAgICAgbV9kaXJ0eVJlZ2lvbi5zdWJ0cmFjdChzY3JvbGxSZWN0KTsKLQotICAgICAg
ICAvLyBNb3ZlIHRoZSBkaXJ0eSBwYXJ0cy4KLSAgICAgICAgUmVnaW9uIG1vdmVkRGlydHlSZWdp
b25JblNjcm9sbFJlY3QgPSBpbnRlcnNlY3QodHJhbnNsYXRlKGRpcnR5UmVnaW9uSW5TY3JvbGxS
ZWN0LCBzY3JvbGxEZWx0YSksIHNjcm9sbFJlY3QpOwotCi0gICAgICAgIC8vIEFuZCBhZGQgdGhl
bSBiYWNrLgotICAgICAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKG1vdmVkRGlydHlSZWdpb25JblNj
cm9sbFJlY3QpOwotICAgIH0KKyAgICBBU1NFUlQobV9zY3JvbGxSZWN0LmlzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKG1fc2Nyb2xsT2Zmc2V0LmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fZGlydHlS
ZWdpb24uaXNFbXB0eSgpKTsKIAotICAgIC8vIENvbXB1dGUgdGhlIHNjcm9sbCByZXBhaW50IHJl
Z2lvbi4KLSAgICBSZWdpb24gc2Nyb2xsUmVwYWludFJlZ2lvbiA9IHN1YnRyYWN0KHNjcm9sbFJl
Y3QsIHRyYW5zbGF0ZShzY3JvbGxSZWN0LCBzY3JvbGxEZWx0YSkpOwotCi0gICAgbV9kaXJ0eVJl
Z2lvbi51bml0ZShzY3JvbGxSZXBhaW50UmVnaW9uKTsKLSAgICBzY2hlZHVsZURpc3BsYXkoKTsK
LQotICAgIG1fc2Nyb2xsUmVjdCA9IHNjcm9sbFJlY3Q7Ci0gICAgbV9zY3JvbGxPZmZzZXQgKz0g
c2Nyb2xsRGVsdGE7CisgICAgbV9sYXllclRyZWVIb3N0LT5zY3JvbGxOb25Db21wb3NpdGVkQ29u
dGVudHMoc2Nyb2xsUmVjdCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6cGFn
ZUJhY2tncm91bmRUcmFuc3BhcmVuY3lDaGFuZ2VkKCkKIHsKLSAgICBpZiAobV9sYXllclRyZWVI
b3N0KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5
Q2hhbmdlZCgpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+cGFnZUJhY2tncm91bmRUcmFuc3BhcmVu
Y3lDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2V0TGF5ZXJU
cmVlU3RhdGVJc0Zyb3plbihib29sIGlzRnJvemVuKQpAQCAtMTg2LDggKzExOSw3IEBAIHZvaWQg
Q29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2V0TGF5ZXJUcmVlU3RhdGVJc0Zyb3plbihib29sIGlz
RnJvemVuKQogCiAgICAgbV9sYXllclRyZWVTdGF0ZUlzRnJvemVuID0gaXNGcm96ZW47CiAKLSAg
ICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldExheWVy
Rmx1c2hTY2hlZHVsaW5nRW5hYmxlZCghaXNGcm96ZW4pOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+
c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKCFpc0Zyb3plbik7CiAKICAgICBpZiAoaXNG
cm96ZW4pCiAgICAgICAgIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuc3RvcCgpOwpAQCAtMjAxLDI4
ICsxMzMsMjIgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpmb3JjZVJlcGFpbnQoKQog
CiAgICAgbV93ZWJQYWdlLmxheW91dElmTmVlZGVkKCk7CiAKLSAgICBpZiAobV9sYXllclRyZWVI
b3N0KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGRvIHRoZSBzYW1lIHdvcmsgYXMg
dGhlIGxheWVySG9zdERpZEZsdXNoTGF5ZXJzIGZ1bmN0aW9uIGhlcmUsCi0gICAgICAgIC8vIGJ1
dCBjbGVhcmx5IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBjYWxsIHRoZSBmdW5jdGlvbiB3aXRo
IHRoYXQgbmFtZS4KLSAgICAgICAgLy8gQ29uc2lkZXIgcmVmYWN0b3JpbmcgYW5kIHJlbmFtaW5n
IGl0LgotICAgICAgICBpZiAobV9jb21wb3NpdGluZ0FjY29yZGluZ1RvUHJveHlNZXNzYWdlcykK
LSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Zm9yY2VSZXBhaW50KCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgLy8gQ2FsbCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVs
ZWRMYXllckZsdXNoKGZhbHNlKSBoZXJlIHRvCi0gICAgICAgICAgICAvLyBwcmV2ZW50IGxheWVy
SG9zdERpZEZsdXNoTGF5ZXJzKCkgZnJvbSBiZWluZyBjYWxsZWQgYSBzZWNvbmQgdGltZS4KLSAg
ICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1
bGVkTGF5ZXJGbHVzaChmYWxzZSk7Ci0gICAgICAgICAgICBsYXllckhvc3REaWRGbHVzaExheWVy
cygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhNRTogV2UgbmVlZCB0
byBkbyB0aGUgc2FtZSB3b3JrIGFzIHRoZSBsYXllckhvc3REaWRGbHVzaExheWVycyBmdW5jdGlv
biBoZXJlLAorICAgIC8vIGJ1dCBjbGVhcmx5IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBjYWxs
IHRoZSBmdW5jdGlvbiB3aXRoIHRoYXQgbmFtZS4KKyAgICAvLyBDb25zaWRlciByZWZhY3Rvcmlu
ZyBhbmQgcmVuYW1pbmcgaXQuCisgICAgaWYgKG1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5
TWVzc2FnZXMpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Zm9yY2VSZXBhaW50KCk7CisgICAg
ZWxzZSB7CisgICAgICAgIC8vIENhbGwgc2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVk
TGF5ZXJGbHVzaChmYWxzZSkgaGVyZSB0bworICAgICAgICAvLyBwcmV2ZW50IGxheWVySG9zdERp
ZEZsdXNoTGF5ZXJzKCkgZnJvbSBiZWluZyBjYWxsZWQgYSBzZWNvbmQgdGltZS4KKyAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5zZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZs
dXNoKGZhbHNlKTsKKyAgICAgICAgbGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKICAgICB9Ci0K
LSAgICBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZSA9IGZhbHNlOwotICAgIGRpc3BsYXkoKTsKIH0K
IAogYm9vbCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpmb3JjZVJlcGFpbnRBc3luYyh1aW50NjRf
dCBjYWxsYmFja0lEKQogewotICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3QgJiYgbV9sYXllclRy
ZWVIb3N0LT5mb3JjZVJlcGFpbnRBc3luYyhjYWxsYmFja0lEKTsKKyAgICByZXR1cm4gbV9sYXll
clRyZWVIb3N0LT5mb3JjZVJlcGFpbnRBc3luYyhjYWxsYmFja0lEKTsKIH0KIAogdm9pZCBDb29y
ZGluYXRlZERyYXdpbmdBcmVhOjpzZXRQYWludGluZ0VuYWJsZWQoYm9vbCBwYWludGluZ0VuYWJs
ZWQpCkBAIC0yNDIsOCArMTY4LDYgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjptYWlu
RnJhbWVDb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYKIAogdm9pZCBD
b29yZGluYXRlZERyYXdpbmdBcmVhOjpsYXllckhvc3REaWRGbHVzaExheWVycygpCiB7Ci0gICAg
QVNTRVJUKG1fbGF5ZXJUcmVlSG9zdCk7Ci0KICAgICBtX2xheWVyVHJlZUhvc3QtPmZvcmNlUmVw
YWludCgpOwogCiAgICAgaWYgKG1fc2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRl
ICYmICFleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVQZW5kaW5nKCkpIHsKQEAgLTI1MSw5
ICsxNzUsNiBAQCB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmxheWVySG9zdERpZEZsdXNo
TGF5ZXJzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9sYXllclRyZWVI
b3N0KQotICAgICAgICByZXR1cm47Ci0KICAgICBBU1NFUlQoIW1fY29tcG9zaXRpbmdBY2NvcmRp
bmdUb1Byb3h5TWVzc2FnZXMpOwogICAgIGlmICghZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlUGVuZGluZygpKSB7CiAgICAgICAgIG1fd2ViUGFnZS5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5n
QXJlYVByb3h5OjpFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKG1fYmFja2luZ1N0b3Jl
U3RhdGVJRCwgbV9sYXllclRyZWVIb3N0LT5sYXllclRyZWVDb250ZXh0KCkpKTsKQEAgLTI2Mywx
MCArMTg0LDcgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpsYXllckhvc3REaWRGbHVz
aExheWVycygpCiAKIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBDb29yZGluYXRlZERyYXdpbmdBcmVh
OjpncmFwaGljc0xheWVyRmFjdG9yeSgpCiB7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAg
ICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdC0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKTsKLQot
ICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3QtPmdyYXBoaWNzTGF5ZXJG
YWN0b3J5KCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBv
c2l0aW5nTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKQEAgLTI3NiwzMiArMTk0
LDIxIEBAIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllCiAgICAgLy8gdGhhdCB0YWtlcyB0aGUgbmV3
IHN0YXRlLgogCiAgICAgaWYgKGdyYXBoaWNzTGF5ZXIpIHsKLSAgICAgICAgaWYgKCFtX2xheWVy
VHJlZUhvc3QpIHsKLSAgICAgICAgICAgIC8vIFdlJ3JlIGFjdHVhbGx5IGVudGVyaW5nIGFjY2Vs
ZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUuCi0gICAgICAgICAgICBlbnRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKGdyYXBoaWNzTGF5ZXIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gV2UncmUgYWxyZWFkeSBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLCBidXQg
dGhlIHJvb3QgY29tcG9zaXRpbmcgbGF5ZXIgY2hhbmdlZC4KLQotICAgICAgICAgICAgbV9leGl0
Q29tcG9zaXRpbmdUaW1lci5zdG9wKCk7Ci0gICAgICAgICAgICBtX3dhbnRzVG9FeGl0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUgPSBmYWxzZTsKKyAgICAgICAgLy8gV2UncmUgYWxyZWFkeSBp
biBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLCBidXQgdGhlIHJvb3QgY29tcG9zaXRpbmcg
bGF5ZXIgY2hhbmdlZC4KIAotICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBzZW50IHRoZSBF
bnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlIG1lc3NhZ2UsIG1ha2Ugc3VyZSB0aGF0IHRo
ZQotICAgICAgICAgICAgLy8gbGF5ZXIgdHJlZSBob3N0IGNhbGxzIHVzIGJhY2sgYWZ0ZXIgdGhl
IG5leHQgbGF5ZXIgZmx1c2ggc28gd2UgY2FuIHNlbmQgaXQgdGhlbi4KLSAgICAgICAgICAgIGlm
ICghbV9jb21wb3NpdGluZ0FjY29yZGluZ1RvUHJveHlNZXNzYWdlcykKLSAgICAgICAgICAgICAg
ICBtX2xheWVyVHJlZUhvc3QtPnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVy
Rmx1c2godHJ1ZSk7CisgICAgICAgIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuc3RvcCgpOworICAg
ICAgICBtX3dhbnRzVG9FeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUgPSBmYWxzZTsKIAot
ICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290Q29tcG9zaXRpbmdMYXllcihncmFw
aGljc0xheWVyKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2xheWVy
VHJlZUhvc3QpCi0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKDApOworICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IHNlbnQgdGhlIEVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUgbWVzc2FnZSwgbWFrZSBzdXJlIHRoYXQgdGhlCisgICAgICAg
IC8vIGxheWVyIHRyZWUgaG9zdCBjYWxscyB1cyBiYWNrIGFmdGVyIHRoZSBuZXh0IGxheWVyIGZs
dXNoIHNvIHdlIGNhbiBzZW5kIGl0IHRoZW4uCisgICAgICAgIGlmICghbV9jb21wb3NpdGluZ0Fj
Y29yZGluZ1RvUHJveHlNZXNzYWdlcykKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0
U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaCh0cnVlKTsKICAgICB9Cisg
ICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290Q29tcG9zaXRpbmdMYXllcihncmFwaGljc0xheWVy
KTsKIH0KIAogdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzY2hlZHVsZUNvbXBvc2l0aW5n
TGF5ZXJGbHVzaCgpCiB7Ci0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIHJldHVy
bjsKICAgICBtX2xheWVyVHJlZUhvc3QtPnNjaGVkdWxlTGF5ZXJGbHVzaCgpOwogfQogCkBAIC0z
MjUsMTIgKzIzMiw5IEBAIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6dXBkYXRlQmFja2lu
Z1N0b3JlU3RhdGUodWludDY0X3Qgc3RhdGVJRCwgYm9vbCByZXNwCiAgICAgICAgIG1fd2ViUGFn
ZS5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICBtX3dlYlBhZ2Uuc2Nyb2xsTWFpbkZyYW1lSWZO
b3RBdE1heFNjcm9sbFBvc2l0aW9uKHNjcm9sbE9mZnNldCk7CiAKLSAgICAgICAgaWYgKG1fbGF5
ZXJUcmVlSG9zdCkgewotICAgICAgICAgICAgLy8gQ29vcmRpbmF0ZWQgR3JhcGhpY3Mgc2V0cyB0
aGUgc2l6ZSBvZiB0aGUgcm9vdCBsYXllciB0byBjb250ZW50cyBzaXplLgotICAgICAgICAgICAg
aWYgKCFtX3dlYlBhZ2UudXNlRml4ZWRMYXlvdXQoKSkKLSAgICAgICAgICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPnNpemVEaWRDaGFuZ2UobV93ZWJQYWdlLnNpemUoKSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgbV9kaXJ0eVJlZ2lvbiA9IG1fd2ViUGFnZS5ib3VuZHMoKTsKKyAgICAg
ICAgLy8gQ29vcmRpbmF0ZWQgR3JhcGhpY3Mgc2V0cyB0aGUgc2l6ZSBvZiB0aGUgcm9vdCBsYXll
ciB0byBjb250ZW50cyBzaXplLgorICAgICAgICBpZiAoIW1fd2ViUGFnZS51c2VGaXhlZExheW91
dCgpKQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zaXplRGlkQ2hhbmdlKG1fd2ViUGFn
ZS5zaXplKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChzaXplID09IG1fd2ViUGFn
ZS5zaXplKCkpOwogICAgICAgICBpZiAoIW1fc2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9y
ZVN0YXRlKSB7CkBAIC0zNDAsMTMgKzI0NCw2IEBAIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJl
YTo6dXBkYXRlQmFja2luZ1N0b3JlU3RhdGUodWludDY0X3Qgc3RhdGVJRCwgYm9vbCByZXNwCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBUaGUgVUkgcHJvY2VzcyBoYXMgdXBkYXRlZCB0byBh
IG5ldyBiYWNraW5nIHN0b3JlIHN0YXRlLiBBbnkgVXBkYXRlIG1lc3NhZ2VzIHdlIHNlbnQgYmVm
b3JlCi0gICAgLy8gdGhpcyBwb2ludCB3aWxsIGJlIGlnbm9yZWQuIFdlIHdhaXQgdG8gc2V0IHRo
aXMgdG8gZmFsc2UgdW50aWwgYWZ0ZXIgdXBkYXRpbmcgdGhlIHBhZ2UncwotICAgIC8vIHNpemUg
c28gdGhhdCBhbnkgZGlzcGxheXMgdHJpZ2dlcmVkIGJ5IHRoZSByZWxheW91dCB3aWxsIGJlIGln
bm9yZWQuIElmIHdlJ3JlIHN1cHBvc2VkIHRvCi0gICAgLy8gcmVzcG9uZCB0byB0aGUgVXBkYXRl
QmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSBpbW1lZGlhdGVseSwgd2UnbGwgZG8gYSBkaXNwbGF5
IGFueXdheSBpbgotICAgIC8vIHNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZTsgb3RoZXJ3
aXNlIHdlIHNob3VsZG4ndCBkbyBvbmUgcmlnaHQgbm93LgotICAgIG1faXNXYWl0aW5nRm9yRGlk
VXBkYXRlID0gZmFsc2U7Ci0KICAgICBpZiAocmVzcG9uZEltbWVkaWF0ZWx5KSB7CiAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0byByZXN1bWUgcGFpbnRpbmcgaWYgd2UncmUgc3VwcG9zZWQgdG8gcmVz
cG9uZCBpbW1lZGlhdGVseSwgb3RoZXJ3aXNlIHdlJ2xsIGp1c3QKICAgICAgICAgLy8gc2VuZCBi
YWNrIGFuIGVtcHR5IFVwZGF0ZUluZm8gc3RydWN0LgpAQCAtMzYxLDYwICsyNTgsMzcgQEAgdm9p
ZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjp1cGRhdGVCYWNraW5nU3RvcmVTdGF0ZSh1aW50NjRf
dCBzdGF0ZUlELCBib29sIHJlc3AKIAogdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZW5k
RGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoKQogewotICAgIEFTU0VSVCghbV9pc1dhaXRpbmdG
b3JEaWRVcGRhdGUpOwogICAgIEFTU0VSVChtX3Nob3VsZFNlbmREaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZSk7CiAKICAgICBtX3Nob3VsZFNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSA9
IGZhbHNlOwogCiAgICAgVXBkYXRlSW5mbyB1cGRhdGVJbmZvOwogCi0gICAgaWYgKCFtX2lzUGFp
bnRpbmdTdXNwZW5kZWQgJiYgIW1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgZGlzcGxheSh1cGRh
dGVJbmZvKTsKLQogICAgIExheWVyVHJlZUNvbnRleHQgbGF5ZXJUcmVlQ29udGV4dDsKIAotICAg
IGlmIChtX2lzUGFpbnRpbmdTdXNwZW5kZWQgfHwgbV9sYXllclRyZWVIb3N0KSB7Ci0gICAgICAg
IHVwZGF0ZUluZm8udmlld1NpemUgPSBtX3dlYlBhZ2Uuc2l6ZSgpOwotICAgICAgICB1cGRhdGVJ
bmZvLmRldmljZVNjYWxlRmFjdG9yID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNjYWxl
RmFjdG9yKCk7CisgICAgdXBkYXRlSW5mby52aWV3U2l6ZSA9IG1fd2ViUGFnZS5zaXplKCk7Cisg
ICAgdXBkYXRlSW5mby5kZXZpY2VTY2FsZUZhY3RvciA9IG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5k
ZXZpY2VTY2FsZUZhY3RvcigpOwogCi0gICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3QpIHsKLSAg
ICAgICAgICAgIGxheWVyVHJlZUNvbnRleHQgPSBtX2xheWVyVHJlZUhvc3QtPmxheWVyVHJlZUNv
bnRleHQoKTsKKyAgICBsYXllclRyZWVDb250ZXh0ID0gbV9sYXllclRyZWVIb3N0LT5sYXllclRy
ZWVDb250ZXh0KCk7CiAKLSAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIGxheWVyIHRy
ZWUgaG9zdCB0byBub3RpZnkgYWZ0ZXIgdGhlIG5leHQgc2NoZWR1bGVkCi0gICAgICAgICAgICAv
LyBsYXllciBmbHVzaCBiZWNhdXNlIHRoYXQgbWlnaHQgZW5kIHVwIHNlbmRpbmcgYW4gRW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZQotICAgICAgICAgICAgLy8gbWVzc2FnZSBiYWNrIHRv
IHRoZSBVSSBwcm9jZXNzLCBidXQgdGhlIHVwZGF0ZWQgbGF5ZXIgdHJlZSBjb250ZXh0Ci0gICAg
ICAgICAgICAvLyB3aWxsIGJlIHNlbnQgYmFjayBpbiB0aGUgRGlkVXBkYXRlQmFja2luZ1N0b3Jl
U3RhdGUgbWVzc2FnZS4KLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0U2hvdWxkTm90
aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSk7Ci0gICAgICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPmZvcmNlUmVwYWludCgpOwotICAgICAgICB9Ci0gICAgfQorICAgIC8vIFdl
IGRvbid0IHdhbnQgdGhlIGxheWVyIHRyZWUgaG9zdCB0byBub3RpZnkgYWZ0ZXIgdGhlIG5leHQg
c2NoZWR1bGVkCisgICAgLy8gbGF5ZXIgZmx1c2ggYmVjYXVzZSB0aGF0IG1pZ2h0IGVuZCB1cCBz
ZW5kaW5nIGFuIEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUKKyAgICAvLyBtZXNzYWdl
IGJhY2sgdG8gdGhlIFVJIHByb2Nlc3MsIGJ1dCB0aGUgdXBkYXRlZCBsYXllciB0cmVlIGNvbnRl
eHQKKyAgICAvLyB3aWxsIGJlIHNlbnQgYmFjayBpbiB0aGUgRGlkVXBkYXRlQmFja2luZ1N0b3Jl
U3RhdGUgbWVzc2FnZS4KKyAgICBtX2xheWVyVHJlZUhvc3QtPnNldFNob3VsZE5vdGlmeUFmdGVy
TmV4dFNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Zm9y
Y2VSZXBhaW50KCk7CiAKICAgICBtX3dlYlBhZ2Uuc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQ
cm94eTo6RGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUobV9iYWNraW5nU3RvcmVTdGF0ZUlELCB1
cGRhdGVJbmZvLCBsYXllclRyZWVDb250ZXh0KSk7CiAgICAgbV9jb21wb3NpdGluZ0FjY29yZGlu
Z1RvUHJveHlNZXNzYWdlcyA9ICFsYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKTsKIH0KIAotdm9p
ZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpkaWRVcGRhdGUoKQotewotICAgIC8vIFdlIG1pZ2h0
IGdldCBkaWRVcGRhdGUgbWVzc2FnZXMgZnJvbSB0aGUgVUkgcHJvY2VzcyBldmVuIGFmdGVyIHdl
J3ZlCi0gICAgLy8gZW50ZXJlZCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLiBJZ25vcmUg
dGhlbS4KLSAgICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2lzV2FpdGluZ0ZvckRpZFVwZGF0ZSA9IGZhbHNlOwotCi0gICAgLy8gRGlzcGxheSBpZiBuZWVk
ZWQuIFdlIGNhbGwgZGlzcGxheVRpbWVyRmlyZWQgaGVyZSBzaW5jZSBpdCB3aWxsIHRocm90dGxl
IHVwZGF0ZXMgdG8gNjBmcHMuCi0gICAgZGlzcGxheVRpbWVyRmlyZWQoKTsKLX0KLQogdm9pZCBD
b29yZGluYXRlZERyYXdpbmdBcmVhOjpzdXNwZW5kUGFpbnRpbmcoKQogewogICAgIEFTU0VSVCgh
bV9pc1BhaW50aW5nU3VzcGVuZGVkKTsKIAotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+cGF1c2VSZW5kZXJpbmcoKTsKKyAgICBtX2xheWVyVHJlZUhv
c3QtPnBhdXNlUmVuZGVyaW5nKCk7CiAKICAgICBtX2lzUGFpbnRpbmdTdXNwZW5kZWQgPSB0cnVl
OwotICAgIG1fZGlzcGxheVRpbWVyLnN0b3AoKTsKIAogICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgp
LT5zdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25zKCk7CiB9CkBAIC00MjcsOCArMzAxLDcgQEAgdm9p
ZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpyZXN1bWVQYWludGluZygpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPnJlc3VtZVJlbmRlcmluZygpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+cmVzdW1lUmVu
ZGVyaW5nKCk7CiAKICAgICBtX2lzUGFpbnRpbmdTdXNwZW5kZWQgPSBmYWxzZTsKIApAQCAtNDQz
LDggKzMxNiw2IEBAIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6ZW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZShHcmFwaGljc0xheWVyKiBncmFwCiAgICAgbV9leGl0Q29tcG9zaXRp
bmdUaW1lci5zdG9wKCk7CiAgICAgbV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlID0gZmFsc2U7CiAKLSAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdCk7Ci0KICAgICBtX2xh
eWVyVHJlZUhvc3QgPSBMYXllclRyZWVIb3N0OjpjcmVhdGUoJm1fd2ViUGFnZSk7CiAgICAgaWYg
KCFtX2luVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaCh0cnVlKTsKQEAgLTQ1
NSw4ICszMjYsNiBAQCB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoR3JhcGhpY3NMYXllciogZ3JhcAogICAgIG1fZGlydHlSZWdpb24g
PSBSZWdpb24oKTsKICAgICBtX3Njcm9sbFJlY3QgPSBJbnRSZWN0KCk7CiAgICAgbV9zY3JvbGxP
ZmZzZXQgPSBJbnRTaXplKCk7Ci0gICAgbV9kaXNwbGF5VGltZXIuc3RvcCgpOwotICAgIG1faXNX
YWl0aW5nRm9yRGlkVXBkYXRlID0gZmFsc2U7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYTo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlU29vbigpCkBAIC00NzIsMTQ2ICsz
NDEsMTAgQEAgdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpleGl0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGVTb29uKCkKICAgICBtX2V4aXRDb21wb3NpdGluZ1RpbWVyLnN0YXJ0T25lU2hv
dCgwKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzY2hlZHVsZURpc3BsYXko
KQotewotICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0KTsKLQotICAgIGlmIChtX2lzV2FpdGlu
Z0ZvckRpZFVwZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faXNQYWludGluZ1N1
c3BlbmRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZGlydHlSZWdpb24uaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kaXNwbGF5VGltZXIuaXNBY3RpdmUo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kaXNwbGF5VGltZXIuc3RhcnRPbmVTaG90KDAp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmRpc3BsYXlUaW1lckZpcmVkKCkK
LXsKLSAgICBkaXNwbGF5KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6ZGlz
cGxheSgpCi17Ci0gICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3QpOwotICAgIEFTU0VSVCghbV9p
c1dhaXRpbmdGb3JEaWRVcGRhdGUpOwotICAgIEFTU0VSVCghbV9pblVwZGF0ZUJhY2tpbmdTdG9y
ZVN0YXRlKTsKLQotICAgIGlmIChtX2lzUGFpbnRpbmdTdXNwZW5kZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2RpcnR5UmVnaW9uLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1fc2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKSB7Ci0gICAg
ICAgIHNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgVXBkYXRlSW5mbyB1cGRhdGVJbmZvOwotICAgIGRpc3BsYXkodXBkYXRlSW5m
byk7Ci0KLSAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7Ci0gICAgICAgIC8vIFRoZSBjYWxsIHRv
IHVwZGF0ZSBjYXVzZWQgbGF5b3V0IHdoaWNoIHR1cm5lZCBvbiBhY2NlbGVyYXRlZCBjb21wb3Np
dGluZy4KLSAgICAgICAgLy8gRG9uJ3Qgc2VuZCBhbiBVcGRhdGUgbWVzc2FnZSBpbiB0aGlzIGNh
c2UuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3dlYlBhZ2Uuc2VuZChNZXNzYWdl
czo6RHJhd2luZ0FyZWFQcm94eTo6VXBkYXRlKG1fYmFja2luZ1N0b3JlU3RhdGVJRCwgdXBkYXRl
SW5mbykpOwotICAgIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlID0gdHJ1ZTsKLX0KLQotc3RhdGlj
IGJvb2wgc2hvdWxkUGFpbnRCb3VuZHNSZWN0KGNvbnN0IEludFJlY3QmIGJvdW5kcywgY29uc3Qg
VmVjdG9yPEludFJlY3Q+JiByZWN0cykKLXsKLSAgICBjb25zdCBzaXplX3QgcmVjdFRocmVzaG9s
ZCA9IDEwOwotICAgIGNvbnN0IGRvdWJsZSB3YXN0ZWRTcGFjZVRocmVzaG9sZCA9IDAuNzU7Ci0K
LSAgICBpZiAocmVjdHMuc2l6ZSgpIDw9IDEgfHwgcmVjdHMuc2l6ZSgpID4gcmVjdFRocmVzaG9s
ZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBBdHRlbXB0IHRvIGd1ZXNzIHdoZXRo
ZXIgb3Igbm90IHdlIHNob3VsZCB1c2UgdGhlIHJlZ2lvbiBib3VuZHMgcmVjdCBvciB0aGUgaW5k
aXZpZHVhbCByZWN0cy4KLSAgICAvLyBXZSBkbyB0aGlzIGJ5IGNvbXB1dGluZyB0aGUgcGVyY2Vu
dGFnZSBvZiAid2FzdGVkIHNwYWNlIiBpbiB0aGUgYm91bmRzLiBJZiB0aGF0IHdhc3RlZCBzcGFj
ZQotICAgIC8vIGlzIHRvbyBsYXJnZSwgdGhlbiB3ZSB3aWxsIGRvIGluZGl2aWR1YWwgcmVjdCBw
YWludGluZyBpbnN0ZWFkLgotICAgIHVuc2lnbmVkIGJvdW5kc0FyZWEgPSBib3VuZHMud2lkdGgo
KSAqIGJvdW5kcy5oZWlnaHQoKTsKLSAgICB1bnNpZ25lZCByZWN0c0FyZWEgPSAwOwotICAgIGZv
ciAoYXV0byYgcmVjdCA6IHJlY3RzKQotICAgICAgICByZWN0c0FyZWEgKz0gcmVjdC53aWR0aCgp
ICogcmVjdC5oZWlnaHQoKTsKLQotICAgIGRvdWJsZSB3YXN0ZWRTcGFjZSA9IDEgLSAoc3RhdGlj
X2Nhc3Q8ZG91YmxlPihyZWN0c0FyZWEpIC8gYm91bmRzQXJlYSk7Ci0KLSAgICByZXR1cm4gd2Fz
dGVkU3BhY2UgPD0gd2FzdGVkU3BhY2VUaHJlc2hvbGQ7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRE
cmF3aW5nQXJlYTo6ZGlzcGxheShVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewotICAgIEFTU0VS
VCghbV9pc1BhaW50aW5nU3VzcGVuZGVkKTsKLSAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdCk7
Ci0gICAgQVNTRVJUKCFtX3dlYlBhZ2Uuc2l6ZSgpLmlzRW1wdHkoKSk7Ci0KLSAgICBtX3dlYlBh
Z2UubGF5b3V0SWZOZWVkZWQoKTsKLQotICAgIC8vIFRoZSBsYXlvdXQgbWF5IGhhdmUgcHV0IHRo
ZSBwYWdlIGludG8gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZS4gSWYgdGhlIExheWVyVHJl
ZUhvc3QgaXMKLSAgICAvLyBpbiBjaGFyZ2Ugb2YgZGlzcGxheWluZywgd2UgaGF2ZSBub3RoaW5n
IG1vcmUgdG8gZG8uCi0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgdXBkYXRlSW5mby52aWV3U2l6ZSA9IG1fd2ViUGFnZS5zaXplKCk7Ci0gICAgdXBkYXRl
SW5mby5kZXZpY2VTY2FsZUZhY3RvciA9IG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5kZXZpY2VTY2Fs
ZUZhY3RvcigpOwotCi0gICAgSW50UmVjdCBib3VuZHMgPSBtX2RpcnR5UmVnaW9uLmJvdW5kcygp
OwotICAgIEFTU0VSVChtX3dlYlBhZ2UuYm91bmRzKCkuY29udGFpbnMoYm91bmRzKSk7Ci0KLSAg
ICBJbnRTaXplIGJpdG1hcFNpemUgPSBib3VuZHMuc2l6ZSgpOwotICAgIGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7Ci0g
ICAgYml0bWFwU2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoYml0
bWFwU2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAgICBpZiAoIWJpdG1h
cCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFiaXRtYXAtPmNyZWF0ZUhhbmRsZSh1cGRh
dGVJbmZvLmJpdG1hcEhhbmRsZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxJbnRS
ZWN0PiByZWN0cyA9IG1fZGlydHlSZWdpb24ucmVjdHMoKTsKLQotICAgIGlmIChzaG91bGRQYWlu
dEJvdW5kc1JlY3QoYm91bmRzLCByZWN0cykpIHsKLSAgICAgICAgcmVjdHMuY2xlYXIoKTsKLSAg
ICAgICAgcmVjdHMuYXBwZW5kKGJvdW5kcyk7Ci0gICAgfQotCi0gICAgdXBkYXRlSW5mby5zY3Jv
bGxSZWN0ID0gbV9zY3JvbGxSZWN0OwotICAgIHVwZGF0ZUluZm8uc2Nyb2xsT2Zmc2V0ID0gbV9z
Y3JvbGxPZmZzZXQ7Ci0KLSAgICBtX2RpcnR5UmVnaW9uID0gUmVnaW9uKCk7Ci0gICAgbV9zY3Jv
bGxSZWN0ID0gSW50UmVjdCgpOwotICAgIG1fc2Nyb2xsT2Zmc2V0ID0gSW50U2l6ZSgpOwotCi0g
ICAgYXV0byBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgp
OwotICAgIGdyYXBoaWNzQ29udGV4dC0+YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2Fs
ZUZhY3Rvcik7Ci0KLSAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMgPSBib3VuZHM7Ci0K
LSAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtYm91bmRzLngoKSwgLWJvdW5kcy55KCkp
OwotCi0gICAgZm9yIChhdXRvJiByZWN0IDogcmVjdHMpIHsKLSAgICAgICAgbV93ZWJQYWdlLmRy
YXdSZWN0KCpncmFwaGljc0NvbnRleHQsIHJlY3QpOwotICAgICAgICB1cGRhdGVJbmZvLnVwZGF0
ZVJlY3RzLmFwcGVuZChyZWN0KTsKLSAgICB9Ci0KLSAgICAvLyBMYXlvdXQgY2FuIHRyaWdnZXIg
bW9yZSBjYWxscyB0byBzZXROZWVkc0Rpc3BsYXkgYW5kIHdlIGRvbid0IHdhbnQgdG8gcHJvY2Vz
cyB0aGVtCi0gICAgLy8gdW50aWwgdGhlIFVJIHByb2Nlc3MgaGFzIHBhaW50ZWQgdGhlIHVwZGF0
ZSwgc28gd2Ugc3RvcCB0aGUgdGltZXIgaGVyZS4KLSAgICBtX2Rpc3BsYXlUaW1lci5zdG9wKCk7
Ci19Ci0KICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfTVVMVElQUk9DRVNTKQogdm9pZCBD
b29yZGluYXRlZERyYXdpbmdBcmVhOjpkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6TWVzc2FnZURlY29kZXIm
IGRlY29kZXIpCiB7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5kaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJlY2VpdmVDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogI2VuZGlmCiAK
QEAgLTYzMCw5ICszNjMsNiBAQCB2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmF0dGFjaFZp
ZXdPdmVybGF5R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSogZnJhbQogICAgIGlmICghZnJh
bWUtPmlzTWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9sYXllclRy
ZWVIb3N0KQotICAgICAgICByZXR1cm47Ci0KICAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qq
IGNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCA9IHN0YXRpY19jYXN0PENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdCo+KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CiAgICAgY29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0LT5zZXRWaWV3T3ZlcmxheVJvb3RMYXllcih2aWV3T3ZlcmxheVJvb3RMYXllcik7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVh
LmgKaW5kZXggODIwNGQzYTNlZWE3MmIxNDY1ZWYzODhjMGY3MmY1MmM5MmQyM2I5OS4uODg2Mzhh
OWE1YTEwYWM3M2M3ZDJhOTQyZDU0MzIxMmNkYTQ3MThiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRE
cmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWEuaApAQCAtNzcsNyArNzcsNiBA
QCBwcml2YXRlOgogCiAgICAgLy8gSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQs
IGJvb2wgcmVzcG9uZEltbWVkaWF0ZWx5LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZSgpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBzdXNwZW5kUGFpbnRpbmcoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGFp
bnRpbmcoKTsKIApAQCAtODgsMTEgKzg3LDYgQEAgcHJpdmF0ZToKICAgICBib29sIGV4aXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZVBlbmRpbmcoKSBjb25zdCB7IHJldHVybiBtX2V4aXRDb21w
b3NpdGluZ1RpbWVyLmlzQWN0aXZlKCk7IH0KICAgICB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSgpIHsgfQogCi0gICAgdm9pZCBzY2hlZHVsZURpc3BsYXkoKTsKLSAgICB2b2lk
IGRpc3BsYXlUaW1lckZpcmVkKCk7Ci0gICAgdm9pZCBkaXNwbGF5KCk7Ci0gICAgdm9pZCBkaXNw
bGF5KFVwZGF0ZUluZm8mKTsKLQogICAgIHVpbnQ2NF90IG1fYmFja2luZ1N0b3JlU3RhdGVJRDsK
IAogICAgIFdlYkNvcmU6OlJlZ2lvbiBtX2RpcnR5UmVnaW9uOwpAQCAtMTA5LDEwICsxMDMsNiBA
QCBwcml2YXRlOgogICAgIC8vIHdlIG5vcm1hbGx5IHNlbmQgdG8gdGhlIFVJIHByb2Nlc3MuCiAg
ICAgYm9vbCBtX3Nob3VsZFNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZTsKIAotICAgIC8v
IFdoZXRoZXIgd2UncmUgd2FpdGluZyBmb3IgYSBEaWRVcGRhdGUgbWVzc2FnZS4gVXNlZCBmb3Ig
dGhyb3R0bGluZyBwYWludHMgc28gdGhhdCB0aGUKLSAgICAvLyB3ZWIgcHJvY2VzcyB3b24ndCBw
YWludCBtb3JlIGZyZXF1ZW50IHRoYW4gdGhlIFVJIHByb2Nlc3MgY2FuIGhhbmRsZS4KLSAgICBi
b29sIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlOwotCiAgICAgLy8gVHJ1ZSBiZXR3ZWVuIHNlbmRp
bmcgdGhlICdlbnRlciBjb21wb3NpdGluZycgbWVzc2FnZXMsIGFuZCB0aGUgJ2V4aXQgY29tcG9z
aXRpbmcnIG1lc3NhZ2UuCiAgICAgYm9vbCBtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1l
c3NhZ2VzOwogCkBAIC0xMjgsNyArMTE4LDYgQEAgcHJpdmF0ZToKICAgICAvLyB3b24ndCBwYWlu
dCB1bnRpbCBwYWludGluZyBoYXMgcmVzdW1lZCBhZ2Fpbi4KICAgICBib29sIG1faXNQYWludGlu
Z1N1c3BlbmRlZDsKIAotICAgIFJ1bkxvb3A6OlRpbWVyPENvb3JkaW5hdGVkRHJhd2luZ0FyZWE+
IG1fZGlzcGxheVRpbWVyOwogICAgIFJ1bkxvb3A6OlRpbWVyPENvb3JkaW5hdGVkRHJhd2luZ0Fy
ZWE+IG1fZXhpdENvbXBvc2l0aW5nVGltZXI7CiAKICAgICAvLyBUaGUgbGF5ZXIgdHJlZSBob3N0
IHRoYXQgaGFuZGxlcyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZy4K
</data>

          </attachment>
      

    </bug>

</bugzilla>