<?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>75591</bug_id>
          
          <creation_ts>2012-01-04 17:54:49 -0800</creation_ts>
          <short_desc>[chromium] Make WebViewImpl depend on WebLayerTreeView instead of CCLayerTreeHost</short_desc>
          <delta_ts>2012-02-24 18:55:54 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>75577</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>aelias</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>kbr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>529912</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-04 17:54:49 -0800</bug_when>
    <thetext>[chromium] Make WebViewImpl depend on WebLayerTreeView instead of CCLayerTreeHost</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529917</commentid>
    <comment_count>1</comment_count>
      <attachid>121196</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-04 18:00:21 -0800</bug_when>
    <thetext>Created attachment 121196
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529920</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-04 18:01:37 -0800</bug_when>
    <thetext>Patch depends on https://bugs.webkit.org/show_bug.cgi?id=75577 - this diff is against the tree with that patch applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529921</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-04 18:02:21 -0800</bug_when>
    <thetext>Also note that this patch has WebKit API changes so it&apos;ll require a chromium side change.  Once https://bugs.webkit.org/show_bug.cgi?id=75577 lands I&apos;ll update this patch with transitional macros.

Antoine - can you check over the WebLayerTreeView initialize() call and see if it looks good to you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529938</commentid>
    <comment_count>4</comment_count>
      <attachid>121196</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-01-04 18:38:50 -0800</bug_when>
    <thetext>Comment on attachment 121196
Patch

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

I assume you have a chrome-side change that goes with this?

&gt; Source/WebKit/chromium/public/platform/WebLayerTreeView.h:135
&gt; +    WEBKIT_EXPORT void setNeedsRedraw();

Should we provide a rect here, so that we can do a partial redraw if we have partial damage?

&gt; Source/WebKit/chromium/public/platform/WebLayerTreeView.h:141
&gt; +    WEBKIT_EXPORT void setPageScaleFactorLimits(float minimum, float maximum);

I&apos;m not sure I understand what these 2 functions do, and whether they belong to this class...
Is this something that could be handled by adding a transform to the root layer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529972</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-04 20:15:01 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 121196 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121196&amp;action=review
&gt; 
&gt; I assume you have a chrome-side change that goes with this?

Yup, this won&apos;t compile without chromium-side changes. I&apos;ll put those up tomorrow.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/platform/WebLayerTreeView.h:135
&gt; &gt; +    WEBKIT_EXPORT void setNeedsRedraw();
&gt; 
&gt; Should we provide a rect here, so that we can do a partial redraw if we have partial damage?

We could, but we don&apos;t currently have any callers that provide partial damage on the WebKit side. Currently it&apos;s called when the entire front buffer is invalid or gone.  I&apos;d prefer to add support for rects once we have a caller.

&gt; 
&gt; &gt; Source/WebKit/chromium/public/platform/WebLayerTreeView.h:141
&gt; &gt; +    WEBKIT_EXPORT void setPageScaleFactorLimits(float minimum, float maximum);
&gt; 
&gt; I&apos;m not sure I understand what these 2 functions do, and whether they belong to this class...
&gt; Is this something that could be handled by adding a transform to the root layer?

These are mostly to do with thread-initiated zoom gestures (pinch zoom, etc).  The scroll bounds are set by per-layer properties but the page scale limits are global.  The scale itself can&apos;t really be hidden in the root layer&apos;s transform since the combination of the specified page scale and any thread-driven page scale delta has to respect these limits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530387</commentid>
    <comment_count>6</comment_count>
      <attachid>121196</attachid>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-01-05 10:24:14 -0800</bug_when>
    <thetext>Comment on attachment 121196
Patch

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

&gt;&gt;&gt; Source/WebKit/chromium/public/platform/WebLayerTreeView.h:141
&gt;&gt;&gt; +    WEBKIT_EXPORT void setPageScaleFactorLimits(float minimum, float maximum);
&gt;&gt; 
&gt;&gt; I&apos;m not sure I understand what these 2 functions do, and whether they belong to this class...
&gt;&gt; Is this something that could be handled by adding a transform to the root layer?
&gt; 
&gt; These are mostly to do with thread-initiated zoom gestures (pinch zoom, etc).  The scroll bounds are set by per-layer properties but the page scale limits are global.  The scale itself can&apos;t really be hidden in the root layer&apos;s transform since the combination of the specified page scale and any thread-driven page scale delta has to respect these limits.

Would it make sense to move these, as well as maybe setHaveWheelEventHandlers to a separate interface (that this one would reference), so that this class only deals with rendering, and out-of-thread input handling would be delegated to a separate class? I&apos;m worried that this public interface ends up being a big soup of random methods. There&apos;s a bunch of behaviors that we can imagine handling on the compositor thread, which will all need their own tunables &amp; constraints.
Even animation-related methods could be delegated to that separate class (or another one), so that this one stays purely about rendering (as the name suggests).

In any case, I would probably rename those 2 as s/Page/View/ or something, since we don&apos;t generally deal with pages here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530492</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-05 11:45:04 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 121196 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121196&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/chromium/public/platform/WebLayerTreeView.h:141
&gt; &gt;&gt;&gt; +    WEBKIT_EXPORT void setPageScaleFactorLimits(float minimum, float maximum);
&gt; &gt;&gt; 
&gt; &gt;&gt; I&apos;m not sure I understand what these 2 functions do, and whether they belong to this class...
&gt; &gt;&gt; Is this something that could be handled by adding a transform to the root layer?
&gt; &gt; 
&gt; &gt; These are mostly to do with thread-initiated zoom gestures (pinch zoom, etc).  The scroll bounds are set by per-layer properties but the page scale limits are global.  The scale itself can&apos;t really be hidden in the root layer&apos;s transform since the combination of the specified page scale and any thread-driven page scale delta has to respect these limits.
&gt; 
&gt; Would it make sense to move these, as well as maybe setHaveWheelEventHandlers to a separate interface (that this one would reference), so that this class only deals with rendering, and out-of-thread input handling would be delegated to a separate class? I&apos;m worried that this public interface ends up being a big soup of random methods. There&apos;s a bunch of behaviors that we can imagine handling on the compositor thread, which will all need their own tunables &amp; constraints.
&gt; Even animation-related methods could be delegated to that separate class (or another one), so that this one stays purely about rendering (as the name suggests).

That&apos;s not a bad idea. Any ideas for a name for this class?

&gt; 
&gt; In any case, I would probably rename those 2 as s/Page/View/ or something, since we don&apos;t generally deal with pages here.

The property is pageScale so I&apos;d like to preserve that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530523</commentid>
    <comment_count>8</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-01-05 12:15:27 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 121196 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121196&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WebKit/chromium/public/platform/WebLayerTreeView.h:141
&gt; &gt; &gt;&gt;&gt; +    WEBKIT_EXPORT void setPageScaleFactorLimits(float minimum, float maximum);
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; I&apos;m not sure I understand what these 2 functions do, and whether they belong to this class...
&gt; &gt; &gt;&gt; Is this something that could be handled by adding a transform to the root layer?
&gt; &gt; &gt; 
&gt; &gt; &gt; These are mostly to do with thread-initiated zoom gestures (pinch zoom, etc).  The scroll bounds are set by per-layer properties but the page scale limits are global.  The scale itself can&apos;t really be hidden in the root layer&apos;s transform since the combination of the specified page scale and any thread-driven page scale delta has to respect these limits.
&gt; &gt; 
&gt; &gt; Would it make sense to move these, as well as maybe setHaveWheelEventHandlers to a separate interface (that this one would reference), so that this class only deals with rendering, and out-of-thread input handling would be delegated to a separate class? I&apos;m worried that this public interface ends up being a big soup of random methods. There&apos;s a bunch of behaviors that we can imagine handling on the compositor thread, which will all need their own tunables &amp; constraints.
&gt; &gt; Even animation-related methods could be delegated to that separate class (or another one), so that this one stays purely about rendering (as the name suggests).
&gt; 
&gt; That&apos;s not a bad idea. Any ideas for a name for this class?

How about WebLayerTreeAnimationController or something along these lines?

&gt; 
&gt; &gt; 
&gt; &gt; In any case, I would probably rename those 2 as s/Page/View/ or something, since we don&apos;t generally deal with pages here.
&gt; 
&gt; The property is pageScale so I&apos;d like to preserve that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530846</commentid>
    <comment_count>9</comment_count>
      <attachid>121377</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-05 18:01:52 -0800</bug_when>
    <thetext>Created attachment 121377
split the input related things into a separate interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530847</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-05 18:03:12 -0800</bug_when>
    <thetext>I&apos;ve split setHaveWheel..() and setPageScale*() into a separate interface. Is this what you had in mind? I don&apos;t think these are properly called WLTAnimationController since they aren&apos;t about animations, they are about how inputs are handled. WLTInputParams is probably not a great name either. This version churns refcount a lot too, but that&apos;s fairly easy to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530863</commentid>
    <comment_count>11</comment_count>
    <who name="Antoine Labour">piman</who>
    <bug_when>2012-01-05 18:30:57 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; I&apos;ve split setHaveWheel..() and setPageScale*() into a separate interface. Is this what you had in mind? I don&apos;t think these are properly called WLTAnimationController since they aren&apos;t about animations, they are about how inputs are handled. WLTInputParams is probably not a great name either. This version churns refcount a lot too, but that&apos;s fairly easy to fix.

WLTAnimationController was a suggestion if we put animation there too. I guess we&apos;re not. We could name it WLTInputController or something like that, since it&apos;s a bit more than a bag of properties, and will probably grow to contain active functions.
I&apos;m not really worried about refcount churn.

I&apos;m fine with this, modulo the naming bikeshed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531211</commentid>
    <comment_count>12</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-01-06 11:42:14 -0800</bug_when>
    <thetext>Just to recap something I said to James on IM, we had long modeled LayerTreeView/Host around the concept of a View that you see in other systems. E.g. NSView, or GtkFrame. Those &quot;base interfaces&quot; really do grow to be a pile of stuff, and personally, I dont think thats a bad thing. There are lots of ways to combat this from a code clarity point of view --- in this case, the technique that WebViewImpl uses, where we group functionality with comment blocks, seems particularly of note.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531556</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-06 18:05:08 -0800</bug_when>
    <thetext>I actually think it will just stay a property bag, the actual input handling is on different interfaces (since it&apos;s called from different threads).

Chromium side up here: http://codereview.chromium.org/9122020/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531557</commentid>
    <comment_count>14</comment_count>
      <attachid>121377</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-06 18:05:19 -0800</bug_when>
    <thetext>Comment on attachment 121377
split the input related things into a separate interface

Darin, WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531559</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-06 18:08:10 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532217</commentid>
    <comment_count>16</comment_count>
      <attachid>121377</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2012-01-09 08:44:04 -0800</bug_when>
    <thetext>Comment on attachment 121377
split the input related things into a separate interface

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

&gt; Source/WebKit/chromium/public/platform/WebLayerTreeInputParams.h:59
&gt; +    WebPrivatePtr&lt;WebCore::CCLayerTreeHost&gt; m_private;

It is interesting that WebLayerTreeView is also just a ref-count wrapper for CCLayerTreeHost.
Might it make sense to also create a CCLayerTreeInputParams class?  Normally, the WebKit API
makes the most sense when API classes just wrap WebCore/lower-level concepts.  Maybe this is
all just transitional anyways?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538295</commentid>
    <comment_count>17</comment_count>
      <attachid>121377</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-18 16:04:21 -0800</bug_when>
    <thetext>Comment on attachment 121377
split the input related things into a separate interface

After thinking about this a while I think splitting the input stuff into a separate interface is not an improvement and makes lifetime/ownership really complicated. I&apos;ll break things up by comments + blocks in WLTV.h instead and see how that goes.

New patch coming up...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538300</commentid>
    <comment_count>18</comment_count>
      <attachid>121377</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-01-18 16:12:04 -0800</bug_when>
    <thetext>Comment on attachment 121377
split the input related things into a separate interface

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

&gt; Source/WebKit/chromium/public/platform/WebLayerTreeInputParams.h:40
&gt; +class WebLayerTreeInputParams {

/me wonders why these aren&apos;t just methods on the wrapper around CCLayerTreeHost. I dont see a value add.

&gt; Source/WebKit/chromium/src/WebLayerTreeView.cpp:133
&gt; +WebLayerTreeInputParams WebLayerTreeView::inputParams()

Is this supposed to be returning a reference? I&apos;m a little confused...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538319</commentid>
    <comment_count>19</comment_count>
      <attachid>123036</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-18 16:40:00 -0800</bug_when>
    <thetext>Created attachment 123036
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538321</commentid>
    <comment_count>20</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-18 16:41:01 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 121377 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121377&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/chromium/public/platform/WebLayerTreeInputParams.h:40
&gt; &gt; +class WebLayerTreeInputParams {
&gt; 
&gt; /me wonders why these aren&apos;t just methods on the wrapper around CCLayerTreeHost. I dont see a value add.

See the comment immediately above yours.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538323</commentid>
    <comment_count>21</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-18 16:42:01 -0800</bug_when>
    <thetext>Chromium side updated at http://codereview.chromium.org/9122020/ , that side will have to land first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538325</commentid>
    <comment_count>22</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-01-18 16:45:49 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; See the comment immediately above yours.

Ahah, sorry! ~failhat~</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540031</commentid>
    <comment_count>23</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-01-20 19:52:38 -0800</bug_when>
    <thetext>ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552597</commentid>
    <comment_count>24</comment_count>
      <attachid>126179</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-08 16:16:48 -0800</bug_when>
    <thetext>Created attachment 126179
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552598</commentid>
    <comment_count>25</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-08 16:17:28 -0800</bug_when>
    <thetext>Rebased to ToT.  Works fine, modulo a few bits of alpha on scrollbars on linux in some pixel results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554536</commentid>
    <comment_count>26</comment_count>
      <attachid>126179</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-10 18:31:58 -0800</bug_when>
    <thetext>Comment on attachment 126179
Patch

Antoine provided feedback offline that this is adding too many event-related things to WLTV. I&apos;m going to attempt to cut some of this out with some other refactorings and then return to this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563682</commentid>
    <comment_count>27</comment_count>
      <attachid>128602</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-23 16:45:20 -0800</bug_when>
    <thetext>Created attachment 128602
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563684</commentid>
    <comment_count>28</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-23 16:48:28 -0800</bug_when>
    <thetext>I&apos;ve moved the wheel event handling stuff out to layers but I think the rest of the interfaces here have to stay.  Page scale factor, in particular is really a property of a view and not a property of any specific layer.

Alexandre - can you double-check if I&apos;ve correctly characterized what startPageScaleAnimation does?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563767</commentid>
    <comment_count>29</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-02-23 17:52:21 -0800</bug_when>
    <thetext>Yes, the comment for startPageScaleAnimation is accurate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564508</commentid>
    <comment_count>30</comment_count>
      <attachid>128602</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-24 11:35:10 -0800</bug_when>
    <thetext>Comment on attachment 128602
Patch

Will need to update for http://trac.webkit.org/changeset/108829</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564623</commentid>
    <comment_count>31</comment_count>
      <attachid>128803</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-24 14:08:08 -0800</bug_when>
    <thetext>Created attachment 128803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564654</commentid>
    <comment_count>32</comment_count>
      <attachid>128803</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-02-24 14:44:03 -0800</bug_when>
    <thetext>Comment on attachment 128803
Patch

Maybe enne could unofficially review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564656</commentid>
    <comment_count>33</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-24 14:48:39 -0800</bug_when>
    <thetext>That would be great, although Enne&apos;s gardening right now and I want to respect their time. I&apos;m also OK with waiting for Antoine to get back since he had comments on this in the past - I don&apos;t have any patches that are blocked on this currently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564738</commentid>
    <comment_count>34</comment_count>
      <attachid>128803</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-02-24 16:14:49 -0800</bug_when>
    <thetext>Comment on attachment 128803
Patch

LGTM.  This all seems pretty mechanical and straightforward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564806</commentid>
    <comment_count>35</comment_count>
      <attachid>128803</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-02-24 18:33:00 -0800</bug_when>
    <thetext>Comment on attachment 128803
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564816</commentid>
    <comment_count>36</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-24 18:55:54 -0800</bug_when>
    <thetext>Committed r108883: &lt;http://trac.webkit.org/changeset/108883&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121196</attachid>
            <date>2012-01-04 18:00:21 -0800</date>
            <delta_ts>2012-01-05 18:01:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75591-20120104180015.patch</filename>
            <type>text/plain</type>
            <size>37080</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDE4OTNjMWY3ZjkxZDQ4MDliN2JlNTcxM2NjODMwZTFmZDZlMjMyOWQuLjlkNTdmNmNjNjcyMTMy
ZmJhMGY3MTViNWI0ODAzOTlmYjZkY2VmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDUgKzEsNzcgQEAKIDIwMTItMDEtMDQgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9t
aXVtLm9yZz4KIAorICAgICAgICBbY2hyb21pdW1dIE1ha2UgV2ViVmlld0ltcGwgZGVwZW5kIG9u
IFdlYkxheWVyVHJlZVZpZXcgaW5zdGVhZCBvZiBDQ0xheWVyVHJlZUhvc3QKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTkxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjb252ZXJ0cyBXZWJWaWV3
SW1wbCBmcm9tIGRlcGVuZGluZyBvbiBDQ0xheWVyVHJlZUhvc3QgdG8gV2ViTGF5ZXJUcmVlVmll
dyBpbiBvcmRlciB0byBwcm92aWRlIGJldHRlcgorICAgICAgICBpc29sYXRpb24gYW5kIGFsbG93
IGZvciBmdXR1cmUgcmVmYWN0b3JpbmdzLiBUaGUgY2hhbmdlcyB0byBXZWJWaWV3SW1wbCBhcmUg
bW9zdGx5IG1lY2hhbmljYWwuIFRoZQorICAgICAgICBXZWJMYXllclRyZWVWaWV3IGFuZCBXZWJM
YXllclRyZWVWaWV3Q2xpZW50IGludGVyZmFjZXMgaGF2ZSBib3RoIGdyb3duIGFuZCBjaGFuZ2Vk
IHNsaWdodGx5OgorCisgICAgICAgIC0gU2V0dXAgcGF0aCBmb3IgV2ViTGF5ZXJUcmVlVmlldyBj
aGFuZ2VkIHRvIGV4cG9zZSBhbiBpbml0aWFsaXplKCkgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIGNy
ZWF0ZSgpIGZhY3RvcnkKKyAgICAgICAgZnVuY3Rpb24uIFRoZSBuZXcgbW9kZWwgaXMgdGhhdCBh
IFdlYkxheWVyVHJlZVZpZXcgd2hlbiBjb25zdHJ1Y3RlZCBpcyBpbiBhIG51bGwgc3RhdGUuIENh
bGxpbmcgaW5pdGlhbGl6ZSgpCisgICAgICAgIGF0dGVtcHRzIHRvIHJlLWluaXRpYWxpemUgdGhl
IFdMVFYsIHdoaWNoIGNhbiBlaXRoZXIgZmFpbCBvciBzdWNjZWVkLiAgQWxsIG90aGVyIGZ1bmN0
aW9ucyBtdXN0IGJlIGNhbGxlZCBvbiBhCisgICAgICAgIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXpl
ZCB2aWV3LgorCisgICAgICAgIC0gV2ViTGF5ZXJUcmVlVmlldyBleHBhbmRlZCB0byBpbmNsdWRl
IGZ1bmN0aW9uYWxpdHkgdGhhdCBDQ0xheWVyVHJlZUhvc3QgZXhwb3NlcyBidXQgV2ViTGF5ZXJU
cmVlVmlldyBkaWQgbm90LgorICAgICAgICBTb21lIG9mIHRoaXMgaXMgb25seSB2YWxpZCBmb3Ig
dGhlIHNpbmdsZSB0aHJlYWQgY2FzZSBhbmQgd2lsbCBiZSByZW1vdmVkIHdoZW4gd2UgaW52ZXJ0
IHRoZSBzY2hlZHVsaW5nIGNvbnRyb2wKKyAgICAgICAgbG9naWMsIHRoZXNlIGJpdHMgYXJlIGNv
bW1lbnRlZC4KKworICAgICAgICAtIFdlYkxheWVyVHJlZVZpZXdDbGllbnQgZXhwYW5kZWQgd2l0
aCBzb21lIGZsb3ctY29udHJvbCByZWxhdGVkIEFQSXMuCisKKyAgICAgICAgUmVmYWN0b3Igb25s
eSwgbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dl
YkxheWVyVHJlZVZpZXcuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6U2V0
dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6aXNO
dWxsKToKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5o
OgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Q2hyb21lQ2xpZW50SW1wbDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYyk6CisgICAgICAg
ICogc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRy
ZWVWaWV3Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6
c2V0SGF2ZVdoZWVsRXZlbnRIYW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJl
ZVZpZXc6OmNvbXBvc2l0b3JJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlVmlldzo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6
OnNldE5lZWRzQW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnVw
ZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3OjpzZXRO
ZWVkc1JlZHJhdyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnNldFBhZ2VT
Y2FsZUZhY3RvckxpbWl0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnNl
dFBhZ2VTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmZpbmlzaEFs
bFJlbmRlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3Ojpsb3NlQ29tcG9zaXRvckNvbnRl
eHQpOgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpkaWRDb21taXRBbmREcmF3
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkQ29tcGxl
dGVTd2FwQnVmZmVycyk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6Om51bWJlck9mV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphbmltYXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNv
bXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpsb3NlQ29tcG9zaXRvckNv
bnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcHV0ZVBhZ2VTY2FsZUZh
Y3RvckxpbWl0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphZGRQYWdlT3Zlcmxh
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVQYWdlT3ZlcmxheSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFJvb3RMYXllclJlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZUNvbnRleHQzRCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjphcHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OmRpZFJlYmluZEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVMYXllclRyZWVWaWV3cG9ydCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpncmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpzZXRWaXNpYmlsaXR5U3RhdGUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5oOgorICAgICAgICAqIHRlc3RzL1dlYkxheWVyVGVzdC5jcHA6CisKKzIwMTItMDEtMDQg
IEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKwogICAgICAgICBbY2hyb21p
dW1dIFJvdXRlIGFsbCBhbmltYXRlIGNhbGxzIHRocm91Z2ggQ0NMYXllclRyZWVIb3N0IGluIGNv
bXBvc2l0ZWQgbW9kZSB0byBzaW1wbGlmeSByYXRlIGxpbWl0aW5nIGxvZ2ljCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU3NwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRyZWVW
aWV3LmgKaW5kZXggMDI2M2IzOTI2OGFkY2VlMTBmODM1NzQyNDQ3MWQ3ZWZkNDM4YTFjNC4uMjYy
NmI2NjlkYTIzOWI0ZGI4MmQyNTBhZDkzNjk2ZGNiMzk2OTc4ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlldy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXcu
aApAQCAtMzUsNiArMzUsNyBAQCBzdHJ1Y3QgQ0NTZXR0aW5nczsKIH0KIAogbmFtZXNwYWNlIFdl
YktpdCB7CitjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFdlYkxheWVyOwogY2xh
c3MgV2ViTGF5ZXJUcmVlVmlld0NsaWVudDsKIHN0cnVjdCBXZWJSZWN0OwpAQCAtNDksMjEgKzUw
LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICwgc2hvd0ZQU0NvdW50ZXIoZmFsc2UpCiAgICAg
ICAgICAgICAsIHNob3dQbGF0Zm9ybUxheWVyVHJlZShmYWxzZSkKICAgICAgICAgICAgICwgcmVm
cmVzaFJhdGUoMCkKLSAgICAgICAgICAgICwgcGFydGlhbFN3YXBFbmFibGVkKGZhbHNlKSB7IH0K
KyAgICAgICAgICAgICwgcGVyVGlsZVBhaW50aW5nKGZhbHNlKQorICAgICAgICAgICAgLCBwYXJ0
aWFsU3dhcEVuYWJsZWQoZmFsc2UpCisgICAgICAgICAgICB7IH0KIAogICAgICAgICBib29sIGFj
Y2VsZXJhdGVQYWludGluZzsKICAgICAgICAgYm9vbCBjb21wb3NpdGVPZmZzY3JlZW47CiAgICAg
ICAgIGJvb2wgc2hvd0ZQU0NvdW50ZXI7CiAgICAgICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJU
cmVlOwogICAgICAgICBkb3VibGUgcmVmcmVzaFJhdGU7CisgICAgICAgIGJvb2wgcGVyVGlsZVBh
aW50aW5nOwogICAgICAgICBib29sIHBhcnRpYWxTd2FwRW5hYmxlZDsKICNpZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04KICAgICAgICAgb3BlcmF0b3IgV2ViQ29yZTo6Q0NTZXR0aW5ncygpIGNvbnN0
OwogI2VuZGlmCiAgICAgfTsKIAotICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYkxheWVyVHJl
ZVZpZXcgY3JlYXRlKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqLCBjb25zdCBXZWJMYXllciYgcm9v
dCwgY29uc3QgU2V0dGluZ3MmKTsKLQogICAgIFdlYkxheWVyVHJlZVZpZXcoKSB7IH0KICAgICBX
ZWJMYXllclRyZWVWaWV3KGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmIGxheWVyKSB7IGFzc2lnbihs
YXllcik7IH0KICAgICB+V2ViTGF5ZXJUcmVlVmlldygpIHsgcmVzZXQoKTsgfQpAQCAtNzIsMTAg
Kzc0LDE4IEBAIHB1YmxpYzoKICAgICAgICAgYXNzaWduKGxheWVyKTsKICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgIH0KKwogICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwogICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYpOwogICAgIFdF
QktJVF9FWFBPUlQgYm9vbCBlcXVhbHMoY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYpIGNvbnN0Owog
CisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGUuaXNOdWxsKCk7IH0K
KworICAgIC8vIEF0dGVtcHRzIHRvIGluaXRpYWxpemUgdGhpcyBXZWJMYXllclRyZWVWaWV3IHdp
dGggdGhlIGdpdmVuIGNsaWVudCwgcm9vdCBsYXllciwgYW5kIHNldHRpbmdzLgorICAgIC8vIElm
IGluaXRpYWxpemF0aW9uIGZhaWxzLCB0aGlzIHdpbGwgcmV0dXJuIGZhbHNlIGFuZCAuaXNOdWxs
KCkgd2lsbCByZXR1cm4gdHJ1ZS4KKyAgICAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IG1l
dGhvZHMgYmVsb3cuCisgICAgV0VCS0lUX0VYUE9SVCBib29sIGluaXRpYWxpemUoV2ViTGF5ZXJU
cmVlVmlld0NsaWVudCosIGNvbnN0IFdlYkxheWVyJiByb290LCBjb25zdCBTZXR0aW5ncyYpOwor
CiAgICAgLy8gVHJpZ2dlcnMgYSBjb21wb3NpdGluZyBwYXNzLiBJZiB0aGUgY29tcG9zaXRvciB0
aHJlYWQgd2FzIG5vdAogICAgIC8vIGVuYWJsZWQgdmlhIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxp
emUsIHRoZSBjb21wb3NpdGluZyBwYXNzIGhhcHBlbnMKICAgICAvLyBpbW1lZGlhdGVseS4gSWYg
aXQgaXMgZW5hYmxlZCwgdGhlIGNvbXBvc2l0aW5nIHBhc3Mgd2lsbCBoYXBwZW4gYXQgYQpAQCAt
MTAxLDExICsxMTEsNDYgQEAgcHVibGljOgogICAgIC8vIGN5Y2xlcy4KICAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgc2V0Um9vdExheWVyKFdlYkxheWVyKik7CiAKLSNpZiBXRUJLSVRfSU1QTEVNRU5U
QVRJT04KLSAgICBXZWJMYXllclRyZWVWaWV3KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q+Jik7Ci0gICAgV2ViTGF5ZXJUcmVlVmlldyYgb3BlcmF0b3I9KGNv
bnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+Jik7Ci0gICAgb3Bl
cmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdD4oKSBjb25zdDsK
LSNlbmRpZgorICAgIC8vIFNldHMgd2hldGhlciB0aGUgZW1iZWRkZXIgb2YgdGhpcyB2aWV3IGhh
cyBhbnkgbW91c2Ugd2hlZWwgZXZlbnQgaGFuZGxlcnMgcmVnaXN0ZXJlZC4KKyAgICAvLyBJZiBm
YWxzZSwgdGhlbiB0aGUgY29tcG9zaXRvciBtYXkgaGFuZGxlIHdoZWVsIGV2ZW50cyBpdHNlbGYu
CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoYm9vbCk7
CisKKyAgICAvLyBSZXR1cm5zIGEgdW5pcXVlIGlkZW50aWZpZXIgdGhhdCBjYW4gYmUgdXNlZCBv
biB0aGUgY29tcG9zaXRvciB0aHJlYWQgdG8gcmVxdWVzdCBhCisgICAgLy8gV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlciBpbnN0YW5jZS4KKyAgICBXRUJLSVRfRVhQT1JUIGludCBjb21wb3NpdG9y
SWRlbnRpZmllcigpOworCisgICAgLy8gU2V0cyB3aGV0aGVyIHRoaXMgdmlldyBpcyB2aXNpYmxl
LiBJbiB0aHJlYWRlZCBtb2RlLCBhIHZpZXcgdGhhdCBpcyBub3QgdmlzaWJsZSB3aWxsIG5vdAor
ICAgIC8vIGNvbXBvc2l0ZSBvciB0cmlnZ2VyIHVwZGF0ZUFuaW1hdGlvbnMoKSBvciBsYXlvdXQo
KSBjYWxscyB1bnRpbCBpdCBiZWNvbWVzIHZpc2libGUuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IHNldFZpc2libGUoYm9vbCk7CisKKyAgICAvLyBSZXF1ZXN0cyBhbiB1cGRhdGVBbmltYXRpb25z
KCkgY2FsbC4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0TmVlZHNBbmltYXRlKCk7CisKKyAg
ICAvLyBJbW1lZGlhdGVseSB1cGRhdGUgYW5pbWF0aW9ucy4gVGhpcyBzaG91bGQgb25seSBiZSB1
c2VkIHdoZW4gZnJhbWUgc2NoZWR1bGluZyBpcyBoYW5kbGVkIGJ5CisgICAgLy8gdGhlIFdlYkxh
eWVyVHJlZVZpZXcgdXNlciBhbmQgbm90IGludGVybmFsbHkgYnkgdGhlIGNvbXBvc2l0b3IsIG1l
YW5pbmcgb25seSBpbiBzaW5nbGUtdGhyZWFkZWQKKyAgICAvLyBtb2RlLgorICAgIFdFQktJVF9F
WFBPUlQgdm9pZCB1cGRhdGVBbmltYXRpb25zKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisKKyAg
ICAvLyBJbmRpY2F0ZXMgdGhhdCB0aGUgdmlldyBuZWVkcyB0byBiZSByZWRyYXduLiBUaGlzIGlz
IHR5cGljYWxseSB1c2VkIHdoZW4gdGhlIGZyb250YnVmZmVyIGlzIGRhbWFnZWQuCisgICAgV0VC
S0lUX0VYUE9SVCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisKKyAgICAvLyBTZXRzIHRoZSBjdXJy
ZW50IHBhZ2Ugc2NhbGUgZmFjdG9yLiBUaGUgcGFnZSBzY2FsZSBmYWN0b3IgbGltaXRzIGFyZSBh
cHBsaWVkIHRvIHRoaXMgdmFsdWUuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFBhZ2VTY2Fs
ZShmbG9hdCk7CisKKyAgICAvLyBTZXRzIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHBhZ2Ugc2Nh
bGUgZmFjdG9yLiBCb3RoIGxpbWl0cyBhcmUgaW5pdGlhbGx5IDEgKG5vIHBhZ2Ugc2NhbGUgYWxs
b3dlZCkuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFBhZ2VTY2FsZUZhY3RvckxpbWl0cyhm
bG9hdCBtaW5pbXVtLCBmbG9hdCBtYXhpbXVtKTsKKworICAgIC8vIEJsb2NrcyB1bnRpbCB0aGUg
bW9zdCByZWNlbnRseSBjb21wb3NpdGVkIGZyYW1lIGhhcyBmaW5pc2hlZCByZW5kZXJpbmcgb24g
dGhlIEdQVS4KKyAgICAvLyBUaGlzIGNhbiBoYXZlIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2Ug
aW1wYWN0IGFuZCBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUuCisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIGZpbmlzaEFsbFJlbmRlcmluZygpOworCisgICAgLy8gUmV0dXJucyB0aGUgY29udGV4dCBi
ZWluZyB1c2VkIGZvciByZW5kZXJpbmcgdGhpcyB2aWV3LiBJbiB0aHJlYWRlZCBjb21wb3NpdGlu
ZyBtb2RlLCBpdCBpcworICAgIC8vIG5vdCBzYWZlIHRvIHVzZSB0aGlzIGNvbnRleHQgYXQgYWxs
IG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgQVBJIGFzIHNv
b24gYXMgcG9zc2libGUsIGl0J3MgdmVyeSBidWctcHJvbmUgaW4gdGhyZWFkZWQgbW9kZS4KKyAg
ICBXRUJLSVRfRVhQT1JUIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CisKKyAgICAv
LyBTaW11bGF0ZXMgYSBsb3N0IGNvbnRleHQuIEZvciB0ZXN0aW5nIG9ubHkuCisgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpOwogCiBwcm90
ZWN0ZWQ6CiAgICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+IG1fcHJp
dmF0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3Jt
L1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaAppbmRleCA5YzRkZmI3N2I3NzExNGIw
ZWY2N2IwMTdiZmE0YmQyMjNiM2FiNmE2Li41YzBiOWVmOWEyYTJjNjEzYjExOTAwYzEzZjg5OGYy
MjgzOWI0NjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0
Zm9ybS9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oCkBAIC01Miw2ICs1Miw5
IEBAIHB1YmxpYzoKICAgICAvLyBjb250ZXh0IGV2ZW50KS4KICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmViaW5kR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykgPSAwOwogCisgICAgdmlydHVhbCB2
b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29t
cGxldGVTd2FwQnVmZmVycygpID0gMDsKKwogICAgIC8vIFNjaGVkdWxlcyBhIGNvbXBvc2l0aW5n
IHBhc3MsIG1lYW5pbmcgdGhlIGNsaWVudCBzaG91bGQgY2FsbAogICAgIC8vIFdlYkxheWVyVHJl
ZVZpZXc6OmNvbXBvc2l0ZSBhdCBhIGxhdGVyIHRpbWUuIFRoaXMgaXMgb25seSBjYWxsZWQgaWYg
dGhlCiAgICAgLy8gY29tcG9zaXRvciB0aHJlYWQgaXMgZGlzYWJsZWQ7IHdoZW4gZW5hYmxlZCwg
dGhlIGNvbXBvc2l0b3Igd2lsbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJv
bWVDbGllbnRJbXBsLmNwcAppbmRleCA1ZjI4NTFiYjU4NzdjOWZmNzQyNmQ3YThjMWU1ZDEzODY0
ZmEwMmNmLi5iZDczYzUzZTllNDVkZGIxOThkZTQxN2M5NGYyZWZkMzdlY2QwYWRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcApAQCAtODkw
LDcgKzg5MCw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5
ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiBncmFwCiAKIHZvaWQgQ2hyb21lQ2xpZW50
SW1wbDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpCiB7Ci0gICAgbV93ZWJWaWV3LT5z
ZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKKyAgICBtX3dlYlZpZXctPnNjaGVkdWxlQ29tcG9z
aXRpbmdMYXllclN5bmMoKTsKIH0KIAogQ2hyb21lQ2xpZW50OjpDb21wb3NpdGluZ1RyaWdnZXJG
bGFncyBDaHJvbWVDbGllbnRJbXBsOjphbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2VycygpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCmlu
ZGV4IDQ0YWM5MDU0MWU0MzFhNjFiNWI4YTUyOGY1NGYzYzQwYjU0OTZmNmEuLjExNzFhNTk3YjU5
YTRiMWVmYzkxNDViNWNhYmI1MjdhZTQwMDc0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlldy5oIgogCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViTGF5ZXJU
cmVlVmlld0ltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJMYXllci5oIgpAQCAtNTEsOSArNTIsMTAgQEAgV2ViTGF5ZXJUcmVlVmll
dzo6U2V0dGluZ3M6Om9wZXJhdG9yIENDU2V0dGluZ3MoKSBjb25zdAogICAgIHJldHVybiBzZXR0
aW5nczsKIH0KIAotV2ViTGF5ZXJUcmVlVmlldyBXZWJMYXllclRyZWVWaWV3OjpjcmVhdGUoV2Vi
TGF5ZXJUcmVlVmlld0NsaWVudCogY2xpZW50LCBjb25zdCBXZWJMYXllciYgcm9vdCwgY29uc3Qg
V2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MmIHNldHRpbmdzKQorYm9vbCBXZWJMYXllclRyZWVW
aWV3Ojppbml0aWFsaXplKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqIGNsaWVudCwgY29uc3QgV2Vi
TGF5ZXImIHJvb3QsIGNvbnN0IFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzJiBzZXR0aW5ncykK
IHsKLSAgICByZXR1cm4gV2ViTGF5ZXJUcmVlVmlldyhXZWJMYXllclRyZWVWaWV3SW1wbDo6Y3Jl
YXRlKGNsaWVudCwgcm9vdCwgc2V0dGluZ3MpKTsKKyAgICBtX3ByaXZhdGUgPSBXZWJMYXllclRy
ZWVWaWV3SW1wbDo6Y3JlYXRlKGNsaWVudCwgcm9vdCwgc2V0dGluZ3MpOworICAgIHJldHVybiAh
aXNOdWxsKCk7CiB9CiAKIHZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6cmVzZXQoKQpAQCAtMTAyLDIw
ICsxMDQsNTkgQEAgdm9pZCBXZWJMYXllclRyZWVWaWV3OjpzZXRSb290TGF5ZXIoV2ViTGF5ZXIg
KnJvb3QpCiAgICAgICAgIG1fcHJpdmF0ZS0+c2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4oKSk7CiB9CiAKLVdlYkxheWVyVHJlZVZpZXc6OldlYkxheWVyVHJlZVZpZXcoY29u
c3QgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+JiBub2RlKQotICAgIDogbV9wcml2YXRlKG5v
ZGUpCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnNldEhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoYm9v
bCBoYXZlSGFuZGxlcnMpCiB7CisgICAgbV9wcml2YXRlLT5zZXRIYXZlV2hlZWxFdmVudEhhbmRs
ZXJzKGhhdmVIYW5kbGVycyk7CiB9CiAKLVdlYkxheWVyVHJlZVZpZXcmIFdlYkxheWVyVHJlZVZp
ZXc6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4mIG5vZGUpCitp
bnQgV2ViTGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRvcklkZW50aWZpZXIoKQogewotICAgIG1fcHJp
dmF0ZSA9IG5vZGU7Ci0gICAgcmV0dXJuICp0aGlzOworICAgIHJldHVybiBtX3ByaXZhdGUtPmNv
bXBvc2l0b3JJZGVudGlmaWVyKCk7CiB9CiAKLVdlYkxheWVyVHJlZVZpZXc6Om9wZXJhdG9yIFBh
c3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PigpIGNvbnN0Cit2b2lkIFdlYkxheWVyVHJlZVZpZXc6
OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQogewotICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7
CisgICAgbV9wcml2YXRlLT5zZXRWaXNpYmxlKHZpc2libGUpOworfQorCit2b2lkIFdlYkxheWVy
VHJlZVZpZXc6OnNldE5lZWRzQW5pbWF0ZSgpCit7CisgICAgbV9wcml2YXRlLT5zZXROZWVkc0Fu
aW1hdGUoKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3Ojp1cGRhdGVBbmltYXRpb25zKGRv
dWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUFuaW1hdGlvbnMo
ZnJhbWVCZWdpblRpbWUpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnNldE5lZWRzUmVk
cmF3KCkKK3sKKyAgICBtX3ByaXZhdGUtPnNldE5lZWRzUmVkcmF3KCk7Cit9CisKK3ZvaWQgV2Vi
TGF5ZXJUcmVlVmlldzo6c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKGZsb2F0IG1pbmltdW0sIGZs
b2F0IG1heGltdW0pCit7CisgICAgbV9wcml2YXRlLT5zZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMo
bWluaW11bSwgbWF4aW11bSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6c2V0UGFnZVNj
YWxlKGZsb2F0IHBhZ2VTY2FsZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFBhZ2VTY2FsZShwYWdl
U2NhbGUpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OmZpbmlzaEFsbFJlbmRlcmluZygp
Cit7CisgICAgbV9wcml2YXRlLT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKK30KKworV2ViR3JhcGhp
Y3NDb250ZXh0M0QqIFdlYkxheWVyVHJlZVZpZXc6OmNvbnRleHQoKQoreworICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChtX3By
aXZhdGUtPmNvbnRleHQoKSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6bG9zZUNvbXBv
c2l0b3JDb250ZXh0KGludCBudW1UaW1lcykKK3sKKyAgICBtX3ByaXZhdGUtPmxvc2VDb21wb3Np
dG9yQ29udGV4dChudW1UaW1lcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwCmlu
ZGV4IDk4MTQ3NzExODliZjY5ZDdjOGQ1MzQ4N2MyNDlhZjIwYzEwOWQzZDEuLmVhYTc4ZDdmMDI2
MTQzYTcwM2ZiZTg2OGJmNjBkZDYxOGQwYTJhYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAKQEAgLTEwMywyMCArMTAzLDIy
IEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IFdlYkxheWVyVHJlZVZpZXdJbXBsOjpj
cmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNECiAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQod2ViQ29udGV4dC5y
ZWxlYXNlKCksIGF0dHJpYnV0ZXMsIDAsIHN0eWxlLCB1c2FnZSk7CiB9CiAKLXZvaWQgV2ViTGF5
ZXJUcmVlVmlld0ltcGw6OmRpZENvbW1pdEFuZERyYXdGcmFtZSgpCit2b2lkIFdlYkxheWVyVHJl
ZVZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCiB7Ci0g
ICAgLy8gRklYTUU6IHJvdXRlIHRoaXMgdXAgdG8gdGhlIFdlYkxheWVyVHJlZVZpZXcgY2xpZW50
CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkUmViaW5kR3JhcGhpY3ND
b250ZXh0KHN1Y2Nlc3MpOwogfQogCi12b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjpkaWRDb21w
bGV0ZVN3YXBCdWZmZXJzKCkKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRpZENvbW1pdEFu
ZERyYXdGcmFtZSgpCiB7Ci0gICAgLy8gRklYTUU6IHJvdXRlIHRoaXMgdXAgdG8gdGhlIFdlYkxh
eWVyVHJlZVZpZXcgY2xpZW50CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+
ZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCk7CiB9CiAKLXZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6
OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykKK3ZvaWQgV2ViTGF5ZXJU
cmVlVmlld0ltcGw6OmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKQogewogICAgIGlmIChtX2NsaWVu
dCkKLSAgICAgICAgbV9jbGllbnQtPmRpZFJlYmluZEdyYXBoaWNzQ29udGV4dChzdWNjZXNzKTsK
KyAgICAgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKTsKIH0KIAogdm9pZCBX
ZWJMYXllclRyZWVWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IGY4ZWI2NDA5NDEzN2VmYjAxZGZjNzIy
OGNmZDE2NzhhMTBmYmJhMzQuLmI3NDgwNDY5ZjY1NDgwMDZhMGEzMjcxZWViNjQ1NThmZTMwZDI1
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJBdXRvZmlsbFBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1
ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3RDaHJvbWl1bS5o
IgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgi
CiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgpAQCAt
MTIyLDYgKzEyMyw4IEBACiAjaW5jbHVkZSAiV2ViSW5wdXRFdmVudENvbnZlcnNpb24uaCIKICNp
bmNsdWRlICJXZWJLaXQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBv
cnQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllci5oIgorI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYkxheWVyVHJlZVZpZXcuaCIKICNpbmNsdWRlICJXZWJNZWRpYVBsYXllckFjdGlvbi5oIgog
I2luY2x1ZGUgIldlYk5vZGUuaCIKICNpbmNsdWRlICJXZWJQbHVnaW4uaCIKQEAgLTEzNSw3ICsx
MzgsNiBAQAogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgogI2luY2x1ZGUgInBsYXRm
b3JtL1dlYlZlY3Rvci5oIgogI2luY2x1ZGUgIldlYlZpZXdDbGllbnQuaCIKLSNpbmNsdWRlICJj
Yy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC04MTQsOCArODE2
LDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6bnVtYmVyT2ZXaGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2Vk
KHVuc2lnbmVkIG51bWJlck9mV2hlZWxIYW5kbGUKICAgICBpZiAobV9jbGllbnQpCiAgICAgICAg
IG1fY2xpZW50LT5udW1iZXJPZldoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQobnVtYmVyT2ZXaGVl
bEhhbmRsZXJzKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1f
bGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRIYXZlV2hlZWxFdmVu
dEhhbmRsZXJzKG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVycyk7CisgICAgaWYgKCFtX2xheWVyVHJl
ZVZpZXcuaXNOdWxsKCkpCisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRIYXZlV2hlZWxFdmVu
dEhhbmRsZXJzKG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVycyk7CiAjZW5kaWYKIH0KIApAQCAtMTEz
Nyw3ICsxMTM5LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdp
blRpbWUpCiAgICAgLy8gSW4gY29tcG9zaXRlZCBtb2RlLCB3ZSBhbHdheXMgZ28gdGhyb3VnaCB0
aGUgY29tcG9zaXRvciBzbyBpdCBjYW4gYXBwbHkKICAgICAvLyBhcHByb3ByaWF0ZSBmbG93LWNv
bnRyb2wgbWVjaGFuaXNtcy4KICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlQW5pbWF0aW9ucyhmcmFtZUJlZ2lu
VGltZSk7CisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy51cGRhdGVBbmltYXRpb25zKGZyYW1lQmVn
aW5UaW1lKTsKICAgICBlbHNlCiAjZW5kaWYKICAgICAgICAgdXBkYXRlQW5pbWF0aW9ucyhmcmFt
ZUJlZ2luVGltZSk7CkBAIC0xMTg1LDYgKzExODcsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpsYXlv
dXQoKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHZvaWQgV2ViVmlld0ltcGw6
OmRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogeworICAgIEFTU0VSVCghbV9sYXllclRyZWVWaWV3LmlzTnVsbCgpKTsKICNpZiBV
U0UoU0tJQSkKICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIGNvbnRleHQoY2FudmFzKTsKIApAQCAt
MTIwMyw3ICsxMjA2LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZG9QaXhlbFJlYWRiYWNrVG9DYW52
YXMoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IEludFJlY3QmIHJlY3QKICAgICBPd25QdHI8SW1h
Z2VCdWZmZXI+IGltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCkpKTsK
ICAgICBSZWZQdHI8Qnl0ZUFycmF5PiBwaXhlbEFycmF5KEJ5dGVBcnJheTo6Y3JlYXRlKHJlY3Qu
d2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0KSk7CiAgICAgaWYgKGltYWdlQnVmZmVyICYmIHBp
eGVsQXJyYXkpIHsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21wb3NpdGVBbmRSZWFkYmFj
ayhwaXhlbEFycmF5LT5kYXRhKCksIGludmVydFJlY3QpOworICAgICAgICBtX2xheWVyVHJlZVZp
ZXcuY29tcG9zaXRlQW5kUmVhZGJhY2socGl4ZWxBcnJheS0+ZGF0YSgpLCBpbnZlcnRSZWN0KTsK
ICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEocGl4ZWxBcnJh
eS5nZXQoKSwgcmVjdC5zaXplKCksIEludFJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpLCBJ
bnRQb2ludCgpKTsKICAgICAgICAgZ2Muc2F2ZSgpOwogICAgICAgICBnYy50cmFuc2xhdGUoSW50
U2l6ZSgwLCBiaXRtYXBIZWlnaHQpKTsKQEAgLTEyMjUsNyArMTIyOCw3IEBAIHZvaWQgV2ViVmll
d0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiByZWN0KQogICAg
ICAgICBpZiAoY2FudmFzKSB7CiAgICAgICAgICAgICAvLyBDbGlwIHJlY3QgdG8gdGhlIGNvbmZp
bmVzIG9mIHRoZSByb290TGF5ZXJUZXh0dXJlLgogICAgICAgICAgICAgSW50UmVjdCByZXNpemVS
ZWN0KHJlY3QpOwotICAgICAgICAgICAgcmVzaXplUmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQ
b2ludCgwLCAwKSwgbV9sYXllclRyZWVIb3N0LT52aWV3cG9ydFNpemUoKSkpOworICAgICAgICAg
ICAgcmVzaXplUmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9sYXllclRy
ZWVWaWV3LnZpZXdwb3J0U2l6ZSgpKSk7CiAgICAgICAgICAgICBkb1BpeGVsUmVhZGJhY2tUb0Nh
bnZhcyhjYW52YXMsIHJlc2l6ZVJlY3QpOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTEyNTUsNyAr
MTI1OCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sKQogewogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgp
KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzUmVkcmF3KCk7CisgICAgICAgIG1f
bGF5ZXJUcmVlVmlldy5zZXROZWVkc1JlZHJhdygpOwogICAgIGVsc2UgewogICAgICAgICBBU1NF
UlQoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpOwogICAgICAgICBpZiAoIXBhZ2Uo
KSkKQEAgLTEyNjQsNyArMTI2Nyw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29s
KQogICAgICAgICBpZiAobV9wYWdlT3ZlcmxheXMpCiAgICAgICAgICAgICBtX3BhZ2VPdmVybGF5
cy0+dXBkYXRlKCk7CiAKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21wb3NpdGUoKTsKKyAg
ICAgICAgbV9sYXllclRyZWVWaWV3LmNvbXBvc2l0ZSgpOwogICAgIH0KICNlbmRpZgogfQpAQCAt
MTI3Miw4ICsxMjc1LDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wpCiB2b2lk
IFdlYlZpZXdJbXBsOjpsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKQogewogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAobV9sYXllclRyZWVIb3N0KQot
ICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmxvc2VDb21wb3NpdG9yQ29udGV4dChudW1UaW1lcyk7
CisgICAgaWYgKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpCisgICAgICAgIG1fbGF5ZXJUcmVl
Vmlldy5sb3NlQ29tcG9zaXRvckNvbnRleHQobnVtVGltZXMpOwogI2VuZGlmCiB9CiAKQEAgLTIx
MDcsOCArMjExMCw4IEBAIGJvb2wgV2ViVmlld0ltcGw6OmNvbXB1dGVQYWdlU2NhbGVGYWN0b3JM
aW1pdHMoKQogICAgIH0KICAgICBBU1NFUlQobV9taW5pbXVtUGFnZVNjYWxlRmFjdG9yIDw9IG1f
bWF4aW11bVBhZ2VTY2FsZUZhY3Rvcik7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0
UGFnZVNjYWxlRmFjdG9yTGltaXRzKG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvciwgbV9tYXhpbXVt
UGFnZVNjYWxlRmFjdG9yKTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVlVmlldy5pc051bGwoKSkKKyAg
ICAgICAgbV9sYXllclRyZWVWaWV3LnNldFBhZ2VTY2FsZUZhY3RvckxpbWl0cyhtX21pbmltdW1Q
YWdlU2NhbGVGYWN0b3IsIG1fbWF4aW11bVBhZ2VTY2FsZUZhY3Rvcik7CiAjZW5kaWYKIAogICAg
IGZsb2F0IGNsYW1wZWRTY2FsZSA9IGNsYW1wUGFnZVNjYWxlRmFjdG9yVG9MaW1pdHMocGFnZVNj
YWxlRmFjdG9yKCkpOwpAQCAtMjcxMCwxNyArMjcxMywxMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjph
ZGRQYWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheSogb3ZlcmxheSwgaW50IHpPcmRlcikKICAgICAg
ICAgbV9wYWdlT3ZlcmxheXMgPSBQYWdlT3ZlcmxheUxpc3Q6OmNyZWF0ZSh0aGlzKTsKIAogICAg
IG1fcGFnZU92ZXJsYXlzLT5hZGQob3ZlcmxheSwgek9yZGVyKTsKLSAgICBzZXRSb290TGF5ZXJO
ZWVkc0Rpc3BsYXkoKTsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6cmVtb3ZlUGFnZU92ZXJsYXko
V2ViUGFnZU92ZXJsYXkqIG92ZXJsYXkpCiB7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlzICYmIG1f
cGFnZU92ZXJsYXlzLT5yZW1vdmUob3ZlcmxheSkpIHsKLSAgICAgICAgc2V0Um9vdExheWVyTmVl
ZHNEaXNwbGF5KCk7Ci0KLSAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzLT5lbXB0eSgpKQotICAg
ICAgICAgICAgbV9wYWdlT3ZlcmxheXMgPSBudWxscHRyOwotICAgIH0KKyAgICBpZiAobV9wYWdl
T3ZlcmxheXMgJiYgbV9wYWdlT3ZlcmxheXMtPnJlbW92ZShvdmVybGF5KSAmJiBtX3BhZ2VPdmVy
bGF5cy0+ZW1wdHkoKSkKKyAgICAgICAgbV9wYWdlT3ZlcmxheXMgPSBudWxscHRyOwogfQogCiB2
b2lkIFdlYlZpZXdJbXBsOjpzZXRPdmVybGF5TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciog
bGF5ZXIpCkBAIC0yODI4LDI5ICsyODI2LDMxIEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RH
cmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAgICAgICB9CiAgICAgICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7CiAg
ICAgfQotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
c2V0Um9vdExheWVyKGxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IDApOworCisgICAg
aWYgKGxheWVyKQorICAgICAgICBtX3Jvb3RMYXllciA9IFdlYkxheWVyKGxheWVyLT5wbGF0Zm9y
bUxheWVyKCkpOworCisgICAgaWYgKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpCisgICAgICAg
IG1fbGF5ZXJUcmVlVmlldy5zZXRSb290TGF5ZXIobGF5ZXIgPyAmbV9yb290TGF5ZXIgOiAwKTsK
IAogICAgIEludFJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVp
Z2h0KTsKICAgICBpZiAoIW1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKQogICAgICAg
ICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQogCi12b2lkIFdl
YlZpZXdJbXBsOjpzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKQordm9pZCBXZWJWaWV3SW1wbDo6
c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpCiB7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9z
dCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdCgpOworICAgIG1fbGF5
ZXJUcmVlVmlldy5zZXROZWVkc1JlZHJhdygpOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpzY3Jv
bGxSb290TGF5ZXJSZWN0KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCkKK3ZvaWQgV2ViVmlld0ltcGw6OnNjcm9sbFJvb3RMYXllclJlY3QoY29uc3Qg
SW50U2l6ZSYsIGNvbnN0IEludFJlY3QmKQogewogICAgIHVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0
KCk7Ci0gICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiB9CiAKIHZvaWQgV2ViVmlld0lt
cGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAg
QVNTRVJUKG1fbGF5ZXJUcmVlSG9zdCk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZVZpZXcuaXNO
dWxsKCkpOwogCiAgICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI4NTksNyAr
Mjg1OSw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QpCiAgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSB2aWV3LT53aW5kb3dUb0Nv
bnRlbnRzKHJlY3QpOwogICAgIHVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7CiAgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudEhvc3QtPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7Ci0gICAgc2V0
Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiB9CiAKIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCog
V2ViVmlld0ltcGw6Om5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCgpCkBAIC0yODcyLDggKzI4NzEs
OCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7CiAgICAgaWYgKGlz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAgICAgICAgIGlmIChDQ1Byb3h5Ojpo
YXNJbXBsVGhyZWFkKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOwot
ICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0FuaW1hdGUoKTsKKyAgICAgICAg
ICAgIEFTU0VSVCghbV9sYXllclRyZWVWaWV3LmlzTnVsbCgpKTsKKyAgICAgICAgICAgIG1fbGF5
ZXJUcmVlVmlldy5zZXROZWVkc0FuaW1hdGUoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICBtX2NsaWVudC0+c2NoZWR1bGVBbmltYXRpb24oKTsKICAgICB9IGVsc2UKQEAgLTI5MjYsNDYg
KzI5MjUsNDUgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlKGJvb2wgYWN0aXZlKQogICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Fj
dGl2ZSA9IGZhbHNlOwogICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbmlzaCBhbGwgR0wgcmVuZGVy
aW5nIGJlZm9yZSBzZW5kaW5nIGRpZERlYWN0aXZhdGVDb21wb3NpdG9yKCkgdG8gcHJldmVudAog
ICAgICAgICAvLyBmbGlja2VyaW5nIHdoZW4gY29tcG9zaXRpbmcgdHVybnMgb2ZmLgotICAgICAg
ICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5maW5p
c2hBbGxSZW5kZXJpbmcoKTsKKyAgICAgICAgaWYgKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkp
CisgICAgICAgICAgICBtX2xheWVyVHJlZVZpZXcuZmluaXNoQWxsUmVuZGVyaW5nKCk7CiAgICAg
ICAgIG1fY2xpZW50LT5kaWREZWFjdGl2YXRlQ29tcG9zaXRvcigpOwotICAgIH0gZWxzZSBpZiAo
bV9sYXllclRyZWVIb3N0KSB7CisgICAgfSBlbHNlIGlmICghbV9sYXllclRyZWVWaWV3LmlzTnVs
bCgpKSB7CiAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsK
ICAgICAgICAgdXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKTsKIAotICAgICAgICBtX2NsaWVudC0+
ZGlkQWN0aXZhdGVDb21wb3NpdG9yKG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRvcklkZW50aWZp
ZXIoKSk7CisgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUNvbXBvc2l0b3IobV9sYXllclRy
ZWVWaWV3LmNvbXBvc2l0b3JJZGVudGlmaWVyKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFRS
QUNFX0VWRU5UKCJXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KHRydWUpIiwgdGhpcywgMCk7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkZWZhdWx0
UmVmcmVzaFJhdGUgPSA2MC4wOwogCi0gICAgICAgIFdlYkNvcmU6OkNDU2V0dGluZ3MgY2NTZXR0
aW5nczsKLSAgICAgICAgY2NTZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBwYWdlKCktPnNl
dHRpbmdzKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKTsKLSAgICAgICAgY2NTZXR0aW5n
cy5jb21wb3NpdGVPZmZzY3JlZW4gPSBzZXR0aW5ncygpLT5jb21wb3NpdGVUb1RleHR1cmVFbmFi
bGVkKCk7Ci0gICAgICAgIGNjU2V0dGluZ3Muc2hvd0ZQU0NvdW50ZXIgPSBzZXR0aW5ncygpLT5z
aG93RlBTQ291bnRlcigpOwotICAgICAgICBjY1NldHRpbmdzLnNob3dQbGF0Zm9ybUxheWVyVHJl
ZSA9IHNldHRpbmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJlZSgpOwotICAgICAgICBjY1NldHRp
bmdzLnJlZnJlc2hSYXRlID0gc2NyZWVuUmVmcmVzaFJhdGUocGFnZSgpLT5tYWluRnJhbWUoKS0+
dmlldygpKTsKKyAgICAgICAgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MgbGF5ZXJUcmVlVmll
d1NldHRpbmdzOworICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50
aW5nID0gcGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCk7Cisg
ICAgICAgIGxheWVyVHJlZVZpZXdTZXR0aW5ncy5jb21wb3NpdGVPZmZzY3JlZW4gPSBzZXR0aW5n
cygpLT5jb21wb3NpdGVUb1RleHR1cmVFbmFibGVkKCk7CisgICAgICAgIGxheWVyVHJlZVZpZXdT
ZXR0aW5ncy5zaG93RlBTQ291bnRlciA9IHNldHRpbmdzKCktPnNob3dGUFNDb3VudGVyKCk7Cisg
ICAgICAgIGxheWVyVHJlZVZpZXdTZXR0aW5ncy5zaG93UGxhdGZvcm1MYXllclRyZWUgPSBzZXR0
aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUoKTsKKyAgICAgICAgbGF5ZXJUcmVlVmlld1Nl
dHRpbmdzLnJlZnJlc2hSYXRlID0gc2NyZWVuUmVmcmVzaFJhdGUocGFnZSgpLT5tYWluRnJhbWUo
KS0+dmlldygpKTsKIAotICAgICAgICBBU1NFUlQoY2NTZXR0aW5ncy5yZWZyZXNoUmF0ZSA+PSAw
KTsKLSAgICAgICAgaWYgKCFjY1NldHRpbmdzLnJlZnJlc2hSYXRlKQotICAgICAgICAgICAgY2NT
ZXR0aW5ncy5yZWZyZXNoUmF0ZSA9IGRlZmF1bHRSZWZyZXNoUmF0ZTsKKyAgICAgICAgQVNTRVJU
KGxheWVyVHJlZVZpZXdTZXR0aW5ncy5yZWZyZXNoUmF0ZSA+PSAwKTsKKyAgICAgICAgaWYgKCFs
YXllclRyZWVWaWV3U2V0dGluZ3MucmVmcmVzaFJhdGUpCisgICAgICAgICAgICBsYXllclRyZWVW
aWV3U2V0dGluZ3MucmVmcmVzaFJhdGUgPSBkZWZhdWx0UmVmcmVzaFJhdGU7CiAKLSAgICAgICAg
Y2NTZXR0aW5ncy5wZXJUaWxlUGFpbnRpbmcgPSBwYWdlKCktPnNldHRpbmdzKCktPnBlclRpbGVE
cmF3aW5nRW5hYmxlZCgpOwotICAgICAgICBjY1NldHRpbmdzLnBhcnRpYWxTd2FwRW5hYmxlZCA9
IHBhZ2UoKS0+c2V0dGluZ3MoKS0+cGFydGlhbFN3YXBFbmFibGVkKCk7CisgICAgICAgIGxheWVy
VHJlZVZpZXdTZXR0aW5ncy5wZXJUaWxlUGFpbnRpbmcgPSBwYWdlKCktPnNldHRpbmdzKCktPnBl
clRpbGVEcmF3aW5nRW5hYmxlZCgpOworICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3MucGFy
dGlhbFN3YXBFbmFibGVkID0gcGFnZSgpLT5zZXR0aW5ncygpLT5wYXJ0aWFsU3dhcEVuYWJsZWQo
KTsKIAogICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCA9IE5vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdDo6Y3JlYXRlKFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlz
KSk7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdCA9IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKHRo
aXMsIGNjU2V0dGluZ3MpOwotICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7Ci0gICAgICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPnNldEhhdmVXaGVlbEV2ZW50SGFuZGxlcnMobV9oYXZlV2hl
ZWxFdmVudEhhbmRsZXJzKTsKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0UGFnZVNj
YWxlRmFjdG9yTGltaXRzKG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvciwgbV9tYXhpbXVtUGFnZVNj
YWxlRmFjdG9yKTsKKyAgICAgICAgbV9sYXllclRyZWVWaWV3LmluaXRpYWxpemUodGhpcywgbV9y
b290TGF5ZXIsIGxheWVyVHJlZVZpZXdTZXR0aW5ncyk7CisgICAgICAgIGlmICghbV9sYXllclRy
ZWVWaWV3LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBtX2xheWVyVHJlZVZpZXcuc2V0SGF2ZVdo
ZWVsRXZlbnRIYW5kbGVycyhtX2hhdmVXaGVlbEV2ZW50SGFuZGxlcnMpOworICAgICAgICAgICAg
bV9sYXllclRyZWVWaWV3LnNldFBhZ2VTY2FsZUZhY3RvckxpbWl0cyhtX21pbmltdW1QYWdlU2Nh
bGVGYWN0b3IsIG1fbWF4aW11bVBhZ2VTY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICB1cGRhdGVM
YXllclRyZWVWaWV3cG9ydCgpOwotICAgICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQ29t
cG9zaXRvcihtX2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0b3JJZGVudGlmaWVyKCkpOworICAgICAg
ICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQ29tcG9zaXRvcihtX2xheWVyVHJlZVZpZXcuY29t
cG9zaXRvcklkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxl
ZCA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzKQogICAgICAgICAgICAg
ICAgIG1fcGFnZU92ZXJsYXlzLT51cGRhdGUoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC5jbGVhcigpOwogICAgICAgICAgICAgbV9ub25Db21wb3NpdGVk
Q29udGVudEhvc3QuY2xlYXIoKTsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRGVhY3RpdmF0ZUNv
bXBvc2l0b3IoKTsKQEAgLTI5NzgsMTkgKzI5NzYsMjEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0
SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogCiAjZW5kaWYKIAot
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gV2ViVmlld0ltcGw6OmNyZWF0ZUxheWVyVHJl
ZUhvc3RDb250ZXh0M0QoKQorV2ViR3JhcGhpY3NDb250ZXh0M0QqIFdlYlZpZXdJbXBsOjpjcmVh
dGVDb250ZXh0M0QoKQogewotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9
IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5yZWxlYXNlKCk7Ci0gICAgaWYg
KCFjb250ZXh0KSB7CisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIHdlYkNvbnRleHQgPSBtX3Rl
bXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QubGVha1B0cigpOworICAgIGlmICghd2Vi
Q29udGV4dCkgeworICAgICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQ7CiAg
ICAgICAgIGlmIChDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkpCiAgICAgICAgICAgICBjb250ZXh0
ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGb3JBbm90
aGVyVGhyZWFkKGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9t
ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZShnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICAgICAgd2Vi
Q29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29u
dGV4dDNEKGNvbnRleHQucmVsZWFzZSgpLmxlYWtSZWYoKSk7CiAgICAgfQotICAgIHJldHVybiBj
b250ZXh0OworICAgIHJldHVybiB3ZWJDb250ZXh0OwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjph
cHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBwYWdl
U2NhbGVEZWx0YSkKK3ZvaWQgV2ViVmlld0ltcGw6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3Qg
V2ViU2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZURlbHRhKQogewogICAgIGlmICgh
bWFpbkZyYW1lSW1wbCgpIHx8ICFtYWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpKQogICAgICAg
ICByZXR1cm47CkBAIC0zMDAzLDggKzMwMDMsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjphcHBseVNj
cm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBwYWdlU2NhbAog
ICAgICAgICAvLyBpbiB0aGUgb2xkIGNvb3JkaW5hdGUgc3BhY2UsIHNvIHdlIGZpcnN0IG5lZWQg
dG8gbXVsdGlwbHkgdGhlbQogICAgICAgICAvLyBieSB0aGUgcGFnZSBzY2FsZSBkZWx0YS4KICAg
ICAgICAgV2ViU2l6ZSBzY3JvbGxPZmZzZXQgPSBtYWluRnJhbWUoKS0+c2Nyb2xsT2Zmc2V0KCk7
Ci0gICAgICAgIHNjcm9sbE9mZnNldC53aWR0aCArPSBzY3JvbGxEZWx0YS53aWR0aCgpOwotICAg
ICAgICBzY3JvbGxPZmZzZXQuaGVpZ2h0ICs9IHNjcm9sbERlbHRhLmhlaWdodCgpOworICAgICAg
ICBzY3JvbGxPZmZzZXQud2lkdGggKz0gc2Nyb2xsRGVsdGEud2lkdGg7CisgICAgICAgIHNjcm9s
bE9mZnNldC5oZWlnaHQgKz0gc2Nyb2xsRGVsdGEuaGVpZ2h0OwogICAgICAgICBXZWJQb2ludCBz
Y2FsZWRTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0LndpZHRoICogcGFnZVNjYWxlRGVsdGEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQuaGVpZ2h0ICog
cGFnZVNjYWxlRGVsdGEpOwogICAgICAgICBzZXRQYWdlU2NhbGVGYWN0b3IocGFnZVNjYWxlRmFj
dG9yKCkgKiBwYWdlU2NhbGVEZWx0YSwgc2NhbGVkU2Nyb2xsT2Zmc2V0KTsKQEAgLTMwMjMsNyAr
MzAyMyw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKQogICAg
ICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVTd2FwQnVmZmVycygpOwogfQogCi12b2lkIFdlYlZp
ZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCit2b2lkIFdl
YlZpZXdJbXBsOjpkaWRSZWJpbmRHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKQogewogCiAg
ICAgLy8gU3dpdGNoIGJhY2sgdG8gc29mdHdhcmUgcmVuZGVyaW5nIG1vZGUsIGlmIG5lY2Vzc2Fy
eQpAQCAtMzA1MCw3ICszMDUwLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3Np
dGUoKQogCiB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllclRyZWVWaWV3cG9ydCgpCiB7Ci0g
ICAgaWYgKCFwYWdlKCkgfHwgIW1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0IHx8ICFtX2xheWVy
VHJlZUhvc3QpCisgICAgaWYgKCFwYWdlKCkgfHwgIW1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0
IHx8IG1fbGF5ZXJUcmVlVmlldy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRnJh
bWVWaWV3KiB2aWV3ID0gcGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpOwpAQCAtMzA2NiwzMCAr
MzA2NiwzMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllclRyZWVWaWV3cG9ydCgpCiAg
ICAgICAgIGxheWVyQWRqdXN0WCA9IC12aWV3LT5jb250ZW50c1NpemUoKS53aWR0aCgpICsgdmll
dy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKS53aWR0aCgpOwogICAgIH0KICAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdC0+c2V0Vmlld3BvcnQodmlzaWJsZVJlY3Quc2l6ZSgpLCB2aWV3
LT5jb250ZW50c1NpemUoKSwgc2Nyb2xsLCBwYWdlU2NhbGVGYWN0b3IoKSwgbGF5ZXJBZGp1c3RY
KTsKLSAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0KHZpc2libGVSZWN0LnNpemUoKSk7
Ci0gICAgbV9sYXllclRyZWVIb3N0LT5zZXRQYWdlU2NhbGUocGFnZVNjYWxlRmFjdG9yKCkpOwor
ICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRWaWV3cG9ydFNpemUodmlzaWJsZVJlY3Quc2l6ZSgpKTsK
KyAgICBtX2xheWVyVHJlZVZpZXcuc2V0UGFnZVNjYWxlKHBhZ2VTY2FsZUZhY3RvcigpKTsKIH0K
IAogV2ViR3JhcGhpY3NDb250ZXh0M0QqIFdlYlZpZXdJbXBsOjpncmFwaGljc0NvbnRleHQzRCgp
CiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChtX3BhZ2UtPnNl
dHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkgJiYgYWxsb3dzQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpKSB7Ci0gICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3QpIHsKLSAg
ICAgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiB3ZWJDb250ZXh0ID0gR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QobV9sYXllclRyZWVIb3N0
LT5jb250ZXh0KCkpOwotICAgICAgICAgICAgaWYgKHdlYkNvbnRleHQgJiYgIXdlYkNvbnRleHQt
PmlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gd2ViQ29udGV4dDsKKyAg
ICAgICAgaWYgKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIFdlYkdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9sYXllclRyZWVWaWV3LmNvbnRleHQoKTsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0ICYmICFjb250ZXh0LT5pc0NvbnRleHRMb3N0KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fdGVt
cG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRCkgewotICAgICAgICAgICAgV2ViR3JhcGhp
Y3NDb250ZXh0M0QqIHdlYkNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJh
Y3RXZWJHcmFwaGljc0NvbnRleHQzRChtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0
M0QuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKHdlYkNvbnRleHQgJiYgIXdlYkNvbnRleHQtPmlz
Q29udGV4dExvc3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gd2ViQ29udGV4dDsKKyAgICAg
ICAgICAgIGlmIChtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QgJiYgIW1fdGVt
cG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC0+aXNDb250ZXh0TG9zdCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QuZ2V0
KCk7CiAgICAgICAgIH0KKyAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
OwogICAgICAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQotICAgICAgICAgICAgbV90
ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNEID0gR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGb3JBbm90aGVyVGhyZWFkKGdldENvbXBvc2l0b3JD
b250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6
UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgICAgICAgICAgY29udGV4dCA9IEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0Rm9yQW5vdGhlclRocmVh
ZChnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNEID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwg
bV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93KTsKKyAgICAgICAgICAgIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
KGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFw
aGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwogCi0gICAgICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQz
RChtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QuZ2V0KCkpOworICAgICAgICBt
X3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QgPSBhZG9wdFB0cihHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChjb250ZXh0LnJlbGVh
c2UoKS5sZWFrUmVmKCkpKTsKKyAgICAgICAgcmV0dXJuIG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFw
aGljc0NvbnRleHQzRC5nZXQoKTsKICAgICB9CiAjZW5kaWYKICAgICByZXR1cm4gMDsKQEAgLTMx
MTIsNyArMzExMyw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldFZpc2liaWxpdHlTdGF0ZShXZWJQ
YWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0ZSwKICAgICAgICAgYm9vbCB2aXNpYmxl
ID0gdmlzaWJpbGl0eVN0YXRlID09IFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlOwogICAg
ICAgICBpZiAoIXZpc2libGUpCiAgICAgICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dC0+cHJvdGVjdFZpc2libGVUaWxlVGV4dHVyZXMoKTsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5zZXRWaXNpYmxlKHZpc2libGUpOworICAgICAgICBtX2xheWVyVHJlZVZpZXcuc2V0VmlzaWJs
ZSh2aXNpYmxlKTsKICAgICB9CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5oCmluZGV4IDYxYTJjMDU3OTViN2Q0ZGU4YTVmODgyMWIzMTVhNjliN2NjMDhj
OTcuLmMzZjBjZTdhMWJhNWMzYTE2ZmM0ODE4OTM2ODEwYWU5YTI2ODNkOGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMzIsNiArMzIsOSBAQAogI2RlZmlu
ZSBXZWJWaWV3SW1wbF9oCiAKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uUG9saWN5LmgiCisjaW5j
bHVkZSAicGxhdGZvcm0vV2ViTGF5ZXIuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllclRy
ZWVWaWV3LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oIgog
I2luY2x1ZGUgInBsYXRmb3JtL1dlYlBvaW50LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViUmVj
dC5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlNpemUuaCIKQEAgLTQ5LDcgKzUyLDYgQEAKICNp
bmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgiCiAjaW5jbHVkZSAiUGFnZU92ZXJs
YXlMaXN0LmgiCiAjaW5jbHVkZSAiVXNlck1lZGlhQ2xpZW50SW1wbC5oIgotI2luY2x1ZGUgImNj
L0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogCkBAIC05Niw3ICs5OCw3IEBAIGNsYXNzIFdlYk1vdXNlV2hlZWxF
dmVudDsKIGNsYXNzIFdlYlNldHRpbmdzSW1wbDsKIGNsYXNzIFdlYlRvdWNoRXZlbnQ7CiAKLWNs
YXNzIFdlYlZpZXdJbXBsIDogcHVibGljIFdlYlZpZXcsIHB1YmxpYyBXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3RDbGllbnQsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXdJbXBsPiB7CitjbGFzcyBX
ZWJWaWV3SW1wbCA6IHB1YmxpYyBXZWJWaWV3LCBwdWJsaWMgV2ViTGF5ZXJUcmVlVmlld0NsaWVu
dCwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKIHB1YmxpYzoKICAgICAvLyBXZWJX
aWRnZXQgbWV0aG9kczoKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKQEAgLTEwOSw3ICsxMTEs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxFeGl0RnVsbFNjcmVlbigpOwogICAg
IHZpcnR1YWwgdm9pZCBkaWRFeGl0RnVsbFNjcmVlbigpOwogICAgIHZpcnR1YWwgdm9pZCBhbmlt
YXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0gICAgLy8gVGhpcyBhbHNvIGltcGxlbWVudHMg
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q2xpZW50OjpsYXlvdXQoKQorICAgIC8vIFRoaXMgYWxz
byBpbXBsZW1lbnRzIFdlYkxheWVyVHJlZVZpZXdDbGllbnQ6OmxheW91dCgpCiAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDYW52YXMqLCBjb25z
dCBXZWJSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpOwpAQCAtMjM2LDEz
ICsyMzgsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRQYWdlT3ZlcmxheShXZWJQ
YWdlT3ZlcmxheSosIGludCAvKiB6T3JkZXIgKi8pOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVQ
YWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheSopOwogCi0gICAgLy8gQ0NMYXllclRyZWVIb3N0Q2xp
ZW50CisgICAgLy8gV2ViTGF5ZXJUcmVlVmlld0NsaWVudAogICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVBbmltYXRpb25zKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFw
cGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGZsb2F0KTsKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVy
VHJlZUhvc3RDb250ZXh0M0QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2Fs
ZShjb25zdCBXZWJTaXplJiwgZmxvYXQpOworICAgIHZpcnR1YWwgV2ViR3JhcGhpY3NDb250ZXh0
M0QqIGNyZWF0ZUNvbnRleHQzRCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWJpbmRHcmFwaGlj
c0NvbnRleHQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgp
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2Vzcyk7CiAgICAgdmly
dHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCk7CiAKICAgICAvLyBXZWJWaWV3SW1wbApAQCAt
NDIxLDcgKzQyMyw3IEBAIHB1YmxpYzoKICAgICBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmcoKTsKICAgICBib29sIHBhZ2VIYXNSVExTdHlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0
Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwotICAgIHZvaWQgc2V0
Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CisgICAgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5
ZXJTeW5jKCk7CiAgICAgdm9pZCBzY3JvbGxSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CiAg
ICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
CiAgICAgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KiBub25Db21wb3NpdGVkQ29udGVudEhvc3Qo
KTsKQEAgLTY1MSw3ICs2NTMsOCBAQCBwcml2YXRlOgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fcm9vdExheWVyU2Nyb2xsRGFtYWdlOwog
ICAgIE93blB0cjxOb25Db21wb3NpdGVkQ29udGVudEhvc3Q+IG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0OwotICAgIFJlZlB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVl
SG9zdDsKKyAgICBXZWJMYXllclRyZWVWaWV3IG1fbGF5ZXJUcmVlVmlldzsKKyAgICBXZWJMYXll
ciBtX3Jvb3RMYXllcjsKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX3Jvb3RHcmFwaGlj
c0xheWVyOwogICAgIGJvb2wgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmU7CiAgICAg
Ym9vbCBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZDsKQEAgLTY2Nyw3ICs2NzAsNyBAQCBwcml2
YXRlOgogICAgIC8vIElmIHdlIGF0dGVtcHQgdG8gZmV0Y2ggdGhlIG9uLXNjcmVlbiBHcmFwaGlj
c0NvbnRleHQzRCBiZWZvcmUKICAgICAvLyB0aGUgY29tcG9zaXRvciBoYXMgYmVlbiB0dXJuZWQg
b24sIHdlIG5lZWQgdG8gaW5zdGFudGlhdGUgaXQKICAgICAvLyBlYXJseS4gVGhpcyBtZW1iZXIg
aG9sZHMgb24gdG8gdGhlIEdDM0QgaW4gdGhpcyBjYXNlLgotICAgIFJlZlB0cjxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRD4gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNEOwor
ICAgIE93blB0cjxXZWJHcmFwaGljc0NvbnRleHQzRD4gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBo
aWNzQ29udGV4dDNEOwogICAgIE93blB0cjxEZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5PiBt
X2RldmljZU9yaWVudGF0aW9uQ2xpZW50UHJveHk7CiAgICAgT3duUHRyPEdlb2xvY2F0aW9uQ2xp
ZW50UHJveHk+IG1fZ2VvbG9jYXRpb25DbGllbnRQcm94eTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJMYXllclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9XZWJMYXllclRlc3QuY3BwCmluZGV4IGUwY2FiODdiZGY1NWJhMjhmYjcy
NjY3MDk2ODI2YjJkMDNjNjdjNDYuLjFlZWQ4MWFlYTQxNmM5MGIxNGVlZWVjNGEzZDcyODE2ZWQx
ZWUzZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViTGF5ZXJU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkxheWVyVGVzdC5j
cHAKQEAgLTU3LDYgKzU3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9s
bEFuZFNjYWxlKGNvbnN0IFdlYlNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBzY2FsZUZhY3Rvcikg
eyB9CiAgICAgdmlydHVhbCBXZWJHcmFwaGljc0NvbnRleHQzRCogY3JlYXRlQ29udGV4dDNEKCkg
eyByZXR1cm4gQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKFdlYkdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCkpLmxlYWtQdHIoKTsgfQogICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWJpbmRHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRp
ZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKSB7IH0KIH07CiAKIGNsYXNzIE1vY2tXZWJDb250ZW50TGF5
ZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29udGVudExheWVyQ2xpZW50IHsKQEAgLTcyLDcgKzc0LDcg
QEAgcHVibGljOgogICAgICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7
CiAgICAgICAgIG1fcm9vdExheWVyID0gV2ViTGF5ZXI6OmNyZWF0ZSgpOwogICAgICAgICBFWFBF
Q1RfQ0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQW55TnVtYmVyKCkp
OwotICAgICAgICBtX3ZpZXcgPSBXZWJMYXllclRyZWVWaWV3OjpjcmVhdGUoJm1fY2xpZW50LCBt
X3Jvb3RMYXllciwgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MoKSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKG1fdmlldy5pbml0aWFsaXplKCZtX2NsaWVudCwgbV9yb290TGF5ZXIsIFdlYkxheWVy
VHJlZVZpZXc6OlNldHRpbmdzKCkpKTsKICAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBl
Y3RhdGlvbnMoJm1fY2xpZW50KTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121377</attachid>
            <date>2012-01-05 18:01:52 -0800</date>
            <delta_ts>2012-01-18 16:12:04 -0800</delta_ts>
            <desc>split the input related things into a separate interface</desc>
            <filename>bug-75591-20120105180151.patch</filename>
            <type>text/plain</type>
            <size>43136</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MjQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDA5ZDk1NDliODYwNGFmNGY4MjI0MTdmOGI4OTA2NjdiYTAyNGM4YTAuLmRhNDZhNmIwYTczMGI0
OTJjYjIwMjU2N2VlOTJiZmYxMWYwMmU2ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDUgKzEsNzcgQEAKIDIwMTItMDEtMDQgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9t
aXVtLm9yZz4KIAorICAgICAgICBbY2hyb21pdW1dIE1ha2UgV2ViVmlld0ltcGwgZGVwZW5kIG9u
IFdlYkxheWVyVHJlZVZpZXcgaW5zdGVhZCBvZiBDQ0xheWVyVHJlZUhvc3QKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTkxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjb252ZXJ0cyBXZWJWaWV3
SW1wbCBmcm9tIGRlcGVuZGluZyBvbiBDQ0xheWVyVHJlZUhvc3QgdG8gV2ViTGF5ZXJUcmVlVmll
dyBpbiBvcmRlciB0byBwcm92aWRlIGJldHRlcgorICAgICAgICBpc29sYXRpb24gYW5kIGFsbG93
IGZvciBmdXR1cmUgcmVmYWN0b3JpbmdzLiBUaGUgY2hhbmdlcyB0byBXZWJWaWV3SW1wbCBhcmUg
bW9zdGx5IG1lY2hhbmljYWwuIFRoZQorICAgICAgICBXZWJMYXllclRyZWVWaWV3IGFuZCBXZWJM
YXllclRyZWVWaWV3Q2xpZW50IGludGVyZmFjZXMgaGF2ZSBib3RoIGdyb3duIGFuZCBjaGFuZ2Vk
IHNsaWdodGx5OgorCisgICAgICAgIC0gU2V0dXAgcGF0aCBmb3IgV2ViTGF5ZXJUcmVlVmlldyBj
aGFuZ2VkIHRvIGV4cG9zZSBhbiBpbml0aWFsaXplKCkgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIGNy
ZWF0ZSgpIGZhY3RvcnkKKyAgICAgICAgZnVuY3Rpb24uIFRoZSBuZXcgbW9kZWwgaXMgdGhhdCBh
IFdlYkxheWVyVHJlZVZpZXcgd2hlbiBjb25zdHJ1Y3RlZCBpcyBpbiBhIG51bGwgc3RhdGUuIENh
bGxpbmcgaW5pdGlhbGl6ZSgpCisgICAgICAgIGF0dGVtcHRzIHRvIHJlLWluaXRpYWxpemUgdGhl
IFdMVFYsIHdoaWNoIGNhbiBlaXRoZXIgZmFpbCBvciBzdWNjZWVkLiAgQWxsIG90aGVyIGZ1bmN0
aW9ucyBtdXN0IGJlIGNhbGxlZCBvbiBhCisgICAgICAgIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXpl
ZCB2aWV3LgorCisgICAgICAgIC0gV2ViTGF5ZXJUcmVlVmlldyBleHBhbmRlZCB0byBpbmNsdWRl
IGZ1bmN0aW9uYWxpdHkgdGhhdCBDQ0xheWVyVHJlZUhvc3QgZXhwb3NlcyBidXQgV2ViTGF5ZXJU
cmVlVmlldyBkaWQgbm90LgorICAgICAgICBTb21lIG9mIHRoaXMgaXMgb25seSB2YWxpZCBmb3Ig
dGhlIHNpbmdsZSB0aHJlYWQgY2FzZSBhbmQgd2lsbCBiZSByZW1vdmVkIHdoZW4gd2UgaW52ZXJ0
IHRoZSBzY2hlZHVsaW5nIGNvbnRyb2wKKyAgICAgICAgbG9naWMsIHRoZXNlIGJpdHMgYXJlIGNv
bW1lbnRlZC4KKworICAgICAgICAtIFdlYkxheWVyVHJlZVZpZXdDbGllbnQgZXhwYW5kZWQgd2l0
aCBzb21lIGZsb3ctY29udHJvbCByZWxhdGVkIEFQSXMuCisKKyAgICAgICAgUmVmYWN0b3Igb25s
eSwgbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dl
YkxheWVyVHJlZVZpZXcuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6U2V0
dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6aXNO
dWxsKToKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5o
OgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Q2hyb21lQ2xpZW50SW1wbDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYyk6CisgICAgICAg
ICogc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRy
ZWVWaWV3Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6
c2V0SGF2ZVdoZWVsRXZlbnRIYW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJl
ZVZpZXc6OmNvbXBvc2l0b3JJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlVmlldzo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6
OnNldE5lZWRzQW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnVw
ZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3OjpzZXRO
ZWVkc1JlZHJhdyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnNldFBhZ2VT
Y2FsZUZhY3RvckxpbWl0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnNl
dFBhZ2VTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmZpbmlzaEFs
bFJlbmRlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3Ojpsb3NlQ29tcG9zaXRvckNvbnRl
eHQpOgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpkaWRDb21taXRBbmREcmF3
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkQ29tcGxl
dGVTd2FwQnVmZmVycyk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6Om51bWJlck9mV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphbmltYXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNv
bXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpsb3NlQ29tcG9zaXRvckNv
bnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcHV0ZVBhZ2VTY2FsZUZh
Y3RvckxpbWl0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphZGRQYWdlT3Zlcmxh
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVQYWdlT3ZlcmxheSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFJvb3RMYXllclJlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZUNvbnRleHQzRCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjphcHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OmRpZFJlYmluZEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVMYXllclRyZWVWaWV3cG9ydCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpncmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpzZXRWaXNpYmlsaXR5U3RhdGUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5oOgorICAgICAgICAqIHRlc3RzL1dlYkxheWVyVGVzdC5jcHA6CisKKzIwMTItMDEtMDQg
IEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKwogICAgICAgICBbY2hyb21p
dW1dIFJvdXRlIGFsbCBhbmltYXRlIGNhbGxzIHRocm91Z2ggQ0NMYXllclRyZWVIb3N0IGluIGNv
bXBvc2l0ZWQgbW9kZSB0byBzaW1wbGlmeSByYXRlIGxpbWl0aW5nIGxvZ2ljCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTU3NwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAKaW5kZXggYTI0MTk3OGQyNWE5ZTFiYjYxZjZmMGY3YjllNDZhNWYxMjFj
ZTAwYS4uMzZiN2Y1ZmM4ZmI1YTMxYWI3NzU3NGNmMjQ1YjIyN2I2MjBjYjg1NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMzA3LDYgKzMwNyw3IEBACiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9wbGF0Zm9ybS9XZWJJbWFnZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3Bs
YXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L3BsYXRmb3JtL1dlYkxheWVyLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZvcm0v
V2ViTGF5ZXJUcmVlSW5wdXRQYXJhbXMuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9wbGF0
Zm9ybS9XZWJMYXllclRyZWVWaWV3LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvcGxhdGZv
cm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3Bs
YXRmb3JtL1dlYkxvY2FsaXplZFN0cmluZy5oJywKQEAgLTU4NSw2ICs1ODYsNyBAQAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViTGF5ZXIuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkxh
eWVySW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJJbXBsLmgnLAorICAg
ICAgICAgICAgICAgICdzcmMvV2ViTGF5ZXJUcmVlSW5wdXRQYXJhbXMuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJMYXll
clRyZWVWaWV3SW1wbC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZUlucHV0UGFyYW1zLmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRyZWVJbnB1dFBhcmFtcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQyNWFmNjFjMjRjZTNiZGZiMzMxYjA4MGZhYmRhNWMyYmNkYTgxYmMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRy
ZWVJbnB1dFBhcmFtcy5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkxheWVy
VHJlZUlucHV0UGFyYW1zX2gKKyNkZWZpbmUgV2ViTGF5ZXJUcmVlSW5wdXRQYXJhbXNfaAorCisj
aW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCisKKy8vIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gc3BlY2lmeSBpbnB1dCBy
ZWxhdGVkIHBhcmFtZXRlcnMgZm9yIGEgV2ViTGF5ZXIgdHJlZS4KK2NsYXNzIFdlYkxheWVyVHJl
ZUlucHV0UGFyYW1zIHsKK3B1YmxpYzoKKyAgICAvLyBTZXRzIHdoZXRoZXIgdGhlIGVtYmVkZGVy
IG9mIHRoaXMgdmlldyBoYXMgYW55IG1vdXNlIHdoZWVsIGV2ZW50IGhhbmRsZXJzIHJlZ2lzdGVy
ZWQuCisgICAgLy8gSWYgZmFsc2UsIHRoZW4gdGhlIGNvbXBvc2l0b3IgbWF5IGhhbmRsZSB3aGVl
bCBldmVudHMgaXRzZWxmLgorICAgIC8vIEluaXRpYWwgdmFsdWUgaXMgZmFsc2UuCisgICAgV0VC
S0lUX0VYUE9SVCB2b2lkIHNldEhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoYm9vbCk7CisKKyAgICAv
LyBTZXRzIHRoZSBjdXJyZW50IHBhZ2Ugc2NhbGUgZmFjdG9yLiBUaGUgcGFnZSBzY2FsZSBmYWN0
b3IgbGltaXRzIGFyZSBhcHBsaWVkIHRvIHRoaXMgdmFsdWUuCisgICAgLy8gSW5pdGlhbCB2YWx1
ZSBpcyAxIChubyBzY2FsZSkuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFBhZ2VTY2FsZShm
bG9hdCk7CisKKyAgICAvLyBTZXRzIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHBhZ2Ugc2NhbGUg
ZmFjdG9yLiBCb3RoIGxpbWl0cyBhcmUgaW5pdGlhbGx5IDEgKG5vIHBhZ2Ugc2NhbGUgYWxsb3dl
ZCkuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFBhZ2VTY2FsZUZhY3RvckxpbWl0cyhmbG9h
dCBtaW5pbXVtLCBmbG9hdCBtYXhpbXVtKTsKKworcHJpdmF0ZToKKyAgICAvLyBUaGlzIGNsYXNz
IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHksIHRvIHVzZSB0aGlzIHJlcXVlc3QgYW4g
aW5zdGFuY2UgZnJvbSBhIFdlYkxheWVyVHJlZVZpZXcuCisgICAgZXhwbGljaXQgV2ViTGF5ZXJU
cmVlSW5wdXRQYXJhbXMoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Kik7CisgICAgZnJpZW5kIGNs
YXNzIFdlYkxheWVyVHJlZVZpZXc7CisKKyAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdD4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBXZWJMYXllclRyZWVWaWV3X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXcuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXcuaAppbmRleCAwMjYzYjM5
MjY4YWRjZWUxMGY4MzU3NDI0NDcxZDdlZmQ0MzhhMWM0Li5mNjRiZDJkOTM5YjBhMTFjMWYxMGQy
MTE0YTA5MjBjZDc1Y2U5NmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlldy5oCkBAIC0zNSw3ICszNSw5IEBA
IHN0cnVjdCBDQ1NldHRpbmdzOwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkdy
YXBoaWNzQ29udGV4dDNEOwogY2xhc3MgV2ViTGF5ZXI7CitjbGFzcyBXZWJMYXllclRyZWVJbnB1
dFBhcmFtczsKIGNsYXNzIFdlYkxheWVyVHJlZVZpZXdDbGllbnQ7CiBzdHJ1Y3QgV2ViUmVjdDsK
IHN0cnVjdCBXZWJTaXplOwpAQCAtNDksMjEgKzUxLDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICwgc2hvd0ZQU0NvdW50ZXIoZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dQbGF0Zm9ybUxheWVy
VHJlZShmYWxzZSkKICAgICAgICAgICAgICwgcmVmcmVzaFJhdGUoMCkKLSAgICAgICAgICAgICwg
cGFydGlhbFN3YXBFbmFibGVkKGZhbHNlKSB7IH0KKyAgICAgICAgICAgICwgcGVyVGlsZVBhaW50
aW5nKGZhbHNlKQorICAgICAgICAgICAgLCBwYXJ0aWFsU3dhcEVuYWJsZWQoZmFsc2UpCisgICAg
ICAgICAgICB7IH0KIAogICAgICAgICBib29sIGFjY2VsZXJhdGVQYWludGluZzsKICAgICAgICAg
Ym9vbCBjb21wb3NpdGVPZmZzY3JlZW47CiAgICAgICAgIGJvb2wgc2hvd0ZQU0NvdW50ZXI7CiAg
ICAgICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlOwogICAgICAgICBkb3VibGUgcmVmcmVz
aFJhdGU7CisgICAgICAgIGJvb2wgcGVyVGlsZVBhaW50aW5nOwogICAgICAgICBib29sIHBhcnRp
YWxTd2FwRW5hYmxlZDsKICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KICAgICAgICAgb3BlcmF0
b3IgV2ViQ29yZTo6Q0NTZXR0aW5ncygpIGNvbnN0OwogI2VuZGlmCiAgICAgfTsKIAotICAgIFdF
QktJVF9FWFBPUlQgc3RhdGljIFdlYkxheWVyVHJlZVZpZXcgY3JlYXRlKFdlYkxheWVyVHJlZVZp
ZXdDbGllbnQqLCBjb25zdCBXZWJMYXllciYgcm9vdCwgY29uc3QgU2V0dGluZ3MmKTsKLQogICAg
IFdlYkxheWVyVHJlZVZpZXcoKSB7IH0KICAgICBXZWJMYXllclRyZWVWaWV3KGNvbnN0IFdlYkxh
eWVyVHJlZVZpZXcmIGxheWVyKSB7IGFzc2lnbihsYXllcik7IH0KICAgICB+V2ViTGF5ZXJUcmVl
VmlldygpIHsgcmVzZXQoKTsgfQpAQCAtNzIsMTAgKzc1LDI0IEBAIHB1YmxpYzoKICAgICAgICAg
YXNzaWduKGxheWVyKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KKwogICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCByZXNldCgpOwogICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29u
c3QgV2ViTGF5ZXJUcmVlVmlldyYpOwogICAgIFdFQktJVF9FWFBPUlQgYm9vbCBlcXVhbHMoY29u
c3QgV2ViTGF5ZXJUcmVlVmlldyYpIGNvbnN0OwogCisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7
IHJldHVybiBtX3ByaXZhdGUuaXNOdWxsKCk7IH0KKworI2RlZmluZSBXRUJMQVlFUlRSRUVWSUVX
X0hBU19JTklUSUFMSVpFCisgICAgLy8gQXR0ZW1wdHMgdG8gaW5pdGlhbGl6ZSB0aGlzIFdlYkxh
eWVyVHJlZVZpZXcgd2l0aCB0aGUgZ2l2ZW4gY2xpZW50LCByb290IGxheWVyLCBhbmQgc2V0dGlu
Z3MuCisgICAgLy8gSWYgaW5pdGlhbGl6YXRpb24gZmFpbHMsIHRoaXMgd2lsbCByZXR1cm4gZmFs
c2UgYW5kIC5pc051bGwoKSB3aWxsIHJldHVybiB0cnVlLgorICAgIC8vIE11c3QgYmUgY2FsbGVk
IGJlZm9yZSBhbnkgbWV0aG9kcyBiZWxvdy4KKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaW5pdGlh
bGl6ZShXZWJMYXllclRyZWVWaWV3Q2xpZW50KiwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0
IFNldHRpbmdzJik7CisKKyAgICAvLyBTZXRzIHRoZSByb290IG9mIHRoZSB0cmVlLiBUaGUgcm9v
dCBpcyBzZXQgYnkgd2F5IG9mIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAvLyBUaGlzIGlzIHR5cGlj
YWxseSB1c2VkIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSByb290IHRvIG51bGwgdG8gYnJlYWsKKyAg
ICAvLyBjeWNsZXMuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFJvb3RMYXllcihXZWJMYXll
ciopOworCiAgICAgLy8gVHJpZ2dlcnMgYSBjb21wb3NpdGluZyBwYXNzLiBJZiB0aGUgY29tcG9z
aXRvciB0aHJlYWQgd2FzIG5vdAogICAgIC8vIGVuYWJsZWQgdmlhIFdlYkNvbXBvc2l0b3I6Omlu
aXRpYWxpemUsIHRoZSBjb21wb3NpdGluZyBwYXNzIGhhcHBlbnMKICAgICAvLyBpbW1lZGlhdGVs
eS4gSWYgaXQgaXMgZW5hYmxlZCwgdGhlIGNvbXBvc2l0aW5nIHBhc3Mgd2lsbCBoYXBwZW4gYXQg
YQpAQCAtOTYsMTYgKzExMywzOCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGJ1ZmZlciBpcyBub3Qg
bW9kaWZpZWQgaWYgdGhlIGZhbHNlIGlzIHJldHVybmVkLgogICAgIFdFQktJVF9FWFBPUlQgYm9v
bCBjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IFdlYlJlY3QmKTsKIAot
ICAgIC8vIFNldHMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuIFRoZSByb290IGlzIHNldCBieSB3YXkg
b2YgdGhlIGNvbnN0cnVjdG9yLgotICAgIC8vIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8gZXhw
bGljaXRseSBzZXQgdGhlIHJvb3QgdG8gbnVsbCB0byBicmVhawotICAgIC8vIGN5Y2xlcy4KLSAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0Um9vdExheWVyKFdlYkxheWVyKik7CisgICAgLy8gQmxv
Y2tzIHVudGlsIHRoZSBtb3N0IHJlY2VudGx5IGNvbXBvc2l0ZWQgZnJhbWUgaGFzIGZpbmlzaGVk
IHJlbmRlcmluZyBvbiB0aGUgR1BVLgorICAgIC8vIFRoaXMgY2FuIGhhdmUgYSBzaWduaWZpY2Fu
dCBwZXJmb3JtYW5jZSBpbXBhY3QgYW5kIHNob3VsZCBiZSB1c2VkIHdpdGggY2FyZS4KKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CiAKLSNpZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04KLSAgICBXZWJMYXllclRyZWVWaWV3KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+Jik7Ci0gICAgV2ViTGF5ZXJUcmVlVmlldyYgb3BlcmF0
b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+Jik7Ci0g
ICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdD4oKSBj
b25zdDsKLSNlbmRpZgorICAgIC8vIFJldHVybnMgYSB1bmlxdWUgaWRlbnRpZmllciB0aGF0IGNh
biBiZSB1c2VkIG9uIHRoZSBjb21wb3NpdG9yIHRocmVhZCB0byByZXF1ZXN0IGEKKyAgICAvLyBX
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVyIGluc3RhbmNlLgorICAgIFdFQktJVF9FWFBPUlQgaW50
IGNvbXBvc2l0b3JJZGVudGlmaWVyKCk7CisKKyAgICAvLyBTZXRzIHdoZXRoZXIgdGhpcyB2aWV3
IGlzIHZpc2libGUuIEluIHRocmVhZGVkIG1vZGUsIGEgdmlldyB0aGF0IGlzIG5vdCB2aXNpYmxl
IHdpbGwgbm90CisgICAgLy8gY29tcG9zaXRlIG9yIHRyaWdnZXIgdXBkYXRlQW5pbWF0aW9ucygp
IG9yIGxheW91dCgpIGNhbGxzIHVudGlsIGl0IGJlY29tZXMgdmlzaWJsZS4KKyAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgc2V0VmlzaWJsZShib29sKTsKKworICAgIC8vIFJlcXVlc3RzIGFuIHVwZGF0
ZUFuaW1hdGlvbnMoKSBjYWxsLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXROZWVkc0FuaW1h
dGUoKTsKKworICAgIC8vIEluZGljYXRlcyB0aGF0IHRoZSB2aWV3IG5lZWRzIHRvIGJlIHJlZHJh
d24uIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgd2hlbiB0aGUgZnJvbnRidWZmZXIgaXMgZGFtYWdl
ZC4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKKworICAgIC8vIElt
bWVkaWF0ZWx5IHVwZGF0ZSBhbmltYXRpb25zLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hl
biBmcmFtZSBzY2hlZHVsaW5nIGlzIGhhbmRsZWQgYnkKKyAgICAvLyB0aGUgV2ViTGF5ZXJUcmVl
VmlldyB1c2VyIGFuZCBub3QgaW50ZXJuYWxseSBieSB0aGUgY29tcG9zaXRvciwgbWVhbmluZyBv
bmx5IGluIHNpbmdsZS10aHJlYWRlZAorICAgIC8vIG1vZGUuCisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKworICAgIFdFQktJ
VF9FWFBPUlQgV2ViTGF5ZXJUcmVlSW5wdXRQYXJhbXMgaW5wdXRQYXJhbXMoKTsKKworICAgIC8v
IFJldHVybnMgdGhlIGNvbnRleHQgYmVpbmcgdXNlZCBmb3IgcmVuZGVyaW5nIHRoaXMgdmlldy4g
SW4gdGhyZWFkZWQgY29tcG9zaXRpbmcgbW9kZSwgaXQgaXMKKyAgICAvLyBub3Qgc2FmZSB0byB1
c2UgdGhpcyBjb250ZXh0IGF0IGFsbCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgLy8gRklYTUU6
IFJlbW92ZSB0aGlzIEFQSSBhcyBzb29uIGFzIHBvc3NpYmxlLCBpdCdzIHZlcnkgYnVnLXByb25l
IGluIHRocmVhZGVkIG1vZGUuCisgICAgV0VCS0lUX0VYUE9SVCBXZWJHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCgpOworCisgICAgLy8gU2ltdWxhdGVzIGEgbG9zdCBjb250ZXh0LiBGb3IgdGVz
dGluZyBvbmx5LgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQo
aW50IG51bVRpbWVzKTsKIAogcHJvdGVjdGVkOgogICAgIFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0PiBtX3ByaXZhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgK
aW5kZXggOWM0ZGZiNzdiNzcxMTRiMGVmNjdiMDE3YmZhNGJkMjIzYjNhYjZhNi4uNWMwYjllZjlh
MmEyYzYxM2IxMTkwMGMxM2Y4OThmMjI4MzliNDY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXdD
bGllbnQuaApAQCAtNTIsNiArNTIsOSBAQCBwdWJsaWM6CiAgICAgLy8gY29udGV4dCBldmVudCku
CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlYmluZEdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3Mp
ID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKSA9IDA7CisKICAgICAvLyBT
Y2hlZHVsZXMgYSBjb21wb3NpdGluZyBwYXNzLCBtZWFuaW5nIHRoZSBjbGllbnQgc2hvdWxkIGNh
bGwKICAgICAvLyBXZWJMYXllclRyZWVWaWV3Ojpjb21wb3NpdGUgYXQgYSBsYXRlciB0aW1lLiBU
aGlzIGlzIG9ubHkgY2FsbGVkIGlmIHRoZQogICAgIC8vIGNvbXBvc2l0b3IgdGhyZWFkIGlzIGRp
c2FibGVkOyB3aGVuIGVuYWJsZWQsIHRoZSBjb21wb3NpdG9yIHdpbGwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKaW5kZXggNWYyODUxYmI1ODc3
YzlmZjc0MjZkN2E4YzFlNWQxMzg2NGZhMDJjZi4uYmQ3M2M1M2U5ZTQ1ZGRiMTk4ZGU0MTdjOTRm
MmVmZDM3ZWNkMGFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hy
b21lQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21l
Q2xpZW50SW1wbC5jcHAKQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lkIENocm9tZUNsaWVudEltcGw6
OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NMYXllciogZ3Jh
cAogCiB2b2lkIENocm9tZUNsaWVudEltcGw6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMo
KQogewotICAgIG1fd2ViVmlldy0+c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CisgICAgbV93
ZWJWaWV3LT5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCk7CiB9CiAKIENocm9tZUNsaWVu
dDo6Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgQ2hyb21lQ2xpZW50SW1wbDo6YWxsb3dlZENvbXBv
c2l0aW5nVHJpZ2dlcnMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTGF5ZXJUcmVlSW5wdXRQYXJhbXMuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViTGF5ZXJUcmVlSW5wdXRQYXJhbXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxYTc2MGQ0Y2Zk
YTNjNGQ0MjQ4MWM5NWU0NWEzMTU1MTQ1YmY0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVJbnB1dFBhcmFtcy5jcHAKQEAgLTAsMCAr
MSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJMYXllclRyZWVJbnB1dFBhcmFtcy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJMYXllclRyZWVJbnB1dFBhcmFtczo6V2Vi
TGF5ZXJUcmVlSW5wdXRQYXJhbXMoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0KiBob3N0KQorICAg
IDogbV9wcml2YXRlKGhvc3QpCit7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlSW5wdXRQYXJhbXM6
OnNldEhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoYm9vbCBoYXZlSGFuZGxlcnMpCit7CisgICAgbV9w
cml2YXRlLT5zZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKGhhdmVIYW5kbGVycyk7Cit9CisKK3Zv
aWQgV2ViTGF5ZXJUcmVlSW5wdXRQYXJhbXM6OnNldFBhZ2VTY2FsZShmbG9hdCBwYWdlU2NhbGUp
Cit7CisgICAgbV9wcml2YXRlLT5zZXRQYWdlU2NhbGUocGFnZVNjYWxlKTsKK30KKwordm9pZCBX
ZWJMYXllclRyZWVJbnB1dFBhcmFtczo6c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKGZsb2F0IG1p
bmltdW0sIGZsb2F0IG1heGltdW0pCit7CisgICAgbV9wcml2YXRlLT5zZXRQYWdlU2NhbGVGYWN0
b3JMaW1pdHMobWluaW11bSwgbWF4aW11bSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcAppbmRl
eCA0NGFjOTA1NDFlNDMxYTYxYjViOGE1MjhmNTRmM2M0MGI1NDk2ZjZhLi44N2E4ZDMzMmZhNTc5
NDc5ZmEwY2Y2ZGQwZWZmMjBhOWVjZmEzNDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcApAQCAtMjYsOSArMjYsMTEgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3LmgiCiAKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJMYXllclRy
ZWVWaWV3SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUg
InBsYXRmb3JtL1dlYkxheWVyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJUcmVlSW5w
dXRQYXJhbXMuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJSZWN0LmgiCiAjaW5jbHVkZSAicGxh
dGZvcm0vV2ViU2l6ZS5oIgogCkBAIC01MSw5ICs1MywxMCBAQCBXZWJMYXllclRyZWVWaWV3OjpT
ZXR0aW5nczo6b3BlcmF0b3IgQ0NTZXR0aW5ncygpIGNvbnN0CiAgICAgcmV0dXJuIHNldHRpbmdz
OwogfQogCi1XZWJMYXllclRyZWVWaWV3IFdlYkxheWVyVHJlZVZpZXc6OmNyZWF0ZShXZWJMYXll
clRyZWVWaWV3Q2xpZW50KiBjbGllbnQsIGNvbnN0IFdlYkxheWVyJiByb290LCBjb25zdCBXZWJM
YXllclRyZWVWaWV3OjpTZXR0aW5ncyYgc2V0dGluZ3MpCitib29sIFdlYkxheWVyVHJlZVZpZXc6
OmluaXRpYWxpemUoV2ViTGF5ZXJUcmVlVmlld0NsaWVudCogY2xpZW50LCBjb25zdCBXZWJMYXll
ciYgcm9vdCwgY29uc3QgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MmIHNldHRpbmdzKQogewot
ICAgIHJldHVybiBXZWJMYXllclRyZWVWaWV3KFdlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGUo
Y2xpZW50LCByb290LCBzZXR0aW5ncykpOworICAgIG1fcHJpdmF0ZSA9IFdlYkxheWVyVHJlZVZp
ZXdJbXBsOjpjcmVhdGUoY2xpZW50LCByb290LCBzZXR0aW5ncyk7CisgICAgcmV0dXJuICFpc051
bGwoKTsKIH0KIAogdm9pZCBXZWJMYXllclRyZWVWaWV3OjpyZXNldCgpCkBAIC0xMDIsMjAgKzEw
NSw0OSBAQCB2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnNldFJvb3RMYXllcihXZWJMYXllciAqcm9v
dCkKICAgICAgICAgbV9wcml2YXRlLT5zZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9t
aXVtPigpKTsKIH0KIAotV2ViTGF5ZXJUcmVlVmlldzo6V2ViTGF5ZXJUcmVlVmlldyhjb25zdCBQ
YXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4mIG5vZGUpCi0gICAgOiBtX3ByaXZhdGUobm9kZSkK
K2ludCBXZWJMYXllclRyZWVWaWV3Ojpjb21wb3NpdG9ySWRlbnRpZmllcigpCiB7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+Y29tcG9zaXRvcklkZW50aWZpZXIoKTsKIH0KIAotV2ViTGF5ZXJUcmVl
VmlldyYgV2ViTGF5ZXJUcmVlVmlldzo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8Q0NMYXll
clRyZWVIb3N0PiYgbm9kZSkKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6c2V0VmlzaWJsZShib29s
IHZpc2libGUpCiB7Ci0gICAgbV9wcml2YXRlID0gbm9kZTsKLSAgICByZXR1cm4gKnRoaXM7Cisg
ICAgbV9wcml2YXRlLT5zZXRWaXNpYmxlKHZpc2libGUpOwogfQogCi1XZWJMYXllclRyZWVWaWV3
OjpvcGVyYXRvciBQYXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4oKSBjb25zdAordm9pZCBXZWJM
YXllclRyZWVWaWV3OjpzZXROZWVkc0FuaW1hdGUoKQogewotICAgIHJldHVybiBtX3ByaXZhdGUu
Z2V0KCk7CisgICAgbV9wcml2YXRlLT5zZXROZWVkc0FuaW1hdGUoKTsKK30KKwordm9pZCBXZWJM
YXllclRyZWVWaWV3Ojp1cGRhdGVBbmltYXRpb25zKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sK
KyAgICBtX3ByaXZhdGUtPnVwZGF0ZUFuaW1hdGlvbnMoZnJhbWVCZWdpblRpbWUpOworfQorCit2
b2lkIFdlYkxheWVyVHJlZVZpZXc6OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICBtX3ByaXZhdGUt
PnNldE5lZWRzUmVkcmF3KCk7Cit9CisKK1dlYkxheWVyVHJlZUlucHV0UGFyYW1zIFdlYkxheWVy
VHJlZVZpZXc6OmlucHV0UGFyYW1zKCkKK3sKKyAgICByZXR1cm4gV2ViTGF5ZXJUcmVlSW5wdXRQ
YXJhbXMobV9wcml2YXRlLmdldCgpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3OjpmaW5p
c2hBbGxSZW5kZXJpbmcoKQoreworICAgIG1fcHJpdmF0ZS0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7
Cit9CisKK1dlYkdyYXBoaWNzQ29udGV4dDNEKiBXZWJMYXllclRyZWVWaWV3Ojpjb250ZXh0KCkK
K3sKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhp
Y3NDb250ZXh0M0QobV9wcml2YXRlLT5jb250ZXh0KCkpOworfQorCit2b2lkIFdlYkxheWVyVHJl
ZVZpZXc6Omxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpCit7CisgICAgbV9wcml2
YXRlLT5sb3NlQ29tcG9zaXRvckNvbnRleHQobnVtVGltZXMpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
VHJlZVZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJl
ZVZpZXdJbXBsLmNwcAppbmRleCA5ODE0NzcxMTg5YmY2OWQ3YzhkNTM0ODdjMjQ5YWYyMGMxMDlk
M2QxLi5lYWE3OGQ3ZjAyNjE0M2E3MDNmYmU4NjhiZjYwZGQ2MThkMGEyYWFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwCkBA
IC0xMDMsMjAgKzEwMywyMiBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBXZWJMYXll
clRyZWVWaWV3SW1wbDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRAogICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250
ZXh0KHdlYkNvbnRleHQucmVsZWFzZSgpLCBhdHRyaWJ1dGVzLCAwLCBzdHlsZSwgdXNhZ2UpOwog
fQogCi12b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjpkaWRDb21taXRBbmREcmF3RnJhbWUoKQor
dm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9v
bCBzdWNjZXNzKQogewotICAgIC8vIEZJWE1FOiByb3V0ZSB0aGlzIHVwIHRvIHRoZSBXZWJMYXll
clRyZWVWaWV3IGNsaWVudAorICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRp
ZFJlYmluZEdyYXBoaWNzQ29udGV4dChzdWNjZXNzKTsKIH0KIAotdm9pZCBXZWJMYXllclRyZWVW
aWV3SW1wbDo6ZGlkQ29tcGxldGVTd2FwQnVmZmVycygpCit2b2lkIFdlYkxheWVyVHJlZVZpZXdJ
bXBsOjpkaWRDb21taXRBbmREcmF3RnJhbWUoKQogewotICAgIC8vIEZJWE1FOiByb3V0ZSB0aGlz
IHVwIHRvIHRoZSBXZWJMYXllclRyZWVWaWV3IGNsaWVudAorICAgIGlmIChtX2NsaWVudCkKKyAg
ICAgICAgbV9jbGllbnQtPmRpZENvbW1pdEFuZERyYXdGcmFtZSgpOwogfQogCi12b2lkIFdlYkxh
eWVyVHJlZVZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3Mp
Cit2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjpkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkKIHsK
ICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRSZWJpbmRHcmFwaGljc0Nv
bnRleHQoc3VjY2Vzcyk7CisgICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVN3YXBCdWZmZXJz
KCk7CiB9CiAKIHZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRlKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBiOTM1NWZj
ODMzMDg0M2I1MWNhNWM0MzVjNzdiN2Q2NDMxY2YwMjY4Li5mMGZhNTQ2MTMxNWRlZTBmZGJjZjJm
NGUzMzIxMThiMjllZWIwZWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQXV0b2ZpbGxQb3B1cE1lbnVD
bGllbnQuaCIKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0Zvcndh
cmRMaXN0Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAiQ1NT
U3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRl
ICJDaHJvbWUuaCIKQEAgLTEyMiw2ICsxMjMsOSBAQAogI2luY2x1ZGUgIldlYklucHV0RXZlbnRD
b252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2Vi
S2l0UGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXIuaCIKKyNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllclRyZWVJbnB1dFBhcmFtcy5oIgorI2luY2x1ZGUgInBs
YXRmb3JtL1dlYkxheWVyVHJlZVZpZXcuaCIKICNpbmNsdWRlICJXZWJNZWRpYVBsYXllckFjdGlv
bi5oIgogI2luY2x1ZGUgIldlYk5vZGUuaCIKICNpbmNsdWRlICJXZWJQbHVnaW4uaCIKQEAgLTEz
NSw3ICsxMzksNiBAQAogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgogI2luY2x1ZGUg
InBsYXRmb3JtL1dlYlZlY3Rvci5oIgogI2luY2x1ZGUgIldlYlZpZXdDbGllbnQuaCIKLSNpbmNs
dWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8d3RmL0J5dGVBcnJheS5oPgogI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC04MTQs
OCArODE3LDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6bnVtYmVyT2ZXaGVlbEV2ZW50SGFuZGxlcnND
aGFuZ2VkKHVuc2lnbmVkIG51bWJlck9mV2hlZWxIYW5kbGUKICAgICBpZiAobV9jbGllbnQpCiAg
ICAgICAgIG1fY2xpZW50LT5udW1iZXJPZldoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQobnVtYmVy
T2ZXaGVlbEhhbmRsZXJzKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAg
aWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRIYXZlV2hl
ZWxFdmVudEhhbmRsZXJzKG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVycyk7CisgICAgaWYgKCFtX2xh
eWVyVHJlZVZpZXcuaXNOdWxsKCkpCisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5pbnB1dFBhcmFt
cygpLnNldEhhdmVXaGVlbEV2ZW50SGFuZGxlcnMobV9oYXZlV2hlZWxFdmVudEhhbmRsZXJzKTsK
ICNlbmRpZgogfQogCkBAIC0xMTM2LDcgKzExMzksNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjphbmlt
YXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKICAgICAvLyBJbiBjb21wb3NpdGVkIG1vZGUsIHdl
IGFsd2F5cyBnbyB0aHJvdWdoIHRoZSBjb21wb3NpdG9yIHNvIGl0IGNhbiBhcHBseQogICAgIC8v
IGFwcHJvcHJpYXRlIGZsb3ctY29udHJvbCBtZWNoYW5pc21zLgogICAgIGlmIChpc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVB
bmltYXRpb25zKGZyYW1lQmVnaW5UaW1lKTsKKyAgICAgICAgbV9sYXllclRyZWVWaWV3LnVwZGF0
ZUFuaW1hdGlvbnMoZnJhbWVCZWdpblRpbWUpOwogICAgIGVsc2UKICNlbmRpZgogICAgICAgICB1
cGRhdGVBbmltYXRpb25zKGZyYW1lQmVnaW5UaW1lKTsKQEAgLTExODQsNiArMTE4Nyw3IEBAIHZv
aWQgV2ViVmlld0ltcGw6OmxheW91dCgpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogdm9pZCBXZWJWaWV3SW1wbDo6ZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMoV2ViQ2FudmFzKiBj
YW52YXMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZVZp
ZXcuaXNOdWxsKCkpOwogI2lmIFVTRShTS0lBKQogICAgIFBsYXRmb3JtQ29udGV4dFNraWEgY29u
dGV4dChjYW52YXMpOwogCkBAIC0xMjAyLDcgKzEyMDYsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpk
b1BpeGVsUmVhZGJhY2tUb0NhbnZhcyhXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgSW50UmVjdCYg
cmVjdAogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShyZWN0LnNpemUoKSkpOwogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHBpeGVsQXJyYXkoQnl0
ZUFycmF5OjpjcmVhdGUocmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpKTsKICAgICBp
ZiAoaW1hZ2VCdWZmZXIgJiYgcGl4ZWxBcnJheSkgewotICAgICAgICBtX2xheWVyVHJlZUhvc3Qt
PmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHBpeGVsQXJyYXktPmRhdGEoKSwgaW52ZXJ0UmVjdCk7Cisg
ICAgICAgIG1fbGF5ZXJUcmVlVmlldy5jb21wb3NpdGVBbmRSZWFkYmFjayhwaXhlbEFycmF5LT5k
YXRhKCksIGludmVydFJlY3QpOwogICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0UHJlbXVsdGlwbGll
ZEltYWdlRGF0YShwaXhlbEFycmF5LmdldCgpLCByZWN0LnNpemUoKSwgSW50UmVjdChJbnRQb2lu
dCgpLCByZWN0LnNpemUoKSksIEludFBvaW50KCkpOwogICAgICAgICBnYy5zYXZlKCk7CiAgICAg
ICAgIGdjLnRyYW5zbGF0ZShJbnRTaXplKDAsIGJpdG1hcEhlaWdodCkpOwpAQCAtMTIyNCw3ICsx
MjI4LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0
IFdlYlJlY3QmIHJlY3QpCiAgICAgICAgIGlmIChjYW52YXMpIHsKICAgICAgICAgICAgIC8vIENs
aXAgcmVjdCB0byB0aGUgY29uZmluZXMgb2YgdGhlIHJvb3RMYXllclRleHR1cmUuCiAgICAgICAg
ICAgICBJbnRSZWN0IHJlc2l6ZVJlY3QocmVjdCk7Ci0gICAgICAgICAgICByZXNpemVSZWN0Lmlu
dGVyc2VjdChJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX2xheWVyVHJlZUhvc3QtPnZpZXdwb3J0
U2l6ZSgpKSk7CisgICAgICAgICAgICByZXNpemVSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBv
aW50KDAsIDApLCBtX2xheWVyVHJlZVZpZXcudmlld3BvcnRTaXplKCkpKTsKICAgICAgICAgICAg
IGRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKGNhbnZhcywgcmVzaXplUmVjdCk7CiAgICAgICAgIH0K
ICNlbmRpZgpAQCAtMTI1NCw3ICsxMjU4LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRl
KGJvb2wpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChDQ1By
b3h5OjpoYXNJbXBsVGhyZWFkKCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNS
ZWRyYXcoKTsKKyAgICAgICAgbV9sYXllclRyZWVWaWV3LnNldE5lZWRzUmVkcmF3KCk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIEFTU0VSVChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSk7
CiAgICAgICAgIGlmICghcGFnZSgpKQpAQCAtMTI2Myw3ICsxMjY3LDcgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6Y29tcG9zaXRlKGJvb2wpCiAgICAgICAgIGlmIChtX3BhZ2VPdmVybGF5cykKICAgICAg
ICAgICAgIG1fcGFnZU92ZXJsYXlzLT51cGRhdGUoKTsKIAotICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPmNvbXBvc2l0ZSgpOworICAgICAgICBtX2xheWVyVHJlZVZpZXcuY29tcG9zaXRlKCk7CiAg
ICAgfQogI2VuZGlmCiB9CkBAIC0xMjcxLDggKzEyNzUsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpj
b21wb3NpdGUoYm9vbCkKIHZvaWQgV2ViVmlld0ltcGw6Omxvc2VDb21wb3NpdG9yQ29udGV4dChp
bnQgbnVtVGltZXMpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlm
IChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+bG9zZUNvbXBvc2l0
b3JDb250ZXh0KG51bVRpbWVzKTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVlVmlldy5pc051bGwoKSkK
KyAgICAgICAgbV9sYXllclRyZWVWaWV3Lmxvc2VDb21wb3NpdG9yQ29udGV4dChudW1UaW1lcyk7
CiAjZW5kaWYKIH0KIApAQCAtMjEzMCw4ICsyMTM0LDggQEAgYm9vbCBXZWJWaWV3SW1wbDo6Y29t
cHV0ZVBhZ2VTY2FsZUZhY3RvckxpbWl0cygpCiAgICAgfQogICAgIEFTU0VSVChtX21pbmltdW1Q
YWdlU2NhbGVGYWN0b3IgPD0gbV9tYXhpbXVtUGFnZVNjYWxlRmFjdG9yKTsKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5zZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMobV9taW5pbXVtUGFnZVNj
YWxlRmFjdG9yLCBtX21heGltdW1QYWdlU2NhbGVGYWN0b3IpOworICAgIGlmICghbV9sYXllclRy
ZWVWaWV3LmlzTnVsbCgpKQorICAgICAgICBtX2xheWVyVHJlZVZpZXcuaW5wdXRQYXJhbXMoKS5z
ZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMobV9taW5pbXVtUGFnZVNjYWxlRmFjdG9yLCBtX21heGlt
dW1QYWdlU2NhbGVGYWN0b3IpOwogI2VuZGlmCiAKICAgICBmbG9hdCBjbGFtcGVkU2NhbGUgPSBj
bGFtcFBhZ2VTY2FsZUZhY3RvclRvTGltaXRzKHBhZ2VTY2FsZUZhY3RvcigpKTsKQEAgLTI3MzMs
MTcgKzI3MzcsMTIgQEAgdm9pZCBXZWJWaWV3SW1wbDo6YWRkUGFnZU92ZXJsYXkoV2ViUGFnZU92
ZXJsYXkqIG92ZXJsYXksIGludCB6T3JkZXIpCiAgICAgICAgIG1fcGFnZU92ZXJsYXlzID0gUGFn
ZU92ZXJsYXlMaXN0OjpjcmVhdGUodGhpcyk7CiAKICAgICBtX3BhZ2VPdmVybGF5cy0+YWRkKG92
ZXJsYXksIHpPcmRlcik7Ci0gICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiB9CiAKIHZv
aWQgV2ViVmlld0ltcGw6OnJlbW92ZVBhZ2VPdmVybGF5KFdlYlBhZ2VPdmVybGF5KiBvdmVybGF5
KQogewotICAgIGlmIChtX3BhZ2VPdmVybGF5cyAmJiBtX3BhZ2VPdmVybGF5cy0+cmVtb3ZlKG92
ZXJsYXkpKSB7Ci0gICAgICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOwotCi0gICAgICAg
IGlmIChtX3BhZ2VPdmVybGF5cy0+ZW1wdHkoKSkKLSAgICAgICAgICAgIG1fcGFnZU92ZXJsYXlz
ID0gbnVsbHB0cjsKLSAgICB9CisgICAgaWYgKG1fcGFnZU92ZXJsYXlzICYmIG1fcGFnZU92ZXJs
YXlzLT5yZW1vdmUob3ZlcmxheSkgJiYgbV9wYWdlT3ZlcmxheXMtPmVtcHR5KCkpCisgICAgICAg
IG1fcGFnZU92ZXJsYXlzID0gbnVsbHB0cjsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6c2V0T3Zl
cmxheUxheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyKQpAQCAtMjg1MSwyOSArMjg1
MCwzMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xh
eWVyKiBsYXllcikKICAgICAgICAgfQogICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dC0+c2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXIpOwogICAgIH0KLSAgICBpZiAobV9sYXllclRy
ZWVIb3N0KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihsYXllciA/IGxh
eWVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwKTsKKworICAgIGlmIChsYXllcikKKyAgICAgICAgbV9y
b290TGF5ZXIgPSBXZWJMYXllcihsYXllci0+cGxhdGZvcm1MYXllcigpKTsKKworICAgIGlmICgh
bV9sYXllclRyZWVWaWV3LmlzTnVsbCgpKQorICAgICAgICBtX2xheWVyVHJlZVZpZXcuc2V0Um9v
dExheWVyKGxheWVyID8gJm1fcm9vdExheWVyIDogMCk7CiAKICAgICBJbnRSZWN0IGRhbWFnZWRS
ZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7CiAgICAgaWYgKCFtX2lzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSkKICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRh
dGVSZWN0KGRhbWFnZWRSZWN0KTsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdExheWVy
TmVlZHNEaXNwbGF5KCkKK3ZvaWQgV2ViVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXll
clN5bmMoKQogewotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+c2V0TmVlZHNDb21taXQoKTsKKyAgICBtX2xheWVyVHJlZVZpZXcuc2V0TmVlZHNSZWRy
YXcoKTsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6c2Nyb2xsUm9vdExheWVyUmVjdChjb25zdCBJ
bnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit2b2lkIFdlYlZp
ZXdJbXBsOjpzY3JvbGxSb290TGF5ZXJSZWN0KGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0
JikKIHsKICAgICB1cGRhdGVMYXllclRyZWVWaWV3cG9ydCgpOwotICAgIHNldFJvb3RMYXllck5l
ZWRzRGlzcGxheSgpOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjppbnZhbGlkYXRlUm9vdExheWVy
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3Qp
OworICAgIEFTU0VSVCghbV9sYXllclRyZWVWaWV3LmlzTnVsbCgpKTsKIAogICAgIGlmICghcGFn
ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yODgyLDcgKzI4ODMsNiBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjppbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIElu
dFJlY3QgZGlydHlSZWN0ID0gdmlldy0+d2luZG93VG9Db250ZW50cyhyZWN0KTsKICAgICB1cGRh
dGVMYXllclRyZWVWaWV3cG9ydCgpOwogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5p
bnZhbGlkYXRlUmVjdChkaXJ0eVJlY3QpOwotICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgp
OwogfQogCiBOb25Db21wb3NpdGVkQ29udGVudEhvc3QqIFdlYlZpZXdJbXBsOjpub25Db21wb3Np
dGVkQ29udGVudEhvc3QoKQpAQCAtMjg5NSw4ICsyODk1LDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6
c2NoZWR1bGVBbmltYXRpb24oKQogewogICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdB
Y3RpdmUoKSkgewogICAgICAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0KTsKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+c2V0TmVlZHNBbmltYXRlKCk7CisgICAgICAgICAgICBBU1NFUlQoIW1fbGF5ZXJUcmVl
Vmlldy5pc051bGwoKSk7CisgICAgICAgICAgICBtX2xheWVyVHJlZVZpZXcuc2V0TmVlZHNBbmlt
YXRlKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9jbGllbnQtPnNjaGVkdWxlQW5p
bWF0aW9uKCk7CiAgICAgfSBlbHNlCkBAIC0yOTQ5LDQ2ICsyOTQ5LDQ1IEBAIHZvaWQgV2ViVmll
d0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAg
ICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSBmYWxzZTsKICAgICAgICAg
Ly8gV2UgbmVlZCB0byBmaW5pc2ggYWxsIEdMIHJlbmRlcmluZyBiZWZvcmUgc2VuZGluZyBkaWRE
ZWFjdGl2YXRlQ29tcG9zaXRvcigpIHRvIHByZXZlbnQKICAgICAgICAgLy8gZmxpY2tlcmluZyB3
aGVuIGNvbXBvc2l0aW5nIHR1cm5zIG9mZi4KLSAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkK
LSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAg
ICAgIGlmICghbV9sYXllclRyZWVWaWV3LmlzTnVsbCgpKQorICAgICAgICAgICAgbV9sYXllclRy
ZWVWaWV3LmZpbmlzaEFsbFJlbmRlcmluZygpOwogICAgICAgICBtX2NsaWVudC0+ZGlkRGVhY3Rp
dmF0ZUNvbXBvc2l0b3IoKTsKLSAgICB9IGVsc2UgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgeworICAg
IH0gZWxzZSBpZiAoIW1fbGF5ZXJUcmVlVmlldy5pc051bGwoKSkgewogICAgICAgICBtX2lzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IHRydWU7CiAgICAgICAgIHVwZGF0ZUxheWVyVHJl
ZVZpZXdwb3J0KCk7CiAKLSAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQ29tcG9zaXRvciht
X2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0b3JJZGVudGlmaWVyKCkpOworICAgICAgICBtX2NsaWVu
dC0+ZGlkQWN0aXZhdGVDb21wb3NpdG9yKG1fbGF5ZXJUcmVlVmlldy5jb21wb3NpdG9ySWRlbnRp
ZmllcigpKTsKICAgICB9IGVsc2UgewogICAgICAgICBUUkFDRV9FVkVOVCgiV2ViVmlld0ltcGw6
OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSh0cnVlKSIsIHRoaXMsIDApOwogCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZGVmYXVsdFJlZnJlc2hSYXRlID0gNjAuMDsKIAot
ICAgICAgICBXZWJDb3JlOjpDQ1NldHRpbmdzIGNjU2V0dGluZ3M7Ci0gICAgICAgIGNjU2V0dGlu
Z3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gcGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZERy
YXdpbmdFbmFibGVkKCk7Ci0gICAgICAgIGNjU2V0dGluZ3MuY29tcG9zaXRlT2Zmc2NyZWVuID0g
c2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZCgpOwotICAgICAgICBjY1NldHRp
bmdzLnNob3dGUFNDb3VudGVyID0gc2V0dGluZ3MoKS0+c2hvd0ZQU0NvdW50ZXIoKTsKLSAgICAg
ICAgY2NTZXR0aW5ncy5zaG93UGxhdGZvcm1MYXllclRyZWUgPSBzZXR0aW5ncygpLT5zaG93UGxh
dGZvcm1MYXllclRyZWUoKTsKLSAgICAgICAgY2NTZXR0aW5ncy5yZWZyZXNoUmF0ZSA9IHNjcmVl
blJlZnJlc2hSYXRlKHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKSk7CisgICAgICAgIFdlYkxh
eWVyVHJlZVZpZXc6OlNldHRpbmdzIGxheWVyVHJlZVZpZXdTZXR0aW5nczsKKyAgICAgICAgbGF5
ZXJUcmVlVmlld1NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IHBhZ2UoKS0+c2V0dGluZ3Mo
KS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpOworICAgICAgICBsYXllclRyZWVWaWV3U2V0
dGluZ3MuY29tcG9zaXRlT2Zmc2NyZWVuID0gc2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJl
RW5hYmxlZCgpOworICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3Muc2hvd0ZQU0NvdW50ZXIg
PSBzZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpOworICAgICAgICBsYXllclRyZWVWaWV3U2V0
dGluZ3Muc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gc2V0dGluZ3MoKS0+c2hvd1BsYXRmb3JtTGF5
ZXJUcmVlKCk7CisgICAgICAgIGxheWVyVHJlZVZpZXdTZXR0aW5ncy5yZWZyZXNoUmF0ZSA9IHNj
cmVlblJlZnJlc2hSYXRlKHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKSk7CiAKLSAgICAgICAg
QVNTRVJUKGNjU2V0dGluZ3MucmVmcmVzaFJhdGUgPj0gMCk7Ci0gICAgICAgIGlmICghY2NTZXR0
aW5ncy5yZWZyZXNoUmF0ZSkKLSAgICAgICAgICAgIGNjU2V0dGluZ3MucmVmcmVzaFJhdGUgPSBk
ZWZhdWx0UmVmcmVzaFJhdGU7CisgICAgICAgIEFTU0VSVChsYXllclRyZWVWaWV3U2V0dGluZ3Mu
cmVmcmVzaFJhdGUgPj0gMCk7CisgICAgICAgIGlmICghbGF5ZXJUcmVlVmlld1NldHRpbmdzLnJl
ZnJlc2hSYXRlKQorICAgICAgICAgICAgbGF5ZXJUcmVlVmlld1NldHRpbmdzLnJlZnJlc2hSYXRl
ID0gZGVmYXVsdFJlZnJlc2hSYXRlOwogCi0gICAgICAgIGNjU2V0dGluZ3MucGVyVGlsZVBhaW50
aW5nID0gcGFnZSgpLT5zZXR0aW5ncygpLT5wZXJUaWxlRHJhd2luZ0VuYWJsZWQoKTsKLSAgICAg
ICAgY2NTZXR0aW5ncy5wYXJ0aWFsU3dhcEVuYWJsZWQgPSBwYWdlKCktPnNldHRpbmdzKCktPnBh
cnRpYWxTd2FwRW5hYmxlZCgpOworICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3MucGVyVGls
ZVBhaW50aW5nID0gcGFnZSgpLT5zZXR0aW5ncygpLT5wZXJUaWxlRHJhd2luZ0VuYWJsZWQoKTsK
KyAgICAgICAgbGF5ZXJUcmVlVmlld1NldHRpbmdzLnBhcnRpYWxTd2FwRW5hYmxlZCA9IHBhZ2Uo
KS0+c2V0dGluZ3MoKS0+cGFydGlhbFN3YXBFbmFibGVkKCk7CiAKICAgICAgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudEhvc3QgPSBOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6OmNyZWF0ZShXZWJW
aWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVhdGUodGhpcykpOwotICAgICAgICBtX2xheWVyVHJl
ZUhvc3QgPSBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlzLCBjY1NldHRpbmdzKTsKLSAgICAg
ICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgewotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
ZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVycyk7Ci0gICAg
ICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFBhZ2VTY2FsZUZhY3RvckxpbWl0cyhtX21pbmlt
dW1QYWdlU2NhbGVGYWN0b3IsIG1fbWF4aW11bVBhZ2VTY2FsZUZhY3Rvcik7CisgICAgICAgIG1f
bGF5ZXJUcmVlVmlldy5pbml0aWFsaXplKHRoaXMsIG1fcm9vdExheWVyLCBsYXllclRyZWVWaWV3
U2V0dGluZ3MpOworICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlVmlldy5pc051bGwoKSkgeworICAg
ICAgICAgICAgbV9sYXllclRyZWVWaWV3LmlucHV0UGFyYW1zKCkuc2V0SGF2ZVdoZWVsRXZlbnRI
YW5kbGVycyhtX2hhdmVXaGVlbEV2ZW50SGFuZGxlcnMpOworICAgICAgICAgICAgbV9sYXllclRy
ZWVWaWV3LmlucHV0UGFyYW1zKCkuc2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKG1fbWluaW11bVBh
Z2VTY2FsZUZhY3RvciwgbV9tYXhpbXVtUGFnZVNjYWxlRmFjdG9yKTsKICAgICAgICAgICAgIHVw
ZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7Ci0gICAgICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZh
dGVDb21wb3NpdG9yKG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRvcklkZW50aWZpZXIoKSk7Cisg
ICAgICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVDb21wb3NpdG9yKG1fbGF5ZXJUcmVlVmll
dy5jb21wb3NpdG9ySWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgIG1fY29tcG9zaXRvckNyZWF0aW9u
RmFpbGVkID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAobV9wYWdlT3ZlcmxheXMpCiAgICAgICAg
ICAgICAgICAgbV9wYWdlT3ZlcmxheXMtPnVwZGF0ZSgpOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgbV9sYXllclRyZWVIb3N0LmNsZWFyKCk7CiAgICAgICAgICAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC5jbGVhcigpOwogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgIG1fY2xpZW50LT5kaWREZWFjdGl2
YXRlQ29tcG9zaXRvcigpOwpAQCAtMzAwMSwxOSArMzAwMCwyMSBAQCB2b2lkIFdlYlZpZXdJbXBs
OjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAKICNlbmRp
ZgogCi1QYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBXZWJWaWV3SW1wbDo6Y3JlYXRlTGF5
ZXJUcmVlSG9zdENvbnRleHQzRCgpCitXZWJHcmFwaGljc0NvbnRleHQzRCogV2ViVmlld0ltcGw6
OmNyZWF0ZUNvbnRleHQzRCgpCiB7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250
ZXh0ID0gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNELnJlbGVhc2UoKTsKLSAg
ICBpZiAoIWNvbnRleHQpIHsKKyAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogd2ViQ29udGV4dCA9
IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5sZWFrUHRyKCk7CisgICAgaWYg
KCF3ZWJDb250ZXh0KSB7CisgICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dDsKICAgICAgICAgaWYgKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSkKICAgICAgICAgICAgIGNv
bnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZv
ckFub3RoZXJUaHJlYWQoZ2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+
Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlKGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9tZSgp
LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgICAg
ICB3ZWJDb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhp
Y3NDb250ZXh0M0QoY29udGV4dC5yZWxlYXNlKCkubGVha1JlZigpKTsKICAgICB9Ci0gICAgcmV0
dXJuIGNvbnRleHQ7CisgICAgcmV0dXJuIHdlYkNvbnRleHQ7CiB9CiAKLXZvaWQgV2ViVmlld0lt
cGw6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0
IHBhZ2VTY2FsZURlbHRhKQordm9pZCBXZWJWaWV3SW1wbDo6YXBwbHlTY3JvbGxBbmRTY2FsZShj
b25zdCBXZWJTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFnZVNjYWxlRGVsdGEpCiB7CiAgICAg
aWYgKCFtYWluRnJhbWVJbXBsKCkgfHwgIW1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTMwMjYsOCArMzAyNyw4IEBAIHZvaWQgV2ViVmlld0ltcGw6OmFw
cGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VT
Y2FsCiAgICAgICAgIC8vIGluIHRoZSBvbGQgY29vcmRpbmF0ZSBzcGFjZSwgc28gd2UgZmlyc3Qg
bmVlZCB0byBtdWx0aXBseSB0aGVtCiAgICAgICAgIC8vIGJ5IHRoZSBwYWdlIHNjYWxlIGRlbHRh
LgogICAgICAgICBXZWJTaXplIHNjcm9sbE9mZnNldCA9IG1haW5GcmFtZSgpLT5zY3JvbGxPZmZz
ZXQoKTsKLSAgICAgICAgc2Nyb2xsT2Zmc2V0LndpZHRoICs9IHNjcm9sbERlbHRhLndpZHRoKCk7
Ci0gICAgICAgIHNjcm9sbE9mZnNldC5oZWlnaHQgKz0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Cisg
ICAgICAgIHNjcm9sbE9mZnNldC53aWR0aCArPSBzY3JvbGxEZWx0YS53aWR0aDsKKyAgICAgICAg
c2Nyb2xsT2Zmc2V0LmhlaWdodCArPSBzY3JvbGxEZWx0YS5oZWlnaHQ7CiAgICAgICAgIFdlYlBv
aW50IHNjYWxlZFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQud2lkdGggKiBwYWdlU2NhbGVEZWx0
YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbE9mZnNldC5oZWln
aHQgKiBwYWdlU2NhbGVEZWx0YSk7CiAgICAgICAgIHNldFBhZ2VTY2FsZUZhY3RvcihwYWdlU2Nh
bGVGYWN0b3IoKSAqIHBhZ2VTY2FsZURlbHRhLCBzY2FsZWRTY3JvbGxPZmZzZXQpOwpAQCAtMzA0
Niw3ICszMDQ3LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZGlkQ29tcGxldGVTd2FwQnVmZmVycygp
CiAgICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCk7CiB9CiAKLXZvaWQg
V2ViVmlld0ltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykKK3Zv
aWQgV2ViVmlld0ltcGw6OmRpZFJlYmluZEdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCiB7
CiAKICAgICAvLyBTd2l0Y2ggYmFjayB0byBzb2Z0d2FyZSByZW5kZXJpbmcgbW9kZSwgaWYgbmVj
ZXNzYXJ5CkBAIC0zMDczLDcgKzMwNzQsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzY2hlZHVsZUNv
bXBvc2l0ZSgpCiAKIHZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCkK
IHsKLSAgICBpZiAoIXBhZ2UoKSB8fCAhbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QgfHwgIW1f
bGF5ZXJUcmVlSG9zdCkKKyAgICBpZiAoIXBhZ2UoKSB8fCAhbV9ub25Db21wb3NpdGVkQ29udGVu
dEhvc3QgfHwgbV9sYXllclRyZWVWaWV3LmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7CkBAIC0zMDg5
LDMwICszMDkwLDMxIEBAIHZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0
KCkKICAgICAgICAgbGF5ZXJBZGp1c3RYID0gLXZpZXctPmNvbnRlbnRzU2l6ZSgpLndpZHRoKCkg
KyB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2UpLndpZHRoKCk7CiAgICAgfQogICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRWaWV3cG9ydCh2aXNpYmxlUmVjdC5zaXplKCks
IHZpZXctPmNvbnRlbnRzU2l6ZSgpLCBzY3JvbGwsIHBhZ2VTY2FsZUZhY3RvcigpLCBsYXllckFk
anVzdFgpOwotICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnQodmlzaWJsZVJlY3Quc2l6
ZSgpKTsKLSAgICBtX2xheWVyVHJlZUhvc3QtPnNldFBhZ2VTY2FsZShwYWdlU2NhbGVGYWN0b3Io
KSk7CisgICAgbV9sYXllclRyZWVWaWV3LnNldFZpZXdwb3J0U2l6ZSh2aXNpYmxlUmVjdC5zaXpl
KCkpOworICAgIG1fbGF5ZXJUcmVlVmlldy5pbnB1dFBhcmFtcygpLnNldFBhZ2VTY2FsZShwYWdl
U2NhbGVGYWN0b3IoKSk7CiB9CiAKIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBXZWJWaWV3SW1wbDo6
Z3JhcGhpY3NDb250ZXh0M0QoKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ICAgICBpZiAobV9wYWdlLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxl
ZCgpICYmIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewotICAgICAgICBpZiAobV9s
YXllclRyZWVIb3N0KSB7Ci0gICAgICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogd2ViQ29u
dGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4
dDNEKG1fbGF5ZXJUcmVlSG9zdC0+Y29udGV4dCgpKTsKLSAgICAgICAgICAgIGlmICh3ZWJDb250
ZXh0ICYmICF3ZWJDb250ZXh0LT5pc0NvbnRleHRMb3N0KCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHdlYkNvbnRleHQ7CisgICAgICAgIGlmICghbV9sYXllclRyZWVWaWV3LmlzTnVsbCgpKSB7
CisgICAgICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fbGF5ZXJUcmVl
Vmlldy5jb250ZXh0KCk7CisgICAgICAgICAgICBpZiAoY29udGV4dCAmJiAhY29udGV4dC0+aXND
b250ZXh0TG9zdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0OwogICAgICAgICB9
CiAgICAgICAgIGlmIChtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QpIHsKLSAg
ICAgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiB3ZWJDb250ZXh0ID0gR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QobV90ZW1wb3JhcnlPbnNj
cmVlbkdyYXBoaWNzQ29udGV4dDNELmdldCgpKTsKLSAgICAgICAgICAgIGlmICh3ZWJDb250ZXh0
ICYmICF3ZWJDb250ZXh0LT5pc0NvbnRleHRMb3N0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHdlYkNvbnRleHQ7CisgICAgICAgICAgICBpZiAobV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNz
Q29udGV4dDNEICYmICFtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QtPmlzQ29u
dGV4dExvc3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV90ZW1wb3JhcnlPbnNjcmVlbkdy
YXBoaWNzQ29udGV4dDNELmdldCgpOwogICAgICAgICB9CisgICAgICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dDsKICAgICAgICAgaWYgKENDUHJveHk6Omhhc0ltcGxUaHJlYWQo
KSkKLSAgICAgICAgICAgIG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRCA9IEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0Rm9yQW5vdGhlclRo
cmVhZChnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICAgICAg
ICAgIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29u
dGV4dEZvckFub3RoZXJUaHJlYWQoZ2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1f
cGFnZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFw
aGljc0NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoZ2V0Q29tcG9zaXRvckNv
bnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNEOjpS
ZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgICAgICAgICBjb250ZXh0ID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZShnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9w
YWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KTsKIAotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0
V2ViR3JhcGhpY3NDb250ZXh0M0QobV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNE
LmdldCgpKTsKKyAgICAgICAgbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNEID0g
YWRvcHRQdHIoR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250
ZXh0M0QoY29udGV4dC5yZWxlYXNlKCkubGVha1JlZigpKSk7CisgICAgICAgIHJldHVybiBtX3Rl
bXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QuZ2V0KCk7CiAgICAgfQogI2VuZGlmCiAg
ICAgcmV0dXJuIDA7CkBAIC0zMTM1LDcgKzMxMzcsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRW
aXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5U3RhdGUsCiAg
ICAgICAgIGJvb2wgdmlzaWJsZSA9IHZpc2liaWxpdHlTdGF0ZSA9PSBXZWJQYWdlVmlzaWJpbGl0
eVN0YXRlVmlzaWJsZTsKICAgICAgICAgaWYgKCF2aXNpYmxlKQogICAgICAgICAgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudEhvc3QtPnByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7Ci0gICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKKyAgICAgICAgbV9sYXll
clRyZWVWaWV3LnNldFZpc2libGUodmlzaWJsZSk7CiAgICAgfQogI2VuZGlmCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCBlNWI1YTUyNWYxM2FiY2JiY2Q2
YzQ1ZDc0ZmEyOTkxZGYzNTU3MTY3Li42NWE4ZTJlNzY3YzI1ZmJmNzdlNWMxNjUyMzFlM2UxYTEz
YWIyMWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTMy
LDYgKzMyLDkgQEAKICNkZWZpbmUgV2ViVmlld0ltcGxfaAogCiAjaW5jbHVkZSAiV2ViTmF2aWdh
dGlvblBvbGljeS5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVyLmgiCisjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlldy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVy
VHJlZVZpZXdDbGllbnQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQb2ludC5oIgogI2luY2x1
ZGUgInBsYXRmb3JtL1dlYlJlY3QuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTaXplLmgiCkBA
IC00OSw3ICs1Miw2IEBACiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oIgog
I2luY2x1ZGUgIlBhZ2VPdmVybGF5TGlzdC5oIgogI2luY2x1ZGUgIlVzZXJNZWRpYUNsaWVudElt
cGwuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtOTYsNyArOTgsNyBAQCBj
bGFzcyBXZWJNb3VzZVdoZWVsRXZlbnQ7CiBjbGFzcyBXZWJTZXR0aW5nc0ltcGw7CiBjbGFzcyBX
ZWJUb3VjaEV2ZW50OwogCi1jbGFzcyBXZWJWaWV3SW1wbCA6IHB1YmxpYyBXZWJWaWV3LCBwdWJs
aWMgV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Q2xpZW50LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJW
aWV3SW1wbD4geworY2xhc3MgV2ViVmlld0ltcGwgOiBwdWJsaWMgV2ViVmlldywgcHVibGljIFdl
YkxheWVyVHJlZVZpZXdDbGllbnQsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXdJbXBsPiB7CiBw
dWJsaWM6CiAgICAgLy8gV2ViV2lkZ2V0IG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lkIGNsb3Nl
KCk7CkBAIC0yMzcsMTMgKzIzOSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZFBh
Z2VPdmVybGF5KFdlYlBhZ2VPdmVybGF5KiwgaW50IC8qIHpPcmRlciAqLyk7CiAgICAgdmlydHVh
bCB2b2lkIHJlbW92ZVBhZ2VPdmVybGF5KFdlYlBhZ2VPdmVybGF5Kik7CiAKLSAgICAvLyBDQ0xh
eWVyVHJlZUhvc3RDbGllbnQKKyAgICAvLyBXZWJMYXllclRyZWVWaWV3Q2xpZW50CiAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKLSAgICB2
aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwg
ZmxvYXQpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVNjcm9sbEFuZFNjYWxlKGNvbnN0IFdlYlNpemUmLCBmbG9hdCk7CisgICAgdmlydHVhbCBXZWJH
cmFwaGljc0NvbnRleHQzRCogY3JlYXRlQ29udGV4dDNEKCk7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFJlYmluZEdyYXBoaWNzQ29udGV4dChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0
QW5kRHJhd0ZyYW1lKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNj
ZXNzKTsKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKTsKIAogICAgIC8vIFdl
YlZpZXdJbXBsCkBAIC00MjIsNyArNDI0LDcgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZygpOwogICAgIGJvb2wgcGFnZUhhc1JUTFN0eWxlKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7
Ci0gICAgdm9pZCBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKKyAgICB2b2lkIHNjaGVkdWxl
Q29tcG9zaXRpbmdMYXllclN5bmMoKTsKICAgICB2b2lkIHNjcm9sbFJvb3RMYXllclJlY3QoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGNsaXBSZWN0KTsKICAgICB2b2lkIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKICAgICBOb25Db21wb3NpdGVkQ29udGVudEhvc3QqIG5vbkNvbXBvc2l0
ZWRDb250ZW50SG9zdCgpOwpAQCAtNjUyLDcgKzY1NCw4IEBAIHByaXZhdGU6CiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFdlYkNvcmU6OkludFJlY3QgbV9yb290TGF5ZXJT
Y3JvbGxEYW1hZ2U7CiAgICAgT3duUHRyPE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdD4gbV9ub25D
b21wb3NpdGVkQ29udGVudEhvc3Q7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dD4gbV9sYXllclRyZWVIb3N0OworICAgIFdlYkxheWVyVHJlZVZpZXcgbV9sYXllclRyZWVWaWV3
OworICAgIFdlYkxheWVyIG1fcm9vdExheWVyOwogICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
IG1fcm9vdEdyYXBoaWNzTGF5ZXI7CiAgICAgYm9vbCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZTsKICAgICBib29sIG1fY29tcG9zaXRvckNyZWF0aW9uRmFpbGVkOwpAQCAtNjY4LDcg
KzY3MSw3IEBAIHByaXZhdGU6CiAgICAgLy8gSWYgd2UgYXR0ZW1wdCB0byBmZXRjaCB0aGUgb24t
c2NyZWVuIEdyYXBoaWNzQ29udGV4dDNEIGJlZm9yZQogICAgIC8vIHRoZSBjb21wb3NpdG9yIGhh
cyBiZWVuIHR1cm5lZCBvbiwgd2UgbmVlZCB0byBpbnN0YW50aWF0ZSBpdAogICAgIC8vIGVhcmx5
LiBUaGlzIG1lbWJlciBob2xkcyBvbiB0byB0aGUgR0MzRCBpbiB0aGlzIGNhc2UuCi0gICAgUmVm
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEPiBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhp
Y3NDb250ZXh0M0Q7CisgICAgT3duUHRyPFdlYkdyYXBoaWNzQ29udGV4dDNEPiBtX3RlbXBvcmFy
eU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgT3duUHRyPERldmljZU9yaWVudGF0aW9u
Q2xpZW50UHJveHk+IG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eTsKICAgICBPd25QdHI8
R2VvbG9jYXRpb25DbGllbnRQcm94eT4gbV9nZW9sb2NhdGlvbkNsaWVudFByb3h5OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAKaW5kZXggZTBjYWI4
N2JkZjU1YmEyOGZiNzI2NjcwOTY4MjZiMmQwM2M2N2M0Ni4uMWVlZDgxYWVhNDE2YzkwYjE0ZWVl
ZWM0YTNkNzI4MTZlZDFlZTNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9XZWJMYXllclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
V2ViTGF5ZXJUZXN0LmNwcApAQCAtNTcsNiArNTcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViU2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0
IHNjYWxlRmFjdG9yKSB7IH0KICAgICB2aXJ0dWFsIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjcmVh
dGVDb250ZXh0M0QoKSB7IHJldHVybiBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGUoV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMoKSkubGVha1B0cigpOyB9
CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlYmluZEdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3Mp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpIHsgfQogfTsKIAogY2xhc3MgTW9j
a1dlYkNvbnRlbnRMYXllckNsaWVudCA6IHB1YmxpYyBXZWJDb250ZW50TGF5ZXJDbGllbnQgewpA
QCAtNzIsNyArNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6
aW5pdGlhbGl6ZSgwKTsKICAgICAgICAgbV9yb290TGF5ZXIgPSBXZWJMYXllcjo6Y3JlYXRlKCk7
CiAgICAgICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1l
cyhBbnlOdW1iZXIoKSk7Ci0gICAgICAgIG1fdmlldyA9IFdlYkxheWVyVHJlZVZpZXc6OmNyZWF0
ZSgmbV9jbGllbnQsIG1fcm9vdExheWVyLCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncygpKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUobV92aWV3LmluaXRpYWxpemUoJm1fY2xpZW50LCBtX3Jvb3RM
YXllciwgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MoKSkpOwogICAgICAgICBNb2NrOjpWZXJp
ZnlBbmRDbGVhckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123036</attachid>
            <date>2012-01-18 16:40:00 -0800</date>
            <delta_ts>2012-02-08 16:16:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75591-20120118163959.patch</filename>
            <type>text/plain</type>
            <size>39199</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MzM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDViMjEyOTkyMzA1ZDNkMTNmZjQ1ODg5NTE2MGFlZTA2NjYzZjI3YWEuLjc2YmE0ZTY2MjAyNDVj
M2FmODliYmE2ZDZhMWNiMjRiODZkMWVkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNzUgQEAKKzIwMTItMDEtMDQgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1ha2UgV2ViVmlld0ltcGwgZGVwZW5kIG9u
IFdlYkxheWVyVHJlZVZpZXcgaW5zdGVhZCBvZiBDQ0xheWVyVHJlZUhvc3QKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTkxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjb252ZXJ0cyBXZWJWaWV3
SW1wbCBmcm9tIGRlcGVuZGluZyBvbiBDQ0xheWVyVHJlZUhvc3QgdG8gV2ViTGF5ZXJUcmVlVmll
dyBpbiBvcmRlciB0byBwcm92aWRlIGJldHRlcgorICAgICAgICBpc29sYXRpb24gYW5kIGFsbG93
IGZvciBmdXR1cmUgcmVmYWN0b3JpbmdzLiBUaGUgY2hhbmdlcyB0byBXZWJWaWV3SW1wbCBhcmUg
bW9zdGx5IG1lY2hhbmljYWwuIFRoZQorICAgICAgICBXZWJMYXllclRyZWVWaWV3IGFuZCBXZWJM
YXllclRyZWVWaWV3Q2xpZW50IGludGVyZmFjZXMgaGF2ZSBib3RoIGdyb3duIGFuZCBjaGFuZ2Vk
IHNsaWdodGx5OgorCisgICAgICAgIC0gU2V0dXAgcGF0aCBmb3IgV2ViTGF5ZXJUcmVlVmlldyBj
aGFuZ2VkIHRvIGV4cG9zZSBhbiBpbml0aWFsaXplKCkgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIGNy
ZWF0ZSgpIGZhY3RvcnkKKyAgICAgICAgZnVuY3Rpb24uIFRoZSBuZXcgbW9kZWwgaXMgdGhhdCBh
IFdlYkxheWVyVHJlZVZpZXcgd2hlbiBjb25zdHJ1Y3RlZCBpcyBpbiBhIG51bGwgc3RhdGUuIENh
bGxpbmcgaW5pdGlhbGl6ZSgpCisgICAgICAgIGF0dGVtcHRzIHRvIHJlLWluaXRpYWxpemUgdGhl
IFdMVFYsIHdoaWNoIGNhbiBlaXRoZXIgZmFpbCBvciBzdWNjZWVkLiAgQWxsIG90aGVyIGZ1bmN0
aW9ucyBtdXN0IGJlIGNhbGxlZCBvbiBhCisgICAgICAgIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXpl
ZCB2aWV3LgorCisgICAgICAgIC0gV2ViTGF5ZXJUcmVlVmlldyBleHBhbmRlZCB0byBpbmNsdWRl
IGZ1bmN0aW9uYWxpdHkgdGhhdCBDQ0xheWVyVHJlZUhvc3QgZXhwb3NlcyBidXQgV2ViTGF5ZXJU
cmVlVmlldyBkaWQgbm90LgorICAgICAgICBTb21lIG9mIHRoaXMgaXMgb25seSB2YWxpZCBmb3Ig
dGhlIHNpbmdsZSB0aHJlYWQgY2FzZSBhbmQgd2lsbCBiZSByZW1vdmVkIHdoZW4gd2UgaW52ZXJ0
IHRoZSBzY2hlZHVsaW5nIGNvbnRyb2wKKyAgICAgICAgbG9naWMsIHRoZXNlIGJpdHMgYXJlIGNv
bW1lbnRlZC4KKworICAgICAgICAtIFdlYkxheWVyVHJlZVZpZXdDbGllbnQgZXhwYW5kZWQgd2l0
aCBzb21lIGZsb3ctY29udHJvbCByZWxhdGVkIEFQSXMuCisKKyAgICAgICAgUmVmYWN0b3Igb25s
eSwgbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dl
YkxheWVyVHJlZVZpZXcuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6U2V0
dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6aXNO
dWxsKToKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5o
OgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Q2hyb21lQ2xpZW50SW1wbDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYyk6CisgICAgICAg
ICogc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRy
ZWVWaWV3Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6
c2V0SGF2ZVdoZWVsRXZlbnRIYW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJl
ZVZpZXc6OmNvbXBvc2l0b3JJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlVmlldzo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6
OnNldE5lZWRzQW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnVw
ZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3OjpzZXRO
ZWVkc1JlZHJhdyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnNldFBhZ2VT
Y2FsZUZhY3RvckxpbWl0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnNl
dFBhZ2VTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmZpbmlzaEFs
bFJlbmRlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3Ojpsb3NlQ29tcG9zaXRvckNvbnRl
eHQpOgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpkaWRDb21taXRBbmREcmF3
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkQ29tcGxl
dGVTd2FwQnVmZmVycyk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6Om51bWJlck9mV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphbmltYXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNv
bXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpsb3NlQ29tcG9zaXRvckNv
bnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcHV0ZVBhZ2VTY2FsZUZh
Y3RvckxpbWl0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphZGRQYWdlT3Zlcmxh
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVQYWdlT3ZlcmxheSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFJvb3RMYXllclJlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZUNvbnRleHQzRCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjphcHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OmRpZFJlYmluZEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVMYXllclRyZWVWaWV3cG9ydCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpncmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpzZXRWaXNpYmlsaXR5U3RhdGUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5oOgorICAgICAgICAqIHRlc3RzL1dlYkxheWVyVGVzdC5jcHA6CisKIDIwMTItMDEtMTgg
IERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBtb3ZlIFRvb2xzLmd5cCwgc3dpdGNoIGJ1aWxkLXdlYmtpdCAtLWNocm9taXVtIHRvIEFsbC5n
eXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dl
YkxheWVyVHJlZVZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3Jt
L1dlYkxheWVyVHJlZVZpZXcuaAppbmRleCAwMjYzYjM5MjY4YWRjZWUxMGY4MzU3NDI0NDcxZDdl
ZmQ0MzhhMWM0Li5hOTUyODA4NjVlM2RmNjI1YWQzMDM1YTcyYmU5MmZlYWRkMWVkNmYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRy
ZWVWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2Vi
TGF5ZXJUcmVlVmlldy5oCkBAIC0zNSw2ICszNSw3IEBAIHN0cnVjdCBDQ1NldHRpbmdzOwogfQog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3Mg
V2ViTGF5ZXI7CiBjbGFzcyBXZWJMYXllclRyZWVWaWV3Q2xpZW50Owogc3RydWN0IFdlYlJlY3Q7
CkBAIC00OSwyMSArNTAsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgLCBzaG93RlBTQ291bnRl
cihmYWxzZSkKICAgICAgICAgICAgICwgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGZhbHNlKQogICAg
ICAgICAgICAgLCByZWZyZXNoUmF0ZSgwKQotICAgICAgICAgICAgLCBwYXJ0aWFsU3dhcEVuYWJs
ZWQoZmFsc2UpIHsgfQorICAgICAgICAgICAgLCBwZXJUaWxlUGFpbnRpbmcoZmFsc2UpCisgICAg
ICAgICAgICAsIHBhcnRpYWxTd2FwRW5hYmxlZChmYWxzZSkKKyAgICAgICAgICAgIHsgfQogCiAg
ICAgICAgIGJvb2wgYWNjZWxlcmF0ZVBhaW50aW5nOwogICAgICAgICBib29sIGNvbXBvc2l0ZU9m
ZnNjcmVlbjsKICAgICAgICAgYm9vbCBzaG93RlBTQ291bnRlcjsKICAgICAgICAgYm9vbCBzaG93
UGxhdGZvcm1MYXllclRyZWU7CiAgICAgICAgIGRvdWJsZSByZWZyZXNoUmF0ZTsKKyAgICAgICAg
Ym9vbCBwZXJUaWxlUGFpbnRpbmc7CiAgICAgICAgIGJvb2wgcGFydGlhbFN3YXBFbmFibGVkOwog
I2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgogICAgICAgICBvcGVyYXRvciBXZWJDb3JlOjpDQ1Nl
dHRpbmdzKCkgY29uc3Q7CiAjZW5kaWYKICAgICB9OwogCi0gICAgV0VCS0lUX0VYUE9SVCBzdGF0
aWMgV2ViTGF5ZXJUcmVlVmlldyBjcmVhdGUoV2ViTGF5ZXJUcmVlVmlld0NsaWVudCosIGNvbnN0
IFdlYkxheWVyJiByb290LCBjb25zdCBTZXR0aW5ncyYpOwotCiAgICAgV2ViTGF5ZXJUcmVlVmll
dygpIHsgfQogICAgIFdlYkxheWVyVHJlZVZpZXcoY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYgbGF5
ZXIpIHsgYXNzaWduKGxheWVyKTsgfQogICAgIH5XZWJMYXllclRyZWVWaWV3KCkgeyByZXNldCgp
OyB9CkBAIC03MiwxMCArNzQsNTUgQEAgcHVibGljOgogICAgICAgICBhc3NpZ24obGF5ZXIpOwog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQorCiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJl
c2V0KCk7CiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJMYXllclRyZWVW
aWV3Jik7CiAgICAgV0VCS0lUX0VYUE9SVCBib29sIGVxdWFscyhjb25zdCBXZWJMYXllclRyZWVW
aWV3JikgY29uc3Q7CiAKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpdmF0
ZS5pc051bGwoKTsgfQorCisjZGVmaW5lIFdFQkxBWUVSVFJFRVZJRVdfSEFTX0lOSVRJQUxJWkUK
KyAgICAvLyBJbml0aWFsaXphdGlvbiBhbmQgbGlmZWN5Y2xlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBBdHRlbXB0cyB0byBpbml0aWFsaXplIHRoaXMg
V2ViTGF5ZXJUcmVlVmlldyB3aXRoIHRoZSBnaXZlbiBjbGllbnQsIHJvb3QgbGF5ZXIsIGFuZCBz
ZXR0aW5ncy4KKyAgICAvLyBJZiBpbml0aWFsaXphdGlvbiBmYWlscywgdGhpcyB3aWxsIHJldHVy
biBmYWxzZSBhbmQgLmlzTnVsbCgpIHdpbGwgcmV0dXJuIHRydWUuCisgICAgLy8gTXVzdCBiZSBj
YWxsZWQgYmVmb3JlIGFueSBtZXRob2RzIGJlbG93LgorICAgIFdFQktJVF9FWFBPUlQgYm9vbCBp
bml0aWFsaXplKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqLCBjb25zdCBXZWJMYXllciYgcm9vdCwg
Y29uc3QgU2V0dGluZ3MmKTsKKworICAgIC8vIFNldHMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuIFRo
ZSByb290IGlzIHNldCBieSB3YXkgb2YgdGhlIGNvbnN0cnVjdG9yLgorICAgIC8vIFRoaXMgaXMg
dHlwaWNhbGx5IHVzZWQgdG8gZXhwbGljaXRseSBzZXQgdGhlIHJvb3QgdG8gbnVsbCB0byBicmVh
aworICAgIC8vIGN5Y2xlcy4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0Um9vdExheWVyKFdl
YkxheWVyKik7CisKKyAgICAvLyBSZXR1cm5zIGEgdW5pcXVlIGlkZW50aWZpZXIgdGhhdCBjYW4g
YmUgdXNlZCBvbiB0aGUgY29tcG9zaXRvciB0aHJlYWQgdG8gcmVxdWVzdCBhCisgICAgLy8gV2Vi
Q29tcG9zaXRvcklucHV0SGFuZGxlciBpbnN0YW5jZS4KKyAgICBXRUJLSVRfRVhQT1JUIGludCBj
b21wb3NpdG9ySWRlbnRpZmllcigpOworCisKKyAgICAvLyBWaWV3IHByb3BlcnRpZXMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgc2V0Vmlld3BvcnRTaXplKGNvbnN0IFdlYlNpemUmKTsKKyAgICBXRUJL
SVRfRVhQT1JUIFdlYlNpemUgdmlld3BvcnRTaXplKCkgY29uc3Q7CisKKyAgICAvLyBTZXRzIHdo
ZXRoZXIgdGhpcyB2aWV3IGlzIHZpc2libGUuIEluIHRocmVhZGVkIG1vZGUsIGEgdmlldyB0aGF0
IGlzIG5vdCB2aXNpYmxlIHdpbGwgbm90CisgICAgLy8gY29tcG9zaXRlIG9yIHRyaWdnZXIgdXBk
YXRlQW5pbWF0aW9ucygpIG9yIGxheW91dCgpIGNhbGxzIHVudGlsIGl0IGJlY29tZXMgdmlzaWJs
ZS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0VmlzaWJsZShib29sKTsKKworICAgIC8vIFNl
dHMgdGhlIGN1cnJlbnQgcGFnZSBzY2FsZSBmYWN0b3IuIFRoZSBwYWdlIHNjYWxlIGZhY3RvciBs
aW1pdHMgYXJlIGFwcGxpZWQgdG8gdGhpcyB2YWx1ZS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
c2V0UGFnZVNjYWxlKGZsb2F0KTsKKworICAgIC8vIFNldHMgdGhlIG1pbmltdW0gYW5kIG1heGlt
dW0gcGFnZSBzY2FsZSBmYWN0b3IuIEJvdGggbGltaXRzIGFyZSBpbml0aWFsbHkgMSAobm8gcGFn
ZSBzY2FsZSBhbGxvd2VkKS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0UGFnZVNjYWxlRmFj
dG9yTGltaXRzKGZsb2F0IG1pbmltdW0sIGZsb2F0IG1heGltdW0pOworCisKKyAgICAvLyBGbG93
IGNvbnRyb2wgYW5kIHNjaGVkdWxpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKyAgICAvLyBSZXF1ZXN0cyBhbiB1cGRhdGVBbmltYXRpb25zKCkgY2FsbC4KKyAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0TmVlZHNBbmltYXRlKCk7CisKKyAgICAvLyBJbmRpY2F0
ZXMgdGhhdCB0aGUgdmlldyBuZWVkcyB0byBiZSByZWRyYXduLiBUaGlzIGlzIHR5cGljYWxseSB1
c2VkIHdoZW4gdGhlIGZyb250YnVmZmVyIGlzIGRhbWFnZWQuCisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIHNldE5lZWRzUmVkcmF3KCk7CisKICAgICAvLyBUcmlnZ2VycyBhIGNvbXBvc2l0aW5nIHBh
c3MuIElmIHRoZSBjb21wb3NpdG9yIHRocmVhZCB3YXMgbm90CiAgICAgLy8gZW5hYmxlZCB2aWEg
V2ViQ29tcG9zaXRvcjo6aW5pdGlhbGl6ZSwgdGhlIGNvbXBvc2l0aW5nIHBhc3MgaGFwcGVucwog
ICAgIC8vIGltbWVkaWF0ZWx5LiBJZiBpdCBpcyBlbmFibGVkLCB0aGUgY29tcG9zaXRpbmcgcGFz
cyB3aWxsIGhhcHBlbiBhdCBhCkBAIC04NSw4ICsxMzIsMTAgQEAgcHVibGljOgogICAgIC8vIFdl
YkNvbnRlbnRMYXllckNsaWVudDo6cGFpbnRDb250ZW50cy4KICAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgY29tcG9zaXRlKCk7CiAKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0Vmlld3BvcnRTaXpl
KGNvbnN0IFdlYlNpemUmKTsKLSAgICBXRUJLSVRfRVhQT1JUIFdlYlNpemUgdmlld3BvcnRTaXpl
KCkgY29uc3Q7CisgICAgLy8gSW1tZWRpYXRlbHkgdXBkYXRlIGFuaW1hdGlvbnMuIFRoaXMgc2hv
dWxkIG9ubHkgYmUgdXNlZCB3aGVuIGZyYW1lIHNjaGVkdWxpbmcgaXMgaGFuZGxlZCBieQorICAg
IC8vIHRoZSBXZWJMYXllclRyZWVWaWV3IHVzZXIgYW5kIG5vdCBpbnRlcm5hbGx5IGJ5IHRoZSBj
b21wb3NpdG9yLCBtZWFuaW5nIG9ubHkgaW4gc2luZ2xlLXRocmVhZGVkCisgICAgLy8gbW9kZS4K
KyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgZnJhbWVCZWdp
blRpbWUpOwogCiAgICAgLy8gQ29tcG9zaXRlcyBhbmQgYXR0ZW1wdHMgdG8gcmVhZCBiYWNrIHRo
ZSByZXN1bHQgaW50byB0aGUgcHJvdmlkZWQKICAgICAvLyBidWZmZXIuIElmIGl0IHdhc24ndCBw
b3NzaWJsZSwgZS5nLiBkdWUgdG8gY29udGV4dCBsb3N0LCB3aWxsIHJldHVybgpAQCAtOTYsMTYg
KzE0NSwyNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGJ1ZmZlciBpcyBub3QgbW9kaWZpZWQgaWYg
dGhlIGZhbHNlIGlzIHJldHVybmVkLgogICAgIFdFQktJVF9FWFBPUlQgYm9vbCBjb21wb3NpdGVB
bmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IFdlYlJlY3QmKTsKIAotICAgIC8vIFNldHMg
dGhlIHJvb3Qgb2YgdGhlIHRyZWUuIFRoZSByb290IGlzIHNldCBieSB3YXkgb2YgdGhlIGNvbnN0
cnVjdG9yLgotICAgIC8vIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8gZXhwbGljaXRseSBzZXQg
dGhlIHJvb3QgdG8gbnVsbCB0byBicmVhawotICAgIC8vIGN5Y2xlcy4KLSAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgc2V0Um9vdExheWVyKFdlYkxheWVyKik7CisgICAgLy8gQmxvY2tzIHVudGlsIHRo
ZSBtb3N0IHJlY2VudGx5IGNvbXBvc2l0ZWQgZnJhbWUgaGFzIGZpbmlzaGVkIHJlbmRlcmluZyBv
biB0aGUgR1BVLgorICAgIC8vIFRoaXMgY2FuIGhhdmUgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5j
ZSBpbXBhY3QgYW5kIHNob3VsZCBiZSB1c2VkIHdpdGggY2FyZS4KKyAgICBXRUJLSVRfRVhQT1JU
IHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CiAKLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
LSAgICBXZWJMYXllclRyZWVWaWV3KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q+Jik7Ci0gICAgV2ViTGF5ZXJUcmVlVmlldyYgb3BlcmF0b3I9KGNvbnN0IFdU
Rjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+Jik7Ci0gICAgb3BlcmF0b3Ig
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdD4oKSBjb25zdDsKLSNlbmRp
ZgorCisgICAgLy8gSW5wdXQgaGFuZGxpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gU2V0cyB3aGV0aGVyIHRoZSBlbWJlZGRl
ciBvZiB0aGlzIHZpZXcgaGFzIGFueSBtb3VzZSB3aGVlbCBldmVudCBoYW5kbGVycyByZWdpc3Rl
cmVkLgorICAgIC8vIElmIGZhbHNlLCB0aGVuIHRoZSBjb21wb3NpdG9yIG1heSBoYW5kbGUgd2hl
ZWwgZXZlbnRzIGl0c2VsZi4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0SGF2ZVdoZWVsRXZl
bnRIYW5kbGVycyhib29sKTsKKworCisgICAgLy8gRGVidWdnaW5nIC8gZGFuZ2Vyb3VzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gUmV0dXJu
cyB0aGUgY29udGV4dCBiZWluZyB1c2VkIGZvciByZW5kZXJpbmcgdGhpcyB2aWV3LiBJbiB0aHJl
YWRlZCBjb21wb3NpdGluZyBtb2RlLCBpdCBpcworICAgIC8vIG5vdCBzYWZlIHRvIHVzZSB0aGlz
IGNvbnRleHQgYXQgYWxsIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoaXMgQVBJIGFzIHNvb24gYXMgcG9zc2libGUsIGl0J3MgdmVyeSBidWctcHJvbmUgaW4gdGhy
ZWFkZWQgbW9kZS4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KCk7CisKKyAgICAvLyBTaW11bGF0ZXMgYSBsb3N0IGNvbnRleHQuIEZvciB0ZXN0aW5nIG9u
bHkuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dChpbnQgbnVt
VGltZXMpOwogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q+IG1fcHJpdmF0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaAppbmRleCA5
YzRkZmI3N2I3NzExNGIwZWY2N2IwMTdiZmE0YmQyMjNiM2FiNmE2Li41YzBiOWVmOWEyYTJjNjEz
YjExOTAwYzEzZjg5OGYyMjgzOWI0NjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5o
CkBAIC01Miw2ICs1Miw5IEBAIHB1YmxpYzoKICAgICAvLyBjb250ZXh0IGV2ZW50KS4KICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmViaW5kR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykgPSAwOwog
CisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpID0gMDsKKwogICAgIC8vIFNjaGVkdWxl
cyBhIGNvbXBvc2l0aW5nIHBhc3MsIG1lYW5pbmcgdGhlIGNsaWVudCBzaG91bGQgY2FsbAogICAg
IC8vIFdlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0ZSBhdCBhIGxhdGVyIHRpbWUuIFRoaXMgaXMg
b25seSBjYWxsZWQgaWYgdGhlCiAgICAgLy8gY29tcG9zaXRvciB0aHJlYWQgaXMgZGlzYWJsZWQ7
IHdoZW4gZW5hYmxlZCwgdGhlIGNvbXBvc2l0b3Igd2lsbApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAppbmRleCA1ZjI4NTFiYjU4NzdjOWZmNzQy
NmQ3YThjMWU1ZDEzODY0ZmEwMmNmLi5iZDczYzUzZTllNDVkZGIxOThkZTQxN2M5NGYyZWZkMzdl
Y2QwYWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGll
bnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJ
bXBsLmNwcApAQCAtODkwLDcgKzg5MCw3IEBAIHZvaWQgQ2hyb21lQ2xpZW50SW1wbDo6YXR0YWNo
Um9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGljc0xheWVyKiBncmFwCiAKIHZv
aWQgQ2hyb21lQ2xpZW50SW1wbDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpCiB7Ci0g
ICAgbV93ZWJWaWV3LT5zZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKKyAgICBtX3dlYlZpZXct
PnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKTsKIH0KIAogQ2hyb21lQ2xpZW50OjpDb21w
b3NpdGluZ1RyaWdnZXJGbGFncyBDaHJvbWVDbGllbnRJbXBsOjphbGxvd2VkQ29tcG9zaXRpbmdU
cmlnZ2VycygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJMYXllclRyZWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
VHJlZVZpZXcuY3BwCmluZGV4IGIyODhiNTYzYmU2NTRjYWE2YWUxMTZlNzY1ZjdmZjUwM2JiZGU4
MjAuLjQ4ZTE2OTg2Njk0NmEwN2E0MGIyNWQyOWZkY2Q3NDA4ZDFlYzA3ZGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJU
cmVlVmlldy5oIgogCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5j
bHVkZSAiV2ViTGF5ZXJUcmVlVmlld0ltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhv
c3QuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllci5oIgpAQCAtNTEsMTEgKzUyLDYgQEAg
V2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3M6Om9wZXJhdG9yIENDU2V0dGluZ3MoKSBjb25zdAog
ICAgIHJldHVybiBzZXR0aW5nczsKIH0KIAotV2ViTGF5ZXJUcmVlVmlldyBXZWJMYXllclRyZWVW
aWV3OjpjcmVhdGUoV2ViTGF5ZXJUcmVlVmlld0NsaWVudCogY2xpZW50LCBjb25zdCBXZWJMYXll
ciYgcm9vdCwgY29uc3QgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MmIHNldHRpbmdzKQotewot
ICAgIHJldHVybiBXZWJMYXllclRyZWVWaWV3KFdlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGUo
Y2xpZW50LCByb290LCBzZXR0aW5ncykpOwotfQotCiB2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnJl
c2V0KCkKIHsKICAgICBtX3ByaXZhdGUucmVzZXQoKTsKQEAgLTcxLDE0ICs2NywyNiBAQCBib29s
IFdlYkxheWVyVHJlZVZpZXc6OmVxdWFscyhjb25zdCBXZWJMYXllclRyZWVWaWV3JiBuKSBjb25z
dAogICAgIHJldHVybiAobV9wcml2YXRlLmdldCgpID09IG4ubV9wcml2YXRlLmdldCgpKTsKIH0K
IAotdm9pZCBXZWJMYXllclRyZWVWaWV3Ojpjb21wb3NpdGUoKQorYm9vbCBXZWJMYXllclRyZWVW
aWV3Ojppbml0aWFsaXplKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqIGNsaWVudCwgY29uc3QgV2Vi
TGF5ZXImIHJvb3QsIGNvbnN0IFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzJiBzZXR0aW5ncykK
IHsKLSAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQotICAgICAgICBtX3ByaXZhdGUt
PnNldE5lZWRzQ29tbWl0KCk7CisgICAgbV9wcml2YXRlID0gV2ViTGF5ZXJUcmVlVmlld0ltcGw6
OmNyZWF0ZShjbGllbnQsIHJvb3QsIHNldHRpbmdzKTsKKyAgICByZXR1cm4gIWlzTnVsbCgpOwor
fQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnNldFJvb3RMYXllcihXZWJMYXllciAqcm9vdCkK
K3sKKyAgICBpZiAocm9vdCkKKyAgICAgICAgbV9wcml2YXRlLT5zZXRSb290TGF5ZXIoKnJvb3Qp
OwogICAgIGVsc2UKLSAgICAgICAgbV9wcml2YXRlLT5jb21wb3NpdGUoKTsKKyAgICAgICAgbV9w
cml2YXRlLT5zZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPigpKTsKK30KKwor
aW50IFdlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0b3JJZGVudGlmaWVyKCkKK3sKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5jb21wb3NpdG9ySWRlbnRpZmllcigpOwogfQogCisKIHZvaWQgV2ViTGF5
ZXJUcmVlVmlldzo6c2V0Vmlld3BvcnRTaXplKGNvbnN0IFdlYlNpemUmIHZpZXdwb3J0U2l6ZSkK
IHsKICAgICBtX3ByaXZhdGUtPnNldFZpZXdwb3J0U2l6ZSh2aWV3cG9ydFNpemUpOwpAQCAtODks
MzMgKzk3LDY3IEBAIFdlYlNpemUgV2ViTGF5ZXJUcmVlVmlldzo6dmlld3BvcnRTaXplKCkgY29u
c3QKICAgICByZXR1cm4gV2ViU2l6ZShtX3ByaXZhdGUtPnZpZXdwb3J0U2l6ZSgpKTsKIH0KIAor
dm9pZCBXZWJMYXllclRyZWVWaWV3OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBt
X3ByaXZhdGUtPnNldFZpc2libGUodmlzaWJsZSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlVmll
dzo6c2V0UGFnZVNjYWxlKGZsb2F0IHBhZ2VTY2FsZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFBh
Z2VTY2FsZShwYWdlU2NhbGUpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnNldFBhZ2VT
Y2FsZUZhY3RvckxpbWl0cyhmbG9hdCBtaW5pbXVtLCBmbG9hdCBtYXhpbXVtKQoreworICAgIG1f
cHJpdmF0ZS0+c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKG1pbmltdW0sIG1heGltdW0pOworfQor
Cit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnNldE5lZWRzQW5pbWF0ZSgpCit7CisgICAgbV9wcml2
YXRlLT5zZXROZWVkc0FuaW1hdGUoKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3OjpzZXRO
ZWVkc1JlZHJhdygpCit7CisgICAgbV9wcml2YXRlLT5zZXROZWVkc1JlZHJhdygpOworfQorCit2
b2lkIFdlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0ZSgpCit7CisgICAgaWYgKENDUHJveHk6Omhh
c0ltcGxUaHJlYWQoKSkKKyAgICAgICAgbV9wcml2YXRlLT5zZXROZWVkc0NvbW1pdCgpOworICAg
IGVsc2UKKyAgICAgICAgbV9wcml2YXRlLT5jb21wb3NpdGUoKTsKK30KKwordm9pZCBXZWJMYXll
clRyZWVWaWV3Ojp1cGRhdGVBbmltYXRpb25zKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAg
ICBtX3ByaXZhdGUtPnVwZGF0ZUFuaW1hdGlvbnMoZnJhbWVCZWdpblRpbWUpOworfQorCiBib29s
IFdlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29u
c3QgV2ViUmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gbV9wcml2YXRlLT5jb21wb3NpdGVBbmRS
ZWFkYmFjayhwaXhlbHMsIHJlY3QpOwogfQogCi12b2lkIFdlYkxheWVyVHJlZVZpZXc6OnNldFJv
b3RMYXllcihXZWJMYXllciAqcm9vdCkKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6ZmluaXNoQWxs
UmVuZGVyaW5nKCkKIHsKLSAgICBpZiAocm9vdCkKLSAgICAgICAgbV9wcml2YXRlLT5zZXRSb290
TGF5ZXIoKnJvb3QpOwotICAgIGVsc2UKLSAgICAgICAgbV9wcml2YXRlLT5zZXRSb290TGF5ZXIo
UGFzc1JlZlB0cjxMYXllckNocm9taXVtPigpKTsKKyAgICBtX3ByaXZhdGUtPmZpbmlzaEFsbFJl
bmRlcmluZygpOwogfQogCi1XZWJMYXllclRyZWVWaWV3OjpXZWJMYXllclRyZWVWaWV3KGNvbnN0
IFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiYgbm9kZSkKLSAgICA6IG1fcHJpdmF0ZShub2Rl
KQordm9pZCBXZWJMYXllclRyZWVWaWV3OjpzZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKGJvb2wg
aGF2ZUhhbmRsZXJzKQogeworICAgIG1fcHJpdmF0ZS0+c2V0SGF2ZVdoZWVsRXZlbnRIYW5kbGVy
cyhoYXZlSGFuZGxlcnMpOwogfQogCi1XZWJMYXllclRyZWVWaWV3JiBXZWJMYXllclRyZWVWaWV3
OjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+JiBub2RlKQorV2Vi
R3JhcGhpY3NDb250ZXh0M0QqIFdlYkxheWVyVHJlZVZpZXc6OmNvbnRleHQoKQogewotICAgIG1f
cHJpdmF0ZSA9IG5vZGU7Ci0gICAgcmV0dXJuICp0aGlzOworICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChtX3ByaXZhdGUtPmNv
bnRleHQoKSk7CiB9CiAKLVdlYkxheWVyVHJlZVZpZXc6Om9wZXJhdG9yIFBhc3NSZWZQdHI8Q0NM
YXllclRyZWVIb3N0PigpIGNvbnN0Cit2b2lkIFdlYkxheWVyVHJlZVZpZXc6Omxvc2VDb21wb3Np
dG9yQ29udGV4dChpbnQgbnVtVGltZXMpCiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsK
KyAgICBtX3ByaXZhdGUtPmxvc2VDb21wb3NpdG9yQ29udGV4dChudW1UaW1lcyk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwCmluZGV4IDk4MTQ3NzExODliZjY5ZDdjOGQ1MzQ4N2My
NDlhZjIwYzEwOWQzZDEuLmVhYTc4ZDdmMDI2MTQzYTcwM2ZiZTg2OGJmNjBkZDYxOGQwYTJhYWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3
SW1wbC5jcHAKQEAgLTEwMywyMCArMTAzLDIyIEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IFdlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNECiAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0
RnJvbVdlYkNvbnRleHQod2ViQ29udGV4dC5yZWxlYXNlKCksIGF0dHJpYnV0ZXMsIDAsIHN0eWxl
LCB1c2FnZSk7CiB9CiAKLXZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRpZENvbW1pdEFuZERy
YXdGcmFtZSgpCit2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNz
Q29udGV4dChib29sIHN1Y2Nlc3MpCiB7Ci0gICAgLy8gRklYTUU6IHJvdXRlIHRoaXMgdXAgdG8g
dGhlIFdlYkxheWVyVHJlZVZpZXcgY2xpZW50CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBt
X2NsaWVudC0+ZGlkUmViaW5kR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3MpOwogfQogCi12b2lkIFdl
YkxheWVyVHJlZVZpZXdJbXBsOjpkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkKK3ZvaWQgV2ViTGF5
ZXJUcmVlVmlld0ltcGw6OmRpZENvbW1pdEFuZERyYXdGcmFtZSgpCiB7Ci0gICAgLy8gRklYTUU6
IHJvdXRlIHRoaXMgdXAgdG8gdGhlIFdlYkxheWVyVHJlZVZpZXcgY2xpZW50CisgICAgaWYgKG1f
Y2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCk7CiB9CiAK
LXZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJv
b2wgc3VjY2VzcykKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRpZENvbXBsZXRlU3dhcEJ1
ZmZlcnMoKQogewogICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRpZFJlYmlu
ZEdyYXBoaWNzQ29udGV4dChzdWNjZXNzKTsKKyAgICAgICAgbV9jbGllbnQtPmRpZENvbXBsZXRl
U3dhcEJ1ZmZlcnMoKTsKIH0KIAogdm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6c2NoZWR1bGVD
b21wb3NpdGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmlu
ZGV4IGExNDc0ODM1MzE5N2I3Mjc5Mzk3MjA0ZmE0ODBkYmEzMzQwNTk3ZDcuLmMyNmQzNTdiNThi
ZjRmOTc5NTI4MzVjNGNmZTkxMzU0NTFmZTM3YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJBdXRvZmls
bFBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRl
ICJCYWNrRm9yd2FyZExpc3RDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNp
bmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgogI2luY2x1ZGUgIkNocm9tZS5oIgpAQCAtMTIzLDYgKzEyNCw4IEBACiAjaW5jbHVkZSAiV2Vi
SW5wdXRFdmVudENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKICNpbmNsdWRlICJw
bGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJM
YXllci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXcuaCIKICNpbmNsdWRl
ICJXZWJNZWRpYVBsYXllckFjdGlvbi5oIgogI2luY2x1ZGUgIldlYk5vZGUuaCIKICNpbmNsdWRl
ICJXZWJQbHVnaW4uaCIKQEAgLTEzNyw3ICsxNDAsNiBAQAogI2luY2x1ZGUgInBsYXRmb3JtL1dl
YlN0cmluZy5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlZlY3Rvci5oIgogI2luY2x1ZGUgIldl
YlZpZXdDbGllbnQuaCIKLSNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8d3RmL0J5
dGVBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CkBAIC04MTYsOCArODE4LDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6bnVtYmVy
T2ZXaGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKHVuc2lnbmVkIG51bWJlck9mV2hlZWxIYW5kbGUK
ICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgIG1fY2xpZW50LT5udW1iZXJPZldoZWVsRXZlbnRI
YW5kbGVyc0NoYW5nZWQobnVtYmVyT2ZXaGVlbEhhbmRsZXJzKTsKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5zZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKG1faGF2ZVdoZWVsRXZlbnRIYW5k
bGVycyk7CisgICAgaWYgKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpCisgICAgICAgIG1fbGF5
ZXJUcmVlVmlldy5zZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKG1faGF2ZVdoZWVsRXZlbnRIYW5k
bGVycyk7CiAjZW5kaWYKIH0KIApAQCAtMTEzOCw3ICsxMTQwLDcgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6YW5pbWF0ZShkb3VibGUgZnJhbWVCZWdpblRpbWUpCiAgICAgLy8gSW4gY29tcG9zaXRlZCBt
b2RlLCB3ZSBhbHdheXMgZ28gdGhyb3VnaCB0aGUgY29tcG9zaXRvciBzbyBpdCBjYW4gYXBwbHkK
ICAgICAvLyBhcHByb3ByaWF0ZSBmbG93LWNvbnRyb2wgbWVjaGFuaXNtcy4KICAgICBpZiAoaXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
dXBkYXRlQW5pbWF0aW9ucyhmcmFtZUJlZ2luVGltZSk7CisgICAgICAgIG1fbGF5ZXJUcmVlVmll
dy51cGRhdGVBbmltYXRpb25zKGZyYW1lQmVnaW5UaW1lKTsKICAgICBlbHNlCiAjZW5kaWYKICAg
ICAgICAgdXBkYXRlQW5pbWF0aW9ucyhmcmFtZUJlZ2luVGltZSk7CkBAIC0xMTg2LDYgKzExODgs
NyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpsYXlvdXQoKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKIHZvaWQgV2ViVmlld0ltcGw6OmRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKFdlYkNh
bnZhcyogY2FudmFzLCBjb25zdCBJbnRSZWN0JiByZWN0KQogeworICAgIEFTU0VSVCghbV9sYXll
clRyZWVWaWV3LmlzTnVsbCgpKTsKICNpZiBVU0UoU0tJQSkKICAgICBQbGF0Zm9ybUNvbnRleHRT
a2lhIGNvbnRleHQoY2FudmFzKTsKIApAQCAtMTIwNCw3ICsxMjA3LDcgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6ZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IElu
dFJlY3QmIHJlY3QKICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyOjpjcmVhdGUocmVjdC5zaXplKCkpKTsKICAgICBSZWZQdHI8Qnl0ZUFycmF5PiBwaXhlbEFy
cmF5KEJ5dGVBcnJheTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0KSk7
CiAgICAgaWYgKGltYWdlQnVmZmVyICYmIHBpeGVsQXJyYXkpIHsKLSAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5jb21wb3NpdGVBbmRSZWFkYmFjayhwaXhlbEFycmF5LT5kYXRhKCksIGludmVydFJl
Y3QpOworICAgICAgICBtX2xheWVyVHJlZVZpZXcuY29tcG9zaXRlQW5kUmVhZGJhY2socGl4ZWxB
cnJheS0+ZGF0YSgpLCBpbnZlcnRSZWN0KTsKICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dFByZW11
bHRpcGxpZWRJbWFnZURhdGEocGl4ZWxBcnJheS5nZXQoKSwgcmVjdC5zaXplKCksIEludFJlY3Qo
SW50UG9pbnQoKSwgcmVjdC5zaXplKCkpLCBJbnRQb2ludCgpKTsKICAgICAgICAgZ2Muc2F2ZSgp
OwogICAgICAgICBnYy50cmFuc2xhdGUoSW50U2l6ZSgwLCBiaXRtYXBIZWlnaHQpKTsKQEAgLTEy
MjYsNyArMTIyOSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFz
LCBjb25zdCBXZWJSZWN0JiByZWN0KQogICAgICAgICBpZiAoY2FudmFzKSB7CiAgICAgICAgICAg
ICAvLyBDbGlwIHJlY3QgdG8gdGhlIGNvbmZpbmVzIG9mIHRoZSByb290TGF5ZXJUZXh0dXJlLgog
ICAgICAgICAgICAgSW50UmVjdCByZXNpemVSZWN0KHJlY3QpOwotICAgICAgICAgICAgcmVzaXpl
UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9sYXllclRyZWVIb3N0LT52
aWV3cG9ydFNpemUoKSkpOworICAgICAgICAgICAgcmVzaXplUmVjdC5pbnRlcnNlY3QoSW50UmVj
dChJbnRQb2ludCgwLCAwKSwgbV9sYXllclRyZWVWaWV3LnZpZXdwb3J0U2l6ZSgpKSk7CiAgICAg
ICAgICAgICBkb1BpeGVsUmVhZGJhY2tUb0NhbnZhcyhjYW52YXMsIHJlc2l6ZVJlY3QpOwogICAg
ICAgICB9CiAjZW5kaWYKQEAgLTEyNTYsNyArMTI1OSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmNv
bXBvc2l0ZShib29sKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBp
ZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNl
dE5lZWRzUmVkcmF3KCk7CisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5zZXROZWVkc1JlZHJhdygp
OwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0
aXZlKCkpOwogICAgICAgICBpZiAoIXBhZ2UoKSkKQEAgLTEyNjUsNyArMTI2OCw3IEBAIHZvaWQg
V2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sKQogICAgICAgICBpZiAobV9wYWdlT3ZlcmxheXMp
CiAgICAgICAgICAgICBtX3BhZ2VPdmVybGF5cy0+dXBkYXRlKCk7CiAKLSAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5jb21wb3NpdGUoKTsKKyAgICAgICAgbV9sYXllclRyZWVWaWV3LmNvbXBvc2l0
ZSgpOwogICAgIH0KICNlbmRpZgogfQpAQCAtMTI3Myw4ICsxMjc2LDggQEAgdm9pZCBXZWJWaWV3
SW1wbDo6Y29tcG9zaXRlKGJvb2wpCiB2b2lkIFdlYlZpZXdJbXBsOjpsb3NlQ29tcG9zaXRvckNv
bnRleHQoaW50IG51bVRpbWVzKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmxvc2VD
b21wb3NpdG9yQ29udGV4dChudW1UaW1lcyk7CisgICAgaWYgKCFtX2xheWVyVHJlZVZpZXcuaXNO
dWxsKCkpCisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5sb3NlQ29tcG9zaXRvckNvbnRleHQobnVt
VGltZXMpOwogI2VuZGlmCiB9CiAKQEAgLTIxMzIsOCArMjEzNSw4IEBAIGJvb2wgV2ViVmlld0lt
cGw6OmNvbXB1dGVQYWdlU2NhbGVGYWN0b3JMaW1pdHMoKQogICAgIH0KICAgICBBU1NFUlQobV9t
aW5pbXVtUGFnZVNjYWxlRmFjdG9yIDw9IG1fbWF4aW11bVBhZ2VTY2FsZUZhY3Rvcik7CiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0g
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKG1fbWluaW11
bVBhZ2VTY2FsZUZhY3RvciwgbV9tYXhpbXVtUGFnZVNjYWxlRmFjdG9yKTsKKyAgICBpZiAoIW1f
bGF5ZXJUcmVlVmlldy5pc051bGwoKSkKKyAgICAgICAgbV9sYXllclRyZWVWaWV3LnNldFBhZ2VT
Y2FsZUZhY3RvckxpbWl0cyhtX21pbmltdW1QYWdlU2NhbGVGYWN0b3IsIG1fbWF4aW11bVBhZ2VT
Y2FsZUZhY3Rvcik7CiAjZW5kaWYKIAogICAgIGZsb2F0IGNsYW1wZWRTY2FsZSA9IGNsYW1wUGFn
ZVNjYWxlRmFjdG9yVG9MaW1pdHMocGFnZVNjYWxlRmFjdG9yKCkpOwpAQCAtMjc2MiwxNyArMjc2
NSwxMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjphZGRQYWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheSog
b3ZlcmxheSwgaW50IHpPcmRlcikKICAgICAgICAgbV9wYWdlT3ZlcmxheXMgPSBQYWdlT3Zlcmxh
eUxpc3Q6OmNyZWF0ZSh0aGlzKTsKIAogICAgIG1fcGFnZU92ZXJsYXlzLT5hZGQob3ZlcmxheSwg
ek9yZGVyKTsKLSAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIAogdm9pZCBXZWJW
aWV3SW1wbDo6cmVtb3ZlUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXkqIG92ZXJsYXkpCiB7Ci0g
ICAgaWYgKG1fcGFnZU92ZXJsYXlzICYmIG1fcGFnZU92ZXJsYXlzLT5yZW1vdmUob3ZlcmxheSkp
IHsKLSAgICAgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Ci0KLSAgICAgICAgaWYgKG1f
cGFnZU92ZXJsYXlzLT5lbXB0eSgpKQotICAgICAgICAgICAgbV9wYWdlT3ZlcmxheXMgPSBudWxs
cHRyOwotICAgIH0KKyAgICBpZiAobV9wYWdlT3ZlcmxheXMgJiYgbV9wYWdlT3ZlcmxheXMtPnJl
bW92ZShvdmVybGF5KSAmJiBtX3BhZ2VPdmVybGF5cy0+ZW1wdHkoKSkKKyAgICAgICAgbV9wYWdl
T3ZlcmxheXMgPSBudWxscHRyOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRPdmVybGF5TGF5
ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXIpCkBAIC0yODgwLDI5ICsyODc4LDMxIEBA
IHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQogICAgICAgICB9CiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRT
Y3JvbGxMYXllcihzY3JvbGxMYXllcik7CiAgICAgfQotICAgIGlmIChtX2xheWVyVHJlZUhvc3Qp
Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKGxheWVyID8gbGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKSA6IDApOworCisgICAgaWYgKGxheWVyKQorICAgICAgICBtX3Jvb3RMYXll
ciA9IFdlYkxheWVyKGxheWVyLT5wbGF0Zm9ybUxheWVyKCkpOworCisgICAgaWYgKCFtX2xheWVy
VHJlZVZpZXcuaXNOdWxsKCkpCisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRSb290TGF5ZXIo
bGF5ZXIgPyAmbV9yb290TGF5ZXIgOiAwKTsKIAogICAgIEludFJlY3QgZGFtYWdlZFJlY3QoMCwg
MCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKICAgICBpZiAoIW1faXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlKQogICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3Qo
ZGFtYWdlZFJlY3QpOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290TGF5ZXJOZWVkc0Rp
c3BsYXkoKQordm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygp
CiB7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
ZXROZWVkc0NvbW1pdCgpOworICAgIG1fbGF5ZXJUcmVlVmlldy5zZXROZWVkc1JlZHJhdygpOwog
fQogCi12b2lkIFdlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5ZXJSZWN0KGNvbnN0IEludFNpemUm
IHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3ZvaWQgV2ViVmlld0ltcGw6
OnNjcm9sbFJvb3RMYXllclJlY3QoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmKQogewog
ICAgIHVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7Ci0gICAgc2V0Um9vdExheWVyTmVlZHNEaXNw
bGF5KCk7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdCk7CisgICAg
QVNTRVJUKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpOwogCiAgICAgaWYgKCFwYWdlKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI5MTEsNyArMjkxMSw2IEBAIHZvaWQgV2ViVmlld0ltcGw6Omlu
dmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgSW50UmVjdCBk
aXJ0eVJlY3QgPSB2aWV3LT53aW5kb3dUb0NvbnRlbnRzKHJlY3QpOwogICAgIHVwZGF0ZUxheWVy
VHJlZVZpZXdwb3J0KCk7CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPmludmFsaWRh
dGVSZWN0KGRpcnR5UmVjdCk7Ci0gICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiB9CiAK
IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCogV2ViVmlld0ltcGw6Om5vbkNvbXBvc2l0ZWRDb250
ZW50SG9zdCgpCkBAIC0yOTI0LDggKzI5MjMsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzY2hlZHVs
ZUFuaW1hdGlvbigpCiB7CiAgICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgp
KSB7CiAgICAgICAgIGlmIChDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkpIHsKLSAgICAgICAgICAg
IEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOwotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
ZXROZWVkc0FuaW1hdGUoKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9sYXllclRyZWVWaWV3Lmlz
TnVsbCgpKTsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5zZXROZWVkc0FuaW1hdGUoKTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2NsaWVudC0+c2NoZWR1bGVBbmltYXRpb24o
KTsKICAgICB9IGVsc2UKQEAgLTI5NzgsNDcgKzI5NzcsNDYgQEAgdm9pZCBXZWJWaWV3SW1wbDo6
c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgICAgICBt
X2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IGZhbHNlOwogICAgICAgICAvLyBXZSBu
ZWVkIHRvIGZpbmlzaCBhbGwgR0wgcmVuZGVyaW5nIGJlZm9yZSBzZW5kaW5nIGRpZERlYWN0aXZh
dGVDb21wb3NpdG9yKCkgdG8gcHJldmVudAogICAgICAgICAvLyBmbGlja2VyaW5nIHdoZW4gY29t
cG9zaXRpbmcgdHVybnMgb2ZmLgotICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICAgICAgaWYg
KCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpCisgICAgICAgICAgICBtX2xheWVyVHJlZVZpZXcu
ZmluaXNoQWxsUmVuZGVyaW5nKCk7CiAgICAgICAgIG1fY2xpZW50LT5kaWREZWFjdGl2YXRlQ29t
cG9zaXRvcigpOwotICAgIH0gZWxzZSBpZiAobV9sYXllclRyZWVIb3N0KSB7CisgICAgfSBlbHNl
IGlmICghbV9sYXllclRyZWVWaWV3LmlzTnVsbCgpKSB7CiAgICAgICAgIG1faXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgdXBkYXRlTGF5ZXJUcmVlVmlld3Bv
cnQoKTsKIAotICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVDb21wb3NpdG9yKG1fbGF5ZXJU
cmVlSG9zdC0+Y29tcG9zaXRvcklkZW50aWZpZXIoKSk7CisgICAgICAgIG1fY2xpZW50LT5kaWRB
Y3RpdmF0ZUNvbXBvc2l0b3IobV9sYXllclRyZWVWaWV3LmNvbXBvc2l0b3JJZGVudGlmaWVyKCkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJXZWJWaWV3SW1wbDo6c2V0SXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKHRydWUpIiwgdGhpcywgMCk7CiAKICAgICAgICAg
c3RhdGljIGNvbnN0IGRvdWJsZSBkZWZhdWx0UmVmcmVzaFJhdGUgPSA2MC4wOwogCi0gICAgICAg
IFdlYkNvcmU6OkNDU2V0dGluZ3MgY2NTZXR0aW5nczsKLSAgICAgICAgY2NTZXR0aW5ncy5hY2Nl
bGVyYXRlUGFpbnRpbmcgPSBwYWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkRHJhd2luZ0Vu
YWJsZWQoKTsKLSAgICAgICAgY2NTZXR0aW5ncy5jb21wb3NpdGVPZmZzY3JlZW4gPSBzZXR0aW5n
cygpLT5jb21wb3NpdGVUb1RleHR1cmVFbmFibGVkKCk7Ci0gICAgICAgIGNjU2V0dGluZ3Muc2hv
d0ZQU0NvdW50ZXIgPSBzZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpOwotICAgICAgICBjY1Nl
dHRpbmdzLnNob3dQbGF0Zm9ybUxheWVyVHJlZSA9IHNldHRpbmdzKCktPnNob3dQbGF0Zm9ybUxh
eWVyVHJlZSgpOwotICAgICAgICBjY1NldHRpbmdzLnJlZnJlc2hSYXRlID0gc2NyZWVuUmVmcmVz
aFJhdGUocGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpKTsKKyAgICAgICAgV2ViTGF5ZXJUcmVl
Vmlldzo6U2V0dGluZ3MgbGF5ZXJUcmVlVmlld1NldHRpbmdzOworICAgICAgICBsYXllclRyZWVW
aWV3U2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gcGFnZSgpLT5zZXR0aW5ncygpLT5hY2Nl
bGVyYXRlZERyYXdpbmdFbmFibGVkKCk7CisgICAgICAgIGxheWVyVHJlZVZpZXdTZXR0aW5ncy5j
b21wb3NpdGVPZmZzY3JlZW4gPSBzZXR0aW5ncygpLT5jb21wb3NpdGVUb1RleHR1cmVFbmFibGVk
KCk7CisgICAgICAgIGxheWVyVHJlZVZpZXdTZXR0aW5ncy5zaG93RlBTQ291bnRlciA9IHNldHRp
bmdzKCktPnNob3dGUFNDb3VudGVyKCk7CisgICAgICAgIGxheWVyVHJlZVZpZXdTZXR0aW5ncy5z
aG93UGxhdGZvcm1MYXllclRyZWUgPSBzZXR0aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUo
KTsKKyAgICAgICAgbGF5ZXJUcmVlVmlld1NldHRpbmdzLnJlZnJlc2hSYXRlID0gc2NyZWVuUmVm
cmVzaFJhdGUocGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpKTsKIAotICAgICAgICBBU1NFUlQo
Y2NTZXR0aW5ncy5yZWZyZXNoUmF0ZSA+PSAwKTsKLSAgICAgICAgaWYgKCFjY1NldHRpbmdzLnJl
ZnJlc2hSYXRlKQotICAgICAgICAgICAgY2NTZXR0aW5ncy5yZWZyZXNoUmF0ZSA9IGRlZmF1bHRS
ZWZyZXNoUmF0ZTsKKyAgICAgICAgQVNTRVJUKGxheWVyVHJlZVZpZXdTZXR0aW5ncy5yZWZyZXNo
UmF0ZSA+PSAwKTsKKyAgICAgICAgaWYgKCFsYXllclRyZWVWaWV3U2V0dGluZ3MucmVmcmVzaFJh
dGUpCisgICAgICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3MucmVmcmVzaFJhdGUgPSBkZWZh
dWx0UmVmcmVzaFJhdGU7CiAKLSAgICAgICAgY2NTZXR0aW5ncy5wZXJUaWxlUGFpbnRpbmcgPSBw
YWdlKCktPnNldHRpbmdzKCktPnBlclRpbGVEcmF3aW5nRW5hYmxlZCgpOwotICAgICAgICBjY1Nl
dHRpbmdzLnBhcnRpYWxTd2FwRW5hYmxlZCA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+cGFydGlhbFN3
YXBFbmFibGVkKCk7CisgICAgICAgIGxheWVyVHJlZVZpZXdTZXR0aW5ncy5wZXJUaWxlUGFpbnRp
bmcgPSBwYWdlKCktPnNldHRpbmdzKCktPnBlclRpbGVEcmF3aW5nRW5hYmxlZCgpOworICAgICAg
ICBsYXllclRyZWVWaWV3U2V0dGluZ3MucGFydGlhbFN3YXBFbmFibGVkID0gcGFnZSgpLT5zZXR0
aW5ncygpLT5wYXJ0aWFsU3dhcEVuYWJsZWQoKTsKIAogICAgICAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdCA9IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRlKFdlYlZpZXdJbXBs
Q29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSk7CiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LT5zZXRTaG93RGVidWdCb3JkZXJzKHBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd0Rl
YnVnQm9yZGVycygpKTsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0ID0gQ0NMYXllclRyZWVIb3N0
OjpjcmVhdGUodGhpcywgY2NTZXR0aW5ncyk7Ci0gICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3Qp
IHsKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0SGF2ZVdoZWVsRXZlbnRIYW5kbGVy
cyhtX2hhdmVXaGVlbEV2ZW50SGFuZGxlcnMpOwotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5zZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMobV9taW5pbXVtUGFnZVNjYWxlRmFjdG9yLCBtX21h
eGltdW1QYWdlU2NhbGVGYWN0b3IpOworICAgICAgICBtX2xheWVyVHJlZVZpZXcuaW5pdGlhbGl6
ZSh0aGlzLCBtX3Jvb3RMYXllciwgbGF5ZXJUcmVlVmlld1NldHRpbmdzKTsKKyAgICAgICAgaWYg
KCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlVmll
dy5zZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKG1faGF2ZVdoZWVsRXZlbnRIYW5kbGVycyk7Cisg
ICAgICAgICAgICBtX2xheWVyVHJlZVZpZXcuc2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKG1fbWlu
aW11bVBhZ2VTY2FsZUZhY3RvciwgbV9tYXhpbXVtUGFnZVNjYWxlRmFjdG9yKTsKICAgICAgICAg
ICAgIHVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7Ci0gICAgICAgICAgICBtX2NsaWVudC0+ZGlk
QWN0aXZhdGVDb21wb3NpdG9yKG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRvcklkZW50aWZpZXIo
KSk7CisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVDb21wb3NpdG9yKG1fbGF5ZXJU
cmVlVmlldy5jb21wb3NpdG9ySWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIG1faXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgIG1fY29tcG9zaXRvckNy
ZWF0aW9uRmFpbGVkID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAobV9wYWdlT3ZlcmxheXMpCiAg
ICAgICAgICAgICAgICAgbV9wYWdlT3ZlcmxheXMtPnVwZGF0ZSgpOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LmNsZWFyKCk7CiAgICAgICAgICAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jbGVhcigpOwogICAgICAgICAgICAgbV9pc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRE
ZWFjdGl2YXRlQ29tcG9zaXRvcigpOwpAQCAtMzAzMSwxOSArMzAyOSwyMSBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAK
ICNlbmRpZgogCi1QYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBXZWJWaWV3SW1wbDo6Y3Jl
YXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpCitXZWJHcmFwaGljc0NvbnRleHQzRCogV2ViVmll
d0ltcGw6OmNyZWF0ZUNvbnRleHQzRCgpCiB7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0ID0gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNELnJlbGVhc2Uo
KTsKLSAgICBpZiAoIWNvbnRleHQpIHsKKyAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogd2ViQ29u
dGV4dCA9IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5sZWFrUHRyKCk7Cisg
ICAgaWYgKCF3ZWJDb250ZXh0KSB7CisgICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dDsKICAgICAgICAgaWYgKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSkKICAgICAgICAg
ICAgIGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29u
dGV4dEZvckFub3RoZXJUaHJlYWQoZ2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1f
cGFnZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbnRleHQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlKGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNo
cm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwor
ICAgICAgICB3ZWJDb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2Vi
R3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5yZWxlYXNlKCkubGVha1JlZigpKTsKICAgICB9Ci0g
ICAgcmV0dXJuIGNvbnRleHQ7CisgICAgcmV0dXJuIHdlYkNvbnRleHQ7CiB9CiAKLXZvaWQgV2Vi
Vmlld0ltcGw6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEs
IGZsb2F0IHBhZ2VTY2FsZURlbHRhKQordm9pZCBXZWJWaWV3SW1wbDo6YXBwbHlTY3JvbGxBbmRT
Y2FsZShjb25zdCBXZWJTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFnZVNjYWxlRGVsdGEpCiB7
CiAgICAgaWYgKCFtYWluRnJhbWVJbXBsKCkgfHwgIW1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMwNTYsOCArMzA1Niw4IEBAIHZvaWQgV2ViVmlld0lt
cGw6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0
IHBhZ2VTY2FsCiAgICAgICAgIC8vIGluIHRoZSBvbGQgY29vcmRpbmF0ZSBzcGFjZSwgc28gd2Ug
Zmlyc3QgbmVlZCB0byBtdWx0aXBseSB0aGVtCiAgICAgICAgIC8vIGJ5IHRoZSBwYWdlIHNjYWxl
IGRlbHRhLgogICAgICAgICBXZWJTaXplIHNjcm9sbE9mZnNldCA9IG1haW5GcmFtZSgpLT5zY3Jv
bGxPZmZzZXQoKTsKLSAgICAgICAgc2Nyb2xsT2Zmc2V0LndpZHRoICs9IHNjcm9sbERlbHRhLndp
ZHRoKCk7Ci0gICAgICAgIHNjcm9sbE9mZnNldC5oZWlnaHQgKz0gc2Nyb2xsRGVsdGEuaGVpZ2h0
KCk7CisgICAgICAgIHNjcm9sbE9mZnNldC53aWR0aCArPSBzY3JvbGxEZWx0YS53aWR0aDsKKyAg
ICAgICAgc2Nyb2xsT2Zmc2V0LmhlaWdodCArPSBzY3JvbGxEZWx0YS5oZWlnaHQ7CiAgICAgICAg
IFdlYlBvaW50IHNjYWxlZFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQud2lkdGggKiBwYWdlU2Nh
bGVEZWx0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbE9mZnNl
dC5oZWlnaHQgKiBwYWdlU2NhbGVEZWx0YSk7CiAgICAgICAgIHNldFBhZ2VTY2FsZUZhY3Rvcihw
YWdlU2NhbGVGYWN0b3IoKSAqIHBhZ2VTY2FsZURlbHRhLCBzY2FsZWRTY3JvbGxPZmZzZXQpOwpA
QCAtMzA3Niw3ICszMDc2LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZGlkQ29tcGxldGVTd2FwQnVm
ZmVycygpCiAgICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCk7CiB9CiAK
LXZvaWQgV2ViVmlld0ltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2Vz
cykKK3ZvaWQgV2ViVmlld0ltcGw6OmRpZFJlYmluZEdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nl
c3MpCiB7CiAKICAgICAvLyBTd2l0Y2ggYmFjayB0byBzb2Z0d2FyZSByZW5kZXJpbmcgbW9kZSwg
aWYgbmVjZXNzYXJ5CkBAIC0zMTAzLDcgKzMxMDMsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzY2hl
ZHVsZUNvbXBvc2l0ZSgpCiAKIHZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyVHJlZVZpZXdw
b3J0KCkKIHsKLSAgICBpZiAoIXBhZ2UoKSB8fCAhbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Qg
fHwgIW1fbGF5ZXJUcmVlSG9zdCkKKyAgICBpZiAoIXBhZ2UoKSB8fCAhbV9ub25Db21wb3NpdGVk
Q29udGVudEhvc3QgfHwgbV9sYXllclRyZWVWaWV3LmlzTnVsbCgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7CkBA
IC0zMTE5LDMwICszMTE5LDMxIEBAIHZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyVHJlZVZp
ZXdwb3J0KCkKICAgICAgICAgbGF5ZXJBZGp1c3RYID0gLXZpZXctPmNvbnRlbnRzU2l6ZSgpLndp
ZHRoKCkgKyB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoZmFsc2UpLndpZHRoKCk7CiAgICAgfQog
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRWaWV3cG9ydCh2aXNpYmxlUmVjdC5z
aXplKCksIHZpZXctPmNvbnRlbnRzU2l6ZSgpLCBzY3JvbGwsIHBhZ2VTY2FsZUZhY3RvcigpLCBs
YXllckFkanVzdFgpOwotICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Vmlld3BvcnRTaXplKHZpc2li
bGVSZWN0LnNpemUoKSk7Ci0gICAgbV9sYXllclRyZWVIb3N0LT5zZXRQYWdlU2NhbGUocGFnZVNj
YWxlRmFjdG9yKCkpOworICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRWaWV3cG9ydFNpemUodmlzaWJs
ZVJlY3Quc2l6ZSgpKTsKKyAgICBtX2xheWVyVHJlZVZpZXcuc2V0UGFnZVNjYWxlKHBhZ2VTY2Fs
ZUZhY3RvcigpKTsKIH0KIAogV2ViR3JhcGhpY3NDb250ZXh0M0QqIFdlYlZpZXdJbXBsOjpncmFw
aGljc0NvbnRleHQzRCgpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
IGlmIChtX3BhZ2UtPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkg
JiYgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7Ci0gICAgICAgIGlmIChtX2xheWVy
VHJlZUhvc3QpIHsKLSAgICAgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiB3ZWJDb250ZXh0
ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0Qo
bV9sYXllclRyZWVIb3N0LT5jb250ZXh0KCkpOwotICAgICAgICAgICAgaWYgKHdlYkNvbnRleHQg
JiYgIXdlYkNvbnRleHQtPmlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
d2ViQ29udGV4dDsKKyAgICAgICAgaWYgKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpIHsKKyAg
ICAgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9sYXllclRyZWVWaWV3
LmNvbnRleHQoKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0ICYmICFjb250ZXh0LT5pc0NvbnRl
eHRMb3N0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRCkgewotICAgICAg
ICAgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIHdlYkNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChtX3RlbXBvcmFyeU9uc2NyZWVu
R3JhcGhpY3NDb250ZXh0M0QuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKHdlYkNvbnRleHQgJiYg
IXdlYkNvbnRleHQtPmlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gd2Vi
Q29udGV4dDsKKyAgICAgICAgICAgIGlmIChtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250
ZXh0M0QgJiYgIW1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC0+aXNDb250ZXh0
TG9zdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhp
Y3NDb250ZXh0M0QuZ2V0KCk7CiAgICAgICAgIH0KKyAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0OwogICAgICAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQot
ICAgICAgICAgICAgbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNEID0gR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGb3JBbm90aGVyVGhyZWFk
KGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFw
aGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgICAgICAgICAg
Y29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0
Rm9yQW5vdGhlclRocmVhZChnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdl
LT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNz
Q29udGV4dDNEID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShnZXRDb21wb3NpdG9yQ29udGV4
dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
ckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICAgICAgICAgIGNvbnRleHQgPSBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlKGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2Ut
PmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cp
OwogCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJH
cmFwaGljc0NvbnRleHQzRChtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QuZ2V0
KCkpOworICAgICAgICBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QgPSBhZG9w
dFB0cihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQz
RChjb250ZXh0LnJlbGVhc2UoKS5sZWFrUmVmKCkpKTsKKyAgICAgICAgcmV0dXJuIG1fdGVtcG9y
YXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5nZXQoKTsKICAgICB9CiAjZW5kaWYKICAgICBy
ZXR1cm4gMDsKQEAgLTMxNjUsNyArMzE2Niw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldFZpc2li
aWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0ZSwKICAgICAg
ICAgYm9vbCB2aXNpYmxlID0gdmlzaWJpbGl0eVN0YXRlID09IFdlYlBhZ2VWaXNpYmlsaXR5U3Rh
dGVWaXNpYmxlOwogICAgICAgICBpZiAoIXZpc2libGUpCiAgICAgICAgICAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC0+cHJvdGVjdFZpc2libGVUaWxlVGV4dHVyZXMoKTsKLSAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5zZXRWaXNpYmxlKHZpc2libGUpOworICAgICAgICBtX2xheWVyVHJl
ZVZpZXcuc2V0VmlzaWJsZSh2aXNpYmxlKTsKICAgICB9CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IDZlYTE5NmE3NWJiYzM5OWE0MjczNTMz
MWQxZDBlZTllZWExM2I5MTYuLjgwMjgyMDM5NmY4MTBlNmZmMWVlYTgwOTQ3OGZiNmNhMTk3OTBi
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMzIsNiAr
MzIsOSBAQAogI2RlZmluZSBXZWJWaWV3SW1wbF9oCiAKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9u
UG9saWN5LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXIuaCIKKyNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJMYXllclRyZWVWaWV3LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJUcmVl
Vmlld0NsaWVudC5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBvaW50LmgiCiAjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViUmVjdC5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlNpemUuaCIKQEAgLTQ5
LDcgKzUyLDYgQEAKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgiCiAjaW5j
bHVkZSAiUGFnZU92ZXJsYXlMaXN0LmgiCiAjaW5jbHVkZSAiVXNlck1lZGlhQ2xpZW50SW1wbC5o
IgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC05Niw3ICs5OCw3IEBAIGNsYXNz
IFdlYk1vdXNlV2hlZWxFdmVudDsKIGNsYXNzIFdlYlNldHRpbmdzSW1wbDsKIGNsYXNzIFdlYlRv
dWNoRXZlbnQ7CiAKLWNsYXNzIFdlYlZpZXdJbXBsIDogcHVibGljIFdlYlZpZXcsIHB1YmxpYyBX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDbGllbnQsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXdJ
bXBsPiB7CitjbGFzcyBXZWJWaWV3SW1wbCA6IHB1YmxpYyBXZWJWaWV3LCBwdWJsaWMgV2ViTGF5
ZXJUcmVlVmlld0NsaWVudCwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKIHB1Ymxp
YzoKICAgICAvLyBXZWJXaWRnZXQgbWV0aG9kczoKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsK
QEAgLTI0MCwxMyArMjQyLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWRkUGFnZU92
ZXJsYXkoV2ViUGFnZU92ZXJsYXkqLCBpbnQgLyogek9yZGVyICovKTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXkqKTsKIAotICAgIC8vIENDTGF5ZXJU
cmVlSG9zdENsaWVudAorICAgIC8vIFdlYkxheWVyVHJlZVZpZXdDbGllbnQKICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgZnJhbWVCZWdpblRpbWUpOwotICAgIHZpcnR1
YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBmbG9h
dCk7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEPiBj
cmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Ny
b2xsQW5kU2NhbGUoY29uc3QgV2ViU2l6ZSYsIGZsb2F0KTsKKyAgICB2aXJ0dWFsIFdlYkdyYXBo
aWNzQ29udGV4dDNEKiBjcmVhdGVDb250ZXh0M0QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVi
aW5kR3JhcGhpY3NDb250ZXh0KGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmRE
cmF3RnJhbWUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpOwot
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3Mp
OwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpOwogCiAgICAgLy8gV2ViVmll
d0ltcGwKQEAgLTQyNSw3ICs0MjcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxvd3NBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCk7CiAgICAgYm9vbCBwYWdlSGFzUlRMU3R5bGUoKSBjb25zdDsKICAg
ICB2b2lkIHNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAg
ICB2b2lkIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOworICAgIHZvaWQgc2NoZWR1bGVDb21w
b3NpdGluZ0xheWVyU3luYygpOwogICAgIHZvaWQgc2Nyb2xsUm9vdExheWVyUmVjdChjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xp
cFJlY3QpOwogICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOwogICAgIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCogbm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0KCk7CkBAIC02NTUsNyArNjU3LDggQEAgcHJpdmF0ZToKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Jvb3RMYXllclNjcm9s
bERhbWFnZTsKICAgICBPd25QdHI8Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0PiBtX25vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0PiBt
X2xheWVyVHJlZUhvc3Q7CisgICAgV2ViTGF5ZXJUcmVlVmlldyBtX2xheWVyVHJlZVZpZXc7Cisg
ICAgV2ViTGF5ZXIgbV9yb290TGF5ZXI7CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV9y
b290R3JhcGhpY3NMYXllcjsKICAgICBib29sIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0
aXZlOwogICAgIGJvb2wgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQ7CkBAIC02NzEsNyArNjc0
LDcgQEAgcHJpdmF0ZToKICAgICAvLyBJZiB3ZSBhdHRlbXB0IHRvIGZldGNoIHRoZSBvbi1zY3Jl
ZW4gR3JhcGhpY3NDb250ZXh0M0QgYmVmb3JlCiAgICAgLy8gdGhlIGNvbXBvc2l0b3IgaGFzIGJl
ZW4gdHVybmVkIG9uLCB3ZSBuZWVkIHRvIGluc3RhbnRpYXRlIGl0CiAgICAgLy8gZWFybHkuIFRo
aXMgbWVtYmVyIGhvbGRzIG9uIHRvIHRoZSBHQzNEIGluIHRoaXMgY2FzZS4KLSAgICBSZWZQdHI8
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q+IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0Nv
bnRleHQzRDsKKyAgICBPd25QdHI8V2ViR3JhcGhpY3NDb250ZXh0M0Q+IG1fdGVtcG9yYXJ5T25z
Y3JlZW5HcmFwaGljc0NvbnRleHQzRDsKICAgICBPd25QdHI8RGV2aWNlT3JpZW50YXRpb25DbGll
bnRQcm94eT4gbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5OwogICAgIE93blB0cjxHZW9s
b2NhdGlvbkNsaWVudFByb3h5PiBtX2dlb2xvY2F0aW9uQ2xpZW50UHJveHk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViTGF5ZXJUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViTGF5ZXJUZXN0LmNwcAppbmRleCBlMGNhYjg3YmRm
NTViYTI4ZmI3MjY2NzA5NjgyNmIyZDAzYzY3YzQ2Li4xZWVkODFhZWE0MTZjOTBiMTRlZWVlYzRh
M2Q3MjgxNmVkMWVlM2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1dlYkxheWVyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJM
YXllclRlc3QuY3BwCkBAIC01Nyw2ICs1Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
YXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBXZWJTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgc2Nh
bGVGYWN0b3IpIHsgfQogICAgIHZpcnR1YWwgV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNyZWF0ZUNv
bnRleHQzRCgpIHsgcmV0dXJuIENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZShXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcygpKS5sZWFrUHRyKCk7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmViaW5kR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkgeyB9CiB9OwogCiBjbGFzcyBNb2NrV2Vi
Q29udGVudExheWVyQ2xpZW50IDogcHVibGljIFdlYkNvbnRlbnRMYXllckNsaWVudCB7CkBAIC03
Miw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgV2ViS2l0OjpXZWJDb21wb3NpdG9yOjppbml0
aWFsaXplKDApOwogICAgICAgICBtX3Jvb3RMYXllciA9IFdlYkxheWVyOjpjcmVhdGUoKTsKICAg
ICAgICAgRVhQRUNUX0NBTEwobV9jbGllbnQsIHNjaGVkdWxlQ29tcG9zaXRlKCkpLlRpbWVzKEFu
eU51bWJlcigpKTsKLSAgICAgICAgbV92aWV3ID0gV2ViTGF5ZXJUcmVlVmlldzo6Y3JlYXRlKCZt
X2NsaWVudCwgbV9yb290TGF5ZXIsIFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzKCkpOworICAg
ICAgICBFWFBFQ1RfVFJVRShtX3ZpZXcuaW5pdGlhbGl6ZSgmbV9jbGllbnQsIG1fcm9vdExheWVy
LCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncygpKSk7CiAgICAgICAgIE1vY2s6OlZlcmlmeUFu
ZENsZWFyRXhwZWN0YXRpb25zKCZtX2NsaWVudCk7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126179</attachid>
            <date>2012-02-08 16:16:48 -0800</date>
            <delta_ts>2012-02-23 16:45:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75591-20120208161647.patch</filename>
            <type>text/plain</type>
            <size>38901</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGFjZWRiYWQ0ZjBlZGRhN2ZjZWY3NDE2MDVkMDA1OGIzZWY4ZmIwYmYuLjZhYjcxM2FhZTVlNDk4
ZDk5NDZlMTU4YjhhY2Y2NGMzNTAzZjA3NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNzUgQEAKKzIwMTItMDItMDggIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1ha2UgV2ViVmlld0ltcGwgZGVwZW5kIG9u
IFdlYkxheWVyVHJlZVZpZXcgaW5zdGVhZCBvZiBDQ0xheWVyVHJlZUhvc3QKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTkxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjb252ZXJ0cyBXZWJWaWV3
SW1wbCBmcm9tIGRlcGVuZGluZyBvbiBDQ0xheWVyVHJlZUhvc3QgdG8gV2ViTGF5ZXJUcmVlVmll
dyBpbiBvcmRlciB0byBwcm92aWRlIGJldHRlcgorICAgICAgICBpc29sYXRpb24gYW5kIGFsbG93
IGZvciBmdXR1cmUgcmVmYWN0b3JpbmdzLiBUaGUgY2hhbmdlcyB0byBXZWJWaWV3SW1wbCBhcmUg
bW9zdGx5IG1lY2hhbmljYWwuIFRoZQorICAgICAgICBXZWJMYXllclRyZWVWaWV3IGFuZCBXZWJM
YXllclRyZWVWaWV3Q2xpZW50IGludGVyZmFjZXMgaGF2ZSBib3RoIGdyb3duIGFuZCBjaGFuZ2Vk
IHNsaWdodGx5OgorCisgICAgICAgIC0gU2V0dXAgcGF0aCBmb3IgV2ViTGF5ZXJUcmVlVmlldyBj
aGFuZ2VkIHRvIGV4cG9zZSBhbiBpbml0aWFsaXplKCkgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIGNy
ZWF0ZSgpIGZhY3RvcnkKKyAgICAgICAgZnVuY3Rpb24uIFRoZSBuZXcgbW9kZWwgaXMgdGhhdCBh
IFdlYkxheWVyVHJlZVZpZXcgd2hlbiBjb25zdHJ1Y3RlZCBpcyBpbiBhIG51bGwgc3RhdGUuIENh
bGxpbmcgaW5pdGlhbGl6ZSgpCisgICAgICAgIGF0dGVtcHRzIHRvIHJlLWluaXRpYWxpemUgdGhl
IFdMVFYsIHdoaWNoIGNhbiBlaXRoZXIgZmFpbCBvciBzdWNjZWVkLiAgQWxsIG90aGVyIGZ1bmN0
aW9ucyBtdXN0IGJlIGNhbGxlZCBvbiBhCisgICAgICAgIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXpl
ZCB2aWV3LgorCisgICAgICAgIC0gV2ViTGF5ZXJUcmVlVmlldyBleHBhbmRlZCB0byBpbmNsdWRl
IGZ1bmN0aW9uYWxpdHkgdGhhdCBDQ0xheWVyVHJlZUhvc3QgZXhwb3NlcyBidXQgV2ViTGF5ZXJU
cmVlVmlldyBkaWQgbm90LgorICAgICAgICBTb21lIG9mIHRoaXMgaXMgb25seSB2YWxpZCBmb3Ig
dGhlIHNpbmdsZSB0aHJlYWQgY2FzZSBhbmQgd2lsbCBiZSByZW1vdmVkIHdoZW4gd2UgaW52ZXJ0
IHRoZSBzY2hlZHVsaW5nIGNvbnRyb2wKKyAgICAgICAgbG9naWMsIHRoZXNlIGJpdHMgYXJlIGNv
bW1lbnRlZC4KKworICAgICAgICAtIFdlYkxheWVyVHJlZVZpZXdDbGllbnQgZXhwYW5kZWQgd2l0
aCBzb21lIGZsb3ctY29udHJvbCByZWxhdGVkIEFQSXMuCisKKyAgICAgICAgUmVmYWN0b3Igb25s
eSwgbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dl
YkxheWVyVHJlZVZpZXcuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6U2V0
dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6aXNO
dWxsKToKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5o
OgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Q2hyb21lQ2xpZW50SW1wbDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYyk6CisgICAgICAg
ICogc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRy
ZWVWaWV3Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6
c2V0SGF2ZVdoZWVsRXZlbnRIYW5kbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJl
ZVZpZXc6OmNvbXBvc2l0b3JJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlVmlldzo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6
OnNldE5lZWRzQW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnVw
ZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3OjpzZXRO
ZWVkc1JlZHJhdyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnNldFBhZ2VT
Y2FsZUZhY3RvckxpbWl0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnNl
dFBhZ2VTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmZpbmlzaEFs
bFJlbmRlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OmNvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3Ojpsb3NlQ29tcG9zaXRvckNvbnRl
eHQpOgorICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXdJbXBsOjpkaWRDb21taXRBbmREcmF3
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkQ29tcGxl
dGVTd2FwQnVmZmVycyk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6Om51bWJlck9mV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphbmltYXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNv
bXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpsb3NlQ29tcG9zaXRvckNv
bnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcHV0ZVBhZ2VTY2FsZUZh
Y3RvckxpbWl0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphZGRQYWdlT3Zlcmxh
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVQYWdlT3ZlcmxheSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFJvb3RMYXllclJlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZUNvbnRleHQzRCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjphcHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlld0ltcGw6OmRpZFJlYmluZEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVMYXllclRyZWVWaWV3cG9ydCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjpncmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpzZXRWaXNpYmlsaXR5U3RhdGUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5oOgorICAgICAgICAqIHRlc3RzL1dlYkxheWVyVGVzdC5jcHA6CisKIDIwMTItMDItMDgg
IFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9t
aXVtXSBSZW1vdmUgaW5jb3JyZWN0IGVhcmx5IGV4aXQgaW4gQ0NEYW1hZ2VUcmFja2VyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRy
ZWVWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXll
clRyZWVWaWV3LmgKaW5kZXggMDI2M2IzOTI2OGFkY2VlMTBmODM1NzQyNDQ3MWQ3ZWZkNDM4YTFj
NC4uYTk1MjgwODY1ZTNkZjYyNWFkMzAzNWE3MmJlOTJmZWFkZDFlZDZmMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlldy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkxheWVyVHJl
ZVZpZXcuaApAQCAtMzUsNiArMzUsNyBAQCBzdHJ1Y3QgQ0NTZXR0aW5nczsKIH0KIAogbmFtZXNw
YWNlIFdlYktpdCB7CitjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFdlYkxheWVy
OwogY2xhc3MgV2ViTGF5ZXJUcmVlVmlld0NsaWVudDsKIHN0cnVjdCBXZWJSZWN0OwpAQCAtNDks
MjEgKzUwLDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICwgc2hvd0ZQU0NvdW50ZXIoZmFsc2Up
CiAgICAgICAgICAgICAsIHNob3dQbGF0Zm9ybUxheWVyVHJlZShmYWxzZSkKICAgICAgICAgICAg
ICwgcmVmcmVzaFJhdGUoMCkKLSAgICAgICAgICAgICwgcGFydGlhbFN3YXBFbmFibGVkKGZhbHNl
KSB7IH0KKyAgICAgICAgICAgICwgcGVyVGlsZVBhaW50aW5nKGZhbHNlKQorICAgICAgICAgICAg
LCBwYXJ0aWFsU3dhcEVuYWJsZWQoZmFsc2UpCisgICAgICAgICAgICB7IH0KIAogICAgICAgICBi
b29sIGFjY2VsZXJhdGVQYWludGluZzsKICAgICAgICAgYm9vbCBjb21wb3NpdGVPZmZzY3JlZW47
CiAgICAgICAgIGJvb2wgc2hvd0ZQU0NvdW50ZXI7CiAgICAgICAgIGJvb2wgc2hvd1BsYXRmb3Jt
TGF5ZXJUcmVlOwogICAgICAgICBkb3VibGUgcmVmcmVzaFJhdGU7CisgICAgICAgIGJvb2wgcGVy
VGlsZVBhaW50aW5nOwogICAgICAgICBib29sIHBhcnRpYWxTd2FwRW5hYmxlZDsKICNpZiBXRUJL
SVRfSU1QTEVNRU5UQVRJT04KICAgICAgICAgb3BlcmF0b3IgV2ViQ29yZTo6Q0NTZXR0aW5ncygp
IGNvbnN0OwogI2VuZGlmCiAgICAgfTsKIAotICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYkxh
eWVyVHJlZVZpZXcgY3JlYXRlKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqLCBjb25zdCBXZWJMYXll
ciYgcm9vdCwgY29uc3QgU2V0dGluZ3MmKTsKLQogICAgIFdlYkxheWVyVHJlZVZpZXcoKSB7IH0K
ICAgICBXZWJMYXllclRyZWVWaWV3KGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmIGxheWVyKSB7IGFz
c2lnbihsYXllcik7IH0KICAgICB+V2ViTGF5ZXJUcmVlVmlldygpIHsgcmVzZXQoKTsgfQpAQCAt
NzIsMTAgKzc0LDU1IEBAIHB1YmxpYzoKICAgICAgICAgYXNzaWduKGxheWVyKTsKICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgIH0KKwogICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwog
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYpOwog
ICAgIFdFQktJVF9FWFBPUlQgYm9vbCBlcXVhbHMoY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYpIGNv
bnN0OwogCisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGUuaXNOdWxs
KCk7IH0KKworI2RlZmluZSBXRUJMQVlFUlRSRUVWSUVXX0hBU19JTklUSUFMSVpFCisgICAgLy8g
SW5pdGlhbGl6YXRpb24gYW5kIGxpZmVjeWNsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisgICAgLy8gQXR0ZW1wdHMgdG8gaW5pdGlhbGl6ZSB0aGlzIFdlYkxheWVy
VHJlZVZpZXcgd2l0aCB0aGUgZ2l2ZW4gY2xpZW50LCByb290IGxheWVyLCBhbmQgc2V0dGluZ3Mu
CisgICAgLy8gSWYgaW5pdGlhbGl6YXRpb24gZmFpbHMsIHRoaXMgd2lsbCByZXR1cm4gZmFsc2Ug
YW5kIC5pc051bGwoKSB3aWxsIHJldHVybiB0cnVlLgorICAgIC8vIE11c3QgYmUgY2FsbGVkIGJl
Zm9yZSBhbnkgbWV0aG9kcyBiZWxvdy4KKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaW5pdGlhbGl6
ZShXZWJMYXllclRyZWVWaWV3Q2xpZW50KiwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFNl
dHRpbmdzJik7CisKKyAgICAvLyBTZXRzIHRoZSByb290IG9mIHRoZSB0cmVlLiBUaGUgcm9vdCBp
cyBzZXQgYnkgd2F5IG9mIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAvLyBUaGlzIGlzIHR5cGljYWxs
eSB1c2VkIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSByb290IHRvIG51bGwgdG8gYnJlYWsKKyAgICAv
LyBjeWNsZXMuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFJvb3RMYXllcihXZWJMYXllciop
OworCisgICAgLy8gUmV0dXJucyBhIHVuaXF1ZSBpZGVudGlmaWVyIHRoYXQgY2FuIGJlIHVzZWQg
b24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkIHRvIHJlcXVlc3QgYQorICAgIC8vIFdlYkNvbXBvc2l0
b3JJbnB1dEhhbmRsZXIgaW5zdGFuY2UuCisgICAgV0VCS0lUX0VYUE9SVCBpbnQgY29tcG9zaXRv
cklkZW50aWZpZXIoKTsKKworCisgICAgLy8gVmlldyBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIHNldFZpZXdwb3J0U2l6ZShjb25zdCBXZWJTaXplJik7CisgICAgV0VCS0lUX0VYUE9S
VCBXZWJTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0OworCisgICAgLy8gU2V0cyB3aGV0aGVyIHRo
aXMgdmlldyBpcyB2aXNpYmxlLiBJbiB0aHJlYWRlZCBtb2RlLCBhIHZpZXcgdGhhdCBpcyBub3Qg
dmlzaWJsZSB3aWxsIG5vdAorICAgIC8vIGNvbXBvc2l0ZSBvciB0cmlnZ2VyIHVwZGF0ZUFuaW1h
dGlvbnMoKSBvciBsYXlvdXQoKSBjYWxscyB1bnRpbCBpdCBiZWNvbWVzIHZpc2libGUuCisgICAg
V0VCS0lUX0VYUE9SVCB2b2lkIHNldFZpc2libGUoYm9vbCk7CisKKyAgICAvLyBTZXRzIHRoZSBj
dXJyZW50IHBhZ2Ugc2NhbGUgZmFjdG9yLiBUaGUgcGFnZSBzY2FsZSBmYWN0b3IgbGltaXRzIGFy
ZSBhcHBsaWVkIHRvIHRoaXMgdmFsdWUuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFBhZ2VT
Y2FsZShmbG9hdCk7CisKKyAgICAvLyBTZXRzIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHBhZ2Ug
c2NhbGUgZmFjdG9yLiBCb3RoIGxpbWl0cyBhcmUgaW5pdGlhbGx5IDEgKG5vIHBhZ2Ugc2NhbGUg
YWxsb3dlZCkuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFBhZ2VTY2FsZUZhY3RvckxpbWl0
cyhmbG9hdCBtaW5pbXVtLCBmbG9hdCBtYXhpbXVtKTsKKworCisgICAgLy8gRmxvdyBjb250cm9s
IGFuZCBzY2hlZHVsaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisgICAgLy8gUmVxdWVzdHMgYW4gdXBkYXRlQW5pbWF0aW9ucygpIGNhbGwuCisgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIHNldE5lZWRzQW5pbWF0ZSgpOworCisgICAgLy8gSW5kaWNhdGVzIHRoYXQg
dGhlIHZpZXcgbmVlZHMgdG8gYmUgcmVkcmF3bi4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB3aGVu
IHRoZSBmcm9udGJ1ZmZlciBpcyBkYW1hZ2VkLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRO
ZWVkc1JlZHJhdygpOworCiAgICAgLy8gVHJpZ2dlcnMgYSBjb21wb3NpdGluZyBwYXNzLiBJZiB0
aGUgY29tcG9zaXRvciB0aHJlYWQgd2FzIG5vdAogICAgIC8vIGVuYWJsZWQgdmlhIFdlYkNvbXBv
c2l0b3I6OmluaXRpYWxpemUsIHRoZSBjb21wb3NpdGluZyBwYXNzIGhhcHBlbnMKICAgICAvLyBp
bW1lZGlhdGVseS4gSWYgaXQgaXMgZW5hYmxlZCwgdGhlIGNvbXBvc2l0aW5nIHBhc3Mgd2lsbCBo
YXBwZW4gYXQgYQpAQCAtODUsOCArMTMyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBXZWJDb250ZW50
TGF5ZXJDbGllbnQ6OnBhaW50Q29udGVudHMuCiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGNvbXBv
c2l0ZSgpOwogCi0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFZpZXdwb3J0U2l6ZShjb25zdCBX
ZWJTaXplJik7Ci0gICAgV0VCS0lUX0VYUE9SVCBXZWJTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0
OworICAgIC8vIEltbWVkaWF0ZWx5IHVwZGF0ZSBhbmltYXRpb25zLiBUaGlzIHNob3VsZCBvbmx5
IGJlIHVzZWQgd2hlbiBmcmFtZSBzY2hlZHVsaW5nIGlzIGhhbmRsZWQgYnkKKyAgICAvLyB0aGUg
V2ViTGF5ZXJUcmVlVmlldyB1c2VyIGFuZCBub3QgaW50ZXJuYWxseSBieSB0aGUgY29tcG9zaXRv
ciwgbWVhbmluZyBvbmx5IGluIHNpbmdsZS10aHJlYWRlZAorICAgIC8vIG1vZGUuCisgICAgV0VC
S0lUX0VYUE9SVCB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsK
IAogICAgIC8vIENvbXBvc2l0ZXMgYW5kIGF0dGVtcHRzIHRvIHJlYWQgYmFjayB0aGUgcmVzdWx0
IGludG8gdGhlIHByb3ZpZGVkCiAgICAgLy8gYnVmZmVyLiBJZiBpdCB3YXNuJ3QgcG9zc2libGUs
IGUuZy4gZHVlIHRvIGNvbnRleHQgbG9zdCwgd2lsbCByZXR1cm4KQEAgLTk2LDE2ICsxNDUsMjcg
QEAgcHVibGljOgogICAgIC8vIFRoZSBidWZmZXIgaXMgbm90IG1vZGlmaWVkIGlmIHRoZSBmYWxz
ZSBpcyByZXR1cm5lZC4KICAgICBXRUJLSVRfRVhQT1JUIGJvb2wgY29tcG9zaXRlQW5kUmVhZGJh
Y2sodm9pZCAqcGl4ZWxzLCBjb25zdCBXZWJSZWN0Jik7CiAKLSAgICAvLyBTZXRzIHRoZSByb290
IG9mIHRoZSB0cmVlLiBUaGUgcm9vdCBpcyBzZXQgYnkgd2F5IG9mIHRoZSBjb25zdHJ1Y3Rvci4K
LSAgICAvLyBUaGlzIGlzIHR5cGljYWxseSB1c2VkIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSByb290
IHRvIG51bGwgdG8gYnJlYWsKLSAgICAvLyBjeWNsZXMuCi0gICAgV0VCS0lUX0VYUE9SVCB2b2lk
IHNldFJvb3RMYXllcihXZWJMYXllciopOworICAgIC8vIEJsb2NrcyB1bnRpbCB0aGUgbW9zdCBy
ZWNlbnRseSBjb21wb3NpdGVkIGZyYW1lIGhhcyBmaW5pc2hlZCByZW5kZXJpbmcgb24gdGhlIEdQ
VS4KKyAgICAvLyBUaGlzIGNhbiBoYXZlIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wYWN0
IGFuZCBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGZp
bmlzaEFsbFJlbmRlcmluZygpOwogCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV2Vi
TGF5ZXJUcmVlVmlldyhjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0PiYpOwotICAgIFdlYkxheWVyVHJlZVZpZXcmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0PiYpOwotICAgIG9wZXJhdG9yIFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+KCkgY29uc3Q7Ci0jZW5kaWYKKworICAg
IC8vIElucHV0IGhhbmRsaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworICAgIC8vIFNldHMgd2hldGhlciB0aGUgZW1iZWRkZXIgb2YgdGhp
cyB2aWV3IGhhcyBhbnkgbW91c2Ugd2hlZWwgZXZlbnQgaGFuZGxlcnMgcmVnaXN0ZXJlZC4KKyAg
ICAvLyBJZiBmYWxzZSwgdGhlbiB0aGUgY29tcG9zaXRvciBtYXkgaGFuZGxlIHdoZWVsIGV2ZW50
cyBpdHNlbGYuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEhhdmVXaGVlbEV2ZW50SGFuZGxl
cnMoYm9vbCk7CisKKworICAgIC8vIERlYnVnZ2luZyAvIGRhbmdlcm91cyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8vIFJldHVybnMgdGhlIGNv
bnRleHQgYmVpbmcgdXNlZCBmb3IgcmVuZGVyaW5nIHRoaXMgdmlldy4gSW4gdGhyZWFkZWQgY29t
cG9zaXRpbmcgbW9kZSwgaXQgaXMKKyAgICAvLyBub3Qgc2FmZSB0byB1c2UgdGhpcyBjb250ZXh0
IGF0IGFsbCBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIEFQ
SSBhcyBzb29uIGFzIHBvc3NpYmxlLCBpdCdzIHZlcnkgYnVnLXByb25lIGluIHRocmVhZGVkIG1v
ZGUuCisgICAgV0VCS0lUX0VYUE9SVCBXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOwor
CisgICAgLy8gU2ltdWxhdGVzIGEgbG9zdCBjb250ZXh0LiBGb3IgdGVzdGluZyBvbmx5LgorICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoaW50IG51bVRpbWVzKTsK
IAogcHJvdGVjdGVkOgogICAgIFdlYlByaXZhdGVQdHI8V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
PiBtX3ByaXZhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9w
bGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgKaW5kZXggOWM0ZGZiNzdi
NzcxMTRiMGVmNjdiMDE3YmZhNGJkMjIzYjNhYjZhNi4uNWMwYjllZjlhMmEyYzYxM2IxMTkwMGMx
M2Y4OThmMjI4MzliNDY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaApAQCAtNTIs
NiArNTIsOSBAQCBwdWJsaWM6CiAgICAgLy8gY29udGV4dCBldmVudCkuCiAgICAgdmlydHVhbCB2
b2lkIGRpZFJlYmluZEdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpID0gMDsKIAorICAgIHZp
cnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKSA9IDA7CisKICAgICAvLyBTY2hlZHVsZXMgYSBjb21w
b3NpdGluZyBwYXNzLCBtZWFuaW5nIHRoZSBjbGllbnQgc2hvdWxkIGNhbGwKICAgICAvLyBXZWJM
YXllclRyZWVWaWV3Ojpjb21wb3NpdGUgYXQgYSBsYXRlciB0aW1lLiBUaGlzIGlzIG9ubHkgY2Fs
bGVkIGlmIHRoZQogICAgIC8vIGNvbXBvc2l0b3IgdGhyZWFkIGlzIGRpc2FibGVkOyB3aGVuIGVu
YWJsZWQsIHRoZSBjb21wb3NpdG9yIHdpbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKaW5kZXggZmIwN2I0YzEwM2ZiMjc5YTI0YzRmMTY3OGVi
NTk4OGYzMjE3M2JhNi4uOTU2YzUyYTM3YmU1ODBjYzNlMmFmYWZkZTBlOWNiZDI3ZTE0NTNkNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAK
QEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lkIENocm9tZUNsaWVudEltcGw6OmF0dGFjaFJvb3RHcmFw
aGljc0xheWVyKEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NMYXllciogZ3JhcAogCiB2b2lkIENocm9t
ZUNsaWVudEltcGw6OnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKQogewotICAgIG1fd2Vi
Vmlldy0+c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CisgICAgbV93ZWJWaWV3LT5zY2hlZHVs
ZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCk7CiB9CiAKIENocm9tZUNsaWVudDo6Q29tcG9zaXRpbmdU
cmlnZ2VyRmxhZ3MgQ2hyb21lQ2xpZW50SW1wbDo6YWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMo
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJU
cmVlVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3
LmNwcAppbmRleCBiMjg4YjU2M2JlNjU0Y2FhNmFlMTE2ZTc2NWY3ZmY1MDNiYmRlODIwLi40OGUx
Njk4NjY5NDZhMDdhNDBiMjVkMjlmZGNkNzQwOGQxZWMwN2RiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcApAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXcu
aCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldl
YkxheWVyVHJlZVZpZXdJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAj
aW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXIuaCIKQEAgLTUxLDExICs1Miw2IEBAIFdlYkxheWVy
VHJlZVZpZXc6OlNldHRpbmdzOjpvcGVyYXRvciBDQ1NldHRpbmdzKCkgY29uc3QKICAgICByZXR1
cm4gc2V0dGluZ3M7CiB9CiAKLVdlYkxheWVyVHJlZVZpZXcgV2ViTGF5ZXJUcmVlVmlldzo6Y3Jl
YXRlKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqIGNsaWVudCwgY29uc3QgV2ViTGF5ZXImIHJvb3Qs
IGNvbnN0IFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzJiBzZXR0aW5ncykKLXsKLSAgICByZXR1
cm4gV2ViTGF5ZXJUcmVlVmlldyhXZWJMYXllclRyZWVWaWV3SW1wbDo6Y3JlYXRlKGNsaWVudCwg
cm9vdCwgc2V0dGluZ3MpKTsKLX0KLQogdm9pZCBXZWJMYXllclRyZWVWaWV3OjpyZXNldCgpCiB7
CiAgICAgbV9wcml2YXRlLnJlc2V0KCk7CkBAIC03MSwxNCArNjcsMjYgQEAgYm9vbCBXZWJMYXll
clRyZWVWaWV3OjplcXVhbHMoY29uc3QgV2ViTGF5ZXJUcmVlVmlldyYgbikgY29uc3QKICAgICBy
ZXR1cm4gKG1fcHJpdmF0ZS5nZXQoKSA9PSBuLm1fcHJpdmF0ZS5nZXQoKSk7CiB9CiAKLXZvaWQg
V2ViTGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRlKCkKK2Jvb2wgV2ViTGF5ZXJUcmVlVmlldzo6aW5p
dGlhbGl6ZShXZWJMYXllclRyZWVWaWV3Q2xpZW50KiBjbGllbnQsIGNvbnN0IFdlYkxheWVyJiBy
b290LCBjb25zdCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncyYgc2V0dGluZ3MpCiB7Ci0gICAg
aWYgKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSkKLSAgICAgICAgbV9wcml2YXRlLT5zZXROZWVk
c0NvbW1pdCgpOworICAgIG1fcHJpdmF0ZSA9IFdlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGUo
Y2xpZW50LCByb290LCBzZXR0aW5ncyk7CisgICAgcmV0dXJuICFpc051bGwoKTsKK30KKwordm9p
ZCBXZWJMYXllclRyZWVWaWV3OjpzZXRSb290TGF5ZXIoV2ViTGF5ZXIgKnJvb3QpCit7CisgICAg
aWYgKHJvb3QpCisgICAgICAgIG1fcHJpdmF0ZS0+c2V0Um9vdExheWVyKCpyb290KTsKICAgICBl
bHNlCi0gICAgICAgIG1fcHJpdmF0ZS0+Y29tcG9zaXRlKCk7CisgICAgICAgIG1fcHJpdmF0ZS0+
c2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4oKSk7Cit9CisKK2ludCBXZWJM
YXllclRyZWVWaWV3Ojpjb21wb3NpdG9ySWRlbnRpZmllcigpCit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+Y29tcG9zaXRvcklkZW50aWZpZXIoKTsKIH0KIAorCiB2b2lkIFdlYkxheWVyVHJlZVZp
ZXc6OnNldFZpZXdwb3J0U2l6ZShjb25zdCBXZWJTaXplJiB2aWV3cG9ydFNpemUpCiB7CiAgICAg
bV9wcml2YXRlLT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRTaXplKTsKQEAgLTg5LDMzICs5Nyw2
NyBAQCBXZWJTaXplIFdlYkxheWVyVHJlZVZpZXc6OnZpZXdwb3J0U2l6ZSgpIGNvbnN0CiAgICAg
cmV0dXJuIFdlYlNpemUobV9wcml2YXRlLT52aWV3cG9ydFNpemUoKSk7CiB9CiAKK3ZvaWQgV2Vi
TGF5ZXJUcmVlVmlldzo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgbV9wcml2YXRl
LT5zZXRWaXNpYmxlKHZpc2libGUpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnNldFBh
Z2VTY2FsZShmbG9hdCBwYWdlU2NhbGUpCit7CisgICAgbV9wcml2YXRlLT5zZXRQYWdlU2NhbGUo
cGFnZVNjYWxlKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3OjpzZXRQYWdlU2NhbGVGYWN0
b3JMaW1pdHMoZmxvYXQgbWluaW11bSwgZmxvYXQgbWF4aW11bSkKK3sKKyAgICBtX3ByaXZhdGUt
PnNldFBhZ2VTY2FsZUZhY3RvckxpbWl0cyhtaW5pbXVtLCBtYXhpbXVtKTsKK30KKwordm9pZCBX
ZWJMYXllclRyZWVWaWV3OjpzZXROZWVkc0FuaW1hdGUoKQoreworICAgIG1fcHJpdmF0ZS0+c2V0
TmVlZHNBbmltYXRlKCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6c2V0TmVlZHNSZWRy
YXcoKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TmVlZHNSZWRyYXcoKTsKK30KKwordm9pZCBXZWJM
YXllclRyZWVWaWV3Ojpjb21wb3NpdGUoKQoreworICAgIGlmIChDQ1Byb3h5OjpoYXNJbXBsVGhy
ZWFkKCkpCisgICAgICAgIG1fcHJpdmF0ZS0+c2V0TmVlZHNDb21taXQoKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fcHJpdmF0ZS0+Y29tcG9zaXRlKCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlVmll
dzo6dXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgbV9wcml2
YXRlLT51cGRhdGVBbmltYXRpb25zKGZyYW1lQmVnaW5UaW1lKTsKK30KKwogYm9vbCBXZWJMYXll
clRyZWVWaWV3Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IFdlYlJl
Y3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29tcG9zaXRlQW5kUmVhZGJhY2so
cGl4ZWxzLCByZWN0KTsKIH0KIAotdm9pZCBXZWJMYXllclRyZWVWaWV3OjpzZXRSb290TGF5ZXIo
V2ViTGF5ZXIgKnJvb3QpCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OmZpbmlzaEFsbFJlbmRlcmlu
ZygpCiB7Ci0gICAgaWYgKHJvb3QpCi0gICAgICAgIG1fcHJpdmF0ZS0+c2V0Um9vdExheWVyKCpy
b290KTsKLSAgICBlbHNlCi0gICAgICAgIG1fcHJpdmF0ZS0+c2V0Um9vdExheWVyKFBhc3NSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4oKSk7CisgICAgbV9wcml2YXRlLT5maW5pc2hBbGxSZW5kZXJpbmco
KTsKIH0KIAotV2ViTGF5ZXJUcmVlVmlldzo6V2ViTGF5ZXJUcmVlVmlldyhjb25zdCBQYXNzUmVm
UHRyPENDTGF5ZXJUcmVlSG9zdD4mIG5vZGUpCi0gICAgOiBtX3ByaXZhdGUobm9kZSkKK3ZvaWQg
V2ViTGF5ZXJUcmVlVmlldzo6c2V0SGF2ZVdoZWVsRXZlbnRIYW5kbGVycyhib29sIGhhdmVIYW5k
bGVycykKIHsKKyAgICBtX3ByaXZhdGUtPnNldEhhdmVXaGVlbEV2ZW50SGFuZGxlcnMoaGF2ZUhh
bmRsZXJzKTsKIH0KIAotV2ViTGF5ZXJUcmVlVmlldyYgV2ViTGF5ZXJUcmVlVmlldzo6b3BlcmF0
b3I9KGNvbnN0IFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiYgbm9kZSkKK1dlYkdyYXBoaWNz
Q29udGV4dDNEKiBXZWJMYXllclRyZWVWaWV3Ojpjb250ZXh0KCkKIHsKLSAgICBtX3ByaXZhdGUg
PSBub2RlOwotICAgIHJldHVybiAqdGhpczsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QobV9wcml2YXRlLT5jb250ZXh0KCkp
OwogfQogCi1XZWJMYXllclRyZWVWaWV3OjpvcGVyYXRvciBQYXNzUmVmUHRyPENDTGF5ZXJUcmVl
SG9zdD4oKSBjb25zdAordm9pZCBXZWJMYXllclRyZWVWaWV3Ojpsb3NlQ29tcG9zaXRvckNvbnRl
eHQoaW50IG51bVRpbWVzKQogewotICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7CisgICAgbV9w
cml2YXRlLT5sb3NlQ29tcG9zaXRvckNvbnRleHQobnVtVGltZXMpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxh
eWVyVHJlZVZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVy
VHJlZVZpZXdJbXBsLmNwcAppbmRleCA5ODE0NzcxMTg5YmY2OWQ3YzhkNTM0ODdjMjQ5YWYyMGMx
MDlkM2QxLi5lYWE3OGQ3ZjAyNjE0M2E3MDNmYmU4NjhiZjYwZGQ2MThkMGEyYWFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3Bw
CkBAIC0xMDMsMjAgKzEwMywyMiBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBXZWJM
YXllclRyZWVWaWV3SW1wbDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRAogICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJD
b250ZXh0KHdlYkNvbnRleHQucmVsZWFzZSgpLCBhdHRyaWJ1dGVzLCAwLCBzdHlsZSwgdXNhZ2Up
OwogfQogCi12b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjpkaWRDb21taXRBbmREcmF3RnJhbWUo
KQordm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQo
Ym9vbCBzdWNjZXNzKQogewotICAgIC8vIEZJWE1FOiByb3V0ZSB0aGlzIHVwIHRvIHRoZSBXZWJM
YXllclRyZWVWaWV3IGNsaWVudAorICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQt
PmRpZFJlYmluZEdyYXBoaWNzQ29udGV4dChzdWNjZXNzKTsKIH0KIAotdm9pZCBXZWJMYXllclRy
ZWVWaWV3SW1wbDo6ZGlkQ29tcGxldGVTd2FwQnVmZmVycygpCit2b2lkIFdlYkxheWVyVHJlZVZp
ZXdJbXBsOjpkaWRDb21taXRBbmREcmF3RnJhbWUoKQogewotICAgIC8vIEZJWE1FOiByb3V0ZSB0
aGlzIHVwIHRvIHRoZSBXZWJMYXllclRyZWVWaWV3IGNsaWVudAorICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgbV9jbGllbnQtPmRpZENvbW1pdEFuZERyYXdGcmFtZSgpOwogfQogCi12b2lkIFdl
YkxheWVyVHJlZVZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nl
c3MpCit2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjpkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkK
IHsKICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRSZWJpbmRHcmFwaGlj
c0NvbnRleHQoc3VjY2Vzcyk7CisgICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVN3YXBCdWZm
ZXJzKCk7CiB9CiAKIHZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRl
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBhMDVl
OTg5MjA3ZTM5MTczMzIxYTBlNzFjZjM2NDUzZDZhM2EzNWRkLi5hODA3NGNkMGE2NmM1YWY4MWY4
ZWEwOGFiM2MyYjBmYmI4NzlhYmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQXV0b2ZpbGxQb3B1cE1l
bnVDbGllbnQuaCIKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0Zv
cndhcmRMaXN0Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAi
Q1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNs
dWRlICJDaHJvbWUuaCIKQEAgLTEyNCw2ICsxMjUsOCBAQAogI2luY2x1ZGUgIldlYklucHV0RXZl
bnRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0v
V2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXIuaCIK
KyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3LmgiCiAjaW5jbHVkZSAiV2ViTWVk
aWFQbGF5ZXJBY3Rpb24uaCIKICNpbmNsdWRlICJXZWJOb2RlLmgiCiAjaW5jbHVkZSAiV2ViUGx1
Z2luLmgiCkBAIC0xMzgsNyArMTQxLDYgQEAKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcu
aCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIKICNpbmNsdWRlICJXZWJWaWV3Q2xp
ZW50LmgiCi0jaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXku
aD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgpAQCAtODAzLDggKzgwNSw4IEBAIHZvaWQgV2ViVmlld0ltcGw6Om51bWJlck9mV2hlZWxF
dmVudEhhbmRsZXJzQ2hhbmdlZCh1bnNpZ25lZCBudW1iZXJPZldoZWVsSGFuZGxlCiAgICAgaWYg
KG1fY2xpZW50KQogICAgICAgICBtX2NsaWVudC0+bnVtYmVyT2ZXaGVlbEV2ZW50SGFuZGxlcnND
aGFuZ2VkKG51bWJlck9mV2hlZWxIYW5kbGVycyk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+c2V0SGF2ZVdoZWVsRXZlbnRIYW5kbGVycyhtX2hhdmVXaGVlbEV2ZW50SGFuZGxlcnMpOwor
ICAgIGlmICghbV9sYXllclRyZWVWaWV3LmlzTnVsbCgpKQorICAgICAgICBtX2xheWVyVHJlZVZp
ZXcuc2V0SGF2ZVdoZWVsRXZlbnRIYW5kbGVycyhtX2hhdmVXaGVlbEV2ZW50SGFuZGxlcnMpOwog
I2VuZGlmCiB9CiAKQEAgLTExMjUsNyArMTEyNyw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmFuaW1h
dGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogICAgIC8vIEluIGNvbXBvc2l0ZWQgbW9kZSwgd2Ug
YWx3YXlzIGdvIHRocm91Z2ggdGhlIGNvbXBvc2l0b3Igc28gaXQgY2FuIGFwcGx5CiAgICAgLy8g
YXBwcm9wcmlhdGUgZmxvdy1jb250cm9sIG1lY2hhbmlzbXMuCiAgICAgaWYgKGlzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUFu
aW1hdGlvbnMoZnJhbWVCZWdpblRpbWUpOworICAgICAgICBtX2xheWVyVHJlZVZpZXcudXBkYXRl
QW5pbWF0aW9ucyhmcmFtZUJlZ2luVGltZSk7CiAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgIHVw
ZGF0ZUFuaW1hdGlvbnMoZnJhbWVCZWdpblRpbWUpOwpAQCAtMTE3Myw2ICsxMTc1LDcgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6bGF5b3V0KCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiB2b2lkIFdlYlZpZXdJbXBsOjpkb1BpeGVsUmVhZGJhY2tUb0NhbnZhcyhXZWJDYW52YXMqIGNh
bnZhcywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlVmll
dy5pc051bGwoKSk7CiAjaWYgVVNFKFNLSUEpCiAgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBjb250
ZXh0KGNhbnZhcyk7CiAKQEAgLTExOTEsNyArMTE5NCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRv
UGl4ZWxSZWFkYmFja1RvQ2FudmFzKFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBJbnRSZWN0JiBy
ZWN0CiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHJlY3Quc2l6ZSgpKSk7CiAgICAgUmVmUHRyPEJ5dGVBcnJheT4gcGl4ZWxBcnJheShCeXRl
QXJyYXk6OmNyZWF0ZShyZWN0LndpZHRoKCkgKiByZWN0LmhlaWdodCgpICogNCkpOwogICAgIGlm
IChpbWFnZUJ1ZmZlciAmJiBwaXhlbEFycmF5KSB7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
Y29tcG9zaXRlQW5kUmVhZGJhY2socGl4ZWxBcnJheS0+ZGF0YSgpLCBpbnZlcnRSZWN0KTsKKyAg
ICAgICAgbV9sYXllclRyZWVWaWV3LmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHBpeGVsQXJyYXktPmRh
dGEoKSwgaW52ZXJ0UmVjdCk7CiAgICAgICAgIGltYWdlQnVmZmVyLT5wdXRCeXRlQXJyYXkoUHJl
bXVsdGlwbGllZCwgcGl4ZWxBcnJheS5nZXQoKSwgcmVjdC5zaXplKCksIEludFJlY3QoSW50UG9p
bnQoKSwgcmVjdC5zaXplKCkpLCBJbnRQb2ludCgpKTsKICAgICAgICAgZ2Muc2F2ZSgpOwogICAg
ICAgICBnYy50cmFuc2xhdGUoSW50U2l6ZSgwLCBiaXRtYXBIZWlnaHQpKTsKQEAgLTEyMTMsNyAr
MTIxNiw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25z
dCBXZWJSZWN0JiByZWN0KQogICAgICAgICBpZiAoY2FudmFzKSB7CiAgICAgICAgICAgICAvLyBD
bGlwIHJlY3QgdG8gdGhlIGNvbmZpbmVzIG9mIHRoZSByb290TGF5ZXJUZXh0dXJlLgogICAgICAg
ICAgICAgSW50UmVjdCByZXNpemVSZWN0KHJlY3QpOwotICAgICAgICAgICAgcmVzaXplUmVjdC5p
bnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9sYXllclRyZWVIb3N0LT52aWV3cG9y
dFNpemUoKSkpOworICAgICAgICAgICAgcmVzaXplUmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQ
b2ludCgwLCAwKSwgbV9sYXllclRyZWVWaWV3LnZpZXdwb3J0U2l6ZSgpKSk7CiAgICAgICAgICAg
ICBkb1BpeGVsUmVhZGJhY2tUb0NhbnZhcyhjYW52YXMsIHJlc2l6ZVJlY3QpOwogICAgICAgICB9
CiAjZW5kaWYKQEAgLTEyNDMsNyArMTI0Niw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0
ZShib29sKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAoQ0NQ
cm94eTo6aGFzSW1wbFRocmVhZCgpKQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRz
UmVkcmF3KCk7CisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5zZXROZWVkc1JlZHJhdygpOwogICAg
IGVsc2UgewogICAgICAgICBBU1NFUlQoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkp
OwogICAgICAgICBpZiAoIXBhZ2UoKSkKQEAgLTEyNTIsNyArMTI1NSw3IEBAIHZvaWQgV2ViVmll
d0ltcGw6OmNvbXBvc2l0ZShib29sKQogICAgICAgICBpZiAobV9wYWdlT3ZlcmxheXMpCiAgICAg
ICAgICAgICBtX3BhZ2VPdmVybGF5cy0+dXBkYXRlKCk7CiAKLSAgICAgICAgbV9sYXllclRyZWVI
b3N0LT5jb21wb3NpdGUoKTsKKyAgICAgICAgbV9sYXllclRyZWVWaWV3LmNvbXBvc2l0ZSgpOwog
ICAgIH0KICNlbmRpZgogfQpAQCAtMTI2MCw4ICsxMjYzLDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6
Y29tcG9zaXRlKGJvb2wpCiB2b2lkIFdlYlZpZXdJbXBsOjpsb3NlQ29tcG9zaXRvckNvbnRleHQo
aW50IG51bVRpbWVzKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBp
ZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmxvc2VDb21wb3Np
dG9yQ29udGV4dChudW1UaW1lcyk7CisgICAgaWYgKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkp
CisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5sb3NlQ29tcG9zaXRvckNvbnRleHQobnVtVGltZXMp
OwogI2VuZGlmCiB9CiAKQEAgLTIxNDEsOCArMjE0NCw4IEBAIGJvb2wgV2ViVmlld0ltcGw6OmNv
bXB1dGVQYWdlU2NhbGVGYWN0b3JMaW1pdHMoKQogICAgIH0KICAgICBBU1NFUlQobV9taW5pbXVt
UGFnZVNjYWxlRmFjdG9yIDw9IG1fbWF4aW11bVBhZ2VTY2FsZUZhY3Rvcik7CiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKG1fbWluaW11bVBhZ2VT
Y2FsZUZhY3RvciwgbV9tYXhpbXVtUGFnZVNjYWxlRmFjdG9yKTsKKyAgICBpZiAoIW1fbGF5ZXJU
cmVlVmlldy5pc051bGwoKSkKKyAgICAgICAgbV9sYXllclRyZWVWaWV3LnNldFBhZ2VTY2FsZUZh
Y3RvckxpbWl0cyhtX21pbmltdW1QYWdlU2NhbGVGYWN0b3IsIG1fbWF4aW11bVBhZ2VTY2FsZUZh
Y3Rvcik7CiAjZW5kaWYKIAogICAgIGZsb2F0IGNsYW1wZWRTY2FsZSA9IGNsYW1wUGFnZVNjYWxl
RmFjdG9yVG9MaW1pdHMocGFnZVNjYWxlRmFjdG9yKCkpOwpAQCAtMjc3MCwxNyArMjc3MywxMiBA
QCB2b2lkIFdlYlZpZXdJbXBsOjphZGRQYWdlT3ZlcmxheShXZWJQYWdlT3ZlcmxheSogb3Zlcmxh
eSwgaW50IHpPcmRlcikKICAgICAgICAgbV9wYWdlT3ZlcmxheXMgPSBQYWdlT3ZlcmxheUxpc3Q6
OmNyZWF0ZSh0aGlzKTsKIAogICAgIG1fcGFnZU92ZXJsYXlzLT5hZGQob3ZlcmxheSwgek9yZGVy
KTsKLSAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIAogdm9pZCBXZWJWaWV3SW1w
bDo6cmVtb3ZlUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXkqIG92ZXJsYXkpCiB7Ci0gICAgaWYg
KG1fcGFnZU92ZXJsYXlzICYmIG1fcGFnZU92ZXJsYXlzLT5yZW1vdmUob3ZlcmxheSkpIHsKLSAg
ICAgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Ci0KLSAgICAgICAgaWYgKG1fcGFnZU92
ZXJsYXlzLT5lbXB0eSgpKQotICAgICAgICAgICAgbV9wYWdlT3ZlcmxheXMgPSBudWxscHRyOwot
ICAgIH0KKyAgICBpZiAobV9wYWdlT3ZlcmxheXMgJiYgbV9wYWdlT3ZlcmxheXMtPnJlbW92ZShv
dmVybGF5KSAmJiBtX3BhZ2VPdmVybGF5cy0+ZW1wdHkoKSkKKyAgICAgICAgbV9wYWdlT3Zlcmxh
eXMgPSBudWxscHRyOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRPdmVybGF5TGF5ZXIoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXIpCkBAIC0yODg4LDI5ICsyODg2LDMxIEBAIHZvaWQg
V2ViVmlld0ltcGw6OnNldFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQog
ICAgICAgICB9CiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRTY3JvbGxM
YXllcihzY3JvbGxMYXllcik7CiAgICAgfQotICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKGxheWVyID8gbGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKSA6IDApOworCisgICAgaWYgKGxheWVyKQorICAgICAgICBtX3Jvb3RMYXllciA9IFdl
YkxheWVyKGxheWVyLT5wbGF0Zm9ybUxheWVyKCkpOworCisgICAgaWYgKCFtX2xheWVyVHJlZVZp
ZXcuaXNOdWxsKCkpCisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRSb290TGF5ZXIobGF5ZXIg
PyAmbV9yb290TGF5ZXIgOiAwKTsKIAogICAgIEludFJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9z
aXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKICAgICBpZiAoIW1faXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQWN0aXZlKQogICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdl
ZFJlY3QpOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXko
KQordm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpCiB7Ci0g
ICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVk
c0NvbW1pdCgpOworICAgIG1fbGF5ZXJUcmVlVmlldy5zZXROZWVkc1JlZHJhdygpOwogfQogCi12
b2lkIFdlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5ZXJSZWN0KGNvbnN0IEludFNpemUmIHNjcm9s
bERlbHRhLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3ZvaWQgV2ViVmlld0ltcGw6OnNjcm9s
bFJvb3RMYXllclJlY3QoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmKQogewogICAgIHVw
ZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7Ci0gICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7
CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdCk7CisgICAgQVNTRVJU
KCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpOwogCiAgICAgaWYgKCFwYWdlKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTI5MTksNyArMjkxOSw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRh
dGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgSW50UmVjdCBkaXJ0eVJl
Y3QgPSB2aWV3LT53aW5kb3dUb0NvbnRlbnRzKHJlY3QpOwogICAgIHVwZGF0ZUxheWVyVHJlZVZp
ZXdwb3J0KCk7CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPmludmFsaWRhdGVSZWN0
KGRpcnR5UmVjdCk7Ci0gICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiB9CiAKIE5vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdCogV2ViVmlld0ltcGw6Om5vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dCgpCkBAIC0yOTMyLDggKzI5MzEsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzY2hlZHVsZUFuaW1h
dGlvbigpCiB7CiAgICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAg
ICAgICAgIGlmIChDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkpIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX2xheWVyVHJlZUhvc3QpOwotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVk
c0FuaW1hdGUoKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9sYXllclRyZWVWaWV3LmlzTnVsbCgp
KTsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5zZXROZWVkc0FuaW1hdGUoKTsKICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICBtX2NsaWVudC0+c2NoZWR1bGVBbmltYXRpb24oKTsKICAg
ICB9IGVsc2UKQEAgLTI5ODYsMjUgKzI5ODUsMjUgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgICAgICBtX2lzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IGZhbHNlOwogICAgICAgICAvLyBXZSBuZWVkIHRv
IGZpbmlzaCBhbGwgR0wgcmVuZGVyaW5nIGJlZm9yZSBzZW5kaW5nIGRpZERlYWN0aXZhdGVDb21w
b3NpdG9yKCkgdG8gcHJldmVudAogICAgICAgICAvLyBmbGlja2VyaW5nIHdoZW4gY29tcG9zaXRp
bmcgdHVybnMgb2ZmLgotICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0KQotICAgICAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICAgICAgaWYgKCFtX2xh
eWVyVHJlZVZpZXcuaXNOdWxsKCkpCisgICAgICAgICAgICBtX2xheWVyVHJlZVZpZXcuZmluaXNo
QWxsUmVuZGVyaW5nKCk7CiAgICAgICAgIG1fY2xpZW50LT5kaWREZWFjdGl2YXRlQ29tcG9zaXRv
cigpOwotICAgIH0gZWxzZSBpZiAobV9sYXllclRyZWVIb3N0KSB7CisgICAgfSBlbHNlIGlmICgh
bV9sYXllclRyZWVWaWV3LmlzTnVsbCgpKSB7CiAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgdXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKTsK
IAotICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVDb21wb3NpdG9yKG1fbGF5ZXJUcmVlSG9z
dC0+Y29tcG9zaXRvcklkZW50aWZpZXIoKSk7CisgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0
ZUNvbXBvc2l0b3IobV9sYXllclRyZWVWaWV3LmNvbXBvc2l0b3JJZGVudGlmaWVyKCkpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKHRydWUpIiwgdGhpcywgMCk7CiAKLSAgICAgICAgV2ViQ29y
ZTo6Q0NTZXR0aW5ncyBjY1NldHRpbmdzOwotICAgICAgICBjY1NldHRpbmdzLmFjY2VsZXJhdGVQ
YWludGluZyA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgp
OwotICAgICAgICBjY1NldHRpbmdzLmNvbXBvc2l0ZU9mZnNjcmVlbiA9IHNldHRpbmdzKCktPmNv
bXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQoKTsKLSAgICAgICAgY2NTZXR0aW5ncy5zaG93RlBTQ291
bnRlciA9IHNldHRpbmdzKCktPnNob3dGUFNDb3VudGVyKCk7Ci0gICAgICAgIGNjU2V0dGluZ3Mu
c2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gc2V0dGluZ3MoKS0+c2hvd1BsYXRmb3JtTGF5ZXJUcmVl
KCk7CisgICAgICAgIFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzIGxheWVyVHJlZVZpZXdTZXR0
aW5nczsKKyAgICAgICAgbGF5ZXJUcmVlVmlld1NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9
IHBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpOworICAgICAg
ICBsYXllclRyZWVWaWV3U2V0dGluZ3MuY29tcG9zaXRlT2Zmc2NyZWVuID0gc2V0dGluZ3MoKS0+
Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZCgpOworICAgICAgICBsYXllclRyZWVWaWV3U2V0dGlu
Z3Muc2hvd0ZQU0NvdW50ZXIgPSBzZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpOworICAgICAg
ICBsYXllclRyZWVWaWV3U2V0dGluZ3Muc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gc2V0dGluZ3Mo
KS0+c2hvd1BsYXRmb3JtTGF5ZXJUcmVlKCk7CiAKLSAgICAgICAgY2NTZXR0aW5ncy5wZXJUaWxl
UGFpbnRpbmcgPSBwYWdlKCktPnNldHRpbmdzKCktPnBlclRpbGVEcmF3aW5nRW5hYmxlZCgpOwot
ICAgICAgICBjY1NldHRpbmdzLnBhcnRpYWxTd2FwRW5hYmxlZCA9IHBhZ2UoKS0+c2V0dGluZ3Mo
KS0+cGFydGlhbFN3YXBFbmFibGVkKCk7CisgICAgICAgIGxheWVyVHJlZVZpZXdTZXR0aW5ncy5w
ZXJUaWxlUGFpbnRpbmcgPSBwYWdlKCktPnNldHRpbmdzKCktPnBlclRpbGVEcmF3aW5nRW5hYmxl
ZCgpOworICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3MucGFydGlhbFN3YXBFbmFibGVkID0g
cGFnZSgpLT5zZXR0aW5ncygpLT5wYXJ0aWFsU3dhcEVuYWJsZWQoKTsKIAogICAgICAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdCA9IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRl
KFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSk7CiAgICAgICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRTaG93RGVidWdCb3JkZXJzKHBhZ2UoKS0+c2V0dGlu
Z3MoKS0+c2hvd0RlYnVnQm9yZGVycygpKTsKQEAgLTMwMTIsMTggKzMwMTEsMTcgQEAgdm9pZCBX
ZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZl
KQogICAgICAgICBpZiAocGFnZSgpICYmIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKSkKICAg
ICAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRCYWNrZ3JvdW5kQ29sb3Io
cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5kb2N1bWVudEJhY2tncm91bmRDb2xvcigpKTsK
IAotICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlz
LCBjY1NldHRpbmdzKTsKLSAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgewotICAgICAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5zZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKG1faGF2ZVdoZWVs
RXZlbnRIYW5kbGVycyk7Ci0gICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFBhZ2VTY2Fs
ZUZhY3RvckxpbWl0cyhtX21pbmltdW1QYWdlU2NhbGVGYWN0b3IsIG1fbWF4aW11bVBhZ2VTY2Fs
ZUZhY3Rvcik7CisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5pbml0aWFsaXplKHRoaXMsIG1fcm9v
dExheWVyLCBsYXllclRyZWVWaWV3U2V0dGluZ3MpOworICAgICAgICBpZiAoIW1fbGF5ZXJUcmVl
Vmlldy5pc051bGwoKSkgeworICAgICAgICAgICAgbV9sYXllclRyZWVWaWV3LnNldEhhdmVXaGVl
bEV2ZW50SGFuZGxlcnMobV9oYXZlV2hlZWxFdmVudEhhbmRsZXJzKTsKKyAgICAgICAgICAgIG1f
bGF5ZXJUcmVlVmlldy5zZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMobV9taW5pbXVtUGFnZVNjYWxl
RmFjdG9yLCBtX21heGltdW1QYWdlU2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgdXBkYXRlTGF5
ZXJUcmVlVmlld3BvcnQoKTsKLSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUNvbXBv
c2l0b3IobV9sYXllclRyZWVIb3N0LT5jb21wb3NpdG9ySWRlbnRpZmllcigpKTsKKyAgICAgICAg
ICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUNvbXBvc2l0b3IobV9sYXllclRyZWVWaWV3LmNvbXBv
c2l0b3JJZGVudGlmaWVyKCkpOwogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQg
PSBmYWxzZTsKICAgICAgICAgICAgIGlmIChtX3BhZ2VPdmVybGF5cykKICAgICAgICAgICAgICAg
ICBtX3BhZ2VPdmVybGF5cy0+dXBkYXRlKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBtX2xheWVyVHJlZUhvc3QuY2xlYXIoKTsKICAgICAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LmNsZWFyKCk7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgbV9jbGllbnQtPmRpZERlYWN0aXZhdGVDb21w
b3NpdG9yKCk7CkBAIC0zMDM2LDE5ICszMDM0LDIxIEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKIAogI2VuZGlmCiAKLVBh
c3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IFdlYlZpZXdJbXBsOjpjcmVhdGVMYXllclRyZWVI
b3N0Q29udGV4dDNEKCkKK1dlYkdyYXBoaWNzQ29udGV4dDNEKiBXZWJWaWV3SW1wbDo6Y3JlYXRl
Q29udGV4dDNEKCkKIHsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBt
X3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QucmVsZWFzZSgpOwotICAgIGlmICgh
Y29udGV4dCkgeworICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiB3ZWJDb250ZXh0ID0gbV90ZW1w
b3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNELmxlYWtQdHIoKTsKKyAgICBpZiAoIXdlYkNv
bnRleHQpIHsKKyAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0OwogICAg
ICAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQogICAgICAgICAgICAgY29udGV4dCA9
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0Rm9yQW5vdGhl
clRocmVhZChnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUo
Z2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21lKCksIEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgICAgIHdlYkNv
bnRleHQgPSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRl
eHQzRChjb250ZXh0LnJlbGVhc2UoKS5sZWFrUmVmKCkpOwogICAgIH0KLSAgICByZXR1cm4gY29u
dGV4dDsKKyAgICByZXR1cm4gd2ViQ29udGV4dDsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6YXBw
bHlTY3JvbGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFnZVNj
YWxlRGVsdGEpCit2b2lkIFdlYlZpZXdJbXBsOjphcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IFdl
YlNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBwYWdlU2NhbGVEZWx0YSkKIHsKICAgICBpZiAoIW1h
aW5GcmFtZUltcGwoKSB8fCAhbWFpbkZyYW1lSW1wbCgpLT5mcmFtZVZpZXcoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMzA2MSw4ICszMDYxLDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6YXBwbHlTY3Jv
bGxBbmRTY2FsZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgZmxvYXQgcGFnZVNjYWwKICAg
ICAgICAgLy8gaW4gdGhlIG9sZCBjb29yZGluYXRlIHNwYWNlLCBzbyB3ZSBmaXJzdCBuZWVkIHRv
IG11bHRpcGx5IHRoZW0KICAgICAgICAgLy8gYnkgdGhlIHBhZ2Ugc2NhbGUgZGVsdGEuCiAgICAg
ICAgIFdlYlNpemUgc2Nyb2xsT2Zmc2V0ID0gbWFpbkZyYW1lKCktPnNjcm9sbE9mZnNldCgpOwot
ICAgICAgICBzY3JvbGxPZmZzZXQud2lkdGggKz0gc2Nyb2xsRGVsdGEud2lkdGgoKTsKLSAgICAg
ICAgc2Nyb2xsT2Zmc2V0LmhlaWdodCArPSBzY3JvbGxEZWx0YS5oZWlnaHQoKTsKKyAgICAgICAg
c2Nyb2xsT2Zmc2V0LndpZHRoICs9IHNjcm9sbERlbHRhLndpZHRoOworICAgICAgICBzY3JvbGxP
ZmZzZXQuaGVpZ2h0ICs9IHNjcm9sbERlbHRhLmhlaWdodDsKICAgICAgICAgV2ViUG9pbnQgc2Nh
bGVkU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldC53aWR0aCAqIHBhZ2VTY2FsZURlbHRhLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0LmhlaWdodCAqIHBh
Z2VTY2FsZURlbHRhKTsKICAgICAgICAgc2V0UGFnZVNjYWxlRmFjdG9yKHBhZ2VTY2FsZUZhY3Rv
cigpICogcGFnZVNjYWxlRGVsdGEsIHNjYWxlZFNjcm9sbE9mZnNldCk7CkBAIC0zMDgxLDcgKzMw
ODEsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkKICAgICAg
ICAgbV9jbGllbnQtPmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKTsKIH0KIAotdm9pZCBXZWJWaWV3
SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKQordm9pZCBXZWJW
aWV3SW1wbDo6ZGlkUmViaW5kR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykKIHsKIAogICAg
IC8vIFN3aXRjaCBiYWNrIHRvIHNvZnR3YXJlIHJlbmRlcmluZyBtb2RlLCBpZiBuZWNlc3NhcnkK
QEAgLTMxMDgsNyArMzEwOCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNjaGVkdWxlQ29tcG9zaXRl
KCkKIAogdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKQogewotICAg
IGlmICghcGFnZSgpIHx8ICFtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCB8fCAhbV9sYXllclRy
ZWVIb3N0KQorICAgIGlmICghcGFnZSgpIHx8ICFtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCB8
fCBtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZyYW1l
VmlldyogdmlldyA9IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKQEAgLTMxMjQsMzAgKzMx
MjQsMzEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKQogICAg
ICAgICBsYXllckFkanVzdFggPSAtdmlldy0+Y29udGVudHNTaXplKCkud2lkdGgoKSArIHZpZXct
PnZpc2libGVDb250ZW50UmVjdChmYWxzZSkud2lkdGgoKTsKICAgICB9CiAgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudEhvc3QtPnNldFZpZXdwb3J0KHZpc2libGVSZWN0LnNpemUoKSwgdmlldy0+
Y29udGVudHNTaXplKCksIHNjcm9sbCwgcGFnZVNjYWxlRmFjdG9yKCksIGxheWVyQWRqdXN0WCk7
Ci0gICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydFNpemUodmlzaWJsZVJlY3Quc2l6ZSgp
KTsKLSAgICBtX2xheWVyVHJlZUhvc3QtPnNldFBhZ2VTY2FsZShwYWdlU2NhbGVGYWN0b3IoKSk7
CisgICAgbV9sYXllclRyZWVWaWV3LnNldFZpZXdwb3J0U2l6ZSh2aXNpYmxlUmVjdC5zaXplKCkp
OworICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRQYWdlU2NhbGUocGFnZVNjYWxlRmFjdG9yKCkpOwog
fQogCiBXZWJHcmFwaGljc0NvbnRleHQzRCogV2ViVmlld0ltcGw6OmdyYXBoaWNzQ29udGV4dDNE
KCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKG1fcGFnZS0+
c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKSAmJiBhbGxvd3NBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKLSAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgewot
ICAgICAgICAgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIHdlYkNvbnRleHQgPSBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChtX2xheWVyVHJlZUhv
c3QtPmNvbnRleHQoKSk7Ci0gICAgICAgICAgICBpZiAod2ViQ29udGV4dCAmJiAhd2ViQ29udGV4
dC0+aXNDb250ZXh0TG9zdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB3ZWJDb250ZXh0Owor
ICAgICAgICBpZiAoIW1fbGF5ZXJUcmVlVmlldy5pc051bGwoKSkgeworICAgICAgICAgICAgV2Vi
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2xheWVyVHJlZVZpZXcuY29udGV4dCgpOwor
ICAgICAgICAgICAgaWYgKGNvbnRleHQgJiYgIWNvbnRleHQtPmlzQ29udGV4dExvc3QoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY29udGV4dDsKICAgICAgICAgfQogICAgICAgICBpZiAobV90
ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNEKSB7Ci0gICAgICAgICAgICBXZWJHcmFw
aGljc0NvbnRleHQzRCogd2ViQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0
cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRl
eHQzRC5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAod2ViQ29udGV4dCAmJiAhd2ViQ29udGV4dC0+
aXNDb250ZXh0TG9zdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB3ZWJDb250ZXh0OworICAg
ICAgICAgICAgaWYgKG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRCAmJiAhbV90
ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNELT5pc0NvbnRleHRMb3N0KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5n
ZXQoKTsKICAgICAgICAgfQorICAgICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRl
eHQ7CiAgICAgICAgIGlmIChDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkpCi0gICAgICAgICAgICBt
X3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QgPSBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZvckFub3RoZXJUaHJlYWQoZ2V0Q29tcG9zaXRv
ckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21lKCksIEdyYXBoaWNzQ29udGV4dDNE
OjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgICAgICAgICBjb250ZXh0ID0gR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGb3JBbm90aGVyVGhy
ZWFkKGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9tZSgpLCBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QgPSBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygp
LCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hv
c3RXaW5kb3cpOworICAgICAgICAgICAgY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVh
dGUoZ2V0Q29tcG9zaXRvckNvbnRleHRBdHRyaWJ1dGVzKCksIG1fcGFnZS0+Y2hyb21lKCksIEdy
YXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CiAKLSAgICAgICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4
dDNEKG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5nZXQoKSk7CisgICAgICAg
IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRCA9IGFkb3B0UHRyKEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQucmVs
ZWFzZSgpLmxlYWtSZWYoKSkpOworICAgICAgICByZXR1cm4gbV90ZW1wb3JhcnlPbnNjcmVlbkdy
YXBoaWNzQ29udGV4dDNELmdldCgpOwogICAgIH0KICNlbmRpZgogICAgIHJldHVybiAwOwpAQCAt
MzE3MCw3ICszMTcxLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0VmlzaWJpbGl0eVN0YXRlKFdl
YlBhZ2VWaXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0eVN0YXRlLAogICAgICAgICBib29sIHZpc2li
bGUgPSB2aXNpYmlsaXR5U3RhdGUgPT0gV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGU7CiAg
ICAgICAgIGlmICghdmlzaWJsZSkKICAgICAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0LT5wcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpOwotICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPnNldFZpc2libGUodmlzaWJsZSk7CisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRWaXNp
YmxlKHZpc2libGUpOwogICAgIH0KICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmgKaW5kZXggODAwZDE4MjU0MzZmMTMwNDlkNmVmOTZlOTNkNmEzNWY5MWIy
ODQ2NC4uM2NmMjg1YzQxNTc3YjRhMDE4MTdmZWNiNzM4Y2QwOWYzN2Q3M2RmOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0zMiw2ICszMiw5IEBACiAjZGVm
aW5lIFdlYlZpZXdJbXBsX2gKIAogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25Qb2xpY3kuaCIKKyNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYkxheWVy
VHJlZVZpZXcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3Q2xpZW50Lmgi
CiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViUG9pbnQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJS
ZWN0LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViU2l6ZS5oIgpAQCAtNDksNyArNTIsNiBAQAog
I2luY2x1ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaCIKICNpbmNsdWRlICJQYWdlT3Zl
cmxheUxpc3QuaCIKICNpbmNsdWRlICJVc2VyTWVkaWFDbGllbnRJbXBsLmgiCi0jaW5jbHVkZSAi
Y2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTkzLDcgKzk1LDcgQEAgY2xhc3MgV2ViTW91c2VXaGVl
bEV2ZW50OwogY2xhc3MgV2ViU2V0dGluZ3NJbXBsOwogY2xhc3MgV2ViVG91Y2hFdmVudDsKIAot
Y2xhc3MgV2ViVmlld0ltcGwgOiBwdWJsaWMgV2ViVmlldywgcHVibGljIFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdENsaWVudCwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKK2NsYXNz
IFdlYlZpZXdJbXBsIDogcHVibGljIFdlYlZpZXcsIHB1YmxpYyBXZWJMYXllclRyZWVWaWV3Q2xp
ZW50LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWV3SW1wbD4gewogcHVibGljOgogICAgIC8vIFdl
YldpZGdldCBtZXRob2RzOgogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwpAQCAtMjM5LDEzICsy
NDEsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRQYWdlT3ZlcmxheShXZWJQYWdl
T3ZlcmxheSosIGludCAvKiB6T3JkZXIgKi8pOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVQYWdl
T3ZlcmxheShXZWJQYWdlT3ZlcmxheSopOwogCi0gICAgLy8gQ0NMYXllclRyZWVIb3N0Q2xpZW50
CisgICAgLy8gV2ViTGF5ZXJUcmVlVmlld0NsaWVudAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVB
bmltYXRpb25zKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5
U2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGZsb2F0KTsKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJl
ZUhvc3RDb250ZXh0M0QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShj
b25zdCBXZWJTaXplJiwgZmxvYXQpOworICAgIHZpcnR1YWwgV2ViR3JhcGhpY3NDb250ZXh0M0Qq
IGNyZWF0ZUNvbnRleHQzRCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWJpbmRHcmFwaGljc0Nv
bnRleHQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCk7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2Vzcyk7CiAgICAgdmlydHVh
bCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCk7CiAKICAgICAvLyBXZWJWaWV3SW1wbApAQCAtNDI1
LDcgKzQyNyw3IEBAIHB1YmxpYzoKICAgICBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmcoKTsKICAgICBib29sIHBhZ2VIYXNSVExTdHlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Um9v
dEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwotICAgIHZvaWQgc2V0Um9v
dExheWVyTmVlZHNEaXNwbGF5KCk7CisgICAgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJT
eW5jKCk7CiAgICAgdm9pZCBzY3JvbGxSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHNjcm9sbERlbHRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CiAgICAg
dm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAg
ICAgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KiBub25Db21wb3NpdGVkQ29udGVudEhvc3QoKTsK
QEAgLTY2Myw3ICs2NjUsOCBAQCBwcml2YXRlOgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fcm9vdExheWVyU2Nyb2xsRGFtYWdlOwogICAg
IE93blB0cjxOb25Db21wb3NpdGVkQ29udGVudEhvc3Q+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0OwotICAgIFJlZlB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+IG1fbGF5ZXJUcmVlSG9z
dDsKKyAgICBXZWJMYXllclRyZWVWaWV3IG1fbGF5ZXJUcmVlVmlldzsKKyAgICBXZWJMYXllciBt
X3Jvb3RMYXllcjsKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX3Jvb3RHcmFwaGljc0xh
eWVyOwogICAgIGJvb2wgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmU7CiAgICAgYm9v
bCBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZDsKQEAgLTY3OSw3ICs2ODIsNyBAQCBwcml2YXRl
OgogICAgIC8vIElmIHdlIGF0dGVtcHQgdG8gZmV0Y2ggdGhlIG9uLXNjcmVlbiBHcmFwaGljc0Nv
bnRleHQzRCBiZWZvcmUKICAgICAvLyB0aGUgY29tcG9zaXRvciBoYXMgYmVlbiB0dXJuZWQgb24s
IHdlIG5lZWQgdG8gaW5zdGFudGlhdGUgaXQKICAgICAvLyBlYXJseS4gVGhpcyBtZW1iZXIgaG9s
ZHMgb24gdG8gdGhlIEdDM0QgaW4gdGhpcyBjYXNlLgotICAgIFJlZlB0cjxXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRD4gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNEOworICAg
IE93blB0cjxXZWJHcmFwaGljc0NvbnRleHQzRD4gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNz
Q29udGV4dDNEOwogICAgIE93blB0cjxEZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5PiBtX2Rl
dmljZU9yaWVudGF0aW9uQ2xpZW50UHJveHk7CiAgICAgT3duUHRyPEdlb2xvY2F0aW9uQ2xpZW50
UHJveHk+IG1fZ2VvbG9jYXRpb25DbGllbnRQcm94eTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9XZWJMYXllclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJMYXllclRlc3QuY3BwCmluZGV4IGUwY2FiODdiZGY1NWJhMjhmYjcyNjY3
MDk2ODI2YjJkMDNjNjdjNDYuLjFlZWQ4MWFlYTQxNmM5MGIxNGVlZWVjNGEzZDcyODE2ZWQxZWUz
ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViTGF5ZXJUZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAK
QEAgLTU3LDYgKzU3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFu
ZFNjYWxlKGNvbnN0IFdlYlNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBzY2FsZUZhY3RvcikgeyB9
CiAgICAgdmlydHVhbCBXZWJHcmFwaGljc0NvbnRleHQzRCogY3JlYXRlQ29udGV4dDNEKCkgeyBy
ZXR1cm4gQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKFdlYkdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCkpLmxlYWtQdHIoKTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWJpbmRHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENv
bXBsZXRlU3dhcEJ1ZmZlcnMoKSB7IH0KIH07CiAKIGNsYXNzIE1vY2tXZWJDb250ZW50TGF5ZXJD
bGllbnQgOiBwdWJsaWMgV2ViQ29udGVudExheWVyQ2xpZW50IHsKQEAgLTcyLDcgKzc0LDcgQEAg
cHVibGljOgogICAgICAgICBXZWJLaXQ6OldlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CiAg
ICAgICAgIG1fcm9vdExheWVyID0gV2ViTGF5ZXI6OmNyZWF0ZSgpOwogICAgICAgICBFWFBFQ1Rf
Q0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21wb3NpdGUoKSkuVGltZXMoQW55TnVtYmVyKCkpOwot
ICAgICAgICBtX3ZpZXcgPSBXZWJMYXllclRyZWVWaWV3OjpjcmVhdGUoJm1fY2xpZW50LCBtX3Jv
b3RMYXllciwgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MoKSk7CisgICAgICAgIEVYUEVDVF9U
UlVFKG1fdmlldy5pbml0aWFsaXplKCZtX2NsaWVudCwgbV9yb290TGF5ZXIsIFdlYkxheWVyVHJl
ZVZpZXc6OlNldHRpbmdzKCkpKTsKICAgICAgICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3Rh
dGlvbnMoJm1fY2xpZW50KTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128602</attachid>
            <date>2012-02-23 16:45:20 -0800</date>
            <delta_ts>2012-02-24 14:08:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75591-20120223164519.patch</filename>
            <type>text/plain</type>
            <size>42047</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4Njk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGI5YzVjMTQzYTYzOTkxMjliYjY5YmVkYzM4ZTUxMDI2NzU0ODFhZjguLmE2ODUyMjNjZTUwNjc2
OTExMTZlOGYzODBjNzkxZWI3MWRlYmI4OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNzMgQEAKKzIwMTItMDItMDggIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1ha2UgV2ViVmlld0ltcGwgZGVwZW5kIG9u
IFdlYkxheWVyVHJlZVZpZXcgaW5zdGVhZCBvZiBDQ0xheWVyVHJlZUhvc3QKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTkxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjb252ZXJ0cyBXZWJWaWV3
SW1wbCBmcm9tIGRlcGVuZGluZyBvbiBDQ0xheWVyVHJlZUhvc3QgdG8gV2ViTGF5ZXJUcmVlVmll
dyBpbiBvcmRlciB0byBwcm92aWRlIGJldHRlcgorICAgICAgICBpc29sYXRpb24gYW5kIGFsbG93
IGZvciBmdXR1cmUgcmVmYWN0b3JpbmdzLiBUaGUgY2hhbmdlcyB0byBXZWJWaWV3SW1wbCBhcmUg
bW9zdGx5IG1lY2hhbmljYWwuIFRoZQorICAgICAgICBXZWJMYXllclRyZWVWaWV3IGFuZCBXZWJM
YXllclRyZWVWaWV3Q2xpZW50IGludGVyZmFjZXMgaGF2ZSBib3RoIGdyb3duIGFuZCBjaGFuZ2Vk
IHNsaWdodGx5OgorCisgICAgICAgIC0gU2V0dXAgcGF0aCBmb3IgV2ViTGF5ZXJUcmVlVmlldyBj
aGFuZ2VkIHRvIGV4cG9zZSBhbiBpbml0aWFsaXplKCkgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIGNy
ZWF0ZSgpIGZhY3RvcnkKKyAgICAgICAgZnVuY3Rpb24uIFRoZSBuZXcgbW9kZWwgaXMgdGhhdCBh
IFdlYkxheWVyVHJlZVZpZXcgd2hlbiBjb25zdHJ1Y3RlZCBpcyBpbiBhIG51bGwgc3RhdGUuIENh
bGxpbmcgaW5pdGlhbGl6ZSgpCisgICAgICAgIGF0dGVtcHRzIHRvIHJlLWluaXRpYWxpemUgdGhl
IFdMVFYsIHdoaWNoIGNhbiBlaXRoZXIgZmFpbCBvciBzdWNjZWVkLiAgQWxsIG90aGVyIGZ1bmN0
aW9ucyBtdXN0IGJlIGNhbGxlZCBvbiBhCisgICAgICAgIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXpl
ZCB2aWV3LgorCisgICAgICAgIC0gV2ViTGF5ZXJUcmVlVmlldyBleHBhbmRlZCB0byBpbmNsdWRl
IGZ1bmN0aW9uYWxpdHkgdGhhdCBDQ0xheWVyVHJlZUhvc3QgZXhwb3NlcyBidXQgV2ViTGF5ZXJU
cmVlVmlldyBkaWQgbm90LgorICAgICAgICBTb21lIG9mIHRoaXMgaXMgb25seSB2YWxpZCBmb3Ig
dGhlIHNpbmdsZSB0aHJlYWQgY2FzZSBhbmQgd2lsbCBiZSByZW1vdmVkIHdoZW4gd2UgaW52ZXJ0
IHRoZSBzY2hlZHVsaW5nIGNvbnRyb2wKKyAgICAgICAgbG9naWMsIHRoZXNlIGJpdHMgYXJlIGNv
bW1lbnRlZC4KKworICAgICAgICAtIFdlYkxheWVyVHJlZVZpZXdDbGllbnQgZXhwYW5kZWQgd2l0
aCBzb21lIGZsb3ctY29udHJvbCByZWxhdGVkIEFQSXMuCisKKyAgICAgICAgUmVmYWN0b3Igb25s
eSwgbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dl
YkxheWVyVHJlZVZpZXcuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6U2V0
dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6aXNO
dWxsKToKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5o
OgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Q2hyb21lQ2xpZW50SW1wbDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYyk6CisgICAgICAg
ICogc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRy
ZWVWaWV3Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6
Y29tcG9zaXRvcklkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3
OjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6c2V0TmVl
ZHNBbmltYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6dXBkYXRlQW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnNldE5lZWRzUmVk
cmF3KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6c2V0UGFnZVNjYWxlRmFj
dG9yQW5kTGltaXRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6c3RhcnRQ
YWdlU2NhbGVBbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3Ojpm
aW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3Ojpj
b250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6bG9zZUNvbXBvc2l0
b3JDb250ZXh0KToKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkQ29tbWl0
QW5kRHJhd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRp
ZENvbXBsZXRlU3dhcEJ1ZmZlcnMpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphbmltYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OmRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXBv
c2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpsb3NlQ29tcG9zaXRvckNvbnRl
eHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcHV0ZVBhZ2VTY2FsZUZhY3Rv
ckxpbWl0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphZGRQYWdlT3ZlcmxheSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVQYWdlT3ZlcmxheSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFJvb3RMYXllclJlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZUNvbnRleHQzRCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjphcHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmRpZFJlYmluZEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVMYXllclRyZWVWaWV3cG9ydCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpncmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpzZXRWaXNpYmlsaXR5U3RhdGUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1w
bC5oOgorICAgICAgICAqIHRlc3RzL1dlYkxheWVyVGVzdC5jcHA6CisKIDIwMTItMDItMjEgIEph
bWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1d
IE5vdGlmeSBjb21wb3NpdG9yIG9mIHdoZWVsIGV2ZW50IHJlZ2lzdHJhdGlvbiB2aWEgU2Nyb2xs
aW5nQ29vcmRpbmF0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXcuaAppbmRleCAxN2E4NzZhOTg1MWRkZmMwY2Y5
YTU2MWM5ODZhZGMyM2JiZDZhYWI2Li42ODM3YjE5ZWNiZGQyMTc2ZGI2ZDNkMzdlYjk5NjIwMjg0
YjAwNzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9y
bS9XZWJMYXllclRyZWVWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
cGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlldy5oCkBAIC0zNSw4ICszNSwxMCBAQCBzdHJ1Y3QgQ0NT
ZXR0aW5nczsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJHcmFwaGljc0NvbnRl
eHQzRDsKIGNsYXNzIFdlYkxheWVyOwogY2xhc3MgV2ViTGF5ZXJUcmVlVmlld0NsaWVudDsKK3N0
cnVjdCBXZWJQb2ludDsKIHN0cnVjdCBXZWJSZWN0Owogc3RydWN0IFdlYlNpemU7CiAKQEAgLTUx
LDcgKzUzLDkgQEAgcHVibGljOgogICAgICAgICAgICAgLCByZWZyZXNoUmF0ZSgwKQogICAgICAg
ICAgICAgLCBwZXJUaWxlUGFpbnRpbmcoZmFsc2UpCiAgICAgICAgICAgICAsIHBhcnRpYWxTd2Fw
RW5hYmxlZChmYWxzZSkKLSAgICAgICAgICAgICwgdGhyZWFkZWRBbmltYXRpb25FbmFibGVkKGZh
bHNlKSB7IH0KKyAgICAgICAgICAgICwgdGhyZWFkZWRBbmltYXRpb25FbmFibGVkKGZhbHNlKQor
ICAgICAgICB7CisgICAgICAgIH0KIAogICAgICAgICBib29sIGFjY2VsZXJhdGVQYWludGluZzsK
ICAgICAgICAgYm9vbCBjb21wb3NpdGVPZmZzY3JlZW47CkBAIC02Niw4ICs3MCw2IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgIH07CiAKLSAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJMYXllclRy
ZWVWaWV3IGNyZWF0ZShXZWJMYXllclRyZWVWaWV3Q2xpZW50KiwgY29uc3QgV2ViTGF5ZXImIHJv
b3QsIGNvbnN0IFNldHRpbmdzJik7Ci0KICAgICBXZWJMYXllclRyZWVWaWV3KCkgeyB9CiAgICAg
V2ViTGF5ZXJUcmVlVmlldyhjb25zdCBXZWJMYXllclRyZWVWaWV3JiBsYXllcikgeyBhc3NpZ24o
bGF5ZXIpOyB9CiAgICAgfldlYkxheWVyVHJlZVZpZXcoKSB7IHJlc2V0KCk7IH0KQEAgLTc2LDEw
ICs3OCw1NyBAQCBwdWJsaWM6CiAgICAgICAgIGFzc2lnbihsYXllcik7CiAgICAgICAgIHJldHVy
biAqdGhpczsKICAgICB9CisKICAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKICAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmKTsKICAgICBX
RUJLSVRfRVhQT1JUIGJvb2wgZXF1YWxzKGNvbnN0IFdlYkxheWVyVHJlZVZpZXcmKSBjb25zdDsK
IAorICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9wcml2YXRlLmlzTnVsbCgpOyB9
CisKKyNkZWZpbmUgV0VCTEFZRVJUUkVFVklFV19IQVNfSU5JVElBTElaRQorICAgIC8vIEluaXRp
YWxpemF0aW9uIGFuZCBsaWZlY3ljbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworICAgIC8vIEF0dGVtcHRzIHRvIGluaXRpYWxpemUgdGhpcyBXZWJMYXllclRyZWVW
aWV3IHdpdGggdGhlIGdpdmVuIGNsaWVudCwgcm9vdCBsYXllciwgYW5kIHNldHRpbmdzLgorICAg
IC8vIElmIGluaXRpYWxpemF0aW9uIGZhaWxzLCB0aGlzIHdpbGwgcmV0dXJuIGZhbHNlIGFuZCAu
aXNOdWxsKCkgd2lsbCByZXR1cm4gdHJ1ZS4KKyAgICAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUg
YW55IG1ldGhvZHMgYmVsb3cuCisgICAgV0VCS0lUX0VYUE9SVCBib29sIGluaXRpYWxpemUoV2Vi
TGF5ZXJUcmVlVmlld0NsaWVudCosIGNvbnN0IFdlYkxheWVyJiByb290LCBjb25zdCBTZXR0aW5n
cyYpOworCisgICAgLy8gU2V0cyB0aGUgcm9vdCBvZiB0aGUgdHJlZS4gVGhlIHJvb3QgaXMgc2V0
IGJ5IHdheSBvZiB0aGUgY29uc3RydWN0b3IuCisgICAgLy8gVGhpcyBpcyB0eXBpY2FsbHkgdXNl
ZCB0byBleHBsaWNpdGx5IHNldCB0aGUgcm9vdCB0byBudWxsIHRvIGJyZWFrCisgICAgLy8gY3lj
bGVzLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRSb290TGF5ZXIoV2ViTGF5ZXIqKTsKKwor
ICAgIC8vIFJldHVybnMgYSB1bmlxdWUgaWRlbnRpZmllciB0aGF0IGNhbiBiZSB1c2VkIG9uIHRo
ZSBjb21wb3NpdG9yIHRocmVhZCB0byByZXF1ZXN0IGEKKyAgICAvLyBXZWJDb21wb3NpdG9ySW5w
dXRIYW5kbGVyIGluc3RhbmNlLgorICAgIFdFQktJVF9FWFBPUlQgaW50IGNvbXBvc2l0b3JJZGVu
dGlmaWVyKCk7CisKKworICAgIC8vIFZpZXcgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBzZXRWaWV3cG9ydFNpemUoY29uc3QgV2ViU2l6ZSYpOworICAgIFdFQktJVF9FWFBPUlQgV2Vi
U2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdDsKKworICAgIC8vIFNldHMgd2hldGhlciB0aGlzIHZp
ZXcgaXMgdmlzaWJsZS4gSW4gdGhyZWFkZWQgbW9kZSwgYSB2aWV3IHRoYXQgaXMgbm90IHZpc2li
bGUgd2lsbCBub3QKKyAgICAvLyBjb21wb3NpdGUgb3IgdHJpZ2dlciB1cGRhdGVBbmltYXRpb25z
KCkgb3IgbGF5b3V0KCkgY2FsbHMgdW50aWwgaXQgYmVjb21lcyB2aXNpYmxlLgorICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOworCisgICAgLy8gU2V0cyB0aGUgY3VycmVu
dCBwYWdlIHNjYWxlIGZhY3RvciBhbmQgbWluaW11bSAvIG1heGltdW0gbGltaXRzLiBCb3RoIGxp
bWl0cyBhcmUgaW5pdGlhbGx5IDEgKG5vIHBhZ2Ugc2NhbGUgYWxsb3dlZCkuCisgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIHNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cyhmbG9hdCBwYWdlU2NhbGVG
YWN0b3IsIGZsb2F0IG1pbmltdW0sIGZsb2F0IG1heGltdW0pOworCisgICAgLy8gU3RhcnRzIGFu
IGFuaW1hdGlvbiBvZiB0aGUgcGFnZSBzY2FsZSB0byBhIHRhcmdldCBzY2FsZSBmYWN0b3IgYW5k
IHNjcm9sbCBvZmZzZXQuCisgICAgLy8gSWYgdXNlQW5jaG9yIGlzIHRydWUsIGRlc3RpbmF0aW9u
IGlzIGEgcG9pbnQgb24gdGhlIHNjcmVlbiB0aGF0IHdpbGwgcmVtYWluIGZpeGVkIGZvciB0aGUg
ZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbi4KKyAgICAvLyBJZiB1c2VBbmNob3IgaXMgZmFsc2Us
IGRlc3RpbmF0aW9uIGlzIHRoZSBmaW5hbCB0b3AtbGVmdCBzY3JvbGwgcG9zaXRpb24uCisgICAg
V0VCS0lUX0VYUE9SVCB2b2lkIHN0YXJ0UGFnZVNjYWxlQW5pbWF0aW9uKGNvbnN0IFdlYlBvaW50
JiBkZXN0aW5hdGlvbiwgYm9vbCB1c2VBbmNob3IsIGZsb2F0IG5ld1BhZ2VTY2FsZSwgZG91Ymxl
IGR1cmF0aW9uU2VjKTsKKworCisgICAgLy8gRmxvdyBjb250cm9sIGFuZCBzY2hlZHVsaW5nIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gUmVxdWVzdHMg
YW4gdXBkYXRlQW5pbWF0aW9ucygpIGNhbGwuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldE5l
ZWRzQW5pbWF0ZSgpOworCisgICAgLy8gSW5kaWNhdGVzIHRoYXQgdGhlIHZpZXcgbmVlZHMgdG8g
YmUgcmVkcmF3bi4gVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB3aGVuIHRoZSBmcm9udGJ1ZmZlciBp
cyBkYW1hZ2VkLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXROZWVkc1JlZHJhdygpOworCiAg
ICAgLy8gVHJpZ2dlcnMgYSBjb21wb3NpdGluZyBwYXNzLiBJZiB0aGUgY29tcG9zaXRvciB0aHJl
YWQgd2FzIG5vdAogICAgIC8vIGVuYWJsZWQgdmlhIFdlYkNvbXBvc2l0b3I6OmluaXRpYWxpemUs
IHRoZSBjb21wb3NpdGluZyBwYXNzIGhhcHBlbnMKICAgICAvLyBpbW1lZGlhdGVseS4gSWYgaXQg
aXMgZW5hYmxlZCwgdGhlIGNvbXBvc2l0aW5nIHBhc3Mgd2lsbCBoYXBwZW4gYXQgYQpAQCAtODks
OCArMTM4LDEwIEBAIHB1YmxpYzoKICAgICAvLyBXZWJDb250ZW50TGF5ZXJDbGllbnQ6OnBhaW50
Q29udGVudHMuCiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGNvbXBvc2l0ZSgpOwogCi0gICAgV0VC
S0lUX0VYUE9SVCB2b2lkIHNldFZpZXdwb3J0U2l6ZShjb25zdCBXZWJTaXplJik7Ci0gICAgV0VC
S0lUX0VYUE9SVCBXZWJTaXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0OworICAgIC8vIEltbWVkaWF0
ZWx5IHVwZGF0ZSBhbmltYXRpb25zLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBmcmFt
ZSBzY2hlZHVsaW5nIGlzIGhhbmRsZWQgYnkKKyAgICAvLyB0aGUgV2ViTGF5ZXJUcmVlVmlldyB1
c2VyIGFuZCBub3QgaW50ZXJuYWxseSBieSB0aGUgY29tcG9zaXRvciwgbWVhbmluZyBvbmx5IGlu
IHNpbmdsZS10aHJlYWRlZAorICAgIC8vIG1vZGUuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHVw
ZGF0ZUFuaW1hdGlvbnMoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKIAogICAgIC8vIENvbXBvc2l0
ZXMgYW5kIGF0dGVtcHRzIHRvIHJlYWQgYmFjayB0aGUgcmVzdWx0IGludG8gdGhlIHByb3ZpZGVk
CiAgICAgLy8gYnVmZmVyLiBJZiBpdCB3YXNuJ3QgcG9zc2libGUsIGUuZy4gZHVlIHRvIGNvbnRl
eHQgbG9zdCwgd2lsbCByZXR1cm4KQEAgLTEwMCwxOCArMTUxLDIwIEBAIHB1YmxpYzoKICAgICAv
LyBUaGUgYnVmZmVyIGlzIG5vdCBtb2RpZmllZCBpZiB0aGUgZmFsc2UgaXMgcmV0dXJuZWQuCiAg
ICAgV0VCS0lUX0VYUE9SVCBib29sIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywg
Y29uc3QgV2ViUmVjdCYpOwogCi0gICAgLy8gU2V0cyB0aGUgcm9vdCBvZiB0aGUgdHJlZS4gVGhl
IHJvb3QgaXMgc2V0IGJ5IHdheSBvZiB0aGUgY29uc3RydWN0b3IuCi0gICAgLy8gVGhpcyBpcyB0
eXBpY2FsbHkgdXNlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgcm9vdCB0byBudWxsIHRvIGJyZWFr
Ci0gICAgLy8gY3ljbGVzLgotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRSb290TGF5ZXIoV2Vi
TGF5ZXIqKTsKKyAgICAvLyBCbG9ja3MgdW50aWwgdGhlIG1vc3QgcmVjZW50bHkgY29tcG9zaXRl
ZCBmcmFtZSBoYXMgZmluaXNoZWQgcmVuZGVyaW5nIG9uIHRoZSBHUFUuCisgICAgLy8gVGhpcyBj
YW4gaGF2ZSBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGltcGFjdCBhbmQgc2hvdWxkIGJlIHVz
ZWQgd2l0aCBjYXJlLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmco
KTsKIAotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgIFdlYkxheWVyVHJlZVZpZXcoY29u
c3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdD4mKTsKLSAgICBXZWJM
YXllclRyZWVWaWV3JiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdD4mKTsKLSAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0PigpIGNvbnN0OwotI2VuZGlmCiAKLSAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgc2V0TmVlZHNSZWRyYXcoKTsKKyAgICAvLyBEZWJ1Z2dpbmcgLyBkYW5nZXJvdXMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBSZXR1cm5z
IHRoZSBjb250ZXh0IGJlaW5nIHVzZWQgZm9yIHJlbmRlcmluZyB0aGlzIHZpZXcuIEluIHRocmVh
ZGVkIGNvbXBvc2l0aW5nIG1vZGUsIGl0IGlzCisgICAgLy8gbm90IHNhZmUgdG8gdXNlIHRoaXMg
Y29udGV4dCBhdCBhbGwgb24gdGhlIG1haW4gdGhyZWFkLgorICAgIC8vIEZJWE1FOiBSZW1vdmUg
dGhpcyBBUEkgYXMgc29vbiBhcyBwb3NzaWJsZSwgaXQncyB2ZXJ5IGJ1Zy1wcm9uZSBpbiB0aHJl
YWRlZCBtb2RlLgorICAgIFdFQktJVF9FWFBPUlQgV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQoKTsKKworICAgIC8vIFNpbXVsYXRlcyBhIGxvc3QgY29udGV4dC4gRm9yIHRlc3Rpbmcgb25s
eS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KGludCBudW1U
aW1lcyk7CiAKIHByb3RlY3RlZDoKICAgICBXZWJQcml2YXRlUHRyPFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdD4gbV9wcml2YXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oCmluZGV4IDlj
NGRmYjc3Yjc3MTE0YjBlZjY3YjAxN2JmYTRiZDIyM2IzYWI2YTYuLjVjMGI5ZWY5YTJhMmM2MTNi
MTE5MDBjMTNmODk4ZjIyODM5YjQ2NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL3BsYXRmb3JtL1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgK
QEAgLTUyLDYgKzUyLDkgQEAgcHVibGljOgogICAgIC8vIGNvbnRleHQgZXZlbnQpLgogICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWJpbmRHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKSA9IDA7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkgPSAwOworCiAgICAgLy8gU2NoZWR1bGVz
IGEgY29tcG9zaXRpbmcgcGFzcywgbWVhbmluZyB0aGUgY2xpZW50IHNob3VsZCBjYWxsCiAgICAg
Ly8gV2ViTGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRlIGF0IGEgbGF0ZXIgdGltZS4gVGhpcyBpcyBv
bmx5IGNhbGxlZCBpZiB0aGUKICAgICAvLyBjb21wb3NpdG9yIHRocmVhZCBpcyBkaXNhYmxlZDsg
d2hlbiBlbmFibGVkLCB0aGUgY29tcG9zaXRvciB3aWxsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCmluZGV4IDQ1YTgxMzg1OTQ0Y2U4YWJkYmM3
YmI5OTRhZWIzY2M5ZGYyMjQwYmYuLmUwOGMwNzQ1MGMwN2VmMTA3YzdlOTY2NWM0YTA1MDUzNzVh
NDFmYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVu
dEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudElt
cGwuY3BwCkBAIC04OTAsNyArODkwLDcgQEAgdm9pZCBDaHJvbWVDbGllbnRJbXBsOjphdHRhY2hS
b290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXAKIAogdm9p
ZCBDaHJvbWVDbGllbnRJbXBsOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkKIHsKLSAg
ICBtX3dlYlZpZXctPnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOworICAgIG1fd2ViVmlldy0+
c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpOwogfQogCiBDaHJvbWVDbGllbnQ6OkNvbXBv
c2l0aW5nVHJpZ2dlckZsYWdzIENocm9tZUNsaWVudEltcGw6OmFsbG93ZWRDb21wb3NpdGluZ1Ry
aWdnZXJzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkxheWVyVHJlZVZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJU
cmVlVmlldy5jcHAKaW5kZXggZDJjMGYwYzEyMWE3YzBkNWU1YmZlMWU1MDVlZDdiZWFiYmIyN2Jh
Zi4uOTE5NmFiNzc0YzY4M2JhMmM2MTc4MDQ4OWE5MjQyOGQxYTY2YTkxNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAKQEAgLTI2LDkgKzI2
LDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJU
cmVlVmlldy5oIgogCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5j
bHVkZSAiV2ViTGF5ZXJUcmVlVmlld0ltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhv
c3QuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllci5oIgorI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYlBvaW50LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViUmVjdC5oIgogI2luY2x1ZGUgInBs
YXRmb3JtL1dlYlNpemUuaCIKIApAQCAtNTEsMTEgKzUzLDYgQEAgV2ViTGF5ZXJUcmVlVmlldzo6
U2V0dGluZ3M6Om9wZXJhdG9yIENDU2V0dGluZ3MoKSBjb25zdAogICAgIHJldHVybiBzZXR0aW5n
czsKIH0KIAotV2ViTGF5ZXJUcmVlVmlldyBXZWJMYXllclRyZWVWaWV3OjpjcmVhdGUoV2ViTGF5
ZXJUcmVlVmlld0NsaWVudCogY2xpZW50LCBjb25zdCBXZWJMYXllciYgcm9vdCwgY29uc3QgV2Vi
TGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MmIHNldHRpbmdzKQotewotICAgIHJldHVybiBXZWJMYXll
clRyZWVWaWV3KFdlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGUoY2xpZW50LCByb290LCBzZXR0
aW5ncykpOwotfQotCiB2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnJlc2V0KCkKIHsKICAgICBtX3By
aXZhdGUucmVzZXQoKTsKQEAgLTcxLDE0ICs2OCwyNiBAQCBib29sIFdlYkxheWVyVHJlZVZpZXc6
OmVxdWFscyhjb25zdCBXZWJMYXllclRyZWVWaWV3JiBuKSBjb25zdAogICAgIHJldHVybiAobV9w
cml2YXRlLmdldCgpID09IG4ubV9wcml2YXRlLmdldCgpKTsKIH0KIAotdm9pZCBXZWJMYXllclRy
ZWVWaWV3Ojpjb21wb3NpdGUoKQorYm9vbCBXZWJMYXllclRyZWVWaWV3Ojppbml0aWFsaXplKFdl
YkxheWVyVHJlZVZpZXdDbGllbnQqIGNsaWVudCwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0
IFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzJiBzZXR0aW5ncykKIHsKLSAgICBpZiAoQ0NQcm94
eTo6aGFzSW1wbFRocmVhZCgpKQotICAgICAgICBtX3ByaXZhdGUtPnNldE5lZWRzQ29tbWl0KCk7
CisgICAgbV9wcml2YXRlID0gV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmNyZWF0ZShjbGllbnQsIHJv
b3QsIHNldHRpbmdzKTsKKyAgICByZXR1cm4gIWlzTnVsbCgpOworfQorCit2b2lkIFdlYkxheWVy
VHJlZVZpZXc6OnNldFJvb3RMYXllcihXZWJMYXllciAqcm9vdCkKK3sKKyAgICBpZiAocm9vdCkK
KyAgICAgICAgbV9wcml2YXRlLT5zZXRSb290TGF5ZXIoKnJvb3QpOwogICAgIGVsc2UKLSAgICAg
ICAgbV9wcml2YXRlLT5jb21wb3NpdGUoKTsKKyAgICAgICAgbV9wcml2YXRlLT5zZXRSb290TGF5
ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPigpKTsKK30KKworaW50IFdlYkxheWVyVHJlZVZp
ZXc6OmNvbXBvc2l0b3JJZGVudGlmaWVyKCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jb21w
b3NpdG9ySWRlbnRpZmllcigpOwogfQogCisKIHZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6c2V0Vmll
d3BvcnRTaXplKGNvbnN0IFdlYlNpemUmIHZpZXdwb3J0U2l6ZSkKIHsKICAgICBtX3ByaXZhdGUt
PnNldFZpZXdwb3J0U2l6ZSh2aWV3cG9ydFNpemUpOwpAQCAtODksMzggKzk4LDYyIEBAIFdlYlNp
emUgV2ViTGF5ZXJUcmVlVmlldzo6dmlld3BvcnRTaXplKCkgY29uc3QKICAgICByZXR1cm4gV2Vi
U2l6ZShtX3ByaXZhdGUtPnZpZXdwb3J0U2l6ZSgpKTsKIH0KIAotYm9vbCBXZWJMYXllclRyZWVW
aWV3Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IFdlYlJlY3QmIHJl
Y3QpCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQogewot
ICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHBpeGVscywgcmVjdCk7
CisgICAgbV9wcml2YXRlLT5zZXRWaXNpYmxlKHZpc2libGUpOwogfQogCi12b2lkIFdlYkxheWVy
VHJlZVZpZXc6OnNldFJvb3RMYXllcihXZWJMYXllciAqcm9vdCkKK3ZvaWQgV2ViTGF5ZXJUcmVl
Vmlldzo6c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKGZsb2F0IHBhZ2VTY2FsZUZhY3Rvciwg
ZmxvYXQgbWluaW11bSwgZmxvYXQgbWF4aW11bSkKIHsKLSAgICBpZiAocm9vdCkKLSAgICAgICAg
bV9wcml2YXRlLT5zZXRSb290TGF5ZXIoKnJvb3QpOworICAgIG1fcHJpdmF0ZS0+c2V0UGFnZVNj
YWxlRmFjdG9yQW5kTGltaXRzKHBhZ2VTY2FsZUZhY3RvciwgbWluaW11bSwgbWF4aW11bSk7Cit9
CisKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3Qg
V2ViUG9pbnQmIHNjcm9sbCwgYm9vbCB1c2VBbmNob3IsIGZsb2F0IG5ld1BhZ2VTY2FsZSwgZG91
YmxlIGR1cmF0aW9uU2VjKQoreworICAgIG1fcHJpdmF0ZS0+c3RhcnRQYWdlU2NhbGVBbmltYXRp
b24oSW50U2l6ZShzY3JvbGwueCwgc2Nyb2xsLnkpLCB1c2VBbmNob3IsIG5ld1BhZ2VTY2FsZSwg
ZHVyYXRpb25TZWMpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnNldE5lZWRzQW5pbWF0
ZSgpCit7CisgICAgbV9wcml2YXRlLT5zZXROZWVkc0FuaW1hdGUoKTsKK30KKwordm9pZCBXZWJM
YXllclRyZWVWaWV3OjpzZXROZWVkc1JlZHJhdygpCit7CisgICAgbV9wcml2YXRlLT5zZXROZWVk
c1JlZHJhdygpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0ZSgpCit7Cisg
ICAgaWYgKENDUHJveHk6Omhhc0ltcGxUaHJlYWQoKSkKKyAgICAgICAgbV9wcml2YXRlLT5zZXRO
ZWVkc0NvbW1pdCgpOwogICAgIGVsc2UKLSAgICAgICAgbV9wcml2YXRlLT5zZXRSb290TGF5ZXIo
UGFzc1JlZlB0cjxMYXllckNocm9taXVtPigpKTsKKyAgICAgICAgbV9wcml2YXRlLT5jb21wb3Np
dGUoKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3Ojp1cGRhdGVBbmltYXRpb25zKGRvdWJs
ZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBtX3ByaXZhdGUtPnVwZGF0ZUFuaW1hdGlvbnMoZnJh
bWVCZWdpblRpbWUpOwogfQogCi1XZWJMYXllclRyZWVWaWV3OjpXZWJMYXllclRyZWVWaWV3KGNv
bnN0IFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiYgbm9kZSkKLSAgICA6IG1fcHJpdmF0ZShu
b2RlKQorYm9vbCBXZWJMYXllclRyZWVWaWV3Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpw
aXhlbHMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCiB7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29t
cG9zaXRlQW5kUmVhZGJhY2socGl4ZWxzLCByZWN0KTsKIH0KIAotV2ViTGF5ZXJUcmVlVmlldyYg
V2ViTGF5ZXJUcmVlVmlldzo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8Q0NMYXllclRyZWVI
b3N0PiYgbm9kZSkKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6ZmluaXNoQWxsUmVuZGVyaW5nKCkK
IHsKLSAgICBtX3ByaXZhdGUgPSBub2RlOwotICAgIHJldHVybiAqdGhpczsKKyAgICBtX3ByaXZh
dGUtPmZpbmlzaEFsbFJlbmRlcmluZygpOwogfQogCi1XZWJMYXllclRyZWVWaWV3OjpvcGVyYXRv
ciBQYXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4oKSBjb25zdAorV2ViR3JhcGhpY3NDb250ZXh0
M0QqIFdlYkxheWVyVHJlZVZpZXc6OmNvbnRleHQoKQogewotICAgIHJldHVybiBtX3ByaXZhdGUu
Z2V0KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdy
YXBoaWNzQ29udGV4dDNEKG1fcHJpdmF0ZS0+Y29udGV4dCgpKTsKIH0KIAotdm9pZCBXZWJMYXll
clRyZWVWaWV3OjpzZXROZWVkc1JlZHJhdygpCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6Omxvc2VD
b21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpCiB7Ci0gICAgbV9wcml2YXRlLT5zZXROZWVk
c1JlZHJhdygpOworICAgIG1fcHJpdmF0ZS0+bG9zZUNvbXBvc2l0b3JDb250ZXh0KG51bVRpbWVz
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3SW1wbC5jcHAKaW5kZXggOTgxNDc3MTE4OWJmNjlk
N2M4ZDUzNDg3YzI0OWFmMjBjMTA5ZDNkMS4uZWFhNzhkN2YwMjYxNDNhNzAzZmJlODY4YmY2MGRk
NjE4ZDBhMmFhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5
ZXJUcmVlVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxh
eWVyVHJlZVZpZXdJbXBsLmNwcApAQCAtMTAzLDIwICsxMDMsMjIgQEAgUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmNyZWF0ZUxheWVyVHJlZUhvc3RD
b250ZXh0M0QKICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFw
aGljc0NvbnRleHRGcm9tV2ViQ29udGV4dCh3ZWJDb250ZXh0LnJlbGVhc2UoKSwgYXR0cmlidXRl
cywgMCwgc3R5bGUsIHVzYWdlKTsKIH0KIAotdm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlk
Q29tbWl0QW5kRHJhd0ZyYW1lKCkKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRpZFJlY3Jl
YXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykKIHsKLSAgICAvLyBGSVhNRTogcm91dGUg
dGhpcyB1cCB0byB0aGUgV2ViTGF5ZXJUcmVlVmlldyBjbGllbnQKKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIG1fY2xpZW50LT5kaWRSZWJpbmRHcmFwaGljc0NvbnRleHQoc3VjY2Vzcyk7CiB9
CiAKLXZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKQor
dm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkKIHsKLSAg
ICAvLyBGSVhNRTogcm91dGUgdGhpcyB1cCB0byB0aGUgV2ViTGF5ZXJUcmVlVmlldyBjbGllbnQK
KyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDb21taXRBbmREcmF3RnJh
bWUoKTsKIH0KIAotdm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGlj
c0NvbnRleHQoYm9vbCBzdWNjZXNzKQordm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkQ29t
cGxldGVTd2FwQnVmZmVycygpCiB7CiAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVu
dC0+ZGlkUmViaW5kR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3MpOworICAgICAgICBtX2NsaWVudC0+
ZGlkQ29tcGxldGVTd2FwQnVmZmVycygpOwogfQogCiB2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBs
OjpzY2hlZHVsZUNvbXBvc2l0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5jcHAKaW5kZXggZWE0YzI2MzBkOTdhMjMwYjg2ZDAzZTcwOTE1ZDJhMjNhNGU2ZmU0MC4u
NmFkZGQ4MGE3ODJmNzE4NTA2M2QyMjZlMjBhMjYwMmViMzdjNGE1ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgIkF1dG9maWxsUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5o
IgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdENocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NQ
cm94eS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1
ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkBAIC0xMjMsNiArMTI0LDggQEAKICNp
bmNsdWRlICJXZWJJbnB1dEV2ZW50Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIldlYktpdC5oIgog
I2luY2x1ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgorI2luY2x1ZGUgInBs
YXRmb3JtL1dlYkxheWVyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlldy5o
IgogI2luY2x1ZGUgIldlYk1lZGlhUGxheWVyQWN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViTm9kZS5o
IgogI2luY2x1ZGUgIldlYlBsdWdpbi5oIgpAQCAtMTM3LDcgKzE0MCw2IEBACiAjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViVmVjdG9yLmgiCiAj
aW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgotI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNs
dWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTYyNiw4ICs2MjgsOCBAQCBib29sIFdlYlZpZXdJ
bXBsOjpnZXN0dXJlRXZlbnQoY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBldmVudCkKIAogdm9pZCBX
ZWJWaWV3SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9s
bCwgYm9vbCB1c2VBbmNob3IsIGZsb2F0IG5ld1NjYWxlLCBkb3VibGUgZHVyYXRpb25TZWMpCiB7
Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zdGFy
dFBhZ2VTY2FsZUFuaW1hdGlvbihJbnRTaXplKHNjcm9sbC54KCksIHNjcm9sbC55KCkpLCB1c2VB
bmNob3IsIG5ld1NjYWxlLCBkdXJhdGlvblNlYyk7CisgICAgaWYgKCFtX2xheWVyVHJlZVZpZXcu
aXNOdWxsKCkpCisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5zdGFydFBhZ2VTY2FsZUFuaW1hdGlv
bihzY3JvbGwsIHVzZUFuY2hvciwgbmV3U2NhbGUsIGR1cmF0aW9uU2VjKTsKIH0KICNlbmRpZgog
CkBAIC0xMjc1LDcgKzEyNzcsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlKGRvdWJsZSBm
cmFtZUJlZ2luVGltZSkKICAgICAvLyBJbiBjb21wb3NpdGVkIG1vZGUsIHdlIGFsd2F5cyBnbyB0
aHJvdWdoIHRoZSBjb21wb3NpdG9yIHNvIGl0IGNhbiBhcHBseQogICAgIC8vIGFwcHJvcHJpYXRl
IGZsb3ctY29udHJvbCBtZWNoYW5pc21zLgogICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUoKSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVBbmltYXRpb25zKGZy
YW1lQmVnaW5UaW1lKTsKKyAgICAgICAgbV9sYXllclRyZWVWaWV3LnVwZGF0ZUFuaW1hdGlvbnMo
ZnJhbWVCZWdpblRpbWUpOwogICAgIGVsc2UKICNlbmRpZgogICAgICAgICB1cGRhdGVBbmltYXRp
b25zKGZyYW1lQmVnaW5UaW1lKTsKQEAgLTEzMjMsNiArMTMyNSw3IEBAIHZvaWQgV2ViVmlld0lt
cGw6OmxheW91dCgpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBXZWJW
aWV3SW1wbDo6ZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkp
OwogI2lmIFVTRShTS0lBKQogICAgIFBsYXRmb3JtQ29udGV4dFNraWEgY29udGV4dChjYW52YXMp
OwogCkBAIC0xMzQxLDcgKzEzNDQsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb1BpeGVsUmVhZGJh
Y2tUb0NhbnZhcyhXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgSW50UmVjdCYgcmVjdAogICAgIE93
blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShyZWN0LnNp
emUoKSkpOwogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHBpeGVsQXJyYXkoQnl0ZUFycmF5OjpjcmVh
dGUocmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpKTsKICAgICBpZiAoaW1hZ2VCdWZm
ZXIgJiYgcGl4ZWxBcnJheSkgewotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0ZUFu
ZFJlYWRiYWNrKHBpeGVsQXJyYXktPmRhdGEoKSwgaW52ZXJ0UmVjdCk7CisgICAgICAgIG1fbGF5
ZXJUcmVlVmlldy5jb21wb3NpdGVBbmRSZWFkYmFjayhwaXhlbEFycmF5LT5kYXRhKCksIGludmVy
dFJlY3QpOwogICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KFByZW11bHRpcGxpZWQs
IHBpeGVsQXJyYXkuZ2V0KCksIHJlY3Quc2l6ZSgpLCBJbnRSZWN0KEludFBvaW50KCksIHJlY3Qu
c2l6ZSgpKSwgSW50UG9pbnQoKSk7CiAgICAgICAgIGdjLnNhdmUoKTsKICAgICAgICAgZ2MudHJh
bnNsYXRlKEludFNpemUoMCwgYml0bWFwSGVpZ2h0KSk7CkBAIC0xMzYzLDcgKzEzNjYsNyBAQCB2
b2lkIFdlYlZpZXdJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYg
cmVjdCkKICAgICAgICAgaWYgKGNhbnZhcykgewogICAgICAgICAgICAgLy8gQ2xpcCByZWN0IHRv
IHRoZSBjb25maW5lcyBvZiB0aGUgcm9vdExheWVyVGV4dHVyZS4KICAgICAgICAgICAgIEludFJl
Y3QgcmVzaXplUmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJlc2l6ZVJlY3QuaW50ZXJzZWN0KElu
dFJlY3QoSW50UG9pbnQoMCwgMCksIG1fbGF5ZXJUcmVlSG9zdC0+dmlld3BvcnRTaXplKCkpKTsK
KyAgICAgICAgICAgIHJlc2l6ZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCks
IG1fbGF5ZXJUcmVlVmlldy52aWV3cG9ydFNpemUoKSkpOwogICAgICAgICAgICAgZG9QaXhlbFJl
YWRiYWNrVG9DYW52YXMoY2FudmFzLCByZXNpemVSZWN0KTsKICAgICAgICAgfQogI2VuZGlmCkBA
IC0xMzkzLDcgKzEzOTYsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjb21wb3NpdGUoYm9vbCkKIHsK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKENDUHJveHk6Omhhc0lt
cGxUaHJlYWQoKSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc1JlZHJhdygpOwor
ICAgICAgICBtX2xheWVyVHJlZVZpZXcuc2V0TmVlZHNSZWRyYXcoKTsKICAgICBlbHNlIHsKICAg
ICAgICAgQVNTRVJUKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKTsKICAgICAgICAg
aWYgKCFwYWdlKCkpCkBAIC0xNDAyLDcgKzE0MDUsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjb21w
b3NpdGUoYm9vbCkKICAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzKQogICAgICAgICAgICAgbV9w
YWdlT3ZlcmxheXMtPnVwZGF0ZSgpOwogCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9z
aXRlKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5jb21wb3NpdGUoKTsKICAgICB9CiAjZW5k
aWYKIH0KQEAgLTE0MTAsMTYgKzE0MTMsMTYgQEAgdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRl
KGJvb2wpCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXROZWVkc1JlZHJhdygpCiB7CiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX2xheWVyVHJlZUhvc3QgJiYgaXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0
TmVlZHNSZWRyYXcoKTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVlVmlldy5pc051bGwoKSAmJiBpc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkKKyAgICAgICAgbV9sYXllclRyZWVWaWV3LnNl
dE5lZWRzUmVkcmF3KCk7CiAjZW5kaWYKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6bG9zZUNvbXBv
c2l0b3JDb250ZXh0KGludCBudW1UaW1lcykKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCi0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5sb3NlQ29tcG9zaXRvckNvbnRleHQobnVtVGltZXMpOworICAgIGlmICghbV9sYXllclRyZWVW
aWV3LmlzTnVsbCgpKQorICAgICAgICBtX2xheWVyVHJlZVZpZXcubG9zZUNvbXBvc2l0b3JDb250
ZXh0KG51bVRpbWVzKTsKICNlbmRpZgogfQogCkBAIC0yMzAxLDggKzIzMDQsOCBAQCBib29sIFdl
YlZpZXdJbXBsOjpjb21wdXRlUGFnZVNjYWxlRmFjdG9yTGltaXRzKCkKIAogICAgIGZsb2F0IGNs
YW1wZWRTY2FsZSA9IGNsYW1wUGFnZVNjYWxlRmFjdG9yVG9MaW1pdHMocGFnZVNjYWxlRmFjdG9y
KCkpOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAobV9sYXllclRy
ZWVIb3N0KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExp
bWl0cyhjbGFtcGVkU2NhbGUsIG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvciwgbV9tYXhpbXVtUGFn
ZVNjYWxlRmFjdG9yKTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVlVmlldy5pc051bGwoKSkKKyAgICAg
ICAgbV9sYXllclRyZWVWaWV3LnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cyhjbGFtcGVkU2Nh
bGUsIG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvciwgbV9tYXhpbXVtUGFnZVNjYWxlRmFjdG9yKTsK
ICNlbmRpZgogICAgIGlmIChjbGFtcGVkU2NhbGUgIT0gcGFnZVNjYWxlRmFjdG9yKCkpIHsKICAg
ICAgICAgc2V0UGFnZVNjYWxlRmFjdG9yUHJlc2VydmluZ1Njcm9sbE9mZnNldChjbGFtcGVkU2Nh
bGUpOwpAQCAtMjkyOCwxNyArMjkzMSwxMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjphZGRQYWdlT3Zl
cmxheShXZWJQYWdlT3ZlcmxheSogb3ZlcmxheSwgaW50IHpPcmRlcikKICAgICAgICAgbV9wYWdl
T3ZlcmxheXMgPSBQYWdlT3ZlcmxheUxpc3Q6OmNyZWF0ZSh0aGlzKTsKIAogICAgIG1fcGFnZU92
ZXJsYXlzLT5hZGQob3ZlcmxheSwgek9yZGVyKTsKLSAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3Bs
YXkoKTsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6cmVtb3ZlUGFnZU92ZXJsYXkoV2ViUGFnZU92
ZXJsYXkqIG92ZXJsYXkpCiB7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlzICYmIG1fcGFnZU92ZXJs
YXlzLT5yZW1vdmUob3ZlcmxheSkpIHsKLSAgICAgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5
KCk7Ci0KLSAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzLT5lbXB0eSgpKQotICAgICAgICAgICAg
bV9wYWdlT3ZlcmxheXMgPSBudWxscHRyOwotICAgIH0KKyAgICBpZiAobV9wYWdlT3ZlcmxheXMg
JiYgbV9wYWdlT3ZlcmxheXMtPnJlbW92ZShvdmVybGF5KSAmJiBtX3BhZ2VPdmVybGF5cy0+ZW1w
dHkoKSkKKyAgICAgICAgbV9wYWdlT3ZlcmxheXMgPSBudWxscHRyOwogfQogCiB2b2lkIFdlYlZp
ZXdJbXBsOjpzZXRPdmVybGF5TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXIpCkBA
IC0zMDQ2LDI5ICszMDQ0LDMxIEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RHcmFwaGljc0xh
eWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAgICAgICB9CiAgICAgICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRIb3N0LT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7CiAgICAgfQotICAg
IGlmIChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExh
eWVyKGxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IDApOworCisgICAgaWYgKGxheWVy
KQorICAgICAgICBtX3Jvb3RMYXllciA9IFdlYkxheWVyKGxheWVyLT5wbGF0Zm9ybUxheWVyKCkp
OworCisgICAgaWYgKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpCisgICAgICAgIG1fbGF5ZXJU
cmVlVmlldy5zZXRSb290TGF5ZXIobGF5ZXIgPyAmbV9yb290TGF5ZXIgOiAwKTsKIAogICAgIElu
dFJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKICAg
ICBpZiAoIW1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKQogICAgICAgICBtX2NsaWVu
dC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQogCi12b2lkIFdlYlZpZXdJbXBs
OjpzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKQordm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVD
b21wb3NpdGluZ0xheWVyU3luYygpCiB7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdCgpOworICAgIG1fbGF5ZXJUcmVlVmll
dy5zZXROZWVkc1JlZHJhdygpOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5
ZXJSZWN0KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCkKK3ZvaWQgV2ViVmlld0ltcGw6OnNjcm9sbFJvb3RMYXllclJlY3QoY29uc3QgSW50U2l6ZSYs
IGNvbnN0IEludFJlY3QmKQogewogICAgIHVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7Ci0gICAg
c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OmludmFs
aWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKG1f
bGF5ZXJUcmVlSG9zdCk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpOwog
CiAgICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMwNzcsNyArMzA3Nyw2IEBA
IHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCiAgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSB2aWV3LT53aW5kb3dUb0NvbnRlbnRzKHJl
Y3QpOwogICAgIHVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7CiAgICAgbV9ub25Db21wb3NpdGVk
Q29udGVudEhvc3QtPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7Ci0gICAgc2V0Um9vdExheWVy
TmVlZHNEaXNwbGF5KCk7CiB9CiAKIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCogV2ViVmlld0lt
cGw6Om5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCgpCkBAIC0zMDkwLDggKzMwODksOCBAQCB2b2lk
IFdlYlZpZXdJbXBsOjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7CiAgICAgaWYgKGlzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAgICAgICAgIGlmIChDQ1Byb3h5OjpoYXNJbXBsVGhy
ZWFkKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOwotICAgICAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0FuaW1hdGUoKTsKKyAgICAgICAgICAgIEFTU0VS
VCghbV9sYXllclRyZWVWaWV3LmlzTnVsbCgpKTsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlVmll
dy5zZXROZWVkc0FuaW1hdGUoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2NsaWVu
dC0+c2NoZWR1bGVBbmltYXRpb24oKTsKICAgICB9IGVsc2UKQEAgLTMxNDQsMjYgKzMxNDMsMjYg
QEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJv
b2wgYWN0aXZlKQogICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IGZh
bHNlOwogICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbmlzaCBhbGwgR0wgcmVuZGVyaW5nIGJlZm9y
ZSBzZW5kaW5nIGRpZERlYWN0aXZhdGVDb21wb3NpdG9yKCkgdG8gcHJldmVudAogICAgICAgICAv
LyBmbGlja2VyaW5nIHdoZW4gY29tcG9zaXRpbmcgdHVybnMgb2ZmLgotICAgICAgICBpZiAobV9s
YXllclRyZWVIb3N0KQotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5maW5pc2hBbGxSZW5k
ZXJpbmcoKTsKKyAgICAgICAgaWYgKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpCisgICAgICAg
ICAgICBtX2xheWVyVHJlZVZpZXcuZmluaXNoQWxsUmVuZGVyaW5nKCk7CiAgICAgICAgIG1fY2xp
ZW50LT5kaWREZWFjdGl2YXRlQ29tcG9zaXRvcigpOwotICAgIH0gZWxzZSBpZiAobV9sYXllclRy
ZWVIb3N0KSB7CisgICAgfSBlbHNlIGlmICghbV9sYXllclRyZWVWaWV3LmlzTnVsbCgpKSB7CiAg
ICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKICAgICAgICAg
dXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKTsKIAotICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZh
dGVDb21wb3NpdG9yKG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRvcklkZW50aWZpZXIoKSk7Cisg
ICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUNvbXBvc2l0b3IobV9sYXllclRyZWVWaWV3LmNv
bXBvc2l0b3JJZGVudGlmaWVyKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFRSQUNFX0VWRU5U
KCJXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKHRydWUpIiwg
dGhpcywgMCk7CiAKLSAgICAgICAgV2ViQ29yZTo6Q0NTZXR0aW5ncyBjY1NldHRpbmdzOwotICAg
ICAgICBjY1NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+
YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpOwotICAgICAgICBjY1NldHRpbmdzLmNvbXBvc2l0
ZU9mZnNjcmVlbiA9IHNldHRpbmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQoKTsKLSAg
ICAgICAgY2NTZXR0aW5ncy5zaG93RlBTQ291bnRlciA9IHNldHRpbmdzKCktPnNob3dGUFNDb3Vu
dGVyKCk7Ci0gICAgICAgIGNjU2V0dGluZ3Muc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gc2V0dGlu
Z3MoKS0+c2hvd1BsYXRmb3JtTGF5ZXJUcmVlKCk7CisgICAgICAgIFdlYkxheWVyVHJlZVZpZXc6
OlNldHRpbmdzIGxheWVyVHJlZVZpZXdTZXR0aW5nczsKKyAgICAgICAgbGF5ZXJUcmVlVmlld1Nl
dHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0
ZWREcmF3aW5nRW5hYmxlZCgpOworICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3MuY29tcG9z
aXRlT2Zmc2NyZWVuID0gc2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZCgpOwor
ICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3Muc2hvd0ZQU0NvdW50ZXIgPSBzZXR0aW5ncygp
LT5zaG93RlBTQ291bnRlcigpOworICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3Muc2hvd1Bs
YXRmb3JtTGF5ZXJUcmVlID0gc2V0dGluZ3MoKS0+c2hvd1BsYXRmb3JtTGF5ZXJUcmVlKCk7CiAK
LSAgICAgICAgY2NTZXR0aW5ncy5wZXJUaWxlUGFpbnRpbmcgPSBwYWdlKCktPnNldHRpbmdzKCkt
PnBlclRpbGVEcmF3aW5nRW5hYmxlZCgpOwotICAgICAgICBjY1NldHRpbmdzLnBhcnRpYWxTd2Fw
RW5hYmxlZCA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+cGFydGlhbFN3YXBFbmFibGVkKCk7Ci0gICAg
ICAgIGNjU2V0dGluZ3MudGhyZWFkZWRBbmltYXRpb25FbmFibGVkID0gcGFnZSgpLT5zZXR0aW5n
cygpLT50aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQoKTsKKyAgICAgICAgbGF5ZXJUcmVlVmlld1Nl
dHRpbmdzLnBlclRpbGVQYWludGluZyA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+cGVyVGlsZURyYXdp
bmdFbmFibGVkKCk7CisgICAgICAgIGxheWVyVHJlZVZpZXdTZXR0aW5ncy5wYXJ0aWFsU3dhcEVu
YWJsZWQgPSBwYWdlKCktPnNldHRpbmdzKCktPnBhcnRpYWxTd2FwRW5hYmxlZCgpOworICAgICAg
ICBsYXllclRyZWVWaWV3U2V0dGluZ3MudGhyZWFkZWRBbmltYXRpb25FbmFibGVkID0gcGFnZSgp
LT5zZXR0aW5ncygpLT50aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQoKTsKIAogICAgICAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdCA9IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRl
KFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSk7CiAgICAgICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRTaG93RGVidWdCb3JkZXJzKHBhZ2UoKS0+c2V0dGlu
Z3MoKS0+c2hvd0RlYnVnQm9yZGVycygpKTsKQEAgLTMxNzEsMTcgKzMxNzAsMTYgQEAgdm9pZCBX
ZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZl
KQogICAgICAgICBpZiAocGFnZSgpICYmIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKSkKICAg
ICAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRCYWNrZ3JvdW5kQ29sb3Io
cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5kb2N1bWVudEJhY2tncm91bmRDb2xvcigpKTsK
IAotICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlz
LCBjY1NldHRpbmdzKTsKLSAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgewotICAgICAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxl
RmFjdG9yKCksIG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvciwgbV9tYXhpbXVtUGFnZVNjYWxlRmFj
dG9yKTsKKyAgICAgICAgbV9sYXllclRyZWVWaWV3LmluaXRpYWxpemUodGhpcywgbV9yb290TGF5
ZXIsIGxheWVyVHJlZVZpZXdTZXR0aW5ncyk7CisgICAgICAgIGlmICghbV9sYXllclRyZWVWaWV3
LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBtX2xheWVyVHJlZVZpZXcuc2V0UGFnZVNjYWxlRmFj
dG9yQW5kTGltaXRzKHBhZ2VTY2FsZUZhY3RvcigpLCBtX21pbmltdW1QYWdlU2NhbGVGYWN0b3Is
IG1fbWF4aW11bVBhZ2VTY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICB1cGRhdGVMYXllclRyZWVW
aWV3cG9ydCgpOwotICAgICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQ29tcG9zaXRvciht
X2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0b3JJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgbV9j
bGllbnQtPmRpZEFjdGl2YXRlQ29tcG9zaXRvcihtX2xheWVyVHJlZVZpZXcuY29tcG9zaXRvcklk
ZW50aWZpZXIoKSk7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSA9IHRydWU7CiAgICAgICAgICAgICBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZCA9IGZhbHNl
OwogICAgICAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzKQogICAgICAgICAgICAgICAgIG1fcGFn
ZU92ZXJsYXlzLT51cGRhdGUoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdC5jbGVhcigpOwogICAgICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhv
c3QuY2xlYXIoKTsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
ID0gZmFsc2U7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRGVhY3RpdmF0ZUNvbXBvc2l0b3Io
KTsKQEAgLTMxOTQsMTkgKzMxOTIsMjEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogCiAjZW5kaWYKIAotUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gV2ViVmlld0ltcGw6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250
ZXh0M0QoKQorV2ViR3JhcGhpY3NDb250ZXh0M0QqIFdlYlZpZXdJbXBsOjpjcmVhdGVDb250ZXh0
M0QoKQogewotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fdGVtcG9y
YXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5yZWxlYXNlKCk7Ci0gICAgaWYgKCFjb250ZXh0
KSB7CisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIHdlYkNvbnRleHQgPSBtX3RlbXBvcmFyeU9u
c2NyZWVuR3JhcGhpY3NDb250ZXh0M0QubGVha1B0cigpOworICAgIGlmICghd2ViQ29udGV4dCkg
eworICAgICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQ7CiAgICAgICAgIGlm
IChDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkpCiAgICAgICAgICAgICBjb250ZXh0ID0gR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGb3JBbm90aGVyVGhyZWFk
KGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFw
aGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShnZXRDb21w
b3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICAgICAgd2ViQ29udGV4dCA9
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKGNv
bnRleHQucmVsZWFzZSgpLmxlYWtSZWYoKSk7CiAgICAgfQotICAgIHJldHVybiBjb250ZXh0Owor
ICAgIHJldHVybiB3ZWJDb250ZXh0OwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjphcHBseVNjcm9s
bEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBwYWdlU2NhbGVEZWx0
YSkKK3ZvaWQgV2ViVmlld0ltcGw6OmFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViU2l6ZSYg
c2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZURlbHRhKQogewogICAgIGlmICghbWFpbkZyYW1l
SW1wbCgpIHx8ICFtYWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpKQogICAgICAgICByZXR1cm47
CkBAIC0zMjE5LDggKzMyMTksOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjphcHBseVNjcm9sbEFuZFNj
YWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBmbG9hdCBwYWdlU2NhbAogICAgICAgICAv
LyBpbiB0aGUgb2xkIGNvb3JkaW5hdGUgc3BhY2UsIHNvIHdlIGZpcnN0IG5lZWQgdG8gbXVsdGlw
bHkgdGhlbQogICAgICAgICAvLyBieSB0aGUgcGFnZSBzY2FsZSBkZWx0YS4KICAgICAgICAgV2Vi
U2l6ZSBzY3JvbGxPZmZzZXQgPSBtYWluRnJhbWUoKS0+c2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAg
IHNjcm9sbE9mZnNldC53aWR0aCArPSBzY3JvbGxEZWx0YS53aWR0aCgpOwotICAgICAgICBzY3Jv
bGxPZmZzZXQuaGVpZ2h0ICs9IHNjcm9sbERlbHRhLmhlaWdodCgpOworICAgICAgICBzY3JvbGxP
ZmZzZXQud2lkdGggKz0gc2Nyb2xsRGVsdGEud2lkdGg7CisgICAgICAgIHNjcm9sbE9mZnNldC5o
ZWlnaHQgKz0gc2Nyb2xsRGVsdGEuaGVpZ2h0OwogICAgICAgICBXZWJQb2ludCBzY2FsZWRTY3Jv
bGxPZmZzZXQoc2Nyb2xsT2Zmc2V0LndpZHRoICogcGFnZVNjYWxlRGVsdGEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQuaGVpZ2h0ICogcGFnZVNjYWxl
RGVsdGEpOwogICAgICAgICBzZXRQYWdlU2NhbGVGYWN0b3IocGFnZVNjYWxlRmFjdG9yKCkgKiBw
YWdlU2NhbGVEZWx0YSwgc2NhbGVkU2Nyb2xsT2Zmc2V0KTsKQEAgLTMyMzksNyArMzIzOSw3IEBA
IHZvaWQgV2ViVmlld0ltcGw6OmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKQogICAgICAgICBtX2Ns
aWVudC0+ZGlkQ29tcGxldGVTd2FwQnVmZmVycygpOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpk
aWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCit2b2lkIFdlYlZpZXdJbXBs
OjpkaWRSZWJpbmRHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKQogewogCiAgICAgLy8gU3dp
dGNoIGJhY2sgdG8gc29mdHdhcmUgcmVuZGVyaW5nIG1vZGUsIGlmIG5lY2Vzc2FyeQpAQCAtMzI2
Niw3ICszMjY2LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUoKQogCiB2
b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllclRyZWVWaWV3cG9ydCgpCiB7Ci0gICAgaWYgKCFw
YWdlKCkgfHwgIW1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0IHx8ICFtX2xheWVyVHJlZUhvc3Qp
CisgICAgaWYgKCFwYWdlKCkgfHwgIW1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0IHx8IG1fbGF5
ZXJUcmVlVmlldy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRnJhbWVWaWV3KiB2
aWV3ID0gcGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpOwpAQCAtMzI4MiwzMCArMzI4MiwzMSBA
QCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllclRyZWVWaWV3cG9ydCgpCiAgICAgICAgIGxh
eWVyQWRqdXN0WCA9IC12aWV3LT5jb250ZW50c1NpemUoKS53aWR0aCgpICsgdmlldy0+dmlzaWJs
ZUNvbnRlbnRSZWN0KGZhbHNlKS53aWR0aCgpOwogICAgIH0KICAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdC0+c2V0Vmlld3BvcnQodmlzaWJsZVJlY3Quc2l6ZSgpLCB2aWV3LT5jb250ZW50
c1NpemUoKSwgc2Nyb2xsLCBwYWdlU2NhbGVGYWN0b3IoKSwgbGF5ZXJBZGp1c3RYKTsKLSAgICBt
X2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6ZSh2aXNpYmxlUmVjdC5zaXplKCkpOwotICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0UGFnZVNjYWxlRmFjdG9yQW5kTGltaXRzKHBhZ2VTY2FsZUZh
Y3RvcigpLCBtX21pbmltdW1QYWdlU2NhbGVGYWN0b3IsIG1fbWF4aW11bVBhZ2VTY2FsZUZhY3Rv
cik7CisgICAgbV9sYXllclRyZWVWaWV3LnNldFZpZXdwb3J0U2l6ZSh2aXNpYmxlUmVjdC5zaXpl
KCkpOworICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFn
ZVNjYWxlRmFjdG9yKCksIG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvciwgbV9tYXhpbXVtUGFnZVNj
YWxlRmFjdG9yKTsKIH0KIAogV2ViR3JhcGhpY3NDb250ZXh0M0QqIFdlYlZpZXdJbXBsOjpncmFw
aGljc0NvbnRleHQzRCgpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
IGlmIChtX3BhZ2UtPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkg
JiYgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7Ci0gICAgICAgIGlmIChtX2xheWVy
VHJlZUhvc3QpIHsKLSAgICAgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiB3ZWJDb250ZXh0
ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0Qo
bV9sYXllclRyZWVIb3N0LT5jb250ZXh0KCkpOwotICAgICAgICAgICAgaWYgKHdlYkNvbnRleHQg
JiYgIXdlYkNvbnRleHQtPmlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
d2ViQ29udGV4dDsKKyAgICAgICAgaWYgKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpIHsKKyAg
ICAgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9sYXllclRyZWVWaWV3
LmNvbnRleHQoKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0ICYmICFjb250ZXh0LT5pc0NvbnRl
eHRMb3N0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRCkgewotICAgICAg
ICAgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIHdlYkNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChtX3RlbXBvcmFyeU9uc2NyZWVu
R3JhcGhpY3NDb250ZXh0M0QuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKHdlYkNvbnRleHQgJiYg
IXdlYkNvbnRleHQtPmlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gd2Vi
Q29udGV4dDsKKyAgICAgICAgICAgIGlmIChtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250
ZXh0M0QgJiYgIW1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC0+aXNDb250ZXh0
TG9zdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhp
Y3NDb250ZXh0M0QuZ2V0KCk7CiAgICAgICAgIH0KKyAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0OwogICAgICAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQot
ICAgICAgICAgICAgbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNzQ29udGV4dDNEID0gR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGb3JBbm90aGVyVGhyZWFk
KGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2UtPmNocm9tZSgpLCBHcmFw
aGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpOworICAgICAgICAgICAg
Y29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0
Rm9yQW5vdGhlclRocmVhZChnZXRDb21wb3NpdG9yQ29udGV4dEF0dHJpYnV0ZXMoKSwgbV9wYWdl
LT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNz
Q29udGV4dDNEID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShnZXRDb21wb3NpdG9yQ29udGV4
dEF0dHJpYnV0ZXMoKSwgbV9wYWdlLT5jaHJvbWUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
ckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICAgICAgICAgIGNvbnRleHQgPSBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlKGdldENvbXBvc2l0b3JDb250ZXh0QXR0cmlidXRlcygpLCBtX3BhZ2Ut
PmNocm9tZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cp
OwogCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJH
cmFwaGljc0NvbnRleHQzRChtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QuZ2V0
KCkpOworICAgICAgICBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QgPSBhZG9w
dFB0cihHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQz
RChjb250ZXh0LnJlbGVhc2UoKS5sZWFrUmVmKCkpKTsKKyAgICAgICAgcmV0dXJuIG1fdGVtcG9y
YXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5nZXQoKTsKICAgICB9CiAjZW5kaWYKICAgICBy
ZXR1cm4gMDsKQEAgLTMzMjgsNyArMzMyOSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldFZpc2li
aWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0ZSwKICAgICAg
ICAgYm9vbCB2aXNpYmxlID0gdmlzaWJpbGl0eVN0YXRlID09IFdlYlBhZ2VWaXNpYmlsaXR5U3Rh
dGVWaXNpYmxlOwogICAgICAgICBpZiAoIXZpc2libGUpCiAgICAgICAgICAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC0+cHJvdGVjdFZpc2libGVUaWxlVGV4dHVyZXMoKTsKLSAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5zZXRWaXNpYmxlKHZpc2libGUpOworICAgICAgICBtX2xheWVyVHJl
ZVZpZXcuc2V0VmlzaWJsZSh2aXNpYmxlKTsKICAgICB9CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IDM1NThjMWRmNjQ5MTEwNzU3ZmQwNzhh
NWI5ZjExNDMzOWFkYTA5ZmEuLjJjN2FhMDdiMzVkMjJlZmIxOTA0OTY1NTBhMWIwODA5MTQxYjlh
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMzIsNiAr
MzIsOSBAQAogI2RlZmluZSBXZWJWaWV3SW1wbF9oCiAKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9u
UG9saWN5LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXIuaCIKKyNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJMYXllclRyZWVWaWV3LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJUcmVl
Vmlld0NsaWVudC5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBvaW50LmgiCiAjaW5jbHVkZSAi
cGxhdGZvcm0vV2ViUmVjdC5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dlYlNpemUuaCIKQEAgLTUw
LDcgKzUzLDYgQEAKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgiCiAjaW5j
bHVkZSAiUGFnZU92ZXJsYXlMaXN0LmgiCiAjaW5jbHVkZSAiVXNlck1lZGlhQ2xpZW50SW1wbC5o
IgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC05NCw3ICs5Niw3IEBAIGNsYXNz
IFdlYk1vdXNlV2hlZWxFdmVudDsKIGNsYXNzIFdlYlNldHRpbmdzSW1wbDsKIGNsYXNzIFdlYlRv
dWNoRXZlbnQ7CiAKLWNsYXNzIFdlYlZpZXdJbXBsIDogcHVibGljIFdlYlZpZXcsIHB1YmxpYyBX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDbGllbnQsIHB1YmxpYyBSZWZDb3VudGVkPFdlYlZpZXdJ
bXBsPiB7CitjbGFzcyBXZWJWaWV3SW1wbCA6IHB1YmxpYyBXZWJWaWV3LCBwdWJsaWMgV2ViTGF5
ZXJUcmVlVmlld0NsaWVudCwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKIHB1Ymxp
YzoKICAgICBlbnVtIEF1dG9ab29tVHlwZSB7CiAgICAgICAgIERvdWJsZVRhcCwKQEAgLTI0Niwx
MyArMjQ4LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWRkUGFnZU92ZXJsYXkoV2Vi
UGFnZU92ZXJsYXkqLCBpbnQgLyogek9yZGVyICovKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
UGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJsYXkqKTsKIAotICAgIC8vIENDTGF5ZXJUcmVlSG9zdENs
aWVudAorICAgIC8vIFdlYkxheWVyVHJlZVZpZXdDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlQW5pbWF0aW9ucyhkb3VibGUgZnJhbWVCZWdpblRpbWUpOwotICAgIHZpcnR1YWwgdm9pZCBh
cHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBmbG9hdCk7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXll
clRyZWVIb3N0Q29udGV4dDNEKCk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2Nh
bGUoY29uc3QgV2ViU2l6ZSYsIGZsb2F0KTsKKyAgICB2aXJ0dWFsIFdlYkdyYXBoaWNzQ29udGV4
dDNEKiBjcmVhdGVDb250ZXh0M0QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmViaW5kR3JhcGhp
Y3NDb250ZXh0KGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUo
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpOwotICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpOwogICAgIHZp
cnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpOwogCiAgICAgLy8gV2ViVmlld0ltcGwKQEAg
LTQzNCw3ICs0MzYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhbGxvd3NBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCk7CiAgICAgYm9vbCBwYWdlSGFzUlRMU3R5bGUoKSBjb25zdDsKICAgICB2b2lkIHNl
dFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2b2lkIHNl
dFJvb3RMYXllck5lZWRzRGlzcGxheSgpOworICAgIHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xh
eWVyU3luYygpOwogICAgIHZvaWQgc2Nyb2xsUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwog
ICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OwogICAgIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCogbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0
KCk7CkBAIC02ODUsNyArNjg3LDggQEAgcHJpdmF0ZToKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Jvb3RMYXllclNjcm9sbERhbWFnZTsK
ICAgICBPd25QdHI8Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0PiBtX25vbkNvbXBvc2l0ZWRDb250
ZW50SG9zdDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0PiBtX2xheWVyVHJl
ZUhvc3Q7CisgICAgV2ViTGF5ZXJUcmVlVmlldyBtX2xheWVyVHJlZVZpZXc7CisgICAgV2ViTGF5
ZXIgbV9yb290TGF5ZXI7CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV9yb290R3JhcGhp
Y3NMYXllcjsKICAgICBib29sIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlOwogICAg
IGJvb2wgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQ7CkBAIC03MDAsNyArNzAzLDcgQEAgcHJp
dmF0ZToKICAgICAvLyBJZiB3ZSBhdHRlbXB0IHRvIGZldGNoIHRoZSBvbi1zY3JlZW4gR3JhcGhp
Y3NDb250ZXh0M0QgYmVmb3JlCiAgICAgLy8gdGhlIGNvbXBvc2l0b3IgaGFzIGJlZW4gdHVybmVk
IG9uLCB3ZSBuZWVkIHRvIGluc3RhbnRpYXRlIGl0CiAgICAgLy8gZWFybHkuIFRoaXMgbWVtYmVy
IGhvbGRzIG9uIHRvIHRoZSBHQzNEIGluIHRoaXMgY2FzZS4KLSAgICBSZWZQdHI8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q+IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRDsK
KyAgICBPd25QdHI8V2ViR3JhcGhpY3NDb250ZXh0M0Q+IG1fdGVtcG9yYXJ5T25zY3JlZW5HcmFw
aGljc0NvbnRleHQzRDsKICAgICBPd25QdHI8RGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eT4g
bV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5OwogICAgIE93blB0cjxHZW9sb2NhdGlvbkNs
aWVudFByb3h5PiBtX2dlb2xvY2F0aW9uQ2xpZW50UHJveHk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcAppbmRleCBmNjFlOTg2NDg4NmViNzM1ZGVj
ZjA3ZGZlM2QxMjQxNWZmZmJiYjlhLi5kYzFkZmU1MzQyYmEwY2Y0YzIzNDdhNTliZDY2ZTY2YzM3
NTBlNWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1l
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3Qu
Y3BwCkBAIC0xODYsMjcgKzE4NiwyNyBAQCBURVNUX0YoV2ViRnJhbWVUZXN0LCBEaXZBdXRvWm9v
bVBhcmFtc1Rlc3QpCiAgICAgRVhQRUNUX0VRKHZTY3JvbGwsIHNjcm9sbC55KTsKIAogICAgIC8v
IFRlc3Qgem9vbSBvdXQgdG8gb3ZlcnZpZXcgc2NhbGUuCi0gICAgd2ViVmlld0ltcGwtPmFwcGx5
U2Nyb2xsQW5kU2NhbGUoV2ViQ29yZTo6SW50U2l6ZShzY3JvbGwueCwgc2Nyb2xsLnkpLCBzY2Fs
ZSAvIHdlYlZpZXdJbXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPmFw
cGx5U2Nyb2xsQW5kU2NhbGUoV2ViU2l6ZShzY3JvbGwueCwgc2Nyb2xsLnkpLCBzY2FsZSAvIHdl
YlZpZXdJbXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7CiAgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVT
Y2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3Vi
bGVUYXAsIHNjYWxlLCBzY3JvbGwpOwogICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBzY2FsZSk7CiAg
ICAgRVhQRUNUX0VRKFdlYlBvaW50KDAsIDApLCBzY3JvbGwpOwogCiAgICAgLy8gVGVzdHMgZm9y
IGNsYW1wZWQgc2NhbGluZy4KICAgICAvLyBUZXN0IGNsYW1wIHRvIGRldmljZSBzY2FsZToKLSAg
ICB3ZWJWaWV3SW1wbC0+YXBwbHlTY3JvbGxBbmRTY2FsZShXZWJDb3JlOjpJbnRTaXplKHNjcm9s
bC54LCBzY3JvbGwueSksIHNjYWxlIC8gd2ViVmlld0ltcGwtPnBhZ2VTY2FsZUZhY3RvcigpKTsK
KyAgICB3ZWJWaWV3SW1wbC0+YXBwbHlTY3JvbGxBbmRTY2FsZShXZWJTaXplKHNjcm9sbC54LCBz
Y3JvbGwueSksIHNjYWxlIC8gd2ViVmlld0ltcGwtPnBhZ2VTY2FsZUZhY3RvcigpKTsKICAgICB3
ZWJWaWV3SW1wbC0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoMi41KTsKICAgICB3ZWJWaWV3SW1wbC0+
Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVjdChkb3VibGVUYXBQb2ludCwgV2ViVmlld0lt
cGw6OkRvdWJsZVRhcCwgc2NhbGUsIHNjcm9sbCk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDIuNSwg
c2NhbGUpOwogCiAgICAgLy8gVGVzdCBjbGFtcCB0byBtaW5pbXVtIHNjYWxlOgotICAgIHdlYlZp
ZXdJbXBsLT5hcHBseVNjcm9sbEFuZFNjYWxlKFdlYkNvcmU6OkludFNpemUoc2Nyb2xsLngsIHNj
cm9sbC55KSwgc2NhbGUgLyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCkpOworICAgIHdl
YlZpZXdJbXBsLT5hcHBseVNjcm9sbEFuZFNjYWxlKFdlYlNpemUoc2Nyb2xsLngsIHNjcm9sbC55
KSwgc2NhbGUgLyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCkpOwogICAgIHdlYlZpZXdJ
bXBsLT5zZXRQYWdlU2NhbGVGYWN0b3JMaW1pdHMoMS41IC8gd2ViVmlld0ltcGwtPmRldmljZVNj
YWxlRmFjdG9yKCksIDQgLyB3ZWJWaWV3SW1wbC0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAg
d2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91YmxlVGFwUG9p
bnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNjYWxlLCBzY3JvbGwpOwogICAgIEVYUEVDVF9G
TE9BVF9FUSgxLjUsIHNjYWxlKTsKICAgICBFWFBFQ1RfRVEoV2ViUG9pbnQoMCwgMCksIHNjcm9s
bCk7CiAKICAgICAvLyBUZXN0IGNsYW1wIHRvIG1heGltdW0gc2NhbGU6Ci0gICAgd2ViVmlld0lt
cGwtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoV2ViQ29yZTo6SW50U2l6ZShzY3JvbGwueCwgc2Nyb2xs
LnkpLCBzY2FsZSAvIHdlYlZpZXdJbXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmll
d0ltcGwtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoV2ViU2l6ZShzY3JvbGwueCwgc2Nyb2xsLnkpLCBz
Y2FsZSAvIHdlYlZpZXdJbXBsLT5wYWdlU2NhbGVGYWN0b3IoKSk7CiAgICAgd2ViVmlld0ltcGwt
PnNldERldmljZVNjYWxlRmFjdG9yKDQpOwogICAgIHdlYlZpZXdJbXBsLT5zZXRQYWdlU2NhbGVG
YWN0b3JMaW1pdHMoMCwgMyAvIHdlYlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAg
ICB3ZWJWaWV3SW1wbC0+Y29tcHV0ZVNjYWxlQW5kU2Nyb2xsRm9ySGl0UmVjdChkb3VibGVUYXBQ
b2ludCwgV2ViVmlld0ltcGw6OkRvdWJsZVRhcCwgc2NhbGUsIHNjcm9sbCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAKaW5kZXggZTBjYWI4N2JkZjU1
YmEyOGZiNzI2NjcwOTY4MjZiMmQwM2M2N2M0Ni4uMWVlZDgxYWVhNDE2YzkwYjE0ZWVlZWM0YTNk
NzI4MTZlZDFlZTNlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9X
ZWJMYXllclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViTGF5
ZXJUZXN0LmNwcApAQCAtNTcsNiArNTcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFw
cGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgV2ViU2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHNjYWxl
RmFjdG9yKSB7IH0KICAgICB2aXJ0dWFsIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBjcmVhdGVDb250
ZXh0M0QoKSB7IHJldHVybiBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEOjpjcmVh
dGUoV2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMoKSkubGVha1B0cigpOyB9CiAgICAg
dmlydHVhbCB2b2lkIGRpZFJlYmluZEdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUoKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGlkQ29tcGxldGVTd2FwQnVmZmVycygpIHsgfQogfTsKIAogY2xhc3MgTW9ja1dlYkNv
bnRlbnRMYXllckNsaWVudCA6IHB1YmxpYyBXZWJDb250ZW50TGF5ZXJDbGllbnQgewpAQCAtNzIs
NyArNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFdlYktpdDo6V2ViQ29tcG9zaXRvcjo6aW5pdGlh
bGl6ZSgwKTsKICAgICAgICAgbV9yb290TGF5ZXIgPSBXZWJMYXllcjo6Y3JlYXRlKCk7CiAgICAg
ICAgIEVYUEVDVF9DQUxMKG1fY2xpZW50LCBzY2hlZHVsZUNvbXBvc2l0ZSgpKS5UaW1lcyhBbnlO
dW1iZXIoKSk7Ci0gICAgICAgIG1fdmlldyA9IFdlYkxheWVyVHJlZVZpZXc6OmNyZWF0ZSgmbV9j
bGllbnQsIG1fcm9vdExheWVyLCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5ncygpKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUobV92aWV3LmluaXRpYWxpemUoJm1fY2xpZW50LCBtX3Jvb3RMYXllciwg
V2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MoKSkpOwogICAgICAgICBNb2NrOjpWZXJpZnlBbmRD
bGVhckV4cGVjdGF0aW9ucygmbV9jbGllbnQpOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128803</attachid>
            <date>2012-02-24 14:08:08 -0800</date>
            <delta_ts>2012-02-24 18:33:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75591-20120224140806.patch</filename>
            <type>text/plain</type>
            <size>42066</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4ODM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDgyZGRlOWQ0YTM3NzA2NjM1MmI5NjE3YzYxNjE1NmFhYTFmZTFjMDkuLjg3MzRmZTY4NjkyMTM5
YTQzNjFlZWVmODEwZDUwMGFkM2JkZGQ4NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNzMgQEAKKzIwMTItMDItMDggIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1ha2UgV2ViVmlld0ltcGwgZGVwZW5kIG9u
IFdlYkxheWVyVHJlZVZpZXcgaW5zdGVhZCBvZiBDQ0xheWVyVHJlZUhvc3QKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTkxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjb252ZXJ0cyBXZWJWaWV3
SW1wbCBmcm9tIGRlcGVuZGluZyBvbiBDQ0xheWVyVHJlZUhvc3QgdG8gV2ViTGF5ZXJUcmVlVmll
dyBpbiBvcmRlciB0byBwcm92aWRlIGJldHRlcgorICAgICAgICBpc29sYXRpb24gYW5kIGFsbG93
IGZvciBmdXR1cmUgcmVmYWN0b3JpbmdzLiBUaGUgY2hhbmdlcyB0byBXZWJWaWV3SW1wbCBhcmUg
bW9zdGx5IG1lY2hhbmljYWwuIFRoZQorICAgICAgICBXZWJMYXllclRyZWVWaWV3IGFuZCBXZWJM
YXllclRyZWVWaWV3Q2xpZW50IGludGVyZmFjZXMgaGF2ZSBib3RoIGdyb3duIGFuZCBjaGFuZ2Vk
IHNsaWdodGx5OgorCisgICAgICAgIC0gU2V0dXAgcGF0aCBmb3IgV2ViTGF5ZXJUcmVlVmlldyBj
aGFuZ2VkIHRvIGV4cG9zZSBhbiBpbml0aWFsaXplKCkgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIGNy
ZWF0ZSgpIGZhY3RvcnkKKyAgICAgICAgZnVuY3Rpb24uIFRoZSBuZXcgbW9kZWwgaXMgdGhhdCBh
IFdlYkxheWVyVHJlZVZpZXcgd2hlbiBjb25zdHJ1Y3RlZCBpcyBpbiBhIG51bGwgc3RhdGUuIENh
bGxpbmcgaW5pdGlhbGl6ZSgpCisgICAgICAgIGF0dGVtcHRzIHRvIHJlLWluaXRpYWxpemUgdGhl
IFdMVFYsIHdoaWNoIGNhbiBlaXRoZXIgZmFpbCBvciBzdWNjZWVkLiAgQWxsIG90aGVyIGZ1bmN0
aW9ucyBtdXN0IGJlIGNhbGxlZCBvbiBhCisgICAgICAgIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXpl
ZCB2aWV3LgorCisgICAgICAgIC0gV2ViTGF5ZXJUcmVlVmlldyBleHBhbmRlZCB0byBpbmNsdWRl
IGZ1bmN0aW9uYWxpdHkgdGhhdCBDQ0xheWVyVHJlZUhvc3QgZXhwb3NlcyBidXQgV2ViTGF5ZXJU
cmVlVmlldyBkaWQgbm90LgorICAgICAgICBTb21lIG9mIHRoaXMgaXMgb25seSB2YWxpZCBmb3Ig
dGhlIHNpbmdsZSB0aHJlYWQgY2FzZSBhbmQgd2lsbCBiZSByZW1vdmVkIHdoZW4gd2UgaW52ZXJ0
IHRoZSBzY2hlZHVsaW5nIGNvbnRyb2wKKyAgICAgICAgbG9naWMsIHRoZXNlIGJpdHMgYXJlIGNv
bW1lbnRlZC4KKworICAgICAgICAtIFdlYkxheWVyVHJlZVZpZXdDbGllbnQgZXhwYW5kZWQgd2l0
aCBzb21lIGZsb3ctY29udHJvbCByZWxhdGVkIEFQSXMuCisKKyAgICAgICAgUmVmYWN0b3Igb25s
eSwgbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dl
YkxheWVyVHJlZVZpZXcuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6U2V0
dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6aXNO
dWxsKToKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5o
OgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Q2hyb21lQ2xpZW50SW1wbDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYyk6CisgICAgICAg
ICogc3JjL1dlYkxheWVyVHJlZVZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRy
ZWVWaWV3Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6
Y29tcG9zaXRvcklkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3
OjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6c2V0TmVl
ZHNBbmltYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6dXBkYXRlQW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OnNldE5lZWRzUmVk
cmF3KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6c2V0UGFnZVNjYWxlRmFj
dG9yQW5kTGltaXRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6c3RhcnRQ
YWdlU2NhbGVBbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3Ojpm
aW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3Ojpj
b250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6bG9zZUNvbXBvc2l0
b3JDb250ZXh0KToKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlld0ltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkQ29tbWl0
QW5kRHJhd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRp
ZENvbXBsZXRlU3dhcEJ1ZmZlcnMpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphbmltYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OmRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnBhaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXBv
c2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpsb3NlQ29tcG9zaXRvckNvbnRl
eHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcHV0ZVBhZ2VTY2FsZUZhY3Rv
ckxpbWl0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjphZGRQYWdlT3ZlcmxheSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZW1vdmVQYWdlT3ZlcmxheSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFJvb3RMYXllclJlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZUNvbnRleHQzRCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdJbXBsOjphcHBseVNjcm9sbEFuZFNjYWxlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmRpZFJlYmluZEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVMYXllclRyZWVWaWV3cG9ydCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpncmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpzZXRWaXNpYmlsaXR5U3RhdGUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1w
bC5oOgorICAgICAgICAqIHRlc3RzL1dlYkxheWVyVGVzdC5jcHA6CisKIDIwMTItMDItMjQgIEph
bWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1d
IFJlbW92ZSBkZXByZWNhdGVkIGFuZCB1bnVzZWQgV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmluaXRp
YWxpemUgY2FsbApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9X
ZWJMYXllclRyZWVWaWV3LmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkxh
eWVyVHJlZVZpZXcuaAppbmRleCAxN2E4NzZhOTg1MWRkZmMwY2Y5YTU2MWM5ODZhZGMyM2JiZDZh
YWI2Li42ODM3YjE5ZWNiZGQyMTc2ZGI2ZDNkMzdlYjk5NjIwMjg0YjAwNzYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXcuaAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXcuaApAQCAt
MzUsOCArMzUsMTAgQEAgc3RydWN0IENDU2V0dGluZ3M7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQg
eworY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBXZWJMYXllcjsKIGNsYXNzIFdl
YkxheWVyVHJlZVZpZXdDbGllbnQ7CitzdHJ1Y3QgV2ViUG9pbnQ7CiBzdHJ1Y3QgV2ViUmVjdDsK
IHN0cnVjdCBXZWJTaXplOwogCkBAIC01MSw3ICs1Myw5IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICwgcmVmcmVzaFJhdGUoMCkKICAgICAgICAgICAgICwgcGVyVGlsZVBhaW50aW5nKGZhbHNlKQog
ICAgICAgICAgICAgLCBwYXJ0aWFsU3dhcEVuYWJsZWQoZmFsc2UpCi0gICAgICAgICAgICAsIHRo
cmVhZGVkQW5pbWF0aW9uRW5hYmxlZChmYWxzZSkgeyB9CisgICAgICAgICAgICAsIHRocmVhZGVk
QW5pbWF0aW9uRW5hYmxlZChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CiAKICAgICAgICAg
Ym9vbCBhY2NlbGVyYXRlUGFpbnRpbmc7CiAgICAgICAgIGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVu
OwpAQCAtNjYsOCArNzAsNiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9OwogCi0gICAgV0VCS0lU
X0VYUE9SVCBzdGF0aWMgV2ViTGF5ZXJUcmVlVmlldyBjcmVhdGUoV2ViTGF5ZXJUcmVlVmlld0Ns
aWVudCosIGNvbnN0IFdlYkxheWVyJiByb290LCBjb25zdCBTZXR0aW5ncyYpOwotCiAgICAgV2Vi
TGF5ZXJUcmVlVmlldygpIHsgfQogICAgIFdlYkxheWVyVHJlZVZpZXcoY29uc3QgV2ViTGF5ZXJU
cmVlVmlldyYgbGF5ZXIpIHsgYXNzaWduKGxheWVyKTsgfQogICAgIH5XZWJMYXllclRyZWVWaWV3
KCkgeyByZXNldCgpOyB9CkBAIC03NiwxMCArNzgsNTcgQEAgcHVibGljOgogICAgICAgICBhc3Np
Z24obGF5ZXIpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQorCiAgICAgV0VCS0lUX0VY
UE9SVCB2b2lkIHJlc2V0KCk7CiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBX
ZWJMYXllclRyZWVWaWV3Jik7CiAgICAgV0VCS0lUX0VYUE9SVCBib29sIGVxdWFscyhjb25zdCBX
ZWJMYXllclRyZWVWaWV3JikgY29uc3Q7CiAKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpdmF0ZS5pc051bGwoKTsgfQorCisjZGVmaW5lIFdFQkxBWUVSVFJFRVZJRVdfSEFT
X0lOSVRJQUxJWkUKKyAgICAvLyBJbml0aWFsaXphdGlvbiBhbmQgbGlmZWN5Y2xlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBBdHRlbXB0cyB0byBpbml0
aWFsaXplIHRoaXMgV2ViTGF5ZXJUcmVlVmlldyB3aXRoIHRoZSBnaXZlbiBjbGllbnQsIHJvb3Qg
bGF5ZXIsIGFuZCBzZXR0aW5ncy4KKyAgICAvLyBJZiBpbml0aWFsaXphdGlvbiBmYWlscywgdGhp
cyB3aWxsIHJldHVybiBmYWxzZSBhbmQgLmlzTnVsbCgpIHdpbGwgcmV0dXJuIHRydWUuCisgICAg
Ly8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBtZXRob2RzIGJlbG93LgorICAgIFdFQktJVF9F
WFBPUlQgYm9vbCBpbml0aWFsaXplKFdlYkxheWVyVHJlZVZpZXdDbGllbnQqLCBjb25zdCBXZWJM
YXllciYgcm9vdCwgY29uc3QgU2V0dGluZ3MmKTsKKworICAgIC8vIFNldHMgdGhlIHJvb3Qgb2Yg
dGhlIHRyZWUuIFRoZSByb290IGlzIHNldCBieSB3YXkgb2YgdGhlIGNvbnN0cnVjdG9yLgorICAg
IC8vIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8gZXhwbGljaXRseSBzZXQgdGhlIHJvb3QgdG8g
bnVsbCB0byBicmVhaworICAgIC8vIGN5Y2xlcy4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0
Um9vdExheWVyKFdlYkxheWVyKik7CisKKyAgICAvLyBSZXR1cm5zIGEgdW5pcXVlIGlkZW50aWZp
ZXIgdGhhdCBjYW4gYmUgdXNlZCBvbiB0aGUgY29tcG9zaXRvciB0aHJlYWQgdG8gcmVxdWVzdCBh
CisgICAgLy8gV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlciBpbnN0YW5jZS4KKyAgICBXRUJLSVRf
RVhQT1JUIGludCBjb21wb3NpdG9ySWRlbnRpZmllcigpOworCisKKyAgICAvLyBWaWV3IHByb3Bl
cnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0Vmlld3BvcnRTaXplKGNvbnN0IFdlYlNpemUm
KTsKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlNpemUgdmlld3BvcnRTaXplKCkgY29uc3Q7CisKKyAg
ICAvLyBTZXRzIHdoZXRoZXIgdGhpcyB2aWV3IGlzIHZpc2libGUuIEluIHRocmVhZGVkIG1vZGUs
IGEgdmlldyB0aGF0IGlzIG5vdCB2aXNpYmxlIHdpbGwgbm90CisgICAgLy8gY29tcG9zaXRlIG9y
IHRyaWdnZXIgdXBkYXRlQW5pbWF0aW9ucygpIG9yIGxheW91dCgpIGNhbGxzIHVudGlsIGl0IGJl
Y29tZXMgdmlzaWJsZS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0VmlzaWJsZShib29sKTsK
KworICAgIC8vIFNldHMgdGhlIGN1cnJlbnQgcGFnZSBzY2FsZSBmYWN0b3IgYW5kIG1pbmltdW0g
LyBtYXhpbXVtIGxpbWl0cy4gQm90aCBsaW1pdHMgYXJlIGluaXRpYWxseSAxIChubyBwYWdlIHNj
YWxlIGFsbG93ZWQpLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRQYWdlU2NhbGVGYWN0b3JB
bmRMaW1pdHMoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBmbG9hdCBtaW5pbXVtLCBmbG9hdCBtYXhp
bXVtKTsKKworICAgIC8vIFN0YXJ0cyBhbiBhbmltYXRpb24gb2YgdGhlIHBhZ2Ugc2NhbGUgdG8g
YSB0YXJnZXQgc2NhbGUgZmFjdG9yIGFuZCBzY3JvbGwgb2Zmc2V0LgorICAgIC8vIElmIHVzZUFu
Y2hvciBpcyB0cnVlLCBkZXN0aW5hdGlvbiBpcyBhIHBvaW50IG9uIHRoZSBzY3JlZW4gdGhhdCB3
aWxsIHJlbWFpbiBmaXhlZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24uCisgICAg
Ly8gSWYgdXNlQW5jaG9yIGlzIGZhbHNlLCBkZXN0aW5hdGlvbiBpcyB0aGUgZmluYWwgdG9wLWxl
ZnQgc2Nyb2xsIHBvc2l0aW9uLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzdGFydFBhZ2VTY2Fs
ZUFuaW1hdGlvbihjb25zdCBXZWJQb2ludCYgZGVzdGluYXRpb24sIGJvb2wgdXNlQW5jaG9yLCBm
bG9hdCBuZXdQYWdlU2NhbGUsIGRvdWJsZSBkdXJhdGlvblNlYyk7CisKKworICAgIC8vIEZsb3cg
Y29udHJvbCBhbmQgc2NoZWR1bGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworICAgIC8vIFJlcXVlc3RzIGFuIHVwZGF0ZUFuaW1hdGlvbnMoKSBjYWxsLgorICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBzZXROZWVkc0FuaW1hdGUoKTsKKworICAgIC8vIEluZGljYXRl
cyB0aGF0IHRoZSB2aWV3IG5lZWRzIHRvIGJlIHJlZHJhd24uIFRoaXMgaXMgdHlwaWNhbGx5IHVz
ZWQgd2hlbiB0aGUgZnJvbnRidWZmZXIgaXMgZGFtYWdlZC4KKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgc2V0TmVlZHNSZWRyYXcoKTsKKwogICAgIC8vIFRyaWdnZXJzIGEgY29tcG9zaXRpbmcgcGFz
cy4gSWYgdGhlIGNvbXBvc2l0b3IgdGhyZWFkIHdhcyBub3QKICAgICAvLyBlbmFibGVkIHZpYSBX
ZWJDb21wb3NpdG9yOjppbml0aWFsaXplLCB0aGUgY29tcG9zaXRpbmcgcGFzcyBoYXBwZW5zCiAg
ICAgLy8gaW1tZWRpYXRlbHkuIElmIGl0IGlzIGVuYWJsZWQsIHRoZSBjb21wb3NpdGluZyBwYXNz
IHdpbGwgaGFwcGVuIGF0IGEKQEAgLTg5LDggKzEzOCwxMCBAQCBwdWJsaWM6CiAgICAgLy8gV2Vi
Q29udGVudExheWVyQ2xpZW50OjpwYWludENvbnRlbnRzLgogICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBjb21wb3NpdGUoKTsKIAotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRWaWV3cG9ydFNpemUo
Y29uc3QgV2ViU2l6ZSYpOwotICAgIFdFQktJVF9FWFBPUlQgV2ViU2l6ZSB2aWV3cG9ydFNpemUo
KSBjb25zdDsKKyAgICAvLyBJbW1lZGlhdGVseSB1cGRhdGUgYW5pbWF0aW9ucy4gVGhpcyBzaG91
bGQgb25seSBiZSB1c2VkIHdoZW4gZnJhbWUgc2NoZWR1bGluZyBpcyBoYW5kbGVkIGJ5CisgICAg
Ly8gdGhlIFdlYkxheWVyVHJlZVZpZXcgdXNlciBhbmQgbm90IGludGVybmFsbHkgYnkgdGhlIGNv
bXBvc2l0b3IsIG1lYW5pbmcgb25seSBpbiBzaW5nbGUtdGhyZWFkZWQKKyAgICAvLyBtb2RlLgor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCB1cGRhdGVBbmltYXRpb25zKGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSk7CiAKICAgICAvLyBDb21wb3NpdGVzIGFuZCBhdHRlbXB0cyB0byByZWFkIGJhY2sgdGhl
IHJlc3VsdCBpbnRvIHRoZSBwcm92aWRlZAogICAgIC8vIGJ1ZmZlci4gSWYgaXQgd2Fzbid0IHBv
c3NpYmxlLCBlLmcuIGR1ZSB0byBjb250ZXh0IGxvc3QsIHdpbGwgcmV0dXJuCkBAIC0xMDAsMTgg
KzE1MSwyMCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGJ1ZmZlciBpcyBub3QgbW9kaWZpZWQgaWYg
dGhlIGZhbHNlIGlzIHJldHVybmVkLgogICAgIFdFQktJVF9FWFBPUlQgYm9vbCBjb21wb3NpdGVB
bmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IFdlYlJlY3QmKTsKIAotICAgIC8vIFNldHMg
dGhlIHJvb3Qgb2YgdGhlIHRyZWUuIFRoZSByb290IGlzIHNldCBieSB3YXkgb2YgdGhlIGNvbnN0
cnVjdG9yLgotICAgIC8vIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8gZXhwbGljaXRseSBzZXQg
dGhlIHJvb3QgdG8gbnVsbCB0byBicmVhawotICAgIC8vIGN5Y2xlcy4KLSAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgc2V0Um9vdExheWVyKFdlYkxheWVyKik7CisgICAgLy8gQmxvY2tzIHVudGlsIHRo
ZSBtb3N0IHJlY2VudGx5IGNvbXBvc2l0ZWQgZnJhbWUgaGFzIGZpbmlzaGVkIHJlbmRlcmluZyBv
biB0aGUgR1BVLgorICAgIC8vIFRoaXMgY2FuIGhhdmUgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5j
ZSBpbXBhY3QgYW5kIHNob3VsZCBiZSB1c2VkIHdpdGggY2FyZS4KKyAgICBXRUJLSVRfRVhQT1JU
IHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CiAKLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
LSAgICBXZWJMYXllclRyZWVWaWV3KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q+Jik7Ci0gICAgV2ViTGF5ZXJUcmVlVmlldyYgb3BlcmF0b3I9KGNvbnN0IFdU
Rjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+Jik7Ci0gICAgb3BlcmF0b3Ig
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdD4oKSBjb25zdDsKLSNlbmRp
ZgogCi0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisgICAgLy8gRGVi
dWdnaW5nIC8gZGFuZ2Vyb3VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgICAgLy8gUmV0dXJucyB0aGUgY29udGV4dCBiZWluZyB1c2VkIGZvciByZW5k
ZXJpbmcgdGhpcyB2aWV3LiBJbiB0aHJlYWRlZCBjb21wb3NpdGluZyBtb2RlLCBpdCBpcworICAg
IC8vIG5vdCBzYWZlIHRvIHVzZSB0aGlzIGNvbnRleHQgYXQgYWxsIG9uIHRoZSBtYWluIHRocmVh
ZC4KKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgQVBJIGFzIHNvb24gYXMgcG9zc2libGUsIGl0
J3MgdmVyeSBidWctcHJvbmUgaW4gdGhyZWFkZWQgbW9kZS4KKyAgICBXRUJLSVRfRVhQT1JUIFdl
YkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CisKKyAgICAvLyBTaW11bGF0ZXMgYSBsb3N0
IGNvbnRleHQuIEZvciB0ZXN0aW5nIG9ubHkuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGxvc2VD
b21wb3NpdG9yQ29udGV4dChpbnQgbnVtVGltZXMpOwogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViUHJp
dmF0ZVB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+IG1fcHJpdmF0ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5o
IGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3Q2xpZW50
LmgKaW5kZXggOWM0ZGZiNzdiNzcxMTRiMGVmNjdiMDE3YmZhNGJkMjIzYjNhYjZhNi4uNWMwYjll
ZjlhMmEyYzYxM2IxMTkwMGMxM2Y4OThmMjI4MzliNDY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1Bs
YXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgKKysrIGIvU291
cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgKQEAg
LTUyLDYgKzUyLDkgQEAgcHVibGljOgogICAgIC8vIGNvbnRleHQgZXZlbnQpLgogICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWJpbmRHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKSA9IDA7CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCkgPSAwOworCiAgICAgLy8gU2NoZWR1bGVzIGEg
Y29tcG9zaXRpbmcgcGFzcywgbWVhbmluZyB0aGUgY2xpZW50IHNob3VsZCBjYWxsCiAgICAgLy8g
V2ViTGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRlIGF0IGEgbGF0ZXIgdGltZS4gVGhpcyBpcyBvbmx5
IGNhbGxlZCBpZiB0aGUKICAgICAvLyBjb21wb3NpdG9yIHRocmVhZCBpcyBkaXNhYmxlZDsgd2hl
biBlbmFibGVkLCB0aGUgY29tcG9zaXRvciB3aWxsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCmluZGV4IDQ1YTgxMzg1OTQ0Y2U4YWJkYmM3YmI5
OTRhZWIzY2M5ZGYyMjQwYmYuLmUwOGMwNzQ1MGMwN2VmMTA3YzdlOTY2NWM0YTA1MDUzNzVhNDFm
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwu
Y3BwCkBAIC04OTAsNyArODkwLDcgQEAgdm9pZCBDaHJvbWVDbGllbnRJbXBsOjphdHRhY2hSb290
R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXAKIAogdm9pZCBD
aHJvbWVDbGllbnRJbXBsOjpzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCkKIHsKLSAgICBt
X3dlYlZpZXctPnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpOworICAgIG1fd2ViVmlldy0+c2No
ZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpOwogfQogCiBDaHJvbWVDbGllbnQ6OkNvbXBvc2l0
aW5nVHJpZ2dlckZsYWdzIENocm9tZUNsaWVudEltcGw6OmFsbG93ZWRDb21wb3NpdGluZ1RyaWdn
ZXJzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxh
eWVyVHJlZVZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVl
Vmlldy5jcHAKaW5kZXggZDJjMGYwYzEyMWE3YzBkNWU1YmZlMWU1MDVlZDdiZWFiYmIyN2JhZi4u
MjVlZjc3YWY1MjJjYjRlMDg1ZTJiMzVhMzlmYzJmM2FjZmJjNzMyYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAKQEAgLTI2LDkgKzI2LDEx
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJUcmVl
Vmlldy5oIgogCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiV2ViTGF5ZXJUcmVlVmlld0ltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3Qu
aCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dl
YlBvaW50LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViUmVjdC5oIgogI2luY2x1ZGUgInBsYXRm
b3JtL1dlYlNpemUuaCIKIApAQCAtNTEsMTEgKzUzLDYgQEAgV2ViTGF5ZXJUcmVlVmlldzo6U2V0
dGluZ3M6Om9wZXJhdG9yIENDU2V0dGluZ3MoKSBjb25zdAogICAgIHJldHVybiBzZXR0aW5nczsK
IH0KIAotV2ViTGF5ZXJUcmVlVmlldyBXZWJMYXllclRyZWVWaWV3OjpjcmVhdGUoV2ViTGF5ZXJU
cmVlVmlld0NsaWVudCogY2xpZW50LCBjb25zdCBXZWJMYXllciYgcm9vdCwgY29uc3QgV2ViTGF5
ZXJUcmVlVmlldzo6U2V0dGluZ3MmIHNldHRpbmdzKQotewotICAgIHJldHVybiBXZWJMYXllclRy
ZWVWaWV3KFdlYkxheWVyVHJlZVZpZXdJbXBsOjpjcmVhdGUoY2xpZW50LCByb290LCBzZXR0aW5n
cykpOwotfQotCiB2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnJlc2V0KCkKIHsKICAgICBtX3ByaXZh
dGUucmVzZXQoKTsKQEAgLTcxLDEyICs2OCwyMyBAQCBib29sIFdlYkxheWVyVHJlZVZpZXc6OmVx
dWFscyhjb25zdCBXZWJMYXllclRyZWVWaWV3JiBuKSBjb25zdAogICAgIHJldHVybiAobV9wcml2
YXRlLmdldCgpID09IG4ubV9wcml2YXRlLmdldCgpKTsKIH0KIAotdm9pZCBXZWJMYXllclRyZWVW
aWV3Ojpjb21wb3NpdGUoKQorYm9vbCBXZWJMYXllclRyZWVWaWV3Ojppbml0aWFsaXplKFdlYkxh
eWVyVHJlZVZpZXdDbGllbnQqIGNsaWVudCwgY29uc3QgV2ViTGF5ZXImIHJvb3QsIGNvbnN0IFdl
YkxheWVyVHJlZVZpZXc6OlNldHRpbmdzJiBzZXR0aW5ncykKIHsKLSAgICBpZiAoQ0NQcm94eTo6
aGFzSW1wbFRocmVhZCgpKQotICAgICAgICBtX3ByaXZhdGUtPnNldE5lZWRzQ29tbWl0KCk7Cisg
ICAgbV9wcml2YXRlID0gV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmNyZWF0ZShjbGllbnQsIHJvb3Qs
IHNldHRpbmdzKTsKKyAgICByZXR1cm4gIWlzTnVsbCgpOworfQorCit2b2lkIFdlYkxheWVyVHJl
ZVZpZXc6OnNldFJvb3RMYXllcihXZWJMYXllciAqcm9vdCkKK3sKKyAgICBpZiAocm9vdCkKKyAg
ICAgICAgbV9wcml2YXRlLT5zZXRSb290TGF5ZXIoKnJvb3QpOwogICAgIGVsc2UKLSAgICAgICAg
bV9wcml2YXRlLT5jb21wb3NpdGUoKTsKKyAgICAgICAgbV9wcml2YXRlLT5zZXRSb290TGF5ZXIo
UGFzc1JlZlB0cjxMYXllckNocm9taXVtPigpKTsKK30KKworaW50IFdlYkxheWVyVHJlZVZpZXc6
OmNvbXBvc2l0b3JJZGVudGlmaWVyKCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jb21wb3Np
dG9ySWRlbnRpZmllcigpOwogfQogCiB2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnNldFZpZXdwb3J0
U2l6ZShjb25zdCBXZWJTaXplJiB2aWV3cG9ydFNpemUpCkBAIC04OSwzOCArOTcsNjIgQEAgV2Vi
U2l6ZSBXZWJMYXllclRyZWVWaWV3Ojp2aWV3cG9ydFNpemUoKSBjb25zdAogICAgIHJldHVybiBX
ZWJTaXplKG1fcHJpdmF0ZS0+dmlld3BvcnRTaXplKCkpOwogfQogCi1ib29sIFdlYkxheWVyVHJl
ZVZpZXc6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgV2ViUmVjdCYg
cmVjdCkKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB7
Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29tcG9zaXRlQW5kUmVhZGJhY2socGl4ZWxzLCByZWN0
KTsKKyAgICBtX3ByaXZhdGUtPnNldFZpc2libGUodmlzaWJsZSk7CiB9CiAKLXZvaWQgV2ViTGF5
ZXJUcmVlVmlldzo6c2V0Um9vdExheWVyKFdlYkxheWVyICpyb290KQordm9pZCBXZWJMYXllclRy
ZWVWaWV3OjpzZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMoZmxvYXQgcGFnZVNjYWxlRmFjdG9y
LCBmbG9hdCBtaW5pbXVtLCBmbG9hdCBtYXhpbXVtKQogewotICAgIGlmIChyb290KQotICAgICAg
ICBtX3ByaXZhdGUtPnNldFJvb3RMYXllcigqcm9vdCk7CisgICAgbV9wcml2YXRlLT5zZXRQYWdl
U2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlRmFjdG9yLCBtaW5pbXVtLCBtYXhpbXVtKTsK
K30KKwordm9pZCBXZWJMYXllclRyZWVWaWV3OjpzdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihjb25z
dCBXZWJQb2ludCYgc2Nyb2xsLCBib29sIHVzZUFuY2hvciwgZmxvYXQgbmV3UGFnZVNjYWxlLCBk
b3VibGUgZHVyYXRpb25TZWMpCit7CisgICAgbV9wcml2YXRlLT5zdGFydFBhZ2VTY2FsZUFuaW1h
dGlvbihJbnRTaXplKHNjcm9sbC54LCBzY3JvbGwueSksIHVzZUFuY2hvciwgbmV3UGFnZVNjYWxl
LCBkdXJhdGlvblNlYyk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6c2V0TmVlZHNBbmlt
YXRlKCkKK3sKKyAgICBtX3ByaXZhdGUtPnNldE5lZWRzQW5pbWF0ZSgpOworfQorCit2b2lkIFdl
YkxheWVyVHJlZVZpZXc6OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICBtX3ByaXZhdGUtPnNldE5l
ZWRzUmVkcmF3KCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRlKCkKK3sK
KyAgICBpZiAoQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpKQorICAgICAgICBtX3ByaXZhdGUtPnNl
dE5lZWRzQ29tbWl0KCk7CiAgICAgZWxzZQotICAgICAgICBtX3ByaXZhdGUtPnNldFJvb3RMYXll
cihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+KCkpOworICAgICAgICBtX3ByaXZhdGUtPmNvbXBv
c2l0ZSgpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVZpZXc6OnVwZGF0ZUFuaW1hdGlvbnMoZG91
YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIG1fcHJpdmF0ZS0+dXBkYXRlQW5pbWF0aW9ucyhm
cmFtZUJlZ2luVGltZSk7CiB9CiAKLVdlYkxheWVyVHJlZVZpZXc6OldlYkxheWVyVHJlZVZpZXco
Y29uc3QgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+JiBub2RlKQotICAgIDogbV9wcml2YXRl
KG5vZGUpCitib29sIFdlYkxheWVyVHJlZVZpZXc6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQg
KnBpeGVscywgY29uc3QgV2ViUmVjdCYgcmVjdCkKIHsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5j
b21wb3NpdGVBbmRSZWFkYmFjayhwaXhlbHMsIHJlY3QpOwogfQogCi1XZWJMYXllclRyZWVWaWV3
JiBXZWJMYXllclRyZWVWaWV3OjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxDQ0xheWVyVHJl
ZUhvc3Q+JiBub2RlKQordm9pZCBXZWJMYXllclRyZWVWaWV3OjpmaW5pc2hBbGxSZW5kZXJpbmco
KQogewotICAgIG1fcHJpdmF0ZSA9IG5vZGU7Ci0gICAgcmV0dXJuICp0aGlzOworICAgIG1fcHJp
dmF0ZS0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7CiB9CiAKLVdlYkxheWVyVHJlZVZpZXc6Om9wZXJh
dG9yIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PigpIGNvbnN0CitXZWJHcmFwaGljc0NvbnRl
eHQzRCogV2ViTGF5ZXJUcmVlVmlldzo6Y29udGV4dCgpCiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZS5nZXQoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2Vi
R3JhcGhpY3NDb250ZXh0M0QobV9wcml2YXRlLT5jb250ZXh0KCkpOwogfQogCi12b2lkIFdlYkxh
eWVyVHJlZVZpZXc6OnNldE5lZWRzUmVkcmF3KCkKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6bG9z
ZUNvbXBvc2l0b3JDb250ZXh0KGludCBudW1UaW1lcykKIHsKLSAgICBtX3ByaXZhdGUtPnNldE5l
ZWRzUmVkcmF3KCk7CisgICAgbV9wcml2YXRlLT5sb3NlQ29tcG9zaXRvckNvbnRleHQobnVtVGlt
ZXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkxheWVyVHJlZVZpZXdJbXBsLmNwcAppbmRleCAyOWQwMzMyMTUzMGI2
OTIxM2FkZjE1MWYwYTUwYThjOGEwNzVkMjMyLi4zNTk3Y2Y0ZjVjNDBjNjNmZjY4MmEwMDhhZmUy
N2ZiMmQ2NjdhZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJM
YXllclRyZWVWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
TGF5ZXJUcmVlVmlld0ltcGwuY3BwCkBAIC04OSwyMCArODksMjIgQEAgUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmNyZWF0ZUxheWVyVHJlZUhvc3RD
b250ZXh0M0QKICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFw
aGljc0NvbnRleHRGcm9tV2ViQ29udGV4dCh3ZWJDb250ZXh0LnJlbGVhc2UoKSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93LCBmYWxzZSAvKiBwcmVzZXJ2ZURy
YXdpbmdCdWZmZXIgKi8gKTsKIH0KIAotdm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkQ29t
bWl0QW5kRHJhd0ZyYW1lKCkKK3ZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRpZFJlY3JlYXRl
R3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykKIHsKLSAgICAvLyBGSVhNRTogcm91dGUgdGhp
cyB1cCB0byB0aGUgV2ViTGF5ZXJUcmVlVmlldyBjbGllbnQKKyAgICBpZiAobV9jbGllbnQpCisg
ICAgICAgIG1fY2xpZW50LT5kaWRSZWJpbmRHcmFwaGljc0NvbnRleHQoc3VjY2Vzcyk7CiB9CiAK
LXZvaWQgV2ViTGF5ZXJUcmVlVmlld0ltcGw6OmRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKQordm9p
ZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkKIHsKLSAgICAv
LyBGSVhNRTogcm91dGUgdGhpcyB1cCB0byB0aGUgV2ViTGF5ZXJUcmVlVmlldyBjbGllbnQKKyAg
ICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDb21taXRBbmREcmF3RnJhbWUo
KTsKIH0KIAotdm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGljc0Nv
bnRleHQoYm9vbCBzdWNjZXNzKQordm9pZCBXZWJMYXllclRyZWVWaWV3SW1wbDo6ZGlkQ29tcGxl
dGVTd2FwQnVmZmVycygpCiB7CiAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+
ZGlkUmViaW5kR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3MpOworICAgICAgICBtX2NsaWVudC0+ZGlk
Q29tcGxldGVTd2FwQnVmZmVycygpOwogfQogCiB2b2lkIFdlYkxheWVyVHJlZVZpZXdJbXBsOjpz
Y2hlZHVsZUNvbXBvc2l0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAKaW5kZXggNTVhMjA1MmE0NGQ2Y2UwNGJkYzUxOGFlZGU2MThmMmUzZWQ5MWEzNy4uZjE1
MzAyMjllNDhiNDAxZjMxYTJjNWY2MTQ3NWFhYzI1ODE4YTI1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
IkF1dG9maWxsUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgog
I2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdENocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94
eS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtl
eXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkBAIC0xMjMsNiArMTI0LDggQEAKICNpbmNs
dWRlICJXZWJJbnB1dEV2ZW50Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIldlYktpdC5oIgogI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgorI2luY2x1ZGUgInBsYXRm
b3JtL1dlYkxheWVyLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViTGF5ZXJUcmVlVmlldy5oIgog
I2luY2x1ZGUgIldlYk1lZGlhUGxheWVyQWN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViTm9kZS5oIgog
I2luY2x1ZGUgIldlYlBsdWdpbi5oIgpAQCAtMTM3LDcgKzE0MCw2IEBACiAjaW5jbHVkZSAicGxh
dGZvcm0vV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViVmVjdG9yLmgiCiAjaW5j
bHVkZSAiV2ViVmlld0NsaWVudC5oIgotI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRl
IDx3dGYvQnl0ZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTYyNyw4ICs2MjksOCBAQCBib29sIFdlYlZpZXdJbXBs
OjpnZXN0dXJlRXZlbnQoY29uc3QgV2ViR2VzdHVyZUV2ZW50JiBldmVudCkKIAogdm9pZCBXZWJW
aWV3SW1wbDo6c3RhcnRQYWdlU2NhbGVBbmltYXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbCwg
Ym9vbCB1c2VBbmNob3IsIGZsb2F0IG5ld1NjYWxlLCBkb3VibGUgZHVyYXRpb25TZWMpCiB7Ci0g
ICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zdGFydFBh
Z2VTY2FsZUFuaW1hdGlvbihJbnRTaXplKHNjcm9sbC54KCksIHNjcm9sbC55KCkpLCB1c2VBbmNo
b3IsIG5ld1NjYWxlLCBkdXJhdGlvblNlYyk7CisgICAgaWYgKCFtX2xheWVyVHJlZVZpZXcuaXNO
dWxsKCkpCisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5zdGFydFBhZ2VTY2FsZUFuaW1hdGlvbihz
Y3JvbGwsIHVzZUFuY2hvciwgbmV3U2NhbGUsIGR1cmF0aW9uU2VjKTsKIH0KICNlbmRpZgogCkBA
IC0xMjc2LDcgKzEyNzgsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFt
ZUJlZ2luVGltZSkKICAgICAvLyBJbiBjb21wb3NpdGVkIG1vZGUsIHdlIGFsd2F5cyBnbyB0aHJv
dWdoIHRoZSBjb21wb3NpdG9yIHNvIGl0IGNhbiBhcHBseQogICAgIC8vIGFwcHJvcHJpYXRlIGZs
b3ctY29udHJvbCBtZWNoYW5pc21zLgogICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdB
Y3RpdmUoKSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVBbmltYXRpb25zKGZyYW1l
QmVnaW5UaW1lKTsKKyAgICAgICAgbV9sYXllclRyZWVWaWV3LnVwZGF0ZUFuaW1hdGlvbnMoZnJh
bWVCZWdpblRpbWUpOwogICAgIGVsc2UKICNlbmRpZgogICAgICAgICB1cGRhdGVBbmltYXRpb25z
KGZyYW1lQmVnaW5UaW1lKTsKQEAgLTEzMjQsNiArMTMyNiw3IEBAIHZvaWQgV2ViVmlld0ltcGw6
OmxheW91dCgpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBXZWJWaWV3
SW1wbDo6ZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpOwog
I2lmIFVTRShTS0lBKQogICAgIFBsYXRmb3JtQ29udGV4dFNraWEgY29udGV4dChjYW52YXMpOwog
CkBAIC0xMzQyLDcgKzEzNDUsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb1BpeGVsUmVhZGJhY2tU
b0NhbnZhcyhXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgSW50UmVjdCYgcmVjdAogICAgIE93blB0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShyZWN0LnNpemUo
KSkpOwogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHBpeGVsQXJyYXkoQnl0ZUFycmF5OjpjcmVhdGUo
cmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpKTsKICAgICBpZiAoaW1hZ2VCdWZmZXIg
JiYgcGl4ZWxBcnJheSkgewotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0ZUFuZFJl
YWRiYWNrKHBpeGVsQXJyYXktPmRhdGEoKSwgaW52ZXJ0UmVjdCk7CisgICAgICAgIG1fbGF5ZXJU
cmVlVmlldy5jb21wb3NpdGVBbmRSZWFkYmFjayhwaXhlbEFycmF5LT5kYXRhKCksIGludmVydFJl
Y3QpOwogICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KFByZW11bHRpcGxpZWQsIHBp
eGVsQXJyYXkuZ2V0KCksIHJlY3Quc2l6ZSgpLCBJbnRSZWN0KEludFBvaW50KCksIHJlY3Quc2l6
ZSgpKSwgSW50UG9pbnQoKSk7CiAgICAgICAgIGdjLnNhdmUoKTsKICAgICAgICAgZ2MudHJhbnNs
YXRlKEludFNpemUoMCwgYml0bWFwSGVpZ2h0KSk7CkBAIC0xMzY0LDcgKzEzNjcsNyBAQCB2b2lk
IFdlYlZpZXdJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVj
dCkKICAgICAgICAgaWYgKGNhbnZhcykgewogICAgICAgICAgICAgLy8gQ2xpcCByZWN0IHRvIHRo
ZSBjb25maW5lcyBvZiB0aGUgcm9vdExheWVyVGV4dHVyZS4KICAgICAgICAgICAgIEludFJlY3Qg
cmVzaXplUmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJlc2l6ZVJlY3QuaW50ZXJzZWN0KEludFJl
Y3QoSW50UG9pbnQoMCwgMCksIG1fbGF5ZXJUcmVlSG9zdC0+dmlld3BvcnRTaXplKCkpKTsKKyAg
ICAgICAgICAgIHJlc2l6ZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1f
bGF5ZXJUcmVlVmlldy52aWV3cG9ydFNpemUoKSkpOwogICAgICAgICAgICAgZG9QaXhlbFJlYWRi
YWNrVG9DYW52YXMoY2FudmFzLCByZXNpemVSZWN0KTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0x
Mzk0LDcgKzEzOTcsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjb21wb3NpdGUoYm9vbCkKIHsKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKENDUHJveHk6Omhhc0ltcGxU
aHJlYWQoKSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXROZWVkc1JlZHJhdygpOworICAg
ICAgICBtX2xheWVyVHJlZVZpZXcuc2V0TmVlZHNSZWRyYXcoKTsKICAgICBlbHNlIHsKICAgICAg
ICAgQVNTRVJUKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKTsKICAgICAgICAgaWYg
KCFwYWdlKCkpCkBAIC0xNDAzLDcgKzE0MDYsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpjb21wb3Np
dGUoYm9vbCkKICAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzKQogICAgICAgICAgICAgbV9wYWdl
T3ZlcmxheXMtPnVwZGF0ZSgpOwogCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRl
KCk7CisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5jb21wb3NpdGUoKTsKICAgICB9CiAjZW5kaWYK
IH0KQEAgLTE0MTEsMTYgKzE0MTQsMTYgQEAgdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJv
b2wpCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXROZWVkc1JlZHJhdygpCiB7CiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX2xheWVyVHJlZUhvc3QgJiYgaXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVl
ZHNSZWRyYXcoKTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVlVmlldy5pc051bGwoKSAmJiBpc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkKKyAgICAgICAgbV9sYXllclRyZWVWaWV3LnNldE5l
ZWRzUmVkcmF3KCk7CiAjZW5kaWYKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6bG9zZUNvbXBvc2l0
b3JDb250ZXh0KGludCBudW1UaW1lcykKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5s
b3NlQ29tcG9zaXRvckNvbnRleHQobnVtVGltZXMpOworICAgIGlmICghbV9sYXllclRyZWVWaWV3
LmlzTnVsbCgpKQorICAgICAgICBtX2xheWVyVHJlZVZpZXcubG9zZUNvbXBvc2l0b3JDb250ZXh0
KG51bVRpbWVzKTsKICNlbmRpZgogfQogCkBAIC0yMzAyLDggKzIzMDUsOCBAQCBib29sIFdlYlZp
ZXdJbXBsOjpjb21wdXRlUGFnZVNjYWxlRmFjdG9yTGltaXRzKCkKIAogICAgIGZsb2F0IGNsYW1w
ZWRTY2FsZSA9IGNsYW1wUGFnZVNjYWxlRmFjdG9yVG9MaW1pdHMocGFnZVNjYWxlRmFjdG9yKCkp
OwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAobV9sYXllclRyZWVI
b3N0KQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0
cyhjbGFtcGVkU2NhbGUsIG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvciwgbV9tYXhpbXVtUGFnZVNj
YWxlRmFjdG9yKTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVlVmlldy5pc051bGwoKSkKKyAgICAgICAg
bV9sYXllclRyZWVWaWV3LnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cyhjbGFtcGVkU2NhbGUs
IG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvciwgbV9tYXhpbXVtUGFnZVNjYWxlRmFjdG9yKTsKICNl
bmRpZgogICAgIGlmIChjbGFtcGVkU2NhbGUgIT0gcGFnZVNjYWxlRmFjdG9yKCkpIHsKICAgICAg
ICAgc2V0UGFnZVNjYWxlRmFjdG9yUHJlc2VydmluZ1Njcm9sbE9mZnNldChjbGFtcGVkU2NhbGUp
OwpAQCAtMjkyOSwxNyArMjkzMiwxMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjphZGRQYWdlT3Zlcmxh
eShXZWJQYWdlT3ZlcmxheSogb3ZlcmxheSwgaW50IHpPcmRlcikKICAgICAgICAgbV9wYWdlT3Zl
cmxheXMgPSBQYWdlT3ZlcmxheUxpc3Q6OmNyZWF0ZSh0aGlzKTsKIAogICAgIG1fcGFnZU92ZXJs
YXlzLT5hZGQob3ZlcmxheSwgek9yZGVyKTsKLSAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXko
KTsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6cmVtb3ZlUGFnZU92ZXJsYXkoV2ViUGFnZU92ZXJs
YXkqIG92ZXJsYXkpCiB7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlzICYmIG1fcGFnZU92ZXJsYXlz
LT5yZW1vdmUob3ZlcmxheSkpIHsKLSAgICAgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7
Ci0KLSAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzLT5lbXB0eSgpKQotICAgICAgICAgICAgbV9w
YWdlT3ZlcmxheXMgPSBudWxscHRyOwotICAgIH0KKyAgICBpZiAobV9wYWdlT3ZlcmxheXMgJiYg
bV9wYWdlT3ZlcmxheXMtPnJlbW92ZShvdmVybGF5KSAmJiBtX3BhZ2VPdmVybGF5cy0+ZW1wdHko
KSkKKyAgICAgICAgbV9wYWdlT3ZlcmxheXMgPSBudWxscHRyOwogfQogCiB2b2lkIFdlYlZpZXdJ
bXBsOjpzZXRPdmVybGF5TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXIpCkBAIC0z
MDQ3LDI5ICszMDQ1LDMxIEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RHcmFwaGljc0xheWVy
KEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAgICAgICB9CiAgICAgICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0LT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7CiAgICAgfQotICAgIGlm
IChtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVy
KGxheWVyID8gbGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSA6IDApOworCisgICAgaWYgKGxheWVyKQor
ICAgICAgICBtX3Jvb3RMYXllciA9IFdlYkxheWVyKGxheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwor
CisgICAgaWYgKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpCisgICAgICAgIG1fbGF5ZXJUcmVl
Vmlldy5zZXRSb290TGF5ZXIobGF5ZXIgPyAmbV9yb290TGF5ZXIgOiAwKTsKIAogICAgIEludFJl
Y3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKICAgICBp
ZiAoIW1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKQogICAgICAgICBtX2NsaWVudC0+
ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpz
ZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKQordm9pZCBXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21w
b3NpdGluZ0xheWVyU3luYygpCiB7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0NvbW1pdCgpOworICAgIG1fbGF5ZXJUcmVlVmlldy5z
ZXROZWVkc1JlZHJhdygpOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5ZXJS
ZWN0KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkK
K3ZvaWQgV2ViVmlld0ltcGw6OnNjcm9sbFJvb3RMYXllclJlY3QoY29uc3QgSW50U2l6ZSYsIGNv
bnN0IEludFJlY3QmKQogewogICAgIHVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7Ci0gICAgc2V0
Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRh
dGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKG1fbGF5
ZXJUcmVlSG9zdCk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpOwogCiAg
ICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMwNzgsNyArMzA3OCw2IEBAIHZv
aWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpCiAgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSB2aWV3LT53aW5kb3dUb0NvbnRlbnRzKHJlY3Qp
OwogICAgIHVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7CiAgICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudEhvc3QtPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7Ci0gICAgc2V0Um9vdExheWVyTmVl
ZHNEaXNwbGF5KCk7CiB9CiAKIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCogV2ViVmlld0ltcGw6
Om5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCgpCkBAIC0zMDkxLDggKzMwOTAsOCBAQCB2b2lkIFdl
YlZpZXdJbXBsOjpzY2hlZHVsZUFuaW1hdGlvbigpCiB7CiAgICAgaWYgKGlzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAgICAgICAgIGlmIChDQ1Byb3h5OjpoYXNJbXBsVGhyZWFk
KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOwotICAgICAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5zZXROZWVkc0FuaW1hdGUoKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
bV9sYXllclRyZWVWaWV3LmlzTnVsbCgpKTsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5z
ZXROZWVkc0FuaW1hdGUoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2NsaWVudC0+
c2NoZWR1bGVBbmltYXRpb24oKTsKICAgICB9IGVsc2UKQEAgLTMxNDUsMjYgKzMxNDQsMjYgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wg
YWN0aXZlKQogICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9IGZhbHNl
OwogICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbmlzaCBhbGwgR0wgcmVuZGVyaW5nIGJlZm9yZSBz
ZW5kaW5nIGRpZERlYWN0aXZhdGVDb21wb3NpdG9yKCkgdG8gcHJldmVudAogICAgICAgICAvLyBm
bGlja2VyaW5nIHdoZW4gY29tcG9zaXRpbmcgdHVybnMgb2ZmLgotICAgICAgICBpZiAobV9sYXll
clRyZWVIb3N0KQotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5maW5pc2hBbGxSZW5kZXJp
bmcoKTsKKyAgICAgICAgaWYgKCFtX2xheWVyVHJlZVZpZXcuaXNOdWxsKCkpCisgICAgICAgICAg
ICBtX2xheWVyVHJlZVZpZXcuZmluaXNoQWxsUmVuZGVyaW5nKCk7CiAgICAgICAgIG1fY2xpZW50
LT5kaWREZWFjdGl2YXRlQ29tcG9zaXRvcigpOwotICAgIH0gZWxzZSBpZiAobV9sYXllclRyZWVI
b3N0KSB7CisgICAgfSBlbHNlIGlmICghbV9sYXllclRyZWVWaWV3LmlzTnVsbCgpKSB7CiAgICAg
ICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgdXBk
YXRlTGF5ZXJUcmVlVmlld3BvcnQoKTsKIAotICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVD
b21wb3NpdG9yKG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRvcklkZW50aWZpZXIoKSk7CisgICAg
ICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUNvbXBvc2l0b3IobV9sYXllclRyZWVWaWV3LmNvbXBv
c2l0b3JJZGVudGlmaWVyKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJX
ZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKHRydWUpIiwgdGhp
cywgMCk7CiAKLSAgICAgICAgV2ViQ29yZTo6Q0NTZXR0aW5ncyBjY1NldHRpbmdzOwotICAgICAg
ICBjY1NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNj
ZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpOwotICAgICAgICBjY1NldHRpbmdzLmNvbXBvc2l0ZU9m
ZnNjcmVlbiA9IHNldHRpbmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQoKTsKLSAgICAg
ICAgY2NTZXR0aW5ncy5zaG93RlBTQ291bnRlciA9IHNldHRpbmdzKCktPnNob3dGUFNDb3VudGVy
KCk7Ci0gICAgICAgIGNjU2V0dGluZ3Muc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gc2V0dGluZ3Mo
KS0+c2hvd1BsYXRmb3JtTGF5ZXJUcmVlKCk7CisgICAgICAgIFdlYkxheWVyVHJlZVZpZXc6OlNl
dHRpbmdzIGxheWVyVHJlZVZpZXdTZXR0aW5nczsKKyAgICAgICAgbGF5ZXJUcmVlVmlld1NldHRp
bmdzLmFjY2VsZXJhdGVQYWludGluZyA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRE
cmF3aW5nRW5hYmxlZCgpOworICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3MuY29tcG9zaXRl
T2Zmc2NyZWVuID0gc2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZCgpOworICAg
ICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3Muc2hvd0ZQU0NvdW50ZXIgPSBzZXR0aW5ncygpLT5z
aG93RlBTQ291bnRlcigpOworICAgICAgICBsYXllclRyZWVWaWV3U2V0dGluZ3Muc2hvd1BsYXRm
b3JtTGF5ZXJUcmVlID0gc2V0dGluZ3MoKS0+c2hvd1BsYXRmb3JtTGF5ZXJUcmVlKCk7CiAKLSAg
ICAgICAgY2NTZXR0aW5ncy5wZXJUaWxlUGFpbnRpbmcgPSBwYWdlKCktPnNldHRpbmdzKCktPnBl
clRpbGVEcmF3aW5nRW5hYmxlZCgpOwotICAgICAgICBjY1NldHRpbmdzLnBhcnRpYWxTd2FwRW5h
YmxlZCA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+cGFydGlhbFN3YXBFbmFibGVkKCk7Ci0gICAgICAg
IGNjU2V0dGluZ3MudGhyZWFkZWRBbmltYXRpb25FbmFibGVkID0gcGFnZSgpLT5zZXR0aW5ncygp
LT50aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQoKTsKKyAgICAgICAgbGF5ZXJUcmVlVmlld1NldHRp
bmdzLnBlclRpbGVQYWludGluZyA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+cGVyVGlsZURyYXdpbmdF
bmFibGVkKCk7CisgICAgICAgIGxheWVyVHJlZVZpZXdTZXR0aW5ncy5wYXJ0aWFsU3dhcEVuYWJs
ZWQgPSBwYWdlKCktPnNldHRpbmdzKCktPnBhcnRpYWxTd2FwRW5hYmxlZCgpOworICAgICAgICBs
YXllclRyZWVWaWV3U2V0dGluZ3MudGhyZWFkZWRBbmltYXRpb25FbmFibGVkID0gcGFnZSgpLT5z
ZXR0aW5ncygpLT50aHJlYWRlZEFuaW1hdGlvbkVuYWJsZWQoKTsKIAogICAgICAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdCA9IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRlKFdl
YlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSk7CiAgICAgICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRIb3N0LT5zZXRTaG93RGVidWdCb3JkZXJzKHBhZ2UoKS0+c2V0dGluZ3Mo
KS0+c2hvd0RlYnVnQm9yZGVycygpKTsKQEAgLTMxNzIsMTcgKzMxNzEsMTYgQEAgdm9pZCBXZWJW
aWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQog
ICAgICAgICBpZiAocGFnZSgpICYmIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKSkKICAgICAg
ICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRCYWNrZ3JvdW5kQ29sb3IocGFn
ZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5kb2N1bWVudEJhY2tncm91bmRDb2xvcigpKTsKIAot
ICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlzLCBj
Y1NldHRpbmdzKTsKLSAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgewotICAgICAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5zZXRQYWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlRmFj
dG9yKCksIG1fbWluaW11bVBhZ2VTY2FsZUZhY3RvciwgbV9tYXhpbXVtUGFnZVNjYWxlRmFjdG9y
KTsKKyAgICAgICAgbV9sYXllclRyZWVWaWV3LmluaXRpYWxpemUodGhpcywgbV9yb290TGF5ZXIs
IGxheWVyVHJlZVZpZXdTZXR0aW5ncyk7CisgICAgICAgIGlmICghbV9sYXllclRyZWVWaWV3Lmlz
TnVsbCgpKSB7CisgICAgICAgICAgICBtX2xheWVyVHJlZVZpZXcuc2V0UGFnZVNjYWxlRmFjdG9y
QW5kTGltaXRzKHBhZ2VTY2FsZUZhY3RvcigpLCBtX21pbmltdW1QYWdlU2NhbGVGYWN0b3IsIG1f
bWF4aW11bVBhZ2VTY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICB1cGRhdGVMYXllclRyZWVWaWV3
cG9ydCgpOwotICAgICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQ29tcG9zaXRvcihtX2xh
eWVyVHJlZUhvc3QtPmNvbXBvc2l0b3JJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgbV9jbGll
bnQtPmRpZEFjdGl2YXRlQ29tcG9zaXRvcihtX2xheWVyVHJlZVZpZXcuY29tcG9zaXRvcklkZW50
aWZpZXIoKSk7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9
IHRydWU7CiAgICAgICAgICAgICBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZCA9IGZhbHNlOwog
ICAgICAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXlzKQogICAgICAgICAgICAgICAgIG1fcGFnZU92
ZXJsYXlzLT51cGRhdGUoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC5jbGVhcigpOwogICAgICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Qu
Y2xlYXIoKTsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0g
ZmFsc2U7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRGVhY3RpdmF0ZUNvbXBvc2l0b3IoKTsK
QEAgLTMxOTUsMjkgKzMxOTMsMzEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogCiAjZW5kaWYKIAotUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gV2ViVmlld0ltcGw6OmNyZWF0ZUNvbXBvc2l0b3JHcmFwaGljc0Nv
bnRleHQzRCgpCitQYXNzT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q+IFdlYlZp
ZXdJbXBsOjpjcmVhdGVDb21wb3NpdG9yR3JhcGhpY3NDb250ZXh0M0QoKQogewogICAgIFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGdldENvbXBv
c2l0b3JDb250ZXh0QXR0cmlidXRlcyhDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkpOwogICAgIE93
blB0cjxXZWJHcmFwaGljc0NvbnRleHQzRD4gd2ViQ29udGV4dCA9IGFkb3B0UHRyKGNsaWVudCgp
LT5jcmVhdGVHcmFwaGljc0NvbnRleHQzRChhdHRyaWJ1dGVzLCB0cnVlIC8qIHJlbmRlckRpcmVj
dGx5VG9Ib3N0V2luZG93ICovKSk7CiAgICAgaWYgKCF3ZWJDb250ZXh0KQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dCh3ZWJDb250
ZXh0LnJlbGVhc2UoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KTsKKyAgICByZXR1cm4gd2ViQ29udGV4dC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IFdlYlZpZXdJbXBsOjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4
dDNEKCkKK1dlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIFdlYlZpZXdJbXBsOjpjcmVhdGVD
b250ZXh0M0QoKQogewotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dDsKKyAg
ICBPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gd2ViQ29udGV4dDsKIAogICAg
IC8vIElmIHdlJ3ZlIGFscmVhZHkgY3JlYXRlZCBhbiBvbnNjcmVlbiBjb250ZXh0IGZvciB0aGlz
IHZpZXcsIHJldHVybiB0aGF0LgogICAgIGlmIChtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3ND
b250ZXh0M0QpCi0gICAgICAgIGNvbnRleHQgPSBtX3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3ND
b250ZXh0M0QucmVsZWFzZSgpOworICAgICAgICB3ZWJDb250ZXh0ID0gbV90ZW1wb3JhcnlPbnNj
cmVlbkdyYXBoaWNzQ29udGV4dDNELnJlbGVhc2UoKTsKICAgICBlbHNlIC8vIE90aGVyd2lzZSBt
YWtlIGEgbmV3IG9uZS4KLSAgICAgICAgY29udGV4dCA9IGNyZWF0ZUNvbXBvc2l0b3JHcmFwaGlj
c0NvbnRleHQzRCgpOwotICAgIHJldHVybiBjb250ZXh0OworICAgICAgICB3ZWJDb250ZXh0ID0g
Y3JlYXRlQ29tcG9zaXRvckdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgLy8gVGhlIGNhbGxlciB0
YWtlcyBvd25lcnNoaXAgb2YgdGhpcyBvYmplY3QsIGJ1dCBzaW5jZSB0aGVyZSdzIG5vIGVxdWl2
YWxlbnQgb2YgUGFzc093blB0cjw+IGluIHRoZSBXZWJLaXQgQVBJCisgICAgLy8gd2UgcmV0dXJu
IGEgcmF3IHBvaW50ZXIuCisgICAgcmV0dXJuIHdlYkNvbnRleHQubGVha1B0cigpOwogfQogCi12
b2lkIFdlYlZpZXdJbXBsOjphcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9s
bERlbHRhLCBmbG9hdCBwYWdlU2NhbGVEZWx0YSkKK3ZvaWQgV2ViVmlld0ltcGw6OmFwcGx5U2Ny
b2xsQW5kU2NhbGUoY29uc3QgV2ViU2l6ZSYgc2Nyb2xsRGVsdGEsIGZsb2F0IHBhZ2VTY2FsZURl
bHRhKQogewogICAgIGlmICghbWFpbkZyYW1lSW1wbCgpIHx8ICFtYWluRnJhbWVJbXBsKCktPmZy
YW1lVmlldygpKQogICAgICAgICByZXR1cm47CkBAIC0zMjMwLDggKzMyMzAsOCBAQCB2b2lkIFdl
YlZpZXdJbXBsOjphcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRh
LCBmbG9hdCBwYWdlU2NhbAogICAgICAgICAvLyBpbiB0aGUgb2xkIGNvb3JkaW5hdGUgc3BhY2Us
IHNvIHdlIGZpcnN0IG5lZWQgdG8gbXVsdGlwbHkgdGhlbQogICAgICAgICAvLyBieSB0aGUgcGFn
ZSBzY2FsZSBkZWx0YS4KICAgICAgICAgV2ViU2l6ZSBzY3JvbGxPZmZzZXQgPSBtYWluRnJhbWUo
KS0+c2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIHNjcm9sbE9mZnNldC53aWR0aCArPSBzY3JvbGxE
ZWx0YS53aWR0aCgpOwotICAgICAgICBzY3JvbGxPZmZzZXQuaGVpZ2h0ICs9IHNjcm9sbERlbHRh
LmhlaWdodCgpOworICAgICAgICBzY3JvbGxPZmZzZXQud2lkdGggKz0gc2Nyb2xsRGVsdGEud2lk
dGg7CisgICAgICAgIHNjcm9sbE9mZnNldC5oZWlnaHQgKz0gc2Nyb2xsRGVsdGEuaGVpZ2h0Owog
ICAgICAgICBXZWJQb2ludCBzY2FsZWRTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0LndpZHRoICog
cGFnZVNjYWxlRGVsdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3Jv
bGxPZmZzZXQuaGVpZ2h0ICogcGFnZVNjYWxlRGVsdGEpOwogICAgICAgICBzZXRQYWdlU2NhbGVG
YWN0b3IocGFnZVNjYWxlRmFjdG9yKCkgKiBwYWdlU2NhbGVEZWx0YSwgc2NhbGVkU2Nyb2xsT2Zm
c2V0KTsKQEAgLTMyNTAsNyArMzI1MCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRpZENvbXBsZXRl
U3dhcEJ1ZmZlcnMoKQogICAgICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVTd2FwQnVmZmVycygp
OwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29s
IHN1Y2Nlc3MpCit2b2lkIFdlYlZpZXdJbXBsOjpkaWRSZWJpbmRHcmFwaGljc0NvbnRleHQoYm9v
bCBzdWNjZXNzKQogewogCiAgICAgLy8gU3dpdGNoIGJhY2sgdG8gc29mdHdhcmUgcmVuZGVyaW5n
IG1vZGUsIGlmIG5lY2Vzc2FyeQpAQCAtMzI3Nyw3ICszMjc3LDcgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6c2NoZWR1bGVDb21wb3NpdGUoKQogCiB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllclRy
ZWVWaWV3cG9ydCgpCiB7Ci0gICAgaWYgKCFwYWdlKCkgfHwgIW1fbm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0IHx8ICFtX2xheWVyVHJlZUhvc3QpCisgICAgaWYgKCFwYWdlKCkgfHwgIW1fbm9uQ29t
cG9zaXRlZENvbnRlbnRIb3N0IHx8IG1fbGF5ZXJUcmVlVmlldy5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gcGFnZSgpLT5tYWluRnJhbWUoKS0+dmll
dygpOwpAQCAtMzI5MywxOCArMzI5MywxOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXll
clRyZWVWaWV3cG9ydCgpCiAgICAgICAgIGxheWVyQWRqdXN0WCA9IC12aWV3LT5jb250ZW50c1Np
emUoKS53aWR0aCgpICsgdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KGZhbHNlKS53aWR0aCgpOwog
ICAgIH0KICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+c2V0Vmlld3BvcnQodmlzaWJs
ZVJlY3Quc2l6ZSgpLCB2aWV3LT5jb250ZW50c1NpemUoKSwgc2Nyb2xsLCBwYWdlU2NhbGVGYWN0
b3IoKSwgbGF5ZXJBZGp1c3RYKTsKLSAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZpZXdwb3J0U2l6
ZSh2aXNpYmxlUmVjdC5zaXplKCkpOwotICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0UGFnZVNjYWxl
RmFjdG9yQW5kTGltaXRzKHBhZ2VTY2FsZUZhY3RvcigpLCBtX21pbmltdW1QYWdlU2NhbGVGYWN0
b3IsIG1fbWF4aW11bVBhZ2VTY2FsZUZhY3Rvcik7CisgICAgbV9sYXllclRyZWVWaWV3LnNldFZp
ZXdwb3J0U2l6ZSh2aXNpYmxlUmVjdC5zaXplKCkpOworICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRQ
YWdlU2NhbGVGYWN0b3JBbmRMaW1pdHMocGFnZVNjYWxlRmFjdG9yKCksIG1fbWluaW11bVBhZ2VT
Y2FsZUZhY3RvciwgbV9tYXhpbXVtUGFnZVNjYWxlRmFjdG9yKTsKIH0KIAogV2ViR3JhcGhpY3ND
b250ZXh0M0QqIFdlYlZpZXdJbXBsOjpncmFwaGljc0NvbnRleHQzRCgpCiB7CiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChtX3BhZ2UtPnNldHRpbmdzKCktPmFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkgJiYgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpKSB7Ci0gICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3QpIHsKLSAgICAgICAgICAgIFdlYkdy
YXBoaWNzQ29udGV4dDNEKiB3ZWJDb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpl
eHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QobV9sYXllclRyZWVIb3N0LT5jb250ZXh0KCkpOwot
ICAgICAgICAgICAgaWYgKHdlYkNvbnRleHQgJiYgIXdlYkNvbnRleHQtPmlzQ29udGV4dExvc3Qo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gd2ViQ29udGV4dDsKKyAgICAgICAgaWYgKCFtX2xh
eWVyVHJlZVZpZXcuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0ID0gbV9sYXllclRyZWVWaWV3LmNvbnRleHQoKTsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0ICYmICFjb250ZXh0LT5pc0NvbnRleHRMb3N0KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGNvbnRleHQ7CiAgICAgICAgIH0KICAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUgaXQgbWVh
bnMgdGhhdCBzb21lIHN5c3RlbSBuZWVkcyBhY2Nlc3MgdG8gdGhlIGNvbnRleHQgdGhlIGNvbXBv
c2l0b3Igd2lsbCB1c2UgYnV0IHRoZSBjb21wb3NpdG9yIGl0c2VsZgogICAgICAgICAvLyBoYXNu
J3QgcmVxdWVzdGVkIGEgY29udGV4dCBvciBpdCB3YXMgdW5hYmxlIHRvIHN1Y2Nlc3NmdWxseSBp
bnN0YW50aWF0ZSBhIGNvbnRleHQuCkBAIC0zMzEzLDcgKzMzMTMsNyBAQCBXZWJHcmFwaGljc0Nv
bnRleHQzRCogV2ViVmlld0ltcGw6OmdyYXBoaWNzQ29udGV4dDNEKCkKICAgICAgICAgaWYgKCFt
X3RlbXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QpCiAgICAgICAgICAgICBtX3RlbXBv
cmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0QgPSBjcmVhdGVDb21wb3NpdG9yR3JhcGhpY3ND
b250ZXh0M0QoKTsKIAotICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogd2ViQ29udGV4dCA9
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1f
dGVtcG9yYXJ5T25zY3JlZW5HcmFwaGljc0NvbnRleHQzRC5nZXQoKSk7CisgICAgICAgIFdlYkdy
YXBoaWNzQ29udGV4dDNEKiB3ZWJDb250ZXh0ID0gbV90ZW1wb3JhcnlPbnNjcmVlbkdyYXBoaWNz
Q29udGV4dDNELmdldCgpOwogICAgICAgICBpZiAod2ViQ29udGV4dCAmJiAhd2ViQ29udGV4dC0+
aXNDb250ZXh0TG9zdCgpKQogICAgICAgICAgICAgcmV0dXJuIHdlYkNvbnRleHQ7CiAgICAgfQpA
QCAtMzMzOCw3ICszMzM4LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0VmlzaWJpbGl0eVN0YXRl
KFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0eVN0YXRlLAogICAgICAgICBib29sIHZp
c2libGUgPSB2aXNpYmlsaXR5U3RhdGUgPT0gV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGU7
CiAgICAgICAgIGlmICghdmlzaWJsZSkKICAgICAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0LT5wcm90ZWN0VmlzaWJsZVRpbGVUZXh0dXJlcygpOwotICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPnNldFZpc2libGUodmlzaWJsZSk7CisgICAgICAgIG1fbGF5ZXJUcmVlVmlldy5zZXRW
aXNpYmxlKHZpc2libGUpOwogICAgIH0KICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggYmM3YTUzZDA0NDdkYTdkMzIxZTA2YmI3MDI2OTEyMDUy
NTk5NGRjMC4uY2FjNmQ0ODgyOGNhZjEwZmZlNDQ2OGZhMmQ5ZGViZDgxMWI5NTE1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0zMiw2ICszMiw5IEBACiAj
ZGVmaW5lIFdlYlZpZXdJbXBsX2gKIAogI2luY2x1ZGUgIldlYk5hdmlnYXRpb25Qb2xpY3kuaCIK
KyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYkxh
eWVyVHJlZVZpZXcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJMYXllclRyZWVWaWV3Q2xpZW50
LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViUG9pbnQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJSZWN0LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViU2l6ZS5oIgpAQCAtNTAsNyArNTMsNiBA
QAogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaCIKICNpbmNsdWRlICJQYWdl
T3ZlcmxheUxpc3QuaCIKICNpbmNsdWRlICJVc2VyTWVkaWFDbGllbnRJbXBsLmgiCi0jaW5jbHVk
ZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTk0LDcgKzk2LDcgQEAgY2xhc3MgV2ViTW91c2VX
aGVlbEV2ZW50OwogY2xhc3MgV2ViU2V0dGluZ3NJbXBsOwogY2xhc3MgV2ViVG91Y2hFdmVudDsK
IAotY2xhc3MgV2ViVmlld0ltcGwgOiBwdWJsaWMgV2ViVmlldywgcHVibGljIFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdENsaWVudCwgcHVibGljIFJlZkNvdW50ZWQ8V2ViVmlld0ltcGw+IHsKK2Ns
YXNzIFdlYlZpZXdJbXBsIDogcHVibGljIFdlYlZpZXcsIHB1YmxpYyBXZWJMYXllclRyZWVWaWV3
Q2xpZW50LCBwdWJsaWMgUmVmQ291bnRlZDxXZWJWaWV3SW1wbD4gewogcHVibGljOgogICAgIGVu
dW0gQXV0b1pvb21UeXBlIHsKICAgICAgICAgRG91YmxlVGFwLApAQCAtMjQ2LDEzICsyNDgsMTMg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRQYWdlT3ZlcmxheShXZWJQYWdlT3Zlcmxh
eSosIGludCAvKiB6T3JkZXIgKi8pOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVQYWdlT3Zlcmxh
eShXZWJQYWdlT3ZlcmxheSopOwogCi0gICAgLy8gQ0NMYXllclRyZWVIb3N0Q2xpZW50CisgICAg
Ly8gV2ViTGF5ZXJUcmVlVmlld0NsaWVudAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBbmltYXRp
b25zKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xs
QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGZsb2F0KTsKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RD
b250ZXh0M0QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxBbmRTY2FsZShjb25zdCBX
ZWJTaXplJiwgZmxvYXQpOworICAgIHZpcnR1YWwgV2ViR3JhcGhpY3NDb250ZXh0M0QqIGNyZWF0
ZUNvbnRleHQzRCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWJpbmRHcmFwaGljc0NvbnRleHQo
Ym9vbCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpOwogICAgIHZp
cnR1YWwgdm9pZCBkaWRDb21wbGV0ZVN3YXBCdWZmZXJzKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2Vzcyk7CiAgICAgdmlydHVhbCB2b2lk
IHNjaGVkdWxlQ29tcG9zaXRlKCk7CiAKICAgICAvLyBXZWJWaWV3SW1wbApAQCAtNDM0LDcgKzQz
Niw3IEBAIHB1YmxpYzoKICAgICBib29sIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsK
ICAgICBib29sIHBhZ2VIYXNSVExTdHlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Um9vdEdyYXBo
aWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwotICAgIHZvaWQgc2V0Um9vdExheWVy
TmVlZHNEaXNwbGF5KCk7CisgICAgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5jKCk7
CiAgICAgdm9pZCBzY3JvbGxSb290TGF5ZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNj
cm9sbERlbHRhLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CiAgICAgdm9pZCBp
bnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgTm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0KiBub25Db21wb3NpdGVkQ29udGVudEhvc3QoKTsKQEAgLTQ1
MCw3ICs0NTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gd2UgY291bGQgbm90IHN1Y2Nlc3NmdWxseSBp
bnN0YW50aWF0ZSBhIGNvbnRleHQuCiAgICAgdmlydHVhbCBXZWJHcmFwaGljc0NvbnRleHQzRCog
Z3JhcGhpY3NDb250ZXh0M0QoKTsKIAotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q+IGNyZWF0ZUNvbXBvc2l0b3JHcmFwaGljc0NvbnRleHQzRCgpOworICAgIFBhc3NP
d25QdHI8V2ViR3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUNvbXBvc2l0b3JHcmFwaGljc0NvbnRl
eHQzRCgpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlz
aWJpbGl0eVN0YXRlLCBib29sKTsKIApAQCAtNjg4LDcgKzY5MCw4IEBAIHByaXZhdGU6CiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFdlYkNvcmU6OkludFJlY3QgbV9yb290
TGF5ZXJTY3JvbGxEYW1hZ2U7CiAgICAgT3duUHRyPE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdD4g
bV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Q7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdD4gbV9sYXllclRyZWVIb3N0OworICAgIFdlYkxheWVyVHJlZVZpZXcgbV9sYXllclRy
ZWVWaWV3OworICAgIFdlYkxheWVyIG1fcm9vdExheWVyOwogICAgIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqIG1fcm9vdEdyYXBoaWNzTGF5ZXI7CiAgICAgYm9vbCBtX2lzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZTsKICAgICBib29sIG1fY29tcG9zaXRvckNyZWF0aW9uRmFpbGVkOwpAQCAt
NzAzLDcgKzcwNiw3IEBAIHByaXZhdGU6CiAgICAgLy8gSWYgd2UgYXR0ZW1wdCB0byBmZXRjaCB0
aGUgb24tc2NyZWVuIEdyYXBoaWNzQ29udGV4dDNEIGJlZm9yZQogICAgIC8vIHRoZSBjb21wb3Np
dG9yIGhhcyBiZWVuIHR1cm5lZCBvbiwgd2UgbmVlZCB0byBpbnN0YW50aWF0ZSBpdAogICAgIC8v
IGVhcmx5LiBUaGlzIG1lbWJlciBob2xkcyBvbiB0byB0aGUgR0MzRCBpbiB0aGlzIGNhc2UuCi0g
ICAgUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEPiBtX3RlbXBvcmFyeU9uc2NyZWVu
R3JhcGhpY3NDb250ZXh0M0Q7CisgICAgT3duUHRyPFdlYkdyYXBoaWNzQ29udGV4dDNEPiBtX3Rl
bXBvcmFyeU9uc2NyZWVuR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgT3duUHRyPERldmljZU9yaWVu
dGF0aW9uQ2xpZW50UHJveHk+IG1fZGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eTsKICAgICBP
d25QdHI8R2VvbG9jYXRpb25DbGllbnRQcm94eT4gbV9nZW9sb2NhdGlvbkNsaWVudFByb3h5Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKaW5kZXgg
ZjYxZTk4NjQ4ODZlYjczNWRlY2YwN2RmZTNkMTI0MTVmZmZiYmI5YS4uZGMxZGZlNTM0MmJhMGNm
NGMyMzQ3YTU5YmQ2NmU2NmMzNzUwZTVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvV2ViRnJhbWVUZXN0LmNwcApAQCAtMTg2LDI3ICsxODYsMjcgQEAgVEVTVF9GKFdlYkZy
YW1lVGVzdCwgRGl2QXV0b1pvb21QYXJhbXNUZXN0KQogICAgIEVYUEVDVF9FUSh2U2Nyb2xsLCBz
Y3JvbGwueSk7CiAKICAgICAvLyBUZXN0IHpvb20gb3V0IHRvIG92ZXJ2aWV3IHNjYWxlLgotICAg
IHdlYlZpZXdJbXBsLT5hcHBseVNjcm9sbEFuZFNjYWxlKFdlYkNvcmU6OkludFNpemUoc2Nyb2xs
LngsIHNjcm9sbC55KSwgc2NhbGUgLyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCkpOwor
ICAgIHdlYlZpZXdJbXBsLT5hcHBseVNjcm9sbEFuZFNjYWxlKFdlYlNpemUoc2Nyb2xsLngsIHNj
cm9sbC55KSwgc2NhbGUgLyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCkpOwogICAgIHdl
YlZpZXdJbXBsLT5jb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JIaXRSZWN0KGRvdWJsZVRhcFBvaW50
LCBXZWJWaWV3SW1wbDo6RG91YmxlVGFwLCBzY2FsZSwgc2Nyb2xsKTsKICAgICBFWFBFQ1RfRkxP
QVRfRVEoMSwgc2NhbGUpOwogICAgIEVYUEVDVF9FUShXZWJQb2ludCgwLCAwKSwgc2Nyb2xsKTsK
IAogICAgIC8vIFRlc3RzIGZvciBjbGFtcGVkIHNjYWxpbmcuCiAgICAgLy8gVGVzdCBjbGFtcCB0
byBkZXZpY2Ugc2NhbGU6Ci0gICAgd2ViVmlld0ltcGwtPmFwcGx5U2Nyb2xsQW5kU2NhbGUoV2Vi
Q29yZTo6SW50U2l6ZShzY3JvbGwueCwgc2Nyb2xsLnkpLCBzY2FsZSAvIHdlYlZpZXdJbXBsLT5w
YWdlU2NhbGVGYWN0b3IoKSk7CisgICAgd2ViVmlld0ltcGwtPmFwcGx5U2Nyb2xsQW5kU2NhbGUo
V2ViU2l6ZShzY3JvbGwueCwgc2Nyb2xsLnkpLCBzY2FsZSAvIHdlYlZpZXdJbXBsLT5wYWdlU2Nh
bGVGYWN0b3IoKSk7CiAgICAgd2ViVmlld0ltcGwtPnNldERldmljZVNjYWxlRmFjdG9yKDIuNSk7
CiAgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZvckhpdFJlY3QoZG91Ymxl
VGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNjYWxlLCBzY3JvbGwpOwogICAgIEVY
UEVDVF9GTE9BVF9FUSgyLjUsIHNjYWxlKTsKIAogICAgIC8vIFRlc3QgY2xhbXAgdG8gbWluaW11
bSBzY2FsZToKLSAgICB3ZWJWaWV3SW1wbC0+YXBwbHlTY3JvbGxBbmRTY2FsZShXZWJDb3JlOjpJ
bnRTaXplKHNjcm9sbC54LCBzY3JvbGwueSksIHNjYWxlIC8gd2ViVmlld0ltcGwtPnBhZ2VTY2Fs
ZUZhY3RvcigpKTsKKyAgICB3ZWJWaWV3SW1wbC0+YXBwbHlTY3JvbGxBbmRTY2FsZShXZWJTaXpl
KHNjcm9sbC54LCBzY3JvbGwueSksIHNjYWxlIC8gd2ViVmlld0ltcGwtPnBhZ2VTY2FsZUZhY3Rv
cigpKTsKICAgICB3ZWJWaWV3SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKDEuNSAvIHdl
YlZpZXdJbXBsLT5kZXZpY2VTY2FsZUZhY3RvcigpLCA0IC8gd2ViVmlld0ltcGwtPmRldmljZVNj
YWxlRmFjdG9yKCkpOwogICAgIHdlYlZpZXdJbXBsLT5jb21wdXRlU2NhbGVBbmRTY3JvbGxGb3JI
aXRSZWN0KGRvdWJsZVRhcFBvaW50LCBXZWJWaWV3SW1wbDo6RG91YmxlVGFwLCBzY2FsZSwgc2Ny
b2xsKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMS41LCBzY2FsZSk7CiAgICAgRVhQRUNUX0VRKFdl
YlBvaW50KDAsIDApLCBzY3JvbGwpOwogCiAgICAgLy8gVGVzdCBjbGFtcCB0byBtYXhpbXVtIHNj
YWxlOgotICAgIHdlYlZpZXdJbXBsLT5hcHBseVNjcm9sbEFuZFNjYWxlKFdlYkNvcmU6OkludFNp
emUoc2Nyb2xsLngsIHNjcm9sbC55KSwgc2NhbGUgLyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFj
dG9yKCkpOworICAgIHdlYlZpZXdJbXBsLT5hcHBseVNjcm9sbEFuZFNjYWxlKFdlYlNpemUoc2Ny
b2xsLngsIHNjcm9sbC55KSwgc2NhbGUgLyB3ZWJWaWV3SW1wbC0+cGFnZVNjYWxlRmFjdG9yKCkp
OwogICAgIHdlYlZpZXdJbXBsLT5zZXREZXZpY2VTY2FsZUZhY3Rvcig0KTsKICAgICB3ZWJWaWV3
SW1wbC0+c2V0UGFnZVNjYWxlRmFjdG9yTGltaXRzKDAsIDMgLyB3ZWJWaWV3SW1wbC0+ZGV2aWNl
U2NhbGVGYWN0b3IoKSk7CiAgICAgd2ViVmlld0ltcGwtPmNvbXB1dGVTY2FsZUFuZFNjcm9sbEZv
ckhpdFJlY3QoZG91YmxlVGFwUG9pbnQsIFdlYlZpZXdJbXBsOjpEb3VibGVUYXAsIHNjYWxlLCBz
Y3JvbGwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJMYXll
clRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJMYXllclRlc3QuY3Bw
CmluZGV4IGUwY2FiODdiZGY1NWJhMjhmYjcyNjY3MDk2ODI2YjJkMDNjNjdjNDYuLjFlZWQ4MWFl
YTQxNmM5MGIxNGVlZWVjNGEzZDcyODE2ZWQxZWUzZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvV2ViTGF5ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAKQEAgLTU3LDYgKzU3LDggQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IFdlYlNpemUmIHNjcm9s
bERlbHRhLCBmbG9hdCBzY2FsZUZhY3RvcikgeyB9CiAgICAgdmlydHVhbCBXZWJHcmFwaGljc0Nv
bnRleHQzRCogY3JlYXRlQ29udGV4dDNEKCkgeyByZXR1cm4gQ29tcG9zaXRvckZha2VXZWJHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlKFdlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCkp
LmxlYWtQdHIoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWJpbmRHcmFwaGljc0NvbnRleHQo
Ym9vbCBzdWNjZXNzKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1l
KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlU3dhcEJ1ZmZlcnMoKSB7IH0KIH07
CiAKIGNsYXNzIE1vY2tXZWJDb250ZW50TGF5ZXJDbGllbnQgOiBwdWJsaWMgV2ViQ29udGVudExh
eWVyQ2xpZW50IHsKQEAgLTcyLDcgKzc0LDcgQEAgcHVibGljOgogICAgICAgICBXZWJLaXQ6Oldl
YkNvbXBvc2l0b3I6OmluaXRpYWxpemUoMCk7CiAgICAgICAgIG1fcm9vdExheWVyID0gV2ViTGF5
ZXI6OmNyZWF0ZSgpOwogICAgICAgICBFWFBFQ1RfQ0FMTChtX2NsaWVudCwgc2NoZWR1bGVDb21w
b3NpdGUoKSkuVGltZXMoQW55TnVtYmVyKCkpOwotICAgICAgICBtX3ZpZXcgPSBXZWJMYXllclRy
ZWVWaWV3OjpjcmVhdGUoJm1fY2xpZW50LCBtX3Jvb3RMYXllciwgV2ViTGF5ZXJUcmVlVmlldzo6
U2V0dGluZ3MoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKG1fdmlldy5pbml0aWFsaXplKCZtX2Ns
aWVudCwgbV9yb290TGF5ZXIsIFdlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzKCkpKTsKICAgICAg
ICAgTW9jazo6VmVyaWZ5QW5kQ2xlYXJFeHBlY3RhdGlvbnMoJm1fY2xpZW50KTsKICAgICB9CiAK
</data>
<flag name="review"
          id="131293"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>